Tholp's bespoke website generator

Add list of reserved names to cut down on nothingburger warnings

Changed files
+2191 -23
src
+29 -11
src/macros/template.rs
···
use crate::{
console::error_skid,
project::ProjectContext,
+
reservednames::{RESERVED_NAMES_HTML, RESERVED_NAMES_MISC},
stringtools::{find_pattern, split_to_tokens, WhitespaceChecks},
types::{InputFile, Token},
};
···
//println!("{:?}", args);
if !self.allows_trailing_args && args.len() != self.args.len() {
-
// println!(
-
// "[ERROR] {:?}:{}; Template \"{}\" requires exactly {} arguments, got given {} ({:?})",
-
// context.file_for_index(origin_index).unwrap(),
-
// origin_line,
-
// self.symbol,
-
// self.args.len(),
-
// args.len(),
-
// args
-
// );
-
// exit(1);
-
error_skid(
context,
origin_index,
···
&format!(
"Attempted to make a template using a reserved name \"{}\"",
args[0]
+
),
+
);
+
}
+
}
+
+
for r in RESERVED_NAMES_HTML {
+
if **r == args[0] {
+
error_skid(
+
context,
+
origin_index,
+
origin_line,
+
&format!(
+
"Attempted to make a template using a reserved name \"{}\"",
+
r
+
),
+
);
+
}
+
}
+
+
for r in RESERVED_NAMES_MISC {
+
if **r == args[0] {
+
error_skid(
+
context,
+
origin_index,
+
origin_line,
+
&format!(
+
"Attempted to make a template using a reserved name \"{}\"",
+
r
),
);
}
+41 -12
src/main.rs
···
mod console;
mod macros;
mod project;
+
mod reservednames;
mod stringtools;
mod types;
+
use crate::{
+
args::ProgramArgs, project::FileGroup, reservednames::RESERVED_NAMES_MISC, types::Expand,
+
};
use clap::Parser;
use console::*;
use macros::MACRO_LIST;
use markdown::{CompileOptions, Constructs, Options, ParseOptions};
use project::{parse_project, FileIndexing, ProjectContext};
+
use reservednames::RESERVED_NAMES_HTML;
use std::{
env,
fs::{self},
···
};
use stringtools::{collect_arguments, collect_block, split_to_tokens, trim_whitespace_tokens};
use types::{InputFile, Token};
-
-
use crate::{args::ProgramArgs, types::Expand};
static DELIMITERS: &'static [char] = &[
' ', '\n', '\t', '(', ')', '{', '}', '[', ']', '<', '>', '\\', '\'', '\"', ';',
···
}
}
if !matched_macro {
-
warn_skid(
-
context,
-
file.tokens[file.working_index].origin_file,
-
file.tokens[file.working_index].line_number,
-
&format!(
-
"Token written as a function but no such function exists \"{}\"",
-
file.tokens[file.working_index].contents.trim()
-
),
-
);
+
let name = file.tokens[file.working_index]
+
.contents
+
.trim()
+
.to_lowercase();
+
let mut dont_error = name.len() <= 1;
+
{
+
if !dont_error && convert_html {
+
for reserved in RESERVED_NAMES_HTML {
+
if name[1..].starts_with(reserved) {
+
dont_error = true;
+
break;
+
}
+
}
+
}
+
+
if !dont_error {
+
for reserved in RESERVED_NAMES_MISC {
+
if name[1..].starts_with(reserved) {
+
dont_error = true;
+
break;
+
}
+
}
+
}
+
}
+
if !dont_error {
+
warn_skid(
+
context,
+
file.tokens[file.working_index].origin_file,
+
file.tokens[file.working_index].line_number,
+
&format!(
+
"Token written as a function but no such function exists \"{}\"",
+
file.tokens[file.working_index].contents.trim()
+
),
+
);
+
}
}
}
if !matched_macro {
···
fs::write(&file.file_out, &skid_output).expect("Couldn't write output to file");
}
ok_generic(&format!(
-
"{} written \n\n",
+
"{} written",
file.file_out
.to_str()
.unwrap_or("Couldnt Unwrap file_out name")
+2121
src/reservednames.rs
···
+
// Ignored when parsing macros, not allowed when making templates
+
+
// JS stuff
+
pub static RESERVED_NAMES_MISC: &'static [&'static str] = &["=", "==", "&"];
+
+
// HTML enties and things
+
pub static RESERVED_NAMES_HTML: &'static [&'static str] = &[
+
"--",
+
"aelig",
+
"amp",
+
"aacute",
+
"abreve",
+
"acirc",
+
"acy",
+
"afr",
+
"agrave",
+
"alpha",
+
"amacr",
+
"and",
+
"aogon",
+
"aopf",
+
"applyfunction",
+
"aring",
+
"ascr",
+
"assign",
+
"atilde",
+
"auml",
+
"backslash",
+
"barv",
+
"barwed",
+
"bcy",
+
"because",
+
"bernoullis",
+
"beta",
+
"bfr",
+
"bopf",
+
"breve",
+
"bscr",
+
"bumpeq",
+
"chcy",
+
"copy",
+
"cacute",
+
"cap",
+
"capitaldifferentiald",
+
"cayleys",
+
"ccaron",
+
"ccedil",
+
"ccirc",
+
"cconint",
+
"cdot",
+
"cedilla",
+
"centerdot",
+
"cfr",
+
"chi",
+
"circledot",
+
"circleminus",
+
"circleplus",
+
"circletimes",
+
"clockwisecontourintegral",
+
"closecurlydoublequote",
+
"closecurlyquote",
+
"colon",
+
"colone",
+
"congruent",
+
"conint",
+
"contourintegral",
+
"copf",
+
"coproduct",
+
"counterclockwisecontourintegral",
+
"cross",
+
"cscr",
+
"cup",
+
"cupcap",
+
"dd",
+
"ddotrahd",
+
"djcy",
+
"dscy",
+
"dzcy",
+
"dagger",
+
"darr",
+
"dashv",
+
"dcaron",
+
"dcy",
+
"del",
+
"delta",
+
"dfr",
+
"diacriticalacute",
+
"diacriticaldot",
+
"diacriticaldoubleacute",
+
"diacriticalgrave",
+
"diacriticaltilde",
+
"diamond",
+
"differentiald",
+
"doctype",
+
"dopf",
+
"dot",
+
"dotdot",
+
"dotequal",
+
"doublecontourintegral",
+
"doubledot",
+
"doubledownarrow",
+
"doubleleftarrow",
+
"doubleleftrightarrow",
+
"doublelefttee",
+
"doublelongleftarrow",
+
"doublelongleftrightarrow",
+
"doublelongrightarrow",
+
"doublerightarrow",
+
"doublerighttee",
+
"doubleuparrow",
+
"doubleupdownarrow",
+
"doubleverticalbar",
+
"downarrow",
+
"downarrowbar",
+
"downarrowuparrow",
+
"downbreve",
+
"downleftrightvector",
+
"downleftteevector",
+
"downleftvector",
+
"downleftvectorbar",
+
"downrightteevector",
+
"downrightvector",
+
"downrightvectorbar",
+
"downtee",
+
"downteearrow",
+
"downarrow",
+
"dscr",
+
"dstrok",
+
"eng",
+
"eth",
+
"eacute",
+
"ecaron",
+
"ecirc",
+
"ecy",
+
"edot",
+
"efr",
+
"egrave",
+
"element",
+
"emacr",
+
"emptysmallsquare",
+
"emptyverysmallsquare",
+
"eogon",
+
"eopf",
+
"epsilon",
+
"equal",
+
"equaltilde",
+
"equilibrium",
+
"escr",
+
"esim",
+
"eta",
+
"euml",
+
"exists",
+
"exponentiale",
+
"fcy",
+
"ffr",
+
"filledsmallsquare",
+
"filledverysmallsquare",
+
"fopf",
+
"forall",
+
"fouriertrf",
+
"fscr",
+
"gjcy",
+
"gt",
+
"gamma",
+
"gammad",
+
"gbreve",
+
"gcedil",
+
"gcirc",
+
"gcy",
+
"gdot",
+
"gfr",
+
"gg",
+
"gopf",
+
"greaterequal",
+
"greaterequalless",
+
"greaterfullequal",
+
"greatergreater",
+
"greaterless",
+
"greaterslantequal",
+
"greatertilde",
+
"gscr",
+
"gt",
+
"hardcy",
+
"hacek",
+
"hat",
+
"hcirc",
+
"hfr",
+
"hilbertspace",
+
"hopf",
+
"horizontalline",
+
"hscr",
+
"hstrok",
+
"humpdownhump",
+
"humpequal",
+
"iecy",
+
"ijlig",
+
"iocy",
+
"iacute",
+
"icirc",
+
"icy",
+
"idot",
+
"ifr",
+
"igrave",
+
"im",
+
"imacr",
+
"imaginaryi",
+
"implies",
+
"int",
+
"integral",
+
"intersection",
+
"invisiblecomma",
+
"invisibletimes",
+
"iogon",
+
"iopf",
+
"iota",
+
"iscr",
+
"itilde",
+
"iukcy",
+
"iuml",
+
"jcirc",
+
"jcy",
+
"jfr",
+
"jopf",
+
"jscr",
+
"jsercy",
+
"jukcy",
+
"khcy",
+
"kjcy",
+
"kappa",
+
"kcedil",
+
"kcy",
+
"kfr",
+
"kopf",
+
"kscr",
+
"ljcy",
+
"lt",
+
"lacute",
+
"lambda",
+
"lang",
+
"laplacetrf",
+
"larr",
+
"lcaron",
+
"lcedil",
+
"lcy",
+
"leftanglebracket",
+
"leftarrow",
+
"leftarrowbar",
+
"leftarrowrightarrow",
+
"leftceiling",
+
"leftdoublebracket",
+
"leftdownteevector",
+
"leftdownvector",
+
"leftdownvectorbar",
+
"leftfloor",
+
"leftrightarrow",
+
"leftrightvector",
+
"lefttee",
+
"leftteearrow",
+
"leftteevector",
+
"lefttriangle",
+
"lefttrianglebar",
+
"lefttriangleequal",
+
"leftupdownvector",
+
"leftupteevector",
+
"leftupvector",
+
"leftupvectorbar",
+
"leftvector",
+
"leftvectorbar",
+
"leftarrow",
+
"leftrightarrow",
+
"lessequalgreater",
+
"lessfullequal",
+
"lessgreater",
+
"lessless",
+
"lessslantequal",
+
"lesstilde",
+
"lfr",
+
"ll",
+
"lleftarrow",
+
"lmidot",
+
"longleftarrow",
+
"longleftrightarrow",
+
"longrightarrow",
+
"longleftarrow",
+
"longleftrightarrow",
+
"longrightarrow",
+
"lopf",
+
"lowerleftarrow",
+
"lowerrightarrow",
+
"lscr",
+
"lsh",
+
"lstrok",
+
"lt",
+
"map",
+
"mcy",
+
"mediumspace",
+
"mellintrf",
+
"mfr",
+
"minusplus",
+
"mopf",
+
"mscr",
+
"mu",
+
"njcy",
+
"nacute",
+
"ncaron",
+
"ncedil",
+
"ncy",
+
"negativemediumspace",
+
"negativethickspace",
+
"negativethinspace",
+
"negativeverythinspace",
+
"nestedgreatergreater",
+
"nestedlessless",
+
"newline",
+
"nfr",
+
"nobreak",
+
"nonbreakingspace",
+
"nopf",
+
"not",
+
"notcongruent",
+
"notcupcap",
+
"notdoubleverticalbar",
+
"notelement",
+
"notequal",
+
"notequaltilde",
+
"notexists",
+
"notgreater",
+
"notgreaterequal",
+
"notgreaterfullequal",
+
"notgreatergreater",
+
"notgreaterless",
+
"notgreaterslantequal",
+
"notgreatertilde",
+
"nothumpdownhump",
+
"nothumpequal",
+
"notlefttriangle",
+
"notlefttrianglebar",
+
"notlefttriangleequal",
+
"notless",
+
"notlessequal",
+
"notlessgreater",
+
"notlessless",
+
"notlessslantequal",
+
"notlesstilde",
+
"notnestedgreatergreater",
+
"notnestedlessless",
+
"notprecedes",
+
"notprecedesequal",
+
"notprecedesslantequal",
+
"notreverseelement",
+
"notrighttriangle",
+
"notrighttrianglebar",
+
"notrighttriangleequal",
+
"notsquaresubset",
+
"notsquaresubsetequal",
+
"notsquaresuperset",
+
"notsquaresupersetequal",
+
"notsubset",
+
"notsubsetequal",
+
"notsucceeds",
+
"notsucceedsequal",
+
"notsucceedsslantequal",
+
"notsucceedstilde",
+
"notsuperset",
+
"notsupersetequal",
+
"nottilde",
+
"nottildeequal",
+
"nottildefullequal",
+
"nottildetilde",
+
"notverticalbar",
+
"nscr",
+
"ntilde",
+
"nu",
+
"oelig",
+
"oacute",
+
"ocirc",
+
"ocy",
+
"odblac",
+
"ofr",
+
"ograve",
+
"omacr",
+
"omega",
+
"omicron",
+
"oopf",
+
"opencurlydoublequote",
+
"opencurlyquote",
+
"or",
+
"oscr",
+
"oslash",
+
"otilde",
+
"otimes",
+
"ouml",
+
"overbar",
+
"overbrace",
+
"overbracket",
+
"overparenthesis",
+
"partiald",
+
"pcy",
+
"pfr",
+
"phi",
+
"pi",
+
"plusminus",
+
"poincareplane",
+
"popf",
+
"pr",
+
"precedes",
+
"precedesequal",
+
"precedesslantequal",
+
"precedestilde",
+
"prime",
+
"product",
+
"proportion",
+
"proportional",
+
"pscr",
+
"psi",
+
"quot",
+
"qfr",
+
"qopf",
+
"qscr",
+
"rbarr",
+
"reg",
+
"racute",
+
"rang",
+
"rarr",
+
"rarrtl",
+
"rcaron",
+
"rcedil",
+
"rcy",
+
"re",
+
"reverseelement",
+
"reverseequilibrium",
+
"reverseupequilibrium",
+
"rfr",
+
"rho",
+
"rightanglebracket",
+
"rightarrow",
+
"rightarrowbar",
+
"rightarrowleftarrow",
+
"rightceiling",
+
"rightdoublebracket",
+
"rightdownteevector",
+
"rightdownvector",
+
"rightdownvectorbar",
+
"rightfloor",
+
"righttee",
+
"rightteearrow",
+
"rightteevector",
+
"righttriangle",
+
"righttrianglebar",
+
"righttriangleequal",
+
"rightupdownvector",
+
"rightupteevector",
+
"rightupvector",
+
"rightupvectorbar",
+
"rightvector",
+
"rightvectorbar",
+
"rightarrow",
+
"ropf",
+
"roundimplies",
+
"rrightarrow",
+
"rscr",
+
"rsh",
+
"ruledelayed",
+
"shchcy",
+
"shcy",
+
"softcy",
+
"sacute",
+
"sc",
+
"scaron",
+
"scedil",
+
"scirc",
+
"scy",
+
"sfr",
+
"shortdownarrow",
+
"shortleftarrow",
+
"shortrightarrow",
+
"shortuparrow",
+
"sigma",
+
"smallcircle",
+
"sopf",
+
"sqrt",
+
"square",
+
"squareintersection",
+
"squaresubset",
+
"squaresubsetequal",
+
"squaresuperset",
+
"squaresupersetequal",
+
"squareunion",
+
"sscr",
+
"star",
+
"sub",
+
"subset",
+
"subsetequal",
+
"succeeds",
+
"succeedsequal",
+
"succeedsslantequal",
+
"succeedstilde",
+
"suchthat",
+
"sum",
+
"sup",
+
"superset",
+
"supersetequal",
+
"supset",
+
"thorn",
+
"trade",
+
"tshcy",
+
"tscy",
+
"tab",
+
"tau",
+
"tcaron",
+
"tcedil",
+
"tcy",
+
"tfr",
+
"therefore",
+
"theta",
+
"thickspace",
+
"thinspace",
+
"tilde",
+
"tildeequal",
+
"tildefullequal",
+
"tildetilde",
+
"topf",
+
"tripledot",
+
"tscr",
+
"tstrok",
+
"uacute",
+
"uarr",
+
"uarrocir",
+
"ubrcy",
+
"ubreve",
+
"ucirc",
+
"ucy",
+
"udblac",
+
"ufr",
+
"ugrave",
+
"umacr",
+
"underbar",
+
"underbrace",
+
"underbracket",
+
"underparenthesis",
+
"union",
+
"unionplus",
+
"uogon",
+
"uopf",
+
"uparrow",
+
"uparrowbar",
+
"uparrowdownarrow",
+
"updownarrow",
+
"upequilibrium",
+
"uptee",
+
"upteearrow",
+
"uparrow",
+
"updownarrow",
+
"upperleftarrow",
+
"upperrightarrow",
+
"upsi",
+
"upsilon",
+
"uring",
+
"uscr",
+
"utilde",
+
"uuml",
+
"vdash",
+
"vbar",
+
"vcy",
+
"vdash",
+
"vdashl",
+
"vee",
+
"verbar",
+
"vert",
+
"verticalbar",
+
"verticalline",
+
"verticalseparator",
+
"verticaltilde",
+
"verythinspace",
+
"vfr",
+
"vopf",
+
"vscr",
+
"vvdash",
+
"wcirc",
+
"wedge",
+
"wfr",
+
"wopf",
+
"wscr",
+
"xfr",
+
"xi",
+
"xopf",
+
"xscr",
+
"yacy",
+
"yicy",
+
"yucy",
+
"yacute",
+
"ycirc",
+
"ycy",
+
"yfr",
+
"yopf",
+
"yscr",
+
"yuml",
+
"zhcy",
+
"zacute",
+
"zcaron",
+
"zcy",
+
"zdot",
+
"zerowidthspace",
+
"zeta",
+
"zfr",
+
"zopf",
+
"zscr",
+
"aacute",
+
"abreve",
+
"ac",
+
"ace",
+
"acd",
+
"acirc",
+
"acute",
+
"acy",
+
"aelig",
+
"af",
+
"afr",
+
"agrave",
+
"alefsym",
+
"aleph",
+
"alpha",
+
"amacr",
+
"amalg",
+
"amp",
+
"and",
+
"andand",
+
"andd",
+
"andslope",
+
"andv",
+
"ang",
+
"ange",
+
"angle",
+
"angmsd",
+
"angmsdaa",
+
"angmsdab",
+
"angmsdac",
+
"angmsdad",
+
"angmsdae",
+
"angmsdaf",
+
"angmsdag",
+
"angmsdah",
+
"angrt",
+
"angrtvb",
+
"angrtvbd",
+
"angsph",
+
"angst",
+
"angzarr",
+
"aogon",
+
"aopf",
+
"ap",
+
"ape",
+
"apacir",
+
"ape",
+
"apid",
+
"apos",
+
"approx",
+
"approxeq",
+
"aring",
+
"ascr",
+
"ast",
+
"asymp",
+
"asympeq",
+
"atilde",
+
"auml",
+
"awconint",
+
"awint",
+
"bnot",
+
"backcong",
+
"backepsilon",
+
"backprime",
+
"backsim",
+
"backsimeq",
+
"barvee",
+
"barwed",
+
"barwedge",
+
"bbrk",
+
"bbrktbrk",
+
"bcong",
+
"bcy",
+
"bdquo",
+
"becaus",
+
"because",
+
"bemptyv",
+
"bepsi",
+
"bernou",
+
"beta",
+
"beth",
+
"between",
+
"bfr",
+
"bigcap",
+
"bigcirc",
+
"bigcup",
+
"bigodot",
+
"bigoplus",
+
"bigotimes",
+
"bigsqcup",
+
"bigstar",
+
"bigtriangledown",
+
"bigtriangleup",
+
"biguplus",
+
"bigvee",
+
"bigwedge",
+
"bkarow",
+
"blacklozenge",
+
"blacksquare",
+
"blacktriangle",
+
"blacktriangledown",
+
"blacktriangleleft",
+
"blacktriangleright",
+
"blank",
+
"blk12",
+
"blk14",
+
"blk34",
+
"block",
+
"bne",
+
"bnequiv",
+
"bnot",
+
"bopf",
+
"bot",
+
"bottom",
+
"bowtie",
+
"boxdl",
+
"boxdr",
+
"boxdl",
+
"boxdr",
+
"boxh",
+
"boxhd",
+
"boxhu",
+
"boxhd",
+
"boxhu",
+
"boxul",
+
"boxur",
+
"boxul",
+
"boxur",
+
"boxv",
+
"boxvh",
+
"boxvl",
+
"boxvr",
+
"boxvh",
+
"boxvl",
+
"boxvr",
+
"boxbox",
+
"boxdl",
+
"boxdr",
+
"boxdl",
+
"boxdr",
+
"boxh",
+
"boxhd",
+
"boxhu",
+
"boxhd",
+
"boxhu",
+
"boxminus",
+
"boxplus",
+
"boxtimes",
+
"boxul",
+
"boxur",
+
"boxul",
+
"boxur",
+
"boxv",
+
"boxvh",
+
"boxvl",
+
"boxvr",
+
"boxvh",
+
"boxvl",
+
"boxvr",
+
"bprime",
+
"breve",
+
"brvbar",
+
"bscr",
+
"bsemi",
+
"bsim",
+
"bsime",
+
"bsol",
+
"bsolb",
+
"bsolhsub",
+
"bull",
+
"bullet",
+
"bump",
+
"bumpe",
+
"bumpeq",
+
"cacute",
+
"cap",
+
"capand",
+
"capbrcup",
+
"capcap",
+
"capcup",
+
"capdot",
+
"caps",
+
"caret",
+
"caron",
+
"ccaps",
+
"ccaron",
+
"ccedil",
+
"ccirc",
+
"ccups",
+
"ccupssm",
+
"cdot",
+
"cedil",
+
"cemptyv",
+
"cent",
+
"centerdot",
+
"cfr",
+
"chcy",
+
"check",
+
"checkmark",
+
"chi",
+
"cir",
+
"cire",
+
"circ",
+
"circeq",
+
"circlearrowleft",
+
"circlearrowright",
+
"circledr",
+
"circleds",
+
"circledast",
+
"circledcirc",
+
"circleddash",
+
"cire",
+
"cirfnint",
+
"cirmid",
+
"cirscir",
+
"clubs",
+
"clubsuit",
+
"colon",
+
"colone",
+
"coloneq",
+
"comma",
+
"commat",
+
"comp",
+
"compfn",
+
"complement",
+
"complexes",
+
"cong",
+
"congdot",
+
"conint",
+
"copf",
+
"coprod",
+
"copy",
+
"copysr",
+
"crarr",
+
"cross",
+
"cscr",
+
"csub",
+
"csube",
+
"csup",
+
"csupe",
+
"ctdot",
+
"cudarrl",
+
"cudarrr",
+
"cuepr",
+
"cuesc",
+
"cularr",
+
"cularrp",
+
"cup",
+
"cupbrcap",
+
"cupcap",
+
"cupcup",
+
"cupdot",
+
"cupor",
+
"cups",
+
"curarr",
+
"curarrm",
+
"curlyeqprec",
+
"curlyeqsucc",
+
"curlyvee",
+
"curlywedge",
+
"curren",
+
"curvearrowleft",
+
"curvearrowright",
+
"cuvee",
+
"cuwed",
+
"cwconint",
+
"cwint",
+
"cylcty",
+
"darr",
+
"dhar",
+
"dagger",
+
"daleth",
+
"darr",
+
"dash",
+
"dashv",
+
"dbkarow",
+
"dblac",
+
"dcaron",
+
"dcy",
+
"dd",
+
"ddagger",
+
"ddarr",
+
"ddotseq",
+
"deg",
+
"delta",
+
"demptyv",
+
"dfisht",
+
"dfr",
+
"dharl",
+
"dharr",
+
"diam",
+
"diamond",
+
"diamondsuit",
+
"diams",
+
"die",
+
"digamma",
+
"disin",
+
"div",
+
"divide",
+
"divideontimes",
+
"divonx",
+
"djcy",
+
"dlcorn",
+
"dlcrop",
+
"dollar",
+
"dopf",
+
"dot",
+
"doteq",
+
"doteqdot",
+
"dotminus",
+
"dotplus",
+
"dotsquare",
+
"doublebarwedge",
+
"downarrow",
+
"downdownarrows",
+
"downharpoonleft",
+
"downharpoonright",
+
"drbkarow",
+
"drcorn",
+
"drcrop",
+
"dscr",
+
"dscy",
+
"dsol",
+
"dstrok",
+
"dtdot",
+
"dtri",
+
"dtrif",
+
"duarr",
+
"duhar",
+
"dwangle",
+
"dzcy",
+
"dzigrarr",
+
"eddot",
+
"edot",
+
"eacute",
+
"easter",
+
"ecaron",
+
"ecir",
+
"ecirc",
+
"ecolon",
+
"ecy",
+
"edot",
+
"ee",
+
"efdot",
+
"efr",
+
"eg",
+
"egrave",
+
"egs",
+
"egsdot",
+
"el",
+
"elinters",
+
"ell",
+
"els",
+
"elsdot",
+
"emacr",
+
"empty",
+
"emptyset",
+
"emptyv",
+
"emsp13",
+
"emsp14",
+
"emsp",
+
"eng",
+
"ensp",
+
"eogon",
+
"eopf",
+
"epar",
+
"eparsl",
+
"eplus",
+
"epsi",
+
"epsilon",
+
"epsiv",
+
"eqcirc",
+
"eqcolon",
+
"eqsim",
+
"eqslantgtr",
+
"eqslantless",
+
"equals",
+
"equest",
+
"equiv",
+
"equivdd",
+
"eqvparsl",
+
"erdot",
+
"erarr",
+
"escr",
+
"esdot",
+
"esim",
+
"eta",
+
"eth",
+
"euml",
+
"euro",
+
"excl",
+
"exist",
+
"expectation",
+
"exponentiale",
+
"fallingdotseq",
+
"fcy",
+
"female",
+
"ffilig",
+
"fflig",
+
"ffllig",
+
"ffr",
+
"filig",
+
"fjlig",
+
"flat",
+
"fllig",
+
"fltns",
+
"fnof",
+
"fopf",
+
"forall",
+
"fork",
+
"forkv",
+
"fpartint",
+
"frac12",
+
"frac13",
+
"frac14",
+
"frac15",
+
"frac16",
+
"frac18",
+
"frac23",
+
"frac25",
+
"frac34",
+
"frac35",
+
"frac38",
+
"frac45",
+
"frac56",
+
"frac58",
+
"frac78",
+
"frasl",
+
"frown",
+
"fscr",
+
"ge",
+
"gel",
+
"gacute",
+
"gamma",
+
"gammad",
+
"gap",
+
"gbreve",
+
"gcirc",
+
"gcy",
+
"gdot",
+
"ge",
+
"gel",
+
"geq",
+
"geqq",
+
"geqslant",
+
"ges",
+
"gescc",
+
"gesdot",
+
"gesdoto",
+
"gesdotol",
+
"gesl",
+
"gesles",
+
"gfr",
+
"gg",
+
"ggg",
+
"gimel",
+
"gjcy",
+
"gl",
+
"gle",
+
"gla",
+
"glj",
+
"gne",
+
"gnap",
+
"gnapprox",
+
"gne",
+
"gneq",
+
"gneqq",
+
"gnsim",
+
"gopf",
+
"grave",
+
"gscr",
+
"gsim",
+
"gsime",
+
"gsiml",
+
"gt",
+
"gtcc",
+
"gtcir",
+
"gtdot",
+
"gtlpar",
+
"gtquest",
+
"gtrapprox",
+
"gtrarr",
+
"gtrdot",
+
"gtreqless",
+
"gtreqqless",
+
"gtrless",
+
"gtrsim",
+
"gvertneqq",
+
"gvne",
+
"harr",
+
"hairsp",
+
"half",
+
"hamilt",
+
"hardcy",
+
"harr",
+
"harrcir",
+
"harrw",
+
"hbar",
+
"hcirc",
+
"hearts",
+
"heartsuit",
+
"hellip",
+
"hercon",
+
"hfr",
+
"hksearow",
+
"hkswarow",
+
"hoarr",
+
"homtht",
+
"hookleftarrow",
+
"hookrightarrow",
+
"hopf",
+
"horbar",
+
"hscr",
+
"hslash",
+
"hstrok",
+
"hybull",
+
"hyphen",
+
"iacute",
+
"ic",
+
"icirc",
+
"icy",
+
"iecy",
+
"iexcl",
+
"iff",
+
"ifr",
+
"igrave",
+
"ii",
+
"iiiint",
+
"iiint",
+
"iinfin",
+
"iiota",
+
"ijlig",
+
"imacr",
+
"image",
+
"imagline",
+
"imagpart",
+
"imath",
+
"imof",
+
"imped",
+
"in",
+
"incare",
+
"infin",
+
"infintie",
+
"inodot",
+
"int",
+
"intcal",
+
"integers",
+
"intercal",
+
"intlarhk",
+
"intprod",
+
"iocy",
+
"iogon",
+
"iopf",
+
"iota",
+
"iprod",
+
"iquest",
+
"iscr",
+
"isin",
+
"isine",
+
"isindot",
+
"isins",
+
"isinsv",
+
"isinv",
+
"it",
+
"itilde",
+
"iukcy",
+
"iuml",
+
"jcirc",
+
"jcy",
+
"jfr",
+
"jmath",
+
"jopf",
+
"jscr",
+
"jsercy",
+
"jukcy",
+
"kappa",
+
"kappav",
+
"kcedil",
+
"kcy",
+
"kfr",
+
"kgreen",
+
"khcy",
+
"kjcy",
+
"kopf",
+
"kscr",
+
"laarr",
+
"larr",
+
"latail",
+
"lbarr",
+
"le",
+
"leg",
+
"lhar",
+
"lacute",
+
"laemptyv",
+
"lagran",
+
"lambda",
+
"lang",
+
"langd",
+
"langle",
+
"lap",
+
"laquo",
+
"larr",
+
"larrb",
+
"larrbfs",
+
"larrfs",
+
"larrhk",
+
"larrlp",
+
"larrpl",
+
"larrsim",
+
"larrtl",
+
"lat",
+
"latail",
+
"late",
+
"lates",
+
"lbarr",
+
"lbbrk",
+
"lbrace",
+
"lbrack",
+
"lbrke",
+
"lbrksld",
+
"lbrkslu",
+
"lcaron",
+
"lcedil",
+
"lceil",
+
"lcub",
+
"lcy",
+
"ldca",
+
"ldquo",
+
"ldquor",
+
"ldrdhar",
+
"ldrushar",
+
"ldsh",
+
"le",
+
"leftarrow",
+
"leftarrowtail",
+
"leftharpoondown",
+
"leftharpoonup",
+
"leftleftarrows",
+
"leftrightarrow",
+
"leftrightarrows",
+
"leftrightharpoons",
+
"leftrightsquigarrow",
+
"leftthreetimes",
+
"leg",
+
"leq",
+
"leqq",
+
"leqslant",
+
"les",
+
"lescc",
+
"lesdot",
+
"lesdoto",
+
"lesdotor",
+
"lesg",
+
"lesges",
+
"lessapprox",
+
"lessdot",
+
"lesseqgtr",
+
"lesseqqgtr",
+
"lessgtr",
+
"lesssim",
+
"lfisht",
+
"lfloor",
+
"lfr",
+
"lg",
+
"lge",
+
"lhard",
+
"lharu",
+
"lharul",
+
"lhblk",
+
"ljcy",
+
"ll",
+
"llarr",
+
"llcorner",
+
"llhard",
+
"lltri",
+
"lmidot",
+
"lmoust",
+
"lmoustache",
+
"lne",
+
"lnap",
+
"lnapprox",
+
"lne",
+
"lneq",
+
"lneqq",
+
"lnsim",
+
"loang",
+
"loarr",
+
"lobrk",
+
"longleftarrow",
+
"longleftrightarrow",
+
"longmapsto",
+
"longrightarrow",
+
"looparrowleft",
+
"looparrowright",
+
"lopar",
+
"lopf",
+
"loplus",
+
"lotimes",
+
"lowast",
+
"lowbar",
+
"loz",
+
"lozenge",
+
"lozf",
+
"lpar",
+
"lparlt",
+
"lrarr",
+
"lrcorner",
+
"lrhar",
+
"lrhard",
+
"lrm",
+
"lrtri",
+
"lsaquo",
+
"lscr",
+
"lsh",
+
"lsim",
+
"lsime",
+
"lsimg",
+
"lsqb",
+
"lsquo",
+
"lsquor",
+
"lstrok",
+
"lt",
+
"ltcc",
+
"ltcir",
+
"ltdot",
+
"lthree",
+
"ltimes",
+
"ltlarr",
+
"ltquest",
+
"ltrpar",
+
"ltri",
+
"ltrie",
+
"ltrif",
+
"lurdshar",
+
"luruhar",
+
"lvertneqq",
+
"lvne",
+
"mddot",
+
"macr",
+
"male",
+
"malt",
+
"maltese",
+
"map",
+
"mapsto",
+
"mapstodown",
+
"mapstoleft",
+
"mapstoup",
+
"marker",
+
"mcomma",
+
"mcy",
+
"mdash",
+
"measuredangle",
+
"mfr",
+
"mho",
+
"micro",
+
"mid",
+
"midast",
+
"midcir",
+
"middot",
+
"minus",
+
"minusb",
+
"minusd",
+
"minusdu",
+
"mlcp",
+
"mldr",
+
"mnplus",
+
"models",
+
"mopf",
+
"mp",
+
"mscr",
+
"mstpos",
+
"mu",
+
"multimap",
+
"mumap",
+
"ngg",
+
"ngt",
+
"ngtv",
+
"nleftarrow",
+
"nleftrightarrow",
+
"nll",
+
"nlt",
+
"nltv",
+
"nrightarrow",
+
"nvdash",
+
"nabla",
+
"nacute",
+
"nang",
+
"nap",
+
"nape",
+
"napid",
+
"napos",
+
"napprox",
+
"natur",
+
"natural",
+
"naturals",
+
"nbsp",
+
"nbump",
+
"nbumpe",
+
"ncap",
+
"ncaron",
+
"ncedil",
+
"ncong",
+
"ncongdot",
+
"ncup",
+
"ncy",
+
"ndash",
+
"ne",
+
"nearr",
+
"nearhk",
+
"nearr",
+
"nearrow",
+
"nedot",
+
"nequiv",
+
"nesear",
+
"nesim",
+
"nexist",
+
"nexists",
+
"nfr",
+
"nge",
+
"ngeq",
+
"ngeqq",
+
"ngeqslant",
+
"nges",
+
"ngsim",
+
"ngt",
+
"ngtr",
+
"nharr",
+
"nhpar",
+
"ni",
+
"nis",
+
"nisd",
+
"niv",
+
"njcy",
+
"nlarr",
+
"nle",
+
"nlarr",
+
"nldr",
+
"nle",
+
"nleftarrow",
+
"nleftrightarrow",
+
"nleq",
+
"nleqq",
+
"nleqslant",
+
"nles",
+
"nless",
+
"nlsim",
+
"nlt",
+
"nltri",
+
"nltrie",
+
"nmid",
+
"nopf",
+
"not",
+
"notin",
+
"notine",
+
"notindot",
+
"notinva",
+
"notinvb",
+
"notinvc",
+
"notni",
+
"notniva",
+
"notnivb",
+
"notnivc",
+
"npar",
+
"nparallel",
+
"nparsl",
+
"npart",
+
"npolint",
+
"npr",
+
"nprcue",
+
"npre",
+
"nprec",
+
"npreceq",
+
"nrarr",
+
"nrarrc",
+
"nrarrw",
+
"nrightarrow",
+
"nrtri",
+
"nrtrie",
+
"nsc",
+
"nsccue",
+
"nsce",
+
"nscr",
+
"nshortmid",
+
"nshortparallel",
+
"nsim",
+
"nsime",
+
"nsimeq",
+
"nsmid",
+
"nspar",
+
"nsqsube",
+
"nsqsupe",
+
"nsub",
+
"nsube",
+
"nsubset",
+
"nsubseteq",
+
"nsubseteqq",
+
"nsucc",
+
"nsucceq",
+
"nsup",
+
"nsupe",
+
"nsupset",
+
"nsupseteq",
+
"nsupseteqq",
+
"ntgl",
+
"ntilde",
+
"ntlg",
+
"ntriangleleft",
+
"ntrianglelefteq",
+
"ntriangleright",
+
"ntrianglerighteq",
+
"nu",
+
"num",
+
"numero",
+
"numsp",
+
"nvdash",
+
"nvharr",
+
"nvap",
+
"nvdash",
+
"nvge",
+
"nvgt",
+
"nvinfin",
+
"nvlarr",
+
"nvle",
+
"nvlt",
+
"nvltrie",
+
"nvrarr",
+
"nvrtrie",
+
"nvsim",
+
"nwarr",
+
"nwarhk",
+
"nwarr",
+
"nwarrow",
+
"nwnear",
+
"os",
+
"oacute",
+
"oast",
+
"ocir",
+
"ocirc",
+
"ocy",
+
"odash",
+
"odblac",
+
"odiv",
+
"odot",
+
"odsold",
+
"oelig",
+
"ofcir",
+
"ofr",
+
"ogon",
+
"ograve",
+
"ogt",
+
"ohbar",
+
"ohm",
+
"oint",
+
"olarr",
+
"olcir",
+
"olcross",
+
"oline",
+
"olt",
+
"omacr",
+
"omega",
+
"omicron",
+
"omid",
+
"ominus",
+
"oopf",
+
"opar",
+
"operp",
+
"oplus",
+
"or",
+
"orarr",
+
"ord",
+
"order",
+
"orderof",
+
"ordf",
+
"ordm",
+
"origof",
+
"oror",
+
"orslope",
+
"orv",
+
"oscr",
+
"oslash",
+
"osol",
+
"otilde",
+
"otimes",
+
"otimesas",
+
"ouml",
+
"ovbar",
+
"par",
+
"para",
+
"parallel",
+
"parsim",
+
"parsl",
+
"part",
+
"pcy",
+
"percnt",
+
"period",
+
"permil",
+
"perp",
+
"pertenk",
+
"pfr",
+
"phi",
+
"phiv",
+
"phmmat",
+
"phone",
+
"pi",
+
"pitchfork",
+
"piv",
+
"planck",
+
"planckh",
+
"plankv",
+
"plus",
+
"plusacir",
+
"plusb",
+
"pluscir",
+
"plusdo",
+
"plusdu",
+
"pluse",
+
"plusmn",
+
"plussim",
+
"plustwo",
+
"pm",
+
"pointint",
+
"popf",
+
"pound",
+
"pr",
+
"pre",
+
"prap",
+
"prcue",
+
"pre",
+
"prec",
+
"precapprox",
+
"preccurlyeq",
+
"preceq",
+
"precnapprox",
+
"precneqq",
+
"precnsim",
+
"precsim",
+
"prime",
+
"primes",
+
"prne",
+
"prnap",
+
"prnsim",
+
"prod",
+
"profalar",
+
"profline",
+
"profsurf",
+
"prop",
+
"propto",
+
"prsim",
+
"prurel",
+
"pscr",
+
"psi",
+
"puncsp",
+
"qfr",
+
"qint",
+
"qopf",
+
"qprime",
+
"qscr",
+
"quaternions",
+
"quatint",
+
"quest",
+
"questeq",
+
"quot",
+
"raarr",
+
"rarr",
+
"ratail",
+
"rbarr",
+
"rhar",
+
"race",
+
"racute",
+
"radic",
+
"raemptyv",
+
"rang",
+
"rangd",
+
"range",
+
"rangle",
+
"raquo",
+
"rarr",
+
"rarrap",
+
"rarrb",
+
"rarrbfs",
+
"rarrc",
+
"rarrfs",
+
"rarrhk",
+
"rarrlp",
+
"rarrpl",
+
"rarrsim",
+
"rarrtl",
+
"rarrw",
+
"ratail",
+
"ratio",
+
"rationals",
+
"rbarr",
+
"rbbrk",
+
"rbrace",
+
"rbrack",
+
"rbrke",
+
"rbrksld",
+
"rbrkslu",
+
"rcaron",
+
"rcedil",
+
"rceil",
+
"rcub",
+
"rcy",
+
"rdca",
+
"rdldhar",
+
"rdquo",
+
"rdquor",
+
"rdsh",
+
"real",
+
"realine",
+
"realpart",
+
"reals",
+
"rect",
+
"reg",
+
"rfisht",
+
"rfloor",
+
"rfr",
+
"rhard",
+
"rharu",
+
"rharul",
+
"rho",
+
"rhov",
+
"rightarrow",
+
"rightarrowtail",
+
"rightharpoondown",
+
"rightharpoonup",
+
"rightleftarrows",
+
"rightleftharpoons",
+
"rightrightarrows",
+
"rightsquigarrow",
+
"rightthreetimes",
+
"ring",
+
"risingdotseq",
+
"rlarr",
+
"rlhar",
+
"rlm",
+
"rmoust",
+
"rmoustache",
+
"rnmid",
+
"roang",
+
"roarr",
+
"robrk",
+
"ropar",
+
"ropf",
+
"roplus",
+
"rotimes",
+
"rpar",
+
"rpargt",
+
"rppolint",
+
"rrarr",
+
"rsaquo",
+
"rscr",
+
"rsh",
+
"rsqb",
+
"rsquo",
+
"rsquor",
+
"rthree",
+
"rtimes",
+
"rtri",
+
"rtrie",
+
"rtrif",
+
"rtriltri",
+
"ruluhar",
+
"rx",
+
"sacute",
+
"sbquo",
+
"sc",
+
"sce",
+
"scap",
+
"scaron",
+
"sccue",
+
"sce",
+
"scedil",
+
"scirc",
+
"scne",
+
"scnap",
+
"scnsim",
+
"scpolint",
+
"scsim",
+
"scy",
+
"sdot",
+
"sdotb",
+
"sdote",
+
"searr",
+
"searhk",
+
"searr",
+
"searrow",
+
"sect",
+
"semi",
+
"seswar",
+
"setminus",
+
"setmn",
+
"sext",
+
"sfr",
+
"sfrown",
+
"sharp",
+
"shchcy",
+
"shcy",
+
"shortmid",
+
"shortparallel",
+
"shy",
+
"sigma",
+
"sigmaf",
+
"sigmav",
+
"sim",
+
"simdot",
+
"sime",
+
"simeq",
+
"simg",
+
"simge",
+
"siml",
+
"simle",
+
"simne",
+
"simplus",
+
"simrarr",
+
"slarr",
+
"smallsetminus",
+
"smashp",
+
"smeparsl",
+
"smid",
+
"smile",
+
"smt",
+
"smte",
+
"smtes",
+
"softcy",
+
"sol",
+
"solb",
+
"solbar",
+
"sopf",
+
"spades",
+
"spadesuit",
+
"spar",
+
"sqcap",
+
"sqcaps",
+
"sqcup",
+
"sqcups",
+
"sqsub",
+
"sqsube",
+
"sqsubset",
+
"sqsubseteq",
+
"sqsup",
+
"sqsupe",
+
"sqsupset",
+
"sqsupseteq",
+
"squ",
+
"square",
+
"squarf",
+
"squf",
+
"srarr",
+
"sscr",
+
"ssetmn",
+
"ssmile",
+
"sstarf",
+
"star",
+
"starf",
+
"straightepsilon",
+
"straightphi",
+
"strns",
+
"sub",
+
"sube",
+
"subdot",
+
"sube",
+
"subedot",
+
"submult",
+
"subne",
+
"subplus",
+
"subrarr",
+
"subset",
+
"subseteq",
+
"subseteqq",
+
"subsetneq",
+
"subsetneqq",
+
"subsim",
+
"subsub",
+
"subsup",
+
"succ",
+
"succapprox",
+
"succcurlyeq",
+
"succeq",
+
"succnapprox",
+
"succneqq",
+
"succnsim",
+
"succsim",
+
"sum",
+
"sung",
+
"sup1",
+
"sup2",
+
"sup3",
+
"sup",
+
"supe",
+
"supdot",
+
"supdsub",
+
"supe",
+
"supedot",
+
"suphsol",
+
"suphsub",
+
"suplarr",
+
"supmult",
+
"supne",
+
"supplus",
+
"supset",
+
"supseteq",
+
"supseteqq",
+
"supsetneq",
+
"supsetneqq",
+
"supsim",
+
"supsub",
+
"supsup",
+
"swarr",
+
"swarhk",
+
"swarr",
+
"swarrow",
+
"swnwar",
+
"szlig",
+
"target",
+
"tau",
+
"tbrk",
+
"tcaron",
+
"tcedil",
+
"tcy",
+
"tdot",
+
"telrec",
+
"tfr",
+
"there4",
+
"therefore",
+
"theta",
+
"thetasym",
+
"thetav",
+
"thickapprox",
+
"thicksim",
+
"thinsp",
+
"thkap",
+
"thksim",
+
"thorn",
+
"tilde",
+
"times",
+
"timesb",
+
"timesbar",
+
"timesd",
+
"tint",
+
"toea",
+
"top",
+
"topbot",
+
"topcir",
+
"topf",
+
"topfork",
+
"tosa",
+
"tprime",
+
"trade",
+
"triangle",
+
"triangledown",
+
"triangleleft",
+
"trianglelefteq",
+
"triangleq",
+
"triangleright",
+
"trianglerighteq",
+
"tridot",
+
"trie",
+
"triminus",
+
"triplus",
+
"trisb",
+
"tritime",
+
"trpezium",
+
"tscr",
+
"tscy",
+
"tshcy",
+
"tstrok",
+
"twixt",
+
"twoheadleftarrow",
+
"twoheadrightarrow",
+
"uarr",
+
"uhar",
+
"uacute",
+
"uarr",
+
"ubrcy",
+
"ubreve",
+
"ucirc",
+
"ucy",
+
"udarr",
+
"udblac",
+
"udhar",
+
"ufisht",
+
"ufr",
+
"ugrave",
+
"uharl",
+
"uharr",
+
"uhblk",
+
"ulcorn",
+
"ulcorner",
+
"ulcrop",
+
"ultri",
+
"umacr",
+
"uml",
+
"uogon",
+
"uopf",
+
"uparrow",
+
"updownarrow",
+
"upharpoonleft",
+
"upharpoonright",
+
"uplus",
+
"upsi",
+
"upsih",
+
"upsilon",
+
"upuparrows",
+
"urcorn",
+
"urcorner",
+
"urcrop",
+
"uring",
+
"urtri",
+
"uscr",
+
"utdot",
+
"utilde",
+
"utri",
+
"utrif",
+
"uuarr",
+
"uuml",
+
"uwangle",
+
"varr",
+
"vbar",
+
"vbarv",
+
"vdash",
+
"vangrt",
+
"varepsilon",
+
"varkappa",
+
"varnothing",
+
"varphi",
+
"varpi",
+
"varpropto",
+
"varr",
+
"varrho",
+
"varsigma",
+
"varsubsetneq",
+
"varsubsetneqq",
+
"varsupsetneq",
+
"varsupsetneqq",
+
"vartheta",
+
"vartriangleleft",
+
"vartriangleright",
+
"vcy",
+
"vdash",
+
"vee",
+
"veebar",
+
"veeeq",
+
"vellip",
+
"verbar",
+
"vert",
+
"vfr",
+
"vltri",
+
"vnsub",
+
"vnsup",
+
"vopf",
+
"vprop",
+
"vrtri",
+
"vscr",
+
"vsubne",
+
"vsupne",
+
"vzigzag",
+
"wcirc",
+
"wedbar",
+
"wedge",
+
"wedgeq",
+
"weierp",
+
"wfr",
+
"wopf",
+
"wp",
+
"wr",
+
"wreath",
+
"wscr",
+
"xcap",
+
"xcirc",
+
"xcup",
+
"xdtri",
+
"xfr",
+
"xharr",
+
"xi",
+
"xlarr",
+
"xmap",
+
"xnis",
+
"xodot",
+
"xopf",
+
"xoplus",
+
"xotime",
+
"xrarr",
+
"xscr",
+
"xsqcup",
+
"xuplus",
+
"xutri",
+
"xvee",
+
"xwedge",
+
"yacute",
+
"yacy",
+
"ycirc",
+
"ycy",
+
"yen",
+
"yfr",
+
"yicy",
+
"yopf",
+
"yscr",
+
"yucy",
+
"yuml",
+
"zacute",
+
"zcaron",
+
"zcy",
+
"zdot",
+
"zeetrf",
+
"zeta",
+
"zfr",
+
"zhcy",
+
"zigrarr",
+
"zopf",
+
"zscr",
+
"zwj",
+
"zwnj",
+
];