]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/tcs/html.c
awk: make empty FS unicodely-correct.
[plan9front.git] / sys / src / cmd / tcs / html.c
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 #include "hdr.h"
5 #include "conv.h"
6
7 typedef struct Hchar Hchar;
8 struct Hchar
9 {
10         char *s;
11         Rune r;
12 };
13
14 /*
15  * Names beginning with _ are names we recognize
16  * (without the underscore) but will not generate,
17  * because they are nonstandard.
18  */
19 static Hchar byname[] =
20 {
21         {"AElig", 198},
22         {"Aacute", 193},
23         {"Abreve", 258},
24         {"Acirc", 194},
25         {"Acy", 1040},
26         {"Agrave", 192},
27         {"Alpha", 913},
28         {"Amacr", 256},
29         {"And", 10835},
30         {"Aogon", 260},
31         {"ApplyFunction", 8289},
32         {"Aring", 197},
33         {"Assign", 8788},
34         {"Atilde", 195},
35         {"Auml", 196},
36         {"Backslash", 8726},
37         {"Barv", 10983},
38         {"Barwed", 8966},
39         {"Bcy", 1041},
40         {"Because", 8757},
41         {"Bernoullis", 8492},
42         {"Beta", 914},
43         {"Breve", 728},
44         {"Bscr", 8492},
45         {"Bumpeq", 8782},
46         {"CHcy", 1063},
47         {"Cacute", 262},
48         {"Cap", 8914},
49         {"CapitalDifferentialD", 8517},
50         {"Cayleys", 8493},
51         {"Ccaron", 268},
52         {"Ccedil", 199},
53         {"Ccirc", 264},
54         {"Cconint", 8752},
55         {"Cdot", 266},
56         {"Cedilla", 184},
57         {"CenterDot", 183},
58         {"Cfr", 8493},
59         {"Chi", 935},
60         {"CircleDot", 8857},
61         {"CircleMinus", 8854},
62         {"CirclePlus", 8853},
63         {"CircleTimes", 8855},
64         {"ClockwiseContourIntegral", 8754},
65         {"CloseCurlyDoubleQuote", 8221},
66         {"CloseCurlyQuote", 8217},
67         {"Colon", 8759},
68         {"Colone", 10868},
69         {"Congruent", 8801},
70         {"Conint", 8751},
71         {"ContourIntegral", 8750},
72         {"Copf", 8450},
73         {"Coproduct", 8720},
74         {"CounterClockwiseContourIntegral", 8755},
75         {"Cross", 10799},
76         {"Cup", 8915},
77         {"CupCap", 8781},
78         {"DD", 8517},
79         {"DDotrahd", 10513},
80         {"DJcy", 1026},
81         {"DScy", 1029},
82         {"DZcy", 1039},
83         {"Dagger", 8225},
84         {"Darr", 8609},
85         {"Dashv", 10980},
86         {"Dcaron", 270},
87         {"Dcy", 1044},
88         {"Del", 8711},
89         {"Delta", 916},
90         {"DiacriticalAcute", 180},
91         {"DiacriticalDot", 729},
92         {"DiacriticalDoubleAcute", 733},
93         {"DiacriticalGrave", 96},
94         {"DiacriticalTilde", 732},
95         {"Diamond", 8900},
96         {"DifferentialD", 8518},
97         {"Dot", 168},
98         {"DotDot", 8412},
99         {"DotEqual", 8784},
100         {"DoubleContourIntegral", 8751},
101         {"DoubleDot", 168},
102         {"DoubleDownArrow", 8659},
103         {"DoubleLeftArrow", 8656},
104         {"DoubleLeftRightArrow", 8660},
105         {"DoubleLeftTee", 10980},
106         {"DoubleLongLeftArrow", 10232},
107         {"DoubleLongLeftRightArrow", 10234},
108         {"DoubleLongRightArrow", 10233},
109         {"DoubleRightArrow", 8658},
110         {"DoubleRightTee", 8872},
111         {"DoubleUpArrow", 8657},
112         {"DoubleUpDownArrow", 8661},
113         {"DoubleVerticalBar", 8741},
114         {"DownArrow", 8595},
115         {"DownArrowBar", 10515},
116         {"DownArrowUpArrow", 8693},
117         {"DownBreve", 785},
118         {"DownLeftRightVector", 10576},
119         {"DownLeftTeeVector", 10590},
120         {"DownLeftVector", 8637},
121         {"DownLeftVectorBar", 10582},
122         {"DownRightTeeVector", 10591},
123         {"DownRightVector", 8641},
124         {"DownRightVectorBar", 10583},
125         {"DownTee", 8868},
126         {"DownTeeArrow", 8615},
127         {"Downarrow", 8659},
128         {"Dstrok", 272},
129         {"ENG", 330},
130         {"ETH", 208},
131         {"Eacute", 201},
132         {"Ecaron", 282},
133         {"Ecirc", 202},
134         {"Ecy", 1069},
135         {"Edot", 278},
136         {"Egrave", 200},
137         {"Element", 8712},
138         {"Emacr", 274},
139         {"EmptySmallSquare", 9723},
140         {"EmptyVerySmallSquare", 9643},
141         {"Eogon", 280},
142         {"Epsilon", 917},
143         {"Equal", 10869},
144         {"EqualTilde", 8770},
145         {"Equilibrium", 8652},
146         {"Escr", 8496},
147         {"Esim", 10867},
148         {"Eta", 919},
149         {"Euml", 203},
150         {"Exists", 8707},
151         {"ExponentialE", 8519},
152         {"Fcy", 1060},
153         {"FilledSmallSquare", 9724},
154         {"FilledVerySmallSquare", 9642},
155         {"ForAll", 8704},
156         {"Fouriertrf", 8497},
157         {"Fscr", 8497},
158         {"GJcy", 1027},
159         {"Gamma", 915},
160         {"Gammad", 988},
161         {"Gbreve", 286},
162         {"Gcedil", 290},
163         {"Gcirc", 284},
164         {"Gcy", 1043},
165         {"Gdot", 288},
166         {"Gg", 8921},
167         {"GreaterEqual", 8805},
168         {"GreaterEqualLess", 8923},
169         {"GreaterFullEqual", 8807},
170         {"GreaterGreater", 10914},
171         {"GreaterLess", 8823},
172         {"GreaterSlantEqual", 10878},
173         {"GreaterTilde", 8819},
174         {"Gt", 8811},
175         {"HARDcy", 1066},
176         {"Hacek", 711},
177         {"Hat", 94},
178         {"Hcirc", 292},
179         {"Hfr", 8460},
180         {"HilbertSpace", 8459},
181         {"Hopf", 8461},
182         {"HorizontalLine", 9472},
183         {"Hscr", 8459},
184         {"Hstrok", 294},
185         {"HumpDownHump", 8782},
186         {"HumpEqual", 8783},
187         {"IEcy", 1045},
188         {"IJlig", 306},
189         {"IOcy", 1025},
190         {"Iacute", 205},
191         {"Icirc", 206},
192         {"Icy", 1048},
193         {"Idot", 304},
194         {"Ifr", 8465},
195         {"Igrave", 204},
196         {"Im", 8465},
197         {"Imacr", 298},
198         {"ImaginaryI", 8520},
199         {"Implies", 8658},
200         {"Int", 8748},
201         {"Integral", 8747},
202         {"Intersection", 8898},
203         {"InvisibleComma", 8291},
204         {"InvisibleTimes", 8290},
205         {"Iogon", 302},
206         {"Iota", 921},
207         {"Iscr", 8464},
208         {"Itilde", 296},
209         {"Iukcy", 1030},
210         {"Iuml", 207},
211         {"Jcirc", 308},
212         {"Jcy", 1049},
213         {"Jsercy", 1032},
214         {"Jukcy", 1028},
215         {"KHcy", 1061},
216         {"KJcy", 1036},
217         {"Kappa", 922},
218         {"Kcedil", 310},
219         {"Kcy", 1050},
220         {"LJcy", 1033},
221         {"Lacute", 313},
222         {"Lambda", 923},
223         {"Lang", 10218},
224         {"Laplacetrf", 8466},
225         {"Larr", 8606},
226         {"Lcaron", 317},
227         {"Lcedil", 315},
228         {"Lcy", 1051},
229         {"LeftAngleBracket", 10216},
230         {"LeftArrow", 8592},
231         {"LeftArrowBar", 8676},
232         {"LeftArrowRightArrow", 8646},
233         {"LeftCeiling", 8968},
234         {"LeftDoubleBracket", 10214},
235         {"LeftDownTeeVector", 10593},
236         {"LeftDownVector", 8643},
237         {"LeftDownVectorBar", 10585},
238         {"LeftFloor", 8970},
239         {"LeftRightArrow", 8596},
240         {"LeftRightVector", 10574},
241         {"LeftTee", 8867},
242         {"LeftTeeArrow", 8612},
243         {"LeftTeeVector", 10586},
244         {"LeftTriangle", 8882},
245         {"LeftTriangleBar", 10703},
246         {"LeftTriangleEqual", 8884},
247         {"LeftUpDownVector", 10577},
248         {"LeftUpTeeVector", 10592},
249         {"LeftUpVector", 8639},
250         {"LeftUpVectorBar", 10584},
251         {"LeftVector", 8636},
252         {"LeftVectorBar", 10578},
253         {"Leftarrow", 8656},
254         {"Leftrightarrow", 8660},
255         {"LessEqualGreater", 8922},
256         {"LessFullEqual", 8806},
257         {"LessGreater", 8822},
258         {"LessLess", 10913},
259         {"LessSlantEqual", 10877},
260         {"LessTilde", 8818},
261         {"Ll", 8920},
262         {"Lleftarrow", 8666},
263         {"Lmidot", 319},
264         {"LongLeftArrow", 10229},
265         {"LongLeftRightArrow", 10231},
266         {"LongRightArrow", 10230},
267         {"Longleftarrow", 10232},
268         {"Longleftrightarrow", 10234},
269         {"Longrightarrow", 10233},
270         {"LowerLeftArrow", 8601},
271         {"LowerRightArrow", 8600},
272         {"Lscr", 8466},
273         {"Lsh", 8624},
274         {"Lstrok", 321},
275         {"Lt", 8810},
276         {"Map", 10501},
277         {"Mcy", 1052},
278         {"MediumSpace", 8287},
279         {"Mellintrf", 8499},
280         {"MinusPlus", 8723},
281         {"Mscr", 8499},
282         {"Mu", 924},
283         {"NJcy", 1034},
284         {"Nacute", 323},
285         {"Ncaron", 327},
286         {"Ncedil", 325},
287         {"Ncy", 1053},
288         {"NegativeMediumSpace", 8203},
289         {"NegativeThickSpace", 8203},
290         {"NegativeThinSpace", 8203},
291         {"NegativeVeryThinSpace", 8203},
292         {"NestedGreaterGreater", 8811},
293         {"NestedLessLess", 8810},
294         {"NewLine", 10},
295         {"NoBreak", 8288},
296         {"NonBreakingSpace", 160},
297         {"Nopf", 8469},
298         {"Not", 10988},
299         {"NotCongruent", 8802},
300         {"NotCupCap", 8813},
301         {"NotDoubleVerticalBar", 8742},
302         {"NotElement", 8713},
303         {"NotEqual", 8800},
304         {"NotEqualTilde", 8770},
305         {"NotExists", 8708},
306         {"NotGreater", 8815},
307         {"NotGreaterEqual", 8817},
308         {"NotGreaterFullEqual", 8807},
309         {"NotGreaterGreater", 8811},
310         {"NotGreaterLess", 8825},
311         {"NotGreaterSlantEqual", 10878},
312         {"NotGreaterTilde", 8821},
313         {"NotHumpDownHump", 8782},
314         {"NotHumpEqual", 8783},
315         {"NotLeftTriangle", 8938},
316         {"NotLeftTriangleBar", 10703},
317         {"NotLeftTriangleEqual", 8940},
318         {"NotLess", 8814},
319         {"NotLessEqual", 8816},
320         {"NotLessGreater", 8824},
321         {"NotLessLess", 8810},
322         {"NotLessSlantEqual", 10877},
323         {"NotLessTilde", 8820},
324         {"NotNestedGreaterGreater", 10914},
325         {"NotNestedLessLess", 10913},
326         {"NotPrecedes", 8832},
327         {"NotPrecedesEqual", 10927},
328         {"NotPrecedesSlantEqual", 8928},
329         {"NotReverseElement", 8716},
330         {"NotRightTriangle", 8939},
331         {"NotRightTriangleBar", 10704},
332         {"NotRightTriangleEqual", 8941},
333         {"NotSquareSubset", 8847},
334         {"NotSquareSubsetEqual", 8930},
335         {"NotSquareSuperset", 8848},
336         {"NotSquareSupersetEqual", 8931},
337         {"NotSubset", 8834},
338         {"NotSubsetEqual", 8840},
339         {"NotSucceeds", 8833},
340         {"NotSucceedsEqual", 10928},
341         {"NotSucceedsSlantEqual", 8929},
342         {"NotSucceedsTilde", 8831},
343         {"NotSuperset", 8835},
344         {"NotSupersetEqual", 8841},
345         {"NotTilde", 8769},
346         {"NotTildeEqual", 8772},
347         {"NotTildeFullEqual", 8775},
348         {"NotTildeTilde", 8777},
349         {"NotVerticalBar", 8740},
350         {"Ntilde", 209},
351         {"Nu", 925},
352         {"OElig", 338},
353         {"Oacute", 211},
354         {"Ocirc", 212},
355         {"Ocy", 1054},
356         {"Odblac", 336},
357         {"Ograve", 210},
358         {"Omacr", 332},
359         {"Omega", 937},
360         {"Omicron", 927},
361         {"OpenCurlyDoubleQuote", 8220},
362         {"OpenCurlyQuote", 8216},
363         {"Or", 10836},
364         {"Oslash", 216},
365         {"Otilde", 213},
366         {"Otimes", 10807},
367         {"Ouml", 214},
368         {"OverBar", 8254},
369         {"OverBrace", 9182},
370         {"OverBracket", 9140},
371         {"OverParenthesis", 9180},
372         {"PartialD", 8706},
373         {"Pcy", 1055},
374         {"Phi", 934},
375         {"Pi", 928},
376         {"PlusMinus", 177},
377         {"Poincareplane", 8460},
378         {"Popf", 8473},
379         {"Pr", 10939},
380         {"Precedes", 8826},
381         {"PrecedesEqual", 10927},
382         {"PrecedesSlantEqual", 8828},
383         {"PrecedesTilde", 8830},
384         {"Prime", 8243},
385         {"Product", 8719},
386         {"Proportion", 8759},
387         {"Proportional", 8733},
388         {"Psi", 936},
389         {"Qopf", 8474},
390         {"RBarr", 10512},
391         {"Racute", 340},
392         {"Rang", 10219},
393         {"Rarr", 8608},
394         {"Rarrtl", 10518},
395         {"Rcaron", 344},
396         {"Rcedil", 342},
397         {"Rcy", 1056},
398         {"Re", 8476},
399         {"ReverseElement", 8715},
400         {"ReverseEquilibrium", 8651},
401         {"ReverseUpEquilibrium", 10607},
402         {"Rfr", 8476},
403         {"Rho", 929},
404         {"RightAngleBracket", 10217},
405         {"RightArrow", 8594},
406         {"RightArrowBar", 8677},
407         {"RightArrowLeftArrow", 8644},
408         {"RightCeiling", 8969},
409         {"RightDoubleBracket", 10215},
410         {"RightDownTeeVector", 10589},
411         {"RightDownVector", 8642},
412         {"RightDownVectorBar", 10581},
413         {"RightFloor", 8971},
414         {"RightTee", 8866},
415         {"RightTeeArrow", 8614},
416         {"RightTeeVector", 10587},
417         {"RightTriangle", 8883},
418         {"RightTriangleBar", 10704},
419         {"RightTriangleEqual", 8885},
420         {"RightUpDownVector", 10575},
421         {"RightUpTeeVector", 10588},
422         {"RightUpVector", 8638},
423         {"RightUpVectorBar", 10580},
424         {"RightVector", 8640},
425         {"RightVectorBar", 10579},
426         {"Rightarrow", 8658},
427         {"Ropf", 8477},
428         {"RoundImplies", 10608},
429         {"Rrightarrow", 8667},
430         {"Rscr", 8475},
431         {"Rsh", 8625},
432         {"RuleDelayed", 10740},
433         {"SHCHcy", 1065},
434         {"SHcy", 1064},
435         {"SOFTcy", 1068},
436         {"Sacute", 346},
437         {"Sc", 10940},
438         {"Scaron", 352},
439         {"Scedil", 350},
440         {"Scirc", 348},
441         {"Scy", 1057},
442         {"ShortDownArrow", 8595},
443         {"ShortLeftArrow", 8592},
444         {"ShortRightArrow", 8594},
445         {"ShortUpArrow", 8593},
446         {"Sigma", 931},
447         {"SmallCircle", 8728},
448         {"Sqrt", 8730},
449         {"Square", 9633},
450         {"SquareIntersection", 8851},
451         {"SquareSubset", 8847},
452         {"SquareSubsetEqual", 8849},
453         {"SquareSuperset", 8848},
454         {"SquareSupersetEqual", 8850},
455         {"SquareUnion", 8852},
456         {"Star", 8902},
457         {"Sub", 8912},
458         {"Subset", 8912},
459         {"SubsetEqual", 8838},
460         {"Succeeds", 8827},
461         {"SucceedsEqual", 10928},
462         {"SucceedsSlantEqual", 8829},
463         {"SucceedsTilde", 8831},
464         {"SuchThat", 8715},
465         {"Sum", 8721},
466         {"Sup", 8913},
467         {"Superset", 8835},
468         {"SupersetEqual", 8839},
469         {"Supset", 8913},
470         {"THORN", 222},
471         {"TSHcy", 1035},
472         {"TScy", 1062},
473         {"Tab", 9},
474         {"Tau", 932},
475         {"Tcaron", 356},
476         {"Tcedil", 354},
477         {"Tcy", 1058},
478         {"Therefore", 8756},
479         {"Theta", 920},
480         {"ThickSpace", 8287},
481         {"ThinSpace", 8201},
482         {"Tilde", 8764},
483         {"TildeEqual", 8771},
484         {"TildeFullEqual", 8773},
485         {"TildeTilde", 8776},
486         {"TripleDot", 8411},
487         {"Tstrok", 358},
488         {"Uacute", 218},
489         {"Uarr", 8607},
490         {"Uarrocir", 10569},
491         {"Ubrcy", 1038},
492         {"Ubreve", 364},
493         {"Ucirc", 219},
494         {"Ucy", 1059},
495         {"Udblac", 368},
496         {"Ugrave", 217},
497         {"Umacr", 362},
498         {"UnderBar", 95},
499         {"UnderBrace", 9183},
500         {"UnderBracket", 9141},
501         {"UnderParenthesis", 9181},
502         {"Union", 8899},
503         {"UnionPlus", 8846},
504         {"Uogon", 370},
505         {"UpArrow", 8593},
506         {"UpArrowBar", 10514},
507         {"UpArrowDownArrow", 8645},
508         {"UpDownArrow", 8597},
509         {"UpEquilibrium", 10606},
510         {"UpTee", 8869},
511         {"UpTeeArrow", 8613},
512         {"Uparrow", 8657},
513         {"Updownarrow", 8661},
514         {"UpperLeftArrow", 8598},
515         {"UpperRightArrow", 8599},
516         {"Upsi", 978},
517         {"Upsilon", 933},
518         {"Uring", 366},
519         {"Utilde", 360},
520         {"Uuml", 220},
521         {"VDash", 8875},
522         {"Vbar", 10987},
523         {"Vcy", 1042},
524         {"Vdash", 8873},
525         {"Vdashl", 10982},
526         {"Vee", 8897},
527         {"Verbar", 8214},
528         {"Vert", 8214},
529         {"VerticalBar", 8739},
530         {"VerticalLine", 124},
531         {"VerticalSeparator", 10072},
532         {"VerticalTilde", 8768},
533         {"VeryThinSpace", 8202},
534         {"Vvdash", 8874},
535         {"Wcirc", 372},
536         {"Wedge", 8896},
537         {"Xi", 926},
538         {"YAcy", 1071},
539         {"YIcy", 1031},
540         {"YUcy", 1070},
541         {"Yacute", 221},
542         {"Ycirc", 374},
543         {"Ycy", 1067},
544         {"Yuml", 376},
545         {"ZHcy", 1046},
546         {"Zacute", 377},
547         {"Zcaron", 381},
548         {"Zcy", 1047},
549         {"Zdot", 379},
550         {"ZeroWidthSpace", 8203},
551         {"Zeta", 918},
552         {"Zfr", 8488},
553         {"Zopf", 8484},
554         {"_AMP", 38},
555         {"_COPY", 169},
556         {"_GT", 62},
557         {"_LT", 60},
558         {"_QUOT", 34},
559         {"_REG", 174},
560         {"_TRADE", 8482},
561         {"_emdash", 8212},      /* non-standard but commonly used */
562         {"_endash", 8211},      /* non-standard but commonly used */
563         {"_ldots", 8230},
564         {"_sp", 8194},
565         {"_varepsilon", 1013},
566         {"_varpi", 982},
567         {"_vsigma", 962},
568         {"_vtheta", 977},
569         {"aacute", 225},
570         {"abreve", 259},
571         {"ac", 8766},
572         {"acE", 8766},
573         {"acd", 8767},
574         {"acirc", 226},
575         {"acute", 180},
576         {"acy", 1072},
577         {"aelig", 230},
578         {"af", 8289},
579         {"agrave", 224},
580         {"alefsym", 8501},
581         {"aleph", 8501},
582         {"alpha", 945},
583         {"amacr", 257},
584         {"amalg", 10815},
585         {"amp", 38},
586         {"and", 8743},
587         {"andand", 10837},
588         {"andd", 10844},
589         {"andslope", 10840},
590         {"andv", 10842},
591         {"ang", 8736},
592         {"ange", 10660},
593         {"angle", 8736},
594         {"angmsd", 8737},
595         {"angmsdaa", 10664},
596         {"angmsdab", 10665},
597         {"angmsdac", 10666},
598         {"angmsdad", 10667},
599         {"angmsdae", 10668},
600         {"angmsdaf", 10669},
601         {"angmsdag", 10670},
602         {"angmsdah", 10671},
603         {"angrt", 8735},
604         {"angrtvb", 8894},
605         {"angrtvbd", 10653},
606         {"angsph", 8738},
607         {"angst", 197},
608         {"angzarr", 9084},
609         {"aogon", 261},
610         {"ap", 8776},
611         {"apE", 10864},
612         {"apacir", 10863},
613         {"ape", 8778},
614         {"apid", 8779},
615         {"apos", 39},
616         {"approx", 8776},
617         {"approxeq", 8778},
618         {"aring", 229},
619         {"ast", 42},
620         {"asymp", 8776},
621         {"asympeq", 8781},
622         {"atilde", 227},
623         {"auml", 228},
624         {"awconint", 8755},
625         {"awint", 10769},
626         {"bNot", 10989},
627         {"backcong", 8780},
628         {"backepsilon", 1014},
629         {"backprime", 8245},
630         {"backsim", 8765},
631         {"backsimeq", 8909},
632         {"barvee", 8893},
633         {"barwed", 8965},
634         {"barwedge", 8965},
635         {"bbrk", 9141},
636         {"bbrktbrk", 9142},
637         {"bcong", 8780},
638         {"bcy", 1073},
639         {"bdquo", 8222},
640         {"becaus", 8757},
641         {"because", 8757},
642         {"bemptyv", 10672},
643         {"bepsi", 1014},
644         {"bernou", 8492},
645         {"beta", 946},
646         {"beth", 8502},
647         {"between", 8812},
648         {"bigcap", 8898},
649         {"bigcirc", 9711},
650         {"bigcup", 8899},
651         {"bigodot", 10752},
652         {"bigoplus", 10753},
653         {"bigotimes", 10754},
654         {"bigsqcup", 10758},
655         {"bigstar", 9733},
656         {"bigtriangledown", 9661},
657         {"bigtriangleup", 9651},
658         {"biguplus", 10756},
659         {"bigvee", 8897},
660         {"bigwedge", 8896},
661         {"bkarow", 10509},
662         {"blacklozenge", 10731},
663         {"blacksquare", 9642},
664         {"blacktriangle", 9652},
665         {"blacktriangledown", 9662},
666         {"blacktriangleleft", 9666},
667         {"blacktriangleright", 9656},
668         {"blank", 9251},
669         {"blk12", 9618},
670         {"blk14", 9617},
671         {"blk34", 9619},
672         {"block", 9608},
673         {"bne", 61},
674         {"bnequiv", 8801},
675         {"bnot", 8976},
676         {"bot", 8869},
677         {"bottom", 8869},
678         {"bowtie", 8904},
679         {"boxDL", 9559},
680         {"boxDR", 9556},
681         {"boxDl", 9558},
682         {"boxDr", 9555},
683         {"boxH", 9552},
684         {"boxHD", 9574},
685         {"boxHU", 9577},
686         {"boxHd", 9572},
687         {"boxHu", 9575},
688         {"boxUL", 9565},
689         {"boxUR", 9562},
690         {"boxUl", 9564},
691         {"boxUr", 9561},
692         {"boxV", 9553},
693         {"boxVH", 9580},
694         {"boxVL", 9571},
695         {"boxVR", 9568},
696         {"boxVh", 9579},
697         {"boxVl", 9570},
698         {"boxVr", 9567},
699         {"boxbox", 10697},
700         {"boxdL", 9557},
701         {"boxdR", 9554},
702         {"boxdl", 9488},
703         {"boxdr", 9484},
704         {"boxh", 9472},
705         {"boxhD", 9573},
706         {"boxhU", 9576},
707         {"boxhd", 9516},
708         {"boxhu", 9524},
709         {"boxminus", 8863},
710         {"boxplus", 8862},
711         {"boxtimes", 8864},
712         {"boxuL", 9563},
713         {"boxuR", 9560},
714         {"boxul", 9496},
715         {"boxur", 9492},
716         {"boxv", 9474},
717         {"boxvH", 9578},
718         {"boxvL", 9569},
719         {"boxvR", 9566},
720         {"boxvh", 9532},
721         {"boxvl", 9508},
722         {"boxvr", 9500},
723         {"bprime", 8245},
724         {"breve", 728},
725         {"brvbar", 166},
726         {"bsemi", 8271},
727         {"bsim", 8765},
728         {"bsime", 8909},
729         {"bsol", 92},
730         {"bsolb", 10693},
731         {"bsolhsub", 10184},
732         {"bull", 8226},
733         {"bullet", 8226},
734         {"bump", 8782},
735         {"bumpE", 10926},
736         {"bumpe", 8783},
737         {"bumpeq", 8783},
738         {"cacute", 263},
739         {"cap", 8745},
740         {"capand", 10820},
741         {"capbrcup", 10825},
742         {"capcap", 10827},
743         {"capcup", 10823},
744         {"capdot", 10816},
745         {"caps", 8745},
746         {"caret", 8257},
747         {"caron", 711},
748         {"ccaps", 10829},
749         {"ccaron", 269},
750         {"ccedil", 231},
751         {"ccirc", 265},
752         {"ccups", 10828},
753         {"ccupssm", 10832},
754         {"cdot", 267},
755         {"cdots", 8943},
756         {"cedil", 184},
757         {"cemptyv", 10674},
758         {"cent", 162},
759         {"centerdot", 183},
760         {"chcy", 1095},
761         {"check", 10003},
762         {"checkmark", 10003},
763         {"chi", 967},
764         {"cir", 9675},
765         {"cirE", 10691},
766         {"circ", 710},
767         {"circeq", 8791},
768         {"circlearrowleft", 8634},
769         {"circlearrowright", 8635},
770         {"circledR", 174},
771         {"circledS", 9416},
772         {"circledast", 8859},
773         {"circledcirc", 8858},
774         {"circleddash", 8861},
775         {"cire", 8791},
776         {"cirfnint", 10768},
777         {"cirmid", 10991},
778         {"cirscir", 10690},
779         {"clubs", 9827},
780         {"clubsuit", 9827},
781         {"colon", 58},
782         {"colone", 8788},
783         {"coloneq", 8788},
784         {"comma", 44},
785         {"commat", 64},
786         {"comp", 8705},
787         {"compfn", 8728},
788         {"complement", 8705},
789         {"complexes", 8450},
790         {"cong", 8773},
791         {"congdot", 10861},
792         {"conint", 8750},
793         {"coprod", 8720},
794         {"copy", 169},
795         {"copysr", 8471},
796         {"crarr", 8629},
797         {"cross", 10007},
798         {"csub", 10959},
799         {"csube", 10961},
800         {"csup", 10960},
801         {"csupe", 10962},
802         {"ctdot", 8943},
803         {"cudarrl", 10552},
804         {"cudarrr", 10549},
805         {"cuepr", 8926},
806         {"cuesc", 8927},
807         {"cularr", 8630},
808         {"cularrp", 10557},
809         {"cup", 8746},
810         {"cupbrcap", 10824},
811         {"cupcap", 10822},
812         {"cupcup", 10826},
813         {"cupdot", 8845},
814         {"cupor", 10821},
815         {"cups", 8746},
816         {"curarr", 8631},
817         {"curarrm", 10556},
818         {"curlyeqprec", 8926},
819         {"curlyeqsucc", 8927},
820         {"curlyvee", 8910},
821         {"curlywedge", 8911},
822         {"curren", 164},
823         {"curvearrowleft", 8630},
824         {"curvearrowright", 8631},
825         {"cuvee", 8910},
826         {"cuwed", 8911},
827         {"cwconint", 8754},
828         {"cwint", 8753},
829         {"cylcty", 9005},
830         {"dArr", 8659},
831         {"dHar", 10597},
832         {"dagger", 8224},
833         {"daleth", 8504},
834         {"darr", 8595},
835         {"dash", 8208},
836         {"dashv", 8867},
837         {"dbkarow", 10511},
838         {"dblac", 733},
839         {"dcaron", 271},
840         {"dcy", 1076},
841         {"dd", 8518},
842         {"ddagger", 8225},
843         {"ddarr", 8650},
844         {"ddots", 8945},
845         {"ddotseq", 10871},
846         {"deg", 176},
847         {"delta", 948},
848         {"demptyv", 10673},
849         {"dfisht", 10623},
850         {"dharl", 8643},
851         {"dharr", 8642},
852         {"diam", 8900},
853         {"diamond", 8900},
854         {"diamondsuit", 9830},
855         {"diams", 9830},
856         {"die", 168},
857         {"digamma", 989},
858         {"disin", 8946},
859         {"div", 247},
860         {"divide", 247},
861         {"divideontimes", 8903},
862         {"divonx", 8903},
863         {"djcy", 1106},
864         {"dlcorn", 8990},
865         {"dlcrop", 8973},
866         {"dollar", 36},
867         {"dot", 729},
868         {"doteq", 8784},
869         {"doteqdot", 8785},
870         {"dotminus", 8760},
871         {"dotplus", 8724},
872         {"dotsquare", 8865},
873         {"doublebarwedge", 8966},
874         {"downarrow", 8595},
875         {"downdownarrows", 8650},
876         {"downharpoonleft", 8643},
877         {"downharpoonright", 8642},
878         {"drbkarow", 10512},
879         {"drcorn", 8991},
880         {"drcrop", 8972},
881         {"dscy", 1109},
882         {"dsol", 10742},
883         {"dstrok", 273},
884         {"dtdot", 8945},
885         {"dtri", 9663},
886         {"dtrif", 9662},
887         {"duarr", 8693},
888         {"duhar", 10607},
889         {"dwangle", 10662},
890         {"dzcy", 1119},
891         {"dzigrarr", 10239},
892         {"eDDot", 10871},
893         {"eDot", 8785},
894         {"eacute", 233},
895         {"easter", 10862},
896         {"ecaron", 283},
897         {"ecir", 8790},
898         {"ecirc", 234},
899         {"ecolon", 8789},
900         {"ecy", 1101},
901         {"edot", 279},
902         {"ee", 8519},
903         {"efDot", 8786},
904         {"eg", 10906},
905         {"egrave", 232},
906         {"egs", 10902},
907         {"egsdot", 10904},
908         {"el", 10905},
909         {"elinters", 9191},
910         {"ell", 8467},
911         {"els", 10901},
912         {"elsdot", 10903},
913         {"emacr", 275},
914         {"empty", 8709},
915         {"emptyset", 8709},
916         {"emptyv", 8709},
917         {"emsp", 8195},
918         {"emsp13", 8196},
919         {"emsp14", 8197},
920         {"eng", 331},
921         {"ensp", 8194},
922         {"eogon", 281},
923         {"epar", 8917},
924         {"eparsl", 10723},
925         {"eplus", 10865},
926         {"epsi", 949},
927         {"epsilon", 949},
928         {"epsiv", 1013},
929         {"eqcirc", 8790},
930         {"eqcolon", 8789},
931         {"eqsim", 8770},
932         {"eqslantgtr", 10902},
933         {"eqslantless", 10901},
934         {"equals", 61},
935         {"equest", 8799},
936         {"equiv", 8801},
937         {"equivDD", 10872},
938         {"eqvparsl", 10725},
939         {"erDot", 8787},
940         {"erarr", 10609},
941         {"escr", 8495},
942         {"esdot", 8784},
943         {"esim", 8770},
944         {"eta", 951},
945         {"eth", 240},
946         {"euml", 235},
947         {"euro", 8364},
948         {"excl", 33},
949         {"exist", 8707},
950         {"expectation", 8496},
951         {"exponentiale", 8519},
952         {"fallingdotseq", 8786},
953         {"fcy", 1092},
954         {"female", 9792},
955         {"ffilig", 64259},
956         {"fflig", 64256},
957         {"ffllig", 64260},
958         {"filig", 64257},
959         {"fjlig", 102},
960         {"flat", 9837},
961         {"fllig", 64258},
962         {"fltns", 9649},
963         {"fnof", 402},
964         {"forall", 8704},
965         {"fork", 8916},
966         {"forkv", 10969},
967         {"fpartint", 10765},
968         {"frac12", 189},
969         {"frac13", 8531},
970         {"frac14", 188},
971         {"frac15", 8533},
972         {"frac16", 8537},
973         {"frac18", 8539},
974         {"frac23", 8532},
975         {"frac25", 8534},
976         {"frac34", 190},
977         {"frac35", 8535},
978         {"frac38", 8540},
979         {"frac45", 8536},
980         {"frac56", 8538},
981         {"frac58", 8541},
982         {"frac78", 8542},
983         {"frasl", 8260},
984         {"frown", 8994},
985         {"gE", 8807},
986         {"gEl", 10892},
987         {"gacute", 501},
988         {"gamma", 947},
989         {"gammad", 989},
990         {"gap", 10886},
991         {"gbreve", 287},
992         {"gcirc", 285},
993         {"gcy", 1075},
994         {"gdot", 289},
995         {"ge", 8805},
996         {"gel", 8923},
997         {"geq", 8805},
998         {"geqq", 8807},
999         {"geqslant", 10878},
1000         {"ges", 10878},
1001         {"gescc", 10921},
1002         {"gesdot", 10880},
1003         {"gesdoto", 10882},
1004         {"gesdotol", 10884},
1005         {"gesl", 8923},
1006         {"gesles", 10900},
1007         {"gg", 8811},
1008         {"ggg", 8921},
1009         {"gimel", 8503},
1010         {"gjcy", 1107},
1011         {"gl", 8823},
1012         {"glE", 10898},
1013         {"gla", 10917},
1014         {"glj", 10916},
1015         {"gnE", 8809},
1016         {"gnap", 10890},
1017         {"gnapprox", 10890},
1018         {"gne", 10888},
1019         {"gneq", 10888},
1020         {"gneqq", 8809},
1021         {"gnsim", 8935},
1022         {"grave", 96},
1023         {"gscr", 8458},
1024         {"gsim", 8819},
1025         {"gsime", 10894},
1026         {"gsiml", 10896},
1027         {"gt", 62},
1028         {"gtcc", 10919},
1029         {"gtcir", 10874},
1030         {"gtdot", 8919},
1031         {"gtlPar", 10645},
1032         {"gtquest", 10876},
1033         {"gtrapprox", 10886},
1034         {"gtrarr", 10616},
1035         {"gtrdot", 8919},
1036         {"gtreqless", 8923},
1037         {"gtreqqless", 10892},
1038         {"gtrless", 8823},
1039         {"gtrsim", 8819},
1040         {"gvertneqq", 8809},
1041         {"gvnE", 8809},
1042         {"hArr", 8660},
1043         {"hairsp", 8202},
1044         {"half", 189},
1045         {"hamilt", 8459},
1046         {"hardcy", 1098},
1047         {"harr", 8596},
1048         {"harrcir", 10568},
1049         {"harrw", 8621},
1050         {"hbar", 8463},
1051         {"hcirc", 293},
1052         {"hearts", 9829},
1053         {"heartsuit", 9829},
1054         {"hellip", 8230},
1055         {"hercon", 8889},
1056         {"hksearow", 10533},
1057         {"hkswarow", 10534},
1058         {"hoarr", 8703},
1059         {"homtht", 8763},
1060         {"hookleftarrow", 8617},
1061         {"hookrightarrow", 8618},
1062         {"horbar", 8213},
1063         {"hslash", 8463},
1064         {"hstrok", 295},
1065         {"hybull", 8259},
1066         {"hyphen", 8208},
1067         {"iacute", 237},
1068         {"ic", 8291},
1069         {"icirc", 238},
1070         {"icy", 1080},
1071         {"iecy", 1077},
1072         {"iexcl", 161},
1073         {"iff", 8660},
1074         {"igrave", 236},
1075         {"ii", 8520},
1076         {"iiiint", 10764},
1077         {"iiint", 8749},
1078         {"iinfin", 10716},
1079         {"iiota", 8489},
1080         {"ijlig", 307},
1081         {"imacr", 299},
1082         {"image", 8465},
1083         {"imagline", 8464},
1084         {"imagpart", 8465},
1085         {"imath", 305},
1086         {"imof", 8887},
1087         {"imped", 437},
1088         {"in", 8712},
1089         {"incare", 8453},
1090         {"infin", 8734},
1091         {"infintie", 10717},
1092         {"inodot", 305},
1093         {"int", 8747},
1094         {"intcal", 8890},
1095         {"integers", 8484},
1096         {"intercal", 8890},
1097         {"intlarhk", 10775},
1098         {"intprod", 10812},
1099         {"iocy", 1105},
1100         {"iogon", 303},
1101         {"iota", 953},
1102         {"iprod", 10812},
1103         {"iquest", 191},
1104         {"isin", 8712},
1105         {"isinE", 8953},
1106         {"isindot", 8949},
1107         {"isins", 8948},
1108         {"isinsv", 8947},
1109         {"isinv", 8712},
1110         {"it", 8290},
1111         {"itilde", 297},
1112         {"iukcy", 1110},
1113         {"iuml", 239},
1114         {"jcirc", 309},
1115         {"jcy", 1081},
1116         {"jmath", 567},
1117         {"jsercy", 1112},
1118         {"jukcy", 1108},
1119         {"kappa", 954},
1120         {"kappav", 1008},
1121         {"kcedil", 311},
1122         {"kcy", 1082},
1123         {"kgreen", 312},
1124         {"khcy", 1093},
1125         {"kjcy", 1116},
1126         {"lAarr", 8666},
1127         {"lArr", 8656},
1128         {"lAtail", 10523},
1129         {"lBarr", 10510},
1130         {"lE", 8806},
1131         {"lEg", 10891},
1132         {"lHar", 10594},
1133         {"lacute", 314},
1134         {"laemptyv", 10676},
1135         {"lagran", 8466},
1136         {"lambda", 955},
1137         {"lang", 10216},
1138         {"lang", 9001},
1139         {"langd", 10641},
1140         {"langle", 10216},
1141         {"lap", 10885},
1142         {"laquo", 171},
1143         {"larr", 8592},
1144         {"larrb", 8676},
1145         {"larrbfs", 10527},
1146         {"larrfs", 10525},
1147         {"larrhk", 8617},
1148         {"larrlp", 8619},
1149         {"larrpl", 10553},
1150         {"larrsim", 10611},
1151         {"larrtl", 8610},
1152         {"lat", 10923},
1153         {"latail", 10521},
1154         {"late", 10925},
1155         {"lates", 10925},
1156         {"lbarr", 10508},
1157         {"lbbrk", 10098},
1158         {"lbrace", 123},
1159         {"lbrack", 91},
1160         {"lbrke", 10635},
1161         {"lbrksld", 10639},
1162         {"lbrkslu", 10637},
1163         {"lcaron", 318},
1164         {"lcedil", 316},
1165         {"lceil", 8968},
1166         {"lcub", 123},
1167         {"lcy", 1083},
1168         {"ldca", 10550},
1169         {"ldquo", 8220},
1170         {"ldquor", 8222},
1171         {"ldrdhar", 10599},
1172         {"ldrushar", 10571},
1173         {"ldsh", 8626},
1174         {"le", 8804},
1175         {"leftarrow", 8592},
1176         {"leftarrowtail", 8610},
1177         {"leftharpoondown", 8637},
1178         {"leftharpoonup", 8636},
1179         {"leftleftarrows", 8647},
1180         {"leftrightarrow", 8596},
1181         {"leftrightarrows", 8646},
1182         {"leftrightharpoons", 8651},
1183         {"leftrightsquigarrow", 8621},
1184         {"leftthreetimes", 8907},
1185         {"leg", 8922},
1186         {"leq", 8804},
1187         {"leqq", 8806},
1188         {"leqslant", 10877},
1189         {"les", 10877},
1190         {"lescc", 10920},
1191         {"lesdot", 10879},
1192         {"lesdoto", 10881},
1193         {"lesdotor", 10883},
1194         {"lesg", 8922},
1195         {"lesges", 10899},
1196         {"lessapprox", 10885},
1197         {"lessdot", 8918},
1198         {"lesseqgtr", 8922},
1199         {"lesseqqgtr", 10891},
1200         {"lessgtr", 8822},
1201         {"lesssim", 8818},
1202         {"lfisht", 10620},
1203         {"lfloor", 8970},
1204         {"lg", 8822},
1205         {"lgE", 10897},
1206         {"lhard", 8637},
1207         {"lharu", 8636},
1208         {"lharul", 10602},
1209         {"lhblk", 9604},
1210         {"ljcy", 1113},
1211         {"ll", 8810},
1212         {"llarr", 8647},
1213         {"llcorner", 8990},
1214         {"llhard", 10603},
1215         {"lltri", 9722},
1216         {"lmidot", 320},
1217         {"lmoust", 9136},
1218         {"lmoustache", 9136},
1219         {"lnE", 8808},
1220         {"lnap", 10889},
1221         {"lnapprox", 10889},
1222         {"lne", 10887},
1223         {"lneq", 10887},
1224         {"lneqq", 8808},
1225         {"lnsim", 8934},
1226         {"loang", 10220},
1227         {"loarr", 8701},
1228         {"lobrk", 10214},
1229         {"longleftarrow", 10229},
1230         {"longleftrightarrow", 10231},
1231         {"longmapsto", 10236},
1232         {"longrightarrow", 10230},
1233         {"looparrowleft", 8619},
1234         {"looparrowright", 8620},
1235         {"lopar", 10629},
1236         {"loplus", 10797},
1237         {"lotimes", 10804},
1238         {"lowast", 8727},
1239         {"lowbar", 95},
1240         {"loz", 9674},
1241         {"lozenge", 9674},
1242         {"lozf", 10731},
1243         {"lpar", 40},
1244         {"lparlt", 10643},
1245         {"lrarr", 8646},
1246         {"lrcorner", 8991},
1247         {"lrhar", 8651},
1248         {"lrhard", 10605},
1249         {"lrm", 8206},
1250         {"lrtri", 8895},
1251         {"lsaquo", 8249},
1252         {"lsh", 8624},
1253         {"lsim", 8818},
1254         {"lsime", 10893},
1255         {"lsimg", 10895},
1256         {"lsqb", 91},
1257         {"lsquo", 8216},
1258         {"lsquor", 8218},
1259         {"lstrok", 322},
1260         {"lt", 60},
1261         {"ltcc", 10918},
1262         {"ltcir", 10873},
1263         {"ltdot", 8918},
1264         {"lthree", 8907},
1265         {"ltimes", 8905},
1266         {"ltlarr", 10614},
1267         {"ltquest", 10875},
1268         {"ltrPar", 10646},
1269         {"ltri", 9667},
1270         {"ltrie", 8884},
1271         {"ltrif", 9666},
1272         {"lurdshar", 10570},
1273         {"luruhar", 10598},
1274         {"lvertneqq", 8808},
1275         {"lvnE", 8808},
1276         {"mDDot", 8762},
1277         {"macr", 175},
1278         {"male", 9794},
1279         {"malt", 10016},
1280         {"maltese", 10016},
1281         {"map", 8614},
1282         {"mapsto", 8614},
1283         {"mapstodown", 8615},
1284         {"mapstoleft", 8612},
1285         {"mapstoup", 8613},
1286         {"marker", 9646},
1287         {"mcomma", 10793},
1288         {"mcy", 1084},
1289         {"mdash", 8212},
1290         {"measuredangle", 8737},
1291         {"mho", 8487},
1292         {"micro", 181},
1293         {"mid", 8739},
1294         {"midast", 42},
1295         {"midcir", 10992},
1296         {"middot", 183},
1297         {"minus", 8722},
1298         {"minusb", 8863},
1299         {"minusd", 8760},
1300         {"minusdu", 10794},
1301         {"mlcp", 10971},
1302         {"mldr", 8230},
1303         {"mnplus", 8723},
1304         {"models", 8871},
1305         {"mp", 8723},
1306         {"mstpos", 8766},
1307         {"mu", 956},
1308         {"multimap", 8888},
1309         {"mumap", 8888},
1310         {"nGg", 8921},
1311         {"nGt", 8811},
1312         {"nGtv", 8811},
1313         {"nLeftarrow", 8653},
1314         {"nLeftrightarrow", 8654},
1315         {"nLl", 8920},
1316         {"nLt", 8810},
1317         {"nLtv", 8810},
1318         {"nRightarrow", 8655},
1319         {"nVDash", 8879},
1320         {"nVdash", 8878},
1321         {"nabla", 8711},
1322         {"nacute", 324},
1323         {"nang", 8736},
1324         {"nap", 8777},
1325         {"napE", 10864},
1326         {"napid", 8779},
1327         {"napos", 329},
1328         {"napprox", 8777},
1329         {"natur", 9838},
1330         {"natural", 9838},
1331         {"naturals", 8469},
1332         {"nbsp", 160},
1333         {"nbump", 8782},
1334         {"nbumpe", 8783},
1335         {"ncap", 10819},
1336         {"ncaron", 328},
1337         {"ncedil", 326},
1338         {"ncong", 8775},
1339         {"ncongdot", 10861},
1340         {"ncup", 10818},
1341         {"ncy", 1085},
1342         {"ndash", 8211},
1343         {"ne", 8800},
1344         {"neArr", 8663},
1345         {"nearhk", 10532},
1346         {"nearr", 8599},
1347         {"nearrow", 8599},
1348         {"nedot", 8784},
1349         {"nequiv", 8802},
1350         {"nesear", 10536},
1351         {"nesim", 8770},
1352         {"nexist", 8708},
1353         {"nexists", 8708},
1354         {"ngE", 8807},
1355         {"nge", 8817},
1356         {"ngeq", 8817},
1357         {"ngeqq", 8807},
1358         {"ngeqslant", 10878},
1359         {"nges", 10878},
1360         {"ngsim", 8821},
1361         {"ngt", 8815},
1362         {"ngtr", 8815},
1363         {"nhArr", 8654},
1364         {"nharr", 8622},
1365         {"nhpar", 10994},
1366         {"ni", 8715},
1367         {"nis", 8956},
1368         {"nisd", 8954},
1369         {"niv", 8715},
1370         {"njcy", 1114},
1371         {"nlArr", 8653},
1372         {"nlE", 8806},
1373         {"nlarr", 8602},
1374         {"nldr", 8229},
1375         {"nle", 8816},
1376         {"nleftarrow", 8602},
1377         {"nleftrightarrow", 8622},
1378         {"nleq", 8816},
1379         {"nleqq", 8806},
1380         {"nleqslant", 10877},
1381         {"nles", 10877},
1382         {"nless", 8814},
1383         {"nlsim", 8820},
1384         {"nlt", 8814},
1385         {"nltri", 8938},
1386         {"nltrie", 8940},
1387         {"nmid", 8740},
1388         {"not", 172},
1389         {"notin", 8713},
1390         {"notinE", 8953},
1391         {"notindot", 8949},
1392         {"notinva", 8713},
1393         {"notinvb", 8951},
1394         {"notinvc", 8950},
1395         {"notni", 8716},
1396         {"notniva", 8716},
1397         {"notnivb", 8958},
1398         {"notnivc", 8957},
1399         {"npar", 8742},
1400         {"nparallel", 8742},
1401         {"nparsl", 11005},
1402         {"npart", 8706},
1403         {"npolint", 10772},
1404         {"npr", 8832},
1405         {"nprcue", 8928},
1406         {"npre", 10927},
1407         {"nprec", 8832},
1408         {"npreceq", 10927},
1409         {"nrArr", 8655},
1410         {"nrarr", 8603},
1411         {"nrarrc", 10547},
1412         {"nrarrw", 8605},
1413         {"nrightarrow", 8603},
1414         {"nrtri", 8939},
1415         {"nrtrie", 8941},
1416         {"nsc", 8833},
1417         {"nsccue", 8929},
1418         {"nsce", 10928},
1419         {"nshortmid", 8740},
1420         {"nshortparallel", 8742},
1421         {"nsim", 8769},
1422         {"nsime", 8772},
1423         {"nsimeq", 8772},
1424         {"nsmid", 8740},
1425         {"nspar", 8742},
1426         {"nsqsube", 8930},
1427         {"nsqsupe", 8931},
1428         {"nsub", 8836},
1429         {"nsubE", 10949},
1430         {"nsube", 8840},
1431         {"nsubset", 8834},
1432         {"nsubseteq", 8840},
1433         {"nsubseteqq", 10949},
1434         {"nsucc", 8833},
1435         {"nsucceq", 10928},
1436         {"nsup", 8837},
1437         {"nsupE", 10950},
1438         {"nsupe", 8841},
1439         {"nsupset", 8835},
1440         {"nsupseteq", 8841},
1441         {"nsupseteqq", 10950},
1442         {"ntgl", 8825},
1443         {"ntilde", 241},
1444         {"ntlg", 8824},
1445         {"ntriangleleft", 8938},
1446         {"ntrianglelefteq", 8940},
1447         {"ntriangleright", 8939},
1448         {"ntrianglerighteq", 8941},
1449         {"nu", 957},
1450         {"num", 35},
1451         {"numero", 8470},
1452         {"numsp", 8199},
1453         {"nvDash", 8877},
1454         {"nvHarr", 10500},
1455         {"nvap", 8781},
1456         {"nvdash", 8876},
1457         {"nvge", 8805},
1458         {"nvgt", 62},
1459         {"nvinfin", 10718},
1460         {"nvlArr", 10498},
1461         {"nvle", 8804},
1462         {"nvlt", 60},
1463         {"nvltrie", 8884},
1464         {"nvrArr", 10499},
1465         {"nvrtrie", 8885},
1466         {"nvsim", 8764},
1467         {"nwArr", 8662},
1468         {"nwarhk", 10531},
1469         {"nwarr", 8598},
1470         {"nwarrow", 8598},
1471         {"nwnear", 10535},
1472         {"oS", 9416},
1473         {"oacute", 243},
1474         {"oast", 8859},
1475         {"ocir", 8858},
1476         {"ocirc", 244},
1477         {"ocy", 1086},
1478         {"odash", 8861},
1479         {"odblac", 337},
1480         {"odiv", 10808},
1481         {"odot", 8857},
1482         {"odsold", 10684},
1483         {"oelig", 339},
1484         {"ofcir", 10687},
1485         {"ogon", 731},
1486         {"ograve", 242},
1487         {"ogt", 10689},
1488         {"ohbar", 10677},
1489         {"ohm", 937},
1490         {"oint", 8750},
1491         {"olarr", 8634},
1492         {"olcir", 10686},
1493         {"olcross", 10683},
1494         {"oline", 8254},
1495         {"olt", 10688},
1496         {"omacr", 333},
1497         {"omega", 969},
1498         {"omicron", 959},
1499         {"omid", 10678},
1500         {"ominus", 8854},
1501         {"opar", 10679},
1502         {"operp", 10681},
1503         {"oplus", 8853},
1504         {"or", 8744},
1505         {"orarr", 8635},
1506         {"ord", 10845},
1507         {"order", 8500},
1508         {"orderof", 8500},
1509         {"ordf", 170},
1510         {"ordm", 186},
1511         {"origof", 8886},
1512         {"oror", 10838},
1513         {"orslope", 10839},
1514         {"orv", 10843},
1515         {"oscr", 8500},
1516         {"oslash", 248},
1517         {"osol", 8856},
1518         {"otilde", 245},
1519         {"otimes", 8855},
1520         {"otimesas", 10806},
1521         {"ouml", 246},
1522         {"ovbar", 9021},
1523         {"par", 8741},
1524         {"para", 182},
1525         {"parallel", 8741},
1526         {"parsim", 10995},
1527         {"parsl", 11005},
1528         {"part", 8706},
1529         {"pcy", 1087},
1530         {"percnt", 37},
1531         {"period", 46},
1532         {"permil", 8240},
1533         {"perp", 8869},
1534         {"pertenk", 8241},
1535         {"phi", 966},
1536         {"phiv", 981},
1537         {"phmmat", 8499},
1538         {"phone", 9742},
1539         {"pi", 960},
1540         {"pitchfork", 8916},
1541         {"piv", 982},
1542         {"planck", 8463},
1543         {"planckh", 8462},
1544         {"plankv", 8463},
1545         {"plus", 43},
1546         {"plusacir", 10787},
1547         {"plusb", 8862},
1548         {"pluscir", 10786},
1549         {"plusdo", 8724},
1550         {"plusdu", 10789},
1551         {"pluse", 10866},
1552         {"plusmn", 177},
1553         {"plussim", 10790},
1554         {"plustwo", 10791},
1555         {"pm", 177},
1556         {"pointint", 10773},
1557         {"pound", 163},
1558         {"pr", 8826},
1559         {"prE", 10931},
1560         {"prap", 10935},
1561         {"prcue", 8828},
1562         {"pre", 10927},
1563         {"prec", 8826},
1564         {"precapprox", 10935},
1565         {"preccurlyeq", 8828},
1566         {"preceq", 10927},
1567         {"precnapprox", 10937},
1568         {"precneqq", 10933},
1569         {"precnsim", 8936},
1570         {"precsim", 8830},
1571         {"prime", 8242},
1572         {"primes", 8473},
1573         {"prnE", 10933},
1574         {"prnap", 10937},
1575         {"prnsim", 8936},
1576         {"prod", 8719},
1577         {"profalar", 9006},
1578         {"profline", 8978},
1579         {"profsurf", 8979},
1580         {"prop", 8733},
1581         {"propto", 8733},
1582         {"prsim", 8830},
1583         {"prurel", 8880},
1584         {"psi", 968},
1585         {"puncsp", 8200},
1586         {"qint", 10764},
1587         {"qprime", 8279},
1588         {"quad", 8193},
1589         {"quaternions", 8461},
1590         {"quatint", 10774},
1591         {"quest", 63},
1592         {"questeq", 8799},
1593         {"quot", 34},
1594         {"rAarr", 8667},
1595         {"rArr", 8658},
1596         {"rAtail", 10524},
1597         {"rBarr", 10511},
1598         {"rHar", 10596},
1599         {"race", 8765},
1600         {"racute", 341},
1601         {"radic", 8730},
1602         {"raemptyv", 10675},
1603         {"rang", 10217},
1604         {"rang", 9002},
1605         {"rangd", 10642},
1606         {"range", 10661},
1607         {"rangle", 10217},
1608         {"raquo", 187},
1609         {"rarr", 8594},
1610         {"rarrap", 10613},
1611         {"rarrb", 8677},
1612         {"rarrbfs", 10528},
1613         {"rarrc", 10547},
1614         {"rarrfs", 10526},
1615         {"rarrhk", 8618},
1616         {"rarrlp", 8620},
1617         {"rarrpl", 10565},
1618         {"rarrsim", 10612},
1619         {"rarrtl", 8611},
1620         {"rarrw", 8605},
1621         {"ratail", 10522},
1622         {"ratio", 8758},
1623         {"rationals", 8474},
1624         {"rbarr", 10509},
1625         {"rbbrk", 10099},
1626         {"rbrace", 125},
1627         {"rbrack", 93},
1628         {"rbrke", 10636},
1629         {"rbrksld", 10638},
1630         {"rbrkslu", 10640},
1631         {"rcaron", 345},
1632         {"rcedil", 343},
1633         {"rceil", 8969},
1634         {"rcub", 125},
1635         {"rcy", 1088},
1636         {"rdca", 10551},
1637         {"rdldhar", 10601},
1638         {"rdquo", 8221},
1639         {"rdquor", 8221},
1640         {"rdsh", 8627},
1641         {"real", 8476},
1642         {"realine", 8475},
1643         {"realpart", 8476},
1644         {"reals", 8477},
1645         {"rect", 9645},
1646         {"reg", 174},
1647         {"rfisht", 10621},
1648         {"rfloor", 8971},
1649         {"rhard", 8641},
1650         {"rharu", 8640},
1651         {"rharul", 10604},
1652         {"rho", 961},
1653         {"rhov", 1009},
1654         {"rightarrow", 8594},
1655         {"rightarrowtail", 8611},
1656         {"rightharpoondown", 8641},
1657         {"rightharpoonup", 8640},
1658         {"rightleftarrows", 8644},
1659         {"rightleftharpoons", 8652},
1660         {"rightrightarrows", 8649},
1661         {"rightsquigarrow", 8605},
1662         {"rightthreetimes", 8908},
1663         {"ring", 730},
1664         {"risingdotseq", 8787},
1665         {"rlarr", 8644},
1666         {"rlhar", 8652},
1667         {"rlm", 8207},
1668         {"rmoust", 9137},
1669         {"rmoustache", 9137},
1670         {"rnmid", 10990},
1671         {"roang", 10221},
1672         {"roarr", 8702},
1673         {"robrk", 10215},
1674         {"ropar", 10630},
1675         {"roplus", 10798},
1676         {"rotimes", 10805},
1677         {"rpar", 41},
1678         {"rpargt", 10644},
1679         {"rppolint", 10770},
1680         {"rrarr", 8649},
1681         {"rsaquo", 8250},
1682         {"rsh", 8625},
1683         {"rsqb", 93},
1684         {"rsquo", 8217},
1685         {"rsquor", 8217},
1686         {"rthree", 8908},
1687         {"rtimes", 8906},
1688         {"rtri", 9657},
1689         {"rtrie", 8885},
1690         {"rtrif", 9656},
1691         {"rtriltri", 10702},
1692         {"ruluhar", 10600},
1693         {"rx", 8478},
1694         {"sacute", 347},
1695         {"sbquo", 8218},
1696         {"sc", 8827},
1697         {"scE", 10932},
1698         {"scap", 10936},
1699         {"scaron", 353},
1700         {"sccue", 8829},
1701         {"sce", 10928},
1702         {"scedil", 351},
1703         {"scirc", 349},
1704         {"scnE", 10934},
1705         {"scnap", 10938},
1706         {"scnsim", 8937},
1707         {"scpolint", 10771},
1708         {"scsim", 8831},
1709         {"scy", 1089},
1710         {"sdot", 8901},
1711         {"sdotb", 8865},
1712         {"sdote", 10854},
1713         {"seArr", 8664},
1714         {"searhk", 10533},
1715         {"searr", 8600},
1716         {"searrow", 8600},
1717         {"sect", 167},
1718         {"semi", 59},
1719         {"seswar", 10537},
1720         {"setminus", 8726},
1721         {"setmn", 8726},
1722         {"sext", 10038},
1723         {"sfrown", 8994},
1724         {"sharp", 9839},
1725         {"shchcy", 1097},
1726         {"shcy", 1096},
1727         {"shortmid", 8739},
1728         {"shortparallel", 8741},
1729         {"shy", 173},
1730         {"sigma", 963},
1731         {"sigmaf", 962},
1732         {"sigmav", 962},
1733         {"sim", 8764},
1734         {"simdot", 10858},
1735         {"sime", 8771},
1736         {"simeq", 8771},
1737         {"simg", 10910},
1738         {"simgE", 10912},
1739         {"siml", 10909},
1740         {"simlE", 10911},
1741         {"simne", 8774},
1742         {"simplus", 10788},
1743         {"simrarr", 10610},
1744         {"slarr", 8592},
1745         {"smallsetminus", 8726},
1746         {"smashp", 10803},
1747         {"smeparsl", 10724},
1748         {"smid", 8739},
1749         {"smile", 8995},
1750         {"smt", 10922},
1751         {"smte", 10924},
1752         {"smtes", 10924},
1753         {"softcy", 1100},
1754         {"sol", 47},
1755         {"solb", 10692},
1756         {"solbar", 9023},
1757         {"spades", 9824},
1758         {"spadesuit", 9824},
1759         {"spar", 8741},
1760         {"sqcap", 8851},
1761         {"sqcaps", 8851},
1762         {"sqcup", 8852},
1763         {"sqcups", 8852},
1764         {"sqsub", 8847},
1765         {"sqsube", 8849},
1766         {"sqsubset", 8847},
1767         {"sqsubseteq", 8849},
1768         {"sqsup", 8848},
1769         {"sqsupe", 8850},
1770         {"sqsupset", 8848},
1771         {"sqsupseteq", 8850},
1772         {"squ", 9633},
1773         {"square", 9633},
1774         {"squarf", 9642},
1775         {"squf", 9642},
1776         {"srarr", 8594},
1777         {"ssetmn", 8726},
1778         {"ssmile", 8995},
1779         {"sstarf", 8902},
1780         {"star", 9734},
1781         {"starf", 9733},
1782         {"straightepsilon", 1013},
1783         {"straightphi", 981},
1784         {"strns", 175},
1785         {"sub", 8834},
1786         {"subE", 10949},
1787         {"subdot", 10941},
1788         {"sube", 8838},
1789         {"subedot", 10947},
1790         {"submult", 10945},
1791         {"subnE", 10955},
1792         {"subne", 8842},
1793         {"subplus", 10943},
1794         {"subrarr", 10617},
1795         {"subset", 8834},
1796         {"subseteq", 8838},
1797         {"subseteqq", 10949},
1798         {"subsetneq", 8842},
1799         {"subsetneqq", 10955},
1800         {"subsim", 10951},
1801         {"subsub", 10965},
1802         {"subsup", 10963},
1803         {"succ", 8827},
1804         {"succapprox", 10936},
1805         {"succcurlyeq", 8829},
1806         {"succeq", 10928},
1807         {"succnapprox", 10938},
1808         {"succneqq", 10934},
1809         {"succnsim", 8937},
1810         {"succsim", 8831},
1811         {"sum", 8721},
1812         {"sung", 9834},
1813         {"sup", 8835},
1814         {"sup1", 185},
1815         {"sup2", 178},
1816         {"sup3", 179},
1817         {"supE", 10950},
1818         {"supdot", 10942},
1819         {"supdsub", 10968},
1820         {"supe", 8839},
1821         {"supedot", 10948},
1822         {"suphsol", 10185},
1823         {"suphsub", 10967},
1824         {"suplarr", 10619},
1825         {"supmult", 10946},
1826         {"supnE", 10956},
1827         {"supne", 8843},
1828         {"supplus", 10944},
1829         {"supset", 8835},
1830         {"supseteq", 8839},
1831         {"supseteqq", 10950},
1832         {"supsetneq", 8843},
1833         {"supsetneqq", 10956},
1834         {"supsim", 10952},
1835         {"supsub", 10964},
1836         {"supsup", 10966},
1837         {"swArr", 8665},
1838         {"swarhk", 10534},
1839         {"swarr", 8601},
1840         {"swarrow", 8601},
1841         {"swnwar", 10538},
1842         {"szlig", 223},
1843         {"target", 8982},
1844         {"tau", 964},
1845         {"tbrk", 9140},
1846         {"tcaron", 357},
1847         {"tcedil", 355},
1848         {"tcy", 1090},
1849         {"tdot", 8411},
1850         {"telrec", 8981},
1851         {"there4", 8756},
1852         {"therefore", 8756},
1853         {"theta", 952},
1854         {"thetasym", 977},
1855         {"thetav", 977},
1856         {"thickapprox", 8776},
1857         {"thicksim", 8764},
1858         {"thinsp", 8201},
1859         {"thkap", 8776},
1860         {"thksim", 8764},
1861         {"thorn", 254},
1862         {"tilde", 732},
1863         {"times", 215},
1864         {"timesb", 8864},
1865         {"timesbar", 10801},
1866         {"timesd", 10800},
1867         {"tint", 8749},
1868         {"toea", 10536},
1869         {"top", 8868},
1870         {"topbot", 9014},
1871         {"topcir", 10993},
1872         {"topfork", 10970},
1873         {"tosa", 10537},
1874         {"tprime", 8244},
1875         {"trade", 8482},
1876         {"triangle", 9653},
1877         {"triangledown", 9663},
1878         {"triangleleft", 9667},
1879         {"trianglelefteq", 8884},
1880         {"triangleq", 8796},
1881         {"triangleright", 9657},
1882         {"trianglerighteq", 8885},
1883         {"tridot", 9708},
1884         {"trie", 8796},
1885         {"triminus", 10810},
1886         {"triplus", 10809},
1887         {"trisb", 10701},
1888         {"tritime", 10811},
1889         {"trpezium", 9186},
1890         {"tscy", 1094},
1891         {"tshcy", 1115},
1892         {"tstrok", 359},
1893         {"twixt", 8812},
1894         {"twoheadleftarrow", 8606},
1895         {"twoheadrightarrow", 8608},
1896         {"uArr", 8657},
1897         {"uHar", 10595},
1898         {"uacute", 250},
1899         {"uarr", 8593},
1900         {"ubrcy", 1118},
1901         {"ubreve", 365},
1902         {"ucirc", 251},
1903         {"ucy", 1091},
1904         {"udarr", 8645},
1905         {"udblac", 369},
1906         {"udhar", 10606},
1907         {"ufisht", 10622},
1908         {"ugrave", 249},
1909         {"uharl", 8639},
1910         {"uharr", 8638},
1911         {"uhblk", 9600},
1912         {"ulcorn", 8988},
1913         {"ulcorner", 8988},
1914         {"ulcrop", 8975},
1915         {"ultri", 9720},
1916         {"umacr", 363},
1917         {"uml", 168},
1918         {"uogon", 371},
1919         {"uparrow", 8593},
1920         {"updownarrow", 8597},
1921         {"upharpoonleft", 8639},
1922         {"upharpoonright", 8638},
1923         {"uplus", 8846},
1924         {"upsi", 965},
1925         {"upsih", 978},
1926         {"upsilon", 965},
1927         {"upuparrows", 8648},
1928         {"urcorn", 8989},
1929         {"urcorner", 8989},
1930         {"urcrop", 8974},
1931         {"uring", 367},
1932         {"urtri", 9721},
1933         {"utdot", 8944},
1934         {"utilde", 361},
1935         {"utri", 9653},
1936         {"utrif", 9652},
1937         {"uuarr", 8648},
1938         {"uuml", 252},
1939         {"uwangle", 10663},
1940         {"vArr", 8661},
1941         {"vBar", 10984},
1942         {"vBarv", 10985},
1943         {"vDash", 8872},
1944         {"vangrt", 10652},
1945         {"varkappa", 1008},
1946         {"varnothing", 8709},
1947         {"varphi", 981},
1948         {"varpropto", 8733},
1949         {"varr", 8597},
1950         {"varrho", 1009},
1951         {"varsigma", 962},
1952         {"varsubsetneq", 8842},
1953         {"varsubsetneqq", 10955},
1954         {"varsupsetneq", 8843},
1955         {"varsupsetneqq", 10956},
1956         {"vartheta", 977},
1957         {"vartriangleleft", 8882},
1958         {"vartriangleright", 8883},
1959         {"vcy", 1074},
1960         {"vdash", 8866},
1961         {"vdots", 8942},
1962         {"vee", 8744},
1963         {"veebar", 8891},
1964         {"veeeq", 8794},
1965         {"vellip", 8942},
1966         {"verbar", 124},
1967         {"vert", 124},
1968         {"vltri", 8882},
1969         {"vnsub", 8834},
1970         {"vnsup", 8835},
1971         {"vprop", 8733},
1972         {"vrtri", 8883},
1973         {"vsubnE", 10955},
1974         {"vsubne", 8842},
1975         {"vsupnE", 10956},
1976         {"vsupne", 8843},
1977         {"vzigzag", 10650},
1978         {"wcirc", 373},
1979         {"wedbar", 10847},
1980         {"wedge", 8743},
1981         {"wedgeq", 8793},
1982         {"weierp", 8472},
1983         {"wp", 8472},
1984         {"wr", 8768},
1985         {"wreath", 8768},
1986         {"xcap", 8898},
1987         {"xcirc", 9711},
1988         {"xcup", 8899},
1989         {"xdtri", 9661},
1990         {"xhArr", 10234},
1991         {"xharr", 10231},
1992         {"xi", 958},
1993         {"xlArr", 10232},
1994         {"xlarr", 10229},
1995         {"xmap", 10236},
1996         {"xnis", 8955},
1997         {"xodot", 10752},
1998         {"xoplus", 10753},
1999         {"xotime", 10754},
2000         {"xrArr", 10233},
2001         {"xrarr", 10230},
2002         {"xsqcup", 10758},
2003         {"xuplus", 10756},
2004         {"xutri", 9651},
2005         {"xvee", 8897},
2006         {"xwedge", 8896},
2007         {"yacute", 253},
2008         {"yacy", 1103},
2009         {"ycirc", 375},
2010         {"ycy", 1099},
2011         {"yen", 165},
2012         {"yicy", 1111},
2013         {"yucy", 1102},
2014         {"yuml", 255},
2015         {"zacute", 378},
2016         {"zcaron", 382},
2017         {"zcy", 1079},
2018         {"zdot", 380},
2019         {"zeetrf", 8488},
2020         {"zeta", 950},
2021         {"zhcy", 1078},
2022         {"zigrarr", 8669},
2023         {"zwj", 8205},
2024         {"zwnj", 8204}
2025 };
2026
2027 static Hchar byrune[nelem(byname)];
2028
2029 static int
2030 hnamecmp(const void *va, const void *vb)
2031 {
2032         Hchar *a, *b;
2033         
2034         a = (Hchar*)va;
2035         b = (Hchar*)vb;
2036         return strcmp(a->s, b->s);
2037 }
2038
2039 static int
2040 hrunecmp(const void *va, const void *vb)
2041 {
2042         Hchar *a, *b;
2043         
2044         a = (Hchar*)va;
2045         b = (Hchar*)vb;
2046         return a->r - b->r;
2047 }
2048
2049 static int
2050 hlencmp(const void *va, const void *vb)
2051 {
2052         Hchar *a, *b;
2053
2054         a = (Hchar*)va;
2055         b = (Hchar*)vb;
2056         return strlen(a->s) - strlen(b->s);
2057 }
2058
2059 static void
2060 html_init(void)
2061 {
2062         static int init;
2063         int i, j;
2064         
2065         if(init)
2066                 return;
2067         init = 1;
2068         memmove(byrune, byname, sizeof byrune);
2069         
2070         /* Eliminate names we aren't allowed to generate. */
2071         for(i=0; i<nelem(byrune); i++){
2072                 if(byrune[i].s[0] == '_'){
2073                         byrune[i].r = Runeerror;
2074                         byname[i].s++;
2075                 }
2076         }
2077         
2078         qsort(byname, nelem(byname), sizeof byname[0], hnamecmp);
2079         qsort(byrune, nelem(byrune), sizeof byrune[0], hrunecmp);
2080
2081         /* Eliminate ambigious runes. use shotest name */
2082         for(j=0, i=1; i<nelem(byrune); i++){
2083                 if(byrune[i].r == byrune[j].r)
2084                         continue;
2085                 if(i-j > 1) {
2086                         qsort(byrune+j, i-j, sizeof byrune[0], hlencmp);
2087                         while(++j<i) byrune[j].r = Runeerror;
2088                 }
2089                 j=i;
2090         }
2091         if(i-j > 1) {
2092                 qsort(byrune+j, i-j, sizeof byrune[0], hlencmp);
2093                 while(++j<i) byrune[j].r = Runeerror;
2094         }
2095         qsort(byrune, nelem(byrune), sizeof byrune[0], hrunecmp);
2096 }
2097
2098 static Rune
2099 findbyname(char *s)
2100 {
2101         Hchar *h;
2102         int n, m, x;
2103         
2104         h = byname;
2105         n = nelem(byname);
2106         while(n > 0){
2107                 m = n/2;
2108                 x = strcmp(h[m].s, s);
2109                 if(x == 0)
2110                         return h[m].r;
2111                 if(x < 0){
2112                         h += m+1;
2113                         n -= m+1;
2114                 }else
2115                         n = m;
2116         }
2117         return Runeerror;
2118 }
2119
2120 static char*
2121 findbyrune(Rune r)
2122 {
2123         Hchar *h;
2124         int n, m;
2125
2126         if(r == Runeerror)
2127                 return nil;
2128         h = byrune;
2129         n = nelem(byrune);
2130         while(n > 0){
2131                 m = n/2;
2132                 if(h[m].r == r)
2133                         return h[m].s;
2134                 if(h[m].r < r){
2135                         h += m+1;
2136                         n -= m+1;
2137                 }else
2138                         n = m;
2139         }
2140         return nil;
2141 }
2142
2143 void
2144 html_in(int fd, long *, struct convert *out)
2145 {
2146         char buf[100], *p;
2147         Biobuf b;
2148         Rune *r, *er, r2;
2149         int c, s, i;
2150         
2151         html_init();
2152         r = runes;
2153         er = runes+N;
2154         r2 = 0;
2155         Binit(&b, fd, OREAD);
2156         while((c = Bgetrune(&b)) != Beof){
2157                 if(r >= er){
2158                         OUT(out, runes, r-runes);
2159                         r = runes;
2160                 }
2161                 if(c == '&'){
2162                         s = 0;
2163                         buf[0] = c;
2164                         for(i=1; i<nelem(buf)-1;){
2165                                 c = Bgetc(&b);
2166                                 if(c == Beof)
2167                                         break;
2168                                 if(strchr(";&</> \t\r\n", c)){
2169                                         if(c != ';')
2170                                                 Bungetc(&b);
2171                                         else
2172                                                 s = 1;
2173                                         break;
2174                                 }
2175                                 buf[i++] = c;
2176                         }
2177                         buf[i] = 0;
2178                         if(i > 1){
2179                                 if((c = findbyname(buf+1)) != Runeerror)
2180                                         goto out;
2181                                 if(i > 2 && buf[1] == '#'){
2182                                         if(i > 3 && strchr("xX", buf[2]))
2183                                                 c = strtol(buf+3, &p, 16);
2184                                         else
2185                                                 c = strtol(buf+2, &p, 10);
2186                                         if(*p || c < 0)
2187                                                 goto bad;
2188                                         goto out;
2189                                 }
2190                         }
2191                 bad:
2192                         if(s)
2193                                 buf[i++] = ';';
2194                         for(p=buf; p<buf+i; ){
2195                                 p += chartorune(r++, p);
2196                                 if(r >= er){
2197                                         OUT(out, runes, r-runes);
2198                                         r = runes;
2199                                 }
2200                         }
2201                         r2 = 0;
2202                         continue;
2203                 out:
2204                         if((c & 0x7f) == c && strchr("<>&\"'", c)){
2205                                 s = ';';
2206                                 i = sprint(buf, "&%s", findbyrune(c));
2207                                 goto bad;
2208                         }
2209                 }       
2210                 *r = c;
2211                 if(fixsurrogate(r, r2)){
2212                         r2 = *r;
2213                         continue;
2214                 }
2215                 r2 = 0;
2216                 r++;
2217         }
2218         if(r > runes)
2219                 OUT(out, runes, r-runes);
2220         OUT(out, runes, 0);
2221 }
2222
2223 /*
2224  * use biobuf because can use more than UTFmax bytes per rune
2225  */
2226 void
2227 html_out(Rune *r, int n, long *)
2228 {
2229         char *s;
2230         Biobuf b;
2231         Rune *er;
2232         
2233         html_init();
2234         Binit(&b, 1, OWRITE);
2235         er = r+n;
2236         for(; r<er; r++){
2237                 if(*r < Runeself)
2238                         Bputrune(&b, *r);
2239                 else if((s = findbyrune(*r)) != nil)
2240                         Bprint(&b, "&%s;", s);
2241                 else
2242                         Bprint(&b, "&#%d;", *r);
2243         }
2244         Bflush(&b);
2245 }
2246