* Reject emoji-parsing if the slice ends with `**`
* Still some emoji false positives
* Cleanup and reduced the number of emojis checked.
* Review comment resolved
* Fix emoji and emphasis precedence (#946)
Resolve trailing emphasis delimiters before converting ambiguous emoji matches. Reuse the existing emphasis parser rather than guessing whether an opener remains active or rejecting only double asterisks.
Cover italics, strong/nested emphasis, custom delimiters, links, images, tables, source positions, renderers, all default mappings, and 2688 emphasis-structure comparisons. Document emphasis and generic-attribute precedence and the named-shortcode escape hatch.
---------
Co-authored-by: Alexandre Mutel <alexandre_mutel@live.com>
* Add Support for PipeTables (GFM)
* Add additional tests. First two work, later three do not.
* Fix bad merge
* Update to follow style
* Address problem with trailing new lines after the table
* Fix pipe table normalization alignment and separators (#954)
---------
Co-authored-by: T. Thiery <thomas.thiery+git@gmail.com>
Co-authored-by: Alexandre Mutel <alexandre_mutel@live.com>
* Fix indent on first list item (#482)
* Fix normalization of empty quotes in list items (#953)
* Fix null validation for line-specific indents (#953)
---------
Co-authored-by: Alexandre Mutel <alexandre_mutel@live.com>
* 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.
* Fix unmatched emphasis closer cleanup order (#743)
---------
Co-authored-by: Alexandre Mutel <alexandre_mutel@live.com>
Introduces AllowNestedAlerts on AlertExtension and AlertInlineParser
(default: false) to allow alert blocks inside blockquotes or list items.
The UseAlertBlocks() pipeline extension method exposes the new option
via an allowNestedAlerts parameter.
Resolves#853
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* test: add failing regression tests for issue #935 (abbreviation + emphasis)
* fix: AbbreviationParser now substitutes post-inline-parse, fixes emphasis corruption (#935)
The PostMatch hook approach (running mid-parse) produced a ContainerInline
with IsClosed=false that disrupted FindLastContainer(), causing emphasis
delimiters to be appended as children of the abbreviation container instead
of as root siblings. It also had an off-by-one (i != 0 vs i != content.Start)
that caused abbreviations to be missed when the literal started inside emphasis.
Replace with a document.ProcessInlinesEnd handler that walks the fully resolved
inline tree (after EmphasisInlineParser and LinkInlineParser have run), inserting
AbbreviationInline/LiteralInline siblings directly into parent containers without
any wrapper ContainerInline.
Also update TestSourcePosition.TestAbbreviations to reflect the new tree shape
(no container wrapper; empty leading literals at word boundaries are pruned).
Fixes#935
* Fix to calculate LinkReferenceDefinition span positions from StringLineGroup.Lines
* Add test case in TestMultilineInBlockquote
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Change from startPosition + span.End - span.Start to GetAbsolutePosition(lines, span.End)
* Move ConvertToAbsoluteSpan and GetAbsolutePosition to StringLineGroup
* Remove '\r' check in Write(ReadOnlySpan<char>)
---------
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>