diff --git a/src/Textamina.Markdig/Extensions/Footnotes/FootnoteParser.cs b/src/Textamina.Markdig/Extensions/Footnotes/FootnoteParser.cs index 8a96572b..89c6413e 100644 --- a/src/Textamina.Markdig/Extensions/Footnotes/FootnoteParser.cs +++ b/src/Textamina.Markdig/Extensions/Footnotes/FootnoteParser.cs @@ -53,7 +53,7 @@ namespace Textamina.Markdig.Extensions.Footnotes Footnote = footnote, CreateLinkInline = CreateLinkToFootnote }; - state.Document.LinkReferenceDefinitions[footnote.Label] = linkRef; + state.Document.GetLinkReferenceDefinitions()[footnote.Label] = linkRef; state.NewBlocks.Push(footnote); return BlockState.Continue; diff --git a/src/Textamina.Markdig/Parsers/Inlines/LinkInlineParser.cs b/src/Textamina.Markdig/Parsers/Inlines/LinkInlineParser.cs index 89fc2396..70976d89 100644 --- a/src/Textamina.Markdig/Parsers/Inlines/LinkInlineParser.cs +++ b/src/Textamina.Markdig/Parsers/Inlines/LinkInlineParser.cs @@ -53,7 +53,7 @@ namespace Textamina.Markdig.Parsers.Inlines // If the label is followed by either a ( or a [, this is not a shortcut if (LinkHelper.TryParseLabel(ref slice, out label)) { - if (!state.Document.LinkReferenceDefinitions.ContainsKey(label)) + if (!state.Document.GetLinkReferenceDefinitions().ContainsKey(label)) { label = null; } @@ -93,7 +93,7 @@ namespace Textamina.Markdig.Parsers.Inlines { bool isValidLink = false; LinkReferenceDefinition linkRef; - if (state.Document.LinkReferenceDefinitions.TryGetValue(label, out linkRef)) + if (state.Document.GetLinkReferenceDefinitions().TryGetValue(label, out linkRef)) { Inline link = null; // Try to use a callback directly defined on the LinkReferenceDefinition diff --git a/src/Textamina.Markdig/Parsers/ParagraphBlockParser.cs b/src/Textamina.Markdig/Parsers/ParagraphBlockParser.cs index 0cbf8f5d..31456aa4 100644 --- a/src/Textamina.Markdig/Parsers/ParagraphBlockParser.cs +++ b/src/Textamina.Markdig/Parsers/ParagraphBlockParser.cs @@ -139,6 +139,7 @@ namespace Textamina.Markdig.Parsers { bool atLeastOneFound = false; + var references = state.Document.GetLinkReferenceDefinitions(); while (true) { // If we have found a LinkReferenceDefinition, we can discard the previous paragraph @@ -146,9 +147,9 @@ namespace Textamina.Markdig.Parsers LinkReferenceDefinition linkReferenceDefinition; if (LinkReferenceDefinition.TryParse(ref iterator, out linkReferenceDefinition)) { - if (!state.Document.LinkReferenceDefinitions.ContainsKey(linkReferenceDefinition.Label)) + if (!references.ContainsKey(linkReferenceDefinition.Label)) { - state.Document.LinkReferenceDefinitions[linkReferenceDefinition.Label] = linkReferenceDefinition; + references[linkReferenceDefinition.Label] = linkReferenceDefinition; } atLeastOneFound = true; diff --git a/src/Textamina.Markdig/Syntax/Document.cs b/src/Textamina.Markdig/Syntax/Document.cs index b5a41c18..7ba7ae25 100644 --- a/src/Textamina.Markdig/Syntax/Document.cs +++ b/src/Textamina.Markdig/Syntax/Document.cs @@ -1,15 +1,9 @@ -using System; -using System.Collections.Generic; - -namespace Textamina.Markdig.Syntax +namespace Textamina.Markdig.Syntax { public class Document : ContainerBlock { public Document() : base(null) { - LinkReferenceDefinitions = new Dictionary(StringComparer.OrdinalIgnoreCase); } - - public Dictionary LinkReferenceDefinitions { get; } } } \ No newline at end of file diff --git a/src/Textamina.Markdig/Syntax/LinkReferenceDefinition.cs b/src/Textamina.Markdig/Syntax/LinkReferenceDefinition.cs index b060be6b..432123b0 100644 --- a/src/Textamina.Markdig/Syntax/LinkReferenceDefinition.cs +++ b/src/Textamina.Markdig/Syntax/LinkReferenceDefinition.cs @@ -6,6 +6,8 @@ namespace Textamina.Markdig.Syntax { public class LinkReferenceDefinition : LeafBlock { + public static readonly object DocumentKey = typeof (LinkReferenceDefinition); + public delegate Inline CreateLinkInlineDelegate(InlineParserState inlineState, LinkReferenceDefinition linkRef, Inline child = null); public LinkReferenceDefinition() : base(null) diff --git a/src/Textamina.Markdig/Syntax/LinkReferenceDefinitionExtensions.cs b/src/Textamina.Markdig/Syntax/LinkReferenceDefinitionExtensions.cs new file mode 100644 index 00000000..0d19d74e --- /dev/null +++ b/src/Textamina.Markdig/Syntax/LinkReferenceDefinitionExtensions.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; + +namespace Textamina.Markdig.Syntax +{ + public static class LinkReferenceDefinitionExtensions + { + public static Dictionary GetLinkReferenceDefinitions(this Document document) + { + var references = document.GetData(LinkReferenceDefinition.DocumentKey) as Dictionary; + if (references == null) + { + references = new Dictionary(StringComparer.OrdinalIgnoreCase); + document.SetData(LinkReferenceDefinition.DocumentKey, references); + } + return references; + } + } +} \ No newline at end of file diff --git a/src/Textamina.Markdig/Textamina.Markdig.csproj b/src/Textamina.Markdig/Textamina.Markdig.csproj index 671c076b..0fbe8afd 100644 --- a/src/Textamina.Markdig/Textamina.Markdig.csproj +++ b/src/Textamina.Markdig/Textamina.Markdig.csproj @@ -86,6 +86,7 @@ +