From 403c2679538cc724a0107551168ee826010d4ed6 Mon Sep 17 00:00:00 2001
From: echel0n
Date: Mon, 21 Jul 2014 16:01:46 -0700
Subject: [PATCH] Further improved memory handling of bs4 for torrent
providers.
---
lib/html5lib/__init__.py | 20 +-
lib/html5lib/constants.py | 4991 +-
lib/html5lib/filters/_base.py | 2 +
.../filters/alphabeticalattributes.py | 20 +
lib/html5lib/filters/formfiller.py | 127 -
lib/html5lib/filters/inject_meta_charset.py | 55 +-
lib/html5lib/filters/lint.py | 63 +-
lib/html5lib/filters/optionaltags.py | 15 +-
lib/html5lib/filters/sanitizer.py | 10 +-
lib/html5lib/filters/whitespace.py | 21 +-
lib/html5lib/html5parser.py | 956 +-
lib/html5lib/ihatexml.py | 184 +-
lib/html5lib/inputstream.py | 680 +-
lib/html5lib/sanitizer.py | 387 +-
lib/html5lib/serializer/__init__.py | 15 +-
lib/html5lib/serializer/htmlserializer.py | 160 +-
lib/html5lib/serializer/xhtmlserializer.py | 9 -
lib/html5lib/tests/__init__.py | 12 -
lib/html5lib/tests/mockParser.py | 37 -
lib/html5lib/tests/runparsertests.py | 27 -
lib/html5lib/tests/runtests.py | 20 -
lib/html5lib/tests/support.py | 127 -
lib/html5lib/tests/test_encoding.py | 54 -
lib/html5lib/tests/test_formfiller.py | 296 -
lib/html5lib/tests/test_parser.py | 140 -
lib/html5lib/tests/test_parser2.py | 39 -
lib/html5lib/tests/test_sanitizer.py | 76 -
lib/html5lib/tests/test_serializer.py | 180 -
lib/html5lib/tests/test_stream.py | 97 -
lib/html5lib/tests/test_tokenizer.py | 193 -
lib/html5lib/tests/test_treewalkers.py | 311 -
lib/html5lib/tests/test_whitespace_filter.py | 123 -
.../tests/testdata/encoding/test-yahoo-jp.dat | 10 -
.../tests/testdata/encoding/tests1.dat | 394 -
.../tests/testdata/encoding/tests2.dat | 115 -
.../tests/testdata/sanitizer/tests1.dat | 501 -
.../tests/testdata/serializer/core.test | 125 -
.../tests/testdata/serializer/injectmeta.test | 66 -
.../testdata/serializer/optionaltags.test | 965 -
.../tests/testdata/serializer/options.test | 60 -
.../tests/testdata/serializer/whitespace.test | 51 -
.../tests/testdata/sniffer/htmlOrFeed.json | 43 -
.../testdata/tokenizer/contentModelFlags.test | 75 -
.../tests/testdata/tokenizer/domjs.test | 90 -
.../tests/testdata/tokenizer/entities.test | 283 -
.../tests/testdata/tokenizer/escapeFlag.test | 33 -
.../testdata/tokenizer/namedEntities.test | 44189 ----------------
.../testdata/tokenizer/numericEntities.test | 1313 -
.../tokenizer/pendingSpecChanges.test | 7 -
.../tests/testdata/tokenizer/test1.test | 196 -
.../tests/testdata/tokenizer/test2.test | 179 -
.../tests/testdata/tokenizer/test3.test | 6047 ---
.../tests/testdata/tokenizer/test4.test | 344 -
.../testdata/tokenizer/unicodeChars.test | 1295 -
.../tokenizer/unicodeCharsProblematic.test | 27 -
.../testdata/tokenizer/xmlViolation.test | 22 -
.../testdata/tree-construction/adoption01.dat | 194 -
.../testdata/tree-construction/adoption02.dat | 31 -
.../testdata/tree-construction/comments01.dat | 135 -
.../testdata/tree-construction/doctype01.dat | 370 -
.../tree-construction/domjs-unsafe.dat | Bin 6639 -> 0 bytes
.../testdata/tree-construction/entities01.dat | 603 -
.../testdata/tree-construction/entities02.dat | 249 -
.../tree-construction/html5test-com.dat | 246 -
.../testdata/tree-construction/inbody01.dat | 43 -
.../testdata/tree-construction/isindex.dat | 40 -
...pending-spec-changes-plain-text-unsafe.dat | Bin 115 -> 0 bytes
.../pending-spec-changes.dat | 52 -
.../tree-construction/plain-text-unsafe.dat | Bin 4166 -> 0 bytes
.../tree-construction/scriptdata01.dat | 308 -
.../testdata/tree-construction/tables01.dat | 212 -
.../testdata/tree-construction/tests1.dat | 1952 -
.../testdata/tree-construction/tests10.dat | 799 -
.../testdata/tree-construction/tests11.dat | 482 -
.../testdata/tree-construction/tests12.dat | 62 -
.../testdata/tree-construction/tests14.dat | 74 -
.../testdata/tree-construction/tests15.dat | 208 -
.../testdata/tree-construction/tests16.dat | 2299 -
.../testdata/tree-construction/tests17.dat | 153 -
.../testdata/tree-construction/tests18.dat | 269 -
.../testdata/tree-construction/tests19.dat | 1237 -
.../testdata/tree-construction/tests2.dat | 763 -
.../testdata/tree-construction/tests20.dat | 455 -
.../testdata/tree-construction/tests21.dat | 221 -
.../testdata/tree-construction/tests22.dat | 157 -
.../testdata/tree-construction/tests23.dat | 155 -
.../testdata/tree-construction/tests24.dat | 79 -
.../testdata/tree-construction/tests25.dat | 219 -
.../testdata/tree-construction/tests26.dat | 313 -
.../testdata/tree-construction/tests3.dat | 305 -
.../testdata/tree-construction/tests4.dat | 59 -
.../testdata/tree-construction/tests5.dat | 191 -
.../testdata/tree-construction/tests6.dat | 663 -
.../testdata/tree-construction/tests7.dat | 390 -
.../testdata/tree-construction/tests8.dat | 148 -
.../testdata/tree-construction/tests9.dat | 457 -
.../tree-construction/tests_innerHTML_1.dat | 741 -
.../testdata/tree-construction/tricky01.dat | 261 -
.../testdata/tree-construction/webkit01.dat | 594 -
.../testdata/tree-construction/webkit02.dat | 94 -
lib/html5lib/tests/tokenizertotree.py | 64 -
lib/html5lib/tokenizer.py | 899 +-
lib/html5lib/treeadapters/__init__.py | 0
lib/html5lib/treeadapters/sax.py | 44 +
lib/html5lib/treebuilders/__init__.py | 76 +-
lib/html5lib/treebuilders/_base.py | 130 +-
lib/html5lib/treebuilders/dom.py | 194 +-
lib/html5lib/treebuilders/etree.py | 265 +-
lib/html5lib/treebuilders/etree_lxml.py | 269 +-
lib/html5lib/treebuilders/simpletree.py | 256 -
lib/html5lib/treebuilders/soup.py | 236 -
lib/html5lib/treewalkers/__init__.py | 29 +-
lib/html5lib/treewalkers/_base.py | 216 +-
lib/html5lib/treewalkers/dom.py | 15 +-
lib/html5lib/treewalkers/etree.py | 77 +-
lib/html5lib/treewalkers/genshistream.py | 59 +-
lib/html5lib/treewalkers/lxmletree.py | 86 +-
lib/html5lib/treewalkers/pulldom.py | 13 +-
lib/html5lib/treewalkers/simpletree.py | 78 -
lib/html5lib/treewalkers/soup.py | 60 -
lib/html5lib/trie/__init__.py | 12 +
lib/html5lib/trie/_base.py | 37 +
lib/html5lib/trie/datrie.py | 44 +
lib/html5lib/trie/py.py | 67 +
lib/html5lib/utils.py | 177 +-
sickbeard/providers/bitsoup.py | 7 +-
sickbeard/providers/freshontv.py | 7 +-
sickbeard/providers/hdtorrents.py | 7 +-
sickbeard/providers/iptorrents.py | 9 +-
sickbeard/providers/kat.py | 18 +-
sickbeard/providers/publichd.py | 7 +-
sickbeard/providers/scc.py | 12 +-
sickbeard/providers/torrentbytes.py | 8 +-
sickbeard/providers/torrentday.py | 8 +-
sickbeard/providers/torrentleech.py | 5 +-
tests/torrent_tests.py | 8 +-
136 files changed, 5348 insertions(+), 80311 deletions(-)
create mode 100644 lib/html5lib/filters/alphabeticalattributes.py
delete mode 100644 lib/html5lib/filters/formfiller.py
delete mode 100644 lib/html5lib/serializer/xhtmlserializer.py
delete mode 100644 lib/html5lib/tests/__init__.py
delete mode 100644 lib/html5lib/tests/mockParser.py
delete mode 100644 lib/html5lib/tests/runparsertests.py
delete mode 100644 lib/html5lib/tests/runtests.py
delete mode 100644 lib/html5lib/tests/support.py
delete mode 100644 lib/html5lib/tests/test_encoding.py
delete mode 100644 lib/html5lib/tests/test_formfiller.py
delete mode 100644 lib/html5lib/tests/test_parser.py
delete mode 100644 lib/html5lib/tests/test_parser2.py
delete mode 100644 lib/html5lib/tests/test_sanitizer.py
delete mode 100644 lib/html5lib/tests/test_serializer.py
delete mode 100644 lib/html5lib/tests/test_stream.py
delete mode 100644 lib/html5lib/tests/test_tokenizer.py
delete mode 100644 lib/html5lib/tests/test_treewalkers.py
delete mode 100644 lib/html5lib/tests/test_whitespace_filter.py
delete mode 100644 lib/html5lib/tests/testdata/encoding/test-yahoo-jp.dat
delete mode 100644 lib/html5lib/tests/testdata/encoding/tests1.dat
delete mode 100644 lib/html5lib/tests/testdata/encoding/tests2.dat
delete mode 100644 lib/html5lib/tests/testdata/sanitizer/tests1.dat
delete mode 100644 lib/html5lib/tests/testdata/serializer/core.test
delete mode 100644 lib/html5lib/tests/testdata/serializer/injectmeta.test
delete mode 100644 lib/html5lib/tests/testdata/serializer/optionaltags.test
delete mode 100644 lib/html5lib/tests/testdata/serializer/options.test
delete mode 100644 lib/html5lib/tests/testdata/serializer/whitespace.test
delete mode 100644 lib/html5lib/tests/testdata/sniffer/htmlOrFeed.json
delete mode 100644 lib/html5lib/tests/testdata/tokenizer/contentModelFlags.test
delete mode 100644 lib/html5lib/tests/testdata/tokenizer/domjs.test
delete mode 100644 lib/html5lib/tests/testdata/tokenizer/entities.test
delete mode 100644 lib/html5lib/tests/testdata/tokenizer/escapeFlag.test
delete mode 100644 lib/html5lib/tests/testdata/tokenizer/namedEntities.test
delete mode 100644 lib/html5lib/tests/testdata/tokenizer/numericEntities.test
delete mode 100644 lib/html5lib/tests/testdata/tokenizer/pendingSpecChanges.test
delete mode 100644 lib/html5lib/tests/testdata/tokenizer/test1.test
delete mode 100644 lib/html5lib/tests/testdata/tokenizer/test2.test
delete mode 100644 lib/html5lib/tests/testdata/tokenizer/test3.test
delete mode 100644 lib/html5lib/tests/testdata/tokenizer/test4.test
delete mode 100644 lib/html5lib/tests/testdata/tokenizer/unicodeChars.test
delete mode 100644 lib/html5lib/tests/testdata/tokenizer/unicodeCharsProblematic.test
delete mode 100644 lib/html5lib/tests/testdata/tokenizer/xmlViolation.test
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/adoption01.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/adoption02.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/comments01.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/doctype01.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/domjs-unsafe.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/entities01.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/entities02.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/html5test-com.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/inbody01.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/isindex.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/pending-spec-changes-plain-text-unsafe.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/pending-spec-changes.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/plain-text-unsafe.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/scriptdata01.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tables01.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests1.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests10.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests11.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests12.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests14.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests15.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests16.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests17.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests18.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests19.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests2.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests20.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests21.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests22.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests23.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests24.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests25.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests26.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests3.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests4.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests5.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests6.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests7.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests8.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests9.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tests_innerHTML_1.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/tricky01.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/webkit01.dat
delete mode 100644 lib/html5lib/tests/testdata/tree-construction/webkit02.dat
delete mode 100644 lib/html5lib/tests/tokenizertotree.py
create mode 100644 lib/html5lib/treeadapters/__init__.py
create mode 100644 lib/html5lib/treeadapters/sax.py
delete mode 100644 lib/html5lib/treebuilders/simpletree.py
delete mode 100644 lib/html5lib/treebuilders/soup.py
delete mode 100644 lib/html5lib/treewalkers/simpletree.py
delete mode 100644 lib/html5lib/treewalkers/soup.py
create mode 100644 lib/html5lib/trie/__init__.py
create mode 100644 lib/html5lib/trie/_base.py
create mode 100644 lib/html5lib/trie/datrie.py
create mode 100644 lib/html5lib/trie/py.py
diff --git a/lib/html5lib/__init__.py b/lib/html5lib/__init__.py
index 16537aad..19a4b7d6 100644
--- a/lib/html5lib/__init__.py
+++ b/lib/html5lib/__init__.py
@@ -1,4 +1,4 @@
-"""
+"""
HTML parsing library based on the WHATWG "HTML5"
specification. The parser is designed to be compatible with existing
HTML found in the wild and implements well-defined error recovery that
@@ -8,10 +8,16 @@ Example usage:
import html5lib
f = open("my_document.html")
-tree = html5lib.parse(f)
+tree = html5lib.parse(f)
"""
-__version__ = "0.95-dev"
-from html5parser import HTMLParser, parse, parseFragment
-from treebuilders import getTreeBuilder
-from treewalkers import getTreeWalker
-from serializer import serialize
+
+from __future__ import absolute_import, division, unicode_literals
+
+from .html5parser import HTMLParser, parse, parseFragment
+from .treebuilders import getTreeBuilder
+from .treewalkers import getTreeWalker
+from .serializer import serialize
+
+__all__ = ["HTMLParser", "parse", "parseFragment", "getTreeBuilder",
+ "getTreeWalker", "serialize"]
+__version__ = "0.999"
diff --git a/lib/html5lib/constants.py b/lib/html5lib/constants.py
index b533018e..e7089846 100644
--- a/lib/html5lib/constants.py
+++ b/lib/html5lib/constants.py
@@ -1,302 +1,301 @@
-import string, gettext
-_ = gettext.gettext
+from __future__ import absolute_import, division, unicode_literals
-try:
- frozenset
-except NameError:
- # Import from the sets module for python 2.3
- from sets import Set as set
- from sets import ImmutableSet as frozenset
+import string
+import gettext
+_ = gettext.gettext
EOF = None
E = {
- "null-character":
- _(u"Null character in input stream, replaced with U+FFFD."),
- "invalid-codepoint":
- _(u"Invalid codepoint in stream."),
+ "null-character":
+ _("Null character in input stream, replaced with U+FFFD."),
+ "invalid-codepoint":
+ _("Invalid codepoint in stream."),
"incorrectly-placed-solidus":
- _(u"Solidus (/) incorrectly placed in tag."),
+ _("Solidus (/) incorrectly placed in tag."),
"incorrect-cr-newline-entity":
- _(u"Incorrect CR newline entity, replaced with LF."),
+ _("Incorrect CR newline entity, replaced with LF."),
"illegal-windows-1252-entity":
- _(u"Entity used with illegal number (windows-1252 reference)."),
+ _("Entity used with illegal number (windows-1252 reference)."),
"cant-convert-numeric-entity":
- _(u"Numeric entity couldn't be converted to character "
- u"(codepoint U+%(charAsInt)08x)."),
+ _("Numeric entity couldn't be converted to character "
+ "(codepoint U+%(charAsInt)08x)."),
"illegal-codepoint-for-numeric-entity":
- _(u"Numeric entity represents an illegal codepoint: "
- u"U+%(charAsInt)08x."),
+ _("Numeric entity represents an illegal codepoint: "
+ "U+%(charAsInt)08x."),
"numeric-entity-without-semicolon":
- _(u"Numeric entity didn't end with ';'."),
+ _("Numeric entity didn't end with ';'."),
"expected-numeric-entity-but-got-eof":
- _(u"Numeric entity expected. Got end of file instead."),
+ _("Numeric entity expected. Got end of file instead."),
"expected-numeric-entity":
- _(u"Numeric entity expected but none found."),
+ _("Numeric entity expected but none found."),
"named-entity-without-semicolon":
- _(u"Named entity didn't end with ';'."),
+ _("Named entity didn't end with ';'."),
"expected-named-entity":
- _(u"Named entity expected. Got none."),
+ _("Named entity expected. Got none."),
"attributes-in-end-tag":
- _(u"End tag contains unexpected attributes."),
+ _("End tag contains unexpected attributes."),
'self-closing-flag-on-end-tag':
- _(u"End tag contains unexpected self-closing flag."),
+ _("End tag contains unexpected self-closing flag."),
"expected-tag-name-but-got-right-bracket":
- _(u"Expected tag name. Got '>' instead."),
+ _("Expected tag name. Got '>' instead."),
"expected-tag-name-but-got-question-mark":
- _(u"Expected tag name. Got '?' instead. (HTML doesn't "
- u"support processing instructions.)"),
+ _("Expected tag name. Got '?' instead. (HTML doesn't "
+ "support processing instructions.)"),
"expected-tag-name":
- _(u"Expected tag name. Got something else instead"),
+ _("Expected tag name. Got something else instead"),
"expected-closing-tag-but-got-right-bracket":
- _(u"Expected closing tag. Got '>' instead. Ignoring '>'."),
+ _("Expected closing tag. Got '>' instead. Ignoring '>'."),
"expected-closing-tag-but-got-eof":
- _(u"Expected closing tag. Unexpected end of file."),
+ _("Expected closing tag. Unexpected end of file."),
"expected-closing-tag-but-got-char":
- _(u"Expected closing tag. Unexpected character '%(data)s' found."),
+ _("Expected closing tag. Unexpected character '%(data)s' found."),
"eof-in-tag-name":
- _(u"Unexpected end of file in the tag name."),
+ _("Unexpected end of file in the tag name."),
"expected-attribute-name-but-got-eof":
- _(u"Unexpected end of file. Expected attribute name instead."),
+ _("Unexpected end of file. Expected attribute name instead."),
"eof-in-attribute-name":
- _(u"Unexpected end of file in attribute name."),
+ _("Unexpected end of file in attribute name."),
"invalid-character-in-attribute-name":
- _(u"Invalid chracter in attribute name"),
+ _("Invalid character in attribute name"),
"duplicate-attribute":
- _(u"Dropped duplicate attribute on tag."),
+ _("Dropped duplicate attribute on tag."),
"expected-end-of-tag-name-but-got-eof":
- _(u"Unexpected end of file. Expected = or end of tag."),
+ _("Unexpected end of file. Expected = or end of tag."),
"expected-attribute-value-but-got-eof":
- _(u"Unexpected end of file. Expected attribute value."),
+ _("Unexpected end of file. Expected attribute value."),
"expected-attribute-value-but-got-right-bracket":
- _(u"Expected attribute value. Got '>' instead."),
+ _("Expected attribute value. Got '>' instead."),
'equals-in-unquoted-attribute-value':
- _(u"Unexpected = in unquoted attribute"),
+ _("Unexpected = in unquoted attribute"),
'unexpected-character-in-unquoted-attribute-value':
- _(u"Unexpected character in unquoted attribute"),
+ _("Unexpected character in unquoted attribute"),
"invalid-character-after-attribute-name":
- _(u"Unexpected character after attribute name."),
+ _("Unexpected character after attribute name."),
"unexpected-character-after-attribute-value":
- _(u"Unexpected character after attribute value."),
+ _("Unexpected character after attribute value."),
"eof-in-attribute-value-double-quote":
- _(u"Unexpected end of file in attribute value (\")."),
+ _("Unexpected end of file in attribute value (\")."),
"eof-in-attribute-value-single-quote":
- _(u"Unexpected end of file in attribute value (')."),
+ _("Unexpected end of file in attribute value (')."),
"eof-in-attribute-value-no-quotes":
- _(u"Unexpected end of file in attribute value."),
+ _("Unexpected end of file in attribute value."),
"unexpected-EOF-after-solidus-in-tag":
- _(u"Unexpected end of file in tag. Expected >"),
- "unexpected-character-after-soldius-in-tag":
- _(u"Unexpected character after / in tag. Expected >"),
+ _("Unexpected end of file in tag. Expected >"),
+ "unexpected-character-after-solidus-in-tag":
+ _("Unexpected character after / in tag. Expected >"),
"expected-dashes-or-doctype":
- _(u"Expected '--' or 'DOCTYPE'. Not found."),
+ _("Expected '--' or 'DOCTYPE'. Not found."),
"unexpected-bang-after-double-dash-in-comment":
- _(u"Unexpected ! after -- in comment"),
+ _("Unexpected ! after -- in comment"),
"unexpected-space-after-double-dash-in-comment":
- _(u"Unexpected space after -- in comment"),
+ _("Unexpected space after -- in comment"),
"incorrect-comment":
- _(u"Incorrect comment."),
+ _("Incorrect comment."),
"eof-in-comment":
- _(u"Unexpected end of file in comment."),
+ _("Unexpected end of file in comment."),
"eof-in-comment-end-dash":
- _(u"Unexpected end of file in comment (-)"),
+ _("Unexpected end of file in comment (-)"),
"unexpected-dash-after-double-dash-in-comment":
- _(u"Unexpected '-' after '--' found in comment."),
+ _("Unexpected '-' after '--' found in comment."),
"eof-in-comment-double-dash":
- _(u"Unexpected end of file in comment (--)."),
+ _("Unexpected end of file in comment (--)."),
"eof-in-comment-end-space-state":
- _(u"Unexpected end of file in comment."),
+ _("Unexpected end of file in comment."),
"eof-in-comment-end-bang-state":
- _(u"Unexpected end of file in comment."),
+ _("Unexpected end of file in comment."),
"unexpected-char-in-comment":
- _(u"Unexpected character in comment found."),
+ _("Unexpected character in comment found."),
"need-space-after-doctype":
- _(u"No space after literal string 'DOCTYPE'."),
+ _("No space after literal string 'DOCTYPE'."),
"expected-doctype-name-but-got-right-bracket":
- _(u"Unexpected > character. Expected DOCTYPE name."),
+ _("Unexpected > character. Expected DOCTYPE name."),
"expected-doctype-name-but-got-eof":
- _(u"Unexpected end of file. Expected DOCTYPE name."),
+ _("Unexpected end of file. Expected DOCTYPE name."),
"eof-in-doctype-name":
- _(u"Unexpected end of file in DOCTYPE name."),
+ _("Unexpected end of file in DOCTYPE name."),
"eof-in-doctype":
- _(u"Unexpected end of file in DOCTYPE."),
+ _("Unexpected end of file in DOCTYPE."),
"expected-space-or-right-bracket-in-doctype":
- _(u"Expected space or '>'. Got '%(data)s'"),
+ _("Expected space or '>'. Got '%(data)s'"),
"unexpected-end-of-doctype":
- _(u"Unexpected end of DOCTYPE."),
+ _("Unexpected end of DOCTYPE."),
"unexpected-char-in-doctype":
- _(u"Unexpected character in DOCTYPE."),
+ _("Unexpected character in DOCTYPE."),
"eof-in-innerhtml":
- _(u"XXX innerHTML EOF"),
+ _("XXX innerHTML EOF"),
"unexpected-doctype":
- _(u"Unexpected DOCTYPE. Ignored."),
+ _("Unexpected DOCTYPE. Ignored."),
"non-html-root":
- _(u"html needs to be the first start tag."),
+ _("html needs to be the first start tag."),
"expected-doctype-but-got-eof":
- _(u"Unexpected End of file. Expected DOCTYPE."),
+ _("Unexpected End of file. Expected DOCTYPE."),
"unknown-doctype":
- _(u"Erroneous DOCTYPE."),
+ _("Erroneous DOCTYPE."),
"expected-doctype-but-got-chars":
- _(u"Unexpected non-space characters. Expected DOCTYPE."),
+ _("Unexpected non-space characters. Expected DOCTYPE."),
"expected-doctype-but-got-start-tag":
- _(u"Unexpected start tag (%(name)s). Expected DOCTYPE."),
+ _("Unexpected start tag (%(name)s). Expected DOCTYPE."),
"expected-doctype-but-got-end-tag":
- _(u"Unexpected end tag (%(name)s). Expected DOCTYPE."),
+ _("Unexpected end tag (%(name)s). Expected DOCTYPE."),
"end-tag-after-implied-root":
- _(u"Unexpected end tag (%(name)s) after the (implied) root element."),
+ _("Unexpected end tag (%(name)s) after the (implied) root element."),
"expected-named-closing-tag-but-got-eof":
- _(u"Unexpected end of file. Expected end tag (%(name)s)."),
+ _("Unexpected end of file. Expected end tag (%(name)s)."),
"two-heads-are-not-better-than-one":
- _(u"Unexpected start tag head in existing head. Ignored."),
+ _("Unexpected start tag head in existing head. Ignored."),
"unexpected-end-tag":
- _(u"Unexpected end tag (%(name)s). Ignored."),
+ _("Unexpected end tag (%(name)s). Ignored."),
"unexpected-start-tag-out-of-my-head":
- _(u"Unexpected start tag (%(name)s) that can be in head. Moved."),
+ _("Unexpected start tag (%(name)s) that can be in head. Moved."),
"unexpected-start-tag":
- _(u"Unexpected start tag (%(name)s)."),
+ _("Unexpected start tag (%(name)s)."),
"missing-end-tag":
- _(u"Missing end tag (%(name)s)."),
+ _("Missing end tag (%(name)s)."),
"missing-end-tags":
- _(u"Missing end tags (%(name)s)."),
+ _("Missing end tags (%(name)s)."),
"unexpected-start-tag-implies-end-tag":
- _(u"Unexpected start tag (%(startName)s) "
- u"implies end tag (%(endName)s)."),
+ _("Unexpected start tag (%(startName)s) "
+ "implies end tag (%(endName)s)."),
"unexpected-start-tag-treated-as":
- _(u"Unexpected start tag (%(originalName)s). Treated as %(newName)s."),
+ _("Unexpected start tag (%(originalName)s). Treated as %(newName)s."),
"deprecated-tag":
- _(u"Unexpected start tag %(name)s. Don't use it!"),
+ _("Unexpected start tag %(name)s. Don't use it!"),
"unexpected-start-tag-ignored":
- _(u"Unexpected start tag %(name)s. Ignored."),
+ _("Unexpected start tag %(name)s. Ignored."),
"expected-one-end-tag-but-got-another":
- _(u"Unexpected end tag (%(gotName)s). "
- u"Missing end tag (%(expectedName)s)."),
+ _("Unexpected end tag (%(gotName)s). "
+ "Missing end tag (%(expectedName)s)."),
"end-tag-too-early":
- _(u"End tag (%(name)s) seen too early. Expected other end tag."),
+ _("End tag (%(name)s) seen too early. Expected other end tag."),
"end-tag-too-early-named":
- _(u"Unexpected end tag (%(gotName)s). Expected end tag (%(expectedName)s)."),
+ _("Unexpected end tag (%(gotName)s). Expected end tag (%(expectedName)s)."),
"end-tag-too-early-ignored":
- _(u"End tag (%(name)s) seen too early. Ignored."),
+ _("End tag (%(name)s) seen too early. Ignored."),
"adoption-agency-1.1":
- _(u"End tag (%(name)s) violates step 1, "
- u"paragraph 1 of the adoption agency algorithm."),
+ _("End tag (%(name)s) violates step 1, "
+ "paragraph 1 of the adoption agency algorithm."),
"adoption-agency-1.2":
- _(u"End tag (%(name)s) violates step 1, "
- u"paragraph 2 of the adoption agency algorithm."),
+ _("End tag (%(name)s) violates step 1, "
+ "paragraph 2 of the adoption agency algorithm."),
"adoption-agency-1.3":
- _(u"End tag (%(name)s) violates step 1, "
- u"paragraph 3 of the adoption agency algorithm."),
+ _("End tag (%(name)s) violates step 1, "
+ "paragraph 3 of the adoption agency algorithm."),
+ "adoption-agency-4.4":
+ _("End tag (%(name)s) violates step 4, "
+ "paragraph 4 of the adoption agency algorithm."),
"unexpected-end-tag-treated-as":
- _(u"Unexpected end tag (%(originalName)s). Treated as %(newName)s."),
+ _("Unexpected end tag (%(originalName)s). Treated as %(newName)s."),
"no-end-tag":
- _(u"This element (%(name)s) has no end tag."),
+ _("This element (%(name)s) has no end tag."),
"unexpected-implied-end-tag-in-table":
- _(u"Unexpected implied end tag (%(name)s) in the table phase."),
+ _("Unexpected implied end tag (%(name)s) in the table phase."),
"unexpected-implied-end-tag-in-table-body":
- _(u"Unexpected implied end tag (%(name)s) in the table body phase."),
+ _("Unexpected implied end tag (%(name)s) in the table body phase."),
"unexpected-char-implies-table-voodoo":
- _(u"Unexpected non-space characters in "
- u"table context caused voodoo mode."),
+ _("Unexpected non-space characters in "
+ "table context caused voodoo mode."),
"unexpected-hidden-input-in-table":
- _(u"Unexpected input with type hidden in table context."),
+ _("Unexpected input with type hidden in table context."),
"unexpected-form-in-table":
- _(u"Unexpected form in table context."),
+ _("Unexpected form in table context."),
"unexpected-start-tag-implies-table-voodoo":
- _(u"Unexpected start tag (%(name)s) in "
- u"table context caused voodoo mode."),
+ _("Unexpected start tag (%(name)s) in "
+ "table context caused voodoo mode."),
"unexpected-end-tag-implies-table-voodoo":
- _(u"Unexpected end tag (%(name)s) in "
- u"table context caused voodoo mode."),
+ _("Unexpected end tag (%(name)s) in "
+ "table context caused voodoo mode."),
"unexpected-cell-in-table-body":
- _(u"Unexpected table cell start tag (%(name)s) "
- u"in the table body phase."),
+ _("Unexpected table cell start tag (%(name)s) "
+ "in the table body phase."),
"unexpected-cell-end-tag":
- _(u"Got table cell end tag (%(name)s) "
- u"while required end tags are missing."),
+ _("Got table cell end tag (%(name)s) "
+ "while required end tags are missing."),
"unexpected-end-tag-in-table-body":
- _(u"Unexpected end tag (%(name)s) in the table body phase. Ignored."),
+ _("Unexpected end tag (%(name)s) in the table body phase. Ignored."),
"unexpected-implied-end-tag-in-table-row":
- _(u"Unexpected implied end tag (%(name)s) in the table row phase."),
+ _("Unexpected implied end tag (%(name)s) in the table row phase."),
"unexpected-end-tag-in-table-row":
- _(u"Unexpected end tag (%(name)s) in the table row phase. Ignored."),
+ _("Unexpected end tag (%(name)s) in the table row phase. Ignored."),
"unexpected-select-in-select":
- _(u"Unexpected select start tag in the select phase "
- u"treated as select end tag."),
+ _("Unexpected select start tag in the select phase "
+ "treated as select end tag."),
"unexpected-input-in-select":
- _(u"Unexpected input start tag in the select phase."),
+ _("Unexpected input start tag in the select phase."),
"unexpected-start-tag-in-select":
- _(u"Unexpected start tag token (%(name)s in the select phase. "
- u"Ignored."),
+ _("Unexpected start tag token (%(name)s in the select phase. "
+ "Ignored."),
"unexpected-end-tag-in-select":
- _(u"Unexpected end tag (%(name)s) in the select phase. Ignored."),
+ _("Unexpected end tag (%(name)s) in the select phase. Ignored."),
"unexpected-table-element-start-tag-in-select-in-table":
- _(u"Unexpected table element start tag (%(name)s) in the select in table phase."),
+ _("Unexpected table element start tag (%(name)s) in the select in table phase."),
"unexpected-table-element-end-tag-in-select-in-table":
- _(u"Unexpected table element end tag (%(name)s) in the select in table phase."),
+ _("Unexpected table element end tag (%(name)s) in the select in table phase."),
"unexpected-char-after-body":
- _(u"Unexpected non-space characters in the after body phase."),
+ _("Unexpected non-space characters in the after body phase."),
"unexpected-start-tag-after-body":
- _(u"Unexpected start tag token (%(name)s)"
- u" in the after body phase."),
+ _("Unexpected start tag token (%(name)s)"
+ " in the after body phase."),
"unexpected-end-tag-after-body":
- _(u"Unexpected end tag token (%(name)s)"
- u" in the after body phase."),
+ _("Unexpected end tag token (%(name)s)"
+ " in the after body phase."),
"unexpected-char-in-frameset":
- _(u"Unepxected characters in the frameset phase. Characters ignored."),
+ _("Unexpected characters in the frameset phase. Characters ignored."),
"unexpected-start-tag-in-frameset":
- _(u"Unexpected start tag token (%(name)s)"
- u" in the frameset phase. Ignored."),
+ _("Unexpected start tag token (%(name)s)"
+ " in the frameset phase. Ignored."),
"unexpected-frameset-in-frameset-innerhtml":
- _(u"Unexpected end tag token (frameset) "
- u"in the frameset phase (innerHTML)."),
+ _("Unexpected end tag token (frameset) "
+ "in the frameset phase (innerHTML)."),
"unexpected-end-tag-in-frameset":
- _(u"Unexpected end tag token (%(name)s)"
- u" in the frameset phase. Ignored."),
+ _("Unexpected end tag token (%(name)s)"
+ " in the frameset phase. Ignored."),
"unexpected-char-after-frameset":
- _(u"Unexpected non-space characters in the "
- u"after frameset phase. Ignored."),
+ _("Unexpected non-space characters in the "
+ "after frameset phase. Ignored."),
"unexpected-start-tag-after-frameset":
- _(u"Unexpected start tag (%(name)s)"
- u" in the after frameset phase. Ignored."),
+ _("Unexpected start tag (%(name)s)"
+ " in the after frameset phase. Ignored."),
"unexpected-end-tag-after-frameset":
- _(u"Unexpected end tag (%(name)s)"
- u" in the after frameset phase. Ignored."),
+ _("Unexpected end tag (%(name)s)"
+ " in the after frameset phase. Ignored."),
"unexpected-end-tag-after-body-innerhtml":
- _(u"Unexpected end tag after body(innerHtml)"),
+ _("Unexpected end tag after body(innerHtml)"),
"expected-eof-but-got-char":
- _(u"Unexpected non-space characters. Expected end of file."),
+ _("Unexpected non-space characters. Expected end of file."),
"expected-eof-but-got-start-tag":
- _(u"Unexpected start tag (%(name)s)"
- u". Expected end of file."),
+ _("Unexpected start tag (%(name)s)"
+ ". Expected end of file."),
"expected-eof-but-got-end-tag":
- _(u"Unexpected end tag (%(name)s)"
- u". Expected end of file."),
+ _("Unexpected end tag (%(name)s)"
+ ". Expected end of file."),
"eof-in-table":
- _(u"Unexpected end of file. Expected table content."),
+ _("Unexpected end of file. Expected table content."),
"eof-in-select":
- _(u"Unexpected end of file. Expected select content."),
+ _("Unexpected end of file. Expected select content."),
"eof-in-frameset":
- _(u"Unexpected end of file. Expected frameset content."),
+ _("Unexpected end of file. Expected frameset content."),
"eof-in-script-in-script":
- _(u"Unexpected end of file. Expected script content."),
+ _("Unexpected end of file. Expected script content."),
"eof-in-foreign-lands":
- _(u"Unexpected end of file. Expected foreign content"),
+ _("Unexpected end of file. Expected foreign content"),
"non-void-element-with-trailing-solidus":
- _(u"Trailing solidus not allowed on element %(name)s"),
+ _("Trailing solidus not allowed on element %(name)s"),
"unexpected-html-element-in-foreign-content":
- _(u"Element %(name)s not allowed in a non-html context"),
+ _("Element %(name)s not allowed in a non-html context"),
"unexpected-end-tag-before-html":
- _(u"Unexpected end tag (%(name)s) before html."),
+ _("Unexpected end tag (%(name)s) before html."),
"XXX-undefined-error":
- (u"Undefined error (this sucks and should be fixed)"),
+ _("Undefined error (this sucks and should be fixed)"),
}
namespaces = {
- "html":"http://www.w3.org/1999/xhtml",
- "mathml":"http://www.w3.org/1998/Math/MathML",
- "svg":"http://www.w3.org/2000/svg",
- "xlink":"http://www.w3.org/1999/xlink",
- "xml":"http://www.w3.org/XML/1998/namespace",
- "xmlns":"http://www.w3.org/2000/xmlns/"
+ "html": "http://www.w3.org/1999/xhtml",
+ "mathml": "http://www.w3.org/1998/Math/MathML",
+ "svg": "http://www.w3.org/2000/svg",
+ "xlink": "http://www.w3.org/1999/xlink",
+ "xml": "http://www.w3.org/XML/1998/namespace",
+ "xmlns": "http://www.w3.org/2000/xmlns/"
}
scopingElements = frozenset((
@@ -380,7 +379,7 @@ specialElements = frozenset((
(namespaces["html"], "iframe"),
# Note that image is commented out in the spec as "this isn't an
# element that can end up on the stack, so it doesn't matter,"
- (namespaces["html"], "image"),
+ (namespaces["html"], "image"),
(namespaces["html"], "img"),
(namespaces["html"], "input"),
(namespaces["html"], "isindex"),
@@ -434,12 +433,30 @@ mathmlTextIntegrationPointElements = frozenset((
(namespaces["mathml"], "mtext")
))
+adjustForeignAttributes = {
+ "xlink:actuate": ("xlink", "actuate", namespaces["xlink"]),
+ "xlink:arcrole": ("xlink", "arcrole", namespaces["xlink"]),
+ "xlink:href": ("xlink", "href", namespaces["xlink"]),
+ "xlink:role": ("xlink", "role", namespaces["xlink"]),
+ "xlink:show": ("xlink", "show", namespaces["xlink"]),
+ "xlink:title": ("xlink", "title", namespaces["xlink"]),
+ "xlink:type": ("xlink", "type", namespaces["xlink"]),
+ "xml:base": ("xml", "base", namespaces["xml"]),
+ "xml:lang": ("xml", "lang", namespaces["xml"]),
+ "xml:space": ("xml", "space", namespaces["xml"]),
+ "xmlns": (None, "xmlns", namespaces["xmlns"]),
+ "xmlns:xlink": ("xmlns", "xlink", namespaces["xmlns"])
+}
+
+unadjustForeignAttributes = dict([((ns, local), qname) for qname, (prefix, local, ns) in
+ adjustForeignAttributes.items()])
+
spaceCharacters = frozenset((
- u"\t",
- u"\n",
- u"\u000C",
- u" ",
- u"\r"
+ "\t",
+ "\n",
+ "\u000C",
+ " ",
+ "\r"
))
tableInsertModeElements = frozenset((
@@ -456,8 +473,8 @@ asciiLetters = frozenset(string.ascii_letters)
digits = frozenset(string.digits)
hexDigits = frozenset(string.hexdigits)
-asciiUpper2Lower = dict([(ord(c),ord(c.lower()))
- for c in string.ascii_uppercase])
+asciiUpper2Lower = dict([(ord(c), ord(c.lower()))
+ for c in string.ascii_uppercase])
# Heading elements need to be ordered
headingElements = (
@@ -503,8 +520,8 @@ booleanAttributes = {
"": frozenset(("irrelevant",)),
"style": frozenset(("scoped",)),
"img": frozenset(("ismap",)),
- "audio": frozenset(("autoplay","controls")),
- "video": frozenset(("autoplay","controls")),
+ "audio": frozenset(("autoplay", "controls")),
+ "video": frozenset(("autoplay", "controls")),
"script": frozenset(("defer", "async")),
"details": frozenset(("open",)),
"datagrid": frozenset(("multiple", "disabled")),
@@ -523,2312 +540,2312 @@ booleanAttributes = {
# entitiesWindows1252 has to be _ordered_ and needs to have an index. It
# therefore can't be a frozenset.
entitiesWindows1252 = (
- 8364, # 0x80 0x20AC EURO SIGN
- 65533, # 0x81 UNDEFINED
- 8218, # 0x82 0x201A SINGLE LOW-9 QUOTATION MARK
- 402, # 0x83 0x0192 LATIN SMALL LETTER F WITH HOOK
- 8222, # 0x84 0x201E DOUBLE LOW-9 QUOTATION MARK
- 8230, # 0x85 0x2026 HORIZONTAL ELLIPSIS
- 8224, # 0x86 0x2020 DAGGER
- 8225, # 0x87 0x2021 DOUBLE DAGGER
- 710, # 0x88 0x02C6 MODIFIER LETTER CIRCUMFLEX ACCENT
- 8240, # 0x89 0x2030 PER MILLE SIGN
- 352, # 0x8A 0x0160 LATIN CAPITAL LETTER S WITH CARON
- 8249, # 0x8B 0x2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK
- 338, # 0x8C 0x0152 LATIN CAPITAL LIGATURE OE
- 65533, # 0x8D UNDEFINED
- 381, # 0x8E 0x017D LATIN CAPITAL LETTER Z WITH CARON
- 65533, # 0x8F UNDEFINED
- 65533, # 0x90 UNDEFINED
- 8216, # 0x91 0x2018 LEFT SINGLE QUOTATION MARK
- 8217, # 0x92 0x2019 RIGHT SINGLE QUOTATION MARK
- 8220, # 0x93 0x201C LEFT DOUBLE QUOTATION MARK
- 8221, # 0x94 0x201D RIGHT DOUBLE QUOTATION MARK
- 8226, # 0x95 0x2022 BULLET
- 8211, # 0x96 0x2013 EN DASH
- 8212, # 0x97 0x2014 EM DASH
- 732, # 0x98 0x02DC SMALL TILDE
- 8482, # 0x99 0x2122 TRADE MARK SIGN
- 353, # 0x9A 0x0161 LATIN SMALL LETTER S WITH CARON
- 8250, # 0x9B 0x203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
- 339, # 0x9C 0x0153 LATIN SMALL LIGATURE OE
- 65533, # 0x9D UNDEFINED
- 382, # 0x9E 0x017E LATIN SMALL LETTER Z WITH CARON
- 376 # 0x9F 0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS
+ 8364, # 0x80 0x20AC EURO SIGN
+ 65533, # 0x81 UNDEFINED
+ 8218, # 0x82 0x201A SINGLE LOW-9 QUOTATION MARK
+ 402, # 0x83 0x0192 LATIN SMALL LETTER F WITH HOOK
+ 8222, # 0x84 0x201E DOUBLE LOW-9 QUOTATION MARK
+ 8230, # 0x85 0x2026 HORIZONTAL ELLIPSIS
+ 8224, # 0x86 0x2020 DAGGER
+ 8225, # 0x87 0x2021 DOUBLE DAGGER
+ 710, # 0x88 0x02C6 MODIFIER LETTER CIRCUMFLEX ACCENT
+ 8240, # 0x89 0x2030 PER MILLE SIGN
+ 352, # 0x8A 0x0160 LATIN CAPITAL LETTER S WITH CARON
+ 8249, # 0x8B 0x2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ 338, # 0x8C 0x0152 LATIN CAPITAL LIGATURE OE
+ 65533, # 0x8D UNDEFINED
+ 381, # 0x8E 0x017D LATIN CAPITAL LETTER Z WITH CARON
+ 65533, # 0x8F UNDEFINED
+ 65533, # 0x90 UNDEFINED
+ 8216, # 0x91 0x2018 LEFT SINGLE QUOTATION MARK
+ 8217, # 0x92 0x2019 RIGHT SINGLE QUOTATION MARK
+ 8220, # 0x93 0x201C LEFT DOUBLE QUOTATION MARK
+ 8221, # 0x94 0x201D RIGHT DOUBLE QUOTATION MARK
+ 8226, # 0x95 0x2022 BULLET
+ 8211, # 0x96 0x2013 EN DASH
+ 8212, # 0x97 0x2014 EM DASH
+ 732, # 0x98 0x02DC SMALL TILDE
+ 8482, # 0x99 0x2122 TRADE MARK SIGN
+ 353, # 0x9A 0x0161 LATIN SMALL LETTER S WITH CARON
+ 8250, # 0x9B 0x203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ 339, # 0x9C 0x0153 LATIN SMALL LIGATURE OE
+ 65533, # 0x9D UNDEFINED
+ 382, # 0x9E 0x017E LATIN SMALL LETTER Z WITH CARON
+ 376 # 0x9F 0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS
)
xmlEntities = frozenset(('lt;', 'gt;', 'amp;', 'apos;', 'quot;'))
entities = {
- "AElig": u"\xc6",
- "AElig;": u"\xc6",
- "AMP": u"&",
- "AMP;": u"&",
- "Aacute": u"\xc1",
- "Aacute;": u"\xc1",
- "Abreve;": u"\u0102",
- "Acirc": u"\xc2",
- "Acirc;": u"\xc2",
- "Acy;": u"\u0410",
- "Afr;": u"\U0001d504",
- "Agrave": u"\xc0",
- "Agrave;": u"\xc0",
- "Alpha;": u"\u0391",
- "Amacr;": u"\u0100",
- "And;": u"\u2a53",
- "Aogon;": u"\u0104",
- "Aopf;": u"\U0001d538",
- "ApplyFunction;": u"\u2061",
- "Aring": u"\xc5",
- "Aring;": u"\xc5",
- "Ascr;": u"\U0001d49c",
- "Assign;": u"\u2254",
- "Atilde": u"\xc3",
- "Atilde;": u"\xc3",
- "Auml": u"\xc4",
- "Auml;": u"\xc4",
- "Backslash;": u"\u2216",
- "Barv;": u"\u2ae7",
- "Barwed;": u"\u2306",
- "Bcy;": u"\u0411",
- "Because;": u"\u2235",
- "Bernoullis;": u"\u212c",
- "Beta;": u"\u0392",
- "Bfr;": u"\U0001d505",
- "Bopf;": u"\U0001d539",
- "Breve;": u"\u02d8",
- "Bscr;": u"\u212c",
- "Bumpeq;": u"\u224e",
- "CHcy;": u"\u0427",
- "COPY": u"\xa9",
- "COPY;": u"\xa9",
- "Cacute;": u"\u0106",
- "Cap;": u"\u22d2",
- "CapitalDifferentialD;": u"\u2145",
- "Cayleys;": u"\u212d",
- "Ccaron;": u"\u010c",
- "Ccedil": u"\xc7",
- "Ccedil;": u"\xc7",
- "Ccirc;": u"\u0108",
- "Cconint;": u"\u2230",
- "Cdot;": u"\u010a",
- "Cedilla;": u"\xb8",
- "CenterDot;": u"\xb7",
- "Cfr;": u"\u212d",
- "Chi;": u"\u03a7",
- "CircleDot;": u"\u2299",
- "CircleMinus;": u"\u2296",
- "CirclePlus;": u"\u2295",
- "CircleTimes;": u"\u2297",
- "ClockwiseContourIntegral;": u"\u2232",
- "CloseCurlyDoubleQuote;": u"\u201d",
- "CloseCurlyQuote;": u"\u2019",
- "Colon;": u"\u2237",
- "Colone;": u"\u2a74",
- "Congruent;": u"\u2261",
- "Conint;": u"\u222f",
- "ContourIntegral;": u"\u222e",
- "Copf;": u"\u2102",
- "Coproduct;": u"\u2210",
- "CounterClockwiseContourIntegral;": u"\u2233",
- "Cross;": u"\u2a2f",
- "Cscr;": u"\U0001d49e",
- "Cup;": u"\u22d3",
- "CupCap;": u"\u224d",
- "DD;": u"\u2145",
- "DDotrahd;": u"\u2911",
- "DJcy;": u"\u0402",
- "DScy;": u"\u0405",
- "DZcy;": u"\u040f",
- "Dagger;": u"\u2021",
- "Darr;": u"\u21a1",
- "Dashv;": u"\u2ae4",
- "Dcaron;": u"\u010e",
- "Dcy;": u"\u0414",
- "Del;": u"\u2207",
- "Delta;": u"\u0394",
- "Dfr;": u"\U0001d507",
- "DiacriticalAcute;": u"\xb4",
- "DiacriticalDot;": u"\u02d9",
- "DiacriticalDoubleAcute;": u"\u02dd",
- "DiacriticalGrave;": u"`",
- "DiacriticalTilde;": u"\u02dc",
- "Diamond;": u"\u22c4",
- "DifferentialD;": u"\u2146",
- "Dopf;": u"\U0001d53b",
- "Dot;": u"\xa8",
- "DotDot;": u"\u20dc",
- "DotEqual;": u"\u2250",
- "DoubleContourIntegral;": u"\u222f",
- "DoubleDot;": u"\xa8",
- "DoubleDownArrow;": u"\u21d3",
- "DoubleLeftArrow;": u"\u21d0",
- "DoubleLeftRightArrow;": u"\u21d4",
- "DoubleLeftTee;": u"\u2ae4",
- "DoubleLongLeftArrow;": u"\u27f8",
- "DoubleLongLeftRightArrow;": u"\u27fa",
- "DoubleLongRightArrow;": u"\u27f9",
- "DoubleRightArrow;": u"\u21d2",
- "DoubleRightTee;": u"\u22a8",
- "DoubleUpArrow;": u"\u21d1",
- "DoubleUpDownArrow;": u"\u21d5",
- "DoubleVerticalBar;": u"\u2225",
- "DownArrow;": u"\u2193",
- "DownArrowBar;": u"\u2913",
- "DownArrowUpArrow;": u"\u21f5",
- "DownBreve;": u"\u0311",
- "DownLeftRightVector;": u"\u2950",
- "DownLeftTeeVector;": u"\u295e",
- "DownLeftVector;": u"\u21bd",
- "DownLeftVectorBar;": u"\u2956",
- "DownRightTeeVector;": u"\u295f",
- "DownRightVector;": u"\u21c1",
- "DownRightVectorBar;": u"\u2957",
- "DownTee;": u"\u22a4",
- "DownTeeArrow;": u"\u21a7",
- "Downarrow;": u"\u21d3",
- "Dscr;": u"\U0001d49f",
- "Dstrok;": u"\u0110",
- "ENG;": u"\u014a",
- "ETH": u"\xd0",
- "ETH;": u"\xd0",
- "Eacute": u"\xc9",
- "Eacute;": u"\xc9",
- "Ecaron;": u"\u011a",
- "Ecirc": u"\xca",
- "Ecirc;": u"\xca",
- "Ecy;": u"\u042d",
- "Edot;": u"\u0116",
- "Efr;": u"\U0001d508",
- "Egrave": u"\xc8",
- "Egrave;": u"\xc8",
- "Element;": u"\u2208",
- "Emacr;": u"\u0112",
- "EmptySmallSquare;": u"\u25fb",
- "EmptyVerySmallSquare;": u"\u25ab",
- "Eogon;": u"\u0118",
- "Eopf;": u"\U0001d53c",
- "Epsilon;": u"\u0395",
- "Equal;": u"\u2a75",
- "EqualTilde;": u"\u2242",
- "Equilibrium;": u"\u21cc",
- "Escr;": u"\u2130",
- "Esim;": u"\u2a73",
- "Eta;": u"\u0397",
- "Euml": u"\xcb",
- "Euml;": u"\xcb",
- "Exists;": u"\u2203",
- "ExponentialE;": u"\u2147",
- "Fcy;": u"\u0424",
- "Ffr;": u"\U0001d509",
- "FilledSmallSquare;": u"\u25fc",
- "FilledVerySmallSquare;": u"\u25aa",
- "Fopf;": u"\U0001d53d",
- "ForAll;": u"\u2200",
- "Fouriertrf;": u"\u2131",
- "Fscr;": u"\u2131",
- "GJcy;": u"\u0403",
- "GT": u">",
- "GT;": u">",
- "Gamma;": u"\u0393",
- "Gammad;": u"\u03dc",
- "Gbreve;": u"\u011e",
- "Gcedil;": u"\u0122",
- "Gcirc;": u"\u011c",
- "Gcy;": u"\u0413",
- "Gdot;": u"\u0120",
- "Gfr;": u"\U0001d50a",
- "Gg;": u"\u22d9",
- "Gopf;": u"\U0001d53e",
- "GreaterEqual;": u"\u2265",
- "GreaterEqualLess;": u"\u22db",
- "GreaterFullEqual;": u"\u2267",
- "GreaterGreater;": u"\u2aa2",
- "GreaterLess;": u"\u2277",
- "GreaterSlantEqual;": u"\u2a7e",
- "GreaterTilde;": u"\u2273",
- "Gscr;": u"\U0001d4a2",
- "Gt;": u"\u226b",
- "HARDcy;": u"\u042a",
- "Hacek;": u"\u02c7",
- "Hat;": u"^",
- "Hcirc;": u"\u0124",
- "Hfr;": u"\u210c",
- "HilbertSpace;": u"\u210b",
- "Hopf;": u"\u210d",
- "HorizontalLine;": u"\u2500",
- "Hscr;": u"\u210b",
- "Hstrok;": u"\u0126",
- "HumpDownHump;": u"\u224e",
- "HumpEqual;": u"\u224f",
- "IEcy;": u"\u0415",
- "IJlig;": u"\u0132",
- "IOcy;": u"\u0401",
- "Iacute": u"\xcd",
- "Iacute;": u"\xcd",
- "Icirc": u"\xce",
- "Icirc;": u"\xce",
- "Icy;": u"\u0418",
- "Idot;": u"\u0130",
- "Ifr;": u"\u2111",
- "Igrave": u"\xcc",
- "Igrave;": u"\xcc",
- "Im;": u"\u2111",
- "Imacr;": u"\u012a",
- "ImaginaryI;": u"\u2148",
- "Implies;": u"\u21d2",
- "Int;": u"\u222c",
- "Integral;": u"\u222b",
- "Intersection;": u"\u22c2",
- "InvisibleComma;": u"\u2063",
- "InvisibleTimes;": u"\u2062",
- "Iogon;": u"\u012e",
- "Iopf;": u"\U0001d540",
- "Iota;": u"\u0399",
- "Iscr;": u"\u2110",
- "Itilde;": u"\u0128",
- "Iukcy;": u"\u0406",
- "Iuml": u"\xcf",
- "Iuml;": u"\xcf",
- "Jcirc;": u"\u0134",
- "Jcy;": u"\u0419",
- "Jfr;": u"\U0001d50d",
- "Jopf;": u"\U0001d541",
- "Jscr;": u"\U0001d4a5",
- "Jsercy;": u"\u0408",
- "Jukcy;": u"\u0404",
- "KHcy;": u"\u0425",
- "KJcy;": u"\u040c",
- "Kappa;": u"\u039a",
- "Kcedil;": u"\u0136",
- "Kcy;": u"\u041a",
- "Kfr;": u"\U0001d50e",
- "Kopf;": u"\U0001d542",
- "Kscr;": u"\U0001d4a6",
- "LJcy;": u"\u0409",
- "LT": u"<",
- "LT;": u"<",
- "Lacute;": u"\u0139",
- "Lambda;": u"\u039b",
- "Lang;": u"\u27ea",
- "Laplacetrf;": u"\u2112",
- "Larr;": u"\u219e",
- "Lcaron;": u"\u013d",
- "Lcedil;": u"\u013b",
- "Lcy;": u"\u041b",
- "LeftAngleBracket;": u"\u27e8",
- "LeftArrow;": u"\u2190",
- "LeftArrowBar;": u"\u21e4",
- "LeftArrowRightArrow;": u"\u21c6",
- "LeftCeiling;": u"\u2308",
- "LeftDoubleBracket;": u"\u27e6",
- "LeftDownTeeVector;": u"\u2961",
- "LeftDownVector;": u"\u21c3",
- "LeftDownVectorBar;": u"\u2959",
- "LeftFloor;": u"\u230a",
- "LeftRightArrow;": u"\u2194",
- "LeftRightVector;": u"\u294e",
- "LeftTee;": u"\u22a3",
- "LeftTeeArrow;": u"\u21a4",
- "LeftTeeVector;": u"\u295a",
- "LeftTriangle;": u"\u22b2",
- "LeftTriangleBar;": u"\u29cf",
- "LeftTriangleEqual;": u"\u22b4",
- "LeftUpDownVector;": u"\u2951",
- "LeftUpTeeVector;": u"\u2960",
- "LeftUpVector;": u"\u21bf",
- "LeftUpVectorBar;": u"\u2958",
- "LeftVector;": u"\u21bc",
- "LeftVectorBar;": u"\u2952",
- "Leftarrow;": u"\u21d0",
- "Leftrightarrow;": u"\u21d4",
- "LessEqualGreater;": u"\u22da",
- "LessFullEqual;": u"\u2266",
- "LessGreater;": u"\u2276",
- "LessLess;": u"\u2aa1",
- "LessSlantEqual;": u"\u2a7d",
- "LessTilde;": u"\u2272",
- "Lfr;": u"\U0001d50f",
- "Ll;": u"\u22d8",
- "Lleftarrow;": u"\u21da",
- "Lmidot;": u"\u013f",
- "LongLeftArrow;": u"\u27f5",
- "LongLeftRightArrow;": u"\u27f7",
- "LongRightArrow;": u"\u27f6",
- "Longleftarrow;": u"\u27f8",
- "Longleftrightarrow;": u"\u27fa",
- "Longrightarrow;": u"\u27f9",
- "Lopf;": u"\U0001d543",
- "LowerLeftArrow;": u"\u2199",
- "LowerRightArrow;": u"\u2198",
- "Lscr;": u"\u2112",
- "Lsh;": u"\u21b0",
- "Lstrok;": u"\u0141",
- "Lt;": u"\u226a",
- "Map;": u"\u2905",
- "Mcy;": u"\u041c",
- "MediumSpace;": u"\u205f",
- "Mellintrf;": u"\u2133",
- "Mfr;": u"\U0001d510",
- "MinusPlus;": u"\u2213",
- "Mopf;": u"\U0001d544",
- "Mscr;": u"\u2133",
- "Mu;": u"\u039c",
- "NJcy;": u"\u040a",
- "Nacute;": u"\u0143",
- "Ncaron;": u"\u0147",
- "Ncedil;": u"\u0145",
- "Ncy;": u"\u041d",
- "NegativeMediumSpace;": u"\u200b",
- "NegativeThickSpace;": u"\u200b",
- "NegativeThinSpace;": u"\u200b",
- "NegativeVeryThinSpace;": u"\u200b",
- "NestedGreaterGreater;": u"\u226b",
- "NestedLessLess;": u"\u226a",
- "NewLine;": u"\n",
- "Nfr;": u"\U0001d511",
- "NoBreak;": u"\u2060",
- "NonBreakingSpace;": u"\xa0",
- "Nopf;": u"\u2115",
- "Not;": u"\u2aec",
- "NotCongruent;": u"\u2262",
- "NotCupCap;": u"\u226d",
- "NotDoubleVerticalBar;": u"\u2226",
- "NotElement;": u"\u2209",
- "NotEqual;": u"\u2260",
- "NotEqualTilde;": u"\u2242\u0338",
- "NotExists;": u"\u2204",
- "NotGreater;": u"\u226f",
- "NotGreaterEqual;": u"\u2271",
- "NotGreaterFullEqual;": u"\u2267\u0338",
- "NotGreaterGreater;": u"\u226b\u0338",
- "NotGreaterLess;": u"\u2279",
- "NotGreaterSlantEqual;": u"\u2a7e\u0338",
- "NotGreaterTilde;": u"\u2275",
- "NotHumpDownHump;": u"\u224e\u0338",
- "NotHumpEqual;": u"\u224f\u0338",
- "NotLeftTriangle;": u"\u22ea",
- "NotLeftTriangleBar;": u"\u29cf\u0338",
- "NotLeftTriangleEqual;": u"\u22ec",
- "NotLess;": u"\u226e",
- "NotLessEqual;": u"\u2270",
- "NotLessGreater;": u"\u2278",
- "NotLessLess;": u"\u226a\u0338",
- "NotLessSlantEqual;": u"\u2a7d\u0338",
- "NotLessTilde;": u"\u2274",
- "NotNestedGreaterGreater;": u"\u2aa2\u0338",
- "NotNestedLessLess;": u"\u2aa1\u0338",
- "NotPrecedes;": u"\u2280",
- "NotPrecedesEqual;": u"\u2aaf\u0338",
- "NotPrecedesSlantEqual;": u"\u22e0",
- "NotReverseElement;": u"\u220c",
- "NotRightTriangle;": u"\u22eb",
- "NotRightTriangleBar;": u"\u29d0\u0338",
- "NotRightTriangleEqual;": u"\u22ed",
- "NotSquareSubset;": u"\u228f\u0338",
- "NotSquareSubsetEqual;": u"\u22e2",
- "NotSquareSuperset;": u"\u2290\u0338",
- "NotSquareSupersetEqual;": u"\u22e3",
- "NotSubset;": u"\u2282\u20d2",
- "NotSubsetEqual;": u"\u2288",
- "NotSucceeds;": u"\u2281",
- "NotSucceedsEqual;": u"\u2ab0\u0338",
- "NotSucceedsSlantEqual;": u"\u22e1",
- "NotSucceedsTilde;": u"\u227f\u0338",
- "NotSuperset;": u"\u2283\u20d2",
- "NotSupersetEqual;": u"\u2289",
- "NotTilde;": u"\u2241",
- "NotTildeEqual;": u"\u2244",
- "NotTildeFullEqual;": u"\u2247",
- "NotTildeTilde;": u"\u2249",
- "NotVerticalBar;": u"\u2224",
- "Nscr;": u"\U0001d4a9",
- "Ntilde": u"\xd1",
- "Ntilde;": u"\xd1",
- "Nu;": u"\u039d",
- "OElig;": u"\u0152",
- "Oacute": u"\xd3",
- "Oacute;": u"\xd3",
- "Ocirc": u"\xd4",
- "Ocirc;": u"\xd4",
- "Ocy;": u"\u041e",
- "Odblac;": u"\u0150",
- "Ofr;": u"\U0001d512",
- "Ograve": u"\xd2",
- "Ograve;": u"\xd2",
- "Omacr;": u"\u014c",
- "Omega;": u"\u03a9",
- "Omicron;": u"\u039f",
- "Oopf;": u"\U0001d546",
- "OpenCurlyDoubleQuote;": u"\u201c",
- "OpenCurlyQuote;": u"\u2018",
- "Or;": u"\u2a54",
- "Oscr;": u"\U0001d4aa",
- "Oslash": u"\xd8",
- "Oslash;": u"\xd8",
- "Otilde": u"\xd5",
- "Otilde;": u"\xd5",
- "Otimes;": u"\u2a37",
- "Ouml": u"\xd6",
- "Ouml;": u"\xd6",
- "OverBar;": u"\u203e",
- "OverBrace;": u"\u23de",
- "OverBracket;": u"\u23b4",
- "OverParenthesis;": u"\u23dc",
- "PartialD;": u"\u2202",
- "Pcy;": u"\u041f",
- "Pfr;": u"\U0001d513",
- "Phi;": u"\u03a6",
- "Pi;": u"\u03a0",
- "PlusMinus;": u"\xb1",
- "Poincareplane;": u"\u210c",
- "Popf;": u"\u2119",
- "Pr;": u"\u2abb",
- "Precedes;": u"\u227a",
- "PrecedesEqual;": u"\u2aaf",
- "PrecedesSlantEqual;": u"\u227c",
- "PrecedesTilde;": u"\u227e",
- "Prime;": u"\u2033",
- "Product;": u"\u220f",
- "Proportion;": u"\u2237",
- "Proportional;": u"\u221d",
- "Pscr;": u"\U0001d4ab",
- "Psi;": u"\u03a8",
- "QUOT": u"\"",
- "QUOT;": u"\"",
- "Qfr;": u"\U0001d514",
- "Qopf;": u"\u211a",
- "Qscr;": u"\U0001d4ac",
- "RBarr;": u"\u2910",
- "REG": u"\xae",
- "REG;": u"\xae",
- "Racute;": u"\u0154",
- "Rang;": u"\u27eb",
- "Rarr;": u"\u21a0",
- "Rarrtl;": u"\u2916",
- "Rcaron;": u"\u0158",
- "Rcedil;": u"\u0156",
- "Rcy;": u"\u0420",
- "Re;": u"\u211c",
- "ReverseElement;": u"\u220b",
- "ReverseEquilibrium;": u"\u21cb",
- "ReverseUpEquilibrium;": u"\u296f",
- "Rfr;": u"\u211c",
- "Rho;": u"\u03a1",
- "RightAngleBracket;": u"\u27e9",
- "RightArrow;": u"\u2192",
- "RightArrowBar;": u"\u21e5",
- "RightArrowLeftArrow;": u"\u21c4",
- "RightCeiling;": u"\u2309",
- "RightDoubleBracket;": u"\u27e7",
- "RightDownTeeVector;": u"\u295d",
- "RightDownVector;": u"\u21c2",
- "RightDownVectorBar;": u"\u2955",
- "RightFloor;": u"\u230b",
- "RightTee;": u"\u22a2",
- "RightTeeArrow;": u"\u21a6",
- "RightTeeVector;": u"\u295b",
- "RightTriangle;": u"\u22b3",
- "RightTriangleBar;": u"\u29d0",
- "RightTriangleEqual;": u"\u22b5",
- "RightUpDownVector;": u"\u294f",
- "RightUpTeeVector;": u"\u295c",
- "RightUpVector;": u"\u21be",
- "RightUpVectorBar;": u"\u2954",
- "RightVector;": u"\u21c0",
- "RightVectorBar;": u"\u2953",
- "Rightarrow;": u"\u21d2",
- "Ropf;": u"\u211d",
- "RoundImplies;": u"\u2970",
- "Rrightarrow;": u"\u21db",
- "Rscr;": u"\u211b",
- "Rsh;": u"\u21b1",
- "RuleDelayed;": u"\u29f4",
- "SHCHcy;": u"\u0429",
- "SHcy;": u"\u0428",
- "SOFTcy;": u"\u042c",
- "Sacute;": u"\u015a",
- "Sc;": u"\u2abc",
- "Scaron;": u"\u0160",
- "Scedil;": u"\u015e",
- "Scirc;": u"\u015c",
- "Scy;": u"\u0421",
- "Sfr;": u"\U0001d516",
- "ShortDownArrow;": u"\u2193",
- "ShortLeftArrow;": u"\u2190",
- "ShortRightArrow;": u"\u2192",
- "ShortUpArrow;": u"\u2191",
- "Sigma;": u"\u03a3",
- "SmallCircle;": u"\u2218",
- "Sopf;": u"\U0001d54a",
- "Sqrt;": u"\u221a",
- "Square;": u"\u25a1",
- "SquareIntersection;": u"\u2293",
- "SquareSubset;": u"\u228f",
- "SquareSubsetEqual;": u"\u2291",
- "SquareSuperset;": u"\u2290",
- "SquareSupersetEqual;": u"\u2292",
- "SquareUnion;": u"\u2294",
- "Sscr;": u"\U0001d4ae",
- "Star;": u"\u22c6",
- "Sub;": u"\u22d0",
- "Subset;": u"\u22d0",
- "SubsetEqual;": u"\u2286",
- "Succeeds;": u"\u227b",
- "SucceedsEqual;": u"\u2ab0",
- "SucceedsSlantEqual;": u"\u227d",
- "SucceedsTilde;": u"\u227f",
- "SuchThat;": u"\u220b",
- "Sum;": u"\u2211",
- "Sup;": u"\u22d1",
- "Superset;": u"\u2283",
- "SupersetEqual;": u"\u2287",
- "Supset;": u"\u22d1",
- "THORN": u"\xde",
- "THORN;": u"\xde",
- "TRADE;": u"\u2122",
- "TSHcy;": u"\u040b",
- "TScy;": u"\u0426",
- "Tab;": u"\t",
- "Tau;": u"\u03a4",
- "Tcaron;": u"\u0164",
- "Tcedil;": u"\u0162",
- "Tcy;": u"\u0422",
- "Tfr;": u"\U0001d517",
- "Therefore;": u"\u2234",
- "Theta;": u"\u0398",
- "ThickSpace;": u"\u205f\u200a",
- "ThinSpace;": u"\u2009",
- "Tilde;": u"\u223c",
- "TildeEqual;": u"\u2243",
- "TildeFullEqual;": u"\u2245",
- "TildeTilde;": u"\u2248",
- "Topf;": u"\U0001d54b",
- "TripleDot;": u"\u20db",
- "Tscr;": u"\U0001d4af",
- "Tstrok;": u"\u0166",
- "Uacute": u"\xda",
- "Uacute;": u"\xda",
- "Uarr;": u"\u219f",
- "Uarrocir;": u"\u2949",
- "Ubrcy;": u"\u040e",
- "Ubreve;": u"\u016c",
- "Ucirc": u"\xdb",
- "Ucirc;": u"\xdb",
- "Ucy;": u"\u0423",
- "Udblac;": u"\u0170",
- "Ufr;": u"\U0001d518",
- "Ugrave": u"\xd9",
- "Ugrave;": u"\xd9",
- "Umacr;": u"\u016a",
- "UnderBar;": u"_",
- "UnderBrace;": u"\u23df",
- "UnderBracket;": u"\u23b5",
- "UnderParenthesis;": u"\u23dd",
- "Union;": u"\u22c3",
- "UnionPlus;": u"\u228e",
- "Uogon;": u"\u0172",
- "Uopf;": u"\U0001d54c",
- "UpArrow;": u"\u2191",
- "UpArrowBar;": u"\u2912",
- "UpArrowDownArrow;": u"\u21c5",
- "UpDownArrow;": u"\u2195",
- "UpEquilibrium;": u"\u296e",
- "UpTee;": u"\u22a5",
- "UpTeeArrow;": u"\u21a5",
- "Uparrow;": u"\u21d1",
- "Updownarrow;": u"\u21d5",
- "UpperLeftArrow;": u"\u2196",
- "UpperRightArrow;": u"\u2197",
- "Upsi;": u"\u03d2",
- "Upsilon;": u"\u03a5",
- "Uring;": u"\u016e",
- "Uscr;": u"\U0001d4b0",
- "Utilde;": u"\u0168",
- "Uuml": u"\xdc",
- "Uuml;": u"\xdc",
- "VDash;": u"\u22ab",
- "Vbar;": u"\u2aeb",
- "Vcy;": u"\u0412",
- "Vdash;": u"\u22a9",
- "Vdashl;": u"\u2ae6",
- "Vee;": u"\u22c1",
- "Verbar;": u"\u2016",
- "Vert;": u"\u2016",
- "VerticalBar;": u"\u2223",
- "VerticalLine;": u"|",
- "VerticalSeparator;": u"\u2758",
- "VerticalTilde;": u"\u2240",
- "VeryThinSpace;": u"\u200a",
- "Vfr;": u"\U0001d519",
- "Vopf;": u"\U0001d54d",
- "Vscr;": u"\U0001d4b1",
- "Vvdash;": u"\u22aa",
- "Wcirc;": u"\u0174",
- "Wedge;": u"\u22c0",
- "Wfr;": u"\U0001d51a",
- "Wopf;": u"\U0001d54e",
- "Wscr;": u"\U0001d4b2",
- "Xfr;": u"\U0001d51b",
- "Xi;": u"\u039e",
- "Xopf;": u"\U0001d54f",
- "Xscr;": u"\U0001d4b3",
- "YAcy;": u"\u042f",
- "YIcy;": u"\u0407",
- "YUcy;": u"\u042e",
- "Yacute": u"\xdd",
- "Yacute;": u"\xdd",
- "Ycirc;": u"\u0176",
- "Ycy;": u"\u042b",
- "Yfr;": u"\U0001d51c",
- "Yopf;": u"\U0001d550",
- "Yscr;": u"\U0001d4b4",
- "Yuml;": u"\u0178",
- "ZHcy;": u"\u0416",
- "Zacute;": u"\u0179",
- "Zcaron;": u"\u017d",
- "Zcy;": u"\u0417",
- "Zdot;": u"\u017b",
- "ZeroWidthSpace;": u"\u200b",
- "Zeta;": u"\u0396",
- "Zfr;": u"\u2128",
- "Zopf;": u"\u2124",
- "Zscr;": u"\U0001d4b5",
- "aacute": u"\xe1",
- "aacute;": u"\xe1",
- "abreve;": u"\u0103",
- "ac;": u"\u223e",
- "acE;": u"\u223e\u0333",
- "acd;": u"\u223f",
- "acirc": u"\xe2",
- "acirc;": u"\xe2",
- "acute": u"\xb4",
- "acute;": u"\xb4",
- "acy;": u"\u0430",
- "aelig": u"\xe6",
- "aelig;": u"\xe6",
- "af;": u"\u2061",
- "afr;": u"\U0001d51e",
- "agrave": u"\xe0",
- "agrave;": u"\xe0",
- "alefsym;": u"\u2135",
- "aleph;": u"\u2135",
- "alpha;": u"\u03b1",
- "amacr;": u"\u0101",
- "amalg;": u"\u2a3f",
- "amp": u"&",
- "amp;": u"&",
- "and;": u"\u2227",
- "andand;": u"\u2a55",
- "andd;": u"\u2a5c",
- "andslope;": u"\u2a58",
- "andv;": u"\u2a5a",
- "ang;": u"\u2220",
- "ange;": u"\u29a4",
- "angle;": u"\u2220",
- "angmsd;": u"\u2221",
- "angmsdaa;": u"\u29a8",
- "angmsdab;": u"\u29a9",
- "angmsdac;": u"\u29aa",
- "angmsdad;": u"\u29ab",
- "angmsdae;": u"\u29ac",
- "angmsdaf;": u"\u29ad",
- "angmsdag;": u"\u29ae",
- "angmsdah;": u"\u29af",
- "angrt;": u"\u221f",
- "angrtvb;": u"\u22be",
- "angrtvbd;": u"\u299d",
- "angsph;": u"\u2222",
- "angst;": u"\xc5",
- "angzarr;": u"\u237c",
- "aogon;": u"\u0105",
- "aopf;": u"\U0001d552",
- "ap;": u"\u2248",
- "apE;": u"\u2a70",
- "apacir;": u"\u2a6f",
- "ape;": u"\u224a",
- "apid;": u"\u224b",
- "apos;": u"'",
- "approx;": u"\u2248",
- "approxeq;": u"\u224a",
- "aring": u"\xe5",
- "aring;": u"\xe5",
- "ascr;": u"\U0001d4b6",
- "ast;": u"*",
- "asymp;": u"\u2248",
- "asympeq;": u"\u224d",
- "atilde": u"\xe3",
- "atilde;": u"\xe3",
- "auml": u"\xe4",
- "auml;": u"\xe4",
- "awconint;": u"\u2233",
- "awint;": u"\u2a11",
- "bNot;": u"\u2aed",
- "backcong;": u"\u224c",
- "backepsilon;": u"\u03f6",
- "backprime;": u"\u2035",
- "backsim;": u"\u223d",
- "backsimeq;": u"\u22cd",
- "barvee;": u"\u22bd",
- "barwed;": u"\u2305",
- "barwedge;": u"\u2305",
- "bbrk;": u"\u23b5",
- "bbrktbrk;": u"\u23b6",
- "bcong;": u"\u224c",
- "bcy;": u"\u0431",
- "bdquo;": u"\u201e",
- "becaus;": u"\u2235",
- "because;": u"\u2235",
- "bemptyv;": u"\u29b0",
- "bepsi;": u"\u03f6",
- "bernou;": u"\u212c",
- "beta;": u"\u03b2",
- "beth;": u"\u2136",
- "between;": u"\u226c",
- "bfr;": u"\U0001d51f",
- "bigcap;": u"\u22c2",
- "bigcirc;": u"\u25ef",
- "bigcup;": u"\u22c3",
- "bigodot;": u"\u2a00",
- "bigoplus;": u"\u2a01",
- "bigotimes;": u"\u2a02",
- "bigsqcup;": u"\u2a06",
- "bigstar;": u"\u2605",
- "bigtriangledown;": u"\u25bd",
- "bigtriangleup;": u"\u25b3",
- "biguplus;": u"\u2a04",
- "bigvee;": u"\u22c1",
- "bigwedge;": u"\u22c0",
- "bkarow;": u"\u290d",
- "blacklozenge;": u"\u29eb",
- "blacksquare;": u"\u25aa",
- "blacktriangle;": u"\u25b4",
- "blacktriangledown;": u"\u25be",
- "blacktriangleleft;": u"\u25c2",
- "blacktriangleright;": u"\u25b8",
- "blank;": u"\u2423",
- "blk12;": u"\u2592",
- "blk14;": u"\u2591",
- "blk34;": u"\u2593",
- "block;": u"\u2588",
- "bne;": u"=\u20e5",
- "bnequiv;": u"\u2261\u20e5",
- "bnot;": u"\u2310",
- "bopf;": u"\U0001d553",
- "bot;": u"\u22a5",
- "bottom;": u"\u22a5",
- "bowtie;": u"\u22c8",
- "boxDL;": u"\u2557",
- "boxDR;": u"\u2554",
- "boxDl;": u"\u2556",
- "boxDr;": u"\u2553",
- "boxH;": u"\u2550",
- "boxHD;": u"\u2566",
- "boxHU;": u"\u2569",
- "boxHd;": u"\u2564",
- "boxHu;": u"\u2567",
- "boxUL;": u"\u255d",
- "boxUR;": u"\u255a",
- "boxUl;": u"\u255c",
- "boxUr;": u"\u2559",
- "boxV;": u"\u2551",
- "boxVH;": u"\u256c",
- "boxVL;": u"\u2563",
- "boxVR;": u"\u2560",
- "boxVh;": u"\u256b",
- "boxVl;": u"\u2562",
- "boxVr;": u"\u255f",
- "boxbox;": u"\u29c9",
- "boxdL;": u"\u2555",
- "boxdR;": u"\u2552",
- "boxdl;": u"\u2510",
- "boxdr;": u"\u250c",
- "boxh;": u"\u2500",
- "boxhD;": u"\u2565",
- "boxhU;": u"\u2568",
- "boxhd;": u"\u252c",
- "boxhu;": u"\u2534",
- "boxminus;": u"\u229f",
- "boxplus;": u"\u229e",
- "boxtimes;": u"\u22a0",
- "boxuL;": u"\u255b",
- "boxuR;": u"\u2558",
- "boxul;": u"\u2518",
- "boxur;": u"\u2514",
- "boxv;": u"\u2502",
- "boxvH;": u"\u256a",
- "boxvL;": u"\u2561",
- "boxvR;": u"\u255e",
- "boxvh;": u"\u253c",
- "boxvl;": u"\u2524",
- "boxvr;": u"\u251c",
- "bprime;": u"\u2035",
- "breve;": u"\u02d8",
- "brvbar": u"\xa6",
- "brvbar;": u"\xa6",
- "bscr;": u"\U0001d4b7",
- "bsemi;": u"\u204f",
- "bsim;": u"\u223d",
- "bsime;": u"\u22cd",
- "bsol;": u"\\",
- "bsolb;": u"\u29c5",
- "bsolhsub;": u"\u27c8",
- "bull;": u"\u2022",
- "bullet;": u"\u2022",
- "bump;": u"\u224e",
- "bumpE;": u"\u2aae",
- "bumpe;": u"\u224f",
- "bumpeq;": u"\u224f",
- "cacute;": u"\u0107",
- "cap;": u"\u2229",
- "capand;": u"\u2a44",
- "capbrcup;": u"\u2a49",
- "capcap;": u"\u2a4b",
- "capcup;": u"\u2a47",
- "capdot;": u"\u2a40",
- "caps;": u"\u2229\ufe00",
- "caret;": u"\u2041",
- "caron;": u"\u02c7",
- "ccaps;": u"\u2a4d",
- "ccaron;": u"\u010d",
- "ccedil": u"\xe7",
- "ccedil;": u"\xe7",
- "ccirc;": u"\u0109",
- "ccups;": u"\u2a4c",
- "ccupssm;": u"\u2a50",
- "cdot;": u"\u010b",
- "cedil": u"\xb8",
- "cedil;": u"\xb8",
- "cemptyv;": u"\u29b2",
- "cent": u"\xa2",
- "cent;": u"\xa2",
- "centerdot;": u"\xb7",
- "cfr;": u"\U0001d520",
- "chcy;": u"\u0447",
- "check;": u"\u2713",
- "checkmark;": u"\u2713",
- "chi;": u"\u03c7",
- "cir;": u"\u25cb",
- "cirE;": u"\u29c3",
- "circ;": u"\u02c6",
- "circeq;": u"\u2257",
- "circlearrowleft;": u"\u21ba",
- "circlearrowright;": u"\u21bb",
- "circledR;": u"\xae",
- "circledS;": u"\u24c8",
- "circledast;": u"\u229b",
- "circledcirc;": u"\u229a",
- "circleddash;": u"\u229d",
- "cire;": u"\u2257",
- "cirfnint;": u"\u2a10",
- "cirmid;": u"\u2aef",
- "cirscir;": u"\u29c2",
- "clubs;": u"\u2663",
- "clubsuit;": u"\u2663",
- "colon;": u":",
- "colone;": u"\u2254",
- "coloneq;": u"\u2254",
- "comma;": u",",
- "commat;": u"@",
- "comp;": u"\u2201",
- "compfn;": u"\u2218",
- "complement;": u"\u2201",
- "complexes;": u"\u2102",
- "cong;": u"\u2245",
- "congdot;": u"\u2a6d",
- "conint;": u"\u222e",
- "copf;": u"\U0001d554",
- "coprod;": u"\u2210",
- "copy": u"\xa9",
- "copy;": u"\xa9",
- "copysr;": u"\u2117",
- "crarr;": u"\u21b5",
- "cross;": u"\u2717",
- "cscr;": u"\U0001d4b8",
- "csub;": u"\u2acf",
- "csube;": u"\u2ad1",
- "csup;": u"\u2ad0",
- "csupe;": u"\u2ad2",
- "ctdot;": u"\u22ef",
- "cudarrl;": u"\u2938",
- "cudarrr;": u"\u2935",
- "cuepr;": u"\u22de",
- "cuesc;": u"\u22df",
- "cularr;": u"\u21b6",
- "cularrp;": u"\u293d",
- "cup;": u"\u222a",
- "cupbrcap;": u"\u2a48",
- "cupcap;": u"\u2a46",
- "cupcup;": u"\u2a4a",
- "cupdot;": u"\u228d",
- "cupor;": u"\u2a45",
- "cups;": u"\u222a\ufe00",
- "curarr;": u"\u21b7",
- "curarrm;": u"\u293c",
- "curlyeqprec;": u"\u22de",
- "curlyeqsucc;": u"\u22df",
- "curlyvee;": u"\u22ce",
- "curlywedge;": u"\u22cf",
- "curren": u"\xa4",
- "curren;": u"\xa4",
- "curvearrowleft;": u"\u21b6",
- "curvearrowright;": u"\u21b7",
- "cuvee;": u"\u22ce",
- "cuwed;": u"\u22cf",
- "cwconint;": u"\u2232",
- "cwint;": u"\u2231",
- "cylcty;": u"\u232d",
- "dArr;": u"\u21d3",
- "dHar;": u"\u2965",
- "dagger;": u"\u2020",
- "daleth;": u"\u2138",
- "darr;": u"\u2193",
- "dash;": u"\u2010",
- "dashv;": u"\u22a3",
- "dbkarow;": u"\u290f",
- "dblac;": u"\u02dd",
- "dcaron;": u"\u010f",
- "dcy;": u"\u0434",
- "dd;": u"\u2146",
- "ddagger;": u"\u2021",
- "ddarr;": u"\u21ca",
- "ddotseq;": u"\u2a77",
- "deg": u"\xb0",
- "deg;": u"\xb0",
- "delta;": u"\u03b4",
- "demptyv;": u"\u29b1",
- "dfisht;": u"\u297f",
- "dfr;": u"\U0001d521",
- "dharl;": u"\u21c3",
- "dharr;": u"\u21c2",
- "diam;": u"\u22c4",
- "diamond;": u"\u22c4",
- "diamondsuit;": u"\u2666",
- "diams;": u"\u2666",
- "die;": u"\xa8",
- "digamma;": u"\u03dd",
- "disin;": u"\u22f2",
- "div;": u"\xf7",
- "divide": u"\xf7",
- "divide;": u"\xf7",
- "divideontimes;": u"\u22c7",
- "divonx;": u"\u22c7",
- "djcy;": u"\u0452",
- "dlcorn;": u"\u231e",
- "dlcrop;": u"\u230d",
- "dollar;": u"$",
- "dopf;": u"\U0001d555",
- "dot;": u"\u02d9",
- "doteq;": u"\u2250",
- "doteqdot;": u"\u2251",
- "dotminus;": u"\u2238",
- "dotplus;": u"\u2214",
- "dotsquare;": u"\u22a1",
- "doublebarwedge;": u"\u2306",
- "downarrow;": u"\u2193",
- "downdownarrows;": u"\u21ca",
- "downharpoonleft;": u"\u21c3",
- "downharpoonright;": u"\u21c2",
- "drbkarow;": u"\u2910",
- "drcorn;": u"\u231f",
- "drcrop;": u"\u230c",
- "dscr;": u"\U0001d4b9",
- "dscy;": u"\u0455",
- "dsol;": u"\u29f6",
- "dstrok;": u"\u0111",
- "dtdot;": u"\u22f1",
- "dtri;": u"\u25bf",
- "dtrif;": u"\u25be",
- "duarr;": u"\u21f5",
- "duhar;": u"\u296f",
- "dwangle;": u"\u29a6",
- "dzcy;": u"\u045f",
- "dzigrarr;": u"\u27ff",
- "eDDot;": u"\u2a77",
- "eDot;": u"\u2251",
- "eacute": u"\xe9",
- "eacute;": u"\xe9",
- "easter;": u"\u2a6e",
- "ecaron;": u"\u011b",
- "ecir;": u"\u2256",
- "ecirc": u"\xea",
- "ecirc;": u"\xea",
- "ecolon;": u"\u2255",
- "ecy;": u"\u044d",
- "edot;": u"\u0117",
- "ee;": u"\u2147",
- "efDot;": u"\u2252",
- "efr;": u"\U0001d522",
- "eg;": u"\u2a9a",
- "egrave": u"\xe8",
- "egrave;": u"\xe8",
- "egs;": u"\u2a96",
- "egsdot;": u"\u2a98",
- "el;": u"\u2a99",
- "elinters;": u"\u23e7",
- "ell;": u"\u2113",
- "els;": u"\u2a95",
- "elsdot;": u"\u2a97",
- "emacr;": u"\u0113",
- "empty;": u"\u2205",
- "emptyset;": u"\u2205",
- "emptyv;": u"\u2205",
- "emsp13;": u"\u2004",
- "emsp14;": u"\u2005",
- "emsp;": u"\u2003",
- "eng;": u"\u014b",
- "ensp;": u"\u2002",
- "eogon;": u"\u0119",
- "eopf;": u"\U0001d556",
- "epar;": u"\u22d5",
- "eparsl;": u"\u29e3",
- "eplus;": u"\u2a71",
- "epsi;": u"\u03b5",
- "epsilon;": u"\u03b5",
- "epsiv;": u"\u03f5",
- "eqcirc;": u"\u2256",
- "eqcolon;": u"\u2255",
- "eqsim;": u"\u2242",
- "eqslantgtr;": u"\u2a96",
- "eqslantless;": u"\u2a95",
- "equals;": u"=",
- "equest;": u"\u225f",
- "equiv;": u"\u2261",
- "equivDD;": u"\u2a78",
- "eqvparsl;": u"\u29e5",
- "erDot;": u"\u2253",
- "erarr;": u"\u2971",
- "escr;": u"\u212f",
- "esdot;": u"\u2250",
- "esim;": u"\u2242",
- "eta;": u"\u03b7",
- "eth": u"\xf0",
- "eth;": u"\xf0",
- "euml": u"\xeb",
- "euml;": u"\xeb",
- "euro;": u"\u20ac",
- "excl;": u"!",
- "exist;": u"\u2203",
- "expectation;": u"\u2130",
- "exponentiale;": u"\u2147",
- "fallingdotseq;": u"\u2252",
- "fcy;": u"\u0444",
- "female;": u"\u2640",
- "ffilig;": u"\ufb03",
- "fflig;": u"\ufb00",
- "ffllig;": u"\ufb04",
- "ffr;": u"\U0001d523",
- "filig;": u"\ufb01",
- "fjlig;": u"fj",
- "flat;": u"\u266d",
- "fllig;": u"\ufb02",
- "fltns;": u"\u25b1",
- "fnof;": u"\u0192",
- "fopf;": u"\U0001d557",
- "forall;": u"\u2200",
- "fork;": u"\u22d4",
- "forkv;": u"\u2ad9",
- "fpartint;": u"\u2a0d",
- "frac12": u"\xbd",
- "frac12;": u"\xbd",
- "frac13;": u"\u2153",
- "frac14": u"\xbc",
- "frac14;": u"\xbc",
- "frac15;": u"\u2155",
- "frac16;": u"\u2159",
- "frac18;": u"\u215b",
- "frac23;": u"\u2154",
- "frac25;": u"\u2156",
- "frac34": u"\xbe",
- "frac34;": u"\xbe",
- "frac35;": u"\u2157",
- "frac38;": u"\u215c",
- "frac45;": u"\u2158",
- "frac56;": u"\u215a",
- "frac58;": u"\u215d",
- "frac78;": u"\u215e",
- "frasl;": u"\u2044",
- "frown;": u"\u2322",
- "fscr;": u"\U0001d4bb",
- "gE;": u"\u2267",
- "gEl;": u"\u2a8c",
- "gacute;": u"\u01f5",
- "gamma;": u"\u03b3",
- "gammad;": u"\u03dd",
- "gap;": u"\u2a86",
- "gbreve;": u"\u011f",
- "gcirc;": u"\u011d",
- "gcy;": u"\u0433",
- "gdot;": u"\u0121",
- "ge;": u"\u2265",
- "gel;": u"\u22db",
- "geq;": u"\u2265",
- "geqq;": u"\u2267",
- "geqslant;": u"\u2a7e",
- "ges;": u"\u2a7e",
- "gescc;": u"\u2aa9",
- "gesdot;": u"\u2a80",
- "gesdoto;": u"\u2a82",
- "gesdotol;": u"\u2a84",
- "gesl;": u"\u22db\ufe00",
- "gesles;": u"\u2a94",
- "gfr;": u"\U0001d524",
- "gg;": u"\u226b",
- "ggg;": u"\u22d9",
- "gimel;": u"\u2137",
- "gjcy;": u"\u0453",
- "gl;": u"\u2277",
- "glE;": u"\u2a92",
- "gla;": u"\u2aa5",
- "glj;": u"\u2aa4",
- "gnE;": u"\u2269",
- "gnap;": u"\u2a8a",
- "gnapprox;": u"\u2a8a",
- "gne;": u"\u2a88",
- "gneq;": u"\u2a88",
- "gneqq;": u"\u2269",
- "gnsim;": u"\u22e7",
- "gopf;": u"\U0001d558",
- "grave;": u"`",
- "gscr;": u"\u210a",
- "gsim;": u"\u2273",
- "gsime;": u"\u2a8e",
- "gsiml;": u"\u2a90",
- "gt": u">",
- "gt;": u">",
- "gtcc;": u"\u2aa7",
- "gtcir;": u"\u2a7a",
- "gtdot;": u"\u22d7",
- "gtlPar;": u"\u2995",
- "gtquest;": u"\u2a7c",
- "gtrapprox;": u"\u2a86",
- "gtrarr;": u"\u2978",
- "gtrdot;": u"\u22d7",
- "gtreqless;": u"\u22db",
- "gtreqqless;": u"\u2a8c",
- "gtrless;": u"\u2277",
- "gtrsim;": u"\u2273",
- "gvertneqq;": u"\u2269\ufe00",
- "gvnE;": u"\u2269\ufe00",
- "hArr;": u"\u21d4",
- "hairsp;": u"\u200a",
- "half;": u"\xbd",
- "hamilt;": u"\u210b",
- "hardcy;": u"\u044a",
- "harr;": u"\u2194",
- "harrcir;": u"\u2948",
- "harrw;": u"\u21ad",
- "hbar;": u"\u210f",
- "hcirc;": u"\u0125",
- "hearts;": u"\u2665",
- "heartsuit;": u"\u2665",
- "hellip;": u"\u2026",
- "hercon;": u"\u22b9",
- "hfr;": u"\U0001d525",
- "hksearow;": u"\u2925",
- "hkswarow;": u"\u2926",
- "hoarr;": u"\u21ff",
- "homtht;": u"\u223b",
- "hookleftarrow;": u"\u21a9",
- "hookrightarrow;": u"\u21aa",
- "hopf;": u"\U0001d559",
- "horbar;": u"\u2015",
- "hscr;": u"\U0001d4bd",
- "hslash;": u"\u210f",
- "hstrok;": u"\u0127",
- "hybull;": u"\u2043",
- "hyphen;": u"\u2010",
- "iacute": u"\xed",
- "iacute;": u"\xed",
- "ic;": u"\u2063",
- "icirc": u"\xee",
- "icirc;": u"\xee",
- "icy;": u"\u0438",
- "iecy;": u"\u0435",
- "iexcl": u"\xa1",
- "iexcl;": u"\xa1",
- "iff;": u"\u21d4",
- "ifr;": u"\U0001d526",
- "igrave": u"\xec",
- "igrave;": u"\xec",
- "ii;": u"\u2148",
- "iiiint;": u"\u2a0c",
- "iiint;": u"\u222d",
- "iinfin;": u"\u29dc",
- "iiota;": u"\u2129",
- "ijlig;": u"\u0133",
- "imacr;": u"\u012b",
- "image;": u"\u2111",
- "imagline;": u"\u2110",
- "imagpart;": u"\u2111",
- "imath;": u"\u0131",
- "imof;": u"\u22b7",
- "imped;": u"\u01b5",
- "in;": u"\u2208",
- "incare;": u"\u2105",
- "infin;": u"\u221e",
- "infintie;": u"\u29dd",
- "inodot;": u"\u0131",
- "int;": u"\u222b",
- "intcal;": u"\u22ba",
- "integers;": u"\u2124",
- "intercal;": u"\u22ba",
- "intlarhk;": u"\u2a17",
- "intprod;": u"\u2a3c",
- "iocy;": u"\u0451",
- "iogon;": u"\u012f",
- "iopf;": u"\U0001d55a",
- "iota;": u"\u03b9",
- "iprod;": u"\u2a3c",
- "iquest": u"\xbf",
- "iquest;": u"\xbf",
- "iscr;": u"\U0001d4be",
- "isin;": u"\u2208",
- "isinE;": u"\u22f9",
- "isindot;": u"\u22f5",
- "isins;": u"\u22f4",
- "isinsv;": u"\u22f3",
- "isinv;": u"\u2208",
- "it;": u"\u2062",
- "itilde;": u"\u0129",
- "iukcy;": u"\u0456",
- "iuml": u"\xef",
- "iuml;": u"\xef",
- "jcirc;": u"\u0135",
- "jcy;": u"\u0439",
- "jfr;": u"\U0001d527",
- "jmath;": u"\u0237",
- "jopf;": u"\U0001d55b",
- "jscr;": u"\U0001d4bf",
- "jsercy;": u"\u0458",
- "jukcy;": u"\u0454",
- "kappa;": u"\u03ba",
- "kappav;": u"\u03f0",
- "kcedil;": u"\u0137",
- "kcy;": u"\u043a",
- "kfr;": u"\U0001d528",
- "kgreen;": u"\u0138",
- "khcy;": u"\u0445",
- "kjcy;": u"\u045c",
- "kopf;": u"\U0001d55c",
- "kscr;": u"\U0001d4c0",
- "lAarr;": u"\u21da",
- "lArr;": u"\u21d0",
- "lAtail;": u"\u291b",
- "lBarr;": u"\u290e",
- "lE;": u"\u2266",
- "lEg;": u"\u2a8b",
- "lHar;": u"\u2962",
- "lacute;": u"\u013a",
- "laemptyv;": u"\u29b4",
- "lagran;": u"\u2112",
- "lambda;": u"\u03bb",
- "lang;": u"\u27e8",
- "langd;": u"\u2991",
- "langle;": u"\u27e8",
- "lap;": u"\u2a85",
- "laquo": u"\xab",
- "laquo;": u"\xab",
- "larr;": u"\u2190",
- "larrb;": u"\u21e4",
- "larrbfs;": u"\u291f",
- "larrfs;": u"\u291d",
- "larrhk;": u"\u21a9",
- "larrlp;": u"\u21ab",
- "larrpl;": u"\u2939",
- "larrsim;": u"\u2973",
- "larrtl;": u"\u21a2",
- "lat;": u"\u2aab",
- "latail;": u"\u2919",
- "late;": u"\u2aad",
- "lates;": u"\u2aad\ufe00",
- "lbarr;": u"\u290c",
- "lbbrk;": u"\u2772",
- "lbrace;": u"{",
- "lbrack;": u"[",
- "lbrke;": u"\u298b",
- "lbrksld;": u"\u298f",
- "lbrkslu;": u"\u298d",
- "lcaron;": u"\u013e",
- "lcedil;": u"\u013c",
- "lceil;": u"\u2308",
- "lcub;": u"{",
- "lcy;": u"\u043b",
- "ldca;": u"\u2936",
- "ldquo;": u"\u201c",
- "ldquor;": u"\u201e",
- "ldrdhar;": u"\u2967",
- "ldrushar;": u"\u294b",
- "ldsh;": u"\u21b2",
- "le;": u"\u2264",
- "leftarrow;": u"\u2190",
- "leftarrowtail;": u"\u21a2",
- "leftharpoondown;": u"\u21bd",
- "leftharpoonup;": u"\u21bc",
- "leftleftarrows;": u"\u21c7",
- "leftrightarrow;": u"\u2194",
- "leftrightarrows;": u"\u21c6",
- "leftrightharpoons;": u"\u21cb",
- "leftrightsquigarrow;": u"\u21ad",
- "leftthreetimes;": u"\u22cb",
- "leg;": u"\u22da",
- "leq;": u"\u2264",
- "leqq;": u"\u2266",
- "leqslant;": u"\u2a7d",
- "les;": u"\u2a7d",
- "lescc;": u"\u2aa8",
- "lesdot;": u"\u2a7f",
- "lesdoto;": u"\u2a81",
- "lesdotor;": u"\u2a83",
- "lesg;": u"\u22da\ufe00",
- "lesges;": u"\u2a93",
- "lessapprox;": u"\u2a85",
- "lessdot;": u"\u22d6",
- "lesseqgtr;": u"\u22da",
- "lesseqqgtr;": u"\u2a8b",
- "lessgtr;": u"\u2276",
- "lesssim;": u"\u2272",
- "lfisht;": u"\u297c",
- "lfloor;": u"\u230a",
- "lfr;": u"\U0001d529",
- "lg;": u"\u2276",
- "lgE;": u"\u2a91",
- "lhard;": u"\u21bd",
- "lharu;": u"\u21bc",
- "lharul;": u"\u296a",
- "lhblk;": u"\u2584",
- "ljcy;": u"\u0459",
- "ll;": u"\u226a",
- "llarr;": u"\u21c7",
- "llcorner;": u"\u231e",
- "llhard;": u"\u296b",
- "lltri;": u"\u25fa",
- "lmidot;": u"\u0140",
- "lmoust;": u"\u23b0",
- "lmoustache;": u"\u23b0",
- "lnE;": u"\u2268",
- "lnap;": u"\u2a89",
- "lnapprox;": u"\u2a89",
- "lne;": u"\u2a87",
- "lneq;": u"\u2a87",
- "lneqq;": u"\u2268",
- "lnsim;": u"\u22e6",
- "loang;": u"\u27ec",
- "loarr;": u"\u21fd",
- "lobrk;": u"\u27e6",
- "longleftarrow;": u"\u27f5",
- "longleftrightarrow;": u"\u27f7",
- "longmapsto;": u"\u27fc",
- "longrightarrow;": u"\u27f6",
- "looparrowleft;": u"\u21ab",
- "looparrowright;": u"\u21ac",
- "lopar;": u"\u2985",
- "lopf;": u"\U0001d55d",
- "loplus;": u"\u2a2d",
- "lotimes;": u"\u2a34",
- "lowast;": u"\u2217",
- "lowbar;": u"_",
- "loz;": u"\u25ca",
- "lozenge;": u"\u25ca",
- "lozf;": u"\u29eb",
- "lpar;": u"(",
- "lparlt;": u"\u2993",
- "lrarr;": u"\u21c6",
- "lrcorner;": u"\u231f",
- "lrhar;": u"\u21cb",
- "lrhard;": u"\u296d",
- "lrm;": u"\u200e",
- "lrtri;": u"\u22bf",
- "lsaquo;": u"\u2039",
- "lscr;": u"\U0001d4c1",
- "lsh;": u"\u21b0",
- "lsim;": u"\u2272",
- "lsime;": u"\u2a8d",
- "lsimg;": u"\u2a8f",
- "lsqb;": u"[",
- "lsquo;": u"\u2018",
- "lsquor;": u"\u201a",
- "lstrok;": u"\u0142",
- "lt": u"<",
- "lt;": u"<",
- "ltcc;": u"\u2aa6",
- "ltcir;": u"\u2a79",
- "ltdot;": u"\u22d6",
- "lthree;": u"\u22cb",
- "ltimes;": u"\u22c9",
- "ltlarr;": u"\u2976",
- "ltquest;": u"\u2a7b",
- "ltrPar;": u"\u2996",
- "ltri;": u"\u25c3",
- "ltrie;": u"\u22b4",
- "ltrif;": u"\u25c2",
- "lurdshar;": u"\u294a",
- "luruhar;": u"\u2966",
- "lvertneqq;": u"\u2268\ufe00",
- "lvnE;": u"\u2268\ufe00",
- "mDDot;": u"\u223a",
- "macr": u"\xaf",
- "macr;": u"\xaf",
- "male;": u"\u2642",
- "malt;": u"\u2720",
- "maltese;": u"\u2720",
- "map;": u"\u21a6",
- "mapsto;": u"\u21a6",
- "mapstodown;": u"\u21a7",
- "mapstoleft;": u"\u21a4",
- "mapstoup;": u"\u21a5",
- "marker;": u"\u25ae",
- "mcomma;": u"\u2a29",
- "mcy;": u"\u043c",
- "mdash;": u"\u2014",
- "measuredangle;": u"\u2221",
- "mfr;": u"\U0001d52a",
- "mho;": u"\u2127",
- "micro": u"\xb5",
- "micro;": u"\xb5",
- "mid;": u"\u2223",
- "midast;": u"*",
- "midcir;": u"\u2af0",
- "middot": u"\xb7",
- "middot;": u"\xb7",
- "minus;": u"\u2212",
- "minusb;": u"\u229f",
- "minusd;": u"\u2238",
- "minusdu;": u"\u2a2a",
- "mlcp;": u"\u2adb",
- "mldr;": u"\u2026",
- "mnplus;": u"\u2213",
- "models;": u"\u22a7",
- "mopf;": u"\U0001d55e",
- "mp;": u"\u2213",
- "mscr;": u"\U0001d4c2",
- "mstpos;": u"\u223e",
- "mu;": u"\u03bc",
- "multimap;": u"\u22b8",
- "mumap;": u"\u22b8",
- "nGg;": u"\u22d9\u0338",
- "nGt;": u"\u226b\u20d2",
- "nGtv;": u"\u226b\u0338",
- "nLeftarrow;": u"\u21cd",
- "nLeftrightarrow;": u"\u21ce",
- "nLl;": u"\u22d8\u0338",
- "nLt;": u"\u226a\u20d2",
- "nLtv;": u"\u226a\u0338",
- "nRightarrow;": u"\u21cf",
- "nVDash;": u"\u22af",
- "nVdash;": u"\u22ae",
- "nabla;": u"\u2207",
- "nacute;": u"\u0144",
- "nang;": u"\u2220\u20d2",
- "nap;": u"\u2249",
- "napE;": u"\u2a70\u0338",
- "napid;": u"\u224b\u0338",
- "napos;": u"\u0149",
- "napprox;": u"\u2249",
- "natur;": u"\u266e",
- "natural;": u"\u266e",
- "naturals;": u"\u2115",
- "nbsp": u"\xa0",
- "nbsp;": u"\xa0",
- "nbump;": u"\u224e\u0338",
- "nbumpe;": u"\u224f\u0338",
- "ncap;": u"\u2a43",
- "ncaron;": u"\u0148",
- "ncedil;": u"\u0146",
- "ncong;": u"\u2247",
- "ncongdot;": u"\u2a6d\u0338",
- "ncup;": u"\u2a42",
- "ncy;": u"\u043d",
- "ndash;": u"\u2013",
- "ne;": u"\u2260",
- "neArr;": u"\u21d7",
- "nearhk;": u"\u2924",
- "nearr;": u"\u2197",
- "nearrow;": u"\u2197",
- "nedot;": u"\u2250\u0338",
- "nequiv;": u"\u2262",
- "nesear;": u"\u2928",
- "nesim;": u"\u2242\u0338",
- "nexist;": u"\u2204",
- "nexists;": u"\u2204",
- "nfr;": u"\U0001d52b",
- "ngE;": u"\u2267\u0338",
- "nge;": u"\u2271",
- "ngeq;": u"\u2271",
- "ngeqq;": u"\u2267\u0338",
- "ngeqslant;": u"\u2a7e\u0338",
- "nges;": u"\u2a7e\u0338",
- "ngsim;": u"\u2275",
- "ngt;": u"\u226f",
- "ngtr;": u"\u226f",
- "nhArr;": u"\u21ce",
- "nharr;": u"\u21ae",
- "nhpar;": u"\u2af2",
- "ni;": u"\u220b",
- "nis;": u"\u22fc",
- "nisd;": u"\u22fa",
- "niv;": u"\u220b",
- "njcy;": u"\u045a",
- "nlArr;": u"\u21cd",
- "nlE;": u"\u2266\u0338",
- "nlarr;": u"\u219a",
- "nldr;": u"\u2025",
- "nle;": u"\u2270",
- "nleftarrow;": u"\u219a",
- "nleftrightarrow;": u"\u21ae",
- "nleq;": u"\u2270",
- "nleqq;": u"\u2266\u0338",
- "nleqslant;": u"\u2a7d\u0338",
- "nles;": u"\u2a7d\u0338",
- "nless;": u"\u226e",
- "nlsim;": u"\u2274",
- "nlt;": u"\u226e",
- "nltri;": u"\u22ea",
- "nltrie;": u"\u22ec",
- "nmid;": u"\u2224",
- "nopf;": u"\U0001d55f",
- "not": u"\xac",
- "not;": u"\xac",
- "notin;": u"\u2209",
- "notinE;": u"\u22f9\u0338",
- "notindot;": u"\u22f5\u0338",
- "notinva;": u"\u2209",
- "notinvb;": u"\u22f7",
- "notinvc;": u"\u22f6",
- "notni;": u"\u220c",
- "notniva;": u"\u220c",
- "notnivb;": u"\u22fe",
- "notnivc;": u"\u22fd",
- "npar;": u"\u2226",
- "nparallel;": u"\u2226",
- "nparsl;": u"\u2afd\u20e5",
- "npart;": u"\u2202\u0338",
- "npolint;": u"\u2a14",
- "npr;": u"\u2280",
- "nprcue;": u"\u22e0",
- "npre;": u"\u2aaf\u0338",
- "nprec;": u"\u2280",
- "npreceq;": u"\u2aaf\u0338",
- "nrArr;": u"\u21cf",
- "nrarr;": u"\u219b",
- "nrarrc;": u"\u2933\u0338",
- "nrarrw;": u"\u219d\u0338",
- "nrightarrow;": u"\u219b",
- "nrtri;": u"\u22eb",
- "nrtrie;": u"\u22ed",
- "nsc;": u"\u2281",
- "nsccue;": u"\u22e1",
- "nsce;": u"\u2ab0\u0338",
- "nscr;": u"\U0001d4c3",
- "nshortmid;": u"\u2224",
- "nshortparallel;": u"\u2226",
- "nsim;": u"\u2241",
- "nsime;": u"\u2244",
- "nsimeq;": u"\u2244",
- "nsmid;": u"\u2224",
- "nspar;": u"\u2226",
- "nsqsube;": u"\u22e2",
- "nsqsupe;": u"\u22e3",
- "nsub;": u"\u2284",
- "nsubE;": u"\u2ac5\u0338",
- "nsube;": u"\u2288",
- "nsubset;": u"\u2282\u20d2",
- "nsubseteq;": u"\u2288",
- "nsubseteqq;": u"\u2ac5\u0338",
- "nsucc;": u"\u2281",
- "nsucceq;": u"\u2ab0\u0338",
- "nsup;": u"\u2285",
- "nsupE;": u"\u2ac6\u0338",
- "nsupe;": u"\u2289",
- "nsupset;": u"\u2283\u20d2",
- "nsupseteq;": u"\u2289",
- "nsupseteqq;": u"\u2ac6\u0338",
- "ntgl;": u"\u2279",
- "ntilde": u"\xf1",
- "ntilde;": u"\xf1",
- "ntlg;": u"\u2278",
- "ntriangleleft;": u"\u22ea",
- "ntrianglelefteq;": u"\u22ec",
- "ntriangleright;": u"\u22eb",
- "ntrianglerighteq;": u"\u22ed",
- "nu;": u"\u03bd",
- "num;": u"#",
- "numero;": u"\u2116",
- "numsp;": u"\u2007",
- "nvDash;": u"\u22ad",
- "nvHarr;": u"\u2904",
- "nvap;": u"\u224d\u20d2",
- "nvdash;": u"\u22ac",
- "nvge;": u"\u2265\u20d2",
- "nvgt;": u">\u20d2",
- "nvinfin;": u"\u29de",
- "nvlArr;": u"\u2902",
- "nvle;": u"\u2264\u20d2",
- "nvlt;": u"<\u20d2",
- "nvltrie;": u"\u22b4\u20d2",
- "nvrArr;": u"\u2903",
- "nvrtrie;": u"\u22b5\u20d2",
- "nvsim;": u"\u223c\u20d2",
- "nwArr;": u"\u21d6",
- "nwarhk;": u"\u2923",
- "nwarr;": u"\u2196",
- "nwarrow;": u"\u2196",
- "nwnear;": u"\u2927",
- "oS;": u"\u24c8",
- "oacute": u"\xf3",
- "oacute;": u"\xf3",
- "oast;": u"\u229b",
- "ocir;": u"\u229a",
- "ocirc": u"\xf4",
- "ocirc;": u"\xf4",
- "ocy;": u"\u043e",
- "odash;": u"\u229d",
- "odblac;": u"\u0151",
- "odiv;": u"\u2a38",
- "odot;": u"\u2299",
- "odsold;": u"\u29bc",
- "oelig;": u"\u0153",
- "ofcir;": u"\u29bf",
- "ofr;": u"\U0001d52c",
- "ogon;": u"\u02db",
- "ograve": u"\xf2",
- "ograve;": u"\xf2",
- "ogt;": u"\u29c1",
- "ohbar;": u"\u29b5",
- "ohm;": u"\u03a9",
- "oint;": u"\u222e",
- "olarr;": u"\u21ba",
- "olcir;": u"\u29be",
- "olcross;": u"\u29bb",
- "oline;": u"\u203e",
- "olt;": u"\u29c0",
- "omacr;": u"\u014d",
- "omega;": u"\u03c9",
- "omicron;": u"\u03bf",
- "omid;": u"\u29b6",
- "ominus;": u"\u2296",
- "oopf;": u"\U0001d560",
- "opar;": u"\u29b7",
- "operp;": u"\u29b9",
- "oplus;": u"\u2295",
- "or;": u"\u2228",
- "orarr;": u"\u21bb",
- "ord;": u"\u2a5d",
- "order;": u"\u2134",
- "orderof;": u"\u2134",
- "ordf": u"\xaa",
- "ordf;": u"\xaa",
- "ordm": u"\xba",
- "ordm;": u"\xba",
- "origof;": u"\u22b6",
- "oror;": u"\u2a56",
- "orslope;": u"\u2a57",
- "orv;": u"\u2a5b",
- "oscr;": u"\u2134",
- "oslash": u"\xf8",
- "oslash;": u"\xf8",
- "osol;": u"\u2298",
- "otilde": u"\xf5",
- "otilde;": u"\xf5",
- "otimes;": u"\u2297",
- "otimesas;": u"\u2a36",
- "ouml": u"\xf6",
- "ouml;": u"\xf6",
- "ovbar;": u"\u233d",
- "par;": u"\u2225",
- "para": u"\xb6",
- "para;": u"\xb6",
- "parallel;": u"\u2225",
- "parsim;": u"\u2af3",
- "parsl;": u"\u2afd",
- "part;": u"\u2202",
- "pcy;": u"\u043f",
- "percnt;": u"%",
- "period;": u".",
- "permil;": u"\u2030",
- "perp;": u"\u22a5",
- "pertenk;": u"\u2031",
- "pfr;": u"\U0001d52d",
- "phi;": u"\u03c6",
- "phiv;": u"\u03d5",
- "phmmat;": u"\u2133",
- "phone;": u"\u260e",
- "pi;": u"\u03c0",
- "pitchfork;": u"\u22d4",
- "piv;": u"\u03d6",
- "planck;": u"\u210f",
- "planckh;": u"\u210e",
- "plankv;": u"\u210f",
- "plus;": u"+",
- "plusacir;": u"\u2a23",
- "plusb;": u"\u229e",
- "pluscir;": u"\u2a22",
- "plusdo;": u"\u2214",
- "plusdu;": u"\u2a25",
- "pluse;": u"\u2a72",
- "plusmn": u"\xb1",
- "plusmn;": u"\xb1",
- "plussim;": u"\u2a26",
- "plustwo;": u"\u2a27",
- "pm;": u"\xb1",
- "pointint;": u"\u2a15",
- "popf;": u"\U0001d561",
- "pound": u"\xa3",
- "pound;": u"\xa3",
- "pr;": u"\u227a",
- "prE;": u"\u2ab3",
- "prap;": u"\u2ab7",
- "prcue;": u"\u227c",
- "pre;": u"\u2aaf",
- "prec;": u"\u227a",
- "precapprox;": u"\u2ab7",
- "preccurlyeq;": u"\u227c",
- "preceq;": u"\u2aaf",
- "precnapprox;": u"\u2ab9",
- "precneqq;": u"\u2ab5",
- "precnsim;": u"\u22e8",
- "precsim;": u"\u227e",
- "prime;": u"\u2032",
- "primes;": u"\u2119",
- "prnE;": u"\u2ab5",
- "prnap;": u"\u2ab9",
- "prnsim;": u"\u22e8",
- "prod;": u"\u220f",
- "profalar;": u"\u232e",
- "profline;": u"\u2312",
- "profsurf;": u"\u2313",
- "prop;": u"\u221d",
- "propto;": u"\u221d",
- "prsim;": u"\u227e",
- "prurel;": u"\u22b0",
- "pscr;": u"\U0001d4c5",
- "psi;": u"\u03c8",
- "puncsp;": u"\u2008",
- "qfr;": u"\U0001d52e",
- "qint;": u"\u2a0c",
- "qopf;": u"\U0001d562",
- "qprime;": u"\u2057",
- "qscr;": u"\U0001d4c6",
- "quaternions;": u"\u210d",
- "quatint;": u"\u2a16",
- "quest;": u"?",
- "questeq;": u"\u225f",
- "quot": u"\"",
- "quot;": u"\"",
- "rAarr;": u"\u21db",
- "rArr;": u"\u21d2",
- "rAtail;": u"\u291c",
- "rBarr;": u"\u290f",
- "rHar;": u"\u2964",
- "race;": u"\u223d\u0331",
- "racute;": u"\u0155",
- "radic;": u"\u221a",
- "raemptyv;": u"\u29b3",
- "rang;": u"\u27e9",
- "rangd;": u"\u2992",
- "range;": u"\u29a5",
- "rangle;": u"\u27e9",
- "raquo": u"\xbb",
- "raquo;": u"\xbb",
- "rarr;": u"\u2192",
- "rarrap;": u"\u2975",
- "rarrb;": u"\u21e5",
- "rarrbfs;": u"\u2920",
- "rarrc;": u"\u2933",
- "rarrfs;": u"\u291e",
- "rarrhk;": u"\u21aa",
- "rarrlp;": u"\u21ac",
- "rarrpl;": u"\u2945",
- "rarrsim;": u"\u2974",
- "rarrtl;": u"\u21a3",
- "rarrw;": u"\u219d",
- "ratail;": u"\u291a",
- "ratio;": u"\u2236",
- "rationals;": u"\u211a",
- "rbarr;": u"\u290d",
- "rbbrk;": u"\u2773",
- "rbrace;": u"}",
- "rbrack;": u"]",
- "rbrke;": u"\u298c",
- "rbrksld;": u"\u298e",
- "rbrkslu;": u"\u2990",
- "rcaron;": u"\u0159",
- "rcedil;": u"\u0157",
- "rceil;": u"\u2309",
- "rcub;": u"}",
- "rcy;": u"\u0440",
- "rdca;": u"\u2937",
- "rdldhar;": u"\u2969",
- "rdquo;": u"\u201d",
- "rdquor;": u"\u201d",
- "rdsh;": u"\u21b3",
- "real;": u"\u211c",
- "realine;": u"\u211b",
- "realpart;": u"\u211c",
- "reals;": u"\u211d",
- "rect;": u"\u25ad",
- "reg": u"\xae",
- "reg;": u"\xae",
- "rfisht;": u"\u297d",
- "rfloor;": u"\u230b",
- "rfr;": u"\U0001d52f",
- "rhard;": u"\u21c1",
- "rharu;": u"\u21c0",
- "rharul;": u"\u296c",
- "rho;": u"\u03c1",
- "rhov;": u"\u03f1",
- "rightarrow;": u"\u2192",
- "rightarrowtail;": u"\u21a3",
- "rightharpoondown;": u"\u21c1",
- "rightharpoonup;": u"\u21c0",
- "rightleftarrows;": u"\u21c4",
- "rightleftharpoons;": u"\u21cc",
- "rightrightarrows;": u"\u21c9",
- "rightsquigarrow;": u"\u219d",
- "rightthreetimes;": u"\u22cc",
- "ring;": u"\u02da",
- "risingdotseq;": u"\u2253",
- "rlarr;": u"\u21c4",
- "rlhar;": u"\u21cc",
- "rlm;": u"\u200f",
- "rmoust;": u"\u23b1",
- "rmoustache;": u"\u23b1",
- "rnmid;": u"\u2aee",
- "roang;": u"\u27ed",
- "roarr;": u"\u21fe",
- "robrk;": u"\u27e7",
- "ropar;": u"\u2986",
- "ropf;": u"\U0001d563",
- "roplus;": u"\u2a2e",
- "rotimes;": u"\u2a35",
- "rpar;": u")",
- "rpargt;": u"\u2994",
- "rppolint;": u"\u2a12",
- "rrarr;": u"\u21c9",
- "rsaquo;": u"\u203a",
- "rscr;": u"\U0001d4c7",
- "rsh;": u"\u21b1",
- "rsqb;": u"]",
- "rsquo;": u"\u2019",
- "rsquor;": u"\u2019",
- "rthree;": u"\u22cc",
- "rtimes;": u"\u22ca",
- "rtri;": u"\u25b9",
- "rtrie;": u"\u22b5",
- "rtrif;": u"\u25b8",
- "rtriltri;": u"\u29ce",
- "ruluhar;": u"\u2968",
- "rx;": u"\u211e",
- "sacute;": u"\u015b",
- "sbquo;": u"\u201a",
- "sc;": u"\u227b",
- "scE;": u"\u2ab4",
- "scap;": u"\u2ab8",
- "scaron;": u"\u0161",
- "sccue;": u"\u227d",
- "sce;": u"\u2ab0",
- "scedil;": u"\u015f",
- "scirc;": u"\u015d",
- "scnE;": u"\u2ab6",
- "scnap;": u"\u2aba",
- "scnsim;": u"\u22e9",
- "scpolint;": u"\u2a13",
- "scsim;": u"\u227f",
- "scy;": u"\u0441",
- "sdot;": u"\u22c5",
- "sdotb;": u"\u22a1",
- "sdote;": u"\u2a66",
- "seArr;": u"\u21d8",
- "searhk;": u"\u2925",
- "searr;": u"\u2198",
- "searrow;": u"\u2198",
- "sect": u"\xa7",
- "sect;": u"\xa7",
- "semi;": u";",
- "seswar;": u"\u2929",
- "setminus;": u"\u2216",
- "setmn;": u"\u2216",
- "sext;": u"\u2736",
- "sfr;": u"\U0001d530",
- "sfrown;": u"\u2322",
- "sharp;": u"\u266f",
- "shchcy;": u"\u0449",
- "shcy;": u"\u0448",
- "shortmid;": u"\u2223",
- "shortparallel;": u"\u2225",
- "shy": u"\xad",
- "shy;": u"\xad",
- "sigma;": u"\u03c3",
- "sigmaf;": u"\u03c2",
- "sigmav;": u"\u03c2",
- "sim;": u"\u223c",
- "simdot;": u"\u2a6a",
- "sime;": u"\u2243",
- "simeq;": u"\u2243",
- "simg;": u"\u2a9e",
- "simgE;": u"\u2aa0",
- "siml;": u"\u2a9d",
- "simlE;": u"\u2a9f",
- "simne;": u"\u2246",
- "simplus;": u"\u2a24",
- "simrarr;": u"\u2972",
- "slarr;": u"\u2190",
- "smallsetminus;": u"\u2216",
- "smashp;": u"\u2a33",
- "smeparsl;": u"\u29e4",
- "smid;": u"\u2223",
- "smile;": u"\u2323",
- "smt;": u"\u2aaa",
- "smte;": u"\u2aac",
- "smtes;": u"\u2aac\ufe00",
- "softcy;": u"\u044c",
- "sol;": u"/",
- "solb;": u"\u29c4",
- "solbar;": u"\u233f",
- "sopf;": u"\U0001d564",
- "spades;": u"\u2660",
- "spadesuit;": u"\u2660",
- "spar;": u"\u2225",
- "sqcap;": u"\u2293",
- "sqcaps;": u"\u2293\ufe00",
- "sqcup;": u"\u2294",
- "sqcups;": u"\u2294\ufe00",
- "sqsub;": u"\u228f",
- "sqsube;": u"\u2291",
- "sqsubset;": u"\u228f",
- "sqsubseteq;": u"\u2291",
- "sqsup;": u"\u2290",
- "sqsupe;": u"\u2292",
- "sqsupset;": u"\u2290",
- "sqsupseteq;": u"\u2292",
- "squ;": u"\u25a1",
- "square;": u"\u25a1",
- "squarf;": u"\u25aa",
- "squf;": u"\u25aa",
- "srarr;": u"\u2192",
- "sscr;": u"\U0001d4c8",
- "ssetmn;": u"\u2216",
- "ssmile;": u"\u2323",
- "sstarf;": u"\u22c6",
- "star;": u"\u2606",
- "starf;": u"\u2605",
- "straightepsilon;": u"\u03f5",
- "straightphi;": u"\u03d5",
- "strns;": u"\xaf",
- "sub;": u"\u2282",
- "subE;": u"\u2ac5",
- "subdot;": u"\u2abd",
- "sube;": u"\u2286",
- "subedot;": u"\u2ac3",
- "submult;": u"\u2ac1",
- "subnE;": u"\u2acb",
- "subne;": u"\u228a",
- "subplus;": u"\u2abf",
- "subrarr;": u"\u2979",
- "subset;": u"\u2282",
- "subseteq;": u"\u2286",
- "subseteqq;": u"\u2ac5",
- "subsetneq;": u"\u228a",
- "subsetneqq;": u"\u2acb",
- "subsim;": u"\u2ac7",
- "subsub;": u"\u2ad5",
- "subsup;": u"\u2ad3",
- "succ;": u"\u227b",
- "succapprox;": u"\u2ab8",
- "succcurlyeq;": u"\u227d",
- "succeq;": u"\u2ab0",
- "succnapprox;": u"\u2aba",
- "succneqq;": u"\u2ab6",
- "succnsim;": u"\u22e9",
- "succsim;": u"\u227f",
- "sum;": u"\u2211",
- "sung;": u"\u266a",
- "sup1": u"\xb9",
- "sup1;": u"\xb9",
- "sup2": u"\xb2",
- "sup2;": u"\xb2",
- "sup3": u"\xb3",
- "sup3;": u"\xb3",
- "sup;": u"\u2283",
- "supE;": u"\u2ac6",
- "supdot;": u"\u2abe",
- "supdsub;": u"\u2ad8",
- "supe;": u"\u2287",
- "supedot;": u"\u2ac4",
- "suphsol;": u"\u27c9",
- "suphsub;": u"\u2ad7",
- "suplarr;": u"\u297b",
- "supmult;": u"\u2ac2",
- "supnE;": u"\u2acc",
- "supne;": u"\u228b",
- "supplus;": u"\u2ac0",
- "supset;": u"\u2283",
- "supseteq;": u"\u2287",
- "supseteqq;": u"\u2ac6",
- "supsetneq;": u"\u228b",
- "supsetneqq;": u"\u2acc",
- "supsim;": u"\u2ac8",
- "supsub;": u"\u2ad4",
- "supsup;": u"\u2ad6",
- "swArr;": u"\u21d9",
- "swarhk;": u"\u2926",
- "swarr;": u"\u2199",
- "swarrow;": u"\u2199",
- "swnwar;": u"\u292a",
- "szlig": u"\xdf",
- "szlig;": u"\xdf",
- "target;": u"\u2316",
- "tau;": u"\u03c4",
- "tbrk;": u"\u23b4",
- "tcaron;": u"\u0165",
- "tcedil;": u"\u0163",
- "tcy;": u"\u0442",
- "tdot;": u"\u20db",
- "telrec;": u"\u2315",
- "tfr;": u"\U0001d531",
- "there4;": u"\u2234",
- "therefore;": u"\u2234",
- "theta;": u"\u03b8",
- "thetasym;": u"\u03d1",
- "thetav;": u"\u03d1",
- "thickapprox;": u"\u2248",
- "thicksim;": u"\u223c",
- "thinsp;": u"\u2009",
- "thkap;": u"\u2248",
- "thksim;": u"\u223c",
- "thorn": u"\xfe",
- "thorn;": u"\xfe",
- "tilde;": u"\u02dc",
- "times": u"\xd7",
- "times;": u"\xd7",
- "timesb;": u"\u22a0",
- "timesbar;": u"\u2a31",
- "timesd;": u"\u2a30",
- "tint;": u"\u222d",
- "toea;": u"\u2928",
- "top;": u"\u22a4",
- "topbot;": u"\u2336",
- "topcir;": u"\u2af1",
- "topf;": u"\U0001d565",
- "topfork;": u"\u2ada",
- "tosa;": u"\u2929",
- "tprime;": u"\u2034",
- "trade;": u"\u2122",
- "triangle;": u"\u25b5",
- "triangledown;": u"\u25bf",
- "triangleleft;": u"\u25c3",
- "trianglelefteq;": u"\u22b4",
- "triangleq;": u"\u225c",
- "triangleright;": u"\u25b9",
- "trianglerighteq;": u"\u22b5",
- "tridot;": u"\u25ec",
- "trie;": u"\u225c",
- "triminus;": u"\u2a3a",
- "triplus;": u"\u2a39",
- "trisb;": u"\u29cd",
- "tritime;": u"\u2a3b",
- "trpezium;": u"\u23e2",
- "tscr;": u"\U0001d4c9",
- "tscy;": u"\u0446",
- "tshcy;": u"\u045b",
- "tstrok;": u"\u0167",
- "twixt;": u"\u226c",
- "twoheadleftarrow;": u"\u219e",
- "twoheadrightarrow;": u"\u21a0",
- "uArr;": u"\u21d1",
- "uHar;": u"\u2963",
- "uacute": u"\xfa",
- "uacute;": u"\xfa",
- "uarr;": u"\u2191",
- "ubrcy;": u"\u045e",
- "ubreve;": u"\u016d",
- "ucirc": u"\xfb",
- "ucirc;": u"\xfb",
- "ucy;": u"\u0443",
- "udarr;": u"\u21c5",
- "udblac;": u"\u0171",
- "udhar;": u"\u296e",
- "ufisht;": u"\u297e",
- "ufr;": u"\U0001d532",
- "ugrave": u"\xf9",
- "ugrave;": u"\xf9",
- "uharl;": u"\u21bf",
- "uharr;": u"\u21be",
- "uhblk;": u"\u2580",
- "ulcorn;": u"\u231c",
- "ulcorner;": u"\u231c",
- "ulcrop;": u"\u230f",
- "ultri;": u"\u25f8",
- "umacr;": u"\u016b",
- "uml": u"\xa8",
- "uml;": u"\xa8",
- "uogon;": u"\u0173",
- "uopf;": u"\U0001d566",
- "uparrow;": u"\u2191",
- "updownarrow;": u"\u2195",
- "upharpoonleft;": u"\u21bf",
- "upharpoonright;": u"\u21be",
- "uplus;": u"\u228e",
- "upsi;": u"\u03c5",
- "upsih;": u"\u03d2",
- "upsilon;": u"\u03c5",
- "upuparrows;": u"\u21c8",
- "urcorn;": u"\u231d",
- "urcorner;": u"\u231d",
- "urcrop;": u"\u230e",
- "uring;": u"\u016f",
- "urtri;": u"\u25f9",
- "uscr;": u"\U0001d4ca",
- "utdot;": u"\u22f0",
- "utilde;": u"\u0169",
- "utri;": u"\u25b5",
- "utrif;": u"\u25b4",
- "uuarr;": u"\u21c8",
- "uuml": u"\xfc",
- "uuml;": u"\xfc",
- "uwangle;": u"\u29a7",
- "vArr;": u"\u21d5",
- "vBar;": u"\u2ae8",
- "vBarv;": u"\u2ae9",
- "vDash;": u"\u22a8",
- "vangrt;": u"\u299c",
- "varepsilon;": u"\u03f5",
- "varkappa;": u"\u03f0",
- "varnothing;": u"\u2205",
- "varphi;": u"\u03d5",
- "varpi;": u"\u03d6",
- "varpropto;": u"\u221d",
- "varr;": u"\u2195",
- "varrho;": u"\u03f1",
- "varsigma;": u"\u03c2",
- "varsubsetneq;": u"\u228a\ufe00",
- "varsubsetneqq;": u"\u2acb\ufe00",
- "varsupsetneq;": u"\u228b\ufe00",
- "varsupsetneqq;": u"\u2acc\ufe00",
- "vartheta;": u"\u03d1",
- "vartriangleleft;": u"\u22b2",
- "vartriangleright;": u"\u22b3",
- "vcy;": u"\u0432",
- "vdash;": u"\u22a2",
- "vee;": u"\u2228",
- "veebar;": u"\u22bb",
- "veeeq;": u"\u225a",
- "vellip;": u"\u22ee",
- "verbar;": u"|",
- "vert;": u"|",
- "vfr;": u"\U0001d533",
- "vltri;": u"\u22b2",
- "vnsub;": u"\u2282\u20d2",
- "vnsup;": u"\u2283\u20d2",
- "vopf;": u"\U0001d567",
- "vprop;": u"\u221d",
- "vrtri;": u"\u22b3",
- "vscr;": u"\U0001d4cb",
- "vsubnE;": u"\u2acb\ufe00",
- "vsubne;": u"\u228a\ufe00",
- "vsupnE;": u"\u2acc\ufe00",
- "vsupne;": u"\u228b\ufe00",
- "vzigzag;": u"\u299a",
- "wcirc;": u"\u0175",
- "wedbar;": u"\u2a5f",
- "wedge;": u"\u2227",
- "wedgeq;": u"\u2259",
- "weierp;": u"\u2118",
- "wfr;": u"\U0001d534",
- "wopf;": u"\U0001d568",
- "wp;": u"\u2118",
- "wr;": u"\u2240",
- "wreath;": u"\u2240",
- "wscr;": u"\U0001d4cc",
- "xcap;": u"\u22c2",
- "xcirc;": u"\u25ef",
- "xcup;": u"\u22c3",
- "xdtri;": u"\u25bd",
- "xfr;": u"\U0001d535",
- "xhArr;": u"\u27fa",
- "xharr;": u"\u27f7",
- "xi;": u"\u03be",
- "xlArr;": u"\u27f8",
- "xlarr;": u"\u27f5",
- "xmap;": u"\u27fc",
- "xnis;": u"\u22fb",
- "xodot;": u"\u2a00",
- "xopf;": u"\U0001d569",
- "xoplus;": u"\u2a01",
- "xotime;": u"\u2a02",
- "xrArr;": u"\u27f9",
- "xrarr;": u"\u27f6",
- "xscr;": u"\U0001d4cd",
- "xsqcup;": u"\u2a06",
- "xuplus;": u"\u2a04",
- "xutri;": u"\u25b3",
- "xvee;": u"\u22c1",
- "xwedge;": u"\u22c0",
- "yacute": u"\xfd",
- "yacute;": u"\xfd",
- "yacy;": u"\u044f",
- "ycirc;": u"\u0177",
- "ycy;": u"\u044b",
- "yen": u"\xa5",
- "yen;": u"\xa5",
- "yfr;": u"\U0001d536",
- "yicy;": u"\u0457",
- "yopf;": u"\U0001d56a",
- "yscr;": u"\U0001d4ce",
- "yucy;": u"\u044e",
- "yuml": u"\xff",
- "yuml;": u"\xff",
- "zacute;": u"\u017a",
- "zcaron;": u"\u017e",
- "zcy;": u"\u0437",
- "zdot;": u"\u017c",
- "zeetrf;": u"\u2128",
- "zeta;": u"\u03b6",
- "zfr;": u"\U0001d537",
- "zhcy;": u"\u0436",
- "zigrarr;": u"\u21dd",
- "zopf;": u"\U0001d56b",
- "zscr;": u"\U0001d4cf",
- "zwj;": u"\u200d",
- "zwnj;": u"\u200c",
+ "AElig": "\xc6",
+ "AElig;": "\xc6",
+ "AMP": "&",
+ "AMP;": "&",
+ "Aacute": "\xc1",
+ "Aacute;": "\xc1",
+ "Abreve;": "\u0102",
+ "Acirc": "\xc2",
+ "Acirc;": "\xc2",
+ "Acy;": "\u0410",
+ "Afr;": "\U0001d504",
+ "Agrave": "\xc0",
+ "Agrave;": "\xc0",
+ "Alpha;": "\u0391",
+ "Amacr;": "\u0100",
+ "And;": "\u2a53",
+ "Aogon;": "\u0104",
+ "Aopf;": "\U0001d538",
+ "ApplyFunction;": "\u2061",
+ "Aring": "\xc5",
+ "Aring;": "\xc5",
+ "Ascr;": "\U0001d49c",
+ "Assign;": "\u2254",
+ "Atilde": "\xc3",
+ "Atilde;": "\xc3",
+ "Auml": "\xc4",
+ "Auml;": "\xc4",
+ "Backslash;": "\u2216",
+ "Barv;": "\u2ae7",
+ "Barwed;": "\u2306",
+ "Bcy;": "\u0411",
+ "Because;": "\u2235",
+ "Bernoullis;": "\u212c",
+ "Beta;": "\u0392",
+ "Bfr;": "\U0001d505",
+ "Bopf;": "\U0001d539",
+ "Breve;": "\u02d8",
+ "Bscr;": "\u212c",
+ "Bumpeq;": "\u224e",
+ "CHcy;": "\u0427",
+ "COPY": "\xa9",
+ "COPY;": "\xa9",
+ "Cacute;": "\u0106",
+ "Cap;": "\u22d2",
+ "CapitalDifferentialD;": "\u2145",
+ "Cayleys;": "\u212d",
+ "Ccaron;": "\u010c",
+ "Ccedil": "\xc7",
+ "Ccedil;": "\xc7",
+ "Ccirc;": "\u0108",
+ "Cconint;": "\u2230",
+ "Cdot;": "\u010a",
+ "Cedilla;": "\xb8",
+ "CenterDot;": "\xb7",
+ "Cfr;": "\u212d",
+ "Chi;": "\u03a7",
+ "CircleDot;": "\u2299",
+ "CircleMinus;": "\u2296",
+ "CirclePlus;": "\u2295",
+ "CircleTimes;": "\u2297",
+ "ClockwiseContourIntegral;": "\u2232",
+ "CloseCurlyDoubleQuote;": "\u201d",
+ "CloseCurlyQuote;": "\u2019",
+ "Colon;": "\u2237",
+ "Colone;": "\u2a74",
+ "Congruent;": "\u2261",
+ "Conint;": "\u222f",
+ "ContourIntegral;": "\u222e",
+ "Copf;": "\u2102",
+ "Coproduct;": "\u2210",
+ "CounterClockwiseContourIntegral;": "\u2233",
+ "Cross;": "\u2a2f",
+ "Cscr;": "\U0001d49e",
+ "Cup;": "\u22d3",
+ "CupCap;": "\u224d",
+ "DD;": "\u2145",
+ "DDotrahd;": "\u2911",
+ "DJcy;": "\u0402",
+ "DScy;": "\u0405",
+ "DZcy;": "\u040f",
+ "Dagger;": "\u2021",
+ "Darr;": "\u21a1",
+ "Dashv;": "\u2ae4",
+ "Dcaron;": "\u010e",
+ "Dcy;": "\u0414",
+ "Del;": "\u2207",
+ "Delta;": "\u0394",
+ "Dfr;": "\U0001d507",
+ "DiacriticalAcute;": "\xb4",
+ "DiacriticalDot;": "\u02d9",
+ "DiacriticalDoubleAcute;": "\u02dd",
+ "DiacriticalGrave;": "`",
+ "DiacriticalTilde;": "\u02dc",
+ "Diamond;": "\u22c4",
+ "DifferentialD;": "\u2146",
+ "Dopf;": "\U0001d53b",
+ "Dot;": "\xa8",
+ "DotDot;": "\u20dc",
+ "DotEqual;": "\u2250",
+ "DoubleContourIntegral;": "\u222f",
+ "DoubleDot;": "\xa8",
+ "DoubleDownArrow;": "\u21d3",
+ "DoubleLeftArrow;": "\u21d0",
+ "DoubleLeftRightArrow;": "\u21d4",
+ "DoubleLeftTee;": "\u2ae4",
+ "DoubleLongLeftArrow;": "\u27f8",
+ "DoubleLongLeftRightArrow;": "\u27fa",
+ "DoubleLongRightArrow;": "\u27f9",
+ "DoubleRightArrow;": "\u21d2",
+ "DoubleRightTee;": "\u22a8",
+ "DoubleUpArrow;": "\u21d1",
+ "DoubleUpDownArrow;": "\u21d5",
+ "DoubleVerticalBar;": "\u2225",
+ "DownArrow;": "\u2193",
+ "DownArrowBar;": "\u2913",
+ "DownArrowUpArrow;": "\u21f5",
+ "DownBreve;": "\u0311",
+ "DownLeftRightVector;": "\u2950",
+ "DownLeftTeeVector;": "\u295e",
+ "DownLeftVector;": "\u21bd",
+ "DownLeftVectorBar;": "\u2956",
+ "DownRightTeeVector;": "\u295f",
+ "DownRightVector;": "\u21c1",
+ "DownRightVectorBar;": "\u2957",
+ "DownTee;": "\u22a4",
+ "DownTeeArrow;": "\u21a7",
+ "Downarrow;": "\u21d3",
+ "Dscr;": "\U0001d49f",
+ "Dstrok;": "\u0110",
+ "ENG;": "\u014a",
+ "ETH": "\xd0",
+ "ETH;": "\xd0",
+ "Eacute": "\xc9",
+ "Eacute;": "\xc9",
+ "Ecaron;": "\u011a",
+ "Ecirc": "\xca",
+ "Ecirc;": "\xca",
+ "Ecy;": "\u042d",
+ "Edot;": "\u0116",
+ "Efr;": "\U0001d508",
+ "Egrave": "\xc8",
+ "Egrave;": "\xc8",
+ "Element;": "\u2208",
+ "Emacr;": "\u0112",
+ "EmptySmallSquare;": "\u25fb",
+ "EmptyVerySmallSquare;": "\u25ab",
+ "Eogon;": "\u0118",
+ "Eopf;": "\U0001d53c",
+ "Epsilon;": "\u0395",
+ "Equal;": "\u2a75",
+ "EqualTilde;": "\u2242",
+ "Equilibrium;": "\u21cc",
+ "Escr;": "\u2130",
+ "Esim;": "\u2a73",
+ "Eta;": "\u0397",
+ "Euml": "\xcb",
+ "Euml;": "\xcb",
+ "Exists;": "\u2203",
+ "ExponentialE;": "\u2147",
+ "Fcy;": "\u0424",
+ "Ffr;": "\U0001d509",
+ "FilledSmallSquare;": "\u25fc",
+ "FilledVerySmallSquare;": "\u25aa",
+ "Fopf;": "\U0001d53d",
+ "ForAll;": "\u2200",
+ "Fouriertrf;": "\u2131",
+ "Fscr;": "\u2131",
+ "GJcy;": "\u0403",
+ "GT": ">",
+ "GT;": ">",
+ "Gamma;": "\u0393",
+ "Gammad;": "\u03dc",
+ "Gbreve;": "\u011e",
+ "Gcedil;": "\u0122",
+ "Gcirc;": "\u011c",
+ "Gcy;": "\u0413",
+ "Gdot;": "\u0120",
+ "Gfr;": "\U0001d50a",
+ "Gg;": "\u22d9",
+ "Gopf;": "\U0001d53e",
+ "GreaterEqual;": "\u2265",
+ "GreaterEqualLess;": "\u22db",
+ "GreaterFullEqual;": "\u2267",
+ "GreaterGreater;": "\u2aa2",
+ "GreaterLess;": "\u2277",
+ "GreaterSlantEqual;": "\u2a7e",
+ "GreaterTilde;": "\u2273",
+ "Gscr;": "\U0001d4a2",
+ "Gt;": "\u226b",
+ "HARDcy;": "\u042a",
+ "Hacek;": "\u02c7",
+ "Hat;": "^",
+ "Hcirc;": "\u0124",
+ "Hfr;": "\u210c",
+ "HilbertSpace;": "\u210b",
+ "Hopf;": "\u210d",
+ "HorizontalLine;": "\u2500",
+ "Hscr;": "\u210b",
+ "Hstrok;": "\u0126",
+ "HumpDownHump;": "\u224e",
+ "HumpEqual;": "\u224f",
+ "IEcy;": "\u0415",
+ "IJlig;": "\u0132",
+ "IOcy;": "\u0401",
+ "Iacute": "\xcd",
+ "Iacute;": "\xcd",
+ "Icirc": "\xce",
+ "Icirc;": "\xce",
+ "Icy;": "\u0418",
+ "Idot;": "\u0130",
+ "Ifr;": "\u2111",
+ "Igrave": "\xcc",
+ "Igrave;": "\xcc",
+ "Im;": "\u2111",
+ "Imacr;": "\u012a",
+ "ImaginaryI;": "\u2148",
+ "Implies;": "\u21d2",
+ "Int;": "\u222c",
+ "Integral;": "\u222b",
+ "Intersection;": "\u22c2",
+ "InvisibleComma;": "\u2063",
+ "InvisibleTimes;": "\u2062",
+ "Iogon;": "\u012e",
+ "Iopf;": "\U0001d540",
+ "Iota;": "\u0399",
+ "Iscr;": "\u2110",
+ "Itilde;": "\u0128",
+ "Iukcy;": "\u0406",
+ "Iuml": "\xcf",
+ "Iuml;": "\xcf",
+ "Jcirc;": "\u0134",
+ "Jcy;": "\u0419",
+ "Jfr;": "\U0001d50d",
+ "Jopf;": "\U0001d541",
+ "Jscr;": "\U0001d4a5",
+ "Jsercy;": "\u0408",
+ "Jukcy;": "\u0404",
+ "KHcy;": "\u0425",
+ "KJcy;": "\u040c",
+ "Kappa;": "\u039a",
+ "Kcedil;": "\u0136",
+ "Kcy;": "\u041a",
+ "Kfr;": "\U0001d50e",
+ "Kopf;": "\U0001d542",
+ "Kscr;": "\U0001d4a6",
+ "LJcy;": "\u0409",
+ "LT": "<",
+ "LT;": "<",
+ "Lacute;": "\u0139",
+ "Lambda;": "\u039b",
+ "Lang;": "\u27ea",
+ "Laplacetrf;": "\u2112",
+ "Larr;": "\u219e",
+ "Lcaron;": "\u013d",
+ "Lcedil;": "\u013b",
+ "Lcy;": "\u041b",
+ "LeftAngleBracket;": "\u27e8",
+ "LeftArrow;": "\u2190",
+ "LeftArrowBar;": "\u21e4",
+ "LeftArrowRightArrow;": "\u21c6",
+ "LeftCeiling;": "\u2308",
+ "LeftDoubleBracket;": "\u27e6",
+ "LeftDownTeeVector;": "\u2961",
+ "LeftDownVector;": "\u21c3",
+ "LeftDownVectorBar;": "\u2959",
+ "LeftFloor;": "\u230a",
+ "LeftRightArrow;": "\u2194",
+ "LeftRightVector;": "\u294e",
+ "LeftTee;": "\u22a3",
+ "LeftTeeArrow;": "\u21a4",
+ "LeftTeeVector;": "\u295a",
+ "LeftTriangle;": "\u22b2",
+ "LeftTriangleBar;": "\u29cf",
+ "LeftTriangleEqual;": "\u22b4",
+ "LeftUpDownVector;": "\u2951",
+ "LeftUpTeeVector;": "\u2960",
+ "LeftUpVector;": "\u21bf",
+ "LeftUpVectorBar;": "\u2958",
+ "LeftVector;": "\u21bc",
+ "LeftVectorBar;": "\u2952",
+ "Leftarrow;": "\u21d0",
+ "Leftrightarrow;": "\u21d4",
+ "LessEqualGreater;": "\u22da",
+ "LessFullEqual;": "\u2266",
+ "LessGreater;": "\u2276",
+ "LessLess;": "\u2aa1",
+ "LessSlantEqual;": "\u2a7d",
+ "LessTilde;": "\u2272",
+ "Lfr;": "\U0001d50f",
+ "Ll;": "\u22d8",
+ "Lleftarrow;": "\u21da",
+ "Lmidot;": "\u013f",
+ "LongLeftArrow;": "\u27f5",
+ "LongLeftRightArrow;": "\u27f7",
+ "LongRightArrow;": "\u27f6",
+ "Longleftarrow;": "\u27f8",
+ "Longleftrightarrow;": "\u27fa",
+ "Longrightarrow;": "\u27f9",
+ "Lopf;": "\U0001d543",
+ "LowerLeftArrow;": "\u2199",
+ "LowerRightArrow;": "\u2198",
+ "Lscr;": "\u2112",
+ "Lsh;": "\u21b0",
+ "Lstrok;": "\u0141",
+ "Lt;": "\u226a",
+ "Map;": "\u2905",
+ "Mcy;": "\u041c",
+ "MediumSpace;": "\u205f",
+ "Mellintrf;": "\u2133",
+ "Mfr;": "\U0001d510",
+ "MinusPlus;": "\u2213",
+ "Mopf;": "\U0001d544",
+ "Mscr;": "\u2133",
+ "Mu;": "\u039c",
+ "NJcy;": "\u040a",
+ "Nacute;": "\u0143",
+ "Ncaron;": "\u0147",
+ "Ncedil;": "\u0145",
+ "Ncy;": "\u041d",
+ "NegativeMediumSpace;": "\u200b",
+ "NegativeThickSpace;": "\u200b",
+ "NegativeThinSpace;": "\u200b",
+ "NegativeVeryThinSpace;": "\u200b",
+ "NestedGreaterGreater;": "\u226b",
+ "NestedLessLess;": "\u226a",
+ "NewLine;": "\n",
+ "Nfr;": "\U0001d511",
+ "NoBreak;": "\u2060",
+ "NonBreakingSpace;": "\xa0",
+ "Nopf;": "\u2115",
+ "Not;": "\u2aec",
+ "NotCongruent;": "\u2262",
+ "NotCupCap;": "\u226d",
+ "NotDoubleVerticalBar;": "\u2226",
+ "NotElement;": "\u2209",
+ "NotEqual;": "\u2260",
+ "NotEqualTilde;": "\u2242\u0338",
+ "NotExists;": "\u2204",
+ "NotGreater;": "\u226f",
+ "NotGreaterEqual;": "\u2271",
+ "NotGreaterFullEqual;": "\u2267\u0338",
+ "NotGreaterGreater;": "\u226b\u0338",
+ "NotGreaterLess;": "\u2279",
+ "NotGreaterSlantEqual;": "\u2a7e\u0338",
+ "NotGreaterTilde;": "\u2275",
+ "NotHumpDownHump;": "\u224e\u0338",
+ "NotHumpEqual;": "\u224f\u0338",
+ "NotLeftTriangle;": "\u22ea",
+ "NotLeftTriangleBar;": "\u29cf\u0338",
+ "NotLeftTriangleEqual;": "\u22ec",
+ "NotLess;": "\u226e",
+ "NotLessEqual;": "\u2270",
+ "NotLessGreater;": "\u2278",
+ "NotLessLess;": "\u226a\u0338",
+ "NotLessSlantEqual;": "\u2a7d\u0338",
+ "NotLessTilde;": "\u2274",
+ "NotNestedGreaterGreater;": "\u2aa2\u0338",
+ "NotNestedLessLess;": "\u2aa1\u0338",
+ "NotPrecedes;": "\u2280",
+ "NotPrecedesEqual;": "\u2aaf\u0338",
+ "NotPrecedesSlantEqual;": "\u22e0",
+ "NotReverseElement;": "\u220c",
+ "NotRightTriangle;": "\u22eb",
+ "NotRightTriangleBar;": "\u29d0\u0338",
+ "NotRightTriangleEqual;": "\u22ed",
+ "NotSquareSubset;": "\u228f\u0338",
+ "NotSquareSubsetEqual;": "\u22e2",
+ "NotSquareSuperset;": "\u2290\u0338",
+ "NotSquareSupersetEqual;": "\u22e3",
+ "NotSubset;": "\u2282\u20d2",
+ "NotSubsetEqual;": "\u2288",
+ "NotSucceeds;": "\u2281",
+ "NotSucceedsEqual;": "\u2ab0\u0338",
+ "NotSucceedsSlantEqual;": "\u22e1",
+ "NotSucceedsTilde;": "\u227f\u0338",
+ "NotSuperset;": "\u2283\u20d2",
+ "NotSupersetEqual;": "\u2289",
+ "NotTilde;": "\u2241",
+ "NotTildeEqual;": "\u2244",
+ "NotTildeFullEqual;": "\u2247",
+ "NotTildeTilde;": "\u2249",
+ "NotVerticalBar;": "\u2224",
+ "Nscr;": "\U0001d4a9",
+ "Ntilde": "\xd1",
+ "Ntilde;": "\xd1",
+ "Nu;": "\u039d",
+ "OElig;": "\u0152",
+ "Oacute": "\xd3",
+ "Oacute;": "\xd3",
+ "Ocirc": "\xd4",
+ "Ocirc;": "\xd4",
+ "Ocy;": "\u041e",
+ "Odblac;": "\u0150",
+ "Ofr;": "\U0001d512",
+ "Ograve": "\xd2",
+ "Ograve;": "\xd2",
+ "Omacr;": "\u014c",
+ "Omega;": "\u03a9",
+ "Omicron;": "\u039f",
+ "Oopf;": "\U0001d546",
+ "OpenCurlyDoubleQuote;": "\u201c",
+ "OpenCurlyQuote;": "\u2018",
+ "Or;": "\u2a54",
+ "Oscr;": "\U0001d4aa",
+ "Oslash": "\xd8",
+ "Oslash;": "\xd8",
+ "Otilde": "\xd5",
+ "Otilde;": "\xd5",
+ "Otimes;": "\u2a37",
+ "Ouml": "\xd6",
+ "Ouml;": "\xd6",
+ "OverBar;": "\u203e",
+ "OverBrace;": "\u23de",
+ "OverBracket;": "\u23b4",
+ "OverParenthesis;": "\u23dc",
+ "PartialD;": "\u2202",
+ "Pcy;": "\u041f",
+ "Pfr;": "\U0001d513",
+ "Phi;": "\u03a6",
+ "Pi;": "\u03a0",
+ "PlusMinus;": "\xb1",
+ "Poincareplane;": "\u210c",
+ "Popf;": "\u2119",
+ "Pr;": "\u2abb",
+ "Precedes;": "\u227a",
+ "PrecedesEqual;": "\u2aaf",
+ "PrecedesSlantEqual;": "\u227c",
+ "PrecedesTilde;": "\u227e",
+ "Prime;": "\u2033",
+ "Product;": "\u220f",
+ "Proportion;": "\u2237",
+ "Proportional;": "\u221d",
+ "Pscr;": "\U0001d4ab",
+ "Psi;": "\u03a8",
+ "QUOT": "\"",
+ "QUOT;": "\"",
+ "Qfr;": "\U0001d514",
+ "Qopf;": "\u211a",
+ "Qscr;": "\U0001d4ac",
+ "RBarr;": "\u2910",
+ "REG": "\xae",
+ "REG;": "\xae",
+ "Racute;": "\u0154",
+ "Rang;": "\u27eb",
+ "Rarr;": "\u21a0",
+ "Rarrtl;": "\u2916",
+ "Rcaron;": "\u0158",
+ "Rcedil;": "\u0156",
+ "Rcy;": "\u0420",
+ "Re;": "\u211c",
+ "ReverseElement;": "\u220b",
+ "ReverseEquilibrium;": "\u21cb",
+ "ReverseUpEquilibrium;": "\u296f",
+ "Rfr;": "\u211c",
+ "Rho;": "\u03a1",
+ "RightAngleBracket;": "\u27e9",
+ "RightArrow;": "\u2192",
+ "RightArrowBar;": "\u21e5",
+ "RightArrowLeftArrow;": "\u21c4",
+ "RightCeiling;": "\u2309",
+ "RightDoubleBracket;": "\u27e7",
+ "RightDownTeeVector;": "\u295d",
+ "RightDownVector;": "\u21c2",
+ "RightDownVectorBar;": "\u2955",
+ "RightFloor;": "\u230b",
+ "RightTee;": "\u22a2",
+ "RightTeeArrow;": "\u21a6",
+ "RightTeeVector;": "\u295b",
+ "RightTriangle;": "\u22b3",
+ "RightTriangleBar;": "\u29d0",
+ "RightTriangleEqual;": "\u22b5",
+ "RightUpDownVector;": "\u294f",
+ "RightUpTeeVector;": "\u295c",
+ "RightUpVector;": "\u21be",
+ "RightUpVectorBar;": "\u2954",
+ "RightVector;": "\u21c0",
+ "RightVectorBar;": "\u2953",
+ "Rightarrow;": "\u21d2",
+ "Ropf;": "\u211d",
+ "RoundImplies;": "\u2970",
+ "Rrightarrow;": "\u21db",
+ "Rscr;": "\u211b",
+ "Rsh;": "\u21b1",
+ "RuleDelayed;": "\u29f4",
+ "SHCHcy;": "\u0429",
+ "SHcy;": "\u0428",
+ "SOFTcy;": "\u042c",
+ "Sacute;": "\u015a",
+ "Sc;": "\u2abc",
+ "Scaron;": "\u0160",
+ "Scedil;": "\u015e",
+ "Scirc;": "\u015c",
+ "Scy;": "\u0421",
+ "Sfr;": "\U0001d516",
+ "ShortDownArrow;": "\u2193",
+ "ShortLeftArrow;": "\u2190",
+ "ShortRightArrow;": "\u2192",
+ "ShortUpArrow;": "\u2191",
+ "Sigma;": "\u03a3",
+ "SmallCircle;": "\u2218",
+ "Sopf;": "\U0001d54a",
+ "Sqrt;": "\u221a",
+ "Square;": "\u25a1",
+ "SquareIntersection;": "\u2293",
+ "SquareSubset;": "\u228f",
+ "SquareSubsetEqual;": "\u2291",
+ "SquareSuperset;": "\u2290",
+ "SquareSupersetEqual;": "\u2292",
+ "SquareUnion;": "\u2294",
+ "Sscr;": "\U0001d4ae",
+ "Star;": "\u22c6",
+ "Sub;": "\u22d0",
+ "Subset;": "\u22d0",
+ "SubsetEqual;": "\u2286",
+ "Succeeds;": "\u227b",
+ "SucceedsEqual;": "\u2ab0",
+ "SucceedsSlantEqual;": "\u227d",
+ "SucceedsTilde;": "\u227f",
+ "SuchThat;": "\u220b",
+ "Sum;": "\u2211",
+ "Sup;": "\u22d1",
+ "Superset;": "\u2283",
+ "SupersetEqual;": "\u2287",
+ "Supset;": "\u22d1",
+ "THORN": "\xde",
+ "THORN;": "\xde",
+ "TRADE;": "\u2122",
+ "TSHcy;": "\u040b",
+ "TScy;": "\u0426",
+ "Tab;": "\t",
+ "Tau;": "\u03a4",
+ "Tcaron;": "\u0164",
+ "Tcedil;": "\u0162",
+ "Tcy;": "\u0422",
+ "Tfr;": "\U0001d517",
+ "Therefore;": "\u2234",
+ "Theta;": "\u0398",
+ "ThickSpace;": "\u205f\u200a",
+ "ThinSpace;": "\u2009",
+ "Tilde;": "\u223c",
+ "TildeEqual;": "\u2243",
+ "TildeFullEqual;": "\u2245",
+ "TildeTilde;": "\u2248",
+ "Topf;": "\U0001d54b",
+ "TripleDot;": "\u20db",
+ "Tscr;": "\U0001d4af",
+ "Tstrok;": "\u0166",
+ "Uacute": "\xda",
+ "Uacute;": "\xda",
+ "Uarr;": "\u219f",
+ "Uarrocir;": "\u2949",
+ "Ubrcy;": "\u040e",
+ "Ubreve;": "\u016c",
+ "Ucirc": "\xdb",
+ "Ucirc;": "\xdb",
+ "Ucy;": "\u0423",
+ "Udblac;": "\u0170",
+ "Ufr;": "\U0001d518",
+ "Ugrave": "\xd9",
+ "Ugrave;": "\xd9",
+ "Umacr;": "\u016a",
+ "UnderBar;": "_",
+ "UnderBrace;": "\u23df",
+ "UnderBracket;": "\u23b5",
+ "UnderParenthesis;": "\u23dd",
+ "Union;": "\u22c3",
+ "UnionPlus;": "\u228e",
+ "Uogon;": "\u0172",
+ "Uopf;": "\U0001d54c",
+ "UpArrow;": "\u2191",
+ "UpArrowBar;": "\u2912",
+ "UpArrowDownArrow;": "\u21c5",
+ "UpDownArrow;": "\u2195",
+ "UpEquilibrium;": "\u296e",
+ "UpTee;": "\u22a5",
+ "UpTeeArrow;": "\u21a5",
+ "Uparrow;": "\u21d1",
+ "Updownarrow;": "\u21d5",
+ "UpperLeftArrow;": "\u2196",
+ "UpperRightArrow;": "\u2197",
+ "Upsi;": "\u03d2",
+ "Upsilon;": "\u03a5",
+ "Uring;": "\u016e",
+ "Uscr;": "\U0001d4b0",
+ "Utilde;": "\u0168",
+ "Uuml": "\xdc",
+ "Uuml;": "\xdc",
+ "VDash;": "\u22ab",
+ "Vbar;": "\u2aeb",
+ "Vcy;": "\u0412",
+ "Vdash;": "\u22a9",
+ "Vdashl;": "\u2ae6",
+ "Vee;": "\u22c1",
+ "Verbar;": "\u2016",
+ "Vert;": "\u2016",
+ "VerticalBar;": "\u2223",
+ "VerticalLine;": "|",
+ "VerticalSeparator;": "\u2758",
+ "VerticalTilde;": "\u2240",
+ "VeryThinSpace;": "\u200a",
+ "Vfr;": "\U0001d519",
+ "Vopf;": "\U0001d54d",
+ "Vscr;": "\U0001d4b1",
+ "Vvdash;": "\u22aa",
+ "Wcirc;": "\u0174",
+ "Wedge;": "\u22c0",
+ "Wfr;": "\U0001d51a",
+ "Wopf;": "\U0001d54e",
+ "Wscr;": "\U0001d4b2",
+ "Xfr;": "\U0001d51b",
+ "Xi;": "\u039e",
+ "Xopf;": "\U0001d54f",
+ "Xscr;": "\U0001d4b3",
+ "YAcy;": "\u042f",
+ "YIcy;": "\u0407",
+ "YUcy;": "\u042e",
+ "Yacute": "\xdd",
+ "Yacute;": "\xdd",
+ "Ycirc;": "\u0176",
+ "Ycy;": "\u042b",
+ "Yfr;": "\U0001d51c",
+ "Yopf;": "\U0001d550",
+ "Yscr;": "\U0001d4b4",
+ "Yuml;": "\u0178",
+ "ZHcy;": "\u0416",
+ "Zacute;": "\u0179",
+ "Zcaron;": "\u017d",
+ "Zcy;": "\u0417",
+ "Zdot;": "\u017b",
+ "ZeroWidthSpace;": "\u200b",
+ "Zeta;": "\u0396",
+ "Zfr;": "\u2128",
+ "Zopf;": "\u2124",
+ "Zscr;": "\U0001d4b5",
+ "aacute": "\xe1",
+ "aacute;": "\xe1",
+ "abreve;": "\u0103",
+ "ac;": "\u223e",
+ "acE;": "\u223e\u0333",
+ "acd;": "\u223f",
+ "acirc": "\xe2",
+ "acirc;": "\xe2",
+ "acute": "\xb4",
+ "acute;": "\xb4",
+ "acy;": "\u0430",
+ "aelig": "\xe6",
+ "aelig;": "\xe6",
+ "af;": "\u2061",
+ "afr;": "\U0001d51e",
+ "agrave": "\xe0",
+ "agrave;": "\xe0",
+ "alefsym;": "\u2135",
+ "aleph;": "\u2135",
+ "alpha;": "\u03b1",
+ "amacr;": "\u0101",
+ "amalg;": "\u2a3f",
+ "amp": "&",
+ "amp;": "&",
+ "and;": "\u2227",
+ "andand;": "\u2a55",
+ "andd;": "\u2a5c",
+ "andslope;": "\u2a58",
+ "andv;": "\u2a5a",
+ "ang;": "\u2220",
+ "ange;": "\u29a4",
+ "angle;": "\u2220",
+ "angmsd;": "\u2221",
+ "angmsdaa;": "\u29a8",
+ "angmsdab;": "\u29a9",
+ "angmsdac;": "\u29aa",
+ "angmsdad;": "\u29ab",
+ "angmsdae;": "\u29ac",
+ "angmsdaf;": "\u29ad",
+ "angmsdag;": "\u29ae",
+ "angmsdah;": "\u29af",
+ "angrt;": "\u221f",
+ "angrtvb;": "\u22be",
+ "angrtvbd;": "\u299d",
+ "angsph;": "\u2222",
+ "angst;": "\xc5",
+ "angzarr;": "\u237c",
+ "aogon;": "\u0105",
+ "aopf;": "\U0001d552",
+ "ap;": "\u2248",
+ "apE;": "\u2a70",
+ "apacir;": "\u2a6f",
+ "ape;": "\u224a",
+ "apid;": "\u224b",
+ "apos;": "'",
+ "approx;": "\u2248",
+ "approxeq;": "\u224a",
+ "aring": "\xe5",
+ "aring;": "\xe5",
+ "ascr;": "\U0001d4b6",
+ "ast;": "*",
+ "asymp;": "\u2248",
+ "asympeq;": "\u224d",
+ "atilde": "\xe3",
+ "atilde;": "\xe3",
+ "auml": "\xe4",
+ "auml;": "\xe4",
+ "awconint;": "\u2233",
+ "awint;": "\u2a11",
+ "bNot;": "\u2aed",
+ "backcong;": "\u224c",
+ "backepsilon;": "\u03f6",
+ "backprime;": "\u2035",
+ "backsim;": "\u223d",
+ "backsimeq;": "\u22cd",
+ "barvee;": "\u22bd",
+ "barwed;": "\u2305",
+ "barwedge;": "\u2305",
+ "bbrk;": "\u23b5",
+ "bbrktbrk;": "\u23b6",
+ "bcong;": "\u224c",
+ "bcy;": "\u0431",
+ "bdquo;": "\u201e",
+ "becaus;": "\u2235",
+ "because;": "\u2235",
+ "bemptyv;": "\u29b0",
+ "bepsi;": "\u03f6",
+ "bernou;": "\u212c",
+ "beta;": "\u03b2",
+ "beth;": "\u2136",
+ "between;": "\u226c",
+ "bfr;": "\U0001d51f",
+ "bigcap;": "\u22c2",
+ "bigcirc;": "\u25ef",
+ "bigcup;": "\u22c3",
+ "bigodot;": "\u2a00",
+ "bigoplus;": "\u2a01",
+ "bigotimes;": "\u2a02",
+ "bigsqcup;": "\u2a06",
+ "bigstar;": "\u2605",
+ "bigtriangledown;": "\u25bd",
+ "bigtriangleup;": "\u25b3",
+ "biguplus;": "\u2a04",
+ "bigvee;": "\u22c1",
+ "bigwedge;": "\u22c0",
+ "bkarow;": "\u290d",
+ "blacklozenge;": "\u29eb",
+ "blacksquare;": "\u25aa",
+ "blacktriangle;": "\u25b4",
+ "blacktriangledown;": "\u25be",
+ "blacktriangleleft;": "\u25c2",
+ "blacktriangleright;": "\u25b8",
+ "blank;": "\u2423",
+ "blk12;": "\u2592",
+ "blk14;": "\u2591",
+ "blk34;": "\u2593",
+ "block;": "\u2588",
+ "bne;": "=\u20e5",
+ "bnequiv;": "\u2261\u20e5",
+ "bnot;": "\u2310",
+ "bopf;": "\U0001d553",
+ "bot;": "\u22a5",
+ "bottom;": "\u22a5",
+ "bowtie;": "\u22c8",
+ "boxDL;": "\u2557",
+ "boxDR;": "\u2554",
+ "boxDl;": "\u2556",
+ "boxDr;": "\u2553",
+ "boxH;": "\u2550",
+ "boxHD;": "\u2566",
+ "boxHU;": "\u2569",
+ "boxHd;": "\u2564",
+ "boxHu;": "\u2567",
+ "boxUL;": "\u255d",
+ "boxUR;": "\u255a",
+ "boxUl;": "\u255c",
+ "boxUr;": "\u2559",
+ "boxV;": "\u2551",
+ "boxVH;": "\u256c",
+ "boxVL;": "\u2563",
+ "boxVR;": "\u2560",
+ "boxVh;": "\u256b",
+ "boxVl;": "\u2562",
+ "boxVr;": "\u255f",
+ "boxbox;": "\u29c9",
+ "boxdL;": "\u2555",
+ "boxdR;": "\u2552",
+ "boxdl;": "\u2510",
+ "boxdr;": "\u250c",
+ "boxh;": "\u2500",
+ "boxhD;": "\u2565",
+ "boxhU;": "\u2568",
+ "boxhd;": "\u252c",
+ "boxhu;": "\u2534",
+ "boxminus;": "\u229f",
+ "boxplus;": "\u229e",
+ "boxtimes;": "\u22a0",
+ "boxuL;": "\u255b",
+ "boxuR;": "\u2558",
+ "boxul;": "\u2518",
+ "boxur;": "\u2514",
+ "boxv;": "\u2502",
+ "boxvH;": "\u256a",
+ "boxvL;": "\u2561",
+ "boxvR;": "\u255e",
+ "boxvh;": "\u253c",
+ "boxvl;": "\u2524",
+ "boxvr;": "\u251c",
+ "bprime;": "\u2035",
+ "breve;": "\u02d8",
+ "brvbar": "\xa6",
+ "brvbar;": "\xa6",
+ "bscr;": "\U0001d4b7",
+ "bsemi;": "\u204f",
+ "bsim;": "\u223d",
+ "bsime;": "\u22cd",
+ "bsol;": "\\",
+ "bsolb;": "\u29c5",
+ "bsolhsub;": "\u27c8",
+ "bull;": "\u2022",
+ "bullet;": "\u2022",
+ "bump;": "\u224e",
+ "bumpE;": "\u2aae",
+ "bumpe;": "\u224f",
+ "bumpeq;": "\u224f",
+ "cacute;": "\u0107",
+ "cap;": "\u2229",
+ "capand;": "\u2a44",
+ "capbrcup;": "\u2a49",
+ "capcap;": "\u2a4b",
+ "capcup;": "\u2a47",
+ "capdot;": "\u2a40",
+ "caps;": "\u2229\ufe00",
+ "caret;": "\u2041",
+ "caron;": "\u02c7",
+ "ccaps;": "\u2a4d",
+ "ccaron;": "\u010d",
+ "ccedil": "\xe7",
+ "ccedil;": "\xe7",
+ "ccirc;": "\u0109",
+ "ccups;": "\u2a4c",
+ "ccupssm;": "\u2a50",
+ "cdot;": "\u010b",
+ "cedil": "\xb8",
+ "cedil;": "\xb8",
+ "cemptyv;": "\u29b2",
+ "cent": "\xa2",
+ "cent;": "\xa2",
+ "centerdot;": "\xb7",
+ "cfr;": "\U0001d520",
+ "chcy;": "\u0447",
+ "check;": "\u2713",
+ "checkmark;": "\u2713",
+ "chi;": "\u03c7",
+ "cir;": "\u25cb",
+ "cirE;": "\u29c3",
+ "circ;": "\u02c6",
+ "circeq;": "\u2257",
+ "circlearrowleft;": "\u21ba",
+ "circlearrowright;": "\u21bb",
+ "circledR;": "\xae",
+ "circledS;": "\u24c8",
+ "circledast;": "\u229b",
+ "circledcirc;": "\u229a",
+ "circleddash;": "\u229d",
+ "cire;": "\u2257",
+ "cirfnint;": "\u2a10",
+ "cirmid;": "\u2aef",
+ "cirscir;": "\u29c2",
+ "clubs;": "\u2663",
+ "clubsuit;": "\u2663",
+ "colon;": ":",
+ "colone;": "\u2254",
+ "coloneq;": "\u2254",
+ "comma;": ",",
+ "commat;": "@",
+ "comp;": "\u2201",
+ "compfn;": "\u2218",
+ "complement;": "\u2201",
+ "complexes;": "\u2102",
+ "cong;": "\u2245",
+ "congdot;": "\u2a6d",
+ "conint;": "\u222e",
+ "copf;": "\U0001d554",
+ "coprod;": "\u2210",
+ "copy": "\xa9",
+ "copy;": "\xa9",
+ "copysr;": "\u2117",
+ "crarr;": "\u21b5",
+ "cross;": "\u2717",
+ "cscr;": "\U0001d4b8",
+ "csub;": "\u2acf",
+ "csube;": "\u2ad1",
+ "csup;": "\u2ad0",
+ "csupe;": "\u2ad2",
+ "ctdot;": "\u22ef",
+ "cudarrl;": "\u2938",
+ "cudarrr;": "\u2935",
+ "cuepr;": "\u22de",
+ "cuesc;": "\u22df",
+ "cularr;": "\u21b6",
+ "cularrp;": "\u293d",
+ "cup;": "\u222a",
+ "cupbrcap;": "\u2a48",
+ "cupcap;": "\u2a46",
+ "cupcup;": "\u2a4a",
+ "cupdot;": "\u228d",
+ "cupor;": "\u2a45",
+ "cups;": "\u222a\ufe00",
+ "curarr;": "\u21b7",
+ "curarrm;": "\u293c",
+ "curlyeqprec;": "\u22de",
+ "curlyeqsucc;": "\u22df",
+ "curlyvee;": "\u22ce",
+ "curlywedge;": "\u22cf",
+ "curren": "\xa4",
+ "curren;": "\xa4",
+ "curvearrowleft;": "\u21b6",
+ "curvearrowright;": "\u21b7",
+ "cuvee;": "\u22ce",
+ "cuwed;": "\u22cf",
+ "cwconint;": "\u2232",
+ "cwint;": "\u2231",
+ "cylcty;": "\u232d",
+ "dArr;": "\u21d3",
+ "dHar;": "\u2965",
+ "dagger;": "\u2020",
+ "daleth;": "\u2138",
+ "darr;": "\u2193",
+ "dash;": "\u2010",
+ "dashv;": "\u22a3",
+ "dbkarow;": "\u290f",
+ "dblac;": "\u02dd",
+ "dcaron;": "\u010f",
+ "dcy;": "\u0434",
+ "dd;": "\u2146",
+ "ddagger;": "\u2021",
+ "ddarr;": "\u21ca",
+ "ddotseq;": "\u2a77",
+ "deg": "\xb0",
+ "deg;": "\xb0",
+ "delta;": "\u03b4",
+ "demptyv;": "\u29b1",
+ "dfisht;": "\u297f",
+ "dfr;": "\U0001d521",
+ "dharl;": "\u21c3",
+ "dharr;": "\u21c2",
+ "diam;": "\u22c4",
+ "diamond;": "\u22c4",
+ "diamondsuit;": "\u2666",
+ "diams;": "\u2666",
+ "die;": "\xa8",
+ "digamma;": "\u03dd",
+ "disin;": "\u22f2",
+ "div;": "\xf7",
+ "divide": "\xf7",
+ "divide;": "\xf7",
+ "divideontimes;": "\u22c7",
+ "divonx;": "\u22c7",
+ "djcy;": "\u0452",
+ "dlcorn;": "\u231e",
+ "dlcrop;": "\u230d",
+ "dollar;": "$",
+ "dopf;": "\U0001d555",
+ "dot;": "\u02d9",
+ "doteq;": "\u2250",
+ "doteqdot;": "\u2251",
+ "dotminus;": "\u2238",
+ "dotplus;": "\u2214",
+ "dotsquare;": "\u22a1",
+ "doublebarwedge;": "\u2306",
+ "downarrow;": "\u2193",
+ "downdownarrows;": "\u21ca",
+ "downharpoonleft;": "\u21c3",
+ "downharpoonright;": "\u21c2",
+ "drbkarow;": "\u2910",
+ "drcorn;": "\u231f",
+ "drcrop;": "\u230c",
+ "dscr;": "\U0001d4b9",
+ "dscy;": "\u0455",
+ "dsol;": "\u29f6",
+ "dstrok;": "\u0111",
+ "dtdot;": "\u22f1",
+ "dtri;": "\u25bf",
+ "dtrif;": "\u25be",
+ "duarr;": "\u21f5",
+ "duhar;": "\u296f",
+ "dwangle;": "\u29a6",
+ "dzcy;": "\u045f",
+ "dzigrarr;": "\u27ff",
+ "eDDot;": "\u2a77",
+ "eDot;": "\u2251",
+ "eacute": "\xe9",
+ "eacute;": "\xe9",
+ "easter;": "\u2a6e",
+ "ecaron;": "\u011b",
+ "ecir;": "\u2256",
+ "ecirc": "\xea",
+ "ecirc;": "\xea",
+ "ecolon;": "\u2255",
+ "ecy;": "\u044d",
+ "edot;": "\u0117",
+ "ee;": "\u2147",
+ "efDot;": "\u2252",
+ "efr;": "\U0001d522",
+ "eg;": "\u2a9a",
+ "egrave": "\xe8",
+ "egrave;": "\xe8",
+ "egs;": "\u2a96",
+ "egsdot;": "\u2a98",
+ "el;": "\u2a99",
+ "elinters;": "\u23e7",
+ "ell;": "\u2113",
+ "els;": "\u2a95",
+ "elsdot;": "\u2a97",
+ "emacr;": "\u0113",
+ "empty;": "\u2205",
+ "emptyset;": "\u2205",
+ "emptyv;": "\u2205",
+ "emsp13;": "\u2004",
+ "emsp14;": "\u2005",
+ "emsp;": "\u2003",
+ "eng;": "\u014b",
+ "ensp;": "\u2002",
+ "eogon;": "\u0119",
+ "eopf;": "\U0001d556",
+ "epar;": "\u22d5",
+ "eparsl;": "\u29e3",
+ "eplus;": "\u2a71",
+ "epsi;": "\u03b5",
+ "epsilon;": "\u03b5",
+ "epsiv;": "\u03f5",
+ "eqcirc;": "\u2256",
+ "eqcolon;": "\u2255",
+ "eqsim;": "\u2242",
+ "eqslantgtr;": "\u2a96",
+ "eqslantless;": "\u2a95",
+ "equals;": "=",
+ "equest;": "\u225f",
+ "equiv;": "\u2261",
+ "equivDD;": "\u2a78",
+ "eqvparsl;": "\u29e5",
+ "erDot;": "\u2253",
+ "erarr;": "\u2971",
+ "escr;": "\u212f",
+ "esdot;": "\u2250",
+ "esim;": "\u2242",
+ "eta;": "\u03b7",
+ "eth": "\xf0",
+ "eth;": "\xf0",
+ "euml": "\xeb",
+ "euml;": "\xeb",
+ "euro;": "\u20ac",
+ "excl;": "!",
+ "exist;": "\u2203",
+ "expectation;": "\u2130",
+ "exponentiale;": "\u2147",
+ "fallingdotseq;": "\u2252",
+ "fcy;": "\u0444",
+ "female;": "\u2640",
+ "ffilig;": "\ufb03",
+ "fflig;": "\ufb00",
+ "ffllig;": "\ufb04",
+ "ffr;": "\U0001d523",
+ "filig;": "\ufb01",
+ "fjlig;": "fj",
+ "flat;": "\u266d",
+ "fllig;": "\ufb02",
+ "fltns;": "\u25b1",
+ "fnof;": "\u0192",
+ "fopf;": "\U0001d557",
+ "forall;": "\u2200",
+ "fork;": "\u22d4",
+ "forkv;": "\u2ad9",
+ "fpartint;": "\u2a0d",
+ "frac12": "\xbd",
+ "frac12;": "\xbd",
+ "frac13;": "\u2153",
+ "frac14": "\xbc",
+ "frac14;": "\xbc",
+ "frac15;": "\u2155",
+ "frac16;": "\u2159",
+ "frac18;": "\u215b",
+ "frac23;": "\u2154",
+ "frac25;": "\u2156",
+ "frac34": "\xbe",
+ "frac34;": "\xbe",
+ "frac35;": "\u2157",
+ "frac38;": "\u215c",
+ "frac45;": "\u2158",
+ "frac56;": "\u215a",
+ "frac58;": "\u215d",
+ "frac78;": "\u215e",
+ "frasl;": "\u2044",
+ "frown;": "\u2322",
+ "fscr;": "\U0001d4bb",
+ "gE;": "\u2267",
+ "gEl;": "\u2a8c",
+ "gacute;": "\u01f5",
+ "gamma;": "\u03b3",
+ "gammad;": "\u03dd",
+ "gap;": "\u2a86",
+ "gbreve;": "\u011f",
+ "gcirc;": "\u011d",
+ "gcy;": "\u0433",
+ "gdot;": "\u0121",
+ "ge;": "\u2265",
+ "gel;": "\u22db",
+ "geq;": "\u2265",
+ "geqq;": "\u2267",
+ "geqslant;": "\u2a7e",
+ "ges;": "\u2a7e",
+ "gescc;": "\u2aa9",
+ "gesdot;": "\u2a80",
+ "gesdoto;": "\u2a82",
+ "gesdotol;": "\u2a84",
+ "gesl;": "\u22db\ufe00",
+ "gesles;": "\u2a94",
+ "gfr;": "\U0001d524",
+ "gg;": "\u226b",
+ "ggg;": "\u22d9",
+ "gimel;": "\u2137",
+ "gjcy;": "\u0453",
+ "gl;": "\u2277",
+ "glE;": "\u2a92",
+ "gla;": "\u2aa5",
+ "glj;": "\u2aa4",
+ "gnE;": "\u2269",
+ "gnap;": "\u2a8a",
+ "gnapprox;": "\u2a8a",
+ "gne;": "\u2a88",
+ "gneq;": "\u2a88",
+ "gneqq;": "\u2269",
+ "gnsim;": "\u22e7",
+ "gopf;": "\U0001d558",
+ "grave;": "`",
+ "gscr;": "\u210a",
+ "gsim;": "\u2273",
+ "gsime;": "\u2a8e",
+ "gsiml;": "\u2a90",
+ "gt": ">",
+ "gt;": ">",
+ "gtcc;": "\u2aa7",
+ "gtcir;": "\u2a7a",
+ "gtdot;": "\u22d7",
+ "gtlPar;": "\u2995",
+ "gtquest;": "\u2a7c",
+ "gtrapprox;": "\u2a86",
+ "gtrarr;": "\u2978",
+ "gtrdot;": "\u22d7",
+ "gtreqless;": "\u22db",
+ "gtreqqless;": "\u2a8c",
+ "gtrless;": "\u2277",
+ "gtrsim;": "\u2273",
+ "gvertneqq;": "\u2269\ufe00",
+ "gvnE;": "\u2269\ufe00",
+ "hArr;": "\u21d4",
+ "hairsp;": "\u200a",
+ "half;": "\xbd",
+ "hamilt;": "\u210b",
+ "hardcy;": "\u044a",
+ "harr;": "\u2194",
+ "harrcir;": "\u2948",
+ "harrw;": "\u21ad",
+ "hbar;": "\u210f",
+ "hcirc;": "\u0125",
+ "hearts;": "\u2665",
+ "heartsuit;": "\u2665",
+ "hellip;": "\u2026",
+ "hercon;": "\u22b9",
+ "hfr;": "\U0001d525",
+ "hksearow;": "\u2925",
+ "hkswarow;": "\u2926",
+ "hoarr;": "\u21ff",
+ "homtht;": "\u223b",
+ "hookleftarrow;": "\u21a9",
+ "hookrightarrow;": "\u21aa",
+ "hopf;": "\U0001d559",
+ "horbar;": "\u2015",
+ "hscr;": "\U0001d4bd",
+ "hslash;": "\u210f",
+ "hstrok;": "\u0127",
+ "hybull;": "\u2043",
+ "hyphen;": "\u2010",
+ "iacute": "\xed",
+ "iacute;": "\xed",
+ "ic;": "\u2063",
+ "icirc": "\xee",
+ "icirc;": "\xee",
+ "icy;": "\u0438",
+ "iecy;": "\u0435",
+ "iexcl": "\xa1",
+ "iexcl;": "\xa1",
+ "iff;": "\u21d4",
+ "ifr;": "\U0001d526",
+ "igrave": "\xec",
+ "igrave;": "\xec",
+ "ii;": "\u2148",
+ "iiiint;": "\u2a0c",
+ "iiint;": "\u222d",
+ "iinfin;": "\u29dc",
+ "iiota;": "\u2129",
+ "ijlig;": "\u0133",
+ "imacr;": "\u012b",
+ "image;": "\u2111",
+ "imagline;": "\u2110",
+ "imagpart;": "\u2111",
+ "imath;": "\u0131",
+ "imof;": "\u22b7",
+ "imped;": "\u01b5",
+ "in;": "\u2208",
+ "incare;": "\u2105",
+ "infin;": "\u221e",
+ "infintie;": "\u29dd",
+ "inodot;": "\u0131",
+ "int;": "\u222b",
+ "intcal;": "\u22ba",
+ "integers;": "\u2124",
+ "intercal;": "\u22ba",
+ "intlarhk;": "\u2a17",
+ "intprod;": "\u2a3c",
+ "iocy;": "\u0451",
+ "iogon;": "\u012f",
+ "iopf;": "\U0001d55a",
+ "iota;": "\u03b9",
+ "iprod;": "\u2a3c",
+ "iquest": "\xbf",
+ "iquest;": "\xbf",
+ "iscr;": "\U0001d4be",
+ "isin;": "\u2208",
+ "isinE;": "\u22f9",
+ "isindot;": "\u22f5",
+ "isins;": "\u22f4",
+ "isinsv;": "\u22f3",
+ "isinv;": "\u2208",
+ "it;": "\u2062",
+ "itilde;": "\u0129",
+ "iukcy;": "\u0456",
+ "iuml": "\xef",
+ "iuml;": "\xef",
+ "jcirc;": "\u0135",
+ "jcy;": "\u0439",
+ "jfr;": "\U0001d527",
+ "jmath;": "\u0237",
+ "jopf;": "\U0001d55b",
+ "jscr;": "\U0001d4bf",
+ "jsercy;": "\u0458",
+ "jukcy;": "\u0454",
+ "kappa;": "\u03ba",
+ "kappav;": "\u03f0",
+ "kcedil;": "\u0137",
+ "kcy;": "\u043a",
+ "kfr;": "\U0001d528",
+ "kgreen;": "\u0138",
+ "khcy;": "\u0445",
+ "kjcy;": "\u045c",
+ "kopf;": "\U0001d55c",
+ "kscr;": "\U0001d4c0",
+ "lAarr;": "\u21da",
+ "lArr;": "\u21d0",
+ "lAtail;": "\u291b",
+ "lBarr;": "\u290e",
+ "lE;": "\u2266",
+ "lEg;": "\u2a8b",
+ "lHar;": "\u2962",
+ "lacute;": "\u013a",
+ "laemptyv;": "\u29b4",
+ "lagran;": "\u2112",
+ "lambda;": "\u03bb",
+ "lang;": "\u27e8",
+ "langd;": "\u2991",
+ "langle;": "\u27e8",
+ "lap;": "\u2a85",
+ "laquo": "\xab",
+ "laquo;": "\xab",
+ "larr;": "\u2190",
+ "larrb;": "\u21e4",
+ "larrbfs;": "\u291f",
+ "larrfs;": "\u291d",
+ "larrhk;": "\u21a9",
+ "larrlp;": "\u21ab",
+ "larrpl;": "\u2939",
+ "larrsim;": "\u2973",
+ "larrtl;": "\u21a2",
+ "lat;": "\u2aab",
+ "latail;": "\u2919",
+ "late;": "\u2aad",
+ "lates;": "\u2aad\ufe00",
+ "lbarr;": "\u290c",
+ "lbbrk;": "\u2772",
+ "lbrace;": "{",
+ "lbrack;": "[",
+ "lbrke;": "\u298b",
+ "lbrksld;": "\u298f",
+ "lbrkslu;": "\u298d",
+ "lcaron;": "\u013e",
+ "lcedil;": "\u013c",
+ "lceil;": "\u2308",
+ "lcub;": "{",
+ "lcy;": "\u043b",
+ "ldca;": "\u2936",
+ "ldquo;": "\u201c",
+ "ldquor;": "\u201e",
+ "ldrdhar;": "\u2967",
+ "ldrushar;": "\u294b",
+ "ldsh;": "\u21b2",
+ "le;": "\u2264",
+ "leftarrow;": "\u2190",
+ "leftarrowtail;": "\u21a2",
+ "leftharpoondown;": "\u21bd",
+ "leftharpoonup;": "\u21bc",
+ "leftleftarrows;": "\u21c7",
+ "leftrightarrow;": "\u2194",
+ "leftrightarrows;": "\u21c6",
+ "leftrightharpoons;": "\u21cb",
+ "leftrightsquigarrow;": "\u21ad",
+ "leftthreetimes;": "\u22cb",
+ "leg;": "\u22da",
+ "leq;": "\u2264",
+ "leqq;": "\u2266",
+ "leqslant;": "\u2a7d",
+ "les;": "\u2a7d",
+ "lescc;": "\u2aa8",
+ "lesdot;": "\u2a7f",
+ "lesdoto;": "\u2a81",
+ "lesdotor;": "\u2a83",
+ "lesg;": "\u22da\ufe00",
+ "lesges;": "\u2a93",
+ "lessapprox;": "\u2a85",
+ "lessdot;": "\u22d6",
+ "lesseqgtr;": "\u22da",
+ "lesseqqgtr;": "\u2a8b",
+ "lessgtr;": "\u2276",
+ "lesssim;": "\u2272",
+ "lfisht;": "\u297c",
+ "lfloor;": "\u230a",
+ "lfr;": "\U0001d529",
+ "lg;": "\u2276",
+ "lgE;": "\u2a91",
+ "lhard;": "\u21bd",
+ "lharu;": "\u21bc",
+ "lharul;": "\u296a",
+ "lhblk;": "\u2584",
+ "ljcy;": "\u0459",
+ "ll;": "\u226a",
+ "llarr;": "\u21c7",
+ "llcorner;": "\u231e",
+ "llhard;": "\u296b",
+ "lltri;": "\u25fa",
+ "lmidot;": "\u0140",
+ "lmoust;": "\u23b0",
+ "lmoustache;": "\u23b0",
+ "lnE;": "\u2268",
+ "lnap;": "\u2a89",
+ "lnapprox;": "\u2a89",
+ "lne;": "\u2a87",
+ "lneq;": "\u2a87",
+ "lneqq;": "\u2268",
+ "lnsim;": "\u22e6",
+ "loang;": "\u27ec",
+ "loarr;": "\u21fd",
+ "lobrk;": "\u27e6",
+ "longleftarrow;": "\u27f5",
+ "longleftrightarrow;": "\u27f7",
+ "longmapsto;": "\u27fc",
+ "longrightarrow;": "\u27f6",
+ "looparrowleft;": "\u21ab",
+ "looparrowright;": "\u21ac",
+ "lopar;": "\u2985",
+ "lopf;": "\U0001d55d",
+ "loplus;": "\u2a2d",
+ "lotimes;": "\u2a34",
+ "lowast;": "\u2217",
+ "lowbar;": "_",
+ "loz;": "\u25ca",
+ "lozenge;": "\u25ca",
+ "lozf;": "\u29eb",
+ "lpar;": "(",
+ "lparlt;": "\u2993",
+ "lrarr;": "\u21c6",
+ "lrcorner;": "\u231f",
+ "lrhar;": "\u21cb",
+ "lrhard;": "\u296d",
+ "lrm;": "\u200e",
+ "lrtri;": "\u22bf",
+ "lsaquo;": "\u2039",
+ "lscr;": "\U0001d4c1",
+ "lsh;": "\u21b0",
+ "lsim;": "\u2272",
+ "lsime;": "\u2a8d",
+ "lsimg;": "\u2a8f",
+ "lsqb;": "[",
+ "lsquo;": "\u2018",
+ "lsquor;": "\u201a",
+ "lstrok;": "\u0142",
+ "lt": "<",
+ "lt;": "<",
+ "ltcc;": "\u2aa6",
+ "ltcir;": "\u2a79",
+ "ltdot;": "\u22d6",
+ "lthree;": "\u22cb",
+ "ltimes;": "\u22c9",
+ "ltlarr;": "\u2976",
+ "ltquest;": "\u2a7b",
+ "ltrPar;": "\u2996",
+ "ltri;": "\u25c3",
+ "ltrie;": "\u22b4",
+ "ltrif;": "\u25c2",
+ "lurdshar;": "\u294a",
+ "luruhar;": "\u2966",
+ "lvertneqq;": "\u2268\ufe00",
+ "lvnE;": "\u2268\ufe00",
+ "mDDot;": "\u223a",
+ "macr": "\xaf",
+ "macr;": "\xaf",
+ "male;": "\u2642",
+ "malt;": "\u2720",
+ "maltese;": "\u2720",
+ "map;": "\u21a6",
+ "mapsto;": "\u21a6",
+ "mapstodown;": "\u21a7",
+ "mapstoleft;": "\u21a4",
+ "mapstoup;": "\u21a5",
+ "marker;": "\u25ae",
+ "mcomma;": "\u2a29",
+ "mcy;": "\u043c",
+ "mdash;": "\u2014",
+ "measuredangle;": "\u2221",
+ "mfr;": "\U0001d52a",
+ "mho;": "\u2127",
+ "micro": "\xb5",
+ "micro;": "\xb5",
+ "mid;": "\u2223",
+ "midast;": "*",
+ "midcir;": "\u2af0",
+ "middot": "\xb7",
+ "middot;": "\xb7",
+ "minus;": "\u2212",
+ "minusb;": "\u229f",
+ "minusd;": "\u2238",
+ "minusdu;": "\u2a2a",
+ "mlcp;": "\u2adb",
+ "mldr;": "\u2026",
+ "mnplus;": "\u2213",
+ "models;": "\u22a7",
+ "mopf;": "\U0001d55e",
+ "mp;": "\u2213",
+ "mscr;": "\U0001d4c2",
+ "mstpos;": "\u223e",
+ "mu;": "\u03bc",
+ "multimap;": "\u22b8",
+ "mumap;": "\u22b8",
+ "nGg;": "\u22d9\u0338",
+ "nGt;": "\u226b\u20d2",
+ "nGtv;": "\u226b\u0338",
+ "nLeftarrow;": "\u21cd",
+ "nLeftrightarrow;": "\u21ce",
+ "nLl;": "\u22d8\u0338",
+ "nLt;": "\u226a\u20d2",
+ "nLtv;": "\u226a\u0338",
+ "nRightarrow;": "\u21cf",
+ "nVDash;": "\u22af",
+ "nVdash;": "\u22ae",
+ "nabla;": "\u2207",
+ "nacute;": "\u0144",
+ "nang;": "\u2220\u20d2",
+ "nap;": "\u2249",
+ "napE;": "\u2a70\u0338",
+ "napid;": "\u224b\u0338",
+ "napos;": "\u0149",
+ "napprox;": "\u2249",
+ "natur;": "\u266e",
+ "natural;": "\u266e",
+ "naturals;": "\u2115",
+ "nbsp": "\xa0",
+ "nbsp;": "\xa0",
+ "nbump;": "\u224e\u0338",
+ "nbumpe;": "\u224f\u0338",
+ "ncap;": "\u2a43",
+ "ncaron;": "\u0148",
+ "ncedil;": "\u0146",
+ "ncong;": "\u2247",
+ "ncongdot;": "\u2a6d\u0338",
+ "ncup;": "\u2a42",
+ "ncy;": "\u043d",
+ "ndash;": "\u2013",
+ "ne;": "\u2260",
+ "neArr;": "\u21d7",
+ "nearhk;": "\u2924",
+ "nearr;": "\u2197",
+ "nearrow;": "\u2197",
+ "nedot;": "\u2250\u0338",
+ "nequiv;": "\u2262",
+ "nesear;": "\u2928",
+ "nesim;": "\u2242\u0338",
+ "nexist;": "\u2204",
+ "nexists;": "\u2204",
+ "nfr;": "\U0001d52b",
+ "ngE;": "\u2267\u0338",
+ "nge;": "\u2271",
+ "ngeq;": "\u2271",
+ "ngeqq;": "\u2267\u0338",
+ "ngeqslant;": "\u2a7e\u0338",
+ "nges;": "\u2a7e\u0338",
+ "ngsim;": "\u2275",
+ "ngt;": "\u226f",
+ "ngtr;": "\u226f",
+ "nhArr;": "\u21ce",
+ "nharr;": "\u21ae",
+ "nhpar;": "\u2af2",
+ "ni;": "\u220b",
+ "nis;": "\u22fc",
+ "nisd;": "\u22fa",
+ "niv;": "\u220b",
+ "njcy;": "\u045a",
+ "nlArr;": "\u21cd",
+ "nlE;": "\u2266\u0338",
+ "nlarr;": "\u219a",
+ "nldr;": "\u2025",
+ "nle;": "\u2270",
+ "nleftarrow;": "\u219a",
+ "nleftrightarrow;": "\u21ae",
+ "nleq;": "\u2270",
+ "nleqq;": "\u2266\u0338",
+ "nleqslant;": "\u2a7d\u0338",
+ "nles;": "\u2a7d\u0338",
+ "nless;": "\u226e",
+ "nlsim;": "\u2274",
+ "nlt;": "\u226e",
+ "nltri;": "\u22ea",
+ "nltrie;": "\u22ec",
+ "nmid;": "\u2224",
+ "nopf;": "\U0001d55f",
+ "not": "\xac",
+ "not;": "\xac",
+ "notin;": "\u2209",
+ "notinE;": "\u22f9\u0338",
+ "notindot;": "\u22f5\u0338",
+ "notinva;": "\u2209",
+ "notinvb;": "\u22f7",
+ "notinvc;": "\u22f6",
+ "notni;": "\u220c",
+ "notniva;": "\u220c",
+ "notnivb;": "\u22fe",
+ "notnivc;": "\u22fd",
+ "npar;": "\u2226",
+ "nparallel;": "\u2226",
+ "nparsl;": "\u2afd\u20e5",
+ "npart;": "\u2202\u0338",
+ "npolint;": "\u2a14",
+ "npr;": "\u2280",
+ "nprcue;": "\u22e0",
+ "npre;": "\u2aaf\u0338",
+ "nprec;": "\u2280",
+ "npreceq;": "\u2aaf\u0338",
+ "nrArr;": "\u21cf",
+ "nrarr;": "\u219b",
+ "nrarrc;": "\u2933\u0338",
+ "nrarrw;": "\u219d\u0338",
+ "nrightarrow;": "\u219b",
+ "nrtri;": "\u22eb",
+ "nrtrie;": "\u22ed",
+ "nsc;": "\u2281",
+ "nsccue;": "\u22e1",
+ "nsce;": "\u2ab0\u0338",
+ "nscr;": "\U0001d4c3",
+ "nshortmid;": "\u2224",
+ "nshortparallel;": "\u2226",
+ "nsim;": "\u2241",
+ "nsime;": "\u2244",
+ "nsimeq;": "\u2244",
+ "nsmid;": "\u2224",
+ "nspar;": "\u2226",
+ "nsqsube;": "\u22e2",
+ "nsqsupe;": "\u22e3",
+ "nsub;": "\u2284",
+ "nsubE;": "\u2ac5\u0338",
+ "nsube;": "\u2288",
+ "nsubset;": "\u2282\u20d2",
+ "nsubseteq;": "\u2288",
+ "nsubseteqq;": "\u2ac5\u0338",
+ "nsucc;": "\u2281",
+ "nsucceq;": "\u2ab0\u0338",
+ "nsup;": "\u2285",
+ "nsupE;": "\u2ac6\u0338",
+ "nsupe;": "\u2289",
+ "nsupset;": "\u2283\u20d2",
+ "nsupseteq;": "\u2289",
+ "nsupseteqq;": "\u2ac6\u0338",
+ "ntgl;": "\u2279",
+ "ntilde": "\xf1",
+ "ntilde;": "\xf1",
+ "ntlg;": "\u2278",
+ "ntriangleleft;": "\u22ea",
+ "ntrianglelefteq;": "\u22ec",
+ "ntriangleright;": "\u22eb",
+ "ntrianglerighteq;": "\u22ed",
+ "nu;": "\u03bd",
+ "num;": "#",
+ "numero;": "\u2116",
+ "numsp;": "\u2007",
+ "nvDash;": "\u22ad",
+ "nvHarr;": "\u2904",
+ "nvap;": "\u224d\u20d2",
+ "nvdash;": "\u22ac",
+ "nvge;": "\u2265\u20d2",
+ "nvgt;": ">\u20d2",
+ "nvinfin;": "\u29de",
+ "nvlArr;": "\u2902",
+ "nvle;": "\u2264\u20d2",
+ "nvlt;": "<\u20d2",
+ "nvltrie;": "\u22b4\u20d2",
+ "nvrArr;": "\u2903",
+ "nvrtrie;": "\u22b5\u20d2",
+ "nvsim;": "\u223c\u20d2",
+ "nwArr;": "\u21d6",
+ "nwarhk;": "\u2923",
+ "nwarr;": "\u2196",
+ "nwarrow;": "\u2196",
+ "nwnear;": "\u2927",
+ "oS;": "\u24c8",
+ "oacute": "\xf3",
+ "oacute;": "\xf3",
+ "oast;": "\u229b",
+ "ocir;": "\u229a",
+ "ocirc": "\xf4",
+ "ocirc;": "\xf4",
+ "ocy;": "\u043e",
+ "odash;": "\u229d",
+ "odblac;": "\u0151",
+ "odiv;": "\u2a38",
+ "odot;": "\u2299",
+ "odsold;": "\u29bc",
+ "oelig;": "\u0153",
+ "ofcir;": "\u29bf",
+ "ofr;": "\U0001d52c",
+ "ogon;": "\u02db",
+ "ograve": "\xf2",
+ "ograve;": "\xf2",
+ "ogt;": "\u29c1",
+ "ohbar;": "\u29b5",
+ "ohm;": "\u03a9",
+ "oint;": "\u222e",
+ "olarr;": "\u21ba",
+ "olcir;": "\u29be",
+ "olcross;": "\u29bb",
+ "oline;": "\u203e",
+ "olt;": "\u29c0",
+ "omacr;": "\u014d",
+ "omega;": "\u03c9",
+ "omicron;": "\u03bf",
+ "omid;": "\u29b6",
+ "ominus;": "\u2296",
+ "oopf;": "\U0001d560",
+ "opar;": "\u29b7",
+ "operp;": "\u29b9",
+ "oplus;": "\u2295",
+ "or;": "\u2228",
+ "orarr;": "\u21bb",
+ "ord;": "\u2a5d",
+ "order;": "\u2134",
+ "orderof;": "\u2134",
+ "ordf": "\xaa",
+ "ordf;": "\xaa",
+ "ordm": "\xba",
+ "ordm;": "\xba",
+ "origof;": "\u22b6",
+ "oror;": "\u2a56",
+ "orslope;": "\u2a57",
+ "orv;": "\u2a5b",
+ "oscr;": "\u2134",
+ "oslash": "\xf8",
+ "oslash;": "\xf8",
+ "osol;": "\u2298",
+ "otilde": "\xf5",
+ "otilde;": "\xf5",
+ "otimes;": "\u2297",
+ "otimesas;": "\u2a36",
+ "ouml": "\xf6",
+ "ouml;": "\xf6",
+ "ovbar;": "\u233d",
+ "par;": "\u2225",
+ "para": "\xb6",
+ "para;": "\xb6",
+ "parallel;": "\u2225",
+ "parsim;": "\u2af3",
+ "parsl;": "\u2afd",
+ "part;": "\u2202",
+ "pcy;": "\u043f",
+ "percnt;": "%",
+ "period;": ".",
+ "permil;": "\u2030",
+ "perp;": "\u22a5",
+ "pertenk;": "\u2031",
+ "pfr;": "\U0001d52d",
+ "phi;": "\u03c6",
+ "phiv;": "\u03d5",
+ "phmmat;": "\u2133",
+ "phone;": "\u260e",
+ "pi;": "\u03c0",
+ "pitchfork;": "\u22d4",
+ "piv;": "\u03d6",
+ "planck;": "\u210f",
+ "planckh;": "\u210e",
+ "plankv;": "\u210f",
+ "plus;": "+",
+ "plusacir;": "\u2a23",
+ "plusb;": "\u229e",
+ "pluscir;": "\u2a22",
+ "plusdo;": "\u2214",
+ "plusdu;": "\u2a25",
+ "pluse;": "\u2a72",
+ "plusmn": "\xb1",
+ "plusmn;": "\xb1",
+ "plussim;": "\u2a26",
+ "plustwo;": "\u2a27",
+ "pm;": "\xb1",
+ "pointint;": "\u2a15",
+ "popf;": "\U0001d561",
+ "pound": "\xa3",
+ "pound;": "\xa3",
+ "pr;": "\u227a",
+ "prE;": "\u2ab3",
+ "prap;": "\u2ab7",
+ "prcue;": "\u227c",
+ "pre;": "\u2aaf",
+ "prec;": "\u227a",
+ "precapprox;": "\u2ab7",
+ "preccurlyeq;": "\u227c",
+ "preceq;": "\u2aaf",
+ "precnapprox;": "\u2ab9",
+ "precneqq;": "\u2ab5",
+ "precnsim;": "\u22e8",
+ "precsim;": "\u227e",
+ "prime;": "\u2032",
+ "primes;": "\u2119",
+ "prnE;": "\u2ab5",
+ "prnap;": "\u2ab9",
+ "prnsim;": "\u22e8",
+ "prod;": "\u220f",
+ "profalar;": "\u232e",
+ "profline;": "\u2312",
+ "profsurf;": "\u2313",
+ "prop;": "\u221d",
+ "propto;": "\u221d",
+ "prsim;": "\u227e",
+ "prurel;": "\u22b0",
+ "pscr;": "\U0001d4c5",
+ "psi;": "\u03c8",
+ "puncsp;": "\u2008",
+ "qfr;": "\U0001d52e",
+ "qint;": "\u2a0c",
+ "qopf;": "\U0001d562",
+ "qprime;": "\u2057",
+ "qscr;": "\U0001d4c6",
+ "quaternions;": "\u210d",
+ "quatint;": "\u2a16",
+ "quest;": "?",
+ "questeq;": "\u225f",
+ "quot": "\"",
+ "quot;": "\"",
+ "rAarr;": "\u21db",
+ "rArr;": "\u21d2",
+ "rAtail;": "\u291c",
+ "rBarr;": "\u290f",
+ "rHar;": "\u2964",
+ "race;": "\u223d\u0331",
+ "racute;": "\u0155",
+ "radic;": "\u221a",
+ "raemptyv;": "\u29b3",
+ "rang;": "\u27e9",
+ "rangd;": "\u2992",
+ "range;": "\u29a5",
+ "rangle;": "\u27e9",
+ "raquo": "\xbb",
+ "raquo;": "\xbb",
+ "rarr;": "\u2192",
+ "rarrap;": "\u2975",
+ "rarrb;": "\u21e5",
+ "rarrbfs;": "\u2920",
+ "rarrc;": "\u2933",
+ "rarrfs;": "\u291e",
+ "rarrhk;": "\u21aa",
+ "rarrlp;": "\u21ac",
+ "rarrpl;": "\u2945",
+ "rarrsim;": "\u2974",
+ "rarrtl;": "\u21a3",
+ "rarrw;": "\u219d",
+ "ratail;": "\u291a",
+ "ratio;": "\u2236",
+ "rationals;": "\u211a",
+ "rbarr;": "\u290d",
+ "rbbrk;": "\u2773",
+ "rbrace;": "}",
+ "rbrack;": "]",
+ "rbrke;": "\u298c",
+ "rbrksld;": "\u298e",
+ "rbrkslu;": "\u2990",
+ "rcaron;": "\u0159",
+ "rcedil;": "\u0157",
+ "rceil;": "\u2309",
+ "rcub;": "}",
+ "rcy;": "\u0440",
+ "rdca;": "\u2937",
+ "rdldhar;": "\u2969",
+ "rdquo;": "\u201d",
+ "rdquor;": "\u201d",
+ "rdsh;": "\u21b3",
+ "real;": "\u211c",
+ "realine;": "\u211b",
+ "realpart;": "\u211c",
+ "reals;": "\u211d",
+ "rect;": "\u25ad",
+ "reg": "\xae",
+ "reg;": "\xae",
+ "rfisht;": "\u297d",
+ "rfloor;": "\u230b",
+ "rfr;": "\U0001d52f",
+ "rhard;": "\u21c1",
+ "rharu;": "\u21c0",
+ "rharul;": "\u296c",
+ "rho;": "\u03c1",
+ "rhov;": "\u03f1",
+ "rightarrow;": "\u2192",
+ "rightarrowtail;": "\u21a3",
+ "rightharpoondown;": "\u21c1",
+ "rightharpoonup;": "\u21c0",
+ "rightleftarrows;": "\u21c4",
+ "rightleftharpoons;": "\u21cc",
+ "rightrightarrows;": "\u21c9",
+ "rightsquigarrow;": "\u219d",
+ "rightthreetimes;": "\u22cc",
+ "ring;": "\u02da",
+ "risingdotseq;": "\u2253",
+ "rlarr;": "\u21c4",
+ "rlhar;": "\u21cc",
+ "rlm;": "\u200f",
+ "rmoust;": "\u23b1",
+ "rmoustache;": "\u23b1",
+ "rnmid;": "\u2aee",
+ "roang;": "\u27ed",
+ "roarr;": "\u21fe",
+ "robrk;": "\u27e7",
+ "ropar;": "\u2986",
+ "ropf;": "\U0001d563",
+ "roplus;": "\u2a2e",
+ "rotimes;": "\u2a35",
+ "rpar;": ")",
+ "rpargt;": "\u2994",
+ "rppolint;": "\u2a12",
+ "rrarr;": "\u21c9",
+ "rsaquo;": "\u203a",
+ "rscr;": "\U0001d4c7",
+ "rsh;": "\u21b1",
+ "rsqb;": "]",
+ "rsquo;": "\u2019",
+ "rsquor;": "\u2019",
+ "rthree;": "\u22cc",
+ "rtimes;": "\u22ca",
+ "rtri;": "\u25b9",
+ "rtrie;": "\u22b5",
+ "rtrif;": "\u25b8",
+ "rtriltri;": "\u29ce",
+ "ruluhar;": "\u2968",
+ "rx;": "\u211e",
+ "sacute;": "\u015b",
+ "sbquo;": "\u201a",
+ "sc;": "\u227b",
+ "scE;": "\u2ab4",
+ "scap;": "\u2ab8",
+ "scaron;": "\u0161",
+ "sccue;": "\u227d",
+ "sce;": "\u2ab0",
+ "scedil;": "\u015f",
+ "scirc;": "\u015d",
+ "scnE;": "\u2ab6",
+ "scnap;": "\u2aba",
+ "scnsim;": "\u22e9",
+ "scpolint;": "\u2a13",
+ "scsim;": "\u227f",
+ "scy;": "\u0441",
+ "sdot;": "\u22c5",
+ "sdotb;": "\u22a1",
+ "sdote;": "\u2a66",
+ "seArr;": "\u21d8",
+ "searhk;": "\u2925",
+ "searr;": "\u2198",
+ "searrow;": "\u2198",
+ "sect": "\xa7",
+ "sect;": "\xa7",
+ "semi;": ";",
+ "seswar;": "\u2929",
+ "setminus;": "\u2216",
+ "setmn;": "\u2216",
+ "sext;": "\u2736",
+ "sfr;": "\U0001d530",
+ "sfrown;": "\u2322",
+ "sharp;": "\u266f",
+ "shchcy;": "\u0449",
+ "shcy;": "\u0448",
+ "shortmid;": "\u2223",
+ "shortparallel;": "\u2225",
+ "shy": "\xad",
+ "shy;": "\xad",
+ "sigma;": "\u03c3",
+ "sigmaf;": "\u03c2",
+ "sigmav;": "\u03c2",
+ "sim;": "\u223c",
+ "simdot;": "\u2a6a",
+ "sime;": "\u2243",
+ "simeq;": "\u2243",
+ "simg;": "\u2a9e",
+ "simgE;": "\u2aa0",
+ "siml;": "\u2a9d",
+ "simlE;": "\u2a9f",
+ "simne;": "\u2246",
+ "simplus;": "\u2a24",
+ "simrarr;": "\u2972",
+ "slarr;": "\u2190",
+ "smallsetminus;": "\u2216",
+ "smashp;": "\u2a33",
+ "smeparsl;": "\u29e4",
+ "smid;": "\u2223",
+ "smile;": "\u2323",
+ "smt;": "\u2aaa",
+ "smte;": "\u2aac",
+ "smtes;": "\u2aac\ufe00",
+ "softcy;": "\u044c",
+ "sol;": "/",
+ "solb;": "\u29c4",
+ "solbar;": "\u233f",
+ "sopf;": "\U0001d564",
+ "spades;": "\u2660",
+ "spadesuit;": "\u2660",
+ "spar;": "\u2225",
+ "sqcap;": "\u2293",
+ "sqcaps;": "\u2293\ufe00",
+ "sqcup;": "\u2294",
+ "sqcups;": "\u2294\ufe00",
+ "sqsub;": "\u228f",
+ "sqsube;": "\u2291",
+ "sqsubset;": "\u228f",
+ "sqsubseteq;": "\u2291",
+ "sqsup;": "\u2290",
+ "sqsupe;": "\u2292",
+ "sqsupset;": "\u2290",
+ "sqsupseteq;": "\u2292",
+ "squ;": "\u25a1",
+ "square;": "\u25a1",
+ "squarf;": "\u25aa",
+ "squf;": "\u25aa",
+ "srarr;": "\u2192",
+ "sscr;": "\U0001d4c8",
+ "ssetmn;": "\u2216",
+ "ssmile;": "\u2323",
+ "sstarf;": "\u22c6",
+ "star;": "\u2606",
+ "starf;": "\u2605",
+ "straightepsilon;": "\u03f5",
+ "straightphi;": "\u03d5",
+ "strns;": "\xaf",
+ "sub;": "\u2282",
+ "subE;": "\u2ac5",
+ "subdot;": "\u2abd",
+ "sube;": "\u2286",
+ "subedot;": "\u2ac3",
+ "submult;": "\u2ac1",
+ "subnE;": "\u2acb",
+ "subne;": "\u228a",
+ "subplus;": "\u2abf",
+ "subrarr;": "\u2979",
+ "subset;": "\u2282",
+ "subseteq;": "\u2286",
+ "subseteqq;": "\u2ac5",
+ "subsetneq;": "\u228a",
+ "subsetneqq;": "\u2acb",
+ "subsim;": "\u2ac7",
+ "subsub;": "\u2ad5",
+ "subsup;": "\u2ad3",
+ "succ;": "\u227b",
+ "succapprox;": "\u2ab8",
+ "succcurlyeq;": "\u227d",
+ "succeq;": "\u2ab0",
+ "succnapprox;": "\u2aba",
+ "succneqq;": "\u2ab6",
+ "succnsim;": "\u22e9",
+ "succsim;": "\u227f",
+ "sum;": "\u2211",
+ "sung;": "\u266a",
+ "sup1": "\xb9",
+ "sup1;": "\xb9",
+ "sup2": "\xb2",
+ "sup2;": "\xb2",
+ "sup3": "\xb3",
+ "sup3;": "\xb3",
+ "sup;": "\u2283",
+ "supE;": "\u2ac6",
+ "supdot;": "\u2abe",
+ "supdsub;": "\u2ad8",
+ "supe;": "\u2287",
+ "supedot;": "\u2ac4",
+ "suphsol;": "\u27c9",
+ "suphsub;": "\u2ad7",
+ "suplarr;": "\u297b",
+ "supmult;": "\u2ac2",
+ "supnE;": "\u2acc",
+ "supne;": "\u228b",
+ "supplus;": "\u2ac0",
+ "supset;": "\u2283",
+ "supseteq;": "\u2287",
+ "supseteqq;": "\u2ac6",
+ "supsetneq;": "\u228b",
+ "supsetneqq;": "\u2acc",
+ "supsim;": "\u2ac8",
+ "supsub;": "\u2ad4",
+ "supsup;": "\u2ad6",
+ "swArr;": "\u21d9",
+ "swarhk;": "\u2926",
+ "swarr;": "\u2199",
+ "swarrow;": "\u2199",
+ "swnwar;": "\u292a",
+ "szlig": "\xdf",
+ "szlig;": "\xdf",
+ "target;": "\u2316",
+ "tau;": "\u03c4",
+ "tbrk;": "\u23b4",
+ "tcaron;": "\u0165",
+ "tcedil;": "\u0163",
+ "tcy;": "\u0442",
+ "tdot;": "\u20db",
+ "telrec;": "\u2315",
+ "tfr;": "\U0001d531",
+ "there4;": "\u2234",
+ "therefore;": "\u2234",
+ "theta;": "\u03b8",
+ "thetasym;": "\u03d1",
+ "thetav;": "\u03d1",
+ "thickapprox;": "\u2248",
+ "thicksim;": "\u223c",
+ "thinsp;": "\u2009",
+ "thkap;": "\u2248",
+ "thksim;": "\u223c",
+ "thorn": "\xfe",
+ "thorn;": "\xfe",
+ "tilde;": "\u02dc",
+ "times": "\xd7",
+ "times;": "\xd7",
+ "timesb;": "\u22a0",
+ "timesbar;": "\u2a31",
+ "timesd;": "\u2a30",
+ "tint;": "\u222d",
+ "toea;": "\u2928",
+ "top;": "\u22a4",
+ "topbot;": "\u2336",
+ "topcir;": "\u2af1",
+ "topf;": "\U0001d565",
+ "topfork;": "\u2ada",
+ "tosa;": "\u2929",
+ "tprime;": "\u2034",
+ "trade;": "\u2122",
+ "triangle;": "\u25b5",
+ "triangledown;": "\u25bf",
+ "triangleleft;": "\u25c3",
+ "trianglelefteq;": "\u22b4",
+ "triangleq;": "\u225c",
+ "triangleright;": "\u25b9",
+ "trianglerighteq;": "\u22b5",
+ "tridot;": "\u25ec",
+ "trie;": "\u225c",
+ "triminus;": "\u2a3a",
+ "triplus;": "\u2a39",
+ "trisb;": "\u29cd",
+ "tritime;": "\u2a3b",
+ "trpezium;": "\u23e2",
+ "tscr;": "\U0001d4c9",
+ "tscy;": "\u0446",
+ "tshcy;": "\u045b",
+ "tstrok;": "\u0167",
+ "twixt;": "\u226c",
+ "twoheadleftarrow;": "\u219e",
+ "twoheadrightarrow;": "\u21a0",
+ "uArr;": "\u21d1",
+ "uHar;": "\u2963",
+ "uacute": "\xfa",
+ "uacute;": "\xfa",
+ "uarr;": "\u2191",
+ "ubrcy;": "\u045e",
+ "ubreve;": "\u016d",
+ "ucirc": "\xfb",
+ "ucirc;": "\xfb",
+ "ucy;": "\u0443",
+ "udarr;": "\u21c5",
+ "udblac;": "\u0171",
+ "udhar;": "\u296e",
+ "ufisht;": "\u297e",
+ "ufr;": "\U0001d532",
+ "ugrave": "\xf9",
+ "ugrave;": "\xf9",
+ "uharl;": "\u21bf",
+ "uharr;": "\u21be",
+ "uhblk;": "\u2580",
+ "ulcorn;": "\u231c",
+ "ulcorner;": "\u231c",
+ "ulcrop;": "\u230f",
+ "ultri;": "\u25f8",
+ "umacr;": "\u016b",
+ "uml": "\xa8",
+ "uml;": "\xa8",
+ "uogon;": "\u0173",
+ "uopf;": "\U0001d566",
+ "uparrow;": "\u2191",
+ "updownarrow;": "\u2195",
+ "upharpoonleft;": "\u21bf",
+ "upharpoonright;": "\u21be",
+ "uplus;": "\u228e",
+ "upsi;": "\u03c5",
+ "upsih;": "\u03d2",
+ "upsilon;": "\u03c5",
+ "upuparrows;": "\u21c8",
+ "urcorn;": "\u231d",
+ "urcorner;": "\u231d",
+ "urcrop;": "\u230e",
+ "uring;": "\u016f",
+ "urtri;": "\u25f9",
+ "uscr;": "\U0001d4ca",
+ "utdot;": "\u22f0",
+ "utilde;": "\u0169",
+ "utri;": "\u25b5",
+ "utrif;": "\u25b4",
+ "uuarr;": "\u21c8",
+ "uuml": "\xfc",
+ "uuml;": "\xfc",
+ "uwangle;": "\u29a7",
+ "vArr;": "\u21d5",
+ "vBar;": "\u2ae8",
+ "vBarv;": "\u2ae9",
+ "vDash;": "\u22a8",
+ "vangrt;": "\u299c",
+ "varepsilon;": "\u03f5",
+ "varkappa;": "\u03f0",
+ "varnothing;": "\u2205",
+ "varphi;": "\u03d5",
+ "varpi;": "\u03d6",
+ "varpropto;": "\u221d",
+ "varr;": "\u2195",
+ "varrho;": "\u03f1",
+ "varsigma;": "\u03c2",
+ "varsubsetneq;": "\u228a\ufe00",
+ "varsubsetneqq;": "\u2acb\ufe00",
+ "varsupsetneq;": "\u228b\ufe00",
+ "varsupsetneqq;": "\u2acc\ufe00",
+ "vartheta;": "\u03d1",
+ "vartriangleleft;": "\u22b2",
+ "vartriangleright;": "\u22b3",
+ "vcy;": "\u0432",
+ "vdash;": "\u22a2",
+ "vee;": "\u2228",
+ "veebar;": "\u22bb",
+ "veeeq;": "\u225a",
+ "vellip;": "\u22ee",
+ "verbar;": "|",
+ "vert;": "|",
+ "vfr;": "\U0001d533",
+ "vltri;": "\u22b2",
+ "vnsub;": "\u2282\u20d2",
+ "vnsup;": "\u2283\u20d2",
+ "vopf;": "\U0001d567",
+ "vprop;": "\u221d",
+ "vrtri;": "\u22b3",
+ "vscr;": "\U0001d4cb",
+ "vsubnE;": "\u2acb\ufe00",
+ "vsubne;": "\u228a\ufe00",
+ "vsupnE;": "\u2acc\ufe00",
+ "vsupne;": "\u228b\ufe00",
+ "vzigzag;": "\u299a",
+ "wcirc;": "\u0175",
+ "wedbar;": "\u2a5f",
+ "wedge;": "\u2227",
+ "wedgeq;": "\u2259",
+ "weierp;": "\u2118",
+ "wfr;": "\U0001d534",
+ "wopf;": "\U0001d568",
+ "wp;": "\u2118",
+ "wr;": "\u2240",
+ "wreath;": "\u2240",
+ "wscr;": "\U0001d4cc",
+ "xcap;": "\u22c2",
+ "xcirc;": "\u25ef",
+ "xcup;": "\u22c3",
+ "xdtri;": "\u25bd",
+ "xfr;": "\U0001d535",
+ "xhArr;": "\u27fa",
+ "xharr;": "\u27f7",
+ "xi;": "\u03be",
+ "xlArr;": "\u27f8",
+ "xlarr;": "\u27f5",
+ "xmap;": "\u27fc",
+ "xnis;": "\u22fb",
+ "xodot;": "\u2a00",
+ "xopf;": "\U0001d569",
+ "xoplus;": "\u2a01",
+ "xotime;": "\u2a02",
+ "xrArr;": "\u27f9",
+ "xrarr;": "\u27f6",
+ "xscr;": "\U0001d4cd",
+ "xsqcup;": "\u2a06",
+ "xuplus;": "\u2a04",
+ "xutri;": "\u25b3",
+ "xvee;": "\u22c1",
+ "xwedge;": "\u22c0",
+ "yacute": "\xfd",
+ "yacute;": "\xfd",
+ "yacy;": "\u044f",
+ "ycirc;": "\u0177",
+ "ycy;": "\u044b",
+ "yen": "\xa5",
+ "yen;": "\xa5",
+ "yfr;": "\U0001d536",
+ "yicy;": "\u0457",
+ "yopf;": "\U0001d56a",
+ "yscr;": "\U0001d4ce",
+ "yucy;": "\u044e",
+ "yuml": "\xff",
+ "yuml;": "\xff",
+ "zacute;": "\u017a",
+ "zcaron;": "\u017e",
+ "zcy;": "\u0437",
+ "zdot;": "\u017c",
+ "zeetrf;": "\u2128",
+ "zeta;": "\u03b6",
+ "zfr;": "\U0001d537",
+ "zhcy;": "\u0436",
+ "zigrarr;": "\u21dd",
+ "zopf;": "\U0001d56b",
+ "zscr;": "\U0001d4cf",
+ "zwj;": "\u200d",
+ "zwnj;": "\u200c",
}
replacementCharacters = {
- 0x0:u"\uFFFD",
- 0x0d:u"\u000D",
- 0x80:u"\u20AC",
- 0x81:u"\u0081",
- 0x81:u"\u0081",
- 0x82:u"\u201A",
- 0x83:u"\u0192",
- 0x84:u"\u201E",
- 0x85:u"\u2026",
- 0x86:u"\u2020",
- 0x87:u"\u2021",
- 0x88:u"\u02C6",
- 0x89:u"\u2030",
- 0x8A:u"\u0160",
- 0x8B:u"\u2039",
- 0x8C:u"\u0152",
- 0x8D:u"\u008D",
- 0x8E:u"\u017D",
- 0x8F:u"\u008F",
- 0x90:u"\u0090",
- 0x91:u"\u2018",
- 0x92:u"\u2019",
- 0x93:u"\u201C",
- 0x94:u"\u201D",
- 0x95:u"\u2022",
- 0x96:u"\u2013",
- 0x97:u"\u2014",
- 0x98:u"\u02DC",
- 0x99:u"\u2122",
- 0x9A:u"\u0161",
- 0x9B:u"\u203A",
- 0x9C:u"\u0153",
- 0x9D:u"\u009D",
- 0x9E:u"\u017E",
- 0x9F:u"\u0178",
+ 0x0: "\uFFFD",
+ 0x0d: "\u000D",
+ 0x80: "\u20AC",
+ 0x81: "\u0081",
+ 0x81: "\u0081",
+ 0x82: "\u201A",
+ 0x83: "\u0192",
+ 0x84: "\u201E",
+ 0x85: "\u2026",
+ 0x86: "\u2020",
+ 0x87: "\u2021",
+ 0x88: "\u02C6",
+ 0x89: "\u2030",
+ 0x8A: "\u0160",
+ 0x8B: "\u2039",
+ 0x8C: "\u0152",
+ 0x8D: "\u008D",
+ 0x8E: "\u017D",
+ 0x8F: "\u008F",
+ 0x90: "\u0090",
+ 0x91: "\u2018",
+ 0x92: "\u2019",
+ 0x93: "\u201C",
+ 0x94: "\u201D",
+ 0x95: "\u2022",
+ 0x96: "\u2013",
+ 0x97: "\u2014",
+ 0x98: "\u02DC",
+ 0x99: "\u2122",
+ 0x9A: "\u0161",
+ 0x9B: "\u203A",
+ 0x9C: "\u0153",
+ 0x9D: "\u009D",
+ 0x9E: "\u017E",
+ 0x9F: "\u0178",
}
encodings = {
@@ -3061,25 +3078,27 @@ encodings = {
'x-x-big5': 'big5'}
tokenTypes = {
- "Doctype":0,
- "Characters":1,
- "SpaceCharacters":2,
- "StartTag":3,
- "EndTag":4,
- "EmptyTag":5,
- "Comment":6,
- "ParseError":7
+ "Doctype": 0,
+ "Characters": 1,
+ "SpaceCharacters": 2,
+ "StartTag": 3,
+ "EndTag": 4,
+ "EmptyTag": 5,
+ "Comment": 6,
+ "ParseError": 7
}
-tagTokenTypes = frozenset((tokenTypes["StartTag"], tokenTypes["EndTag"],
+tagTokenTypes = frozenset((tokenTypes["StartTag"], tokenTypes["EndTag"],
tokenTypes["EmptyTag"]))
-prefixes = dict([(v,k) for k,v in namespaces.iteritems()])
+prefixes = dict([(v, k) for k, v in namespaces.items()])
prefixes["http://www.w3.org/1998/Math/MathML"] = "math"
+
class DataLossWarning(UserWarning):
pass
+
class ReparseException(Exception):
pass
diff --git a/lib/html5lib/filters/_base.py b/lib/html5lib/filters/_base.py
index bca94ada..c7dbaed0 100644
--- a/lib/html5lib/filters/_base.py
+++ b/lib/html5lib/filters/_base.py
@@ -1,3 +1,5 @@
+from __future__ import absolute_import, division, unicode_literals
+
class Filter(object):
def __init__(self, source):
diff --git a/lib/html5lib/filters/alphabeticalattributes.py b/lib/html5lib/filters/alphabeticalattributes.py
new file mode 100644
index 00000000..fed6996c
--- /dev/null
+++ b/lib/html5lib/filters/alphabeticalattributes.py
@@ -0,0 +1,20 @@
+from __future__ import absolute_import, division, unicode_literals
+
+from . import _base
+
+try:
+ from collections import OrderedDict
+except ImportError:
+ from ordereddict import OrderedDict
+
+
+class Filter(_base.Filter):
+ def __iter__(self):
+ for token in _base.Filter.__iter__(self):
+ if token["type"] in ("StartTag", "EmptyTag"):
+ attrs = OrderedDict()
+ for name, value in sorted(token["data"].items(),
+ key=lambda x: x[0]):
+ attrs[name] = value
+ token["data"] = attrs
+ yield token
diff --git a/lib/html5lib/filters/formfiller.py b/lib/html5lib/filters/formfiller.py
deleted file mode 100644
index 94001714..00000000
--- a/lib/html5lib/filters/formfiller.py
+++ /dev/null
@@ -1,127 +0,0 @@
-#
-# The goal is to finally have a form filler where you pass data for
-# each form, using the algorithm for "Seeding a form with initial values"
-# See http://www.whatwg.org/specs/web-forms/current-work/#seeding
-#
-
-import _base
-
-from html5lib.constants import spaceCharacters
-spaceCharacters = u"".join(spaceCharacters)
-
-class SimpleFilter(_base.Filter):
- def __init__(self, source, fieldStorage):
- _base.Filter.__init__(self, source)
- self.fieldStorage = fieldStorage
-
- def __iter__(self):
- field_indices = {}
- state = None
- field_name = None
- for token in _base.Filter.__iter__(self):
- type = token["type"]
- if type in ("StartTag", "EmptyTag"):
- name = token["name"].lower()
- if name == "input":
- field_name = None
- field_type = None
- input_value_index = -1
- input_checked_index = -1
- for i,(n,v) in enumerate(token["data"]):
- n = n.lower()
- if n == u"name":
- field_name = v.strip(spaceCharacters)
- elif n == u"type":
- field_type = v.strip(spaceCharacters)
- elif n == u"checked":
- input_checked_index = i
- elif n == u"value":
- input_value_index = i
-
- value_list = self.fieldStorage.getlist(field_name)
- field_index = field_indices.setdefault(field_name, 0)
- if field_index < len(value_list):
- value = value_list[field_index]
- else:
- value = ""
-
- if field_type in (u"checkbox", u"radio"):
- if value_list:
- if token["data"][input_value_index][1] == value:
- if input_checked_index < 0:
- token["data"].append((u"checked", u""))
- field_indices[field_name] = field_index + 1
- elif input_checked_index >= 0:
- del token["data"][input_checked_index]
-
- elif field_type not in (u"button", u"submit", u"reset"):
- if input_value_index >= 0:
- token["data"][input_value_index] = (u"value", value)
- else:
- token["data"].append((u"value", value))
- field_indices[field_name] = field_index + 1
-
- field_type = None
- field_name = None
-
- elif name == "textarea":
- field_type = "textarea"
- field_name = dict((token["data"])[::-1])["name"]
-
- elif name == "select":
- field_type = "select"
- attributes = dict(token["data"][::-1])
- field_name = attributes.get("name")
- is_select_multiple = "multiple" in attributes
- is_selected_option_found = False
-
- elif field_type == "select" and field_name and name == "option":
- option_selected_index = -1
- option_value = None
- for i,(n,v) in enumerate(token["data"]):
- n = n.lower()
- if n == "selected":
- option_selected_index = i
- elif n == "value":
- option_value = v.strip(spaceCharacters)
- if option_value is None:
- raise NotImplementedError("s without a value= attribute")
- else:
- value_list = self.fieldStorage.getlist(field_name)
- if value_list:
- field_index = field_indices.setdefault(field_name, 0)
- if field_index < len(value_list):
- value = value_list[field_index]
- else:
- value = ""
- if (is_select_multiple or not is_selected_option_found) and option_value == value:
- if option_selected_index < 0:
- token["data"].append((u"selected", u""))
- field_indices[field_name] = field_index + 1
- is_selected_option_found = True
- elif option_selected_index >= 0:
- del token["data"][option_selected_index]
-
- elif field_type is not None and field_name and type == "EndTag":
- name = token["name"].lower()
- if name == field_type:
- if name == "textarea":
- value_list = self.fieldStorage.getlist(field_name)
- if value_list:
- field_index = field_indices.setdefault(field_name, 0)
- if field_index < len(value_list):
- value = value_list[field_index]
- else:
- value = ""
- yield {"type": "Characters", "data": value}
- field_indices[field_name] = field_index + 1
-
- field_name = None
-
- elif name == "option" and field_type == "select":
- pass # TODO: part of "option without value= attribute" processing
-
- elif field_type == "textarea":
- continue # ignore token
-
- yield token
diff --git a/lib/html5lib/filters/inject_meta_charset.py b/lib/html5lib/filters/inject_meta_charset.py
index 8e04d8ac..ca33b70b 100644
--- a/lib/html5lib/filters/inject_meta_charset.py
+++ b/lib/html5lib/filters/inject_meta_charset.py
@@ -1,4 +1,7 @@
-import _base
+from __future__ import absolute_import, division, unicode_literals
+
+from . import _base
+
class Filter(_base.Filter):
def __init__(self, source, encoding):
@@ -13,44 +16,44 @@ class Filter(_base.Filter):
for token in _base.Filter.__iter__(self):
type = token["type"]
if type == "StartTag":
- if token["name"].lower() == u"head":
+ if token["name"].lower() == "head":
state = "in_head"
elif type == "EmptyTag":
- if token["name"].lower() == u"meta":
- # replace charset with actual encoding
- has_http_equiv_content_type = False
- for (namespace,name),value in token["data"].iteritems():
- if namespace != None:
- continue
- elif name.lower() == u'charset':
- token["data"][(namespace,name)] = self.encoding
- meta_found = True
- break
- elif name == u'http-equiv' and value.lower() == u'content-type':
- has_http_equiv_content_type = True
- else:
- if has_http_equiv_content_type and (None, u"content") in token["data"]:
- token["data"][(None, u"content")] = u'text/html; charset=%s' % self.encoding
- meta_found = True
+ if token["name"].lower() == "meta":
+ # replace charset with actual encoding
+ has_http_equiv_content_type = False
+ for (namespace, name), value in token["data"].items():
+ if namespace is not None:
+ continue
+ elif name.lower() == 'charset':
+ token["data"][(namespace, name)] = self.encoding
+ meta_found = True
+ break
+ elif name == 'http-equiv' and value.lower() == 'content-type':
+ has_http_equiv_content_type = True
+ else:
+ if has_http_equiv_content_type and (None, "content") in token["data"]:
+ token["data"][(None, "content")] = 'text/html; charset=%s' % self.encoding
+ meta_found = True
- elif token["name"].lower() == u"head" and not meta_found:
+ elif token["name"].lower() == "head" and not meta_found:
# insert meta into empty head
- yield {"type": "StartTag", "name": u"head",
+ yield {"type": "StartTag", "name": "head",
"data": token["data"]}
- yield {"type": "EmptyTag", "name": u"meta",
- "data": {(None, u"charset"): self.encoding}}
- yield {"type": "EndTag", "name": u"head"}
+ yield {"type": "EmptyTag", "name": "meta",
+ "data": {(None, "charset"): self.encoding}}
+ yield {"type": "EndTag", "name": "head"}
meta_found = True
continue
elif type == "EndTag":
- if token["name"].lower() == u"head" and pending:
+ if token["name"].lower() == "head" and pending:
# insert meta into head (if necessary) and flush pending queue
yield pending.pop(0)
if not meta_found:
- yield {"type": "EmptyTag", "name": u"meta",
- "data": {(None, u"charset"): self.encoding}}
+ yield {"type": "EmptyTag", "name": "meta",
+ "data": {(None, "charset"): self.encoding}}
while pending:
yield pending.pop(0)
meta_found = True
diff --git a/lib/html5lib/filters/lint.py b/lib/html5lib/filters/lint.py
index ea5c619f..7cc99a4b 100644
--- a/lib/html5lib/filters/lint.py
+++ b/lib/html5lib/filters/lint.py
@@ -1,13 +1,18 @@
+from __future__ import absolute_import, division, unicode_literals
+
from gettext import gettext
_ = gettext
-import _base
-from html5lib.constants import cdataElements, rcdataElements, voidElements
+from . import _base
+from ..constants import cdataElements, rcdataElements, voidElements
-from html5lib.constants import spaceCharacters
-spaceCharacters = u"".join(spaceCharacters)
+from ..constants import spaceCharacters
+spaceCharacters = "".join(spaceCharacters)
+
+
+class LintError(Exception):
+ pass
-class LintError(Exception): pass
class Filter(_base.Filter):
def __iter__(self):
@@ -18,24 +23,24 @@ class Filter(_base.Filter):
if type in ("StartTag", "EmptyTag"):
name = token["name"]
if contentModelFlag != "PCDATA":
- raise LintError(_("StartTag not in PCDATA content model flag: %s") % name)
- if not isinstance(name, unicode):
- raise LintError(_(u"Tag name is not a string: %r") % name)
+ raise LintError(_("StartTag not in PCDATA content model flag: %(tag)s") % {"tag": name})
+ if not isinstance(name, str):
+ raise LintError(_("Tag name is not a string: %(tag)r") % {"tag": name})
if not name:
- raise LintError(_(u"Empty tag name"))
+ raise LintError(_("Empty tag name"))
if type == "StartTag" and name in voidElements:
- raise LintError(_(u"Void element reported as StartTag token: %s") % name)
+ raise LintError(_("Void element reported as StartTag token: %(tag)s") % {"tag": name})
elif type == "EmptyTag" and name not in voidElements:
- raise LintError(_(u"Non-void element reported as EmptyTag token: %s") % token["name"])
+ raise LintError(_("Non-void element reported as EmptyTag token: %(tag)s") % {"tag": token["name"]})
if type == "StartTag":
open_elements.append(name)
for name, value in token["data"]:
- if not isinstance(name, unicode):
- raise LintError(_("Attribute name is not a string: %r") % name)
+ if not isinstance(name, str):
+ raise LintError(_("Attribute name is not a string: %(name)r") % {"name": name})
if not name:
- raise LintError(_(u"Empty attribute name"))
- if not isinstance(value, unicode):
- raise LintError(_("Attribute value is not a string: %r") % value)
+ raise LintError(_("Empty attribute name"))
+ if not isinstance(value, str):
+ raise LintError(_("Attribute value is not a string: %(value)r") % {"value": value})
if name in cdataElements:
contentModelFlag = "CDATA"
elif name in rcdataElements:
@@ -45,15 +50,15 @@ class Filter(_base.Filter):
elif type == "EndTag":
name = token["name"]
- if not isinstance(name, unicode):
- raise LintError(_(u"Tag name is not a string: %r") % name)
+ if not isinstance(name, str):
+ raise LintError(_("Tag name is not a string: %(tag)r") % {"tag": name})
if not name:
- raise LintError(_(u"Empty tag name"))
+ raise LintError(_("Empty tag name"))
if name in voidElements:
- raise LintError(_(u"Void element reported as EndTag token: %s") % name)
+ raise LintError(_("Void element reported as EndTag token: %(tag)s") % {"tag": name})
start_name = open_elements.pop()
if start_name != name:
- raise LintError(_(u"EndTag (%s) does not match StartTag (%s)") % (name, start_name))
+ raise LintError(_("EndTag (%(end)s) does not match StartTag (%(start)s)") % {"end": name, "start": start_name})
contentModelFlag = "PCDATA"
elif type == "Comment":
@@ -62,27 +67,27 @@ class Filter(_base.Filter):
elif type in ("Characters", "SpaceCharacters"):
data = token["data"]
- if not isinstance(data, unicode):
- raise LintError(_("Attribute name is not a string: %r") % data)
+ if not isinstance(data, str):
+ raise LintError(_("Attribute name is not a string: %(name)r") % {"name": data})
if not data:
- raise LintError(_(u"%s token with empty data") % type)
+ raise LintError(_("%(type)s token with empty data") % {"type": type})
if type == "SpaceCharacters":
data = data.strip(spaceCharacters)
if data:
- raise LintError(_(u"Non-space character(s) found in SpaceCharacters token: ") % data)
+ raise LintError(_("Non-space character(s) found in SpaceCharacters token: %(token)r") % {"token": data})
elif type == "Doctype":
name = token["name"]
if contentModelFlag != "PCDATA":
- raise LintError(_("Doctype not in PCDATA content model flag: %s") % name)
- if not isinstance(name, unicode):
- raise LintError(_(u"Tag name is not a string: %r") % name)
+ raise LintError(_("Doctype not in PCDATA content model flag: %(name)s") % {"name": name})
+ if not isinstance(name, str):
+ raise LintError(_("Tag name is not a string: %(tag)r") % {"tag": name})
# XXX: what to do with token["data"] ?
elif type in ("ParseError", "SerializeError"):
pass
else:
- raise LintError(_(u"Unknown token type: %s") % type)
+ raise LintError(_("Unknown token type: %(type)s") % {"type": type})
yield token
diff --git a/lib/html5lib/filters/optionaltags.py b/lib/html5lib/filters/optionaltags.py
index a77aa72c..fefe0b30 100644
--- a/lib/html5lib/filters/optionaltags.py
+++ b/lib/html5lib/filters/optionaltags.py
@@ -1,4 +1,7 @@
-import _base
+from __future__ import absolute_import, division, unicode_literals
+
+from . import _base
+
class Filter(_base.Filter):
def slider(self):
@@ -14,8 +17,8 @@ class Filter(_base.Filter):
for previous, token, next in self.slider():
type = token["type"]
if type == "StartTag":
- if (token["data"] or
- not self.is_optional_start(token["name"], previous, next)):
+ if (token["data"] or
+ not self.is_optional_start(token["name"], previous, next)):
yield token
elif type == "EndTag":
if not self.is_optional_end(token["name"], next):
@@ -73,7 +76,7 @@ class Filter(_base.Filter):
# omit the thead and tfoot elements' end tag when they are
# immediately followed by a tbody element. See is_optional_end.
if previous and previous['type'] == 'EndTag' and \
- previous['name'] in ('tbody','thead','tfoot'):
+ previous['name'] in ('tbody', 'thead', 'tfoot'):
return False
return next["name"] == 'tr'
else:
@@ -121,10 +124,10 @@ class Filter(_base.Filter):
# there is no more content in the parent element.
if type in ("StartTag", "EmptyTag"):
return next["name"] in ('address', 'article', 'aside',
- 'blockquote', 'datagrid', 'dialog',
+ 'blockquote', 'datagrid', 'dialog',
'dir', 'div', 'dl', 'fieldset', 'footer',
'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',
- 'header', 'hr', 'menu', 'nav', 'ol',
+ 'header', 'hr', 'menu', 'nav', 'ol',
'p', 'pre', 'section', 'table', 'ul')
else:
return type == "EndTag" or type is None
diff --git a/lib/html5lib/filters/sanitizer.py b/lib/html5lib/filters/sanitizer.py
index 00235278..b206b54e 100644
--- a/lib/html5lib/filters/sanitizer.py
+++ b/lib/html5lib/filters/sanitizer.py
@@ -1,8 +1,12 @@
-import _base
-from html5lib.sanitizer import HTMLSanitizerMixin
+from __future__ import absolute_import, division, unicode_literals
+
+from . import _base
+from ..sanitizer import HTMLSanitizerMixin
+
class Filter(_base.Filter, HTMLSanitizerMixin):
def __iter__(self):
for token in _base.Filter.__iter__(self):
token = self.sanitize_token(token)
- if token: yield token
+ if token:
+ yield token
diff --git a/lib/html5lib/filters/whitespace.py b/lib/html5lib/filters/whitespace.py
index 74d6f4d8..dfc60eeb 100644
--- a/lib/html5lib/filters/whitespace.py
+++ b/lib/html5lib/filters/whitespace.py
@@ -1,16 +1,13 @@
-try:
- frozenset
-except NameError:
- # Import from the sets module for python 2.3
- from sets import ImmutableSet as frozenset
+from __future__ import absolute_import, division, unicode_literals
import re
-import _base
-from html5lib.constants import rcdataElements, spaceCharacters
-spaceCharacters = u"".join(spaceCharacters)
+from . import _base
+from ..constants import rcdataElements, spaceCharacters
+spaceCharacters = "".join(spaceCharacters)
+
+SPACES_REGEX = re.compile("[%s]+" % spaceCharacters)
-SPACES_REGEX = re.compile(u"[%s]+" % spaceCharacters)
class Filter(_base.Filter):
@@ -21,7 +18,7 @@ class Filter(_base.Filter):
for token in _base.Filter.__iter__(self):
type = token["type"]
if type == "StartTag" \
- and (preserve or token["name"] in self.spacePreserveElements):
+ and (preserve or token["name"] in self.spacePreserveElements):
preserve += 1
elif type == "EndTag" and preserve:
@@ -29,13 +26,13 @@ class Filter(_base.Filter):
elif not preserve and type == "SpaceCharacters" and token["data"]:
# Test on token["data"] above to not introduce spaces where there were not
- token["data"] = u" "
+ token["data"] = " "
elif not preserve and type == "Characters":
token["data"] = collapse_spaces(token["data"])
yield token
+
def collapse_spaces(text):
return SPACES_REGEX.sub(' ', text)
-
diff --git a/lib/html5lib/html5parser.py b/lib/html5lib/html5parser.py
index 08a8f8ad..b0f14f39 100644
--- a/lib/html5lib/html5parser.py
+++ b/lib/html5lib/html5parser.py
@@ -1,89 +1,65 @@
-try:
- frozenset
-except NameError:
- # Import from the sets module for python 2.3
- from sets import Set as set
- from sets import ImmutableSet as frozenset
+from __future__ import absolute_import, division, unicode_literals
+from six import with_metaclass
-try:
- any
-except:
- # Implement 'any' for python 2.4 and previous
- def any(iterable):
- for element in iterable:
- if element:
- return True
- return False
-
-try:
- "abc".startswith(("a", "b"))
- def startswithany(str, prefixes):
- return str.startswith(prefixes)
-except:
- # Python 2.4 doesn't accept a tuple as argument to string startswith
- def startswithany(str, prefixes):
- for prefix in prefixes:
- if str.startswith(prefix):
- return True
- return False
-
-import sys
import types
-import inputstream
-import tokenizer
+from . import inputstream
+from . import tokenizer
-import treebuilders
-from treebuilders._base import Marker
-from treebuilders import simpletree
+from . import treebuilders
+from .treebuilders._base import Marker
-import utils
-import constants
-from constants import spaceCharacters, asciiUpper2Lower
-from constants import formattingElements, specialElements
-from constants import headingElements, tableInsertModeElements
-from constants import cdataElements, rcdataElements, voidElements
-from constants import tokenTypes, ReparseException, namespaces, spaceCharacters
-from constants import htmlIntegrationPointElements, mathmlTextIntegrationPointElements
+from . import utils
+from . import constants
+from .constants import spaceCharacters, asciiUpper2Lower
+from .constants import specialElements
+from .constants import headingElements
+from .constants import cdataElements, rcdataElements
+from .constants import tokenTypes, ReparseException, namespaces
+from .constants import htmlIntegrationPointElements, mathmlTextIntegrationPointElements
+from .constants import adjustForeignAttributes as adjustForeignAttributesMap
-def parse(doc, treebuilder="simpletree", encoding=None,
+
+def parse(doc, treebuilder="etree", encoding=None,
namespaceHTMLElements=True):
"""Parse a string or file-like object into a tree"""
tb = treebuilders.getTreeBuilder(treebuilder)
p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements)
return p.parse(doc, encoding=encoding)
-def parseFragment(doc, container="div", treebuilder="simpletree", encoding=None,
+
+def parseFragment(doc, container="div", treebuilder="etree", encoding=None,
namespaceHTMLElements=True):
tb = treebuilders.getTreeBuilder(treebuilder)
p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements)
return p.parseFragment(doc, container=container, encoding=encoding)
+
def method_decorator_metaclass(function):
class Decorated(type):
def __new__(meta, classname, bases, classDict):
- for attributeName, attribute in classDict.iteritems():
- if type(attribute) == types.FunctionType:
+ for attributeName, attribute in classDict.items():
+ if isinstance(attribute, types.FunctionType):
attribute = function(attribute)
classDict[attributeName] = attribute
- return type.__new__(meta, classname, bases, classDict)
+ return type.__new__(meta, classname, bases, classDict)
return Decorated
+
class HTMLParser(object):
"""HTML parser. Generates a tree structure from a stream of (possibly
malformed) HTML"""
- def __init__(self, tree = simpletree.TreeBuilder,
- tokenizer = tokenizer.HTMLTokenizer, strict = False,
- namespaceHTMLElements = True, debug=False):
+ def __init__(self, tree=None, tokenizer=tokenizer.HTMLTokenizer,
+ strict=False, namespaceHTMLElements=True, debug=False):
"""
strict - raise an exception when a parse error is encountered
tree - a treebuilder class controlling the type of tree that will be
returned. Built in treebuilders can be accessed through
html5lib.treebuilders.getTreeBuilder(treeType)
-
+
tokenizer - a class that provides a stream of tokens to the treebuilder.
This may be replaced for e.g. a sanitizer which converts some tags to
text
@@ -92,12 +68,14 @@ class HTMLParser(object):
# Raise an exception on the first error encountered
self.strict = strict
+ if tree is None:
+ tree = treebuilders.getTreeBuilder("etree")
self.tree = tree(namespaceHTMLElements)
self.tokenizer_class = tokenizer
self.errors = []
self.phases = dict([(name, cls(self, self.tree)) for name, cls in
- getPhases(debug).iteritems()])
+ getPhases(debug).items()])
def _parse(self, stream, innerHTML=False, container="div",
encoding=None, parseMeta=True, useChardet=True, **kwargs):
@@ -106,7 +84,7 @@ class HTMLParser(object):
self.container = container
self.tokenizer = self.tokenizer_class(stream, encoding=encoding,
parseMeta=parseMeta,
- useChardet=useChardet,
+ useChardet=useChardet,
parser=self, **kwargs)
self.reset()
@@ -114,14 +92,14 @@ class HTMLParser(object):
try:
self.mainLoop()
break
- except ReparseException, e:
+ except ReparseException:
self.reset()
def reset(self):
self.tree.reset()
self.firstStartTag = False
self.errors = []
- self.log = [] #only used with debug mode
+ self.log = [] # only used with debug mode
# "quirks" / "limited quirks" / "no quirks"
self.compatMode = "no quirks"
@@ -152,18 +130,18 @@ class HTMLParser(object):
self.framesetOK = True
def isHTMLIntegrationPoint(self, element):
- if (element.name == "annotation-xml" and
- element.namespace == namespaces["mathml"]):
+ if (element.name == "annotation-xml" and
+ element.namespace == namespaces["mathml"]):
return ("encoding" in element.attributes and
element.attributes["encoding"].translate(
- asciiUpper2Lower) in
+ asciiUpper2Lower) in
("text/html", "application/xhtml+xml"))
else:
return (element.namespace, element.name) in htmlIntegrationPointElements
def isMathMLTextIntegrationPoint(self, element):
return (element.namespace, element.name) in mathmlTextIntegrationPointElements
-
+
def mainLoop(self):
CharactersToken = tokenTypes["Characters"]
SpaceCharactersToken = tokenTypes["SpaceCharacters"]
@@ -172,7 +150,7 @@ class HTMLParser(object):
CommentToken = tokenTypes["Comment"]
DoctypeToken = tokenTypes["Doctype"]
ParseErrorToken = tokenTypes["ParseError"]
-
+
for token in self.normalizedTokens():
new_token = token
while new_token is not None:
@@ -181,7 +159,7 @@ class HTMLParser(object):
currentNodeName = currentNode.name if currentNode else None
type = new_token["type"]
-
+
if type == ParseErrorToken:
self.parseError(new_token["data"], new_token.get("datavars", {}))
new_token = None
@@ -191,7 +169,7 @@ class HTMLParser(object):
(self.isMathMLTextIntegrationPoint(currentNode) and
((type == StartTagToken and
token["name"] not in frozenset(["mglyph", "malignmark"])) or
- type in (CharactersToken, SpaceCharactersToken))) or
+ type in (CharactersToken, SpaceCharactersToken))) or
(currentNodeNamespace == namespaces["mathml"] and
currentNodeName == "annotation-xml" and
token["name"] == "svg") or
@@ -204,7 +182,7 @@ class HTMLParser(object):
if type == CharactersToken:
new_token = phase.processCharacters(new_token)
elif type == SpaceCharactersToken:
- new_token= phase.processSpaceCharacters(new_token)
+ new_token = phase.processSpaceCharacters(new_token)
elif type == StartTagToken:
new_token = phase.processStartTag(new_token)
elif type == EndTagToken:
@@ -215,10 +193,9 @@ class HTMLParser(object):
new_token = phase.processDoctype(new_token)
if (type == StartTagToken and token["selfClosing"]
- and not token["selfClosingAcknowledged"]):
+ and not token["selfClosingAcknowledged"]):
self.parseError("non-void-element-with-trailing-solidus",
- {"name":token["name"]})
-
+ {"name": token["name"]})
# When the loop finishes it's EOF
reprocess = True
@@ -243,14 +220,14 @@ class HTMLParser(object):
regardless of any BOM or later declaration (such as in a meta
element)
"""
- self._parse(stream, innerHTML=False, encoding=encoding,
+ self._parse(stream, innerHTML=False, encoding=encoding,
parseMeta=parseMeta, useChardet=useChardet)
return self.tree.getDocument()
-
+
def parseFragment(self, stream, container="div", encoding=None,
parseMeta=False, useChardet=True):
"""Parse a HTML fragment into a well-formed tree fragment
-
+
container - name of the element we're setting the innerHTML property
if set to None, default to 'div'
@@ -279,100 +256,87 @@ class HTMLParser(object):
return token
def adjustMathMLAttributes(self, token):
- replacements = {"definitionurl":u"definitionURL"}
- for k,v in replacements.iteritems():
+ replacements = {"definitionurl": "definitionURL"}
+ for k, v in replacements.items():
if k in token["data"]:
token["data"][v] = token["data"][k]
del token["data"][k]
def adjustSVGAttributes(self, token):
replacements = {
- "attributename":u"attributeName",
- "attributetype":u"attributeType",
- "basefrequency":u"baseFrequency",
- "baseprofile":u"baseProfile",
- "calcmode":u"calcMode",
- "clippathunits":u"clipPathUnits",
- "contentscripttype":u"contentScriptType",
- "contentstyletype":u"contentStyleType",
- "diffuseconstant":u"diffuseConstant",
- "edgemode":u"edgeMode",
- "externalresourcesrequired":u"externalResourcesRequired",
- "filterres":u"filterRes",
- "filterunits":u"filterUnits",
- "glyphref":u"glyphRef",
- "gradienttransform":u"gradientTransform",
- "gradientunits":u"gradientUnits",
- "kernelmatrix":u"kernelMatrix",
- "kernelunitlength":u"kernelUnitLength",
- "keypoints":u"keyPoints",
- "keysplines":u"keySplines",
- "keytimes":u"keyTimes",
- "lengthadjust":u"lengthAdjust",
- "limitingconeangle":u"limitingConeAngle",
- "markerheight":u"markerHeight",
- "markerunits":u"markerUnits",
- "markerwidth":u"markerWidth",
- "maskcontentunits":u"maskContentUnits",
- "maskunits":u"maskUnits",
- "numoctaves":u"numOctaves",
- "pathlength":u"pathLength",
- "patterncontentunits":u"patternContentUnits",
- "patterntransform":u"patternTransform",
- "patternunits":u"patternUnits",
- "pointsatx":u"pointsAtX",
- "pointsaty":u"pointsAtY",
- "pointsatz":u"pointsAtZ",
- "preservealpha":u"preserveAlpha",
- "preserveaspectratio":u"preserveAspectRatio",
- "primitiveunits":u"primitiveUnits",
- "refx":u"refX",
- "refy":u"refY",
- "repeatcount":u"repeatCount",
- "repeatdur":u"repeatDur",
- "requiredextensions":u"requiredExtensions",
- "requiredfeatures":u"requiredFeatures",
- "specularconstant":u"specularConstant",
- "specularexponent":u"specularExponent",
- "spreadmethod":u"spreadMethod",
- "startoffset":u"startOffset",
- "stddeviation":u"stdDeviation",
- "stitchtiles":u"stitchTiles",
- "surfacescale":u"surfaceScale",
- "systemlanguage":u"systemLanguage",
- "tablevalues":u"tableValues",
- "targetx":u"targetX",
- "targety":u"targetY",
- "textlength":u"textLength",
- "viewbox":u"viewBox",
- "viewtarget":u"viewTarget",
- "xchannelselector":u"xChannelSelector",
- "ychannelselector":u"yChannelSelector",
- "zoomandpan":u"zoomAndPan"
- }
- for originalName in token["data"].keys():
+ "attributename": "attributeName",
+ "attributetype": "attributeType",
+ "basefrequency": "baseFrequency",
+ "baseprofile": "baseProfile",
+ "calcmode": "calcMode",
+ "clippathunits": "clipPathUnits",
+ "contentscripttype": "contentScriptType",
+ "contentstyletype": "contentStyleType",
+ "diffuseconstant": "diffuseConstant",
+ "edgemode": "edgeMode",
+ "externalresourcesrequired": "externalResourcesRequired",
+ "filterres": "filterRes",
+ "filterunits": "filterUnits",
+ "glyphref": "glyphRef",
+ "gradienttransform": "gradientTransform",
+ "gradientunits": "gradientUnits",
+ "kernelmatrix": "kernelMatrix",
+ "kernelunitlength": "kernelUnitLength",
+ "keypoints": "keyPoints",
+ "keysplines": "keySplines",
+ "keytimes": "keyTimes",
+ "lengthadjust": "lengthAdjust",
+ "limitingconeangle": "limitingConeAngle",
+ "markerheight": "markerHeight",
+ "markerunits": "markerUnits",
+ "markerwidth": "markerWidth",
+ "maskcontentunits": "maskContentUnits",
+ "maskunits": "maskUnits",
+ "numoctaves": "numOctaves",
+ "pathlength": "pathLength",
+ "patterncontentunits": "patternContentUnits",
+ "patterntransform": "patternTransform",
+ "patternunits": "patternUnits",
+ "pointsatx": "pointsAtX",
+ "pointsaty": "pointsAtY",
+ "pointsatz": "pointsAtZ",
+ "preservealpha": "preserveAlpha",
+ "preserveaspectratio": "preserveAspectRatio",
+ "primitiveunits": "primitiveUnits",
+ "refx": "refX",
+ "refy": "refY",
+ "repeatcount": "repeatCount",
+ "repeatdur": "repeatDur",
+ "requiredextensions": "requiredExtensions",
+ "requiredfeatures": "requiredFeatures",
+ "specularconstant": "specularConstant",
+ "specularexponent": "specularExponent",
+ "spreadmethod": "spreadMethod",
+ "startoffset": "startOffset",
+ "stddeviation": "stdDeviation",
+ "stitchtiles": "stitchTiles",
+ "surfacescale": "surfaceScale",
+ "systemlanguage": "systemLanguage",
+ "tablevalues": "tableValues",
+ "targetx": "targetX",
+ "targety": "targetY",
+ "textlength": "textLength",
+ "viewbox": "viewBox",
+ "viewtarget": "viewTarget",
+ "xchannelselector": "xChannelSelector",
+ "ychannelselector": "yChannelSelector",
+ "zoomandpan": "zoomAndPan"
+ }
+ for originalName in list(token["data"].keys()):
if originalName in replacements:
svgName = replacements[originalName]
token["data"][svgName] = token["data"][originalName]
del token["data"][originalName]
def adjustForeignAttributes(self, token):
- replacements = {
- "xlink:actuate":("xlink", "actuate", namespaces["xlink"]),
- "xlink:arcrole":("xlink", "arcrole", namespaces["xlink"]),
- "xlink:href":("xlink", "href", namespaces["xlink"]),
- "xlink:role":("xlink", "role", namespaces["xlink"]),
- "xlink:show":("xlink", "show", namespaces["xlink"]),
- "xlink:title":("xlink", "title", namespaces["xlink"]),
- "xlink:type":("xlink", "type", namespaces["xlink"]),
- "xml:base":("xml", "base", namespaces["xml"]),
- "xml:lang":("xml", "lang", namespaces["xml"]),
- "xml:space":("xml", "space", namespaces["xml"]),
- "xmlns":(None, "xmlns", namespaces["xmlns"]),
- "xmlns:xlink":("xmlns", "xlink", namespaces["xmlns"])
- }
+ replacements = adjustForeignAttributesMap
- for originalName in token["data"].iterkeys():
+ for originalName in token["data"].keys():
if originalName in replacements:
foreignName = replacements[originalName]
token["data"][foreignName] = token["data"][originalName]
@@ -386,20 +350,20 @@ class HTMLParser(object):
# specification.)
last = False
newModes = {
- "select":"inSelect",
- "td":"inCell",
- "th":"inCell",
- "tr":"inRow",
- "tbody":"inTableBody",
- "thead":"inTableBody",
- "tfoot":"inTableBody",
- "caption":"inCaption",
- "colgroup":"inColumnGroup",
- "table":"inTable",
- "head":"inBody",
- "body":"inBody",
- "frameset":"inFrameset",
- "html":"beforeHead"
+ "select": "inSelect",
+ "td": "inCell",
+ "th": "inCell",
+ "tr": "inRow",
+ "tbody": "inTableBody",
+ "thead": "inTableBody",
+ "tfoot": "inTableBody",
+ "caption": "inCaption",
+ "colgroup": "inColumnGroup",
+ "table": "inTable",
+ "head": "inBody",
+ "body": "inBody",
+ "frameset": "inFrameset",
+ "html": "beforeHead"
}
for node in self.tree.openElements[::-1]:
nodeName = node.name
@@ -430,9 +394,9 @@ class HTMLParser(object):
contentType - RCDATA or RAWTEXT
"""
assert contentType in ("RAWTEXT", "RCDATA")
-
- element = self.tree.insertElement(token)
-
+
+ self.tree.insertElement(token)
+
if contentType == "RAWTEXT":
self.tokenizer.state = self.tokenizer.rawtextState
else:
@@ -442,25 +406,27 @@ class HTMLParser(object):
self.phase = self.phases["text"]
+
def getPhases(debug):
def log(function):
"""Logger that records which phase processes each token"""
- type_names = dict((value, key) for key, value in
- constants.tokenTypes.iteritems())
+ type_names = dict((value, key) for key, value in
+ constants.tokenTypes.items())
+
def wrapped(self, *args, **kwargs):
if function.__name__.startswith("process") and len(args) > 0:
token = args[0]
try:
- info = {"type":type_names[token['type']]}
+ info = {"type": type_names[token['type']]}
except:
raise
if token['type'] in constants.tagTokenTypes:
info["name"] = token['name']
self.parser.log.append((self.parser.tokenizer.state.__name__,
- self.parser.phase.__class__.__name__,
- self.__class__.__name__,
- function.__name__,
+ self.parser.phase.__class__.__name__,
+ self.__class__.__name__,
+ function.__name__,
info))
return function(self, *args, **kwargs)
else:
@@ -473,21 +439,9 @@ def getPhases(debug):
else:
return type
- class Phase(object):
+ class Phase(with_metaclass(getMetaclass(debug, log))):
"""Base class for helper object that implements each phase of processing
"""
- # Order should be (they can be omitted):
- # * EOF
- # * Comment
- # * Doctype
- # * SpaceCharacters
- # * Characters
- # * StartTag
- # - startTag* methods
- # * EndTag
- # - endTag* methods
-
- __metaclass__ = getMetaclass(debug, log)
def __init__(self, parser, tree):
self.parser = parser
@@ -514,11 +468,11 @@ def getPhases(debug):
return self.startTagHandler[token["name"]](token)
def startTagHtml(self, token):
- if self.parser.firstStartTag == False and token["name"] == "html":
- self.parser.parseError("non-html-root")
+ if not self.parser.firstStartTag and token["name"] == "html":
+ self.parser.parseError("non-html-root")
# XXX Need a check here to see if the first start tag token emitted is
# this token... If it's not, invoke self.parser.parseError().
- for attr, value in token["data"].iteritems():
+ for attr, value in token["data"].items():
if attr not in self.tree.openElements[0].attributes:
self.tree.openElements[0].attributes[attr] = value
self.parser.firstStartTag = False
@@ -539,8 +493,8 @@ def getPhases(debug):
systemId = token["systemId"]
correct = token["correct"]
- if (name != "html" or publicId != None or
- systemId != None and systemId != "about:legacy-compat"):
+ if (name != "html" or publicId is not None or
+ systemId is not None and systemId != "about:legacy-compat"):
self.parser.parseError("unknown-doctype")
if publicId is None:
@@ -552,79 +506,79 @@ def getPhases(debug):
publicId = publicId.translate(asciiUpper2Lower)
if (not correct or token["name"] != "html"
- or startswithany(publicId,
- ("+//silmaril//dtd html pro v0r11 19970101//",
- "-//advasoft ltd//dtd html 3.0 aswedit + extensions//",
- "-//as//dtd html 3.0 aswedit + extensions//",
- "-//ietf//dtd html 2.0 level 1//",
- "-//ietf//dtd html 2.0 level 2//",
- "-//ietf//dtd html 2.0 strict level 1//",
- "-//ietf//dtd html 2.0 strict level 2//",
- "-//ietf//dtd html 2.0 strict//",
- "-//ietf//dtd html 2.0//",
- "-//ietf//dtd html 2.1e//",
- "-//ietf//dtd html 3.0//",
- "-//ietf//dtd html 3.2 final//",
- "-//ietf//dtd html 3.2//",
- "-//ietf//dtd html 3//",
- "-//ietf//dtd html level 0//",
- "-//ietf//dtd html level 1//",
- "-//ietf//dtd html level 2//",
- "-//ietf//dtd html level 3//",
- "-//ietf//dtd html strict level 0//",
- "-//ietf//dtd html strict level 1//",
- "-//ietf//dtd html strict level 2//",
- "-//ietf//dtd html strict level 3//",
- "-//ietf//dtd html strict//",
- "-//ietf//dtd html//",
- "-//metrius//dtd metrius presentational//",
- "-//microsoft//dtd internet explorer 2.0 html strict//",
- "-//microsoft//dtd internet explorer 2.0 html//",
- "-//microsoft//dtd internet explorer 2.0 tables//",
- "-//microsoft//dtd internet explorer 3.0 html strict//",
- "-//microsoft//dtd internet explorer 3.0 html//",
- "-//microsoft//dtd internet explorer 3.0 tables//",
- "-//netscape comm. corp.//dtd html//",
- "-//netscape comm. corp.//dtd strict html//",
- "-//o'reilly and associates//dtd html 2.0//",
- "-//o'reilly and associates//dtd html extended 1.0//",
- "-//o'reilly and associates//dtd html extended relaxed 1.0//",
- "-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//",
- "-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//",
- "-//spyglass//dtd html 2.0 extended//",
- "-//sq//dtd html 2.0 hotmetal + extensions//",
- "-//sun microsystems corp.//dtd hotjava html//",
- "-//sun microsystems corp.//dtd hotjava strict html//",
- "-//w3c//dtd html 3 1995-03-24//",
- "-//w3c//dtd html 3.2 draft//",
- "-//w3c//dtd html 3.2 final//",
- "-//w3c//dtd html 3.2//",
- "-//w3c//dtd html 3.2s draft//",
- "-//w3c//dtd html 4.0 frameset//",
- "-//w3c//dtd html 4.0 transitional//",
- "-//w3c//dtd html experimental 19960712//",
- "-//w3c//dtd html experimental 970421//",
- "-//w3c//dtd w3 html//",
- "-//w3o//dtd w3 html 3.0//",
- "-//webtechs//dtd mozilla html 2.0//",
- "-//webtechs//dtd mozilla html//"))
+ or publicId.startswith(
+ ("+//silmaril//dtd html pro v0r11 19970101//",
+ "-//advasoft ltd//dtd html 3.0 aswedit + extensions//",
+ "-//as//dtd html 3.0 aswedit + extensions//",
+ "-//ietf//dtd html 2.0 level 1//",
+ "-//ietf//dtd html 2.0 level 2//",
+ "-//ietf//dtd html 2.0 strict level 1//",
+ "-//ietf//dtd html 2.0 strict level 2//",
+ "-//ietf//dtd html 2.0 strict//",
+ "-//ietf//dtd html 2.0//",
+ "-//ietf//dtd html 2.1e//",
+ "-//ietf//dtd html 3.0//",
+ "-//ietf//dtd html 3.2 final//",
+ "-//ietf//dtd html 3.2//",
+ "-//ietf//dtd html 3//",
+ "-//ietf//dtd html level 0//",
+ "-//ietf//dtd html level 1//",
+ "-//ietf//dtd html level 2//",
+ "-//ietf//dtd html level 3//",
+ "-//ietf//dtd html strict level 0//",
+ "-//ietf//dtd html strict level 1//",
+ "-//ietf//dtd html strict level 2//",
+ "-//ietf//dtd html strict level 3//",
+ "-//ietf//dtd html strict//",
+ "-//ietf//dtd html//",
+ "-//metrius//dtd metrius presentational//",
+ "-//microsoft//dtd internet explorer 2.0 html strict//",
+ "-//microsoft//dtd internet explorer 2.0 html//",
+ "-//microsoft//dtd internet explorer 2.0 tables//",
+ "-//microsoft//dtd internet explorer 3.0 html strict//",
+ "-//microsoft//dtd internet explorer 3.0 html//",
+ "-//microsoft//dtd internet explorer 3.0 tables//",
+ "-//netscape comm. corp.//dtd html//",
+ "-//netscape comm. corp.//dtd strict html//",
+ "-//o'reilly and associates//dtd html 2.0//",
+ "-//o'reilly and associates//dtd html extended 1.0//",
+ "-//o'reilly and associates//dtd html extended relaxed 1.0//",
+ "-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//",
+ "-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//",
+ "-//spyglass//dtd html 2.0 extended//",
+ "-//sq//dtd html 2.0 hotmetal + extensions//",
+ "-//sun microsystems corp.//dtd hotjava html//",
+ "-//sun microsystems corp.//dtd hotjava strict html//",
+ "-//w3c//dtd html 3 1995-03-24//",
+ "-//w3c//dtd html 3.2 draft//",
+ "-//w3c//dtd html 3.2 final//",
+ "-//w3c//dtd html 3.2//",
+ "-//w3c//dtd html 3.2s draft//",
+ "-//w3c//dtd html 4.0 frameset//",
+ "-//w3c//dtd html 4.0 transitional//",
+ "-//w3c//dtd html experimental 19960712//",
+ "-//w3c//dtd html experimental 970421//",
+ "-//w3c//dtd w3 html//",
+ "-//w3o//dtd w3 html 3.0//",
+ "-//webtechs//dtd mozilla html 2.0//",
+ "-//webtechs//dtd mozilla html//"))
or publicId in
("-//w3o//dtd w3 html strict 3.0//en//",
"-/w3c/dtd html 4.0 transitional/en",
"html")
- or startswithany(publicId,
+ or publicId.startswith(
("-//w3c//dtd html 4.01 frameset//",
- "-//w3c//dtd html 4.01 transitional//")) and
- systemId == None
- or systemId and systemId.lower() == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"):
+ "-//w3c//dtd html 4.01 transitional//")) and
+ systemId is None
+ or systemId and systemId.lower() == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"):
self.parser.compatMode = "quirks"
- elif (startswithany(publicId,
+ elif (publicId.startswith(
("-//w3c//dtd xhtml 1.0 frameset//",
"-//w3c//dtd xhtml 1.0 transitional//"))
- or startswithany(publicId,
+ or publicId.startswith(
("-//w3c//dtd html 4.01 frameset//",
- "-//w3c//dtd html 4.01 transitional//")) and
- systemId != None):
+ "-//w3c//dtd html 4.01 transitional//")) and
+ systemId is not None):
self.parser.compatMode = "limited quirks"
self.parser.phase = self.parser.phases["beforeHtml"]
@@ -640,13 +594,13 @@ def getPhases(debug):
def processStartTag(self, token):
self.parser.parseError("expected-doctype-but-got-start-tag",
- {"name": token["name"]})
+ {"name": token["name"]})
self.anythingElse()
return token
def processEndTag(self, token):
self.parser.parseError("expected-doctype-but-got-end-tag",
- {"name": token["name"]})
+ {"name": token["name"]})
self.anythingElse()
return token
@@ -655,7 +609,6 @@ def getPhases(debug):
self.anythingElse()
return True
-
class BeforeHtmlPhase(Phase):
# helper methods
def insertHtmlElement(self):
@@ -686,12 +639,11 @@ def getPhases(debug):
def processEndTag(self, token):
if token["name"] not in ("head", "body", "html", "br"):
self.parser.parseError("unexpected-end-tag-before-html",
- {"name": token["name"]})
+ {"name": token["name"]})
else:
self.insertHtmlElement()
return token
-
class BeforeHeadPhase(Phase):
def __init__(self, parser, tree):
Phase.__init__(self, parser, tree)
@@ -736,18 +688,18 @@ def getPhases(debug):
def endTagOther(self, token):
self.parser.parseError("end-tag-after-implied-root",
- {"name": token["name"]})
+ {"name": token["name"]})
class InHeadPhase(Phase):
def __init__(self, parser, tree):
Phase.__init__(self, parser, tree)
- self.startTagHandler = utils.MethodDispatcher([
+ self.startTagHandler = utils.MethodDispatcher([
("html", self.startTagHtml),
("title", self.startTagTitle),
(("noscript", "noframes", "style"), self.startTagNoScriptNoFramesStyle),
("script", self.startTagScript),
- (("base", "basefont", "bgsound", "command", "link"),
+ (("base", "basefont", "bgsound", "command", "link"),
self.startTagBaseLinkCommand),
("meta", self.startTagMeta),
("head", self.startTagHead)
@@ -761,7 +713,7 @@ def getPhases(debug):
self.endTagHandler.default = self.endTagOther
# the real thing
- def processEOF (self):
+ def processEOF(self):
self.anythingElse()
return True
@@ -789,7 +741,9 @@ def getPhases(debug):
if self.parser.tokenizer.stream.charEncoding[1] == "tentative":
if "charset" in attributes:
self.parser.tokenizer.stream.changeEncoding(attributes["charset"])
- elif "content" in attributes:
+ elif ("content" in attributes and
+ "http-equiv" in attributes and
+ attributes["http-equiv"].lower() == "content-type"):
# Encoding it as UTF-8 here is a hack, as really we should pass
# the abstract Unicode string, and just use the
# ContentAttrParser on that, but using UTF-8 allows all chars
@@ -803,7 +757,7 @@ def getPhases(debug):
self.parser.parseRCDataRawtext(token, "RCDATA")
def startTagNoScriptNoFramesStyle(self, token):
- #Need to decide whether to implement the scripting-disabled case
+ # Need to decide whether to implement the scripting-disabled case
self.parser.parseRCDataRawtext(token, "RAWTEXT")
def startTagScript(self, token):
@@ -818,7 +772,7 @@ def getPhases(debug):
def endTagHead(self, token):
node = self.parser.tree.openElements.pop()
- assert node.name == "head", "Expected head got %s"%node.name
+ assert node.name == "head", "Expected head got %s" % node.name
self.parser.phase = self.parser.phases["afterHead"]
def endTagHtmlBodyBr(self, token):
@@ -831,12 +785,10 @@ def getPhases(debug):
def anythingElse(self):
self.endTagHead(impliedTagToken("head"))
-
# XXX If we implement a parser for which scripting is disabled we need to
# implement this phase.
#
# class InHeadNoScriptPhase(Phase):
-
class AfterHeadPhase(Phase):
def __init__(self, parser, tree):
Phase.__init__(self, parser, tree)
@@ -845,13 +797,13 @@ def getPhases(debug):
("html", self.startTagHtml),
("body", self.startTagBody),
("frameset", self.startTagFrameset),
- (("base", "basefont", "bgsound", "link", "meta", "noframes", "script",
+ (("base", "basefont", "bgsound", "link", "meta", "noframes", "script",
"style", "title"),
- self.startTagFromHead),
+ self.startTagFromHead),
("head", self.startTagHead)
])
self.startTagHandler.default = self.startTagOther
- self.endTagHandler = utils.MethodDispatcher([(("body", "html", "br"),
+ self.endTagHandler = utils.MethodDispatcher([(("body", "html", "br"),
self.endTagHtmlBodyBr)])
self.endTagHandler.default = self.endTagOther
@@ -877,7 +829,7 @@ def getPhases(debug):
def startTagFromHead(self, token):
self.parser.parseError("unexpected-start-tag-out-of-my-head",
- {"name": token["name"]})
+ {"name": token["name"]})
self.tree.openElements.append(self.tree.headPointer)
self.parser.phases["inHead"].processStartTag(token)
for node in self.tree.openElements[::-1]:
@@ -886,7 +838,7 @@ def getPhases(debug):
break
def startTagHead(self, token):
- self.parser.parseError("unexpected-start-tag", {"name":token["name"]})
+ self.parser.parseError("unexpected-start-tag", {"name": token["name"]})
def startTagOther(self, token):
self.anythingElse()
@@ -897,43 +849,42 @@ def getPhases(debug):
return token
def endTagOther(self, token):
- self.parser.parseError("unexpected-end-tag", {"name":token["name"]})
+ self.parser.parseError("unexpected-end-tag", {"name": token["name"]})
def anythingElse(self):
self.tree.insertElement(impliedTagToken("body", "StartTag"))
self.parser.phase = self.parser.phases["inBody"]
self.parser.framesetOK = True
-
class InBodyPhase(Phase):
# http://www.whatwg.org/specs/web-apps/current-work/#parsing-main-inbody
# the really-really-really-very crazy mode
def __init__(self, parser, tree):
Phase.__init__(self, parser, tree)
- #Keep a ref to this for special handling of whitespace in
+ # Keep a ref to this for special handling of whitespace in
self.processSpaceCharactersNonPre = self.processSpaceCharacters
self.startTagHandler = utils.MethodDispatcher([
("html", self.startTagHtml),
- (("base", "basefont", "bgsound", "command", "link", "meta",
- "noframes", "script", "style", "title"),
+ (("base", "basefont", "bgsound", "command", "link", "meta",
+ "noframes", "script", "style", "title"),
self.startTagProcessInHead),
("body", self.startTagBody),
("frameset", self.startTagFrameset),
(("address", "article", "aside", "blockquote", "center", "details",
"details", "dir", "div", "dl", "fieldset", "figcaption", "figure",
- "footer", "header", "hgroup", "menu", "nav", "ol", "p",
+ "footer", "header", "hgroup", "main", "menu", "nav", "ol", "p",
"section", "summary", "ul"),
- self.startTagCloseP),
+ self.startTagCloseP),
(headingElements, self.startTagHeading),
(("pre", "listing"), self.startTagPreListing),
("form", self.startTagForm),
(("li", "dd", "dt"), self.startTagListItem),
- ("plaintext",self.startTagPlaintext),
+ ("plaintext", self.startTagPlaintext),
("a", self.startTagA),
- (("b", "big", "code", "em", "font", "i", "s", "small", "strike",
- "strong", "tt", "u"),self.startTagFormatting),
+ (("b", "big", "code", "em", "font", "i", "s", "small", "strike",
+ "strong", "tt", "u"), self.startTagFormatting),
("nobr", self.startTagNobr),
("button", self.startTagButton),
(("applet", "marquee", "object"), self.startTagAppletMarqueeObject),
@@ -961,21 +912,21 @@ def getPhases(debug):
self.startTagHandler.default = self.startTagOther
self.endTagHandler = utils.MethodDispatcher([
- ("body",self.endTagBody),
- ("html",self.endTagHtml),
- (("address", "article", "aside", "blockquote", "center",
- "details", "dir", "div", "dl", "fieldset", "figcaption", "figure",
- "footer", "header", "hgroup", "listing", "menu", "nav", "ol", "pre",
+ ("body", self.endTagBody),
+ ("html", self.endTagHtml),
+ (("address", "article", "aside", "blockquote", "button", "center",
+ "details", "dialog", "dir", "div", "dl", "fieldset", "figcaption", "figure",
+ "footer", "header", "hgroup", "listing", "main", "menu", "nav", "ol", "pre",
"section", "summary", "ul"), self.endTagBlock),
("form", self.endTagForm),
- ("p",self.endTagP),
+ ("p", self.endTagP),
(("dd", "dt", "li"), self.endTagListItem),
(headingElements, self.endTagHeading),
(("a", "b", "big", "code", "em", "font", "i", "nobr", "s", "small",
"strike", "strong", "tt", "u"), self.endTagFormatting),
- (("applet", "marquee", "object"), self.endTagAppletMarqueeObject),
+ (("applet", "marquee", "object"), self.endTagAppletMarqueeObject),
("br", self.endTagBr),
- ])
+ ])
self.endTagHandler.default = self.endTagOther
def isMatchingFormattingElement(self, node1, node2):
@@ -995,14 +946,14 @@ def getPhases(debug):
def addFormattingElement(self, token):
self.tree.insertElement(token)
element = self.tree.openElements[-1]
-
+
matchingElements = []
for node in self.tree.activeFormattingElements[::-1]:
if node is Marker:
break
elif self.isMatchingFormattingElement(node, element):
matchingElements.append(node)
-
+
assert len(matchingElements) <= 3
if len(matchingElements) == 3:
self.tree.activeFormattingElements.remove(matchingElements[-1])
@@ -1017,7 +968,7 @@ def getPhases(debug):
if node.name not in allowed_elements:
self.parser.parseError("expected-closing-tag-but-got-eof")
break
- #Stop parsing
+ # Stop parsing
def processSpaceCharactersDropNewline(self, token):
# Sometimes (start of , , and
-#errors
-Line: 1 Col: 9 Unexpected end tag (strong). Expected DOCTYPE.
-Line: 1 Col: 9 Unexpected end tag (strong) after the (implied) root element.
-Line: 1 Col: 13 Unexpected end tag (b) after the (implied) root element.
-Line: 1 Col: 18 Unexpected end tag (em) after the (implied) root element.
-Line: 1 Col: 22 Unexpected end tag (i) after the (implied) root element.
-Line: 1 Col: 26 Unexpected end tag (u) after the (implied) root element.
-Line: 1 Col: 35 Unexpected end tag (strike) after the (implied) root element.
-Line: 1 Col: 39 Unexpected end tag (s) after the (implied) root element.
-Line: 1 Col: 47 Unexpected end tag (blink) after the (implied) root element.
-Line: 1 Col: 52 Unexpected end tag (tt) after the (implied) root element.
-Line: 1 Col: 58 Unexpected end tag (pre) after the (implied) root element.
-Line: 1 Col: 64 Unexpected end tag (big) after the (implied) root element.
-Line: 1 Col: 72 Unexpected end tag (small) after the (implied) root element.
-Line: 1 Col: 79 Unexpected end tag (font) after the (implied) root element.
-Line: 1 Col: 88 Unexpected end tag (select) after the (implied) root element.
-Line: 1 Col: 93 Unexpected end tag (h1) after the (implied) root element.
-Line: 1 Col: 98 Unexpected end tag (h2) after the (implied) root element.
-Line: 1 Col: 103 Unexpected end tag (h3) after the (implied) root element.
-Line: 1 Col: 108 Unexpected end tag (h4) after the (implied) root element.
-Line: 1 Col: 113 Unexpected end tag (h5) after the (implied) root element.
-Line: 1 Col: 118 Unexpected end tag (h6) after the (implied) root element.
-Line: 1 Col: 125 Unexpected end tag (body) after the (implied) root element.
-Line: 1 Col: 130 Unexpected end tag (br). Treated as br element.
-Line: 1 Col: 134 End tag (a) violates step 1, paragraph 1 of the adoption agency algorithm.
-Line: 1 Col: 140 This element (img) has no end tag.
-Line: 1 Col: 148 Unexpected end tag (title). Ignored.
-Line: 1 Col: 155 Unexpected end tag (span). Ignored.
-Line: 1 Col: 163 Unexpected end tag (style). Ignored.
-Line: 1 Col: 172 Unexpected end tag (script). Ignored.
-Line: 1 Col: 180 Unexpected end tag (table). Ignored.
-Line: 1 Col: 185 Unexpected end tag (th). Ignored.
-Line: 1 Col: 190 Unexpected end tag (td). Ignored.
-Line: 1 Col: 195 Unexpected end tag (tr). Ignored.
-Line: 1 Col: 203 This element (frame) has no end tag.
-Line: 1 Col: 210 This element (area) has no end tag.
-Line: 1 Col: 217 Unexpected end tag (link). Ignored.
-Line: 1 Col: 225 This element (param) has no end tag.
-Line: 1 Col: 230 This element (hr) has no end tag.
-Line: 1 Col: 238 This element (input) has no end tag.
-Line: 1 Col: 244 Unexpected end tag (col). Ignored.
-Line: 1 Col: 251 Unexpected end tag (base). Ignored.
-Line: 1 Col: 258 Unexpected end tag (meta). Ignored.
-Line: 1 Col: 269 This element (basefont) has no end tag.
-Line: 1 Col: 279 This element (bgsound) has no end tag.
-Line: 1 Col: 287 This element (embed) has no end tag.
-Line: 1 Col: 296 This element (spacer) has no end tag.
-Line: 1 Col: 300 Unexpected end tag (p). Ignored.
-Line: 1 Col: 305 End tag (dd) seen too early. Expected other end tag.
-Line: 1 Col: 310 End tag (dt) seen too early. Expected other end tag.
-Line: 1 Col: 320 Unexpected end tag (caption). Ignored.
-Line: 1 Col: 331 Unexpected end tag (colgroup). Ignored.
-Line: 1 Col: 339 Unexpected end tag (tbody). Ignored.
-Line: 1 Col: 347 Unexpected end tag (tfoot). Ignored.
-Line: 1 Col: 355 Unexpected end tag (thead). Ignored.
-Line: 1 Col: 365 End tag (address) seen too early. Expected other end tag.
-Line: 1 Col: 378 End tag (blockquote) seen too early. Expected other end tag.
-Line: 1 Col: 387 End tag (center) seen too early. Expected other end tag.
-Line: 1 Col: 393 Unexpected end tag (dir). Ignored.
-Line: 1 Col: 399 End tag (div) seen too early. Expected other end tag.
-Line: 1 Col: 404 End tag (dl) seen too early. Expected other end tag.
-Line: 1 Col: 415 End tag (fieldset) seen too early. Expected other end tag.
-Line: 1 Col: 425 End tag (listing) seen too early. Expected other end tag.
-Line: 1 Col: 432 End tag (menu) seen too early. Expected other end tag.
-Line: 1 Col: 437 End tag (ol) seen too early. Expected other end tag.
-Line: 1 Col: 442 End tag (ul) seen too early. Expected other end tag.
-Line: 1 Col: 447 End tag (li) seen too early. Expected other end tag.
-Line: 1 Col: 454 End tag (nobr) violates step 1, paragraph 1 of the adoption agency algorithm.
-Line: 1 Col: 460 This element (wbr) has no end tag.
-Line: 1 Col: 476 End tag (button) seen too early. Expected other end tag.
-Line: 1 Col: 486 End tag (marquee) seen too early. Expected other end tag.
-Line: 1 Col: 495 End tag (object) seen too early. Expected other end tag.
-Line: 1 Col: 513 Unexpected end tag (html). Ignored.
-Line: 1 Col: 513 Unexpected end tag (frameset). Ignored.
-Line: 1 Col: 520 Unexpected end tag (head). Ignored.
-Line: 1 Col: 529 Unexpected end tag (iframe). Ignored.
-Line: 1 Col: 537 This element (image) has no end tag.
-Line: 1 Col: 547 This element (isindex) has no end tag.
-Line: 1 Col: 557 Unexpected end tag (noembed). Ignored.
-Line: 1 Col: 568 Unexpected end tag (noframes). Ignored.
-Line: 1 Col: 579 Unexpected end tag (noscript). Ignored.
-Line: 1 Col: 590 Unexpected end tag (optgroup). Ignored.
-Line: 1 Col: 599 Unexpected end tag (option). Ignored.
-Line: 1 Col: 611 Unexpected end tag (plaintext). Ignored.
-Line: 1 Col: 622 Unexpected end tag (textarea). Ignored.
-#document
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
-Line: 1 Col: 20 Unexpected end tag (strong) in table context caused voodoo mode.
-Line: 1 Col: 20 End tag (strong) violates step 1, paragraph 1 of the adoption agency algorithm.
-Line: 1 Col: 24 Unexpected end tag (b) in table context caused voodoo mode.
-Line: 1 Col: 24 End tag (b) violates step 1, paragraph 1 of the adoption agency algorithm.
-Line: 1 Col: 29 Unexpected end tag (em) in table context caused voodoo mode.
-Line: 1 Col: 29 End tag (em) violates step 1, paragraph 1 of the adoption agency algorithm.
-Line: 1 Col: 33 Unexpected end tag (i) in table context caused voodoo mode.
-Line: 1 Col: 33 End tag (i) violates step 1, paragraph 1 of the adoption agency algorithm.
-Line: 1 Col: 37 Unexpected end tag (u) in table context caused voodoo mode.
-Line: 1 Col: 37 End tag (u) violates step 1, paragraph 1 of the adoption agency algorithm.
-Line: 1 Col: 46 Unexpected end tag (strike) in table context caused voodoo mode.
-Line: 1 Col: 46 End tag (strike) violates step 1, paragraph 1 of the adoption agency algorithm.
-Line: 1 Col: 50 Unexpected end tag (s) in table context caused voodoo mode.
-Line: 1 Col: 50 End tag (s) violates step 1, paragraph 1 of the adoption agency algorithm.
-Line: 1 Col: 58 Unexpected end tag (blink) in table context caused voodoo mode.
-Line: 1 Col: 58 Unexpected end tag (blink). Ignored.
-Line: 1 Col: 63 Unexpected end tag (tt) in table context caused voodoo mode.
-Line: 1 Col: 63 End tag (tt) violates step 1, paragraph 1 of the adoption agency algorithm.
-Line: 1 Col: 69 Unexpected end tag (pre) in table context caused voodoo mode.
-Line: 1 Col: 69 End tag (pre) seen too early. Expected other end tag.
-Line: 1 Col: 75 Unexpected end tag (big) in table context caused voodoo mode.
-Line: 1 Col: 75 End tag (big) violates step 1, paragraph 1 of the adoption agency algorithm.
-Line: 1 Col: 83 Unexpected end tag (small) in table context caused voodoo mode.
-Line: 1 Col: 83 End tag (small) violates step 1, paragraph 1 of the adoption agency algorithm.
-Line: 1 Col: 90 Unexpected end tag (font) in table context caused voodoo mode.
-Line: 1 Col: 90 End tag (font) violates step 1, paragraph 1 of the adoption agency algorithm.
-Line: 1 Col: 99 Unexpected end tag (select) in table context caused voodoo mode.
-Line: 1 Col: 99 Unexpected end tag (select). Ignored.
-Line: 1 Col: 104 Unexpected end tag (h1) in table context caused voodoo mode.
-Line: 1 Col: 104 End tag (h1) seen too early. Expected other end tag.
-Line: 1 Col: 109 Unexpected end tag (h2) in table context caused voodoo mode.
-Line: 1 Col: 109 End tag (h2) seen too early. Expected other end tag.
-Line: 1 Col: 114 Unexpected end tag (h3) in table context caused voodoo mode.
-Line: 1 Col: 114 End tag (h3) seen too early. Expected other end tag.
-Line: 1 Col: 119 Unexpected end tag (h4) in table context caused voodoo mode.
-Line: 1 Col: 119 End tag (h4) seen too early. Expected other end tag.
-Line: 1 Col: 124 Unexpected end tag (h5) in table context caused voodoo mode.
-Line: 1 Col: 124 End tag (h5) seen too early. Expected other end tag.
-Line: 1 Col: 129 Unexpected end tag (h6) in table context caused voodoo mode.
-Line: 1 Col: 129 End tag (h6) seen too early. Expected other end tag.
-Line: 1 Col: 136 Unexpected end tag (body) in the table row phase. Ignored.
-Line: 1 Col: 141 Unexpected end tag (br) in table context caused voodoo mode.
-Line: 1 Col: 141 Unexpected end tag (br). Treated as br element.
-Line: 1 Col: 145 Unexpected end tag (a) in table context caused voodoo mode.
-Line: 1 Col: 145 End tag (a) violates step 1, paragraph 1 of the adoption agency algorithm.
-Line: 1 Col: 151 Unexpected end tag (img) in table context caused voodoo mode.
-Line: 1 Col: 151 This element (img) has no end tag.
-Line: 1 Col: 159 Unexpected end tag (title) in table context caused voodoo mode.
-Line: 1 Col: 159 Unexpected end tag (title). Ignored.
-Line: 1 Col: 166 Unexpected end tag (span) in table context caused voodoo mode.
-Line: 1 Col: 166 Unexpected end tag (span). Ignored.
-Line: 1 Col: 174 Unexpected end tag (style) in table context caused voodoo mode.
-Line: 1 Col: 174 Unexpected end tag (style). Ignored.
-Line: 1 Col: 183 Unexpected end tag (script) in table context caused voodoo mode.
-Line: 1 Col: 183 Unexpected end tag (script). Ignored.
-Line: 1 Col: 196 Unexpected end tag (th). Ignored.
-Line: 1 Col: 201 Unexpected end tag (td). Ignored.
-Line: 1 Col: 206 Unexpected end tag (tr). Ignored.
-Line: 1 Col: 214 This element (frame) has no end tag.
-Line: 1 Col: 221 This element (area) has no end tag.
-Line: 1 Col: 228 Unexpected end tag (link). Ignored.
-Line: 1 Col: 236 This element (param) has no end tag.
-Line: 1 Col: 241 This element (hr) has no end tag.
-Line: 1 Col: 249 This element (input) has no end tag.
-Line: 1 Col: 255 Unexpected end tag (col). Ignored.
-Line: 1 Col: 262 Unexpected end tag (base). Ignored.
-Line: 1 Col: 269 Unexpected end tag (meta). Ignored.
-Line: 1 Col: 280 This element (basefont) has no end tag.
-Line: 1 Col: 290 This element (bgsound) has no end tag.
-Line: 1 Col: 298 This element (embed) has no end tag.
-Line: 1 Col: 307 This element (spacer) has no end tag.
-Line: 1 Col: 311 Unexpected end tag (p). Ignored.
-Line: 1 Col: 316 End tag (dd) seen too early. Expected other end tag.
-Line: 1 Col: 321 End tag (dt) seen too early. Expected other end tag.
-Line: 1 Col: 331 Unexpected end tag (caption). Ignored.
-Line: 1 Col: 342 Unexpected end tag (colgroup). Ignored.
-Line: 1 Col: 350 Unexpected end tag (tbody). Ignored.
-Line: 1 Col: 358 Unexpected end tag (tfoot). Ignored.
-Line: 1 Col: 366 Unexpected end tag (thead). Ignored.
-Line: 1 Col: 376 End tag (address) seen too early. Expected other end tag.
-Line: 1 Col: 389 End tag (blockquote) seen too early. Expected other end tag.
-Line: 1 Col: 398 End tag (center) seen too early. Expected other end tag.
-Line: 1 Col: 404 Unexpected end tag (dir). Ignored.
-Line: 1 Col: 410 End tag (div) seen too early. Expected other end tag.
-Line: 1 Col: 415 End tag (dl) seen too early. Expected other end tag.
-Line: 1 Col: 426 End tag (fieldset) seen too early. Expected other end tag.
-Line: 1 Col: 436 End tag (listing) seen too early. Expected other end tag.
-Line: 1 Col: 443 End tag (menu) seen too early. Expected other end tag.
-Line: 1 Col: 448 End tag (ol) seen too early. Expected other end tag.
-Line: 1 Col: 453 End tag (ul) seen too early. Expected other end tag.
-Line: 1 Col: 458 End tag (li) seen too early. Expected other end tag.
-Line: 1 Col: 465 End tag (nobr) violates step 1, paragraph 1 of the adoption agency algorithm.
-Line: 1 Col: 471 This element (wbr) has no end tag.
-Line: 1 Col: 487 End tag (button) seen too early. Expected other end tag.
-Line: 1 Col: 497 End tag (marquee) seen too early. Expected other end tag.
-Line: 1 Col: 506 End tag (object) seen too early. Expected other end tag.
-Line: 1 Col: 524 Unexpected end tag (html). Ignored.
-Line: 1 Col: 524 Unexpected end tag (frameset). Ignored.
-Line: 1 Col: 531 Unexpected end tag (head). Ignored.
-Line: 1 Col: 540 Unexpected end tag (iframe). Ignored.
-Line: 1 Col: 548 This element (image) has no end tag.
-Line: 1 Col: 558 This element (isindex) has no end tag.
-Line: 1 Col: 568 Unexpected end tag (noembed). Ignored.
-Line: 1 Col: 579 Unexpected end tag (noframes). Ignored.
-Line: 1 Col: 590 Unexpected end tag (noscript). Ignored.
-Line: 1 Col: 601 Unexpected end tag (optgroup). Ignored.
-Line: 1 Col: 610 Unexpected end tag (option). Ignored.
-Line: 1 Col: 622 Unexpected end tag (plaintext). Ignored.
-Line: 1 Col: 633 Unexpected end tag (textarea). Ignored.
-#document
-|
-|
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-Line: 1 Col: 10 Unexpected start tag (frameset). Expected DOCTYPE.
-Line: 1 Col: 10 Expected closing tag. Unexpected end of file.
-#document
-|
-|
-|
diff --git a/lib/html5lib/tests/testdata/tree-construction/tests10.dat b/lib/html5lib/tests/testdata/tree-construction/tests10.dat
deleted file mode 100644
index 4f8df86f..00000000
--- a/lib/html5lib/tests/testdata/tree-construction/tests10.dat
+++ /dev/null
@@ -1,799 +0,0 @@
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-29: Bogus comment
-#document
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-35: Stray “svg†start tag.
-42: Stray end tag “svgâ€
-#document
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-43: Stray “svg†start tag.
-50: Stray end tag “svgâ€
-#document
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-34: Start tag “svg†seen in “tableâ€.
-41: Stray end tag “svgâ€.
-#document
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-34: Start tag “svg†seen in “tableâ€.
-46: Stray end tag “gâ€.
-53: Stray end tag “svgâ€.
-#document
-|
-|
-|
-|
-|
-|
-| "foo"
-|
-
-#data
-
-#errors
-34: Start tag “svg†seen in “tableâ€.
-46: Stray end tag “gâ€.
-58: Stray end tag “gâ€.
-65: Stray end tag “svgâ€.
-#document
-|
-|
-|
-|
-|
-|
-| "foo"
-|
-| "bar"
-|
-
-#data
-
-#errors
-41: Start tag “svg†seen in “tableâ€.
-53: Stray end tag “gâ€.
-65: Stray end tag “gâ€.
-72: Stray end tag “svgâ€.
-#document
-|
-|
-|
-|
-|
-|
-| "foo"
-|
-| "bar"
-|
-|
-
-#data
-
-#errors
-45: Start tag “svg†seen in “tableâ€.
-57: Stray end tag “gâ€.
-69: Stray end tag “gâ€.
-76: Stray end tag “svgâ€.
-#document
-|
-|
-|
-|
-|
-|
-| "foo"
-|
-| "bar"
-|
-|
-|
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-|
-|
-|
-|
-| "foo"
-|
-| "bar"
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-|
-|
-|
-|
-| "foo"
-|
-| "bar"
-|
-| "baz"
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-|
-|
-| "foo"
-|
-| "bar"
-|
-| "baz"
-
-#data
-
quux
-#errors
-70: HTML start tag “p†in a foreign namespace context.
-81: “table†closed but “caption†was still open.
-#document
-|
-|
-|
-|
-|
-|
-|
-|
-| "foo"
-|
-| "bar"
-|
-| "baz"
-|
-| "quux"
-
-#data
-
quux
-#errors
-78: “table†closed but “caption†was still open.
-78: Unclosed elements on stack.
-#document
-|
-|
-|
-|
-|
-|
-|
-|
-| "foo"
-|
-| "bar"
-| "baz"
-|
-| "quux"
-
-#data
-
quux
-#errors
-44: Start tag “svg†seen in “tableâ€.
-56: Stray end tag “gâ€.
-68: Stray end tag “gâ€.
-71: HTML start tag “p†in a foreign namespace context.
-71: Start tag “p†seen in “tableâ€.
-#document
-|
-|
-|
-|
-|
-|
-| "foo"
-|
-| "bar"
-|
-| "baz"
-|
-|
-|
-| "quux"
-
-#data
-
quux
-#errors
-50: Stray “svg†start tag.
-54: Stray “g†start tag.
-62: Stray end tag “gâ€
-66: Stray “g†start tag.
-74: Stray end tag “gâ€
-77: Stray “p†start tag.
-88: “table†end tag with “select†open.
-#document
-|
-|
-|
-|
-|
-|
-|
-|
-|
-| "foobarbaz"
-|
-| "quux"
-
-#data
-
quux
-#errors
-36: Start tag “select†seen in “tableâ€.
-42: Stray “svg†start tag.
-46: Stray “g†start tag.
-54: Stray end tag “gâ€
-58: Stray “g†start tag.
-66: Stray end tag “gâ€
-69: Stray “p†start tag.
-80: “table†end tag with “select†open.
-#document
-|
-|
-|
-|
-|
-| "foobarbaz"
-|
-|
-| "quux"
-
-#data
-
foo bar baz
-#errors
-41: Stray “svg†start tag.
-68: HTML start tag “p†in a foreign namespace context.
-#document
-|
-|
-|
-|
-|
-|
-| "foo"
-|
-| "bar"
-|
-| "baz"
-
-#data
-
foo bar baz
-#errors
-34: Stray “svg†start tag.
-61: HTML start tag “p†in a foreign namespace context.
-#document
-|
-|
-|
-|
-|
-|
-| "foo"
-|
-| "bar"
-|
-| "baz"
-
-#data
-
-#errors
-31: Stray “svg†start tag.
-35: Stray “g†start tag.
-40: Stray end tag “gâ€
-44: Stray “g†start tag.
-49: Stray end tag “gâ€
-52: Stray “p†start tag.
-58: Stray “span†start tag.
-58: End of file seen and there were open elements.
-#document
-|
-|
-|
-|
-
-#data
-
-#errors
-42: Stray “svg†start tag.
-46: Stray “g†start tag.
-51: Stray end tag “gâ€
-55: Stray “g†start tag.
-60: Stray end tag “gâ€
-63: Stray “p†start tag.
-69: Stray “span†start tag.
-#document
-|
-|
-|
-|
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-| xlink:href="foo"
-|
-| xlink href="foo"
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-| xlink:href="foo"
-| xml:lang="en"
-|
-|
-| xlink href="foo"
-| xml lang="en"
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-| xlink:href="foo"
-| xml:lang="en"
-|
-|
-| xlink href="foo"
-| xml lang="en"
-
-#data
- bar
-#errors
-#document
-|
-|
-|
-|
-| xlink:href="foo"
-| xml:lang="en"
-|
-|
-| xlink href="foo"
-| xml lang="en"
-| "bar"
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-
-#data
-
a
-#errors
-#document
-|
-|
-|
-|
-|
-| "a"
-
-#data
-a
-#errors
-#document
-|
-|
-|
-|
-|
-|
-| "a"
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-|
-
-#data
-a
-#errors
-#document
-|
-|
-|
-|
-|
-|
-|
-|
-| "a"
-
-#data
-a
-#errors
-#document
-|
-|
-|
-|
-|
-|
-|
-|
-| "a"
-
-#data
-a
-#errors
-40: HTML start tag “ul†in a foreign namespace context.
-41: End of file in a foreign namespace context.
-#document
-|
-|
-|
-|
-|
-|
-|
-|
-|
-| "a"
-
-#data
-a
-#errors
-35: HTML start tag “ul†in a foreign namespace context.
-36: End of file in a foreign namespace context.
-#document
-|
-|
-|
-|
-|
-|
-|
-|
-| "a"
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-
-#data
-
-#errors
-#document
-|
-|
-|
-|
-|
-|
-|
-
-#data
-