{-# LANGUAGE OverloadedStrings #-} -- This code for lookupEntity is modified from Text.HTML.TagSoup.Entity -- (C) 2006--2018 Neil Mitchell, released under the BSD-3 license 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 Unicode.Char (chr, isDigit, isHexDigit) import Data.Maybe (isJust) -- | Lookup an entity, using 'lookupNumericEntity' if it starts with -- @#@ and 'lookupNamedEntity' otherwise lookupEntity :: Text -> Maybe Text lookupEntity t = case T.uncons t of Just ('#', t') -> lookupNumericEntity t' _ -> lookupNamedEntity t -- | Lookup a numeric entity, the leading @\'#\'@ must have already been removed. -- -- > lookupNumericEntity "65" == Just "A" -- > lookupNumericEntity "x41" == Just "A" -- > lookupNumericEntity "x4E" === Just "N" -- > lookupNumericEntity "x4e" === Just "N" -- > lookupNumericEntity "X4e" === Just "N" -- > lookupNumericEntity "Haskell" == Nothing -- > lookupNumericEntity "" == Nothing -- > lookupNumericEntity "89439085908539082" == Nothing lookupNumericEntity :: Text -> Maybe Text lookupNumericEntity = f -- entity = '&#' [0-9]+ ';' | '&#x' [0-9a-fA-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" -- illegal code point else Just $ T.singleton $ chr $ fromInteger x _ -> Nothing -- | Lookup a named entity, using 'htmlEntities' -- -- > lookupNamedEntity "amp" == Just "&" -- > lookupNamedEntity "haskell" == Nothing lookupNamedEntity :: Text -> Maybe Text lookupNamedEntity x = Map.lookup x htmlEntityMap htmlEntityMap :: Map.Map Text Text htmlEntityMap = Map.fromList htmlEntities -- | A table mapping HTML entity names to resolved strings. Most resolved strings are a single character long, -- but some (e.g. @"ngeqq"@) are two characters long. The list is taken from -- . 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