Skip to content

Commit

Permalink
Escape XML for Nav headings (#1619)
Browse files Browse the repository at this point in the history
  • Loading branch information
stevencohn authored Oct 19, 2024
1 parent 47500da commit 32ad7f5
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 18 deletions.
19 changes: 10 additions & 9 deletions OneMore/Commands/Navigator/NavigatorWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -326,16 +326,17 @@ private async Task LoadPageHeadings(string pageID)
await using var one = new OneNote();
var page = await one.GetPage(pageID ?? one.CurrentPageId, OneNote.PageDetail.Basic);

logger.Verbose();
logger.Verbose($"LoadPageHeadings [{page.Title}]");
logger.StartClock();

var headings = page.GetHeadings(one, linked: false);
logger.VerboseTime($"GetHeadings <---", keepRunning: true);
logger.DebugTime($"GetHeadings <---", keepRunning: true);

// need to escape ampersand because it is used to indicate keyboard accelerators
var title = page.Title.Replace("&", "&&");
pageHeadLabel.Text = page.TitleID == null
? Resx.phrase_QuickNote
: page.Title;
: title;

pageBox.Controls.Clear();

Expand All @@ -355,7 +356,7 @@ private async Task LoadPageHeadings(string pageID)
// defer URL lookup until clicked
Link = string.Empty,
Root = root,
Text = page.Title
Text = title
});
}
}
Expand All @@ -369,15 +370,15 @@ private async Task LoadPageHeadings(string pageID)
var font = new Font("Segoe UI", 8.5F, FontStyle.Regular, GraphicsUnit.Point);
trash.Add(font);

logger.VerboseTime($"suspending layout", keepRunning: true);
logger.DebugTime($"suspending layout", keepRunning: true);
pageBox.SuspendLayout();

var margin = SystemInformation.VerticalScrollBarWidth * 2;

foreach (var heading in headings)
{
var wrapper = new XElement("wrapper", heading.Text);
var text = wrapper.TextValue();
var wrapper = new XElement("T", new XCData(heading.Text));
var text = wrapper.TextValue(true);

var leftpad = heading.Level * HeaderIndent;
var leftmar = leftpad + 4;
Expand Down Expand Up @@ -423,11 +424,11 @@ private async Task LoadPageHeadings(string pageID)
}

pageBox.ResumeLayout();
logger.VerboseTime($"resumed layout", keepRunning: true);
logger.DebugTime($"resumed layout", keepRunning: true);

await UpdateTitles(page);

logger.VerboseTime("LoadPageHeadings done");
logger.DebugTime("LoadPageHeadings done");
}


Expand Down
27 changes: 18 additions & 9 deletions OneMore/Helpers/Extensions/XElementExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -462,18 +462,27 @@ public static string TextValue(this XElement element, bool deep = false)
{
if (deep)
{
var clone = element.Clone();

var pattern = new Regex(@"\<[^<]+\>[^<]+\<[^<]+\>", RegexOptions.Compiled);
var data = clone.DescendantNodes().OfType<XCData>()
.Where(d => pattern.IsMatch(d.Value));

foreach (var cdata in data)
var text = string.Empty;
var cdatas = element.DescendantNodes().OfType<XCData>();
foreach (var cdata in cdatas)
{
cdata.Value = cdata.GetWrapper().Value;
if (cdata.Value.Contains("<span "))
{
var wrap = cdata.GetWrapper();
foreach (var node in wrap.Nodes())
{
text = node is XElement txt
? $"{text}{txt.Value}"
: $"{text}{((XText)node).Value}";
}
}
else
{
text = $"{text}{cdata.Value}";
}
}

return clone.Value;
return text;
}

return element.Value.ToXmlWrapper().Value;
Expand Down

0 comments on commit 32ad7f5

Please sign in to comment.