/// <summary> /// Adds a new footnote to the page, possibly renumbering existing footnotes /// to ensure all foonotes are in sequential order from top to bottom. /// </summary> public void AddFootnote() { var element = page.Elements(ns + "Outline") .Where(e => e.Attributes("selected").Any()) .Descendants(ns + "T") .Where(e => e.Attribute("selected")?.Value == "all") .LastOrDefault(); if (element == null) { logger.WriteLine($"{nameof(FootnoteEditor.AddFootnote)} could not find a selected outline"); return; } // last selected paragraph OE element = element.Parent; if (!EnsureFootnoteFooter()) { return; } var label = WriteFootnoteText(element.Attribute("objectID").Value); if (WriteFootnoteRef(label)) { RefreshLabels(); manager.UpdatePageContent(page); } }
public void Execute(bool upper) { using (var manager = new ApplicationManager()) { var page = manager.CurrentPage(); var ns = page.GetNamespaceOfPrefix("one"); var selections = from e in page.Descendants(ns + "OE").Elements(ns + "T") where e.Attributes("selected").Any(a => a.Value.Equals("all")) select e; foreach (var selection in selections) { if (selection.FirstNode?.NodeType == XmlNodeType.CDATA) { var wrapper = XElement.Parse("<x>" + selection.FirstNode.Parent.Value + "</x>"); foreach (var part in wrapper.DescendantNodes().OfType <XText>().ToList()) { part.ReplaceWith(upper ? part.Value.ToUpper() : part.Value.ToLower()); } selection.FirstNode.ReplaceWith( new XCData( string.Concat(wrapper.Nodes().Select(x => x.ToString()).ToArray()) ) ); } } manager.UpdatePageContent(page); } }
public void Execute() { logger.WriteLine("NoSpellCheckCommand.Execute()"); using (var manager = new ApplicationManager()) { var page = manager.CurrentPage(); if (page != null) { var ns = page.GetNamespaceOfPrefix("one"); // remove all occurances of the "lang=" attribute across the entire page var list = from e in page.DescendantsAndSelf() where e.Attributes().Any(a => a.Name.LocalName.ToLower().Equals("lang")) select e; if (list?.Count() > 0) { foreach (var e in list) { e.Attribute("lang").Remove(); } } // set lang=yo for the page and the page title page.Add(new XAttribute("lang", "yo")); page.Element(ns + "Title")?.Add(new XAttribute("lang", "yo")); manager.UpdatePageContent(page); } } }
private void _Execute(char c) { //System.Diagnostics.Debugger.Launch(); using (var manager = new ApplicationManager()) { var page = manager.CurrentPage(); var ns = page.GetNamespaceOfPrefix("one"); var current = (from e in page.Descendants(ns + "OE") where e.Elements(ns + "T").Attributes("selected").Any(a => a.Value.Equals("all")) select e).FirstOrDefault(); if (current != null) { string line = string.Empty.PadRight(90, c); EnsurePageWidth(page, line, (IntPtr)manager.Application.Windows.CurrentWindow.WindowHandle); current.AddAfterSelf( new XElement(ns + "OE", new XElement(ns + "T", new XAttribute("style", "font-family:'Courier New';font-size:10.0pt"), new XCData(line + "<br/>") ) )); } manager.UpdatePageContent(page); } }
private void InsertLine(char c) { using (var manager = new ApplicationManager()) { var page = new Page(manager.CurrentPage()); var ns = page.Namespace; var dark = page.GetPageColor(out _, out _).GetBrightness() < 0.5; var color = dark ? "#D0D0D0" : "#202020"; var current = (from e in page.Root.Descendants(ns + "OE") where e.Elements(ns + "T").Attributes("selected").Any(a => a.Value.Equals("all")) select e).FirstOrDefault(); if (current != null) { string line = string.Empty.PadRight(LineCharCount, c); page.EnsurePageWidth(line, "Courier New", 10f, manager.WindowHandle); current.AddAfterSelf( new XElement(ns + "OE", new XElement(ns + "T", new XAttribute("style", $"font-family:'Courier New';font-size:10.0pt;color:{color}"), new XCData(line + "<br/>") ) )); manager.UpdatePageContent(page.Root); } } }
public void Execute() { logger.WriteLine(nameof(NameUrlsCommand) + ".Execute()"); try { Page page; using (var manager = new ApplicationManager()) { page = new Page(manager.CurrentPage()); } if (NameUrls(page)) { using (var manager = new ApplicationManager()) { manager.UpdatePageContent(page.Root); } } } catch (Exception exc) { logger.WriteLine($"Error executing {nameof(NameUrlsCommand)}", exc); } }
public void Execute() { try { using (var manager = new ApplicationManager()) { page = new Page(manager.CurrentPage()); if (page != null) { var styles = new StyleProvider().GetStyles(); if (ApplyStyles(styles)) { ApplyToLists(styles); if (page.GetPageColor(out _, out _).GetBrightness() < 0.5) { ApplyToHyperlinks(); } manager.UpdatePageContent(page.Root); } } } } catch (Exception exc) { logger.WriteLine($"Error executing {nameof(ApplyStylesCommand)}", exc); } }
public void Execute() { using (var dialog = new EmojiDialog()) { var result = dialog.ShowDialog(owner); if (result == DialogResult.OK) { var codes = dialog.GetSelectedCodes(); using (var manager = new ApplicationManager()) { var page = manager.CurrentPage(); var ns = page.GetNamespaceOfPrefix("one"); var title = page.Element(ns + "Title")? .Elements(ns + "OE")?.Elements(ns + "T").FirstOrDefault(); if (title != null) { if (title.FirstNode?.NodeType == XmlNodeType.CDATA) { var wrapper = XElement.Parse("<x>" + title.FirstNode.Parent.Value + "</x>"); var wns = wrapper.GetDefaultNamespace(); var emojii = (from e in wrapper.Elements(wns + "span") where e.Attributes("style").Any(a => a.Value.Contains("Segoe UI Emoji")) select e).FirstOrDefault(); if (emojii != null) { emojii.Value = string.Join(string.Empty, codes) + emojii.Value; } else { wrapper.AddFirst(new XElement("span", new XAttribute("style", "font-family:'Segoe UI Emoji';font-size:16pt;"), string.Join(string.Empty, codes) )); } var decoded = string.Concat(wrapper.Nodes() .Select(x => x.ToString()).ToArray()) .Replace("&", "&"); title.FirstNode.ReplaceWith(new XCData(decoded)); manager.UpdatePageContent(page); } } } } } }
private void ResizeOne(XElement image) { var size = image.Element(ns + "Size"); int width = (int)decimal.Parse(size.Attribute("width").Value); int height = (int)decimal.Parse(size.Attribute("height").Value); using (var dialog = new ResizeImagesDialog(width, height)) { dialog.SetOriginalSize(GetOriginalSize(image, ns)); var result = dialog.ShowDialog(owner); if (result == DialogResult.OK) { size.Attribute("width").Value = dialog.WidthPixels.ToString(); size.Attribute("height").Value = dialog.HeightPixels.ToString(); manager.UpdatePageContent(page.Root); } } }
private void _Execute() { using (var manager = new ApplicationManager()) { page = manager.CurrentPage(); if (page != null) { ns = page.GetNamespaceOfPrefix("one"); Evaluate(manager); manager.UpdatePageContent(page); } } }
public void Execute(bool increase = true) { using (var manager = new ApplicationManager()) { page = manager.CurrentPage(); if (page != null) { ns = page.GetNamespaceOfPrefix("one"); Evaluate(increase); manager.UpdatePageContent(page); } } }
private void InsertExpand() { using (var manager = new ApplicationManager()) { var page = new Page(manager.CurrentPage()); var ns = page.Namespace; if (!page.ConfirmBodyContext(true)) { return; } var table = new Table(ns); table.SetBordersVisible(true); table.AddColumn(550, true); var row = table.AddRow(); row.SetCellContent(0, "Your content here"); var expand = new XElement(ns + "OE", new XAttribute("explicitExpandCollapseEnabled", "true"), new XElement(ns + "T", new XCData("Your title here")), new XElement(ns + "OEChildren", new XElement(ns + "OE", table.Root), new XElement(ns + "OE", new XElement(ns + "T", new XCData(string.Empty))) ) ); // find the first (the default) paragraph style so we can apply it to the // new content; this help when the page background is dark var quickdef = page.Root.Elements(ns + "QuickStyleDef") .Where(e => e.Attribute("name").Value == "p") .Select(e => e.Attribute("index")?.Value) .FirstOrDefault(); if (quickdef != null) { expand.Add(new XAttribute("quickStyleIndex", quickdef)); foreach (var oe in expand.Descendants(ns + "OE")) { oe.Add(new XAttribute("quickStyleIndex", quickdef)); } } page.AddNextParagraph(expand); manager.UpdatePageContent(page.Root); } }
public void Execute() { using (var manager = new ApplicationManager()) { var page = new Page(manager.CurrentPage(Microsoft.Office.Interop.OneNote.PageInfo.piAll)); var ns = page.Namespace; var image = page.Root.Descendants(ns + "Image")? .Where(e => e.Attribute("selected").Value.Equals("all")) .FirstOrDefault(); if (image != null) { if (AlreadyCaptioned(image, ns, manager)) { return; } var table = new Table(ns); table.AddColumn(0f); // OneNote will set width accordingly var cdata = new XCData("Caption"); var row = table.AddRow(); row.SetCellContent(0, new XElement(ns + "OEChildren", new XElement(ns + "OE", new XAttribute("alignment", "center"), image), new XElement(ns + "OE", new XAttribute("alignment", "center"), new XElement(ns + "Meta", new XAttribute("name", "om"), new XAttribute("content", "caption")), new XElement(ns + "T", cdata) ) )); var style = GetStyle(); new Stylizer(style).ApplyStyle(cdata); image.ReplaceWith(table.Root); manager.UpdatePageContent(page.Root); } } }
private void _Execute() { DialogResult result = DialogResult.None; string whatText; string withText; bool matchCase; using (var dialog = new SearchAndReplaceDialog()) { result = dialog.ShowDialog(); whatText = dialog.WhatText; withText = dialog.WithText; matchCase = dialog.MatchCase; } if (result == DialogResult.OK) { using (var manager = new ApplicationManager()) { var page = manager.CurrentPage(); var ns = page.GetNamespaceOfPrefix("one"); var ranges = page.Elements(ns + "Outline")?.Descendants(ns + "T") .Where(e => !e.DescendantNodes().OfType <XCData>().Any(d => d.Value.Equals(string.Empty))); if (ranges != null) { var count = 0; foreach (var range in ranges) { count += Replace(range, whatText, withText, matchCase); } manager.UpdatePageContent(page); var msg = count == 1 ? "occurance was" : "occurances were"; MessageBox.Show($"{count} {msg} replaced", "Replaced", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } }
public void Execute() { logger.WriteLine($"{nameof(ChangePageColorCommand)}.Execute()"); Page page = null; using (var manager = new ApplicationManager()) { page = new Page(manager.CurrentPage()); } using (var dialog = new ChangePageColorDialog(page.GetPageColor(out _, out _))) { if (dialog.ShowDialog(owner) == DialogResult.OK) { var element = page.Root .Elements(page.Namespace + "PageSettings") .FirstOrDefault(); if (element != null) { var attr = element.Attribute("color"); if (attr != null) { attr.Value = dialog.PageColor; } else { element.Add(new XAttribute("color", dialog.PageColor)); } using (var manager = new ApplicationManager()) { manager.UpdatePageContent(page.Root); } } else { logger.WriteLine("ChangePageColor failed because PageSettings not found"); } } } }
public override void Execute(params object[] args) { // transform RTF and Xaml data on clipboard to HTML var html = PrepareClipboard(); //logger.WriteLine(html); #if H if (html != null) { // TODO: find and replace selected region logger.WriteLine("Adding HTML blcok"); using (var manager = new ApplicationManager()) { var page = new OM.Page(manager.CurrentPage(PageInfo.piBasic)); var ns = page.Namespace; var outline = page.Root.Elements(ns + "Outline").Elements(ns + "OEChildren").FirstOrDefault(); outline.Add(new XElement(ns + "HTMLBlock", new XElement(ns + "Data", new XCData(html)) )); manager.UpdatePageContent(page.Root); return; } } #endif // paste what's remaining from clipboard, letting OneNote do the // heavy lifting of converting the HTML into one:xml schema using (var one = new OneNote()) { // since the Hotkey message loop is watching all input, explicitly setting // focus on the OneNote main window provides a direct path for SendKeys Native.SetForegroundWindow(one.WindowHandle); System.Windows.Forms.SendKeys.SendWait("^(v)"); } }
private void Update(object sender, EventArgs e) { var result = MessageBox.Show( "Are you sure? This may corrupt the current page.", "Feelin lucky punk?", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); if (result == DialogResult.OK) { try { var page = XElement.Parse(pageBox.Text); manager.UpdatePageContent(page); Close(); } catch (Exception exc) { logger.WriteLine("Error updating page content", exc); } } }
public void Execute(int selectedIndex) { using (var manager = new ApplicationManager()) { page = manager.CurrentPage(); if (page != null) { ns = page.GetNamespaceOfPrefix("one"); style = new StyleProvider().GetStyle(selectedIndex); stylizer = new Stylizer(style); bool success = style.StyleType == StyleType.Character ? StylizeWords() : StylizeParagraphs(); if (success) { manager.UpdatePageContent(page); } } } }
public void Execute(int delta) { try { using (var manager = new ApplicationManager()) { page = manager.CurrentPage(); if (page != null) { this.delta = delta; // determine if range is selected or entire page var ns = page.GetNamespaceOfPrefix("one"); selected = page.Element(ns + "Outline").Descendants(ns + "T") .Where(e => e.Attributes("selected").Any(a => a.Value.Equals("all"))) .Any(e => e.GetCData().Value.Length > 0); //System.Diagnostics.Debugger.Launch(); var count = AlterByName(); count += AlterElementsByValue(); count += AlterCDataByValue(); if (count > 0) { manager.UpdatePageContent(page); } } } } catch (Exception exc) { logger.WriteLine("Error executing AlterSizeCommand", exc); } }
public void Execute() { try { using (var manager = new ApplicationManager()) { page = manager.CurrentPage(); if (page != null) { ns = page.GetNamespaceOfPrefix("one"); pageId = page.Attribute("ID").Value; CollectHeadingDefinitions(); Evaluate(manager); manager.UpdatePageContent(page); } } } catch (Exception exc) { logger.WriteLine($"Error executing {nameof(InsertTocCommand)}", exc); } }
private void InsertInfoBlock(bool warning) { using (var manager = new ApplicationManager()) { var page = new Page(manager.CurrentPage()); var ns = page.Namespace; var dark = page.GetPageColor(out _, out var black).GetBrightness() < 0.5; string title, symbol, titleColor, symbolColor, textColor, shading; if (warning) { title = "Warning"; symbol = "\u26a0"; symbolColor = black ? WarnSymbolBlack : (dark ? WarnSymbolBlack : WarnSymbolColor); shading = black ? WarnShadingBlack : (dark ? WarnShadingDark : WarnShading); } else { title = "Information"; symbol = "\U0001F6C8"; symbolColor = black ? InfoSymbolBlack : InfoSymbolColor; shading = black ? InfoShadingBlack : (dark ? InfoShadingDark : InfoShading); } titleColor = black ? TItleBlack : (dark ? TItleDark : TitleColor); textColor = black ? TextBlack : (dark ? TextDark : TextColor); // table... var inner = new Table(ns); inner.AddColumn(37f, true); inner.AddColumn(100f); var row = inner.AddRow(); row.SetCellContent(0, new XElement(ns + "OE", new XAttribute("alignment", "center"), new XAttribute("style", $"font-family:'Segoe UI Symbol';font-size:22.0pt;color:{symbolColor};
text-align:center"), new XElement(ns + "T", new XCData($"<span style='font-weight:bold'>{symbol}</span>")) )); row.SetCellContent(1, new XElement(ns + "OEChildren", new XElement(ns + "OE", new XAttribute("style", $"font-family:'Segoe UI';font-size:11.0pt;color:{titleColor}"), new XElement(ns + "T", new XCData($"<span style='font-weight:bold'>{title}</span>")) ), new XElement(ns + "OE", new XAttribute("style", $"font-family:'Segoe UI';font-size:11.0pt;color:{textColor}"), new XElement(ns + "T", new XCData("Your content here...")) ))); var outer = new Table(ns, shading); outer.SetBordersVisible(true); outer.AddColumn(600f, true); row = outer.AddRow(); row.SetCellContent(0, inner); page.AddNextParagraph(outer.Root); manager.UpdatePageContent(page.Root); } }
public void Execute() { using (var manager = new ApplicationManager()) { var section = manager.CurrentSection(); ns = section.GetNamespaceOfPrefix("one"); // find first selected - active page var active = section.Elements(ns + "Page") .Where(e => e.Attributes("isCurrentlyViewed").Any(a => a.Value.Equals("true"))) .FirstOrDefault(); if (active == null) { UIHelper.ShowMessage(manager.Window, "At least two pages must be selected to merge"); return; } var selections = section.Elements(ns + "Page") .Where(e => e.Attributes("isCurrentlyViewed").Count() == 0 && e.Attributes("selected").Any(a => a.Value.Equals("all"))); if (active == null) { UIHelper.ShowMessage(manager.Window, "At least two pages must be selected to merge"); return; } // get first selected (active) page and reference its quick styles, outline, size page = manager.GetPage(active.Attribute("ID").Value); quickies = page.Elements(ns + "QuickStyleDef") .Select(p => new QuickRef(p)) .ToList(); var offset = GetPageBottomOffset(); // track running bottom as we add new outlines var maxOffset = offset; // find maximum z-offset var z = page.Elements(ns + "Outline").Elements(ns + "Position") .Attributes("z").Max(a => int.Parse(a.Value)) + 1; // merge each of the subsequently selected pages into the active page foreach (var selection in selections.ToList()) { var childPage = manager.GetPage(selection.Attribute("ID").Value); var styles = MergeQuickStyles(childPage); var topOffset = childPage.Elements(ns + "Outline") .Elements(ns + "Position").Min(p => double.Parse(p.Attribute("y").Value)); foreach (var childOutline in childPage.Elements(ns + "Outline")) { // adjust position relative to new parent page outlines var position = childOutline.Elements(ns + "Position").FirstOrDefault(); var y = double.Parse(position.Attribute("y").Value) - topOffset + offset + OutlineMargin; position.Attribute("y").Value = y.ToString("#0.0"); // keep track of lowest bottom var size = childOutline.Elements(ns + "Size").FirstOrDefault(); var bottom = y + double.Parse(size.Attribute("height").Value); if (bottom > maxOffset) { maxOffset = bottom; } position.Attribute("z").Value = z.ToString(); z++; // remove its IDs so the page can apply its own childOutline.Attributes("objectID").Remove(); childOutline.Descendants().Attributes("objectID").Remove(); AdjustQuickStyles(styles, childOutline); page.Add(childOutline); } if (maxOffset > offset) { offset = maxOffset; } } // update page and section hierarchy manager.UpdatePageContent(page); foreach (var selection in selections) { manager.DeleteHierarchy(selection.Attribute("ID").Value); } } }
//<one:T><![CDATA[One two thre]]></one:T> //<one:T selected="all"><![CDATA[]]></one:T> //<one:T><![CDATA[e]]></one:T> private void EvaluatePage(XElement page, CustomStyle style, ApplicationManager manager) { var ns = page.GetNamespaceOfPrefix("one"); // find all selections; may be multiple if text is selected across multiple paragraphs var selections = page.Descendants(ns + "T") .Where(e => e.Attributes("selected").Any(a => a.Value.Equals("all"))); if (selections != null) { foreach (var selection in selections) { var phrase = new Phrase(selection); if (phrase.IsEmpty) { // infer selected word by combining adjacent non-whitespace characters to // the left of the cursor and to the right of the cursor into a single word string word = string.Empty; if ((selection.PreviousNode != null) && (selection.PreviousNode is XElement)) { var prev = new Phrase(selection.PreviousNode as XElement); if (!prev.EndsWithSpace) { word += prev.ExtractLastWord(); } } if ((selection.NextNode != null) && (selection.NextNode is XElement)) { var next = new Phrase(selection.NextNode as XElement); if (!next.StartsWithSpace) { word += next.ExtractFirstWord(); } } if (word.Length > 0) { phrase.CData.Value = new XElement("span", new XAttribute("style", style.ToCss(true)), word) .ToString(SaveOptions.DisableFormatting); } else { // cannot apply style to an empty CDATA because OneNote will // strip the styling off, so instead need to apply to parent one:T instead var span = selection.Attribute("style"); if (span == null) { selection.Add(new XAttribute("style", style.ToCss(true))); } else { span.Value = style.ToCss(true); } } } else { phrase.ClearFormatting(); phrase.CData.Value = new XElement("span", new XAttribute("style", style.ToCss(true)), phrase.CData.Value) .ToString(SaveOptions.DisableFormatting); } // apply spacing to parent OE; we may have selected text across multiple OEs // but we'll just reapply if all Ts are within the same OE, no biggie var oe = selection.Parent; ApplySpacing(oe, "spaceBefore", style.SpaceBefore); ApplySpacing(oe, "spaceAfter", style.SpaceAfter); } manager.UpdatePageContent(page); } }
public void Execute(bool upper) { using (var manager = new ApplicationManager()) { var page = manager.CurrentPage(); var ns = page.GetNamespaceOfPrefix("one"); var cursor = page.Descendants(ns + "T") .Where(e => e.Attributes("selected").Any(a => a.Value.Equals("all")) && e.FirstNode.NodeType == XmlNodeType.CDATA && ((XCData)e.FirstNode).Value.Length == 0) .FirstOrDefault(); if (cursor != null) { var prev = cursor.PreviousNode as XElement; if ((prev != null) && prev.GetCData().EndsWithWhitespace()) { prev = null; } var next = cursor.NextNode as XElement; if ((next != null) && next.GetCData().StartsWithWhitespace()) { next = null; } if ((prev != null) && (next != null)) { var word = new StringBuilder(); if (prev != null) { if (!prev.GetCData().EndsWithWhitespace()) { word.Append(prev.ExtractLastWord()); if (prev.GetCData().Value.Length == 0) { prev.Remove(); } } } if (next != null) { if (!next.GetCData().StartsWithWhitespace()) { word.Append(next.ExtractFirstWord()); if (next.GetCData().Value.Length == 0) { next.Remove(); } } } if (word.Length > 0) { var text = upper ? word.ToString().ToUpper() : word.ToString().ToLower(); cursor.DescendantNodes() .OfType <XCData>() .First() .ReplaceWith(new XCData(text)); } } } else { var selections = from e in page.Descendants(ns + "OE").Elements(ns + "T") where e.Attributes("selected").Any(a => a.Value.Equals("all")) select e; if (selections?.Any() == true) { foreach (var selection in selections) { if (selection.FirstNode?.NodeType == XmlNodeType.CDATA) { var wrapper = XElement.Parse("<x>" + selection.FirstNode.Parent.Value + "</x>"); foreach (var part in wrapper.DescendantNodes().OfType <XText>().ToList()) { part.ReplaceWith(upper ? part.Value.ToUpper() : part.Value.ToLower()); } selection.FirstNode.ReplaceWith( new XCData( string.Concat(wrapper.Nodes().Select(x => x.ToString()).ToArray()) )); } } } } manager.UpdatePageContent(page); } }
private void InsertStatus(StatusColor statusColor) { using (var manager = new ApplicationManager()) { var page = new Page(manager.CurrentPage()); var ns = page.Namespace; var elements = page.Root.Descendants(ns + "T") .Where(e => e.Attribute("selected")?.Value == "all"); if (elements != null) { string color = "black"; string background = "yellow"; switch (statusColor) { case StatusColor.Gray: color = "white"; background = "#42526E"; break; case StatusColor.Red: color = "white"; background = "#BF2600"; break; case StatusColor.Yellow: color = "172B4D"; background = "#FF991F"; break; case StatusColor.Green: color = "white"; background = "#00875A"; break; case StatusColor.Blue: color = "white"; background = "#0052CC"; break; } var colors = $"color:{color};background:{background}"; var text = " STATUS "; var content = new XElement(ns + "T", new XCData( new XElement("span", new XAttribute("style", $"font-family:'Segoe UI';font-size:10.0pt;font-weight:bold;{colors}"), text ).ToString(SaveOptions.DisableFormatting) + " ") ); page.ReplaceSelectedWithContent(content); manager.UpdatePageContent(page.Root); } } }
private void SearchAndReplace() { DialogResult result = DialogResult.None; string whatText; string withText; bool matchCase; using (var dialog = new SearchAndReplaceDialog()) { result = dialog.ShowDialog(owner); whatText = dialog.WhatText; withText = dialog.WithText; matchCase = dialog.MatchCase; } if (result == DialogResult.OK) { using (var manager = new ApplicationManager()) { var page = manager.CurrentPage(); var ns = page.GetNamespaceOfPrefix("one"); var elements = page.Elements(ns + "Outline").Descendants(ns + "T") .Select(e => e.Parent) .Distinct() .Cast <XElement>(); if (elements.Any()) { // if there is a selection range... var countRange = elements.Elements(ns + "T").Count(e => e.Attribute("selected")?.Value == "all" && e.FirstNode is XCData && (e.FirstNode as XCData).Value.Length > 0); if (countRange > 0) { // ...then further filter out only the selected range elements = elements.Elements(ns + "T") .Where(t => t.Attribute("selected")?.Value == "all") .Select(t => t.Parent); } } if (elements.Any()) { int count = 0; var editor = new SearchAndReplaceEditor(ns, whatText, withText, matchCase); // use ToList to avoid null ref exception while updating IEnumerated collection var list = elements.ToList(); for (var i = 0; i < list.Count(); i++) { count += editor.SearchAndReplace(list[i]); } manager.UpdatePageContent(page); //var msg = count == 1 ? "occurance was" : "occurances were"; //MessageBox.Show($"{count} {msg} replaced", "Replaced", // MessageBoxButtons.OK, MessageBoxIcon.Information); } } } }
private void InsertCodeBlock() { using (var manager = new ApplicationManager()) { var page = new Page(manager.CurrentPage()); var ns = page.Namespace; var dark = page.GetPageColor(out _, out var black).GetBrightness() < 0.5; // table... string shading, titleColor, textColor; if (dark) { shading = ShadingDark; titleColor = TitleColorDark; textColor = TextColorDark; } else { shading = black ? ShadingBlack : Shading; titleColor = TitleColor; textColor = TextColor; } var table = new Table(ns); table.SetBordersVisible(true); table.AddColumn(600f, true); // title row... var row = table.AddRow(); row.SetCellContent(0, new XElement(ns + "OE", new XAttribute("style", $"font-family:'Segoe UI';font-size:11.0pt;color:{titleColor}"), new XElement(ns + "T", new XCData("<span style='font-weight:bold'>Code</span>")) )); row.SetCellShading(0, shading); // body row... row = table.AddRow(); row.SetCellContent(0, new XElement(ns + "OEChildren", new XElement(ns + "OE", new XAttribute("style", $"font-family:Consolas;font-size:10.0pt;color:{textColor}"), new XElement(ns + "T", new XCData("")) ), new XElement(ns + "OE", new XAttribute("style", $"font-family:Consolas;font-size:10.0pt;color:{textColor}"), new XElement(ns + "T", new XCData("Your code here...")) ), new XElement(ns + "OE", new XAttribute("style", $"font-family:Consolas;font-size:10.0pt;color:{textColor}"), new XElement(ns + "T", new XCData("")) ) )); page.AddNextParagraph(table.Root); manager.UpdatePageContent(page.Root); } }
public void Execute() { using (var manager = new ApplicationManager()) { var page = manager.CurrentPage(); var ns = page.GetNamespaceOfPrefix("one"); var selections = from e in page.Elements(ns + "Outline").Descendants(ns + "T") where e.Attributes("selected").Any(a => a.Value.Equals("all")) select e; if (selections != null) { if (selections.Count() == 1) { if (selections.First().GetCData().Value.Length == 0) { // if zero-length selection then select all content selections = page.Elements(ns + "Outline").Descendants(ns + "T"); } } int count = 0; foreach (var selection in selections) { if ((selection == selection.Parent.LastNode) && (selection.LastNode?.NodeType == XmlNodeType.CDATA)) { var cdata = selection.GetCData(); if (cdata.Value.Length > 0) { var wrapper = cdata.GetWrapper(); var text = wrapper.DescendantNodes().OfType <XText>().LastOrDefault(); if (text?.Value.Length > 0) { var match = Regex.Match(text.Value, @"([\s]| | )+$"); if (match.Success) { text.ReplaceWith(text.Value.Substring(0, match.Index)); selection.FirstNode.ReplaceWith( new XCData(wrapper.GetInnerXml())); count++; } } } } } if (count > 0) { manager.UpdatePageContent(page); } logger.WriteLine($"Lines trimmed:{count}"); } } }
public void Execute() { using (var manager = new ApplicationManager()) { page = new Page(manager.CurrentPage(Microsoft.Office.Interop.OneNote.PageInfo.piAll)); ns = page.Namespace; var image = page.Root.Descendants(ns + "Image")? .Where(e => e.Attribute("selected")?.Value == "all") .FirstOrDefault(); if (image != null) { if (AlreadyCaptioned(image)) { return; } image.Attribute("selected").Remove(); var table = new Table(ns); table.AddColumn(0f); // OneNote will set width accordingly var cdata = new XCData("Caption"); var row = table.AddRow(); row.SetCellContent(0, new XElement(ns + "OEChildren", new XElement(ns + "OE", new XAttribute("alignment", "center"), image), new XElement(ns + "OE", new XAttribute("alignment", "center"), new XElement(ns + "Meta", new XAttribute("name", "om"), new XAttribute("content", "caption")), new XElement(ns + "T", new XAttribute("selected", "all"), cdata) ) )); var style = GetStyle(); new Stylizer(style).ApplyStyle(cdata); if (image.Parent.Name.LocalName.Equals("Page")) { // image.ReplaceWith seems to insert the new Outline but doesn't remove the top // level image, so force the deletion by its objectID var imageId = image.Attribute("objectID").Value; manager.Application.DeletePageContent(page.Root.Attribute("ID").Value, imageId); image.ReplaceWith(WrapInOutline(table.Root, image)); } else { image.ReplaceWith(table.Root); } manager.UpdatePageContent(page.Root); } } }