Tholp's bespoke website generator

Add list of reserved names to cut down on nothingburger warnings

+2191 -23
+29 -11
src/macros/template.rs
··· 1 1 use crate::{ 2 2 console::error_skid, 3 3 project::ProjectContext, 4 + reservednames::{RESERVED_NAMES_HTML, RESERVED_NAMES_MISC}, 4 5 stringtools::{find_pattern, split_to_tokens, WhitespaceChecks}, 5 6 types::{InputFile, Token}, 6 7 }; ··· 43 44 //println!("{:?}", args); 44 45 45 46 if !self.allows_trailing_args && args.len() != self.args.len() { 46 - // println!( 47 - // "[ERROR] {:?}:{}; Template \"{}\" requires exactly {} arguments, got given {} ({:?})", 48 - // context.file_for_index(origin_index).unwrap(), 49 - // origin_line, 50 - // self.symbol, 51 - // self.args.len(), 52 - // args.len(), 53 - // args 54 - // ); 55 - // exit(1); 56 - 57 47 error_skid( 58 48 context, 59 49 origin_index, ··· 167 157 &format!( 168 158 "Attempted to make a template using a reserved name \"{}\"", 169 159 args[0] 160 + ), 161 + ); 162 + } 163 + } 164 + 165 + for r in RESERVED_NAMES_HTML { 166 + if **r == args[0] { 167 + error_skid( 168 + context, 169 + origin_index, 170 + origin_line, 171 + &format!( 172 + "Attempted to make a template using a reserved name \"{}\"", 173 + r 174 + ), 175 + ); 176 + } 177 + } 178 + 179 + for r in RESERVED_NAMES_MISC { 180 + if **r == args[0] { 181 + error_skid( 182 + context, 183 + origin_index, 184 + origin_line, 185 + &format!( 186 + "Attempted to make a template using a reserved name \"{}\"", 187 + r 170 188 ), 171 189 ); 172 190 }
+41 -12
src/main.rs
··· 2 2 mod console; 3 3 mod macros; 4 4 mod project; 5 + mod reservednames; 5 6 mod stringtools; 6 7 mod types; 7 8 9 + use crate::{ 10 + args::ProgramArgs, project::FileGroup, reservednames::RESERVED_NAMES_MISC, types::Expand, 11 + }; 8 12 use clap::Parser; 9 13 use console::*; 10 14 use macros::MACRO_LIST; 11 15 use markdown::{CompileOptions, Constructs, Options, ParseOptions}; 12 16 use project::{parse_project, FileIndexing, ProjectContext}; 17 + use reservednames::RESERVED_NAMES_HTML; 13 18 use std::{ 14 19 env, 15 20 fs::{self}, ··· 17 22 }; 18 23 use stringtools::{collect_arguments, collect_block, split_to_tokens, trim_whitespace_tokens}; 19 24 use types::{InputFile, Token}; 20 - 21 - use crate::{args::ProgramArgs, types::Expand}; 22 25 23 26 static DELIMITERS: &'static [char] = &[ 24 27 ' ', '\n', '\t', '(', ')', '{', '}', '[', ']', '<', '>', '\\', '\'', '\"', ';', ··· 251 254 } 252 255 } 253 256 if !matched_macro { 254 - warn_skid( 255 - context, 256 - file.tokens[file.working_index].origin_file, 257 - file.tokens[file.working_index].line_number, 258 - &format!( 259 - "Token written as a function but no such function exists \"{}\"", 260 - file.tokens[file.working_index].contents.trim() 261 - ), 262 - ); 257 + let name = file.tokens[file.working_index] 258 + .contents 259 + .trim() 260 + .to_lowercase(); 261 + let mut dont_error = name.len() <= 1; 262 + { 263 + if !dont_error && convert_html { 264 + for reserved in RESERVED_NAMES_HTML { 265 + if name[1..].starts_with(reserved) { 266 + dont_error = true; 267 + break; 268 + } 269 + } 270 + } 271 + 272 + if !dont_error { 273 + for reserved in RESERVED_NAMES_MISC { 274 + if name[1..].starts_with(reserved) { 275 + dont_error = true; 276 + break; 277 + } 278 + } 279 + } 280 + } 281 + if !dont_error { 282 + warn_skid( 283 + context, 284 + file.tokens[file.working_index].origin_file, 285 + file.tokens[file.working_index].line_number, 286 + &format!( 287 + "Token written as a function but no such function exists \"{}\"", 288 + file.tokens[file.working_index].contents.trim() 289 + ), 290 + ); 291 + } 263 292 } 264 293 } 265 294 if !matched_macro { ··· 311 340 fs::write(&file.file_out, &skid_output).expect("Couldn't write output to file"); 312 341 } 313 342 ok_generic(&format!( 314 - "{} written \n\n", 343 + "{} written", 315 344 file.file_out 316 345 .to_str() 317 346 .unwrap_or("Couldnt Unwrap file_out name")
+2121
src/reservednames.rs
··· 1 + // Ignored when parsing macros, not allowed when making templates 2 + 3 + // JS stuff 4 + pub static RESERVED_NAMES_MISC: &'static [&'static str] = &["=", "==", "&"]; 5 + 6 + // HTML enties and things 7 + pub static RESERVED_NAMES_HTML: &'static [&'static str] = &[ 8 + "--", 9 + "aelig", 10 + "amp", 11 + "aacute", 12 + "abreve", 13 + "acirc", 14 + "acy", 15 + "afr", 16 + "agrave", 17 + "alpha", 18 + "amacr", 19 + "and", 20 + "aogon", 21 + "aopf", 22 + "applyfunction", 23 + "aring", 24 + "ascr", 25 + "assign", 26 + "atilde", 27 + "auml", 28 + "backslash", 29 + "barv", 30 + "barwed", 31 + "bcy", 32 + "because", 33 + "bernoullis", 34 + "beta", 35 + "bfr", 36 + "bopf", 37 + "breve", 38 + "bscr", 39 + "bumpeq", 40 + "chcy", 41 + "copy", 42 + "cacute", 43 + "cap", 44 + "capitaldifferentiald", 45 + "cayleys", 46 + "ccaron", 47 + "ccedil", 48 + "ccirc", 49 + "cconint", 50 + "cdot", 51 + "cedilla", 52 + "centerdot", 53 + "cfr", 54 + "chi", 55 + "circledot", 56 + "circleminus", 57 + "circleplus", 58 + "circletimes", 59 + "clockwisecontourintegral", 60 + "closecurlydoublequote", 61 + "closecurlyquote", 62 + "colon", 63 + "colone", 64 + "congruent", 65 + "conint", 66 + "contourintegral", 67 + "copf", 68 + "coproduct", 69 + "counterclockwisecontourintegral", 70 + "cross", 71 + "cscr", 72 + "cup", 73 + "cupcap", 74 + "dd", 75 + "ddotrahd", 76 + "djcy", 77 + "dscy", 78 + "dzcy", 79 + "dagger", 80 + "darr", 81 + "dashv", 82 + "dcaron", 83 + "dcy", 84 + "del", 85 + "delta", 86 + "dfr", 87 + "diacriticalacute", 88 + "diacriticaldot", 89 + "diacriticaldoubleacute", 90 + "diacriticalgrave", 91 + "diacriticaltilde", 92 + "diamond", 93 + "differentiald", 94 + "doctype", 95 + "dopf", 96 + "dot", 97 + "dotdot", 98 + "dotequal", 99 + "doublecontourintegral", 100 + "doubledot", 101 + "doubledownarrow", 102 + "doubleleftarrow", 103 + "doubleleftrightarrow", 104 + "doublelefttee", 105 + "doublelongleftarrow", 106 + "doublelongleftrightarrow", 107 + "doublelongrightarrow", 108 + "doublerightarrow", 109 + "doublerighttee", 110 + "doubleuparrow", 111 + "doubleupdownarrow", 112 + "doubleverticalbar", 113 + "downarrow", 114 + "downarrowbar", 115 + "downarrowuparrow", 116 + "downbreve", 117 + "downleftrightvector", 118 + "downleftteevector", 119 + "downleftvector", 120 + "downleftvectorbar", 121 + "downrightteevector", 122 + "downrightvector", 123 + "downrightvectorbar", 124 + "downtee", 125 + "downteearrow", 126 + "downarrow", 127 + "dscr", 128 + "dstrok", 129 + "eng", 130 + "eth", 131 + "eacute", 132 + "ecaron", 133 + "ecirc", 134 + "ecy", 135 + "edot", 136 + "efr", 137 + "egrave", 138 + "element", 139 + "emacr", 140 + "emptysmallsquare", 141 + "emptyverysmallsquare", 142 + "eogon", 143 + "eopf", 144 + "epsilon", 145 + "equal", 146 + "equaltilde", 147 + "equilibrium", 148 + "escr", 149 + "esim", 150 + "eta", 151 + "euml", 152 + "exists", 153 + "exponentiale", 154 + "fcy", 155 + "ffr", 156 + "filledsmallsquare", 157 + "filledverysmallsquare", 158 + "fopf", 159 + "forall", 160 + "fouriertrf", 161 + "fscr", 162 + "gjcy", 163 + "gt", 164 + "gamma", 165 + "gammad", 166 + "gbreve", 167 + "gcedil", 168 + "gcirc", 169 + "gcy", 170 + "gdot", 171 + "gfr", 172 + "gg", 173 + "gopf", 174 + "greaterequal", 175 + "greaterequalless", 176 + "greaterfullequal", 177 + "greatergreater", 178 + "greaterless", 179 + "greaterslantequal", 180 + "greatertilde", 181 + "gscr", 182 + "gt", 183 + "hardcy", 184 + "hacek", 185 + "hat", 186 + "hcirc", 187 + "hfr", 188 + "hilbertspace", 189 + "hopf", 190 + "horizontalline", 191 + "hscr", 192 + "hstrok", 193 + "humpdownhump", 194 + "humpequal", 195 + "iecy", 196 + "ijlig", 197 + "iocy", 198 + "iacute", 199 + "icirc", 200 + "icy", 201 + "idot", 202 + "ifr", 203 + "igrave", 204 + "im", 205 + "imacr", 206 + "imaginaryi", 207 + "implies", 208 + "int", 209 + "integral", 210 + "intersection", 211 + "invisiblecomma", 212 + "invisibletimes", 213 + "iogon", 214 + "iopf", 215 + "iota", 216 + "iscr", 217 + "itilde", 218 + "iukcy", 219 + "iuml", 220 + "jcirc", 221 + "jcy", 222 + "jfr", 223 + "jopf", 224 + "jscr", 225 + "jsercy", 226 + "jukcy", 227 + "khcy", 228 + "kjcy", 229 + "kappa", 230 + "kcedil", 231 + "kcy", 232 + "kfr", 233 + "kopf", 234 + "kscr", 235 + "ljcy", 236 + "lt", 237 + "lacute", 238 + "lambda", 239 + "lang", 240 + "laplacetrf", 241 + "larr", 242 + "lcaron", 243 + "lcedil", 244 + "lcy", 245 + "leftanglebracket", 246 + "leftarrow", 247 + "leftarrowbar", 248 + "leftarrowrightarrow", 249 + "leftceiling", 250 + "leftdoublebracket", 251 + "leftdownteevector", 252 + "leftdownvector", 253 + "leftdownvectorbar", 254 + "leftfloor", 255 + "leftrightarrow", 256 + "leftrightvector", 257 + "lefttee", 258 + "leftteearrow", 259 + "leftteevector", 260 + "lefttriangle", 261 + "lefttrianglebar", 262 + "lefttriangleequal", 263 + "leftupdownvector", 264 + "leftupteevector", 265 + "leftupvector", 266 + "leftupvectorbar", 267 + "leftvector", 268 + "leftvectorbar", 269 + "leftarrow", 270 + "leftrightarrow", 271 + "lessequalgreater", 272 + "lessfullequal", 273 + "lessgreater", 274 + "lessless", 275 + "lessslantequal", 276 + "lesstilde", 277 + "lfr", 278 + "ll", 279 + "lleftarrow", 280 + "lmidot", 281 + "longleftarrow", 282 + "longleftrightarrow", 283 + "longrightarrow", 284 + "longleftarrow", 285 + "longleftrightarrow", 286 + "longrightarrow", 287 + "lopf", 288 + "lowerleftarrow", 289 + "lowerrightarrow", 290 + "lscr", 291 + "lsh", 292 + "lstrok", 293 + "lt", 294 + "map", 295 + "mcy", 296 + "mediumspace", 297 + "mellintrf", 298 + "mfr", 299 + "minusplus", 300 + "mopf", 301 + "mscr", 302 + "mu", 303 + "njcy", 304 + "nacute", 305 + "ncaron", 306 + "ncedil", 307 + "ncy", 308 + "negativemediumspace", 309 + "negativethickspace", 310 + "negativethinspace", 311 + "negativeverythinspace", 312 + "nestedgreatergreater", 313 + "nestedlessless", 314 + "newline", 315 + "nfr", 316 + "nobreak", 317 + "nonbreakingspace", 318 + "nopf", 319 + "not", 320 + "notcongruent", 321 + "notcupcap", 322 + "notdoubleverticalbar", 323 + "notelement", 324 + "notequal", 325 + "notequaltilde", 326 + "notexists", 327 + "notgreater", 328 + "notgreaterequal", 329 + "notgreaterfullequal", 330 + "notgreatergreater", 331 + "notgreaterless", 332 + "notgreaterslantequal", 333 + "notgreatertilde", 334 + "nothumpdownhump", 335 + "nothumpequal", 336 + "notlefttriangle", 337 + "notlefttrianglebar", 338 + "notlefttriangleequal", 339 + "notless", 340 + "notlessequal", 341 + "notlessgreater", 342 + "notlessless", 343 + "notlessslantequal", 344 + "notlesstilde", 345 + "notnestedgreatergreater", 346 + "notnestedlessless", 347 + "notprecedes", 348 + "notprecedesequal", 349 + "notprecedesslantequal", 350 + "notreverseelement", 351 + "notrighttriangle", 352 + "notrighttrianglebar", 353 + "notrighttriangleequal", 354 + "notsquaresubset", 355 + "notsquaresubsetequal", 356 + "notsquaresuperset", 357 + "notsquaresupersetequal", 358 + "notsubset", 359 + "notsubsetequal", 360 + "notsucceeds", 361 + "notsucceedsequal", 362 + "notsucceedsslantequal", 363 + "notsucceedstilde", 364 + "notsuperset", 365 + "notsupersetequal", 366 + "nottilde", 367 + "nottildeequal", 368 + "nottildefullequal", 369 + "nottildetilde", 370 + "notverticalbar", 371 + "nscr", 372 + "ntilde", 373 + "nu", 374 + "oelig", 375 + "oacute", 376 + "ocirc", 377 + "ocy", 378 + "odblac", 379 + "ofr", 380 + "ograve", 381 + "omacr", 382 + "omega", 383 + "omicron", 384 + "oopf", 385 + "opencurlydoublequote", 386 + "opencurlyquote", 387 + "or", 388 + "oscr", 389 + "oslash", 390 + "otilde", 391 + "otimes", 392 + "ouml", 393 + "overbar", 394 + "overbrace", 395 + "overbracket", 396 + "overparenthesis", 397 + "partiald", 398 + "pcy", 399 + "pfr", 400 + "phi", 401 + "pi", 402 + "plusminus", 403 + "poincareplane", 404 + "popf", 405 + "pr", 406 + "precedes", 407 + "precedesequal", 408 + "precedesslantequal", 409 + "precedestilde", 410 + "prime", 411 + "product", 412 + "proportion", 413 + "proportional", 414 + "pscr", 415 + "psi", 416 + "quot", 417 + "qfr", 418 + "qopf", 419 + "qscr", 420 + "rbarr", 421 + "reg", 422 + "racute", 423 + "rang", 424 + "rarr", 425 + "rarrtl", 426 + "rcaron", 427 + "rcedil", 428 + "rcy", 429 + "re", 430 + "reverseelement", 431 + "reverseequilibrium", 432 + "reverseupequilibrium", 433 + "rfr", 434 + "rho", 435 + "rightanglebracket", 436 + "rightarrow", 437 + "rightarrowbar", 438 + "rightarrowleftarrow", 439 + "rightceiling", 440 + "rightdoublebracket", 441 + "rightdownteevector", 442 + "rightdownvector", 443 + "rightdownvectorbar", 444 + "rightfloor", 445 + "righttee", 446 + "rightteearrow", 447 + "rightteevector", 448 + "righttriangle", 449 + "righttrianglebar", 450 + "righttriangleequal", 451 + "rightupdownvector", 452 + "rightupteevector", 453 + "rightupvector", 454 + "rightupvectorbar", 455 + "rightvector", 456 + "rightvectorbar", 457 + "rightarrow", 458 + "ropf", 459 + "roundimplies", 460 + "rrightarrow", 461 + "rscr", 462 + "rsh", 463 + "ruledelayed", 464 + "shchcy", 465 + "shcy", 466 + "softcy", 467 + "sacute", 468 + "sc", 469 + "scaron", 470 + "scedil", 471 + "scirc", 472 + "scy", 473 + "sfr", 474 + "shortdownarrow", 475 + "shortleftarrow", 476 + "shortrightarrow", 477 + "shortuparrow", 478 + "sigma", 479 + "smallcircle", 480 + "sopf", 481 + "sqrt", 482 + "square", 483 + "squareintersection", 484 + "squaresubset", 485 + "squaresubsetequal", 486 + "squaresuperset", 487 + "squaresupersetequal", 488 + "squareunion", 489 + "sscr", 490 + "star", 491 + "sub", 492 + "subset", 493 + "subsetequal", 494 + "succeeds", 495 + "succeedsequal", 496 + "succeedsslantequal", 497 + "succeedstilde", 498 + "suchthat", 499 + "sum", 500 + "sup", 501 + "superset", 502 + "supersetequal", 503 + "supset", 504 + "thorn", 505 + "trade", 506 + "tshcy", 507 + "tscy", 508 + "tab", 509 + "tau", 510 + "tcaron", 511 + "tcedil", 512 + "tcy", 513 + "tfr", 514 + "therefore", 515 + "theta", 516 + "thickspace", 517 + "thinspace", 518 + "tilde", 519 + "tildeequal", 520 + "tildefullequal", 521 + "tildetilde", 522 + "topf", 523 + "tripledot", 524 + "tscr", 525 + "tstrok", 526 + "uacute", 527 + "uarr", 528 + "uarrocir", 529 + "ubrcy", 530 + "ubreve", 531 + "ucirc", 532 + "ucy", 533 + "udblac", 534 + "ufr", 535 + "ugrave", 536 + "umacr", 537 + "underbar", 538 + "underbrace", 539 + "underbracket", 540 + "underparenthesis", 541 + "union", 542 + "unionplus", 543 + "uogon", 544 + "uopf", 545 + "uparrow", 546 + "uparrowbar", 547 + "uparrowdownarrow", 548 + "updownarrow", 549 + "upequilibrium", 550 + "uptee", 551 + "upteearrow", 552 + "uparrow", 553 + "updownarrow", 554 + "upperleftarrow", 555 + "upperrightarrow", 556 + "upsi", 557 + "upsilon", 558 + "uring", 559 + "uscr", 560 + "utilde", 561 + "uuml", 562 + "vdash", 563 + "vbar", 564 + "vcy", 565 + "vdash", 566 + "vdashl", 567 + "vee", 568 + "verbar", 569 + "vert", 570 + "verticalbar", 571 + "verticalline", 572 + "verticalseparator", 573 + "verticaltilde", 574 + "verythinspace", 575 + "vfr", 576 + "vopf", 577 + "vscr", 578 + "vvdash", 579 + "wcirc", 580 + "wedge", 581 + "wfr", 582 + "wopf", 583 + "wscr", 584 + "xfr", 585 + "xi", 586 + "xopf", 587 + "xscr", 588 + "yacy", 589 + "yicy", 590 + "yucy", 591 + "yacute", 592 + "ycirc", 593 + "ycy", 594 + "yfr", 595 + "yopf", 596 + "yscr", 597 + "yuml", 598 + "zhcy", 599 + "zacute", 600 + "zcaron", 601 + "zcy", 602 + "zdot", 603 + "zerowidthspace", 604 + "zeta", 605 + "zfr", 606 + "zopf", 607 + "zscr", 608 + "aacute", 609 + "abreve", 610 + "ac", 611 + "ace", 612 + "acd", 613 + "acirc", 614 + "acute", 615 + "acy", 616 + "aelig", 617 + "af", 618 + "afr", 619 + "agrave", 620 + "alefsym", 621 + "aleph", 622 + "alpha", 623 + "amacr", 624 + "amalg", 625 + "amp", 626 + "and", 627 + "andand", 628 + "andd", 629 + "andslope", 630 + "andv", 631 + "ang", 632 + "ange", 633 + "angle", 634 + "angmsd", 635 + "angmsdaa", 636 + "angmsdab", 637 + "angmsdac", 638 + "angmsdad", 639 + "angmsdae", 640 + "angmsdaf", 641 + "angmsdag", 642 + "angmsdah", 643 + "angrt", 644 + "angrtvb", 645 + "angrtvbd", 646 + "angsph", 647 + "angst", 648 + "angzarr", 649 + "aogon", 650 + "aopf", 651 + "ap", 652 + "ape", 653 + "apacir", 654 + "ape", 655 + "apid", 656 + "apos", 657 + "approx", 658 + "approxeq", 659 + "aring", 660 + "ascr", 661 + "ast", 662 + "asymp", 663 + "asympeq", 664 + "atilde", 665 + "auml", 666 + "awconint", 667 + "awint", 668 + "bnot", 669 + "backcong", 670 + "backepsilon", 671 + "backprime", 672 + "backsim", 673 + "backsimeq", 674 + "barvee", 675 + "barwed", 676 + "barwedge", 677 + "bbrk", 678 + "bbrktbrk", 679 + "bcong", 680 + "bcy", 681 + "bdquo", 682 + "becaus", 683 + "because", 684 + "bemptyv", 685 + "bepsi", 686 + "bernou", 687 + "beta", 688 + "beth", 689 + "between", 690 + "bfr", 691 + "bigcap", 692 + "bigcirc", 693 + "bigcup", 694 + "bigodot", 695 + "bigoplus", 696 + "bigotimes", 697 + "bigsqcup", 698 + "bigstar", 699 + "bigtriangledown", 700 + "bigtriangleup", 701 + "biguplus", 702 + "bigvee", 703 + "bigwedge", 704 + "bkarow", 705 + "blacklozenge", 706 + "blacksquare", 707 + "blacktriangle", 708 + "blacktriangledown", 709 + "blacktriangleleft", 710 + "blacktriangleright", 711 + "blank", 712 + "blk12", 713 + "blk14", 714 + "blk34", 715 + "block", 716 + "bne", 717 + "bnequiv", 718 + "bnot", 719 + "bopf", 720 + "bot", 721 + "bottom", 722 + "bowtie", 723 + "boxdl", 724 + "boxdr", 725 + "boxdl", 726 + "boxdr", 727 + "boxh", 728 + "boxhd", 729 + "boxhu", 730 + "boxhd", 731 + "boxhu", 732 + "boxul", 733 + "boxur", 734 + "boxul", 735 + "boxur", 736 + "boxv", 737 + "boxvh", 738 + "boxvl", 739 + "boxvr", 740 + "boxvh", 741 + "boxvl", 742 + "boxvr", 743 + "boxbox", 744 + "boxdl", 745 + "boxdr", 746 + "boxdl", 747 + "boxdr", 748 + "boxh", 749 + "boxhd", 750 + "boxhu", 751 + "boxhd", 752 + "boxhu", 753 + "boxminus", 754 + "boxplus", 755 + "boxtimes", 756 + "boxul", 757 + "boxur", 758 + "boxul", 759 + "boxur", 760 + "boxv", 761 + "boxvh", 762 + "boxvl", 763 + "boxvr", 764 + "boxvh", 765 + "boxvl", 766 + "boxvr", 767 + "bprime", 768 + "breve", 769 + "brvbar", 770 + "bscr", 771 + "bsemi", 772 + "bsim", 773 + "bsime", 774 + "bsol", 775 + "bsolb", 776 + "bsolhsub", 777 + "bull", 778 + "bullet", 779 + "bump", 780 + "bumpe", 781 + "bumpeq", 782 + "cacute", 783 + "cap", 784 + "capand", 785 + "capbrcup", 786 + "capcap", 787 + "capcup", 788 + "capdot", 789 + "caps", 790 + "caret", 791 + "caron", 792 + "ccaps", 793 + "ccaron", 794 + "ccedil", 795 + "ccirc", 796 + "ccups", 797 + "ccupssm", 798 + "cdot", 799 + "cedil", 800 + "cemptyv", 801 + "cent", 802 + "centerdot", 803 + "cfr", 804 + "chcy", 805 + "check", 806 + "checkmark", 807 + "chi", 808 + "cir", 809 + "cire", 810 + "circ", 811 + "circeq", 812 + "circlearrowleft", 813 + "circlearrowright", 814 + "circledr", 815 + "circleds", 816 + "circledast", 817 + "circledcirc", 818 + "circleddash", 819 + "cire", 820 + "cirfnint", 821 + "cirmid", 822 + "cirscir", 823 + "clubs", 824 + "clubsuit", 825 + "colon", 826 + "colone", 827 + "coloneq", 828 + "comma", 829 + "commat", 830 + "comp", 831 + "compfn", 832 + "complement", 833 + "complexes", 834 + "cong", 835 + "congdot", 836 + "conint", 837 + "copf", 838 + "coprod", 839 + "copy", 840 + "copysr", 841 + "crarr", 842 + "cross", 843 + "cscr", 844 + "csub", 845 + "csube", 846 + "csup", 847 + "csupe", 848 + "ctdot", 849 + "cudarrl", 850 + "cudarrr", 851 + "cuepr", 852 + "cuesc", 853 + "cularr", 854 + "cularrp", 855 + "cup", 856 + "cupbrcap", 857 + "cupcap", 858 + "cupcup", 859 + "cupdot", 860 + "cupor", 861 + "cups", 862 + "curarr", 863 + "curarrm", 864 + "curlyeqprec", 865 + "curlyeqsucc", 866 + "curlyvee", 867 + "curlywedge", 868 + "curren", 869 + "curvearrowleft", 870 + "curvearrowright", 871 + "cuvee", 872 + "cuwed", 873 + "cwconint", 874 + "cwint", 875 + "cylcty", 876 + "darr", 877 + "dhar", 878 + "dagger", 879 + "daleth", 880 + "darr", 881 + "dash", 882 + "dashv", 883 + "dbkarow", 884 + "dblac", 885 + "dcaron", 886 + "dcy", 887 + "dd", 888 + "ddagger", 889 + "ddarr", 890 + "ddotseq", 891 + "deg", 892 + "delta", 893 + "demptyv", 894 + "dfisht", 895 + "dfr", 896 + "dharl", 897 + "dharr", 898 + "diam", 899 + "diamond", 900 + "diamondsuit", 901 + "diams", 902 + "die", 903 + "digamma", 904 + "disin", 905 + "div", 906 + "divide", 907 + "divideontimes", 908 + "divonx", 909 + "djcy", 910 + "dlcorn", 911 + "dlcrop", 912 + "dollar", 913 + "dopf", 914 + "dot", 915 + "doteq", 916 + "doteqdot", 917 + "dotminus", 918 + "dotplus", 919 + "dotsquare", 920 + "doublebarwedge", 921 + "downarrow", 922 + "downdownarrows", 923 + "downharpoonleft", 924 + "downharpoonright", 925 + "drbkarow", 926 + "drcorn", 927 + "drcrop", 928 + "dscr", 929 + "dscy", 930 + "dsol", 931 + "dstrok", 932 + "dtdot", 933 + "dtri", 934 + "dtrif", 935 + "duarr", 936 + "duhar", 937 + "dwangle", 938 + "dzcy", 939 + "dzigrarr", 940 + "eddot", 941 + "edot", 942 + "eacute", 943 + "easter", 944 + "ecaron", 945 + "ecir", 946 + "ecirc", 947 + "ecolon", 948 + "ecy", 949 + "edot", 950 + "ee", 951 + "efdot", 952 + "efr", 953 + "eg", 954 + "egrave", 955 + "egs", 956 + "egsdot", 957 + "el", 958 + "elinters", 959 + "ell", 960 + "els", 961 + "elsdot", 962 + "emacr", 963 + "empty", 964 + "emptyset", 965 + "emptyv", 966 + "emsp13", 967 + "emsp14", 968 + "emsp", 969 + "eng", 970 + "ensp", 971 + "eogon", 972 + "eopf", 973 + "epar", 974 + "eparsl", 975 + "eplus", 976 + "epsi", 977 + "epsilon", 978 + "epsiv", 979 + "eqcirc", 980 + "eqcolon", 981 + "eqsim", 982 + "eqslantgtr", 983 + "eqslantless", 984 + "equals", 985 + "equest", 986 + "equiv", 987 + "equivdd", 988 + "eqvparsl", 989 + "erdot", 990 + "erarr", 991 + "escr", 992 + "esdot", 993 + "esim", 994 + "eta", 995 + "eth", 996 + "euml", 997 + "euro", 998 + "excl", 999 + "exist", 1000 + "expectation", 1001 + "exponentiale", 1002 + "fallingdotseq", 1003 + "fcy", 1004 + "female", 1005 + "ffilig", 1006 + "fflig", 1007 + "ffllig", 1008 + "ffr", 1009 + "filig", 1010 + "fjlig", 1011 + "flat", 1012 + "fllig", 1013 + "fltns", 1014 + "fnof", 1015 + "fopf", 1016 + "forall", 1017 + "fork", 1018 + "forkv", 1019 + "fpartint", 1020 + "frac12", 1021 + "frac13", 1022 + "frac14", 1023 + "frac15", 1024 + "frac16", 1025 + "frac18", 1026 + "frac23", 1027 + "frac25", 1028 + "frac34", 1029 + "frac35", 1030 + "frac38", 1031 + "frac45", 1032 + "frac56", 1033 + "frac58", 1034 + "frac78", 1035 + "frasl", 1036 + "frown", 1037 + "fscr", 1038 + "ge", 1039 + "gel", 1040 + "gacute", 1041 + "gamma", 1042 + "gammad", 1043 + "gap", 1044 + "gbreve", 1045 + "gcirc", 1046 + "gcy", 1047 + "gdot", 1048 + "ge", 1049 + "gel", 1050 + "geq", 1051 + "geqq", 1052 + "geqslant", 1053 + "ges", 1054 + "gescc", 1055 + "gesdot", 1056 + "gesdoto", 1057 + "gesdotol", 1058 + "gesl", 1059 + "gesles", 1060 + "gfr", 1061 + "gg", 1062 + "ggg", 1063 + "gimel", 1064 + "gjcy", 1065 + "gl", 1066 + "gle", 1067 + "gla", 1068 + "glj", 1069 + "gne", 1070 + "gnap", 1071 + "gnapprox", 1072 + "gne", 1073 + "gneq", 1074 + "gneqq", 1075 + "gnsim", 1076 + "gopf", 1077 + "grave", 1078 + "gscr", 1079 + "gsim", 1080 + "gsime", 1081 + "gsiml", 1082 + "gt", 1083 + "gtcc", 1084 + "gtcir", 1085 + "gtdot", 1086 + "gtlpar", 1087 + "gtquest", 1088 + "gtrapprox", 1089 + "gtrarr", 1090 + "gtrdot", 1091 + "gtreqless", 1092 + "gtreqqless", 1093 + "gtrless", 1094 + "gtrsim", 1095 + "gvertneqq", 1096 + "gvne", 1097 + "harr", 1098 + "hairsp", 1099 + "half", 1100 + "hamilt", 1101 + "hardcy", 1102 + "harr", 1103 + "harrcir", 1104 + "harrw", 1105 + "hbar", 1106 + "hcirc", 1107 + "hearts", 1108 + "heartsuit", 1109 + "hellip", 1110 + "hercon", 1111 + "hfr", 1112 + "hksearow", 1113 + "hkswarow", 1114 + "hoarr", 1115 + "homtht", 1116 + "hookleftarrow", 1117 + "hookrightarrow", 1118 + "hopf", 1119 + "horbar", 1120 + "hscr", 1121 + "hslash", 1122 + "hstrok", 1123 + "hybull", 1124 + "hyphen", 1125 + "iacute", 1126 + "ic", 1127 + "icirc", 1128 + "icy", 1129 + "iecy", 1130 + "iexcl", 1131 + "iff", 1132 + "ifr", 1133 + "igrave", 1134 + "ii", 1135 + "iiiint", 1136 + "iiint", 1137 + "iinfin", 1138 + "iiota", 1139 + "ijlig", 1140 + "imacr", 1141 + "image", 1142 + "imagline", 1143 + "imagpart", 1144 + "imath", 1145 + "imof", 1146 + "imped", 1147 + "in", 1148 + "incare", 1149 + "infin", 1150 + "infintie", 1151 + "inodot", 1152 + "int", 1153 + "intcal", 1154 + "integers", 1155 + "intercal", 1156 + "intlarhk", 1157 + "intprod", 1158 + "iocy", 1159 + "iogon", 1160 + "iopf", 1161 + "iota", 1162 + "iprod", 1163 + "iquest", 1164 + "iscr", 1165 + "isin", 1166 + "isine", 1167 + "isindot", 1168 + "isins", 1169 + "isinsv", 1170 + "isinv", 1171 + "it", 1172 + "itilde", 1173 + "iukcy", 1174 + "iuml", 1175 + "jcirc", 1176 + "jcy", 1177 + "jfr", 1178 + "jmath", 1179 + "jopf", 1180 + "jscr", 1181 + "jsercy", 1182 + "jukcy", 1183 + "kappa", 1184 + "kappav", 1185 + "kcedil", 1186 + "kcy", 1187 + "kfr", 1188 + "kgreen", 1189 + "khcy", 1190 + "kjcy", 1191 + "kopf", 1192 + "kscr", 1193 + "laarr", 1194 + "larr", 1195 + "latail", 1196 + "lbarr", 1197 + "le", 1198 + "leg", 1199 + "lhar", 1200 + "lacute", 1201 + "laemptyv", 1202 + "lagran", 1203 + "lambda", 1204 + "lang", 1205 + "langd", 1206 + "langle", 1207 + "lap", 1208 + "laquo", 1209 + "larr", 1210 + "larrb", 1211 + "larrbfs", 1212 + "larrfs", 1213 + "larrhk", 1214 + "larrlp", 1215 + "larrpl", 1216 + "larrsim", 1217 + "larrtl", 1218 + "lat", 1219 + "latail", 1220 + "late", 1221 + "lates", 1222 + "lbarr", 1223 + "lbbrk", 1224 + "lbrace", 1225 + "lbrack", 1226 + "lbrke", 1227 + "lbrksld", 1228 + "lbrkslu", 1229 + "lcaron", 1230 + "lcedil", 1231 + "lceil", 1232 + "lcub", 1233 + "lcy", 1234 + "ldca", 1235 + "ldquo", 1236 + "ldquor", 1237 + "ldrdhar", 1238 + "ldrushar", 1239 + "ldsh", 1240 + "le", 1241 + "leftarrow", 1242 + "leftarrowtail", 1243 + "leftharpoondown", 1244 + "leftharpoonup", 1245 + "leftleftarrows", 1246 + "leftrightarrow", 1247 + "leftrightarrows", 1248 + "leftrightharpoons", 1249 + "leftrightsquigarrow", 1250 + "leftthreetimes", 1251 + "leg", 1252 + "leq", 1253 + "leqq", 1254 + "leqslant", 1255 + "les", 1256 + "lescc", 1257 + "lesdot", 1258 + "lesdoto", 1259 + "lesdotor", 1260 + "lesg", 1261 + "lesges", 1262 + "lessapprox", 1263 + "lessdot", 1264 + "lesseqgtr", 1265 + "lesseqqgtr", 1266 + "lessgtr", 1267 + "lesssim", 1268 + "lfisht", 1269 + "lfloor", 1270 + "lfr", 1271 + "lg", 1272 + "lge", 1273 + "lhard", 1274 + "lharu", 1275 + "lharul", 1276 + "lhblk", 1277 + "ljcy", 1278 + "ll", 1279 + "llarr", 1280 + "llcorner", 1281 + "llhard", 1282 + "lltri", 1283 + "lmidot", 1284 + "lmoust", 1285 + "lmoustache", 1286 + "lne", 1287 + "lnap", 1288 + "lnapprox", 1289 + "lne", 1290 + "lneq", 1291 + "lneqq", 1292 + "lnsim", 1293 + "loang", 1294 + "loarr", 1295 + "lobrk", 1296 + "longleftarrow", 1297 + "longleftrightarrow", 1298 + "longmapsto", 1299 + "longrightarrow", 1300 + "looparrowleft", 1301 + "looparrowright", 1302 + "lopar", 1303 + "lopf", 1304 + "loplus", 1305 + "lotimes", 1306 + "lowast", 1307 + "lowbar", 1308 + "loz", 1309 + "lozenge", 1310 + "lozf", 1311 + "lpar", 1312 + "lparlt", 1313 + "lrarr", 1314 + "lrcorner", 1315 + "lrhar", 1316 + "lrhard", 1317 + "lrm", 1318 + "lrtri", 1319 + "lsaquo", 1320 + "lscr", 1321 + "lsh", 1322 + "lsim", 1323 + "lsime", 1324 + "lsimg", 1325 + "lsqb", 1326 + "lsquo", 1327 + "lsquor", 1328 + "lstrok", 1329 + "lt", 1330 + "ltcc", 1331 + "ltcir", 1332 + "ltdot", 1333 + "lthree", 1334 + "ltimes", 1335 + "ltlarr", 1336 + "ltquest", 1337 + "ltrpar", 1338 + "ltri", 1339 + "ltrie", 1340 + "ltrif", 1341 + "lurdshar", 1342 + "luruhar", 1343 + "lvertneqq", 1344 + "lvne", 1345 + "mddot", 1346 + "macr", 1347 + "male", 1348 + "malt", 1349 + "maltese", 1350 + "map", 1351 + "mapsto", 1352 + "mapstodown", 1353 + "mapstoleft", 1354 + "mapstoup", 1355 + "marker", 1356 + "mcomma", 1357 + "mcy", 1358 + "mdash", 1359 + "measuredangle", 1360 + "mfr", 1361 + "mho", 1362 + "micro", 1363 + "mid", 1364 + "midast", 1365 + "midcir", 1366 + "middot", 1367 + "minus", 1368 + "minusb", 1369 + "minusd", 1370 + "minusdu", 1371 + "mlcp", 1372 + "mldr", 1373 + "mnplus", 1374 + "models", 1375 + "mopf", 1376 + "mp", 1377 + "mscr", 1378 + "mstpos", 1379 + "mu", 1380 + "multimap", 1381 + "mumap", 1382 + "ngg", 1383 + "ngt", 1384 + "ngtv", 1385 + "nleftarrow", 1386 + "nleftrightarrow", 1387 + "nll", 1388 + "nlt", 1389 + "nltv", 1390 + "nrightarrow", 1391 + "nvdash", 1392 + "nabla", 1393 + "nacute", 1394 + "nang", 1395 + "nap", 1396 + "nape", 1397 + "napid", 1398 + "napos", 1399 + "napprox", 1400 + "natur", 1401 + "natural", 1402 + "naturals", 1403 + "nbsp", 1404 + "nbump", 1405 + "nbumpe", 1406 + "ncap", 1407 + "ncaron", 1408 + "ncedil", 1409 + "ncong", 1410 + "ncongdot", 1411 + "ncup", 1412 + "ncy", 1413 + "ndash", 1414 + "ne", 1415 + "nearr", 1416 + "nearhk", 1417 + "nearr", 1418 + "nearrow", 1419 + "nedot", 1420 + "nequiv", 1421 + "nesear", 1422 + "nesim", 1423 + "nexist", 1424 + "nexists", 1425 + "nfr", 1426 + "nge", 1427 + "ngeq", 1428 + "ngeqq", 1429 + "ngeqslant", 1430 + "nges", 1431 + "ngsim", 1432 + "ngt", 1433 + "ngtr", 1434 + "nharr", 1435 + "nhpar", 1436 + "ni", 1437 + "nis", 1438 + "nisd", 1439 + "niv", 1440 + "njcy", 1441 + "nlarr", 1442 + "nle", 1443 + "nlarr", 1444 + "nldr", 1445 + "nle", 1446 + "nleftarrow", 1447 + "nleftrightarrow", 1448 + "nleq", 1449 + "nleqq", 1450 + "nleqslant", 1451 + "nles", 1452 + "nless", 1453 + "nlsim", 1454 + "nlt", 1455 + "nltri", 1456 + "nltrie", 1457 + "nmid", 1458 + "nopf", 1459 + "not", 1460 + "notin", 1461 + "notine", 1462 + "notindot", 1463 + "notinva", 1464 + "notinvb", 1465 + "notinvc", 1466 + "notni", 1467 + "notniva", 1468 + "notnivb", 1469 + "notnivc", 1470 + "npar", 1471 + "nparallel", 1472 + "nparsl", 1473 + "npart", 1474 + "npolint", 1475 + "npr", 1476 + "nprcue", 1477 + "npre", 1478 + "nprec", 1479 + "npreceq", 1480 + "nrarr", 1481 + "nrarrc", 1482 + "nrarrw", 1483 + "nrightarrow", 1484 + "nrtri", 1485 + "nrtrie", 1486 + "nsc", 1487 + "nsccue", 1488 + "nsce", 1489 + "nscr", 1490 + "nshortmid", 1491 + "nshortparallel", 1492 + "nsim", 1493 + "nsime", 1494 + "nsimeq", 1495 + "nsmid", 1496 + "nspar", 1497 + "nsqsube", 1498 + "nsqsupe", 1499 + "nsub", 1500 + "nsube", 1501 + "nsubset", 1502 + "nsubseteq", 1503 + "nsubseteqq", 1504 + "nsucc", 1505 + "nsucceq", 1506 + "nsup", 1507 + "nsupe", 1508 + "nsupset", 1509 + "nsupseteq", 1510 + "nsupseteqq", 1511 + "ntgl", 1512 + "ntilde", 1513 + "ntlg", 1514 + "ntriangleleft", 1515 + "ntrianglelefteq", 1516 + "ntriangleright", 1517 + "ntrianglerighteq", 1518 + "nu", 1519 + "num", 1520 + "numero", 1521 + "numsp", 1522 + "nvdash", 1523 + "nvharr", 1524 + "nvap", 1525 + "nvdash", 1526 + "nvge", 1527 + "nvgt", 1528 + "nvinfin", 1529 + "nvlarr", 1530 + "nvle", 1531 + "nvlt", 1532 + "nvltrie", 1533 + "nvrarr", 1534 + "nvrtrie", 1535 + "nvsim", 1536 + "nwarr", 1537 + "nwarhk", 1538 + "nwarr", 1539 + "nwarrow", 1540 + "nwnear", 1541 + "os", 1542 + "oacute", 1543 + "oast", 1544 + "ocir", 1545 + "ocirc", 1546 + "ocy", 1547 + "odash", 1548 + "odblac", 1549 + "odiv", 1550 + "odot", 1551 + "odsold", 1552 + "oelig", 1553 + "ofcir", 1554 + "ofr", 1555 + "ogon", 1556 + "ograve", 1557 + "ogt", 1558 + "ohbar", 1559 + "ohm", 1560 + "oint", 1561 + "olarr", 1562 + "olcir", 1563 + "olcross", 1564 + "oline", 1565 + "olt", 1566 + "omacr", 1567 + "omega", 1568 + "omicron", 1569 + "omid", 1570 + "ominus", 1571 + "oopf", 1572 + "opar", 1573 + "operp", 1574 + "oplus", 1575 + "or", 1576 + "orarr", 1577 + "ord", 1578 + "order", 1579 + "orderof", 1580 + "ordf", 1581 + "ordm", 1582 + "origof", 1583 + "oror", 1584 + "orslope", 1585 + "orv", 1586 + "oscr", 1587 + "oslash", 1588 + "osol", 1589 + "otilde", 1590 + "otimes", 1591 + "otimesas", 1592 + "ouml", 1593 + "ovbar", 1594 + "par", 1595 + "para", 1596 + "parallel", 1597 + "parsim", 1598 + "parsl", 1599 + "part", 1600 + "pcy", 1601 + "percnt", 1602 + "period", 1603 + "permil", 1604 + "perp", 1605 + "pertenk", 1606 + "pfr", 1607 + "phi", 1608 + "phiv", 1609 + "phmmat", 1610 + "phone", 1611 + "pi", 1612 + "pitchfork", 1613 + "piv", 1614 + "planck", 1615 + "planckh", 1616 + "plankv", 1617 + "plus", 1618 + "plusacir", 1619 + "plusb", 1620 + "pluscir", 1621 + "plusdo", 1622 + "plusdu", 1623 + "pluse", 1624 + "plusmn", 1625 + "plussim", 1626 + "plustwo", 1627 + "pm", 1628 + "pointint", 1629 + "popf", 1630 + "pound", 1631 + "pr", 1632 + "pre", 1633 + "prap", 1634 + "prcue", 1635 + "pre", 1636 + "prec", 1637 + "precapprox", 1638 + "preccurlyeq", 1639 + "preceq", 1640 + "precnapprox", 1641 + "precneqq", 1642 + "precnsim", 1643 + "precsim", 1644 + "prime", 1645 + "primes", 1646 + "prne", 1647 + "prnap", 1648 + "prnsim", 1649 + "prod", 1650 + "profalar", 1651 + "profline", 1652 + "profsurf", 1653 + "prop", 1654 + "propto", 1655 + "prsim", 1656 + "prurel", 1657 + "pscr", 1658 + "psi", 1659 + "puncsp", 1660 + "qfr", 1661 + "qint", 1662 + "qopf", 1663 + "qprime", 1664 + "qscr", 1665 + "quaternions", 1666 + "quatint", 1667 + "quest", 1668 + "questeq", 1669 + "quot", 1670 + "raarr", 1671 + "rarr", 1672 + "ratail", 1673 + "rbarr", 1674 + "rhar", 1675 + "race", 1676 + "racute", 1677 + "radic", 1678 + "raemptyv", 1679 + "rang", 1680 + "rangd", 1681 + "range", 1682 + "rangle", 1683 + "raquo", 1684 + "rarr", 1685 + "rarrap", 1686 + "rarrb", 1687 + "rarrbfs", 1688 + "rarrc", 1689 + "rarrfs", 1690 + "rarrhk", 1691 + "rarrlp", 1692 + "rarrpl", 1693 + "rarrsim", 1694 + "rarrtl", 1695 + "rarrw", 1696 + "ratail", 1697 + "ratio", 1698 + "rationals", 1699 + "rbarr", 1700 + "rbbrk", 1701 + "rbrace", 1702 + "rbrack", 1703 + "rbrke", 1704 + "rbrksld", 1705 + "rbrkslu", 1706 + "rcaron", 1707 + "rcedil", 1708 + "rceil", 1709 + "rcub", 1710 + "rcy", 1711 + "rdca", 1712 + "rdldhar", 1713 + "rdquo", 1714 + "rdquor", 1715 + "rdsh", 1716 + "real", 1717 + "realine", 1718 + "realpart", 1719 + "reals", 1720 + "rect", 1721 + "reg", 1722 + "rfisht", 1723 + "rfloor", 1724 + "rfr", 1725 + "rhard", 1726 + "rharu", 1727 + "rharul", 1728 + "rho", 1729 + "rhov", 1730 + "rightarrow", 1731 + "rightarrowtail", 1732 + "rightharpoondown", 1733 + "rightharpoonup", 1734 + "rightleftarrows", 1735 + "rightleftharpoons", 1736 + "rightrightarrows", 1737 + "rightsquigarrow", 1738 + "rightthreetimes", 1739 + "ring", 1740 + "risingdotseq", 1741 + "rlarr", 1742 + "rlhar", 1743 + "rlm", 1744 + "rmoust", 1745 + "rmoustache", 1746 + "rnmid", 1747 + "roang", 1748 + "roarr", 1749 + "robrk", 1750 + "ropar", 1751 + "ropf", 1752 + "roplus", 1753 + "rotimes", 1754 + "rpar", 1755 + "rpargt", 1756 + "rppolint", 1757 + "rrarr", 1758 + "rsaquo", 1759 + "rscr", 1760 + "rsh", 1761 + "rsqb", 1762 + "rsquo", 1763 + "rsquor", 1764 + "rthree", 1765 + "rtimes", 1766 + "rtri", 1767 + "rtrie", 1768 + "rtrif", 1769 + "rtriltri", 1770 + "ruluhar", 1771 + "rx", 1772 + "sacute", 1773 + "sbquo", 1774 + "sc", 1775 + "sce", 1776 + "scap", 1777 + "scaron", 1778 + "sccue", 1779 + "sce", 1780 + "scedil", 1781 + "scirc", 1782 + "scne", 1783 + "scnap", 1784 + "scnsim", 1785 + "scpolint", 1786 + "scsim", 1787 + "scy", 1788 + "sdot", 1789 + "sdotb", 1790 + "sdote", 1791 + "searr", 1792 + "searhk", 1793 + "searr", 1794 + "searrow", 1795 + "sect", 1796 + "semi", 1797 + "seswar", 1798 + "setminus", 1799 + "setmn", 1800 + "sext", 1801 + "sfr", 1802 + "sfrown", 1803 + "sharp", 1804 + "shchcy", 1805 + "shcy", 1806 + "shortmid", 1807 + "shortparallel", 1808 + "shy", 1809 + "sigma", 1810 + "sigmaf", 1811 + "sigmav", 1812 + "sim", 1813 + "simdot", 1814 + "sime", 1815 + "simeq", 1816 + "simg", 1817 + "simge", 1818 + "siml", 1819 + "simle", 1820 + "simne", 1821 + "simplus", 1822 + "simrarr", 1823 + "slarr", 1824 + "smallsetminus", 1825 + "smashp", 1826 + "smeparsl", 1827 + "smid", 1828 + "smile", 1829 + "smt", 1830 + "smte", 1831 + "smtes", 1832 + "softcy", 1833 + "sol", 1834 + "solb", 1835 + "solbar", 1836 + "sopf", 1837 + "spades", 1838 + "spadesuit", 1839 + "spar", 1840 + "sqcap", 1841 + "sqcaps", 1842 + "sqcup", 1843 + "sqcups", 1844 + "sqsub", 1845 + "sqsube", 1846 + "sqsubset", 1847 + "sqsubseteq", 1848 + "sqsup", 1849 + "sqsupe", 1850 + "sqsupset", 1851 + "sqsupseteq", 1852 + "squ", 1853 + "square", 1854 + "squarf", 1855 + "squf", 1856 + "srarr", 1857 + "sscr", 1858 + "ssetmn", 1859 + "ssmile", 1860 + "sstarf", 1861 + "star", 1862 + "starf", 1863 + "straightepsilon", 1864 + "straightphi", 1865 + "strns", 1866 + "sub", 1867 + "sube", 1868 + "subdot", 1869 + "sube", 1870 + "subedot", 1871 + "submult", 1872 + "subne", 1873 + "subplus", 1874 + "subrarr", 1875 + "subset", 1876 + "subseteq", 1877 + "subseteqq", 1878 + "subsetneq", 1879 + "subsetneqq", 1880 + "subsim", 1881 + "subsub", 1882 + "subsup", 1883 + "succ", 1884 + "succapprox", 1885 + "succcurlyeq", 1886 + "succeq", 1887 + "succnapprox", 1888 + "succneqq", 1889 + "succnsim", 1890 + "succsim", 1891 + "sum", 1892 + "sung", 1893 + "sup1", 1894 + "sup2", 1895 + "sup3", 1896 + "sup", 1897 + "supe", 1898 + "supdot", 1899 + "supdsub", 1900 + "supe", 1901 + "supedot", 1902 + "suphsol", 1903 + "suphsub", 1904 + "suplarr", 1905 + "supmult", 1906 + "supne", 1907 + "supplus", 1908 + "supset", 1909 + "supseteq", 1910 + "supseteqq", 1911 + "supsetneq", 1912 + "supsetneqq", 1913 + "supsim", 1914 + "supsub", 1915 + "supsup", 1916 + "swarr", 1917 + "swarhk", 1918 + "swarr", 1919 + "swarrow", 1920 + "swnwar", 1921 + "szlig", 1922 + "target", 1923 + "tau", 1924 + "tbrk", 1925 + "tcaron", 1926 + "tcedil", 1927 + "tcy", 1928 + "tdot", 1929 + "telrec", 1930 + "tfr", 1931 + "there4", 1932 + "therefore", 1933 + "theta", 1934 + "thetasym", 1935 + "thetav", 1936 + "thickapprox", 1937 + "thicksim", 1938 + "thinsp", 1939 + "thkap", 1940 + "thksim", 1941 + "thorn", 1942 + "tilde", 1943 + "times", 1944 + "timesb", 1945 + "timesbar", 1946 + "timesd", 1947 + "tint", 1948 + "toea", 1949 + "top", 1950 + "topbot", 1951 + "topcir", 1952 + "topf", 1953 + "topfork", 1954 + "tosa", 1955 + "tprime", 1956 + "trade", 1957 + "triangle", 1958 + "triangledown", 1959 + "triangleleft", 1960 + "trianglelefteq", 1961 + "triangleq", 1962 + "triangleright", 1963 + "trianglerighteq", 1964 + "tridot", 1965 + "trie", 1966 + "triminus", 1967 + "triplus", 1968 + "trisb", 1969 + "tritime", 1970 + "trpezium", 1971 + "tscr", 1972 + "tscy", 1973 + "tshcy", 1974 + "tstrok", 1975 + "twixt", 1976 + "twoheadleftarrow", 1977 + "twoheadrightarrow", 1978 + "uarr", 1979 + "uhar", 1980 + "uacute", 1981 + "uarr", 1982 + "ubrcy", 1983 + "ubreve", 1984 + "ucirc", 1985 + "ucy", 1986 + "udarr", 1987 + "udblac", 1988 + "udhar", 1989 + "ufisht", 1990 + "ufr", 1991 + "ugrave", 1992 + "uharl", 1993 + "uharr", 1994 + "uhblk", 1995 + "ulcorn", 1996 + "ulcorner", 1997 + "ulcrop", 1998 + "ultri", 1999 + "umacr", 2000 + "uml", 2001 + "uogon", 2002 + "uopf", 2003 + "uparrow", 2004 + "updownarrow", 2005 + "upharpoonleft", 2006 + "upharpoonright", 2007 + "uplus", 2008 + "upsi", 2009 + "upsih", 2010 + "upsilon", 2011 + "upuparrows", 2012 + "urcorn", 2013 + "urcorner", 2014 + "urcrop", 2015 + "uring", 2016 + "urtri", 2017 + "uscr", 2018 + "utdot", 2019 + "utilde", 2020 + "utri", 2021 + "utrif", 2022 + "uuarr", 2023 + "uuml", 2024 + "uwangle", 2025 + "varr", 2026 + "vbar", 2027 + "vbarv", 2028 + "vdash", 2029 + "vangrt", 2030 + "varepsilon", 2031 + "varkappa", 2032 + "varnothing", 2033 + "varphi", 2034 + "varpi", 2035 + "varpropto", 2036 + "varr", 2037 + "varrho", 2038 + "varsigma", 2039 + "varsubsetneq", 2040 + "varsubsetneqq", 2041 + "varsupsetneq", 2042 + "varsupsetneqq", 2043 + "vartheta", 2044 + "vartriangleleft", 2045 + "vartriangleright", 2046 + "vcy", 2047 + "vdash", 2048 + "vee", 2049 + "veebar", 2050 + "veeeq", 2051 + "vellip", 2052 + "verbar", 2053 + "vert", 2054 + "vfr", 2055 + "vltri", 2056 + "vnsub", 2057 + "vnsup", 2058 + "vopf", 2059 + "vprop", 2060 + "vrtri", 2061 + "vscr", 2062 + "vsubne", 2063 + "vsupne", 2064 + "vzigzag", 2065 + "wcirc", 2066 + "wedbar", 2067 + "wedge", 2068 + "wedgeq", 2069 + "weierp", 2070 + "wfr", 2071 + "wopf", 2072 + "wp", 2073 + "wr", 2074 + "wreath", 2075 + "wscr", 2076 + "xcap", 2077 + "xcirc", 2078 + "xcup", 2079 + "xdtri", 2080 + "xfr", 2081 + "xharr", 2082 + "xi", 2083 + "xlarr", 2084 + "xmap", 2085 + "xnis", 2086 + "xodot", 2087 + "xopf", 2088 + "xoplus", 2089 + "xotime", 2090 + "xrarr", 2091 + "xscr", 2092 + "xsqcup", 2093 + "xuplus", 2094 + "xutri", 2095 + "xvee", 2096 + "xwedge", 2097 + "yacute", 2098 + "yacy", 2099 + "ycirc", 2100 + "ycy", 2101 + "yen", 2102 + "yfr", 2103 + "yicy", 2104 + "yopf", 2105 + "yscr", 2106 + "yucy", 2107 + "yuml", 2108 + "zacute", 2109 + "zcaron", 2110 + "zcy", 2111 + "zdot", 2112 + "zeetrf", 2113 + "zeta", 2114 + "zfr", 2115 + "zhcy", 2116 + "zigrarr", 2117 + "zopf", 2118 + "zscr", 2119 + "zwj", 2120 + "zwnj", 2121 + ];