Skip to content

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 (&amp;, &copy;, …), decimal (&#169;), and
//  hex (&#xA9;) 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. © → &amp;#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: '&amp;' is emitted as "&amp;amp;" and so
    /// on. (The Python port runs five sequential replaces and must replace
    /// '&amp;' 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("&amp;");  break;
                case '<':  sb.Append("&lt;");   break;
                case '>':  sb.Append("&gt;");   break;
                case '\'': sb.Append("&apos;"); break;
                case '"':  sb.Append("&quot;"); 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
    ///   &amp;(#[xX][0-9a-fA-F]+|#[0-9]+|[A-Za-z][A-Za-z0-9]*);
    /// Given that text[start] == '&amp;', 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 &amp;…; 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 →