{-# LANGUAGE CPP #-}
{-# LANGUAGE OverloadedStrings #-}
module Commonmark.Entity
( lookupEntity
, charEntity
, numEntity
, unEntity
)
where
import Data.Functor.Identity (Identity)
import qualified Data.Map.Strict as Map
import Commonmark.TokParsers
import Commonmark.Tokens
import Text.Parsec
import qualified Data.Text as T
import Data.Text (Text)
import qualified Data.Text.Read as TR
import Control.Monad (guard, mzero)
import Data.Char (isDigit, isHexDigit, chr)
import Data.Maybe (isJust)
#if !MIN_VERSION_base(4,11,0)
import Data.Semigroup (Semigroup(..))
#endif
lookupEntity :: Text -> Maybe Text
lookupEntity t =
case T.uncons t of
Just ('#', t') -> lookupNumericEntity t'
_ -> lookupNamedEntity t
lookupNumericEntity :: Text -> Maybe Text
lookupNumericEntity = f
where
f t = case T.uncons t of
Just ('x', t') -> g TR.hexadecimal t'
Just ('X', t') -> g TR.hexadecimal t'
_ -> g TR.decimal t
g :: TR.Reader Integer -> Text -> Maybe Text
g reader t =
case reader t of
Right (x,t')
| T.null t' || t' == ";" ->
if x < 1 || x > 0x10FFFF
then Just "\xFFFD"
else Just $ T.singleton $ chr $ fromInteger x
_ -> Nothing
lookupNamedEntity :: Text -> Maybe Text
lookupNamedEntity x = Map.lookup x htmlEntityMap
htmlEntityMap :: Map.Map Text Text
htmlEntityMap = Map.fromList htmlEntities
htmlEntities :: [(Text, Text)]
htmlEntities =
[("Aacute", "\x00C1")
,("aacute", "\x00E1")
,("Aacute;", "\x00C1")
,("aacute;", "\x00E1")
,("Abreve;", "\x0102")
,("abreve;", "\x0103")
,("ac;", "\x223E")
,("acd;", "\x223F")
,("acE;", "\x223E\x0333")
,("Acirc", "\x00C2")
,("acirc", "\x00E2")
,("Acirc;", "\x00C2")
,("acirc;", "\x00E2")
,("acute", "\x00B4")
,("acute;", "\x00B4")
,("Acy;", "\x0410")
,("acy;", "\x0430")
,("AElig", "\x00C6")
,("aelig", "\x00E6")
,("AElig;", "\x00C6")
,("aelig;", "\x00E6")
,("af;", "\x2061")
,("Afr;", "\x1D504")
,("afr;", "\x1D51E")
,("Agrave", "\x00C0")
,("agrave", "\x00E0")
,("Agrave;", "\x00C0")
,("agrave;", "\x00E0")
,("alefsym;", "\x2135")
,("aleph;", "\x2135")
,("Alpha;", "\x0391")
,("alpha;", "\x03B1")
,("Amacr;", "\x0100")
,("amacr;", "\x0101")
,("amalg;", "\x2A3F")
,("AMP", "\x0026")
,("amp", "\x0026")
,("AMP;", "\x0026")
,("amp;", "\x0026")
,("and;", "\x2227")
,("And;", "\x2A53")
,("andand;", "\x2A55")
,("andd;", "\x2A5C")
,("andslope;", "\x2A58")
,("andv;", "\x2A5A")
,("ang;", "\x2220")
,("ange;", "\x29A4")
,("angle;", "\x2220")
,("angmsd;", "\x2221")
,("angmsdaa;", "\x29A8")
,("angmsdab;", "\x29A9")
,("angmsdac;", "\x29AA")
,("angmsdad;", "\x29AB")
,("angmsdae;", "\x29AC")
,("angmsdaf;", "\x29AD")
,("angmsdag;", "\x29AE")
,("angmsdah;", "\x29AF")
,("angrt;", "\x221F")
,("angrtvb;", "\x22BE")
,("angrtvbd;", "\x299D")
,("angsph;", "\x2222")
,("angst;", "\x00C5")
,("angzarr;", "\x237C")
,("Aogon;", "\x0104")
,("aogon;", "\x0105")
,("Aopf;", "\x1D538")
,("aopf;", "\x1D552")
,("ap;", "\x2248")
,("apacir;", "\x2A6F")
,("ape;", "\x224A")
,("apE;", "\x2A70")
,("apid;", "\x224B")
,("apos;", "\x0027")
,("ApplyFunction;", "\x2061")
,("approx;", "\x2248")
,("approxeq;", "\x224A")
,("Aring", "\x00C5")
,("aring", "\x00E5")
,("Aring;", "\x00C5")
,("aring;", "\x00E5")
,("Ascr;", "\x1D49C")
,("ascr;", "\x1D4B6")
,("Assign;", "\x2254")
,("ast;", "\x002A")
,("asymp;", "\x2248")
,("asympeq;", "\x224D")
,("Atilde", "\x00C3")
,("atilde", "\x00E3")
,("Atilde;", "\x00C3")
,("atilde;", "\x00E3")
,("Auml", "\x00C4")
,("auml", "\x00E4")
,("Auml;", "\x00C4")
,("auml;", "\x00E4")
,("awconint;", "\x2233")
,("awint;", "\x2A11")
,("backcong;", "\x224C")
,("backepsilon;", "\x03F6")
,("backprime;", "\x2035")
,("backsim;", "\x223D")
,("backsimeq;", "\x22CD")
,("Backslash;", "\x2216")
,("Barv;", "\x2AE7")
,("barvee;", "\x22BD")
,("barwed;", "\x2305")
,("Barwed;", "\x2306")
,("barwedge;", "\x2305")
,("bbrk;", "\x23B5")
,("bbrktbrk;", "\x23B6")
,("bcong;", "\x224C")
,("Bcy;", "\x0411")
,("bcy;", "\x0431")
,("bdquo;", "\x201E")
,("becaus;", "\x2235")
,("Because;", "\x2235")
,("because;", "\x2235")
,("bemptyv;", "\x29B0")
,("bepsi;", "\x03F6")
,("bernou;", "\x212C")
,("Bernoullis;", "\x212C")
,("Beta;", "\x0392")
,("beta;", "\x03B2")
,("beth;", "\x2136")
,("between;", "\x226C")
,("Bfr;", "\x1D505")
,("bfr;", "\x1D51F")
,("bigcap;", "\x22C2")
,("bigcirc;", "\x25EF")
,("bigcup;", "\x22C3")
,("bigodot;", "\x2A00")
,("bigoplus;", "\x2A01")
,("bigotimes;", "\x2A02")
,("bigsqcup;", "\x2A06")
,("bigstar;", "\x2605")
,("bigtriangledown;", "\x25BD")
,("bigtriangleup;", "\x25B3")
,("biguplus;", "\x2A04")
,("bigvee;", "\x22C1")
,("bigwedge;", "\x22C0")
,("bkarow;", "\x290D")
,("blacklozenge;", "\x29EB")
,("blacksquare;", "\x25AA")
,("blacktriangle;", "\x25B4")
,("blacktriangledown;", "\x25BE")
,("blacktriangleleft;", "\x25C2")
,("blacktriangleright;", "\x25B8")
,("blank;", "\x2423")
,("blk12;", "\x2592")
,("blk14;", "\x2591")
,("blk34;", "\x2593")
,("block;", "\x2588")
,("bne;", "\x003D\x20E5")
,("bnequiv;", "\x2261\x20E5")
,("bnot;", "\x2310")
,("bNot;", "\x2AED")
,("Bopf;", "\x1D539")
,("bopf;", "\x1D553")
,("bot;", "\x22A5")
,("bottom;", "\x22A5")
,("bowtie;", "\x22C8")
,("boxbox;", "\x29C9")
,("boxdl;", "\x2510")
,("boxdL;", "\x2555")
,("boxDl;", "\x2556")
,("boxDL;", "\x2557")
,("boxdr;", "\x250C")
,("boxdR;", "\x2552")
,("boxDr;", "\x2553")
,("boxDR;", "\x2554")
,("boxh;", "\x2500")
,("boxH;", "\x2550")
,("boxhd;", "\x252C")
,("boxHd;", "\x2564")
,("boxhD;", "\x2565")
,("boxHD;", "\x2566")
,("boxhu;", "\x2534")
,("boxHu;", "\x2567")
,("boxhU;", "\x2568")
,("boxHU;", "\x2569")
,("boxminus;", "\x229F")
,("boxplus;", "\x229E")
,("boxtimes;", "\x22A0")
,("boxul;", "\x2518")
,("boxuL;", "\x255B")
,("boxUl;", "\x255C")
,("boxUL;", "\x255D")
,("boxur;", "\x2514")
,("boxuR;", "\x2558")
,("boxUr;", "\x2559")
,("boxUR;", "\x255A")
,("boxv;", "\x2502")
,("boxV;", "\x2551")
,("boxvh;", "\x253C")
,("boxvH;", "\x256A")
,("boxVh;", "\x256B")
,("boxVH;", "\x256C")
,("boxvl;", "\x2524")
,("boxvL;", "\x2561")
,("boxVl;", "\x2562")
,("boxVL;", "\x2563")
,("boxvr;", "\x251C")
,("boxvR;", "\x255E")
,("boxVr;", "\x255F")
,("boxVR;", "\x2560")
,("bprime;", "\x2035")
,("Breve;", "\x02D8")
,("breve;", "\x02D8")
,("brvbar", "\x00A6")
,("brvbar;", "\x00A6")
,("Bscr;", "\x212C")
,("bscr;", "\x1D4B7")
,("bsemi;", "\x204F")
,("bsim;", "\x223D")
,("bsime;", "\x22CD")
,("bsol;", "\x005C")
,("bsolb;", "\x29C5")
,("bsolhsub;", "\x27C8")
,("bull;", "\x2022")
,("bullet;", "\x2022")
,("bump;", "\x224E")
,("bumpe;", "\x224F")
,("bumpE;", "\x2AAE")
,("Bumpeq;", "\x224E")
,("bumpeq;", "\x224F")
,("Cacute;", "\x0106")
,("cacute;", "\x0107")
,("cap;", "\x2229")
,("Cap;", "\x22D2")
,("capand;", "\x2A44")
,("capbrcup;", "\x2A49")
,("capcap;", "\x2A4B")
,("capcup;", "\x2A47")
,("capdot;", "\x2A40")
,("CapitalDifferentialD;", "\x2145")
,("caps;", "\x2229\xFE00")
,("caret;", "\x2041")
,("caron;", "\x02C7")
,("Cayleys;", "\x212D")
,("ccaps;", "\x2A4D")
,("Ccaron;", "\x010C")
,("ccaron;", "\x010D")
,("Ccedil", "\x00C7")
,("ccedil", "\x00E7")
,("Ccedil;", "\x00C7")
,("ccedil;", "\x00E7")
,("Ccirc;", "\x0108")
,("ccirc;", "\x0109")
,("Cconint;", "\x2230")
,("ccups;", "\x2A4C")
,("ccupssm;", "\x2A50")
,("Cdot;", "\x010A")
,("cdot;", "\x010B")
,("cedil", "\x00B8")
,("cedil;", "\x00B8")
,("Cedilla;", "\x00B8")
,("cemptyv;", "\x29B2")
,("cent", "\x00A2")
,("cent;", "\x00A2")
,("CenterDot;", "\x00B7")
,("centerdot;", "\x00B7")
,("Cfr;", "\x212D")
,("cfr;", "\x1D520")
,("CHcy;", "\x0427")
,("chcy;", "\x0447")
,("check;", "\x2713")
,("checkmark;", "\x2713")
,("Chi;", "\x03A7")
,("chi;", "\x03C7")
,("cir;", "\x25CB")
,("circ;", "\x02C6")
,("circeq;", "\x2257")
,("circlearrowleft;", "\x21BA")
,("circlearrowright;", "\x21BB")
,("circledast;", "\x229B")
,("circledcirc;", "\x229A")
,("circleddash;", "\x229D")
,("CircleDot;", "\x2299")
,("circledR;", "\x00AE")
,("circledS;", "\x24C8")
,("CircleMinus;", "\x2296")
,("CirclePlus;", "\x2295")
,("CircleTimes;", "\x2297")
,("cire;", "\x2257")
,("cirE;", "\x29C3")
,("cirfnint;", "\x2A10")
,("cirmid;", "\x2AEF")
,("cirscir;", "\x29C2")
,("ClockwiseContourIntegral;", "\x2232")
,("CloseCurlyDoubleQuote;", "\x201D")
,("CloseCurlyQuote;", "\x2019")
,("clubs;", "\x2663")
,("clubsuit;", "\x2663")
,("colon;", "\x003A")
,("Colon;", "\x2237")
,("colone;", "\x2254")
,("Colone;", "\x2A74")
,("coloneq;", "\x2254")
,("comma;", "\x002C")
,("commat;", "\x0040")
,("comp;", "\x2201")
,("compfn;", "\x2218")
,("complement;", "\x2201")
,("complexes;", "\x2102")
,("cong;", "\x2245")
,("congdot;", "\x2A6D")
,("Congruent;", "\x2261")
,("conint;", "\x222E")
,("Conint;", "\x222F")
,("ContourIntegral;", "\x222E")
,("Copf;", "\x2102")
,("copf;", "\x1D554")
,("coprod;", "\x2210")
,("Coproduct;", "\x2210")
,("COPY", "\x00A9")
,("copy", "\x00A9")
,("COPY;", "\x00A9")
,("copy;", "\x00A9")
,("copysr;", "\x2117")
,("CounterClockwiseContourIntegral;", "\x2233")
,("crarr;", "\x21B5")
,("cross;", "\x2717")
,("Cross;", "\x2A2F")
,("Cscr;", "\x1D49E")
,("cscr;", "\x1D4B8")
,("csub;", "\x2ACF")
,("csube;", "\x2AD1")
,("csup;", "\x2AD0")
,("csupe;", "\x2AD2")
,("ctdot;", "\x22EF")
,("cudarrl;", "\x2938")
,("cudarrr;", "\x2935")
,("cuepr;", "\x22DE")
,("cuesc;", "\x22DF")
,("cularr;", "\x21B6")
,("cularrp;", "\x293D")
,("cup;", "\x222A")
,("Cup;", "\x22D3")
,("cupbrcap;", "\x2A48")
,("CupCap;", "\x224D")
,("cupcap;", "\x2A46")
,("cupcup;", "\x2A4A")
,("cupdot;", "\x228D")
,("cupor;", "\x2A45")
,("cups;", "\x222A\xFE00")
,("curarr;", "\x21B7")
,("curarrm;", "\x293C")
,("curlyeqprec;", "\x22DE")
,("curlyeqsucc;", "\x22DF")
,("curlyvee;", "\x22CE")
,("curlywedge;", "\x22CF")
,("curren", "\x00A4")
,("curren;", "\x00A4")
,("curvearrowleft;", "\x21B6")
,("curvearrowright;", "\x21B7")
,("cuvee;", "\x22CE")
,("cuwed;", "\x22CF")
,("cwconint;", "\x2232")
,("cwint;", "\x2231")
,("cylcty;", "\x232D")
,("dagger;", "\x2020")
,("Dagger;", "\x2021")
,("daleth;", "\x2138")
,("darr;", "\x2193")
,("Darr;", "\x21A1")
,("dArr;", "\x21D3")
,("dash;", "\x2010")
,("dashv;", "\x22A3")
,("Dashv;", "\x2AE4")
,("dbkarow;", "\x290F")
,("dblac;", "\x02DD")
,("Dcaron;", "\x010E")
,("dcaron;", "\x010F")
,("Dcy;", "\x0414")
,("dcy;", "\x0434")
,("DD;", "\x2145")
,("dd;", "\x2146")
,("ddagger;", "\x2021")
,("ddarr;", "\x21CA")
,("DDotrahd;", "\x2911")
,("ddotseq;", "\x2A77")
,("deg", "\x00B0")
,("deg;", "\x00B0")
,("Del;", "\x2207")
,("Delta;", "\x0394")
,("delta;", "\x03B4")
,("demptyv;", "\x29B1")
,("dfisht;", "\x297F")
,("Dfr;", "\x1D507")
,("dfr;", "\x1D521")
,("dHar;", "\x2965")
,("dharl;", "\x21C3")
,("dharr;", "\x21C2")
,("DiacriticalAcute;", "\x00B4")
,("DiacriticalDot;", "\x02D9")
,("DiacriticalDoubleAcute;", "\x02DD")
,("DiacriticalGrave;", "\x0060")
,("DiacriticalTilde;", "\x02DC")
,("diam;", "\x22C4")
,("Diamond;", "\x22C4")
,("diamond;", "\x22C4")
,("diamondsuit;", "\x2666")
,("diams;", "\x2666")
,("die;", "\x00A8")
,("DifferentialD;", "\x2146")
,("digamma;", "\x03DD")
,("disin;", "\x22F2")
,("div;", "\x00F7")
,("divide", "\x00F7")
,("divide;", "\x00F7")
,("divideontimes;", "\x22C7")
,("divonx;", "\x22C7")
,("DJcy;", "\x0402")
,("djcy;", "\x0452")
,("dlcorn;", "\x231E")
,("dlcrop;", "\x230D")
,("dollar;", "\x0024")
,("Dopf;", "\x1D53B")
,("dopf;", "\x1D555")
,("Dot;", "\x00A8")
,("dot;", "\x02D9")
,("DotDot;", "\x20DC")
,("doteq;", "\x2250")
,("doteqdot;", "\x2251")
,("DotEqual;", "\x2250")
,("dotminus;", "\x2238")
,("dotplus;", "\x2214")
,("dotsquare;", "\x22A1")
,("doublebarwedge;", "\x2306")
,("DoubleContourIntegral;", "\x222F")
,("DoubleDot;", "\x00A8")
,("DoubleDownArrow;", "\x21D3")
,("DoubleLeftArrow;", "\x21D0")
,("DoubleLeftRightArrow;", "\x21D4")
,("DoubleLeftTee;", "\x2AE4")
,("DoubleLongLeftArrow;", "\x27F8")
,("DoubleLongLeftRightArrow;", "\x27FA")
,("DoubleLongRightArrow;", "\x27F9")
,("DoubleRightArrow;", "\x21D2")
,("DoubleRightTee;", "\x22A8")
,("DoubleUpArrow;", "\x21D1")
,("DoubleUpDownArrow;", "\x21D5")
,("DoubleVerticalBar;", "\x2225")
,("DownArrow;", "\x2193")
,("downarrow;", "\x2193")
,("Downarrow;", "\x21D3")
,("DownArrowBar;", "\x2913")
,("DownArrowUpArrow;", "\x21F5")
,("DownBreve;", "\x0311")
,("downdownarrows;", "\x21CA")
,("downharpoonleft;", "\x21C3")
,("downharpoonright;", "\x21C2")
,("DownLeftRightVector;", "\x2950")
,("DownLeftTeeVector;", "\x295E")
,("DownLeftVector;", "\x21BD")
,("DownLeftVectorBar;", "\x2956")
,("DownRightTeeVector;", "\x295F")
,("DownRightVector;", "\x21C1")
,("DownRightVectorBar;", "\x2957")
,("DownTee;", "\x22A4")
,("DownTeeArrow;", "\x21A7")
,("drbkarow;", "\x2910")
,("drcorn;", "\x231F")
,("drcrop;", "\x230C")
,("Dscr;", "\x1D49F")
,("dscr;", "\x1D4B9")
,("DScy;", "\x0405")
,("dscy;", "\x0455")
,("dsol;", "\x29F6")
,("Dstrok;", "\x0110")
,("dstrok;", "\x0111")
,("dtdot;", "\x22F1")
,("dtri;", "\x25BF")
,("dtrif;", "\x25BE")
,("duarr;", "\x21F5")
,("duhar;", "\x296F")
,("dwangle;", "\x29A6")
,("DZcy;", "\x040F")
,("dzcy;", "\x045F")
,("dzigrarr;", "\x27FF")
,("Eacute", "\x00C9")
,("eacute", "\x00E9")
,("Eacute;", "\x00C9")
,("eacute;", "\x00E9")
,("easter;", "\x2A6E")
,("Ecaron;", "\x011A")
,("ecaron;", "\x011B")
,("ecir;", "\x2256")
,("Ecirc", "\x00CA")
,("ecirc", "\x00EA")
,("Ecirc;", "\x00CA")
,("ecirc;", "\x00EA")
,("ecolon;", "\x2255")
,("Ecy;", "\x042D")
,("ecy;", "\x044D")
,("eDDot;", "\x2A77")
,("Edot;", "\x0116")
,("edot;", "\x0117")
,("eDot;", "\x2251")
,("ee;", "\x2147")
,("efDot;", "\x2252")
,("Efr;", "\x1D508")
,("efr;", "\x1D522")
,("eg;", "\x2A9A")
,("Egrave", "\x00C8")
,("egrave", "\x00E8")
,("Egrave;", "\x00C8")
,("egrave;", "\x00E8")
,("egs;", "\x2A96")
,("egsdot;", "\x2A98")
,("el;", "\x2A99")
,("Element;", "\x2208")
,("elinters;", "\x23E7")
,("ell;", "\x2113")
,("els;", "\x2A95")
,("elsdot;", "\x2A97")
,("Emacr;", "\x0112")
,("emacr;", "\x0113")
,("empty;", "\x2205")
,("emptyset;", "\x2205")
,("EmptySmallSquare;", "\x25FB")
,("emptyv;", "\x2205")
,("EmptyVerySmallSquare;", "\x25AB")
,("emsp13;", "\x2004")
,("emsp14;", "\x2005")
,("emsp;", "\x2003")
,("ENG;", "\x014A")
,("eng;", "\x014B")
,("ensp;", "\x2002")
,("Eogon;", "\x0118")
,("eogon;", "\x0119")
,("Eopf;", "\x1D53C")
,("eopf;", "\x1D556")
,("epar;", "\x22D5")
,("eparsl;", "\x29E3")
,("eplus;", "\x2A71")
,("epsi;", "\x03B5")
,("Epsilon;", "\x0395")
,("epsilon;", "\x03B5")
,("epsiv;", "\x03F5")
,("eqcirc;", "\x2256")
,("eqcolon;", "\x2255")
,("eqsim;", "\x2242")
,("eqslantgtr;", "\x2A96")
,("eqslantless;", "\x2A95")
,("Equal;", "\x2A75")
,("equals;", "\x003D")
,("EqualTilde;", "\x2242")
,("equest;", "\x225F")
,("Equilibrium;", "\x21CC")
,("equiv;", "\x2261")
,("equivDD;", "\x2A78")
,("eqvparsl;", "\x29E5")
,("erarr;", "\x2971")
,("erDot;", "\x2253")
,("escr;", "\x212F")
,("Escr;", "\x2130")
,("esdot;", "\x2250")
,("esim;", "\x2242")
,("Esim;", "\x2A73")
,("Eta;", "\x0397")
,("eta;", "\x03B7")
,("ETH", "\x00D0")
,("eth", "\x00F0")
,("ETH;", "\x00D0")
,("eth;", "\x00F0")
,("Euml", "\x00CB")
,("euml", "\x00EB")
,("Euml;", "\x00CB")
,("euml;", "\x00EB")
,("euro;", "\x20AC")
,("excl;", "\x0021")
,("exist;", "\x2203")
,("Exists;", "\x2203")
,("expectation;", "\x2130")
,("ExponentialE;", "\x2147")
,("exponentiale;", "\x2147")
,("fallingdotseq;", "\x2252")
,("Fcy;", "\x0424")
,("fcy;", "\x0444")
,("female;", "\x2640")
,("ffilig;", "\xFB03")
,("fflig;", "\xFB00")
,("ffllig;", "\xFB04")
,("Ffr;", "\x1D509")
,("ffr;", "\x1D523")
,("filig;", "\xFB01")
,("FilledSmallSquare;", "\x25FC")
,("FilledVerySmallSquare;", "\x25AA")
,("fjlig;", "\x0066\x006A")
,("flat;", "\x266D")
,("fllig;", "\xFB02")
,("fltns;", "\x25B1")
,("fnof;", "\x0192")
,("Fopf;", "\x1D53D")
,("fopf;", "\x1D557")
,("ForAll;", "\x2200")
,("forall;", "\x2200")
,("fork;", "\x22D4")
,("forkv;", "\x2AD9")
,("Fouriertrf;", "\x2131")
,("fpartint;", "\x2A0D")
,("frac12", "\x00BD")
,("frac12;", "\x00BD")
,("frac13;", "\x2153")
,("frac14", "\x00BC")
,("frac14;", "\x00BC")
,("frac15;", "\x2155")
,("frac16;", "\x2159")
,("frac18;", "\x215B")
,("frac23;", "\x2154")
,("frac25;", "\x2156")
,("frac34", "\x00BE")
,("frac34;", "\x00BE")
,("frac35;", "\x2157")
,("frac38;", "\x215C")
,("frac45;", "\x2158")
,("frac56;", "\x215A")
,("frac58;", "\x215D")
,("frac78;", "\x215E")
,("frasl;", "\x2044")
,("frown;", "\x2322")
,("Fscr;", "\x2131")
,("fscr;", "\x1D4BB")
,("gacute;", "\x01F5")
,("Gamma;", "\x0393")
,("gamma;", "\x03B3")
,("Gammad;", "\x03DC")
,("gammad;", "\x03DD")
,("gap;", "\x2A86")
,("Gbreve;", "\x011E")
,("gbreve;", "\x011F")
,("Gcedil;", "\x0122")
,("Gcirc;", "\x011C")
,("gcirc;", "\x011D")
,("Gcy;", "\x0413")
,("gcy;", "\x0433")
,("Gdot;", "\x0120")
,("gdot;", "\x0121")
,("ge;", "\x2265")
,("gE;", "\x2267")
,("gel;", "\x22DB")
,("gEl;", "\x2A8C")
,("geq;", "\x2265")
,("geqq;", "\x2267")
,("geqslant;", "\x2A7E")
,("ges;", "\x2A7E")
,("gescc;", "\x2AA9")
,("gesdot;", "\x2A80")
,("gesdoto;", "\x2A82")
,("gesdotol;", "\x2A84")
,("gesl;", "\x22DB\xFE00")
,("gesles;", "\x2A94")
,("Gfr;", "\x1D50A")
,("gfr;", "\x1D524")
,("gg;", "\x226B")
,("Gg;", "\x22D9")
,("ggg;", "\x22D9")
,("gimel;", "\x2137")
,("GJcy;", "\x0403")
,("gjcy;", "\x0453")
,("gl;", "\x2277")
,("gla;", "\x2AA5")
,("glE;", "\x2A92")
,("glj;", "\x2AA4")
,("gnap;", "\x2A8A")
,("gnapprox;", "\x2A8A")
,("gnE;", "\x2269")
,("gne;", "\x2A88")
,("gneq;", "\x2A88")
,("gneqq;", "\x2269")
,("gnsim;", "\x22E7")
,("Gopf;", "\x1D53E")
,("gopf;", "\x1D558")
,("grave;", "\x0060")
,("GreaterEqual;", "\x2265")
,("GreaterEqualLess;", "\x22DB")
,("GreaterFullEqual;", "\x2267")
,("GreaterGreater;", "\x2AA2")
,("GreaterLess;", "\x2277")
,("GreaterSlantEqual;", "\x2A7E")
,("GreaterTilde;", "\x2273")
,("gscr;", "\x210A")
,("Gscr;", "\x1D4A2")
,("gsim;", "\x2273")
,("gsime;", "\x2A8E")
,("gsiml;", "\x2A90")
,("GT", "\x003E")
,("gt", "\x003E")
,("GT;", "\x003E")
,("gt;", "\x003E")
,("Gt;", "\x226B")
,("gtcc;", "\x2AA7")
,("gtcir;", "\x2A7A")
,("gtdot;", "\x22D7")
,("gtlPar;", "\x2995")
,("gtquest;", "\x2A7C")
,("gtrapprox;", "\x2A86")
,("gtrarr;", "\x2978")
,("gtrdot;", "\x22D7")
,("gtreqless;", "\x22DB")
,("gtreqqless;", "\x2A8C")
,("gtrless;", "\x2277")
,("gtrsim;", "\x2273")
,("gvertneqq;", "\x2269\xFE00")
,("gvnE;", "\x2269\xFE00")
,("Hacek;", "\x02C7")
,("hairsp;", "\x200A")
,("half;", "\x00BD")
,("hamilt;", "\x210B")
,("HARDcy;", "\x042A")
,("hardcy;", "\x044A")
,("harr;", "\x2194")
,("hArr;", "\x21D4")
,("harrcir;", "\x2948")
,("harrw;", "\x21AD")
,("Hat;", "\x005E")
,("hbar;", "\x210F")
,("Hcirc;", "\x0124")
,("hcirc;", "\x0125")
,("hearts;", "\x2665")
,("heartsuit;", "\x2665")
,("hellip;", "\x2026")
,("hercon;", "\x22B9")
,("Hfr;", "\x210C")
,("hfr;", "\x1D525")
,("HilbertSpace;", "\x210B")
,("hksearow;", "\x2925")
,("hkswarow;", "\x2926")
,("hoarr;", "\x21FF")
,("homtht;", "\x223B")
,("hookleftarrow;", "\x21A9")
,("hookrightarrow;", "\x21AA")
,("Hopf;", "\x210D")
,("hopf;", "\x1D559")
,("horbar;", "\x2015")
,("HorizontalLine;", "\x2500")
,("Hscr;", "\x210B")
,("hscr;", "\x1D4BD")
,("hslash;", "\x210F")
,("Hstrok;", "\x0126")
,("hstrok;", "\x0127")
,("HumpDownHump;", "\x224E")
,("HumpEqual;", "\x224F")
,("hybull;", "\x2043")
,("hyphen;", "\x2010")
,("Iacute", "\x00CD")
,("iacute", "\x00ED")
,("Iacute;", "\x00CD")
,("iacute;", "\x00ED")
,("ic;", "\x2063")
,("Icirc", "\x00CE")
,("icirc", "\x00EE")
,("Icirc;", "\x00CE")
,("icirc;", "\x00EE")
,("Icy;", "\x0418")
,("icy;", "\x0438")
,("Idot;", "\x0130")
,("IEcy;", "\x0415")
,("iecy;", "\x0435")
,("iexcl", "\x00A1")
,("iexcl;", "\x00A1")
,("iff;", "\x21D4")
,("Ifr;", "\x2111")
,("ifr;", "\x1D526")
,("Igrave", "\x00CC")
,("igrave", "\x00EC")
,("Igrave;", "\x00CC")
,("igrave;", "\x00EC")
,("ii;", "\x2148")
,("iiiint;", "\x2A0C")
,("iiint;", "\x222D")
,("iinfin;", "\x29DC")
,("iiota;", "\x2129")
,("IJlig;", "\x0132")
,("ijlig;", "\x0133")
,("Im;", "\x2111")
,("Imacr;", "\x012A")
,("imacr;", "\x012B")
,("image;", "\x2111")
,("ImaginaryI;", "\x2148")
,("imagline;", "\x2110")
,("imagpart;", "\x2111")
,("imath;", "\x0131")
,("imof;", "\x22B7")
,("imped;", "\x01B5")
,("Implies;", "\x21D2")
,("in;", "\x2208")
,("incare;", "\x2105")
,("infin;", "\x221E")
,("infintie;", "\x29DD")
,("inodot;", "\x0131")
,("int;", "\x222B")
,("Int;", "\x222C")
,("intcal;", "\x22BA")
,("integers;", "\x2124")
,("Integral;", "\x222B")
,("intercal;", "\x22BA")
,("Intersection;", "\x22C2")
,("intlarhk;", "\x2A17")
,("intprod;", "\x2A3C")
,("InvisibleComma;", "\x2063")
,("InvisibleTimes;", "\x2062")
,("IOcy;", "\x0401")
,("iocy;", "\x0451")
,("Iogon;", "\x012E")
,("iogon;", "\x012F")
,("Iopf;", "\x1D540")
,("iopf;", "\x1D55A")
,("Iota;", "\x0399")
,("iota;", "\x03B9")
,("iprod;", "\x2A3C")
,("iquest", "\x00BF")
,("iquest;", "\x00BF")
,("Iscr;", "\x2110")
,("iscr;", "\x1D4BE")
,("isin;", "\x2208")
,("isindot;", "\x22F5")
,("isinE;", "\x22F9")
,("isins;", "\x22F4")
,("isinsv;", "\x22F3")
,("isinv;", "\x2208")
,("it;", "\x2062")
,("Itilde;", "\x0128")
,("itilde;", "\x0129")
,("Iukcy;", "\x0406")
,("iukcy;", "\x0456")
,("Iuml", "\x00CF")
,("iuml", "\x00EF")
,("Iuml;", "\x00CF")
,("iuml;", "\x00EF")
,("Jcirc;", "\x0134")
,("jcirc;", "\x0135")
,("Jcy;", "\x0419")
,("jcy;", "\x0439")
,("Jfr;", "\x1D50D")
,("jfr;", "\x1D527")
,("jmath;", "\x0237")
,("Jopf;", "\x1D541")
,("jopf;", "\x1D55B")
,("Jscr;", "\x1D4A5")
,("jscr;", "\x1D4BF")
,("Jsercy;", "\x0408")
,("jsercy;", "\x0458")
,("Jukcy;", "\x0404")
,("jukcy;", "\x0454")
,("Kappa;", "\x039A")
,("kappa;", "\x03BA")
,("kappav;", "\x03F0")
,("Kcedil;", "\x0136")
,("kcedil;", "\x0137")
,("Kcy;", "\x041A")
,("kcy;", "\x043A")
,("Kfr;", "\x1D50E")
,("kfr;", "\x1D528")
,("kgreen;", "\x0138")
,("KHcy;", "\x0425")
,("khcy;", "\x0445")
,("KJcy;", "\x040C")
,("kjcy;", "\x045C")
,("Kopf;", "\x1D542")
,("kopf;", "\x1D55C")
,("Kscr;", "\x1D4A6")
,("kscr;", "\x1D4C0")
,("lAarr;", "\x21DA")
,("Lacute;", "\x0139")
,("lacute;", "\x013A")
,("laemptyv;", "\x29B4")
,("lagran;", "\x2112")
,("Lambda;", "\x039B")
,("lambda;", "\x03BB")
,("lang;", "\x27E8")
,("Lang;", "\x27EA")
,("langd;", "\x2991")
,("langle;", "\x27E8")
,("lap;", "\x2A85")
,("Laplacetrf;", "\x2112")
,("laquo", "\x00AB")
,("laquo;", "\x00AB")
,("larr;", "\x2190")
,("Larr;", "\x219E")
,("lArr;", "\x21D0")
,("larrb;", "\x21E4")
,("larrbfs;", "\x291F")
,("larrfs;", "\x291D")
,("larrhk;", "\x21A9")
,("larrlp;", "\x21AB")
,("larrpl;", "\x2939")
,("larrsim;", "\x2973")
,("larrtl;", "\x21A2")
,("lat;", "\x2AAB")
,("latail;", "\x2919")
,("lAtail;", "\x291B")
,("late;", "\x2AAD")
,("lates;", "\x2AAD\xFE00")
,("lbarr;", "\x290C")
,("lBarr;", "\x290E")
,("lbbrk;", "\x2772")
,("lbrace;", "\x007B")
,("lbrack;", "\x005B")
,("lbrke;", "\x298B")
,("lbrksld;", "\x298F")
,("lbrkslu;", "\x298D")
,("Lcaron;", "\x013D")
,("lcaron;", "\x013E")
,("Lcedil;", "\x013B")
,("lcedil;", "\x013C")
,("lceil;", "\x2308")
,("lcub;", "\x007B")
,("Lcy;", "\x041B")
,("lcy;", "\x043B")
,("ldca;", "\x2936")
,("ldquo;", "\x201C")
,("ldquor;", "\x201E")
,("ldrdhar;", "\x2967")
,("ldrushar;", "\x294B")
,("ldsh;", "\x21B2")
,("le;", "\x2264")
,("lE;", "\x2266")
,("LeftAngleBracket;", "\x27E8")
,("LeftArrow;", "\x2190")
,("leftarrow;", "\x2190")
,("Leftarrow;", "\x21D0")
,("LeftArrowBar;", "\x21E4")
,("LeftArrowRightArrow;", "\x21C6")
,("leftarrowtail;", "\x21A2")
,("LeftCeiling;", "\x2308")
,("LeftDoubleBracket;", "\x27E6")
,("LeftDownTeeVector;", "\x2961")
,("LeftDownVector;", "\x21C3")
,("LeftDownVectorBar;", "\x2959")
,("LeftFloor;", "\x230A")
,("leftharpoondown;", "\x21BD")
,("leftharpoonup;", "\x21BC")
,("leftleftarrows;", "\x21C7")
,("LeftRightArrow;", "\x2194")
,("leftrightarrow;", "\x2194")
,("Leftrightarrow;", "\x21D4")
,("leftrightarrows;", "\x21C6")
,("leftrightharpoons;", "\x21CB")
,("leftrightsquigarrow;", "\x21AD")
,("LeftRightVector;", "\x294E")
,("LeftTee;", "\x22A3")
,("LeftTeeArrow;", "\x21A4")
,("LeftTeeVector;", "\x295A")
,("leftthreetimes;", "\x22CB")
,("LeftTriangle;", "\x22B2")
,("LeftTriangleBar;", "\x29CF")
,("LeftTriangleEqual;", "\x22B4")
,("LeftUpDownVector;", "\x2951")
,("LeftUpTeeVector;", "\x2960")
,("LeftUpVector;", "\x21BF")
,("LeftUpVectorBar;", "\x2958")
,("LeftVector;", "\x21BC")
,("LeftVectorBar;", "\x2952")
,("leg;", "\x22DA")
,("lEg;", "\x2A8B")
,("leq;", "\x2264")
,("leqq;", "\x2266")
,("leqslant;", "\x2A7D")
,("les;", "\x2A7D")
,("lescc;", "\x2AA8")
,("lesdot;", "\x2A7F")
,("lesdoto;", "\x2A81")
,("lesdotor;", "\x2A83")
,("lesg;", "\x22DA\xFE00")
,("lesges;", "\x2A93")
,("lessapprox;", "\x2A85")
,("lessdot;", "\x22D6")
,("lesseqgtr;", "\x22DA")
,("lesseqqgtr;", "\x2A8B")
,("LessEqualGreater;", "\x22DA")
,("LessFullEqual;", "\x2266")
,("LessGreater;", "\x2276")
,("lessgtr;", "\x2276")
,("LessLess;", "\x2AA1")
,("lesssim;", "\x2272")
,("LessSlantEqual;", "\x2A7D")
,("LessTilde;", "\x2272")
,("lfisht;", "\x297C")
,("lfloor;", "\x230A")
,("Lfr;", "\x1D50F")
,("lfr;", "\x1D529")
,("lg;", "\x2276")
,("lgE;", "\x2A91")
,("lHar;", "\x2962")
,("lhard;", "\x21BD")
,("lharu;", "\x21BC")
,("lharul;", "\x296A")
,("lhblk;", "\x2584")
,("LJcy;", "\x0409")
,("ljcy;", "\x0459")
,("ll;", "\x226A")
,("Ll;", "\x22D8")
,("llarr;", "\x21C7")
,("llcorner;", "\x231E")
,("Lleftarrow;", "\x21DA")
,("llhard;", "\x296B")
,("lltri;", "\x25FA")
,("Lmidot;", "\x013F")
,("lmidot;", "\x0140")
,("lmoust;", "\x23B0")
,("lmoustache;", "\x23B0")
,("lnap;", "\x2A89")
,("lnapprox;", "\x2A89")
,("lnE;", "\x2268")
,("lne;", "\x2A87")
,("lneq;", "\x2A87")
,("lneqq;", "\x2268")
,("lnsim;", "\x22E6")
,("loang;", "\x27EC")
,("loarr;", "\x21FD")
,("lobrk;", "\x27E6")
,("LongLeftArrow;", "\x27F5")
,("longleftarrow;", "\x27F5")
,("Longleftarrow;", "\x27F8")
,("LongLeftRightArrow;", "\x27F7")
,("longleftrightarrow;", "\x27F7")
,("Longleftrightarrow;", "\x27FA")
,("longmapsto;", "\x27FC")
,("LongRightArrow;", "\x27F6")
,("longrightarrow;", "\x27F6")
,("Longrightarrow;", "\x27F9")
,("looparrowleft;", "\x21AB")
,("looparrowright;", "\x21AC")
,("lopar;", "\x2985")
,("Lopf;", "\x1D543")
,("lopf;", "\x1D55D")
,("loplus;", "\x2A2D")
,("lotimes;", "\x2A34")
,("lowast;", "\x2217")
,("lowbar;", "\x005F")
,("LowerLeftArrow;", "\x2199")
,("LowerRightArrow;", "\x2198")
,("loz;", "\x25CA")
,("lozenge;", "\x25CA")
,("lozf;", "\x29EB")
,("lpar;", "\x0028")
,("lparlt;", "\x2993")
,("lrarr;", "\x21C6")
,("lrcorner;", "\x231F")
,("lrhar;", "\x21CB")
,("lrhard;", "\x296D")
,("lrm;", "\x200E")
,("lrtri;", "\x22BF")
,("lsaquo;", "\x2039")
,("Lscr;", "\x2112")
,("lscr;", "\x1D4C1")
,("Lsh;", "\x21B0")
,("lsh;", "\x21B0")
,("lsim;", "\x2272")
,("lsime;", "\x2A8D")
,("lsimg;", "\x2A8F")
,("lsqb;", "\x005B")
,("lsquo;", "\x2018")
,("lsquor;", "\x201A")
,("Lstrok;", "\x0141")
,("lstrok;", "\x0142")
,("LT", "\x003C")
,("lt", "\x003C")
,("LT;", "\x003C")
,("lt;", "\x003C")
,("Lt;", "\x226A")
,("ltcc;", "\x2AA6")
,("ltcir;", "\x2A79")
,("ltdot;", "\x22D6")
,("lthree;", "\x22CB")
,("ltimes;", "\x22C9")
,("ltlarr;", "\x2976")
,("ltquest;", "\x2A7B")
,("ltri;", "\x25C3")
,("ltrie;", "\x22B4")
,("ltrif;", "\x25C2")
,("ltrPar;", "\x2996")
,("lurdshar;", "\x294A")
,("luruhar;", "\x2966")
,("lvertneqq;", "\x2268\xFE00")
,("lvnE;", "\x2268\xFE00")
,("macr", "\x00AF")
,("macr;", "\x00AF")
,("male;", "\x2642")
,("malt;", "\x2720")
,("maltese;", "\x2720")
,("map;", "\x21A6")
,("Map;", "\x2905")
,("mapsto;", "\x21A6")
,("mapstodown;", "\x21A7")
,("mapstoleft;", "\x21A4")
,("mapstoup;", "\x21A5")
,("marker;", "\x25AE")
,("mcomma;", "\x2A29")
,("Mcy;", "\x041C")
,("mcy;", "\x043C")
,("mdash;", "\x2014")
,("mDDot;", "\x223A")
,("measuredangle;", "\x2221")
,("MediumSpace;", "\x205F")
,("Mellintrf;", "\x2133")
,("Mfr;", "\x1D510")
,("mfr;", "\x1D52A")
,("mho;", "\x2127")
,("micro", "\x00B5")
,("micro;", "\x00B5")
,("mid;", "\x2223")
,("midast;", "\x002A")
,("midcir;", "\x2AF0")
,("middot", "\x00B7")
,("middot;", "\x00B7")
,("minus;", "\x2212")
,("minusb;", "\x229F")
,("minusd;", "\x2238")
,("minusdu;", "\x2A2A")
,("MinusPlus;", "\x2213")
,("mlcp;", "\x2ADB")
,("mldr;", "\x2026")
,("mnplus;", "\x2213")
,("models;", "\x22A7")
,("Mopf;", "\x1D544")
,("mopf;", "\x1D55E")
,("mp;", "\x2213")
,("Mscr;", "\x2133")
,("mscr;", "\x1D4C2")
,("mstpos;", "\x223E")
,("Mu;", "\x039C")
,("mu;", "\x03BC")
,("multimap;", "\x22B8")
,("mumap;", "\x22B8")
,("nabla;", "\x2207")
,("Nacute;", "\x0143")
,("nacute;", "\x0144")
,("nang;", "\x2220\x20D2")
,("nap;", "\x2249")
,("napE;", "\x2A70\x0338")
,("napid;", "\x224B\x0338")
,("napos;", "\x0149")
,("napprox;", "\x2249")
,("natur;", "\x266E")
,("natural;", "\x266E")
,("naturals;", "\x2115")
,("nbsp", "\x00A0")
,("nbsp;", "\x00A0")
,("nbump;", "\x224E\x0338")
,("nbumpe;", "\x224F\x0338")
,("ncap;", "\x2A43")
,("Ncaron;", "\x0147")
,("ncaron;", "\x0148")
,("Ncedil;", "\x0145")
,("ncedil;", "\x0146")
,("ncong;", "\x2247")
,("ncongdot;", "\x2A6D\x0338")
,("ncup;", "\x2A42")
,("Ncy;", "\x041D")
,("ncy;", "\x043D")
,("ndash;", "\x2013")
,("ne;", "\x2260")
,("nearhk;", "\x2924")
,("nearr;", "\x2197")
,("neArr;", "\x21D7")
,("nearrow;", "\x2197")
,("nedot;", "\x2250\x0338")
,("NegativeMediumSpace;", "\x200B")
,("NegativeThickSpace;", "\x200B")
,("NegativeThinSpace;", "\x200B")
,("NegativeVeryThinSpace;", "\x200B")
,("nequiv;", "\x2262")
,("nesear;", "\x2928")
,("nesim;", "\x2242\x0338")
,("NestedGreaterGreater;", "\x226B")
,("NestedLessLess;", "\x226A")
,("NewLine;", "\x000A")
,("nexist;", "\x2204")
,("nexists;", "\x2204")
,("Nfr;", "\x1D511")
,("nfr;", "\x1D52B")
,("ngE;", "\x2267\x0338")
,("nge;", "\x2271")
,("ngeq;", "\x2271")
,("ngeqq;", "\x2267\x0338")
,("ngeqslant;", "\x2A7E\x0338")
,("nges;", "\x2A7E\x0338")
,("nGg;", "\x22D9\x0338")
,("ngsim;", "\x2275")
,("nGt;", "\x226B\x20D2")
,("ngt;", "\x226F")
,("ngtr;", "\x226F")
,("nGtv;", "\x226B\x0338")
,("nharr;", "\x21AE")
,("nhArr;", "\x21CE")
,("nhpar;", "\x2AF2")
,("ni;", "\x220B")
,("nis;", "\x22FC")
,("nisd;", "\x22FA")
,("niv;", "\x220B")
,("NJcy;", "\x040A")
,("njcy;", "\x045A")
,("nlarr;", "\x219A")
,("nlArr;", "\x21CD")
,("nldr;", "\x2025")
,("nlE;", "\x2266\x0338")
,("nle;", "\x2270")
,("nleftarrow;", "\x219A")
,("nLeftarrow;", "\x21CD")
,("nleftrightarrow;", "\x21AE")
,("nLeftrightarrow;", "\x21CE")
,("nleq;", "\x2270")
,("nleqq;", "\x2266\x0338")
,("nleqslant;", "\x2A7D\x0338")
,("nles;", "\x2A7D\x0338")
,("nless;", "\x226E")
,("nLl;", "\x22D8\x0338")
,("nlsim;", "\x2274")
,("nLt;", "\x226A\x20D2")
,("nlt;", "\x226E")
,("nltri;", "\x22EA")
,("nltrie;", "\x22EC")
,("nLtv;", "\x226A\x0338")
,("nmid;", "\x2224")
,("NoBreak;", "\x2060")
,("NonBreakingSpace;", "\x00A0")
,("Nopf;", "\x2115")
,("nopf;", "\x1D55F")
,("not", "\x00AC")
,("not;", "\x00AC")
,("Not;", "\x2AEC")
,("NotCongruent;", "\x2262")
,("NotCupCap;", "\x226D")
,("NotDoubleVerticalBar;", "\x2226")
,("NotElement;", "\x2209")
,("NotEqual;", "\x2260")
,("NotEqualTilde;", "\x2242\x0338")
,("NotExists;", "\x2204")
,("NotGreater;", "\x226F")
,("NotGreaterEqual;", "\x2271")
,("NotGreaterFullEqual;", "\x2267\x0338")
,("NotGreaterGreater;", "\x226B\x0338")
,("NotGreaterLess;", "\x2279")
,("NotGreaterSlantEqual;", "\x2A7E\x0338")
,("NotGreaterTilde;", "\x2275")
,("NotHumpDownHump;", "\x224E\x0338")
,("NotHumpEqual;", "\x224F\x0338")
,("notin;", "\x2209")
,("notindot;", "\x22F5\x0338")
,("notinE;", "\x22F9\x0338")
,("notinva;", "\x2209")
,("notinvb;", "\x22F7")
,("notinvc;", "\x22F6")
,("NotLeftTriangle;", "\x22EA")
,("NotLeftTriangleBar;", "\x29CF\x0338")
,("NotLeftTriangleEqual;", "\x22EC")
,("NotLess;", "\x226E")
,("NotLessEqual;", "\x2270")
,("NotLessGreater;", "\x2278")
,("NotLessLess;", "\x226A\x0338")
,("NotLessSlantEqual;", "\x2A7D\x0338")
,("NotLessTilde;", "\x2274")
,("NotNestedGreaterGreater;", "\x2AA2\x0338")
,("NotNestedLessLess;", "\x2AA1\x0338")
,("notni;", "\x220C")
,("notniva;", "\x220C")
,("notnivb;", "\x22FE")
,("notnivc;", "\x22FD")
,("NotPrecedes;", "\x2280")
,("NotPrecedesEqual;", "\x2AAF\x0338")
,("NotPrecedesSlantEqual;", "\x22E0")
,("NotReverseElement;", "\x220C")
,("NotRightTriangle;", "\x22EB")
,("NotRightTriangleBar;", "\x29D0\x0338")
,("NotRightTriangleEqual;", "\x22ED")
,("NotSquareSubset;", "\x228F\x0338")
,("NotSquareSubsetEqual;", "\x22E2")
,("NotSquareSuperset;", "\x2290\x0338")
,("NotSquareSupersetEqual;", "\x22E3")
,("NotSubset;", "\x2282\x20D2")
,("NotSubsetEqual;", "\x2288")
,("NotSucceeds;", "\x2281")
,("NotSucceedsEqual;", "\x2AB0\x0338")
,("NotSucceedsSlantEqual;", "\x22E1")
,("NotSucceedsTilde;", "\x227F\x0338")
,("NotSuperset;", "\x2283\x20D2")
,("NotSupersetEqual;", "\x2289")
,("NotTilde;", "\x2241")
,("NotTildeEqual;", "\x2244")
,("NotTildeFullEqual;", "\x2247")
,("NotTildeTilde;", "\x2249")
,("NotVerticalBar;", "\x2224")
,("npar;", "\x2226")
,("nparallel;", "\x2226")
,("nparsl;", "\x2AFD\x20E5")
,("npart;", "\x2202\x0338")
,("npolint;", "\x2A14")
,("npr;", "\x2280")
,("nprcue;", "\x22E0")
,("npre;", "\x2AAF\x0338")
,("nprec;", "\x2280")
,("npreceq;", "\x2AAF\x0338")
,("nrarr;", "\x219B")
,("nrArr;", "\x21CF")
,("nrarrc;", "\x2933\x0338")
,("nrarrw;", "\x219D\x0338")
,("nrightarrow;", "\x219B")
,("nRightarrow;", "\x21CF")
,("nrtri;", "\x22EB")
,("nrtrie;", "\x22ED")
,("nsc;", "\x2281")
,("nsccue;", "\x22E1")
,("nsce;", "\x2AB0\x0338")
,("Nscr;", "\x1D4A9")
,("nscr;", "\x1D4C3")
,("nshortmid;", "\x2224")
,("nshortparallel;", "\x2226")
,("nsim;", "\x2241")
,("nsime;", "\x2244")
,("nsimeq;", "\x2244")
,("nsmid;", "\x2224")
,("nspar;", "\x2226")
,("nsqsube;", "\x22E2")
,("nsqsupe;", "\x22E3")
,("nsub;", "\x2284")
,("nsube;", "\x2288")
,("nsubE;", "\x2AC5\x0338")
,("nsubset;", "\x2282\x20D2")
,("nsubseteq;", "\x2288")
,("nsubseteqq;", "\x2AC5\x0338")
,("nsucc;", "\x2281")
,("nsucceq;", "\x2AB0\x0338")
,("nsup;", "\x2285")
,("nsupe;", "\x2289")
,("nsupE;", "\x2AC6\x0338")
,("nsupset;", "\x2283\x20D2")
,("nsupseteq;", "\x2289")
,("nsupseteqq;", "\x2AC6\x0338")
,("ntgl;", "\x2279")
,("Ntilde", "\x00D1")
,("ntilde", "\x00F1")
,("Ntilde;", "\x00D1")
,("ntilde;", "\x00F1")
,("ntlg;", "\x2278")
,("ntriangleleft;", "\x22EA")
,("ntrianglelefteq;", "\x22EC")
,("ntriangleright;", "\x22EB")
,("ntrianglerighteq;", "\x22ED")
,("Nu;", "\x039D")
,("nu;", "\x03BD")
,("num;", "\x0023")
,("numero;", "\x2116")
,("numsp;", "\x2007")
,("nvap;", "\x224D\x20D2")
,("nvdash;", "\x22AC")
,("nvDash;", "\x22AD")
,("nVdash;", "\x22AE")
,("nVDash;", "\x22AF")
,("nvge;", "\x2265\x20D2")
,("nvgt;", "\x003E\x20D2")
,("nvHarr;", "\x2904")
,("nvinfin;", "\x29DE")
,("nvlArr;", "\x2902")
,("nvle;", "\x2264\x20D2")
,("nvlt;", "\x003C\x20D2")
,("nvltrie;", "\x22B4\x20D2")
,("nvrArr;", "\x2903")
,("nvrtrie;", "\x22B5\x20D2")
,("nvsim;", "\x223C\x20D2")
,("nwarhk;", "\x2923")
,("nwarr;", "\x2196")
,("nwArr;", "\x21D6")
,("nwarrow;", "\x2196")
,("nwnear;", "\x2927")
,("Oacute", "\x00D3")
,("oacute", "\x00F3")
,("Oacute;", "\x00D3")
,("oacute;", "\x00F3")
,("oast;", "\x229B")
,("ocir;", "\x229A")
,("Ocirc", "\x00D4")
,("ocirc", "\x00F4")
,("Ocirc;", "\x00D4")
,("ocirc;", "\x00F4")
,("Ocy;", "\x041E")
,("ocy;", "\x043E")
,("odash;", "\x229D")
,("Odblac;", "\x0150")
,("odblac;", "\x0151")
,("odiv;", "\x2A38")
,("odot;", "\x2299")
,("odsold;", "\x29BC")
,("OElig;", "\x0152")
,("oelig;", "\x0153")
,("ofcir;", "\x29BF")
,("Ofr;", "\x1D512")
,("ofr;", "\x1D52C")
,("ogon;", "\x02DB")
,("Ograve", "\x00D2")
,("ograve", "\x00F2")
,("Ograve;", "\x00D2")
,("ograve;", "\x00F2")
,("ogt;", "\x29C1")
,("ohbar;", "\x29B5")
,("ohm;", "\x03A9")
,("oint;", "\x222E")
,("olarr;", "\x21BA")
,("olcir;", "\x29BE")
,("olcross;", "\x29BB")
,("oline;", "\x203E")
,("olt;", "\x29C0")
,("Omacr;", "\x014C")
,("omacr;", "\x014D")
,("Omega;", "\x03A9")
,("omega;", "\x03C9")
,("Omicron;", "\x039F")
,("omicron;", "\x03BF")
,("omid;", "\x29B6")
,("ominus;", "\x2296")
,("Oopf;", "\x1D546")
,("oopf;", "\x1D560")
,("opar;", "\x29B7")
,("OpenCurlyDoubleQuote;", "\x201C")
,("OpenCurlyQuote;", "\x2018")
,("operp;", "\x29B9")
,("oplus;", "\x2295")
,("or;", "\x2228")
,("Or;", "\x2A54")
,("orarr;", "\x21BB")
,("ord;", "\x2A5D")
,("order;", "\x2134")
,("orderof;", "\x2134")
,("ordf", "\x00AA")
,("ordf;", "\x00AA")
,("ordm", "\x00BA")
,("ordm;", "\x00BA")
,("origof;", "\x22B6")
,("oror;", "\x2A56")
,("orslope;", "\x2A57")
,("orv;", "\x2A5B")
,("oS;", "\x24C8")
,("oscr;", "\x2134")
,("Oscr;", "\x1D4AA")
,("Oslash", "\x00D8")
,("oslash", "\x00F8")
,("Oslash;", "\x00D8")
,("oslash;", "\x00F8")
,("osol;", "\x2298")
,("Otilde", "\x00D5")
,("otilde", "\x00F5")
,("Otilde;", "\x00D5")
,("otilde;", "\x00F5")
,("otimes;", "\x2297")
,("Otimes;", "\x2A37")
,("otimesas;", "\x2A36")
,("Ouml", "\x00D6")
,("ouml", "\x00F6")
,("Ouml;", "\x00D6")
,("ouml;", "\x00F6")
,("ovbar;", "\x233D")
,("OverBar;", "\x203E")
,("OverBrace;", "\x23DE")
,("OverBracket;", "\x23B4")
,("OverParenthesis;", "\x23DC")
,("par;", "\x2225")
,("para", "\x00B6")
,("para;", "\x00B6")
,("parallel;", "\x2225")
,("parsim;", "\x2AF3")
,("parsl;", "\x2AFD")
,("part;", "\x2202")
,("PartialD;", "\x2202")
,("Pcy;", "\x041F")
,("pcy;", "\x043F")
,("percnt;", "\x0025")
,("period;", "\x002E")
,("permil;", "\x2030")
,("perp;", "\x22A5")
,("pertenk;", "\x2031")
,("Pfr;", "\x1D513")
,("pfr;", "\x1D52D")
,("Phi;", "\x03A6")
,("phi;", "\x03C6")
,("phiv;", "\x03D5")
,("phmmat;", "\x2133")
,("phone;", "\x260E")
,("Pi;", "\x03A0")
,("pi;", "\x03C0")
,("pitchfork;", "\x22D4")
,("piv;", "\x03D6")
,("planck;", "\x210F")
,("planckh;", "\x210E")
,("plankv;", "\x210F")
,("plus;", "\x002B")
,("plusacir;", "\x2A23")
,("plusb;", "\x229E")
,("pluscir;", "\x2A22")
,("plusdo;", "\x2214")
,("plusdu;", "\x2A25")
,("pluse;", "\x2A72")
,("PlusMinus;", "\x00B1")
,("plusmn", "\x00B1")
,("plusmn;", "\x00B1")
,("plussim;", "\x2A26")
,("plustwo;", "\x2A27")
,("pm;", "\x00B1")
,("Poincareplane;", "\x210C")
,("pointint;", "\x2A15")
,("Popf;", "\x2119")
,("popf;", "\x1D561")
,("pound", "\x00A3")
,("pound;", "\x00A3")
,("pr;", "\x227A")
,("Pr;", "\x2ABB")
,("prap;", "\x2AB7")
,("prcue;", "\x227C")
,("pre;", "\x2AAF")
,("prE;", "\x2AB3")
,("prec;", "\x227A")
,("precapprox;", "\x2AB7")
,("preccurlyeq;", "\x227C")
,("Precedes;", "\x227A")
,("PrecedesEqual;", "\x2AAF")
,("PrecedesSlantEqual;", "\x227C")
,("PrecedesTilde;", "\x227E")
,("preceq;", "\x2AAF")
,("precnapprox;", "\x2AB9")
,("precneqq;", "\x2AB5")
,("precnsim;", "\x22E8")
,("precsim;", "\x227E")
,("prime;", "\x2032")
,("Prime;", "\x2033")
,("primes;", "\x2119")
,("prnap;", "\x2AB9")
,("prnE;", "\x2AB5")
,("prnsim;", "\x22E8")
,("prod;", "\x220F")
,("Product;", "\x220F")
,("profalar;", "\x232E")
,("profline;", "\x2312")
,("profsurf;", "\x2313")
,("prop;", "\x221D")
,("Proportion;", "\x2237")
,("Proportional;", "\x221D")
,("propto;", "\x221D")
,("prsim;", "\x227E")
,("prurel;", "\x22B0")
,("Pscr;", "\x1D4AB")
,("pscr;", "\x1D4C5")
,("Psi;", "\x03A8")
,("psi;", "\x03C8")
,("puncsp;", "\x2008")
,("Qfr;", "\x1D514")
,("qfr;", "\x1D52E")
,("qint;", "\x2A0C")
,("Qopf;", "\x211A")
,("qopf;", "\x1D562")
,("qprime;", "\x2057")
,("Qscr;", "\x1D4AC")
,("qscr;", "\x1D4C6")
,("quaternions;", "\x210D")
,("quatint;", "\x2A16")
,("quest;", "\x003F")
,("questeq;", "\x225F")
,("QUOT", "\x0022")
,("quot", "\x0022")
,("QUOT;", "\x0022")
,("quot;", "\x0022")
,("rAarr;", "\x21DB")
,("race;", "\x223D\x0331")
,("Racute;", "\x0154")
,("racute;", "\x0155")
,("radic;", "\x221A")
,("raemptyv;", "\x29B3")
,("rang;", "\x27E9")
,("Rang;", "\x27EB")
,("rangd;", "\x2992")
,("range;", "\x29A5")
,("rangle;", "\x27E9")
,("raquo", "\x00BB")
,("raquo;", "\x00BB")
,("rarr;", "\x2192")
,("Rarr;", "\x21A0")
,("rArr;", "\x21D2")
,("rarrap;", "\x2975")
,("rarrb;", "\x21E5")
,("rarrbfs;", "\x2920")
,("rarrc;", "\x2933")
,("rarrfs;", "\x291E")
,("rarrhk;", "\x21AA")
,("rarrlp;", "\x21AC")
,("rarrpl;", "\x2945")
,("rarrsim;", "\x2974")
,("rarrtl;", "\x21A3")
,("Rarrtl;", "\x2916")
,("rarrw;", "\x219D")
,("ratail;", "\x291A")
,("rAtail;", "\x291C")
,("ratio;", "\x2236")
,("rationals;", "\x211A")
,("rbarr;", "\x290D")
,("rBarr;", "\x290F")
,("RBarr;", "\x2910")
,("rbbrk;", "\x2773")
,("rbrace;", "\x007D")
,("rbrack;", "\x005D")
,("rbrke;", "\x298C")
,("rbrksld;", "\x298E")
,("rbrkslu;", "\x2990")
,("Rcaron;", "\x0158")
,("rcaron;", "\x0159")
,("Rcedil;", "\x0156")
,("rcedil;", "\x0157")
,("rceil;", "\x2309")
,("rcub;", "\x007D")
,("Rcy;", "\x0420")
,("rcy;", "\x0440")
,("rdca;", "\x2937")
,("rdldhar;", "\x2969")
,("rdquo;", "\x201D")
,("rdquor;", "\x201D")
,("rdsh;", "\x21B3")
,("Re;", "\x211C")
,("real;", "\x211C")
,("realine;", "\x211B")
,("realpart;", "\x211C")
,("reals;", "\x211D")
,("rect;", "\x25AD")
,("REG", "\x00AE")
,("reg", "\x00AE")
,("REG;", "\x00AE")
,("reg;", "\x00AE")
,("ReverseElement;", "\x220B")
,("ReverseEquilibrium;", "\x21CB")
,("ReverseUpEquilibrium;", "\x296F")
,("rfisht;", "\x297D")
,("rfloor;", "\x230B")
,("Rfr;", "\x211C")
,("rfr;", "\x1D52F")
,("rHar;", "\x2964")
,("rhard;", "\x21C1")
,("rharu;", "\x21C0")
,("rharul;", "\x296C")
,("Rho;", "\x03A1")
,("rho;", "\x03C1")
,("rhov;", "\x03F1")
,("RightAngleBracket;", "\x27E9")
,("RightArrow;", "\x2192")
,("rightarrow;", "\x2192")
,("Rightarrow;", "\x21D2")
,("RightArrowBar;", "\x21E5")
,("RightArrowLeftArrow;", "\x21C4")
,("rightarrowtail;", "\x21A3")
,("RightCeiling;", "\x2309")
,("RightDoubleBracket;", "\x27E7")
,("RightDownTeeVector;", "\x295D")
,("RightDownVector;", "\x21C2")
,("RightDownVectorBar;", "\x2955")
,("RightFloor;", "\x230B")
,("rightharpoondown;", "\x21C1")
,("rightharpoonup;", "\x21C0")
,("rightleftarrows;", "\x21C4")
,("rightleftharpoons;", "\x21CC")
,("rightrightarrows;", "\x21C9")
,("rightsquigarrow;", "\x219D")
,("RightTee;", "\x22A2")
,("RightTeeArrow;", "\x21A6")
,("RightTeeVector;", "\x295B")
,("rightthreetimes;", "\x22CC")
,("RightTriangle;", "\x22B3")
,("RightTriangleBar;", "\x29D0")
,("RightTriangleEqual;", "\x22B5")
,("RightUpDownVector;", "\x294F")
,("RightUpTeeVector;", "\x295C")
,("RightUpVector;", "\x21BE")
,("RightUpVectorBar;", "\x2954")
,("RightVector;", "\x21C0")
,("RightVectorBar;", "\x2953")
,("ring;", "\x02DA")
,("risingdotseq;", "\x2253")
,("rlarr;", "\x21C4")
,("rlhar;", "\x21CC")
,("rlm;", "\x200F")
,("rmoust;", "\x23B1")
,("rmoustache;", "\x23B1")
,("rnmid;", "\x2AEE")
,("roang;", "\x27ED")
,("roarr;", "\x21FE")
,("robrk;", "\x27E7")
,("ropar;", "\x2986")
,("Ropf;", "\x211D")
,("ropf;", "\x1D563")
,("roplus;", "\x2A2E")
,("rotimes;", "\x2A35")
,("RoundImplies;", "\x2970")
,("rpar;", "\x0029")
,("rpargt;", "\x2994")
,("rppolint;", "\x2A12")
,("rrarr;", "\x21C9")
,("Rrightarrow;", "\x21DB")
,("rsaquo;", "\x203A")
,("Rscr;", "\x211B")
,("rscr;", "\x1D4C7")
,("Rsh;", "\x21B1")
,("rsh;", "\x21B1")
,("rsqb;", "\x005D")
,("rsquo;", "\x2019")
,("rsquor;", "\x2019")
,("rthree;", "\x22CC")
,("rtimes;", "\x22CA")
,("rtri;", "\x25B9")
,("rtrie;", "\x22B5")
,("rtrif;", "\x25B8")
,("rtriltri;", "\x29CE")
,("RuleDelayed;", "\x29F4")
,("ruluhar;", "\x2968")
,("rx;", "\x211E")
,("Sacute;", "\x015A")
,("sacute;", "\x015B")
,("sbquo;", "\x201A")
,("sc;", "\x227B")
,("Sc;", "\x2ABC")
,("scap;", "\x2AB8")
,("Scaron;", "\x0160")
,("scaron;", "\x0161")
,("sccue;", "\x227D")
,("sce;", "\x2AB0")
,("scE;", "\x2AB4")
,("Scedil;", "\x015E")
,("scedil;", "\x015F")
,("Scirc;", "\x015C")
,("scirc;", "\x015D")
,("scnap;", "\x2ABA")
,("scnE;", "\x2AB6")
,("scnsim;", "\x22E9")
,("scpolint;", "\x2A13")
,("scsim;", "\x227F")
,("Scy;", "\x0421")
,("scy;", "\x0441")
,("sdot;", "\x22C5")
,("sdotb;", "\x22A1")
,("sdote;", "\x2A66")
,("searhk;", "\x2925")
,("searr;", "\x2198")
,("seArr;", "\x21D8")
,("searrow;", "\x2198")
,("sect", "\x00A7")
,("sect;", "\x00A7")
,("semi;", "\x003B")
,("seswar;", "\x2929")
,("setminus;", "\x2216")
,("setmn;", "\x2216")
,("sext;", "\x2736")
,("Sfr;", "\x1D516")
,("sfr;", "\x1D530")
,("sfrown;", "\x2322")
,("sharp;", "\x266F")
,("SHCHcy;", "\x0429")
,("shchcy;", "\x0449")
,("SHcy;", "\x0428")
,("shcy;", "\x0448")
,("ShortDownArrow;", "\x2193")
,("ShortLeftArrow;", "\x2190")
,("shortmid;", "\x2223")
,("shortparallel;", "\x2225")
,("ShortRightArrow;", "\x2192")
,("ShortUpArrow;", "\x2191")
,("shy", "\x00AD")
,("shy;", "\x00AD")
,("Sigma;", "\x03A3")
,("sigma;", "\x03C3")
,("sigmaf;", "\x03C2")
,("sigmav;", "\x03C2")
,("sim;", "\x223C")
,("simdot;", "\x2A6A")
,("sime;", "\x2243")
,("simeq;", "\x2243")
,("simg;", "\x2A9E")
,("simgE;", "\x2AA0")
,("siml;", "\x2A9D")
,("simlE;", "\x2A9F")
,("simne;", "\x2246")
,("simplus;", "\x2A24")
,("simrarr;", "\x2972")
,("slarr;", "\x2190")
,("SmallCircle;", "\x2218")
,("smallsetminus;", "\x2216")
,("smashp;", "\x2A33")
,("smeparsl;", "\x29E4")
,("smid;", "\x2223")
,("smile;", "\x2323")
,("smt;", "\x2AAA")
,("smte;", "\x2AAC")
,("smtes;", "\x2AAC\xFE00")
,("SOFTcy;", "\x042C")
,("softcy;", "\x044C")
,("sol;", "\x002F")
,("solb;", "\x29C4")
,("solbar;", "\x233F")
,("Sopf;", "\x1D54A")
,("sopf;", "\x1D564")
,("spades;", "\x2660")
,("spadesuit;", "\x2660")
,("spar;", "\x2225")
,("sqcap;", "\x2293")
,("sqcaps;", "\x2293\xFE00")
,("sqcup;", "\x2294")
,("sqcups;", "\x2294\xFE00")
,("Sqrt;", "\x221A")
,("sqsub;", "\x228F")
,("sqsube;", "\x2291")
,("sqsubset;", "\x228F")
,("sqsubseteq;", "\x2291")
,("sqsup;", "\x2290")
,("sqsupe;", "\x2292")
,("sqsupset;", "\x2290")
,("sqsupseteq;", "\x2292")
,("squ;", "\x25A1")
,("Square;", "\x25A1")
,("square;", "\x25A1")
,("SquareIntersection;", "\x2293")
,("SquareSubset;", "\x228F")
,("SquareSubsetEqual;", "\x2291")
,("SquareSuperset;", "\x2290")
,("SquareSupersetEqual;", "\x2292")
,("SquareUnion;", "\x2294")
,("squarf;", "\x25AA")
,("squf;", "\x25AA")
,("srarr;", "\x2192")
,("Sscr;", "\x1D4AE")
,("sscr;", "\x1D4C8")
,("ssetmn;", "\x2216")
,("ssmile;", "\x2323")
,("sstarf;", "\x22C6")
,("Star;", "\x22C6")
,("star;", "\x2606")
,("starf;", "\x2605")
,("straightepsilon;", "\x03F5")
,("straightphi;", "\x03D5")
,("strns;", "\x00AF")
,("sub;", "\x2282")
,("Sub;", "\x22D0")
,("subdot;", "\x2ABD")
,("sube;", "\x2286")
,("subE;", "\x2AC5")
,("subedot;", "\x2AC3")
,("submult;", "\x2AC1")
,("subne;", "\x228A")
,("subnE;", "\x2ACB")
,("subplus;", "\x2ABF")
,("subrarr;", "\x2979")
,("subset;", "\x2282")
,("Subset;", "\x22D0")
,("subseteq;", "\x2286")
,("subseteqq;", "\x2AC5")
,("SubsetEqual;", "\x2286")
,("subsetneq;", "\x228A")
,("subsetneqq;", "\x2ACB")
,("subsim;", "\x2AC7")
,("subsub;", "\x2AD5")
,("subsup;", "\x2AD3")
,("succ;", "\x227B")
,("succapprox;", "\x2AB8")
,("succcurlyeq;", "\x227D")
,("Succeeds;", "\x227B")
,("SucceedsEqual;", "\x2AB0")
,("SucceedsSlantEqual;", "\x227D")
,("SucceedsTilde;", "\x227F")
,("succeq;", "\x2AB0")
,("succnapprox;", "\x2ABA")
,("succneqq;", "\x2AB6")
,("succnsim;", "\x22E9")
,("succsim;", "\x227F")
,("SuchThat;", "\x220B")
,("Sum;", "\x2211")
,("sum;", "\x2211")
,("sung;", "\x266A")
,("sup1", "\x00B9")
,("sup1;", "\x00B9")
,("sup2", "\x00B2")
,("sup2;", "\x00B2")
,("sup3", "\x00B3")
,("sup3;", "\x00B3")
,("sup;", "\x2283")
,("Sup;", "\x22D1")
,("supdot;", "\x2ABE")
,("supdsub;", "\x2AD8")
,("supe;", "\x2287")
,("supE;", "\x2AC6")
,("supedot;", "\x2AC4")
,("Superset;", "\x2283")
,("SupersetEqual;", "\x2287")
,("suphsol;", "\x27C9")
,("suphsub;", "\x2AD7")
,("suplarr;", "\x297B")
,("supmult;", "\x2AC2")
,("supne;", "\x228B")
,("supnE;", "\x2ACC")
,("supplus;", "\x2AC0")
,("supset;", "\x2283")
,("Supset;", "\x22D1")
,("supseteq;", "\x2287")
,("supseteqq;", "\x2AC6")
,("supsetneq;", "\x228B")
,("supsetneqq;", "\x2ACC")
,("supsim;", "\x2AC8")
,("supsub;", "\x2AD4")
,("supsup;", "\x2AD6")
,("swarhk;", "\x2926")
,("swarr;", "\x2199")
,("swArr;", "\x21D9")
,("swarrow;", "\x2199")
,("swnwar;", "\x292A")
,("szlig", "\x00DF")
,("szlig;", "\x00DF")
,("Tab;", "\x0009")
,("target;", "\x2316")
,("Tau;", "\x03A4")
,("tau;", "\x03C4")
,("tbrk;", "\x23B4")
,("Tcaron;", "\x0164")
,("tcaron;", "\x0165")
,("Tcedil;", "\x0162")
,("tcedil;", "\x0163")
,("Tcy;", "\x0422")
,("tcy;", "\x0442")
,("tdot;", "\x20DB")
,("telrec;", "\x2315")
,("Tfr;", "\x1D517")
,("tfr;", "\x1D531")
,("there4;", "\x2234")
,("Therefore;", "\x2234")
,("therefore;", "\x2234")
,("Theta;", "\x0398")
,("theta;", "\x03B8")
,("thetasym;", "\x03D1")
,("thetav;", "\x03D1")
,("thickapprox;", "\x2248")
,("thicksim;", "\x223C")
,("ThickSpace;", "\x205F\x200A")
,("thinsp;", "\x2009")
,("ThinSpace;", "\x2009")
,("thkap;", "\x2248")
,("thksim;", "\x223C")
,("THORN", "\x00DE")
,("thorn", "\x00FE")
,("THORN;", "\x00DE")
,("thorn;", "\x00FE")
,("tilde;", "\x02DC")
,("Tilde;", "\x223C")
,("TildeEqual;", "\x2243")
,("TildeFullEqual;", "\x2245")
,("TildeTilde;", "\x2248")
,("times", "\x00D7")
,("times;", "\x00D7")
,("timesb;", "\x22A0")
,("timesbar;", "\x2A31")
,("timesd;", "\x2A30")
,("tint;", "\x222D")
,("toea;", "\x2928")
,("top;", "\x22A4")
,("topbot;", "\x2336")
,("topcir;", "\x2AF1")
,("Topf;", "\x1D54B")
,("topf;", "\x1D565")
,("topfork;", "\x2ADA")
,("tosa;", "\x2929")
,("tprime;", "\x2034")
,("TRADE;", "\x2122")
,("trade;", "\x2122")
,("triangle;", "\x25B5")
,("triangledown;", "\x25BF")
,("triangleleft;", "\x25C3")
,("trianglelefteq;", "\x22B4")
,("triangleq;", "\x225C")
,("triangleright;", "\x25B9")
,("trianglerighteq;", "\x22B5")
,("tridot;", "\x25EC")
,("trie;", "\x225C")
,("triminus;", "\x2A3A")
,("TripleDot;", "\x20DB")
,("triplus;", "\x2A39")
,("trisb;", "\x29CD")
,("tritime;", "\x2A3B")
,("trpezium;", "\x23E2")
,("Tscr;", "\x1D4AF")
,("tscr;", "\x1D4C9")
,("TScy;", "\x0426")
,("tscy;", "\x0446")
,("TSHcy;", "\x040B")
,("tshcy;", "\x045B")
,("Tstrok;", "\x0166")
,("tstrok;", "\x0167")
,("twixt;", "\x226C")
,("twoheadleftarrow;", "\x219E")
,("twoheadrightarrow;", "\x21A0")
,("Uacute", "\x00DA")
,("uacute", "\x00FA")
,("Uacute;", "\x00DA")
,("uacute;", "\x00FA")
,("uarr;", "\x2191")
,("Uarr;", "\x219F")
,("uArr;", "\x21D1")
,("Uarrocir;", "\x2949")
,("Ubrcy;", "\x040E")
,("ubrcy;", "\x045E")
,("Ubreve;", "\x016C")
,("ubreve;", "\x016D")
,("Ucirc", "\x00DB")
,("ucirc", "\x00FB")
,("Ucirc;", "\x00DB")
,("ucirc;", "\x00FB")
,("Ucy;", "\x0423")
,("ucy;", "\x0443")
,("udarr;", "\x21C5")
,("Udblac;", "\x0170")
,("udblac;", "\x0171")
,("udhar;", "\x296E")
,("ufisht;", "\x297E")
,("Ufr;", "\x1D518")
,("ufr;", "\x1D532")
,("Ugrave", "\x00D9")
,("ugrave", "\x00F9")
,("Ugrave;", "\x00D9")
,("ugrave;", "\x00F9")
,("uHar;", "\x2963")
,("uharl;", "\x21BF")
,("uharr;", "\x21BE")
,("uhblk;", "\x2580")
,("ulcorn;", "\x231C")
,("ulcorner;", "\x231C")
,("ulcrop;", "\x230F")
,("ultri;", "\x25F8")
,("Umacr;", "\x016A")
,("umacr;", "\x016B")
,("uml", "\x00A8")
,("uml;", "\x00A8")
,("UnderBar;", "\x005F")
,("UnderBrace;", "\x23DF")
,("UnderBracket;", "\x23B5")
,("UnderParenthesis;", "\x23DD")
,("Union;", "\x22C3")
,("UnionPlus;", "\x228E")
,("Uogon;", "\x0172")
,("uogon;", "\x0173")
,("Uopf;", "\x1D54C")
,("uopf;", "\x1D566")
,("UpArrow;", "\x2191")
,("uparrow;", "\x2191")
,("Uparrow;", "\x21D1")
,("UpArrowBar;", "\x2912")
,("UpArrowDownArrow;", "\x21C5")
,("UpDownArrow;", "\x2195")
,("updownarrow;", "\x2195")
,("Updownarrow;", "\x21D5")
,("UpEquilibrium;", "\x296E")
,("upharpoonleft;", "\x21BF")
,("upharpoonright;", "\x21BE")
,("uplus;", "\x228E")
,("UpperLeftArrow;", "\x2196")
,("UpperRightArrow;", "\x2197")
,("upsi;", "\x03C5")
,("Upsi;", "\x03D2")
,("upsih;", "\x03D2")
,("Upsilon;", "\x03A5")
,("upsilon;", "\x03C5")
,("UpTee;", "\x22A5")
,("UpTeeArrow;", "\x21A5")
,("upuparrows;", "\x21C8")
,("urcorn;", "\x231D")
,("urcorner;", "\x231D")
,("urcrop;", "\x230E")
,("Uring;", "\x016E")
,("uring;", "\x016F")
,("urtri;", "\x25F9")
,("Uscr;", "\x1D4B0")
,("uscr;", "\x1D4CA")
,("utdot;", "\x22F0")
,("Utilde;", "\x0168")
,("utilde;", "\x0169")
,("utri;", "\x25B5")
,("utrif;", "\x25B4")
,("uuarr;", "\x21C8")
,("Uuml", "\x00DC")
,("uuml", "\x00FC")
,("Uuml;", "\x00DC")
,("uuml;", "\x00FC")
,("uwangle;", "\x29A7")
,("vangrt;", "\x299C")
,("varepsilon;", "\x03F5")
,("varkappa;", "\x03F0")
,("varnothing;", "\x2205")
,("varphi;", "\x03D5")
,("varpi;", "\x03D6")
,("varpropto;", "\x221D")
,("varr;", "\x2195")
,("vArr;", "\x21D5")
,("varrho;", "\x03F1")
,("varsigma;", "\x03C2")
,("varsubsetneq;", "\x228A\xFE00")
,("varsubsetneqq;", "\x2ACB\xFE00")
,("varsupsetneq;", "\x228B\xFE00")
,("varsupsetneqq;", "\x2ACC\xFE00")
,("vartheta;", "\x03D1")
,("vartriangleleft;", "\x22B2")
,("vartriangleright;", "\x22B3")
,("vBar;", "\x2AE8")
,("Vbar;", "\x2AEB")
,("vBarv;", "\x2AE9")
,("Vcy;", "\x0412")
,("vcy;", "\x0432")
,("vdash;", "\x22A2")
,("vDash;", "\x22A8")
,("Vdash;", "\x22A9")
,("VDash;", "\x22AB")
,("Vdashl;", "\x2AE6")
,("vee;", "\x2228")
,("Vee;", "\x22C1")
,("veebar;", "\x22BB")
,("veeeq;", "\x225A")
,("vellip;", "\x22EE")
,("verbar;", "\x007C")
,("Verbar;", "\x2016")
,("vert;", "\x007C")
,("Vert;", "\x2016")
,("VerticalBar;", "\x2223")
,("VerticalLine;", "\x007C")
,("VerticalSeparator;", "\x2758")
,("VerticalTilde;", "\x2240")
,("VeryThinSpace;", "\x200A")
,("Vfr;", "\x1D519")
,("vfr;", "\x1D533")
,("vltri;", "\x22B2")
,("vnsub;", "\x2282\x20D2")
,("vnsup;", "\x2283\x20D2")
,("Vopf;", "\x1D54D")
,("vopf;", "\x1D567")
,("vprop;", "\x221D")
,("vrtri;", "\x22B3")
,("Vscr;", "\x1D4B1")
,("vscr;", "\x1D4CB")
,("vsubne;", "\x228A\xFE00")
,("vsubnE;", "\x2ACB\xFE00")
,("vsupne;", "\x228B\xFE00")
,("vsupnE;", "\x2ACC\xFE00")
,("Vvdash;", "\x22AA")
,("vzigzag;", "\x299A")
,("Wcirc;", "\x0174")
,("wcirc;", "\x0175")
,("wedbar;", "\x2A5F")
,("wedge;", "\x2227")
,("Wedge;", "\x22C0")
,("wedgeq;", "\x2259")
,("weierp;", "\x2118")
,("Wfr;", "\x1D51A")
,("wfr;", "\x1D534")
,("Wopf;", "\x1D54E")
,("wopf;", "\x1D568")
,("wp;", "\x2118")
,("wr;", "\x2240")
,("wreath;", "\x2240")
,("Wscr;", "\x1D4B2")
,("wscr;", "\x1D4CC")
,("xcap;", "\x22C2")
,("xcirc;", "\x25EF")
,("xcup;", "\x22C3")
,("xdtri;", "\x25BD")
,("Xfr;", "\x1D51B")
,("xfr;", "\x1D535")
,("xharr;", "\x27F7")
,("xhArr;", "\x27FA")
,("Xi;", "\x039E")
,("xi;", "\x03BE")
,("xlarr;", "\x27F5")
,("xlArr;", "\x27F8")
,("xmap;", "\x27FC")
,("xnis;", "\x22FB")
,("xodot;", "\x2A00")
,("Xopf;", "\x1D54F")
,("xopf;", "\x1D569")
,("xoplus;", "\x2A01")
,("xotime;", "\x2A02")
,("xrarr;", "\x27F6")
,("xrArr;", "\x27F9")
,("Xscr;", "\x1D4B3")
,("xscr;", "\x1D4CD")
,("xsqcup;", "\x2A06")
,("xuplus;", "\x2A04")
,("xutri;", "\x25B3")
,("xvee;", "\x22C1")
,("xwedge;", "\x22C0")
,("Yacute", "\x00DD")
,("yacute", "\x00FD")
,("Yacute;", "\x00DD")
,("yacute;", "\x00FD")
,("YAcy;", "\x042F")
,("yacy;", "\x044F")
,("Ycirc;", "\x0176")
,("ycirc;", "\x0177")
,("Ycy;", "\x042B")
,("ycy;", "\x044B")
,("yen", "\x00A5")
,("yen;", "\x00A5")
,("Yfr;", "\x1D51C")
,("yfr;", "\x1D536")
,("YIcy;", "\x0407")
,("yicy;", "\x0457")
,("Yopf;", "\x1D550")
,("yopf;", "\x1D56A")
,("Yscr;", "\x1D4B4")
,("yscr;", "\x1D4CE")
,("YUcy;", "\x042E")
,("yucy;", "\x044E")
,("yuml", "\x00FF")
,("yuml;", "\x00FF")
,("Yuml;", "\x0178")
,("Zacute;", "\x0179")
,("zacute;", "\x017A")
,("Zcaron;", "\x017D")
,("zcaron;", "\x017E")
,("Zcy;", "\x0417")
,("zcy;", "\x0437")
,("Zdot;", "\x017B")
,("zdot;", "\x017C")
,("zeetrf;", "\x2128")
,("ZeroWidthSpace;", "\x200B")
,("Zeta;", "\x0396")
,("zeta;", "\x03B6")
,("Zfr;", "\x2128")
,("zfr;", "\x1D537")
,("ZHcy;", "\x0416")
,("zhcy;", "\x0436")
,("zigrarr;", "\x21DD")
,("Zopf;", "\x2124")
,("zopf;", "\x1D56B")
,("Zscr;", "\x1D4B5")
,("zscr;", "\x1D4CF")
,("zwj;", "\x200D")
,("zwnj;", "\x200C")
]
charEntity :: Monad m => ParsecT [Tok] s m [Tok]
charEntity = do
wc@(Tok WordChars _ ts) <- satisfyTok (hasType WordChars)
semi <- symbol ';'
guard $ isJust $ lookupEntity (ts <> ";")
return [wc, semi]
numEntity :: Monad m => ParsecT [Tok] s m [Tok]
numEntity = do
octo <- symbol '#'
wc@(Tok WordChars _ t) <- satisfyTok (hasType WordChars)
guard $
case T.uncons t of
Just (x, rest)
| x == 'x' || x == 'X' ->
T.all isHexDigit rest &&
not (T.null rest) &&
T.length rest <= 6
| otherwise -> T.all isDigit t &&
T.length t <= 7
_ -> False
semi <- symbol ';'
return [octo, wc, semi]
unEntity :: [Tok] -> Text
unEntity ts = untokenize $
case parse (many (pEntity' <|> anyTok)) "" ts of
Left _ -> ts
Right ts' -> ts'
where pEntity' :: ParsecT [Tok] () Identity Tok
pEntity' = try $ do
pos <- getPosition
symbol '&'
ent <- untokenize <$> (numEntity <|> charEntity)
case lookupEntity ent of
Just s -> return $ Tok WordChars pos s
Nothing -> mzero