xref: /dokuwiki/_test/tests/Parsing/Markdown/gfm-spec/skip.php (revision 451f2842c2213b735961a38825afae4ca84cdfcf)
172b2703bSAndreas Gohr<?php
272b2703bSAndreas Gohr
372b2703bSAndreas Gohr/**
4*451f2842SAndreas Gohr * GFM spec examples that GfmSpecTest should skip, keyed by example number (as numbered in spec.txt).
572b2703bSAndreas Gohr *
6*451f2842SAndreas Gohr * All entries skipped here are things that are explicitly not supported by DokuWiki's Markdown mode, for reasons
7*451f2842SAndreas Gohr * documented in the skip reason (mostly limitations of the single-pass regex lexer).
872b2703bSAndreas Gohr *
9*451f2842SAndreas Gohr * Most of the skipped examples are edge cases that are rarely used in practice.
10*451f2842SAndreas Gohr *
11*451f2842SAndreas Gohr * Entries are ordered by example number, when the underlying spec.txt is updated, its example numbers may shift,
12*451f2842SAndreas Gohr * so the keys here may need to be updated to match the new example numbers.
1372b2703bSAndreas Gohr */
1472b2703bSAndreas Gohr
1572b2703bSAndreas Gohrreturn [
16*451f2842SAndreas Gohr
17*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
18*451f2842SAndreas Gohr    // Tabs (§2.2)
19b37c6ef7SAndreas Gohr    //
20*451f2842SAndreas Gohr    // DokuWiki's tab handling is binary: a leading tab (matching \n\t directly after the newline) is the indented-code
21*451f2842SAndreas Gohr    // trigger, otherwise tabs are ordinary characters.
22b414dba2SAndreas Gohr    //
23*451f2842SAndreas Gohr    // CommonMark instead advances each tab to the next 4-column stop and uses the resulting column count to drive
24*451f2842SAndreas Gohr    // list-continuation, list-nesting, blockquote-interior, and 4-column indented-code decisions. The column arithmetic
25*451f2842SAndreas Gohr    // is what we don't support.
26*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
27*451f2842SAndreas Gohr
28*451f2842SAndreas Gohr    2   => 'Tabs (§2.2): 2 spaces then tab as code trigger - no column arithmetic to advance tab to column 4',
29*451f2842SAndreas Gohr    4   => 'Tabs (§2.2): tab as 4-column lazy continuation in list - list-interior column arithmetic not implemented',
30*451f2842SAndreas Gohr    5   => 'Tabs (§2.2): two tabs (8 columns) inside list item - list-interior column arithmetic not implemented',
31*451f2842SAndreas Gohr    6   => 'Tabs (§2.2): tabs after blockquote marker for code - quote-interior column arithmetic not implemented',
32*451f2842SAndreas Gohr    7   => 'Tabs (§2.2): tabs after list marker for indented code - list-interior column arithmetic not implemented',
33*451f2842SAndreas Gohr    9   => 'Tabs (§2.2): tab as 4-column indent for list nesting - leading tab is code trigger, never a nesting indent',
34*451f2842SAndreas Gohr    11  => 'Tabs (§2.2): thematic break with tab separators - strict bare-run HR rejects internal whitespace',
35*451f2842SAndreas Gohr
36*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
37*451f2842SAndreas Gohr    // Thematic breaks aka. HRs (§4.1)
38b414dba2SAndreas Gohr    //
39*451f2842SAndreas Gohr    // We only support horizontal rules siting at column 0 with no leading, trailing, or internal whitespace.
40*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
41b414dba2SAndreas Gohr
42*451f2842SAndreas Gohr    17  => 'Thematic breaks (§4.1): HR with 0-3 spaces of leading indent - column-0-only opener required',
43*451f2842SAndreas Gohr    19  => 'Thematic breaks (§4.1): HR after paragraph with 4-space indent - Preformatted triggers regardless of state',
44*451f2842SAndreas Gohr    21  => 'Thematic breaks (§4.1): HR with spaces between delimiters (- - -) - no whitespace allowed',
45*451f2842SAndreas Gohr    22  => 'Thematic breaks (§4.1): HR with spaces between delimiters (** * **) - no whitespace allowed',
46*451f2842SAndreas Gohr    23  => 'Thematic breaks (§4.1): HR with spaces between delimiters (-     -) - no whitespace allowed',
47*451f2842SAndreas Gohr    24  => 'Thematic breaks (§4.1): HR with internal spaces and trailing whitespace - no whitespace allowed',
48*451f2842SAndreas Gohr    29  => 'Thematic breaks (§4.1): Setext underline disambiguation - Setext headers not supported',
49*451f2842SAndreas Gohr    30  => 'Thematic breaks (§4.1): HR between list items (* * *) - no whitespace allowed',
50*451f2842SAndreas Gohr    31  => 'Thematic breaks (§4.1): HR shape inside list item - HRs not supported inside lists',
51*451f2842SAndreas Gohr
52*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
53*451f2842SAndreas Gohr    // ATX headings (§4.2)
54506762f4SAndreas Gohr    //
55*451f2842SAndreas Gohr    // We only support headers sitting at column 0 with no leading whitespace.
56*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
57*451f2842SAndreas Gohr
58*451f2842SAndreas Gohr    38  => 'ATX headings (§4.2): heading with 0-3 spaces of leading indent - column-0-only opener required',
59*451f2842SAndreas Gohr    40  => 'ATX headings (§4.2): 4-space indent after paragraph as lazy text - no paragraph-open state in lexer',
60*451f2842SAndreas Gohr    41  => 'ATX headings (§4.2): heading with 2-space leading indent - column-0-only opener required',
61*451f2842SAndreas Gohr    49  => 'ATX headings (§4.2): empty heading - XHTML renderer skips blank headings via blank() guard',
62*451f2842SAndreas Gohr
63*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
64*451f2842SAndreas Gohr    // Setext (§4.3)
65506762f4SAndreas Gohr    //
66*451f2842SAndreas Gohr    // Setext headings are not supported. They are hard to pass and nobody uses them anymore.
67*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
68506762f4SAndreas Gohr
69*451f2842SAndreas Gohr    50  => 'Setext (§4.3): heading with emphasis and underline - Setext headings not supported',
70*451f2842SAndreas Gohr    51  => 'Setext (§4.3): heading with multi-line content - Setext headings not supported',
71*451f2842SAndreas Gohr    52  => 'Setext (§4.3): heading with indented multi-line content - Setext headings not supported',
72*451f2842SAndreas Gohr    53  => 'Setext (§4.3): heading with any-length underline - Setext headings not supported',
73*451f2842SAndreas Gohr    54  => 'Setext (§4.3): heading with 3-space-indented content/underline - Setext headings not supported',
74*451f2842SAndreas Gohr    55  => 'Setext (§4.3): 4-space-indented content forms code then HR - Setext headings not supported',
75*451f2842SAndreas Gohr    56  => 'Setext (§4.3): underline indented up to 3 spaces with trailing - Setext headings not supported',
76*451f2842SAndreas Gohr    57  => 'Setext (§4.3): 4-space-indented underline (paragraph wins) - Setext headings not supported',
77*451f2842SAndreas Gohr    58  => 'Setext (§4.3): underline with internal spaces (= = / --- -) - Setext and internal-space HR not supported',
78*451f2842SAndreas Gohr    59  => 'Setext (§4.3): trailing spaces in content do not break line - Setext headings not supported',
79*451f2842SAndreas Gohr    60  => 'Setext (§4.3): trailing backslash in content - Setext headings not supported',
80*451f2842SAndreas Gohr    61  => 'Setext (§4.3): block-structure precedence over inline - Setext headings not supported',
81*451f2842SAndreas Gohr    63  => 'Setext (§4.3): underline cannot be lazy continuation in quote - Setext headings not supported',
82*451f2842SAndreas Gohr    65  => 'Setext (§4.3): preceding paragraph becomes heading content - Setext headings not supported',
83*451f2842SAndreas Gohr    66  => 'Setext (§4.3): no blank line required before/after heading - Setext headings not supported',
84*451f2842SAndreas Gohr    70  => 'Setext (§4.3): 4-space-indented content forms code then --- HR - Setext headings not supported',
85*451f2842SAndreas Gohr    72  => 'Setext (§4.3): heading with backslash-escaped marker - Setext headings not supported',
86*451f2842SAndreas Gohr    73  => 'Setext (§4.3): paragraph + heading + paragraph blank-separated - Setext headings not supported',
87*451f2842SAndreas Gohr    75  => 'Setext (§4.3): * * * boundary should be HR not underline - Setext and internal-space HR not supported',
88*451f2842SAndreas Gohr    76  => 'Setext (§4.3): backslash-escaped underline keeps as paragraph - Setext headings not supported',
89b1c59bedSAndreas Gohr
90*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
91*451f2842SAndreas Gohr    // Indented code (§4.4)
92685560ebSAndreas Gohr    //
93*451f2842SAndreas Gohr    // DokuWiki's single-pass lexer cannot carry paragraph-open state across modes, so Preformatted triggers on every \n
94*451f2842SAndreas Gohr    // followed by 4-space indent and exits on every blank line. Two CommonMark rules consequently cannot be expressed:
95685560ebSAndreas Gohr    //
96*451f2842SAndreas Gohr    //   - The 4-space indent must NOT open a code block on a paragraph-continuation line — GFM treats it as lazy
97*451f2842SAndreas Gohr    //     paragraph text. There is no paragraph-open flag to consult.
98*451f2842SAndreas Gohr    //   - An indented code block MAY span blank lines as long as the next non-blank line is still 4-space indented.
99*451f2842SAndreas Gohr    //     DokuWiki's exit-on-any-blank-line behavior splits the block.
100309a0852SAndreas Gohr    //
101*451f2842SAndreas Gohr    // List-interior indented code (79, 80) additionally needs the column arithmetic that the §2.2 tabs family already
102*451f2842SAndreas Gohr    // documents as out of scope.
103*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
104*451f2842SAndreas Gohr
105*451f2842SAndreas Gohr    79  => 'Indented code (§4.4): inside list item - list-interior column arithmetic plus paragraph trigger',
106*451f2842SAndreas Gohr    80  => 'Indented code (§4.4): after content in list item - list-interior column arithmetic plus paragraph trigger',
107*451f2842SAndreas Gohr    81  => 'Indented code (§4.4): code block spanning blank lines - fully blank lines exit the block',
108*451f2842SAndreas Gohr    83  => 'Indented code (§4.4): 4-space indent on paragraph continuation - no paragraph-open state in lexer',
109*451f2842SAndreas Gohr    85  => 'Indented code (§4.4): 4-space indent mid-paragraph variant - no paragraph-open state in lexer',
110*451f2842SAndreas Gohr
111*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
112*451f2842SAndreas Gohr    // Fenced code (§4.5)
113309a0852SAndreas Gohr    //
114*451f2842SAndreas Gohr    // Our parser does not support backreferences in regexes, so we cannot enforce the fence-length pairing rules that
115*451f2842SAndreas Gohr    // CommonMark requires for closing a fenced code block.
116*451f2842SAndreas Gohr    //
117*451f2842SAndreas Gohr    // We require fence runs to sit at column 0, no leading spaces allowed.
118*451f2842SAndreas Gohr    //
119*451f2842SAndreas Gohr    // Unclosed fences stay literal because the single-pass lexer has no notion of container boundaries to close at,
120*451f2842SAndreas Gohr    // unlike CommonMark's two-pass block parser.
121*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
122309a0852SAndreas Gohr
123*451f2842SAndreas Gohr    94  => 'Fenced code (§4.5): closer must be >= opener length - no regex backreferences, any 3+ run closes',
124*451f2842SAndreas Gohr    95  => 'Fenced code (§4.5): closer length pairing for tilde fence - no regex backreferences for length pairing',
125*451f2842SAndreas Gohr    96  => 'Fenced code (§4.5): unclosed fence consuming to EOF - no container boundaries in lexer',
126*451f2842SAndreas Gohr    97  => 'Fenced code (§4.5): unclosed fence with intervening short run - no container boundaries in lexer',
127*451f2842SAndreas Gohr    98  => 'Fenced code (§4.5): fence inside blockquote closes at quote end - no container boundaries in lexer',
128*451f2842SAndreas Gohr    101 => 'Fenced code (§4.5): opener indented 1 space - column-0-only policy, indent tolerance out of scope',
129*451f2842SAndreas Gohr    102 => 'Fenced code (§4.5): opener indented 2 spaces - column-0-only policy',
130*451f2842SAndreas Gohr    103 => 'Fenced code (§4.5): opener indented 3 spaces - column-0-only policy',
131*451f2842SAndreas Gohr    105 => 'Fenced code (§4.5): closer indented 2 spaces - column-0-only policy',
132*451f2842SAndreas Gohr    106 => 'Fenced code (§4.5): indented opener with less-indented closer - column-0-only policy',
133*451f2842SAndreas Gohr    107 => 'Fenced code (§4.5): 4-space-indented closer - column-0-only policy, no valid closer, fence stays literal',
134*451f2842SAndreas Gohr    108 => 'Fenced code (§4.5): three-backtick fallback to inline span - backtick spans with n>=3 not implemented',
135*451f2842SAndreas Gohr    109 => 'Fenced code (§4.5): malformed closer with space-broken run - no valid closer, fence stays literal',
136*451f2842SAndreas Gohr    111 => 'Fenced code (§4.5): fence interrupting Setext heading - Setext headings not supported',
137*451f2842SAndreas Gohr    115 => 'Fenced code (§4.5): single-line ``` x ``` - 3+ backtick inline code spans are not implemented',
13874031e46SAndreas Gohr
139*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
140*451f2842SAndreas Gohr    // HTML blocks (§4.6)
141*451f2842SAndreas Gohr    //
142*451f2842SAndreas Gohr    // Raw HTML pass-through is not supported. DokuWiki therefore renders it as escaped text.
143*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
144c4bcbc2eSAndreas Gohr
145*451f2842SAndreas Gohr    118 => 'HTML blocks (§4.6): script/pre/style/textarea tag group - raw HTML pass-through not supported',
146*451f2842SAndreas Gohr    119 => 'HTML blocks (§4.6): table with following content - raw HTML pass-through not supported',
147*451f2842SAndreas Gohr    120 => 'HTML blocks (§4.6): div with leading-space indent - raw HTML pass-through not supported',
148*451f2842SAndreas Gohr    121 => 'HTML blocks (§4.6): closing div tag opens block - raw HTML pass-through not supported',
149*451f2842SAndreas Gohr    122 => 'HTML blocks (§4.6): uppercase DIV with attributes - raw HTML pass-through not supported',
150*451f2842SAndreas Gohr    123 => 'HTML blocks (§4.6): div with id on continuation line - raw HTML pass-through not supported',
151*451f2842SAndreas Gohr    124 => 'HTML blocks (§4.6): div with multi-line attribute - raw HTML pass-through not supported',
152*451f2842SAndreas Gohr    125 => 'HTML blocks (§4.6): div opening - raw HTML pass-through not supported',
153*451f2842SAndreas Gohr    126 => 'HTML blocks (§4.6): div with id attribute - raw HTML pass-through not supported',
154*451f2842SAndreas Gohr    127 => 'HTML blocks (§4.6): div with class attribute spread - raw HTML pass-through not supported',
155*451f2842SAndreas Gohr    128 => 'HTML blocks (§4.6): div with garbage attribute syntax - raw HTML pass-through not supported',
156*451f2842SAndreas Gohr    129 => 'HTML blocks (§4.6): div with anchor and literal asterisks - raw HTML pass-through not supported',
157*451f2842SAndreas Gohr    130 => 'HTML blocks (§4.6): table with closing td/tr/table - raw HTML pass-through not supported',
158*451f2842SAndreas Gohr    131 => 'HTML blocks (§4.6): self-closing div on single line - raw HTML pass-through not supported',
159*451f2842SAndreas Gohr    132 => 'HTML blocks (§4.6): anchor as block-level element - raw HTML pass-through not supported',
160*451f2842SAndreas Gohr    133 => 'HTML blocks (§4.6): unknown tag falls into any-tag group - raw HTML pass-through not supported',
161*451f2842SAndreas Gohr    134 => 'HTML blocks (§4.6): inline tag (i) treated as block - raw HTML pass-through not supported',
162*451f2842SAndreas Gohr    135 => 'HTML blocks (§4.6): closing ins tag opens block - raw HTML pass-through not supported',
163*451f2842SAndreas Gohr    136 => 'HTML blocks (§4.6): del with paragraph break inside - raw HTML pass-through not supported',
164*451f2842SAndreas Gohr    137 => 'HTML blocks (§4.6): del without blank line breaks - raw HTML pass-through not supported',
165*451f2842SAndreas Gohr    138 => 'HTML blocks (§4.6): del with literal asterisks inline - raw HTML pass-through not supported',
166*451f2842SAndreas Gohr    139 => 'HTML blocks (§4.6): pre with language and code child - raw HTML pass-through not supported',
167*451f2842SAndreas Gohr    140 => 'HTML blocks (§4.6): script tag - raw HTML pass-through not supported',
168*451f2842SAndreas Gohr    141 => 'HTML blocks (§4.6): style tag opening - raw HTML pass-through not supported',
169*451f2842SAndreas Gohr    142 => 'HTML blocks (§4.6): unclosed style consuming rest of input - raw HTML pass-through not supported',
170*451f2842SAndreas Gohr    143 => 'HTML blocks (§4.6): style inside blockquote - raw HTML pass-through not supported',
171*451f2842SAndreas Gohr    144 => 'HTML blocks (§4.6): style inside list item - raw HTML pass-through not supported',
172*451f2842SAndreas Gohr    145 => 'HTML blocks (§4.6): style followed by inline content - raw HTML pass-through not supported',
173*451f2842SAndreas Gohr    146 => 'HTML blocks (§4.6): comment with following inline content - raw HTML pass-through not supported',
174*451f2842SAndreas Gohr    147 => 'HTML blocks (§4.6): script tag with body content - raw HTML pass-through not supported',
175*451f2842SAndreas Gohr    148 => 'HTML blocks (§4.6): comment - raw HTML pass-through not supported',
176*451f2842SAndreas Gohr    149 => 'HTML blocks (§4.6): processing instruction - raw HTML pass-through not supported',
177*451f2842SAndreas Gohr    150 => 'HTML blocks (§4.6): DOCTYPE declaration - raw HTML pass-through not supported',
178*451f2842SAndreas Gohr    151 => 'HTML blocks (§4.6): CDATA - raw HTML pass-through not supported',
179*451f2842SAndreas Gohr    152 => 'HTML blocks (§4.6): comment with leading whitespace - raw HTML pass-through not supported',
180*451f2842SAndreas Gohr    153 => 'HTML blocks (§4.6): div with leading whitespace - raw HTML pass-through not supported',
181*451f2842SAndreas Gohr    154 => 'HTML blocks (§4.6): paragraph followed by div - raw HTML pass-through not supported',
182*451f2842SAndreas Gohr    155 => 'HTML blocks (§4.6): div followed by paragraph - raw HTML pass-through not supported',
183*451f2842SAndreas Gohr    156 => 'HTML blocks (§4.6): paragraph then div (any-tag group) - raw HTML pass-through not supported',
184*451f2842SAndreas Gohr    157 => 'HTML blocks (§4.6): div continuation across blank line - raw HTML pass-through not supported',
185*451f2842SAndreas Gohr    158 => 'HTML blocks (§4.6): nested divs with content between - raw HTML pass-through not supported',
186*451f2842SAndreas Gohr    159 => 'HTML blocks (§4.6): table followed by paragraph - raw HTML pass-through not supported',
187*451f2842SAndreas Gohr    160 => 'HTML blocks (§4.6): table with markdown content - raw HTML pass-through not supported',
188b414dba2SAndreas Gohr
189*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
190*451f2842SAndreas Gohr    // Link refs (§4.7)
191*451f2842SAndreas Gohr    //
192*451f2842SAndreas Gohr    // The single-pass lexer cannot resolve forward references, so links by reference are not supported.
193*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
194*451f2842SAndreas Gohr
195*451f2842SAndreas Gohr    161 => 'Link refs (§4.7): basic definition with title - forward-reference definitions not supported',
196*451f2842SAndreas Gohr    162 => 'Link refs (§4.7): definition with leading indent across lines - forward references not supported',
197*451f2842SAndreas Gohr    163 => 'Link refs (§4.7): definition with multi-line title - forward-reference definitions not supported',
198*451f2842SAndreas Gohr    164 => 'Link refs (§4.7): definition with multi-line label - forward-reference definitions not supported',
199*451f2842SAndreas Gohr    165 => 'Link refs (§4.7): single-quote title across newline - forward-reference definitions not supported',
200*451f2842SAndreas Gohr    166 => 'Link refs (§4.7): definition with whitespace-collapsed label - forward-reference definitions not supported',
201*451f2842SAndreas Gohr    167 => 'Link refs (§4.7): definition without matching reference use - forward-reference definitions not supported',
202*451f2842SAndreas Gohr    169 => 'Link refs (§4.7): pointy-bracket destination - forward-reference definitions not supported',
203*451f2842SAndreas Gohr    170 => 'Link refs (§4.7): destination then blank line then title - forward-reference definitions not supported',
204*451f2842SAndreas Gohr    171 => 'Link refs (§4.7): title-only without destination - forward-reference definitions not supported',
205*451f2842SAndreas Gohr    172 => 'Link refs (§4.7): backslash escapes in destination and title - forward-reference definitions not supported',
206*451f2842SAndreas Gohr    173 => 'Link refs (§4.7): definition with reference use following - forward-reference definitions not supported',
207*451f2842SAndreas Gohr    174 => 'Link refs (§4.7): case-insensitive label match - forward-reference definitions not supported',
208*451f2842SAndreas Gohr    175 => 'Link refs (§4.7): Unicode case folding for label - forward-reference definitions not supported',
209*451f2842SAndreas Gohr    176 => 'Link refs (§4.7): single definition with no body - forward-reference definitions not supported',
210*451f2842SAndreas Gohr    177 => 'Link refs (§4.7): definition with surrounding whitespace - forward-reference definitions not supported',
211*451f2842SAndreas Gohr    178 => 'Link refs (§4.7): definition indented up to 3 spaces - forward-reference definitions not supported',
212*451f2842SAndreas Gohr    179 => 'Link refs (§4.7): multi-line with title on next line - forward-reference definitions not supported',
213*451f2842SAndreas Gohr    183 => 'Link refs (§4.7): definition does not interrupt paragraph - forward-reference definitions not supported',
214*451f2842SAndreas Gohr    184 => 'Link refs (§4.7): between blockquote and paragraph - forward-reference definitions not supported',
215*451f2842SAndreas Gohr    185 => 'Link refs (§4.7): lone definition emits nothing - forward-reference definitions not supported',
216*451f2842SAndreas Gohr    186 => 'Link refs (§4.7): definition followed by HR - forward-reference definitions not supported',
217*451f2842SAndreas Gohr    187 => 'Link refs (§4.7): multiple definitions in a row - forward-reference definitions not supported',
218*451f2842SAndreas Gohr    188 => 'Link refs (§4.7): definition inside blockquote - forward-reference definitions not supported',
219*451f2842SAndreas Gohr
220*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
221*451f2842SAndreas Gohr    // Paragraphs (§4.8)
222*451f2842SAndreas Gohr    //
223*451f2842SAndreas Gohr    // We do not support lazy continuation of paragraphs
224*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
225*451f2842SAndreas Gohr
226*451f2842SAndreas Gohr    193 => 'Paragraphs (§4.8): leading whitespace on continuation lines - no paragraph-open state to suppress indent',
227*451f2842SAndreas Gohr
228*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
229*451f2842SAndreas Gohr    // Block quotes (§5.1)
230*451f2842SAndreas Gohr    //
231*451f2842SAndreas Gohr    // We only support block quotes that sit at column 0 with no leading spaces before the > marker.
232*451f2842SAndreas Gohr    //
233*451f2842SAndreas Gohr    // Lazy continuation of block quotes is not supported - every line of a block quote must start with > at column 0.
234*451f2842SAndreas Gohr    //
235*451f2842SAndreas Gohr    // Headers are not supported inside block quotes to not mess up TOC and section edit mechanisms.
236*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
237*451f2842SAndreas Gohr
238*451f2842SAndreas Gohr    206 => 'Block quotes (§5.1): header inside - no headers in quotes',
239*451f2842SAndreas Gohr    207 => 'Block quotes (§5.1): header inside with no space after > - no headers in quotes',
240*451f2842SAndreas Gohr    208 => 'Block quotes (§5.1): leading-space > with 1-3 spaces of indent - column-0-only policy',
241*451f2842SAndreas Gohr    210 => 'Block quotes (§5.1): lazy continuation without > on next line - every quote line needs > at column 0',
242*451f2842SAndreas Gohr    211 => 'Block quotes (§5.1): lazy continuation followed by quoted line - every quote line needs > at column 0',
243*451f2842SAndreas Gohr    212 => 'Block quotes (§5.1): Setext underline --- after > foo - Setext headings not supported',
244*451f2842SAndreas Gohr    215 => 'Block quotes (§5.1): fenced code split across boundary - depends on lazy continuation, not implemented',
245*451f2842SAndreas Gohr    216 => 'Block quotes (§5.1): lazy continuation with indented sub-list - every quote line needs > at column 0',
246*451f2842SAndreas Gohr    225 => 'Block quotes (§5.1): lazy continuation across paragraph - every quote line needs > at column 0',
247*451f2842SAndreas Gohr    227 => 'Block quotes (§5.1): lazy continuation with empty line then text - every quote line needs > at column 0',
248*451f2842SAndreas Gohr    228 => 'Block quotes (§5.1): lazy continuation in nested level - every quote line needs > at column 0',
249*451f2842SAndreas Gohr    229 => 'Block quotes (§5.1): lazy continuation across nested levels - every quote line needs > at column 0',
250*451f2842SAndreas Gohr
251*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
252*451f2842SAndreas Gohr    // List items (§5.2), Task list (§5.3), Lists (§5.4)
253*451f2842SAndreas Gohr    //
254*451f2842SAndreas Gohr    // List indentation uses a fixed 2-space-multiple step starting at 0, lazy continuation is not supported.
255*451f2842SAndreas Gohr    //
256*451f2842SAndreas Gohr    // We do not separate into tight and loose lists, but blank lines inside lists are still allowed and do not
257*451f2842SAndreas Gohr    // interrupt the list - they just don't trigger the extra-paragraph wrapping that CommonMark applies to loose lists.
258*451f2842SAndreas Gohr    //
259*451f2842SAndreas Gohr    // The rewriter groups items by 'u'/'o' type only, not by marker character.
260*451f2842SAndreas Gohr    //
261*451f2842SAndreas Gohr    // The task-list extension is not supported
262*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
263*451f2842SAndreas Gohr
264*451f2842SAndreas Gohr    232 => 'List items (§5.2): marker-width content-column for indented body - extra spaces after marker collapsed',
265*451f2842SAndreas Gohr    235 => 'List items (§5.2): marker-width content-column with continuation - extra spaces after marker collapsed',
266*451f2842SAndreas Gohr    237 => 'List items (§5.2): ordered nested in >> with 3-space indent - leading-> indent plus marker-width column',
267*451f2842SAndreas Gohr    238 => 'List items (§5.2): bullet inside >> with leading-space continuation - column-0-only > plus interior space',
268*451f2842SAndreas Gohr    241 => 'List items (§5.2): marker-width column with code/paragraph/quote - extra spaces after marker collapsed',
269*451f2842SAndreas Gohr    242 => 'List items (§5.2): marker-width column plus indented code blanks - extra spaces plus blank-spanning code',
270*451f2842SAndreas Gohr    249 => 'List items (§5.2): marker-width content-column for 10. foo - extra spaces after marker collapsed',
271*451f2842SAndreas Gohr    254 => 'List items (§5.2): marker-width content-column edge case - extra spaces after marker collapsed',
272*451f2842SAndreas Gohr    257 => 'List items (§5.2): empty bullet line then content next line - content column from next line not derived',
273*451f2842SAndreas Gohr    258 => 'List items (§5.2): marker-width content-column for 1.  foo - extra spaces after marker collapsed',
274*451f2842SAndreas Gohr    263 => 'List items (§5.2): indent ambiguity at column 0/1/2 - 1- or 3-space indent rounded to nearest 2',
275*451f2842SAndreas Gohr    264 => 'List items (§5.2): 1-space-indent nesting variation - 1- or 3-space indent rounded to nearest 2',
276*451f2842SAndreas Gohr    265 => 'List items (§5.2): marker-width with multi-line continuation - extra spaces after marker collapsed',
277*451f2842SAndreas Gohr    266 => 'List items (§5.2): marker-width with multi-line continuation variant - extra spaces after marker collapsed',
278*451f2842SAndreas Gohr    267 => 'List items (§5.2): lazy continuation inside list item - column-0 paragraph wrap not supported',
279*451f2842SAndreas Gohr    268 => 'List items (§5.2): lazy continuation across line break - column-0 paragraph wrap not supported',
280*451f2842SAndreas Gohr    270 => 'List items (§5.2): lazy continuation across blank line - lazy plus loose/tight rules not implemented',
281*451f2842SAndreas Gohr    271 => 'List items (§5.2): lazy continuation in nested quote-list-quote - column-0 paragraph wrap not supported',
282*451f2842SAndreas Gohr    273 => 'List items (§5.2): interrupting paragraph without blank line - requires multi-pass parser to revisit text',
283*451f2842SAndreas Gohr    275 => 'List items (§5.2): 3-space indent rounds to 2 for sub-list - 1- or 3-space indent rounded to nearest 2',
284*451f2842SAndreas Gohr    276 => 'List items (§5.2): marker-width column with mixed types - extra spaces plus marker-character splits',
285*451f2842SAndreas Gohr    277 => 'List items (§5.2): nested markers on a single line - extra spaces after marker collapsed',
286*451f2842SAndreas Gohr    278 => 'List items (§5.2): marker-character switch splits the run - rewriter groups by u/o type, not character',
287*451f2842SAndreas Gohr    279 => 'Task list (§5.3): basic checkbox marker - extension not implemented, literal [ ]/[x] stays as content',
288*451f2842SAndreas Gohr    280 => 'Task list (§5.3): nested checkbox markers - extension not implemented, literal brackets stay as content',
289*451f2842SAndreas Gohr    281 => 'Lists (§5.4): marker-character change unordered (- to +) - rewriter groups by u/o type, not character',
290*451f2842SAndreas Gohr    282 => 'Lists (§5.4): ordered delimiter switch (. to )) - rewriter groups by u/o type, not character',
291*451f2842SAndreas Gohr    284 => 'Lists (§5.4): interrupting paragraph without blank line - requires multi-pass parser',
292*451f2842SAndreas Gohr    286 => 'Lists (§5.4): marker-width column for ordered list - extra spaces after marker collapsed',
293*451f2842SAndreas Gohr    287 => 'Lists (§5.4): triple blank plus indented continuation - loose/tight classification not implemented',
294*451f2842SAndreas Gohr    288 => 'Lists (§5.4): marker-character change at deeper level - rewriter groups by u/o type only',
295*451f2842SAndreas Gohr    289 => 'Lists (§5.4): marker-character change with type switch - rewriter groups by u/o type only',
296*451f2842SAndreas Gohr    290 => 'Lists (§5.4): 1-space-indent variations at top level - nesting indent rounded to nearest 2',
297*451f2842SAndreas Gohr    291 => 'Lists (§5.4): 1-space-indent variations on ordered list - nesting indent rounded to nearest 2',
298*451f2842SAndreas Gohr    292 => 'Lists (§5.4): marker-character change inside nested list - rewriter groups by u/o type only',
299*451f2842SAndreas Gohr    293 => 'Lists (§5.4): marker-character change with mixed indent - u/o-only grouping plus indent rounding',
300*451f2842SAndreas Gohr    294 => 'Lists (§5.4): lazy continuation across types - column-0 wrap plus marker splits not implemented',
301*451f2842SAndreas Gohr    295 => 'Lists (§5.4): lazy continuation in nested list - column-0 paragraph wrap not supported',
302*451f2842SAndreas Gohr    296 => 'Lists (§5.4): lazy continuation across blank line - lazy continuation plus loose/tight not implemented',
303*451f2842SAndreas Gohr    297 => 'Lists (§5.4): blank-line classification in nested list - strict loose/tight rules not implemented',
304*451f2842SAndreas Gohr    298 => 'Lists (§5.4): blank-line classification - strict loose/tight rules not implemented',
305*451f2842SAndreas Gohr    300 => 'Lists (§5.4): blank-line class with marker change - loose/tight plus marker splits not implemented',
306*451f2842SAndreas Gohr    301 => 'Lists (§5.4): blank-line classification plus marker-width - loose/tight plus extra-spaces-after-marker',
307*451f2842SAndreas Gohr    304 => 'Lists (§5.4): blank line between sub-list items - strict loose/tight rules not implemented',
308*451f2842SAndreas Gohr    305 => 'Lists (§5.4): blank line between deeply nested items - strict loose/tight rules not implemented',
309*451f2842SAndreas Gohr    306 => 'Lists (§5.4): blank line at end of loose list - strict loose/tight rules not implemented',
310*451f2842SAndreas Gohr
311*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
312*451f2842SAndreas Gohr    // Backslash escapes (§6.1)
313*451f2842SAndreas Gohr    //
314*451f2842SAndreas Gohr    // These examples exercise escape behavior inside features DokuWiki we do not to support, such as
315*451f2842SAndreas Gohr    // raw HTML pass-through, link titles, reference-link definitions.
316*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
317*451f2842SAndreas Gohr
318*451f2842SAndreas Gohr    317 => 'Backslash escapes (§6.1): escapes inside raw HTML - raw HTML pass-through not supported',
319*451f2842SAndreas Gohr    318 => 'Backslash escapes (§6.1): escapes in link title - title attribute discarded, no DW link slot',
320*451f2842SAndreas Gohr    319 => 'Backslash escapes (§6.1): in reference-link definition - forward-reference definitions not supported',
321*451f2842SAndreas Gohr
322*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
323*451f2842SAndreas Gohr    // Entity refs (§6.2)
324*451f2842SAndreas Gohr    //
325*451f2842SAndreas Gohr    // These examples cross into raw HTML pass-through, link-title slots, strict URL rejection, or reference definitions
326*451f2842SAndreas Gohr    // — all features that DokuWiki does not implement for reasons documented in their own sections.
327*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
328*451f2842SAndreas Gohr
329*451f2842SAndreas Gohr    327 => 'Entity refs (§6.2): raw HTML tag with entity in attribute - raw HTML pass-through not supported',
330*451f2842SAndreas Gohr    328 => 'Entity refs (§6.2): link with entity-decoded URL and title - title attribute discarded, no DW link slot',
331*451f2842SAndreas Gohr    329 => 'Entity refs (§6.2): reference link with entity-decoded URL - forward-reference definitions not supported',
332*451f2842SAndreas Gohr    337 => 'Entity refs (§6.2): decoded quote inside link URL - permissive URL slot, strict GFM rejection absent',
333*451f2842SAndreas Gohr
334*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
335*451f2842SAndreas Gohr    // Code spans (§6.3)
336*451f2842SAndreas Gohr    //
337*451f2842SAndreas Gohr    // Cross-positional precedence between code spans and emphasis/links would need a pre-scan pass - our single-pass
338*451f2842SAndreas Gohr    // lexer matches leftmost-first and cannot reject an earlier opener because a later backtick span would consume its
339*451f2842SAndreas Gohr    // closer.
340*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
341*451f2842SAndreas Gohr
342*451f2842SAndreas Gohr    351 => 'Code spans (§6.3): cross-position precedence vs. emphasis - leftmost-match in lexer, no pre-scan',
343*451f2842SAndreas Gohr    352 => 'Code spans (§6.3): span inside link label takes precedence - leftmost-match in lexer, no pre-scan',
344*451f2842SAndreas Gohr    354 => 'Code spans (§6.3): raw HTML tag pass-through - raw HTML pass-through not supported',
345*451f2842SAndreas Gohr
346*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
347*451f2842SAndreas Gohr    // Emphasis (§6.4)
348*451f2842SAndreas Gohr    //
349*451f2842SAndreas Gohr    // DokuWiki's regex lexer uses leftmost-match and cannot apply CommonMark's left/right-flanking rules that
350*451f2842SAndreas Gohr    // distinguish word-chars, whitespace, and punctuation for * / _ delimiters, the multiple-of-3 rule for overlapping
351*451f2842SAndreas Gohr    // runs, the excess-drop logic for long delimiter runs, or balanced-pair analysis across nested delimiters.
352*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
353*451f2842SAndreas Gohr
354*451f2842SAndreas Gohr    362 => 'Emphasis (§6.4): punctuation-adjacent * left/right flanking - flanking-delimiter analysis not implemented',
355*451f2842SAndreas Gohr    363 => 'Emphasis (§6.4): Unicode whitespace (U+00A0) flanking - lexer is ASCII-only, u-flag-aware regex needed',
356*451f2842SAndreas Gohr    368 => 'Emphasis (§6.4): punctuation-adjacent _ flanking - flanking-delimiter analysis not implemented',
357*451f2842SAndreas Gohr    372 => 'Emphasis (§6.4): intraword _ with punctuation inside - flanking-delimiter analysis not implemented',
358*451f2842SAndreas Gohr    376 => 'Emphasis (§6.4): bare * on next line should not pair - lone * taken as empty list marker, breaks paragraph',
359*451f2842SAndreas Gohr    377 => 'Emphasis (§6.4): * followed by ( as punctuation-adjacent - flanking-delimiter analysis not implemented',
360*451f2842SAndreas Gohr    378 => 'Emphasis (§6.4): nested *(*foo*)* with punctuation - flanking plus balanced-pair analysis not implemented',
361*451f2842SAndreas Gohr    382 => 'Emphasis (§6.4): nested _(_foo_)_ with punctuation - flanking plus balanced-pair analysis not implemented',
362*451f2842SAndreas Gohr    389 => 'Emphasis (§6.4): punctuation-adjacent ** flanking - flanking-delimiter analysis not implemented',
363*451f2842SAndreas Gohr    394 => 'Emphasis (§6.4): punctuation-adjacent __ flanking - flanking-delimiter analysis not implemented',
364*451f2842SAndreas Gohr    395 => 'Emphasis (§6.4): intraword __ left/right flanking - flanking-delimiter analysis not implemented',
365*451f2842SAndreas Gohr    396 => 'Emphasis (§6.4): intraword __ across digits (5__6__78) - flanking-delimiter analysis not implemented',
366*451f2842SAndreas Gohr    397 => 'Emphasis (§6.4): intraword __ with Cyrillic - flanking-delimiter analysis not implemented',
367*451f2842SAndreas Gohr    398 => 'Emphasis (§6.4): __foo, __bar__, baz__ flanking with pairing - flanking-delimiter analysis not implemented',
368*451f2842SAndreas Gohr    401 => 'Emphasis (§6.4): ** followed by ( as punctuation-adjacent - flanking-delimiter analysis not implemented',
369*451f2842SAndreas Gohr    404 => 'Emphasis (§6.4): nested *bar* inside **foo ... foo** - flanking-delimiter analysis not implemented',
370*451f2842SAndreas Gohr    407 => 'Emphasis (§6.4): __ followed by ( as punctuation-adjacent - flanking-delimiter analysis not implemented',
371*451f2842SAndreas Gohr    409 => 'Emphasis (§6.4): __foo__bar intraword close - flanking-delimiter analysis not implemented',
372*451f2842SAndreas Gohr    410 => 'Emphasis (§6.4): intraword __ with leading Cyrillic - flanking-delimiter analysis not implemented',
373*451f2842SAndreas Gohr    411 => 'Emphasis (§6.4): __foo__bar__baz__ multiple pairs - flanking-delimiter analysis not implemented',
374*451f2842SAndreas Gohr    412 => 'Emphasis (§6.4): __(bar)__ punctuation-adjacent - flanking-delimiter analysis not implemented',
375*451f2842SAndreas Gohr    416 => 'Emphasis (§6.4): overlapping _foo _bar_ baz_ - CommonMark rule 9 multiple-of-3 not implemented',
376*451f2842SAndreas Gohr    417 => 'Emphasis (§6.4): overlapping _ / __ with flanking - flanking plus multiple-of-3 not implemented',
377*451f2842SAndreas Gohr    418 => 'Emphasis (§6.4): overlapping *foo *bar** - multiple-of-3 rule not implemented',
378*451f2842SAndreas Gohr    419 => 'Emphasis (§6.4): nested *foo **bar** baz* - balanced-pair analysis not implemented',
379*451f2842SAndreas Gohr    421 => 'Emphasis (§6.4): overlapping *foo**bar* - multiple-of-3 rule not implemented',
380*451f2842SAndreas Gohr    422 => 'Emphasis (§6.4): nested ***foo** bar* - triple-delimiter analysis not implemented',
381*451f2842SAndreas Gohr    423 => 'Emphasis (§6.4): nested *foo **bar*** - triple-delimiter analysis not implemented',
382*451f2842SAndreas Gohr    424 => 'Emphasis (§6.4): nested *foo**bar*** - triple-delimiter analysis not implemented',
383*451f2842SAndreas Gohr    425 => 'Emphasis (§6.4): triple foo***bar***baz - triple-delimiter analysis not implemented',
384*451f2842SAndreas Gohr    426 => 'Emphasis (§6.4): long delimiter runs of mixed lengths - excess-drop logic not implemented',
385*451f2842SAndreas Gohr    427 => 'Emphasis (§6.4): deeply nested *foo **bar *baz* bim** bop* - balanced-pair analysis not implemented',
386*451f2842SAndreas Gohr    428 => 'Emphasis (§6.4): inside link label *foo [*bar*](/url)* - link label is flat string, not re-tokenized',
387*451f2842SAndreas Gohr    434 => 'Emphasis (§6.4): overlapping __foo __bar__ baz__ - multiple-of-3 rule not implemented',
388*451f2842SAndreas Gohr    435 => 'Emphasis (§6.4): ____foo__ bar__ leading long run - excess-drop logic not implemented',
389*451f2842SAndreas Gohr    436 => 'Emphasis (§6.4): **foo **bar**** trailing long run - excess-drop logic not implemented',
390*451f2842SAndreas Gohr    439 => 'Emphasis (§6.4): nested ***foo* bar** - triple-delimiter analysis not implemented',
391*451f2842SAndreas Gohr    440 => 'Emphasis (§6.4): nested **foo *bar*** - triple-delimiter analysis not implemented',
392*451f2842SAndreas Gohr    441 => 'Emphasis (§6.4): deeply nested **foo *bar **baz** bim* bop** - balanced-pair analysis not implemented',
393*451f2842SAndreas Gohr    442 => 'Emphasis (§6.4): inside link label **foo [*bar*](/url)** - link label is flat string, not re-tokenized',
394*451f2842SAndreas Gohr    463 => 'Emphasis (§6.4): __foo_ mixed _ / __ pairing - flanking-delimiter analysis not implemented',
395*451f2842SAndreas Gohr    464 => 'Emphasis (§6.4): _foo__ mixed _ / __ pairing - flanking-delimiter analysis not implemented',
396*451f2842SAndreas Gohr    465 => 'Emphasis (§6.4): ___foo__ run-length analysis - flanking plus run-length analysis not implemented',
397*451f2842SAndreas Gohr    466 => 'Emphasis (§6.4): ____foo_ run-length analysis - flanking plus run-length analysis not implemented',
398*451f2842SAndreas Gohr    467 => 'Emphasis (§6.4): __foo___ run-length analysis - flanking plus run-length analysis not implemented',
399*451f2842SAndreas Gohr    468 => 'Emphasis (§6.4): _foo____ run-length analysis - flanking plus run-length analysis not implemented',
400*451f2842SAndreas Gohr    470 => 'Emphasis (§6.4): nested *_foo_* - balanced-pair analysis not implemented',
401*451f2842SAndreas Gohr    472 => 'Emphasis (§6.4): nested _*foo*_ - balanced-pair analysis not implemented',
402*451f2842SAndreas Gohr    473 => 'Emphasis (§6.4): ****foo**** excess-drop (4+4 to strong) - excess-drop logic not implemented',
403*451f2842SAndreas Gohr    474 => 'Emphasis (§6.4): ____foo____ excess-drop (4+4 to strong) - excess-drop logic not implemented',
404*451f2842SAndreas Gohr    475 => 'Emphasis (§6.4): ******foo****** excess-drop (6+6 to strong) - excess-drop logic not implemented',
405*451f2842SAndreas Gohr    477 => 'Emphasis (§6.4): _____foo_____ excess-drop (5+5 to em+strong) - excess-drop logic not implemented',
406*451f2842SAndreas Gohr    478 => 'Emphasis (§6.4): *foo _bar* baz_ overlapping different - flanking plus balanced-pair not implemented',
407*451f2842SAndreas Gohr    479 => 'Emphasis (§6.4): *foo __bar *baz bim__ bam* crossing - flanking plus balanced-pair not implemented',
408*451f2842SAndreas Gohr    480 => 'Emphasis (§6.4): **foo **bar baz** overlapping same - flanking plus balanced-pair not implemented',
409*451f2842SAndreas Gohr    482 => 'Emphasis (§6.4): crossing link boundary *[bar*](/url) - leftmost-match cannot reject opener crossing link',
410*451f2842SAndreas Gohr    483 => 'Emphasis (§6.4): crossing link _foo [bar_](/url) - leftmost-match cannot reject opener crossing link',
411*451f2842SAndreas Gohr    484 => 'Emphasis (§6.4): raw HTML <img/> adjacent to * - raw HTML pass-through not supported',
412*451f2842SAndreas Gohr    485 => 'Emphasis (§6.4): raw HTML <a href="**"> adjacent to ** - raw HTML pass-through not supported',
413*451f2842SAndreas Gohr    486 => 'Emphasis (§6.4): raw HTML <a href="__"> adjacent to __ - raw HTML pass-through not supported',
414*451f2842SAndreas Gohr    489 => 'Emphasis (§6.4): vs angle-bracket autolink with ** inside URL - leftmost-match cannot reorder spans',
415*451f2842SAndreas Gohr    490 => 'Emphasis (§6.4): vs angle-bracket autolink with __ inside URL - leftmost-match cannot reorder spans',
416*451f2842SAndreas Gohr
417*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
418*451f2842SAndreas Gohr    // Links (§6.6)
419*451f2842SAndreas Gohr    //
420*451f2842SAndreas Gohr    // GfmLink deliberately does not implement several link features:
421*451f2842SAndreas Gohr    //
422*451f2842SAndreas Gohr    //   - Title attribute ("title" / 'title' / (title) after the URL). Parses cleanly but is discarded — DokuWiki link
423*451f2842SAndreas Gohr    //     instructions have no title slot, and plumbing one through every renderer is out of scope.
424*451f2842SAndreas Gohr    //   - Pointy-bracket destinations <...>. Rarely used; regex cost and interaction with raw-HTML detection outweigh
425*451f2842SAndreas Gohr    //     the benefit.
426*451f2842SAndreas Gohr    //   - Balanced parentheses inside URL destinations.
427*451f2842SAndreas Gohr    //   - Strict GFM URL rejection (e.g. unquoted whitespace, decoded quote inside URL). GfmLink uses a permissive URL
428*451f2842SAndreas Gohr    //     slot.
429*451f2842SAndreas Gohr    //   - Nested brackets in link labels — single-pass lexer cannot resolve, label class forbids brackets so outer
430*451f2842SAndreas Gohr    //     match fails.
431*451f2842SAndreas Gohr    //   - Inline formatting inside link labels — label is taken as a flat string and not re-tokenized.
432*451f2842SAndreas Gohr    //   - Reference links ([text][id], [text][], [foo] with matching definition). Forward references would require a
433*451f2842SAndreas Gohr    //     two-pass parse; only inline links [text](url) are supported.
434*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
435*451f2842SAndreas Gohr
436*451f2842SAndreas Gohr    493 => 'Links (§6.6): link with title attribute - title slot not supported by DW link instructions',
437*451f2842SAndreas Gohr    495 => 'Links (§6.6): empty URL destination [link]() - GfmLink pattern requires non-empty URL',
438*451f2842SAndreas Gohr    496 => 'Links (§6.6): pointy-bracket link destination - not supported, regex cost outweighs benefit',
439*451f2842SAndreas Gohr    497 => 'Links (§6.6): unquoted whitespace in URL slot - strict GFM URL rejection not implemented',
440*451f2842SAndreas Gohr    498 => 'Links (§6.6): pointy-bracket destination with spaces - not supported',
441*451f2842SAndreas Gohr    500 => 'Links (§6.6): pointy-bracket destination with newline - not supported',
442*451f2842SAndreas Gohr    501 => 'Links (§6.6): pointy-bracket destination containing ) - not supported',
443*451f2842SAndreas Gohr    502 => 'Links (§6.6): pointy-bracket destination with trailing backslash - not supported',
444*451f2842SAndreas Gohr    503 => 'Links (§6.6): malformed pointy-bracket destinations - not supported',
445*451f2842SAndreas Gohr    505 => 'Links (§6.6): balanced parens inside URL destination - regex single-level only',
446*451f2842SAndreas Gohr    507 => 'Links (§6.6): pointy-bracket wrapping unbalanced parens - not supported',
447*451f2842SAndreas Gohr    512 => 'Links (§6.6): destination that parses as title - edge case not supported',
448*451f2842SAndreas Gohr    513 => 'Links (§6.6): three quoting styles for link title - title slot not supported',
449*451f2842SAndreas Gohr    514 => 'Links (§6.6): title with HTML-entity escape - title slot not supported',
450*451f2842SAndreas Gohr    515 => 'Links (§6.6): title separated by non-breaking space - title slot not supported',
451*451f2842SAndreas Gohr    516 => 'Links (§6.6): title with nested balanced quotes - Markdown.pl quirk, not supported',
452*451f2842SAndreas Gohr    517 => 'Links (§6.6): title with different inner quote type - title slot not supported',
453*451f2842SAndreas Gohr    518 => 'Links (§6.6): multi-line link title - title slot not supported',
454*451f2842SAndreas Gohr    520 => 'Links (§6.6): label with literal nested brackets - label class forbids brackets, outer match fails',
455*451f2842SAndreas Gohr    522 => 'Links (§6.6): nested bracket forms inner link only - lexer cannot resolve nested labels',
456*451f2842SAndreas Gohr    524 => 'Links (§6.6): inline formatting inside link label - label is flat string, not re-tokenized',
457*451f2842SAndreas Gohr    526 => 'Links (§6.6): nested links - inner link matches, outer falls back to literal',
458*451f2842SAndreas Gohr    527 => 'Links (§6.6): nested links inside emphasis - leftmost-match cannot resolve nesting',
459*451f2842SAndreas Gohr    528 => 'Links (§6.6): image-as-alt with nested link - alt class forbids brackets, outer image fails',
460*451f2842SAndreas Gohr    529 => 'Links (§6.6): link text grouping vs emphasis - leftmost-match cannot override',
461*451f2842SAndreas Gohr    530 => 'Links (§6.6): emphasis/bracket crossing - leftmost-match cannot override',
462*451f2842SAndreas Gohr    532 => 'Links (§6.6): raw HTML inside link text - raw HTML pass-through not supported',
463*451f2842SAndreas Gohr    533 => 'Links (§6.6): code span inside link text - requires pre-scan pass for cross-position precedence',
464*451f2842SAndreas Gohr    534 => 'Links (§6.6): autolink inside link text - angle-bracket autolinks not supported',
465*451f2842SAndreas Gohr    535 => 'Links (§6.6): reference link [foo][bar] - forward-reference definitions not supported',
466*451f2842SAndreas Gohr    536 => 'Links (§6.6): reference link with emphasis in text - forward-reference definitions not supported',
467*451f2842SAndreas Gohr    537 => 'Links (§6.6): reference link with multi-line text - forward-reference definitions not supported',
468*451f2842SAndreas Gohr    538 => 'Links (§6.6): reference link case-insensitive label - forward-reference definitions not supported',
469*451f2842SAndreas Gohr    539 => 'Links (§6.6): reference link whitespace-collapsed label - forward-reference definitions not supported',
470*451f2842SAndreas Gohr    540 => 'Links (§6.6): reference link with multi-word label - forward-reference definitions not supported',
471*451f2842SAndreas Gohr    541 => 'Links (§6.6): reference link case-insensitive Unicode - forward-reference definitions not supported',
472*451f2842SAndreas Gohr    542 => 'Links (§6.6): reference link with whitespace before label - forward-reference definitions not supported',
473*451f2842SAndreas Gohr    543 => 'Links (§6.6): reference link with whitespace inside brackets - forward-reference definitions not supported',
474*451f2842SAndreas Gohr    544 => 'Links (§6.6): reference link no whitespace before label - forward-reference definitions not supported',
475*451f2842SAndreas Gohr    545 => 'Links (§6.6): reference link first def wins on duplicate - forward-reference definitions not supported',
476*451f2842SAndreas Gohr    546 => 'Links (§6.6): reference link with backslash in label - forward-reference definitions not supported',
477*451f2842SAndreas Gohr    547 => 'Links (§6.6): reference link inline content not parsed - forward-reference definitions not supported',
478*451f2842SAndreas Gohr    548 => 'Links (§6.6): reference link does not interrupt sentences - forward-reference definitions not supported',
479*451f2842SAndreas Gohr    549 => 'Links (§6.6): reference link with empty inner label - forward-reference definitions not supported',
480*451f2842SAndreas Gohr    550 => 'Links (§6.6): reference link [foo][] collapsed form - forward-reference definitions not supported',
481*451f2842SAndreas Gohr    551 => 'Links (§6.6): reference link with bracketed text - forward-reference definitions not supported',
482*451f2842SAndreas Gohr    552 => 'Links (§6.6): reference link with whitespace at boundary - forward-reference definitions not supported',
483*451f2842SAndreas Gohr    553 => 'Links (§6.6): reference link with newline between - forward-reference definitions not supported',
484*451f2842SAndreas Gohr    557 => 'Links (§6.6): reference link with newline-separated label - forward-reference definitions not supported',
485*451f2842SAndreas Gohr    558 => 'Links (§6.6): reference link newline-separated variant - forward-reference definitions not supported',
486*451f2842SAndreas Gohr    560 => 'Links (§6.6): reference link with literal [] - forward-reference definitions not supported',
487*451f2842SAndreas Gohr    561 => 'Links (§6.6): collapsed reference link [foo][] - forward-reference definitions not supported',
488*451f2842SAndreas Gohr    562 => 'Links (§6.6): collapsed reference link with emphasis - forward-reference definitions not supported',
489*451f2842SAndreas Gohr    563 => 'Links (§6.6): collapsed reference link case-insensitive - forward-reference definitions not supported',
490*451f2842SAndreas Gohr    564 => 'Links (§6.6): collapsed reference link with newline - forward-reference definitions not supported',
491*451f2842SAndreas Gohr    565 => 'Links (§6.6): shortcut reference link [foo] - forward-reference definitions not supported',
492*451f2842SAndreas Gohr    566 => 'Links (§6.6): shortcut reference link with emphasis - forward-reference definitions not supported',
493*451f2842SAndreas Gohr    567 => 'Links (§6.6): shortcut reference link with whitespace label - forward-reference definitions not supported',
494*451f2842SAndreas Gohr    568 => 'Links (§6.6): shortcut reference link with multi-word label - forward-reference definitions not supported',
495*451f2842SAndreas Gohr    569 => 'Links (§6.6): shortcut reference link case-insensitive - forward-reference definitions not supported',
496*451f2842SAndreas Gohr    570 => 'Links (§6.6): shortcut reference link with whitespace - forward-reference definitions not supported',
497*451f2842SAndreas Gohr    571 => 'Links (§6.6): shortcut reference link with backslash escape - forward-reference definitions not supported',
498*451f2842SAndreas Gohr    572 => 'Links (§6.6): shortcut reference link with emphasis in label - forward-reference definitions not supported',
499*451f2842SAndreas Gohr    573 => 'Links (§6.6): reference link with literal [foo] - forward-reference definitions not supported',
500*451f2842SAndreas Gohr    574 => 'Links (§6.6): reference link with double bracket [[foo]] - forward-reference definitions not supported',
501*451f2842SAndreas Gohr    575 => 'Links (§6.6): reference link inside paragraph - forward-reference definitions not supported',
502*451f2842SAndreas Gohr    576 => 'Links (§6.6): reference link multi-instance - forward-reference definitions not supported',
503*451f2842SAndreas Gohr    577 => 'Links (§6.6): reference link collapsed-form fallback - forward-reference definitions not supported',
504*451f2842SAndreas Gohr    578 => 'Links (§6.6): reference link shortcut-form fallback - forward-reference definitions not supported',
505*451f2842SAndreas Gohr    579 => 'Links (§6.6): reference link full-form fallback - forward-reference definitions not supported',
506*451f2842SAndreas Gohr
507*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
508*451f2842SAndreas Gohr    // Images (§6.7)
509*451f2842SAndreas Gohr    //
510*451f2842SAndreas Gohr    // We don't have a title slot or support forward references
511*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
512*451f2842SAndreas Gohr
513*451f2842SAndreas Gohr    580 => 'Images (§6.7): image with title attribute - title slot not supported by DW link instructions',
514*451f2842SAndreas Gohr    581 => 'Images (§6.7): reference-style image - forward-reference definitions not supported',
515*451f2842SAndreas Gohr    582 => 'Images (§6.7): nested image-in-image alt - alt forbids brackets, leftmost-match cannot reorder',
516*451f2842SAndreas Gohr    583 => 'Images (§6.7): link inside image alt - alt forbids brackets, leftmost-match cannot reorder',
517*451f2842SAndreas Gohr    584 => 'Images (§6.7): collapsed reference-style image - forward-reference definitions not supported',
518*451f2842SAndreas Gohr    585 => 'Images (§6.7): full reference-style image - forward-reference definitions not supported',
519*451f2842SAndreas Gohr    587 => 'Images (§6.7): image with title attribute variant - title slot not supported',
520*451f2842SAndreas Gohr    588 => 'Images (§6.7): pointy-bracket image destination - not supported, same as link pointy-brackets',
521*451f2842SAndreas Gohr    590 => 'Images (§6.7): reference-style image with label match - forward-reference definitions not supported',
522*451f2842SAndreas Gohr    591 => 'Images (§6.7): reference-style image case-insensitive - forward-reference definitions not supported',
523*451f2842SAndreas Gohr    592 => 'Images (§6.7): collapsed reference-style image ![foo][] - forward-reference definitions not supported',
524*451f2842SAndreas Gohr    593 => 'Images (§6.7): collapsed reference-style image with emphasis - forward-reference definitions not supported',
525*451f2842SAndreas Gohr    594 => 'Images (§6.7): collapsed reference-style case-insensitive - forward-reference definitions not supported',
526*451f2842SAndreas Gohr    595 => 'Images (§6.7): reference-style image with whitespace - forward-reference definitions not supported',
527*451f2842SAndreas Gohr    596 => 'Images (§6.7): shortcut reference-style image ![foo] - forward-reference definitions not supported',
528*451f2842SAndreas Gohr    597 => 'Images (§6.7): shortcut reference-style image with emphasis - forward-reference definitions not supported',
529*451f2842SAndreas Gohr    598 => 'Images (§6.7): image with unescaped nested brackets - literal-fallback behavior not supported',
530*451f2842SAndreas Gohr    599 => 'Images (§6.7): shortcut reference-style case-insensitive - forward-reference definitions not supported',
531*451f2842SAndreas Gohr    600 => 'Images (§6.7): image-via-reference fallback !\[foo] - forward-reference definitions not supported',
532*451f2842SAndreas Gohr    601 => 'Images (§6.7): image-via-reference fallback \![foo] - forward-reference definitions not supported',
533*451f2842SAndreas Gohr
534*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
535*451f2842SAndreas Gohr    // Autolinks (§6.8)
536*451f2842SAndreas Gohr    //
537*451f2842SAndreas Gohr    // Externallink builds one regex per scheme listed in conf/scheme.conf, and only the schemes in that allow-list are
538*451f2842SAndreas Gohr    // recognised as bare-URL autolinks. Schemes outside the allow-list (mailto, made-up schemes, localhost) fall
539*451f2842SAndreas Gohr    // through to default escaping and the URL is emitted as literal text
540*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
541*451f2842SAndreas Gohr
542*451f2842SAndreas Gohr    605 => 'Autolinks (§6.8): angle-bracket autolink with MAILTO: - mailto not in conf/scheme.conf default allow-list',
543*451f2842SAndreas Gohr    606 => 'Autolinks (§6.8): angle-bracket autolink with a+b+c scheme - scheme not in conf/scheme.conf allow-list',
544*451f2842SAndreas Gohr    607 => 'Autolinks (§6.8): angle-bracket autolink with made-up scheme - scheme not in conf/scheme.conf allow-list',
545*451f2842SAndreas Gohr    609 => 'Autolinks (§6.8): angle-bracket with localhost:5001 - localhost not in conf/scheme.conf allow-list',
546*451f2842SAndreas Gohr
547*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
548*451f2842SAndreas Gohr    // Raw HTML (§6.10)
549*451f2842SAndreas Gohr    //
550*451f2842SAndreas Gohr    // We do not support raw HTML pass-through at all.
551*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
552*451f2842SAndreas Gohr
553*451f2842SAndreas Gohr    632 => 'Raw HTML (§6.10): open tag - pass-through not supported',
554*451f2842SAndreas Gohr    633 => 'Raw HTML (§6.10): closing tag - pass-through not supported',
555*451f2842SAndreas Gohr    634 => 'Raw HTML (§6.10): tag with multi-line attributes - pass-through not supported',
556*451f2842SAndreas Gohr    635 => 'Raw HTML (§6.10): tag with line breaks in attributes - pass-through not supported',
557*451f2842SAndreas Gohr    636 => 'Raw HTML (§6.10): tag with custom name and attributes - pass-through not supported',
558*451f2842SAndreas Gohr    638 => 'Raw HTML (§6.10): tag with illegal attribute names - pass-through not supported',
559*451f2842SAndreas Gohr    639 => 'Raw HTML (§6.10): tag with illegal attribute values - pass-through not supported',
560*451f2842SAndreas Gohr    641 => 'Raw HTML (§6.10): open and closing tags pair - pass-through not supported',
561*451f2842SAndreas Gohr    642 => 'Raw HTML (§6.10): HTML comment - pass-through not supported',
562*451f2842SAndreas Gohr    643 => 'Raw HTML (§6.10): invalid comment - pass-through not supported',
563*451f2842SAndreas Gohr    644 => 'Raw HTML (§6.10): processing instruction - pass-through not supported',
564*451f2842SAndreas Gohr    645 => 'Raw HTML (§6.10): declaration - pass-through not supported',
565*451f2842SAndreas Gohr    646 => 'Raw HTML (§6.10): declaration with single-letter name - pass-through not supported',
566*451f2842SAndreas Gohr    647 => 'Raw HTML (§6.10): EMPTY declaration - pass-through not supported',
567*451f2842SAndreas Gohr    648 => 'Raw HTML (§6.10): CDATA section - pass-through not supported',
568*451f2842SAndreas Gohr    649 => 'Raw HTML (§6.10): tag with entity ref in attribute - pass-through not supported',
569*451f2842SAndreas Gohr    650 => 'Raw HTML (§6.10): tag with backslash in attribute - pass-through not supported',
570*451f2842SAndreas Gohr    651 => 'Raw HTML (§6.10): tag with entity quote in attribute - pass-through not supported',
571*451f2842SAndreas Gohr
572*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
573*451f2842SAndreas Gohr    // Raw HTML (§6.11)
574*451f2842SAndreas Gohr    //
575*451f2842SAndreas Gohr    // The Disallowed Raw HTML extension is a filter on top of raw HTML pass-through. DokuWiki escapes raw HTML by
576*451f2842SAndreas Gohr    // policy, so the filter has no input to operate on.
577*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
578*451f2842SAndreas Gohr
579*451f2842SAndreas Gohr    652 => 'Raw HTML (§6.11): disallowed-tag filter on output - DW escapes raw HTML by policy, filter has no input',
580*451f2842SAndreas Gohr
581*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
582*451f2842SAndreas Gohr    // Hard breaks (§6.12)
583*451f2842SAndreas Gohr    //
584*451f2842SAndreas Gohr    // The skipped cases sit inside raw HTML tags, which DokuWiki does not pass through by default.
585*451f2842SAndreas Gohr    // -----------------------------------------------------------------------------------------------------------------
586*451f2842SAndreas Gohr
587*451f2842SAndreas Gohr    662 => 'Hard breaks (§6.12): inside raw HTML tag - raw HTML pass-through not supported',
588*451f2842SAndreas Gohr    663 => 'Hard breaks (§6.12): backslash form inside raw HTML tag - raw HTML pass-through not supported',
589*451f2842SAndreas Gohr
59072b2703bSAndreas Gohr];
591