From 136c05a4821afd63a75a6767a36bbb2733411234 Mon Sep 17 00:00:00 2001 From: Ryan Liptak Date: Sun, 22 Dec 2024 07:09:31 -0800 Subject: [PATCH] LibWeb: Make named character references more spec-compliant and efficient There are two changes happening here: a correctness fix, and an optimization. In theory they are unrelated, but the optimization actually paves the way for the correctness fix. Before this commit, the HTML tokenizer would attempt to look for named character references by checking from after the `&` until the end of m_decoded_input, which meant that it was unable to recognize things like named character references that are inserted via `document.write` one byte at a time. For example, if `∉` was written one-byte-at-a-time with `document.write`, then the tokenizer would only check against `n` since that's all that would exist at the time of the check and therefore erroneously conclude that it was an invalid named character reference. This commit modifies the approach taken for named character reference matching by using a trie-like structure (specifically, a deterministic acyclic finite state automaton or DAFSA), which allows for efficiently matching one-character-at-a-time and therefore it is able to pick up matching where it left off after each code point is consumed. Note: Because it's possible for a partial match to not actually develop into a full match (e.g. `¬indo` which could lead to `⋵̸`), some backtracking is performed after-the-fact in order to only consume the code points within the longest match found (e.g. `¬indo` would backtrack back to `¬`). With this new approach, `document.write` being called one-byte-at-a-time is handled correctly, which allows for passing more WPT tests, with the most directly relevant tests being `/html/syntax/parsing/html5lib_entities01.html` and `/html/syntax/parsing/html5lib_entities02.html` when run with `?run_type=write_single`. Additionally, the implementation now better conforms to the language of the spec (and resolves a FIXME) because exactly the matched characters are consumed and nothing more, so SWITCH_TO is able to be used as the spec says instead of RECONSUME_IN. The new approach is also an optimization: - Instead of a linear search using `starts_with`, the usage of a DAFSA means that it is always aware of which characters can lead to a match at any given point, and will bail out whenever a match is no longer possible. - The DAFSA is able to take advantage of the note in the section `13.5 Named character references` that says "This list is static and will not be expanded or changed in the future." and tailor its Node struct accordingly to tightly pack each node's data into 32-bits. Together with the inherent DAFSA property of redundant node deduplication, the amount of data stored for named character reference matching is minimized. In my testing: - A benchmark tokenizing an arbitrary set of HTML test files was about 1.23x faster (2070ms to 1682ms). - A benchmark tokenizing a file with tens of thousands of named character references mixed in with truncated named character references and arbitrary ASCII characters/ampersands runs about 8x faster (758ms to 93ms). - The size of `liblagom-web.so` was reduced by 94.96KiB. Some technical details: A DAFSA (deterministic acyclic finite state automaton) is essentially a trie flattened into an array, but it also uses techniques to minimize redundant nodes. This provides fast lookups while minimizing the required data size, but normally does not allow for associating data related to each word. However, by adding a count of the number of possible words from each node, it becomes possible to also use it to achieve minimal perfect hashing for the set of words (which allows going from word -> unique index as well as unique index -> word). This allows us to store a second array of data so that the DAFSA can be used as a lookup for e.g. the associated code points. --- Libraries/LibWeb/CMakeLists.txt | 3 + Libraries/LibWeb/HTML/Parser/Entities.cpp | 2276 +---------------- Libraries/LibWeb/HTML/Parser/Entities.h | 45 +- Libraries/LibWeb/HTML/Parser/Entities.json | 2233 ++++++++++++++++ .../LibWeb/HTML/Parser/HTMLTokenizer.cpp | 45 +- Libraries/LibWeb/HTML/Parser/HTMLTokenizer.h | 3 + Meta/CMake/libweb_generators.cmake | 23 + .../CodeGenerators/LibWeb/CMakeLists.txt | 1 + .../GenerateNamedCharacterReferences.cpp | 492 ++++ .../Tools/CodeGenerators/LibWeb/BUILD.gn | 8 + .../Userland/Libraries/LibWeb/BUILD.gn | 17 + .../syntax/parsing/ambiguous-ampersand.txt | 5 +- .../document-write/041.txt | 4 +- 13 files changed, 2867 insertions(+), 2288 deletions(-) create mode 100644 Libraries/LibWeb/HTML/Parser/Entities.json create mode 100644 Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateNamedCharacterReferences.cpp diff --git a/Libraries/LibWeb/CMakeLists.txt b/Libraries/LibWeb/CMakeLists.txt index 9c15896514fe..1f49e029d764 100644 --- a/Libraries/LibWeb/CMakeLists.txt +++ b/Libraries/LibWeb/CMakeLists.txt @@ -866,6 +866,8 @@ invoke_generator( generate_css_implementation() +generate_html_implementation() + invoke_generator( "WebGLRenderingContextImpl.cpp" Lagom::GenerateWebGLRenderingContext @@ -909,6 +911,7 @@ set(GENERATED_SOURCES WebGL/WebGLRenderingContextImpl.cpp Worker/WebWorkerClientEndpoint.h Worker/WebWorkerServerEndpoint.h + HTML/Parser/NamedCharacterReferences.cpp ) serenity_lib(LibWeb web) diff --git a/Libraries/LibWeb/HTML/Parser/Entities.cpp b/Libraries/LibWeb/HTML/Parser/Entities.cpp index a36aae23ebca..4ca0dc7e6372 100644 --- a/Libraries/LibWeb/HTML/Parser/Entities.cpp +++ b/Libraries/LibWeb/HTML/Parser/Entities.cpp @@ -6,2274 +6,24 @@ #include #include +#include namespace Web::HTML { -Optional code_points_from_entity(StringView entity) +bool NamedCharacterReferenceMatcher::update_with_ascii_char(u8 c) { - constexpr struct { - StringView entity; - u32 code_point; - } single_code_point_entities[] = { - { "AElig;"sv, 0x000C6 }, - { "AElig"sv, 0x000C6 }, - { "AMP;"sv, 0x00026 }, - { "AMP"sv, 0x00026 }, - { "Aacute;"sv, 0x000C1 }, - { "Aacute"sv, 0x000C1 }, - { "Abreve;"sv, 0x00102 }, - { "Acirc;"sv, 0x000C2 }, - { "Acirc"sv, 0x000C2 }, - { "Acy;"sv, 0x00410 }, - { "Afr;"sv, 0x1D504 }, - { "Agrave;"sv, 0x000C0 }, - { "Agrave"sv, 0x000C0 }, - { "Alpha;"sv, 0x00391 }, - { "Amacr;"sv, 0x00100 }, - { "And;"sv, 0x02A53 }, - { "Aogon;"sv, 0x00104 }, - { "Aopf;"sv, 0x1D538 }, - { "ApplyFunction;"sv, 0x02061 }, - { "Aring;"sv, 0x000C5 }, - { "Aring"sv, 0x000C5 }, - { "Ascr;"sv, 0x1D49C }, - { "Assign;"sv, 0x02254 }, - { "Atilde;"sv, 0x000C3 }, - { "Atilde"sv, 0x000C3 }, - { "Auml;"sv, 0x000C4 }, - { "Auml"sv, 0x000C4 }, - { "Backslash;"sv, 0x02216 }, - { "Barv;"sv, 0x02AE7 }, - { "Barwed;"sv, 0x02306 }, - { "Bcy;"sv, 0x00411 }, - { "Because;"sv, 0x02235 }, - { "Bernoullis;"sv, 0x0212C }, - { "Beta;"sv, 0x00392 }, - { "Bfr;"sv, 0x1D505 }, - { "Bopf;"sv, 0x1D539 }, - { "Breve;"sv, 0x002D8 }, - { "Bscr;"sv, 0x0212C }, - { "Bumpeq;"sv, 0x0224E }, - { "CHcy;"sv, 0x00427 }, - { "COPY;"sv, 0x000A9 }, - { "COPY"sv, 0x000A9 }, - { "Cacute;"sv, 0x00106 }, - { "Cap;"sv, 0x022D2 }, - { "CapitalDifferentialD;"sv, 0x02145 }, - { "Cayleys;"sv, 0x0212D }, - { "Ccaron;"sv, 0x0010C }, - { "Ccedil;"sv, 0x000C7 }, - { "Ccedil"sv, 0x000C7 }, - { "Ccirc;"sv, 0x00108 }, - { "Cconint;"sv, 0x02230 }, - { "Cdot;"sv, 0x0010A }, - { "Cedilla;"sv, 0x000B8 }, - { "CenterDot;"sv, 0x000B7 }, - { "Cfr;"sv, 0x0212D }, - { "Chi;"sv, 0x003A7 }, - { "CircleDot;"sv, 0x02299 }, - { "CircleMinus;"sv, 0x02296 }, - { "CirclePlus;"sv, 0x02295 }, - { "CircleTimes;"sv, 0x02297 }, - { "ClockwiseContourIntegral;"sv, 0x02232 }, - { "CloseCurlyDoubleQuote;"sv, 0x0201D }, - { "CloseCurlyQuote;"sv, 0x02019 }, - { "Colon;"sv, 0x02237 }, - { "Colone;"sv, 0x02A74 }, - { "Congruent;"sv, 0x02261 }, - { "Conint;"sv, 0x0222F }, - { "ContourIntegral;"sv, 0x0222E }, - { "Copf;"sv, 0x02102 }, - { "Coproduct;"sv, 0x02210 }, - { "CounterClockwiseContourIntegral;"sv, 0x02233 }, - { "Cross;"sv, 0x02A2F }, - { "Cscr;"sv, 0x1D49E }, - { "Cup;"sv, 0x022D3 }, - { "CupCap;"sv, 0x0224D }, - { "DD;"sv, 0x02145 }, - { "DDotrahd;"sv, 0x02911 }, - { "DJcy;"sv, 0x00402 }, - { "DScy;"sv, 0x00405 }, - { "DZcy;"sv, 0x0040F }, - { "Dagger;"sv, 0x02021 }, - { "Darr;"sv, 0x021A1 }, - { "Dashv;"sv, 0x02AE4 }, - { "Dcaron;"sv, 0x0010E }, - { "Dcy;"sv, 0x00414 }, - { "Del;"sv, 0x02207 }, - { "Delta;"sv, 0x00394 }, - { "Dfr;"sv, 0x1D507 }, - { "DiacriticalAcute;"sv, 0x000B4 }, - { "DiacriticalDot;"sv, 0x002D9 }, - { "DiacriticalDoubleAcute;"sv, 0x002DD }, - { "DiacriticalGrave;"sv, 0x00060 }, - { "DiacriticalTilde;"sv, 0x002DC }, - { "Diamond;"sv, 0x022C4 }, - { "DifferentialD;"sv, 0x02146 }, - { "Dopf;"sv, 0x1D53B }, - { "Dot;"sv, 0x000A8 }, - { "DotDot;"sv, 0x020DC }, - { "DotEqual;"sv, 0x02250 }, - { "DoubleContourIntegral;"sv, 0x0222F }, - { "DoubleDot;"sv, 0x000A8 }, - { "DoubleDownArrow;"sv, 0x021D3 }, - { "DoubleLeftArrow;"sv, 0x021D0 }, - { "DoubleLeftRightArrow;"sv, 0x021D4 }, - { "DoubleLeftTee;"sv, 0x02AE4 }, - { "DoubleLongLeftArrow;"sv, 0x027F8 }, - { "DoubleLongLeftRightArrow;"sv, 0x027FA }, - { "DoubleLongRightArrow;"sv, 0x027F9 }, - { "DoubleRightArrow;"sv, 0x021D2 }, - { "DoubleRightTee;"sv, 0x022A8 }, - { "DoubleUpArrow;"sv, 0x021D1 }, - { "DoubleUpDownArrow;"sv, 0x021D5 }, - { "DoubleVerticalBar;"sv, 0x02225 }, - { "DownArrow;"sv, 0x02193 }, - { "DownArrowBar;"sv, 0x02913 }, - { "DownArrowUpArrow;"sv, 0x021F5 }, - { "DownBreve;"sv, 0x00311 }, - { "DownLeftRightVector;"sv, 0x02950 }, - { "DownLeftTeeVector;"sv, 0x0295E }, - { "DownLeftVector;"sv, 0x021BD }, - { "DownLeftVectorBar;"sv, 0x02956 }, - { "DownRightTeeVector;"sv, 0x0295F }, - { "DownRightVector;"sv, 0x021C1 }, - { "DownRightVectorBar;"sv, 0x02957 }, - { "DownTee;"sv, 0x022A4 }, - { "DownTeeArrow;"sv, 0x021A7 }, - { "Downarrow;"sv, 0x021D3 }, - { "Dscr;"sv, 0x1D49F }, - { "Dstrok;"sv, 0x00110 }, - { "ENG;"sv, 0x0014A }, - { "ETH;"sv, 0x000D0 }, - { "ETH"sv, 0x000D0 }, - { "Eacute;"sv, 0x000C9 }, - { "Eacute"sv, 0x000C9 }, - { "Ecaron;"sv, 0x0011A }, - { "Ecirc;"sv, 0x000CA }, - { "Ecirc"sv, 0x000CA }, - { "Ecy;"sv, 0x0042D }, - { "Edot;"sv, 0x00116 }, - { "Efr;"sv, 0x1D508 }, - { "Egrave;"sv, 0x000C8 }, - { "Egrave"sv, 0x000C8 }, - { "Element;"sv, 0x02208 }, - { "Emacr;"sv, 0x00112 }, - { "EmptySmallSquare;"sv, 0x025FB }, - { "EmptyVerySmallSquare;"sv, 0x025AB }, - { "Eogon;"sv, 0x00118 }, - { "Eopf;"sv, 0x1D53C }, - { "Epsilon;"sv, 0x00395 }, - { "Equal;"sv, 0x02A75 }, - { "EqualTilde;"sv, 0x02242 }, - { "Equilibrium;"sv, 0x021CC }, - { "Escr;"sv, 0x02130 }, - { "Esim;"sv, 0x02A73 }, - { "Eta;"sv, 0x00397 }, - { "Euml;"sv, 0x000CB }, - { "Euml"sv, 0x000CB }, - { "Exists;"sv, 0x02203 }, - { "ExponentialE;"sv, 0x02147 }, - { "Fcy;"sv, 0x00424 }, - { "Ffr;"sv, 0x1D509 }, - { "FilledSmallSquare;"sv, 0x025FC }, - { "FilledVerySmallSquare;"sv, 0x025AA }, - { "Fopf;"sv, 0x1D53D }, - { "ForAll;"sv, 0x02200 }, - { "Fouriertrf;"sv, 0x02131 }, - { "Fscr;"sv, 0x02131 }, - { "GJcy;"sv, 0x00403 }, - { "GT;"sv, 0x0003E }, - { "GT"sv, 0x0003E }, - { "Gamma;"sv, 0x00393 }, - { "Gammad;"sv, 0x003DC }, - { "Gbreve;"sv, 0x0011E }, - { "Gcedil;"sv, 0x00122 }, - { "Gcirc;"sv, 0x0011C }, - { "Gcy;"sv, 0x00413 }, - { "Gdot;"sv, 0x00120 }, - { "Gfr;"sv, 0x1D50A }, - { "Gg;"sv, 0x022D9 }, - { "Gopf;"sv, 0x1D53E }, - { "GreaterEqual;"sv, 0x02265 }, - { "GreaterEqualLess;"sv, 0x022DB }, - { "GreaterFullEqual;"sv, 0x02267 }, - { "GreaterGreater;"sv, 0x02AA2 }, - { "GreaterLess;"sv, 0x02277 }, - { "GreaterSlantEqual;"sv, 0x02A7E }, - { "GreaterTilde;"sv, 0x02273 }, - { "Gscr;"sv, 0x1D4A2 }, - { "Gt;"sv, 0x0226B }, - { "HARDcy;"sv, 0x0042A }, - { "Hacek;"sv, 0x002C7 }, - { "Hat;"sv, 0x0005E }, - { "Hcirc;"sv, 0x00124 }, - { "Hfr;"sv, 0x0210C }, - { "HilbertSpace;"sv, 0x0210B }, - { "Hopf;"sv, 0x0210D }, - { "HorizontalLine;"sv, 0x02500 }, - { "Hscr;"sv, 0x0210B }, - { "Hstrok;"sv, 0x00126 }, - { "HumpDownHump;"sv, 0x0224E }, - { "HumpEqual;"sv, 0x0224F }, - { "IEcy;"sv, 0x00415 }, - { "IJlig;"sv, 0x00132 }, - { "IOcy;"sv, 0x00401 }, - { "Iacute;"sv, 0x000CD }, - { "Iacute"sv, 0x000CD }, - { "Icirc;"sv, 0x000CE }, - { "Icirc"sv, 0x000CE }, - { "Icy;"sv, 0x00418 }, - { "Idot;"sv, 0x00130 }, - { "Ifr;"sv, 0x02111 }, - { "Igrave;"sv, 0x000CC }, - { "Igrave"sv, 0x000CC }, - { "Im;"sv, 0x02111 }, - { "Imacr;"sv, 0x0012A }, - { "ImaginaryI;"sv, 0x02148 }, - { "Implies;"sv, 0x021D2 }, - { "Int;"sv, 0x0222C }, - { "Integral;"sv, 0x0222B }, - { "Intersection;"sv, 0x022C2 }, - { "InvisibleComma;"sv, 0x02063 }, - { "InvisibleTimes;"sv, 0x02062 }, - { "Iogon;"sv, 0x0012E }, - { "Iopf;"sv, 0x1D540 }, - { "Iota;"sv, 0x00399 }, - { "Iscr;"sv, 0x02110 }, - { "Itilde;"sv, 0x00128 }, - { "Iukcy;"sv, 0x00406 }, - { "Iuml;"sv, 0x000CF }, - { "Iuml"sv, 0x000CF }, - { "Jcirc;"sv, 0x00134 }, - { "Jcy;"sv, 0x00419 }, - { "Jfr;"sv, 0x1D50D }, - { "Jopf;"sv, 0x1D541 }, - { "Jscr;"sv, 0x1D4A5 }, - { "Jsercy;"sv, 0x00408 }, - { "Jukcy;"sv, 0x00404 }, - { "KHcy;"sv, 0x00425 }, - { "KJcy;"sv, 0x0040C }, - { "Kappa;"sv, 0x0039A }, - { "Kcedil;"sv, 0x00136 }, - { "Kcy;"sv, 0x0041A }, - { "Kfr;"sv, 0x1D50E }, - { "Kopf;"sv, 0x1D542 }, - { "Kscr;"sv, 0x1D4A6 }, - { "LJcy;"sv, 0x00409 }, - { "LT;"sv, 0x0003C }, - { "LT"sv, 0x0003C }, - { "Lacute;"sv, 0x00139 }, - { "Lambda;"sv, 0x0039B }, - { "Lang;"sv, 0x027EA }, - { "Laplacetrf;"sv, 0x02112 }, - { "Larr;"sv, 0x0219E }, - { "Lcaron;"sv, 0x0013D }, - { "Lcedil;"sv, 0x0013B }, - { "Lcy;"sv, 0x0041B }, - { "LeftAngleBracket;"sv, 0x027E8 }, - { "LeftArrow;"sv, 0x02190 }, - { "LeftArrowBar;"sv, 0x021E4 }, - { "LeftArrowRightArrow;"sv, 0x021C6 }, - { "LeftCeiling;"sv, 0x02308 }, - { "LeftDoubleBracket;"sv, 0x027E6 }, - { "LeftDownTeeVector;"sv, 0x02961 }, - { "LeftDownVector;"sv, 0x021C3 }, - { "LeftDownVectorBar;"sv, 0x02959 }, - { "LeftFloor;"sv, 0x0230A }, - { "LeftRightArrow;"sv, 0x02194 }, - { "LeftRightVector;"sv, 0x0294E }, - { "LeftTee;"sv, 0x022A3 }, - { "LeftTeeArrow;"sv, 0x021A4 }, - { "LeftTeeVector;"sv, 0x0295A }, - { "LeftTriangle;"sv, 0x022B2 }, - { "LeftTriangleBar;"sv, 0x029CF }, - { "LeftTriangleEqual;"sv, 0x022B4 }, - { "LeftUpDownVector;"sv, 0x02951 }, - { "LeftUpTeeVector;"sv, 0x02960 }, - { "LeftUpVector;"sv, 0x021BF }, - { "LeftUpVectorBar;"sv, 0x02958 }, - { "LeftVector;"sv, 0x021BC }, - { "LeftVectorBar;"sv, 0x02952 }, - { "Leftarrow;"sv, 0x021D0 }, - { "Leftrightarrow;"sv, 0x021D4 }, - { "LessEqualGreater;"sv, 0x022DA }, - { "LessFullEqual;"sv, 0x02266 }, - { "LessGreater;"sv, 0x02276 }, - { "LessLess;"sv, 0x02AA1 }, - { "LessSlantEqual;"sv, 0x02A7D }, - { "LessTilde;"sv, 0x02272 }, - { "Lfr;"sv, 0x1D50F }, - { "Ll;"sv, 0x022D8 }, - { "Lleftarrow;"sv, 0x021DA }, - { "Lmidot;"sv, 0x0013F }, - { "LongLeftArrow;"sv, 0x027F5 }, - { "LongLeftRightArrow;"sv, 0x027F7 }, - { "LongRightArrow;"sv, 0x027F6 }, - { "Longleftarrow;"sv, 0x027F8 }, - { "Longleftrightarrow;"sv, 0x027FA }, - { "Longrightarrow;"sv, 0x027F9 }, - { "Lopf;"sv, 0x1D543 }, - { "LowerLeftArrow;"sv, 0x02199 }, - { "LowerRightArrow;"sv, 0x02198 }, - { "Lscr;"sv, 0x02112 }, - { "Lsh;"sv, 0x021B0 }, - { "Lstrok;"sv, 0x00141 }, - { "Lt;"sv, 0x0226A }, - { "Map;"sv, 0x02905 }, - { "Mcy;"sv, 0x0041C }, - { "MediumSpace;"sv, 0x0205F }, - { "Mellintrf;"sv, 0x02133 }, - { "Mfr;"sv, 0x1D510 }, - { "MinusPlus;"sv, 0x02213 }, - { "Mopf;"sv, 0x1D544 }, - { "Mscr;"sv, 0x02133 }, - { "Mu;"sv, 0x0039C }, - { "NJcy;"sv, 0x0040A }, - { "Nacute;"sv, 0x00143 }, - { "Ncaron;"sv, 0x00147 }, - { "Ncedil;"sv, 0x00145 }, - { "Ncy;"sv, 0x0041D }, - { "NegativeMediumSpace;"sv, 0x0200B }, - { "NegativeThickSpace;"sv, 0x0200B }, - { "NegativeThinSpace;"sv, 0x0200B }, - { "NegativeVeryThinSpace;"sv, 0x0200B }, - { "NestedGreaterGreater;"sv, 0x0226B }, - { "NestedLessLess;"sv, 0x0226A }, - { "NewLine;"sv, 0x0000A }, - { "Nfr;"sv, 0x1D511 }, - { "NoBreak;"sv, 0x02060 }, - { "NonBreakingSpace;"sv, 0x000A0 }, - { "Nopf;"sv, 0x02115 }, - { "Not;"sv, 0x02AEC }, - { "NotCongruent;"sv, 0x02262 }, - { "NotCupCap;"sv, 0x0226D }, - { "NotDoubleVerticalBar;"sv, 0x02226 }, - { "NotElement;"sv, 0x02209 }, - { "NotEqual;"sv, 0x02260 }, - { "NotExists;"sv, 0x02204 }, - { "NotGreater;"sv, 0x0226F }, - { "NotGreaterEqual;"sv, 0x02271 }, - { "NotGreaterLess;"sv, 0x02279 }, - { "NotGreaterTilde;"sv, 0x02275 }, - { "NotLeftTriangle;"sv, 0x022EA }, - { "NotLeftTriangleEqual;"sv, 0x022EC }, - { "NotLess;"sv, 0x0226E }, - { "NotLessEqual;"sv, 0x02270 }, - { "NotLessGreater;"sv, 0x02278 }, - { "NotLessTilde;"sv, 0x02274 }, - { "NotPrecedes;"sv, 0x02280 }, - { "NotPrecedesSlantEqual;"sv, 0x022E0 }, - { "NotReverseElement;"sv, 0x0220C }, - { "NotRightTriangle;"sv, 0x022EB }, - { "NotRightTriangleEqual;"sv, 0x022ED }, - { "NotSquareSubsetEqual;"sv, 0x022E2 }, - { "NotSquareSupersetEqual;"sv, 0x022E3 }, - { "NotSubsetEqual;"sv, 0x02288 }, - { "NotSucceeds;"sv, 0x02281 }, - { "NotSucceedsSlantEqual;"sv, 0x022E1 }, - { "NotSupersetEqual;"sv, 0x02289 }, - { "NotTilde;"sv, 0x02241 }, - { "NotTildeEqual;"sv, 0x02244 }, - { "NotTildeFullEqual;"sv, 0x02247 }, - { "NotTildeTilde;"sv, 0x02249 }, - { "NotVerticalBar;"sv, 0x02224 }, - { "Nscr;"sv, 0x1D4A9 }, - { "Ntilde;"sv, 0x000D1 }, - { "Ntilde"sv, 0x000D1 }, - { "Nu;"sv, 0x0039D }, - { "OElig;"sv, 0x00152 }, - { "Oacute;"sv, 0x000D3 }, - { "Oacute"sv, 0x000D3 }, - { "Ocirc;"sv, 0x000D4 }, - { "Ocirc"sv, 0x000D4 }, - { "Ocy;"sv, 0x0041E }, - { "Odblac;"sv, 0x00150 }, - { "Ofr;"sv, 0x1D512 }, - { "Ograve;"sv, 0x000D2 }, - { "Ograve"sv, 0x000D2 }, - { "Omacr;"sv, 0x0014C }, - { "Omega;"sv, 0x003A9 }, - { "Omicron;"sv, 0x0039F }, - { "Oopf;"sv, 0x1D546 }, - { "OpenCurlyDoubleQuote;"sv, 0x0201C }, - { "OpenCurlyQuote;"sv, 0x02018 }, - { "Or;"sv, 0x02A54 }, - { "Oscr;"sv, 0x1D4AA }, - { "Oslash;"sv, 0x000D8 }, - { "Oslash"sv, 0x000D8 }, - { "Otilde;"sv, 0x000D5 }, - { "Otilde"sv, 0x000D5 }, - { "Otimes;"sv, 0x02A37 }, - { "Ouml;"sv, 0x000D6 }, - { "Ouml"sv, 0x000D6 }, - { "OverBar;"sv, 0x0203E }, - { "OverBrace;"sv, 0x023DE }, - { "OverBracket;"sv, 0x023B4 }, - { "OverParenthesis;"sv, 0x023DC }, - { "PartialD;"sv, 0x02202 }, - { "Pcy;"sv, 0x0041F }, - { "Pfr;"sv, 0x1D513 }, - { "Phi;"sv, 0x003A6 }, - { "Pi;"sv, 0x003A0 }, - { "PlusMinus;"sv, 0x000B1 }, - { "Poincareplane;"sv, 0x0210C }, - { "Popf;"sv, 0x02119 }, - { "Pr;"sv, 0x02ABB }, - { "Precedes;"sv, 0x0227A }, - { "PrecedesEqual;"sv, 0x02AAF }, - { "PrecedesSlantEqual;"sv, 0x0227C }, - { "PrecedesTilde;"sv, 0x0227E }, - { "Prime;"sv, 0x02033 }, - { "Product;"sv, 0x0220F }, - { "Proportion;"sv, 0x02237 }, - { "Proportional;"sv, 0x0221D }, - { "Pscr;"sv, 0x1D4AB }, - { "Psi;"sv, 0x003A8 }, - { "QUOT;"sv, 0x00022 }, - { "QUOT"sv, 0x00022 }, - { "Qfr;"sv, 0x1D514 }, - { "Qopf;"sv, 0x0211A }, - { "Qscr;"sv, 0x1D4AC }, - { "RBarr;"sv, 0x02910 }, - { "REG;"sv, 0x000AE }, - { "REG"sv, 0x000AE }, - { "Racute;"sv, 0x00154 }, - { "Rang;"sv, 0x027EB }, - { "Rarr;"sv, 0x021A0 }, - { "Rarrtl;"sv, 0x02916 }, - { "Rcaron;"sv, 0x00158 }, - { "Rcedil;"sv, 0x00156 }, - { "Rcy;"sv, 0x00420 }, - { "Re;"sv, 0x0211C }, - { "ReverseElement;"sv, 0x0220B }, - { "ReverseEquilibrium;"sv, 0x021CB }, - { "ReverseUpEquilibrium;"sv, 0x0296F }, - { "Rfr;"sv, 0x0211C }, - { "Rho;"sv, 0x003A1 }, - { "RightAngleBracket;"sv, 0x027E9 }, - { "RightArrow;"sv, 0x02192 }, - { "RightArrowBar;"sv, 0x021E5 }, - { "RightArrowLeftArrow;"sv, 0x021C4 }, - { "RightCeiling;"sv, 0x02309 }, - { "RightDoubleBracket;"sv, 0x027E7 }, - { "RightDownTeeVector;"sv, 0x0295D }, - { "RightDownVector;"sv, 0x021C2 }, - { "RightDownVectorBar;"sv, 0x02955 }, - { "RightFloor;"sv, 0x0230B }, - { "RightTee;"sv, 0x022A2 }, - { "RightTeeArrow;"sv, 0x021A6 }, - { "RightTeeVector;"sv, 0x0295B }, - { "RightTriangle;"sv, 0x022B3 }, - { "RightTriangleBar;"sv, 0x029D0 }, - { "RightTriangleEqual;"sv, 0x022B5 }, - { "RightUpDownVector;"sv, 0x0294F }, - { "RightUpTeeVector;"sv, 0x0295C }, - { "RightUpVector;"sv, 0x021BE }, - { "RightUpVectorBar;"sv, 0x02954 }, - { "RightVector;"sv, 0x021C0 }, - { "RightVectorBar;"sv, 0x02953 }, - { "Rightarrow;"sv, 0x021D2 }, - { "Ropf;"sv, 0x0211D }, - { "RoundImplies;"sv, 0x02970 }, - { "Rrightarrow;"sv, 0x021DB }, - { "Rscr;"sv, 0x0211B }, - { "Rsh;"sv, 0x021B1 }, - { "RuleDelayed;"sv, 0x029F4 }, - { "SHCHcy;"sv, 0x00429 }, - { "SHcy;"sv, 0x00428 }, - { "SOFTcy;"sv, 0x0042C }, - { "Sacute;"sv, 0x0015A }, - { "Sc;"sv, 0x02ABC }, - { "Scaron;"sv, 0x00160 }, - { "Scedil;"sv, 0x0015E }, - { "Scirc;"sv, 0x0015C }, - { "Scy;"sv, 0x00421 }, - { "Sfr;"sv, 0x1D516 }, - { "ShortDownArrow;"sv, 0x02193 }, - { "ShortLeftArrow;"sv, 0x02190 }, - { "ShortRightArrow;"sv, 0x02192 }, - { "ShortUpArrow;"sv, 0x02191 }, - { "Sigma;"sv, 0x003A3 }, - { "SmallCircle;"sv, 0x02218 }, - { "Sopf;"sv, 0x1D54A }, - { "Sqrt;"sv, 0x0221A }, - { "Square;"sv, 0x025A1 }, - { "SquareIntersection;"sv, 0x02293 }, - { "SquareSubset;"sv, 0x0228F }, - { "SquareSubsetEqual;"sv, 0x02291 }, - { "SquareSuperset;"sv, 0x02290 }, - { "SquareSupersetEqual;"sv, 0x02292 }, - { "SquareUnion;"sv, 0x02294 }, - { "Sscr;"sv, 0x1D4AE }, - { "Star;"sv, 0x022C6 }, - { "Sub;"sv, 0x022D0 }, - { "Subset;"sv, 0x022D0 }, - { "SubsetEqual;"sv, 0x02286 }, - { "Succeeds;"sv, 0x0227B }, - { "SucceedsEqual;"sv, 0x02AB0 }, - { "SucceedsSlantEqual;"sv, 0x0227D }, - { "SucceedsTilde;"sv, 0x0227F }, - { "SuchThat;"sv, 0x0220B }, - { "Sum;"sv, 0x02211 }, - { "Sup;"sv, 0x022D1 }, - { "Superset;"sv, 0x02283 }, - { "SupersetEqual;"sv, 0x02287 }, - { "Supset;"sv, 0x022D1 }, - { "THORN;"sv, 0x000DE }, - { "THORN"sv, 0x000DE }, - { "TRADE;"sv, 0x02122 }, - { "TSHcy;"sv, 0x0040B }, - { "TScy;"sv, 0x00426 }, - { "Tab;"sv, 0x00009 }, - { "Tau;"sv, 0x003A4 }, - { "Tcaron;"sv, 0x00164 }, - { "Tcedil;"sv, 0x00162 }, - { "Tcy;"sv, 0x00422 }, - { "Tfr;"sv, 0x1D517 }, - { "Therefore;"sv, 0x02234 }, - { "Theta;"sv, 0x00398 }, - { "ThinSpace;"sv, 0x02009 }, - { "Tilde;"sv, 0x0223C }, - { "TildeEqual;"sv, 0x02243 }, - { "TildeFullEqual;"sv, 0x02245 }, - { "TildeTilde;"sv, 0x02248 }, - { "Topf;"sv, 0x1D54B }, - { "TripleDot;"sv, 0x020DB }, - { "Tscr;"sv, 0x1D4AF }, - { "Tstrok;"sv, 0x00166 }, - { "Uacute;"sv, 0x000DA }, - { "Uacute"sv, 0x000DA }, - { "Uarr;"sv, 0x0219F }, - { "Uarrocir;"sv, 0x02949 }, - { "Ubrcy;"sv, 0x0040E }, - { "Ubreve;"sv, 0x0016C }, - { "Ucirc;"sv, 0x000DB }, - { "Ucirc"sv, 0x000DB }, - { "Ucy;"sv, 0x00423 }, - { "Udblac;"sv, 0x00170 }, - { "Ufr;"sv, 0x1D518 }, - { "Ugrave;"sv, 0x000D9 }, - { "Ugrave"sv, 0x000D9 }, - { "Umacr;"sv, 0x0016A }, - { "UnderBar;"sv, 0x0005F }, - { "UnderBrace;"sv, 0x023DF }, - { "UnderBracket;"sv, 0x023B5 }, - { "UnderParenthesis;"sv, 0x023DD }, - { "Union;"sv, 0x022C3 }, - { "UnionPlus;"sv, 0x0228E }, - { "Uogon;"sv, 0x00172 }, - { "Uopf;"sv, 0x1D54C }, - { "UpArrow;"sv, 0x02191 }, - { "UpArrowBar;"sv, 0x02912 }, - { "UpArrowDownArrow;"sv, 0x021C5 }, - { "UpDownArrow;"sv, 0x02195 }, - { "UpEquilibrium;"sv, 0x0296E }, - { "UpTee;"sv, 0x022A5 }, - { "UpTeeArrow;"sv, 0x021A5 }, - { "Uparrow;"sv, 0x021D1 }, - { "Updownarrow;"sv, 0x021D5 }, - { "UpperLeftArrow;"sv, 0x02196 }, - { "UpperRightArrow;"sv, 0x02197 }, - { "Upsi;"sv, 0x003D2 }, - { "Upsilon;"sv, 0x003A5 }, - { "Uring;"sv, 0x0016E }, - { "Uscr;"sv, 0x1D4B0 }, - { "Utilde;"sv, 0x00168 }, - { "Uuml;"sv, 0x000DC }, - { "Uuml"sv, 0x000DC }, - { "VDash;"sv, 0x022AB }, - { "Vbar;"sv, 0x02AEB }, - { "Vcy;"sv, 0x00412 }, - { "Vdash;"sv, 0x022A9 }, - { "Vdashl;"sv, 0x02AE6 }, - { "Vee;"sv, 0x022C1 }, - { "Verbar;"sv, 0x02016 }, - { "Vert;"sv, 0x02016 }, - { "VerticalBar;"sv, 0x02223 }, - { "VerticalLine;"sv, 0x0007C }, - { "VerticalSeparator;"sv, 0x02758 }, - { "VerticalTilde;"sv, 0x02240 }, - { "VeryThinSpace;"sv, 0x0200A }, - { "Vfr;"sv, 0x1D519 }, - { "Vopf;"sv, 0x1D54D }, - { "Vscr;"sv, 0x1D4B1 }, - { "Vvdash;"sv, 0x022AA }, - { "Wcirc;"sv, 0x00174 }, - { "Wedge;"sv, 0x022C0 }, - { "Wfr;"sv, 0x1D51A }, - { "Wopf;"sv, 0x1D54E }, - { "Wscr;"sv, 0x1D4B2 }, - { "Xfr;"sv, 0x1D51B }, - { "Xi;"sv, 0x0039E }, - { "Xopf;"sv, 0x1D54F }, - { "Xscr;"sv, 0x1D4B3 }, - { "YAcy;"sv, 0x0042F }, - { "YIcy;"sv, 0x00407 }, - { "YUcy;"sv, 0x0042E }, - { "Yacute;"sv, 0x000DD }, - { "Yacute"sv, 0x000DD }, - { "Ycirc;"sv, 0x00176 }, - { "Ycy;"sv, 0x0042B }, - { "Yfr;"sv, 0x1D51C }, - { "Yopf;"sv, 0x1D550 }, - { "Yscr;"sv, 0x1D4B4 }, - { "Yuml;"sv, 0x00178 }, - { "ZHcy;"sv, 0x00416 }, - { "Zacute;"sv, 0x00179 }, - { "Zcaron;"sv, 0x0017D }, - { "Zcy;"sv, 0x00417 }, - { "Zdot;"sv, 0x0017B }, - { "ZeroWidthSpace;"sv, 0x0200B }, - { "Zeta;"sv, 0x00396 }, - { "Zfr;"sv, 0x02128 }, - { "Zopf;"sv, 0x02124 }, - { "Zscr;"sv, 0x1D4B5 }, - { "aacute;"sv, 0x000E1 }, - { "aacute"sv, 0x000E1 }, - { "abreve;"sv, 0x00103 }, - { "ac;"sv, 0x0223E }, - { "acd;"sv, 0x0223F }, - { "acirc;"sv, 0x000E2 }, - { "acirc"sv, 0x000E2 }, - { "acute;"sv, 0x000B4 }, - { "acute"sv, 0x000B4 }, - { "acy;"sv, 0x00430 }, - { "aelig;"sv, 0x000E6 }, - { "aelig"sv, 0x000E6 }, - { "af;"sv, 0x02061 }, - { "afr;"sv, 0x1D51E }, - { "agrave;"sv, 0x000E0 }, - { "agrave"sv, 0x000E0 }, - { "alefsym;"sv, 0x02135 }, - { "aleph;"sv, 0x02135 }, - { "alpha;"sv, 0x003B1 }, - { "amacr;"sv, 0x00101 }, - { "amalg;"sv, 0x02A3F }, - { "amp;"sv, 0x00026 }, - { "amp"sv, 0x00026 }, - { "and;"sv, 0x02227 }, - { "andand;"sv, 0x02A55 }, - { "andd;"sv, 0x02A5C }, - { "andslope;"sv, 0x02A58 }, - { "andv;"sv, 0x02A5A }, - { "ang;"sv, 0x02220 }, - { "ange;"sv, 0x029A4 }, - { "angle;"sv, 0x02220 }, - { "angmsd;"sv, 0x02221 }, - { "angmsdaa;"sv, 0x029A8 }, - { "angmsdab;"sv, 0x029A9 }, - { "angmsdac;"sv, 0x029AA }, - { "angmsdad;"sv, 0x029AB }, - { "angmsdae;"sv, 0x029AC }, - { "angmsdaf;"sv, 0x029AD }, - { "angmsdag;"sv, 0x029AE }, - { "angmsdah;"sv, 0x029AF }, - { "angrt;"sv, 0x0221F }, - { "angrtvb;"sv, 0x022BE }, - { "angrtvbd;"sv, 0x0299D }, - { "angsph;"sv, 0x02222 }, - { "angst;"sv, 0x000C5 }, - { "angzarr;"sv, 0x0237C }, - { "aogon;"sv, 0x00105 }, - { "aopf;"sv, 0x1D552 }, - { "ap;"sv, 0x02248 }, - { "apE;"sv, 0x02A70 }, - { "apacir;"sv, 0x02A6F }, - { "ape;"sv, 0x0224A }, - { "apid;"sv, 0x0224B }, - { "apos;"sv, 0x00027 }, - { "approx;"sv, 0x02248 }, - { "approxeq;"sv, 0x0224A }, - { "aring;"sv, 0x000E5 }, - { "aring"sv, 0x000E5 }, - { "ascr;"sv, 0x1D4B6 }, - { "ast;"sv, 0x0002A }, - { "asymp;"sv, 0x02248 }, - { "asympeq;"sv, 0x0224D }, - { "atilde;"sv, 0x000E3 }, - { "atilde"sv, 0x000E3 }, - { "auml;"sv, 0x000E4 }, - { "auml"sv, 0x000E4 }, - { "awconint;"sv, 0x02233 }, - { "awint;"sv, 0x02A11 }, - { "bNot;"sv, 0x02AED }, - { "backcong;"sv, 0x0224C }, - { "backepsilon;"sv, 0x003F6 }, - { "backprime;"sv, 0x02035 }, - { "backsim;"sv, 0x0223D }, - { "backsimeq;"sv, 0x022CD }, - { "barvee;"sv, 0x022BD }, - { "barwed;"sv, 0x02305 }, - { "barwedge;"sv, 0x02305 }, - { "bbrk;"sv, 0x023B5 }, - { "bbrktbrk;"sv, 0x023B6 }, - { "bcong;"sv, 0x0224C }, - { "bcy;"sv, 0x00431 }, - { "bdquo;"sv, 0x0201E }, - { "becaus;"sv, 0x02235 }, - { "because;"sv, 0x02235 }, - { "bemptyv;"sv, 0x029B0 }, - { "bepsi;"sv, 0x003F6 }, - { "bernou;"sv, 0x0212C }, - { "beta;"sv, 0x003B2 }, - { "beth;"sv, 0x02136 }, - { "between;"sv, 0x0226C }, - { "bfr;"sv, 0x1D51F }, - { "bigcap;"sv, 0x022C2 }, - { "bigcirc;"sv, 0x025EF }, - { "bigcup;"sv, 0x022C3 }, - { "bigodot;"sv, 0x02A00 }, - { "bigoplus;"sv, 0x02A01 }, - { "bigotimes;"sv, 0x02A02 }, - { "bigsqcup;"sv, 0x02A06 }, - { "bigstar;"sv, 0x02605 }, - { "bigtriangledown;"sv, 0x025BD }, - { "bigtriangleup;"sv, 0x025B3 }, - { "biguplus;"sv, 0x02A04 }, - { "bigvee;"sv, 0x022C1 }, - { "bigwedge;"sv, 0x022C0 }, - { "bkarow;"sv, 0x0290D }, - { "blacklozenge;"sv, 0x029EB }, - { "blacksquare;"sv, 0x025AA }, - { "blacktriangle;"sv, 0x025B4 }, - { "blacktriangledown;"sv, 0x025BE }, - { "blacktriangleleft;"sv, 0x025C2 }, - { "blacktriangleright;"sv, 0x025B8 }, - { "blank;"sv, 0x02423 }, - { "blk12;"sv, 0x02592 }, - { "blk14;"sv, 0x02591 }, - { "blk34;"sv, 0x02593 }, - { "block;"sv, 0x02588 }, - { "bnot;"sv, 0x02310 }, - { "bopf;"sv, 0x1D553 }, - { "bot;"sv, 0x022A5 }, - { "bottom;"sv, 0x022A5 }, - { "bowtie;"sv, 0x022C8 }, - { "boxDL;"sv, 0x02557 }, - { "boxDR;"sv, 0x02554 }, - { "boxDl;"sv, 0x02556 }, - { "boxDr;"sv, 0x02553 }, - { "boxH;"sv, 0x02550 }, - { "boxHD;"sv, 0x02566 }, - { "boxHU;"sv, 0x02569 }, - { "boxHd;"sv, 0x02564 }, - { "boxHu;"sv, 0x02567 }, - { "boxUL;"sv, 0x0255D }, - { "boxUR;"sv, 0x0255A }, - { "boxUl;"sv, 0x0255C }, - { "boxUr;"sv, 0x02559 }, - { "boxV;"sv, 0x02551 }, - { "boxVH;"sv, 0x0256C }, - { "boxVL;"sv, 0x02563 }, - { "boxVR;"sv, 0x02560 }, - { "boxVh;"sv, 0x0256B }, - { "boxVl;"sv, 0x02562 }, - { "boxVr;"sv, 0x0255F }, - { "boxbox;"sv, 0x029C9 }, - { "boxdL;"sv, 0x02555 }, - { "boxdR;"sv, 0x02552 }, - { "boxdl;"sv, 0x02510 }, - { "boxdr;"sv, 0x0250C }, - { "boxh;"sv, 0x02500 }, - { "boxhD;"sv, 0x02565 }, - { "boxhU;"sv, 0x02568 }, - { "boxhd;"sv, 0x0252C }, - { "boxhu;"sv, 0x02534 }, - { "boxminus;"sv, 0x0229F }, - { "boxplus;"sv, 0x0229E }, - { "boxtimes;"sv, 0x022A0 }, - { "boxuL;"sv, 0x0255B }, - { "boxuR;"sv, 0x02558 }, - { "boxul;"sv, 0x02518 }, - { "boxur;"sv, 0x02514 }, - { "boxv;"sv, 0x02502 }, - { "boxvH;"sv, 0x0256A }, - { "boxvL;"sv, 0x02561 }, - { "boxvR;"sv, 0x0255E }, - { "boxvh;"sv, 0x0253C }, - { "boxvl;"sv, 0x02524 }, - { "boxvr;"sv, 0x0251C }, - { "bprime;"sv, 0x02035 }, - { "breve;"sv, 0x002D8 }, - { "brvbar;"sv, 0x000A6 }, - { "brvbar"sv, 0x000A6 }, - { "bscr;"sv, 0x1D4B7 }, - { "bsemi;"sv, 0x0204F }, - { "bsim;"sv, 0x0223D }, - { "bsime;"sv, 0x022CD }, - { "bsol;"sv, 0x0005C }, - { "bsolb;"sv, 0x029C5 }, - { "bsolhsub;"sv, 0x027C8 }, - { "bull;"sv, 0x02022 }, - { "bullet;"sv, 0x02022 }, - { "bump;"sv, 0x0224E }, - { "bumpE;"sv, 0x02AAE }, - { "bumpe;"sv, 0x0224F }, - { "bumpeq;"sv, 0x0224F }, - { "cacute;"sv, 0x00107 }, - { "cap;"sv, 0x02229 }, - { "capand;"sv, 0x02A44 }, - { "capbrcup;"sv, 0x02A49 }, - { "capcap;"sv, 0x02A4B }, - { "capcup;"sv, 0x02A47 }, - { "capdot;"sv, 0x02A40 }, - { "caret;"sv, 0x02041 }, - { "caron;"sv, 0x002C7 }, - { "ccaps;"sv, 0x02A4D }, - { "ccaron;"sv, 0x0010D }, - { "ccedil;"sv, 0x000E7 }, - { "ccedil"sv, 0x000E7 }, - { "ccirc;"sv, 0x00109 }, - { "ccups;"sv, 0x02A4C }, - { "ccupssm;"sv, 0x02A50 }, - { "cdot;"sv, 0x0010B }, - { "cedil;"sv, 0x000B8 }, - { "cedil"sv, 0x000B8 }, - { "cemptyv;"sv, 0x029B2 }, - { "cent;"sv, 0x000A2 }, - { "cent"sv, 0x000A2 }, - { "centerdot;"sv, 0x000B7 }, - { "cfr;"sv, 0x1D520 }, - { "chcy;"sv, 0x00447 }, - { "check;"sv, 0x02713 }, - { "checkmark;"sv, 0x02713 }, - { "chi;"sv, 0x003C7 }, - { "cir;"sv, 0x025CB }, - { "cirE;"sv, 0x029C3 }, - { "circ;"sv, 0x002C6 }, - { "circeq;"sv, 0x02257 }, - { "circlearrowleft;"sv, 0x021BA }, - { "circlearrowright;"sv, 0x021BB }, - { "circledR;"sv, 0x000AE }, - { "circledS;"sv, 0x024C8 }, - { "circledast;"sv, 0x0229B }, - { "circledcirc;"sv, 0x0229A }, - { "circleddash;"sv, 0x0229D }, - { "cire;"sv, 0x02257 }, - { "cirfnint;"sv, 0x02A10 }, - { "cirmid;"sv, 0x02AEF }, - { "cirscir;"sv, 0x029C2 }, - { "clubs;"sv, 0x02663 }, - { "clubsuit;"sv, 0x02663 }, - { "colon;"sv, 0x0003A }, - { "colone;"sv, 0x02254 }, - { "coloneq;"sv, 0x02254 }, - { "comma;"sv, 0x0002C }, - { "commat;"sv, 0x00040 }, - { "comp;"sv, 0x02201 }, - { "compfn;"sv, 0x02218 }, - { "complement;"sv, 0x02201 }, - { "complexes;"sv, 0x02102 }, - { "cong;"sv, 0x02245 }, - { "congdot;"sv, 0x02A6D }, - { "conint;"sv, 0x0222E }, - { "copf;"sv, 0x1D554 }, - { "coprod;"sv, 0x02210 }, - { "copy;"sv, 0x000A9 }, - { "copy"sv, 0x000A9 }, - { "copysr;"sv, 0x02117 }, - { "crarr;"sv, 0x021B5 }, - { "cross;"sv, 0x02717 }, - { "cscr;"sv, 0x1D4B8 }, - { "csub;"sv, 0x02ACF }, - { "csube;"sv, 0x02AD1 }, - { "csup;"sv, 0x02AD0 }, - { "csupe;"sv, 0x02AD2 }, - { "ctdot;"sv, 0x022EF }, - { "cudarrl;"sv, 0x02938 }, - { "cudarrr;"sv, 0x02935 }, - { "cuepr;"sv, 0x022DE }, - { "cuesc;"sv, 0x022DF }, - { "cularr;"sv, 0x021B6 }, - { "cularrp;"sv, 0x0293D }, - { "cup;"sv, 0x0222A }, - { "cupbrcap;"sv, 0x02A48 }, - { "cupcap;"sv, 0x02A46 }, - { "cupcup;"sv, 0x02A4A }, - { "cupdot;"sv, 0x0228D }, - { "cupor;"sv, 0x02A45 }, - { "curarr;"sv, 0x021B7 }, - { "curarrm;"sv, 0x0293C }, - { "curlyeqprec;"sv, 0x022DE }, - { "curlyeqsucc;"sv, 0x022DF }, - { "curlyvee;"sv, 0x022CE }, - { "curlywedge;"sv, 0x022CF }, - { "curren;"sv, 0x000A4 }, - { "curren"sv, 0x000A4 }, - { "curvearrowleft;"sv, 0x021B6 }, - { "curvearrowright;"sv, 0x021B7 }, - { "cuvee;"sv, 0x022CE }, - { "cuwed;"sv, 0x022CF }, - { "cwconint;"sv, 0x02232 }, - { "cwint;"sv, 0x02231 }, - { "cylcty;"sv, 0x0232D }, - { "dArr;"sv, 0x021D3 }, - { "dHar;"sv, 0x02965 }, - { "dagger;"sv, 0x02020 }, - { "daleth;"sv, 0x02138 }, - { "darr;"sv, 0x02193 }, - { "dash;"sv, 0x02010 }, - { "dashv;"sv, 0x022A3 }, - { "dbkarow;"sv, 0x0290F }, - { "dblac;"sv, 0x002DD }, - { "dcaron;"sv, 0x0010F }, - { "dcy;"sv, 0x00434 }, - { "dd;"sv, 0x02146 }, - { "ddagger;"sv, 0x02021 }, - { "ddarr;"sv, 0x021CA }, - { "ddotseq;"sv, 0x02A77 }, - { "deg;"sv, 0x000B0 }, - { "deg"sv, 0x000B0 }, - { "delta;"sv, 0x003B4 }, - { "demptyv;"sv, 0x029B1 }, - { "dfisht;"sv, 0x0297F }, - { "dfr;"sv, 0x1D521 }, - { "dharl;"sv, 0x021C3 }, - { "dharr;"sv, 0x021C2 }, - { "diam;"sv, 0x022C4 }, - { "diamond;"sv, 0x022C4 }, - { "diamondsuit;"sv, 0x02666 }, - { "diams;"sv, 0x02666 }, - { "die;"sv, 0x000A8 }, - { "digamma;"sv, 0x003DD }, - { "disin;"sv, 0x022F2 }, - { "div;"sv, 0x000F7 }, - { "divide;"sv, 0x000F7 }, - { "divide"sv, 0x000F7 }, - { "divideontimes;"sv, 0x022C7 }, - { "divonx;"sv, 0x022C7 }, - { "djcy;"sv, 0x00452 }, - { "dlcorn;"sv, 0x0231E }, - { "dlcrop;"sv, 0x0230D }, - { "dollar;"sv, 0x00024 }, - { "dopf;"sv, 0x1D555 }, - { "dot;"sv, 0x002D9 }, - { "doteq;"sv, 0x02250 }, - { "doteqdot;"sv, 0x02251 }, - { "dotminus;"sv, 0x02238 }, - { "dotplus;"sv, 0x02214 }, - { "dotsquare;"sv, 0x022A1 }, - { "doublebarwedge;"sv, 0x02306 }, - { "downarrow;"sv, 0x02193 }, - { "downdownarrows;"sv, 0x021CA }, - { "downharpoonleft;"sv, 0x021C3 }, - { "downharpoonright;"sv, 0x021C2 }, - { "drbkarow;"sv, 0x02910 }, - { "drcorn;"sv, 0x0231F }, - { "drcrop;"sv, 0x0230C }, - { "dscr;"sv, 0x1D4B9 }, - { "dscy;"sv, 0x00455 }, - { "dsol;"sv, 0x029F6 }, - { "dstrok;"sv, 0x00111 }, - { "dtdot;"sv, 0x022F1 }, - { "dtri;"sv, 0x025BF }, - { "dtrif;"sv, 0x025BE }, - { "duarr;"sv, 0x021F5 }, - { "duhar;"sv, 0x0296F }, - { "dwangle;"sv, 0x029A6 }, - { "dzcy;"sv, 0x0045F }, - { "dzigrarr;"sv, 0x027FF }, - { "eDDot;"sv, 0x02A77 }, - { "eDot;"sv, 0x02251 }, - { "eacute;"sv, 0x000E9 }, - { "eacute"sv, 0x000E9 }, - { "easter;"sv, 0x02A6E }, - { "ecaron;"sv, 0x0011B }, - { "ecir;"sv, 0x02256 }, - { "ecirc;"sv, 0x000EA }, - { "ecirc"sv, 0x000EA }, - { "ecolon;"sv, 0x02255 }, - { "ecy;"sv, 0x0044D }, - { "edot;"sv, 0x00117 }, - { "ee;"sv, 0x02147 }, - { "efDot;"sv, 0x02252 }, - { "efr;"sv, 0x1D522 }, - { "eg;"sv, 0x02A9A }, - { "egrave;"sv, 0x000E8 }, - { "egrave"sv, 0x000E8 }, - { "egs;"sv, 0x02A96 }, - { "egsdot;"sv, 0x02A98 }, - { "el;"sv, 0x02A99 }, - { "elinters;"sv, 0x023E7 }, - { "ell;"sv, 0x02113 }, - { "els;"sv, 0x02A95 }, - { "elsdot;"sv, 0x02A97 }, - { "emacr;"sv, 0x00113 }, - { "empty;"sv, 0x02205 }, - { "emptyset;"sv, 0x02205 }, - { "emptyv;"sv, 0x02205 }, - { "emsp13;"sv, 0x02004 }, - { "emsp14;"sv, 0x02005 }, - { "emsp;"sv, 0x02003 }, - { "eng;"sv, 0x0014B }, - { "ensp;"sv, 0x02002 }, - { "eogon;"sv, 0x00119 }, - { "eopf;"sv, 0x1D556 }, - { "epar;"sv, 0x022D5 }, - { "eparsl;"sv, 0x029E3 }, - { "eplus;"sv, 0x02A71 }, - { "epsi;"sv, 0x003B5 }, - { "epsilon;"sv, 0x003B5 }, - { "epsiv;"sv, 0x003F5 }, - { "eqcirc;"sv, 0x02256 }, - { "eqcolon;"sv, 0x02255 }, - { "eqsim;"sv, 0x02242 }, - { "eqslantgtr;"sv, 0x02A96 }, - { "eqslantless;"sv, 0x02A95 }, - { "equals;"sv, 0x0003D }, - { "equest;"sv, 0x0225F }, - { "equiv;"sv, 0x02261 }, - { "equivDD;"sv, 0x02A78 }, - { "eqvparsl;"sv, 0x029E5 }, - { "erDot;"sv, 0x02253 }, - { "erarr;"sv, 0x02971 }, - { "escr;"sv, 0x0212F }, - { "esdot;"sv, 0x02250 }, - { "esim;"sv, 0x02242 }, - { "eta;"sv, 0x003B7 }, - { "eth;"sv, 0x000F0 }, - { "eth"sv, 0x000F0 }, - { "euml;"sv, 0x000EB }, - { "euml"sv, 0x000EB }, - { "euro;"sv, 0x020AC }, - { "excl;"sv, 0x00021 }, - { "exist;"sv, 0x02203 }, - { "expectation;"sv, 0x02130 }, - { "exponentiale;"sv, 0x02147 }, - { "fallingdotseq;"sv, 0x02252 }, - { "fcy;"sv, 0x00444 }, - { "female;"sv, 0x02640 }, - { "ffilig;"sv, 0x0FB03 }, - { "fflig;"sv, 0x0FB00 }, - { "ffllig;"sv, 0x0FB04 }, - { "ffr;"sv, 0x1D523 }, - { "filig;"sv, 0x0FB01 }, - { "flat;"sv, 0x0266D }, - { "fllig;"sv, 0x0FB02 }, - { "fltns;"sv, 0x025B1 }, - { "fnof;"sv, 0x00192 }, - { "fopf;"sv, 0x1D557 }, - { "forall;"sv, 0x02200 }, - { "fork;"sv, 0x022D4 }, - { "forkv;"sv, 0x02AD9 }, - { "fpartint;"sv, 0x02A0D }, - { "frac12;"sv, 0x000BD }, - { "frac12"sv, 0x000BD }, - { "frac13;"sv, 0x02153 }, - { "frac14;"sv, 0x000BC }, - { "frac14"sv, 0x000BC }, - { "frac15;"sv, 0x02155 }, - { "frac16;"sv, 0x02159 }, - { "frac18;"sv, 0x0215B }, - { "frac23;"sv, 0x02154 }, - { "frac25;"sv, 0x02156 }, - { "frac34;"sv, 0x000BE }, - { "frac34"sv, 0x000BE }, - { "frac35;"sv, 0x02157 }, - { "frac38;"sv, 0x0215C }, - { "frac45;"sv, 0x02158 }, - { "frac56;"sv, 0x0215A }, - { "frac58;"sv, 0x0215D }, - { "frac78;"sv, 0x0215E }, - { "frasl;"sv, 0x02044 }, - { "frown;"sv, 0x02322 }, - { "fscr;"sv, 0x1D4BB }, - { "gE;"sv, 0x02267 }, - { "gEl;"sv, 0x02A8C }, - { "gacute;"sv, 0x001F5 }, - { "gamma;"sv, 0x003B3 }, - { "gammad;"sv, 0x003DD }, - { "gap;"sv, 0x02A86 }, - { "gbreve;"sv, 0x0011F }, - { "gcirc;"sv, 0x0011D }, - { "gcy;"sv, 0x00433 }, - { "gdot;"sv, 0x00121 }, - { "ge;"sv, 0x02265 }, - { "gel;"sv, 0x022DB }, - { "geq;"sv, 0x02265 }, - { "geqq;"sv, 0x02267 }, - { "geqslant;"sv, 0x02A7E }, - { "ges;"sv, 0x02A7E }, - { "gescc;"sv, 0x02AA9 }, - { "gesdot;"sv, 0x02A80 }, - { "gesdoto;"sv, 0x02A82 }, - { "gesdotol;"sv, 0x02A84 }, - { "gesles;"sv, 0x02A94 }, - { "gfr;"sv, 0x1D524 }, - { "gg;"sv, 0x0226B }, - { "ggg;"sv, 0x022D9 }, - { "gimel;"sv, 0x02137 }, - { "gjcy;"sv, 0x00453 }, - { "gl;"sv, 0x02277 }, - { "glE;"sv, 0x02A92 }, - { "gla;"sv, 0x02AA5 }, - { "glj;"sv, 0x02AA4 }, - { "gnE;"sv, 0x02269 }, - { "gnap;"sv, 0x02A8A }, - { "gnapprox;"sv, 0x02A8A }, - { "gne;"sv, 0x02A88 }, - { "gneq;"sv, 0x02A88 }, - { "gneqq;"sv, 0x02269 }, - { "gnsim;"sv, 0x022E7 }, - { "gopf;"sv, 0x1D558 }, - { "grave;"sv, 0x00060 }, - { "gscr;"sv, 0x0210A }, - { "gsim;"sv, 0x02273 }, - { "gsime;"sv, 0x02A8E }, - { "gsiml;"sv, 0x02A90 }, - { "gt;"sv, 0x0003E }, - { "gt"sv, 0x0003E }, - { "gtcc;"sv, 0x02AA7 }, - { "gtcir;"sv, 0x02A7A }, - { "gtdot;"sv, 0x022D7 }, - { "gtlPar;"sv, 0x02995 }, - { "gtquest;"sv, 0x02A7C }, - { "gtrapprox;"sv, 0x02A86 }, - { "gtrarr;"sv, 0x02978 }, - { "gtrdot;"sv, 0x022D7 }, - { "gtreqless;"sv, 0x022DB }, - { "gtreqqless;"sv, 0x02A8C }, - { "gtrless;"sv, 0x02277 }, - { "gtrsim;"sv, 0x02273 }, - { "hArr;"sv, 0x021D4 }, - { "hairsp;"sv, 0x0200A }, - { "half;"sv, 0x000BD }, - { "hamilt;"sv, 0x0210B }, - { "hardcy;"sv, 0x0044A }, - { "harr;"sv, 0x02194 }, - { "harrcir;"sv, 0x02948 }, - { "harrw;"sv, 0x021AD }, - { "hbar;"sv, 0x0210F }, - { "hcirc;"sv, 0x00125 }, - { "hearts;"sv, 0x02665 }, - { "heartsuit;"sv, 0x02665 }, - { "hellip;"sv, 0x02026 }, - { "hercon;"sv, 0x022B9 }, - { "hfr;"sv, 0x1D525 }, - { "hksearow;"sv, 0x02925 }, - { "hkswarow;"sv, 0x02926 }, - { "hoarr;"sv, 0x021FF }, - { "homtht;"sv, 0x0223B }, - { "hookleftarrow;"sv, 0x021A9 }, - { "hookrightarrow;"sv, 0x021AA }, - { "hopf;"sv, 0x1D559 }, - { "horbar;"sv, 0x02015 }, - { "hscr;"sv, 0x1D4BD }, - { "hslash;"sv, 0x0210F }, - { "hstrok;"sv, 0x00127 }, - { "hybull;"sv, 0x02043 }, - { "hyphen;"sv, 0x02010 }, - { "iacute;"sv, 0x000ED }, - { "iacute"sv, 0x000ED }, - { "ic;"sv, 0x02063 }, - { "icirc;"sv, 0x000EE }, - { "icirc"sv, 0x000EE }, - { "icy;"sv, 0x00438 }, - { "iecy;"sv, 0x00435 }, - { "iexcl;"sv, 0x000A1 }, - { "iexcl"sv, 0x000A1 }, - { "iff;"sv, 0x021D4 }, - { "ifr;"sv, 0x1D526 }, - { "igrave;"sv, 0x000EC }, - { "igrave"sv, 0x000EC }, - { "ii;"sv, 0x02148 }, - { "iiiint;"sv, 0x02A0C }, - { "iiint;"sv, 0x0222D }, - { "iinfin;"sv, 0x029DC }, - { "iiota;"sv, 0x02129 }, - { "ijlig;"sv, 0x00133 }, - { "imacr;"sv, 0x0012B }, - { "image;"sv, 0x02111 }, - { "imagline;"sv, 0x02110 }, - { "imagpart;"sv, 0x02111 }, - { "imath;"sv, 0x00131 }, - { "imof;"sv, 0x022B7 }, - { "imped;"sv, 0x001B5 }, - { "in;"sv, 0x02208 }, - { "incare;"sv, 0x02105 }, - { "infin;"sv, 0x0221E }, - { "infintie;"sv, 0x029DD }, - { "inodot;"sv, 0x00131 }, - { "int;"sv, 0x0222B }, - { "intcal;"sv, 0x022BA }, - { "integers;"sv, 0x02124 }, - { "intercal;"sv, 0x022BA }, - { "intlarhk;"sv, 0x02A17 }, - { "intprod;"sv, 0x02A3C }, - { "iocy;"sv, 0x00451 }, - { "iogon;"sv, 0x0012F }, - { "iopf;"sv, 0x1D55A }, - { "iota;"sv, 0x003B9 }, - { "iprod;"sv, 0x02A3C }, - { "iquest;"sv, 0x000BF }, - { "iquest"sv, 0x000BF }, - { "iscr;"sv, 0x1D4BE }, - { "isin;"sv, 0x02208 }, - { "isinE;"sv, 0x022F9 }, - { "isindot;"sv, 0x022F5 }, - { "isins;"sv, 0x022F4 }, - { "isinsv;"sv, 0x022F3 }, - { "isinv;"sv, 0x02208 }, - { "it;"sv, 0x02062 }, - { "itilde;"sv, 0x00129 }, - { "iukcy;"sv, 0x00456 }, - { "iuml;"sv, 0x000EF }, - { "iuml"sv, 0x000EF }, - { "jcirc;"sv, 0x00135 }, - { "jcy;"sv, 0x00439 }, - { "jfr;"sv, 0x1D527 }, - { "jmath;"sv, 0x00237 }, - { "jopf;"sv, 0x1D55B }, - { "jscr;"sv, 0x1D4BF }, - { "jsercy;"sv, 0x00458 }, - { "jukcy;"sv, 0x00454 }, - { "kappa;"sv, 0x003BA }, - { "kappav;"sv, 0x003F0 }, - { "kcedil;"sv, 0x00137 }, - { "kcy;"sv, 0x0043A }, - { "kfr;"sv, 0x1D528 }, - { "kgreen;"sv, 0x00138 }, - { "khcy;"sv, 0x00445 }, - { "kjcy;"sv, 0x0045C }, - { "kopf;"sv, 0x1D55C }, - { "kscr;"sv, 0x1D4C0 }, - { "lAarr;"sv, 0x021DA }, - { "lArr;"sv, 0x021D0 }, - { "lAtail;"sv, 0x0291B }, - { "lBarr;"sv, 0x0290E }, - { "lE;"sv, 0x02266 }, - { "lEg;"sv, 0x02A8B }, - { "lHar;"sv, 0x02962 }, - { "lacute;"sv, 0x0013A }, - { "laemptyv;"sv, 0x029B4 }, - { "lagran;"sv, 0x02112 }, - { "lambda;"sv, 0x003BB }, - { "lang;"sv, 0x027E8 }, - { "langd;"sv, 0x02991 }, - { "langle;"sv, 0x027E8 }, - { "lap;"sv, 0x02A85 }, - { "laquo;"sv, 0x000AB }, - { "laquo"sv, 0x000AB }, - { "larr;"sv, 0x02190 }, - { "larrb;"sv, 0x021E4 }, - { "larrbfs;"sv, 0x0291F }, - { "larrfs;"sv, 0x0291D }, - { "larrhk;"sv, 0x021A9 }, - { "larrlp;"sv, 0x021AB }, - { "larrpl;"sv, 0x02939 }, - { "larrsim;"sv, 0x02973 }, - { "larrtl;"sv, 0x021A2 }, - { "lat;"sv, 0x02AAB }, - { "latail;"sv, 0x02919 }, - { "late;"sv, 0x02AAD }, - { "lbarr;"sv, 0x0290C }, - { "lbbrk;"sv, 0x02772 }, - { "lbrace;"sv, 0x0007B }, - { "lbrack;"sv, 0x0005B }, - { "lbrke;"sv, 0x0298B }, - { "lbrksld;"sv, 0x0298F }, - { "lbrkslu;"sv, 0x0298D }, - { "lcaron;"sv, 0x0013E }, - { "lcedil;"sv, 0x0013C }, - { "lceil;"sv, 0x02308 }, - { "lcub;"sv, 0x0007B }, - { "lcy;"sv, 0x0043B }, - { "ldca;"sv, 0x02936 }, - { "ldquo;"sv, 0x0201C }, - { "ldquor;"sv, 0x0201E }, - { "ldrdhar;"sv, 0x02967 }, - { "ldrushar;"sv, 0x0294B }, - { "ldsh;"sv, 0x021B2 }, - { "le;"sv, 0x02264 }, - { "leftarrow;"sv, 0x02190 }, - { "leftarrowtail;"sv, 0x021A2 }, - { "leftharpoondown;"sv, 0x021BD }, - { "leftharpoonup;"sv, 0x021BC }, - { "leftleftarrows;"sv, 0x021C7 }, - { "leftrightarrow;"sv, 0x02194 }, - { "leftrightarrows;"sv, 0x021C6 }, - { "leftrightharpoons;"sv, 0x021CB }, - { "leftrightsquigarrow;"sv, 0x021AD }, - { "leftthreetimes;"sv, 0x022CB }, - { "leg;"sv, 0x022DA }, - { "leq;"sv, 0x02264 }, - { "leqq;"sv, 0x02266 }, - { "leqslant;"sv, 0x02A7D }, - { "les;"sv, 0x02A7D }, - { "lescc;"sv, 0x02AA8 }, - { "lesdot;"sv, 0x02A7F }, - { "lesdoto;"sv, 0x02A81 }, - { "lesdotor;"sv, 0x02A83 }, - { "lesges;"sv, 0x02A93 }, - { "lessapprox;"sv, 0x02A85 }, - { "lessdot;"sv, 0x022D6 }, - { "lesseqgtr;"sv, 0x022DA }, - { "lesseqqgtr;"sv, 0x02A8B }, - { "lessgtr;"sv, 0x02276 }, - { "lesssim;"sv, 0x02272 }, - { "lfisht;"sv, 0x0297C }, - { "lfloor;"sv, 0x0230A }, - { "lfr;"sv, 0x1D529 }, - { "lg;"sv, 0x02276 }, - { "lgE;"sv, 0x02A91 }, - { "lhard;"sv, 0x021BD }, - { "lharu;"sv, 0x021BC }, - { "lharul;"sv, 0x0296A }, - { "lhblk;"sv, 0x02584 }, - { "ljcy;"sv, 0x00459 }, - { "ll;"sv, 0x0226A }, - { "llarr;"sv, 0x021C7 }, - { "llcorner;"sv, 0x0231E }, - { "llhard;"sv, 0x0296B }, - { "lltri;"sv, 0x025FA }, - { "lmidot;"sv, 0x00140 }, - { "lmoust;"sv, 0x023B0 }, - { "lmoustache;"sv, 0x023B0 }, - { "lnE;"sv, 0x02268 }, - { "lnap;"sv, 0x02A89 }, - { "lnapprox;"sv, 0x02A89 }, - { "lne;"sv, 0x02A87 }, - { "lneq;"sv, 0x02A87 }, - { "lneqq;"sv, 0x02268 }, - { "lnsim;"sv, 0x022E6 }, - { "loang;"sv, 0x027EC }, - { "loarr;"sv, 0x021FD }, - { "lobrk;"sv, 0x027E6 }, - { "longleftarrow;"sv, 0x027F5 }, - { "longleftrightarrow;"sv, 0x027F7 }, - { "longmapsto;"sv, 0x027FC }, - { "longrightarrow;"sv, 0x027F6 }, - { "looparrowleft;"sv, 0x021AB }, - { "looparrowright;"sv, 0x021AC }, - { "lopar;"sv, 0x02985 }, - { "lopf;"sv, 0x1D55D }, - { "loplus;"sv, 0x02A2D }, - { "lotimes;"sv, 0x02A34 }, - { "lowast;"sv, 0x02217 }, - { "lowbar;"sv, 0x0005F }, - { "loz;"sv, 0x025CA }, - { "lozenge;"sv, 0x025CA }, - { "lozf;"sv, 0x029EB }, - { "lpar;"sv, 0x00028 }, - { "lparlt;"sv, 0x02993 }, - { "lrarr;"sv, 0x021C6 }, - { "lrcorner;"sv, 0x0231F }, - { "lrhar;"sv, 0x021CB }, - { "lrhard;"sv, 0x0296D }, - { "lrm;"sv, 0x0200E }, - { "lrtri;"sv, 0x022BF }, - { "lsaquo;"sv, 0x02039 }, - { "lscr;"sv, 0x1D4C1 }, - { "lsh;"sv, 0x021B0 }, - { "lsim;"sv, 0x02272 }, - { "lsime;"sv, 0x02A8D }, - { "lsimg;"sv, 0x02A8F }, - { "lsqb;"sv, 0x0005B }, - { "lsquo;"sv, 0x02018 }, - { "lsquor;"sv, 0x0201A }, - { "lstrok;"sv, 0x00142 }, - { "lt;"sv, 0x0003C }, - { "lt"sv, 0x0003C }, - { "ltcc;"sv, 0x02AA6 }, - { "ltcir;"sv, 0x02A79 }, - { "ltdot;"sv, 0x022D6 }, - { "lthree;"sv, 0x022CB }, - { "ltimes;"sv, 0x022C9 }, - { "ltlarr;"sv, 0x02976 }, - { "ltquest;"sv, 0x02A7B }, - { "ltrPar;"sv, 0x02996 }, - { "ltri;"sv, 0x025C3 }, - { "ltrie;"sv, 0x022B4 }, - { "ltrif;"sv, 0x025C2 }, - { "lurdshar;"sv, 0x0294A }, - { "luruhar;"sv, 0x02966 }, - { "mDDot;"sv, 0x0223A }, - { "macr;"sv, 0x000AF }, - { "macr"sv, 0x000AF }, - { "male;"sv, 0x02642 }, - { "malt;"sv, 0x02720 }, - { "maltese;"sv, 0x02720 }, - { "map;"sv, 0x021A6 }, - { "mapsto;"sv, 0x021A6 }, - { "mapstodown;"sv, 0x021A7 }, - { "mapstoleft;"sv, 0x021A4 }, - { "mapstoup;"sv, 0x021A5 }, - { "marker;"sv, 0x025AE }, - { "mcomma;"sv, 0x02A29 }, - { "mcy;"sv, 0x0043C }, - { "mdash;"sv, 0x02014 }, - { "measuredangle;"sv, 0x02221 }, - { "mfr;"sv, 0x1D52A }, - { "mho;"sv, 0x02127 }, - { "micro;"sv, 0x000B5 }, - { "micro"sv, 0x000B5 }, - { "mid;"sv, 0x02223 }, - { "midast;"sv, 0x0002A }, - { "midcir;"sv, 0x02AF0 }, - { "middot;"sv, 0x000B7 }, - { "middot"sv, 0x000B7 }, - { "minus;"sv, 0x02212 }, - { "minusb;"sv, 0x0229F }, - { "minusd;"sv, 0x02238 }, - { "minusdu;"sv, 0x02A2A }, - { "mlcp;"sv, 0x02ADB }, - { "mldr;"sv, 0x02026 }, - { "mnplus;"sv, 0x02213 }, - { "models;"sv, 0x022A7 }, - { "mopf;"sv, 0x1D55E }, - { "mp;"sv, 0x02213 }, - { "mscr;"sv, 0x1D4C2 }, - { "mstpos;"sv, 0x0223E }, - { "mu;"sv, 0x003BC }, - { "multimap;"sv, 0x022B8 }, - { "mumap;"sv, 0x022B8 }, - { "nLeftarrow;"sv, 0x021CD }, - { "nLeftrightarrow;"sv, 0x021CE }, - { "nRightarrow;"sv, 0x021CF }, - { "nVDash;"sv, 0x022AF }, - { "nVdash;"sv, 0x022AE }, - { "nabla;"sv, 0x02207 }, - { "nacute;"sv, 0x00144 }, - { "nap;"sv, 0x02249 }, - { "napos;"sv, 0x00149 }, - { "napprox;"sv, 0x02249 }, - { "natur;"sv, 0x0266E }, - { "natural;"sv, 0x0266E }, - { "naturals;"sv, 0x02115 }, - { "nbsp;"sv, 0x000A0 }, - { "nbsp"sv, 0x000A0 }, - { "ncap;"sv, 0x02A43 }, - { "ncaron;"sv, 0x00148 }, - { "ncedil;"sv, 0x00146 }, - { "ncong;"sv, 0x02247 }, - { "ncup;"sv, 0x02A42 }, - { "ncy;"sv, 0x0043D }, - { "ndash;"sv, 0x02013 }, - { "ne;"sv, 0x02260 }, - { "neArr;"sv, 0x021D7 }, - { "nearhk;"sv, 0x02924 }, - { "nearr;"sv, 0x02197 }, - { "nearrow;"sv, 0x02197 }, - { "nequiv;"sv, 0x02262 }, - { "nesear;"sv, 0x02928 }, - { "nexist;"sv, 0x02204 }, - { "nexists;"sv, 0x02204 }, - { "nfr;"sv, 0x1D52B }, - { "nge;"sv, 0x02271 }, - { "ngeq;"sv, 0x02271 }, - { "ngsim;"sv, 0x02275 }, - { "ngt;"sv, 0x0226F }, - { "ngtr;"sv, 0x0226F }, - { "nhArr;"sv, 0x021CE }, - { "nharr;"sv, 0x021AE }, - { "nhpar;"sv, 0x02AF2 }, - { "ni;"sv, 0x0220B }, - { "nis;"sv, 0x022FC }, - { "nisd;"sv, 0x022FA }, - { "niv;"sv, 0x0220B }, - { "njcy;"sv, 0x0045A }, - { "nlArr;"sv, 0x021CD }, - { "nlarr;"sv, 0x0219A }, - { "nldr;"sv, 0x02025 }, - { "nle;"sv, 0x02270 }, - { "nleftarrow;"sv, 0x0219A }, - { "nleftrightarrow;"sv, 0x021AE }, - { "nleq;"sv, 0x02270 }, - { "nless;"sv, 0x0226E }, - { "nlsim;"sv, 0x02274 }, - { "nlt;"sv, 0x0226E }, - { "nltri;"sv, 0x022EA }, - { "nltrie;"sv, 0x022EC }, - { "nmid;"sv, 0x02224 }, - { "nopf;"sv, 0x1D55F }, - { "not;"sv, 0x000AC }, - { "not"sv, 0x000AC }, - { "notin;"sv, 0x02209 }, - { "notinva;"sv, 0x02209 }, - { "notinvb;"sv, 0x022F7 }, - { "notinvc;"sv, 0x022F6 }, - { "notni;"sv, 0x0220C }, - { "notniva;"sv, 0x0220C }, - { "notnivb;"sv, 0x022FE }, - { "notnivc;"sv, 0x022FD }, - { "npar;"sv, 0x02226 }, - { "nparallel;"sv, 0x02226 }, - { "npolint;"sv, 0x02A14 }, - { "npr;"sv, 0x02280 }, - { "nprcue;"sv, 0x022E0 }, - { "nprec;"sv, 0x02280 }, - { "nrArr;"sv, 0x021CF }, - { "nrarr;"sv, 0x0219B }, - { "nrightarrow;"sv, 0x0219B }, - { "nrtri;"sv, 0x022EB }, - { "nrtrie;"sv, 0x022ED }, - { "nsc;"sv, 0x02281 }, - { "nsccue;"sv, 0x022E1 }, - { "nscr;"sv, 0x1D4C3 }, - { "nshortmid;"sv, 0x02224 }, - { "nshortparallel;"sv, 0x02226 }, - { "nsim;"sv, 0x02241 }, - { "nsime;"sv, 0x02244 }, - { "nsimeq;"sv, 0x02244 }, - { "nsmid;"sv, 0x02224 }, - { "nspar;"sv, 0x02226 }, - { "nsqsube;"sv, 0x022E2 }, - { "nsqsupe;"sv, 0x022E3 }, - { "nsub;"sv, 0x02284 }, - { "nsube;"sv, 0x02288 }, - { "nsubseteq;"sv, 0x02288 }, - { "nsucc;"sv, 0x02281 }, - { "nsup;"sv, 0x02285 }, - { "nsupe;"sv, 0x02289 }, - { "nsupseteq;"sv, 0x02289 }, - { "ntgl;"sv, 0x02279 }, - { "ntilde;"sv, 0x000F1 }, - { "ntilde"sv, 0x000F1 }, - { "ntlg;"sv, 0x02278 }, - { "ntriangleleft;"sv, 0x022EA }, - { "ntrianglelefteq;"sv, 0x022EC }, - { "ntriangleright;"sv, 0x022EB }, - { "ntrianglerighteq;"sv, 0x022ED }, - { "nu;"sv, 0x003BD }, - { "num;"sv, 0x00023 }, - { "numero;"sv, 0x02116 }, - { "numsp;"sv, 0x02007 }, - { "nvDash;"sv, 0x022AD }, - { "nvHarr;"sv, 0x02904 }, - { "nvdash;"sv, 0x022AC }, - { "nvinfin;"sv, 0x029DE }, - { "nvlArr;"sv, 0x02902 }, - { "nvrArr;"sv, 0x02903 }, - { "nwArr;"sv, 0x021D6 }, - { "nwarhk;"sv, 0x02923 }, - { "nwarr;"sv, 0x02196 }, - { "nwarrow;"sv, 0x02196 }, - { "nwnear;"sv, 0x02927 }, - { "oS;"sv, 0x024C8 }, - { "oacute;"sv, 0x000F3 }, - { "oacute"sv, 0x000F3 }, - { "oast;"sv, 0x0229B }, - { "ocir;"sv, 0x0229A }, - { "ocirc;"sv, 0x000F4 }, - { "ocirc"sv, 0x000F4 }, - { "ocy;"sv, 0x0043E }, - { "odash;"sv, 0x0229D }, - { "odblac;"sv, 0x00151 }, - { "odiv;"sv, 0x02A38 }, - { "odot;"sv, 0x02299 }, - { "odsold;"sv, 0x029BC }, - { "oelig;"sv, 0x00153 }, - { "ofcir;"sv, 0x029BF }, - { "ofr;"sv, 0x1D52C }, - { "ogon;"sv, 0x002DB }, - { "ograve;"sv, 0x000F2 }, - { "ograve"sv, 0x000F2 }, - { "ogt;"sv, 0x029C1 }, - { "ohbar;"sv, 0x029B5 }, - { "ohm;"sv, 0x003A9 }, - { "oint;"sv, 0x0222E }, - { "olarr;"sv, 0x021BA }, - { "olcir;"sv, 0x029BE }, - { "olcross;"sv, 0x029BB }, - { "oline;"sv, 0x0203E }, - { "olt;"sv, 0x029C0 }, - { "omacr;"sv, 0x0014D }, - { "omega;"sv, 0x003C9 }, - { "omicron;"sv, 0x003BF }, - { "omid;"sv, 0x029B6 }, - { "ominus;"sv, 0x02296 }, - { "oopf;"sv, 0x1D560 }, - { "opar;"sv, 0x029B7 }, - { "operp;"sv, 0x029B9 }, - { "oplus;"sv, 0x02295 }, - { "or;"sv, 0x02228 }, - { "orarr;"sv, 0x021BB }, - { "ord;"sv, 0x02A5D }, - { "order;"sv, 0x02134 }, - { "orderof;"sv, 0x02134 }, - { "ordf;"sv, 0x000AA }, - { "ordf"sv, 0x000AA }, - { "ordm;"sv, 0x000BA }, - { "ordm"sv, 0x000BA }, - { "origof;"sv, 0x022B6 }, - { "oror;"sv, 0x02A56 }, - { "orslope;"sv, 0x02A57 }, - { "orv;"sv, 0x02A5B }, - { "oscr;"sv, 0x02134 }, - { "oslash;"sv, 0x000F8 }, - { "oslash"sv, 0x000F8 }, - { "osol;"sv, 0x02298 }, - { "otilde;"sv, 0x000F5 }, - { "otilde"sv, 0x000F5 }, - { "otimes;"sv, 0x02297 }, - { "otimesas;"sv, 0x02A36 }, - { "ouml;"sv, 0x000F6 }, - { "ouml"sv, 0x000F6 }, - { "ovbar;"sv, 0x0233D }, - { "par;"sv, 0x02225 }, - { "para;"sv, 0x000B6 }, - { "para"sv, 0x000B6 }, - { "parallel;"sv, 0x02225 }, - { "parsim;"sv, 0x02AF3 }, - { "parsl;"sv, 0x02AFD }, - { "part;"sv, 0x02202 }, - { "pcy;"sv, 0x0043F }, - { "percnt;"sv, 0x00025 }, - { "period;"sv, 0x0002E }, - { "permil;"sv, 0x02030 }, - { "perp;"sv, 0x022A5 }, - { "pertenk;"sv, 0x02031 }, - { "pfr;"sv, 0x1D52D }, - { "phi;"sv, 0x003C6 }, - { "phiv;"sv, 0x003D5 }, - { "phmmat;"sv, 0x02133 }, - { "phone;"sv, 0x0260E }, - { "pi;"sv, 0x003C0 }, - { "pitchfork;"sv, 0x022D4 }, - { "piv;"sv, 0x003D6 }, - { "planck;"sv, 0x0210F }, - { "planckh;"sv, 0x0210E }, - { "plankv;"sv, 0x0210F }, - { "plus;"sv, 0x0002B }, - { "plusacir;"sv, 0x02A23 }, - { "plusb;"sv, 0x0229E }, - { "pluscir;"sv, 0x02A22 }, - { "plusdo;"sv, 0x02214 }, - { "plusdu;"sv, 0x02A25 }, - { "pluse;"sv, 0x02A72 }, - { "plusmn;"sv, 0x000B1 }, - { "plusmn"sv, 0x000B1 }, - { "plussim;"sv, 0x02A26 }, - { "plustwo;"sv, 0x02A27 }, - { "pm;"sv, 0x000B1 }, - { "pointint;"sv, 0x02A15 }, - { "popf;"sv, 0x1D561 }, - { "pound;"sv, 0x000A3 }, - { "pound"sv, 0x000A3 }, - { "pr;"sv, 0x0227A }, - { "prE;"sv, 0x02AB3 }, - { "prap;"sv, 0x02AB7 }, - { "prcue;"sv, 0x0227C }, - { "pre;"sv, 0x02AAF }, - { "prec;"sv, 0x0227A }, - { "precapprox;"sv, 0x02AB7 }, - { "preccurlyeq;"sv, 0x0227C }, - { "preceq;"sv, 0x02AAF }, - { "precnapprox;"sv, 0x02AB9 }, - { "precneqq;"sv, 0x02AB5 }, - { "precnsim;"sv, 0x022E8 }, - { "precsim;"sv, 0x0227E }, - { "prime;"sv, 0x02032 }, - { "primes;"sv, 0x02119 }, - { "prnE;"sv, 0x02AB5 }, - { "prnap;"sv, 0x02AB9 }, - { "prnsim;"sv, 0x022E8 }, - { "prod;"sv, 0x0220F }, - { "profalar;"sv, 0x0232E }, - { "profline;"sv, 0x02312 }, - { "profsurf;"sv, 0x02313 }, - { "prop;"sv, 0x0221D }, - { "propto;"sv, 0x0221D }, - { "prsim;"sv, 0x0227E }, - { "prurel;"sv, 0x022B0 }, - { "pscr;"sv, 0x1D4C5 }, - { "psi;"sv, 0x003C8 }, - { "puncsp;"sv, 0x02008 }, - { "qfr;"sv, 0x1D52E }, - { "qint;"sv, 0x02A0C }, - { "qopf;"sv, 0x1D562 }, - { "qprime;"sv, 0x02057 }, - { "qscr;"sv, 0x1D4C6 }, - { "quaternions;"sv, 0x0210D }, - { "quatint;"sv, 0x02A16 }, - { "quest;"sv, 0x0003F }, - { "questeq;"sv, 0x0225F }, - { "quot;"sv, 0x00022 }, - { "quot"sv, 0x00022 }, - { "rAarr;"sv, 0x021DB }, - { "rArr;"sv, 0x021D2 }, - { "rAtail;"sv, 0x0291C }, - { "rBarr;"sv, 0x0290F }, - { "rHar;"sv, 0x02964 }, - { "racute;"sv, 0x00155 }, - { "radic;"sv, 0x0221A }, - { "raemptyv;"sv, 0x029B3 }, - { "rang;"sv, 0x027E9 }, - { "rangd;"sv, 0x02992 }, - { "range;"sv, 0x029A5 }, - { "rangle;"sv, 0x027E9 }, - { "raquo;"sv, 0x000BB }, - { "raquo"sv, 0x000BB }, - { "rarr;"sv, 0x02192 }, - { "rarrap;"sv, 0x02975 }, - { "rarrb;"sv, 0x021E5 }, - { "rarrbfs;"sv, 0x02920 }, - { "rarrc;"sv, 0x02933 }, - { "rarrfs;"sv, 0x0291E }, - { "rarrhk;"sv, 0x021AA }, - { "rarrlp;"sv, 0x021AC }, - { "rarrpl;"sv, 0x02945 }, - { "rarrsim;"sv, 0x02974 }, - { "rarrtl;"sv, 0x021A3 }, - { "rarrw;"sv, 0x0219D }, - { "ratail;"sv, 0x0291A }, - { "ratio;"sv, 0x02236 }, - { "rationals;"sv, 0x0211A }, - { "rbarr;"sv, 0x0290D }, - { "rbbrk;"sv, 0x02773 }, - { "rbrace;"sv, 0x0007D }, - { "rbrack;"sv, 0x0005D }, - { "rbrke;"sv, 0x0298C }, - { "rbrksld;"sv, 0x0298E }, - { "rbrkslu;"sv, 0x02990 }, - { "rcaron;"sv, 0x00159 }, - { "rcedil;"sv, 0x00157 }, - { "rceil;"sv, 0x02309 }, - { "rcub;"sv, 0x0007D }, - { "rcy;"sv, 0x00440 }, - { "rdca;"sv, 0x02937 }, - { "rdldhar;"sv, 0x02969 }, - { "rdquo;"sv, 0x0201D }, - { "rdquor;"sv, 0x0201D }, - { "rdsh;"sv, 0x021B3 }, - { "real;"sv, 0x0211C }, - { "realine;"sv, 0x0211B }, - { "realpart;"sv, 0x0211C }, - { "reals;"sv, 0x0211D }, - { "rect;"sv, 0x025AD }, - { "reg;"sv, 0x000AE }, - { "reg"sv, 0x000AE }, - { "rfisht;"sv, 0x0297D }, - { "rfloor;"sv, 0x0230B }, - { "rfr;"sv, 0x1D52F }, - { "rhard;"sv, 0x021C1 }, - { "rharu;"sv, 0x021C0 }, - { "rharul;"sv, 0x0296C }, - { "rho;"sv, 0x003C1 }, - { "rhov;"sv, 0x003F1 }, - { "rightarrow;"sv, 0x02192 }, - { "rightarrowtail;"sv, 0x021A3 }, - { "rightharpoondown;"sv, 0x021C1 }, - { "rightharpoonup;"sv, 0x021C0 }, - { "rightleftarrows;"sv, 0x021C4 }, - { "rightleftharpoons;"sv, 0x021CC }, - { "rightrightarrows;"sv, 0x021C9 }, - { "rightsquigarrow;"sv, 0x0219D }, - { "rightthreetimes;"sv, 0x022CC }, - { "ring;"sv, 0x002DA }, - { "risingdotseq;"sv, 0x02253 }, - { "rlarr;"sv, 0x021C4 }, - { "rlhar;"sv, 0x021CC }, - { "rlm;"sv, 0x0200F }, - { "rmoust;"sv, 0x023B1 }, - { "rmoustache;"sv, 0x023B1 }, - { "rnmid;"sv, 0x02AEE }, - { "roang;"sv, 0x027ED }, - { "roarr;"sv, 0x021FE }, - { "robrk;"sv, 0x027E7 }, - { "ropar;"sv, 0x02986 }, - { "ropf;"sv, 0x1D563 }, - { "roplus;"sv, 0x02A2E }, - { "rotimes;"sv, 0x02A35 }, - { "rpar;"sv, 0x00029 }, - { "rpargt;"sv, 0x02994 }, - { "rppolint;"sv, 0x02A12 }, - { "rrarr;"sv, 0x021C9 }, - { "rsaquo;"sv, 0x0203A }, - { "rscr;"sv, 0x1D4C7 }, - { "rsh;"sv, 0x021B1 }, - { "rsqb;"sv, 0x0005D }, - { "rsquo;"sv, 0x02019 }, - { "rsquor;"sv, 0x02019 }, - { "rthree;"sv, 0x022CC }, - { "rtimes;"sv, 0x022CA }, - { "rtri;"sv, 0x025B9 }, - { "rtrie;"sv, 0x022B5 }, - { "rtrif;"sv, 0x025B8 }, - { "rtriltri;"sv, 0x029CE }, - { "ruluhar;"sv, 0x02968 }, - { "rx;"sv, 0x0211E }, - { "sacute;"sv, 0x0015B }, - { "sbquo;"sv, 0x0201A }, - { "sc;"sv, 0x0227B }, - { "scE;"sv, 0x02AB4 }, - { "scap;"sv, 0x02AB8 }, - { "scaron;"sv, 0x00161 }, - { "sccue;"sv, 0x0227D }, - { "sce;"sv, 0x02AB0 }, - { "scedil;"sv, 0x0015F }, - { "scirc;"sv, 0x0015D }, - { "scnE;"sv, 0x02AB6 }, - { "scnap;"sv, 0x02ABA }, - { "scnsim;"sv, 0x022E9 }, - { "scpolint;"sv, 0x02A13 }, - { "scsim;"sv, 0x0227F }, - { "scy;"sv, 0x00441 }, - { "sdot;"sv, 0x022C5 }, - { "sdotb;"sv, 0x022A1 }, - { "sdote;"sv, 0x02A66 }, - { "seArr;"sv, 0x021D8 }, - { "searhk;"sv, 0x02925 }, - { "searr;"sv, 0x02198 }, - { "searrow;"sv, 0x02198 }, - { "sect;"sv, 0x000A7 }, - { "sect"sv, 0x000A7 }, - { "semi;"sv, 0x0003B }, - { "seswar;"sv, 0x02929 }, - { "setminus;"sv, 0x02216 }, - { "setmn;"sv, 0x02216 }, - { "sext;"sv, 0x02736 }, - { "sfr;"sv, 0x1D530 }, - { "sfrown;"sv, 0x02322 }, - { "sharp;"sv, 0x0266F }, - { "shchcy;"sv, 0x00449 }, - { "shcy;"sv, 0x00448 }, - { "shortmid;"sv, 0x02223 }, - { "shortparallel;"sv, 0x02225 }, - { "shy;"sv, 0x000AD }, - { "shy"sv, 0x000AD }, - { "sigma;"sv, 0x003C3 }, - { "sigmaf;"sv, 0x003C2 }, - { "sigmav;"sv, 0x003C2 }, - { "sim;"sv, 0x0223C }, - { "simdot;"sv, 0x02A6A }, - { "sime;"sv, 0x02243 }, - { "simeq;"sv, 0x02243 }, - { "simg;"sv, 0x02A9E }, - { "simgE;"sv, 0x02AA0 }, - { "siml;"sv, 0x02A9D }, - { "simlE;"sv, 0x02A9F }, - { "simne;"sv, 0x02246 }, - { "simplus;"sv, 0x02A24 }, - { "simrarr;"sv, 0x02972 }, - { "slarr;"sv, 0x02190 }, - { "smallsetminus;"sv, 0x02216 }, - { "smashp;"sv, 0x02A33 }, - { "smeparsl;"sv, 0x029E4 }, - { "smid;"sv, 0x02223 }, - { "smile;"sv, 0x02323 }, - { "smt;"sv, 0x02AAA }, - { "smte;"sv, 0x02AAC }, - { "softcy;"sv, 0x0044C }, - { "sol;"sv, 0x0002F }, - { "solb;"sv, 0x029C4 }, - { "solbar;"sv, 0x0233F }, - { "sopf;"sv, 0x1D564 }, - { "spades;"sv, 0x02660 }, - { "spadesuit;"sv, 0x02660 }, - { "spar;"sv, 0x02225 }, - { "sqcap;"sv, 0x02293 }, - { "sqcup;"sv, 0x02294 }, - { "sqsub;"sv, 0x0228F }, - { "sqsube;"sv, 0x02291 }, - { "sqsubset;"sv, 0x0228F }, - { "sqsubseteq;"sv, 0x02291 }, - { "sqsup;"sv, 0x02290 }, - { "sqsupe;"sv, 0x02292 }, - { "sqsupset;"sv, 0x02290 }, - { "sqsupseteq;"sv, 0x02292 }, - { "squ;"sv, 0x025A1 }, - { "square;"sv, 0x025A1 }, - { "squarf;"sv, 0x025AA }, - { "squf;"sv, 0x025AA }, - { "srarr;"sv, 0x02192 }, - { "sscr;"sv, 0x1D4C8 }, - { "ssetmn;"sv, 0x02216 }, - { "ssmile;"sv, 0x02323 }, - { "sstarf;"sv, 0x022C6 }, - { "star;"sv, 0x02606 }, - { "starf;"sv, 0x02605 }, - { "straightepsilon;"sv, 0x003F5 }, - { "straightphi;"sv, 0x003D5 }, - { "strns;"sv, 0x000AF }, - { "sub;"sv, 0x02282 }, - { "subE;"sv, 0x02AC5 }, - { "subdot;"sv, 0x02ABD }, - { "sube;"sv, 0x02286 }, - { "subedot;"sv, 0x02AC3 }, - { "submult;"sv, 0x02AC1 }, - { "subnE;"sv, 0x02ACB }, - { "subne;"sv, 0x0228A }, - { "subplus;"sv, 0x02ABF }, - { "subrarr;"sv, 0x02979 }, - { "subset;"sv, 0x02282 }, - { "subseteq;"sv, 0x02286 }, - { "subseteqq;"sv, 0x02AC5 }, - { "subsetneq;"sv, 0x0228A }, - { "subsetneqq;"sv, 0x02ACB }, - { "subsim;"sv, 0x02AC7 }, - { "subsub;"sv, 0x02AD5 }, - { "subsup;"sv, 0x02AD3 }, - { "succ;"sv, 0x0227B }, - { "succapprox;"sv, 0x02AB8 }, - { "succcurlyeq;"sv, 0x0227D }, - { "succeq;"sv, 0x02AB0 }, - { "succnapprox;"sv, 0x02ABA }, - { "succneqq;"sv, 0x02AB6 }, - { "succnsim;"sv, 0x022E9 }, - { "succsim;"sv, 0x0227F }, - { "sum;"sv, 0x02211 }, - { "sung;"sv, 0x0266A }, - { "sup1;"sv, 0x000B9 }, - { "sup1"sv, 0x000B9 }, - { "sup2;"sv, 0x000B2 }, - { "sup2"sv, 0x000B2 }, - { "sup3;"sv, 0x000B3 }, - { "sup3"sv, 0x000B3 }, - { "sup;"sv, 0x02283 }, - { "supE;"sv, 0x02AC6 }, - { "supdot;"sv, 0x02ABE }, - { "supdsub;"sv, 0x02AD8 }, - { "supe;"sv, 0x02287 }, - { "supedot;"sv, 0x02AC4 }, - { "suphsol;"sv, 0x027C9 }, - { "suphsub;"sv, 0x02AD7 }, - { "suplarr;"sv, 0x0297B }, - { "supmult;"sv, 0x02AC2 }, - { "supnE;"sv, 0x02ACC }, - { "supne;"sv, 0x0228B }, - { "supplus;"sv, 0x02AC0 }, - { "supset;"sv, 0x02283 }, - { "supseteq;"sv, 0x02287 }, - { "supseteqq;"sv, 0x02AC6 }, - { "supsetneq;"sv, 0x0228B }, - { "supsetneqq;"sv, 0x02ACC }, - { "supsim;"sv, 0x02AC8 }, - { "supsub;"sv, 0x02AD4 }, - { "supsup;"sv, 0x02AD6 }, - { "swArr;"sv, 0x021D9 }, - { "swarhk;"sv, 0x02926 }, - { "swarr;"sv, 0x02199 }, - { "swarrow;"sv, 0x02199 }, - { "swnwar;"sv, 0x0292A }, - { "szlig;"sv, 0x000DF }, - { "szlig"sv, 0x000DF }, - { "target;"sv, 0x02316 }, - { "tau;"sv, 0x003C4 }, - { "tbrk;"sv, 0x023B4 }, - { "tcaron;"sv, 0x00165 }, - { "tcedil;"sv, 0x00163 }, - { "tcy;"sv, 0x00442 }, - { "tdot;"sv, 0x020DB }, - { "telrec;"sv, 0x02315 }, - { "tfr;"sv, 0x1D531 }, - { "there4;"sv, 0x02234 }, - { "therefore;"sv, 0x02234 }, - { "theta;"sv, 0x003B8 }, - { "thetasym;"sv, 0x003D1 }, - { "thetav;"sv, 0x003D1 }, - { "thickapprox;"sv, 0x02248 }, - { "thicksim;"sv, 0x0223C }, - { "thinsp;"sv, 0x02009 }, - { "thkap;"sv, 0x02248 }, - { "thksim;"sv, 0x0223C }, - { "thorn;"sv, 0x000FE }, - { "thorn"sv, 0x000FE }, - { "tilde;"sv, 0x002DC }, - { "times;"sv, 0x000D7 }, - { "times"sv, 0x000D7 }, - { "timesb;"sv, 0x022A0 }, - { "timesbar;"sv, 0x02A31 }, - { "timesd;"sv, 0x02A30 }, - { "tint;"sv, 0x0222D }, - { "toea;"sv, 0x02928 }, - { "top;"sv, 0x022A4 }, - { "topbot;"sv, 0x02336 }, - { "topcir;"sv, 0x02AF1 }, - { "topf;"sv, 0x1D565 }, - { "topfork;"sv, 0x02ADA }, - { "tosa;"sv, 0x02929 }, - { "tprime;"sv, 0x02034 }, - { "trade;"sv, 0x02122 }, - { "triangle;"sv, 0x025B5 }, - { "triangledown;"sv, 0x025BF }, - { "triangleleft;"sv, 0x025C3 }, - { "trianglelefteq;"sv, 0x022B4 }, - { "triangleq;"sv, 0x0225C }, - { "triangleright;"sv, 0x025B9 }, - { "trianglerighteq;"sv, 0x022B5 }, - { "tridot;"sv, 0x025EC }, - { "trie;"sv, 0x0225C }, - { "triminus;"sv, 0x02A3A }, - { "triplus;"sv, 0x02A39 }, - { "trisb;"sv, 0x029CD }, - { "tritime;"sv, 0x02A3B }, - { "trpezium;"sv, 0x023E2 }, - { "tscr;"sv, 0x1D4C9 }, - { "tscy;"sv, 0x00446 }, - { "tshcy;"sv, 0x0045B }, - { "tstrok;"sv, 0x00167 }, - { "twixt;"sv, 0x0226C }, - { "twoheadleftarrow;"sv, 0x0219E }, - { "twoheadrightarrow;"sv, 0x021A0 }, - { "uArr;"sv, 0x021D1 }, - { "uHar;"sv, 0x02963 }, - { "uacute;"sv, 0x000FA }, - { "uacute"sv, 0x000FA }, - { "uarr;"sv, 0x02191 }, - { "ubrcy;"sv, 0x0045E }, - { "ubreve;"sv, 0x0016D }, - { "ucirc;"sv, 0x000FB }, - { "ucirc"sv, 0x000FB }, - { "ucy;"sv, 0x00443 }, - { "udarr;"sv, 0x021C5 }, - { "udblac;"sv, 0x00171 }, - { "udhar;"sv, 0x0296E }, - { "ufisht;"sv, 0x0297E }, - { "ufr;"sv, 0x1D532 }, - { "ugrave;"sv, 0x000F9 }, - { "ugrave"sv, 0x000F9 }, - { "uharl;"sv, 0x021BF }, - { "uharr;"sv, 0x021BE }, - { "uhblk;"sv, 0x02580 }, - { "ulcorn;"sv, 0x0231C }, - { "ulcorner;"sv, 0x0231C }, - { "ulcrop;"sv, 0x0230F }, - { "ultri;"sv, 0x025F8 }, - { "umacr;"sv, 0x0016B }, - { "uml;"sv, 0x000A8 }, - { "uml"sv, 0x000A8 }, - { "uogon;"sv, 0x00173 }, - { "uopf;"sv, 0x1D566 }, - { "uparrow;"sv, 0x02191 }, - { "updownarrow;"sv, 0x02195 }, - { "upharpoonleft;"sv, 0x021BF }, - { "upharpoonright;"sv, 0x021BE }, - { "uplus;"sv, 0x0228E }, - { "upsi;"sv, 0x003C5 }, - { "upsih;"sv, 0x003D2 }, - { "upsilon;"sv, 0x003C5 }, - { "upuparrows;"sv, 0x021C8 }, - { "urcorn;"sv, 0x0231D }, - { "urcorner;"sv, 0x0231D }, - { "urcrop;"sv, 0x0230E }, - { "uring;"sv, 0x0016F }, - { "urtri;"sv, 0x025F9 }, - { "uscr;"sv, 0x1D4CA }, - { "utdot;"sv, 0x022F0 }, - { "utilde;"sv, 0x00169 }, - { "utri;"sv, 0x025B5 }, - { "utrif;"sv, 0x025B4 }, - { "uuarr;"sv, 0x021C8 }, - { "uuml;"sv, 0x000FC }, - { "uuml"sv, 0x000FC }, - { "uwangle;"sv, 0x029A7 }, - { "vArr;"sv, 0x021D5 }, - { "vBar;"sv, 0x02AE8 }, - { "vBarv;"sv, 0x02AE9 }, - { "vDash;"sv, 0x022A8 }, - { "vangrt;"sv, 0x0299C }, - { "varepsilon;"sv, 0x003F5 }, - { "varkappa;"sv, 0x003F0 }, - { "varnothing;"sv, 0x02205 }, - { "varphi;"sv, 0x003D5 }, - { "varpi;"sv, 0x003D6 }, - { "varpropto;"sv, 0x0221D }, - { "varr;"sv, 0x02195 }, - { "varrho;"sv, 0x003F1 }, - { "varsigma;"sv, 0x003C2 }, - { "vartheta;"sv, 0x003D1 }, - { "vartriangleleft;"sv, 0x022B2 }, - { "vartriangleright;"sv, 0x022B3 }, - { "vcy;"sv, 0x00432 }, - { "vdash;"sv, 0x022A2 }, - { "vee;"sv, 0x02228 }, - { "veebar;"sv, 0x022BB }, - { "veeeq;"sv, 0x0225A }, - { "vellip;"sv, 0x022EE }, - { "verbar;"sv, 0x0007C }, - { "vert;"sv, 0x0007C }, - { "vfr;"sv, 0x1D533 }, - { "vltri;"sv, 0x022B2 }, - { "vopf;"sv, 0x1D567 }, - { "vprop;"sv, 0x0221D }, - { "vrtri;"sv, 0x022B3 }, - { "vscr;"sv, 0x1D4CB }, - { "vzigzag;"sv, 0x0299A }, - { "wcirc;"sv, 0x00175 }, - { "wedbar;"sv, 0x02A5F }, - { "wedge;"sv, 0x02227 }, - { "wedgeq;"sv, 0x02259 }, - { "weierp;"sv, 0x02118 }, - { "wfr;"sv, 0x1D534 }, - { "wopf;"sv, 0x1D568 }, - { "wp;"sv, 0x02118 }, - { "wr;"sv, 0x02240 }, - { "wreath;"sv, 0x02240 }, - { "wscr;"sv, 0x1D4CC }, - { "xcap;"sv, 0x022C2 }, - { "xcirc;"sv, 0x025EF }, - { "xcup;"sv, 0x022C3 }, - { "xdtri;"sv, 0x025BD }, - { "xfr;"sv, 0x1D535 }, - { "xhArr;"sv, 0x027FA }, - { "xharr;"sv, 0x027F7 }, - { "xi;"sv, 0x003BE }, - { "xlArr;"sv, 0x027F8 }, - { "xlarr;"sv, 0x027F5 }, - { "xmap;"sv, 0x027FC }, - { "xnis;"sv, 0x022FB }, - { "xodot;"sv, 0x02A00 }, - { "xopf;"sv, 0x1D569 }, - { "xoplus;"sv, 0x02A01 }, - { "xotime;"sv, 0x02A02 }, - { "xrArr;"sv, 0x027F9 }, - { "xrarr;"sv, 0x027F6 }, - { "xscr;"sv, 0x1D4CD }, - { "xsqcup;"sv, 0x02A06 }, - { "xuplus;"sv, 0x02A04 }, - { "xutri;"sv, 0x025B3 }, - { "xvee;"sv, 0x022C1 }, - { "xwedge;"sv, 0x022C0 }, - { "yacute;"sv, 0x000FD }, - { "yacute"sv, 0x000FD }, - { "yacy;"sv, 0x0044F }, - { "ycirc;"sv, 0x00177 }, - { "ycy;"sv, 0x0044B }, - { "yen;"sv, 0x000A5 }, - { "yen"sv, 0x000A5 }, - { "yfr;"sv, 0x1D536 }, - { "yicy;"sv, 0x00457 }, - { "yopf;"sv, 0x1D56A }, - { "yscr;"sv, 0x1D4CE }, - { "yucy;"sv, 0x0044E }, - { "yuml;"sv, 0x000FF }, - { "yuml"sv, 0x000FF }, - { "zacute;"sv, 0x0017A }, - { "zcaron;"sv, 0x0017E }, - { "zcy;"sv, 0x00437 }, - { "zdot;"sv, 0x0017C }, - { "zeetrf;"sv, 0x02128 }, - { "zeta;"sv, 0x003B6 }, - { "zfr;"sv, 0x1D537 }, - { "zhcy;"sv, 0x00436 }, - { "zigrarr;"sv, 0x021DD }, - { "zopf;"sv, 0x1D56B }, - { "zscr;"sv, 0x1D4CF }, - { "zwj;"sv, 0x0200D }, - { "zwnj;"sv, 0x0200C } - }; - - constexpr struct { - StringView entity; - u32 code_point1; - u32 code_point2; - } double_code_point_entities[] = { - { "NotEqualTilde;"sv, 0x02242, 0x00338 }, - { "NotGreaterFullEqual;"sv, 0x02267, 0x00338 }, - { "NotGreaterGreater;"sv, 0x0226B, 0x00338 }, - { "NotGreaterSlantEqual;"sv, 0x02A7E, 0x00338 }, - { "NotHumpDownHump;"sv, 0x0224E, 0x00338 }, - { "NotHumpEqual;"sv, 0x0224F, 0x00338 }, - { "NotLeftTriangleBar;"sv, 0x029CF, 0x00338 }, - { "NotLessLess;"sv, 0x0226A, 0x00338 }, - { "NotLessSlantEqual;"sv, 0x02A7D, 0x00338 }, - { "NotNestedGreaterGreater;"sv, 0x02AA2, 0x00338 }, - { "NotNestedLessLess;"sv, 0x02AA1, 0x00338 }, - { "NotPrecedesEqual;"sv, 0x02AAF, 0x00338 }, - { "NotRightTriangleBar;"sv, 0x029D0, 0x00338 }, - { "NotSquareSubset;"sv, 0x0228F, 0x00338 }, - { "NotSquareSuperset;"sv, 0x02290, 0x00338 }, - { "NotSubset;"sv, 0x02282, 0x020D2 }, - { "NotSucceedsEqual;"sv, 0x02AB0, 0x00338 }, - { "NotSucceedsTilde;"sv, 0x0227F, 0x00338 }, - { "NotSuperset;"sv, 0x02283, 0x020D2 }, - { "ThickSpace;"sv, 0x0205F, 0x0200A }, - { "acE;"sv, 0x0223E, 0x00333 }, - { "bne;"sv, 0x0003D, 0x020E5 }, - { "bnequiv;"sv, 0x02261, 0x020E5 }, - { "caps;"sv, 0x02229, 0x0FE00 }, - { "cups;"sv, 0x0222A, 0x0FE00 }, - { "fjlig;"sv, 0x00066, 0x0006A }, - { "gesl;"sv, 0x022DB, 0x0FE00 }, - { "gvertneqq;"sv, 0x02269, 0x0FE00 }, - { "gvnE;"sv, 0x02269, 0x0FE00 }, - { "lates;"sv, 0x02AAD, 0x0FE00 }, - { "lesg;"sv, 0x022DA, 0x0FE00 }, - { "lvertneqq;"sv, 0x02268, 0x0FE00 }, - { "lvnE;"sv, 0x02268, 0x0FE00 }, - { "nGg;"sv, 0x022D9, 0x00338 }, - { "nGt;"sv, 0x0226B, 0x020D2 }, - { "nGtv;"sv, 0x0226B, 0x00338 }, - { "nLl;"sv, 0x022D8, 0x00338 }, - { "nLt;"sv, 0x0226A, 0x020D2 }, - { "nLtv;"sv, 0x0226A, 0x00338 }, - { "nang;"sv, 0x02220, 0x020D2 }, - { "napE;"sv, 0x02A70, 0x00338 }, - { "napid;"sv, 0x0224B, 0x00338 }, - { "nbump;"sv, 0x0224E, 0x00338 }, - { "nbumpe;"sv, 0x0224F, 0x00338 }, - { "ncongdot;"sv, 0x02A6D, 0x00338 }, - { "nedot;"sv, 0x02250, 0x00338 }, - { "nesim;"sv, 0x02242, 0x00338 }, - { "ngE;"sv, 0x02267, 0x00338 }, - { "ngeqq;"sv, 0x02267, 0x00338 }, - { "ngeqslant;"sv, 0x02A7E, 0x00338 }, - { "nges;"sv, 0x02A7E, 0x00338 }, - { "nlE;"sv, 0x02266, 0x00338 }, - { "nleqq;"sv, 0x02266, 0x00338 }, - { "nleqslant;"sv, 0x02A7D, 0x00338 }, - { "nles;"sv, 0x02A7D, 0x00338 }, - { "notinE;"sv, 0x022F9, 0x00338 }, - { "notindot;"sv, 0x022F5, 0x00338 }, - { "nparsl;"sv, 0x02AFD, 0x020E5 }, - { "npart;"sv, 0x02202, 0x00338 }, - { "npre;"sv, 0x02AAF, 0x00338 }, - { "npreceq;"sv, 0x02AAF, 0x00338 }, - { "nrarrc;"sv, 0x02933, 0x00338 }, - { "nrarrw;"sv, 0x0219D, 0x00338 }, - { "nsce;"sv, 0x02AB0, 0x00338 }, - { "nsubE;"sv, 0x02AC5, 0x00338 }, - { "nsubset;"sv, 0x02282, 0x020D2 }, - { "nsubseteqq;"sv, 0x02AC5, 0x00338 }, - { "nsucceq;"sv, 0x02AB0, 0x00338 }, - { "nsupE;"sv, 0x02AC6, 0x00338 }, - { "nsupset;"sv, 0x02283, 0x020D2 }, - { "nsupseteqq;"sv, 0x02AC6, 0x00338 }, - { "nvap;"sv, 0x0224D, 0x020D2 }, - { "nvge;"sv, 0x02265, 0x020D2 }, - { "nvgt;"sv, 0x0003E, 0x020D2 }, - { "nvle;"sv, 0x02264, 0x020D2 }, - { "nvlt;"sv, 0x0003C, 0x020D2 }, - { "nvltrie;"sv, 0x022B4, 0x020D2 }, - { "nvrtrie;"sv, 0x022B5, 0x020D2 }, - { "nvsim;"sv, 0x0223C, 0x020D2 }, - { "race;"sv, 0x0223D, 0x00331 }, - { "smtes;"sv, 0x02AAC, 0x0FE00 }, - { "sqcaps;"sv, 0x02293, 0x0FE00 }, - { "sqcups;"sv, 0x02294, 0x0FE00 }, - { "varsubsetneq;"sv, 0x0228A, 0x0FE00 }, - { "varsubsetneqq;"sv, 0x02ACB, 0x0FE00 }, - { "varsupsetneq;"sv, 0x0228B, 0x0FE00 }, - { "varsupsetneqq;"sv, 0x02ACC, 0x0FE00 }, - { "vnsub;"sv, 0x02282, 0x020D2 }, - { "vnsup;"sv, 0x02283, 0x020D2 }, - { "vsubnE;"sv, 0x02ACB, 0x0FE00 }, - { "vsubne;"sv, 0x0228A, 0x0FE00 }, - { "vsupnE;"sv, 0x02ACC, 0x0FE00 }, - { "vsupne;"sv, 0x0228B, 0x0FE00 }, - }; - - EntityMatch match; - - for (auto& single_code_point_entity : single_code_point_entities) { - if (entity.starts_with(single_code_point_entity.entity)) { - if (match.entity.is_null() || single_code_point_entity.entity.length() > match.entity.length()) - match = { { single_code_point_entity.code_point }, single_code_point_entity.entity }; - } + auto child_index = named_character_reference_child_index(m_node_index); + auto maybe_updated_index = named_character_reference_find_sibling_and_update_unique_index(child_index, c, m_pending_unique_index); + if (!maybe_updated_index.has_value()) + return false; + m_overconsumed_code_points++; + m_node_index = maybe_updated_index.value(); + if (currently_matches()) { + m_last_matched_unique_index = m_pending_unique_index; + m_ends_with_semicolon = c == ';'; + m_overconsumed_code_points = 0; } - - for (auto& double_code_point_entity : double_code_point_entities) { - if (entity.starts_with(double_code_point_entity.entity)) { - if (match.entity.is_null() || double_code_point_entity.entity.length() > match.entity.length()) - match = EntityMatch { { double_code_point_entity.code_point1, double_code_point_entity.code_point2 }, StringView(double_code_point_entity.entity) }; - } - } - - if (match.entity.is_empty()) - return {}; - return match; + return true; } } diff --git a/Libraries/LibWeb/HTML/Parser/Entities.h b/Libraries/LibWeb/HTML/Parser/Entities.h index 8622b6781ac8..3bb8627d51b7 100644 --- a/Libraries/LibWeb/HTML/Parser/Entities.h +++ b/Libraries/LibWeb/HTML/Parser/Entities.h @@ -6,16 +6,47 @@ #pragma once -#include -#include +#include +#include +#include namespace Web::HTML { -struct EntityMatch { - Vector code_points; - StringView entity; -}; +class NamedCharacterReferenceMatcher { +public: + NamedCharacterReferenceMatcher() = default; + + // If `c` is the codepoint of a child of the current `node_index`, the `node_index` + // is updated to that child and the function returns `true`. + // Otherwise, the `node_index` is unchanged and the function returns false. + bool update_with_codepoint(u32 c) + { + if (c > 0x7F) + return false; + return update_with_ascii_char(static_cast(c)); + } + + // If `c` is the character of a child of the current `node_index`, the `node_index` + // is updated to that child and the function returns `true`. + // Otherwise, the `node_index` is unchanged and the function returns false. + bool update_with_ascii_char(u8 c); + + // Returns true if the current `node_index` is marked as the end of a word + bool currently_matches() const { return named_character_reference_is_end_of_word(m_node_index); } -Optional code_points_from_entity(StringView); + // Returns the code points associated with the last match, if any. + Optional code_points() const { return named_character_reference_codepoints_from_unique_index(m_last_matched_unique_index); } + + bool last_match_ends_with_semicolon() const { return m_ends_with_semicolon; } + + u8 overconsumed_code_points() const { return m_overconsumed_code_points; } + +private: + u16 m_node_index { 0 }; + u16 m_last_matched_unique_index { 0 }; + u16 m_pending_unique_index { 0 }; + u8 m_overconsumed_code_points { 0 }; + bool m_ends_with_semicolon { false }; +}; } diff --git a/Libraries/LibWeb/HTML/Parser/Entities.json b/Libraries/LibWeb/HTML/Parser/Entities.json new file mode 100644 index 000000000000..557170b41f47 --- /dev/null +++ b/Libraries/LibWeb/HTML/Parser/Entities.json @@ -0,0 +1,2233 @@ +{ + "Æ": { "codepoints": [198], "characters": "\u00C6" }, + "Æ": { "codepoints": [198], "characters": "\u00C6" }, + "&": { "codepoints": [38], "characters": "\u0026" }, + "&": { "codepoints": [38], "characters": "\u0026" }, + "Á": { "codepoints": [193], "characters": "\u00C1" }, + "Á": { "codepoints": [193], "characters": "\u00C1" }, + "Ă": { "codepoints": [258], "characters": "\u0102" }, + "Â": { "codepoints": [194], "characters": "\u00C2" }, + "Â": { "codepoints": [194], "characters": "\u00C2" }, + "А": { "codepoints": [1040], "characters": "\u0410" }, + "𝔄": { "codepoints": [120068], "characters": "\uD835\uDD04" }, + "À": { "codepoints": [192], "characters": "\u00C0" }, + "À": { "codepoints": [192], "characters": "\u00C0" }, + "Α": { "codepoints": [913], "characters": "\u0391" }, + "Ā": { "codepoints": [256], "characters": "\u0100" }, + "⩓": { "codepoints": [10835], "characters": "\u2A53" }, + "Ą": { "codepoints": [260], "characters": "\u0104" }, + "𝔸": { "codepoints": [120120], "characters": "\uD835\uDD38" }, + "⁡": { "codepoints": [8289], "characters": "\u2061" }, + "Å": { "codepoints": [197], "characters": "\u00C5" }, + "Å": { "codepoints": [197], "characters": "\u00C5" }, + "𝒜": { "codepoints": [119964], "characters": "\uD835\uDC9C" }, + "≔": { "codepoints": [8788], "characters": "\u2254" }, + "Ã": { "codepoints": [195], "characters": "\u00C3" }, + "Ã": { "codepoints": [195], "characters": "\u00C3" }, + "Ä": { "codepoints": [196], "characters": "\u00C4" }, + "Ä": { "codepoints": [196], "characters": "\u00C4" }, + "∖": { "codepoints": [8726], "characters": "\u2216" }, + "⫧": { "codepoints": [10983], "characters": "\u2AE7" }, + "⌆": { "codepoints": [8966], "characters": "\u2306" }, + "Б": { "codepoints": [1041], "characters": "\u0411" }, + "∵": { "codepoints": [8757], "characters": "\u2235" }, + "ℬ": { "codepoints": [8492], "characters": "\u212C" }, + "Β": { "codepoints": [914], "characters": "\u0392" }, + "𝔅": { "codepoints": [120069], "characters": "\uD835\uDD05" }, + "𝔹": { "codepoints": [120121], "characters": "\uD835\uDD39" }, + "˘": { "codepoints": [728], "characters": "\u02D8" }, + "ℬ": { "codepoints": [8492], "characters": "\u212C" }, + "≎": { "codepoints": [8782], "characters": "\u224E" }, + "Ч": { "codepoints": [1063], "characters": "\u0427" }, + "©": { "codepoints": [169], "characters": "\u00A9" }, + "©": { "codepoints": [169], "characters": "\u00A9" }, + "Ć": { "codepoints": [262], "characters": "\u0106" }, + "⋒": { "codepoints": [8914], "characters": "\u22D2" }, + "ⅅ": { "codepoints": [8517], "characters": "\u2145" }, + "ℭ": { "codepoints": [8493], "characters": "\u212D" }, + "Č": { "codepoints": [268], "characters": "\u010C" }, + "Ç": { "codepoints": [199], "characters": "\u00C7" }, + "Ç": { "codepoints": [199], "characters": "\u00C7" }, + "Ĉ": { "codepoints": [264], "characters": "\u0108" }, + "∰": { "codepoints": [8752], "characters": "\u2230" }, + "Ċ": { "codepoints": [266], "characters": "\u010A" }, + "¸": { "codepoints": [184], "characters": "\u00B8" }, + "·": { "codepoints": [183], "characters": "\u00B7" }, + "ℭ": { "codepoints": [8493], "characters": "\u212D" }, + "Χ": { "codepoints": [935], "characters": "\u03A7" }, + "⊙": { "codepoints": [8857], "characters": "\u2299" }, + "⊖": { "codepoints": [8854], "characters": "\u2296" }, + "⊕": { "codepoints": [8853], "characters": "\u2295" }, + "⊗": { "codepoints": [8855], "characters": "\u2297" }, + "∲": { "codepoints": [8754], "characters": "\u2232" }, + "”": { "codepoints": [8221], "characters": "\u201D" }, + "’": { "codepoints": [8217], "characters": "\u2019" }, + "∷": { "codepoints": [8759], "characters": "\u2237" }, + "⩴": { "codepoints": [10868], "characters": "\u2A74" }, + "≡": { "codepoints": [8801], "characters": "\u2261" }, + "∯": { "codepoints": [8751], "characters": "\u222F" }, + "∮": { "codepoints": [8750], "characters": "\u222E" }, + "ℂ": { "codepoints": [8450], "characters": "\u2102" }, + "∐": { "codepoints": [8720], "characters": "\u2210" }, + "∳": { "codepoints": [8755], "characters": "\u2233" }, + "⨯": { "codepoints": [10799], "characters": "\u2A2F" }, + "𝒞": { "codepoints": [119966], "characters": "\uD835\uDC9E" }, + "⋓": { "codepoints": [8915], "characters": "\u22D3" }, + "≍": { "codepoints": [8781], "characters": "\u224D" }, + "ⅅ": { "codepoints": [8517], "characters": "\u2145" }, + "⤑": { "codepoints": [10513], "characters": "\u2911" }, + "Ђ": { "codepoints": [1026], "characters": "\u0402" }, + "Ѕ": { "codepoints": [1029], "characters": "\u0405" }, + "Џ": { "codepoints": [1039], "characters": "\u040F" }, + "‡": { "codepoints": [8225], "characters": "\u2021" }, + "↡": { "codepoints": [8609], "characters": "\u21A1" }, + "⫤": { "codepoints": [10980], "characters": "\u2AE4" }, + "Ď": { "codepoints": [270], "characters": "\u010E" }, + "Д": { "codepoints": [1044], "characters": "\u0414" }, + "∇": { "codepoints": [8711], "characters": "\u2207" }, + "Δ": { "codepoints": [916], "characters": "\u0394" }, + "𝔇": { "codepoints": [120071], "characters": "\uD835\uDD07" }, + "´": { "codepoints": [180], "characters": "\u00B4" }, + "˙": { "codepoints": [729], "characters": "\u02D9" }, + "˝": { "codepoints": [733], "characters": "\u02DD" }, + "`": { "codepoints": [96], "characters": "\u0060" }, + "˜": { "codepoints": [732], "characters": "\u02DC" }, + "⋄": { "codepoints": [8900], "characters": "\u22C4" }, + "ⅆ": { "codepoints": [8518], "characters": "\u2146" }, + "𝔻": { "codepoints": [120123], "characters": "\uD835\uDD3B" }, + "¨": { "codepoints": [168], "characters": "\u00A8" }, + "⃜": { "codepoints": [8412], "characters": "\u20DC" }, + "≐": { "codepoints": [8784], "characters": "\u2250" }, + "∯": { "codepoints": [8751], "characters": "\u222F" }, + "¨": { "codepoints": [168], "characters": "\u00A8" }, + "⇓": { "codepoints": [8659], "characters": "\u21D3" }, + "⇐": { "codepoints": [8656], "characters": "\u21D0" }, + "⇔": { "codepoints": [8660], "characters": "\u21D4" }, + "⫤": { "codepoints": [10980], "characters": "\u2AE4" }, + "⟸": { "codepoints": [10232], "characters": "\u27F8" }, + "⟺": { "codepoints": [10234], "characters": "\u27FA" }, + "⟹": { "codepoints": [10233], "characters": "\u27F9" }, + "⇒": { "codepoints": [8658], "characters": "\u21D2" }, + "⊨": { "codepoints": [8872], "characters": "\u22A8" }, + "⇑": { "codepoints": [8657], "characters": "\u21D1" }, + "⇕": { "codepoints": [8661], "characters": "\u21D5" }, + "∥": { "codepoints": [8741], "characters": "\u2225" }, + "↓": { "codepoints": [8595], "characters": "\u2193" }, + "⤓": { "codepoints": [10515], "characters": "\u2913" }, + "⇵": { "codepoints": [8693], "characters": "\u21F5" }, + "̑": { "codepoints": [785], "characters": "\u0311" }, + "⥐": { "codepoints": [10576], "characters": "\u2950" }, + "⥞": { "codepoints": [10590], "characters": "\u295E" }, + "↽": { "codepoints": [8637], "characters": "\u21BD" }, + "⥖": { "codepoints": [10582], "characters": "\u2956" }, + "⥟": { "codepoints": [10591], "characters": "\u295F" }, + "⇁": { "codepoints": [8641], "characters": "\u21C1" }, + "⥗": { "codepoints": [10583], "characters": "\u2957" }, + "⊤": { "codepoints": [8868], "characters": "\u22A4" }, + "↧": { "codepoints": [8615], "characters": "\u21A7" }, + "⇓": { "codepoints": [8659], "characters": "\u21D3" }, + "𝒟": { "codepoints": [119967], "characters": "\uD835\uDC9F" }, + "Đ": { "codepoints": [272], "characters": "\u0110" }, + "Ŋ": { "codepoints": [330], "characters": "\u014A" }, + "Ð": { "codepoints": [208], "characters": "\u00D0" }, + "Ð": { "codepoints": [208], "characters": "\u00D0" }, + "É": { "codepoints": [201], "characters": "\u00C9" }, + "É": { "codepoints": [201], "characters": "\u00C9" }, + "Ě": { "codepoints": [282], "characters": "\u011A" }, + "Ê": { "codepoints": [202], "characters": "\u00CA" }, + "Ê": { "codepoints": [202], "characters": "\u00CA" }, + "Э": { "codepoints": [1069], "characters": "\u042D" }, + "Ė": { "codepoints": [278], "characters": "\u0116" }, + "𝔈": { "codepoints": [120072], "characters": "\uD835\uDD08" }, + "È": { "codepoints": [200], "characters": "\u00C8" }, + "È": { "codepoints": [200], "characters": "\u00C8" }, + "∈": { "codepoints": [8712], "characters": "\u2208" }, + "Ē": { "codepoints": [274], "characters": "\u0112" }, + "◻": { "codepoints": [9723], "characters": "\u25FB" }, + "▫": { "codepoints": [9643], "characters": "\u25AB" }, + "Ę": { "codepoints": [280], "characters": "\u0118" }, + "𝔼": { "codepoints": [120124], "characters": "\uD835\uDD3C" }, + "Ε": { "codepoints": [917], "characters": "\u0395" }, + "⩵": { "codepoints": [10869], "characters": "\u2A75" }, + "≂": { "codepoints": [8770], "characters": "\u2242" }, + "⇌": { "codepoints": [8652], "characters": "\u21CC" }, + "ℰ": { "codepoints": [8496], "characters": "\u2130" }, + "⩳": { "codepoints": [10867], "characters": "\u2A73" }, + "Η": { "codepoints": [919], "characters": "\u0397" }, + "Ë": { "codepoints": [203], "characters": "\u00CB" }, + "Ë": { "codepoints": [203], "characters": "\u00CB" }, + "∃": { "codepoints": [8707], "characters": "\u2203" }, + "ⅇ": { "codepoints": [8519], "characters": "\u2147" }, + "Ф": { "codepoints": [1060], "characters": "\u0424" }, + "𝔉": { "codepoints": [120073], "characters": "\uD835\uDD09" }, + "◼": { "codepoints": [9724], "characters": "\u25FC" }, + "▪": { "codepoints": [9642], "characters": "\u25AA" }, + "𝔽": { "codepoints": [120125], "characters": "\uD835\uDD3D" }, + "∀": { "codepoints": [8704], "characters": "\u2200" }, + "ℱ": { "codepoints": [8497], "characters": "\u2131" }, + "ℱ": { "codepoints": [8497], "characters": "\u2131" }, + "Ѓ": { "codepoints": [1027], "characters": "\u0403" }, + ">": { "codepoints": [62], "characters": "\u003E" }, + ">": { "codepoints": [62], "characters": "\u003E" }, + "Γ": { "codepoints": [915], "characters": "\u0393" }, + "Ϝ": { "codepoints": [988], "characters": "\u03DC" }, + "Ğ": { "codepoints": [286], "characters": "\u011E" }, + "Ģ": { "codepoints": [290], "characters": "\u0122" }, + "Ĝ": { "codepoints": [284], "characters": "\u011C" }, + "Г": { "codepoints": [1043], "characters": "\u0413" }, + "Ġ": { "codepoints": [288], "characters": "\u0120" }, + "𝔊": { "codepoints": [120074], "characters": "\uD835\uDD0A" }, + "⋙": { "codepoints": [8921], "characters": "\u22D9" }, + "𝔾": { "codepoints": [120126], "characters": "\uD835\uDD3E" }, + "≥": { "codepoints": [8805], "characters": "\u2265" }, + "⋛": { "codepoints": [8923], "characters": "\u22DB" }, + "≧": { "codepoints": [8807], "characters": "\u2267" }, + "⪢": { "codepoints": [10914], "characters": "\u2AA2" }, + "≷": { "codepoints": [8823], "characters": "\u2277" }, + "⩾": { "codepoints": [10878], "characters": "\u2A7E" }, + "≳": { "codepoints": [8819], "characters": "\u2273" }, + "𝒢": { "codepoints": [119970], "characters": "\uD835\uDCA2" }, + "≫": { "codepoints": [8811], "characters": "\u226B" }, + "Ъ": { "codepoints": [1066], "characters": "\u042A" }, + "ˇ": { "codepoints": [711], "characters": "\u02C7" }, + "^": { "codepoints": [94], "characters": "\u005E" }, + "Ĥ": { "codepoints": [292], "characters": "\u0124" }, + "ℌ": { "codepoints": [8460], "characters": "\u210C" }, + "ℋ": { "codepoints": [8459], "characters": "\u210B" }, + "ℍ": { "codepoints": [8461], "characters": "\u210D" }, + "─": { "codepoints": [9472], "characters": "\u2500" }, + "ℋ": { "codepoints": [8459], "characters": "\u210B" }, + "Ħ": { "codepoints": [294], "characters": "\u0126" }, + "≎": { "codepoints": [8782], "characters": "\u224E" }, + "≏": { "codepoints": [8783], "characters": "\u224F" }, + "Е": { "codepoints": [1045], "characters": "\u0415" }, + "IJ": { "codepoints": [306], "characters": "\u0132" }, + "Ё": { "codepoints": [1025], "characters": "\u0401" }, + "Í": { "codepoints": [205], "characters": "\u00CD" }, + "Í": { "codepoints": [205], "characters": "\u00CD" }, + "Î": { "codepoints": [206], "characters": "\u00CE" }, + "Î": { "codepoints": [206], "characters": "\u00CE" }, + "И": { "codepoints": [1048], "characters": "\u0418" }, + "İ": { "codepoints": [304], "characters": "\u0130" }, + "ℑ": { "codepoints": [8465], "characters": "\u2111" }, + "Ì": { "codepoints": [204], "characters": "\u00CC" }, + "Ì": { "codepoints": [204], "characters": "\u00CC" }, + "ℑ": { "codepoints": [8465], "characters": "\u2111" }, + "Ī": { "codepoints": [298], "characters": "\u012A" }, + "ⅈ": { "codepoints": [8520], "characters": "\u2148" }, + "⇒": { "codepoints": [8658], "characters": "\u21D2" }, + "∬": { "codepoints": [8748], "characters": "\u222C" }, + "∫": { "codepoints": [8747], "characters": "\u222B" }, + "⋂": { "codepoints": [8898], "characters": "\u22C2" }, + "⁣": { "codepoints": [8291], "characters": "\u2063" }, + "⁢": { "codepoints": [8290], "characters": "\u2062" }, + "Į": { "codepoints": [302], "characters": "\u012E" }, + "𝕀": { "codepoints": [120128], "characters": "\uD835\uDD40" }, + "Ι": { "codepoints": [921], "characters": "\u0399" }, + "ℐ": { "codepoints": [8464], "characters": "\u2110" }, + "Ĩ": { "codepoints": [296], "characters": "\u0128" }, + "І": { "codepoints": [1030], "characters": "\u0406" }, + "Ï": { "codepoints": [207], "characters": "\u00CF" }, + "Ï": { "codepoints": [207], "characters": "\u00CF" }, + "Ĵ": { "codepoints": [308], "characters": "\u0134" }, + "Й": { "codepoints": [1049], "characters": "\u0419" }, + "𝔍": { "codepoints": [120077], "characters": "\uD835\uDD0D" }, + "𝕁": { "codepoints": [120129], "characters": "\uD835\uDD41" }, + "𝒥": { "codepoints": [119973], "characters": "\uD835\uDCA5" }, + "Ј": { "codepoints": [1032], "characters": "\u0408" }, + "Є": { "codepoints": [1028], "characters": "\u0404" }, + "Х": { "codepoints": [1061], "characters": "\u0425" }, + "Ќ": { "codepoints": [1036], "characters": "\u040C" }, + "Κ": { "codepoints": [922], "characters": "\u039A" }, + "Ķ": { "codepoints": [310], "characters": "\u0136" }, + "К": { "codepoints": [1050], "characters": "\u041A" }, + "𝔎": { "codepoints": [120078], "characters": "\uD835\uDD0E" }, + "𝕂": { "codepoints": [120130], "characters": "\uD835\uDD42" }, + "𝒦": { "codepoints": [119974], "characters": "\uD835\uDCA6" }, + "Љ": { "codepoints": [1033], "characters": "\u0409" }, + "<": { "codepoints": [60], "characters": "\u003C" }, + "<": { "codepoints": [60], "characters": "\u003C" }, + "Ĺ": { "codepoints": [313], "characters": "\u0139" }, + "Λ": { "codepoints": [923], "characters": "\u039B" }, + "⟪": { "codepoints": [10218], "characters": "\u27EA" }, + "ℒ": { "codepoints": [8466], "characters": "\u2112" }, + "↞": { "codepoints": [8606], "characters": "\u219E" }, + "Ľ": { "codepoints": [317], "characters": "\u013D" }, + "Ļ": { "codepoints": [315], "characters": "\u013B" }, + "Л": { "codepoints": [1051], "characters": "\u041B" }, + "⟨": { "codepoints": [10216], "characters": "\u27E8" }, + "←": { "codepoints": [8592], "characters": "\u2190" }, + "⇤": { "codepoints": [8676], "characters": "\u21E4" }, + "⇆": { "codepoints": [8646], "characters": "\u21C6" }, + "⌈": { "codepoints": [8968], "characters": "\u2308" }, + "⟦": { "codepoints": [10214], "characters": "\u27E6" }, + "⥡": { "codepoints": [10593], "characters": "\u2961" }, + "⇃": { "codepoints": [8643], "characters": "\u21C3" }, + "⥙": { "codepoints": [10585], "characters": "\u2959" }, + "⌊": { "codepoints": [8970], "characters": "\u230A" }, + "↔": { "codepoints": [8596], "characters": "\u2194" }, + "⥎": { "codepoints": [10574], "characters": "\u294E" }, + "⊣": { "codepoints": [8867], "characters": "\u22A3" }, + "↤": { "codepoints": [8612], "characters": "\u21A4" }, + "⥚": { "codepoints": [10586], "characters": "\u295A" }, + "⊲": { "codepoints": [8882], "characters": "\u22B2" }, + "⧏": { "codepoints": [10703], "characters": "\u29CF" }, + "⊴": { "codepoints": [8884], "characters": "\u22B4" }, + "⥑": { "codepoints": [10577], "characters": "\u2951" }, + "⥠": { "codepoints": [10592], "characters": "\u2960" }, + "↿": { "codepoints": [8639], "characters": "\u21BF" }, + "⥘": { "codepoints": [10584], "characters": "\u2958" }, + "↼": { "codepoints": [8636], "characters": "\u21BC" }, + "⥒": { "codepoints": [10578], "characters": "\u2952" }, + "⇐": { "codepoints": [8656], "characters": "\u21D0" }, + "⇔": { "codepoints": [8660], "characters": "\u21D4" }, + "⋚": { "codepoints": [8922], "characters": "\u22DA" }, + "≦": { "codepoints": [8806], "characters": "\u2266" }, + "≶": { "codepoints": [8822], "characters": "\u2276" }, + "⪡": { "codepoints": [10913], "characters": "\u2AA1" }, + "⩽": { "codepoints": [10877], "characters": "\u2A7D" }, + "≲": { "codepoints": [8818], "characters": "\u2272" }, + "𝔏": { "codepoints": [120079], "characters": "\uD835\uDD0F" }, + "⋘": { "codepoints": [8920], "characters": "\u22D8" }, + "⇚": { "codepoints": [8666], "characters": "\u21DA" }, + "Ŀ": { "codepoints": [319], "characters": "\u013F" }, + "⟵": { "codepoints": [10229], "characters": "\u27F5" }, + "⟷": { "codepoints": [10231], "characters": "\u27F7" }, + "⟶": { "codepoints": [10230], "characters": "\u27F6" }, + "⟸": { "codepoints": [10232], "characters": "\u27F8" }, + "⟺": { "codepoints": [10234], "characters": "\u27FA" }, + "⟹": { "codepoints": [10233], "characters": "\u27F9" }, + "𝕃": { "codepoints": [120131], "characters": "\uD835\uDD43" }, + "↙": { "codepoints": [8601], "characters": "\u2199" }, + "↘": { "codepoints": [8600], "characters": "\u2198" }, + "ℒ": { "codepoints": [8466], "characters": "\u2112" }, + "↰": { "codepoints": [8624], "characters": "\u21B0" }, + "Ł": { "codepoints": [321], "characters": "\u0141" }, + "≪": { "codepoints": [8810], "characters": "\u226A" }, + "⤅": { "codepoints": [10501], "characters": "\u2905" }, + "М": { "codepoints": [1052], "characters": "\u041C" }, + " ": { "codepoints": [8287], "characters": "\u205F" }, + "ℳ": { "codepoints": [8499], "characters": "\u2133" }, + "𝔐": { "codepoints": [120080], "characters": "\uD835\uDD10" }, + "∓": { "codepoints": [8723], "characters": "\u2213" }, + "𝕄": { "codepoints": [120132], "characters": "\uD835\uDD44" }, + "ℳ": { "codepoints": [8499], "characters": "\u2133" }, + "Μ": { "codepoints": [924], "characters": "\u039C" }, + "Њ": { "codepoints": [1034], "characters": "\u040A" }, + "Ń": { "codepoints": [323], "characters": "\u0143" }, + "Ň": { "codepoints": [327], "characters": "\u0147" }, + "Ņ": { "codepoints": [325], "characters": "\u0145" }, + "Н": { "codepoints": [1053], "characters": "\u041D" }, + "​": { "codepoints": [8203], "characters": "\u200B" }, + "​": { "codepoints": [8203], "characters": "\u200B" }, + "​": { "codepoints": [8203], "characters": "\u200B" }, + "​": { "codepoints": [8203], "characters": "\u200B" }, + "≫": { "codepoints": [8811], "characters": "\u226B" }, + "≪": { "codepoints": [8810], "characters": "\u226A" }, + " ": { "codepoints": [10], "characters": "\u000A" }, + "𝔑": { "codepoints": [120081], "characters": "\uD835\uDD11" }, + "⁠": { "codepoints": [8288], "characters": "\u2060" }, + " ": { "codepoints": [160], "characters": "\u00A0" }, + "ℕ": { "codepoints": [8469], "characters": "\u2115" }, + "⫬": { "codepoints": [10988], "characters": "\u2AEC" }, + "≢": { "codepoints": [8802], "characters": "\u2262" }, + "≭": { "codepoints": [8813], "characters": "\u226D" }, + "∦": { "codepoints": [8742], "characters": "\u2226" }, + "∉": { "codepoints": [8713], "characters": "\u2209" }, + "≠": { "codepoints": [8800], "characters": "\u2260" }, + "≂̸": { "codepoints": [8770, 824], "characters": "\u2242\u0338" }, + "∄": { "codepoints": [8708], "characters": "\u2204" }, + "≯": { "codepoints": [8815], "characters": "\u226F" }, + "≱": { "codepoints": [8817], "characters": "\u2271" }, + "≧̸": { "codepoints": [8807, 824], "characters": "\u2267\u0338" }, + "≫̸": { "codepoints": [8811, 824], "characters": "\u226B\u0338" }, + "≹": { "codepoints": [8825], "characters": "\u2279" }, + "⩾̸": { "codepoints": [10878, 824], "characters": "\u2A7E\u0338" }, + "≵": { "codepoints": [8821], "characters": "\u2275" }, + "≎̸": { "codepoints": [8782, 824], "characters": "\u224E\u0338" }, + "≏̸": { "codepoints": [8783, 824], "characters": "\u224F\u0338" }, + "⋪": { "codepoints": [8938], "characters": "\u22EA" }, + "⧏̸": { "codepoints": [10703, 824], "characters": "\u29CF\u0338" }, + "⋬": { "codepoints": [8940], "characters": "\u22EC" }, + "≮": { "codepoints": [8814], "characters": "\u226E" }, + "≰": { "codepoints": [8816], "characters": "\u2270" }, + "≸": { "codepoints": [8824], "characters": "\u2278" }, + "≪̸": { "codepoints": [8810, 824], "characters": "\u226A\u0338" }, + "⩽̸": { "codepoints": [10877, 824], "characters": "\u2A7D\u0338" }, + "≴": { "codepoints": [8820], "characters": "\u2274" }, + "⪢̸": { "codepoints": [10914, 824], "characters": "\u2AA2\u0338" }, + "⪡̸": { "codepoints": [10913, 824], "characters": "\u2AA1\u0338" }, + "⊀": { "codepoints": [8832], "characters": "\u2280" }, + "⪯̸": { "codepoints": [10927, 824], "characters": "\u2AAF\u0338" }, + "⋠": { "codepoints": [8928], "characters": "\u22E0" }, + "∌": { "codepoints": [8716], "characters": "\u220C" }, + "⋫": { "codepoints": [8939], "characters": "\u22EB" }, + "⧐̸": { "codepoints": [10704, 824], "characters": "\u29D0\u0338" }, + "⋭": { "codepoints": [8941], "characters": "\u22ED" }, + "⊏̸": { "codepoints": [8847, 824], "characters": "\u228F\u0338" }, + "⋢": { "codepoints": [8930], "characters": "\u22E2" }, + "⊐̸": { "codepoints": [8848, 824], "characters": "\u2290\u0338" }, + "⋣": { "codepoints": [8931], "characters": "\u22E3" }, + "⊂⃒": { "codepoints": [8834, 8402], "characters": "\u2282\u20D2" }, + "⊈": { "codepoints": [8840], "characters": "\u2288" }, + "⊁": { "codepoints": [8833], "characters": "\u2281" }, + "⪰̸": { "codepoints": [10928, 824], "characters": "\u2AB0\u0338" }, + "⋡": { "codepoints": [8929], "characters": "\u22E1" }, + "≿̸": { "codepoints": [8831, 824], "characters": "\u227F\u0338" }, + "⊃⃒": { "codepoints": [8835, 8402], "characters": "\u2283\u20D2" }, + "⊉": { "codepoints": [8841], "characters": "\u2289" }, + "≁": { "codepoints": [8769], "characters": "\u2241" }, + "≄": { "codepoints": [8772], "characters": "\u2244" }, + "≇": { "codepoints": [8775], "characters": "\u2247" }, + "≉": { "codepoints": [8777], "characters": "\u2249" }, + "∤": { "codepoints": [8740], "characters": "\u2224" }, + "𝒩": { "codepoints": [119977], "characters": "\uD835\uDCA9" }, + "Ñ": { "codepoints": [209], "characters": "\u00D1" }, + "Ñ": { "codepoints": [209], "characters": "\u00D1" }, + "Ν": { "codepoints": [925], "characters": "\u039D" }, + "Œ": { "codepoints": [338], "characters": "\u0152" }, + "Ó": { "codepoints": [211], "characters": "\u00D3" }, + "Ó": { "codepoints": [211], "characters": "\u00D3" }, + "Ô": { "codepoints": [212], "characters": "\u00D4" }, + "Ô": { "codepoints": [212], "characters": "\u00D4" }, + "О": { "codepoints": [1054], "characters": "\u041E" }, + "Ő": { "codepoints": [336], "characters": "\u0150" }, + "𝔒": { "codepoints": [120082], "characters": "\uD835\uDD12" }, + "Ò": { "codepoints": [210], "characters": "\u00D2" }, + "Ò": { "codepoints": [210], "characters": "\u00D2" }, + "Ō": { "codepoints": [332], "characters": "\u014C" }, + "Ω": { "codepoints": [937], "characters": "\u03A9" }, + "Ο": { "codepoints": [927], "characters": "\u039F" }, + "𝕆": { "codepoints": [120134], "characters": "\uD835\uDD46" }, + "“": { "codepoints": [8220], "characters": "\u201C" }, + "‘": { "codepoints": [8216], "characters": "\u2018" }, + "⩔": { "codepoints": [10836], "characters": "\u2A54" }, + "𝒪": { "codepoints": [119978], "characters": "\uD835\uDCAA" }, + "Ø": { "codepoints": [216], "characters": "\u00D8" }, + "Ø": { "codepoints": [216], "characters": "\u00D8" }, + "Õ": { "codepoints": [213], "characters": "\u00D5" }, + "Õ": { "codepoints": [213], "characters": "\u00D5" }, + "⨷": { "codepoints": [10807], "characters": "\u2A37" }, + "Ö": { "codepoints": [214], "characters": "\u00D6" }, + "Ö": { "codepoints": [214], "characters": "\u00D6" }, + "‾": { "codepoints": [8254], "characters": "\u203E" }, + "⏞": { "codepoints": [9182], "characters": "\u23DE" }, + "⎴": { "codepoints": [9140], "characters": "\u23B4" }, + "⏜": { "codepoints": [9180], "characters": "\u23DC" }, + "∂": { "codepoints": [8706], "characters": "\u2202" }, + "П": { "codepoints": [1055], "characters": "\u041F" }, + "𝔓": { "codepoints": [120083], "characters": "\uD835\uDD13" }, + "Φ": { "codepoints": [934], "characters": "\u03A6" }, + "Π": { "codepoints": [928], "characters": "\u03A0" }, + "±": { "codepoints": [177], "characters": "\u00B1" }, + "ℌ": { "codepoints": [8460], "characters": "\u210C" }, + "ℙ": { "codepoints": [8473], "characters": "\u2119" }, + "⪻": { "codepoints": [10939], "characters": "\u2ABB" }, + "≺": { "codepoints": [8826], "characters": "\u227A" }, + "⪯": { "codepoints": [10927], "characters": "\u2AAF" }, + "≼": { "codepoints": [8828], "characters": "\u227C" }, + "≾": { "codepoints": [8830], "characters": "\u227E" }, + "″": { "codepoints": [8243], "characters": "\u2033" }, + "∏": { "codepoints": [8719], "characters": "\u220F" }, + "∷": { "codepoints": [8759], "characters": "\u2237" }, + "∝": { "codepoints": [8733], "characters": "\u221D" }, + "𝒫": { "codepoints": [119979], "characters": "\uD835\uDCAB" }, + "Ψ": { "codepoints": [936], "characters": "\u03A8" }, + """: { "codepoints": [34], "characters": "\u0022" }, + """: { "codepoints": [34], "characters": "\u0022" }, + "𝔔": { "codepoints": [120084], "characters": "\uD835\uDD14" }, + "ℚ": { "codepoints": [8474], "characters": "\u211A" }, + "𝒬": { "codepoints": [119980], "characters": "\uD835\uDCAC" }, + "⤐": { "codepoints": [10512], "characters": "\u2910" }, + "®": { "codepoints": [174], "characters": "\u00AE" }, + "®": { "codepoints": [174], "characters": "\u00AE" }, + "Ŕ": { "codepoints": [340], "characters": "\u0154" }, + "⟫": { "codepoints": [10219], "characters": "\u27EB" }, + "↠": { "codepoints": [8608], "characters": "\u21A0" }, + "⤖": { "codepoints": [10518], "characters": "\u2916" }, + "Ř": { "codepoints": [344], "characters": "\u0158" }, + "Ŗ": { "codepoints": [342], "characters": "\u0156" }, + "Р": { "codepoints": [1056], "characters": "\u0420" }, + "ℜ": { "codepoints": [8476], "characters": "\u211C" }, + "∋": { "codepoints": [8715], "characters": "\u220B" }, + "⇋": { "codepoints": [8651], "characters": "\u21CB" }, + "⥯": { "codepoints": [10607], "characters": "\u296F" }, + "ℜ": { "codepoints": [8476], "characters": "\u211C" }, + "Ρ": { "codepoints": [929], "characters": "\u03A1" }, + "⟩": { "codepoints": [10217], "characters": "\u27E9" }, + "→": { "codepoints": [8594], "characters": "\u2192" }, + "⇥": { "codepoints": [8677], "characters": "\u21E5" }, + "⇄": { "codepoints": [8644], "characters": "\u21C4" }, + "⌉": { "codepoints": [8969], "characters": "\u2309" }, + "⟧": { "codepoints": [10215], "characters": "\u27E7" }, + "⥝": { "codepoints": [10589], "characters": "\u295D" }, + "⇂": { "codepoints": [8642], "characters": "\u21C2" }, + "⥕": { "codepoints": [10581], "characters": "\u2955" }, + "⌋": { "codepoints": [8971], "characters": "\u230B" }, + "⊢": { "codepoints": [8866], "characters": "\u22A2" }, + "↦": { "codepoints": [8614], "characters": "\u21A6" }, + "⥛": { "codepoints": [10587], "characters": "\u295B" }, + "⊳": { "codepoints": [8883], "characters": "\u22B3" }, + "⧐": { "codepoints": [10704], "characters": "\u29D0" }, + "⊵": { "codepoints": [8885], "characters": "\u22B5" }, + "⥏": { "codepoints": [10575], "characters": "\u294F" }, + "⥜": { "codepoints": [10588], "characters": "\u295C" }, + "↾": { "codepoints": [8638], "characters": "\u21BE" }, + "⥔": { "codepoints": [10580], "characters": "\u2954" }, + "⇀": { "codepoints": [8640], "characters": "\u21C0" }, + "⥓": { "codepoints": [10579], "characters": "\u2953" }, + "⇒": { "codepoints": [8658], "characters": "\u21D2" }, + "ℝ": { "codepoints": [8477], "characters": "\u211D" }, + "⥰": { "codepoints": [10608], "characters": "\u2970" }, + "⇛": { "codepoints": [8667], "characters": "\u21DB" }, + "ℛ": { "codepoints": [8475], "characters": "\u211B" }, + "↱": { "codepoints": [8625], "characters": "\u21B1" }, + "⧴": { "codepoints": [10740], "characters": "\u29F4" }, + "Щ": { "codepoints": [1065], "characters": "\u0429" }, + "Ш": { "codepoints": [1064], "characters": "\u0428" }, + "Ь": { "codepoints": [1068], "characters": "\u042C" }, + "Ś": { "codepoints": [346], "characters": "\u015A" }, + "⪼": { "codepoints": [10940], "characters": "\u2ABC" }, + "Š": { "codepoints": [352], "characters": "\u0160" }, + "Ş": { "codepoints": [350], "characters": "\u015E" }, + "Ŝ": { "codepoints": [348], "characters": "\u015C" }, + "С": { "codepoints": [1057], "characters": "\u0421" }, + "𝔖": { "codepoints": [120086], "characters": "\uD835\uDD16" }, + "↓": { "codepoints": [8595], "characters": "\u2193" }, + "←": { "codepoints": [8592], "characters": "\u2190" }, + "→": { "codepoints": [8594], "characters": "\u2192" }, + "↑": { "codepoints": [8593], "characters": "\u2191" }, + "Σ": { "codepoints": [931], "characters": "\u03A3" }, + "∘": { "codepoints": [8728], "characters": "\u2218" }, + "𝕊": { "codepoints": [120138], "characters": "\uD835\uDD4A" }, + "√": { "codepoints": [8730], "characters": "\u221A" }, + "□": { "codepoints": [9633], "characters": "\u25A1" }, + "⊓": { "codepoints": [8851], "characters": "\u2293" }, + "⊏": { "codepoints": [8847], "characters": "\u228F" }, + "⊑": { "codepoints": [8849], "characters": "\u2291" }, + "⊐": { "codepoints": [8848], "characters": "\u2290" }, + "⊒": { "codepoints": [8850], "characters": "\u2292" }, + "⊔": { "codepoints": [8852], "characters": "\u2294" }, + "𝒮": { "codepoints": [119982], "characters": "\uD835\uDCAE" }, + "⋆": { "codepoints": [8902], "characters": "\u22C6" }, + "⋐": { "codepoints": [8912], "characters": "\u22D0" }, + "⋐": { "codepoints": [8912], "characters": "\u22D0" }, + "⊆": { "codepoints": [8838], "characters": "\u2286" }, + "≻": { "codepoints": [8827], "characters": "\u227B" }, + "⪰": { "codepoints": [10928], "characters": "\u2AB0" }, + "≽": { "codepoints": [8829], "characters": "\u227D" }, + "≿": { "codepoints": [8831], "characters": "\u227F" }, + "∋": { "codepoints": [8715], "characters": "\u220B" }, + "∑": { "codepoints": [8721], "characters": "\u2211" }, + "⋑": { "codepoints": [8913], "characters": "\u22D1" }, + "⊃": { "codepoints": [8835], "characters": "\u2283" }, + "⊇": { "codepoints": [8839], "characters": "\u2287" }, + "⋑": { "codepoints": [8913], "characters": "\u22D1" }, + "Þ": { "codepoints": [222], "characters": "\u00DE" }, + "Þ": { "codepoints": [222], "characters": "\u00DE" }, + "™": { "codepoints": [8482], "characters": "\u2122" }, + "Ћ": { "codepoints": [1035], "characters": "\u040B" }, + "Ц": { "codepoints": [1062], "characters": "\u0426" }, + " ": { "codepoints": [9], "characters": "\u0009" }, + "Τ": { "codepoints": [932], "characters": "\u03A4" }, + "Ť": { "codepoints": [356], "characters": "\u0164" }, + "Ţ": { "codepoints": [354], "characters": "\u0162" }, + "Т": { "codepoints": [1058], "characters": "\u0422" }, + "𝔗": { "codepoints": [120087], "characters": "\uD835\uDD17" }, + "∴": { "codepoints": [8756], "characters": "\u2234" }, + "Θ": { "codepoints": [920], "characters": "\u0398" }, + "  ": { "codepoints": [8287, 8202], "characters": "\u205F\u200A" }, + " ": { "codepoints": [8201], "characters": "\u2009" }, + "∼": { "codepoints": [8764], "characters": "\u223C" }, + "≃": { "codepoints": [8771], "characters": "\u2243" }, + "≅": { "codepoints": [8773], "characters": "\u2245" }, + "≈": { "codepoints": [8776], "characters": "\u2248" }, + "𝕋": { "codepoints": [120139], "characters": "\uD835\uDD4B" }, + "⃛": { "codepoints": [8411], "characters": "\u20DB" }, + "𝒯": { "codepoints": [119983], "characters": "\uD835\uDCAF" }, + "Ŧ": { "codepoints": [358], "characters": "\u0166" }, + "Ú": { "codepoints": [218], "characters": "\u00DA" }, + "Ú": { "codepoints": [218], "characters": "\u00DA" }, + "↟": { "codepoints": [8607], "characters": "\u219F" }, + "⥉": { "codepoints": [10569], "characters": "\u2949" }, + "Ў": { "codepoints": [1038], "characters": "\u040E" }, + "Ŭ": { "codepoints": [364], "characters": "\u016C" }, + "Û": { "codepoints": [219], "characters": "\u00DB" }, + "Û": { "codepoints": [219], "characters": "\u00DB" }, + "У": { "codepoints": [1059], "characters": "\u0423" }, + "Ű": { "codepoints": [368], "characters": "\u0170" }, + "𝔘": { "codepoints": [120088], "characters": "\uD835\uDD18" }, + "Ù": { "codepoints": [217], "characters": "\u00D9" }, + "Ù": { "codepoints": [217], "characters": "\u00D9" }, + "Ū": { "codepoints": [362], "characters": "\u016A" }, + "_": { "codepoints": [95], "characters": "\u005F" }, + "⏟": { "codepoints": [9183], "characters": "\u23DF" }, + "⎵": { "codepoints": [9141], "characters": "\u23B5" }, + "⏝": { "codepoints": [9181], "characters": "\u23DD" }, + "⋃": { "codepoints": [8899], "characters": "\u22C3" }, + "⊎": { "codepoints": [8846], "characters": "\u228E" }, + "Ų": { "codepoints": [370], "characters": "\u0172" }, + "𝕌": { "codepoints": [120140], "characters": "\uD835\uDD4C" }, + "↑": { "codepoints": [8593], "characters": "\u2191" }, + "⤒": { "codepoints": [10514], "characters": "\u2912" }, + "⇅": { "codepoints": [8645], "characters": "\u21C5" }, + "↕": { "codepoints": [8597], "characters": "\u2195" }, + "⥮": { "codepoints": [10606], "characters": "\u296E" }, + "⊥": { "codepoints": [8869], "characters": "\u22A5" }, + "↥": { "codepoints": [8613], "characters": "\u21A5" }, + "⇑": { "codepoints": [8657], "characters": "\u21D1" }, + "⇕": { "codepoints": [8661], "characters": "\u21D5" }, + "↖": { "codepoints": [8598], "characters": "\u2196" }, + "↗": { "codepoints": [8599], "characters": "\u2197" }, + "ϒ": { "codepoints": [978], "characters": "\u03D2" }, + "Υ": { "codepoints": [933], "characters": "\u03A5" }, + "Ů": { "codepoints": [366], "characters": "\u016E" }, + "𝒰": { "codepoints": [119984], "characters": "\uD835\uDCB0" }, + "Ũ": { "codepoints": [360], "characters": "\u0168" }, + "Ü": { "codepoints": [220], "characters": "\u00DC" }, + "Ü": { "codepoints": [220], "characters": "\u00DC" }, + "⊫": { "codepoints": [8875], "characters": "\u22AB" }, + "⫫": { "codepoints": [10987], "characters": "\u2AEB" }, + "В": { "codepoints": [1042], "characters": "\u0412" }, + "⊩": { "codepoints": [8873], "characters": "\u22A9" }, + "⫦": { "codepoints": [10982], "characters": "\u2AE6" }, + "⋁": { "codepoints": [8897], "characters": "\u22C1" }, + "‖": { "codepoints": [8214], "characters": "\u2016" }, + "‖": { "codepoints": [8214], "characters": "\u2016" }, + "∣": { "codepoints": [8739], "characters": "\u2223" }, + "|": { "codepoints": [124], "characters": "\u007C" }, + "❘": { "codepoints": [10072], "characters": "\u2758" }, + "≀": { "codepoints": [8768], "characters": "\u2240" }, + " ": { "codepoints": [8202], "characters": "\u200A" }, + "𝔙": { "codepoints": [120089], "characters": "\uD835\uDD19" }, + "𝕍": { "codepoints": [120141], "characters": "\uD835\uDD4D" }, + "𝒱": { "codepoints": [119985], "characters": "\uD835\uDCB1" }, + "⊪": { "codepoints": [8874], "characters": "\u22AA" }, + "Ŵ": { "codepoints": [372], "characters": "\u0174" }, + "⋀": { "codepoints": [8896], "characters": "\u22C0" }, + "𝔚": { "codepoints": [120090], "characters": "\uD835\uDD1A" }, + "𝕎": { "codepoints": [120142], "characters": "\uD835\uDD4E" }, + "𝒲": { "codepoints": [119986], "characters": "\uD835\uDCB2" }, + "𝔛": { "codepoints": [120091], "characters": "\uD835\uDD1B" }, + "Ξ": { "codepoints": [926], "characters": "\u039E" }, + "𝕏": { "codepoints": [120143], "characters": "\uD835\uDD4F" }, + "𝒳": { "codepoints": [119987], "characters": "\uD835\uDCB3" }, + "Я": { "codepoints": [1071], "characters": "\u042F" }, + "Ї": { "codepoints": [1031], "characters": "\u0407" }, + "Ю": { "codepoints": [1070], "characters": "\u042E" }, + "Ý": { "codepoints": [221], "characters": "\u00DD" }, + "Ý": { "codepoints": [221], "characters": "\u00DD" }, + "Ŷ": { "codepoints": [374], "characters": "\u0176" }, + "Ы": { "codepoints": [1067], "characters": "\u042B" }, + "𝔜": { "codepoints": [120092], "characters": "\uD835\uDD1C" }, + "𝕐": { "codepoints": [120144], "characters": "\uD835\uDD50" }, + "𝒴": { "codepoints": [119988], "characters": "\uD835\uDCB4" }, + "Ÿ": { "codepoints": [376], "characters": "\u0178" }, + "Ж": { "codepoints": [1046], "characters": "\u0416" }, + "Ź": { "codepoints": [377], "characters": "\u0179" }, + "Ž": { "codepoints": [381], "characters": "\u017D" }, + "З": { "codepoints": [1047], "characters": "\u0417" }, + "Ż": { "codepoints": [379], "characters": "\u017B" }, + "​": { "codepoints": [8203], "characters": "\u200B" }, + "Ζ": { "codepoints": [918], "characters": "\u0396" }, + "ℨ": { "codepoints": [8488], "characters": "\u2128" }, + "ℤ": { "codepoints": [8484], "characters": "\u2124" }, + "𝒵": { "codepoints": [119989], "characters": "\uD835\uDCB5" }, + "á": { "codepoints": [225], "characters": "\u00E1" }, + "á": { "codepoints": [225], "characters": "\u00E1" }, + "ă": { "codepoints": [259], "characters": "\u0103" }, + "∾": { "codepoints": [8766], "characters": "\u223E" }, + "∾̳": { "codepoints": [8766, 819], "characters": "\u223E\u0333" }, + "∿": { "codepoints": [8767], "characters": "\u223F" }, + "â": { "codepoints": [226], "characters": "\u00E2" }, + "â": { "codepoints": [226], "characters": "\u00E2" }, + "´": { "codepoints": [180], "characters": "\u00B4" }, + "´": { "codepoints": [180], "characters": "\u00B4" }, + "а": { "codepoints": [1072], "characters": "\u0430" }, + "æ": { "codepoints": [230], "characters": "\u00E6" }, + "æ": { "codepoints": [230], "characters": "\u00E6" }, + "⁡": { "codepoints": [8289], "characters": "\u2061" }, + "𝔞": { "codepoints": [120094], "characters": "\uD835\uDD1E" }, + "à": { "codepoints": [224], "characters": "\u00E0" }, + "à": { "codepoints": [224], "characters": "\u00E0" }, + "ℵ": { "codepoints": [8501], "characters": "\u2135" }, + "ℵ": { "codepoints": [8501], "characters": "\u2135" }, + "α": { "codepoints": [945], "characters": "\u03B1" }, + "ā": { "codepoints": [257], "characters": "\u0101" }, + "⨿": { "codepoints": [10815], "characters": "\u2A3F" }, + "&": { "codepoints": [38], "characters": "\u0026" }, + "&": { "codepoints": [38], "characters": "\u0026" }, + "∧": { "codepoints": [8743], "characters": "\u2227" }, + "⩕": { "codepoints": [10837], "characters": "\u2A55" }, + "⩜": { "codepoints": [10844], "characters": "\u2A5C" }, + "⩘": { "codepoints": [10840], "characters": "\u2A58" }, + "⩚": { "codepoints": [10842], "characters": "\u2A5A" }, + "∠": { "codepoints": [8736], "characters": "\u2220" }, + "⦤": { "codepoints": [10660], "characters": "\u29A4" }, + "∠": { "codepoints": [8736], "characters": "\u2220" }, + "∡": { "codepoints": [8737], "characters": "\u2221" }, + "⦨": { "codepoints": [10664], "characters": "\u29A8" }, + "⦩": { "codepoints": [10665], "characters": "\u29A9" }, + "⦪": { "codepoints": [10666], "characters": "\u29AA" }, + "⦫": { "codepoints": [10667], "characters": "\u29AB" }, + "⦬": { "codepoints": [10668], "characters": "\u29AC" }, + "⦭": { "codepoints": [10669], "characters": "\u29AD" }, + "⦮": { "codepoints": [10670], "characters": "\u29AE" }, + "⦯": { "codepoints": [10671], "characters": "\u29AF" }, + "∟": { "codepoints": [8735], "characters": "\u221F" }, + "⊾": { "codepoints": [8894], "characters": "\u22BE" }, + "⦝": { "codepoints": [10653], "characters": "\u299D" }, + "∢": { "codepoints": [8738], "characters": "\u2222" }, + "Å": { "codepoints": [197], "characters": "\u00C5" }, + "⍼": { "codepoints": [9084], "characters": "\u237C" }, + "ą": { "codepoints": [261], "characters": "\u0105" }, + "𝕒": { "codepoints": [120146], "characters": "\uD835\uDD52" }, + "≈": { "codepoints": [8776], "characters": "\u2248" }, + "⩰": { "codepoints": [10864], "characters": "\u2A70" }, + "⩯": { "codepoints": [10863], "characters": "\u2A6F" }, + "≊": { "codepoints": [8778], "characters": "\u224A" }, + "≋": { "codepoints": [8779], "characters": "\u224B" }, + "'": { "codepoints": [39], "characters": "\u0027" }, + "≈": { "codepoints": [8776], "characters": "\u2248" }, + "≊": { "codepoints": [8778], "characters": "\u224A" }, + "å": { "codepoints": [229], "characters": "\u00E5" }, + "å": { "codepoints": [229], "characters": "\u00E5" }, + "𝒶": { "codepoints": [119990], "characters": "\uD835\uDCB6" }, + "*": { "codepoints": [42], "characters": "\u002A" }, + "≈": { "codepoints": [8776], "characters": "\u2248" }, + "≍": { "codepoints": [8781], "characters": "\u224D" }, + "ã": { "codepoints": [227], "characters": "\u00E3" }, + "ã": { "codepoints": [227], "characters": "\u00E3" }, + "ä": { "codepoints": [228], "characters": "\u00E4" }, + "ä": { "codepoints": [228], "characters": "\u00E4" }, + "∳": { "codepoints": [8755], "characters": "\u2233" }, + "⨑": { "codepoints": [10769], "characters": "\u2A11" }, + "⫭": { "codepoints": [10989], "characters": "\u2AED" }, + "≌": { "codepoints": [8780], "characters": "\u224C" }, + "϶": { "codepoints": [1014], "characters": "\u03F6" }, + "‵": { "codepoints": [8245], "characters": "\u2035" }, + "∽": { "codepoints": [8765], "characters": "\u223D" }, + "⋍": { "codepoints": [8909], "characters": "\u22CD" }, + "⊽": { "codepoints": [8893], "characters": "\u22BD" }, + "⌅": { "codepoints": [8965], "characters": "\u2305" }, + "⌅": { "codepoints": [8965], "characters": "\u2305" }, + "⎵": { "codepoints": [9141], "characters": "\u23B5" }, + "⎶": { "codepoints": [9142], "characters": "\u23B6" }, + "≌": { "codepoints": [8780], "characters": "\u224C" }, + "б": { "codepoints": [1073], "characters": "\u0431" }, + "„": { "codepoints": [8222], "characters": "\u201E" }, + "∵": { "codepoints": [8757], "characters": "\u2235" }, + "∵": { "codepoints": [8757], "characters": "\u2235" }, + "⦰": { "codepoints": [10672], "characters": "\u29B0" }, + "϶": { "codepoints": [1014], "characters": "\u03F6" }, + "ℬ": { "codepoints": [8492], "characters": "\u212C" }, + "β": { "codepoints": [946], "characters": "\u03B2" }, + "ℶ": { "codepoints": [8502], "characters": "\u2136" }, + "≬": { "codepoints": [8812], "characters": "\u226C" }, + "𝔟": { "codepoints": [120095], "characters": "\uD835\uDD1F" }, + "⋂": { "codepoints": [8898], "characters": "\u22C2" }, + "◯": { "codepoints": [9711], "characters": "\u25EF" }, + "⋃": { "codepoints": [8899], "characters": "\u22C3" }, + "⨀": { "codepoints": [10752], "characters": "\u2A00" }, + "⨁": { "codepoints": [10753], "characters": "\u2A01" }, + "⨂": { "codepoints": [10754], "characters": "\u2A02" }, + "⨆": { "codepoints": [10758], "characters": "\u2A06" }, + "★": { "codepoints": [9733], "characters": "\u2605" }, + "▽": { "codepoints": [9661], "characters": "\u25BD" }, + "△": { "codepoints": [9651], "characters": "\u25B3" }, + "⨄": { "codepoints": [10756], "characters": "\u2A04" }, + "⋁": { "codepoints": [8897], "characters": "\u22C1" }, + "⋀": { "codepoints": [8896], "characters": "\u22C0" }, + "⤍": { "codepoints": [10509], "characters": "\u290D" }, + "⧫": { "codepoints": [10731], "characters": "\u29EB" }, + "▪": { "codepoints": [9642], "characters": "\u25AA" }, + "▴": { "codepoints": [9652], "characters": "\u25B4" }, + "▾": { "codepoints": [9662], "characters": "\u25BE" }, + "◂": { "codepoints": [9666], "characters": "\u25C2" }, + "▸": { "codepoints": [9656], "characters": "\u25B8" }, + "␣": { "codepoints": [9251], "characters": "\u2423" }, + "▒": { "codepoints": [9618], "characters": "\u2592" }, + "░": { "codepoints": [9617], "characters": "\u2591" }, + "▓": { "codepoints": [9619], "characters": "\u2593" }, + "█": { "codepoints": [9608], "characters": "\u2588" }, + "=⃥": { "codepoints": [61, 8421], "characters": "\u003D\u20E5" }, + "≡⃥": { "codepoints": [8801, 8421], "characters": "\u2261\u20E5" }, + "⌐": { "codepoints": [8976], "characters": "\u2310" }, + "𝕓": { "codepoints": [120147], "characters": "\uD835\uDD53" }, + "⊥": { "codepoints": [8869], "characters": "\u22A5" }, + "⊥": { "codepoints": [8869], "characters": "\u22A5" }, + "⋈": { "codepoints": [8904], "characters": "\u22C8" }, + "╗": { "codepoints": [9559], "characters": "\u2557" }, + "╔": { "codepoints": [9556], "characters": "\u2554" }, + "╖": { "codepoints": [9558], "characters": "\u2556" }, + "╓": { "codepoints": [9555], "characters": "\u2553" }, + "═": { "codepoints": [9552], "characters": "\u2550" }, + "╦": { "codepoints": [9574], "characters": "\u2566" }, + "╩": { "codepoints": [9577], "characters": "\u2569" }, + "╤": { "codepoints": [9572], "characters": "\u2564" }, + "╧": { "codepoints": [9575], "characters": "\u2567" }, + "╝": { "codepoints": [9565], "characters": "\u255D" }, + "╚": { "codepoints": [9562], "characters": "\u255A" }, + "╜": { "codepoints": [9564], "characters": "\u255C" }, + "╙": { "codepoints": [9561], "characters": "\u2559" }, + "║": { "codepoints": [9553], "characters": "\u2551" }, + "╬": { "codepoints": [9580], "characters": "\u256C" }, + "╣": { "codepoints": [9571], "characters": "\u2563" }, + "╠": { "codepoints": [9568], "characters": "\u2560" }, + "╫": { "codepoints": [9579], "characters": "\u256B" }, + "╢": { "codepoints": [9570], "characters": "\u2562" }, + "╟": { "codepoints": [9567], "characters": "\u255F" }, + "⧉": { "codepoints": [10697], "characters": "\u29C9" }, + "╕": { "codepoints": [9557], "characters": "\u2555" }, + "╒": { "codepoints": [9554], "characters": "\u2552" }, + "┐": { "codepoints": [9488], "characters": "\u2510" }, + "┌": { "codepoints": [9484], "characters": "\u250C" }, + "─": { "codepoints": [9472], "characters": "\u2500" }, + "╥": { "codepoints": [9573], "characters": "\u2565" }, + "╨": { "codepoints": [9576], "characters": "\u2568" }, + "┬": { "codepoints": [9516], "characters": "\u252C" }, + "┴": { "codepoints": [9524], "characters": "\u2534" }, + "⊟": { "codepoints": [8863], "characters": "\u229F" }, + "⊞": { "codepoints": [8862], "characters": "\u229E" }, + "⊠": { "codepoints": [8864], "characters": "\u22A0" }, + "╛": { "codepoints": [9563], "characters": "\u255B" }, + "╘": { "codepoints": [9560], "characters": "\u2558" }, + "┘": { "codepoints": [9496], "characters": "\u2518" }, + "└": { "codepoints": [9492], "characters": "\u2514" }, + "│": { "codepoints": [9474], "characters": "\u2502" }, + "╪": { "codepoints": [9578], "characters": "\u256A" }, + "╡": { "codepoints": [9569], "characters": "\u2561" }, + "╞": { "codepoints": [9566], "characters": "\u255E" }, + "┼": { "codepoints": [9532], "characters": "\u253C" }, + "┤": { "codepoints": [9508], "characters": "\u2524" }, + "├": { "codepoints": [9500], "characters": "\u251C" }, + "‵": { "codepoints": [8245], "characters": "\u2035" }, + "˘": { "codepoints": [728], "characters": "\u02D8" }, + "¦": { "codepoints": [166], "characters": "\u00A6" }, + "¦": { "codepoints": [166], "characters": "\u00A6" }, + "𝒷": { "codepoints": [119991], "characters": "\uD835\uDCB7" }, + "⁏": { "codepoints": [8271], "characters": "\u204F" }, + "∽": { "codepoints": [8765], "characters": "\u223D" }, + "⋍": { "codepoints": [8909], "characters": "\u22CD" }, + "\": { "codepoints": [92], "characters": "\u005C" }, + "⧅": { "codepoints": [10693], "characters": "\u29C5" }, + "⟈": { "codepoints": [10184], "characters": "\u27C8" }, + "•": { "codepoints": [8226], "characters": "\u2022" }, + "•": { "codepoints": [8226], "characters": "\u2022" }, + "≎": { "codepoints": [8782], "characters": "\u224E" }, + "⪮": { "codepoints": [10926], "characters": "\u2AAE" }, + "≏": { "codepoints": [8783], "characters": "\u224F" }, + "≏": { "codepoints": [8783], "characters": "\u224F" }, + "ć": { "codepoints": [263], "characters": "\u0107" }, + "∩": { "codepoints": [8745], "characters": "\u2229" }, + "⩄": { "codepoints": [10820], "characters": "\u2A44" }, + "⩉": { "codepoints": [10825], "characters": "\u2A49" }, + "⩋": { "codepoints": [10827], "characters": "\u2A4B" }, + "⩇": { "codepoints": [10823], "characters": "\u2A47" }, + "⩀": { "codepoints": [10816], "characters": "\u2A40" }, + "∩︀": { "codepoints": [8745, 65024], "characters": "\u2229\uFE00" }, + "⁁": { "codepoints": [8257], "characters": "\u2041" }, + "ˇ": { "codepoints": [711], "characters": "\u02C7" }, + "⩍": { "codepoints": [10829], "characters": "\u2A4D" }, + "č": { "codepoints": [269], "characters": "\u010D" }, + "ç": { "codepoints": [231], "characters": "\u00E7" }, + "ç": { "codepoints": [231], "characters": "\u00E7" }, + "ĉ": { "codepoints": [265], "characters": "\u0109" }, + "⩌": { "codepoints": [10828], "characters": "\u2A4C" }, + "⩐": { "codepoints": [10832], "characters": "\u2A50" }, + "ċ": { "codepoints": [267], "characters": "\u010B" }, + "¸": { "codepoints": [184], "characters": "\u00B8" }, + "¸": { "codepoints": [184], "characters": "\u00B8" }, + "⦲": { "codepoints": [10674], "characters": "\u29B2" }, + "¢": { "codepoints": [162], "characters": "\u00A2" }, + "¢": { "codepoints": [162], "characters": "\u00A2" }, + "·": { "codepoints": [183], "characters": "\u00B7" }, + "𝔠": { "codepoints": [120096], "characters": "\uD835\uDD20" }, + "ч": { "codepoints": [1095], "characters": "\u0447" }, + "✓": { "codepoints": [10003], "characters": "\u2713" }, + "✓": { "codepoints": [10003], "characters": "\u2713" }, + "χ": { "codepoints": [967], "characters": "\u03C7" }, + "○": { "codepoints": [9675], "characters": "\u25CB" }, + "⧃": { "codepoints": [10691], "characters": "\u29C3" }, + "ˆ": { "codepoints": [710], "characters": "\u02C6" }, + "≗": { "codepoints": [8791], "characters": "\u2257" }, + "↺": { "codepoints": [8634], "characters": "\u21BA" }, + "↻": { "codepoints": [8635], "characters": "\u21BB" }, + "®": { "codepoints": [174], "characters": "\u00AE" }, + "Ⓢ": { "codepoints": [9416], "characters": "\u24C8" }, + "⊛": { "codepoints": [8859], "characters": "\u229B" }, + "⊚": { "codepoints": [8858], "characters": "\u229A" }, + "⊝": { "codepoints": [8861], "characters": "\u229D" }, + "≗": { "codepoints": [8791], "characters": "\u2257" }, + "⨐": { "codepoints": [10768], "characters": "\u2A10" }, + "⫯": { "codepoints": [10991], "characters": "\u2AEF" }, + "⧂": { "codepoints": [10690], "characters": "\u29C2" }, + "♣": { "codepoints": [9827], "characters": "\u2663" }, + "♣": { "codepoints": [9827], "characters": "\u2663" }, + ":": { "codepoints": [58], "characters": "\u003A" }, + "≔": { "codepoints": [8788], "characters": "\u2254" }, + "≔": { "codepoints": [8788], "characters": "\u2254" }, + ",": { "codepoints": [44], "characters": "\u002C" }, + "@": { "codepoints": [64], "characters": "\u0040" }, + "∁": { "codepoints": [8705], "characters": "\u2201" }, + "∘": { "codepoints": [8728], "characters": "\u2218" }, + "∁": { "codepoints": [8705], "characters": "\u2201" }, + "ℂ": { "codepoints": [8450], "characters": "\u2102" }, + "≅": { "codepoints": [8773], "characters": "\u2245" }, + "⩭": { "codepoints": [10861], "characters": "\u2A6D" }, + "∮": { "codepoints": [8750], "characters": "\u222E" }, + "𝕔": { "codepoints": [120148], "characters": "\uD835\uDD54" }, + "∐": { "codepoints": [8720], "characters": "\u2210" }, + "©": { "codepoints": [169], "characters": "\u00A9" }, + "©": { "codepoints": [169], "characters": "\u00A9" }, + "℗": { "codepoints": [8471], "characters": "\u2117" }, + "↵": { "codepoints": [8629], "characters": "\u21B5" }, + "✗": { "codepoints": [10007], "characters": "\u2717" }, + "𝒸": { "codepoints": [119992], "characters": "\uD835\uDCB8" }, + "⫏": { "codepoints": [10959], "characters": "\u2ACF" }, + "⫑": { "codepoints": [10961], "characters": "\u2AD1" }, + "⫐": { "codepoints": [10960], "characters": "\u2AD0" }, + "⫒": { "codepoints": [10962], "characters": "\u2AD2" }, + "⋯": { "codepoints": [8943], "characters": "\u22EF" }, + "⤸": { "codepoints": [10552], "characters": "\u2938" }, + "⤵": { "codepoints": [10549], "characters": "\u2935" }, + "⋞": { "codepoints": [8926], "characters": "\u22DE" }, + "⋟": { "codepoints": [8927], "characters": "\u22DF" }, + "↶": { "codepoints": [8630], "characters": "\u21B6" }, + "⤽": { "codepoints": [10557], "characters": "\u293D" }, + "∪": { "codepoints": [8746], "characters": "\u222A" }, + "⩈": { "codepoints": [10824], "characters": "\u2A48" }, + "⩆": { "codepoints": [10822], "characters": "\u2A46" }, + "⩊": { "codepoints": [10826], "characters": "\u2A4A" }, + "⊍": { "codepoints": [8845], "characters": "\u228D" }, + "⩅": { "codepoints": [10821], "characters": "\u2A45" }, + "∪︀": { "codepoints": [8746, 65024], "characters": "\u222A\uFE00" }, + "↷": { "codepoints": [8631], "characters": "\u21B7" }, + "⤼": { "codepoints": [10556], "characters": "\u293C" }, + "⋞": { "codepoints": [8926], "characters": "\u22DE" }, + "⋟": { "codepoints": [8927], "characters": "\u22DF" }, + "⋎": { "codepoints": [8910], "characters": "\u22CE" }, + "⋏": { "codepoints": [8911], "characters": "\u22CF" }, + "¤": { "codepoints": [164], "characters": "\u00A4" }, + "¤": { "codepoints": [164], "characters": "\u00A4" }, + "↶": { "codepoints": [8630], "characters": "\u21B6" }, + "↷": { "codepoints": [8631], "characters": "\u21B7" }, + "⋎": { "codepoints": [8910], "characters": "\u22CE" }, + "⋏": { "codepoints": [8911], "characters": "\u22CF" }, + "∲": { "codepoints": [8754], "characters": "\u2232" }, + "∱": { "codepoints": [8753], "characters": "\u2231" }, + "⌭": { "codepoints": [9005], "characters": "\u232D" }, + "⇓": { "codepoints": [8659], "characters": "\u21D3" }, + "⥥": { "codepoints": [10597], "characters": "\u2965" }, + "†": { "codepoints": [8224], "characters": "\u2020" }, + "ℸ": { "codepoints": [8504], "characters": "\u2138" }, + "↓": { "codepoints": [8595], "characters": "\u2193" }, + "‐": { "codepoints": [8208], "characters": "\u2010" }, + "⊣": { "codepoints": [8867], "characters": "\u22A3" }, + "⤏": { "codepoints": [10511], "characters": "\u290F" }, + "˝": { "codepoints": [733], "characters": "\u02DD" }, + "ď": { "codepoints": [271], "characters": "\u010F" }, + "д": { "codepoints": [1076], "characters": "\u0434" }, + "ⅆ": { "codepoints": [8518], "characters": "\u2146" }, + "‡": { "codepoints": [8225], "characters": "\u2021" }, + "⇊": { "codepoints": [8650], "characters": "\u21CA" }, + "⩷": { "codepoints": [10871], "characters": "\u2A77" }, + "°": { "codepoints": [176], "characters": "\u00B0" }, + "°": { "codepoints": [176], "characters": "\u00B0" }, + "δ": { "codepoints": [948], "characters": "\u03B4" }, + "⦱": { "codepoints": [10673], "characters": "\u29B1" }, + "⥿": { "codepoints": [10623], "characters": "\u297F" }, + "𝔡": { "codepoints": [120097], "characters": "\uD835\uDD21" }, + "⇃": { "codepoints": [8643], "characters": "\u21C3" }, + "⇂": { "codepoints": [8642], "characters": "\u21C2" }, + "⋄": { "codepoints": [8900], "characters": "\u22C4" }, + "⋄": { "codepoints": [8900], "characters": "\u22C4" }, + "♦": { "codepoints": [9830], "characters": "\u2666" }, + "♦": { "codepoints": [9830], "characters": "\u2666" }, + "¨": { "codepoints": [168], "characters": "\u00A8" }, + "ϝ": { "codepoints": [989], "characters": "\u03DD" }, + "⋲": { "codepoints": [8946], "characters": "\u22F2" }, + "÷": { "codepoints": [247], "characters": "\u00F7" }, + "÷": { "codepoints": [247], "characters": "\u00F7" }, + "÷": { "codepoints": [247], "characters": "\u00F7" }, + "⋇": { "codepoints": [8903], "characters": "\u22C7" }, + "⋇": { "codepoints": [8903], "characters": "\u22C7" }, + "ђ": { "codepoints": [1106], "characters": "\u0452" }, + "⌞": { "codepoints": [8990], "characters": "\u231E" }, + "⌍": { "codepoints": [8973], "characters": "\u230D" }, + "$": { "codepoints": [36], "characters": "\u0024" }, + "𝕕": { "codepoints": [120149], "characters": "\uD835\uDD55" }, + "˙": { "codepoints": [729], "characters": "\u02D9" }, + "≐": { "codepoints": [8784], "characters": "\u2250" }, + "≑": { "codepoints": [8785], "characters": "\u2251" }, + "∸": { "codepoints": [8760], "characters": "\u2238" }, + "∔": { "codepoints": [8724], "characters": "\u2214" }, + "⊡": { "codepoints": [8865], "characters": "\u22A1" }, + "⌆": { "codepoints": [8966], "characters": "\u2306" }, + "↓": { "codepoints": [8595], "characters": "\u2193" }, + "⇊": { "codepoints": [8650], "characters": "\u21CA" }, + "⇃": { "codepoints": [8643], "characters": "\u21C3" }, + "⇂": { "codepoints": [8642], "characters": "\u21C2" }, + "⤐": { "codepoints": [10512], "characters": "\u2910" }, + "⌟": { "codepoints": [8991], "characters": "\u231F" }, + "⌌": { "codepoints": [8972], "characters": "\u230C" }, + "𝒹": { "codepoints": [119993], "characters": "\uD835\uDCB9" }, + "ѕ": { "codepoints": [1109], "characters": "\u0455" }, + "⧶": { "codepoints": [10742], "characters": "\u29F6" }, + "đ": { "codepoints": [273], "characters": "\u0111" }, + "⋱": { "codepoints": [8945], "characters": "\u22F1" }, + "▿": { "codepoints": [9663], "characters": "\u25BF" }, + "▾": { "codepoints": [9662], "characters": "\u25BE" }, + "⇵": { "codepoints": [8693], "characters": "\u21F5" }, + "⥯": { "codepoints": [10607], "characters": "\u296F" }, + "⦦": { "codepoints": [10662], "characters": "\u29A6" }, + "џ": { "codepoints": [1119], "characters": "\u045F" }, + "⟿": { "codepoints": [10239], "characters": "\u27FF" }, + "⩷": { "codepoints": [10871], "characters": "\u2A77" }, + "≑": { "codepoints": [8785], "characters": "\u2251" }, + "é": { "codepoints": [233], "characters": "\u00E9" }, + "é": { "codepoints": [233], "characters": "\u00E9" }, + "⩮": { "codepoints": [10862], "characters": "\u2A6E" }, + "ě": { "codepoints": [283], "characters": "\u011B" }, + "≖": { "codepoints": [8790], "characters": "\u2256" }, + "ê": { "codepoints": [234], "characters": "\u00EA" }, + "ê": { "codepoints": [234], "characters": "\u00EA" }, + "≕": { "codepoints": [8789], "characters": "\u2255" }, + "э": { "codepoints": [1101], "characters": "\u044D" }, + "ė": { "codepoints": [279], "characters": "\u0117" }, + "ⅇ": { "codepoints": [8519], "characters": "\u2147" }, + "≒": { "codepoints": [8786], "characters": "\u2252" }, + "𝔢": { "codepoints": [120098], "characters": "\uD835\uDD22" }, + "⪚": { "codepoints": [10906], "characters": "\u2A9A" }, + "è": { "codepoints": [232], "characters": "\u00E8" }, + "è": { "codepoints": [232], "characters": "\u00E8" }, + "⪖": { "codepoints": [10902], "characters": "\u2A96" }, + "⪘": { "codepoints": [10904], "characters": "\u2A98" }, + "⪙": { "codepoints": [10905], "characters": "\u2A99" }, + "⏧": { "codepoints": [9191], "characters": "\u23E7" }, + "ℓ": { "codepoints": [8467], "characters": "\u2113" }, + "⪕": { "codepoints": [10901], "characters": "\u2A95" }, + "⪗": { "codepoints": [10903], "characters": "\u2A97" }, + "ē": { "codepoints": [275], "characters": "\u0113" }, + "∅": { "codepoints": [8709], "characters": "\u2205" }, + "∅": { "codepoints": [8709], "characters": "\u2205" }, + "∅": { "codepoints": [8709], "characters": "\u2205" }, + " ": { "codepoints": [8196], "characters": "\u2004" }, + " ": { "codepoints": [8197], "characters": "\u2005" }, + " ": { "codepoints": [8195], "characters": "\u2003" }, + "ŋ": { "codepoints": [331], "characters": "\u014B" }, + " ": { "codepoints": [8194], "characters": "\u2002" }, + "ę": { "codepoints": [281], "characters": "\u0119" }, + "𝕖": { "codepoints": [120150], "characters": "\uD835\uDD56" }, + "⋕": { "codepoints": [8917], "characters": "\u22D5" }, + "⧣": { "codepoints": [10723], "characters": "\u29E3" }, + "⩱": { "codepoints": [10865], "characters": "\u2A71" }, + "ε": { "codepoints": [949], "characters": "\u03B5" }, + "ε": { "codepoints": [949], "characters": "\u03B5" }, + "ϵ": { "codepoints": [1013], "characters": "\u03F5" }, + "≖": { "codepoints": [8790], "characters": "\u2256" }, + "≕": { "codepoints": [8789], "characters": "\u2255" }, + "≂": { "codepoints": [8770], "characters": "\u2242" }, + "⪖": { "codepoints": [10902], "characters": "\u2A96" }, + "⪕": { "codepoints": [10901], "characters": "\u2A95" }, + "=": { "codepoints": [61], "characters": "\u003D" }, + "≟": { "codepoints": [8799], "characters": "\u225F" }, + "≡": { "codepoints": [8801], "characters": "\u2261" }, + "⩸": { "codepoints": [10872], "characters": "\u2A78" }, + "⧥": { "codepoints": [10725], "characters": "\u29E5" }, + "≓": { "codepoints": [8787], "characters": "\u2253" }, + "⥱": { "codepoints": [10609], "characters": "\u2971" }, + "ℯ": { "codepoints": [8495], "characters": "\u212F" }, + "≐": { "codepoints": [8784], "characters": "\u2250" }, + "≂": { "codepoints": [8770], "characters": "\u2242" }, + "η": { "codepoints": [951], "characters": "\u03B7" }, + "ð": { "codepoints": [240], "characters": "\u00F0" }, + "ð": { "codepoints": [240], "characters": "\u00F0" }, + "ë": { "codepoints": [235], "characters": "\u00EB" }, + "ë": { "codepoints": [235], "characters": "\u00EB" }, + "€": { "codepoints": [8364], "characters": "\u20AC" }, + "!": { "codepoints": [33], "characters": "\u0021" }, + "∃": { "codepoints": [8707], "characters": "\u2203" }, + "ℰ": { "codepoints": [8496], "characters": "\u2130" }, + "ⅇ": { "codepoints": [8519], "characters": "\u2147" }, + "≒": { "codepoints": [8786], "characters": "\u2252" }, + "ф": { "codepoints": [1092], "characters": "\u0444" }, + "♀": { "codepoints": [9792], "characters": "\u2640" }, + "ffi": { "codepoints": [64259], "characters": "\uFB03" }, + "ff": { "codepoints": [64256], "characters": "\uFB00" }, + "ffl": { "codepoints": [64260], "characters": "\uFB04" }, + "𝔣": { "codepoints": [120099], "characters": "\uD835\uDD23" }, + "fi": { "codepoints": [64257], "characters": "\uFB01" }, + "fj": { "codepoints": [102, 106], "characters": "\u0066\u006A" }, + "♭": { "codepoints": [9837], "characters": "\u266D" }, + "fl": { "codepoints": [64258], "characters": "\uFB02" }, + "▱": { "codepoints": [9649], "characters": "\u25B1" }, + "ƒ": { "codepoints": [402], "characters": "\u0192" }, + "𝕗": { "codepoints": [120151], "characters": "\uD835\uDD57" }, + "∀": { "codepoints": [8704], "characters": "\u2200" }, + "⋔": { "codepoints": [8916], "characters": "\u22D4" }, + "⫙": { "codepoints": [10969], "characters": "\u2AD9" }, + "⨍": { "codepoints": [10765], "characters": "\u2A0D" }, + "½": { "codepoints": [189], "characters": "\u00BD" }, + "½": { "codepoints": [189], "characters": "\u00BD" }, + "⅓": { "codepoints": [8531], "characters": "\u2153" }, + "¼": { "codepoints": [188], "characters": "\u00BC" }, + "¼": { "codepoints": [188], "characters": "\u00BC" }, + "⅕": { "codepoints": [8533], "characters": "\u2155" }, + "⅙": { "codepoints": [8537], "characters": "\u2159" }, + "⅛": { "codepoints": [8539], "characters": "\u215B" }, + "⅔": { "codepoints": [8532], "characters": "\u2154" }, + "⅖": { "codepoints": [8534], "characters": "\u2156" }, + "¾": { "codepoints": [190], "characters": "\u00BE" }, + "¾": { "codepoints": [190], "characters": "\u00BE" }, + "⅗": { "codepoints": [8535], "characters": "\u2157" }, + "⅜": { "codepoints": [8540], "characters": "\u215C" }, + "⅘": { "codepoints": [8536], "characters": "\u2158" }, + "⅚": { "codepoints": [8538], "characters": "\u215A" }, + "⅝": { "codepoints": [8541], "characters": "\u215D" }, + "⅞": { "codepoints": [8542], "characters": "\u215E" }, + "⁄": { "codepoints": [8260], "characters": "\u2044" }, + "⌢": { "codepoints": [8994], "characters": "\u2322" }, + "𝒻": { "codepoints": [119995], "characters": "\uD835\uDCBB" }, + "≧": { "codepoints": [8807], "characters": "\u2267" }, + "⪌": { "codepoints": [10892], "characters": "\u2A8C" }, + "ǵ": { "codepoints": [501], "characters": "\u01F5" }, + "γ": { "codepoints": [947], "characters": "\u03B3" }, + "ϝ": { "codepoints": [989], "characters": "\u03DD" }, + "⪆": { "codepoints": [10886], "characters": "\u2A86" }, + "ğ": { "codepoints": [287], "characters": "\u011F" }, + "ĝ": { "codepoints": [285], "characters": "\u011D" }, + "г": { "codepoints": [1075], "characters": "\u0433" }, + "ġ": { "codepoints": [289], "characters": "\u0121" }, + "≥": { "codepoints": [8805], "characters": "\u2265" }, + "⋛": { "codepoints": [8923], "characters": "\u22DB" }, + "≥": { "codepoints": [8805], "characters": "\u2265" }, + "≧": { "codepoints": [8807], "characters": "\u2267" }, + "⩾": { "codepoints": [10878], "characters": "\u2A7E" }, + "⩾": { "codepoints": [10878], "characters": "\u2A7E" }, + "⪩": { "codepoints": [10921], "characters": "\u2AA9" }, + "⪀": { "codepoints": [10880], "characters": "\u2A80" }, + "⪂": { "codepoints": [10882], "characters": "\u2A82" }, + "⪄": { "codepoints": [10884], "characters": "\u2A84" }, + "⋛︀": { "codepoints": [8923, 65024], "characters": "\u22DB\uFE00" }, + "⪔": { "codepoints": [10900], "characters": "\u2A94" }, + "𝔤": { "codepoints": [120100], "characters": "\uD835\uDD24" }, + "≫": { "codepoints": [8811], "characters": "\u226B" }, + "⋙": { "codepoints": [8921], "characters": "\u22D9" }, + "ℷ": { "codepoints": [8503], "characters": "\u2137" }, + "ѓ": { "codepoints": [1107], "characters": "\u0453" }, + "≷": { "codepoints": [8823], "characters": "\u2277" }, + "⪒": { "codepoints": [10898], "characters": "\u2A92" }, + "⪥": { "codepoints": [10917], "characters": "\u2AA5" }, + "⪤": { "codepoints": [10916], "characters": "\u2AA4" }, + "≩": { "codepoints": [8809], "characters": "\u2269" }, + "⪊": { "codepoints": [10890], "characters": "\u2A8A" }, + "⪊": { "codepoints": [10890], "characters": "\u2A8A" }, + "⪈": { "codepoints": [10888], "characters": "\u2A88" }, + "⪈": { "codepoints": [10888], "characters": "\u2A88" }, + "≩": { "codepoints": [8809], "characters": "\u2269" }, + "⋧": { "codepoints": [8935], "characters": "\u22E7" }, + "𝕘": { "codepoints": [120152], "characters": "\uD835\uDD58" }, + "`": { "codepoints": [96], "characters": "\u0060" }, + "ℊ": { "codepoints": [8458], "characters": "\u210A" }, + "≳": { "codepoints": [8819], "characters": "\u2273" }, + "⪎": { "codepoints": [10894], "characters": "\u2A8E" }, + "⪐": { "codepoints": [10896], "characters": "\u2A90" }, + ">": { "codepoints": [62], "characters": "\u003E" }, + ">": { "codepoints": [62], "characters": "\u003E" }, + "⪧": { "codepoints": [10919], "characters": "\u2AA7" }, + "⩺": { "codepoints": [10874], "characters": "\u2A7A" }, + "⋗": { "codepoints": [8919], "characters": "\u22D7" }, + "⦕": { "codepoints": [10645], "characters": "\u2995" }, + "⩼": { "codepoints": [10876], "characters": "\u2A7C" }, + "⪆": { "codepoints": [10886], "characters": "\u2A86" }, + "⥸": { "codepoints": [10616], "characters": "\u2978" }, + "⋗": { "codepoints": [8919], "characters": "\u22D7" }, + "⋛": { "codepoints": [8923], "characters": "\u22DB" }, + "⪌": { "codepoints": [10892], "characters": "\u2A8C" }, + "≷": { "codepoints": [8823], "characters": "\u2277" }, + "≳": { "codepoints": [8819], "characters": "\u2273" }, + "≩︀": { "codepoints": [8809, 65024], "characters": "\u2269\uFE00" }, + "≩︀": { "codepoints": [8809, 65024], "characters": "\u2269\uFE00" }, + "⇔": { "codepoints": [8660], "characters": "\u21D4" }, + " ": { "codepoints": [8202], "characters": "\u200A" }, + "½": { "codepoints": [189], "characters": "\u00BD" }, + "ℋ": { "codepoints": [8459], "characters": "\u210B" }, + "ъ": { "codepoints": [1098], "characters": "\u044A" }, + "↔": { "codepoints": [8596], "characters": "\u2194" }, + "⥈": { "codepoints": [10568], "characters": "\u2948" }, + "↭": { "codepoints": [8621], "characters": "\u21AD" }, + "ℏ": { "codepoints": [8463], "characters": "\u210F" }, + "ĥ": { "codepoints": [293], "characters": "\u0125" }, + "♥": { "codepoints": [9829], "characters": "\u2665" }, + "♥": { "codepoints": [9829], "characters": "\u2665" }, + "…": { "codepoints": [8230], "characters": "\u2026" }, + "⊹": { "codepoints": [8889], "characters": "\u22B9" }, + "𝔥": { "codepoints": [120101], "characters": "\uD835\uDD25" }, + "⤥": { "codepoints": [10533], "characters": "\u2925" }, + "⤦": { "codepoints": [10534], "characters": "\u2926" }, + "⇿": { "codepoints": [8703], "characters": "\u21FF" }, + "∻": { "codepoints": [8763], "characters": "\u223B" }, + "↩": { "codepoints": [8617], "characters": "\u21A9" }, + "↪": { "codepoints": [8618], "characters": "\u21AA" }, + "𝕙": { "codepoints": [120153], "characters": "\uD835\uDD59" }, + "―": { "codepoints": [8213], "characters": "\u2015" }, + "𝒽": { "codepoints": [119997], "characters": "\uD835\uDCBD" }, + "ℏ": { "codepoints": [8463], "characters": "\u210F" }, + "ħ": { "codepoints": [295], "characters": "\u0127" }, + "⁃": { "codepoints": [8259], "characters": "\u2043" }, + "‐": { "codepoints": [8208], "characters": "\u2010" }, + "í": { "codepoints": [237], "characters": "\u00ED" }, + "í": { "codepoints": [237], "characters": "\u00ED" }, + "⁣": { "codepoints": [8291], "characters": "\u2063" }, + "î": { "codepoints": [238], "characters": "\u00EE" }, + "î": { "codepoints": [238], "characters": "\u00EE" }, + "и": { "codepoints": [1080], "characters": "\u0438" }, + "е": { "codepoints": [1077], "characters": "\u0435" }, + "¡": { "codepoints": [161], "characters": "\u00A1" }, + "¡": { "codepoints": [161], "characters": "\u00A1" }, + "⇔": { "codepoints": [8660], "characters": "\u21D4" }, + "𝔦": { "codepoints": [120102], "characters": "\uD835\uDD26" }, + "ì": { "codepoints": [236], "characters": "\u00EC" }, + "ì": { "codepoints": [236], "characters": "\u00EC" }, + "ⅈ": { "codepoints": [8520], "characters": "\u2148" }, + "⨌": { "codepoints": [10764], "characters": "\u2A0C" }, + "∭": { "codepoints": [8749], "characters": "\u222D" }, + "⧜": { "codepoints": [10716], "characters": "\u29DC" }, + "℩": { "codepoints": [8489], "characters": "\u2129" }, + "ij": { "codepoints": [307], "characters": "\u0133" }, + "ī": { "codepoints": [299], "characters": "\u012B" }, + "ℑ": { "codepoints": [8465], "characters": "\u2111" }, + "ℐ": { "codepoints": [8464], "characters": "\u2110" }, + "ℑ": { "codepoints": [8465], "characters": "\u2111" }, + "ı": { "codepoints": [305], "characters": "\u0131" }, + "⊷": { "codepoints": [8887], "characters": "\u22B7" }, + "Ƶ": { "codepoints": [437], "characters": "\u01B5" }, + "∈": { "codepoints": [8712], "characters": "\u2208" }, + "℅": { "codepoints": [8453], "characters": "\u2105" }, + "∞": { "codepoints": [8734], "characters": "\u221E" }, + "⧝": { "codepoints": [10717], "characters": "\u29DD" }, + "ı": { "codepoints": [305], "characters": "\u0131" }, + "∫": { "codepoints": [8747], "characters": "\u222B" }, + "⊺": { "codepoints": [8890], "characters": "\u22BA" }, + "ℤ": { "codepoints": [8484], "characters": "\u2124" }, + "⊺": { "codepoints": [8890], "characters": "\u22BA" }, + "⨗": { "codepoints": [10775], "characters": "\u2A17" }, + "⨼": { "codepoints": [10812], "characters": "\u2A3C" }, + "ё": { "codepoints": [1105], "characters": "\u0451" }, + "į": { "codepoints": [303], "characters": "\u012F" }, + "𝕚": { "codepoints": [120154], "characters": "\uD835\uDD5A" }, + "ι": { "codepoints": [953], "characters": "\u03B9" }, + "⨼": { "codepoints": [10812], "characters": "\u2A3C" }, + "¿": { "codepoints": [191], "characters": "\u00BF" }, + "¿": { "codepoints": [191], "characters": "\u00BF" }, + "𝒾": { "codepoints": [119998], "characters": "\uD835\uDCBE" }, + "∈": { "codepoints": [8712], "characters": "\u2208" }, + "⋹": { "codepoints": [8953], "characters": "\u22F9" }, + "⋵": { "codepoints": [8949], "characters": "\u22F5" }, + "⋴": { "codepoints": [8948], "characters": "\u22F4" }, + "⋳": { "codepoints": [8947], "characters": "\u22F3" }, + "∈": { "codepoints": [8712], "characters": "\u2208" }, + "⁢": { "codepoints": [8290], "characters": "\u2062" }, + "ĩ": { "codepoints": [297], "characters": "\u0129" }, + "і": { "codepoints": [1110], "characters": "\u0456" }, + "ï": { "codepoints": [239], "characters": "\u00EF" }, + "ï": { "codepoints": [239], "characters": "\u00EF" }, + "ĵ": { "codepoints": [309], "characters": "\u0135" }, + "й": { "codepoints": [1081], "characters": "\u0439" }, + "𝔧": { "codepoints": [120103], "characters": "\uD835\uDD27" }, + "ȷ": { "codepoints": [567], "characters": "\u0237" }, + "𝕛": { "codepoints": [120155], "characters": "\uD835\uDD5B" }, + "𝒿": { "codepoints": [119999], "characters": "\uD835\uDCBF" }, + "ј": { "codepoints": [1112], "characters": "\u0458" }, + "є": { "codepoints": [1108], "characters": "\u0454" }, + "κ": { "codepoints": [954], "characters": "\u03BA" }, + "ϰ": { "codepoints": [1008], "characters": "\u03F0" }, + "ķ": { "codepoints": [311], "characters": "\u0137" }, + "к": { "codepoints": [1082], "characters": "\u043A" }, + "𝔨": { "codepoints": [120104], "characters": "\uD835\uDD28" }, + "ĸ": { "codepoints": [312], "characters": "\u0138" }, + "х": { "codepoints": [1093], "characters": "\u0445" }, + "ќ": { "codepoints": [1116], "characters": "\u045C" }, + "𝕜": { "codepoints": [120156], "characters": "\uD835\uDD5C" }, + "𝓀": { "codepoints": [120000], "characters": "\uD835\uDCC0" }, + "⇚": { "codepoints": [8666], "characters": "\u21DA" }, + "⇐": { "codepoints": [8656], "characters": "\u21D0" }, + "⤛": { "codepoints": [10523], "characters": "\u291B" }, + "⤎": { "codepoints": [10510], "characters": "\u290E" }, + "≦": { "codepoints": [8806], "characters": "\u2266" }, + "⪋": { "codepoints": [10891], "characters": "\u2A8B" }, + "⥢": { "codepoints": [10594], "characters": "\u2962" }, + "ĺ": { "codepoints": [314], "characters": "\u013A" }, + "⦴": { "codepoints": [10676], "characters": "\u29B4" }, + "ℒ": { "codepoints": [8466], "characters": "\u2112" }, + "λ": { "codepoints": [955], "characters": "\u03BB" }, + "⟨": { "codepoints": [10216], "characters": "\u27E8" }, + "⦑": { "codepoints": [10641], "characters": "\u2991" }, + "⟨": { "codepoints": [10216], "characters": "\u27E8" }, + "⪅": { "codepoints": [10885], "characters": "\u2A85" }, + "«": { "codepoints": [171], "characters": "\u00AB" }, + "«": { "codepoints": [171], "characters": "\u00AB" }, + "←": { "codepoints": [8592], "characters": "\u2190" }, + "⇤": { "codepoints": [8676], "characters": "\u21E4" }, + "⤟": { "codepoints": [10527], "characters": "\u291F" }, + "⤝": { "codepoints": [10525], "characters": "\u291D" }, + "↩": { "codepoints": [8617], "characters": "\u21A9" }, + "↫": { "codepoints": [8619], "characters": "\u21AB" }, + "⤹": { "codepoints": [10553], "characters": "\u2939" }, + "⥳": { "codepoints": [10611], "characters": "\u2973" }, + "↢": { "codepoints": [8610], "characters": "\u21A2" }, + "⪫": { "codepoints": [10923], "characters": "\u2AAB" }, + "⤙": { "codepoints": [10521], "characters": "\u2919" }, + "⪭": { "codepoints": [10925], "characters": "\u2AAD" }, + "⪭︀": { "codepoints": [10925, 65024], "characters": "\u2AAD\uFE00" }, + "⤌": { "codepoints": [10508], "characters": "\u290C" }, + "❲": { "codepoints": [10098], "characters": "\u2772" }, + "{": { "codepoints": [123], "characters": "\u007B" }, + "[": { "codepoints": [91], "characters": "\u005B" }, + "⦋": { "codepoints": [10635], "characters": "\u298B" }, + "⦏": { "codepoints": [10639], "characters": "\u298F" }, + "⦍": { "codepoints": [10637], "characters": "\u298D" }, + "ľ": { "codepoints": [318], "characters": "\u013E" }, + "ļ": { "codepoints": [316], "characters": "\u013C" }, + "⌈": { "codepoints": [8968], "characters": "\u2308" }, + "{": { "codepoints": [123], "characters": "\u007B" }, + "л": { "codepoints": [1083], "characters": "\u043B" }, + "⤶": { "codepoints": [10550], "characters": "\u2936" }, + "“": { "codepoints": [8220], "characters": "\u201C" }, + "„": { "codepoints": [8222], "characters": "\u201E" }, + "⥧": { "codepoints": [10599], "characters": "\u2967" }, + "⥋": { "codepoints": [10571], "characters": "\u294B" }, + "↲": { "codepoints": [8626], "characters": "\u21B2" }, + "≤": { "codepoints": [8804], "characters": "\u2264" }, + "←": { "codepoints": [8592], "characters": "\u2190" }, + "↢": { "codepoints": [8610], "characters": "\u21A2" }, + "↽": { "codepoints": [8637], "characters": "\u21BD" }, + "↼": { "codepoints": [8636], "characters": "\u21BC" }, + "⇇": { "codepoints": [8647], "characters": "\u21C7" }, + "↔": { "codepoints": [8596], "characters": "\u2194" }, + "⇆": { "codepoints": [8646], "characters": "\u21C6" }, + "⇋": { "codepoints": [8651], "characters": "\u21CB" }, + "↭": { "codepoints": [8621], "characters": "\u21AD" }, + "⋋": { "codepoints": [8907], "characters": "\u22CB" }, + "⋚": { "codepoints": [8922], "characters": "\u22DA" }, + "≤": { "codepoints": [8804], "characters": "\u2264" }, + "≦": { "codepoints": [8806], "characters": "\u2266" }, + "⩽": { "codepoints": [10877], "characters": "\u2A7D" }, + "⩽": { "codepoints": [10877], "characters": "\u2A7D" }, + "⪨": { "codepoints": [10920], "characters": "\u2AA8" }, + "⩿": { "codepoints": [10879], "characters": "\u2A7F" }, + "⪁": { "codepoints": [10881], "characters": "\u2A81" }, + "⪃": { "codepoints": [10883], "characters": "\u2A83" }, + "⋚︀": { "codepoints": [8922, 65024], "characters": "\u22DA\uFE00" }, + "⪓": { "codepoints": [10899], "characters": "\u2A93" }, + "⪅": { "codepoints": [10885], "characters": "\u2A85" }, + "⋖": { "codepoints": [8918], "characters": "\u22D6" }, + "⋚": { "codepoints": [8922], "characters": "\u22DA" }, + "⪋": { "codepoints": [10891], "characters": "\u2A8B" }, + "≶": { "codepoints": [8822], "characters": "\u2276" }, + "≲": { "codepoints": [8818], "characters": "\u2272" }, + "⥼": { "codepoints": [10620], "characters": "\u297C" }, + "⌊": { "codepoints": [8970], "characters": "\u230A" }, + "𝔩": { "codepoints": [120105], "characters": "\uD835\uDD29" }, + "≶": { "codepoints": [8822], "characters": "\u2276" }, + "⪑": { "codepoints": [10897], "characters": "\u2A91" }, + "↽": { "codepoints": [8637], "characters": "\u21BD" }, + "↼": { "codepoints": [8636], "characters": "\u21BC" }, + "⥪": { "codepoints": [10602], "characters": "\u296A" }, + "▄": { "codepoints": [9604], "characters": "\u2584" }, + "љ": { "codepoints": [1113], "characters": "\u0459" }, + "≪": { "codepoints": [8810], "characters": "\u226A" }, + "⇇": { "codepoints": [8647], "characters": "\u21C7" }, + "⌞": { "codepoints": [8990], "characters": "\u231E" }, + "⥫": { "codepoints": [10603], "characters": "\u296B" }, + "◺": { "codepoints": [9722], "characters": "\u25FA" }, + "ŀ": { "codepoints": [320], "characters": "\u0140" }, + "⎰": { "codepoints": [9136], "characters": "\u23B0" }, + "⎰": { "codepoints": [9136], "characters": "\u23B0" }, + "≨": { "codepoints": [8808], "characters": "\u2268" }, + "⪉": { "codepoints": [10889], "characters": "\u2A89" }, + "⪉": { "codepoints": [10889], "characters": "\u2A89" }, + "⪇": { "codepoints": [10887], "characters": "\u2A87" }, + "⪇": { "codepoints": [10887], "characters": "\u2A87" }, + "≨": { "codepoints": [8808], "characters": "\u2268" }, + "⋦": { "codepoints": [8934], "characters": "\u22E6" }, + "⟬": { "codepoints": [10220], "characters": "\u27EC" }, + "⇽": { "codepoints": [8701], "characters": "\u21FD" }, + "⟦": { "codepoints": [10214], "characters": "\u27E6" }, + "⟵": { "codepoints": [10229], "characters": "\u27F5" }, + "⟷": { "codepoints": [10231], "characters": "\u27F7" }, + "⟼": { "codepoints": [10236], "characters": "\u27FC" }, + "⟶": { "codepoints": [10230], "characters": "\u27F6" }, + "↫": { "codepoints": [8619], "characters": "\u21AB" }, + "↬": { "codepoints": [8620], "characters": "\u21AC" }, + "⦅": { "codepoints": [10629], "characters": "\u2985" }, + "𝕝": { "codepoints": [120157], "characters": "\uD835\uDD5D" }, + "⨭": { "codepoints": [10797], "characters": "\u2A2D" }, + "⨴": { "codepoints": [10804], "characters": "\u2A34" }, + "∗": { "codepoints": [8727], "characters": "\u2217" }, + "_": { "codepoints": [95], "characters": "\u005F" }, + "◊": { "codepoints": [9674], "characters": "\u25CA" }, + "◊": { "codepoints": [9674], "characters": "\u25CA" }, + "⧫": { "codepoints": [10731], "characters": "\u29EB" }, + "(": { "codepoints": [40], "characters": "\u0028" }, + "⦓": { "codepoints": [10643], "characters": "\u2993" }, + "⇆": { "codepoints": [8646], "characters": "\u21C6" }, + "⌟": { "codepoints": [8991], "characters": "\u231F" }, + "⇋": { "codepoints": [8651], "characters": "\u21CB" }, + "⥭": { "codepoints": [10605], "characters": "\u296D" }, + "‎": { "codepoints": [8206], "characters": "\u200E" }, + "⊿": { "codepoints": [8895], "characters": "\u22BF" }, + "‹": { "codepoints": [8249], "characters": "\u2039" }, + "𝓁": { "codepoints": [120001], "characters": "\uD835\uDCC1" }, + "↰": { "codepoints": [8624], "characters": "\u21B0" }, + "≲": { "codepoints": [8818], "characters": "\u2272" }, + "⪍": { "codepoints": [10893], "characters": "\u2A8D" }, + "⪏": { "codepoints": [10895], "characters": "\u2A8F" }, + "[": { "codepoints": [91], "characters": "\u005B" }, + "‘": { "codepoints": [8216], "characters": "\u2018" }, + "‚": { "codepoints": [8218], "characters": "\u201A" }, + "ł": { "codepoints": [322], "characters": "\u0142" }, + "<": { "codepoints": [60], "characters": "\u003C" }, + "<": { "codepoints": [60], "characters": "\u003C" }, + "⪦": { "codepoints": [10918], "characters": "\u2AA6" }, + "⩹": { "codepoints": [10873], "characters": "\u2A79" }, + "⋖": { "codepoints": [8918], "characters": "\u22D6" }, + "⋋": { "codepoints": [8907], "characters": "\u22CB" }, + "⋉": { "codepoints": [8905], "characters": "\u22C9" }, + "⥶": { "codepoints": [10614], "characters": "\u2976" }, + "⩻": { "codepoints": [10875], "characters": "\u2A7B" }, + "⦖": { "codepoints": [10646], "characters": "\u2996" }, + "◃": { "codepoints": [9667], "characters": "\u25C3" }, + "⊴": { "codepoints": [8884], "characters": "\u22B4" }, + "◂": { "codepoints": [9666], "characters": "\u25C2" }, + "⥊": { "codepoints": [10570], "characters": "\u294A" }, + "⥦": { "codepoints": [10598], "characters": "\u2966" }, + "≨︀": { "codepoints": [8808, 65024], "characters": "\u2268\uFE00" }, + "≨︀": { "codepoints": [8808, 65024], "characters": "\u2268\uFE00" }, + "∺": { "codepoints": [8762], "characters": "\u223A" }, + "¯": { "codepoints": [175], "characters": "\u00AF" }, + "¯": { "codepoints": [175], "characters": "\u00AF" }, + "♂": { "codepoints": [9794], "characters": "\u2642" }, + "✠": { "codepoints": [10016], "characters": "\u2720" }, + "✠": { "codepoints": [10016], "characters": "\u2720" }, + "↦": { "codepoints": [8614], "characters": "\u21A6" }, + "↦": { "codepoints": [8614], "characters": "\u21A6" }, + "↧": { "codepoints": [8615], "characters": "\u21A7" }, + "↤": { "codepoints": [8612], "characters": "\u21A4" }, + "↥": { "codepoints": [8613], "characters": "\u21A5" }, + "▮": { "codepoints": [9646], "characters": "\u25AE" }, + "⨩": { "codepoints": [10793], "characters": "\u2A29" }, + "м": { "codepoints": [1084], "characters": "\u043C" }, + "—": { "codepoints": [8212], "characters": "\u2014" }, + "∡": { "codepoints": [8737], "characters": "\u2221" }, + "𝔪": { "codepoints": [120106], "characters": "\uD835\uDD2A" }, + "℧": { "codepoints": [8487], "characters": "\u2127" }, + "µ": { "codepoints": [181], "characters": "\u00B5" }, + "µ": { "codepoints": [181], "characters": "\u00B5" }, + "∣": { "codepoints": [8739], "characters": "\u2223" }, + "*": { "codepoints": [42], "characters": "\u002A" }, + "⫰": { "codepoints": [10992], "characters": "\u2AF0" }, + "·": { "codepoints": [183], "characters": "\u00B7" }, + "·": { "codepoints": [183], "characters": "\u00B7" }, + "−": { "codepoints": [8722], "characters": "\u2212" }, + "⊟": { "codepoints": [8863], "characters": "\u229F" }, + "∸": { "codepoints": [8760], "characters": "\u2238" }, + "⨪": { "codepoints": [10794], "characters": "\u2A2A" }, + "⫛": { "codepoints": [10971], "characters": "\u2ADB" }, + "…": { "codepoints": [8230], "characters": "\u2026" }, + "∓": { "codepoints": [8723], "characters": "\u2213" }, + "⊧": { "codepoints": [8871], "characters": "\u22A7" }, + "𝕞": { "codepoints": [120158], "characters": "\uD835\uDD5E" }, + "∓": { "codepoints": [8723], "characters": "\u2213" }, + "𝓂": { "codepoints": [120002], "characters": "\uD835\uDCC2" }, + "∾": { "codepoints": [8766], "characters": "\u223E" }, + "μ": { "codepoints": [956], "characters": "\u03BC" }, + "⊸": { "codepoints": [8888], "characters": "\u22B8" }, + "⊸": { "codepoints": [8888], "characters": "\u22B8" }, + "⋙̸": { "codepoints": [8921, 824], "characters": "\u22D9\u0338" }, + "≫⃒": { "codepoints": [8811, 8402], "characters": "\u226B\u20D2" }, + "≫̸": { "codepoints": [8811, 824], "characters": "\u226B\u0338" }, + "⇍": { "codepoints": [8653], "characters": "\u21CD" }, + "⇎": { "codepoints": [8654], "characters": "\u21CE" }, + "⋘̸": { "codepoints": [8920, 824], "characters": "\u22D8\u0338" }, + "≪⃒": { "codepoints": [8810, 8402], "characters": "\u226A\u20D2" }, + "≪̸": { "codepoints": [8810, 824], "characters": "\u226A\u0338" }, + "⇏": { "codepoints": [8655], "characters": "\u21CF" }, + "⊯": { "codepoints": [8879], "characters": "\u22AF" }, + "⊮": { "codepoints": [8878], "characters": "\u22AE" }, + "∇": { "codepoints": [8711], "characters": "\u2207" }, + "ń": { "codepoints": [324], "characters": "\u0144" }, + "∠⃒": { "codepoints": [8736, 8402], "characters": "\u2220\u20D2" }, + "≉": { "codepoints": [8777], "characters": "\u2249" }, + "⩰̸": { "codepoints": [10864, 824], "characters": "\u2A70\u0338" }, + "≋̸": { "codepoints": [8779, 824], "characters": "\u224B\u0338" }, + "ʼn": { "codepoints": [329], "characters": "\u0149" }, + "≉": { "codepoints": [8777], "characters": "\u2249" }, + "♮": { "codepoints": [9838], "characters": "\u266E" }, + "♮": { "codepoints": [9838], "characters": "\u266E" }, + "ℕ": { "codepoints": [8469], "characters": "\u2115" }, + " ": { "codepoints": [160], "characters": "\u00A0" }, + " ": { "codepoints": [160], "characters": "\u00A0" }, + "≎̸": { "codepoints": [8782, 824], "characters": "\u224E\u0338" }, + "≏̸": { "codepoints": [8783, 824], "characters": "\u224F\u0338" }, + "⩃": { "codepoints": [10819], "characters": "\u2A43" }, + "ň": { "codepoints": [328], "characters": "\u0148" }, + "ņ": { "codepoints": [326], "characters": "\u0146" }, + "≇": { "codepoints": [8775], "characters": "\u2247" }, + "⩭̸": { "codepoints": [10861, 824], "characters": "\u2A6D\u0338" }, + "⩂": { "codepoints": [10818], "characters": "\u2A42" }, + "н": { "codepoints": [1085], "characters": "\u043D" }, + "–": { "codepoints": [8211], "characters": "\u2013" }, + "≠": { "codepoints": [8800], "characters": "\u2260" }, + "⇗": { "codepoints": [8663], "characters": "\u21D7" }, + "⤤": { "codepoints": [10532], "characters": "\u2924" }, + "↗": { "codepoints": [8599], "characters": "\u2197" }, + "↗": { "codepoints": [8599], "characters": "\u2197" }, + "≐̸": { "codepoints": [8784, 824], "characters": "\u2250\u0338" }, + "≢": { "codepoints": [8802], "characters": "\u2262" }, + "⤨": { "codepoints": [10536], "characters": "\u2928" }, + "≂̸": { "codepoints": [8770, 824], "characters": "\u2242\u0338" }, + "∄": { "codepoints": [8708], "characters": "\u2204" }, + "∄": { "codepoints": [8708], "characters": "\u2204" }, + "𝔫": { "codepoints": [120107], "characters": "\uD835\uDD2B" }, + "≧̸": { "codepoints": [8807, 824], "characters": "\u2267\u0338" }, + "≱": { "codepoints": [8817], "characters": "\u2271" }, + "≱": { "codepoints": [8817], "characters": "\u2271" }, + "≧̸": { "codepoints": [8807, 824], "characters": "\u2267\u0338" }, + "⩾̸": { "codepoints": [10878, 824], "characters": "\u2A7E\u0338" }, + "⩾̸": { "codepoints": [10878, 824], "characters": "\u2A7E\u0338" }, + "≵": { "codepoints": [8821], "characters": "\u2275" }, + "≯": { "codepoints": [8815], "characters": "\u226F" }, + "≯": { "codepoints": [8815], "characters": "\u226F" }, + "⇎": { "codepoints": [8654], "characters": "\u21CE" }, + "↮": { "codepoints": [8622], "characters": "\u21AE" }, + "⫲": { "codepoints": [10994], "characters": "\u2AF2" }, + "∋": { "codepoints": [8715], "characters": "\u220B" }, + "⋼": { "codepoints": [8956], "characters": "\u22FC" }, + "⋺": { "codepoints": [8954], "characters": "\u22FA" }, + "∋": { "codepoints": [8715], "characters": "\u220B" }, + "њ": { "codepoints": [1114], "characters": "\u045A" }, + "⇍": { "codepoints": [8653], "characters": "\u21CD" }, + "≦̸": { "codepoints": [8806, 824], "characters": "\u2266\u0338" }, + "↚": { "codepoints": [8602], "characters": "\u219A" }, + "‥": { "codepoints": [8229], "characters": "\u2025" }, + "≰": { "codepoints": [8816], "characters": "\u2270" }, + "↚": { "codepoints": [8602], "characters": "\u219A" }, + "↮": { "codepoints": [8622], "characters": "\u21AE" }, + "≰": { "codepoints": [8816], "characters": "\u2270" }, + "≦̸": { "codepoints": [8806, 824], "characters": "\u2266\u0338" }, + "⩽̸": { "codepoints": [10877, 824], "characters": "\u2A7D\u0338" }, + "⩽̸": { "codepoints": [10877, 824], "characters": "\u2A7D\u0338" }, + "≮": { "codepoints": [8814], "characters": "\u226E" }, + "≴": { "codepoints": [8820], "characters": "\u2274" }, + "≮": { "codepoints": [8814], "characters": "\u226E" }, + "⋪": { "codepoints": [8938], "characters": "\u22EA" }, + "⋬": { "codepoints": [8940], "characters": "\u22EC" }, + "∤": { "codepoints": [8740], "characters": "\u2224" }, + "𝕟": { "codepoints": [120159], "characters": "\uD835\uDD5F" }, + "¬": { "codepoints": [172], "characters": "\u00AC" }, + "¬": { "codepoints": [172], "characters": "\u00AC" }, + "∉": { "codepoints": [8713], "characters": "\u2209" }, + "⋹̸": { "codepoints": [8953, 824], "characters": "\u22F9\u0338" }, + "⋵̸": { "codepoints": [8949, 824], "characters": "\u22F5\u0338" }, + "∉": { "codepoints": [8713], "characters": "\u2209" }, + "⋷": { "codepoints": [8951], "characters": "\u22F7" }, + "⋶": { "codepoints": [8950], "characters": "\u22F6" }, + "∌": { "codepoints": [8716], "characters": "\u220C" }, + "∌": { "codepoints": [8716], "characters": "\u220C" }, + "⋾": { "codepoints": [8958], "characters": "\u22FE" }, + "⋽": { "codepoints": [8957], "characters": "\u22FD" }, + "∦": { "codepoints": [8742], "characters": "\u2226" }, + "∦": { "codepoints": [8742], "characters": "\u2226" }, + "⫽⃥": { "codepoints": [11005, 8421], "characters": "\u2AFD\u20E5" }, + "∂̸": { "codepoints": [8706, 824], "characters": "\u2202\u0338" }, + "⨔": { "codepoints": [10772], "characters": "\u2A14" }, + "⊀": { "codepoints": [8832], "characters": "\u2280" }, + "⋠": { "codepoints": [8928], "characters": "\u22E0" }, + "⪯̸": { "codepoints": [10927, 824], "characters": "\u2AAF\u0338" }, + "⊀": { "codepoints": [8832], "characters": "\u2280" }, + "⪯̸": { "codepoints": [10927, 824], "characters": "\u2AAF\u0338" }, + "⇏": { "codepoints": [8655], "characters": "\u21CF" }, + "↛": { "codepoints": [8603], "characters": "\u219B" }, + "⤳̸": { "codepoints": [10547, 824], "characters": "\u2933\u0338" }, + "↝̸": { "codepoints": [8605, 824], "characters": "\u219D\u0338" }, + "↛": { "codepoints": [8603], "characters": "\u219B" }, + "⋫": { "codepoints": [8939], "characters": "\u22EB" }, + "⋭": { "codepoints": [8941], "characters": "\u22ED" }, + "⊁": { "codepoints": [8833], "characters": "\u2281" }, + "⋡": { "codepoints": [8929], "characters": "\u22E1" }, + "⪰̸": { "codepoints": [10928, 824], "characters": "\u2AB0\u0338" }, + "𝓃": { "codepoints": [120003], "characters": "\uD835\uDCC3" }, + "∤": { "codepoints": [8740], "characters": "\u2224" }, + "∦": { "codepoints": [8742], "characters": "\u2226" }, + "≁": { "codepoints": [8769], "characters": "\u2241" }, + "≄": { "codepoints": [8772], "characters": "\u2244" }, + "≄": { "codepoints": [8772], "characters": "\u2244" }, + "∤": { "codepoints": [8740], "characters": "\u2224" }, + "∦": { "codepoints": [8742], "characters": "\u2226" }, + "⋢": { "codepoints": [8930], "characters": "\u22E2" }, + "⋣": { "codepoints": [8931], "characters": "\u22E3" }, + "⊄": { "codepoints": [8836], "characters": "\u2284" }, + "⫅̸": { "codepoints": [10949, 824], "characters": "\u2AC5\u0338" }, + "⊈": { "codepoints": [8840], "characters": "\u2288" }, + "⊂⃒": { "codepoints": [8834, 8402], "characters": "\u2282\u20D2" }, + "⊈": { "codepoints": [8840], "characters": "\u2288" }, + "⫅̸": { "codepoints": [10949, 824], "characters": "\u2AC5\u0338" }, + "⊁": { "codepoints": [8833], "characters": "\u2281" }, + "⪰̸": { "codepoints": [10928, 824], "characters": "\u2AB0\u0338" }, + "⊅": { "codepoints": [8837], "characters": "\u2285" }, + "⫆̸": { "codepoints": [10950, 824], "characters": "\u2AC6\u0338" }, + "⊉": { "codepoints": [8841], "characters": "\u2289" }, + "⊃⃒": { "codepoints": [8835, 8402], "characters": "\u2283\u20D2" }, + "⊉": { "codepoints": [8841], "characters": "\u2289" }, + "⫆̸": { "codepoints": [10950, 824], "characters": "\u2AC6\u0338" }, + "≹": { "codepoints": [8825], "characters": "\u2279" }, + "ñ": { "codepoints": [241], "characters": "\u00F1" }, + "ñ": { "codepoints": [241], "characters": "\u00F1" }, + "≸": { "codepoints": [8824], "characters": "\u2278" }, + "⋪": { "codepoints": [8938], "characters": "\u22EA" }, + "⋬": { "codepoints": [8940], "characters": "\u22EC" }, + "⋫": { "codepoints": [8939], "characters": "\u22EB" }, + "⋭": { "codepoints": [8941], "characters": "\u22ED" }, + "ν": { "codepoints": [957], "characters": "\u03BD" }, + "#": { "codepoints": [35], "characters": "\u0023" }, + "№": { "codepoints": [8470], "characters": "\u2116" }, + " ": { "codepoints": [8199], "characters": "\u2007" }, + "⊭": { "codepoints": [8877], "characters": "\u22AD" }, + "⤄": { "codepoints": [10500], "characters": "\u2904" }, + "≍⃒": { "codepoints": [8781, 8402], "characters": "\u224D\u20D2" }, + "⊬": { "codepoints": [8876], "characters": "\u22AC" }, + "≥⃒": { "codepoints": [8805, 8402], "characters": "\u2265\u20D2" }, + ">⃒": { "codepoints": [62, 8402], "characters": "\u003E\u20D2" }, + "⧞": { "codepoints": [10718], "characters": "\u29DE" }, + "⤂": { "codepoints": [10498], "characters": "\u2902" }, + "≤⃒": { "codepoints": [8804, 8402], "characters": "\u2264\u20D2" }, + "<⃒": { "codepoints": [60, 8402], "characters": "\u003C\u20D2" }, + "⊴⃒": { "codepoints": [8884, 8402], "characters": "\u22B4\u20D2" }, + "⤃": { "codepoints": [10499], "characters": "\u2903" }, + "⊵⃒": { "codepoints": [8885, 8402], "characters": "\u22B5\u20D2" }, + "∼⃒": { "codepoints": [8764, 8402], "characters": "\u223C\u20D2" }, + "⇖": { "codepoints": [8662], "characters": "\u21D6" }, + "⤣": { "codepoints": [10531], "characters": "\u2923" }, + "↖": { "codepoints": [8598], "characters": "\u2196" }, + "↖": { "codepoints": [8598], "characters": "\u2196" }, + "⤧": { "codepoints": [10535], "characters": "\u2927" }, + "Ⓢ": { "codepoints": [9416], "characters": "\u24C8" }, + "ó": { "codepoints": [243], "characters": "\u00F3" }, + "ó": { "codepoints": [243], "characters": "\u00F3" }, + "⊛": { "codepoints": [8859], "characters": "\u229B" }, + "⊚": { "codepoints": [8858], "characters": "\u229A" }, + "ô": { "codepoints": [244], "characters": "\u00F4" }, + "ô": { "codepoints": [244], "characters": "\u00F4" }, + "о": { "codepoints": [1086], "characters": "\u043E" }, + "⊝": { "codepoints": [8861], "characters": "\u229D" }, + "ő": { "codepoints": [337], "characters": "\u0151" }, + "⨸": { "codepoints": [10808], "characters": "\u2A38" }, + "⊙": { "codepoints": [8857], "characters": "\u2299" }, + "⦼": { "codepoints": [10684], "characters": "\u29BC" }, + "œ": { "codepoints": [339], "characters": "\u0153" }, + "⦿": { "codepoints": [10687], "characters": "\u29BF" }, + "𝔬": { "codepoints": [120108], "characters": "\uD835\uDD2C" }, + "˛": { "codepoints": [731], "characters": "\u02DB" }, + "ò": { "codepoints": [242], "characters": "\u00F2" }, + "ò": { "codepoints": [242], "characters": "\u00F2" }, + "⧁": { "codepoints": [10689], "characters": "\u29C1" }, + "⦵": { "codepoints": [10677], "characters": "\u29B5" }, + "Ω": { "codepoints": [937], "characters": "\u03A9" }, + "∮": { "codepoints": [8750], "characters": "\u222E" }, + "↺": { "codepoints": [8634], "characters": "\u21BA" }, + "⦾": { "codepoints": [10686], "characters": "\u29BE" }, + "⦻": { "codepoints": [10683], "characters": "\u29BB" }, + "‾": { "codepoints": [8254], "characters": "\u203E" }, + "⧀": { "codepoints": [10688], "characters": "\u29C0" }, + "ō": { "codepoints": [333], "characters": "\u014D" }, + "ω": { "codepoints": [969], "characters": "\u03C9" }, + "ο": { "codepoints": [959], "characters": "\u03BF" }, + "⦶": { "codepoints": [10678], "characters": "\u29B6" }, + "⊖": { "codepoints": [8854], "characters": "\u2296" }, + "𝕠": { "codepoints": [120160], "characters": "\uD835\uDD60" }, + "⦷": { "codepoints": [10679], "characters": "\u29B7" }, + "⦹": { "codepoints": [10681], "characters": "\u29B9" }, + "⊕": { "codepoints": [8853], "characters": "\u2295" }, + "∨": { "codepoints": [8744], "characters": "\u2228" }, + "↻": { "codepoints": [8635], "characters": "\u21BB" }, + "⩝": { "codepoints": [10845], "characters": "\u2A5D" }, + "ℴ": { "codepoints": [8500], "characters": "\u2134" }, + "ℴ": { "codepoints": [8500], "characters": "\u2134" }, + "ª": { "codepoints": [170], "characters": "\u00AA" }, + "ª": { "codepoints": [170], "characters": "\u00AA" }, + "º": { "codepoints": [186], "characters": "\u00BA" }, + "º": { "codepoints": [186], "characters": "\u00BA" }, + "⊶": { "codepoints": [8886], "characters": "\u22B6" }, + "⩖": { "codepoints": [10838], "characters": "\u2A56" }, + "⩗": { "codepoints": [10839], "characters": "\u2A57" }, + "⩛": { "codepoints": [10843], "characters": "\u2A5B" }, + "ℴ": { "codepoints": [8500], "characters": "\u2134" }, + "ø": { "codepoints": [248], "characters": "\u00F8" }, + "ø": { "codepoints": [248], "characters": "\u00F8" }, + "⊘": { "codepoints": [8856], "characters": "\u2298" }, + "õ": { "codepoints": [245], "characters": "\u00F5" }, + "õ": { "codepoints": [245], "characters": "\u00F5" }, + "⊗": { "codepoints": [8855], "characters": "\u2297" }, + "⨶": { "codepoints": [10806], "characters": "\u2A36" }, + "ö": { "codepoints": [246], "characters": "\u00F6" }, + "ö": { "codepoints": [246], "characters": "\u00F6" }, + "⌽": { "codepoints": [9021], "characters": "\u233D" }, + "∥": { "codepoints": [8741], "characters": "\u2225" }, + "¶": { "codepoints": [182], "characters": "\u00B6" }, + "¶": { "codepoints": [182], "characters": "\u00B6" }, + "∥": { "codepoints": [8741], "characters": "\u2225" }, + "⫳": { "codepoints": [10995], "characters": "\u2AF3" }, + "⫽": { "codepoints": [11005], "characters": "\u2AFD" }, + "∂": { "codepoints": [8706], "characters": "\u2202" }, + "п": { "codepoints": [1087], "characters": "\u043F" }, + "%": { "codepoints": [37], "characters": "\u0025" }, + ".": { "codepoints": [46], "characters": "\u002E" }, + "‰": { "codepoints": [8240], "characters": "\u2030" }, + "⊥": { "codepoints": [8869], "characters": "\u22A5" }, + "‱": { "codepoints": [8241], "characters": "\u2031" }, + "𝔭": { "codepoints": [120109], "characters": "\uD835\uDD2D" }, + "φ": { "codepoints": [966], "characters": "\u03C6" }, + "ϕ": { "codepoints": [981], "characters": "\u03D5" }, + "ℳ": { "codepoints": [8499], "characters": "\u2133" }, + "☎": { "codepoints": [9742], "characters": "\u260E" }, + "π": { "codepoints": [960], "characters": "\u03C0" }, + "⋔": { "codepoints": [8916], "characters": "\u22D4" }, + "ϖ": { "codepoints": [982], "characters": "\u03D6" }, + "ℏ": { "codepoints": [8463], "characters": "\u210F" }, + "ℎ": { "codepoints": [8462], "characters": "\u210E" }, + "ℏ": { "codepoints": [8463], "characters": "\u210F" }, + "+": { "codepoints": [43], "characters": "\u002B" }, + "⨣": { "codepoints": [10787], "characters": "\u2A23" }, + "⊞": { "codepoints": [8862], "characters": "\u229E" }, + "⨢": { "codepoints": [10786], "characters": "\u2A22" }, + "∔": { "codepoints": [8724], "characters": "\u2214" }, + "⨥": { "codepoints": [10789], "characters": "\u2A25" }, + "⩲": { "codepoints": [10866], "characters": "\u2A72" }, + "±": { "codepoints": [177], "characters": "\u00B1" }, + "±": { "codepoints": [177], "characters": "\u00B1" }, + "⨦": { "codepoints": [10790], "characters": "\u2A26" }, + "⨧": { "codepoints": [10791], "characters": "\u2A27" }, + "±": { "codepoints": [177], "characters": "\u00B1" }, + "⨕": { "codepoints": [10773], "characters": "\u2A15" }, + "𝕡": { "codepoints": [120161], "characters": "\uD835\uDD61" }, + "£": { "codepoints": [163], "characters": "\u00A3" }, + "£": { "codepoints": [163], "characters": "\u00A3" }, + "≺": { "codepoints": [8826], "characters": "\u227A" }, + "⪳": { "codepoints": [10931], "characters": "\u2AB3" }, + "⪷": { "codepoints": [10935], "characters": "\u2AB7" }, + "≼": { "codepoints": [8828], "characters": "\u227C" }, + "⪯": { "codepoints": [10927], "characters": "\u2AAF" }, + "≺": { "codepoints": [8826], "characters": "\u227A" }, + "⪷": { "codepoints": [10935], "characters": "\u2AB7" }, + "≼": { "codepoints": [8828], "characters": "\u227C" }, + "⪯": { "codepoints": [10927], "characters": "\u2AAF" }, + "⪹": { "codepoints": [10937], "characters": "\u2AB9" }, + "⪵": { "codepoints": [10933], "characters": "\u2AB5" }, + "⋨": { "codepoints": [8936], "characters": "\u22E8" }, + "≾": { "codepoints": [8830], "characters": "\u227E" }, + "′": { "codepoints": [8242], "characters": "\u2032" }, + "ℙ": { "codepoints": [8473], "characters": "\u2119" }, + "⪵": { "codepoints": [10933], "characters": "\u2AB5" }, + "⪹": { "codepoints": [10937], "characters": "\u2AB9" }, + "⋨": { "codepoints": [8936], "characters": "\u22E8" }, + "∏": { "codepoints": [8719], "characters": "\u220F" }, + "⌮": { "codepoints": [9006], "characters": "\u232E" }, + "⌒": { "codepoints": [8978], "characters": "\u2312" }, + "⌓": { "codepoints": [8979], "characters": "\u2313" }, + "∝": { "codepoints": [8733], "characters": "\u221D" }, + "∝": { "codepoints": [8733], "characters": "\u221D" }, + "≾": { "codepoints": [8830], "characters": "\u227E" }, + "⊰": { "codepoints": [8880], "characters": "\u22B0" }, + "𝓅": { "codepoints": [120005], "characters": "\uD835\uDCC5" }, + "ψ": { "codepoints": [968], "characters": "\u03C8" }, + " ": { "codepoints": [8200], "characters": "\u2008" }, + "𝔮": { "codepoints": [120110], "characters": "\uD835\uDD2E" }, + "⨌": { "codepoints": [10764], "characters": "\u2A0C" }, + "𝕢": { "codepoints": [120162], "characters": "\uD835\uDD62" }, + "⁗": { "codepoints": [8279], "characters": "\u2057" }, + "𝓆": { "codepoints": [120006], "characters": "\uD835\uDCC6" }, + "ℍ": { "codepoints": [8461], "characters": "\u210D" }, + "⨖": { "codepoints": [10774], "characters": "\u2A16" }, + "?": { "codepoints": [63], "characters": "\u003F" }, + "≟": { "codepoints": [8799], "characters": "\u225F" }, + """: { "codepoints": [34], "characters": "\u0022" }, + """: { "codepoints": [34], "characters": "\u0022" }, + "⇛": { "codepoints": [8667], "characters": "\u21DB" }, + "⇒": { "codepoints": [8658], "characters": "\u21D2" }, + "⤜": { "codepoints": [10524], "characters": "\u291C" }, + "⤏": { "codepoints": [10511], "characters": "\u290F" }, + "⥤": { "codepoints": [10596], "characters": "\u2964" }, + "∽̱": { "codepoints": [8765, 817], "characters": "\u223D\u0331" }, + "ŕ": { "codepoints": [341], "characters": "\u0155" }, + "√": { "codepoints": [8730], "characters": "\u221A" }, + "⦳": { "codepoints": [10675], "characters": "\u29B3" }, + "⟩": { "codepoints": [10217], "characters": "\u27E9" }, + "⦒": { "codepoints": [10642], "characters": "\u2992" }, + "⦥": { "codepoints": [10661], "characters": "\u29A5" }, + "⟩": { "codepoints": [10217], "characters": "\u27E9" }, + "»": { "codepoints": [187], "characters": "\u00BB" }, + "»": { "codepoints": [187], "characters": "\u00BB" }, + "→": { "codepoints": [8594], "characters": "\u2192" }, + "⥵": { "codepoints": [10613], "characters": "\u2975" }, + "⇥": { "codepoints": [8677], "characters": "\u21E5" }, + "⤠": { "codepoints": [10528], "characters": "\u2920" }, + "⤳": { "codepoints": [10547], "characters": "\u2933" }, + "⤞": { "codepoints": [10526], "characters": "\u291E" }, + "↪": { "codepoints": [8618], "characters": "\u21AA" }, + "↬": { "codepoints": [8620], "characters": "\u21AC" }, + "⥅": { "codepoints": [10565], "characters": "\u2945" }, + "⥴": { "codepoints": [10612], "characters": "\u2974" }, + "↣": { "codepoints": [8611], "characters": "\u21A3" }, + "↝": { "codepoints": [8605], "characters": "\u219D" }, + "⤚": { "codepoints": [10522], "characters": "\u291A" }, + "∶": { "codepoints": [8758], "characters": "\u2236" }, + "ℚ": { "codepoints": [8474], "characters": "\u211A" }, + "⤍": { "codepoints": [10509], "characters": "\u290D" }, + "❳": { "codepoints": [10099], "characters": "\u2773" }, + "}": { "codepoints": [125], "characters": "\u007D" }, + "]": { "codepoints": [93], "characters": "\u005D" }, + "⦌": { "codepoints": [10636], "characters": "\u298C" }, + "⦎": { "codepoints": [10638], "characters": "\u298E" }, + "⦐": { "codepoints": [10640], "characters": "\u2990" }, + "ř": { "codepoints": [345], "characters": "\u0159" }, + "ŗ": { "codepoints": [343], "characters": "\u0157" }, + "⌉": { "codepoints": [8969], "characters": "\u2309" }, + "}": { "codepoints": [125], "characters": "\u007D" }, + "р": { "codepoints": [1088], "characters": "\u0440" }, + "⤷": { "codepoints": [10551], "characters": "\u2937" }, + "⥩": { "codepoints": [10601], "characters": "\u2969" }, + "”": { "codepoints": [8221], "characters": "\u201D" }, + "”": { "codepoints": [8221], "characters": "\u201D" }, + "↳": { "codepoints": [8627], "characters": "\u21B3" }, + "ℜ": { "codepoints": [8476], "characters": "\u211C" }, + "ℛ": { "codepoints": [8475], "characters": "\u211B" }, + "ℜ": { "codepoints": [8476], "characters": "\u211C" }, + "ℝ": { "codepoints": [8477], "characters": "\u211D" }, + "▭": { "codepoints": [9645], "characters": "\u25AD" }, + "®": { "codepoints": [174], "characters": "\u00AE" }, + "®": { "codepoints": [174], "characters": "\u00AE" }, + "⥽": { "codepoints": [10621], "characters": "\u297D" }, + "⌋": { "codepoints": [8971], "characters": "\u230B" }, + "𝔯": { "codepoints": [120111], "characters": "\uD835\uDD2F" }, + "⇁": { "codepoints": [8641], "characters": "\u21C1" }, + "⇀": { "codepoints": [8640], "characters": "\u21C0" }, + "⥬": { "codepoints": [10604], "characters": "\u296C" }, + "ρ": { "codepoints": [961], "characters": "\u03C1" }, + "ϱ": { "codepoints": [1009], "characters": "\u03F1" }, + "→": { "codepoints": [8594], "characters": "\u2192" }, + "↣": { "codepoints": [8611], "characters": "\u21A3" }, + "⇁": { "codepoints": [8641], "characters": "\u21C1" }, + "⇀": { "codepoints": [8640], "characters": "\u21C0" }, + "⇄": { "codepoints": [8644], "characters": "\u21C4" }, + "⇌": { "codepoints": [8652], "characters": "\u21CC" }, + "⇉": { "codepoints": [8649], "characters": "\u21C9" }, + "↝": { "codepoints": [8605], "characters": "\u219D" }, + "⋌": { "codepoints": [8908], "characters": "\u22CC" }, + "˚": { "codepoints": [730], "characters": "\u02DA" }, + "≓": { "codepoints": [8787], "characters": "\u2253" }, + "⇄": { "codepoints": [8644], "characters": "\u21C4" }, + "⇌": { "codepoints": [8652], "characters": "\u21CC" }, + "‏": { "codepoints": [8207], "characters": "\u200F" }, + "⎱": { "codepoints": [9137], "characters": "\u23B1" }, + "⎱": { "codepoints": [9137], "characters": "\u23B1" }, + "⫮": { "codepoints": [10990], "characters": "\u2AEE" }, + "⟭": { "codepoints": [10221], "characters": "\u27ED" }, + "⇾": { "codepoints": [8702], "characters": "\u21FE" }, + "⟧": { "codepoints": [10215], "characters": "\u27E7" }, + "⦆": { "codepoints": [10630], "characters": "\u2986" }, + "𝕣": { "codepoints": [120163], "characters": "\uD835\uDD63" }, + "⨮": { "codepoints": [10798], "characters": "\u2A2E" }, + "⨵": { "codepoints": [10805], "characters": "\u2A35" }, + ")": { "codepoints": [41], "characters": "\u0029" }, + "⦔": { "codepoints": [10644], "characters": "\u2994" }, + "⨒": { "codepoints": [10770], "characters": "\u2A12" }, + "⇉": { "codepoints": [8649], "characters": "\u21C9" }, + "›": { "codepoints": [8250], "characters": "\u203A" }, + "𝓇": { "codepoints": [120007], "characters": "\uD835\uDCC7" }, + "↱": { "codepoints": [8625], "characters": "\u21B1" }, + "]": { "codepoints": [93], "characters": "\u005D" }, + "’": { "codepoints": [8217], "characters": "\u2019" }, + "’": { "codepoints": [8217], "characters": "\u2019" }, + "⋌": { "codepoints": [8908], "characters": "\u22CC" }, + "⋊": { "codepoints": [8906], "characters": "\u22CA" }, + "▹": { "codepoints": [9657], "characters": "\u25B9" }, + "⊵": { "codepoints": [8885], "characters": "\u22B5" }, + "▸": { "codepoints": [9656], "characters": "\u25B8" }, + "⧎": { "codepoints": [10702], "characters": "\u29CE" }, + "⥨": { "codepoints": [10600], "characters": "\u2968" }, + "℞": { "codepoints": [8478], "characters": "\u211E" }, + "ś": { "codepoints": [347], "characters": "\u015B" }, + "‚": { "codepoints": [8218], "characters": "\u201A" }, + "≻": { "codepoints": [8827], "characters": "\u227B" }, + "⪴": { "codepoints": [10932], "characters": "\u2AB4" }, + "⪸": { "codepoints": [10936], "characters": "\u2AB8" }, + "š": { "codepoints": [353], "characters": "\u0161" }, + "≽": { "codepoints": [8829], "characters": "\u227D" }, + "⪰": { "codepoints": [10928], "characters": "\u2AB0" }, + "ş": { "codepoints": [351], "characters": "\u015F" }, + "ŝ": { "codepoints": [349], "characters": "\u015D" }, + "⪶": { "codepoints": [10934], "characters": "\u2AB6" }, + "⪺": { "codepoints": [10938], "characters": "\u2ABA" }, + "⋩": { "codepoints": [8937], "characters": "\u22E9" }, + "⨓": { "codepoints": [10771], "characters": "\u2A13" }, + "≿": { "codepoints": [8831], "characters": "\u227F" }, + "с": { "codepoints": [1089], "characters": "\u0441" }, + "⋅": { "codepoints": [8901], "characters": "\u22C5" }, + "⊡": { "codepoints": [8865], "characters": "\u22A1" }, + "⩦": { "codepoints": [10854], "characters": "\u2A66" }, + "⇘": { "codepoints": [8664], "characters": "\u21D8" }, + "⤥": { "codepoints": [10533], "characters": "\u2925" }, + "↘": { "codepoints": [8600], "characters": "\u2198" }, + "↘": { "codepoints": [8600], "characters": "\u2198" }, + "§": { "codepoints": [167], "characters": "\u00A7" }, + "§": { "codepoints": [167], "characters": "\u00A7" }, + ";": { "codepoints": [59], "characters": "\u003B" }, + "⤩": { "codepoints": [10537], "characters": "\u2929" }, + "∖": { "codepoints": [8726], "characters": "\u2216" }, + "∖": { "codepoints": [8726], "characters": "\u2216" }, + "✶": { "codepoints": [10038], "characters": "\u2736" }, + "𝔰": { "codepoints": [120112], "characters": "\uD835\uDD30" }, + "⌢": { "codepoints": [8994], "characters": "\u2322" }, + "♯": { "codepoints": [9839], "characters": "\u266F" }, + "щ": { "codepoints": [1097], "characters": "\u0449" }, + "ш": { "codepoints": [1096], "characters": "\u0448" }, + "∣": { "codepoints": [8739], "characters": "\u2223" }, + "∥": { "codepoints": [8741], "characters": "\u2225" }, + "­": { "codepoints": [173], "characters": "\u00AD" }, + "­": { "codepoints": [173], "characters": "\u00AD" }, + "σ": { "codepoints": [963], "characters": "\u03C3" }, + "ς": { "codepoints": [962], "characters": "\u03C2" }, + "ς": { "codepoints": [962], "characters": "\u03C2" }, + "∼": { "codepoints": [8764], "characters": "\u223C" }, + "⩪": { "codepoints": [10858], "characters": "\u2A6A" }, + "≃": { "codepoints": [8771], "characters": "\u2243" }, + "≃": { "codepoints": [8771], "characters": "\u2243" }, + "⪞": { "codepoints": [10910], "characters": "\u2A9E" }, + "⪠": { "codepoints": [10912], "characters": "\u2AA0" }, + "⪝": { "codepoints": [10909], "characters": "\u2A9D" }, + "⪟": { "codepoints": [10911], "characters": "\u2A9F" }, + "≆": { "codepoints": [8774], "characters": "\u2246" }, + "⨤": { "codepoints": [10788], "characters": "\u2A24" }, + "⥲": { "codepoints": [10610], "characters": "\u2972" }, + "←": { "codepoints": [8592], "characters": "\u2190" }, + "∖": { "codepoints": [8726], "characters": "\u2216" }, + "⨳": { "codepoints": [10803], "characters": "\u2A33" }, + "⧤": { "codepoints": [10724], "characters": "\u29E4" }, + "∣": { "codepoints": [8739], "characters": "\u2223" }, + "⌣": { "codepoints": [8995], "characters": "\u2323" }, + "⪪": { "codepoints": [10922], "characters": "\u2AAA" }, + "⪬": { "codepoints": [10924], "characters": "\u2AAC" }, + "⪬︀": { "codepoints": [10924, 65024], "characters": "\u2AAC\uFE00" }, + "ь": { "codepoints": [1100], "characters": "\u044C" }, + "/": { "codepoints": [47], "characters": "\u002F" }, + "⧄": { "codepoints": [10692], "characters": "\u29C4" }, + "⌿": { "codepoints": [9023], "characters": "\u233F" }, + "𝕤": { "codepoints": [120164], "characters": "\uD835\uDD64" }, + "♠": { "codepoints": [9824], "characters": "\u2660" }, + "♠": { "codepoints": [9824], "characters": "\u2660" }, + "∥": { "codepoints": [8741], "characters": "\u2225" }, + "⊓": { "codepoints": [8851], "characters": "\u2293" }, + "⊓︀": { "codepoints": [8851, 65024], "characters": "\u2293\uFE00" }, + "⊔": { "codepoints": [8852], "characters": "\u2294" }, + "⊔︀": { "codepoints": [8852, 65024], "characters": "\u2294\uFE00" }, + "⊏": { "codepoints": [8847], "characters": "\u228F" }, + "⊑": { "codepoints": [8849], "characters": "\u2291" }, + "⊏": { "codepoints": [8847], "characters": "\u228F" }, + "⊑": { "codepoints": [8849], "characters": "\u2291" }, + "⊐": { "codepoints": [8848], "characters": "\u2290" }, + "⊒": { "codepoints": [8850], "characters": "\u2292" }, + "⊐": { "codepoints": [8848], "characters": "\u2290" }, + "⊒": { "codepoints": [8850], "characters": "\u2292" }, + "□": { "codepoints": [9633], "characters": "\u25A1" }, + "□": { "codepoints": [9633], "characters": "\u25A1" }, + "▪": { "codepoints": [9642], "characters": "\u25AA" }, + "▪": { "codepoints": [9642], "characters": "\u25AA" }, + "→": { "codepoints": [8594], "characters": "\u2192" }, + "𝓈": { "codepoints": [120008], "characters": "\uD835\uDCC8" }, + "∖": { "codepoints": [8726], "characters": "\u2216" }, + "⌣": { "codepoints": [8995], "characters": "\u2323" }, + "⋆": { "codepoints": [8902], "characters": "\u22C6" }, + "☆": { "codepoints": [9734], "characters": "\u2606" }, + "★": { "codepoints": [9733], "characters": "\u2605" }, + "ϵ": { "codepoints": [1013], "characters": "\u03F5" }, + "ϕ": { "codepoints": [981], "characters": "\u03D5" }, + "¯": { "codepoints": [175], "characters": "\u00AF" }, + "⊂": { "codepoints": [8834], "characters": "\u2282" }, + "⫅": { "codepoints": [10949], "characters": "\u2AC5" }, + "⪽": { "codepoints": [10941], "characters": "\u2ABD" }, + "⊆": { "codepoints": [8838], "characters": "\u2286" }, + "⫃": { "codepoints": [10947], "characters": "\u2AC3" }, + "⫁": { "codepoints": [10945], "characters": "\u2AC1" }, + "⫋": { "codepoints": [10955], "characters": "\u2ACB" }, + "⊊": { "codepoints": [8842], "characters": "\u228A" }, + "⪿": { "codepoints": [10943], "characters": "\u2ABF" }, + "⥹": { "codepoints": [10617], "characters": "\u2979" }, + "⊂": { "codepoints": [8834], "characters": "\u2282" }, + "⊆": { "codepoints": [8838], "characters": "\u2286" }, + "⫅": { "codepoints": [10949], "characters": "\u2AC5" }, + "⊊": { "codepoints": [8842], "characters": "\u228A" }, + "⫋": { "codepoints": [10955], "characters": "\u2ACB" }, + "⫇": { "codepoints": [10951], "characters": "\u2AC7" }, + "⫕": { "codepoints": [10965], "characters": "\u2AD5" }, + "⫓": { "codepoints": [10963], "characters": "\u2AD3" }, + "≻": { "codepoints": [8827], "characters": "\u227B" }, + "⪸": { "codepoints": [10936], "characters": "\u2AB8" }, + "≽": { "codepoints": [8829], "characters": "\u227D" }, + "⪰": { "codepoints": [10928], "characters": "\u2AB0" }, + "⪺": { "codepoints": [10938], "characters": "\u2ABA" }, + "⪶": { "codepoints": [10934], "characters": "\u2AB6" }, + "⋩": { "codepoints": [8937], "characters": "\u22E9" }, + "≿": { "codepoints": [8831], "characters": "\u227F" }, + "∑": { "codepoints": [8721], "characters": "\u2211" }, + "♪": { "codepoints": [9834], "characters": "\u266A" }, + "¹": { "codepoints": [185], "characters": "\u00B9" }, + "¹": { "codepoints": [185], "characters": "\u00B9" }, + "²": { "codepoints": [178], "characters": "\u00B2" }, + "²": { "codepoints": [178], "characters": "\u00B2" }, + "³": { "codepoints": [179], "characters": "\u00B3" }, + "³": { "codepoints": [179], "characters": "\u00B3" }, + "⊃": { "codepoints": [8835], "characters": "\u2283" }, + "⫆": { "codepoints": [10950], "characters": "\u2AC6" }, + "⪾": { "codepoints": [10942], "characters": "\u2ABE" }, + "⫘": { "codepoints": [10968], "characters": "\u2AD8" }, + "⊇": { "codepoints": [8839], "characters": "\u2287" }, + "⫄": { "codepoints": [10948], "characters": "\u2AC4" }, + "⟉": { "codepoints": [10185], "characters": "\u27C9" }, + "⫗": { "codepoints": [10967], "characters": "\u2AD7" }, + "⥻": { "codepoints": [10619], "characters": "\u297B" }, + "⫂": { "codepoints": [10946], "characters": "\u2AC2" }, + "⫌": { "codepoints": [10956], "characters": "\u2ACC" }, + "⊋": { "codepoints": [8843], "characters": "\u228B" }, + "⫀": { "codepoints": [10944], "characters": "\u2AC0" }, + "⊃": { "codepoints": [8835], "characters": "\u2283" }, + "⊇": { "codepoints": [8839], "characters": "\u2287" }, + "⫆": { "codepoints": [10950], "characters": "\u2AC6" }, + "⊋": { "codepoints": [8843], "characters": "\u228B" }, + "⫌": { "codepoints": [10956], "characters": "\u2ACC" }, + "⫈": { "codepoints": [10952], "characters": "\u2AC8" }, + "⫔": { "codepoints": [10964], "characters": "\u2AD4" }, + "⫖": { "codepoints": [10966], "characters": "\u2AD6" }, + "⇙": { "codepoints": [8665], "characters": "\u21D9" }, + "⤦": { "codepoints": [10534], "characters": "\u2926" }, + "↙": { "codepoints": [8601], "characters": "\u2199" }, + "↙": { "codepoints": [8601], "characters": "\u2199" }, + "⤪": { "codepoints": [10538], "characters": "\u292A" }, + "ß": { "codepoints": [223], "characters": "\u00DF" }, + "ß": { "codepoints": [223], "characters": "\u00DF" }, + "⌖": { "codepoints": [8982], "characters": "\u2316" }, + "τ": { "codepoints": [964], "characters": "\u03C4" }, + "⎴": { "codepoints": [9140], "characters": "\u23B4" }, + "ť": { "codepoints": [357], "characters": "\u0165" }, + "ţ": { "codepoints": [355], "characters": "\u0163" }, + "т": { "codepoints": [1090], "characters": "\u0442" }, + "⃛": { "codepoints": [8411], "characters": "\u20DB" }, + "⌕": { "codepoints": [8981], "characters": "\u2315" }, + "𝔱": { "codepoints": [120113], "characters": "\uD835\uDD31" }, + "∴": { "codepoints": [8756], "characters": "\u2234" }, + "∴": { "codepoints": [8756], "characters": "\u2234" }, + "θ": { "codepoints": [952], "characters": "\u03B8" }, + "ϑ": { "codepoints": [977], "characters": "\u03D1" }, + "ϑ": { "codepoints": [977], "characters": "\u03D1" }, + "≈": { "codepoints": [8776], "characters": "\u2248" }, + "∼": { "codepoints": [8764], "characters": "\u223C" }, + " ": { "codepoints": [8201], "characters": "\u2009" }, + "≈": { "codepoints": [8776], "characters": "\u2248" }, + "∼": { "codepoints": [8764], "characters": "\u223C" }, + "þ": { "codepoints": [254], "characters": "\u00FE" }, + "þ": { "codepoints": [254], "characters": "\u00FE" }, + "˜": { "codepoints": [732], "characters": "\u02DC" }, + "×": { "codepoints": [215], "characters": "\u00D7" }, + "×": { "codepoints": [215], "characters": "\u00D7" }, + "⊠": { "codepoints": [8864], "characters": "\u22A0" }, + "⨱": { "codepoints": [10801], "characters": "\u2A31" }, + "⨰": { "codepoints": [10800], "characters": "\u2A30" }, + "∭": { "codepoints": [8749], "characters": "\u222D" }, + "⤨": { "codepoints": [10536], "characters": "\u2928" }, + "⊤": { "codepoints": [8868], "characters": "\u22A4" }, + "⌶": { "codepoints": [9014], "characters": "\u2336" }, + "⫱": { "codepoints": [10993], "characters": "\u2AF1" }, + "𝕥": { "codepoints": [120165], "characters": "\uD835\uDD65" }, + "⫚": { "codepoints": [10970], "characters": "\u2ADA" }, + "⤩": { "codepoints": [10537], "characters": "\u2929" }, + "‴": { "codepoints": [8244], "characters": "\u2034" }, + "™": { "codepoints": [8482], "characters": "\u2122" }, + "▵": { "codepoints": [9653], "characters": "\u25B5" }, + "▿": { "codepoints": [9663], "characters": "\u25BF" }, + "◃": { "codepoints": [9667], "characters": "\u25C3" }, + "⊴": { "codepoints": [8884], "characters": "\u22B4" }, + "≜": { "codepoints": [8796], "characters": "\u225C" }, + "▹": { "codepoints": [9657], "characters": "\u25B9" }, + "⊵": { "codepoints": [8885], "characters": "\u22B5" }, + "◬": { "codepoints": [9708], "characters": "\u25EC" }, + "≜": { "codepoints": [8796], "characters": "\u225C" }, + "⨺": { "codepoints": [10810], "characters": "\u2A3A" }, + "⨹": { "codepoints": [10809], "characters": "\u2A39" }, + "⧍": { "codepoints": [10701], "characters": "\u29CD" }, + "⨻": { "codepoints": [10811], "characters": "\u2A3B" }, + "⏢": { "codepoints": [9186], "characters": "\u23E2" }, + "𝓉": { "codepoints": [120009], "characters": "\uD835\uDCC9" }, + "ц": { "codepoints": [1094], "characters": "\u0446" }, + "ћ": { "codepoints": [1115], "characters": "\u045B" }, + "ŧ": { "codepoints": [359], "characters": "\u0167" }, + "≬": { "codepoints": [8812], "characters": "\u226C" }, + "↞": { "codepoints": [8606], "characters": "\u219E" }, + "↠": { "codepoints": [8608], "characters": "\u21A0" }, + "⇑": { "codepoints": [8657], "characters": "\u21D1" }, + "⥣": { "codepoints": [10595], "characters": "\u2963" }, + "ú": { "codepoints": [250], "characters": "\u00FA" }, + "ú": { "codepoints": [250], "characters": "\u00FA" }, + "↑": { "codepoints": [8593], "characters": "\u2191" }, + "ў": { "codepoints": [1118], "characters": "\u045E" }, + "ŭ": { "codepoints": [365], "characters": "\u016D" }, + "û": { "codepoints": [251], "characters": "\u00FB" }, + "û": { "codepoints": [251], "characters": "\u00FB" }, + "у": { "codepoints": [1091], "characters": "\u0443" }, + "⇅": { "codepoints": [8645], "characters": "\u21C5" }, + "ű": { "codepoints": [369], "characters": "\u0171" }, + "⥮": { "codepoints": [10606], "characters": "\u296E" }, + "⥾": { "codepoints": [10622], "characters": "\u297E" }, + "𝔲": { "codepoints": [120114], "characters": "\uD835\uDD32" }, + "ù": { "codepoints": [249], "characters": "\u00F9" }, + "ù": { "codepoints": [249], "characters": "\u00F9" }, + "↿": { "codepoints": [8639], "characters": "\u21BF" }, + "↾": { "codepoints": [8638], "characters": "\u21BE" }, + "▀": { "codepoints": [9600], "characters": "\u2580" }, + "⌜": { "codepoints": [8988], "characters": "\u231C" }, + "⌜": { "codepoints": [8988], "characters": "\u231C" }, + "⌏": { "codepoints": [8975], "characters": "\u230F" }, + "◸": { "codepoints": [9720], "characters": "\u25F8" }, + "ū": { "codepoints": [363], "characters": "\u016B" }, + "¨": { "codepoints": [168], "characters": "\u00A8" }, + "¨": { "codepoints": [168], "characters": "\u00A8" }, + "ų": { "codepoints": [371], "characters": "\u0173" }, + "𝕦": { "codepoints": [120166], "characters": "\uD835\uDD66" }, + "↑": { "codepoints": [8593], "characters": "\u2191" }, + "↕": { "codepoints": [8597], "characters": "\u2195" }, + "↿": { "codepoints": [8639], "characters": "\u21BF" }, + "↾": { "codepoints": [8638], "characters": "\u21BE" }, + "⊎": { "codepoints": [8846], "characters": "\u228E" }, + "υ": { "codepoints": [965], "characters": "\u03C5" }, + "ϒ": { "codepoints": [978], "characters": "\u03D2" }, + "υ": { "codepoints": [965], "characters": "\u03C5" }, + "⇈": { "codepoints": [8648], "characters": "\u21C8" }, + "⌝": { "codepoints": [8989], "characters": "\u231D" }, + "⌝": { "codepoints": [8989], "characters": "\u231D" }, + "⌎": { "codepoints": [8974], "characters": "\u230E" }, + "ů": { "codepoints": [367], "characters": "\u016F" }, + "◹": { "codepoints": [9721], "characters": "\u25F9" }, + "𝓊": { "codepoints": [120010], "characters": "\uD835\uDCCA" }, + "⋰": { "codepoints": [8944], "characters": "\u22F0" }, + "ũ": { "codepoints": [361], "characters": "\u0169" }, + "▵": { "codepoints": [9653], "characters": "\u25B5" }, + "▴": { "codepoints": [9652], "characters": "\u25B4" }, + "⇈": { "codepoints": [8648], "characters": "\u21C8" }, + "ü": { "codepoints": [252], "characters": "\u00FC" }, + "ü": { "codepoints": [252], "characters": "\u00FC" }, + "⦧": { "codepoints": [10663], "characters": "\u29A7" }, + "⇕": { "codepoints": [8661], "characters": "\u21D5" }, + "⫨": { "codepoints": [10984], "characters": "\u2AE8" }, + "⫩": { "codepoints": [10985], "characters": "\u2AE9" }, + "⊨": { "codepoints": [8872], "characters": "\u22A8" }, + "⦜": { "codepoints": [10652], "characters": "\u299C" }, + "ϵ": { "codepoints": [1013], "characters": "\u03F5" }, + "ϰ": { "codepoints": [1008], "characters": "\u03F0" }, + "∅": { "codepoints": [8709], "characters": "\u2205" }, + "ϕ": { "codepoints": [981], "characters": "\u03D5" }, + "ϖ": { "codepoints": [982], "characters": "\u03D6" }, + "∝": { "codepoints": [8733], "characters": "\u221D" }, + "↕": { "codepoints": [8597], "characters": "\u2195" }, + "ϱ": { "codepoints": [1009], "characters": "\u03F1" }, + "ς": { "codepoints": [962], "characters": "\u03C2" }, + "⊊︀": { "codepoints": [8842, 65024], "characters": "\u228A\uFE00" }, + "⫋︀": { "codepoints": [10955, 65024], "characters": "\u2ACB\uFE00" }, + "⊋︀": { "codepoints": [8843, 65024], "characters": "\u228B\uFE00" }, + "⫌︀": { "codepoints": [10956, 65024], "characters": "\u2ACC\uFE00" }, + "ϑ": { "codepoints": [977], "characters": "\u03D1" }, + "⊲": { "codepoints": [8882], "characters": "\u22B2" }, + "⊳": { "codepoints": [8883], "characters": "\u22B3" }, + "в": { "codepoints": [1074], "characters": "\u0432" }, + "⊢": { "codepoints": [8866], "characters": "\u22A2" }, + "∨": { "codepoints": [8744], "characters": "\u2228" }, + "⊻": { "codepoints": [8891], "characters": "\u22BB" }, + "≚": { "codepoints": [8794], "characters": "\u225A" }, + "⋮": { "codepoints": [8942], "characters": "\u22EE" }, + "|": { "codepoints": [124], "characters": "\u007C" }, + "|": { "codepoints": [124], "characters": "\u007C" }, + "𝔳": { "codepoints": [120115], "characters": "\uD835\uDD33" }, + "⊲": { "codepoints": [8882], "characters": "\u22B2" }, + "⊂⃒": { "codepoints": [8834, 8402], "characters": "\u2282\u20D2" }, + "⊃⃒": { "codepoints": [8835, 8402], "characters": "\u2283\u20D2" }, + "𝕧": { "codepoints": [120167], "characters": "\uD835\uDD67" }, + "∝": { "codepoints": [8733], "characters": "\u221D" }, + "⊳": { "codepoints": [8883], "characters": "\u22B3" }, + "𝓋": { "codepoints": [120011], "characters": "\uD835\uDCCB" }, + "⫋︀": { "codepoints": [10955, 65024], "characters": "\u2ACB\uFE00" }, + "⊊︀": { "codepoints": [8842, 65024], "characters": "\u228A\uFE00" }, + "⫌︀": { "codepoints": [10956, 65024], "characters": "\u2ACC\uFE00" }, + "⊋︀": { "codepoints": [8843, 65024], "characters": "\u228B\uFE00" }, + "⦚": { "codepoints": [10650], "characters": "\u299A" }, + "ŵ": { "codepoints": [373], "characters": "\u0175" }, + "⩟": { "codepoints": [10847], "characters": "\u2A5F" }, + "∧": { "codepoints": [8743], "characters": "\u2227" }, + "≙": { "codepoints": [8793], "characters": "\u2259" }, + "℘": { "codepoints": [8472], "characters": "\u2118" }, + "𝔴": { "codepoints": [120116], "characters": "\uD835\uDD34" }, + "𝕨": { "codepoints": [120168], "characters": "\uD835\uDD68" }, + "℘": { "codepoints": [8472], "characters": "\u2118" }, + "≀": { "codepoints": [8768], "characters": "\u2240" }, + "≀": { "codepoints": [8768], "characters": "\u2240" }, + "𝓌": { "codepoints": [120012], "characters": "\uD835\uDCCC" }, + "⋂": { "codepoints": [8898], "characters": "\u22C2" }, + "◯": { "codepoints": [9711], "characters": "\u25EF" }, + "⋃": { "codepoints": [8899], "characters": "\u22C3" }, + "▽": { "codepoints": [9661], "characters": "\u25BD" }, + "𝔵": { "codepoints": [120117], "characters": "\uD835\uDD35" }, + "⟺": { "codepoints": [10234], "characters": "\u27FA" }, + "⟷": { "codepoints": [10231], "characters": "\u27F7" }, + "ξ": { "codepoints": [958], "characters": "\u03BE" }, + "⟸": { "codepoints": [10232], "characters": "\u27F8" }, + "⟵": { "codepoints": [10229], "characters": "\u27F5" }, + "⟼": { "codepoints": [10236], "characters": "\u27FC" }, + "⋻": { "codepoints": [8955], "characters": "\u22FB" }, + "⨀": { "codepoints": [10752], "characters": "\u2A00" }, + "𝕩": { "codepoints": [120169], "characters": "\uD835\uDD69" }, + "⨁": { "codepoints": [10753], "characters": "\u2A01" }, + "⨂": { "codepoints": [10754], "characters": "\u2A02" }, + "⟹": { "codepoints": [10233], "characters": "\u27F9" }, + "⟶": { "codepoints": [10230], "characters": "\u27F6" }, + "𝓍": { "codepoints": [120013], "characters": "\uD835\uDCCD" }, + "⨆": { "codepoints": [10758], "characters": "\u2A06" }, + "⨄": { "codepoints": [10756], "characters": "\u2A04" }, + "△": { "codepoints": [9651], "characters": "\u25B3" }, + "⋁": { "codepoints": [8897], "characters": "\u22C1" }, + "⋀": { "codepoints": [8896], "characters": "\u22C0" }, + "ý": { "codepoints": [253], "characters": "\u00FD" }, + "ý": { "codepoints": [253], "characters": "\u00FD" }, + "я": { "codepoints": [1103], "characters": "\u044F" }, + "ŷ": { "codepoints": [375], "characters": "\u0177" }, + "ы": { "codepoints": [1099], "characters": "\u044B" }, + "¥": { "codepoints": [165], "characters": "\u00A5" }, + "¥": { "codepoints": [165], "characters": "\u00A5" }, + "𝔶": { "codepoints": [120118], "characters": "\uD835\uDD36" }, + "ї": { "codepoints": [1111], "characters": "\u0457" }, + "𝕪": { "codepoints": [120170], "characters": "\uD835\uDD6A" }, + "𝓎": { "codepoints": [120014], "characters": "\uD835\uDCCE" }, + "ю": { "codepoints": [1102], "characters": "\u044E" }, + "ÿ": { "codepoints": [255], "characters": "\u00FF" }, + "ÿ": { "codepoints": [255], "characters": "\u00FF" }, + "ź": { "codepoints": [378], "characters": "\u017A" }, + "ž": { "codepoints": [382], "characters": "\u017E" }, + "з": { "codepoints": [1079], "characters": "\u0437" }, + "ż": { "codepoints": [380], "characters": "\u017C" }, + "ℨ": { "codepoints": [8488], "characters": "\u2128" }, + "ζ": { "codepoints": [950], "characters": "\u03B6" }, + "𝔷": { "codepoints": [120119], "characters": "\uD835\uDD37" }, + "ж": { "codepoints": [1078], "characters": "\u0436" }, + "⇝": { "codepoints": [8669], "characters": "\u21DD" }, + "𝕫": { "codepoints": [120171], "characters": "\uD835\uDD6B" }, + "𝓏": { "codepoints": [120015], "characters": "\uD835\uDCCF" }, + "‍": { "codepoints": [8205], "characters": "\u200D" }, + "‌": { "codepoints": [8204], "characters": "\u200C" } +} diff --git a/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.cpp b/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.cpp index f52a8c656f70..e0147bd562b3 100644 --- a/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.cpp +++ b/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.cpp @@ -1683,6 +1683,7 @@ Optional HTMLTokenizer::next_token(StopAtInsertionPoint stop_at_inser ON_ASCII_ALPHANUMERIC { + m_named_character_reference_matcher = {}; RECONSUME_IN(NamedCharacterReference); } ON('#') @@ -1701,16 +1702,31 @@ Optional HTMLTokenizer::next_token(StopAtInsertionPoint stop_at_inser // 13.2.5.73 Named character reference state, https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state BEGIN_STATE(NamedCharacterReference) { - size_t byte_offset = m_utf8_view.byte_offset_of(m_prev_utf8_iterator); - - auto match = HTML::code_points_from_entity(m_decoded_input.substring_view(byte_offset, m_decoded_input.length() - byte_offset)); + if (current_input_character.has_value()) { + if (m_named_character_reference_matcher.update_with_codepoint(current_input_character.value())) { + m_temporary_buffer.append(current_input_character.value()); + continue; + } else { + DONT_CONSUME_NEXT_INPUT_CHARACTER; + } + } - if (match.has_value()) { - skip(match->entity.length() - 1); - for (auto ch : match.value().entity) - m_temporary_buffer.append(ch); + // Only consume the characters within the longest match. It's possible that we've overconsumed code points, + // though, so we want to backtrack to the longest match found. For example, `¬indo` (which could still + // have lead to `⋵̸`) would need to backtrack back to `¬`), + auto overconsumed_code_points = m_named_character_reference_matcher.overconsumed_code_points(); + if (overconsumed_code_points > 0) { + auto current_byte_offset = m_utf8_view.byte_offset_of(m_utf8_iterator); + // All consumed code points during character reference matching are guaranteed to be + // within the ASCII range, so they are always 1 byte wide. + restore_to(m_utf8_view.iterator_at_byte_offset_without_validation(current_byte_offset - overconsumed_code_points)); + m_temporary_buffer.resize_and_keep_capacity(m_temporary_buffer.size() - overconsumed_code_points); + } - if (consumed_as_part_of_an_attribute() && !match.value().entity.ends_with(';')) { + auto mapped_codepoints = m_named_character_reference_matcher.code_points(); + // If there is a match + if (mapped_codepoints.has_value()) { + if (consumed_as_part_of_an_attribute() && !m_named_character_reference_matcher.last_match_ends_with_semicolon()) { auto next_code_point = peek_code_point(0, stop_at_insertion_point); if (next_code_point.has_value() && (next_code_point.value() == '=' || is_ascii_alphanumeric(next_code_point.value()))) { FLUSH_CODEPOINTS_CONSUMED_AS_A_CHARACTER_REFERENCE; @@ -1718,19 +1734,22 @@ Optional HTMLTokenizer::next_token(StopAtInsertionPoint stop_at_inser } } - if (!match.value().entity.ends_with(';')) { + if (!m_named_character_reference_matcher.last_match_ends_with_semicolon()) { log_parse_error(); } - m_temporary_buffer = match.value().code_points; + m_temporary_buffer.clear_with_capacity(); + m_temporary_buffer.append(mapped_codepoints.value().first); + auto second_codepoint = named_character_reference_second_codepoint_value(mapped_codepoints.value().second); + if (second_codepoint.has_value()) { + m_temporary_buffer.append(second_codepoint.value()); + } FLUSH_CODEPOINTS_CONSUMED_AS_A_CHARACTER_REFERENCE; SWITCH_TO_RETURN_STATE; } else { FLUSH_CODEPOINTS_CONSUMED_AS_A_CHARACTER_REFERENCE; - // FIXME: This should be SWITCH_TO, but we always lose the first character on this path, so just reconsume it. - // I can't wrap my head around how to do it as the spec says. - RECONSUME_IN(AmbiguousAmpersand); + SWITCH_TO_WITH_UNCLEAN_BUILDER(AmbiguousAmpersand); } } END_STATE diff --git a/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.h b/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.h index 06f235b14f19..7d949463e170 100644 --- a/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.h +++ b/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.h @@ -14,6 +14,7 @@ #include #include #include +#include #include namespace Web::HTML { @@ -211,6 +212,8 @@ class HTMLTokenizer { HTMLToken m_current_token; StringBuilder m_current_builder; + NamedCharacterReferenceMatcher m_named_character_reference_matcher; + Optional m_last_emitted_start_tag_name; bool m_explicit_eof_inserted { false }; diff --git a/Meta/CMake/libweb_generators.cmake b/Meta/CMake/libweb_generators.cmake index cf4e5f61c0e2..4e6d17c4c0ce 100644 --- a/Meta/CMake/libweb_generators.cmake +++ b/Meta/CMake/libweb_generators.cmake @@ -131,6 +131,29 @@ function (generate_css_implementation) set(LIBWEB_ALL_GENERATED_IDL ${LIBWEB_ALL_GENERATED_IDL} PARENT_SCOPE) endfunction() +function (generate_html_implementation) + set(LIBWEB_INPUT_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}") + + invoke_generator( + "NamedCharacterReferences.cpp" + Lagom::GenerateNamedCharacterReferences + "${LIBWEB_INPUT_FOLDER}/HTML/Parser/Entities.json" + "HTML/Parser/NamedCharacterReferences.h" + "HTML/Parser/NamedCharacterReferences.cpp" + arguments -j "${LIBWEB_INPUT_FOLDER}/HTML/Parser/Entities.json" + ) + + set(HTML_GENERATED_HEADERS + "HTML/Parser/NamedCharacterReferences.h" + ) + list(TRANSFORM HTML_GENERATED_HEADERS PREPEND "${CMAKE_CURRENT_BINARY_DIR}/") + if (ENABLE_INSTALL_HEADERS) + install(FILES ${HTML_GENERATED_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/LibWeb/HTML") + endif() + list(APPEND LIBWEB_ALL_GENERATED_HEADERS ${HTML_GENERATED_HEADERS}) + set(LIBWEB_ALL_GENERATED_HEADERS ${LIBWEB_ALL_GENERATED_HEADERS} PARENT_SCOPE) +endfunction() + function (generate_js_bindings target) set(LIBWEB_INPUT_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}") set(generated_idl_targets ${LIBWEB_ALL_GENERATED_IDL}) diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/CMakeLists.txt b/Meta/Lagom/Tools/CodeGenerators/LibWeb/CMakeLists.txt index eff05e3578ea..7984c8c976c6 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/CMakeLists.txt +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/CMakeLists.txt @@ -11,5 +11,6 @@ lagom_tool(GenerateCSSTransformFunctions SOURCES GenerateCSSTransformFunction lagom_tool(GenerateWindowOrWorkerInterfaces SOURCES GenerateWindowOrWorkerInterfaces.cpp LIBS LibMain LibIDL) lagom_tool(GenerateAriaRoles SOURCES GenerateAriaRoles.cpp LIBS LibMain) lagom_tool(GenerateWebGLRenderingContext SOURCES GenerateWebGLRenderingContext.cpp BindingsGenerator/IDLGenerators.cpp LIBS LibMain LibIDL) +lagom_tool(GenerateNamedCharacterReferences SOURCES GenerateNamedCharacterReferences.cpp LIBS LibMain) add_subdirectory(BindingsGenerator) diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateNamedCharacterReferences.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateNamedCharacterReferences.cpp new file mode 100644 index 000000000000..e98ca191b05d --- /dev/null +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateNamedCharacterReferences.cpp @@ -0,0 +1,492 @@ +/* + * Copyright (c) 2024, the SerenityOS developers. + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include "GeneratorUtil.h" +#include +#include +#include +#include +#include + +ErrorOr generate_header_file(Core::File& file); +ErrorOr generate_implementation_file(JsonObject& named_character_reference_data, Core::File& file); + +ErrorOr serenity_main(Main::Arguments arguments) +{ + StringView generated_header_path; + StringView generated_implementation_path; + StringView json_path; + + Core::ArgsParser args_parser; + args_parser.add_option(generated_header_path, "Path to the Entities header file to generate", "generated-header-path", 'h', "generated-header-path"); + args_parser.add_option(generated_implementation_path, "Path to the Entities implementation file to generate", "generated-implementation-path", 'c', "generated-implementation-path"); + args_parser.add_option(json_path, "Path to the JSON file to read from", "json-path", 'j', "json-path"); + args_parser.parse(arguments); + + auto json = TRY(read_entire_file_as_json(json_path)); + VERIFY(json.is_object()); + auto named_character_reference_data = json.as_object(); + + auto generated_header_file = TRY(Core::File::open(generated_header_path, Core::File::OpenMode::Write)); + auto generated_implementation_file = TRY(Core::File::open(generated_implementation_path, Core::File::OpenMode::Write)); + + TRY(generate_header_file(*generated_header_file)); + TRY(generate_implementation_file(named_character_reference_data, *generated_implementation_file)); + + return 0; +} + +struct Codepoints { + u32 first; + u32 second; +}; + +inline static StringView get_second_codepoint_enum_name(u32 codepoint) +{ + switch (codepoint) { + case 0x0338: + return "CombiningLongSolidusOverlay"sv; + case 0x20D2: + return "CombiningLongVerticalLineOverlay"sv; + case 0x200A: + return "HairSpace"sv; + case 0x0333: + return "CombiningDoubleLowLine"sv; + case 0x20E5: + return "CombiningReverseSolidusOverlay"sv; + case 0xFE00: + return "VariationSelector1"sv; + case 0x006A: + return "LatinSmallLetterJ"sv; + case 0x0331: + return "CombiningMacronBelow"sv; + default: + return "None"sv; + } +} + +ErrorOr generate_header_file(Core::File& file) +{ + StringBuilder builder; + SourceGenerator generator { builder }; + generator.append(R"~~~( +#pragma once + +#include +#include + +namespace Web::HTML { + +enum class NamedCharacterReferenceSecondCodepoint { + None, + CombiningLongSolidusOverlay, // U+0338 + CombiningLongVerticalLineOverlay, // U+20D2 + HairSpace, // U+200A + CombiningDoubleLowLine, // U+0333 + CombiningReverseSolidusOverlay, // U+20E5 + VariationSelector1, // U+FE00 + LatinSmallLetterJ, // U+006A + CombiningMacronBelow, // U+0331 +}; + +inline Optional named_character_reference_second_codepoint_value(NamedCharacterReferenceSecondCodepoint codepoint) +{ + switch (codepoint) { + case NamedCharacterReferenceSecondCodepoint::None: + return {}; + case NamedCharacterReferenceSecondCodepoint::CombiningLongSolidusOverlay: + return 0x0338; + case NamedCharacterReferenceSecondCodepoint::CombiningLongVerticalLineOverlay: + return 0x20D2; + case NamedCharacterReferenceSecondCodepoint::HairSpace: + return 0x200A; + case NamedCharacterReferenceSecondCodepoint::CombiningDoubleLowLine: + return 0x0333; + case NamedCharacterReferenceSecondCodepoint::CombiningReverseSolidusOverlay: + return 0x20E5; + case NamedCharacterReferenceSecondCodepoint::VariationSelector1: + return 0xFE00; + case NamedCharacterReferenceSecondCodepoint::LatinSmallLetterJ: + return 0x006A; + case NamedCharacterReferenceSecondCodepoint::CombiningMacronBelow: + return 0x0331; + } +} + +// Note: The first codepoint could fit in 17 bits, and the second could fit in 4 (if unsigned). +// However, to get any benefit from minimizing the struct size, it would need to be accompanied by +// bit-packing the g_named_character_reference_codepoints_lookup array, and then either +// using 5 bits for the second field (since enum bitfields are signed), or using a 4-bit wide +// unsigned integer type. +struct NamedCharacterReferenceCodepoints { + u32 first : 24; // Largest value is U+1D56B + NamedCharacterReferenceSecondCodepoint second : 8; +}; +static_assert(sizeof(NamedCharacterReferenceCodepoints) == 4); + +u16 named_character_reference_child_index(u16 node_index); +bool named_character_reference_is_end_of_word(u16 node_index); +Optional named_character_reference_codepoints_from_unique_index(u16 unique_index); +Optional named_character_reference_find_sibling_and_update_unique_index(u16 first_child_index, u8 character, u16& unique_index); + +} // namespace Web::HTML + +)~~~"); + + TRY(file.write_until_depleted(generator.as_string_view().bytes())); + return {}; +} + +class Node final : public RefCounted { +private: + struct NonnullRefPtrNodeTraits { + static unsigned hash(NonnullRefPtr const& node) + { + u32 hash = 0; + for (int i = 0; i < 128; i++) { + hash ^= ptr_hash(node.ptr()->m_children[i]); + } + hash ^= int_hash(static_cast(node.ptr()->m_is_terminal)); + return hash; + } + static bool equals(NonnullRefPtr const& a, NonnullRefPtr const& b) + { + if (a.ptr()->m_is_terminal != b.ptr()->m_is_terminal) + return false; + for (int i = 0; i < 128; i++) { + if (a.ptr()->m_children[i] != b.ptr()->m_children[i]) + return false; + } + return true; + } + }; + +public: + static NonnullRefPtr create() + { + return adopt_ref(*new (nothrow) Node()); + } + + using NodeTableType = HashTable, NonnullRefPtrNodeTraits, false>; + + void calc_numbers() + { + m_number = static_cast(m_is_terminal); + for (int i = 0; i < 128; i++) { + if (m_children[i] == nullptr) + continue; + m_children[i]->calc_numbers(); + m_number += m_children[i]->m_number; + } + } + + u8 num_direct_children() + { + u8 num = 0; + for (int i = 0; i < 128; i++) { + if (m_children[i] != nullptr) + num += 1; + } + return num; + } + + Node* m_children[128]; + bool m_is_terminal; + u16 m_number; + +private: + Node() = default; +}; + +struct UncheckedNode { + RefPtr parent; + char character; + RefPtr child; +}; + +class DafsaBuilder { + AK_MAKE_NONCOPYABLE(DafsaBuilder); + +public: + using MappingType = HashMap; + + DafsaBuilder() + : m_root(Node::create()) + { + } + + void insert(StringView str) + { + // Must be inserted in sorted order + VERIFY(str > m_previous_word); + + size_t common_prefix_len = 0; + for (size_t i = 0; i < min(str.length(), m_previous_word.length()); i++) { + if (str[i] != m_previous_word[i]) + break; + common_prefix_len++; + } + + minimize(common_prefix_len); + + RefPtr node; + if (m_unchecked_nodes.size() == 0) + node = m_root; + else + node = m_unchecked_nodes.last().child; + + auto remaining = str.substring_view(common_prefix_len); + for (char const c : remaining) { + VERIFY(node.ptr()->m_children[static_cast(c)] == nullptr); + + auto child = Node::create(); + node.ptr()->m_children[static_cast(c)] = child; + m_unchecked_nodes.append(UncheckedNode { node, c, child }); + node = child; + } + node.ptr()->m_is_terminal = true; + + VERIFY(str.copy_characters_to_buffer(m_previous_word_buf, sizeof(m_previous_word_buf))); + m_previous_word = StringView(m_previous_word_buf, str.length()); + } + + void minimize(size_t down_to) + { + if (m_unchecked_nodes.size() == 0) + return; + while (m_unchecked_nodes.size() > down_to) { + auto unchecked_node = m_unchecked_nodes.take_last(); + auto child = unchecked_node.child.release_nonnull(); + auto it = m_minimized_nodes.find(child); + if (it != m_minimized_nodes.end()) { + unchecked_node.parent.ptr()->m_children[static_cast(unchecked_node.character)] = *it; + } else { + m_minimized_nodes.set(child); + } + } + } + + void calc_numbers() + { + m_root.ptr()->calc_numbers(); + } + + Optional get_unique_index(StringView str) + { + size_t index = 0; + Node* node = m_root.ptr(); + + for (char const c : str) { + if (node->m_children[static_cast(c)] == nullptr) + return {}; + for (int sibling_c = 0; sibling_c < 128; sibling_c++) { + if (node->m_children[sibling_c] == nullptr) + continue; + if (sibling_c < c) { + index += node->m_children[sibling_c]->m_number; + } + } + node = node->m_children[static_cast(c)]; + if (node->m_is_terminal) + index += 1; + } + + return index; + } + + Node* root() + { + return m_root.ptr(); + } + +private: + NonnullRefPtr m_root; + Node::NodeTableType m_minimized_nodes; + Vector m_unchecked_nodes; + char m_previous_word_buf[64]; + StringView m_previous_word = ""sv; +}; + +static u16 write_children(Node* node, SourceGenerator& generator, Vector& queue, HashMap& child_indexes, u16 first_available_index) +{ + auto current_available_index = first_available_index; + auto num_children = node->num_direct_children(); + u16 child_i = 0; + for (u8 c = 0; c < 128; c++) { + if (node->m_children[c] == nullptr) + continue; + auto* child = node->m_children[c]; + auto is_last_child = child_i == num_children - 1; + + if (!child_indexes.contains(child)) { + auto child_num_children = child->num_direct_children(); + if (child_num_children > 0) { + child_indexes.set(child, current_available_index); + current_available_index += child_num_children; + } + queue.append(child); + } + + auto member_generator = generator.fork(); + member_generator.set("char", StringView(&c, 1)); + member_generator.set("number", MUST(String::formatted("{}", child->m_number))); + member_generator.set("end_of_word", MUST(String::formatted("{}", child->m_is_terminal))); + member_generator.set("end_of_list", MUST(String::formatted("{}", is_last_child))); + auto child_index = child_indexes.get(child).value_or(0); + member_generator.set("child_index", MUST(String::formatted("{}", child_index))); + member_generator.append(R"~~~( { '@char@', @number@, @end_of_word@, @end_of_list@, @child_index@ }, +)~~~"); + + child_i++; + } + return current_available_index; +} + +ErrorOr generate_implementation_file(JsonObject& named_character_reference_data, Core::File& file) +{ + StringBuilder builder; + SourceGenerator generator { builder }; + DafsaBuilder dafsa_builder; + + named_character_reference_data.for_each_member([&](auto& key, auto&) { + dafsa_builder.insert(key.substring_view(1)); + }); + dafsa_builder.minimize(0); + dafsa_builder.calc_numbers(); + + // As a sanity check, confirm that the minimal perfect hashing doesn't + // have any collisions + { + HashTable index_set; + + named_character_reference_data.for_each_member([&](auto& key, auto&) { + auto index = dafsa_builder.get_unique_index(key.substring_view(1)).value(); + VERIFY(!index_set.contains(index)); + index_set.set(index); + }); + VERIFY(named_character_reference_data.size() == index_set.size()); + } + + auto index_to_codepoints = MUST(FixedArray::create(named_character_reference_data.size())); + + named_character_reference_data.for_each_member([&](auto& key, auto& value) { + auto codepoints = value.as_object().get_array("codepoints"sv).value(); + auto unique_index = dafsa_builder.get_unique_index(key.substring_view(1)).value(); + auto array_index = unique_index - 1; + u32 second_codepoint = 0; + if (codepoints.size() == 2) { + second_codepoint = codepoints[1].template as_integer(); + } + index_to_codepoints[array_index] = Codepoints { codepoints[0].template as_integer(), second_codepoint }; + }); + + generator.append(R"~~~( +#include +#include + +namespace Web::HTML { + +static NamedCharacterReferenceCodepoints g_named_character_reference_codepoints_lookup[] = { +)~~~"); + + for (auto codepoints : index_to_codepoints) { + auto member_generator = generator.fork(); + member_generator.set("first_codepoint", MUST(String::formatted("0x{:X}", codepoints.first))); + member_generator.set("second_codepoint_name", get_second_codepoint_enum_name(codepoints.second)); + member_generator.append(R"~~~( {@first_codepoint@, NamedCharacterReferenceSecondCodepoint::@second_codepoint_name@}, +)~~~"); + } + + generator.append(R"~~~(}; + +struct DafsaNode { + // The actual alphabet of characters used in the list of named character references only + // includes 61 unique characters ('1'...'8', ';', 'a'...'z', 'A'...'Z'), but we have + // bits to spare and encoding this as a `u8` allows us to avoid the need for converting + // between an `enum(u6)` containing only the alphabet and the actual `u8` character value. + u8 character; + // Nodes are numbered with "an integer which gives the number of words that + // would be accepted by the automaton starting from that state." This numbering + // allows calculating "a one-to-one correspondence between the integers 1 to L + // (L is the number of words accepted by the automaton) and the words themselves." + // + // Essentially, this allows us to have a minimal perfect hashing scheme such that + // it's possible to store & lookup the codepoint transformations of each named character + // reference using a separate array. + // + // Empirically, the largest number in our DAFSA is 168, so all number values fit in a u8. + u8 number; + // If true, this node is the end of a valid named character reference. + // Note: This does not necessarily mean that this node does not have child nodes. + bool end_of_word : 1; + // If true, this node is the end of a sibling list. + // If false, then (index + 1) will contain the next sibling. + bool end_of_list : 1; + // Index of the first child of this node. + // There are 3872 nodes in our DAFSA, so all indexes could fit in a u12. + u16 child_index : 14; +}; +static_assert(sizeof(DafsaNode) == 4); + +static DafsaNode g_named_character_reference_dafsa[] = { + { 0, 0, false, true, 1 }, +)~~~"); + + Vector queue; + HashMap child_indexes; + + u16 first_available_index = dafsa_builder.root()->num_direct_children() + 1; + + Node* node = dafsa_builder.root(); + while (true) { + first_available_index = write_children(node, generator, queue, child_indexes, first_available_index); + + if (queue.size() == 0) + break; + node = queue.take_first(); + } + + generator.append(R"~~~(}; + +u16 named_character_reference_child_index(u16 node_index) { + return g_named_character_reference_dafsa[node_index].child_index; +} + +bool named_character_reference_is_end_of_word(u16 node_index) { + return g_named_character_reference_dafsa[node_index].end_of_word; +} + +// Note: The unique index is 1-based. +Optional named_character_reference_codepoints_from_unique_index(u16 unique_index) { + if (unique_index == 0) return {}; + return g_named_character_reference_codepoints_lookup[unique_index - 1]; +} + +// Search `first_child_index` and siblings of `first_child_index` for a node with the value `character`. +// If found, returns the index of the node within the `dafsa` array. Otherwise, returns `null`. +// Updates `unique_index` as the array is traversed +Optional named_character_reference_find_sibling_and_update_unique_index(u16 first_child_index, u8 character, u16& unique_index) { + auto index = first_child_index; + while (true) { + if (g_named_character_reference_dafsa[index].character < character) { + unique_index += g_named_character_reference_dafsa[index].number; + } + if (g_named_character_reference_dafsa[index].character == character) { + if (g_named_character_reference_dafsa[index].end_of_word) unique_index++; + return index; + } + if (g_named_character_reference_dafsa[index].end_of_list) return {}; + index += 1; + } + VERIFY_NOT_REACHED(); +} + +} // namespace Web::HTML +)~~~"); + + TRY(file.write_until_depleted(generator.as_string_view().bytes())); + return {}; +} diff --git a/Meta/gn/secondary/Meta/Lagom/Tools/CodeGenerators/LibWeb/BUILD.gn b/Meta/gn/secondary/Meta/Lagom/Tools/CodeGenerators/LibWeb/BUILD.gn index db7eaa005fea..aafe289b14bb 100644 --- a/Meta/gn/secondary/Meta/Lagom/Tools/CodeGenerators/LibWeb/BUILD.gn +++ b/Meta/gn/secondary/Meta/Lagom/Tools/CodeGenerators/LibWeb/BUILD.gn @@ -76,3 +76,11 @@ lagom_tool("GenerateWindowOrWorkerInterfaces") { "//Userland/Libraries/LibMain", ] } + +lagom_tool("GenerateNamedCharacterReferences") { + sources = [ "GenerateNamedCharacterReferences.cpp" ] + deps = [ + ":headers", + "//Userland/Libraries/LibMain", + ] +} diff --git a/Meta/gn/secondary/Userland/Libraries/LibWeb/BUILD.gn b/Meta/gn/secondary/Userland/Libraries/LibWeb/BUILD.gn index b3a5f2b07098..162cad720b41 100644 --- a/Meta/gn/secondary/Userland/Libraries/LibWeb/BUILD.gn +++ b/Meta/gn/secondary/Userland/Libraries/LibWeb/BUILD.gn @@ -248,6 +248,23 @@ embed_as_string("generate_quirks_mode_stylesheet_source") { namespace = "Web::CSS" } +compiled_action("generate_named_character_references") { + tool = "//Meta/Lagom/Tools/CodeGenerators/LibWeb:GenerateNamedCharacterReferences" + inputs = [ "HTML/Parser/Entities.json" ] + outputs = [ + "$target_gen_dir/HTML/Parser/NamedCharacterReferences.h", + "$target_gen_dir/HTML/Parser/NamedCharacterReferences.cpp", + ] + args = [ + "-h", + rebase_path(outputs[0], root_build_dir), + "-c", + rebase_path(outputs[1], root_build_dir), + "-j", + rebase_path(inputs[0], root_build_dir), + ] +} + source_set("all_generated") { generated_deps = [ ":WebWorkerClientEndpoint", diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/ambiguous-ampersand.txt b/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/ambiguous-ampersand.txt index d0aa1e6819ae..e8adec8432a1 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/ambiguous-ampersand.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/html/syntax/parsing/ambiguous-ampersand.txt @@ -2,8 +2,7 @@ Harness status: OK Found 3 tests -2 Pass -1 Fail +3 Pass Pass Check number of divs Pass Check div structure: network -Fail Check div structure: document.write \ No newline at end of file +Pass Check div structure: document.write \ No newline at end of file diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/webappapis/dynamic-markup-insertion/document-write/041.txt b/Tests/LibWeb/Text/expected/wpt-import/html/webappapis/dynamic-markup-insertion/document-write/041.txt index d8a57420f6da..a595b765eef4 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/html/webappapis/dynamic-markup-insertion/document-write/041.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/html/webappapis/dynamic-markup-insertion/document-write/041.txt @@ -2,5 +2,5 @@ Harness status: OK Found 1 tests -1 Fail -Fail document.write entity \ No newline at end of file +1 Pass +Pass document.write entity \ No newline at end of file