123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- discard """
- outputsub: ""
- """
- # tests for rstgen module.
- import ../../lib/packages/docutils/rstgen
- import ../../lib/packages/docutils/rst
- import unittest
- suite "YAML syntax highlighting":
- test "Basics":
- let input = """.. code-block:: yaml
- %YAML 1.2
- ---
- a string: string
- a list:
- - item 1
- - item 2
- a map:
- ? key
- : value
- ..."""
- let output = rstTohtml(input, {}, defaultConfig())
- assert output == """<pre class = "listing"><span class="Directive">%YAML 1.2</span>
- <span class="Keyword">---</span>
- <span class="StringLit">a string</span><span class="Punctuation">:</span> <span class="StringLit">string</span>
- <span class="StringLit">a list</span><span class="Punctuation">:</span>
- <span class="Punctuation">-</span> <span class="StringLit">item 1</span>
- <span class="Punctuation">-</span> <span class="StringLit">item 2</span>
- <span class="StringLit">a map</span><span class="Punctuation">:</span>
- <span class="Punctuation">?</span> <span class="StringLit">key</span>
- <span class="Punctuation">:</span> <span class="StringLit">value</span>
- <span class="Keyword">...</span></pre>"""
- test "Block scalars":
- let input = """.. code-block:: yaml
- a literal block scalar: |
- some text
- # not a comment
- # a comment, since less indented
- # another comment
- a folded block scalar: >2
- some text
- # not a comment since indented as specified
- # a comment
- another literal block scalar:
- |+ # comment after header
- allowed, since more indented than parent"""
- let output = rstToHtml(input, {}, defaultConfig())
- assert output == """<pre class = "listing"><span class="StringLit">a literal block scalar</span><span class="Punctuation">:</span> <span class="Command">|</span><span class="Command"></span><span class="LongStringLit">
- some text
- # not a comment
- </span><span class="Comment"># a comment, since less indented</span>
- <span class="Comment"># another comment</span>
- <span class="StringLit">a folded block scalar</span><span class="Punctuation">:</span> <span class="Command">>2</span><span class="Command"></span><span class="LongStringLit">
- some text
- # not a comment since indented as specified
- </span><span class="Comment"># a comment</span>
- <span class="StringLit">another literal block scalar</span><span class="Punctuation">:</span>
- <span class="Command">|+</span> <span class="Comment"># comment after header</span><span class="LongStringLit">
- allowed, since more indented than parent</span></pre>"""
- test "Directives":
- let input = """.. code-block:: yaml
- %YAML 1.2
- ---
- %not a directive
- ...
- %a directive
- ...
- a string
- % not a directive
- ...
- %TAG ! !foo:"""
- let output = rstToHtml(input, {}, defaultConfig())
- assert output == """<pre class = "listing"><span class="Directive">%YAML 1.2</span>
- <span class="Keyword">---</span>
- <span class="StringLit">%not a directive</span>
- <span class="Keyword">...</span>
- <span class="Directive">%a directive</span>
- <span class="Keyword">...</span>
- <span class="StringLit">a string</span>
- <span class="StringLit">% not a directive</span>
- <span class="Keyword">...</span>
- <span class="Directive">%TAG ! !foo:</span></pre>"""
- test "Flow Style and Numbers":
- let input = """.. code-block:: yaml
- {
- "quoted string": 42,
- 'single quoted string': false,
- [ list, "with", 'entries' ]: 73.32e-73,
- more numbers: [-783, 11e78],
- not numbers: [ 42e, 0023, +32.37, 8 ball]
- }"""
- let output = rstToHtml(input, {}, defaultConfig())
- assert output == """<pre class = "listing"><span class="Punctuation">{</span>
- <span class="StringLit">"</span><span class="StringLit">quoted string"</span><span class="Punctuation">:</span> <span class="DecNumber">42</span><span class="Punctuation">,</span>
- <span class="StringLit">'single quoted string'</span><span class="Punctuation">:</span> <span class="StringLit">false</span><span class="Punctuation">,</span>
- <span class="Punctuation">[</span> <span class="StringLit">list</span><span class="Punctuation">,</span> <span class="StringLit">"</span><span class="StringLit">with"</span><span class="Punctuation">,</span> <span class="StringLit">'entries'</span> <span class="Punctuation">]</span><span class="Punctuation">:</span> <span class="FloatNumber">73.32e-73</span><span class="Punctuation">,</span>
- <span class="StringLit">more numbers</span><span class="Punctuation">:</span> <span class="Punctuation">[</span><span class="DecNumber">-783</span><span class="Punctuation">,</span> <span class="FloatNumber">11e78</span><span class="Punctuation">]</span><span class="Punctuation">,</span>
- <span class="StringLit">not numbers</span><span class="Punctuation">:</span> <span class="Punctuation">[</span> <span class="StringLit">42e</span><span class="Punctuation">,</span> <span class="StringLit">0023</span><span class="Punctuation">,</span> <span class="StringLit">+32.37</span><span class="Punctuation">,</span> <span class="StringLit">8 ball</span><span class="Punctuation">]</span>
- <span class="Punctuation">}</span></pre>"""
- test "Anchors, Aliases, Tags":
- let input = """.. code-block:: yaml
- --- !!map
- !!str string: !<tag:yaml.org,2002:int> 42
- ? &anchor !!seq []:
- : !localtag foo
- alias: *anchor
- """
- let output = rstToHtml(input, {}, defaultConfig())
- assert output == """<pre class = "listing"><span class="Keyword">---</span> <span class="TagStart">!!map</span>
- <span class="TagStart">!!str</span> <span class="StringLit">string</span><span class="Punctuation">:</span> <span class="TagStart">!<tag:yaml.org,2002:int></span> <span class="DecNumber">42</span>
- <span class="Punctuation">?</span> <span class="Label">&anchor</span> <span class="TagStart">!!seq</span> <span class="Punctuation">[</span><span class="Punctuation">]</span><span class="Punctuation">:</span>
- <span class="Punctuation">:</span> <span class="TagStart">!localtag</span> <span class="StringLit">foo</span>
- <span class="StringLit">alias</span><span class="Punctuation">:</span> <span class="Reference">*anchor</span></pre>"""
- test "Edge cases":
- let input = """.. code-block:: yaml
- ...
- %a string:
- a:string:not:a:map
- ...
- not a list:
- -2
- -3
- -4
- example.com/not/a#comment:
- ?not a map key
- """
- let output = rstToHtml(input, {}, defaultConfig())
- assert output == """<pre class = "listing"><span class="Keyword">...</span>
- <span class="StringLit">%a string</span><span class="Punctuation">:</span>
- <span class="StringLit">a:string:not:a:map</span>
- <span class="Keyword">...</span>
- <span class="StringLit">not a list</span><span class="Punctuation">:</span>
- <span class="DecNumber">-2</span>
- <span class="DecNumber">-3</span>
- <span class="DecNumber">-4</span>
- <span class="StringLit">example.com/not/a#comment</span><span class="Punctuation">:</span>
- <span class="StringLit">?not a map key</span></pre>"""
- test "Markdown links":
- let
- a = rstToHtml("(( [Nim](https://nim-lang.org/) ))", {roSupportMarkdown}, defaultConfig())
- b = rstToHtml("(([Nim](https://nim-lang.org/)))", {roSupportMarkdown}, defaultConfig())
- c = rstToHtml("[[Nim](https://nim-lang.org/)]", {roSupportMarkdown}, defaultConfig())
- assert a == """(( <a class="reference external" href="https://nim-lang.org/">Nim</a> ))"""
- assert b == """((<a class="reference external" href="https://nim-lang.org/">Nim</a>))"""
- assert c == """[<a class="reference external" href="https://nim-lang.org/">Nim</a>]"""
- test "Markdown tables":
- let input1 = """
- | A1 header | A2 \| not fooled
- | :--- | ----: |
- | C1 | C2 **bold** | ignored |
- | D1 `code \|` | D2 | also ignored
- | E1 \| text |
- | | F2 without pipe
- not in table"""
- let output1 = rstToHtml(input1, {roSupportMarkdown}, defaultConfig())
- assert output1 == """<table border="1" class="docutils"><tr><th>A1 header</th><th>A2 | not fooled</th></tr>
- <tr><td>C1</td><td>C2 <strong>bold</strong></td></tr>
- <tr><td>D1 <tt class="docutils literal"><span class="pre">code |</span></tt></td><td>D2</td></tr>
- <tr><td>E1 | text</td><td></td></tr>
- <tr><td></td><td>F2 without pipe</td></tr>
- </table><p>not in table</p>
- """
- let input2 = """
- | A1 header | A2 |
- | --- | --- |"""
- let output2 = rstToHtml(input2, {roSupportMarkdown}, defaultConfig())
- assert output2 == """<table border="1" class="docutils"><tr><th>A1 header</th><th>A2</th></tr>
- </table>"""
|