From d4e8dbfb8a526894c40b7e7af673e6cae0a0d415 Mon Sep 17 00:00:00 2001 From: Alexandre Mutel Date: Sun, 27 Mar 2016 07:09:28 +0900 Subject: [PATCH] Add hook delegate when a document has been processed --- .../Extensions/Abbreviations/Abbreviation.cs | 2 +- src/Textamina.Markdig/MarkdownPipeline.cs | 7 +++++++ src/Textamina.Markdig/Parsers/BlockProcessor.cs | 7 ------- src/Textamina.Markdig/Parsers/MarkdownParser.cs | 15 +++++++++++++-- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/Textamina.Markdig/Extensions/Abbreviations/Abbreviation.cs b/src/Textamina.Markdig/Extensions/Abbreviations/Abbreviation.cs index cdcf2129..e26f5413 100644 --- a/src/Textamina.Markdig/Extensions/Abbreviations/Abbreviation.cs +++ b/src/Textamina.Markdig/Extensions/Abbreviations/Abbreviation.cs @@ -30,7 +30,7 @@ namespace Textamina.Markdig.Extensions.Abbreviations public string Label { get; set; } /// - /// The text + /// The text associated to this label. /// public StringSlice Text; } diff --git a/src/Textamina.Markdig/MarkdownPipeline.cs b/src/Textamina.Markdig/MarkdownPipeline.cs index e68690a4..922ce9b8 100644 --- a/src/Textamina.Markdig/MarkdownPipeline.cs +++ b/src/Textamina.Markdig/MarkdownPipeline.cs @@ -82,6 +82,13 @@ namespace Textamina.Markdig /// public TextWriter DebugLog { get; set; } + /// + /// Occurs when a document has been processed after the method. + /// + public event ProcessDocumentDelegate DocumentProcessed; + + internal ProcessDocumentDelegate GetDocumentProcessed => DocumentProcessed; + /// /// Initializes this instance. /// diff --git a/src/Textamina.Markdig/Parsers/BlockProcessor.cs b/src/Textamina.Markdig/Parsers/BlockProcessor.cs index b9e19e7e..7c95a9db 100644 --- a/src/Textamina.Markdig/Parsers/BlockProcessor.cs +++ b/src/Textamina.Markdig/Parsers/BlockProcessor.cs @@ -9,13 +9,6 @@ using Textamina.Markdig.Syntax; namespace Textamina.Markdig.Parsers { - /// - /// A delegate called at block processing stage. - /// - /// The processor. - /// The block being processed. - public delegate void ProcessBlockDelegate(BlockProcessor processor, Block block); - /// /// The block processor. /// diff --git a/src/Textamina.Markdig/Parsers/MarkdownParser.cs b/src/Textamina.Markdig/Parsers/MarkdownParser.cs index 08c9805b..b7f254a6 100644 --- a/src/Textamina.Markdig/Parsers/MarkdownParser.cs +++ b/src/Textamina.Markdig/Parsers/MarkdownParser.cs @@ -11,6 +11,12 @@ using Textamina.Markdig.Syntax; namespace Textamina.Markdig.Parsers { + /// + /// Delegates called when processing a document + /// + /// The markdown document. + public delegate void ProcessDocumentDelegate(MarkdownDocument document); + /// /// The Markdown parser. /// @@ -19,6 +25,7 @@ namespace Textamina.Markdig.Parsers private readonly BlockProcessor blockProcessor; private readonly InlineProcessor inlineProcessor; private readonly MarkdownDocument document; + private readonly ProcessDocumentDelegate documentProcessed; /// /// Initializes a new instance of the class. @@ -51,6 +58,8 @@ namespace Textamina.Markdig.Parsers { DebugLog = pipeline.DebugLog }; + + documentProcessed = pipeline.GetDocumentProcessed; } /// @@ -83,6 +92,9 @@ namespace Textamina.Markdig.Parsers { ProcessBlocks(); ProcessInlines(); + + // Allow to call a hook after processing a document + documentProcessed?.Invoke(document); return document; } @@ -111,7 +123,6 @@ namespace Textamina.Markdig.Parsers /// The text to secure. private string FixupZero(string text) { - int startPos = 0; int nextZero; StringBuilder newLine = null; @@ -137,7 +148,6 @@ namespace Textamina.Markdig.Parsers return result; } - private class ContainerItemCache : DefaultObjectCache { protected override void Reset(ContainerItem instance) @@ -149,6 +159,7 @@ namespace Textamina.Markdig.Parsers private void ProcessInlines() { + // "stackless" processor var cache = new ContainerItemCache(); var blocks = new Stack();