<?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 GfmListblockTest.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/GfmListblockTest.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/GfmListblockTest.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>ab6ac09039049460b16b8a07f72fcd82605ced15 - add tests pinning blank-line tolerance in GFM listblock</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/_test/tests/Parsing/ParserMode/GfmListblockTest.php#ab6ac09039049460b16b8a07f72fcd82605ced15</link>
        <description>add tests pinning blank-line tolerance in GFM listblock

            List of files:
            /dokuwiki/_test/tests/Parsing/ParserMode/GfmListblockTest.php</description>
        <pubDate>Mon, 04 May 2026 15:19:10 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&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/GfmListblockTest.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/GfmListblockTest.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>309a08521b24a6fff00f318e061096f69771bbad - replace DW Quote with unified GfmQuote</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/_test/tests/Parsing/ParserMode/GfmListblockTest.php#309a08521b24a6fff00f318e061096f69771bbad</link>
        <description>replace DW Quote with unified GfmQuoteGfmQuote covers blockquote parsing for both DokuWiki and GFM dialectsin a single mode. Same quote_open/quote_close handler instructions; aDW-preferred post-pass flattens sub-parsed paragraph wrapping intolinebreak calls so existing pages keep their &lt;br/&gt;-between-linesrendering. MD-preferred keeps the &lt;p&gt;-wrapped spec shape.Block content (lists, fenced code, tables) inside `&gt;` quotes nowrenders, since the body is sub-parsed. Headers stay excluded(BASEONLY) &#8212; TOC and section-edit anchors don&apos;t compose with&lt;blockquote&gt;, same rationale as GfmListblock.Convert ModeRegistry&apos;s sub-parser cache into an acquire/release poolto support same-key re-entrancy: a list inside a quote re-entersgfm_quote during the list-item sub-parse, and the inner call needsits own parser instance even though the exclusion key matches.GfmListblock is updated to use the new acquire/release primitives.

            List of files:
            /dokuwiki/_test/tests/Parsing/ParserMode/GfmListblockTest.php</description>
        <pubDate>Thu, 30 Apr 2026 11:58:30 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>f7c6e4acc95e3c5c24a819b2149a2bf3a7668f11 - add listo_open_start sibling method for GFM start numbers</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/_test/tests/Parsing/ParserMode/GfmListblockTest.php#f7c6e4acc95e3c5c24a819b2149a2bf3a7668f11</link>
        <description>add listo_open_start sibling method for GFM start numbersReverts the listo_open signature widening from 5a2118acc and insteadadds a sibling method `listo_open_start($start = 1)` on the rendererhierarchy. The base default delegates to listo_open() so renderersthat don&apos;t override it still produce a valid (but unnumbered) list;xhtml&apos;s override emits &lt;ol start=&quot;N&quot;&gt;.The handler now emits &apos;listo_open_start&apos; only for ordered lists witha non-default first number; plain ordered lists keep emitting theunchanged &apos;listo_open&apos; instruction. This preserves the historicallisto_open / listu_open signatures (zero-arg base, $classes-onlyxhtml form from 2016) so the 17 plugin renderers found viacodesearch keep working without modification, while stillimplementing GFM&apos;s &quot;5. foo&quot; -&gt; &lt;ol start=&quot;5&quot;&gt; rule.

            List of files:
            /dokuwiki/_test/tests/Parsing/ParserMode/GfmListblockTest.php</description>
        <pubDate>Thu, 30 Apr 2026 08:11:04 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;gohr@cosmocode.de&gt;</dc:creator>
    </item>
<item>
        <title>685560eb3044321b3bdd0be40985871ced5f1d05 - add GfmListblock for GFM lists</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/_test/tests/Parsing/ParserMode/GfmListblockTest.php#685560eb3044321b3bdd0be40985871ced5f1d05</link>
        <description>add GfmListblock for GFM listsGfmListblock captures an entire list block atomically with oneaddSpecialPattern match, then walks the captured text in handle()grouping lines into items. Each item&apos;s body is dedented to itscontent column and parsed by ModeRegistry::getSubParser() soblock content (paragraphs, fenced code, blockquotes, pluginblocks) works inside items uniformly. Sub-parsed calls are wrappedin a Nest call before they reach the outer handler, matching theFootnote pattern: the main handler&apos;s Block rewriter treats nestas opaque and the renderer base class unwraps it transparently,so multi-paragraph items don&apos;t get double-wrapped in &lt;p&gt;.Marker syntax: -, *, + (unordered) or 1-9 digits followed by. or ) (ordered). Indentation is a 2-space-multiple step startingat 0; depth = (indent / 2) + 1, odd indents round down, tabs becometwo spaces. The first ordered item&apos;s number drives the startattribute on &lt;ol&gt; via the listo_open $start parameter.GfmLists subclasses AbstractListsRewriter with the GFM markerparser; the state machine on the base class is shared with DW Lists.GfmListblock loads only when $conf[&apos;syntax&apos;] is markdown or md+dw.Under those settings the DW Listblock is suppressed because the twolist models conflict &#8212; DW&apos;s mandatory 2-space indent rule vs GFM&apos;szero-indent top-level rule, and -/*/+ markers shared. Plugins thatrelied on Listblock loading under md+dw will see it absent there.Sub-parser exclusion set: CATEGORY_BASEONLY (no Header inside listitems) and gfm_listblock itself (defensive guard against re-entryon pathological inputs; nested lists are handled by the outerpattern, not by re-entry).Tests cover marker variants, ordered start numbers, nested lists attwo and three levels, inline formatting inside items, marker-character switches keeping one list, type switches splitting thelist, fenced code inside items, multi-paragraph (loose) items, andtwo regressions on blank-line tolerance inside the captured block.SpecCompatRenderer learns to render the list call sequence, andspec.txt tests for digit/marker-width/lazy-continuation behaviorthat GfmListblock deliberately doesn&apos;t implement are documented ingfm-spec/skip.php with the per-bucket reasons (A-F).Drops two now-obsolete entries from skip.php (image escapes thatland via earlier GfmLink/GfmMedia work) and inlines the Setextexplanation that previously pointed at SPEC.md. Replaces theSPEC.md reference in GfmEmphasisTest with the inline reason.

            List of files:
            /dokuwiki/_test/tests/Parsing/ParserMode/GfmListblockTest.php</description>
        <pubDate>Tue, 28 Apr 2026 06:23:11 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
</channel>
</rss>
