1<?php 2 3/** 4 * GFM spec examples that GfmSpecTest should skip, keyed by example number 5 * (as numbered in spec.txt / the rendered spec). 6 * 7 * Add entries here ONLY for behavior DokuWiki has explicitly decided not to 8 * implement — not for features that are merely pending. Unimplemented 9 * features should show as real failures so they remain visible TODOs on 10 * the branch. 11 * 12 * Each value is a short human-readable reason that will appear in phpunit's 13 * skip output. 14 */ 15 16return [ 17 // -------------------------------------------------------------------- 18 // Thematic breaks (GfmHr) — strict-only HR is intentional. The 19 // delimiter run must be bare: no leading, trailing, or internal 20 // whitespace in either DW or GFM flavor. The list-precedence cases 21 // additionally need a GfmListblock guard that is out of scope. 22 // -------------------------------------------------------------------- 23 17 => 'thematic break: 0-3 spaces of leading indent. Strict policy:' 24 . ' opener must be at column 0 in either flavor.', 25 21 => 'thematic break: spaces between delimiter chars (`- - -`).' 26 . ' Strict policy: bare run only.', 27 22 => 'thematic break: spaces between delimiter chars (`** * **`).' 28 . ' Strict policy: bare run only.', 29 23 => 'thematic break: spaces between delimiter chars (`- -`).' 30 . ' Strict policy: bare run only.', 31 24 => 'thematic break: trailing spaces after the run. Strict policy:' 32 . ' bare run only.', 33 29 => 'thematic break: Setext heading underline `Foo\n---` should' 34 . ' render as `<h2>`. Setext headings are deliberately not' 35 . ' supported — `---` collides with DokuWiki HR and `===` would' 36 . ' collide with DokuWiki heading syntax.', 37 30 => 'thematic break vs. list-item precedence (`* * *` between list' 38 . ' items): requires internal-space HR support and a GfmListblock' 39 . ' guard so the list refuses to absorb the HR-shaped line. Both' 40 . ' out of scope; the line stays a list-item body.', 41 31 => 'thematic break inside list with different bullet (`- * * *`):' 42 . ' depends on internal-space HR support inside the sub-parsed' 43 . ' item body. See example 30.', 44 45 // -------------------------------------------------------------------- 46 // Fenced code blocks (GfmCode / GfmFile) — deliberate simplifications 47 // versus strict GFM. All of these are consequences of lexer constraints 48 // (no regex backreferences) or the deliberate column-0-only policy. 49 // -------------------------------------------------------------------- 50 94 => 'fenced code: closing fence must be ≥ opening length — DokuWiki' 51 . ' accepts any 3+ run as a closer (no regex backreferences for' 52 . ' length pairing). Deliberate relaxation.', 53 95 => 'fenced code (tilde variant): closing fence must be ≥ opening' 54 . ' length — see example 94.', 55 96 => 'fenced code: unclosed fence — DokuWiki convention requires a' 56 . ' closer (matches DW <code> tag), so unclosed fences stay' 57 . ' literal rather than consuming to EOF. GFM spec rule depends' 58 . ' on CommonMark\'s two-pass block parser, which our single-pass' 59 . ' lexer cannot implement fully anyway (see example 98).', 60 97 => 'fenced code: unclosed fence with intervening short run — stays' 61 . ' literal, see example 96.', 62 101 => 'fenced code: opener indented 1 space — DokuWiki requires' 63 . ' column-0 fences. Indent tolerance + per-line body dedent out' 64 . ' of scope.', 65 102 => 'fenced code: opener indented 2 spaces — see example 101.', 66 103 => 'fenced code: opener indented 3 spaces — see example 101.', 67 105 => 'fenced code: closer indented 2 spaces — column-0-only policy,' 68 . ' see example 101.', 69 106 => 'fenced code: indented opener with less-indented closer —' 70 . ' column-0-only policy, see example 101.', 71 107 => 'fenced code: 4-space-indented closer — with column-0-only' 72 . ' policy there is no valid closer, so the fence stays literal' 73 . ' (see example 96).', 74 109 => 'fenced code: malformed closer `~~~ ~~` (space-broken run) —' 75 . ' with no valid closer the fence stays literal (see example 96).', 76 108 => 'fenced code: `` `` is not a valid fence; GFM falls back to an' 77 . ' inline code span of length 3. Inline spans with n≥3 not' 78 . ' implemented (GfmBacktickSingle/Double cover only n=1, n=2).', 79 111 => 'fenced code interrupting Setext heading (`foo\n---`): Setext' 80 . ' headings are deliberately not supported — the `---` underline' 81 . ' collides with DokuWiki\'s horizontal rule and `===` would' 82 . ' collide with DokuWiki heading syntax.', 83 115 => 'fenced code: `` `` backtick-fence-with-backticks-in-info-string' 84 . ' is invalid; GFM falls back to n=3 inline span — inline spans' 85 . ' with n≥3 not implemented. See example 108.', 86 87 // -------------------------------------------------------------------- 88 // Code-span edge cases that collide with project-wide decisions 89 // (no raw HTML, no GFM angle-bracket autolinks, typography on by 90 // default) or with the single-pass lexer's limits. 91 // -------------------------------------------------------------------- 92 351 => 'code span vs. emphasis: cross-positional precedence would require' 93 . ' a pre-scan pass — the single-pass lexer matches leftmost-first' 94 . ' and cannot reject an earlier emphasis opener because a later' 95 . ' backtick span would consume its closer', 96 353 => 'code span: the trailing `"` outside the span is converted to a' 97 . ' curly quote by DokuWiki typography, diverging from the spec HTML', 98 354 => 'raw HTML tag pass-through: DokuWiki does not render raw HTML by' 99 . ' default; `<html>` blocks are the opt-in', 100 356 => 'GFM angle-bracket autolink `<http://…>`: not implemented — we' 101 . ' rely on DokuWiki\'s existing bare-URL detection, which does not' 102 . ' parse `<URL>` form', 103 104 // -------------------------------------------------------------------- 105 // CommonMark §6.2 flanking-delimiter analysis — deliberately not 106 // implemented. DokuWiki's regex lexer uses leftmost-match and cannot 107 // apply CommonMark's left/right-flanking rules that distinguish 108 // word-chars, whitespace, and punctuation for `*`/`_` delimiters, or 109 // the "multiple-of-3" rule for overlapping runs. These examples all 110 // rely on that machinery. 111 // -------------------------------------------------------------------- 112 113 // Unicode whitespace in flanking context. Our `\s` is ASCII-only 114 // because the lexer doesn't set the PCRE `u` flag. 115 363 => 'Unicode whitespace (U+00A0) flanking — requires u-flag-aware regex', 116 117 // Punctuation-adjacent flanking for `*` / `_` / `**` / `__` 118 362 => 'flanking: punctuation-adjacent `*` (left-flanking vs. right-flanking)', 119 368 => 'flanking: punctuation-adjacent `_`', 120 372 => 'flanking: intraword `_` with punctuation inside', 121 377 => 'flanking: `*` followed by `(` requires punctuation-aware flanking', 122 378 => 'flanking: nested `*(*foo*)*` requires flanking + balanced-pair analysis', 123 382 => 'flanking: nested `_(_foo_)_` requires flanking + balanced-pair analysis', 124 389 => 'flanking: punctuation-adjacent `**`', 125 394 => 'flanking: punctuation-adjacent `__`', 126 401 => 'flanking: `**` followed by `(`', 127 404 => 'flanking: nested `*bar*` inside `**foo ... foo**` with punctuation', 128 407 => 'flanking: `__` followed by `(`', 129 470 => 'flanking: nested `*_foo_*` requires balanced-pair analysis', 130 472 => 'flanking: nested `_*foo*_` requires balanced-pair analysis', 131 132 // Intraword `__` strong (even multibyte) — flanking rule for `_` requires 133 // examining whether the delimiter run is word-boundary-flanking, which our 134 // simple lookbehind/lookahead approximation doesn't fully match. 135 395 => 'flanking: intraword `__` (`foo__bar__`) — left-flanking vs right-flanking', 136 396 => 'flanking: intraword `__` across digits (`5__6__78`)', 137 397 => 'flanking: intraword `__` with Cyrillic', 138 398 => 'flanking: `__foo, __bar__, baz__` — flanking + balanced pairing', 139 409 => 'flanking: `__foo__bar` — intraword close', 140 410 => 'flanking: intraword `__` with Cyrillic (leading)', 141 411 => 'flanking: `__foo__bar__baz__` — multiple `__` pairs with flanking', 142 412 => 'flanking: `__(bar)__.` — punctuation-adjacent', 143 144 // Overlapping / multiple-of-3 rule for runs 145 416 => 'CommonMark rule 9 (overlapping same-delimiter `_foo _bar_ baz_`)', 146 417 => 'CommonMark overlapping `_` / `__` with flanking', 147 418 => 'CommonMark overlapping `*foo *bar**` — multiple-of-3 rule', 148 419 => 'CommonMark nested `*foo **bar** baz*` — balanced-pair analysis', 149 421 => 'CommonMark overlapping `*foo**bar*` — multiple-of-3', 150 422 => 'CommonMark nested `***foo** bar*` — triple-delimiter analysis', 151 423 => 'CommonMark nested `*foo **bar***` — triple-delimiter analysis', 152 424 => 'CommonMark nested `*foo**bar***` — triple-delimiter analysis', 153 425 => 'CommonMark triple `foo***bar***baz` — triple-delimiter analysis', 154 426 => 'CommonMark long delimiter runs `foo******bar*********baz`', 155 427 => 'CommonMark deeply nested `*foo **bar *baz* bim** bop*`', 156 434 => 'CommonMark overlapping `__foo __bar__ baz__` — multiple-of-3', 157 435 => 'CommonMark `____foo__ bar__` — leading long delimiter run', 158 436 => 'CommonMark `**foo **bar****` — trailing long delimiter run', 159 439 => 'CommonMark nested `***foo* bar**` — triple-delimiter', 160 440 => 'CommonMark nested `**foo *bar***` — triple-delimiter', 161 441 => 'CommonMark deeply nested `**foo *bar **baz** bim* bop**`', 162 163 // `__foo_` / `_foo__` — mixing `_` and `__` requires flanking to decide 164 // which delimiter pairs open/close. 165 463 => 'flanking: `__foo_` — mixed `_`/`__` pairing', 166 464 => 'flanking: `_foo__` — mixed `_`/`__` pairing', 167 465 => 'flanking: `___foo__` — delimiter-run length analysis', 168 466 => 'flanking: `____foo_` — delimiter-run length analysis', 169 467 => 'flanking: `__foo___` — delimiter-run length analysis', 170 468 => 'flanking: `_foo____` — delimiter-run length analysis', 171 172 // Long delimiter runs require excess-drop logic (2 outer chars dropped 173 // from each side). Stack-based pairing needed — out of scope. 174 473 => 'CommonMark `****foo****` — excess-drop (4+4 → strong only)', 175 474 => 'CommonMark `____foo____` — excess-drop (4+4 → strong only)', 176 475 => 'CommonMark `******foo******` — excess-drop (6+6 → strong only)', 177 477 => 'CommonMark `_____foo_____` — excess-drop (5+5 → em+strong, 2 dropped each side)', 178 179 // Overlapping / crossing delimiters 180 478 => 'CommonMark `*foo _bar* baz_` — overlapping different delimiters', 181 479 => 'CommonMark `*foo __bar *baz bim__ bam*` — crossing delimiters', 182 480 => 'CommonMark `**foo **bar baz**` — overlapping same delimiter', 183 184 // -------------------------------------------------------------------- 185 // Inline link `[text](url)` — features GfmLink deliberately does not 186 // implement. Either rarely-used syntax paid for with disproportionate 187 // regex complexity, or single-pass-lexer limits that can't be worked 188 // around inside one mode. 189 // -------------------------------------------------------------------- 190 191 // GFM link title attribute (`"title"` / `'title'` / `(title)` after 192 // the URL). Parses cleanly but is discarded: DokuWiki's link handler 193 // instructions have no title-attribute slot, and plumbing one through 194 // every renderer is out of scope for GfmLink. 195 493 => 'link title attribute: GfmLink parses but discards — DokuWiki link instructions have no title slot', 196 513 => 'link title attribute (three quoting styles): discarded by GfmLink', 197 515 => 'link title separated by non-breaking space: title slot not supported', 198 516 => 'link title with nested balanced quotes: Markdown.pl quirk, not supported', 199 517 => 'link title with different quote type for inner quotes: title slot not supported', 200 518 => 'multi-line link title: title slot not supported', 201 202 // Pointy-bracket link destinations `<...>`. Rarely used; regex cost 203 // and interaction with raw-HTML detection outweigh the benefit. 204 496 => 'pointy-bracket link destination `<>`: not supported', 205 498 => 'pointy-bracket destination with spaces `<...>`: not supported', 206 500 => 'pointy-bracket destination with newline: not supported', 207 501 => 'pointy-bracket destination containing `)`: not supported', 208 502 => 'pointy-bracket destination with trailing backslash: not supported', 209 503 => 'malformed pointy-bracket destinations: renderer output differs', 210 507 => 'pointy-bracket destination wrapping unbalanced parens: not supported', 211 212 // Balanced-parens inside URL destinations. 213 505 => 'balanced-parens in URL destination: not supported (regex single-level)', 214 215 // Other URL-level edges. 216 495 => 'empty URL destination `[link]()`: pattern requires non-empty URL', 217 510 => 'backslash in URL destination: URL-encoding differs from spec', 218 511 => 'HTML entity / percent-encoding in URL: renderer normalization differs', 219 512 => 'link destination that parses as a title: edge case not supported', 220 221 // Inherent single-pass-lexer limits for link text containing nested 222 // structures. These cannot be resolved inside one mode. 223 522 => 'nested bracket forms inner link, outer falls back to literal', 224 526 => 'nested links: inner is a link, outer falls back to literal', 225 527 => 'nested links inside emphasis: not supported', 226 529 => 'link text grouping vs. emphasis: leftmost-match cannot override', 227 530 => 'emphasis/bracket crossing: leftmost-match cannot override', 228 532 => 'raw HTML inside link text: project-wide "no raw HTML" limit', 229 533 => 'code span inside link text: requires pre-scan pass (see #351)', 230 534 => 'autolink inside link text: raw `<URL>` autolinks not supported (see #356)', 231 232 // Reference links (`[text][id]`, `[text][]`, `[foo]` with matching 233 // `[foo]: url` definition). Not implemented: resolving forward 234 // references would require a two-pass parse, but DokuWiki's lexer is 235 // single-pass. Inline links `[text](url)` are the only supported 236 // form. 237 535 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 238 536 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 239 537 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 240 538 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 241 539 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 242 540 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 243 541 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 244 542 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 245 543 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 246 544 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 247 545 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 248 546 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 249 547 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 250 548 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 251 549 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 252 550 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 253 551 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 254 552 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 255 553 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 256 557 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 257 558 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 258 560 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 259 561 => 'collapsed reference link: forward-reference definitions not supported (single-pass lexer)', 260 562 => 'collapsed reference link: forward-reference definitions not supported (single-pass lexer)', 261 563 => 'collapsed reference link: forward-reference definitions not supported (single-pass lexer)', 262 564 => 'collapsed reference link: forward-reference definitions not supported (single-pass lexer)', 263 565 => 'shortcut reference link: forward-reference definitions not supported (single-pass lexer)', 264 566 => 'shortcut reference link: forward-reference definitions not supported (single-pass lexer)', 265 567 => 'shortcut reference link: forward-reference definitions not supported (single-pass lexer)', 266 568 => 'shortcut reference link: forward-reference definitions not supported (single-pass lexer)', 267 569 => 'shortcut reference link: forward-reference definitions not supported (single-pass lexer)', 268 570 => 'shortcut reference link: forward-reference definitions not supported (single-pass lexer)', 269 571 => 'shortcut reference link with escape: forward-reference definitions not supported (single-pass lexer)', 270 572 => 'shortcut reference link with emphasis: forward-reference definitions not supported (single-pass lexer)', 271 573 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 272 574 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 273 575 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 274 576 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 275 577 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 276 578 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 277 579 => 'reference link: forward-reference definitions not supported (single-pass lexer)', 278 279 // -------------------------------------------------------------------- 280 // Inline image ``. The XHTML renderer's default media 281 // rendering diverges from GFM's bare <img> (it wraps in a details <a> 282 // with fetch.php/detail.php proxy URLs) — GfmSpecTest uses 283 // SpecCompatRenderer to emit spec-shape bare <img>, so only the 284 // parser-level or feature-level gaps remain as skips: title attribute 285 // (no DW slot), reference images, pointy-bracket destinations, nested 286 // brackets, and escape-dependent cases. 287 // -------------------------------------------------------------------- 288 289 580 => 'image with title attribute: GfmMedia discards titles (no DW slot)', 290 581 => 'reference-style image: forward-reference definitions not supported (single-pass lexer)', 291 582 => 'nested image-in-image `](y)`: alt class forbids brackets;' 292 . ' leftmost-match cannot reorder — outer falls back to literal (see #526)', 293 583 => 'link-in-image alt `](y)`: alt class forbids brackets;' 294 . ' leftmost-match cannot reorder — outer falls back to literal (see #526)', 295 584 => 'collapsed reference-style image: forward-reference definitions not supported', 296 585 => 'full reference-style image: forward-reference definitions not supported', 297 587 => 'image with title attribute: title discarded (no DW slot)', 298 588 => 'pointy-bracket image destination ``: not supported (see GfmLink #496)', 299 590 => 'reference-style image: forward-reference definitions not supported', 300 591 => 'reference-style image (case-insensitive label): forward-reference definitions not supported', 301 592 => 'collapsed reference-style image `![foo][]`: forward-reference definitions not supported', 302 593 => 'collapsed reference-style image with emphasis in label: forward-reference definitions not supported', 303 594 => 'collapsed reference-style image (case-insensitive): forward-reference definitions not supported', 304 595 => 'reference-style image with intervening whitespace: forward-reference definitions not supported', 305 596 => 'shortcut reference-style image `![foo]`: forward-reference definitions not supported', 306 597 => 'shortcut reference-style image with emphasis: forward-reference definitions not supported', 307 598 => 'image with unescaped nested brackets `![[foo]]`: literal-fallback behavior not supported', 308 599 => 'shortcut reference-style image (case-insensitive): forward-reference definitions not supported', 309 310 // -------------------------------------------------------------------- 311 // ATX heading collisions with DokuWiki-specific behavior. 312 // -------------------------------------------------------------------- 313 38 => 'ATX heading with leading spaces: GFM tolerates 0-3 spaces of' 314 . ' indent before the opener; we require the `#` at column 0.' 315 . ' Indent tolerance collides with DokuWiki\'s 2-space-indent' 316 . ' preformatted block and isn\'t worth untangling', 317 39 => 'indented code block: DokuWiki uses 2-space indent for' 318 . ' preformatted; GFM 4-space indented code blocks are not' 319 . ' implemented', 320 40 => 'indented code block: 4-space indent after a paragraph is a' 321 . ' continuation in GFM but preformatted in DokuWiki — not' 322 . ' implemented', 323 41 => 'ATX heading with leading spaces: second heading is indented' 324 . ' by 2 spaces; we require the `#` at column 0', 325 49 => 'empty ATX heading: DokuWiki\'s XHTML renderer deliberately' 326 . ' skips blank headings (blank() guard in Doku_Renderer_xhtml::header)', 327 328 // -------------------------------------------------------------------- 329 // List items / Lists — list features GfmListblock deliberately does 330 // not implement. The simplifications are by design: indentation uses 331 // a fixed 2-space-multiple step starting at 0, lazy continuation is 332 // not supported, and the rewriter groups items by 'u'/'o' type only. 333 // The buckets are: 334 // 335 // A. Extra spaces after the marker. CommonMark rolls them (up to 336 // 4) into the content column; we dedent at `marker_width + 1`, 337 // collapsing the extras. 338 // B. 1- or 3-space indent for nesting (we round down to nearest 2). 339 // C. Lazy continuation (column-0 paragraph wrap inside an item). 340 // D. Strict CommonMark loose/tight classification (every blank line 341 // between items / inside items reclassifies; we use a simpler 342 // single-paragraph-tight, multi-paragraph-loose rule). 343 // E. Marker-character-change splits ordered lists ('.' vs ')') or 344 // unordered ('-' vs '+' vs '*'). Our rewriter groups by 'u' / 'o' 345 // type only, not by marker character. 346 // F. List interrupting a paragraph without a blank line — requires a 347 // multi-pass block parser to revisit prior text. 348 // 349 // Examples that depend on a pending mode (GfmQuote, GfmEscape, …) are 350 // intentionally NOT skipped — they remain visible failing tests until 351 // the mode lands. 352 // -------------------------------------------------------------------- 353 // -------------------------------------------------------------------- 354 // Block quotes — deliberate scope reductions vs. strict GFM. The 355 // unified GfmQuote mode (replacing DW Quote) covers `>` blockquotes 356 // for both DW and MD pages, but several CommonMark blockquote rules 357 // are out of scope: 358 // 359 // - 1-3 space indent before `>` (column-0-only policy, consistent 360 // with GfmCode / GfmFile / GfmHeader). 361 // - Lazy continuation (paragraph text without `>` on continuation 362 // lines). Same policy as GfmListblock — markers required on 363 // every line. 364 // - Headers inside quotes — sub-parser excludes BASEONLY so header 365 // instructions don't drive TOC/section-edit anchors that don't 366 // compose with `<blockquote>`. Same rationale as GfmListblock's 367 // header exclusion inside list items. 368 // - Setext-style block constructs (the `---` underline collides 369 // with DW's HR rule). 370 // 371 // Examples that depend on still-pending modes (GfmHr) are 372 // intentionally NOT skipped — they stay visible until those modes 373 // land. 374 // -------------------------------------------------------------------- 375 206 => 'block quotes: header inside quote — sub-parser excludes' 376 . ' BASEONLY (TOC / section-edit anchors do not compose with' 377 . ' `<blockquote>`). Same policy as GfmListblock for `<li>`.', 378 207 => 'block quotes: header inside quote with no space after `>` —' 379 . ' see #206 for the BASEONLY exclusion rationale.', 380 208 => 'block quotes: leading-space `>` (1-3 spaces of indent) —' 381 . ' column-0-only policy, consistent with GfmCode / GfmFile.', 382 210 => 'block quotes: lazy continuation `> # Foo\n> bar\nbaz` —' 383 . ' every quote line must begin with `>` at column 0. Same' 384 . ' policy as GfmListblock.', 385 211 => 'block quotes: lazy continuation `> bar\nbaz\n> foo` —' 386 . ' see #210.', 387 212 => 'block quotes: Setext heading underline `---` after `> foo`' 388 . ' — no Setext headings (the `---` collides with DW HR syntax).', 389 215 => 'block quotes: fenced code block split across blockquote' 390 . ' boundary — fence inside quote followed by non-`>` lines' 391 . ' depends on the same lazy-continuation rule we do not' 392 . ' implement (see #210).', 393 216 => 'block quotes: lazy continuation `> foo\n - bar` — see #210.', 394 225 => 'block quotes: lazy continuation `> bar\nbaz` — see #210.', 395 227 => 'block quotes: lazy continuation `> bar\n>\nbaz` — see #210.', 396 228 => 'block quotes: lazy continuation in nested quote' 397 . ' `> > > foo\nbar` — see #210.', 398 229 => 'block quotes: lazy continuation across nested levels' 399 . ' `>>> foo\n> bar\n>>baz` — see #210.', 400 401 232 => 'list items: marker-width content-column alignment (A)', 402 235 => 'list items: marker-width content-column alignment (A)', 403 249 => 'list items: marker-width-driven content-column alignment for `10. foo` (A)', 404 254 => 'list items: marker-width content-column alignment edge case (A)', 405 258 => 'list items: marker-width content-column for `1. foo` (A)', 406 263 => 'list items: indent ambiguity at column 0/1/2 (B)', 407 264 => 'list items: 1-space-indent variation (B)', 408 265 => 'list items: marker-width with multi-line continuation (A)', 409 266 => 'list items: marker-width with multi-line continuation (A)', 410 267 => 'list items: lazy continuation (C)', 411 268 => 'list items: lazy continuation (C)', 412 270 => 'list items: lazy continuation across blank line (C+D)', 413 273 => 'list items: list interrupting a paragraph without blank line (F)', 414 275 => 'list items: 3-space indent rounds to 2 — sub-list under previous item (B)', 415 276 => 'list items: marker-width content-column with mixed types (A+E)', 416 277 => 'list items: nested markers on a single line (A)', 417 278 => 'list items: marker-character switch splits the list (E)', 418 281 => 'lists: marker-character change splits unordered list `-` -> `+` (E)', 419 282 => 'lists: ordered delimiter switch splits list `.` -> `)` (E)', 420 284 => 'lists: list interrupting paragraph without blank line (F)', 421 286 => 'lists: marker-width content-column alignment for ordered list (A)', 422 287 => 'lists: triple blank line + indented continuation in deeply nested item (D)', 423 288 => 'lists: marker-character change at deeper level (E)', 424 289 => 'lists: marker-character change with type switch (E)', 425 290 => 'lists: 1-space-indent variations of items, all stay top-level (B)', 426 291 => 'lists: 1-space-indent variations on ordered list (B)', 427 292 => 'lists: marker-character change splits inside nested list (E)', 428 293 => 'lists: marker-character change with mixed indent (E+B)', 429 294 => 'lists: lazy continuation across types (C+E)', 430 295 => 'lists: lazy continuation in nested list (C)', 431 296 => 'lists: lazy continuation across blank line (C+D)', 432 297 => 'lists: blank-line classification for loose/tight in nested list (D)', 433 298 => 'lists: blank-line classification (D)', 434 300 => 'lists: blank-line classification with marker change (D+E)', 435 301 => 'lists: blank-line classification + marker-width alignment (D+A)', 436 304 => 'lists: blank line between sub-list items affects loose/tight (D)', 437 305 => 'lists: blank line between deeply nested items (D)', 438 306 => 'lists: blank line at the end of a loose list affects classification (D)', 439 440 // -------------------------------------------------------------------- 441 // Backslash-escape examples (§6.1) that fail for reasons unrelated to 442 // GfmEscape itself: renderer divergences, typography conversion, and 443 // already-skipped GFM features (autolinks, raw HTML, reference links, 444 // discarded link titles). The escape mechanic itself works. 445 // -------------------------------------------------------------------- 446 308 => 'backslash escapes: apostrophe is rendered as `'` by DW while' 447 . ' the spec expects a literal `\'` — renderer policy difference,' 448 . ' not an escape bug', 449 310 => 'backslash escapes: DW typography converts straight `"..."` to curly' 450 . ' quotes when $conf[typography] is on, diverging from spec output', 451 316 => 'backslash escapes inside angle-bracket autolinks: GFM autolink' 452 . ' `<URL>` form not implemented (see example 356)', 453 317 => 'backslash escapes inside raw HTML: raw HTML pass-through is not' 454 . ' supported by default (see example 354)', 455 318 => 'backslash escapes in link title: title attribute is discarded — DW' 456 . ' link instructions have no title slot', 457 319 => 'backslash escapes in reference-link definition: link reference' 458 . ' definitions not supported (single-pass lexer cannot resolve' 459 . ' forward references)', 460]; 461