package Markdown::Perl::HTML;

use strict;
use warnings;
use utf8;
use feature ':5.24';

use Carp 'cluck';
use English;
use Exporter 'import';

our @EXPORT_OK = qw(decode_entities html_escape http_escape remove_disallowed_tags);
our %EXPORT_TAGS = (all => \@EXPORT_OK);

our $VERSION = 0.01;

our %html_entities;

# Parse the __DATA__ section into the %html_entities hash.
# This is done lazily to reduce the loading time of the program if the table is
# not needed.
#
# TODO: add a :full_init import option to the main package, to force the early
# execution of this method.
sub parse_entities {
  return if %html_entities;
  local $INPUT_RECORD_SEPARATOR = undef;
  %html_entities = eval <DATA>;  ## no critic (ProhibitStringyEval);
  confess $EVAL_ERROR if $EVAL_ERROR;
  close DATA or cluck 'Can’t close DATA file handle in lazy parsing of HTML entities mapping';
  return;
}

# Decode HTML entities like &amp; in the given string. Do it in-place if called
# in void-context otherwise returns a modified string.
# This is mostly equivalent to HTML::Entities::decode_entities but with our more
# complete list of entities, probably slower, and handling the replacement of
# 0x0 characters by 0xfffd.

# Currently, CounterClockwiseContourIntegral is the longest entity name, at 31
# char. We limit our search to 40 char to limit possible backtracking in case of
# failures (even if the spec does not say anything about it).
my $numeric_entity_re = qr/(?:\#(?: (?<dec> [0-9]{1,7} ) | [xX] (?<hex> [a-fA-F0-9]{1,6} ) ))/x;
my $entity_re = qr/& (?: ${numeric_entity_re} | (?<named> [a-zA-Z0-9]{2,40} ) ) ; /x;

sub convert_entity {
  # the `|| 0xfffd` part is so that &#0; is correctly replaced by the 0xfffd
  # "replacement" character (as is being done on the whole string at the
  # beginning of its processing).
  return
        exists $+{dec} ? chr($+{dec} || 0xfffd)
      : exists $+{hex} ? chr(hex($+{hex}) || 0xfffd)
      : (parse_entities(), $html_entities{$+{named}}) // "&$+{named};";
}

sub decode_entities {
  return $_[0] =~ s/${entity_re}/&convert_entity/egr if defined wantarray;
  $_[0] =~ s/${entity_re}/&convert_entity/eg;
  return;
}

# There are four characters that are escaped in the html output (although the
# spec never really says so because they claim that they care only about parsing).
my %char_to_html_entity = (
  '"' => '&quot;',
  "'" => '&apos;',
  '&' => '&amp;',
  '<' => '&lt;',
  '>' => '&gt;'
);

# html_escape($str_to_escape, $character_class_to_use_for_escaping)
sub html_escape {
  # TODO: I believe that this is re-compiled at each call because of the local
  # variable. The regex should be built once in the Markdown::Perl object.
  $_[0] =~ s/([$_[1]])/$char_to_html_entity{$1}/eg;
  return;
}

sub http_escape {
  utf8::encode($_[0]);
  # TODO: there are more characters that need to be escaped here, but it’s not
  # extremely clear which ones (the spec does a show of pretending to care only
  # only about parsing, but the conformance test suite expect something quite
  # specific. See: https://spec.commonmark.org/0.31.2/#example-502
  $_[0] =~ s/([ \\\[\]\x80-\xff`""])/sprintf('%%%02X', ord($1))/ge;
  return;
}

# remove_disallowed_tags($html, \@tag_list)
# modify $html in place.
sub remove_disallowed_tags {
  # TODO: check if GitHub also deactivates closing tags or only opening ones.
  # Note: this is a dummy approach, based on the fact that this method is called
  # only in the context of HTML blocks or inline HTML and so, something looking
  # like an HTML tag is probably an HTML tag.
  for my $t (@{$_[1]}) {
    $_[0] =~ s/<(\Q$t\E)/&lt;$1/gi;
  }
  return;
}

1;

__DATA__
# This table of entities is coming from the following command line:
#
# wget https://html.spec.whatwg.org/entities.json -O - | ptp -g '^\s*"&\w+;"' --sq '#' -p 'm/^.*"&(\w+);".*codepoints": \[([\d, ]+)\].*$/; $s = ""; $s .= chr() for split(/,\s*/, $2); if ($s eq "#") { $s = "\"$s\"" } else { $s = "#$s#"} $_ = "$1 => $s,"; ' -V --grep bsol.
#
# It was last executed on 2024-02-15.
#
# TODO: a couple of characters are empty, understand why.
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 => 'Ĳ',
IOcy => 'Ё',
Iacute => 'Í',
Icirc => 'Î',
Icy => 'И',
Idot => 'İ',
Ifr => 'ℑ',
Igrave => 'Ì',
Im => 'ℑ',
Imacr => 'Ī',
ImaginaryI => 'ⅈ',
Implies => '⇒',
Int => '∬',
Integral => '∫',
Intersection => '⋂',
InvisibleComma => '⁣',
InvisibleTimes => '⁢',
Iogon => 'Į',
Iopf => '𝕀',
Iota => 'Ι',
Iscr => 'ℐ',
Itilde => 'Ĩ',
Iukcy => 'І',
Iuml => 'Ï',
Jcirc => 'Ĵ',
Jcy => 'Й',
Jfr => '𝔍',
Jopf => '𝕁',
Jscr => '𝒥',
Jsercy => 'Ј',
Jukcy => 'Є',
KHcy => 'Х',
KJcy => 'Ќ',
Kappa => 'Κ',
Kcedil => 'Ķ',
Kcy => 'К',
Kfr => '𝔎',
Kopf => '𝕂',
Kscr => '𝒦',
LJcy => 'Љ',
LT => '<',
Lacute => 'Ĺ',
Lambda => 'Λ',
Lang => '⟪',
Laplacetrf => 'ℒ',
Larr => '↞',
Lcaron => 'Ľ',
Lcedil => 'Ļ',
Lcy => 'Л',
LeftAngleBracket => '⟨',
LeftArrow => '←',
LeftArrowBar => '⇤',
LeftArrowRightArrow => '⇆',
LeftCeiling => '⌈',
LeftDoubleBracket => '⟦',
LeftDownTeeVector => '⥡',
LeftDownVector => '⇃',
LeftDownVectorBar => '⥙',
LeftFloor => '⌊',
LeftRightArrow => '↔',
LeftRightVector => '⥎',
LeftTee => '⊣',
LeftTeeArrow => '↤',
LeftTeeVector => '⥚',
LeftTriangle => '⊲',
LeftTriangleBar => '⧏',
LeftTriangleEqual => '⊴',
LeftUpDownVector => '⥑',
LeftUpTeeVector => '⥠',
LeftUpVector => '↿',
LeftUpVectorBar => '⥘',
LeftVector => '↼',
LeftVectorBar => '⥒',
Leftarrow => '⇐',
Leftrightarrow => '⇔',
LessEqualGreater => '⋚',
LessFullEqual => '≦',
LessGreater => '≶',
LessLess => '⪡',
LessSlantEqual => '⩽',
LessTilde => '≲',
Lfr => '𝔏',
Ll => '⋘',
Lleftarrow => '⇚',
Lmidot => 'Ŀ',
LongLeftArrow => '⟵',
LongLeftRightArrow => '⟷',
LongRightArrow => '⟶',
Longleftarrow => '⟸',
Longleftrightarrow => '⟺',
Longrightarrow => '⟹',
Lopf => '𝕃',
LowerLeftArrow => '↙',
LowerRightArrow => '↘',
Lscr => 'ℒ',
Lsh => '↰',
Lstrok => 'Ł',
Lt => '≪',
Map => '⤅',
Mcy => 'М',
MediumSpace => ' ',
Mellintrf => 'ℳ',
Mfr => '𝔐',
MinusPlus => '∓',
Mopf => '𝕄',
Mscr => 'ℳ',
Mu => 'Μ',
NJcy => 'Њ',
Nacute => 'Ń',
Ncaron => 'Ň',
Ncedil => 'Ņ',
Ncy => 'Н',
NegativeMediumSpace => '​',
NegativeThickSpace => '​',
NegativeThinSpace => '​',
NegativeVeryThinSpace => '​',
NestedGreaterGreater => '≫',
NestedLessLess => '≪',
NewLine => '
',
Nfr => '𝔑',
NoBreak => '⁠',
NonBreakingSpace => ' ',
Nopf => 'ℕ',
Not => '⫬',
NotCongruent => '≢',
NotCupCap => '≭',
NotDoubleVerticalBar => '∦',
NotElement => '∉',
NotEqual => '≠',
NotEqualTilde => '≂̸',
NotExists => '∄',
NotGreater => '≯',
NotGreaterEqual => '≱',
NotGreaterFullEqual => '≧̸',
NotGreaterGreater => '≫̸',
NotGreaterLess => '≹',
NotGreaterSlantEqual => '⩾̸',
NotGreaterTilde => '≵',
NotHumpDownHump => '≎̸',
NotHumpEqual => '≏̸',
NotLeftTriangle => '⋪',
NotLeftTriangleBar => '⧏̸',
NotLeftTriangleEqual => '⋬',
NotLess => '≮',
NotLessEqual => '≰',
NotLessGreater => '≸',
NotLessLess => '≪̸',
NotLessSlantEqual => '⩽̸',
NotLessTilde => '≴',
NotNestedGreaterGreater => '⪢̸',
NotNestedLessLess => '⪡̸',
NotPrecedes => '⊀',
NotPrecedesEqual => '⪯̸',
NotPrecedesSlantEqual => '⋠',
NotReverseElement => '∌',
NotRightTriangle => '⋫',
NotRightTriangleBar => '⧐̸',
NotRightTriangleEqual => '⋭',
NotSquareSubset => '⊏̸',
NotSquareSubsetEqual => '⋢',
NotSquareSuperset => '⊐̸',
NotSquareSupersetEqual => '⋣',
NotSubset => '⊂⃒',
NotSubsetEqual => '⊈',
NotSucceeds => '⊁',
NotSucceedsEqual => '⪰̸',
NotSucceedsSlantEqual => '⋡',
NotSucceedsTilde => '≿̸',
NotSuperset => '⊃⃒',
NotSupersetEqual => '⊉',
NotTilde => '≁',
NotTildeEqual => '≄',
NotTildeFullEqual => '≇',
NotTildeTilde => '≉',
NotVerticalBar => '∤',
Nscr => '𝒩',
Ntilde => 'Ñ',
Nu => 'Ν',
OElig => 'Œ',
Oacute => 'Ó',
Ocirc => 'Ô',
Ocy => 'О',
Odblac => 'Ő',
Ofr => '𝔒',
Ograve => 'Ò',
Omacr => 'Ō',
Omega => 'Ω',
Omicron => 'Ο',
Oopf => '𝕆',
OpenCurlyDoubleQuote => '“',
OpenCurlyQuote => '‘',
Or => '⩔',
Oscr => '𝒪',
Oslash => 'Ø',
Otilde => 'Õ',
Otimes => '⨷',
Ouml => 'Ö',
OverBar => '‾',
OverBrace => '⏞',
OverBracket => '⎴',
OverParenthesis => '⏜',
PartialD => '∂',
Pcy => 'П',
Pfr => '𝔓',
Phi => 'Φ',
Pi => 'Π',
PlusMinus => '±',
Poincareplane => 'ℌ',
Popf => 'ℙ',
Pr => '⪻',
Precedes => '≺',
PrecedesEqual => '⪯',
PrecedesSlantEqual => '≼',
PrecedesTilde => '≾',
Prime => '″',
Product => '∏',
Proportion => '∷',
Proportional => '∝',
Pscr => '𝒫',
Psi => 'Ψ',
QUOT => '"',
Qfr => '𝔔',
Qopf => 'ℚ',
Qscr => '𝒬',
RBarr => '⤐',
REG => '®',
Racute => 'Ŕ',
Rang => '⟫',
Rarr => '↠',
Rarrtl => '⤖',
Rcaron => 'Ř',
Rcedil => 'Ŗ',
Rcy => 'Р',
Re => 'ℜ',
ReverseElement => '∋',
ReverseEquilibrium => '⇋',
ReverseUpEquilibrium => '⥯',
Rfr => 'ℜ',
Rho => 'Ρ',
RightAngleBracket => '⟩',
RightArrow => '→',
RightArrowBar => '⇥',
RightArrowLeftArrow => '⇄',
RightCeiling => '⌉',
RightDoubleBracket => '⟧',
RightDownTeeVector => '⥝',
RightDownVector => '⇂',
RightDownVectorBar => '⥕',
RightFloor => '⌋',
RightTee => '⊢',
RightTeeArrow => '↦',
RightTeeVector => '⥛',
RightTriangle => '⊳',
RightTriangleBar => '⧐',
RightTriangleEqual => '⊵',
RightUpDownVector => '⥏',
RightUpTeeVector => '⥜',
RightUpVector => '↾',
RightUpVectorBar => '⥔',
RightVector => '⇀',
RightVectorBar => '⥓',
Rightarrow => '⇒',
Ropf => 'ℝ',
RoundImplies => '⥰',
Rrightarrow => '⇛',
Rscr => 'ℛ',
Rsh => '↱',
RuleDelayed => '⧴',
SHCHcy => 'Щ',
SHcy => 'Ш',
SOFTcy => 'Ь',
Sacute => 'Ś',
Sc => '⪼',
Scaron => 'Š',
Scedil => 'Ş',
Scirc => 'Ŝ',
Scy => 'С',
Sfr => '𝔖',
ShortDownArrow => '↓',
ShortLeftArrow => '←',
ShortRightArrow => '→',
ShortUpArrow => '↑',
Sigma => 'Σ',
SmallCircle => '∘',
Sopf => '𝕊',
Sqrt => '√',
Square => '□',
SquareIntersection => '⊓',
SquareSubset => '⊏',
SquareSubsetEqual => '⊑',
SquareSuperset => '⊐',
SquareSupersetEqual => '⊒',
SquareUnion => '⊔',
Sscr => '𝒮',
Star => '⋆',
Sub => '⋐',
Subset => '⋐',
SubsetEqual => '⊆',
Succeeds => '≻',
SucceedsEqual => '⪰',
SucceedsSlantEqual => '≽',
SucceedsTilde => '≿',
SuchThat => '∋',
Sum => '∑',
Sup => '⋑',
Superset => '⊃',
SupersetEqual => '⊇',
Supset => '⋑',
THORN => 'Þ',
TRADE => '™',
TSHcy => 'Ћ',
TScy => 'Ц',
Tab => '	',
Tau => 'Τ',
Tcaron => 'Ť',
Tcedil => 'Ţ',
Tcy => 'Т',
Tfr => '𝔗',
Therefore => '∴',
Theta => 'Θ',
ThickSpace => '  ',
ThinSpace => ' ',
Tilde => '∼',
TildeEqual => '≃',
TildeFullEqual => '≅',
TildeTilde => '≈',
Topf => '𝕋',
TripleDot => '⃛',
Tscr => '𝒯',
Tstrok => 'Ŧ',
Uacute => 'Ú',
Uarr => '↟',
Uarrocir => '⥉',
Ubrcy => 'Ў',
Ubreve => 'Ŭ',
Ucirc => 'Û',
Ucy => 'У',
Udblac => 'Ű',
Ufr => '𝔘',
Ugrave => 'Ù',
Umacr => 'Ū',
UnderBar => '_',
UnderBrace => '⏟',
UnderBracket => '⎵',
UnderParenthesis => '⏝',
Union => '⋃',
UnionPlus => '⊎',
Uogon => 'Ų',
Uopf => '𝕌',
UpArrow => '↑',
UpArrowBar => '⤒',
UpArrowDownArrow => '⇅',
UpDownArrow => '↕',
UpEquilibrium => '⥮',
UpTee => '⊥',
UpTeeArrow => '↥',
Uparrow => '⇑',
Updownarrow => '⇕',
UpperLeftArrow => '↖',
UpperRightArrow => '↗',
Upsi => 'ϒ',
Upsilon => 'Υ',
Uring => 'Ů',
Uscr => '𝒰',
Utilde => 'Ũ',
Uuml => 'Ü',
VDash => '⊫',
Vbar => '⫫',
Vcy => 'В',
Vdash => '⊩',
Vdashl => '⫦',
Vee => '⋁',
Verbar => '‖',
Vert => '‖',
VerticalBar => '∣',
VerticalLine => '|',
VerticalSeparator => '❘',
VerticalTilde => '≀',
VeryThinSpace => ' ',
Vfr => '𝔙',
Vopf => '𝕍',
Vscr => '𝒱',
Vvdash => '⊪',
Wcirc => 'Ŵ',
Wedge => '⋀',
Wfr => '𝔚',
Wopf => '𝕎',
Wscr => '𝒲',
Xfr => '𝔛',
Xi => 'Ξ',
Xopf => '𝕏',
Xscr => '𝒳',
YAcy => 'Я',
YIcy => 'Ї',
YUcy => 'Ю',
Yacute => 'Ý',
Ycirc => 'Ŷ',
Ycy => 'Ы',
Yfr => '𝔜',
Yopf => '𝕐',
Yscr => '𝒴',
Yuml => 'Ÿ',
ZHcy => 'Ж',
Zacute => 'Ź',
Zcaron => 'Ž',
Zcy => 'З',
Zdot => 'Ż',
ZeroWidthSpace => '​',
Zeta => 'Ζ',
Zfr => 'ℨ',
Zopf => 'ℤ',
Zscr => '𝒵',
aacute => 'á',
abreve => 'ă',
ac => '∾',
acE => '∾̳',
acd => '∿',
acirc => 'â',
acute => '´',
acy => 'а',
aelig => 'æ',
af => '⁡',
afr => '𝔞',
agrave => 'à',
alefsym => 'ℵ',
aleph => 'ℵ',
alpha => 'α',
amacr => 'ā',
amalg => '⨿',
amp => '&',
and => '∧',
andand => '⩕',
andd => '⩜',
andslope => '⩘',
andv => '⩚',
ang => '∠',
ange => '⦤',
angle => '∠',
angmsd => '∡',
angmsdaa => '⦨',
angmsdab => '⦩',
angmsdac => '⦪',
angmsdad => '⦫',
angmsdae => '⦬',
angmsdaf => '⦭',
angmsdag => '⦮',
angmsdah => '⦯',
angrt => '∟',
angrtvb => '⊾',
angrtvbd => '⦝',
angsph => '∢',
angst => 'Å',
angzarr => '⍼',
aogon => 'ą',
aopf => '𝕒',
ap => '≈',
apE => '⩰',
apacir => '⩯',
ape => '≊',
apid => '≋',
apos => "'",
approx => '≈',
approxeq => '≊',
aring => 'å',
ascr => '𝒶',
ast => '*',
asymp => '≈',
asympeq => '≍',
atilde => 'ã',
auml => 'ä',
awconint => '∳',
awint => '⨑',
bNot => '⫭',
backcong => '≌',
backepsilon => '϶',
backprime => '‵',
backsim => '∽',
backsimeq => '⋍',
barvee => '⊽',
barwed => '⌅',
barwedge => '⌅',
bbrk => '⎵',
bbrktbrk => '⎶',
bcong => '≌',
bcy => 'б',
bdquo => '„',
becaus => '∵',
because => '∵',
bemptyv => '⦰',
bepsi => '϶',
bernou => 'ℬ',
beta => 'β',
beth => 'ℶ',
between => '≬',
bfr => '𝔟',
bigcap => '⋂',
bigcirc => '◯',
bigcup => '⋃',
bigodot => '⨀',
bigoplus => '⨁',
bigotimes => '⨂',
bigsqcup => '⨆',
bigstar => '★',
bigtriangledown => '▽',
bigtriangleup => '△',
biguplus => '⨄',
bigvee => '⋁',
bigwedge => '⋀',
bkarow => '⤍',
blacklozenge => '⧫',
blacksquare => '▪',
blacktriangle => '▴',
blacktriangledown => '▾',
blacktriangleleft => '◂',
blacktriangleright => '▸',
blank => '␣',
blk12 => '▒',
blk14 => '░',
blk34 => '▓',
block => '█',
bne => '=⃥',
bnequiv => '≡⃥',
bnot => '⌐',
bopf => '𝕓',
bot => '⊥',
bottom => '⊥',
bowtie => '⋈',
boxDL => '╗',
boxDR => '╔',
boxDl => '╖',
boxDr => '╓',
boxH => '═',
boxHD => '╦',
boxHU => '╩',
boxHd => '╤',
boxHu => '╧',
boxUL => '╝',
boxUR => '╚',
boxUl => '╜',
boxUr => '╙',
boxV => '║',
boxVH => '╬',
boxVL => '╣',
boxVR => '╠',
boxVh => '╫',
boxVl => '╢',
boxVr => '╟',
boxbox => '⧉',
boxdL => '╕',
boxdR => '╒',
boxdl => '┐',
boxdr => '┌',
boxh => '─',
boxhD => '╥',
boxhU => '╨',
boxhd => '┬',
boxhu => '┴',
boxminus => '⊟',
boxplus => '⊞',
boxtimes => '⊠',
boxuL => '╛',
boxuR => '╘',
boxul => '┘',
boxur => '└',
boxv => '│',
boxvH => '╪',
boxvL => '╡',
boxvR => '╞',
boxvh => '┼',
boxvl => '┤',
boxvr => '├',
bprime => '‵',
breve => '˘',
brvbar => '¦',
bscr => '𝒷',
bsemi => '⁏',
bsim => '∽',
bsime => '⋍',
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 => 'ﬃ',
fflig => 'ﬀ',
ffllig => 'ﬄ',
ffr => '𝔣',
filig => 'ﬁ',
fjlig => 'fj',
flat => '♭',
fllig => 'ﬂ',
fltns => '▱',
fnof => 'ƒ',
fopf => '𝕗',
forall => '∀',
fork => '⋔',
forkv => '⫙',
fpartint => '⨍',
frac12 => '½',
frac13 => '⅓',
frac14 => '¼',
frac15 => '⅕',
frac16 => '⅙',
frac18 => '⅛',
frac23 => '⅔',
frac25 => '⅖',
frac34 => '¾',
frac35 => '⅗',
frac38 => '⅜',
frac45 => '⅘',
frac56 => '⅚',
frac58 => '⅝',
frac78 => '⅞',
frasl => '⁄',
frown => '⌢',
fscr => '𝒻',
gE => '≧',
gEl => '⪌',
gacute => 'ǵ',
gamma => 'γ',
gammad => 'ϝ',
gap => '⪆',
gbreve => 'ğ',
gcirc => 'ĝ',
gcy => 'г',
gdot => 'ġ',
ge => '≥',
gel => '⋛',
geq => '≥',
geqq => '≧',
geqslant => '⩾',
ges => '⩾',
gescc => '⪩',
gesdot => '⪀',
gesdoto => '⪂',
gesdotol => '⪄',
gesl => '⋛︀',
gesles => '⪔',
gfr => '𝔤',
gg => '≫',
ggg => '⋙',
gimel => 'ℷ',
gjcy => 'ѓ',
gl => '≷',
glE => '⪒',
gla => '⪥',
glj => '⪤',
gnE => '≩',
gnap => '⪊',
gnapprox => '⪊',
gne => '⪈',
gneq => '⪈',
gneqq => '≩',
gnsim => '⋧',
gopf => '𝕘',
grave => '`',
gscr => 'ℊ',
gsim => '≳',
gsime => '⪎',
gsiml => '⪐',
gt => '>',
gtcc => '⪧',
gtcir => '⩺',
gtdot => '⋗',
gtlPar => '⦕',
gtquest => '⩼',
gtrapprox => '⪆',
gtrarr => '⥸',
gtrdot => '⋗',
gtreqless => '⋛',
gtreqqless => '⪌',
gtrless => '≷',
gtrsim => '≳',
gvertneqq => '≩︀',
gvnE => '≩︀',
hArr => '⇔',
hairsp => ' ',
half => '½',
hamilt => 'ℋ',
hardcy => 'ъ',
harr => '↔',
harrcir => '⥈',
harrw => '↭',
hbar => 'ℏ',
hcirc => 'ĥ',
hearts => '♥',
heartsuit => '♥',
hellip => '…',
hercon => '⊹',
hfr => '𝔥',
hksearow => '⤥',
hkswarow => '⤦',
hoarr => '⇿',
homtht => '∻',
hookleftarrow => '↩',
hookrightarrow => '↪',
hopf => '𝕙',
horbar => '―',
hscr => '𝒽',
hslash => 'ℏ',
hstrok => 'ħ',
hybull => '⁃',
hyphen => '‐',
iacute => 'í',
ic => '⁣',
icirc => 'î',
icy => 'и',
iecy => 'е',
iexcl => '¡',
iff => '⇔',
ifr => '𝔦',
igrave => 'ì',
ii => 'ⅈ',
iiiint => '⨌',
iiint => '∭',
iinfin => '⧜',
iiota => '℩',
ijlig => 'ĳ',
imacr => 'ī',
image => 'ℑ',
imagline => 'ℐ',
imagpart => 'ℑ',
imath => 'ı',
imof => '⊷',
imped => 'Ƶ',
in => '∈',
incare => '℅',
infin => '∞',
infintie => '⧝',
inodot => 'ı',
int => '∫',
intcal => '⊺',
integers => 'ℤ',
intercal => '⊺',
intlarhk => '⨗',
intprod => '⨼',
iocy => 'ё',
iogon => 'į',
iopf => '𝕚',
iota => 'ι',
iprod => '⨼',
iquest => '¿',
iscr => '𝒾',
isin => '∈',
isinE => '⋹',
isindot => '⋵',
isins => '⋴',
isinsv => '⋳',
isinv => '∈',
it => '⁢',
itilde => 'ĩ',
iukcy => 'і',
iuml => 'ï',
jcirc => 'ĵ',
jcy => 'й',
jfr => '𝔧',
jmath => 'ȷ',
jopf => '𝕛',
jscr => '𝒿',
jsercy => 'ј',
jukcy => 'є',
kappa => 'κ',
kappav => 'ϰ',
kcedil => 'ķ',
kcy => 'к',
kfr => '𝔨',
kgreen => 'ĸ',
khcy => 'х',
kjcy => 'ќ',
kopf => '𝕜',
kscr => '𝓀',
lAarr => '⇚',
lArr => '⇐',
lAtail => '⤛',
lBarr => '⤎',
lE => '≦',
lEg => '⪋',
lHar => '⥢',
lacute => 'ĺ',
laemptyv => '⦴',
lagran => 'ℒ',
lambda => 'λ',
lang => '⟨',
langd => '⦑',
langle => '⟨',
lap => '⪅',
laquo => '«',
larr => '←',
larrb => '⇤',
larrbfs => '⤟',
larrfs => '⤝',
larrhk => '↩',
larrlp => '↫',
larrpl => '⤹',
larrsim => '⥳',
larrtl => '↢',
lat => '⪫',
latail => '⤙',
late => '⪭',
lates => '⪭︀',
lbarr => '⤌',
lbbrk => '❲',
lbrace => '{',
lbrack => '[',
lbrke => '⦋',
lbrksld => '⦏',
lbrkslu => '⦍',
lcaron => 'ľ',
lcedil => 'ļ',
lceil => '⌈',
lcub => '{',
lcy => 'л',
ldca => '⤶',
ldquo => '“',
ldquor => '„',
ldrdhar => '⥧',
ldrushar => '⥋',
ldsh => '↲',
le => '≤',
leftarrow => '←',
leftarrowtail => '↢',
leftharpoondown => '↽',
leftharpoonup => '↼',
leftleftarrows => '⇇',
leftrightarrow => '↔',
leftrightarrows => '⇆',
leftrightharpoons => '⇋',
leftrightsquigarrow => '↭',
leftthreetimes => '⋋',
leg => '⋚',
leq => '≤',
leqq => '≦',
leqslant => '⩽',
les => '⩽',
lescc => '⪨',
lesdot => '⩿',
lesdoto => '⪁',
lesdotor => '⪃',
lesg => '⋚︀',
lesges => '⪓',
lessapprox => '⪅',
lessdot => '⋖',
lesseqgtr => '⋚',
lesseqqgtr => '⪋',
lessgtr => '≶',
lesssim => '≲',
lfisht => '⥼',
lfloor => '⌊',
lfr => '𝔩',
lg => '≶',
lgE => '⪑',
lhard => '↽',
lharu => '↼',
lharul => '⥪',
lhblk => '▄',
ljcy => 'љ',
ll => '≪',
llarr => '⇇',
llcorner => '⌞',
llhard => '⥫',
lltri => '◺',
lmidot => 'ŀ',
lmoust => '⎰',
lmoustache => '⎰',
lnE => '≨',
lnap => '⪉',
lnapprox => '⪉',
lne => '⪇',
lneq => '⪇',
lneqq => '≨',
lnsim => '⋦',
loang => '⟬',
loarr => '⇽',
lobrk => '⟦',
longleftarrow => '⟵',
longleftrightarrow => '⟷',
longmapsto => '⟼',
longrightarrow => '⟶',
looparrowleft => '↫',
looparrowright => '↬',
lopar => '⦅',
lopf => '𝕝',
loplus => '⨭',
lotimes => '⨴',
lowast => '∗',
lowbar => '_',
loz => '◊',
lozenge => '◊',
lozf => '⧫',
lpar => '(',
lparlt => '⦓',
lrarr => '⇆',
lrcorner => '⌟',
lrhar => '⇋',
lrhard => '⥭',
lrm => '‎',
lrtri => '⊿',
lsaquo => '‹',
lscr => '𝓁',
lsh => '↰',
lsim => '≲',
lsime => '⪍',
lsimg => '⪏',
lsqb => '[',
lsquo => '‘',
lsquor => '‚',
lstrok => 'ł',
lt => '<',
ltcc => '⪦',
ltcir => '⩹',
ltdot => '⋖',
lthree => '⋋',
ltimes => '⋉',
ltlarr => '⥶',
ltquest => '⩻',
ltrPar => '⦖',
ltri => '◃',
ltrie => '⊴',
ltrif => '◂',
lurdshar => '⥊',
luruhar => '⥦',
lvertneqq => '≨︀',
lvnE => '≨︀',
mDDot => '∺',
macr => '¯',
male => '♂',
malt => '✠',
maltese => '✠',
map => '↦',
mapsto => '↦',
mapstodown => '↧',
mapstoleft => '↤',
mapstoup => '↥',
marker => '▮',
mcomma => '⨩',
mcy => 'м',
mdash => '—',
measuredangle => '∡',
mfr => '𝔪',
mho => '℧',
micro => 'µ',
mid => '∣',
midast => '*',
midcir => '⫰',
middot => '·',
minus => '−',
minusb => '⊟',
minusd => '∸',
minusdu => '⨪',
mlcp => '⫛',
mldr => '…',
mnplus => '∓',
models => '⊧',
mopf => '𝕞',
mp => '∓',
mscr => '𝓂',
mstpos => '∾',
mu => 'μ',
multimap => '⊸',
mumap => '⊸',
nGg => '⋙̸',
nGt => '≫⃒',
nGtv => '≫̸',
nLeftarrow => '⇍',
nLeftrightarrow => '⇎',
nLl => '⋘̸',
nLt => '≪⃒',
nLtv => '≪̸',
nRightarrow => '⇏',
nVDash => '⊯',
nVdash => '⊮',
nabla => '∇',
nacute => 'ń',
nang => '∠⃒',
nap => '≉',
napE => '⩰̸',
napid => '≋̸',
napos => 'ŉ',
napprox => '≉',
natur => '♮',
natural => '♮',
naturals => 'ℕ',
nbsp => ' ',
nbump => '≎̸',
nbumpe => '≏̸',
ncap => '⩃',
ncaron => 'ň',
ncedil => 'ņ',
ncong => '≇',
ncongdot => '⩭̸',
ncup => '⩂',
ncy => 'н',
ndash => '–',
ne => '≠',
neArr => '⇗',
nearhk => '⤤',
nearr => '↗',
nearrow => '↗',
nedot => '≐̸',
nequiv => '≢',
nesear => '⤨',
nesim => '≂̸',
nexist => '∄',
nexists => '∄',
nfr => '𝔫',
ngE => '≧̸',
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 => '‌',
