use regex::{Captures, RegexBuilder}; use std::borrow::Cow; 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 { 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>"), ""); assert_eq!(&*unescape("0"), "0"); assert_eq!(&*unescape("0"), "0"); assert_eq!(&*unescape("&foo;"), "&foo;"); }