url_cleaner_engine/glue/parse/html/
unescape.rs

1//! Unescapes HTML text.
2
3use std::borrow::Cow;
4
5use thiserror::Error;
6
7use crate::util::*;
8
9/// The enum of errors that can happen when unescaping HTML text.
10#[derive(Debug, Error)]
11pub enum UnescapeTextError {
12    /// Returned when a syntax error is encountered.
13    #[error("Syntax error.")]
14    SyntaxError,
15    /// Returned when an [`CharRefError`] is encountered.
16    #[error(transparent)]
17    CharRefError(#[from] CharRefError)
18}
19
20/// Unescapes HTML text. Probably very bad and buggy, but SHOULD give correct outputs for in-spec inputs.
21/// # Errors
22/// If an unknown character reference is found, returns the error [`UnescapeTextError::CharRefError`].
23///
24/// If a `&` is found without a `;` afterwards, returns the error [`UnescapeTextError::SyntaxError`].
25/// # Examples
26/// ```
27/// use url_cleaner_engine::glue::*;
28///
29/// assert_eq!(parse::html::unescape_text("a&b" ).unwrap(), "a&b");
30/// assert_eq!(parse::html::unescape_text("aAb" ).unwrap(), "aAb");
31/// assert_eq!(parse::html::unescape_text("aAb").unwrap(), "aAb");
32/// ```
33pub fn unescape_text(s: &str) -> Result<String, UnescapeTextError> {
34    debug!(parse::html::unescape_text, &(), s);
35    
36    let mut ret = String::new();
37
38    let mut first = true;
39
40    for segment in s.split('&') {
41        match (first, segment.split_once(';')) {
42            (true , _                     ) => {ret.push_str(segment); first=false;}
43            (false, Some((char_ref, rest))) => {ret.push_str(&parse_char_ref(char_ref)?); ret.push_str(rest);},
44            (false, None                  ) => Err(UnescapeTextError::SyntaxError)?
45        }
46    }
47
48    Ok(ret)
49}
50
51/// The enum of errors describing how a character reference is invalid.
52#[derive(Debug, Error)]
53#[error("Unknown character reference.")]
54pub enum CharRefError {
55    /// Unknown char name.
56    #[error("Unknown char name.")]
57    UnknownCharName,
58    /// Returned when a [`NumCharRefError`] is encountered.
59    #[error(transparent)]
60    NumCharRefError(#[from] NumCharRefError)
61}
62
63/// Convert character references to strings.
64///
65/// Unfortunately, there are OVER TWO THOUSAND named character references, and some are multiple [`char`]s.
66/// # Errors
67/// If `char_ref` starts with `#` and the call to [`parse_num_char_ref`] returns an error, that error is returned.
68///
69/// Otherwise, if the character name isn't defined as a valid character reference, returns the error [`CharRefError::UnknownCharName`].
70/// # Examples
71/// ```
72/// use url_cleaner_engine::glue::*;
73///
74/// assert_eq!(parse::html::parse_char_ref("amp" ).unwrap(), "&");
75/// assert_eq!(parse::html::parse_char_ref("#65" ).unwrap(), "A");
76/// assert_eq!(parse::html::parse_char_ref("#x41").unwrap(), "A");
77///
78/// parse::html::parse_char_ref("unknown").unwrap_err();
79/// ```
80pub fn parse_char_ref(char_ref: &str) -> Result<Cow<'static, str>, CharRefError> {
81    debug!(parse::html::parse_char_ref, &(), char_ref);
82
83    if char_ref.starts_with("#") {return Ok(Cow::Owned(parse_num_char_ref(char_ref)?.into()));}
84    Ok(Cow::Borrowed(match char_ref {
85        "AElig"                           => "\u{000C6}",
86        "AMP"                             => "\u{00026}",
87        "Aacute"                          => "\u{000C1}",
88        "Abreve"                          => "\u{00102}",
89        "Acirc"                           => "\u{000C2}",
90        "Acy"                             => "\u{00410}",
91        "Afr"                             => "\u{1D504}",
92        "Agrave"                          => "\u{000C0}",
93        "Alpha"                           => "\u{00391}",
94        "Amacr"                           => "\u{00100}",
95        "And"                             => "\u{02A53}",
96        "Aogon"                           => "\u{00104}",
97        "Aopf"                            => "\u{1D538}",
98        "ApplyFunction"                   => "\u{02061}",
99        "Aring"                           => "\u{000C5}",
100        "Ascr"                            => "\u{1D49C}",
101        "Assign"                          => "\u{02254}",
102        "Atilde"                          => "\u{000C3}",
103        "Auml"                            => "\u{000C4}",
104        "Backslash"                       => "\u{02216}",
105        "Barv"                            => "\u{02AE7}",
106        "Barwed"                          => "\u{02306}",
107        "Bcy"                             => "\u{00411}",
108        "Because"                         => "\u{02235}",
109        "Bernoullis"                      => "\u{0212C}",
110        "Beta"                            => "\u{00392}",
111        "Bfr"                             => "\u{1D505}",
112        "Bopf"                            => "\u{1D539}",
113        "Breve"                           => "\u{002D8}",
114        "Bscr"                            => "\u{0212C}",
115        "Bumpeq"                          => "\u{0224E}",
116        "CHcy"                            => "\u{00427}",
117        "COPY"                            => "\u{000A9}",
118        "Cacute"                          => "\u{00106}",
119        "Cap"                             => "\u{022D2}",
120        "CapitalDifferentialD"            => "\u{02145}",
121        "Cayleys"                         => "\u{0212D}",
122        "Ccaron"                          => "\u{0010C}",
123        "Ccedil"                          => "\u{000C7}",
124        "Ccirc"                           => "\u{00108}",
125        "Cconint"                         => "\u{02230}",
126        "Cdot"                            => "\u{0010A}",
127        "Cedilla"                         => "\u{000B8}",
128        "CenterDot"                       => "\u{000B7}",
129        "Cfr"                             => "\u{0212D}",
130        "Chi"                             => "\u{003A7}",
131        "CircleDot"                       => "\u{02299}",
132        "CircleMinus"                     => "\u{02296}",
133        "CirclePlus"                      => "\u{02295}",
134        "CircleTimes"                     => "\u{02297}",
135        "ClockwiseContourIntegral"        => "\u{02232}",
136        "CloseCurlyDoubleQuote"           => "\u{0201D}",
137        "CloseCurlyQuote"                 => "\u{02019}",
138        "Colon"                           => "\u{02237}",
139        "Colone"                          => "\u{02A74}",
140        "Congruent"                       => "\u{02261}",
141        "Conint"                          => "\u{0222F}",
142        "ContourIntegral"                 => "\u{0222E}",
143        "Copf"                            => "\u{02102}",
144        "Coproduct"                       => "\u{02210}",
145        "CounterClockwiseContourIntegral" => "\u{02233}",
146        "Cross"                           => "\u{02A2F}",
147        "Cscr"                            => "\u{1D49E}",
148        "Cup"                             => "\u{022D3}",
149        "CupCap"                          => "\u{0224D}",
150        "DD"                              => "\u{02145}",
151        "DDotrahd"                        => "\u{02911}",
152        "DJcy"                            => "\u{00402}",
153        "DScy"                            => "\u{00405}",
154        "DZcy"                            => "\u{0040F}",
155        "Dagger"                          => "\u{02021}",
156        "Darr"                            => "\u{021A1}",
157        "Dashv"                           => "\u{02AE4}",
158        "Dcaron"                          => "\u{0010E}",
159        "Dcy"                             => "\u{00414}",
160        "Del"                             => "\u{02207}",
161        "Delta"                           => "\u{00394}",
162        "Dfr"                             => "\u{1D507}",
163        "DiacriticalAcute"                => "\u{000B4}",
164        "DiacriticalDot"                  => "\u{002D9}",
165        "DiacriticalDoubleAcute"          => "\u{002DD}",
166        "DiacriticalGrave"                => "\u{00060}",
167        "DiacriticalTilde"                => "\u{002DC}",
168        "Diamond"                         => "\u{022C4}",
169        "DifferentialD"                   => "\u{02146}",
170        "Dopf"                            => "\u{1D53B}",
171        "Dot"                             => "\u{000A8}",
172        "DotDot"                          => "\u{020DC}",
173        "DotEqual"                        => "\u{02250}",
174        "DoubleContourIntegral"           => "\u{0222F}",
175        "DoubleDot"                       => "\u{000A8}",
176        "DoubleDownArrow"                 => "\u{021D3}",
177        "DoubleLeftArrow"                 => "\u{021D0}",
178        "DoubleLeftRightArrow"            => "\u{021D4}",
179        "DoubleLeftTee"                   => "\u{02AE4}",
180        "DoubleLongLeftArrow"             => "\u{027F8}",
181        "DoubleLongLeftRightArrow"        => "\u{027FA}",
182        "DoubleLongRightArrow"            => "\u{027F9}",
183        "DoubleRightArrow"                => "\u{021D2}",
184        "DoubleRightTee"                  => "\u{022A8}",
185        "DoubleUpArrow"                   => "\u{021D1}",
186        "DoubleUpDownArrow"               => "\u{021D5}",
187        "DoubleVerticalBar"               => "\u{02225}",
188        "DownArrow"                       => "\u{02193}",
189        "DownArrowBar"                    => "\u{02913}",
190        "DownArrowUpArrow"                => "\u{021F5}",
191        "DownBreve"                       => "\u{00311}",
192        "DownLeftRightVector"             => "\u{02950}",
193        "DownLeftTeeVector"               => "\u{0295E}",
194        "DownLeftVector"                  => "\u{021BD}",
195        "DownLeftVectorBar"               => "\u{02956}",
196        "DownRightTeeVector"              => "\u{0295F}",
197        "DownRightVector"                 => "\u{021C1}",
198        "DownRightVectorBar"              => "\u{02957}",
199        "DownTee"                         => "\u{022A4}",
200        "DownTeeArrow"                    => "\u{021A7}",
201        "Downarrow"                       => "\u{021D3}",
202        "Dscr"                            => "\u{1D49F}",
203        "Dstrok"                          => "\u{00110}",
204        "ENG"                             => "\u{0014A}",
205        "ETH"                             => "\u{000D0}",
206        "Eacute"                          => "\u{000C9}",
207        "Ecaron"                          => "\u{0011A}",
208        "Ecirc"                           => "\u{000CA}",
209        "Ecy"                             => "\u{0042D}",
210        "Edot"                            => "\u{00116}",
211        "Efr"                             => "\u{1D508}",
212        "Egrave"                          => "\u{000C8}",
213        "Element"                         => "\u{02208}",
214        "Emacr"                           => "\u{00112}",
215        "EmptySmallSquare"                => "\u{025FB}",
216        "EmptyVerySmallSquare"            => "\u{025AB}",
217        "Eogon"                           => "\u{00118}",
218        "Eopf"                            => "\u{1D53C}",
219        "Epsilon"                         => "\u{00395}",
220        "Equal"                           => "\u{02A75}",
221        "EqualTilde"                      => "\u{02242}",
222        "Equilibrium"                     => "\u{021CC}",
223        "Escr"                            => "\u{02130}",
224        "Esim"                            => "\u{02A73}",
225        "Eta"                             => "\u{00397}",
226        "Euml"                            => "\u{000CB}",
227        "Exists"                          => "\u{02203}",
228        "ExponentialE"                    => "\u{02147}",
229        "Fcy"                             => "\u{00424}",
230        "Ffr"                             => "\u{1D509}",
231        "FilledSmallSquare"               => "\u{025FC}",
232        "FilledVerySmallSquare"           => "\u{025AA}",
233        "Fopf"                            => "\u{1D53D}",
234        "ForAll"                          => "\u{02200}",
235        "Fouriertrf"                      => "\u{02131}",
236        "Fscr"                            => "\u{02131}",
237        "GJcy"                            => "\u{00403}",
238        "GT"                              => "\u{0003E}",
239        "Gamma"                           => "\u{00393}",
240        "Gammad"                          => "\u{003DC}",
241        "Gbreve"                          => "\u{0011E}",
242        "Gcedil"                          => "\u{00122}",
243        "Gcirc"                           => "\u{0011C}",
244        "Gcy"                             => "\u{00413}",
245        "Gdot"                            => "\u{00120}",
246        "Gfr"                             => "\u{1D50A}",
247        "Gg"                              => "\u{022D9}",
248        "Gopf"                            => "\u{1D53E}",
249        "GreaterEqual"                    => "\u{02265}",
250        "GreaterEqualLess"                => "\u{022DB}",
251        "GreaterFullEqual"                => "\u{02267}",
252        "GreaterGreater"                  => "\u{02AA2}",
253        "GreaterLess"                     => "\u{02277}",
254        "GreaterSlantEqual"               => "\u{02A7E}",
255        "GreaterTilde"                    => "\u{02273}",
256        "Gscr"                            => "\u{1D4A2}",
257        "Gt"                              => "\u{0226B}",
258        "HARDcy"                          => "\u{0042A}",
259        "Hacek"                           => "\u{002C7}",
260        "Hat"                             => "\u{0005E}",
261        "Hcirc"                           => "\u{00124}",
262        "Hfr"                             => "\u{0210C}",
263        "HilbertSpace"                    => "\u{0210B}",
264        "Hopf"                            => "\u{0210D}",
265        "HorizontalLine"                  => "\u{02500}",
266        "Hscr"                            => "\u{0210B}",
267        "Hstrok"                          => "\u{00126}",
268        "HumpDownHump"                    => "\u{0224E}",
269        "HumpEqual"                       => "\u{0224F}",
270        "IEcy"                            => "\u{00415}",
271        "IJlig"                           => "\u{00132}",
272        "IOcy"                            => "\u{00401}",
273        "Iacute"                          => "\u{000CD}",
274        "Icirc"                           => "\u{000CE}",
275        "Icy"                             => "\u{00418}",
276        "Idot"                            => "\u{00130}",
277        "Ifr"                             => "\u{02111}",
278        "Igrave"                          => "\u{000CC}",
279        "Im"                              => "\u{02111}",
280        "Imacr"                           => "\u{0012A}",
281        "ImaginaryI"                      => "\u{02148}",
282        "Implies"                         => "\u{021D2}",
283        "Int"                             => "\u{0222C}",
284        "Integral"                        => "\u{0222B}",
285        "Intersection"                    => "\u{022C2}",
286        "InvisibleComma"                  => "\u{02063}",
287        "InvisibleTimes"                  => "\u{02062}",
288        "Iogon"                           => "\u{0012E}",
289        "Iopf"                            => "\u{1D540}",
290        "Iota"                            => "\u{00399}",
291        "Iscr"                            => "\u{02110}",
292        "Itilde"                          => "\u{00128}",
293        "Iukcy"                           => "\u{00406}",
294        "Iuml"                            => "\u{000CF}",
295        "Jcirc"                           => "\u{00134}",
296        "Jcy"                             => "\u{00419}",
297        "Jfr"                             => "\u{1D50D}",
298        "Jopf"                            => "\u{1D541}",
299        "Jscr"                            => "\u{1D4A5}",
300        "Jsercy"                          => "\u{00408}",
301        "Jukcy"                           => "\u{00404}",
302        "KHcy"                            => "\u{00425}",
303        "KJcy"                            => "\u{0040C}",
304        "Kappa"                           => "\u{0039A}",
305        "Kcedil"                          => "\u{00136}",
306        "Kcy"                             => "\u{0041A}",
307        "Kfr"                             => "\u{1D50E}",
308        "Kopf"                            => "\u{1D542}",
309        "Kscr"                            => "\u{1D4A6}",
310        "LJcy"                            => "\u{00409}",
311        "LT"                              => "\u{0003C}",
312        "Lacute"                          => "\u{00139}",
313        "Lambda"                          => "\u{0039B}",
314        "Lang"                            => "\u{027EA}",
315        "Laplacetrf"                      => "\u{02112}",
316        "Larr"                            => "\u{0219E}",
317        "Lcaron"                          => "\u{0013D}",
318        "Lcedil"                          => "\u{0013B}",
319        "Lcy"                             => "\u{0041B}",
320        "LeftAngleBracket"                => "\u{027E8}",
321        "LeftArrow"                       => "\u{02190}",
322        "LeftArrowBar"                    => "\u{021E4}",
323        "LeftArrowRightArrow"             => "\u{021C6}",
324        "LeftCeiling"                     => "\u{02308}",
325        "LeftDoubleBracket"               => "\u{027E6}",
326        "LeftDownTeeVector"               => "\u{02961}",
327        "LeftDownVector"                  => "\u{021C3}",
328        "LeftDownVectorBar"               => "\u{02959}",
329        "LeftFloor"                       => "\u{0230A}",
330        "LeftRightArrow"                  => "\u{02194}",
331        "LeftRightVector"                 => "\u{0294E}",
332        "LeftTee"                         => "\u{022A3}",
333        "LeftTeeArrow"                    => "\u{021A4}",
334        "LeftTeeVector"                   => "\u{0295A}",
335        "LeftTriangle"                    => "\u{022B2}",
336        "LeftTriangleBar"                 => "\u{029CF}",
337        "LeftTriangleEqual"               => "\u{022B4}",
338        "LeftUpDownVector"                => "\u{02951}",
339        "LeftUpTeeVector"                 => "\u{02960}",
340        "LeftUpVector"                    => "\u{021BF}",
341        "LeftUpVectorBar"                 => "\u{02958}",
342        "LeftVector"                      => "\u{021BC}",
343        "LeftVectorBar"                   => "\u{02952}",
344        "Leftarrow"                       => "\u{021D0}",
345        "Leftrightarrow"                  => "\u{021D4}",
346        "LessEqualGreater"                => "\u{022DA}",
347        "LessFullEqual"                   => "\u{02266}",
348        "LessGreater"                     => "\u{02276}",
349        "LessLess"                        => "\u{02AA1}",
350        "LessSlantEqual"                  => "\u{02A7D}",
351        "LessTilde"                       => "\u{02272}",
352        "Lfr"                             => "\u{1D50F}",
353        "Ll"                              => "\u{022D8}",
354        "Lleftarrow"                      => "\u{021DA}",
355        "Lmidot"                          => "\u{0013F}",
356        "LongLeftArrow"                   => "\u{027F5}",
357        "LongLeftRightArrow"              => "\u{027F7}",
358        "LongRightArrow"                  => "\u{027F6}",
359        "Longleftarrow"                   => "\u{027F8}",
360        "Longleftrightarrow"              => "\u{027FA}",
361        "Longrightarrow"                  => "\u{027F9}",
362        "Lopf"                            => "\u{1D543}",
363        "LowerLeftArrow"                  => "\u{02199}",
364        "LowerRightArrow"                 => "\u{02198}",
365        "Lscr"                            => "\u{02112}",
366        "Lsh"                             => "\u{021B0}",
367        "Lstrok"                          => "\u{00141}",
368        "Lt"                              => "\u{0226A}",
369        "Map"                             => "\u{02905}",
370        "Mcy"                             => "\u{0041C}",
371        "MediumSpace"                     => "\u{0205F}",
372        "Mellintrf"                       => "\u{02133}",
373        "Mfr"                             => "\u{1D510}",
374        "MinusPlus"                       => "\u{02213}",
375        "Mopf"                            => "\u{1D544}",
376        "Mscr"                            => "\u{02133}",
377        "Mu"                              => "\u{0039C}",
378        "NJcy"                            => "\u{0040A}",
379        "Nacute"                          => "\u{00143}",
380        "Ncaron"                          => "\u{00147}",
381        "Ncedil"                          => "\u{00145}",
382        "Ncy"                             => "\u{0041D}",
383        "NegativeMediumSpace"             => "\u{0200B}",
384        "NegativeThickSpace"              => "\u{0200B}",
385        "NegativeThinSpace"               => "\u{0200B}",
386        "NegativeVeryThinSpace"           => "\u{0200B}",
387        "NestedGreaterGreater"            => "\u{0226B}",
388        "NestedLessLess"                  => "\u{0226A}",
389        "NewLine"                         => "\u{0000A}",
390        "Nfr"                             => "\u{1D511}",
391        "NoBreak"                         => "\u{02060}",
392        "NonBreakingSpace"                => "\u{000A0}",
393        "Nopf"                            => "\u{02115}",
394        "Not"                             => "\u{02AEC}",
395        "NotCongruent"                    => "\u{02262}",
396        "NotCupCap"                       => "\u{0226D}",
397        "NotDoubleVerticalBar"            => "\u{02226}",
398        "NotElement"                      => "\u{02209}",
399        "NotEqual"                        => "\u{02260}",
400        "NotEqualTilde"                   => "\u{02242}\u{00338}",
401        "NotExists"                       => "\u{02204}",
402        "NotGreater"                      => "\u{0226F}",
403        "NotGreaterEqual"                 => "\u{02271}",
404        "NotGreaterFullEqual"             => "\u{02267}\u{00338}",
405        "NotGreaterGreater"               => "\u{0226B}\u{00338}",
406        "NotGreaterLess"                  => "\u{02279}",
407        "NotGreaterSlantEqual"            => "\u{02A7E}\u{00338}",
408        "NotGreaterTilde"                 => "\u{02275}",
409        "NotHumpDownHump"                 => "\u{0224E}\u{00338}",
410        "NotHumpEqual"                    => "\u{0224F}\u{00338}",
411        "NotLeftTriangle"                 => "\u{022EA}",
412        "NotLeftTriangleBar"              => "\u{029CF}\u{00338}",
413        "NotLeftTriangleEqual"            => "\u{022EC}",
414        "NotLess"                         => "\u{0226E}",
415        "NotLessEqual"                    => "\u{02270}",
416        "NotLessGreater"                  => "\u{02278}",
417        "NotLessLess"                     => "\u{0226A}\u{00338}",
418        "NotLessSlantEqual"               => "\u{02A7D}\u{00338}",
419        "NotLessTilde"                    => "\u{02274}",
420        "NotNestedGreaterGreater"         => "\u{02AA2}\u{00338}",
421        "NotNestedLessLess"               => "\u{02AA1}\u{00338}",
422        "NotPrecedes"                     => "\u{02280}",
423        "NotPrecedesEqual"                => "\u{02AAF}\u{00338}",
424        "NotPrecedesSlantEqual"           => "\u{022E0}",
425        "NotReverseElement"               => "\u{0220C}",
426        "NotRightTriangle"                => "\u{022EB}",
427        "NotRightTriangleBar"             => "\u{029D0}\u{00338}",
428        "NotRightTriangleEqual"           => "\u{022ED}",
429        "NotSquareSubset"                 => "\u{0228F}\u{00338}",
430        "NotSquareSubsetEqual"            => "\u{022E2}",
431        "NotSquareSuperset"               => "\u{02290}\u{00338}",
432        "NotSquareSupersetEqual"          => "\u{022E3}",
433        "NotSubset"                       => "\u{02282}\u{020D2}",
434        "NotSubsetEqual"                  => "\u{02288}",
435        "NotSucceeds"                     => "\u{02281}",
436        "NotSucceedsEqual"                => "\u{02AB0}\u{00338}",
437        "NotSucceedsSlantEqual"           => "\u{022E1}",
438        "NotSucceedsTilde"                => "\u{0227F}\u{00338}",
439        "NotSuperset"                     => "\u{02283}\u{020D2}",
440        "NotSupersetEqual"                => "\u{02289}",
441        "NotTilde"                        => "\u{02241}",
442        "NotTildeEqual"                   => "\u{02244}",
443        "NotTildeFullEqual"               => "\u{02247}",
444        "NotTildeTilde"                   => "\u{02249}",
445        "NotVerticalBar"                  => "\u{02224}",
446        "Nscr"                            => "\u{1D4A9}",
447        "Ntilde"                          => "\u{000D1}",
448        "Nu"                              => "\u{0039D}",
449        "OElig"                           => "\u{00152}",
450        "Oacute"                          => "\u{000D3}",
451        "Ocirc"                           => "\u{000D4}",
452        "Ocy"                             => "\u{0041E}",
453        "Odblac"                          => "\u{00150}",
454        "Ofr"                             => "\u{1D512}",
455        "Ograve"                          => "\u{000D2}",
456        "Omacr"                           => "\u{0014C}",
457        "Omega"                           => "\u{003A9}",
458        "Omicron"                         => "\u{0039F}",
459        "Oopf"                            => "\u{1D546}",
460        "OpenCurlyDoubleQuote"            => "\u{0201C}",
461        "OpenCurlyQuote"                  => "\u{02018}",
462        "Or"                              => "\u{02A54}",
463        "Oscr"                            => "\u{1D4AA}",
464        "Oslash"                          => "\u{000D8}",
465        "Otilde"                          => "\u{000D5}",
466        "Otimes"                          => "\u{02A37}",
467        "Ouml"                            => "\u{000D6}",
468        "OverBar"                         => "\u{0203E}",
469        "OverBrace"                       => "\u{023DE}",
470        "OverBracket"                     => "\u{023B4}",
471        "OverParenthesis"                 => "\u{023DC}",
472        "PartialD"                        => "\u{02202}",
473        "Pcy"                             => "\u{0041F}",
474        "Pfr"                             => "\u{1D513}",
475        "Phi"                             => "\u{003A6}",
476        "Pi"                              => "\u{003A0}",
477        "PlusMinus"                       => "\u{000B1}",
478        "Poincareplane"                   => "\u{0210C}",
479        "Popf"                            => "\u{02119}",
480        "Pr"                              => "\u{02ABB}",
481        "Precedes"                        => "\u{0227A}",
482        "PrecedesEqual"                   => "\u{02AAF}",
483        "PrecedesSlantEqual"              => "\u{0227C}",
484        "PrecedesTilde"                   => "\u{0227E}",
485        "Prime"                           => "\u{02033}",
486        "Product"                         => "\u{0220F}",
487        "Proportion"                      => "\u{02237}",
488        "Proportional"                    => "\u{0221D}",
489        "Pscr"                            => "\u{1D4AB}",
490        "Psi"                             => "\u{003A8}",
491        "QUOT"                            => "\u{00022}",
492        "Qfr"                             => "\u{1D514}",
493        "Qopf"                            => "\u{0211A}",
494        "Qscr"                            => "\u{1D4AC}",
495        "RBarr"                           => "\u{02910}",
496        "REG"                             => "\u{000AE}",
497        "Racute"                          => "\u{00154}",
498        "Rang"                            => "\u{027EB}",
499        "Rarr"                            => "\u{021A0}",
500        "Rarrtl"                          => "\u{02916}",
501        "Rcaron"                          => "\u{00158}",
502        "Rcedil"                          => "\u{00156}",
503        "Rcy"                             => "\u{00420}",
504        "Re"                              => "\u{0211C}",
505        "ReverseElement"                  => "\u{0220B}",
506        "ReverseEquilibrium"              => "\u{021CB}",
507        "ReverseUpEquilibrium"            => "\u{0296F}",
508        "Rfr"                             => "\u{0211C}",
509        "Rho"                             => "\u{003A1}",
510        "RightAngleBracket"               => "\u{027E9}",
511        "RightArrow"                      => "\u{02192}",
512        "RightArrowBar"                   => "\u{021E5}",
513        "RightArrowLeftArrow"             => "\u{021C4}",
514        "RightCeiling"                    => "\u{02309}",
515        "RightDoubleBracket"              => "\u{027E7}",
516        "RightDownTeeVector"              => "\u{0295D}",
517        "RightDownVector"                 => "\u{021C2}",
518        "RightDownVectorBar"              => "\u{02955}",
519        "RightFloor"                      => "\u{0230B}",
520        "RightTee"                        => "\u{022A2}",
521        "RightTeeArrow"                   => "\u{021A6}",
522        "RightTeeVector"                  => "\u{0295B}",
523        "RightTriangle"                   => "\u{022B3}",
524        "RightTriangleBar"                => "\u{029D0}",
525        "RightTriangleEqual"              => "\u{022B5}",
526        "RightUpDownVector"               => "\u{0294F}",
527        "RightUpTeeVector"                => "\u{0295C}",
528        "RightUpVector"                   => "\u{021BE}",
529        "RightUpVectorBar"                => "\u{02954}",
530        "RightVector"                     => "\u{021C0}",
531        "RightVectorBar"                  => "\u{02953}",
532        "Rightarrow"                      => "\u{021D2}",
533        "Ropf"                            => "\u{0211D}",
534        "RoundImplies"                    => "\u{02970}",
535        "Rrightarrow"                     => "\u{021DB}",
536        "Rscr"                            => "\u{0211B}",
537        "Rsh"                             => "\u{021B1}",
538        "RuleDelayed"                     => "\u{029F4}",
539        "SHCHcy"                          => "\u{00429}",
540        "SHcy"                            => "\u{00428}",
541        "SOFTcy"                          => "\u{0042C}",
542        "Sacute"                          => "\u{0015A}",
543        "Sc"                              => "\u{02ABC}",
544        "Scaron"                          => "\u{00160}",
545        "Scedil"                          => "\u{0015E}",
546        "Scirc"                           => "\u{0015C}",
547        "Scy"                             => "\u{00421}",
548        "Sfr"                             => "\u{1D516}",
549        "ShortDownArrow"                  => "\u{02193}",
550        "ShortLeftArrow"                  => "\u{02190}",
551        "ShortRightArrow"                 => "\u{02192}",
552        "ShortUpArrow"                    => "\u{02191}",
553        "Sigma"                           => "\u{003A3}",
554        "SmallCircle"                     => "\u{02218}",
555        "Sopf"                            => "\u{1D54A}",
556        "Sqrt"                            => "\u{0221A}",
557        "Square"                          => "\u{025A1}",
558        "SquareIntersection"              => "\u{02293}",
559        "SquareSubset"                    => "\u{0228F}",
560        "SquareSubsetEqual"               => "\u{02291}",
561        "SquareSuperset"                  => "\u{02290}",
562        "SquareSupersetEqual"             => "\u{02292}",
563        "SquareUnion"                     => "\u{02294}",
564        "Sscr"                            => "\u{1D4AE}",
565        "Star"                            => "\u{022C6}",
566        "Sub"                             => "\u{022D0}",
567        "Subset"                          => "\u{022D0}",
568        "SubsetEqual"                     => "\u{02286}",
569        "Succeeds"                        => "\u{0227B}",
570        "SucceedsEqual"                   => "\u{02AB0}",
571        "SucceedsSlantEqual"              => "\u{0227D}",
572        "SucceedsTilde"                   => "\u{0227F}",
573        "SuchThat"                        => "\u{0220B}",
574        "Sum"                             => "\u{02211}",
575        "Sup"                             => "\u{022D1}",
576        "Superset"                        => "\u{02283}",
577        "SupersetEqual"                   => "\u{02287}",
578        "Supset"                          => "\u{022D1}",
579        "THORN"                           => "\u{000DE}",
580        "TRADE"                           => "\u{02122}",
581        "TSHcy"                           => "\u{0040B}",
582        "TScy"                            => "\u{00426}",
583        "Tab"                             => "\u{00009}",
584        "Tau"                             => "\u{003A4}",
585        "Tcaron"                          => "\u{00164}",
586        "Tcedil"                          => "\u{00162}",
587        "Tcy"                             => "\u{00422}",
588        "Tfr"                             => "\u{1D517}",
589        "Therefore"                       => "\u{02234}",
590        "Theta"                           => "\u{00398}",
591        "ThickSpace"                      => "\u{0205F}\u{0200A}",
592        "ThinSpace"                       => "\u{02009}",
593        "Tilde"                           => "\u{0223C}",
594        "TildeEqual"                      => "\u{02243}",
595        "TildeFullEqual"                  => "\u{02245}",
596        "TildeTilde"                      => "\u{02248}",
597        "Topf"                            => "\u{1D54B}",
598        "TripleDot"                       => "\u{020DB}",
599        "Tscr"                            => "\u{1D4AF}",
600        "Tstrok"                          => "\u{00166}",
601        "Uacute"                          => "\u{000DA}",
602        "Uarr"                            => "\u{0219F}",
603        "Uarrocir"                        => "\u{02949}",
604        "Ubrcy"                           => "\u{0040E}",
605        "Ubreve"                          => "\u{0016C}",
606        "Ucirc"                           => "\u{000DB}",
607        "Ucy"                             => "\u{00423}",
608        "Udblac"                          => "\u{00170}",
609        "Ufr"                             => "\u{1D518}",
610        "Ugrave"                          => "\u{000D9}",
611        "Umacr"                           => "\u{0016A}",
612        "UnderBar"                        => "\u{0005F}",
613        "UnderBrace"                      => "\u{023DF}",
614        "UnderBracket"                    => "\u{023B5}",
615        "UnderParenthesis"                => "\u{023DD}",
616        "Union"                           => "\u{022C3}",
617        "UnionPlus"                       => "\u{0228E}",
618        "Uogon"                           => "\u{00172}",
619        "Uopf"                            => "\u{1D54C}",
620        "UpArrow"                         => "\u{02191}",
621        "UpArrowBar"                      => "\u{02912}",
622        "UpArrowDownArrow"                => "\u{021C5}",
623        "UpDownArrow"                     => "\u{02195}",
624        "UpEquilibrium"                   => "\u{0296E}",
625        "UpTee"                           => "\u{022A5}",
626        "UpTeeArrow"                      => "\u{021A5}",
627        "Uparrow"                         => "\u{021D1}",
628        "Updownarrow"                     => "\u{021D5}",
629        "UpperLeftArrow"                  => "\u{02196}",
630        "UpperRightArrow"                 => "\u{02197}",
631        "Upsi"                            => "\u{003D2}",
632        "Upsilon"                         => "\u{003A5}",
633        "Uring"                           => "\u{0016E}",
634        "Uscr"                            => "\u{1D4B0}",
635        "Utilde"                          => "\u{00168}",
636        "Uuml"                            => "\u{000DC}",
637        "VDash"                           => "\u{022AB}",
638        "Vbar"                            => "\u{02AEB}",
639        "Vcy"                             => "\u{00412}",
640        "Vdash"                           => "\u{022A9}",
641        "Vdashl"                          => "\u{02AE6}",
642        "Vee"                             => "\u{022C1}",
643        "Verbar"                          => "\u{02016}",
644        "Vert"                            => "\u{02016}",
645        "VerticalBar"                     => "\u{02223}",
646        "VerticalLine"                    => "\u{0007C}",
647        "VerticalSeparator"               => "\u{02758}",
648        "VerticalTilde"                   => "\u{02240}",
649        "VeryThinSpace"                   => "\u{0200A}",
650        "Vfr"                             => "\u{1D519}",
651        "Vopf"                            => "\u{1D54D}",
652        "Vscr"                            => "\u{1D4B1}",
653        "Vvdash"                          => "\u{022AA}",
654        "Wcirc"                           => "\u{00174}",
655        "Wedge"                           => "\u{022C0}",
656        "Wfr"                             => "\u{1D51A}",
657        "Wopf"                            => "\u{1D54E}",
658        "Wscr"                            => "\u{1D4B2}",
659        "Xfr"                             => "\u{1D51B}",
660        "Xi"                              => "\u{0039E}",
661        "Xopf"                            => "\u{1D54F}",
662        "Xscr"                            => "\u{1D4B3}",
663        "YAcy"                            => "\u{0042F}",
664        "YIcy"                            => "\u{00407}",
665        "YUcy"                            => "\u{0042E}",
666        "Yacute"                          => "\u{000DD}",
667        "Ycirc"                           => "\u{00176}",
668        "Ycy"                             => "\u{0042B}",
669        "Yfr"                             => "\u{1D51C}",
670        "Yopf"                            => "\u{1D550}",
671        "Yscr"                            => "\u{1D4B4}",
672        "Yuml"                            => "\u{00178}",
673        "ZHcy"                            => "\u{00416}",
674        "Zacute"                          => "\u{00179}",
675        "Zcaron"                          => "\u{0017D}",
676        "Zcy"                             => "\u{00417}",
677        "Zdot"                            => "\u{0017B}",
678        "ZeroWidthSpace"                  => "\u{0200B}",
679        "Zeta"                            => "\u{00396}",
680        "Zfr"                             => "\u{02128}",
681        "Zopf"                            => "\u{02124}",
682        "Zscr"                            => "\u{1D4B5}",
683        "aacute"                          => "\u{000E1}",
684        "abreve"                          => "\u{00103}",
685        "ac"                              => "\u{0223E}",
686        "acE"                             => "\u{0223E}\u{00333}",
687        "acd"                             => "\u{0223F}",
688        "acirc"                           => "\u{000E2}",
689        "acute"                           => "\u{000B4}",
690        "acy"                             => "\u{00430}",
691        "aelig"                           => "\u{000E6}",
692        "af"                              => "\u{02061}",
693        "afr"                             => "\u{1D51E}",
694        "agrave"                          => "\u{000E0}",
695        "alefsym"                         => "\u{02135}",
696        "aleph"                           => "\u{02135}",
697        "alpha"                           => "\u{003B1}",
698        "amacr"                           => "\u{00101}",
699        "amalg"                           => "\u{02A3F}",
700        "amp"                             => "\u{00026}",
701        "and"                             => "\u{02227}",
702        "andand"                          => "\u{02A55}",
703        "andd"                            => "\u{02A5C}",
704        "andslope"                        => "\u{02A58}",
705        "andv"                            => "\u{02A5A}",
706        "ang"                             => "\u{02220}",
707        "ange"                            => "\u{029A4}",
708        "angle"                           => "\u{02220}",
709        "angmsd"                          => "\u{02221}",
710        "angmsdaa"                        => "\u{029A8}",
711        "angmsdab"                        => "\u{029A9}",
712        "angmsdac"                        => "\u{029AA}",
713        "angmsdad"                        => "\u{029AB}",
714        "angmsdae"                        => "\u{029AC}",
715        "angmsdaf"                        => "\u{029AD}",
716        "angmsdag"                        => "\u{029AE}",
717        "angmsdah"                        => "\u{029AF}",
718        "angrt"                           => "\u{0221F}",
719        "angrtvb"                         => "\u{022BE}",
720        "angrtvbd"                        => "\u{0299D}",
721        "angsph"                          => "\u{02222}",
722        "angst"                           => "\u{000C5}",
723        "angzarr"                         => "\u{0237C}",
724        "aogon"                           => "\u{00105}",
725        "aopf"                            => "\u{1D552}",
726        "ap"                              => "\u{02248}",
727        "apE"                             => "\u{02A70}",
728        "apacir"                          => "\u{02A6F}",
729        "ape"                             => "\u{0224A}",
730        "apid"                            => "\u{0224B}",
731        "apos"                            => "\u{00027}",
732        "approx"                          => "\u{02248}",
733        "approxeq"                        => "\u{0224A}",
734        "aring"                           => "\u{000E5}",
735        "ascr"                            => "\u{1D4B6}",
736        "ast"                             => "\u{0002A}",
737        "asymp"                           => "\u{02248}",
738        "asympeq"                         => "\u{0224D}",
739        "atilde"                          => "\u{000E3}",
740        "auml"                            => "\u{000E4}",
741        "awconint"                        => "\u{02233}",
742        "awint"                           => "\u{02A11}",
743        "bNot"                            => "\u{02AED}",
744        "backcong"                        => "\u{0224C}",
745        "backepsilon"                     => "\u{003F6}",
746        "backprime"                       => "\u{02035}",
747        "backsim"                         => "\u{0223D}",
748        "backsimeq"                       => "\u{022CD}",
749        "barvee"                          => "\u{022BD}",
750        "barwed"                          => "\u{02305}",
751        "barwedge"                        => "\u{02305}",
752        "bbrk"                            => "\u{023B5}",
753        "bbrktbrk"                        => "\u{023B6}",
754        "bcong"                           => "\u{0224C}",
755        "bcy"                             => "\u{00431}",
756        "bdquo"                           => "\u{0201E}",
757        "becaus"                          => "\u{02235}",
758        "because"                         => "\u{02235}",
759        "bemptyv"                         => "\u{029B0}",
760        "bepsi"                           => "\u{003F6}",
761        "bernou"                          => "\u{0212C}",
762        "beta"                            => "\u{003B2}",
763        "beth"                            => "\u{02136}",
764        "between"                         => "\u{0226C}",
765        "bfr"                             => "\u{1D51F}",
766        "bigcap"                          => "\u{022C2}",
767        "bigcirc"                         => "\u{025EF}",
768        "bigcup"                          => "\u{022C3}",
769        "bigodot"                         => "\u{02A00}",
770        "bigoplus"                        => "\u{02A01}",
771        "bigotimes"                       => "\u{02A02}",
772        "bigsqcup"                        => "\u{02A06}",
773        "bigstar"                         => "\u{02605}",
774        "bigtriangledown"                 => "\u{025BD}",
775        "bigtriangleup"                   => "\u{025B3}",
776        "biguplus"                        => "\u{02A04}",
777        "bigvee"                          => "\u{022C1}",
778        "bigwedge"                        => "\u{022C0}",
779        "bkarow"                          => "\u{0290D}",
780        "blacklozenge"                    => "\u{029EB}",
781        "blacksquare"                     => "\u{025AA}",
782        "blacktriangle"                   => "\u{025B4}",
783        "blacktriangledown"               => "\u{025BE}",
784        "blacktriangleleft"               => "\u{025C2}",
785        "blacktriangleright"              => "\u{025B8}",
786        "blank"                           => "\u{02423}",
787        "blk12"                           => "\u{02592}",
788        "blk14"                           => "\u{02591}",
789        "blk34"                           => "\u{02593}",
790        "block"                           => "\u{02588}",
791        "bne"                             => "\u{0003D}\u{020E5}",
792        "bnequiv"                         => "\u{02261}\u{020E5}",
793        "bnot"                            => "\u{02310}",
794        "bopf"                            => "\u{1D553}",
795        "bot"                             => "\u{022A5}",
796        "bottom"                          => "\u{022A5}",
797        "bowtie"                          => "\u{022C8}",
798        "boxDL"                           => "\u{02557}",
799        "boxDR"                           => "\u{02554}",
800        "boxDl"                           => "\u{02556}",
801        "boxDr"                           => "\u{02553}",
802        "boxH"                            => "\u{02550}",
803        "boxHD"                           => "\u{02566}",
804        "boxHU"                           => "\u{02569}",
805        "boxHd"                           => "\u{02564}",
806        "boxHu"                           => "\u{02567}",
807        "boxUL"                           => "\u{0255D}",
808        "boxUR"                           => "\u{0255A}",
809        "boxUl"                           => "\u{0255C}",
810        "boxUr"                           => "\u{02559}",
811        "boxV"                            => "\u{02551}",
812        "boxVH"                           => "\u{0256C}",
813        "boxVL"                           => "\u{02563}",
814        "boxVR"                           => "\u{02560}",
815        "boxVh"                           => "\u{0256B}",
816        "boxVl"                           => "\u{02562}",
817        "boxVr"                           => "\u{0255F}",
818        "boxbox"                          => "\u{029C9}",
819        "boxdL"                           => "\u{02555}",
820        "boxdR"                           => "\u{02552}",
821        "boxdl"                           => "\u{02510}",
822        "boxdr"                           => "\u{0250C}",
823        "boxh"                            => "\u{02500}",
824        "boxhD"                           => "\u{02565}",
825        "boxhU"                           => "\u{02568}",
826        "boxhd"                           => "\u{0252C}",
827        "boxhu"                           => "\u{02534}",
828        "boxminus"                        => "\u{0229F}",
829        "boxplus"                         => "\u{0229E}",
830        "boxtimes"                        => "\u{022A0}",
831        "boxuL"                           => "\u{0255B}",
832        "boxuR"                           => "\u{02558}",
833        "boxul"                           => "\u{02518}",
834        "boxur"                           => "\u{02514}",
835        "boxv"                            => "\u{02502}",
836        "boxvH"                           => "\u{0256A}",
837        "boxvL"                           => "\u{02561}",
838        "boxvR"                           => "\u{0255E}",
839        "boxvh"                           => "\u{0253C}",
840        "boxvl"                           => "\u{02524}",
841        "boxvr"                           => "\u{0251C}",
842        "bprime"                          => "\u{02035}",
843        "breve"                           => "\u{002D8}",
844        "brvbar"                          => "\u{000A6}",
845        "bscr"                            => "\u{1D4B7}",
846        "bsemi"                           => "\u{0204F}",
847        "bsim"                            => "\u{0223D}",
848        "bsime"                           => "\u{022CD}",
849        "bsol"                            => "\u{0005C}",
850        "bsolb"                           => "\u{029C5}",
851        "bsolhsub"                        => "\u{027C8}",
852        "bull"                            => "\u{02022}",
853        "bullet"                          => "\u{02022}",
854        "bump"                            => "\u{0224E}",
855        "bumpE"                           => "\u{02AAE}",
856        "bumpe"                           => "\u{0224F}",
857        "bumpeq"                          => "\u{0224F}",
858        "cacute"                          => "\u{00107}",
859        "cap"                             => "\u{02229}",
860        "capand"                          => "\u{02A44}",
861        "capbrcup"                        => "\u{02A49}",
862        "capcap"                          => "\u{02A4B}",
863        "capcup"                          => "\u{02A47}",
864        "capdot"                          => "\u{02A40}",
865        "caps"                            => "\u{02229}\u{0FE00}",
866        "caret"                           => "\u{02041}",
867        "caron"                           => "\u{002C7}",
868        "ccaps"                           => "\u{02A4D}",
869        "ccaron"                          => "\u{0010D}",
870        "ccedil"                          => "\u{000E7}",
871        "ccirc"                           => "\u{00109}",
872        "ccups"                           => "\u{02A4C}",
873        "ccupssm"                         => "\u{02A50}",
874        "cdot"                            => "\u{0010B}",
875        "cedil"                           => "\u{000B8}",
876        "cemptyv"                         => "\u{029B2}",
877        "cent"                            => "\u{000A2}",
878        "centerdot"                       => "\u{000B7}",
879        "cfr"                             => "\u{1D520}",
880        "chcy"                            => "\u{00447}",
881        "check"                           => "\u{02713}",
882        "checkmark"                       => "\u{02713}",
883        "chi"                             => "\u{003C7}",
884        "cir"                             => "\u{025CB}",
885        "cirE"                            => "\u{029C3}",
886        "circ"                            => "\u{002C6}",
887        "circeq"                          => "\u{02257}",
888        "circlearrowleft"                 => "\u{021BA}",
889        "circlearrowright"                => "\u{021BB}",
890        "circledR"                        => "\u{000AE}",
891        "circledS"                        => "\u{024C8}",
892        "circledast"                      => "\u{0229B}",
893        "circledcirc"                     => "\u{0229A}",
894        "circleddash"                     => "\u{0229D}",
895        "cire"                            => "\u{02257}",
896        "cirfnint"                        => "\u{02A10}",
897        "cirmid"                          => "\u{02AEF}",
898        "cirscir"                         => "\u{029C2}",
899        "clubs"                           => "\u{02663}",
900        "clubsuit"                        => "\u{02663}",
901        "colon"                           => "\u{0003A}",
902        "colone"                          => "\u{02254}",
903        "coloneq"                         => "\u{02254}",
904        "comma"                           => "\u{0002C}",
905        "commat"                          => "\u{00040}",
906        "comp"                            => "\u{02201}",
907        "compfn"                          => "\u{02218}",
908        "complement"                      => "\u{02201}",
909        "complexes"                       => "\u{02102}",
910        "cong"                            => "\u{02245}",
911        "congdot"                         => "\u{02A6D}",
912        "conint"                          => "\u{0222E}",
913        "copf"                            => "\u{1D554}",
914        "coprod"                          => "\u{02210}",
915        "copy"                            => "\u{000A9}",
916        "copysr"                          => "\u{02117}",
917        "crarr"                           => "\u{021B5}",
918        "cross"                           => "\u{02717}",
919        "cscr"                            => "\u{1D4B8}",
920        "csub"                            => "\u{02ACF}",
921        "csube"                           => "\u{02AD1}",
922        "csup"                            => "\u{02AD0}",
923        "csupe"                           => "\u{02AD2}",
924        "ctdot"                           => "\u{022EF}",
925        "cudarrl"                         => "\u{02938}",
926        "cudarrr"                         => "\u{02935}",
927        "cuepr"                           => "\u{022DE}",
928        "cuesc"                           => "\u{022DF}",
929        "cularr"                          => "\u{021B6}",
930        "cularrp"                         => "\u{0293D}",
931        "cup"                             => "\u{0222A}",
932        "cupbrcap"                        => "\u{02A48}",
933        "cupcap"                          => "\u{02A46}",
934        "cupcup"                          => "\u{02A4A}",
935        "cupdot"                          => "\u{0228D}",
936        "cupor"                           => "\u{02A45}",
937        "cups"                            => "\u{0222A}\u{0FE00}",
938        "curarr"                          => "\u{021B7}",
939        "curarrm"                         => "\u{0293C}",
940        "curlyeqprec"                     => "\u{022DE}",
941        "curlyeqsucc"                     => "\u{022DF}",
942        "curlyvee"                        => "\u{022CE}",
943        "curlywedge"                      => "\u{022CF}",
944        "curren"                          => "\u{000A4}",
945        "curvearrowleft"                  => "\u{021B6}",
946        "curvearrowright"                 => "\u{021B7}",
947        "cuvee"                           => "\u{022CE}",
948        "cuwed"                           => "\u{022CF}",
949        "cwconint"                        => "\u{02232}",
950        "cwint"                           => "\u{02231}",
951        "cylcty"                          => "\u{0232D}",
952        "dArr"                            => "\u{021D3}",
953        "dHar"                            => "\u{02965}",
954        "dagger"                          => "\u{02020}",
955        "daleth"                          => "\u{02138}",
956        "darr"                            => "\u{02193}",
957        "dash"                            => "\u{02010}",
958        "dashv"                           => "\u{022A3}",
959        "dbkarow"                         => "\u{0290F}",
960        "dblac"                           => "\u{002DD}",
961        "dcaron"                          => "\u{0010F}",
962        "dcy"                             => "\u{00434}",
963        "dd"                              => "\u{02146}",
964        "ddagger"                         => "\u{02021}",
965        "ddarr"                           => "\u{021CA}",
966        "ddotseq"                         => "\u{02A77}",
967        "deg"                             => "\u{000B0}",
968        "delta"                           => "\u{003B4}",
969        "demptyv"                         => "\u{029B1}",
970        "dfisht"                          => "\u{0297F}",
971        "dfr"                             => "\u{1D521}",
972        "dharl"                           => "\u{021C3}",
973        "dharr"                           => "\u{021C2}",
974        "diam"                            => "\u{022C4}",
975        "diamond"                         => "\u{022C4}",
976        "diamondsuit"                     => "\u{02666}",
977        "diams"                           => "\u{02666}",
978        "die"                             => "\u{000A8}",
979        "digamma"                         => "\u{003DD}",
980        "disin"                           => "\u{022F2}",
981        "div"                             => "\u{000F7}",
982        "divide"                          => "\u{000F7}",
983        "divideontimes"                   => "\u{022C7}",
984        "divonx"                          => "\u{022C7}",
985        "djcy"                            => "\u{00452}",
986        "dlcorn"                          => "\u{0231E}",
987        "dlcrop"                          => "\u{0230D}",
988        "dollar"                          => "\u{00024}",
989        "dopf"                            => "\u{1D555}",
990        "dot"                             => "\u{002D9}",
991        "doteq"                           => "\u{02250}",
992        "doteqdot"                        => "\u{02251}",
993        "dotminus"                        => "\u{02238}",
994        "dotplus"                         => "\u{02214}",
995        "dotsquare"                       => "\u{022A1}",
996        "doublebarwedge"                  => "\u{02306}",
997        "downarrow"                       => "\u{02193}",
998        "downdownarrows"                  => "\u{021CA}",
999        "downharpoonleft"                 => "\u{021C3}",
1000        "downharpoonright"                => "\u{021C2}",
1001        "drbkarow"                        => "\u{02910}",
1002        "drcorn"                          => "\u{0231F}",
1003        "drcrop"                          => "\u{0230C}",
1004        "dscr"                            => "\u{1D4B9}",
1005        "dscy"                            => "\u{00455}",
1006        "dsol"                            => "\u{029F6}",
1007        "dstrok"                          => "\u{00111}",
1008        "dtdot"                           => "\u{022F1}",
1009        "dtri"                            => "\u{025BF}",
1010        "dtrif"                           => "\u{025BE}",
1011        "duarr"                           => "\u{021F5}",
1012        "duhar"                           => "\u{0296F}",
1013        "dwangle"                         => "\u{029A6}",
1014        "dzcy"                            => "\u{0045F}",
1015        "dzigrarr"                        => "\u{027FF}",
1016        "eDDot"                           => "\u{02A77}",
1017        "eDot"                            => "\u{02251}",
1018        "eacute"                          => "\u{000E9}",
1019        "easter"                          => "\u{02A6E}",
1020        "ecaron"                          => "\u{0011B}",
1021        "ecir"                            => "\u{02256}",
1022        "ecirc"                           => "\u{000EA}",
1023        "ecolon"                          => "\u{02255}",
1024        "ecy"                             => "\u{0044D}",
1025        "edot"                            => "\u{00117}",
1026        "ee"                              => "\u{02147}",
1027        "efDot"                           => "\u{02252}",
1028        "efr"                             => "\u{1D522}",
1029        "eg"                              => "\u{02A9A}",
1030        "egrave"                          => "\u{000E8}",
1031        "egs"                             => "\u{02A96}",
1032        "egsdot"                          => "\u{02A98}",
1033        "el"                              => "\u{02A99}",
1034        "elinters"                        => "\u{023E7}",
1035        "ell"                             => "\u{02113}",
1036        "els"                             => "\u{02A95}",
1037        "elsdot"                          => "\u{02A97}",
1038        "emacr"                           => "\u{00113}",
1039        "empty"                           => "\u{02205}",
1040        "emptyset"                        => "\u{02205}",
1041        "emptyv"                          => "\u{02205}",
1042        "emsp"                            => "\u{02003}",
1043        "emsp13"                          => "\u{02004}",
1044        "emsp14"                          => "\u{02005}",
1045        "eng"                             => "\u{0014B}",
1046        "ensp"                            => "\u{02002}",
1047        "eogon"                           => "\u{00119}",
1048        "eopf"                            => "\u{1D556}",
1049        "epar"                            => "\u{022D5}",
1050        "eparsl"                          => "\u{029E3}",
1051        "eplus"                           => "\u{02A71}",
1052        "epsi"                            => "\u{003B5}",
1053        "epsilon"                         => "\u{003B5}",
1054        "epsiv"                           => "\u{003F5}",
1055        "eqcirc"                          => "\u{02256}",
1056        "eqcolon"                         => "\u{02255}",
1057        "eqsim"                           => "\u{02242}",
1058        "eqslantgtr"                      => "\u{02A96}",
1059        "eqslantless"                     => "\u{02A95}",
1060        "equals"                          => "\u{0003D}",
1061        "equest"                          => "\u{0225F}",
1062        "equiv"                           => "\u{02261}",
1063        "equivDD"                         => "\u{02A78}",
1064        "eqvparsl"                        => "\u{029E5}",
1065        "erDot"                           => "\u{02253}",
1066        "erarr"                           => "\u{02971}",
1067        "escr"                            => "\u{0212F}",
1068        "esdot"                           => "\u{02250}",
1069        "esim"                            => "\u{02242}",
1070        "eta"                             => "\u{003B7}",
1071        "eth"                             => "\u{000F0}",
1072        "euml"                            => "\u{000EB}",
1073        "euro"                            => "\u{020AC}",
1074        "excl"                            => "\u{00021}",
1075        "exist"                           => "\u{02203}",
1076        "expectation"                     => "\u{02130}",
1077        "exponentiale"                    => "\u{02147}",
1078        "fallingdotseq"                   => "\u{02252}",
1079        "fcy"                             => "\u{00444}",
1080        "female"                          => "\u{02640}",
1081        "ffilig"                          => "\u{0FB03}",
1082        "fflig"                           => "\u{0FB00}",
1083        "ffllig"                          => "\u{0FB04}",
1084        "ffr"                             => "\u{1D523}",
1085        "filig"                           => "\u{0FB01}",
1086        "fjlig"                           => "\u{00066}\u{0006A}",
1087        "flat"                            => "\u{0266D}",
1088        "fllig"                           => "\u{0FB02}",
1089        "fltns"                           => "\u{025B1}",
1090        "fnof"                            => "\u{00192}",
1091        "fopf"                            => "\u{1D557}",
1092        "forall"                          => "\u{02200}",
1093        "fork"                            => "\u{022D4}",
1094        "forkv"                           => "\u{02AD9}",
1095        "fpartint"                        => "\u{02A0D}",
1096        "frac12"                          => "\u{000BD}",
1097        "frac13"                          => "\u{02153}",
1098        "frac14"                          => "\u{000BC}",
1099        "frac15"                          => "\u{02155}",
1100        "frac16"                          => "\u{02159}",
1101        "frac18"                          => "\u{0215B}",
1102        "frac23"                          => "\u{02154}",
1103        "frac25"                          => "\u{02156}",
1104        "frac34"                          => "\u{000BE}",
1105        "frac35"                          => "\u{02157}",
1106        "frac38"                          => "\u{0215C}",
1107        "frac45"                          => "\u{02158}",
1108        "frac56"                          => "\u{0215A}",
1109        "frac58"                          => "\u{0215D}",
1110        "frac78"                          => "\u{0215E}",
1111        "frasl"                           => "\u{02044}",
1112        "frown"                           => "\u{02322}",
1113        "fscr"                            => "\u{1D4BB}",
1114        "gE"                              => "\u{02267}",
1115        "gEl"                             => "\u{02A8C}",
1116        "gacute"                          => "\u{001F5}",
1117        "gamma"                           => "\u{003B3}",
1118        "gammad"                          => "\u{003DD}",
1119        "gap"                             => "\u{02A86}",
1120        "gbreve"                          => "\u{0011F}",
1121        "gcirc"                           => "\u{0011D}",
1122        "gcy"                             => "\u{00433}",
1123        "gdot"                            => "\u{00121}",
1124        "ge"                              => "\u{02265}",
1125        "gel"                             => "\u{022DB}",
1126        "geq"                             => "\u{02265}",
1127        "geqq"                            => "\u{02267}",
1128        "geqslant"                        => "\u{02A7E}",
1129        "ges"                             => "\u{02A7E}",
1130        "gescc"                           => "\u{02AA9}",
1131        "gesdot"                          => "\u{02A80}",
1132        "gesdoto"                         => "\u{02A82}",
1133        "gesdotol"                        => "\u{02A84}",
1134        "gesl"                            => "\u{022DB}\u{0FE00}",
1135        "gesles"                          => "\u{02A94}",
1136        "gfr"                             => "\u{1D524}",
1137        "gg"                              => "\u{0226B}",
1138        "ggg"                             => "\u{022D9}",
1139        "gimel"                           => "\u{02137}",
1140        "gjcy"                            => "\u{00453}",
1141        "gl"                              => "\u{02277}",
1142        "glE"                             => "\u{02A92}",
1143        "gla"                             => "\u{02AA5}",
1144        "glj"                             => "\u{02AA4}",
1145        "gnE"                             => "\u{02269}",
1146        "gnap"                            => "\u{02A8A}",
1147        "gnapprox"                        => "\u{02A8A}",
1148        "gne"                             => "\u{02A88}",
1149        "gneq"                            => "\u{02A88}",
1150        "gneqq"                           => "\u{02269}",
1151        "gnsim"                           => "\u{022E7}",
1152        "gopf"                            => "\u{1D558}",
1153        "grave"                           => "\u{00060}",
1154        "gscr"                            => "\u{0210A}",
1155        "gsim"                            => "\u{02273}",
1156        "gsime"                           => "\u{02A8E}",
1157        "gsiml"                           => "\u{02A90}",
1158        "gt"                              => "\u{0003E}",
1159        "gtcc"                            => "\u{02AA7}",
1160        "gtcir"                           => "\u{02A7A}",
1161        "gtdot"                           => "\u{022D7}",
1162        "gtlPar"                          => "\u{02995}",
1163        "gtquest"                         => "\u{02A7C}",
1164        "gtrapprox"                       => "\u{02A86}",
1165        "gtrarr"                          => "\u{02978}",
1166        "gtrdot"                          => "\u{022D7}",
1167        "gtreqless"                       => "\u{022DB}",
1168        "gtreqqless"                      => "\u{02A8C}",
1169        "gtrless"                         => "\u{02277}",
1170        "gtrsim"                          => "\u{02273}",
1171        "gvertneqq"                       => "\u{02269}\u{0FE00}",
1172        "gvnE"                            => "\u{02269}\u{0FE00}",
1173        "hArr"                            => "\u{021D4}",
1174        "hairsp"                          => "\u{0200A}",
1175        "half"                            => "\u{000BD}",
1176        "hamilt"                          => "\u{0210B}",
1177        "hardcy"                          => "\u{0044A}",
1178        "harr"                            => "\u{02194}",
1179        "harrcir"                         => "\u{02948}",
1180        "harrw"                           => "\u{021AD}",
1181        "hbar"                            => "\u{0210F}",
1182        "hcirc"                           => "\u{00125}",
1183        "hearts"                          => "\u{02665}",
1184        "heartsuit"                       => "\u{02665}",
1185        "hellip"                          => "\u{02026}",
1186        "hercon"                          => "\u{022B9}",
1187        "hfr"                             => "\u{1D525}",
1188        "hksearow"                        => "\u{02925}",
1189        "hkswarow"                        => "\u{02926}",
1190        "hoarr"                           => "\u{021FF}",
1191        "homtht"                          => "\u{0223B}",
1192        "hookleftarrow"                   => "\u{021A9}",
1193        "hookrightarrow"                  => "\u{021AA}",
1194        "hopf"                            => "\u{1D559}",
1195        "horbar"                          => "\u{02015}",
1196        "hscr"                            => "\u{1D4BD}",
1197        "hslash"                          => "\u{0210F}",
1198        "hstrok"                          => "\u{00127}",
1199        "hybull"                          => "\u{02043}",
1200        "hyphen"                          => "\u{02010}",
1201        "iacute"                          => "\u{000ED}",
1202        "ic"                              => "\u{02063}",
1203        "icirc"                           => "\u{000EE}",
1204        "icy"                             => "\u{00438}",
1205        "iecy"                            => "\u{00435}",
1206        "iexcl"                           => "\u{000A1}",
1207        "iff"                             => "\u{021D4}",
1208        "ifr"                             => "\u{1D526}",
1209        "igrave"                          => "\u{000EC}",
1210        "ii"                              => "\u{02148}",
1211        "iiiint"                          => "\u{02A0C}",
1212        "iiint"                           => "\u{0222D}",
1213        "iinfin"                          => "\u{029DC}",
1214        "iiota"                           => "\u{02129}",
1215        "ijlig"                           => "\u{00133}",
1216        "imacr"                           => "\u{0012B}",
1217        "image"                           => "\u{02111}",
1218        "imagline"                        => "\u{02110}",
1219        "imagpart"                        => "\u{02111}",
1220        "imath"                           => "\u{00131}",
1221        "imof"                            => "\u{022B7}",
1222        "imped"                           => "\u{001B5}",
1223        "in"                              => "\u{02208}",
1224        "incare"                          => "\u{02105}",
1225        "infin"                           => "\u{0221E}",
1226        "infintie"                        => "\u{029DD}",
1227        "inodot"                          => "\u{00131}",
1228        "int"                             => "\u{0222B}",
1229        "intcal"                          => "\u{022BA}",
1230        "integers"                        => "\u{02124}",
1231        "intercal"                        => "\u{022BA}",
1232        "intlarhk"                        => "\u{02A17}",
1233        "intprod"                         => "\u{02A3C}",
1234        "iocy"                            => "\u{00451}",
1235        "iogon"                           => "\u{0012F}",
1236        "iopf"                            => "\u{1D55A}",
1237        "iota"                            => "\u{003B9}",
1238        "iprod"                           => "\u{02A3C}",
1239        "iquest"                          => "\u{000BF}",
1240        "iscr"                            => "\u{1D4BE}",
1241        "isin"                            => "\u{02208}",
1242        "isinE"                           => "\u{022F9}",
1243        "isindot"                         => "\u{022F5}",
1244        "isins"                           => "\u{022F4}",
1245        "isinsv"                          => "\u{022F3}",
1246        "isinv"                           => "\u{02208}",
1247        "it"                              => "\u{02062}",
1248        "itilde"                          => "\u{00129}",
1249        "iukcy"                           => "\u{00456}",
1250        "iuml"                            => "\u{000EF}",
1251        "jcirc"                           => "\u{00135}",
1252        "jcy"                             => "\u{00439}",
1253        "jfr"                             => "\u{1D527}",
1254        "jmath"                           => "\u{00237}",
1255        "jopf"                            => "\u{1D55B}",
1256        "jscr"                            => "\u{1D4BF}",
1257        "jsercy"                          => "\u{00458}",
1258        "jukcy"                           => "\u{00454}",
1259        "kappa"                           => "\u{003BA}",
1260        "kappav"                          => "\u{003F0}",
1261        "kcedil"                          => "\u{00137}",
1262        "kcy"                             => "\u{0043A}",
1263        "kfr"                             => "\u{1D528}",
1264        "kgreen"                          => "\u{00138}",
1265        "khcy"                            => "\u{00445}",
1266        "kjcy"                            => "\u{0045C}",
1267        "kopf"                            => "\u{1D55C}",
1268        "kscr"                            => "\u{1D4C0}",
1269        "lAarr"                           => "\u{021DA}",
1270        "lArr"                            => "\u{021D0}",
1271        "lAtail"                          => "\u{0291B}",
1272        "lBarr"                           => "\u{0290E}",
1273        "lE"                              => "\u{02266}",
1274        "lEg"                             => "\u{02A8B}",
1275        "lHar"                            => "\u{02962}",
1276        "lacute"                          => "\u{0013A}",
1277        "laemptyv"                        => "\u{029B4}",
1278        "lagran"                          => "\u{02112}",
1279        "lambda"                          => "\u{003BB}",
1280        "lang"                            => "\u{027E8}",
1281        "langd"                           => "\u{02991}",
1282        "langle"                          => "\u{027E8}",
1283        "lap"                             => "\u{02A85}",
1284        "laquo"                           => "\u{000AB}",
1285        "larr"                            => "\u{02190}",
1286        "larrb"                           => "\u{021E4}",
1287        "larrbfs"                         => "\u{0291F}",
1288        "larrfs"                          => "\u{0291D}",
1289        "larrhk"                          => "\u{021A9}",
1290        "larrlp"                          => "\u{021AB}",
1291        "larrpl"                          => "\u{02939}",
1292        "larrsim"                         => "\u{02973}",
1293        "larrtl"                          => "\u{021A2}",
1294        "lat"                             => "\u{02AAB}",
1295        "latail"                          => "\u{02919}",
1296        "late"                            => "\u{02AAD}",
1297        "lates"                           => "\u{02AAD}\u{0FE00}",
1298        "lbarr"                           => "\u{0290C}",
1299        "lbbrk"                           => "\u{02772}",
1300        "lbrace"                          => "\u{0007B}",
1301        "lbrack"                          => "\u{0005B}",
1302        "lbrke"                           => "\u{0298B}",
1303        "lbrksld"                         => "\u{0298F}",
1304        "lbrkslu"                         => "\u{0298D}",
1305        "lcaron"                          => "\u{0013E}",
1306        "lcedil"                          => "\u{0013C}",
1307        "lceil"                           => "\u{02308}",
1308        "lcub"                            => "\u{0007B}",
1309        "lcy"                             => "\u{0043B}",
1310        "ldca"                            => "\u{02936}",
1311        "ldquo"                           => "\u{0201C}",
1312        "ldquor"                          => "\u{0201E}",
1313        "ldrdhar"                         => "\u{02967}",
1314        "ldrushar"                        => "\u{0294B}",
1315        "ldsh"                            => "\u{021B2}",
1316        "le"                              => "\u{02264}",
1317        "leftarrow"                       => "\u{02190}",
1318        "leftarrowtail"                   => "\u{021A2}",
1319        "leftharpoondown"                 => "\u{021BD}",
1320        "leftharpoonup"                   => "\u{021BC}",
1321        "leftleftarrows"                  => "\u{021C7}",
1322        "leftrightarrow"                  => "\u{02194}",
1323        "leftrightarrows"                 => "\u{021C6}",
1324        "leftrightharpoons"               => "\u{021CB}",
1325        "leftrightsquigarrow"             => "\u{021AD}",
1326        "leftthreetimes"                  => "\u{022CB}",
1327        "leg"                             => "\u{022DA}",
1328        "leq"                             => "\u{02264}",
1329        "leqq"                            => "\u{02266}",
1330        "leqslant"                        => "\u{02A7D}",
1331        "les"                             => "\u{02A7D}",
1332        "lescc"                           => "\u{02AA8}",
1333        "lesdot"                          => "\u{02A7F}",
1334        "lesdoto"                         => "\u{02A81}",
1335        "lesdotor"                        => "\u{02A83}",
1336        "lesg"                            => "\u{022DA}\u{0FE00}",
1337        "lesges"                          => "\u{02A93}",
1338        "lessapprox"                      => "\u{02A85}",
1339        "lessdot"                         => "\u{022D6}",
1340        "lesseqgtr"                       => "\u{022DA}",
1341        "lesseqqgtr"                      => "\u{02A8B}",
1342        "lessgtr"                         => "\u{02276}",
1343        "lesssim"                         => "\u{02272}",
1344        "lfisht"                          => "\u{0297C}",
1345        "lfloor"                          => "\u{0230A}",
1346        "lfr"                             => "\u{1D529}",
1347        "lg"                              => "\u{02276}",
1348        "lgE"                             => "\u{02A91}",
1349        "lhard"                           => "\u{021BD}",
1350        "lharu"                           => "\u{021BC}",
1351        "lharul"                          => "\u{0296A}",
1352        "lhblk"                           => "\u{02584}",
1353        "ljcy"                            => "\u{00459}",
1354        "ll"                              => "\u{0226A}",
1355        "llarr"                           => "\u{021C7}",
1356        "llcorner"                        => "\u{0231E}",
1357        "llhard"                          => "\u{0296B}",
1358        "lltri"                           => "\u{025FA}",
1359        "lmidot"                          => "\u{00140}",
1360        "lmoust"                          => "\u{023B0}",
1361        "lmoustache"                      => "\u{023B0}",
1362        "lnE"                             => "\u{02268}",
1363        "lnap"                            => "\u{02A89}",
1364        "lnapprox"                        => "\u{02A89}",
1365        "lne"                             => "\u{02A87}",
1366        "lneq"                            => "\u{02A87}",
1367        "lneqq"                           => "\u{02268}",
1368        "lnsim"                           => "\u{022E6}",
1369        "loang"                           => "\u{027EC}",
1370        "loarr"                           => "\u{021FD}",
1371        "lobrk"                           => "\u{027E6}",
1372        "longleftarrow"                   => "\u{027F5}",
1373        "longleftrightarrow"              => "\u{027F7}",
1374        "longmapsto"                      => "\u{027FC}",
1375        "longrightarrow"                  => "\u{027F6}",
1376        "looparrowleft"                   => "\u{021AB}",
1377        "looparrowright"                  => "\u{021AC}",
1378        "lopar"                           => "\u{02985}",
1379        "lopf"                            => "\u{1D55D}",
1380        "loplus"                          => "\u{02A2D}",
1381        "lotimes"                         => "\u{02A34}",
1382        "lowast"                          => "\u{02217}",
1383        "lowbar"                          => "\u{0005F}",
1384        "loz"                             => "\u{025CA}",
1385        "lozenge"                         => "\u{025CA}",
1386        "lozf"                            => "\u{029EB}",
1387        "lpar"                            => "\u{00028}",
1388        "lparlt"                          => "\u{02993}",
1389        "lrarr"                           => "\u{021C6}",
1390        "lrcorner"                        => "\u{0231F}",
1391        "lrhar"                           => "\u{021CB}",
1392        "lrhard"                          => "\u{0296D}",
1393        "lrm"                             => "\u{0200E}",
1394        "lrtri"                           => "\u{022BF}",
1395        "lsaquo"                          => "\u{02039}",
1396        "lscr"                            => "\u{1D4C1}",
1397        "lsh"                             => "\u{021B0}",
1398        "lsim"                            => "\u{02272}",
1399        "lsime"                           => "\u{02A8D}",
1400        "lsimg"                           => "\u{02A8F}",
1401        "lsqb"                            => "\u{0005B}",
1402        "lsquo"                           => "\u{02018}",
1403        "lsquor"                          => "\u{0201A}",
1404        "lstrok"                          => "\u{00142}",
1405        "lt"                              => "\u{0003C}",
1406        "ltcc"                            => "\u{02AA6}",
1407        "ltcir"                           => "\u{02A79}",
1408        "ltdot"                           => "\u{022D6}",
1409        "lthree"                          => "\u{022CB}",
1410        "ltimes"                          => "\u{022C9}",
1411        "ltlarr"                          => "\u{02976}",
1412        "ltquest"                         => "\u{02A7B}",
1413        "ltrPar"                          => "\u{02996}",
1414        "ltri"                            => "\u{025C3}",
1415        "ltrie"                           => "\u{022B4}",
1416        "ltrif"                           => "\u{025C2}",
1417        "lurdshar"                        => "\u{0294A}",
1418        "luruhar"                         => "\u{02966}",
1419        "lvertneqq"                       => "\u{02268}\u{0FE00}",
1420        "lvnE"                            => "\u{02268}\u{0FE00}",
1421        "mDDot"                           => "\u{0223A}",
1422        "macr"                            => "\u{000AF}",
1423        "male"                            => "\u{02642}",
1424        "malt"                            => "\u{02720}",
1425        "maltese"                         => "\u{02720}",
1426        "map"                             => "\u{021A6}",
1427        "mapsto"                          => "\u{021A6}",
1428        "mapstodown"                      => "\u{021A7}",
1429        "mapstoleft"                      => "\u{021A4}",
1430        "mapstoup"                        => "\u{021A5}",
1431        "marker"                          => "\u{025AE}",
1432        "mcomma"                          => "\u{02A29}",
1433        "mcy"                             => "\u{0043C}",
1434        "mdash"                           => "\u{02014}",
1435        "measuredangle"                   => "\u{02221}",
1436        "mfr"                             => "\u{1D52A}",
1437        "mho"                             => "\u{02127}",
1438        "micro"                           => "\u{000B5}",
1439        "mid"                             => "\u{02223}",
1440        "midast"                          => "\u{0002A}",
1441        "midcir"                          => "\u{02AF0}",
1442        "middot"                          => "\u{000B7}",
1443        "minus"                           => "\u{02212}",
1444        "minusb"                          => "\u{0229F}",
1445        "minusd"                          => "\u{02238}",
1446        "minusdu"                         => "\u{02A2A}",
1447        "mlcp"                            => "\u{02ADB}",
1448        "mldr"                            => "\u{02026}",
1449        "mnplus"                          => "\u{02213}",
1450        "models"                          => "\u{022A7}",
1451        "mopf"                            => "\u{1D55E}",
1452        "mp"                              => "\u{02213}",
1453        "mscr"                            => "\u{1D4C2}",
1454        "mstpos"                          => "\u{0223E}",
1455        "mu"                              => "\u{003BC}",
1456        "multimap"                        => "\u{022B8}",
1457        "mumap"                           => "\u{022B8}",
1458        "nGg"                             => "\u{022D9}\u{00338}",
1459        "nGt"                             => "\u{0226B}\u{020D2}",
1460        "nGtv"                            => "\u{0226B}\u{00338}",
1461        "nLeftarrow"                      => "\u{021CD}",
1462        "nLeftrightarrow"                 => "\u{021CE}",
1463        "nLl"                             => "\u{022D8}\u{00338}",
1464        "nLt"                             => "\u{0226A}\u{020D2}",
1465        "nLtv"                            => "\u{0226A}\u{00338}",
1466        "nRightarrow"                     => "\u{021CF}",
1467        "nVDash"                          => "\u{022AF}",
1468        "nVdash"                          => "\u{022AE}",
1469        "nabla"                           => "\u{02207}",
1470        "nacute"                          => "\u{00144}",
1471        "nang"                            => "\u{02220}\u{020D2}",
1472        "nap"                             => "\u{02249}",
1473        "napE"                            => "\u{02A70}\u{00338}",
1474        "napid"                           => "\u{0224B}\u{00338}",
1475        "napos"                           => "\u{00149}",
1476        "napprox"                         => "\u{02249}",
1477        "natur"                           => "\u{0266E}",
1478        "natural"                         => "\u{0266E}",
1479        "naturals"                        => "\u{02115}",
1480        "nbsp"                            => "\u{000A0}",
1481        "nbump"                           => "\u{0224E}\u{00338}",
1482        "nbumpe"                          => "\u{0224F}\u{00338}",
1483        "ncap"                            => "\u{02A43}",
1484        "ncaron"                          => "\u{00148}",
1485        "ncedil"                          => "\u{00146}",
1486        "ncong"                           => "\u{02247}",
1487        "ncongdot"                        => "\u{02A6D}\u{00338}",
1488        "ncup"                            => "\u{02A42}",
1489        "ncy"                             => "\u{0043D}",
1490        "ndash"                           => "\u{02013}",
1491        "ne"                              => "\u{02260}",
1492        "neArr"                           => "\u{021D7}",
1493        "nearhk"                          => "\u{02924}",
1494        "nearr"                           => "\u{02197}",
1495        "nearrow"                         => "\u{02197}",
1496        "nedot"                           => "\u{02250}\u{00338}",
1497        "nequiv"                          => "\u{02262}",
1498        "nesear"                          => "\u{02928}",
1499        "nesim"                           => "\u{02242}\u{00338}",
1500        "nexist"                          => "\u{02204}",
1501        "nexists"                         => "\u{02204}",
1502        "nfr"                             => "\u{1D52B}",
1503        "ngE"                             => "\u{02267}\u{00338}",
1504        "nge"                             => "\u{02271}",
1505        "ngeq"                            => "\u{02271}",
1506        "ngeqq"                           => "\u{02267}\u{00338}",
1507        "ngeqslant"                       => "\u{02A7E}\u{00338}",
1508        "nges"                            => "\u{02A7E}\u{00338}",
1509        "ngsim"                           => "\u{02275}",
1510        "ngt"                             => "\u{0226F}",
1511        "ngtr"                            => "\u{0226F}",
1512        "nhArr"                           => "\u{021CE}",
1513        "nharr"                           => "\u{021AE}",
1514        "nhpar"                           => "\u{02AF2}",
1515        "ni"                              => "\u{0220B}",
1516        "nis"                             => "\u{022FC}",
1517        "nisd"                            => "\u{022FA}",
1518        "niv"                             => "\u{0220B}",
1519        "njcy"                            => "\u{0045A}",
1520        "nlArr"                           => "\u{021CD}",
1521        "nlE"                             => "\u{02266}\u{00338}",
1522        "nlarr"                           => "\u{0219A}",
1523        "nldr"                            => "\u{02025}",
1524        "nle"                             => "\u{02270}",
1525        "nleftarrow"                      => "\u{0219A}",
1526        "nleftrightarrow"                 => "\u{021AE}",
1527        "nleq"                            => "\u{02270}",
1528        "nleqq"                           => "\u{02266}\u{00338}",
1529        "nleqslant"                       => "\u{02A7D}\u{00338}",
1530        "nles"                            => "\u{02A7D}\u{00338}",
1531        "nless"                           => "\u{0226E}",
1532        "nlsim"                           => "\u{02274}",
1533        "nlt"                             => "\u{0226E}",
1534        "nltri"                           => "\u{022EA}",
1535        "nltrie"                          => "\u{022EC}",
1536        "nmid"                            => "\u{02224}",
1537        "nopf"                            => "\u{1D55F}",
1538        "not"                             => "\u{000AC}",
1539        "notin"                           => "\u{02209}",
1540        "notinE"                          => "\u{022F9}\u{00338}",
1541        "notindot"                        => "\u{022F5}\u{00338}",
1542        "notinva"                         => "\u{02209}",
1543        "notinvb"                         => "\u{022F7}",
1544        "notinvc"                         => "\u{022F6}",
1545        "notni"                           => "\u{0220C}",
1546        "notniva"                         => "\u{0220C}",
1547        "notnivb"                         => "\u{022FE}",
1548        "notnivc"                         => "\u{022FD}",
1549        "npar"                            => "\u{02226}",
1550        "nparallel"                       => "\u{02226}",
1551        "nparsl"                          => "\u{02AFD}\u{020E5}",
1552        "npart"                           => "\u{02202}\u{00338}",
1553        "npolint"                         => "\u{02A14}",
1554        "npr"                             => "\u{02280}",
1555        "nprcue"                          => "\u{022E0}",
1556        "npre"                            => "\u{02AAF}\u{00338}",
1557        "nprec"                           => "\u{02280}",
1558        "npreceq"                         => "\u{02AAF}\u{00338}",
1559        "nrArr"                           => "\u{021CF}",
1560        "nrarr"                           => "\u{0219B}",
1561        "nrarrc"                          => "\u{02933}\u{00338}",
1562        "nrarrw"                          => "\u{0219D}\u{00338}",
1563        "nrightarrow"                     => "\u{0219B}",
1564        "nrtri"                           => "\u{022EB}",
1565        "nrtrie"                          => "\u{022ED}",
1566        "nsc"                             => "\u{02281}",
1567        "nsccue"                          => "\u{022E1}",
1568        "nsce"                            => "\u{02AB0}\u{00338}",
1569        "nscr"                            => "\u{1D4C3}",
1570        "nshortmid"                       => "\u{02224}",
1571        "nshortparallel"                  => "\u{02226}",
1572        "nsim"                            => "\u{02241}",
1573        "nsime"                           => "\u{02244}",
1574        "nsimeq"                          => "\u{02244}",
1575        "nsmid"                           => "\u{02224}",
1576        "nspar"                           => "\u{02226}",
1577        "nsqsube"                         => "\u{022E2}",
1578        "nsqsupe"                         => "\u{022E3}",
1579        "nsub"                            => "\u{02284}",
1580        "nsubE"                           => "\u{02AC5}\u{00338}",
1581        "nsube"                           => "\u{02288}",
1582        "nsubset"                         => "\u{02282}\u{020D2}",
1583        "nsubseteq"                       => "\u{02288}",
1584        "nsubseteqq"                      => "\u{02AC5}\u{00338}",
1585        "nsucc"                           => "\u{02281}",
1586        "nsucceq"                         => "\u{02AB0}\u{00338}",
1587        "nsup"                            => "\u{02285}",
1588        "nsupE"                           => "\u{02AC6}\u{00338}",
1589        "nsupe"                           => "\u{02289}",
1590        "nsupset"                         => "\u{02283}\u{020D2}",
1591        "nsupseteq"                       => "\u{02289}",
1592        "nsupseteqq"                      => "\u{02AC6}\u{00338}",
1593        "ntgl"                            => "\u{02279}",
1594        "ntilde"                          => "\u{000F1}",
1595        "ntlg"                            => "\u{02278}",
1596        "ntriangleleft"                   => "\u{022EA}",
1597        "ntrianglelefteq"                 => "\u{022EC}",
1598        "ntriangleright"                  => "\u{022EB}",
1599        "ntrianglerighteq"                => "\u{022ED}",
1600        "nu"                              => "\u{003BD}",
1601        "num"                             => "\u{00023}",
1602        "numero"                          => "\u{02116}",
1603        "numsp"                           => "\u{02007}",
1604        "nvDash"                          => "\u{022AD}",
1605        "nvHarr"                          => "\u{02904}",
1606        "nvap"                            => "\u{0224D}\u{020D2}",
1607        "nvdash"                          => "\u{022AC}",
1608        "nvge"                            => "\u{02265}\u{020D2}",
1609        "nvgt"                            => "\u{0003E}\u{020D2}",
1610        "nvinfin"                         => "\u{029DE}",
1611        "nvlArr"                          => "\u{02902}",
1612        "nvle"                            => "\u{02264}\u{020D2}",
1613        "nvlt"                            => "\u{0003C}\u{020D2}",
1614        "nvltrie"                         => "\u{022B4}\u{020D2}",
1615        "nvrArr"                          => "\u{02903}",
1616        "nvrtrie"                         => "\u{022B5}\u{020D2}",
1617        "nvsim"                           => "\u{0223C}\u{020D2}",
1618        "nwArr"                           => "\u{021D6}",
1619        "nwarhk"                          => "\u{02923}",
1620        "nwarr"                           => "\u{02196}",
1621        "nwarrow"                         => "\u{02196}",
1622        "nwnear"                          => "\u{02927}",
1623        "oS"                              => "\u{024C8}",
1624        "oacute"                          => "\u{000F3}",
1625        "oast"                            => "\u{0229B}",
1626        "ocir"                            => "\u{0229A}",
1627        "ocirc"                           => "\u{000F4}",
1628        "ocy"                             => "\u{0043E}",
1629        "odash"                           => "\u{0229D}",
1630        "odblac"                          => "\u{00151}",
1631        "odiv"                            => "\u{02A38}",
1632        "odot"                            => "\u{02299}",
1633        "odsold"                          => "\u{029BC}",
1634        "oelig"                           => "\u{00153}",
1635        "ofcir"                           => "\u{029BF}",
1636        "ofr"                             => "\u{1D52C}",
1637        "ogon"                            => "\u{002DB}",
1638        "ograve"                          => "\u{000F2}",
1639        "ogt"                             => "\u{029C1}",
1640        "ohbar"                           => "\u{029B5}",
1641        "ohm"                             => "\u{003A9}",
1642        "oint"                            => "\u{0222E}",
1643        "olarr"                           => "\u{021BA}",
1644        "olcir"                           => "\u{029BE}",
1645        "olcross"                         => "\u{029BB}",
1646        "oline"                           => "\u{0203E}",
1647        "olt"                             => "\u{029C0}",
1648        "omacr"                           => "\u{0014D}",
1649        "omega"                           => "\u{003C9}",
1650        "omicron"                         => "\u{003BF}",
1651        "omid"                            => "\u{029B6}",
1652        "ominus"                          => "\u{02296}",
1653        "oopf"                            => "\u{1D560}",
1654        "opar"                            => "\u{029B7}",
1655        "operp"                           => "\u{029B9}",
1656        "oplus"                           => "\u{02295}",
1657        "or"                              => "\u{02228}",
1658        "orarr"                           => "\u{021BB}",
1659        "ord"                             => "\u{02A5D}",
1660        "order"                           => "\u{02134}",
1661        "orderof"                         => "\u{02134}",
1662        "ordf"                            => "\u{000AA}",
1663        "ordm"                            => "\u{000BA}",
1664        "origof"                          => "\u{022B6}",
1665        "oror"                            => "\u{02A56}",
1666        "orslope"                         => "\u{02A57}",
1667        "orv"                             => "\u{02A5B}",
1668        "oscr"                            => "\u{02134}",
1669        "oslash"                          => "\u{000F8}",
1670        "osol"                            => "\u{02298}",
1671        "otilde"                          => "\u{000F5}",
1672        "otimes"                          => "\u{02297}",
1673        "otimesas"                        => "\u{02A36}",
1674        "ouml"                            => "\u{000F6}",
1675        "ovbar"                           => "\u{0233D}",
1676        "par"                             => "\u{02225}",
1677        "para"                            => "\u{000B6}",
1678        "parallel"                        => "\u{02225}",
1679        "parsim"                          => "\u{02AF3}",
1680        "parsl"                           => "\u{02AFD}",
1681        "part"                            => "\u{02202}",
1682        "pcy"                             => "\u{0043F}",
1683        "percnt"                          => "\u{00025}",
1684        "period"                          => "\u{0002E}",
1685        "permil"                          => "\u{02030}",
1686        "perp"                            => "\u{022A5}",
1687        "pertenk"                         => "\u{02031}",
1688        "pfr"                             => "\u{1D52D}",
1689        "phi"                             => "\u{003C6}",
1690        "phiv"                            => "\u{003D5}",
1691        "phmmat"                          => "\u{02133}",
1692        "phone"                           => "\u{0260E}",
1693        "pi"                              => "\u{003C0}",
1694        "pitchfork"                       => "\u{022D4}",
1695        "piv"                             => "\u{003D6}",
1696        "planck"                          => "\u{0210F}",
1697        "planckh"                         => "\u{0210E}",
1698        "plankv"                          => "\u{0210F}",
1699        "plus"                            => "\u{0002B}",
1700        "plusacir"                        => "\u{02A23}",
1701        "plusb"                           => "\u{0229E}",
1702        "pluscir"                         => "\u{02A22}",
1703        "plusdo"                          => "\u{02214}",
1704        "plusdu"                          => "\u{02A25}",
1705        "pluse"                           => "\u{02A72}",
1706        "plusmn"                          => "\u{000B1}",
1707        "plussim"                         => "\u{02A26}",
1708        "plustwo"                         => "\u{02A27}",
1709        "pm"                              => "\u{000B1}",
1710        "pointint"                        => "\u{02A15}",
1711        "popf"                            => "\u{1D561}",
1712        "pound"                           => "\u{000A3}",
1713        "pr"                              => "\u{0227A}",
1714        "prE"                             => "\u{02AB3}",
1715        "prap"                            => "\u{02AB7}",
1716        "prcue"                           => "\u{0227C}",
1717        "pre"                             => "\u{02AAF}",
1718        "prec"                            => "\u{0227A}",
1719        "precapprox"                      => "\u{02AB7}",
1720        "preccurlyeq"                     => "\u{0227C}",
1721        "preceq"                          => "\u{02AAF}",
1722        "precnapprox"                     => "\u{02AB9}",
1723        "precneqq"                        => "\u{02AB5}",
1724        "precnsim"                        => "\u{022E8}",
1725        "precsim"                         => "\u{0227E}",
1726        "prime"                           => "\u{02032}",
1727        "primes"                          => "\u{02119}",
1728        "prnE"                            => "\u{02AB5}",
1729        "prnap"                           => "\u{02AB9}",
1730        "prnsim"                          => "\u{022E8}",
1731        "prod"                            => "\u{0220F}",
1732        "profalar"                        => "\u{0232E}",
1733        "profline"                        => "\u{02312}",
1734        "profsurf"                        => "\u{02313}",
1735        "prop"                            => "\u{0221D}",
1736        "propto"                          => "\u{0221D}",
1737        "prsim"                           => "\u{0227E}",
1738        "prurel"                          => "\u{022B0}",
1739        "pscr"                            => "\u{1D4C5}",
1740        "psi"                             => "\u{003C8}",
1741        "puncsp"                          => "\u{02008}",
1742        "qfr"                             => "\u{1D52E}",
1743        "qint"                            => "\u{02A0C}",
1744        "qopf"                            => "\u{1D562}",
1745        "qprime"                          => "\u{02057}",
1746        "qscr"                            => "\u{1D4C6}",
1747        "quaternions"                     => "\u{0210D}",
1748        "quatint"                         => "\u{02A16}",
1749        "quest"                           => "\u{0003F}",
1750        "questeq"                         => "\u{0225F}",
1751        "quot"                            => "\u{00022}",
1752        "rAarr"                           => "\u{021DB}",
1753        "rArr"                            => "\u{021D2}",
1754        "rAtail"                          => "\u{0291C}",
1755        "rBarr"                           => "\u{0290F}",
1756        "rHar"                            => "\u{02964}",
1757        "race"                            => "\u{0223D}\u{00331}",
1758        "racute"                          => "\u{00155}",
1759        "radic"                           => "\u{0221A}",
1760        "raemptyv"                        => "\u{029B3}",
1761        "rang"                            => "\u{027E9}",
1762        "rangd"                           => "\u{02992}",
1763        "range"                           => "\u{029A5}",
1764        "rangle"                          => "\u{027E9}",
1765        "raquo"                           => "\u{000BB}",
1766        "rarr"                            => "\u{02192}",
1767        "rarrap"                          => "\u{02975}",
1768        "rarrb"                           => "\u{021E5}",
1769        "rarrbfs"                         => "\u{02920}",
1770        "rarrc"                           => "\u{02933}",
1771        "rarrfs"                          => "\u{0291E}",
1772        "rarrhk"                          => "\u{021AA}",
1773        "rarrlp"                          => "\u{021AC}",
1774        "rarrpl"                          => "\u{02945}",
1775        "rarrsim"                         => "\u{02974}",
1776        "rarrtl"                          => "\u{021A3}",
1777        "rarrw"                           => "\u{0219D}",
1778        "ratail"                          => "\u{0291A}",
1779        "ratio"                           => "\u{02236}",
1780        "rationals"                       => "\u{0211A}",
1781        "rbarr"                           => "\u{0290D}",
1782        "rbbrk"                           => "\u{02773}",
1783        "rbrace"                          => "\u{0007D}",
1784        "rbrack"                          => "\u{0005D}",
1785        "rbrke"                           => "\u{0298C}",
1786        "rbrksld"                         => "\u{0298E}",
1787        "rbrkslu"                         => "\u{02990}",
1788        "rcaron"                          => "\u{00159}",
1789        "rcedil"                          => "\u{00157}",
1790        "rceil"                           => "\u{02309}",
1791        "rcub"                            => "\u{0007D}",
1792        "rcy"                             => "\u{00440}",
1793        "rdca"                            => "\u{02937}",
1794        "rdldhar"                         => "\u{02969}",
1795        "rdquo"                           => "\u{0201D}",
1796        "rdquor"                          => "\u{0201D}",
1797        "rdsh"                            => "\u{021B3}",
1798        "real"                            => "\u{0211C}",
1799        "realine"                         => "\u{0211B}",
1800        "realpart"                        => "\u{0211C}",
1801        "reals"                           => "\u{0211D}",
1802        "rect"                            => "\u{025AD}",
1803        "reg"                             => "\u{000AE}",
1804        "rfisht"                          => "\u{0297D}",
1805        "rfloor"                          => "\u{0230B}",
1806        "rfr"                             => "\u{1D52F}",
1807        "rhard"                           => "\u{021C1}",
1808        "rharu"                           => "\u{021C0}",
1809        "rharul"                          => "\u{0296C}",
1810        "rho"                             => "\u{003C1}",
1811        "rhov"                            => "\u{003F1}",
1812        "rightarrow"                      => "\u{02192}",
1813        "rightarrowtail"                  => "\u{021A3}",
1814        "rightharpoondown"                => "\u{021C1}",
1815        "rightharpoonup"                  => "\u{021C0}",
1816        "rightleftarrows"                 => "\u{021C4}",
1817        "rightleftharpoons"               => "\u{021CC}",
1818        "rightrightarrows"                => "\u{021C9}",
1819        "rightsquigarrow"                 => "\u{0219D}",
1820        "rightthreetimes"                 => "\u{022CC}",
1821        "ring"                            => "\u{002DA}",
1822        "risingdotseq"                    => "\u{02253}",
1823        "rlarr"                           => "\u{021C4}",
1824        "rlhar"                           => "\u{021CC}",
1825        "rlm"                             => "\u{0200F}",
1826        "rmoust"                          => "\u{023B1}",
1827        "rmoustache"                      => "\u{023B1}",
1828        "rnmid"                           => "\u{02AEE}",
1829        "roang"                           => "\u{027ED}",
1830        "roarr"                           => "\u{021FE}",
1831        "robrk"                           => "\u{027E7}",
1832        "ropar"                           => "\u{02986}",
1833        "ropf"                            => "\u{1D563}",
1834        "roplus"                          => "\u{02A2E}",
1835        "rotimes"                         => "\u{02A35}",
1836        "rpar"                            => "\u{00029}",
1837        "rpargt"                          => "\u{02994}",
1838        "rppolint"                        => "\u{02A12}",
1839        "rrarr"                           => "\u{021C9}",
1840        "rsaquo"                          => "\u{0203A}",
1841        "rscr"                            => "\u{1D4C7}",
1842        "rsh"                             => "\u{021B1}",
1843        "rsqb"                            => "\u{0005D}",
1844        "rsquo"                           => "\u{02019}",
1845        "rsquor"                          => "\u{02019}",
1846        "rthree"                          => "\u{022CC}",
1847        "rtimes"                          => "\u{022CA}",
1848        "rtri"                            => "\u{025B9}",
1849        "rtrie"                           => "\u{022B5}",
1850        "rtrif"                           => "\u{025B8}",
1851        "rtriltri"                        => "\u{029CE}",
1852        "ruluhar"                         => "\u{02968}",
1853        "rx"                              => "\u{0211E}",
1854        "sacute"                          => "\u{0015B}",
1855        "sbquo"                           => "\u{0201A}",
1856        "sc"                              => "\u{0227B}",
1857        "scE"                             => "\u{02AB4}",
1858        "scap"                            => "\u{02AB8}",
1859        "scaron"                          => "\u{00161}",
1860        "sccue"                           => "\u{0227D}",
1861        "sce"                             => "\u{02AB0}",
1862        "scedil"                          => "\u{0015F}",
1863        "scirc"                           => "\u{0015D}",
1864        "scnE"                            => "\u{02AB6}",
1865        "scnap"                           => "\u{02ABA}",
1866        "scnsim"                          => "\u{022E9}",
1867        "scpolint"                        => "\u{02A13}",
1868        "scsim"                           => "\u{0227F}",
1869        "scy"                             => "\u{00441}",
1870        "sdot"                            => "\u{022C5}",
1871        "sdotb"                           => "\u{022A1}",
1872        "sdote"                           => "\u{02A66}",
1873        "seArr"                           => "\u{021D8}",
1874        "searhk"                          => "\u{02925}",
1875        "searr"                           => "\u{02198}",
1876        "searrow"                         => "\u{02198}",
1877        "sect"                            => "\u{000A7}",
1878        "semi"                            => "\u{0003B}",
1879        "seswar"                          => "\u{02929}",
1880        "setminus"                        => "\u{02216}",
1881        "setmn"                           => "\u{02216}",
1882        "sext"                            => "\u{02736}",
1883        "sfr"                             => "\u{1D530}",
1884        "sfrown"                          => "\u{02322}",
1885        "sharp"                           => "\u{0266F}",
1886        "shchcy"                          => "\u{00449}",
1887        "shcy"                            => "\u{00448}",
1888        "shortmid"                        => "\u{02223}",
1889        "shortparallel"                   => "\u{02225}",
1890        "shy"                             => "\u{000AD}",
1891        "sigma"                           => "\u{003C3}",
1892        "sigmaf"                          => "\u{003C2}",
1893        "sigmav"                          => "\u{003C2}",
1894        "sim"                             => "\u{0223C}",
1895        "simdot"                          => "\u{02A6A}",
1896        "sime"                            => "\u{02243}",
1897        "simeq"                           => "\u{02243}",
1898        "simg"                            => "\u{02A9E}",
1899        "simgE"                           => "\u{02AA0}",
1900        "siml"                            => "\u{02A9D}",
1901        "simlE"                           => "\u{02A9F}",
1902        "simne"                           => "\u{02246}",
1903        "simplus"                         => "\u{02A24}",
1904        "simrarr"                         => "\u{02972}",
1905        "slarr"                           => "\u{02190}",
1906        "smallsetminus"                   => "\u{02216}",
1907        "smashp"                          => "\u{02A33}",
1908        "smeparsl"                        => "\u{029E4}",
1909        "smid"                            => "\u{02223}",
1910        "smile"                           => "\u{02323}",
1911        "smt"                             => "\u{02AAA}",
1912        "smte"                            => "\u{02AAC}",
1913        "smtes"                           => "\u{02AAC}\u{0FE00}",
1914        "softcy"                          => "\u{0044C}",
1915        "sol"                             => "\u{0002F}",
1916        "solb"                            => "\u{029C4}",
1917        "solbar"                          => "\u{0233F}",
1918        "sopf"                            => "\u{1D564}",
1919        "spades"                          => "\u{02660}",
1920        "spadesuit"                       => "\u{02660}",
1921        "spar"                            => "\u{02225}",
1922        "sqcap"                           => "\u{02293}",
1923        "sqcaps"                          => "\u{02293}\u{0FE00}",
1924        "sqcup"                           => "\u{02294}",
1925        "sqcups"                          => "\u{02294}\u{0FE00}",
1926        "sqsub"                           => "\u{0228F}",
1927        "sqsube"                          => "\u{02291}",
1928        "sqsubset"                        => "\u{0228F}",
1929        "sqsubseteq"                      => "\u{02291}",
1930        "sqsup"                           => "\u{02290}",
1931        "sqsupe"                          => "\u{02292}",
1932        "sqsupset"                        => "\u{02290}",
1933        "sqsupseteq"                      => "\u{02292}",
1934        "squ"                             => "\u{025A1}",
1935        "square"                          => "\u{025A1}",
1936        "squarf"                          => "\u{025AA}",
1937        "squf"                            => "\u{025AA}",
1938        "srarr"                           => "\u{02192}",
1939        "sscr"                            => "\u{1D4C8}",
1940        "ssetmn"                          => "\u{02216}",
1941        "ssmile"                          => "\u{02323}",
1942        "sstarf"                          => "\u{022C6}",
1943        "star"                            => "\u{02606}",
1944        "starf"                           => "\u{02605}",
1945        "straightepsilon"                 => "\u{003F5}",
1946        "straightphi"                     => "\u{003D5}",
1947        "strns"                           => "\u{000AF}",
1948        "sub"                             => "\u{02282}",
1949        "subE"                            => "\u{02AC5}",
1950        "subdot"                          => "\u{02ABD}",
1951        "sube"                            => "\u{02286}",
1952        "subedot"                         => "\u{02AC3}",
1953        "submult"                         => "\u{02AC1}",
1954        "subnE"                           => "\u{02ACB}",
1955        "subne"                           => "\u{0228A}",
1956        "subplus"                         => "\u{02ABF}",
1957        "subrarr"                         => "\u{02979}",
1958        "subset"                          => "\u{02282}",
1959        "subseteq"                        => "\u{02286}",
1960        "subseteqq"                       => "\u{02AC5}",
1961        "subsetneq"                       => "\u{0228A}",
1962        "subsetneqq"                      => "\u{02ACB}",
1963        "subsim"                          => "\u{02AC7}",
1964        "subsub"                          => "\u{02AD5}",
1965        "subsup"                          => "\u{02AD3}",
1966        "succ"                            => "\u{0227B}",
1967        "succapprox"                      => "\u{02AB8}",
1968        "succcurlyeq"                     => "\u{0227D}",
1969        "succeq"                          => "\u{02AB0}",
1970        "succnapprox"                     => "\u{02ABA}",
1971        "succneqq"                        => "\u{02AB6}",
1972        "succnsim"                        => "\u{022E9}",
1973        "succsim"                         => "\u{0227F}",
1974        "sum"                             => "\u{02211}",
1975        "sung"                            => "\u{0266A}",
1976        "sup"                             => "\u{02283}",
1977        "sup1"                            => "\u{000B9}",
1978        "sup2"                            => "\u{000B2}",
1979        "sup3"                            => "\u{000B3}",
1980        "supE"                            => "\u{02AC6}",
1981        "supdot"                          => "\u{02ABE}",
1982        "supdsub"                         => "\u{02AD8}",
1983        "supe"                            => "\u{02287}",
1984        "supedot"                         => "\u{02AC4}",
1985        "suphsol"                         => "\u{027C9}",
1986        "suphsub"                         => "\u{02AD7}",
1987        "suplarr"                         => "\u{0297B}",
1988        "supmult"                         => "\u{02AC2}",
1989        "supnE"                           => "\u{02ACC}",
1990        "supne"                           => "\u{0228B}",
1991        "supplus"                         => "\u{02AC0}",
1992        "supset"                          => "\u{02283}",
1993        "supseteq"                        => "\u{02287}",
1994        "supseteqq"                       => "\u{02AC6}",
1995        "supsetneq"                       => "\u{0228B}",
1996        "supsetneqq"                      => "\u{02ACC}",
1997        "supsim"                          => "\u{02AC8}",
1998        "supsub"                          => "\u{02AD4}",
1999        "supsup"                          => "\u{02AD6}",
2000        "swArr"                           => "\u{021D9}",
2001        "swarhk"                          => "\u{02926}",
2002        "swarr"                           => "\u{02199}",
2003        "swarrow"                         => "\u{02199}",
2004        "swnwar"                          => "\u{0292A}",
2005        "szlig"                           => "\u{000DF}",
2006        "target"                          => "\u{02316}",
2007        "tau"                             => "\u{003C4}",
2008        "tbrk"                            => "\u{023B4}",
2009        "tcaron"                          => "\u{00165}",
2010        "tcedil"                          => "\u{00163}",
2011        "tcy"                             => "\u{00442}",
2012        "tdot"                            => "\u{020DB}",
2013        "telrec"                          => "\u{02315}",
2014        "tfr"                             => "\u{1D531}",
2015        "there4"                          => "\u{02234}",
2016        "therefore"                       => "\u{02234}",
2017        "theta"                           => "\u{003B8}",
2018        "thetasym"                        => "\u{003D1}",
2019        "thetav"                          => "\u{003D1}",
2020        "thickapprox"                     => "\u{02248}",
2021        "thicksim"                        => "\u{0223C}",
2022        "thinsp"                          => "\u{02009}",
2023        "thkap"                           => "\u{02248}",
2024        "thksim"                          => "\u{0223C}",
2025        "thorn"                           => "\u{000FE}",
2026        "tilde"                           => "\u{002DC}",
2027        "times"                           => "\u{000D7}",
2028        "timesb"                          => "\u{022A0}",
2029        "timesbar"                        => "\u{02A31}",
2030        "timesd"                          => "\u{02A30}",
2031        "tint"                            => "\u{0222D}",
2032        "toea"                            => "\u{02928}",
2033        "top"                             => "\u{022A4}",
2034        "topbot"                          => "\u{02336}",
2035        "topcir"                          => "\u{02AF1}",
2036        "topf"                            => "\u{1D565}",
2037        "topfork"                         => "\u{02ADA}",
2038        "tosa"                            => "\u{02929}",
2039        "tprime"                          => "\u{02034}",
2040        "trade"                           => "\u{02122}",
2041        "triangle"                        => "\u{025B5}",
2042        "triangledown"                    => "\u{025BF}",
2043        "triangleleft"                    => "\u{025C3}",
2044        "trianglelefteq"                  => "\u{022B4}",
2045        "triangleq"                       => "\u{0225C}",
2046        "triangleright"                   => "\u{025B9}",
2047        "trianglerighteq"                 => "\u{022B5}",
2048        "tridot"                          => "\u{025EC}",
2049        "trie"                            => "\u{0225C}",
2050        "triminus"                        => "\u{02A3A}",
2051        "triplus"                         => "\u{02A39}",
2052        "trisb"                           => "\u{029CD}",
2053        "tritime"                         => "\u{02A3B}",
2054        "trpezium"                        => "\u{023E2}",
2055        "tscr"                            => "\u{1D4C9}",
2056        "tscy"                            => "\u{00446}",
2057        "tshcy"                           => "\u{0045B}",
2058        "tstrok"                          => "\u{00167}",
2059        "twixt"                           => "\u{0226C}",
2060        "twoheadleftarrow"                => "\u{0219E}",
2061        "twoheadrightarrow"               => "\u{021A0}",
2062        "uArr"                            => "\u{021D1}",
2063        "uHar"                            => "\u{02963}",
2064        "uacute"                          => "\u{000FA}",
2065        "uarr"                            => "\u{02191}",
2066        "ubrcy"                           => "\u{0045E}",
2067        "ubreve"                          => "\u{0016D}",
2068        "ucirc"                           => "\u{000FB}",
2069        "ucy"                             => "\u{00443}",
2070        "udarr"                           => "\u{021C5}",
2071        "udblac"                          => "\u{00171}",
2072        "udhar"                           => "\u{0296E}",
2073        "ufisht"                          => "\u{0297E}",
2074        "ufr"                             => "\u{1D532}",
2075        "ugrave"                          => "\u{000F9}",
2076        "uharl"                           => "\u{021BF}",
2077        "uharr"                           => "\u{021BE}",
2078        "uhblk"                           => "\u{02580}",
2079        "ulcorn"                          => "\u{0231C}",
2080        "ulcorner"                        => "\u{0231C}",
2081        "ulcrop"                          => "\u{0230F}",
2082        "ultri"                           => "\u{025F8}",
2083        "umacr"                           => "\u{0016B}",
2084        "uml"                             => "\u{000A8}",
2085        "uogon"                           => "\u{00173}",
2086        "uopf"                            => "\u{1D566}",
2087        "uparrow"                         => "\u{02191}",
2088        "updownarrow"                     => "\u{02195}",
2089        "upharpoonleft"                   => "\u{021BF}",
2090        "upharpoonright"                  => "\u{021BE}",
2091        "uplus"                           => "\u{0228E}",
2092        "upsi"                            => "\u{003C5}",
2093        "upsih"                           => "\u{003D2}",
2094        "upsilon"                         => "\u{003C5}",
2095        "upuparrows"                      => "\u{021C8}",
2096        "urcorn"                          => "\u{0231D}",
2097        "urcorner"                        => "\u{0231D}",
2098        "urcrop"                          => "\u{0230E}",
2099        "uring"                           => "\u{0016F}",
2100        "urtri"                           => "\u{025F9}",
2101        "uscr"                            => "\u{1D4CA}",
2102        "utdot"                           => "\u{022F0}",
2103        "utilde"                          => "\u{00169}",
2104        "utri"                            => "\u{025B5}",
2105        "utrif"                           => "\u{025B4}",
2106        "uuarr"                           => "\u{021C8}",
2107        "uuml"                            => "\u{000FC}",
2108        "uwangle"                         => "\u{029A7}",
2109        "vArr"                            => "\u{021D5}",
2110        "vBar"                            => "\u{02AE8}",
2111        "vBarv"                           => "\u{02AE9}",
2112        "vDash"                           => "\u{022A8}",
2113        "vangrt"                          => "\u{0299C}",
2114        "varepsilon"                      => "\u{003F5}",
2115        "varkappa"                        => "\u{003F0}",
2116        "varnothing"                      => "\u{02205}",
2117        "varphi"                          => "\u{003D5}",
2118        "varpi"                           => "\u{003D6}",
2119        "varpropto"                       => "\u{0221D}",
2120        "varr"                            => "\u{02195}",
2121        "varrho"                          => "\u{003F1}",
2122        "varsigma"                        => "\u{003C2}",
2123        "varsubsetneq"                    => "\u{0228A}\u{0FE00}",
2124        "varsubsetneqq"                   => "\u{02ACB}\u{0FE00}",
2125        "varsupsetneq"                    => "\u{0228B}\u{0FE00}",
2126        "varsupsetneqq"                   => "\u{02ACC}\u{0FE00}",
2127        "vartheta"                        => "\u{003D1}",
2128        "vartriangleleft"                 => "\u{022B2}",
2129        "vartriangleright"                => "\u{022B3}",
2130        "vcy"                             => "\u{00432}",
2131        "vdash"                           => "\u{022A2}",
2132        "vee"                             => "\u{02228}",
2133        "veebar"                          => "\u{022BB}",
2134        "veeeq"                           => "\u{0225A}",
2135        "vellip"                          => "\u{022EE}",
2136        "verbar"                          => "\u{0007C}",
2137        "vert"                            => "\u{0007C}",
2138        "vfr"                             => "\u{1D533}",
2139        "vltri"                           => "\u{022B2}",
2140        "vnsub"                           => "\u{02282}\u{020D2}",
2141        "vnsup"                           => "\u{02283}\u{020D2}",
2142        "vopf"                            => "\u{1D567}",
2143        "vprop"                           => "\u{0221D}",
2144        "vrtri"                           => "\u{022B3}",
2145        "vscr"                            => "\u{1D4CB}",
2146        "vsubnE"                          => "\u{02ACB}\u{0FE00}",
2147        "vsubne"                          => "\u{0228A}\u{0FE00}",
2148        "vsupnE"                          => "\u{02ACC}\u{0FE00}",
2149        "vsupne"                          => "\u{0228B}\u{0FE00}",
2150        "vzigzag"                         => "\u{0299A}",
2151        "wcirc"                           => "\u{00175}",
2152        "wedbar"                          => "\u{02A5F}",
2153        "wedge"                           => "\u{02227}",
2154        "wedgeq"                          => "\u{02259}",
2155        "weierp"                          => "\u{02118}",
2156        "wfr"                             => "\u{1D534}",
2157        "wopf"                            => "\u{1D568}",
2158        "wp"                              => "\u{02118}",
2159        "wr"                              => "\u{02240}",
2160        "wreath"                          => "\u{02240}",
2161        "wscr"                            => "\u{1D4CC}",
2162        "xcap"                            => "\u{022C2}",
2163        "xcirc"                           => "\u{025EF}",
2164        "xcup"                            => "\u{022C3}",
2165        "xdtri"                           => "\u{025BD}",
2166        "xfr"                             => "\u{1D535}",
2167        "xhArr"                           => "\u{027FA}",
2168        "xharr"                           => "\u{027F7}",
2169        "xi"                              => "\u{003BE}",
2170        "xlArr"                           => "\u{027F8}",
2171        "xlarr"                           => "\u{027F5}",
2172        "xmap"                            => "\u{027FC}",
2173        "xnis"                            => "\u{022FB}",
2174        "xodot"                           => "\u{02A00}",
2175        "xopf"                            => "\u{1D569}",
2176        "xoplus"                          => "\u{02A01}",
2177        "xotime"                          => "\u{02A02}",
2178        "xrArr"                           => "\u{027F9}",
2179        "xrarr"                           => "\u{027F6}",
2180        "xscr"                            => "\u{1D4CD}",
2181        "xsqcup"                          => "\u{02A06}",
2182        "xuplus"                          => "\u{02A04}",
2183        "xutri"                           => "\u{025B3}",
2184        "xvee"                            => "\u{022C1}",
2185        "xwedge"                          => "\u{022C0}",
2186        "yacute"                          => "\u{000FD}",
2187        "yacy"                            => "\u{0044F}",
2188        "ycirc"                           => "\u{00177}",
2189        "ycy"                             => "\u{0044B}",
2190        "yen"                             => "\u{000A5}",
2191        "yfr"                             => "\u{1D536}",
2192        "yicy"                            => "\u{00457}",
2193        "yopf"                            => "\u{1D56A}",
2194        "yscr"                            => "\u{1D4CE}",
2195        "yucy"                            => "\u{0044E}",
2196        "yuml"                            => "\u{000FF}",
2197        "zacute"                          => "\u{0017A}",
2198        "zcaron"                          => "\u{0017E}",
2199        "zcy"                             => "\u{00437}",
2200        "zdot"                            => "\u{0017C}",
2201        "zeetrf"                          => "\u{02128}",
2202        "zeta"                            => "\u{003B6}",
2203        "zfr"                             => "\u{1D537}",
2204        "zhcy"                            => "\u{00436}",
2205        "zigrarr"                         => "\u{021DD}",
2206        "zopf"                            => "\u{1D56B}",
2207        "zscr"                            => "\u{1D4CF}",
2208        "zwj"                             => "\u{0200D}",
2209        "zwnj"                            => "\u{0200C}",
2210        _                                 => Err(CharRefError::UnknownCharName)?
2211    }))
2212}
2213
2214/// The enum of errors [`parse_num_char_ref`] can return.
2215#[derive(Debug, Error)]
2216pub enum NumCharRefError {
2217    /// Invalid dec.
2218    #[error("Invalid dec.")]
2219    InvalidDec,
2220    /// Invalid hex.
2221    #[error("Invalid hex.")]
2222    InvalidHex,
2223    /// Char code overflow.
2224    #[error("Char code overflow.")]
2225    CharCodeOverflow,
2226    /// Not a num char ref.
2227    #[error("Not a num char ref.")]
2228    NotANumCharRef,
2229    /// Invalid char code.
2230    #[error("Invalid char code.")]
2231    InvalidCharCode(u32),
2232    /// Disallowed char code.
2233    #[error("Disallowed char code.")]
2234    DisallowedCharCode(char)
2235}
2236
2237/// The last state of the state machine in [`parse_num_char_ref`].
2238#[derive(Debug, Clone, Copy)]
2239enum HTMLNCRLastState {
2240    /// Just started.
2241    None,
2242    /// Last saw the `#`.
2243    Hash,
2244    /// Doing a decimal number (`^#\d+$`).
2245    DecDigit,
2246    /// Just saw the hexadecimal x.
2247    X,
2248    /// Doing a hexadecimal number (`^#[xX][\da-fA-F]+$`).
2249    HexDigit
2250}
2251
2252/// Decode a numeric character reference.
2253///
2254/// `^#(\d+|[xX][\da-fA-F]+)$`
2255/// # Errors
2256/// If `char_ref` doesn't start with `#`, returns the error [`NumCharRefError::NotANumCharRef`].
2257///
2258/// If the character after the `#` is not a decimal digit, `x`, or `X`, returns the error [`NumCharRefError::InvalidDec`].
2259///
2260/// If the ref starts with `#x` or `#X` and an invalid hexadecimal digit is found after it, returns the error [`NumCharRefError::InvalidHex`].
2261///
2262/// If the character code is greater than [`u32::MAX`], returns the error [`NumCharRefError::CharCodeOverflow`].
2263///
2264/// If the decoded character code isn't a valid [`char`] (as determined by [`char::from_u32`]), returns the error [`NumCharRefError::InvalidCharCode`] with the number.
2265///
2266/// If the character is [`char::is_control`] or [`char::is_whitespace`], returns the error [`NumCharRefError::DisallowedCharCode`] with the character.
2267/// # Examples
2268/// ```
2269/// use url_cleaner_engine::glue::*;
2270///
2271/// assert_eq!(parse::html::parse_num_char_ref("#65" ).unwrap(), 'A');
2272/// assert_eq!(parse::html::parse_num_char_ref("#x41").unwrap(), 'A');
2273///
2274/// parse::html::parse_num_char_ref("#10").unwrap_err();
2275/// ```
2276#[allow(clippy::unwrap_used, reason = "Shouldn't ever happen.")]
2277#[allow(clippy::missing_panics_doc, reason = "Shouldn't ever happen.")]
2278pub fn parse_num_char_ref(char_ref: &str) -> Result<char, NumCharRefError> {
2279    debug!(parse::html::parse_num_char_ref, &(), char_ref);
2280    
2281    let mut scratchspace: u32 = 0;
2282
2283    let mut last_state = HTMLNCRLastState::None;
2284
2285    for c in char_ref.chars() {
2286        debug!(parse::html::parse_num_char_ref, &(), c, last_state, scratchspace);
2287        match (last_state, c) {
2288            (HTMLNCRLastState::None                             , '#'                              ) => {last_state = HTMLNCRLastState::Hash;},
2289            (HTMLNCRLastState::None                             , _                                ) => Err(NumCharRefError::NotANumCharRef)?,
2290            (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)?},
2291            (HTMLNCRLastState::Hash                             , 'x' | 'X'                        ) => {last_state = HTMLNCRLastState::X;},
2292            (HTMLNCRLastState::Hash | HTMLNCRLastState::DecDigit, _                                ) => Err(NumCharRefError::InvalidDec)?,
2293            (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)?},
2294            (HTMLNCRLastState::X    | HTMLNCRLastState::HexDigit, _                                ) => Err(NumCharRefError::InvalidHex)?
2295        }
2296    }
2297
2298    debug!(parse::html::parse_num_char_ref, &(), scratchspace);
2299
2300    let ret = char::from_u32(scratchspace).ok_or(NumCharRefError::InvalidCharCode(scratchspace))?;
2301
2302    if ret.is_control() || ret.is_whitespace() {Err(NumCharRefError::DisallowedCharCode(ret))?;}
2303
2304    Ok(ret)
2305}