1use std::char::REPLACEMENT_CHARACTER;
8
9pub fn add_html_token(result: &mut String, token: &[u8], add_space: bool) {
10 if add_space {
11 result.push(' ');
12 }
13
14 if let [b'&', entity @ .., b';'] = token {
15 let entity_code = if let [b'#', code @ ..] = entity {
16 let (code, radix) = if let [b'x' | b'X', code @ ..] = code {
17 (code, 16)
18 } else {
19 (code, 10)
20 };
21
22 std::str::from_utf8(code)
23 .ok()
24 .and_then(|code| u32::from_str_radix(code, radix).ok())
25 } else {
26 lookup_entity(entity).copied()
27 };
28
29 if let Some(entity_code) = entity_code {
30 result.push(char::from_u32(entity_code).unwrap_or(REPLACEMENT_CHARACTER));
31 return;
32 }
33 }
34
35 result.push_str(std::str::from_utf8(token).unwrap());
36}
37
38pub fn html_to_text(input: &str) -> String {
39 let mut result = String::with_capacity(input.len());
40 let input = input.as_bytes();
41
42 let mut in_tag = false;
43 let mut in_head = false;
44 let mut in_style = false;
45 let mut in_script = false;
46 let mut in_template = false;
47 let mut in_comment = false;
48
49 let mut is_token_start = true;
50 let mut is_after_space = false;
51 let mut is_tag_close = false;
52 let mut is_new_line = true;
53
54 let mut token_start = 0;
55 let mut token_end = 0;
56
57 let mut tag_token_pos = 0;
58 let mut comment_pos = 0;
59
60 for (pos, ch) in input.iter().enumerate() {
61 if !in_comment {
62 match ch {
63 b'<' => {
64 if !in_tag
65 && !in_head
66 && !in_style
67 && !in_script
68 && !in_template
69 && !is_token_start
70 {
71 add_html_token(
72 &mut result,
73 &input[token_start..token_end + 1],
74 is_after_space,
75 );
76 is_after_space = false;
77 }
78
79 tag_token_pos = 0;
80 in_tag = true;
81 is_token_start = true;
82 is_tag_close = false;
83 continue;
84 }
85 b'>' if in_tag => {
86 if tag_token_pos == 1 {
87 match input.get(token_start..token_end + 1) {
88 Some(tag)
89 if tag.eq_ignore_ascii_case(b"br")
90 || (tag.eq_ignore_ascii_case(b"p") && is_tag_close) =>
91 {
92 result.push('\n');
93 is_after_space = false;
94 is_new_line = true;
95 }
96 Some(tag) if tag.eq_ignore_ascii_case(b"head") => {
97 in_head = !is_tag_close;
98 }
99 Some(tag) if tag.eq_ignore_ascii_case(b"style") => {
100 in_style = !is_tag_close;
101 }
102 Some(tag) if tag.eq_ignore_ascii_case(b"script") => {
103 in_script = !is_tag_close;
104 }
105 Some(tag) if tag.eq_ignore_ascii_case(b"template") => {
106 in_template = !is_tag_close;
107 }
108 _ => (),
109 }
110 }
111
112 in_tag = false;
113 is_token_start = true;
114
115 continue;
116 }
117 b'/' if in_tag => {
118 if tag_token_pos == 0 {
119 is_tag_close = true;
120 }
121 continue;
122 }
123 b'!' if in_tag && tag_token_pos == 0 => {
124 if let Some(b"--") = input.get(pos + 1..pos + 3) {
125 in_comment = true;
126 continue;
127 }
128 }
129 b' ' | b'\t' | b'\r' | b'\n' => {
130 if !in_tag && !in_head && !in_style && !in_script && !in_template {
131 if !is_token_start {
132 add_html_token(
133 &mut result,
134 &input[token_start..token_end + 1],
135 is_after_space && !is_new_line,
136 );
137 is_new_line = false;
138 }
139 is_after_space = true;
140 }
141
142 is_token_start = true;
143
144 continue;
145 }
146 b'&' if !in_tag && !is_token_start && !in_head => {
147 if in_style || in_script || in_template {
148 continue;
149 }
150 add_html_token(
151 &mut result,
152 &input[token_start..token_end + 1],
153 is_after_space && !is_new_line,
154 );
155 is_new_line = false;
156 is_token_start = true;
157 is_after_space = false;
158 }
159 b';' if !in_tag && !is_token_start && !in_head => {
160 if in_style || in_script || in_template {
161 continue;
162 }
163 add_html_token(
164 &mut result,
165 &input[token_start..pos + 1],
166 is_after_space && !is_new_line,
167 );
168 is_token_start = true;
169 is_after_space = false;
170 is_new_line = false;
171 continue;
172 }
173 _ => (),
174 }
175 if is_token_start {
176 token_start = pos;
177 is_token_start = false;
178 if in_tag {
179 tag_token_pos += 1;
180 }
181 }
182 token_end = pos;
183 } else {
184 match ch {
185 b'-' => comment_pos += 1,
186 b'>' if comment_pos == 2 => {
187 comment_pos = 0;
188 in_comment = false;
189 in_tag = false;
190 is_token_start = true;
191 }
192 _ => comment_pos = 0,
193 }
194 }
195 }
196
197 if !in_tag && !is_token_start && !in_head && !in_style && !in_script && !in_template {
198 add_html_token(
199 &mut result,
200 &input[token_start..token_end + 1],
201 is_after_space && !is_new_line,
202 );
203 }
204
205 result.shrink_to_fit();
206 result
207}
208
209pub fn text_to_html(input: &str) -> String {
210 let input = input.as_bytes();
211 let mut result = Vec::with_capacity(input.len() + 26);
212
213 result.extend_from_slice(b"<html><body>");
214
215 for &ch in input {
216 match ch {
217 b'\n' => result.extend_from_slice(b"<br/>"),
218 b'<' => result.extend_from_slice(b"<"),
219 b'\r' => (),
220 _ => result.push(ch),
221 }
222 }
223 result.extend_from_slice(b"</body></html>");
224
225 String::from_utf8(result).unwrap()
226}
227
228fn lookup_entity(key: &[u8]) -> Option<&u32> {
229 hashify::map! {
230 key,
231 u32,
232 "AElig" => 198,
233 "AMP" => 38,
234 "Aacute" => 193,
235 "Abreve" => 258,
236 "Acirc" => 194,
237 "Acy" => 1040,
238 "Afr" => 120068,
239 "Agrave" => 192,
240 "Alpha" => 913,
241 "Amacr" => 256,
242 "And" => 10835,
243 "Aogon" => 260,
244 "Aopf" => 120120,
245 "ApplyFunction" => 8289,
246 "Aring" => 197,
247 "Ascr" => 119964,
248 "Assign" => 8788,
249 "Atilde" => 195,
250 "Auml" => 196,
251 "Backslash" => 8726,
252 "Barv" => 10983,
253 "Barwed" => 8966,
254 "Bcy" => 1041,
255 "Because" => 8757,
256 "Bernoullis" => 8492,
257 "Beta" => 914,
258 "Bfr" => 120069,
259 "Bopf" => 120121,
260 "Breve" => 728,
261 "Bscr" => 8492,
262 "Bumpeq" => 8782,
263 "CHcy" => 1063,
264 "COPY" => 169,
265 "Cacute" => 262,
266 "Cap" => 8914,
267 "CapitalDifferentialD" => 8517,
268 "Cayleys" => 8493,
269 "Ccaron" => 268,
270 "Ccedil" => 199,
271 "Ccirc" => 264,
272 "Cconint" => 8752,
273 "Cdot" => 266,
274 "Cedilla" => 184,
275 "CenterDot" => 183,
276 "Cfr" => 8493,
277 "Chi" => 935,
278 "CircleDot" => 8857,
279 "CircleMinus" => 8854,
280 "CirclePlus" => 8853,
281 "CircleTimes" => 8855,
282 "ClockwiseContourIntegral" => 8754,
283 "CloseCurlyDoubleQuote" => 8221,
284 "CloseCurlyQuote" => 8217,
285 "Colon" => 8759,
286 "Colone" => 10868,
287 "Congruent" => 8801,
288 "Conint" => 8751,
289 "ContourIntegral" => 8750,
290 "Copf" => 8450,
291 "Coproduct" => 8720,
292 "CounterClockwiseContourIntegral" => 8755,
293 "Cross" => 10799,
294 "Cscr" => 119966,
295 "Cup" => 8915,
296 "CupCap" => 8781,
297 "DD" => 8517,
298 "DDotrahd" => 10513,
299 "DJcy" => 1026,
300 "DScy" => 1029,
301 "DZcy" => 1039,
302 "Dagger" => 8225,
303 "Darr" => 8609,
304 "Dashv" => 10980,
305 "Dcaron" => 270,
306 "Dcy" => 1044,
307 "Del" => 8711,
308 "Delta" => 916,
309 "Dfr" => 120071,
310 "DiacriticalAcute" => 180,
311 "DiacriticalDot" => 729,
312 "DiacriticalDoubleAcute" => 733,
313 "DiacriticalGrave" => 96,
314 "DiacriticalTilde" => 732,
315 "Diamond" => 8900,
316 "DifferentialD" => 8518,
317 "Dopf" => 120123,
318 "Dot" => 168,
319 "DotDot" => 8412,
320 "DotEqual" => 8784,
321 "DoubleContourIntegral" => 8751,
322 "DoubleDot" => 168,
323 "DoubleDownArrow" => 8659,
324 "DoubleLeftArrow" => 8656,
325 "DoubleLeftRightArrow" => 8660,
326 "DoubleLeftTee" => 10980,
327 "DoubleLongLeftArrow" => 10232,
328 "DoubleLongLeftRightArrow" => 10234,
329 "DoubleLongRightArrow" => 10233,
330 "DoubleRightArrow" => 8658,
331 "DoubleRightTee" => 8872,
332 "DoubleUpArrow" => 8657,
333 "DoubleUpDownArrow" => 8661,
334 "DoubleVerticalBar" => 8741,
335 "DownArrow" => 8595,
336 "DownArrowBar" => 10515,
337 "DownArrowUpArrow" => 8693,
338 "DownBreve" => 785,
339 "DownLeftRightVector" => 10576,
340 "DownLeftTeeVector" => 10590,
341 "DownLeftVector" => 8637,
342 "DownLeftVectorBar" => 10582,
343 "DownRightTeeVector" => 10591,
344 "DownRightVector" => 8641,
345 "DownRightVectorBar" => 10583,
346 "DownTee" => 8868,
347 "DownTeeArrow" => 8615,
348 "Downarrow" => 8659,
349 "Dscr" => 119967,
350 "Dstrok" => 272,
351 "ENG" => 330,
352 "ETH" => 208,
353 "Eacute" => 201,
354 "Ecaron" => 282,
355 "Ecirc" => 202,
356 "Ecy" => 1069,
357 "Edot" => 278,
358 "Efr" => 120072,
359 "Egrave" => 200,
360 "Element" => 8712,
361 "Emacr" => 274,
362 "EmptySmallSquare" => 9723,
363 "EmptyVerySmallSquare" => 9643,
364 "Eogon" => 280,
365 "Eopf" => 120124,
366 "Epsilon" => 917,
367 "Equal" => 10869,
368 "EqualTilde" => 8770,
369 "Equilibrium" => 8652,
370 "Escr" => 8496,
371 "Esim" => 10867,
372 "Eta" => 919,
373 "Euml" => 203,
374 "Exists" => 8707,
375 "ExponentialE" => 8519,
376 "Fcy" => 1060,
377 "Ffr" => 120073,
378 "FilledSmallSquare" => 9724,
379 "FilledVerySmallSquare" => 9642,
380 "Fopf" => 120125,
381 "ForAll" => 8704,
382 "Fouriertrf" => 8497,
383 "Fscr" => 8497,
384 "GJcy" => 1027,
385 "GT" => 62,
386 "Gamma" => 915,
387 "Gammad" => 988,
388 "Gbreve" => 286,
389 "Gcedil" => 290,
390 "Gcirc" => 284,
391 "Gcy" => 1043,
392 "Gdot" => 288,
393 "Gfr" => 120074,
394 "Gg" => 8921,
395 "Gopf" => 120126,
396 "GreaterEqual" => 8805,
397 "GreaterEqualLess" => 8923,
398 "GreaterFullEqual" => 8807,
399 "GreaterGreater" => 10914,
400 "GreaterLess" => 8823,
401 "GreaterSlantEqual" => 10878,
402 "GreaterTilde" => 8819,
403 "Gscr" => 119970,
404 "Gt" => 8811,
405 "HARDcy" => 1066,
406 "Hacek" => 711,
407 "Hat" => 94,
408 "Hcirc" => 292,
409 "Hfr" => 8460,
410 "HilbertSpace" => 8459,
411 "Hopf" => 8461,
412 "HorizontalLine" => 9472,
413 "Hscr" => 8459,
414 "Hstrok" => 294,
415 "HumpDownHump" => 8782,
416 "HumpEqual" => 8783,
417 "IEcy" => 1045,
418 "IJlig" => 306,
419 "IOcy" => 1025,
420 "Iacute" => 205,
421 "Icirc" => 206,
422 "Icy" => 1048,
423 "Idot" => 304,
424 "Ifr" => 8465,
425 "Igrave" => 204,
426 "Im" => 8465,
427 "Imacr" => 298,
428 "ImaginaryI" => 8520,
429 "Implies" => 8658,
430 "Int" => 8748,
431 "Integral" => 8747,
432 "Intersection" => 8898,
433 "InvisibleComma" => 8291,
434 "InvisibleTimes" => 8290,
435 "Iogon" => 302,
436 "Iopf" => 120128,
437 "Iota" => 921,
438 "Iscr" => 8464,
439 "Itilde" => 296,
440 "Iukcy" => 1030,
441 "Iuml" => 207,
442 "Jcirc" => 308,
443 "Jcy" => 1049,
444 "Jfr" => 120077,
445 "Jopf" => 120129,
446 "Jscr" => 119973,
447 "Jsercy" => 1032,
448 "Jukcy" => 1028,
449 "KHcy" => 1061,
450 "KJcy" => 1036,
451 "Kappa" => 922,
452 "Kcedil" => 310,
453 "Kcy" => 1050,
454 "Kfr" => 120078,
455 "Kopf" => 120130,
456 "Kscr" => 119974,
457 "LJcy" => 1033,
458 "LT" => 60,
459 "Lacute" => 313,
460 "Lambda" => 923,
461 "Lang" => 10218,
462 "Laplacetrf" => 8466,
463 "Larr" => 8606,
464 "Lcaron" => 317,
465 "Lcedil" => 315,
466 "Lcy" => 1051,
467 "LeftAngleBracket" => 10216,
468 "LeftArrow" => 8592,
469 "LeftArrowBar" => 8676,
470 "LeftArrowRightArrow" => 8646,
471 "LeftCeiling" => 8968,
472 "LeftDoubleBracket" => 10214,
473 "LeftDownTeeVector" => 10593,
474 "LeftDownVector" => 8643,
475 "LeftDownVectorBar" => 10585,
476 "LeftFloor" => 8970,
477 "LeftRightArrow" => 8596,
478 "LeftRightVector" => 10574,
479 "LeftTee" => 8867,
480 "LeftTeeArrow" => 8612,
481 "LeftTeeVector" => 10586,
482 "LeftTriangle" => 8882,
483 "LeftTriangleBar" => 10703,
484 "LeftTriangleEqual" => 8884,
485 "LeftUpDownVector" => 10577,
486 "LeftUpTeeVector" => 10592,
487 "LeftUpVector" => 8639,
488 "LeftUpVectorBar" => 10584,
489 "LeftVector" => 8636,
490 "LeftVectorBar" => 10578,
491 "Leftarrow" => 8656,
492 "Leftrightarrow" => 8660,
493 "LessEqualGreater" => 8922,
494 "LessFullEqual" => 8806,
495 "LessGreater" => 8822,
496 "LessLess" => 10913,
497 "LessSlantEqual" => 10877,
498 "LessTilde" => 8818,
499 "Lfr" => 120079,
500 "Ll" => 8920,
501 "Lleftarrow" => 8666,
502 "Lmidot" => 319,
503 "LongLeftArrow" => 10229,
504 "LongLeftRightArrow" => 10231,
505 "LongRightArrow" => 10230,
506 "Longleftarrow" => 10232,
507 "Longleftrightarrow" => 10234,
508 "Longrightarrow" => 10233,
509 "Lopf" => 120131,
510 "LowerLeftArrow" => 8601,
511 "LowerRightArrow" => 8600,
512 "Lscr" => 8466,
513 "Lsh" => 8624,
514 "Lstrok" => 321,
515 "Lt" => 8810,
516 "Map" => 10501,
517 "Mcy" => 1052,
518 "MediumSpace" => 8287,
519 "Mellintrf" => 8499,
520 "Mfr" => 120080,
521 "MinusPlus" => 8723,
522 "Mopf" => 120132,
523 "Mscr" => 8499,
524 "Mu" => 924,
525 "NJcy" => 1034,
526 "Nacute" => 323,
527 "Ncaron" => 327,
528 "Ncedil" => 325,
529 "Ncy" => 1053,
530 "NegativeMediumSpace" => 8203,
531 "NegativeThickSpace" => 8203,
532 "NegativeThinSpace" => 8203,
533 "NegativeVeryThinSpace" => 8203,
534 "NestedGreaterGreater" => 8811,
535 "NestedLessLess" => 8810,
536 "NewLine" => 10,
537 "Nfr" => 120081,
538 "NoBreak" => 8288,
539 "NonBreakingSpace" => 160,
540 "Nopf" => 8469,
541 "Not" => 10988,
542 "NotCongruent" => 8802,
543 "NotCupCap" => 8813,
544 "NotDoubleVerticalBar" => 8742,
545 "NotElement" => 8713,
546 "NotEqual" => 8800,
547 "NotEqualTilde" => 8770,
548 "NotExists" => 8708,
549 "NotGreater" => 8815,
550 "NotGreaterEqual" => 8817,
551 "NotGreaterFullEqual" => 8807,
552 "NotGreaterGreater" => 8811,
553 "NotGreaterLess" => 8825,
554 "NotGreaterSlantEqual" => 10878,
555 "NotGreaterTilde" => 8821,
556 "NotHumpDownHump" => 8782,
557 "NotHumpEqual" => 8783,
558 "NotLeftTriangle" => 8938,
559 "NotLeftTriangleBar" => 10703,
560 "NotLeftTriangleEqual" => 8940,
561 "NotLess" => 8814,
562 "NotLessEqual" => 8816,
563 "NotLessGreater" => 8824,
564 "NotLessLess" => 8810,
565 "NotLessSlantEqual" => 10877,
566 "NotLessTilde" => 8820,
567 "NotNestedGreaterGreater" => 10914,
568 "NotNestedLessLess" => 10913,
569 "NotPrecedes" => 8832,
570 "NotPrecedesEqual" => 10927,
571 "NotPrecedesSlantEqual" => 8928,
572 "NotReverseElement" => 8716,
573 "NotRightTriangle" => 8939,
574 "NotRightTriangleBar" => 10704,
575 "NotRightTriangleEqual" => 8941,
576 "NotSquareSubset" => 8847,
577 "NotSquareSubsetEqual" => 8930,
578 "NotSquareSuperset" => 8848,
579 "NotSquareSupersetEqual" => 8931,
580 "NotSubset" => 8834,
581 "NotSubsetEqual" => 8840,
582 "NotSucceeds" => 8833,
583 "NotSucceedsEqual" => 10928,
584 "NotSucceedsSlantEqual" => 8929,
585 "NotSucceedsTilde" => 8831,
586 "NotSuperset" => 8835,
587 "NotSupersetEqual" => 8841,
588 "NotTilde" => 8769,
589 "NotTildeEqual" => 8772,
590 "NotTildeFullEqual" => 8775,
591 "NotTildeTilde" => 8777,
592 "NotVerticalBar" => 8740,
593 "Nscr" => 119977,
594 "Ntilde" => 209,
595 "Nu" => 925,
596 "OElig" => 338,
597 "Oacute" => 211,
598 "Ocirc" => 212,
599 "Ocy" => 1054,
600 "Odblac" => 336,
601 "Ofr" => 120082,
602 "Ograve" => 210,
603 "Omacr" => 332,
604 "Omega" => 937,
605 "Omicron" => 927,
606 "Oopf" => 120134,
607 "OpenCurlyDoubleQuote" => 8220,
608 "OpenCurlyQuote" => 8216,
609 "Or" => 10836,
610 "Oscr" => 119978,
611 "Oslash" => 216,
612 "Otilde" => 213,
613 "Otimes" => 10807,
614 "Ouml" => 214,
615 "OverBar" => 8254,
616 "OverBrace" => 9182,
617 "OverBracket" => 9140,
618 "OverParenthesis" => 9180,
619 "PartialD" => 8706,
620 "Pcy" => 1055,
621 "Pfr" => 120083,
622 "Phi" => 934,
623 "Pi" => 928,
624 "PlusMinus" => 177,
625 "Poincareplane" => 8460,
626 "Popf" => 8473,
627 "Pr" => 10939,
628 "Precedes" => 8826,
629 "PrecedesEqual" => 10927,
630 "PrecedesSlantEqual" => 8828,
631 "PrecedesTilde" => 8830,
632 "Prime" => 8243,
633 "Product" => 8719,
634 "Proportion" => 8759,
635 "Proportional" => 8733,
636 "Pscr" => 119979,
637 "Psi" => 936,
638 "QUOT" => 34,
639 "Qfr" => 120084,
640 "Qopf" => 8474,
641 "Qscr" => 119980,
642 "RBarr" => 10512,
643 "REG" => 174,
644 "Racute" => 340,
645 "Rang" => 10219,
646 "Rarr" => 8608,
647 "Rarrtl" => 10518,
648 "Rcaron" => 344,
649 "Rcedil" => 342,
650 "Rcy" => 1056,
651 "Re" => 8476,
652 "ReverseElement" => 8715,
653 "ReverseEquilibrium" => 8651,
654 "ReverseUpEquilibrium" => 10607,
655 "Rfr" => 8476,
656 "Rho" => 929,
657 "RightAngleBracket" => 10217,
658 "RightArrow" => 8594,
659 "RightArrowBar" => 8677,
660 "RightArrowLeftArrow" => 8644,
661 "RightCeiling" => 8969,
662 "RightDoubleBracket" => 10215,
663 "RightDownTeeVector" => 10589,
664 "RightDownVector" => 8642,
665 "RightDownVectorBar" => 10581,
666 "RightFloor" => 8971,
667 "RightTee" => 8866,
668 "RightTeeArrow" => 8614,
669 "RightTeeVector" => 10587,
670 "RightTriangle" => 8883,
671 "RightTriangleBar" => 10704,
672 "RightTriangleEqual" => 8885,
673 "RightUpDownVector" => 10575,
674 "RightUpTeeVector" => 10588,
675 "RightUpVector" => 8638,
676 "RightUpVectorBar" => 10580,
677 "RightVector" => 8640,
678 "RightVectorBar" => 10579,
679 "Rightarrow" => 8658,
680 "Ropf" => 8477,
681 "RoundImplies" => 10608,
682 "Rrightarrow" => 8667,
683 "Rscr" => 8475,
684 "Rsh" => 8625,
685 "RuleDelayed" => 10740,
686 "SHCHcy" => 1065,
687 "SHcy" => 1064,
688 "SOFTcy" => 1068,
689 "Sacute" => 346,
690 "Sc" => 10940,
691 "Scaron" => 352,
692 "Scedil" => 350,
693 "Scirc" => 348,
694 "Scy" => 1057,
695 "Sfr" => 120086,
696 "ShortDownArrow" => 8595,
697 "ShortLeftArrow" => 8592,
698 "ShortRightArrow" => 8594,
699 "ShortUpArrow" => 8593,
700 "Sigma" => 931,
701 "SmallCircle" => 8728,
702 "Sopf" => 120138,
703 "Sqrt" => 8730,
704 "Square" => 9633,
705 "SquareIntersection" => 8851,
706 "SquareSubset" => 8847,
707 "SquareSubsetEqual" => 8849,
708 "SquareSuperset" => 8848,
709 "SquareSupersetEqual" => 8850,
710 "SquareUnion" => 8852,
711 "Sscr" => 119982,
712 "Star" => 8902,
713 "Sub" => 8912,
714 "Subset" => 8912,
715 "SubsetEqual" => 8838,
716 "Succeeds" => 8827,
717 "SucceedsEqual" => 10928,
718 "SucceedsSlantEqual" => 8829,
719 "SucceedsTilde" => 8831,
720 "SuchThat" => 8715,
721 "Sum" => 8721,
722 "Sup" => 8913,
723 "Superset" => 8835,
724 "SupersetEqual" => 8839,
725 "Supset" => 8913,
726 "THORN" => 222,
727 "TRADE" => 8482,
728 "TSHcy" => 1035,
729 "TScy" => 1062,
730 "Tab" => 9,
731 "Tau" => 932,
732 "Tcaron" => 356,
733 "Tcedil" => 354,
734 "Tcy" => 1058,
735 "Tfr" => 120087,
736 "Therefore" => 8756,
737 "Theta" => 920,
738 "ThickSpace" => 8287,
739 "ThinSpace" => 8201,
740 "Tilde" => 8764,
741 "TildeEqual" => 8771,
742 "TildeFullEqual" => 8773,
743 "TildeTilde" => 8776,
744 "Topf" => 120139,
745 "TripleDot" => 8411,
746 "Tscr" => 119983,
747 "Tstrok" => 358,
748 "Uacute" => 218,
749 "Uarr" => 8607,
750 "Uarrocir" => 10569,
751 "Ubrcy" => 1038,
752 "Ubreve" => 364,
753 "Ucirc" => 219,
754 "Ucy" => 1059,
755 "Udblac" => 368,
756 "Ufr" => 120088,
757 "Ugrave" => 217,
758 "Umacr" => 362,
759 "UnderBar" => 95,
760 "UnderBrace" => 9183,
761 "UnderBracket" => 9141,
762 "UnderParenthesis" => 9181,
763 "Union" => 8899,
764 "UnionPlus" => 8846,
765 "Uogon" => 370,
766 "Uopf" => 120140,
767 "UpArrow" => 8593,
768 "UpArrowBar" => 10514,
769 "UpArrowDownArrow" => 8645,
770 "UpDownArrow" => 8597,
771 "UpEquilibrium" => 10606,
772 "UpTee" => 8869,
773 "UpTeeArrow" => 8613,
774 "Uparrow" => 8657,
775 "Updownarrow" => 8661,
776 "UpperLeftArrow" => 8598,
777 "UpperRightArrow" => 8599,
778 "Upsi" => 978,
779 "Upsilon" => 933,
780 "Uring" => 366,
781 "Uscr" => 119984,
782 "Utilde" => 360,
783 "Uuml" => 220,
784 "VDash" => 8875,
785 "Vbar" => 10987,
786 "Vcy" => 1042,
787 "Vdash" => 8873,
788 "Vdashl" => 10982,
789 "Vee" => 8897,
790 "Verbar" => 8214,
791 "Vert" => 8214,
792 "VerticalBar" => 8739,
793 "VerticalLine" => 124,
794 "VerticalSeparator" => 10072,
795 "VerticalTilde" => 8768,
796 "VeryThinSpace" => 8202,
797 "Vfr" => 120089,
798 "Vopf" => 120141,
799 "Vscr" => 119985,
800 "Vvdash" => 8874,
801 "Wcirc" => 372,
802 "Wedge" => 8896,
803 "Wfr" => 120090,
804 "Wopf" => 120142,
805 "Wscr" => 119986,
806 "Xfr" => 120091,
807 "Xi" => 926,
808 "Xopf" => 120143,
809 "Xscr" => 119987,
810 "YAcy" => 1071,
811 "YIcy" => 1031,
812 "YUcy" => 1070,
813 "Yacute" => 221,
814 "Ycirc" => 374,
815 "Ycy" => 1067,
816 "Yfr" => 120092,
817 "Yopf" => 120144,
818 "Yscr" => 119988,
819 "Yuml" => 376,
820 "ZHcy" => 1046,
821 "Zacute" => 377,
822 "Zcaron" => 381,
823 "Zcy" => 1047,
824 "Zdot" => 379,
825 "ZeroWidthSpace" => 8203,
826 "Zeta" => 918,
827 "Zfr" => 8488,
828 "Zopf" => 8484,
829 "Zscr" => 119989,
830 "aacute" => 225,
831 "abreve" => 259,
832 "ac" => 8766,
833 "acE" => 8766,
834 "acd" => 8767,
835 "acirc" => 226,
836 "acute" => 180,
837 "acy" => 1072,
838 "aelig" => 230,
839 "af" => 8289,
840 "afr" => 120094,
841 "agrave" => 224,
842 "alefsym" => 8501,
843 "aleph" => 8501,
844 "alpha" => 945,
845 "amacr" => 257,
846 "amalg" => 10815,
847 "amp" => 38,
848 "and" => 8743,
849 "andand" => 10837,
850 "andd" => 10844,
851 "andslope" => 10840,
852 "andv" => 10842,
853 "ang" => 8736,
854 "ange" => 10660,
855 "angle" => 8736,
856 "angmsd" => 8737,
857 "angmsdaa" => 10664,
858 "angmsdab" => 10665,
859 "angmsdac" => 10666,
860 "angmsdad" => 10667,
861 "angmsdae" => 10668,
862 "angmsdaf" => 10669,
863 "angmsdag" => 10670,
864 "angmsdah" => 10671,
865 "angrt" => 8735,
866 "angrtvb" => 8894,
867 "angrtvbd" => 10653,
868 "angsph" => 8738,
869 "angst" => 197,
870 "angzarr" => 9084,
871 "aogon" => 261,
872 "aopf" => 120146,
873 "ap" => 8776,
874 "apE" => 10864,
875 "apacir" => 10863,
876 "ape" => 8778,
877 "apid" => 8779,
878 "apos" => 39,
879 "approx" => 8776,
880 "approxeq" => 8778,
881 "aring" => 229,
882 "ascr" => 119990,
883 "ast" => 42,
884 "asymp" => 8776,
885 "asympeq" => 8781,
886 "atilde" => 227,
887 "auml" => 228,
888 "awconint" => 8755,
889 "awint" => 10769,
890 "bNot" => 10989,
891 "backcong" => 8780,
892 "backepsilon" => 1014,
893 "backprime" => 8245,
894 "backsim" => 8765,
895 "backsimeq" => 8909,
896 "barvee" => 8893,
897 "barwed" => 8965,
898 "barwedge" => 8965,
899 "bbrk" => 9141,
900 "bbrktbrk" => 9142,
901 "bcong" => 8780,
902 "bcy" => 1073,
903 "bdquo" => 8222,
904 "becaus" => 8757,
905 "because" => 8757,
906 "bemptyv" => 10672,
907 "bepsi" => 1014,
908 "bernou" => 8492,
909 "beta" => 946,
910 "beth" => 8502,
911 "between" => 8812,
912 "bfr" => 120095,
913 "bigcap" => 8898,
914 "bigcirc" => 9711,
915 "bigcup" => 8899,
916 "bigodot" => 10752,
917 "bigoplus" => 10753,
918 "bigotimes" => 10754,
919 "bigsqcup" => 10758,
920 "bigstar" => 9733,
921 "bigtriangledown" => 9661,
922 "bigtriangleup" => 9651,
923 "biguplus" => 10756,
924 "bigvee" => 8897,
925 "bigwedge" => 8896,
926 "bkarow" => 10509,
927 "blacklozenge" => 10731,
928 "blacksquare" => 9642,
929 "blacktriangle" => 9652,
930 "blacktriangledown" => 9662,
931 "blacktriangleleft" => 9666,
932 "blacktriangleright" => 9656,
933 "blank" => 9251,
934 "blk12" => 9618,
935 "blk14" => 9617,
936 "blk34" => 9619,
937 "block" => 9608,
938 "bne" => 61,
939 "bnequiv" => 8801,
940 "bnot" => 8976,
941 "bopf" => 120147,
942 "bot" => 8869,
943 "bottom" => 8869,
944 "bowtie" => 8904,
945 "boxDL" => 9559,
946 "boxDR" => 9556,
947 "boxDl" => 9558,
948 "boxDr" => 9555,
949 "boxH" => 9552,
950 "boxHD" => 9574,
951 "boxHU" => 9577,
952 "boxHd" => 9572,
953 "boxHu" => 9575,
954 "boxUL" => 9565,
955 "boxUR" => 9562,
956 "boxUl" => 9564,
957 "boxUr" => 9561,
958 "boxV" => 9553,
959 "boxVH" => 9580,
960 "boxVL" => 9571,
961 "boxVR" => 9568,
962 "boxVh" => 9579,
963 "boxVl" => 9570,
964 "boxVr" => 9567,
965 "boxbox" => 10697,
966 "boxdL" => 9557,
967 "boxdR" => 9554,
968 "boxdl" => 9488,
969 "boxdr" => 9484,
970 "boxh" => 9472,
971 "boxhD" => 9573,
972 "boxhU" => 9576,
973 "boxhd" => 9516,
974 "boxhu" => 9524,
975 "boxminus" => 8863,
976 "boxplus" => 8862,
977 "boxtimes" => 8864,
978 "boxuL" => 9563,
979 "boxuR" => 9560,
980 "boxul" => 9496,
981 "boxur" => 9492,
982 "boxv" => 9474,
983 "boxvH" => 9578,
984 "boxvL" => 9569,
985 "boxvR" => 9566,
986 "boxvh" => 9532,
987 "boxvl" => 9508,
988 "boxvr" => 9500,
989 "bprime" => 8245,
990 "breve" => 728,
991 "brvbar" => 166,
992 "bscr" => 119991,
993 "bsemi" => 8271,
994 "bsim" => 8765,
995 "bsime" => 8909,
996 "bsol" => 92,
997 "bsolb" => 10693,
998 "bsolhsub" => 10184,
999 "bull" => 8226,
1000 "bullet" => 8226,
1001 "bump" => 8782,
1002 "bumpE" => 10926,
1003 "bumpe" => 8783,
1004 "bumpeq" => 8783,
1005 "cacute" => 263,
1006 "cap" => 8745,
1007 "capand" => 10820,
1008 "capbrcup" => 10825,
1009 "capcap" => 10827,
1010 "capcup" => 10823,
1011 "capdot" => 10816,
1012 "caps" => 8745,
1013 "caret" => 8257,
1014 "caron" => 711,
1015 "ccaps" => 10829,
1016 "ccaron" => 269,
1017 "ccedil" => 231,
1018 "ccirc" => 265,
1019 "ccups" => 10828,
1020 "ccupssm" => 10832,
1021 "cdot" => 267,
1022 "cedil" => 184,
1023 "cemptyv" => 10674,
1024 "cent" => 162,
1025 "centerdot" => 183,
1026 "cfr" => 120096,
1027 "chcy" => 1095,
1028 "check" => 10003,
1029 "checkmark" => 10003,
1030 "chi" => 967,
1031 "cir" => 9675,
1032 "cirE" => 10691,
1033 "circ" => 710,
1034 "circeq" => 8791,
1035 "circlearrowleft" => 8634,
1036 "circlearrowright" => 8635,
1037 "circledR" => 174,
1038 "circledS" => 9416,
1039 "circledast" => 8859,
1040 "circledcirc" => 8858,
1041 "circleddash" => 8861,
1042 "cire" => 8791,
1043 "cirfnint" => 10768,
1044 "cirmid" => 10991,
1045 "cirscir" => 10690,
1046 "clubs" => 9827,
1047 "clubsuit" => 9827,
1048 "colon" => 58,
1049 "colone" => 8788,
1050 "coloneq" => 8788,
1051 "comma" => 44,
1052 "commat" => 64,
1053 "comp" => 8705,
1054 "compfn" => 8728,
1055 "complement" => 8705,
1056 "complexes" => 8450,
1057 "cong" => 8773,
1058 "congdot" => 10861,
1059 "conint" => 8750,
1060 "copf" => 120148,
1061 "coprod" => 8720,
1062 "copy" => 169,
1063 "copysr" => 8471,
1064 "crarr" => 8629,
1065 "cross" => 10007,
1066 "cscr" => 119992,
1067 "csub" => 10959,
1068 "csube" => 10961,
1069 "csup" => 10960,
1070 "csupe" => 10962,
1071 "ctdot" => 8943,
1072 "cudarrl" => 10552,
1073 "cudarrr" => 10549,
1074 "cuepr" => 8926,
1075 "cuesc" => 8927,
1076 "cularr" => 8630,
1077 "cularrp" => 10557,
1078 "cup" => 8746,
1079 "cupbrcap" => 10824,
1080 "cupcap" => 10822,
1081 "cupcup" => 10826,
1082 "cupdot" => 8845,
1083 "cupor" => 10821,
1084 "cups" => 8746,
1085 "curarr" => 8631,
1086 "curarrm" => 10556,
1087 "curlyeqprec" => 8926,
1088 "curlyeqsucc" => 8927,
1089 "curlyvee" => 8910,
1090 "curlywedge" => 8911,
1091 "curren" => 164,
1092 "curvearrowleft" => 8630,
1093 "curvearrowright" => 8631,
1094 "cuvee" => 8910,
1095 "cuwed" => 8911,
1096 "cwconint" => 8754,
1097 "cwint" => 8753,
1098 "cylcty" => 9005,
1099 "dArr" => 8659,
1100 "dHar" => 10597,
1101 "dagger" => 8224,
1102 "daleth" => 8504,
1103 "darr" => 8595,
1104 "dash" => 8208,
1105 "dashv" => 8867,
1106 "dbkarow" => 10511,
1107 "dblac" => 733,
1108 "dcaron" => 271,
1109 "dcy" => 1076,
1110 "dd" => 8518,
1111 "ddagger" => 8225,
1112 "ddarr" => 8650,
1113 "ddotseq" => 10871,
1114 "deg" => 176,
1115 "delta" => 948,
1116 "demptyv" => 10673,
1117 "dfisht" => 10623,
1118 "dfr" => 120097,
1119 "dharl" => 8643,
1120 "dharr" => 8642,
1121 "diam" => 8900,
1122 "diamond" => 8900,
1123 "diamondsuit" => 9830,
1124 "diams" => 9830,
1125 "die" => 168,
1126 "digamma" => 989,
1127 "disin" => 8946,
1128 "div" => 247,
1129 "divide" => 247,
1130 "divideontimes" => 8903,
1131 "divonx" => 8903,
1132 "djcy" => 1106,
1133 "dlcorn" => 8990,
1134 "dlcrop" => 8973,
1135 "dollar" => 36,
1136 "dopf" => 120149,
1137 "dot" => 729,
1138 "doteq" => 8784,
1139 "doteqdot" => 8785,
1140 "dotminus" => 8760,
1141 "dotplus" => 8724,
1142 "dotsquare" => 8865,
1143 "doublebarwedge" => 8966,
1144 "downarrow" => 8595,
1145 "downdownarrows" => 8650,
1146 "downharpoonleft" => 8643,
1147 "downharpoonright" => 8642,
1148 "drbkarow" => 10512,
1149 "drcorn" => 8991,
1150 "drcrop" => 8972,
1151 "dscr" => 119993,
1152 "dscy" => 1109,
1153 "dsol" => 10742,
1154 "dstrok" => 273,
1155 "dtdot" => 8945,
1156 "dtri" => 9663,
1157 "dtrif" => 9662,
1158 "duarr" => 8693,
1159 "duhar" => 10607,
1160 "dwangle" => 10662,
1161 "dzcy" => 1119,
1162 "dzigrarr" => 10239,
1163 "eDDot" => 10871,
1164 "eDot" => 8785,
1165 "eacute" => 233,
1166 "easter" => 10862,
1167 "ecaron" => 283,
1168 "ecir" => 8790,
1169 "ecirc" => 234,
1170 "ecolon" => 8789,
1171 "ecy" => 1101,
1172 "edot" => 279,
1173 "ee" => 8519,
1174 "efDot" => 8786,
1175 "efr" => 120098,
1176 "eg" => 10906,
1177 "egrave" => 232,
1178 "egs" => 10902,
1179 "egsdot" => 10904,
1180 "el" => 10905,
1181 "elinters" => 9191,
1182 "ell" => 8467,
1183 "els" => 10901,
1184 "elsdot" => 10903,
1185 "emacr" => 275,
1186 "empty" => 8709,
1187 "emptyset" => 8709,
1188 "emptyv" => 8709,
1189 "emsp" => 8195,
1190 "emsp13" => 8196,
1191 "emsp14" => 8197,
1192 "eng" => 331,
1193 "ensp" => 8194,
1194 "eogon" => 281,
1195 "eopf" => 120150,
1196 "epar" => 8917,
1197 "eparsl" => 10723,
1198 "eplus" => 10865,
1199 "epsi" => 949,
1200 "epsilon" => 949,
1201 "epsiv" => 1013,
1202 "eqcirc" => 8790,
1203 "eqcolon" => 8789,
1204 "eqsim" => 8770,
1205 "eqslantgtr" => 10902,
1206 "eqslantless" => 10901,
1207 "equals" => 61,
1208 "equest" => 8799,
1209 "equiv" => 8801,
1210 "equivDD" => 10872,
1211 "eqvparsl" => 10725,
1212 "erDot" => 8787,
1213 "erarr" => 10609,
1214 "escr" => 8495,
1215 "esdot" => 8784,
1216 "esim" => 8770,
1217 "eta" => 951,
1218 "eth" => 240,
1219 "euml" => 235,
1220 "euro" => 8364,
1221 "excl" => 33,
1222 "exist" => 8707,
1223 "expectation" => 8496,
1224 "exponentiale" => 8519,
1225 "fallingdotseq" => 8786,
1226 "fcy" => 1092,
1227 "female" => 9792,
1228 "ffilig" => 64259,
1229 "fflig" => 64256,
1230 "ffllig" => 64260,
1231 "ffr" => 120099,
1232 "filig" => 64257,
1233 "fjlig" => 102,
1234 "flat" => 9837,
1235 "fllig" => 64258,
1236 "fltns" => 9649,
1237 "fnof" => 402,
1238 "fopf" => 120151,
1239 "forall" => 8704,
1240 "fork" => 8916,
1241 "forkv" => 10969,
1242 "fpartint" => 10765,
1243 "frac12" => 189,
1244 "frac13" => 8531,
1245 "frac14" => 188,
1246 "frac15" => 8533,
1247 "frac16" => 8537,
1248 "frac18" => 8539,
1249 "frac23" => 8532,
1250 "frac25" => 8534,
1251 "frac34" => 190,
1252 "frac35" => 8535,
1253 "frac38" => 8540,
1254 "frac45" => 8536,
1255 "frac56" => 8538,
1256 "frac58" => 8541,
1257 "frac78" => 8542,
1258 "frasl" => 8260,
1259 "frown" => 8994,
1260 "fscr" => 119995,
1261 "gE" => 8807,
1262 "gEl" => 10892,
1263 "gacute" => 501,
1264 "gamma" => 947,
1265 "gammad" => 989,
1266 "gap" => 10886,
1267 "gbreve" => 287,
1268 "gcirc" => 285,
1269 "gcy" => 1075,
1270 "gdot" => 289,
1271 "ge" => 8805,
1272 "gel" => 8923,
1273 "geq" => 8805,
1274 "geqq" => 8807,
1275 "geqslant" => 10878,
1276 "ges" => 10878,
1277 "gescc" => 10921,
1278 "gesdot" => 10880,
1279 "gesdoto" => 10882,
1280 "gesdotol" => 10884,
1281 "gesl" => 8923,
1282 "gesles" => 10900,
1283 "gfr" => 120100,
1284 "gg" => 8811,
1285 "ggg" => 8921,
1286 "gimel" => 8503,
1287 "gjcy" => 1107,
1288 "gl" => 8823,
1289 "glE" => 10898,
1290 "gla" => 10917,
1291 "glj" => 10916,
1292 "gnE" => 8809,
1293 "gnap" => 10890,
1294 "gnapprox" => 10890,
1295 "gne" => 10888,
1296 "gneq" => 10888,
1297 "gneqq" => 8809,
1298 "gnsim" => 8935,
1299 "gopf" => 120152,
1300 "grave" => 96,
1301 "gscr" => 8458,
1302 "gsim" => 8819,
1303 "gsime" => 10894,
1304 "gsiml" => 10896,
1305 "gt" => 62,
1306 "gtcc" => 10919,
1307 "gtcir" => 10874,
1308 "gtdot" => 8919,
1309 "gtlPar" => 10645,
1310 "gtquest" => 10876,
1311 "gtrapprox" => 10886,
1312 "gtrarr" => 10616,
1313 "gtrdot" => 8919,
1314 "gtreqless" => 8923,
1315 "gtreqqless" => 10892,
1316 "gtrless" => 8823,
1317 "gtrsim" => 8819,
1318 "gvertneqq" => 8809,
1319 "gvnE" => 8809,
1320 "hArr" => 8660,
1321 "hairsp" => 8202,
1322 "half" => 189,
1323 "hamilt" => 8459,
1324 "hardcy" => 1098,
1325 "harr" => 8596,
1326 "harrcir" => 10568,
1327 "harrw" => 8621,
1328 "hbar" => 8463,
1329 "hcirc" => 293,
1330 "hearts" => 9829,
1331 "heartsuit" => 9829,
1332 "hellip" => 8230,
1333 "hercon" => 8889,
1334 "hfr" => 120101,
1335 "hksearow" => 10533,
1336 "hkswarow" => 10534,
1337 "hoarr" => 8703,
1338 "homtht" => 8763,
1339 "hookleftarrow" => 8617,
1340 "hookrightarrow" => 8618,
1341 "hopf" => 120153,
1342 "horbar" => 8213,
1343 "hscr" => 119997,
1344 "hslash" => 8463,
1345 "hstrok" => 295,
1346 "hybull" => 8259,
1347 "hyphen" => 8208,
1348 "iacute" => 237,
1349 "ic" => 8291,
1350 "icirc" => 238,
1351 "icy" => 1080,
1352 "iecy" => 1077,
1353 "iexcl" => 161,
1354 "iff" => 8660,
1355 "ifr" => 120102,
1356 "igrave" => 236,
1357 "ii" => 8520,
1358 "iiiint" => 10764,
1359 "iiint" => 8749,
1360 "iinfin" => 10716,
1361 "iiota" => 8489,
1362 "ijlig" => 307,
1363 "imacr" => 299,
1364 "image" => 8465,
1365 "imagline" => 8464,
1366 "imagpart" => 8465,
1367 "imath" => 305,
1368 "imof" => 8887,
1369 "imped" => 437,
1370 "in" => 8712,
1371 "incare" => 8453,
1372 "infin" => 8734,
1373 "infintie" => 10717,
1374 "inodot" => 305,
1375 "int" => 8747,
1376 "intcal" => 8890,
1377 "integers" => 8484,
1378 "intercal" => 8890,
1379 "intlarhk" => 10775,
1380 "intprod" => 10812,
1381 "iocy" => 1105,
1382 "iogon" => 303,
1383 "iopf" => 120154,
1384 "iota" => 953,
1385 "iprod" => 10812,
1386 "iquest" => 191,
1387 "iscr" => 119998,
1388 "isin" => 8712,
1389 "isinE" => 8953,
1390 "isindot" => 8949,
1391 "isins" => 8948,
1392 "isinsv" => 8947,
1393 "isinv" => 8712,
1394 "it" => 8290,
1395 "itilde" => 297,
1396 "iukcy" => 1110,
1397 "iuml" => 239,
1398 "jcirc" => 309,
1399 "jcy" => 1081,
1400 "jfr" => 120103,
1401 "jmath" => 567,
1402 "jopf" => 120155,
1403 "jscr" => 119999,
1404 "jsercy" => 1112,
1405 "jukcy" => 1108,
1406 "kappa" => 954,
1407 "kappav" => 1008,
1408 "kcedil" => 311,
1409 "kcy" => 1082,
1410 "kfr" => 120104,
1411 "kgreen" => 312,
1412 "khcy" => 1093,
1413 "kjcy" => 1116,
1414 "kopf" => 120156,
1415 "kscr" => 120000,
1416 "lAarr" => 8666,
1417 "lArr" => 8656,
1418 "lAtail" => 10523,
1419 "lBarr" => 10510,
1420 "lE" => 8806,
1421 "lEg" => 10891,
1422 "lHar" => 10594,
1423 "lacute" => 314,
1424 "laemptyv" => 10676,
1425 "lagran" => 8466,
1426 "lambda" => 955,
1427 "lang" => 10216,
1428 "langd" => 10641,
1429 "langle" => 10216,
1430 "lap" => 10885,
1431 "laquo" => 171,
1432 "larr" => 8592,
1433 "larrb" => 8676,
1434 "larrbfs" => 10527,
1435 "larrfs" => 10525,
1436 "larrhk" => 8617,
1437 "larrlp" => 8619,
1438 "larrpl" => 10553,
1439 "larrsim" => 10611,
1440 "larrtl" => 8610,
1441 "lat" => 10923,
1442 "latail" => 10521,
1443 "late" => 10925,
1444 "lates" => 10925,
1445 "lbarr" => 10508,
1446 "lbbrk" => 10098,
1447 "lbrace" => 123,
1448 "lbrack" => 91,
1449 "lbrke" => 10635,
1450 "lbrksld" => 10639,
1451 "lbrkslu" => 10637,
1452 "lcaron" => 318,
1453 "lcedil" => 316,
1454 "lceil" => 8968,
1455 "lcub" => 123,
1456 "lcy" => 1083,
1457 "ldca" => 10550,
1458 "ldquo" => 8220,
1459 "ldquor" => 8222,
1460 "ldrdhar" => 10599,
1461 "ldrushar" => 10571,
1462 "ldsh" => 8626,
1463 "le" => 8804,
1464 "leftarrow" => 8592,
1465 "leftarrowtail" => 8610,
1466 "leftharpoondown" => 8637,
1467 "leftharpoonup" => 8636,
1468 "leftleftarrows" => 8647,
1469 "leftrightarrow" => 8596,
1470 "leftrightarrows" => 8646,
1471 "leftrightharpoons" => 8651,
1472 "leftrightsquigarrow" => 8621,
1473 "leftthreetimes" => 8907,
1474 "leg" => 8922,
1475 "leq" => 8804,
1476 "leqq" => 8806,
1477 "leqslant" => 10877,
1478 "les" => 10877,
1479 "lescc" => 10920,
1480 "lesdot" => 10879,
1481 "lesdoto" => 10881,
1482 "lesdotor" => 10883,
1483 "lesg" => 8922,
1484 "lesges" => 10899,
1485 "lessapprox" => 10885,
1486 "lessdot" => 8918,
1487 "lesseqgtr" => 8922,
1488 "lesseqqgtr" => 10891,
1489 "lessgtr" => 8822,
1490 "lesssim" => 8818,
1491 "lfisht" => 10620,
1492 "lfloor" => 8970,
1493 "lfr" => 120105,
1494 "lg" => 8822,
1495 "lgE" => 10897,
1496 "lhard" => 8637,
1497 "lharu" => 8636,
1498 "lharul" => 10602,
1499 "lhblk" => 9604,
1500 "ljcy" => 1113,
1501 "ll" => 8810,
1502 "llarr" => 8647,
1503 "llcorner" => 8990,
1504 "llhard" => 10603,
1505 "lltri" => 9722,
1506 "lmidot" => 320,
1507 "lmoust" => 9136,
1508 "lmoustache" => 9136,
1509 "lnE" => 8808,
1510 "lnap" => 10889,
1511 "lnapprox" => 10889,
1512 "lne" => 10887,
1513 "lneq" => 10887,
1514 "lneqq" => 8808,
1515 "lnsim" => 8934,
1516 "loang" => 10220,
1517 "loarr" => 8701,
1518 "lobrk" => 10214,
1519 "longleftarrow" => 10229,
1520 "longleftrightarrow" => 10231,
1521 "longmapsto" => 10236,
1522 "longrightarrow" => 10230,
1523 "looparrowleft" => 8619,
1524 "looparrowright" => 8620,
1525 "lopar" => 10629,
1526 "lopf" => 120157,
1527 "loplus" => 10797,
1528 "lotimes" => 10804,
1529 "lowast" => 8727,
1530 "lowbar" => 95,
1531 "loz" => 9674,
1532 "lozenge" => 9674,
1533 "lozf" => 10731,
1534 "lpar" => 40,
1535 "lparlt" => 10643,
1536 "lrarr" => 8646,
1537 "lrcorner" => 8991,
1538 "lrhar" => 8651,
1539 "lrhard" => 10605,
1540 "lrm" => 8206,
1541 "lrtri" => 8895,
1542 "lsaquo" => 8249,
1543 "lscr" => 120001,
1544 "lsh" => 8624,
1545 "lsim" => 8818,
1546 "lsime" => 10893,
1547 "lsimg" => 10895,
1548 "lsqb" => 91,
1549 "lsquo" => 8216,
1550 "lsquor" => 8218,
1551 "lstrok" => 322,
1552 "lt" => 60,
1553 "ltcc" => 10918,
1554 "ltcir" => 10873,
1555 "ltdot" => 8918,
1556 "lthree" => 8907,
1557 "ltimes" => 8905,
1558 "ltlarr" => 10614,
1559 "ltquest" => 10875,
1560 "ltrPar" => 10646,
1561 "ltri" => 9667,
1562 "ltrie" => 8884,
1563 "ltrif" => 9666,
1564 "lurdshar" => 10570,
1565 "luruhar" => 10598,
1566 "lvertneqq" => 8808,
1567 "lvnE" => 8808,
1568 "mDDot" => 8762,
1569 "macr" => 175,
1570 "male" => 9794,
1571 "malt" => 10016,
1572 "maltese" => 10016,
1573 "map" => 8614,
1574 "mapsto" => 8614,
1575 "mapstodown" => 8615,
1576 "mapstoleft" => 8612,
1577 "mapstoup" => 8613,
1578 "marker" => 9646,
1579 "mcomma" => 10793,
1580 "mcy" => 1084,
1581 "mdash" => 8212,
1582 "measuredangle" => 8737,
1583 "mfr" => 120106,
1584 "mho" => 8487,
1585 "micro" => 181,
1586 "mid" => 8739,
1587 "midast" => 42,
1588 "midcir" => 10992,
1589 "middot" => 183,
1590 "minus" => 8722,
1591 "minusb" => 8863,
1592 "minusd" => 8760,
1593 "minusdu" => 10794,
1594 "mlcp" => 10971,
1595 "mldr" => 8230,
1596 "mnplus" => 8723,
1597 "models" => 8871,
1598 "mopf" => 120158,
1599 "mp" => 8723,
1600 "mscr" => 120002,
1601 "mstpos" => 8766,
1602 "mu" => 956,
1603 "multimap" => 8888,
1604 "mumap" => 8888,
1605 "nGg" => 8921,
1606 "nGt" => 8811,
1607 "nGtv" => 8811,
1608 "nLeftarrow" => 8653,
1609 "nLeftrightarrow" => 8654,
1610 "nLl" => 8920,
1611 "nLt" => 8810,
1612 "nLtv" => 8810,
1613 "nRightarrow" => 8655,
1614 "nVDash" => 8879,
1615 "nVdash" => 8878,
1616 "nabla" => 8711,
1617 "nacute" => 324,
1618 "nang" => 8736,
1619 "nap" => 8777,
1620 "napE" => 10864,
1621 "napid" => 8779,
1622 "napos" => 329,
1623 "napprox" => 8777,
1624 "natur" => 9838,
1625 "natural" => 9838,
1626 "naturals" => 8469,
1627 "nbsp" => 160,
1628 "nbump" => 8782,
1629 "nbumpe" => 8783,
1630 "ncap" => 10819,
1631 "ncaron" => 328,
1632 "ncedil" => 326,
1633 "ncong" => 8775,
1634 "ncongdot" => 10861,
1635 "ncup" => 10818,
1636 "ncy" => 1085,
1637 "ndash" => 8211,
1638 "ne" => 8800,
1639 "neArr" => 8663,
1640 "nearhk" => 10532,
1641 "nearr" => 8599,
1642 "nearrow" => 8599,
1643 "nedot" => 8784,
1644 "nequiv" => 8802,
1645 "nesear" => 10536,
1646 "nesim" => 8770,
1647 "nexist" => 8708,
1648 "nexists" => 8708,
1649 "nfr" => 120107,
1650 "ngE" => 8807,
1651 "nge" => 8817,
1652 "ngeq" => 8817,
1653 "ngeqq" => 8807,
1654 "ngeqslant" => 10878,
1655 "nges" => 10878,
1656 "ngsim" => 8821,
1657 "ngt" => 8815,
1658 "ngtr" => 8815,
1659 "nhArr" => 8654,
1660 "nharr" => 8622,
1661 "nhpar" => 10994,
1662 "ni" => 8715,
1663 "nis" => 8956,
1664 "nisd" => 8954,
1665 "niv" => 8715,
1666 "njcy" => 1114,
1667 "nlArr" => 8653,
1668 "nlE" => 8806,
1669 "nlarr" => 8602,
1670 "nldr" => 8229,
1671 "nle" => 8816,
1672 "nleftarrow" => 8602,
1673 "nleftrightarrow" => 8622,
1674 "nleq" => 8816,
1675 "nleqq" => 8806,
1676 "nleqslant" => 10877,
1677 "nles" => 10877,
1678 "nless" => 8814,
1679 "nlsim" => 8820,
1680 "nlt" => 8814,
1681 "nltri" => 8938,
1682 "nltrie" => 8940,
1683 "nmid" => 8740,
1684 "nopf" => 120159,
1685 "not" => 172,
1686 "notin" => 8713,
1687 "notinE" => 8953,
1688 "notindot" => 8949,
1689 "notinva" => 8713,
1690 "notinvb" => 8951,
1691 "notinvc" => 8950,
1692 "notni" => 8716,
1693 "notniva" => 8716,
1694 "notnivb" => 8958,
1695 "notnivc" => 8957,
1696 "npar" => 8742,
1697 "nparallel" => 8742,
1698 "nparsl" => 11005,
1699 "npart" => 8706,
1700 "npolint" => 10772,
1701 "npr" => 8832,
1702 "nprcue" => 8928,
1703 "npre" => 10927,
1704 "nprec" => 8832,
1705 "npreceq" => 10927,
1706 "nrArr" => 8655,
1707 "nrarr" => 8603,
1708 "nrarrc" => 10547,
1709 "nrarrw" => 8605,
1710 "nrightarrow" => 8603,
1711 "nrtri" => 8939,
1712 "nrtrie" => 8941,
1713 "nsc" => 8833,
1714 "nsccue" => 8929,
1715 "nsce" => 10928,
1716 "nscr" => 120003,
1717 "nshortmid" => 8740,
1718 "nshortparallel" => 8742,
1719 "nsim" => 8769,
1720 "nsime" => 8772,
1721 "nsimeq" => 8772,
1722 "nsmid" => 8740,
1723 "nspar" => 8742,
1724 "nsqsube" => 8930,
1725 "nsqsupe" => 8931,
1726 "nsub" => 8836,
1727 "nsubE" => 10949,
1728 "nsube" => 8840,
1729 "nsubset" => 8834,
1730 "nsubseteq" => 8840,
1731 "nsubseteqq" => 10949,
1732 "nsucc" => 8833,
1733 "nsucceq" => 10928,
1734 "nsup" => 8837,
1735 "nsupE" => 10950,
1736 "nsupe" => 8841,
1737 "nsupset" => 8835,
1738 "nsupseteq" => 8841,
1739 "nsupseteqq" => 10950,
1740 "ntgl" => 8825,
1741 "ntilde" => 241,
1742 "ntlg" => 8824,
1743 "ntriangleleft" => 8938,
1744 "ntrianglelefteq" => 8940,
1745 "ntriangleright" => 8939,
1746 "ntrianglerighteq" => 8941,
1747 "nu" => 957,
1748 "num" => 35,
1749 "numero" => 8470,
1750 "numsp" => 8199,
1751 "nvDash" => 8877,
1752 "nvHarr" => 10500,
1753 "nvap" => 8781,
1754 "nvdash" => 8876,
1755 "nvge" => 8805,
1756 "nvgt" => 62,
1757 "nvinfin" => 10718,
1758 "nvlArr" => 10498,
1759 "nvle" => 8804,
1760 "nvlt" => 60,
1761 "nvltrie" => 8884,
1762 "nvrArr" => 10499,
1763 "nvrtrie" => 8885,
1764 "nvsim" => 8764,
1765 "nwArr" => 8662,
1766 "nwarhk" => 10531,
1767 "nwarr" => 8598,
1768 "nwarrow" => 8598,
1769 "nwnear" => 10535,
1770 "oS" => 9416,
1771 "oacute" => 243,
1772 "oast" => 8859,
1773 "ocir" => 8858,
1774 "ocirc" => 244,
1775 "ocy" => 1086,
1776 "odash" => 8861,
1777 "odblac" => 337,
1778 "odiv" => 10808,
1779 "odot" => 8857,
1780 "odsold" => 10684,
1781 "oelig" => 339,
1782 "ofcir" => 10687,
1783 "ofr" => 120108,
1784 "ogon" => 731,
1785 "ograve" => 242,
1786 "ogt" => 10689,
1787 "ohbar" => 10677,
1788 "ohm" => 937,
1789 "oint" => 8750,
1790 "olarr" => 8634,
1791 "olcir" => 10686,
1792 "olcross" => 10683,
1793 "oline" => 8254,
1794 "olt" => 10688,
1795 "omacr" => 333,
1796 "omega" => 969,
1797 "omicron" => 959,
1798 "omid" => 10678,
1799 "ominus" => 8854,
1800 "oopf" => 120160,
1801 "opar" => 10679,
1802 "operp" => 10681,
1803 "oplus" => 8853,
1804 "or" => 8744,
1805 "orarr" => 8635,
1806 "ord" => 10845,
1807 "order" => 8500,
1808 "orderof" => 8500,
1809 "ordf" => 170,
1810 "ordm" => 186,
1811 "origof" => 8886,
1812 "oror" => 10838,
1813 "orslope" => 10839,
1814 "orv" => 10843,
1815 "oscr" => 8500,
1816 "oslash" => 248,
1817 "osol" => 8856,
1818 "otilde" => 245,
1819 "otimes" => 8855,
1820 "otimesas" => 10806,
1821 "ouml" => 246,
1822 "ovbar" => 9021,
1823 "par" => 8741,
1824 "para" => 182,
1825 "parallel" => 8741,
1826 "parsim" => 10995,
1827 "parsl" => 11005,
1828 "part" => 8706,
1829 "pcy" => 1087,
1830 "percnt" => 37,
1831 "period" => 46,
1832 "permil" => 8240,
1833 "perp" => 8869,
1834 "pertenk" => 8241,
1835 "pfr" => 120109,
1836 "phi" => 966,
1837 "phiv" => 981,
1838 "phmmat" => 8499,
1839 "phone" => 9742,
1840 "pi" => 960,
1841 "pitchfork" => 8916,
1842 "piv" => 982,
1843 "planck" => 8463,
1844 "planckh" => 8462,
1845 "plankv" => 8463,
1846 "plus" => 43,
1847 "plusacir" => 10787,
1848 "plusb" => 8862,
1849 "pluscir" => 10786,
1850 "plusdo" => 8724,
1851 "plusdu" => 10789,
1852 "pluse" => 10866,
1853 "plusmn" => 177,
1854 "plussim" => 10790,
1855 "plustwo" => 10791,
1856 "pm" => 177,
1857 "pointint" => 10773,
1858 "popf" => 120161,
1859 "pound" => 163,
1860 "pr" => 8826,
1861 "prE" => 10931,
1862 "prap" => 10935,
1863 "prcue" => 8828,
1864 "pre" => 10927,
1865 "prec" => 8826,
1866 "precapprox" => 10935,
1867 "preccurlyeq" => 8828,
1868 "preceq" => 10927,
1869 "precnapprox" => 10937,
1870 "precneqq" => 10933,
1871 "precnsim" => 8936,
1872 "precsim" => 8830,
1873 "prime" => 8242,
1874 "primes" => 8473,
1875 "prnE" => 10933,
1876 "prnap" => 10937,
1877 "prnsim" => 8936,
1878 "prod" => 8719,
1879 "profalar" => 9006,
1880 "profline" => 8978,
1881 "profsurf" => 8979,
1882 "prop" => 8733,
1883 "propto" => 8733,
1884 "prsim" => 8830,
1885 "prurel" => 8880,
1886 "pscr" => 120005,
1887 "psi" => 968,
1888 "puncsp" => 8200,
1889 "qfr" => 120110,
1890 "qint" => 10764,
1891 "qopf" => 120162,
1892 "qprime" => 8279,
1893 "qscr" => 120006,
1894 "quaternions" => 8461,
1895 "quatint" => 10774,
1896 "quest" => 63,
1897 "questeq" => 8799,
1898 "quot" => 34,
1899 "rAarr" => 8667,
1900 "rArr" => 8658,
1901 "rAtail" => 10524,
1902 "rBarr" => 10511,
1903 "rHar" => 10596,
1904 "race" => 8765,
1905 "racute" => 341,
1906 "radic" => 8730,
1907 "raemptyv" => 10675,
1908 "rang" => 10217,
1909 "rangd" => 10642,
1910 "range" => 10661,
1911 "rangle" => 10217,
1912 "raquo" => 187,
1913 "rarr" => 8594,
1914 "rarrap" => 10613,
1915 "rarrb" => 8677,
1916 "rarrbfs" => 10528,
1917 "rarrc" => 10547,
1918 "rarrfs" => 10526,
1919 "rarrhk" => 8618,
1920 "rarrlp" => 8620,
1921 "rarrpl" => 10565,
1922 "rarrsim" => 10612,
1923 "rarrtl" => 8611,
1924 "rarrw" => 8605,
1925 "ratail" => 10522,
1926 "ratio" => 8758,
1927 "rationals" => 8474,
1928 "rbarr" => 10509,
1929 "rbbrk" => 10099,
1930 "rbrace" => 125,
1931 "rbrack" => 93,
1932 "rbrke" => 10636,
1933 "rbrksld" => 10638,
1934 "rbrkslu" => 10640,
1935 "rcaron" => 345,
1936 "rcedil" => 343,
1937 "rceil" => 8969,
1938 "rcub" => 125,
1939 "rcy" => 1088,
1940 "rdca" => 10551,
1941 "rdldhar" => 10601,
1942 "rdquo" => 8221,
1943 "rdquor" => 8221,
1944 "rdsh" => 8627,
1945 "real" => 8476,
1946 "realine" => 8475,
1947 "realpart" => 8476,
1948 "reals" => 8477,
1949 "rect" => 9645,
1950 "reg" => 174,
1951 "rfisht" => 10621,
1952 "rfloor" => 8971,
1953 "rfr" => 120111,
1954 "rhard" => 8641,
1955 "rharu" => 8640,
1956 "rharul" => 10604,
1957 "rho" => 961,
1958 "rhov" => 1009,
1959 "rightarrow" => 8594,
1960 "rightarrowtail" => 8611,
1961 "rightharpoondown" => 8641,
1962 "rightharpoonup" => 8640,
1963 "rightleftarrows" => 8644,
1964 "rightleftharpoons" => 8652,
1965 "rightrightarrows" => 8649,
1966 "rightsquigarrow" => 8605,
1967 "rightthreetimes" => 8908,
1968 "ring" => 730,
1969 "risingdotseq" => 8787,
1970 "rlarr" => 8644,
1971 "rlhar" => 8652,
1972 "rlm" => 8207,
1973 "rmoust" => 9137,
1974 "rmoustache" => 9137,
1975 "rnmid" => 10990,
1976 "roang" => 10221,
1977 "roarr" => 8702,
1978 "robrk" => 10215,
1979 "ropar" => 10630,
1980 "ropf" => 120163,
1981 "roplus" => 10798,
1982 "rotimes" => 10805,
1983 "rpar" => 41,
1984 "rpargt" => 10644,
1985 "rppolint" => 10770,
1986 "rrarr" => 8649,
1987 "rsaquo" => 8250,
1988 "rscr" => 120007,
1989 "rsh" => 8625,
1990 "rsqb" => 93,
1991 "rsquo" => 8217,
1992 "rsquor" => 8217,
1993 "rthree" => 8908,
1994 "rtimes" => 8906,
1995 "rtri" => 9657,
1996 "rtrie" => 8885,
1997 "rtrif" => 9656,
1998 "rtriltri" => 10702,
1999 "ruluhar" => 10600,
2000 "rx" => 8478,
2001 "sacute" => 347,
2002 "sbquo" => 8218,
2003 "sc" => 8827,
2004 "scE" => 10932,
2005 "scap" => 10936,
2006 "scaron" => 353,
2007 "sccue" => 8829,
2008 "sce" => 10928,
2009 "scedil" => 351,
2010 "scirc" => 349,
2011 "scnE" => 10934,
2012 "scnap" => 10938,
2013 "scnsim" => 8937,
2014 "scpolint" => 10771,
2015 "scsim" => 8831,
2016 "scy" => 1089,
2017 "sdot" => 8901,
2018 "sdotb" => 8865,
2019 "sdote" => 10854,
2020 "seArr" => 8664,
2021 "searhk" => 10533,
2022 "searr" => 8600,
2023 "searrow" => 8600,
2024 "sect" => 167,
2025 "semi" => 59,
2026 "seswar" => 10537,
2027 "setminus" => 8726,
2028 "setmn" => 8726,
2029 "sext" => 10038,
2030 "sfr" => 120112,
2031 "sfrown" => 8994,
2032 "sharp" => 9839,
2033 "shchcy" => 1097,
2034 "shcy" => 1096,
2035 "shortmid" => 8739,
2036 "shortparallel" => 8741,
2037 "shy" => 173,
2038 "sigma" => 963,
2039 "sigmaf" => 962,
2040 "sigmav" => 962,
2041 "sim" => 8764,
2042 "simdot" => 10858,
2043 "sime" => 8771,
2044 "simeq" => 8771,
2045 "simg" => 10910,
2046 "simgE" => 10912,
2047 "siml" => 10909,
2048 "simlE" => 10911,
2049 "simne" => 8774,
2050 "simplus" => 10788,
2051 "simrarr" => 10610,
2052 "slarr" => 8592,
2053 "smallsetminus" => 8726,
2054 "smashp" => 10803,
2055 "smeparsl" => 10724,
2056 "smid" => 8739,
2057 "smile" => 8995,
2058 "smt" => 10922,
2059 "smte" => 10924,
2060 "smtes" => 10924,
2061 "softcy" => 1100,
2062 "sol" => 47,
2063 "solb" => 10692,
2064 "solbar" => 9023,
2065 "sopf" => 120164,
2066 "spades" => 9824,
2067 "spadesuit" => 9824,
2068 "spar" => 8741,
2069 "sqcap" => 8851,
2070 "sqcaps" => 8851,
2071 "sqcup" => 8852,
2072 "sqcups" => 8852,
2073 "sqsub" => 8847,
2074 "sqsube" => 8849,
2075 "sqsubset" => 8847,
2076 "sqsubseteq" => 8849,
2077 "sqsup" => 8848,
2078 "sqsupe" => 8850,
2079 "sqsupset" => 8848,
2080 "sqsupseteq" => 8850,
2081 "squ" => 9633,
2082 "square" => 9633,
2083 "squarf" => 9642,
2084 "squf" => 9642,
2085 "srarr" => 8594,
2086 "sscr" => 120008,
2087 "ssetmn" => 8726,
2088 "ssmile" => 8995,
2089 "sstarf" => 8902,
2090 "star" => 9734,
2091 "starf" => 9733,
2092 "straightepsilon" => 1013,
2093 "straightphi" => 981,
2094 "strns" => 175,
2095 "sub" => 8834,
2096 "subE" => 10949,
2097 "subdot" => 10941,
2098 "sube" => 8838,
2099 "subedot" => 10947,
2100 "submult" => 10945,
2101 "subnE" => 10955,
2102 "subne" => 8842,
2103 "subplus" => 10943,
2104 "subrarr" => 10617,
2105 "subset" => 8834,
2106 "subseteq" => 8838,
2107 "subseteqq" => 10949,
2108 "subsetneq" => 8842,
2109 "subsetneqq" => 10955,
2110 "subsim" => 10951,
2111 "subsub" => 10965,
2112 "subsup" => 10963,
2113 "succ" => 8827,
2114 "succapprox" => 10936,
2115 "succcurlyeq" => 8829,
2116 "succeq" => 10928,
2117 "succnapprox" => 10938,
2118 "succneqq" => 10934,
2119 "succnsim" => 8937,
2120 "succsim" => 8831,
2121 "sum" => 8721,
2122 "sung" => 9834,
2123 "sup" => 8835,
2124 "sup1" => 185,
2125 "sup2" => 178,
2126 "sup3" => 179,
2127 "supE" => 10950,
2128 "supdot" => 10942,
2129 "supdsub" => 10968,
2130 "supe" => 8839,
2131 "supedot" => 10948,
2132 "suphsol" => 10185,
2133 "suphsub" => 10967,
2134 "suplarr" => 10619,
2135 "supmult" => 10946,
2136 "supnE" => 10956,
2137 "supne" => 8843,
2138 "supplus" => 10944,
2139 "supset" => 8835,
2140 "supseteq" => 8839,
2141 "supseteqq" => 10950,
2142 "supsetneq" => 8843,
2143 "supsetneqq" => 10956,
2144 "supsim" => 10952,
2145 "supsub" => 10964,
2146 "supsup" => 10966,
2147 "swArr" => 8665,
2148 "swarhk" => 10534,
2149 "swarr" => 8601,
2150 "swarrow" => 8601,
2151 "swnwar" => 10538,
2152 "szlig" => 223,
2153 "target" => 8982,
2154 "tau" => 964,
2155 "tbrk" => 9140,
2156 "tcaron" => 357,
2157 "tcedil" => 355,
2158 "tcy" => 1090,
2159 "tdot" => 8411,
2160 "telrec" => 8981,
2161 "tfr" => 120113,
2162 "there4" => 8756,
2163 "therefore" => 8756,
2164 "theta" => 952,
2165 "thetasym" => 977,
2166 "thetav" => 977,
2167 "thickapprox" => 8776,
2168 "thicksim" => 8764,
2169 "thinsp" => 8201,
2170 "thkap" => 8776,
2171 "thksim" => 8764,
2172 "thorn" => 254,
2173 "tilde" => 732,
2174 "times" => 215,
2175 "timesb" => 8864,
2176 "timesbar" => 10801,
2177 "timesd" => 10800,
2178 "tint" => 8749,
2179 "toea" => 10536,
2180 "top" => 8868,
2181 "topbot" => 9014,
2182 "topcir" => 10993,
2183 "topf" => 120165,
2184 "topfork" => 10970,
2185 "tosa" => 10537,
2186 "tprime" => 8244,
2187 "trade" => 8482,
2188 "triangle" => 9653,
2189 "triangledown" => 9663,
2190 "triangleleft" => 9667,
2191 "trianglelefteq" => 8884,
2192 "triangleq" => 8796,
2193 "triangleright" => 9657,
2194 "trianglerighteq" => 8885,
2195 "tridot" => 9708,
2196 "trie" => 8796,
2197 "triminus" => 10810,
2198 "triplus" => 10809,
2199 "trisb" => 10701,
2200 "tritime" => 10811,
2201 "trpezium" => 9186,
2202 "tscr" => 120009,
2203 "tscy" => 1094,
2204 "tshcy" => 1115,
2205 "tstrok" => 359,
2206 "twixt" => 8812,
2207 "twoheadleftarrow" => 8606,
2208 "twoheadrightarrow" => 8608,
2209 "uArr" => 8657,
2210 "uHar" => 10595,
2211 "uacute" => 250,
2212 "uarr" => 8593,
2213 "ubrcy" => 1118,
2214 "ubreve" => 365,
2215 "ucirc" => 251,
2216 "ucy" => 1091,
2217 "udarr" => 8645,
2218 "udblac" => 369,
2219 "udhar" => 10606,
2220 "ufisht" => 10622,
2221 "ufr" => 120114,
2222 "ugrave" => 249,
2223 "uharl" => 8639,
2224 "uharr" => 8638,
2225 "uhblk" => 9600,
2226 "ulcorn" => 8988,
2227 "ulcorner" => 8988,
2228 "ulcrop" => 8975,
2229 "ultri" => 9720,
2230 "umacr" => 363,
2231 "uml" => 168,
2232 "uogon" => 371,
2233 "uopf" => 120166,
2234 "uparrow" => 8593,
2235 "updownarrow" => 8597,
2236 "upharpoonleft" => 8639,
2237 "upharpoonright" => 8638,
2238 "uplus" => 8846,
2239 "upsi" => 965,
2240 "upsih" => 978,
2241 "upsilon" => 965,
2242 "upuparrows" => 8648,
2243 "urcorn" => 8989,
2244 "urcorner" => 8989,
2245 "urcrop" => 8974,
2246 "uring" => 367,
2247 "urtri" => 9721,
2248 "uscr" => 120010,
2249 "utdot" => 8944,
2250 "utilde" => 361,
2251 "utri" => 9653,
2252 "utrif" => 9652,
2253 "uuarr" => 8648,
2254 "uuml" => 252,
2255 "uwangle" => 10663,
2256 "vArr" => 8661,
2257 "vBar" => 10984,
2258 "vBarv" => 10985,
2259 "vDash" => 8872,
2260 "vangrt" => 10652,
2261 "varepsilon" => 1013,
2262 "varkappa" => 1008,
2263 "varnothing" => 8709,
2264 "varphi" => 981,
2265 "varpi" => 982,
2266 "varpropto" => 8733,
2267 "varr" => 8597,
2268 "varrho" => 1009,
2269 "varsigma" => 962,
2270 "varsubsetneq" => 8842,
2271 "varsubsetneqq" => 10955,
2272 "varsupsetneq" => 8843,
2273 "varsupsetneqq" => 10956,
2274 "vartheta" => 977,
2275 "vartriangleleft" => 8882,
2276 "vartriangleright" => 8883,
2277 "vcy" => 1074,
2278 "vdash" => 8866,
2279 "vee" => 8744,
2280 "veebar" => 8891,
2281 "veeeq" => 8794,
2282 "vellip" => 8942,
2283 "verbar" => 124,
2284 "vert" => 124,
2285 "vfr" => 120115,
2286 "vltri" => 8882,
2287 "vnsub" => 8834,
2288 "vnsup" => 8835,
2289 "vopf" => 120167,
2290 "vprop" => 8733,
2291 "vrtri" => 8883,
2292 "vscr" => 120011,
2293 "vsubnE" => 10955,
2294 "vsubne" => 8842,
2295 "vsupnE" => 10956,
2296 "vsupne" => 8843,
2297 "vzigzag" => 10650,
2298 "wcirc" => 373,
2299 "wedbar" => 10847,
2300 "wedge" => 8743,
2301 "wedgeq" => 8793,
2302 "weierp" => 8472,
2303 "wfr" => 120116,
2304 "wopf" => 120168,
2305 "wp" => 8472,
2306 "wr" => 8768,
2307 "wreath" => 8768,
2308 "wscr" => 120012,
2309 "xcap" => 8898,
2310 "xcirc" => 9711,
2311 "xcup" => 8899,
2312 "xdtri" => 9661,
2313 "xfr" => 120117,
2314 "xhArr" => 10234,
2315 "xharr" => 10231,
2316 "xi" => 958,
2317 "xlArr" => 10232,
2318 "xlarr" => 10229,
2319 "xmap" => 10236,
2320 "xnis" => 8955,
2321 "xodot" => 10752,
2322 "xopf" => 120169,
2323 "xoplus" => 10753,
2324 "xotime" => 10754,
2325 "xrArr" => 10233,
2326 "xrarr" => 10230,
2327 "xscr" => 120013,
2328 "xsqcup" => 10758,
2329 "xuplus" => 10756,
2330 "xutri" => 9651,
2331 "xvee" => 8897,
2332 "xwedge" => 8896,
2333 "yacute" => 253,
2334 "yacy" => 1103,
2335 "ycirc" => 375,
2336 "ycy" => 1099,
2337 "yen" => 165,
2338 "yfr" => 120118,
2339 "yicy" => 1111,
2340 "yopf" => 120170,
2341 "yscr" => 120014,
2342 "yucy" => 1102,
2343 "yuml" => 255,
2344 "zacute" => 378,
2345 "zcaron" => 382,
2346 "zcy" => 1079,
2347 "zdot" => 380,
2348 "zeetrf" => 8488,
2349 "zeta" => 950,
2350 "zfr" => 120119,
2351 "zhcy" => 1078,
2352 "zigrarr" => 8669,
2353 "zopf" => 120171,
2354 "zscr" => 120015,
2355 "zwj" => 8205,
2356 "zwnj" => 8204,
2357 }
2358}
2359
2360#[cfg(test)]
2361mod tests {
2362
2363 use crate::decoders::html::{add_html_token, html_to_text, text_to_html};
2364
2365 #[test]
2366 fn convert_text_to_html() {
2367 let inputs = [
2368 (
2369 "hello\nworld\n",
2370 "<html><body>hello<br/>world<br/></body></html>",
2371 ),
2372 ("using <>\n", "<html><body>using <><br/></body></html>"),
2373 ];
2374
2375 for input in inputs {
2376 assert_eq!(text_to_html(input.0), input.1);
2377 }
2378 }
2379
2380 #[test]
2381 fn convert_html_to_text() {
2382 let inputs = [
2383 ("<html>hello<br/>world<br/></html>", "hello\nworld\n"),
2384 ("<html>using <><br/></html>", "using <>\n"),
2385 ("test <not br/>tag<br />", "test tag\n"),
2386 ("<>< ><tag\n/>>hello world< br \n />", ">hello world\n"),
2387 (
2388 concat!(
2389 "<head><title>ignore head</title><not head>xyz</not head></head>",
2390 "<h1><body></h1>"
2391 ),
2392 "<body>",
2393 ),
2394 (
2395 concat!(
2396 "<p>what is ♥?</p><p>ßĂΒγ ",
2397 "don't hurt me.</p>"
2398 ),
2399 "what is ♥?\nßĂΒγ don't hurt me.\n",
2400 ),
2401 (
2402 concat!(
2403 "<!--[if mso]><style type=\"text/css\">body, table, td, a, p, ",
2404 "span, ul, li {font-family: Arial, sans-serif!important;}</style><![endif]-->",
2405 "this is <!-- <> < < < < ignore > -> here -->the actual<!--> text"
2406 ),
2407 "this is the actual text",
2408 ),
2409 (
2410 " < p > hello < / p > < p > world < / p > !!! < br > ",
2411 "hello\nworld\n!!!\n",
2412 ),
2413 (
2414 " <p>please unsubscribe <a href=#>here</a>.</p> ",
2415 "please unsubscribe here.\n",
2416 ),
2417 ];
2418
2419 for input in inputs {
2420 assert_eq!(html_to_text(input.0), input.1, "Failed for '{:?}'", input.0);
2421 }
2422 }
2423
2424 #[test]
2425 fn convert_html_entity() {
2426 let inputs = [
2427 ("<", "<"),
2428 (" ", " "),
2429 (" ", " "),
2430 (" ", "\u{a0}"),
2431 ("∳", "∳"),
2432 ("↷", "↷"),
2433 ("→", "→"),
2434 ("�", "�"),
2435 ("&hmmm", "&hmmm"),
2436 ];
2437
2438 for input in inputs {
2439 let mut result = String::with_capacity(input.0.len());
2440 add_html_token(&mut result, input.0.as_bytes(), false);
2441 assert_eq!(result, input.1, "Failed for '{:?}", input.0);
2442 }
2443 }
2444
2445 #[test]
2446 fn html_to_text_removes_style_content() {
2447 let input = "<style>body{color:red}</style><div>Hello</div>";
2448 let output = html_to_text(input);
2449 assert!(!output.contains("body{color:red}"));
2450 assert!(output.contains("Hello"));
2451 }
2452
2453 #[test]
2454 fn html_to_text_removes_script_content() {
2455 let input = concat!(
2456 "<style>body{color:red}</style>",
2457 "<div>Hello</div>",
2458 "<script>alert('x')</script>",
2459 "<div>World</div>"
2460 );
2461 let output = html_to_text(input);
2462 assert!(!output.contains("body{color:red}"));
2463 assert!(!output.contains("alert('x')"));
2464 assert!(output.contains("Hello"));
2465 assert!(output.contains("World"));
2466 }
2467
2468 #[test]
2469 fn html_to_text_removes_template_content() {
2470 let input = concat!(
2471 "<div>Hello</div>",
2472 "<template><div>Hidden</div><style>.x{}</style></template>",
2473 "<div>World</div>"
2474 );
2475 let output = html_to_text(input);
2476 assert!(!output.contains("Hidden"));
2477 assert!(!output.contains(".x{}"));
2478 assert!(output.contains("Hello"));
2479 assert!(output.contains("World"));
2480 }
2481}