1514 lines
58 KiB
Rust
1514 lines
58 KiB
Rust
use std::borrow::Cow;
|
||
use regex::{RegexBuilder, Captures};
|
||
|
||
fn hex_char_decode(c: u8) -> u8 {
|
||
match c {
|
||
b'a'..=b'f' => c - b'a' + 10,
|
||
b'A'..=b'F' => c - b'A' + 10,
|
||
b'0'..=b'9' => c - b'0',
|
||
_ => panic!("Invalid hex character passed: {}", c)
|
||
}
|
||
}
|
||
|
||
fn hex_to_bytes(hex: &[u8]) -> Vec<u8> {
|
||
let mut capacity = hex.len() / 2;
|
||
if capacity % 2 != 0 {
|
||
capacity += 1;
|
||
}
|
||
let mut result = Vec::with_capacity(capacity);
|
||
for chars in hex.chunks(2) {
|
||
let (left, right) = if chars.len() == 1 {
|
||
(b'0', chars[0])
|
||
} else {
|
||
(chars[0], chars[1])
|
||
};
|
||
result.push(hex_char_decode(left) << 4 | hex_char_decode(right));
|
||
}
|
||
result
|
||
}
|
||
|
||
pub fn unescape<'t>(text: &'t str) -> Cow<'t, str> {
|
||
let regex = RegexBuilder::new("&([a-z0-9_\\-]+|#(?:x[0-9a-f]+|[0-9]+));?")
|
||
.case_insensitive(true)
|
||
.build()
|
||
.unwrap();
|
||
regex.replace_all(text, |caps: &Captures| {
|
||
let data = caps[1].to_ascii_lowercase();
|
||
if data.starts_with("#x") {
|
||
if let Ok(result) = String::from_utf8(hex_to_bytes(data[2..].as_bytes())) {
|
||
result
|
||
} else {
|
||
caps[0].to_string()
|
||
}
|
||
} else if data.starts_with("#") {
|
||
if let Ok(result) = String::from_utf8(vec![data[1..].parse().unwrap()]) {
|
||
result
|
||
} else {
|
||
caps[0].to_string()
|
||
}
|
||
} else {
|
||
// stolen from https://dev.w3.org/html5/html-author/charref
|
||
match data.as_str() {
|
||
"Tab" => "\t",
|
||
"NewLine" => "\n",
|
||
"excl" => "!",
|
||
"quot" | "QUOT" => "\"",
|
||
"num" => "#",
|
||
"dollar" => "$",
|
||
"percnt" => "%",
|
||
"amp" | "AMP" => "&",
|
||
"apos" => "'",
|
||
"lpar" => "(",
|
||
"rpar" => ")",
|
||
"ast" | "midast" => "*",
|
||
"plus" => "+",
|
||
"comma" => ",",
|
||
"period" => ".",
|
||
"sol" => "/",
|
||
"colon" => ":",
|
||
"semi" => ";",
|
||
"lt" | "LT" => "<",
|
||
"equals" => "=",
|
||
"gt" | "GT" => ">",
|
||
"quest" => "?",
|
||
"commat" => "@",
|
||
"lsqb" | "lbrack" => "[",
|
||
"bsol" => "\\",
|
||
"rsqb" | "rbrack" => "]",
|
||
"Hat" => "^",
|
||
"lowbar" => "_",
|
||
"grave" | "DiacriticalGrave" => "`",
|
||
"lcub" | "lbrace" => "{",
|
||
"verbar" | "vert" | "VerticalLine" => "|",
|
||
"rcub" | "rbrace" => "}",
|
||
"nbsp" | "NonBreakingSpace" => " ",
|
||
"iexcl" => "¡",
|
||
"cent" => "¢",
|
||
"pound" => "£",
|
||
"curren" => "¤",
|
||
"yen" => "¥",
|
||
"brvbar" => "¦",
|
||
"sect" => "§",
|
||
"Dot" | "die" | "DoubleDot" | "uml" => "¨",
|
||
"copy" | "COPY" => "©",
|
||
"ordf" => "ª",
|
||
"laquo" => "«",
|
||
"not" => "¬",
|
||
"shy" => "",
|
||
"reg" | "circledR" | "REG" => "®",
|
||
"macr" | "OverBar" | "strns" => "¯",
|
||
"deg" => "°",
|
||
"plusmn" | "pm" | "PlusMinus" => "±",
|
||
"sup2" => "²",
|
||
"sup3" => "³",
|
||
"acute" | "DiacriticalAcute" => "´",
|
||
"micro" => "µ",
|
||
"para" => "¶",
|
||
"middot" | "centerdot" | "CenterDot" => "·",
|
||
"cedil" | "Cedilla" => "¸",
|
||
"sup1" => "¹",
|
||
"ordm" => "º",
|
||
"raquo" => "»",
|
||
"frac14" => "¼",
|
||
"frac12" | "half" => "½",
|
||
"frac34" => "¾",
|
||
"iquest" => "¿",
|
||
"Agrave" => "À",
|
||
"Aacute" => "Á",
|
||
"Acirc" => "Â",
|
||
"Atilde" => "Ã",
|
||
"Auml" => "Ä",
|
||
"Aring" => "Å",
|
||
"AElig" => "Æ",
|
||
"Ccedil" => "Ç",
|
||
"Egrave" => "È",
|
||
"Eacute" => "É",
|
||
"Ecirc" => "Ê",
|
||
"Euml" => "Ë",
|
||
"Igrave" => "Ì",
|
||
"Iacute" => "Í",
|
||
"Icirc" => "Î",
|
||
"Iuml" => "Ï",
|
||
"ETH" => "Ð",
|
||
"Ntilde" => "Ñ",
|
||
"Ograve" => "Ò",
|
||
"Oacute" => "Ó",
|
||
"Ocirc" => "Ô",
|
||
"Otilde" => "Õ",
|
||
"Ouml" => "Ö",
|
||
"times" => "×",
|
||
"Oslash" => "Ø",
|
||
"Ugrave" => "Ù",
|
||
"Uacute" => "Ú",
|
||
"Ucirc" => "Û",
|
||
"Uuml" => "Ü",
|
||
"Yacute" => "Ý",
|
||
"THORN" => "Þ",
|
||
"szlig" => "ß",
|
||
"agrave" => "à",
|
||
"aacute" => "á",
|
||
"acirc" => "â",
|
||
"atilde" => "ã",
|
||
"auml" => "ä",
|
||
"aring" => "å",
|
||
"aelig" => "æ",
|
||
"ccedil" => "ç",
|
||
"egrave" => "è",
|
||
"eacute" => "é",
|
||
"ecirc" => "ê",
|
||
"euml" => "ë",
|
||
"igrave" => "ì",
|
||
"iacute" => "í",
|
||
"icirc" => "î",
|
||
"iuml" => "ï",
|
||
"eth" => "ð",
|
||
"ntilde" => "ñ",
|
||
"ograve" => "ò",
|
||
"oacute" => "ó",
|
||
"ocirc" => "ô",
|
||
"otilde" => "õ",
|
||
"ouml" => "ö",
|
||
"divide" | "div" => "÷",
|
||
"oslash" => "ø",
|
||
"ugrave" => "ù",
|
||
"uacute" => "ú",
|
||
"ucirc" => "û",
|
||
"uuml" => "ü",
|
||
"yacute" => "ý",
|
||
"thorn" => "þ",
|
||
"yuml" => "ÿ",
|
||
"Amacr" => "Ā",
|
||
"amacr" => "ā",
|
||
"Abreve" => "Ă",
|
||
"abreve" => "ă",
|
||
"Aogon" => "Ą",
|
||
"aogon" => "ą",
|
||
"Cacute" => "Ć",
|
||
"cacute" => "ć",
|
||
"Ccirc" => "Ĉ",
|
||
"ccirc" => "ĉ",
|
||
"Cdot" => "Ċ",
|
||
"cdot" => "ċ",
|
||
"Ccaron" => "Č",
|
||
"ccaron" => "č",
|
||
"Dcaron" => "Ď",
|
||
"dcaron" => "ď",
|
||
"Dstrok" => "Đ",
|
||
"dstrok" => "đ",
|
||
"Emacr" => "Ē",
|
||
"emacr" => "ē",
|
||
"Edot" => "Ė",
|
||
"edot" => "ė",
|
||
"Eogon" => "Ę",
|
||
"eogon" => "ę",
|
||
"Ecaron" => "Ě",
|
||
"ecaron" => "ě",
|
||
"Gcirc" => "Ĝ",
|
||
"gcirc" => "ĝ",
|
||
"Gbreve" => "Ğ",
|
||
"gbreve" => "ğ",
|
||
"Gdot" => "Ġ",
|
||
"gdot" => "ġ",
|
||
"Gcedil" => "Ģ",
|
||
"Hcirc" => "Ĥ",
|
||
"hcirc" => "ĥ",
|
||
"Hstrok" => "Ħ",
|
||
"hstrok" => "ħ",
|
||
"Itilde" => "Ĩ",
|
||
"itilde" => "ĩ",
|
||
"Imacr" => "Ī",
|
||
"imacr" => "ī",
|
||
"Iogon" => "Į",
|
||
"iogon" => "į",
|
||
"Idot" => "İ",
|
||
"imath" | "inodot" => "ı",
|
||
"IJlig" => "IJ",
|
||
"ijlig" => "ij",
|
||
"Jcirc" => "Ĵ",
|
||
"jcirc" => "ĵ",
|
||
"Kcedil" => "Ķ",
|
||
"kcedil" => "ķ",
|
||
"kgreen" => "ĸ",
|
||
"Lacute" => "Ĺ",
|
||
"lacute" => "ĺ",
|
||
"Lcedil" => "Ļ",
|
||
"lcedil" => "ļ",
|
||
"Lcaron" => "Ľ",
|
||
"lcaron" => "ľ",
|
||
"Lmidot" => "Ŀ",
|
||
"lmidot" => "ŀ",
|
||
"Lstrok" => "Ł",
|
||
"lstrok" => "ł",
|
||
"Nacute" => "Ń",
|
||
"nacute" => "ń",
|
||
"Ncedil" => "Ņ",
|
||
"ncedil" => "ņ",
|
||
"Ncaron" => "Ň",
|
||
"ncaron" => "ň",
|
||
"napos" => "ʼn",
|
||
"ENG" => "Ŋ",
|
||
"eng" => "ŋ",
|
||
"Omacr" => "Ō",
|
||
"omacr" => "ō",
|
||
"Odblac" => "Ő",
|
||
"odblac" => "ő",
|
||
"OElig" => "Œ",
|
||
"oelig" => "œ",
|
||
"Racute" => "Ŕ",
|
||
"racute" => "ŕ",
|
||
"Rcedil" => "Ŗ",
|
||
"rcedil" => "ŗ",
|
||
"Rcaron" => "Ř",
|
||
"rcaron" => "ř",
|
||
"Sacute" => "Ś",
|
||
"sacute" => "ś",
|
||
"Scirc" => "Ŝ",
|
||
"scirc" => "ŝ",
|
||
"Scedil" => "Ş",
|
||
"scedil" => "ş",
|
||
"Scaron" => "Š",
|
||
"scaron" => "š",
|
||
"Tcedil" => "Ţ",
|
||
"tcedil" => "ţ",
|
||
"Tcaron" => "Ť",
|
||
"tcaron" => "ť",
|
||
"Tstrok" => "Ŧ",
|
||
"tstrok" => "ŧ",
|
||
"Utilde" => "Ũ",
|
||
"utilde" => "ũ",
|
||
"Umacr" => "Ū",
|
||
"umacr" => "ū",
|
||
"Ubreve" => "Ŭ",
|
||
"ubreve" => "ŭ",
|
||
"Uring" => "Ů",
|
||
"uring" => "ů",
|
||
"Udblac" => "Ű",
|
||
"udblac" => "ű",
|
||
"Uogon" => "Ų",
|
||
"uogon" => "ų",
|
||
"Wcirc" => "Ŵ",
|
||
"wcirc" => "ŵ",
|
||
"Ycirc" => "Ŷ",
|
||
"ycirc" => "ŷ",
|
||
"Yuml" => "Ÿ",
|
||
"Zacute" => "Ź",
|
||
"zacute" => "ź",
|
||
"Zdot" => "Ż",
|
||
"zdot" => "ż",
|
||
"Zcaron" => "Ž",
|
||
"zcaron" => "ž",
|
||
"fnof" => "ƒ",
|
||
"imped" => "Ƶ",
|
||
"gacute" => "ǵ",
|
||
"jmath" => "ȷ",
|
||
"circ" => "ˆ",
|
||
"caron" | "Hacek" => "ˇ",
|
||
"breve" | "Breve" => "˘",
|
||
"dot" | "DiacriticalDot" => "˙",
|
||
"ring" => "˚",
|
||
"ogon" => "˛",
|
||
"tilde" | "DiacriticalTilde" => "˜",
|
||
"dblac" | "DiacriticalDoubleAcute" => "˝",
|
||
"DownBreve" => "̑",
|
||
"UnderBar" => "̲",
|
||
"Alpha" => "Α",
|
||
"Beta" => "Β",
|
||
"Gamma" => "Γ",
|
||
"Delta" => "Δ",
|
||
"Epsilon" => "Ε",
|
||
"Zeta" => "Ζ",
|
||
"Eta" => "Η",
|
||
"Theta" => "Θ",
|
||
"Iota" => "Ι",
|
||
"Kappa" => "Κ",
|
||
"Lambda" => "Λ",
|
||
"Mu" => "Μ",
|
||
"Nu" => "Ν",
|
||
"Xi" => "Ξ",
|
||
"Omicron" => "Ο",
|
||
"Pi" => "Π",
|
||
"Rho" => "Ρ",
|
||
"Sigma" => "Σ",
|
||
"Tau" => "Τ",
|
||
"Upsilon" => "Υ",
|
||
"Phi" => "Φ",
|
||
"Chi" => "Χ",
|
||
"Psi" => "Ψ",
|
||
"Omega" => "Ω",
|
||
"alpha" => "α",
|
||
"beta" => "β",
|
||
"gamma" => "γ",
|
||
"delta" => "δ",
|
||
"epsiv" | "varepsilon" | "epsilon" => "ε",
|
||
"zeta" => "ζ",
|
||
"eta" => "η",
|
||
"theta" => "θ",
|
||
"iota" => "ι",
|
||
"kappa" => "κ",
|
||
"lambda" => "λ",
|
||
"mu" => "μ",
|
||
"nu" => "ν",
|
||
"xi" => "ξ",
|
||
"omicron" => "ο",
|
||
"pi" => "π",
|
||
"rho" => "ρ",
|
||
"sigmav" | "varsigma" | "sigmaf" => "ς",
|
||
"sigma" => "σ",
|
||
"tau" => "τ",
|
||
"upsi" | "upsilon" => "υ",
|
||
"phi" | "phiv" | "varphi" => "φ",
|
||
"chi" => "χ",
|
||
"psi" => "ψ",
|
||
"omega" => "ω",
|
||
"thetav" | "vartheta" | "thetasym" => "ϑ",
|
||
"Upsi" | "upsih" => "ϒ",
|
||
"straightphi" => "ϕ",
|
||
"piv" | "varpi" => "ϖ",
|
||
"Gammad" => "Ϝ",
|
||
"gammad" | "digamma" => "ϝ",
|
||
"kappav" | "varkappa" => "ϰ",
|
||
"rhov" | "varrho" => "ϱ",
|
||
"epsi" | "straightepsilon" => "ϵ",
|
||
"bepsi" | "backepsilon" => "϶",
|
||
"IOcy" => "Ё",
|
||
"DJcy" => "Ђ",
|
||
"GJcy" => "Ѓ",
|
||
"Jukcy" => "Є",
|
||
"DScy" => "Ѕ",
|
||
"Iukcy" => "І",
|
||
"YIcy" => "Ї",
|
||
"Jsercy" => "Ј",
|
||
"LJcy" => "Љ",
|
||
"NJcy" => "Њ",
|
||
"TSHcy" => "Ћ",
|
||
"KJcy" => "Ќ",
|
||
"Ubrcy" => "Ў",
|
||
"DZcy" => "Џ",
|
||
"Acy" => "А",
|
||
"Bcy" => "Б",
|
||
"Vcy" => "В",
|
||
"Gcy" => "Г",
|
||
"Dcy" => "Д",
|
||
"IEcy" => "Е",
|
||
"ZHcy" => "Ж",
|
||
"Zcy" => "З",
|
||
"Icy" => "И",
|
||
"Jcy" => "Й",
|
||
"Kcy" => "К",
|
||
"Lcy" => "Л",
|
||
"Mcy" => "М",
|
||
"Ncy" => "Н",
|
||
"Ocy" => "О",
|
||
"Pcy" => "П",
|
||
"Rcy" => "Р",
|
||
"Scy" => "С",
|
||
"Tcy" => "Т",
|
||
"Ucy" => "У",
|
||
"Fcy" => "Ф",
|
||
"KHcy" => "Х",
|
||
"TScy" => "Ц",
|
||
"CHcy" => "Ч",
|
||
"SHcy" => "Ш",
|
||
"SHCHcy" => "Щ",
|
||
"HARDcy" => "Ъ",
|
||
"Ycy" => "Ы",
|
||
"SOFTcy" => "Ь",
|
||
"Ecy" => "Э",
|
||
"YUcy" => "Ю",
|
||
"YAcy" => "Я",
|
||
"acy" => "а",
|
||
"bcy" => "б",
|
||
"vcy" => "в",
|
||
"gcy" => "г",
|
||
"dcy" => "д",
|
||
"iecy" => "е",
|
||
"zhcy" => "ж",
|
||
"zcy" => "з",
|
||
"icy" => "и",
|
||
"jcy" => "й",
|
||
"kcy" => "к",
|
||
"lcy" => "л",
|
||
"mcy" => "м",
|
||
"ncy" => "н",
|
||
"ocy" => "о",
|
||
"pcy" => "п",
|
||
"rcy" => "р",
|
||
"scy" => "с",
|
||
"tcy" => "т",
|
||
"ucy" => "у",
|
||
"fcy" => "ф",
|
||
"khcy" => "х",
|
||
"tscy" => "ц",
|
||
"chcy" => "ч",
|
||
"shcy" => "ш",
|
||
"shchcy" => "щ",
|
||
"hardcy" => "ъ",
|
||
"ycy" => "ы",
|
||
"softcy" => "ь",
|
||
"ecy" => "э",
|
||
"yucy" => "ю",
|
||
"yacy" => "я",
|
||
"iocy" => "ё",
|
||
"djcy" => "ђ",
|
||
"gjcy" => "ѓ",
|
||
"jukcy" => "є",
|
||
"dscy" => "ѕ",
|
||
"iukcy" => "і",
|
||
"yicy" => "ї",
|
||
"jsercy" => "ј",
|
||
"ljcy" => "љ",
|
||
"njcy" => "њ",
|
||
"tshcy" => "ћ",
|
||
"kjcy" => "ќ",
|
||
"ubrcy" => "ў",
|
||
"dzcy" => "џ",
|
||
"ensp" => " ",
|
||
"emsp" => " ",
|
||
"emsp13" => " ",
|
||
"emsp14" => " ",
|
||
"numsp" => " ",
|
||
"puncsp" => " ",
|
||
"thinsp" | "ThinSpace" => " ",
|
||
"hairsp" | "VeryThinSpace" => " ",
|
||
"ZeroWidthSpace" | "NegativeVeryThinSpace" | "NegativeThinSpace" | "NegativeMediumSpace" | "NegativeThickSpace" => "",
|
||
"zwnj" => "",
|
||
"zwj" => "",
|
||
"lrm" => "",
|
||
"rlm" => "",
|
||
"hyphen" | "dash" => "‐",
|
||
"ndash" => "–",
|
||
"mdash" => "—",
|
||
"horbar" => "―",
|
||
"Verbar" | "Vert" => "‖",
|
||
"lsquo" | "OpenCurlyQuote" => "‘",
|
||
"rsquo" | "rsquor" | "CloseCurlyQuote" => "’",
|
||
"lsquor" | "sbquo" => "‚",
|
||
"ldquo" | "OpenCurlyDoubleQuote" => "“",
|
||
"rdquo" | "rdquor" | "CloseCurlyDoubleQuote" => "”",
|
||
"ldquor" | "bdquo" => "„",
|
||
"dagger" => "†",
|
||
"Dagger" | "ddagger" => "‡",
|
||
"bull" | "bullet" => "•",
|
||
"nldr" => "‥",
|
||
"hellip" | "mldr" => "…",
|
||
"permil" => "‰",
|
||
"pertenk" => "‱",
|
||
"prime" => "′",
|
||
"Prime" => "″",
|
||
"tprime" => "‴",
|
||
"bprime" | "backprime" => "‵",
|
||
"lsaquo" => "‹",
|
||
"rsaquo" => "›",
|
||
"oline" => "‾",
|
||
"caret" => "⁁",
|
||
"hybull" => "⁃",
|
||
"frasl" => "⁄",
|
||
"bsemi" => "⁏",
|
||
"qprime" => "⁗",
|
||
"MediumSpace" => " ",
|
||
"NoBreak" => "",
|
||
"ApplyFunction" | "af" => "",
|
||
"InvisibleTimes" | "it" => "",
|
||
"InvisibleComma" | "ic" => "",
|
||
"euro" => "€",
|
||
"tdot" | "TripleDot" => "⃛",
|
||
"DotDot" => "⃜",
|
||
"Copf" | "complexes" => "ℂ",
|
||
"incare" => "℅",
|
||
"gscr" => "ℊ",
|
||
"hamilt" | "HilbertSpace" | "Hscr" => "ℋ",
|
||
"Hfr" | "Poincareplane" => "ℌ",
|
||
"quaternions" | "Hopf" => "ℍ",
|
||
"planckh" => "ℎ",
|
||
"planck" | "hbar" | "plankv" | "hslash" => "ℏ",
|
||
"Iscr" | "imagline" => "ℐ",
|
||
"image" | "Im" | "imagpart" | "Ifr" => "ℑ",
|
||
"Lscr" | "lagran" | "Laplacetrf" => "ℒ",
|
||
"ell" => "ℓ",
|
||
"Nopf" | "naturals" => "ℕ",
|
||
"numero" => "№",
|
||
"copysr" => "℗",
|
||
"weierp" | "wp" => "℘",
|
||
"Popf" | "primes" => "ℙ",
|
||
"rationals" | "Qopf" => "ℚ",
|
||
"Rscr" | "realine" => "ℛ",
|
||
"real" | "Re" | "realpart" | "Rfr" => "ℜ",
|
||
"reals" | "Ropf" => "ℝ",
|
||
"rx" => "℞",
|
||
"trade" | "TRADE" => "™",
|
||
"integers" | "Zopf" => "ℤ",
|
||
"ohm" => "Ω",
|
||
"mho" => "℧",
|
||
"Zfr" | "zeetrf" => "ℨ",
|
||
"iiota" => "℩",
|
||
"angst" => "Å",
|
||
"bernou" | "Bernoullis" | "Bscr" => "ℬ",
|
||
"Cfr" | "Cayleys" => "ℭ",
|
||
"escr" => "ℯ",
|
||
"Escr" | "expectation" => "ℰ",
|
||
"Fscr" | "Fouriertrf" => "ℱ",
|
||
"phmmat" | "Mellintrf" | "Mscr" => "ℳ",
|
||
"order" | "orderof" | "oscr" => "ℴ",
|
||
"alefsym" | "aleph" => "ℵ",
|
||
"beth" => "ℶ",
|
||
"gimel" => "ℷ",
|
||
"daleth" => "ℸ",
|
||
"CapitalDifferentialD" | "DD" => "ⅅ",
|
||
"DifferentialD" | "dd" => "ⅆ",
|
||
"ExponentialE" | "exponentiale" | "ee" => "ⅇ",
|
||
"ImaginaryI" | "ii" => "ⅈ",
|
||
"frac13" => "⅓",
|
||
"frac23" => "⅔",
|
||
"frac15" => "⅕",
|
||
"frac25" => "⅖",
|
||
"frac35" => "⅗",
|
||
"frac45" => "⅘",
|
||
"frac16" => "⅙",
|
||
"frac56" => "⅚",
|
||
"frac18" => "⅛",
|
||
"frac38" => "⅜",
|
||
"frac58" => "⅝",
|
||
"frac78" => "⅞",
|
||
"larr" | "leftarrow" | "LeftArrow" | "slarr" | "ShortLeftArrow" => "←",
|
||
"uarr" | "uparrow" | "UpArrow" | "ShortUpArrow" => "↑",
|
||
"rarr" | "rightarrow" | "RightArrow" | "srarr" | "ShortRightArrow" => "→",
|
||
"darr" | "downarrow" | "DownArrow" | "ShortDownArrow" => "↓",
|
||
"harr" | "leftrightarrow" | "LeftRightArrow" => "↔",
|
||
"varr" | "updownarrow" | "UpDownArrow" => "↕",
|
||
"nwarr" | "UpperLeftArrow" | "nwarrow" => "↖",
|
||
"nearr" | "UpperRightArrow" | "nearrow" => "↗",
|
||
"searr" | "searrow" | "LowerRightArrow" => "↘",
|
||
"swarr" | "swarrow" | "LowerLeftArrow" => "↙",
|
||
"nlarr" | "nleftarrow" => "↚",
|
||
"nrarr" | "nrightarrow" => "↛",
|
||
"rarrw" | "rightsquigarrow" => "↝",
|
||
"Larr" | "twoheadleftarrow" => "↞",
|
||
"Uarr" => "↟",
|
||
"Rarr" | "twoheadrightarrow" => "↠",
|
||
"Darr" => "↡",
|
||
"larrtl" | "leftarrowtail" => "↢",
|
||
"rarrtl" | "rightarrowtail" => "↣",
|
||
"LeftTeeArrow" | "mapstoleft" => "↤",
|
||
"UpTeeArrow" | "mapstoup" => "↥",
|
||
"map" | "RightTeeArrow" | "mapsto" => "↦",
|
||
"DownTeeArrow" | "mapstodown" => "↧",
|
||
"larrhk" | "hookleftarrow" => "↩",
|
||
"rarrhk" | "hookrightarrow" => "↪",
|
||
"larrlp" | "looparrowleft" => "↫",
|
||
"rarrlp" | "looparrowright" => "↬",
|
||
"harrw" | "leftrightsquigarrow" => "↭",
|
||
"nharr" | "nleftrightarrow" => "↮",
|
||
"lsh" | "Lsh" => "↰",
|
||
"rsh" | "Rsh" => "↱",
|
||
"ldsh" => "↲",
|
||
"rdsh" => "↳",
|
||
"crarr" => "↵",
|
||
"cularr" | "curvearrowleft" => "↶",
|
||
"curarr" | "curvearrowright" => "↷",
|
||
"olarr" | "circlearrowleft" => "↺",
|
||
"orarr" | "circlearrowright" => "↻",
|
||
"lharu" | "LeftVector" | "leftharpoonup" => "↼",
|
||
"lhard" | "leftharpoondown" | "DownLeftVector" => "↽",
|
||
"uharr" | "upharpoonright" | "RightUpVector" => "↾",
|
||
"uharl" | "upharpoonleft" | "LeftUpVector" => "↿",
|
||
"rharu" | "RightVector" | "rightharpoonup" => "⇀",
|
||
"rhard" | "rightharpoondown" | "DownRightVector" => "⇁",
|
||
"dharr" | "RightDownVector" | "downharpoonright" => "⇂",
|
||
"dharl" | "LeftDownVector" | "downharpoonleft" => "⇃",
|
||
"rlarr" | "rightleftarrows" | "RightArrowLeftArrow" => "⇄",
|
||
"udarr" | "UpArrowDownArrow" => "⇅",
|
||
"lrarr" | "leftrightarrows" | "LeftArrowRightArrow" => "⇆",
|
||
"llarr" | "leftleftarrows" => "⇇",
|
||
"uuarr" | "upuparrows" => "⇈",
|
||
"rrarr" | "rightrightarrows" => "⇉",
|
||
"ddarr" | "downdownarrows" => "⇊",
|
||
"lrhar" | "ReverseEquilibrium" | "leftrightharpoons" => "⇋",
|
||
"rlhar" | "rightleftharpoons" | "Equilibrium" => "⇌",
|
||
"nlArr" | "nLeftarrow" => "⇍",
|
||
"nhArr" | "nLeftrightarrow" => "⇎",
|
||
"nrArr" | "nRightarrow" => "⇏",
|
||
"lArr" | "Leftarrow" | "DoubleLeftArrow" => "⇐",
|
||
"uArr" | "Uparrow" | "DoubleUpArrow" => "⇑",
|
||
"rArr" | "Rightarrow" | "Implies" | "DoubleRightArrow" => "⇒",
|
||
"dArr" | "Downarrow" | "DoubleDownArrow" => "⇓",
|
||
"hArr" | "Leftrightarrow" | "DoubleLeftRightArrow" | "iff" => "⇔",
|
||
"vArr" | "Updownarrow" | "DoubleUpDownArrow" => "⇕",
|
||
"nwArr" => "⇖",
|
||
"neArr" => "⇗",
|
||
"seArr" => "⇘",
|
||
"swArr" => "⇙",
|
||
"lAarr" | "Lleftarrow" => "⇚",
|
||
"rAarr" | "Rrightarrow" => "⇛",
|
||
"zigrarr" => "⇝",
|
||
"larrb" | "LeftArrowBar" => "⇤",
|
||
"rarrb" | "RightArrowBar" => "⇥",
|
||
"duarr" | "DownArrowUpArrow" => "⇵",
|
||
"loarr" => "⇽",
|
||
"roarr" => "⇾",
|
||
"hoarr" => "⇿",
|
||
"forall" | "ForAll" => "∀",
|
||
"comp" | "complement" => "∁",
|
||
"part" | "PartialD" => "∂",
|
||
"exist" | "Exists" => "∃",
|
||
"nexist" | "NotExists" | "nexists" => "∄",
|
||
"empty" | "emptyset" | "emptyv" | "varnothing" => "∅",
|
||
"nabla" | "Del" => "∇",
|
||
"isin" | "isinv" | "Element" | "in" => "∈",
|
||
"notin" | "NotElement" | "notinva" => "∉",
|
||
"niv" | "ReverseElement" | "ni" | "SuchThat" => "∋",
|
||
"notni" | "notniva" | "NotReverseElement" => "∌",
|
||
"prod" | "Product" => "∏",
|
||
"coprod" | "Coproduct" => "∐",
|
||
"sum" | "Sum" => "∑",
|
||
"minus" => "−",
|
||
"mnplus" | "mp" | "MinusPlus" => "∓",
|
||
"plusdo" | "dotplus" => "∔",
|
||
"setmn" | "setminus" | "Backslash" | "ssetmn" | "smallsetminus" => "∖",
|
||
"lowast" => "∗",
|
||
"compfn" | "SmallCircle" => "∘",
|
||
"radic" | "Sqrt" => "√",
|
||
"prop" | "propto" | "Proportional" | "vprop" | "varpropto" => "∝",
|
||
"infin" => "∞",
|
||
"angrt" => "∟",
|
||
"ang" | "angle" => "∠",
|
||
"angmsd" | "measuredangle" => "∡",
|
||
"angsph" => "∢",
|
||
"mid" | "VerticalBar" | "smid" | "shortmid" => "∣",
|
||
"nmid" | "NotVerticalBar" | "nsmid" | "nshortmid" => "∤",
|
||
"par" | "parallel" | "DoubleVerticalBar" | "spar" | "shortparallel" => "∥",
|
||
"npar" | "nparallel" | "NotDoubleVerticalBar" | "nspar" | "nshortparallel" => "∦",
|
||
"and" | "wedge" => "∧",
|
||
"or" | "vee" => "∨",
|
||
"cap" => "∩",
|
||
"cup" => "∪",
|
||
"int" | "Integral" => "∫",
|
||
"Int" => "∬",
|
||
"tint" | "iiint" => "∭",
|
||
"conint" | "oint" | "ContourIntegral" => "∮",
|
||
"Conint" | "DoubleContourIntegral" => "∯",
|
||
"Cconint" => "∰",
|
||
"cwint" => "∱",
|
||
"cwconint" | "ClockwiseContourIntegral" => "∲",
|
||
"awconint" | "CounterClockwiseContourIntegral" => "∳",
|
||
"there4" | "therefore" | "Therefore" => "∴",
|
||
"becaus" | "because" | "Because" => "∵",
|
||
"ratio" => "∶",
|
||
"Colon" | "Proportion" => "∷",
|
||
"minusd" | "dotminus" => "∸",
|
||
"mDDot" => "∺",
|
||
"homtht" => "∻",
|
||
"sim" | "Tilde" | "thksim" | "thicksim" => "∼",
|
||
"bsim" | "backsim" => "∽",
|
||
"ac" | "mstpos" => "∾",
|
||
"acd" => "∿",
|
||
"wreath" | "VerticalTilde" | "wr" => "≀",
|
||
"nsim" | "NotTilde" => "≁",
|
||
"esim" | "EqualTilde" | "eqsim" => "≂",
|
||
"sime" | "TildeEqual" | "simeq" => "≃",
|
||
"nsime" | "nsimeq" | "NotTildeEqual" => "≄",
|
||
"cong" | "TildeFullEqual" => "≅",
|
||
"simne" => "≆",
|
||
"ncong" | "NotTildeFullEqual" => "≇",
|
||
"asymp" | "ap" | "TildeTilde" | "approx" | "thkap" | "thickapprox" => "≈",
|
||
"nap" | "NotTildeTilde" | "napprox" => "≉",
|
||
"ape" | "approxeq" => "≊",
|
||
"apid" => "≋",
|
||
"bcong" | "backcong" => "≌",
|
||
"asympeq" | "CupCap" => "≍",
|
||
"bump" | "HumpDownHump" | "Bumpeq" => "≎",
|
||
"bumpe" | "HumpEqual" | "bumpeq" => "≏",
|
||
"esdot" | "DotEqual" | "doteq" => "≐",
|
||
"eDot" | "doteqdot" => "≑",
|
||
"efDot" | "fallingdotseq" => "≒",
|
||
"erDot" | "risingdotseq" => "≓",
|
||
"colone" | "coloneq" | "Assign" => "≔",
|
||
"ecolon" | "eqcolon" => "≕",
|
||
"ecir" | "eqcirc" => "≖",
|
||
"cire" | "circeq" => "≗",
|
||
"wedgeq" => "≙",
|
||
"veeeq" => "≚",
|
||
"trie" | "triangleq" => "≜",
|
||
"equest" | "questeq" => "≟",
|
||
"ne" | "NotEqual" => "≠",
|
||
"equiv" | "Congruent" => "≡",
|
||
"nequiv" | "NotCongruent" => "≢",
|
||
"le" | "leq" => "≤",
|
||
"ge" | "GreaterEqual" | "geq" => "≥",
|
||
"lE" | "LessFullEqual" | "leqq" => "≦",
|
||
"gE" | "GreaterFullEqual" | "geqq" => "≧",
|
||
"lnE" | "lneqq" => "≨",
|
||
"gnE" | "gneqq" => "≩",
|
||
"Lt" | "NestedLessLess" | "ll" => "≪",
|
||
"Gt" | "NestedGreaterGreater" | "gg" => "≫",
|
||
"twixt" | "between" => "≬",
|
||
"NotCupCap" => "≭",
|
||
"nlt" | "NotLess" | "nless" => "≮",
|
||
"ngt" | "NotGreater" | "ngtr" => "≯",
|
||
"nle" | "NotLessEqual" | "nleq" => "≰",
|
||
"nge" | "NotGreaterEqual" | "ngeq" => "≱",
|
||
"lsim" | "LessTilde" | "lesssim" => "≲",
|
||
"gsim" | "gtrsim" | "GreaterTilde" => "≳",
|
||
"nlsim" | "NotLessTilde" => "≴",
|
||
"ngsim" | "NotGreaterTilde" => "≵",
|
||
"lg" | "lessgtr" | "LessGreater" => "≶",
|
||
"gl" | "gtrless" | "GreaterLess" => "≷",
|
||
"ntlg" | "NotLessGreater" => "≸",
|
||
"ntgl" | "NotGreaterLess" => "≹",
|
||
"pr" | "Precedes" | "prec" => "≺",
|
||
"sc" | "Succeeds" | "succ" => "≻",
|
||
"prcue" | "PrecedesSlantEqual" | "preccurlyeq" => "≼",
|
||
"sccue" | "SucceedsSlantEqual" | "succcurlyeq" => "≽",
|
||
"prsim" | "precsim" | "PrecedesTilde" => "≾",
|
||
"scsim" | "succsim" | "SucceedsTilde" => "≿",
|
||
"npr" | "nprec" | "NotPrecedes" => "⊀",
|
||
"nsc" | "nsucc" | "NotSucceeds" => "⊁",
|
||
"sub" | "subset" => "⊂",
|
||
"sup" | "supset" | "Superset" => "⊃",
|
||
"nsub" => "⊄",
|
||
"nsup" => "⊅",
|
||
"sube" | "SubsetEqual" | "subseteq" => "⊆",
|
||
"supe" | "supseteq" | "SupersetEqual" => "⊇",
|
||
"nsube" | "nsubseteq" | "NotSubsetEqual" => "⊈",
|
||
"nsupe" | "nsupseteq" | "NotSupersetEqual" => "⊉",
|
||
"subne" | "subsetneq" => "⊊",
|
||
"supne" | "supsetneq" => "⊋",
|
||
"cupdot" => "⊍",
|
||
"uplus" | "UnionPlus" => "⊎",
|
||
"sqsub" | "SquareSubset" | "sqsubset" => "⊏",
|
||
"sqsup" | "SquareSuperset" | "sqsupset" => "⊐",
|
||
"sqsube" | "SquareSubsetEqual" | "sqsubseteq" => "⊑",
|
||
"sqsupe" | "SquareSupersetEqual" | "sqsupseteq" => "⊒",
|
||
"sqcap" | "SquareIntersection" => "⊓",
|
||
"sqcup" | "SquareUnion" => "⊔",
|
||
"oplus" | "CirclePlus" => "⊕",
|
||
"ominus" | "CircleMinus" => "⊖",
|
||
"otimes" | "CircleTimes" => "⊗",
|
||
"osol" => "⊘",
|
||
"odot" | "CircleDot" => "⊙",
|
||
"ocir" | "circledcirc" => "⊚",
|
||
"oast" | "circledast" => "⊛",
|
||
"odash" | "circleddash" => "⊝",
|
||
"plusb" | "boxplus" => "⊞",
|
||
"minusb" | "boxminus" => "⊟",
|
||
"timesb" | "boxtimes" => "⊠",
|
||
"sdotb" | "dotsquare" => "⊡",
|
||
"vdash" | "RightTee" => "⊢",
|
||
"dashv" | "LeftTee" => "⊣",
|
||
"top" | "DownTee" => "⊤",
|
||
"bottom" | "bot" | "perp" | "UpTee" => "⊥",
|
||
"models" => "⊧",
|
||
"vDash" | "DoubleRightTee" => "⊨",
|
||
"Vdash" => "⊩",
|
||
"Vvdash" => "⊪",
|
||
"VDash" => "⊫",
|
||
"nvdash" => "⊬",
|
||
"nvDash" => "⊭",
|
||
"nVdash" => "⊮",
|
||
"nVDash" => "⊯",
|
||
"prurel" => "⊰",
|
||
"vltri" | "vartriangleleft" | "LeftTriangle" => "⊲",
|
||
"vrtri" | "vartriangleright" | "RightTriangle" => "⊳",
|
||
"ltrie" | "trianglelefteq" | "LeftTriangleEqual" => "⊴",
|
||
"rtrie" | "trianglerighteq" | "RightTriangleEqual" => "⊵",
|
||
"origof" => "⊶",
|
||
"imof" => "⊷",
|
||
"mumap" | "multimap" => "⊸",
|
||
"hercon" => "⊹",
|
||
"intcal" | "intercal" => "⊺",
|
||
"veebar" => "⊻",
|
||
"barvee" => "⊽",
|
||
"angrtvb" => "⊾",
|
||
"lrtri" => "⊿",
|
||
"xwedge" | "Wedge" | "bigwedge" => "⋀",
|
||
"xvee" | "Vee" | "bigvee" => "⋁",
|
||
"xcap" | "Intersection" | "bigcap" => "⋂",
|
||
"xcup" | "Union" | "bigcup" => "⋃",
|
||
"diam" | "diamond" | "Diamond" => "⋄",
|
||
"sdot" => "⋅",
|
||
"sstarf" | "Star" => "⋆",
|
||
"divonx" | "divideontimes" => "⋇",
|
||
"bowtie" => "⋈",
|
||
"ltimes" => "⋉",
|
||
"rtimes" => "⋊",
|
||
"lthree" | "leftthreetimes" => "⋋",
|
||
"rthree" | "rightthreetimes" => "⋌",
|
||
"bsime" | "backsimeq" => "⋍",
|
||
"cuvee" | "curlyvee" => "⋎",
|
||
"cuwed" | "curlywedge" => "⋏",
|
||
"Sub" | "Subset" => "⋐",
|
||
"Sup" | "Supset" => "⋑",
|
||
"Cap" => "⋒",
|
||
"Cup" => "⋓",
|
||
"fork" | "pitchfork" => "⋔",
|
||
"epar" => "⋕",
|
||
"ltdot" | "lessdot" => "⋖",
|
||
"gtdot" | "gtrdot" => "⋗",
|
||
"Ll" => "⋘",
|
||
"Gg" | "ggg" => "⋙",
|
||
"leg" | "LessEqualGreater" | "lesseqgtr" => "⋚",
|
||
"gel" | "gtreqless" | "GreaterEqualLess" => "⋛",
|
||
"cuepr" | "curlyeqprec" => "⋞",
|
||
"cuesc" | "curlyeqsucc" => "⋟",
|
||
"nprcue" | "NotPrecedesSlantEqual" => "⋠",
|
||
"nsccue" | "NotSucceedsSlantEqual" => "⋡",
|
||
"nsqsube" | "NotSquareSubsetEqual" => "⋢",
|
||
"nsqsupe" | "NotSquareSupersetEqual" => "⋣",
|
||
"lnsim" => "⋦",
|
||
"gnsim" => "⋧",
|
||
"prnsim" | "precnsim" => "⋨",
|
||
"scnsim" | "succnsim" => "⋩",
|
||
"nltri" | "ntriangleleft" | "NotLeftTriangle" => "⋪",
|
||
"nrtri" | "ntriangleright" | "NotRightTriangle" => "⋫",
|
||
"nltrie" | "ntrianglelefteq" | "NotLeftTriangleEqual" => "⋬",
|
||
"nrtrie" | "ntrianglerighteq" | "NotRightTriangleEqual" => "⋭",
|
||
"vellip" => "⋮",
|
||
"ctdot" => "⋯",
|
||
"utdot" => "⋰",
|
||
"dtdot" => "⋱",
|
||
"disin" => "⋲",
|
||
"isinsv" => "⋳",
|
||
"isins" => "⋴",
|
||
"isindot" => "⋵",
|
||
"notinvc" => "⋶",
|
||
"notinvb" => "⋷",
|
||
"isinE" => "⋹",
|
||
"nisd" => "⋺",
|
||
"xnis" => "⋻",
|
||
"nis" => "⋼",
|
||
"notnivc" => "⋽",
|
||
"notnivb" => "⋾",
|
||
"barwed" | "barwedge" => "⌅",
|
||
"Barwed" | "doublebarwedge" => "⌆",
|
||
"lceil" | "LeftCeiling" => "⌈",
|
||
"rceil" | "RightCeiling" => "⌉",
|
||
"lfloor" | "LeftFloor" => "⌊",
|
||
"rfloor" | "RightFloor" => "⌋",
|
||
"drcrop" => "⌌",
|
||
"dlcrop" => "⌍",
|
||
"urcrop" => "⌎",
|
||
"ulcrop" => "⌏",
|
||
"bnot" => "⌐",
|
||
"profline" => "⌒",
|
||
"profsurf" => "⌓",
|
||
"telrec" => "⌕",
|
||
"target" => "⌖",
|
||
"ulcorn" | "ulcorner" => "⌜",
|
||
"urcorn" | "urcorner" => "⌝",
|
||
"dlcorn" | "llcorner" => "⌞",
|
||
"drcorn" | "lrcorner" => "⌟",
|
||
"frown" | "sfrown" => "⌢",
|
||
"smile" | "ssmile" => "⌣",
|
||
"cylcty" => "⌭",
|
||
"profalar" => "⌮",
|
||
"topbot" => "⌶",
|
||
"ovbar" => "⌽",
|
||
"solbar" => "⌿",
|
||
"angzarr" => "⍼",
|
||
"lmoust" | "lmoustache" => "⎰",
|
||
"rmoust" | "rmoustache" => "⎱",
|
||
"tbrk" | "OverBracket" => "⎴",
|
||
"bbrk" | "UnderBracket" => "⎵",
|
||
"bbrktbrk" => "⎶",
|
||
"OverParenthesis" => "⏜",
|
||
"UnderParenthesis" => "⏝",
|
||
"OverBrace" => "⏞",
|
||
"UnderBrace" => "⏟",
|
||
"trpezium" => "⏢",
|
||
"elinters" => "⏧",
|
||
"blank" => "␣",
|
||
"oS" | "circledS" => "Ⓢ",
|
||
"boxh" | "HorizontalLine" => "─",
|
||
"boxv" => "│",
|
||
"boxdr" => "┌",
|
||
"boxdl" => "┐",
|
||
"boxur" => "└",
|
||
"boxul" => "┘",
|
||
"boxvr" => "├",
|
||
"boxvl" => "┤",
|
||
"boxhd" => "┬",
|
||
"boxhu" => "┴",
|
||
"boxvh" => "┼",
|
||
"boxH" => "═",
|
||
"boxV" => "║",
|
||
"boxdR" => "╒",
|
||
"boxDr" => "╓",
|
||
"boxDR" => "╔",
|
||
"boxdL" => "╕",
|
||
"boxDl" => "╖",
|
||
"boxDL" => "╗",
|
||
"boxuR" => "╘",
|
||
"boxUr" => "╙",
|
||
"boxUR" => "╚",
|
||
"boxuL" => "╛",
|
||
"boxUl" => "╜",
|
||
"boxUL" => "╝",
|
||
"boxvR" => "╞",
|
||
"boxVr" => "╟",
|
||
"boxVR" => "╠",
|
||
"boxvL" => "╡",
|
||
"boxVl" => "╢",
|
||
"boxVL" => "╣",
|
||
"boxHd" => "╤",
|
||
"boxhD" => "╥",
|
||
"boxHD" => "╦",
|
||
"boxHu" => "╧",
|
||
"boxhU" => "╨",
|
||
"boxHU" => "╩",
|
||
"boxvH" => "╪",
|
||
"boxVh" => "╫",
|
||
"boxVH" => "╬",
|
||
"uhblk" => "▀",
|
||
"lhblk" => "▄",
|
||
"block" => "█",
|
||
"blk14" => "░",
|
||
"blk12" => "▒",
|
||
"blk34" => "▓",
|
||
"squ" | "square" | "Square" => "□",
|
||
"squf" | "squarf" | "blacksquare" | "FilledVerySmallSquare" => "▪",
|
||
"EmptyVerySmallSquare" => "▫",
|
||
"rect" => "▭",
|
||
"marker" => "▮",
|
||
"fltns" => "▱",
|
||
"xutri" | "bigtriangleup" => "△",
|
||
"utrif" | "blacktriangle" => "▴",
|
||
"utri" | "triangle" => "▵",
|
||
"rtrif" | "blacktriangleright" => "▸",
|
||
"rtri" | "triangleright" => "▹",
|
||
"xdtri" | "bigtriangledown" => "▽",
|
||
"dtrif" | "blacktriangledown" => "▾",
|
||
"dtri" | "triangledown" => "▿",
|
||
"ltrif" | "blacktriangleleft" => "◂",
|
||
"ltri" | "triangleleft" => "◃",
|
||
"loz" | "lozenge" => "◊",
|
||
"cir" => "○",
|
||
"tridot" => "◬",
|
||
"xcirc" | "bigcirc" => "◯",
|
||
"ultri" => "◸",
|
||
"urtri" => "◹",
|
||
"lltri" => "◺",
|
||
"EmptySmallSquare" => "◻",
|
||
"FilledSmallSquare" => "◼",
|
||
"starf" | "bigstar" => "★",
|
||
"star" => "☆",
|
||
"phone" => "☎",
|
||
"female" => "♀",
|
||
"male" => "♂",
|
||
"spades" | "spadesuit" => "♠",
|
||
"clubs" | "clubsuit" => "♣",
|
||
"hearts" | "heartsuit" => "♥",
|
||
"diams" | "diamondsuit" => "♦",
|
||
"sung" => "♪",
|
||
"flat" => "♭",
|
||
"natur" | "natural" => "♮",
|
||
"sharp" => "♯",
|
||
"check" | "checkmark" => "✓",
|
||
"cross" => "✗",
|
||
"malt" | "maltese" => "✠",
|
||
"sext" => "✶",
|
||
"VerticalSeparator" => "❘",
|
||
"lbbrk" => "❲",
|
||
"rbbrk" => "❳",
|
||
"lobrk" | "LeftDoubleBracket" => "⟦",
|
||
"robrk" | "RightDoubleBracket" => "⟧",
|
||
"lang" | "LeftAngleBracket" | "langle" => "⟨",
|
||
"rang" | "RightAngleBracket" | "rangle" => "⟩",
|
||
"Lang" => "⟪",
|
||
"Rang" => "⟫",
|
||
"loang" => "⟬",
|
||
"roang" => "⟭",
|
||
"xlarr" | "longleftarrow" | "LongLeftArrow" => "⟵",
|
||
"xrarr" | "longrightarrow" | "LongRightArrow" => "⟶",
|
||
"xharr" | "longleftrightarrow" | "LongLeftRightArrow" => "⟷",
|
||
"xlArr" | "Longleftarrow" | "DoubleLongLeftArrow" => "⟸",
|
||
"xrArr" | "Longrightarrow" | "DoubleLongRightArrow" => "⟹",
|
||
"xhArr" | "Longleftrightarrow" | "DoubleLongLeftRightArrow" => "⟺",
|
||
"xmap" | "longmapsto" => "⟼",
|
||
"dzigrarr" => "⟿",
|
||
"nvlArr" => "⤂",
|
||
"nvrArr" => "⤃",
|
||
"nvHarr" => "⤄",
|
||
"Map" => "⤅",
|
||
"lbarr" => "⤌",
|
||
"rbarr" | "bkarow" => "⤍",
|
||
"lBarr" => "⤎",
|
||
"rBarr" | "dbkarow" => "⤏",
|
||
"RBarr" | "drbkarow" => "⤐",
|
||
"DDotrahd" => "⤑",
|
||
"UpArrowBar" => "⤒",
|
||
"DownArrowBar" => "⤓",
|
||
"Rarrtl" => "⤖",
|
||
"latail" => "⤙",
|
||
"ratail" => "⤚",
|
||
"lAtail" => "⤛",
|
||
"rAtail" => "⤜",
|
||
"larrfs" => "⤝",
|
||
"rarrfs" => "⤞",
|
||
"larrbfs" => "⤟",
|
||
"rarrbfs" => "⤠",
|
||
"nwarhk" => "⤣",
|
||
"nearhk" => "⤤",
|
||
"searhk" | "hksearow" => "⤥",
|
||
"swarhk" | "hkswarow" => "⤦",
|
||
"nwnear" => "⤧",
|
||
"nesear" | "toea" => "⤨",
|
||
"seswar" | "tosa" => "⤩",
|
||
"swnwar" => "⤪",
|
||
"rarrc" => "⤳",
|
||
"cudarrr" => "⤵",
|
||
"ldca" => "⤶",
|
||
"rdca" => "⤷",
|
||
"cudarrl" => "⤸",
|
||
"larrpl" => "⤹",
|
||
"curarrm" => "⤼",
|
||
"cularrp" => "⤽",
|
||
"rarrpl" => "⥅",
|
||
"harrcir" => "⥈",
|
||
"Uarrocir" => "⥉",
|
||
"lurdshar" => "⥊",
|
||
"ldrushar" => "⥋",
|
||
"LeftRightVector" => "⥎",
|
||
"RightUpDownVector" => "⥏",
|
||
"DownLeftRightVector" => "⥐",
|
||
"LeftUpDownVector" => "⥑",
|
||
"LeftVectorBar" => "⥒",
|
||
"RightVectorBar" => "⥓",
|
||
"RightUpVectorBar" => "⥔",
|
||
"RightDownVectorBar" => "⥕",
|
||
"DownLeftVectorBar" => "⥖",
|
||
"DownRightVectorBar" => "⥗",
|
||
"LeftUpVectorBar" => "⥘",
|
||
"LeftDownVectorBar" => "⥙",
|
||
"LeftTeeVector" => "⥚",
|
||
"RightTeeVector" => "⥛",
|
||
"RightUpTeeVector" => "⥜",
|
||
"RightDownTeeVector" => "⥝",
|
||
"DownLeftTeeVector" => "⥞",
|
||
"DownRightTeeVector" => "⥟",
|
||
"LeftUpTeeVector" => "⥠",
|
||
"LeftDownTeeVector" => "⥡",
|
||
"lHar" => "⥢",
|
||
"uHar" => "⥣",
|
||
"rHar" => "⥤",
|
||
"dHar" => "⥥",
|
||
"luruhar" => "⥦",
|
||
"ldrdhar" => "⥧",
|
||
"ruluhar" => "⥨",
|
||
"rdldhar" => "⥩",
|
||
"lharul" => "⥪",
|
||
"llhard" => "⥫",
|
||
"rharul" => "⥬",
|
||
"lrhard" => "⥭",
|
||
"udhar" | "UpEquilibrium" => "⥮",
|
||
"duhar" | "ReverseUpEquilibrium" => "⥯",
|
||
"RoundImplies" => "⥰",
|
||
"erarr" => "⥱",
|
||
"simrarr" => "⥲",
|
||
"larrsim" => "⥳",
|
||
"rarrsim" => "⥴",
|
||
"rarrap" => "⥵",
|
||
"ltlarr" => "⥶",
|
||
"gtrarr" => "⥸",
|
||
"subrarr" => "⥹",
|
||
"suplarr" => "⥻",
|
||
"lfisht" => "⥼",
|
||
"rfisht" => "⥽",
|
||
"ufisht" => "⥾",
|
||
"dfisht" => "⥿",
|
||
"lopar" => "⦅",
|
||
"ropar" => "⦆",
|
||
"lbrke" => "⦋",
|
||
"rbrke" => "⦌",
|
||
"lbrkslu" => "⦍",
|
||
"rbrksld" => "⦎",
|
||
"lbrksld" => "⦏",
|
||
"rbrkslu" => "⦐",
|
||
"langd" => "⦑",
|
||
"rangd" => "⦒",
|
||
"lparlt" => "⦓",
|
||
"rpargt" => "⦔",
|
||
"gtlPar" => "⦕",
|
||
"ltrPar" => "⦖",
|
||
"vzigzag" => "⦚",
|
||
"vangrt" => "⦜",
|
||
"angrtvbd" => "⦝",
|
||
"ange" => "⦤",
|
||
"range" => "⦥",
|
||
"dwangle" => "⦦",
|
||
"uwangle" => "⦧",
|
||
"angmsdaa" => "⦨",
|
||
"angmsdab" => "⦩",
|
||
"angmsdac" => "⦪",
|
||
"angmsdad" => "⦫",
|
||
"angmsdae" => "⦬",
|
||
"angmsdaf" => "⦭",
|
||
"angmsdag" => "⦮",
|
||
"angmsdah" => "⦯",
|
||
"bemptyv" => "⦰",
|
||
"demptyv" => "⦱",
|
||
"cemptyv" => "⦲",
|
||
"raemptyv" => "⦳",
|
||
"laemptyv" => "⦴",
|
||
"ohbar" => "⦵",
|
||
"omid" => "⦶",
|
||
"opar" => "⦷",
|
||
"operp" => "⦹",
|
||
"olcross" => "⦻",
|
||
"odsold" => "⦼",
|
||
"olcir" => "⦾",
|
||
"ofcir" => "⦿",
|
||
"olt" => "⧀",
|
||
"ogt" => "⧁",
|
||
"cirscir" => "⧂",
|
||
"cirE" => "⧃",
|
||
"solb" => "⧄",
|
||
"bsolb" => "⧅",
|
||
"boxbox" => "⧉",
|
||
"trisb" => "⧍",
|
||
"rtriltri" => "⧎",
|
||
"LeftTriangleBar" => "⧏",
|
||
"RightTriangleBar" => "⧐",
|
||
"race" => "⧚",
|
||
"iinfin" => "⧜",
|
||
"infintie" => "⧝",
|
||
"nvinfin" => "⧞",
|
||
"eparsl" => "⧣",
|
||
"smeparsl" => "⧤",
|
||
"eqvparsl" => "⧥",
|
||
"lozf" | "blacklozenge" => "⧫",
|
||
"RuleDelayed" => "⧴",
|
||
"dsol" => "⧶",
|
||
"xodot" | "bigodot" => "⨀",
|
||
"xoplus" | "bigoplus" => "⨁",
|
||
"xotime" | "bigotimes" => "⨂",
|
||
"xuplus" | "biguplus" => "⨄",
|
||
"xsqcup" | "bigsqcup" => "⨆",
|
||
"qint" | "iiiint" => "⨌",
|
||
"fpartint" => "⨍",
|
||
"cirfnint" => "⨐",
|
||
"awint" => "⨑",
|
||
"rppolint" => "⨒",
|
||
"scpolint" => "⨓",
|
||
"npolint" => "⨔",
|
||
"pointint" => "⨕",
|
||
"quatint" => "⨖",
|
||
"intlarhk" => "⨗",
|
||
"pluscir" => "⨢",
|
||
"plusacir" => "⨣",
|
||
"simplus" => "⨤",
|
||
"plusdu" => "⨥",
|
||
"plussim" => "⨦",
|
||
"plustwo" => "⨧",
|
||
"mcomma" => "⨩",
|
||
"minusdu" => "⨪",
|
||
"loplus" => "⨭",
|
||
"roplus" => "⨮",
|
||
"Cross" => "⨯",
|
||
"timesd" => "⨰",
|
||
"timesbar" => "⨱",
|
||
"smashp" => "⨳",
|
||
"lotimes" => "⨴",
|
||
"rotimes" => "⨵",
|
||
"otimesas" => "⨶",
|
||
"Otimes" => "⨷",
|
||
"odiv" => "⨸",
|
||
"triplus" => "⨹",
|
||
"triminus" => "⨺",
|
||
"tritime" => "⨻",
|
||
"iprod" | "intprod" => "⨼",
|
||
"amalg" => "⨿",
|
||
"capdot" => "⩀",
|
||
"ncup" => "⩂",
|
||
"ncap" => "⩃",
|
||
"capand" => "⩄",
|
||
"cupor" => "⩅",
|
||
"cupcap" => "⩆",
|
||
"capcup" => "⩇",
|
||
"cupbrcap" => "⩈",
|
||
"capbrcup" => "⩉",
|
||
"cupcup" => "⩊",
|
||
"capcap" => "⩋",
|
||
"ccups" => "⩌",
|
||
"ccaps" => "⩍",
|
||
"ccupssm" => "⩐",
|
||
"And" => "⩓",
|
||
"Or" => "⩔",
|
||
"andand" => "⩕",
|
||
"oror" => "⩖",
|
||
"orslope" => "⩗",
|
||
"andslope" => "⩘",
|
||
"andv" => "⩚",
|
||
"orv" => "⩛",
|
||
"andd" => "⩜",
|
||
"ord" => "⩝",
|
||
"wedbar" => "⩟",
|
||
"sdote" => "⩦",
|
||
"simdot" => "⩪",
|
||
"congdot" => "⩭",
|
||
"easter" => "⩮",
|
||
"apacir" => "⩯",
|
||
"apE" => "⩰",
|
||
"eplus" => "⩱",
|
||
"pluse" => "⩲",
|
||
"Esim" => "⩳",
|
||
"Colone" => "⩴",
|
||
"Equal" => "⩵",
|
||
"eDDot" | "ddotseq" => "⩷",
|
||
"equivDD" => "⩸",
|
||
"ltcir" => "⩹",
|
||
"gtcir" => "⩺",
|
||
"ltquest" => "⩻",
|
||
"gtquest" => "⩼",
|
||
"les" | "LessSlantEqual" | "leqslant" => "⩽",
|
||
"ges" | "GreaterSlantEqual" | "geqslant" => "⩾",
|
||
"lesdot" => "⩿",
|
||
"gesdot" => "⪀",
|
||
"lesdoto" => "⪁",
|
||
"gesdoto" => "⪂",
|
||
"lesdotor" => "⪃",
|
||
"gesdotol" => "⪄",
|
||
"lap" | "lessapprox" => "⪅",
|
||
"gap" | "gtrapprox" => "⪆",
|
||
"lne" | "lneq" => "⪇",
|
||
"gne" | "gneq" => "⪈",
|
||
"lnap" | "lnapprox" => "⪉",
|
||
"gnap" | "gnapprox" => "⪊",
|
||
"lEg" | "lesseqqgtr" => "⪋",
|
||
"gEl" | "gtreqqless" => "⪌",
|
||
"lsime" => "⪍",
|
||
"gsime" => "⪎",
|
||
"lsimg" => "⪏",
|
||
"gsiml" => "⪐",
|
||
"lgE" => "⪑",
|
||
"glE" => "⪒",
|
||
"lesges" => "⪓",
|
||
"gesles" => "⪔",
|
||
"els" | "eqslantless" => "⪕",
|
||
"egs" | "eqslantgtr" => "⪖",
|
||
"elsdot" => "⪗",
|
||
"egsdot" => "⪘",
|
||
"el" => "⪙",
|
||
"eg" => "⪚",
|
||
"siml" => "⪝",
|
||
"simg" => "⪞",
|
||
"simlE" => "⪟",
|
||
"simgE" => "⪠",
|
||
"LessLess" => "⪡",
|
||
"GreaterGreater" => "⪢",
|
||
"glj" => "⪤",
|
||
"gla" => "⪥",
|
||
"ltcc" => "⪦",
|
||
"gtcc" => "⪧",
|
||
"lescc" => "⪨",
|
||
"gescc" => "⪩",
|
||
"smt" => "⪪",
|
||
"lat" => "⪫",
|
||
"smte" => "⪬",
|
||
"late" => "⪭",
|
||
"bumpE" => "⪮",
|
||
"pre" | "preceq" | "PrecedesEqual" => "⪯",
|
||
"sce" | "succeq" | "SucceedsEqual" => "⪰",
|
||
"prE" => "⪳",
|
||
"scE" => "⪴",
|
||
"prnE" | "precneqq" => "⪵",
|
||
"scnE" | "succneqq" => "⪶",
|
||
"prap" | "precapprox" => "⪷",
|
||
"scap" | "succapprox" => "⪸",
|
||
"prnap" | "precnapprox" => "⪹",
|
||
"scnap" | "succnapprox" => "⪺",
|
||
"Pr" => "⪻",
|
||
"Sc" => "⪼",
|
||
"subdot" => "⪽",
|
||
"supdot" => "⪾",
|
||
"subplus" => "⪿",
|
||
"supplus" => "⫀",
|
||
"submult" => "⫁",
|
||
"supmult" => "⫂",
|
||
"subedot" => "⫃",
|
||
"supedot" => "⫄",
|
||
"subE" | "subseteqq" => "⫅",
|
||
"supE" | "supseteqq" => "⫆",
|
||
"subsim" => "⫇",
|
||
"supsim" => "⫈",
|
||
"subnE" | "subsetneqq" => "⫋",
|
||
"supnE" | "supsetneqq" => "⫌",
|
||
"csub" => "⫏",
|
||
"csup" => "⫐",
|
||
"csube" => "⫑",
|
||
"csupe" => "⫒",
|
||
"subsup" => "⫓",
|
||
"supsub" => "⫔",
|
||
"subsub" => "⫕",
|
||
"supsup" => "⫖",
|
||
"suphsub" => "⫗",
|
||
"supdsub" => "⫘",
|
||
"forkv" => "⫙",
|
||
"topfork" => "⫚",
|
||
"mlcp" => "⫛",
|
||
"Dashv" | "DoubleLeftTee" => "⫤",
|
||
"Vdashl" => "⫦",
|
||
"Barv" => "⫧",
|
||
"vBar" => "⫨",
|
||
"vBarv" => "⫩",
|
||
"Vbar" => "⫫",
|
||
"Not" => "⫬",
|
||
"bNot" => "⫭",
|
||
"rnmid" => "⫮",
|
||
"cirmid" => "⫯",
|
||
"midcir" => "⫰",
|
||
"topcir" => "⫱",
|
||
"nhpar" => "⫲",
|
||
"parsim" => "⫳",
|
||
"parsl" => "⫽",
|
||
"fflig" => "ff",
|
||
"filig" => "fi",
|
||
"fllig" => "fl",
|
||
"ffilig" => "ffi",
|
||
"ffllig" => "ffl",
|
||
"Ascr" => "𝒜",
|
||
"Cscr" => "𝒞",
|
||
"Dscr" => "𝒟",
|
||
"Gscr" => "𝒢",
|
||
"Jscr" => "𝒥",
|
||
"Kscr" => "𝒦",
|
||
"Nscr" => "𝒩",
|
||
"Oscr" => "𝒪",
|
||
"Pscr" => "𝒫",
|
||
"Qscr" => "𝒬",
|
||
"Sscr" => "𝒮",
|
||
"Tscr" => "𝒯",
|
||
"Uscr" => "𝒰",
|
||
"Vscr" => "𝒱",
|
||
"Wscr" => "𝒲",
|
||
"Xscr" => "𝒳",
|
||
"Yscr" => "𝒴",
|
||
"Zscr" => "𝒵",
|
||
"ascr" => "𝒶",
|
||
"bscr" => "𝒷",
|
||
"cscr" => "𝒸",
|
||
"dscr" => "𝒹",
|
||
"fscr" => "𝒻",
|
||
"hscr" => "𝒽",
|
||
"iscr" => "𝒾",
|
||
"jscr" => "𝒿",
|
||
"kscr" => "𝓀",
|
||
"lscr" => "𝓁",
|
||
"mscr" => "𝓂",
|
||
"nscr" => "𝓃",
|
||
"pscr" => "𝓅",
|
||
"qscr" => "𝓆",
|
||
"rscr" => "𝓇",
|
||
"sscr" => "𝓈",
|
||
"tscr" => "𝓉",
|
||
"uscr" => "𝓊",
|
||
"vscr" => "𝓋",
|
||
"wscr" => "𝓌",
|
||
"xscr" => "𝓍",
|
||
"yscr" => "𝓎",
|
||
"zscr" => "𝓏",
|
||
"Afr" => "𝔄",
|
||
"Bfr" => "𝔅",
|
||
"Dfr" => "𝔇",
|
||
"Efr" => "𝔈",
|
||
"Ffr" => "𝔉",
|
||
"Gfr" => "𝔊",
|
||
"Jfr" => "𝔍",
|
||
"Kfr" => "𝔎",
|
||
"Lfr" => "𝔏",
|
||
"Mfr" => "𝔐",
|
||
"Nfr" => "𝔑",
|
||
"Ofr" => "𝔒",
|
||
"Pfr" => "𝔓",
|
||
"Qfr" => "𝔔",
|
||
"Sfr" => "𝔖",
|
||
"Tfr" => "𝔗",
|
||
"Ufr" => "𝔘",
|
||
"Vfr" => "𝔙",
|
||
"Wfr" => "𝔚",
|
||
"Xfr" => "𝔛",
|
||
"Yfr" => "𝔜",
|
||
"afr" => "𝔞",
|
||
"bfr" => "𝔟",
|
||
"cfr" => "𝔠",
|
||
"dfr" => "𝔡",
|
||
"efr" => "𝔢",
|
||
"ffr" => "𝔣",
|
||
"gfr" => "𝔤",
|
||
"hfr" => "𝔥",
|
||
"ifr" => "𝔦",
|
||
"jfr" => "𝔧",
|
||
"kfr" => "𝔨",
|
||
"lfr" => "𝔩",
|
||
"mfr" => "𝔪",
|
||
"nfr" => "𝔫",
|
||
"ofr" => "𝔬",
|
||
"pfr" => "𝔭",
|
||
"qfr" => "𝔮",
|
||
"rfr" => "𝔯",
|
||
"sfr" => "𝔰",
|
||
"tfr" => "𝔱",
|
||
"ufr" => "𝔲",
|
||
"vfr" => "𝔳",
|
||
"wfr" => "𝔴",
|
||
"xfr" => "𝔵",
|
||
"yfr" => "𝔶",
|
||
"zfr" => "𝔷",
|
||
"Aopf" => "𝔸",
|
||
"Bopf" => "𝔹",
|
||
"Dopf" => "𝔻",
|
||
"Eopf" => "𝔼",
|
||
"Fopf" => "𝔽",
|
||
"Gopf" => "𝔾",
|
||
"Iopf" => "𝕀",
|
||
"Jopf" => "𝕁",
|
||
"Kopf" => "𝕂",
|
||
"Lopf" => "𝕃",
|
||
"Mopf" => "𝕄",
|
||
"Oopf" => "𝕆",
|
||
"Sopf" => "𝕊",
|
||
"Topf" => "𝕋",
|
||
"Uopf" => "𝕌",
|
||
"Vopf" => "𝕍",
|
||
"Wopf" => "𝕎",
|
||
"Xopf" => "𝕏",
|
||
"Yopf" => "𝕐",
|
||
"aopf" => "𝕒",
|
||
"bopf" => "𝕓",
|
||
"copf" => "𝕔",
|
||
"dopf" => "𝕕",
|
||
"eopf" => "𝕖",
|
||
"fopf" => "𝕗",
|
||
"gopf" => "𝕘",
|
||
"hopf" => "𝕙",
|
||
"iopf" => "𝕚",
|
||
"jopf" => "𝕛",
|
||
"kopf" => "𝕜",
|
||
"lopf" => "𝕝",
|
||
"mopf" => "𝕞",
|
||
"nopf" => "𝕟",
|
||
"oopf" => "𝕠",
|
||
"popf" => "𝕡",
|
||
"qopf" => "𝕢",
|
||
"ropf" => "𝕣",
|
||
"sopf" => "𝕤",
|
||
"topf" => "𝕥",
|
||
"uopf" => "𝕦",
|
||
"vopf" => "𝕧",
|
||
"wopf" => "𝕨",
|
||
"xopf" => "𝕩",
|
||
"yopf" => "𝕪",
|
||
"zopf" => "𝕫",
|
||
_ => &caps[0]
|
||
}.to_string()
|
||
}
|
||
})
|
||
}
|
||
|
||
#[test]
|
||
fn test_unescape() {
|
||
assert_eq!(&*unescape("test"), "test");
|
||
assert_eq!(&*unescape("<test>"), "<test>");
|
||
assert_eq!(&*unescape("0"), "0");
|
||
assert_eq!(&*unescape("0"), "0");
|
||
assert_eq!(&*unescape("&foo;"), "&foo;");
|
||
}
|