From 4b00764ad4cb0e4b38c85ea39543cdbbfb8b091d Mon Sep 17 00:00:00 2001 From: "Steven M. Cohn" Date: Fri, 3 Apr 2020 13:33:27 -0400 Subject: [PATCH] Remove divider line along with last removed foonote --- OneMore/Commands/Footnotes/FootnoteEditor.cs | 50 ++++++++++++++------ 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/OneMore/Commands/Footnotes/FootnoteEditor.cs b/OneMore/Commands/Footnotes/FootnoteEditor.cs index ad7b91920e..c9be5633b5 100644 --- a/OneMore/Commands/Footnotes/FootnoteEditor.cs +++ b/OneMore/Commands/Footnotes/FootnoteEditor.cs @@ -262,6 +262,11 @@ private bool WriteFootnoteRef(string label) //======================================================================================= + /// + /// Refreshes the label numbers so that all references are sequentially ordered starting + /// at 1 from the top of the page. This is needed when adding a new reference prior to + /// existing ones or deleting a reference. + /// private void RefreshLabels() { var refs = FindSelectedReferences(page.Descendants(ns + "T"), true); @@ -340,9 +345,6 @@ private void RefreshLabels() note.Element.Remove(); } - // make sure divider is set - EnsureFootnoteFooter(); - var previous = divider; foreach (var note in notes) { @@ -359,6 +361,7 @@ private List FindSelectedReferences(IEnumerable roo ? @"vertical-align:super[;'""].*>\[(\d+)\]" : @"\[(\d+)\]"; + // find selected "[\d]" labels var list = roots.DescendantNodes().OfType() .Select(CData => new { @@ -375,6 +378,7 @@ private List FindSelectedReferences(IEnumerable roo }) .ToList(); + // find selected footnote text lines foreach (var root in roots) { var meta = root.Parent.Elements(ns + "Meta") @@ -386,15 +390,19 @@ private List FindSelectedReferences(IEnumerable roo }) .FirstOrDefault(); - if (!list.Any(e => e.Label == meta.Label)) + if ((meta != null) && !list.Any(e => e.Label == meta.Label)) { - list.Add(new FootnoteReference + var match = Regex.Match(meta.CData.Value, @"\[(\d+)\]"); + if (match.Success) { - CData = meta.CData, - Label = meta.Label, - Index = 0, - Length = 0 - }); + list.Add(new FootnoteReference + { + CData = meta.CData, + Label = meta.Label, + Index = match.Groups[1].Index, + Length = match.Groups[1].Length + }); + } } } @@ -413,10 +421,6 @@ private List FindSelectedReferences(IEnumerable roo /// public void RemoveFootnote() { - - System.Diagnostics.Debugger.Launch(); - - // find all selected paragraph var elements = page.Elements(ns + "Outline") .Where(e => e.Attributes("selected").Any()) @@ -485,7 +489,23 @@ public void RemoveFootnote() } } - RefreshLabels(); + // make sure divider is set + EnsureFootnoteFooter(); + + var remaining = divider.NodesAfterSelf().OfType().Elements(ns + "Meta") + .Any(e => e.Attribute("name").Value.Equals("omfootnote")); + + if (remaining) + { + // must be some footnotes so resequence them + RefreshLabels(); + } + else + { + // no footnotes left so remove divider line + divider.Remove(); + } + manager.UpdatePageContent(page); }