<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/rss.xsl.xml"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
    <title>Changes in GfmEmphasisStrongUnderscore.php</title>
    <description></description>
    <language>en</language>
    <copyright>Copyright 2025</copyright>
    <generator>Java</generator><item>
        <title>2bb62bca317961d66fa2908b40f183af01402a91 - add GFM em-wrapping-strong modes for `***foo***` / `___foo___`</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/Parsing/ParserMode/GfmEmphasisStrongUnderscore.php#2bb62bca317961d66fa2908b40f183af01402a91</link>
        <description>add GFM em-wrapping-strong modes for `***foo***` / `___foo___`Two new inline formatting modes that render triple-delimiter runs asem wrapping strong:  GfmEmphasisStrong            `***text***`  &#8594; &lt;em&gt;&lt;strong&gt;text&lt;/strong&gt;&lt;/em&gt;  GfmEmphasisStrongUnderscore  `___text___`  &#8594; same (MD-preferred only)Only the exact 3+3 symmetric case is handled. The other long-run andasymmetric variants (4+4, 5+5, `***foo**`, etc.) require CommonMark&apos;sstack-based delimiter-pairing algorithm with its flanking andmultiple-of-3 rules, which is explicitly out of scope; those examplesstay skipped in gfm-spec/skip.php.Implementation notes:* Patterns enforce exact 3+3 via `(?&lt;!\*)` / `(?&lt;!_)` lookbehinds  (preventing entry at the second `*` of a `****...` run) and  `(?!\*)` / `(?!_)` lookaheads after the closing triple (rejecting  `***foo****` etc.). Combined with the existing non-whitespace  adjacency lookaheads, all asymmetric cases cleanly fall through to  other modes or stay literal.* GfmEmphasisStrong overrides handle() to emit two instructions on  entry (emphasis_open + strong_open) and two on exit (strong_close  + emphasis_close). GfmEmphasisStrongUnderscore inherits that  handler &#8212; only delimiters and word-boundary rules differ.* Sort 65 &#8212; below Strong (70) and GfmEmphasis (80) so the em+strong  modes win the lexer race for `***`/`___` runs. Underscore variant  is MD-preferred-only, matching the existing gating of  GfmEmphasisUnderscore and GfmStrongUnderscore.Per-mode unit tests cover basic matching, single-char bodies,whitespace flanking rejection, paragraph-boundary rejection,longer-run rejection, asymmetric rejection, multibyte intrawordprotection, and sort values. ModeRegistryTest&apos;s gating data providerpicks up the two new rules.Net effect on GfmSpecTest: example #476 (`***foo***`) now passes;473/474/475/477 remain skipped as documented in skip.php.

            List of files:
            /dokuwiki/inc/Parsing/ParserMode/GfmEmphasisStrongUnderscore.php</description>
        <pubDate>Mon, 20 Apr 2026 18:59:51 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;gohr@cosmocode.de&gt;</dc:creator>
    </item>
</channel>
</rss>
