<?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 GfmBacktickDoubleTest.php</title>
    <description></description>
    <language>en</language>
    <copyright>Copyright 2025</copyright>
    <generator>Java</generator><item>
        <title>47a02a102092be9e1e6f1ddaf158bdfffdb13d4f - Parsing: make parse syntax a per-parse value, drop ModeInterface</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/_test/tests/Parsing/ParserMode/GfmBacktickDoubleTest.php#47a02a102092be9e1e6f1ddaf158bdfffdb13d4f</link>
        <description>Parsing: make parse syntax a per-parse value, drop ModeInterfaceThe active parse&apos;s syntax flavour is a per-parse question, not process-global state: within a single request a plugin can render bundledDokuWiki-syntax text inside an otherwise-Markdown page. Yet ModeRegistrywas a singleton that read $conf[&apos;syntax&apos;] and the $PARSER_MODES global,and every mode reached it through ModeRegistry::getInstance() &#8212; so theflavour lived in shared mutable state that two parses in one requestwould fight over.Make the registry a short-lived value instead:- ModeRegistry is constructed once per parse with an explicit $syntax  and injected into Parser, Handler and every mode. getSyntax() /  isDwPreferred() / isMdPreferred() consult $this-&gt;syntax; the  DOKU_UNITTEST-gated mode-list cache hack is gone (each registry is  fresh, nothing to invalidate).- p_get_instructions() is now the single place in the pipeline where  $conf[&apos;syntax&apos;] is read; from there the flavour travels as a  parameter. No code under inc/Parsing/ reads $conf[&apos;syntax&apos;] directly  anymore &#8212; the five syntax-reading modes (Preformatted, GfmHr,  GfmEscape, Externallink, GfmQuote) route through $this-&gt;registry.Keep the two concepts apart, as documented in the ModeRegistry andAbstractMode docblocks: the user&apos;s configured *preference* stays in$conf[&apos;syntax&apos;] for UI code (toolbar, settings), while the activeparse&apos;s syntax is a parameter carried by the registry.$PARSER_MODES is demoted to a deprecated, read-only mirror, publishedduring loadPluginModes() &#8212; third-party syntax plugins (columnlist,alphalist2, phpwikify, skipentity) and the bundled info plugin read theglobal directly, often from their constructors, so the taxonomy muststay visible there. No core code reads the mirror.Fold ModeInterface into AbstractMode while here: getSort()/handle() areabstract, the connect callbacks carry defaults, and the public $Lexer&quot;FIXME should be done by setter&quot; becomes setLexer()/getLexer() injectedby Parser::addMode() alongside the registry. Nested-content resolutionmoves to the allowedCategories()/filterAllowedModes() hooks, resolvedonce when the registry is attached.Tests build their own parser/registry through ParserTestBase::setSyntax()instead of mutating $conf and calling the removed ModeRegistry::reset().

            List of files:
            /dokuwiki/_test/tests/Parsing/ParserMode/GfmBacktickDoubleTest.php</description>
        <pubDate>Thu, 04 Jun 2026 12:27:59 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;gohr@cosmocode.de&gt;</dc:creator>
    </item>
<item>
        <title>13a62f810fbd091d15ab734b467eaec0a6bf829a - rename syntax flavors &apos;dokuwiki&apos; / &apos;markdown&apos; to &apos;dw&apos; / &apos;md&apos;</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/_test/tests/Parsing/ParserMode/GfmBacktickDoubleTest.php#13a62f810fbd091d15ab734b467eaec0a6bf829a</link>
        <description>rename syntax flavors &apos;dokuwiki&apos; / &apos;markdown&apos; to &apos;dw&apos; / &apos;md&apos;Symmetry with the existing &apos;dw+md&apos; / &apos;md+dw&apos; setting values.

            List of files:
            /dokuwiki/_test/tests/Parsing/ParserMode/GfmBacktickDoubleTest.php</description>
        <pubDate>Mon, 04 May 2026 10:18:11 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>8ed75a23932353c18b43f67323808e9a662f532a - add GfmBacktickSingle / GfmBacktickDouble for GFM inline code spans</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/_test/tests/Parsing/ParserMode/GfmBacktickDoubleTest.php#8ed75a23932353c18b43f67323808e9a662f532a</link>
        <description>add GfmBacktickSingle / GfmBacktickDouble for GFM inline code spansTwo new inline formatting modes covering GFM code spans in their n=1and n=2 forms:  GfmBacktickSingle   `text`    &#8594; &lt;code&gt;text&lt;/code&gt;  GfmBacktickDouble   ``text``  &#8594; &lt;code&gt;text&lt;/code&gt;Both emit monospace_open and monospace_close around an unformatted()call (the same instruction shape as DokuWiki&apos;s two-single-quote pairwrapping a nowiki span), so renderers that distinguish verbatim textfrom plain cdata &#8212; metadata, indexer, non-XHTML backends &#8212; treat thebody as literal.GfmBacktickDouble extends GfmBacktickSingle to reuse handle() and thebody-normalization helper; only the delimiter length and the bodycharacter class differ. Both share sort 165 and gate on Markdownbeing loaded.Design notes:* The lexer has no backreferences, so each length is its own mode.  Length-boundary guards (?&lt;!`)...(?!`) on every opener and closer  ensure a run of two-or-more backticks is never read as an n=1  delimiter and a run of three-or-more is never read as n=2. The two  modes never steal each other&apos;s input regardless of registration  order &#8212; sort can&apos;t reach this kind of cross-position constraint.* Edge-whitespace handling and newline normalization live in handle(),  not in the regex. On DOKU_LEXER_UNMATCHED the body is normalized:    1. CR/LF and LF become single spaces (GFM line-ending rule).    2. If the body starts and ends with a space and is not entirely       whitespace, one space is stripped from each end.  That produces the right GFM output for the tricky cases without  special-casing the entry pattern:    ` `          &#8594; &lt;code&gt; &lt;/code&gt;    (all-whitespace, no strip)    ` a`         &#8594; &lt;code&gt; a&lt;/code&gt;   (asymmetric, no strip)    ` `` `       &#8594; &lt;code&gt;``&lt;/code&gt;   (interior run-of-2 + strip)    ``foo`bar``  &#8594; &lt;code&gt;foo`bar&lt;/code&gt;* Body character classes admit exactly the runs that cannot be valid  closers for this mode&apos;s length: n=1 allows `[^`] | ``+`, n=2 allows  `[^`] | `(?!`)`. That is what lets a single-backtick span contain  a pair and a double-backtick span contain a lone backtick.* allowedModes is empty &#8212; no other inline parsing runs inside a span.Deliberately not implemented, with skip.php entries explaining why:  351 &#8212; code-span precedence over emphasis (*foo`*` expected to render        as *foo&lt;code&gt;*&lt;/code&gt;). Cross-positional: the single-pass        lexer matches leftmost-first and cannot reject an earlier        emphasis opener because a later backtick span would consume        its closer. A proper fix would need a pre-scan pass; sort        values only break ties at the same position.  353 &#8212; the trailing &quot; outside the code span gets converted to a        curly quote by DokuWiki typography, diverging from spec HTML.  354 &#8212; raw HTML tag pass-through; DokuWiki does not render raw HTML        by default.  356 &#8212; GFM angle-bracket autolink &lt;http://&#8230;&gt;: not implemented.Per-mode unit tests cover basic matching, flanking via the length-boundary guards, interior-run support in the body, edge-spacestripping, newline normalization, all-whitespace bodies, paragraph-boundary rejection, content-is-literal, and sort values.ModeRegistryTest&apos;s gating data provider picks up both modes.Net effect on GfmSpecTest: eleven previously-red code-span examplesnow pass (339, 340, 341, 342, 344, 345, 346, 347, 349, 350, 357, 359&#8212; the simple pairs, edge-space, interior-run, newline-normalization,and mismatched-run cases). Four skipped. Three remain pending outsidethe code-span scope (emphasis interactions that need GfmLink oncethat lands).

            List of files:
            /dokuwiki/_test/tests/Parsing/ParserMode/GfmBacktickDoubleTest.php</description>
        <pubDate>Wed, 22 Apr 2026 07:39:11 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;gohr@cosmocode.de&gt;</dc:creator>
    </item>
</channel>
</rss>
