fix: keep trailing content out of unmatched emphasis closer (#743)

When EnableTrackTrivia() is enabled, an emphasis closer whose delimiter
run is only partially consumed (its leftover dropping below the minimum
count) kept the inlines that follow it nested inside the emphasis. The
roundtrip renderer then emitted the closing delimiters after that
trailing content, corrupting the output, for example a grid table
separator row using the "marked" (==) delimiter from EmphasisExtras.

Move the trailing content out to the outermost enclosing emphasis when
the closer can no longer be matched, mirroring the existing handling for
a fully consumed opener. The leftover closer keeps its position, so
cases without trailing content are unaffected. Adds a regression test.
This commit is contained in:
dualfroz committed 2026-09-06 01:19:55 +02:00
1 parent b022656629
commit 0e598ccf6f
2 files changed
+81

No files matched your search

@@ -419,6 +419,19 @@ public class EmphasisInlineParser : InlineParser, IPostInlineProcessor
break;
}
}
// Leftover delimiter characters keep the following inlines nested inside
// the emphasis; move them out so they keep their original position.
if (closeDelimiter.DelimiterCount > 0 && closeDelimiter.Parent is EmphasisInline closerParentEmphasis)
{
var outermostEmphasis = closerParentEmphasis;
while (outermostEmphasis.Parent is EmphasisInline ancestorEmphasis)
{
outermostEmphasis = ancestorEmphasis;
}
closeDelimiter.MoveChildrenAfter(outermostEmphasis);
}
}
}