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}