url-cleaner-engine 0.11.0

The engine behind URL Cleaner.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
//! Unescapes HTML text.

use std::borrow::Cow;

use thiserror::Error;

use crate::util::*;

/// The enum of errors that can happen when unescaping HTML text.
#[derive(Debug, Error)]
pub enum UnescapeTextError {
    /// Returned when a syntax error is encountered.
    #[error("Syntax error.")]
    SyntaxError,
    /// Returned when an [`CharRefError`] is encountered.
    #[error(transparent)]
    CharRefError(#[from] CharRefError)
}

/// Unescapes HTML text. Probably very bad and buggy, but SHOULD give correct outputs for in-spec inputs.
/// # Errors
/// If an unknown character reference is found, returns the error [`UnescapeTextError::CharRefError`].
///
/// If a `&` is found without a `;` afterwards, returns the error [`UnescapeTextError::SyntaxError`].
/// # Examples
/// ```
/// use url_cleaner_engine::glue::*;
///
/// assert_eq!(parse::html::unescape_text("a&b" ).unwrap(), "a&b");
/// assert_eq!(parse::html::unescape_text("aAb" ).unwrap(), "aAb");
/// assert_eq!(parse::html::unescape_text("aAb").unwrap(), "aAb");
/// ```
pub fn unescape_text(s: &str) -> Result<String, UnescapeTextError> {
    debug!(parse::html::unescape_text, &(), s);
    
    let mut ret = String::new();

    let mut first = true;

    for segment in s.split('&') {
        match (first, segment.split_once(';')) {
            (true , _                     ) => {ret.push_str(segment); first=false;}
            (false, Some((char_ref, rest))) => {ret.push_str(&parse_char_ref(char_ref)?); ret.push_str(rest);},
            (false, None                  ) => Err(UnescapeTextError::SyntaxError)?
        }
    }

    Ok(ret)
}

/// The enum of errors describing how a character reference is invalid.
#[derive(Debug, Error)]
#[error("Unknown character reference.")]
pub enum CharRefError {
    /// Unknown char name.
    #[error("Unknown char name.")]
    UnknownCharName,
    /// Returned when a [`NumCharRefError`] is encountered.
    #[error(transparent)]
    NumCharRefError(#[from] NumCharRefError)
}

/// Convert character references to strings.
///
/// Unfortunately, there are OVER TWO THOUSAND named character references, and some are multiple [`char`]s.
/// # Errors
/// If `char_ref` starts with `#` and the call to [`parse_num_char_ref`] returns an error, that error is returned.
///
/// Otherwise, if the character name isn't defined as a valid character reference, returns the error [`CharRefError::UnknownCharName`].
/// # Examples
/// ```
/// use url_cleaner_engine::glue::*;
///
/// assert_eq!(parse::html::parse_char_ref("amp" ).unwrap(), "&");
/// assert_eq!(parse::html::parse_char_ref("#65" ).unwrap(), "A");
/// assert_eq!(parse::html::parse_char_ref("#x41").unwrap(), "A");
///
/// parse::html::parse_char_ref("unknown").unwrap_err();
/// ```
pub fn parse_char_ref(char_ref: &str) -> Result<Cow<'static, str>, CharRefError> {
    debug!(parse::html::parse_char_ref, &(), char_ref);

    if char_ref.starts_with("#") {return Ok(Cow::Owned(parse_num_char_ref(char_ref)?.into()));}
    Ok(Cow::Borrowed(match char_ref {
        "AElig"                           => "\u{000C6}",
        "AMP"                             => "\u{00026}",
        "Aacute"                          => "\u{000C1}",
        "Abreve"                          => "\u{00102}",
        "Acirc"                           => "\u{000C2}",
        "Acy"                             => "\u{00410}",
        "Afr"                             => "\u{1D504}",
        "Agrave"                          => "\u{000C0}",
        "Alpha"                           => "\u{00391}",
        "Amacr"                           => "\u{00100}",
        "And"                             => "\u{02A53}",
        "Aogon"                           => "\u{00104}",
        "Aopf"                            => "\u{1D538}",
        "ApplyFunction"                   => "\u{02061}",
        "Aring"                           => "\u{000C5}",
        "Ascr"                            => "\u{1D49C}",
        "Assign"                          => "\u{02254}",
        "Atilde"                          => "\u{000C3}",
        "Auml"                            => "\u{000C4}",
        "Backslash"                       => "\u{02216}",
        "Barv"                            => "\u{02AE7}",
        "Barwed"                          => "\u{02306}",
        "Bcy"                             => "\u{00411}",
        "Because"                         => "\u{02235}",
        "Bernoullis"                      => "\u{0212C}",
        "Beta"                            => "\u{00392}",
        "Bfr"                             => "\u{1D505}",
        "Bopf"                            => "\u{1D539}",
        "Breve"                           => "\u{002D8}",
        "Bscr"                            => "\u{0212C}",
        "Bumpeq"                          => "\u{0224E}",
        "CHcy"                            => "\u{00427}",
        "COPY"                            => "\u{000A9}",
        "Cacute"                          => "\u{00106}",
        "Cap"                             => "\u{022D2}",
        "CapitalDifferentialD"            => "\u{02145}",
        "Cayleys"                         => "\u{0212D}",
        "Ccaron"                          => "\u{0010C}",
        "Ccedil"                          => "\u{000C7}",
        "Ccirc"                           => "\u{00108}",
        "Cconint"                         => "\u{02230}",
        "Cdot"                            => "\u{0010A}",
        "Cedilla"                         => "\u{000B8}",
        "CenterDot"                       => "\u{000B7}",
        "Cfr"                             => "\u{0212D}",
        "Chi"                             => "\u{003A7}",
        "CircleDot"                       => "\u{02299}",
        "CircleMinus"                     => "\u{02296}",
        "CirclePlus"                      => "\u{02295}",
        "CircleTimes"                     => "\u{02297}",
        "ClockwiseContourIntegral"        => "\u{02232}",
        "CloseCurlyDoubleQuote"           => "\u{0201D}",
        "CloseCurlyQuote"                 => "\u{02019}",
        "Colon"                           => "\u{02237}",
        "Colone"                          => "\u{02A74}",
        "Congruent"                       => "\u{02261}",
        "Conint"                          => "\u{0222F}",
        "ContourIntegral"                 => "\u{0222E}",
        "Copf"                            => "\u{02102}",
        "Coproduct"                       => "\u{02210}",
        "CounterClockwiseContourIntegral" => "\u{02233}",
        "Cross"                           => "\u{02A2F}",
        "Cscr"                            => "\u{1D49E}",
        "Cup"                             => "\u{022D3}",
        "CupCap"                          => "\u{0224D}",
        "DD"                              => "\u{02145}",
        "DDotrahd"                        => "\u{02911}",
        "DJcy"                            => "\u{00402}",
        "DScy"                            => "\u{00405}",
        "DZcy"                            => "\u{0040F}",
        "Dagger"                          => "\u{02021}",
        "Darr"                            => "\u{021A1}",
        "Dashv"                           => "\u{02AE4}",
        "Dcaron"                          => "\u{0010E}",
        "Dcy"                             => "\u{00414}",
        "Del"                             => "\u{02207}",
        "Delta"                           => "\u{00394}",
        "Dfr"                             => "\u{1D507}",
        "DiacriticalAcute"                => "\u{000B4}",
        "DiacriticalDot"                  => "\u{002D9}",
        "DiacriticalDoubleAcute"          => "\u{002DD}",
        "DiacriticalGrave"                => "\u{00060}",
        "DiacriticalTilde"                => "\u{002DC}",
        "Diamond"                         => "\u{022C4}",
        "DifferentialD"                   => "\u{02146}",
        "Dopf"                            => "\u{1D53B}",
        "Dot"                             => "\u{000A8}",
        "DotDot"                          => "\u{020DC}",
        "DotEqual"                        => "\u{02250}",
        "DoubleContourIntegral"           => "\u{0222F}",
        "DoubleDot"                       => "\u{000A8}",
        "DoubleDownArrow"                 => "\u{021D3}",
        "DoubleLeftArrow"                 => "\u{021D0}",
        "DoubleLeftRightArrow"            => "\u{021D4}",
        "DoubleLeftTee"                   => "\u{02AE4}",
        "DoubleLongLeftArrow"             => "\u{027F8}",
        "DoubleLongLeftRightArrow"        => "\u{027FA}",
        "DoubleLongRightArrow"            => "\u{027F9}",
        "DoubleRightArrow"                => "\u{021D2}",
        "DoubleRightTee"                  => "\u{022A8}",
        "DoubleUpArrow"                   => "\u{021D1}",
        "DoubleUpDownArrow"               => "\u{021D5}",
        "DoubleVerticalBar"               => "\u{02225}",
        "DownArrow"                       => "\u{02193}",
        "DownArrowBar"                    => "\u{02913}",
        "DownArrowUpArrow"                => "\u{021F5}",
        "DownBreve"                       => "\u{00311}",
        "DownLeftRightVector"             => "\u{02950}",
        "DownLeftTeeVector"               => "\u{0295E}",
        "DownLeftVector"                  => "\u{021BD}",
        "DownLeftVectorBar"               => "\u{02956}",
        "DownRightTeeVector"              => "\u{0295F}",
        "DownRightVector"                 => "\u{021C1}",
        "DownRightVectorBar"              => "\u{02957}",
        "DownTee"                         => "\u{022A4}",
        "DownTeeArrow"                    => "\u{021A7}",
        "Downarrow"                       => "\u{021D3}",
        "Dscr"                            => "\u{1D49F}",
        "Dstrok"                          => "\u{00110}",
        "ENG"                             => "\u{0014A}",
        "ETH"                             => "\u{000D0}",
        "Eacute"                          => "\u{000C9}",
        "Ecaron"                          => "\u{0011A}",
        "Ecirc"                           => "\u{000CA}",
        "Ecy"                             => "\u{0042D}",
        "Edot"                            => "\u{00116}",
        "Efr"                             => "\u{1D508}",
        "Egrave"                          => "\u{000C8}",
        "Element"                         => "\u{02208}",
        "Emacr"                           => "\u{00112}",
        "EmptySmallSquare"                => "\u{025FB}",
        "EmptyVerySmallSquare"            => "\u{025AB}",
        "Eogon"                           => "\u{00118}",
        "Eopf"                            => "\u{1D53C}",
        "Epsilon"                         => "\u{00395}",
        "Equal"                           => "\u{02A75}",
        "EqualTilde"                      => "\u{02242}",
        "Equilibrium"                     => "\u{021CC}",
        "Escr"                            => "\u{02130}",
        "Esim"                            => "\u{02A73}",
        "Eta"                             => "\u{00397}",
        "Euml"                            => "\u{000CB}",
        "Exists"                          => "\u{02203}",
        "ExponentialE"                    => "\u{02147}",
        "Fcy"                             => "\u{00424}",
        "Ffr"                             => "\u{1D509}",
        "FilledSmallSquare"               => "\u{025FC}",
        "FilledVerySmallSquare"           => "\u{025AA}",
        "Fopf"                            => "\u{1D53D}",
        "ForAll"                          => "\u{02200}",
        "Fouriertrf"                      => "\u{02131}",
        "Fscr"                            => "\u{02131}",
        "GJcy"                            => "\u{00403}",
        "GT"                              => "\u{0003E}",
        "Gamma"                           => "\u{00393}",
        "Gammad"                          => "\u{003DC}",
        "Gbreve"                          => "\u{0011E}",
        "Gcedil"                          => "\u{00122}",
        "Gcirc"                           => "\u{0011C}",
        "Gcy"                             => "\u{00413}",
        "Gdot"                            => "\u{00120}",
        "Gfr"                             => "\u{1D50A}",
        "Gg"                              => "\u{022D9}",
        "Gopf"                            => "\u{1D53E}",
        "GreaterEqual"                    => "\u{02265}",
        "GreaterEqualLess"                => "\u{022DB}",
        "GreaterFullEqual"                => "\u{02267}",
        "GreaterGreater"                  => "\u{02AA2}",
        "GreaterLess"                     => "\u{02277}",
        "GreaterSlantEqual"               => "\u{02A7E}",
        "GreaterTilde"                    => "\u{02273}",
        "Gscr"                            => "\u{1D4A2}",
        "Gt"                              => "\u{0226B}",
        "HARDcy"                          => "\u{0042A}",
        "Hacek"                           => "\u{002C7}",
        "Hat"                             => "\u{0005E}",
        "Hcirc"                           => "\u{00124}",
        "Hfr"                             => "\u{0210C}",
        "HilbertSpace"                    => "\u{0210B}",
        "Hopf"                            => "\u{0210D}",
        "HorizontalLine"                  => "\u{02500}",
        "Hscr"                            => "\u{0210B}",
        "Hstrok"                          => "\u{00126}",
        "HumpDownHump"                    => "\u{0224E}",
        "HumpEqual"                       => "\u{0224F}",
        "IEcy"                            => "\u{00415}",
        "IJlig"                           => "\u{00132}",
        "IOcy"                            => "\u{00401}",
        "Iacute"                          => "\u{000CD}",
        "Icirc"                           => "\u{000CE}",
        "Icy"                             => "\u{00418}",
        "Idot"                            => "\u{00130}",
        "Ifr"                             => "\u{02111}",
        "Igrave"                          => "\u{000CC}",
        "Im"                              => "\u{02111}",
        "Imacr"                           => "\u{0012A}",
        "ImaginaryI"                      => "\u{02148}",
        "Implies"                         => "\u{021D2}",
        "Int"                             => "\u{0222C}",
        "Integral"                        => "\u{0222B}",
        "Intersection"                    => "\u{022C2}",
        "InvisibleComma"                  => "\u{02063}",
        "InvisibleTimes"                  => "\u{02062}",
        "Iogon"                           => "\u{0012E}",
        "Iopf"                            => "\u{1D540}",
        "Iota"                            => "\u{00399}",
        "Iscr"                            => "\u{02110}",
        "Itilde"                          => "\u{00128}",
        "Iukcy"                           => "\u{00406}",
        "Iuml"                            => "\u{000CF}",
        "Jcirc"                           => "\u{00134}",
        "Jcy"                             => "\u{00419}",
        "Jfr"                             => "\u{1D50D}",
        "Jopf"                            => "\u{1D541}",
        "Jscr"                            => "\u{1D4A5}",
        "Jsercy"                          => "\u{00408}",
        "Jukcy"                           => "\u{00404}",
        "KHcy"                            => "\u{00425}",
        "KJcy"                            => "\u{0040C}",
        "Kappa"                           => "\u{0039A}",
        "Kcedil"                          => "\u{00136}",
        "Kcy"                             => "\u{0041A}",
        "Kfr"                             => "\u{1D50E}",
        "Kopf"                            => "\u{1D542}",
        "Kscr"                            => "\u{1D4A6}",
        "LJcy"                            => "\u{00409}",
        "LT"                              => "\u{0003C}",
        "Lacute"                          => "\u{00139}",
        "Lambda"                          => "\u{0039B}",
        "Lang"                            => "\u{027EA}",
        "Laplacetrf"                      => "\u{02112}",
        "Larr"                            => "\u{0219E}",
        "Lcaron"                          => "\u{0013D}",
        "Lcedil"                          => "\u{0013B}",
        "Lcy"                             => "\u{0041B}",
        "LeftAngleBracket"                => "\u{027E8}",
        "LeftArrow"                       => "\u{02190}",
        "LeftArrowBar"                    => "\u{021E4}",
        "LeftArrowRightArrow"             => "\u{021C6}",
        "LeftCeiling"                     => "\u{02308}",
        "LeftDoubleBracket"               => "\u{027E6}",
        "LeftDownTeeVector"               => "\u{02961}",
        "LeftDownVector"                  => "\u{021C3}",
        "LeftDownVectorBar"               => "\u{02959}",
        "LeftFloor"                       => "\u{0230A}",
        "LeftRightArrow"                  => "\u{02194}",
        "LeftRightVector"                 => "\u{0294E}",
        "LeftTee"                         => "\u{022A3}",
        "LeftTeeArrow"                    => "\u{021A4}",
        "LeftTeeVector"                   => "\u{0295A}",
        "LeftTriangle"                    => "\u{022B2}",
        "LeftTriangleBar"                 => "\u{029CF}",
        "LeftTriangleEqual"               => "\u{022B4}",
        "LeftUpDownVector"                => "\u{02951}",
        "LeftUpTeeVector"                 => "\u{02960}",
        "LeftUpVector"                    => "\u{021BF}",
        "LeftUpVectorBar"                 => "\u{02958}",
        "LeftVector"                      => "\u{021BC}",
        "LeftVectorBar"                   => "\u{02952}",
        "Leftarrow"                       => "\u{021D0}",
        "Leftrightarrow"                  => "\u{021D4}",
        "LessEqualGreater"                => "\u{022DA}",
        "LessFullEqual"                   => "\u{02266}",
        "LessGreater"                     => "\u{02276}",
        "LessLess"                        => "\u{02AA1}",
        "LessSlantEqual"                  => "\u{02A7D}",
        "LessTilde"                       => "\u{02272}",
        "Lfr"                             => "\u{1D50F}",
        "Ll"                              => "\u{022D8}",
        "Lleftarrow"                      => "\u{021DA}",
        "Lmidot"                          => "\u{0013F}",
        "LongLeftArrow"                   => "\u{027F5}",
        "LongLeftRightArrow"              => "\u{027F7}",
        "LongRightArrow"                  => "\u{027F6}",
        "Longleftarrow"                   => "\u{027F8}",
        "Longleftrightarrow"              => "\u{027FA}",
        "Longrightarrow"                  => "\u{027F9}",
        "Lopf"                            => "\u{1D543}",
        "LowerLeftArrow"                  => "\u{02199}",
        "LowerRightArrow"                 => "\u{02198}",
        "Lscr"                            => "\u{02112}",
        "Lsh"                             => "\u{021B0}",
        "Lstrok"                          => "\u{00141}",
        "Lt"                              => "\u{0226A}",
        "Map"                             => "\u{02905}",
        "Mcy"                             => "\u{0041C}",
        "MediumSpace"                     => "\u{0205F}",
        "Mellintrf"                       => "\u{02133}",
        "Mfr"                             => "\u{1D510}",
        "MinusPlus"                       => "\u{02213}",
        "Mopf"                            => "\u{1D544}",
        "Mscr"                            => "\u{02133}",
        "Mu"                              => "\u{0039C}",
        "NJcy"                            => "\u{0040A}",
        "Nacute"                          => "\u{00143}",
        "Ncaron"                          => "\u{00147}",
        "Ncedil"                          => "\u{00145}",
        "Ncy"                             => "\u{0041D}",
        "NegativeMediumSpace"             => "\u{0200B}",
        "NegativeThickSpace"              => "\u{0200B}",
        "NegativeThinSpace"               => "\u{0200B}",
        "NegativeVeryThinSpace"           => "\u{0200B}",
        "NestedGreaterGreater"            => "\u{0226B}",
        "NestedLessLess"                  => "\u{0226A}",
        "NewLine"                         => "\u{0000A}",
        "Nfr"                             => "\u{1D511}",
        "NoBreak"                         => "\u{02060}",
        "NonBreakingSpace"                => "\u{000A0}",
        "Nopf"                            => "\u{02115}",
        "Not"                             => "\u{02AEC}",
        "NotCongruent"                    => "\u{02262}",
        "NotCupCap"                       => "\u{0226D}",
        "NotDoubleVerticalBar"            => "\u{02226}",
        "NotElement"                      => "\u{02209}",
        "NotEqual"                        => "\u{02260}",
        "NotEqualTilde"                   => "\u{02242}\u{00338}",
        "NotExists"                       => "\u{02204}",
        "NotGreater"                      => "\u{0226F}",
        "NotGreaterEqual"                 => "\u{02271}",
        "NotGreaterFullEqual"             => "\u{02267}\u{00338}",
        "NotGreaterGreater"               => "\u{0226B}\u{00338}",
        "NotGreaterLess"                  => "\u{02279}",
        "NotGreaterSlantEqual"            => "\u{02A7E}\u{00338}",
        "NotGreaterTilde"                 => "\u{02275}",
        "NotHumpDownHump"                 => "\u{0224E}\u{00338}",
        "NotHumpEqual"                    => "\u{0224F}\u{00338}",
        "NotLeftTriangle"                 => "\u{022EA}",
        "NotLeftTriangleBar"              => "\u{029CF}\u{00338}",
        "NotLeftTriangleEqual"            => "\u{022EC}",
        "NotLess"                         => "\u{0226E}",
        "NotLessEqual"                    => "\u{02270}",
        "NotLessGreater"                  => "\u{02278}",
        "NotLessLess"                     => "\u{0226A}\u{00338}",
        "NotLessSlantEqual"               => "\u{02A7D}\u{00338}",
        "NotLessTilde"                    => "\u{02274}",
        "NotNestedGreaterGreater"         => "\u{02AA2}\u{00338}",
        "NotNestedLessLess"               => "\u{02AA1}\u{00338}",
        "NotPrecedes"                     => "\u{02280}",
        "NotPrecedesEqual"                => "\u{02AAF}\u{00338}",
        "NotPrecedesSlantEqual"           => "\u{022E0}",
        "NotReverseElement"               => "\u{0220C}",
        "NotRightTriangle"                => "\u{022EB}",
        "NotRightTriangleBar"             => "\u{029D0}\u{00338}",
        "NotRightTriangleEqual"           => "\u{022ED}",
        "NotSquareSubset"                 => "\u{0228F}\u{00338}",
        "NotSquareSubsetEqual"            => "\u{022E2}",
        "NotSquareSuperset"               => "\u{02290}\u{00338}",
        "NotSquareSupersetEqual"          => "\u{022E3}",
        "NotSubset"                       => "\u{02282}\u{020D2}",
        "NotSubsetEqual"                  => "\u{02288}",
        "NotSucceeds"                     => "\u{02281}",
        "NotSucceedsEqual"                => "\u{02AB0}\u{00338}",
        "NotSucceedsSlantEqual"           => "\u{022E1}",
        "NotSucceedsTilde"                => "\u{0227F}\u{00338}",
        "NotSuperset"                     => "\u{02283}\u{020D2}",
        "NotSupersetEqual"                => "\u{02289}",
        "NotTilde"                        => "\u{02241}",
        "NotTildeEqual"                   => "\u{02244}",
        "NotTildeFullEqual"               => "\u{02247}",
        "NotTildeTilde"                   => "\u{02249}",
        "NotVerticalBar"                  => "\u{02224}",
        "Nscr"                            => "\u{1D4A9}",
        "Ntilde"                          => "\u{000D1}",
        "Nu"                              => "\u{0039D}",
        "OElig"                           => "\u{00152}",
        "Oacute"                          => "\u{000D3}",
        "Ocirc"                           => "\u{000D4}",
        "Ocy"                             => "\u{0041E}",
        "Odblac"                          => "\u{00150}",
        "Ofr"                             => "\u{1D512}",
        "Ograve"                          => "\u{000D2}",
        "Omacr"                           => "\u{0014C}",
        "Omega"                           => "\u{003A9}",
        "Omicron"                         => "\u{0039F}",
        "Oopf"                            => "\u{1D546}",
        "OpenCurlyDoubleQuote"            => "\u{0201C}",
        "OpenCurlyQuote"                  => "\u{02018}",
        "Or"                              => "\u{02A54}",
        "Oscr"                            => "\u{1D4AA}",
        "Oslash"                          => "\u{000D8}",
        "Otilde"                          => "\u{000D5}",
        "Otimes"                          => "\u{02A37}",
        "Ouml"                            => "\u{000D6}",
        "OverBar"                         => "\u{0203E}",
        "OverBrace"                       => "\u{023DE}",
        "OverBracket"                     => "\u{023B4}",
        "OverParenthesis"                 => "\u{023DC}",
        "PartialD"                        => "\u{02202}",
        "Pcy"                             => "\u{0041F}",
        "Pfr"                             => "\u{1D513}",
        "Phi"                             => "\u{003A6}",
        "Pi"                              => "\u{003A0}",
        "PlusMinus"                       => "\u{000B1}",
        "Poincareplane"                   => "\u{0210C}",
        "Popf"                            => "\u{02119}",
        "Pr"                              => "\u{02ABB}",
        "Precedes"                        => "\u{0227A}",
        "PrecedesEqual"                   => "\u{02AAF}",
        "PrecedesSlantEqual"              => "\u{0227C}",
        "PrecedesTilde"                   => "\u{0227E}",
        "Prime"                           => "\u{02033}",
        "Product"                         => "\u{0220F}",
        "Proportion"                      => "\u{02237}",
        "Proportional"                    => "\u{0221D}",
        "Pscr"                            => "\u{1D4AB}",
        "Psi"                             => "\u{003A8}",
        "QUOT"                            => "\u{00022}",
        "Qfr"                             => "\u{1D514}",
        "Qopf"                            => "\u{0211A}",
        "Qscr"                            => "\u{1D4AC}",
        "RBarr"                           => "\u{02910}",
        "REG"                             => "\u{000AE}",
        "Racute"                          => "\u{00154}",
        "Rang"                            => "\u{027EB}",
        "Rarr"                            => "\u{021A0}",
        "Rarrtl"                          => "\u{02916}",
        "Rcaron"                          => "\u{00158}",
        "Rcedil"                          => "\u{00156}",
        "Rcy"                             => "\u{00420}",
        "Re"                              => "\u{0211C}",
        "ReverseElement"                  => "\u{0220B}",
        "ReverseEquilibrium"              => "\u{021CB}",
        "ReverseUpEquilibrium"            => "\u{0296F}",
        "Rfr"                             => "\u{0211C}",
        "Rho"                             => "\u{003A1}",
        "RightAngleBracket"               => "\u{027E9}",
        "RightArrow"                      => "\u{02192}",
        "RightArrowBar"                   => "\u{021E5}",
        "RightArrowLeftArrow"             => "\u{021C4}",
        "RightCeiling"                    => "\u{02309}",
        "RightDoubleBracket"              => "\u{027E7}",
        "RightDownTeeVector"              => "\u{0295D}",
        "RightDownVector"                 => "\u{021C2}",
        "RightDownVectorBar"              => "\u{02955}",
        "RightFloor"                      => "\u{0230B}",
        "RightTee"                        => "\u{022A2}",
        "RightTeeArrow"                   => "\u{021A6}",
        "RightTeeVector"                  => "\u{0295B}",
        "RightTriangle"                   => "\u{022B3}",
        "RightTriangleBar"                => "\u{029D0}",
        "RightTriangleEqual"              => "\u{022B5}",
        "RightUpDownVector"               => "\u{0294F}",
        "RightUpTeeVector"                => "\u{0295C}",
        "RightUpVector"                   => "\u{021BE}",
        "RightUpVectorBar"                => "\u{02954}",
        "RightVector"                     => "\u{021C0}",
        "RightVectorBar"                  => "\u{02953}",
        "Rightarrow"                      => "\u{021D2}",
        "Ropf"                            => "\u{0211D}",
        "RoundImplies"                    => "\u{02970}",
        "Rrightarrow"                     => "\u{021DB}",
        "Rscr"                            => "\u{0211B}",
        "Rsh"                             => "\u{021B1}",
        "RuleDelayed"                     => "\u{029F4}",
        "SHCHcy"                          => "\u{00429}",
        "SHcy"                            => "\u{00428}",
        "SOFTcy"                          => "\u{0042C}",
        "Sacute"                          => "\u{0015A}",
        "Sc"                              => "\u{02ABC}",
        "Scaron"                          => "\u{00160}",
        "Scedil"                          => "\u{0015E}",
        "Scirc"                           => "\u{0015C}",
        "Scy"                             => "\u{00421}",
        "Sfr"                             => "\u{1D516}",
        "ShortDownArrow"                  => "\u{02193}",
        "ShortLeftArrow"                  => "\u{02190}",
        "ShortRightArrow"                 => "\u{02192}",
        "ShortUpArrow"                    => "\u{02191}",
        "Sigma"                           => "\u{003A3}",
        "SmallCircle"                     => "\u{02218}",
        "Sopf"                            => "\u{1D54A}",
        "Sqrt"                            => "\u{0221A}",
        "Square"                          => "\u{025A1}",
        "SquareIntersection"              => "\u{02293}",
        "SquareSubset"                    => "\u{0228F}",
        "SquareSubsetEqual"               => "\u{02291}",
        "SquareSuperset"                  => "\u{02290}",
        "SquareSupersetEqual"             => "\u{02292}",
        "SquareUnion"                     => "\u{02294}",
        "Sscr"                            => "\u{1D4AE}",
        "Star"                            => "\u{022C6}",
        "Sub"                             => "\u{022D0}",
        "Subset"                          => "\u{022D0}",
        "SubsetEqual"                     => "\u{02286}",
        "Succeeds"                        => "\u{0227B}",
        "SucceedsEqual"                   => "\u{02AB0}",
        "SucceedsSlantEqual"              => "\u{0227D}",
        "SucceedsTilde"                   => "\u{0227F}",
        "SuchThat"                        => "\u{0220B}",
        "Sum"                             => "\u{02211}",
        "Sup"                             => "\u{022D1}",
        "Superset"                        => "\u{02283}",
        "SupersetEqual"                   => "\u{02287}",
        "Supset"                          => "\u{022D1}",
        "THORN"                           => "\u{000DE}",
        "TRADE"                           => "\u{02122}",
        "TSHcy"                           => "\u{0040B}",
        "TScy"                            => "\u{00426}",
        "Tab"                             => "\u{00009}",
        "Tau"                             => "\u{003A4}",
        "Tcaron"                          => "\u{00164}",
        "Tcedil"                          => "\u{00162}",
        "Tcy"                             => "\u{00422}",
        "Tfr"                             => "\u{1D517}",
        "Therefore"                       => "\u{02234}",
        "Theta"                           => "\u{00398}",
        "ThickSpace"                      => "\u{0205F}\u{0200A}",
        "ThinSpace"                       => "\u{02009}",
        "Tilde"                           => "\u{0223C}",
        "TildeEqual"                      => "\u{02243}",
        "TildeFullEqual"                  => "\u{02245}",
        "TildeTilde"                      => "\u{02248}",
        "Topf"                            => "\u{1D54B}",
        "TripleDot"                       => "\u{020DB}",
        "Tscr"                            => "\u{1D4AF}",
        "Tstrok"                          => "\u{00166}",
        "Uacute"                          => "\u{000DA}",
        "Uarr"                            => "\u{0219F}",
        "Uarrocir"                        => "\u{02949}",
        "Ubrcy"                           => "\u{0040E}",
        "Ubreve"                          => "\u{0016C}",
        "Ucirc"                           => "\u{000DB}",
        "Ucy"                             => "\u{00423}",
        "Udblac"                          => "\u{00170}",
        "Ufr"                             => "\u{1D518}",
        "Ugrave"                          => "\u{000D9}",
        "Umacr"                           => "\u{0016A}",
        "UnderBar"                        => "\u{0005F}",
        "UnderBrace"                      => "\u{023DF}",
        "UnderBracket"                    => "\u{023B5}",
        "UnderParenthesis"                => "\u{023DD}",
        "Union"                           => "\u{022C3}",
        "UnionPlus"                       => "\u{0228E}",
        "Uogon"                           => "\u{00172}",
        "Uopf"                            => "\u{1D54C}",
        "UpArrow"                         => "\u{02191}",
        "UpArrowBar"                      => "\u{02912}",
        "UpArrowDownArrow"                => "\u{021C5}",
        "UpDownArrow"                     => "\u{02195}",
        "UpEquilibrium"                   => "\u{0296E}",
        "UpTee"                           => "\u{022A5}",
        "UpTeeArrow"                      => "\u{021A5}",
        "Uparrow"                         => "\u{021D1}",
        "Updownarrow"                     => "\u{021D5}",
        "UpperLeftArrow"                  => "\u{02196}",
        "UpperRightArrow"                 => "\u{02197}",
        "Upsi"                            => "\u{003D2}",
        "Upsilon"                         => "\u{003A5}",
        "Uring"                           => "\u{0016E}",
        "Uscr"                            => "\u{1D4B0}",
        "Utilde"                          => "\u{00168}",
        "Uuml"                            => "\u{000DC}",
        "VDash"                           => "\u{022AB}",
        "Vbar"                            => "\u{02AEB}",
        "Vcy"                             => "\u{00412}",
        "Vdash"                           => "\u{022A9}",
        "Vdashl"                          => "\u{02AE6}",
        "Vee"                             => "\u{022C1}",
        "Verbar"                          => "\u{02016}",
        "Vert"                            => "\u{02016}",
        "VerticalBar"                     => "\u{02223}",
        "VerticalLine"                    => "\u{0007C}",
        "VerticalSeparator"               => "\u{02758}",
        "VerticalTilde"                   => "\u{02240}",
        "VeryThinSpace"                   => "\u{0200A}",
        "Vfr"                             => "\u{1D519}",
        "Vopf"                            => "\u{1D54D}",
        "Vscr"                            => "\u{1D4B1}",
        "Vvdash"                          => "\u{022AA}",
        "Wcirc"                           => "\u{00174}",
        "Wedge"                           => "\u{022C0}",
        "Wfr"                             => "\u{1D51A}",
        "Wopf"                            => "\u{1D54E}",
        "Wscr"                            => "\u{1D4B2}",
        "Xfr"                             => "\u{1D51B}",
        "Xi"                              => "\u{0039E}",
        "Xopf"                            => "\u{1D54F}",
        "Xscr"                            => "\u{1D4B3}",
        "YAcy"                            => "\u{0042F}",
        "YIcy"                            => "\u{00407}",
        "YUcy"                            => "\u{0042E}",
        "Yacute"                          => "\u{000DD}",
        "Ycirc"                           => "\u{00176}",
        "Ycy"                             => "\u{0042B}",
        "Yfr"                             => "\u{1D51C}",
        "Yopf"                            => "\u{1D550}",
        "Yscr"                            => "\u{1D4B4}",
        "Yuml"                            => "\u{00178}",
        "ZHcy"                            => "\u{00416}",
        "Zacute"                          => "\u{00179}",
        "Zcaron"                          => "\u{0017D}",
        "Zcy"                             => "\u{00417}",
        "Zdot"                            => "\u{0017B}",
        "ZeroWidthSpace"                  => "\u{0200B}",
        "Zeta"                            => "\u{00396}",
        "Zfr"                             => "\u{02128}",
        "Zopf"                            => "\u{02124}",
        "Zscr"                            => "\u{1D4B5}",
        "aacute"                          => "\u{000E1}",
        "abreve"                          => "\u{00103}",
        "ac"                              => "\u{0223E}",
        "acE"                             => "\u{0223E}\u{00333}",
        "acd"                             => "\u{0223F}",
        "acirc"                           => "\u{000E2}",
        "acute"                           => "\u{000B4}",
        "acy"                             => "\u{00430}",
        "aelig"                           => "\u{000E6}",
        "af"                              => "\u{02061}",
        "afr"                             => "\u{1D51E}",
        "agrave"                          => "\u{000E0}",
        "alefsym"                         => "\u{02135}",
        "aleph"                           => "\u{02135}",
        "alpha"                           => "\u{003B1}",
        "amacr"                           => "\u{00101}",
        "amalg"                           => "\u{02A3F}",
        "amp"                             => "\u{00026}",
        "and"                             => "\u{02227}",
        "andand"                          => "\u{02A55}",
        "andd"                            => "\u{02A5C}",
        "andslope"                        => "\u{02A58}",
        "andv"                            => "\u{02A5A}",
        "ang"                             => "\u{02220}",
        "ange"                            => "\u{029A4}",
        "angle"                           => "\u{02220}",
        "angmsd"                          => "\u{02221}",
        "angmsdaa"                        => "\u{029A8}",
        "angmsdab"                        => "\u{029A9}",
        "angmsdac"                        => "\u{029AA}",
        "angmsdad"                        => "\u{029AB}",
        "angmsdae"                        => "\u{029AC}",
        "angmsdaf"                        => "\u{029AD}",
        "angmsdag"                        => "\u{029AE}",
        "angmsdah"                        => "\u{029AF}",
        "angrt"                           => "\u{0221F}",
        "angrtvb"                         => "\u{022BE}",
        "angrtvbd"                        => "\u{0299D}",
        "angsph"                          => "\u{02222}",
        "angst"                           => "\u{000C5}",
        "angzarr"                         => "\u{0237C}",
        "aogon"                           => "\u{00105}",
        "aopf"                            => "\u{1D552}",
        "ap"                              => "\u{02248}",
        "apE"                             => "\u{02A70}",
        "apacir"                          => "\u{02A6F}",
        "ape"                             => "\u{0224A}",
        "apid"                            => "\u{0224B}",
        "apos"                            => "\u{00027}",
        "approx"                          => "\u{02248}",
        "approxeq"                        => "\u{0224A}",
        "aring"                           => "\u{000E5}",
        "ascr"                            => "\u{1D4B6}",
        "ast"                             => "\u{0002A}",
        "asymp"                           => "\u{02248}",
        "asympeq"                         => "\u{0224D}",
        "atilde"                          => "\u{000E3}",
        "auml"                            => "\u{000E4}",
        "awconint"                        => "\u{02233}",
        "awint"                           => "\u{02A11}",
        "bNot"                            => "\u{02AED}",
        "backcong"                        => "\u{0224C}",
        "backepsilon"                     => "\u{003F6}",
        "backprime"                       => "\u{02035}",
        "backsim"                         => "\u{0223D}",
        "backsimeq"                       => "\u{022CD}",
        "barvee"                          => "\u{022BD}",
        "barwed"                          => "\u{02305}",
        "barwedge"                        => "\u{02305}",
        "bbrk"                            => "\u{023B5}",
        "bbrktbrk"                        => "\u{023B6}",
        "bcong"                           => "\u{0224C}",
        "bcy"                             => "\u{00431}",
        "bdquo"                           => "\u{0201E}",
        "becaus"                          => "\u{02235}",
        "because"                         => "\u{02235}",
        "bemptyv"                         => "\u{029B0}",
        "bepsi"                           => "\u{003F6}",
        "bernou"                          => "\u{0212C}",
        "beta"                            => "\u{003B2}",
        "beth"                            => "\u{02136}",
        "between"                         => "\u{0226C}",
        "bfr"                             => "\u{1D51F}",
        "bigcap"                          => "\u{022C2}",
        "bigcirc"                         => "\u{025EF}",
        "bigcup"                          => "\u{022C3}",
        "bigodot"                         => "\u{02A00}",
        "bigoplus"                        => "\u{02A01}",
        "bigotimes"                       => "\u{02A02}",
        "bigsqcup"                        => "\u{02A06}",
        "bigstar"                         => "\u{02605}",
        "bigtriangledown"                 => "\u{025BD}",
        "bigtriangleup"                   => "\u{025B3}",
        "biguplus"                        => "\u{02A04}",
        "bigvee"                          => "\u{022C1}",
        "bigwedge"                        => "\u{022C0}",
        "bkarow"                          => "\u{0290D}",
        "blacklozenge"                    => "\u{029EB}",
        "blacksquare"                     => "\u{025AA}",
        "blacktriangle"                   => "\u{025B4}",
        "blacktriangledown"               => "\u{025BE}",
        "blacktriangleleft"               => "\u{025C2}",
        "blacktriangleright"              => "\u{025B8}",
        "blank"                           => "\u{02423}",
        "blk12"                           => "\u{02592}",
        "blk14"                           => "\u{02591}",
        "blk34"                           => "\u{02593}",
        "block"                           => "\u{02588}",
        "bne"                             => "\u{0003D}\u{020E5}",
        "bnequiv"                         => "\u{02261}\u{020E5}",
        "bnot"                            => "\u{02310}",
        "bopf"                            => "\u{1D553}",
        "bot"                             => "\u{022A5}",
        "bottom"                          => "\u{022A5}",
        "bowtie"                          => "\u{022C8}",
        "boxDL"                           => "\u{02557}",
        "boxDR"                           => "\u{02554}",
        "boxDl"                           => "\u{02556}",
        "boxDr"                           => "\u{02553}",
        "boxH"                            => "\u{02550}",
        "boxHD"                           => "\u{02566}",
        "boxHU"                           => "\u{02569}",
        "boxHd"                           => "\u{02564}",
        "boxHu"                           => "\u{02567}",
        "boxUL"                           => "\u{0255D}",
        "boxUR"                           => "\u{0255A}",
        "boxUl"                           => "\u{0255C}",
        "boxUr"                           => "\u{02559}",
        "boxV"                            => "\u{02551}",
        "boxVH"                           => "\u{0256C}",
        "boxVL"                           => "\u{02563}",
        "boxVR"                           => "\u{02560}",
        "boxVh"                           => "\u{0256B}",
        "boxVl"                           => "\u{02562}",
        "boxVr"                           => "\u{0255F}",
        "boxbox"                          => "\u{029C9}",
        "boxdL"                           => "\u{02555}",
        "boxdR"                           => "\u{02552}",
        "boxdl"                           => "\u{02510}",
        "boxdr"                           => "\u{0250C}",
        "boxh"                            => "\u{02500}",
        "boxhD"                           => "\u{02565}",
        "boxhU"                           => "\u{02568}",
        "boxhd"                           => "\u{0252C}",
        "boxhu"                           => "\u{02534}",
        "boxminus"                        => "\u{0229F}",
        "boxplus"                         => "\u{0229E}",
        "boxtimes"                        => "\u{022A0}",
        "boxuL"                           => "\u{0255B}",
        "boxuR"                           => "\u{02558}",
        "boxul"                           => "\u{02518}",
        "boxur"                           => "\u{02514}",
        "boxv"                            => "\u{02502}",
        "boxvH"                           => "\u{0256A}",
        "boxvL"                           => "\u{02561}",
        "boxvR"                           => "\u{0255E}",
        "boxvh"                           => "\u{0253C}",
        "boxvl"                           => "\u{02524}",
        "boxvr"                           => "\u{0251C}",
        "bprime"                          => "\u{02035}",
        "breve"                           => "\u{002D8}",
        "brvbar"                          => "\u{000A6}",
        "bscr"                            => "\u{1D4B7}",
        "bsemi"                           => "\u{0204F}",
        "bsim"                            => "\u{0223D}",
        "bsime"                           => "\u{022CD}",
        "bsol"                            => "\u{0005C}",
        "bsolb"                           => "\u{029C5}",
        "bsolhsub"                        => "\u{027C8}",
        "bull"                            => "\u{02022}",
        "bullet"                          => "\u{02022}",
        "bump"                            => "\u{0224E}",
        "bumpE"                           => "\u{02AAE}",
        "bumpe"                           => "\u{0224F}",
        "bumpeq"                          => "\u{0224F}",
        "cacute"                          => "\u{00107}",
        "cap"                             => "\u{02229}",
        "capand"                          => "\u{02A44}",
        "capbrcup"                        => "\u{02A49}",
        "capcap"                          => "\u{02A4B}",
        "capcup"                          => "\u{02A47}",
        "capdot"                          => "\u{02A40}",
        "caps"                            => "\u{02229}\u{0FE00}",
        "caret"                           => "\u{02041}",
        "caron"                           => "\u{002C7}",
        "ccaps"                           => "\u{02A4D}",
        "ccaron"                          => "\u{0010D}",
        "ccedil"                          => "\u{000E7}",
        "ccirc"                           => "\u{00109}",
        "ccups"                           => "\u{02A4C}",
        "ccupssm"                         => "\u{02A50}",
        "cdot"                            => "\u{0010B}",
        "cedil"                           => "\u{000B8}",
        "cemptyv"                         => "\u{029B2}",
        "cent"                            => "\u{000A2}",
        "centerdot"                       => "\u{000B7}",
        "cfr"                             => "\u{1D520}",
        "chcy"                            => "\u{00447}",
        "check"                           => "\u{02713}",
        "checkmark"                       => "\u{02713}",
        "chi"                             => "\u{003C7}",
        "cir"                             => "\u{025CB}",
        "cirE"                            => "\u{029C3}",
        "circ"                            => "\u{002C6}",
        "circeq"                          => "\u{02257}",
        "circlearrowleft"                 => "\u{021BA}",
        "circlearrowright"                => "\u{021BB}",
        "circledR"                        => "\u{000AE}",
        "circledS"                        => "\u{024C8}",
        "circledast"                      => "\u{0229B}",
        "circledcirc"                     => "\u{0229A}",
        "circleddash"                     => "\u{0229D}",
        "cire"                            => "\u{02257}",
        "cirfnint"                        => "\u{02A10}",
        "cirmid"                          => "\u{02AEF}",
        "cirscir"                         => "\u{029C2}",
        "clubs"                           => "\u{02663}",
        "clubsuit"                        => "\u{02663}",
        "colon"                           => "\u{0003A}",
        "colone"                          => "\u{02254}",
        "coloneq"                         => "\u{02254}",
        "comma"                           => "\u{0002C}",
        "commat"                          => "\u{00040}",
        "comp"                            => "\u{02201}",
        "compfn"                          => "\u{02218}",
        "complement"                      => "\u{02201}",
        "complexes"                       => "\u{02102}",
        "cong"                            => "\u{02245}",
        "congdot"                         => "\u{02A6D}",
        "conint"                          => "\u{0222E}",
        "copf"                            => "\u{1D554}",
        "coprod"                          => "\u{02210}",
        "copy"                            => "\u{000A9}",
        "copysr"                          => "\u{02117}",
        "crarr"                           => "\u{021B5}",
        "cross"                           => "\u{02717}",
        "cscr"                            => "\u{1D4B8}",
        "csub"                            => "\u{02ACF}",
        "csube"                           => "\u{02AD1}",
        "csup"                            => "\u{02AD0}",
        "csupe"                           => "\u{02AD2}",
        "ctdot"                           => "\u{022EF}",
        "cudarrl"                         => "\u{02938}",
        "cudarrr"                         => "\u{02935}",
        "cuepr"                           => "\u{022DE}",
        "cuesc"                           => "\u{022DF}",
        "cularr"                          => "\u{021B6}",
        "cularrp"                         => "\u{0293D}",
        "cup"                             => "\u{0222A}",
        "cupbrcap"                        => "\u{02A48}",
        "cupcap"                          => "\u{02A46}",
        "cupcup"                          => "\u{02A4A}",
        "cupdot"                          => "\u{0228D}",
        "cupor"                           => "\u{02A45}",
        "cups"                            => "\u{0222A}\u{0FE00}",
        "curarr"                          => "\u{021B7}",
        "curarrm"                         => "\u{0293C}",
        "curlyeqprec"                     => "\u{022DE}",
        "curlyeqsucc"                     => "\u{022DF}",
        "curlyvee"                        => "\u{022CE}",
        "curlywedge"                      => "\u{022CF}",
        "curren"                          => "\u{000A4}",
        "curvearrowleft"                  => "\u{021B6}",
        "curvearrowright"                 => "\u{021B7}",
        "cuvee"                           => "\u{022CE}",
        "cuwed"                           => "\u{022CF}",
        "cwconint"                        => "\u{02232}",
        "cwint"                           => "\u{02231}",
        "cylcty"                          => "\u{0232D}",
        "dArr"                            => "\u{021D3}",
        "dHar"                            => "\u{02965}",
        "dagger"                          => "\u{02020}",
        "daleth"                          => "\u{02138}",
        "darr"                            => "\u{02193}",
        "dash"                            => "\u{02010}",
        "dashv"                           => "\u{022A3}",
        "dbkarow"                         => "\u{0290F}",
        "dblac"                           => "\u{002DD}",
        "dcaron"                          => "\u{0010F}",
        "dcy"                             => "\u{00434}",
        "dd"                              => "\u{02146}",
        "ddagger"                         => "\u{02021}",
        "ddarr"                           => "\u{021CA}",
        "ddotseq"                         => "\u{02A77}",
        "deg"                             => "\u{000B0}",
        "delta"                           => "\u{003B4}",
        "demptyv"                         => "\u{029B1}",
        "dfisht"                          => "\u{0297F}",
        "dfr"                             => "\u{1D521}",
        "dharl"                           => "\u{021C3}",
        "dharr"                           => "\u{021C2}",
        "diam"                            => "\u{022C4}",
        "diamond"                         => "\u{022C4}",
        "diamondsuit"                     => "\u{02666}",
        "diams"                           => "\u{02666}",
        "die"                             => "\u{000A8}",
        "digamma"                         => "\u{003DD}",
        "disin"                           => "\u{022F2}",
        "div"                             => "\u{000F7}",
        "divide"                          => "\u{000F7}",
        "divideontimes"                   => "\u{022C7}",
        "divonx"                          => "\u{022C7}",
        "djcy"                            => "\u{00452}",
        "dlcorn"                          => "\u{0231E}",
        "dlcrop"                          => "\u{0230D}",
        "dollar"                          => "\u{00024}",
        "dopf"                            => "\u{1D555}",
        "dot"                             => "\u{002D9}",
        "doteq"                           => "\u{02250}",
        "doteqdot"                        => "\u{02251}",
        "dotminus"                        => "\u{02238}",
        "dotplus"                         => "\u{02214}",
        "dotsquare"                       => "\u{022A1}",
        "doublebarwedge"                  => "\u{02306}",
        "downarrow"                       => "\u{02193}",
        "downdownarrows"                  => "\u{021CA}",
        "downharpoonleft"                 => "\u{021C3}",
        "downharpoonright"                => "\u{021C2}",
        "drbkarow"                        => "\u{02910}",
        "drcorn"                          => "\u{0231F}",
        "drcrop"                          => "\u{0230C}",
        "dscr"                            => "\u{1D4B9}",
        "dscy"                            => "\u{00455}",
        "dsol"                            => "\u{029F6}",
        "dstrok"                          => "\u{00111}",
        "dtdot"                           => "\u{022F1}",
        "dtri"                            => "\u{025BF}",
        "dtrif"                           => "\u{025BE}",
        "duarr"                           => "\u{021F5}",
        "duhar"                           => "\u{0296F}",
        "dwangle"                         => "\u{029A6}",
        "dzcy"                            => "\u{0045F}",
        "dzigrarr"                        => "\u{027FF}",
        "eDDot"                           => "\u{02A77}",
        "eDot"                            => "\u{02251}",
        "eacute"                          => "\u{000E9}",
        "easter"                          => "\u{02A6E}",
        "ecaron"                          => "\u{0011B}",
        "ecir"                            => "\u{02256}",
        "ecirc"                           => "\u{000EA}",
        "ecolon"                          => "\u{02255}",
        "ecy"                             => "\u{0044D}",
        "edot"                            => "\u{00117}",
        "ee"                              => "\u{02147}",
        "efDot"                           => "\u{02252}",
        "efr"                             => "\u{1D522}",
        "eg"                              => "\u{02A9A}",
        "egrave"                          => "\u{000E8}",
        "egs"                             => "\u{02A96}",
        "egsdot"                          => "\u{02A98}",
        "el"                              => "\u{02A99}",
        "elinters"                        => "\u{023E7}",
        "ell"                             => "\u{02113}",
        "els"                             => "\u{02A95}",
        "elsdot"                          => "\u{02A97}",
        "emacr"                           => "\u{00113}",
        "empty"                           => "\u{02205}",
        "emptyset"                        => "\u{02205}",
        "emptyv"                          => "\u{02205}",
        "emsp"                            => "\u{02003}",
        "emsp13"                          => "\u{02004}",
        "emsp14"                          => "\u{02005}",
        "eng"                             => "\u{0014B}",
        "ensp"                            => "\u{02002}",
        "eogon"                           => "\u{00119}",
        "eopf"                            => "\u{1D556}",
        "epar"                            => "\u{022D5}",
        "eparsl"                          => "\u{029E3}",
        "eplus"                           => "\u{02A71}",
        "epsi"                            => "\u{003B5}",
        "epsilon"                         => "\u{003B5}",
        "epsiv"                           => "\u{003F5}",
        "eqcirc"                          => "\u{02256}",
        "eqcolon"                         => "\u{02255}",
        "eqsim"                           => "\u{02242}",
        "eqslantgtr"                      => "\u{02A96}",
        "eqslantless"                     => "\u{02A95}",
        "equals"                          => "\u{0003D}",
        "equest"                          => "\u{0225F}",
        "equiv"                           => "\u{02261}",
        "equivDD"                         => "\u{02A78}",
        "eqvparsl"                        => "\u{029E5}",
        "erDot"                           => "\u{02253}",
        "erarr"                           => "\u{02971}",
        "escr"                            => "\u{0212F}",
        "esdot"                           => "\u{02250}",
        "esim"                            => "\u{02242}",
        "eta"                             => "\u{003B7}",
        "eth"                             => "\u{000F0}",
        "euml"                            => "\u{000EB}",
        "euro"                            => "\u{020AC}",
        "excl"                            => "\u{00021}",
        "exist"                           => "\u{02203}",
        "expectation"                     => "\u{02130}",
        "exponentiale"                    => "\u{02147}",
        "fallingdotseq"                   => "\u{02252}",
        "fcy"                             => "\u{00444}",
        "female"                          => "\u{02640}",
        "ffilig"                          => "\u{0FB03}",
        "fflig"                           => "\u{0FB00}",
        "ffllig"                          => "\u{0FB04}",
        "ffr"                             => "\u{1D523}",
        "filig"                           => "\u{0FB01}",
        "fjlig"                           => "\u{00066}\u{0006A}",
        "flat"                            => "\u{0266D}",
        "fllig"                           => "\u{0FB02}",
        "fltns"                           => "\u{025B1}",
        "fnof"                            => "\u{00192}",
        "fopf"                            => "\u{1D557}",
        "forall"                          => "\u{02200}",
        "fork"                            => "\u{022D4}",
        "forkv"                           => "\u{02AD9}",
        "fpartint"                        => "\u{02A0D}",
        "frac12"                          => "\u{000BD}",
        "frac13"                          => "\u{02153}",
        "frac14"                          => "\u{000BC}",
        "frac15"                          => "\u{02155}",
        "frac16"                          => "\u{02159}",
        "frac18"                          => "\u{0215B}",
        "frac23"                          => "\u{02154}",
        "frac25"                          => "\u{02156}",
        "frac34"                          => "\u{000BE}",
        "frac35"                          => "\u{02157}",
        "frac38"                          => "\u{0215C}",
        "frac45"                          => "\u{02158}",
        "frac56"                          => "\u{0215A}",
        "frac58"                          => "\u{0215D}",
        "frac78"                          => "\u{0215E}",
        "frasl"                           => "\u{02044}",
        "frown"                           => "\u{02322}",
        "fscr"                            => "\u{1D4BB}",
        "gE"                              => "\u{02267}",
        "gEl"                             => "\u{02A8C}",
        "gacute"                          => "\u{001F5}",
        "gamma"                           => "\u{003B3}",
        "gammad"                          => "\u{003DD}",
        "gap"                             => "\u{02A86}",
        "gbreve"                          => "\u{0011F}",
        "gcirc"                           => "\u{0011D}",
        "gcy"                             => "\u{00433}",
        "gdot"                            => "\u{00121}",
        "ge"                              => "\u{02265}",
        "gel"                             => "\u{022DB}",
        "geq"                             => "\u{02265}",
        "geqq"                            => "\u{02267}",
        "geqslant"                        => "\u{02A7E}",
        "ges"                             => "\u{02A7E}",
        "gescc"                           => "\u{02AA9}",
        "gesdot"                          => "\u{02A80}",
        "gesdoto"                         => "\u{02A82}",
        "gesdotol"                        => "\u{02A84}",
        "gesl"                            => "\u{022DB}\u{0FE00}",
        "gesles"                          => "\u{02A94}",
        "gfr"                             => "\u{1D524}",
        "gg"                              => "\u{0226B}",
        "ggg"                             => "\u{022D9}",
        "gimel"                           => "\u{02137}",
        "gjcy"                            => "\u{00453}",
        "gl"                              => "\u{02277}",
        "glE"                             => "\u{02A92}",
        "gla"                             => "\u{02AA5}",
        "glj"                             => "\u{02AA4}",
        "gnE"                             => "\u{02269}",
        "gnap"                            => "\u{02A8A}",
        "gnapprox"                        => "\u{02A8A}",
        "gne"                             => "\u{02A88}",
        "gneq"                            => "\u{02A88}",
        "gneqq"                           => "\u{02269}",
        "gnsim"                           => "\u{022E7}",
        "gopf"                            => "\u{1D558}",
        "grave"                           => "\u{00060}",
        "gscr"                            => "\u{0210A}",
        "gsim"                            => "\u{02273}",
        "gsime"                           => "\u{02A8E}",
        "gsiml"                           => "\u{02A90}",
        "gt"                              => "\u{0003E}",
        "gtcc"                            => "\u{02AA7}",
        "gtcir"                           => "\u{02A7A}",
        "gtdot"                           => "\u{022D7}",
        "gtlPar"                          => "\u{02995}",
        "gtquest"                         => "\u{02A7C}",
        "gtrapprox"                       => "\u{02A86}",
        "gtrarr"                          => "\u{02978}",
        "gtrdot"                          => "\u{022D7}",
        "gtreqless"                       => "\u{022DB}",
        "gtreqqless"                      => "\u{02A8C}",
        "gtrless"                         => "\u{02277}",
        "gtrsim"                          => "\u{02273}",
        "gvertneqq"                       => "\u{02269}\u{0FE00}",
        "gvnE"                            => "\u{02269}\u{0FE00}",
        "hArr"                            => "\u{021D4}",
        "hairsp"                          => "\u{0200A}",
        "half"                            => "\u{000BD}",
        "hamilt"                          => "\u{0210B}",
        "hardcy"                          => "\u{0044A}",
        "harr"                            => "\u{02194}",
        "harrcir"                         => "\u{02948}",
        "harrw"                           => "\u{021AD}",
        "hbar"                            => "\u{0210F}",
        "hcirc"                           => "\u{00125}",
        "hearts"                          => "\u{02665}",
        "heartsuit"                       => "\u{02665}",
        "hellip"                          => "\u{02026}",
        "hercon"                          => "\u{022B9}",
        "hfr"                             => "\u{1D525}",
        "hksearow"                        => "\u{02925}",
        "hkswarow"                        => "\u{02926}",
        "hoarr"                           => "\u{021FF}",
        "homtht"                          => "\u{0223B}",
        "hookleftarrow"                   => "\u{021A9}",
        "hookrightarrow"                  => "\u{021AA}",
        "hopf"                            => "\u{1D559}",
        "horbar"                          => "\u{02015}",
        "hscr"                            => "\u{1D4BD}",
        "hslash"                          => "\u{0210F}",
        "hstrok"                          => "\u{00127}",
        "hybull"                          => "\u{02043}",
        "hyphen"                          => "\u{02010}",
        "iacute"                          => "\u{000ED}",
        "ic"                              => "\u{02063}",
        "icirc"                           => "\u{000EE}",
        "icy"                             => "\u{00438}",
        "iecy"                            => "\u{00435}",
        "iexcl"                           => "\u{000A1}",
        "iff"                             => "\u{021D4}",
        "ifr"                             => "\u{1D526}",
        "igrave"                          => "\u{000EC}",
        "ii"                              => "\u{02148}",
        "iiiint"                          => "\u{02A0C}",
        "iiint"                           => "\u{0222D}",
        "iinfin"                          => "\u{029DC}",
        "iiota"                           => "\u{02129}",
        "ijlig"                           => "\u{00133}",
        "imacr"                           => "\u{0012B}",
        "image"                           => "\u{02111}",
        "imagline"                        => "\u{02110}",
        "imagpart"                        => "\u{02111}",
        "imath"                           => "\u{00131}",
        "imof"                            => "\u{022B7}",
        "imped"                           => "\u{001B5}",
        "in"                              => "\u{02208}",
        "incare"                          => "\u{02105}",
        "infin"                           => "\u{0221E}",
        "infintie"                        => "\u{029DD}",
        "inodot"                          => "\u{00131}",
        "int"                             => "\u{0222B}",
        "intcal"                          => "\u{022BA}",
        "integers"                        => "\u{02124}",
        "intercal"                        => "\u{022BA}",
        "intlarhk"                        => "\u{02A17}",
        "intprod"                         => "\u{02A3C}",
        "iocy"                            => "\u{00451}",
        "iogon"                           => "\u{0012F}",
        "iopf"                            => "\u{1D55A}",
        "iota"                            => "\u{003B9}",
        "iprod"                           => "\u{02A3C}",
        "iquest"                          => "\u{000BF}",
        "iscr"                            => "\u{1D4BE}",
        "isin"                            => "\u{02208}",
        "isinE"                           => "\u{022F9}",
        "isindot"                         => "\u{022F5}",
        "isins"                           => "\u{022F4}",
        "isinsv"                          => "\u{022F3}",
        "isinv"                           => "\u{02208}",
        "it"                              => "\u{02062}",
        "itilde"                          => "\u{00129}",
        "iukcy"                           => "\u{00456}",
        "iuml"                            => "\u{000EF}",
        "jcirc"                           => "\u{00135}",
        "jcy"                             => "\u{00439}",
        "jfr"                             => "\u{1D527}",
        "jmath"                           => "\u{00237}",
        "jopf"                            => "\u{1D55B}",
        "jscr"                            => "\u{1D4BF}",
        "jsercy"                          => "\u{00458}",
        "jukcy"                           => "\u{00454}",
        "kappa"                           => "\u{003BA}",
        "kappav"                          => "\u{003F0}",
        "kcedil"                          => "\u{00137}",
        "kcy"                             => "\u{0043A}",
        "kfr"                             => "\u{1D528}",
        "kgreen"                          => "\u{00138}",
        "khcy"                            => "\u{00445}",
        "kjcy"                            => "\u{0045C}",
        "kopf"                            => "\u{1D55C}",
        "kscr"                            => "\u{1D4C0}",
        "lAarr"                           => "\u{021DA}",
        "lArr"                            => "\u{021D0}",
        "lAtail"                          => "\u{0291B}",
        "lBarr"                           => "\u{0290E}",
        "lE"                              => "\u{02266}",
        "lEg"                             => "\u{02A8B}",
        "lHar"                            => "\u{02962}",
        "lacute"                          => "\u{0013A}",
        "laemptyv"                        => "\u{029B4}",
        "lagran"                          => "\u{02112}",
        "lambda"                          => "\u{003BB}",
        "lang"                            => "\u{027E8}",
        "langd"                           => "\u{02991}",
        "langle"                          => "\u{027E8}",
        "lap"                             => "\u{02A85}",
        "laquo"                           => "\u{000AB}",
        "larr"                            => "\u{02190}",
        "larrb"                           => "\u{021E4}",
        "larrbfs"                         => "\u{0291F}",
        "larrfs"                          => "\u{0291D}",
        "larrhk"                          => "\u{021A9}",
        "larrlp"                          => "\u{021AB}",
        "larrpl"                          => "\u{02939}",
        "larrsim"                         => "\u{02973}",
        "larrtl"                          => "\u{021A2}",
        "lat"                             => "\u{02AAB}",
        "latail"                          => "\u{02919}",
        "late"                            => "\u{02AAD}",
        "lates"                           => "\u{02AAD}\u{0FE00}",
        "lbarr"                           => "\u{0290C}",
        "lbbrk"                           => "\u{02772}",
        "lbrace"                          => "\u{0007B}",
        "lbrack"                          => "\u{0005B}",
        "lbrke"                           => "\u{0298B}",
        "lbrksld"                         => "\u{0298F}",
        "lbrkslu"                         => "\u{0298D}",
        "lcaron"                          => "\u{0013E}",
        "lcedil"                          => "\u{0013C}",
        "lceil"                           => "\u{02308}",
        "lcub"                            => "\u{0007B}",
        "lcy"                             => "\u{0043B}",
        "ldca"                            => "\u{02936}",
        "ldquo"                           => "\u{0201C}",
        "ldquor"                          => "\u{0201E}",
        "ldrdhar"                         => "\u{02967}",
        "ldrushar"                        => "\u{0294B}",
        "ldsh"                            => "\u{021B2}",
        "le"                              => "\u{02264}",
        "leftarrow"                       => "\u{02190}",
        "leftarrowtail"                   => "\u{021A2}",
        "leftharpoondown"                 => "\u{021BD}",
        "leftharpoonup"                   => "\u{021BC}",
        "leftleftarrows"                  => "\u{021C7}",
        "leftrightarrow"                  => "\u{02194}",
        "leftrightarrows"                 => "\u{021C6}",
        "leftrightharpoons"               => "\u{021CB}",
        "leftrightsquigarrow"             => "\u{021AD}",
        "leftthreetimes"                  => "\u{022CB}",
        "leg"                             => "\u{022DA}",
        "leq"                             => "\u{02264}",
        "leqq"                            => "\u{02266}",
        "leqslant"                        => "\u{02A7D}",
        "les"                             => "\u{02A7D}",
        "lescc"                           => "\u{02AA8}",
        "lesdot"                          => "\u{02A7F}",
        "lesdoto"                         => "\u{02A81}",
        "lesdotor"                        => "\u{02A83}",
        "lesg"                            => "\u{022DA}\u{0FE00}",
        "lesges"                          => "\u{02A93}",
        "lessapprox"                      => "\u{02A85}",
        "lessdot"                         => "\u{022D6}",
        "lesseqgtr"                       => "\u{022DA}",
        "lesseqqgtr"                      => "\u{02A8B}",
        "lessgtr"                         => "\u{02276}",
        "lesssim"                         => "\u{02272}",
        "lfisht"                          => "\u{0297C}",
        "lfloor"                          => "\u{0230A}",
        "lfr"                             => "\u{1D529}",
        "lg"                              => "\u{02276}",
        "lgE"                             => "\u{02A91}",
        "lhard"                           => "\u{021BD}",
        "lharu"                           => "\u{021BC}",
        "lharul"                          => "\u{0296A}",
        "lhblk"                           => "\u{02584}",
        "ljcy"                            => "\u{00459}",
        "ll"                              => "\u{0226A}",
        "llarr"                           => "\u{021C7}",
        "llcorner"                        => "\u{0231E}",
        "llhard"                          => "\u{0296B}",
        "lltri"                           => "\u{025FA}",
        "lmidot"                          => "\u{00140}",
        "lmoust"                          => "\u{023B0}",
        "lmoustache"                      => "\u{023B0}",
        "lnE"                             => "\u{02268}",
        "lnap"                            => "\u{02A89}",
        "lnapprox"                        => "\u{02A89}",
        "lne"                             => "\u{02A87}",
        "lneq"                            => "\u{02A87}",
        "lneqq"                           => "\u{02268}",
        "lnsim"                           => "\u{022E6}",
        "loang"                           => "\u{027EC}",
        "loarr"                           => "\u{021FD}",
        "lobrk"                           => "\u{027E6}",
        "longleftarrow"                   => "\u{027F5}",
        "longleftrightarrow"              => "\u{027F7}",
        "longmapsto"                      => "\u{027FC}",
        "longrightarrow"                  => "\u{027F6}",
        "looparrowleft"                   => "\u{021AB}",
        "looparrowright"                  => "\u{021AC}",
        "lopar"                           => "\u{02985}",
        "lopf"                            => "\u{1D55D}",
        "loplus"                          => "\u{02A2D}",
        "lotimes"                         => "\u{02A34}",
        "lowast"                          => "\u{02217}",
        "lowbar"                          => "\u{0005F}",
        "loz"                             => "\u{025CA}",
        "lozenge"                         => "\u{025CA}",
        "lozf"                            => "\u{029EB}",
        "lpar"                            => "\u{00028}",
        "lparlt"                          => "\u{02993}",
        "lrarr"                           => "\u{021C6}",
        "lrcorner"                        => "\u{0231F}",
        "lrhar"                           => "\u{021CB}",
        "lrhard"                          => "\u{0296D}",
        "lrm"                             => "\u{0200E}",
        "lrtri"                           => "\u{022BF}",
        "lsaquo"                          => "\u{02039}",
        "lscr"                            => "\u{1D4C1}",
        "lsh"                             => "\u{021B0}",
        "lsim"                            => "\u{02272}",
        "lsime"                           => "\u{02A8D}",
        "lsimg"                           => "\u{02A8F}",
        "lsqb"                            => "\u{0005B}",
        "lsquo"                           => "\u{02018}",
        "lsquor"                          => "\u{0201A}",
        "lstrok"                          => "\u{00142}",
        "lt"                              => "\u{0003C}",
        "ltcc"                            => "\u{02AA6}",
        "ltcir"                           => "\u{02A79}",
        "ltdot"                           => "\u{022D6}",
        "lthree"                          => "\u{022CB}",
        "ltimes"                          => "\u{022C9}",
        "ltlarr"                          => "\u{02976}",
        "ltquest"                         => "\u{02A7B}",
        "ltrPar"                          => "\u{02996}",
        "ltri"                            => "\u{025C3}",
        "ltrie"                           => "\u{022B4}",
        "ltrif"                           => "\u{025C2}",
        "lurdshar"                        => "\u{0294A}",
        "luruhar"                         => "\u{02966}",
        "lvertneqq"                       => "\u{02268}\u{0FE00}",
        "lvnE"                            => "\u{02268}\u{0FE00}",
        "mDDot"                           => "\u{0223A}",
        "macr"                            => "\u{000AF}",
        "male"                            => "\u{02642}",
        "malt"                            => "\u{02720}",
        "maltese"                         => "\u{02720}",
        "map"                             => "\u{021A6}",
        "mapsto"                          => "\u{021A6}",
        "mapstodown"                      => "\u{021A7}",
        "mapstoleft"                      => "\u{021A4}",
        "mapstoup"                        => "\u{021A5}",
        "marker"                          => "\u{025AE}",
        "mcomma"                          => "\u{02A29}",
        "mcy"                             => "\u{0043C}",
        "mdash"                           => "\u{02014}",
        "measuredangle"                   => "\u{02221}",
        "mfr"                             => "\u{1D52A}",
        "mho"                             => "\u{02127}",
        "micro"                           => "\u{000B5}",
        "mid"                             => "\u{02223}",
        "midast"                          => "\u{0002A}",
        "midcir"                          => "\u{02AF0}",
        "middot"                          => "\u{000B7}",
        "minus"                           => "\u{02212}",
        "minusb"                          => "\u{0229F}",
        "minusd"                          => "\u{02238}",
        "minusdu"                         => "\u{02A2A}",
        "mlcp"                            => "\u{02ADB}",
        "mldr"                            => "\u{02026}",
        "mnplus"                          => "\u{02213}",
        "models"                          => "\u{022A7}",
        "mopf"                            => "\u{1D55E}",
        "mp"                              => "\u{02213}",
        "mscr"                            => "\u{1D4C2}",
        "mstpos"                          => "\u{0223E}",
        "mu"                              => "\u{003BC}",
        "multimap"                        => "\u{022B8}",
        "mumap"                           => "\u{022B8}",
        "nGg"                             => "\u{022D9}\u{00338}",
        "nGt"                             => "\u{0226B}\u{020D2}",
        "nGtv"                            => "\u{0226B}\u{00338}",
        "nLeftarrow"                      => "\u{021CD}",
        "nLeftrightarrow"                 => "\u{021CE}",
        "nLl"                             => "\u{022D8}\u{00338}",
        "nLt"                             => "\u{0226A}\u{020D2}",
        "nLtv"                            => "\u{0226A}\u{00338}",
        "nRightarrow"                     => "\u{021CF}",
        "nVDash"                          => "\u{022AF}",
        "nVdash"                          => "\u{022AE}",
        "nabla"                           => "\u{02207}",
        "nacute"                          => "\u{00144}",
        "nang"                            => "\u{02220}\u{020D2}",
        "nap"                             => "\u{02249}",
        "napE"                            => "\u{02A70}\u{00338}",
        "napid"                           => "\u{0224B}\u{00338}",
        "napos"                           => "\u{00149}",
        "napprox"                         => "\u{02249}",
        "natur"                           => "\u{0266E}",
        "natural"                         => "\u{0266E}",
        "naturals"                        => "\u{02115}",
        "nbsp"                            => "\u{000A0}",
        "nbump"                           => "\u{0224E}\u{00338}",
        "nbumpe"                          => "\u{0224F}\u{00338}",
        "ncap"                            => "\u{02A43}",
        "ncaron"                          => "\u{00148}",
        "ncedil"                          => "\u{00146}",
        "ncong"                           => "\u{02247}",
        "ncongdot"                        => "\u{02A6D}\u{00338}",
        "ncup"                            => "\u{02A42}",
        "ncy"                             => "\u{0043D}",
        "ndash"                           => "\u{02013}",
        "ne"                              => "\u{02260}",
        "neArr"                           => "\u{021D7}",
        "nearhk"                          => "\u{02924}",
        "nearr"                           => "\u{02197}",
        "nearrow"                         => "\u{02197}",
        "nedot"                           => "\u{02250}\u{00338}",
        "nequiv"                          => "\u{02262}",
        "nesear"                          => "\u{02928}",
        "nesim"                           => "\u{02242}\u{00338}",
        "nexist"                          => "\u{02204}",
        "nexists"                         => "\u{02204}",
        "nfr"                             => "\u{1D52B}",
        "ngE"                             => "\u{02267}\u{00338}",
        "nge"                             => "\u{02271}",
        "ngeq"                            => "\u{02271}",
        "ngeqq"                           => "\u{02267}\u{00338}",
        "ngeqslant"                       => "\u{02A7E}\u{00338}",
        "nges"                            => "\u{02A7E}\u{00338}",
        "ngsim"                           => "\u{02275}",
        "ngt"                             => "\u{0226F}",
        "ngtr"                            => "\u{0226F}",
        "nhArr"                           => "\u{021CE}",
        "nharr"                           => "\u{021AE}",
        "nhpar"                           => "\u{02AF2}",
        "ni"                              => "\u{0220B}",
        "nis"                             => "\u{022FC}",
        "nisd"                            => "\u{022FA}",
        "niv"                             => "\u{0220B}",
        "njcy"                            => "\u{0045A}",
        "nlArr"                           => "\u{021CD}",
        "nlE"                             => "\u{02266}\u{00338}",
        "nlarr"                           => "\u{0219A}",
        "nldr"                            => "\u{02025}",
        "nle"                             => "\u{02270}",
        "nleftarrow"                      => "\u{0219A}",
        "nleftrightarrow"                 => "\u{021AE}",
        "nleq"                            => "\u{02270}",
        "nleqq"                           => "\u{02266}\u{00338}",
        "nleqslant"                       => "\u{02A7D}\u{00338}",
        "nles"                            => "\u{02A7D}\u{00338}",
        "nless"                           => "\u{0226E}",
        "nlsim"                           => "\u{02274}",
        "nlt"                             => "\u{0226E}",
        "nltri"                           => "\u{022EA}",
        "nltrie"                          => "\u{022EC}",
        "nmid"                            => "\u{02224}",
        "nopf"                            => "\u{1D55F}",
        "not"                             => "\u{000AC}",
        "notin"                           => "\u{02209}",
        "notinE"                          => "\u{022F9}\u{00338}",
        "notindot"                        => "\u{022F5}\u{00338}",
        "notinva"                         => "\u{02209}",
        "notinvb"                         => "\u{022F7}",
        "notinvc"                         => "\u{022F6}",
        "notni"                           => "\u{0220C}",
        "notniva"                         => "\u{0220C}",
        "notnivb"                         => "\u{022FE}",
        "notnivc"                         => "\u{022FD}",
        "npar"                            => "\u{02226}",
        "nparallel"                       => "\u{02226}",
        "nparsl"                          => "\u{02AFD}\u{020E5}",
        "npart"                           => "\u{02202}\u{00338}",
        "npolint"                         => "\u{02A14}",
        "npr"                             => "\u{02280}",
        "nprcue"                          => "\u{022E0}",
        "npre"                            => "\u{02AAF}\u{00338}",
        "nprec"                           => "\u{02280}",
        "npreceq"                         => "\u{02AAF}\u{00338}",
        "nrArr"                           => "\u{021CF}",
        "nrarr"                           => "\u{0219B}",
        "nrarrc"                          => "\u{02933}\u{00338}",
        "nrarrw"                          => "\u{0219D}\u{00338}",
        "nrightarrow"                     => "\u{0219B}",
        "nrtri"                           => "\u{022EB}",
        "nrtrie"                          => "\u{022ED}",
        "nsc"                             => "\u{02281}",
        "nsccue"                          => "\u{022E1}",
        "nsce"                            => "\u{02AB0}\u{00338}",
        "nscr"                            => "\u{1D4C3}",
        "nshortmid"                       => "\u{02224}",
        "nshortparallel"                  => "\u{02226}",
        "nsim"                            => "\u{02241}",
        "nsime"                           => "\u{02244}",
        "nsimeq"                          => "\u{02244}",
        "nsmid"                           => "\u{02224}",
        "nspar"                           => "\u{02226}",
        "nsqsube"                         => "\u{022E2}",
        "nsqsupe"                         => "\u{022E3}",
        "nsub"                            => "\u{02284}",
        "nsubE"                           => "\u{02AC5}\u{00338}",
        "nsube"                           => "\u{02288}",
        "nsubset"                         => "\u{02282}\u{020D2}",
        "nsubseteq"                       => "\u{02288}",
        "nsubseteqq"                      => "\u{02AC5}\u{00338}",
        "nsucc"                           => "\u{02281}",
        "nsucceq"                         => "\u{02AB0}\u{00338}",
        "nsup"                            => "\u{02285}",
        "nsupE"                           => "\u{02AC6}\u{00338}",
        "nsupe"                           => "\u{02289}",
        "nsupset"                         => "\u{02283}\u{020D2}",
        "nsupseteq"                       => "\u{02289}",
        "nsupseteqq"                      => "\u{02AC6}\u{00338}",
        "ntgl"                            => "\u{02279}",
        "ntilde"                          => "\u{000F1}",
        "ntlg"                            => "\u{02278}",
        "ntriangleleft"                   => "\u{022EA}",
        "ntrianglelefteq"                 => "\u{022EC}",
        "ntriangleright"                  => "\u{022EB}",
        "ntrianglerighteq"                => "\u{022ED}",
        "nu"                              => "\u{003BD}",
        "num"                             => "\u{00023}",
        "numero"                          => "\u{02116}",
        "numsp"                           => "\u{02007}",
        "nvDash"                          => "\u{022AD}",
        "nvHarr"                          => "\u{02904}",
        "nvap"                            => "\u{0224D}\u{020D2}",
        "nvdash"                          => "\u{022AC}",
        "nvge"                            => "\u{02265}\u{020D2}",
        "nvgt"                            => "\u{0003E}\u{020D2}",
        "nvinfin"                         => "\u{029DE}",
        "nvlArr"                          => "\u{02902}",
        "nvle"                            => "\u{02264}\u{020D2}",
        "nvlt"                            => "\u{0003C}\u{020D2}",
        "nvltrie"                         => "\u{022B4}\u{020D2}",
        "nvrArr"                          => "\u{02903}",
        "nvrtrie"                         => "\u{022B5}\u{020D2}",
        "nvsim"                           => "\u{0223C}\u{020D2}",
        "nwArr"                           => "\u{021D6}",
        "nwarhk"                          => "\u{02923}",
        "nwarr"                           => "\u{02196}",
        "nwarrow"                         => "\u{02196}",
        "nwnear"                          => "\u{02927}",
        "oS"                              => "\u{024C8}",
        "oacute"                          => "\u{000F3}",
        "oast"                            => "\u{0229B}",
        "ocir"                            => "\u{0229A}",
        "ocirc"                           => "\u{000F4}",
        "ocy"                             => "\u{0043E}",
        "odash"                           => "\u{0229D}",
        "odblac"                          => "\u{00151}",
        "odiv"                            => "\u{02A38}",
        "odot"                            => "\u{02299}",
        "odsold"                          => "\u{029BC}",
        "oelig"                           => "\u{00153}",
        "ofcir"                           => "\u{029BF}",
        "ofr"                             => "\u{1D52C}",
        "ogon"                            => "\u{002DB}",
        "ograve"                          => "\u{000F2}",
        "ogt"                             => "\u{029C1}",
        "ohbar"                           => "\u{029B5}",
        "ohm"                             => "\u{003A9}",
        "oint"                            => "\u{0222E}",
        "olarr"                           => "\u{021BA}",
        "olcir"                           => "\u{029BE}",
        "olcross"                         => "\u{029BB}",
        "oline"                           => "\u{0203E}",
        "olt"                             => "\u{029C0}",
        "omacr"                           => "\u{0014D}",
        "omega"                           => "\u{003C9}",
        "omicron"                         => "\u{003BF}",
        "omid"                            => "\u{029B6}",
        "ominus"                          => "\u{02296}",
        "oopf"                            => "\u{1D560}",
        "opar"                            => "\u{029B7}",
        "operp"                           => "\u{029B9}",
        "oplus"                           => "\u{02295}",
        "or"                              => "\u{02228}",
        "orarr"                           => "\u{021BB}",
        "ord"                             => "\u{02A5D}",
        "order"                           => "\u{02134}",
        "orderof"                         => "\u{02134}",
        "ordf"                            => "\u{000AA}",
        "ordm"                            => "\u{000BA}",
        "origof"                          => "\u{022B6}",
        "oror"                            => "\u{02A56}",
        "orslope"                         => "\u{02A57}",
        "orv"                             => "\u{02A5B}",
        "oscr"                            => "\u{02134}",
        "oslash"                          => "\u{000F8}",
        "osol"                            => "\u{02298}",
        "otilde"                          => "\u{000F5}",
        "otimes"                          => "\u{02297}",
        "otimesas"                        => "\u{02A36}",
        "ouml"                            => "\u{000F6}",
        "ovbar"                           => "\u{0233D}",
        "par"                             => "\u{02225}",
        "para"                            => "\u{000B6}",
        "parallel"                        => "\u{02225}",
        "parsim"                          => "\u{02AF3}",
        "parsl"                           => "\u{02AFD}",
        "part"                            => "\u{02202}",
        "pcy"                             => "\u{0043F}",
        "percnt"                          => "\u{00025}",
        "period"                          => "\u{0002E}",
        "permil"                          => "\u{02030}",
        "perp"                            => "\u{022A5}",
        "pertenk"                         => "\u{02031}",
        "pfr"                             => "\u{1D52D}",
        "phi"                             => "\u{003C6}",
        "phiv"                            => "\u{003D5}",
        "phmmat"                          => "\u{02133}",
        "phone"                           => "\u{0260E}",
        "pi"                              => "\u{003C0}",
        "pitchfork"                       => "\u{022D4}",
        "piv"                             => "\u{003D6}",
        "planck"                          => "\u{0210F}",
        "planckh"                         => "\u{0210E}",
        "plankv"                          => "\u{0210F}",
        "plus"                            => "\u{0002B}",
        "plusacir"                        => "\u{02A23}",
        "plusb"                           => "\u{0229E}",
        "pluscir"                         => "\u{02A22}",
        "plusdo"                          => "\u{02214}",
        "plusdu"                          => "\u{02A25}",
        "pluse"                           => "\u{02A72}",
        "plusmn"                          => "\u{000B1}",
        "plussim"                         => "\u{02A26}",
        "plustwo"                         => "\u{02A27}",
        "pm"                              => "\u{000B1}",
        "pointint"                        => "\u{02A15}",
        "popf"                            => "\u{1D561}",
        "pound"                           => "\u{000A3}",
        "pr"                              => "\u{0227A}",
        "prE"                             => "\u{02AB3}",
        "prap"                            => "\u{02AB7}",
        "prcue"                           => "\u{0227C}",
        "pre"                             => "\u{02AAF}",
        "prec"                            => "\u{0227A}",
        "precapprox"                      => "\u{02AB7}",
        "preccurlyeq"                     => "\u{0227C}",
        "preceq"                          => "\u{02AAF}",
        "precnapprox"                     => "\u{02AB9}",
        "precneqq"                        => "\u{02AB5}",
        "precnsim"                        => "\u{022E8}",
        "precsim"                         => "\u{0227E}",
        "prime"                           => "\u{02032}",
        "primes"                          => "\u{02119}",
        "prnE"                            => "\u{02AB5}",
        "prnap"                           => "\u{02AB9}",
        "prnsim"                          => "\u{022E8}",
        "prod"                            => "\u{0220F}",
        "profalar"                        => "\u{0232E}",
        "profline"                        => "\u{02312}",
        "profsurf"                        => "\u{02313}",
        "prop"                            => "\u{0221D}",
        "propto"                          => "\u{0221D}",
        "prsim"                           => "\u{0227E}",
        "prurel"                          => "\u{022B0}",
        "pscr"                            => "\u{1D4C5}",
        "psi"                             => "\u{003C8}",
        "puncsp"                          => "\u{02008}",
        "qfr"                             => "\u{1D52E}",
        "qint"                            => "\u{02A0C}",
        "qopf"                            => "\u{1D562}",
        "qprime"                          => "\u{02057}",
        "qscr"                            => "\u{1D4C6}",
        "quaternions"                     => "\u{0210D}",
        "quatint"                         => "\u{02A16}",
        "quest"                           => "\u{0003F}",
        "questeq"                         => "\u{0225F}",
        "quot"                            => "\u{00022}",
        "rAarr"                           => "\u{021DB}",
        "rArr"                            => "\u{021D2}",
        "rAtail"                          => "\u{0291C}",
        "rBarr"                           => "\u{0290F}",
        "rHar"                            => "\u{02964}",
        "race"                            => "\u{0223D}\u{00331}",
        "racute"                          => "\u{00155}",
        "radic"                           => "\u{0221A}",
        "raemptyv"                        => "\u{029B3}",
        "rang"                            => "\u{027E9}",
        "rangd"                           => "\u{02992}",
        "range"                           => "\u{029A5}",
        "rangle"                          => "\u{027E9}",
        "raquo"                           => "\u{000BB}",
        "rarr"                            => "\u{02192}",
        "rarrap"                          => "\u{02975}",
        "rarrb"                           => "\u{021E5}",
        "rarrbfs"                         => "\u{02920}",
        "rarrc"                           => "\u{02933}",
        "rarrfs"                          => "\u{0291E}",
        "rarrhk"                          => "\u{021AA}",
        "rarrlp"                          => "\u{021AC}",
        "rarrpl"                          => "\u{02945}",
        "rarrsim"                         => "\u{02974}",
        "rarrtl"                          => "\u{021A3}",
        "rarrw"                           => "\u{0219D}",
        "ratail"                          => "\u{0291A}",
        "ratio"                           => "\u{02236}",
        "rationals"                       => "\u{0211A}",
        "rbarr"                           => "\u{0290D}",
        "rbbrk"                           => "\u{02773}",
        "rbrace"                          => "\u{0007D}",
        "rbrack"                          => "\u{0005D}",
        "rbrke"                           => "\u{0298C}",
        "rbrksld"                         => "\u{0298E}",
        "rbrkslu"                         => "\u{02990}",
        "rcaron"                          => "\u{00159}",
        "rcedil"                          => "\u{00157}",
        "rceil"                           => "\u{02309}",
        "rcub"                            => "\u{0007D}",
        "rcy"                             => "\u{00440}",
        "rdca"                            => "\u{02937}",
        "rdldhar"                         => "\u{02969}",
        "rdquo"                           => "\u{0201D}",
        "rdquor"                          => "\u{0201D}",
        "rdsh"                            => "\u{021B3}",
        "real"                            => "\u{0211C}",
        "realine"                         => "\u{0211B}",
        "realpart"                        => "\u{0211C}",
        "reals"                           => "\u{0211D}",
        "rect"                            => "\u{025AD}",
        "reg"                             => "\u{000AE}",
        "rfisht"                          => "\u{0297D}",
        "rfloor"                          => "\u{0230B}",
        "rfr"                             => "\u{1D52F}",
        "rhard"                           => "\u{021C1}",
        "rharu"                           => "\u{021C0}",
        "rharul"                          => "\u{0296C}",
        "rho"                             => "\u{003C1}",
        "rhov"                            => "\u{003F1}",
        "rightarrow"                      => "\u{02192}",
        "rightarrowtail"                  => "\u{021A3}",
        "rightharpoondown"                => "\u{021C1}",
        "rightharpoonup"                  => "\u{021C0}",
        "rightleftarrows"                 => "\u{021C4}",
        "rightleftharpoons"               => "\u{021CC}",
        "rightrightarrows"                => "\u{021C9}",
        "rightsquigarrow"                 => "\u{0219D}",
        "rightthreetimes"                 => "\u{022CC}",
        "ring"                            => "\u{002DA}",
        "risingdotseq"                    => "\u{02253}",
        "rlarr"                           => "\u{021C4}",
        "rlhar"                           => "\u{021CC}",
        "rlm"                             => "\u{0200F}",
        "rmoust"                          => "\u{023B1}",
        "rmoustache"                      => "\u{023B1}",
        "rnmid"                           => "\u{02AEE}",
        "roang"                           => "\u{027ED}",
        "roarr"                           => "\u{021FE}",
        "robrk"                           => "\u{027E7}",
        "ropar"                           => "\u{02986}",
        "ropf"                            => "\u{1D563}",
        "roplus"                          => "\u{02A2E}",
        "rotimes"                         => "\u{02A35}",
        "rpar"                            => "\u{00029}",
        "rpargt"                          => "\u{02994}",
        "rppolint"                        => "\u{02A12}",
        "rrarr"                           => "\u{021C9}",
        "rsaquo"                          => "\u{0203A}",
        "rscr"                            => "\u{1D4C7}",
        "rsh"                             => "\u{021B1}",
        "rsqb"                            => "\u{0005D}",
        "rsquo"                           => "\u{02019}",
        "rsquor"                          => "\u{02019}",
        "rthree"                          => "\u{022CC}",
        "rtimes"                          => "\u{022CA}",
        "rtri"                            => "\u{025B9}",
        "rtrie"                           => "\u{022B5}",
        "rtrif"                           => "\u{025B8}",
        "rtriltri"                        => "\u{029CE}",
        "ruluhar"                         => "\u{02968}",
        "rx"                              => "\u{0211E}",
        "sacute"                          => "\u{0015B}",
        "sbquo"                           => "\u{0201A}",
        "sc"                              => "\u{0227B}",
        "scE"                             => "\u{02AB4}",
        "scap"                            => "\u{02AB8}",
        "scaron"                          => "\u{00161}",
        "sccue"                           => "\u{0227D}",
        "sce"                             => "\u{02AB0}",
        "scedil"                          => "\u{0015F}",
        "scirc"                           => "\u{0015D}",
        "scnE"                            => "\u{02AB6}",
        "scnap"                           => "\u{02ABA}",
        "scnsim"                          => "\u{022E9}",
        "scpolint"                        => "\u{02A13}",
        "scsim"                           => "\u{0227F}",
        "scy"                             => "\u{00441}",
        "sdot"                            => "\u{022C5}",
        "sdotb"                           => "\u{022A1}",
        "sdote"                           => "\u{02A66}",
        "seArr"                           => "\u{021D8}",
        "searhk"                          => "\u{02925}",
        "searr"                           => "\u{02198}",
        "searrow"                         => "\u{02198}",
        "sect"                            => "\u{000A7}",
        "semi"                            => "\u{0003B}",
        "seswar"                          => "\u{02929}",
        "setminus"                        => "\u{02216}",
        "setmn"                           => "\u{02216}",
        "sext"                            => "\u{02736}",
        "sfr"                             => "\u{1D530}",
        "sfrown"                          => "\u{02322}",
        "sharp"                           => "\u{0266F}",
        "shchcy"                          => "\u{00449}",
        "shcy"                            => "\u{00448}",
        "shortmid"                        => "\u{02223}",
        "shortparallel"                   => "\u{02225}",
        "shy"                             => "\u{000AD}",
        "sigma"                           => "\u{003C3}",
        "sigmaf"                          => "\u{003C2}",
        "sigmav"                          => "\u{003C2}",
        "sim"                             => "\u{0223C}",
        "simdot"                          => "\u{02A6A}",
        "sime"                            => "\u{02243}",
        "simeq"                           => "\u{02243}",
        "simg"                            => "\u{02A9E}",
        "simgE"                           => "\u{02AA0}",
        "siml"                            => "\u{02A9D}",
        "simlE"                           => "\u{02A9F}",
        "simne"                           => "\u{02246}",
        "simplus"                         => "\u{02A24}",
        "simrarr"                         => "\u{02972}",
        "slarr"                           => "\u{02190}",
        "smallsetminus"                   => "\u{02216}",
        "smashp"                          => "\u{02A33}",
        "smeparsl"                        => "\u{029E4}",
        "smid"                            => "\u{02223}",
        "smile"                           => "\u{02323}",
        "smt"                             => "\u{02AAA}",
        "smte"                            => "\u{02AAC}",
        "smtes"                           => "\u{02AAC}\u{0FE00}",
        "softcy"                          => "\u{0044C}",
        "sol"                             => "\u{0002F}",
        "solb"                            => "\u{029C4}",
        "solbar"                          => "\u{0233F}",
        "sopf"                            => "\u{1D564}",
        "spades"                          => "\u{02660}",
        "spadesuit"                       => "\u{02660}",
        "spar"                            => "\u{02225}",
        "sqcap"                           => "\u{02293}",
        "sqcaps"                          => "\u{02293}\u{0FE00}",
        "sqcup"                           => "\u{02294}",
        "sqcups"                          => "\u{02294}\u{0FE00}",
        "sqsub"                           => "\u{0228F}",
        "sqsube"                          => "\u{02291}",
        "sqsubset"                        => "\u{0228F}",
        "sqsubseteq"                      => "\u{02291}",
        "sqsup"                           => "\u{02290}",
        "sqsupe"                          => "\u{02292}",
        "sqsupset"                        => "\u{02290}",
        "sqsupseteq"                      => "\u{02292}",
        "squ"                             => "\u{025A1}",
        "square"                          => "\u{025A1}",
        "squarf"                          => "\u{025AA}",
        "squf"                            => "\u{025AA}",
        "srarr"                           => "\u{02192}",
        "sscr"                            => "\u{1D4C8}",
        "ssetmn"                          => "\u{02216}",
        "ssmile"                          => "\u{02323}",
        "sstarf"                          => "\u{022C6}",
        "star"                            => "\u{02606}",
        "starf"                           => "\u{02605}",
        "straightepsilon"                 => "\u{003F5}",
        "straightphi"                     => "\u{003D5}",
        "strns"                           => "\u{000AF}",
        "sub"                             => "\u{02282}",
        "subE"                            => "\u{02AC5}",
        "subdot"                          => "\u{02ABD}",
        "sube"                            => "\u{02286}",
        "subedot"                         => "\u{02AC3}",
        "submult"                         => "\u{02AC1}",
        "subnE"                           => "\u{02ACB}",
        "subne"                           => "\u{0228A}",
        "subplus"                         => "\u{02ABF}",
        "subrarr"                         => "\u{02979}",
        "subset"                          => "\u{02282}",
        "subseteq"                        => "\u{02286}",
        "subseteqq"                       => "\u{02AC5}",
        "subsetneq"                       => "\u{0228A}",
        "subsetneqq"                      => "\u{02ACB}",
        "subsim"                          => "\u{02AC7}",
        "subsub"                          => "\u{02AD5}",
        "subsup"                          => "\u{02AD3}",
        "succ"                            => "\u{0227B}",
        "succapprox"                      => "\u{02AB8}",
        "succcurlyeq"                     => "\u{0227D}",
        "succeq"                          => "\u{02AB0}",
        "succnapprox"                     => "\u{02ABA}",
        "succneqq"                        => "\u{02AB6}",
        "succnsim"                        => "\u{022E9}",
        "succsim"                         => "\u{0227F}",
        "sum"                             => "\u{02211}",
        "sung"                            => "\u{0266A}",
        "sup"                             => "\u{02283}",
        "sup1"                            => "\u{000B9}",
        "sup2"                            => "\u{000B2}",
        "sup3"                            => "\u{000B3}",
        "supE"                            => "\u{02AC6}",
        "supdot"                          => "\u{02ABE}",
        "supdsub"                         => "\u{02AD8}",
        "supe"                            => "\u{02287}",
        "supedot"                         => "\u{02AC4}",
        "suphsol"                         => "\u{027C9}",
        "suphsub"                         => "\u{02AD7}",
        "suplarr"                         => "\u{0297B}",
        "supmult"                         => "\u{02AC2}",
        "supnE"                           => "\u{02ACC}",
        "supne"                           => "\u{0228B}",
        "supplus"                         => "\u{02AC0}",
        "supset"                          => "\u{02283}",
        "supseteq"                        => "\u{02287}",
        "supseteqq"                       => "\u{02AC6}",
        "supsetneq"                       => "\u{0228B}",
        "supsetneqq"                      => "\u{02ACC}",
        "supsim"                          => "\u{02AC8}",
        "supsub"                          => "\u{02AD4}",
        "supsup"                          => "\u{02AD6}",
        "swArr"                           => "\u{021D9}",
        "swarhk"                          => "\u{02926}",
        "swarr"                           => "\u{02199}",
        "swarrow"                         => "\u{02199}",
        "swnwar"                          => "\u{0292A}",
        "szlig"                           => "\u{000DF}",
        "target"                          => "\u{02316}",
        "tau"                             => "\u{003C4}",
        "tbrk"                            => "\u{023B4}",
        "tcaron"                          => "\u{00165}",
        "tcedil"                          => "\u{00163}",
        "tcy"                             => "\u{00442}",
        "tdot"                            => "\u{020DB}",
        "telrec"                          => "\u{02315}",
        "tfr"                             => "\u{1D531}",
        "there4"                          => "\u{02234}",
        "therefore"                       => "\u{02234}",
        "theta"                           => "\u{003B8}",
        "thetasym"                        => "\u{003D1}",
        "thetav"                          => "\u{003D1}",
        "thickapprox"                     => "\u{02248}",
        "thicksim"                        => "\u{0223C}",
        "thinsp"                          => "\u{02009}",
        "thkap"                           => "\u{02248}",
        "thksim"                          => "\u{0223C}",
        "thorn"                           => "\u{000FE}",
        "tilde"                           => "\u{002DC}",
        "times"                           => "\u{000D7}",
        "timesb"                          => "\u{022A0}",
        "timesbar"                        => "\u{02A31}",
        "timesd"                          => "\u{02A30}",
        "tint"                            => "\u{0222D}",
        "toea"                            => "\u{02928}",
        "top"                             => "\u{022A4}",
        "topbot"                          => "\u{02336}",
        "topcir"                          => "\u{02AF1}",
        "topf"                            => "\u{1D565}",
        "topfork"                         => "\u{02ADA}",
        "tosa"                            => "\u{02929}",
        "tprime"                          => "\u{02034}",
        "trade"                           => "\u{02122}",
        "triangle"                        => "\u{025B5}",
        "triangledown"                    => "\u{025BF}",
        "triangleleft"                    => "\u{025C3}",
        "trianglelefteq"                  => "\u{022B4}",
        "triangleq"                       => "\u{0225C}",
        "triangleright"                   => "\u{025B9}",
        "trianglerighteq"                 => "\u{022B5}",
        "tridot"                          => "\u{025EC}",
        "trie"                            => "\u{0225C}",
        "triminus"                        => "\u{02A3A}",
        "triplus"                         => "\u{02A39}",
        "trisb"                           => "\u{029CD}",
        "tritime"                         => "\u{02A3B}",
        "trpezium"                        => "\u{023E2}",
        "tscr"                            => "\u{1D4C9}",
        "tscy"                            => "\u{00446}",
        "tshcy"                           => "\u{0045B}",
        "tstrok"                          => "\u{00167}",
        "twixt"                           => "\u{0226C}",
        "twoheadleftarrow"                => "\u{0219E}",
        "twoheadrightarrow"               => "\u{021A0}",
        "uArr"                            => "\u{021D1}",
        "uHar"                            => "\u{02963}",
        "uacute"                          => "\u{000FA}",
        "uarr"                            => "\u{02191}",
        "ubrcy"                           => "\u{0045E}",
        "ubreve"                          => "\u{0016D}",
        "ucirc"                           => "\u{000FB}",
        "ucy"                             => "\u{00443}",
        "udarr"                           => "\u{021C5}",
        "udblac"                          => "\u{00171}",
        "udhar"                           => "\u{0296E}",
        "ufisht"                          => "\u{0297E}",
        "ufr"                             => "\u{1D532}",
        "ugrave"                          => "\u{000F9}",
        "uharl"                           => "\u{021BF}",
        "uharr"                           => "\u{021BE}",
        "uhblk"                           => "\u{02580}",
        "ulcorn"                          => "\u{0231C}",
        "ulcorner"                        => "\u{0231C}",
        "ulcrop"                          => "\u{0230F}",
        "ultri"                           => "\u{025F8}",
        "umacr"                           => "\u{0016B}",
        "uml"                             => "\u{000A8}",
        "uogon"                           => "\u{00173}",
        "uopf"                            => "\u{1D566}",
        "uparrow"                         => "\u{02191}",
        "updownarrow"                     => "\u{02195}",
        "upharpoonleft"                   => "\u{021BF}",
        "upharpoonright"                  => "\u{021BE}",
        "uplus"                           => "\u{0228E}",
        "upsi"                            => "\u{003C5}",
        "upsih"                           => "\u{003D2}",
        "upsilon"                         => "\u{003C5}",
        "upuparrows"                      => "\u{021C8}",
        "urcorn"                          => "\u{0231D}",
        "urcorner"                        => "\u{0231D}",
        "urcrop"                          => "\u{0230E}",
        "uring"                           => "\u{0016F}",
        "urtri"                           => "\u{025F9}",
        "uscr"                            => "\u{1D4CA}",
        "utdot"                           => "\u{022F0}",
        "utilde"                          => "\u{00169}",
        "utri"                            => "\u{025B5}",
        "utrif"                           => "\u{025B4}",
        "uuarr"                           => "\u{021C8}",
        "uuml"                            => "\u{000FC}",
        "uwangle"                         => "\u{029A7}",
        "vArr"                            => "\u{021D5}",
        "vBar"                            => "\u{02AE8}",
        "vBarv"                           => "\u{02AE9}",
        "vDash"                           => "\u{022A8}",
        "vangrt"                          => "\u{0299C}",
        "varepsilon"                      => "\u{003F5}",
        "varkappa"                        => "\u{003F0}",
        "varnothing"                      => "\u{02205}",
        "varphi"                          => "\u{003D5}",
        "varpi"                           => "\u{003D6}",
        "varpropto"                       => "\u{0221D}",
        "varr"                            => "\u{02195}",
        "varrho"                          => "\u{003F1}",
        "varsigma"                        => "\u{003C2}",
        "varsubsetneq"                    => "\u{0228A}\u{0FE00}",
        "varsubsetneqq"                   => "\u{02ACB}\u{0FE00}",
        "varsupsetneq"                    => "\u{0228B}\u{0FE00}",
        "varsupsetneqq"                   => "\u{02ACC}\u{0FE00}",
        "vartheta"                        => "\u{003D1}",
        "vartriangleleft"                 => "\u{022B2}",
        "vartriangleright"                => "\u{022B3}",
        "vcy"                             => "\u{00432}",
        "vdash"                           => "\u{022A2}",
        "vee"                             => "\u{02228}",
        "veebar"                          => "\u{022BB}",
        "veeeq"                           => "\u{0225A}",
        "vellip"                          => "\u{022EE}",
        "verbar"                          => "\u{0007C}",
        "vert"                            => "\u{0007C}",
        "vfr"                             => "\u{1D533}",
        "vltri"                           => "\u{022B2}",
        "vnsub"                           => "\u{02282}\u{020D2}",
        "vnsup"                           => "\u{02283}\u{020D2}",
        "vopf"                            => "\u{1D567}",
        "vprop"                           => "\u{0221D}",
        "vrtri"                           => "\u{022B3}",
        "vscr"                            => "\u{1D4CB}",
        "vsubnE"                          => "\u{02ACB}\u{0FE00}",
        "vsubne"                          => "\u{0228A}\u{0FE00}",
        "vsupnE"                          => "\u{02ACC}\u{0FE00}",
        "vsupne"                          => "\u{0228B}\u{0FE00}",
        "vzigzag"                         => "\u{0299A}",
        "wcirc"                           => "\u{00175}",
        "wedbar"                          => "\u{02A5F}",
        "wedge"                           => "\u{02227}",
        "wedgeq"                          => "\u{02259}",
        "weierp"                          => "\u{02118}",
        "wfr"                             => "\u{1D534}",
        "wopf"                            => "\u{1D568}",
        "wp"                              => "\u{02118}",
        "wr"                              => "\u{02240}",
        "wreath"                          => "\u{02240}",
        "wscr"                            => "\u{1D4CC}",
        "xcap"                            => "\u{022C2}",
        "xcirc"                           => "\u{025EF}",
        "xcup"                            => "\u{022C3}",
        "xdtri"                           => "\u{025BD}",
        "xfr"                             => "\u{1D535}",
        "xhArr"                           => "\u{027FA}",
        "xharr"                           => "\u{027F7}",
        "xi"                              => "\u{003BE}",
        "xlArr"                           => "\u{027F8}",
        "xlarr"                           => "\u{027F5}",
        "xmap"                            => "\u{027FC}",
        "xnis"                            => "\u{022FB}",
        "xodot"                           => "\u{02A00}",
        "xopf"                            => "\u{1D569}",
        "xoplus"                          => "\u{02A01}",
        "xotime"                          => "\u{02A02}",
        "xrArr"                           => "\u{027F9}",
        "xrarr"                           => "\u{027F6}",
        "xscr"                            => "\u{1D4CD}",
        "xsqcup"                          => "\u{02A06}",
        "xuplus"                          => "\u{02A04}",
        "xutri"                           => "\u{025B3}",
        "xvee"                            => "\u{022C1}",
        "xwedge"                          => "\u{022C0}",
        "yacute"                          => "\u{000FD}",
        "yacy"                            => "\u{0044F}",
        "ycirc"                           => "\u{00177}",
        "ycy"                             => "\u{0044B}",
        "yen"                             => "\u{000A5}",
        "yfr"                             => "\u{1D536}",
        "yicy"                            => "\u{00457}",
        "yopf"                            => "\u{1D56A}",
        "yscr"                            => "\u{1D4CE}",
        "yucy"                            => "\u{0044E}",
        "yuml"                            => "\u{000FF}",
        "zacute"                          => "\u{0017A}",
        "zcaron"                          => "\u{0017E}",
        "zcy"                             => "\u{00437}",
        "zdot"                            => "\u{0017C}",
        "zeetrf"                          => "\u{02128}",
        "zeta"                            => "\u{003B6}",
        "zfr"                             => "\u{1D537}",
        "zhcy"                            => "\u{00436}",
        "zigrarr"                         => "\u{021DD}",
        "zopf"                            => "\u{1D56B}",
        "zscr"                            => "\u{1D4CF}",
        "zwj"                             => "\u{0200D}",
        "zwnj"                            => "\u{0200C}",
        _                                 => Err(CharRefError::UnknownCharName)?
    }))
}

/// The enum of errors [`parse_num_char_ref`] can return.
#[derive(Debug, Error)]
pub enum NumCharRefError {
    /// Invalid dec.
    #[error("Invalid dec.")]
    InvalidDec,
    /// Invalid hex.
    #[error("Invalid hex.")]
    InvalidHex,
    /// Char code overflow.
    #[error("Char code overflow.")]
    CharCodeOverflow,
    /// Not a num char ref.
    #[error("Not a num char ref.")]
    NotANumCharRef,
    /// Invalid char code.
    #[error("Invalid char code.")]
    InvalidCharCode(u32),
    /// Disallowed char code.
    #[error("Disallowed char code.")]
    DisallowedCharCode(char)
}

/// The last state of the state machine in [`parse_num_char_ref`].
#[derive(Debug, Clone, Copy)]
enum HTMLNCRLastState {
    /// Just started.
    None,
    /// Last saw the `#`.
    Hash,
    /// Doing a decimal number (`^#\d+$`).
    DecDigit,
    /// Just saw the hexadecimal x.
    X,
    /// Doing a hexadecimal number (`^#[xX][\da-fA-F]+$`).
    HexDigit
}

/// Decode a numeric character reference.
///
/// `^#(\d+|[xX][\da-fA-F]+)$`
/// # Errors
/// If `char_ref` doesn't start with `#`, returns the error [`NumCharRefError::NotANumCharRef`].
///
/// If the character after the `#` is not a decimal digit, `x`, or `X`, returns the error [`NumCharRefError::InvalidDec`].
///
/// If the ref starts with `#x` or `#X` and an invalid hexadecimal digit is found after it, returns the error [`NumCharRefError::InvalidHex`].
///
/// If the character code is greater than [`u32::MAX`], returns the error [`NumCharRefError::CharCodeOverflow`].
///
/// If the decoded character code isn't a valid [`char`] (as determined by [`char::from_u32`]), returns the error [`NumCharRefError::InvalidCharCode`] with the number.
///
/// If the character is [`char::is_control`] or [`char::is_whitespace`], returns the error [`NumCharRefError::DisallowedCharCode`] with the character.
/// # Examples
/// ```
/// use url_cleaner_engine::glue::*;
///
/// assert_eq!(parse::html::parse_num_char_ref("#65" ).unwrap(), 'A');
/// assert_eq!(parse::html::parse_num_char_ref("#x41").unwrap(), 'A');
///
/// parse::html::parse_num_char_ref("#10").unwrap_err();
/// ```
#[allow(clippy::unwrap_used, reason = "Shouldn't ever happen.")]
#[allow(clippy::missing_panics_doc, reason = "Shouldn't ever happen.")]
pub fn parse_num_char_ref(char_ref: &str) -> Result<char, NumCharRefError> {
    debug!(parse::html::parse_num_char_ref, &(), char_ref);
    
    let mut scratchspace: u32 = 0;

    let mut last_state = HTMLNCRLastState::None;

    for c in char_ref.chars() {
        debug!(parse::html::parse_num_char_ref, &(), c, last_state, scratchspace);
        match (last_state, c) {
            (HTMLNCRLastState::None                             , '#'                              ) => {last_state = HTMLNCRLastState::Hash;},
            (HTMLNCRLastState::None                             , _                                ) => Err(NumCharRefError::NotANumCharRef)?,
            (HTMLNCRLastState::Hash | HTMLNCRLastState::DecDigit, '0'..='9'                        ) => {last_state = HTMLNCRLastState::DecDigit; scratchspace = scratchspace.checked_mul(10).and_then(|x| x.checked_add(c.to_digit(10).unwrap())).ok_or(NumCharRefError::CharCodeOverflow)?},
            (HTMLNCRLastState::Hash                             , 'x' | 'X'                        ) => {last_state = HTMLNCRLastState::X;},
            (HTMLNCRLastState::Hash | HTMLNCRLastState::DecDigit, _                                ) => Err(NumCharRefError::InvalidDec)?,
            (HTMLNCRLastState::X    | HTMLNCRLastState::HexDigit, '0'..='9' | 'a'..='f' | 'A'..='F') => {last_state = HTMLNCRLastState::HexDigit; scratchspace = scratchspace.checked_mul(16).and_then(|x| x.checked_add(c.to_digit(16).unwrap())).ok_or(NumCharRefError::CharCodeOverflow)?},
            (HTMLNCRLastState::X    | HTMLNCRLastState::HexDigit, _                                ) => Err(NumCharRefError::InvalidHex)?
        }
    }

    debug!(parse::html::parse_num_char_ref, &(), scratchspace);

    let ret = char::from_u32(scratchspace).ok_or(NumCharRefError::InvalidCharCode(scratchspace))?;

    if ret.is_control() || ret.is_whitespace() {Err(NumCharRefError::DisallowedCharCode(ret))?;}

    Ok(ret)
}