Exemple #1
0
        protected override void Write(OpenXMLRenderer renderer, CodeBlock obj)
        {
            renderer.PushParagraphFormat(FormatStyle.CodeBlock);
            var paragraph = renderer.PushNewParagraph();

            if (obj.Inline != null)
            {
                // there was a post-processor which has already processed the lines in this code block
                renderer.WriteChildren(obj.Inline);
            }
            else // there was no post-processor - we have to do the writing of the code lines
            {
                // original code: renderer.WriteLeafRawLines(obj); // Expand this call directly here in order to be able to include tags
                var lines = obj.Lines;
                if (lines.Lines != null)
                {
                    var slices = lines.Lines;
                    for (var i = 0; i < lines.Count; i++)
                    {
                        var run = renderer.Push(new Run(new DocumentFormat.OpenXml.Wordprocessing.Text()
                        {
                            Text = slices[i].Slice.ToString(), Space = SpaceProcessingModeValues.Preserve
                        }));
                        renderer.PopTo(run);
                        if (i < lines.Count - 1)
                        {
                            run = renderer.Push(new Run(new Break()));
                            renderer.PopTo(run);
                        }
                    }
                }
            }
            renderer.PopTo(paragraph);
            renderer.PopParagraphFormat();
        }
Exemple #2
0
        protected override void Write(OpenXMLRenderer renderer, EmphasisInline obj)
        {
            int nPushed = 0;

            switch (obj.DelimiterChar)
            {
            case '*':
            case '_':
                if (obj.IsDouble)
                {
                    renderer.PushInlineFormat(OpenXMLRenderer.InlineFormat.Bold);
                    ++nPushed;
                }
                else
                {
                    renderer.PushInlineFormat(OpenXMLRenderer.InlineFormat.Italic);
                    ++nPushed;
                }
                break;

            case '~':
                if (obj.IsDouble)
                {
                    renderer.PushInlineFormat(OpenXMLRenderer.InlineFormat.Strikethrough);
                    ++nPushed;
                }
                else
                {
                    renderer.PushInlineFormat(OpenXMLRenderer.InlineFormat.Subscript);
                    ++nPushed;
                }

                break;

            case '^':
                renderer.PushInlineFormat(OpenXMLRenderer.InlineFormat.Superscript);
                ++nPushed;
                break;

            case '+':
                // Inserted style
            {
                renderer.PushInlineFormat(OpenXMLRenderer.InlineFormat.Underline);
                ++nPushed;
            }
            break;

            case '=':
                // Marked style
                break;
            }

            renderer.WriteChildren(obj);

            for (int i = 0; i < nPushed; ++i)
            {
                renderer.PopInlineFormat();
            }
        }
        protected override void Write(OpenXMLRenderer renderer, DelimiterInline obj)
        {
            var run = renderer.PushNewRun();

            run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text()
            {
                Space = SpaceProcessingModeValues.Preserve, Text = obj.ToLiteral()
            });
            renderer.WriteChildren(obj);
            renderer.PopTo(run);
        }
Exemple #4
0
        /// <summary>
        /// Adds the list items.
        /// </summary>
        /// <param name="renderer">The renderer.</param>
        /// <param name="listBlock">The list block for which the items should be added.</param>
        /// <param name="level">The current level of this list (1= main list, 2 = first sub list, etc.)</param>
        /// <param name="numberId">The unique identifier identifying this list. Note: it is the same identifier independent on the level.</param>
        public void AddListItems(OpenXMLRenderer renderer, ListBlock listBlock, int level, int numberId)
        {
            foreach (var item in listBlock)
            {
                // Create items for paragraph properties
                renderer.PushParagraphFormat(FormatStyle.ListParagraph);
                renderer.NumberingProperties = new NumberingProperties(new NumberingLevelReference()
                {
                    Val = level - 1
                }, new NumberingId()
                {
                    Val = numberId
                });

                var listItem = (ListItemBlock)item;
                renderer.WriteChildren(listItem);

                renderer.NumberingProperties = null;
                renderer.PopParagraphFormat();
            }
        }
Exemple #5
0
 protected override void Write(OpenXMLRenderer renderer, QuoteBlock obj)
 {
     renderer.PushParagraphFormat(FormatStyle.QuoteBlock);
     renderer.WriteChildren(obj);
     renderer.PopParagraphFormat();
 }
Exemple #6
0
        /// <inheritdoc/>
        protected override void Write(OpenXMLRenderer renderer, LinkInline link)
        {
            var url = link.GetDynamicUrl != null?link.GetDynamicUrl() ?? link.Url : link.Url;

            if (link.IsImage)
            {
                RenderImage(renderer, link, url);
                renderer.AddBookmarkIfNeccessary(link);
            }
            else // link is not an image
            {
                if (Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute))
                {
                    ++_linkIndex;
                    //var nextId = renderer._wordDocument.MainDocumentPart.Parts.Count() + 1;
                    var rId = "lkId" + _linkIndex.ToString(System.Globalization.CultureInfo.InvariantCulture);
                    renderer._wordDocument.MainDocumentPart.AddHyperlinkRelationship(new System.Uri(url, System.UriKind.Absolute), true, rId);

                    var hyperlink = new Hyperlink()
                    {
                        Id = rId
                    };
                    renderer.Push(hyperlink);
                    renderer.WriteChildren(link);

                    foreach (var run in hyperlink.ChildElements.OfType <Run>())
                    {
                        renderer.ApplyStyleToRun(StyleDictionary.IdToName[FormatStyle.Link], run);
                    }

                    renderer.PopTo(hyperlink);
                }
                else if (!string.IsNullOrEmpty(url) && url.StartsWith("#")) // not a well formed Uri String - then it is probably a fragment reference
                {
                    if (null != renderer.FigureLinkList)
                    {
                        var idx = renderer.FigureLinkList.FindIndex(x => object.ReferenceEquals(x.Link, link));
                        if (idx >= 0)
                        {
                            renderer.CurrentFigureLinkListIndex = idx;
                        }
                    }

                    var hyperlink = new Hyperlink()
                    {
                        Anchor = url.Substring(1)
                    };
                    renderer.Push(hyperlink);
                    renderer.WriteChildren(link);

                    if (!renderer.CurrentFigureLinkListIndex.HasValue || !renderer.DoNotFormatFigureLinksAsHyperlinks)
                    {
                        foreach (var run in hyperlink.ChildElements.OfType <Run>())
                        {
                            renderer.ApplyStyleToRun(StyleDictionary.IdToName[FormatStyle.Link], run);
                        }
                    }
                    renderer.PopTo(hyperlink);

                    renderer.CurrentFigureLinkListIndex = null;
                }
            }
        }
Exemple #7
0
 protected override void Write(OpenXMLRenderer renderer, Markdig.Extensions.Figures.Figure obj)
 {
     renderer.WriteChildren(obj);
 }