diff --git a/src/Textamina.Markdig/Extensions/Footnotes/HtmlFootnoteGroupRenderer.cs b/src/Textamina.Markdig/Extensions/Footnotes/HtmlFootnoteGroupRenderer.cs index 59ede3cb..677b6115 100644 --- a/src/Textamina.Markdig/Extensions/Footnotes/HtmlFootnoteGroupRenderer.cs +++ b/src/Textamina.Markdig/Extensions/Footnotes/HtmlFootnoteGroupRenderer.cs @@ -8,23 +8,23 @@ namespace Textamina.Markdig.Extensions.Footnotes { public class HtmlFootnoteGroupRenderer : HtmlObjectRenderer { - protected override void Write(HtmlRenderer writer, FootnoteGroup footnoteGroup) + protected override void Write(HtmlRenderer renderer, FootnoteGroup footnoteGroup) { var footnotes = footnoteGroup.Children; - writer.EnsureLine(); - writer.WriteLine("
"); - writer.WriteLine("
"); - writer.WriteLine("
    "); + renderer.EnsureLine(); + renderer.WriteLine("
    "); + renderer.WriteLine("
    "); + renderer.WriteLine("
      "); for (int i = 0; i < footnotes.Count; i++) { var footnote = (Footnote)footnotes[i]; - writer.WriteLine($"
    1. "); - writer.WriteChildren(footnote); - writer.WriteLine("
    2. "); + renderer.WriteLine($"
    3. "); + renderer.WriteChildren(footnote); + renderer.WriteLine("
    4. "); } - writer.WriteLine("
    "); - writer.WriteLine("
    "); + renderer.WriteLine("
"); + renderer.WriteLine("
"); } } } \ No newline at end of file diff --git a/src/Textamina.Markdig/Extensions/Footnotes/HtmlFootnoteLinkRenderer.cs b/src/Textamina.Markdig/Extensions/Footnotes/HtmlFootnoteLinkRenderer.cs index 2f80ffe7..9c6325b4 100644 --- a/src/Textamina.Markdig/Extensions/Footnotes/HtmlFootnoteLinkRenderer.cs +++ b/src/Textamina.Markdig/Extensions/Footnotes/HtmlFootnoteLinkRenderer.cs @@ -21,10 +21,10 @@ namespace Textamina.Markdig.Extensions.Footnotes public string FootnoteBackLinkClass { get; set; } - protected override void Write(HtmlRenderer writer, FootnoteLink link) + protected override void Write(HtmlRenderer renderer, FootnoteLink link) { var order = link.Footnote.Order ?? 0; - writer.Write(link.IsBackLink + renderer.Write(link.IsBackLink ? $"{HtmlHelper.Unescape(BackLinkString)}" : $"{order}"); } diff --git a/src/Textamina.Markdig/Extensions/Tables/HtmlTableRenderer.cs b/src/Textamina.Markdig/Extensions/Tables/HtmlTableRenderer.cs index 374664c7..59f11f29 100644 --- a/src/Textamina.Markdig/Extensions/Tables/HtmlTableRenderer.cs +++ b/src/Textamina.Markdig/Extensions/Tables/HtmlTableRenderer.cs @@ -8,10 +8,10 @@ namespace Textamina.Markdig.Extensions.Tables { public class HtmlTableRenderer : HtmlObjectRenderer { - protected override void Write(HtmlRenderer writer, TableBlock tableBlock) + protected override void Write(HtmlRenderer renderer, TableBlock tableBlock) { - writer.EnsureLine(); - writer.Write(""); + renderer.EnsureLine(); + renderer.Write(""); bool hasBody = false; var header = (TableRowBlock)tableBlock.Children[0]; @@ -24,57 +24,57 @@ namespace Textamina.Markdig.Extensions.Tables var row = (TableRowBlock)rowObj; if (row.IsHeader) { - writer.WriteLine(""); + renderer.WriteLine(""); } else if (!hasBody) { - writer.WriteLine(""); + renderer.WriteLine(""); hasBody = true; } - writer.WriteLine(""); + renderer.WriteLine(""); for (int i = 0; i < row.Children.Count; i++) { var cellObj = row.Children[i]; var cell = (TableCellBlock)cellObj; - writer.EnsureLine(); + renderer.EnsureLine(); if (row.IsHeader) { - writer.Write(""); + renderer.Write(">"); - writer.WriteLeafInline(cell); - writer.WriteLine(row.IsHeader ? "" : ""); + renderer.WriteLeafInline(cell); + renderer.WriteLine(row.IsHeader ? "" : ""); } - writer.WriteLine(""); + renderer.WriteLine(""); if (row.IsHeader) { - writer.WriteLine(""); + renderer.WriteLine(""); } } if (hasBody) { - writer.WriteLine(""); + renderer.WriteLine(""); } - writer.WriteLine(""); + renderer.WriteLine(""); } } } \ No newline at end of file diff --git a/src/Textamina.Markdig/Renderers/Html/CodeBlockRenderer.cs b/src/Textamina.Markdig/Renderers/Html/CodeBlockRenderer.cs index 5878c0e3..bc042e47 100644 --- a/src/Textamina.Markdig/Renderers/Html/CodeBlockRenderer.cs +++ b/src/Textamina.Markdig/Renderers/Html/CodeBlockRenderer.cs @@ -5,6 +5,10 @@ using Textamina.Markdig.Syntax; namespace Textamina.Markdig.Renderers.Html { + /// + /// An HTML renderer for a and . + /// + /// public class CodeBlockRenderer : HtmlObjectRenderer { public bool OutputAttributesOnPre { get; set; } diff --git a/src/Textamina.Markdig/Renderers/Html/HeadingRenderer.cs b/src/Textamina.Markdig/Renderers/Html/HeadingRenderer.cs index 1a304b62..94490ce1 100644 --- a/src/Textamina.Markdig/Renderers/Html/HeadingRenderer.cs +++ b/src/Textamina.Markdig/Renderers/Html/HeadingRenderer.cs @@ -6,6 +6,10 @@ using Textamina.Markdig.Syntax; namespace Textamina.Markdig.Renderers.Html { + /// + /// An HTML renderer for a . + /// + /// public class HeadingRenderer : HtmlObjectRenderer { protected override void Write(HtmlRenderer renderer, HeadingBlock obj) diff --git a/src/Textamina.Markdig/Renderers/Html/HtmlAttributes.cs b/src/Textamina.Markdig/Renderers/Html/HtmlAttributes.cs index a8c44a47..5d3cb9c9 100644 --- a/src/Textamina.Markdig/Renderers/Html/HtmlAttributes.cs +++ b/src/Textamina.Markdig/Renderers/Html/HtmlAttributes.cs @@ -7,18 +7,37 @@ using Textamina.Markdig.Syntax; namespace Textamina.Markdig.Renderers.Html { + /// + /// Attached HTML attributes to a . + /// public class HtmlAttributes { + /// + /// Initializes a new instance of the class. + /// public HtmlAttributes() { } + /// + /// Gets or sets the HTML id/identifier. May be null. + /// public string Id { get; set; } + /// + /// Gets or sets the CSS classes attached. May be null. + /// public List Classes { get; set; } + /// + /// Gets or sets the additional properties. May be null. + /// public List> Properties { get; set; } + /// + /// Adds a CSS class. + /// + /// The css class name. public void AddClass(string name) { if (Classes == null) @@ -28,6 +47,11 @@ namespace Textamina.Markdig.Renderers.Html Classes.Add(name); } + /// + /// Adds a property. + /// + /// The name. + /// The value. public void AddProperty(string name, string value) { if (Properties == null) @@ -37,6 +61,11 @@ namespace Textamina.Markdig.Renderers.Html Properties.Add(new KeyValuePair(name, value)); } + /// + /// Copies the values from this instance to the specified instance. + /// + /// The HTML attributes. + /// public void CopyTo(HtmlAttributes htmlAttributes) { if (htmlAttributes == null) throw new ArgumentNullException(nameof(htmlAttributes)); @@ -62,15 +91,28 @@ namespace Textamina.Markdig.Renderers.Html } } + /// + /// Extensions for a to allow accessing + /// public static class HtmlAttributesExtensions { private static readonly object Key = typeof (HtmlAttributes); + /// + /// Tries the get stored on a . + /// + /// The markdown object. + /// The attached html attributes or null if not found public static HtmlAttributes TryGetAttributes(this MarkdownObject obj) { return obj.GetData(Key) as HtmlAttributes; } + /// + /// Gets or creates the stored on a + /// + /// The markdown object. + /// The attached html attributes public static HtmlAttributes GetAttributes(this MarkdownObject obj) { var attributes = obj.GetData(Key) as HtmlAttributes; diff --git a/src/Textamina.Markdig/Renderers/Html/HtmlBlockRenderer.cs b/src/Textamina.Markdig/Renderers/Html/HtmlBlockRenderer.cs index 5368ea04..f4df487c 100644 --- a/src/Textamina.Markdig/Renderers/Html/HtmlBlockRenderer.cs +++ b/src/Textamina.Markdig/Renderers/Html/HtmlBlockRenderer.cs @@ -5,6 +5,10 @@ using Textamina.Markdig.Syntax; namespace Textamina.Markdig.Renderers.Html { + /// + /// A HTML renderer for a . + /// + /// public class HtmlBlockRenderer : HtmlObjectRenderer { protected override void Write(HtmlRenderer renderer, HtmlBlock obj) diff --git a/src/Textamina.Markdig/Renderers/Html/HtmlObjectRenderer.cs b/src/Textamina.Markdig/Renderers/Html/HtmlObjectRenderer.cs index 29f17000..1366b71a 100644 --- a/src/Textamina.Markdig/Renderers/Html/HtmlObjectRenderer.cs +++ b/src/Textamina.Markdig/Renderers/Html/HtmlObjectRenderer.cs @@ -1,15 +1,19 @@ // Copyright (c) Alexandre Mutel. All rights reserved. // This file is licensed under the BSD-Clause 2 license. // See the license.txt file in the project root for more information. -using System; -using System.Reflection; using Textamina.Markdig.Syntax; +using Textamina.Markdig.Syntax.Inlines; namespace Textamina.Markdig.Renderers.Html { + /// + /// A base class for HTML rendering and Markdown objects. + /// + /// The type of the object. + /// public abstract class HtmlObjectRenderer : IMarkdownObjectRenderer where TObject : MarkdownObject { - public virtual bool Accept(RendererBase renderer, object obj) + public virtual bool Accept(RendererBase renderer, MarkdownObject obj) { return obj is TObject; } @@ -19,6 +23,11 @@ namespace Textamina.Markdig.Renderers.Html Write((HtmlRenderer)renderer, (TObject)obj); } - protected abstract void Write(HtmlRenderer visitor, TObject obj); + /// + /// Writes the specified Markdown object to the renderer. + /// + /// The renderer. + /// The markdown object. + protected abstract void Write(HtmlRenderer renderer, TObject obj); } } \ No newline at end of file diff --git a/src/Textamina.Markdig/Renderers/Html/Inlines/AutolinkInlineRenderer.cs b/src/Textamina.Markdig/Renderers/Html/Inlines/AutolinkInlineRenderer.cs index f0d86310..3c6cd789 100644 --- a/src/Textamina.Markdig/Renderers/Html/Inlines/AutolinkInlineRenderer.cs +++ b/src/Textamina.Markdig/Renderers/Html/Inlines/AutolinkInlineRenderer.cs @@ -5,6 +5,10 @@ using Textamina.Markdig.Syntax.Inlines; namespace Textamina.Markdig.Renderers.Html.Inlines { + /// + /// A HTML renderer for an . + /// + /// public class AutolinkInlineRenderer : HtmlObjectRenderer { protected override void Write(HtmlRenderer renderer, AutolinkInline obj) diff --git a/src/Textamina.Markdig/Renderers/Html/Inlines/CodeInlineRenderer.cs b/src/Textamina.Markdig/Renderers/Html/Inlines/CodeInlineRenderer.cs index bc21a488..0cbd1897 100644 --- a/src/Textamina.Markdig/Renderers/Html/Inlines/CodeInlineRenderer.cs +++ b/src/Textamina.Markdig/Renderers/Html/Inlines/CodeInlineRenderer.cs @@ -1,11 +1,14 @@ // Copyright (c) Alexandre Mutel. All rights reserved. // This file is licensed under the BSD-Clause 2 license. // See the license.txt file in the project root for more information. -using Textamina.Markdig.Helpers; using Textamina.Markdig.Syntax.Inlines; namespace Textamina.Markdig.Renderers.Html.Inlines { + /// + /// A HTML renderer for a . + /// + /// public class CodeInlineRenderer : HtmlObjectRenderer { protected override void Write(HtmlRenderer renderer, CodeInline obj) diff --git a/src/Textamina.Markdig/Renderers/Html/Inlines/DelimiterInlineRenderer.cs b/src/Textamina.Markdig/Renderers/Html/Inlines/DelimiterInlineRenderer.cs index c4d42f9a..cbae4ba2 100644 --- a/src/Textamina.Markdig/Renderers/Html/Inlines/DelimiterInlineRenderer.cs +++ b/src/Textamina.Markdig/Renderers/Html/Inlines/DelimiterInlineRenderer.cs @@ -5,6 +5,10 @@ using Textamina.Markdig.Syntax.Inlines; namespace Textamina.Markdig.Renderers.Html.Inlines { + /// + /// A HTML renderer for a . + /// + /// public class DelimiterInlineRenderer : HtmlObjectRenderer { protected override void Write(HtmlRenderer renderer, DelimiterInline obj) diff --git a/src/Textamina.Markdig/Renderers/Html/Inlines/EmphasisInlineRenderer.cs b/src/Textamina.Markdig/Renderers/Html/Inlines/EmphasisInlineRenderer.cs index d91a8dc6..4cc001ab 100644 --- a/src/Textamina.Markdig/Renderers/Html/Inlines/EmphasisInlineRenderer.cs +++ b/src/Textamina.Markdig/Renderers/Html/Inlines/EmphasisInlineRenderer.cs @@ -5,15 +5,30 @@ using Textamina.Markdig.Syntax.Inlines; namespace Textamina.Markdig.Renderers.Html.Inlines { + /// + /// A HTML renderer for an . + /// + /// public class EmphasisInlineRenderer : HtmlObjectRenderer { + /// + /// Delegates to get the tag associated to an object. + /// + /// The object. + /// The HTML tag associated to this object public delegate string GetTagDelegate(EmphasisInline obj); + /// + /// Initializes a new instance of the class. + /// public EmphasisInlineRenderer() { GetTag = GetDefaultTag; } + /// + /// Gets or sets the GetTag delegate. + /// public GetTagDelegate GetTag { get; set; } protected override void Write(HtmlRenderer renderer, EmphasisInline obj) @@ -31,6 +46,11 @@ namespace Textamina.Markdig.Renderers.Html.Inlines } } + /// + /// Gets the default HTML tag for ** and __ emphasis. + /// + /// The object. + /// public string GetDefaultTag(EmphasisInline obj) { if (obj.DelimiterChar == '*' || obj.DelimiterChar == '_') diff --git a/src/Textamina.Markdig/Renderers/Html/Inlines/HardlineBreakInlineRenderer.cs b/src/Textamina.Markdig/Renderers/Html/Inlines/HardlineBreakInlineRenderer.cs index bda9d410..edef1a8f 100644 --- a/src/Textamina.Markdig/Renderers/Html/Inlines/HardlineBreakInlineRenderer.cs +++ b/src/Textamina.Markdig/Renderers/Html/Inlines/HardlineBreakInlineRenderer.cs @@ -5,6 +5,10 @@ using Textamina.Markdig.Syntax.Inlines; namespace Textamina.Markdig.Renderers.Html.Inlines { + /// + /// A HTML renderer for a . + /// + /// public class HardlineBreakInlineRenderer : HtmlObjectRenderer { protected override void Write(HtmlRenderer renderer, HardlineBreakInline obj) diff --git a/src/Textamina.Markdig/Renderers/Html/Inlines/HtmlInlineRenderer.cs b/src/Textamina.Markdig/Renderers/Html/Inlines/HtmlInlineRenderer.cs index 4621ff32..b038cbb8 100644 --- a/src/Textamina.Markdig/Renderers/Html/Inlines/HtmlInlineRenderer.cs +++ b/src/Textamina.Markdig/Renderers/Html/Inlines/HtmlInlineRenderer.cs @@ -5,6 +5,10 @@ using Textamina.Markdig.Syntax.Inlines; namespace Textamina.Markdig.Renderers.Html.Inlines { + /// + /// A HTML renderer for a . + /// + /// public class HtmlInlineRenderer : HtmlObjectRenderer { protected override void Write(HtmlRenderer renderer, HtmlInline obj) diff --git a/src/Textamina.Markdig/Renderers/Html/Inlines/LinkInlineRenderer.cs b/src/Textamina.Markdig/Renderers/Html/Inlines/LinkInlineRenderer.cs index 13408425..7d9aa331 100644 --- a/src/Textamina.Markdig/Renderers/Html/Inlines/LinkInlineRenderer.cs +++ b/src/Textamina.Markdig/Renderers/Html/Inlines/LinkInlineRenderer.cs @@ -5,6 +5,10 @@ using Textamina.Markdig.Syntax.Inlines; namespace Textamina.Markdig.Renderers.Html.Inlines { + /// + /// A HTML renderer for a . + /// + /// public class LinkInlineRenderer : HtmlObjectRenderer { protected override void Write(HtmlRenderer renderer, LinkInline link) diff --git a/src/Textamina.Markdig/Renderers/Html/Inlines/LiteralInlineRenderer.cs b/src/Textamina.Markdig/Renderers/Html/Inlines/LiteralInlineRenderer.cs index 3b8a57eb..38bf30bc 100644 --- a/src/Textamina.Markdig/Renderers/Html/Inlines/LiteralInlineRenderer.cs +++ b/src/Textamina.Markdig/Renderers/Html/Inlines/LiteralInlineRenderer.cs @@ -5,6 +5,10 @@ using Textamina.Markdig.Syntax.Inlines; namespace Textamina.Markdig.Renderers.Html.Inlines { + /// + /// A HTML renderer for a . + /// + /// public class LiteralInlineRenderer : HtmlObjectRenderer { protected override void Write(HtmlRenderer renderer, LiteralInline obj) diff --git a/src/Textamina.Markdig/Renderers/Html/Inlines/SoftlineBreakInlineRenderer.cs b/src/Textamina.Markdig/Renderers/Html/Inlines/SoftlineBreakInlineRenderer.cs index df9eb7bf..3f882aa4 100644 --- a/src/Textamina.Markdig/Renderers/Html/Inlines/SoftlineBreakInlineRenderer.cs +++ b/src/Textamina.Markdig/Renderers/Html/Inlines/SoftlineBreakInlineRenderer.cs @@ -5,8 +5,15 @@ using Textamina.Markdig.Syntax.Inlines; namespace Textamina.Markdig.Renderers.Html.Inlines { + /// + /// A HTML renderer for a . + /// + /// public class SoftlineBreakInlineRenderer : HtmlObjectRenderer { + /// + /// Gets or sets a value indicating whether to render this softline break as a HTML hardline break tag (<br />) + /// public bool RenderAsHardlineBreak { get; set; } protected override void Write(HtmlRenderer renderer, SoftlineBreakInline obj) diff --git a/src/Textamina.Markdig/Renderers/Html/ListRenderer.cs b/src/Textamina.Markdig/Renderers/Html/ListRenderer.cs index eceb2bce..90f081f6 100644 --- a/src/Textamina.Markdig/Renderers/Html/ListRenderer.cs +++ b/src/Textamina.Markdig/Renderers/Html/ListRenderer.cs @@ -6,6 +6,10 @@ using Textamina.Markdig.Syntax; namespace Textamina.Markdig.Renderers.Html { + /// + /// A HTML renderer for a . + /// + /// public class ListRenderer : HtmlObjectRenderer { protected override void Write(HtmlRenderer renderer, ListBlock listBlock) diff --git a/src/Textamina.Markdig/Renderers/Html/ParagraphRenderer.cs b/src/Textamina.Markdig/Renderers/Html/ParagraphRenderer.cs index 8b0242d4..cf92791d 100644 --- a/src/Textamina.Markdig/Renderers/Html/ParagraphRenderer.cs +++ b/src/Textamina.Markdig/Renderers/Html/ParagraphRenderer.cs @@ -5,6 +5,10 @@ using Textamina.Markdig.Syntax; namespace Textamina.Markdig.Renderers.Html { + /// + /// A HTML renderer for a . + /// + /// public class ParagraphRenderer : HtmlObjectRenderer { protected override void Write(HtmlRenderer renderer, ParagraphBlock obj) diff --git a/src/Textamina.Markdig/Renderers/Html/QuoteBlockRenderer.cs b/src/Textamina.Markdig/Renderers/Html/QuoteBlockRenderer.cs index 108cfa11..529bf4cc 100644 --- a/src/Textamina.Markdig/Renderers/Html/QuoteBlockRenderer.cs +++ b/src/Textamina.Markdig/Renderers/Html/QuoteBlockRenderer.cs @@ -5,6 +5,10 @@ using Textamina.Markdig.Syntax; namespace Textamina.Markdig.Renderers.Html { + /// + /// A HTML renderer for a . + /// + /// public class QuoteBlockRenderer : HtmlObjectRenderer { protected override void Write(HtmlRenderer renderer, QuoteBlock obj) diff --git a/src/Textamina.Markdig/Renderers/Html/ThematicBreakRenderer.cs b/src/Textamina.Markdig/Renderers/Html/ThematicBreakRenderer.cs index 2ef531eb..ea8a7ea8 100644 --- a/src/Textamina.Markdig/Renderers/Html/ThematicBreakRenderer.cs +++ b/src/Textamina.Markdig/Renderers/Html/ThematicBreakRenderer.cs @@ -5,6 +5,10 @@ using Textamina.Markdig.Syntax; namespace Textamina.Markdig.Renderers.Html { + /// + /// A HTML renderer for a . + /// + /// public class ThematicBreakRenderer : HtmlObjectRenderer { protected override void Write(HtmlRenderer renderer, ThematicBreakBlock obj) diff --git a/src/Textamina.Markdig/Renderers/HtmlRenderer.cs b/src/Textamina.Markdig/Renderers/HtmlRenderer.cs index 3a69b7a2..24ebcb97 100644 --- a/src/Textamina.Markdig/Renderers/HtmlRenderer.cs +++ b/src/Textamina.Markdig/Renderers/HtmlRenderer.cs @@ -11,8 +11,16 @@ using Textamina.Markdig.Syntax; namespace Textamina.Markdig.Renderers { + /// + /// Default HTML renderer for a Markdown object. + /// + /// public class HtmlRenderer : TextRendererBase { + /// + /// Initializes a new instance of the class. + /// + /// The writer. public HtmlRenderer(TextWriter writer) : base(writer) { // Default block renderers @@ -38,10 +46,24 @@ namespace Textamina.Markdig.Renderers EnableHtmlForInline = true; } + /// + /// Gets or sets a value indicating whether to ouput HTML tags when rendering. See remarks. + /// + /// + /// This is used by some renderers to disable HTML tags when rendering some inlines (for image links). + /// public bool EnableHtmlForInline { get; set; } + /// + /// Gets or sets a value indicating whether to use implicit paragraph (optional <p>) + /// public bool ImplicitParagraph { get; set; } + /// + /// Writes the content escaped for HTML. + /// + /// The content. + /// This instance [MethodImpl(MethodImplOptionPortable.AggressiveInlining)] public HtmlRenderer WriteEscape(string content) { @@ -52,6 +74,11 @@ namespace Textamina.Markdig.Renderers return this; } + /// + /// Writes the content escaped for HTML. + /// + /// The slice. + /// This instance [MethodImpl(MethodImplOptionPortable.AggressiveInlining)] public HtmlRenderer WriteEscape(ref StringSlice slice) { @@ -62,6 +89,13 @@ namespace Textamina.Markdig.Renderers return WriteEscape(slice.Text, slice.Start, slice.Length); } + /// + /// Writes the content escaped for HTML. + /// + /// The content. + /// The offset. + /// The length. + /// This instance public HtmlRenderer WriteEscape(string content, int offset, int length) { if (string.IsNullOrEmpty(content) || length == 0) @@ -100,6 +134,11 @@ namespace Textamina.Markdig.Renderers return this; } + /// + /// Writes the URL escaped for HTML. + /// + /// The content. + /// This instance public HtmlRenderer WriteEscapeUrl(string content) { if (content == null) @@ -151,6 +190,11 @@ namespace Textamina.Markdig.Renderers return this; } + /// + /// Writes the attached on the specified . + /// + /// The object. + /// public HtmlRenderer WriteAttributes(MarkdownObject obj) { var attributes = obj.TryGetAttributes(); @@ -191,6 +235,13 @@ namespace Textamina.Markdig.Renderers return this; } + /// + /// Writes the lines of a + /// + /// The leaf block. + /// if set to true write end of lines. + /// if set to true escape the content for HTML + /// This instance public HtmlRenderer WriteLeafRawLines(LeafBlock leafBlock, bool writeEndOfLines, bool escape) { if (leafBlock.Lines != null) diff --git a/src/Textamina.Markdig/Renderers/IMarkdownObjectRenderer.cs b/src/Textamina.Markdig/Renderers/IMarkdownObjectRenderer.cs index df5fd017..97f491d7 100644 --- a/src/Textamina.Markdig/Renderers/IMarkdownObjectRenderer.cs +++ b/src/Textamina.Markdig/Renderers/IMarkdownObjectRenderer.cs @@ -1,15 +1,29 @@ // Copyright (c) Alexandre Mutel. All rights reserved. // This file is licensed under the BSD-Clause 2 license. // See the license.txt file in the project root for more information. -using System; + using Textamina.Markdig.Syntax; namespace Textamina.Markdig.Renderers { + /// + /// Base interface for the renderer of a . + /// public interface IMarkdownObjectRenderer { - bool Accept(RendererBase renderer, object obj); + /// + /// Accepts the specified . + /// + /// The renderer. + /// The Markdown object. + /// true If this renderer is accepting to render the specified Markdown object + bool Accept(RendererBase renderer, MarkdownObject obj); + /// + /// Writes the specified to the . + /// + /// The renderer. + /// The object to render. void Write(RendererBase renderer, MarkdownObject objectToRender); } } \ No newline at end of file diff --git a/src/Textamina.Markdig/Renderers/IMarkdownRenderer.cs b/src/Textamina.Markdig/Renderers/IMarkdownRenderer.cs index 6b147f81..167fceb1 100644 --- a/src/Textamina.Markdig/Renderers/IMarkdownRenderer.cs +++ b/src/Textamina.Markdig/Renderers/IMarkdownRenderer.cs @@ -2,13 +2,25 @@ // This file is licensed under the BSD-Clause 2 license. // See the license.txt file in the project root for more information. using Textamina.Markdig.Syntax; +using Textamina.Markdig.Syntax.Inlines; namespace Textamina.Markdig.Renderers { + /// + /// Base interface for a renderer for a Markdown . + /// public interface IMarkdownRenderer { + /// + /// Gets the object renderers that will render and elements. + /// ObjectRendererCollection ObjectRenderers { get; } + /// + /// Renders the specified markdown object. + /// + /// The markdown object. + /// The result of the rendering. object Render(MarkdownObject markdownObject); } } \ No newline at end of file diff --git a/src/Textamina.Markdig/Renderers/ObjectRendererCollection.cs b/src/Textamina.Markdig/Renderers/ObjectRendererCollection.cs index 9573b07b..de650511 100644 --- a/src/Textamina.Markdig/Renderers/ObjectRendererCollection.cs +++ b/src/Textamina.Markdig/Renderers/ObjectRendererCollection.cs @@ -5,6 +5,10 @@ using Textamina.Markdig.Helpers; namespace Textamina.Markdig.Renderers { + /// + /// A collection of . + /// + /// public class ObjectRendererCollection : OrderedList { } diff --git a/src/Textamina.Markdig/Renderers/RendererBase.cs b/src/Textamina.Markdig/Renderers/RendererBase.cs index c09e276d..63460613 100644 --- a/src/Textamina.Markdig/Renderers/RendererBase.cs +++ b/src/Textamina.Markdig/Renderers/RendererBase.cs @@ -8,12 +8,19 @@ using Textamina.Markdig.Syntax.Inlines; namespace Textamina.Markdig.Renderers { + /// + /// Base class for a . + /// + /// public abstract class RendererBase : IMarkdownRenderer { private readonly Dictionary renderersPerType; private IMarkdownObjectRenderer previousRenderer; private Type previousObjectType; + /// + /// Initializes a new instance of the class. + /// protected RendererBase() { ObjectRenderers = new ObjectRendererCollection(); @@ -24,6 +31,10 @@ namespace Textamina.Markdig.Renderers public abstract object Render(MarkdownObject markdownObject); + /// + /// Writes the children of the specified . + /// + /// The container block. public void WriteChildren(ContainerBlock containerBlock) { if (containerBlock == null) @@ -38,6 +49,10 @@ namespace Textamina.Markdig.Renderers } } + /// + /// Writes the children of the specified . + /// + /// The container inline. public void WriteChildren(ContainerInline containerInline) { if (containerInline == null) @@ -53,6 +68,11 @@ namespace Textamina.Markdig.Renderers } } + /// + /// Writes the specified Markdown object. + /// + /// A MarkdownObject type + /// The Markdown object to write to this renderer. public void Write(T obj) where T : MarkdownObject { if (obj == null) diff --git a/src/Textamina.Markdig/Renderers/TextRendererBase.cs b/src/Textamina.Markdig/Renderers/TextRendererBase.cs index 9034ce86..42a62359 100644 --- a/src/Textamina.Markdig/Renderers/TextRendererBase.cs +++ b/src/Textamina.Markdig/Renderers/TextRendererBase.cs @@ -10,16 +10,29 @@ using Textamina.Markdig.Syntax.Inlines; namespace Textamina.Markdig.Renderers { + /// + /// A text based . + /// + /// public abstract class TextRendererBase : RendererBase { private TextWriter writer; + /// + /// Initializes a new instance of the class. + /// + /// The writer. + /// protected TextRendererBase(TextWriter writer) { if (writer == null) throw new ArgumentNullException(nameof(writer)); this.Writer = writer; } + /// + /// Gets or sets the writer. + /// + /// if the value is null public TextWriter Writer { get { return writer; } @@ -34,6 +47,11 @@ namespace Textamina.Markdig.Renderers } } + /// + /// Renders the specified markdown object (returns the as a render object). + /// + /// The markdown object. + /// public override object Render(MarkdownObject markdownObject) { Write(markdownObject); @@ -41,11 +59,20 @@ namespace Textamina.Markdig.Renderers } } + /// + /// Typed . + /// + /// Type of the renderer + /// public abstract class TextRendererBase : TextRendererBase where T : TextRendererBase { private bool previousWasLine; private char[] buffer; + /// + /// Initializes a new instance of the class. + /// + /// The writer. protected TextRendererBase(TextWriter writer) : base(writer) { buffer = new char[1024]; @@ -53,6 +80,10 @@ namespace Textamina.Markdig.Renderers previousWasLine = true; } + /// + /// Ensures a newline. + /// + /// This instance public T EnsureLine() { if (!previousWasLine) @@ -62,6 +93,11 @@ namespace Textamina.Markdig.Renderers return (T)this; } + /// + /// Writes the specified content. + /// + /// The content. + /// This instance [MethodImpl(MethodImplOptionPortable.AggressiveInlining)] public T Write(string content) { @@ -70,6 +106,11 @@ namespace Textamina.Markdig.Renderers return (T) this; } + /// + /// Writes the specified slice. + /// + /// The slice. + /// This instance [MethodImpl(MethodImplOptionPortable.AggressiveInlining)] public T Write(ref StringSlice slice) { @@ -80,6 +121,11 @@ namespace Textamina.Markdig.Renderers return Write(slice.Text, slice.Start, slice.Length); } + /// + /// Writes the specified character. + /// + /// The content. + /// This instance [MethodImpl(MethodImplOptionPortable.AggressiveInlining)] public T Write(char content) { @@ -88,6 +134,13 @@ namespace Textamina.Markdig.Renderers return (T) this; } + /// + /// Writes the specified content. + /// + /// The content. + /// The offset. + /// The length. + /// This instance public T Write(string content, int offset, int length) { previousWasLine = false; @@ -111,6 +164,10 @@ namespace Textamina.Markdig.Renderers return (T) this; } + /// + /// Writes a newline. + /// + /// This instance [MethodImpl(MethodImplOptionPortable.AggressiveInlining)] public T WriteLine() { @@ -119,6 +176,11 @@ namespace Textamina.Markdig.Renderers return (T) this; } + /// + /// Writes a content followed by a newline. + /// + /// The content. + /// This instance [MethodImpl(MethodImplOptionPortable.AggressiveInlining)] public T WriteLine(string content) { @@ -127,6 +189,11 @@ namespace Textamina.Markdig.Renderers return (T) this; } + /// + /// Writes the inlines of a leaf inline. + /// + /// The leaf block. + /// This instance [MethodImpl(MethodImplOptionPortable.AggressiveInlining)] public T WriteLeafInline(LeafBlock leafBlock) {