commit 61caacea3913f3844bb5aa7deb5c01f6d2dd5858
parent 4f192e544a2ed77e2d9c7399e48cd5c2c71588ad
Author: Robin <kroekerrobin@gmail.com>
Date: Thu, 4 Apr 2024 09:25:58 +0200
Rename everything
Diffstat:
| A | entities.h | | | 2239 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| M | htex.c | | | 192 | ++++++++++++++++++++++++++++++++++++++++++------------------------------------- |
| A | htex.h | | | 20 | ++++++++++++++++++++ |
| M | html.c | | | 1323 | ++++++++++++++++++++++++++++++++++++++----------------------------------------- |
| M | html.h | | | 2331 | ++----------------------------------------------------------------------------- |
| M | misc.c | | | 49 | +++++++++++++++++++++++++------------------------ |
| M | todo | | | 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