git.iko.soy/typeable/pandoc
on master help sign in
FB2 writer: represent HorizontalRule as empty line

HorizontalRule corresponds to <hr> element in the default output format, HTML. Current HTML standard defines <hr> element as "paragraph-level thematic break". In typography it is often represented by extra space or centered asterism ("⁂"), but since FB2 does not support text centering, empty line (similar to extra space) is the only solution. Line breaks, on the other hand, don't generate <empty-line /> anymore. Previously line breaks generated <empty-line /> element inside paragraph, which is not allowed. So, this commit addresses issue #2424 ("FB2 produced by pandoc doesn't validate"). FB2 does not have a way to represent line breaks inside paragraphs. They are replaced with LF character, which is not rendered by FB2 readers, but at least preserves some information.

commitf224567d52096fd6219a2a4a4d2b9cbcc5219e7a authorAlexander Krotov <ilabdsf@gmail.com> dateWed 4 Apr 2018, 02:41 (9 years ago) parent87dda21
5 files changed+82−62
src/Text/Pandoc/Writers/FB2.hs+4−7 test/Tests/Writers/FB2.hs+2−2 test/fb2/basic.fb2+7−1 test/tables.fb2+14−1 test/writer.fb2+55−51
src/Text/Pandoc/Writers/FB2.hs+4−7
@@ -365,10 +365,7 @@ blockToXml h@Header{} = do
365365 -- should not occur after hierarchicalize, except inside lists/blockquotes
366366 report $ BlockNotRendered h
367367 return []
368−blockToXml HorizontalRule = return
369− [ el "empty-line" ()
370− , el "p" (txt (replicate 10 '—'))
371− , el "empty-line" () ]
368+blockToXml HorizontalRule = return [ el "empty-line" () ]
372369blockToXml (Table caption aligns _ headers rows) = do
373370 hd <- mkrow "th" headers aligns
374371 bd <- mapM (\r -> mkrow "td" r aligns) rows
@@ -398,7 +395,7 @@ plainToPara [] = []
398395plainToPara (Plain inlines : rest) =
399396 Para inlines : plainToPara rest
400397plainToPara (Para inlines : rest) =
401− Para inlines : Plain [LineBreak] : plainToPara rest
398+ Para inlines : HorizontalRule : plainToPara rest -- HorizontalRule will be converted to <empty-line />
402399plainToPara (p:rest) = p : plainToPara rest
403400
404401-- Simulate increased indentation level. Will not really work
@@ -449,8 +446,8 @@ toXml (Quoted DoubleQuote ss) = do
449446toXml (Cite _ ss) = cMapM toXml ss -- FIXME: support citation styles
450447toXml (Code _ s) = return [el "code" s]
451448toXml Space = return [txt " "]
452−toXml SoftBreak = return [txt " "]
453−toXml LineBreak = return [el "empty-line" ()]
449+toXml SoftBreak = return [txt "\n"]
450+toXml LineBreak = return [txt "\n"]
454451toXml (Math _ formula) = insertMath InlineImage formula
455452toXml il@(RawInline _ _) = do
456453 report $ InlineNotRendered il
test/Tests/Writers/FB2.hs+2−2
@@ -25,8 +25,8 @@ tests = [ testGroup "block elements"
2525 ]
2626 , testGroup "inlines"
2727 [
28− "Emphasis" =: emph "emphasized"
29− =?> fb2 "<emphasis>emphasized</emphasis>"
28+ "Emphasis" =: para (emph "emphasized")
29+ =?> fb2 "<p><emphasis>emphasized</emphasis></p>"
3030 ]
3131 , "bullet list" =: bulletList [ plain $ text "first"
3232 , plain $ text "second"
test/fb2/basic.fb2+7−1
@@ -1,3 +1,9 @@
11<?xml version="1.0" encoding="UTF-8"?>
2−<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><genre>unrecognised</genre></title-info><document-info><program-used>pandoc</program-used></document-info></description><body><title><p /></title><section><title><p>Top-level title</p></title><section><title><p>Section</p></title><section><title><p>Subsection</p></title><p>This <emphasis>emphasized</emphasis> <strong>strong</strong> <code>verbatim</code> markdown. See this link<a l:href="#l1" type="note"><sup>[1]</sup></a>.</p><p>Ordered list:</p><p>1. one</p><p>2. two</p><p>3. three</p><cite><p>Blockquote is for citatons.</p></cite><empty-line /><p><code>Code</code></p><p><code>block</code></p><p><code>is</code></p><p><code>for</code></p><p><code>code.</code></p><empty-line /><p><strikethrough>Strikeout</strikethrough> is Pandoc’s extension. Superscript and subscripts too: H<sub>2</sub>O is a liquid<a l:href="#n2" type="note"><sup>[2]</sup></a>. 2<sup>10</sup> is 1024.</p><p>Math is another Pandoc extension: <code>E = m c^2</code>.</p></section></section></section></body><body name="notes"><section id="l1"><title><p>1</p></title><p><code>http://example.com/</code></p></section><section id="n2"><title><p>2</p></title><p>Sometimes.</p></section></body></FictionBook>
2+<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><genre>unrecognised</genre></title-info><document-info><program-used>pandoc</program-used></document-info></description><body><title><p /></title><section><title><p>Top-level title</p></title><section><title><p>Section</p></title><section><title><p>Subsection</p></title><p>This <emphasis>emphasized</emphasis> <strong>strong</strong> <code>verbatim</code> markdown.
3+See this link<a l:href="#l1" type="note"><sup>[1]</sup></a>.</p><p>Ordered list:</p><p>1. one</p><p>2. two</p><p>3. three</p><cite><p>Blockquote
4+is
5+for
6+citatons.</p></cite><empty-line /><p><code>Code</code></p><p><code>block</code></p><p><code>is</code></p><p><code>for</code></p><p><code>code.</code></p><empty-line /><p><strikethrough>Strikeout</strikethrough> is Pandoc’s extension.
7+Superscript and subscripts too: H<sub>2</sub>O is a liquid<a l:href="#n2" type="note"><sup>[2]</sup></a>.
8+2<sup>10</sup> is 1024.</p><p>Math is another Pandoc extension: <code>E = m c^2</code>.</p></section></section></section></body><body name="notes"><section id="l1"><title><p>1</p></title><p><code>http://example.com/</code></p></section><section id="n2"><title><p>2</p></title><p>Sometimes.</p></section></body></FictionBook>
39
test/tables.fb2+14−1
@@ -1,3 +1,16 @@
11<?xml version="1.0" encoding="UTF-8"?>
2−<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><genre>unrecognised</genre></title-info><document-info><program-used>pandoc</program-used></document-info></description><body><title><p /></title><section><p>Simple table with caption:</p><table><tr><th align="right">Right</th><th align="left">Left</th><th align="center">Center</th><th align="left">Default</th></tr><tr><td align="right">12</td><td align="left">12</td><td align="center">12</td><td align="left">12</td></tr><tr><td align="right">123</td><td align="left">123</td><td align="center">123</td><td align="left">123</td></tr><tr><td align="right">1</td><td align="left">1</td><td align="center">1</td><td align="left">1</td></tr></table><p><emphasis>Demonstration of simple table syntax.</emphasis></p><p>Simple table without caption:</p><table><tr><th align="right">Right</th><th align="left">Left</th><th align="center">Center</th><th align="left">Default</th></tr><tr><td align="right">12</td><td align="left">12</td><td align="center">12</td><td align="left">12</td></tr><tr><td align="right">123</td><td align="left">123</td><td align="center">123</td><td align="left">123</td></tr><tr><td align="right">1</td><td align="left">1</td><td align="center">1</td><td align="left">1</td></tr></table><p><emphasis /></p><p>Simple table indented two spaces:</p><table><tr><th align="right">Right</th><th align="left">Left</th><th align="center">Center</th><th align="left">Default</th></tr><tr><td align="right">12</td><td align="left">12</td><td align="center">12</td><td align="left">12</td></tr><tr><td align="right">123</td><td align="left">123</td><td align="center">123</td><td align="left">123</td></tr><tr><td align="right">1</td><td align="left">1</td><td align="center">1</td><td align="left">1</td></tr></table><p><emphasis>Demonstration of simple table syntax.</emphasis></p><p>Multiline table with caption:</p><table><tr><th align="center">Centered Header</th><th align="left">Left Aligned</th><th align="right">Right Aligned</th><th align="left">Default aligned</th></tr><tr><td align="center">First</td><td align="left">row</td><td align="right">12.0</td><td align="left">Example of a row that spans multiple lines.</td></tr><tr><td align="center">Second</td><td align="left">row</td><td align="right">5.0</td><td align="left">Here’s another one. Note the blank line between rows.</td></tr></table><p><emphasis>Here’s the caption. It may span multiple lines.</emphasis></p><p>Multiline table without caption:</p><table><tr><th align="center">Centered Header</th><th align="left">Left Aligned</th><th align="right">Right Aligned</th><th align="left">Default aligned</th></tr><tr><td align="center">First</td><td align="left">row</td><td align="right">12.0</td><td align="left">Example of a row that spans multiple lines.</td></tr><tr><td align="center">Second</td><td align="left">row</td><td align="right">5.0</td><td align="left">Here’s another one. Note the blank line between rows.</td></tr></table><p><emphasis /></p><p>Table without column headers:</p><table><tr><th align="right" /><th align="left" /><th align="center" /><th align="right" /></tr><tr><td align="right">12</td><td align="left">12</td><td align="center">12</td><td align="right">12</td></tr><tr><td align="right">123</td><td align="left">123</td><td align="center">123</td><td align="right">123</td></tr><tr><td align="right">1</td><td align="left">1</td><td align="center">1</td><td align="right">1</td></tr></table><p><emphasis /></p><p>Multiline table without column headers:</p><table><tr><th align="center" /><th align="left" /><th align="right" /><th align="left" /></tr><tr><td align="center">First</td><td align="left">row</td><td align="right">12.0</td><td align="left">Example of a row that spans multiple lines.</td></tr><tr><td align="center">Second</td><td align="left">row</td><td align="right">5.0</td><td align="left">Here’s another one. Note the blank line between rows.</td></tr></table><p><emphasis /></p></section></body></FictionBook>
2+<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><genre>unrecognised</genre></title-info><document-info><program-used>pandoc</program-used></document-info></description><body><title><p /></title><section><p>Simple table with caption:</p><table><tr><th align="right">Right</th><th align="left">Left</th><th align="center">Center</th><th align="left">Default</th></tr><tr><td align="right">12</td><td align="left">12</td><td align="center">12</td><td align="left">12</td></tr><tr><td align="right">123</td><td align="left">123</td><td align="center">123</td><td align="left">123</td></tr><tr><td align="right">1</td><td align="left">1</td><td align="center">1</td><td align="left">1</td></tr></table><p><emphasis>Demonstration of simple table syntax.</emphasis></p><p>Simple table without caption:</p><table><tr><th align="right">Right</th><th align="left">Left</th><th align="center">Center</th><th align="left">Default</th></tr><tr><td align="right">12</td><td align="left">12</td><td align="center">12</td><td align="left">12</td></tr><tr><td align="right">123</td><td align="left">123</td><td align="center">123</td><td align="left">123</td></tr><tr><td align="right">1</td><td align="left">1</td><td align="center">1</td><td align="left">1</td></tr></table><p><emphasis /></p><p>Simple table indented two spaces:</p><table><tr><th align="right">Right</th><th align="left">Left</th><th align="center">Center</th><th align="left">Default</th></tr><tr><td align="right">12</td><td align="left">12</td><td align="center">12</td><td align="left">12</td></tr><tr><td align="right">123</td><td align="left">123</td><td align="center">123</td><td align="left">123</td></tr><tr><td align="right">1</td><td align="left">1</td><td align="center">1</td><td align="left">1</td></tr></table><p><emphasis>Demonstration of simple table syntax.</emphasis></p><p>Multiline table with caption:</p><table><tr><th align="center">Centered
3+Header</th><th align="left">Left
4+Aligned</th><th align="right">Right
5+Aligned</th><th align="left">Default aligned</th></tr><tr><td align="center">First</td><td align="left">row</td><td align="right">12.0</td><td align="left">Example of a row that spans
6+multiple lines.</td></tr><tr><td align="center">Second</td><td align="left">row</td><td align="right">5.0</td><td align="left">Here’s another one. Note
7+the blank line between rows.</td></tr></table><p><emphasis>Here’s the caption.
8+It may span multiple lines.</emphasis></p><p>Multiline table without caption:</p><table><tr><th align="center">Centered
9+Header</th><th align="left">Left
10+Aligned</th><th align="right">Right
11+Aligned</th><th align="left">Default aligned</th></tr><tr><td align="center">First</td><td align="left">row</td><td align="right">12.0</td><td align="left">Example of a row that spans
12+multiple lines.</td></tr><tr><td align="center">Second</td><td align="left">row</td><td align="right">5.0</td><td align="left">Here’s another one. Note
13+the blank line between rows.</td></tr></table><p><emphasis /></p><p>Table without column headers:</p><table><tr><th align="right" /><th align="left" /><th align="center" /><th align="right" /></tr><tr><td align="right">12</td><td align="left">12</td><td align="center">12</td><td align="right">12</td></tr><tr><td align="right">123</td><td align="left">123</td><td align="center">123</td><td align="right">123</td></tr><tr><td align="right">1</td><td align="left">1</td><td align="center">1</td><td align="right">1</td></tr></table><p><emphasis /></p><p>Multiline table without column headers:</p><table><tr><th align="center" /><th align="left" /><th align="right" /><th align="left" /></tr><tr><td align="center">First</td><td align="left">row</td><td align="right">12.0</td><td align="left">Example of a row that spans
14+multiple lines.</td></tr><tr><td align="center">Second</td><td align="left">row</td><td align="right">5.0</td><td align="left">Here’s another one. Note
15+the blank line between rows.</td></tr></table><p><emphasis /></p></section></body></FictionBook>
316
test/writer.fb2+55−51
@@ -22,9 +22,8 @@
2222<p>Pandoc Test Suite</p>
2323</title>
2424<section>
25−<p>This is a set of tests for pandoc. Most of them are adapted from John Gruber’s markdown test suite.</p>
26−<empty-line />
27−<p>——————————</p>
25+<p>This is a set of tests for pandoc. Most of them are adapted from
26+John Gruber’s markdown test suite.</p>
2827<empty-line />
2928</section>
3029<section>
@@ -78,8 +77,6 @@
7877</title>
7978<p>with no blank line</p>
8079<empty-line />
81−<p>——————————</p>
82−<empty-line />
8380</section>
8481</section>
8582<section>
@@ -87,11 +84,15 @@
8784<p>Paragraphs</p>
8885</title>
8986<p>Here’s a regular paragraph.</p>
90−<p>In Markdown 1.0.0 and earlier. Version 8. This line turns into a list item. Because a hard-wrapped line in the middle of a paragraph looked like a list item.</p>
91−<p>Here’s one with a bullet. * criminey.</p>
92−<p>There should be a hard line break<empty-line />here.</p>
93−<empty-line />
94−<p>——————————</p>
87+<p>In Markdown 1.0.0 and earlier. Version
88+8. This line turns into a list item.
89+Because a hard-wrapped line in the
90+middle of a paragraph looked like a
91+list item.</p>
92+<p>Here’s one with a bullet.
93+* criminey.</p>
94+<p>There should be a hard line break
95+here.</p>
9596<empty-line />
9697</section>
9798<section>
@@ -100,7 +101,8 @@
100101</title>
101102<p>E-mail style:</p>
102103<cite>
103−<p>This is a block quote. It is pretty short.</p>
104+<p>This is a block quote.
105+It is pretty short.</p>
104106</cite>
105107<cite>
106108<p>Code in a block quote:</p>
@@ -126,11 +128,10 @@
126128<p>nested</p>
127129</cite>
128130</cite>
129−<p>This should not be a block quote: 2 &gt; 1.</p>
131+<p>This should not be a block quote: 2
132+&gt; 1.</p>
130133<p>And a following paragraph.</p>
131134<empty-line />
132−<p>——————————</p>
133−<empty-line />
134135</section>
135136<section>
136137<title>
@@ -176,8 +177,6 @@
176177</p>
177178<empty-line />
178179<empty-line />
179−<p>——————————</p>
180−<empty-line />
181180</section>
182181<section>
183182<title>
@@ -250,7 +249,8 @@
250249<p>Multiple paragraphs:</p>
251250<p>1. Item 1, graf one.</p>
252251<empty-line />
253−<p>   Item 1. graf two. The quick brown fox jumped over the lazy dog’s back.</p>
252+<p>   Item 1. graf two. The quick brown fox jumped over the lazy dog’s
253+back.</p>
254254<empty-line />
255255<p>2. Item 2.</p>
256256<empty-line />
@@ -286,13 +286,17 @@
286286<title>
287287<p>Tabs and spaces</p>
288288</title>
289−<p>• this is a list item indented with tabs</p>
289+<p>• this is a list item
290+indented with tabs</p>
290291<empty-line />
291−<p>• this is a list item indented with spaces</p>
292+<p>• this is a list item
293+indented with spaces</p>
292294<empty-line />
293−<p>• • this is an example list item indented with tabs</p>
295+<p>• • this is an example list item
296+indented with tabs</p>
294297<empty-line />
295−<p>• • this is an example list item indented with spaces</p>
298+<p>• • this is an example list item
299+indented with spaces</p>
296300<empty-line />
297301</section>
298302<section>
@@ -304,7 +308,8 @@
304308<empty-line />
305309<p>    with a continuation</p>
306310<empty-line />
307−<p>(3) iv. sublist with roman numerals, starting with 4</p>
311+<p>(3) iv. sublist with roman numerals,
312+starting with 4</p>
308313<p>(3) v. more items</p>
309314<p>(3) v. (A) a subsublist</p>
310315<p>(3) v. (B) a subsublist</p>
@@ -321,8 +326,6 @@
321326<p>M.A. 2007</p>
322327<p>B. Williams</p>
323328<empty-line />
324−<p>——————————</p>
325−<empty-line />
326329</section>
327330</section>
328331<section>
@@ -379,7 +382,8 @@
379382</p>
380383<p>    red fruit</p>
381384<empty-line />
382−<p>    contains seeds, crisp, pleasant to taste</p>
385+<p>    contains seeds,
386+crisp, pleasant to taste</p>
383387<empty-line />
384388<p>
385389<strong>
@@ -481,8 +485,6 @@
481485<empty-line />
482486<p>Hr’s:</p>
483487<empty-line />
484−<p>——————————</p>
485−<empty-line />
486488</section>
487489<section>
488490<title>
@@ -518,9 +520,8 @@
518520<emphasis>hello</emphasis>
519521</sup> a<sup>hello there</sup>.</p>
520522<p>Subscripts: H<sub>2</sub>O, H<sub>23</sub>O, H<sub>many of them</sub>O.</p>
521−<p>These should not be superscripts or subscripts, because of the unescaped spaces: a^b c^d, a~b c~d.</p>
522−<empty-line />
523−<p>——————————</p>
523+<p>These should not be superscripts or subscripts,
524+because of the unescaped spaces: a^b c^d, a~b c~d.</p>
524525<empty-line />
525526</section>
526527<section>
@@ -529,8 +530,10 @@
529530</title>
530531<p>“Hello,” said the spider. “‘Shelob’ is my name.”</p>
531532<p>‘A’, ‘B’, and ‘C’ are letters.</p>
532−<p>‘Oak,’ ‘elm,’ and ‘beech’ are names of trees. So is ‘pine.’</p>
533−<p>‘He said, “I want to go.”’ Were you alive in the 70’s?</p>
533+<p>‘Oak,’ ‘elm,’ and ‘beech’ are names of trees.
534+So is ‘pine.’</p>
535+<p>‘He said, “I want to go.”’ Were you alive in the
536+70’s?</p>
534537<p>Here is some quoted ‘<code>code</code>’ and a “quoted link<a l:href="#l3" type="note">
535538<sup>[3]</sup>
536539</a>”.</p>
@@ -538,8 +541,6 @@
538541<p>Dashes between numbers: 5–7, 255–66, 1987–1999.</p>
539542<p>Ellipses…and…and….</p>
540543<empty-line />
541−<p>——————————</p>
542−<empty-line />
543544</section>
544545<section>
545546<title>
@@ -555,18 +556,18 @@
555556<p>• <code>223</code>
556557</p>
557558<p>• <code>p</code>-Tree</p>
558−<p>• Here’s some display math: <code>\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}</code>
559+<p>• Here’s some display math:
560+<code>\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}</code>
559561</p>
560562<p>• Here’s one that has a line break in it: <code>\alpha + \omega \times x^2</code>.</p>
561563<p>These shouldn’t be math:</p>
562564<p>• To get the famous equation, write <code>$e = mc^2$</code>.</p>
563−<p>• $22,000 is a <emphasis>lot</emphasis> of money. So is $34,000. (It worked if “lot” is emphasized.)</p>
565+<p>• $22,000 is a <emphasis>lot</emphasis> of money. So is $34,000.
566+(It worked if “lot” is emphasized.)</p>
564567<p>• Shoes ($20) and socks ($5).</p>
565568<p>• Escaped <code>$</code>: $73 <emphasis>this should be emphasized</emphasis> 23$.</p>
566569<p>Here’s a LaTeX table:</p>
567570<empty-line />
568−<p>——————————</p>
569−<empty-line />
570571</section>
571572<section>
572573<title>
@@ -600,8 +601,6 @@
600601<p>Plus: +</p>
601602<p>Minus: -</p>
602603<empty-line />
603−<p>——————————</p>
604−<empty-line />
605604</section>
606605<section>
607606<title>
@@ -727,8 +726,6 @@
727726</p>
728727<empty-line />
729728<empty-line />
730−<p>——————————</p>
731−<empty-line />
732729</section>
733730</section>
734731<section>
@@ -739,8 +736,6 @@
739736<image l:href="#image1" l:type="imageType" alt="lalune" title="Voyage dans la Lune" />
740737<p>Here is a movie <image l:href="#image2" l:type="inlineImageType" alt="movie" /> icon.</p>
741738<empty-line />
742−<p>——————————</p>
743−<empty-line />
744739</section>
745740<section>
746741<title>
@@ -750,7 +745,9 @@
750745<sup>[29]</sup>
751746</a> and another.<a l:href="#n30" type="note">
752747<sup>[30]</sup>
753−</a> This should <emphasis>not</emphasis> be a footnote reference, because it contains a space.[^my note] Here is an inline note.<a l:href="#n31" type="note">
748+</a>
749+This should <emphasis>not</emphasis> be a footnote reference, because it
750+contains a space.[^my note] Here is an inline note.<a l:href="#n31" type="note">
754751<sup>[31]</sup>
755752</a>
756753</p>
@@ -989,28 +986,35 @@
989986<title>
990987<p>29</p>
991988</title>
992−<p>Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document.</p>
989+<p>Here is the footnote. It can go anywhere after the footnote
990+reference. It need not be placed at the end of the document.</p>
993991</section>
994992<section id="n30">
995993<title>
996994<p>30</p>
997995</title>
998−<p>Here’s the long note. This one contains multiple blocks.</p>
999−<p>Subsequent blocks are indented to show that they belong to the footnote (as with list items).</p>
996+<p>Here’s the long note. This one contains multiple
997+blocks.</p>
998+<p>Subsequent blocks are indented to show that they belong to the
999+footnote (as with list items).</p>
10001000<empty-line />
10011001<p>
10021002<code> { &lt;code&gt; }</code>
10031003</p>
10041004<empty-line />
1005−<p>If you want, you can indent every line, but you can also be lazy and just indent the first line of each block.</p>
1005+<p>If you want, you can indent every line, but you can also be
1006+lazy and just indent the first line of each block.</p>
10061007</section>
10071008<section id="n31">
10081009<title>
10091010<p>31</p>
10101011</title>
1011−<p>This is <emphasis>easier</emphasis> to type. Inline notes may contain links<a l:href="#l31" type="note">
1012+<p>This
1013+is <emphasis>easier</emphasis> to type. Inline notes may contain
1014+links<a l:href="#l31" type="note">
10121015<sup>[31]</sup>
1013−</a> and <code>]</code> verbatim characters, as well as [bracketed text].</p>
1016+</a> and <code>]</code> verbatim characters,
1017+as well as [bracketed text].</p>
10141018</section>
10151019<section id="n32">
10161020<title>