Exemple #1
0
        /// <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);
            }
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        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);
                }
            }
        }
Exemple #4
0
        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);
            }
        }
Exemple #5
0
        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);
                }
            }
        }
Exemple #6
0
        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);
            }
        }
Exemple #7
0
        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("&amp;", "&");

                                title.FirstNode.ReplaceWith(new XCData(decoded));
                                manager.UpdatePageContent(page);
                            }
                        }
                    }
                }
            }
        }
Exemple #9
0
        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);
                }
            }
        }
Exemple #10
0
        private void _Execute()
        {
            using (var manager = new ApplicationManager())
            {
                page = manager.CurrentPage();
                if (page != null)
                {
                    ns = page.GetNamespaceOfPrefix("one");

                    Evaluate(manager);

                    manager.UpdatePageContent(page);
                }
            }
        }
Exemple #11
0
        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);
            }
        }
Exemple #13
0
        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);
                }
            }
        }
Exemple #14
0
        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");
                    }
                }
            }
        }
Exemple #16
0
        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)");
            }
        }
Exemple #17
0
        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);
                }
            }
        }
Exemple #18
0
        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);
                    }
                }
            }
        }
Exemple #19
0
        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);
            }
        }
Exemple #20
0
        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};&#xA;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);
            }
        }
Exemple #22
0
        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);
                }
            }
        }
Exemple #23
0
        //<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);
            }
        }
Exemple #24
0
        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);
            }
        }
Exemple #25
0
        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) + "&#160;")
                                               );

                    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);
            }
        }
Exemple #28
0
        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]|&#160;|&nbsp;)+$");
                                    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}");
                }
            }
        }
Exemple #29
0
        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);
                }
            }
        }