3 # :Copyright: © 2020 Günter Milde.
4 # :License: Released under the terms of the `2-Clause BSD license`_, in short:
6 # Copying and distribution of this file, with or without modification,
7 # are permitted in any medium without royalty provided the copyright
8 # notice and this notice are preserved.
9 # This file is offered as-is, without any warranty.
11 # .. _2-Clause BSD license: https://opensource.org/licenses/BSD-2-Clause
13 Tests for inline markup in CommonMark parsers
14 Cf. the `CommonMark Specification <https://spec.commonmark.org/>`__
17 from __future__
import absolute_import
19 if __name__
== '__main__':
21 from test_parsers
import DocutilsTestSupport
25 s
= DocutilsTestSupport
.RecommonmarkParserTestSuite()
26 s
.generateTests(totest
)
31 totest
['emphasis'] = [
37 <document source="test data">
45 Partially*emphasised*word.
48 <document source="test data">
60 <document source="test data">
67 *no emphasis without closing asterisk
70 <document source="test data">
73 no emphasis without closing asterisk
76 No markup when \*escaped or unbalanced *.
79 Unbalanced _markup__ is kept as-is without warning.
82 <document source="test data">
86 escaped or unbalanced \n\
99 is kept as-is without warning.
102 Emphasized asterisk: *\**
104 Emphasized double asterisk: *\*\**
107 <document source="test data">
109 Emphasized asterisk: \n\
113 Emphasized double asterisk: \n\
126 <document source="test data">
134 Strong asterisk must be escaped **\\***
136 Strong double asterisk: **\\*\\***
139 <document source="test data">
141 Strong asterisk must be escaped \n\
145 Strong double asterisk: \n\
151 **not strong without closing asterisks
154 <document source="test data">
157 not strong without closing asterisks
161 totest
['literal'] = [
163 Inline `literals` are called `code spans` in CommonMark.
166 <document source="test data">
169 <literal classes="code">
172 <literal classes="code">
180 <document source="test data">
182 <literal classes="code">
189 <document source="test data">
191 <literal classes="code">
198 <document source="test data">
200 <literal classes="code">
204 l'``literal`` and l\u2019``literal`` with apostrophe
207 <document source="test data">
210 <literal classes="code">
213 <literal classes="code">
218 quoted '``literal``', quoted "``literal``",
219 quoted \u2018``literal``\u2019, quoted \u201c``literal``\u201d,
220 quoted \xab``literal``\xbb
223 <document source="test data">
226 <literal classes="code">
229 <literal classes="code">
233 <literal classes="code">
235 \u2019, quoted \u201c
236 <literal classes="code">
240 <literal classes="code">
245 ``'literal'`` with quotes, ``"literal"`` with quotes,
246 ``\u2018literal\u2019`` with quotes, ``\u201cliteral\u201d`` with quotes,
247 ``\xabliteral\xbb`` with quotes
250 <document source="test data">
252 <literal classes="code">
255 <literal classes="code">
258 <literal classes="code">
261 <literal classes="code">
264 <literal classes="code">
269 ``literal ``no literal
271 No warning for `standalone TeX quotes' or other *unbalanced markup**.
274 <document source="test data">
276 <literal classes="code">
282 standalone TeX quotes\' or other \n\
289 ``not literal without closing backquotes
292 <document source="test data">
295 not literal without closing backquotes
298 Python ``list``s use square bracket syntax.
301 <document source="test data">
304 <literal classes="code">
306 s use square bracket syntax.
309 Blank after opening `` not allowed.
312 <document source="test data">
314 Blank after opening \n\
319 no blank ``after closing``still ends a literal.
322 <document source="test data">
325 <literal classes="code">
327 still ends a literal.
331 totest
['references'] = [
338 <document source="test data">
340 <reference name="ref" refuri="/uri">
344 Inline image ![foo *bar*][foobar]
347 [FOOBAR]: train.jpg "train & tracks"
350 <document source="test data">
353 <image alt="foo " title="train & tracks" uri="train.jpg">
359 [phrase reference]: /uri
362 <document source="test data">
364 <reference name="phrase reference" refuri="/uri">
368 No whitespace required around a[phrase reference].
370 [phrase reference]: /uri
373 <document source="test data">
375 No whitespace required around a
376 <reference name="phrase reference" refuri="/uri">
384 [phrase reference across lines]: /uri
387 <document source="test data">
389 <reference name="phrase referenceacross lines" refuri="/uri">
395 totest
['appended_URIs'] = [
397 [anonymous reference](http://example.com)
400 <document source="test data">
402 <reference name="anonymous reference" refuri="http://example.com">
406 Inline image ![a train](train.jpg) more text.
409 <document source="test data">
412 <image alt="a train" uri="train.jpg">
416 Inline image ![foo](/url "title") more text.
419 <document source="test data">
422 <image alt="foo" title="title" uri="/url">
426 [URI must follow immediately]
430 <document source="test data">
433 URI must follow immediately
438 Relative URIs' reference text can't be omitted:
440 [reference](reference)
443 <document source="test data">
445 Relative URIs' reference text can't be omitted:
447 <reference name="reference" refuri="reference">
452 totest
['standalone hyperlink'] = [
454 CommonMark calls standalone hyperlinks
455 like <http://example.com> "autolinks".
458 <document source="test data">
460 CommonMark calls standalone hyperlinks
462 <reference name="http://example.com" refuri="http://example.com">
468 totest
['raw HTML'] = [
470 foo <a href="uri"> bar
473 <document source="test data">
476 <raw format="html" xml:space="preserve">
482 and <!-- this is an inline
483 comment - with hyphen -->
486 <document source="test data">
489 <raw format="html" xml:space="preserve">
493 <raw format="html" xml:space="preserve">
494 <!-- this is an inline
495 comment - with hyphen -->
498 Hard line breaks are not supported by Docutils.
499 Not the soft line break preceded by two or more spaces, \n\
500 nor the more visible alternative,\\
501 a backslash before the line ending.
504 <document source="test data">
506 Hard line breaks are not supported by Docutils.
507 Not the soft line break preceded by two or more spaces,
508 nor the more visible alternative,
509 a backslash before the line ending.
513 totest
['markup recognition rules'] = [
515 Character-level m*a***r**`k`_u_p
516 works except for underline.
519 <document source="test data">
526 <literal classes="code">
532 works except for underline.
537 if __name__
== '__main__':
539 unittest
.main(defaultTest
='suite')