From 5f99410d9e8cc5a2fdc2c2a07d72813811609082 Mon Sep 17 00:00:00 2001 From: Shawn Smith Date: Wed, 18 Dec 2013 10:20:25 -0800 Subject: [PATCH 01/22] html: add tests for UnescapeString edge cases R=golang-dev, gobot, bradfitz CC=golang-dev https://golang.org/cl/40810044 Cherry-picked-from: https://github.com/golang/go/commit/a025e1caac516c967486f4644fbe4c647100b632 --- html/escape_test.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/html/escape_test.go b/html/escape_test.go index b405d4b4a..2d7ad8ac2 100644 --- a/html/escape_test.go +++ b/html/escape_test.go @@ -64,6 +64,24 @@ var unescapeTests = []unescapeTest{ "Footnote‡", "Footnote‡", }, + // Handle single ampersand. + { + "copySingleAmpersand", + "&", + "&", + }, + // Handle ampersand followed by non-entity. + { + "copyAmpersandNonEntity", + "text &test", + "text &test", + }, + // Handle "&#". + { + "copyAmpersandHash", + "text &#", + "text &#", + }, } func TestUnescape(t *testing.T) { From 1a4b4d44747f30a35625a00153a17b1ddb46c33d Mon Sep 17 00:00:00 2001 From: Didier Spezia Date: Fri, 8 May 2015 16:38:08 +0000 Subject: [PATCH 02/22] html: simplify and optimize escape/unescape The html package uses some specific code to escape special characters. Actually, the strings.Replacer can be used instead, and is much more efficient. The converse operation is more complex but can still be slightly optimized. Credits to Ken Bloom (kabloom@google.com), who first submitted a similar patch at https://codereview.appspot.com/141930043 Added benchmarks and slightly optimized UnescapeString. benchmark old ns/op new ns/op delta BenchmarkEscape-4 118713 19825 -83.30% BenchmarkEscapeNone-4 87653 3784 -95.68% BenchmarkUnescape-4 24888 23417 -5.91% BenchmarkUnescapeNone-4 14423 157 -98.91% benchmark old allocs new allocs delta BenchmarkEscape-4 9 2 -77.78% BenchmarkEscapeNone-4 0 0 +0.00% BenchmarkUnescape-4 2 2 +0.00% BenchmarkUnescapeNone-4 0 0 +0.00% benchmark old bytes new bytes delta BenchmarkEscape-4 24800 12288 -50.45% BenchmarkEscapeNone-4 0 0 +0.00% BenchmarkUnescape-4 10240 10240 +0.00% BenchmarkUnescapeNone-4 0 0 +0.00% Fixes #8697 Change-Id: I208261ed7cbe9b3dee6317851f8c0cf15528bce4 Reviewed-on: https://go-review.googlesource.com/9808 Run-TryBot: Brad Fitzpatrick Reviewed-by: Brad Fitzpatrick TryBot-Result: Gobot Gobot Cherry-picked-from: https://github.com/golang/go/commit/2d9a50b97f762637627436b6ed153242e43874fb --- html/escape.go | 56 +++++++++++---------------------------------- html/escape_test.go | 40 +++++++++++++++++++++++++++++++- 2 files changed, 52 insertions(+), 44 deletions(-) diff --git a/html/escape.go b/html/escape.go index 04c6bec21..a346ffa3e 100644 --- a/html/escape.go +++ b/html/escape.go @@ -274,40 +274,17 @@ func escapeCommentString(s string) string { return buf.String() } -const escapedChars = "&'<>\"\r" +var htmlEscaper = strings.NewReplacer( + `&`, "&", + `'`, "'", // "'" is shorter than "'" and apos was not in HTML until HTML5. + `<`, "<", + `>`, ">", + `"`, """, // """ is shorter than """. + "\r", " ", +) func escape(w writer, s string) error { - i := strings.IndexAny(s, escapedChars) - for i != -1 { - if _, err := w.WriteString(s[:i]); err != nil { - return err - } - var esc string - switch s[i] { - case '&': - esc = "&" - case '\'': - // "'" is shorter than "'" and apos was not in HTML until HTML5. - esc = "'" - case '<': - esc = "<" - case '>': - esc = ">" - case '"': - // """ is shorter than """. - esc = """ - case '\r': - esc = " " - default: - panic("unrecognized escape character") - } - s = s[i+1:] - if _, err := w.WriteString(esc); err != nil { - return err - } - i = strings.IndexAny(s, escapedChars) - } - _, err := w.WriteString(s) + _, err := htmlEscaper.WriteString(w, s) return err } @@ -316,12 +293,7 @@ func escape(w writer, s string) error { // UnescapeString(EscapeString(s)) == s always holds, but the converse isn't // always true. func EscapeString(s string) string { - if strings.IndexAny(s, escapedChars) == -1 { - return s - } - var buf bytes.Buffer - escape(&buf, s) - return buf.String() + return htmlEscaper.Replace(s) } // UnescapeString unescapes entities like "<" to become "<". It unescapes a @@ -330,10 +302,8 @@ func EscapeString(s string) string { // UnescapeString(EscapeString(s)) == s always holds, but the converse isn't // always true. func UnescapeString(s string) string { - for _, c := range s { - if c == '&' { - return string(unescape([]byte(s), false)) - } + if !strings.Contains(s, "&") { + return s } - return s + return string(unescape([]byte(s), false)) } diff --git a/html/escape_test.go b/html/escape_test.go index 2d7ad8ac2..3702626a3 100644 --- a/html/escape_test.go +++ b/html/escape_test.go @@ -4,7 +4,10 @@ package html -import "testing" +import ( + "strings" + "testing" +) type unescapeTest struct { // A short description of the test case. @@ -113,3 +116,38 @@ func TestUnescapeEscape(t *testing.T) { } } } + +var ( + benchEscapeData = strings.Repeat("AAAAA < BBBBB > CCCCC & DDDDD ' EEEEE \" ", 100) + benchEscapeNone = strings.Repeat("AAAAA x BBBBB x CCCCC x DDDDD x EEEEE x ", 100) +) + +func BenchmarkEscape(b *testing.B) { + n := 0 + for i := 0; i < b.N; i++ { + n += len(EscapeString(benchEscapeData)) + } +} + +func BenchmarkEscapeNone(b *testing.B) { + n := 0 + for i := 0; i < b.N; i++ { + n += len(EscapeString(benchEscapeNone)) + } +} + +func BenchmarkUnescape(b *testing.B) { + s := EscapeString(benchEscapeData) + n := 0 + for i := 0; i < b.N; i++ { + n += len(UnescapeString(s)) + } +} + +func BenchmarkUnescapeNone(b *testing.B) { + s := EscapeString(benchEscapeNone) + n := 0 + for i := 0; i < b.N; i++ { + n += len(UnescapeString(s)) + } +} From 8229daf654e3e55314ab5b5e0f13eb4d89958695 Mon Sep 17 00:00:00 2001 From: Carlos C Date: Wed, 17 Jun 2015 23:51:54 +0200 Subject: [PATCH 03/22] html: add examples to the functions Change-Id: I129d70304ae4e4694d9217826b18b341e3834d3c Reviewed-on: https://go-review.googlesource.com/11201 Reviewed-by: Andrew Gerrand Cherry-picked-from: https://github.com/golang/go/commit/a3c0730435a36fb5b22df35569ba6ad491a52886 --- html/escape_example_test.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 html/escape_example_test.go diff --git a/html/escape_example_test.go b/html/escape_example_test.go new file mode 100644 index 000000000..0e28cac1b --- /dev/null +++ b/html/escape_example_test.go @@ -0,0 +1,22 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html_test + +import ( + "fmt" + "html" +) + +func ExampleEscapeString() { + const s = `"Fran & Freddie's Diner" ` + fmt.Println(html.EscapeString(s)) + // Output: "Fran & Freddie's Diner" <tasty@example.com> +} + +func ExampleUnescapeString() { + const s = `"Fran & Freddie's Diner" <tasty@example.com>` + fmt.Println(html.UnescapeString(s)) + // Output: "Fran & Freddie's Diner" +} From 532ffb3dde5abc7b6af8ec66befc73ff5daa0127 Mon Sep 17 00:00:00 2001 From: Ingo Oeser Date: Sat, 9 May 2015 17:55:05 +0200 Subject: [PATCH 04/22] html: speed up UnescapeString Add benchmarks for for sparsely escaped and densely escaped strings. Then speed up the sparse unescaping part heavily by using IndexByte and copy to skip the parts containing no escaping very fast. Unescaping densely escaped strings slower because of the new function call overhead. But sparsely encoded strings are seen more often in the utf8 enabled web. We win part of the speed back by looking up entityName differently. benchmark old ns/op new ns/op delta BenchmarkEscape 31680 31396 -0.90% BenchmarkEscapeNone 6507 6872 +5.61% BenchmarkUnescape 36481 48298 +32.39% BenchmarkUnescapeNone 332 325 -2.11% BenchmarkUnescapeSparse 8836 3221 -63.55% BenchmarkUnescapeDense 30639 32224 +5.17% Change-Id: If606cb01897a40eefe35ba98f2ff23bb25251606 Reviewed-on: https://go-review.googlesource.com/10172 Reviewed-by: Brad Fitzpatrick Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot Cherry-picked-from: https://github.com/golang/go/commit/5b920281558aa24a4cd422a7ecf9d651355d9936 --- html/escape.go | 71 +++++++++++++++++++++++++++++++-------------- html/escape_test.go | 20 +++++++++++-- 2 files changed, 68 insertions(+), 23 deletions(-) diff --git a/html/escape.go b/html/escape.go index a346ffa3e..b8fdee84b 100644 --- a/html/escape.go +++ b/html/escape.go @@ -135,14 +135,14 @@ func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) { break } - entityName := string(s[1:i]) - if entityName == "" { + entityName := s[1:i] + if len(entityName) == 0 { // No-op. } else if attribute && entityName[len(entityName)-1] != ';' && len(s) > i && s[i] == '=' { // No-op. - } else if x := entity[entityName]; x != 0 { + } else if x := entity[string(entityName)]; x != 0 { return dst + utf8.EncodeRune(b[dst:], x), src + i - } else if x := entity2[entityName]; x[0] != 0 { + } else if x := entity2[string(entityName)]; x[0] != 0 { dst1 := dst + utf8.EncodeRune(b[dst:], x[0]) return dst1 + utf8.EncodeRune(b[dst1:], x[1]), src + i } else if !attribute { @@ -151,7 +151,7 @@ func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) { maxLen = longestEntityWithoutSemicolon } for j := maxLen; j > 1; j-- { - if x := entity[entityName[:j]]; x != 0 { + if x := entity[string(entityName[:j])]; x != 0 { return dst + utf8.EncodeRune(b[dst:], x), src + j + 1 } } @@ -165,22 +165,30 @@ func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) { // unescape unescapes b's entities in-place, so that "a<b" becomes "a 0 { + if b[src] == '&' { + i = 0 + } else { + i = bytes.IndexByte(b[src:], '&') + } + if i < 0 { + dst += copy(b[dst:], b[src:]) + break + } + + if i > 0 { + copy(b[dst:], b[src:src+i]) } + dst, src = unescapeEntity(b, dst+i, src+i, attribute) } - return b + return b[:dst] } // lower lower-cases the A-Z bytes in b in-place, so that "aBc" becomes "abc". @@ -302,8 +310,29 @@ func EscapeString(s string) string { // UnescapeString(EscapeString(s)) == s always holds, but the converse isn't // always true. func UnescapeString(s string) string { - if !strings.Contains(s, "&") { + i := strings.IndexByte(s, '&') + + if i < 0 { return s } - return string(unescape([]byte(s), false)) + + b := []byte(s) + dst, src := unescapeEntity(b, i, i, false) + for len(s[src:]) > 0 { + if s[src] == '&' { + i = 0 + } else { + i = strings.IndexByte(s[src:], '&') + } + if i < 0 { + dst += copy(b[dst:], s[src:]) + break + } + + if i > 0 { + copy(b[dst:], s[src:src+i]) + } + dst, src = unescapeEntity(b, dst+i, src+i, false) + } + return string(b[:dst]) } diff --git a/html/escape_test.go b/html/escape_test.go index 3702626a3..8b51a5540 100644 --- a/html/escape_test.go +++ b/html/escape_test.go @@ -118,8 +118,10 @@ func TestUnescapeEscape(t *testing.T) { } var ( - benchEscapeData = strings.Repeat("AAAAA < BBBBB > CCCCC & DDDDD ' EEEEE \" ", 100) - benchEscapeNone = strings.Repeat("AAAAA x BBBBB x CCCCC x DDDDD x EEEEE x ", 100) + benchEscapeData = strings.Repeat("AAAAA < BBBBB > CCCCC & DDDDD ' EEEEE \" ", 100) + benchEscapeNone = strings.Repeat("AAAAA x BBBBB x CCCCC x DDDDD x EEEEE x ", 100) + benchUnescapeSparse = strings.Repeat(strings.Repeat("AAAAA x BBBBB x CCCCC x DDDDD x EEEEE x ", 10)+"&", 10) + benchUnescapeDense = strings.Repeat("&< & <", 100) ) func BenchmarkEscape(b *testing.B) { @@ -151,3 +153,17 @@ func BenchmarkUnescapeNone(b *testing.B) { n += len(UnescapeString(s)) } } + +func BenchmarkUnescapeSparse(b *testing.B) { + n := 0 + for i := 0; i < b.N; i++ { + n += len(UnescapeString(benchUnescapeSparse)) + } +} + +func BenchmarkUnescapeDense(b *testing.B) { + n := 0 + for i := 0; i < b.N; i++ { + n += len(UnescapeString(benchUnescapeDense)) + } +} From 21820285e3c8b49a85a9063a441ba67433a7e7d0 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Sun, 10 Apr 2016 14:51:07 +0000 Subject: [PATCH 05/22] html: fix typo in UnescapeString string docs Fixes #15221 Change-Id: I9e927a2f604213338b4572f1a32d0247c58bdc60 Reviewed-on: https://go-review.googlesource.com/21798 Reviewed-by: Ian Lance Taylor Cherry-picked-from: https://github.com/golang/go/commit/a44c4256ae958b0aacecd5fd0b0e7f1156f8bcf4 --- html/escape.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/escape.go b/html/escape.go index b8fdee84b..adc42382c 100644 --- a/html/escape.go +++ b/html/escape.go @@ -306,7 +306,7 @@ func EscapeString(s string) string { // UnescapeString unescapes entities like "<" to become "<". It unescapes a // larger range of entities than EscapeString escapes. For example, "á" -// unescapes to "á", as does "á" and "&xE1;". +// unescapes to "á", as does "á" and "á". // UnescapeString(EscapeString(s)) == s always holds, but the converse isn't // always true. func UnescapeString(s string) string { From a56b454404c3e132aba0c1573760b3496b854cca Mon Sep 17 00:00:00 2001 From: Seiji Takahashi Date: Thu, 3 Aug 2017 22:08:55 +0900 Subject: [PATCH 06/22] html: updated entity spec link Fixes #21194 Change-Id: Iac5187335df67f90f0f47c7ef6574de147c2ac9b Reviewed-on: https://go-review.googlesource.com/52970 Reviewed-by: Avelino Reviewed-by: Brad Fitzpatrick Cherry-picked-from: https://github.com/golang/go/commit/6dae588a06016a67aad62e732087cb2e32cda139 --- html/entity.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/entity.go b/html/entity.go index b628880a0..d12379433 100644 --- a/html/entity.go +++ b/html/entity.go @@ -8,7 +8,7 @@ package html const longestEntityWithoutSemicolon = 6 // entity is a map from HTML entity names to their values. The semicolon matters: -// https://html.spec.whatwg.org/multipage/syntax.html#named-character-references +// https://html.spec.whatwg.org/multipage/named-characters.html // lists both "amp" and "amp;" as two separate entries. // // Note that the HTML5 list is larger than the HTML4 list at From d2a0193e8cd3ac2aeef523dc84a5044ccdca9134 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Tue, 31 Jul 2018 21:37:35 +0000 Subject: [PATCH 07/22] html: lazily populate Unescape tables Saves ~105KB of heap for callers who don't use html.UnescapeString. (EscapeString is much more common). Also saves 70KB of binary size, because now the linker can do dead code elimination. (because #2559 is still open and global maps always generate init code) Fixes #26727 Updates #6853 Change-Id: I18fe9a273097e2c7e0cb7f88205cae1bb60fa89b Reviewed-on: https://go-review.googlesource.com/127075 Run-TryBot: Brad Fitzpatrick Reviewed-by: Emmanuel Odeke Reviewed-by: Ian Lance Taylor TryBot-Result: Gobot Gobot Cherry-picked-from: https://github.com/golang/go/commit/740e589bd00e330ac38e5aa146961f0d49ff1871 --- html/entity.go | 4482 ++++++++++++++++++++++--------------------- html/entity_test.go | 8 + html/escape.go | 2 + 3 files changed, 2257 insertions(+), 2235 deletions(-) diff --git a/html/entity.go b/html/entity.go index d12379433..f0f9a6a97 100644 --- a/html/entity.go +++ b/html/entity.go @@ -4,6 +4,8 @@ package html +import "sync" + // All entities that do not end with ';' are 6 or fewer bytes long. const longestEntityWithoutSemicolon = 6 @@ -13,2241 +15,2251 @@ const longestEntityWithoutSemicolon = 6 // // Note that the HTML5 list is larger than the HTML4 list at // http://www.w3.org/TR/html4/sgml/entities.html -var entity = map[string]rune{ - "AElig;": '\U000000C6', - "AMP;": '\U00000026', - "Aacute;": '\U000000C1', - "Abreve;": '\U00000102', - "Acirc;": '\U000000C2', - "Acy;": '\U00000410', - "Afr;": '\U0001D504', - "Agrave;": '\U000000C0', - "Alpha;": '\U00000391', - "Amacr;": '\U00000100', - "And;": '\U00002A53', - "Aogon;": '\U00000104', - "Aopf;": '\U0001D538', - "ApplyFunction;": '\U00002061', - "Aring;": '\U000000C5', - "Ascr;": '\U0001D49C', - "Assign;": '\U00002254', - "Atilde;": '\U000000C3', - "Auml;": '\U000000C4', - "Backslash;": '\U00002216', - "Barv;": '\U00002AE7', - "Barwed;": '\U00002306', - "Bcy;": '\U00000411', - "Because;": '\U00002235', - "Bernoullis;": '\U0000212C', - "Beta;": '\U00000392', - "Bfr;": '\U0001D505', - "Bopf;": '\U0001D539', - "Breve;": '\U000002D8', - "Bscr;": '\U0000212C', - "Bumpeq;": '\U0000224E', - "CHcy;": '\U00000427', - "COPY;": '\U000000A9', - "Cacute;": '\U00000106', - "Cap;": '\U000022D2', - "CapitalDifferentialD;": '\U00002145', - "Cayleys;": '\U0000212D', - "Ccaron;": '\U0000010C', - "Ccedil;": '\U000000C7', - "Ccirc;": '\U00000108', - "Cconint;": '\U00002230', - "Cdot;": '\U0000010A', - "Cedilla;": '\U000000B8', - "CenterDot;": '\U000000B7', - "Cfr;": '\U0000212D', - "Chi;": '\U000003A7', - "CircleDot;": '\U00002299', - "CircleMinus;": '\U00002296', - "CirclePlus;": '\U00002295', - "CircleTimes;": '\U00002297', - "ClockwiseContourIntegral;": '\U00002232', - "CloseCurlyDoubleQuote;": '\U0000201D', - "CloseCurlyQuote;": '\U00002019', - "Colon;": '\U00002237', - "Colone;": '\U00002A74', - "Congruent;": '\U00002261', - "Conint;": '\U0000222F', - "ContourIntegral;": '\U0000222E', - "Copf;": '\U00002102', - "Coproduct;": '\U00002210', - "CounterClockwiseContourIntegral;": '\U00002233', - "Cross;": '\U00002A2F', - "Cscr;": '\U0001D49E', - "Cup;": '\U000022D3', - "CupCap;": '\U0000224D', - "DD;": '\U00002145', - "DDotrahd;": '\U00002911', - "DJcy;": '\U00000402', - "DScy;": '\U00000405', - "DZcy;": '\U0000040F', - "Dagger;": '\U00002021', - "Darr;": '\U000021A1', - "Dashv;": '\U00002AE4', - "Dcaron;": '\U0000010E', - "Dcy;": '\U00000414', - "Del;": '\U00002207', - "Delta;": '\U00000394', - "Dfr;": '\U0001D507', - "DiacriticalAcute;": '\U000000B4', - "DiacriticalDot;": '\U000002D9', - "DiacriticalDoubleAcute;": '\U000002DD', - "DiacriticalGrave;": '\U00000060', - "DiacriticalTilde;": '\U000002DC', - "Diamond;": '\U000022C4', - "DifferentialD;": '\U00002146', - "Dopf;": '\U0001D53B', - "Dot;": '\U000000A8', - "DotDot;": '\U000020DC', - "DotEqual;": '\U00002250', - "DoubleContourIntegral;": '\U0000222F', - "DoubleDot;": '\U000000A8', - "DoubleDownArrow;": '\U000021D3', - "DoubleLeftArrow;": '\U000021D0', - "DoubleLeftRightArrow;": '\U000021D4', - "DoubleLeftTee;": '\U00002AE4', - "DoubleLongLeftArrow;": '\U000027F8', - "DoubleLongLeftRightArrow;": '\U000027FA', - "DoubleLongRightArrow;": '\U000027F9', - "DoubleRightArrow;": '\U000021D2', - "DoubleRightTee;": '\U000022A8', - "DoubleUpArrow;": '\U000021D1', - "DoubleUpDownArrow;": '\U000021D5', - "DoubleVerticalBar;": '\U00002225', - "DownArrow;": '\U00002193', - "DownArrowBar;": '\U00002913', - "DownArrowUpArrow;": '\U000021F5', - "DownBreve;": '\U00000311', - "DownLeftRightVector;": '\U00002950', - "DownLeftTeeVector;": '\U0000295E', - "DownLeftVector;": '\U000021BD', - "DownLeftVectorBar;": '\U00002956', - "DownRightTeeVector;": '\U0000295F', - "DownRightVector;": '\U000021C1', - "DownRightVectorBar;": '\U00002957', - "DownTee;": '\U000022A4', - "DownTeeArrow;": '\U000021A7', - "Downarrow;": '\U000021D3', - "Dscr;": '\U0001D49F', - "Dstrok;": '\U00000110', - "ENG;": '\U0000014A', - "ETH;": '\U000000D0', - "Eacute;": '\U000000C9', - "Ecaron;": '\U0000011A', - "Ecirc;": '\U000000CA', - "Ecy;": '\U0000042D', - "Edot;": '\U00000116', - "Efr;": '\U0001D508', - "Egrave;": '\U000000C8', - "Element;": '\U00002208', - "Emacr;": '\U00000112', - "EmptySmallSquare;": '\U000025FB', - "EmptyVerySmallSquare;": '\U000025AB', - "Eogon;": '\U00000118', - "Eopf;": '\U0001D53C', - "Epsilon;": '\U00000395', - "Equal;": '\U00002A75', - "EqualTilde;": '\U00002242', - "Equilibrium;": '\U000021CC', - "Escr;": '\U00002130', - "Esim;": '\U00002A73', - "Eta;": '\U00000397', - "Euml;": '\U000000CB', - "Exists;": '\U00002203', - "ExponentialE;": '\U00002147', - "Fcy;": '\U00000424', - "Ffr;": '\U0001D509', - "FilledSmallSquare;": '\U000025FC', - "FilledVerySmallSquare;": '\U000025AA', - "Fopf;": '\U0001D53D', - "ForAll;": '\U00002200', - "Fouriertrf;": '\U00002131', - "Fscr;": '\U00002131', - "GJcy;": '\U00000403', - "GT;": '\U0000003E', - "Gamma;": '\U00000393', - "Gammad;": '\U000003DC', - "Gbreve;": '\U0000011E', - "Gcedil;": '\U00000122', - "Gcirc;": '\U0000011C', - "Gcy;": '\U00000413', - "Gdot;": '\U00000120', - "Gfr;": '\U0001D50A', - "Gg;": '\U000022D9', - "Gopf;": '\U0001D53E', - "GreaterEqual;": '\U00002265', - "GreaterEqualLess;": '\U000022DB', - "GreaterFullEqual;": '\U00002267', - "GreaterGreater;": '\U00002AA2', - "GreaterLess;": '\U00002277', - "GreaterSlantEqual;": '\U00002A7E', - "GreaterTilde;": '\U00002273', - "Gscr;": '\U0001D4A2', - "Gt;": '\U0000226B', - "HARDcy;": '\U0000042A', - "Hacek;": '\U000002C7', - "Hat;": '\U0000005E', - "Hcirc;": '\U00000124', - "Hfr;": '\U0000210C', - "HilbertSpace;": '\U0000210B', - "Hopf;": '\U0000210D', - "HorizontalLine;": '\U00002500', - "Hscr;": '\U0000210B', - "Hstrok;": '\U00000126', - "HumpDownHump;": '\U0000224E', - "HumpEqual;": '\U0000224F', - "IEcy;": '\U00000415', - "IJlig;": '\U00000132', - "IOcy;": '\U00000401', - "Iacute;": '\U000000CD', - "Icirc;": '\U000000CE', - "Icy;": '\U00000418', - "Idot;": '\U00000130', - "Ifr;": '\U00002111', - "Igrave;": '\U000000CC', - "Im;": '\U00002111', - "Imacr;": '\U0000012A', - "ImaginaryI;": '\U00002148', - "Implies;": '\U000021D2', - "Int;": '\U0000222C', - "Integral;": '\U0000222B', - "Intersection;": '\U000022C2', - "InvisibleComma;": '\U00002063', - "InvisibleTimes;": '\U00002062', - "Iogon;": '\U0000012E', - "Iopf;": '\U0001D540', - "Iota;": '\U00000399', - "Iscr;": '\U00002110', - "Itilde;": '\U00000128', - "Iukcy;": '\U00000406', - "Iuml;": '\U000000CF', - "Jcirc;": '\U00000134', - "Jcy;": '\U00000419', - "Jfr;": '\U0001D50D', - "Jopf;": '\U0001D541', - "Jscr;": '\U0001D4A5', - "Jsercy;": '\U00000408', - "Jukcy;": '\U00000404', - "KHcy;": '\U00000425', - "KJcy;": '\U0000040C', - "Kappa;": '\U0000039A', - "Kcedil;": '\U00000136', - "Kcy;": '\U0000041A', - "Kfr;": '\U0001D50E', - "Kopf;": '\U0001D542', - "Kscr;": '\U0001D4A6', - "LJcy;": '\U00000409', - "LT;": '\U0000003C', - "Lacute;": '\U00000139', - "Lambda;": '\U0000039B', - "Lang;": '\U000027EA', - "Laplacetrf;": '\U00002112', - "Larr;": '\U0000219E', - "Lcaron;": '\U0000013D', - "Lcedil;": '\U0000013B', - "Lcy;": '\U0000041B', - "LeftAngleBracket;": '\U000027E8', - "LeftArrow;": '\U00002190', - "LeftArrowBar;": '\U000021E4', - "LeftArrowRightArrow;": '\U000021C6', - "LeftCeiling;": '\U00002308', - "LeftDoubleBracket;": '\U000027E6', - "LeftDownTeeVector;": '\U00002961', - "LeftDownVector;": '\U000021C3', - "LeftDownVectorBar;": '\U00002959', - "LeftFloor;": '\U0000230A', - "LeftRightArrow;": '\U00002194', - "LeftRightVector;": '\U0000294E', - "LeftTee;": '\U000022A3', - "LeftTeeArrow;": '\U000021A4', - "LeftTeeVector;": '\U0000295A', - "LeftTriangle;": '\U000022B2', - "LeftTriangleBar;": '\U000029CF', - "LeftTriangleEqual;": '\U000022B4', - "LeftUpDownVector;": '\U00002951', - "LeftUpTeeVector;": '\U00002960', - "LeftUpVector;": '\U000021BF', - "LeftUpVectorBar;": '\U00002958', - "LeftVector;": '\U000021BC', - "LeftVectorBar;": '\U00002952', - "Leftarrow;": '\U000021D0', - "Leftrightarrow;": '\U000021D4', - "LessEqualGreater;": '\U000022DA', - "LessFullEqual;": '\U00002266', - "LessGreater;": '\U00002276', - "LessLess;": '\U00002AA1', - "LessSlantEqual;": '\U00002A7D', - "LessTilde;": '\U00002272', - "Lfr;": '\U0001D50F', - "Ll;": '\U000022D8', - "Lleftarrow;": '\U000021DA', - "Lmidot;": '\U0000013F', - "LongLeftArrow;": '\U000027F5', - "LongLeftRightArrow;": '\U000027F7', - "LongRightArrow;": '\U000027F6', - "Longleftarrow;": '\U000027F8', - "Longleftrightarrow;": '\U000027FA', - "Longrightarrow;": '\U000027F9', - "Lopf;": '\U0001D543', - "LowerLeftArrow;": '\U00002199', - "LowerRightArrow;": '\U00002198', - "Lscr;": '\U00002112', - "Lsh;": '\U000021B0', - "Lstrok;": '\U00000141', - "Lt;": '\U0000226A', - "Map;": '\U00002905', - "Mcy;": '\U0000041C', - "MediumSpace;": '\U0000205F', - "Mellintrf;": '\U00002133', - "Mfr;": '\U0001D510', - "MinusPlus;": '\U00002213', - "Mopf;": '\U0001D544', - "Mscr;": '\U00002133', - "Mu;": '\U0000039C', - "NJcy;": '\U0000040A', - "Nacute;": '\U00000143', - "Ncaron;": '\U00000147', - "Ncedil;": '\U00000145', - "Ncy;": '\U0000041D', - "NegativeMediumSpace;": '\U0000200B', - "NegativeThickSpace;": '\U0000200B', - "NegativeThinSpace;": '\U0000200B', - "NegativeVeryThinSpace;": '\U0000200B', - "NestedGreaterGreater;": '\U0000226B', - "NestedLessLess;": '\U0000226A', - "NewLine;": '\U0000000A', - "Nfr;": '\U0001D511', - "NoBreak;": '\U00002060', - "NonBreakingSpace;": '\U000000A0', - "Nopf;": '\U00002115', - "Not;": '\U00002AEC', - "NotCongruent;": '\U00002262', - "NotCupCap;": '\U0000226D', - "NotDoubleVerticalBar;": '\U00002226', - "NotElement;": '\U00002209', - "NotEqual;": '\U00002260', - "NotExists;": '\U00002204', - "NotGreater;": '\U0000226F', - "NotGreaterEqual;": '\U00002271', - "NotGreaterLess;": '\U00002279', - "NotGreaterTilde;": '\U00002275', - "NotLeftTriangle;": '\U000022EA', - "NotLeftTriangleEqual;": '\U000022EC', - "NotLess;": '\U0000226E', - "NotLessEqual;": '\U00002270', - "NotLessGreater;": '\U00002278', - "NotLessTilde;": '\U00002274', - "NotPrecedes;": '\U00002280', - "NotPrecedesSlantEqual;": '\U000022E0', - "NotReverseElement;": '\U0000220C', - "NotRightTriangle;": '\U000022EB', - "NotRightTriangleEqual;": '\U000022ED', - "NotSquareSubsetEqual;": '\U000022E2', - "NotSquareSupersetEqual;": '\U000022E3', - "NotSubsetEqual;": '\U00002288', - "NotSucceeds;": '\U00002281', - "NotSucceedsSlantEqual;": '\U000022E1', - "NotSupersetEqual;": '\U00002289', - "NotTilde;": '\U00002241', - "NotTildeEqual;": '\U00002244', - "NotTildeFullEqual;": '\U00002247', - "NotTildeTilde;": '\U00002249', - "NotVerticalBar;": '\U00002224', - "Nscr;": '\U0001D4A9', - "Ntilde;": '\U000000D1', - "Nu;": '\U0000039D', - "OElig;": '\U00000152', - "Oacute;": '\U000000D3', - "Ocirc;": '\U000000D4', - "Ocy;": '\U0000041E', - "Odblac;": '\U00000150', - "Ofr;": '\U0001D512', - "Ograve;": '\U000000D2', - "Omacr;": '\U0000014C', - "Omega;": '\U000003A9', - "Omicron;": '\U0000039F', - "Oopf;": '\U0001D546', - "OpenCurlyDoubleQuote;": '\U0000201C', - "OpenCurlyQuote;": '\U00002018', - "Or;": '\U00002A54', - "Oscr;": '\U0001D4AA', - "Oslash;": '\U000000D8', - "Otilde;": '\U000000D5', - "Otimes;": '\U00002A37', - "Ouml;": '\U000000D6', - "OverBar;": '\U0000203E', - "OverBrace;": '\U000023DE', - "OverBracket;": '\U000023B4', - "OverParenthesis;": '\U000023DC', - "PartialD;": '\U00002202', - "Pcy;": '\U0000041F', - "Pfr;": '\U0001D513', - "Phi;": '\U000003A6', - "Pi;": '\U000003A0', - "PlusMinus;": '\U000000B1', - "Poincareplane;": '\U0000210C', - "Popf;": '\U00002119', - "Pr;": '\U00002ABB', - "Precedes;": '\U0000227A', - "PrecedesEqual;": '\U00002AAF', - "PrecedesSlantEqual;": '\U0000227C', - "PrecedesTilde;": '\U0000227E', - "Prime;": '\U00002033', - "Product;": '\U0000220F', - "Proportion;": '\U00002237', - "Proportional;": '\U0000221D', - "Pscr;": '\U0001D4AB', - "Psi;": '\U000003A8', - "QUOT;": '\U00000022', - "Qfr;": '\U0001D514', - "Qopf;": '\U0000211A', - "Qscr;": '\U0001D4AC', - "RBarr;": '\U00002910', - "REG;": '\U000000AE', - "Racute;": '\U00000154', - "Rang;": '\U000027EB', - "Rarr;": '\U000021A0', - "Rarrtl;": '\U00002916', - "Rcaron;": '\U00000158', - "Rcedil;": '\U00000156', - "Rcy;": '\U00000420', - "Re;": '\U0000211C', - "ReverseElement;": '\U0000220B', - "ReverseEquilibrium;": '\U000021CB', - "ReverseUpEquilibrium;": '\U0000296F', - "Rfr;": '\U0000211C', - "Rho;": '\U000003A1', - "RightAngleBracket;": '\U000027E9', - "RightArrow;": '\U00002192', - "RightArrowBar;": '\U000021E5', - "RightArrowLeftArrow;": '\U000021C4', - "RightCeiling;": '\U00002309', - "RightDoubleBracket;": '\U000027E7', - "RightDownTeeVector;": '\U0000295D', - "RightDownVector;": '\U000021C2', - "RightDownVectorBar;": '\U00002955', - "RightFloor;": '\U0000230B', - "RightTee;": '\U000022A2', - "RightTeeArrow;": '\U000021A6', - "RightTeeVector;": '\U0000295B', - "RightTriangle;": '\U000022B3', - "RightTriangleBar;": '\U000029D0', - "RightTriangleEqual;": '\U000022B5', - "RightUpDownVector;": '\U0000294F', - "RightUpTeeVector;": '\U0000295C', - "RightUpVector;": '\U000021BE', - "RightUpVectorBar;": '\U00002954', - "RightVector;": '\U000021C0', - "RightVectorBar;": '\U00002953', - "Rightarrow;": '\U000021D2', - "Ropf;": '\U0000211D', - "RoundImplies;": '\U00002970', - "Rrightarrow;": '\U000021DB', - "Rscr;": '\U0000211B', - "Rsh;": '\U000021B1', - "RuleDelayed;": '\U000029F4', - "SHCHcy;": '\U00000429', - "SHcy;": '\U00000428', - "SOFTcy;": '\U0000042C', - "Sacute;": '\U0000015A', - "Sc;": '\U00002ABC', - "Scaron;": '\U00000160', - "Scedil;": '\U0000015E', - "Scirc;": '\U0000015C', - "Scy;": '\U00000421', - "Sfr;": '\U0001D516', - "ShortDownArrow;": '\U00002193', - "ShortLeftArrow;": '\U00002190', - "ShortRightArrow;": '\U00002192', - "ShortUpArrow;": '\U00002191', - "Sigma;": '\U000003A3', - "SmallCircle;": '\U00002218', - "Sopf;": '\U0001D54A', - "Sqrt;": '\U0000221A', - "Square;": '\U000025A1', - "SquareIntersection;": '\U00002293', - "SquareSubset;": '\U0000228F', - "SquareSubsetEqual;": '\U00002291', - "SquareSuperset;": '\U00002290', - "SquareSupersetEqual;": '\U00002292', - "SquareUnion;": '\U00002294', - "Sscr;": '\U0001D4AE', - "Star;": '\U000022C6', - "Sub;": '\U000022D0', - "Subset;": '\U000022D0', - "SubsetEqual;": '\U00002286', - "Succeeds;": '\U0000227B', - "SucceedsEqual;": '\U00002AB0', - "SucceedsSlantEqual;": '\U0000227D', - "SucceedsTilde;": '\U0000227F', - "SuchThat;": '\U0000220B', - "Sum;": '\U00002211', - "Sup;": '\U000022D1', - "Superset;": '\U00002283', - "SupersetEqual;": '\U00002287', - "Supset;": '\U000022D1', - "THORN;": '\U000000DE', - "TRADE;": '\U00002122', - "TSHcy;": '\U0000040B', - "TScy;": '\U00000426', - "Tab;": '\U00000009', - "Tau;": '\U000003A4', - "Tcaron;": '\U00000164', - "Tcedil;": '\U00000162', - "Tcy;": '\U00000422', - "Tfr;": '\U0001D517', - "Therefore;": '\U00002234', - "Theta;": '\U00000398', - "ThinSpace;": '\U00002009', - "Tilde;": '\U0000223C', - "TildeEqual;": '\U00002243', - "TildeFullEqual;": '\U00002245', - "TildeTilde;": '\U00002248', - "Topf;": '\U0001D54B', - "TripleDot;": '\U000020DB', - "Tscr;": '\U0001D4AF', - "Tstrok;": '\U00000166', - "Uacute;": '\U000000DA', - "Uarr;": '\U0000219F', - "Uarrocir;": '\U00002949', - "Ubrcy;": '\U0000040E', - "Ubreve;": '\U0000016C', - "Ucirc;": '\U000000DB', - "Ucy;": '\U00000423', - "Udblac;": '\U00000170', - "Ufr;": '\U0001D518', - "Ugrave;": '\U000000D9', - "Umacr;": '\U0000016A', - "UnderBar;": '\U0000005F', - "UnderBrace;": '\U000023DF', - "UnderBracket;": '\U000023B5', - "UnderParenthesis;": '\U000023DD', - "Union;": '\U000022C3', - "UnionPlus;": '\U0000228E', - "Uogon;": '\U00000172', - "Uopf;": '\U0001D54C', - "UpArrow;": '\U00002191', - "UpArrowBar;": '\U00002912', - "UpArrowDownArrow;": '\U000021C5', - "UpDownArrow;": '\U00002195', - "UpEquilibrium;": '\U0000296E', - "UpTee;": '\U000022A5', - "UpTeeArrow;": '\U000021A5', - "Uparrow;": '\U000021D1', - "Updownarrow;": '\U000021D5', - "UpperLeftArrow;": '\U00002196', - "UpperRightArrow;": '\U00002197', - "Upsi;": '\U000003D2', - "Upsilon;": '\U000003A5', - "Uring;": '\U0000016E', - "Uscr;": '\U0001D4B0', - "Utilde;": '\U00000168', - "Uuml;": '\U000000DC', - "VDash;": '\U000022AB', - "Vbar;": '\U00002AEB', - "Vcy;": '\U00000412', - "Vdash;": '\U000022A9', - "Vdashl;": '\U00002AE6', - "Vee;": '\U000022C1', - "Verbar;": '\U00002016', - "Vert;": '\U00002016', - "VerticalBar;": '\U00002223', - "VerticalLine;": '\U0000007C', - "VerticalSeparator;": '\U00002758', - "VerticalTilde;": '\U00002240', - "VeryThinSpace;": '\U0000200A', - "Vfr;": '\U0001D519', - "Vopf;": '\U0001D54D', - "Vscr;": '\U0001D4B1', - "Vvdash;": '\U000022AA', - "Wcirc;": '\U00000174', - "Wedge;": '\U000022C0', - "Wfr;": '\U0001D51A', - "Wopf;": '\U0001D54E', - "Wscr;": '\U0001D4B2', - "Xfr;": '\U0001D51B', - "Xi;": '\U0000039E', - "Xopf;": '\U0001D54F', - "Xscr;": '\U0001D4B3', - "YAcy;": '\U0000042F', - "YIcy;": '\U00000407', - "YUcy;": '\U0000042E', - "Yacute;": '\U000000DD', - "Ycirc;": '\U00000176', - "Ycy;": '\U0000042B', - "Yfr;": '\U0001D51C', - "Yopf;": '\U0001D550', - "Yscr;": '\U0001D4B4', - "Yuml;": '\U00000178', - "ZHcy;": '\U00000416', - "Zacute;": '\U00000179', - "Zcaron;": '\U0000017D', - "Zcy;": '\U00000417', - "Zdot;": '\U0000017B', - "ZeroWidthSpace;": '\U0000200B', - "Zeta;": '\U00000396', - "Zfr;": '\U00002128', - "Zopf;": '\U00002124', - "Zscr;": '\U0001D4B5', - "aacute;": '\U000000E1', - "abreve;": '\U00000103', - "ac;": '\U0000223E', - "acd;": '\U0000223F', - "acirc;": '\U000000E2', - "acute;": '\U000000B4', - "acy;": '\U00000430', - "aelig;": '\U000000E6', - "af;": '\U00002061', - "afr;": '\U0001D51E', - "agrave;": '\U000000E0', - "alefsym;": '\U00002135', - "aleph;": '\U00002135', - "alpha;": '\U000003B1', - "amacr;": '\U00000101', - "amalg;": '\U00002A3F', - "amp;": '\U00000026', - "and;": '\U00002227', - "andand;": '\U00002A55', - "andd;": '\U00002A5C', - "andslope;": '\U00002A58', - "andv;": '\U00002A5A', - "ang;": '\U00002220', - "ange;": '\U000029A4', - "angle;": '\U00002220', - "angmsd;": '\U00002221', - "angmsdaa;": '\U000029A8', - "angmsdab;": '\U000029A9', - "angmsdac;": '\U000029AA', - "angmsdad;": '\U000029AB', - "angmsdae;": '\U000029AC', - "angmsdaf;": '\U000029AD', - "angmsdag;": '\U000029AE', - "angmsdah;": '\U000029AF', - "angrt;": '\U0000221F', - "angrtvb;": '\U000022BE', - "angrtvbd;": '\U0000299D', - "angsph;": '\U00002222', - "angst;": '\U000000C5', - "angzarr;": '\U0000237C', - "aogon;": '\U00000105', - "aopf;": '\U0001D552', - "ap;": '\U00002248', - "apE;": '\U00002A70', - "apacir;": '\U00002A6F', - "ape;": '\U0000224A', - "apid;": '\U0000224B', - "apos;": '\U00000027', - "approx;": '\U00002248', - "approxeq;": '\U0000224A', - "aring;": '\U000000E5', - "ascr;": '\U0001D4B6', - "ast;": '\U0000002A', - "asymp;": '\U00002248', - "asympeq;": '\U0000224D', - "atilde;": '\U000000E3', - "auml;": '\U000000E4', - "awconint;": '\U00002233', - "awint;": '\U00002A11', - "bNot;": '\U00002AED', - "backcong;": '\U0000224C', - "backepsilon;": '\U000003F6', - "backprime;": '\U00002035', - "backsim;": '\U0000223D', - "backsimeq;": '\U000022CD', - "barvee;": '\U000022BD', - "barwed;": '\U00002305', - "barwedge;": '\U00002305', - "bbrk;": '\U000023B5', - "bbrktbrk;": '\U000023B6', - "bcong;": '\U0000224C', - "bcy;": '\U00000431', - "bdquo;": '\U0000201E', - "becaus;": '\U00002235', - "because;": '\U00002235', - "bemptyv;": '\U000029B0', - "bepsi;": '\U000003F6', - "bernou;": '\U0000212C', - "beta;": '\U000003B2', - "beth;": '\U00002136', - "between;": '\U0000226C', - "bfr;": '\U0001D51F', - "bigcap;": '\U000022C2', - "bigcirc;": '\U000025EF', - "bigcup;": '\U000022C3', - "bigodot;": '\U00002A00', - "bigoplus;": '\U00002A01', - "bigotimes;": '\U00002A02', - "bigsqcup;": '\U00002A06', - "bigstar;": '\U00002605', - "bigtriangledown;": '\U000025BD', - "bigtriangleup;": '\U000025B3', - "biguplus;": '\U00002A04', - "bigvee;": '\U000022C1', - "bigwedge;": '\U000022C0', - "bkarow;": '\U0000290D', - "blacklozenge;": '\U000029EB', - "blacksquare;": '\U000025AA', - "blacktriangle;": '\U000025B4', - "blacktriangledown;": '\U000025BE', - "blacktriangleleft;": '\U000025C2', - "blacktriangleright;": '\U000025B8', - "blank;": '\U00002423', - "blk12;": '\U00002592', - "blk14;": '\U00002591', - "blk34;": '\U00002593', - "block;": '\U00002588', - "bnot;": '\U00002310', - "bopf;": '\U0001D553', - "bot;": '\U000022A5', - "bottom;": '\U000022A5', - "bowtie;": '\U000022C8', - "boxDL;": '\U00002557', - "boxDR;": '\U00002554', - "boxDl;": '\U00002556', - "boxDr;": '\U00002553', - "boxH;": '\U00002550', - "boxHD;": '\U00002566', - "boxHU;": '\U00002569', - "boxHd;": '\U00002564', - "boxHu;": '\U00002567', - "boxUL;": '\U0000255D', - "boxUR;": '\U0000255A', - "boxUl;": '\U0000255C', - "boxUr;": '\U00002559', - "boxV;": '\U00002551', - "boxVH;": '\U0000256C', - "boxVL;": '\U00002563', - "boxVR;": '\U00002560', - "boxVh;": '\U0000256B', - "boxVl;": '\U00002562', - "boxVr;": '\U0000255F', - "boxbox;": '\U000029C9', - "boxdL;": '\U00002555', - "boxdR;": '\U00002552', - "boxdl;": '\U00002510', - "boxdr;": '\U0000250C', - "boxh;": '\U00002500', - "boxhD;": '\U00002565', - "boxhU;": '\U00002568', - "boxhd;": '\U0000252C', - "boxhu;": '\U00002534', - "boxminus;": '\U0000229F', - "boxplus;": '\U0000229E', - "boxtimes;": '\U000022A0', - "boxuL;": '\U0000255B', - "boxuR;": '\U00002558', - "boxul;": '\U00002518', - "boxur;": '\U00002514', - "boxv;": '\U00002502', - "boxvH;": '\U0000256A', - "boxvL;": '\U00002561', - "boxvR;": '\U0000255E', - "boxvh;": '\U0000253C', - "boxvl;": '\U00002524', - "boxvr;": '\U0000251C', - "bprime;": '\U00002035', - "breve;": '\U000002D8', - "brvbar;": '\U000000A6', - "bscr;": '\U0001D4B7', - "bsemi;": '\U0000204F', - "bsim;": '\U0000223D', - "bsime;": '\U000022CD', - "bsol;": '\U0000005C', - "bsolb;": '\U000029C5', - "bsolhsub;": '\U000027C8', - "bull;": '\U00002022', - "bullet;": '\U00002022', - "bump;": '\U0000224E', - "bumpE;": '\U00002AAE', - "bumpe;": '\U0000224F', - "bumpeq;": '\U0000224F', - "cacute;": '\U00000107', - "cap;": '\U00002229', - "capand;": '\U00002A44', - "capbrcup;": '\U00002A49', - "capcap;": '\U00002A4B', - "capcup;": '\U00002A47', - "capdot;": '\U00002A40', - "caret;": '\U00002041', - "caron;": '\U000002C7', - "ccaps;": '\U00002A4D', - "ccaron;": '\U0000010D', - "ccedil;": '\U000000E7', - "ccirc;": '\U00000109', - "ccups;": '\U00002A4C', - "ccupssm;": '\U00002A50', - "cdot;": '\U0000010B', - "cedil;": '\U000000B8', - "cemptyv;": '\U000029B2', - "cent;": '\U000000A2', - "centerdot;": '\U000000B7', - "cfr;": '\U0001D520', - "chcy;": '\U00000447', - "check;": '\U00002713', - "checkmark;": '\U00002713', - "chi;": '\U000003C7', - "cir;": '\U000025CB', - "cirE;": '\U000029C3', - "circ;": '\U000002C6', - "circeq;": '\U00002257', - "circlearrowleft;": '\U000021BA', - "circlearrowright;": '\U000021BB', - "circledR;": '\U000000AE', - "circledS;": '\U000024C8', - "circledast;": '\U0000229B', - "circledcirc;": '\U0000229A', - "circleddash;": '\U0000229D', - "cire;": '\U00002257', - "cirfnint;": '\U00002A10', - "cirmid;": '\U00002AEF', - "cirscir;": '\U000029C2', - "clubs;": '\U00002663', - "clubsuit;": '\U00002663', - "colon;": '\U0000003A', - "colone;": '\U00002254', - "coloneq;": '\U00002254', - "comma;": '\U0000002C', - "commat;": '\U00000040', - "comp;": '\U00002201', - "compfn;": '\U00002218', - "complement;": '\U00002201', - "complexes;": '\U00002102', - "cong;": '\U00002245', - "congdot;": '\U00002A6D', - "conint;": '\U0000222E', - "copf;": '\U0001D554', - "coprod;": '\U00002210', - "copy;": '\U000000A9', - "copysr;": '\U00002117', - "crarr;": '\U000021B5', - "cross;": '\U00002717', - "cscr;": '\U0001D4B8', - "csub;": '\U00002ACF', - "csube;": '\U00002AD1', - "csup;": '\U00002AD0', - "csupe;": '\U00002AD2', - "ctdot;": '\U000022EF', - "cudarrl;": '\U00002938', - "cudarrr;": '\U00002935', - "cuepr;": '\U000022DE', - "cuesc;": '\U000022DF', - "cularr;": '\U000021B6', - "cularrp;": '\U0000293D', - "cup;": '\U0000222A', - "cupbrcap;": '\U00002A48', - "cupcap;": '\U00002A46', - "cupcup;": '\U00002A4A', - "cupdot;": '\U0000228D', - "cupor;": '\U00002A45', - "curarr;": '\U000021B7', - "curarrm;": '\U0000293C', - "curlyeqprec;": '\U000022DE', - "curlyeqsucc;": '\U000022DF', - "curlyvee;": '\U000022CE', - "curlywedge;": '\U000022CF', - "curren;": '\U000000A4', - "curvearrowleft;": '\U000021B6', - "curvearrowright;": '\U000021B7', - "cuvee;": '\U000022CE', - "cuwed;": '\U000022CF', - "cwconint;": '\U00002232', - "cwint;": '\U00002231', - "cylcty;": '\U0000232D', - "dArr;": '\U000021D3', - "dHar;": '\U00002965', - "dagger;": '\U00002020', - "daleth;": '\U00002138', - "darr;": '\U00002193', - "dash;": '\U00002010', - "dashv;": '\U000022A3', - "dbkarow;": '\U0000290F', - "dblac;": '\U000002DD', - "dcaron;": '\U0000010F', - "dcy;": '\U00000434', - "dd;": '\U00002146', - "ddagger;": '\U00002021', - "ddarr;": '\U000021CA', - "ddotseq;": '\U00002A77', - "deg;": '\U000000B0', - "delta;": '\U000003B4', - "demptyv;": '\U000029B1', - "dfisht;": '\U0000297F', - "dfr;": '\U0001D521', - "dharl;": '\U000021C3', - "dharr;": '\U000021C2', - "diam;": '\U000022C4', - "diamond;": '\U000022C4', - "diamondsuit;": '\U00002666', - "diams;": '\U00002666', - "die;": '\U000000A8', - "digamma;": '\U000003DD', - "disin;": '\U000022F2', - "div;": '\U000000F7', - "divide;": '\U000000F7', - "divideontimes;": '\U000022C7', - "divonx;": '\U000022C7', - "djcy;": '\U00000452', - "dlcorn;": '\U0000231E', - "dlcrop;": '\U0000230D', - "dollar;": '\U00000024', - "dopf;": '\U0001D555', - "dot;": '\U000002D9', - "doteq;": '\U00002250', - "doteqdot;": '\U00002251', - "dotminus;": '\U00002238', - "dotplus;": '\U00002214', - "dotsquare;": '\U000022A1', - "doublebarwedge;": '\U00002306', - "downarrow;": '\U00002193', - "downdownarrows;": '\U000021CA', - "downharpoonleft;": '\U000021C3', - "downharpoonright;": '\U000021C2', - "drbkarow;": '\U00002910', - "drcorn;": '\U0000231F', - "drcrop;": '\U0000230C', - "dscr;": '\U0001D4B9', - "dscy;": '\U00000455', - "dsol;": '\U000029F6', - "dstrok;": '\U00000111', - "dtdot;": '\U000022F1', - "dtri;": '\U000025BF', - "dtrif;": '\U000025BE', - "duarr;": '\U000021F5', - "duhar;": '\U0000296F', - "dwangle;": '\U000029A6', - "dzcy;": '\U0000045F', - "dzigrarr;": '\U000027FF', - "eDDot;": '\U00002A77', - "eDot;": '\U00002251', - "eacute;": '\U000000E9', - "easter;": '\U00002A6E', - "ecaron;": '\U0000011B', - "ecir;": '\U00002256', - "ecirc;": '\U000000EA', - "ecolon;": '\U00002255', - "ecy;": '\U0000044D', - "edot;": '\U00000117', - "ee;": '\U00002147', - "efDot;": '\U00002252', - "efr;": '\U0001D522', - "eg;": '\U00002A9A', - "egrave;": '\U000000E8', - "egs;": '\U00002A96', - "egsdot;": '\U00002A98', - "el;": '\U00002A99', - "elinters;": '\U000023E7', - "ell;": '\U00002113', - "els;": '\U00002A95', - "elsdot;": '\U00002A97', - "emacr;": '\U00000113', - "empty;": '\U00002205', - "emptyset;": '\U00002205', - "emptyv;": '\U00002205', - "emsp;": '\U00002003', - "emsp13;": '\U00002004', - "emsp14;": '\U00002005', - "eng;": '\U0000014B', - "ensp;": '\U00002002', - "eogon;": '\U00000119', - "eopf;": '\U0001D556', - "epar;": '\U000022D5', - "eparsl;": '\U000029E3', - "eplus;": '\U00002A71', - "epsi;": '\U000003B5', - "epsilon;": '\U000003B5', - "epsiv;": '\U000003F5', - "eqcirc;": '\U00002256', - "eqcolon;": '\U00002255', - "eqsim;": '\U00002242', - "eqslantgtr;": '\U00002A96', - "eqslantless;": '\U00002A95', - "equals;": '\U0000003D', - "equest;": '\U0000225F', - "equiv;": '\U00002261', - "equivDD;": '\U00002A78', - "eqvparsl;": '\U000029E5', - "erDot;": '\U00002253', - "erarr;": '\U00002971', - "escr;": '\U0000212F', - "esdot;": '\U00002250', - "esim;": '\U00002242', - "eta;": '\U000003B7', - "eth;": '\U000000F0', - "euml;": '\U000000EB', - "euro;": '\U000020AC', - "excl;": '\U00000021', - "exist;": '\U00002203', - "expectation;": '\U00002130', - "exponentiale;": '\U00002147', - "fallingdotseq;": '\U00002252', - "fcy;": '\U00000444', - "female;": '\U00002640', - "ffilig;": '\U0000FB03', - "fflig;": '\U0000FB00', - "ffllig;": '\U0000FB04', - "ffr;": '\U0001D523', - "filig;": '\U0000FB01', - "flat;": '\U0000266D', - "fllig;": '\U0000FB02', - "fltns;": '\U000025B1', - "fnof;": '\U00000192', - "fopf;": '\U0001D557', - "forall;": '\U00002200', - "fork;": '\U000022D4', - "forkv;": '\U00002AD9', - "fpartint;": '\U00002A0D', - "frac12;": '\U000000BD', - "frac13;": '\U00002153', - "frac14;": '\U000000BC', - "frac15;": '\U00002155', - "frac16;": '\U00002159', - "frac18;": '\U0000215B', - "frac23;": '\U00002154', - "frac25;": '\U00002156', - "frac34;": '\U000000BE', - "frac35;": '\U00002157', - "frac38;": '\U0000215C', - "frac45;": '\U00002158', - "frac56;": '\U0000215A', - "frac58;": '\U0000215D', - "frac78;": '\U0000215E', - "frasl;": '\U00002044', - "frown;": '\U00002322', - "fscr;": '\U0001D4BB', - "gE;": '\U00002267', - "gEl;": '\U00002A8C', - "gacute;": '\U000001F5', - "gamma;": '\U000003B3', - "gammad;": '\U000003DD', - "gap;": '\U00002A86', - "gbreve;": '\U0000011F', - "gcirc;": '\U0000011D', - "gcy;": '\U00000433', - "gdot;": '\U00000121', - "ge;": '\U00002265', - "gel;": '\U000022DB', - "geq;": '\U00002265', - "geqq;": '\U00002267', - "geqslant;": '\U00002A7E', - "ges;": '\U00002A7E', - "gescc;": '\U00002AA9', - "gesdot;": '\U00002A80', - "gesdoto;": '\U00002A82', - "gesdotol;": '\U00002A84', - "gesles;": '\U00002A94', - "gfr;": '\U0001D524', - "gg;": '\U0000226B', - "ggg;": '\U000022D9', - "gimel;": '\U00002137', - "gjcy;": '\U00000453', - "gl;": '\U00002277', - "glE;": '\U00002A92', - "gla;": '\U00002AA5', - "glj;": '\U00002AA4', - "gnE;": '\U00002269', - "gnap;": '\U00002A8A', - "gnapprox;": '\U00002A8A', - "gne;": '\U00002A88', - "gneq;": '\U00002A88', - "gneqq;": '\U00002269', - "gnsim;": '\U000022E7', - "gopf;": '\U0001D558', - "grave;": '\U00000060', - "gscr;": '\U0000210A', - "gsim;": '\U00002273', - "gsime;": '\U00002A8E', - "gsiml;": '\U00002A90', - "gt;": '\U0000003E', - "gtcc;": '\U00002AA7', - "gtcir;": '\U00002A7A', - "gtdot;": '\U000022D7', - "gtlPar;": '\U00002995', - "gtquest;": '\U00002A7C', - "gtrapprox;": '\U00002A86', - "gtrarr;": '\U00002978', - "gtrdot;": '\U000022D7', - "gtreqless;": '\U000022DB', - "gtreqqless;": '\U00002A8C', - "gtrless;": '\U00002277', - "gtrsim;": '\U00002273', - "hArr;": '\U000021D4', - "hairsp;": '\U0000200A', - "half;": '\U000000BD', - "hamilt;": '\U0000210B', - "hardcy;": '\U0000044A', - "harr;": '\U00002194', - "harrcir;": '\U00002948', - "harrw;": '\U000021AD', - "hbar;": '\U0000210F', - "hcirc;": '\U00000125', - "hearts;": '\U00002665', - "heartsuit;": '\U00002665', - "hellip;": '\U00002026', - "hercon;": '\U000022B9', - "hfr;": '\U0001D525', - "hksearow;": '\U00002925', - "hkswarow;": '\U00002926', - "hoarr;": '\U000021FF', - "homtht;": '\U0000223B', - "hookleftarrow;": '\U000021A9', - "hookrightarrow;": '\U000021AA', - "hopf;": '\U0001D559', - "horbar;": '\U00002015', - "hscr;": '\U0001D4BD', - "hslash;": '\U0000210F', - "hstrok;": '\U00000127', - "hybull;": '\U00002043', - "hyphen;": '\U00002010', - "iacute;": '\U000000ED', - "ic;": '\U00002063', - "icirc;": '\U000000EE', - "icy;": '\U00000438', - "iecy;": '\U00000435', - "iexcl;": '\U000000A1', - "iff;": '\U000021D4', - "ifr;": '\U0001D526', - "igrave;": '\U000000EC', - "ii;": '\U00002148', - "iiiint;": '\U00002A0C', - "iiint;": '\U0000222D', - "iinfin;": '\U000029DC', - "iiota;": '\U00002129', - "ijlig;": '\U00000133', - "imacr;": '\U0000012B', - "image;": '\U00002111', - "imagline;": '\U00002110', - "imagpart;": '\U00002111', - "imath;": '\U00000131', - "imof;": '\U000022B7', - "imped;": '\U000001B5', - "in;": '\U00002208', - "incare;": '\U00002105', - "infin;": '\U0000221E', - "infintie;": '\U000029DD', - "inodot;": '\U00000131', - "int;": '\U0000222B', - "intcal;": '\U000022BA', - "integers;": '\U00002124', - "intercal;": '\U000022BA', - "intlarhk;": '\U00002A17', - "intprod;": '\U00002A3C', - "iocy;": '\U00000451', - "iogon;": '\U0000012F', - "iopf;": '\U0001D55A', - "iota;": '\U000003B9', - "iprod;": '\U00002A3C', - "iquest;": '\U000000BF', - "iscr;": '\U0001D4BE', - "isin;": '\U00002208', - "isinE;": '\U000022F9', - "isindot;": '\U000022F5', - "isins;": '\U000022F4', - "isinsv;": '\U000022F3', - "isinv;": '\U00002208', - "it;": '\U00002062', - "itilde;": '\U00000129', - "iukcy;": '\U00000456', - "iuml;": '\U000000EF', - "jcirc;": '\U00000135', - "jcy;": '\U00000439', - "jfr;": '\U0001D527', - "jmath;": '\U00000237', - "jopf;": '\U0001D55B', - "jscr;": '\U0001D4BF', - "jsercy;": '\U00000458', - "jukcy;": '\U00000454', - "kappa;": '\U000003BA', - "kappav;": '\U000003F0', - "kcedil;": '\U00000137', - "kcy;": '\U0000043A', - "kfr;": '\U0001D528', - "kgreen;": '\U00000138', - "khcy;": '\U00000445', - "kjcy;": '\U0000045C', - "kopf;": '\U0001D55C', - "kscr;": '\U0001D4C0', - "lAarr;": '\U000021DA', - "lArr;": '\U000021D0', - "lAtail;": '\U0000291B', - "lBarr;": '\U0000290E', - "lE;": '\U00002266', - "lEg;": '\U00002A8B', - "lHar;": '\U00002962', - "lacute;": '\U0000013A', - "laemptyv;": '\U000029B4', - "lagran;": '\U00002112', - "lambda;": '\U000003BB', - "lang;": '\U000027E8', - "langd;": '\U00002991', - "langle;": '\U000027E8', - "lap;": '\U00002A85', - "laquo;": '\U000000AB', - "larr;": '\U00002190', - "larrb;": '\U000021E4', - "larrbfs;": '\U0000291F', - "larrfs;": '\U0000291D', - "larrhk;": '\U000021A9', - "larrlp;": '\U000021AB', - "larrpl;": '\U00002939', - "larrsim;": '\U00002973', - "larrtl;": '\U000021A2', - "lat;": '\U00002AAB', - "latail;": '\U00002919', - "late;": '\U00002AAD', - "lbarr;": '\U0000290C', - "lbbrk;": '\U00002772', - "lbrace;": '\U0000007B', - "lbrack;": '\U0000005B', - "lbrke;": '\U0000298B', - "lbrksld;": '\U0000298F', - "lbrkslu;": '\U0000298D', - "lcaron;": '\U0000013E', - "lcedil;": '\U0000013C', - "lceil;": '\U00002308', - "lcub;": '\U0000007B', - "lcy;": '\U0000043B', - "ldca;": '\U00002936', - "ldquo;": '\U0000201C', - "ldquor;": '\U0000201E', - "ldrdhar;": '\U00002967', - "ldrushar;": '\U0000294B', - "ldsh;": '\U000021B2', - "le;": '\U00002264', - "leftarrow;": '\U00002190', - "leftarrowtail;": '\U000021A2', - "leftharpoondown;": '\U000021BD', - "leftharpoonup;": '\U000021BC', - "leftleftarrows;": '\U000021C7', - "leftrightarrow;": '\U00002194', - "leftrightarrows;": '\U000021C6', - "leftrightharpoons;": '\U000021CB', - "leftrightsquigarrow;": '\U000021AD', - "leftthreetimes;": '\U000022CB', - "leg;": '\U000022DA', - "leq;": '\U00002264', - "leqq;": '\U00002266', - "leqslant;": '\U00002A7D', - "les;": '\U00002A7D', - "lescc;": '\U00002AA8', - "lesdot;": '\U00002A7F', - "lesdoto;": '\U00002A81', - "lesdotor;": '\U00002A83', - "lesges;": '\U00002A93', - "lessapprox;": '\U00002A85', - "lessdot;": '\U000022D6', - "lesseqgtr;": '\U000022DA', - "lesseqqgtr;": '\U00002A8B', - "lessgtr;": '\U00002276', - "lesssim;": '\U00002272', - "lfisht;": '\U0000297C', - "lfloor;": '\U0000230A', - "lfr;": '\U0001D529', - "lg;": '\U00002276', - "lgE;": '\U00002A91', - "lhard;": '\U000021BD', - "lharu;": '\U000021BC', - "lharul;": '\U0000296A', - "lhblk;": '\U00002584', - "ljcy;": '\U00000459', - "ll;": '\U0000226A', - "llarr;": '\U000021C7', - "llcorner;": '\U0000231E', - "llhard;": '\U0000296B', - "lltri;": '\U000025FA', - "lmidot;": '\U00000140', - "lmoust;": '\U000023B0', - "lmoustache;": '\U000023B0', - "lnE;": '\U00002268', - "lnap;": '\U00002A89', - "lnapprox;": '\U00002A89', - "lne;": '\U00002A87', - "lneq;": '\U00002A87', - "lneqq;": '\U00002268', - "lnsim;": '\U000022E6', - "loang;": '\U000027EC', - "loarr;": '\U000021FD', - "lobrk;": '\U000027E6', - "longleftarrow;": '\U000027F5', - "longleftrightarrow;": '\U000027F7', - "longmapsto;": '\U000027FC', - "longrightarrow;": '\U000027F6', - "looparrowleft;": '\U000021AB', - "looparrowright;": '\U000021AC', - "lopar;": '\U00002985', - "lopf;": '\U0001D55D', - "loplus;": '\U00002A2D', - "lotimes;": '\U00002A34', - "lowast;": '\U00002217', - "lowbar;": '\U0000005F', - "loz;": '\U000025CA', - "lozenge;": '\U000025CA', - "lozf;": '\U000029EB', - "lpar;": '\U00000028', - "lparlt;": '\U00002993', - "lrarr;": '\U000021C6', - "lrcorner;": '\U0000231F', - "lrhar;": '\U000021CB', - "lrhard;": '\U0000296D', - "lrm;": '\U0000200E', - "lrtri;": '\U000022BF', - "lsaquo;": '\U00002039', - "lscr;": '\U0001D4C1', - "lsh;": '\U000021B0', - "lsim;": '\U00002272', - "lsime;": '\U00002A8D', - "lsimg;": '\U00002A8F', - "lsqb;": '\U0000005B', - "lsquo;": '\U00002018', - "lsquor;": '\U0000201A', - "lstrok;": '\U00000142', - "lt;": '\U0000003C', - "ltcc;": '\U00002AA6', - "ltcir;": '\U00002A79', - "ltdot;": '\U000022D6', - "lthree;": '\U000022CB', - "ltimes;": '\U000022C9', - "ltlarr;": '\U00002976', - "ltquest;": '\U00002A7B', - "ltrPar;": '\U00002996', - "ltri;": '\U000025C3', - "ltrie;": '\U000022B4', - "ltrif;": '\U000025C2', - "lurdshar;": '\U0000294A', - "luruhar;": '\U00002966', - "mDDot;": '\U0000223A', - "macr;": '\U000000AF', - "male;": '\U00002642', - "malt;": '\U00002720', - "maltese;": '\U00002720', - "map;": '\U000021A6', - "mapsto;": '\U000021A6', - "mapstodown;": '\U000021A7', - "mapstoleft;": '\U000021A4', - "mapstoup;": '\U000021A5', - "marker;": '\U000025AE', - "mcomma;": '\U00002A29', - "mcy;": '\U0000043C', - "mdash;": '\U00002014', - "measuredangle;": '\U00002221', - "mfr;": '\U0001D52A', - "mho;": '\U00002127', - "micro;": '\U000000B5', - "mid;": '\U00002223', - "midast;": '\U0000002A', - "midcir;": '\U00002AF0', - "middot;": '\U000000B7', - "minus;": '\U00002212', - "minusb;": '\U0000229F', - "minusd;": '\U00002238', - "minusdu;": '\U00002A2A', - "mlcp;": '\U00002ADB', - "mldr;": '\U00002026', - "mnplus;": '\U00002213', - "models;": '\U000022A7', - "mopf;": '\U0001D55E', - "mp;": '\U00002213', - "mscr;": '\U0001D4C2', - "mstpos;": '\U0000223E', - "mu;": '\U000003BC', - "multimap;": '\U000022B8', - "mumap;": '\U000022B8', - "nLeftarrow;": '\U000021CD', - "nLeftrightarrow;": '\U000021CE', - "nRightarrow;": '\U000021CF', - "nVDash;": '\U000022AF', - "nVdash;": '\U000022AE', - "nabla;": '\U00002207', - "nacute;": '\U00000144', - "nap;": '\U00002249', - "napos;": '\U00000149', - "napprox;": '\U00002249', - "natur;": '\U0000266E', - "natural;": '\U0000266E', - "naturals;": '\U00002115', - "nbsp;": '\U000000A0', - "ncap;": '\U00002A43', - "ncaron;": '\U00000148', - "ncedil;": '\U00000146', - "ncong;": '\U00002247', - "ncup;": '\U00002A42', - "ncy;": '\U0000043D', - "ndash;": '\U00002013', - "ne;": '\U00002260', - "neArr;": '\U000021D7', - "nearhk;": '\U00002924', - "nearr;": '\U00002197', - "nearrow;": '\U00002197', - "nequiv;": '\U00002262', - "nesear;": '\U00002928', - "nexist;": '\U00002204', - "nexists;": '\U00002204', - "nfr;": '\U0001D52B', - "nge;": '\U00002271', - "ngeq;": '\U00002271', - "ngsim;": '\U00002275', - "ngt;": '\U0000226F', - "ngtr;": '\U0000226F', - "nhArr;": '\U000021CE', - "nharr;": '\U000021AE', - "nhpar;": '\U00002AF2', - "ni;": '\U0000220B', - "nis;": '\U000022FC', - "nisd;": '\U000022FA', - "niv;": '\U0000220B', - "njcy;": '\U0000045A', - "nlArr;": '\U000021CD', - "nlarr;": '\U0000219A', - "nldr;": '\U00002025', - "nle;": '\U00002270', - "nleftarrow;": '\U0000219A', - "nleftrightarrow;": '\U000021AE', - "nleq;": '\U00002270', - "nless;": '\U0000226E', - "nlsim;": '\U00002274', - "nlt;": '\U0000226E', - "nltri;": '\U000022EA', - "nltrie;": '\U000022EC', - "nmid;": '\U00002224', - "nopf;": '\U0001D55F', - "not;": '\U000000AC', - "notin;": '\U00002209', - "notinva;": '\U00002209', - "notinvb;": '\U000022F7', - "notinvc;": '\U000022F6', - "notni;": '\U0000220C', - "notniva;": '\U0000220C', - "notnivb;": '\U000022FE', - "notnivc;": '\U000022FD', - "npar;": '\U00002226', - "nparallel;": '\U00002226', - "npolint;": '\U00002A14', - "npr;": '\U00002280', - "nprcue;": '\U000022E0', - "nprec;": '\U00002280', - "nrArr;": '\U000021CF', - "nrarr;": '\U0000219B', - "nrightarrow;": '\U0000219B', - "nrtri;": '\U000022EB', - "nrtrie;": '\U000022ED', - "nsc;": '\U00002281', - "nsccue;": '\U000022E1', - "nscr;": '\U0001D4C3', - "nshortmid;": '\U00002224', - "nshortparallel;": '\U00002226', - "nsim;": '\U00002241', - "nsime;": '\U00002244', - "nsimeq;": '\U00002244', - "nsmid;": '\U00002224', - "nspar;": '\U00002226', - "nsqsube;": '\U000022E2', - "nsqsupe;": '\U000022E3', - "nsub;": '\U00002284', - "nsube;": '\U00002288', - "nsubseteq;": '\U00002288', - "nsucc;": '\U00002281', - "nsup;": '\U00002285', - "nsupe;": '\U00002289', - "nsupseteq;": '\U00002289', - "ntgl;": '\U00002279', - "ntilde;": '\U000000F1', - "ntlg;": '\U00002278', - "ntriangleleft;": '\U000022EA', - "ntrianglelefteq;": '\U000022EC', - "ntriangleright;": '\U000022EB', - "ntrianglerighteq;": '\U000022ED', - "nu;": '\U000003BD', - "num;": '\U00000023', - "numero;": '\U00002116', - "numsp;": '\U00002007', - "nvDash;": '\U000022AD', - "nvHarr;": '\U00002904', - "nvdash;": '\U000022AC', - "nvinfin;": '\U000029DE', - "nvlArr;": '\U00002902', - "nvrArr;": '\U00002903', - "nwArr;": '\U000021D6', - "nwarhk;": '\U00002923', - "nwarr;": '\U00002196', - "nwarrow;": '\U00002196', - "nwnear;": '\U00002927', - "oS;": '\U000024C8', - "oacute;": '\U000000F3', - "oast;": '\U0000229B', - "ocir;": '\U0000229A', - "ocirc;": '\U000000F4', - "ocy;": '\U0000043E', - "odash;": '\U0000229D', - "odblac;": '\U00000151', - "odiv;": '\U00002A38', - "odot;": '\U00002299', - "odsold;": '\U000029BC', - "oelig;": '\U00000153', - "ofcir;": '\U000029BF', - "ofr;": '\U0001D52C', - "ogon;": '\U000002DB', - "ograve;": '\U000000F2', - "ogt;": '\U000029C1', - "ohbar;": '\U000029B5', - "ohm;": '\U000003A9', - "oint;": '\U0000222E', - "olarr;": '\U000021BA', - "olcir;": '\U000029BE', - "olcross;": '\U000029BB', - "oline;": '\U0000203E', - "olt;": '\U000029C0', - "omacr;": '\U0000014D', - "omega;": '\U000003C9', - "omicron;": '\U000003BF', - "omid;": '\U000029B6', - "ominus;": '\U00002296', - "oopf;": '\U0001D560', - "opar;": '\U000029B7', - "operp;": '\U000029B9', - "oplus;": '\U00002295', - "or;": '\U00002228', - "orarr;": '\U000021BB', - "ord;": '\U00002A5D', - "order;": '\U00002134', - "orderof;": '\U00002134', - "ordf;": '\U000000AA', - "ordm;": '\U000000BA', - "origof;": '\U000022B6', - "oror;": '\U00002A56', - "orslope;": '\U00002A57', - "orv;": '\U00002A5B', - "oscr;": '\U00002134', - "oslash;": '\U000000F8', - "osol;": '\U00002298', - "otilde;": '\U000000F5', - "otimes;": '\U00002297', - "otimesas;": '\U00002A36', - "ouml;": '\U000000F6', - "ovbar;": '\U0000233D', - "par;": '\U00002225', - "para;": '\U000000B6', - "parallel;": '\U00002225', - "parsim;": '\U00002AF3', - "parsl;": '\U00002AFD', - "part;": '\U00002202', - "pcy;": '\U0000043F', - "percnt;": '\U00000025', - "period;": '\U0000002E', - "permil;": '\U00002030', - "perp;": '\U000022A5', - "pertenk;": '\U00002031', - "pfr;": '\U0001D52D', - "phi;": '\U000003C6', - "phiv;": '\U000003D5', - "phmmat;": '\U00002133', - "phone;": '\U0000260E', - "pi;": '\U000003C0', - "pitchfork;": '\U000022D4', - "piv;": '\U000003D6', - "planck;": '\U0000210F', - "planckh;": '\U0000210E', - "plankv;": '\U0000210F', - "plus;": '\U0000002B', - "plusacir;": '\U00002A23', - "plusb;": '\U0000229E', - "pluscir;": '\U00002A22', - "plusdo;": '\U00002214', - "plusdu;": '\U00002A25', - "pluse;": '\U00002A72', - "plusmn;": '\U000000B1', - "plussim;": '\U00002A26', - "plustwo;": '\U00002A27', - "pm;": '\U000000B1', - "pointint;": '\U00002A15', - "popf;": '\U0001D561', - "pound;": '\U000000A3', - "pr;": '\U0000227A', - "prE;": '\U00002AB3', - "prap;": '\U00002AB7', - "prcue;": '\U0000227C', - "pre;": '\U00002AAF', - "prec;": '\U0000227A', - "precapprox;": '\U00002AB7', - "preccurlyeq;": '\U0000227C', - "preceq;": '\U00002AAF', - "precnapprox;": '\U00002AB9', - "precneqq;": '\U00002AB5', - "precnsim;": '\U000022E8', - "precsim;": '\U0000227E', - "prime;": '\U00002032', - "primes;": '\U00002119', - "prnE;": '\U00002AB5', - "prnap;": '\U00002AB9', - "prnsim;": '\U000022E8', - "prod;": '\U0000220F', - "profalar;": '\U0000232E', - "profline;": '\U00002312', - "profsurf;": '\U00002313', - "prop;": '\U0000221D', - "propto;": '\U0000221D', - "prsim;": '\U0000227E', - "prurel;": '\U000022B0', - "pscr;": '\U0001D4C5', - "psi;": '\U000003C8', - "puncsp;": '\U00002008', - "qfr;": '\U0001D52E', - "qint;": '\U00002A0C', - "qopf;": '\U0001D562', - "qprime;": '\U00002057', - "qscr;": '\U0001D4C6', - "quaternions;": '\U0000210D', - "quatint;": '\U00002A16', - "quest;": '\U0000003F', - "questeq;": '\U0000225F', - "quot;": '\U00000022', - "rAarr;": '\U000021DB', - "rArr;": '\U000021D2', - "rAtail;": '\U0000291C', - "rBarr;": '\U0000290F', - "rHar;": '\U00002964', - "racute;": '\U00000155', - "radic;": '\U0000221A', - "raemptyv;": '\U000029B3', - "rang;": '\U000027E9', - "rangd;": '\U00002992', - "range;": '\U000029A5', - "rangle;": '\U000027E9', - "raquo;": '\U000000BB', - "rarr;": '\U00002192', - "rarrap;": '\U00002975', - "rarrb;": '\U000021E5', - "rarrbfs;": '\U00002920', - "rarrc;": '\U00002933', - "rarrfs;": '\U0000291E', - "rarrhk;": '\U000021AA', - "rarrlp;": '\U000021AC', - "rarrpl;": '\U00002945', - "rarrsim;": '\U00002974', - "rarrtl;": '\U000021A3', - "rarrw;": '\U0000219D', - "ratail;": '\U0000291A', - "ratio;": '\U00002236', - "rationals;": '\U0000211A', - "rbarr;": '\U0000290D', - "rbbrk;": '\U00002773', - "rbrace;": '\U0000007D', - "rbrack;": '\U0000005D', - "rbrke;": '\U0000298C', - "rbrksld;": '\U0000298E', - "rbrkslu;": '\U00002990', - "rcaron;": '\U00000159', - "rcedil;": '\U00000157', - "rceil;": '\U00002309', - "rcub;": '\U0000007D', - "rcy;": '\U00000440', - "rdca;": '\U00002937', - "rdldhar;": '\U00002969', - "rdquo;": '\U0000201D', - "rdquor;": '\U0000201D', - "rdsh;": '\U000021B3', - "real;": '\U0000211C', - "realine;": '\U0000211B', - "realpart;": '\U0000211C', - "reals;": '\U0000211D', - "rect;": '\U000025AD', - "reg;": '\U000000AE', - "rfisht;": '\U0000297D', - "rfloor;": '\U0000230B', - "rfr;": '\U0001D52F', - "rhard;": '\U000021C1', - "rharu;": '\U000021C0', - "rharul;": '\U0000296C', - "rho;": '\U000003C1', - "rhov;": '\U000003F1', - "rightarrow;": '\U00002192', - "rightarrowtail;": '\U000021A3', - "rightharpoondown;": '\U000021C1', - "rightharpoonup;": '\U000021C0', - "rightleftarrows;": '\U000021C4', - "rightleftharpoons;": '\U000021CC', - "rightrightarrows;": '\U000021C9', - "rightsquigarrow;": '\U0000219D', - "rightthreetimes;": '\U000022CC', - "ring;": '\U000002DA', - "risingdotseq;": '\U00002253', - "rlarr;": '\U000021C4', - "rlhar;": '\U000021CC', - "rlm;": '\U0000200F', - "rmoust;": '\U000023B1', - "rmoustache;": '\U000023B1', - "rnmid;": '\U00002AEE', - "roang;": '\U000027ED', - "roarr;": '\U000021FE', - "robrk;": '\U000027E7', - "ropar;": '\U00002986', - "ropf;": '\U0001D563', - "roplus;": '\U00002A2E', - "rotimes;": '\U00002A35', - "rpar;": '\U00000029', - "rpargt;": '\U00002994', - "rppolint;": '\U00002A12', - "rrarr;": '\U000021C9', - "rsaquo;": '\U0000203A', - "rscr;": '\U0001D4C7', - "rsh;": '\U000021B1', - "rsqb;": '\U0000005D', - "rsquo;": '\U00002019', - "rsquor;": '\U00002019', - "rthree;": '\U000022CC', - "rtimes;": '\U000022CA', - "rtri;": '\U000025B9', - "rtrie;": '\U000022B5', - "rtrif;": '\U000025B8', - "rtriltri;": '\U000029CE', - "ruluhar;": '\U00002968', - "rx;": '\U0000211E', - "sacute;": '\U0000015B', - "sbquo;": '\U0000201A', - "sc;": '\U0000227B', - "scE;": '\U00002AB4', - "scap;": '\U00002AB8', - "scaron;": '\U00000161', - "sccue;": '\U0000227D', - "sce;": '\U00002AB0', - "scedil;": '\U0000015F', - "scirc;": '\U0000015D', - "scnE;": '\U00002AB6', - "scnap;": '\U00002ABA', - "scnsim;": '\U000022E9', - "scpolint;": '\U00002A13', - "scsim;": '\U0000227F', - "scy;": '\U00000441', - "sdot;": '\U000022C5', - "sdotb;": '\U000022A1', - "sdote;": '\U00002A66', - "seArr;": '\U000021D8', - "searhk;": '\U00002925', - "searr;": '\U00002198', - "searrow;": '\U00002198', - "sect;": '\U000000A7', - "semi;": '\U0000003B', - "seswar;": '\U00002929', - "setminus;": '\U00002216', - "setmn;": '\U00002216', - "sext;": '\U00002736', - "sfr;": '\U0001D530', - "sfrown;": '\U00002322', - "sharp;": '\U0000266F', - "shchcy;": '\U00000449', - "shcy;": '\U00000448', - "shortmid;": '\U00002223', - "shortparallel;": '\U00002225', - "shy;": '\U000000AD', - "sigma;": '\U000003C3', - "sigmaf;": '\U000003C2', - "sigmav;": '\U000003C2', - "sim;": '\U0000223C', - "simdot;": '\U00002A6A', - "sime;": '\U00002243', - "simeq;": '\U00002243', - "simg;": '\U00002A9E', - "simgE;": '\U00002AA0', - "siml;": '\U00002A9D', - "simlE;": '\U00002A9F', - "simne;": '\U00002246', - "simplus;": '\U00002A24', - "simrarr;": '\U00002972', - "slarr;": '\U00002190', - "smallsetminus;": '\U00002216', - "smashp;": '\U00002A33', - "smeparsl;": '\U000029E4', - "smid;": '\U00002223', - "smile;": '\U00002323', - "smt;": '\U00002AAA', - "smte;": '\U00002AAC', - "softcy;": '\U0000044C', - "sol;": '\U0000002F', - "solb;": '\U000029C4', - "solbar;": '\U0000233F', - "sopf;": '\U0001D564', - "spades;": '\U00002660', - "spadesuit;": '\U00002660', - "spar;": '\U00002225', - "sqcap;": '\U00002293', - "sqcup;": '\U00002294', - "sqsub;": '\U0000228F', - "sqsube;": '\U00002291', - "sqsubset;": '\U0000228F', - "sqsubseteq;": '\U00002291', - "sqsup;": '\U00002290', - "sqsupe;": '\U00002292', - "sqsupset;": '\U00002290', - "sqsupseteq;": '\U00002292', - "squ;": '\U000025A1', - "square;": '\U000025A1', - "squarf;": '\U000025AA', - "squf;": '\U000025AA', - "srarr;": '\U00002192', - "sscr;": '\U0001D4C8', - "ssetmn;": '\U00002216', - "ssmile;": '\U00002323', - "sstarf;": '\U000022C6', - "star;": '\U00002606', - "starf;": '\U00002605', - "straightepsilon;": '\U000003F5', - "straightphi;": '\U000003D5', - "strns;": '\U000000AF', - "sub;": '\U00002282', - "subE;": '\U00002AC5', - "subdot;": '\U00002ABD', - "sube;": '\U00002286', - "subedot;": '\U00002AC3', - "submult;": '\U00002AC1', - "subnE;": '\U00002ACB', - "subne;": '\U0000228A', - "subplus;": '\U00002ABF', - "subrarr;": '\U00002979', - "subset;": '\U00002282', - "subseteq;": '\U00002286', - "subseteqq;": '\U00002AC5', - "subsetneq;": '\U0000228A', - "subsetneqq;": '\U00002ACB', - "subsim;": '\U00002AC7', - "subsub;": '\U00002AD5', - "subsup;": '\U00002AD3', - "succ;": '\U0000227B', - "succapprox;": '\U00002AB8', - "succcurlyeq;": '\U0000227D', - "succeq;": '\U00002AB0', - "succnapprox;": '\U00002ABA', - "succneqq;": '\U00002AB6', - "succnsim;": '\U000022E9', - "succsim;": '\U0000227F', - "sum;": '\U00002211', - "sung;": '\U0000266A', - "sup;": '\U00002283', - "sup1;": '\U000000B9', - "sup2;": '\U000000B2', - "sup3;": '\U000000B3', - "supE;": '\U00002AC6', - "supdot;": '\U00002ABE', - "supdsub;": '\U00002AD8', - "supe;": '\U00002287', - "supedot;": '\U00002AC4', - "suphsol;": '\U000027C9', - "suphsub;": '\U00002AD7', - "suplarr;": '\U0000297B', - "supmult;": '\U00002AC2', - "supnE;": '\U00002ACC', - "supne;": '\U0000228B', - "supplus;": '\U00002AC0', - "supset;": '\U00002283', - "supseteq;": '\U00002287', - "supseteqq;": '\U00002AC6', - "supsetneq;": '\U0000228B', - "supsetneqq;": '\U00002ACC', - "supsim;": '\U00002AC8', - "supsub;": '\U00002AD4', - "supsup;": '\U00002AD6', - "swArr;": '\U000021D9', - "swarhk;": '\U00002926', - "swarr;": '\U00002199', - "swarrow;": '\U00002199', - "swnwar;": '\U0000292A', - "szlig;": '\U000000DF', - "target;": '\U00002316', - "tau;": '\U000003C4', - "tbrk;": '\U000023B4', - "tcaron;": '\U00000165', - "tcedil;": '\U00000163', - "tcy;": '\U00000442', - "tdot;": '\U000020DB', - "telrec;": '\U00002315', - "tfr;": '\U0001D531', - "there4;": '\U00002234', - "therefore;": '\U00002234', - "theta;": '\U000003B8', - "thetasym;": '\U000003D1', - "thetav;": '\U000003D1', - "thickapprox;": '\U00002248', - "thicksim;": '\U0000223C', - "thinsp;": '\U00002009', - "thkap;": '\U00002248', - "thksim;": '\U0000223C', - "thorn;": '\U000000FE', - "tilde;": '\U000002DC', - "times;": '\U000000D7', - "timesb;": '\U000022A0', - "timesbar;": '\U00002A31', - "timesd;": '\U00002A30', - "tint;": '\U0000222D', - "toea;": '\U00002928', - "top;": '\U000022A4', - "topbot;": '\U00002336', - "topcir;": '\U00002AF1', - "topf;": '\U0001D565', - "topfork;": '\U00002ADA', - "tosa;": '\U00002929', - "tprime;": '\U00002034', - "trade;": '\U00002122', - "triangle;": '\U000025B5', - "triangledown;": '\U000025BF', - "triangleleft;": '\U000025C3', - "trianglelefteq;": '\U000022B4', - "triangleq;": '\U0000225C', - "triangleright;": '\U000025B9', - "trianglerighteq;": '\U000022B5', - "tridot;": '\U000025EC', - "trie;": '\U0000225C', - "triminus;": '\U00002A3A', - "triplus;": '\U00002A39', - "trisb;": '\U000029CD', - "tritime;": '\U00002A3B', - "trpezium;": '\U000023E2', - "tscr;": '\U0001D4C9', - "tscy;": '\U00000446', - "tshcy;": '\U0000045B', - "tstrok;": '\U00000167', - "twixt;": '\U0000226C', - "twoheadleftarrow;": '\U0000219E', - "twoheadrightarrow;": '\U000021A0', - "uArr;": '\U000021D1', - "uHar;": '\U00002963', - "uacute;": '\U000000FA', - "uarr;": '\U00002191', - "ubrcy;": '\U0000045E', - "ubreve;": '\U0000016D', - "ucirc;": '\U000000FB', - "ucy;": '\U00000443', - "udarr;": '\U000021C5', - "udblac;": '\U00000171', - "udhar;": '\U0000296E', - "ufisht;": '\U0000297E', - "ufr;": '\U0001D532', - "ugrave;": '\U000000F9', - "uharl;": '\U000021BF', - "uharr;": '\U000021BE', - "uhblk;": '\U00002580', - "ulcorn;": '\U0000231C', - "ulcorner;": '\U0000231C', - "ulcrop;": '\U0000230F', - "ultri;": '\U000025F8', - "umacr;": '\U0000016B', - "uml;": '\U000000A8', - "uogon;": '\U00000173', - "uopf;": '\U0001D566', - "uparrow;": '\U00002191', - "updownarrow;": '\U00002195', - "upharpoonleft;": '\U000021BF', - "upharpoonright;": '\U000021BE', - "uplus;": '\U0000228E', - "upsi;": '\U000003C5', - "upsih;": '\U000003D2', - "upsilon;": '\U000003C5', - "upuparrows;": '\U000021C8', - "urcorn;": '\U0000231D', - "urcorner;": '\U0000231D', - "urcrop;": '\U0000230E', - "uring;": '\U0000016F', - "urtri;": '\U000025F9', - "uscr;": '\U0001D4CA', - "utdot;": '\U000022F0', - "utilde;": '\U00000169', - "utri;": '\U000025B5', - "utrif;": '\U000025B4', - "uuarr;": '\U000021C8', - "uuml;": '\U000000FC', - "uwangle;": '\U000029A7', - "vArr;": '\U000021D5', - "vBar;": '\U00002AE8', - "vBarv;": '\U00002AE9', - "vDash;": '\U000022A8', - "vangrt;": '\U0000299C', - "varepsilon;": '\U000003F5', - "varkappa;": '\U000003F0', - "varnothing;": '\U00002205', - "varphi;": '\U000003D5', - "varpi;": '\U000003D6', - "varpropto;": '\U0000221D', - "varr;": '\U00002195', - "varrho;": '\U000003F1', - "varsigma;": '\U000003C2', - "vartheta;": '\U000003D1', - "vartriangleleft;": '\U000022B2', - "vartriangleright;": '\U000022B3', - "vcy;": '\U00000432', - "vdash;": '\U000022A2', - "vee;": '\U00002228', - "veebar;": '\U000022BB', - "veeeq;": '\U0000225A', - "vellip;": '\U000022EE', - "verbar;": '\U0000007C', - "vert;": '\U0000007C', - "vfr;": '\U0001D533', - "vltri;": '\U000022B2', - "vopf;": '\U0001D567', - "vprop;": '\U0000221D', - "vrtri;": '\U000022B3', - "vscr;": '\U0001D4CB', - "vzigzag;": '\U0000299A', - "wcirc;": '\U00000175', - "wedbar;": '\U00002A5F', - "wedge;": '\U00002227', - "wedgeq;": '\U00002259', - "weierp;": '\U00002118', - "wfr;": '\U0001D534', - "wopf;": '\U0001D568', - "wp;": '\U00002118', - "wr;": '\U00002240', - "wreath;": '\U00002240', - "wscr;": '\U0001D4CC', - "xcap;": '\U000022C2', - "xcirc;": '\U000025EF', - "xcup;": '\U000022C3', - "xdtri;": '\U000025BD', - "xfr;": '\U0001D535', - "xhArr;": '\U000027FA', - "xharr;": '\U000027F7', - "xi;": '\U000003BE', - "xlArr;": '\U000027F8', - "xlarr;": '\U000027F5', - "xmap;": '\U000027FC', - "xnis;": '\U000022FB', - "xodot;": '\U00002A00', - "xopf;": '\U0001D569', - "xoplus;": '\U00002A01', - "xotime;": '\U00002A02', - "xrArr;": '\U000027F9', - "xrarr;": '\U000027F6', - "xscr;": '\U0001D4CD', - "xsqcup;": '\U00002A06', - "xuplus;": '\U00002A04', - "xutri;": '\U000025B3', - "xvee;": '\U000022C1', - "xwedge;": '\U000022C0', - "yacute;": '\U000000FD', - "yacy;": '\U0000044F', - "ycirc;": '\U00000177', - "ycy;": '\U0000044B', - "yen;": '\U000000A5', - "yfr;": '\U0001D536', - "yicy;": '\U00000457', - "yopf;": '\U0001D56A', - "yscr;": '\U0001D4CE', - "yucy;": '\U0000044E', - "yuml;": '\U000000FF', - "zacute;": '\U0000017A', - "zcaron;": '\U0000017E', - "zcy;": '\U00000437', - "zdot;": '\U0000017C', - "zeetrf;": '\U00002128', - "zeta;": '\U000003B6', - "zfr;": '\U0001D537', - "zhcy;": '\U00000436', - "zigrarr;": '\U000021DD', - "zopf;": '\U0001D56B', - "zscr;": '\U0001D4CF', - "zwj;": '\U0000200D', - "zwnj;": '\U0000200C', - "AElig": '\U000000C6', - "AMP": '\U00000026', - "Aacute": '\U000000C1', - "Acirc": '\U000000C2', - "Agrave": '\U000000C0', - "Aring": '\U000000C5', - "Atilde": '\U000000C3', - "Auml": '\U000000C4', - "COPY": '\U000000A9', - "Ccedil": '\U000000C7', - "ETH": '\U000000D0', - "Eacute": '\U000000C9', - "Ecirc": '\U000000CA', - "Egrave": '\U000000C8', - "Euml": '\U000000CB', - "GT": '\U0000003E', - "Iacute": '\U000000CD', - "Icirc": '\U000000CE', - "Igrave": '\U000000CC', - "Iuml": '\U000000CF', - "LT": '\U0000003C', - "Ntilde": '\U000000D1', - "Oacute": '\U000000D3', - "Ocirc": '\U000000D4', - "Ograve": '\U000000D2', - "Oslash": '\U000000D8', - "Otilde": '\U000000D5', - "Ouml": '\U000000D6', - "QUOT": '\U00000022', - "REG": '\U000000AE', - "THORN": '\U000000DE', - "Uacute": '\U000000DA', - "Ucirc": '\U000000DB', - "Ugrave": '\U000000D9', - "Uuml": '\U000000DC', - "Yacute": '\U000000DD', - "aacute": '\U000000E1', - "acirc": '\U000000E2', - "acute": '\U000000B4', - "aelig": '\U000000E6', - "agrave": '\U000000E0', - "amp": '\U00000026', - "aring": '\U000000E5', - "atilde": '\U000000E3', - "auml": '\U000000E4', - "brvbar": '\U000000A6', - "ccedil": '\U000000E7', - "cedil": '\U000000B8', - "cent": '\U000000A2', - "copy": '\U000000A9', - "curren": '\U000000A4', - "deg": '\U000000B0', - "divide": '\U000000F7', - "eacute": '\U000000E9', - "ecirc": '\U000000EA', - "egrave": '\U000000E8', - "eth": '\U000000F0', - "euml": '\U000000EB', - "frac12": '\U000000BD', - "frac14": '\U000000BC', - "frac34": '\U000000BE', - "gt": '\U0000003E', - "iacute": '\U000000ED', - "icirc": '\U000000EE', - "iexcl": '\U000000A1', - "igrave": '\U000000EC', - "iquest": '\U000000BF', - "iuml": '\U000000EF', - "laquo": '\U000000AB', - "lt": '\U0000003C', - "macr": '\U000000AF', - "micro": '\U000000B5', - "middot": '\U000000B7', - "nbsp": '\U000000A0', - "not": '\U000000AC', - "ntilde": '\U000000F1', - "oacute": '\U000000F3', - "ocirc": '\U000000F4', - "ograve": '\U000000F2', - "ordf": '\U000000AA', - "ordm": '\U000000BA', - "oslash": '\U000000F8', - "otilde": '\U000000F5', - "ouml": '\U000000F6', - "para": '\U000000B6', - "plusmn": '\U000000B1', - "pound": '\U000000A3', - "quot": '\U00000022', - "raquo": '\U000000BB', - "reg": '\U000000AE', - "sect": '\U000000A7', - "shy": '\U000000AD', - "sup1": '\U000000B9', - "sup2": '\U000000B2', - "sup3": '\U000000B3', - "szlig": '\U000000DF', - "thorn": '\U000000FE', - "times": '\U000000D7', - "uacute": '\U000000FA', - "ucirc": '\U000000FB', - "ugrave": '\U000000F9', - "uml": '\U000000A8', - "uuml": '\U000000FC', - "yacute": '\U000000FD', - "yen": '\U000000A5', - "yuml": '\U000000FF', -} +var entity map[string]rune // HTML entities that are two unicode codepoints. -var entity2 = map[string][2]rune{ - // TODO(nigeltao): Handle replacements that are wider than their names. - // "nLt;": {'\u226A', '\u20D2'}, - // "nGt;": {'\u226B', '\u20D2'}, - "NotEqualTilde;": {'\u2242', '\u0338'}, - "NotGreaterFullEqual;": {'\u2267', '\u0338'}, - "NotGreaterGreater;": {'\u226B', '\u0338'}, - "NotGreaterSlantEqual;": {'\u2A7E', '\u0338'}, - "NotHumpDownHump;": {'\u224E', '\u0338'}, - "NotHumpEqual;": {'\u224F', '\u0338'}, - "NotLeftTriangleBar;": {'\u29CF', '\u0338'}, - "NotLessLess;": {'\u226A', '\u0338'}, - "NotLessSlantEqual;": {'\u2A7D', '\u0338'}, - "NotNestedGreaterGreater;": {'\u2AA2', '\u0338'}, - "NotNestedLessLess;": {'\u2AA1', '\u0338'}, - "NotPrecedesEqual;": {'\u2AAF', '\u0338'}, - "NotRightTriangleBar;": {'\u29D0', '\u0338'}, - "NotSquareSubset;": {'\u228F', '\u0338'}, - "NotSquareSuperset;": {'\u2290', '\u0338'}, - "NotSubset;": {'\u2282', '\u20D2'}, - "NotSucceedsEqual;": {'\u2AB0', '\u0338'}, - "NotSucceedsTilde;": {'\u227F', '\u0338'}, - "NotSuperset;": {'\u2283', '\u20D2'}, - "ThickSpace;": {'\u205F', '\u200A'}, - "acE;": {'\u223E', '\u0333'}, - "bne;": {'\u003D', '\u20E5'}, - "bnequiv;": {'\u2261', '\u20E5'}, - "caps;": {'\u2229', '\uFE00'}, - "cups;": {'\u222A', '\uFE00'}, - "fjlig;": {'\u0066', '\u006A'}, - "gesl;": {'\u22DB', '\uFE00'}, - "gvertneqq;": {'\u2269', '\uFE00'}, - "gvnE;": {'\u2269', '\uFE00'}, - "lates;": {'\u2AAD', '\uFE00'}, - "lesg;": {'\u22DA', '\uFE00'}, - "lvertneqq;": {'\u2268', '\uFE00'}, - "lvnE;": {'\u2268', '\uFE00'}, - "nGg;": {'\u22D9', '\u0338'}, - "nGtv;": {'\u226B', '\u0338'}, - "nLl;": {'\u22D8', '\u0338'}, - "nLtv;": {'\u226A', '\u0338'}, - "nang;": {'\u2220', '\u20D2'}, - "napE;": {'\u2A70', '\u0338'}, - "napid;": {'\u224B', '\u0338'}, - "nbump;": {'\u224E', '\u0338'}, - "nbumpe;": {'\u224F', '\u0338'}, - "ncongdot;": {'\u2A6D', '\u0338'}, - "nedot;": {'\u2250', '\u0338'}, - "nesim;": {'\u2242', '\u0338'}, - "ngE;": {'\u2267', '\u0338'}, - "ngeqq;": {'\u2267', '\u0338'}, - "ngeqslant;": {'\u2A7E', '\u0338'}, - "nges;": {'\u2A7E', '\u0338'}, - "nlE;": {'\u2266', '\u0338'}, - "nleqq;": {'\u2266', '\u0338'}, - "nleqslant;": {'\u2A7D', '\u0338'}, - "nles;": {'\u2A7D', '\u0338'}, - "notinE;": {'\u22F9', '\u0338'}, - "notindot;": {'\u22F5', '\u0338'}, - "nparsl;": {'\u2AFD', '\u20E5'}, - "npart;": {'\u2202', '\u0338'}, - "npre;": {'\u2AAF', '\u0338'}, - "npreceq;": {'\u2AAF', '\u0338'}, - "nrarrc;": {'\u2933', '\u0338'}, - "nrarrw;": {'\u219D', '\u0338'}, - "nsce;": {'\u2AB0', '\u0338'}, - "nsubE;": {'\u2AC5', '\u0338'}, - "nsubset;": {'\u2282', '\u20D2'}, - "nsubseteqq;": {'\u2AC5', '\u0338'}, - "nsucceq;": {'\u2AB0', '\u0338'}, - "nsupE;": {'\u2AC6', '\u0338'}, - "nsupset;": {'\u2283', '\u20D2'}, - "nsupseteqq;": {'\u2AC6', '\u0338'}, - "nvap;": {'\u224D', '\u20D2'}, - "nvge;": {'\u2265', '\u20D2'}, - "nvgt;": {'\u003E', '\u20D2'}, - "nvle;": {'\u2264', '\u20D2'}, - "nvlt;": {'\u003C', '\u20D2'}, - "nvltrie;": {'\u22B4', '\u20D2'}, - "nvrtrie;": {'\u22B5', '\u20D2'}, - "nvsim;": {'\u223C', '\u20D2'}, - "race;": {'\u223D', '\u0331'}, - "smtes;": {'\u2AAC', '\uFE00'}, - "sqcaps;": {'\u2293', '\uFE00'}, - "sqcups;": {'\u2294', '\uFE00'}, - "varsubsetneq;": {'\u228A', '\uFE00'}, - "varsubsetneqq;": {'\u2ACB', '\uFE00'}, - "varsupsetneq;": {'\u228B', '\uFE00'}, - "varsupsetneqq;": {'\u2ACC', '\uFE00'}, - "vnsub;": {'\u2282', '\u20D2'}, - "vnsup;": {'\u2283', '\u20D2'}, - "vsubnE;": {'\u2ACB', '\uFE00'}, - "vsubne;": {'\u228A', '\uFE00'}, - "vsupnE;": {'\u2ACC', '\uFE00'}, - "vsupne;": {'\u228B', '\uFE00'}, +var entity2 map[string][2]rune + +// populateMapsOnce guards calling populateMaps. +var populateMapsOnce sync.Once + +// populateMaps populates entity and entity2. +func populateMaps() { + entity = map[string]rune{ + "AElig;": '\U000000C6', + "AMP;": '\U00000026', + "Aacute;": '\U000000C1', + "Abreve;": '\U00000102', + "Acirc;": '\U000000C2', + "Acy;": '\U00000410', + "Afr;": '\U0001D504', + "Agrave;": '\U000000C0', + "Alpha;": '\U00000391', + "Amacr;": '\U00000100', + "And;": '\U00002A53', + "Aogon;": '\U00000104', + "Aopf;": '\U0001D538', + "ApplyFunction;": '\U00002061', + "Aring;": '\U000000C5', + "Ascr;": '\U0001D49C', + "Assign;": '\U00002254', + "Atilde;": '\U000000C3', + "Auml;": '\U000000C4', + "Backslash;": '\U00002216', + "Barv;": '\U00002AE7', + "Barwed;": '\U00002306', + "Bcy;": '\U00000411', + "Because;": '\U00002235', + "Bernoullis;": '\U0000212C', + "Beta;": '\U00000392', + "Bfr;": '\U0001D505', + "Bopf;": '\U0001D539', + "Breve;": '\U000002D8', + "Bscr;": '\U0000212C', + "Bumpeq;": '\U0000224E', + "CHcy;": '\U00000427', + "COPY;": '\U000000A9', + "Cacute;": '\U00000106', + "Cap;": '\U000022D2', + "CapitalDifferentialD;": '\U00002145', + "Cayleys;": '\U0000212D', + "Ccaron;": '\U0000010C', + "Ccedil;": '\U000000C7', + "Ccirc;": '\U00000108', + "Cconint;": '\U00002230', + "Cdot;": '\U0000010A', + "Cedilla;": '\U000000B8', + "CenterDot;": '\U000000B7', + "Cfr;": '\U0000212D', + "Chi;": '\U000003A7', + "CircleDot;": '\U00002299', + "CircleMinus;": '\U00002296', + "CirclePlus;": '\U00002295', + "CircleTimes;": '\U00002297', + "ClockwiseContourIntegral;": '\U00002232', + "CloseCurlyDoubleQuote;": '\U0000201D', + "CloseCurlyQuote;": '\U00002019', + "Colon;": '\U00002237', + "Colone;": '\U00002A74', + "Congruent;": '\U00002261', + "Conint;": '\U0000222F', + "ContourIntegral;": '\U0000222E', + "Copf;": '\U00002102', + "Coproduct;": '\U00002210', + "CounterClockwiseContourIntegral;": '\U00002233', + "Cross;": '\U00002A2F', + "Cscr;": '\U0001D49E', + "Cup;": '\U000022D3', + "CupCap;": '\U0000224D', + "DD;": '\U00002145', + "DDotrahd;": '\U00002911', + "DJcy;": '\U00000402', + "DScy;": '\U00000405', + "DZcy;": '\U0000040F', + "Dagger;": '\U00002021', + "Darr;": '\U000021A1', + "Dashv;": '\U00002AE4', + "Dcaron;": '\U0000010E', + "Dcy;": '\U00000414', + "Del;": '\U00002207', + "Delta;": '\U00000394', + "Dfr;": '\U0001D507', + "DiacriticalAcute;": '\U000000B4', + "DiacriticalDot;": '\U000002D9', + "DiacriticalDoubleAcute;": '\U000002DD', + "DiacriticalGrave;": '\U00000060', + "DiacriticalTilde;": '\U000002DC', + "Diamond;": '\U000022C4', + "DifferentialD;": '\U00002146', + "Dopf;": '\U0001D53B', + "Dot;": '\U000000A8', + "DotDot;": '\U000020DC', + "DotEqual;": '\U00002250', + "DoubleContourIntegral;": '\U0000222F', + "DoubleDot;": '\U000000A8', + "DoubleDownArrow;": '\U000021D3', + "DoubleLeftArrow;": '\U000021D0', + "DoubleLeftRightArrow;": '\U000021D4', + "DoubleLeftTee;": '\U00002AE4', + "DoubleLongLeftArrow;": '\U000027F8', + "DoubleLongLeftRightArrow;": '\U000027FA', + "DoubleLongRightArrow;": '\U000027F9', + "DoubleRightArrow;": '\U000021D2', + "DoubleRightTee;": '\U000022A8', + "DoubleUpArrow;": '\U000021D1', + "DoubleUpDownArrow;": '\U000021D5', + "DoubleVerticalBar;": '\U00002225', + "DownArrow;": '\U00002193', + "DownArrowBar;": '\U00002913', + "DownArrowUpArrow;": '\U000021F5', + "DownBreve;": '\U00000311', + "DownLeftRightVector;": '\U00002950', + "DownLeftTeeVector;": '\U0000295E', + "DownLeftVector;": '\U000021BD', + "DownLeftVectorBar;": '\U00002956', + "DownRightTeeVector;": '\U0000295F', + "DownRightVector;": '\U000021C1', + "DownRightVectorBar;": '\U00002957', + "DownTee;": '\U000022A4', + "DownTeeArrow;": '\U000021A7', + "Downarrow;": '\U000021D3', + "Dscr;": '\U0001D49F', + "Dstrok;": '\U00000110', + "ENG;": '\U0000014A', + "ETH;": '\U000000D0', + "Eacute;": '\U000000C9', + "Ecaron;": '\U0000011A', + "Ecirc;": '\U000000CA', + "Ecy;": '\U0000042D', + "Edot;": '\U00000116', + "Efr;": '\U0001D508', + "Egrave;": '\U000000C8', + "Element;": '\U00002208', + "Emacr;": '\U00000112', + "EmptySmallSquare;": '\U000025FB', + "EmptyVerySmallSquare;": '\U000025AB', + "Eogon;": '\U00000118', + "Eopf;": '\U0001D53C', + "Epsilon;": '\U00000395', + "Equal;": '\U00002A75', + "EqualTilde;": '\U00002242', + "Equilibrium;": '\U000021CC', + "Escr;": '\U00002130', + "Esim;": '\U00002A73', + "Eta;": '\U00000397', + "Euml;": '\U000000CB', + "Exists;": '\U00002203', + "ExponentialE;": '\U00002147', + "Fcy;": '\U00000424', + "Ffr;": '\U0001D509', + "FilledSmallSquare;": '\U000025FC', + "FilledVerySmallSquare;": '\U000025AA', + "Fopf;": '\U0001D53D', + "ForAll;": '\U00002200', + "Fouriertrf;": '\U00002131', + "Fscr;": '\U00002131', + "GJcy;": '\U00000403', + "GT;": '\U0000003E', + "Gamma;": '\U00000393', + "Gammad;": '\U000003DC', + "Gbreve;": '\U0000011E', + "Gcedil;": '\U00000122', + "Gcirc;": '\U0000011C', + "Gcy;": '\U00000413', + "Gdot;": '\U00000120', + "Gfr;": '\U0001D50A', + "Gg;": '\U000022D9', + "Gopf;": '\U0001D53E', + "GreaterEqual;": '\U00002265', + "GreaterEqualLess;": '\U000022DB', + "GreaterFullEqual;": '\U00002267', + "GreaterGreater;": '\U00002AA2', + "GreaterLess;": '\U00002277', + "GreaterSlantEqual;": '\U00002A7E', + "GreaterTilde;": '\U00002273', + "Gscr;": '\U0001D4A2', + "Gt;": '\U0000226B', + "HARDcy;": '\U0000042A', + "Hacek;": '\U000002C7', + "Hat;": '\U0000005E', + "Hcirc;": '\U00000124', + "Hfr;": '\U0000210C', + "HilbertSpace;": '\U0000210B', + "Hopf;": '\U0000210D', + "HorizontalLine;": '\U00002500', + "Hscr;": '\U0000210B', + "Hstrok;": '\U00000126', + "HumpDownHump;": '\U0000224E', + "HumpEqual;": '\U0000224F', + "IEcy;": '\U00000415', + "IJlig;": '\U00000132', + "IOcy;": '\U00000401', + "Iacute;": '\U000000CD', + "Icirc;": '\U000000CE', + "Icy;": '\U00000418', + "Idot;": '\U00000130', + "Ifr;": '\U00002111', + "Igrave;": '\U000000CC', + "Im;": '\U00002111', + "Imacr;": '\U0000012A', + "ImaginaryI;": '\U00002148', + "Implies;": '\U000021D2', + "Int;": '\U0000222C', + "Integral;": '\U0000222B', + "Intersection;": '\U000022C2', + "InvisibleComma;": '\U00002063', + "InvisibleTimes;": '\U00002062', + "Iogon;": '\U0000012E', + "Iopf;": '\U0001D540', + "Iota;": '\U00000399', + "Iscr;": '\U00002110', + "Itilde;": '\U00000128', + "Iukcy;": '\U00000406', + "Iuml;": '\U000000CF', + "Jcirc;": '\U00000134', + "Jcy;": '\U00000419', + "Jfr;": '\U0001D50D', + "Jopf;": '\U0001D541', + "Jscr;": '\U0001D4A5', + "Jsercy;": '\U00000408', + "Jukcy;": '\U00000404', + "KHcy;": '\U00000425', + "KJcy;": '\U0000040C', + "Kappa;": '\U0000039A', + "Kcedil;": '\U00000136', + "Kcy;": '\U0000041A', + "Kfr;": '\U0001D50E', + "Kopf;": '\U0001D542', + "Kscr;": '\U0001D4A6', + "LJcy;": '\U00000409', + "LT;": '\U0000003C', + "Lacute;": '\U00000139', + "Lambda;": '\U0000039B', + "Lang;": '\U000027EA', + "Laplacetrf;": '\U00002112', + "Larr;": '\U0000219E', + "Lcaron;": '\U0000013D', + "Lcedil;": '\U0000013B', + "Lcy;": '\U0000041B', + "LeftAngleBracket;": '\U000027E8', + "LeftArrow;": '\U00002190', + "LeftArrowBar;": '\U000021E4', + "LeftArrowRightArrow;": '\U000021C6', + "LeftCeiling;": '\U00002308', + "LeftDoubleBracket;": '\U000027E6', + "LeftDownTeeVector;": '\U00002961', + "LeftDownVector;": '\U000021C3', + "LeftDownVectorBar;": '\U00002959', + "LeftFloor;": '\U0000230A', + "LeftRightArrow;": '\U00002194', + "LeftRightVector;": '\U0000294E', + "LeftTee;": '\U000022A3', + "LeftTeeArrow;": '\U000021A4', + "LeftTeeVector;": '\U0000295A', + "LeftTriangle;": '\U000022B2', + "LeftTriangleBar;": '\U000029CF', + "LeftTriangleEqual;": '\U000022B4', + "LeftUpDownVector;": '\U00002951', + "LeftUpTeeVector;": '\U00002960', + "LeftUpVector;": '\U000021BF', + "LeftUpVectorBar;": '\U00002958', + "LeftVector;": '\U000021BC', + "LeftVectorBar;": '\U00002952', + "Leftarrow;": '\U000021D0', + "Leftrightarrow;": '\U000021D4', + "LessEqualGreater;": '\U000022DA', + "LessFullEqual;": '\U00002266', + "LessGreater;": '\U00002276', + "LessLess;": '\U00002AA1', + "LessSlantEqual;": '\U00002A7D', + "LessTilde;": '\U00002272', + "Lfr;": '\U0001D50F', + "Ll;": '\U000022D8', + "Lleftarrow;": '\U000021DA', + "Lmidot;": '\U0000013F', + "LongLeftArrow;": '\U000027F5', + "LongLeftRightArrow;": '\U000027F7', + "LongRightArrow;": '\U000027F6', + "Longleftarrow;": '\U000027F8', + "Longleftrightarrow;": '\U000027FA', + "Longrightarrow;": '\U000027F9', + "Lopf;": '\U0001D543', + "LowerLeftArrow;": '\U00002199', + "LowerRightArrow;": '\U00002198', + "Lscr;": '\U00002112', + "Lsh;": '\U000021B0', + "Lstrok;": '\U00000141', + "Lt;": '\U0000226A', + "Map;": '\U00002905', + "Mcy;": '\U0000041C', + "MediumSpace;": '\U0000205F', + "Mellintrf;": '\U00002133', + "Mfr;": '\U0001D510', + "MinusPlus;": '\U00002213', + "Mopf;": '\U0001D544', + "Mscr;": '\U00002133', + "Mu;": '\U0000039C', + "NJcy;": '\U0000040A', + "Nacute;": '\U00000143', + "Ncaron;": '\U00000147', + "Ncedil;": '\U00000145', + "Ncy;": '\U0000041D', + "NegativeMediumSpace;": '\U0000200B', + "NegativeThickSpace;": '\U0000200B', + "NegativeThinSpace;": '\U0000200B', + "NegativeVeryThinSpace;": '\U0000200B', + "NestedGreaterGreater;": '\U0000226B', + "NestedLessLess;": '\U0000226A', + "NewLine;": '\U0000000A', + "Nfr;": '\U0001D511', + "NoBreak;": '\U00002060', + "NonBreakingSpace;": '\U000000A0', + "Nopf;": '\U00002115', + "Not;": '\U00002AEC', + "NotCongruent;": '\U00002262', + "NotCupCap;": '\U0000226D', + "NotDoubleVerticalBar;": '\U00002226', + "NotElement;": '\U00002209', + "NotEqual;": '\U00002260', + "NotExists;": '\U00002204', + "NotGreater;": '\U0000226F', + "NotGreaterEqual;": '\U00002271', + "NotGreaterLess;": '\U00002279', + "NotGreaterTilde;": '\U00002275', + "NotLeftTriangle;": '\U000022EA', + "NotLeftTriangleEqual;": '\U000022EC', + "NotLess;": '\U0000226E', + "NotLessEqual;": '\U00002270', + "NotLessGreater;": '\U00002278', + "NotLessTilde;": '\U00002274', + "NotPrecedes;": '\U00002280', + "NotPrecedesSlantEqual;": '\U000022E0', + "NotReverseElement;": '\U0000220C', + "NotRightTriangle;": '\U000022EB', + "NotRightTriangleEqual;": '\U000022ED', + "NotSquareSubsetEqual;": '\U000022E2', + "NotSquareSupersetEqual;": '\U000022E3', + "NotSubsetEqual;": '\U00002288', + "NotSucceeds;": '\U00002281', + "NotSucceedsSlantEqual;": '\U000022E1', + "NotSupersetEqual;": '\U00002289', + "NotTilde;": '\U00002241', + "NotTildeEqual;": '\U00002244', + "NotTildeFullEqual;": '\U00002247', + "NotTildeTilde;": '\U00002249', + "NotVerticalBar;": '\U00002224', + "Nscr;": '\U0001D4A9', + "Ntilde;": '\U000000D1', + "Nu;": '\U0000039D', + "OElig;": '\U00000152', + "Oacute;": '\U000000D3', + "Ocirc;": '\U000000D4', + "Ocy;": '\U0000041E', + "Odblac;": '\U00000150', + "Ofr;": '\U0001D512', + "Ograve;": '\U000000D2', + "Omacr;": '\U0000014C', + "Omega;": '\U000003A9', + "Omicron;": '\U0000039F', + "Oopf;": '\U0001D546', + "OpenCurlyDoubleQuote;": '\U0000201C', + "OpenCurlyQuote;": '\U00002018', + "Or;": '\U00002A54', + "Oscr;": '\U0001D4AA', + "Oslash;": '\U000000D8', + "Otilde;": '\U000000D5', + "Otimes;": '\U00002A37', + "Ouml;": '\U000000D6', + "OverBar;": '\U0000203E', + "OverBrace;": '\U000023DE', + "OverBracket;": '\U000023B4', + "OverParenthesis;": '\U000023DC', + "PartialD;": '\U00002202', + "Pcy;": '\U0000041F', + "Pfr;": '\U0001D513', + "Phi;": '\U000003A6', + "Pi;": '\U000003A0', + "PlusMinus;": '\U000000B1', + "Poincareplane;": '\U0000210C', + "Popf;": '\U00002119', + "Pr;": '\U00002ABB', + "Precedes;": '\U0000227A', + "PrecedesEqual;": '\U00002AAF', + "PrecedesSlantEqual;": '\U0000227C', + "PrecedesTilde;": '\U0000227E', + "Prime;": '\U00002033', + "Product;": '\U0000220F', + "Proportion;": '\U00002237', + "Proportional;": '\U0000221D', + "Pscr;": '\U0001D4AB', + "Psi;": '\U000003A8', + "QUOT;": '\U00000022', + "Qfr;": '\U0001D514', + "Qopf;": '\U0000211A', + "Qscr;": '\U0001D4AC', + "RBarr;": '\U00002910', + "REG;": '\U000000AE', + "Racute;": '\U00000154', + "Rang;": '\U000027EB', + "Rarr;": '\U000021A0', + "Rarrtl;": '\U00002916', + "Rcaron;": '\U00000158', + "Rcedil;": '\U00000156', + "Rcy;": '\U00000420', + "Re;": '\U0000211C', + "ReverseElement;": '\U0000220B', + "ReverseEquilibrium;": '\U000021CB', + "ReverseUpEquilibrium;": '\U0000296F', + "Rfr;": '\U0000211C', + "Rho;": '\U000003A1', + "RightAngleBracket;": '\U000027E9', + "RightArrow;": '\U00002192', + "RightArrowBar;": '\U000021E5', + "RightArrowLeftArrow;": '\U000021C4', + "RightCeiling;": '\U00002309', + "RightDoubleBracket;": '\U000027E7', + "RightDownTeeVector;": '\U0000295D', + "RightDownVector;": '\U000021C2', + "RightDownVectorBar;": '\U00002955', + "RightFloor;": '\U0000230B', + "RightTee;": '\U000022A2', + "RightTeeArrow;": '\U000021A6', + "RightTeeVector;": '\U0000295B', + "RightTriangle;": '\U000022B3', + "RightTriangleBar;": '\U000029D0', + "RightTriangleEqual;": '\U000022B5', + "RightUpDownVector;": '\U0000294F', + "RightUpTeeVector;": '\U0000295C', + "RightUpVector;": '\U000021BE', + "RightUpVectorBar;": '\U00002954', + "RightVector;": '\U000021C0', + "RightVectorBar;": '\U00002953', + "Rightarrow;": '\U000021D2', + "Ropf;": '\U0000211D', + "RoundImplies;": '\U00002970', + "Rrightarrow;": '\U000021DB', + "Rscr;": '\U0000211B', + "Rsh;": '\U000021B1', + "RuleDelayed;": '\U000029F4', + "SHCHcy;": '\U00000429', + "SHcy;": '\U00000428', + "SOFTcy;": '\U0000042C', + "Sacute;": '\U0000015A', + "Sc;": '\U00002ABC', + "Scaron;": '\U00000160', + "Scedil;": '\U0000015E', + "Scirc;": '\U0000015C', + "Scy;": '\U00000421', + "Sfr;": '\U0001D516', + "ShortDownArrow;": '\U00002193', + "ShortLeftArrow;": '\U00002190', + "ShortRightArrow;": '\U00002192', + "ShortUpArrow;": '\U00002191', + "Sigma;": '\U000003A3', + "SmallCircle;": '\U00002218', + "Sopf;": '\U0001D54A', + "Sqrt;": '\U0000221A', + "Square;": '\U000025A1', + "SquareIntersection;": '\U00002293', + "SquareSubset;": '\U0000228F', + "SquareSubsetEqual;": '\U00002291', + "SquareSuperset;": '\U00002290', + "SquareSupersetEqual;": '\U00002292', + "SquareUnion;": '\U00002294', + "Sscr;": '\U0001D4AE', + "Star;": '\U000022C6', + "Sub;": '\U000022D0', + "Subset;": '\U000022D0', + "SubsetEqual;": '\U00002286', + "Succeeds;": '\U0000227B', + "SucceedsEqual;": '\U00002AB0', + "SucceedsSlantEqual;": '\U0000227D', + "SucceedsTilde;": '\U0000227F', + "SuchThat;": '\U0000220B', + "Sum;": '\U00002211', + "Sup;": '\U000022D1', + "Superset;": '\U00002283', + "SupersetEqual;": '\U00002287', + "Supset;": '\U000022D1', + "THORN;": '\U000000DE', + "TRADE;": '\U00002122', + "TSHcy;": '\U0000040B', + "TScy;": '\U00000426', + "Tab;": '\U00000009', + "Tau;": '\U000003A4', + "Tcaron;": '\U00000164', + "Tcedil;": '\U00000162', + "Tcy;": '\U00000422', + "Tfr;": '\U0001D517', + "Therefore;": '\U00002234', + "Theta;": '\U00000398', + "ThinSpace;": '\U00002009', + "Tilde;": '\U0000223C', + "TildeEqual;": '\U00002243', + "TildeFullEqual;": '\U00002245', + "TildeTilde;": '\U00002248', + "Topf;": '\U0001D54B', + "TripleDot;": '\U000020DB', + "Tscr;": '\U0001D4AF', + "Tstrok;": '\U00000166', + "Uacute;": '\U000000DA', + "Uarr;": '\U0000219F', + "Uarrocir;": '\U00002949', + "Ubrcy;": '\U0000040E', + "Ubreve;": '\U0000016C', + "Ucirc;": '\U000000DB', + "Ucy;": '\U00000423', + "Udblac;": '\U00000170', + "Ufr;": '\U0001D518', + "Ugrave;": '\U000000D9', + "Umacr;": '\U0000016A', + "UnderBar;": '\U0000005F', + "UnderBrace;": '\U000023DF', + "UnderBracket;": '\U000023B5', + "UnderParenthesis;": '\U000023DD', + "Union;": '\U000022C3', + "UnionPlus;": '\U0000228E', + "Uogon;": '\U00000172', + "Uopf;": '\U0001D54C', + "UpArrow;": '\U00002191', + "UpArrowBar;": '\U00002912', + "UpArrowDownArrow;": '\U000021C5', + "UpDownArrow;": '\U00002195', + "UpEquilibrium;": '\U0000296E', + "UpTee;": '\U000022A5', + "UpTeeArrow;": '\U000021A5', + "Uparrow;": '\U000021D1', + "Updownarrow;": '\U000021D5', + "UpperLeftArrow;": '\U00002196', + "UpperRightArrow;": '\U00002197', + "Upsi;": '\U000003D2', + "Upsilon;": '\U000003A5', + "Uring;": '\U0000016E', + "Uscr;": '\U0001D4B0', + "Utilde;": '\U00000168', + "Uuml;": '\U000000DC', + "VDash;": '\U000022AB', + "Vbar;": '\U00002AEB', + "Vcy;": '\U00000412', + "Vdash;": '\U000022A9', + "Vdashl;": '\U00002AE6', + "Vee;": '\U000022C1', + "Verbar;": '\U00002016', + "Vert;": '\U00002016', + "VerticalBar;": '\U00002223', + "VerticalLine;": '\U0000007C', + "VerticalSeparator;": '\U00002758', + "VerticalTilde;": '\U00002240', + "VeryThinSpace;": '\U0000200A', + "Vfr;": '\U0001D519', + "Vopf;": '\U0001D54D', + "Vscr;": '\U0001D4B1', + "Vvdash;": '\U000022AA', + "Wcirc;": '\U00000174', + "Wedge;": '\U000022C0', + "Wfr;": '\U0001D51A', + "Wopf;": '\U0001D54E', + "Wscr;": '\U0001D4B2', + "Xfr;": '\U0001D51B', + "Xi;": '\U0000039E', + "Xopf;": '\U0001D54F', + "Xscr;": '\U0001D4B3', + "YAcy;": '\U0000042F', + "YIcy;": '\U00000407', + "YUcy;": '\U0000042E', + "Yacute;": '\U000000DD', + "Ycirc;": '\U00000176', + "Ycy;": '\U0000042B', + "Yfr;": '\U0001D51C', + "Yopf;": '\U0001D550', + "Yscr;": '\U0001D4B4', + "Yuml;": '\U00000178', + "ZHcy;": '\U00000416', + "Zacute;": '\U00000179', + "Zcaron;": '\U0000017D', + "Zcy;": '\U00000417', + "Zdot;": '\U0000017B', + "ZeroWidthSpace;": '\U0000200B', + "Zeta;": '\U00000396', + "Zfr;": '\U00002128', + "Zopf;": '\U00002124', + "Zscr;": '\U0001D4B5', + "aacute;": '\U000000E1', + "abreve;": '\U00000103', + "ac;": '\U0000223E', + "acd;": '\U0000223F', + "acirc;": '\U000000E2', + "acute;": '\U000000B4', + "acy;": '\U00000430', + "aelig;": '\U000000E6', + "af;": '\U00002061', + "afr;": '\U0001D51E', + "agrave;": '\U000000E0', + "alefsym;": '\U00002135', + "aleph;": '\U00002135', + "alpha;": '\U000003B1', + "amacr;": '\U00000101', + "amalg;": '\U00002A3F', + "amp;": '\U00000026', + "and;": '\U00002227', + "andand;": '\U00002A55', + "andd;": '\U00002A5C', + "andslope;": '\U00002A58', + "andv;": '\U00002A5A', + "ang;": '\U00002220', + "ange;": '\U000029A4', + "angle;": '\U00002220', + "angmsd;": '\U00002221', + "angmsdaa;": '\U000029A8', + "angmsdab;": '\U000029A9', + "angmsdac;": '\U000029AA', + "angmsdad;": '\U000029AB', + "angmsdae;": '\U000029AC', + "angmsdaf;": '\U000029AD', + "angmsdag;": '\U000029AE', + "angmsdah;": '\U000029AF', + "angrt;": '\U0000221F', + "angrtvb;": '\U000022BE', + "angrtvbd;": '\U0000299D', + "angsph;": '\U00002222', + "angst;": '\U000000C5', + "angzarr;": '\U0000237C', + "aogon;": '\U00000105', + "aopf;": '\U0001D552', + "ap;": '\U00002248', + "apE;": '\U00002A70', + "apacir;": '\U00002A6F', + "ape;": '\U0000224A', + "apid;": '\U0000224B', + "apos;": '\U00000027', + "approx;": '\U00002248', + "approxeq;": '\U0000224A', + "aring;": '\U000000E5', + "ascr;": '\U0001D4B6', + "ast;": '\U0000002A', + "asymp;": '\U00002248', + "asympeq;": '\U0000224D', + "atilde;": '\U000000E3', + "auml;": '\U000000E4', + "awconint;": '\U00002233', + "awint;": '\U00002A11', + "bNot;": '\U00002AED', + "backcong;": '\U0000224C', + "backepsilon;": '\U000003F6', + "backprime;": '\U00002035', + "backsim;": '\U0000223D', + "backsimeq;": '\U000022CD', + "barvee;": '\U000022BD', + "barwed;": '\U00002305', + "barwedge;": '\U00002305', + "bbrk;": '\U000023B5', + "bbrktbrk;": '\U000023B6', + "bcong;": '\U0000224C', + "bcy;": '\U00000431', + "bdquo;": '\U0000201E', + "becaus;": '\U00002235', + "because;": '\U00002235', + "bemptyv;": '\U000029B0', + "bepsi;": '\U000003F6', + "bernou;": '\U0000212C', + "beta;": '\U000003B2', + "beth;": '\U00002136', + "between;": '\U0000226C', + "bfr;": '\U0001D51F', + "bigcap;": '\U000022C2', + "bigcirc;": '\U000025EF', + "bigcup;": '\U000022C3', + "bigodot;": '\U00002A00', + "bigoplus;": '\U00002A01', + "bigotimes;": '\U00002A02', + "bigsqcup;": '\U00002A06', + "bigstar;": '\U00002605', + "bigtriangledown;": '\U000025BD', + "bigtriangleup;": '\U000025B3', + "biguplus;": '\U00002A04', + "bigvee;": '\U000022C1', + "bigwedge;": '\U000022C0', + "bkarow;": '\U0000290D', + "blacklozenge;": '\U000029EB', + "blacksquare;": '\U000025AA', + "blacktriangle;": '\U000025B4', + "blacktriangledown;": '\U000025BE', + "blacktriangleleft;": '\U000025C2', + "blacktriangleright;": '\U000025B8', + "blank;": '\U00002423', + "blk12;": '\U00002592', + "blk14;": '\U00002591', + "blk34;": '\U00002593', + "block;": '\U00002588', + "bnot;": '\U00002310', + "bopf;": '\U0001D553', + "bot;": '\U000022A5', + "bottom;": '\U000022A5', + "bowtie;": '\U000022C8', + "boxDL;": '\U00002557', + "boxDR;": '\U00002554', + "boxDl;": '\U00002556', + "boxDr;": '\U00002553', + "boxH;": '\U00002550', + "boxHD;": '\U00002566', + "boxHU;": '\U00002569', + "boxHd;": '\U00002564', + "boxHu;": '\U00002567', + "boxUL;": '\U0000255D', + "boxUR;": '\U0000255A', + "boxUl;": '\U0000255C', + "boxUr;": '\U00002559', + "boxV;": '\U00002551', + "boxVH;": '\U0000256C', + "boxVL;": '\U00002563', + "boxVR;": '\U00002560', + "boxVh;": '\U0000256B', + "boxVl;": '\U00002562', + "boxVr;": '\U0000255F', + "boxbox;": '\U000029C9', + "boxdL;": '\U00002555', + "boxdR;": '\U00002552', + "boxdl;": '\U00002510', + "boxdr;": '\U0000250C', + "boxh;": '\U00002500', + "boxhD;": '\U00002565', + "boxhU;": '\U00002568', + "boxhd;": '\U0000252C', + "boxhu;": '\U00002534', + "boxminus;": '\U0000229F', + "boxplus;": '\U0000229E', + "boxtimes;": '\U000022A0', + "boxuL;": '\U0000255B', + "boxuR;": '\U00002558', + "boxul;": '\U00002518', + "boxur;": '\U00002514', + "boxv;": '\U00002502', + "boxvH;": '\U0000256A', + "boxvL;": '\U00002561', + "boxvR;": '\U0000255E', + "boxvh;": '\U0000253C', + "boxvl;": '\U00002524', + "boxvr;": '\U0000251C', + "bprime;": '\U00002035', + "breve;": '\U000002D8', + "brvbar;": '\U000000A6', + "bscr;": '\U0001D4B7', + "bsemi;": '\U0000204F', + "bsim;": '\U0000223D', + "bsime;": '\U000022CD', + "bsol;": '\U0000005C', + "bsolb;": '\U000029C5', + "bsolhsub;": '\U000027C8', + "bull;": '\U00002022', + "bullet;": '\U00002022', + "bump;": '\U0000224E', + "bumpE;": '\U00002AAE', + "bumpe;": '\U0000224F', + "bumpeq;": '\U0000224F', + "cacute;": '\U00000107', + "cap;": '\U00002229', + "capand;": '\U00002A44', + "capbrcup;": '\U00002A49', + "capcap;": '\U00002A4B', + "capcup;": '\U00002A47', + "capdot;": '\U00002A40', + "caret;": '\U00002041', + "caron;": '\U000002C7', + "ccaps;": '\U00002A4D', + "ccaron;": '\U0000010D', + "ccedil;": '\U000000E7', + "ccirc;": '\U00000109', + "ccups;": '\U00002A4C', + "ccupssm;": '\U00002A50', + "cdot;": '\U0000010B', + "cedil;": '\U000000B8', + "cemptyv;": '\U000029B2', + "cent;": '\U000000A2', + "centerdot;": '\U000000B7', + "cfr;": '\U0001D520', + "chcy;": '\U00000447', + "check;": '\U00002713', + "checkmark;": '\U00002713', + "chi;": '\U000003C7', + "cir;": '\U000025CB', + "cirE;": '\U000029C3', + "circ;": '\U000002C6', + "circeq;": '\U00002257', + "circlearrowleft;": '\U000021BA', + "circlearrowright;": '\U000021BB', + "circledR;": '\U000000AE', + "circledS;": '\U000024C8', + "circledast;": '\U0000229B', + "circledcirc;": '\U0000229A', + "circleddash;": '\U0000229D', + "cire;": '\U00002257', + "cirfnint;": '\U00002A10', + "cirmid;": '\U00002AEF', + "cirscir;": '\U000029C2', + "clubs;": '\U00002663', + "clubsuit;": '\U00002663', + "colon;": '\U0000003A', + "colone;": '\U00002254', + "coloneq;": '\U00002254', + "comma;": '\U0000002C', + "commat;": '\U00000040', + "comp;": '\U00002201', + "compfn;": '\U00002218', + "complement;": '\U00002201', + "complexes;": '\U00002102', + "cong;": '\U00002245', + "congdot;": '\U00002A6D', + "conint;": '\U0000222E', + "copf;": '\U0001D554', + "coprod;": '\U00002210', + "copy;": '\U000000A9', + "copysr;": '\U00002117', + "crarr;": '\U000021B5', + "cross;": '\U00002717', + "cscr;": '\U0001D4B8', + "csub;": '\U00002ACF', + "csube;": '\U00002AD1', + "csup;": '\U00002AD0', + "csupe;": '\U00002AD2', + "ctdot;": '\U000022EF', + "cudarrl;": '\U00002938', + "cudarrr;": '\U00002935', + "cuepr;": '\U000022DE', + "cuesc;": '\U000022DF', + "cularr;": '\U000021B6', + "cularrp;": '\U0000293D', + "cup;": '\U0000222A', + "cupbrcap;": '\U00002A48', + "cupcap;": '\U00002A46', + "cupcup;": '\U00002A4A', + "cupdot;": '\U0000228D', + "cupor;": '\U00002A45', + "curarr;": '\U000021B7', + "curarrm;": '\U0000293C', + "curlyeqprec;": '\U000022DE', + "curlyeqsucc;": '\U000022DF', + "curlyvee;": '\U000022CE', + "curlywedge;": '\U000022CF', + "curren;": '\U000000A4', + "curvearrowleft;": '\U000021B6', + "curvearrowright;": '\U000021B7', + "cuvee;": '\U000022CE', + "cuwed;": '\U000022CF', + "cwconint;": '\U00002232', + "cwint;": '\U00002231', + "cylcty;": '\U0000232D', + "dArr;": '\U000021D3', + "dHar;": '\U00002965', + "dagger;": '\U00002020', + "daleth;": '\U00002138', + "darr;": '\U00002193', + "dash;": '\U00002010', + "dashv;": '\U000022A3', + "dbkarow;": '\U0000290F', + "dblac;": '\U000002DD', + "dcaron;": '\U0000010F', + "dcy;": '\U00000434', + "dd;": '\U00002146', + "ddagger;": '\U00002021', + "ddarr;": '\U000021CA', + "ddotseq;": '\U00002A77', + "deg;": '\U000000B0', + "delta;": '\U000003B4', + "demptyv;": '\U000029B1', + "dfisht;": '\U0000297F', + "dfr;": '\U0001D521', + "dharl;": '\U000021C3', + "dharr;": '\U000021C2', + "diam;": '\U000022C4', + "diamond;": '\U000022C4', + "diamondsuit;": '\U00002666', + "diams;": '\U00002666', + "die;": '\U000000A8', + "digamma;": '\U000003DD', + "disin;": '\U000022F2', + "div;": '\U000000F7', + "divide;": '\U000000F7', + "divideontimes;": '\U000022C7', + "divonx;": '\U000022C7', + "djcy;": '\U00000452', + "dlcorn;": '\U0000231E', + "dlcrop;": '\U0000230D', + "dollar;": '\U00000024', + "dopf;": '\U0001D555', + "dot;": '\U000002D9', + "doteq;": '\U00002250', + "doteqdot;": '\U00002251', + "dotminus;": '\U00002238', + "dotplus;": '\U00002214', + "dotsquare;": '\U000022A1', + "doublebarwedge;": '\U00002306', + "downarrow;": '\U00002193', + "downdownarrows;": '\U000021CA', + "downharpoonleft;": '\U000021C3', + "downharpoonright;": '\U000021C2', + "drbkarow;": '\U00002910', + "drcorn;": '\U0000231F', + "drcrop;": '\U0000230C', + "dscr;": '\U0001D4B9', + "dscy;": '\U00000455', + "dsol;": '\U000029F6', + "dstrok;": '\U00000111', + "dtdot;": '\U000022F1', + "dtri;": '\U000025BF', + "dtrif;": '\U000025BE', + "duarr;": '\U000021F5', + "duhar;": '\U0000296F', + "dwangle;": '\U000029A6', + "dzcy;": '\U0000045F', + "dzigrarr;": '\U000027FF', + "eDDot;": '\U00002A77', + "eDot;": '\U00002251', + "eacute;": '\U000000E9', + "easter;": '\U00002A6E', + "ecaron;": '\U0000011B', + "ecir;": '\U00002256', + "ecirc;": '\U000000EA', + "ecolon;": '\U00002255', + "ecy;": '\U0000044D', + "edot;": '\U00000117', + "ee;": '\U00002147', + "efDot;": '\U00002252', + "efr;": '\U0001D522', + "eg;": '\U00002A9A', + "egrave;": '\U000000E8', + "egs;": '\U00002A96', + "egsdot;": '\U00002A98', + "el;": '\U00002A99', + "elinters;": '\U000023E7', + "ell;": '\U00002113', + "els;": '\U00002A95', + "elsdot;": '\U00002A97', + "emacr;": '\U00000113', + "empty;": '\U00002205', + "emptyset;": '\U00002205', + "emptyv;": '\U00002205', + "emsp;": '\U00002003', + "emsp13;": '\U00002004', + "emsp14;": '\U00002005', + "eng;": '\U0000014B', + "ensp;": '\U00002002', + "eogon;": '\U00000119', + "eopf;": '\U0001D556', + "epar;": '\U000022D5', + "eparsl;": '\U000029E3', + "eplus;": '\U00002A71', + "epsi;": '\U000003B5', + "epsilon;": '\U000003B5', + "epsiv;": '\U000003F5', + "eqcirc;": '\U00002256', + "eqcolon;": '\U00002255', + "eqsim;": '\U00002242', + "eqslantgtr;": '\U00002A96', + "eqslantless;": '\U00002A95', + "equals;": '\U0000003D', + "equest;": '\U0000225F', + "equiv;": '\U00002261', + "equivDD;": '\U00002A78', + "eqvparsl;": '\U000029E5', + "erDot;": '\U00002253', + "erarr;": '\U00002971', + "escr;": '\U0000212F', + "esdot;": '\U00002250', + "esim;": '\U00002242', + "eta;": '\U000003B7', + "eth;": '\U000000F0', + "euml;": '\U000000EB', + "euro;": '\U000020AC', + "excl;": '\U00000021', + "exist;": '\U00002203', + "expectation;": '\U00002130', + "exponentiale;": '\U00002147', + "fallingdotseq;": '\U00002252', + "fcy;": '\U00000444', + "female;": '\U00002640', + "ffilig;": '\U0000FB03', + "fflig;": '\U0000FB00', + "ffllig;": '\U0000FB04', + "ffr;": '\U0001D523', + "filig;": '\U0000FB01', + "flat;": '\U0000266D', + "fllig;": '\U0000FB02', + "fltns;": '\U000025B1', + "fnof;": '\U00000192', + "fopf;": '\U0001D557', + "forall;": '\U00002200', + "fork;": '\U000022D4', + "forkv;": '\U00002AD9', + "fpartint;": '\U00002A0D', + "frac12;": '\U000000BD', + "frac13;": '\U00002153', + "frac14;": '\U000000BC', + "frac15;": '\U00002155', + "frac16;": '\U00002159', + "frac18;": '\U0000215B', + "frac23;": '\U00002154', + "frac25;": '\U00002156', + "frac34;": '\U000000BE', + "frac35;": '\U00002157', + "frac38;": '\U0000215C', + "frac45;": '\U00002158', + "frac56;": '\U0000215A', + "frac58;": '\U0000215D', + "frac78;": '\U0000215E', + "frasl;": '\U00002044', + "frown;": '\U00002322', + "fscr;": '\U0001D4BB', + "gE;": '\U00002267', + "gEl;": '\U00002A8C', + "gacute;": '\U000001F5', + "gamma;": '\U000003B3', + "gammad;": '\U000003DD', + "gap;": '\U00002A86', + "gbreve;": '\U0000011F', + "gcirc;": '\U0000011D', + "gcy;": '\U00000433', + "gdot;": '\U00000121', + "ge;": '\U00002265', + "gel;": '\U000022DB', + "geq;": '\U00002265', + "geqq;": '\U00002267', + "geqslant;": '\U00002A7E', + "ges;": '\U00002A7E', + "gescc;": '\U00002AA9', + "gesdot;": '\U00002A80', + "gesdoto;": '\U00002A82', + "gesdotol;": '\U00002A84', + "gesles;": '\U00002A94', + "gfr;": '\U0001D524', + "gg;": '\U0000226B', + "ggg;": '\U000022D9', + "gimel;": '\U00002137', + "gjcy;": '\U00000453', + "gl;": '\U00002277', + "glE;": '\U00002A92', + "gla;": '\U00002AA5', + "glj;": '\U00002AA4', + "gnE;": '\U00002269', + "gnap;": '\U00002A8A', + "gnapprox;": '\U00002A8A', + "gne;": '\U00002A88', + "gneq;": '\U00002A88', + "gneqq;": '\U00002269', + "gnsim;": '\U000022E7', + "gopf;": '\U0001D558', + "grave;": '\U00000060', + "gscr;": '\U0000210A', + "gsim;": '\U00002273', + "gsime;": '\U00002A8E', + "gsiml;": '\U00002A90', + "gt;": '\U0000003E', + "gtcc;": '\U00002AA7', + "gtcir;": '\U00002A7A', + "gtdot;": '\U000022D7', + "gtlPar;": '\U00002995', + "gtquest;": '\U00002A7C', + "gtrapprox;": '\U00002A86', + "gtrarr;": '\U00002978', + "gtrdot;": '\U000022D7', + "gtreqless;": '\U000022DB', + "gtreqqless;": '\U00002A8C', + "gtrless;": '\U00002277', + "gtrsim;": '\U00002273', + "hArr;": '\U000021D4', + "hairsp;": '\U0000200A', + "half;": '\U000000BD', + "hamilt;": '\U0000210B', + "hardcy;": '\U0000044A', + "harr;": '\U00002194', + "harrcir;": '\U00002948', + "harrw;": '\U000021AD', + "hbar;": '\U0000210F', + "hcirc;": '\U00000125', + "hearts;": '\U00002665', + "heartsuit;": '\U00002665', + "hellip;": '\U00002026', + "hercon;": '\U000022B9', + "hfr;": '\U0001D525', + "hksearow;": '\U00002925', + "hkswarow;": '\U00002926', + "hoarr;": '\U000021FF', + "homtht;": '\U0000223B', + "hookleftarrow;": '\U000021A9', + "hookrightarrow;": '\U000021AA', + "hopf;": '\U0001D559', + "horbar;": '\U00002015', + "hscr;": '\U0001D4BD', + "hslash;": '\U0000210F', + "hstrok;": '\U00000127', + "hybull;": '\U00002043', + "hyphen;": '\U00002010', + "iacute;": '\U000000ED', + "ic;": '\U00002063', + "icirc;": '\U000000EE', + "icy;": '\U00000438', + "iecy;": '\U00000435', + "iexcl;": '\U000000A1', + "iff;": '\U000021D4', + "ifr;": '\U0001D526', + "igrave;": '\U000000EC', + "ii;": '\U00002148', + "iiiint;": '\U00002A0C', + "iiint;": '\U0000222D', + "iinfin;": '\U000029DC', + "iiota;": '\U00002129', + "ijlig;": '\U00000133', + "imacr;": '\U0000012B', + "image;": '\U00002111', + "imagline;": '\U00002110', + "imagpart;": '\U00002111', + "imath;": '\U00000131', + "imof;": '\U000022B7', + "imped;": '\U000001B5', + "in;": '\U00002208', + "incare;": '\U00002105', + "infin;": '\U0000221E', + "infintie;": '\U000029DD', + "inodot;": '\U00000131', + "int;": '\U0000222B', + "intcal;": '\U000022BA', + "integers;": '\U00002124', + "intercal;": '\U000022BA', + "intlarhk;": '\U00002A17', + "intprod;": '\U00002A3C', + "iocy;": '\U00000451', + "iogon;": '\U0000012F', + "iopf;": '\U0001D55A', + "iota;": '\U000003B9', + "iprod;": '\U00002A3C', + "iquest;": '\U000000BF', + "iscr;": '\U0001D4BE', + "isin;": '\U00002208', + "isinE;": '\U000022F9', + "isindot;": '\U000022F5', + "isins;": '\U000022F4', + "isinsv;": '\U000022F3', + "isinv;": '\U00002208', + "it;": '\U00002062', + "itilde;": '\U00000129', + "iukcy;": '\U00000456', + "iuml;": '\U000000EF', + "jcirc;": '\U00000135', + "jcy;": '\U00000439', + "jfr;": '\U0001D527', + "jmath;": '\U00000237', + "jopf;": '\U0001D55B', + "jscr;": '\U0001D4BF', + "jsercy;": '\U00000458', + "jukcy;": '\U00000454', + "kappa;": '\U000003BA', + "kappav;": '\U000003F0', + "kcedil;": '\U00000137', + "kcy;": '\U0000043A', + "kfr;": '\U0001D528', + "kgreen;": '\U00000138', + "khcy;": '\U00000445', + "kjcy;": '\U0000045C', + "kopf;": '\U0001D55C', + "kscr;": '\U0001D4C0', + "lAarr;": '\U000021DA', + "lArr;": '\U000021D0', + "lAtail;": '\U0000291B', + "lBarr;": '\U0000290E', + "lE;": '\U00002266', + "lEg;": '\U00002A8B', + "lHar;": '\U00002962', + "lacute;": '\U0000013A', + "laemptyv;": '\U000029B4', + "lagran;": '\U00002112', + "lambda;": '\U000003BB', + "lang;": '\U000027E8', + "langd;": '\U00002991', + "langle;": '\U000027E8', + "lap;": '\U00002A85', + "laquo;": '\U000000AB', + "larr;": '\U00002190', + "larrb;": '\U000021E4', + "larrbfs;": '\U0000291F', + "larrfs;": '\U0000291D', + "larrhk;": '\U000021A9', + "larrlp;": '\U000021AB', + "larrpl;": '\U00002939', + "larrsim;": '\U00002973', + "larrtl;": '\U000021A2', + "lat;": '\U00002AAB', + "latail;": '\U00002919', + "late;": '\U00002AAD', + "lbarr;": '\U0000290C', + "lbbrk;": '\U00002772', + "lbrace;": '\U0000007B', + "lbrack;": '\U0000005B', + "lbrke;": '\U0000298B', + "lbrksld;": '\U0000298F', + "lbrkslu;": '\U0000298D', + "lcaron;": '\U0000013E', + "lcedil;": '\U0000013C', + "lceil;": '\U00002308', + "lcub;": '\U0000007B', + "lcy;": '\U0000043B', + "ldca;": '\U00002936', + "ldquo;": '\U0000201C', + "ldquor;": '\U0000201E', + "ldrdhar;": '\U00002967', + "ldrushar;": '\U0000294B', + "ldsh;": '\U000021B2', + "le;": '\U00002264', + "leftarrow;": '\U00002190', + "leftarrowtail;": '\U000021A2', + "leftharpoondown;": '\U000021BD', + "leftharpoonup;": '\U000021BC', + "leftleftarrows;": '\U000021C7', + "leftrightarrow;": '\U00002194', + "leftrightarrows;": '\U000021C6', + "leftrightharpoons;": '\U000021CB', + "leftrightsquigarrow;": '\U000021AD', + "leftthreetimes;": '\U000022CB', + "leg;": '\U000022DA', + "leq;": '\U00002264', + "leqq;": '\U00002266', + "leqslant;": '\U00002A7D', + "les;": '\U00002A7D', + "lescc;": '\U00002AA8', + "lesdot;": '\U00002A7F', + "lesdoto;": '\U00002A81', + "lesdotor;": '\U00002A83', + "lesges;": '\U00002A93', + "lessapprox;": '\U00002A85', + "lessdot;": '\U000022D6', + "lesseqgtr;": '\U000022DA', + "lesseqqgtr;": '\U00002A8B', + "lessgtr;": '\U00002276', + "lesssim;": '\U00002272', + "lfisht;": '\U0000297C', + "lfloor;": '\U0000230A', + "lfr;": '\U0001D529', + "lg;": '\U00002276', + "lgE;": '\U00002A91', + "lhard;": '\U000021BD', + "lharu;": '\U000021BC', + "lharul;": '\U0000296A', + "lhblk;": '\U00002584', + "ljcy;": '\U00000459', + "ll;": '\U0000226A', + "llarr;": '\U000021C7', + "llcorner;": '\U0000231E', + "llhard;": '\U0000296B', + "lltri;": '\U000025FA', + "lmidot;": '\U00000140', + "lmoust;": '\U000023B0', + "lmoustache;": '\U000023B0', + "lnE;": '\U00002268', + "lnap;": '\U00002A89', + "lnapprox;": '\U00002A89', + "lne;": '\U00002A87', + "lneq;": '\U00002A87', + "lneqq;": '\U00002268', + "lnsim;": '\U000022E6', + "loang;": '\U000027EC', + "loarr;": '\U000021FD', + "lobrk;": '\U000027E6', + "longleftarrow;": '\U000027F5', + "longleftrightarrow;": '\U000027F7', + "longmapsto;": '\U000027FC', + "longrightarrow;": '\U000027F6', + "looparrowleft;": '\U000021AB', + "looparrowright;": '\U000021AC', + "lopar;": '\U00002985', + "lopf;": '\U0001D55D', + "loplus;": '\U00002A2D', + "lotimes;": '\U00002A34', + "lowast;": '\U00002217', + "lowbar;": '\U0000005F', + "loz;": '\U000025CA', + "lozenge;": '\U000025CA', + "lozf;": '\U000029EB', + "lpar;": '\U00000028', + "lparlt;": '\U00002993', + "lrarr;": '\U000021C6', + "lrcorner;": '\U0000231F', + "lrhar;": '\U000021CB', + "lrhard;": '\U0000296D', + "lrm;": '\U0000200E', + "lrtri;": '\U000022BF', + "lsaquo;": '\U00002039', + "lscr;": '\U0001D4C1', + "lsh;": '\U000021B0', + "lsim;": '\U00002272', + "lsime;": '\U00002A8D', + "lsimg;": '\U00002A8F', + "lsqb;": '\U0000005B', + "lsquo;": '\U00002018', + "lsquor;": '\U0000201A', + "lstrok;": '\U00000142', + "lt;": '\U0000003C', + "ltcc;": '\U00002AA6', + "ltcir;": '\U00002A79', + "ltdot;": '\U000022D6', + "lthree;": '\U000022CB', + "ltimes;": '\U000022C9', + "ltlarr;": '\U00002976', + "ltquest;": '\U00002A7B', + "ltrPar;": '\U00002996', + "ltri;": '\U000025C3', + "ltrie;": '\U000022B4', + "ltrif;": '\U000025C2', + "lurdshar;": '\U0000294A', + "luruhar;": '\U00002966', + "mDDot;": '\U0000223A', + "macr;": '\U000000AF', + "male;": '\U00002642', + "malt;": '\U00002720', + "maltese;": '\U00002720', + "map;": '\U000021A6', + "mapsto;": '\U000021A6', + "mapstodown;": '\U000021A7', + "mapstoleft;": '\U000021A4', + "mapstoup;": '\U000021A5', + "marker;": '\U000025AE', + "mcomma;": '\U00002A29', + "mcy;": '\U0000043C', + "mdash;": '\U00002014', + "measuredangle;": '\U00002221', + "mfr;": '\U0001D52A', + "mho;": '\U00002127', + "micro;": '\U000000B5', + "mid;": '\U00002223', + "midast;": '\U0000002A', + "midcir;": '\U00002AF0', + "middot;": '\U000000B7', + "minus;": '\U00002212', + "minusb;": '\U0000229F', + "minusd;": '\U00002238', + "minusdu;": '\U00002A2A', + "mlcp;": '\U00002ADB', + "mldr;": '\U00002026', + "mnplus;": '\U00002213', + "models;": '\U000022A7', + "mopf;": '\U0001D55E', + "mp;": '\U00002213', + "mscr;": '\U0001D4C2', + "mstpos;": '\U0000223E', + "mu;": '\U000003BC', + "multimap;": '\U000022B8', + "mumap;": '\U000022B8', + "nLeftarrow;": '\U000021CD', + "nLeftrightarrow;": '\U000021CE', + "nRightarrow;": '\U000021CF', + "nVDash;": '\U000022AF', + "nVdash;": '\U000022AE', + "nabla;": '\U00002207', + "nacute;": '\U00000144', + "nap;": '\U00002249', + "napos;": '\U00000149', + "napprox;": '\U00002249', + "natur;": '\U0000266E', + "natural;": '\U0000266E', + "naturals;": '\U00002115', + "nbsp;": '\U000000A0', + "ncap;": '\U00002A43', + "ncaron;": '\U00000148', + "ncedil;": '\U00000146', + "ncong;": '\U00002247', + "ncup;": '\U00002A42', + "ncy;": '\U0000043D', + "ndash;": '\U00002013', + "ne;": '\U00002260', + "neArr;": '\U000021D7', + "nearhk;": '\U00002924', + "nearr;": '\U00002197', + "nearrow;": '\U00002197', + "nequiv;": '\U00002262', + "nesear;": '\U00002928', + "nexist;": '\U00002204', + "nexists;": '\U00002204', + "nfr;": '\U0001D52B', + "nge;": '\U00002271', + "ngeq;": '\U00002271', + "ngsim;": '\U00002275', + "ngt;": '\U0000226F', + "ngtr;": '\U0000226F', + "nhArr;": '\U000021CE', + "nharr;": '\U000021AE', + "nhpar;": '\U00002AF2', + "ni;": '\U0000220B', + "nis;": '\U000022FC', + "nisd;": '\U000022FA', + "niv;": '\U0000220B', + "njcy;": '\U0000045A', + "nlArr;": '\U000021CD', + "nlarr;": '\U0000219A', + "nldr;": '\U00002025', + "nle;": '\U00002270', + "nleftarrow;": '\U0000219A', + "nleftrightarrow;": '\U000021AE', + "nleq;": '\U00002270', + "nless;": '\U0000226E', + "nlsim;": '\U00002274', + "nlt;": '\U0000226E', + "nltri;": '\U000022EA', + "nltrie;": '\U000022EC', + "nmid;": '\U00002224', + "nopf;": '\U0001D55F', + "not;": '\U000000AC', + "notin;": '\U00002209', + "notinva;": '\U00002209', + "notinvb;": '\U000022F7', + "notinvc;": '\U000022F6', + "notni;": '\U0000220C', + "notniva;": '\U0000220C', + "notnivb;": '\U000022FE', + "notnivc;": '\U000022FD', + "npar;": '\U00002226', + "nparallel;": '\U00002226', + "npolint;": '\U00002A14', + "npr;": '\U00002280', + "nprcue;": '\U000022E0', + "nprec;": '\U00002280', + "nrArr;": '\U000021CF', + "nrarr;": '\U0000219B', + "nrightarrow;": '\U0000219B', + "nrtri;": '\U000022EB', + "nrtrie;": '\U000022ED', + "nsc;": '\U00002281', + "nsccue;": '\U000022E1', + "nscr;": '\U0001D4C3', + "nshortmid;": '\U00002224', + "nshortparallel;": '\U00002226', + "nsim;": '\U00002241', + "nsime;": '\U00002244', + "nsimeq;": '\U00002244', + "nsmid;": '\U00002224', + "nspar;": '\U00002226', + "nsqsube;": '\U000022E2', + "nsqsupe;": '\U000022E3', + "nsub;": '\U00002284', + "nsube;": '\U00002288', + "nsubseteq;": '\U00002288', + "nsucc;": '\U00002281', + "nsup;": '\U00002285', + "nsupe;": '\U00002289', + "nsupseteq;": '\U00002289', + "ntgl;": '\U00002279', + "ntilde;": '\U000000F1', + "ntlg;": '\U00002278', + "ntriangleleft;": '\U000022EA', + "ntrianglelefteq;": '\U000022EC', + "ntriangleright;": '\U000022EB', + "ntrianglerighteq;": '\U000022ED', + "nu;": '\U000003BD', + "num;": '\U00000023', + "numero;": '\U00002116', + "numsp;": '\U00002007', + "nvDash;": '\U000022AD', + "nvHarr;": '\U00002904', + "nvdash;": '\U000022AC', + "nvinfin;": '\U000029DE', + "nvlArr;": '\U00002902', + "nvrArr;": '\U00002903', + "nwArr;": '\U000021D6', + "nwarhk;": '\U00002923', + "nwarr;": '\U00002196', + "nwarrow;": '\U00002196', + "nwnear;": '\U00002927', + "oS;": '\U000024C8', + "oacute;": '\U000000F3', + "oast;": '\U0000229B', + "ocir;": '\U0000229A', + "ocirc;": '\U000000F4', + "ocy;": '\U0000043E', + "odash;": '\U0000229D', + "odblac;": '\U00000151', + "odiv;": '\U00002A38', + "odot;": '\U00002299', + "odsold;": '\U000029BC', + "oelig;": '\U00000153', + "ofcir;": '\U000029BF', + "ofr;": '\U0001D52C', + "ogon;": '\U000002DB', + "ograve;": '\U000000F2', + "ogt;": '\U000029C1', + "ohbar;": '\U000029B5', + "ohm;": '\U000003A9', + "oint;": '\U0000222E', + "olarr;": '\U000021BA', + "olcir;": '\U000029BE', + "olcross;": '\U000029BB', + "oline;": '\U0000203E', + "olt;": '\U000029C0', + "omacr;": '\U0000014D', + "omega;": '\U000003C9', + "omicron;": '\U000003BF', + "omid;": '\U000029B6', + "ominus;": '\U00002296', + "oopf;": '\U0001D560', + "opar;": '\U000029B7', + "operp;": '\U000029B9', + "oplus;": '\U00002295', + "or;": '\U00002228', + "orarr;": '\U000021BB', + "ord;": '\U00002A5D', + "order;": '\U00002134', + "orderof;": '\U00002134', + "ordf;": '\U000000AA', + "ordm;": '\U000000BA', + "origof;": '\U000022B6', + "oror;": '\U00002A56', + "orslope;": '\U00002A57', + "orv;": '\U00002A5B', + "oscr;": '\U00002134', + "oslash;": '\U000000F8', + "osol;": '\U00002298', + "otilde;": '\U000000F5', + "otimes;": '\U00002297', + "otimesas;": '\U00002A36', + "ouml;": '\U000000F6', + "ovbar;": '\U0000233D', + "par;": '\U00002225', + "para;": '\U000000B6', + "parallel;": '\U00002225', + "parsim;": '\U00002AF3', + "parsl;": '\U00002AFD', + "part;": '\U00002202', + "pcy;": '\U0000043F', + "percnt;": '\U00000025', + "period;": '\U0000002E', + "permil;": '\U00002030', + "perp;": '\U000022A5', + "pertenk;": '\U00002031', + "pfr;": '\U0001D52D', + "phi;": '\U000003C6', + "phiv;": '\U000003D5', + "phmmat;": '\U00002133', + "phone;": '\U0000260E', + "pi;": '\U000003C0', + "pitchfork;": '\U000022D4', + "piv;": '\U000003D6', + "planck;": '\U0000210F', + "planckh;": '\U0000210E', + "plankv;": '\U0000210F', + "plus;": '\U0000002B', + "plusacir;": '\U00002A23', + "plusb;": '\U0000229E', + "pluscir;": '\U00002A22', + "plusdo;": '\U00002214', + "plusdu;": '\U00002A25', + "pluse;": '\U00002A72', + "plusmn;": '\U000000B1', + "plussim;": '\U00002A26', + "plustwo;": '\U00002A27', + "pm;": '\U000000B1', + "pointint;": '\U00002A15', + "popf;": '\U0001D561', + "pound;": '\U000000A3', + "pr;": '\U0000227A', + "prE;": '\U00002AB3', + "prap;": '\U00002AB7', + "prcue;": '\U0000227C', + "pre;": '\U00002AAF', + "prec;": '\U0000227A', + "precapprox;": '\U00002AB7', + "preccurlyeq;": '\U0000227C', + "preceq;": '\U00002AAF', + "precnapprox;": '\U00002AB9', + "precneqq;": '\U00002AB5', + "precnsim;": '\U000022E8', + "precsim;": '\U0000227E', + "prime;": '\U00002032', + "primes;": '\U00002119', + "prnE;": '\U00002AB5', + "prnap;": '\U00002AB9', + "prnsim;": '\U000022E8', + "prod;": '\U0000220F', + "profalar;": '\U0000232E', + "profline;": '\U00002312', + "profsurf;": '\U00002313', + "prop;": '\U0000221D', + "propto;": '\U0000221D', + "prsim;": '\U0000227E', + "prurel;": '\U000022B0', + "pscr;": '\U0001D4C5', + "psi;": '\U000003C8', + "puncsp;": '\U00002008', + "qfr;": '\U0001D52E', + "qint;": '\U00002A0C', + "qopf;": '\U0001D562', + "qprime;": '\U00002057', + "qscr;": '\U0001D4C6', + "quaternions;": '\U0000210D', + "quatint;": '\U00002A16', + "quest;": '\U0000003F', + "questeq;": '\U0000225F', + "quot;": '\U00000022', + "rAarr;": '\U000021DB', + "rArr;": '\U000021D2', + "rAtail;": '\U0000291C', + "rBarr;": '\U0000290F', + "rHar;": '\U00002964', + "racute;": '\U00000155', + "radic;": '\U0000221A', + "raemptyv;": '\U000029B3', + "rang;": '\U000027E9', + "rangd;": '\U00002992', + "range;": '\U000029A5', + "rangle;": '\U000027E9', + "raquo;": '\U000000BB', + "rarr;": '\U00002192', + "rarrap;": '\U00002975', + "rarrb;": '\U000021E5', + "rarrbfs;": '\U00002920', + "rarrc;": '\U00002933', + "rarrfs;": '\U0000291E', + "rarrhk;": '\U000021AA', + "rarrlp;": '\U000021AC', + "rarrpl;": '\U00002945', + "rarrsim;": '\U00002974', + "rarrtl;": '\U000021A3', + "rarrw;": '\U0000219D', + "ratail;": '\U0000291A', + "ratio;": '\U00002236', + "rationals;": '\U0000211A', + "rbarr;": '\U0000290D', + "rbbrk;": '\U00002773', + "rbrace;": '\U0000007D', + "rbrack;": '\U0000005D', + "rbrke;": '\U0000298C', + "rbrksld;": '\U0000298E', + "rbrkslu;": '\U00002990', + "rcaron;": '\U00000159', + "rcedil;": '\U00000157', + "rceil;": '\U00002309', + "rcub;": '\U0000007D', + "rcy;": '\U00000440', + "rdca;": '\U00002937', + "rdldhar;": '\U00002969', + "rdquo;": '\U0000201D', + "rdquor;": '\U0000201D', + "rdsh;": '\U000021B3', + "real;": '\U0000211C', + "realine;": '\U0000211B', + "realpart;": '\U0000211C', + "reals;": '\U0000211D', + "rect;": '\U000025AD', + "reg;": '\U000000AE', + "rfisht;": '\U0000297D', + "rfloor;": '\U0000230B', + "rfr;": '\U0001D52F', + "rhard;": '\U000021C1', + "rharu;": '\U000021C0', + "rharul;": '\U0000296C', + "rho;": '\U000003C1', + "rhov;": '\U000003F1', + "rightarrow;": '\U00002192', + "rightarrowtail;": '\U000021A3', + "rightharpoondown;": '\U000021C1', + "rightharpoonup;": '\U000021C0', + "rightleftarrows;": '\U000021C4', + "rightleftharpoons;": '\U000021CC', + "rightrightarrows;": '\U000021C9', + "rightsquigarrow;": '\U0000219D', + "rightthreetimes;": '\U000022CC', + "ring;": '\U000002DA', + "risingdotseq;": '\U00002253', + "rlarr;": '\U000021C4', + "rlhar;": '\U000021CC', + "rlm;": '\U0000200F', + "rmoust;": '\U000023B1', + "rmoustache;": '\U000023B1', + "rnmid;": '\U00002AEE', + "roang;": '\U000027ED', + "roarr;": '\U000021FE', + "robrk;": '\U000027E7', + "ropar;": '\U00002986', + "ropf;": '\U0001D563', + "roplus;": '\U00002A2E', + "rotimes;": '\U00002A35', + "rpar;": '\U00000029', + "rpargt;": '\U00002994', + "rppolint;": '\U00002A12', + "rrarr;": '\U000021C9', + "rsaquo;": '\U0000203A', + "rscr;": '\U0001D4C7', + "rsh;": '\U000021B1', + "rsqb;": '\U0000005D', + "rsquo;": '\U00002019', + "rsquor;": '\U00002019', + "rthree;": '\U000022CC', + "rtimes;": '\U000022CA', + "rtri;": '\U000025B9', + "rtrie;": '\U000022B5', + "rtrif;": '\U000025B8', + "rtriltri;": '\U000029CE', + "ruluhar;": '\U00002968', + "rx;": '\U0000211E', + "sacute;": '\U0000015B', + "sbquo;": '\U0000201A', + "sc;": '\U0000227B', + "scE;": '\U00002AB4', + "scap;": '\U00002AB8', + "scaron;": '\U00000161', + "sccue;": '\U0000227D', + "sce;": '\U00002AB0', + "scedil;": '\U0000015F', + "scirc;": '\U0000015D', + "scnE;": '\U00002AB6', + "scnap;": '\U00002ABA', + "scnsim;": '\U000022E9', + "scpolint;": '\U00002A13', + "scsim;": '\U0000227F', + "scy;": '\U00000441', + "sdot;": '\U000022C5', + "sdotb;": '\U000022A1', + "sdote;": '\U00002A66', + "seArr;": '\U000021D8', + "searhk;": '\U00002925', + "searr;": '\U00002198', + "searrow;": '\U00002198', + "sect;": '\U000000A7', + "semi;": '\U0000003B', + "seswar;": '\U00002929', + "setminus;": '\U00002216', + "setmn;": '\U00002216', + "sext;": '\U00002736', + "sfr;": '\U0001D530', + "sfrown;": '\U00002322', + "sharp;": '\U0000266F', + "shchcy;": '\U00000449', + "shcy;": '\U00000448', + "shortmid;": '\U00002223', + "shortparallel;": '\U00002225', + "shy;": '\U000000AD', + "sigma;": '\U000003C3', + "sigmaf;": '\U000003C2', + "sigmav;": '\U000003C2', + "sim;": '\U0000223C', + "simdot;": '\U00002A6A', + "sime;": '\U00002243', + "simeq;": '\U00002243', + "simg;": '\U00002A9E', + "simgE;": '\U00002AA0', + "siml;": '\U00002A9D', + "simlE;": '\U00002A9F', + "simne;": '\U00002246', + "simplus;": '\U00002A24', + "simrarr;": '\U00002972', + "slarr;": '\U00002190', + "smallsetminus;": '\U00002216', + "smashp;": '\U00002A33', + "smeparsl;": '\U000029E4', + "smid;": '\U00002223', + "smile;": '\U00002323', + "smt;": '\U00002AAA', + "smte;": '\U00002AAC', + "softcy;": '\U0000044C', + "sol;": '\U0000002F', + "solb;": '\U000029C4', + "solbar;": '\U0000233F', + "sopf;": '\U0001D564', + "spades;": '\U00002660', + "spadesuit;": '\U00002660', + "spar;": '\U00002225', + "sqcap;": '\U00002293', + "sqcup;": '\U00002294', + "sqsub;": '\U0000228F', + "sqsube;": '\U00002291', + "sqsubset;": '\U0000228F', + "sqsubseteq;": '\U00002291', + "sqsup;": '\U00002290', + "sqsupe;": '\U00002292', + "sqsupset;": '\U00002290', + "sqsupseteq;": '\U00002292', + "squ;": '\U000025A1', + "square;": '\U000025A1', + "squarf;": '\U000025AA', + "squf;": '\U000025AA', + "srarr;": '\U00002192', + "sscr;": '\U0001D4C8', + "ssetmn;": '\U00002216', + "ssmile;": '\U00002323', + "sstarf;": '\U000022C6', + "star;": '\U00002606', + "starf;": '\U00002605', + "straightepsilon;": '\U000003F5', + "straightphi;": '\U000003D5', + "strns;": '\U000000AF', + "sub;": '\U00002282', + "subE;": '\U00002AC5', + "subdot;": '\U00002ABD', + "sube;": '\U00002286', + "subedot;": '\U00002AC3', + "submult;": '\U00002AC1', + "subnE;": '\U00002ACB', + "subne;": '\U0000228A', + "subplus;": '\U00002ABF', + "subrarr;": '\U00002979', + "subset;": '\U00002282', + "subseteq;": '\U00002286', + "subseteqq;": '\U00002AC5', + "subsetneq;": '\U0000228A', + "subsetneqq;": '\U00002ACB', + "subsim;": '\U00002AC7', + "subsub;": '\U00002AD5', + "subsup;": '\U00002AD3', + "succ;": '\U0000227B', + "succapprox;": '\U00002AB8', + "succcurlyeq;": '\U0000227D', + "succeq;": '\U00002AB0', + "succnapprox;": '\U00002ABA', + "succneqq;": '\U00002AB6', + "succnsim;": '\U000022E9', + "succsim;": '\U0000227F', + "sum;": '\U00002211', + "sung;": '\U0000266A', + "sup;": '\U00002283', + "sup1;": '\U000000B9', + "sup2;": '\U000000B2', + "sup3;": '\U000000B3', + "supE;": '\U00002AC6', + "supdot;": '\U00002ABE', + "supdsub;": '\U00002AD8', + "supe;": '\U00002287', + "supedot;": '\U00002AC4', + "suphsol;": '\U000027C9', + "suphsub;": '\U00002AD7', + "suplarr;": '\U0000297B', + "supmult;": '\U00002AC2', + "supnE;": '\U00002ACC', + "supne;": '\U0000228B', + "supplus;": '\U00002AC0', + "supset;": '\U00002283', + "supseteq;": '\U00002287', + "supseteqq;": '\U00002AC6', + "supsetneq;": '\U0000228B', + "supsetneqq;": '\U00002ACC', + "supsim;": '\U00002AC8', + "supsub;": '\U00002AD4', + "supsup;": '\U00002AD6', + "swArr;": '\U000021D9', + "swarhk;": '\U00002926', + "swarr;": '\U00002199', + "swarrow;": '\U00002199', + "swnwar;": '\U0000292A', + "szlig;": '\U000000DF', + "target;": '\U00002316', + "tau;": '\U000003C4', + "tbrk;": '\U000023B4', + "tcaron;": '\U00000165', + "tcedil;": '\U00000163', + "tcy;": '\U00000442', + "tdot;": '\U000020DB', + "telrec;": '\U00002315', + "tfr;": '\U0001D531', + "there4;": '\U00002234', + "therefore;": '\U00002234', + "theta;": '\U000003B8', + "thetasym;": '\U000003D1', + "thetav;": '\U000003D1', + "thickapprox;": '\U00002248', + "thicksim;": '\U0000223C', + "thinsp;": '\U00002009', + "thkap;": '\U00002248', + "thksim;": '\U0000223C', + "thorn;": '\U000000FE', + "tilde;": '\U000002DC', + "times;": '\U000000D7', + "timesb;": '\U000022A0', + "timesbar;": '\U00002A31', + "timesd;": '\U00002A30', + "tint;": '\U0000222D', + "toea;": '\U00002928', + "top;": '\U000022A4', + "topbot;": '\U00002336', + "topcir;": '\U00002AF1', + "topf;": '\U0001D565', + "topfork;": '\U00002ADA', + "tosa;": '\U00002929', + "tprime;": '\U00002034', + "trade;": '\U00002122', + "triangle;": '\U000025B5', + "triangledown;": '\U000025BF', + "triangleleft;": '\U000025C3', + "trianglelefteq;": '\U000022B4', + "triangleq;": '\U0000225C', + "triangleright;": '\U000025B9', + "trianglerighteq;": '\U000022B5', + "tridot;": '\U000025EC', + "trie;": '\U0000225C', + "triminus;": '\U00002A3A', + "triplus;": '\U00002A39', + "trisb;": '\U000029CD', + "tritime;": '\U00002A3B', + "trpezium;": '\U000023E2', + "tscr;": '\U0001D4C9', + "tscy;": '\U00000446', + "tshcy;": '\U0000045B', + "tstrok;": '\U00000167', + "twixt;": '\U0000226C', + "twoheadleftarrow;": '\U0000219E', + "twoheadrightarrow;": '\U000021A0', + "uArr;": '\U000021D1', + "uHar;": '\U00002963', + "uacute;": '\U000000FA', + "uarr;": '\U00002191', + "ubrcy;": '\U0000045E', + "ubreve;": '\U0000016D', + "ucirc;": '\U000000FB', + "ucy;": '\U00000443', + "udarr;": '\U000021C5', + "udblac;": '\U00000171', + "udhar;": '\U0000296E', + "ufisht;": '\U0000297E', + "ufr;": '\U0001D532', + "ugrave;": '\U000000F9', + "uharl;": '\U000021BF', + "uharr;": '\U000021BE', + "uhblk;": '\U00002580', + "ulcorn;": '\U0000231C', + "ulcorner;": '\U0000231C', + "ulcrop;": '\U0000230F', + "ultri;": '\U000025F8', + "umacr;": '\U0000016B', + "uml;": '\U000000A8', + "uogon;": '\U00000173', + "uopf;": '\U0001D566', + "uparrow;": '\U00002191', + "updownarrow;": '\U00002195', + "upharpoonleft;": '\U000021BF', + "upharpoonright;": '\U000021BE', + "uplus;": '\U0000228E', + "upsi;": '\U000003C5', + "upsih;": '\U000003D2', + "upsilon;": '\U000003C5', + "upuparrows;": '\U000021C8', + "urcorn;": '\U0000231D', + "urcorner;": '\U0000231D', + "urcrop;": '\U0000230E', + "uring;": '\U0000016F', + "urtri;": '\U000025F9', + "uscr;": '\U0001D4CA', + "utdot;": '\U000022F0', + "utilde;": '\U00000169', + "utri;": '\U000025B5', + "utrif;": '\U000025B4', + "uuarr;": '\U000021C8', + "uuml;": '\U000000FC', + "uwangle;": '\U000029A7', + "vArr;": '\U000021D5', + "vBar;": '\U00002AE8', + "vBarv;": '\U00002AE9', + "vDash;": '\U000022A8', + "vangrt;": '\U0000299C', + "varepsilon;": '\U000003F5', + "varkappa;": '\U000003F0', + "varnothing;": '\U00002205', + "varphi;": '\U000003D5', + "varpi;": '\U000003D6', + "varpropto;": '\U0000221D', + "varr;": '\U00002195', + "varrho;": '\U000003F1', + "varsigma;": '\U000003C2', + "vartheta;": '\U000003D1', + "vartriangleleft;": '\U000022B2', + "vartriangleright;": '\U000022B3', + "vcy;": '\U00000432', + "vdash;": '\U000022A2', + "vee;": '\U00002228', + "veebar;": '\U000022BB', + "veeeq;": '\U0000225A', + "vellip;": '\U000022EE', + "verbar;": '\U0000007C', + "vert;": '\U0000007C', + "vfr;": '\U0001D533', + "vltri;": '\U000022B2', + "vopf;": '\U0001D567', + "vprop;": '\U0000221D', + "vrtri;": '\U000022B3', + "vscr;": '\U0001D4CB', + "vzigzag;": '\U0000299A', + "wcirc;": '\U00000175', + "wedbar;": '\U00002A5F', + "wedge;": '\U00002227', + "wedgeq;": '\U00002259', + "weierp;": '\U00002118', + "wfr;": '\U0001D534', + "wopf;": '\U0001D568', + "wp;": '\U00002118', + "wr;": '\U00002240', + "wreath;": '\U00002240', + "wscr;": '\U0001D4CC', + "xcap;": '\U000022C2', + "xcirc;": '\U000025EF', + "xcup;": '\U000022C3', + "xdtri;": '\U000025BD', + "xfr;": '\U0001D535', + "xhArr;": '\U000027FA', + "xharr;": '\U000027F7', + "xi;": '\U000003BE', + "xlArr;": '\U000027F8', + "xlarr;": '\U000027F5', + "xmap;": '\U000027FC', + "xnis;": '\U000022FB', + "xodot;": '\U00002A00', + "xopf;": '\U0001D569', + "xoplus;": '\U00002A01', + "xotime;": '\U00002A02', + "xrArr;": '\U000027F9', + "xrarr;": '\U000027F6', + "xscr;": '\U0001D4CD', + "xsqcup;": '\U00002A06', + "xuplus;": '\U00002A04', + "xutri;": '\U000025B3', + "xvee;": '\U000022C1', + "xwedge;": '\U000022C0', + "yacute;": '\U000000FD', + "yacy;": '\U0000044F', + "ycirc;": '\U00000177', + "ycy;": '\U0000044B', + "yen;": '\U000000A5', + "yfr;": '\U0001D536', + "yicy;": '\U00000457', + "yopf;": '\U0001D56A', + "yscr;": '\U0001D4CE', + "yucy;": '\U0000044E', + "yuml;": '\U000000FF', + "zacute;": '\U0000017A', + "zcaron;": '\U0000017E', + "zcy;": '\U00000437', + "zdot;": '\U0000017C', + "zeetrf;": '\U00002128', + "zeta;": '\U000003B6', + "zfr;": '\U0001D537', + "zhcy;": '\U00000436', + "zigrarr;": '\U000021DD', + "zopf;": '\U0001D56B', + "zscr;": '\U0001D4CF', + "zwj;": '\U0000200D', + "zwnj;": '\U0000200C', + "AElig": '\U000000C6', + "AMP": '\U00000026', + "Aacute": '\U000000C1', + "Acirc": '\U000000C2', + "Agrave": '\U000000C0', + "Aring": '\U000000C5', + "Atilde": '\U000000C3', + "Auml": '\U000000C4', + "COPY": '\U000000A9', + "Ccedil": '\U000000C7', + "ETH": '\U000000D0', + "Eacute": '\U000000C9', + "Ecirc": '\U000000CA', + "Egrave": '\U000000C8', + "Euml": '\U000000CB', + "GT": '\U0000003E', + "Iacute": '\U000000CD', + "Icirc": '\U000000CE', + "Igrave": '\U000000CC', + "Iuml": '\U000000CF', + "LT": '\U0000003C', + "Ntilde": '\U000000D1', + "Oacute": '\U000000D3', + "Ocirc": '\U000000D4', + "Ograve": '\U000000D2', + "Oslash": '\U000000D8', + "Otilde": '\U000000D5', + "Ouml": '\U000000D6', + "QUOT": '\U00000022', + "REG": '\U000000AE', + "THORN": '\U000000DE', + "Uacute": '\U000000DA', + "Ucirc": '\U000000DB', + "Ugrave": '\U000000D9', + "Uuml": '\U000000DC', + "Yacute": '\U000000DD', + "aacute": '\U000000E1', + "acirc": '\U000000E2', + "acute": '\U000000B4', + "aelig": '\U000000E6', + "agrave": '\U000000E0', + "amp": '\U00000026', + "aring": '\U000000E5', + "atilde": '\U000000E3', + "auml": '\U000000E4', + "brvbar": '\U000000A6', + "ccedil": '\U000000E7', + "cedil": '\U000000B8', + "cent": '\U000000A2', + "copy": '\U000000A9', + "curren": '\U000000A4', + "deg": '\U000000B0', + "divide": '\U000000F7', + "eacute": '\U000000E9', + "ecirc": '\U000000EA', + "egrave": '\U000000E8', + "eth": '\U000000F0', + "euml": '\U000000EB', + "frac12": '\U000000BD', + "frac14": '\U000000BC', + "frac34": '\U000000BE', + "gt": '\U0000003E', + "iacute": '\U000000ED', + "icirc": '\U000000EE', + "iexcl": '\U000000A1', + "igrave": '\U000000EC', + "iquest": '\U000000BF', + "iuml": '\U000000EF', + "laquo": '\U000000AB', + "lt": '\U0000003C', + "macr": '\U000000AF', + "micro": '\U000000B5', + "middot": '\U000000B7', + "nbsp": '\U000000A0', + "not": '\U000000AC', + "ntilde": '\U000000F1', + "oacute": '\U000000F3', + "ocirc": '\U000000F4', + "ograve": '\U000000F2', + "ordf": '\U000000AA', + "ordm": '\U000000BA', + "oslash": '\U000000F8', + "otilde": '\U000000F5', + "ouml": '\U000000F6', + "para": '\U000000B6', + "plusmn": '\U000000B1', + "pound": '\U000000A3', + "quot": '\U00000022', + "raquo": '\U000000BB', + "reg": '\U000000AE', + "sect": '\U000000A7', + "shy": '\U000000AD', + "sup1": '\U000000B9', + "sup2": '\U000000B2', + "sup3": '\U000000B3', + "szlig": '\U000000DF', + "thorn": '\U000000FE', + "times": '\U000000D7', + "uacute": '\U000000FA', + "ucirc": '\U000000FB', + "ugrave": '\U000000F9', + "uml": '\U000000A8', + "uuml": '\U000000FC', + "yacute": '\U000000FD', + "yen": '\U000000A5', + "yuml": '\U000000FF', + } + + entity2 = map[string][2]rune{ + // TODO(nigeltao): Handle replacements that are wider than their names. + // "nLt;": {'\u226A', '\u20D2'}, + // "nGt;": {'\u226B', '\u20D2'}, + "NotEqualTilde;": {'\u2242', '\u0338'}, + "NotGreaterFullEqual;": {'\u2267', '\u0338'}, + "NotGreaterGreater;": {'\u226B', '\u0338'}, + "NotGreaterSlantEqual;": {'\u2A7E', '\u0338'}, + "NotHumpDownHump;": {'\u224E', '\u0338'}, + "NotHumpEqual;": {'\u224F', '\u0338'}, + "NotLeftTriangleBar;": {'\u29CF', '\u0338'}, + "NotLessLess;": {'\u226A', '\u0338'}, + "NotLessSlantEqual;": {'\u2A7D', '\u0338'}, + "NotNestedGreaterGreater;": {'\u2AA2', '\u0338'}, + "NotNestedLessLess;": {'\u2AA1', '\u0338'}, + "NotPrecedesEqual;": {'\u2AAF', '\u0338'}, + "NotRightTriangleBar;": {'\u29D0', '\u0338'}, + "NotSquareSubset;": {'\u228F', '\u0338'}, + "NotSquareSuperset;": {'\u2290', '\u0338'}, + "NotSubset;": {'\u2282', '\u20D2'}, + "NotSucceedsEqual;": {'\u2AB0', '\u0338'}, + "NotSucceedsTilde;": {'\u227F', '\u0338'}, + "NotSuperset;": {'\u2283', '\u20D2'}, + "ThickSpace;": {'\u205F', '\u200A'}, + "acE;": {'\u223E', '\u0333'}, + "bne;": {'\u003D', '\u20E5'}, + "bnequiv;": {'\u2261', '\u20E5'}, + "caps;": {'\u2229', '\uFE00'}, + "cups;": {'\u222A', '\uFE00'}, + "fjlig;": {'\u0066', '\u006A'}, + "gesl;": {'\u22DB', '\uFE00'}, + "gvertneqq;": {'\u2269', '\uFE00'}, + "gvnE;": {'\u2269', '\uFE00'}, + "lates;": {'\u2AAD', '\uFE00'}, + "lesg;": {'\u22DA', '\uFE00'}, + "lvertneqq;": {'\u2268', '\uFE00'}, + "lvnE;": {'\u2268', '\uFE00'}, + "nGg;": {'\u22D9', '\u0338'}, + "nGtv;": {'\u226B', '\u0338'}, + "nLl;": {'\u22D8', '\u0338'}, + "nLtv;": {'\u226A', '\u0338'}, + "nang;": {'\u2220', '\u20D2'}, + "napE;": {'\u2A70', '\u0338'}, + "napid;": {'\u224B', '\u0338'}, + "nbump;": {'\u224E', '\u0338'}, + "nbumpe;": {'\u224F', '\u0338'}, + "ncongdot;": {'\u2A6D', '\u0338'}, + "nedot;": {'\u2250', '\u0338'}, + "nesim;": {'\u2242', '\u0338'}, + "ngE;": {'\u2267', '\u0338'}, + "ngeqq;": {'\u2267', '\u0338'}, + "ngeqslant;": {'\u2A7E', '\u0338'}, + "nges;": {'\u2A7E', '\u0338'}, + "nlE;": {'\u2266', '\u0338'}, + "nleqq;": {'\u2266', '\u0338'}, + "nleqslant;": {'\u2A7D', '\u0338'}, + "nles;": {'\u2A7D', '\u0338'}, + "notinE;": {'\u22F9', '\u0338'}, + "notindot;": {'\u22F5', '\u0338'}, + "nparsl;": {'\u2AFD', '\u20E5'}, + "npart;": {'\u2202', '\u0338'}, + "npre;": {'\u2AAF', '\u0338'}, + "npreceq;": {'\u2AAF', '\u0338'}, + "nrarrc;": {'\u2933', '\u0338'}, + "nrarrw;": {'\u219D', '\u0338'}, + "nsce;": {'\u2AB0', '\u0338'}, + "nsubE;": {'\u2AC5', '\u0338'}, + "nsubset;": {'\u2282', '\u20D2'}, + "nsubseteqq;": {'\u2AC5', '\u0338'}, + "nsucceq;": {'\u2AB0', '\u0338'}, + "nsupE;": {'\u2AC6', '\u0338'}, + "nsupset;": {'\u2283', '\u20D2'}, + "nsupseteqq;": {'\u2AC6', '\u0338'}, + "nvap;": {'\u224D', '\u20D2'}, + "nvge;": {'\u2265', '\u20D2'}, + "nvgt;": {'\u003E', '\u20D2'}, + "nvle;": {'\u2264', '\u20D2'}, + "nvlt;": {'\u003C', '\u20D2'}, + "nvltrie;": {'\u22B4', '\u20D2'}, + "nvrtrie;": {'\u22B5', '\u20D2'}, + "nvsim;": {'\u223C', '\u20D2'}, + "race;": {'\u223D', '\u0331'}, + "smtes;": {'\u2AAC', '\uFE00'}, + "sqcaps;": {'\u2293', '\uFE00'}, + "sqcups;": {'\u2294', '\uFE00'}, + "varsubsetneq;": {'\u228A', '\uFE00'}, + "varsubsetneqq;": {'\u2ACB', '\uFE00'}, + "varsupsetneq;": {'\u228B', '\uFE00'}, + "varsupsetneqq;": {'\u2ACC', '\uFE00'}, + "vnsub;": {'\u2282', '\u20D2'}, + "vnsup;": {'\u2283', '\u20D2'}, + "vsubnE;": {'\u2ACB', '\uFE00'}, + "vsubne;": {'\u228A', '\uFE00'}, + "vsupnE;": {'\u2ACC', '\uFE00'}, + "vsupne;": {'\u228B', '\uFE00'}, + } } diff --git a/html/entity_test.go b/html/entity_test.go index b53f866fa..6688ed2c4 100644 --- a/html/entity_test.go +++ b/html/entity_test.go @@ -9,7 +9,15 @@ import ( "unicode/utf8" ) +func init() { + UnescapeString("") // force load of entity maps +} + func TestEntityLength(t *testing.T) { + if len(entity) == 0 || len(entity2) == 0 { + t.Fatal("maps not loaded") + } + // We verify that the length of UTF-8 encoding of each value is <= 1 + len(key). // The +1 comes from the leading "&". This property implies that the length of // unescaped text is <= the length of escaped text. diff --git a/html/escape.go b/html/escape.go index adc42382c..795b88a90 100644 --- a/html/escape.go +++ b/html/escape.go @@ -165,6 +165,7 @@ func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) { // unescape unescapes b's entities in-place, so that "a<b" becomes "a Date: Tue, 30 Apr 2019 13:51:05 +0200 Subject: [PATCH 08/22] html: add a Fuzz function Adds a sample Fuzz test function to package html based on https://github.com/dvyukov/go-fuzz-corpus/blob/master/stdhtml/main.go Updates #19109 Updates #31309 Change-Id: I8c49fff8f70fc8a8813daf1abf0044752003adbb Reviewed-on: https://go-review.googlesource.com/c/go/+/174301 Reviewed-by: Brad Fitzpatrick Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot Cherry-picked-from: https://github.com/golang/go/commit/4ad13555184eb0697c2e92c64c1b0bdb287ccc10 --- html/fuzz.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 html/fuzz.go diff --git a/html/fuzz.go b/html/fuzz.go new file mode 100644 index 000000000..ffa3e257f --- /dev/null +++ b/html/fuzz.go @@ -0,0 +1,31 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build gofuzz + +package html + +import ( + "fmt" +) + +func Fuzz(data []byte) int { + v := string(data) + + e := EscapeString(v) + u := UnescapeString(e) + if v != u { + fmt.Printf("v = %q\n", v) + fmt.Printf("e = %q\n", e) + fmt.Printf("u = %q\n", u) + panic("not equal") + } + + // As per the documentation, this isn't always equal to v, so it makes + // no sense to check for equality. It can still be interesting to find + // panics in it though. + EscapeString(UnescapeString(v)) + + return 0 +} From ce55338b3fea675de929be905d73b2bcaed5d54b Mon Sep 17 00:00:00 2001 From: fujimoto kyosuke Date: Sun, 12 Jan 2020 06:49:19 +0000 Subject: [PATCH 09/22] html: update URL in comment The comment contained a link that had a file name and ID that no longer existed, so change to the URL of the corresponding part of the latest page. Change-Id: I74e0885aabf470facc39b84035f7a83fef9c6a8e GitHub-Last-Rev: 5681c84d9f1029449da6860c65a1d9a128296e85 GitHub-Pull-Request: golang/go#36514 Reviewed-on: https://go-review.googlesource.com/c/go/+/214181 Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor Cherry-picked-from: https://github.com/golang/go/commit/52c4488471ed52085a29e173226b3cbd2bf22b20 --- html/escape.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/escape.go b/html/escape.go index 795b88a90..35763c28f 100644 --- a/html/escape.go +++ b/html/escape.go @@ -12,7 +12,7 @@ import ( // These replacements permit compatibility with old numeric entities that // assumed Windows-1252 encoding. -// https://html.spec.whatwg.org/multipage/syntax.html#consume-a-character-reference +// https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-end-state var replacementTable = [...]rune{ '\u20AC', // First entry is what 0x80 should be replaced with. '\u0081', From 2edec1b3995567c5989071e512224752ccf0617b Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Fri, 19 Feb 2021 18:35:10 -0500 Subject: [PATCH 10/22] all: go fmt std cmd (but revert vendor) Make all our package sources use Go 1.17 gofmt format (adding //go:build lines). Part of //go:build change (#41184). See https://golang.org/design/draft-gobuild Change-Id: Ia0534360e4957e58cd9a18429c39d0e32a6addb4 Reviewed-on: https://go-review.googlesource.com/c/go/+/294430 Trust: Russ Cox Run-TryBot: Russ Cox TryBot-Result: Go Bot Reviewed-by: Jason A. Donenfeld Reviewed-by: Ian Lance Taylor Cherry-picked-from: https://github.com/golang/go/commit/d4b26382342c98a95b85140b2863bc30c48edd68 --- html/fuzz.go | 1 + 1 file changed, 1 insertion(+) diff --git a/html/fuzz.go b/html/fuzz.go index ffa3e257f..ecaf4f906 100644 --- a/html/fuzz.go +++ b/html/fuzz.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build gofuzz // +build gofuzz package html From c90d706abdb6db85ba91a7a6c64fcb22b088eb80 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Wed, 25 Aug 2021 12:48:26 -0400 Subject: [PATCH 11/22] all: go fix -fix=buildtag std cmd (except for bootstrap deps, vendor) When these packages are released as part of Go 1.18, Go 1.16 will no longer be supported, so we can remove the +build tags in these files. Ran go fix -fix=buildtag std cmd and then reverted the bootstrapDirs as defined in cmd/dist/buildtool.go, which need to continue to build with Go 1.4 for now. Also reverted vendor and cmd/vendor, which will need to be updated in their own repos first. Manual changes in runtime/pprof/mprof_test.go to adjust line numbers. For #41184. Change-Id: Ic0f93f7091295b6abc76ed5cd6e6746e1280861e Reviewed-on: https://go-review.googlesource.com/c/go/+/344955 Trust: Russ Cox Run-TryBot: Russ Cox TryBot-Result: Go Bot Reviewed-by: Bryan C. Mills Cherry-picked-from: https://github.com/golang/go/commit/f229e7031a6efb2f23241b5da000c3b3203081d6 --- html/fuzz.go | 1 - 1 file changed, 1 deletion(-) diff --git a/html/fuzz.go b/html/fuzz.go index ecaf4f906..cd70f9710 100644 --- a/html/fuzz.go +++ b/html/fuzz.go @@ -3,7 +3,6 @@ // license that can be found in the LICENSE file. //go:build gofuzz -// +build gofuzz package html From 3a376ddfe4df3425b499db1360b72dfc82e22b52 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Wed, 10 May 2023 17:08:59 +0200 Subject: [PATCH 12/22] html: convert fuzz test to native Go fuzzing Convert the existing gofuzz based fuzz test to a testing.F based fuzz test. Change-Id: Ieae69ba7fb17bd54d95c7bb2f4ed04c323c9f15f Reviewed-on: https://go-review.googlesource.com/c/go/+/494195 TryBot-Result: Gopher Robot Reviewed-by: Ian Lance Taylor Reviewed-by: Cherry Mui Auto-Submit: Tobias Klauser Run-TryBot: Tobias Klauser Cherry-picked-from: https://github.com/golang/go/commit/200a01ff5589e2b8eb8cebeb4dcf6469aceaab27 --- html/fuzz.go | 31 ------------------------------- html/fuzz_test.go | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+), 31 deletions(-) delete mode 100644 html/fuzz.go create mode 100644 html/fuzz_test.go diff --git a/html/fuzz.go b/html/fuzz.go deleted file mode 100644 index cd70f9710..000000000 --- a/html/fuzz.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build gofuzz - -package html - -import ( - "fmt" -) - -func Fuzz(data []byte) int { - v := string(data) - - e := EscapeString(v) - u := UnescapeString(e) - if v != u { - fmt.Printf("v = %q\n", v) - fmt.Printf("e = %q\n", e) - fmt.Printf("u = %q\n", u) - panic("not equal") - } - - // As per the documentation, this isn't always equal to v, so it makes - // no sense to check for equality. It can still be interesting to find - // panics in it though. - EscapeString(UnescapeString(v)) - - return 0 -} diff --git a/html/fuzz_test.go b/html/fuzz_test.go new file mode 100644 index 000000000..ed15d8f27 --- /dev/null +++ b/html/fuzz_test.go @@ -0,0 +1,22 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package html + +import "testing" + +func FuzzEscapeUnescape(f *testing.F) { + f.Fuzz(func(t *testing.T, v string) { + e := EscapeString(v) + u := UnescapeString(e) + if u != v { + t.Errorf("EscapeString(%q) = %q, UnescapeString(%q) = %q, want %q", v, e, e, u, v) + } + + // As per the documentation, this isn't always equal to v, so it makes + // no sense to check for equality. It can still be interesting to find + // panics in it though. + EscapeString(UnescapeString(v)) + }) +} From d93247fc0d4e613a9f662677cbe9c9e408a7e1d7 Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Tue, 23 Apr 2024 16:20:30 -0600 Subject: [PATCH 13/22] html: add tests for unescape() unescape() is the []byte variant of UnescapeString(). --- html/escape_test.go | 6 +++++- html/fuzz_test.go | 11 ++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/html/escape_test.go b/html/escape_test.go index 8b51a5540..3b9f1a0e1 100644 --- a/html/escape_test.go +++ b/html/escape_test.go @@ -91,7 +91,11 @@ func TestUnescape(t *testing.T) { for _, tt := range unescapeTests { unescaped := UnescapeString(tt.html) if unescaped != tt.unescaped { - t.Errorf("TestUnescape %s: want %q, got %q", tt.desc, tt.unescaped, unescaped) + t.Errorf("TestUnescape %s: string: want %q, got %q", tt.desc, tt.unescaped, unescaped) + } + unescaped = string(unescape([]byte(tt.html), false)) + if unescaped != tt.unescaped { + t.Errorf("TestUnescape %s: bytes: want %q, got %q", tt.desc, tt.unescaped, unescaped) } } } diff --git a/html/fuzz_test.go b/html/fuzz_test.go index ed15d8f27..6fd004ee8 100644 --- a/html/fuzz_test.go +++ b/html/fuzz_test.go @@ -13,10 +13,19 @@ func FuzzEscapeUnescape(f *testing.F) { if u != v { t.Errorf("EscapeString(%q) = %q, UnescapeString(%q) = %q, want %q", v, e, e, u, v) } + u2 := string(unescape([]byte(e), false)) + if u2 != u { + t.Errorf("UnescapeString(%q) = %q, unescape(%q, false) = %q", e, u, e, u2) + } + u = UnescapeString(v) + u2 = string(unescape([]byte(v), false)) + if u2 != u { + t.Errorf("UnescapeString(%q) = %q, unescape(%q, false) = %q", v, u, v, u2) + } // As per the documentation, this isn't always equal to v, so it makes // no sense to check for equality. It can still be interesting to find // panics in it though. - EscapeString(UnescapeString(v)) + EscapeString(u) }) } From 2b24cc371fc9a8301f3282a82fb318ad058ab525 Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Mon, 22 Apr 2024 00:59:44 -0600 Subject: [PATCH 14/22] html: update URL references The link to the HTML4 list of entities can be upgraded to HTTPS, and the link for the HTML5 rules for consuming a character reference is basically totally broken (it redirects to a non-specific part of the spec). --- html/entity.go | 2 +- html/escape.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/html/entity.go b/html/entity.go index f0f9a6a97..b3c9de38c 100644 --- a/html/entity.go +++ b/html/entity.go @@ -14,7 +14,7 @@ const longestEntityWithoutSemicolon = 6 // lists both "amp" and "amp;" as two separate entries. // // Note that the HTML5 list is larger than the HTML4 list at -// http://www.w3.org/TR/html4/sgml/entities.html +// https://www.w3.org/TR/html4/sgml/entities.html var entity map[string]rune // HTML entities that are two unicode codepoints. diff --git a/html/escape.go b/html/escape.go index 35763c28f..5d20be5c9 100644 --- a/html/escape.go +++ b/html/escape.go @@ -55,7 +55,7 @@ var replacementTable = [...]rune{ // Precondition: b[src] == '&' && dst <= src. // attribute should be true if parsing an attribute value. func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) { - // https://html.spec.whatwg.org/multipage/syntax.html#consume-a-character-reference + // https://html.spec.whatwg.org/multipage/parsing.html#character-reference-state // i starts at 1 because we already know that s[0] == '&'. i, s := 1, b[src:] From ca78edd19cf36f506cfd3e07020b0797dfc1989d Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Mon, 22 Apr 2024 00:01:47 -0600 Subject: [PATCH 15/22] html: UnescapeString: fix an off-by-1 error There is an off-by-1 error where it checks "<= 3" instead of "< 3", so it doesn't accept numeric entities that are 3 characters; which means single-digit decimal-encoded values that don't have a semicolon. This erroneous check occurs both pre-flight and post-flight. The fix for the pre-flight check is simple: just change it to "< 3". The post-flight check needs to be taught to differentiate between decimal and hexadecimal values. --- html/escape.go | 4 ++-- html/escape_test.go | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/html/escape.go b/html/escape.go index 5d20be5c9..73bdfc592 100644 --- a/html/escape.go +++ b/html/escape.go @@ -66,7 +66,7 @@ func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) { } if s[i] == '#' { - if len(s) <= 3 { // We need to have at least "&#.". + if len(s) < 3 { // We need to have at least "&#.". b[dst] = b[src] return dst + 1, src + 1 } @@ -103,7 +103,7 @@ func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) { break } - if i <= 3 { // No characters matched. + if i < 3 || (hex && i < 4) { // No characters matched. b[dst] = b[src] return dst + 1, src + 1 } diff --git a/html/escape_test.go b/html/escape_test.go index 3b9f1a0e1..e53dc8330 100644 --- a/html/escape_test.go +++ b/html/escape_test.go @@ -85,6 +85,12 @@ var unescapeTests = []unescapeTest{ "text &#", "text &#", }, + // Handle single-digit decimal values without a semicolon. + { + "singleDecimal", + "� text ", + "\ufffd text \x01", + }, } func TestUnescape(t *testing.T) { From 7c3f32abc5d820c48bf4fea073388980dffdef74 Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Mon, 22 Apr 2024 00:07:51 -0600 Subject: [PATCH 16/22] html: UnescapeString: detect integer overflow When reading numeric entities, UnescapeString reads the number into a rune (32-bit integer), but does not detect 32-bit overflow. This allows an entity such as "�" to be interpreted as the ASCII character "a", rather than noting that it's above unicode.RunMax (U+10FFFF) and interpreting it as unicode.ReplacementChar (U+FFFD). To solve this: First, simply make a note of it when we cross U+10FFFF. Then after we're done scanning in the number, if we made that note, then set the value to a fixed above-MaxRune value. --- html/escape.go | 11 +++++++++++ html/escape_test.go | 8 ++++++++ 2 files changed, 19 insertions(+) diff --git a/html/escape.go b/html/escape.go index 73bdfc592..a073ed833 100644 --- a/html/escape.go +++ b/html/escape.go @@ -79,9 +79,17 @@ func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) { } x := '\x00' + overflowed := false for i < len(s) { c = s[i] i++ + if x > 0x10FFFF { + // Make a note that we're above the maximum + // value, in case later we overflow the integer. + // Don't `break` though, we still want to + // consume the characters. + overflowed = true + } if hex { if '0' <= c && c <= '9' { x = 16*x + rune(c) - '0' @@ -102,6 +110,9 @@ func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) { } break } + if overflowed { + x = 0x110000 + } if i < 3 || (hex && i < 4) { // No characters matched. b[dst] = b[src] diff --git a/html/escape_test.go b/html/escape_test.go index e53dc8330..6b5e6f35d 100644 --- a/html/escape_test.go +++ b/html/escape_test.go @@ -91,6 +91,14 @@ var unescapeTests = []unescapeTest{ "� text ", "\ufffd text \x01", }, + // Handle integer overflow. + { + "integerOverflow", + // These values overflow (u)int16, (u)int32, and + // (u)int64, respectively, to be "a". + "𐁡 � �", + "\U00010061 \ufffd \ufffd", + }, } func TestUnescape(t *testing.T) { From db4176fe42f0e89fe2b01b0fb2872bc68e5d320d Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Tue, 23 Apr 2024 15:53:58 -0600 Subject: [PATCH 17/22] html: unescapeEntity: fuss with signature and var names This is to make the diff of the next commit less noisy. --- html/escape.go | 58 +++++++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/html/escape.go b/html/escape.go index a073ed833..caa42e20c 100644 --- a/html/escape.go +++ b/html/escape.go @@ -50,25 +50,28 @@ var replacementTable = [...]rune{ // 0x0D->'\u000D' is a no-op. } -// unescapeEntity reads an entity like "<" from b[src:] and writes the -// corresponding "<" to b[dst:], returning the incremented dst and src cursors. -// Precondition: b[src] == '&' && dst <= src. +// unescapeEntity reads an entity like "<" from src[srcPos:] and +// writes the corresponding "<" to dst[dstPos:], returning dst and the +// incremented dstPos and srcPos cursors. +// +// Precondition: src[srcPos] == '&' && dstPost <= srcPos. +// // attribute should be true if parsing an attribute value. -func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) { +func unescapeEntity[S ~[]byte | string](dst []byte, src S, dstPos, srcPos int, attribute bool) (dst1 []byte, dstPos1, srcPos1 int) { // https://html.spec.whatwg.org/multipage/parsing.html#character-reference-state // i starts at 1 because we already know that s[0] == '&'. - i, s := 1, b[src:] + i, s := 1, src[srcPos:] if len(s) <= 1 { - b[dst] = b[src] - return dst + 1, src + 1 + dst[dstPos] = src[srcPos] + return dst, dstPos + 1, srcPos + 1 } if s[i] == '#' { if len(s) < 3 { // We need to have at least "&#.". - b[dst] = b[src] - return dst + 1, src + 1 + dst[dstPos] = src[srcPos] + return dst, dstPos + 1, srcPos + 1 } i++ c := s[i] @@ -115,8 +118,8 @@ func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) { } if i < 3 || (hex && i < 4) { // No characters matched. - b[dst] = b[src] - return dst + 1, src + 1 + dst[dstPos] = src[srcPos] + return dst, dstPos + 1, srcPos + 1 } if 0x80 <= x && x <= 0x9F { @@ -127,7 +130,7 @@ func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) { x = '\uFFFD' } - return dst + utf8.EncodeRune(b[dst:], x), src + i + return dst, dstPos + utf8.EncodeRune(dst[dstPos:], x), srcPos + i } // Consume the maximum number of characters possible, with the @@ -152,10 +155,10 @@ func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) { } else if attribute && entityName[len(entityName)-1] != ';' && len(s) > i && s[i] == '=' { // No-op. } else if x := entity[string(entityName)]; x != 0 { - return dst + utf8.EncodeRune(b[dst:], x), src + i + return dst, dstPos + utf8.EncodeRune(dst[dstPos:], x), srcPos + i } else if x := entity2[string(entityName)]; x[0] != 0 { - dst1 := dst + utf8.EncodeRune(b[dst:], x[0]) - return dst1 + utf8.EncodeRune(b[dst1:], x[1]), src + i + dstPos1 := dstPos + utf8.EncodeRune(dst[dstPos:], x[0]) + return dst, dstPos1 + utf8.EncodeRune(dst[dstPos1:], x[1]), srcPos + i } else if !attribute { maxLen := len(entityName) - 1 if maxLen > longestEntityWithoutSemicolon { @@ -163,14 +166,14 @@ func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) { } for j := maxLen; j > 1; j-- { if x := entity[string(entityName[:j])]; x != 0 { - return dst + utf8.EncodeRune(b[dst:], x), src + j + 1 + return dst, dstPos + utf8.EncodeRune(dst[dstPos:], x), srcPos + j + 1 } } } - dst1, src1 = dst+i, src+i - copy(b[dst:dst1], b[src:src1]) - return dst1, src1 + dstPos1, srcPos1 = dstPos+i, srcPos+i + copy(dst[dstPos:dstPos1], src[srcPos:srcPos1]) + return dst, dstPos1, srcPos1 } // unescape unescapes b's entities in-place, so that "a<b" becomes "a 0 { if b[src] == '&' { i = 0 @@ -191,16 +194,16 @@ func unescape(b []byte, attribute bool) []byte { i = bytes.IndexByte(b[src:], '&') } if i < 0 { - dst += copy(b[dst:], b[src:]) + dst += copy(b1[dst:], b[src:]) break } if i > 0 { - copy(b[dst:], b[src:src+i]) + copy(b1[dst:], b[src:src+i]) } - dst, src = unescapeEntity(b, dst+i, src+i, attribute) + b1, dst, src = unescapeEntity(b1, b, dst+i, src+i, attribute) } - return b[:dst] + return b1[:dst] } // lower lower-cases the A-Z bytes in b in-place, so that "aBc" becomes "abc". @@ -329,8 +332,9 @@ func UnescapeString(s string) string { return s } - b := []byte(s) - dst, src := unescapeEntity(b, i, i, false) + b := make([]byte, len(s)) + copy(b, s[:i]) + b, dst, src := unescapeEntity(b, s, i, i, false) for len(s[src:]) > 0 { if s[src] == '&' { i = 0 @@ -345,7 +349,7 @@ func UnescapeString(s string) string { if i > 0 { copy(b[dst:], s[src:src+i]) } - dst, src = unescapeEntity(b, dst+i, src+i, false) + b, dst, src = unescapeEntity(b, s, dst+i, src+i, false) } return string(b[:dst]) } From d717f75973be2de5f860aad25bcd8c314831634b Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Mon, 22 Apr 2024 13:35:06 -0600 Subject: [PATCH 18/22] html: UnescapeString: handle wide replacements --- html/entity.go | 14 ++++++++++---- html/entity_test.go | 7 ++++++- html/escape.go | 21 +++++++++++++++++++-- html/escape_test.go | 6 ++++++ 4 files changed, 41 insertions(+), 7 deletions(-) diff --git a/html/entity.go b/html/entity.go index b3c9de38c..8f2ccbbdd 100644 --- a/html/entity.go +++ b/html/entity.go @@ -17,9 +17,13 @@ const longestEntityWithoutSemicolon = 6 // https://www.w3.org/TR/html4/sgml/entities.html var entity map[string]rune -// HTML entities that are two unicode codepoints. +// HTML entities that are two unicode codepoints, and are not +// mentioned in entityWide. var entity2 map[string][2]rune +// HTML entities that have replacements wider than their names. +var entityWide map[string][2]rune + // populateMapsOnce guards calling populateMaps. var populateMapsOnce sync.Once @@ -2167,9 +2171,6 @@ func populateMaps() { } entity2 = map[string][2]rune{ - // TODO(nigeltao): Handle replacements that are wider than their names. - // "nLt;": {'\u226A', '\u20D2'}, - // "nGt;": {'\u226B', '\u20D2'}, "NotEqualTilde;": {'\u2242', '\u0338'}, "NotGreaterFullEqual;": {'\u2267', '\u0338'}, "NotGreaterGreater;": {'\u226B', '\u0338'}, @@ -2262,4 +2263,9 @@ func populateMaps() { "vsupnE;": {'\u2ACC', '\uFE00'}, "vsupne;": {'\u228B', '\uFE00'}, } + + entityWide = map[string][2]rune{ + "nLt;": {'\u226A', '\u20D2'}, + "nGt;": {'\u226B', '\u20D2'}, + } } diff --git a/html/entity_test.go b/html/entity_test.go index 6688ed2c4..e2819e7af 100644 --- a/html/entity_test.go +++ b/html/entity_test.go @@ -14,7 +14,7 @@ func init() { } func TestEntityLength(t *testing.T) { - if len(entity) == 0 || len(entity2) == 0 { + if len(entity) == 0 || len(entity2) == 0 || len(entityWide) == 0 { t.Fatal("maps not loaded") } @@ -34,4 +34,9 @@ func TestEntityLength(t *testing.T) { t.Error("escaped entity &" + k + " is shorter than its UTF-8 encoding " + string(v[0]) + string(v[1])) } } + for k, v := range entityWide { + if 1+len(k) >= utf8.RuneLen(v[0])+utf8.RuneLen(v[1]) { + t.Error("escaped entity &" + k + " is not shorter than its UTF-8 encoding " + string(v[0]) + string(v[1])) + } + } } diff --git a/html/escape.go b/html/escape.go index caa42e20c..4bde5af22 100644 --- a/html/escape.go +++ b/html/escape.go @@ -54,10 +54,15 @@ var replacementTable = [...]rune{ // writes the corresponding "<" to dst[dstPos:], returning dst and the // incremented dstPos and srcPos cursors. // -// Precondition: src[srcPos] == '&' && dstPost <= srcPos. +// Usually, the returned dst is the dst argument, but in the event +// that dstPos>srcPos it may be a copy. +// +// Precondition: src[srcPos] == '&'. // // attribute should be true if parsing an attribute value. func unescapeEntity[S ~[]byte | string](dst []byte, src S, dstPos, srcPos int, attribute bool) (dst1 []byte, dstPos1, srcPos1 int) { + var dstIsSrc = len(dst) == len(src) + // https://html.spec.whatwg.org/multipage/parsing.html#character-reference-state // i starts at 1 because we already know that s[0] == '&'. @@ -159,6 +164,17 @@ func unescapeEntity[S ~[]byte | string](dst []byte, src S, dstPos, srcPos int, a } else if x := entity2[string(entityName)]; x[0] != 0 { dstPos1 := dstPos + utf8.EncodeRune(dst[dstPos:], x[0]) return dst, dstPos1 + utf8.EncodeRune(dst[dstPos1:], x[1]), srcPos + i + } else if x := entityWide[string(entityName)]; x[0] != 0 { + // 5 bytes in, 6 bytes out + if dstPos == srcPos && dstIsSrc { + // make a copy + grow + dst = append(dst[:len(dst):len(dst)], 0) + } else if dstPos+6 >= len(dst) { + // grow, but don't necessarily make a copy + dst = append(dst, 0) + } + dstPos1 := dstPos + utf8.EncodeRune(dst[dstPos:], x[0]) + return dst, dstPos1 + utf8.EncodeRune(dst[dstPos1:], x[1]), srcPos + i } else if !attribute { maxLen := len(entityName) - 1 if maxLen > longestEntityWithoutSemicolon { @@ -332,7 +348,8 @@ func UnescapeString(s string) string { return s } - b := make([]byte, len(s)) + // The +1 is just so that dstIsSrc=false. + b := make([]byte, len(s)+1) copy(b, s[:i]) b, dst, src := unescapeEntity(b, s, i, i, false) for len(s[src:]) > 0 { diff --git a/html/escape_test.go b/html/escape_test.go index 6b5e6f35d..7b52c813b 100644 --- a/html/escape_test.go +++ b/html/escape_test.go @@ -99,6 +99,12 @@ var unescapeTests = []unescapeTest{ "𐁡 � �", "\U00010061 \ufffd \ufffd", }, + // Handle replacements that are wider than their names. + { + "wideReplacements", + "≪⃒ ≫⃒", + "\u226A\u20D2 \u226B\u20D2", + }, } func TestUnescape(t *testing.T) { From 7a07967b4ea5b75fbd6f60e4a0e9610a132e2c36 Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Tue, 23 Apr 2024 15:53:58 -0600 Subject: [PATCH 19/22] html: simplify and optimize escape.go --- html/escape.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/html/escape.go b/html/escape.go index 4bde5af22..5347dd539 100644 --- a/html/escape.go +++ b/html/escape.go @@ -68,16 +68,14 @@ func unescapeEntity[S ~[]byte | string](dst []byte, src S, dstPos, srcPos int, a // i starts at 1 because we already know that s[0] == '&'. i, s := 1, src[srcPos:] - if len(s) <= 1 { + // shortest possible entities are all 3 bytes: + // ">", "<", ">", "<", "�" ... " " + if len(s) < 3 { dst[dstPos] = src[srcPos] return dst, dstPos + 1, srcPos + 1 } if s[i] == '#' { - if len(s) < 3 { // We need to have at least "&#.". - dst[dstPos] = src[srcPos] - return dst, dstPos + 1, srcPos + 1 - } i++ c := s[i] hex := false @@ -308,7 +306,7 @@ func escapeCommentString(s string) string { if strings.IndexAny(s, "&>") == -1 { return s } - var buf bytes.Buffer + var buf strings.Builder escapeComment(&buf, s) return buf.String() } From d5e7e0d4f4a1bedfb93dff9f9ac83d1347fbd0d3 Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Tue, 23 Apr 2024 15:53:58 -0600 Subject: [PATCH 20/22] html: UnescapeString: simplify and optimize --- html/entity.go | 4493 +++++++++++++++++++++---------------------- html/entity_test.go | 21 +- html/escape.go | 36 +- 3 files changed, 2264 insertions(+), 2286 deletions(-) diff --git a/html/entity.go b/html/entity.go index 8f2ccbbdd..7a7efcab2 100644 --- a/html/entity.go +++ b/html/entity.go @@ -15,2257 +15,2254 @@ const longestEntityWithoutSemicolon = 6 // // Note that the HTML5 list is larger than the HTML4 list at // https://www.w3.org/TR/html4/sgml/entities.html -var entity map[string]rune +var entity map[string]entityVal -// HTML entities that are two unicode codepoints, and are not -// mentioned in entityWide. -var entity2 map[string][2]rune - -// HTML entities that have replacements wider than their names. -var entityWide map[string][2]rune - -// populateMapsOnce guards calling populateMaps. -var populateMapsOnce sync.Once +type entityVal struct { + Len int + Val [6]byte +} -// populateMaps populates entity and entity2. -func populateMaps() { - entity = map[string]rune{ - "AElig;": '\U000000C6', - "AMP;": '\U00000026', - "Aacute;": '\U000000C1', - "Abreve;": '\U00000102', - "Acirc;": '\U000000C2', - "Acy;": '\U00000410', - "Afr;": '\U0001D504', - "Agrave;": '\U000000C0', - "Alpha;": '\U00000391', - "Amacr;": '\U00000100', - "And;": '\U00002A53', - "Aogon;": '\U00000104', - "Aopf;": '\U0001D538', - "ApplyFunction;": '\U00002061', - "Aring;": '\U000000C5', - "Ascr;": '\U0001D49C', - "Assign;": '\U00002254', - "Atilde;": '\U000000C3', - "Auml;": '\U000000C4', - "Backslash;": '\U00002216', - "Barv;": '\U00002AE7', - "Barwed;": '\U00002306', - "Bcy;": '\U00000411', - "Because;": '\U00002235', - "Bernoullis;": '\U0000212C', - "Beta;": '\U00000392', - "Bfr;": '\U0001D505', - "Bopf;": '\U0001D539', - "Breve;": '\U000002D8', - "Bscr;": '\U0000212C', - "Bumpeq;": '\U0000224E', - "CHcy;": '\U00000427', - "COPY;": '\U000000A9', - "Cacute;": '\U00000106', - "Cap;": '\U000022D2', - "CapitalDifferentialD;": '\U00002145', - "Cayleys;": '\U0000212D', - "Ccaron;": '\U0000010C', - "Ccedil;": '\U000000C7', - "Ccirc;": '\U00000108', - "Cconint;": '\U00002230', - "Cdot;": '\U0000010A', - "Cedilla;": '\U000000B8', - "CenterDot;": '\U000000B7', - "Cfr;": '\U0000212D', - "Chi;": '\U000003A7', - "CircleDot;": '\U00002299', - "CircleMinus;": '\U00002296', - "CirclePlus;": '\U00002295', - "CircleTimes;": '\U00002297', - "ClockwiseContourIntegral;": '\U00002232', - "CloseCurlyDoubleQuote;": '\U0000201D', - "CloseCurlyQuote;": '\U00002019', - "Colon;": '\U00002237', - "Colone;": '\U00002A74', - "Congruent;": '\U00002261', - "Conint;": '\U0000222F', - "ContourIntegral;": '\U0000222E', - "Copf;": '\U00002102', - "Coproduct;": '\U00002210', - "CounterClockwiseContourIntegral;": '\U00002233', - "Cross;": '\U00002A2F', - "Cscr;": '\U0001D49E', - "Cup;": '\U000022D3', - "CupCap;": '\U0000224D', - "DD;": '\U00002145', - "DDotrahd;": '\U00002911', - "DJcy;": '\U00000402', - "DScy;": '\U00000405', - "DZcy;": '\U0000040F', - "Dagger;": '\U00002021', - "Darr;": '\U000021A1', - "Dashv;": '\U00002AE4', - "Dcaron;": '\U0000010E', - "Dcy;": '\U00000414', - "Del;": '\U00002207', - "Delta;": '\U00000394', - "Dfr;": '\U0001D507', - "DiacriticalAcute;": '\U000000B4', - "DiacriticalDot;": '\U000002D9', - "DiacriticalDoubleAcute;": '\U000002DD', - "DiacriticalGrave;": '\U00000060', - "DiacriticalTilde;": '\U000002DC', - "Diamond;": '\U000022C4', - "DifferentialD;": '\U00002146', - "Dopf;": '\U0001D53B', - "Dot;": '\U000000A8', - "DotDot;": '\U000020DC', - "DotEqual;": '\U00002250', - "DoubleContourIntegral;": '\U0000222F', - "DoubleDot;": '\U000000A8', - "DoubleDownArrow;": '\U000021D3', - "DoubleLeftArrow;": '\U000021D0', - "DoubleLeftRightArrow;": '\U000021D4', - "DoubleLeftTee;": '\U00002AE4', - "DoubleLongLeftArrow;": '\U000027F8', - "DoubleLongLeftRightArrow;": '\U000027FA', - "DoubleLongRightArrow;": '\U000027F9', - "DoubleRightArrow;": '\U000021D2', - "DoubleRightTee;": '\U000022A8', - "DoubleUpArrow;": '\U000021D1', - "DoubleUpDownArrow;": '\U000021D5', - "DoubleVerticalBar;": '\U00002225', - "DownArrow;": '\U00002193', - "DownArrowBar;": '\U00002913', - "DownArrowUpArrow;": '\U000021F5', - "DownBreve;": '\U00000311', - "DownLeftRightVector;": '\U00002950', - "DownLeftTeeVector;": '\U0000295E', - "DownLeftVector;": '\U000021BD', - "DownLeftVectorBar;": '\U00002956', - "DownRightTeeVector;": '\U0000295F', - "DownRightVector;": '\U000021C1', - "DownRightVectorBar;": '\U00002957', - "DownTee;": '\U000022A4', - "DownTeeArrow;": '\U000021A7', - "Downarrow;": '\U000021D3', - "Dscr;": '\U0001D49F', - "Dstrok;": '\U00000110', - "ENG;": '\U0000014A', - "ETH;": '\U000000D0', - "Eacute;": '\U000000C9', - "Ecaron;": '\U0000011A', - "Ecirc;": '\U000000CA', - "Ecy;": '\U0000042D', - "Edot;": '\U00000116', - "Efr;": '\U0001D508', - "Egrave;": '\U000000C8', - "Element;": '\U00002208', - "Emacr;": '\U00000112', - "EmptySmallSquare;": '\U000025FB', - "EmptyVerySmallSquare;": '\U000025AB', - "Eogon;": '\U00000118', - "Eopf;": '\U0001D53C', - "Epsilon;": '\U00000395', - "Equal;": '\U00002A75', - "EqualTilde;": '\U00002242', - "Equilibrium;": '\U000021CC', - "Escr;": '\U00002130', - "Esim;": '\U00002A73', - "Eta;": '\U00000397', - "Euml;": '\U000000CB', - "Exists;": '\U00002203', - "ExponentialE;": '\U00002147', - "Fcy;": '\U00000424', - "Ffr;": '\U0001D509', - "FilledSmallSquare;": '\U000025FC', - "FilledVerySmallSquare;": '\U000025AA', - "Fopf;": '\U0001D53D', - "ForAll;": '\U00002200', - "Fouriertrf;": '\U00002131', - "Fscr;": '\U00002131', - "GJcy;": '\U00000403', - "GT;": '\U0000003E', - "Gamma;": '\U00000393', - "Gammad;": '\U000003DC', - "Gbreve;": '\U0000011E', - "Gcedil;": '\U00000122', - "Gcirc;": '\U0000011C', - "Gcy;": '\U00000413', - "Gdot;": '\U00000120', - "Gfr;": '\U0001D50A', - "Gg;": '\U000022D9', - "Gopf;": '\U0001D53E', - "GreaterEqual;": '\U00002265', - "GreaterEqualLess;": '\U000022DB', - "GreaterFullEqual;": '\U00002267', - "GreaterGreater;": '\U00002AA2', - "GreaterLess;": '\U00002277', - "GreaterSlantEqual;": '\U00002A7E', - "GreaterTilde;": '\U00002273', - "Gscr;": '\U0001D4A2', - "Gt;": '\U0000226B', - "HARDcy;": '\U0000042A', - "Hacek;": '\U000002C7', - "Hat;": '\U0000005E', - "Hcirc;": '\U00000124', - "Hfr;": '\U0000210C', - "HilbertSpace;": '\U0000210B', - "Hopf;": '\U0000210D', - "HorizontalLine;": '\U00002500', - "Hscr;": '\U0000210B', - "Hstrok;": '\U00000126', - "HumpDownHump;": '\U0000224E', - "HumpEqual;": '\U0000224F', - "IEcy;": '\U00000415', - "IJlig;": '\U00000132', - "IOcy;": '\U00000401', - "Iacute;": '\U000000CD', - "Icirc;": '\U000000CE', - "Icy;": '\U00000418', - "Idot;": '\U00000130', - "Ifr;": '\U00002111', - "Igrave;": '\U000000CC', - "Im;": '\U00002111', - "Imacr;": '\U0000012A', - "ImaginaryI;": '\U00002148', - "Implies;": '\U000021D2', - "Int;": '\U0000222C', - "Integral;": '\U0000222B', - "Intersection;": '\U000022C2', - "InvisibleComma;": '\U00002063', - "InvisibleTimes;": '\U00002062', - "Iogon;": '\U0000012E', - "Iopf;": '\U0001D540', - "Iota;": '\U00000399', - "Iscr;": '\U00002110', - "Itilde;": '\U00000128', - "Iukcy;": '\U00000406', - "Iuml;": '\U000000CF', - "Jcirc;": '\U00000134', - "Jcy;": '\U00000419', - "Jfr;": '\U0001D50D', - "Jopf;": '\U0001D541', - "Jscr;": '\U0001D4A5', - "Jsercy;": '\U00000408', - "Jukcy;": '\U00000404', - "KHcy;": '\U00000425', - "KJcy;": '\U0000040C', - "Kappa;": '\U0000039A', - "Kcedil;": '\U00000136', - "Kcy;": '\U0000041A', - "Kfr;": '\U0001D50E', - "Kopf;": '\U0001D542', - "Kscr;": '\U0001D4A6', - "LJcy;": '\U00000409', - "LT;": '\U0000003C', - "Lacute;": '\U00000139', - "Lambda;": '\U0000039B', - "Lang;": '\U000027EA', - "Laplacetrf;": '\U00002112', - "Larr;": '\U0000219E', - "Lcaron;": '\U0000013D', - "Lcedil;": '\U0000013B', - "Lcy;": '\U0000041B', - "LeftAngleBracket;": '\U000027E8', - "LeftArrow;": '\U00002190', - "LeftArrowBar;": '\U000021E4', - "LeftArrowRightArrow;": '\U000021C6', - "LeftCeiling;": '\U00002308', - "LeftDoubleBracket;": '\U000027E6', - "LeftDownTeeVector;": '\U00002961', - "LeftDownVector;": '\U000021C3', - "LeftDownVectorBar;": '\U00002959', - "LeftFloor;": '\U0000230A', - "LeftRightArrow;": '\U00002194', - "LeftRightVector;": '\U0000294E', - "LeftTee;": '\U000022A3', - "LeftTeeArrow;": '\U000021A4', - "LeftTeeVector;": '\U0000295A', - "LeftTriangle;": '\U000022B2', - "LeftTriangleBar;": '\U000029CF', - "LeftTriangleEqual;": '\U000022B4', - "LeftUpDownVector;": '\U00002951', - "LeftUpTeeVector;": '\U00002960', - "LeftUpVector;": '\U000021BF', - "LeftUpVectorBar;": '\U00002958', - "LeftVector;": '\U000021BC', - "LeftVectorBar;": '\U00002952', - "Leftarrow;": '\U000021D0', - "Leftrightarrow;": '\U000021D4', - "LessEqualGreater;": '\U000022DA', - "LessFullEqual;": '\U00002266', - "LessGreater;": '\U00002276', - "LessLess;": '\U00002AA1', - "LessSlantEqual;": '\U00002A7D', - "LessTilde;": '\U00002272', - "Lfr;": '\U0001D50F', - "Ll;": '\U000022D8', - "Lleftarrow;": '\U000021DA', - "Lmidot;": '\U0000013F', - "LongLeftArrow;": '\U000027F5', - "LongLeftRightArrow;": '\U000027F7', - "LongRightArrow;": '\U000027F6', - "Longleftarrow;": '\U000027F8', - "Longleftrightarrow;": '\U000027FA', - "Longrightarrow;": '\U000027F9', - "Lopf;": '\U0001D543', - "LowerLeftArrow;": '\U00002199', - "LowerRightArrow;": '\U00002198', - "Lscr;": '\U00002112', - "Lsh;": '\U000021B0', - "Lstrok;": '\U00000141', - "Lt;": '\U0000226A', - "Map;": '\U00002905', - "Mcy;": '\U0000041C', - "MediumSpace;": '\U0000205F', - "Mellintrf;": '\U00002133', - "Mfr;": '\U0001D510', - "MinusPlus;": '\U00002213', - "Mopf;": '\U0001D544', - "Mscr;": '\U00002133', - "Mu;": '\U0000039C', - "NJcy;": '\U0000040A', - "Nacute;": '\U00000143', - "Ncaron;": '\U00000147', - "Ncedil;": '\U00000145', - "Ncy;": '\U0000041D', - "NegativeMediumSpace;": '\U0000200B', - "NegativeThickSpace;": '\U0000200B', - "NegativeThinSpace;": '\U0000200B', - "NegativeVeryThinSpace;": '\U0000200B', - "NestedGreaterGreater;": '\U0000226B', - "NestedLessLess;": '\U0000226A', - "NewLine;": '\U0000000A', - "Nfr;": '\U0001D511', - "NoBreak;": '\U00002060', - "NonBreakingSpace;": '\U000000A0', - "Nopf;": '\U00002115', - "Not;": '\U00002AEC', - "NotCongruent;": '\U00002262', - "NotCupCap;": '\U0000226D', - "NotDoubleVerticalBar;": '\U00002226', - "NotElement;": '\U00002209', - "NotEqual;": '\U00002260', - "NotExists;": '\U00002204', - "NotGreater;": '\U0000226F', - "NotGreaterEqual;": '\U00002271', - "NotGreaterLess;": '\U00002279', - "NotGreaterTilde;": '\U00002275', - "NotLeftTriangle;": '\U000022EA', - "NotLeftTriangleEqual;": '\U000022EC', - "NotLess;": '\U0000226E', - "NotLessEqual;": '\U00002270', - "NotLessGreater;": '\U00002278', - "NotLessTilde;": '\U00002274', - "NotPrecedes;": '\U00002280', - "NotPrecedesSlantEqual;": '\U000022E0', - "NotReverseElement;": '\U0000220C', - "NotRightTriangle;": '\U000022EB', - "NotRightTriangleEqual;": '\U000022ED', - "NotSquareSubsetEqual;": '\U000022E2', - "NotSquareSupersetEqual;": '\U000022E3', - "NotSubsetEqual;": '\U00002288', - "NotSucceeds;": '\U00002281', - "NotSucceedsSlantEqual;": '\U000022E1', - "NotSupersetEqual;": '\U00002289', - "NotTilde;": '\U00002241', - "NotTildeEqual;": '\U00002244', - "NotTildeFullEqual;": '\U00002247', - "NotTildeTilde;": '\U00002249', - "NotVerticalBar;": '\U00002224', - "Nscr;": '\U0001D4A9', - "Ntilde;": '\U000000D1', - "Nu;": '\U0000039D', - "OElig;": '\U00000152', - "Oacute;": '\U000000D3', - "Ocirc;": '\U000000D4', - "Ocy;": '\U0000041E', - "Odblac;": '\U00000150', - "Ofr;": '\U0001D512', - "Ograve;": '\U000000D2', - "Omacr;": '\U0000014C', - "Omega;": '\U000003A9', - "Omicron;": '\U0000039F', - "Oopf;": '\U0001D546', - "OpenCurlyDoubleQuote;": '\U0000201C', - "OpenCurlyQuote;": '\U00002018', - "Or;": '\U00002A54', - "Oscr;": '\U0001D4AA', - "Oslash;": '\U000000D8', - "Otilde;": '\U000000D5', - "Otimes;": '\U00002A37', - "Ouml;": '\U000000D6', - "OverBar;": '\U0000203E', - "OverBrace;": '\U000023DE', - "OverBracket;": '\U000023B4', - "OverParenthesis;": '\U000023DC', - "PartialD;": '\U00002202', - "Pcy;": '\U0000041F', - "Pfr;": '\U0001D513', - "Phi;": '\U000003A6', - "Pi;": '\U000003A0', - "PlusMinus;": '\U000000B1', - "Poincareplane;": '\U0000210C', - "Popf;": '\U00002119', - "Pr;": '\U00002ABB', - "Precedes;": '\U0000227A', - "PrecedesEqual;": '\U00002AAF', - "PrecedesSlantEqual;": '\U0000227C', - "PrecedesTilde;": '\U0000227E', - "Prime;": '\U00002033', - "Product;": '\U0000220F', - "Proportion;": '\U00002237', - "Proportional;": '\U0000221D', - "Pscr;": '\U0001D4AB', - "Psi;": '\U000003A8', - "QUOT;": '\U00000022', - "Qfr;": '\U0001D514', - "Qopf;": '\U0000211A', - "Qscr;": '\U0001D4AC', - "RBarr;": '\U00002910', - "REG;": '\U000000AE', - "Racute;": '\U00000154', - "Rang;": '\U000027EB', - "Rarr;": '\U000021A0', - "Rarrtl;": '\U00002916', - "Rcaron;": '\U00000158', - "Rcedil;": '\U00000156', - "Rcy;": '\U00000420', - "Re;": '\U0000211C', - "ReverseElement;": '\U0000220B', - "ReverseEquilibrium;": '\U000021CB', - "ReverseUpEquilibrium;": '\U0000296F', - "Rfr;": '\U0000211C', - "Rho;": '\U000003A1', - "RightAngleBracket;": '\U000027E9', - "RightArrow;": '\U00002192', - "RightArrowBar;": '\U000021E5', - "RightArrowLeftArrow;": '\U000021C4', - "RightCeiling;": '\U00002309', - "RightDoubleBracket;": '\U000027E7', - "RightDownTeeVector;": '\U0000295D', - "RightDownVector;": '\U000021C2', - "RightDownVectorBar;": '\U00002955', - "RightFloor;": '\U0000230B', - "RightTee;": '\U000022A2', - "RightTeeArrow;": '\U000021A6', - "RightTeeVector;": '\U0000295B', - "RightTriangle;": '\U000022B3', - "RightTriangleBar;": '\U000029D0', - "RightTriangleEqual;": '\U000022B5', - "RightUpDownVector;": '\U0000294F', - "RightUpTeeVector;": '\U0000295C', - "RightUpVector;": '\U000021BE', - "RightUpVectorBar;": '\U00002954', - "RightVector;": '\U000021C0', - "RightVectorBar;": '\U00002953', - "Rightarrow;": '\U000021D2', - "Ropf;": '\U0000211D', - "RoundImplies;": '\U00002970', - "Rrightarrow;": '\U000021DB', - "Rscr;": '\U0000211B', - "Rsh;": '\U000021B1', - "RuleDelayed;": '\U000029F4', - "SHCHcy;": '\U00000429', - "SHcy;": '\U00000428', - "SOFTcy;": '\U0000042C', - "Sacute;": '\U0000015A', - "Sc;": '\U00002ABC', - "Scaron;": '\U00000160', - "Scedil;": '\U0000015E', - "Scirc;": '\U0000015C', - "Scy;": '\U00000421', - "Sfr;": '\U0001D516', - "ShortDownArrow;": '\U00002193', - "ShortLeftArrow;": '\U00002190', - "ShortRightArrow;": '\U00002192', - "ShortUpArrow;": '\U00002191', - "Sigma;": '\U000003A3', - "SmallCircle;": '\U00002218', - "Sopf;": '\U0001D54A', - "Sqrt;": '\U0000221A', - "Square;": '\U000025A1', - "SquareIntersection;": '\U00002293', - "SquareSubset;": '\U0000228F', - "SquareSubsetEqual;": '\U00002291', - "SquareSuperset;": '\U00002290', - "SquareSupersetEqual;": '\U00002292', - "SquareUnion;": '\U00002294', - "Sscr;": '\U0001D4AE', - "Star;": '\U000022C6', - "Sub;": '\U000022D0', - "Subset;": '\U000022D0', - "SubsetEqual;": '\U00002286', - "Succeeds;": '\U0000227B', - "SucceedsEqual;": '\U00002AB0', - "SucceedsSlantEqual;": '\U0000227D', - "SucceedsTilde;": '\U0000227F', - "SuchThat;": '\U0000220B', - "Sum;": '\U00002211', - "Sup;": '\U000022D1', - "Superset;": '\U00002283', - "SupersetEqual;": '\U00002287', - "Supset;": '\U000022D1', - "THORN;": '\U000000DE', - "TRADE;": '\U00002122', - "TSHcy;": '\U0000040B', - "TScy;": '\U00000426', - "Tab;": '\U00000009', - "Tau;": '\U000003A4', - "Tcaron;": '\U00000164', - "Tcedil;": '\U00000162', - "Tcy;": '\U00000422', - "Tfr;": '\U0001D517', - "Therefore;": '\U00002234', - "Theta;": '\U00000398', - "ThinSpace;": '\U00002009', - "Tilde;": '\U0000223C', - "TildeEqual;": '\U00002243', - "TildeFullEqual;": '\U00002245', - "TildeTilde;": '\U00002248', - "Topf;": '\U0001D54B', - "TripleDot;": '\U000020DB', - "Tscr;": '\U0001D4AF', - "Tstrok;": '\U00000166', - "Uacute;": '\U000000DA', - "Uarr;": '\U0000219F', - "Uarrocir;": '\U00002949', - "Ubrcy;": '\U0000040E', - "Ubreve;": '\U0000016C', - "Ucirc;": '\U000000DB', - "Ucy;": '\U00000423', - "Udblac;": '\U00000170', - "Ufr;": '\U0001D518', - "Ugrave;": '\U000000D9', - "Umacr;": '\U0000016A', - "UnderBar;": '\U0000005F', - "UnderBrace;": '\U000023DF', - "UnderBracket;": '\U000023B5', - "UnderParenthesis;": '\U000023DD', - "Union;": '\U000022C3', - "UnionPlus;": '\U0000228E', - "Uogon;": '\U00000172', - "Uopf;": '\U0001D54C', - "UpArrow;": '\U00002191', - "UpArrowBar;": '\U00002912', - "UpArrowDownArrow;": '\U000021C5', - "UpDownArrow;": '\U00002195', - "UpEquilibrium;": '\U0000296E', - "UpTee;": '\U000022A5', - "UpTeeArrow;": '\U000021A5', - "Uparrow;": '\U000021D1', - "Updownarrow;": '\U000021D5', - "UpperLeftArrow;": '\U00002196', - "UpperRightArrow;": '\U00002197', - "Upsi;": '\U000003D2', - "Upsilon;": '\U000003A5', - "Uring;": '\U0000016E', - "Uscr;": '\U0001D4B0', - "Utilde;": '\U00000168', - "Uuml;": '\U000000DC', - "VDash;": '\U000022AB', - "Vbar;": '\U00002AEB', - "Vcy;": '\U00000412', - "Vdash;": '\U000022A9', - "Vdashl;": '\U00002AE6', - "Vee;": '\U000022C1', - "Verbar;": '\U00002016', - "Vert;": '\U00002016', - "VerticalBar;": '\U00002223', - "VerticalLine;": '\U0000007C', - "VerticalSeparator;": '\U00002758', - "VerticalTilde;": '\U00002240', - "VeryThinSpace;": '\U0000200A', - "Vfr;": '\U0001D519', - "Vopf;": '\U0001D54D', - "Vscr;": '\U0001D4B1', - "Vvdash;": '\U000022AA', - "Wcirc;": '\U00000174', - "Wedge;": '\U000022C0', - "Wfr;": '\U0001D51A', - "Wopf;": '\U0001D54E', - "Wscr;": '\U0001D4B2', - "Xfr;": '\U0001D51B', - "Xi;": '\U0000039E', - "Xopf;": '\U0001D54F', - "Xscr;": '\U0001D4B3', - "YAcy;": '\U0000042F', - "YIcy;": '\U00000407', - "YUcy;": '\U0000042E', - "Yacute;": '\U000000DD', - "Ycirc;": '\U00000176', - "Ycy;": '\U0000042B', - "Yfr;": '\U0001D51C', - "Yopf;": '\U0001D550', - "Yscr;": '\U0001D4B4', - "Yuml;": '\U00000178', - "ZHcy;": '\U00000416', - "Zacute;": '\U00000179', - "Zcaron;": '\U0000017D', - "Zcy;": '\U00000417', - "Zdot;": '\U0000017B', - "ZeroWidthSpace;": '\U0000200B', - "Zeta;": '\U00000396', - "Zfr;": '\U00002128', - "Zopf;": '\U00002124', - "Zscr;": '\U0001D4B5', - "aacute;": '\U000000E1', - "abreve;": '\U00000103', - "ac;": '\U0000223E', - "acd;": '\U0000223F', - "acirc;": '\U000000E2', - "acute;": '\U000000B4', - "acy;": '\U00000430', - "aelig;": '\U000000E6', - "af;": '\U00002061', - "afr;": '\U0001D51E', - "agrave;": '\U000000E0', - "alefsym;": '\U00002135', - "aleph;": '\U00002135', - "alpha;": '\U000003B1', - "amacr;": '\U00000101', - "amalg;": '\U00002A3F', - "amp;": '\U00000026', - "and;": '\U00002227', - "andand;": '\U00002A55', - "andd;": '\U00002A5C', - "andslope;": '\U00002A58', - "andv;": '\U00002A5A', - "ang;": '\U00002220', - "ange;": '\U000029A4', - "angle;": '\U00002220', - "angmsd;": '\U00002221', - "angmsdaa;": '\U000029A8', - "angmsdab;": '\U000029A9', - "angmsdac;": '\U000029AA', - "angmsdad;": '\U000029AB', - "angmsdae;": '\U000029AC', - "angmsdaf;": '\U000029AD', - "angmsdag;": '\U000029AE', - "angmsdah;": '\U000029AF', - "angrt;": '\U0000221F', - "angrtvb;": '\U000022BE', - "angrtvbd;": '\U0000299D', - "angsph;": '\U00002222', - "angst;": '\U000000C5', - "angzarr;": '\U0000237C', - "aogon;": '\U00000105', - "aopf;": '\U0001D552', - "ap;": '\U00002248', - "apE;": '\U00002A70', - "apacir;": '\U00002A6F', - "ape;": '\U0000224A', - "apid;": '\U0000224B', - "apos;": '\U00000027', - "approx;": '\U00002248', - "approxeq;": '\U0000224A', - "aring;": '\U000000E5', - "ascr;": '\U0001D4B6', - "ast;": '\U0000002A', - "asymp;": '\U00002248', - "asympeq;": '\U0000224D', - "atilde;": '\U000000E3', - "auml;": '\U000000E4', - "awconint;": '\U00002233', - "awint;": '\U00002A11', - "bNot;": '\U00002AED', - "backcong;": '\U0000224C', - "backepsilon;": '\U000003F6', - "backprime;": '\U00002035', - "backsim;": '\U0000223D', - "backsimeq;": '\U000022CD', - "barvee;": '\U000022BD', - "barwed;": '\U00002305', - "barwedge;": '\U00002305', - "bbrk;": '\U000023B5', - "bbrktbrk;": '\U000023B6', - "bcong;": '\U0000224C', - "bcy;": '\U00000431', - "bdquo;": '\U0000201E', - "becaus;": '\U00002235', - "because;": '\U00002235', - "bemptyv;": '\U000029B0', - "bepsi;": '\U000003F6', - "bernou;": '\U0000212C', - "beta;": '\U000003B2', - "beth;": '\U00002136', - "between;": '\U0000226C', - "bfr;": '\U0001D51F', - "bigcap;": '\U000022C2', - "bigcirc;": '\U000025EF', - "bigcup;": '\U000022C3', - "bigodot;": '\U00002A00', - "bigoplus;": '\U00002A01', - "bigotimes;": '\U00002A02', - "bigsqcup;": '\U00002A06', - "bigstar;": '\U00002605', - "bigtriangledown;": '\U000025BD', - "bigtriangleup;": '\U000025B3', - "biguplus;": '\U00002A04', - "bigvee;": '\U000022C1', - "bigwedge;": '\U000022C0', - "bkarow;": '\U0000290D', - "blacklozenge;": '\U000029EB', - "blacksquare;": '\U000025AA', - "blacktriangle;": '\U000025B4', - "blacktriangledown;": '\U000025BE', - "blacktriangleleft;": '\U000025C2', - "blacktriangleright;": '\U000025B8', - "blank;": '\U00002423', - "blk12;": '\U00002592', - "blk14;": '\U00002591', - "blk34;": '\U00002593', - "block;": '\U00002588', - "bnot;": '\U00002310', - "bopf;": '\U0001D553', - "bot;": '\U000022A5', - "bottom;": '\U000022A5', - "bowtie;": '\U000022C8', - "boxDL;": '\U00002557', - "boxDR;": '\U00002554', - "boxDl;": '\U00002556', - "boxDr;": '\U00002553', - "boxH;": '\U00002550', - "boxHD;": '\U00002566', - "boxHU;": '\U00002569', - "boxHd;": '\U00002564', - "boxHu;": '\U00002567', - "boxUL;": '\U0000255D', - "boxUR;": '\U0000255A', - "boxUl;": '\U0000255C', - "boxUr;": '\U00002559', - "boxV;": '\U00002551', - "boxVH;": '\U0000256C', - "boxVL;": '\U00002563', - "boxVR;": '\U00002560', - "boxVh;": '\U0000256B', - "boxVl;": '\U00002562', - "boxVr;": '\U0000255F', - "boxbox;": '\U000029C9', - "boxdL;": '\U00002555', - "boxdR;": '\U00002552', - "boxdl;": '\U00002510', - "boxdr;": '\U0000250C', - "boxh;": '\U00002500', - "boxhD;": '\U00002565', - "boxhU;": '\U00002568', - "boxhd;": '\U0000252C', - "boxhu;": '\U00002534', - "boxminus;": '\U0000229F', - "boxplus;": '\U0000229E', - "boxtimes;": '\U000022A0', - "boxuL;": '\U0000255B', - "boxuR;": '\U00002558', - "boxul;": '\U00002518', - "boxur;": '\U00002514', - "boxv;": '\U00002502', - "boxvH;": '\U0000256A', - "boxvL;": '\U00002561', - "boxvR;": '\U0000255E', - "boxvh;": '\U0000253C', - "boxvl;": '\U00002524', - "boxvr;": '\U0000251C', - "bprime;": '\U00002035', - "breve;": '\U000002D8', - "brvbar;": '\U000000A6', - "bscr;": '\U0001D4B7', - "bsemi;": '\U0000204F', - "bsim;": '\U0000223D', - "bsime;": '\U000022CD', - "bsol;": '\U0000005C', - "bsolb;": '\U000029C5', - "bsolhsub;": '\U000027C8', - "bull;": '\U00002022', - "bullet;": '\U00002022', - "bump;": '\U0000224E', - "bumpE;": '\U00002AAE', - "bumpe;": '\U0000224F', - "bumpeq;": '\U0000224F', - "cacute;": '\U00000107', - "cap;": '\U00002229', - "capand;": '\U00002A44', - "capbrcup;": '\U00002A49', - "capcap;": '\U00002A4B', - "capcup;": '\U00002A47', - "capdot;": '\U00002A40', - "caret;": '\U00002041', - "caron;": '\U000002C7', - "ccaps;": '\U00002A4D', - "ccaron;": '\U0000010D', - "ccedil;": '\U000000E7', - "ccirc;": '\U00000109', - "ccups;": '\U00002A4C', - "ccupssm;": '\U00002A50', - "cdot;": '\U0000010B', - "cedil;": '\U000000B8', - "cemptyv;": '\U000029B2', - "cent;": '\U000000A2', - "centerdot;": '\U000000B7', - "cfr;": '\U0001D520', - "chcy;": '\U00000447', - "check;": '\U00002713', - "checkmark;": '\U00002713', - "chi;": '\U000003C7', - "cir;": '\U000025CB', - "cirE;": '\U000029C3', - "circ;": '\U000002C6', - "circeq;": '\U00002257', - "circlearrowleft;": '\U000021BA', - "circlearrowright;": '\U000021BB', - "circledR;": '\U000000AE', - "circledS;": '\U000024C8', - "circledast;": '\U0000229B', - "circledcirc;": '\U0000229A', - "circleddash;": '\U0000229D', - "cire;": '\U00002257', - "cirfnint;": '\U00002A10', - "cirmid;": '\U00002AEF', - "cirscir;": '\U000029C2', - "clubs;": '\U00002663', - "clubsuit;": '\U00002663', - "colon;": '\U0000003A', - "colone;": '\U00002254', - "coloneq;": '\U00002254', - "comma;": '\U0000002C', - "commat;": '\U00000040', - "comp;": '\U00002201', - "compfn;": '\U00002218', - "complement;": '\U00002201', - "complexes;": '\U00002102', - "cong;": '\U00002245', - "congdot;": '\U00002A6D', - "conint;": '\U0000222E', - "copf;": '\U0001D554', - "coprod;": '\U00002210', - "copy;": '\U000000A9', - "copysr;": '\U00002117', - "crarr;": '\U000021B5', - "cross;": '\U00002717', - "cscr;": '\U0001D4B8', - "csub;": '\U00002ACF', - "csube;": '\U00002AD1', - "csup;": '\U00002AD0', - "csupe;": '\U00002AD2', - "ctdot;": '\U000022EF', - "cudarrl;": '\U00002938', - "cudarrr;": '\U00002935', - "cuepr;": '\U000022DE', - "cuesc;": '\U000022DF', - "cularr;": '\U000021B6', - "cularrp;": '\U0000293D', - "cup;": '\U0000222A', - "cupbrcap;": '\U00002A48', - "cupcap;": '\U00002A46', - "cupcup;": '\U00002A4A', - "cupdot;": '\U0000228D', - "cupor;": '\U00002A45', - "curarr;": '\U000021B7', - "curarrm;": '\U0000293C', - "curlyeqprec;": '\U000022DE', - "curlyeqsucc;": '\U000022DF', - "curlyvee;": '\U000022CE', - "curlywedge;": '\U000022CF', - "curren;": '\U000000A4', - "curvearrowleft;": '\U000021B6', - "curvearrowright;": '\U000021B7', - "cuvee;": '\U000022CE', - "cuwed;": '\U000022CF', - "cwconint;": '\U00002232', - "cwint;": '\U00002231', - "cylcty;": '\U0000232D', - "dArr;": '\U000021D3', - "dHar;": '\U00002965', - "dagger;": '\U00002020', - "daleth;": '\U00002138', - "darr;": '\U00002193', - "dash;": '\U00002010', - "dashv;": '\U000022A3', - "dbkarow;": '\U0000290F', - "dblac;": '\U000002DD', - "dcaron;": '\U0000010F', - "dcy;": '\U00000434', - "dd;": '\U00002146', - "ddagger;": '\U00002021', - "ddarr;": '\U000021CA', - "ddotseq;": '\U00002A77', - "deg;": '\U000000B0', - "delta;": '\U000003B4', - "demptyv;": '\U000029B1', - "dfisht;": '\U0000297F', - "dfr;": '\U0001D521', - "dharl;": '\U000021C3', - "dharr;": '\U000021C2', - "diam;": '\U000022C4', - "diamond;": '\U000022C4', - "diamondsuit;": '\U00002666', - "diams;": '\U00002666', - "die;": '\U000000A8', - "digamma;": '\U000003DD', - "disin;": '\U000022F2', - "div;": '\U000000F7', - "divide;": '\U000000F7', - "divideontimes;": '\U000022C7', - "divonx;": '\U000022C7', - "djcy;": '\U00000452', - "dlcorn;": '\U0000231E', - "dlcrop;": '\U0000230D', - "dollar;": '\U00000024', - "dopf;": '\U0001D555', - "dot;": '\U000002D9', - "doteq;": '\U00002250', - "doteqdot;": '\U00002251', - "dotminus;": '\U00002238', - "dotplus;": '\U00002214', - "dotsquare;": '\U000022A1', - "doublebarwedge;": '\U00002306', - "downarrow;": '\U00002193', - "downdownarrows;": '\U000021CA', - "downharpoonleft;": '\U000021C3', - "downharpoonright;": '\U000021C2', - "drbkarow;": '\U00002910', - "drcorn;": '\U0000231F', - "drcrop;": '\U0000230C', - "dscr;": '\U0001D4B9', - "dscy;": '\U00000455', - "dsol;": '\U000029F6', - "dstrok;": '\U00000111', - "dtdot;": '\U000022F1', - "dtri;": '\U000025BF', - "dtrif;": '\U000025BE', - "duarr;": '\U000021F5', - "duhar;": '\U0000296F', - "dwangle;": '\U000029A6', - "dzcy;": '\U0000045F', - "dzigrarr;": '\U000027FF', - "eDDot;": '\U00002A77', - "eDot;": '\U00002251', - "eacute;": '\U000000E9', - "easter;": '\U00002A6E', - "ecaron;": '\U0000011B', - "ecir;": '\U00002256', - "ecirc;": '\U000000EA', - "ecolon;": '\U00002255', - "ecy;": '\U0000044D', - "edot;": '\U00000117', - "ee;": '\U00002147', - "efDot;": '\U00002252', - "efr;": '\U0001D522', - "eg;": '\U00002A9A', - "egrave;": '\U000000E8', - "egs;": '\U00002A96', - "egsdot;": '\U00002A98', - "el;": '\U00002A99', - "elinters;": '\U000023E7', - "ell;": '\U00002113', - "els;": '\U00002A95', - "elsdot;": '\U00002A97', - "emacr;": '\U00000113', - "empty;": '\U00002205', - "emptyset;": '\U00002205', - "emptyv;": '\U00002205', - "emsp;": '\U00002003', - "emsp13;": '\U00002004', - "emsp14;": '\U00002005', - "eng;": '\U0000014B', - "ensp;": '\U00002002', - "eogon;": '\U00000119', - "eopf;": '\U0001D556', - "epar;": '\U000022D5', - "eparsl;": '\U000029E3', - "eplus;": '\U00002A71', - "epsi;": '\U000003B5', - "epsilon;": '\U000003B5', - "epsiv;": '\U000003F5', - "eqcirc;": '\U00002256', - "eqcolon;": '\U00002255', - "eqsim;": '\U00002242', - "eqslantgtr;": '\U00002A96', - "eqslantless;": '\U00002A95', - "equals;": '\U0000003D', - "equest;": '\U0000225F', - "equiv;": '\U00002261', - "equivDD;": '\U00002A78', - "eqvparsl;": '\U000029E5', - "erDot;": '\U00002253', - "erarr;": '\U00002971', - "escr;": '\U0000212F', - "esdot;": '\U00002250', - "esim;": '\U00002242', - "eta;": '\U000003B7', - "eth;": '\U000000F0', - "euml;": '\U000000EB', - "euro;": '\U000020AC', - "excl;": '\U00000021', - "exist;": '\U00002203', - "expectation;": '\U00002130', - "exponentiale;": '\U00002147', - "fallingdotseq;": '\U00002252', - "fcy;": '\U00000444', - "female;": '\U00002640', - "ffilig;": '\U0000FB03', - "fflig;": '\U0000FB00', - "ffllig;": '\U0000FB04', - "ffr;": '\U0001D523', - "filig;": '\U0000FB01', - "flat;": '\U0000266D', - "fllig;": '\U0000FB02', - "fltns;": '\U000025B1', - "fnof;": '\U00000192', - "fopf;": '\U0001D557', - "forall;": '\U00002200', - "fork;": '\U000022D4', - "forkv;": '\U00002AD9', - "fpartint;": '\U00002A0D', - "frac12;": '\U000000BD', - "frac13;": '\U00002153', - "frac14;": '\U000000BC', - "frac15;": '\U00002155', - "frac16;": '\U00002159', - "frac18;": '\U0000215B', - "frac23;": '\U00002154', - "frac25;": '\U00002156', - "frac34;": '\U000000BE', - "frac35;": '\U00002157', - "frac38;": '\U0000215C', - "frac45;": '\U00002158', - "frac56;": '\U0000215A', - "frac58;": '\U0000215D', - "frac78;": '\U0000215E', - "frasl;": '\U00002044', - "frown;": '\U00002322', - "fscr;": '\U0001D4BB', - "gE;": '\U00002267', - "gEl;": '\U00002A8C', - "gacute;": '\U000001F5', - "gamma;": '\U000003B3', - "gammad;": '\U000003DD', - "gap;": '\U00002A86', - "gbreve;": '\U0000011F', - "gcirc;": '\U0000011D', - "gcy;": '\U00000433', - "gdot;": '\U00000121', - "ge;": '\U00002265', - "gel;": '\U000022DB', - "geq;": '\U00002265', - "geqq;": '\U00002267', - "geqslant;": '\U00002A7E', - "ges;": '\U00002A7E', - "gescc;": '\U00002AA9', - "gesdot;": '\U00002A80', - "gesdoto;": '\U00002A82', - "gesdotol;": '\U00002A84', - "gesles;": '\U00002A94', - "gfr;": '\U0001D524', - "gg;": '\U0000226B', - "ggg;": '\U000022D9', - "gimel;": '\U00002137', - "gjcy;": '\U00000453', - "gl;": '\U00002277', - "glE;": '\U00002A92', - "gla;": '\U00002AA5', - "glj;": '\U00002AA4', - "gnE;": '\U00002269', - "gnap;": '\U00002A8A', - "gnapprox;": '\U00002A8A', - "gne;": '\U00002A88', - "gneq;": '\U00002A88', - "gneqq;": '\U00002269', - "gnsim;": '\U000022E7', - "gopf;": '\U0001D558', - "grave;": '\U00000060', - "gscr;": '\U0000210A', - "gsim;": '\U00002273', - "gsime;": '\U00002A8E', - "gsiml;": '\U00002A90', - "gt;": '\U0000003E', - "gtcc;": '\U00002AA7', - "gtcir;": '\U00002A7A', - "gtdot;": '\U000022D7', - "gtlPar;": '\U00002995', - "gtquest;": '\U00002A7C', - "gtrapprox;": '\U00002A86', - "gtrarr;": '\U00002978', - "gtrdot;": '\U000022D7', - "gtreqless;": '\U000022DB', - "gtreqqless;": '\U00002A8C', - "gtrless;": '\U00002277', - "gtrsim;": '\U00002273', - "hArr;": '\U000021D4', - "hairsp;": '\U0000200A', - "half;": '\U000000BD', - "hamilt;": '\U0000210B', - "hardcy;": '\U0000044A', - "harr;": '\U00002194', - "harrcir;": '\U00002948', - "harrw;": '\U000021AD', - "hbar;": '\U0000210F', - "hcirc;": '\U00000125', - "hearts;": '\U00002665', - "heartsuit;": '\U00002665', - "hellip;": '\U00002026', - "hercon;": '\U000022B9', - "hfr;": '\U0001D525', - "hksearow;": '\U00002925', - "hkswarow;": '\U00002926', - "hoarr;": '\U000021FF', - "homtht;": '\U0000223B', - "hookleftarrow;": '\U000021A9', - "hookrightarrow;": '\U000021AA', - "hopf;": '\U0001D559', - "horbar;": '\U00002015', - "hscr;": '\U0001D4BD', - "hslash;": '\U0000210F', - "hstrok;": '\U00000127', - "hybull;": '\U00002043', - "hyphen;": '\U00002010', - "iacute;": '\U000000ED', - "ic;": '\U00002063', - "icirc;": '\U000000EE', - "icy;": '\U00000438', - "iecy;": '\U00000435', - "iexcl;": '\U000000A1', - "iff;": '\U000021D4', - "ifr;": '\U0001D526', - "igrave;": '\U000000EC', - "ii;": '\U00002148', - "iiiint;": '\U00002A0C', - "iiint;": '\U0000222D', - "iinfin;": '\U000029DC', - "iiota;": '\U00002129', - "ijlig;": '\U00000133', - "imacr;": '\U0000012B', - "image;": '\U00002111', - "imagline;": '\U00002110', - "imagpart;": '\U00002111', - "imath;": '\U00000131', - "imof;": '\U000022B7', - "imped;": '\U000001B5', - "in;": '\U00002208', - "incare;": '\U00002105', - "infin;": '\U0000221E', - "infintie;": '\U000029DD', - "inodot;": '\U00000131', - "int;": '\U0000222B', - "intcal;": '\U000022BA', - "integers;": '\U00002124', - "intercal;": '\U000022BA', - "intlarhk;": '\U00002A17', - "intprod;": '\U00002A3C', - "iocy;": '\U00000451', - "iogon;": '\U0000012F', - "iopf;": '\U0001D55A', - "iota;": '\U000003B9', - "iprod;": '\U00002A3C', - "iquest;": '\U000000BF', - "iscr;": '\U0001D4BE', - "isin;": '\U00002208', - "isinE;": '\U000022F9', - "isindot;": '\U000022F5', - "isins;": '\U000022F4', - "isinsv;": '\U000022F3', - "isinv;": '\U00002208', - "it;": '\U00002062', - "itilde;": '\U00000129', - "iukcy;": '\U00000456', - "iuml;": '\U000000EF', - "jcirc;": '\U00000135', - "jcy;": '\U00000439', - "jfr;": '\U0001D527', - "jmath;": '\U00000237', - "jopf;": '\U0001D55B', - "jscr;": '\U0001D4BF', - "jsercy;": '\U00000458', - "jukcy;": '\U00000454', - "kappa;": '\U000003BA', - "kappav;": '\U000003F0', - "kcedil;": '\U00000137', - "kcy;": '\U0000043A', - "kfr;": '\U0001D528', - "kgreen;": '\U00000138', - "khcy;": '\U00000445', - "kjcy;": '\U0000045C', - "kopf;": '\U0001D55C', - "kscr;": '\U0001D4C0', - "lAarr;": '\U000021DA', - "lArr;": '\U000021D0', - "lAtail;": '\U0000291B', - "lBarr;": '\U0000290E', - "lE;": '\U00002266', - "lEg;": '\U00002A8B', - "lHar;": '\U00002962', - "lacute;": '\U0000013A', - "laemptyv;": '\U000029B4', - "lagran;": '\U00002112', - "lambda;": '\U000003BB', - "lang;": '\U000027E8', - "langd;": '\U00002991', - "langle;": '\U000027E8', - "lap;": '\U00002A85', - "laquo;": '\U000000AB', - "larr;": '\U00002190', - "larrb;": '\U000021E4', - "larrbfs;": '\U0000291F', - "larrfs;": '\U0000291D', - "larrhk;": '\U000021A9', - "larrlp;": '\U000021AB', - "larrpl;": '\U00002939', - "larrsim;": '\U00002973', - "larrtl;": '\U000021A2', - "lat;": '\U00002AAB', - "latail;": '\U00002919', - "late;": '\U00002AAD', - "lbarr;": '\U0000290C', - "lbbrk;": '\U00002772', - "lbrace;": '\U0000007B', - "lbrack;": '\U0000005B', - "lbrke;": '\U0000298B', - "lbrksld;": '\U0000298F', - "lbrkslu;": '\U0000298D', - "lcaron;": '\U0000013E', - "lcedil;": '\U0000013C', - "lceil;": '\U00002308', - "lcub;": '\U0000007B', - "lcy;": '\U0000043B', - "ldca;": '\U00002936', - "ldquo;": '\U0000201C', - "ldquor;": '\U0000201E', - "ldrdhar;": '\U00002967', - "ldrushar;": '\U0000294B', - "ldsh;": '\U000021B2', - "le;": '\U00002264', - "leftarrow;": '\U00002190', - "leftarrowtail;": '\U000021A2', - "leftharpoondown;": '\U000021BD', - "leftharpoonup;": '\U000021BC', - "leftleftarrows;": '\U000021C7', - "leftrightarrow;": '\U00002194', - "leftrightarrows;": '\U000021C6', - "leftrightharpoons;": '\U000021CB', - "leftrightsquigarrow;": '\U000021AD', - "leftthreetimes;": '\U000022CB', - "leg;": '\U000022DA', - "leq;": '\U00002264', - "leqq;": '\U00002266', - "leqslant;": '\U00002A7D', - "les;": '\U00002A7D', - "lescc;": '\U00002AA8', - "lesdot;": '\U00002A7F', - "lesdoto;": '\U00002A81', - "lesdotor;": '\U00002A83', - "lesges;": '\U00002A93', - "lessapprox;": '\U00002A85', - "lessdot;": '\U000022D6', - "lesseqgtr;": '\U000022DA', - "lesseqqgtr;": '\U00002A8B', - "lessgtr;": '\U00002276', - "lesssim;": '\U00002272', - "lfisht;": '\U0000297C', - "lfloor;": '\U0000230A', - "lfr;": '\U0001D529', - "lg;": '\U00002276', - "lgE;": '\U00002A91', - "lhard;": '\U000021BD', - "lharu;": '\U000021BC', - "lharul;": '\U0000296A', - "lhblk;": '\U00002584', - "ljcy;": '\U00000459', - "ll;": '\U0000226A', - "llarr;": '\U000021C7', - "llcorner;": '\U0000231E', - "llhard;": '\U0000296B', - "lltri;": '\U000025FA', - "lmidot;": '\U00000140', - "lmoust;": '\U000023B0', - "lmoustache;": '\U000023B0', - "lnE;": '\U00002268', - "lnap;": '\U00002A89', - "lnapprox;": '\U00002A89', - "lne;": '\U00002A87', - "lneq;": '\U00002A87', - "lneqq;": '\U00002268', - "lnsim;": '\U000022E6', - "loang;": '\U000027EC', - "loarr;": '\U000021FD', - "lobrk;": '\U000027E6', - "longleftarrow;": '\U000027F5', - "longleftrightarrow;": '\U000027F7', - "longmapsto;": '\U000027FC', - "longrightarrow;": '\U000027F6', - "looparrowleft;": '\U000021AB', - "looparrowright;": '\U000021AC', - "lopar;": '\U00002985', - "lopf;": '\U0001D55D', - "loplus;": '\U00002A2D', - "lotimes;": '\U00002A34', - "lowast;": '\U00002217', - "lowbar;": '\U0000005F', - "loz;": '\U000025CA', - "lozenge;": '\U000025CA', - "lozf;": '\U000029EB', - "lpar;": '\U00000028', - "lparlt;": '\U00002993', - "lrarr;": '\U000021C6', - "lrcorner;": '\U0000231F', - "lrhar;": '\U000021CB', - "lrhard;": '\U0000296D', - "lrm;": '\U0000200E', - "lrtri;": '\U000022BF', - "lsaquo;": '\U00002039', - "lscr;": '\U0001D4C1', - "lsh;": '\U000021B0', - "lsim;": '\U00002272', - "lsime;": '\U00002A8D', - "lsimg;": '\U00002A8F', - "lsqb;": '\U0000005B', - "lsquo;": '\U00002018', - "lsquor;": '\U0000201A', - "lstrok;": '\U00000142', - "lt;": '\U0000003C', - "ltcc;": '\U00002AA6', - "ltcir;": '\U00002A79', - "ltdot;": '\U000022D6', - "lthree;": '\U000022CB', - "ltimes;": '\U000022C9', - "ltlarr;": '\U00002976', - "ltquest;": '\U00002A7B', - "ltrPar;": '\U00002996', - "ltri;": '\U000025C3', - "ltrie;": '\U000022B4', - "ltrif;": '\U000025C2', - "lurdshar;": '\U0000294A', - "luruhar;": '\U00002966', - "mDDot;": '\U0000223A', - "macr;": '\U000000AF', - "male;": '\U00002642', - "malt;": '\U00002720', - "maltese;": '\U00002720', - "map;": '\U000021A6', - "mapsto;": '\U000021A6', - "mapstodown;": '\U000021A7', - "mapstoleft;": '\U000021A4', - "mapstoup;": '\U000021A5', - "marker;": '\U000025AE', - "mcomma;": '\U00002A29', - "mcy;": '\U0000043C', - "mdash;": '\U00002014', - "measuredangle;": '\U00002221', - "mfr;": '\U0001D52A', - "mho;": '\U00002127', - "micro;": '\U000000B5', - "mid;": '\U00002223', - "midast;": '\U0000002A', - "midcir;": '\U00002AF0', - "middot;": '\U000000B7', - "minus;": '\U00002212', - "minusb;": '\U0000229F', - "minusd;": '\U00002238', - "minusdu;": '\U00002A2A', - "mlcp;": '\U00002ADB', - "mldr;": '\U00002026', - "mnplus;": '\U00002213', - "models;": '\U000022A7', - "mopf;": '\U0001D55E', - "mp;": '\U00002213', - "mscr;": '\U0001D4C2', - "mstpos;": '\U0000223E', - "mu;": '\U000003BC', - "multimap;": '\U000022B8', - "mumap;": '\U000022B8', - "nLeftarrow;": '\U000021CD', - "nLeftrightarrow;": '\U000021CE', - "nRightarrow;": '\U000021CF', - "nVDash;": '\U000022AF', - "nVdash;": '\U000022AE', - "nabla;": '\U00002207', - "nacute;": '\U00000144', - "nap;": '\U00002249', - "napos;": '\U00000149', - "napprox;": '\U00002249', - "natur;": '\U0000266E', - "natural;": '\U0000266E', - "naturals;": '\U00002115', - "nbsp;": '\U000000A0', - "ncap;": '\U00002A43', - "ncaron;": '\U00000148', - "ncedil;": '\U00000146', - "ncong;": '\U00002247', - "ncup;": '\U00002A42', - "ncy;": '\U0000043D', - "ndash;": '\U00002013', - "ne;": '\U00002260', - "neArr;": '\U000021D7', - "nearhk;": '\U00002924', - "nearr;": '\U00002197', - "nearrow;": '\U00002197', - "nequiv;": '\U00002262', - "nesear;": '\U00002928', - "nexist;": '\U00002204', - "nexists;": '\U00002204', - "nfr;": '\U0001D52B', - "nge;": '\U00002271', - "ngeq;": '\U00002271', - "ngsim;": '\U00002275', - "ngt;": '\U0000226F', - "ngtr;": '\U0000226F', - "nhArr;": '\U000021CE', - "nharr;": '\U000021AE', - "nhpar;": '\U00002AF2', - "ni;": '\U0000220B', - "nis;": '\U000022FC', - "nisd;": '\U000022FA', - "niv;": '\U0000220B', - "njcy;": '\U0000045A', - "nlArr;": '\U000021CD', - "nlarr;": '\U0000219A', - "nldr;": '\U00002025', - "nle;": '\U00002270', - "nleftarrow;": '\U0000219A', - "nleftrightarrow;": '\U000021AE', - "nleq;": '\U00002270', - "nless;": '\U0000226E', - "nlsim;": '\U00002274', - "nlt;": '\U0000226E', - "nltri;": '\U000022EA', - "nltrie;": '\U000022EC', - "nmid;": '\U00002224', - "nopf;": '\U0001D55F', - "not;": '\U000000AC', - "notin;": '\U00002209', - "notinva;": '\U00002209', - "notinvb;": '\U000022F7', - "notinvc;": '\U000022F6', - "notni;": '\U0000220C', - "notniva;": '\U0000220C', - "notnivb;": '\U000022FE', - "notnivc;": '\U000022FD', - "npar;": '\U00002226', - "nparallel;": '\U00002226', - "npolint;": '\U00002A14', - "npr;": '\U00002280', - "nprcue;": '\U000022E0', - "nprec;": '\U00002280', - "nrArr;": '\U000021CF', - "nrarr;": '\U0000219B', - "nrightarrow;": '\U0000219B', - "nrtri;": '\U000022EB', - "nrtrie;": '\U000022ED', - "nsc;": '\U00002281', - "nsccue;": '\U000022E1', - "nscr;": '\U0001D4C3', - "nshortmid;": '\U00002224', - "nshortparallel;": '\U00002226', - "nsim;": '\U00002241', - "nsime;": '\U00002244', - "nsimeq;": '\U00002244', - "nsmid;": '\U00002224', - "nspar;": '\U00002226', - "nsqsube;": '\U000022E2', - "nsqsupe;": '\U000022E3', - "nsub;": '\U00002284', - "nsube;": '\U00002288', - "nsubseteq;": '\U00002288', - "nsucc;": '\U00002281', - "nsup;": '\U00002285', - "nsupe;": '\U00002289', - "nsupseteq;": '\U00002289', - "ntgl;": '\U00002279', - "ntilde;": '\U000000F1', - "ntlg;": '\U00002278', - "ntriangleleft;": '\U000022EA', - "ntrianglelefteq;": '\U000022EC', - "ntriangleright;": '\U000022EB', - "ntrianglerighteq;": '\U000022ED', - "nu;": '\U000003BD', - "num;": '\U00000023', - "numero;": '\U00002116', - "numsp;": '\U00002007', - "nvDash;": '\U000022AD', - "nvHarr;": '\U00002904', - "nvdash;": '\U000022AC', - "nvinfin;": '\U000029DE', - "nvlArr;": '\U00002902', - "nvrArr;": '\U00002903', - "nwArr;": '\U000021D6', - "nwarhk;": '\U00002923', - "nwarr;": '\U00002196', - "nwarrow;": '\U00002196', - "nwnear;": '\U00002927', - "oS;": '\U000024C8', - "oacute;": '\U000000F3', - "oast;": '\U0000229B', - "ocir;": '\U0000229A', - "ocirc;": '\U000000F4', - "ocy;": '\U0000043E', - "odash;": '\U0000229D', - "odblac;": '\U00000151', - "odiv;": '\U00002A38', - "odot;": '\U00002299', - "odsold;": '\U000029BC', - "oelig;": '\U00000153', - "ofcir;": '\U000029BF', - "ofr;": '\U0001D52C', - "ogon;": '\U000002DB', - "ograve;": '\U000000F2', - "ogt;": '\U000029C1', - "ohbar;": '\U000029B5', - "ohm;": '\U000003A9', - "oint;": '\U0000222E', - "olarr;": '\U000021BA', - "olcir;": '\U000029BE', - "olcross;": '\U000029BB', - "oline;": '\U0000203E', - "olt;": '\U000029C0', - "omacr;": '\U0000014D', - "omega;": '\U000003C9', - "omicron;": '\U000003BF', - "omid;": '\U000029B6', - "ominus;": '\U00002296', - "oopf;": '\U0001D560', - "opar;": '\U000029B7', - "operp;": '\U000029B9', - "oplus;": '\U00002295', - "or;": '\U00002228', - "orarr;": '\U000021BB', - "ord;": '\U00002A5D', - "order;": '\U00002134', - "orderof;": '\U00002134', - "ordf;": '\U000000AA', - "ordm;": '\U000000BA', - "origof;": '\U000022B6', - "oror;": '\U00002A56', - "orslope;": '\U00002A57', - "orv;": '\U00002A5B', - "oscr;": '\U00002134', - "oslash;": '\U000000F8', - "osol;": '\U00002298', - "otilde;": '\U000000F5', - "otimes;": '\U00002297', - "otimesas;": '\U00002A36', - "ouml;": '\U000000F6', - "ovbar;": '\U0000233D', - "par;": '\U00002225', - "para;": '\U000000B6', - "parallel;": '\U00002225', - "parsim;": '\U00002AF3', - "parsl;": '\U00002AFD', - "part;": '\U00002202', - "pcy;": '\U0000043F', - "percnt;": '\U00000025', - "period;": '\U0000002E', - "permil;": '\U00002030', - "perp;": '\U000022A5', - "pertenk;": '\U00002031', - "pfr;": '\U0001D52D', - "phi;": '\U000003C6', - "phiv;": '\U000003D5', - "phmmat;": '\U00002133', - "phone;": '\U0000260E', - "pi;": '\U000003C0', - "pitchfork;": '\U000022D4', - "piv;": '\U000003D6', - "planck;": '\U0000210F', - "planckh;": '\U0000210E', - "plankv;": '\U0000210F', - "plus;": '\U0000002B', - "plusacir;": '\U00002A23', - "plusb;": '\U0000229E', - "pluscir;": '\U00002A22', - "plusdo;": '\U00002214', - "plusdu;": '\U00002A25', - "pluse;": '\U00002A72', - "plusmn;": '\U000000B1', - "plussim;": '\U00002A26', - "plustwo;": '\U00002A27', - "pm;": '\U000000B1', - "pointint;": '\U00002A15', - "popf;": '\U0001D561', - "pound;": '\U000000A3', - "pr;": '\U0000227A', - "prE;": '\U00002AB3', - "prap;": '\U00002AB7', - "prcue;": '\U0000227C', - "pre;": '\U00002AAF', - "prec;": '\U0000227A', - "precapprox;": '\U00002AB7', - "preccurlyeq;": '\U0000227C', - "preceq;": '\U00002AAF', - "precnapprox;": '\U00002AB9', - "precneqq;": '\U00002AB5', - "precnsim;": '\U000022E8', - "precsim;": '\U0000227E', - "prime;": '\U00002032', - "primes;": '\U00002119', - "prnE;": '\U00002AB5', - "prnap;": '\U00002AB9', - "prnsim;": '\U000022E8', - "prod;": '\U0000220F', - "profalar;": '\U0000232E', - "profline;": '\U00002312', - "profsurf;": '\U00002313', - "prop;": '\U0000221D', - "propto;": '\U0000221D', - "prsim;": '\U0000227E', - "prurel;": '\U000022B0', - "pscr;": '\U0001D4C5', - "psi;": '\U000003C8', - "puncsp;": '\U00002008', - "qfr;": '\U0001D52E', - "qint;": '\U00002A0C', - "qopf;": '\U0001D562', - "qprime;": '\U00002057', - "qscr;": '\U0001D4C6', - "quaternions;": '\U0000210D', - "quatint;": '\U00002A16', - "quest;": '\U0000003F', - "questeq;": '\U0000225F', - "quot;": '\U00000022', - "rAarr;": '\U000021DB', - "rArr;": '\U000021D2', - "rAtail;": '\U0000291C', - "rBarr;": '\U0000290F', - "rHar;": '\U00002964', - "racute;": '\U00000155', - "radic;": '\U0000221A', - "raemptyv;": '\U000029B3', - "rang;": '\U000027E9', - "rangd;": '\U00002992', - "range;": '\U000029A5', - "rangle;": '\U000027E9', - "raquo;": '\U000000BB', - "rarr;": '\U00002192', - "rarrap;": '\U00002975', - "rarrb;": '\U000021E5', - "rarrbfs;": '\U00002920', - "rarrc;": '\U00002933', - "rarrfs;": '\U0000291E', - "rarrhk;": '\U000021AA', - "rarrlp;": '\U000021AC', - "rarrpl;": '\U00002945', - "rarrsim;": '\U00002974', - "rarrtl;": '\U000021A3', - "rarrw;": '\U0000219D', - "ratail;": '\U0000291A', - "ratio;": '\U00002236', - "rationals;": '\U0000211A', - "rbarr;": '\U0000290D', - "rbbrk;": '\U00002773', - "rbrace;": '\U0000007D', - "rbrack;": '\U0000005D', - "rbrke;": '\U0000298C', - "rbrksld;": '\U0000298E', - "rbrkslu;": '\U00002990', - "rcaron;": '\U00000159', - "rcedil;": '\U00000157', - "rceil;": '\U00002309', - "rcub;": '\U0000007D', - "rcy;": '\U00000440', - "rdca;": '\U00002937', - "rdldhar;": '\U00002969', - "rdquo;": '\U0000201D', - "rdquor;": '\U0000201D', - "rdsh;": '\U000021B3', - "real;": '\U0000211C', - "realine;": '\U0000211B', - "realpart;": '\U0000211C', - "reals;": '\U0000211D', - "rect;": '\U000025AD', - "reg;": '\U000000AE', - "rfisht;": '\U0000297D', - "rfloor;": '\U0000230B', - "rfr;": '\U0001D52F', - "rhard;": '\U000021C1', - "rharu;": '\U000021C0', - "rharul;": '\U0000296C', - "rho;": '\U000003C1', - "rhov;": '\U000003F1', - "rightarrow;": '\U00002192', - "rightarrowtail;": '\U000021A3', - "rightharpoondown;": '\U000021C1', - "rightharpoonup;": '\U000021C0', - "rightleftarrows;": '\U000021C4', - "rightleftharpoons;": '\U000021CC', - "rightrightarrows;": '\U000021C9', - "rightsquigarrow;": '\U0000219D', - "rightthreetimes;": '\U000022CC', - "ring;": '\U000002DA', - "risingdotseq;": '\U00002253', - "rlarr;": '\U000021C4', - "rlhar;": '\U000021CC', - "rlm;": '\U0000200F', - "rmoust;": '\U000023B1', - "rmoustache;": '\U000023B1', - "rnmid;": '\U00002AEE', - "roang;": '\U000027ED', - "roarr;": '\U000021FE', - "robrk;": '\U000027E7', - "ropar;": '\U00002986', - "ropf;": '\U0001D563', - "roplus;": '\U00002A2E', - "rotimes;": '\U00002A35', - "rpar;": '\U00000029', - "rpargt;": '\U00002994', - "rppolint;": '\U00002A12', - "rrarr;": '\U000021C9', - "rsaquo;": '\U0000203A', - "rscr;": '\U0001D4C7', - "rsh;": '\U000021B1', - "rsqb;": '\U0000005D', - "rsquo;": '\U00002019', - "rsquor;": '\U00002019', - "rthree;": '\U000022CC', - "rtimes;": '\U000022CA', - "rtri;": '\U000025B9', - "rtrie;": '\U000022B5', - "rtrif;": '\U000025B8', - "rtriltri;": '\U000029CE', - "ruluhar;": '\U00002968', - "rx;": '\U0000211E', - "sacute;": '\U0000015B', - "sbquo;": '\U0000201A', - "sc;": '\U0000227B', - "scE;": '\U00002AB4', - "scap;": '\U00002AB8', - "scaron;": '\U00000161', - "sccue;": '\U0000227D', - "sce;": '\U00002AB0', - "scedil;": '\U0000015F', - "scirc;": '\U0000015D', - "scnE;": '\U00002AB6', - "scnap;": '\U00002ABA', - "scnsim;": '\U000022E9', - "scpolint;": '\U00002A13', - "scsim;": '\U0000227F', - "scy;": '\U00000441', - "sdot;": '\U000022C5', - "sdotb;": '\U000022A1', - "sdote;": '\U00002A66', - "seArr;": '\U000021D8', - "searhk;": '\U00002925', - "searr;": '\U00002198', - "searrow;": '\U00002198', - "sect;": '\U000000A7', - "semi;": '\U0000003B', - "seswar;": '\U00002929', - "setminus;": '\U00002216', - "setmn;": '\U00002216', - "sext;": '\U00002736', - "sfr;": '\U0001D530', - "sfrown;": '\U00002322', - "sharp;": '\U0000266F', - "shchcy;": '\U00000449', - "shcy;": '\U00000448', - "shortmid;": '\U00002223', - "shortparallel;": '\U00002225', - "shy;": '\U000000AD', - "sigma;": '\U000003C3', - "sigmaf;": '\U000003C2', - "sigmav;": '\U000003C2', - "sim;": '\U0000223C', - "simdot;": '\U00002A6A', - "sime;": '\U00002243', - "simeq;": '\U00002243', - "simg;": '\U00002A9E', - "simgE;": '\U00002AA0', - "siml;": '\U00002A9D', - "simlE;": '\U00002A9F', - "simne;": '\U00002246', - "simplus;": '\U00002A24', - "simrarr;": '\U00002972', - "slarr;": '\U00002190', - "smallsetminus;": '\U00002216', - "smashp;": '\U00002A33', - "smeparsl;": '\U000029E4', - "smid;": '\U00002223', - "smile;": '\U00002323', - "smt;": '\U00002AAA', - "smte;": '\U00002AAC', - "softcy;": '\U0000044C', - "sol;": '\U0000002F', - "solb;": '\U000029C4', - "solbar;": '\U0000233F', - "sopf;": '\U0001D564', - "spades;": '\U00002660', - "spadesuit;": '\U00002660', - "spar;": '\U00002225', - "sqcap;": '\U00002293', - "sqcup;": '\U00002294', - "sqsub;": '\U0000228F', - "sqsube;": '\U00002291', - "sqsubset;": '\U0000228F', - "sqsubseteq;": '\U00002291', - "sqsup;": '\U00002290', - "sqsupe;": '\U00002292', - "sqsupset;": '\U00002290', - "sqsupseteq;": '\U00002292', - "squ;": '\U000025A1', - "square;": '\U000025A1', - "squarf;": '\U000025AA', - "squf;": '\U000025AA', - "srarr;": '\U00002192', - "sscr;": '\U0001D4C8', - "ssetmn;": '\U00002216', - "ssmile;": '\U00002323', - "sstarf;": '\U000022C6', - "star;": '\U00002606', - "starf;": '\U00002605', - "straightepsilon;": '\U000003F5', - "straightphi;": '\U000003D5', - "strns;": '\U000000AF', - "sub;": '\U00002282', - "subE;": '\U00002AC5', - "subdot;": '\U00002ABD', - "sube;": '\U00002286', - "subedot;": '\U00002AC3', - "submult;": '\U00002AC1', - "subnE;": '\U00002ACB', - "subne;": '\U0000228A', - "subplus;": '\U00002ABF', - "subrarr;": '\U00002979', - "subset;": '\U00002282', - "subseteq;": '\U00002286', - "subseteqq;": '\U00002AC5', - "subsetneq;": '\U0000228A', - "subsetneqq;": '\U00002ACB', - "subsim;": '\U00002AC7', - "subsub;": '\U00002AD5', - "subsup;": '\U00002AD3', - "succ;": '\U0000227B', - "succapprox;": '\U00002AB8', - "succcurlyeq;": '\U0000227D', - "succeq;": '\U00002AB0', - "succnapprox;": '\U00002ABA', - "succneqq;": '\U00002AB6', - "succnsim;": '\U000022E9', - "succsim;": '\U0000227F', - "sum;": '\U00002211', - "sung;": '\U0000266A', - "sup;": '\U00002283', - "sup1;": '\U000000B9', - "sup2;": '\U000000B2', - "sup3;": '\U000000B3', - "supE;": '\U00002AC6', - "supdot;": '\U00002ABE', - "supdsub;": '\U00002AD8', - "supe;": '\U00002287', - "supedot;": '\U00002AC4', - "suphsol;": '\U000027C9', - "suphsub;": '\U00002AD7', - "suplarr;": '\U0000297B', - "supmult;": '\U00002AC2', - "supnE;": '\U00002ACC', - "supne;": '\U0000228B', - "supplus;": '\U00002AC0', - "supset;": '\U00002283', - "supseteq;": '\U00002287', - "supseteqq;": '\U00002AC6', - "supsetneq;": '\U0000228B', - "supsetneqq;": '\U00002ACC', - "supsim;": '\U00002AC8', - "supsub;": '\U00002AD4', - "supsup;": '\U00002AD6', - "swArr;": '\U000021D9', - "swarhk;": '\U00002926', - "swarr;": '\U00002199', - "swarrow;": '\U00002199', - "swnwar;": '\U0000292A', - "szlig;": '\U000000DF', - "target;": '\U00002316', - "tau;": '\U000003C4', - "tbrk;": '\U000023B4', - "tcaron;": '\U00000165', - "tcedil;": '\U00000163', - "tcy;": '\U00000442', - "tdot;": '\U000020DB', - "telrec;": '\U00002315', - "tfr;": '\U0001D531', - "there4;": '\U00002234', - "therefore;": '\U00002234', - "theta;": '\U000003B8', - "thetasym;": '\U000003D1', - "thetav;": '\U000003D1', - "thickapprox;": '\U00002248', - "thicksim;": '\U0000223C', - "thinsp;": '\U00002009', - "thkap;": '\U00002248', - "thksim;": '\U0000223C', - "thorn;": '\U000000FE', - "tilde;": '\U000002DC', - "times;": '\U000000D7', - "timesb;": '\U000022A0', - "timesbar;": '\U00002A31', - "timesd;": '\U00002A30', - "tint;": '\U0000222D', - "toea;": '\U00002928', - "top;": '\U000022A4', - "topbot;": '\U00002336', - "topcir;": '\U00002AF1', - "topf;": '\U0001D565', - "topfork;": '\U00002ADA', - "tosa;": '\U00002929', - "tprime;": '\U00002034', - "trade;": '\U00002122', - "triangle;": '\U000025B5', - "triangledown;": '\U000025BF', - "triangleleft;": '\U000025C3', - "trianglelefteq;": '\U000022B4', - "triangleq;": '\U0000225C', - "triangleright;": '\U000025B9', - "trianglerighteq;": '\U000022B5', - "tridot;": '\U000025EC', - "trie;": '\U0000225C', - "triminus;": '\U00002A3A', - "triplus;": '\U00002A39', - "trisb;": '\U000029CD', - "tritime;": '\U00002A3B', - "trpezium;": '\U000023E2', - "tscr;": '\U0001D4C9', - "tscy;": '\U00000446', - "tshcy;": '\U0000045B', - "tstrok;": '\U00000167', - "twixt;": '\U0000226C', - "twoheadleftarrow;": '\U0000219E', - "twoheadrightarrow;": '\U000021A0', - "uArr;": '\U000021D1', - "uHar;": '\U00002963', - "uacute;": '\U000000FA', - "uarr;": '\U00002191', - "ubrcy;": '\U0000045E', - "ubreve;": '\U0000016D', - "ucirc;": '\U000000FB', - "ucy;": '\U00000443', - "udarr;": '\U000021C5', - "udblac;": '\U00000171', - "udhar;": '\U0000296E', - "ufisht;": '\U0000297E', - "ufr;": '\U0001D532', - "ugrave;": '\U000000F9', - "uharl;": '\U000021BF', - "uharr;": '\U000021BE', - "uhblk;": '\U00002580', - "ulcorn;": '\U0000231C', - "ulcorner;": '\U0000231C', - "ulcrop;": '\U0000230F', - "ultri;": '\U000025F8', - "umacr;": '\U0000016B', - "uml;": '\U000000A8', - "uogon;": '\U00000173', - "uopf;": '\U0001D566', - "uparrow;": '\U00002191', - "updownarrow;": '\U00002195', - "upharpoonleft;": '\U000021BF', - "upharpoonright;": '\U000021BE', - "uplus;": '\U0000228E', - "upsi;": '\U000003C5', - "upsih;": '\U000003D2', - "upsilon;": '\U000003C5', - "upuparrows;": '\U000021C8', - "urcorn;": '\U0000231D', - "urcorner;": '\U0000231D', - "urcrop;": '\U0000230E', - "uring;": '\U0000016F', - "urtri;": '\U000025F9', - "uscr;": '\U0001D4CA', - "utdot;": '\U000022F0', - "utilde;": '\U00000169', - "utri;": '\U000025B5', - "utrif;": '\U000025B4', - "uuarr;": '\U000021C8', - "uuml;": '\U000000FC', - "uwangle;": '\U000029A7', - "vArr;": '\U000021D5', - "vBar;": '\U00002AE8', - "vBarv;": '\U00002AE9', - "vDash;": '\U000022A8', - "vangrt;": '\U0000299C', - "varepsilon;": '\U000003F5', - "varkappa;": '\U000003F0', - "varnothing;": '\U00002205', - "varphi;": '\U000003D5', - "varpi;": '\U000003D6', - "varpropto;": '\U0000221D', - "varr;": '\U00002195', - "varrho;": '\U000003F1', - "varsigma;": '\U000003C2', - "vartheta;": '\U000003D1', - "vartriangleleft;": '\U000022B2', - "vartriangleright;": '\U000022B3', - "vcy;": '\U00000432', - "vdash;": '\U000022A2', - "vee;": '\U00002228', - "veebar;": '\U000022BB', - "veeeq;": '\U0000225A', - "vellip;": '\U000022EE', - "verbar;": '\U0000007C', - "vert;": '\U0000007C', - "vfr;": '\U0001D533', - "vltri;": '\U000022B2', - "vopf;": '\U0001D567', - "vprop;": '\U0000221D', - "vrtri;": '\U000022B3', - "vscr;": '\U0001D4CB', - "vzigzag;": '\U0000299A', - "wcirc;": '\U00000175', - "wedbar;": '\U00002A5F', - "wedge;": '\U00002227', - "wedgeq;": '\U00002259', - "weierp;": '\U00002118', - "wfr;": '\U0001D534', - "wopf;": '\U0001D568', - "wp;": '\U00002118', - "wr;": '\U00002240', - "wreath;": '\U00002240', - "wscr;": '\U0001D4CC', - "xcap;": '\U000022C2', - "xcirc;": '\U000025EF', - "xcup;": '\U000022C3', - "xdtri;": '\U000025BD', - "xfr;": '\U0001D535', - "xhArr;": '\U000027FA', - "xharr;": '\U000027F7', - "xi;": '\U000003BE', - "xlArr;": '\U000027F8', - "xlarr;": '\U000027F5', - "xmap;": '\U000027FC', - "xnis;": '\U000022FB', - "xodot;": '\U00002A00', - "xopf;": '\U0001D569', - "xoplus;": '\U00002A01', - "xotime;": '\U00002A02', - "xrArr;": '\U000027F9', - "xrarr;": '\U000027F6', - "xscr;": '\U0001D4CD', - "xsqcup;": '\U00002A06', - "xuplus;": '\U00002A04', - "xutri;": '\U000025B3', - "xvee;": '\U000022C1', - "xwedge;": '\U000022C0', - "yacute;": '\U000000FD', - "yacy;": '\U0000044F', - "ycirc;": '\U00000177', - "ycy;": '\U0000044B', - "yen;": '\U000000A5', - "yfr;": '\U0001D536', - "yicy;": '\U00000457', - "yopf;": '\U0001D56A', - "yscr;": '\U0001D4CE', - "yucy;": '\U0000044E', - "yuml;": '\U000000FF', - "zacute;": '\U0000017A', - "zcaron;": '\U0000017E', - "zcy;": '\U00000437', - "zdot;": '\U0000017C', - "zeetrf;": '\U00002128', - "zeta;": '\U000003B6', - "zfr;": '\U0001D537', - "zhcy;": '\U00000436', - "zigrarr;": '\U000021DD', - "zopf;": '\U0001D56B', - "zscr;": '\U0001D4CF', - "zwj;": '\U0000200D', - "zwnj;": '\U0000200C', - "AElig": '\U000000C6', - "AMP": '\U00000026', - "Aacute": '\U000000C1', - "Acirc": '\U000000C2', - "Agrave": '\U000000C0', - "Aring": '\U000000C5', - "Atilde": '\U000000C3', - "Auml": '\U000000C4', - "COPY": '\U000000A9', - "Ccedil": '\U000000C7', - "ETH": '\U000000D0', - "Eacute": '\U000000C9', - "Ecirc": '\U000000CA', - "Egrave": '\U000000C8', - "Euml": '\U000000CB', - "GT": '\U0000003E', - "Iacute": '\U000000CD', - "Icirc": '\U000000CE', - "Igrave": '\U000000CC', - "Iuml": '\U000000CF', - "LT": '\U0000003C', - "Ntilde": '\U000000D1', - "Oacute": '\U000000D3', - "Ocirc": '\U000000D4', - "Ograve": '\U000000D2', - "Oslash": '\U000000D8', - "Otilde": '\U000000D5', - "Ouml": '\U000000D6', - "QUOT": '\U00000022', - "REG": '\U000000AE', - "THORN": '\U000000DE', - "Uacute": '\U000000DA', - "Ucirc": '\U000000DB', - "Ugrave": '\U000000D9', - "Uuml": '\U000000DC', - "Yacute": '\U000000DD', - "aacute": '\U000000E1', - "acirc": '\U000000E2', - "acute": '\U000000B4', - "aelig": '\U000000E6', - "agrave": '\U000000E0', - "amp": '\U00000026', - "aring": '\U000000E5', - "atilde": '\U000000E3', - "auml": '\U000000E4', - "brvbar": '\U000000A6', - "ccedil": '\U000000E7', - "cedil": '\U000000B8', - "cent": '\U000000A2', - "copy": '\U000000A9', - "curren": '\U000000A4', - "deg": '\U000000B0', - "divide": '\U000000F7', - "eacute": '\U000000E9', - "ecirc": '\U000000EA', - "egrave": '\U000000E8', - "eth": '\U000000F0', - "euml": '\U000000EB', - "frac12": '\U000000BD', - "frac14": '\U000000BC', - "frac34": '\U000000BE', - "gt": '\U0000003E', - "iacute": '\U000000ED', - "icirc": '\U000000EE', - "iexcl": '\U000000A1', - "igrave": '\U000000EC', - "iquest": '\U000000BF', - "iuml": '\U000000EF', - "laquo": '\U000000AB', - "lt": '\U0000003C', - "macr": '\U000000AF', - "micro": '\U000000B5', - "middot": '\U000000B7', - "nbsp": '\U000000A0', - "not": '\U000000AC', - "ntilde": '\U000000F1', - "oacute": '\U000000F3', - "ocirc": '\U000000F4', - "ograve": '\U000000F2', - "ordf": '\U000000AA', - "ordm": '\U000000BA', - "oslash": '\U000000F8', - "otilde": '\U000000F5', - "ouml": '\U000000F6', - "para": '\U000000B6', - "plusmn": '\U000000B1', - "pound": '\U000000A3', - "quot": '\U00000022', - "raquo": '\U000000BB', - "reg": '\U000000AE', - "sect": '\U000000A7', - "shy": '\U000000AD', - "sup1": '\U000000B9', - "sup2": '\U000000B2', - "sup3": '\U000000B3', - "szlig": '\U000000DF', - "thorn": '\U000000FE', - "times": '\U000000D7', - "uacute": '\U000000FA', - "ucirc": '\U000000FB', - "ugrave": '\U000000F9', - "uml": '\U000000A8', - "uuml": '\U000000FC', - "yacute": '\U000000FD', - "yen": '\U000000A5', - "yuml": '\U000000FF', - } +func mkEntityVal(str string) (ret entityVal) { + ret.Len = copy(ret.Val[:], str) + return ret +} - entity2 = map[string][2]rune{ - "NotEqualTilde;": {'\u2242', '\u0338'}, - "NotGreaterFullEqual;": {'\u2267', '\u0338'}, - "NotGreaterGreater;": {'\u226B', '\u0338'}, - "NotGreaterSlantEqual;": {'\u2A7E', '\u0338'}, - "NotHumpDownHump;": {'\u224E', '\u0338'}, - "NotHumpEqual;": {'\u224F', '\u0338'}, - "NotLeftTriangleBar;": {'\u29CF', '\u0338'}, - "NotLessLess;": {'\u226A', '\u0338'}, - "NotLessSlantEqual;": {'\u2A7D', '\u0338'}, - "NotNestedGreaterGreater;": {'\u2AA2', '\u0338'}, - "NotNestedLessLess;": {'\u2AA1', '\u0338'}, - "NotPrecedesEqual;": {'\u2AAF', '\u0338'}, - "NotRightTriangleBar;": {'\u29D0', '\u0338'}, - "NotSquareSubset;": {'\u228F', '\u0338'}, - "NotSquareSuperset;": {'\u2290', '\u0338'}, - "NotSubset;": {'\u2282', '\u20D2'}, - "NotSucceedsEqual;": {'\u2AB0', '\u0338'}, - "NotSucceedsTilde;": {'\u227F', '\u0338'}, - "NotSuperset;": {'\u2283', '\u20D2'}, - "ThickSpace;": {'\u205F', '\u200A'}, - "acE;": {'\u223E', '\u0333'}, - "bne;": {'\u003D', '\u20E5'}, - "bnequiv;": {'\u2261', '\u20E5'}, - "caps;": {'\u2229', '\uFE00'}, - "cups;": {'\u222A', '\uFE00'}, - "fjlig;": {'\u0066', '\u006A'}, - "gesl;": {'\u22DB', '\uFE00'}, - "gvertneqq;": {'\u2269', '\uFE00'}, - "gvnE;": {'\u2269', '\uFE00'}, - "lates;": {'\u2AAD', '\uFE00'}, - "lesg;": {'\u22DA', '\uFE00'}, - "lvertneqq;": {'\u2268', '\uFE00'}, - "lvnE;": {'\u2268', '\uFE00'}, - "nGg;": {'\u22D9', '\u0338'}, - "nGtv;": {'\u226B', '\u0338'}, - "nLl;": {'\u22D8', '\u0338'}, - "nLtv;": {'\u226A', '\u0338'}, - "nang;": {'\u2220', '\u20D2'}, - "napE;": {'\u2A70', '\u0338'}, - "napid;": {'\u224B', '\u0338'}, - "nbump;": {'\u224E', '\u0338'}, - "nbumpe;": {'\u224F', '\u0338'}, - "ncongdot;": {'\u2A6D', '\u0338'}, - "nedot;": {'\u2250', '\u0338'}, - "nesim;": {'\u2242', '\u0338'}, - "ngE;": {'\u2267', '\u0338'}, - "ngeqq;": {'\u2267', '\u0338'}, - "ngeqslant;": {'\u2A7E', '\u0338'}, - "nges;": {'\u2A7E', '\u0338'}, - "nlE;": {'\u2266', '\u0338'}, - "nleqq;": {'\u2266', '\u0338'}, - "nleqslant;": {'\u2A7D', '\u0338'}, - "nles;": {'\u2A7D', '\u0338'}, - "notinE;": {'\u22F9', '\u0338'}, - "notindot;": {'\u22F5', '\u0338'}, - "nparsl;": {'\u2AFD', '\u20E5'}, - "npart;": {'\u2202', '\u0338'}, - "npre;": {'\u2AAF', '\u0338'}, - "npreceq;": {'\u2AAF', '\u0338'}, - "nrarrc;": {'\u2933', '\u0338'}, - "nrarrw;": {'\u219D', '\u0338'}, - "nsce;": {'\u2AB0', '\u0338'}, - "nsubE;": {'\u2AC5', '\u0338'}, - "nsubset;": {'\u2282', '\u20D2'}, - "nsubseteqq;": {'\u2AC5', '\u0338'}, - "nsucceq;": {'\u2AB0', '\u0338'}, - "nsupE;": {'\u2AC6', '\u0338'}, - "nsupset;": {'\u2283', '\u20D2'}, - "nsupseteqq;": {'\u2AC6', '\u0338'}, - "nvap;": {'\u224D', '\u20D2'}, - "nvge;": {'\u2265', '\u20D2'}, - "nvgt;": {'\u003E', '\u20D2'}, - "nvle;": {'\u2264', '\u20D2'}, - "nvlt;": {'\u003C', '\u20D2'}, - "nvltrie;": {'\u22B4', '\u20D2'}, - "nvrtrie;": {'\u22B5', '\u20D2'}, - "nvsim;": {'\u223C', '\u20D2'}, - "race;": {'\u223D', '\u0331'}, - "smtes;": {'\u2AAC', '\uFE00'}, - "sqcaps;": {'\u2293', '\uFE00'}, - "sqcups;": {'\u2294', '\uFE00'}, - "varsubsetneq;": {'\u228A', '\uFE00'}, - "varsubsetneqq;": {'\u2ACB', '\uFE00'}, - "varsupsetneq;": {'\u228B', '\uFE00'}, - "varsupsetneqq;": {'\u2ACC', '\uFE00'}, - "vnsub;": {'\u2282', '\u20D2'}, - "vnsup;": {'\u2283', '\u20D2'}, - "vsubnE;": {'\u2ACB', '\uFE00'}, - "vsubne;": {'\u228A', '\uFE00'}, - "vsupnE;": {'\u2ACC', '\uFE00'}, - "vsupne;": {'\u228B', '\uFE00'}, - } +// populateMapOnce guards calling populateMap. +var populateMapOnce sync.Once - entityWide = map[string][2]rune{ - "nLt;": {'\u226A', '\u20D2'}, - "nGt;": {'\u226B', '\u20D2'}, +// populateMap populates entity. +func populateMap() { + entity = map[string]entityVal{ + "AElig;": mkEntityVal("\U000000C6"), + "AMP;": mkEntityVal("\U00000026"), + "Aacute;": mkEntityVal("\U000000C1"), + "Abreve;": mkEntityVal("\U00000102"), + "Acirc;": mkEntityVal("\U000000C2"), + "Acy;": mkEntityVal("\U00000410"), + "Afr;": mkEntityVal("\U0001D504"), + "Agrave;": mkEntityVal("\U000000C0"), + "Alpha;": mkEntityVal("\U00000391"), + "Amacr;": mkEntityVal("\U00000100"), + "And;": mkEntityVal("\U00002A53"), + "Aogon;": mkEntityVal("\U00000104"), + "Aopf;": mkEntityVal("\U0001D538"), + "ApplyFunction;": mkEntityVal("\U00002061"), + "Aring;": mkEntityVal("\U000000C5"), + "Ascr;": mkEntityVal("\U0001D49C"), + "Assign;": mkEntityVal("\U00002254"), + "Atilde;": mkEntityVal("\U000000C3"), + "Auml;": mkEntityVal("\U000000C4"), + "Backslash;": mkEntityVal("\U00002216"), + "Barv;": mkEntityVal("\U00002AE7"), + "Barwed;": mkEntityVal("\U00002306"), + "Bcy;": mkEntityVal("\U00000411"), + "Because;": mkEntityVal("\U00002235"), + "Bernoullis;": mkEntityVal("\U0000212C"), + "Beta;": mkEntityVal("\U00000392"), + "Bfr;": mkEntityVal("\U0001D505"), + "Bopf;": mkEntityVal("\U0001D539"), + "Breve;": mkEntityVal("\U000002D8"), + "Bscr;": mkEntityVal("\U0000212C"), + "Bumpeq;": mkEntityVal("\U0000224E"), + "CHcy;": mkEntityVal("\U00000427"), + "COPY;": mkEntityVal("\U000000A9"), + "Cacute;": mkEntityVal("\U00000106"), + "Cap;": mkEntityVal("\U000022D2"), + "CapitalDifferentialD;": mkEntityVal("\U00002145"), + "Cayleys;": mkEntityVal("\U0000212D"), + "Ccaron;": mkEntityVal("\U0000010C"), + "Ccedil;": mkEntityVal("\U000000C7"), + "Ccirc;": mkEntityVal("\U00000108"), + "Cconint;": mkEntityVal("\U00002230"), + "Cdot;": mkEntityVal("\U0000010A"), + "Cedilla;": mkEntityVal("\U000000B8"), + "CenterDot;": mkEntityVal("\U000000B7"), + "Cfr;": mkEntityVal("\U0000212D"), + "Chi;": mkEntityVal("\U000003A7"), + "CircleDot;": mkEntityVal("\U00002299"), + "CircleMinus;": mkEntityVal("\U00002296"), + "CirclePlus;": mkEntityVal("\U00002295"), + "CircleTimes;": mkEntityVal("\U00002297"), + "ClockwiseContourIntegral;": mkEntityVal("\U00002232"), + "CloseCurlyDoubleQuote;": mkEntityVal("\U0000201D"), + "CloseCurlyQuote;": mkEntityVal("\U00002019"), + "Colon;": mkEntityVal("\U00002237"), + "Colone;": mkEntityVal("\U00002A74"), + "Congruent;": mkEntityVal("\U00002261"), + "Conint;": mkEntityVal("\U0000222F"), + "ContourIntegral;": mkEntityVal("\U0000222E"), + "Copf;": mkEntityVal("\U00002102"), + "Coproduct;": mkEntityVal("\U00002210"), + "CounterClockwiseContourIntegral;": mkEntityVal("\U00002233"), + "Cross;": mkEntityVal("\U00002A2F"), + "Cscr;": mkEntityVal("\U0001D49E"), + "Cup;": mkEntityVal("\U000022D3"), + "CupCap;": mkEntityVal("\U0000224D"), + "DD;": mkEntityVal("\U00002145"), + "DDotrahd;": mkEntityVal("\U00002911"), + "DJcy;": mkEntityVal("\U00000402"), + "DScy;": mkEntityVal("\U00000405"), + "DZcy;": mkEntityVal("\U0000040F"), + "Dagger;": mkEntityVal("\U00002021"), + "Darr;": mkEntityVal("\U000021A1"), + "Dashv;": mkEntityVal("\U00002AE4"), + "Dcaron;": mkEntityVal("\U0000010E"), + "Dcy;": mkEntityVal("\U00000414"), + "Del;": mkEntityVal("\U00002207"), + "Delta;": mkEntityVal("\U00000394"), + "Dfr;": mkEntityVal("\U0001D507"), + "DiacriticalAcute;": mkEntityVal("\U000000B4"), + "DiacriticalDot;": mkEntityVal("\U000002D9"), + "DiacriticalDoubleAcute;": mkEntityVal("\U000002DD"), + "DiacriticalGrave;": mkEntityVal("\U00000060"), + "DiacriticalTilde;": mkEntityVal("\U000002DC"), + "Diamond;": mkEntityVal("\U000022C4"), + "DifferentialD;": mkEntityVal("\U00002146"), + "Dopf;": mkEntityVal("\U0001D53B"), + "Dot;": mkEntityVal("\U000000A8"), + "DotDot;": mkEntityVal("\U000020DC"), + "DotEqual;": mkEntityVal("\U00002250"), + "DoubleContourIntegral;": mkEntityVal("\U0000222F"), + "DoubleDot;": mkEntityVal("\U000000A8"), + "DoubleDownArrow;": mkEntityVal("\U000021D3"), + "DoubleLeftArrow;": mkEntityVal("\U000021D0"), + "DoubleLeftRightArrow;": mkEntityVal("\U000021D4"), + "DoubleLeftTee;": mkEntityVal("\U00002AE4"), + "DoubleLongLeftArrow;": mkEntityVal("\U000027F8"), + "DoubleLongLeftRightArrow;": mkEntityVal("\U000027FA"), + "DoubleLongRightArrow;": mkEntityVal("\U000027F9"), + "DoubleRightArrow;": mkEntityVal("\U000021D2"), + "DoubleRightTee;": mkEntityVal("\U000022A8"), + "DoubleUpArrow;": mkEntityVal("\U000021D1"), + "DoubleUpDownArrow;": mkEntityVal("\U000021D5"), + "DoubleVerticalBar;": mkEntityVal("\U00002225"), + "DownArrow;": mkEntityVal("\U00002193"), + "DownArrowBar;": mkEntityVal("\U00002913"), + "DownArrowUpArrow;": mkEntityVal("\U000021F5"), + "DownBreve;": mkEntityVal("\U00000311"), + "DownLeftRightVector;": mkEntityVal("\U00002950"), + "DownLeftTeeVector;": mkEntityVal("\U0000295E"), + "DownLeftVector;": mkEntityVal("\U000021BD"), + "DownLeftVectorBar;": mkEntityVal("\U00002956"), + "DownRightTeeVector;": mkEntityVal("\U0000295F"), + "DownRightVector;": mkEntityVal("\U000021C1"), + "DownRightVectorBar;": mkEntityVal("\U00002957"), + "DownTee;": mkEntityVal("\U000022A4"), + "DownTeeArrow;": mkEntityVal("\U000021A7"), + "Downarrow;": mkEntityVal("\U000021D3"), + "Dscr;": mkEntityVal("\U0001D49F"), + "Dstrok;": mkEntityVal("\U00000110"), + "ENG;": mkEntityVal("\U0000014A"), + "ETH;": mkEntityVal("\U000000D0"), + "Eacute;": mkEntityVal("\U000000C9"), + "Ecaron;": mkEntityVal("\U0000011A"), + "Ecirc;": mkEntityVal("\U000000CA"), + "Ecy;": mkEntityVal("\U0000042D"), + "Edot;": mkEntityVal("\U00000116"), + "Efr;": mkEntityVal("\U0001D508"), + "Egrave;": mkEntityVal("\U000000C8"), + "Element;": mkEntityVal("\U00002208"), + "Emacr;": mkEntityVal("\U00000112"), + "EmptySmallSquare;": mkEntityVal("\U000025FB"), + "EmptyVerySmallSquare;": mkEntityVal("\U000025AB"), + "Eogon;": mkEntityVal("\U00000118"), + "Eopf;": mkEntityVal("\U0001D53C"), + "Epsilon;": mkEntityVal("\U00000395"), + "Equal;": mkEntityVal("\U00002A75"), + "EqualTilde;": mkEntityVal("\U00002242"), + "Equilibrium;": mkEntityVal("\U000021CC"), + "Escr;": mkEntityVal("\U00002130"), + "Esim;": mkEntityVal("\U00002A73"), + "Eta;": mkEntityVal("\U00000397"), + "Euml;": mkEntityVal("\U000000CB"), + "Exists;": mkEntityVal("\U00002203"), + "ExponentialE;": mkEntityVal("\U00002147"), + "Fcy;": mkEntityVal("\U00000424"), + "Ffr;": mkEntityVal("\U0001D509"), + "FilledSmallSquare;": mkEntityVal("\U000025FC"), + "FilledVerySmallSquare;": mkEntityVal("\U000025AA"), + "Fopf;": mkEntityVal("\U0001D53D"), + "ForAll;": mkEntityVal("\U00002200"), + "Fouriertrf;": mkEntityVal("\U00002131"), + "Fscr;": mkEntityVal("\U00002131"), + "GJcy;": mkEntityVal("\U00000403"), + "GT;": mkEntityVal("\U0000003E"), + "Gamma;": mkEntityVal("\U00000393"), + "Gammad;": mkEntityVal("\U000003DC"), + "Gbreve;": mkEntityVal("\U0000011E"), + "Gcedil;": mkEntityVal("\U00000122"), + "Gcirc;": mkEntityVal("\U0000011C"), + "Gcy;": mkEntityVal("\U00000413"), + "Gdot;": mkEntityVal("\U00000120"), + "Gfr;": mkEntityVal("\U0001D50A"), + "Gg;": mkEntityVal("\U000022D9"), + "Gopf;": mkEntityVal("\U0001D53E"), + "GreaterEqual;": mkEntityVal("\U00002265"), + "GreaterEqualLess;": mkEntityVal("\U000022DB"), + "GreaterFullEqual;": mkEntityVal("\U00002267"), + "GreaterGreater;": mkEntityVal("\U00002AA2"), + "GreaterLess;": mkEntityVal("\U00002277"), + "GreaterSlantEqual;": mkEntityVal("\U00002A7E"), + "GreaterTilde;": mkEntityVal("\U00002273"), + "Gscr;": mkEntityVal("\U0001D4A2"), + "Gt;": mkEntityVal("\U0000226B"), + "HARDcy;": mkEntityVal("\U0000042A"), + "Hacek;": mkEntityVal("\U000002C7"), + "Hat;": mkEntityVal("\U0000005E"), + "Hcirc;": mkEntityVal("\U00000124"), + "Hfr;": mkEntityVal("\U0000210C"), + "HilbertSpace;": mkEntityVal("\U0000210B"), + "Hopf;": mkEntityVal("\U0000210D"), + "HorizontalLine;": mkEntityVal("\U00002500"), + "Hscr;": mkEntityVal("\U0000210B"), + "Hstrok;": mkEntityVal("\U00000126"), + "HumpDownHump;": mkEntityVal("\U0000224E"), + "HumpEqual;": mkEntityVal("\U0000224F"), + "IEcy;": mkEntityVal("\U00000415"), + "IJlig;": mkEntityVal("\U00000132"), + "IOcy;": mkEntityVal("\U00000401"), + "Iacute;": mkEntityVal("\U000000CD"), + "Icirc;": mkEntityVal("\U000000CE"), + "Icy;": mkEntityVal("\U00000418"), + "Idot;": mkEntityVal("\U00000130"), + "Ifr;": mkEntityVal("\U00002111"), + "Igrave;": mkEntityVal("\U000000CC"), + "Im;": mkEntityVal("\U00002111"), + "Imacr;": mkEntityVal("\U0000012A"), + "ImaginaryI;": mkEntityVal("\U00002148"), + "Implies;": mkEntityVal("\U000021D2"), + "Int;": mkEntityVal("\U0000222C"), + "Integral;": mkEntityVal("\U0000222B"), + "Intersection;": mkEntityVal("\U000022C2"), + "InvisibleComma;": mkEntityVal("\U00002063"), + "InvisibleTimes;": mkEntityVal("\U00002062"), + "Iogon;": mkEntityVal("\U0000012E"), + "Iopf;": mkEntityVal("\U0001D540"), + "Iota;": mkEntityVal("\U00000399"), + "Iscr;": mkEntityVal("\U00002110"), + "Itilde;": mkEntityVal("\U00000128"), + "Iukcy;": mkEntityVal("\U00000406"), + "Iuml;": mkEntityVal("\U000000CF"), + "Jcirc;": mkEntityVal("\U00000134"), + "Jcy;": mkEntityVal("\U00000419"), + "Jfr;": mkEntityVal("\U0001D50D"), + "Jopf;": mkEntityVal("\U0001D541"), + "Jscr;": mkEntityVal("\U0001D4A5"), + "Jsercy;": mkEntityVal("\U00000408"), + "Jukcy;": mkEntityVal("\U00000404"), + "KHcy;": mkEntityVal("\U00000425"), + "KJcy;": mkEntityVal("\U0000040C"), + "Kappa;": mkEntityVal("\U0000039A"), + "Kcedil;": mkEntityVal("\U00000136"), + "Kcy;": mkEntityVal("\U0000041A"), + "Kfr;": mkEntityVal("\U0001D50E"), + "Kopf;": mkEntityVal("\U0001D542"), + "Kscr;": mkEntityVal("\U0001D4A6"), + "LJcy;": mkEntityVal("\U00000409"), + "LT;": mkEntityVal("\U0000003C"), + "Lacute;": mkEntityVal("\U00000139"), + "Lambda;": mkEntityVal("\U0000039B"), + "Lang;": mkEntityVal("\U000027EA"), + "Laplacetrf;": mkEntityVal("\U00002112"), + "Larr;": mkEntityVal("\U0000219E"), + "Lcaron;": mkEntityVal("\U0000013D"), + "Lcedil;": mkEntityVal("\U0000013B"), + "Lcy;": mkEntityVal("\U0000041B"), + "LeftAngleBracket;": mkEntityVal("\U000027E8"), + "LeftArrow;": mkEntityVal("\U00002190"), + "LeftArrowBar;": mkEntityVal("\U000021E4"), + "LeftArrowRightArrow;": mkEntityVal("\U000021C6"), + "LeftCeiling;": mkEntityVal("\U00002308"), + "LeftDoubleBracket;": mkEntityVal("\U000027E6"), + "LeftDownTeeVector;": mkEntityVal("\U00002961"), + "LeftDownVector;": mkEntityVal("\U000021C3"), + "LeftDownVectorBar;": mkEntityVal("\U00002959"), + "LeftFloor;": mkEntityVal("\U0000230A"), + "LeftRightArrow;": mkEntityVal("\U00002194"), + "LeftRightVector;": mkEntityVal("\U0000294E"), + "LeftTee;": mkEntityVal("\U000022A3"), + "LeftTeeArrow;": mkEntityVal("\U000021A4"), + "LeftTeeVector;": mkEntityVal("\U0000295A"), + "LeftTriangle;": mkEntityVal("\U000022B2"), + "LeftTriangleBar;": mkEntityVal("\U000029CF"), + "LeftTriangleEqual;": mkEntityVal("\U000022B4"), + "LeftUpDownVector;": mkEntityVal("\U00002951"), + "LeftUpTeeVector;": mkEntityVal("\U00002960"), + "LeftUpVector;": mkEntityVal("\U000021BF"), + "LeftUpVectorBar;": mkEntityVal("\U00002958"), + "LeftVector;": mkEntityVal("\U000021BC"), + "LeftVectorBar;": mkEntityVal("\U00002952"), + "Leftarrow;": mkEntityVal("\U000021D0"), + "Leftrightarrow;": mkEntityVal("\U000021D4"), + "LessEqualGreater;": mkEntityVal("\U000022DA"), + "LessFullEqual;": mkEntityVal("\U00002266"), + "LessGreater;": mkEntityVal("\U00002276"), + "LessLess;": mkEntityVal("\U00002AA1"), + "LessSlantEqual;": mkEntityVal("\U00002A7D"), + "LessTilde;": mkEntityVal("\U00002272"), + "Lfr;": mkEntityVal("\U0001D50F"), + "Ll;": mkEntityVal("\U000022D8"), + "Lleftarrow;": mkEntityVal("\U000021DA"), + "Lmidot;": mkEntityVal("\U0000013F"), + "LongLeftArrow;": mkEntityVal("\U000027F5"), + "LongLeftRightArrow;": mkEntityVal("\U000027F7"), + "LongRightArrow;": mkEntityVal("\U000027F6"), + "Longleftarrow;": mkEntityVal("\U000027F8"), + "Longleftrightarrow;": mkEntityVal("\U000027FA"), + "Longrightarrow;": mkEntityVal("\U000027F9"), + "Lopf;": mkEntityVal("\U0001D543"), + "LowerLeftArrow;": mkEntityVal("\U00002199"), + "LowerRightArrow;": mkEntityVal("\U00002198"), + "Lscr;": mkEntityVal("\U00002112"), + "Lsh;": mkEntityVal("\U000021B0"), + "Lstrok;": mkEntityVal("\U00000141"), + "Lt;": mkEntityVal("\U0000226A"), + "Map;": mkEntityVal("\U00002905"), + "Mcy;": mkEntityVal("\U0000041C"), + "MediumSpace;": mkEntityVal("\U0000205F"), + "Mellintrf;": mkEntityVal("\U00002133"), + "Mfr;": mkEntityVal("\U0001D510"), + "MinusPlus;": mkEntityVal("\U00002213"), + "Mopf;": mkEntityVal("\U0001D544"), + "Mscr;": mkEntityVal("\U00002133"), + "Mu;": mkEntityVal("\U0000039C"), + "NJcy;": mkEntityVal("\U0000040A"), + "Nacute;": mkEntityVal("\U00000143"), + "Ncaron;": mkEntityVal("\U00000147"), + "Ncedil;": mkEntityVal("\U00000145"), + "Ncy;": mkEntityVal("\U0000041D"), + "NegativeMediumSpace;": mkEntityVal("\U0000200B"), + "NegativeThickSpace;": mkEntityVal("\U0000200B"), + "NegativeThinSpace;": mkEntityVal("\U0000200B"), + "NegativeVeryThinSpace;": mkEntityVal("\U0000200B"), + "NestedGreaterGreater;": mkEntityVal("\U0000226B"), + "NestedLessLess;": mkEntityVal("\U0000226A"), + "NewLine;": mkEntityVal("\U0000000A"), + "Nfr;": mkEntityVal("\U0001D511"), + "NoBreak;": mkEntityVal("\U00002060"), + "NonBreakingSpace;": mkEntityVal("\U000000A0"), + "Nopf;": mkEntityVal("\U00002115"), + "Not;": mkEntityVal("\U00002AEC"), + "NotCongruent;": mkEntityVal("\U00002262"), + "NotCupCap;": mkEntityVal("\U0000226D"), + "NotDoubleVerticalBar;": mkEntityVal("\U00002226"), + "NotElement;": mkEntityVal("\U00002209"), + "NotEqual;": mkEntityVal("\U00002260"), + "NotExists;": mkEntityVal("\U00002204"), + "NotGreater;": mkEntityVal("\U0000226F"), + "NotGreaterEqual;": mkEntityVal("\U00002271"), + "NotGreaterLess;": mkEntityVal("\U00002279"), + "NotGreaterTilde;": mkEntityVal("\U00002275"), + "NotLeftTriangle;": mkEntityVal("\U000022EA"), + "NotLeftTriangleEqual;": mkEntityVal("\U000022EC"), + "NotLess;": mkEntityVal("\U0000226E"), + "NotLessEqual;": mkEntityVal("\U00002270"), + "NotLessGreater;": mkEntityVal("\U00002278"), + "NotLessTilde;": mkEntityVal("\U00002274"), + "NotPrecedes;": mkEntityVal("\U00002280"), + "NotPrecedesSlantEqual;": mkEntityVal("\U000022E0"), + "NotReverseElement;": mkEntityVal("\U0000220C"), + "NotRightTriangle;": mkEntityVal("\U000022EB"), + "NotRightTriangleEqual;": mkEntityVal("\U000022ED"), + "NotSquareSubsetEqual;": mkEntityVal("\U000022E2"), + "NotSquareSupersetEqual;": mkEntityVal("\U000022E3"), + "NotSubsetEqual;": mkEntityVal("\U00002288"), + "NotSucceeds;": mkEntityVal("\U00002281"), + "NotSucceedsSlantEqual;": mkEntityVal("\U000022E1"), + "NotSupersetEqual;": mkEntityVal("\U00002289"), + "NotTilde;": mkEntityVal("\U00002241"), + "NotTildeEqual;": mkEntityVal("\U00002244"), + "NotTildeFullEqual;": mkEntityVal("\U00002247"), + "NotTildeTilde;": mkEntityVal("\U00002249"), + "NotVerticalBar;": mkEntityVal("\U00002224"), + "Nscr;": mkEntityVal("\U0001D4A9"), + "Ntilde;": mkEntityVal("\U000000D1"), + "Nu;": mkEntityVal("\U0000039D"), + "OElig;": mkEntityVal("\U00000152"), + "Oacute;": mkEntityVal("\U000000D3"), + "Ocirc;": mkEntityVal("\U000000D4"), + "Ocy;": mkEntityVal("\U0000041E"), + "Odblac;": mkEntityVal("\U00000150"), + "Ofr;": mkEntityVal("\U0001D512"), + "Ograve;": mkEntityVal("\U000000D2"), + "Omacr;": mkEntityVal("\U0000014C"), + "Omega;": mkEntityVal("\U000003A9"), + "Omicron;": mkEntityVal("\U0000039F"), + "Oopf;": mkEntityVal("\U0001D546"), + "OpenCurlyDoubleQuote;": mkEntityVal("\U0000201C"), + "OpenCurlyQuote;": mkEntityVal("\U00002018"), + "Or;": mkEntityVal("\U00002A54"), + "Oscr;": mkEntityVal("\U0001D4AA"), + "Oslash;": mkEntityVal("\U000000D8"), + "Otilde;": mkEntityVal("\U000000D5"), + "Otimes;": mkEntityVal("\U00002A37"), + "Ouml;": mkEntityVal("\U000000D6"), + "OverBar;": mkEntityVal("\U0000203E"), + "OverBrace;": mkEntityVal("\U000023DE"), + "OverBracket;": mkEntityVal("\U000023B4"), + "OverParenthesis;": mkEntityVal("\U000023DC"), + "PartialD;": mkEntityVal("\U00002202"), + "Pcy;": mkEntityVal("\U0000041F"), + "Pfr;": mkEntityVal("\U0001D513"), + "Phi;": mkEntityVal("\U000003A6"), + "Pi;": mkEntityVal("\U000003A0"), + "PlusMinus;": mkEntityVal("\U000000B1"), + "Poincareplane;": mkEntityVal("\U0000210C"), + "Popf;": mkEntityVal("\U00002119"), + "Pr;": mkEntityVal("\U00002ABB"), + "Precedes;": mkEntityVal("\U0000227A"), + "PrecedesEqual;": mkEntityVal("\U00002AAF"), + "PrecedesSlantEqual;": mkEntityVal("\U0000227C"), + "PrecedesTilde;": mkEntityVal("\U0000227E"), + "Prime;": mkEntityVal("\U00002033"), + "Product;": mkEntityVal("\U0000220F"), + "Proportion;": mkEntityVal("\U00002237"), + "Proportional;": mkEntityVal("\U0000221D"), + "Pscr;": mkEntityVal("\U0001D4AB"), + "Psi;": mkEntityVal("\U000003A8"), + "QUOT;": mkEntityVal("\U00000022"), + "Qfr;": mkEntityVal("\U0001D514"), + "Qopf;": mkEntityVal("\U0000211A"), + "Qscr;": mkEntityVal("\U0001D4AC"), + "RBarr;": mkEntityVal("\U00002910"), + "REG;": mkEntityVal("\U000000AE"), + "Racute;": mkEntityVal("\U00000154"), + "Rang;": mkEntityVal("\U000027EB"), + "Rarr;": mkEntityVal("\U000021A0"), + "Rarrtl;": mkEntityVal("\U00002916"), + "Rcaron;": mkEntityVal("\U00000158"), + "Rcedil;": mkEntityVal("\U00000156"), + "Rcy;": mkEntityVal("\U00000420"), + "Re;": mkEntityVal("\U0000211C"), + "ReverseElement;": mkEntityVal("\U0000220B"), + "ReverseEquilibrium;": mkEntityVal("\U000021CB"), + "ReverseUpEquilibrium;": mkEntityVal("\U0000296F"), + "Rfr;": mkEntityVal("\U0000211C"), + "Rho;": mkEntityVal("\U000003A1"), + "RightAngleBracket;": mkEntityVal("\U000027E9"), + "RightArrow;": mkEntityVal("\U00002192"), + "RightArrowBar;": mkEntityVal("\U000021E5"), + "RightArrowLeftArrow;": mkEntityVal("\U000021C4"), + "RightCeiling;": mkEntityVal("\U00002309"), + "RightDoubleBracket;": mkEntityVal("\U000027E7"), + "RightDownTeeVector;": mkEntityVal("\U0000295D"), + "RightDownVector;": mkEntityVal("\U000021C2"), + "RightDownVectorBar;": mkEntityVal("\U00002955"), + "RightFloor;": mkEntityVal("\U0000230B"), + "RightTee;": mkEntityVal("\U000022A2"), + "RightTeeArrow;": mkEntityVal("\U000021A6"), + "RightTeeVector;": mkEntityVal("\U0000295B"), + "RightTriangle;": mkEntityVal("\U000022B3"), + "RightTriangleBar;": mkEntityVal("\U000029D0"), + "RightTriangleEqual;": mkEntityVal("\U000022B5"), + "RightUpDownVector;": mkEntityVal("\U0000294F"), + "RightUpTeeVector;": mkEntityVal("\U0000295C"), + "RightUpVector;": mkEntityVal("\U000021BE"), + "RightUpVectorBar;": mkEntityVal("\U00002954"), + "RightVector;": mkEntityVal("\U000021C0"), + "RightVectorBar;": mkEntityVal("\U00002953"), + "Rightarrow;": mkEntityVal("\U000021D2"), + "Ropf;": mkEntityVal("\U0000211D"), + "RoundImplies;": mkEntityVal("\U00002970"), + "Rrightarrow;": mkEntityVal("\U000021DB"), + "Rscr;": mkEntityVal("\U0000211B"), + "Rsh;": mkEntityVal("\U000021B1"), + "RuleDelayed;": mkEntityVal("\U000029F4"), + "SHCHcy;": mkEntityVal("\U00000429"), + "SHcy;": mkEntityVal("\U00000428"), + "SOFTcy;": mkEntityVal("\U0000042C"), + "Sacute;": mkEntityVal("\U0000015A"), + "Sc;": mkEntityVal("\U00002ABC"), + "Scaron;": mkEntityVal("\U00000160"), + "Scedil;": mkEntityVal("\U0000015E"), + "Scirc;": mkEntityVal("\U0000015C"), + "Scy;": mkEntityVal("\U00000421"), + "Sfr;": mkEntityVal("\U0001D516"), + "ShortDownArrow;": mkEntityVal("\U00002193"), + "ShortLeftArrow;": mkEntityVal("\U00002190"), + "ShortRightArrow;": mkEntityVal("\U00002192"), + "ShortUpArrow;": mkEntityVal("\U00002191"), + "Sigma;": mkEntityVal("\U000003A3"), + "SmallCircle;": mkEntityVal("\U00002218"), + "Sopf;": mkEntityVal("\U0001D54A"), + "Sqrt;": mkEntityVal("\U0000221A"), + "Square;": mkEntityVal("\U000025A1"), + "SquareIntersection;": mkEntityVal("\U00002293"), + "SquareSubset;": mkEntityVal("\U0000228F"), + "SquareSubsetEqual;": mkEntityVal("\U00002291"), + "SquareSuperset;": mkEntityVal("\U00002290"), + "SquareSupersetEqual;": mkEntityVal("\U00002292"), + "SquareUnion;": mkEntityVal("\U00002294"), + "Sscr;": mkEntityVal("\U0001D4AE"), + "Star;": mkEntityVal("\U000022C6"), + "Sub;": mkEntityVal("\U000022D0"), + "Subset;": mkEntityVal("\U000022D0"), + "SubsetEqual;": mkEntityVal("\U00002286"), + "Succeeds;": mkEntityVal("\U0000227B"), + "SucceedsEqual;": mkEntityVal("\U00002AB0"), + "SucceedsSlantEqual;": mkEntityVal("\U0000227D"), + "SucceedsTilde;": mkEntityVal("\U0000227F"), + "SuchThat;": mkEntityVal("\U0000220B"), + "Sum;": mkEntityVal("\U00002211"), + "Sup;": mkEntityVal("\U000022D1"), + "Superset;": mkEntityVal("\U00002283"), + "SupersetEqual;": mkEntityVal("\U00002287"), + "Supset;": mkEntityVal("\U000022D1"), + "THORN;": mkEntityVal("\U000000DE"), + "TRADE;": mkEntityVal("\U00002122"), + "TSHcy;": mkEntityVal("\U0000040B"), + "TScy;": mkEntityVal("\U00000426"), + "Tab;": mkEntityVal("\U00000009"), + "Tau;": mkEntityVal("\U000003A4"), + "Tcaron;": mkEntityVal("\U00000164"), + "Tcedil;": mkEntityVal("\U00000162"), + "Tcy;": mkEntityVal("\U00000422"), + "Tfr;": mkEntityVal("\U0001D517"), + "Therefore;": mkEntityVal("\U00002234"), + "Theta;": mkEntityVal("\U00000398"), + "ThinSpace;": mkEntityVal("\U00002009"), + "Tilde;": mkEntityVal("\U0000223C"), + "TildeEqual;": mkEntityVal("\U00002243"), + "TildeFullEqual;": mkEntityVal("\U00002245"), + "TildeTilde;": mkEntityVal("\U00002248"), + "Topf;": mkEntityVal("\U0001D54B"), + "TripleDot;": mkEntityVal("\U000020DB"), + "Tscr;": mkEntityVal("\U0001D4AF"), + "Tstrok;": mkEntityVal("\U00000166"), + "Uacute;": mkEntityVal("\U000000DA"), + "Uarr;": mkEntityVal("\U0000219F"), + "Uarrocir;": mkEntityVal("\U00002949"), + "Ubrcy;": mkEntityVal("\U0000040E"), + "Ubreve;": mkEntityVal("\U0000016C"), + "Ucirc;": mkEntityVal("\U000000DB"), + "Ucy;": mkEntityVal("\U00000423"), + "Udblac;": mkEntityVal("\U00000170"), + "Ufr;": mkEntityVal("\U0001D518"), + "Ugrave;": mkEntityVal("\U000000D9"), + "Umacr;": mkEntityVal("\U0000016A"), + "UnderBar;": mkEntityVal("\U0000005F"), + "UnderBrace;": mkEntityVal("\U000023DF"), + "UnderBracket;": mkEntityVal("\U000023B5"), + "UnderParenthesis;": mkEntityVal("\U000023DD"), + "Union;": mkEntityVal("\U000022C3"), + "UnionPlus;": mkEntityVal("\U0000228E"), + "Uogon;": mkEntityVal("\U00000172"), + "Uopf;": mkEntityVal("\U0001D54C"), + "UpArrow;": mkEntityVal("\U00002191"), + "UpArrowBar;": mkEntityVal("\U00002912"), + "UpArrowDownArrow;": mkEntityVal("\U000021C5"), + "UpDownArrow;": mkEntityVal("\U00002195"), + "UpEquilibrium;": mkEntityVal("\U0000296E"), + "UpTee;": mkEntityVal("\U000022A5"), + "UpTeeArrow;": mkEntityVal("\U000021A5"), + "Uparrow;": mkEntityVal("\U000021D1"), + "Updownarrow;": mkEntityVal("\U000021D5"), + "UpperLeftArrow;": mkEntityVal("\U00002196"), + "UpperRightArrow;": mkEntityVal("\U00002197"), + "Upsi;": mkEntityVal("\U000003D2"), + "Upsilon;": mkEntityVal("\U000003A5"), + "Uring;": mkEntityVal("\U0000016E"), + "Uscr;": mkEntityVal("\U0001D4B0"), + "Utilde;": mkEntityVal("\U00000168"), + "Uuml;": mkEntityVal("\U000000DC"), + "VDash;": mkEntityVal("\U000022AB"), + "Vbar;": mkEntityVal("\U00002AEB"), + "Vcy;": mkEntityVal("\U00000412"), + "Vdash;": mkEntityVal("\U000022A9"), + "Vdashl;": mkEntityVal("\U00002AE6"), + "Vee;": mkEntityVal("\U000022C1"), + "Verbar;": mkEntityVal("\U00002016"), + "Vert;": mkEntityVal("\U00002016"), + "VerticalBar;": mkEntityVal("\U00002223"), + "VerticalLine;": mkEntityVal("\U0000007C"), + "VerticalSeparator;": mkEntityVal("\U00002758"), + "VerticalTilde;": mkEntityVal("\U00002240"), + "VeryThinSpace;": mkEntityVal("\U0000200A"), + "Vfr;": mkEntityVal("\U0001D519"), + "Vopf;": mkEntityVal("\U0001D54D"), + "Vscr;": mkEntityVal("\U0001D4B1"), + "Vvdash;": mkEntityVal("\U000022AA"), + "Wcirc;": mkEntityVal("\U00000174"), + "Wedge;": mkEntityVal("\U000022C0"), + "Wfr;": mkEntityVal("\U0001D51A"), + "Wopf;": mkEntityVal("\U0001D54E"), + "Wscr;": mkEntityVal("\U0001D4B2"), + "Xfr;": mkEntityVal("\U0001D51B"), + "Xi;": mkEntityVal("\U0000039E"), + "Xopf;": mkEntityVal("\U0001D54F"), + "Xscr;": mkEntityVal("\U0001D4B3"), + "YAcy;": mkEntityVal("\U0000042F"), + "YIcy;": mkEntityVal("\U00000407"), + "YUcy;": mkEntityVal("\U0000042E"), + "Yacute;": mkEntityVal("\U000000DD"), + "Ycirc;": mkEntityVal("\U00000176"), + "Ycy;": mkEntityVal("\U0000042B"), + "Yfr;": mkEntityVal("\U0001D51C"), + "Yopf;": mkEntityVal("\U0001D550"), + "Yscr;": mkEntityVal("\U0001D4B4"), + "Yuml;": mkEntityVal("\U00000178"), + "ZHcy;": mkEntityVal("\U00000416"), + "Zacute;": mkEntityVal("\U00000179"), + "Zcaron;": mkEntityVal("\U0000017D"), + "Zcy;": mkEntityVal("\U00000417"), + "Zdot;": mkEntityVal("\U0000017B"), + "ZeroWidthSpace;": mkEntityVal("\U0000200B"), + "Zeta;": mkEntityVal("\U00000396"), + "Zfr;": mkEntityVal("\U00002128"), + "Zopf;": mkEntityVal("\U00002124"), + "Zscr;": mkEntityVal("\U0001D4B5"), + "aacute;": mkEntityVal("\U000000E1"), + "abreve;": mkEntityVal("\U00000103"), + "ac;": mkEntityVal("\U0000223E"), + "acd;": mkEntityVal("\U0000223F"), + "acirc;": mkEntityVal("\U000000E2"), + "acute;": mkEntityVal("\U000000B4"), + "acy;": mkEntityVal("\U00000430"), + "aelig;": mkEntityVal("\U000000E6"), + "af;": mkEntityVal("\U00002061"), + "afr;": mkEntityVal("\U0001D51E"), + "agrave;": mkEntityVal("\U000000E0"), + "alefsym;": mkEntityVal("\U00002135"), + "aleph;": mkEntityVal("\U00002135"), + "alpha;": mkEntityVal("\U000003B1"), + "amacr;": mkEntityVal("\U00000101"), + "amalg;": mkEntityVal("\U00002A3F"), + "amp;": mkEntityVal("\U00000026"), + "and;": mkEntityVal("\U00002227"), + "andand;": mkEntityVal("\U00002A55"), + "andd;": mkEntityVal("\U00002A5C"), + "andslope;": mkEntityVal("\U00002A58"), + "andv;": mkEntityVal("\U00002A5A"), + "ang;": mkEntityVal("\U00002220"), + "ange;": mkEntityVal("\U000029A4"), + "angle;": mkEntityVal("\U00002220"), + "angmsd;": mkEntityVal("\U00002221"), + "angmsdaa;": mkEntityVal("\U000029A8"), + "angmsdab;": mkEntityVal("\U000029A9"), + "angmsdac;": mkEntityVal("\U000029AA"), + "angmsdad;": mkEntityVal("\U000029AB"), + "angmsdae;": mkEntityVal("\U000029AC"), + "angmsdaf;": mkEntityVal("\U000029AD"), + "angmsdag;": mkEntityVal("\U000029AE"), + "angmsdah;": mkEntityVal("\U000029AF"), + "angrt;": mkEntityVal("\U0000221F"), + "angrtvb;": mkEntityVal("\U000022BE"), + "angrtvbd;": mkEntityVal("\U0000299D"), + "angsph;": mkEntityVal("\U00002222"), + "angst;": mkEntityVal("\U000000C5"), + "angzarr;": mkEntityVal("\U0000237C"), + "aogon;": mkEntityVal("\U00000105"), + "aopf;": mkEntityVal("\U0001D552"), + "ap;": mkEntityVal("\U00002248"), + "apE;": mkEntityVal("\U00002A70"), + "apacir;": mkEntityVal("\U00002A6F"), + "ape;": mkEntityVal("\U0000224A"), + "apid;": mkEntityVal("\U0000224B"), + "apos;": mkEntityVal("\U00000027"), + "approx;": mkEntityVal("\U00002248"), + "approxeq;": mkEntityVal("\U0000224A"), + "aring;": mkEntityVal("\U000000E5"), + "ascr;": mkEntityVal("\U0001D4B6"), + "ast;": mkEntityVal("\U0000002A"), + "asymp;": mkEntityVal("\U00002248"), + "asympeq;": mkEntityVal("\U0000224D"), + "atilde;": mkEntityVal("\U000000E3"), + "auml;": mkEntityVal("\U000000E4"), + "awconint;": mkEntityVal("\U00002233"), + "awint;": mkEntityVal("\U00002A11"), + "bNot;": mkEntityVal("\U00002AED"), + "backcong;": mkEntityVal("\U0000224C"), + "backepsilon;": mkEntityVal("\U000003F6"), + "backprime;": mkEntityVal("\U00002035"), + "backsim;": mkEntityVal("\U0000223D"), + "backsimeq;": mkEntityVal("\U000022CD"), + "barvee;": mkEntityVal("\U000022BD"), + "barwed;": mkEntityVal("\U00002305"), + "barwedge;": mkEntityVal("\U00002305"), + "bbrk;": mkEntityVal("\U000023B5"), + "bbrktbrk;": mkEntityVal("\U000023B6"), + "bcong;": mkEntityVal("\U0000224C"), + "bcy;": mkEntityVal("\U00000431"), + "bdquo;": mkEntityVal("\U0000201E"), + "becaus;": mkEntityVal("\U00002235"), + "because;": mkEntityVal("\U00002235"), + "bemptyv;": mkEntityVal("\U000029B0"), + "bepsi;": mkEntityVal("\U000003F6"), + "bernou;": mkEntityVal("\U0000212C"), + "beta;": mkEntityVal("\U000003B2"), + "beth;": mkEntityVal("\U00002136"), + "between;": mkEntityVal("\U0000226C"), + "bfr;": mkEntityVal("\U0001D51F"), + "bigcap;": mkEntityVal("\U000022C2"), + "bigcirc;": mkEntityVal("\U000025EF"), + "bigcup;": mkEntityVal("\U000022C3"), + "bigodot;": mkEntityVal("\U00002A00"), + "bigoplus;": mkEntityVal("\U00002A01"), + "bigotimes;": mkEntityVal("\U00002A02"), + "bigsqcup;": mkEntityVal("\U00002A06"), + "bigstar;": mkEntityVal("\U00002605"), + "bigtriangledown;": mkEntityVal("\U000025BD"), + "bigtriangleup;": mkEntityVal("\U000025B3"), + "biguplus;": mkEntityVal("\U00002A04"), + "bigvee;": mkEntityVal("\U000022C1"), + "bigwedge;": mkEntityVal("\U000022C0"), + "bkarow;": mkEntityVal("\U0000290D"), + "blacklozenge;": mkEntityVal("\U000029EB"), + "blacksquare;": mkEntityVal("\U000025AA"), + "blacktriangle;": mkEntityVal("\U000025B4"), + "blacktriangledown;": mkEntityVal("\U000025BE"), + "blacktriangleleft;": mkEntityVal("\U000025C2"), + "blacktriangleright;": mkEntityVal("\U000025B8"), + "blank;": mkEntityVal("\U00002423"), + "blk12;": mkEntityVal("\U00002592"), + "blk14;": mkEntityVal("\U00002591"), + "blk34;": mkEntityVal("\U00002593"), + "block;": mkEntityVal("\U00002588"), + "bnot;": mkEntityVal("\U00002310"), + "bopf;": mkEntityVal("\U0001D553"), + "bot;": mkEntityVal("\U000022A5"), + "bottom;": mkEntityVal("\U000022A5"), + "bowtie;": mkEntityVal("\U000022C8"), + "boxDL;": mkEntityVal("\U00002557"), + "boxDR;": mkEntityVal("\U00002554"), + "boxDl;": mkEntityVal("\U00002556"), + "boxDr;": mkEntityVal("\U00002553"), + "boxH;": mkEntityVal("\U00002550"), + "boxHD;": mkEntityVal("\U00002566"), + "boxHU;": mkEntityVal("\U00002569"), + "boxHd;": mkEntityVal("\U00002564"), + "boxHu;": mkEntityVal("\U00002567"), + "boxUL;": mkEntityVal("\U0000255D"), + "boxUR;": mkEntityVal("\U0000255A"), + "boxUl;": mkEntityVal("\U0000255C"), + "boxUr;": mkEntityVal("\U00002559"), + "boxV;": mkEntityVal("\U00002551"), + "boxVH;": mkEntityVal("\U0000256C"), + "boxVL;": mkEntityVal("\U00002563"), + "boxVR;": mkEntityVal("\U00002560"), + "boxVh;": mkEntityVal("\U0000256B"), + "boxVl;": mkEntityVal("\U00002562"), + "boxVr;": mkEntityVal("\U0000255F"), + "boxbox;": mkEntityVal("\U000029C9"), + "boxdL;": mkEntityVal("\U00002555"), + "boxdR;": mkEntityVal("\U00002552"), + "boxdl;": mkEntityVal("\U00002510"), + "boxdr;": mkEntityVal("\U0000250C"), + "boxh;": mkEntityVal("\U00002500"), + "boxhD;": mkEntityVal("\U00002565"), + "boxhU;": mkEntityVal("\U00002568"), + "boxhd;": mkEntityVal("\U0000252C"), + "boxhu;": mkEntityVal("\U00002534"), + "boxminus;": mkEntityVal("\U0000229F"), + "boxplus;": mkEntityVal("\U0000229E"), + "boxtimes;": mkEntityVal("\U000022A0"), + "boxuL;": mkEntityVal("\U0000255B"), + "boxuR;": mkEntityVal("\U00002558"), + "boxul;": mkEntityVal("\U00002518"), + "boxur;": mkEntityVal("\U00002514"), + "boxv;": mkEntityVal("\U00002502"), + "boxvH;": mkEntityVal("\U0000256A"), + "boxvL;": mkEntityVal("\U00002561"), + "boxvR;": mkEntityVal("\U0000255E"), + "boxvh;": mkEntityVal("\U0000253C"), + "boxvl;": mkEntityVal("\U00002524"), + "boxvr;": mkEntityVal("\U0000251C"), + "bprime;": mkEntityVal("\U00002035"), + "breve;": mkEntityVal("\U000002D8"), + "brvbar;": mkEntityVal("\U000000A6"), + "bscr;": mkEntityVal("\U0001D4B7"), + "bsemi;": mkEntityVal("\U0000204F"), + "bsim;": mkEntityVal("\U0000223D"), + "bsime;": mkEntityVal("\U000022CD"), + "bsol;": mkEntityVal("\U0000005C"), + "bsolb;": mkEntityVal("\U000029C5"), + "bsolhsub;": mkEntityVal("\U000027C8"), + "bull;": mkEntityVal("\U00002022"), + "bullet;": mkEntityVal("\U00002022"), + "bump;": mkEntityVal("\U0000224E"), + "bumpE;": mkEntityVal("\U00002AAE"), + "bumpe;": mkEntityVal("\U0000224F"), + "bumpeq;": mkEntityVal("\U0000224F"), + "cacute;": mkEntityVal("\U00000107"), + "cap;": mkEntityVal("\U00002229"), + "capand;": mkEntityVal("\U00002A44"), + "capbrcup;": mkEntityVal("\U00002A49"), + "capcap;": mkEntityVal("\U00002A4B"), + "capcup;": mkEntityVal("\U00002A47"), + "capdot;": mkEntityVal("\U00002A40"), + "caret;": mkEntityVal("\U00002041"), + "caron;": mkEntityVal("\U000002C7"), + "ccaps;": mkEntityVal("\U00002A4D"), + "ccaron;": mkEntityVal("\U0000010D"), + "ccedil;": mkEntityVal("\U000000E7"), + "ccirc;": mkEntityVal("\U00000109"), + "ccups;": mkEntityVal("\U00002A4C"), + "ccupssm;": mkEntityVal("\U00002A50"), + "cdot;": mkEntityVal("\U0000010B"), + "cedil;": mkEntityVal("\U000000B8"), + "cemptyv;": mkEntityVal("\U000029B2"), + "cent;": mkEntityVal("\U000000A2"), + "centerdot;": mkEntityVal("\U000000B7"), + "cfr;": mkEntityVal("\U0001D520"), + "chcy;": mkEntityVal("\U00000447"), + "check;": mkEntityVal("\U00002713"), + "checkmark;": mkEntityVal("\U00002713"), + "chi;": mkEntityVal("\U000003C7"), + "cir;": mkEntityVal("\U000025CB"), + "cirE;": mkEntityVal("\U000029C3"), + "circ;": mkEntityVal("\U000002C6"), + "circeq;": mkEntityVal("\U00002257"), + "circlearrowleft;": mkEntityVal("\U000021BA"), + "circlearrowright;": mkEntityVal("\U000021BB"), + "circledR;": mkEntityVal("\U000000AE"), + "circledS;": mkEntityVal("\U000024C8"), + "circledast;": mkEntityVal("\U0000229B"), + "circledcirc;": mkEntityVal("\U0000229A"), + "circleddash;": mkEntityVal("\U0000229D"), + "cire;": mkEntityVal("\U00002257"), + "cirfnint;": mkEntityVal("\U00002A10"), + "cirmid;": mkEntityVal("\U00002AEF"), + "cirscir;": mkEntityVal("\U000029C2"), + "clubs;": mkEntityVal("\U00002663"), + "clubsuit;": mkEntityVal("\U00002663"), + "colon;": mkEntityVal("\U0000003A"), + "colone;": mkEntityVal("\U00002254"), + "coloneq;": mkEntityVal("\U00002254"), + "comma;": mkEntityVal("\U0000002C"), + "commat;": mkEntityVal("\U00000040"), + "comp;": mkEntityVal("\U00002201"), + "compfn;": mkEntityVal("\U00002218"), + "complement;": mkEntityVal("\U00002201"), + "complexes;": mkEntityVal("\U00002102"), + "cong;": mkEntityVal("\U00002245"), + "congdot;": mkEntityVal("\U00002A6D"), + "conint;": mkEntityVal("\U0000222E"), + "copf;": mkEntityVal("\U0001D554"), + "coprod;": mkEntityVal("\U00002210"), + "copy;": mkEntityVal("\U000000A9"), + "copysr;": mkEntityVal("\U00002117"), + "crarr;": mkEntityVal("\U000021B5"), + "cross;": mkEntityVal("\U00002717"), + "cscr;": mkEntityVal("\U0001D4B8"), + "csub;": mkEntityVal("\U00002ACF"), + "csube;": mkEntityVal("\U00002AD1"), + "csup;": mkEntityVal("\U00002AD0"), + "csupe;": mkEntityVal("\U00002AD2"), + "ctdot;": mkEntityVal("\U000022EF"), + "cudarrl;": mkEntityVal("\U00002938"), + "cudarrr;": mkEntityVal("\U00002935"), + "cuepr;": mkEntityVal("\U000022DE"), + "cuesc;": mkEntityVal("\U000022DF"), + "cularr;": mkEntityVal("\U000021B6"), + "cularrp;": mkEntityVal("\U0000293D"), + "cup;": mkEntityVal("\U0000222A"), + "cupbrcap;": mkEntityVal("\U00002A48"), + "cupcap;": mkEntityVal("\U00002A46"), + "cupcup;": mkEntityVal("\U00002A4A"), + "cupdot;": mkEntityVal("\U0000228D"), + "cupor;": mkEntityVal("\U00002A45"), + "curarr;": mkEntityVal("\U000021B7"), + "curarrm;": mkEntityVal("\U0000293C"), + "curlyeqprec;": mkEntityVal("\U000022DE"), + "curlyeqsucc;": mkEntityVal("\U000022DF"), + "curlyvee;": mkEntityVal("\U000022CE"), + "curlywedge;": mkEntityVal("\U000022CF"), + "curren;": mkEntityVal("\U000000A4"), + "curvearrowleft;": mkEntityVal("\U000021B6"), + "curvearrowright;": mkEntityVal("\U000021B7"), + "cuvee;": mkEntityVal("\U000022CE"), + "cuwed;": mkEntityVal("\U000022CF"), + "cwconint;": mkEntityVal("\U00002232"), + "cwint;": mkEntityVal("\U00002231"), + "cylcty;": mkEntityVal("\U0000232D"), + "dArr;": mkEntityVal("\U000021D3"), + "dHar;": mkEntityVal("\U00002965"), + "dagger;": mkEntityVal("\U00002020"), + "daleth;": mkEntityVal("\U00002138"), + "darr;": mkEntityVal("\U00002193"), + "dash;": mkEntityVal("\U00002010"), + "dashv;": mkEntityVal("\U000022A3"), + "dbkarow;": mkEntityVal("\U0000290F"), + "dblac;": mkEntityVal("\U000002DD"), + "dcaron;": mkEntityVal("\U0000010F"), + "dcy;": mkEntityVal("\U00000434"), + "dd;": mkEntityVal("\U00002146"), + "ddagger;": mkEntityVal("\U00002021"), + "ddarr;": mkEntityVal("\U000021CA"), + "ddotseq;": mkEntityVal("\U00002A77"), + "deg;": mkEntityVal("\U000000B0"), + "delta;": mkEntityVal("\U000003B4"), + "demptyv;": mkEntityVal("\U000029B1"), + "dfisht;": mkEntityVal("\U0000297F"), + "dfr;": mkEntityVal("\U0001D521"), + "dharl;": mkEntityVal("\U000021C3"), + "dharr;": mkEntityVal("\U000021C2"), + "diam;": mkEntityVal("\U000022C4"), + "diamond;": mkEntityVal("\U000022C4"), + "diamondsuit;": mkEntityVal("\U00002666"), + "diams;": mkEntityVal("\U00002666"), + "die;": mkEntityVal("\U000000A8"), + "digamma;": mkEntityVal("\U000003DD"), + "disin;": mkEntityVal("\U000022F2"), + "div;": mkEntityVal("\U000000F7"), + "divide;": mkEntityVal("\U000000F7"), + "divideontimes;": mkEntityVal("\U000022C7"), + "divonx;": mkEntityVal("\U000022C7"), + "djcy;": mkEntityVal("\U00000452"), + "dlcorn;": mkEntityVal("\U0000231E"), + "dlcrop;": mkEntityVal("\U0000230D"), + "dollar;": mkEntityVal("\U00000024"), + "dopf;": mkEntityVal("\U0001D555"), + "dot;": mkEntityVal("\U000002D9"), + "doteq;": mkEntityVal("\U00002250"), + "doteqdot;": mkEntityVal("\U00002251"), + "dotminus;": mkEntityVal("\U00002238"), + "dotplus;": mkEntityVal("\U00002214"), + "dotsquare;": mkEntityVal("\U000022A1"), + "doublebarwedge;": mkEntityVal("\U00002306"), + "downarrow;": mkEntityVal("\U00002193"), + "downdownarrows;": mkEntityVal("\U000021CA"), + "downharpoonleft;": mkEntityVal("\U000021C3"), + "downharpoonright;": mkEntityVal("\U000021C2"), + "drbkarow;": mkEntityVal("\U00002910"), + "drcorn;": mkEntityVal("\U0000231F"), + "drcrop;": mkEntityVal("\U0000230C"), + "dscr;": mkEntityVal("\U0001D4B9"), + "dscy;": mkEntityVal("\U00000455"), + "dsol;": mkEntityVal("\U000029F6"), + "dstrok;": mkEntityVal("\U00000111"), + "dtdot;": mkEntityVal("\U000022F1"), + "dtri;": mkEntityVal("\U000025BF"), + "dtrif;": mkEntityVal("\U000025BE"), + "duarr;": mkEntityVal("\U000021F5"), + "duhar;": mkEntityVal("\U0000296F"), + "dwangle;": mkEntityVal("\U000029A6"), + "dzcy;": mkEntityVal("\U0000045F"), + "dzigrarr;": mkEntityVal("\U000027FF"), + "eDDot;": mkEntityVal("\U00002A77"), + "eDot;": mkEntityVal("\U00002251"), + "eacute;": mkEntityVal("\U000000E9"), + "easter;": mkEntityVal("\U00002A6E"), + "ecaron;": mkEntityVal("\U0000011B"), + "ecir;": mkEntityVal("\U00002256"), + "ecirc;": mkEntityVal("\U000000EA"), + "ecolon;": mkEntityVal("\U00002255"), + "ecy;": mkEntityVal("\U0000044D"), + "edot;": mkEntityVal("\U00000117"), + "ee;": mkEntityVal("\U00002147"), + "efDot;": mkEntityVal("\U00002252"), + "efr;": mkEntityVal("\U0001D522"), + "eg;": mkEntityVal("\U00002A9A"), + "egrave;": mkEntityVal("\U000000E8"), + "egs;": mkEntityVal("\U00002A96"), + "egsdot;": mkEntityVal("\U00002A98"), + "el;": mkEntityVal("\U00002A99"), + "elinters;": mkEntityVal("\U000023E7"), + "ell;": mkEntityVal("\U00002113"), + "els;": mkEntityVal("\U00002A95"), + "elsdot;": mkEntityVal("\U00002A97"), + "emacr;": mkEntityVal("\U00000113"), + "empty;": mkEntityVal("\U00002205"), + "emptyset;": mkEntityVal("\U00002205"), + "emptyv;": mkEntityVal("\U00002205"), + "emsp;": mkEntityVal("\U00002003"), + "emsp13;": mkEntityVal("\U00002004"), + "emsp14;": mkEntityVal("\U00002005"), + "eng;": mkEntityVal("\U0000014B"), + "ensp;": mkEntityVal("\U00002002"), + "eogon;": mkEntityVal("\U00000119"), + "eopf;": mkEntityVal("\U0001D556"), + "epar;": mkEntityVal("\U000022D5"), + "eparsl;": mkEntityVal("\U000029E3"), + "eplus;": mkEntityVal("\U00002A71"), + "epsi;": mkEntityVal("\U000003B5"), + "epsilon;": mkEntityVal("\U000003B5"), + "epsiv;": mkEntityVal("\U000003F5"), + "eqcirc;": mkEntityVal("\U00002256"), + "eqcolon;": mkEntityVal("\U00002255"), + "eqsim;": mkEntityVal("\U00002242"), + "eqslantgtr;": mkEntityVal("\U00002A96"), + "eqslantless;": mkEntityVal("\U00002A95"), + "equals;": mkEntityVal("\U0000003D"), + "equest;": mkEntityVal("\U0000225F"), + "equiv;": mkEntityVal("\U00002261"), + "equivDD;": mkEntityVal("\U00002A78"), + "eqvparsl;": mkEntityVal("\U000029E5"), + "erDot;": mkEntityVal("\U00002253"), + "erarr;": mkEntityVal("\U00002971"), + "escr;": mkEntityVal("\U0000212F"), + "esdot;": mkEntityVal("\U00002250"), + "esim;": mkEntityVal("\U00002242"), + "eta;": mkEntityVal("\U000003B7"), + "eth;": mkEntityVal("\U000000F0"), + "euml;": mkEntityVal("\U000000EB"), + "euro;": mkEntityVal("\U000020AC"), + "excl;": mkEntityVal("\U00000021"), + "exist;": mkEntityVal("\U00002203"), + "expectation;": mkEntityVal("\U00002130"), + "exponentiale;": mkEntityVal("\U00002147"), + "fallingdotseq;": mkEntityVal("\U00002252"), + "fcy;": mkEntityVal("\U00000444"), + "female;": mkEntityVal("\U00002640"), + "ffilig;": mkEntityVal("\U0000FB03"), + "fflig;": mkEntityVal("\U0000FB00"), + "ffllig;": mkEntityVal("\U0000FB04"), + "ffr;": mkEntityVal("\U0001D523"), + "filig;": mkEntityVal("\U0000FB01"), + "flat;": mkEntityVal("\U0000266D"), + "fllig;": mkEntityVal("\U0000FB02"), + "fltns;": mkEntityVal("\U000025B1"), + "fnof;": mkEntityVal("\U00000192"), + "fopf;": mkEntityVal("\U0001D557"), + "forall;": mkEntityVal("\U00002200"), + "fork;": mkEntityVal("\U000022D4"), + "forkv;": mkEntityVal("\U00002AD9"), + "fpartint;": mkEntityVal("\U00002A0D"), + "frac12;": mkEntityVal("\U000000BD"), + "frac13;": mkEntityVal("\U00002153"), + "frac14;": mkEntityVal("\U000000BC"), + "frac15;": mkEntityVal("\U00002155"), + "frac16;": mkEntityVal("\U00002159"), + "frac18;": mkEntityVal("\U0000215B"), + "frac23;": mkEntityVal("\U00002154"), + "frac25;": mkEntityVal("\U00002156"), + "frac34;": mkEntityVal("\U000000BE"), + "frac35;": mkEntityVal("\U00002157"), + "frac38;": mkEntityVal("\U0000215C"), + "frac45;": mkEntityVal("\U00002158"), + "frac56;": mkEntityVal("\U0000215A"), + "frac58;": mkEntityVal("\U0000215D"), + "frac78;": mkEntityVal("\U0000215E"), + "frasl;": mkEntityVal("\U00002044"), + "frown;": mkEntityVal("\U00002322"), + "fscr;": mkEntityVal("\U0001D4BB"), + "gE;": mkEntityVal("\U00002267"), + "gEl;": mkEntityVal("\U00002A8C"), + "gacute;": mkEntityVal("\U000001F5"), + "gamma;": mkEntityVal("\U000003B3"), + "gammad;": mkEntityVal("\U000003DD"), + "gap;": mkEntityVal("\U00002A86"), + "gbreve;": mkEntityVal("\U0000011F"), + "gcirc;": mkEntityVal("\U0000011D"), + "gcy;": mkEntityVal("\U00000433"), + "gdot;": mkEntityVal("\U00000121"), + "ge;": mkEntityVal("\U00002265"), + "gel;": mkEntityVal("\U000022DB"), + "geq;": mkEntityVal("\U00002265"), + "geqq;": mkEntityVal("\U00002267"), + "geqslant;": mkEntityVal("\U00002A7E"), + "ges;": mkEntityVal("\U00002A7E"), + "gescc;": mkEntityVal("\U00002AA9"), + "gesdot;": mkEntityVal("\U00002A80"), + "gesdoto;": mkEntityVal("\U00002A82"), + "gesdotol;": mkEntityVal("\U00002A84"), + "gesles;": mkEntityVal("\U00002A94"), + "gfr;": mkEntityVal("\U0001D524"), + "gg;": mkEntityVal("\U0000226B"), + "ggg;": mkEntityVal("\U000022D9"), + "gimel;": mkEntityVal("\U00002137"), + "gjcy;": mkEntityVal("\U00000453"), + "gl;": mkEntityVal("\U00002277"), + "glE;": mkEntityVal("\U00002A92"), + "gla;": mkEntityVal("\U00002AA5"), + "glj;": mkEntityVal("\U00002AA4"), + "gnE;": mkEntityVal("\U00002269"), + "gnap;": mkEntityVal("\U00002A8A"), + "gnapprox;": mkEntityVal("\U00002A8A"), + "gne;": mkEntityVal("\U00002A88"), + "gneq;": mkEntityVal("\U00002A88"), + "gneqq;": mkEntityVal("\U00002269"), + "gnsim;": mkEntityVal("\U000022E7"), + "gopf;": mkEntityVal("\U0001D558"), + "grave;": mkEntityVal("\U00000060"), + "gscr;": mkEntityVal("\U0000210A"), + "gsim;": mkEntityVal("\U00002273"), + "gsime;": mkEntityVal("\U00002A8E"), + "gsiml;": mkEntityVal("\U00002A90"), + "gt;": mkEntityVal("\U0000003E"), + "gtcc;": mkEntityVal("\U00002AA7"), + "gtcir;": mkEntityVal("\U00002A7A"), + "gtdot;": mkEntityVal("\U000022D7"), + "gtlPar;": mkEntityVal("\U00002995"), + "gtquest;": mkEntityVal("\U00002A7C"), + "gtrapprox;": mkEntityVal("\U00002A86"), + "gtrarr;": mkEntityVal("\U00002978"), + "gtrdot;": mkEntityVal("\U000022D7"), + "gtreqless;": mkEntityVal("\U000022DB"), + "gtreqqless;": mkEntityVal("\U00002A8C"), + "gtrless;": mkEntityVal("\U00002277"), + "gtrsim;": mkEntityVal("\U00002273"), + "hArr;": mkEntityVal("\U000021D4"), + "hairsp;": mkEntityVal("\U0000200A"), + "half;": mkEntityVal("\U000000BD"), + "hamilt;": mkEntityVal("\U0000210B"), + "hardcy;": mkEntityVal("\U0000044A"), + "harr;": mkEntityVal("\U00002194"), + "harrcir;": mkEntityVal("\U00002948"), + "harrw;": mkEntityVal("\U000021AD"), + "hbar;": mkEntityVal("\U0000210F"), + "hcirc;": mkEntityVal("\U00000125"), + "hearts;": mkEntityVal("\U00002665"), + "heartsuit;": mkEntityVal("\U00002665"), + "hellip;": mkEntityVal("\U00002026"), + "hercon;": mkEntityVal("\U000022B9"), + "hfr;": mkEntityVal("\U0001D525"), + "hksearow;": mkEntityVal("\U00002925"), + "hkswarow;": mkEntityVal("\U00002926"), + "hoarr;": mkEntityVal("\U000021FF"), + "homtht;": mkEntityVal("\U0000223B"), + "hookleftarrow;": mkEntityVal("\U000021A9"), + "hookrightarrow;": mkEntityVal("\U000021AA"), + "hopf;": mkEntityVal("\U0001D559"), + "horbar;": mkEntityVal("\U00002015"), + "hscr;": mkEntityVal("\U0001D4BD"), + "hslash;": mkEntityVal("\U0000210F"), + "hstrok;": mkEntityVal("\U00000127"), + "hybull;": mkEntityVal("\U00002043"), + "hyphen;": mkEntityVal("\U00002010"), + "iacute;": mkEntityVal("\U000000ED"), + "ic;": mkEntityVal("\U00002063"), + "icirc;": mkEntityVal("\U000000EE"), + "icy;": mkEntityVal("\U00000438"), + "iecy;": mkEntityVal("\U00000435"), + "iexcl;": mkEntityVal("\U000000A1"), + "iff;": mkEntityVal("\U000021D4"), + "ifr;": mkEntityVal("\U0001D526"), + "igrave;": mkEntityVal("\U000000EC"), + "ii;": mkEntityVal("\U00002148"), + "iiiint;": mkEntityVal("\U00002A0C"), + "iiint;": mkEntityVal("\U0000222D"), + "iinfin;": mkEntityVal("\U000029DC"), + "iiota;": mkEntityVal("\U00002129"), + "ijlig;": mkEntityVal("\U00000133"), + "imacr;": mkEntityVal("\U0000012B"), + "image;": mkEntityVal("\U00002111"), + "imagline;": mkEntityVal("\U00002110"), + "imagpart;": mkEntityVal("\U00002111"), + "imath;": mkEntityVal("\U00000131"), + "imof;": mkEntityVal("\U000022B7"), + "imped;": mkEntityVal("\U000001B5"), + "in;": mkEntityVal("\U00002208"), + "incare;": mkEntityVal("\U00002105"), + "infin;": mkEntityVal("\U0000221E"), + "infintie;": mkEntityVal("\U000029DD"), + "inodot;": mkEntityVal("\U00000131"), + "int;": mkEntityVal("\U0000222B"), + "intcal;": mkEntityVal("\U000022BA"), + "integers;": mkEntityVal("\U00002124"), + "intercal;": mkEntityVal("\U000022BA"), + "intlarhk;": mkEntityVal("\U00002A17"), + "intprod;": mkEntityVal("\U00002A3C"), + "iocy;": mkEntityVal("\U00000451"), + "iogon;": mkEntityVal("\U0000012F"), + "iopf;": mkEntityVal("\U0001D55A"), + "iota;": mkEntityVal("\U000003B9"), + "iprod;": mkEntityVal("\U00002A3C"), + "iquest;": mkEntityVal("\U000000BF"), + "iscr;": mkEntityVal("\U0001D4BE"), + "isin;": mkEntityVal("\U00002208"), + "isinE;": mkEntityVal("\U000022F9"), + "isindot;": mkEntityVal("\U000022F5"), + "isins;": mkEntityVal("\U000022F4"), + "isinsv;": mkEntityVal("\U000022F3"), + "isinv;": mkEntityVal("\U00002208"), + "it;": mkEntityVal("\U00002062"), + "itilde;": mkEntityVal("\U00000129"), + "iukcy;": mkEntityVal("\U00000456"), + "iuml;": mkEntityVal("\U000000EF"), + "jcirc;": mkEntityVal("\U00000135"), + "jcy;": mkEntityVal("\U00000439"), + "jfr;": mkEntityVal("\U0001D527"), + "jmath;": mkEntityVal("\U00000237"), + "jopf;": mkEntityVal("\U0001D55B"), + "jscr;": mkEntityVal("\U0001D4BF"), + "jsercy;": mkEntityVal("\U00000458"), + "jukcy;": mkEntityVal("\U00000454"), + "kappa;": mkEntityVal("\U000003BA"), + "kappav;": mkEntityVal("\U000003F0"), + "kcedil;": mkEntityVal("\U00000137"), + "kcy;": mkEntityVal("\U0000043A"), + "kfr;": mkEntityVal("\U0001D528"), + "kgreen;": mkEntityVal("\U00000138"), + "khcy;": mkEntityVal("\U00000445"), + "kjcy;": mkEntityVal("\U0000045C"), + "kopf;": mkEntityVal("\U0001D55C"), + "kscr;": mkEntityVal("\U0001D4C0"), + "lAarr;": mkEntityVal("\U000021DA"), + "lArr;": mkEntityVal("\U000021D0"), + "lAtail;": mkEntityVal("\U0000291B"), + "lBarr;": mkEntityVal("\U0000290E"), + "lE;": mkEntityVal("\U00002266"), + "lEg;": mkEntityVal("\U00002A8B"), + "lHar;": mkEntityVal("\U00002962"), + "lacute;": mkEntityVal("\U0000013A"), + "laemptyv;": mkEntityVal("\U000029B4"), + "lagran;": mkEntityVal("\U00002112"), + "lambda;": mkEntityVal("\U000003BB"), + "lang;": mkEntityVal("\U000027E8"), + "langd;": mkEntityVal("\U00002991"), + "langle;": mkEntityVal("\U000027E8"), + "lap;": mkEntityVal("\U00002A85"), + "laquo;": mkEntityVal("\U000000AB"), + "larr;": mkEntityVal("\U00002190"), + "larrb;": mkEntityVal("\U000021E4"), + "larrbfs;": mkEntityVal("\U0000291F"), + "larrfs;": mkEntityVal("\U0000291D"), + "larrhk;": mkEntityVal("\U000021A9"), + "larrlp;": mkEntityVal("\U000021AB"), + "larrpl;": mkEntityVal("\U00002939"), + "larrsim;": mkEntityVal("\U00002973"), + "larrtl;": mkEntityVal("\U000021A2"), + "lat;": mkEntityVal("\U00002AAB"), + "latail;": mkEntityVal("\U00002919"), + "late;": mkEntityVal("\U00002AAD"), + "lbarr;": mkEntityVal("\U0000290C"), + "lbbrk;": mkEntityVal("\U00002772"), + "lbrace;": mkEntityVal("\U0000007B"), + "lbrack;": mkEntityVal("\U0000005B"), + "lbrke;": mkEntityVal("\U0000298B"), + "lbrksld;": mkEntityVal("\U0000298F"), + "lbrkslu;": mkEntityVal("\U0000298D"), + "lcaron;": mkEntityVal("\U0000013E"), + "lcedil;": mkEntityVal("\U0000013C"), + "lceil;": mkEntityVal("\U00002308"), + "lcub;": mkEntityVal("\U0000007B"), + "lcy;": mkEntityVal("\U0000043B"), + "ldca;": mkEntityVal("\U00002936"), + "ldquo;": mkEntityVal("\U0000201C"), + "ldquor;": mkEntityVal("\U0000201E"), + "ldrdhar;": mkEntityVal("\U00002967"), + "ldrushar;": mkEntityVal("\U0000294B"), + "ldsh;": mkEntityVal("\U000021B2"), + "le;": mkEntityVal("\U00002264"), + "leftarrow;": mkEntityVal("\U00002190"), + "leftarrowtail;": mkEntityVal("\U000021A2"), + "leftharpoondown;": mkEntityVal("\U000021BD"), + "leftharpoonup;": mkEntityVal("\U000021BC"), + "leftleftarrows;": mkEntityVal("\U000021C7"), + "leftrightarrow;": mkEntityVal("\U00002194"), + "leftrightarrows;": mkEntityVal("\U000021C6"), + "leftrightharpoons;": mkEntityVal("\U000021CB"), + "leftrightsquigarrow;": mkEntityVal("\U000021AD"), + "leftthreetimes;": mkEntityVal("\U000022CB"), + "leg;": mkEntityVal("\U000022DA"), + "leq;": mkEntityVal("\U00002264"), + "leqq;": mkEntityVal("\U00002266"), + "leqslant;": mkEntityVal("\U00002A7D"), + "les;": mkEntityVal("\U00002A7D"), + "lescc;": mkEntityVal("\U00002AA8"), + "lesdot;": mkEntityVal("\U00002A7F"), + "lesdoto;": mkEntityVal("\U00002A81"), + "lesdotor;": mkEntityVal("\U00002A83"), + "lesges;": mkEntityVal("\U00002A93"), + "lessapprox;": mkEntityVal("\U00002A85"), + "lessdot;": mkEntityVal("\U000022D6"), + "lesseqgtr;": mkEntityVal("\U000022DA"), + "lesseqqgtr;": mkEntityVal("\U00002A8B"), + "lessgtr;": mkEntityVal("\U00002276"), + "lesssim;": mkEntityVal("\U00002272"), + "lfisht;": mkEntityVal("\U0000297C"), + "lfloor;": mkEntityVal("\U0000230A"), + "lfr;": mkEntityVal("\U0001D529"), + "lg;": mkEntityVal("\U00002276"), + "lgE;": mkEntityVal("\U00002A91"), + "lhard;": mkEntityVal("\U000021BD"), + "lharu;": mkEntityVal("\U000021BC"), + "lharul;": mkEntityVal("\U0000296A"), + "lhblk;": mkEntityVal("\U00002584"), + "ljcy;": mkEntityVal("\U00000459"), + "ll;": mkEntityVal("\U0000226A"), + "llarr;": mkEntityVal("\U000021C7"), + "llcorner;": mkEntityVal("\U0000231E"), + "llhard;": mkEntityVal("\U0000296B"), + "lltri;": mkEntityVal("\U000025FA"), + "lmidot;": mkEntityVal("\U00000140"), + "lmoust;": mkEntityVal("\U000023B0"), + "lmoustache;": mkEntityVal("\U000023B0"), + "lnE;": mkEntityVal("\U00002268"), + "lnap;": mkEntityVal("\U00002A89"), + "lnapprox;": mkEntityVal("\U00002A89"), + "lne;": mkEntityVal("\U00002A87"), + "lneq;": mkEntityVal("\U00002A87"), + "lneqq;": mkEntityVal("\U00002268"), + "lnsim;": mkEntityVal("\U000022E6"), + "loang;": mkEntityVal("\U000027EC"), + "loarr;": mkEntityVal("\U000021FD"), + "lobrk;": mkEntityVal("\U000027E6"), + "longleftarrow;": mkEntityVal("\U000027F5"), + "longleftrightarrow;": mkEntityVal("\U000027F7"), + "longmapsto;": mkEntityVal("\U000027FC"), + "longrightarrow;": mkEntityVal("\U000027F6"), + "looparrowleft;": mkEntityVal("\U000021AB"), + "looparrowright;": mkEntityVal("\U000021AC"), + "lopar;": mkEntityVal("\U00002985"), + "lopf;": mkEntityVal("\U0001D55D"), + "loplus;": mkEntityVal("\U00002A2D"), + "lotimes;": mkEntityVal("\U00002A34"), + "lowast;": mkEntityVal("\U00002217"), + "lowbar;": mkEntityVal("\U0000005F"), + "loz;": mkEntityVal("\U000025CA"), + "lozenge;": mkEntityVal("\U000025CA"), + "lozf;": mkEntityVal("\U000029EB"), + "lpar;": mkEntityVal("\U00000028"), + "lparlt;": mkEntityVal("\U00002993"), + "lrarr;": mkEntityVal("\U000021C6"), + "lrcorner;": mkEntityVal("\U0000231F"), + "lrhar;": mkEntityVal("\U000021CB"), + "lrhard;": mkEntityVal("\U0000296D"), + "lrm;": mkEntityVal("\U0000200E"), + "lrtri;": mkEntityVal("\U000022BF"), + "lsaquo;": mkEntityVal("\U00002039"), + "lscr;": mkEntityVal("\U0001D4C1"), + "lsh;": mkEntityVal("\U000021B0"), + "lsim;": mkEntityVal("\U00002272"), + "lsime;": mkEntityVal("\U00002A8D"), + "lsimg;": mkEntityVal("\U00002A8F"), + "lsqb;": mkEntityVal("\U0000005B"), + "lsquo;": mkEntityVal("\U00002018"), + "lsquor;": mkEntityVal("\U0000201A"), + "lstrok;": mkEntityVal("\U00000142"), + "lt;": mkEntityVal("\U0000003C"), + "ltcc;": mkEntityVal("\U00002AA6"), + "ltcir;": mkEntityVal("\U00002A79"), + "ltdot;": mkEntityVal("\U000022D6"), + "lthree;": mkEntityVal("\U000022CB"), + "ltimes;": mkEntityVal("\U000022C9"), + "ltlarr;": mkEntityVal("\U00002976"), + "ltquest;": mkEntityVal("\U00002A7B"), + "ltrPar;": mkEntityVal("\U00002996"), + "ltri;": mkEntityVal("\U000025C3"), + "ltrie;": mkEntityVal("\U000022B4"), + "ltrif;": mkEntityVal("\U000025C2"), + "lurdshar;": mkEntityVal("\U0000294A"), + "luruhar;": mkEntityVal("\U00002966"), + "mDDot;": mkEntityVal("\U0000223A"), + "macr;": mkEntityVal("\U000000AF"), + "male;": mkEntityVal("\U00002642"), + "malt;": mkEntityVal("\U00002720"), + "maltese;": mkEntityVal("\U00002720"), + "map;": mkEntityVal("\U000021A6"), + "mapsto;": mkEntityVal("\U000021A6"), + "mapstodown;": mkEntityVal("\U000021A7"), + "mapstoleft;": mkEntityVal("\U000021A4"), + "mapstoup;": mkEntityVal("\U000021A5"), + "marker;": mkEntityVal("\U000025AE"), + "mcomma;": mkEntityVal("\U00002A29"), + "mcy;": mkEntityVal("\U0000043C"), + "mdash;": mkEntityVal("\U00002014"), + "measuredangle;": mkEntityVal("\U00002221"), + "mfr;": mkEntityVal("\U0001D52A"), + "mho;": mkEntityVal("\U00002127"), + "micro;": mkEntityVal("\U000000B5"), + "mid;": mkEntityVal("\U00002223"), + "midast;": mkEntityVal("\U0000002A"), + "midcir;": mkEntityVal("\U00002AF0"), + "middot;": mkEntityVal("\U000000B7"), + "minus;": mkEntityVal("\U00002212"), + "minusb;": mkEntityVal("\U0000229F"), + "minusd;": mkEntityVal("\U00002238"), + "minusdu;": mkEntityVal("\U00002A2A"), + "mlcp;": mkEntityVal("\U00002ADB"), + "mldr;": mkEntityVal("\U00002026"), + "mnplus;": mkEntityVal("\U00002213"), + "models;": mkEntityVal("\U000022A7"), + "mopf;": mkEntityVal("\U0001D55E"), + "mp;": mkEntityVal("\U00002213"), + "mscr;": mkEntityVal("\U0001D4C2"), + "mstpos;": mkEntityVal("\U0000223E"), + "mu;": mkEntityVal("\U000003BC"), + "multimap;": mkEntityVal("\U000022B8"), + "mumap;": mkEntityVal("\U000022B8"), + "nLeftarrow;": mkEntityVal("\U000021CD"), + "nLeftrightarrow;": mkEntityVal("\U000021CE"), + "nRightarrow;": mkEntityVal("\U000021CF"), + "nVDash;": mkEntityVal("\U000022AF"), + "nVdash;": mkEntityVal("\U000022AE"), + "nabla;": mkEntityVal("\U00002207"), + "nacute;": mkEntityVal("\U00000144"), + "nap;": mkEntityVal("\U00002249"), + "napos;": mkEntityVal("\U00000149"), + "napprox;": mkEntityVal("\U00002249"), + "natur;": mkEntityVal("\U0000266E"), + "natural;": mkEntityVal("\U0000266E"), + "naturals;": mkEntityVal("\U00002115"), + "nbsp;": mkEntityVal("\U000000A0"), + "ncap;": mkEntityVal("\U00002A43"), + "ncaron;": mkEntityVal("\U00000148"), + "ncedil;": mkEntityVal("\U00000146"), + "ncong;": mkEntityVal("\U00002247"), + "ncup;": mkEntityVal("\U00002A42"), + "ncy;": mkEntityVal("\U0000043D"), + "ndash;": mkEntityVal("\U00002013"), + "ne;": mkEntityVal("\U00002260"), + "neArr;": mkEntityVal("\U000021D7"), + "nearhk;": mkEntityVal("\U00002924"), + "nearr;": mkEntityVal("\U00002197"), + "nearrow;": mkEntityVal("\U00002197"), + "nequiv;": mkEntityVal("\U00002262"), + "nesear;": mkEntityVal("\U00002928"), + "nexist;": mkEntityVal("\U00002204"), + "nexists;": mkEntityVal("\U00002204"), + "nfr;": mkEntityVal("\U0001D52B"), + "nge;": mkEntityVal("\U00002271"), + "ngeq;": mkEntityVal("\U00002271"), + "ngsim;": mkEntityVal("\U00002275"), + "ngt;": mkEntityVal("\U0000226F"), + "ngtr;": mkEntityVal("\U0000226F"), + "nhArr;": mkEntityVal("\U000021CE"), + "nharr;": mkEntityVal("\U000021AE"), + "nhpar;": mkEntityVal("\U00002AF2"), + "ni;": mkEntityVal("\U0000220B"), + "nis;": mkEntityVal("\U000022FC"), + "nisd;": mkEntityVal("\U000022FA"), + "niv;": mkEntityVal("\U0000220B"), + "njcy;": mkEntityVal("\U0000045A"), + "nlArr;": mkEntityVal("\U000021CD"), + "nlarr;": mkEntityVal("\U0000219A"), + "nldr;": mkEntityVal("\U00002025"), + "nle;": mkEntityVal("\U00002270"), + "nleftarrow;": mkEntityVal("\U0000219A"), + "nleftrightarrow;": mkEntityVal("\U000021AE"), + "nleq;": mkEntityVal("\U00002270"), + "nless;": mkEntityVal("\U0000226E"), + "nlsim;": mkEntityVal("\U00002274"), + "nlt;": mkEntityVal("\U0000226E"), + "nltri;": mkEntityVal("\U000022EA"), + "nltrie;": mkEntityVal("\U000022EC"), + "nmid;": mkEntityVal("\U00002224"), + "nopf;": mkEntityVal("\U0001D55F"), + "not;": mkEntityVal("\U000000AC"), + "notin;": mkEntityVal("\U00002209"), + "notinva;": mkEntityVal("\U00002209"), + "notinvb;": mkEntityVal("\U000022F7"), + "notinvc;": mkEntityVal("\U000022F6"), + "notni;": mkEntityVal("\U0000220C"), + "notniva;": mkEntityVal("\U0000220C"), + "notnivb;": mkEntityVal("\U000022FE"), + "notnivc;": mkEntityVal("\U000022FD"), + "npar;": mkEntityVal("\U00002226"), + "nparallel;": mkEntityVal("\U00002226"), + "npolint;": mkEntityVal("\U00002A14"), + "npr;": mkEntityVal("\U00002280"), + "nprcue;": mkEntityVal("\U000022E0"), + "nprec;": mkEntityVal("\U00002280"), + "nrArr;": mkEntityVal("\U000021CF"), + "nrarr;": mkEntityVal("\U0000219B"), + "nrightarrow;": mkEntityVal("\U0000219B"), + "nrtri;": mkEntityVal("\U000022EB"), + "nrtrie;": mkEntityVal("\U000022ED"), + "nsc;": mkEntityVal("\U00002281"), + "nsccue;": mkEntityVal("\U000022E1"), + "nscr;": mkEntityVal("\U0001D4C3"), + "nshortmid;": mkEntityVal("\U00002224"), + "nshortparallel;": mkEntityVal("\U00002226"), + "nsim;": mkEntityVal("\U00002241"), + "nsime;": mkEntityVal("\U00002244"), + "nsimeq;": mkEntityVal("\U00002244"), + "nsmid;": mkEntityVal("\U00002224"), + "nspar;": mkEntityVal("\U00002226"), + "nsqsube;": mkEntityVal("\U000022E2"), + "nsqsupe;": mkEntityVal("\U000022E3"), + "nsub;": mkEntityVal("\U00002284"), + "nsube;": mkEntityVal("\U00002288"), + "nsubseteq;": mkEntityVal("\U00002288"), + "nsucc;": mkEntityVal("\U00002281"), + "nsup;": mkEntityVal("\U00002285"), + "nsupe;": mkEntityVal("\U00002289"), + "nsupseteq;": mkEntityVal("\U00002289"), + "ntgl;": mkEntityVal("\U00002279"), + "ntilde;": mkEntityVal("\U000000F1"), + "ntlg;": mkEntityVal("\U00002278"), + "ntriangleleft;": mkEntityVal("\U000022EA"), + "ntrianglelefteq;": mkEntityVal("\U000022EC"), + "ntriangleright;": mkEntityVal("\U000022EB"), + "ntrianglerighteq;": mkEntityVal("\U000022ED"), + "nu;": mkEntityVal("\U000003BD"), + "num;": mkEntityVal("\U00000023"), + "numero;": mkEntityVal("\U00002116"), + "numsp;": mkEntityVal("\U00002007"), + "nvDash;": mkEntityVal("\U000022AD"), + "nvHarr;": mkEntityVal("\U00002904"), + "nvdash;": mkEntityVal("\U000022AC"), + "nvinfin;": mkEntityVal("\U000029DE"), + "nvlArr;": mkEntityVal("\U00002902"), + "nvrArr;": mkEntityVal("\U00002903"), + "nwArr;": mkEntityVal("\U000021D6"), + "nwarhk;": mkEntityVal("\U00002923"), + "nwarr;": mkEntityVal("\U00002196"), + "nwarrow;": mkEntityVal("\U00002196"), + "nwnear;": mkEntityVal("\U00002927"), + "oS;": mkEntityVal("\U000024C8"), + "oacute;": mkEntityVal("\U000000F3"), + "oast;": mkEntityVal("\U0000229B"), + "ocir;": mkEntityVal("\U0000229A"), + "ocirc;": mkEntityVal("\U000000F4"), + "ocy;": mkEntityVal("\U0000043E"), + "odash;": mkEntityVal("\U0000229D"), + "odblac;": mkEntityVal("\U00000151"), + "odiv;": mkEntityVal("\U00002A38"), + "odot;": mkEntityVal("\U00002299"), + "odsold;": mkEntityVal("\U000029BC"), + "oelig;": mkEntityVal("\U00000153"), + "ofcir;": mkEntityVal("\U000029BF"), + "ofr;": mkEntityVal("\U0001D52C"), + "ogon;": mkEntityVal("\U000002DB"), + "ograve;": mkEntityVal("\U000000F2"), + "ogt;": mkEntityVal("\U000029C1"), + "ohbar;": mkEntityVal("\U000029B5"), + "ohm;": mkEntityVal("\U000003A9"), + "oint;": mkEntityVal("\U0000222E"), + "olarr;": mkEntityVal("\U000021BA"), + "olcir;": mkEntityVal("\U000029BE"), + "olcross;": mkEntityVal("\U000029BB"), + "oline;": mkEntityVal("\U0000203E"), + "olt;": mkEntityVal("\U000029C0"), + "omacr;": mkEntityVal("\U0000014D"), + "omega;": mkEntityVal("\U000003C9"), + "omicron;": mkEntityVal("\U000003BF"), + "omid;": mkEntityVal("\U000029B6"), + "ominus;": mkEntityVal("\U00002296"), + "oopf;": mkEntityVal("\U0001D560"), + "opar;": mkEntityVal("\U000029B7"), + "operp;": mkEntityVal("\U000029B9"), + "oplus;": mkEntityVal("\U00002295"), + "or;": mkEntityVal("\U00002228"), + "orarr;": mkEntityVal("\U000021BB"), + "ord;": mkEntityVal("\U00002A5D"), + "order;": mkEntityVal("\U00002134"), + "orderof;": mkEntityVal("\U00002134"), + "ordf;": mkEntityVal("\U000000AA"), + "ordm;": mkEntityVal("\U000000BA"), + "origof;": mkEntityVal("\U000022B6"), + "oror;": mkEntityVal("\U00002A56"), + "orslope;": mkEntityVal("\U00002A57"), + "orv;": mkEntityVal("\U00002A5B"), + "oscr;": mkEntityVal("\U00002134"), + "oslash;": mkEntityVal("\U000000F8"), + "osol;": mkEntityVal("\U00002298"), + "otilde;": mkEntityVal("\U000000F5"), + "otimes;": mkEntityVal("\U00002297"), + "otimesas;": mkEntityVal("\U00002A36"), + "ouml;": mkEntityVal("\U000000F6"), + "ovbar;": mkEntityVal("\U0000233D"), + "par;": mkEntityVal("\U00002225"), + "para;": mkEntityVal("\U000000B6"), + "parallel;": mkEntityVal("\U00002225"), + "parsim;": mkEntityVal("\U00002AF3"), + "parsl;": mkEntityVal("\U00002AFD"), + "part;": mkEntityVal("\U00002202"), + "pcy;": mkEntityVal("\U0000043F"), + "percnt;": mkEntityVal("\U00000025"), + "period;": mkEntityVal("\U0000002E"), + "permil;": mkEntityVal("\U00002030"), + "perp;": mkEntityVal("\U000022A5"), + "pertenk;": mkEntityVal("\U00002031"), + "pfr;": mkEntityVal("\U0001D52D"), + "phi;": mkEntityVal("\U000003C6"), + "phiv;": mkEntityVal("\U000003D5"), + "phmmat;": mkEntityVal("\U00002133"), + "phone;": mkEntityVal("\U0000260E"), + "pi;": mkEntityVal("\U000003C0"), + "pitchfork;": mkEntityVal("\U000022D4"), + "piv;": mkEntityVal("\U000003D6"), + "planck;": mkEntityVal("\U0000210F"), + "planckh;": mkEntityVal("\U0000210E"), + "plankv;": mkEntityVal("\U0000210F"), + "plus;": mkEntityVal("\U0000002B"), + "plusacir;": mkEntityVal("\U00002A23"), + "plusb;": mkEntityVal("\U0000229E"), + "pluscir;": mkEntityVal("\U00002A22"), + "plusdo;": mkEntityVal("\U00002214"), + "plusdu;": mkEntityVal("\U00002A25"), + "pluse;": mkEntityVal("\U00002A72"), + "plusmn;": mkEntityVal("\U000000B1"), + "plussim;": mkEntityVal("\U00002A26"), + "plustwo;": mkEntityVal("\U00002A27"), + "pm;": mkEntityVal("\U000000B1"), + "pointint;": mkEntityVal("\U00002A15"), + "popf;": mkEntityVal("\U0001D561"), + "pound;": mkEntityVal("\U000000A3"), + "pr;": mkEntityVal("\U0000227A"), + "prE;": mkEntityVal("\U00002AB3"), + "prap;": mkEntityVal("\U00002AB7"), + "prcue;": mkEntityVal("\U0000227C"), + "pre;": mkEntityVal("\U00002AAF"), + "prec;": mkEntityVal("\U0000227A"), + "precapprox;": mkEntityVal("\U00002AB7"), + "preccurlyeq;": mkEntityVal("\U0000227C"), + "preceq;": mkEntityVal("\U00002AAF"), + "precnapprox;": mkEntityVal("\U00002AB9"), + "precneqq;": mkEntityVal("\U00002AB5"), + "precnsim;": mkEntityVal("\U000022E8"), + "precsim;": mkEntityVal("\U0000227E"), + "prime;": mkEntityVal("\U00002032"), + "primes;": mkEntityVal("\U00002119"), + "prnE;": mkEntityVal("\U00002AB5"), + "prnap;": mkEntityVal("\U00002AB9"), + "prnsim;": mkEntityVal("\U000022E8"), + "prod;": mkEntityVal("\U0000220F"), + "profalar;": mkEntityVal("\U0000232E"), + "profline;": mkEntityVal("\U00002312"), + "profsurf;": mkEntityVal("\U00002313"), + "prop;": mkEntityVal("\U0000221D"), + "propto;": mkEntityVal("\U0000221D"), + "prsim;": mkEntityVal("\U0000227E"), + "prurel;": mkEntityVal("\U000022B0"), + "pscr;": mkEntityVal("\U0001D4C5"), + "psi;": mkEntityVal("\U000003C8"), + "puncsp;": mkEntityVal("\U00002008"), + "qfr;": mkEntityVal("\U0001D52E"), + "qint;": mkEntityVal("\U00002A0C"), + "qopf;": mkEntityVal("\U0001D562"), + "qprime;": mkEntityVal("\U00002057"), + "qscr;": mkEntityVal("\U0001D4C6"), + "quaternions;": mkEntityVal("\U0000210D"), + "quatint;": mkEntityVal("\U00002A16"), + "quest;": mkEntityVal("\U0000003F"), + "questeq;": mkEntityVal("\U0000225F"), + "quot;": mkEntityVal("\U00000022"), + "rAarr;": mkEntityVal("\U000021DB"), + "rArr;": mkEntityVal("\U000021D2"), + "rAtail;": mkEntityVal("\U0000291C"), + "rBarr;": mkEntityVal("\U0000290F"), + "rHar;": mkEntityVal("\U00002964"), + "racute;": mkEntityVal("\U00000155"), + "radic;": mkEntityVal("\U0000221A"), + "raemptyv;": mkEntityVal("\U000029B3"), + "rang;": mkEntityVal("\U000027E9"), + "rangd;": mkEntityVal("\U00002992"), + "range;": mkEntityVal("\U000029A5"), + "rangle;": mkEntityVal("\U000027E9"), + "raquo;": mkEntityVal("\U000000BB"), + "rarr;": mkEntityVal("\U00002192"), + "rarrap;": mkEntityVal("\U00002975"), + "rarrb;": mkEntityVal("\U000021E5"), + "rarrbfs;": mkEntityVal("\U00002920"), + "rarrc;": mkEntityVal("\U00002933"), + "rarrfs;": mkEntityVal("\U0000291E"), + "rarrhk;": mkEntityVal("\U000021AA"), + "rarrlp;": mkEntityVal("\U000021AC"), + "rarrpl;": mkEntityVal("\U00002945"), + "rarrsim;": mkEntityVal("\U00002974"), + "rarrtl;": mkEntityVal("\U000021A3"), + "rarrw;": mkEntityVal("\U0000219D"), + "ratail;": mkEntityVal("\U0000291A"), + "ratio;": mkEntityVal("\U00002236"), + "rationals;": mkEntityVal("\U0000211A"), + "rbarr;": mkEntityVal("\U0000290D"), + "rbbrk;": mkEntityVal("\U00002773"), + "rbrace;": mkEntityVal("\U0000007D"), + "rbrack;": mkEntityVal("\U0000005D"), + "rbrke;": mkEntityVal("\U0000298C"), + "rbrksld;": mkEntityVal("\U0000298E"), + "rbrkslu;": mkEntityVal("\U00002990"), + "rcaron;": mkEntityVal("\U00000159"), + "rcedil;": mkEntityVal("\U00000157"), + "rceil;": mkEntityVal("\U00002309"), + "rcub;": mkEntityVal("\U0000007D"), + "rcy;": mkEntityVal("\U00000440"), + "rdca;": mkEntityVal("\U00002937"), + "rdldhar;": mkEntityVal("\U00002969"), + "rdquo;": mkEntityVal("\U0000201D"), + "rdquor;": mkEntityVal("\U0000201D"), + "rdsh;": mkEntityVal("\U000021B3"), + "real;": mkEntityVal("\U0000211C"), + "realine;": mkEntityVal("\U0000211B"), + "realpart;": mkEntityVal("\U0000211C"), + "reals;": mkEntityVal("\U0000211D"), + "rect;": mkEntityVal("\U000025AD"), + "reg;": mkEntityVal("\U000000AE"), + "rfisht;": mkEntityVal("\U0000297D"), + "rfloor;": mkEntityVal("\U0000230B"), + "rfr;": mkEntityVal("\U0001D52F"), + "rhard;": mkEntityVal("\U000021C1"), + "rharu;": mkEntityVal("\U000021C0"), + "rharul;": mkEntityVal("\U0000296C"), + "rho;": mkEntityVal("\U000003C1"), + "rhov;": mkEntityVal("\U000003F1"), + "rightarrow;": mkEntityVal("\U00002192"), + "rightarrowtail;": mkEntityVal("\U000021A3"), + "rightharpoondown;": mkEntityVal("\U000021C1"), + "rightharpoonup;": mkEntityVal("\U000021C0"), + "rightleftarrows;": mkEntityVal("\U000021C4"), + "rightleftharpoons;": mkEntityVal("\U000021CC"), + "rightrightarrows;": mkEntityVal("\U000021C9"), + "rightsquigarrow;": mkEntityVal("\U0000219D"), + "rightthreetimes;": mkEntityVal("\U000022CC"), + "ring;": mkEntityVal("\U000002DA"), + "risingdotseq;": mkEntityVal("\U00002253"), + "rlarr;": mkEntityVal("\U000021C4"), + "rlhar;": mkEntityVal("\U000021CC"), + "rlm;": mkEntityVal("\U0000200F"), + "rmoust;": mkEntityVal("\U000023B1"), + "rmoustache;": mkEntityVal("\U000023B1"), + "rnmid;": mkEntityVal("\U00002AEE"), + "roang;": mkEntityVal("\U000027ED"), + "roarr;": mkEntityVal("\U000021FE"), + "robrk;": mkEntityVal("\U000027E7"), + "ropar;": mkEntityVal("\U00002986"), + "ropf;": mkEntityVal("\U0001D563"), + "roplus;": mkEntityVal("\U00002A2E"), + "rotimes;": mkEntityVal("\U00002A35"), + "rpar;": mkEntityVal("\U00000029"), + "rpargt;": mkEntityVal("\U00002994"), + "rppolint;": mkEntityVal("\U00002A12"), + "rrarr;": mkEntityVal("\U000021C9"), + "rsaquo;": mkEntityVal("\U0000203A"), + "rscr;": mkEntityVal("\U0001D4C7"), + "rsh;": mkEntityVal("\U000021B1"), + "rsqb;": mkEntityVal("\U0000005D"), + "rsquo;": mkEntityVal("\U00002019"), + "rsquor;": mkEntityVal("\U00002019"), + "rthree;": mkEntityVal("\U000022CC"), + "rtimes;": mkEntityVal("\U000022CA"), + "rtri;": mkEntityVal("\U000025B9"), + "rtrie;": mkEntityVal("\U000022B5"), + "rtrif;": mkEntityVal("\U000025B8"), + "rtriltri;": mkEntityVal("\U000029CE"), + "ruluhar;": mkEntityVal("\U00002968"), + "rx;": mkEntityVal("\U0000211E"), + "sacute;": mkEntityVal("\U0000015B"), + "sbquo;": mkEntityVal("\U0000201A"), + "sc;": mkEntityVal("\U0000227B"), + "scE;": mkEntityVal("\U00002AB4"), + "scap;": mkEntityVal("\U00002AB8"), + "scaron;": mkEntityVal("\U00000161"), + "sccue;": mkEntityVal("\U0000227D"), + "sce;": mkEntityVal("\U00002AB0"), + "scedil;": mkEntityVal("\U0000015F"), + "scirc;": mkEntityVal("\U0000015D"), + "scnE;": mkEntityVal("\U00002AB6"), + "scnap;": mkEntityVal("\U00002ABA"), + "scnsim;": mkEntityVal("\U000022E9"), + "scpolint;": mkEntityVal("\U00002A13"), + "scsim;": mkEntityVal("\U0000227F"), + "scy;": mkEntityVal("\U00000441"), + "sdot;": mkEntityVal("\U000022C5"), + "sdotb;": mkEntityVal("\U000022A1"), + "sdote;": mkEntityVal("\U00002A66"), + "seArr;": mkEntityVal("\U000021D8"), + "searhk;": mkEntityVal("\U00002925"), + "searr;": mkEntityVal("\U00002198"), + "searrow;": mkEntityVal("\U00002198"), + "sect;": mkEntityVal("\U000000A7"), + "semi;": mkEntityVal("\U0000003B"), + "seswar;": mkEntityVal("\U00002929"), + "setminus;": mkEntityVal("\U00002216"), + "setmn;": mkEntityVal("\U00002216"), + "sext;": mkEntityVal("\U00002736"), + "sfr;": mkEntityVal("\U0001D530"), + "sfrown;": mkEntityVal("\U00002322"), + "sharp;": mkEntityVal("\U0000266F"), + "shchcy;": mkEntityVal("\U00000449"), + "shcy;": mkEntityVal("\U00000448"), + "shortmid;": mkEntityVal("\U00002223"), + "shortparallel;": mkEntityVal("\U00002225"), + "shy;": mkEntityVal("\U000000AD"), + "sigma;": mkEntityVal("\U000003C3"), + "sigmaf;": mkEntityVal("\U000003C2"), + "sigmav;": mkEntityVal("\U000003C2"), + "sim;": mkEntityVal("\U0000223C"), + "simdot;": mkEntityVal("\U00002A6A"), + "sime;": mkEntityVal("\U00002243"), + "simeq;": mkEntityVal("\U00002243"), + "simg;": mkEntityVal("\U00002A9E"), + "simgE;": mkEntityVal("\U00002AA0"), + "siml;": mkEntityVal("\U00002A9D"), + "simlE;": mkEntityVal("\U00002A9F"), + "simne;": mkEntityVal("\U00002246"), + "simplus;": mkEntityVal("\U00002A24"), + "simrarr;": mkEntityVal("\U00002972"), + "slarr;": mkEntityVal("\U00002190"), + "smallsetminus;": mkEntityVal("\U00002216"), + "smashp;": mkEntityVal("\U00002A33"), + "smeparsl;": mkEntityVal("\U000029E4"), + "smid;": mkEntityVal("\U00002223"), + "smile;": mkEntityVal("\U00002323"), + "smt;": mkEntityVal("\U00002AAA"), + "smte;": mkEntityVal("\U00002AAC"), + "softcy;": mkEntityVal("\U0000044C"), + "sol;": mkEntityVal("\U0000002F"), + "solb;": mkEntityVal("\U000029C4"), + "solbar;": mkEntityVal("\U0000233F"), + "sopf;": mkEntityVal("\U0001D564"), + "spades;": mkEntityVal("\U00002660"), + "spadesuit;": mkEntityVal("\U00002660"), + "spar;": mkEntityVal("\U00002225"), + "sqcap;": mkEntityVal("\U00002293"), + "sqcup;": mkEntityVal("\U00002294"), + "sqsub;": mkEntityVal("\U0000228F"), + "sqsube;": mkEntityVal("\U00002291"), + "sqsubset;": mkEntityVal("\U0000228F"), + "sqsubseteq;": mkEntityVal("\U00002291"), + "sqsup;": mkEntityVal("\U00002290"), + "sqsupe;": mkEntityVal("\U00002292"), + "sqsupset;": mkEntityVal("\U00002290"), + "sqsupseteq;": mkEntityVal("\U00002292"), + "squ;": mkEntityVal("\U000025A1"), + "square;": mkEntityVal("\U000025A1"), + "squarf;": mkEntityVal("\U000025AA"), + "squf;": mkEntityVal("\U000025AA"), + "srarr;": mkEntityVal("\U00002192"), + "sscr;": mkEntityVal("\U0001D4C8"), + "ssetmn;": mkEntityVal("\U00002216"), + "ssmile;": mkEntityVal("\U00002323"), + "sstarf;": mkEntityVal("\U000022C6"), + "star;": mkEntityVal("\U00002606"), + "starf;": mkEntityVal("\U00002605"), + "straightepsilon;": mkEntityVal("\U000003F5"), + "straightphi;": mkEntityVal("\U000003D5"), + "strns;": mkEntityVal("\U000000AF"), + "sub;": mkEntityVal("\U00002282"), + "subE;": mkEntityVal("\U00002AC5"), + "subdot;": mkEntityVal("\U00002ABD"), + "sube;": mkEntityVal("\U00002286"), + "subedot;": mkEntityVal("\U00002AC3"), + "submult;": mkEntityVal("\U00002AC1"), + "subnE;": mkEntityVal("\U00002ACB"), + "subne;": mkEntityVal("\U0000228A"), + "subplus;": mkEntityVal("\U00002ABF"), + "subrarr;": mkEntityVal("\U00002979"), + "subset;": mkEntityVal("\U00002282"), + "subseteq;": mkEntityVal("\U00002286"), + "subseteqq;": mkEntityVal("\U00002AC5"), + "subsetneq;": mkEntityVal("\U0000228A"), + "subsetneqq;": mkEntityVal("\U00002ACB"), + "subsim;": mkEntityVal("\U00002AC7"), + "subsub;": mkEntityVal("\U00002AD5"), + "subsup;": mkEntityVal("\U00002AD3"), + "succ;": mkEntityVal("\U0000227B"), + "succapprox;": mkEntityVal("\U00002AB8"), + "succcurlyeq;": mkEntityVal("\U0000227D"), + "succeq;": mkEntityVal("\U00002AB0"), + "succnapprox;": mkEntityVal("\U00002ABA"), + "succneqq;": mkEntityVal("\U00002AB6"), + "succnsim;": mkEntityVal("\U000022E9"), + "succsim;": mkEntityVal("\U0000227F"), + "sum;": mkEntityVal("\U00002211"), + "sung;": mkEntityVal("\U0000266A"), + "sup;": mkEntityVal("\U00002283"), + "sup1;": mkEntityVal("\U000000B9"), + "sup2;": mkEntityVal("\U000000B2"), + "sup3;": mkEntityVal("\U000000B3"), + "supE;": mkEntityVal("\U00002AC6"), + "supdot;": mkEntityVal("\U00002ABE"), + "supdsub;": mkEntityVal("\U00002AD8"), + "supe;": mkEntityVal("\U00002287"), + "supedot;": mkEntityVal("\U00002AC4"), + "suphsol;": mkEntityVal("\U000027C9"), + "suphsub;": mkEntityVal("\U00002AD7"), + "suplarr;": mkEntityVal("\U0000297B"), + "supmult;": mkEntityVal("\U00002AC2"), + "supnE;": mkEntityVal("\U00002ACC"), + "supne;": mkEntityVal("\U0000228B"), + "supplus;": mkEntityVal("\U00002AC0"), + "supset;": mkEntityVal("\U00002283"), + "supseteq;": mkEntityVal("\U00002287"), + "supseteqq;": mkEntityVal("\U00002AC6"), + "supsetneq;": mkEntityVal("\U0000228B"), + "supsetneqq;": mkEntityVal("\U00002ACC"), + "supsim;": mkEntityVal("\U00002AC8"), + "supsub;": mkEntityVal("\U00002AD4"), + "supsup;": mkEntityVal("\U00002AD6"), + "swArr;": mkEntityVal("\U000021D9"), + "swarhk;": mkEntityVal("\U00002926"), + "swarr;": mkEntityVal("\U00002199"), + "swarrow;": mkEntityVal("\U00002199"), + "swnwar;": mkEntityVal("\U0000292A"), + "szlig;": mkEntityVal("\U000000DF"), + "target;": mkEntityVal("\U00002316"), + "tau;": mkEntityVal("\U000003C4"), + "tbrk;": mkEntityVal("\U000023B4"), + "tcaron;": mkEntityVal("\U00000165"), + "tcedil;": mkEntityVal("\U00000163"), + "tcy;": mkEntityVal("\U00000442"), + "tdot;": mkEntityVal("\U000020DB"), + "telrec;": mkEntityVal("\U00002315"), + "tfr;": mkEntityVal("\U0001D531"), + "there4;": mkEntityVal("\U00002234"), + "therefore;": mkEntityVal("\U00002234"), + "theta;": mkEntityVal("\U000003B8"), + "thetasym;": mkEntityVal("\U000003D1"), + "thetav;": mkEntityVal("\U000003D1"), + "thickapprox;": mkEntityVal("\U00002248"), + "thicksim;": mkEntityVal("\U0000223C"), + "thinsp;": mkEntityVal("\U00002009"), + "thkap;": mkEntityVal("\U00002248"), + "thksim;": mkEntityVal("\U0000223C"), + "thorn;": mkEntityVal("\U000000FE"), + "tilde;": mkEntityVal("\U000002DC"), + "times;": mkEntityVal("\U000000D7"), + "timesb;": mkEntityVal("\U000022A0"), + "timesbar;": mkEntityVal("\U00002A31"), + "timesd;": mkEntityVal("\U00002A30"), + "tint;": mkEntityVal("\U0000222D"), + "toea;": mkEntityVal("\U00002928"), + "top;": mkEntityVal("\U000022A4"), + "topbot;": mkEntityVal("\U00002336"), + "topcir;": mkEntityVal("\U00002AF1"), + "topf;": mkEntityVal("\U0001D565"), + "topfork;": mkEntityVal("\U00002ADA"), + "tosa;": mkEntityVal("\U00002929"), + "tprime;": mkEntityVal("\U00002034"), + "trade;": mkEntityVal("\U00002122"), + "triangle;": mkEntityVal("\U000025B5"), + "triangledown;": mkEntityVal("\U000025BF"), + "triangleleft;": mkEntityVal("\U000025C3"), + "trianglelefteq;": mkEntityVal("\U000022B4"), + "triangleq;": mkEntityVal("\U0000225C"), + "triangleright;": mkEntityVal("\U000025B9"), + "trianglerighteq;": mkEntityVal("\U000022B5"), + "tridot;": mkEntityVal("\U000025EC"), + "trie;": mkEntityVal("\U0000225C"), + "triminus;": mkEntityVal("\U00002A3A"), + "triplus;": mkEntityVal("\U00002A39"), + "trisb;": mkEntityVal("\U000029CD"), + "tritime;": mkEntityVal("\U00002A3B"), + "trpezium;": mkEntityVal("\U000023E2"), + "tscr;": mkEntityVal("\U0001D4C9"), + "tscy;": mkEntityVal("\U00000446"), + "tshcy;": mkEntityVal("\U0000045B"), + "tstrok;": mkEntityVal("\U00000167"), + "twixt;": mkEntityVal("\U0000226C"), + "twoheadleftarrow;": mkEntityVal("\U0000219E"), + "twoheadrightarrow;": mkEntityVal("\U000021A0"), + "uArr;": mkEntityVal("\U000021D1"), + "uHar;": mkEntityVal("\U00002963"), + "uacute;": mkEntityVal("\U000000FA"), + "uarr;": mkEntityVal("\U00002191"), + "ubrcy;": mkEntityVal("\U0000045E"), + "ubreve;": mkEntityVal("\U0000016D"), + "ucirc;": mkEntityVal("\U000000FB"), + "ucy;": mkEntityVal("\U00000443"), + "udarr;": mkEntityVal("\U000021C5"), + "udblac;": mkEntityVal("\U00000171"), + "udhar;": mkEntityVal("\U0000296E"), + "ufisht;": mkEntityVal("\U0000297E"), + "ufr;": mkEntityVal("\U0001D532"), + "ugrave;": mkEntityVal("\U000000F9"), + "uharl;": mkEntityVal("\U000021BF"), + "uharr;": mkEntityVal("\U000021BE"), + "uhblk;": mkEntityVal("\U00002580"), + "ulcorn;": mkEntityVal("\U0000231C"), + "ulcorner;": mkEntityVal("\U0000231C"), + "ulcrop;": mkEntityVal("\U0000230F"), + "ultri;": mkEntityVal("\U000025F8"), + "umacr;": mkEntityVal("\U0000016B"), + "uml;": mkEntityVal("\U000000A8"), + "uogon;": mkEntityVal("\U00000173"), + "uopf;": mkEntityVal("\U0001D566"), + "uparrow;": mkEntityVal("\U00002191"), + "updownarrow;": mkEntityVal("\U00002195"), + "upharpoonleft;": mkEntityVal("\U000021BF"), + "upharpoonright;": mkEntityVal("\U000021BE"), + "uplus;": mkEntityVal("\U0000228E"), + "upsi;": mkEntityVal("\U000003C5"), + "upsih;": mkEntityVal("\U000003D2"), + "upsilon;": mkEntityVal("\U000003C5"), + "upuparrows;": mkEntityVal("\U000021C8"), + "urcorn;": mkEntityVal("\U0000231D"), + "urcorner;": mkEntityVal("\U0000231D"), + "urcrop;": mkEntityVal("\U0000230E"), + "uring;": mkEntityVal("\U0000016F"), + "urtri;": mkEntityVal("\U000025F9"), + "uscr;": mkEntityVal("\U0001D4CA"), + "utdot;": mkEntityVal("\U000022F0"), + "utilde;": mkEntityVal("\U00000169"), + "utri;": mkEntityVal("\U000025B5"), + "utrif;": mkEntityVal("\U000025B4"), + "uuarr;": mkEntityVal("\U000021C8"), + "uuml;": mkEntityVal("\U000000FC"), + "uwangle;": mkEntityVal("\U000029A7"), + "vArr;": mkEntityVal("\U000021D5"), + "vBar;": mkEntityVal("\U00002AE8"), + "vBarv;": mkEntityVal("\U00002AE9"), + "vDash;": mkEntityVal("\U000022A8"), + "vangrt;": mkEntityVal("\U0000299C"), + "varepsilon;": mkEntityVal("\U000003F5"), + "varkappa;": mkEntityVal("\U000003F0"), + "varnothing;": mkEntityVal("\U00002205"), + "varphi;": mkEntityVal("\U000003D5"), + "varpi;": mkEntityVal("\U000003D6"), + "varpropto;": mkEntityVal("\U0000221D"), + "varr;": mkEntityVal("\U00002195"), + "varrho;": mkEntityVal("\U000003F1"), + "varsigma;": mkEntityVal("\U000003C2"), + "vartheta;": mkEntityVal("\U000003D1"), + "vartriangleleft;": mkEntityVal("\U000022B2"), + "vartriangleright;": mkEntityVal("\U000022B3"), + "vcy;": mkEntityVal("\U00000432"), + "vdash;": mkEntityVal("\U000022A2"), + "vee;": mkEntityVal("\U00002228"), + "veebar;": mkEntityVal("\U000022BB"), + "veeeq;": mkEntityVal("\U0000225A"), + "vellip;": mkEntityVal("\U000022EE"), + "verbar;": mkEntityVal("\U0000007C"), + "vert;": mkEntityVal("\U0000007C"), + "vfr;": mkEntityVal("\U0001D533"), + "vltri;": mkEntityVal("\U000022B2"), + "vopf;": mkEntityVal("\U0001D567"), + "vprop;": mkEntityVal("\U0000221D"), + "vrtri;": mkEntityVal("\U000022B3"), + "vscr;": mkEntityVal("\U0001D4CB"), + "vzigzag;": mkEntityVal("\U0000299A"), + "wcirc;": mkEntityVal("\U00000175"), + "wedbar;": mkEntityVal("\U00002A5F"), + "wedge;": mkEntityVal("\U00002227"), + "wedgeq;": mkEntityVal("\U00002259"), + "weierp;": mkEntityVal("\U00002118"), + "wfr;": mkEntityVal("\U0001D534"), + "wopf;": mkEntityVal("\U0001D568"), + "wp;": mkEntityVal("\U00002118"), + "wr;": mkEntityVal("\U00002240"), + "wreath;": mkEntityVal("\U00002240"), + "wscr;": mkEntityVal("\U0001D4CC"), + "xcap;": mkEntityVal("\U000022C2"), + "xcirc;": mkEntityVal("\U000025EF"), + "xcup;": mkEntityVal("\U000022C3"), + "xdtri;": mkEntityVal("\U000025BD"), + "xfr;": mkEntityVal("\U0001D535"), + "xhArr;": mkEntityVal("\U000027FA"), + "xharr;": mkEntityVal("\U000027F7"), + "xi;": mkEntityVal("\U000003BE"), + "xlArr;": mkEntityVal("\U000027F8"), + "xlarr;": mkEntityVal("\U000027F5"), + "xmap;": mkEntityVal("\U000027FC"), + "xnis;": mkEntityVal("\U000022FB"), + "xodot;": mkEntityVal("\U00002A00"), + "xopf;": mkEntityVal("\U0001D569"), + "xoplus;": mkEntityVal("\U00002A01"), + "xotime;": mkEntityVal("\U00002A02"), + "xrArr;": mkEntityVal("\U000027F9"), + "xrarr;": mkEntityVal("\U000027F6"), + "xscr;": mkEntityVal("\U0001D4CD"), + "xsqcup;": mkEntityVal("\U00002A06"), + "xuplus;": mkEntityVal("\U00002A04"), + "xutri;": mkEntityVal("\U000025B3"), + "xvee;": mkEntityVal("\U000022C1"), + "xwedge;": mkEntityVal("\U000022C0"), + "yacute;": mkEntityVal("\U000000FD"), + "yacy;": mkEntityVal("\U0000044F"), + "ycirc;": mkEntityVal("\U00000177"), + "ycy;": mkEntityVal("\U0000044B"), + "yen;": mkEntityVal("\U000000A5"), + "yfr;": mkEntityVal("\U0001D536"), + "yicy;": mkEntityVal("\U00000457"), + "yopf;": mkEntityVal("\U0001D56A"), + "yscr;": mkEntityVal("\U0001D4CE"), + "yucy;": mkEntityVal("\U0000044E"), + "yuml;": mkEntityVal("\U000000FF"), + "zacute;": mkEntityVal("\U0000017A"), + "zcaron;": mkEntityVal("\U0000017E"), + "zcy;": mkEntityVal("\U00000437"), + "zdot;": mkEntityVal("\U0000017C"), + "zeetrf;": mkEntityVal("\U00002128"), + "zeta;": mkEntityVal("\U000003B6"), + "zfr;": mkEntityVal("\U0001D537"), + "zhcy;": mkEntityVal("\U00000436"), + "zigrarr;": mkEntityVal("\U000021DD"), + "zopf;": mkEntityVal("\U0001D56B"), + "zscr;": mkEntityVal("\U0001D4CF"), + "zwj;": mkEntityVal("\U0000200D"), + "zwnj;": mkEntityVal("\U0000200C"), + "AElig": mkEntityVal("\U000000C6"), + "AMP": mkEntityVal("\U00000026"), + "Aacute": mkEntityVal("\U000000C1"), + "Acirc": mkEntityVal("\U000000C2"), + "Agrave": mkEntityVal("\U000000C0"), + "Aring": mkEntityVal("\U000000C5"), + "Atilde": mkEntityVal("\U000000C3"), + "Auml": mkEntityVal("\U000000C4"), + "COPY": mkEntityVal("\U000000A9"), + "Ccedil": mkEntityVal("\U000000C7"), + "ETH": mkEntityVal("\U000000D0"), + "Eacute": mkEntityVal("\U000000C9"), + "Ecirc": mkEntityVal("\U000000CA"), + "Egrave": mkEntityVal("\U000000C8"), + "Euml": mkEntityVal("\U000000CB"), + "GT": mkEntityVal("\U0000003E"), + "Iacute": mkEntityVal("\U000000CD"), + "Icirc": mkEntityVal("\U000000CE"), + "Igrave": mkEntityVal("\U000000CC"), + "Iuml": mkEntityVal("\U000000CF"), + "LT": mkEntityVal("\U0000003C"), + "Ntilde": mkEntityVal("\U000000D1"), + "Oacute": mkEntityVal("\U000000D3"), + "Ocirc": mkEntityVal("\U000000D4"), + "Ograve": mkEntityVal("\U000000D2"), + "Oslash": mkEntityVal("\U000000D8"), + "Otilde": mkEntityVal("\U000000D5"), + "Ouml": mkEntityVal("\U000000D6"), + "QUOT": mkEntityVal("\U00000022"), + "REG": mkEntityVal("\U000000AE"), + "THORN": mkEntityVal("\U000000DE"), + "Uacute": mkEntityVal("\U000000DA"), + "Ucirc": mkEntityVal("\U000000DB"), + "Ugrave": mkEntityVal("\U000000D9"), + "Uuml": mkEntityVal("\U000000DC"), + "Yacute": mkEntityVal("\U000000DD"), + "aacute": mkEntityVal("\U000000E1"), + "acirc": mkEntityVal("\U000000E2"), + "acute": mkEntityVal("\U000000B4"), + "aelig": mkEntityVal("\U000000E6"), + "agrave": mkEntityVal("\U000000E0"), + "amp": mkEntityVal("\U00000026"), + "aring": mkEntityVal("\U000000E5"), + "atilde": mkEntityVal("\U000000E3"), + "auml": mkEntityVal("\U000000E4"), + "brvbar": mkEntityVal("\U000000A6"), + "ccedil": mkEntityVal("\U000000E7"), + "cedil": mkEntityVal("\U000000B8"), + "cent": mkEntityVal("\U000000A2"), + "copy": mkEntityVal("\U000000A9"), + "curren": mkEntityVal("\U000000A4"), + "deg": mkEntityVal("\U000000B0"), + "divide": mkEntityVal("\U000000F7"), + "eacute": mkEntityVal("\U000000E9"), + "ecirc": mkEntityVal("\U000000EA"), + "egrave": mkEntityVal("\U000000E8"), + "eth": mkEntityVal("\U000000F0"), + "euml": mkEntityVal("\U000000EB"), + "frac12": mkEntityVal("\U000000BD"), + "frac14": mkEntityVal("\U000000BC"), + "frac34": mkEntityVal("\U000000BE"), + "gt": mkEntityVal("\U0000003E"), + "iacute": mkEntityVal("\U000000ED"), + "icirc": mkEntityVal("\U000000EE"), + "iexcl": mkEntityVal("\U000000A1"), + "igrave": mkEntityVal("\U000000EC"), + "iquest": mkEntityVal("\U000000BF"), + "iuml": mkEntityVal("\U000000EF"), + "laquo": mkEntityVal("\U000000AB"), + "lt": mkEntityVal("\U0000003C"), + "macr": mkEntityVal("\U000000AF"), + "micro": mkEntityVal("\U000000B5"), + "middot": mkEntityVal("\U000000B7"), + "nbsp": mkEntityVal("\U000000A0"), + "not": mkEntityVal("\U000000AC"), + "ntilde": mkEntityVal("\U000000F1"), + "oacute": mkEntityVal("\U000000F3"), + "ocirc": mkEntityVal("\U000000F4"), + "ograve": mkEntityVal("\U000000F2"), + "ordf": mkEntityVal("\U000000AA"), + "ordm": mkEntityVal("\U000000BA"), + "oslash": mkEntityVal("\U000000F8"), + "otilde": mkEntityVal("\U000000F5"), + "ouml": mkEntityVal("\U000000F6"), + "para": mkEntityVal("\U000000B6"), + "plusmn": mkEntityVal("\U000000B1"), + "pound": mkEntityVal("\U000000A3"), + "quot": mkEntityVal("\U00000022"), + "raquo": mkEntityVal("\U000000BB"), + "reg": mkEntityVal("\U000000AE"), + "sect": mkEntityVal("\U000000A7"), + "shy": mkEntityVal("\U000000AD"), + "sup1": mkEntityVal("\U000000B9"), + "sup2": mkEntityVal("\U000000B2"), + "sup3": mkEntityVal("\U000000B3"), + "szlig": mkEntityVal("\U000000DF"), + "thorn": mkEntityVal("\U000000FE"), + "times": mkEntityVal("\U000000D7"), + "uacute": mkEntityVal("\U000000FA"), + "ucirc": mkEntityVal("\U000000FB"), + "ugrave": mkEntityVal("\U000000F9"), + "uml": mkEntityVal("\U000000A8"), + "uuml": mkEntityVal("\U000000FC"), + "yacute": mkEntityVal("\U000000FD"), + "yen": mkEntityVal("\U000000A5"), + "yuml": mkEntityVal("\U000000FF"), + "nLt;": mkEntityVal("\u226A\u20D2"), + "nGt;": mkEntityVal("\u226B\u20D2"), + "NotEqualTilde;": mkEntityVal("\u2242\u0338"), + "NotGreaterFullEqual;": mkEntityVal("\u2267\u0338"), + "NotGreaterGreater;": mkEntityVal("\u226B\u0338"), + "NotGreaterSlantEqual;": mkEntityVal("\u2A7E\u0338"), + "NotHumpDownHump;": mkEntityVal("\u224E\u0338"), + "NotHumpEqual;": mkEntityVal("\u224F\u0338"), + "NotLeftTriangleBar;": mkEntityVal("\u29CF\u0338"), + "NotLessLess;": mkEntityVal("\u226A\u0338"), + "NotLessSlantEqual;": mkEntityVal("\u2A7D\u0338"), + "NotNestedGreaterGreater;": mkEntityVal("\u2AA2\u0338"), + "NotNestedLessLess;": mkEntityVal("\u2AA1\u0338"), + "NotPrecedesEqual;": mkEntityVal("\u2AAF\u0338"), + "NotRightTriangleBar;": mkEntityVal("\u29D0\u0338"), + "NotSquareSubset;": mkEntityVal("\u228F\u0338"), + "NotSquareSuperset;": mkEntityVal("\u2290\u0338"), + "NotSubset;": mkEntityVal("\u2282\u20D2"), + "NotSucceedsEqual;": mkEntityVal("\u2AB0\u0338"), + "NotSucceedsTilde;": mkEntityVal("\u227F\u0338"), + "NotSuperset;": mkEntityVal("\u2283\u20D2"), + "ThickSpace;": mkEntityVal("\u205F\u200A"), + "acE;": mkEntityVal("\u223E\u0333"), + "bne;": mkEntityVal("\u003D\u20E5"), + "bnequiv;": mkEntityVal("\u2261\u20E5"), + "caps;": mkEntityVal("\u2229\uFE00"), + "cups;": mkEntityVal("\u222A\uFE00"), + "fjlig;": mkEntityVal("\u0066\u006A"), + "gesl;": mkEntityVal("\u22DB\uFE00"), + "gvertneqq;": mkEntityVal("\u2269\uFE00"), + "gvnE;": mkEntityVal("\u2269\uFE00"), + "lates;": mkEntityVal("\u2AAD\uFE00"), + "lesg;": mkEntityVal("\u22DA\uFE00"), + "lvertneqq;": mkEntityVal("\u2268\uFE00"), + "lvnE;": mkEntityVal("\u2268\uFE00"), + "nGg;": mkEntityVal("\u22D9\u0338"), + "nGtv;": mkEntityVal("\u226B\u0338"), + "nLl;": mkEntityVal("\u22D8\u0338"), + "nLtv;": mkEntityVal("\u226A\u0338"), + "nang;": mkEntityVal("\u2220\u20D2"), + "napE;": mkEntityVal("\u2A70\u0338"), + "napid;": mkEntityVal("\u224B\u0338"), + "nbump;": mkEntityVal("\u224E\u0338"), + "nbumpe;": mkEntityVal("\u224F\u0338"), + "ncongdot;": mkEntityVal("\u2A6D\u0338"), + "nedot;": mkEntityVal("\u2250\u0338"), + "nesim;": mkEntityVal("\u2242\u0338"), + "ngE;": mkEntityVal("\u2267\u0338"), + "ngeqq;": mkEntityVal("\u2267\u0338"), + "ngeqslant;": mkEntityVal("\u2A7E\u0338"), + "nges;": mkEntityVal("\u2A7E\u0338"), + "nlE;": mkEntityVal("\u2266\u0338"), + "nleqq;": mkEntityVal("\u2266\u0338"), + "nleqslant;": mkEntityVal("\u2A7D\u0338"), + "nles;": mkEntityVal("\u2A7D\u0338"), + "notinE;": mkEntityVal("\u22F9\u0338"), + "notindot;": mkEntityVal("\u22F5\u0338"), + "nparsl;": mkEntityVal("\u2AFD\u20E5"), + "npart;": mkEntityVal("\u2202\u0338"), + "npre;": mkEntityVal("\u2AAF\u0338"), + "npreceq;": mkEntityVal("\u2AAF\u0338"), + "nrarrc;": mkEntityVal("\u2933\u0338"), + "nrarrw;": mkEntityVal("\u219D\u0338"), + "nsce;": mkEntityVal("\u2AB0\u0338"), + "nsubE;": mkEntityVal("\u2AC5\u0338"), + "nsubset;": mkEntityVal("\u2282\u20D2"), + "nsubseteqq;": mkEntityVal("\u2AC5\u0338"), + "nsucceq;": mkEntityVal("\u2AB0\u0338"), + "nsupE;": mkEntityVal("\u2AC6\u0338"), + "nsupset;": mkEntityVal("\u2283\u20D2"), + "nsupseteqq;": mkEntityVal("\u2AC6\u0338"), + "nvap;": mkEntityVal("\u224D\u20D2"), + "nvge;": mkEntityVal("\u2265\u20D2"), + "nvgt;": mkEntityVal("\u003E\u20D2"), + "nvle;": mkEntityVal("\u2264\u20D2"), + "nvlt;": mkEntityVal("\u003C\u20D2"), + "nvltrie;": mkEntityVal("\u22B4\u20D2"), + "nvrtrie;": mkEntityVal("\u22B5\u20D2"), + "nvsim;": mkEntityVal("\u223C\u20D2"), + "race;": mkEntityVal("\u223D\u0331"), + "smtes;": mkEntityVal("\u2AAC\uFE00"), + "sqcaps;": mkEntityVal("\u2293\uFE00"), + "sqcups;": mkEntityVal("\u2294\uFE00"), + "varsubsetneq;": mkEntityVal("\u228A\uFE00"), + "varsubsetneqq;": mkEntityVal("\u2ACB\uFE00"), + "varsupsetneq;": mkEntityVal("\u228B\uFE00"), + "varsupsetneqq;": mkEntityVal("\u2ACC\uFE00"), + "vnsub;": mkEntityVal("\u2282\u20D2"), + "vnsup;": mkEntityVal("\u2283\u20D2"), + "vsubnE;": mkEntityVal("\u2ACB\uFE00"), + "vsubne;": mkEntityVal("\u228A\uFE00"), + "vsupnE;": mkEntityVal("\u2ACC\uFE00"), + "vsupne;": mkEntityVal("\u228B\uFE00"), } } diff --git a/html/entity_test.go b/html/entity_test.go index e2819e7af..c61be271c 100644 --- a/html/entity_test.go +++ b/html/entity_test.go @@ -6,7 +6,6 @@ package html import ( "testing" - "unicode/utf8" ) func init() { @@ -14,29 +13,13 @@ func init() { } func TestEntityLength(t *testing.T) { - if len(entity) == 0 || len(entity2) == 0 || len(entityWide) == 0 { + if len(entity) == 0 { t.Fatal("maps not loaded") } - // We verify that the length of UTF-8 encoding of each value is <= 1 + len(key). - // The +1 comes from the leading "&". This property implies that the length of - // unescaped text is <= the length of escaped text. - for k, v := range entity { - if 1+len(k) < utf8.RuneLen(v) { - t.Error("escaped entity &" + k + " is shorter than its UTF-8 encoding " + string(v)) - } + for k := range entity { if len(k) > longestEntityWithoutSemicolon && k[len(k)-1] != ';' { t.Errorf("entity name %s is %d characters, but longestEntityWithoutSemicolon=%d", k, len(k), longestEntityWithoutSemicolon) } } - for k, v := range entity2 { - if 1+len(k) < utf8.RuneLen(v[0])+utf8.RuneLen(v[1]) { - t.Error("escaped entity &" + k + " is shorter than its UTF-8 encoding " + string(v[0]) + string(v[1])) - } - } - for k, v := range entityWide { - if 1+len(k) >= utf8.RuneLen(v[0])+utf8.RuneLen(v[1]) { - t.Error("escaped entity &" + k + " is not shorter than its UTF-8 encoding " + string(v[0]) + string(v[1])) - } - } } diff --git a/html/escape.go b/html/escape.go index 5347dd539..d5c025914 100644 --- a/html/escape.go +++ b/html/escape.go @@ -157,30 +157,28 @@ func unescapeEntity[S ~[]byte | string](dst []byte, src S, dstPos, srcPos int, a // No-op. } else if attribute && entityName[len(entityName)-1] != ';' && len(s) > i && s[i] == '=' { // No-op. - } else if x := entity[string(entityName)]; x != 0 { - return dst, dstPos + utf8.EncodeRune(dst[dstPos:], x), srcPos + i - } else if x := entity2[string(entityName)]; x[0] != 0 { - dstPos1 := dstPos + utf8.EncodeRune(dst[dstPos:], x[0]) - return dst, dstPos1 + utf8.EncodeRune(dst[dstPos1:], x[1]), srcPos + i - } else if x := entityWide[string(entityName)]; x[0] != 0 { - // 5 bytes in, 6 bytes out - if dstPos == srcPos && dstIsSrc { - // make a copy + grow - dst = append(dst[:len(dst):len(dst)], 0) - } else if dstPos+6 >= len(dst) { - // grow, but don't necessarily make a copy - dst = append(dst, 0) + } else if entityVal := entity[string(entityName)]; entityVal.Len != 0 { + if entityVal.Len > i { + // This assumes that it only ever has to grow by 1 byte per entity. + if dstPos == srcPos && dstIsSrc { + // make a copy + grow + dst = append(dst[:len(dst):len(dst)], 0) + } else if dstPos+entityVal.Len >= len(dst) { + // grow, but don't necessarily make a copy + dst = append(dst, 0) + } } - dstPos1 := dstPos + utf8.EncodeRune(dst[dstPos:], x[0]) - return dst, dstPos1 + utf8.EncodeRune(dst[dstPos1:], x[1]), srcPos + i + return dst, dstPos + copy(dst[dstPos:], entityVal.Val[:entityVal.Len]), srcPos + i } else if !attribute { maxLen := len(entityName) - 1 if maxLen > longestEntityWithoutSemicolon { maxLen = longestEntityWithoutSemicolon } for j := maxLen; j > 1; j-- { - if x := entity[string(entityName[:j])]; x != 0 { - return dst, dstPos + utf8.EncodeRune(dst[dstPos:], x), srcPos + j + 1 + if entityVal := entity[string(entityName[:j])]; entityVal.Len != 0 { + // This assumes that no entity without a semicolon + // has a value that is wider than its name. + return dst, dstPos + copy(dst[dstPos:], entityVal.Val[:entityVal.Len]), srcPos + j + 1 } } } @@ -193,7 +191,7 @@ func unescapeEntity[S ~[]byte | string](dst []byte, src S, dstPos, srcPos int, a // unescape unescapes b's entities in-place, so that "a<b" becomes "a Date: Tue, 23 Apr 2024 22:07:25 -0600 Subject: [PATCH 21/22] opt3 --- html/entity.go | 5 +++-- html/escape.go | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/html/entity.go b/html/entity.go index 7a7efcab2..cc8985248 100644 --- a/html/entity.go +++ b/html/entity.go @@ -18,12 +18,13 @@ const longestEntityWithoutSemicolon = 6 var entity map[string]entityVal type entityVal struct { - Len int + // 8 bytes total, for good alignment + Len int16 Val [6]byte } func mkEntityVal(str string) (ret entityVal) { - ret.Len = copy(ret.Val[:], str) + ret.Len = int16(copy(ret.Val[:], str)) return ret } diff --git a/html/escape.go b/html/escape.go index d5c025914..fda4ab719 100644 --- a/html/escape.go +++ b/html/escape.go @@ -158,12 +158,12 @@ func unescapeEntity[S ~[]byte | string](dst []byte, src S, dstPos, srcPos int, a } else if attribute && entityName[len(entityName)-1] != ';' && len(s) > i && s[i] == '=' { // No-op. } else if entityVal := entity[string(entityName)]; entityVal.Len != 0 { - if entityVal.Len > i { + if entityVal.Len > int16(i) { // This assumes that it only ever has to grow by 1 byte per entity. if dstPos == srcPos && dstIsSrc { // make a copy + grow dst = append(dst[:len(dst):len(dst)], 0) - } else if dstPos+entityVal.Len >= len(dst) { + } else if dstPos+int(entityVal.Len) >= len(dst) { // grow, but don't necessarily make a copy dst = append(dst, 0) } From 1e4aea67be5569baa75a3357ed2f2ccca0b8a31c Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Tue, 23 Apr 2024 22:38:37 -0600 Subject: [PATCH 22/22] opt --- html/entity.go | 11 +++++------ html/entity_test.go | 8 +++++++- html/escape.go | 12 ++++++------ 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/html/entity.go b/html/entity.go index cc8985248..2c3a0afde 100644 --- a/html/entity.go +++ b/html/entity.go @@ -17,14 +17,13 @@ const longestEntityWithoutSemicolon = 6 // https://www.w3.org/TR/html4/sgml/entities.html var entity map[string]entityVal -type entityVal struct { - // 8 bytes total, for good alignment - Len int16 - Val [6]byte -} +type entityVal [8]byte func mkEntityVal(str string) (ret entityVal) { - ret.Len = int16(copy(ret.Val[:], str)) + ret[0] = byte(len(str)) + if copy(ret[1:], str) < len(str) { + panic("entity value does not fit in buffer: "+str) + } return ret } diff --git a/html/entity_test.go b/html/entity_test.go index c61be271c..716342d2c 100644 --- a/html/entity_test.go +++ b/html/entity_test.go @@ -17,7 +17,13 @@ func TestEntityLength(t *testing.T) { t.Fatal("maps not loaded") } - for k := range entity { + // We verify that the length of UTF-8 encoding of each value + // is no more than 1 + len("&"+key), which is an assuption + // made in unescapeEntity. + for k, v := range entity { + if 2+len(k) < int(v[0]) { + t.Error("escaped entity &" + k + " is more than 1 byte shorter than its UTF-8 encoding " + string(v[1:1+v[0]])) + } if len(k) > longestEntityWithoutSemicolon && k[len(k)-1] != ';' { t.Errorf("entity name %s is %d characters, but longestEntityWithoutSemicolon=%d", k, len(k), longestEntityWithoutSemicolon) } diff --git a/html/escape.go b/html/escape.go index fda4ab719..a03820a6a 100644 --- a/html/escape.go +++ b/html/escape.go @@ -157,28 +157,28 @@ func unescapeEntity[S ~[]byte | string](dst []byte, src S, dstPos, srcPos int, a // No-op. } else if attribute && entityName[len(entityName)-1] != ';' && len(s) > i && s[i] == '=' { // No-op. - } else if entityVal := entity[string(entityName)]; entityVal.Len != 0 { - if entityVal.Len > int16(i) { + } else if x := entity[string(entityName)]; x[0] != 0 { + if int(x[0]) > i { // This assumes that it only ever has to grow by 1 byte per entity. if dstPos == srcPos && dstIsSrc { // make a copy + grow dst = append(dst[:len(dst):len(dst)], 0) - } else if dstPos+int(entityVal.Len) >= len(dst) { + } else if dstPos+int(x[0]) >= len(dst) { // grow, but don't necessarily make a copy dst = append(dst, 0) } } - return dst, dstPos + copy(dst[dstPos:], entityVal.Val[:entityVal.Len]), srcPos + i + return dst, dstPos + copy(dst[dstPos:], x[1:1+x[0]]), srcPos + i } else if !attribute { maxLen := len(entityName) - 1 if maxLen > longestEntityWithoutSemicolon { maxLen = longestEntityWithoutSemicolon } for j := maxLen; j > 1; j-- { - if entityVal := entity[string(entityName[:j])]; entityVal.Len != 0 { + if x := entity[string(entityName[:j])]; x[0] != 0 { // This assumes that no entity without a semicolon // has a value that is wider than its name. - return dst, dstPos + copy(dst[dstPos:], entityVal.Val[:entityVal.Len]), srcPos + j + 1 + return dst, dstPos + copy(dst[dstPos:], x[1:1+x[0]]), srcPos + j + 1 } } }