<?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 PreformattedTest.php</title>
    <description></description>
    <language>en</language>
    <copyright>Copyright 2025</copyright>
    <generator>Java</generator><item>
        <title>945681fc9df0c43e5065e67d03a08d832e81e66c - fix(parser): keep an indented list from being swallowed by a table</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/_test/tests/Parsing/ParserMode/PreformattedTest.php#945681fc9df0c43e5065e67d03a08d832e81e66c</link>
        <description>fix(parser): keep an indented list from being swallowed by a tableThe parser rework dropped the list-awareness lookahead from preformatted&apos;sentry patterns (&apos;\n  (?![\*\-])&apos; became &apos;\n  &apos;). In base mode this is maskedby sort order - listblock sorts before preformatted and wins the tie - buttable mode connects preformatted as a protected sub-mode without connectingany list mode. Inside a table an indented list line therefore enteredpreformatted instead of ending the table, and the table rewriter discarded theresulting call: the list vanished from the output and the table&apos;s section-editrange grew to cover it, so saving via the inline table editor overwrote thelist text.Restore the lookahead. For DokuWiki syntax it is the original &apos;(?![\*\-])&apos;(Listblock treats a bare * or - as a marker). For Markdown-preferred syntax theguard follows GfmListblock, rejecting -, *, + and ordered markers only whenfollowed by whitespace or end of line, so mixed dw+md / md+dw wikis are fixedtoo while an indented code block that merely starts with such a character (e.g.a *** line) still parses as code.

            List of files:
            /dokuwiki/_test/tests/Parsing/ParserMode/PreformattedTest.php</description>
        <pubDate>Sun, 05 Jul 2026 17:42:26 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>e248eb6f8b6985dbe44dd2e8e16b6407ea1562a7 - fix(parser): don&apos;t drop document content after a blank indented line</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/_test/tests/Parsing/ParserMode/PreformattedTest.php#e248eb6f8b6985dbe44dd2e8e16b6407ea1562a7</link>
        <description>fix(parser): don&apos;t drop document content after a blank indented linePreformatted&apos;s exit pattern (?=\n[^ \t\n]) is a lookahead-only exit: itconsumes no byte so the boundary \n stays in the stream for a following blockmode (an &lt;hr&gt; or header after an indented code block) to anchor on.When that exit fired with nothing else consumed - a &quot;blank&quot; line that is emptyafter its indent, followed by a column-0 line - the match was zero-width at thecurrent offset and the lexer&apos;s no-advance guard aborted the whole parse,silently discarding the rest of the document. Reachable on ordinary trailingwhitespace (&quot;abc\n  \nmore&quot;) and inside footnotes.Exempt zero-width MODE_EXIT matches from the guard: popping the mode stack isreal progress and leaves the boundary byte for the parent mode to consume onthe next iteration. The stack strictly shrinks on each such exit, so thiscannot loop; the infinite-loop protection is unchanged for every otherzero-width match. Preformatted&apos;s pattern is left as-is, so &lt;hr&gt;/header after anindented code block still works, including after a blank indented line.Add regressions for the blank-line, blank-line-after-code, andboundary-preservation (hr after a blank indented line) cases.

            List of files:
            /dokuwiki/_test/tests/Parsing/ParserMode/PreformattedTest.php</description>
        <pubDate>Sun, 05 Jul 2026 15:58:46 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<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/PreformattedTest.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/PreformattedTest.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>113171bb2c574564644d283fd1ae323072dfa865 - Preformatted: strip leading/trailing blank-line padding from body</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/_test/tests/Parsing/ParserMode/PreformattedTest.php#113171bb2c574564644d283fd1ae323072dfa865</link>
        <description>Preformatted: strip leading/trailing blank-line padding from bodyThe lexer&apos;s `\n    ` continuation pattern eats the indent offblank-but-indented source lines, leaving a `\n` in the rewriterbuffer for each one. Trim those padding newlines before emittingso the preformatted body starts and ends on a non-blank line, asGFM example #87 requires. Whitespace-only blocks are stillskipped entirely.Adds two PreformattedTest cases pinning the new behavior.

            List of files:
            /dokuwiki/_test/tests/Parsing/ParserMode/PreformattedTest.php</description>
        <pubDate>Tue, 05 May 2026 20:00:11 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;gohr@cosmocode.de&gt;</dc:creator>
    </item>
<item>
        <title>c2248fdabf88ebc41fb7cdff1ab9df02279eed2b - Block: collapse [ \t]*\n[ \t]* to \n inside paragraphs</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/_test/tests/Parsing/ParserMode/PreformattedTest.php#c2248fdabf88ebc41fb7cdff1ab9df02279eed2b</link>
        <description>Block: collapse [ \t]*\n[ \t]* to \n inside paragraphsStrip [ \t]+ on either side of the soft-break joiner emitted for asingle eol, and ltrim the first cdata of each paragraph. Without this,DokuWiki preserved leading/trailing whitespace on continuation linesverbatim, which is invisible in HTML but may visible in plain-textand other renderers. It is also a requirement in the Markdown spec.Re-baseline the parser-mode tests that pinned the old preservebehavior (cdata adjacent to &lt;code&gt;/&lt;file&gt;/&lt;rss&gt;/header/footnote).

            List of files:
            /dokuwiki/_test/tests/Parsing/ParserMode/PreformattedTest.php</description>
        <pubDate>Tue, 05 May 2026 11:20:04 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>f57da51cde0cd30236737579a7b446c40f66189e - Preformatted: leave boundary \n in stream when next line has content</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/_test/tests/Parsing/ParserMode/PreformattedTest.php#f57da51cde0cd30236737579a7b446c40f66189e</link>
        <description>Preformatted: leave boundary \n in stream when next line has contentAdds a zero-width lookahead exit (?=\n[^ \t\n]) ahead of the existingconsuming \n exit. When an indented code block is followed by a non-blank line, the boundary newline now stays available for downstreamblock-level matchers (GfmHr, GfmHeader, etc.) instead of being eatenon the way out of preformatted mode.Concretely fixes a thematic-break-after-indented-code case (GFM speccase 85&apos;s trailing ----): without this change, GfmHr&apos;s \n anchor failedbecause preformatted had already consumed the newline, and the bare---- fell through to Entity which converted --- to an em-dash.The consuming branch is kept as a fall-through for the blank-line andend-of-input cases, where a pure lookahead would trip the lexer&apos;sno-advance safety check.Six PreformattedTest expectations updated: trailing cdata after apreformatted block now carries the leading \n (rendered output isunchanged &#8212; paragraph whitespace is trimmed).

            List of files:
            /dokuwiki/_test/tests/Parsing/ParserMode/PreformattedTest.php</description>
        <pubDate>Tue, 05 May 2026 08:32:28 +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/PreformattedTest.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/PreformattedTest.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>96d096f148d7def1456456590bd2910ff9115c0f - remove getLineStartMarkers registry &#8212; sort order already wins</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/_test/tests/Parsing/ParserMode/PreformattedTest.php#96d096f148d7def1456456590bd2910ff9115c0f</link>
        <description>remove getLineStartMarkers registry &#8212; sort order already winsPreformatted&apos;s entry pattern carried a `(?![\*\-])` negativelookahead to defer to list modes on indented bullet lines.0cecf9d50 (2005, &quot;new parser added&quot;) introduced it hardcoded;7958e6980 (2026, &quot;decouple hardcoded mode names in Eol andPreformatted&quot;) refactored that hardcoded knowledge intoregister/getLineStartMarkers on ModeRegistry so each list modeowned its marker chars. Both preserved the behavior verbatim;neither documented why it was needed.Tracing the lexer, it isn&apos;t. ParallelRegex merges all entrypatterns into one PCRE expression; PCRE returns the leftmostmatch and breaks ties on expression order. Modes are added insort order via ModeRegistry::getModes(), so Listblock (sort 10)always precedes Preformatted (sort 20) and wins the tie on&quot;  - foo&quot; without any lookahead. The only test that caught adifference was testPreformattedList, which happened to registermodes in non-canonical order - that was a test bug.This patch drops the lookahead in Preformatted::connectTo, theregisterLineStartMarkers call in Listblock::preConnect, theregister/getLineStartMarkers methods on ModeRegistry, and thethree registry-API unit tests. testPreformattedList nowregisters Listblock before Preformatted.

            List of files:
            /dokuwiki/_test/tests/Parsing/ParserMode/PreformattedTest.php</description>
        <pubDate>Mon, 27 Apr 2026 14:36:55 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>b1c59bed2e3645a1f5f11438cdbe7d1596f4a3a4 - add GfmCode / GfmFile for fenced code blocks</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/_test/tests/Parsing/ParserMode/PreformattedTest.php#b1c59bed2e3645a1f5f11438cdbe7d1596f4a3a4</link>
        <description>add GfmCode / GfmFile for fenced code blocksGfmCode (backticks) emits the `code` handler instruction; GfmFile(tildes) emits `file`. Column-0 fences only, no length pairingbetween opener and closer, and unclosed fences stay literal &#8212;matching DokuWiki&apos;s `&lt;code&gt;` tag convention. The info string acceptsDW&apos;s full attribute vocabulary (language, filename, [options])through a new shared `Helpers::parseCodeAttributes` that `Code`also uses, with `html` aliased to `html4strict` and `-` meaning &quot;nolanguage&quot;.Preformatted&apos;s indent threshold is now preference-gated: 2 spacesin DW-preferred settings, 4 spaces in MD-preferred, matching GFM&apos;sindented code block rule. A single tab is a trigger in both.

            List of files:
            /dokuwiki/_test/tests/Parsing/ParserMode/PreformattedTest.php</description>
        <pubDate>Thu, 23 Apr 2026 14:01:03 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>504c13e8df88563c11b3720b317991bc38835a35 - migrate parser tests to modern namespaced classes</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/_test/tests/Parsing/ParserMode/PreformattedTest.php#504c13e8df88563c11b3720b317991bc38835a35</link>
        <description>migrate parser tests to modern namespaced classesMove old-style parser tests from _test/tests/inc/parser/ to namespacedtest classes under _test/tests/Parsing/ParserMode/ and_test/tests/Parsing/Lexer/.- Add ParserTestBase with assertCalls() helper for comparing handler  call sequences with byte index stripping- Split lexer.test.php into ParallelRegexTest, StateStackTest, and  LexerTest with a RecordingHandler that extends Handler- Merge handler_parse_highlight_options tests into CodeTest- Add new tests for previously untested modes: Nocache, Notoc, Rss,  and all individual formatting modes (Strong, Emphasis, etc.)- Modernize test code: [] syntax, lowercase null, correct assertEquals  argument order, replace deprecated withConsecutive and string callables- Renderer tests remain in old location (renderers not yet migrated)

            List of files:
            /dokuwiki/_test/tests/Parsing/ParserMode/PreformattedTest.php</description>
        <pubDate>Sat, 18 Apr 2026 18:21:39 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
</channel>
</rss>
