HTML Entity Encoder/Decoder — C# source
Encode text to HTML entities and decode entities back to text (named + numeric). UTF-8 safe, runs entirely in your browser, with a shareable link to your exact input.
This is the C# implementation — the same logic the interactive tool runs, in a shareable, citable form.
// =============================================================================
// HtmlEntityEncoder.cs — CosmoDev polyglot showcase port of the
// `html-entity-encoder` tool
// -----------------------------------------------------------------------------
// Language : C# (12, standard library only)
// Source: ported from src/lib/htmlEntities.ts (the canonical, live
// TypeScript lib); mirrors
// src/tool-sources/html-entity-encoder/{python.py,rust.rs}
// License : display source — part of CosmoDev's polyglot tool pages
// (dev.cosmolabs.org). Shown verbatim alongside the JS/TS/Go/Rust/
// Python ports and the other language ports.
// -----------------------------------------------------------------------------
// HTML entity encode / decode — pure string transforms that never throw.
// Encode escapes the five HTML-significant characters (& < > ' ") and can
// optionally flatten every non-ASCII code point to a decimal numeric
// reference. Decode resolves named (&, ©, …), decimal (©), and
// hex (©) references; unknown or malformed references pass through
// whole.
//
// Behavior matches the TypeScript lib exactly: same inputs yield identical
// outputs, including the lone-surrogate and out-of-range guards (decode
// never throws on bad input — unresolvable references are returned verbatim).
//
// Encode iterates System.Text.Rune values (full scalar values), so an astral
// character such as an emoji encodes as a single &#N; reference rather than
// two surrogate halves. The reference scanner is hand-rolled (System.Text.
// RegularExpressions exists in the BCL, but a byte/char scanner mirrors the
// Rust port and keeps the snippet dependency-free). Rune.TryCreate is the
// single guard for both failure modes the TypeScript source handles
// separately: it rejects lone surrogates (U+D800..U+DFFF) AND values above
// U+10FFFF, reproducing the explicit surrogate guard and the
// fromCodePoint try/catch in one check.
//
// The named-entity table is the full WHATWG HTML named-character-reference
// set (2125 entries), generated from src/lib/htmlEntityTable.ts so the data
// stays byte-identical to the canonical TypeScript lib.
// =============================================================================
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
namespace CosmoDev.HtmlEntityEncoder;
/// <summary>Encode options.</summary>
public sealed record EncodeOptions
{
/// <summary>
/// When true, every non-ASCII code point is also emitted as a decimal
/// numeric reference (e.g. © → &#169;), producing ASCII-safe output.
/// When false (the default), only the five HTML-significant characters
/// are escaped.
/// </summary>
public bool Ascii { get; init; }
}
public static class HtmlEntityEncoder
{
/// <summary>
/// Escape the five HTML-significant characters.
///
/// A single-pass loop over runes: '&' is emitted as "&amp;" and so
/// on. (The Python port runs five sequential replaces and must replace
/// '&' first so its own output is never re-escaped — matching on one
/// code point at a time makes that ordering concern moot.)
///
/// With <paramref name="options"/>.Ascii set, every non-ASCII code point
/// is additionally rewritten to a decimal numeric reference.
/// </summary>
public static string EncodeHtml(string text, EncodeOptions? options = null)
{
bool ascii = options is { Ascii: true };
var sb = new StringBuilder(text.Length + 16);
foreach (Rune r in text.EnumerateRunes())
{
switch (r.Value)
{
case '&': sb.Append("&"); break;
case '<': sb.Append("<"); break;
case '>': sb.Append(">"); break;
case '\'': sb.Append("'"); break;
case '"': sb.Append("""); break;
default:
if (ascii && r.Value > 0x7F)
{
sb.Append("&#")
.Append(r.Value.ToString(CultureInfo.InvariantCulture))
.Append(';');
}
else
{
sb.Append(r.ToString());
}
break;
}
}
return sb.ToString();
}
/// <summary>
/// Decode every recognized reference in <paramref name="text"/>. Unknown
/// references and stray ampersands are left exactly as they appear in the
/// input. Decode is total: it never throws on malformed or out-of-range
/// input — such references are returned verbatim.
/// </summary>
public static string DecodeHtml(string text)
{
var sb = new StringBuilder(text.Length);
int n = text.Length;
int i = 0;
while (i < n)
{
if (text[i] == '&' && TryParseReference(text, i, out int end, out string resolved))
{
sb.Append(resolved); // resolved falls back to the original slice
i = end;
}
else
{
// No reference starts here: copy one UTF-16 unit and advance.
// '&' can never appear inside a surrogate half, so unit-wise
// copying never splits a pair.
sb.Append(text[i]);
i++;
}
}
return sb.ToString();
}
/// <summary>
/// The full WHATWG HTML named-character-reference table, name →
/// character. Generated from src/lib/htmlEntityTable.ts (2125 entries).
/// Do not edit by hand — regenerate from the canonical source.
/// </summary>
private static readonly Dictionary<string, string> s_entityTable = new()
{
["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"] = "ⅆ",
["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"] = "IJ",
["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"] = "\n",
["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"] = "\t",
["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"] = "⪮",
["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"] = "ffi",
["fflig"] = "ff",
["ffllig"] = "ffl",
["ffr"] = "𝔣",
["filig"] = "fi",
["fjlig"] = "fj",
["flat"] = "♭",
["fllig"] = "fl",
["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"] = "ij",
["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"] = "⊯",
["nVdash"] = "⊮",
["nabla"] = "∇",
["nacute"] = "ń",
["nang"] = "∠⃒",
["nap"] = "≉",
["napE"] = "⩰̸",
["napid"] = "≋̸",
["napos"] = "ʼn",
["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"] = "≧̸",
["nge"] = "≱",
["ngeq"] = "≱",
["ngeqq"] = "≧̸",
["ngeqslant"] = "⩾̸",
["nges"] = "⩾̸",
["ngsim"] = "≵",
["ngt"] = "≯",
["ngtr"] = "≯",
["nhArr"] = "⇎",
["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"] = "⇏",
["nrarr"] = "↛",
["nrarrc"] = "⤳̸",
["nrarrw"] = "↝̸",
["nrightarrow"] = "↛",
["nrtri"] = "⋫",
["nrtrie"] = "⋭",
["nsc"] = "⊁",
["nsccue"] = "⋡",
["nsce"] = "⪰̸",
["nscr"] = "𝓃",
["nshortmid"] = "∤",
["nshortparallel"] = "∦",
["nsim"] = "≁",
["nsime"] = "≄",
["nsimeq"] = "≄",
["nsmid"] = "∤",
["nspar"] = "∦",
["nsqsube"] = "⋢",
["nsqsupe"] = "⋣",
["nsub"] = "⊄",
["nsubE"] = "⫅̸",
["nsube"] = "⊈",
["nsubset"] = "⊂⃒",
["nsubseteq"] = "⊈",
["nsubseteqq"] = "⫅̸",
["nsucc"] = "⊁",
["nsucceq"] = "⪰̸",
["nsup"] = "⊅",
["nsupE"] = "⫆̸",
["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"] = "⫋",
["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"] = "⫌",
["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"] = "⫋︀",
["vsubne"] = "⊊︀",
["vsupnE"] = "⫌︀",
["vsupne"] = "⊋︀",
["vzigzag"] = "⦚",
["wcirc"] = "ŵ",
["wedbar"] = "⩟",
["wedge"] = "∧",
["wedgeq"] = "≙",
["weierp"] = "℘",
["wfr"] = "𝔴",
["wopf"] = "𝕨",
["wp"] = "℘",
["wr"] = "≀",
["wreath"] = "≀",
["wscr"] = "𝓌",
["xcap"] = "⋂",
["xcirc"] = "◯",
["xcup"] = "⋃",
["xdtri"] = "▽",
["xfr"] = "𝔵",
["xhArr"] = "⟺",
["xharr"] = "⟷",
["xi"] = "ξ",
["xlArr"] = "⟸",
["xlarr"] = "⟵",
["xmap"] = "⟼",
["xnis"] = "⋻",
["xodot"] = "⨀",
["xopf"] = "𝕩",
["xoplus"] = "⨁",
["xotime"] = "⨂",
["xrArr"] = "⟹",
["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"] = "",
};
/// <summary>
/// Hand-rolled matcher for the grammar
/// &(#[xX][0-9a-fA-F]+|#[0-9]+|[A-Za-z][A-Za-z0-9]*);
/// Given that text[start] == '&', attempt to parse a well-formed
/// reference. On success, set <paramref name="end"/> to the index just
/// past the closing ';' and <paramref name="resolved"/> to the decoded
/// string (which equals the original &…; slice when the reference is
/// unknown / invalid — it never throws). Returns false when no reference
/// grammar matches at all.
/// </summary>
private static bool TryParseReference(string text, int start, out int end, out string resolved)
{
int n = text.Length;
int j = start + 1; // just past '&'
end = start;
resolved = text;
if (j >= n)
{
return false;
}
// Identify the body grammar and scan its trailing index into j.
if (text[j] == '#')
{
j++;
if (j >= n)
{
return false;
}
bool hex = text[j] == 'x' || text[j] == 'X';
if (hex)
{
j++;
}
int digitsStart = j;
while (j < n && IsDigit(text[j], hex))
{
j++;
}
if (j == digitsStart)
{
return false; // '#' / '#x' with no digits is not a reference
}
}
else if (IsAsciiLetter(text[j]))
{
j++;
while (j < n && IsAsciiAlphanumeric(text[j]))
{
j++;
}
}
else
{
return false; // '&' not followed by '#' or a letter
}
// The body must be terminated by ';'.
if (j >= n || text[j] != ';')
{
return false;
}
end = j + 1;
string body = text.Substring(start + 1, j - start - 1);
resolved = ResolveBody(body, text.Substring(start, end - start));
return true;
}
/// <summary>
/// Resolve one reference body (name, or "#digits") to its character, or
/// return the original match unchanged when the reference is
/// unrecognized / unsafe.
///
/// The numeric accumulator saturates just above U+10FFFF instead of
/// running dry on absurd digit runs — one guard covering both the
/// out-of-range check and the overflow check that the Rust port's
/// u32::from_str_radix performs. Rune.TryCreate then rejects lone
/// surrogates in the same single check it uses for out-of-range values.
/// </summary>
private static string ResolveBody(string body, string full)
{
if (body[0] == '#')
{
bool hex = body.Length >= 2 && (body[1] == 'x' || body[1] == 'X');
string digits = body[(hex ? 2 : 1)..];
bool overflow = false;
ulong acc = 0;
foreach (char d in digits)
{
if (!overflow)
{
acc = acc * (hex ? 16ul : 10ul) + DigitValue(d);
if (acc > 0x10FFFF)
{
overflow = true; // saturate; keep scanning digits
}
}
}
if (!overflow && Rune.TryCreate((uint)acc, out Rune rune))
{
return rune.ToString(); // out of range / surrogate → full
}
return full; // overflow, > U+10FFFF, or a lone surrogate
}
return s_entityTable.TryGetValue(body, out string? value) ? value : full;
}
/// <summary>true when c is a valid digit for the radix (10 or 16).</summary>
private static bool IsDigit(char c, bool hex) =>
(c >= '0' && c <= '9') ||
(hex && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')));
/// <summary>Numeric value of one hex/decimal digit (caller guarantees IsDigit).</summary>
private static uint DigitValue(char c) =>
c <= '9' ? (uint)(c - '0') : (uint)(c <= 'F' ? c - 'A' + 10 : c - 'a' + 10);
private static bool IsAsciiLetter(char c) =>
(c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');
private static bool IsAsciiAlphanumeric(char c) =>
IsAsciiLetter(c) || (c >= '0' && c <= '9');
}
Also available in 13 other languages
Every CosmoDev tool ships its pure logic in TypeScript (web) and Go (CLI), with authored implementations in a dozen-plus languages — the same contract, ported. Compare all languages side by side →