import {parser} from "../dist/index.js" import {compareTree} from "./compare-tree.js" import {SpecParser} from "./spec.js" const specParser = new SpecParser(parser) function test(name: string, spec: string) { it(name, () => { let {tree, doc} = specParser.parse(spec, name) compareTree(parser.parse(doc), tree) }) } // These are the tests from revision 0.29 of the CommonMark spec, // mechanically translated to the format used here (because their // original format, providing expected HTML output, doesn't cover most // of the aspects of the output that we're interested in), and then eyeballed // to check whether the produced output corresponds to the intent of // the test. describe("CommonMark spec", () => { test("Tabs (example 1)", ` {CB:{cT:foo baz bim}} `) test("Tabs (example 2)", ` {CB:{cT:foo baz bim}} `) test("Tabs (example 3)", ` {CB:{cT:a a } {cT:ὐ a}} `) test("Tabs (example 4)", ` {BL:{LI: {l:-} {P:foo} {P:bar}}} `) test("Tabs (example 5)", ` {BL:{LI:{l:-} {P:foo} {CB:{cT:bar}}}} `) test("Tabs (example 6)", ` {Q:{q:>} {CB:{cT:foo}}} `) test("Tabs (example 7)", ` {BL:{LI:{l:-} {CB:{cT:foo}}}} `) test("Tabs (example 8)", ` {CB:{cT:foo } {cT:bar}} `) test("Tabs (example 9)", ` {BL:{LI: {l:-} {P:foo} {BL:{LI:{l:-} {P:bar} {BL:{LI:{l:-} {P:baz}}}}}}} `) test("Tabs (example 10)", ` {P:# Foo} `) test("Tabs (example 11)", ` {HR:* * * } `) test("Precedence (example 12)", ` {BL:{LI:{l:-} {P:\`one}} {LI:{l:-} {P:two\`}}} `) test("Thematic breaks (example 13)", ` {HR:***} {HR:---} {HR:___} `) test("Thematic breaks (example 14)", ` {P:+++} `) test("Thematic breaks (example 15)", ` {P:===} `) test("Thematic breaks (example 16)", ` {P:-- ** __} `) test("Thematic breaks (example 17)", ` {HR:***} {HR:***} {HR:***} `) test("Thematic breaks (example 18)", ` {CB:{cT:***}} `) test("Thematic breaks (example 19)", ` {P:Foo ***} `) test("Thematic breaks (example 20)", ` {HR:_____________________________________} `) test("Thematic breaks (example 21)", ` {HR:- - -} `) test("Thematic breaks (example 22)", ` {HR:** * ** * ** * **} `) test("Thematic breaks (example 23)", ` {HR:- - - -} `) test("Thematic breaks (example 24)", ` {HR:- - - - } `) test("Thematic breaks (example 25)", ` {P:_ _ _ _ a} {P:a------} {P:---a---} `) test("Thematic breaks (example 26)", ` {P:{Em:{e:*}-{e:*}}} `) test("Thematic breaks (example 27)", ` {BL:{LI:{l:-} {P:foo}}} {HR:***} {BL:{LI:{l:-} {P:bar}}} `) test("Thematic breaks (example 28)", ` {P:Foo} {HR:***} {P:bar} `) test("Thematic breaks (example 29)", ` {SH2:Foo {h:---}} {P:bar} `) test("Thematic breaks (example 30)", ` {BL:{LI:{l:*} {P:Foo}}} {HR:* * *} {BL:{LI:{l:*} {P:Bar}}} `) test("Thematic breaks (example 31)", ` {BL:{LI:{l:-} {P:Foo}} {LI:{l:-} {HR:* * *}}} `) test("ATX headings (example 32)", ` {H1:{h:#} foo} {H2:{h:##} foo} {H3:{h:###} foo} {H4:{h:####} foo} {H5:{h:#####} foo} {H6:{h:######} foo} `) test("ATX headings (example 33)", ` {P:####### foo} `) test("ATX headings (example 34)", ` {P:#5 bolt} {P:#hashtag} `) test("ATX headings (example 35)", ` {P:{Esc:\\#}# foo} `) test("ATX headings (example 36)", ` {H1:{h:#} foo {Em:{e:*}bar{e:*}} {Esc:\\*}baz{Esc:\\*}} `) test("ATX headings (example 37)", ` {H1:{h:#} foo } `) test("ATX headings (example 38)", ` {H3:{h:###} foo} {H2:{h:##} foo} {H1:{h:#} foo} `) test("ATX headings (example 39)", ` {CB:{cT:# foo}} `) test("ATX headings (example 40)", ` {P:foo # bar} `) test("ATX headings (example 41)", ` {H2:{h:##} foo {h:##}} {H3:{h:###} bar {h:###}} `) test("ATX headings (example 42)", ` {H1:{h:#} foo {h:##################################}} {H5:{h:#####} foo {h:##}} `) test("ATX headings (example 43)", ` {H3:{h:###} foo {h:###} } `) test("ATX headings (example 44)", ` {H3:{h:###} foo ### b} `) test("ATX headings (example 45)", ` {H1:{h:#} foo#} `) test("ATX headings (example 46)", ` {H3:{h:###} foo {Esc:\\#}##} {H2:{h:##} foo #{Esc:\\#}#} {H1:{h:#} foo {Esc:\\#}} `) test("ATX headings (example 47)", ` {HR:****} {H2:{h:##} foo} {HR:****} `) test("ATX headings (example 48)", ` {P:Foo bar} {H1:{h:#} baz} {P:Bar foo} `) test("ATX headings (example 49)", ` {H2:{h:##} } {H1:{h:#}} {H3:{h:###} {h:###}} `) test("Setext headings (example 50)", ` {SH1:Foo {Em:{e:*}bar{e:*}} {h:=========}} {SH2:Foo {Em:{e:*}bar{e:*}} {h:---------}} `) test("Setext headings (example 51)", ` {SH1:Foo {Em:{e:*}bar baz{e:*}} {h:====}} `) test("Setext headings (example 52)", ` {SH1:Foo {Em:{e:*}bar baz{e:*}} {h:====}} `) test("Setext headings (example 53)", ` {SH2:Foo {h:-------------------------}} {SH1:Foo {h:=}} `) test("Setext headings (example 54)", ` {SH2:Foo {h:---}} {SH2:Foo {h:-----}} {SH1:Foo {h:===}} `) test("Setext headings (example 55)", ` {CB:{cT:Foo } {cT:--- } {cT:Foo}} {HR:---} `) test("Setext headings (example 56)", ` {SH2:Foo {h:----} } `) test("Setext headings (example 57)", ` {P:Foo ---} `) test("Setext headings (example 58)", ` {P:Foo = =} {P:Foo} {HR:--- -} `) test("Setext headings (example 59)", ` {SH2:Foo {h:-----}} `) test("Setext headings (example 60)", ` {SH2:Foo\\ {h:----}} `) test("Setext headings (example 61)", ` {SH2:\`Foo {h:----}} {P:\`} {SH2:} `) test("Setext headings (example 62)", ` {Q:{q:>} {P:Foo}} {HR:---} `) test("Setext headings (example 63)", ` {Q:{q:>} {P:foo bar ===}} `) test("Setext headings (example 64)", ` {BL:{LI:{l:-} {P:Foo}}} {HR:---} `) test("Setext headings (example 65)", ` {SH2:Foo Bar {h:---}} `) test("Setext headings (example 66)", ` {HR:---} {SH2:Foo {h:---}} {SH2:Bar {h:---}} {P:Baz} `) test("Setext headings (example 67)", ` {P:====} `) test("Setext headings (example 68)", ` {HR:---} {HR:---} `) test("Setext headings (example 69)", ` {BL:{LI:{l:-} {P:foo}}} {HR:-----} `) test("Setext headings (example 70)", ` {CB:{cT:foo}} {HR:---} `) test("Setext headings (example 71)", ` {Q:{q:>} {P:foo}} {HR:-----} `) test("Setext headings (example 72)", ` {SH2:{Esc:\\>} foo {h:------}} `) test("Setext headings (example 73)", ` {P:Foo} {SH2:bar {h:---}} {P:baz} `) test("Setext headings (example 74)", ` {P:Foo bar} {HR:---} {P:baz} `) test("Setext headings (example 75)", ` {P:Foo bar} {HR:* * *} {P:baz} `) test("Setext headings (example 76)", ` {P:Foo bar {Esc:\\-}-- baz} `) test("Indented code blocks (example 77)", ` {CB:{cT:a simple } {cT: indented code block}} `) test("Indented code blocks (example 78)", ` {BL:{LI: {l:-} {P:foo} {P:bar}}} `) test("Indented code blocks (example 79)", ` {OL:{LI:{l:1.} {P:foo} {BL:{LI:{l:-} {P:bar}}}}} `) test("Indented code blocks (example 80)", ` {CB:{cT: } {cT:*hi* } {cT:- one}} `) test("Indented code blocks (example 81)", ` {CB:{cT:chunk1 } {cT:chunk2 } {cT: } {cT: } {cT: } {cT:chunk3}} `) test("Indented code blocks (example 82)", ` {CB:{cT:chunk1 } {cT: } {cT: chunk2}} `) test("Indented code blocks (example 83)", ` {P:Foo bar} `) test("Indented code blocks (example 84)", ` {CB:{cT:foo}} {P:bar} `) test("Indented code blocks (example 85)", ` {H1:{h:#} Heading} {CB:{cT:foo}} {SH2:Heading {h:------}} {CB:{cT:foo}} {HR:----} `) test("Indented code blocks (example 86)", ` {CB:{cT: foo } {cT:bar}} `) test("Indented code blocks (example 87)", ` {CB:{cT:foo}} `) test("Indented code blocks (example 88)", ` {CB:{cT:foo }} `) test("Fenced code blocks (example 89)", ` {FC:{c:\`\`\`} {cT:< >} {c:\`\`\`}} `) test("Fenced code blocks (example 90)", ` {FC:{c:~~~} {cT:< >} {c:~~~}} `) test("Fenced code blocks (example 91)", ` {P:{C:{c:\`\`} foo {c:\`\`}}} `) test("Fenced code blocks (example 92)", ` {FC:{c:\`\`\`} {cT:aaa ~~~} {c:\`\`\`}} `) test("Fenced code blocks (example 93)", ` {FC:{c:~~~} {cT:aaa \`\`\`} {c:~~~}} `) test("Fenced code blocks (example 94)", ` {FC:{c:\`\`\`\`} {cT:aaa \`\`\`} {c:\`\`\`\`\`\`}} `) test("Fenced code blocks (example 95)", ` {FC:{c:~~~~} {cT:aaa ~~~} {c:~~~~}} `) test("Fenced code blocks (example 96)", ` {FC:{c:\`\`\`} }`) test("Fenced code blocks (example 97)", ` {FC:{c:\`\`\`\`\`} {cT: \`\`\` aaa }}`) test("Fenced code blocks (example 98)", ` {Q:{q:>} {FC:{c:\`\`\`} {q:>} {cT:aaa}}} {P:bbb} `) test("Fenced code blocks (example 99)", ` {FC:{c:\`\`\`} {cT: } {c:\`\`\`}} `) test("Fenced code blocks (example 100)", ` {FC:{c:\`\`\`} {c:\`\`\`}} `) test("Fenced code blocks (example 101)", ` {FC:{c:\`\`\`} {cT: aaa aaa} {c:\`\`\`}} `) test("Fenced code blocks (example 102)", ` {FC:{c:\`\`\`} {cT:aaa aaa aaa} {c:\`\`\`}} `) test("Fenced code blocks (example 103)", ` {FC:{c:\`\`\`} {cT: aaa aaa aaa} {c:\`\`\`}} `) test("Fenced code blocks (example 104)", ` {CB:{cT:\`\`\` } {cT:aaa } {cT:\`\`\`}} `) test("Fenced code blocks (example 105)", ` {FC:{c:\`\`\`} {cT:aaa} {c:\`\`\`}} `) test("Fenced code blocks (example 106)", ` {FC:{c:\`\`\`} {cT:aaa} {c:\`\`\`}} `) test("Fenced code blocks (example 107)", ` {FC:{c:\`\`\`} {cT:aaa \`\`\` }}`) test("Fenced code blocks (example 108)", ` {P:{C:{c:\`\`\`} {c:\`\`\`}} aaa} `) test("Fenced code blocks (example 109)", ` {FC:{c:~~~~~~} {cT:aaa ~~~ ~~ }}`) test("Fenced code blocks (example 110)", ` {P:foo} {FC:{c:\`\`\`} {cT:bar} {c:\`\`\`}} {P:baz} `) test("Fenced code blocks (example 111)", ` {SH2:foo {h:---}} {FC:{c:~~~} {cT:bar} {c:~~~}} {H1:{h:#} baz} `) test("Fenced code blocks (example 112)", ` {FC:{c:\`\`\`}{cI:ruby} {cT:def foo(x) return 3 end} {c:\`\`\`}} `) test("Fenced code blocks (example 113)", ` {FC:{c:~~~~} {cI:ruby startline=3 $%@#$} {cT:def foo(x) return 3 end} {c:~~~~~~~}} `) test("Fenced code blocks (example 114)", ` {FC:{c:\`\`\`\`}{cI:;} {c:\`\`\`\`}} `) test("Fenced code blocks (example 115)", ` {P:{C:{c:\`\`\`} aa {c:\`\`\`}} foo} `) test("Fenced code blocks (example 116)", ` {FC:{c:~~~} {cI:aa \`\`\` ~~~} {cT:foo} {c:~~~}} `) test("Fenced code blocks (example 117)", ` {FC:{c:\`\`\`} {cT:\`\`\` aaa} {c:\`\`\`}} `) test("HTML blocks (example 118)", ` {HB:
**Hello**,}

{P:{Em:{e:_}world{e:_}}.
{HT:
}} {HB:
} `) test("HTML blocks (example 119)", ` {HB:
hi
} {P:okay.} `) test("HTML blocks (example 120)", ` {HB:
*hello* } `) test("HTML blocks (example 121)", ` {HB:
*foo*} `) test("HTML blocks (example 122)", ` {HB:
} {P:{Em:{e:*}Markdown{e:*}}} {HB:
} `) test("HTML blocks (example 123)", ` {HB:
} `) test("HTML blocks (example 124)", ` {HB:
} `) test("HTML blocks (example 125)", ` {HB:
*foo*} {P:{Em:{e:*}bar{e:*}}} `) test("HTML blocks (example 126)", ` {HB:
*foo*
} `) test("HTML blocks (example 130)", ` {HB:
foo
} `) test("HTML blocks (example 131)", ` {HB:
\`\`\` c int x = 33; x\`\`\`} `) test("HTML blocks (example 132)", ` {HB: *bar* } `) test("HTML blocks (example 133)", ` {HB: *bar* } `) test("HTML blocks (example 134)", ` {HB: *bar* } `) test("HTML blocks (example 135)", ` {HB: *bar*} `) test("HTML blocks (example 136)", ` {HB: *foo* } `) test("HTML blocks (example 137)", ` {HB:} {P:{Em:{e:*}foo{e:*}}} {HB:} `) test("HTML blocks (example 138)", ` {P:{HT:}{Em:{e:*}foo{e:*}}{HT:}} `) test("HTML blocks (example 139)", ` {HB:

import Text.HTML.TagSoup

main :: IO ()
main = print $ parseTags tags
} {P:okay} `) test("HTML blocks (example 140)", ` {HB:} {P:okay} `) test("HTML blocks (example 141)", ` {HB:} {P:okay} `) test("HTML blocks (example 142)", ` {HB:} {P:{Em:{e:*}foo{e:*}}} `) test("HTML blocks (example 146)", ` {CMB:*bar*} {P:{Em:{e:*}baz{e:*}}} `) test("HTML blocks (example 147)", ` {HB:1. *bar*} `) test("HTML blocks (example 148)", ` {CMB:} {P:okay} `) test("HTML blocks (example 149)", ` {PI:'; ?>} {P:okay} `) test("HTML blocks (example 150)", ` {HB:} `) test("HTML blocks (example 151)", ` {HB:} {P:okay} `) test("HTML blocks (example 152)", ` {CMB:} {CB:{cT:}} `) test("HTML blocks (example 153)", ` {HB:
} {CB:{cT:
}} `) test("HTML blocks (example 154)", ` {P:Foo} {HB:
bar
} `) test("HTML blocks (example 155)", ` {HB:
bar
*foo*} `) test("HTML blocks (example 156)", ` {P:Foo {HT:} baz} `) test("HTML blocks (example 157)", ` {HB:
} {P:{Em:{e:*}Emphasized{e:*}} text.} {HB:
} `) test("HTML blocks (example 158)", ` {HB:
*Emphasized* text.
} `) test("HTML blocks (example 159)", ` {HB:} {HB:} {HB:} {HB:} {HB:
Hi
} `) test("HTML blocks (example 160)", ` {HB:} {HB:} {CB:{cT:}} {HB:} {HB:
} {cT: Hi } {cT:
} `) test("Link reference definitions (example 161)", ` {LR:{LL:[foo]}{L::} {URL:/url} {LT:"title"}} {P:{Ln:{L:[}foo{L:]}}} `) test("Link reference definitions (example 162)", ` {LR:{LL:[foo]}{L::} {URL:/url} {LT:'the title'} } {P:{Ln:{L:[}foo{L:]}}} `) test("Link reference definitions (example 163)", ` {LR:{LL:[Foo*bar\\]]}{L::}{URL:my_(url)} {LT:'title (with parens)'}} {P:{Ln:{L:[}Foo*bar{Esc:\\]}{L:]}}} `) test("Link reference definitions (example 164)", ` {LR:{LL:[Foo bar]}{L::} {URL:} {LT:'title'}} {P:{Ln:{L:[}Foo bar{L:]}}} `) test("Link reference definitions (example 165)", ` {LR:{LL:[foo]}{L::} {URL:/url} {LT:' title line1 line2 '}} {P:{Ln:{L:[}foo{L:]}}} `) test("Link reference definitions (example 166)", ` {P:{Ln:{L:[}foo{L:]}}: /url 'title} {P:with blank line'} {P:{Ln:{L:[}foo{L:]}}} `) test("Link reference definitions (example 167)", ` {LR:{LL:[foo]}{L::} {URL:/url}} {P:{Ln:{L:[}foo{L:]}}} `) test("Link reference definitions (example 168)", ` {P:{Ln:{L:[}foo{L:]}}:} {P:{Ln:{L:[}foo{L:]}}} `) test("Link reference definitions (example 169)", ` {LR:{LL:[foo]}{L::} {URL:<>}} {P:{Ln:{L:[}foo{L:]}}} `) test("Link reference definitions (example 170)", ` {P:{Ln:{L:[}foo{L:]}}: {HT:}(baz)} {P:{Ln:{L:[}foo{L:]}}} `) test("Link reference definitions (example 171)", ` {LR:{LL:[foo]}{L::} {URL:/url\`bar\`*baz} {LT:"foo\\"bar\\baz"}} {P:{Ln:{L:[}foo{L:]}}} `) test("Link reference definitions (example 172)", ` {P:{Ln:{L:[}foo{L:]}}} {LR:{LL:[foo]}{L::} {URL:url}} `) test("Link reference definitions (example 173)", ` {P:{Ln:{L:[}foo{L:]}}} {LR:{LL:[foo]}{L::} {URL:first}} {LR:{LL:[foo]}{L::} {URL:second}} `) test("Link reference definitions (example 174)", ` {LR:{LL:[FOO]}{L::} {URL:/url}} {P:{Ln:{L:[}Foo{L:]}}} `) test("Link reference definitions (example 175)", ` {LR:{LL:[ΑΓΩ]}{L::} {URL:/φου}} {P:{Ln:{L:[}αγω{L:]}}} `) test("Link reference definitions (example 176)", ` {LR:{LL:[foo]}{L::} {URL:/url}} `) test("Link reference definitions (example 177)", ` {LR:{LL:[ foo ]}{L::} {URL:/url}} {P:bar} `) test("Link reference definitions (example 178)", ` {P:{Ln:{L:[}foo{L:]}}: /url "title" ok} `) test("Link reference definitions (example 179)", ` {LR:{LL:[foo]}{L::} {URL:/url}} {P:"title" ok} `) test("Link reference definitions (example 180)", ` {CB:{cT:[foo]: /url "title"}} {P:{Ln:{L:[}foo{L:]}}} `) test("Link reference definitions (example 181)", ` {FC:{c:\`\`\`} {cT:[foo]: /url} {c:\`\`\`}} {P:{Ln:{L:[}foo{L:]}}} `) test("Link reference definitions (example 182)", ` {P:Foo {Ln:{L:[}bar{L:]}}: /baz} {P:{Ln:{L:[}bar{L:]}}} `) test("Link reference definitions (example 183)", ` {H1:{h:#} {Ln:{L:[}Foo{L:]}}} {LR:{LL:[foo]}{L::} {URL:/url}} {Q:{q:>} {P:bar}} `) test("Link reference definitions (example 184)", ` {LR:{LL:[foo]}{L::} {URL:/url}} {SH1:bar {h:===}} {P:{Ln:{L:[}foo{L:]}}} `) test("Link reference definitions (example 185)", ` {LR:{LL:[foo]}{L::} {URL:/url}} {P:=== {Ln:{L:[}foo{L:]}}} `) test("Link reference definitions (example 186)", ` {LR:{LL:[foo]}{L::} {URL:/foo-url} {LT:"foo"}} {LR:{LL:[bar]}{L::} {URL:/bar-url} {LT:"bar"}} {LR:{LL:[baz]}{L::} {URL:/baz-url}} {P:{Ln:{L:[}foo{L:]}}, {Ln:{L:[}bar{L:]}}, {Ln:{L:[}baz{L:]}}} `) test("Link reference definitions (example 187)", ` {P:{Ln:{L:[}foo{L:]}}} {Q:{q:>} {LR:{LL:[foo]}{L::} {URL:/url}}} `) test("Link reference definitions (example 188)", ` {LR:{LL:[foo]}{L::} {URL:/url}} `) test("Paragraphs (example 189)", ` {P:aaa} {P:bbb} `) test("Paragraphs (example 190)", ` {P:aaa bbb} {P:ccc ddd} `) test("Paragraphs (example 191)", ` {P:aaa} {P:bbb} `) test("Paragraphs (example 192)", ` {P:aaa bbb} `) test("Paragraphs (example 193)", ` {P:aaa bbb ccc} `) test("Paragraphs (example 194)", ` {P:aaa bbb} `) test("Paragraphs (example 195)", ` {CB:{cT:aaa}} {P:bbb} `) test("Paragraphs (example 196)", ` {P:aaa{BR: }bbb } `) test("Blank lines (example 197)", ` {P:aaa} {H1:{h:#} aaa} `) test("Block quotes (example 198)", ` {Q:{q:>} {H1:{h:#} Foo} {q:>} {P:bar {q:>} baz}} `) test("Block quotes (example 199)", ` {Q:{q:>}{H1:{h:#} Foo} {q:>}{P:bar {q:>} baz}} `) test("Block quotes (example 200)", ` {Q:{q:>} {H1:{h:#} Foo} {q:>} {P:bar {q:>} baz}} `) test("Block quotes (example 201)", ` {CB:{cT:> # Foo } {cT:> bar } {cT:> baz}} `) test("Block quotes (example 202)", ` {Q:{q:>} {H1:{h:#} Foo} {q:>} {P:bar baz}} `) test("Block quotes (example 203)", ` {Q:{q:>} {P:bar baz {q:>} foo}} `) test("Block quotes (example 204)", ` {Q:{q:>} {P:foo}} {HR:---} `) test("Block quotes (example 205)", ` {Q:{q:>} {BL:{LI:{l:-} {P:foo}}}} {BL:{LI:{l:-} {P:bar}}} `) test("Block quotes (example 206)", ` {Q:{q:>} {CB:{cT:foo}}} {CB:{cT:bar}} `) test("Block quotes (example 207)", ` {Q:{q:>} {FC:{c:\`\`\`}}} {P:foo} {FC:{c:\`\`\`} }`) test("Block quotes (example 208)", ` {Q:{q:>} {P:foo - bar}} `) test("Block quotes (example 209)", ` {Q:{q:>}{P:}} `) test("Block quotes (example 210)", ` {Q:{q:>}{P:} {q:>} {q:>} } `) test("Block quotes (example 211)", ` {Q:{q:>}{P: {q:>} foo} {q:>} } `) test("Block quotes (example 212)", ` {Q:{q:>} {P:foo}} {Q:{q:>} {P:bar}} `) test("Block quotes (example 213)", ` {Q:{q:>} {P:foo {q:>} bar}} `) test("Block quotes (example 214)", ` {Q:{q:>} {P:foo} {q:>} {q:>} {P:bar}} `) test("Block quotes (example 215)", ` {P:foo} {Q:{q:>} {P:bar}} `) test("Block quotes (example 216)", ` {Q:{q:>} {P:aaa}} {HR:***} {Q:{q:>} {P:bbb}} `) test("Block quotes (example 217)", ` {Q:{q:>} {P:bar baz}} `) test("Block quotes (example 218)", ` {Q:{q:>} {P:bar}} {P:baz} `) test("Block quotes (example 219)", ` {Q:{q:>} {P:bar} {q:>}} {P:baz} `) test("Block quotes (example 220)", ` {Q:{q:>} {Q:{q:>} {Q:{q:>} {P:foo bar}}}} `) test("Block quotes (example 221)", ` {Q:{q:>}{Q:{q:>}{Q:{q:>} {P:foo {q:>} bar {q:>}{q:>}baz}}}} `) test("Block quotes (example 222)", ` {Q:{q:>} {CB:{cT:code}}} {Q:{q:>} {P:not code}} `) test("List items (example 223)", ` {P:A paragraph with two lines.} {CB:{cT:indented code}} {Q:{q:>} {P:A block quote.}} `) test("List items (example 224)", ` {OL:{LI:{l:1.} {P:A paragraph with two lines.} {CB:{cT:indented code}} {Q:{q:>} {P:A block quote.}}}} `) test("List items (example 225)", ` {BL:{LI:{l:-} {P:one}}} {P:two} `) test("List items (example 226)", ` {BL:{LI:{l:-} {P:one} {P:two}}} `) test("List items (example 227)", ` {BL:{LI: {l:-} {P:one}}} {CB:{cT: two}} `) test("List items (example 228)", ` {BL:{LI: {l:-} {P:one} {P:two}}} `) test("List items (example 229)", ` {Q:{q:>} {Q:{q:>} {OL:{LI:{l:1.} {P:one} {q:>}{q:>} {q:>}{q:>} {P:two}}}}} `) test("List items (example 230)", ` {Q:{q:>}{Q:{q:>}{BL:{LI:{l:-} {P:one} {q:>}{q:>}}} {q:>} {q:>} {P:two}}} `) test("List items (example 231)", ` {P:-one} {P:2.two} `) test("List items (example 232)", ` {BL:{LI:{l:-} {P:foo} {P:bar}}} `) test("List items (example 233)", ` {OL:{LI:{l:1.} {P:foo} {FC:{c:\`\`\`} {cT:bar} {c:\`\`\`}} {P:baz} {Q:{q:>} {P:bam}}}} `) test("List items (example 234)", ` {BL:{LI:{l:-} {P:Foo} {CB:{cT:bar } {cT:baz}}}} `) test("List items (example 235)", ` {OL:{LI:{l:123456789.} {P:ok}}} `) test("List items (example 236)", ` {P:1234567890. not ok} `) test("List items (example 237)", ` {OL:{LI:{l:0.} {P:ok}}} `) test("List items (example 238)", ` {OL:{LI:{l:003.} {P:ok}}} `) test("List items (example 239)", ` {P:-1. not ok} `) test("List items (example 240)", ` {BL:{LI:{l:-} {P:foo} {CB:{cT:bar}}}} `) test("List items (example 241)", ` {OL:{LI: {l:10.} {P:foo} {CB:{cT:bar}}}} `) test("List items (example 242)", ` {CB:{cT:indented code}} {P:paragraph} {CB:{cT:more code}} `) test("List items (example 243)", ` {OL:{LI:{l:1.} {CB:{cT:indented code}} {P:paragraph} {CB:{cT:more code}}}} `) test("List items (example 244)", ` {OL:{LI:{l:1.} {CB:{cT: indented code}} {P:paragraph} {CB:{cT:more code}}}} `) test("List items (example 245)", ` {P:foo} {P:bar} `) test("List items (example 246)", ` {BL:{LI:{l:-} {P:foo}}} {P:bar} `) test("List items (example 247)", ` {BL:{LI:{l:-} {P:foo} {P:bar}}} `) test("List items (example 248)", ` {BL:{LI:{l:-}{P: foo}} {LI:{l:-}{P:} {FC:{c:\`\`\`} {cT: bar} {c:\`\`\`}}} {LI:{l:-}{P: baz}}} `) test("List items (example 249)", ` {BL:{LI:{l:-} {P: foo}}} `) test("List items (example 250)", ` {BL:{LI:{l:-}{P:} {P:foo}}} `) test("List items (example 251)", ` {BL:{LI:{l:-} {P:foo}} {LI:{l:-}{P:}} {LI:{l:-} {P:bar}}} `) test("List items (example 252)", ` {BL:{LI:{l:-} {P:foo}} {LI:{l:-} {P:}} {LI:{l:-} {P:bar}}} `) test("List items (example 253)", ` {OL:{LI:{l:1.} {P:foo}} {LI:{l:2.}{P:}} {LI:{l:3.} {P:bar}}} `) test("List items (example 254)", ` {BL:{LI:{l:*}{P:}}} `) test("List items (example 255)", ` {P:foo *} {P:foo 1.} `) test("List items (example 256)", ` {OL:{LI: {l:1.} {P:A paragraph with two lines.} {CB:{cT:indented code}} {Q:{q:>} {P:A block quote.}}}} `) test("List items (example 257)", ` {OL:{LI: {l:1.} {P:A paragraph with two lines.} {CB:{cT:indented code}} {Q:{q:>} {P:A block quote.}}}} `) test("List items (example 258)", ` {OL:{LI: {l:1.} {P:A paragraph with two lines.} {CB:{cT:indented code}} {Q:{q:>} {P:A block quote.}}}} `) test("List items (example 259)", ` {CB:{cT:1. A paragraph } {cT: with two lines. } {cT: indented code } {cT: > A block quote.}} `) test("List items (example 260)", ` {OL:{LI: {l:1.} {P:A paragraph with two lines.} {CB:{cT:indented code}} {Q:{q:>} {P:A block quote.}}}} `) test("List items (example 261)", ` {OL:{LI: {l:1.} {P:A paragraph with two lines.}}} `) test("List items (example 262)", ` {Q:{q:>} {OL:{LI:{l:1.} {Q:{q:>} {P:Blockquote continued here.}}}}} `) test("List items (example 263)", ` {Q:{q:>} {OL:{LI:{l:1.} {Q:{q:>} {P:Blockquote {q:>} continued here.}}}}} `) test("List items (example 264)", ` {BL:{LI:{l:-} {P:foo} {BL:{LI:{l:-} {P:bar} {BL:{LI:{l:-} {P:baz} {BL:{LI:{l:-} {P:boo}}}}}}}}} `) test("List items (example 265)", ` {BL:{LI:{l:-} {P:foo}} {LI: {l:-} {P:bar}} {LI: {l:-} {P:baz}} {LI: {l:-} {P:boo}}} `) test("List items (example 266)", ` {OL:{LI:{l:10)} {P:foo} {BL:{LI:{l:-} {P:bar}}}}} `) test("List items (example 267)", ` {OL:{LI:{l:10)} {P:foo}}} {BL:{LI: {l:-} {P:bar}}} `) test("List items (example 268)", ` {BL:{LI:{l:-} {BL:{LI:{l:-} {P:foo}}}}} `) test("List items (example 269)", ` {OL:{LI:{l:1.} {BL:{LI:{l:-} {OL:{LI:{l:2.} {P:foo}}}}}}} `) test("List items (example 270)", ` {BL:{LI:{l:-} {H1:{h:#} Foo}} {LI:{l:-} {SH2:Bar {h:---}} {P:baz}}} `) test("Lists (example 271)", ` {BL:{LI:{l:-} {P:foo}} {LI:{l:-} {P:bar}}} {BL:{LI:{l:+} {P:baz}}} `) test("Lists (example 272)", ` {OL:{LI:{l:1.} {P:foo}} {LI:{l:2.} {P:bar}}} {OL:{LI:{l:3)} {P:baz}}} `) test("Lists (example 273)", ` {P:Foo} {BL:{LI:{l:-} {P:bar}} {LI:{l:-} {P:baz}}} `) test("Lists (example 274)", ` {P:The number of windows in my house is 14. The number of doors is 6.} `) test("Lists (example 275)", ` {P:The number of windows in my house is} {OL:{LI:{l:1.} {P:The number of doors is 6.}}} `) test("Lists (example 276)", ` {BL:{LI:{l:-} {P:foo}} {LI:{l:-} {P:bar}} {LI:{l:-} {P:baz}}} `) test("Lists (example 277)", ` {BL:{LI:{l:-} {P:foo} {BL:{LI:{l:-} {P:bar} {BL:{LI:{l:-} {P:baz} {P:bim}}}}}}} `) test("Lists (example 278)", ` {BL:{LI:{l:-} {P:foo}} {LI:{l:-} {P:bar}}} {CMB:} {BL:{LI:{l:-} {P:baz}} {LI:{l:-} {P:bim}}} `) test("Lists (example 279)", ` {BL:{LI:{l:-} {P:foo} {P:notcode}} {LI:{l:-} {P:foo}}} {CMB:} {CB:{cT:code}} `) test("Lists (example 280)", ` {BL:{LI:{l:-} {P:a}} {LI: {l:-} {P:b}} {LI: {l:-} {P:c}} {LI: {l:-} {P:d}} {LI: {l:-} {P:e}} {LI: {l:-} {P:f}} {LI:{l:-} {P:g}}} `) test("Lists (example 281)", ` {OL:{LI:{l:1.} {P:a}} {LI: {l:2.} {P:b}} {LI: {l:3.} {P:c}}} `) test("Lists (example 282)", ` {BL:{LI:{l:-} {P:a}} {LI: {l:-} {P:b}} {LI: {l:-} {P:c}} {LI: {l:-} {P:d - e}}} `) test("Lists (example 283)", ` {OL:{LI:{l:1.} {P:a}} {LI: {l:2.} {P:b}}} {CB:{cT:3. c}} `) test("Lists (example 284)", ` {BL:{LI:{l:-} {P:a}} {LI:{l:-} {P:b}} {LI:{l:-} {P:c}}} `) test("Lists (example 285)", ` {BL:{LI:{l:*} {P:a}} {LI:{l:*}{P:}} {LI:{l:*} {P:c}}} `) test("Lists (example 286)", ` {BL:{LI:{l:-} {P:a}} {LI:{l:-} {P:b} {P:c}} {LI:{l:-} {P:d}}} `) test("Lists (example 287)", ` {BL:{LI:{l:-} {P:a}} {LI:{l:-} {P:b} {LR:{LL:[ref]}{L::} {URL:/url}}} {LI:{l:-} {P:d}}} `) test("Lists (example 288)", ` {BL:{LI:{l:-} {P:a}} {LI:{l:-} {FC:{c:\`\`\`} {cT:b } {c:\`\`\`}}} {LI:{l:-} {P:c}}} `) test("Lists (example 289)", ` {BL:{LI:{l:-} {P:a} {BL:{LI:{l:-} {P:b} {P:c}}}} {LI:{l:-} {P:d}}} `) test("Lists (example 290)", ` {BL:{LI:{l:*} {P:a} {Q:{q:>} {P:b} {q:>}}} {LI:{l:*} {P:c}}} `) test("Lists (example 291)", ` {BL:{LI:{l:-} {P:a} {Q:{q:>} {P:b}} {FC:{c:\`\`\`} {cT:c} {c:\`\`\`}}} {LI:{l:-} {P:d}}} `) test("Lists (example 292)", ` {BL:{LI:{l:-} {P:a}}} `) test("Lists (example 293)", ` {BL:{LI:{l:-} {P:a} {BL:{LI:{l:-} {P:b}}}}} `) test("Lists (example 294)", ` {OL:{LI:{l:1.} {FC:{c:\`\`\`} {cT:foo} {c:\`\`\`}} {P:bar}}} `) test("Lists (example 295)", ` {BL:{LI:{l:*} {P:foo} {BL:{LI:{l:*} {P:bar}}} {P:baz}}} `) test("Lists (example 296)", ` {BL:{LI:{l:-} {P:a} {BL:{LI:{l:-} {P:b}} {LI:{l:-} {P:c}}}} {LI:{l:-} {P:d} {BL:{LI:{l:-} {P:e}} {LI:{l:-} {P:f}}}}} `) test("Backslash escapes (example 297)", ` {P:{Esc:\\!}{Esc:\\"}{Esc:\\#}{Esc:\\$}{Esc:\\%}{Esc:\\&}{Esc:\\'}{Esc:\\(}{Esc:\\)}{Esc:\\*}{Esc:\\+}{Esc:\\,}{Esc:\\-}{Esc:\\.}{Esc:\\/}{Esc:\\:}{Esc:\\;}{Esc:\\<}{Esc:\\=}{Esc:\\>}{Esc:\\?}{Esc:\\@}{Esc:\\[}{Esc:\\\\}{Esc:\\]}{Esc:\\^}{Esc:\\_}{Esc:\\\`}{Esc:\\|}{Esc:\\~}} `) test("Backslash escapes (example 299)", ` {P:\\ \\A\\a\\ \\3\\φ\\«} `) test("Backslash escapes (example 300)", ` {P:{Esc:\\*}not emphasized* {Esc:\\<}br/> not a tag {Esc:\\[}not a link](/foo) {Esc:\\\`}not code\` 1{Esc:\\.} not a list {Esc:\\*} not a list {Esc:\\#} not a heading {Esc:\\[}foo]: /url "not a reference" {Esc:\\&}ouml; not a character entity} `) test("Backslash escapes (example 301)", ` {P:{Esc:\\\\}{Em:{e:*}emphasis{e:*}}} `) test("Backslash escapes (example 302)", ` {P:foo{BR:\\ }bar} `) test("Backslash escapes (example 303)", ` {P:{C:{c:\`\`} \\[\\\` {c:\`\`}}} `) test("Backslash escapes (example 304)", ` {CB:{cT:\\[\\]}} `) test("Backslash escapes (example 305)", ` {FC:{c:~~~} {cT:\\[\\]} {c:~~~}} `) test("Backslash escapes (example 306)", ` {P:{Al:{L:<}{URL:http://example.com?find=\\*}{L:>}}} `) test("Backslash escapes (example 307)", ` {HB:
} `) test("Backslash escapes (example 308)", ` {P:{Ln:{L:[}foo{L:]}{L:(}{URL:/bar\\*} {LT:"ti\\*tle"}{L:)}}} `) test("Backslash escapes (example 309)", ` {P:{Ln:{L:[}foo{L:]}}} {LR:{LL:[foo]}{L::} {URL:/bar\\*} {LT:"ti\\*tle"}} `) test("Backslash escapes (example 310)", ` {FC:{c:\`\`\`} {cI:foo\\+bar} {cT:foo} {c:\`\`\`}} `) test("Inlines (example 298)", ` {P:{C:{c:\`}hi{c:\`}}lo\`} `) test("Entity and numeric character references (example 311)", ` {P:{Ent: } {Ent:&} {Ent:©} {Ent:Æ} {Ent:Ď} {Ent:¾} {Ent:ℋ} {Ent:ⅆ} {Ent:∲} {Ent:≧̸}} `) test("Entity and numeric character references (example 312)", ` {P:{Ent:#} {Ent:Ӓ} {Ent:Ϡ} {Ent:�}} `) test("Entity and numeric character references (example 313)", ` {P:{Ent:"} {Ent:ആ} {Ent:ಫ}} `) // Our implementation doesn't check for invalid entity names test("Entity and numeric character references (example 314)", ` {P:  {Ent:&x;} &#; &#x; {Ent:�} &#abcdef0; {Ent:&ThisIsNotDefined;} &hi?;} `) test("Entity and numeric character references (example 315)", ` {P:©} `) // Again, not checking for made-up entity names. test("Entity and numeric character references (example 316)", ` {P:{Ent:&MadeUpEntity;}} `) test("Entity and numeric character references (example 317)", ` {HB:} `) test("Entity and numeric character references (example 318)", ` {P:{Ln:{L:[}foo{L:]}{L:(}{URL:/föö} {LT:"föö"}{L:)}}} `) test("Entity and numeric character references (example 319)", ` {P:{Ln:{L:[}foo{L:]}}} {LR:{LL:[foo]}{L::} {URL:/föö} {LT:"föö"}} `) test("Entity and numeric character references (example 320)", ` {FC:{c:\`\`\`} {cI:föö} {cT:foo} {c:\`\`\`}} `) test("Entity and numeric character references (example 321)", ` {P:{C:{c:\`}föö{c:\`}}} `) test("Entity and numeric character references (example 322)", ` {CB:{cT:föfö}} `) test("Entity and numeric character references (example 323)", ` {P:{Ent:*}foo{Ent:*} {Em:{e:*}foo{e:*}}} `) test("Entity and numeric character references (example 324)", ` {P:{Ent:*} foo} {BL:{LI:{l:*} {P:foo}}} `) test("Entity and numeric character references (example 325)", ` {P:foo{Ent: }{Ent: }bar} `) test("Entity and numeric character references (example 326)", ` {P:{Ent: }foo} `) test("Entity and numeric character references (example 327)", ` {P:{Ln:{L:[}a{L:]}}(url {Ent:"}tit{Ent:"})} `) test("Code spans (example 328)", ` {P:{C:{c:\`}foo{c:\`}}} `) test("Code spans (example 329)", ` {P:{C:{c:\`\`} foo \` bar {c:\`\`}}} `) test("Code spans (example 330)", ` {P:{C:{c:\`} \`\` {c:\`}}} `) test("Code spans (example 331)", ` {P:{C:{c:\`} \`\` {c:\`}}} `) test("Code spans (example 332)", ` {P:{C:{c:\`} a{c:\`}}} `) test("Code spans (example 333)", ` {P:{C:{c:\`} b {c:\`}}} `) test("Code spans (example 334)", ` {P:{C:{c:\`} {c:\`}} {C:{c:\`} {c:\`}}} `) test("Code spans (example 335)", ` {P:{C:{c:\`\`} foo bar baz {c:\`\`}}} `) test("Code spans (example 336)", ` {P:{C:{c:\`\`} foo {c:\`\`}}} `) test("Code spans (example 337)", ` {P:{C:{c:\`}foo bar baz{c:\`}}} `) test("Code spans (example 338)", ` {P:{C:{c:\`}foo\\{c:\`}}bar\`} `) test("Code spans (example 339)", ` {P:{C:{c:\`\`}foo\`bar{c:\`\`}}} `) test("Code spans (example 340)", ` {P:{C:{c:\`} foo \`\` bar {c:\`}}} `) test("Code spans (example 341)", ` {P:*foo{C:{c:\`}*{c:\`}}} `) test("Code spans (example 342)", ` {P:[not a {C:{c:\`}link](/foo{c:\`}})} `) test("Code spans (example 343)", ` {P:{C:{c:\`}\`} `) test("Code spans (example 344)", ` {P:{HT:}\`} `) test("Code spans (example 345)", ` {P:{C:{c:\`}\`} `) test("Code spans (example 346)", ` {P:{Al:{L:<}{URL:http://foo.bar.\`baz}{L:>}}\`} `) test("Code spans (example 347)", ` {P:\`\`\`foo\`\`} `) test("Code spans (example 348)", ` {P:\`foo} `) test("Code spans (example 349)", ` {P:\`foo{C:{c:\`\`}bar{c:\`\`}}} `) test("Emphasis and strong emphasis (example 350)", ` {P:{Em:{e:*}foo bar{e:*}}} `) test("Emphasis and strong emphasis (example 351)", ` {P:a * foo bar*} `) test("Emphasis and strong emphasis (example 352)", ` {P:a*"foo"*} `) test("Emphasis and strong emphasis (example 353)", ` {P:* a *} `) test("Emphasis and strong emphasis (example 354)", ` {P:foo{Em:{e:*}bar{e:*}}} `) test("Emphasis and strong emphasis (example 355)", ` {P:5{Em:{e:*}6{e:*}}78} `) test("Emphasis and strong emphasis (example 356)", ` {P:{Em:{e:_}foo bar{e:_}}} `) test("Emphasis and strong emphasis (example 357)", ` {P:_ foo bar_} `) test("Emphasis and strong emphasis (example 358)", ` {P:a_"foo"_} `) test("Emphasis and strong emphasis (example 359)", ` {P:foo_bar_} `) test("Emphasis and strong emphasis (example 360)", ` {P:5_6_78} `) test("Emphasis and strong emphasis (example 361)", ` {P:пристаням_стремятся_} `) test("Emphasis and strong emphasis (example 362)", ` {P:aa_"bb"_cc} `) test("Emphasis and strong emphasis (example 363)", ` {P:foo-{Em:{e:_}(bar){e:_}}} `) test("Emphasis and strong emphasis (example 364)", ` {P:_foo*} `) test("Emphasis and strong emphasis (example 365)", ` {P:*foo bar *} `) test("Emphasis and strong emphasis (example 366)", ` {P:*foo bar *} `) test("Emphasis and strong emphasis (example 367)", ` {P:*(*foo)} `) test("Emphasis and strong emphasis (example 368)", ` {P:{Em:{e:*}({Em:{e:*}foo{e:*}}){e:*}}} `) test("Emphasis and strong emphasis (example 369)", ` {P:{Em:{e:*}foo{e:*}}bar} `) test("Emphasis and strong emphasis (example 370)", ` {P:_foo bar _} `) test("Emphasis and strong emphasis (example 371)", ` {P:_(_foo)} `) test("Emphasis and strong emphasis (example 372)", ` {P:{Em:{e:_}({Em:{e:_}foo{e:_}}){e:_}}} `) test("Emphasis and strong emphasis (example 373)", ` {P:_foo_bar} `) test("Emphasis and strong emphasis (example 374)", ` {P:_пристаням_стремятся} `) test("Emphasis and strong emphasis (example 375)", ` {P:{Em:{e:_}foo_bar_baz{e:_}}} `) test("Emphasis and strong emphasis (example 376)", ` {P:{Em:{e:_}(bar){e:_}}.} `) test("Emphasis and strong emphasis (example 377)", ` {P:{St:{e:**}foo bar{e:**}}} `) test("Emphasis and strong emphasis (example 378)", ` {P:** foo bar**} `) test("Emphasis and strong emphasis (example 379)", ` {P:a**"foo"**} `) test("Emphasis and strong emphasis (example 380)", ` {P:foo{St:{e:**}bar{e:**}}} `) test("Emphasis and strong emphasis (example 381)", ` {P:{St:{e:__}foo bar{e:__}}} `) test("Emphasis and strong emphasis (example 382)", ` {P:__ foo bar__} `) test("Emphasis and strong emphasis (example 383)", ` {P:__ foo bar__} `) test("Emphasis and strong emphasis (example 384)", ` {P:a__"foo"__} `) test("Emphasis and strong emphasis (example 385)", ` {P:foo__bar__} `) test("Emphasis and strong emphasis (example 386)", ` {P:5__6__78} `) test("Emphasis and strong emphasis (example 387)", ` {P:пристаням__стремятся__} `) test("Emphasis and strong emphasis (example 388)", ` {P:{St:{e:__}foo, {St:{e:__}bar{e:__}}, baz{e:__}}} `) test("Emphasis and strong emphasis (example 389)", ` {P:foo-{St:{e:__}(bar){e:__}}} `) test("Emphasis and strong emphasis (example 390)", ` {P:**foo bar **} `) test("Emphasis and strong emphasis (example 391)", ` {P:**(**foo)} `) test("Emphasis and strong emphasis (example 392)", ` {P:{Em:{e:*}({St:{e:**}foo{e:**}}){e:*}}} `) test("Emphasis and strong emphasis (example 393)", ` {P:{St:{e:**}Gomphocarpus ({Em:{e:*}Gomphocarpus physocarpus{e:*}}, syn. {Em:{e:*}Asclepias physocarpa{e:*}}){e:**}}} `) test("Emphasis and strong emphasis (example 394)", ` {P:{St:{e:**}foo "{Em:{e:*}bar{e:*}}" foo{e:**}}} `) test("Emphasis and strong emphasis (example 395)", ` {P:{St:{e:**}foo{e:**}}bar} `) test("Emphasis and strong emphasis (example 396)", ` {P:__foo bar __} `) test("Emphasis and strong emphasis (example 397)", ` {P:__(__foo)} `) test("Emphasis and strong emphasis (example 398)", ` {P:{Em:{e:_}({St:{e:__}foo{e:__}}){e:_}}} `) test("Emphasis and strong emphasis (example 399)", ` {P:__foo__bar} `) test("Emphasis and strong emphasis (example 400)", ` {P:__пристаням__стремятся} `) test("Emphasis and strong emphasis (example 401)", ` {P:{St:{e:__}foo__bar__baz{e:__}}} `) test("Emphasis and strong emphasis (example 402)", ` {P:{St:{e:__}(bar){e:__}}.} `) test("Emphasis and strong emphasis (example 403)", ` {P:{Em:{e:*}foo {Ln:{L:[}bar{L:]}{L:(}{URL:/url}{L:)}}{e:*}}} `) test("Emphasis and strong emphasis (example 404)", ` {P:{Em:{e:*}foo bar{e:*}}} `) test("Emphasis and strong emphasis (example 405)", ` {P:{Em:{e:_}foo {St:{e:__}bar{e:__}} baz{e:_}}} `) test("Emphasis and strong emphasis (example 406)", ` {P:{Em:{e:_}foo {Em:{e:_}bar{e:_}} baz{e:_}}} `) test("Emphasis and strong emphasis (example 407)", ` {P:{Em:{e:_}{Em:{e:_}foo{e:_}} bar{e:_}}} `) test("Emphasis and strong emphasis (example 408)", ` {P:{Em:{e:*}foo {Em:{e:*}bar{e:*}}{e:*}}} `) test("Emphasis and strong emphasis (example 409)", ` {P:{Em:{e:*}foo {St:{e:**}bar{e:**}} baz{e:*}}} `) test("Emphasis and strong emphasis (example 410)", ` {P:{Em:{e:*}foo{St:{e:**}bar{e:**}}baz{e:*}}} `) test("Emphasis and strong emphasis (example 411)", ` {P:{Em:{e:*}foo**bar{e:*}}} `) test("Emphasis and strong emphasis (example 412)", ` {P:{Em:{e:*}{St:{e:**}foo{e:**}} bar{e:*}}} `) test("Emphasis and strong emphasis (example 413)", ` {P:{Em:{e:*}foo {St:{e:**}bar{e:**}}{e:*}}} `) test("Emphasis and strong emphasis (example 414)", ` {P:{Em:{e:*}foo{St:{e:**}bar{e:**}}{e:*}}} `) test("Emphasis and strong emphasis (example 415)", ` {P:foo{Em:{e:*}{St:{e:**}bar{e:**}}{e:*}}baz} `) test("Emphasis and strong emphasis (example 416)", ` {P:foo{St:{e:**}{St:{e:**}{St:{e:**}bar{e:**}}{e:**}}{e:**}}***baz} `) test("Emphasis and strong emphasis (example 417)", ` {P:{Em:{e:*}foo {St:{e:**}bar {Em:{e:*}baz{e:*}} bim{e:**}} bop{e:*}}} `) test("Emphasis and strong emphasis (example 418)", ` {P:{Em:{e:*}foo {Ln:{L:[}{Em:{e:*}bar{e:*}}{L:]}{L:(}{URL:/url}{L:)}}{e:*}}} `) test("Emphasis and strong emphasis (example 419)", ` {P:** is not an empty emphasis} `) test("Emphasis and strong emphasis (example 420)", ` {P:**** is not an empty strong emphasis} `) test("Emphasis and strong emphasis (example 421)", ` {P:{St:{e:**}foo {Ln:{L:[}bar{L:]}{L:(}{URL:/url}{L:)}}{e:**}}} `) test("Emphasis and strong emphasis (example 422)", ` {P:{St:{e:**}foo bar{e:**}}} `) test("Emphasis and strong emphasis (example 423)", ` {P:{St:{e:__}foo {Em:{e:_}bar{e:_}} baz{e:__}}} `) test("Emphasis and strong emphasis (example 424)", ` {P:{St:{e:__}foo {St:{e:__}bar{e:__}} baz{e:__}}} `) test("Emphasis and strong emphasis (example 425)", ` {P:{St:{e:__}{St:{e:__}foo{e:__}} bar{e:__}}} `) test("Emphasis and strong emphasis (example 426)", ` {P:{St:{e:**}foo {St:{e:**}bar{e:**}}{e:**}}} `) test("Emphasis and strong emphasis (example 427)", ` {P:{St:{e:**}foo {Em:{e:*}bar{e:*}} baz{e:**}}} `) test("Emphasis and strong emphasis (example 428)", ` {P:{St:{e:**}foo{Em:{e:*}bar{e:*}}baz{e:**}}} `) test("Emphasis and strong emphasis (example 429)", ` {P:{St:{e:**}{Em:{e:*}foo{e:*}} bar{e:**}}} `) test("Emphasis and strong emphasis (example 430)", ` {P:{St:{e:**}foo {Em:{e:*}bar{e:*}}{e:**}}} `) test("Emphasis and strong emphasis (example 431)", ` {P:{St:{e:**}foo {Em:{e:*}bar {St:{e:**}baz{e:**}} bim{e:*}} bop{e:**}}} `) test("Emphasis and strong emphasis (example 432)", ` {P:{St:{e:**}foo {Ln:{L:[}{Em:{e:*}bar{e:*}}{L:]}{L:(}{URL:/url}{L:)}}{e:**}}} `) test("Emphasis and strong emphasis (example 433)", ` {P:__ is not an empty emphasis} `) test("Emphasis and strong emphasis (example 434)", ` {P:____ is not an empty strong emphasis} `) test("Emphasis and strong emphasis (example 435)", ` {P:foo ***} `) test("Emphasis and strong emphasis (example 436)", ` {P:foo {Em:{e:*}{Esc:\\*}{e:*}}} `) test("Emphasis and strong emphasis (example 437)", ` {P:foo {Em:{e:*}_{e:*}}} `) test("Emphasis and strong emphasis (example 438)", ` {P:foo *****} `) test("Emphasis and strong emphasis (example 439)", ` {P:foo {St:{e:**}{Esc:\\*}{e:**}}} `) test("Emphasis and strong emphasis (example 440)", ` {P:foo {St:{e:**}_{e:**}}} `) test("Emphasis and strong emphasis (example 441)", ` {P:*{Em:{e:*}foo{e:*}}} `) test("Emphasis and strong emphasis (example 442)", ` {P:{Em:{e:*}foo{e:*}}*} `) test("Emphasis and strong emphasis (example 443)", ` {P:*{St:{e:**}foo{e:**}}} `) test("Emphasis and strong emphasis (example 444)", ` {P:***{Em:{e:*}foo{e:*}}} `) test("Emphasis and strong emphasis (example 445)", ` {P:{St:{e:**}foo{e:**}}*} `) test("Emphasis and strong emphasis (example 446)", ` {P:{Em:{e:*}foo{e:*}}***} `) test("Emphasis and strong emphasis (example 447)", ` {P:foo ___} `) test("Emphasis and strong emphasis (example 448)", ` {P:foo {Em:{e:_}{Esc:\\_}{e:_}}} `) test("Emphasis and strong emphasis (example 449)", ` {P:foo {Em:{e:_}*{e:_}}} `) test("Emphasis and strong emphasis (example 450)", ` {P:foo _____} `) test("Emphasis and strong emphasis (example 451)", ` {P:foo {St:{e:__}{Esc:\\_}{e:__}}} `) test("Emphasis and strong emphasis (example 452)", ` {P:foo {St:{e:__}*{e:__}}} `) test("Emphasis and strong emphasis (example 453)", ` {P:_{Em:{e:_}foo{e:_}}} `) test("Emphasis and strong emphasis (example 454)", ` {P:{Em:{e:_}foo{e:_}}_} `) test("Emphasis and strong emphasis (example 455)", ` {P:_{St:{e:__}foo{e:__}}} `) test("Emphasis and strong emphasis (example 456)", ` {P:___{Em:{e:_}foo{e:_}}} `) test("Emphasis and strong emphasis (example 457)", ` {P:{St:{e:__}foo{e:__}}_} `) test("Emphasis and strong emphasis (example 458)", ` {P:{Em:{e:_}foo{e:_}}___} `) test("Emphasis and strong emphasis (example 459)", ` {P:{St:{e:**}foo{e:**}}} `) test("Emphasis and strong emphasis (example 460)", ` {P:{Em:{e:*}{Em:{e:_}foo{e:_}}{e:*}}} `) test("Emphasis and strong emphasis (example 461)", ` {P:{St:{e:__}foo{e:__}}} `) test("Emphasis and strong emphasis (example 462)", ` {P:{Em:{e:_}{Em:{e:*}foo{e:*}}{e:_}}} `) test("Emphasis and strong emphasis (example 463)", ` {P:{St:{e:**}{St:{e:**}foo{e:**}}{e:**}}} `) test("Emphasis and strong emphasis (example 464)", ` {P:{St:{e:__}{St:{e:__}foo{e:__}}{e:__}}} `) test("Emphasis and strong emphasis (example 465)", ` {P:{St:{e:**}{St:{e:**}{St:{e:**}foo{e:**}}{e:**}}{e:**}}} `) test("Emphasis and strong emphasis (example 466)", ` {P:{Em:{e:*}{St:{e:**}foo{e:**}}{e:*}}} `) test("Emphasis and strong emphasis (example 467)", ` {P:{Em:{e:_}{St:{e:__}{St:{e:__}foo{e:__}}{e:__}}{e:_}}} `) test("Emphasis and strong emphasis (example 468)", ` {P:{Em:{e:*}foo _bar{e:*}} baz_} `) test("Emphasis and strong emphasis (example 469)", ` {P:{Em:{e:*}foo {St:{e:__}bar *baz bim{e:__}} bam{e:*}}} `) test("Emphasis and strong emphasis (example 470)", ` {P:**foo {St:{e:**}bar baz{e:**}}} `) test("Emphasis and strong emphasis (example 471)", ` {P:*foo {Em:{e:*}bar baz{e:*}}} `) test("Emphasis and strong emphasis (example 472)", ` {P:*{Ln:{L:[}bar*{L:]}{L:(}{URL:/url}{L:)}}} `) test("Emphasis and strong emphasis (example 473)", ` {P:_foo {Ln:{L:[}bar_{L:]}{L:(}{URL:/url}{L:)}}} `) test("Emphasis and strong emphasis (example 474)", ` {P:*{HT:}} `) test("Emphasis and strong emphasis (example 475)", ` {P:**{HT:}} `) test("Emphasis and strong emphasis (example 476)", ` {P:__{HT:}} `) test("Emphasis and strong emphasis (example 477)", ` {P:{Em:{e:*}a {C:{c:\`}*{c:\`}}{e:*}}} `) test("Emphasis and strong emphasis (example 478)", ` {P:{Em:{e:_}a {C:{c:\`}_{c:\`}}{e:_}}} `) test("Emphasis and strong emphasis (example 479)", ` {P:**a{Al:{L:<}{URL:http://foo.bar/?q=**}{L:>}}} `) test("Emphasis and strong emphasis (example 480)", ` {P:__a{Al:{L:<}{URL:http://foo.bar/?q=__}{L:>}}} `) test("Links (example 481)", ` {P:{Ln:{L:[}link{L:]}{L:(}{URL:/uri} {LT:"title"}{L:)}}} `) test("Links (example 482)", ` {P:{Ln:{L:[}link{L:]}{L:(}{URL:/uri}{L:)}}} `) test("Links (example 483)", ` {P:{Ln:{L:[}link{L:]}{L:(}{L:)}}} `) test("Links (example 484)", ` {P:{Ln:{L:[}link{L:]}{L:(}{URL:<>}{L:)}}} `) test("Links (example 485)", ` {P:{Ln:{L:[}link{L:]}}(/my uri)} `) test("Links (example 486)", ` {P:{Ln:{L:[}link{L:]}{L:(}{URL:}{L:)}}} `) test("Links (example 487)", ` {P:{Ln:{L:[}link{L:]}}(foo bar)} `) // Many of these don't align with the output in the spec because our // implementation doesn't check for an existing link reference when // accepting non-inline links. test("Links (example 488)", ` {P:{Ln:{L:[}link{L:]}}({HT:})} `) test("Links (example 489)", ` {P:{Ln:{L:[}a{L:]}{L:(}{URL:}{L:)}}} `) test("Links (example 490)", ` {P:{Ln:{L:[}link{L:]}{L:(}{URL:}{L:)}}} `) test("Links (example 491)", ` {P:{Ln:{L:[}a{L:]}}( {Ln:{L:[}a{L:]}}({HT:}c)} `) test("Links (example 492)", ` {P:{Ln:{L:[}link{L:]}{L:(}{URL:\\(foo\\)}{L:)}}} `) test("Links (example 493)", ` {P:{Ln:{L:[}link{L:]}{L:(}{URL:foo(and(bar))}{L:)}}} `) test("Links (example 494)", ` {P:{Ln:{L:[}link{L:]}{L:(}{URL:foo\\(and\\(bar\\)}{L:)}}} `) test("Links (example 495)", ` {P:{Ln:{L:[}link{L:]}{L:(}{URL:}{L:)}}} `) test("Links (example 496)", ` {P:{Ln:{L:[}link{L:]}{L:(}{URL:foo\\)\\:}{L:)}}} `) test("Links (example 497)", ` {P:{Ln:{L:[}link{L:]}{L:(}{URL:#fragment}{L:)}}} {P:{Ln:{L:[}link{L:]}{L:(}{URL:http://example.com#fragment}{L:)}}} {P:{Ln:{L:[}link{L:]}{L:(}{URL:http://example.com?foo=3#frag}{L:)}}} `) test("Links (example 498)", ` {P:{Ln:{L:[}link{L:]}{L:(}{URL:foo\\bar}{L:)}}} `) test("Links (example 499)", ` {P:{Ln:{L:[}link{L:]}{L:(}{URL:foo%20bä}{L:)}}} `) test("Links (example 500)", ` {P:{Ln:{L:[}link{L:]}{L:(}{URL:"title"}{L:)}}} `) test("Links (example 501)", ` {P:{Ln:{L:[}link{L:]}{L:(}{URL:/url} {LT:"title"}{L:)}} {Ln:{L:[}link{L:]}{L:(}{URL:/url} {LT:'title'}{L:)}} {Ln:{L:[}link{L:]}{L:(}{URL:/url} {LT:(title)}{L:)}}} `) test("Links (example 502)", ` {P:{Ln:{L:[}link{L:]}{L:(}{URL:/url} {LT:"title \\"""}{L:)}}} `) test("Links (example 503)", ` {P:{Ln:{L:[}link{L:]}{L:(}{URL:/url "title"}{L:)}}} `) test("Links (example 504)", ` {P:{Ln:{L:[}link{L:]}}(/url "title "and" title")} `) test("Links (example 505)", ` {P:{Ln:{L:[}link{L:]}{L:(}{URL:/url} {LT:'title "and" title'}{L:)}}} `) test("Links (example 506)", ` {P:{Ln:{L:[}link{L:]}{L:(} {URL:/uri} {LT:"title"} {L:)}}} `) test("Links (example 507)", ` {P:{Ln:{L:[}link{L:]}} (/uri)} `) test("Links (example 508)", ` {P:[link [foo {Ln:{L:[}bar{L:]}}]](/uri)} `) test("Links (example 509)", ` {P:{Ln:{L:[}link{L:]}} bar](/uri)} `) test("Links (example 510)", ` {P:[link {Ln:{L:[}bar{L:]}{L:(}{URL:/uri}{L:)}}} `) test("Links (example 511)", ` {P:{Ln:{L:[}link {Esc:\\[}bar{L:]}{L:(}{URL:/uri}{L:)}}} `) test("Links (example 512)", ` {P:{Ln:{L:[}link {Em:{e:*}foo {St:{e:**}bar{e:**}} {C:{c:\`}#{c:\`}}{e:*}}{L:]}{L:(}{URL:/uri}{L:)}}} `) test("Links (example 513)", ` {P:{Ln:{L:[}{Im:{L:![}moon{L:]}{L:(}{URL:moon.jpg}{L:)}}{L:]}{L:(}{URL:/uri}{L:)}}} `) test("Links (example 514)", ` {P:[foo {Ln:{L:[}bar{L:]}{L:(}{URL:/uri}{L:)}}](/uri)} `) test("Links (example 515)", ` {P:[foo {Em:{e:*}[bar {Ln:{L:[}baz{L:]}{L:(}{URL:/uri}{L:)}}](/uri){e:*}}](/uri)} `) test("Links (example 516)", ` {P:{Im:{L:![}[{Ln:{L:[}foo{L:]}{L:(}{URL:uri1}{L:)}}](uri2){L:]}{L:(}{URL:uri3}{L:)}}} `) test("Links (example 517)", ` {P:*{Ln:{L:[}foo*{L:]}{L:(}{URL:/uri}{L:)}}} `) test("Links (example 518)", ` {P:{Ln:{L:[}foo *bar{L:]}{L:(}{URL:baz*}{L:)}}} `) // Not the spirit of the test, because the shortcut link is still // accepted. test("Links (example 519)", ` {P:*foo {Ln:{L:[}bar* baz{L:]}}} `) test("Links (example 520)", ` {P:[foo {HT:}} `) test("Links (example 521)", ` {P:[foo{C:{c:\`}](/uri){c:\`}}} `) test("Links (example 522)", ` {P:[foo{Al:{L:<}{URL:http://example.com/?search=](uri)}{L:>}}} `) test("Links (example 523)", ` {P:{Ln:{L:[}foo{L:]}{LL:[bar]}}} {LR:{LL:[bar]}{L::} {URL:/url} {LT:"title"}} `) // This has a different shape than the original test case, because // we accept the innermost link. test("Links (example 524)", ` {P:[link [foo {Ln:{L:[}bar{L:]}}]]{Ln:{L:[}ref{L:]}}} {LR:{LL:[ref]}{L::} {URL:/uri}} `) test("Links (example 525)", ` {P:{Ln:{L:[}link {Esc:\\[}bar{L:]}{LL:[ref]}}} {LR:{LL:[ref]}{L::} {URL:/uri}} `) test("Links (example 526)", ` {P:{Ln:{L:[}link {Em:{e:*}foo {St:{e:**}bar{e:**}} {C:{c:\`}#{c:\`}}{e:*}}{L:]}{LL:[ref]}}} {LR:{LL:[ref]}{L::} {URL:/uri}} `) test("Links (example 527)", ` {P:{Ln:{L:[}{Im:{L:![}moon{L:]}{L:(}{URL:moon.jpg}{L:)}}{L:]}{LL:[ref]}}} {LR:{LL:[ref]}{L::} {URL:/uri}} `) test("Links (example 528)", ` {P:[foo {Ln:{L:[}bar{L:]}{L:(}{URL:/uri}{L:)}}]{Ln:{L:[}ref{L:]}}} {LR:{LL:[ref]}{L::} {URL:/uri}} `) test("Links (example 529)", ` {P:[foo {Em:{e:*}bar {Ln:{L:[}baz{L:]}{LL:[ref]}}{e:*}}]{Ln:{L:[}ref{L:]}}} {LR:{LL:[ref]}{L::} {URL:/uri}} `) test("Links (example 530)", ` {P:*{Ln:{L:[}foo*{L:]}{LL:[ref]}}} {LR:{LL:[ref]}{L::} {URL:/uri}} `) test("Links (example 531)", ` {P:{Ln:{L:[}foo *bar{L:]}{LL:[ref]}}} {LR:{LL:[ref]}{L::} {URL:/uri}} `) test("Links (example 532)", ` {P:[foo {HT:}} {LR:{LL:[ref]}{L::} {URL:/uri}} `) test("Links (example 533)", ` {P:[foo{C:{c:\`}][ref]{c:\`}}} {LR:{LL:[ref]}{L::} {URL:/uri}} `) test("Links (example 534)", ` {P:[foo{Al:{L:<}{URL:http://example.com/?search=][ref]}{L:>}}} {LR:{LL:[ref]}{L::} {URL:/uri}} `) test("Links (example 535)", ` {P:{Ln:{L:[}foo{L:]}{LL:[BaR]}}} {LR:{LL:[bar]}{L::} {URL:/url} {LT:"title"}} `) test("Links (example 536)", ` {P:{Ln:{L:[}Толпой{L:]}{LL:[Толпой]}} is a Russian word.} {LR:{LL:[ТОЛПОЙ]}{L::} {URL:/url}} `) test("Links (example 537)", ` {LR:{LL:[Foo bar]}{L::} {URL:/url}} {P:{Ln:{L:[}Baz{L:]}{LL:[Foo bar]}}} `) test("Links (example 538)", ` {P:{Ln:{L:[}foo{L:]}} {Ln:{L:[}bar{L:]}}} {LR:{LL:[bar]}{L::} {URL:/url} {LT:"title"}} `) test("Links (example 539)", ` {P:{Ln:{L:[}foo{L:]}} {Ln:{L:[}bar{L:]}}} {LR:{LL:[bar]}{L::} {URL:/url} {LT:"title"}} `) test("Links (example 540)", ` {LR:{LL:[foo]}{L::} {URL:/url1}} {LR:{LL:[foo]}{L::} {URL:/url2}} {P:{Ln:{L:[}bar{L:]}{LL:[foo]}}} `) test("Links (example 541)", ` {P:{Ln:{L:[}bar{L:]}{LL:[foo\\!]}}} {LR:{LL:[foo!]}{L::} {URL:/url}} `) test("Links (example 542)", ` {P:{Ln:{L:[}foo{L:]}}[ref[]} {P:[ref[]: /uri} `) test("Links (example 543)", ` {P:{Ln:{L:[}foo{L:]}}[ref{Ln:{L:[}bar{L:]}}]} {P:[ref{Ln:{L:[}bar{L:]}}]: /uri} `) test("Links (example 544)", ` {P:[[{Ln:{L:[}foo{L:]}}]]} {P:[[{Ln:{L:[}foo{L:]}}]]: /url} `) test("Links (example 545)", ` {P:{Ln:{L:[}foo{L:]}{LL:[ref\\[]}}} {LR:{LL:[ref\\[]}{L::} {URL:/uri}} `) test("Links (example 546)", ` {LR:{LL:[bar\\\\]}{L::} {URL:/uri}} {P:{Ln:{L:[}bar{Esc:\\\\}{L:]}}} `) test("Links (example 547)", ` {P:[]} {P:[]: /uri} `) test("Links (example 548)", ` {P:[ ]} {P:[ ]: /uri} `) test("Links (example 549)", ` {P:{Ln:{L:[}foo{L:]}{LL:[]}}} {LR:{LL:[foo]}{L::} {URL:/url} {LT:"title"}} `) test("Links (example 550)", ` {P:{Ln:{L:[}{Em:{e:*}foo{e:*}} bar{L:]}{LL:[]}}} {LR:{LL:[*foo* bar]}{L::} {URL:/url} {LT:"title"}} `) test("Links (example 551)", ` {P:{Ln:{L:[}Foo{L:]}{LL:[]}}} {LR:{LL:[foo]}{L::} {URL:/url} {LT:"title"}} `) test("Links (example 552)", ` {P:{Ln:{L:[}foo{L:]}} []} {LR:{LL:[foo]}{L::} {URL:/url} {LT:"title"}} `) test("Links (example 553)", ` {P:{Ln:{L:[}foo{L:]}}} {LR:{LL:[foo]}{L::} {URL:/url} {LT:"title"}} `) test("Links (example 554)", ` {P:{Ln:{L:[}{Em:{e:*}foo{e:*}} bar{L:]}}} {LR:{LL:[*foo* bar]}{L::} {URL:/url} {LT:"title"}} `) test("Links (example 555)", ` {P:[{Ln:{L:[}{Em:{e:*}foo{e:*}} bar{L:]}}]} {LR:{LL:[*foo* bar]}{L::} {URL:/url} {LT:"title"}} `) test("Links (example 556)", ` {P:[[bar {Ln:{L:[}foo{L:]}}} {LR:{LL:[foo]}{L::} {URL:/url}} `) test("Links (example 557)", ` {P:{Ln:{L:[}Foo{L:]}}} {LR:{LL:[foo]}{L::} {URL:/url} {LT:"title"}} `) test("Links (example 558)", ` {P:{Ln:{L:[}foo{L:]}} bar} {LR:{LL:[foo]}{L::} {URL:/url}} `) test("Links (example 559)", ` {P:{Esc:\\[}foo]} {LR:{LL:[foo]}{L::} {URL:/url} {LT:"title"}} `) test("Links (example 560)", ` {LR:{LL:[foo*]}{L::} {URL:/url}} {P:*{Ln:{L:[}foo*{L:]}}} `) test("Links (example 561)", ` {P:{Ln:{L:[}foo{L:]}{LL:[bar]}}} {LR:{LL:[foo]}{L::} {URL:/url1}} {LR:{LL:[bar]}{L::} {URL:/url2}} `) test("Links (example 562)", ` {P:{Ln:{L:[}foo{L:]}{LL:[]}}} {LR:{LL:[foo]}{L::} {URL:/url1}} `) test("Links (example 563)", ` {P:{Ln:{L:[}foo{L:]}{L:(}{L:)}}} {LR:{LL:[foo]}{L::} {URL:/url1}} `) test("Links (example 564)", ` {P:{Ln:{L:[}foo{L:]}}(not a link)} {LR:{LL:[foo]}{L::} {URL:/url1}} `) // Not really testing what it is supposed to, because the first two // bracket pairs are blindly accepted as link. test("Links (example 565)", ` {P:{Ln:{L:[}foo{L:]}{LL:[bar]}}{Ln:{L:[}baz{L:]}}} {LR:{LL:[baz]}{L::} {URL:/url}} `) test("Links (example 566)", ` {P:{Ln:{L:[}foo{L:]}{LL:[bar]}}{Ln:{L:[}baz{L:]}}} {LR:{LL:[baz]}{L::} {URL:/url1}} {LR:{LL:[bar]}{L::} {URL:/url2}} `) test("Links (example 567)", ` {P:{Ln:{L:[}foo{L:]}{LL:[bar]}}{Ln:{L:[}baz{L:]}}} {LR:{LL:[baz]}{L::} {URL:/url1}} {LR:{LL:[foo]}{L::} {URL:/url2}} `) test("Images (example 568)", ` {P:{Im:{L:![}foo{L:]}{L:(}{URL:/url} {LT:"title"}{L:)}}} `) test("Images (example 569)", ` {P:{Im:{L:![}foo {Em:{e:*}bar{e:*}}{L:]}}} {LR:{LL:[foo *bar*]}{L::} {URL:train.jpg} {LT:"train & tracks"}} `) test("Images (example 570)", ` {P:{Im:{L:![}foo {Im:{L:![}bar{L:]}{L:(}{URL:/url}{L:)}}{L:]}{L:(}{URL:/url2}{L:)}}} `) test("Images (example 571)", ` {P:{Im:{L:![}foo {Ln:{L:[}bar{L:]}{L:(}{URL:/url}{L:)}}{L:]}{L:(}{URL:/url2}{L:)}}} `) test("Images (example 572)", ` {P:{Im:{L:![}foo {Em:{e:*}bar{e:*}}{L:]}{LL:[]}}} {LR:{LL:[foo *bar*]}{L::} {URL:train.jpg} {LT:"train & tracks"}} `) test("Images (example 573)", ` {P:{Im:{L:![}foo {Em:{e:*}bar{e:*}}{L:]}{LL:[foobar]}}} {LR:{LL:[FOOBAR]}{L::} {URL:train.jpg} {LT:"train & tracks"}} `) test("Images (example 574)", ` {P:{Im:{L:![}foo{L:]}{L:(}{URL:train.jpg}{L:)}}} `) test("Images (example 575)", ` {P:My {Im:{L:![}foo bar{L:]}{L:(}{URL:/path/to/train.jpg} {LT:"title"} {L:)}}} `) test("Images (example 576)", ` {P:{Im:{L:![}foo{L:]}{L:(}{URL:}{L:)}}} `) test("Images (example 577)", ` {P:{Im:{L:![}{L:]}{L:(}{URL:/url}{L:)}}} `) test("Images (example 578)", ` {P:{Im:{L:![}foo{L:]}{LL:[bar]}}} {LR:{LL:[bar]}{L::} {URL:/url}} `) test("Images (example 579)", ` {P:{Im:{L:![}foo{L:]}{LL:[bar]}}} {LR:{LL:[BAR]}{L::} {URL:/url}} `) test("Images (example 580)", ` {P:{Im:{L:![}foo{L:]}{LL:[]}}} {LR:{LL:[foo]}{L::} {URL:/url} {LT:"title"}} `) test("Images (example 581)", ` {P:{Im:{L:![}{Em:{e:*}foo{e:*}} bar{L:]}{LL:[]}}} {LR:{LL:[*foo* bar]}{L::} {URL:/url} {LT:"title"}} `) test("Images (example 582)", ` {P:{Im:{L:![}Foo{L:]}{LL:[]}}} {LR:{LL:[foo]}{L::} {URL:/url} {LT:"title"}} `) test("Images (example 583)", ` {P:{Im:{L:![}foo{L:]}} []} {LR:{LL:[foo]}{L::} {URL:/url} {LT:"title"}} `) test("Images (example 584)", ` {P:{Im:{L:![}foo{L:]}}} {LR:{LL:[foo]}{L::} {URL:/url} {LT:"title"}} `) test("Images (example 585)", ` {P:{Im:{L:![}{Em:{e:*}foo{e:*}} bar{L:]}}} {LR:{LL:[*foo* bar]}{L::} {URL:/url} {LT:"title"}} `) test("Images (example 586)", ` {P:{Im:{L:![}{Ln:{L:[}foo{L:]}}{L:]}}} {P:[{Ln:{L:[}foo{L:]}}]: /url "title"} `) test("Images (example 587)", ` {P:{Im:{L:![}Foo{L:]}}} {LR:{LL:[foo]}{L::} {URL:/url} {LT:"title"}} `) test("Images (example 588)", ` {P:!{Esc:\\[}foo]} {LR:{LL:[foo]}{L::} {URL:/url} {LT:"title"}} `) test("Images (example 589)", ` {P:{Esc:\\!}{Ln:{L:[}foo{L:]}}} {LR:{LL:[foo]}{L::} {URL:/url} {LT:"title"}} `) test("Autolinks (example 590)", ` {P:{Al:{L:<}{URL:http://foo.bar.baz}{L:>}}} `) test("Autolinks (example 591)", ` {P:{Al:{L:<}{URL:http://foo.bar.baz/test?q=hello&id=22&boolean}{L:>}}} `) test("Autolinks (example 592)", ` {P:{Al:{L:<}{URL:irc://foo.bar:2233/baz}{L:>}}} `) test("Autolinks (example 593)", ` {P:{Al:{L:<}{URL:MAILTO:FOO@BAR.BAZ}{L:>}}} `) test("Autolinks (example 594)", ` {P:{Al:{L:<}{URL:a+b+c:d}{L:>}}} `) test("Autolinks (example 595)", ` {P:{Al:{L:<}{URL:made-up-scheme://foo,bar}{L:>}}} `) test("Autolinks (example 596)", ` {P:{Al:{L:<}{URL:http://../}{L:>}}} `) test("Autolinks (example 597)", ` {P:{Al:{L:<}{URL:localhost:5001/foo}{L:>}}} `) test("Autolinks (example 598)", ` {P:} `) test("Autolinks (example 599)", ` {P:{Al:{L:<}{URL:http://example.com/\\[\\}{L:>}}} `) test("Autolinks (example 600)", ` {P:{Al:{L:<}{URL:foo@bar.example.com}{L:>}}} `) test("Autolinks (example 601)", ` {P:{Al:{L:<}{URL:foo+special@Bar.baz-bar0.com}{L:>}}} `) test("Autolinks (example 602)", ` {P:} `) test("Autolinks (example 603)", ` {P:<>} `) test("Autolinks (example 604)", ` {P:< http://foo.bar >} `) test("Autolinks (example 605)", ` {P:} `) test("Autolinks (example 606)", ` {P:} `) test("Autolinks (example 607)", ` {P:http://example.com} `) test("Autolinks (example 608)", ` {P:foo@bar.example.com} `) test("Raw HTML (example 609)", ` {P:{HT:}{HT:}{HT:}} `) test("Raw HTML (example 610)", ` {P:{HT:}{HT:}} `) test("Raw HTML (example 611)", ` {P:{HT:}{HT:}} `) test("Raw HTML (example 612)", ` {P:{HT:}} `) test("Raw HTML (example 613)", ` {P:Foo {HT:}} `) test("Raw HTML (example 614)", ` {P:<33> <__>} `) test("Raw HTML (example 615)", ` {P:} `) test("Raw HTML (example 616)", ` {P:}{HT:< foo>}{HT:} } `) test("Raw HTML (example 618)", ` {P:} `) test("Raw HTML (example 619)", ` {P:{HT:}{HT:}} `) test("Raw HTML (example 620)", ` {P:} `) test("Raw HTML (example 621)", ` {P:foo {CM:}} `) test("Raw HTML (example 622)", ` {P:foo } `) test("Raw HTML (example 623)", ` {P:foo foo -->} {P:foo } `) test("Raw HTML (example 624)", ` {P:foo {Pi:}} `) test("Raw HTML (example 625)", ` {P:foo {HT:}} `) test("Raw HTML (example 626)", ` {P:foo {HT:&<]]>}} `) test("Raw HTML (example 627)", ` {P:foo {HT:}} `) test("Raw HTML (example 628)", ` {P:foo {HT:}} `) test("Raw HTML (example 629)", ` {P:} `) test("Hard line breaks (example 630)", ` {P:foo{BR: }baz} `) test("Hard line breaks (example 631)", ` {P:foo{BR:\\ }baz} `) test("Hard line breaks (example 632)", ` {P:foo{BR: }baz} `) test("Hard line breaks (example 633)", ` {P:foo{BR: } bar} `) test("Hard line breaks (example 634)", ` {P:foo{BR:\\ } bar} `) test("Hard line breaks (example 635)", ` {P:{Em:{e:*}foo{BR: }bar{e:*}}} `) test("Hard line breaks (example 636)", ` {P:{Em:{e:*}foo{BR:\\ }bar{e:*}}} `) test("Hard line breaks (example 637)", ` {P:{C:{c:\`}code span{c:\`}}} `) test("Hard line breaks (example 638)", ` {P:{C:{c:\`}code\\ span{c:\`}}} `) test("Hard line breaks (example 639)", ` {P:{HT:}} `) test("Hard line breaks (example 640)", ` {P:{HT:}} `) test("Hard line breaks (example 641)", ` {P:foo\\} `) test("Hard line breaks (example 642)", ` {P:foo } `) test("Hard line breaks (example 643)", ` {H3:{h:###} foo\\} `) test("Hard line breaks (example 644)", ` {H3:{h:###} foo } `) test("Soft line breaks (example 645)", ` {P:foo baz} `) test("Soft line breaks (example 646)", ` {P:foo baz} `) test("Textual content (example 647)", ` {P:hello $.;'there} `) test("Textual content (example 648)", ` {P:Foo χρῆν} `) test("Textual content (example 649)", ` {P:Multiple spaces} `) }) describe("Custom Markdown tests", () => { // (Not ideal that the 3rd mark is inside the previous item, but // this'd require quite a big overhaul to fix.) test("Quote markers don't end up inside inner list items", ` {Q:{q:>} {BL:{LI:{l:-} {P:Hello}} {q:>} {LI:{l:-} {P:Two} {q:>}} {q:>} {LI:{l:-} {P:Three}}}} `) test("Nested bullet lists don't break ordered list parsing", ` {OL:{LI:{l:1.} {P:A} {BL:{LI:{l:*} {P:A1}} {LI:{l:*} {P:A2}}}} {LI:{l:2.} {P:B}}} `) it("Doesn't get confused by tabs indenting a list item", () => { let doc = ` - a\n\t\tb` if (parser.parse(doc).length > doc.length) throw new RangeError("Wrong tree length") }) it("Parses horizontal rules when setext headers are disabled", () => { let tree = parser.configure({remove: ["SetextHeading"]}).parse(`abc\n---`) if (tree.toString() != "Document(Paragraph,HorizontalRule)") throw new Error("Unexpected tree: " + tree) }) })