diff --git a/CommonMark/Parser/InlineMethods.cs b/CommonMark/Parser/InlineMethods.cs index bf3f9a8..da60397 100644 --- a/CommonMark/Parser/InlineMethods.cs +++ b/CommonMark/Parser/InlineMethods.cs @@ -323,7 +323,7 @@ internal static int MatchInlineStack(InlineStack opener, Subject subj, int closi inl.FirstChild = inl.NextSibling; inl.NextSibling = null; - InlineStack.RemoveStackEntry(opener, subj, closer); + InlineStack.RemoveStackEntry(opener, subj, closer?.Previous); } else { @@ -354,6 +354,7 @@ internal static int MatchInlineStack(InlineStack opener, Subject subj, int closi var newCloserInline = new Inline(clInl.LiteralContent.Substring(useDelims)); newCloserInline.SourcePosition = inl.SourceLastPosition = clInl.SourcePosition + useDelims; newCloserInline.SourceLength = closer.DelimeterCount; + newCloserInline.NextSibling = clInl.NextSibling; clInl.LiteralContent = null; clInl.NextSibling = null; diff --git a/CommonMark/Parser/InlineStack.cs b/CommonMark/Parser/InlineStack.cs index 3ae54bb..e9ac255 100644 --- a/CommonMark/Parser/InlineStack.cs +++ b/CommonMark/Parser/InlineStack.cs @@ -161,7 +161,8 @@ public static void RemoveStackEntry(InlineStack first, Subject subj, InlineStack // handle case like [*b*] (the whole [..] is being removed but the inner *..* must still be matched). // this is not done automatically because the initial * is recognized as a potential closer (assuming // potential scenario '*[*' ). - PostProcessInlineStack(null, first, last, curPriority); + if (curPriority > 0) + PostProcessInlineStack(null, first, last, curPriority); } public static void PostProcessInlineStack(Subject subj, InlineStack first, InlineStack last, InlineStackPriority ignorePriority) @@ -198,7 +199,7 @@ public static void PostProcessInlineStack(Subject subj, InlineStack first, Inlin if (retry) { // remove everything between opened and closer (not inclusive). - if (iopener.Next != istack.Previous) + if (istack.Previous != null && iopener.Next != istack.Previous) RemoveStackEntry(iopener.Next, subj, istack.Previous); continue;