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();