nokogumbo 0.5 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
data/work/char_ref.c ADDED
@@ -0,0 +1,2561 @@
1
+ // Copyright 2011 Google Inc. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+ // Author: jdtang@google.com (Jonathan Tang)
16
+
17
+ #include "char_ref.h"
18
+
19
+ #include <assert.h>
20
+ #include <ctype.h>
21
+ #include <stddef.h>
22
+ #include <string.h> // Only for debug assertions at present.
23
+
24
+ #include "error.h"
25
+ #include "string_piece.h"
26
+ #include "utf8.h"
27
+ #include "util.h"
28
+
29
+ struct _GumboParser;
30
+
31
+ const int kGumboNoChar = -1;
32
+
33
+ // Table of named character entities, and functions for looking them up.
34
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/named-character-references.html
35
+ //
36
+ // TODO(jdtang): I'd thought of using more efficient means of this, eg. binary
37
+ // searching the table (which can only be done if we know for sure that there's
38
+ // enough room in the buffer for our memcmps, otherwise we need to fall back on
39
+ // linear search) or compiling the list of named entities to a Ragel state
40
+ // machine. But I'll start with the simple approach and optimize only if
41
+ // profiling calls for it. The one concession to efficiency is to store the
42
+ // length of the entity with it, so that we don't need to run a strlen to detect
43
+ // potential buffer overflows.
44
+ typedef struct {
45
+ const char* name;
46
+ size_t length;
47
+ OneOrTwoCodepoints codepoints;
48
+ } NamedCharRef;
49
+
50
+ #define CHAR_REF(name, codepoint) { name, sizeof(name) - 1, { codepoint, -1 } }
51
+ #define MULTI_CHAR_REF(name, code_point, code_point2) \
52
+ { name, sizeof(name) - 1, { code_point, code_point2 } }
53
+
54
+ // Versions with the semicolon must come before versions without the semicolon,
55
+ // otherwise they'll match the invalid name first and record a parse error.
56
+ // TODO(jdtang): Replace with a FSM that'll do longest-match-first and probably
57
+ // give better performance besides.
58
+ static const NamedCharRef kNamedEntities[] = {
59
+ CHAR_REF("AElig", 0xc6),
60
+ CHAR_REF("AMP;", 0x26),
61
+ CHAR_REF("AMP", 0x26),
62
+ CHAR_REF("Aacute;", 0xc1),
63
+ CHAR_REF("Aacute", 0xc1),
64
+ CHAR_REF("Abreve;", 0x0102),
65
+ CHAR_REF("Acirc;", 0xc2),
66
+ CHAR_REF("Acirc", 0xc2),
67
+ CHAR_REF("Acy;", 0x0410),
68
+ CHAR_REF("Afr;", 0x0001d504),
69
+ CHAR_REF("Agrave", 0xc0),
70
+ CHAR_REF("Agrave;", 0xc0),
71
+ CHAR_REF("Alpha;", 0x0391),
72
+ CHAR_REF("Amacr;", 0x0100),
73
+ CHAR_REF("And;", 0x2a53),
74
+ CHAR_REF("Aogon;", 0x0104),
75
+ CHAR_REF("Aopf;", 0x0001d538),
76
+ CHAR_REF("ApplyFunction;", 0x2061),
77
+ CHAR_REF("Aring;", 0xc5),
78
+ CHAR_REF("Aring", 0xc5),
79
+ CHAR_REF("Ascr;", 0x0001d49c),
80
+ CHAR_REF("Assign;", 0x2254),
81
+ CHAR_REF("Atilde;", 0xc3),
82
+ CHAR_REF("Atilde", 0xc3),
83
+ CHAR_REF("Auml;", 0xc4),
84
+ CHAR_REF("Auml", 0xc4),
85
+ CHAR_REF("Backslash;", 0x2216),
86
+ CHAR_REF("Barv;", 0x2ae7),
87
+ CHAR_REF("Barwed;", 0x2306),
88
+ CHAR_REF("Bcy;", 0x0411),
89
+ CHAR_REF("Because;", 0x2235),
90
+ CHAR_REF("Bernoullis;", 0x212c),
91
+ CHAR_REF("Beta;", 0x0392),
92
+ CHAR_REF("Bfr;", 0x0001d505),
93
+ CHAR_REF("Bopf;", 0x0001d539),
94
+ CHAR_REF("Breve;", 0x02d8),
95
+ CHAR_REF("Bscr;", 0x212c),
96
+ CHAR_REF("Bumpeq;", 0x224e),
97
+ CHAR_REF("CHcy;", 0x0427),
98
+ CHAR_REF("COPY;", 0xa9),
99
+ CHAR_REF("COPY", 0xa9),
100
+ CHAR_REF("Cacute;", 0x0106),
101
+ CHAR_REF("Cap;", 0x22d2),
102
+ CHAR_REF("CapitalDifferentialD;", 0x2145),
103
+ CHAR_REF("Cayleys;", 0x212d),
104
+ CHAR_REF("Ccaron;", 0x010c),
105
+ CHAR_REF("Ccedil;", 0xc7),
106
+ CHAR_REF("Ccedil", 0xc7),
107
+ CHAR_REF("Ccirc;", 0x0108),
108
+ CHAR_REF("Cconint;", 0x2230),
109
+ CHAR_REF("Cdot;", 0x010a),
110
+ CHAR_REF("Cedilla;", 0xb8),
111
+ CHAR_REF("CenterDot;", 0xb7),
112
+ CHAR_REF("Cfr;", 0x212d),
113
+ CHAR_REF("Chi;", 0x03a7),
114
+ CHAR_REF("CircleDot;", 0x2299),
115
+ CHAR_REF("CircleMinus;", 0x2296),
116
+ CHAR_REF("CirclePlus;", 0x2295),
117
+ CHAR_REF("CircleTimes;", 0x2297),
118
+ CHAR_REF("ClockwiseContourIntegral;", 0x2232),
119
+ CHAR_REF("CloseCurlyDoubleQuote;", 0x201d),
120
+ CHAR_REF("CloseCurlyQuote;", 0x2019),
121
+ CHAR_REF("Colon;", 0x2237),
122
+ CHAR_REF("Colone;", 0x2a74),
123
+ CHAR_REF("Congruent;", 0x2261),
124
+ CHAR_REF("Conint;", 0x222f),
125
+ CHAR_REF("ContourIntegral;", 0x222e),
126
+ CHAR_REF("Copf;", 0x2102),
127
+ CHAR_REF("Coproduct;", 0x2210),
128
+ CHAR_REF("CounterClockwiseContourIntegral;", 0x2233),
129
+ CHAR_REF("Cross;", 0x2a2f),
130
+ CHAR_REF("Cscr;", 0x0001d49e),
131
+ CHAR_REF("Cup;", 0x22d3),
132
+ CHAR_REF("CupCap;", 0x224d),
133
+ CHAR_REF("DD;", 0x2145),
134
+ CHAR_REF("DDotrahd;", 0x2911),
135
+ CHAR_REF("DJcy;", 0x0402),
136
+ CHAR_REF("DScy;", 0x0405),
137
+ CHAR_REF("DZcy;", 0x040f),
138
+ CHAR_REF("Dagger;", 0x2021),
139
+ CHAR_REF("Darr;", 0x21a1),
140
+ CHAR_REF("Dashv;", 0x2ae4),
141
+ CHAR_REF("Dcaron;", 0x010e),
142
+ CHAR_REF("Dcy;", 0x0414),
143
+ CHAR_REF("Del;", 0x2207),
144
+ CHAR_REF("Delta;", 0x0394),
145
+ CHAR_REF("Dfr;", 0x0001d507),
146
+ CHAR_REF("DiacriticalAcute;", 0xb4),
147
+ CHAR_REF("DiacriticalDot;", 0x02d9),
148
+ CHAR_REF("DiacriticalDoubleAcute;", 0x02dd),
149
+ CHAR_REF("DiacriticalGrave;", 0x60),
150
+ CHAR_REF("DiacriticalTilde;", 0x02dc),
151
+ CHAR_REF("Diamond;", 0x22c4),
152
+ CHAR_REF("DifferentialD;", 0x2146),
153
+ CHAR_REF("Dopf;", 0x0001d53b),
154
+ CHAR_REF("Dot;", 0xa8),
155
+ CHAR_REF("DotDot;", 0x20dc),
156
+ CHAR_REF("DotEqual;", 0x2250),
157
+ CHAR_REF("DoubleContourIntegral;", 0x222f),
158
+ CHAR_REF("DoubleDot;", 0xa8),
159
+ CHAR_REF("DoubleDownArrow;", 0x21d3),
160
+ CHAR_REF("DoubleLeftArrow;", 0x21d0),
161
+ CHAR_REF("DoubleLeftRightArrow;", 0x21d4),
162
+ CHAR_REF("DoubleLeftTee;", 0x2ae4),
163
+ CHAR_REF("DoubleLongLeftArrow;", 0x27f8),
164
+ CHAR_REF("DoubleLongLeftRightArrow;", 0x27fa),
165
+ CHAR_REF("DoubleLongRightArrow;", 0x27f9),
166
+ CHAR_REF("DoubleRightArrow;", 0x21d2),
167
+ CHAR_REF("DoubleRightTee;", 0x22a8),
168
+ CHAR_REF("DoubleUpArrow;", 0x21d1),
169
+ CHAR_REF("DoubleUpDownArrow;", 0x21d5),
170
+ CHAR_REF("DoubleVerticalBar;", 0x2225),
171
+ CHAR_REF("DownArrow;", 0x2193),
172
+ CHAR_REF("DownArrowBar;", 0x2913),
173
+ CHAR_REF("DownArrowUpArrow;", 0x21f5),
174
+ CHAR_REF("DownBreve;", 0x0311),
175
+ CHAR_REF("DownLeftRightVector;", 0x2950),
176
+ CHAR_REF("DownLeftTeeVector;", 0x295e),
177
+ CHAR_REF("DownLeftVector;", 0x21bd),
178
+ CHAR_REF("DownLeftVectorBar;", 0x2956),
179
+ CHAR_REF("DownRightTeeVector;", 0x295f),
180
+ CHAR_REF("DownRightVector;", 0x21c1),
181
+ CHAR_REF("DownRightVectorBar;", 0x2957),
182
+ CHAR_REF("DownTee;", 0x22a4),
183
+ CHAR_REF("DownTeeArrow;", 0x21a7),
184
+ CHAR_REF("Downarrow;", 0x21d3),
185
+ CHAR_REF("Dscr;", 0x0001d49f),
186
+ CHAR_REF("Dstrok;", 0x0110),
187
+ CHAR_REF("ENG;", 0x014a),
188
+ CHAR_REF("ETH;", 0xd0),
189
+ CHAR_REF("ETH", 0xd0),
190
+ CHAR_REF("Eacute;", 0xc9),
191
+ CHAR_REF("Eacute", 0xc9),
192
+ CHAR_REF("Ecaron;", 0x011a),
193
+ CHAR_REF("Ecirc;", 0xca),
194
+ CHAR_REF("Ecirc", 0xca),
195
+ CHAR_REF("Ecy;", 0x042d),
196
+ CHAR_REF("Edot;", 0x0116),
197
+ CHAR_REF("Efr;", 0x0001d508),
198
+ CHAR_REF("Egrave;", 0xc8),
199
+ CHAR_REF("Egrave", 0xc8),
200
+ CHAR_REF("Element;", 0x2208),
201
+ CHAR_REF("Emacr;", 0x0112),
202
+ CHAR_REF("EmptySmallSquare;", 0x25fb),
203
+ CHAR_REF("EmptyVerySmallSquare;", 0x25ab),
204
+ CHAR_REF("Eogon;", 0x0118),
205
+ CHAR_REF("Eopf;", 0x0001d53c),
206
+ CHAR_REF("Epsilon;", 0x0395),
207
+ CHAR_REF("Equal;", 0x2a75),
208
+ CHAR_REF("EqualTilde;", 0x2242),
209
+ CHAR_REF("Equilibrium;", 0x21cc),
210
+ CHAR_REF("Escr;", 0x2130),
211
+ CHAR_REF("Esim;", 0x2a73),
212
+ CHAR_REF("Eta;", 0x0397),
213
+ CHAR_REF("Euml;", 0xcb),
214
+ CHAR_REF("Euml", 0xcb),
215
+ CHAR_REF("Exists;", 0x2203),
216
+ CHAR_REF("ExponentialE;", 0x2147),
217
+ CHAR_REF("Fcy;", 0x0424),
218
+ CHAR_REF("Ffr;", 0x0001d509),
219
+ CHAR_REF("FilledSmallSquare;", 0x25fc),
220
+ CHAR_REF("FilledVerySmallSquare;", 0x25aa),
221
+ CHAR_REF("Fopf;", 0x0001d53d),
222
+ CHAR_REF("ForAll;", 0x2200),
223
+ CHAR_REF("Fouriertrf;", 0x2131),
224
+ CHAR_REF("Fscr;", 0x2131),
225
+ CHAR_REF("GJcy;", 0x0403),
226
+ CHAR_REF("GT;", 0x3e),
227
+ CHAR_REF("GT", 0x3e),
228
+ CHAR_REF("Gamma;", 0x0393),
229
+ CHAR_REF("Gammad;", 0x03dc),
230
+ CHAR_REF("Gbreve;", 0x011e),
231
+ CHAR_REF("Gcedil;", 0x0122),
232
+ CHAR_REF("Gcirc;", 0x011c),
233
+ CHAR_REF("Gcy;", 0x0413),
234
+ CHAR_REF("Gdot;", 0x0120),
235
+ CHAR_REF("Gfr;", 0x0001d50a),
236
+ CHAR_REF("Gg;", 0x22d9),
237
+ CHAR_REF("Gopf;", 0x0001d53e),
238
+ CHAR_REF("GreaterEqual;", 0x2265),
239
+ CHAR_REF("GreaterEqualLess;", 0x22db),
240
+ CHAR_REF("GreaterFullEqual;", 0x2267),
241
+ CHAR_REF("GreaterGreater;", 0x2aa2),
242
+ CHAR_REF("GreaterLess;", 0x2277),
243
+ CHAR_REF("GreaterSlantEqual;", 0x2a7e),
244
+ CHAR_REF("GreaterTilde;", 0x2273),
245
+ CHAR_REF("Gscr;", 0x0001d4a2),
246
+ CHAR_REF("Gt;", 0x226b),
247
+ CHAR_REF("HARDcy;", 0x042a),
248
+ CHAR_REF("Hacek;", 0x02c7),
249
+ CHAR_REF("Hat;", 0x5e),
250
+ CHAR_REF("Hcirc;", 0x0124),
251
+ CHAR_REF("Hfr;", 0x210c),
252
+ CHAR_REF("HilbertSpace;", 0x210b),
253
+ CHAR_REF("Hopf;", 0x210d),
254
+ CHAR_REF("HorizontalLine;", 0x2500),
255
+ CHAR_REF("Hscr;", 0x210b),
256
+ CHAR_REF("Hstrok;", 0x0126),
257
+ CHAR_REF("HumpDownHump;", 0x224e),
258
+ CHAR_REF("HumpEqual;", 0x224f),
259
+ CHAR_REF("IEcy;", 0x0415),
260
+ CHAR_REF("IJlig;", 0x0132),
261
+ CHAR_REF("IOcy;", 0x0401),
262
+ CHAR_REF("Iacute;", 0xcd),
263
+ CHAR_REF("Iacute", 0xcd),
264
+ CHAR_REF("Icirc;", 0xce),
265
+ CHAR_REF("Icirc", 0xce),
266
+ CHAR_REF("Icy;", 0x0418),
267
+ CHAR_REF("Idot;", 0x0130),
268
+ CHAR_REF("Ifr;", 0x2111),
269
+ CHAR_REF("Igrave;", 0xcc),
270
+ CHAR_REF("Igrave", 0xcc),
271
+ CHAR_REF("Im;", 0x2111),
272
+ CHAR_REF("Imacr;", 0x012a),
273
+ CHAR_REF("ImaginaryI;", 0x2148),
274
+ CHAR_REF("Implies;", 0x21d2),
275
+ CHAR_REF("Int;", 0x222c),
276
+ CHAR_REF("Integral;", 0x222b),
277
+ CHAR_REF("Intersection;", 0x22c2),
278
+ CHAR_REF("InvisibleComma;", 0x2063),
279
+ CHAR_REF("InvisibleTimes;", 0x2062),
280
+ CHAR_REF("Iogon;", 0x012e),
281
+ CHAR_REF("Iopf;", 0x0001d540),
282
+ CHAR_REF("Iota;", 0x0399),
283
+ CHAR_REF("Iscr;", 0x2110),
284
+ CHAR_REF("Itilde;", 0x0128),
285
+ CHAR_REF("Iukcy;", 0x0406),
286
+ CHAR_REF("Iuml;", 0xcf),
287
+ CHAR_REF("Iuml", 0xcf),
288
+ CHAR_REF("Jcirc;", 0x0134),
289
+ CHAR_REF("Jcy;", 0x0419),
290
+ CHAR_REF("Jfr;", 0x0001d50d),
291
+ CHAR_REF("Jopf;", 0x0001d541),
292
+ CHAR_REF("Jscr;", 0x0001d4a5),
293
+ CHAR_REF("Jsercy;", 0x0408),
294
+ CHAR_REF("Jukcy;", 0x0404),
295
+ CHAR_REF("KHcy;", 0x0425),
296
+ CHAR_REF("KJcy;", 0x040c),
297
+ CHAR_REF("Kappa;", 0x039a),
298
+ CHAR_REF("Kcedil;", 0x0136),
299
+ CHAR_REF("Kcy;", 0x041a),
300
+ CHAR_REF("Kfr;", 0x0001d50e),
301
+ CHAR_REF("Kopf;", 0x0001d542),
302
+ CHAR_REF("Kscr;", 0x0001d4a6),
303
+ CHAR_REF("LJcy;", 0x0409),
304
+ CHAR_REF("LT;", 0x3c),
305
+ CHAR_REF("LT", 0x3c),
306
+ CHAR_REF("Lacute;", 0x0139),
307
+ CHAR_REF("Lambda;", 0x039b),
308
+ CHAR_REF("Lang;", 0x27ea),
309
+ CHAR_REF("Laplacetrf;", 0x2112),
310
+ CHAR_REF("Larr;", 0x219e),
311
+ CHAR_REF("Lcaron;", 0x013d),
312
+ CHAR_REF("Lcedil;", 0x013b),
313
+ CHAR_REF("Lcy;", 0x041b),
314
+ CHAR_REF("LeftAngleBracket;", 0x27e8),
315
+ CHAR_REF("LeftArrow;", 0x2190),
316
+ CHAR_REF("LeftArrowBar;", 0x21e4),
317
+ CHAR_REF("LeftArrowRightArrow;", 0x21c6),
318
+ CHAR_REF("LeftCeiling;", 0x2308),
319
+ CHAR_REF("LeftDoubleBracket;", 0x27e6),
320
+ CHAR_REF("LeftDownTeeVector;", 0x2961),
321
+ CHAR_REF("LeftDownVector;", 0x21c3),
322
+ CHAR_REF("LeftDownVectorBar;", 0x2959),
323
+ CHAR_REF("LeftFloor;", 0x230a),
324
+ CHAR_REF("LeftRightArrow;", 0x2194),
325
+ CHAR_REF("LeftRightVector;", 0x294e),
326
+ CHAR_REF("LeftTee;", 0x22a3),
327
+ CHAR_REF("LeftTeeArrow;", 0x21a4),
328
+ CHAR_REF("LeftTeeVector;", 0x295a),
329
+ CHAR_REF("LeftTriangle;", 0x22b2),
330
+ CHAR_REF("LeftTriangleBar;", 0x29cf),
331
+ CHAR_REF("LeftTriangleEqual;", 0x22b4),
332
+ CHAR_REF("LeftUpDownVector;", 0x2951),
333
+ CHAR_REF("LeftUpTeeVector;", 0x2960),
334
+ CHAR_REF("LeftUpVector;", 0x21bf),
335
+ CHAR_REF("LeftUpVectorBar;", 0x2958),
336
+ CHAR_REF("LeftVector;", 0x21bc),
337
+ CHAR_REF("LeftVectorBar;", 0x2952),
338
+ CHAR_REF("Leftarrow;", 0x21d0),
339
+ CHAR_REF("Leftrightarrow;", 0x21d4),
340
+ CHAR_REF("LessEqualGreater;", 0x22da),
341
+ CHAR_REF("LessFullEqual;", 0x2266),
342
+ CHAR_REF("LessGreater;", 0x2276),
343
+ CHAR_REF("LessLess;", 0x2aa1),
344
+ CHAR_REF("LessSlantEqual;", 0x2a7d),
345
+ CHAR_REF("LessTilde;", 0x2272),
346
+ CHAR_REF("Lfr;", 0x0001d50f),
347
+ CHAR_REF("Ll;", 0x22d8),
348
+ CHAR_REF("Lleftarrow;", 0x21da),
349
+ CHAR_REF("Lmidot;", 0x013f),
350
+ CHAR_REF("LongLeftArrow;", 0x27f5),
351
+ CHAR_REF("LongLeftRightArrow;", 0x27f7),
352
+ CHAR_REF("LongRightArrow;", 0x27f6),
353
+ CHAR_REF("Longleftarrow;", 0x27f8),
354
+ CHAR_REF("Longleftrightarrow;", 0x27fa),
355
+ CHAR_REF("Longrightarrow;", 0x27f9),
356
+ CHAR_REF("Lopf;", 0x0001d543),
357
+ CHAR_REF("LowerLeftArrow;", 0x2199),
358
+ CHAR_REF("LowerRightArrow;", 0x2198),
359
+ CHAR_REF("Lscr;", 0x2112),
360
+ CHAR_REF("Lsh;", 0x21b0),
361
+ CHAR_REF("Lstrok;", 0x0141),
362
+ CHAR_REF("Lt;", 0x226a),
363
+ CHAR_REF("Map;", 0x2905),
364
+ CHAR_REF("Mcy;", 0x041c),
365
+ CHAR_REF("MediumSpace;", 0x205f),
366
+ CHAR_REF("Mellintrf;", 0x2133),
367
+ CHAR_REF("Mfr;", 0x0001d510),
368
+ CHAR_REF("MinusPlus;", 0x2213),
369
+ CHAR_REF("Mopf;", 0x0001d544),
370
+ CHAR_REF("Mscr;", 0x2133),
371
+ CHAR_REF("Mu;", 0x039c),
372
+ CHAR_REF("NJcy;", 0x040a),
373
+ CHAR_REF("Nacute;", 0x0143),
374
+ CHAR_REF("Ncaron;", 0x0147),
375
+ CHAR_REF("Ncedil;", 0x0145),
376
+ CHAR_REF("Ncy;", 0x041d),
377
+ CHAR_REF("NegativeMediumSpace;", 0x200b),
378
+ CHAR_REF("NegativeThickSpace;", 0x200b),
379
+ CHAR_REF("NegativeThinSpace;", 0x200b),
380
+ CHAR_REF("NegativeVeryThinSpace;", 0x200b),
381
+ CHAR_REF("NestedGreaterGreater;", 0x226b),
382
+ CHAR_REF("NestedLessLess;", 0x226a),
383
+ CHAR_REF("NewLine;", 0x0a),
384
+ CHAR_REF("Nfr;", 0x0001d511),
385
+ CHAR_REF("NoBreak;", 0x2060),
386
+ CHAR_REF("NonBreakingSpace;", 0xa0),
387
+ CHAR_REF("Nopf;", 0x2115),
388
+ CHAR_REF("Not;", 0x2aec),
389
+ CHAR_REF("NotCongruent;", 0x2262),
390
+ CHAR_REF("NotCupCap;", 0x226d),
391
+ CHAR_REF("NotDoubleVerticalBar;", 0x2226),
392
+ CHAR_REF("NotElement;", 0x2209),
393
+ CHAR_REF("NotEqual;", 0x2260),
394
+ MULTI_CHAR_REF("NotEqualTilde;", 0x2242, 0x0338),
395
+ CHAR_REF("NotExists;", 0x2204),
396
+ CHAR_REF("NotGreater;", 0x226f),
397
+ CHAR_REF("NotGreaterEqual;", 0x2271),
398
+ MULTI_CHAR_REF("NotGreaterFullEqual;", 0x2267, 0x0338),
399
+ MULTI_CHAR_REF("NotGreaterGreater;", 0x226b, 0x0338),
400
+ CHAR_REF("NotGreaterLess;", 0x2279),
401
+ MULTI_CHAR_REF("NotGreaterSlantEqual;", 0x2a7e, 0x0338),
402
+ CHAR_REF("NotGreaterTilde;", 0x2275),
403
+ MULTI_CHAR_REF("NotHumpDownHump;", 0x224e, 0x0338),
404
+ MULTI_CHAR_REF("NotHumpEqual;", 0x224f, 0x0338),
405
+ CHAR_REF("NotLeftTriangle;", 0x22ea),
406
+ MULTI_CHAR_REF("NotLeftTriangleBar;", 0x29cf, 0x0338),
407
+ CHAR_REF("NotLeftTriangleEqual;", 0x22ec),
408
+ CHAR_REF("NotLess;", 0x226e),
409
+ CHAR_REF("NotLessEqual;", 0x2270),
410
+ CHAR_REF("NotLessGreater;", 0x2278),
411
+ MULTI_CHAR_REF("NotLessLess;", 0x226a, 0x0338),
412
+ MULTI_CHAR_REF("NotLessSlantEqual;", 0x2a7d, 0x0338),
413
+ CHAR_REF("NotLessTilde;", 0x2274),
414
+ MULTI_CHAR_REF("NotNestedGreaterGreater;", 0x2aa2, 0x0338),
415
+ MULTI_CHAR_REF("NotNestedLessLess;", 0x2aa1, 0x0338),
416
+ CHAR_REF("NotPrecedes;", 0x2280),
417
+ MULTI_CHAR_REF("NotPrecedesEqual;", 0x2aaf, 0x0338),
418
+ CHAR_REF("NotPrecedesSlantEqual;", 0x22e0),
419
+ CHAR_REF("NotReverseElement;", 0x220c),
420
+ CHAR_REF("NotRightTriangle;", 0x22eb),
421
+ MULTI_CHAR_REF("NotRightTriangleBar;", 0x29d0, 0x0338),
422
+ CHAR_REF("NotRightTriangleEqual;", 0x22ed),
423
+ MULTI_CHAR_REF("NotSquareSubset;", 0x228f, 0x0338),
424
+ CHAR_REF("NotSquareSubsetEqual;", 0x22e2),
425
+ MULTI_CHAR_REF("NotSquareSuperset;", 0x2290, 0x0338),
426
+ CHAR_REF("NotSquareSupersetEqual;", 0x22e3),
427
+ MULTI_CHAR_REF("NotSubset;", 0x2282, 0x20d2),
428
+ CHAR_REF("NotSubsetEqual;", 0x2288),
429
+ CHAR_REF("NotSucceeds;", 0x2281),
430
+ MULTI_CHAR_REF("NotSucceedsEqual;", 0x2ab0, 0x0338),
431
+ CHAR_REF("NotSucceedsSlantEqual;", 0x22e1),
432
+ MULTI_CHAR_REF("NotSucceedsTilde;", 0x227f, 0x0338),
433
+ MULTI_CHAR_REF("NotSuperset;", 0x2283, 0x20d2),
434
+ CHAR_REF("NotSupersetEqual;", 0x2289),
435
+ CHAR_REF("NotTilde;", 0x2241),
436
+ CHAR_REF("NotTildeEqual;", 0x2244),
437
+ CHAR_REF("NotTildeFullEqual;", 0x2247),
438
+ CHAR_REF("NotTildeTilde;", 0x2249),
439
+ CHAR_REF("NotVerticalBar;", 0x2224),
440
+ CHAR_REF("Nscr;", 0x0001d4a9),
441
+ CHAR_REF("Ntilde;", 0xd1),
442
+ CHAR_REF("Ntilde", 0xd1),
443
+ CHAR_REF("Nu;", 0x039d),
444
+ CHAR_REF("OElig;", 0x0152),
445
+ CHAR_REF("Oacute;", 0xd3),
446
+ CHAR_REF("Oacute", 0xd3),
447
+ CHAR_REF("Ocirc;", 0xd4),
448
+ CHAR_REF("Ocirc", 0xd4),
449
+ CHAR_REF("Ocy;", 0x041e),
450
+ CHAR_REF("Odblac;", 0x0150),
451
+ CHAR_REF("Ofr;", 0x0001d512),
452
+ CHAR_REF("Ograve;", 0xd2),
453
+ CHAR_REF("Ograve", 0xd2),
454
+ CHAR_REF("Omacr;", 0x014c),
455
+ CHAR_REF("Omega;", 0x03a9),
456
+ CHAR_REF("Omicron;", 0x039f),
457
+ CHAR_REF("Oopf;", 0x0001d546),
458
+ CHAR_REF("OpenCurlyDoubleQuote;", 0x201c),
459
+ CHAR_REF("OpenCurlyQuote;", 0x2018),
460
+ CHAR_REF("Or;", 0x2a54),
461
+ CHAR_REF("Oscr;", 0x0001d4aa),
462
+ CHAR_REF("Oslash;", 0xd8),
463
+ CHAR_REF("Oslash", 0xd8),
464
+ CHAR_REF("Otilde;", 0xd5),
465
+ CHAR_REF("Otilde", 0xd5),
466
+ CHAR_REF("Otimes;", 0x2a37),
467
+ CHAR_REF("Ouml", 0xd6),
468
+ CHAR_REF("Ouml;", 0xd6),
469
+ CHAR_REF("OverBar;", 0x203e),
470
+ CHAR_REF("OverBrace;", 0x23de),
471
+ CHAR_REF("OverBracket;", 0x23b4),
472
+ CHAR_REF("OverParenthesis;", 0x23dc),
473
+ CHAR_REF("PartialD;", 0x2202),
474
+ CHAR_REF("Pcy;", 0x041f),
475
+ CHAR_REF("Pfr;", 0x0001d513),
476
+ CHAR_REF("Phi;", 0x03a6),
477
+ CHAR_REF("Pi;", 0x03a0),
478
+ CHAR_REF("PlusMinus;", 0xb1),
479
+ CHAR_REF("Poincareplane;", 0x210c),
480
+ CHAR_REF("Popf;", 0x2119),
481
+ CHAR_REF("Pr;", 0x2abb),
482
+ CHAR_REF("Precedes;", 0x227a),
483
+ CHAR_REF("PrecedesEqual;", 0x2aaf),
484
+ CHAR_REF("PrecedesSlantEqual;", 0x227c),
485
+ CHAR_REF("PrecedesTilde;", 0x227e),
486
+ CHAR_REF("Prime;", 0x2033),
487
+ CHAR_REF("Product;", 0x220f),
488
+ CHAR_REF("Proportion;", 0x2237),
489
+ CHAR_REF("Proportional;", 0x221d),
490
+ CHAR_REF("Pscr;", 0x0001d4ab),
491
+ CHAR_REF("Psi;", 0x03a8),
492
+ CHAR_REF("QUOT;", 0x22),
493
+ CHAR_REF("QUOT", 0x22),
494
+ CHAR_REF("Qfr;", 0x0001d514),
495
+ CHAR_REF("Qopf;", 0x211a),
496
+ CHAR_REF("Qscr;", 0x0001d4ac),
497
+ CHAR_REF("RBarr;", 0x2910),
498
+ CHAR_REF("REG;", 0xae),
499
+ CHAR_REF("REG", 0xae),
500
+ CHAR_REF("Racute;", 0x0154),
501
+ CHAR_REF("Rang;", 0x27eb),
502
+ CHAR_REF("Rarr;", 0x21a0),
503
+ CHAR_REF("Rarrtl;", 0x2916),
504
+ CHAR_REF("Rcaron;", 0x0158),
505
+ CHAR_REF("Rcedil;", 0x0156),
506
+ CHAR_REF("Rcy;", 0x0420),
507
+ CHAR_REF("Re;", 0x211c),
508
+ CHAR_REF("ReverseElement;", 0x220b),
509
+ CHAR_REF("ReverseEquilibrium;", 0x21cb),
510
+ CHAR_REF("ReverseUpEquilibrium;", 0x296f),
511
+ CHAR_REF("Rfr;", 0x211c),
512
+ CHAR_REF("Rho;", 0x03a1),
513
+ CHAR_REF("RightAngleBracket;", 0x27e9),
514
+ CHAR_REF("RightArrow;", 0x2192),
515
+ CHAR_REF("RightArrowBar;", 0x21e5),
516
+ CHAR_REF("RightArrowLeftArrow;", 0x21c4),
517
+ CHAR_REF("RightCeiling;", 0x2309),
518
+ CHAR_REF("RightDoubleBracket;", 0x27e7),
519
+ CHAR_REF("RightDownTeeVector;", 0x295d),
520
+ CHAR_REF("RightDownVector;", 0x21c2),
521
+ CHAR_REF("RightDownVectorBar;", 0x2955),
522
+ CHAR_REF("RightFloor;", 0x230b),
523
+ CHAR_REF("RightTee;", 0x22a2),
524
+ CHAR_REF("RightTeeArrow;", 0x21a6),
525
+ CHAR_REF("RightTeeVector;", 0x295b),
526
+ CHAR_REF("RightTriangle;", 0x22b3),
527
+ CHAR_REF("RightTriangleBar;", 0x29d0),
528
+ CHAR_REF("RightTriangleEqual;", 0x22b5),
529
+ CHAR_REF("RightUpDownVector;", 0x294f),
530
+ CHAR_REF("RightUpTeeVector;", 0x295c),
531
+ CHAR_REF("RightUpVector;", 0x21be),
532
+ CHAR_REF("RightUpVectorBar;", 0x2954),
533
+ CHAR_REF("RightVector;", 0x21c0),
534
+ CHAR_REF("RightVectorBar;", 0x2953),
535
+ CHAR_REF("Rightarrow;", 0x21d2),
536
+ CHAR_REF("Ropf;", 0x211d),
537
+ CHAR_REF("RoundImplies;", 0x2970),
538
+ CHAR_REF("Rrightarrow;", 0x21db),
539
+ CHAR_REF("Rscr;", 0x211b),
540
+ CHAR_REF("Rsh;", 0x21b1),
541
+ CHAR_REF("RuleDelayed;", 0x29f4),
542
+ CHAR_REF("SHCHcy;", 0x0429),
543
+ CHAR_REF("SHcy;", 0x0428),
544
+ CHAR_REF("SOFTcy;", 0x042c),
545
+ CHAR_REF("Sacute;", 0x015a),
546
+ CHAR_REF("Sc;", 0x2abc),
547
+ CHAR_REF("Scaron;", 0x0160),
548
+ CHAR_REF("Scedil;", 0x015e),
549
+ CHAR_REF("Scirc;", 0x015c),
550
+ CHAR_REF("Scy;", 0x0421),
551
+ CHAR_REF("Sfr;", 0x0001d516),
552
+ CHAR_REF("ShortDownArrow;", 0x2193),
553
+ CHAR_REF("ShortLeftArrow;", 0x2190),
554
+ CHAR_REF("ShortRightArrow;", 0x2192),
555
+ CHAR_REF("ShortUpArrow;", 0x2191),
556
+ CHAR_REF("Sigma;", 0x03a3),
557
+ CHAR_REF("SmallCircle;", 0x2218),
558
+ CHAR_REF("Sopf;", 0x0001d54a),
559
+ CHAR_REF("Sqrt;", 0x221a),
560
+ CHAR_REF("Square;", 0x25a1),
561
+ CHAR_REF("SquareIntersection;", 0x2293),
562
+ CHAR_REF("SquareSubset;", 0x228f),
563
+ CHAR_REF("SquareSubsetEqual;", 0x2291),
564
+ CHAR_REF("SquareSuperset;", 0x2290),
565
+ CHAR_REF("SquareSupersetEqual;", 0x2292),
566
+ CHAR_REF("SquareUnion;", 0x2294),
567
+ CHAR_REF("Sscr;", 0x0001d4ae),
568
+ CHAR_REF("Star;", 0x22c6),
569
+ CHAR_REF("Sub;", 0x22d0),
570
+ CHAR_REF("Subset;", 0x22d0),
571
+ CHAR_REF("SubsetEqual;", 0x2286),
572
+ CHAR_REF("Succeeds;", 0x227b),
573
+ CHAR_REF("SucceedsEqual;", 0x2ab0),
574
+ CHAR_REF("SucceedsSlantEqual;", 0x227d),
575
+ CHAR_REF("SucceedsTilde;", 0x227f),
576
+ CHAR_REF("SuchThat;", 0x220b),
577
+ CHAR_REF("Sum;", 0x2211),
578
+ CHAR_REF("Sup;", 0x22d1),
579
+ CHAR_REF("Superset;", 0x2283),
580
+ CHAR_REF("SupersetEqual;", 0x2287),
581
+ CHAR_REF("Supset;", 0x22d1),
582
+ CHAR_REF("THORN;", 0xde),
583
+ CHAR_REF("THORN", 0xde),
584
+ CHAR_REF("TRADE;", 0x2122),
585
+ CHAR_REF("TSHcy;", 0x040b),
586
+ CHAR_REF("TScy;", 0x0426),
587
+ CHAR_REF("Tab;", 0x09),
588
+ CHAR_REF("Tau;", 0x03a4),
589
+ CHAR_REF("Tcaron;", 0x0164),
590
+ CHAR_REF("Tcedil;", 0x0162),
591
+ CHAR_REF("Tcy;", 0x0422),
592
+ CHAR_REF("Tfr;", 0x0001d517),
593
+ CHAR_REF("Therefore;", 0x2234),
594
+ CHAR_REF("Theta;", 0x0398),
595
+ MULTI_CHAR_REF("ThickSpace;", 0x205f, 0x200a),
596
+ CHAR_REF("ThinSpace;", 0x2009),
597
+ CHAR_REF("Tilde;", 0x223c),
598
+ CHAR_REF("TildeEqual;", 0x2243),
599
+ CHAR_REF("TildeFullEqual;", 0x2245),
600
+ CHAR_REF("TildeTilde;", 0x2248),
601
+ CHAR_REF("Topf;", 0x0001d54b),
602
+ CHAR_REF("TripleDot;", 0x20db),
603
+ CHAR_REF("Tscr;", 0x0001d4af),
604
+ CHAR_REF("Tstrok;", 0x0166),
605
+ CHAR_REF("Uacute;", 0xda),
606
+ CHAR_REF("Uacute", 0xda),
607
+ CHAR_REF("Uarr;", 0x219f),
608
+ CHAR_REF("Uarrocir;", 0x2949),
609
+ CHAR_REF("Ubrcy;", 0x040e),
610
+ CHAR_REF("Ubreve;", 0x016c),
611
+ CHAR_REF("Ucirc;", 0xdb),
612
+ CHAR_REF("Ucirc", 0xdb),
613
+ CHAR_REF("Ucy;", 0x0423),
614
+ CHAR_REF("Udblac;", 0x0170),
615
+ CHAR_REF("Ufr;", 0x0001d518),
616
+ CHAR_REF("Ugrave;", 0xd9),
617
+ CHAR_REF("Ugrave", 0xd9),
618
+ CHAR_REF("Umacr;", 0x016a),
619
+ CHAR_REF("UnderBar;", 0x5f),
620
+ CHAR_REF("UnderBrace;", 0x23df),
621
+ CHAR_REF("UnderBracket;", 0x23b5),
622
+ CHAR_REF("UnderParenthesis;", 0x23dd),
623
+ CHAR_REF("Union;", 0x22c3),
624
+ CHAR_REF("UnionPlus;", 0x228e),
625
+ CHAR_REF("Uogon;", 0x0172),
626
+ CHAR_REF("Uopf;", 0x0001d54c),
627
+ CHAR_REF("UpArrow;", 0x2191),
628
+ CHAR_REF("UpArrowBar;", 0x2912),
629
+ CHAR_REF("UpArrowDownArrow;", 0x21c5),
630
+ CHAR_REF("UpDownArrow;", 0x2195),
631
+ CHAR_REF("UpEquilibrium;", 0x296e),
632
+ CHAR_REF("UpTee;", 0x22a5),
633
+ CHAR_REF("UpTeeArrow;", 0x21a5),
634
+ CHAR_REF("Uparrow;", 0x21d1),
635
+ CHAR_REF("Updownarrow;", 0x21d5),
636
+ CHAR_REF("UpperLeftArrow;", 0x2196),
637
+ CHAR_REF("UpperRightArrow;", 0x2197),
638
+ CHAR_REF("Upsi;", 0x03d2),
639
+ CHAR_REF("Upsilon;", 0x03a5),
640
+ CHAR_REF("Uring;", 0x016e),
641
+ CHAR_REF("Uscr;", 0x0001d4b0),
642
+ CHAR_REF("Utilde;", 0x0168),
643
+ CHAR_REF("Uuml;", 0xdc),
644
+ CHAR_REF("Uuml", 0xdc),
645
+ CHAR_REF("VDash;", 0x22ab),
646
+ CHAR_REF("Vbar;", 0x2aeb),
647
+ CHAR_REF("Vcy;", 0x0412),
648
+ CHAR_REF("Vdash;", 0x22a9),
649
+ CHAR_REF("Vdashl;", 0x2ae6),
650
+ CHAR_REF("Vee;", 0x22c1),
651
+ CHAR_REF("Verbar;", 0x2016),
652
+ CHAR_REF("Vert;", 0x2016),
653
+ CHAR_REF("VerticalBar;", 0x2223),
654
+ CHAR_REF("VerticalLine;", 0x7c),
655
+ CHAR_REF("VerticalSeparator;", 0x2758),
656
+ CHAR_REF("VerticalTilde;", 0x2240),
657
+ CHAR_REF("VeryThinSpace;", 0x200a),
658
+ CHAR_REF("Vfr;", 0x0001d519),
659
+ CHAR_REF("Vopf;", 0x0001d54d),
660
+ CHAR_REF("Vscr;", 0x0001d4b1),
661
+ CHAR_REF("Vvdash;", 0x22aa),
662
+ CHAR_REF("Wcirc;", 0x0174),
663
+ CHAR_REF("Wedge;", 0x22c0),
664
+ CHAR_REF("Wfr;", 0x0001d51a),
665
+ CHAR_REF("Wopf;", 0x0001d54e),
666
+ CHAR_REF("Wscr;", 0x0001d4b2),
667
+ CHAR_REF("Xfr;", 0x0001d51b),
668
+ CHAR_REF("Xi;", 0x039e),
669
+ CHAR_REF("Xopf;", 0x0001d54f),
670
+ CHAR_REF("Xscr;", 0x0001d4b3),
671
+ CHAR_REF("YAcy;", 0x042f),
672
+ CHAR_REF("YIcy;", 0x0407),
673
+ CHAR_REF("YUcy;", 0x042e),
674
+ CHAR_REF("Yacute", 0xdd),
675
+ CHAR_REF("Yacute;", 0xdd),
676
+ CHAR_REF("Ycirc;", 0x0176),
677
+ CHAR_REF("Ycy;", 0x042b),
678
+ CHAR_REF("Yfr;", 0x0001d51c),
679
+ CHAR_REF("Yopf;", 0x0001d550),
680
+ CHAR_REF("Yscr;", 0x0001d4b4),
681
+ CHAR_REF("Yuml;", 0x0178),
682
+ CHAR_REF("ZHcy;", 0x0416),
683
+ CHAR_REF("Zacute;", 0x0179),
684
+ CHAR_REF("Zcaron;", 0x017d),
685
+ CHAR_REF("Zcy;", 0x0417),
686
+ CHAR_REF("Zdot;", 0x017b),
687
+ CHAR_REF("ZeroWidthSpace;", 0x200b),
688
+ CHAR_REF("Zeta;", 0x0396),
689
+ CHAR_REF("Zfr;", 0x2128),
690
+ CHAR_REF("Zopf;", 0x2124),
691
+ CHAR_REF("Zscr;", 0x0001d4b5),
692
+ CHAR_REF("aacute;", 0xe1),
693
+ CHAR_REF("aacute", 0xe1),
694
+ CHAR_REF("abreve;", 0x0103),
695
+ CHAR_REF("ac;", 0x223e),
696
+ MULTI_CHAR_REF("acE;", 0x223e, 0x0333),
697
+ CHAR_REF("acd;", 0x223f),
698
+ CHAR_REF("acirc;", 0xe2),
699
+ CHAR_REF("acirc", 0xe2),
700
+ CHAR_REF("acute;", 0xb4),
701
+ CHAR_REF("acute", 0xb4),
702
+ CHAR_REF("acy;", 0x0430),
703
+ CHAR_REF("aelig;", 0xe6),
704
+ CHAR_REF("aelig", 0xe6),
705
+ CHAR_REF("af;", 0x2061),
706
+ CHAR_REF("afr;", 0x0001d51e),
707
+ CHAR_REF("agrave;", 0xe0),
708
+ CHAR_REF("agrave", 0xe0),
709
+ CHAR_REF("alefsym;", 0x2135),
710
+ CHAR_REF("aleph;", 0x2135),
711
+ CHAR_REF("alpha;", 0x03b1),
712
+ CHAR_REF("amacr;", 0x0101),
713
+ CHAR_REF("amalg;", 0x2a3f),
714
+ CHAR_REF("amp;", 0x26),
715
+ CHAR_REF("amp", 0x26),
716
+ CHAR_REF("and;", 0x2227),
717
+ CHAR_REF("andand;", 0x2a55),
718
+ CHAR_REF("andd;", 0x2a5c),
719
+ CHAR_REF("andslope;", 0x2a58),
720
+ CHAR_REF("andv;", 0x2a5a),
721
+ CHAR_REF("ang;", 0x2220),
722
+ CHAR_REF("ange;", 0x29a4),
723
+ CHAR_REF("angle;", 0x2220),
724
+ CHAR_REF("angmsd;", 0x2221),
725
+ CHAR_REF("angmsdaa;", 0x29a8),
726
+ CHAR_REF("angmsdab;", 0x29a9),
727
+ CHAR_REF("angmsdac;", 0x29aa),
728
+ CHAR_REF("angmsdad;", 0x29ab),
729
+ CHAR_REF("angmsdae;", 0x29ac),
730
+ CHAR_REF("angmsdaf;", 0x29ad),
731
+ CHAR_REF("angmsdag;", 0x29ae),
732
+ CHAR_REF("angmsdah;", 0x29af),
733
+ CHAR_REF("angrt;", 0x221f),
734
+ CHAR_REF("angrtvb;", 0x22be),
735
+ CHAR_REF("angrtvbd;", 0x299d),
736
+ CHAR_REF("angsph;", 0x2222),
737
+ CHAR_REF("angst;", 0xc5),
738
+ CHAR_REF("angzarr;", 0x237c),
739
+ CHAR_REF("aogon;", 0x0105),
740
+ CHAR_REF("aopf;", 0x0001d552),
741
+ CHAR_REF("ap;", 0x2248),
742
+ CHAR_REF("apE;", 0x2a70),
743
+ CHAR_REF("apacir;", 0x2a6f),
744
+ CHAR_REF("ape;", 0x224a),
745
+ CHAR_REF("apid;", 0x224b),
746
+ CHAR_REF("apos;", 0x27),
747
+ CHAR_REF("approx;", 0x2248),
748
+ CHAR_REF("approxeq;", 0x224a),
749
+ CHAR_REF("aring;", 0xe5),
750
+ CHAR_REF("aring", 0xe5),
751
+ CHAR_REF("ascr;", 0x0001d4b6),
752
+ CHAR_REF("ast;", 0x2a),
753
+ CHAR_REF("asymp;", 0x2248),
754
+ CHAR_REF("asympeq;", 0x224d),
755
+ CHAR_REF("atilde;", 0xe3),
756
+ CHAR_REF("atilde", 0xe3),
757
+ CHAR_REF("auml;", 0xe4),
758
+ CHAR_REF("auml", 0xe4),
759
+ CHAR_REF("awconint;", 0x2233),
760
+ CHAR_REF("awint;", 0x2a11),
761
+ CHAR_REF("bNot;", 0x2aed),
762
+ CHAR_REF("backcong;", 0x224c),
763
+ CHAR_REF("backepsilon;", 0x03f6),
764
+ CHAR_REF("backprime;", 0x2035),
765
+ CHAR_REF("backsim;", 0x223d),
766
+ CHAR_REF("backsimeq;", 0x22cd),
767
+ CHAR_REF("barvee;", 0x22bd),
768
+ CHAR_REF("barwed;", 0x2305),
769
+ CHAR_REF("barwedge;", 0x2305),
770
+ CHAR_REF("bbrk;", 0x23b5),
771
+ CHAR_REF("bbrktbrk;", 0x23b6),
772
+ CHAR_REF("bcong;", 0x224c),
773
+ CHAR_REF("bcy;", 0x0431),
774
+ CHAR_REF("bdquo;", 0x201e),
775
+ CHAR_REF("becaus;", 0x2235),
776
+ CHAR_REF("because;", 0x2235),
777
+ CHAR_REF("bemptyv;", 0x29b0),
778
+ CHAR_REF("bepsi;", 0x03f6),
779
+ CHAR_REF("bernou;", 0x212c),
780
+ CHAR_REF("beta;", 0x03b2),
781
+ CHAR_REF("beth;", 0x2136),
782
+ CHAR_REF("between;", 0x226c),
783
+ CHAR_REF("bfr;", 0x0001d51f),
784
+ CHAR_REF("bigcap;", 0x22c2),
785
+ CHAR_REF("bigcirc;", 0x25ef),
786
+ CHAR_REF("bigcup;", 0x22c3),
787
+ CHAR_REF("bigodot;", 0x2a00),
788
+ CHAR_REF("bigoplus;", 0x2a01),
789
+ CHAR_REF("bigotimes;", 0x2a02),
790
+ CHAR_REF("bigsqcup;", 0x2a06),
791
+ CHAR_REF("bigstar;", 0x2605),
792
+ CHAR_REF("bigtriangledown;", 0x25bd),
793
+ CHAR_REF("bigtriangleup;", 0x25b3),
794
+ CHAR_REF("biguplus;", 0x2a04),
795
+ CHAR_REF("bigvee;", 0x22c1),
796
+ CHAR_REF("bigwedge;", 0x22c0),
797
+ CHAR_REF("bkarow;", 0x290d),
798
+ CHAR_REF("blacklozenge;", 0x29eb),
799
+ CHAR_REF("blacksquare;", 0x25aa),
800
+ CHAR_REF("blacktriangle;", 0x25b4),
801
+ CHAR_REF("blacktriangledown;", 0x25be),
802
+ CHAR_REF("blacktriangleleft;", 0x25c2),
803
+ CHAR_REF("blacktriangleright;", 0x25b8),
804
+ CHAR_REF("blank;", 0x2423),
805
+ CHAR_REF("blk12;", 0x2592),
806
+ CHAR_REF("blk14;", 0x2591),
807
+ CHAR_REF("blk34;", 0x2593),
808
+ CHAR_REF("block;", 0x2588),
809
+ MULTI_CHAR_REF("bne;", 0x3d, 0x20e5),
810
+ MULTI_CHAR_REF("bnequiv;", 0x2261, 0x20e5),
811
+ CHAR_REF("bnot;", 0x2310),
812
+ CHAR_REF("bopf;", 0x0001d553),
813
+ CHAR_REF("bot;", 0x22a5),
814
+ CHAR_REF("bottom;", 0x22a5),
815
+ CHAR_REF("bowtie;", 0x22c8),
816
+ CHAR_REF("boxDL;", 0x2557),
817
+ CHAR_REF("boxDR;", 0x2554),
818
+ CHAR_REF("boxDl;", 0x2556),
819
+ CHAR_REF("boxDr;", 0x2553),
820
+ CHAR_REF("boxH;", 0x2550),
821
+ CHAR_REF("boxHD;", 0x2566),
822
+ CHAR_REF("boxHU;", 0x2569),
823
+ CHAR_REF("boxHd;", 0x2564),
824
+ CHAR_REF("boxHu;", 0x2567),
825
+ CHAR_REF("boxUL;", 0x255d),
826
+ CHAR_REF("boxUR;", 0x255a),
827
+ CHAR_REF("boxUl;", 0x255c),
828
+ CHAR_REF("boxUr;", 0x2559),
829
+ CHAR_REF("boxV;", 0x2551),
830
+ CHAR_REF("boxVH;", 0x256c),
831
+ CHAR_REF("boxVL;", 0x2563),
832
+ CHAR_REF("boxVR;", 0x2560),
833
+ CHAR_REF("boxVh;", 0x256b),
834
+ CHAR_REF("boxVl;", 0x2562),
835
+ CHAR_REF("boxVr;", 0x255f),
836
+ CHAR_REF("boxbox;", 0x29c9),
837
+ CHAR_REF("boxdL;", 0x2555),
838
+ CHAR_REF("boxdR;", 0x2552),
839
+ CHAR_REF("boxdl;", 0x2510),
840
+ CHAR_REF("boxdr;", 0x250c),
841
+ CHAR_REF("boxh;", 0x2500),
842
+ CHAR_REF("boxhD;", 0x2565),
843
+ CHAR_REF("boxhU;", 0x2568),
844
+ CHAR_REF("boxhd;", 0x252c),
845
+ CHAR_REF("boxhu;", 0x2534),
846
+ CHAR_REF("boxminus;", 0x229f),
847
+ CHAR_REF("boxplus;", 0x229e),
848
+ CHAR_REF("boxtimes;", 0x22a0),
849
+ CHAR_REF("boxuL;", 0x255b),
850
+ CHAR_REF("boxuR;", 0x2558),
851
+ CHAR_REF("boxul;", 0x2518),
852
+ CHAR_REF("boxur;", 0x2514),
853
+ CHAR_REF("boxv;", 0x2502),
854
+ CHAR_REF("boxvH;", 0x256a),
855
+ CHAR_REF("boxvL;", 0x2561),
856
+ CHAR_REF("boxvR;", 0x255e),
857
+ CHAR_REF("boxvh;", 0x253c),
858
+ CHAR_REF("boxvl;", 0x2524),
859
+ CHAR_REF("boxvr;", 0x251c),
860
+ CHAR_REF("bprime;", 0x2035),
861
+ CHAR_REF("breve;", 0x02d8),
862
+ CHAR_REF("brvbar;", 0xa6),
863
+ CHAR_REF("brvbar", 0xa6),
864
+ CHAR_REF("bscr;", 0x0001d4b7),
865
+ CHAR_REF("bsemi;", 0x204f),
866
+ CHAR_REF("bsim;", 0x223d),
867
+ CHAR_REF("bsime;", 0x22cd),
868
+ CHAR_REF("bsol;", 0x5c),
869
+ CHAR_REF("bsolb;", 0x29c5),
870
+ CHAR_REF("bsolhsub;", 0x27c8),
871
+ CHAR_REF("bull;", 0x2022),
872
+ CHAR_REF("bullet;", 0x2022),
873
+ CHAR_REF("bump;", 0x224e),
874
+ CHAR_REF("bumpE;", 0x2aae),
875
+ CHAR_REF("bumpe;", 0x224f),
876
+ CHAR_REF("bumpeq;", 0x224f),
877
+ CHAR_REF("cacute;", 0x0107),
878
+ CHAR_REF("cap;", 0x2229),
879
+ CHAR_REF("capand;", 0x2a44),
880
+ CHAR_REF("capbrcup;", 0x2a49),
881
+ CHAR_REF("capcap;", 0x2a4b),
882
+ CHAR_REF("capcup;", 0x2a47),
883
+ CHAR_REF("capdot;", 0x2a40),
884
+ MULTI_CHAR_REF("caps;", 0x2229, 0xfe00),
885
+ CHAR_REF("caret;", 0x2041),
886
+ CHAR_REF("caron;", 0x02c7),
887
+ CHAR_REF("ccaps;", 0x2a4d),
888
+ CHAR_REF("ccaron;", 0x010d),
889
+ CHAR_REF("ccedil;", 0xe7),
890
+ CHAR_REF("ccedil", 0xe7),
891
+ CHAR_REF("ccirc;", 0x0109),
892
+ CHAR_REF("ccups;", 0x2a4c),
893
+ CHAR_REF("ccupssm;", 0x2a50),
894
+ CHAR_REF("cdot;", 0x010b),
895
+ CHAR_REF("cedil;", 0xb8),
896
+ CHAR_REF("cedil", 0xb8),
897
+ CHAR_REF("cemptyv;", 0x29b2),
898
+ CHAR_REF("cent;", 0xa2),
899
+ CHAR_REF("cent", 0xa2),
900
+ CHAR_REF("centerdot;", 0xb7),
901
+ CHAR_REF("cfr;", 0x0001d520),
902
+ CHAR_REF("chcy;", 0x0447),
903
+ CHAR_REF("check;", 0x2713),
904
+ CHAR_REF("checkmark;", 0x2713),
905
+ CHAR_REF("chi;", 0x03c7),
906
+ CHAR_REF("cir;", 0x25cb),
907
+ CHAR_REF("cirE;", 0x29c3),
908
+ CHAR_REF("circ;", 0x02c6),
909
+ CHAR_REF("circeq;", 0x2257),
910
+ CHAR_REF("circlearrowleft;", 0x21ba),
911
+ CHAR_REF("circlearrowright;", 0x21bb),
912
+ CHAR_REF("circledR;", 0xae),
913
+ CHAR_REF("circledS;", 0x24c8),
914
+ CHAR_REF("circledast;", 0x229b),
915
+ CHAR_REF("circledcirc;", 0x229a),
916
+ CHAR_REF("circleddash;", 0x229d),
917
+ CHAR_REF("cire;", 0x2257),
918
+ CHAR_REF("cirfnint;", 0x2a10),
919
+ CHAR_REF("cirmid;", 0x2aef),
920
+ CHAR_REF("cirscir;", 0x29c2),
921
+ CHAR_REF("clubs;", 0x2663),
922
+ CHAR_REF("clubsuit;", 0x2663),
923
+ CHAR_REF("colon;", 0x3a),
924
+ CHAR_REF("colone;", 0x2254),
925
+ CHAR_REF("coloneq;", 0x2254),
926
+ CHAR_REF("comma;", 0x2c),
927
+ CHAR_REF("commat;", 0x40),
928
+ CHAR_REF("comp;", 0x2201),
929
+ CHAR_REF("compfn;", 0x2218),
930
+ CHAR_REF("complement;", 0x2201),
931
+ CHAR_REF("complexes;", 0x2102),
932
+ CHAR_REF("cong;", 0x2245),
933
+ CHAR_REF("congdot;", 0x2a6d),
934
+ CHAR_REF("conint;", 0x222e),
935
+ CHAR_REF("copf;", 0x0001d554),
936
+ CHAR_REF("coprod;", 0x2210),
937
+ CHAR_REF("copy;", 0xa9),
938
+ CHAR_REF("copy", 0xa9),
939
+ CHAR_REF("copysr;", 0x2117),
940
+ CHAR_REF("crarr;", 0x21b5),
941
+ CHAR_REF("cross;", 0x2717),
942
+ CHAR_REF("cscr;", 0x0001d4b8),
943
+ CHAR_REF("csub;", 0x2acf),
944
+ CHAR_REF("csube;", 0x2ad1),
945
+ CHAR_REF("csup;", 0x2ad0),
946
+ CHAR_REF("csupe;", 0x2ad2),
947
+ CHAR_REF("ctdot;", 0x22ef),
948
+ CHAR_REF("cudarrl;", 0x2938),
949
+ CHAR_REF("cudarrr;", 0x2935),
950
+ CHAR_REF("cuepr;", 0x22de),
951
+ CHAR_REF("cuesc;", 0x22df),
952
+ CHAR_REF("cularr;", 0x21b6),
953
+ CHAR_REF("cularrp;", 0x293d),
954
+ CHAR_REF("cup;", 0x222a),
955
+ CHAR_REF("cupbrcap;", 0x2a48),
956
+ CHAR_REF("cupcap;", 0x2a46),
957
+ CHAR_REF("cupcup;", 0x2a4a),
958
+ CHAR_REF("cupdot;", 0x228d),
959
+ CHAR_REF("cupor;", 0x2a45),
960
+ MULTI_CHAR_REF("cups;", 0x222a, 0xfe00),
961
+ CHAR_REF("curarr;", 0x21b7),
962
+ CHAR_REF("curarrm;", 0x293c),
963
+ CHAR_REF("curlyeqprec;", 0x22de),
964
+ CHAR_REF("curlyeqsucc;", 0x22df),
965
+ CHAR_REF("curlyvee;", 0x22ce),
966
+ CHAR_REF("curlywedge;", 0x22cf),
967
+ CHAR_REF("curren;", 0xa4),
968
+ CHAR_REF("curren", 0xa4),
969
+ CHAR_REF("curvearrowleft;", 0x21b6),
970
+ CHAR_REF("curvearrowright;", 0x21b7),
971
+ CHAR_REF("cuvee;", 0x22ce),
972
+ CHAR_REF("cuwed;", 0x22cf),
973
+ CHAR_REF("cwconint;", 0x2232),
974
+ CHAR_REF("cwint;", 0x2231),
975
+ CHAR_REF("cylcty;", 0x232d),
976
+ CHAR_REF("dArr;", 0x21d3),
977
+ CHAR_REF("dHar;", 0x2965),
978
+ CHAR_REF("dagger;", 0x2020),
979
+ CHAR_REF("daleth;", 0x2138),
980
+ CHAR_REF("darr;", 0x2193),
981
+ CHAR_REF("dash;", 0x2010),
982
+ CHAR_REF("dashv;", 0x22a3),
983
+ CHAR_REF("dbkarow;", 0x290f),
984
+ CHAR_REF("dblac;", 0x02dd),
985
+ CHAR_REF("dcaron;", 0x010f),
986
+ CHAR_REF("dcy;", 0x0434),
987
+ CHAR_REF("dd;", 0x2146),
988
+ CHAR_REF("ddagger;", 0x2021),
989
+ CHAR_REF("ddarr;", 0x21ca),
990
+ CHAR_REF("ddotseq;", 0x2a77),
991
+ CHAR_REF("deg;", 0xb0),
992
+ CHAR_REF("deg", 0xb0),
993
+ CHAR_REF("delta;", 0x03b4),
994
+ CHAR_REF("demptyv;", 0x29b1),
995
+ CHAR_REF("dfisht;", 0x297f),
996
+ CHAR_REF("dfr;", 0x0001d521),
997
+ CHAR_REF("dharl;", 0x21c3),
998
+ CHAR_REF("dharr;", 0x21c2),
999
+ CHAR_REF("diam;", 0x22c4),
1000
+ CHAR_REF("diamond;", 0x22c4),
1001
+ CHAR_REF("diamondsuit;", 0x2666),
1002
+ CHAR_REF("diams;", 0x2666),
1003
+ CHAR_REF("die;", 0xa8),
1004
+ CHAR_REF("digamma;", 0x03dd),
1005
+ CHAR_REF("disin;", 0x22f2),
1006
+ CHAR_REF("div;", 0xf7),
1007
+ CHAR_REF("divide;", 0xf7),
1008
+ CHAR_REF("divide", 0xf7),
1009
+ CHAR_REF("divideontimes;", 0x22c7),
1010
+ CHAR_REF("divonx;", 0x22c7),
1011
+ CHAR_REF("djcy;", 0x0452),
1012
+ CHAR_REF("dlcorn;", 0x231e),
1013
+ CHAR_REF("dlcrop;", 0x230d),
1014
+ CHAR_REF("dollar;", 0x24),
1015
+ CHAR_REF("dopf;", 0x0001d555),
1016
+ CHAR_REF("dot;", 0x02d9),
1017
+ CHAR_REF("doteq;", 0x2250),
1018
+ CHAR_REF("doteqdot;", 0x2251),
1019
+ CHAR_REF("dotminus;", 0x2238),
1020
+ CHAR_REF("dotplus;", 0x2214),
1021
+ CHAR_REF("dotsquare;", 0x22a1),
1022
+ CHAR_REF("doublebarwedge;", 0x2306),
1023
+ CHAR_REF("downarrow;", 0x2193),
1024
+ CHAR_REF("downdownarrows;", 0x21ca),
1025
+ CHAR_REF("downharpoonleft;", 0x21c3),
1026
+ CHAR_REF("downharpoonright;", 0x21c2),
1027
+ CHAR_REF("drbkarow;", 0x2910),
1028
+ CHAR_REF("drcorn;", 0x231f),
1029
+ CHAR_REF("drcrop;", 0x230c),
1030
+ CHAR_REF("dscr;", 0x0001d4b9),
1031
+ CHAR_REF("dscy;", 0x0455),
1032
+ CHAR_REF("dsol;", 0x29f6),
1033
+ CHAR_REF("dstrok;", 0x0111),
1034
+ CHAR_REF("dtdot;", 0x22f1),
1035
+ CHAR_REF("dtri;", 0x25bf),
1036
+ CHAR_REF("dtrif;", 0x25be),
1037
+ CHAR_REF("duarr;", 0x21f5),
1038
+ CHAR_REF("duhar;", 0x296f),
1039
+ CHAR_REF("dwangle;", 0x29a6),
1040
+ CHAR_REF("dzcy;", 0x045f),
1041
+ CHAR_REF("dzigrarr;", 0x27ff),
1042
+ CHAR_REF("eDDot;", 0x2a77),
1043
+ CHAR_REF("eDot;", 0x2251),
1044
+ CHAR_REF("eacute;", 0xe9),
1045
+ CHAR_REF("eacute", 0xe9),
1046
+ CHAR_REF("easter;", 0x2a6e),
1047
+ CHAR_REF("ecaron;", 0x011b),
1048
+ CHAR_REF("ecir;", 0x2256),
1049
+ CHAR_REF("ecirc;", 0xea),
1050
+ CHAR_REF("ecirc", 0xea),
1051
+ CHAR_REF("ecolon;", 0x2255),
1052
+ CHAR_REF("ecy;", 0x044d),
1053
+ CHAR_REF("edot;", 0x0117),
1054
+ CHAR_REF("ee;", 0x2147),
1055
+ CHAR_REF("efDot;", 0x2252),
1056
+ CHAR_REF("efr;", 0x0001d522),
1057
+ CHAR_REF("eg;", 0x2a9a),
1058
+ CHAR_REF("egrave;", 0xe8),
1059
+ CHAR_REF("egrave", 0xe8),
1060
+ CHAR_REF("egs;", 0x2a96),
1061
+ CHAR_REF("egsdot;", 0x2a98),
1062
+ CHAR_REF("el;", 0x2a99),
1063
+ CHAR_REF("elinters;", 0x23e7),
1064
+ CHAR_REF("ell;", 0x2113),
1065
+ CHAR_REF("els;", 0x2a95),
1066
+ CHAR_REF("elsdot;", 0x2a97),
1067
+ CHAR_REF("emacr;", 0x0113),
1068
+ CHAR_REF("empty;", 0x2205),
1069
+ CHAR_REF("emptyset;", 0x2205),
1070
+ CHAR_REF("emptyv;", 0x2205),
1071
+ CHAR_REF("emsp13;", 0x2004),
1072
+ CHAR_REF("emsp14;", 0x2005),
1073
+ CHAR_REF("emsp;", 0x2003),
1074
+ CHAR_REF("eng;", 0x014b),
1075
+ CHAR_REF("ensp;", 0x2002),
1076
+ CHAR_REF("eogon;", 0x0119),
1077
+ CHAR_REF("eopf;", 0x0001d556),
1078
+ CHAR_REF("epar;", 0x22d5),
1079
+ CHAR_REF("eparsl;", 0x29e3),
1080
+ CHAR_REF("eplus;", 0x2a71),
1081
+ CHAR_REF("epsi;", 0x03b5),
1082
+ CHAR_REF("epsilon;", 0x03b5),
1083
+ CHAR_REF("epsiv;", 0x03f5),
1084
+ CHAR_REF("eqcirc;", 0x2256),
1085
+ CHAR_REF("eqcolon;", 0x2255),
1086
+ CHAR_REF("eqsim;", 0x2242),
1087
+ CHAR_REF("eqslantgtr;", 0x2a96),
1088
+ CHAR_REF("eqslantless;", 0x2a95),
1089
+ CHAR_REF("equals;", 0x3d),
1090
+ CHAR_REF("equest;", 0x225f),
1091
+ CHAR_REF("equiv;", 0x2261),
1092
+ CHAR_REF("equivDD;", 0x2a78),
1093
+ CHAR_REF("eqvparsl;", 0x29e5),
1094
+ CHAR_REF("erDot;", 0x2253),
1095
+ CHAR_REF("erarr;", 0x2971),
1096
+ CHAR_REF("escr;", 0x212f),
1097
+ CHAR_REF("esdot;", 0x2250),
1098
+ CHAR_REF("esim;", 0x2242),
1099
+ CHAR_REF("eta;", 0x03b7),
1100
+ CHAR_REF("eth;", 0xf0),
1101
+ CHAR_REF("eth", 0xf0),
1102
+ CHAR_REF("euml;", 0xeb),
1103
+ CHAR_REF("euml", 0xeb),
1104
+ CHAR_REF("euro;", 0x20ac),
1105
+ CHAR_REF("excl;", 0x21),
1106
+ CHAR_REF("exist;", 0x2203),
1107
+ CHAR_REF("expectation;", 0x2130),
1108
+ CHAR_REF("exponentiale;", 0x2147),
1109
+ CHAR_REF("fallingdotseq;", 0x2252),
1110
+ CHAR_REF("fcy;", 0x0444),
1111
+ CHAR_REF("female;", 0x2640),
1112
+ CHAR_REF("ffilig;", 0xfb03),
1113
+ CHAR_REF("fflig;", 0xfb00),
1114
+ CHAR_REF("ffllig;", 0xfb04),
1115
+ CHAR_REF("ffr;", 0x0001d523),
1116
+ CHAR_REF("filig;", 0xfb01),
1117
+ MULTI_CHAR_REF("fjlig;", 0x66, 0x6a),
1118
+ CHAR_REF("flat;", 0x266d),
1119
+ CHAR_REF("fllig;", 0xfb02),
1120
+ CHAR_REF("fltns;", 0x25b1),
1121
+ CHAR_REF("fnof;", 0x0192),
1122
+ CHAR_REF("fopf;", 0x0001d557),
1123
+ CHAR_REF("forall;", 0x2200),
1124
+ CHAR_REF("fork;", 0x22d4),
1125
+ CHAR_REF("forkv;", 0x2ad9),
1126
+ CHAR_REF("fpartint;", 0x2a0d),
1127
+ CHAR_REF("frac12", 0xbd),
1128
+ CHAR_REF("frac12;", 0xbd),
1129
+ CHAR_REF("frac13;", 0x2153),
1130
+ CHAR_REF("frac14", 0xbc),
1131
+ CHAR_REF("frac14;", 0xbc),
1132
+ CHAR_REF("frac15;", 0x2155),
1133
+ CHAR_REF("frac16;", 0x2159),
1134
+ CHAR_REF("frac18;", 0x215b),
1135
+ CHAR_REF("frac23;", 0x2154),
1136
+ CHAR_REF("frac25;", 0x2156),
1137
+ CHAR_REF("frac34", 0xbe),
1138
+ CHAR_REF("frac34;", 0xbe),
1139
+ CHAR_REF("frac35;", 0x2157),
1140
+ CHAR_REF("frac38;", 0x215c),
1141
+ CHAR_REF("frac45;", 0x2158),
1142
+ CHAR_REF("frac56;", 0x215a),
1143
+ CHAR_REF("frac58;", 0x215d),
1144
+ CHAR_REF("frac78;", 0x215e),
1145
+ CHAR_REF("frasl;", 0x2044),
1146
+ CHAR_REF("frown;", 0x2322),
1147
+ CHAR_REF("fscr;", 0x0001d4bb),
1148
+ CHAR_REF("gE;", 0x2267),
1149
+ CHAR_REF("gEl;", 0x2a8c),
1150
+ CHAR_REF("gacute;", 0x01f5),
1151
+ CHAR_REF("gamma;", 0x03b3),
1152
+ CHAR_REF("gammad;", 0x03dd),
1153
+ CHAR_REF("gap;", 0x2a86),
1154
+ CHAR_REF("gbreve;", 0x011f),
1155
+ CHAR_REF("gcirc;", 0x011d),
1156
+ CHAR_REF("gcy;", 0x0433),
1157
+ CHAR_REF("gdot;", 0x0121),
1158
+ CHAR_REF("ge;", 0x2265),
1159
+ CHAR_REF("gel;", 0x22db),
1160
+ CHAR_REF("geq;", 0x2265),
1161
+ CHAR_REF("geqq;", 0x2267),
1162
+ CHAR_REF("geqslant;", 0x2a7e),
1163
+ CHAR_REF("ges;", 0x2a7e),
1164
+ CHAR_REF("gescc;", 0x2aa9),
1165
+ CHAR_REF("gesdot;", 0x2a80),
1166
+ CHAR_REF("gesdoto;", 0x2a82),
1167
+ CHAR_REF("gesdotol;", 0x2a84),
1168
+ MULTI_CHAR_REF("gesl;", 0x22db, 0xfe00),
1169
+ CHAR_REF("gesles;", 0x2a94),
1170
+ CHAR_REF("gfr;", 0x0001d524),
1171
+ CHAR_REF("gg;", 0x226b),
1172
+ CHAR_REF("ggg;", 0x22d9),
1173
+ CHAR_REF("gimel;", 0x2137),
1174
+ CHAR_REF("gjcy;", 0x0453),
1175
+ CHAR_REF("gl;", 0x2277),
1176
+ CHAR_REF("glE;", 0x2a92),
1177
+ CHAR_REF("gla;", 0x2aa5),
1178
+ CHAR_REF("glj;", 0x2aa4),
1179
+ CHAR_REF("gnE;", 0x2269),
1180
+ CHAR_REF("gnap;", 0x2a8a),
1181
+ CHAR_REF("gnapprox;", 0x2a8a),
1182
+ CHAR_REF("gne;", 0x2a88),
1183
+ CHAR_REF("gneq;", 0x2a88),
1184
+ CHAR_REF("gneqq;", 0x2269),
1185
+ CHAR_REF("gnsim;", 0x22e7),
1186
+ CHAR_REF("gopf;", 0x0001d558),
1187
+ CHAR_REF("grave;", 0x60),
1188
+ CHAR_REF("gscr;", 0x210a),
1189
+ CHAR_REF("gsim;", 0x2273),
1190
+ CHAR_REF("gsime;", 0x2a8e),
1191
+ CHAR_REF("gsiml;", 0x2a90),
1192
+ CHAR_REF("gt;", 0x3e),
1193
+ CHAR_REF("gt", 0x3e),
1194
+ CHAR_REF("gtcc;", 0x2aa7),
1195
+ CHAR_REF("gtcir;", 0x2a7a),
1196
+ CHAR_REF("gtdot;", 0x22d7),
1197
+ CHAR_REF("gtlPar;", 0x2995),
1198
+ CHAR_REF("gtquest;", 0x2a7c),
1199
+ CHAR_REF("gtrapprox;", 0x2a86),
1200
+ CHAR_REF("gtrarr;", 0x2978),
1201
+ CHAR_REF("gtrdot;", 0x22d7),
1202
+ CHAR_REF("gtreqless;", 0x22db),
1203
+ CHAR_REF("gtreqqless;", 0x2a8c),
1204
+ CHAR_REF("gtrless;", 0x2277),
1205
+ CHAR_REF("gtrsim;", 0x2273),
1206
+ MULTI_CHAR_REF("gvertneqq;", 0x2269, 0xfe00),
1207
+ MULTI_CHAR_REF("gvnE;", 0x2269, 0xfe00),
1208
+ CHAR_REF("hArr;", 0x21d4),
1209
+ CHAR_REF("hairsp;", 0x200a),
1210
+ CHAR_REF("half;", 0xbd),
1211
+ CHAR_REF("hamilt;", 0x210b),
1212
+ CHAR_REF("hardcy;", 0x044a),
1213
+ CHAR_REF("harr;", 0x2194),
1214
+ CHAR_REF("harrcir;", 0x2948),
1215
+ CHAR_REF("harrw;", 0x21ad),
1216
+ CHAR_REF("hbar;", 0x210f),
1217
+ CHAR_REF("hcirc;", 0x0125),
1218
+ CHAR_REF("hearts;", 0x2665),
1219
+ CHAR_REF("heartsuit;", 0x2665),
1220
+ CHAR_REF("hellip;", 0x2026),
1221
+ CHAR_REF("hercon;", 0x22b9),
1222
+ CHAR_REF("hfr;", 0x0001d525),
1223
+ CHAR_REF("hksearow;", 0x2925),
1224
+ CHAR_REF("hkswarow;", 0x2926),
1225
+ CHAR_REF("hoarr;", 0x21ff),
1226
+ CHAR_REF("homtht;", 0x223b),
1227
+ CHAR_REF("hookleftarrow;", 0x21a9),
1228
+ CHAR_REF("hookrightarrow;", 0x21aa),
1229
+ CHAR_REF("hopf;", 0x0001d559),
1230
+ CHAR_REF("horbar;", 0x2015),
1231
+ CHAR_REF("hscr;", 0x0001d4bd),
1232
+ CHAR_REF("hslash;", 0x210f),
1233
+ CHAR_REF("hstrok;", 0x0127),
1234
+ CHAR_REF("hybull;", 0x2043),
1235
+ CHAR_REF("hyphen;", 0x2010),
1236
+ CHAR_REF("iacute;", 0xed),
1237
+ CHAR_REF("iacute", 0xed),
1238
+ CHAR_REF("ic;", 0x2063),
1239
+ CHAR_REF("icirc;", 0xee),
1240
+ CHAR_REF("icirc", 0xee),
1241
+ CHAR_REF("icy;", 0x0438),
1242
+ CHAR_REF("iecy;", 0x0435),
1243
+ CHAR_REF("iexcl;", 0xa1),
1244
+ CHAR_REF("iexcl", 0xa1),
1245
+ CHAR_REF("iff;", 0x21d4),
1246
+ CHAR_REF("ifr;", 0x0001d526),
1247
+ CHAR_REF("igrave;", 0xec),
1248
+ CHAR_REF("igrave", 0xec),
1249
+ CHAR_REF("ii;", 0x2148),
1250
+ CHAR_REF("iiiint;", 0x2a0c),
1251
+ CHAR_REF("iiint;", 0x222d),
1252
+ CHAR_REF("iinfin;", 0x29dc),
1253
+ CHAR_REF("iiota;", 0x2129),
1254
+ CHAR_REF("ijlig;", 0x0133),
1255
+ CHAR_REF("imacr;", 0x012b),
1256
+ CHAR_REF("image;", 0x2111),
1257
+ CHAR_REF("imagline;", 0x2110),
1258
+ CHAR_REF("imagpart;", 0x2111),
1259
+ CHAR_REF("imath;", 0x0131),
1260
+ CHAR_REF("imof;", 0x22b7),
1261
+ CHAR_REF("imped;", 0x01b5),
1262
+ CHAR_REF("in;", 0x2208),
1263
+ CHAR_REF("incare;", 0x2105),
1264
+ CHAR_REF("infin;", 0x221e),
1265
+ CHAR_REF("infintie;", 0x29dd),
1266
+ CHAR_REF("inodot;", 0x0131),
1267
+ CHAR_REF("int;", 0x222b),
1268
+ CHAR_REF("intcal;", 0x22ba),
1269
+ CHAR_REF("integers;", 0x2124),
1270
+ CHAR_REF("intercal;", 0x22ba),
1271
+ CHAR_REF("intlarhk;", 0x2a17),
1272
+ CHAR_REF("intprod;", 0x2a3c),
1273
+ CHAR_REF("iocy;", 0x0451),
1274
+ CHAR_REF("iogon;", 0x012f),
1275
+ CHAR_REF("iopf;", 0x0001d55a),
1276
+ CHAR_REF("iota;", 0x03b9),
1277
+ CHAR_REF("iprod;", 0x2a3c),
1278
+ CHAR_REF("iquest;", 0xbf),
1279
+ CHAR_REF("iquest", 0xbf),
1280
+ CHAR_REF("iscr;", 0x0001d4be),
1281
+ CHAR_REF("isin;", 0x2208),
1282
+ CHAR_REF("isinE;", 0x22f9),
1283
+ CHAR_REF("isindot;", 0x22f5),
1284
+ CHAR_REF("isins;", 0x22f4),
1285
+ CHAR_REF("isinsv;", 0x22f3),
1286
+ CHAR_REF("isinv;", 0x2208),
1287
+ CHAR_REF("it;", 0x2062),
1288
+ CHAR_REF("itilde;", 0x0129),
1289
+ CHAR_REF("iukcy;", 0x0456),
1290
+ CHAR_REF("iuml;", 0xef),
1291
+ CHAR_REF("iuml", 0xef),
1292
+ CHAR_REF("jcirc;", 0x0135),
1293
+ CHAR_REF("jcy;", 0x0439),
1294
+ CHAR_REF("jfr;", 0x0001d527),
1295
+ CHAR_REF("jmath;", 0x0237),
1296
+ CHAR_REF("jopf;", 0x0001d55b),
1297
+ CHAR_REF("jscr;", 0x0001d4bf),
1298
+ CHAR_REF("jsercy;", 0x0458),
1299
+ CHAR_REF("jukcy;", 0x0454),
1300
+ CHAR_REF("kappa;", 0x03ba),
1301
+ CHAR_REF("kappav;", 0x03f0),
1302
+ CHAR_REF("kcedil;", 0x0137),
1303
+ CHAR_REF("kcy;", 0x043a),
1304
+ CHAR_REF("kfr;", 0x0001d528),
1305
+ CHAR_REF("kgreen;", 0x0138),
1306
+ CHAR_REF("khcy;", 0x0445),
1307
+ CHAR_REF("kjcy;", 0x045c),
1308
+ CHAR_REF("kopf;", 0x0001d55c),
1309
+ CHAR_REF("kscr;", 0x0001d4c0),
1310
+ CHAR_REF("lAarr;", 0x21da),
1311
+ CHAR_REF("lArr;", 0x21d0),
1312
+ CHAR_REF("lAtail;", 0x291b),
1313
+ CHAR_REF("lBarr;", 0x290e),
1314
+ CHAR_REF("lE;", 0x2266),
1315
+ CHAR_REF("lEg;", 0x2a8b),
1316
+ CHAR_REF("lHar;", 0x2962),
1317
+ CHAR_REF("lacute;", 0x013a),
1318
+ CHAR_REF("laemptyv;", 0x29b4),
1319
+ CHAR_REF("lagran;", 0x2112),
1320
+ CHAR_REF("lambda;", 0x03bb),
1321
+ CHAR_REF("lang;", 0x27e8),
1322
+ CHAR_REF("langd;", 0x2991),
1323
+ CHAR_REF("langle;", 0x27e8),
1324
+ CHAR_REF("lap;", 0x2a85),
1325
+ CHAR_REF("laquo;", 0xab),
1326
+ CHAR_REF("laquo", 0xab),
1327
+ CHAR_REF("larr;", 0x2190),
1328
+ CHAR_REF("larrb;", 0x21e4),
1329
+ CHAR_REF("larrbfs;", 0x291f),
1330
+ CHAR_REF("larrfs;", 0x291d),
1331
+ CHAR_REF("larrhk;", 0x21a9),
1332
+ CHAR_REF("larrlp;", 0x21ab),
1333
+ CHAR_REF("larrpl;", 0x2939),
1334
+ CHAR_REF("larrsim;", 0x2973),
1335
+ CHAR_REF("larrtl;", 0x21a2),
1336
+ CHAR_REF("lat;", 0x2aab),
1337
+ CHAR_REF("latail;", 0x2919),
1338
+ CHAR_REF("late;", 0x2aad),
1339
+ MULTI_CHAR_REF("lates;", 0x2aad, 0xfe00),
1340
+ CHAR_REF("lbarr;", 0x290c),
1341
+ CHAR_REF("lbbrk;", 0x2772),
1342
+ CHAR_REF("lbrace;", 0x7b),
1343
+ CHAR_REF("lbrack;", 0x5b),
1344
+ CHAR_REF("lbrke;", 0x298b),
1345
+ CHAR_REF("lbrksld;", 0x298f),
1346
+ CHAR_REF("lbrkslu;", 0x298d),
1347
+ CHAR_REF("lcaron;", 0x013e),
1348
+ CHAR_REF("lcedil;", 0x013c),
1349
+ CHAR_REF("lceil;", 0x2308),
1350
+ CHAR_REF("lcub;", 0x7b),
1351
+ CHAR_REF("lcy;", 0x043b),
1352
+ CHAR_REF("ldca;", 0x2936),
1353
+ CHAR_REF("ldquo;", 0x201c),
1354
+ CHAR_REF("ldquor;", 0x201e),
1355
+ CHAR_REF("ldrdhar;", 0x2967),
1356
+ CHAR_REF("ldrushar;", 0x294b),
1357
+ CHAR_REF("ldsh;", 0x21b2),
1358
+ CHAR_REF("le;", 0x2264),
1359
+ CHAR_REF("leftarrow;", 0x2190),
1360
+ CHAR_REF("leftarrowtail;", 0x21a2),
1361
+ CHAR_REF("leftharpoondown;", 0x21bd),
1362
+ CHAR_REF("leftharpoonup;", 0x21bc),
1363
+ CHAR_REF("leftleftarrows;", 0x21c7),
1364
+ CHAR_REF("leftrightarrow;", 0x2194),
1365
+ CHAR_REF("leftrightarrows;", 0x21c6),
1366
+ CHAR_REF("leftrightharpoons;", 0x21cb),
1367
+ CHAR_REF("leftrightsquigarrow;", 0x21ad),
1368
+ CHAR_REF("leftthreetimes;", 0x22cb),
1369
+ CHAR_REF("leg;", 0x22da),
1370
+ CHAR_REF("leq;", 0x2264),
1371
+ CHAR_REF("leqq;", 0x2266),
1372
+ CHAR_REF("leqslant;", 0x2a7d),
1373
+ CHAR_REF("les;", 0x2a7d),
1374
+ CHAR_REF("lescc;", 0x2aa8),
1375
+ CHAR_REF("lesdot;", 0x2a7f),
1376
+ CHAR_REF("lesdoto;", 0x2a81),
1377
+ CHAR_REF("lesdotor;", 0x2a83),
1378
+ MULTI_CHAR_REF("lesg;", 0x22da, 0xfe00),
1379
+ CHAR_REF("lesges;", 0x2a93),
1380
+ CHAR_REF("lessapprox;", 0x2a85),
1381
+ CHAR_REF("lessdot;", 0x22d6),
1382
+ CHAR_REF("lesseqgtr;", 0x22da),
1383
+ CHAR_REF("lesseqqgtr;", 0x2a8b),
1384
+ CHAR_REF("lessgtr;", 0x2276),
1385
+ CHAR_REF("lesssim;", 0x2272),
1386
+ CHAR_REF("lfisht;", 0x297c),
1387
+ CHAR_REF("lfloor;", 0x230a),
1388
+ CHAR_REF("lfr;", 0x0001d529),
1389
+ CHAR_REF("lg;", 0x2276),
1390
+ CHAR_REF("lgE;", 0x2a91),
1391
+ CHAR_REF("lhard;", 0x21bd),
1392
+ CHAR_REF("lharu;", 0x21bc),
1393
+ CHAR_REF("lharul;", 0x296a),
1394
+ CHAR_REF("lhblk;", 0x2584),
1395
+ CHAR_REF("ljcy;", 0x0459),
1396
+ CHAR_REF("ll;", 0x226a),
1397
+ CHAR_REF("llarr;", 0x21c7),
1398
+ CHAR_REF("llcorner;", 0x231e),
1399
+ CHAR_REF("llhard;", 0x296b),
1400
+ CHAR_REF("lltri;", 0x25fa),
1401
+ CHAR_REF("lmidot;", 0x0140),
1402
+ CHAR_REF("lmoust;", 0x23b0),
1403
+ CHAR_REF("lmoustache;", 0x23b0),
1404
+ CHAR_REF("lnE;", 0x2268),
1405
+ CHAR_REF("lnap;", 0x2a89),
1406
+ CHAR_REF("lnapprox;", 0x2a89),
1407
+ CHAR_REF("lne;", 0x2a87),
1408
+ CHAR_REF("lneq;", 0x2a87),
1409
+ CHAR_REF("lneqq;", 0x2268),
1410
+ CHAR_REF("lnsim;", 0x22e6),
1411
+ CHAR_REF("loang;", 0x27ec),
1412
+ CHAR_REF("loarr;", 0x21fd),
1413
+ CHAR_REF("lobrk;", 0x27e6),
1414
+ CHAR_REF("longleftarrow;", 0x27f5),
1415
+ CHAR_REF("longleftrightarrow;", 0x27f7),
1416
+ CHAR_REF("longmapsto;", 0x27fc),
1417
+ CHAR_REF("longrightarrow;", 0x27f6),
1418
+ CHAR_REF("looparrowleft;", 0x21ab),
1419
+ CHAR_REF("looparrowright;", 0x21ac),
1420
+ CHAR_REF("lopar;", 0x2985),
1421
+ CHAR_REF("lopf;", 0x0001d55d),
1422
+ CHAR_REF("loplus;", 0x2a2d),
1423
+ CHAR_REF("lotimes;", 0x2a34),
1424
+ CHAR_REF("lowast;", 0x2217),
1425
+ CHAR_REF("lowbar;", 0x5f),
1426
+ CHAR_REF("loz;", 0x25ca),
1427
+ CHAR_REF("lozenge;", 0x25ca),
1428
+ CHAR_REF("lozf;", 0x29eb),
1429
+ CHAR_REF("lpar;", 0x28),
1430
+ CHAR_REF("lparlt;", 0x2993),
1431
+ CHAR_REF("lrarr;", 0x21c6),
1432
+ CHAR_REF("lrcorner;", 0x231f),
1433
+ CHAR_REF("lrhar;", 0x21cb),
1434
+ CHAR_REF("lrhard;", 0x296d),
1435
+ CHAR_REF("lrm;", 0x200e),
1436
+ CHAR_REF("lrtri;", 0x22bf),
1437
+ CHAR_REF("lsaquo;", 0x2039),
1438
+ CHAR_REF("lscr;", 0x0001d4c1),
1439
+ CHAR_REF("lsh;", 0x21b0),
1440
+ CHAR_REF("lsim;", 0x2272),
1441
+ CHAR_REF("lsime;", 0x2a8d),
1442
+ CHAR_REF("lsimg;", 0x2a8f),
1443
+ CHAR_REF("lsqb;", 0x5b),
1444
+ CHAR_REF("lsquo;", 0x2018),
1445
+ CHAR_REF("lsquor;", 0x201a),
1446
+ CHAR_REF("lstrok;", 0x0142),
1447
+ CHAR_REF("lt;", 0x3c),
1448
+ CHAR_REF("lt", 0x3c),
1449
+ CHAR_REF("ltcc;", 0x2aa6),
1450
+ CHAR_REF("ltcir;", 0x2a79),
1451
+ CHAR_REF("ltdot;", 0x22d6),
1452
+ CHAR_REF("lthree;", 0x22cb),
1453
+ CHAR_REF("ltimes;", 0x22c9),
1454
+ CHAR_REF("ltlarr;", 0x2976),
1455
+ CHAR_REF("ltquest;", 0x2a7b),
1456
+ CHAR_REF("ltrPar;", 0x2996),
1457
+ CHAR_REF("ltri;", 0x25c3),
1458
+ CHAR_REF("ltrie;", 0x22b4),
1459
+ CHAR_REF("ltrif;", 0x25c2),
1460
+ CHAR_REF("lurdshar;", 0x294a),
1461
+ CHAR_REF("luruhar;", 0x2966),
1462
+ MULTI_CHAR_REF("lvertneqq;", 0x2268, 0xfe00),
1463
+ MULTI_CHAR_REF("lvnE;", 0x2268, 0xfe00),
1464
+ CHAR_REF("mDDot;", 0x223a),
1465
+ CHAR_REF("macr;", 0xaf),
1466
+ CHAR_REF("macr", 0xaf),
1467
+ CHAR_REF("male;", 0x2642),
1468
+ CHAR_REF("malt;", 0x2720),
1469
+ CHAR_REF("maltese;", 0x2720),
1470
+ CHAR_REF("map;", 0x21a6),
1471
+ CHAR_REF("mapsto;", 0x21a6),
1472
+ CHAR_REF("mapstodown;", 0x21a7),
1473
+ CHAR_REF("mapstoleft;", 0x21a4),
1474
+ CHAR_REF("mapstoup;", 0x21a5),
1475
+ CHAR_REF("marker;", 0x25ae),
1476
+ CHAR_REF("mcomma;", 0x2a29),
1477
+ CHAR_REF("mcy;", 0x043c),
1478
+ CHAR_REF("mdash;", 0x2014),
1479
+ CHAR_REF("measuredangle;", 0x2221),
1480
+ CHAR_REF("mfr;", 0x0001d52a),
1481
+ CHAR_REF("mho;", 0x2127),
1482
+ CHAR_REF("micro;", 0xb5),
1483
+ CHAR_REF("micro", 0xb5),
1484
+ CHAR_REF("mid;", 0x2223),
1485
+ CHAR_REF("midast;", 0x2a),
1486
+ CHAR_REF("midcir;", 0x2af0),
1487
+ CHAR_REF("middot;", 0xb7),
1488
+ CHAR_REF("middot", 0xb7),
1489
+ CHAR_REF("minus;", 0x2212),
1490
+ CHAR_REF("minusb;", 0x229f),
1491
+ CHAR_REF("minusd;", 0x2238),
1492
+ CHAR_REF("minusdu;", 0x2a2a),
1493
+ CHAR_REF("mlcp;", 0x2adb),
1494
+ CHAR_REF("mldr;", 0x2026),
1495
+ CHAR_REF("mnplus;", 0x2213),
1496
+ CHAR_REF("models;", 0x22a7),
1497
+ CHAR_REF("mopf;", 0x0001d55e),
1498
+ CHAR_REF("mp;", 0x2213),
1499
+ CHAR_REF("mscr;", 0x0001d4c2),
1500
+ CHAR_REF("mstpos;", 0x223e),
1501
+ CHAR_REF("mu;", 0x03bc),
1502
+ CHAR_REF("multimap;", 0x22b8),
1503
+ CHAR_REF("mumap;", 0x22b8),
1504
+ MULTI_CHAR_REF("nGg;", 0x22d9, 0x0338),
1505
+ MULTI_CHAR_REF("nGt;", 0x226b, 0x20d2),
1506
+ MULTI_CHAR_REF("nGtv;", 0x226b, 0x0338),
1507
+ CHAR_REF("nLeftarrow;", 0x21cd),
1508
+ CHAR_REF("nLeftrightarrow;", 0x21ce),
1509
+ MULTI_CHAR_REF("nLl;", 0x22d8, 0x0338),
1510
+ MULTI_CHAR_REF("nLt;", 0x226a, 0x20d2),
1511
+ MULTI_CHAR_REF("nLtv;", 0x226a, 0x0338),
1512
+ CHAR_REF("nRightarrow;", 0x21cf),
1513
+ CHAR_REF("nVDash;", 0x22af),
1514
+ CHAR_REF("nVdash;", 0x22ae),
1515
+ CHAR_REF("nabla;", 0x2207),
1516
+ CHAR_REF("nacute;", 0x0144),
1517
+ MULTI_CHAR_REF("nang;", 0x2220, 0x20d2),
1518
+ CHAR_REF("nap;", 0x2249),
1519
+ MULTI_CHAR_REF("napE;", 0x2a70, 0x0338),
1520
+ MULTI_CHAR_REF("napid;", 0x224b, 0x0338),
1521
+ CHAR_REF("napos;", 0x0149),
1522
+ CHAR_REF("napprox;", 0x2249),
1523
+ CHAR_REF("natur;", 0x266e),
1524
+ CHAR_REF("natural;", 0x266e),
1525
+ CHAR_REF("naturals;", 0x2115),
1526
+ CHAR_REF("nbsp;", 0xa0),
1527
+ CHAR_REF("nbsp", 0xa0),
1528
+ MULTI_CHAR_REF("nbump;", 0x224e, 0x0338),
1529
+ MULTI_CHAR_REF("nbumpe;", 0x224f, 0x0338),
1530
+ CHAR_REF("ncap;", 0x2a43),
1531
+ CHAR_REF("ncaron;", 0x0148),
1532
+ CHAR_REF("ncedil;", 0x0146),
1533
+ CHAR_REF("ncong;", 0x2247),
1534
+ MULTI_CHAR_REF("ncongdot;", 0x2a6d, 0x0338),
1535
+ CHAR_REF("ncup;", 0x2a42),
1536
+ CHAR_REF("ncy;", 0x043d),
1537
+ CHAR_REF("ndash;", 0x2013),
1538
+ CHAR_REF("ne;", 0x2260),
1539
+ CHAR_REF("neArr;", 0x21d7),
1540
+ CHAR_REF("nearhk;", 0x2924),
1541
+ CHAR_REF("nearr;", 0x2197),
1542
+ CHAR_REF("nearrow;", 0x2197),
1543
+ MULTI_CHAR_REF("nedot;", 0x2250, 0x0338),
1544
+ CHAR_REF("nequiv;", 0x2262),
1545
+ CHAR_REF("nesear;", 0x2928),
1546
+ MULTI_CHAR_REF("nesim;", 0x2242, 0x0338),
1547
+ CHAR_REF("nexist;", 0x2204),
1548
+ CHAR_REF("nexists;", 0x2204),
1549
+ CHAR_REF("nfr;", 0x0001d52b),
1550
+ MULTI_CHAR_REF("ngE;", 0x2267, 0x0338),
1551
+ CHAR_REF("nge;", 0x2271),
1552
+ CHAR_REF("ngeq;", 0x2271),
1553
+ MULTI_CHAR_REF("ngeqq;", 0x2267, 0x0338),
1554
+ MULTI_CHAR_REF("ngeqslant;", 0x2a7e, 0x0338),
1555
+ MULTI_CHAR_REF("nges;", 0x2a7e, 0x0338),
1556
+ CHAR_REF("ngsim;", 0x2275),
1557
+ CHAR_REF("ngt;", 0x226f),
1558
+ CHAR_REF("ngtr;", 0x226f),
1559
+ CHAR_REF("nhArr;", 0x21ce),
1560
+ CHAR_REF("nharr;", 0x21ae),
1561
+ CHAR_REF("nhpar;", 0x2af2),
1562
+ CHAR_REF("ni;", 0x220b),
1563
+ CHAR_REF("nis;", 0x22fc),
1564
+ CHAR_REF("nisd;", 0x22fa),
1565
+ CHAR_REF("niv;", 0x220b),
1566
+ CHAR_REF("njcy;", 0x045a),
1567
+ CHAR_REF("nlArr;", 0x21cd),
1568
+ MULTI_CHAR_REF("nlE;", 0x2266, 0x0338),
1569
+ CHAR_REF("nlarr;", 0x219a),
1570
+ CHAR_REF("nldr;", 0x2025),
1571
+ CHAR_REF("nle;", 0x2270),
1572
+ CHAR_REF("nleftarrow;", 0x219a),
1573
+ CHAR_REF("nleftrightarrow;", 0x21ae),
1574
+ CHAR_REF("nleq;", 0x2270),
1575
+ MULTI_CHAR_REF("nleqq;", 0x2266, 0x0338),
1576
+ MULTI_CHAR_REF("nleqslant;", 0x2a7d, 0x0338),
1577
+ MULTI_CHAR_REF("nles;", 0x2a7d, 0x0338),
1578
+ CHAR_REF("nless;", 0x226e),
1579
+ CHAR_REF("nlsim;", 0x2274),
1580
+ CHAR_REF("nlt;", 0x226e),
1581
+ CHAR_REF("nltri;", 0x22ea),
1582
+ CHAR_REF("nltrie;", 0x22ec),
1583
+ CHAR_REF("nmid;", 0x2224),
1584
+ CHAR_REF("nopf;", 0x0001d55f),
1585
+ CHAR_REF("not;", 0xac),
1586
+ CHAR_REF("notin;", 0x2209),
1587
+ MULTI_CHAR_REF("notinE;", 0x22f9, 0x0338),
1588
+ MULTI_CHAR_REF("notindot;", 0x22f5, 0x0338),
1589
+ CHAR_REF("notinva;", 0x2209),
1590
+ CHAR_REF("notinvb;", 0x22f7),
1591
+ CHAR_REF("notinvc;", 0x22f6),
1592
+ CHAR_REF("notni;", 0x220c),
1593
+ CHAR_REF("notniva;", 0x220c),
1594
+ CHAR_REF("notnivb;", 0x22fe),
1595
+ CHAR_REF("notnivc;", 0x22fd),
1596
+ CHAR_REF("not", 0xac),
1597
+ CHAR_REF("npar;", 0x2226),
1598
+ CHAR_REF("nparallel;", 0x2226),
1599
+ MULTI_CHAR_REF("nparsl;", 0x2afd, 0x20e5),
1600
+ MULTI_CHAR_REF("npart;", 0x2202, 0x0338),
1601
+ CHAR_REF("npolint;", 0x2a14),
1602
+ CHAR_REF("npr;", 0x2280),
1603
+ CHAR_REF("nprcue;", 0x22e0),
1604
+ MULTI_CHAR_REF("npre;", 0x2aaf, 0x0338),
1605
+ CHAR_REF("nprec;", 0x2280),
1606
+ MULTI_CHAR_REF("npreceq;", 0x2aaf, 0x0338),
1607
+ CHAR_REF("nrArr;", 0x21cf),
1608
+ CHAR_REF("nrarr;", 0x219b),
1609
+ MULTI_CHAR_REF("nrarrc;", 0x2933, 0x0338),
1610
+ MULTI_CHAR_REF("nrarrw;", 0x219d, 0x0338),
1611
+ CHAR_REF("nrightarrow;", 0x219b),
1612
+ CHAR_REF("nrtri;", 0x22eb),
1613
+ CHAR_REF("nrtrie;", 0x22ed),
1614
+ CHAR_REF("nsc;", 0x2281),
1615
+ CHAR_REF("nsccue;", 0x22e1),
1616
+ MULTI_CHAR_REF("nsce;", 0x2ab0, 0x0338),
1617
+ CHAR_REF("nscr;", 0x0001d4c3),
1618
+ CHAR_REF("nshortmid;", 0x2224),
1619
+ CHAR_REF("nshortparallel;", 0x2226),
1620
+ CHAR_REF("nsim;", 0x2241),
1621
+ CHAR_REF("nsime;", 0x2244),
1622
+ CHAR_REF("nsimeq;", 0x2244),
1623
+ CHAR_REF("nsmid;", 0x2224),
1624
+ CHAR_REF("nspar;", 0x2226),
1625
+ CHAR_REF("nsqsube;", 0x22e2),
1626
+ CHAR_REF("nsqsupe;", 0x22e3),
1627
+ CHAR_REF("nsub;", 0x2284),
1628
+ MULTI_CHAR_REF("nsubE;", 0x2ac5, 0x0338),
1629
+ CHAR_REF("nsube;", 0x2288),
1630
+ MULTI_CHAR_REF("nsubset;", 0x2282, 0x20d2),
1631
+ CHAR_REF("nsubseteq;", 0x2288),
1632
+ MULTI_CHAR_REF("nsubseteqq;", 0x2ac5, 0x0338),
1633
+ CHAR_REF("nsucc;", 0x2281),
1634
+ MULTI_CHAR_REF("nsucceq;", 0x2ab0, 0x0338),
1635
+ CHAR_REF("nsup;", 0x2285),
1636
+ MULTI_CHAR_REF("nsupE;", 0x2ac6, 0x0338),
1637
+ CHAR_REF("nsupe;", 0x2289),
1638
+ MULTI_CHAR_REF("nsupset;", 0x2283, 0x20d2),
1639
+ CHAR_REF("nsupseteq;", 0x2289),
1640
+ MULTI_CHAR_REF("nsupseteqq;", 0x2ac6, 0x0338),
1641
+ CHAR_REF("ntgl;", 0x2279),
1642
+ CHAR_REF("ntilde;", 0xf1),
1643
+ CHAR_REF("ntilde", 0xf1),
1644
+ CHAR_REF("ntlg;", 0x2278),
1645
+ CHAR_REF("ntriangleleft;", 0x22ea),
1646
+ CHAR_REF("ntrianglelefteq;", 0x22ec),
1647
+ CHAR_REF("ntriangleright;", 0x22eb),
1648
+ CHAR_REF("ntrianglerighteq;", 0x22ed),
1649
+ CHAR_REF("nu;", 0x03bd),
1650
+ CHAR_REF("num;", 0x23),
1651
+ CHAR_REF("numero;", 0x2116),
1652
+ CHAR_REF("numsp;", 0x2007),
1653
+ CHAR_REF("nvDash;", 0x22ad),
1654
+ CHAR_REF("nvHarr;", 0x2904),
1655
+ MULTI_CHAR_REF("nvap;", 0x224d, 0x20d2),
1656
+ CHAR_REF("nvdash;", 0x22ac),
1657
+ MULTI_CHAR_REF("nvge;", 0x2265, 0x20d2),
1658
+ MULTI_CHAR_REF("nvgt;", 0x3e, 0x20d2),
1659
+ CHAR_REF("nvinfin;", 0x29de),
1660
+ CHAR_REF("nvlArr;", 0x2902),
1661
+ MULTI_CHAR_REF("nvle;", 0x2264, 0x20d2),
1662
+ MULTI_CHAR_REF("nvlt;", 0x3c, 0x20d2),
1663
+ MULTI_CHAR_REF("nvltrie;", 0x22b4, 0x20d2),
1664
+ CHAR_REF("nvrArr;", 0x2903),
1665
+ MULTI_CHAR_REF("nvrtrie;", 0x22b5, 0x20d2),
1666
+ MULTI_CHAR_REF("nvsim;", 0x223c, 0x20d2),
1667
+ CHAR_REF("nwArr;", 0x21d6),
1668
+ CHAR_REF("nwarhk;", 0x2923),
1669
+ CHAR_REF("nwarr;", 0x2196),
1670
+ CHAR_REF("nwarrow;", 0x2196),
1671
+ CHAR_REF("nwnear;", 0x2927),
1672
+ CHAR_REF("oS;", 0x24c8),
1673
+ CHAR_REF("oacute;", 0xf3),
1674
+ CHAR_REF("oacute", 0xf3),
1675
+ CHAR_REF("oast;", 0x229b),
1676
+ CHAR_REF("ocir;", 0x229a),
1677
+ CHAR_REF("ocirc;", 0xf4),
1678
+ CHAR_REF("ocirc", 0xf4),
1679
+ CHAR_REF("ocy;", 0x043e),
1680
+ CHAR_REF("odash;", 0x229d),
1681
+ CHAR_REF("odblac;", 0x0151),
1682
+ CHAR_REF("odiv;", 0x2a38),
1683
+ CHAR_REF("odot;", 0x2299),
1684
+ CHAR_REF("odsold;", 0x29bc),
1685
+ CHAR_REF("oelig;", 0x0153),
1686
+ CHAR_REF("ofcir;", 0x29bf),
1687
+ CHAR_REF("ofr;", 0x0001d52c),
1688
+ CHAR_REF("ogon;", 0x02db),
1689
+ CHAR_REF("ograve;", 0xf2),
1690
+ CHAR_REF("ograve", 0xf2),
1691
+ CHAR_REF("ogt;", 0x29c1),
1692
+ CHAR_REF("ohbar;", 0x29b5),
1693
+ CHAR_REF("ohm;", 0x03a9),
1694
+ CHAR_REF("oint;", 0x222e),
1695
+ CHAR_REF("olarr;", 0x21ba),
1696
+ CHAR_REF("olcir;", 0x29be),
1697
+ CHAR_REF("olcross;", 0x29bb),
1698
+ CHAR_REF("oline;", 0x203e),
1699
+ CHAR_REF("olt;", 0x29c0),
1700
+ CHAR_REF("omacr;", 0x014d),
1701
+ CHAR_REF("omega;", 0x03c9),
1702
+ CHAR_REF("omicron;", 0x03bf),
1703
+ CHAR_REF("omid;", 0x29b6),
1704
+ CHAR_REF("ominus;", 0x2296),
1705
+ CHAR_REF("oopf;", 0x0001d560),
1706
+ CHAR_REF("opar;", 0x29b7),
1707
+ CHAR_REF("operp;", 0x29b9),
1708
+ CHAR_REF("oplus;", 0x2295),
1709
+ CHAR_REF("or;", 0x2228),
1710
+ CHAR_REF("orarr;", 0x21bb),
1711
+ CHAR_REF("ord;", 0x2a5d),
1712
+ CHAR_REF("order;", 0x2134),
1713
+ CHAR_REF("orderof;", 0x2134),
1714
+ CHAR_REF("ordf;", 0xaa),
1715
+ CHAR_REF("ordf", 0xaa),
1716
+ CHAR_REF("ordm;", 0xba),
1717
+ CHAR_REF("ordm", 0xba),
1718
+ CHAR_REF("origof;", 0x22b6),
1719
+ CHAR_REF("oror;", 0x2a56),
1720
+ CHAR_REF("orslope;", 0x2a57),
1721
+ CHAR_REF("orv;", 0x2a5b),
1722
+ CHAR_REF("oscr;", 0x2134),
1723
+ CHAR_REF("oslash;", 0xf8),
1724
+ CHAR_REF("oslash", 0xf8),
1725
+ CHAR_REF("osol;", 0x2298),
1726
+ CHAR_REF("otilde;", 0xf5),
1727
+ CHAR_REF("otilde", 0xf5),
1728
+ CHAR_REF("otimes;", 0x2297),
1729
+ CHAR_REF("otimesas;", 0x2a36),
1730
+ CHAR_REF("ouml;", 0xf6),
1731
+ CHAR_REF("ouml", 0xf6),
1732
+ CHAR_REF("ovbar;", 0x233d),
1733
+ CHAR_REF("par;", 0x2225),
1734
+ CHAR_REF("para;", 0xb6),
1735
+ CHAR_REF("para", 0xb6),
1736
+ CHAR_REF("parallel;", 0x2225),
1737
+ CHAR_REF("parsim;", 0x2af3),
1738
+ CHAR_REF("parsl;", 0x2afd),
1739
+ CHAR_REF("part;", 0x2202),
1740
+ CHAR_REF("pcy;", 0x043f),
1741
+ CHAR_REF("percnt;", 0x25),
1742
+ CHAR_REF("period;", 0x2e),
1743
+ CHAR_REF("permil;", 0x2030),
1744
+ CHAR_REF("perp;", 0x22a5),
1745
+ CHAR_REF("pertenk;", 0x2031),
1746
+ CHAR_REF("pfr;", 0x0001d52d),
1747
+ CHAR_REF("phi;", 0x03c6),
1748
+ CHAR_REF("phiv;", 0x03d5),
1749
+ CHAR_REF("phmmat;", 0x2133),
1750
+ CHAR_REF("phone;", 0x260e),
1751
+ CHAR_REF("pi;", 0x03c0),
1752
+ CHAR_REF("pitchfork;", 0x22d4),
1753
+ CHAR_REF("piv;", 0x03d6),
1754
+ CHAR_REF("planck;", 0x210f),
1755
+ CHAR_REF("planckh;", 0x210e),
1756
+ CHAR_REF("plankv;", 0x210f),
1757
+ CHAR_REF("plus;", 0x2b),
1758
+ CHAR_REF("plusacir;", 0x2a23),
1759
+ CHAR_REF("plusb;", 0x229e),
1760
+ CHAR_REF("pluscir;", 0x2a22),
1761
+ CHAR_REF("plusdo;", 0x2214),
1762
+ CHAR_REF("plusdu;", 0x2a25),
1763
+ CHAR_REF("pluse;", 0x2a72),
1764
+ CHAR_REF("plusmn;", 0xb1),
1765
+ CHAR_REF("plusmn", 0xb1),
1766
+ CHAR_REF("plussim;", 0x2a26),
1767
+ CHAR_REF("plustwo;", 0x2a27),
1768
+ CHAR_REF("pm;", 0xb1),
1769
+ CHAR_REF("pointint;", 0x2a15),
1770
+ CHAR_REF("popf;", 0x0001d561),
1771
+ CHAR_REF("pound;", 0xa3),
1772
+ CHAR_REF("pound", 0xa3),
1773
+ CHAR_REF("pr;", 0x227a),
1774
+ CHAR_REF("prE;", 0x2ab3),
1775
+ CHAR_REF("prap;", 0x2ab7),
1776
+ CHAR_REF("prcue;", 0x227c),
1777
+ CHAR_REF("pre;", 0x2aaf),
1778
+ CHAR_REF("prec;", 0x227a),
1779
+ CHAR_REF("precapprox;", 0x2ab7),
1780
+ CHAR_REF("preccurlyeq;", 0x227c),
1781
+ CHAR_REF("preceq;", 0x2aaf),
1782
+ CHAR_REF("precnapprox;", 0x2ab9),
1783
+ CHAR_REF("precneqq;", 0x2ab5),
1784
+ CHAR_REF("precnsim;", 0x22e8),
1785
+ CHAR_REF("precsim;", 0x227e),
1786
+ CHAR_REF("prime;", 0x2032),
1787
+ CHAR_REF("primes;", 0x2119),
1788
+ CHAR_REF("prnE;", 0x2ab5),
1789
+ CHAR_REF("prnap;", 0x2ab9),
1790
+ CHAR_REF("prnsim;", 0x22e8),
1791
+ CHAR_REF("prod;", 0x220f),
1792
+ CHAR_REF("profalar;", 0x232e),
1793
+ CHAR_REF("profline;", 0x2312),
1794
+ CHAR_REF("profsurf;", 0x2313),
1795
+ CHAR_REF("prop;", 0x221d),
1796
+ CHAR_REF("propto;", 0x221d),
1797
+ CHAR_REF("prsim;", 0x227e),
1798
+ CHAR_REF("prurel;", 0x22b0),
1799
+ CHAR_REF("pscr;", 0x0001d4c5),
1800
+ CHAR_REF("psi;", 0x03c8),
1801
+ CHAR_REF("puncsp;", 0x2008),
1802
+ CHAR_REF("qfr;", 0x0001d52e),
1803
+ CHAR_REF("qint;", 0x2a0c),
1804
+ CHAR_REF("qopf;", 0x0001d562),
1805
+ CHAR_REF("qprime;", 0x2057),
1806
+ CHAR_REF("qscr;", 0x0001d4c6),
1807
+ CHAR_REF("quaternions;", 0x210d),
1808
+ CHAR_REF("quatint;", 0x2a16),
1809
+ CHAR_REF("quest;", 0x3f),
1810
+ CHAR_REF("questeq;", 0x225f),
1811
+ CHAR_REF("quot;", 0x22),
1812
+ CHAR_REF("quot", 0x22),
1813
+ CHAR_REF("rAarr;", 0x21db),
1814
+ CHAR_REF("rArr;", 0x21d2),
1815
+ CHAR_REF("rAtail;", 0x291c),
1816
+ CHAR_REF("rBarr;", 0x290f),
1817
+ CHAR_REF("rHar;", 0x2964),
1818
+ MULTI_CHAR_REF("race;", 0x223d, 0x0331),
1819
+ CHAR_REF("racute;", 0x0155),
1820
+ CHAR_REF("radic;", 0x221a),
1821
+ CHAR_REF("raemptyv;", 0x29b3),
1822
+ CHAR_REF("rang;", 0x27e9),
1823
+ CHAR_REF("rangd;", 0x2992),
1824
+ CHAR_REF("range;", 0x29a5),
1825
+ CHAR_REF("rangle;", 0x27e9),
1826
+ CHAR_REF("raquo;", 0xbb),
1827
+ CHAR_REF("raquo", 0xbb),
1828
+ CHAR_REF("rarr;", 0x2192),
1829
+ CHAR_REF("rarrap;", 0x2975),
1830
+ CHAR_REF("rarrb;", 0x21e5),
1831
+ CHAR_REF("rarrbfs;", 0x2920),
1832
+ CHAR_REF("rarrc;", 0x2933),
1833
+ CHAR_REF("rarrfs;", 0x291e),
1834
+ CHAR_REF("rarrhk;", 0x21aa),
1835
+ CHAR_REF("rarrlp;", 0x21ac),
1836
+ CHAR_REF("rarrpl;", 0x2945),
1837
+ CHAR_REF("rarrsim;", 0x2974),
1838
+ CHAR_REF("rarrtl;", 0x21a3),
1839
+ CHAR_REF("rarrw;", 0x219d),
1840
+ CHAR_REF("ratail;", 0x291a),
1841
+ CHAR_REF("ratio;", 0x2236),
1842
+ CHAR_REF("rationals;", 0x211a),
1843
+ CHAR_REF("rbarr;", 0x290d),
1844
+ CHAR_REF("rbbrk;", 0x2773),
1845
+ CHAR_REF("rbrace;", 0x7d),
1846
+ CHAR_REF("rbrack;", 0x5d),
1847
+ CHAR_REF("rbrke;", 0x298c),
1848
+ CHAR_REF("rbrksld;", 0x298e),
1849
+ CHAR_REF("rbrkslu;", 0x2990),
1850
+ CHAR_REF("rcaron;", 0x0159),
1851
+ CHAR_REF("rcedil;", 0x0157),
1852
+ CHAR_REF("rceil;", 0x2309),
1853
+ CHAR_REF("rcub;", 0x7d),
1854
+ CHAR_REF("rcy;", 0x0440),
1855
+ CHAR_REF("rdca;", 0x2937),
1856
+ CHAR_REF("rdldhar;", 0x2969),
1857
+ CHAR_REF("rdquo;", 0x201d),
1858
+ CHAR_REF("rdquor;", 0x201d),
1859
+ CHAR_REF("rdsh;", 0x21b3),
1860
+ CHAR_REF("real;", 0x211c),
1861
+ CHAR_REF("realine;", 0x211b),
1862
+ CHAR_REF("realpart;", 0x211c),
1863
+ CHAR_REF("reals;", 0x211d),
1864
+ CHAR_REF("rect;", 0x25ad),
1865
+ CHAR_REF("reg;", 0xae),
1866
+ CHAR_REF("reg", 0xae),
1867
+ CHAR_REF("rfisht;", 0x297d),
1868
+ CHAR_REF("rfloor;", 0x230b),
1869
+ CHAR_REF("rfr;", 0x0001d52f),
1870
+ CHAR_REF("rhard;", 0x21c1),
1871
+ CHAR_REF("rharu;", 0x21c0),
1872
+ CHAR_REF("rharul;", 0x296c),
1873
+ CHAR_REF("rho;", 0x03c1),
1874
+ CHAR_REF("rhov;", 0x03f1),
1875
+ CHAR_REF("rightarrow;", 0x2192),
1876
+ CHAR_REF("rightarrowtail;", 0x21a3),
1877
+ CHAR_REF("rightharpoondown;", 0x21c1),
1878
+ CHAR_REF("rightharpoonup;", 0x21c0),
1879
+ CHAR_REF("rightleftarrows;", 0x21c4),
1880
+ CHAR_REF("rightleftharpoons;", 0x21cc),
1881
+ CHAR_REF("rightrightarrows;", 0x21c9),
1882
+ CHAR_REF("rightsquigarrow;", 0x219d),
1883
+ CHAR_REF("rightthreetimes;", 0x22cc),
1884
+ CHAR_REF("ring;", 0x02da),
1885
+ CHAR_REF("risingdotseq;", 0x2253),
1886
+ CHAR_REF("rlarr;", 0x21c4),
1887
+ CHAR_REF("rlhar;", 0x21cc),
1888
+ CHAR_REF("rlm;", 0x200f),
1889
+ CHAR_REF("rmoust;", 0x23b1),
1890
+ CHAR_REF("rmoustache;", 0x23b1),
1891
+ CHAR_REF("rnmid;", 0x2aee),
1892
+ CHAR_REF("roang;", 0x27ed),
1893
+ CHAR_REF("roarr;", 0x21fe),
1894
+ CHAR_REF("robrk;", 0x27e7),
1895
+ CHAR_REF("ropar;", 0x2986),
1896
+ CHAR_REF("ropf;", 0x0001d563),
1897
+ CHAR_REF("roplus;", 0x2a2e),
1898
+ CHAR_REF("rotimes;", 0x2a35),
1899
+ CHAR_REF("rpar;", 0x29),
1900
+ CHAR_REF("rpargt;", 0x2994),
1901
+ CHAR_REF("rppolint;", 0x2a12),
1902
+ CHAR_REF("rrarr;", 0x21c9),
1903
+ CHAR_REF("rsaquo;", 0x203a),
1904
+ CHAR_REF("rscr;", 0x0001d4c7),
1905
+ CHAR_REF("rsh;", 0x21b1),
1906
+ CHAR_REF("rsqb;", 0x5d),
1907
+ CHAR_REF("rsquo;", 0x2019),
1908
+ CHAR_REF("rsquor;", 0x2019),
1909
+ CHAR_REF("rthree;", 0x22cc),
1910
+ CHAR_REF("rtimes;", 0x22ca),
1911
+ CHAR_REF("rtri;", 0x25b9),
1912
+ CHAR_REF("rtrie;", 0x22b5),
1913
+ CHAR_REF("rtrif;", 0x25b8),
1914
+ CHAR_REF("rtriltri;", 0x29ce),
1915
+ CHAR_REF("ruluhar;", 0x2968),
1916
+ CHAR_REF("rx;", 0x211e),
1917
+ CHAR_REF("sacute;", 0x015b),
1918
+ CHAR_REF("sbquo;", 0x201a),
1919
+ CHAR_REF("sc;", 0x227b),
1920
+ CHAR_REF("scE;", 0x2ab4),
1921
+ CHAR_REF("scap;", 0x2ab8),
1922
+ CHAR_REF("scaron;", 0x0161),
1923
+ CHAR_REF("sccue;", 0x227d),
1924
+ CHAR_REF("sce;", 0x2ab0),
1925
+ CHAR_REF("scedil;", 0x015f),
1926
+ CHAR_REF("scirc;", 0x015d),
1927
+ CHAR_REF("scnE;", 0x2ab6),
1928
+ CHAR_REF("scnap;", 0x2aba),
1929
+ CHAR_REF("scnsim;", 0x22e9),
1930
+ CHAR_REF("scpolint;", 0x2a13),
1931
+ CHAR_REF("scsim;", 0x227f),
1932
+ CHAR_REF("scy;", 0x0441),
1933
+ CHAR_REF("sdot;", 0x22c5),
1934
+ CHAR_REF("sdotb;", 0x22a1),
1935
+ CHAR_REF("sdote;", 0x2a66),
1936
+ CHAR_REF("seArr;", 0x21d8),
1937
+ CHAR_REF("searhk;", 0x2925),
1938
+ CHAR_REF("searr;", 0x2198),
1939
+ CHAR_REF("searrow;", 0x2198),
1940
+ CHAR_REF("sect;", 0xa7),
1941
+ CHAR_REF("sect", 0xa7),
1942
+ CHAR_REF("semi;", 0x3b),
1943
+ CHAR_REF("seswar;", 0x2929),
1944
+ CHAR_REF("setminus;", 0x2216),
1945
+ CHAR_REF("setmn;", 0x2216),
1946
+ CHAR_REF("sext;", 0x2736),
1947
+ CHAR_REF("sfr;", 0x0001d530),
1948
+ CHAR_REF("sfrown;", 0x2322),
1949
+ CHAR_REF("sharp;", 0x266f),
1950
+ CHAR_REF("shchcy;", 0x0449),
1951
+ CHAR_REF("shcy;", 0x0448),
1952
+ CHAR_REF("shortmid;", 0x2223),
1953
+ CHAR_REF("shortparallel;", 0x2225),
1954
+ CHAR_REF("shy;", 0xad),
1955
+ CHAR_REF("shy", 0xad),
1956
+ CHAR_REF("sigma;", 0x03c3),
1957
+ CHAR_REF("sigmaf;", 0x03c2),
1958
+ CHAR_REF("sigmav;", 0x03c2),
1959
+ CHAR_REF("sim;", 0x223c),
1960
+ CHAR_REF("simdot;", 0x2a6a),
1961
+ CHAR_REF("sime;", 0x2243),
1962
+ CHAR_REF("simeq;", 0x2243),
1963
+ CHAR_REF("simg;", 0x2a9e),
1964
+ CHAR_REF("simgE;", 0x2aa0),
1965
+ CHAR_REF("siml;", 0x2a9d),
1966
+ CHAR_REF("simlE;", 0x2a9f),
1967
+ CHAR_REF("simne;", 0x2246),
1968
+ CHAR_REF("simplus;", 0x2a24),
1969
+ CHAR_REF("simrarr;", 0x2972),
1970
+ CHAR_REF("slarr;", 0x2190),
1971
+ CHAR_REF("smallsetminus;", 0x2216),
1972
+ CHAR_REF("smashp;", 0x2a33),
1973
+ CHAR_REF("smeparsl;", 0x29e4),
1974
+ CHAR_REF("smid;", 0x2223),
1975
+ CHAR_REF("smile;", 0x2323),
1976
+ CHAR_REF("smt;", 0x2aaa),
1977
+ CHAR_REF("smte;", 0x2aac),
1978
+ MULTI_CHAR_REF("smtes;", 0x2aac, 0xfe00),
1979
+ CHAR_REF("softcy;", 0x044c),
1980
+ CHAR_REF("sol;", 0x2f),
1981
+ CHAR_REF("solb;", 0x29c4),
1982
+ CHAR_REF("solbar;", 0x233f),
1983
+ CHAR_REF("sopf;", 0x0001d564),
1984
+ CHAR_REF("spades;", 0x2660),
1985
+ CHAR_REF("spadesuit;", 0x2660),
1986
+ CHAR_REF("spar;", 0x2225),
1987
+ CHAR_REF("sqcap;", 0x2293),
1988
+ MULTI_CHAR_REF("sqcaps;", 0x2293, 0xfe00),
1989
+ CHAR_REF("sqcup;", 0x2294),
1990
+ MULTI_CHAR_REF("sqcups;", 0x2294, 0xfe00),
1991
+ CHAR_REF("sqsub;", 0x228f),
1992
+ CHAR_REF("sqsube;", 0x2291),
1993
+ CHAR_REF("sqsubset;", 0x228f),
1994
+ CHAR_REF("sqsubseteq;", 0x2291),
1995
+ CHAR_REF("sqsup;", 0x2290),
1996
+ CHAR_REF("sqsupe;", 0x2292),
1997
+ CHAR_REF("sqsupset;", 0x2290),
1998
+ CHAR_REF("sqsupseteq;", 0x2292),
1999
+ CHAR_REF("squ;", 0x25a1),
2000
+ CHAR_REF("square;", 0x25a1),
2001
+ CHAR_REF("squarf;", 0x25aa),
2002
+ CHAR_REF("squf;", 0x25aa),
2003
+ CHAR_REF("srarr;", 0x2192),
2004
+ CHAR_REF("sscr;", 0x0001d4c8),
2005
+ CHAR_REF("ssetmn;", 0x2216),
2006
+ CHAR_REF("ssmile;", 0x2323),
2007
+ CHAR_REF("sstarf;", 0x22c6),
2008
+ CHAR_REF("star;", 0x2606),
2009
+ CHAR_REF("starf;", 0x2605),
2010
+ CHAR_REF("straightepsilon;", 0x03f5),
2011
+ CHAR_REF("straightphi;", 0x03d5),
2012
+ CHAR_REF("strns;", 0xaf),
2013
+ CHAR_REF("sub;", 0x2282),
2014
+ CHAR_REF("subE;", 0x2ac5),
2015
+ CHAR_REF("subdot;", 0x2abd),
2016
+ CHAR_REF("sube;", 0x2286),
2017
+ CHAR_REF("subedot;", 0x2ac3),
2018
+ CHAR_REF("submult;", 0x2ac1),
2019
+ CHAR_REF("subnE;", 0x2acb),
2020
+ CHAR_REF("subne;", 0x228a),
2021
+ CHAR_REF("subplus;", 0x2abf),
2022
+ CHAR_REF("subrarr;", 0x2979),
2023
+ CHAR_REF("subset;", 0x2282),
2024
+ CHAR_REF("subseteq;", 0x2286),
2025
+ CHAR_REF("subseteqq;", 0x2ac5),
2026
+ CHAR_REF("subsetneq;", 0x228a),
2027
+ CHAR_REF("subsetneqq;", 0x2acb),
2028
+ CHAR_REF("subsim;", 0x2ac7),
2029
+ CHAR_REF("subsub;", 0x2ad5),
2030
+ CHAR_REF("subsup;", 0x2ad3),
2031
+ CHAR_REF("succ;", 0x227b),
2032
+ CHAR_REF("succapprox;", 0x2ab8),
2033
+ CHAR_REF("succcurlyeq;", 0x227d),
2034
+ CHAR_REF("succeq;", 0x2ab0),
2035
+ CHAR_REF("succnapprox;", 0x2aba),
2036
+ CHAR_REF("succneqq;", 0x2ab6),
2037
+ CHAR_REF("succnsim;", 0x22e9),
2038
+ CHAR_REF("succsim;", 0x227f),
2039
+ CHAR_REF("sum;", 0x2211),
2040
+ CHAR_REF("sung;", 0x266a),
2041
+ CHAR_REF("sup1;", 0xb9),
2042
+ CHAR_REF("sup1", 0xb9),
2043
+ CHAR_REF("sup2;", 0xb2),
2044
+ CHAR_REF("sup2", 0xb2),
2045
+ CHAR_REF("sup3;", 0xb3),
2046
+ CHAR_REF("sup3", 0xb3),
2047
+ CHAR_REF("sup;", 0x2283),
2048
+ CHAR_REF("supE;", 0x2ac6),
2049
+ CHAR_REF("supdot;", 0x2abe),
2050
+ CHAR_REF("supdsub;", 0x2ad8),
2051
+ CHAR_REF("supe;", 0x2287),
2052
+ CHAR_REF("supedot;", 0x2ac4),
2053
+ CHAR_REF("suphsol;", 0x27c9),
2054
+ CHAR_REF("suphsub;", 0x2ad7),
2055
+ CHAR_REF("suplarr;", 0x297b),
2056
+ CHAR_REF("supmult;", 0x2ac2),
2057
+ CHAR_REF("supnE;", 0x2acc),
2058
+ CHAR_REF("supne;", 0x228b),
2059
+ CHAR_REF("supplus;", 0x2ac0),
2060
+ CHAR_REF("supset;", 0x2283),
2061
+ CHAR_REF("supseteq;", 0x2287),
2062
+ CHAR_REF("supseteqq;", 0x2ac6),
2063
+ CHAR_REF("supsetneq;", 0x228b),
2064
+ CHAR_REF("supsetneqq;", 0x2acc),
2065
+ CHAR_REF("supsim;", 0x2ac8),
2066
+ CHAR_REF("supsub;", 0x2ad4),
2067
+ CHAR_REF("supsup;", 0x2ad6),
2068
+ CHAR_REF("swArr;", 0x21d9),
2069
+ CHAR_REF("swarhk;", 0x2926),
2070
+ CHAR_REF("swarr;", 0x2199),
2071
+ CHAR_REF("swarrow;", 0x2199),
2072
+ CHAR_REF("swnwar;", 0x292a),
2073
+ CHAR_REF("szlig;", 0xdf),
2074
+ CHAR_REF("szlig", 0xdf),
2075
+ CHAR_REF("target;", 0x2316),
2076
+ CHAR_REF("tau;", 0x03c4),
2077
+ CHAR_REF("tbrk;", 0x23b4),
2078
+ CHAR_REF("tcaron;", 0x0165),
2079
+ CHAR_REF("tcedil;", 0x0163),
2080
+ CHAR_REF("tcy;", 0x0442),
2081
+ CHAR_REF("tdot;", 0x20db),
2082
+ CHAR_REF("telrec;", 0x2315),
2083
+ CHAR_REF("tfr;", 0x0001d531),
2084
+ CHAR_REF("there4;", 0x2234),
2085
+ CHAR_REF("therefore;", 0x2234),
2086
+ CHAR_REF("theta;", 0x03b8),
2087
+ CHAR_REF("thetasym;", 0x03d1),
2088
+ CHAR_REF("thetav;", 0x03d1),
2089
+ CHAR_REF("thickapprox;", 0x2248),
2090
+ CHAR_REF("thicksim;", 0x223c),
2091
+ CHAR_REF("thinsp;", 0x2009),
2092
+ CHAR_REF("thkap;", 0x2248),
2093
+ CHAR_REF("thksim;", 0x223c),
2094
+ CHAR_REF("thorn;", 0xfe),
2095
+ CHAR_REF("thorn", 0xfe),
2096
+ CHAR_REF("tilde;", 0x02dc),
2097
+ CHAR_REF("times;", 0xd7),
2098
+ CHAR_REF("times", 0xd7),
2099
+ CHAR_REF("timesb;", 0x22a0),
2100
+ CHAR_REF("timesbar;", 0x2a31),
2101
+ CHAR_REF("timesd;", 0x2a30),
2102
+ CHAR_REF("tint;", 0x222d),
2103
+ CHAR_REF("toea;", 0x2928),
2104
+ CHAR_REF("top;", 0x22a4),
2105
+ CHAR_REF("topbot;", 0x2336),
2106
+ CHAR_REF("topcir;", 0x2af1),
2107
+ CHAR_REF("topf;", 0x0001d565),
2108
+ CHAR_REF("topfork;", 0x2ada),
2109
+ CHAR_REF("tosa;", 0x2929),
2110
+ CHAR_REF("tprime;", 0x2034),
2111
+ CHAR_REF("trade;", 0x2122),
2112
+ CHAR_REF("triangle;", 0x25b5),
2113
+ CHAR_REF("triangledown;", 0x25bf),
2114
+ CHAR_REF("triangleleft;", 0x25c3),
2115
+ CHAR_REF("trianglelefteq;", 0x22b4),
2116
+ CHAR_REF("triangleq;", 0x225c),
2117
+ CHAR_REF("triangleright;", 0x25b9),
2118
+ CHAR_REF("trianglerighteq;", 0x22b5),
2119
+ CHAR_REF("tridot;", 0x25ec),
2120
+ CHAR_REF("trie;", 0x225c),
2121
+ CHAR_REF("triminus;", 0x2a3a),
2122
+ CHAR_REF("triplus;", 0x2a39),
2123
+ CHAR_REF("trisb;", 0x29cd),
2124
+ CHAR_REF("tritime;", 0x2a3b),
2125
+ CHAR_REF("trpezium;", 0x23e2),
2126
+ CHAR_REF("tscr;", 0x0001d4c9),
2127
+ CHAR_REF("tscy;", 0x0446),
2128
+ CHAR_REF("tshcy;", 0x045b),
2129
+ CHAR_REF("tstrok;", 0x0167),
2130
+ CHAR_REF("twixt;", 0x226c),
2131
+ CHAR_REF("twoheadleftarrow;", 0x219e),
2132
+ CHAR_REF("twoheadrightarrow;", 0x21a0),
2133
+ CHAR_REF("uArr;", 0x21d1),
2134
+ CHAR_REF("uHar;", 0x2963),
2135
+ CHAR_REF("uacute;", 0xfa),
2136
+ CHAR_REF("uacute", 0xfa),
2137
+ CHAR_REF("uarr;", 0x2191),
2138
+ CHAR_REF("ubrcy;", 0x045e),
2139
+ CHAR_REF("ubreve;", 0x016d),
2140
+ CHAR_REF("ucirc;", 0xfb),
2141
+ CHAR_REF("ucirc", 0xfb),
2142
+ CHAR_REF("ucy;", 0x0443),
2143
+ CHAR_REF("udarr;", 0x21c5),
2144
+ CHAR_REF("udblac;", 0x0171),
2145
+ CHAR_REF("udhar;", 0x296e),
2146
+ CHAR_REF("ufisht;", 0x297e),
2147
+ CHAR_REF("ufr;", 0x0001d532),
2148
+ CHAR_REF("ugrave;", 0xf9),
2149
+ CHAR_REF("ugrave", 0xf9),
2150
+ CHAR_REF("uharl;", 0x21bf),
2151
+ CHAR_REF("uharr;", 0x21be),
2152
+ CHAR_REF("uhblk;", 0x2580),
2153
+ CHAR_REF("ulcorn;", 0x231c),
2154
+ CHAR_REF("ulcorner;", 0x231c),
2155
+ CHAR_REF("ulcrop;", 0x230f),
2156
+ CHAR_REF("ultri;", 0x25f8),
2157
+ CHAR_REF("umacr;", 0x016b),
2158
+ CHAR_REF("uml;", 0xa8),
2159
+ CHAR_REF("uml", 0xa8),
2160
+ CHAR_REF("uogon;", 0x0173),
2161
+ CHAR_REF("uopf;", 0x0001d566),
2162
+ CHAR_REF("uparrow;", 0x2191),
2163
+ CHAR_REF("updownarrow;", 0x2195),
2164
+ CHAR_REF("upharpoonleft;", 0x21bf),
2165
+ CHAR_REF("upharpoonright;", 0x21be),
2166
+ CHAR_REF("uplus;", 0x228e),
2167
+ CHAR_REF("upsi;", 0x03c5),
2168
+ CHAR_REF("upsih;", 0x03d2),
2169
+ CHAR_REF("upsilon;", 0x03c5),
2170
+ CHAR_REF("upuparrows;", 0x21c8),
2171
+ CHAR_REF("urcorn;", 0x231d),
2172
+ CHAR_REF("urcorner;", 0x231d),
2173
+ CHAR_REF("urcrop;", 0x230e),
2174
+ CHAR_REF("uring;", 0x016f),
2175
+ CHAR_REF("urtri;", 0x25f9),
2176
+ CHAR_REF("uscr;", 0x0001d4ca),
2177
+ CHAR_REF("utdot;", 0x22f0),
2178
+ CHAR_REF("utilde;", 0x0169),
2179
+ CHAR_REF("utri;", 0x25b5),
2180
+ CHAR_REF("utrif;", 0x25b4),
2181
+ CHAR_REF("uuarr;", 0x21c8),
2182
+ CHAR_REF("uuml;", 0xfc),
2183
+ CHAR_REF("uuml", 0xfc),
2184
+ CHAR_REF("uwangle;", 0x29a7),
2185
+ CHAR_REF("vArr;", 0x21d5),
2186
+ CHAR_REF("vBar;", 0x2ae8),
2187
+ CHAR_REF("vBarv;", 0x2ae9),
2188
+ CHAR_REF("vDash;", 0x22a8),
2189
+ CHAR_REF("vangrt;", 0x299c),
2190
+ CHAR_REF("varepsilon;", 0x03f5),
2191
+ CHAR_REF("varkappa;", 0x03f0),
2192
+ CHAR_REF("varnothing;", 0x2205),
2193
+ CHAR_REF("varphi;", 0x03d5),
2194
+ CHAR_REF("varpi;", 0x03d6),
2195
+ CHAR_REF("varpropto;", 0x221d),
2196
+ CHAR_REF("varr;", 0x2195),
2197
+ CHAR_REF("varrho;", 0x03f1),
2198
+ CHAR_REF("varsigma;", 0x03c2),
2199
+ MULTI_CHAR_REF("varsubsetneq;", 0x228a, 0xfe00),
2200
+ MULTI_CHAR_REF("varsubsetneqq;", 0x2acb, 0xfe00),
2201
+ MULTI_CHAR_REF("varsupsetneq;", 0x228b, 0xfe00),
2202
+ MULTI_CHAR_REF("varsupsetneqq;", 0x2acc, 0xfe00),
2203
+ CHAR_REF("vartheta;", 0x03d1),
2204
+ CHAR_REF("vartriangleleft;", 0x22b2),
2205
+ CHAR_REF("vartriangleright;", 0x22b3),
2206
+ CHAR_REF("vcy;", 0x0432),
2207
+ CHAR_REF("vdash;", 0x22a2),
2208
+ CHAR_REF("vee;", 0x2228),
2209
+ CHAR_REF("veebar;", 0x22bb),
2210
+ CHAR_REF("veeeq;", 0x225a),
2211
+ CHAR_REF("vellip;", 0x22ee),
2212
+ CHAR_REF("verbar;", 0x7c),
2213
+ CHAR_REF("vert;", 0x7c),
2214
+ CHAR_REF("vfr;", 0x0001d533),
2215
+ CHAR_REF("vltri;", 0x22b2),
2216
+ MULTI_CHAR_REF("vnsub;", 0x2282, 0x20d2),
2217
+ MULTI_CHAR_REF("vnsup;", 0x2283, 0x20d2),
2218
+ CHAR_REF("vopf;", 0x0001d567),
2219
+ CHAR_REF("vprop;", 0x221d),
2220
+ CHAR_REF("vrtri;", 0x22b3),
2221
+ CHAR_REF("vscr;", 0x0001d4cb),
2222
+ MULTI_CHAR_REF("vsubnE;", 0x2acb, 0xfe00),
2223
+ MULTI_CHAR_REF("vsubne;", 0x228a, 0xfe00),
2224
+ MULTI_CHAR_REF("vsupnE;", 0x2acc, 0xfe00),
2225
+ MULTI_CHAR_REF("vsupne;", 0x228b, 0xfe00),
2226
+ CHAR_REF("vzigzag;", 0x299a),
2227
+ CHAR_REF("wcirc;", 0x0175),
2228
+ CHAR_REF("wedbar;", 0x2a5f),
2229
+ CHAR_REF("wedge;", 0x2227),
2230
+ CHAR_REF("wedgeq;", 0x2259),
2231
+ CHAR_REF("weierp;", 0x2118),
2232
+ CHAR_REF("wfr;", 0x0001d534),
2233
+ CHAR_REF("wopf;", 0x0001d568),
2234
+ CHAR_REF("wp;", 0x2118),
2235
+ CHAR_REF("wr;", 0x2240),
2236
+ CHAR_REF("wreath;", 0x2240),
2237
+ CHAR_REF("wscr;", 0x0001d4cc),
2238
+ CHAR_REF("xcap;", 0x22c2),
2239
+ CHAR_REF("xcirc;", 0x25ef),
2240
+ CHAR_REF("xcup;", 0x22c3),
2241
+ CHAR_REF("xdtri;", 0x25bd),
2242
+ CHAR_REF("xfr;", 0x0001d535),
2243
+ CHAR_REF("xhArr;", 0x27fa),
2244
+ CHAR_REF("xharr;", 0x27f7),
2245
+ CHAR_REF("xi;", 0x03be),
2246
+ CHAR_REF("xlArr;", 0x27f8),
2247
+ CHAR_REF("xlarr;", 0x27f5),
2248
+ CHAR_REF("xmap;", 0x27fc),
2249
+ CHAR_REF("xnis;", 0x22fb),
2250
+ CHAR_REF("xodot;", 0x2a00),
2251
+ CHAR_REF("xopf;", 0x0001d569),
2252
+ CHAR_REF("xoplus;", 0x2a01),
2253
+ CHAR_REF("xotime;", 0x2a02),
2254
+ CHAR_REF("xrArr;", 0x27f9),
2255
+ CHAR_REF("xrarr;", 0x27f6),
2256
+ CHAR_REF("xscr;", 0x0001d4cd),
2257
+ CHAR_REF("xsqcup;", 0x2a06),
2258
+ CHAR_REF("xuplus;", 0x2a04),
2259
+ CHAR_REF("xutri;", 0x25b3),
2260
+ CHAR_REF("xvee;", 0x22c1),
2261
+ CHAR_REF("xwedge;", 0x22c0),
2262
+ CHAR_REF("yacute;", 0xfd),
2263
+ CHAR_REF("yacute", 0xfd),
2264
+ CHAR_REF("yacy;", 0x044f),
2265
+ CHAR_REF("ycirc;", 0x0177),
2266
+ CHAR_REF("ycy;", 0x044b),
2267
+ CHAR_REF("yen;", 0xa5),
2268
+ CHAR_REF("yen", 0xa5),
2269
+ CHAR_REF("yfr;", 0x0001d536),
2270
+ CHAR_REF("yicy;", 0x0457),
2271
+ CHAR_REF("yopf;", 0x0001d56a),
2272
+ CHAR_REF("yscr;", 0x0001d4ce),
2273
+ CHAR_REF("yucy;", 0x044e),
2274
+ CHAR_REF("yuml;", 0xff),
2275
+ CHAR_REF("yuml", 0xff),
2276
+ CHAR_REF("zacute;", 0x017a),
2277
+ CHAR_REF("zcaron;", 0x017e),
2278
+ CHAR_REF("zcy;", 0x0437),
2279
+ CHAR_REF("zdot;", 0x017c),
2280
+ CHAR_REF("zeetrf;", 0x2128),
2281
+ CHAR_REF("zeta;", 0x03b6),
2282
+ CHAR_REF("zfr;", 0x0001d537),
2283
+ CHAR_REF("zhcy;", 0x0436),
2284
+ CHAR_REF("zigrarr;", 0x21dd),
2285
+ CHAR_REF("zopf;", 0x0001d56b),
2286
+ CHAR_REF("zscr;", 0x0001d4cf),
2287
+ CHAR_REF("zwj;", 0x200d),
2288
+ CHAR_REF("zwnj;", 0x200c),
2289
+ // Terminator.
2290
+ CHAR_REF("", -1)
2291
+ };
2292
+
2293
+ // Table of replacement characters. The spec specifies that any occurrence of
2294
+ // the first character should be replaced by the second character, and a parse
2295
+ // error recorded.
2296
+ typedef struct {
2297
+ int from_char;
2298
+ int to_char;
2299
+ } CharReplacement;
2300
+
2301
+ static const CharReplacement kCharReplacements[] = {
2302
+ { 0x00, 0xfffd },
2303
+ { 0x0d, 0x000d },
2304
+ { 0x80, 0x20ac },
2305
+ { 0x81, 0x0081 },
2306
+ { 0x82, 0x201A },
2307
+ { 0x83, 0x0192 },
2308
+ { 0x84, 0x201E },
2309
+ { 0x85, 0x2026 },
2310
+ { 0x86, 0x2020 },
2311
+ { 0x87, 0x2021 },
2312
+ { 0x88, 0x02C6 },
2313
+ { 0x89, 0x2030 },
2314
+ { 0x8A, 0x0160 },
2315
+ { 0x8B, 0x2039 },
2316
+ { 0x8C, 0x0152 },
2317
+ { 0x8D, 0x008D },
2318
+ { 0x8E, 0x017D },
2319
+ { 0x8F, 0x008F },
2320
+ { 0x90, 0x0090 },
2321
+ { 0x91, 0x2018 },
2322
+ { 0x92, 0x2019 },
2323
+ { 0x93, 0x201C },
2324
+ { 0x94, 0x201D },
2325
+ { 0x95, 0x2022 },
2326
+ { 0x96, 0x2013 },
2327
+ { 0x97, 0x2014 },
2328
+ { 0x98, 0x02DC },
2329
+ { 0x99, 0x2122 },
2330
+ { 0x9A, 0x0161 },
2331
+ { 0x9B, 0x203A },
2332
+ { 0x9C, 0x0153 },
2333
+ { 0x9D, 0x009D },
2334
+ { 0x9E, 0x017E },
2335
+ { 0x9F, 0x0178 },
2336
+ // Terminator.
2337
+ { -1, -1 }
2338
+ };
2339
+
2340
+ static int parse_digit(int c, bool allow_hex) {
2341
+ if (c >= '0' && c <= '9') {
2342
+ return c - '0';
2343
+ }
2344
+ if (allow_hex && c >= 'a' && c <= 'f') {
2345
+ return c - 'a' + 10;
2346
+ }
2347
+ if (allow_hex && c >= 'A' && c <= 'F') {
2348
+ return c - 'A' + 10;
2349
+ }
2350
+ return -1;
2351
+ }
2352
+
2353
+ static void add_no_digit_error(
2354
+ struct _GumboParser* parser, Utf8Iterator* input) {
2355
+ GumboError* error = gumbo_add_error(parser);
2356
+ if (!error) {
2357
+ return;
2358
+ }
2359
+ utf8iterator_fill_error_at_mark(input, error);
2360
+ error->type = GUMBO_ERR_NUMERIC_CHAR_REF_NO_DIGITS;
2361
+ }
2362
+
2363
+ static void add_codepoint_error(
2364
+ struct _GumboParser* parser, Utf8Iterator* input,
2365
+ GumboErrorType type, int codepoint) {
2366
+ GumboError* error = gumbo_add_error(parser);
2367
+ if (!error) {
2368
+ return;
2369
+ }
2370
+ utf8iterator_fill_error_at_mark(input, error);
2371
+ error->type = type;
2372
+ error->v.codepoint = codepoint;
2373
+ }
2374
+
2375
+ static void add_named_reference_error(
2376
+ struct _GumboParser* parser, Utf8Iterator* input,
2377
+ GumboErrorType type, GumboStringPiece text) {
2378
+ GumboError* error = gumbo_add_error(parser);
2379
+ if (!error) {
2380
+ return;
2381
+ }
2382
+ utf8iterator_fill_error_at_mark(input, error);
2383
+ error->type = type;
2384
+ error->v.text = text;
2385
+ }
2386
+
2387
+ static int maybe_replace_codepoint(int codepoint) {
2388
+ for (int i = 0; kCharReplacements[i].from_char != -1; ++i) {
2389
+ if (kCharReplacements[i].from_char == codepoint) {
2390
+ return kCharReplacements[i].to_char;
2391
+ }
2392
+ }
2393
+ return -1;
2394
+ }
2395
+
2396
+ static bool consume_numeric_ref(
2397
+ struct _GumboParser* parser, Utf8Iterator* input, int* output) {
2398
+ utf8iterator_next(input);
2399
+ bool is_hex = false;
2400
+ int c = utf8iterator_current(input);
2401
+ if (c == 'x' || c == 'X') {
2402
+ is_hex = true;
2403
+ utf8iterator_next(input);
2404
+ c = utf8iterator_current(input);
2405
+ }
2406
+
2407
+ int digit = parse_digit(c, is_hex);
2408
+ if (digit == -1) {
2409
+ // First digit was invalid; add a parse error and return.
2410
+ add_no_digit_error(parser, input);
2411
+ utf8iterator_reset(input);
2412
+ *output = kGumboNoChar;
2413
+ return false;
2414
+ }
2415
+
2416
+ int codepoint = 0;
2417
+ bool status = true;
2418
+ do {
2419
+ codepoint = (codepoint * (is_hex ? 16 : 10)) + digit;
2420
+ utf8iterator_next(input);
2421
+ digit = parse_digit(utf8iterator_current(input), is_hex);
2422
+ } while (digit != -1);
2423
+
2424
+ if (utf8iterator_current(input) != ';') {
2425
+ add_codepoint_error(
2426
+ parser, input, GUMBO_ERR_NUMERIC_CHAR_REF_WITHOUT_SEMICOLON, codepoint);
2427
+ status = false;
2428
+ } else {
2429
+ utf8iterator_next(input);
2430
+ }
2431
+
2432
+ int replacement = maybe_replace_codepoint(codepoint);
2433
+ if (replacement != -1) {
2434
+ add_codepoint_error(
2435
+ parser, input, GUMBO_ERR_NUMERIC_CHAR_REF_INVALID, codepoint);
2436
+ *output = replacement;
2437
+ return false;
2438
+ }
2439
+
2440
+ if ((codepoint >= 0xd800 && codepoint <= 0xdfff) || codepoint > 0x10ffff) {
2441
+ add_codepoint_error(
2442
+ parser, input, GUMBO_ERR_NUMERIC_CHAR_REF_INVALID, codepoint);
2443
+ *output = 0xfffd;
2444
+ return false;
2445
+ }
2446
+
2447
+ if (utf8_is_invalid_code_point(codepoint) || codepoint == 0xb) {
2448
+ add_codepoint_error(
2449
+ parser, input, GUMBO_ERR_NUMERIC_CHAR_REF_INVALID, codepoint);
2450
+ status = false;
2451
+ // But return it anyway, per spec.
2452
+ }
2453
+ *output = codepoint;
2454
+ return status;
2455
+ }
2456
+
2457
+ static const NamedCharRef* find_named_char_ref(Utf8Iterator* input) {
2458
+ for (int i = 0; kNamedEntities[i].codepoints.first != -1; ++i) {
2459
+ const NamedCharRef* current = &kNamedEntities[i];
2460
+ assert(strlen(current->name) == current->length);
2461
+ if (utf8iterator_maybe_consume_match(
2462
+ input, current->name, current->length, true)) {
2463
+ assert(current->name != NULL);
2464
+ assert(current->length > 0);
2465
+ assert(current->codepoints.first != kGumboNoChar);
2466
+ return current;
2467
+ }
2468
+ }
2469
+ return NULL;
2470
+ }
2471
+
2472
+ static bool is_legal_attribute_char_next(Utf8Iterator* input) {
2473
+ int c = utf8iterator_current(input);
2474
+ return c == '=' || isalnum(c);
2475
+ }
2476
+
2477
+ static bool maybe_add_invalid_named_reference(
2478
+ struct _GumboParser* parser, Utf8Iterator* input) {
2479
+ // The iterator will always be reset in this code path, so we don't need to
2480
+ // worry about consuming characters.
2481
+ const char* start = utf8iterator_get_char_pointer(input);
2482
+ int c = utf8iterator_current(input);
2483
+ while ((c >= 'a' && c <= 'z') ||
2484
+ (c >= 'A' && c <= 'Z') ||
2485
+ (c >= '0' && c <= '9')) {
2486
+ utf8iterator_next(input);
2487
+ c = utf8iterator_current(input);
2488
+ }
2489
+ if (c == ';') {
2490
+ GumboStringPiece bad_ref;
2491
+ bad_ref.data = start;
2492
+ bad_ref.length = utf8iterator_get_char_pointer(input) - start;
2493
+ add_named_reference_error(
2494
+ parser, input, GUMBO_ERR_NAMED_CHAR_REF_INVALID, bad_ref);
2495
+ return false;
2496
+ }
2497
+ return true;
2498
+ }
2499
+
2500
+ static bool consume_named_ref(
2501
+ struct _GumboParser* parser, Utf8Iterator* input, bool is_in_attribute,
2502
+ OneOrTwoCodepoints* output) {
2503
+ assert(output->first == kGumboNoChar);
2504
+ const NamedCharRef* char_ref = find_named_char_ref(input);
2505
+ if (char_ref) {
2506
+ assert(char_ref->length == strlen(char_ref->name));
2507
+ char last_char = char_ref->name[char_ref->length - 1];
2508
+ if (last_char == ';') {
2509
+ *output = char_ref->codepoints;
2510
+ assert(output->first != kGumboNoChar);
2511
+ return true;
2512
+ } else if (is_in_attribute && is_legal_attribute_char_next(input)) {
2513
+ utf8iterator_reset(input);
2514
+ return true;
2515
+ } else {
2516
+ GumboStringPiece bad_ref;
2517
+ bad_ref.data = char_ref->name;
2518
+ bad_ref.length = char_ref->length;
2519
+ add_named_reference_error(
2520
+ parser, input, GUMBO_ERR_NAMED_CHAR_REF_WITHOUT_SEMICOLON, bad_ref);
2521
+ *output = char_ref->codepoints;
2522
+ assert(output->first != kGumboNoChar);
2523
+ return false;
2524
+ }
2525
+ } else {
2526
+ bool status = maybe_add_invalid_named_reference(parser, input);
2527
+ utf8iterator_reset(input);
2528
+ return status;
2529
+ }
2530
+ }
2531
+
2532
+ bool consume_char_ref(
2533
+ struct _GumboParser* parser, struct _Utf8Iterator* input,
2534
+ int additional_allowed_char, bool is_in_attribute,
2535
+ OneOrTwoCodepoints* output) {
2536
+ utf8iterator_mark(input);
2537
+ utf8iterator_next(input);
2538
+ int c = utf8iterator_current(input);
2539
+ output->first = kGumboNoChar;
2540
+ output->second = kGumboNoChar;
2541
+ if (c == additional_allowed_char) {
2542
+ utf8iterator_reset(input);
2543
+ output->first = kGumboNoChar;
2544
+ return true;
2545
+ }
2546
+ switch (utf8iterator_current(input)) {
2547
+ case '\t':
2548
+ case '\n':
2549
+ case '\f':
2550
+ case ' ':
2551
+ case '<':
2552
+ case '&':
2553
+ case -1:
2554
+ utf8iterator_reset(input);
2555
+ return true;
2556
+ case '#':
2557
+ return consume_numeric_ref(parser, input, &output->first);
2558
+ default:
2559
+ return consume_named_ref(parser, input, is_in_attribute, output);
2560
+ }
2561
+ }