172b2703bSAndreas Gohr<?php 272b2703bSAndreas Gohr 372b2703bSAndreas Gohr/** 472b2703bSAndreas Gohr * GFM spec examples that GfmSpecTest should skip, keyed by example number 572b2703bSAndreas Gohr * (as numbered in spec.txt / the rendered spec). 672b2703bSAndreas Gohr * 772b2703bSAndreas Gohr * Add entries here ONLY for behavior DokuWiki has explicitly decided not to 872b2703bSAndreas Gohr * implement — not for features that are merely pending. Unimplemented 972b2703bSAndreas Gohr * features should show as real failures so they remain visible TODOs on 1072b2703bSAndreas Gohr * the branch. 1172b2703bSAndreas Gohr * 1272b2703bSAndreas Gohr * Each value is a short human-readable reason that will appear in phpunit's 1372b2703bSAndreas Gohr * skip output. 1472b2703bSAndreas Gohr */ 1572b2703bSAndreas Gohr 1672b2703bSAndreas Gohrreturn [ 1772b2703bSAndreas Gohr // -------------------------------------------------------------------- 18*b37c6ef7SAndreas Gohr // Tabs (§2.2) — DokuWiki's tab handling is binary: a leading tab 19*b37c6ef7SAndreas Gohr // (matching `\n\t` directly after the newline) is the indented-code 20*b37c6ef7SAndreas Gohr // trigger; otherwise tabs are ordinary characters. CommonMark 21*b37c6ef7SAndreas Gohr // instead advances each tab to the next 4-column stop and uses the 22*b37c6ef7SAndreas Gohr // resulting column count to drive list-continuation, list-nesting, 23*b37c6ef7SAndreas Gohr // blockquote-interior, and 4-column indented-code decisions. The 24*b37c6ef7SAndreas Gohr // column arithmetic is what's missing. 25*b37c6ef7SAndreas Gohr // 26*b37c6ef7SAndreas Gohr // Examples #1, #3, #8, #10 are not listed: they happen to render 27*b37c6ef7SAndreas Gohr // correctly because a leading tab matches `\n\t`, four leading 28*b37c6ef7SAndreas Gohr // spaces match the `md`-mode 4-space code trigger, and GfmHeader 29*b37c6ef7SAndreas Gohr // accepts a tab as the post-`#` separator. 30*b37c6ef7SAndreas Gohr // -------------------------------------------------------------------- 31*b37c6ef7SAndreas Gohr 2 => 'tab indented-code: 2 spaces then tab. The 4-space trigger needs' 32*b37c6ef7SAndreas Gohr . ' 4 spaces; the `\n\t` trigger needs the tab directly after the' 33*b37c6ef7SAndreas Gohr . ' newline. Neither fires. CommonMark counts the tab as advancing' 34*b37c6ef7SAndreas Gohr . ' to column 4 → code block; DokuWiki does no such arithmetic.', 35*b37c6ef7SAndreas Gohr 4 => 'tab as 4-column lazy-continuation indent inside a list item.' 36*b37c6ef7SAndreas Gohr . ' DokuWiki treats a leading tab as the indented-code trigger,' 37*b37c6ef7SAndreas Gohr . ' not as list continuation. Resolving requires column arithmetic' 38*b37c6ef7SAndreas Gohr . ' against the list\'s content column.', 39*b37c6ef7SAndreas Gohr 5 => 'two tabs (8 columns) inside a list item → code block inside list.' 40*b37c6ef7SAndreas Gohr . ' Requires column arithmetic to subtract the list\'s content' 41*b37c6ef7SAndreas Gohr . ' column from the indent and route the residue into a nested' 42*b37c6ef7SAndreas Gohr . ' code block.', 43*b37c6ef7SAndreas Gohr 6 => 'tabs after blockquote marker → indented code inside blockquote.' 44*b37c6ef7SAndreas Gohr . ' Requires column arithmetic for the blockquote interior;' 45*b37c6ef7SAndreas Gohr . ' DokuWiki treats the tab as a top-level code trigger instead.', 46*b37c6ef7SAndreas Gohr 7 => 'tabs after list marker → indented code inside list item.' 47*b37c6ef7SAndreas Gohr . ' Requires column arithmetic for the list interior; DokuWiki' 48*b37c6ef7SAndreas Gohr . ' treats the tab as a top-level code trigger instead.', 49*b37c6ef7SAndreas Gohr 9 => 'tab as 4-column indent for list nesting. DokuWiki treats a' 50*b37c6ef7SAndreas Gohr . ' leading tab as the indented-code trigger, never as list' 51*b37c6ef7SAndreas Gohr . ' nesting indent.', 52*b37c6ef7SAndreas Gohr 11 => '`*\t*\t*\t` thematic break with tab separators. Strict-bare-run' 53*b37c6ef7SAndreas Gohr . ' HR policy rejects internal whitespace (same family as #21-23);' 54*b37c6ef7SAndreas Gohr . ' the tab form is the same case.', 55*b37c6ef7SAndreas Gohr 56*b37c6ef7SAndreas Gohr // -------------------------------------------------------------------- 573e6baeffSAndreas Gohr // Thematic breaks (GfmHr) — strict-only HR is intentional. The 583e6baeffSAndreas Gohr // delimiter run must be bare: no leading, trailing, or internal 593e6baeffSAndreas Gohr // whitespace in either DW or GFM flavor. The list-precedence cases 603e6baeffSAndreas Gohr // additionally need a GfmListblock guard that is out of scope. 613e6baeffSAndreas Gohr // -------------------------------------------------------------------- 623e6baeffSAndreas Gohr 17 => 'thematic break: 0-3 spaces of leading indent. Strict policy:' 633e6baeffSAndreas Gohr . ' opener must be at column 0 in either flavor.', 643e6baeffSAndreas Gohr 21 => 'thematic break: spaces between delimiter chars (`- - -`).' 653e6baeffSAndreas Gohr . ' Strict policy: bare run only.', 663e6baeffSAndreas Gohr 22 => 'thematic break: spaces between delimiter chars (`** * **`).' 673e6baeffSAndreas Gohr . ' Strict policy: bare run only.', 683e6baeffSAndreas Gohr 23 => 'thematic break: spaces between delimiter chars (`- -`).' 693e6baeffSAndreas Gohr . ' Strict policy: bare run only.', 703e6baeffSAndreas Gohr 24 => 'thematic break: trailing spaces after the run. Strict policy:' 713e6baeffSAndreas Gohr . ' bare run only.', 723e6baeffSAndreas Gohr 29 => 'thematic break: Setext heading underline `Foo\n---` should' 733e6baeffSAndreas Gohr . ' render as `<h2>`. Setext headings are deliberately not' 743e6baeffSAndreas Gohr . ' supported — `---` collides with DokuWiki HR and `===` would' 753e6baeffSAndreas Gohr . ' collide with DokuWiki heading syntax.', 763e6baeffSAndreas Gohr 30 => 'thematic break vs. list-item precedence (`* * *` between list' 773e6baeffSAndreas Gohr . ' items): requires internal-space HR support and a GfmListblock' 783e6baeffSAndreas Gohr . ' guard so the list refuses to absorb the HR-shaped line. Both' 793e6baeffSAndreas Gohr . ' out of scope; the line stays a list-item body.', 803e6baeffSAndreas Gohr 31 => 'thematic break inside list with different bullet (`- * * *`):' 813e6baeffSAndreas Gohr . ' depends on internal-space HR support inside the sub-parsed' 823e6baeffSAndreas Gohr . ' item body. See example 30.', 833e6baeffSAndreas Gohr 843e6baeffSAndreas Gohr // -------------------------------------------------------------------- 85b414dba2SAndreas Gohr // Setext headings (§4.3) — deliberately not supported across the 86b414dba2SAndreas Gohr // whole section. The `---` underline collides with DokuWiki\'s HR 87b414dba2SAndreas Gohr // syntax and `===` would collide with DokuWiki\'s heading delimiter. 88b414dba2SAndreas Gohr // Same rationale as #29 (thematic break vs. Setext underline), 89b414dba2SAndreas Gohr // #111 (fence after Setext), and #212 (Setext after blockquote). 90b414dba2SAndreas Gohr // 91b414dba2SAndreas Gohr // Examples #62, #64, #67, #68, #69, #71, #74 are NOT listed: those 92b414dba2SAndreas Gohr // are cases where Setext is deliberately NOT triggered (blockquote / 93b414dba2SAndreas Gohr // list / paragraph wins, or blank lines disambiguate), so the spec 94b414dba2SAndreas Gohr // output matches DokuWiki\'s no-Setext rendering and they pass 95b414dba2SAndreas Gohr // naturally. 96b414dba2SAndreas Gohr // 97b414dba2SAndreas Gohr // #58 and #75 also depend on DokuWiki\'s strict-bare-run HR rule 98b414dba2SAndreas Gohr // (`--- -` and `* * *` need internal-space HR, see #21-23) — they 99b414dba2SAndreas Gohr // sit in the Setext section because the spec uses them to 100b414dba2SAndreas Gohr // illustrate Setext-underline edge cases. 101b414dba2SAndreas Gohr // -------------------------------------------------------------------- 102b414dba2SAndreas Gohr 50 => 'Setext heading (`Foo *bar*\n=====` / `\n-----`): Setext' 103b414dba2SAndreas Gohr . ' headings deliberately not supported — `---`/`===` underlines' 104b414dba2SAndreas Gohr . ' collide with DokuWiki HR / heading syntax.', 105b414dba2SAndreas Gohr 51 => 'Setext heading with multi-line content: Setext headings' 106b414dba2SAndreas Gohr . ' deliberately not supported (see #50).', 107b414dba2SAndreas Gohr 52 => 'Setext heading with indented multi-line content: Setext' 108b414dba2SAndreas Gohr . ' headings deliberately not supported (see #50).', 109b414dba2SAndreas Gohr 53 => 'Setext heading with any-length underline: Setext headings' 110b414dba2SAndreas Gohr . ' deliberately not supported (see #50).', 111b414dba2SAndreas Gohr 54 => 'Setext heading with 3-space-indented content / underline:' 112b414dba2SAndreas Gohr . ' Setext headings deliberately not supported (see #50).', 113b414dba2SAndreas Gohr 55 => 'Setext heading: 4-space-indented content forms code block,' 114b414dba2SAndreas Gohr . ' then `---` HR. Setext headings deliberately not supported' 115b414dba2SAndreas Gohr . ' (see #50).', 116b414dba2SAndreas Gohr 56 => 'Setext heading: underline indented up to 3 spaces with' 117b414dba2SAndreas Gohr . ' trailing spaces. Setext headings deliberately not' 118b414dba2SAndreas Gohr . ' supported (see #50).', 119b414dba2SAndreas Gohr 57 => 'Setext heading vs. 4-space-indented underline (paragraph' 120b414dba2SAndreas Gohr . ' wins). Setext headings deliberately not supported (see #50).', 121b414dba2SAndreas Gohr 58 => 'Setext heading: underline cannot contain internal spaces' 122b414dba2SAndreas Gohr . ' (`= =` / `--- -`). Setext headings deliberately not supported' 123b414dba2SAndreas Gohr . ' (see #50); also depends on internal-space HR support DokuWiki' 124b414dba2SAndreas Gohr . ' lacks (see #21-23).', 125b414dba2SAndreas Gohr 59 => 'Setext heading: trailing spaces in content do not cause a' 126b414dba2SAndreas Gohr . ' line break. Setext headings deliberately not supported (see' 127b414dba2SAndreas Gohr . ' #50).', 128b414dba2SAndreas Gohr 60 => 'Setext heading: trailing backslash in content. Setext' 129b414dba2SAndreas Gohr . ' headings deliberately not supported (see #50).', 130b414dba2SAndreas Gohr 61 => 'Setext heading: block-structure precedence over inline.' 131b414dba2SAndreas Gohr . ' Setext headings deliberately not supported (see #50).', 132b414dba2SAndreas Gohr 63 => 'Setext heading: underline cannot be a lazy continuation in' 133b414dba2SAndreas Gohr . ' a blockquote. Setext headings deliberately not supported' 134b414dba2SAndreas Gohr . ' (see #50).', 135b414dba2SAndreas Gohr 65 => 'Setext heading: preceding paragraph becomes part of heading' 136b414dba2SAndreas Gohr . ' content. Setext headings deliberately not supported (see #50).', 137b414dba2SAndreas Gohr 66 => 'Setext heading: no blank line required before/after. Setext' 138b414dba2SAndreas Gohr . ' headings deliberately not supported (see #50).', 139b414dba2SAndreas Gohr 70 => 'Setext heading: 4-space-indented content forms code block,' 140b414dba2SAndreas Gohr . ' then `---` HR. Setext headings deliberately not supported' 141b414dba2SAndreas Gohr . ' (see #50).', 142b414dba2SAndreas Gohr 72 => 'Setext heading with backslash-escaped marker `\\> foo`.' 143b414dba2SAndreas Gohr . ' Setext headings deliberately not supported (see #50).', 144b414dba2SAndreas Gohr 73 => 'Setext heading: blank-line-separated paragraph + heading +' 145b414dba2SAndreas Gohr . ' paragraph. Setext headings deliberately not supported (see' 146b414dba2SAndreas Gohr . ' #50).', 147b414dba2SAndreas Gohr 75 => 'Setext heading boundary: `* * *` should be HR (cannot count' 148b414dba2SAndreas Gohr . ' as Setext underline). Setext headings deliberately not' 149b414dba2SAndreas Gohr . ' supported (see #50); also depends on internal-space HR' 150b414dba2SAndreas Gohr . ' support DokuWiki lacks (see #21-23).', 151b414dba2SAndreas Gohr 76 => 'Setext heading: backslash-escaped underline `\\---` keeps' 152b414dba2SAndreas Gohr . ' content as paragraph. Setext headings deliberately not' 153b414dba2SAndreas Gohr . ' supported (see #50).', 154b414dba2SAndreas Gohr 155b414dba2SAndreas Gohr // -------------------------------------------------------------------- 156b1c59bedSAndreas Gohr // Fenced code blocks (GfmCode / GfmFile) — deliberate simplifications 157b1c59bedSAndreas Gohr // versus strict GFM. All of these are consequences of lexer constraints 158b1c59bedSAndreas Gohr // (no regex backreferences) or the deliberate column-0-only policy. 159b1c59bedSAndreas Gohr // -------------------------------------------------------------------- 160b1c59bedSAndreas Gohr 94 => 'fenced code: closing fence must be ≥ opening length — DokuWiki' 161b1c59bedSAndreas Gohr . ' accepts any 3+ run as a closer (no regex backreferences for' 162b1c59bedSAndreas Gohr . ' length pairing). Deliberate relaxation.', 163b1c59bedSAndreas Gohr 95 => 'fenced code (tilde variant): closing fence must be ≥ opening' 164b1c59bedSAndreas Gohr . ' length — see example 94.', 165b1c59bedSAndreas Gohr 96 => 'fenced code: unclosed fence — DokuWiki convention requires a' 166b1c59bedSAndreas Gohr . ' closer (matches DW <code> tag), so unclosed fences stay' 167b414dba2SAndreas Gohr . ' literal rather than consuming to EOF. GFM\'s "close at end"' 168b414dba2SAndreas Gohr . ' rule is really "close at any container boundary" in' 169b414dba2SAndreas Gohr . ' CommonMark\'s two-pass block parser, which our single-pass' 170b414dba2SAndreas Gohr . ' lexer cannot implement.', 171b1c59bedSAndreas Gohr 97 => 'fenced code: unclosed fence with intervening short run — stays' 172b1c59bedSAndreas Gohr . ' literal, see example 96.', 173b414dba2SAndreas Gohr 98 => 'fenced code inside blockquote: GFM closes the fence at the' 174b414dba2SAndreas Gohr . ' blockquote\'s end, but DokuWiki requires an explicit closing' 175b414dba2SAndreas Gohr . ' fence and the single-pass lexer has no notion of container' 176b414dba2SAndreas Gohr . ' boundaries to close at. Same root cause as example 96 —' 177b414dba2SAndreas Gohr . ' unclosed fences stay literal.', 178b1c59bedSAndreas Gohr 101 => 'fenced code: opener indented 1 space — DokuWiki requires' 179b1c59bedSAndreas Gohr . ' column-0 fences. Indent tolerance + per-line body dedent out' 180b1c59bedSAndreas Gohr . ' of scope.', 181b1c59bedSAndreas Gohr 102 => 'fenced code: opener indented 2 spaces — see example 101.', 182b1c59bedSAndreas Gohr 103 => 'fenced code: opener indented 3 spaces — see example 101.', 183b1c59bedSAndreas Gohr 105 => 'fenced code: closer indented 2 spaces — column-0-only policy,' 184b1c59bedSAndreas Gohr . ' see example 101.', 185b1c59bedSAndreas Gohr 106 => 'fenced code: indented opener with less-indented closer —' 186b1c59bedSAndreas Gohr . ' column-0-only policy, see example 101.', 187b1c59bedSAndreas Gohr 107 => 'fenced code: 4-space-indented closer — with column-0-only' 188b1c59bedSAndreas Gohr . ' policy there is no valid closer, so the fence stays literal' 189b1c59bedSAndreas Gohr . ' (see example 96).', 190b1c59bedSAndreas Gohr 109 => 'fenced code: malformed closer `~~~ ~~` (space-broken run) —' 191b1c59bedSAndreas Gohr . ' with no valid closer the fence stays literal (see example 96).', 192b1c59bedSAndreas Gohr 108 => 'fenced code: `` `` is not a valid fence; GFM falls back to an' 193b1c59bedSAndreas Gohr . ' inline code span of length 3. Inline spans with n≥3 not' 194b1c59bedSAndreas Gohr . ' implemented (GfmBacktickSingle/Double cover only n=1, n=2).', 195b1c59bedSAndreas Gohr 111 => 'fenced code interrupting Setext heading (`foo\n---`): Setext' 196685560ebSAndreas Gohr . ' headings are deliberately not supported — the `---` underline' 197685560ebSAndreas Gohr . ' collides with DokuWiki\'s horizontal rule and `===` would' 198685560ebSAndreas Gohr . ' collide with DokuWiki heading syntax.', 199b1c59bedSAndreas Gohr 115 => 'fenced code: `` `` backtick-fence-with-backticks-in-info-string' 200b1c59bedSAndreas Gohr . ' is invalid; GFM falls back to n=3 inline span — inline spans' 201b1c59bedSAndreas Gohr . ' with n≥3 not implemented. See example 108.', 202b1c59bedSAndreas Gohr 203b1c59bedSAndreas Gohr // -------------------------------------------------------------------- 204b414dba2SAndreas Gohr // HTML blocks (§4.6) — raw HTML pass-through is not supported 205b414dba2SAndreas Gohr // -------------------------------------------------------------------- 206b414dba2SAndreas Gohr 118 => 'raw HTML block (script/pre/style/textarea group): raw HTML pass-through not supported — DokuWiki escapes `<` as `<`', 207b414dba2SAndreas Gohr 119 => 'raw HTML block: raw HTML pass-through not supported', 208b414dba2SAndreas Gohr 120 => 'raw HTML block: raw HTML pass-through not supported', 209b414dba2SAndreas Gohr 121 => 'raw HTML block: raw HTML pass-through not supported', 210b414dba2SAndreas Gohr 122 => 'raw HTML block (comment): raw HTML pass-through not supported', 211b414dba2SAndreas Gohr 123 => 'raw HTML block (processing instruction): raw HTML pass-through not supported', 212b414dba2SAndreas Gohr 124 => 'raw HTML block (declaration): raw HTML pass-through not supported', 213b414dba2SAndreas Gohr 125 => 'raw HTML block (CDATA): raw HTML pass-through not supported', 214b414dba2SAndreas Gohr 126 => 'raw HTML block (block-level tag group): raw HTML pass-through not supported', 215b414dba2SAndreas Gohr 127 => 'raw HTML block: raw HTML pass-through not supported', 216b414dba2SAndreas Gohr 128 => 'raw HTML block: raw HTML pass-through not supported', 217b414dba2SAndreas Gohr 129 => 'raw HTML block: raw HTML pass-through not supported', 218b414dba2SAndreas Gohr 130 => 'raw HTML block: raw HTML pass-through not supported', 219b414dba2SAndreas Gohr 131 => 'raw HTML block: raw HTML pass-through not supported', 220b414dba2SAndreas Gohr 132 => 'raw HTML block: raw HTML pass-through not supported', 221b414dba2SAndreas Gohr 133 => 'raw HTML block: raw HTML pass-through not supported', 222b414dba2SAndreas Gohr 134 => 'raw HTML block: raw HTML pass-through not supported', 223b414dba2SAndreas Gohr 135 => 'raw HTML block: raw HTML pass-through not supported', 224b414dba2SAndreas Gohr 136 => 'raw HTML block (any-tag group): raw HTML pass-through not supported', 225b414dba2SAndreas Gohr 137 => 'raw HTML block: raw HTML pass-through not supported', 226b414dba2SAndreas Gohr 138 => 'raw HTML block: raw HTML pass-through not supported', 227b414dba2SAndreas Gohr 139 => 'raw HTML block: raw HTML pass-through not supported', 228b414dba2SAndreas Gohr 140 => 'raw HTML block: raw HTML pass-through not supported', 229b414dba2SAndreas Gohr 141 => 'raw HTML block: raw HTML pass-through not supported', 230b414dba2SAndreas Gohr 142 => 'raw HTML block: raw HTML pass-through not supported', 231b414dba2SAndreas Gohr 143 => 'raw HTML block: raw HTML pass-through not supported', 232b414dba2SAndreas Gohr 144 => 'raw HTML block: raw HTML pass-through not supported', 233b414dba2SAndreas Gohr 145 => 'raw HTML block: raw HTML pass-through not supported', 234b414dba2SAndreas Gohr 146 => 'raw HTML block: raw HTML pass-through not supported', 235b414dba2SAndreas Gohr 147 => 'raw HTML block: raw HTML pass-through not supported', 236b414dba2SAndreas Gohr 148 => 'raw HTML block: raw HTML pass-through not supported', 237b414dba2SAndreas Gohr 149 => 'raw HTML block: raw HTML pass-through not supported', 238b414dba2SAndreas Gohr 150 => 'raw HTML block: raw HTML pass-through not supported', 239b414dba2SAndreas Gohr 151 => 'raw HTML block: raw HTML pass-through not supported', 240b414dba2SAndreas Gohr 152 => 'raw HTML block: raw HTML pass-through not supported', 241b414dba2SAndreas Gohr 153 => 'raw HTML block: raw HTML pass-through not supported', 242b414dba2SAndreas Gohr 154 => 'raw HTML block: raw HTML pass-through not supported', 243b414dba2SAndreas Gohr 155 => 'raw HTML block: raw HTML pass-through not supported', 244b414dba2SAndreas Gohr 156 => 'raw HTML block: raw HTML pass-through not supported', 245b414dba2SAndreas Gohr 157 => 'raw HTML block: raw HTML pass-through not supported', 246b414dba2SAndreas Gohr 158 => 'raw HTML block: raw HTML pass-through not supported', 247b414dba2SAndreas Gohr 159 => 'raw HTML block: raw HTML pass-through not supported', 248b414dba2SAndreas Gohr 160 => 'raw HTML block: raw HTML pass-through not supported', 249b414dba2SAndreas Gohr 250b414dba2SAndreas Gohr // -------------------------------------------------------------------- 251b414dba2SAndreas Gohr // Link reference definitions (§4.7) — single-pass lexer cannot resolve 252b414dba2SAndreas Gohr // forward references, so the `[foo]: /url` definition lines are not 253b414dba2SAndreas Gohr // recognised and the matching `[foo]` references stay literal. Same 254b414dba2SAndreas Gohr // rationale as the reference-link entries at #535-579. 255b414dba2SAndreas Gohr // Examples #168, #180-182 are NOT listed: their definitions are 256b414dba2SAndreas Gohr // invalid (empty URL / inside indented code / inside fenced code / 257b414dba2SAndreas Gohr // attached to a paragraph), so the spec also expects literal output 258b414dba2SAndreas Gohr // for the `[foo]` reference, and DW agrees. 259b414dba2SAndreas Gohr // -------------------------------------------------------------------- 260b414dba2SAndreas Gohr 161 => 'link reference definition: forward-reference definitions not supported (single-pass lexer)', 261b414dba2SAndreas Gohr 162 => 'link reference definition: forward-reference definitions not supported (single-pass lexer)', 262b414dba2SAndreas Gohr 163 => 'link reference definition (multi-line title): forward-reference definitions not supported (single-pass lexer)', 263b414dba2SAndreas Gohr 164 => 'link reference definition (case-insensitive label): forward-reference definitions not supported (single-pass lexer)', 264b414dba2SAndreas Gohr 165 => 'link reference definition (Unicode case folding): forward-reference definitions not supported (single-pass lexer)', 265b414dba2SAndreas Gohr 166 => 'link reference definition (whitespace-collapsed label): forward-reference definitions not supported (single-pass lexer)', 266b414dba2SAndreas Gohr 167 => 'link reference definition (no link text used): forward-reference definitions not supported (single-pass lexer)', 267b414dba2SAndreas Gohr 169 => 'link reference definition (pointy-bracket destination): forward-reference definitions not supported (single-pass lexer)', 268b414dba2SAndreas Gohr 170 => 'link reference definition (no title, blank line in between): forward-reference definitions not supported (single-pass lexer)', 269b414dba2SAndreas Gohr 171 => 'link reference definition (title only, no destination): forward-reference definitions not supported (single-pass lexer)', 270b414dba2SAndreas Gohr 172 => 'link reference definition (multiple definitions): forward-reference definitions not supported (single-pass lexer)', 271b414dba2SAndreas Gohr 173 => 'link reference definition (first wins on duplicate label): forward-reference definitions not supported (single-pass lexer)', 272b414dba2SAndreas Gohr 174 => 'link reference definition (label case-insensitive): forward-reference definitions not supported (single-pass lexer)', 273b414dba2SAndreas Gohr 175 => 'link reference definition (used as paragraph delimiter): forward-reference definitions not supported (single-pass lexer)', 274b414dba2SAndreas Gohr 176 => 'link reference definition (no body following): forward-reference definitions not supported (single-pass lexer)', 275b414dba2SAndreas Gohr 177 => 'link reference definition (label with surrounding whitespace): forward-reference definitions not supported (single-pass lexer)', 276b414dba2SAndreas Gohr 178 => 'link reference definition (indented up to 3 spaces): forward-reference definitions not supported (single-pass lexer)', 277b414dba2SAndreas Gohr 179 => 'link reference definition (multi-line definition with title): forward-reference definitions not supported (single-pass lexer)', 278b414dba2SAndreas Gohr 183 => 'link reference definition (does not interrupt paragraph): forward-reference definitions not supported (single-pass lexer)', 279b414dba2SAndreas Gohr 184 => 'link reference definition (between blockquote and paragraph): forward-reference definitions not supported (single-pass lexer)', 280b414dba2SAndreas Gohr 185 => 'link reference definition (lone definition emits nothing): forward-reference definitions not supported (single-pass lexer)', 281b414dba2SAndreas Gohr 186 => 'link reference definition (definition then HR): forward-reference definitions not supported (single-pass lexer)', 282b414dba2SAndreas Gohr 187 => 'link reference definition (multiple defs in a row): forward-reference definitions not supported (single-pass lexer)', 283b414dba2SAndreas Gohr 188 => 'link reference definition (def inside blockquote): forward-reference definitions not supported (single-pass lexer)', 284b414dba2SAndreas Gohr 329 => 'reference link with entity-decoded URL in definition: depends on' 285b414dba2SAndreas Gohr . ' link reference definitions, which forward-reference definitions' 286b414dba2SAndreas Gohr . ' are not supported (single-pass lexer)', 287b414dba2SAndreas Gohr 288b414dba2SAndreas Gohr // -------------------------------------------------------------------- 2898ed75a23SAndreas Gohr // Code-span edge cases that collide with project-wide decisions 2908ed75a23SAndreas Gohr // (no raw HTML, no GFM angle-bracket autolinks, typography on by 2918ed75a23SAndreas Gohr // default) or with the single-pass lexer's limits. 2928ed75a23SAndreas Gohr // -------------------------------------------------------------------- 2938ed75a23SAndreas Gohr 351 => 'code span vs. emphasis: cross-positional precedence would require' 2948ed75a23SAndreas Gohr . ' a pre-scan pass — the single-pass lexer matches leftmost-first' 2958ed75a23SAndreas Gohr . ' and cannot reject an earlier emphasis opener because a later' 2968ed75a23SAndreas Gohr . ' backtick span would consume its closer', 297b414dba2SAndreas Gohr 352 => 'code span vs. link `[not a `link](/foo`)`: the link opener is' 298b414dba2SAndreas Gohr . ' leftmost but a backtick span inside its label should consume' 299b414dba2SAndreas Gohr . ' the closing `]` and `)` — single-pass lexer matches' 300b414dba2SAndreas Gohr . ' leftmost-first and cannot reorder spans (see #351).', 3018ed75a23SAndreas Gohr 353 => 'code span: the trailing `"` outside the span is converted to a' 3028ed75a23SAndreas Gohr . ' curly quote by DokuWiki typography, diverging from the spec HTML', 303b414dba2SAndreas Gohr 327 => 'raw HTML tag with entity in attribute: raw HTML pass-through not supported', 304b414dba2SAndreas Gohr 354 => 'raw HTML tag pass-through: raw HTML pass-through not supported', 3058ed75a23SAndreas Gohr 356 => 'GFM angle-bracket autolink `<http://…>`: not implemented — we' 3068ed75a23SAndreas Gohr . ' rely on DokuWiki\'s existing bare-URL detection, which does not' 3078ed75a23SAndreas Gohr . ' parse `<URL>` form', 3088ed75a23SAndreas Gohr 3098ed75a23SAndreas Gohr // -------------------------------------------------------------------- 31072b2703bSAndreas Gohr // CommonMark §6.2 flanking-delimiter analysis — deliberately not 31172b2703bSAndreas Gohr // implemented. DokuWiki's regex lexer uses leftmost-match and cannot 31272b2703bSAndreas Gohr // apply CommonMark's left/right-flanking rules that distinguish 31372b2703bSAndreas Gohr // word-chars, whitespace, and punctuation for `*`/`_` delimiters, or 31472b2703bSAndreas Gohr // the "multiple-of-3" rule for overlapping runs. These examples all 31572b2703bSAndreas Gohr // rely on that machinery. 31672b2703bSAndreas Gohr // -------------------------------------------------------------------- 31772b2703bSAndreas Gohr 31872b2703bSAndreas Gohr // Unicode whitespace in flanking context. Our `\s` is ASCII-only 31972b2703bSAndreas Gohr // because the lexer doesn't set the PCRE `u` flag. 32072b2703bSAndreas Gohr 363 => 'Unicode whitespace (U+00A0) flanking — requires u-flag-aware regex', 32172b2703bSAndreas Gohr 32272b2703bSAndreas Gohr // Punctuation-adjacent flanking for `*` / `_` / `**` / `__` 32372b2703bSAndreas Gohr 362 => 'flanking: punctuation-adjacent `*` (left-flanking vs. right-flanking)', 32472b2703bSAndreas Gohr 368 => 'flanking: punctuation-adjacent `_`', 32572b2703bSAndreas Gohr 372 => 'flanking: intraword `_` with punctuation inside', 32672b2703bSAndreas Gohr 377 => 'flanking: `*` followed by `(` requires punctuation-aware flanking', 32772b2703bSAndreas Gohr 378 => 'flanking: nested `*(*foo*)*` requires flanking + balanced-pair analysis', 32872b2703bSAndreas Gohr 382 => 'flanking: nested `_(_foo_)_` requires flanking + balanced-pair analysis', 32972b2703bSAndreas Gohr 389 => 'flanking: punctuation-adjacent `**`', 33072b2703bSAndreas Gohr 394 => 'flanking: punctuation-adjacent `__`', 33172b2703bSAndreas Gohr 401 => 'flanking: `**` followed by `(`', 33272b2703bSAndreas Gohr 404 => 'flanking: nested `*bar*` inside `**foo ... foo**` with punctuation', 33372b2703bSAndreas Gohr 407 => 'flanking: `__` followed by `(`', 33472b2703bSAndreas Gohr 470 => 'flanking: nested `*_foo_*` requires balanced-pair analysis', 33572b2703bSAndreas Gohr 472 => 'flanking: nested `_*foo*_` requires balanced-pair analysis', 33672b2703bSAndreas Gohr 33772b2703bSAndreas Gohr // Intraword `__` strong (even multibyte) — flanking rule for `_` requires 33872b2703bSAndreas Gohr // examining whether the delimiter run is word-boundary-flanking, which our 33972b2703bSAndreas Gohr // simple lookbehind/lookahead approximation doesn't fully match. 34072b2703bSAndreas Gohr 395 => 'flanking: intraword `__` (`foo__bar__`) — left-flanking vs right-flanking', 34172b2703bSAndreas Gohr 396 => 'flanking: intraword `__` across digits (`5__6__78`)', 34272b2703bSAndreas Gohr 397 => 'flanking: intraword `__` with Cyrillic', 34372b2703bSAndreas Gohr 398 => 'flanking: `__foo, __bar__, baz__` — flanking + balanced pairing', 34472b2703bSAndreas Gohr 409 => 'flanking: `__foo__bar` — intraword close', 34572b2703bSAndreas Gohr 410 => 'flanking: intraword `__` with Cyrillic (leading)', 34672b2703bSAndreas Gohr 411 => 'flanking: `__foo__bar__baz__` — multiple `__` pairs with flanking', 34772b2703bSAndreas Gohr 412 => 'flanking: `__(bar)__.` — punctuation-adjacent', 34872b2703bSAndreas Gohr 34972b2703bSAndreas Gohr // Overlapping / multiple-of-3 rule for runs 35072b2703bSAndreas Gohr 416 => 'CommonMark rule 9 (overlapping same-delimiter `_foo _bar_ baz_`)', 35172b2703bSAndreas Gohr 417 => 'CommonMark overlapping `_` / `__` with flanking', 35272b2703bSAndreas Gohr 418 => 'CommonMark overlapping `*foo *bar**` — multiple-of-3 rule', 35372b2703bSAndreas Gohr 419 => 'CommonMark nested `*foo **bar** baz*` — balanced-pair analysis', 35472b2703bSAndreas Gohr 421 => 'CommonMark overlapping `*foo**bar*` — multiple-of-3', 35572b2703bSAndreas Gohr 422 => 'CommonMark nested `***foo** bar*` — triple-delimiter analysis', 35672b2703bSAndreas Gohr 423 => 'CommonMark nested `*foo **bar***` — triple-delimiter analysis', 35772b2703bSAndreas Gohr 424 => 'CommonMark nested `*foo**bar***` — triple-delimiter analysis', 35872b2703bSAndreas Gohr 425 => 'CommonMark triple `foo***bar***baz` — triple-delimiter analysis', 35972b2703bSAndreas Gohr 426 => 'CommonMark long delimiter runs `foo******bar*********baz`', 36072b2703bSAndreas Gohr 427 => 'CommonMark deeply nested `*foo **bar *baz* bim** bop*`', 36172b2703bSAndreas Gohr 434 => 'CommonMark overlapping `__foo __bar__ baz__` — multiple-of-3', 36272b2703bSAndreas Gohr 435 => 'CommonMark `____foo__ bar__` — leading long delimiter run', 36372b2703bSAndreas Gohr 436 => 'CommonMark `**foo **bar****` — trailing long delimiter run', 36472b2703bSAndreas Gohr 439 => 'CommonMark nested `***foo* bar**` — triple-delimiter', 36572b2703bSAndreas Gohr 440 => 'CommonMark nested `**foo *bar***` — triple-delimiter', 36672b2703bSAndreas Gohr 441 => 'CommonMark deeply nested `**foo *bar **baz** bim* bop**`', 36772b2703bSAndreas Gohr 36872b2703bSAndreas Gohr // `__foo_` / `_foo__` — mixing `_` and `__` requires flanking to decide 36972b2703bSAndreas Gohr // which delimiter pairs open/close. 37072b2703bSAndreas Gohr 463 => 'flanking: `__foo_` — mixed `_`/`__` pairing', 37172b2703bSAndreas Gohr 464 => 'flanking: `_foo__` — mixed `_`/`__` pairing', 37272b2703bSAndreas Gohr 465 => 'flanking: `___foo__` — delimiter-run length analysis', 37372b2703bSAndreas Gohr 466 => 'flanking: `____foo_` — delimiter-run length analysis', 37472b2703bSAndreas Gohr 467 => 'flanking: `__foo___` — delimiter-run length analysis', 37572b2703bSAndreas Gohr 468 => 'flanking: `_foo____` — delimiter-run length analysis', 37672b2703bSAndreas Gohr 37772b2703bSAndreas Gohr // Long delimiter runs require excess-drop logic (2 outer chars dropped 37872b2703bSAndreas Gohr // from each side). Stack-based pairing needed — out of scope. 37972b2703bSAndreas Gohr 473 => 'CommonMark `****foo****` — excess-drop (4+4 → strong only)', 38072b2703bSAndreas Gohr 474 => 'CommonMark `____foo____` — excess-drop (4+4 → strong only)', 38172b2703bSAndreas Gohr 475 => 'CommonMark `******foo******` — excess-drop (6+6 → strong only)', 38272b2703bSAndreas Gohr 477 => 'CommonMark `_____foo_____` — excess-drop (5+5 → em+strong, 2 dropped each side)', 38372b2703bSAndreas Gohr 38472b2703bSAndreas Gohr // Overlapping / crossing delimiters 38572b2703bSAndreas Gohr 478 => 'CommonMark `*foo _bar* baz_` — overlapping different delimiters', 38672b2703bSAndreas Gohr 479 => 'CommonMark `*foo __bar *baz bim__ bam*` — crossing delimiters', 38772b2703bSAndreas Gohr 480 => 'CommonMark `**foo **bar baz**` — overlapping same delimiter', 3888719732dSAndreas Gohr 389b414dba2SAndreas Gohr // Emphasis vs. angle-bracket autolink: same root cause as #351 (the 390b414dba2SAndreas Gohr // single-pass lexer matches leftmost-first and cannot reject an 391b414dba2SAndreas Gohr // earlier `**`/`__` opener because a later `<URL>` autolink would 392b414dba2SAndreas Gohr // consume its closer). 393b414dba2SAndreas Gohr 489 => 'emphasis vs. angle-bracket autolink `**a<http://...?q=**>`:' 394b414dba2SAndreas Gohr . ' leftmost-match cannot reorder spans — see #351 for the' 395b414dba2SAndreas Gohr . ' single-pass-lexer rationale.', 396b414dba2SAndreas Gohr 490 => 'emphasis vs. angle-bracket autolink `__a<http://...?q=__>`:' 397b414dba2SAndreas Gohr . ' leftmost-match cannot reorder spans — see #351.', 398b414dba2SAndreas Gohr 3998719732dSAndreas Gohr // -------------------------------------------------------------------- 400e89aeebdSAndreas Gohr // Inline link `[text](url)` — features GfmLink deliberately does not 401e89aeebdSAndreas Gohr // implement. Either rarely-used syntax paid for with disproportionate 402e89aeebdSAndreas Gohr // regex complexity, or single-pass-lexer limits that can't be worked 403e89aeebdSAndreas Gohr // around inside one mode. 404e89aeebdSAndreas Gohr // -------------------------------------------------------------------- 405e89aeebdSAndreas Gohr 406e89aeebdSAndreas Gohr // GFM link title attribute (`"title"` / `'title'` / `(title)` after 407e89aeebdSAndreas Gohr // the URL). Parses cleanly but is discarded: DokuWiki's link handler 408e89aeebdSAndreas Gohr // instructions have no title-attribute slot, and plumbing one through 409e89aeebdSAndreas Gohr // every renderer is out of scope for GfmLink. 410eb15e634SAndreas Gohr 328 => 'link with entity-decoded URL and title: URL side decodes correctly,' 411eb15e634SAndreas Gohr . ' but the title attribute is discarded — DokuWiki link instructions' 412eb15e634SAndreas Gohr . ' have no title slot.', 413e89aeebdSAndreas Gohr 493 => 'link title attribute: GfmLink parses but discards — DokuWiki link instructions have no title slot', 414e89aeebdSAndreas Gohr 513 => 'link title attribute (three quoting styles): discarded by GfmLink', 415*b37c6ef7SAndreas Gohr 514 => 'link title with HTML-entity escape `"title \\"""`: title slot not supported (see #493)', 416e89aeebdSAndreas Gohr 515 => 'link title separated by non-breaking space: title slot not supported', 417e89aeebdSAndreas Gohr 516 => 'link title with nested balanced quotes: Markdown.pl quirk, not supported', 418e89aeebdSAndreas Gohr 517 => 'link title with different quote type for inner quotes: title slot not supported', 419e89aeebdSAndreas Gohr 518 => 'multi-line link title: title slot not supported', 420e89aeebdSAndreas Gohr 421e89aeebdSAndreas Gohr // Pointy-bracket link destinations `<...>`. Rarely used; regex cost 422e89aeebdSAndreas Gohr // and interaction with raw-HTML detection outweigh the benefit. 423e89aeebdSAndreas Gohr 496 => 'pointy-bracket link destination `<>`: not supported', 424e89aeebdSAndreas Gohr 498 => 'pointy-bracket destination with spaces `<...>`: not supported', 425e89aeebdSAndreas Gohr 500 => 'pointy-bracket destination with newline: not supported', 426e89aeebdSAndreas Gohr 501 => 'pointy-bracket destination containing `)`: not supported', 427e89aeebdSAndreas Gohr 502 => 'pointy-bracket destination with trailing backslash: not supported', 428e89aeebdSAndreas Gohr 503 => 'malformed pointy-bracket destinations: renderer output differs', 429e89aeebdSAndreas Gohr 507 => 'pointy-bracket destination wrapping unbalanced parens: not supported', 430e89aeebdSAndreas Gohr 431e89aeebdSAndreas Gohr // Balanced-parens inside URL destinations. 432e89aeebdSAndreas Gohr 505 => 'balanced-parens in URL destination: not supported (regex single-level)', 433e89aeebdSAndreas Gohr 434e89aeebdSAndreas Gohr // Other URL-level edges. 435e89aeebdSAndreas Gohr 495 => 'empty URL destination `[link]()`: pattern requires non-empty URL', 436e89aeebdSAndreas Gohr 512 => 'link destination that parses as a title: edge case not supported', 437b414dba2SAndreas Gohr 337 => 'entity-decoded `"` inside link URL slot: spec rejects the' 438b414dba2SAndreas Gohr . ' link because the decoded `"` would split URL from title, but' 439b414dba2SAndreas Gohr . ' GfmLink uses a permissive `[^)\n]+` URL slot and accepts the' 440b414dba2SAndreas Gohr . ' whole run as the URL — strict GFM URL rejection not implemented', 441*b37c6ef7SAndreas Gohr 497 => 'unquoted whitespace in URL slot `[link](/my uri)`: GfmLink truncates' 442*b37c6ef7SAndreas Gohr . ' at the first space and discards the remainder as a (would-be)' 443*b37c6ef7SAndreas Gohr . ' title; spec rejects the whole construct and emits literal text —' 444*b37c6ef7SAndreas Gohr . ' strict GFM URL rejection not implemented', 445e89aeebdSAndreas Gohr 446e89aeebdSAndreas Gohr // Inherent single-pass-lexer limits for link text containing nested 447e89aeebdSAndreas Gohr // structures. These cannot be resolved inside one mode. 448*b37c6ef7SAndreas Gohr 520 => 'link label with literal nested brackets `[link [foo [bar]]](/uri)`:' 449*b37c6ef7SAndreas Gohr . ' GfmLink label class forbids `[`/`]`, so the outer match fails —' 450*b37c6ef7SAndreas Gohr . ' same family as #522/#526', 451e89aeebdSAndreas Gohr 522 => 'nested bracket forms inner link, outer falls back to literal', 452*b37c6ef7SAndreas Gohr 523 => 'link label with backslash-escaped bracket `[link \\[bar](/uri)`:' 453*b37c6ef7SAndreas Gohr . ' GfmLink label class forbids `[` even when escaped — same family' 454*b37c6ef7SAndreas Gohr . ' as #522/#526', 455*b37c6ef7SAndreas Gohr 524 => 'inline formatting inside link label `[link *foo **bar** `#`*](/uri)`:' 456*b37c6ef7SAndreas Gohr . ' GfmLink takes the label as a flat string and does not re-tokenize' 457*b37c6ef7SAndreas Gohr . ' inline spans — same family as #428/#442', 458e89aeebdSAndreas Gohr 526 => 'nested links: inner is a link, outer falls back to literal', 459e89aeebdSAndreas Gohr 527 => 'nested links inside emphasis: not supported', 460e89aeebdSAndreas Gohr 529 => 'link text grouping vs. emphasis: leftmost-match cannot override', 461e89aeebdSAndreas Gohr 530 => 'emphasis/bracket crossing: leftmost-match cannot override', 462*b37c6ef7SAndreas Gohr 482 => 'emphasis/bracket crossing `*[bar*](/url)`: opener `*` precedes the' 463*b37c6ef7SAndreas Gohr . ' link, closer `*` falls inside the link label — GFM flanking' 464*b37c6ef7SAndreas Gohr . ' rejects the pair; DW takes the leftmost `*` as an emphasis' 465*b37c6ef7SAndreas Gohr . ' opener and never finds a closer (same family as #529/#530)', 466*b37c6ef7SAndreas Gohr 483 => 'emphasis/bracket crossing `_foo [bar_](/url)`: closer `_` falls' 467*b37c6ef7SAndreas Gohr . ' inside link label — same family as #482/#529/#530', 468*b37c6ef7SAndreas Gohr 428 => 'emphasis inside link label `*foo [*bar*](/url)*`: GfmLink takes' 469*b37c6ef7SAndreas Gohr . ' the label as a flat string (DW link instructions have no' 470*b37c6ef7SAndreas Gohr . ' re-parsed-inline label slot), so inner `*bar*` stays literal', 471*b37c6ef7SAndreas Gohr 442 => 'emphasis inside link label `**foo [*bar*](/url)**`: same as #428' 472*b37c6ef7SAndreas Gohr . ' — link label is a flat string and inner `*bar*` is not' 473*b37c6ef7SAndreas Gohr . ' re-tokenized as emphasis', 474e89aeebdSAndreas Gohr 532 => 'raw HTML inside link text: project-wide "no raw HTML" limit', 475e89aeebdSAndreas Gohr 533 => 'code span inside link text: requires pre-scan pass (see #351)', 476e89aeebdSAndreas Gohr 534 => 'autolink inside link text: raw `<URL>` autolinks not supported (see #356)', 477e89aeebdSAndreas Gohr 478e89aeebdSAndreas Gohr // Reference links (`[text][id]`, `[text][]`, `[foo]` with matching 479e89aeebdSAndreas Gohr // `[foo]: url` definition). Not implemented: resolving forward 480e89aeebdSAndreas Gohr // references would require a two-pass parse, but DokuWiki's lexer is 481e89aeebdSAndreas Gohr // single-pass. Inline links `[text](url)` are the only supported 482e89aeebdSAndreas Gohr // form. 483e89aeebdSAndreas Gohr 535 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 484e89aeebdSAndreas Gohr 536 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 485e89aeebdSAndreas Gohr 537 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 486e89aeebdSAndreas Gohr 538 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 487e89aeebdSAndreas Gohr 539 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 488e89aeebdSAndreas Gohr 540 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 489e89aeebdSAndreas Gohr 541 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 490e89aeebdSAndreas Gohr 542 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 491e89aeebdSAndreas Gohr 543 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 492e89aeebdSAndreas Gohr 544 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 493e89aeebdSAndreas Gohr 545 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 494e89aeebdSAndreas Gohr 546 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 495e89aeebdSAndreas Gohr 547 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 496e89aeebdSAndreas Gohr 548 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 497e89aeebdSAndreas Gohr 549 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 498e89aeebdSAndreas Gohr 550 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 499e89aeebdSAndreas Gohr 551 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 500e89aeebdSAndreas Gohr 552 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 501e89aeebdSAndreas Gohr 553 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 502e89aeebdSAndreas Gohr 557 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 503e89aeebdSAndreas Gohr 558 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 504e89aeebdSAndreas Gohr 560 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 505e89aeebdSAndreas Gohr 561 => 'collapsed reference link: forward-reference definitions not supported (single-pass lexer)', 506e89aeebdSAndreas Gohr 562 => 'collapsed reference link: forward-reference definitions not supported (single-pass lexer)', 507e89aeebdSAndreas Gohr 563 => 'collapsed reference link: forward-reference definitions not supported (single-pass lexer)', 508e89aeebdSAndreas Gohr 564 => 'collapsed reference link: forward-reference definitions not supported (single-pass lexer)', 509e89aeebdSAndreas Gohr 565 => 'shortcut reference link: forward-reference definitions not supported (single-pass lexer)', 510e89aeebdSAndreas Gohr 566 => 'shortcut reference link: forward-reference definitions not supported (single-pass lexer)', 511e89aeebdSAndreas Gohr 567 => 'shortcut reference link: forward-reference definitions not supported (single-pass lexer)', 512e89aeebdSAndreas Gohr 568 => 'shortcut reference link: forward-reference definitions not supported (single-pass lexer)', 513e89aeebdSAndreas Gohr 569 => 'shortcut reference link: forward-reference definitions not supported (single-pass lexer)', 514e89aeebdSAndreas Gohr 570 => 'shortcut reference link: forward-reference definitions not supported (single-pass lexer)', 515e89aeebdSAndreas Gohr 571 => 'shortcut reference link with escape: forward-reference definitions not supported (single-pass lexer)', 516e89aeebdSAndreas Gohr 572 => 'shortcut reference link with emphasis: forward-reference definitions not supported (single-pass lexer)', 517e89aeebdSAndreas Gohr 573 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 518e89aeebdSAndreas Gohr 574 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 519e89aeebdSAndreas Gohr 575 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 520e89aeebdSAndreas Gohr 576 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 521e89aeebdSAndreas Gohr 577 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 522e89aeebdSAndreas Gohr 578 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 523e89aeebdSAndreas Gohr 579 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 524e89aeebdSAndreas Gohr 525e89aeebdSAndreas Gohr // -------------------------------------------------------------------- 5263440a8c0SAndreas Gohr // Inline image ``. The XHTML renderer's default media 5273440a8c0SAndreas Gohr // rendering diverges from GFM's bare <img> (it wraps in a details <a> 5283440a8c0SAndreas Gohr // with fetch.php/detail.php proxy URLs) — GfmSpecTest uses 5293440a8c0SAndreas Gohr // SpecCompatRenderer to emit spec-shape bare <img>, so only the 5303440a8c0SAndreas Gohr // parser-level or feature-level gaps remain as skips: title attribute 5313440a8c0SAndreas Gohr // (no DW slot), reference images, pointy-bracket destinations, nested 5323440a8c0SAndreas Gohr // brackets, and escape-dependent cases. 5333440a8c0SAndreas Gohr // -------------------------------------------------------------------- 5343440a8c0SAndreas Gohr 535*b37c6ef7SAndreas Gohr 528 => 'image-as-alt with nested link `](uri2)](uri3)`: alt' 536*b37c6ef7SAndreas Gohr . ' class forbids brackets so the outer image match fails; the inner' 537*b37c6ef7SAndreas Gohr . ' `[foo](uri1)` matches as a regular link and the outer falls back' 538*b37c6ef7SAndreas Gohr . ' to literal — same family as #582/#583/#598', 5393440a8c0SAndreas Gohr 580 => 'image with title attribute: GfmMedia discards titles (no DW slot)', 5403440a8c0SAndreas Gohr 581 => 'reference-style image: forward-reference definitions not supported (single-pass lexer)', 5413440a8c0SAndreas Gohr 582 => 'nested image-in-image `](y)`: alt class forbids brackets;' 5423440a8c0SAndreas Gohr . ' leftmost-match cannot reorder — outer falls back to literal (see #526)', 5433440a8c0SAndreas Gohr 583 => 'link-in-image alt `](y)`: alt class forbids brackets;' 5443440a8c0SAndreas Gohr . ' leftmost-match cannot reorder — outer falls back to literal (see #526)', 5453440a8c0SAndreas Gohr 584 => 'collapsed reference-style image: forward-reference definitions not supported', 5463440a8c0SAndreas Gohr 585 => 'full reference-style image: forward-reference definitions not supported', 5473440a8c0SAndreas Gohr 587 => 'image with title attribute: title discarded (no DW slot)', 5483440a8c0SAndreas Gohr 588 => 'pointy-bracket image destination ``: not supported (see GfmLink #496)', 5493440a8c0SAndreas Gohr 590 => 'reference-style image: forward-reference definitions not supported', 5503440a8c0SAndreas Gohr 591 => 'reference-style image (case-insensitive label): forward-reference definitions not supported', 5513440a8c0SAndreas Gohr 592 => 'collapsed reference-style image `![foo][]`: forward-reference definitions not supported', 5523440a8c0SAndreas Gohr 593 => 'collapsed reference-style image with emphasis in label: forward-reference definitions not supported', 5533440a8c0SAndreas Gohr 594 => 'collapsed reference-style image (case-insensitive): forward-reference definitions not supported', 5543440a8c0SAndreas Gohr 595 => 'reference-style image with intervening whitespace: forward-reference definitions not supported', 5553440a8c0SAndreas Gohr 596 => 'shortcut reference-style image `![foo]`: forward-reference definitions not supported', 5563440a8c0SAndreas Gohr 597 => 'shortcut reference-style image with emphasis: forward-reference definitions not supported', 5573440a8c0SAndreas Gohr 598 => 'image with unescaped nested brackets `![[foo]]`: literal-fallback behavior not supported', 5583440a8c0SAndreas Gohr 599 => 'shortcut reference-style image (case-insensitive): forward-reference definitions not supported', 559b414dba2SAndreas Gohr 600 => 'image-via-reference fallback `!\[foo]` with `[foo]: /url`: forward-reference definitions not supported (single-pass lexer)', 560b414dba2SAndreas Gohr 601 => 'image-via-reference fallback `\![foo]` with `[foo]: /url`: forward-reference definitions not supported (single-pass lexer)', 5613440a8c0SAndreas Gohr 5623440a8c0SAndreas Gohr // -------------------------------------------------------------------- 5638719732dSAndreas Gohr // ATX heading collisions with DokuWiki-specific behavior. 5648719732dSAndreas Gohr // -------------------------------------------------------------------- 5658719732dSAndreas Gohr 38 => 'ATX heading with leading spaces: GFM tolerates 0-3 spaces of' 5668719732dSAndreas Gohr . ' indent before the opener; we require the `#` at column 0.' 5678719732dSAndreas Gohr . ' Indent tolerance collides with DokuWiki\'s 2-space-indent' 5688719732dSAndreas Gohr . ' preformatted block and isn\'t worth untangling', 5698719732dSAndreas Gohr 39 => 'indented code block: DokuWiki uses 2-space indent for' 5708719732dSAndreas Gohr . ' preformatted; GFM 4-space indented code blocks are not' 5718719732dSAndreas Gohr . ' implemented', 5728719732dSAndreas Gohr 40 => 'indented code block: 4-space indent after a paragraph is a' 5738719732dSAndreas Gohr . ' continuation in GFM but preformatted in DokuWiki — not' 5748719732dSAndreas Gohr . ' implemented', 5758719732dSAndreas Gohr 41 => 'ATX heading with leading spaces: second heading is indented' 5768719732dSAndreas Gohr . ' by 2 spaces; we require the `#` at column 0', 5778719732dSAndreas Gohr 49 => 'empty ATX heading: DokuWiki\'s XHTML renderer deliberately' 5788719732dSAndreas Gohr . ' skips blank headings (blank() guard in Doku_Renderer_xhtml::header)', 579685560ebSAndreas Gohr 580685560ebSAndreas Gohr // -------------------------------------------------------------------- 581685560ebSAndreas Gohr // List items / Lists — list features GfmListblock deliberately does 582685560ebSAndreas Gohr // not implement. The simplifications are by design: indentation uses 583685560ebSAndreas Gohr // a fixed 2-space-multiple step starting at 0, lazy continuation is 584685560ebSAndreas Gohr // not supported, and the rewriter groups items by 'u'/'o' type only. 585685560ebSAndreas Gohr // The buckets are: 586685560ebSAndreas Gohr // 587685560ebSAndreas Gohr // A. Extra spaces after the marker. CommonMark rolls them (up to 588685560ebSAndreas Gohr // 4) into the content column; we dedent at `marker_width + 1`, 589685560ebSAndreas Gohr // collapsing the extras. 590685560ebSAndreas Gohr // B. 1- or 3-space indent for nesting (we round down to nearest 2). 591685560ebSAndreas Gohr // C. Lazy continuation (column-0 paragraph wrap inside an item). 592685560ebSAndreas Gohr // D. Strict CommonMark loose/tight classification (every blank line 593685560ebSAndreas Gohr // between items / inside items reclassifies; we use a simpler 594685560ebSAndreas Gohr // single-paragraph-tight, multi-paragraph-loose rule). 595685560ebSAndreas Gohr // E. Marker-character-change splits ordered lists ('.' vs ')') or 596685560ebSAndreas Gohr // unordered ('-' vs '+' vs '*'). Our rewriter groups by 'u' / 'o' 597685560ebSAndreas Gohr // type only, not by marker character. 598685560ebSAndreas Gohr // F. List interrupting a paragraph without a blank line — requires a 599685560ebSAndreas Gohr // multi-pass block parser to revisit prior text. 600685560ebSAndreas Gohr // 601685560ebSAndreas Gohr // Examples that depend on a pending mode (GfmQuote, GfmEscape, …) are 602685560ebSAndreas Gohr // intentionally NOT skipped — they remain visible failing tests until 603685560ebSAndreas Gohr // the mode lands. 604685560ebSAndreas Gohr // -------------------------------------------------------------------- 605309a0852SAndreas Gohr // -------------------------------------------------------------------- 606309a0852SAndreas Gohr // Block quotes — deliberate scope reductions vs. strict GFM. The 607309a0852SAndreas Gohr // unified GfmQuote mode (replacing DW Quote) covers `>` blockquotes 608309a0852SAndreas Gohr // for both DW and MD pages, but several CommonMark blockquote rules 609309a0852SAndreas Gohr // are out of scope: 610309a0852SAndreas Gohr // 611309a0852SAndreas Gohr // - 1-3 space indent before `>` (column-0-only policy, consistent 612309a0852SAndreas Gohr // with GfmCode / GfmFile / GfmHeader). 613309a0852SAndreas Gohr // - Lazy continuation (paragraph text without `>` on continuation 614309a0852SAndreas Gohr // lines). Same policy as GfmListblock — markers required on 615309a0852SAndreas Gohr // every line. 616309a0852SAndreas Gohr // - Headers inside quotes — sub-parser excludes BASEONLY so header 617309a0852SAndreas Gohr // instructions don't drive TOC/section-edit anchors that don't 618309a0852SAndreas Gohr // compose with `<blockquote>`. Same rationale as GfmListblock's 619309a0852SAndreas Gohr // header exclusion inside list items. 620309a0852SAndreas Gohr // - Setext-style block constructs (the `---` underline collides 621309a0852SAndreas Gohr // with DW's HR rule). 622309a0852SAndreas Gohr // 623309a0852SAndreas Gohr // Examples that depend on still-pending modes (GfmHr) are 624309a0852SAndreas Gohr // intentionally NOT skipped — they stay visible until those modes 625309a0852SAndreas Gohr // land. 626309a0852SAndreas Gohr // -------------------------------------------------------------------- 627309a0852SAndreas Gohr 206 => 'block quotes: header inside quote — sub-parser excludes' 628309a0852SAndreas Gohr . ' BASEONLY (TOC / section-edit anchors do not compose with' 629309a0852SAndreas Gohr . ' `<blockquote>`). Same policy as GfmListblock for `<li>`.', 630309a0852SAndreas Gohr 207 => 'block quotes: header inside quote with no space after `>` —' 631309a0852SAndreas Gohr . ' see #206 for the BASEONLY exclusion rationale.', 632309a0852SAndreas Gohr 208 => 'block quotes: leading-space `>` (1-3 spaces of indent) —' 633309a0852SAndreas Gohr . ' column-0-only policy, consistent with GfmCode / GfmFile.', 634309a0852SAndreas Gohr 210 => 'block quotes: lazy continuation `> # Foo\n> bar\nbaz` —' 635309a0852SAndreas Gohr . ' every quote line must begin with `>` at column 0. Same' 636309a0852SAndreas Gohr . ' policy as GfmListblock.', 637309a0852SAndreas Gohr 211 => 'block quotes: lazy continuation `> bar\nbaz\n> foo` —' 638309a0852SAndreas Gohr . ' see #210.', 639309a0852SAndreas Gohr 212 => 'block quotes: Setext heading underline `---` after `> foo`' 640309a0852SAndreas Gohr . ' — no Setext headings (the `---` collides with DW HR syntax).', 641309a0852SAndreas Gohr 215 => 'block quotes: fenced code block split across blockquote' 642309a0852SAndreas Gohr . ' boundary — fence inside quote followed by non-`>` lines' 643309a0852SAndreas Gohr . ' depends on the same lazy-continuation rule we do not' 644309a0852SAndreas Gohr . ' implement (see #210).', 645309a0852SAndreas Gohr 216 => 'block quotes: lazy continuation `> foo\n - bar` — see #210.', 646309a0852SAndreas Gohr 225 => 'block quotes: lazy continuation `> bar\nbaz` — see #210.', 647309a0852SAndreas Gohr 227 => 'block quotes: lazy continuation `> bar\n>\nbaz` — see #210.', 648309a0852SAndreas Gohr 228 => 'block quotes: lazy continuation in nested quote' 649309a0852SAndreas Gohr . ' `> > > foo\nbar` — see #210.', 650309a0852SAndreas Gohr 229 => 'block quotes: lazy continuation across nested levels' 651309a0852SAndreas Gohr . ' `>>> foo\n> bar\n>>baz` — see #210.', 652309a0852SAndreas Gohr 653685560ebSAndreas Gohr 232 => 'list items: marker-width content-column alignment (A)', 654685560ebSAndreas Gohr 235 => 'list items: marker-width content-column alignment (A)', 655*b37c6ef7SAndreas Gohr 237 => 'list items: ordered list nested in `>>` with 3-space leading' 656*b37c6ef7SAndreas Gohr . ' indent and marker-width content column (B+A; see #208 for' 657*b37c6ef7SAndreas Gohr . ' the leading-`>` indent policy).', 658*b37c6ef7SAndreas Gohr 238 => 'list items: bullet inside `>>` followed by leading-space' 659*b37c6ef7SAndreas Gohr . ' ` > > two` continuation — column-0-only `>` policy plus' 660*b37c6ef7SAndreas Gohr . ' interior space inside the nested quote (B; see #208).', 661*b37c6ef7SAndreas Gohr 241 => 'list items: marker-width content column for `1. foo` with' 662*b37c6ef7SAndreas Gohr . ' fenced code, paragraph and blockquote at content column 4' 663*b37c6ef7SAndreas Gohr . ' (A; sub-blocks would also need to open at non-zero column).', 664*b37c6ef7SAndreas Gohr 242 => 'list items: marker-width content column + indented code must' 665*b37c6ef7SAndreas Gohr . ' span multiple internal blank lines (A; the multi-blank' 666*b37c6ef7SAndreas Gohr . ' indented-code rule is a separate gap).', 667685560ebSAndreas Gohr 249 => 'list items: marker-width-driven content-column alignment for `10. foo` (A)', 668685560ebSAndreas Gohr 254 => 'list items: marker-width content-column alignment edge case (A)', 669*b37c6ef7SAndreas Gohr 257 => 'list items: empty bullet line then content on the next line —' 670*b37c6ef7SAndreas Gohr . ' content column derived from next non-blank line\'s indent' 671*b37c6ef7SAndreas Gohr . ' (A sub-case).', 672685560ebSAndreas Gohr 258 => 'list items: marker-width content-column for `1. foo` (A)', 673685560ebSAndreas Gohr 263 => 'list items: indent ambiguity at column 0/1/2 (B)', 674685560ebSAndreas Gohr 264 => 'list items: 1-space-indent variation (B)', 675685560ebSAndreas Gohr 265 => 'list items: marker-width with multi-line continuation (A)', 676685560ebSAndreas Gohr 266 => 'list items: marker-width with multi-line continuation (A)', 677685560ebSAndreas Gohr 267 => 'list items: lazy continuation (C)', 678685560ebSAndreas Gohr 268 => 'list items: lazy continuation (C)', 679685560ebSAndreas Gohr 270 => 'list items: lazy continuation across blank line (C+D)', 680*b37c6ef7SAndreas Gohr 271 => 'list items: lazy continuation in nested quote-list-quote' 681*b37c6ef7SAndreas Gohr . ' (`> 1. > Blockquote` then `> continued here.`) (C; see #210).', 682685560ebSAndreas Gohr 273 => 'list items: list interrupting a paragraph without blank line (F)', 683*b37c6ef7SAndreas Gohr 376 => 'lone `*` on the line after `*foo bar` is taken as an empty list' 684*b37c6ef7SAndreas Gohr . ' marker by GfmListblock, breaking the paragraph; GFM keeps the' 685*b37c6ef7SAndreas Gohr . ' whole input as one paragraph because the trailing `*` does not' 686*b37c6ef7SAndreas Gohr . ' pair as emphasis. List-interrupts-paragraph (F), same family' 687*b37c6ef7SAndreas Gohr . ' as #273 / #284.', 688685560ebSAndreas Gohr 275 => 'list items: 3-space indent rounds to 2 — sub-list under previous item (B)', 689685560ebSAndreas Gohr 276 => 'list items: marker-width content-column with mixed types (A+E)', 690685560ebSAndreas Gohr 277 => 'list items: nested markers on a single line (A)', 691685560ebSAndreas Gohr 278 => 'list items: marker-character switch splits the list (E)', 692685560ebSAndreas Gohr 281 => 'lists: marker-character change splits unordered list `-` -> `+` (E)', 693685560ebSAndreas Gohr 282 => 'lists: ordered delimiter switch splits list `.` -> `)` (E)', 694685560ebSAndreas Gohr 284 => 'lists: list interrupting paragraph without blank line (F)', 695685560ebSAndreas Gohr 286 => 'lists: marker-width content-column alignment for ordered list (A)', 696685560ebSAndreas Gohr 287 => 'lists: triple blank line + indented continuation in deeply nested item (D)', 697685560ebSAndreas Gohr 288 => 'lists: marker-character change at deeper level (E)', 698685560ebSAndreas Gohr 289 => 'lists: marker-character change with type switch (E)', 699685560ebSAndreas Gohr 290 => 'lists: 1-space-indent variations of items, all stay top-level (B)', 700685560ebSAndreas Gohr 291 => 'lists: 1-space-indent variations on ordered list (B)', 701685560ebSAndreas Gohr 292 => 'lists: marker-character change splits inside nested list (E)', 702685560ebSAndreas Gohr 293 => 'lists: marker-character change with mixed indent (E+B)', 703685560ebSAndreas Gohr 294 => 'lists: lazy continuation across types (C+E)', 704685560ebSAndreas Gohr 295 => 'lists: lazy continuation in nested list (C)', 705685560ebSAndreas Gohr 296 => 'lists: lazy continuation across blank line (C+D)', 706685560ebSAndreas Gohr 297 => 'lists: blank-line classification for loose/tight in nested list (D)', 707685560ebSAndreas Gohr 298 => 'lists: blank-line classification (D)', 708685560ebSAndreas Gohr 300 => 'lists: blank-line classification with marker change (D+E)', 709685560ebSAndreas Gohr 301 => 'lists: blank-line classification + marker-width alignment (D+A)', 710685560ebSAndreas Gohr 304 => 'lists: blank line between sub-list items affects loose/tight (D)', 711685560ebSAndreas Gohr 305 => 'lists: blank line between deeply nested items (D)', 712685560ebSAndreas Gohr 306 => 'lists: blank line at the end of a loose list affects classification (D)', 71374031e46SAndreas Gohr 71474031e46SAndreas Gohr // -------------------------------------------------------------------- 71574031e46SAndreas Gohr // Backslash-escape examples (§6.1) that fail for reasons unrelated to 71674031e46SAndreas Gohr // GfmEscape itself: renderer divergences, typography conversion, and 71774031e46SAndreas Gohr // already-skipped GFM features (autolinks, raw HTML, reference links, 71874031e46SAndreas Gohr // discarded link titles). The escape mechanic itself works. 71974031e46SAndreas Gohr // -------------------------------------------------------------------- 72074031e46SAndreas Gohr 308 => 'backslash escapes: apostrophe is rendered as `'` by DW while' 72174031e46SAndreas Gohr . ' the spec expects a literal `\'` — renderer policy difference,' 72274031e46SAndreas Gohr . ' not an escape bug', 72374031e46SAndreas Gohr 310 => 'backslash escapes: DW typography converts straight `"..."` to curly' 72474031e46SAndreas Gohr . ' quotes when $conf[typography] is on, diverging from spec output', 72574031e46SAndreas Gohr 316 => 'backslash escapes inside angle-bracket autolinks: GFM autolink' 72674031e46SAndreas Gohr . ' `<URL>` form not implemented (see example 356)', 72774031e46SAndreas Gohr 317 => 'backslash escapes inside raw HTML: raw HTML pass-through is not' 72874031e46SAndreas Gohr . ' supported by default (see example 354)', 72974031e46SAndreas Gohr 318 => 'backslash escapes in link title: title attribute is discarded — DW' 730309a0852SAndreas Gohr . ' link instructions have no title slot', 73174031e46SAndreas Gohr 319 => 'backslash escapes in reference-link definition: link reference' 73274031e46SAndreas Gohr . ' definitions not supported (single-pass lexer cannot resolve' 73374031e46SAndreas Gohr . ' forward references)', 734c4bcbc2eSAndreas Gohr 735c4bcbc2eSAndreas Gohr // -------------------------------------------------------------------- 736b414dba2SAndreas Gohr // Raw HTML (§6.6) — inline raw HTML pass-through. Same project-wide 737b414dba2SAndreas Gohr // decision as HTML blocks (#118-160): DokuWiki escapes `<` as `<` 738b414dba2SAndreas Gohr // by default; the `<html>` block is the opt-in. Examples #637 and 739b414dba2SAndreas Gohr // #640 are intentionally NOT listed — the spec there expects literal 740b414dba2SAndreas Gohr // `<...>` escaping for malformed tags, which DW also produces, 741b414dba2SAndreas Gohr // so they pass naturally. 742b414dba2SAndreas Gohr // -------------------------------------------------------------------- 743b414dba2SAndreas Gohr 632 => 'raw HTML inline (open tag): raw HTML pass-through not supported', 744b414dba2SAndreas Gohr 633 => 'raw HTML inline (closing tag): raw HTML pass-through not supported', 745b414dba2SAndreas Gohr 634 => 'raw HTML inline (multi-line attributes): raw HTML pass-through not supported', 746b414dba2SAndreas Gohr 635 => 'raw HTML inline (line breaks in attributes): raw HTML pass-through not supported', 747b414dba2SAndreas Gohr 636 => 'raw HTML inline (custom tags / attribute syntax): raw HTML pass-through not supported', 748b414dba2SAndreas Gohr 638 => 'raw HTML inline (illegal attribute names): raw HTML pass-through not supported', 749b414dba2SAndreas Gohr 639 => 'raw HTML inline (illegal attribute values): raw HTML pass-through not supported', 750b414dba2SAndreas Gohr 641 => 'raw HTML inline (open and closing tags): raw HTML pass-through not supported', 751b414dba2SAndreas Gohr 642 => 'raw HTML inline (HTML comment): raw HTML pass-through not supported', 752b414dba2SAndreas Gohr 643 => 'raw HTML inline (invalid comment): raw HTML pass-through not supported', 753b414dba2SAndreas Gohr 644 => 'raw HTML inline (processing instruction): raw HTML pass-through not supported', 754b414dba2SAndreas Gohr 645 => 'raw HTML inline (declaration): raw HTML pass-through not supported', 755b414dba2SAndreas Gohr 646 => 'raw HTML inline (declaration single-letter name): raw HTML pass-through not supported', 756b414dba2SAndreas Gohr 647 => 'raw HTML inline (declaration EMPTY): raw HTML pass-through not supported', 757b414dba2SAndreas Gohr 648 => 'raw HTML inline (CDATA section): raw HTML pass-through not supported', 758b414dba2SAndreas Gohr 649 => 'raw HTML inline (entity reference inside attribute): raw HTML pass-through not supported', 759b414dba2SAndreas Gohr 650 => 'raw HTML inline (backslash escape inside attribute): raw HTML pass-through not supported', 760b414dba2SAndreas Gohr 651 => 'raw HTML inline (entity-escaped quote inside attribute): raw HTML pass-through not supported', 761*b37c6ef7SAndreas Gohr 484 => 'raw HTML inline `<img …/>` adjacent to `*`: raw HTML pass-through not supported', 762*b37c6ef7SAndreas Gohr 485 => 'raw HTML inline `<a href="**">` adjacent to `**`: raw HTML pass-through not supported', 763*b37c6ef7SAndreas Gohr 486 => 'raw HTML inline `<a href="__">` adjacent to `__`: raw HTML pass-through not supported', 764b414dba2SAndreas Gohr 765b414dba2SAndreas Gohr // -------------------------------------------------------------------- 766c4bcbc2eSAndreas Gohr // Hard line breaks (GfmLinebreak) — both delimiter forms (two trailing 767c4bcbc2eSAndreas Gohr // spaces and `\` before newline) work in paragraphs, emphasis, and 768c4bcbc2eSAndreas Gohr // other inline containers. The skipped cases sit inside raw HTML tags, 769c4bcbc2eSAndreas Gohr // which DokuWiki does not pass through by default. 770c4bcbc2eSAndreas Gohr // -------------------------------------------------------------------- 771b414dba2SAndreas Gohr 662 => 'hard line break inside a raw HTML tag: raw HTML pass-through not supported', 772c4bcbc2eSAndreas Gohr 663 => 'hard line break (backslash form) inside a raw HTML tag — see' 773c4bcbc2eSAndreas Gohr . ' #662. Raw HTML out of scope.', 77472b2703bSAndreas Gohr]; 775