htex

simple incorrect html parser
git clone git://git.relim.de/htex.git
Log | Files | Refs | README

commit 61caacea3913f3844bb5aa7deb5c01f6d2dd5858
parent 4f192e544a2ed77e2d9c7399e48cd5c2c71588ad
Author: Robin <kroekerrobin@gmail.com>
Date:   Thu,  4 Apr 2024 09:25:58 +0200

Rename everything

Diffstat:
Aentities.h | 2239+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mhtex.c | 192++++++++++++++++++++++++++++++++++++++++++-------------------------------------
Ahtex.h | 20++++++++++++++++++++
Mhtml.c | 1323++++++++++++++++++++++++++++++++++++++-----------------------------------------
Mhtml.h | 2331++-----------------------------------------------------------------------------
Mmisc.c | 49+++++++++++++++++++++++++------------------------
Mtodo | 3++-
7 files changed, 3088 insertions(+), 3069 deletions(-)

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