summaryrefslogtreecommitdiff
path: root/tests/snippets
diff options
context:
space:
mode:
authordiskdance <106794417+diskdance@users.noreply.github.com>2023-04-05 22:07:40 +0800
committerGitHub <noreply@github.com>2023-04-05 16:07:40 +0200
commiteaca69091119e0ac5c97e626ba9e3b21b688c5ed (patch)
treeff94454e9d8729d54cee122c943bcf5364af8414 /tests/snippets
parent0e9c87bcf096908956e031f15a4e589e83be1691 (diff)
downloadpygments-git-eaca69091119e0ac5c97e626ba9e3b21b688c5ed.tar.gz
Add lexer for MediaWiki Wikitext (#2373)
Diffstat (limited to 'tests/snippets')
-rw-r--r--tests/snippets/wikitext/bold-italic.txt289
-rw-r--r--tests/snippets/wikitext/entity.txt185
-rw-r--r--tests/snippets/wikitext/extlink.txt292
-rw-r--r--tests/snippets/wikitext/heading.txt53
-rw-r--r--tests/snippets/wikitext/hr.txt42
-rw-r--r--tests/snippets/wikitext/html.txt449
-rw-r--r--tests/snippets/wikitext/language-converter.txt273
-rw-r--r--tests/snippets/wikitext/list.txt532
-rw-r--r--tests/snippets/wikitext/magic-link.txt52
-rw-r--r--tests/snippets/wikitext/magic-word.txt157
-rw-r--r--tests/snippets/wikitext/medialink.txt171
-rw-r--r--tests/snippets/wikitext/only-highlight-first-redirect.txt22
-rw-r--r--tests/snippets/wikitext/parser-function.txt2717
-rw-r--r--tests/snippets/wikitext/parser-tag.txt2133
-rw-r--r--tests/snippets/wikitext/signurature.txt24
-rw-r--r--tests/snippets/wikitext/table.txt2323
-rw-r--r--tests/snippets/wikitext/template.txt617
-rw-r--r--tests/snippets/wikitext/wikilink.txt772
18 files changed, 11103 insertions, 0 deletions
diff --git a/tests/snippets/wikitext/bold-italic.txt b/tests/snippets/wikitext/bold-italic.txt
new file mode 100644
index 00000000..816be8fb
--- /dev/null
+++ b/tests/snippets/wikitext/bold-italic.txt
@@ -0,0 +1,289 @@
+---input---
+To ''italicize text'', put two consecutive apostrophes on each side of it.
+
+Three apostrophes each side will '''bold the text'''.
+
+Five consecutive apostrophes on each side (two for italics plus three for bold) produces '''''bold italics'''''.
+
+'''''Italic and bold formatting''''' works correctly only within a single line.
+
+''''''foo''''''
+
+L''''''Étranger'''''
+
+'' a ''' a ''' a ''
+
+'' a ''' a '' a '''
+
+''''' a '' a '''
+''''' a ''' a ''
+
+''''' a
+a
+
+''a[[b|c]]d
+a[[b|''c]]d
+''a{{b|c}}d
+a{{b|''c}}d
+
+---tokens---
+'To' Text
+' ' Text
+"''" Generic.Emph
+'italicize' Generic.Emph
+' ' Generic.Emph
+'text' Generic.Emph
+"''" Generic.Emph
+',' Text
+' ' Text
+'put' Text
+' ' Text
+'two' Text
+' ' Text
+'consecutive' Text
+' ' Text
+'apostrophes' Text
+' ' Text
+'on' Text
+' ' Text
+'each' Text
+' ' Text
+'side' Text
+' ' Text
+'of' Text
+' ' Text
+'it' Text
+'.' Text
+'\n' Text
+
+'\n' Text
+
+'Three' Text
+' ' Text
+'apostrophes' Text
+' ' Text
+'each' Text
+' ' Text
+'side' Text
+' ' Text
+'will' Text
+' ' Text
+"'''" Generic.Strong
+'bold' Generic.Strong
+' ' Generic.Strong
+'the' Generic.Strong
+' ' Generic.Strong
+'text' Generic.Strong
+"'''" Generic.Strong
+'.' Text
+'\n' Text
+
+'\n' Text
+
+'Five' Text
+' ' Text
+'consecutive' Text
+' ' Text
+'apostrophes' Text
+' ' Text
+'on' Text
+' ' Text
+'each' Text
+' ' Text
+'side' Text
+' ' Text
+'(' Text
+'two' Text
+' ' Text
+'for' Text
+' ' Text
+'italics' Text
+' ' Text
+'plus' Text
+' ' Text
+'three' Text
+' ' Text
+'for' Text
+' ' Text
+'bold' Text
+')' Text
+' ' Text
+'produces' Text
+' ' Text
+"''" Generic.Emph
+"'''" Generic.Strong
+'bold' Generic.Strong
+' ' Generic.Strong
+'italics' Generic.Strong
+"'''" Generic.Strong
+"''" Generic.Emph
+'.' Text
+'\n' Text
+
+'\n' Text
+
+"''" Generic.Emph
+"'''" Generic.Strong
+'Italic' Generic.Strong
+' ' Generic.Strong
+'and' Generic.Strong
+' ' Generic.Strong
+'bold' Generic.Strong
+' ' Generic.Strong
+'formatting' Generic.Strong
+"'''" Generic.Strong
+"''" Generic.Emph
+' ' Text
+'works' Text
+' ' Text
+'correctly' Text
+' ' Text
+'only' Text
+' ' Text
+'within' Text
+' ' Text
+'a' Text
+' ' Text
+'single' Text
+' ' Text
+'line' Text
+'.' Text
+'\n' Text
+
+'\n' Text
+
+"'" Text
+"''" Generic.Emph
+"'''" Generic.Strong
+'foo' Generic.Strong
+"'" Generic.Strong
+"'''" Generic.Strong
+"''" Generic.Emph
+'\n' Text
+
+'\n' Text
+
+'L' Text
+"'" Text
+"''" Generic.Emph
+"'''" Generic.Strong
+'Étranger' Generic.Strong
+"'''" Generic.Strong
+"''" Generic.Emph
+'\n' Text
+
+'\n' Text
+
+"''" Generic.Emph
+' ' Generic.Emph
+'a' Generic.Emph
+' ' Generic.Emph
+"'''" Generic.Strong
+' ' Generic.Strong
+'a' Generic.Strong
+' ' Generic.Strong
+"'''" Generic.Strong
+' ' Generic.Emph
+'a' Generic.Emph
+' ' Generic.Emph
+"''" Generic.Emph
+'\n' Text
+
+'\n' Text
+
+"''" Generic.Emph
+' ' Generic.Emph
+'a' Generic.Emph
+' ' Generic.Emph
+"'''" Generic.Strong
+' ' Generic.Strong
+'a' Generic.Strong
+' ' Generic.Strong
+"''" Generic.Emph
+' ' Generic.Strong
+'a' Generic.Strong
+' ' Generic.Strong
+"'''" Generic.Strong
+'\n' Text
+
+'\n' Text
+
+"''" Generic.Emph
+"'''" Generic.Strong
+' ' Generic.Strong
+'a' Generic.Strong
+' ' Generic.Strong
+"''" Generic.Emph
+' ' Generic.Strong
+'a' Generic.Strong
+' ' Generic.Strong
+"'''" Generic.Strong
+'\n' Text
+
+"''" Generic.Emph
+"'''" Generic.Strong
+' ' Generic.Strong
+'a' Generic.Strong
+' ' Generic.Strong
+"'''" Generic.Strong
+' ' Generic.Emph
+'a' Generic.Emph
+' ' Generic.Emph
+"''" Generic.Emph
+'\n' Text
+
+'\n' Text
+
+"''" Generic.Emph
+"'''" Generic.Strong
+' ' Generic.Strong
+'a' Generic.Strong
+'\n' Text
+
+'a' Text
+'\n' Text
+
+'\n' Text
+
+"''" Generic.Emph
+'a' Generic.Emph
+'[[' Punctuation
+'b' Name.Tag
+'|' Punctuation
+'c' Text
+']]' Punctuation
+'d' Generic.Emph
+'\n' Text
+
+'a' Text
+'[[' Punctuation
+'b' Name.Tag
+'|' Punctuation
+"''" Generic.Emph
+'c' Generic.Emph
+'' Punctuation
+']]' Punctuation
+'d' Text
+'\n' Text
+
+"''" Generic.Emph
+'a' Generic.Emph
+'' Punctuation
+'{{' Punctuation
+'b' Name.Tag
+'|' Punctuation
+'c' Text
+'}}' Punctuation
+'d' Text
+'\n' Text
+
+'a' Text
+'{{' Punctuation
+'b' Name.Tag
+'|' Punctuation
+"''" Generic.Emph
+'c' Generic.Emph
+'' Punctuation
+'}}' Punctuation
+'d' Text
+'\n' Text
diff --git a/tests/snippets/wikitext/entity.txt b/tests/snippets/wikitext/entity.txt
new file mode 100644
index 00000000..0838de34
--- /dev/null
+++ b/tests/snippets/wikitext/entity.txt
@@ -0,0 +1,185 @@
+---input---
+Mr.&nbsp;Smith or 400&nbsp;km/h
+
+&Agrave; &Aacute; &Acirc; &Atilde; &Auml; &Aring; &AElig;
+
+&Ccedil; &Egrave; &Eacute; &Ecirc; &Euml;
+
+&Igrave; &Iacute; &Icirc; &Iuml; &Ntilde;
+
+&Ograve; &Oacute; &Ocirc; &Otilde; &Ouml; &Oslash; &OElig;
+
+&Ugrave; &Uacute; &Ucirc; &Uuml; &Yuml; &szlig;
+
+&agrave; &aacute; &acirc; &atilde; &auml; &aring; &aelig; &ccedil;
+
+&egrave; &eacute; &ecirc; &euml;
+
+&igrave; &iacute; &icirc; &iuml; &ntilde;
+
+&ograve; &oacute; &ocirc; &otilde; &ouml; &oslash; &oelig;
+
+&ugrave; &uacute; &ucirc; &uuml; &yuml;
+
+---tokens---
+'Mr' Text
+'.' Text
+'&nbsp;' Name.Entity
+'Smith' Text
+' ' Text
+'or' Text
+' ' Text
+'400' Text
+'&nbsp;' Name.Entity
+'km' Text
+'/' Text
+'h' Text
+'\n' Text
+
+'\n' Text
+
+'&Agrave;' Name.Entity
+' ' Text
+'&Aacute;' Name.Entity
+' ' Text
+'&Acirc;' Name.Entity
+' ' Text
+'&Atilde;' Name.Entity
+' ' Text
+'&Auml;' Name.Entity
+' ' Text
+'&Aring;' Name.Entity
+' ' Text
+'&AElig;' Name.Entity
+'\n' Text
+
+'\n' Text
+
+'&Ccedil;' Name.Entity
+' ' Text
+'&Egrave;' Name.Entity
+' ' Text
+'&Eacute;' Name.Entity
+' ' Text
+'&Ecirc;' Name.Entity
+' ' Text
+'&Euml;' Name.Entity
+'\n' Text
+
+'\n' Text
+
+'&Igrave;' Name.Entity
+' ' Text
+'&Iacute;' Name.Entity
+' ' Text
+'&Icirc;' Name.Entity
+' ' Text
+'&Iuml;' Name.Entity
+' ' Text
+'&Ntilde;' Name.Entity
+'\n' Text
+
+'\n' Text
+
+'&Ograve;' Name.Entity
+' ' Text
+'&Oacute;' Name.Entity
+' ' Text
+'&Ocirc;' Name.Entity
+' ' Text
+'&Otilde;' Name.Entity
+' ' Text
+'&Ouml;' Name.Entity
+' ' Text
+'&Oslash;' Name.Entity
+' ' Text
+'&OElig;' Name.Entity
+'\n' Text
+
+'\n' Text
+
+'&Ugrave;' Name.Entity
+' ' Text
+'&Uacute;' Name.Entity
+' ' Text
+'&Ucirc;' Name.Entity
+' ' Text
+'&Uuml;' Name.Entity
+' ' Text
+'&Yuml;' Name.Entity
+' ' Text
+'&szlig;' Name.Entity
+'\n' Text
+
+'\n' Text
+
+'&agrave;' Name.Entity
+' ' Text
+'&aacute;' Name.Entity
+' ' Text
+'&acirc;' Name.Entity
+' ' Text
+'&atilde;' Name.Entity
+' ' Text
+'&auml;' Name.Entity
+' ' Text
+'&aring;' Name.Entity
+' ' Text
+'&aelig;' Name.Entity
+' ' Text
+'&ccedil;' Name.Entity
+'\n' Text
+
+'\n' Text
+
+'&egrave;' Name.Entity
+' ' Text
+'&eacute;' Name.Entity
+' ' Text
+'&ecirc;' Name.Entity
+' ' Text
+'&euml;' Name.Entity
+'\n' Text
+
+'\n' Text
+
+'&igrave;' Name.Entity
+' ' Text
+'&iacute;' Name.Entity
+' ' Text
+'&icirc;' Name.Entity
+' ' Text
+'&iuml;' Name.Entity
+' ' Text
+'&ntilde;' Name.Entity
+'\n' Text
+
+'\n' Text
+
+'&ograve;' Name.Entity
+' ' Text
+'&oacute;' Name.Entity
+' ' Text
+'&ocirc;' Name.Entity
+' ' Text
+'&otilde;' Name.Entity
+' ' Text
+'&ouml;' Name.Entity
+' ' Text
+'&oslash;' Name.Entity
+' ' Text
+'&oelig;' Name.Entity
+'\n' Text
+
+'\n' Text
+
+'&ugrave;' Name.Entity
+' ' Text
+'&uacute;' Name.Entity
+' ' Text
+'&ucirc;' Name.Entity
+' ' Text
+'&uuml;' Name.Entity
+' ' Text
+'&yuml;' Name.Entity
+'\n' Text
diff --git a/tests/snippets/wikitext/extlink.txt b/tests/snippets/wikitext/extlink.txt
new file mode 100644
index 00000000..a1e445b4
--- /dev/null
+++ b/tests/snippets/wikitext/extlink.txt
@@ -0,0 +1,292 @@
+---input---
+[https://www.wikipedia.org Wikipedia]
+
+[https://www.wikipedia.org]
+
+https://www.wikipedia.org
+
+<span class="plainlinks">[https://www.wikipedia.org Wikipedia]</span>
+
+Single square brackets holding
+[text without a HTTP URL] are
+preserved, but single square
+brackets containing a URL are
+treated as being an external
+[https://example.com/ Web link].
+
+[https://www.wikipedia.org ''Wiki'''''pedi'''a]
+
+tel:1145141919810
+
+[tel:1145141919810 telephone me]
+
+[https://www.google.com [[a]]]
+
+https://www.example.com
+
+[https://www.exampke.com]
+
+[//example.com]
+
+[//example.com a b c]
+
+[//example.com a ''b'' c <nowiki>[//example.com a ''b'' c]</nowiki><includeonly/><div class="a"/> d]
+
+[{{fullurl:Help:Wiki markup|action=edit}} edit]
+
+---tokens---
+'[' Punctuation
+'https://www.wikipedia.org' Name.Label
+' ' Text.Whitespace
+'Wikipedia' Text
+']' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[' Punctuation
+'https://www.wikipedia.org' Name.Label
+']' Punctuation
+'\n' Text
+
+'\n' Text
+
+'https://www.wikipedia.org' Name.Label
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'span' Name.Tag
+' ' Text.Whitespace
+'class' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'plainlinks' Literal.String.Double
+'"' Literal.String.Double
+'>' Punctuation
+'[' Punctuation
+'https://www.wikipedia.org' Name.Label
+' ' Text.Whitespace
+'Wikipedia' Text
+']' Punctuation
+'</' Punctuation
+'span' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'Single' Text
+' ' Text
+'square' Text
+' ' Text
+'brackets' Text
+' ' Text
+'holding' Text
+'\n' Text
+
+'[' Text
+'text' Text
+' ' Text
+'without' Text
+' ' Text
+'a' Text
+' ' Text
+'HTTP' Text
+' ' Text
+'URL' Text
+']' Text
+' ' Text
+'are' Text
+'\n' Text
+
+'preserved' Text
+',' Text
+' ' Text
+'but' Text
+' ' Text
+'single' Text
+' ' Text
+'square' Text
+'\n' Text
+
+'brackets' Text
+' ' Text
+'containing' Text
+' ' Text
+'a' Text
+' ' Text
+'URL' Text
+' ' Text
+'are' Text
+'\n' Text
+
+'treated' Text
+' ' Text
+'as' Text
+' ' Text
+'being' Text
+' ' Text
+'an' Text
+' ' Text
+'external' Text
+'\n' Text
+
+'[' Punctuation
+'https://example.com/' Name.Label
+' ' Text.Whitespace
+'Web' Text
+' ' Text
+'link' Text
+']' Punctuation
+'.' Text
+'\n' Text
+
+'\n' Text
+
+'[' Punctuation
+'https://www.wikipedia.org' Name.Label
+' ' Text.Whitespace
+"''" Generic.Emph
+'Wiki' Generic.Emph
+"''" Generic.Emph
+"'''" Generic.Strong
+'pedi' Generic.Strong
+"'''" Generic.Strong
+'a' Text
+']' Punctuation
+'\n' Text
+
+'\n' Text
+
+'tel:1145141919810' Name.Label
+'\n' Text
+
+'\n' Text
+
+'[' Punctuation
+'tel:1145141919810' Name.Label
+' ' Text.Whitespace
+'telephone' Text
+' ' Text
+'me' Text
+']' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[' Punctuation
+'https://www.google.com' Name.Label
+' ' Text.Whitespace
+'[[' Punctuation
+'a' Name.Tag
+']]' Punctuation
+']' Punctuation
+'\n' Text
+
+'\n' Text
+
+'https://www.example.com' Name.Label
+'\n' Text
+
+'\n' Text
+
+'[' Punctuation
+'https://www.exampke.com' Name.Label
+']' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[' Punctuation
+'//example.com' Name.Label
+']' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[' Punctuation
+'//example.com' Name.Label
+' ' Text.Whitespace
+'a' Text
+' ' Text
+'b' Text
+' ' Text
+'c' Text
+']' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[' Punctuation
+'//example.com' Name.Label
+' ' Text.Whitespace
+'a' Text
+' ' Text
+"''" Generic.Emph
+'b' Generic.Emph
+"''" Generic.Emph
+' ' Text
+'c' Text
+' ' Text
+'<' Punctuation
+'nowiki' Name.Tag
+'>' Punctuation
+'[' Text
+'/' Text
+'/' Text
+'example' Text
+'.' Text
+'com' Text
+' ' Text
+'a' Text
+' ' Text
+"'" Text
+"'" Text
+'b' Text
+"'" Text
+"'" Text
+' ' Text
+'c' Text
+']' Text
+'</' Punctuation
+'nowiki' Name.Tag
+'>' Punctuation
+'<' Punctuation
+'includeonly' Name.Tag
+'/>' Punctuation
+'<' Punctuation
+'div' Name.Tag
+' ' Text.Whitespace
+'class' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'a' Literal.String.Double
+'"' Literal.String.Double
+'/>' Punctuation
+' ' Text
+'d' Text
+']' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[' Text
+'{{' Punctuation
+'fullurl' Name.Function
+':' Punctuation
+'Help' Text
+':' Text
+'Wiki' Text
+' ' Text
+'markup' Text
+'|' Punctuation
+'action' Name.Label
+'=' Operator
+'edit' Text
+'}}' Punctuation
+' ' Text
+'edit' Text
+']' Text
+'\n' Text
diff --git a/tests/snippets/wikitext/heading.txt b/tests/snippets/wikitext/heading.txt
new file mode 100644
index 00000000..ce241187
--- /dev/null
+++ b/tests/snippets/wikitext/heading.txt
@@ -0,0 +1,53 @@
+---input---
+= Heading 1 =
+== Heading 2 ==
+=== Heading 3 ===
+==== Heading 4 ====
+===== Heading 5 =====
+====== Heading 6 ======
+
+== [[Heading|''Heading'']] ==
+
+==
+===
+
+---tokens---
+'= Heading 1 =' Generic.Heading
+'\n' Text.Whitespace
+
+'==' Generic.Subheading
+' Heading 2 ' Generic.Subheading
+'==' Generic.Subheading
+'\n' Text.Whitespace
+
+'===' Generic.Subheading
+' Heading 3 ' Generic.Subheading
+'===' Generic.Subheading
+'\n' Text.Whitespace
+
+'====' Generic.Subheading
+' Heading 4 ' Generic.Subheading
+'====' Generic.Subheading
+'\n' Text.Whitespace
+
+'=====' Generic.Subheading
+' Heading 5 ' Generic.Subheading
+'=====' Generic.Subheading
+'\n' Text.Whitespace
+
+'======' Generic.Subheading
+' Heading 6 ' Generic.Subheading
+'======' Generic.Subheading
+'\n\n' Text.Whitespace
+
+'==' Generic.Subheading
+" [[Heading|''Heading'']] " Generic.Subheading
+'==' Generic.Subheading
+'\n\n' Text.Whitespace
+
+'=' Text
+'=' Text
+'\n' Text
+
+'===' Generic.Heading
+'\n' Text.Whitespace
diff --git a/tests/snippets/wikitext/hr.txt b/tests/snippets/wikitext/hr.txt
new file mode 100644
index 00000000..46499b09
--- /dev/null
+++ b/tests/snippets/wikitext/hr.txt
@@ -0,0 +1,42 @@
+---input---
+-
+--
+---
+----
+-----
+------
+-------
+--------
+--------foo
+
+---tokens---
+'-' Text
+'\n' Text
+
+'-' Text
+'-' Text
+'\n' Text
+
+'-' Text
+'-' Text
+'-' Text
+'\n' Text
+
+'----' Keyword
+'\n' Text
+
+'-----' Keyword
+'\n' Text
+
+'------' Keyword
+'\n' Text
+
+'-------' Keyword
+'\n' Text
+
+'--------' Keyword
+'\n' Text
+
+'--------' Keyword
+'foo' Text
+'\n' Text
diff --git a/tests/snippets/wikitext/html.txt b/tests/snippets/wikitext/html.txt
new file mode 100644
index 00000000..7fc96eec
--- /dev/null
+++ b/tests/snippets/wikitext/html.txt
@@ -0,0 +1,449 @@
+---input---
+<div class="center" style="width: auto; margin-left: auto; margin-right: auto;">Centered text</div>
+
+<blockquote>
+The '''blockquote''' tag will indent both margins when needed instead of the left margin only as the colon does.
+</blockquote>
+
+<div>
+#123
+:456
+----
+</div>
+
+Use <small >small text</small> only when necessary.
+
+To match, for example, the font-size used in an image caption, the "small" tag can also be used to
+<small style="font-size:87%;">reduce a text's font-size to 87%</small>.
+
+Better not use <big>big text</big>, unless <small>it's <big>within</big> small</small> text.
+
+x<sub>1</sub> x<sub>2</sub> x<sub>3</sub>
+
+function <code>int m2()</code> is nice.
+
+You can <del>indicate deleted material</del> and <ins>inserted material</ins>.
+
+<div ></div >
+
+<span <!-- this is a comment --> ></span>
+
+<span class="citation {{{Citation class|{{{Citation type|}}}}}}"></span>
+
+<a></a>
+
+---tokens---
+'<' Punctuation
+'div' Name.Tag
+' ' Text.Whitespace
+'class' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'center' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'width' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'auto' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'margin' Literal.String.Double
+'-' Literal.String.Double
+'left' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'auto' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'margin' Literal.String.Double
+'-' Literal.String.Double
+'right' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'auto' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+'>' Punctuation
+'Centered' Text
+' ' Text
+'text' Text
+'</' Punctuation
+'div' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'blockquote' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'The' Text
+' ' Text
+"'''" Generic.Strong
+'blockquote' Generic.Strong
+"'''" Generic.Strong
+' ' Text
+'tag' Text
+' ' Text
+'will' Text
+' ' Text
+'indent' Text
+' ' Text
+'both' Text
+' ' Text
+'margins' Text
+' ' Text
+'when' Text
+' ' Text
+'needed' Text
+' ' Text
+'instead' Text
+' ' Text
+'of' Text
+' ' Text
+'the' Text
+' ' Text
+'left' Text
+' ' Text
+'margin' Text
+' ' Text
+'only' Text
+' ' Text
+'as' Text
+' ' Text
+'the' Text
+' ' Text
+'colon' Text
+' ' Text
+'does' Text
+'.' Text
+'\n' Text
+
+'</' Punctuation
+'blockquote' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'div' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'#' Keyword
+'123' Text
+'\n' Text
+
+':' Keyword
+'456' Text
+'\n' Text
+
+'----' Keyword
+'\n' Text
+
+'</' Punctuation
+'div' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'Use' Text
+' ' Text
+'<' Punctuation
+'small' Name.Tag
+' >' Punctuation
+'small' Text
+' ' Text
+'text' Text
+'</' Punctuation
+'small' Name.Tag
+'>' Punctuation
+' ' Text
+'only' Text
+' ' Text
+'when' Text
+' ' Text
+'necessary' Text
+'.' Text
+'\n' Text
+
+'\n' Text
+
+'To' Text
+' ' Text
+'match' Text
+',' Text
+' ' Text
+'for' Text
+' ' Text
+'example' Text
+',' Text
+' ' Text
+'the' Text
+' ' Text
+'font' Text
+'-' Text
+'size' Text
+' ' Text
+'used' Text
+' ' Text
+'in' Text
+' ' Text
+'an' Text
+' ' Text
+'image' Text
+' ' Text
+'caption' Text
+',' Text
+' ' Text
+'the' Text
+' ' Text
+'"' Text
+'small' Text
+'"' Text
+' ' Text
+'tag' Text
+' ' Text
+'can' Text
+' ' Text
+'also' Text
+' ' Text
+'be' Text
+' ' Text
+'used' Text
+' ' Text
+'to' Text
+'\n' Text
+
+'<' Punctuation
+'small' Name.Tag
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'font' Literal.String.Double
+'-' Literal.String.Double
+'size' Literal.String.Double
+':' Literal.String.Double
+'87' Literal.String.Double
+'%' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+'>' Punctuation
+'reduce' Text
+' ' Text
+'a' Text
+' ' Text
+'text' Text
+"'" Text
+'s' Text
+' ' Text
+'font' Text
+'-' Text
+'size' Text
+' ' Text
+'to' Text
+' ' Text
+'87' Text
+'%' Text
+'</' Punctuation
+'small' Name.Tag
+'>' Punctuation
+'.' Text
+'\n' Text
+
+'\n' Text
+
+'Better' Text
+' ' Text
+'not' Text
+' ' Text
+'use' Text
+' ' Text
+'<' Punctuation
+'big' Name.Tag
+'>' Punctuation
+'big' Text
+' ' Text
+'text' Text
+'</' Punctuation
+'big' Name.Tag
+'>' Punctuation
+',' Text
+' ' Text
+'unless' Text
+' ' Text
+'<' Punctuation
+'small' Name.Tag
+'>' Punctuation
+'it' Text
+"'" Text
+'s' Text
+' ' Text
+'<' Punctuation
+'big' Name.Tag
+'>' Punctuation
+'within' Text
+'</' Punctuation
+'big' Name.Tag
+'>' Punctuation
+' ' Text
+'small' Text
+'</' Punctuation
+'small' Name.Tag
+'>' Punctuation
+' ' Text
+'text' Text
+'.' Text
+'\n' Text
+
+'\n' Text
+
+'x' Text
+'<' Punctuation
+'sub' Name.Tag
+'>' Punctuation
+'1' Text
+'</' Punctuation
+'sub' Name.Tag
+'>' Punctuation
+' ' Text
+'x' Text
+'<' Punctuation
+'sub' Name.Tag
+'>' Punctuation
+'2' Text
+'</' Punctuation
+'sub' Name.Tag
+'>' Punctuation
+' ' Text
+'x' Text
+'<' Punctuation
+'sub' Name.Tag
+'>' Punctuation
+'3' Text
+'</' Punctuation
+'sub' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'function' Text
+' ' Text
+'<' Punctuation
+'code' Name.Tag
+'>' Punctuation
+'int' Text
+' ' Text
+'m2' Text
+'(' Text
+')' Text
+'</' Punctuation
+'code' Name.Tag
+'>' Punctuation
+' ' Text
+'is' Text
+' ' Text
+'nice' Text
+'.' Text
+'\n' Text
+
+'\n' Text
+
+'You' Text
+' ' Text
+'can' Text
+' ' Text
+'<' Punctuation
+'del' Name.Tag
+'>' Punctuation
+'indicate' Text
+' ' Text
+'deleted' Text
+' ' Text
+'material' Text
+'</' Punctuation
+'del' Name.Tag
+'>' Punctuation
+' ' Text
+'and' Text
+' ' Text
+'<' Punctuation
+'ins' Name.Tag
+'>' Punctuation
+'inserted' Text
+' ' Text
+'material' Text
+'</' Punctuation
+'ins' Name.Tag
+'>' Punctuation
+'.' Text
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'div' Name.Tag
+' >' Punctuation
+'</' Punctuation
+'div' Name.Tag
+' ' Text.Whitespace
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'span' Name.Tag
+' ' Text.Whitespace
+'<!-- this is a comment -->' Comment.Multiline
+' >' Punctuation
+'</' Punctuation
+'span' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'span' Name.Tag
+' ' Text.Whitespace
+'class' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'citation' Literal.String.Double
+' ' Literal.String.Double
+'{{{' Punctuation
+'Citation class' Name.Variable
+'|' Punctuation
+'{{{' Punctuation
+'Citation type' Name.Variable
+'|' Punctuation
+'}}}' Punctuation
+'}}}' Punctuation
+'"' Literal.String.Double
+'>' Punctuation
+'</' Punctuation
+'span' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Text
+'a' Text
+'>' Text
+'<' Text
+'/' Text
+'a' Text
+'>' Text
+'\n' Text
diff --git a/tests/snippets/wikitext/language-converter.txt b/tests/snippets/wikitext/language-converter.txt
new file mode 100644
index 00000000..c8fef97f
--- /dev/null
+++ b/tests/snippets/wikitext/language-converter.txt
@@ -0,0 +1,273 @@
+---input---
+-{H|zh-cn:[[博客]]; zh-hk:網誌; zh-tw:部落格}-
+-{H|zh-cn:博客; zh-hk:網誌; zh-tw:部落格;}-
+-{H|zh-cn:[[博客]]; zh-hk:網誌; zh-tw:部落格; }-
+
+-{zh-cn:[[博客]]; zh-hk:網誌; zh-tw:部落格}-
+-{zh-cn:博客; zh-hk:網誌; zh-tw:部落格;}-
+-{zh-cn:[[博客]]; zh-hk:網誌; zh-tw:部落格; }-
+
+-{zh-tw=>zh-cn:[[博客]];zh-hk=>zh-cn:[[博客]]; }-
+
+-{部落格}- -{[[部落格]]}-
+
+-{zh-cn:-{[[博客]]}-; zh-invalid:網誌; zh-tw:部落格}-
+
+-{zh-invalid:''a''[[博客]];;;zh-cn:a}-
+-{zh:''a''[[博客]]}-
+
+-{zh-hans:<span style="font-size:120%;">xxx</span>;zh-hant:\
+<span style="font-size:120%;">yyy</span>;}-
+
+---tokens---
+'-{' Punctuation
+'H' Keyword
+'|' Punctuation
+'zh-cn' Name.Label
+':' Punctuation
+'[[' Punctuation
+'博客' Name.Tag
+']]' Punctuation
+';' Punctuation
+' zh-hk' Name.Label
+':' Punctuation
+'網誌' Text
+';' Punctuation
+' zh-tw' Name.Label
+':' Punctuation
+'部落格' Text
+'}-' Punctuation
+'\n' Text
+
+'-{' Punctuation
+'H' Keyword
+'|' Punctuation
+'zh-cn' Name.Label
+':' Punctuation
+'博客' Text
+';' Punctuation
+' zh-hk' Name.Label
+':' Punctuation
+'網誌' Text
+';' Punctuation
+' zh-tw' Name.Label
+':' Punctuation
+'部落格' Text
+';}-' Punctuation
+'\n' Text
+
+'-{' Punctuation
+'H' Keyword
+'|' Punctuation
+'zh-cn' Name.Label
+':' Punctuation
+'[[' Punctuation
+'博客' Name.Tag
+']]' Punctuation
+';' Punctuation
+' zh-hk' Name.Label
+':' Punctuation
+'網誌' Text
+';' Punctuation
+' zh-tw' Name.Label
+':' Punctuation
+'部落格' Text
+'; }-' Punctuation
+'\n' Text
+
+'\n' Text
+
+'-{' Punctuation
+'zh-cn' Name.Label
+':' Punctuation
+'[[' Punctuation
+'博客' Name.Tag
+']]' Punctuation
+';' Punctuation
+' zh-hk' Name.Label
+':' Punctuation
+'網誌' Text
+';' Punctuation
+' zh-tw' Name.Label
+':' Punctuation
+'部落格' Text
+'}-' Punctuation
+'\n' Text
+
+'-{' Punctuation
+'zh-cn' Name.Label
+':' Punctuation
+'博客' Text
+';' Punctuation
+' zh-hk' Name.Label
+':' Punctuation
+'網誌' Text
+';' Punctuation
+' zh-tw' Name.Label
+':' Punctuation
+'部落格' Text
+';}-' Punctuation
+'\n' Text
+
+'-{' Punctuation
+'zh-cn' Name.Label
+':' Punctuation
+'[[' Punctuation
+'博客' Name.Tag
+']]' Punctuation
+';' Punctuation
+' zh-hk' Name.Label
+':' Punctuation
+'網誌' Text
+';' Punctuation
+' zh-tw' Name.Label
+':' Punctuation
+'部落格' Text
+'; }-' Punctuation
+'\n' Text
+
+'\n' Text
+
+'-{' Punctuation
+'zh-tw' Name.Label
+'=>' Operator
+'zh-cn' Name.Label
+':' Punctuation
+'[[' Punctuation
+'博客' Name.Tag
+']]' Punctuation
+';' Punctuation
+'zh-hk' Name.Label
+'=>' Operator
+'zh-cn' Name.Label
+':' Punctuation
+'[[' Punctuation
+'博客' Name.Tag
+']]' Punctuation
+'; }-' Punctuation
+'\n' Text
+
+'\n' Text
+
+'-{' Punctuation
+'部落格' Text
+'}-' Punctuation
+' ' Text
+'-{' Punctuation
+'[[' Punctuation
+'部落格' Name.Tag
+']]' Punctuation
+'}-' Punctuation
+'\n' Text
+
+'\n' Text
+
+'-{' Punctuation
+'zh-cn' Name.Label
+':' Punctuation
+'-{' Punctuation
+'[[' Punctuation
+'博客' Name.Tag
+']]' Punctuation
+'}-' Punctuation
+';' Text
+' ' Text
+'zh' Text
+'-' Text
+'invalid' Text
+':' Text
+'網誌' Text
+';' Punctuation
+' zh-tw' Name.Label
+':' Punctuation
+'部落格' Text
+'}-' Punctuation
+'\n' Text
+
+'\n' Text
+
+'-{' Punctuation
+'zh' Text
+'-' Text
+'invalid' Text
+':' Text
+"''" Generic.Emph
+'a' Generic.Emph
+"''" Generic.Emph
+'[[' Punctuation
+'博客' Name.Tag
+']]' Punctuation
+';' Text
+';' Text
+';' Text
+'zh' Text
+'-' Text
+'cn' Text
+':' Text
+'a' Text
+'}-' Punctuation
+'\n' Text
+
+'-{' Punctuation
+'zh' Name.Label
+':' Punctuation
+"''" Generic.Emph
+'a' Generic.Emph
+"''" Generic.Emph
+'[[' Punctuation
+'博客' Name.Tag
+']]' Punctuation
+'}-' Punctuation
+'\n' Text
+
+'\n' Text
+
+'-{' Punctuation
+'zh-hans' Name.Label
+':' Punctuation
+'<' Punctuation
+'span' Name.Tag
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'font' Literal.String.Double
+'-' Literal.String.Double
+'size' Literal.String.Double
+':' Literal.String.Double
+'120' Literal.String.Double
+'%' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+'>' Punctuation
+'xxx' Text
+'</' Punctuation
+'span' Name.Tag
+'>' Punctuation
+';' Punctuation
+'zh-hant' Name.Label
+':' Punctuation
+'\\' Text
+'\n' Text
+
+'<' Punctuation
+'span' Name.Tag
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'font' Literal.String.Double
+'-' Literal.String.Double
+'size' Literal.String.Double
+':' Literal.String.Double
+'120' Literal.String.Double
+'%' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+'>' Punctuation
+'yyy' Text
+'</' Punctuation
+'span' Name.Tag
+'>' Punctuation
+';}-' Punctuation
+'\n' Text
diff --git a/tests/snippets/wikitext/list.txt b/tests/snippets/wikitext/list.txt
new file mode 100644
index 00000000..10613a18
--- /dev/null
+++ b/tests/snippets/wikitext/list.txt
@@ -0,0 +1,532 @@
+---input---
+; Term : Definition1
+: Definition2
+
+; '''Term'''
+: Definition1
+: Definition2
+: Definition3
+: Definition4
+
+; [[Wikipedia:Term#123|Blah]] : Definition1
+
+; [[Wikipedia:Term#123|Blah]] 
+: Definition1
+
+# Item1
+# ''Item2''
+# Item3
+# [[Item4]]
+## Sub-item 1
+### Sub-sub-item
+#### Sub-sub-sub-item
+## Sub-item 2
+# Item5
+
+* Item1
+* '''Item2'''
+* Item3
+* [[Item4]]
+** Sub-item 4 a)
+*** Sub-item 4 a) 1.
+**** Sub-item 4 a) 1. i)
+**** Sub-item 4 a) 1. ii)
+** Sub-item 4 b)
+* Item5
+
+Indentation as used on talk pages:
+:[[Each]] ''colon'' at the '''start''' of a line
+::causes the line to be indented by three more character positions.
+:::(The indentation persists
+so long as no carriage return or line break is used.)
+:::Repeat the indentation at any line break.
+::::Use an extra colon for each response.
+:::::And so forth ...
+::::::And so on ...
+{{Outdent|::::::}}The outdent template can give a visual indicator that we're deliberately cancelling the indent (6 levels here)
+
+:*# Mixed list
+::##:*: Complex mixed list
+
+---tokens---
+';' Keyword
+' ' Text
+'Term' Text
+' ' Text
+':' Keyword
+' ' Text
+'Definition1' Text
+'\n' Text
+
+':' Keyword
+' ' Text
+'Definition2' Text
+'\n' Text
+
+'\n' Text
+
+';' Keyword
+' ' Text
+"'''" Generic.Strong
+'Term' Generic.Strong
+"'''" Generic.Strong
+'\n' Text
+
+':' Keyword
+' ' Text
+'Definition1' Text
+'\n' Text
+
+':' Keyword
+' ' Text
+'Definition2' Text
+'\n' Text
+
+':' Keyword
+' ' Text
+'Definition3' Text
+'\n' Text
+
+':' Keyword
+' ' Text
+'Definition4' Text
+'\n' Text
+
+'\n' Text
+
+';' Keyword
+' ' Text
+'[[' Punctuation
+'Wikipedia' Name.Namespace
+':' Punctuation
+'Term' Name.Tag
+'#' Punctuation
+'123' Name.Label
+'|' Punctuation
+'Blah' Text
+']]' Punctuation
+'\xa0' Text
+':' Keyword
+' ' Text
+'Definition1' Text
+'\n' Text
+
+'\n' Text
+
+';' Keyword
+' ' Text
+'[[' Punctuation
+'Wikipedia' Name.Namespace
+':' Punctuation
+'Term' Name.Tag
+'#' Punctuation
+'123' Name.Label
+'|' Punctuation
+'Blah' Text
+']]' Punctuation
+'\xa0' Text
+'\n' Text
+
+':' Keyword
+' ' Text
+'Definition1' Text
+'\n' Text
+
+'\n' Text
+
+'#' Keyword
+' ' Text
+'Item1' Text
+'\n' Text
+
+'#' Keyword
+' ' Text
+"''" Generic.Emph
+'Item2' Generic.Emph
+"''" Generic.Emph
+'\n' Text
+
+'#' Keyword
+' ' Text
+'Item3' Text
+'\n' Text
+
+'#' Keyword
+' ' Text
+'[[' Punctuation
+'Item4' Name.Tag
+']]' Punctuation
+'\n' Text
+
+'##' Keyword
+' ' Text
+'Sub' Text
+'-' Text
+'item' Text
+' ' Text
+'1' Text
+'\n' Text
+
+'###' Keyword
+' ' Text
+'Sub' Text
+'-' Text
+'sub' Text
+'-' Text
+'item' Text
+'\n' Text
+
+'####' Keyword
+' ' Text
+'Sub' Text
+'-' Text
+'sub' Text
+'-' Text
+'sub' Text
+'-' Text
+'item' Text
+'\n' Text
+
+'##' Keyword
+' ' Text
+'Sub' Text
+'-' Text
+'item' Text
+' ' Text
+'2' Text
+'\n' Text
+
+'#' Keyword
+' ' Text
+'Item5' Text
+'\n' Text
+
+'\n' Text
+
+'*' Keyword
+' ' Text
+'Item1' Text
+'\n' Text
+
+'*' Keyword
+' ' Text
+"'''" Generic.Strong
+'Item2' Generic.Strong
+"'''" Generic.Strong
+'\n' Text
+
+'*' Keyword
+' ' Text
+'Item3' Text
+'\n' Text
+
+'*' Keyword
+' ' Text
+'[[' Punctuation
+'Item4' Name.Tag
+']]' Punctuation
+'\n' Text
+
+'**' Keyword
+' ' Text
+'Sub' Text
+'-' Text
+'item' Text
+' ' Text
+'4' Text
+' ' Text
+'a' Text
+')' Text
+'\n' Text
+
+'***' Keyword
+' ' Text
+'Sub' Text
+'-' Text
+'item' Text
+' ' Text
+'4' Text
+' ' Text
+'a' Text
+')' Text
+' ' Text
+'1' Text
+'.' Text
+'\n' Text
+
+'****' Keyword
+' ' Text
+'Sub' Text
+'-' Text
+'item' Text
+' ' Text
+'4' Text
+' ' Text
+'a' Text
+')' Text
+' ' Text
+'1' Text
+'.' Text
+' ' Text
+'i' Text
+')' Text
+'\n' Text
+
+'****' Keyword
+' ' Text
+'Sub' Text
+'-' Text
+'item' Text
+' ' Text
+'4' Text
+' ' Text
+'a' Text
+')' Text
+' ' Text
+'1' Text
+'.' Text
+' ' Text
+'ii' Text
+')' Text
+'\n' Text
+
+'**' Keyword
+' ' Text
+'Sub' Text
+'-' Text
+'item' Text
+' ' Text
+'4' Text
+' ' Text
+'b' Text
+')' Text
+'\n' Text
+
+'*' Keyword
+' ' Text
+'Item5' Text
+'\n' Text
+
+'\n' Text
+
+'Indentation' Text
+' ' Text
+'as' Text
+' ' Text
+'used' Text
+' ' Text
+'on' Text
+' ' Text
+'talk' Text
+' ' Text
+'pages' Text
+':' Text
+'\n' Text
+
+':' Keyword
+'[[' Punctuation
+'Each' Name.Tag
+']]' Punctuation
+' ' Text
+"''" Generic.Emph
+'colon' Generic.Emph
+"''" Generic.Emph
+' ' Text
+'at' Text
+' ' Text
+'the' Text
+' ' Text
+"'''" Generic.Strong
+'start' Generic.Strong
+"'''" Generic.Strong
+' ' Text
+'of' Text
+' ' Text
+'a' Text
+' ' Text
+'line' Text
+'\n' Text
+
+'::' Keyword
+'causes' Text
+' ' Text
+'the' Text
+' ' Text
+'line' Text
+' ' Text
+'to' Text
+' ' Text
+'be' Text
+' ' Text
+'indented' Text
+' ' Text
+'by' Text
+' ' Text
+'three' Text
+' ' Text
+'more' Text
+' ' Text
+'character' Text
+' ' Text
+'positions' Text
+'.' Text
+'\n' Text
+
+':::' Keyword
+'(' Text
+'The' Text
+' ' Text
+'indentation' Text
+' ' Text
+'persists' Text
+'\n' Text
+
+'so' Text
+' ' Text
+'long' Text
+' ' Text
+'as' Text
+' ' Text
+'no' Text
+' ' Text
+'carriage' Text
+' ' Text
+'return' Text
+' ' Text
+'or' Text
+' ' Text
+'line' Text
+' ' Text
+'break' Text
+' ' Text
+'is' Text
+' ' Text
+'used' Text
+'.' Text
+')' Text
+'\n' Text
+
+':::' Keyword
+'Repeat' Text
+' ' Text
+'the' Text
+' ' Text
+'indentation' Text
+' ' Text
+'at' Text
+' ' Text
+'any' Text
+' ' Text
+'line' Text
+' ' Text
+'break' Text
+'.' Text
+'\n' Text
+
+'::::' Keyword
+'Use' Text
+' ' Text
+'an' Text
+' ' Text
+'extra' Text
+' ' Text
+'colon' Text
+' ' Text
+'for' Text
+' ' Text
+'each' Text
+' ' Text
+'response' Text
+'.' Text
+'\n' Text
+
+':::::' Keyword
+'And' Text
+' ' Text
+'so' Text
+' ' Text
+'forth' Text
+' ' Text
+'.' Text
+'.' Text
+'.' Text
+'\n' Text
+
+'::::::' Keyword
+'And' Text
+' ' Text
+'so' Text
+' ' Text
+'on' Text
+' ' Text
+'.' Text
+'.' Text
+'.' Text
+'\n' Text
+
+'{{' Punctuation
+'Outdent' Name.Tag
+'|' Punctuation
+':' Text
+':' Text
+':' Text
+':' Text
+':' Text
+':' Text
+'}}' Punctuation
+'The' Text
+' ' Text
+'outdent' Text
+' ' Text
+'template' Text
+' ' Text
+'can' Text
+' ' Text
+'give' Text
+' ' Text
+'a' Text
+' ' Text
+'visual' Text
+' ' Text
+'indicator' Text
+' ' Text
+'that' Text
+' ' Text
+'we' Text
+"'" Text
+'re' Text
+' ' Text
+'deliberately' Text
+' ' Text
+'cancelling' Text
+' ' Text
+'the' Text
+' ' Text
+'indent' Text
+' ' Text
+'(' Text
+'6' Text
+' ' Text
+'levels' Text
+' ' Text
+'here' Text
+')' Text
+'\n' Text
+
+'\n' Text
+
+':*#' Keyword
+' ' Text
+'Mixed' Text
+' ' Text
+'list' Text
+'\n' Text
+
+'::##:*:' Keyword
+' ' Text
+'Complex' Text
+' ' Text
+'mixed' Text
+' ' Text
+'list' Text
+'\n' Text
diff --git a/tests/snippets/wikitext/magic-link.txt b/tests/snippets/wikitext/magic-link.txt
new file mode 100644
index 00000000..836f75ea
--- /dev/null
+++ b/tests/snippets/wikitext/magic-link.txt
@@ -0,0 +1,52 @@
+---input---
+RFC 1
+RFC 2
+RFC 3f
+rfc 4
+PMID&nbsp;&#160; &#x0a0;114514
+ISBN 978-3-16-148410-0
+ISBN 978&nbsp;3 16-148410&#160;0
+https://example.com
+irc://example.com
+nolink://example.com
+
+---tokens---
+'RFC 1' Name.Function.Magic
+'\n' Text
+
+'RFC 2' Name.Function.Magic
+'\n' Text
+
+'RFC' Text
+' ' Text
+'3f' Text
+'\n' Text
+
+'rfc' Text
+' ' Text
+'4' Text
+'\n' Text
+
+'PMID&nbsp;&#160; &#x0a0;114514' Name.Function.Magic
+'\n' Text
+
+'ISBN 978-3-16-148410-0' Name.Function.Magic
+'\n' Text
+
+'ISBN 978&nbsp;3 16-148410&#160;0' Name.Function.Magic
+'\n' Text
+
+'https://example.com' Name.Label
+'\n' Text
+
+'irc://example.com' Name.Label
+'\n' Text
+
+'nolink' Text
+':' Text
+'/' Text
+'/' Text
+'example' Text
+'.' Text
+'com' Text
+'\n' Text
diff --git a/tests/snippets/wikitext/magic-word.txt b/tests/snippets/wikitext/magic-word.txt
new file mode 100644
index 00000000..e0736baf
--- /dev/null
+++ b/tests/snippets/wikitext/magic-word.txt
@@ -0,0 +1,157 @@
+---input---
+__NOTOC__
+__FORCETOC__
+__TOC__
+__NOEDITSECTION__
+__NEWSECTIONLINK__
+__NONEWSECTIONLINK__
+__NOGALLERY__
+__HIDDENCAT__
+__EXPECTUNUSEDCATEGORY__
+__NOCONTENTCONVERT__
+__NOCC__
+__NOTITLECONVERT__
+__NOTC__
+__INDEX__
+__NOINDEX__
+__STATICREDIRECT__
+__NOGLOBAL__
+__DISAMBIG__
+__EXPECTED_UNCONNECTED_PAGE__
+
+__notoc__
+__forcetoc__
+__toc__
+__noeditsection__
+__newsectionlink__
+__nonewsectionlink__
+__nogallery__
+__hiddencat__
+__expectunusedcategory__
+__nocontentconvert__
+__nocc__
+__notitleconvert__
+__notc__
+__index__
+__noindex__
+__staticredirect__
+__noglobal__
+__disambig__
+__expected_unconnected_page__
+
+---tokens---
+'__NOTOC__' Name.Function.Magic
+'\n' Text
+
+'__FORCETOC__' Name.Function.Magic
+'\n' Text
+
+'__TOC__' Name.Function.Magic
+'\n' Text
+
+'__NOEDITSECTION__' Name.Function.Magic
+'\n' Text
+
+'__NEWSECTIONLINK__' Name.Function.Magic
+'\n' Text
+
+'__NONEWSECTIONLINK__' Name.Function.Magic
+'\n' Text
+
+'__NOGALLERY__' Name.Function.Magic
+'\n' Text
+
+'__HIDDENCAT__' Name.Function.Magic
+'\n' Text
+
+'__EXPECTUNUSEDCATEGORY__' Name.Function.Magic
+'\n' Text
+
+'__NOCONTENTCONVERT__' Name.Function.Magic
+'\n' Text
+
+'__NOCC__' Name.Function.Magic
+'\n' Text
+
+'__NOTITLECONVERT__' Name.Function.Magic
+'\n' Text
+
+'__NOTC__' Name.Function.Magic
+'\n' Text
+
+'__INDEX__' Name.Function.Magic
+'\n' Text
+
+'__NOINDEX__' Name.Function.Magic
+'\n' Text
+
+'__STATICREDIRECT__' Name.Function.Magic
+'\n' Text
+
+'__NOGLOBAL__' Name.Function.Magic
+'\n' Text
+
+'__DISAMBIG__' Name.Function.Magic
+'\n' Text
+
+'__EXPECTED_UNCONNECTED_PAGE__' Name.Function.Magic
+'\n' Text
+
+'\n' Text
+
+'__notoc__' Name.Function.Magic
+'\n' Text
+
+'__forcetoc__' Name.Function.Magic
+'\n' Text
+
+'__toc__' Name.Function.Magic
+'\n' Text
+
+'__noeditsection__' Name.Function.Magic
+'\n' Text
+
+'__newsectionlink__' Text
+'\n' Text
+
+'__nonewsectionlink__' Text
+'\n' Text
+
+'__nogallery__' Name.Function.Magic
+'\n' Text
+
+'__hiddencat__' Text
+'\n' Text
+
+'__expectunusedcategory__' Text
+'\n' Text
+
+'__nocontentconvert__' Name.Function.Magic
+'\n' Text
+
+'__nocc__' Name.Function.Magic
+'\n' Text
+
+'__notitleconvert__' Name.Function.Magic
+'\n' Text
+
+'__notc__' Name.Function.Magic
+'\n' Text
+
+'__index__' Text
+'\n' Text
+
+'__noindex__' Text
+'\n' Text
+
+'__staticredirect__' Text
+'\n' Text
+
+'__noglobal__' Text
+'\n' Text
+
+'__disambig__' Text
+'\n' Text
+
+'__expected_unconnected_page__' Text
+'\n' Text
diff --git a/tests/snippets/wikitext/medialink.txt b/tests/snippets/wikitext/medialink.txt
new file mode 100644
index 00000000..be51b8bb
--- /dev/null
+++ b/tests/snippets/wikitext/medialink.txt
@@ -0,0 +1,171 @@
+---input---
+[[File:wiki.png|thumb|Wikipedia logo]]
+[[File:wiki.png]]
+[[File:wiki.png|alt=Puzzle globe logo]]
+[[File:wiki.png|link=Wikipedia]]
+[[File:wiki.png|frame|centre|alt=Puzzle globe|Wikipedia logo]]
+[[File:wiki.png|thumb|left|alt=Puzzle globe|Wikipedia logo]]
+[[File:wiki.png|50 px|Wikipedia encyclopedia]]
+[[File:wiki.png|thumb|[[a|b]]]]
+[[File:wiki.png|thumb|[https://www.google.com]]]
+
+[[Media:wiki.png|Image of jigsaw globe]]
+[[media:Classical guitar scale.ogg|Sound]]
+
+---tokens---
+'[[' Punctuation
+'File' Name.Namespace
+':' Punctuation
+'wiki.png' Name.Tag
+'|' Punctuation
+'thumb' Text
+'|' Punctuation
+'Wikipedia' Text
+' ' Text
+'logo' Text
+']]' Punctuation
+'\n' Text
+
+'[[' Punctuation
+'File' Name.Namespace
+':' Punctuation
+'wiki.png' Name.Tag
+']]' Punctuation
+'\n' Text
+
+'[[' Punctuation
+'File' Name.Namespace
+':' Punctuation
+'wiki.png' Name.Tag
+'|' Punctuation
+'alt' Name.Attribute
+'=' Operator
+'Puzzle' Text
+' ' Text
+'globe' Text
+' ' Text
+'logo' Text
+']]' Punctuation
+'\n' Text
+
+'[[' Punctuation
+'File' Name.Namespace
+':' Punctuation
+'wiki.png' Name.Tag
+'|' Punctuation
+'link' Name.Attribute
+'=' Operator
+'Wikipedia' Text
+']]' Punctuation
+'\n' Text
+
+'[[' Punctuation
+'File' Name.Namespace
+':' Punctuation
+'wiki.png' Name.Tag
+'|' Punctuation
+'frame' Text
+'|' Punctuation
+'centre' Text
+'|' Punctuation
+'alt' Name.Attribute
+'=' Operator
+'Puzzle' Text
+' ' Text
+'globe' Text
+'|' Punctuation
+'Wikipedia' Text
+' ' Text
+'logo' Text
+']]' Punctuation
+'\n' Text
+
+'[[' Punctuation
+'File' Name.Namespace
+':' Punctuation
+'wiki.png' Name.Tag
+'|' Punctuation
+'thumb' Text
+'|' Punctuation
+'left' Text
+'|' Punctuation
+'alt' Name.Attribute
+'=' Operator
+'Puzzle' Text
+' ' Text
+'globe' Text
+'|' Punctuation
+'Wikipedia' Text
+' ' Text
+'logo' Text
+']]' Punctuation
+'\n' Text
+
+'[[' Punctuation
+'File' Name.Namespace
+':' Punctuation
+'wiki.png' Name.Tag
+'|' Punctuation
+'50' Text
+' ' Text
+'px' Text
+'|' Punctuation
+'Wikipedia' Text
+' ' Text
+'encyclopedia' Text
+']]' Punctuation
+'\n' Text
+
+'[[' Punctuation
+'File' Name.Namespace
+':' Punctuation
+'wiki.png' Name.Tag
+'|' Punctuation
+'thumb' Text
+'|' Punctuation
+'[[' Punctuation
+'a' Name.Tag
+'|' Punctuation
+'b' Text
+']]' Punctuation
+']]' Punctuation
+'\n' Text
+
+'[[' Punctuation
+'File' Name.Namespace
+':' Punctuation
+'wiki.png' Name.Tag
+'|' Punctuation
+'thumb' Text
+'|' Punctuation
+'[' Punctuation
+'https://www.google.com' Name.Label
+']' Punctuation
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'Media' Name.Namespace
+':' Punctuation
+'wiki.png' Name.Tag
+'|' Punctuation
+'Image' Text
+' ' Text
+'of' Text
+' ' Text
+'jigsaw' Text
+' ' Text
+'globe' Text
+']]' Punctuation
+'\n' Text
+
+'[[' Punctuation
+'media' Name.Namespace
+':' Punctuation
+'Classical guitar scale.ogg' Name.Tag
+'|' Punctuation
+'Sound' Text
+']]' Punctuation
+'\n' Text
diff --git a/tests/snippets/wikitext/only-highlight-first-redirect.txt b/tests/snippets/wikitext/only-highlight-first-redirect.txt
new file mode 100644
index 00000000..2ca8c1c3
--- /dev/null
+++ b/tests/snippets/wikitext/only-highlight-first-redirect.txt
@@ -0,0 +1,22 @@
+---input---
+#REDIRECT [[Test]]
+
+#REDIRECT [[Test]]
+
+---tokens---
+'#REDIRECT' Keyword
+' ' Text.Whitespace
+'[[' Punctuation
+'Test' Name.Tag
+']]' Punctuation
+'\n' Text.Whitespace
+
+'\n' Text
+
+'#' Keyword
+'REDIRECT' Text
+' ' Text
+'[[' Punctuation
+'Test' Name.Tag
+']]' Punctuation
+'\n' Text
diff --git a/tests/snippets/wikitext/parser-function.txt b/tests/snippets/wikitext/parser-function.txt
new file mode 100644
index 00000000..49e10f2c
--- /dev/null
+++ b/tests/snippets/wikitext/parser-function.txt
@@ -0,0 +1,2717 @@
+---input---
+{{#speciale:userlogin}}
+
+{{#if: 1==2 | yes | no }}
+{{#if:{{{1|}}}|You entered text in variable 1|There is no text in variable 1}}
+
+{{#ifeq: {{#expr:10^3}} | 1000 | equal | not equal}}
+
+{{#iferror: <strong class="error">a</strong> | error | correct }}
+
+{{#ifeq:{{{1}}}|condition1
+ |<!--then-->branch1t{{
+ #ifeq:{{{1}}}|condition2
+ |<!--then-->branch1t2t{{#ifeq:{{{1}}}|condition4|<!--then-->branch1t2t4t|<!--else-->branch1t2t4e}}
+ |<!--else-->branch1t2e{{#ifeq:{{{1}}}|condition5|<!--then-->branch1t2e5t|<!--else-->branch1t2e5e}}
+ }}
+ |<!--else-->branch1e{{#ifeq:{{{1}}}|condition3
+ |<!--then-->branch1e3t{{#ifeq:{{{1}}}|condition6|branch1e3t6t|branch1e3t6e}}
+ |<!--else-->branch1e3e{{
+ #ifeq:{{{1}}}|condition7
+ |branch1e3e7t
+ |branch1e3e7t
+ }}
+ }}
+}}
+
+{{CURRENTYEAR}}
+{{CURRENTMONTH}}
+{{CURRENTMONTH1}}
+{{CURRENTMONTHNAME}}
+{{CURRENTMONTHNAMEGEN}}
+{{CURRENTMONTHABBREV}}
+{{CURRENTDAY}}
+{{CURRENTDAY2}}
+{{CURRENTDOW}}
+{{CURRENTDAYNAME}}
+{{CURRENTTIME}}
+{{CURRENTHOUR}}
+{{CURRENTWEEK}}
+{{CURRENTTIMESTAMP}}
+{{LOCALYEAR}}
+{{LOCALMONTH}}
+{{LOCALMONTH1}}
+{{LOCALMONTHNAME}}
+{{LOCALMONTHNAMEGEN}}
+{{LOCALMONTHABBREV}}
+{{LOCALDAY}}
+{{LOCALDAY2}}
+{{LOCALDOW}}
+{{LOCALDAYNAME}}
+{{LOCALTIME}}
+{{LOCALHOUR}}
+{{LOCALWEEK}}
+{{LOCALTIMESTAMP}}
+{{SITENAME}}
+{{SERVER}}
+{{SERVERNAME}}
+{{DIRMARK}}
+{{DIRECTIONMARK}}
+{{SCRIPTPATH}}
+{{STYLEPATH}}
+{{CURRENTVERSION}}
+{{CONTENTLANGUAGE}}
+{{CONTENTLANG}}
+{{PAGEID}}
+{{PAGELANGUAGE}}
+{{#language:{{PAGELANGUAGE}}}}
+{{PROTECTIONLEVEL:action}}
+{{PROTECTIONEXPIRY:action}}
+{{CASCADINGSOURCES}}
+{{REVISIONID}}
+{{REVISIONDAY}}
+{{REVISIONDAY2}}
+{{REVISIONMONTH}}
+{{REVISIONMONTH1}}
+{{REVISIONYEAR}}
+{{REVISIONTIMESTAMP}}
+{{REVISIONUSER}}
+{{REVISIONSIZE}}
+{{DISPLAYTITLE:title}}
+{{DISPLAYTITLE:title|noerror}}
+{{DISPLAYTITLE:title|noreplace}}
+{{DEFAULTSORT:sortkey}}
+{{DEFAULTSORTKEY:sortkey}}
+{{DEFAULTCATEGORYSORT:sortkey}}
+{{DEFAULTSORT:sortkey|noerror}}
+{{DEFAULTSORT:sortkey|noreplace}}
+{{NUMBEROFPAGES}}
+{{NUMBEROFARTICLES}}
+{{NUMBEROFFILES}}
+{{NUMBEROFEDITS}}
+{{NUMBEROFUSERS}}
+{{NUMBEROFADMINS}}
+{{NUMBEROFACTIVEUSERS}}
+{{PAGESINCATEGORY:categoryname}}
+{{PAGESINCAT:categoryname}}
+{{PAGESINCATEGORY:categoryname|all}}
+{{PAGESINCATEGORY:categoryname|pages}}
+{{PAGESINCATEGORY:categoryname|subcats}}
+{{PAGESINCATEGORY:categoryname|files}}
+{{NUMBERINGROUP:groupname}}
+{{NUMINGROUP:groupname}}
+{{PAGESINNS:index}}
+{{PAGESINNAMESPACE:index}}
+{{FULLPAGENAME}}
+{{PAGENAME}}
+{{BASEPAGENAME}}
+{{ROOTPAGENAME}}
+{{SUBPAGENAME}}
+{{SUBJECTPAGENAME}}
+{{ARTICLEPAGENAME}}
+{{TALKPAGENAME}}
+{{PAGENAME:Template:Main Page}}
+{{PAGENAME:one/./three}}
+{{FULLPAGENAMEE}}
+{{PAGENAMEE}}
+{{BASEPAGENAMEE}}
+{{SUBPAGENAMEE}}
+{{SUBJECTPAGENAMEE}}
+{{ARTICLEPAGENAMEE}}
+{{TALKPAGENAMEE}}
+{{ROOTPAGENAMEE}}
+{{NAMESPACE}}
+{{NAMESPACENUMBER}}
+{{SUBJECTSPACE}}
+{{ARTICLESPACE}}
+{{TALKSPACE}}
+{{NAMESPACEE}}
+{{SUBJECTSPACEE}}
+{{ARTICLESPACEE}}
+{{TALKSPACEE}}
+{{NAMESPACENUMBER:MediaWiki}}
+{{NAMESPACE:MediaWiki}}
+{{NAMESPACE:Template:Main Page}}
+{{SUBJECTSPACE:Template:Main Page}}
+{{ARTICLESPACE:Template:Main Page}}
+{{TALKSPACE:Template:Main Page}}
+{{SUBJECTSPACE:Help talk}}
+{{!}}
+{{=}}
+{{PAGEID: page name }}
+{{PAGESIZE:page name}}
+{{PAGESIZE: page name |R}}
+{{PROTECTIONLEVEL:action | page name}}
+{{PROTECTIONEXPIRY: action | page name}}
+{{CASCADINGSOURCES: page name}}
+{{REVISIONID: page name }}
+{{REVISIONDAY: page name }}
+{{REVISIONDAY2: page name }}
+{{REVISIONMONTH: page name }}
+{{REVISIONMONTH1: page name }}
+{{REVISIONYEAR: page name }}
+{{REVISIONTIMESTAMP: page name }}
+{{REVISIONUSER: page name }}
+{{localurl:page name}}
+{{localurl:page name
+|query_string}}
+{{localurl:MediaWiki|printable=yes}}
+{{fullurl:page name}}
+{{fullurl:page name
+|query_string}}
+{{fullurl:interwiki:remote page name
+|query_string}}
+{{fullurl:Category:Top level|action=edit}}
+{{fullurl:s:Electra|action=edit}}
+{{fullurl:s:es:Electra|action=edit}}
+{{canonicalurl:page name}}
+{{canonicalurl:page name
+|query_string}}
+{{canonicalurl:interwiki:remote page name
+|query_string}}
+{{canonicalurl:Category:Top level|action=edit}}
+{{filepath:file name}}
+{{filepath:file name|nowiki}}
+{{filepath:file name|thumbnail_size}}
+{{filepath:Wiki.png|nowiki}}
+{{filepath:Example.svg|300}}
+{{urlencode:string}}
+{{urlencode:string|QUERY}}
+{{urlencode:string|WIKI}}
+{{urlencode:string|PATH}}
+{{urlencode:x:y/z á é|QUERY}}
+{{urlencode:x:y/z á é|WIKI}}
+{{urlencode:x:y/z á é|PATH}}
+{{anchorencode:string}}
+{{ns:}}
+{{nse:}}
+{{ns:-2}}
+{{ns:0}}
+{{ns:2}}
+{{ns:4}}
+{{ns:6}}
+{{ns:8}}
+{{ns:10}}
+{{ns:12}}
+{{ns:14}}
+{{formatnum:unformatted number}}
+{{formatnum:formatnum-formatted number|R}}
+{{formatnum:unformatted number|NOSEP}}
+{{formatnum:987654321.654321}}
+{{formatnum:987,654,321.654321|R}}
+{{formatnum:{{formatnum:987654321.654321}}}}
+{{formatnum:00001}}
+{{formatnum:987654321.654321 |NOSEP}}
+{{formatnum:987654321.654321}}
+{{formatnum:987654321.654321 |NOSEP}}
+{{formatnum:৯৮,৭৬,৫৪,৩২১.৬৫৪৩২১ |R}}
+{{formatnum:{{formatnum:987.654.321}}}}
+{{formatnum:987,654.321|R}}
+{{formatnum:987.654,321|R}}
+{{formatnum:987 654,321|R}}
+{{formatnum:987&nbsp;654,321|R}}
+{{#dateformat:date}}
+{{#formatdate:date}}
+{{#dateformat:date|format}}
+{{#formatdate:date|format}}
+{{#dateformat:25 dec 2009|ymd}}
+{{#formatdate:dec 25,2009|dmy}}
+{{#dateformat:2009-12-25|mdy}}
+{{#formatdate:2009 dec 25|ISO 8601}}
+{{#dateformat:25 decEmber|mdy}}
+{{lc:string}}
+{{lc:DATA CENTER}}
+{{lcfirst:string}}
+{{lcfirst:DATA center}}
+{{uc:string}}
+{{uc:text transform}}
+{{ucfirst:string}}
+{{ucfirst:text tRAnSFORM}}
+{{padleft:xyz|stringlength}}
+{{padleft:xyz|strlen|char}}
+{{padleft:xyz|strlen|string}}
+{{padleft:xyz|5}}
+{{padleft:xyz|5|_}}
+{{padleft:xyz|5|abc}}
+{{padleft:xyz|2}}
+{{padleft:|1|xyz}}
+{{padright:xyz|stringlength}}
+{{padright:xyz|strlen|char}}
+{{padright:xyz|strlen|string}}
+{{padright:xyz|5}}
+{{padright:xyz|5|_}}
+{{padright:xyz|5|abc}}
+{{padright:xyz|2}}
+{{padright:|1|xyz}}
+{{PLURAL:2|is|are}}
+{{PLURAL:1*1|is|are}}
+{{PLURAL:21 mod 10|is|are}}
+{{PLURAL:{{#expr:21 mod 10}}}}
+{{PLURAL:1|is|are}}
+{{PLURAL:2|is|are}}
+{{PLURAL:-1|is|are}}
+{{PLURAL:-2|is|are}}
+{{PLURAL:0.5|is|are}}
+{{PLURAL:1.5|is|are}}
+{{PLURAL:-0.5|is|are}}
+{{PLURAL:-1.5|is|are}}
+{{PLURAL:5|1=Категория|Категории}}
+{{PLURAL:3|страница|страницы|страниц}}
+{{PLURAL:5|страница|страницы|страниц}}
+{{GRAMMAR:N|noun}}
+{{GENDER:username|text for every gender}}
+{{GENDER:Username|male text|female text|text for unspecified}}
+{{GENDER:|male text|female text|text for unspecified}}
+{{GENDER:.|male text|female text|text for unspecified}}
+{{int:message name}}
+{{int:editsectionhint|MediaWiki}}
+{{Page name|optional params}}
+{{:xyz}}
+{{int:xyz}}
+{{#language:language code}}
+{{#language:language code|target language code}}
+{{#language:ar|en}}
+{{#special:special page name}}
+{{#speciale:special page name}}
+{{#tag:tagname
+|content
+|attribute1=value1
+|attribute2=value2
+}}
+{{#tag:ref|Citation on Magic words. |name = "multiple"}}
+
+---tokens---
+'{{' Punctuation
+'#speciale' Name.Function
+':' Punctuation
+'userlogin' Text
+'}}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'{{' Punctuation
+'#if' Name.Function
+':' Punctuation
+' ' Text
+'1' Text
+'=' Text
+'=' Text
+'2' Text
+' ' Text
+'|' Punctuation
+' ' Text
+'yes' Text
+' ' Text
+'|' Punctuation
+' ' Text
+'no' Text
+' ' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'#if' Name.Function
+':' Punctuation
+'{{{' Punctuation
+'1' Name.Variable
+'|' Punctuation
+'}}}' Punctuation
+'|' Punctuation
+'You' Text
+' ' Text
+'entered' Text
+' ' Text
+'text' Text
+' ' Text
+'in' Text
+' ' Text
+'variable' Text
+' ' Text
+'1' Text
+'|' Punctuation
+'There' Text
+' ' Text
+'is' Text
+' ' Text
+'no' Text
+' ' Text
+'text' Text
+' ' Text
+'in' Text
+' ' Text
+'variable' Text
+' ' Text
+'1' Text
+'}}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'{{' Punctuation
+'#ifeq' Name.Function
+':' Punctuation
+' ' Text
+'{{' Punctuation
+'#expr' Name.Function
+':' Punctuation
+'10' Text
+'^' Text
+'3' Text
+'}}' Punctuation
+' ' Text
+'|' Punctuation
+' ' Text
+'1000' Text
+' ' Text
+'|' Punctuation
+' ' Text
+'equal' Text
+' ' Text
+'|' Punctuation
+' ' Text
+'not' Text
+' ' Text
+'equal' Text
+'}}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'{{' Punctuation
+'#iferror' Name.Function
+':' Punctuation
+' ' Text
+'<' Punctuation
+'strong' Name.Tag
+' ' Text.Whitespace
+'class' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'error' Literal.String.Double
+'"' Literal.String.Double
+'>' Punctuation
+'a' Text
+'</' Punctuation
+'strong' Name.Tag
+'>' Punctuation
+' ' Text
+'|' Punctuation
+' ' Text
+'error' Text
+' ' Text
+'|' Punctuation
+' ' Text
+'correct' Text
+' ' Text
+'}}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'{{' Punctuation
+'#ifeq' Name.Function
+':' Punctuation
+'{{{' Punctuation
+'1' Name.Variable
+'}}}' Punctuation
+'|' Punctuation
+'condition1' Text
+'\n' Text
+
+' ' Text
+'|' Punctuation
+'<!--then-->' Comment.Multiline
+'branch1t' Text
+'{{' Punctuation
+'\n ' Text.Whitespace
+'#ifeq' Name.Function
+':' Punctuation
+'{{{' Punctuation
+'1' Name.Variable
+'}}}' Punctuation
+'|' Punctuation
+'condition2' Text
+'\n' Text
+
+' ' Text
+'|' Punctuation
+'<!--then-->' Comment.Multiline
+'branch1t2t' Text
+'{{' Punctuation
+'#ifeq' Name.Function
+':' Punctuation
+'{{{' Punctuation
+'1' Name.Variable
+'}}}' Punctuation
+'|' Punctuation
+'condition4' Text
+'|' Punctuation
+'<!--then-->' Comment.Multiline
+'branch1t2t4t' Text
+'|' Punctuation
+'<!--else-->' Comment.Multiline
+'branch1t2t4e' Text
+'}}' Punctuation
+'\n' Text
+
+' ' Text
+'|' Punctuation
+'<!--else-->' Comment.Multiline
+'branch1t2e' Text
+'{{' Punctuation
+'#ifeq' Name.Function
+':' Punctuation
+'{{{' Punctuation
+'1' Name.Variable
+'}}}' Punctuation
+'|' Punctuation
+'condition5' Text
+'|' Punctuation
+'<!--then-->' Comment.Multiline
+'branch1t2e5t' Text
+'|' Punctuation
+'<!--else-->' Comment.Multiline
+'branch1t2e5e' Text
+'}}' Punctuation
+'\n' Text
+
+' ' Text
+'}}' Punctuation
+'\n' Text
+
+' ' Text
+'|' Punctuation
+'<!--else-->' Comment.Multiline
+'branch1e' Text
+'{{' Punctuation
+'#ifeq' Name.Function
+':' Punctuation
+'{{{' Punctuation
+'1' Name.Variable
+'}}}' Punctuation
+'|' Punctuation
+'condition3' Text
+'\n' Text
+
+' ' Text
+'|' Punctuation
+'<!--then-->' Comment.Multiline
+'branch1e3t' Text
+'{{' Punctuation
+'#ifeq' Name.Function
+':' Punctuation
+'{{{' Punctuation
+'1' Name.Variable
+'}}}' Punctuation
+'|' Punctuation
+'condition6' Text
+'|' Punctuation
+'branch1e3t6t' Text
+'|' Punctuation
+'branch1e3t6e' Text
+'}}' Punctuation
+'\n' Text
+
+' ' Text
+'|' Punctuation
+'<!--else-->' Comment.Multiline
+'branch1e3e' Text
+'{{' Punctuation
+'\n ' Text.Whitespace
+'#ifeq' Name.Function
+':' Punctuation
+'{{{' Punctuation
+'1' Name.Variable
+'}}}' Punctuation
+'|' Punctuation
+'condition7' Text
+'\n' Text
+
+' ' Text
+'|' Punctuation
+'branch1e3e7t' Text
+'\n' Text
+
+' ' Text
+'|' Punctuation
+'branch1e3e7t' Text
+'\n' Text
+
+' ' Text
+'}}' Punctuation
+'\n' Text
+
+' ' Text
+'}}' Punctuation
+'\n' Text
+
+'}}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'{{' Punctuation
+'CURRENTYEAR' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'CURRENTMONTH' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'CURRENTMONTH1' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'CURRENTMONTHNAME' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'CURRENTMONTHNAMEGEN' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'CURRENTMONTHABBREV' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'CURRENTDAY' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'CURRENTDAY2' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'CURRENTDOW' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'CURRENTDAYNAME' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'CURRENTTIME' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'CURRENTHOUR' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'CURRENTWEEK' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'CURRENTTIMESTAMP' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'LOCALYEAR' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'LOCALMONTH' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'LOCALMONTH1' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'LOCALMONTHNAME' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'LOCALMONTHNAMEGEN' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'LOCALMONTHABBREV' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'LOCALDAY' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'LOCALDAY2' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'LOCALDOW' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'LOCALDAYNAME' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'LOCALTIME' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'LOCALHOUR' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'LOCALWEEK' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'LOCALTIMESTAMP' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'SITENAME' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'SERVER' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'SERVERNAME' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'DIRMARK' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'DIRECTIONMARK' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'SCRIPTPATH' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'STYLEPATH' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'CURRENTVERSION' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'CONTENTLANGUAGE' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'CONTENTLANG' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PAGEID' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PAGELANGUAGE' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'#language' Name.Function
+':' Punctuation
+'{{' Punctuation
+'PAGELANGUAGE' Name.Function
+'}}' Punctuation
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PROTECTIONLEVEL' Name.Function
+':' Punctuation
+'action' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PROTECTIONEXPIRY' Name.Function
+':' Punctuation
+'action' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'CASCADINGSOURCES' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'REVISIONID' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'REVISIONDAY' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'REVISIONDAY2' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'REVISIONMONTH' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'REVISIONMONTH1' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'REVISIONYEAR' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'REVISIONTIMESTAMP' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'REVISIONUSER' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'REVISIONSIZE' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'DISPLAYTITLE' Name.Function
+':' Punctuation
+'title' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'DISPLAYTITLE' Name.Function
+':' Punctuation
+'title' Text
+'|' Punctuation
+'noerror' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'DISPLAYTITLE' Name.Function
+':' Punctuation
+'title' Text
+'|' Punctuation
+'noreplace' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'DEFAULTSORT' Name.Function
+':' Punctuation
+'sortkey' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'DEFAULTSORTKEY' Name.Function
+':' Punctuation
+'sortkey' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'DEFAULTCATEGORYSORT' Name.Function
+':' Punctuation
+'sortkey' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'DEFAULTSORT' Name.Function
+':' Punctuation
+'sortkey' Text
+'|' Punctuation
+'noerror' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'DEFAULTSORT' Name.Function
+':' Punctuation
+'sortkey' Text
+'|' Punctuation
+'noreplace' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'NUMBEROFPAGES' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'NUMBEROFARTICLES' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'NUMBEROFFILES' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'NUMBEROFEDITS' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'NUMBEROFUSERS' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'NUMBEROFADMINS' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'NUMBEROFACTIVEUSERS' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PAGESINCATEGORY' Name.Function
+':' Punctuation
+'categoryname' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PAGESINCAT' Name.Function
+':' Punctuation
+'categoryname' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PAGESINCATEGORY' Name.Function
+':' Punctuation
+'categoryname' Text
+'|' Punctuation
+'all' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PAGESINCATEGORY' Name.Function
+':' Punctuation
+'categoryname' Text
+'|' Punctuation
+'pages' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PAGESINCATEGORY' Name.Function
+':' Punctuation
+'categoryname' Text
+'|' Punctuation
+'subcats' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PAGESINCATEGORY' Name.Function
+':' Punctuation
+'categoryname' Text
+'|' Punctuation
+'files' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'NUMBERINGROUP' Name.Function
+':' Punctuation
+'groupname' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'NUMINGROUP' Name.Function
+':' Punctuation
+'groupname' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PAGESINNS' Name.Function
+':' Punctuation
+'index' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PAGESINNAMESPACE' Name.Function
+':' Punctuation
+'index' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'FULLPAGENAME' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PAGENAME' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'BASEPAGENAME' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'ROOTPAGENAME' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'SUBPAGENAME' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'SUBJECTPAGENAME' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'ARTICLEPAGENAME' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'TALKPAGENAME' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PAGENAME' Name.Function
+':' Punctuation
+'Template' Text
+':' Text
+'Main' Text
+' ' Text
+'Page' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PAGENAME' Name.Function
+':' Punctuation
+'one' Text
+'/' Text
+'.' Text
+'/' Text
+'three' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'FULLPAGENAMEE' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PAGENAMEE' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'BASEPAGENAMEE' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'SUBPAGENAMEE' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'SUBJECTPAGENAMEE' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'ARTICLEPAGENAMEE' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'TALKPAGENAMEE' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'ROOTPAGENAMEE' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'NAMESPACE' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'NAMESPACENUMBER' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'SUBJECTSPACE' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'ARTICLESPACE' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'TALKSPACE' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'NAMESPACEE' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'SUBJECTSPACEE' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'ARTICLESPACEE' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'TALKSPACEE' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'NAMESPACENUMBER' Name.Function
+':' Punctuation
+'MediaWiki' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'NAMESPACE' Name.Function
+':' Punctuation
+'MediaWiki' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'NAMESPACE' Name.Function
+':' Punctuation
+'Template' Text
+':' Text
+'Main' Text
+' ' Text
+'Page' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'SUBJECTSPACE' Name.Function
+':' Punctuation
+'Template' Text
+':' Text
+'Main' Text
+' ' Text
+'Page' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'ARTICLESPACE' Name.Function
+':' Punctuation
+'Template' Text
+':' Text
+'Main' Text
+' ' Text
+'Page' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'TALKSPACE' Name.Function
+':' Punctuation
+'Template' Text
+':' Text
+'Main' Text
+' ' Text
+'Page' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'SUBJECTSPACE' Name.Function
+':' Punctuation
+'Help' Text
+' ' Text
+'talk' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'!' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'=' Name.Function
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PAGEID' Name.Function
+':' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+' ' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PAGESIZE' Name.Function
+':' Punctuation
+'page' Text
+' ' Text
+'name' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PAGESIZE' Name.Function
+':' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+' ' Text
+'|' Punctuation
+'R' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PROTECTIONLEVEL' Name.Function
+':' Punctuation
+'action' Text
+' ' Text
+'|' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PROTECTIONEXPIRY' Name.Function
+':' Punctuation
+' ' Text
+'action' Text
+' ' Text
+'|' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'CASCADINGSOURCES' Name.Function
+':' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'REVISIONID' Name.Function
+':' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+' ' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'REVISIONDAY' Name.Function
+':' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+' ' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'REVISIONDAY2' Name.Function
+':' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+' ' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'REVISIONMONTH' Name.Function
+':' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+' ' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'REVISIONMONTH1' Name.Function
+':' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+' ' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'REVISIONYEAR' Name.Function
+':' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+' ' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'REVISIONTIMESTAMP' Name.Function
+':' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+' ' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'REVISIONUSER' Name.Function
+':' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+' ' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'localurl' Name.Function
+':' Punctuation
+'page' Text
+' ' Text
+'name' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'localurl' Name.Function
+':' Punctuation
+'page' Text
+' ' Text
+'name' Text
+'\n' Text
+
+'|' Punctuation
+'query_string' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'localurl' Name.Function
+':' Punctuation
+'MediaWiki' Text
+'|' Punctuation
+'printable' Name.Label
+'=' Operator
+'yes' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'fullurl' Name.Function
+':' Punctuation
+'page' Text
+' ' Text
+'name' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'fullurl' Name.Function
+':' Punctuation
+'page' Text
+' ' Text
+'name' Text
+'\n' Text
+
+'|' Punctuation
+'query_string' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'fullurl' Name.Function
+':' Punctuation
+'interwiki' Text
+':' Text
+'remote' Text
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+'\n' Text
+
+'|' Punctuation
+'query_string' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'fullurl' Name.Function
+':' Punctuation
+'Category' Text
+':' Text
+'Top' Text
+' ' Text
+'level' Text
+'|' Punctuation
+'action' Name.Label
+'=' Operator
+'edit' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'fullurl' Name.Function
+':' Punctuation
+'s' Text
+':' Text
+'Electra' Text
+'|' Punctuation
+'action' Name.Label
+'=' Operator
+'edit' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'fullurl' Name.Function
+':' Punctuation
+'s' Text
+':' Text
+'es' Text
+':' Text
+'Electra' Text
+'|' Punctuation
+'action' Name.Label
+'=' Operator
+'edit' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'canonicalurl' Name.Function
+':' Punctuation
+'page' Text
+' ' Text
+'name' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'canonicalurl' Name.Function
+':' Punctuation
+'page' Text
+' ' Text
+'name' Text
+'\n' Text
+
+'|' Punctuation
+'query_string' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'canonicalurl' Name.Function
+':' Punctuation
+'interwiki' Text
+':' Text
+'remote' Text
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+'\n' Text
+
+'|' Punctuation
+'query_string' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'canonicalurl' Name.Function
+':' Punctuation
+'Category' Text
+':' Text
+'Top' Text
+' ' Text
+'level' Text
+'|' Punctuation
+'action' Name.Label
+'=' Operator
+'edit' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'filepath' Name.Function
+':' Punctuation
+'file' Text
+' ' Text
+'name' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'filepath' Name.Function
+':' Punctuation
+'file' Text
+' ' Text
+'name' Text
+'|' Punctuation
+'nowiki' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'filepath' Name.Function
+':' Punctuation
+'file' Text
+' ' Text
+'name' Text
+'|' Punctuation
+'thumbnail_size' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'filepath' Name.Function
+':' Punctuation
+'Wiki' Text
+'.' Text
+'png' Text
+'|' Punctuation
+'nowiki' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'filepath' Name.Function
+':' Punctuation
+'Example' Text
+'.' Text
+'svg' Text
+'|' Punctuation
+'300' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'urlencode' Name.Function
+':' Punctuation
+'string' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'urlencode' Name.Function
+':' Punctuation
+'string' Text
+'|' Punctuation
+'QUERY' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'urlencode' Name.Function
+':' Punctuation
+'string' Text
+'|' Punctuation
+'WIKI' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'urlencode' Name.Function
+':' Punctuation
+'string' Text
+'|' Punctuation
+'PATH' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'urlencode' Name.Function
+':' Punctuation
+'x' Text
+':' Text
+'y' Text
+'/' Text
+'z' Text
+' ' Text
+'á' Text
+' ' Text
+'é' Text
+'|' Punctuation
+'QUERY' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'urlencode' Name.Function
+':' Punctuation
+'x' Text
+':' Text
+'y' Text
+'/' Text
+'z' Text
+' ' Text
+'á' Text
+' ' Text
+'é' Text
+'|' Punctuation
+'WIKI' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'urlencode' Name.Function
+':' Punctuation
+'x' Text
+':' Text
+'y' Text
+'/' Text
+'z' Text
+' ' Text
+'á' Text
+' ' Text
+'é' Text
+'|' Punctuation
+'PATH' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'anchorencode' Name.Function
+':' Punctuation
+'string' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'ns' Name.Function
+':' Punctuation
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'nse' Name.Function
+':' Punctuation
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'ns' Name.Function
+':' Punctuation
+'-' Text
+'2' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'ns' Name.Function
+':' Punctuation
+'0' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'ns' Name.Function
+':' Punctuation
+'2' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'ns' Name.Function
+':' Punctuation
+'4' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'ns' Name.Function
+':' Punctuation
+'6' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'ns' Name.Function
+':' Punctuation
+'8' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'ns' Name.Function
+':' Punctuation
+'10' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'ns' Name.Function
+':' Punctuation
+'12' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'ns' Name.Function
+':' Punctuation
+'14' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'formatnum' Name.Function
+':' Punctuation
+'unformatted' Text
+' ' Text
+'number' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'formatnum' Name.Function
+':' Punctuation
+'formatnum' Text
+'-' Text
+'formatted' Text
+' ' Text
+'number' Text
+'|' Punctuation
+'R' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'formatnum' Name.Function
+':' Punctuation
+'unformatted' Text
+' ' Text
+'number' Text
+'|' Punctuation
+'NOSEP' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'formatnum' Name.Function
+':' Punctuation
+'987654321' Text
+'.' Text
+'654321' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'formatnum' Name.Function
+':' Punctuation
+'987' Text
+',' Text
+'654' Text
+',' Text
+'321' Text
+'.' Text
+'654321' Text
+'|' Punctuation
+'R' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'formatnum' Name.Function
+':' Punctuation
+'{{' Punctuation
+'formatnum' Name.Function
+':' Punctuation
+'987654321' Text
+'.' Text
+'654321' Text
+'}}' Punctuation
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'formatnum' Name.Function
+':' Punctuation
+'00001' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'formatnum' Name.Function
+':' Punctuation
+'987654321' Text
+'.' Text
+'654321' Text
+' ' Text
+'|' Punctuation
+'NOSEP' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'formatnum' Name.Function
+':' Punctuation
+'987654321' Text
+'.' Text
+'654321' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'formatnum' Name.Function
+':' Punctuation
+'987654321' Text
+'.' Text
+'654321' Text
+' ' Text
+'|' Punctuation
+'NOSEP' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'formatnum' Name.Function
+':' Punctuation
+'৯৮' Text
+',' Text
+'৭৬' Text
+',' Text
+'৫৪' Text
+',' Text
+'৩২১' Text
+'.' Text
+'৬৫৪৩২১' Text
+' ' Text
+'|' Punctuation
+'R' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'formatnum' Name.Function
+':' Punctuation
+'{{' Punctuation
+'formatnum' Name.Function
+':' Punctuation
+'987' Text
+'.' Text
+'654' Text
+'.' Text
+'321' Text
+'}}' Punctuation
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'formatnum' Name.Function
+':' Punctuation
+'987' Text
+',' Text
+'654' Text
+'.' Text
+'321' Text
+'|' Punctuation
+'R' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'formatnum' Name.Function
+':' Punctuation
+'987' Text
+'.' Text
+'654' Text
+',' Text
+'321' Text
+'|' Punctuation
+'R' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'formatnum' Name.Function
+':' Punctuation
+'987' Text
+' ' Text
+'654' Text
+',' Text
+'321' Text
+'|' Punctuation
+'R' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'formatnum' Name.Function
+':' Punctuation
+'987' Text
+'&nbsp;' Name.Entity
+'654' Text
+',' Text
+'321' Text
+'|' Punctuation
+'R' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'#dateformat' Name.Function
+':' Punctuation
+'date' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'#formatdate' Name.Function
+':' Punctuation
+'date' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'#dateformat' Name.Function
+':' Punctuation
+'date' Text
+'|' Punctuation
+'format' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'#formatdate' Name.Function
+':' Punctuation
+'date' Text
+'|' Punctuation
+'format' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'#dateformat' Name.Function
+':' Punctuation
+'25' Text
+' ' Text
+'dec' Text
+' ' Text
+'2009' Text
+'|' Punctuation
+'ymd' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'#formatdate' Name.Function
+':' Punctuation
+'dec' Text
+' ' Text
+'25' Text
+',' Text
+'2009' Text
+'|' Punctuation
+'dmy' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'#dateformat' Name.Function
+':' Punctuation
+'2009' Text
+'-' Text
+'12' Text
+'-' Text
+'25' Text
+'|' Punctuation
+'mdy' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'#formatdate' Name.Function
+':' Punctuation
+'2009' Text
+' ' Text
+'dec' Text
+' ' Text
+'25' Text
+'|' Punctuation
+'ISO' Text
+' ' Text
+'8601' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'#dateformat' Name.Function
+':' Punctuation
+'25' Text
+' ' Text
+'decEmber' Text
+'|' Punctuation
+'mdy' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'lc' Name.Function
+':' Punctuation
+'string' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'lc' Name.Function
+':' Punctuation
+'DATA' Text
+' ' Text
+'CENTER' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'lcfirst' Name.Function
+':' Punctuation
+'string' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'lcfirst' Name.Function
+':' Punctuation
+'DATA' Text
+' ' Text
+'center' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'uc' Name.Function
+':' Punctuation
+'string' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'uc' Name.Function
+':' Punctuation
+'text' Text
+' ' Text
+'transform' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'ucfirst' Name.Function
+':' Punctuation
+'string' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'ucfirst' Name.Function
+':' Punctuation
+'text' Text
+' ' Text
+'tRAnSFORM' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'padleft' Name.Function
+':' Punctuation
+'xyz' Text
+'|' Punctuation
+'stringlength' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'padleft' Name.Function
+':' Punctuation
+'xyz' Text
+'|' Punctuation
+'strlen' Text
+'|' Punctuation
+'char' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'padleft' Name.Function
+':' Punctuation
+'xyz' Text
+'|' Punctuation
+'strlen' Text
+'|' Punctuation
+'string' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'padleft' Name.Function
+':' Punctuation
+'xyz' Text
+'|' Punctuation
+'5' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'padleft' Name.Function
+':' Punctuation
+'xyz' Text
+'|' Punctuation
+'5' Text
+'|' Punctuation
+'_' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'padleft' Name.Function
+':' Punctuation
+'xyz' Text
+'|' Punctuation
+'5' Text
+'|' Punctuation
+'abc' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'padleft' Name.Function
+':' Punctuation
+'xyz' Text
+'|' Punctuation
+'2' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'padleft' Name.Function
+':' Punctuation
+'|' Punctuation
+'1' Text
+'|' Punctuation
+'xyz' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'padright' Name.Function
+':' Punctuation
+'xyz' Text
+'|' Punctuation
+'stringlength' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'padright' Name.Function
+':' Punctuation
+'xyz' Text
+'|' Punctuation
+'strlen' Text
+'|' Punctuation
+'char' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'padright' Name.Function
+':' Punctuation
+'xyz' Text
+'|' Punctuation
+'strlen' Text
+'|' Punctuation
+'string' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'padright' Name.Function
+':' Punctuation
+'xyz' Text
+'|' Punctuation
+'5' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'padright' Name.Function
+':' Punctuation
+'xyz' Text
+'|' Punctuation
+'5' Text
+'|' Punctuation
+'_' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'padright' Name.Function
+':' Punctuation
+'xyz' Text
+'|' Punctuation
+'5' Text
+'|' Punctuation
+'abc' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'padright' Name.Function
+':' Punctuation
+'xyz' Text
+'|' Punctuation
+'2' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'padright' Name.Function
+':' Punctuation
+'|' Punctuation
+'1' Text
+'|' Punctuation
+'xyz' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PLURAL' Name.Function
+':' Punctuation
+'2' Text
+'|' Punctuation
+'is' Text
+'|' Punctuation
+'are' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PLURAL' Name.Function
+':' Punctuation
+'1' Text
+'*' Text
+'1' Text
+'|' Punctuation
+'is' Text
+'|' Punctuation
+'are' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PLURAL' Name.Function
+':' Punctuation
+'21' Text
+' ' Text
+'mod' Text
+' ' Text
+'10' Text
+'|' Punctuation
+'is' Text
+'|' Punctuation
+'are' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PLURAL' Name.Function
+':' Punctuation
+'{{' Punctuation
+'#expr' Name.Function
+':' Punctuation
+'21' Text
+' ' Text
+'mod' Text
+' ' Text
+'10' Text
+'}}' Punctuation
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PLURAL' Name.Function
+':' Punctuation
+'1' Text
+'|' Punctuation
+'is' Text
+'|' Punctuation
+'are' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PLURAL' Name.Function
+':' Punctuation
+'2' Text
+'|' Punctuation
+'is' Text
+'|' Punctuation
+'are' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PLURAL' Name.Function
+':' Punctuation
+'-' Text
+'1' Text
+'|' Punctuation
+'is' Text
+'|' Punctuation
+'are' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PLURAL' Name.Function
+':' Punctuation
+'-' Text
+'2' Text
+'|' Punctuation
+'is' Text
+'|' Punctuation
+'are' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PLURAL' Name.Function
+':' Punctuation
+'0' Text
+'.' Text
+'5' Text
+'|' Punctuation
+'is' Text
+'|' Punctuation
+'are' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PLURAL' Name.Function
+':' Punctuation
+'1' Text
+'.' Text
+'5' Text
+'|' Punctuation
+'is' Text
+'|' Punctuation
+'are' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PLURAL' Name.Function
+':' Punctuation
+'-' Text
+'0' Text
+'.' Text
+'5' Text
+'|' Punctuation
+'is' Text
+'|' Punctuation
+'are' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PLURAL' Name.Function
+':' Punctuation
+'-' Text
+'1' Text
+'.' Text
+'5' Text
+'|' Punctuation
+'is' Text
+'|' Punctuation
+'are' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PLURAL' Name.Function
+':' Punctuation
+'5' Text
+'|' Punctuation
+'1' Name.Label
+'=' Operator
+'Категория' Text
+'|' Punctuation
+'Категории' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PLURAL' Name.Function
+':' Punctuation
+'3' Text
+'|' Punctuation
+'страница' Text
+'|' Punctuation
+'страницы' Text
+'|' Punctuation
+'страниц' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'PLURAL' Name.Function
+':' Punctuation
+'5' Text
+'|' Punctuation
+'страница' Text
+'|' Punctuation
+'страницы' Text
+'|' Punctuation
+'страниц' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'GRAMMAR' Name.Function
+':' Punctuation
+'N' Text
+'|' Punctuation
+'noun' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'GENDER' Name.Function
+':' Punctuation
+'username' Text
+'|' Punctuation
+'text' Text
+' ' Text
+'for' Text
+' ' Text
+'every' Text
+' ' Text
+'gender' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'GENDER' Name.Function
+':' Punctuation
+'Username' Text
+'|' Punctuation
+'male' Text
+' ' Text
+'text' Text
+'|' Punctuation
+'female' Text
+' ' Text
+'text' Text
+'|' Punctuation
+'text' Text
+' ' Text
+'for' Text
+' ' Text
+'unspecified' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'GENDER' Name.Function
+':' Punctuation
+'|' Punctuation
+'male' Text
+' ' Text
+'text' Text
+'|' Punctuation
+'female' Text
+' ' Text
+'text' Text
+'|' Punctuation
+'text' Text
+' ' Text
+'for' Text
+' ' Text
+'unspecified' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'GENDER' Name.Function
+':' Punctuation
+'.' Text
+'|' Punctuation
+'male' Text
+' ' Text
+'text' Text
+'|' Punctuation
+'female' Text
+' ' Text
+'text' Text
+'|' Punctuation
+'text' Text
+' ' Text
+'for' Text
+' ' Text
+'unspecified' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'int' Name.Function
+':' Punctuation
+'message' Text
+' ' Text
+'name' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'int' Name.Function
+':' Punctuation
+'editsectionhint' Text
+'|' Punctuation
+'MediaWiki' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'Page' Name.Tag
+' ' Name.Tag
+'name' Name.Tag
+'|' Punctuation
+'optional' Text
+' ' Text
+'params' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+':' Punctuation
+'xyz' Name.Tag
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'int' Name.Function
+':' Punctuation
+'xyz' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'#language' Name.Function
+':' Punctuation
+'language' Text
+' ' Text
+'code' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'#language' Name.Function
+':' Punctuation
+'language' Text
+' ' Text
+'code' Text
+'|' Punctuation
+'target' Text
+' ' Text
+'language' Text
+' ' Text
+'code' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'#language' Name.Function
+':' Punctuation
+'ar' Text
+'|' Punctuation
+'en' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'#special' Name.Function
+':' Punctuation
+'special' Text
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'#speciale' Name.Function
+':' Punctuation
+'special' Text
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'#tag' Name.Function
+':' Punctuation
+'tagname' Text
+'\n' Text
+
+'|' Punctuation
+'content' Text
+'\n' Text
+
+'|' Punctuation
+'attribute1' Name.Label
+'=' Operator
+'value1' Text
+'\n' Text
+
+'|' Punctuation
+'attribute2' Name.Label
+'=' Operator
+'value2' Text
+'\n' Text
+
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'#tag' Name.Function
+':' Punctuation
+'ref' Text
+'|' Punctuation
+'Citation' Text
+' ' Text
+'on' Text
+' ' Text
+'Magic' Text
+' ' Text
+'words' Text
+'.' Text
+' ' Text
+'|' Punctuation
+'name ' Name.Label
+'=' Operator
+' ' Text
+'"' Text
+'multiple' Text
+'"' Text
+'}}' Punctuation
+'\n' Text
diff --git a/tests/snippets/wikitext/parser-tag.txt b/tests/snippets/wikitext/parser-tag.txt
new file mode 100644
index 00000000..83e2d605
--- /dev/null
+++ b/tests/snippets/wikitext/parser-tag.txt
@@ -0,0 +1,2133 @@
+---input---
+<pre>The &lt;pre&gt; tag ignores [[wiki]]
+''markup'' as does the &lt;nowiki&gt;
+tag. Additionally, &lt;pre&gt; displays
+in a mono-spaced font, and does
+not reformat text spaces.
+It still interprets special
+characters: &rarr;</pre>
+
+<pre class="blah">Ola
+Oi
+</pre>
+
+<nowiki>
+The <nowiki> tag ignores [[wiki]]
+''markup''. It reformats text by
+removing newlines and multiple
+spaces. It still interprets
+characters specified by
+&amp;name;: &rarr;
+</nowiki>
+
+<nowiki /># Ordered list
+'<nowiki />'Italics' markup'<nowiki />'
+<nowiki>[[Example]]</nowiki>
+<nowiki><!-- revealed --></nowiki>
+<nowiki>
+~~~~</nowiki>
+
+<chem>Y^{99+}</chem>
+<chem>CaSO4.1/2H2O + 1\!1/2 H2O -> CaSO4.2H2O</chem>
+<chem>{C_\mathit{x}H_\mathit{y}} + \mathit{z}O2 -> {\mathit{x}CO2} + \frac{\mathit{y}}{2}H2O</chem>
+<ce>{C_\mathit{x}H_\mathit{y}} + \mathit{z}O2 -> {\mathit{x}CO2} + \frac{\mathit{y}}{2}H2O</ce>
+
+<hiero>P2</hiero>
+
+<imagemap>
+# sjfhasdkjfhsadlkjahl
+
+File:The Last Supper - Leonardo Da Vinci - High Resolution 32x16.jpg|thumb|center|500px|alt=''The Last Supper'' by Leonardo da Vinci - Clickable Image|Image map example. Clicking on a person in the picture causes the browser to load the appropriate article.
+poly 550 2550 750 2400 1150 2300 1150 2150 1200 2075 1500 2125 1525 2300 1350 2800 1450 3000 1700 3300 1300 3475 650 3500 550 3300 450 3000 [[w:Bartholomew the Apostle|Bartholomew]]
+poly 1575 2300 1625 2150 1900 2150 1925 2500 1875 2600 1800 2750 1600 3250 1425 3100 1400 2800 1375 2600 [[w:James, son of Alphaeus|James Minor]]
+poly 1960 2150 2200 2150 2350 2500 2450 2575 2375 2725 2375 2900 2225 3100 2225 3225 1600 3225 1825 2700 1975 2450 1925 2300 [[w:Saint Andrew|Andrew]]
+poly 2450 2575 2775 2500 2700 2650 2800 2700 2600 3000 2600 3250 2300 3250 2200 3200 2300 3000 [[w:Saint Peter|Peter]]
+poly 2750 2500 2950 2400 3125 2600 3175 2700 3300 2850 3700 3200 3750 3200 3650 3350 3400 3200 3000 3350 2600 3325 2750 2800 2900 2700 2700 2650 [[w:Judas Iscariot|Judas]]
+poly 3000 2350 3300 2350 3350 2660 3560 2600 3565 2690 3250 2800 3125 2575 [[w:Saint Peter|Peter]]
+poly 3332 2338 3528 2240 4284 3024 4074 3332 3864 3290 3780 3150 3668 3192 3598 3024 3374 2870 3388 2772 3542 2800 3668 2702 3542 2590 3430 2604 3350 2600 3300 2500[[w:John the Apostle|John]]
+poly 4775 2184 4915 2128 5055 2212 5083 2352 5111 2464 5181 2604 5307 2744 5573 3052 5615 3192 5657 3290 5573 3402 5461 3332 5335 3248 4495 3248 4439 3388 4243 3388 4075 3360 4173 3136 4327 3010 4509 2730 4663 2520 4733 2394 [[w:Jesus]]
+poly 5900 2100 5900 2150 5800 2400 5800 2500 5675 2589 5480 2671 5438 2507 5425 2301 5589 2452 5630 2301 5650 2100 [[w:Thomas the Apostle|Thomas]]
+poly 5918 2150 6041 2109 6137 2246 6192 2411 6110 2589 6110 2726 6192 2822 6302 2740 6589 3109 5658 3178 5575 2918 5300 2698 5233 2589 5274 2438 5370 2507 5521 2685 5617 2671 5712 2575 5822 2507 5808 2287 5822 2175 [[w:James, son of Zebedee|James Greater]]
+poly 6137 2013 6439 2013 6863 2260 7110 2515 6726 2675 6507 2548 6425 2630 6356 2753 6548 2849 6699 2781 7082 2794 7178 3109 6699 3178 6548 2986 6397 2835 6165 2775 6110 2589 6233 2438 6302 2383 6151 2287 6096 2164 [[w:Philip the Apostle|Philip]]
+poly 7635 2123 7800 2013 8000 2055 8025 2287 7950 2438 8000 2698 8055 2918 7959 3164 7233 3164 7124 2972 7124 2794 6548 2794 6384 2781 6384 2671 6493 2575 6750 2650 7075 2550 7219 2400 7625 2300 [[w:Matthew the Apostle|Matthew]]
+poly 8325 2096 8600 2109 8635 2493 8615 2726 8439 2781 8274 2740 8125 2835 8151 2931 8400 2975 8411 3068 8589 3041 8617 3205 7987 3260 8124 3027 7987 2644 7904 2493 7959 2425 8096 2356 [[w:Judas Thaddaeus|Jude]]
+poly 8800 2150 8900 2125 9055 2150 9125 2397 9400 2475 9550 2931 9625 3301 9151 3397 8535 3219 8726 3014 8466 3068 8411 2918 8178 2931 8124 2835 8329 2753 8535 2794 8726 2603 8725 2342 [[w:Simon the Zealot|Simon]]
+rect 269 140 344 305 [[Claude Martin]]
+rect 124 147 181 298 [[Antoine Polier|Antoine-Louis Polier]]
+desc none
+</imagemap>
+
+<rss max=4 highlight="community wiki foundation">https://wikimediafoundation.org/news/feed/</rss>
+
+<inputbox>
+type=create
+break=no
+</inputbox>
+<inputbox>
+type=
+bgcolor=
+width=
+page=
+default=
+preload=
+editintro=
+buttonlabel=
+hidden=
+searchbuttonlabel=
+fulltextbutton=
+labeltext=
+break=
+namespaces=
+prefix=
+placeholder=
+minor=
+nosummary=
+summary=
+id=
+inline=
+dir=
+preloadparams[]=
+searchfilter=
+useve=
+arialabel=
+</inputbox>
+
+<gallery>
+File:Example.jpg
+File:Example.jpg
+</gallery>
+<gallery mode=packed heights=150px style="text-align:left">
+a|1
+Detroit Publishing Co. - A Yeoman of the Guard (N.B. actually a Yeoman Warder), full restoration.jpg|A Yeoman Warder, from a Victorian-era [[photochrom]]
+Official_program_-_Woman_suffrage_procession_March_3,_1913_-_crop.jpg|The Official program of the 1913 Woman Suffrage Procession held in Washington, D.C.
+Joseph Ferdinand Keppler - The Pirate Publisher - Puck Magazine - Restoration by Adam Cuerden.jpg|"The Pirate Publisher", a satire of copyright infringement from the magazine ''[[Puck (magazine)|Puck]]''.
+</gallery>
+<gallery caption="Sample gallery" widths="180px" heights="120px" >
+Wiki.png|Captioned
+Wiki.png|alt=The Wikipedia logo|Captioned with alt text
+Wiki.png|[[Help:Contents/Links|Links]] can be put in captions.
+Wiki.png|Full [[MediaWiki]]<br/>[[syntax]] may now be used...
+</gallery>
+<gallery>
+
+Detroit Publishing Co. - A Yeoman of the Guard (N.B. actually a Yeoman Warder), full restoration.jpg|1
+Official_program_-_Woman_suffrage_procession_March_3,_1913_-_crop.jpg|2
+Thurston, the famous magician - East Indian Rope Trick.jpg|3
+Joseph Ferdinand Keppler - The Pirate Publisher - Puck Magazine - Restoration by Adam Cuerden.jpg|4
+</gallery>
+
+<charinsert>“+” ‘+’ «+» ‹+› „+“ ‚+‘ [[+]] {{+}}</charinsert>
+
+<templatestyles src="Example/styles.css" wrapper="div.example" />
+
+<DynamicPageList>
+category=foo
+count=20
+namespace=file
+addfirstcategorydate=ymd
+imagewidth=70
+galleryshowfilesize=yes
+galleryshowfilename=yes
+imagesperrow=7
+gallerycaption=Galleries!
+ordermethod=sortkey
+order=ascending
+mode=gallery
+offset=12
+</DynamicPageList>
+
+<references />
+
+<poem>
+In [[Wikipedia:Xanadu|Xanadu]] did Kubla Khan
+A stately pleasure-dome decree:
+Where Alph, the sacred river, ran
+Through caverns measureless to man
+Down to a sunless sea.
+
+So twice five miles of fertile ground
+With walls and towers were girdled round:
+And there were gardens bright with sinuous rills,
+Where blossomed many an incense-bearing tree;
+And here were forests ancient as the hills,
+Enfolding sunny spots of greenery.
+</poem>
+
+<categorytree mode="categories">Manual</categorytree>
+<categorytree namespaces="Category">Manual</categorytree>
+<categorytree>Manual</categorytree>
+<categorytree>''Manual''[[a]]&amp;</categorytree>
+
+<onlyinclude>My content</onlyinclude>
+<includeonly>My content</includeonly>
+<noinclude>My content</noinclude>
+
+<syntaxhighlight lang="cpp">
+#include <iostream>
+int m2 (int ax, char *p_ax) {
+ std::cout <<"Hello World!";
+ return 0;
+}</syntaxhighlight>
+<source lang="cpp">
+#include <iostream>
+int m2 (int ax, char *p_ax) {
+ std::cout <<"Hello World!";
+ return 0;
+}</source>
+<syntaxhighlight lang="non-exist">
+#include <iostream>
+int m2 (int ax, char *p_ax) {
+ std::cout <<"Hello World!";
+ return 0;
+}</syntaxhighlight>
+<syntaxhighlight lang=cpp>
+#include <iostream>
+</syntaxhighlight>
+<syntaxhighlight lang=cpppp p>
+#include <iostream>
+</syntaxhighlight>
+<syntaxhighlight lang='cpp'>
+#include <iostream>
+</syntaxhighlight>
+<syntaxhighlight>
+#include <iostream>
+</syntaxhighlight>
+<syntaxhighlight/>
+<syntaxhighlight lang="js" lang='cpp' aalang=typescript>
+#include <iostream>
+</syntaxhighlight>
+<syntaxhighlight />
+
+<math>2x \times 4y \div 6z + 8 - \frac {y}{z^2} = 0</math>
+<math>\sin 2\pi x + \ln e</math>
+<math display=block>\sum_{n=0}^\infty \frac{x^n}{n!}</math>
+
+<score>\relative c' { fis d fis a d f e d c cis d e a g f ees }</score>
+<score lang="lilypond">\relative c' { fis d fis a d f e d c cis d e a g f ees }</score>
+<score lang="ABC">
+X:1
+M:C
+L:1/4
+K:C
+C, D, E, F,|G, A, B, C|D E F G|A B c d|
+e f g a|b c' d' e'|f' g' a' b'|]
+</score>
+<score lang=not-exist>\relative c' { fis d fis a d f e d c cis d e a g f ees }</score>
+
+<ref name="reference name">add_template_name_here</ref>
+
+<templatedata>
+{
+ "description": "Label unsigned comments in a conversation.",
+ "params": {
+ "user": {
+ "label": "User's name",
+ "type": "wiki-user-name",
+ "required": true,
+ "description": "User name of person who forgot to sign their comment.",
+ "aliases": ["1"]
+ },
+ "date": {
+ "label": "Date",
+ "suggested": true,
+ "description": {
+ "en": "Timestamp of when the comment was posted, in YYYY-MM-DD format."
+ },
+ "aliases": ["2"],
+ "autovalue": "{{subst:#time:Y-m-d}}"
+ },
+ "year": {
+ "label": "Year",
+ "type": "number"
+ },
+ "month": {
+ "label": "Month",
+ "inherits": "year"
+ },
+ "day": {
+ "label": "Day",
+ "inherits": "year"
+ },
+ "comment": {
+ "required": false
+ }
+ },
+ "sets": [
+ {
+ "label": "Date",
+ "params": ["year", "month", "day"]
+ }
+ ],
+ "maps": {
+ "ExampleConsumer": {
+ "foo": "user",
+ "bar": ["year", "month", "day"],
+ "quux": [
+ "date",
+ ["day", "month"],
+ ["month", "year"],
+ "year"
+ ]
+ }
+ }
+}
+</templatedata>
+
+* <translate>This is a long list:</translate>
+** <translate>There are more than 160 words in this list,</translate>
+** <translate>or there are more than 8 items.</translate>
+* <translate>So it is better to split it in several smaller units.</translate>
+* <translate>But we must exclude bullet points from translate tags to keep the list accessible.</translate>
+
+<tvar name=1>1</tvar>
+<span <tvar name=attr>class="css_class" style="background-color:blue"</tvar>>hello</span>
+<span <tvar|attr>class="css_class" style="background-color:blue"</>>hello</span>
+{{<tvar name=1>center|5px</tvar>|hello}}
+
+---tokens---
+'<' Punctuation
+'pre' Name.Tag
+'>' Punctuation
+'The' Text
+' ' Text
+'&lt;' Name.Entity
+'pre' Text
+'&gt;' Name.Entity
+' ' Text
+'tag' Text
+' ' Text
+'ignores' Text
+' ' Text
+'[' Text
+'[' Text
+'wiki' Text
+']' Text
+']' Text
+'\n' Text
+
+"'" Text
+"'" Text
+'markup' Text
+"'" Text
+"'" Text
+' ' Text
+'as' Text
+' ' Text
+'does' Text
+' ' Text
+'the' Text
+' ' Text
+'&lt;' Name.Entity
+'nowiki' Text
+'&gt;' Name.Entity
+'\n' Text
+
+'tag' Text
+'.' Text
+' ' Text
+'Additionally' Text
+',' Text
+' ' Text
+'&lt;' Name.Entity
+'pre' Text
+'&gt;' Name.Entity
+' ' Text
+'displays' Text
+'\n' Text
+
+'in' Text
+' ' Text
+'a' Text
+' ' Text
+'mono' Text
+'-' Text
+'spaced' Text
+' ' Text
+'font' Text
+',' Text
+' ' Text
+'and' Text
+' ' Text
+'does' Text
+'\n' Text
+
+'not' Text
+' ' Text
+'reformat' Text
+' ' Text
+'text' Text
+' ' Text
+'spaces' Text
+'.' Text
+'\n' Text
+
+'It' Text
+' ' Text
+'still' Text
+' ' Text
+'interprets' Text
+' ' Text
+'special' Text
+'\n' Text
+
+'characters' Text
+':' Text
+' ' Text
+'&rarr;' Name.Entity
+'</' Punctuation
+'pre' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'pre' Name.Tag
+' ' Text.Whitespace
+'class' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'blah' Literal.String.Double
+'"' Literal.String.Double
+'>' Punctuation
+'Ola' Text
+'\n' Text
+
+'Oi' Text
+'\n' Text
+
+'</' Punctuation
+'pre' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'nowiki' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'The' Text
+' ' Text
+'<' Text
+'nowiki' Text
+'>' Text
+' ' Text
+'tag' Text
+' ' Text
+'ignores' Text
+' ' Text
+'[' Text
+'[' Text
+'wiki' Text
+']' Text
+']' Text
+'\n' Text
+
+"'" Text
+"'" Text
+'markup' Text
+"'" Text
+"'" Text
+'.' Text
+' ' Text
+'It' Text
+' ' Text
+'reformats' Text
+' ' Text
+'text' Text
+' ' Text
+'by' Text
+'\n' Text
+
+'removing' Text
+' ' Text
+'newlines' Text
+' ' Text
+'and' Text
+' ' Text
+'multiple' Text
+'\n' Text
+
+'spaces' Text
+'.' Text
+' ' Text
+'It' Text
+' ' Text
+'still' Text
+' ' Text
+'interprets' Text
+'\n' Text
+
+'characters' Text
+' ' Text
+'specified' Text
+' ' Text
+'by' Text
+'\n' Text
+
+'&amp;' Name.Entity
+'name' Text
+';' Text
+':' Text
+' ' Text
+'&rarr;' Name.Entity
+'\n' Text
+
+'</' Punctuation
+'nowiki' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'nowiki' Name.Tag
+' ' Text.Whitespace
+'/>' Punctuation
+'#' Text
+' ' Text
+'Ordered' Text
+' ' Text
+'list' Text
+'\n' Text
+
+"'" Text
+'<' Punctuation
+'nowiki' Name.Tag
+' ' Text.Whitespace
+'/>' Punctuation
+"'" Text
+'Italics' Text
+"'" Text
+' ' Text
+'markup' Text
+"'" Text
+'<' Punctuation
+'nowiki' Name.Tag
+' ' Text.Whitespace
+'/>' Punctuation
+"'" Text
+'\n' Text
+
+'<' Punctuation
+'nowiki' Name.Tag
+'>' Punctuation
+'[' Text
+'[' Text
+'Example' Text
+']' Text
+']' Text
+'</' Punctuation
+'nowiki' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'nowiki' Name.Tag
+'>' Punctuation
+'<' Text
+'!' Text
+'-' Text
+'-' Text
+' ' Text
+'revealed' Text
+' ' Text
+'-' Text
+'-' Text
+'>' Text
+'</' Punctuation
+'nowiki' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'nowiki' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'~' Text
+'~' Text
+'~' Text
+'~' Text
+'</' Punctuation
+'nowiki' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'chem' Name.Tag
+'>' Punctuation
+'Y' Text
+'^' Name.Builtin
+'{' Name.Builtin
+'99+' Text
+'}' Name.Builtin
+'</' Punctuation
+'chem' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'chem' Name.Tag
+'>' Punctuation
+'CaSO4.1/2H2O + 1' Text
+'\\!' Keyword
+'1/2 H2O -> CaSO4.2H2O' Text
+'</' Punctuation
+'chem' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'chem' Name.Tag
+'>' Punctuation
+'{' Name.Builtin
+'C' Text
+'_' Name.Builtin
+'\\mathit' Keyword
+'{' Name.Builtin
+'x' Text
+'}' Name.Builtin
+'H' Text
+'_' Name.Builtin
+'\\mathit' Keyword
+'{' Name.Builtin
+'y' Text
+'}' Name.Builtin
+'}' Name.Builtin
+' + ' Text
+'\\mathit' Keyword
+'{' Name.Builtin
+'z' Text
+'}' Name.Builtin
+'O2 -> ' Text
+'{' Name.Builtin
+'\\mathit' Keyword
+'{' Name.Builtin
+'x' Text
+'}' Name.Builtin
+'CO2' Text
+'}' Name.Builtin
+' + ' Text
+'\\frac' Keyword
+'{' Name.Builtin
+'\\mathit' Keyword
+'{' Name.Builtin
+'y' Text
+'}' Name.Builtin
+'}' Name.Builtin
+'{' Name.Builtin
+'2' Text
+'}' Name.Builtin
+'H2O' Text
+'</' Punctuation
+'chem' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'ce' Name.Tag
+'>' Punctuation
+'{' Name.Builtin
+'C' Text
+'_' Name.Builtin
+'\\mathit' Keyword
+'{' Name.Builtin
+'x' Text
+'}' Name.Builtin
+'H' Text
+'_' Name.Builtin
+'\\mathit' Keyword
+'{' Name.Builtin
+'y' Text
+'}' Name.Builtin
+'}' Name.Builtin
+' + ' Text
+'\\mathit' Keyword
+'{' Name.Builtin
+'z' Text
+'}' Name.Builtin
+'O2 -> ' Text
+'{' Name.Builtin
+'\\mathit' Keyword
+'{' Name.Builtin
+'x' Text
+'}' Name.Builtin
+'CO2' Text
+'}' Name.Builtin
+' + ' Text
+'\\frac' Keyword
+'{' Name.Builtin
+'\\mathit' Keyword
+'{' Name.Builtin
+'y' Text
+'}' Name.Builtin
+'}' Name.Builtin
+'{' Name.Builtin
+'2' Text
+'}' Name.Builtin
+'H2O' Text
+'</' Punctuation
+'ce' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'hiero' Name.Tag
+'>' Punctuation
+'P2' Text
+'</' Punctuation
+'hiero' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'imagemap' Name.Tag
+'>' Punctuation
+"\n# sjfhasdkjfhsadlkjahl\n\nFile:The Last Supper - Leonardo Da Vinci - High Resolution 32x16.jpg|thumb|center|500px|alt=''The Last Supper'' by Leonardo da Vinci - Clickable Image|Image map example. Clicking on a person in the picture causes the browser to load the appropriate article.\npoly 550 2550 750 2400 1150 2300 1150 2150 1200 2075 1500 2125 1525 2300 1350 2800 1450 3000 1700 3300 1300 3475 650 3500 550 3300 450 3000 [[w:Bartholomew the Apostle|Bartholomew]]\npoly 1575 2300 1625 2150 1900 2150 1925 2500 1875 2600 1800 2750 1600 3250 1425 3100 1400 2800 1375 2600 [[w:James, son of Alphaeus|James Minor]]\npoly 1960 2150 2200 2150 2350 2500 2450 2575 2375 2725 2375 2900 2225 3100 2225 3225 1600 3225 1825 2700 1975 2450 1925 2300 [[w:Saint Andrew|Andrew]]\npoly 2450 2575 2775 2500 2700 2650 2800 2700 2600 3000 2600 3250 2300 3250 2200 3200 2300 3000 [[w:Saint Peter|Peter]]\npoly 2750 2500 2950 2400 3125 2600 3175 2700 3300 2850 3700 3200 3750 3200 3650 3350 3400 3200 3000 3350 2600 3325 2750 2800 2900 2700 2700 2650 [[w:Judas Iscariot|Judas]]\npoly 3000 2350 3300 2350 3350 2660 3560 2600 3565 2690 3250 2800 3125 2575 [[w:Saint Peter|Peter]]\npoly 3332 2338 3528 2240 4284 3024 4074 3332 3864 3290 3780 3150 3668 3192 3598 3024 3374 2870 3388 2772 3542 2800 3668 2702 3542 2590 3430 2604 3350 2600 3300 2500[[w:John the Apostle|John]]\npoly 4775 2184 4915 2128 5055 2212 5083 2352 5111 2464 5181 2604 5307 2744 5573 3052 5615 3192 5657 3290 5573 3402 5461 3332 5335 3248 4495 3248 4439 3388 4243 3388 4075 3360 4173 3136 4327 3010 4509 2730 4663 2520 4733 2394 [[w:Jesus]]\npoly 5900 2100 5900 2150 5800 2400 5800 2500 5675 2589 5480 2671 5438 2507 5425 2301 5589 2452 5630 2301 5650 2100 [[w:Thomas the Apostle|Thomas]]\npoly 5918 2150 6041 2109 6137 2246 6192 2411 6110 2589 6110 2726 6192 2822 6302 2740 6589 3109 5658 3178 5575 2918 5300 2698 5233 2589 5274 2438 5370 2507 5521 2685 5617 2671 5712 2575 5822 2507 5808 2287 5822 2175 [[w:James, son of Zebedee|James Greater]]\npoly 6137 2013 6439 2013 6863 2260 7110 2515 6726 2675 6507 2548 6425 2630 6356 2753 6548 2849 6699 2781 7082 2794 7178 3109 6699 3178 6548 2986 6397 2835 6165 2775 6110 2589 6233 2438 6302 2383 6151 2287 6096 2164 [[w:Philip the Apostle|Philip]]\npoly 7635 2123 7800 2013 8000 2055 8025 2287 7950 2438 8000 2698 8055 2918 7959 3164 7233 3164 7124 2972 7124 2794 6548 2794 6384 2781 6384 2671 6493 2575 6750 2650 7075 2550 7219 2400 7625 2300 [[w:Matthew the Apostle|Matthew]]\npoly 8325 2096 8600 2109 8635 2493 8615 2726 8439 2781 8274 2740 8125 2835 8151 2931 8400 2975 8411 3068 8589 3041 8617 3205 7987 3260 8124 3027 7987 2644 7904 2493 7959 2425 8096 2356 [[w:Judas Thaddaeus|Jude]]\npoly 8800 2150 8900 2125 9055 2150 9125 2397 9400 2475 9550 2931 9625 3301 9151 3397 8535 3219 8726 3014 8466 3068 8411 2918 8178 2931 8124 2835 8329 2753 8535 2794 8726 2603 8725 2342 [[w:Simon the Zealot|Simon]]\nrect 269 140 344 305 [[Claude Martin]]\nrect 124 147 181 298 [[Antoine Polier|Antoine-Louis Polier]]\ndesc none\n" Text
+
+'</' Punctuation
+'imagemap' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'rss' Name.Tag
+' ' Text.Whitespace
+'max' Name.Attribute
+'=' Operator
+'4' Literal.String
+' ' Text.Whitespace
+'highlight' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'community' Literal.String.Double
+' ' Literal.String.Double
+'wiki' Literal.String.Double
+' ' Literal.String.Double
+'foundation' Literal.String.Double
+'"' Literal.String.Double
+'>' Punctuation
+'https://wikimediafoundation.org/news/feed/' Text
+'</' Punctuation
+'rss' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'inputbox' Name.Tag
+'>' Punctuation
+'\ntype=create\nbreak=no\n' Text
+
+'</' Punctuation
+'inputbox' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'inputbox' Name.Tag
+'>' Punctuation
+'\ntype=\nbgcolor=\nwidth=\npage=\ndefault=\npreload=\neditintro=\nbuttonlabel=\nhidden=\nsearchbuttonlabel=\nfulltextbutton=\nlabeltext=\nbreak=\nnamespaces=\nprefix=\nplaceholder=\nminor=\nnosummary=\nsummary=\nid=\ninline=\ndir=\npreloadparams[]=\nsearchfilter=\nuseve=\narialabel=\n' Text
+
+'</' Punctuation
+'inputbox' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'gallery' Name.Tag
+'>' Punctuation
+'\nFile:Example.jpg\nFile:Example.jpg\n' Text
+
+'</' Punctuation
+'gallery' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'gallery' Name.Tag
+' ' Text.Whitespace
+'mode' Name.Attribute
+'=' Operator
+'packed' Literal.String
+' ' Text.Whitespace
+'heights' Name.Attribute
+'=' Operator
+'150px' Literal.String
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'text' Literal.String.Double
+'-' Literal.String.Double
+'align' Literal.String.Double
+':' Literal.String.Double
+'left' Literal.String.Double
+'"' Literal.String.Double
+'>' Punctuation
+'\na|1\nDetroit Publishing Co. - A Yeoman of the Guard (N.B. actually a Yeoman Warder), full restoration.jpg|A Yeoman Warder, from a Victorian-era [[photochrom]]\nOfficial_program_-_Woman_suffrage_procession_March_3,_1913_-_crop.jpg|The Official program of the 1913 Woman Suffrage Procession held in Washington, D.C.\nJoseph Ferdinand Keppler - The Pirate Publisher - Puck Magazine - Restoration by Adam Cuerden.jpg|"The Pirate Publisher", a satire of copyright infringement from the magazine \'\'[[Puck (magazine)|Puck]]\'\'.\n' Text
+
+'</' Punctuation
+'gallery' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'gallery' Name.Tag
+' ' Text.Whitespace
+'caption' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'Sample' Literal.String.Double
+' ' Literal.String.Double
+'gallery' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'widths' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'180px' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'heights' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'120px' Literal.String.Double
+'"' Literal.String.Double
+' >' Punctuation
+'\nWiki.png|Captioned\nWiki.png|alt=The Wikipedia logo|Captioned with alt text\nWiki.png|[[Help:Contents/Links|Links]] can be put in captions.\nWiki.png|Full [[MediaWiki]]<br/>[[syntax]] may now be used...\n' Text
+
+'</' Punctuation
+'gallery' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'gallery' Name.Tag
+'>' Punctuation
+'\n\nDetroit Publishing Co. - A Yeoman of the Guard (N.B. actually a Yeoman Warder), full restoration.jpg|1\nOfficial_program_-_Woman_suffrage_procession_March_3,_1913_-_crop.jpg|2\nThurston, the famous magician - East Indian Rope Trick.jpg|3\nJoseph Ferdinand Keppler - The Pirate Publisher - Puck Magazine - Restoration by Adam Cuerden.jpg|4\n' Text
+
+'</' Punctuation
+'gallery' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'charinsert' Name.Tag
+'>' Punctuation
+'“+” ‘+’ «+» ‹+› „+“ ‚+‘ [[+]] {{+}}' Text
+'</' Punctuation
+'charinsert' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'templatestyles' Name.Tag
+' ' Text.Whitespace
+'src' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'Example' Literal.String.Double
+'/' Literal.String.Double
+'styles' Literal.String.Double
+'.' Literal.String.Double
+'css' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'wrapper' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'div' Literal.String.Double
+'.' Literal.String.Double
+'example' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'/>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'DynamicPageList' Name.Tag
+'>' Punctuation
+'\ncategory=foo\ncount=20\nnamespace=file\naddfirstcategorydate=ymd\nimagewidth=70\ngalleryshowfilesize=yes\ngalleryshowfilename=yes\nimagesperrow=7\ngallerycaption=Galleries!\nordermethod=sortkey\norder=ascending\nmode=gallery\noffset=12\n' Text
+
+'</' Punctuation
+'DynamicPageList' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'references' Name.Tag
+' ' Text.Whitespace
+'/>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'poem' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'In' Text
+' ' Text
+'[[' Punctuation
+'Wikipedia' Name.Namespace
+':' Punctuation
+'Xanadu' Name.Tag
+'|' Punctuation
+'Xanadu' Text
+']]' Punctuation
+' ' Text
+'did' Text
+' ' Text
+'Kubla' Text
+' ' Text
+'Khan' Text
+'\n' Text
+
+'A' Text
+' ' Text
+'stately' Text
+' ' Text
+'pleasure' Text
+'-' Text
+'dome' Text
+' ' Text
+'decree' Text
+':' Text
+'\n' Text
+
+'Where' Text
+' ' Text
+'Alph' Text
+',' Text
+' ' Text
+'the' Text
+' ' Text
+'sacred' Text
+' ' Text
+'river' Text
+',' Text
+' ' Text
+'ran' Text
+'\n' Text
+
+'Through' Text
+' ' Text
+'caverns' Text
+' ' Text
+'measureless' Text
+' ' Text
+'to' Text
+' ' Text
+'man' Text
+'\n' Text
+
+'Down' Text
+' ' Text
+'to' Text
+' ' Text
+'a' Text
+' ' Text
+'sunless' Text
+' ' Text
+'sea' Text
+'.' Text
+'\n' Text
+
+'\n' Text
+
+'So' Text
+' ' Text
+'twice' Text
+' ' Text
+'five' Text
+' ' Text
+'miles' Text
+' ' Text
+'of' Text
+' ' Text
+'fertile' Text
+' ' Text
+'ground' Text
+'\n' Text
+
+'With' Text
+' ' Text
+'walls' Text
+' ' Text
+'and' Text
+' ' Text
+'towers' Text
+' ' Text
+'were' Text
+' ' Text
+'girdled' Text
+' ' Text
+'round' Text
+':' Text
+'\n' Text
+
+'And' Text
+' ' Text
+'there' Text
+' ' Text
+'were' Text
+' ' Text
+'gardens' Text
+' ' Text
+'bright' Text
+' ' Text
+'with' Text
+' ' Text
+'sinuous' Text
+' ' Text
+'rills' Text
+',' Text
+'\n' Text
+
+'Where' Text
+' ' Text
+'blossomed' Text
+' ' Text
+'many' Text
+' ' Text
+'an' Text
+' ' Text
+'incense' Text
+'-' Text
+'bearing' Text
+' ' Text
+'tree' Text
+';' Text
+'\n' Text
+
+'And' Text
+' ' Text
+'here' Text
+' ' Text
+'were' Text
+' ' Text
+'forests' Text
+' ' Text
+'ancient' Text
+' ' Text
+'as' Text
+' ' Text
+'the' Text
+' ' Text
+'hills' Text
+',' Text
+'\n' Text
+
+'Enfolding' Text
+' ' Text
+'sunny' Text
+' ' Text
+'spots' Text
+' ' Text
+'of' Text
+' ' Text
+'greenery' Text
+'.' Text
+'\n' Text
+
+'</' Punctuation
+'poem' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'categorytree' Name.Tag
+' ' Text.Whitespace
+'mode' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'categories' Literal.String.Double
+'"' Literal.String.Double
+'>' Punctuation
+'Manual' Text
+'</' Punctuation
+'categorytree' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'categorytree' Name.Tag
+' ' Text.Whitespace
+'namespaces' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'Category' Literal.String.Double
+'"' Literal.String.Double
+'>' Punctuation
+'Manual' Text
+'</' Punctuation
+'categorytree' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'categorytree' Name.Tag
+'>' Punctuation
+'Manual' Text
+'</' Punctuation
+'categorytree' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'categorytree' Name.Tag
+'>' Punctuation
+"''Manual''[[a]]&amp;" Text
+'</' Punctuation
+'categorytree' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'onlyinclude' Name.Tag
+'>' Punctuation
+'My' Text
+' ' Text
+'content' Text
+'</' Punctuation
+'onlyinclude' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'includeonly' Name.Tag
+'>' Punctuation
+'My' Text
+' ' Text
+'content' Text
+'</' Punctuation
+'includeonly' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'noinclude' Name.Tag
+'>' Punctuation
+'My' Text
+' ' Text
+'content' Text
+'</' Punctuation
+'noinclude' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'syntaxhighlight' Name.Tag
+' ' Text.Whitespace
+'lang' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'cpp' Literal.String.Double
+'"' Literal.String.Double
+'>' Punctuation
+'\n' Text.Whitespace
+
+'#' Comment.Preproc
+'include' Comment.Preproc
+' ' Text.Whitespace
+'<iostream>' Comment.PreprocFile
+'\n' Comment.Preproc
+
+'int' Keyword.Type
+' ' Text.Whitespace
+'m2' Name.Function
+' ' Text.Whitespace
+'(' Punctuation
+'int' Keyword.Type
+' ' Text.Whitespace
+'ax' Name
+',' Punctuation
+' ' Text.Whitespace
+'char' Keyword.Type
+' ' Text.Whitespace
+'*' Operator
+'p_ax' Name
+')' Punctuation
+' ' Text.Whitespace
+'{' Punctuation
+'\n' Text.Whitespace
+
+' ' Text.Whitespace
+'std' Name
+':' Operator
+':' Operator
+'cout' Name
+' ' Text.Whitespace
+'<' Operator
+'<' Operator
+'"' Literal.String
+'Hello World!' Literal.String
+'"' Literal.String
+';' Punctuation
+'\n' Text.Whitespace
+
+' ' Text.Whitespace
+'return' Keyword
+' ' Text.Whitespace
+'0' Literal.Number.Integer
+';' Punctuation
+'\n' Text.Whitespace
+
+'}' Punctuation
+'</' Punctuation
+'syntaxhighlight' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'source' Name.Tag
+' ' Text.Whitespace
+'lang' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'cpp' Literal.String.Double
+'"' Literal.String.Double
+'>' Punctuation
+'\n' Text.Whitespace
+
+'#' Comment.Preproc
+'include' Comment.Preproc
+' ' Text.Whitespace
+'<iostream>' Comment.PreprocFile
+'\n' Comment.Preproc
+
+'int' Keyword.Type
+' ' Text.Whitespace
+'m2' Name.Function
+' ' Text.Whitespace
+'(' Punctuation
+'int' Keyword.Type
+' ' Text.Whitespace
+'ax' Name
+',' Punctuation
+' ' Text.Whitespace
+'char' Keyword.Type
+' ' Text.Whitespace
+'*' Operator
+'p_ax' Name
+')' Punctuation
+' ' Text.Whitespace
+'{' Punctuation
+'\n' Text.Whitespace
+
+' ' Text.Whitespace
+'std' Name
+':' Operator
+':' Operator
+'cout' Name
+' ' Text.Whitespace
+'<' Operator
+'<' Operator
+'"' Literal.String
+'Hello World!' Literal.String
+'"' Literal.String
+';' Punctuation
+'\n' Text.Whitespace
+
+' ' Text.Whitespace
+'return' Keyword
+' ' Text.Whitespace
+'0' Literal.Number.Integer
+';' Punctuation
+'\n' Text.Whitespace
+
+'}' Punctuation
+'</' Punctuation
+'source' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'syntaxhighlight' Name.Tag
+' ' Text.Whitespace
+'lang' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'non' Literal.String.Double
+'-' Literal.String.Double
+'exist' Literal.String.Double
+'"' Literal.String.Double
+'>' Punctuation
+'\n#include <iostream>\nint m2 (int ax, char *p_ax) {\n std::cout <<"Hello World!";\n return 0;\n}' Text
+'</' Punctuation
+'syntaxhighlight' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'syntaxhighlight' Name.Tag
+' ' Text.Whitespace
+'lang' Name.Attribute
+'=' Operator
+'cpp' Literal.String
+'>' Punctuation
+'\n' Text.Whitespace
+
+'#' Comment.Preproc
+'include' Comment.Preproc
+' ' Text.Whitespace
+'<iostream>' Comment.PreprocFile
+'\n' Comment.Preproc
+
+'</' Punctuation
+'syntaxhighlight' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'syntaxhighlight' Name.Tag
+' ' Text.Whitespace
+'lang' Name.Attribute
+'=' Operator
+'cpppp' Literal.String
+' ' Text.Whitespace
+'p' Name.Attribute
+'>' Punctuation
+'\n#include <iostream>\n' Text
+
+'</' Punctuation
+'syntaxhighlight' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'syntaxhighlight' Name.Tag
+' ' Text.Whitespace
+'lang' Name.Attribute
+'=' Operator
+"'" Literal.String.Single
+'cpp' Literal.String.Single
+"'" Literal.String.Single
+'>' Punctuation
+'\n' Text.Whitespace
+
+'#' Comment.Preproc
+'include' Comment.Preproc
+' ' Text.Whitespace
+'<iostream>' Comment.PreprocFile
+'\n' Comment.Preproc
+
+'</' Punctuation
+'syntaxhighlight' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'syntaxhighlight' Name.Tag
+'>' Punctuation
+'\n#include <iostream>\n' Text
+
+'</' Punctuation
+'syntaxhighlight' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'syntaxhighlight' Name.Tag
+'/>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'syntaxhighlight' Name.Tag
+' ' Text.Whitespace
+'lang' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'js' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'lang' Name.Attribute
+'=' Operator
+"'" Literal.String.Single
+'cpp' Literal.String.Single
+"'" Literal.String.Single
+' ' Text.Whitespace
+'aalang' Name.Attribute
+'=' Operator
+'typescript' Literal.String
+'>' Punctuation
+'\n' Text.Whitespace
+
+'#' Comment.Preproc
+'include' Comment.Preproc
+' ' Text.Whitespace
+'<iostream>' Comment.PreprocFile
+'\n' Comment.Preproc
+
+'</' Punctuation
+'syntaxhighlight' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'syntaxhighlight' Name.Tag
+' ' Text.Whitespace
+'/>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'math' Name.Tag
+'>' Punctuation
+'2x ' Text
+'\\times' Keyword
+' 4y ' Text
+'\\div' Keyword
+' 6z + 8 - ' Text
+'\\frac' Keyword
+' ' Text
+'{' Name.Builtin
+'y' Text
+'}' Name.Builtin
+'{' Name.Builtin
+'z' Text
+'^' Name.Builtin
+'2' Text
+'}' Name.Builtin
+' = 0' Text
+'</' Punctuation
+'math' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'math' Name.Tag
+'>' Punctuation
+'\\sin' Keyword
+' 2' Text
+'\\pi' Keyword
+' x + ' Text
+'\\ln' Keyword
+' e' Text
+'</' Punctuation
+'math' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'math' Name.Tag
+' ' Text.Whitespace
+'display' Name.Attribute
+'=' Operator
+'block' Literal.String
+'>' Punctuation
+'\\sum' Keyword
+'_' Name.Builtin
+'{' Name.Builtin
+'n=0' Text
+'}' Name.Builtin
+'^' Name.Builtin
+'\\infty' Keyword
+' ' Text
+'\\frac' Keyword
+'{' Name.Builtin
+'x' Text
+'^' Name.Builtin
+'n' Text
+'}' Name.Builtin
+'{' Name.Builtin
+'n!' Text
+'}' Name.Builtin
+'</' Punctuation
+'math' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'score' Name.Tag
+'>' Punctuation
+'\\relative' Name.Builtin.MusicFunction
+' ' Text.Whitespace
+"c'" Pitch
+' ' Text.Whitespace
+'{' Punctuation
+' ' Text.Whitespace
+'fis' Pitch
+' ' Text.Whitespace
+'d' Pitch
+' ' Text.Whitespace
+'fis' Pitch
+' ' Text.Whitespace
+'a' Pitch
+' ' Text.Whitespace
+'d' Pitch
+' ' Text.Whitespace
+'f' Pitch
+' ' Text.Whitespace
+'e' Pitch
+' ' Text.Whitespace
+'d' Pitch
+' ' Text.Whitespace
+'c' Pitch
+' ' Text.Whitespace
+'cis' Pitch
+' ' Text.Whitespace
+'d' Pitch
+' ' Text.Whitespace
+'e' Pitch
+' ' Text.Whitespace
+'a' Pitch
+' ' Text.Whitespace
+'g' Pitch
+' ' Text.Whitespace
+'f' Pitch
+' ' Text.Whitespace
+'ees' Pitch
+' ' Text.Whitespace
+'}' Punctuation
+'</' Punctuation
+'score' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'score' Name.Tag
+' ' Text.Whitespace
+'lang' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'lilypond' Literal.String.Double
+'"' Literal.String.Double
+'>' Punctuation
+'\\relative' Name.Builtin.MusicFunction
+' ' Text.Whitespace
+"c'" Pitch
+' ' Text.Whitespace
+'{' Punctuation
+' ' Text.Whitespace
+'fis' Pitch
+' ' Text.Whitespace
+'d' Pitch
+' ' Text.Whitespace
+'fis' Pitch
+' ' Text.Whitespace
+'a' Pitch
+' ' Text.Whitespace
+'d' Pitch
+' ' Text.Whitespace
+'f' Pitch
+' ' Text.Whitespace
+'e' Pitch
+' ' Text.Whitespace
+'d' Pitch
+' ' Text.Whitespace
+'c' Pitch
+' ' Text.Whitespace
+'cis' Pitch
+' ' Text.Whitespace
+'d' Pitch
+' ' Text.Whitespace
+'e' Pitch
+' ' Text.Whitespace
+'a' Pitch
+' ' Text.Whitespace
+'g' Pitch
+' ' Text.Whitespace
+'f' Pitch
+' ' Text.Whitespace
+'ees' Pitch
+' ' Text.Whitespace
+'}' Punctuation
+'</' Punctuation
+'score' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'score' Name.Tag
+' ' Text.Whitespace
+'lang' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'ABC' Literal.String.Double
+'"' Literal.String.Double
+'>' Punctuation
+"\nX:1\nM:C\nL:1/4\nK:C\nC, D, E, F,|G, A, B, C|D E F G|A B c d|\ne f g a|b c' d' e'|f' g' a' b'|]\n" Text
+
+'</' Punctuation
+'score' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'score' Name.Tag
+' ' Text.Whitespace
+'lang' Name.Attribute
+'=' Operator
+'not' Literal.String
+'-' Literal.String
+'exist' Literal.String
+'>' Punctuation
+"\\relative c' { fis d fis a d f e d c cis d e a g f ees }" Text
+'</' Punctuation
+'score' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'ref' Name.Tag
+' ' Text.Whitespace
+'name' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'reference' Literal.String.Double
+' ' Literal.String.Double
+'name' Literal.String.Double
+'"' Literal.String.Double
+'>' Punctuation
+'add_template_name_here' Text
+'</' Punctuation
+'ref' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'templatedata' Name.Tag
+'>' Punctuation
+'\n' Text.Whitespace
+
+'{' Punctuation
+'\n ' Text.Whitespace
+'"description"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'"Label unsigned comments in a conversation."' Literal.String.Double
+',' Punctuation
+'\n ' Text.Whitespace
+'"params"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'{' Punctuation
+'\n ' Text.Whitespace
+'"user"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'{' Punctuation
+'\n ' Text.Whitespace
+'"label"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'"User\'s name"' Literal.String.Double
+',' Punctuation
+'\n ' Text.Whitespace
+'"type"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'"wiki-user-name"' Literal.String.Double
+',' Punctuation
+'\n ' Text.Whitespace
+'"required"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'true' Keyword.Constant
+',' Punctuation
+'\n ' Text.Whitespace
+'"description"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'"User name of person who forgot to sign their comment."' Literal.String.Double
+',' Punctuation
+'\n ' Text.Whitespace
+'"aliases"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'[' Punctuation
+'"1"' Literal.String.Double
+']' Punctuation
+'\n ' Text.Whitespace
+'},' Punctuation
+'\n ' Text.Whitespace
+'"date"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'{' Punctuation
+'\n ' Text.Whitespace
+'"label"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'"Date"' Literal.String.Double
+',' Punctuation
+'\n ' Text.Whitespace
+'"suggested"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'true' Keyword.Constant
+',' Punctuation
+'\n ' Text.Whitespace
+'"description"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'{' Punctuation
+'\n ' Text.Whitespace
+'"en"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'"Timestamp of when the comment was posted, in YYYY-MM-DD format."' Literal.String.Double
+'\n ' Text.Whitespace
+'},' Punctuation
+'\n ' Text.Whitespace
+'"aliases"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'[' Punctuation
+'"2"' Literal.String.Double
+'],' Punctuation
+'\n ' Text.Whitespace
+'"autovalue"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'"{{subst:#time:Y-m-d}}"' Literal.String.Double
+'\n ' Text.Whitespace
+'},' Punctuation
+'\n ' Text.Whitespace
+'"year"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'{' Punctuation
+'\n ' Text.Whitespace
+'"label"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'"Year"' Literal.String.Double
+',' Punctuation
+'\n ' Text.Whitespace
+'"type"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'"number"' Literal.String.Double
+'\n ' Text.Whitespace
+'},' Punctuation
+'\n ' Text.Whitespace
+'"month"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'{' Punctuation
+'\n ' Text.Whitespace
+'"label"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'"Month"' Literal.String.Double
+',' Punctuation
+'\n ' Text.Whitespace
+'"inherits"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'"year"' Literal.String.Double
+'\n ' Text.Whitespace
+'},' Punctuation
+'\n ' Text.Whitespace
+'"day"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'{' Punctuation
+'\n ' Text.Whitespace
+'"label"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'"Day"' Literal.String.Double
+',' Punctuation
+'\n ' Text.Whitespace
+'"inherits"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'"year"' Literal.String.Double
+'\n ' Text.Whitespace
+'},' Punctuation
+'\n ' Text.Whitespace
+'"comment"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'{' Punctuation
+'\n ' Text.Whitespace
+'"required"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'false' Keyword.Constant
+'\n ' Text.Whitespace
+'}' Punctuation
+'\n ' Text.Whitespace
+'},' Punctuation
+'\n ' Text.Whitespace
+'"sets"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'[' Punctuation
+'\n ' Text.Whitespace
+'{' Punctuation
+'\n ' Text.Whitespace
+'"label"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'"Date"' Literal.String.Double
+',' Punctuation
+'\n ' Text.Whitespace
+'"params"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'[' Punctuation
+'"year"' Literal.String.Double
+',' Punctuation
+' ' Text.Whitespace
+'"month"' Literal.String.Double
+',' Punctuation
+' ' Text.Whitespace
+'"day"' Literal.String.Double
+']' Punctuation
+'\n ' Text.Whitespace
+'}' Punctuation
+'\n ' Text.Whitespace
+'],' Punctuation
+'\n ' Text.Whitespace
+'"maps"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'{' Punctuation
+'\n ' Text.Whitespace
+'"ExampleConsumer"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'{' Punctuation
+'\n ' Text.Whitespace
+'"foo"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'"user"' Literal.String.Double
+',' Punctuation
+'\n ' Text.Whitespace
+'"bar"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'[' Punctuation
+'"year"' Literal.String.Double
+',' Punctuation
+' ' Text.Whitespace
+'"month"' Literal.String.Double
+',' Punctuation
+' ' Text.Whitespace
+'"day"' Literal.String.Double
+'],' Punctuation
+'\n ' Text.Whitespace
+'"quux"' Name.Tag
+':' Punctuation
+' ' Text.Whitespace
+'[' Punctuation
+'\n ' Text.Whitespace
+'"date"' Literal.String.Double
+',' Punctuation
+'\n ' Text.Whitespace
+'[' Punctuation
+'"day"' Literal.String.Double
+',' Punctuation
+' ' Text.Whitespace
+'"month"' Literal.String.Double
+'],' Punctuation
+'\n ' Text.Whitespace
+'[' Punctuation
+'"month"' Literal.String.Double
+',' Punctuation
+' ' Text.Whitespace
+'"year"' Literal.String.Double
+'],' Punctuation
+'\n ' Text.Whitespace
+'"year"' Literal.String.Double
+'\n ' Text.Whitespace
+']' Punctuation
+'\n ' Text.Whitespace
+'}' Punctuation
+'\n ' Text.Whitespace
+'}' Punctuation
+'\n' Text.Whitespace
+
+'}' Punctuation
+'\n' Text.Whitespace
+
+'</' Punctuation
+'templatedata' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'*' Keyword
+' ' Text
+'<' Punctuation
+'translate' Name.Tag
+'>' Punctuation
+'This' Text
+' ' Text
+'is' Text
+' ' Text
+'a' Text
+' ' Text
+'long' Text
+' ' Text
+'list' Text
+':' Text
+'</' Punctuation
+'translate' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'**' Keyword
+' ' Text
+'<' Punctuation
+'translate' Name.Tag
+'>' Punctuation
+'There' Text
+' ' Text
+'are' Text
+' ' Text
+'more' Text
+' ' Text
+'than' Text
+' ' Text
+'160' Text
+' ' Text
+'words' Text
+' ' Text
+'in' Text
+' ' Text
+'this' Text
+' ' Text
+'list' Text
+',' Text
+'</' Punctuation
+'translate' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'**' Keyword
+' ' Text
+'<' Punctuation
+'translate' Name.Tag
+'>' Punctuation
+'or' Text
+' ' Text
+'there' Text
+' ' Text
+'are' Text
+' ' Text
+'more' Text
+' ' Text
+'than' Text
+' ' Text
+'8' Text
+' ' Text
+'items' Text
+'.' Text
+'</' Punctuation
+'translate' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'*' Keyword
+' ' Text
+'<' Punctuation
+'translate' Name.Tag
+'>' Punctuation
+'So' Text
+' ' Text
+'it' Text
+' ' Text
+'is' Text
+' ' Text
+'better' Text
+' ' Text
+'to' Text
+' ' Text
+'split' Text
+' ' Text
+'it' Text
+' ' Text
+'in' Text
+' ' Text
+'several' Text
+' ' Text
+'smaller' Text
+' ' Text
+'units' Text
+'.' Text
+'</' Punctuation
+'translate' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'*' Keyword
+' ' Text
+'<' Punctuation
+'translate' Name.Tag
+'>' Punctuation
+'But' Text
+' ' Text
+'we' Text
+' ' Text
+'must' Text
+' ' Text
+'exclude' Text
+' ' Text
+'bullet' Text
+' ' Text
+'points' Text
+' ' Text
+'from' Text
+' ' Text
+'translate' Text
+' ' Text
+'tags' Text
+' ' Text
+'to' Text
+' ' Text
+'keep' Text
+' ' Text
+'the' Text
+' ' Text
+'list' Text
+' ' Text
+'accessible' Text
+'.' Text
+'</' Punctuation
+'translate' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<' Punctuation
+'tvar' Name.Tag
+' ' Text.Whitespace
+'name' Name.Attribute
+'=' Operator
+'1' Literal.String
+'>' Punctuation
+'1' Text
+'</' Punctuation
+'tvar' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'span' Name.Tag
+' ' Text.Whitespace
+'<' Punctuation
+'tvar' Name.Tag
+' ' Text.Whitespace
+'name' Name.Attribute
+'=' Operator
+'attr' Literal.String
+'>' Punctuation
+'class' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'css_class' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'background' Literal.String.Double
+'-' Literal.String.Double
+'color' Literal.String.Double
+':' Literal.String.Double
+'blue' Literal.String.Double
+'"' Literal.String.Double
+'</' Punctuation
+'tvar' Name.Tag
+'>' Punctuation
+'>' Punctuation
+'hello' Text
+'</' Punctuation
+'span' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'<' Punctuation
+'span' Name.Tag
+' ' Text.Whitespace
+'<' Punctuation
+'tvar' Name.Tag
+'|' Punctuation
+'attr' Literal.String
+'>' Punctuation
+'class' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'css_class' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'background' Literal.String.Double
+'-' Literal.String.Double
+'color' Literal.String.Double
+':' Literal.String.Double
+'blue' Literal.String.Double
+'"' Literal.String.Double
+'</>' Punctuation
+'>' Text
+'hello' Text
+'</' Punctuation
+'span' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'<' Punctuation
+'tvar' Name.Tag
+' ' Text.Whitespace
+'name' Name.Attribute
+'=' Operator
+'1' Literal.String
+'>' Punctuation
+'center' Name.Tag
+'|' Punctuation
+'5px' Text
+'</' Punctuation
+'tvar' Name.Tag
+'>' Punctuation
+'|' Punctuation
+'hello' Text
+'}}' Punctuation
+'\n' Text
diff --git a/tests/snippets/wikitext/signurature.txt b/tests/snippets/wikitext/signurature.txt
new file mode 100644
index 00000000..d086436a
--- /dev/null
+++ b/tests/snippets/wikitext/signurature.txt
@@ -0,0 +1,24 @@
+---input---
+~~
+~~~
+~~~~
+~~~~~
+~~~~~~
+
+---tokens---
+'~' Text
+'~' Text
+'\n' Text
+
+'~~~' Keyword
+'\n' Text
+
+'~~~~' Keyword
+'\n' Text
+
+'~~~~~' Keyword
+'\n' Text
+
+'~~~~~' Keyword
+'~' Text
+'\n' Text
diff --git a/tests/snippets/wikitext/table.txt b/tests/snippets/wikitext/table.txt
new file mode 100644
index 00000000..0e6dac6d
--- /dev/null
+++ b/tests/snippets/wikitext/table.txt
@@ -0,0 +1,2323 @@
+---input---
+{| class="wikitable"
+|+ Caption text
+|-
+! Header texta !! Header text !! Header text
+|-
+| Example || Example || Example
+|-
+| Example || Example || Example
+|-
+| Example || Example || Example
+|}
+
+{| class=wikitable style="text-align: center;"
+|+ Multiplication table
+|-
+! ×
+! 1
+! 2
+! 3
+|-
+! 1
+| 1 || 2 || 3
+|-
+! 2
+| 2 || 4 || 6
+|-
+! 3
+| 3 || 6 || 9
+|-
+! 4
+| 4 || 8 || 12
+|-
+! 5
+| 5 || 10 || 15
+|}
+
+{| class=wikitable
+|+ style="text-align: left;" | Data reported for 2014–2015, by region<ref name="Garcia 2005"/>
+|-
+! scope=col | Year !! scope=col | Africa !! scope=col | Americas !! scope=col | Asia & Pacific !! scope=col | Europe
+|-
+! scope=row | 2014
+| 2,300 || 8,950 || ''9,325'' || 4,200
+|-
+! scope=row | 2015
+| 2,725 || ''9,200'' || 8,850 || 4,775
+|}
+
+<!-- || can be used in headers as well -->
+{| class="wikitable"
+|+ Caption text
+|-
+! Header text !! Header text || Header text
+|-
+ |}
+
+Text before centered table...
+{| style="border: 1px solid black; border-spacing: 0; margin: 1em auto;"
+|+ '''An example table'''
+|-
+! style="border: 1px solid black; padding: 5px; background: #efefef;" | First header
+! colspan="2" style="border: 1px solid black; padding: 5px; background: #ffdead;" | Second header
+|-
+| style="border: 1px solid black; padding: 5px;" | Upper left
+| style="border: 1px solid black; padding: 5px;" | Upper middle
+| rowspan="2" style="border: 1px solid black; border-bottom: 3px solid grey; padding: 5px; vertical-align: top;" |
+Right side
+|-
+| style="border: 1px solid black; border-bottom: 3px solid grey; padding: 5px;" | Lower left
+| style="border: 1px solid black; border-bottom: 3px solid grey; padding: 5px;" | Lower middle
+|-
+| colspan="3" style="border: 1px solid black; text-align: center;" |
+Text before a nested table...
+{|
+|+ ''A table in a table''
+|-
+| style="text-align: center; width: 150px;" | [[File:Wiki.png]]
+| style="text-align: center; width: 150px;" | [[File:Wiki.png]]
+|-
+| colspan="2" style="text-align:center; border-top: 1px solid red;<!--
+ --> border-right: 1px solid red; border-bottom: 2px solid red;<!--
+ --> border-left: 1px solid red;" |
+Two Wikipedia logos
+|}
+...text after a nested table
+|}
+...text after centered table
+
+{| class="wikitable"
+|+ a=1 | Caption text
+|- a=1 b=2
+! a=1 | Header text !! b=2 | Header text !! c="sdfsd f" | Header text
+|-
+| Example || Example || Example
+|-
+| Example || Example || Example
+|-
+| Example || Example || Example
+|}
+
+{| class=wikitable
+|-
+|class=1|P|i|p|e|
+|C|e|l|l|2|
+|-
+|class=1|P|i|p|e||class=1|C|e|l|l|2|
+|-
+||P|i|p|e|s||C|e|l|l|2|
+|}
+
+{| class=wikitable
+|-
+|<nowiki>|</nowiki>Pipes34:<nowiki>||</nowiki>
+|-
+|&#124;Pipes34:&#124;&#x7C;
+|}
+
+{| style="border: 1px solid black;"
+| style="border: 1px solid black;" | &alpha;
+| style="border: 1px solid black; text-align:center;" | cell2
+{| style="border: 2px solid black; background: #ffffcc;" <!-- The nested table must be on a new line -->
+| style="border: 2px solid darkgray;" | NESTED
+|-
+| style="border: 2px solid darkgray;" | TABLE
+|}
+| style="border: 1px solid black; vertical-align: bottom;" | the original table again
+| style="border: 1px solid black; width:100px" |
+{| style="border: 2px solid black; background: #ffffcc"
+| style="border: 2px solid darkgray;" | A
+|}
+{| style="border: 2px solid black; background: #ffffcc"
+| style="border: 2px solid darkgray;" | B
+| style="border: 2px solid darkgray;" | B
+|}
+| style="border: 1px solid black; width: 50px" |
+{| style="border: 2px solid black; background:#ffffcc; float:left"
+| style="border: 2px solid darkgray;" | C
+|}
+{| style="border: 2px solid black; background:#ffffcc; float:right"
+| style="border: 2px solid darkgray;" | D
+|}
+|}
+
+{| style="border-spacing: 2px; border: 1px solid darkgray;"
+! style="width: 140px;" | Left
+! style="width: 150px;" | Center
+! style="width: 130px;" | Right
+|- style="text-align: center;"
+| style="border: 1px solid blue;"|
+[[File:StarIconBronze.png|120px|Bronze star icon]]
+| style="border: 1px solid #777777;"|
+[[File:StarIconGold.png|120px|Gold star icon]]
+| style="border: 1px solid #22AA55;"|<!-- greenish border -->
+[[File:StarIconGreen.png|120px|Green star icon]]
+|- style="text-align: center;"
+|Bronze star || Gold star || Green star
+|}
+
+{| class=wikitable
+ <!--
+ Row one is shown because the '1' evaluates
+ to TRUE.
+ -->
+ {{ #if:1|{{!}}-
+ ! scope=row {{!}} row one, column one
+ <!--
+ Any {{!}}'s are evaluated to the pipe
+ character '|' since the template '!' just
+ contains '|'.
+ -->
+ {{!}}row one, column two}}
+ <!--
+ Row two is NOT shown because the space
+ between the ':' and the '|' evaluates to FALSE.
+ -->
+ {{ #if: |{{!}}-
+ ! scope=row {{!}} row two, column one
+ {{!}}row two, column two}}
+ <!--
+ Row three is shown.
+ -->
+ |-
+ ! scope=row {{!}} row three, column one
+ | row three, column two
+|}
+
+---tokens---
+'{|' Punctuation
+' ' Text.Whitespace
+'class' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'wikitable' Literal.String.Double
+'"' Literal.String.Double
+'\n' Text
+
+'|+' Punctuation
+' Caption text' Generic.Heading
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'!' Punctuation
+' ' Generic.Subheading
+'Header' Generic.Subheading
+' ' Generic.Subheading
+'texta' Generic.Subheading
+' ' Generic.Subheading
+'!!' Punctuation
+' ' Generic.Subheading
+'Header' Generic.Subheading
+' ' Generic.Subheading
+'text' Generic.Subheading
+' ' Generic.Subheading
+'!!' Punctuation
+' ' Generic.Subheading
+'Header' Generic.Subheading
+' ' Generic.Subheading
+'text' Generic.Subheading
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'|' Punctuation
+' ' Text
+'Example' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'Example' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'Example' Text
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'|' Punctuation
+' ' Text
+'Example' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'Example' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'Example' Text
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'|' Punctuation
+' ' Text
+'Example' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'Example' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'Example' Text
+'\n' Text
+
+'|}' Punctuation
+'\n' Text
+
+'\n' Text.Whitespace
+
+'{|' Punctuation
+' ' Text.Whitespace
+'class' Name.Attribute
+'=' Operator
+'wikitable' Literal.String
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'text' Literal.String.Double
+'-' Literal.String.Double
+'align' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'center' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+'\n' Text
+
+'|+' Punctuation
+' Multiplication table' Generic.Heading
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'!' Punctuation
+' ' Generic.Subheading
+'×' Generic.Subheading
+'\n' Text
+
+'!' Punctuation
+' ' Generic.Subheading
+'1' Generic.Subheading
+'\n' Text
+
+'!' Punctuation
+' ' Generic.Subheading
+'2' Generic.Subheading
+'\n' Text
+
+'!' Punctuation
+' ' Generic.Subheading
+'3' Generic.Subheading
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'!' Punctuation
+' ' Generic.Subheading
+'1' Generic.Subheading
+'\n' Text
+
+'|' Punctuation
+' ' Text
+'1' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'2' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'3' Text
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'!' Punctuation
+' ' Generic.Subheading
+'2' Generic.Subheading
+'\n' Text
+
+'|' Punctuation
+' ' Text
+'2' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'4' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'6' Text
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'!' Punctuation
+' ' Generic.Subheading
+'3' Generic.Subheading
+'\n' Text
+
+'|' Punctuation
+' ' Text
+'3' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'6' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'9' Text
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'!' Punctuation
+' ' Generic.Subheading
+'4' Generic.Subheading
+'\n' Text
+
+'|' Punctuation
+' ' Text
+'4' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'8' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'12' Text
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'!' Punctuation
+' ' Generic.Subheading
+'5' Generic.Subheading
+'\n' Text
+
+'|' Punctuation
+' ' Text
+'5' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'10' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'15' Text
+'\n' Text
+
+'|}' Punctuation
+'\n' Text
+
+'\n' Text.Whitespace
+
+'{|' Punctuation
+' ' Text.Whitespace
+'class' Name.Attribute
+'=' Operator
+'wikitable' Literal.String
+'\n' Text
+
+'|+' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'text' Literal.String.Double
+'-' Literal.String.Double
+'align' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'left' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' Data reported for 2014–2015, by region<ref name="Garcia 2005"/>' Generic.Heading
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'!' Punctuation
+' ' Text.Whitespace
+'scope' Name.Attribute
+'=' Operator
+'col' Literal.String
+' ' Text.Whitespace
+'|' Punctuation
+' ' Generic.Subheading
+'Year' Generic.Subheading
+' ' Generic.Subheading
+'!!' Punctuation
+' ' Text.Whitespace
+'scope' Name.Attribute
+'=' Operator
+'col' Literal.String
+' ' Text.Whitespace
+'|' Punctuation
+' ' Generic.Subheading
+'Africa' Generic.Subheading
+' ' Generic.Subheading
+'!!' Punctuation
+' ' Text.Whitespace
+'scope' Name.Attribute
+'=' Operator
+'col' Literal.String
+' ' Text.Whitespace
+'|' Punctuation
+' ' Generic.Subheading
+'Americas' Generic.Subheading
+' ' Generic.Subheading
+'!!' Punctuation
+' ' Text.Whitespace
+'scope' Name.Attribute
+'=' Operator
+'col' Literal.String
+' ' Text.Whitespace
+'|' Punctuation
+' ' Generic.Subheading
+'Asia' Generic.Subheading
+' ' Generic.Subheading
+'&' Generic.Subheading
+' ' Generic.Subheading
+'Pacific' Generic.Subheading
+' ' Generic.Subheading
+'!!' Punctuation
+' ' Text.Whitespace
+'scope' Name.Attribute
+'=' Operator
+'col' Literal.String
+' ' Text.Whitespace
+'|' Punctuation
+' ' Generic.Subheading
+'Europe' Generic.Subheading
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'!' Punctuation
+' ' Text.Whitespace
+'scope' Name.Attribute
+'=' Operator
+'row' Literal.String
+' ' Text.Whitespace
+'|' Punctuation
+' ' Generic.Subheading
+'2014' Generic.Subheading
+'\n' Text
+
+'|' Punctuation
+' ' Text
+'2' Text
+',' Text
+'300' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'8' Text
+',' Text
+'950' Text
+' ' Text
+'||' Punctuation
+' ' Text
+"''" Generic.Emph
+'9' Generic.Emph
+',' Generic.Emph
+'325' Generic.Emph
+"''" Generic.Emph
+' ' Text
+'||' Punctuation
+' ' Text
+'4' Text
+',' Text
+'200' Text
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'!' Punctuation
+' ' Text.Whitespace
+'scope' Name.Attribute
+'=' Operator
+'row' Literal.String
+' ' Text.Whitespace
+'|' Punctuation
+' ' Generic.Subheading
+'2015' Generic.Subheading
+'\n' Text
+
+'|' Punctuation
+' ' Text
+'2' Text
+',' Text
+'725' Text
+' ' Text
+'||' Punctuation
+' ' Text
+"''" Generic.Emph
+'9' Generic.Emph
+',' Generic.Emph
+'200' Generic.Emph
+"''" Generic.Emph
+' ' Text
+'||' Punctuation
+' ' Text
+'8' Text
+',' Text
+'850' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'4' Text
+',' Text
+'775' Text
+'\n' Text
+
+'|}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'<!-- || can be used in headers as well -->' Comment.Multiline
+'\n' Text
+
+'{|' Punctuation
+' ' Text.Whitespace
+'class' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'wikitable' Literal.String.Double
+'"' Literal.String.Double
+'\n' Text
+
+'|+' Punctuation
+' Caption text' Generic.Heading
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'!' Punctuation
+' ' Generic.Subheading
+'Header' Generic.Subheading
+' ' Generic.Subheading
+'text' Generic.Subheading
+' ' Generic.Subheading
+'!!' Punctuation
+' ' Generic.Subheading
+'Header' Generic.Subheading
+' ' Generic.Subheading
+'text' Generic.Subheading
+' ' Generic.Subheading
+'||' Punctuation
+' ' Generic.Subheading
+'Header' Generic.Subheading
+' ' Generic.Subheading
+'text' Generic.Subheading
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+' ' Text.Whitespace
+'|}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'Text' Text
+' ' Text
+'before' Text
+' ' Text
+'centered' Text
+' ' Text
+'table' Text
+'.' Text
+'.' Text
+'.' Text
+'\n' Text
+
+'{|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'1px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'black' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'border' Literal.String.Double
+'-' Literal.String.Double
+'spacing' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'0' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'margin' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'1em' Literal.String.Double
+' ' Literal.String.Double
+'auto' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+'\n' Text
+
+'|+' Punctuation
+" '''An example table'''" Generic.Heading
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'!' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'1px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'black' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'padding' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'5px' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'background' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'#' Literal.String.Double
+'efefef' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Generic.Subheading
+'First' Generic.Subheading
+' ' Generic.Subheading
+'header' Generic.Subheading
+'\n' Text
+
+'!' Punctuation
+' ' Text.Whitespace
+'colspan' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'2' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'1px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'black' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'padding' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'5px' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'background' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'#' Literal.String.Double
+'ffdead' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Generic.Subheading
+'Second' Generic.Subheading
+' ' Generic.Subheading
+'header' Generic.Subheading
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'1px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'black' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'padding' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'5px' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Text
+'Upper' Text
+' ' Text
+'left' Text
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'1px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'black' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'padding' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'5px' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Text
+'Upper' Text
+' ' Text
+'middle' Text
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'rowspan' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'2' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'1px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'black' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'border' Literal.String.Double
+'-' Literal.String.Double
+'bottom' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'3px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'grey' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'padding' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'5px' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'vertical' Literal.String.Double
+'-' Literal.String.Double
+'align' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'top' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+'\n' Text
+
+'Right' Text
+' ' Text
+'side' Text
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'1px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'black' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'border' Literal.String.Double
+'-' Literal.String.Double
+'bottom' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'3px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'grey' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'padding' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'5px' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Text
+'Lower' Text
+' ' Text
+'left' Text
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'1px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'black' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'border' Literal.String.Double
+'-' Literal.String.Double
+'bottom' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'3px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'grey' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'padding' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'5px' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Text
+'Lower' Text
+' ' Text
+'middle' Text
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'colspan' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'3' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'1px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'black' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'text' Literal.String.Double
+'-' Literal.String.Double
+'align' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'center' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+'\n' Text
+
+'Text' Text
+' ' Text
+'before' Text
+' ' Text
+'a' Text
+' ' Text
+'nested' Text
+' ' Text
+'table' Text
+'.' Text
+'.' Text
+'.' Text
+'\n' Text
+
+'{|' Punctuation
+'\n' Text
+
+'|+' Punctuation
+" ''A table in a table''" Generic.Heading
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'text' Literal.String.Double
+'-' Literal.String.Double
+'align' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'center' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'width' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'150px' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Text
+'[[' Punctuation
+'File' Name.Namespace
+':' Punctuation
+'Wiki.png' Name.Tag
+']]' Punctuation
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'text' Literal.String.Double
+'-' Literal.String.Double
+'align' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'center' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'width' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'150px' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Text
+'[[' Punctuation
+'File' Name.Namespace
+':' Punctuation
+'Wiki.png' Name.Tag
+']]' Punctuation
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'|' Punctuation
+' ' Text
+'colspan' Text
+'=' Text
+'"' Text
+'2' Text
+'"' Text
+' ' Text
+'style' Text
+'=' Text
+'"' Text
+'text' Text
+'-' Text
+'align' Text
+':' Text
+'center' Text
+';' Text
+' ' Text
+'border' Text
+'-' Text
+'top' Text
+':' Text
+' ' Text
+'1px' Text
+' ' Text
+'solid' Text
+' ' Text
+'red' Text
+';' Text
+'<!--\n -->' Comment.Multiline
+' ' Text
+'border' Text
+'-' Text
+'right' Text
+':' Text
+' ' Text
+'1px' Text
+' ' Text
+'solid' Text
+' ' Text
+'red' Text
+';' Text
+' ' Text
+'border' Text
+'-' Text
+'bottom' Text
+':' Text
+' ' Text
+'2px' Text
+' ' Text
+'solid' Text
+' ' Text
+'red' Text
+';' Text
+'<!--\n -->' Comment.Multiline
+' ' Text
+'border' Text
+'-' Text
+'left' Text
+':' Text
+' ' Text
+'1px' Text
+' ' Text
+'solid' Text
+' ' Text
+'red' Text
+';' Text
+'"' Text
+' ' Text
+'|' Text
+'\n' Text
+
+'Two' Text
+' ' Text
+'Wikipedia' Text
+' ' Text
+'logos' Text
+'\n' Text
+
+'|}' Punctuation
+'\n' Text
+
+'.' Text
+'.' Text
+'.' Text
+'text' Text
+' ' Text
+'after' Text
+' ' Text
+'a' Text
+' ' Text
+'nested' Text
+' ' Text
+'table' Text
+'\n' Text
+
+'|}' Punctuation
+'\n' Text
+
+'.' Text
+'.' Text
+'.' Text
+'text' Text
+' ' Text
+'after' Text
+' ' Text
+'centered' Text
+' ' Text
+'table' Text
+'\n' Text
+
+'\n' Text.Whitespace
+
+'{|' Punctuation
+' ' Text.Whitespace
+'class' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'wikitable' Literal.String.Double
+'"' Literal.String.Double
+'\n' Text
+
+'|+' Punctuation
+' ' Text.Whitespace
+'a' Name.Attribute
+'=' Operator
+'1' Literal.String
+' ' Text.Whitespace
+'|' Punctuation
+' Caption text' Generic.Heading
+'\n' Text
+
+'|-' Punctuation
+' ' Text.Whitespace
+'a' Name.Attribute
+'=' Operator
+'1' Literal.String
+' ' Text.Whitespace
+'b' Name.Attribute
+'=' Operator
+'2' Literal.String
+'\n' Text
+
+'!' Punctuation
+' ' Text.Whitespace
+'a' Name.Attribute
+'=' Operator
+'1' Literal.String
+' ' Text.Whitespace
+'|' Punctuation
+' ' Generic.Subheading
+'Header' Generic.Subheading
+' ' Generic.Subheading
+'text' Generic.Subheading
+' ' Generic.Subheading
+'!!' Punctuation
+' ' Text.Whitespace
+'b' Name.Attribute
+'=' Operator
+'2' Literal.String
+' ' Text.Whitespace
+'|' Punctuation
+' ' Generic.Subheading
+'Header' Generic.Subheading
+' ' Generic.Subheading
+'text' Generic.Subheading
+' ' Generic.Subheading
+'!!' Punctuation
+' ' Text.Whitespace
+'c' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'sdfsd' Literal.String.Double
+' ' Literal.String.Double
+'f' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Generic.Subheading
+'Header' Generic.Subheading
+' ' Generic.Subheading
+'text' Generic.Subheading
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'|' Punctuation
+' ' Text
+'Example' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'Example' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'Example' Text
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'|' Punctuation
+' ' Text
+'Example' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'Example' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'Example' Text
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'|' Punctuation
+' ' Text
+'Example' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'Example' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'Example' Text
+'\n' Text
+
+'|}' Punctuation
+'\n' Text
+
+'\n' Text.Whitespace
+
+'{|' Punctuation
+' ' Text.Whitespace
+'class' Name.Attribute
+'=' Operator
+'wikitable' Literal.String
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'|' Punctuation
+'class' Name.Attribute
+'=' Operator
+'1' Literal.String
+'|' Punctuation
+'P' Text
+'|' Text
+'i' Text
+'|' Text
+'p' Text
+'|' Text
+'e' Text
+'|' Text
+'\n' Text
+
+'|' Punctuation
+'C' Name.Attribute
+'|' Punctuation
+'e' Text
+'|' Text
+'l' Text
+'|' Text
+'l' Text
+'|' Text
+'2' Text
+'|' Text
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'|' Punctuation
+'class' Name.Attribute
+'=' Operator
+'1' Literal.String
+'|' Punctuation
+'P' Text
+'|' Text
+'i' Text
+'|' Text
+'p' Text
+'|' Text
+'e' Text
+'||' Punctuation
+'class' Name.Attribute
+'=' Operator
+'1' Literal.String
+'|' Punctuation
+'C' Text
+'|' Text
+'e' Text
+'|' Text
+'l' Text
+'|' Text
+'l' Text
+'|' Text
+'2' Text
+'|' Text
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'|' Punctuation
+'|' Punctuation
+'P' Text
+'|' Text
+'i' Text
+'|' Text
+'p' Text
+'|' Text
+'e' Text
+'|' Text
+'s' Text
+'||' Punctuation
+'C' Name.Attribute
+'|' Punctuation
+'e' Text
+'|' Text
+'l' Text
+'|' Text
+'l' Text
+'|' Text
+'2' Text
+'|' Text
+'\n' Text
+
+'|}' Punctuation
+'\n' Text
+
+'\n' Text.Whitespace
+
+'{|' Punctuation
+' ' Text.Whitespace
+'class' Name.Attribute
+'=' Operator
+'wikitable' Literal.String
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'|' Punctuation
+'<' Punctuation
+'nowiki' Name.Tag
+'>' Punctuation
+'|' Text
+'</' Punctuation
+'nowiki' Name.Tag
+'>' Punctuation
+'Pipes34' Text
+':' Text
+'<' Punctuation
+'nowiki' Name.Tag
+'>' Punctuation
+'|' Text
+'|' Text
+'</' Punctuation
+'nowiki' Name.Tag
+'>' Punctuation
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'|' Punctuation
+'&#124;' Name.Entity
+'Pipes34' Text
+':' Text
+'&#124;' Name.Entity
+'&#x7C;' Name.Entity
+'\n' Text
+
+'|}' Punctuation
+'\n' Text
+
+'\n' Text.Whitespace
+
+'{|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'1px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'black' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'1px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'black' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Text
+'&alpha;' Name.Entity
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'1px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'black' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'text' Literal.String.Double
+'-' Literal.String.Double
+'align' Literal.String.Double
+':' Literal.String.Double
+'center' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Text
+'cell2' Text
+'\n' Text
+
+'{|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'2px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'black' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'background' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'#' Literal.String.Double
+'ffffcc' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'<!-- The nested table must be on a new line -->' Comment.Multiline
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'2px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'darkgray' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Text
+'NESTED' Text
+'\n' Text
+
+'|-' Punctuation
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'2px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'darkgray' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Text
+'TABLE' Text
+'\n' Text
+
+'|}' Punctuation
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'1px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'black' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'vertical' Literal.String.Double
+'-' Literal.String.Double
+'align' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'bottom' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Text
+'the' Text
+' ' Text
+'original' Text
+' ' Text
+'table' Text
+' ' Text
+'again' Text
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'1px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'black' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'width' Literal.String.Double
+':' Literal.String.Double
+'100px' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+'\n' Text
+
+'{|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'2px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'black' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'background' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'#' Literal.String.Double
+'ffffcc' Literal.String.Double
+'"' Literal.String.Double
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'2px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'darkgray' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Text
+'A' Text
+'\n' Text
+
+'|}' Punctuation
+'\n' Text
+
+'{|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'2px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'black' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'background' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'#' Literal.String.Double
+'ffffcc' Literal.String.Double
+'"' Literal.String.Double
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'2px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'darkgray' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Text
+'B' Text
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'2px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'darkgray' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Text
+'B' Text
+'\n' Text
+
+'|}' Punctuation
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'1px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'black' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'width' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'50px' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+'\n' Text
+
+'{|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'2px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'black' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'background' Literal.String.Double
+':' Literal.String.Double
+'#' Literal.String.Double
+'ffffcc' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'float' Literal.String.Double
+':' Literal.String.Double
+'left' Literal.String.Double
+'"' Literal.String.Double
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'2px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'darkgray' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Text
+'C' Text
+'\n' Text
+
+'|}' Punctuation
+'\n' Text
+
+'{|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'2px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'black' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'background' Literal.String.Double
+':' Literal.String.Double
+'#' Literal.String.Double
+'ffffcc' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'float' Literal.String.Double
+':' Literal.String.Double
+'right' Literal.String.Double
+'"' Literal.String.Double
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'2px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'darkgray' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Text
+'D' Text
+'\n' Text
+
+'|}' Punctuation
+'\n' Text
+
+'|}' Punctuation
+'\n' Text
+
+'\n' Text.Whitespace
+
+'{|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+'-' Literal.String.Double
+'spacing' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'2px' Literal.String.Double
+';' Literal.String.Double
+' ' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'1px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'darkgray' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+'\n' Text
+
+'!' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'width' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'140px' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Generic.Subheading
+'Left' Generic.Subheading
+'\n' Text
+
+'!' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'width' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'150px' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Generic.Subheading
+'Center' Generic.Subheading
+'\n' Text
+
+'!' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'width' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'130px' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+' ' Text.Whitespace
+'|' Punctuation
+' ' Generic.Subheading
+'Right' Generic.Subheading
+'\n' Text
+
+'|-' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'text' Literal.String.Double
+'-' Literal.String.Double
+'align' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'center' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'1px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'blue' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+'|' Punctuation
+'\n' Text
+
+'[[' Punctuation
+'File' Name.Namespace
+':' Punctuation
+'StarIconBronze.png' Name.Tag
+'|' Punctuation
+'120px' Text
+'|' Punctuation
+'Bronze' Text
+' ' Text
+'star' Text
+' ' Text
+'icon' Text
+']]' Punctuation
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'1px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'#' Literal.String.Double
+'777777' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+'|' Punctuation
+'\n' Text
+
+'[[' Punctuation
+'File' Name.Namespace
+':' Punctuation
+'StarIconGold.png' Name.Tag
+'|' Punctuation
+'120px' Text
+'|' Punctuation
+'Gold' Text
+' ' Text
+'star' Text
+' ' Text
+'icon' Text
+']]' Punctuation
+'\n' Text
+
+'|' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'border' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'1px' Literal.String.Double
+' ' Literal.String.Double
+'solid' Literal.String.Double
+' ' Literal.String.Double
+'#' Literal.String.Double
+'22AA55' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+'|' Punctuation
+'<!-- greenish border -->' Comment.Multiline
+'\n' Text
+
+'[[' Punctuation
+'File' Name.Namespace
+':' Punctuation
+'StarIconGreen.png' Name.Tag
+'|' Punctuation
+'120px' Text
+'|' Punctuation
+'Green' Text
+' ' Text
+'star' Text
+' ' Text
+'icon' Text
+']]' Punctuation
+'\n' Text
+
+'|-' Punctuation
+' ' Text.Whitespace
+'style' Name.Attribute
+'=' Operator
+'"' Literal.String.Double
+'text' Literal.String.Double
+'-' Literal.String.Double
+'align' Literal.String.Double
+':' Literal.String.Double
+' ' Literal.String.Double
+'center' Literal.String.Double
+';' Literal.String.Double
+'"' Literal.String.Double
+'\n' Text
+
+'|' Punctuation
+'Bronze' Text
+' ' Text
+'star' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'Gold' Text
+' ' Text
+'star' Text
+' ' Text
+'||' Punctuation
+' ' Text
+'Green' Text
+' ' Text
+'star' Text
+'\n' Text
+
+'|}' Punctuation
+'\n' Text
+
+'\n' Text.Whitespace
+
+'{|' Punctuation
+' ' Text.Whitespace
+'class' Name.Attribute
+'=' Operator
+'wikitable' Literal.String
+'\n' Text
+
+' ' Text
+"<!--\n Row one is shown because the '1' evaluates\n to TRUE.\n -->" Comment.Multiline
+'\n' Text
+
+' ' Text
+'{{' Punctuation
+' ' Text.Whitespace
+'#if' Name.Function
+':' Punctuation
+'1' Text
+'|' Punctuation
+'{{' Punctuation
+'!' Name.Function
+'}}' Punctuation
+'-' Text
+'\n' Text
+
+' ' Text
+'!' Text
+' ' Text
+'scope' Text
+'=' Text
+'row' Text
+' ' Text
+'{{' Punctuation
+'!' Name.Function
+'}}' Punctuation
+' ' Text
+'row' Text
+' ' Text
+'one' Text
+',' Text
+' ' Text
+'column' Text
+' ' Text
+'one' Text
+'\n' Text
+
+' ' Text
+"<!--\n Any {{!}}'s are evaluated to the pipe\n character '|' since the template '!' just\n contains '|'.\n -->" Comment.Multiline
+'\n' Text
+
+' ' Text
+'{{' Punctuation
+'!' Name.Function
+'}}' Punctuation
+'row' Text
+' ' Text
+'one' Text
+',' Text
+' ' Text
+'column' Text
+' ' Text
+'two' Text
+'}}' Punctuation
+'\n' Text
+
+' ' Text
+"<!--\n Row two is NOT shown because the space\n between the ':' and the '|' evaluates to FALSE.\n -->" Comment.Multiline
+'\n' Text
+
+' ' Text
+'{{' Punctuation
+' ' Text.Whitespace
+'#if' Name.Function
+':' Punctuation
+' ' Text
+'|' Punctuation
+'{{' Punctuation
+'!' Name.Function
+'}}' Punctuation
+'-' Text
+'\n' Text
+
+' ' Text
+'!' Text
+' ' Text
+'scope' Text
+'=' Text
+'row' Text
+' ' Text
+'{{' Punctuation
+'!' Name.Function
+'}}' Punctuation
+' ' Text
+'row' Text
+' ' Text
+'two' Text
+',' Text
+' ' Text
+'column' Text
+' ' Text
+'one' Text
+'\n' Text
+
+' ' Text
+'{{' Punctuation
+'!' Name.Function
+'}}' Punctuation
+'row' Text
+' ' Text
+'two' Text
+',' Text
+' ' Text
+'column' Text
+' ' Text
+'two' Text
+'}}' Punctuation
+'\n' Text
+
+' ' Text
+'<!--\n Row three is shown.\n -->' Comment.Multiline
+'\n' Text
+
+' ' Text.Whitespace
+'|-' Punctuation
+'\n' Text
+
+' !' Punctuation
+' ' Generic.Subheading
+'scope' Generic.Subheading
+'=' Generic.Subheading
+'row' Generic.Subheading
+' ' Generic.Subheading
+'{' Generic.Subheading
+'{' Generic.Subheading
+'!' Generic.Subheading
+'}' Generic.Subheading
+'}' Generic.Subheading
+' ' Generic.Subheading
+'row' Generic.Subheading
+' ' Generic.Subheading
+'three' Generic.Subheading
+',' Generic.Subheading
+' ' Generic.Subheading
+'column' Generic.Subheading
+' ' Generic.Subheading
+'one' Generic.Subheading
+'\n' Text
+
+' |' Punctuation
+' ' Text
+'row' Text
+' ' Text
+'three' Text
+',' Text
+' ' Text
+'column' Text
+' ' Text
+'two' Text
+'\n' Text
+
+'|}' Punctuation
+'\n' Text
diff --git a/tests/snippets/wikitext/template.txt b/tests/snippets/wikitext/template.txt
new file mode 100644
index 00000000..050011a9
--- /dev/null
+++ b/tests/snippets/wikitext/template.txt
@@ -0,0 +1,617 @@
+---input---
+{{payoff matrix | UL = 5 | UR = 7 | DL = 2 | DR = 9 | Name = Example usage }}
+{{payoff matrix
+| UL = 5
+| UR = 7
+| DL = 2
+| DR = 9
+| Name = Example usage
+}}
+
+{{Wikipedia:foo|1=1}}
+{{Wikipe{{void}}dia:foo|1=1}}
+{{:foo|1=1}}
+
+{{short description|Wikipedia help page}}
+{{pp-move-indef|small=yes}}
+{{pp-vandalism|small=yes}}
+{{for|the '''encyclopedic''' section on wikitext|Wiki#Editing}}
+{{redirect|H:WT|the welcoming templates|Wikipedia:Welcoming committee/Welcome templates}}
+{{Locutions pages header}}
+{{Wikipedia how to|H:WT|H:MARKUP|H:WIKICODE}}
+{{Wikitext navbox}}
+
+{{Template|1={{{1}}}}}
+
+{{vo{{void|void}}id|param1=1|par{{void}}am2=2}}
+
+{{math|2''x'' &times; 4''y'' &divide; 6''z'' + 8 &minus; {{sfrac|''y''|''z''<sup>2</sup>}} {{=}} 0}}
+
+{{math|sin 2&pi;''x'' + ln ''e''}}
+It follows that {{math|''x''<sup>2</sup> &ge; 0}} for real {{mvar|x}}.
+
+{{Help:Transclusion demo}}
+
+{{Tooltip|Hover your mouse over this text
+|This is the hover text}}
+
+Go to this page to see the Tooltip
+template itself: {{tl|Tooltip}}
+
+This is how to {{Font color||yellow|highlight part of a sentence}}.
+
+{{msg:xyz}}
+{{raw:xyz}}
+{{msgnw:xyz}}
+{{subst:xyz}}
+{{safesubst:xyz}}
+
+{{{1}}}
+{{{IncludedWorkURL|}}}
+{{{Citation class|{{{Citation type|}}}}}}
+
+---tokens---
+'{{' Punctuation
+'payoff' Name.Tag
+' ' Name.Tag
+'matrix' Name.Tag
+' ' Text
+'|' Punctuation
+' UL ' Name.Label
+'=' Operator
+' ' Text
+'5' Text
+' ' Text
+'|' Punctuation
+' UR ' Name.Label
+'=' Operator
+' ' Text
+'7' Text
+' ' Text
+'|' Punctuation
+' DL ' Name.Label
+'=' Operator
+' ' Text
+'2' Text
+' ' Text
+'|' Punctuation
+' DR ' Name.Label
+'=' Operator
+' ' Text
+'9' Text
+' ' Text
+'|' Punctuation
+' Name ' Name.Label
+'=' Operator
+' ' Text
+'Example' Text
+' ' Text
+'usage' Text
+' ' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'payoff' Name.Tag
+' ' Name.Tag
+'matrix' Name.Tag
+'\n' Text
+
+'|' Punctuation
+' UL ' Name.Label
+'=' Operator
+' ' Text
+'5' Text
+'\n' Text
+
+'|' Punctuation
+' UR ' Name.Label
+'=' Operator
+' ' Text
+'7' Text
+'\n' Text
+
+'|' Punctuation
+' DL ' Name.Label
+'=' Operator
+' ' Text
+'2' Text
+'\n' Text
+
+'|' Punctuation
+' DR ' Name.Label
+'=' Operator
+' ' Text
+'9' Text
+'\n' Text
+
+'|' Punctuation
+' Name ' Name.Label
+'=' Operator
+' ' Text
+'Example' Text
+' ' Text
+'usage' Text
+'\n' Text
+
+'}}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'{{' Punctuation
+'Wikipedia' Name.Namespace
+':' Punctuation
+'foo' Name.Tag
+'|' Punctuation
+'1' Name.Label
+'=' Operator
+'1' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'Wikipe' Name.Tag
+'{{' Punctuation
+'void' Name.Tag
+'}}' Punctuation
+'dia' Name.Tag
+':' Name.Tag
+'foo' Name.Tag
+'|' Punctuation
+'1' Name.Label
+'=' Operator
+'1' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+':' Punctuation
+'foo' Name.Tag
+'|' Punctuation
+'1' Name.Label
+'=' Operator
+'1' Text
+'}}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'{{' Punctuation
+'short' Name.Tag
+' ' Name.Tag
+'description' Name.Tag
+'|' Punctuation
+'Wikipedia' Text
+' ' Text
+'help' Text
+' ' Text
+'page' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'pp' Name.Tag
+'-' Name.Tag
+'move' Name.Tag
+'-' Name.Tag
+'indef' Name.Tag
+'|' Punctuation
+'small' Name.Label
+'=' Operator
+'yes' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'pp' Name.Tag
+'-' Name.Tag
+'vandalism' Name.Tag
+'|' Punctuation
+'small' Name.Label
+'=' Operator
+'yes' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'for' Name.Tag
+'|' Punctuation
+'the' Text
+' ' Text
+"'''" Generic.Strong
+'encyclopedic' Generic.Strong
+"'''" Generic.Strong
+' ' Text
+'section' Text
+' ' Text
+'on' Text
+' ' Text
+'wikitext' Text
+'|' Punctuation
+'Wiki' Text
+'#' Text
+'Editing' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'redirect' Name.Tag
+'|' Punctuation
+'H' Text
+':' Text
+'WT' Text
+'|' Punctuation
+'the' Text
+' ' Text
+'welcoming' Text
+' ' Text
+'templates' Text
+'|' Punctuation
+'Wikipedia' Text
+':' Text
+'Welcoming' Text
+' ' Text
+'committee' Text
+'/' Text
+'Welcome' Text
+' ' Text
+'templates' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'Locutions' Name.Tag
+' ' Name.Tag
+'pages' Name.Tag
+' ' Name.Tag
+'header' Name.Tag
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'Wikipedia' Name.Tag
+' ' Name.Tag
+'how' Name.Tag
+' ' Name.Tag
+'to' Name.Tag
+'|' Punctuation
+'H' Text
+':' Text
+'WT' Text
+'|' Punctuation
+'H' Text
+':' Text
+'MARKUP' Text
+'|' Punctuation
+'H' Text
+':' Text
+'WIKICODE' Text
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'Wikitext' Name.Tag
+' ' Name.Tag
+'navbox' Name.Tag
+'}}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'{{' Punctuation
+'Template' Name.Tag
+'|' Punctuation
+'1' Name.Label
+'=' Operator
+'{{{' Punctuation
+'1' Name.Variable
+'}}}' Punctuation
+'}}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'{{' Punctuation
+'vo' Name.Tag
+'{{' Punctuation
+'void' Name.Tag
+'|' Punctuation
+'void' Text
+'}}' Punctuation
+'id' Name.Tag
+'|' Punctuation
+'param1' Name.Label
+'=' Operator
+'1' Text
+'|' Punctuation
+'par' Text
+'{{' Punctuation
+'void' Name.Tag
+'}}' Punctuation
+'am2' Text
+'=' Text
+'2' Text
+'}}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'{{' Punctuation
+'math' Name.Tag
+'|' Punctuation
+'2' Text
+"''" Generic.Emph
+'x' Generic.Emph
+"''" Generic.Emph
+' ' Text
+'&times;' Name.Entity
+' ' Text
+'4' Text
+"''" Generic.Emph
+'y' Generic.Emph
+"''" Generic.Emph
+' ' Text
+'&divide;' Name.Entity
+' ' Text
+'6' Text
+"''" Generic.Emph
+'z' Generic.Emph
+"''" Generic.Emph
+' ' Text
+'+' Text
+' ' Text
+'8' Text
+' ' Text
+'&minus;' Name.Entity
+' ' Text
+'{{' Punctuation
+'sfrac' Name.Tag
+'|' Punctuation
+"''" Generic.Emph
+'y' Generic.Emph
+"''" Generic.Emph
+'|' Punctuation
+"''" Generic.Emph
+'z' Generic.Emph
+"''" Generic.Emph
+'<' Punctuation
+'sup' Name.Tag
+'>' Punctuation
+'2' Text
+'</' Punctuation
+'sup' Name.Tag
+'>' Punctuation
+'}}' Punctuation
+' ' Text
+'{{' Punctuation
+'=' Name.Function
+'}}' Punctuation
+' ' Text
+'0' Text
+'}}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'{{' Punctuation
+'math' Name.Tag
+'|' Punctuation
+'sin' Text
+' ' Text
+'2' Text
+'&pi;' Name.Entity
+"''" Generic.Emph
+'x' Generic.Emph
+"''" Generic.Emph
+' ' Text
+'+' Text
+' ' Text
+'ln' Text
+' ' Text
+"''" Generic.Emph
+'e' Generic.Emph
+"''" Generic.Emph
+'}}' Punctuation
+'\n' Text
+
+'It' Text
+' ' Text
+'follows' Text
+' ' Text
+'that' Text
+' ' Text
+'{{' Punctuation
+'math' Name.Tag
+'|' Punctuation
+"''" Generic.Emph
+'x' Generic.Emph
+"''" Generic.Emph
+'<' Punctuation
+'sup' Name.Tag
+'>' Punctuation
+'2' Text
+'</' Punctuation
+'sup' Name.Tag
+'>' Punctuation
+' ' Text
+'&ge;' Name.Entity
+' ' Text
+'0' Text
+'}}' Punctuation
+' ' Text
+'for' Text
+' ' Text
+'real' Text
+' ' Text
+'{{' Punctuation
+'mvar' Name.Tag
+'|' Punctuation
+'x' Text
+'}}' Punctuation
+'.' Text
+'\n' Text
+
+'\n' Text
+
+'{{' Punctuation
+'Help' Name.Namespace
+':' Punctuation
+'Transclusion' Name.Tag
+' ' Name.Tag
+'demo' Name.Tag
+'}}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'{{' Punctuation
+'Tooltip' Name.Tag
+'|' Punctuation
+'Hover' Text
+' ' Text
+'your' Text
+' ' Text
+'mouse' Text
+' ' Text
+'over' Text
+' ' Text
+'this' Text
+' ' Text
+'text' Text
+'\n' Text
+
+'|' Punctuation
+'This' Text
+' ' Text
+'is' Text
+' ' Text
+'the' Text
+' ' Text
+'hover' Text
+' ' Text
+'text' Text
+'}}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'Go' Text
+' ' Text
+'to' Text
+' ' Text
+'this' Text
+' ' Text
+'page' Text
+' ' Text
+'to' Text
+' ' Text
+'see' Text
+' ' Text
+'the' Text
+' ' Text
+'Tooltip' Text
+'\n' Text
+
+'template' Text
+' ' Text
+'itself' Text
+':' Text
+' ' Text
+'{{' Punctuation
+'tl' Name.Tag
+'|' Punctuation
+'Tooltip' Text
+'}}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'This' Text
+' ' Text
+'is' Text
+' ' Text
+'how' Text
+' ' Text
+'to' Text
+' ' Text
+'{{' Punctuation
+'Font' Name.Tag
+' ' Name.Tag
+'color' Name.Tag
+'|' Punctuation
+'|' Punctuation
+'yellow' Text
+'|' Punctuation
+'highlight' Text
+' ' Text
+'part' Text
+' ' Text
+'of' Text
+' ' Text
+'a' Text
+' ' Text
+'sentence' Text
+'}}' Punctuation
+'.' Text
+'\n' Text
+
+'\n' Text
+
+'{{' Punctuation
+'msg' Name.Namespace
+':' Punctuation
+'xyz' Name.Tag
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'raw' Name.Namespace
+':' Punctuation
+'xyz' Name.Tag
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'msgnw' Name.Namespace
+':' Punctuation
+'xyz' Name.Tag
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'subst' Name.Namespace
+':' Punctuation
+'xyz' Name.Tag
+'}}' Punctuation
+'\n' Text
+
+'{{' Punctuation
+'safesubst' Name.Namespace
+':' Punctuation
+'xyz' Name.Tag
+'}}' Punctuation
+'\n' Text
+
+'\n' Text
+
+'{{{' Punctuation
+'1' Name.Variable
+'}}}' Punctuation
+'\n' Text
+
+'{{{' Punctuation
+'IncludedWorkURL' Name.Variable
+'|' Punctuation
+'}}}' Punctuation
+'\n' Text
+
+'{{{' Punctuation
+'Citation class' Name.Variable
+'|' Punctuation
+'{{{' Punctuation
+'Citation type' Name.Variable
+'|' Punctuation
+'}}}' Punctuation
+'}}}' Punctuation
+'\n' Text
diff --git a/tests/snippets/wikitext/wikilink.txt b/tests/snippets/wikitext/wikilink.txt
new file mode 100644
index 00000000..c3720161
--- /dev/null
+++ b/tests/snippets/wikitext/wikilink.txt
@@ -0,0 +1,772 @@
+---input---
+[[a|
+b''b''
+]]
+
+[[维基百科:关于|关于]]
+
+[[Edge case#]]
+
+[[Edge case#|another]]
+
+[[ pagename | https://www.example.com ]]
+
+[[| this is legal! ]]
+
+[[ | this is illegal! ]]
+
+[[public transport#sth]]
+
+[[:public transport#sth]]
+
+[[:public transport]]
+
+[[a:public transport]]
+
+[[a:public transport#sth]]
+
+[[a:public transport#sth|<code>a</code> b ''c'' '''d''' ~~~~ <nowiki>[[a]]</nowiki>]]
+
+London has [[public transport]].
+
+Link to this page: "[[Help:Wikitext]]" will appear only as bold text.
+
+New York also has [[public transport|public transportation]].
+
+[[kingdom (biology)|]]
+
+[[Seattle, Washington|]]
+
+[[Wikipedia:Manual of Style#Links|]]
+
+[[:Category:Character sets|]]
+
+[[commons:category:Wikimedia]]
+
+[[Wiktionary:fr:bonjour]]
+
+[[Wiktionary:fr:bonjour|]]
+
+[[Wiktionary:fr:bonjour|bonjour]]
+
+[[ wp:pagename | page name[[ wp:pagename | page name ]] [[ wp:pagename | page name ]] [[ wp:pagename[[ wp:pagename | page name ]] | page name ]] [[ wp:pagename | page nam[[ wp:pagename | page name ]]e ]]]]
+
+[[ wp:pagename | page name ]]
+
+[<nowiki />[ wp:pagename | page name ]]
+
+[[<nowiki /> wp:pagename | page name ]]
+
+[[ wp:pagename <nowiki />| page name ]]
+
+[[ wp:pagename | page name ]<nowiki />]
+
+[[a|]]]]
+
+[[foo|[https://example.com]]]
+
+[[a|[[]]]]
+
+[[Hindenburg disaster|''Hindenburg'' disaster]]
+
+[[Special:Diff/330349143/330350877|Diff between revisions 330349143 and 330350877]]
+
+[[Special:Diff/330350877|Diff between revisions 330349143 and 330350877]]
+
+[[Special:Permalink/330350877|Revision 330350877]]
+
+[[Special:Contributions/2001:0db8:0000:0000:0000:ff00:0042:8329]]
+
+[[Special:Contributions/UserName]]
+
+[[File:wiki.png|thumb|left|alt={{User sandbox notice}}|Wikipedia ''logo'']]
+
+[[A|[//example.com a b c]]]
+
+---tokens---
+'[[' Punctuation
+'a' Name.Tag
+'|' Punctuation
+'\n' Text
+
+'b' Text
+"''" Generic.Emph
+'b' Generic.Emph
+"''" Generic.Emph
+'\n' Text
+
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'维基百科' Name.Namespace
+':' Punctuation
+'关于' Name.Tag
+'|' Punctuation
+'关于' Text
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'Edge case' Name.Tag
+'#' Punctuation
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'Edge case' Name.Tag
+'#' Punctuation
+'|' Punctuation
+'another' Text
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+' pagename ' Name.Tag
+'|' Punctuation
+' ' Text
+'https' Text
+':' Text
+'/' Text
+'/' Text
+'www' Text
+'.' Text
+'example' Text
+'.' Text
+'com' Text
+' ' Text
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'|' Punctuation
+' ' Text
+'this' Text
+' ' Text
+'is' Text
+' ' Text
+'legal' Text
+'!' Text
+' ' Text
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+' ' Name.Tag
+'|' Punctuation
+' ' Text
+'this' Text
+' ' Text
+'is' Text
+' ' Text
+'illegal' Text
+'!' Text
+' ' Text
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'public transport' Name.Tag
+'#' Punctuation
+'sth' Name.Label
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+':' Punctuation
+'public transport' Name.Tag
+'#' Punctuation
+'sth' Name.Label
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+':' Punctuation
+'public transport' Name.Tag
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'a' Name.Namespace
+':' Punctuation
+'public transport' Name.Tag
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'a' Name.Namespace
+':' Punctuation
+'public transport' Name.Tag
+'#' Punctuation
+'sth' Name.Label
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'a' Name.Namespace
+':' Punctuation
+'public transport' Name.Tag
+'#' Punctuation
+'sth' Name.Label
+'|' Punctuation
+'<' Punctuation
+'code' Name.Tag
+'>' Punctuation
+'a' Text
+'</' Punctuation
+'code' Name.Tag
+'>' Punctuation
+' ' Text
+'b' Text
+' ' Text
+"''" Generic.Emph
+'c' Generic.Emph
+"''" Generic.Emph
+' ' Text
+"'''" Generic.Strong
+'d' Generic.Strong
+"'''" Generic.Strong
+' ' Text
+'~~~~' Keyword
+' ' Text
+'<' Punctuation
+'nowiki' Name.Tag
+'>' Punctuation
+'[' Text
+'[' Text
+'a' Text
+']' Text
+']' Text
+'</' Punctuation
+'nowiki' Name.Tag
+'>' Punctuation
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'London' Text
+' ' Text
+'has' Text
+' ' Text
+'[[' Punctuation
+'public transport' Name.Tag
+']]' Punctuation
+'.' Text
+'\n' Text
+
+'\n' Text
+
+'Link' Text
+' ' Text
+'to' Text
+' ' Text
+'this' Text
+' ' Text
+'page' Text
+':' Text
+' ' Text
+'"' Text
+'[[' Punctuation
+'Help' Name.Namespace
+':' Punctuation
+'Wikitext' Name.Tag
+']]' Punctuation
+'"' Text
+' ' Text
+'will' Text
+' ' Text
+'appear' Text
+' ' Text
+'only' Text
+' ' Text
+'as' Text
+' ' Text
+'bold' Text
+' ' Text
+'text' Text
+'.' Text
+'\n' Text
+
+'\n' Text
+
+'New' Text
+' ' Text
+'York' Text
+' ' Text
+'also' Text
+' ' Text
+'has' Text
+' ' Text
+'[[' Punctuation
+'public transport' Name.Tag
+'|' Punctuation
+'public' Text
+' ' Text
+'transportation' Text
+']]' Punctuation
+'.' Text
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'kingdom (biology)' Name.Tag
+'|' Punctuation
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'Seattle, Washington' Name.Tag
+'|' Punctuation
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'Wikipedia' Name.Namespace
+':' Punctuation
+'Manual of Style' Name.Tag
+'#' Punctuation
+'Links' Name.Label
+'|' Punctuation
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+':Category' Name.Namespace
+':' Punctuation
+'Character sets' Name.Tag
+'|' Punctuation
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'commons:category' Name.Namespace
+':' Punctuation
+'Wikimedia' Name.Tag
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'Wiktionary:fr' Name.Namespace
+':' Punctuation
+'bonjour' Name.Tag
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'Wiktionary:fr' Name.Namespace
+':' Punctuation
+'bonjour' Name.Tag
+'|' Punctuation
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'Wiktionary:fr' Name.Namespace
+':' Punctuation
+'bonjour' Name.Tag
+'|' Punctuation
+'bonjour' Text
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+' wp' Name.Namespace
+':' Punctuation
+'pagename ' Name.Tag
+'|' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+'' Punctuation
+'[[' Punctuation
+' wp' Name.Namespace
+':' Punctuation
+'pagename ' Name.Tag
+'|' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+' ' Text
+']]' Punctuation
+' ' Text
+'[[' Punctuation
+' wp' Name.Namespace
+':' Punctuation
+'pagename ' Name.Tag
+'|' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+' ' Text
+']]' Punctuation
+' ' Text
+'[' Text
+'[' Text
+' ' Text
+'wp' Text
+':' Text
+'pagename' Text
+'[[' Punctuation
+' wp' Name.Namespace
+':' Punctuation
+'pagename ' Name.Tag
+'|' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+' ' Text
+']]' Punctuation
+' ' Text
+'|' Text
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+' ' Text
+']' Text
+']' Text
+' ' Text
+'[[' Punctuation
+' wp' Name.Namespace
+':' Punctuation
+'pagename ' Name.Tag
+'|' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'nam' Text
+'' Punctuation
+'[[' Punctuation
+' wp' Name.Namespace
+':' Punctuation
+'pagename ' Name.Tag
+'|' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+' ' Text
+']]' Punctuation
+'e' Text
+' ' Text
+']' Text
+']' Text
+']' Text
+']' Text
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+' wp' Name.Namespace
+':' Punctuation
+'pagename ' Name.Tag
+'|' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+' ' Text
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[' Text
+'<' Punctuation
+'nowiki' Name.Tag
+' ' Text.Whitespace
+'/>' Punctuation
+'[' Text
+' ' Text
+'wp' Text
+':' Text
+'pagename' Text
+' ' Text
+'|' Text
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+' ' Text
+']' Text
+']' Text
+'\n' Text
+
+'\n' Text
+
+'[' Text
+'[' Text
+'<' Punctuation
+'nowiki' Name.Tag
+' ' Text.Whitespace
+'/>' Punctuation
+' ' Text
+'wp' Text
+':' Text
+'pagename' Text
+' ' Text
+'|' Text
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+' ' Text
+']' Text
+']' Text
+'\n' Text
+
+'\n' Text
+
+'[' Text
+'[' Text
+' ' Text
+'wp' Text
+':' Text
+'pagename' Text
+' ' Text
+'<' Punctuation
+'nowiki' Name.Tag
+' ' Text.Whitespace
+'/>' Punctuation
+'|' Text
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+' ' Text
+']' Text
+']' Text
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+' wp' Name.Namespace
+':' Punctuation
+'pagename ' Name.Tag
+'|' Punctuation
+' ' Text
+'page' Text
+' ' Text
+'name' Text
+' ' Text
+']' Text
+'<' Punctuation
+'nowiki' Name.Tag
+' ' Text.Whitespace
+'/>' Punctuation
+']' Text
+'\n' Text
+
+'\n' Text
+
+'' Punctuation
+'[[' Punctuation
+'a' Name.Tag
+'|' Punctuation
+']]' Punctuation
+']' Text
+']' Text
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'foo' Name.Tag
+'|' Punctuation
+'[' Punctuation
+'https://example.com' Name.Label
+']' Punctuation
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'a' Name.Tag
+'|' Punctuation
+'' Punctuation
+'[[' Punctuation
+']]' Punctuation
+']' Text
+']' Text
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'Hindenburg disaster' Name.Tag
+'|' Punctuation
+"''" Generic.Emph
+'Hindenburg' Generic.Emph
+"''" Generic.Emph
+' ' Text
+'disaster' Text
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'Special' Name.Namespace
+':' Punctuation
+'Diff/330349143/330350877' Name.Tag
+'|' Punctuation
+'Diff' Text
+' ' Text
+'between' Text
+' ' Text
+'revisions' Text
+' ' Text
+'330349143' Text
+' ' Text
+'and' Text
+' ' Text
+'330350877' Text
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'Special' Name.Namespace
+':' Punctuation
+'Diff/330350877' Name.Tag
+'|' Punctuation
+'Diff' Text
+' ' Text
+'between' Text
+' ' Text
+'revisions' Text
+' ' Text
+'330349143' Text
+' ' Text
+'and' Text
+' ' Text
+'330350877' Text
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'Special' Name.Namespace
+':' Punctuation
+'Permalink/330350877' Name.Tag
+'|' Punctuation
+'Revision' Text
+' ' Text
+'330350877' Text
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'Special' Name.Namespace
+':' Punctuation
+'Contributions/2001:0db8:0000:0000:0000:ff00:0042:8329' Name.Tag
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'Special' Name.Namespace
+':' Punctuation
+'Contributions/UserName' Name.Tag
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'File' Name.Namespace
+':' Punctuation
+'wiki.png' Name.Tag
+'|' Punctuation
+'thumb' Text
+'|' Punctuation
+'left' Text
+'|' Punctuation
+'alt' Name.Attribute
+'=' Operator
+'{{' Punctuation
+'User' Name.Tag
+' ' Name.Tag
+'sandbox' Name.Tag
+' ' Name.Tag
+'notice' Name.Tag
+'}}' Punctuation
+'|' Punctuation
+'Wikipedia' Text
+' ' Text
+"''" Generic.Emph
+'logo' Generic.Emph
+"''" Generic.Emph
+']]' Punctuation
+'\n' Text
+
+'\n' Text
+
+'[[' Punctuation
+'A' Name.Tag
+'|' Punctuation
+'[' Punctuation
+'//example.com' Name.Label
+' ' Text.Whitespace
+'a' Text
+' ' Text
+'b' Text
+' ' Text
+'c' Text
+']' Punctuation
+']]' Punctuation
+'\n' Text