Fossil SCM

Add commonmark amalgamations

mjanssen 2017-03-11 13:52 commonmark-markdown
Commit 116e744bbe771079565a7366ebf06457cc8ce3197697a6c505525a7d880ad209
--- a/src/case_fold_switch.inc
+++ b/src/case_fold_switch.inc
@@ -0,0 +1,4327 @@
1
+ switch (c) {
2
+ case 0x0041:
3
+ bufpush(0x0061);
4
+ break;
5
+ case 0x0042:
6
+ bufpush(0x0062);
7
+ break;
8
+ case 0x0043:
9
+ bufpush(0x0063);
10
+ break;
11
+ case 0x0044:
12
+ bufpush(0x0064);
13
+ break;
14
+ case 0x0045:
15
+ bufpush(0x0065);
16
+ break;
17
+ case 0x0046:
18
+ bufpush(0x0066);
19
+ break;
20
+ case 0x0047:
21
+ bufpush(0x0067);
22
+ break;
23
+ case 0x0048:
24
+ bufpush(0x0068);
25
+ break;
26
+ case 0x0049:
27
+ bufpush(0x0069);
28
+ break;
29
+ case 0x004A:
30
+ bufpush(0x006A);
31
+ break;
32
+ case 0x004B:
33
+ bufpush(0x006B);
34
+ break;
35
+ case 0x004C:
36
+ bufpush(0x006C);
37
+ break;
38
+ case 0x004D:
39
+ bufpush(0x006D);
40
+ break;
41
+ case 0x004E:
42
+ bufpush(0x006E);
43
+ break;
44
+ case 0x004F:
45
+ bufpush(0x006F);
46
+ break;
47
+ case 0x0050:
48
+ bufpush(0x0070);
49
+ break;
50
+ case 0x0051:
51
+ bufpush(0x0071);
52
+ break;
53
+ case 0x0052:
54
+ bufpush(0x0072);
55
+ break;
56
+ case 0x0053:
57
+ bufpush(0x0073);
58
+ break;
59
+ case 0x0054:
60
+ bufpush(0x0074);
61
+ break;
62
+ case 0x0055:
63
+ bufpush(0x0075);
64
+ break;
65
+ case 0x0056:
66
+ bufpush(0x0076);
67
+ break;
68
+ case 0x0057:
69
+ bufpush(0x0077);
70
+ break;
71
+ case 0x0058:
72
+ bufpush(0x0078);
73
+ break;
74
+ case 0x0059:
75
+ bufpush(0x0079);
76
+ break;
77
+ case 0x005A:
78
+ bufpush(0x007A);
79
+ break;
80
+ case 0x00B5:
81
+ bufpush(0x03BC);
82
+ break;
83
+ case 0x00C0:
84
+ bufpush(0x00E0);
85
+ break;
86
+ case 0x00C1:
87
+ bufpush(0x00E1);
88
+ break;
89
+ case 0x00C2:
90
+ bufpush(0x00E2);
91
+ break;
92
+ case 0x00C3:
93
+ bufpush(0x00E3);
94
+ break;
95
+ case 0x00C4:
96
+ bufpush(0x00E4);
97
+ break;
98
+ case 0x00C5:
99
+ bufpush(0x00E5);
100
+ break;
101
+ case 0x00C6:
102
+ bufpush(0x00E6);
103
+ break;
104
+ case 0x00C7:
105
+ bufpush(0x00E7);
106
+ break;
107
+ case 0x00C8:
108
+ bufpush(0x00E8);
109
+ break;
110
+ case 0x00C9:
111
+ bufpush(0x00E9);
112
+ break;
113
+ case 0x00CA:
114
+ bufpush(0x00EA);
115
+ break;
116
+ case 0x00CB:
117
+ bufpush(0x00EB);
118
+ break;
119
+ case 0x00CC:
120
+ bufpush(0x00EC);
121
+ break;
122
+ case 0x00CD:
123
+ bufpush(0x00ED);
124
+ break;
125
+ case 0x00CE:
126
+ bufpush(0x00EE);
127
+ break;
128
+ case 0x00CF:
129
+ bufpush(0x00EF);
130
+ break;
131
+ case 0x00D0:
132
+ bufpush(0x00F0);
133
+ break;
134
+ case 0x00D1:
135
+ bufpush(0x00F1);
136
+ break;
137
+ case 0x00D2:
138
+ bufpush(0x00F2);
139
+ break;
140
+ case 0x00D3:
141
+ bufpush(0x00F3);
142
+ break;
143
+ case 0x00D4:
144
+ bufpush(0x00F4);
145
+ break;
146
+ case 0x00D5:
147
+ bufpush(0x00F5);
148
+ break;
149
+ case 0x00D6:
150
+ bufpush(0x00F6);
151
+ break;
152
+ case 0x00D8:
153
+ bufpush(0x00F8);
154
+ break;
155
+ case 0x00D9:
156
+ bufpush(0x00F9);
157
+ break;
158
+ case 0x00DA:
159
+ bufpush(0x00FA);
160
+ break;
161
+ case 0x00DB:
162
+ bufpush(0x00FB);
163
+ break;
164
+ case 0x00DC:
165
+ bufpush(0x00FC);
166
+ break;
167
+ case 0x00DD:
168
+ bufpush(0x00FD);
169
+ break;
170
+ case 0x00DE:
171
+ bufpush(0x00FE);
172
+ break;
173
+ case 0x00DF:
174
+ bufpush(0x0073);
175
+ bufpush(0x0073);
176
+ break;
177
+ case 0x0100:
178
+ bufpush(0x0101);
179
+ break;
180
+ case 0x0102:
181
+ bufpush(0x0103);
182
+ break;
183
+ case 0x0104:
184
+ bufpush(0x0105);
185
+ break;
186
+ case 0x0106:
187
+ bufpush(0x0107);
188
+ break;
189
+ case 0x0108:
190
+ bufpush(0x0109);
191
+ break;
192
+ case 0x010A:
193
+ bufpush(0x010B);
194
+ break;
195
+ case 0x010C:
196
+ bufpush(0x010D);
197
+ break;
198
+ case 0x010E:
199
+ bufpush(0x010F);
200
+ break;
201
+ case 0x0110:
202
+ bufpush(0x0111);
203
+ break;
204
+ case 0x0112:
205
+ bufpush(0x0113);
206
+ break;
207
+ case 0x0114:
208
+ bufpush(0x0115);
209
+ break;
210
+ case 0x0116:
211
+ bufpush(0x0117);
212
+ break;
213
+ case 0x0118:
214
+ bufpush(0x0119);
215
+ break;
216
+ case 0x011A:
217
+ bufpush(0x011B);
218
+ break;
219
+ case 0x011C:
220
+ bufpush(0x011D);
221
+ break;
222
+ case 0x011E:
223
+ bufpush(0x011F);
224
+ break;
225
+ case 0x0120:
226
+ bufpush(0x0121);
227
+ break;
228
+ case 0x0122:
229
+ bufpush(0x0123);
230
+ break;
231
+ case 0x0124:
232
+ bufpush(0x0125);
233
+ break;
234
+ case 0x0126:
235
+ bufpush(0x0127);
236
+ break;
237
+ case 0x0128:
238
+ bufpush(0x0129);
239
+ break;
240
+ case 0x012A:
241
+ bufpush(0x012B);
242
+ break;
243
+ case 0x012C:
244
+ bufpush(0x012D);
245
+ break;
246
+ case 0x012E:
247
+ bufpush(0x012F);
248
+ break;
249
+ case 0x0130:
250
+ bufpush(0x0069);
251
+ bufpush(0x0307);
252
+ break;
253
+ case 0x0132:
254
+ bufpush(0x0133);
255
+ break;
256
+ case 0x0134:
257
+ bufpush(0x0135);
258
+ break;
259
+ case 0x0136:
260
+ bufpush(0x0137);
261
+ break;
262
+ case 0x0139:
263
+ bufpush(0x013A);
264
+ break;
265
+ case 0x013B:
266
+ bufpush(0x013C);
267
+ break;
268
+ case 0x013D:
269
+ bufpush(0x013E);
270
+ break;
271
+ case 0x013F:
272
+ bufpush(0x0140);
273
+ break;
274
+ case 0x0141:
275
+ bufpush(0x0142);
276
+ break;
277
+ case 0x0143:
278
+ bufpush(0x0144);
279
+ break;
280
+ case 0x0145:
281
+ bufpush(0x0146);
282
+ break;
283
+ case 0x0147:
284
+ bufpush(0x0148);
285
+ break;
286
+ case 0x0149:
287
+ bufpush(0x02BC);
288
+ bufpush(0x006E);
289
+ break;
290
+ case 0x014A:
291
+ bufpush(0x014B);
292
+ break;
293
+ case 0x014C:
294
+ bufpush(0x014D);
295
+ break;
296
+ case 0x014E:
297
+ bufpush(0x014F);
298
+ break;
299
+ case 0x0150:
300
+ bufpush(0x0151);
301
+ break;
302
+ case 0x0152:
303
+ bufpush(0x0153);
304
+ break;
305
+ case 0x0154:
306
+ bufpush(0x0155);
307
+ break;
308
+ case 0x0156:
309
+ bufpush(0x0157);
310
+ break;
311
+ case 0x0158:
312
+ bufpush(0x0159);
313
+ break;
314
+ case 0x015A:
315
+ bufpush(0x015B);
316
+ break;
317
+ case 0x015C:
318
+ bufpush(0x015D);
319
+ break;
320
+ case 0x015E:
321
+ bufpush(0x015F);
322
+ break;
323
+ case 0x0160:
324
+ bufpush(0x0161);
325
+ break;
326
+ case 0x0162:
327
+ bufpush(0x0163);
328
+ break;
329
+ case 0x0164:
330
+ bufpush(0x0165);
331
+ break;
332
+ case 0x0166:
333
+ bufpush(0x0167);
334
+ break;
335
+ case 0x0168:
336
+ bufpush(0x0169);
337
+ break;
338
+ case 0x016A:
339
+ bufpush(0x016B);
340
+ break;
341
+ case 0x016C:
342
+ bufpush(0x016D);
343
+ break;
344
+ case 0x016E:
345
+ bufpush(0x016F);
346
+ break;
347
+ case 0x0170:
348
+ bufpush(0x0171);
349
+ break;
350
+ case 0x0172:
351
+ bufpush(0x0173);
352
+ break;
353
+ case 0x0174:
354
+ bufpush(0x0175);
355
+ break;
356
+ case 0x0176:
357
+ bufpush(0x0177);
358
+ break;
359
+ case 0x0178:
360
+ bufpush(0x00FF);
361
+ break;
362
+ case 0x0179:
363
+ bufpush(0x017A);
364
+ break;
365
+ case 0x017B:
366
+ bufpush(0x017C);
367
+ break;
368
+ case 0x017D:
369
+ bufpush(0x017E);
370
+ break;
371
+ case 0x017F:
372
+ bufpush(0x0073);
373
+ break;
374
+ case 0x0181:
375
+ bufpush(0x0253);
376
+ break;
377
+ case 0x0182:
378
+ bufpush(0x0183);
379
+ break;
380
+ case 0x0184:
381
+ bufpush(0x0185);
382
+ break;
383
+ case 0x0186:
384
+ bufpush(0x0254);
385
+ break;
386
+ case 0x0187:
387
+ bufpush(0x0188);
388
+ break;
389
+ case 0x0189:
390
+ bufpush(0x0256);
391
+ break;
392
+ case 0x018A:
393
+ bufpush(0x0257);
394
+ break;
395
+ case 0x018B:
396
+ bufpush(0x018C);
397
+ break;
398
+ case 0x018E:
399
+ bufpush(0x01DD);
400
+ break;
401
+ case 0x018F:
402
+ bufpush(0x0259);
403
+ break;
404
+ case 0x0190:
405
+ bufpush(0x025B);
406
+ break;
407
+ case 0x0191:
408
+ bufpush(0x0192);
409
+ break;
410
+ case 0x0193:
411
+ bufpush(0x0260);
412
+ break;
413
+ case 0x0194:
414
+ bufpush(0x0263);
415
+ break;
416
+ case 0x0196:
417
+ bufpush(0x0269);
418
+ break;
419
+ case 0x0197:
420
+ bufpush(0x0268);
421
+ break;
422
+ case 0x0198:
423
+ bufpush(0x0199);
424
+ break;
425
+ case 0x019C:
426
+ bufpush(0x026F);
427
+ break;
428
+ case 0x019D:
429
+ bufpush(0x0272);
430
+ break;
431
+ case 0x019F:
432
+ bufpush(0x0275);
433
+ break;
434
+ case 0x01A0:
435
+ bufpush(0x01A1);
436
+ break;
437
+ case 0x01A2:
438
+ bufpush(0x01A3);
439
+ break;
440
+ case 0x01A4:
441
+ bufpush(0x01A5);
442
+ break;
443
+ case 0x01A6:
444
+ bufpush(0x0280);
445
+ break;
446
+ case 0x01A7:
447
+ bufpush(0x01A8);
448
+ break;
449
+ case 0x01A9:
450
+ bufpush(0x0283);
451
+ break;
452
+ case 0x01AC:
453
+ bufpush(0x01AD);
454
+ break;
455
+ case 0x01AE:
456
+ bufpush(0x0288);
457
+ break;
458
+ case 0x01AF:
459
+ bufpush(0x01B0);
460
+ break;
461
+ case 0x01B1:
462
+ bufpush(0x028A);
463
+ break;
464
+ case 0x01B2:
465
+ bufpush(0x028B);
466
+ break;
467
+ case 0x01B3:
468
+ bufpush(0x01B4);
469
+ break;
470
+ case 0x01B5:
471
+ bufpush(0x01B6);
472
+ break;
473
+ case 0x01B7:
474
+ bufpush(0x0292);
475
+ break;
476
+ case 0x01B8:
477
+ bufpush(0x01B9);
478
+ break;
479
+ case 0x01BC:
480
+ bufpush(0x01BD);
481
+ break;
482
+ case 0x01C4:
483
+ bufpush(0x01C6);
484
+ break;
485
+ case 0x01C5:
486
+ bufpush(0x01C6);
487
+ break;
488
+ case 0x01C7:
489
+ bufpush(0x01C9);
490
+ break;
491
+ case 0x01C8:
492
+ bufpush(0x01C9);
493
+ break;
494
+ case 0x01CA:
495
+ bufpush(0x01CC);
496
+ break;
497
+ case 0x01CB:
498
+ bufpush(0x01CC);
499
+ break;
500
+ case 0x01CD:
501
+ bufpush(0x01CE);
502
+ break;
503
+ case 0x01CF:
504
+ bufpush(0x01D0);
505
+ break;
506
+ case 0x01D1:
507
+ bufpush(0x01D2);
508
+ break;
509
+ case 0x01D3:
510
+ bufpush(0x01D4);
511
+ break;
512
+ case 0x01D5:
513
+ bufpush(0x01D6);
514
+ break;
515
+ case 0x01D7:
516
+ bufpush(0x01D8);
517
+ break;
518
+ case 0x01D9:
519
+ bufpush(0x01DA);
520
+ break;
521
+ case 0x01DB:
522
+ bufpush(0x01DC);
523
+ break;
524
+ case 0x01DE:
525
+ bufpush(0x01DF);
526
+ break;
527
+ case 0x01E0:
528
+ bufpush(0x01E1);
529
+ break;
530
+ case 0x01E2:
531
+ bufpush(0x01E3);
532
+ break;
533
+ case 0x01E4:
534
+ bufpush(0x01E5);
535
+ break;
536
+ case 0x01E6:
537
+ bufpush(0x01E7);
538
+ break;
539
+ case 0x01E8:
540
+ bufpush(0x01E9);
541
+ break;
542
+ case 0x01EA:
543
+ bufpush(0x01EB);
544
+ break;
545
+ case 0x01EC:
546
+ bufpush(0x01ED);
547
+ break;
548
+ case 0x01EE:
549
+ bufpush(0x01EF);
550
+ break;
551
+ case 0x01F0:
552
+ bufpush(0x006A);
553
+ bufpush(0x030C);
554
+ break;
555
+ case 0x01F1:
556
+ bufpush(0x01F3);
557
+ break;
558
+ case 0x01F2:
559
+ bufpush(0x01F3);
560
+ break;
561
+ case 0x01F4:
562
+ bufpush(0x01F5);
563
+ break;
564
+ case 0x01F6:
565
+ bufpush(0x0195);
566
+ break;
567
+ case 0x01F7:
568
+ bufpush(0x01BF);
569
+ break;
570
+ case 0x01F8:
571
+ bufpush(0x01F9);
572
+ break;
573
+ case 0x01FA:
574
+ bufpush(0x01FB);
575
+ break;
576
+ case 0x01FC:
577
+ bufpush(0x01FD);
578
+ break;
579
+ case 0x01FE:
580
+ bufpush(0x01FF);
581
+ break;
582
+ case 0x0200:
583
+ bufpush(0x0201);
584
+ break;
585
+ case 0x0202:
586
+ bufpush(0x0203);
587
+ break;
588
+ case 0x0204:
589
+ bufpush(0x0205);
590
+ break;
591
+ case 0x0206:
592
+ bufpush(0x0207);
593
+ break;
594
+ case 0x0208:
595
+ bufpush(0x0209);
596
+ break;
597
+ case 0x020A:
598
+ bufpush(0x020B);
599
+ break;
600
+ case 0x020C:
601
+ bufpush(0x020D);
602
+ break;
603
+ case 0x020E:
604
+ bufpush(0x020F);
605
+ break;
606
+ case 0x0210:
607
+ bufpush(0x0211);
608
+ break;
609
+ case 0x0212:
610
+ bufpush(0x0213);
611
+ break;
612
+ case 0x0214:
613
+ bufpush(0x0215);
614
+ break;
615
+ case 0x0216:
616
+ bufpush(0x0217);
617
+ break;
618
+ case 0x0218:
619
+ bufpush(0x0219);
620
+ break;
621
+ case 0x021A:
622
+ bufpush(0x021B);
623
+ break;
624
+ case 0x021C:
625
+ bufpush(0x021D);
626
+ break;
627
+ case 0x021E:
628
+ bufpush(0x021F);
629
+ break;
630
+ case 0x0220:
631
+ bufpush(0x019E);
632
+ break;
633
+ case 0x0222:
634
+ bufpush(0x0223);
635
+ break;
636
+ case 0x0224:
637
+ bufpush(0x0225);
638
+ break;
639
+ case 0x0226:
640
+ bufpush(0x0227);
641
+ break;
642
+ case 0x0228:
643
+ bufpush(0x0229);
644
+ break;
645
+ case 0x022A:
646
+ bufpush(0x022B);
647
+ break;
648
+ case 0x022C:
649
+ bufpush(0x022D);
650
+ break;
651
+ case 0x022E:
652
+ bufpush(0x022F);
653
+ break;
654
+ case 0x0230:
655
+ bufpush(0x0231);
656
+ break;
657
+ case 0x0232:
658
+ bufpush(0x0233);
659
+ break;
660
+ case 0x023A:
661
+ bufpush(0x2C65);
662
+ break;
663
+ case 0x023B:
664
+ bufpush(0x023C);
665
+ break;
666
+ case 0x023D:
667
+ bufpush(0x019A);
668
+ break;
669
+ case 0x023E:
670
+ bufpush(0x2C66);
671
+ break;
672
+ case 0x0241:
673
+ bufpush(0x0242);
674
+ break;
675
+ case 0x0243:
676
+ bufpush(0x0180);
677
+ break;
678
+ case 0x0244:
679
+ bufpush(0x0289);
680
+ break;
681
+ case 0x0245:
682
+ bufpush(0x028C);
683
+ break;
684
+ case 0x0246:
685
+ bufpush(0x0247);
686
+ break;
687
+ case 0x0248:
688
+ bufpush(0x0249);
689
+ break;
690
+ case 0x024A:
691
+ bufpush(0x024B);
692
+ break;
693
+ case 0x024C:
694
+ bufpush(0x024D);
695
+ break;
696
+ case 0x024E:
697
+ bufpush(0x024F);
698
+ break;
699
+ case 0x0345:
700
+ bufpush(0x03B9);
701
+ break;
702
+ case 0x0370:
703
+ bufpush(0x0371);
704
+ break;
705
+ case 0x0372:
706
+ bufpush(0x0373);
707
+ break;
708
+ case 0x0376:
709
+ bufpush(0x0377);
710
+ break;
711
+ case 0x037F:
712
+ bufpush(0x03F3);
713
+ break;
714
+ case 0x0386:
715
+ bufpush(0x03AC);
716
+ break;
717
+ case 0x0388:
718
+ bufpush(0x03AD);
719
+ break;
720
+ case 0x0389:
721
+ bufpush(0x03AE);
722
+ break;
723
+ case 0x038A:
724
+ bufpush(0x03AF);
725
+ break;
726
+ case 0x038C:
727
+ bufpush(0x03CC);
728
+ break;
729
+ case 0x038E:
730
+ bufpush(0x03CD);
731
+ break;
732
+ case 0x038F:
733
+ bufpush(0x03CE);
734
+ break;
735
+ case 0x0390:
736
+ bufpush(0x03B9);
737
+ bufpush(0x0308);
738
+ bufpush(0x0301);
739
+ break;
740
+ case 0x0391:
741
+ bufpush(0x03B1);
742
+ break;
743
+ case 0x0392:
744
+ bufpush(0x03B2);
745
+ break;
746
+ case 0x0393:
747
+ bufpush(0x03B3);
748
+ break;
749
+ case 0x0394:
750
+ bufpush(0x03B4);
751
+ break;
752
+ case 0x0395:
753
+ bufpush(0x03B5);
754
+ break;
755
+ case 0x0396:
756
+ bufpush(0x03B6);
757
+ break;
758
+ case 0x0397:
759
+ bufpush(0x03B7);
760
+ break;
761
+ case 0x0398:
762
+ bufpush(0x03B8);
763
+ break;
764
+ case 0x0399:
765
+ bufpush(0x03B9);
766
+ break;
767
+ case 0x039A:
768
+ bufpush(0x03BA);
769
+ break;
770
+ case 0x039B:
771
+ bufpush(0x03BB);
772
+ break;
773
+ case 0x039C:
774
+ bufpush(0x03BC);
775
+ break;
776
+ case 0x039D:
777
+ bufpush(0x03BD);
778
+ break;
779
+ case 0x039E:
780
+ bufpush(0x03BE);
781
+ break;
782
+ case 0x039F:
783
+ bufpush(0x03BF);
784
+ break;
785
+ case 0x03A0:
786
+ bufpush(0x03C0);
787
+ break;
788
+ case 0x03A1:
789
+ bufpush(0x03C1);
790
+ break;
791
+ case 0x03A3:
792
+ bufpush(0x03C3);
793
+ break;
794
+ case 0x03A4:
795
+ bufpush(0x03C4);
796
+ break;
797
+ case 0x03A5:
798
+ bufpush(0x03C5);
799
+ break;
800
+ case 0x03A6:
801
+ bufpush(0x03C6);
802
+ break;
803
+ case 0x03A7:
804
+ bufpush(0x03C7);
805
+ break;
806
+ case 0x03A8:
807
+ bufpush(0x03C8);
808
+ break;
809
+ case 0x03A9:
810
+ bufpush(0x03C9);
811
+ break;
812
+ case 0x03AA:
813
+ bufpush(0x03CA);
814
+ break;
815
+ case 0x03AB:
816
+ bufpush(0x03CB);
817
+ break;
818
+ case 0x03B0:
819
+ bufpush(0x03C5);
820
+ bufpush(0x0308);
821
+ bufpush(0x0301);
822
+ break;
823
+ case 0x03C2:
824
+ bufpush(0x03C3);
825
+ break;
826
+ case 0x03CF:
827
+ bufpush(0x03D7);
828
+ break;
829
+ case 0x03D0:
830
+ bufpush(0x03B2);
831
+ break;
832
+ case 0x03D1:
833
+ bufpush(0x03B8);
834
+ break;
835
+ case 0x03D5:
836
+ bufpush(0x03C6);
837
+ break;
838
+ case 0x03D6:
839
+ bufpush(0x03C0);
840
+ break;
841
+ case 0x03D8:
842
+ bufpush(0x03D9);
843
+ break;
844
+ case 0x03DA:
845
+ bufpush(0x03DB);
846
+ break;
847
+ case 0x03DC:
848
+ bufpush(0x03DD);
849
+ break;
850
+ case 0x03DE:
851
+ bufpush(0x03DF);
852
+ break;
853
+ case 0x03E0:
854
+ bufpush(0x03E1);
855
+ break;
856
+ case 0x03E2:
857
+ bufpush(0x03E3);
858
+ break;
859
+ case 0x03E4:
860
+ bufpush(0x03E5);
861
+ break;
862
+ case 0x03E6:
863
+ bufpush(0x03E7);
864
+ break;
865
+ case 0x03E8:
866
+ bufpush(0x03E9);
867
+ break;
868
+ case 0x03EA:
869
+ bufpush(0x03EB);
870
+ break;
871
+ case 0x03EC:
872
+ bufpush(0x03ED);
873
+ break;
874
+ case 0x03EE:
875
+ bufpush(0x03EF);
876
+ break;
877
+ case 0x03F0:
878
+ bufpush(0x03BA);
879
+ break;
880
+ case 0x03F1:
881
+ bufpush(0x03C1);
882
+ break;
883
+ case 0x03F4:
884
+ bufpush(0x03B8);
885
+ break;
886
+ case 0x03F5:
887
+ bufpush(0x03B5);
888
+ break;
889
+ case 0x03F7:
890
+ bufpush(0x03F8);
891
+ break;
892
+ case 0x03F9:
893
+ bufpush(0x03F2);
894
+ break;
895
+ case 0x03FA:
896
+ bufpush(0x03FB);
897
+ break;
898
+ case 0x03FD:
899
+ bufpush(0x037B);
900
+ break;
901
+ case 0x03FE:
902
+ bufpush(0x037C);
903
+ break;
904
+ case 0x03FF:
905
+ bufpush(0x037D);
906
+ break;
907
+ case 0x0400:
908
+ bufpush(0x0450);
909
+ break;
910
+ case 0x0401:
911
+ bufpush(0x0451);
912
+ break;
913
+ case 0x0402:
914
+ bufpush(0x0452);
915
+ break;
916
+ case 0x0403:
917
+ bufpush(0x0453);
918
+ break;
919
+ case 0x0404:
920
+ bufpush(0x0454);
921
+ break;
922
+ case 0x0405:
923
+ bufpush(0x0455);
924
+ break;
925
+ case 0x0406:
926
+ bufpush(0x0456);
927
+ break;
928
+ case 0x0407:
929
+ bufpush(0x0457);
930
+ break;
931
+ case 0x0408:
932
+ bufpush(0x0458);
933
+ break;
934
+ case 0x0409:
935
+ bufpush(0x0459);
936
+ break;
937
+ case 0x040A:
938
+ bufpush(0x045A);
939
+ break;
940
+ case 0x040B:
941
+ bufpush(0x045B);
942
+ break;
943
+ case 0x040C:
944
+ bufpush(0x045C);
945
+ break;
946
+ case 0x040D:
947
+ bufpush(0x045D);
948
+ break;
949
+ case 0x040E:
950
+ bufpush(0x045E);
951
+ break;
952
+ case 0x040F:
953
+ bufpush(0x045F);
954
+ break;
955
+ case 0x0410:
956
+ bufpush(0x0430);
957
+ break;
958
+ case 0x0411:
959
+ bufpush(0x0431);
960
+ break;
961
+ case 0x0412:
962
+ bufpush(0x0432);
963
+ break;
964
+ case 0x0413:
965
+ bufpush(0x0433);
966
+ break;
967
+ case 0x0414:
968
+ bufpush(0x0434);
969
+ break;
970
+ case 0x0415:
971
+ bufpush(0x0435);
972
+ break;
973
+ case 0x0416:
974
+ bufpush(0x0436);
975
+ break;
976
+ case 0x0417:
977
+ bufpush(0x0437);
978
+ break;
979
+ case 0x0418:
980
+ bufpush(0x0438);
981
+ break;
982
+ case 0x0419:
983
+ bufpush(0x0439);
984
+ break;
985
+ case 0x041A:
986
+ bufpush(0x043A);
987
+ break;
988
+ case 0x041B:
989
+ bufpush(0x043B);
990
+ break;
991
+ case 0x041C:
992
+ bufpush(0x043C);
993
+ break;
994
+ case 0x041D:
995
+ bufpush(0x043D);
996
+ break;
997
+ case 0x041E:
998
+ bufpush(0x043E);
999
+ break;
1000
+ case 0x041F:
1001
+ bufpush(0x043F);
1002
+ break;
1003
+ case 0x0420:
1004
+ bufpush(0x0440);
1005
+ break;
1006
+ case 0x0421:
1007
+ bufpush(0x0441);
1008
+ break;
1009
+ case 0x0422:
1010
+ bufpush(0x0442);
1011
+ break;
1012
+ case 0x0423:
1013
+ bufpush(0x0443);
1014
+ break;
1015
+ case 0x0424:
1016
+ bufpush(0x0444);
1017
+ break;
1018
+ case 0x0425:
1019
+ bufpush(0x0445);
1020
+ break;
1021
+ case 0x0426:
1022
+ bufpush(0x0446);
1023
+ break;
1024
+ case 0x0427:
1025
+ bufpush(0x0447);
1026
+ break;
1027
+ case 0x0428:
1028
+ bufpush(0x0448);
1029
+ break;
1030
+ case 0x0429:
1031
+ bufpush(0x0449);
1032
+ break;
1033
+ case 0x042A:
1034
+ bufpush(0x044A);
1035
+ break;
1036
+ case 0x042B:
1037
+ bufpush(0x044B);
1038
+ break;
1039
+ case 0x042C:
1040
+ bufpush(0x044C);
1041
+ break;
1042
+ case 0x042D:
1043
+ bufpush(0x044D);
1044
+ break;
1045
+ case 0x042E:
1046
+ bufpush(0x044E);
1047
+ break;
1048
+ case 0x042F:
1049
+ bufpush(0x044F);
1050
+ break;
1051
+ case 0x0460:
1052
+ bufpush(0x0461);
1053
+ break;
1054
+ case 0x0462:
1055
+ bufpush(0x0463);
1056
+ break;
1057
+ case 0x0464:
1058
+ bufpush(0x0465);
1059
+ break;
1060
+ case 0x0466:
1061
+ bufpush(0x0467);
1062
+ break;
1063
+ case 0x0468:
1064
+ bufpush(0x0469);
1065
+ break;
1066
+ case 0x046A:
1067
+ bufpush(0x046B);
1068
+ break;
1069
+ case 0x046C:
1070
+ bufpush(0x046D);
1071
+ break;
1072
+ case 0x046E:
1073
+ bufpush(0x046F);
1074
+ break;
1075
+ case 0x0470:
1076
+ bufpush(0x0471);
1077
+ break;
1078
+ case 0x0472:
1079
+ bufpush(0x0473);
1080
+ break;
1081
+ case 0x0474:
1082
+ bufpush(0x0475);
1083
+ break;
1084
+ case 0x0476:
1085
+ bufpush(0x0477);
1086
+ break;
1087
+ case 0x0478:
1088
+ bufpush(0x0479);
1089
+ break;
1090
+ case 0x047A:
1091
+ bufpush(0x047B);
1092
+ break;
1093
+ case 0x047C:
1094
+ bufpush(0x047D);
1095
+ break;
1096
+ case 0x047E:
1097
+ bufpush(0x047F);
1098
+ break;
1099
+ case 0x0480:
1100
+ bufpush(0x0481);
1101
+ break;
1102
+ case 0x048A:
1103
+ bufpush(0x048B);
1104
+ break;
1105
+ case 0x048C:
1106
+ bufpush(0x048D);
1107
+ break;
1108
+ case 0x048E:
1109
+ bufpush(0x048F);
1110
+ break;
1111
+ case 0x0490:
1112
+ bufpush(0x0491);
1113
+ break;
1114
+ case 0x0492:
1115
+ bufpush(0x0493);
1116
+ break;
1117
+ case 0x0494:
1118
+ bufpush(0x0495);
1119
+ break;
1120
+ case 0x0496:
1121
+ bufpush(0x0497);
1122
+ break;
1123
+ case 0x0498:
1124
+ bufpush(0x0499);
1125
+ break;
1126
+ case 0x049A:
1127
+ bufpush(0x049B);
1128
+ break;
1129
+ case 0x049C:
1130
+ bufpush(0x049D);
1131
+ break;
1132
+ case 0x049E:
1133
+ bufpush(0x049F);
1134
+ break;
1135
+ case 0x04A0:
1136
+ bufpush(0x04A1);
1137
+ break;
1138
+ case 0x04A2:
1139
+ bufpush(0x04A3);
1140
+ break;
1141
+ case 0x04A4:
1142
+ bufpush(0x04A5);
1143
+ break;
1144
+ case 0x04A6:
1145
+ bufpush(0x04A7);
1146
+ break;
1147
+ case 0x04A8:
1148
+ bufpush(0x04A9);
1149
+ break;
1150
+ case 0x04AA:
1151
+ bufpush(0x04AB);
1152
+ break;
1153
+ case 0x04AC:
1154
+ bufpush(0x04AD);
1155
+ break;
1156
+ case 0x04AE:
1157
+ bufpush(0x04AF);
1158
+ break;
1159
+ case 0x04B0:
1160
+ bufpush(0x04B1);
1161
+ break;
1162
+ case 0x04B2:
1163
+ bufpush(0x04B3);
1164
+ break;
1165
+ case 0x04B4:
1166
+ bufpush(0x04B5);
1167
+ break;
1168
+ case 0x04B6:
1169
+ bufpush(0x04B7);
1170
+ break;
1171
+ case 0x04B8:
1172
+ bufpush(0x04B9);
1173
+ break;
1174
+ case 0x04BA:
1175
+ bufpush(0x04BB);
1176
+ break;
1177
+ case 0x04BC:
1178
+ bufpush(0x04BD);
1179
+ break;
1180
+ case 0x04BE:
1181
+ bufpush(0x04BF);
1182
+ break;
1183
+ case 0x04C0:
1184
+ bufpush(0x04CF);
1185
+ break;
1186
+ case 0x04C1:
1187
+ bufpush(0x04C2);
1188
+ break;
1189
+ case 0x04C3:
1190
+ bufpush(0x04C4);
1191
+ break;
1192
+ case 0x04C5:
1193
+ bufpush(0x04C6);
1194
+ break;
1195
+ case 0x04C7:
1196
+ bufpush(0x04C8);
1197
+ break;
1198
+ case 0x04C9:
1199
+ bufpush(0x04CA);
1200
+ break;
1201
+ case 0x04CB:
1202
+ bufpush(0x04CC);
1203
+ break;
1204
+ case 0x04CD:
1205
+ bufpush(0x04CE);
1206
+ break;
1207
+ case 0x04D0:
1208
+ bufpush(0x04D1);
1209
+ break;
1210
+ case 0x04D2:
1211
+ bufpush(0x04D3);
1212
+ break;
1213
+ case 0x04D4:
1214
+ bufpush(0x04D5);
1215
+ break;
1216
+ case 0x04D6:
1217
+ bufpush(0x04D7);
1218
+ break;
1219
+ case 0x04D8:
1220
+ bufpush(0x04D9);
1221
+ break;
1222
+ case 0x04DA:
1223
+ bufpush(0x04DB);
1224
+ break;
1225
+ case 0x04DC:
1226
+ bufpush(0x04DD);
1227
+ break;
1228
+ case 0x04DE:
1229
+ bufpush(0x04DF);
1230
+ break;
1231
+ case 0x04E0:
1232
+ bufpush(0x04E1);
1233
+ break;
1234
+ case 0x04E2:
1235
+ bufpush(0x04E3);
1236
+ break;
1237
+ case 0x04E4:
1238
+ bufpush(0x04E5);
1239
+ break;
1240
+ case 0x04E6:
1241
+ bufpush(0x04E7);
1242
+ break;
1243
+ case 0x04E8:
1244
+ bufpush(0x04E9);
1245
+ break;
1246
+ case 0x04EA:
1247
+ bufpush(0x04EB);
1248
+ break;
1249
+ case 0x04EC:
1250
+ bufpush(0x04ED);
1251
+ break;
1252
+ case 0x04EE:
1253
+ bufpush(0x04EF);
1254
+ break;
1255
+ case 0x04F0:
1256
+ bufpush(0x04F1);
1257
+ break;
1258
+ case 0x04F2:
1259
+ bufpush(0x04F3);
1260
+ break;
1261
+ case 0x04F4:
1262
+ bufpush(0x04F5);
1263
+ break;
1264
+ case 0x04F6:
1265
+ bufpush(0x04F7);
1266
+ break;
1267
+ case 0x04F8:
1268
+ bufpush(0x04F9);
1269
+ break;
1270
+ case 0x04FA:
1271
+ bufpush(0x04FB);
1272
+ break;
1273
+ case 0x04FC:
1274
+ bufpush(0x04FD);
1275
+ break;
1276
+ case 0x04FE:
1277
+ bufpush(0x04FF);
1278
+ break;
1279
+ case 0x0500:
1280
+ bufpush(0x0501);
1281
+ break;
1282
+ case 0x0502:
1283
+ bufpush(0x0503);
1284
+ break;
1285
+ case 0x0504:
1286
+ bufpush(0x0505);
1287
+ break;
1288
+ case 0x0506:
1289
+ bufpush(0x0507);
1290
+ break;
1291
+ case 0x0508:
1292
+ bufpush(0x0509);
1293
+ break;
1294
+ case 0x050A:
1295
+ bufpush(0x050B);
1296
+ break;
1297
+ case 0x050C:
1298
+ bufpush(0x050D);
1299
+ break;
1300
+ case 0x050E:
1301
+ bufpush(0x050F);
1302
+ break;
1303
+ case 0x0510:
1304
+ bufpush(0x0511);
1305
+ break;
1306
+ case 0x0512:
1307
+ bufpush(0x0513);
1308
+ break;
1309
+ case 0x0514:
1310
+ bufpush(0x0515);
1311
+ break;
1312
+ case 0x0516:
1313
+ bufpush(0x0517);
1314
+ break;
1315
+ case 0x0518:
1316
+ bufpush(0x0519);
1317
+ break;
1318
+ case 0x051A:
1319
+ bufpush(0x051B);
1320
+ break;
1321
+ case 0x051C:
1322
+ bufpush(0x051D);
1323
+ break;
1324
+ case 0x051E:
1325
+ bufpush(0x051F);
1326
+ break;
1327
+ case 0x0520:
1328
+ bufpush(0x0521);
1329
+ break;
1330
+ case 0x0522:
1331
+ bufpush(0x0523);
1332
+ break;
1333
+ case 0x0524:
1334
+ bufpush(0x0525);
1335
+ break;
1336
+ case 0x0526:
1337
+ bufpush(0x0527);
1338
+ break;
1339
+ case 0x0528:
1340
+ bufpush(0x0529);
1341
+ break;
1342
+ case 0x052A:
1343
+ bufpush(0x052B);
1344
+ break;
1345
+ case 0x052C:
1346
+ bufpush(0x052D);
1347
+ break;
1348
+ case 0x052E:
1349
+ bufpush(0x052F);
1350
+ break;
1351
+ case 0x0531:
1352
+ bufpush(0x0561);
1353
+ break;
1354
+ case 0x0532:
1355
+ bufpush(0x0562);
1356
+ break;
1357
+ case 0x0533:
1358
+ bufpush(0x0563);
1359
+ break;
1360
+ case 0x0534:
1361
+ bufpush(0x0564);
1362
+ break;
1363
+ case 0x0535:
1364
+ bufpush(0x0565);
1365
+ break;
1366
+ case 0x0536:
1367
+ bufpush(0x0566);
1368
+ break;
1369
+ case 0x0537:
1370
+ bufpush(0x0567);
1371
+ break;
1372
+ case 0x0538:
1373
+ bufpush(0x0568);
1374
+ break;
1375
+ case 0x0539:
1376
+ bufpush(0x0569);
1377
+ break;
1378
+ case 0x053A:
1379
+ bufpush(0x056A);
1380
+ break;
1381
+ case 0x053B:
1382
+ bufpush(0x056B);
1383
+ break;
1384
+ case 0x053C:
1385
+ bufpush(0x056C);
1386
+ break;
1387
+ case 0x053D:
1388
+ bufpush(0x056D);
1389
+ break;
1390
+ case 0x053E:
1391
+ bufpush(0x056E);
1392
+ break;
1393
+ case 0x053F:
1394
+ bufpush(0x056F);
1395
+ break;
1396
+ case 0x0540:
1397
+ bufpush(0x0570);
1398
+ break;
1399
+ case 0x0541:
1400
+ bufpush(0x0571);
1401
+ break;
1402
+ case 0x0542:
1403
+ bufpush(0x0572);
1404
+ break;
1405
+ case 0x0543:
1406
+ bufpush(0x0573);
1407
+ break;
1408
+ case 0x0544:
1409
+ bufpush(0x0574);
1410
+ break;
1411
+ case 0x0545:
1412
+ bufpush(0x0575);
1413
+ break;
1414
+ case 0x0546:
1415
+ bufpush(0x0576);
1416
+ break;
1417
+ case 0x0547:
1418
+ bufpush(0x0577);
1419
+ break;
1420
+ case 0x0548:
1421
+ bufpush(0x0578);
1422
+ break;
1423
+ case 0x0549:
1424
+ bufpush(0x0579);
1425
+ break;
1426
+ case 0x054A:
1427
+ bufpush(0x057A);
1428
+ break;
1429
+ case 0x054B:
1430
+ bufpush(0x057B);
1431
+ break;
1432
+ case 0x054C:
1433
+ bufpush(0x057C);
1434
+ break;
1435
+ case 0x054D:
1436
+ bufpush(0x057D);
1437
+ break;
1438
+ case 0x054E:
1439
+ bufpush(0x057E);
1440
+ break;
1441
+ case 0x054F:
1442
+ bufpush(0x057F);
1443
+ break;
1444
+ case 0x0550:
1445
+ bufpush(0x0580);
1446
+ break;
1447
+ case 0x0551:
1448
+ bufpush(0x0581);
1449
+ break;
1450
+ case 0x0552:
1451
+ bufpush(0x0582);
1452
+ break;
1453
+ case 0x0553:
1454
+ bufpush(0x0583);
1455
+ break;
1456
+ case 0x0554:
1457
+ bufpush(0x0584);
1458
+ break;
1459
+ case 0x0555:
1460
+ bufpush(0x0585);
1461
+ break;
1462
+ case 0x0556:
1463
+ bufpush(0x0586);
1464
+ break;
1465
+ case 0x0587:
1466
+ bufpush(0x0565);
1467
+ bufpush(0x0582);
1468
+ break;
1469
+ case 0x10A0:
1470
+ bufpush(0x2D00);
1471
+ break;
1472
+ case 0x10A1:
1473
+ bufpush(0x2D01);
1474
+ break;
1475
+ case 0x10A2:
1476
+ bufpush(0x2D02);
1477
+ break;
1478
+ case 0x10A3:
1479
+ bufpush(0x2D03);
1480
+ break;
1481
+ case 0x10A4:
1482
+ bufpush(0x2D04);
1483
+ break;
1484
+ case 0x10A5:
1485
+ bufpush(0x2D05);
1486
+ break;
1487
+ case 0x10A6:
1488
+ bufpush(0x2D06);
1489
+ break;
1490
+ case 0x10A7:
1491
+ bufpush(0x2D07);
1492
+ break;
1493
+ case 0x10A8:
1494
+ bufpush(0x2D08);
1495
+ break;
1496
+ case 0x10A9:
1497
+ bufpush(0x2D09);
1498
+ break;
1499
+ case 0x10AA:
1500
+ bufpush(0x2D0A);
1501
+ break;
1502
+ case 0x10AB:
1503
+ bufpush(0x2D0B);
1504
+ break;
1505
+ case 0x10AC:
1506
+ bufpush(0x2D0C);
1507
+ break;
1508
+ case 0x10AD:
1509
+ bufpush(0x2D0D);
1510
+ break;
1511
+ case 0x10AE:
1512
+ bufpush(0x2D0E);
1513
+ break;
1514
+ case 0x10AF:
1515
+ bufpush(0x2D0F);
1516
+ break;
1517
+ case 0x10B0:
1518
+ bufpush(0x2D10);
1519
+ break;
1520
+ case 0x10B1:
1521
+ bufpush(0x2D11);
1522
+ break;
1523
+ case 0x10B2:
1524
+ bufpush(0x2D12);
1525
+ break;
1526
+ case 0x10B3:
1527
+ bufpush(0x2D13);
1528
+ break;
1529
+ case 0x10B4:
1530
+ bufpush(0x2D14);
1531
+ break;
1532
+ case 0x10B5:
1533
+ bufpush(0x2D15);
1534
+ break;
1535
+ case 0x10B6:
1536
+ bufpush(0x2D16);
1537
+ break;
1538
+ case 0x10B7:
1539
+ bufpush(0x2D17);
1540
+ break;
1541
+ case 0x10B8:
1542
+ bufpush(0x2D18);
1543
+ break;
1544
+ case 0x10B9:
1545
+ bufpush(0x2D19);
1546
+ break;
1547
+ case 0x10BA:
1548
+ bufpush(0x2D1A);
1549
+ break;
1550
+ case 0x10BB:
1551
+ bufpush(0x2D1B);
1552
+ break;
1553
+ case 0x10BC:
1554
+ bufpush(0x2D1C);
1555
+ break;
1556
+ case 0x10BD:
1557
+ bufpush(0x2D1D);
1558
+ break;
1559
+ case 0x10BE:
1560
+ bufpush(0x2D1E);
1561
+ break;
1562
+ case 0x10BF:
1563
+ bufpush(0x2D1F);
1564
+ break;
1565
+ case 0x10C0:
1566
+ bufpush(0x2D20);
1567
+ break;
1568
+ case 0x10C1:
1569
+ bufpush(0x2D21);
1570
+ break;
1571
+ case 0x10C2:
1572
+ bufpush(0x2D22);
1573
+ break;
1574
+ case 0x10C3:
1575
+ bufpush(0x2D23);
1576
+ break;
1577
+ case 0x10C4:
1578
+ bufpush(0x2D24);
1579
+ break;
1580
+ case 0x10C5:
1581
+ bufpush(0x2D25);
1582
+ break;
1583
+ case 0x10C7:
1584
+ bufpush(0x2D27);
1585
+ break;
1586
+ case 0x10CD:
1587
+ bufpush(0x2D2D);
1588
+ break;
1589
+ case 0x13F8:
1590
+ bufpush(0x13F0);
1591
+ break;
1592
+ case 0x13F9:
1593
+ bufpush(0x13F1);
1594
+ break;
1595
+ case 0x13FA:
1596
+ bufpush(0x13F2);
1597
+ break;
1598
+ case 0x13FB:
1599
+ bufpush(0x13F3);
1600
+ break;
1601
+ case 0x13FC:
1602
+ bufpush(0x13F4);
1603
+ break;
1604
+ case 0x13FD:
1605
+ bufpush(0x13F5);
1606
+ break;
1607
+ case 0x1C80:
1608
+ bufpush(0x0432);
1609
+ break;
1610
+ case 0x1C81:
1611
+ bufpush(0x0434);
1612
+ break;
1613
+ case 0x1C82:
1614
+ bufpush(0x043E);
1615
+ break;
1616
+ case 0x1C83:
1617
+ bufpush(0x0441);
1618
+ break;
1619
+ case 0x1C84:
1620
+ bufpush(0x0442);
1621
+ break;
1622
+ case 0x1C85:
1623
+ bufpush(0x0442);
1624
+ break;
1625
+ case 0x1C86:
1626
+ bufpush(0x044A);
1627
+ break;
1628
+ case 0x1C87:
1629
+ bufpush(0x0463);
1630
+ break;
1631
+ case 0x1C88:
1632
+ bufpush(0xA64B);
1633
+ break;
1634
+ case 0x1E00:
1635
+ bufpush(0x1E01);
1636
+ break;
1637
+ case 0x1E02:
1638
+ bufpush(0x1E03);
1639
+ break;
1640
+ case 0x1E04:
1641
+ bufpush(0x1E05);
1642
+ break;
1643
+ case 0x1E06:
1644
+ bufpush(0x1E07);
1645
+ break;
1646
+ case 0x1E08:
1647
+ bufpush(0x1E09);
1648
+ break;
1649
+ case 0x1E0A:
1650
+ bufpush(0x1E0B);
1651
+ break;
1652
+ case 0x1E0C:
1653
+ bufpush(0x1E0D);
1654
+ break;
1655
+ case 0x1E0E:
1656
+ bufpush(0x1E0F);
1657
+ break;
1658
+ case 0x1E10:
1659
+ bufpush(0x1E11);
1660
+ break;
1661
+ case 0x1E12:
1662
+ bufpush(0x1E13);
1663
+ break;
1664
+ case 0x1E14:
1665
+ bufpush(0x1E15);
1666
+ break;
1667
+ case 0x1E16:
1668
+ bufpush(0x1E17);
1669
+ break;
1670
+ case 0x1E18:
1671
+ bufpush(0x1E19);
1672
+ break;
1673
+ case 0x1E1A:
1674
+ bufpush(0x1E1B);
1675
+ break;
1676
+ case 0x1E1C:
1677
+ bufpush(0x1E1D);
1678
+ break;
1679
+ case 0x1E1E:
1680
+ bufpush(0x1E1F);
1681
+ break;
1682
+ case 0x1E20:
1683
+ bufpush(0x1E21);
1684
+ break;
1685
+ case 0x1E22:
1686
+ bufpush(0x1E23);
1687
+ break;
1688
+ case 0x1E24:
1689
+ bufpush(0x1E25);
1690
+ break;
1691
+ case 0x1E26:
1692
+ bufpush(0x1E27);
1693
+ break;
1694
+ case 0x1E28:
1695
+ bufpush(0x1E29);
1696
+ break;
1697
+ case 0x1E2A:
1698
+ bufpush(0x1E2B);
1699
+ break;
1700
+ case 0x1E2C:
1701
+ bufpush(0x1E2D);
1702
+ break;
1703
+ case 0x1E2E:
1704
+ bufpush(0x1E2F);
1705
+ break;
1706
+ case 0x1E30:
1707
+ bufpush(0x1E31);
1708
+ break;
1709
+ case 0x1E32:
1710
+ bufpush(0x1E33);
1711
+ break;
1712
+ case 0x1E34:
1713
+ bufpush(0x1E35);
1714
+ break;
1715
+ case 0x1E36:
1716
+ bufpush(0x1E37);
1717
+ break;
1718
+ case 0x1E38:
1719
+ bufpush(0x1E39);
1720
+ break;
1721
+ case 0x1E3A:
1722
+ bufpush(0x1E3B);
1723
+ break;
1724
+ case 0x1E3C:
1725
+ bufpush(0x1E3D);
1726
+ break;
1727
+ case 0x1E3E:
1728
+ bufpush(0x1E3F);
1729
+ break;
1730
+ case 0x1E40:
1731
+ bufpush(0x1E41);
1732
+ break;
1733
+ case 0x1E42:
1734
+ bufpush(0x1E43);
1735
+ break;
1736
+ case 0x1E44:
1737
+ bufpush(0x1E45);
1738
+ break;
1739
+ case 0x1E46:
1740
+ bufpush(0x1E47);
1741
+ break;
1742
+ case 0x1E48:
1743
+ bufpush(0x1E49);
1744
+ break;
1745
+ case 0x1E4A:
1746
+ bufpush(0x1E4B);
1747
+ break;
1748
+ case 0x1E4C:
1749
+ bufpush(0x1E4D);
1750
+ break;
1751
+ case 0x1E4E:
1752
+ bufpush(0x1E4F);
1753
+ break;
1754
+ case 0x1E50:
1755
+ bufpush(0x1E51);
1756
+ break;
1757
+ case 0x1E52:
1758
+ bufpush(0x1E53);
1759
+ break;
1760
+ case 0x1E54:
1761
+ bufpush(0x1E55);
1762
+ break;
1763
+ case 0x1E56:
1764
+ bufpush(0x1E57);
1765
+ break;
1766
+ case 0x1E58:
1767
+ bufpush(0x1E59);
1768
+ break;
1769
+ case 0x1E5A:
1770
+ bufpush(0x1E5B);
1771
+ break;
1772
+ case 0x1E5C:
1773
+ bufpush(0x1E5D);
1774
+ break;
1775
+ case 0x1E5E:
1776
+ bufpush(0x1E5F);
1777
+ break;
1778
+ case 0x1E60:
1779
+ bufpush(0x1E61);
1780
+ break;
1781
+ case 0x1E62:
1782
+ bufpush(0x1E63);
1783
+ break;
1784
+ case 0x1E64:
1785
+ bufpush(0x1E65);
1786
+ break;
1787
+ case 0x1E66:
1788
+ bufpush(0x1E67);
1789
+ break;
1790
+ case 0x1E68:
1791
+ bufpush(0x1E69);
1792
+ break;
1793
+ case 0x1E6A:
1794
+ bufpush(0x1E6B);
1795
+ break;
1796
+ case 0x1E6C:
1797
+ bufpush(0x1E6D);
1798
+ break;
1799
+ case 0x1E6E:
1800
+ bufpush(0x1E6F);
1801
+ break;
1802
+ case 0x1E70:
1803
+ bufpush(0x1E71);
1804
+ break;
1805
+ case 0x1E72:
1806
+ bufpush(0x1E73);
1807
+ break;
1808
+ case 0x1E74:
1809
+ bufpush(0x1E75);
1810
+ break;
1811
+ case 0x1E76:
1812
+ bufpush(0x1E77);
1813
+ break;
1814
+ case 0x1E78:
1815
+ bufpush(0x1E79);
1816
+ break;
1817
+ case 0x1E7A:
1818
+ bufpush(0x1E7B);
1819
+ break;
1820
+ case 0x1E7C:
1821
+ bufpush(0x1E7D);
1822
+ break;
1823
+ case 0x1E7E:
1824
+ bufpush(0x1E7F);
1825
+ break;
1826
+ case 0x1E80:
1827
+ bufpush(0x1E81);
1828
+ break;
1829
+ case 0x1E82:
1830
+ bufpush(0x1E83);
1831
+ break;
1832
+ case 0x1E84:
1833
+ bufpush(0x1E85);
1834
+ break;
1835
+ case 0x1E86:
1836
+ bufpush(0x1E87);
1837
+ break;
1838
+ case 0x1E88:
1839
+ bufpush(0x1E89);
1840
+ break;
1841
+ case 0x1E8A:
1842
+ bufpush(0x1E8B);
1843
+ break;
1844
+ case 0x1E8C:
1845
+ bufpush(0x1E8D);
1846
+ break;
1847
+ case 0x1E8E:
1848
+ bufpush(0x1E8F);
1849
+ break;
1850
+ case 0x1E90:
1851
+ bufpush(0x1E91);
1852
+ break;
1853
+ case 0x1E92:
1854
+ bufpush(0x1E93);
1855
+ break;
1856
+ case 0x1E94:
1857
+ bufpush(0x1E95);
1858
+ break;
1859
+ case 0x1E96:
1860
+ bufpush(0x0068);
1861
+ bufpush(0x0331);
1862
+ break;
1863
+ case 0x1E97:
1864
+ bufpush(0x0074);
1865
+ bufpush(0x0308);
1866
+ break;
1867
+ case 0x1E98:
1868
+ bufpush(0x0077);
1869
+ bufpush(0x030A);
1870
+ break;
1871
+ case 0x1E99:
1872
+ bufpush(0x0079);
1873
+ bufpush(0x030A);
1874
+ break;
1875
+ case 0x1E9A:
1876
+ bufpush(0x0061);
1877
+ bufpush(0x02BE);
1878
+ break;
1879
+ case 0x1E9B:
1880
+ bufpush(0x1E61);
1881
+ break;
1882
+ case 0x1E9E:
1883
+ bufpush(0x0073);
1884
+ bufpush(0x0073);
1885
+ break;
1886
+ case 0x1EA0:
1887
+ bufpush(0x1EA1);
1888
+ break;
1889
+ case 0x1EA2:
1890
+ bufpush(0x1EA3);
1891
+ break;
1892
+ case 0x1EA4:
1893
+ bufpush(0x1EA5);
1894
+ break;
1895
+ case 0x1EA6:
1896
+ bufpush(0x1EA7);
1897
+ break;
1898
+ case 0x1EA8:
1899
+ bufpush(0x1EA9);
1900
+ break;
1901
+ case 0x1EAA:
1902
+ bufpush(0x1EAB);
1903
+ break;
1904
+ case 0x1EAC:
1905
+ bufpush(0x1EAD);
1906
+ break;
1907
+ case 0x1EAE:
1908
+ bufpush(0x1EAF);
1909
+ break;
1910
+ case 0x1EB0:
1911
+ bufpush(0x1EB1);
1912
+ break;
1913
+ case 0x1EB2:
1914
+ bufpush(0x1EB3);
1915
+ break;
1916
+ case 0x1EB4:
1917
+ bufpush(0x1EB5);
1918
+ break;
1919
+ case 0x1EB6:
1920
+ bufpush(0x1EB7);
1921
+ break;
1922
+ case 0x1EB8:
1923
+ bufpush(0x1EB9);
1924
+ break;
1925
+ case 0x1EBA:
1926
+ bufpush(0x1EBB);
1927
+ break;
1928
+ case 0x1EBC:
1929
+ bufpush(0x1EBD);
1930
+ break;
1931
+ case 0x1EBE:
1932
+ bufpush(0x1EBF);
1933
+ break;
1934
+ case 0x1EC0:
1935
+ bufpush(0x1EC1);
1936
+ break;
1937
+ case 0x1EC2:
1938
+ bufpush(0x1EC3);
1939
+ break;
1940
+ case 0x1EC4:
1941
+ bufpush(0x1EC5);
1942
+ break;
1943
+ case 0x1EC6:
1944
+ bufpush(0x1EC7);
1945
+ break;
1946
+ case 0x1EC8:
1947
+ bufpush(0x1EC9);
1948
+ break;
1949
+ case 0x1ECA:
1950
+ bufpush(0x1ECB);
1951
+ break;
1952
+ case 0x1ECC:
1953
+ bufpush(0x1ECD);
1954
+ break;
1955
+ case 0x1ECE:
1956
+ bufpush(0x1ECF);
1957
+ break;
1958
+ case 0x1ED0:
1959
+ bufpush(0x1ED1);
1960
+ break;
1961
+ case 0x1ED2:
1962
+ bufpush(0x1ED3);
1963
+ break;
1964
+ case 0x1ED4:
1965
+ bufpush(0x1ED5);
1966
+ break;
1967
+ case 0x1ED6:
1968
+ bufpush(0x1ED7);
1969
+ break;
1970
+ case 0x1ED8:
1971
+ bufpush(0x1ED9);
1972
+ break;
1973
+ case 0x1EDA:
1974
+ bufpush(0x1EDB);
1975
+ break;
1976
+ case 0x1EDC:
1977
+ bufpush(0x1EDD);
1978
+ break;
1979
+ case 0x1EDE:
1980
+ bufpush(0x1EDF);
1981
+ break;
1982
+ case 0x1EE0:
1983
+ bufpush(0x1EE1);
1984
+ break;
1985
+ case 0x1EE2:
1986
+ bufpush(0x1EE3);
1987
+ break;
1988
+ case 0x1EE4:
1989
+ bufpush(0x1EE5);
1990
+ break;
1991
+ case 0x1EE6:
1992
+ bufpush(0x1EE7);
1993
+ break;
1994
+ case 0x1EE8:
1995
+ bufpush(0x1EE9);
1996
+ break;
1997
+ case 0x1EEA:
1998
+ bufpush(0x1EEB);
1999
+ break;
2000
+ case 0x1EEC:
2001
+ bufpush(0x1EED);
2002
+ break;
2003
+ case 0x1EEE:
2004
+ bufpush(0x1EEF);
2005
+ break;
2006
+ case 0x1EF0:
2007
+ bufpush(0x1EF1);
2008
+ break;
2009
+ case 0x1EF2:
2010
+ bufpush(0x1EF3);
2011
+ break;
2012
+ case 0x1EF4:
2013
+ bufpush(0x1EF5);
2014
+ break;
2015
+ case 0x1EF6:
2016
+ bufpush(0x1EF7);
2017
+ break;
2018
+ case 0x1EF8:
2019
+ bufpush(0x1EF9);
2020
+ break;
2021
+ case 0x1EFA:
2022
+ bufpush(0x1EFB);
2023
+ break;
2024
+ case 0x1EFC:
2025
+ bufpush(0x1EFD);
2026
+ break;
2027
+ case 0x1EFE:
2028
+ bufpush(0x1EFF);
2029
+ break;
2030
+ case 0x1F08:
2031
+ bufpush(0x1F00);
2032
+ break;
2033
+ case 0x1F09:
2034
+ bufpush(0x1F01);
2035
+ break;
2036
+ case 0x1F0A:
2037
+ bufpush(0x1F02);
2038
+ break;
2039
+ case 0x1F0B:
2040
+ bufpush(0x1F03);
2041
+ break;
2042
+ case 0x1F0C:
2043
+ bufpush(0x1F04);
2044
+ break;
2045
+ case 0x1F0D:
2046
+ bufpush(0x1F05);
2047
+ break;
2048
+ case 0x1F0E:
2049
+ bufpush(0x1F06);
2050
+ break;
2051
+ case 0x1F0F:
2052
+ bufpush(0x1F07);
2053
+ break;
2054
+ case 0x1F18:
2055
+ bufpush(0x1F10);
2056
+ break;
2057
+ case 0x1F19:
2058
+ bufpush(0x1F11);
2059
+ break;
2060
+ case 0x1F1A:
2061
+ bufpush(0x1F12);
2062
+ break;
2063
+ case 0x1F1B:
2064
+ bufpush(0x1F13);
2065
+ break;
2066
+ case 0x1F1C:
2067
+ bufpush(0x1F14);
2068
+ break;
2069
+ case 0x1F1D:
2070
+ bufpush(0x1F15);
2071
+ break;
2072
+ case 0x1F28:
2073
+ bufpush(0x1F20);
2074
+ break;
2075
+ case 0x1F29:
2076
+ bufpush(0x1F21);
2077
+ break;
2078
+ case 0x1F2A:
2079
+ bufpush(0x1F22);
2080
+ break;
2081
+ case 0x1F2B:
2082
+ bufpush(0x1F23);
2083
+ break;
2084
+ case 0x1F2C:
2085
+ bufpush(0x1F24);
2086
+ break;
2087
+ case 0x1F2D:
2088
+ bufpush(0x1F25);
2089
+ break;
2090
+ case 0x1F2E:
2091
+ bufpush(0x1F26);
2092
+ break;
2093
+ case 0x1F2F:
2094
+ bufpush(0x1F27);
2095
+ break;
2096
+ case 0x1F38:
2097
+ bufpush(0x1F30);
2098
+ break;
2099
+ case 0x1F39:
2100
+ bufpush(0x1F31);
2101
+ break;
2102
+ case 0x1F3A:
2103
+ bufpush(0x1F32);
2104
+ break;
2105
+ case 0x1F3B:
2106
+ bufpush(0x1F33);
2107
+ break;
2108
+ case 0x1F3C:
2109
+ bufpush(0x1F34);
2110
+ break;
2111
+ case 0x1F3D:
2112
+ bufpush(0x1F35);
2113
+ break;
2114
+ case 0x1F3E:
2115
+ bufpush(0x1F36);
2116
+ break;
2117
+ case 0x1F3F:
2118
+ bufpush(0x1F37);
2119
+ break;
2120
+ case 0x1F48:
2121
+ bufpush(0x1F40);
2122
+ break;
2123
+ case 0x1F49:
2124
+ bufpush(0x1F41);
2125
+ break;
2126
+ case 0x1F4A:
2127
+ bufpush(0x1F42);
2128
+ break;
2129
+ case 0x1F4B:
2130
+ bufpush(0x1F43);
2131
+ break;
2132
+ case 0x1F4C:
2133
+ bufpush(0x1F44);
2134
+ break;
2135
+ case 0x1F4D:
2136
+ bufpush(0x1F45);
2137
+ break;
2138
+ case 0x1F50:
2139
+ bufpush(0x03C5);
2140
+ bufpush(0x0313);
2141
+ break;
2142
+ case 0x1F52:
2143
+ bufpush(0x03C5);
2144
+ bufpush(0x0313);
2145
+ bufpush(0x0300);
2146
+ break;
2147
+ case 0x1F54:
2148
+ bufpush(0x03C5);
2149
+ bufpush(0x0313);
2150
+ bufpush(0x0301);
2151
+ break;
2152
+ case 0x1F56:
2153
+ bufpush(0x03C5);
2154
+ bufpush(0x0313);
2155
+ bufpush(0x0342);
2156
+ break;
2157
+ case 0x1F59:
2158
+ bufpush(0x1F51);
2159
+ break;
2160
+ case 0x1F5B:
2161
+ bufpush(0x1F53);
2162
+ break;
2163
+ case 0x1F5D:
2164
+ bufpush(0x1F55);
2165
+ break;
2166
+ case 0x1F5F:
2167
+ bufpush(0x1F57);
2168
+ break;
2169
+ case 0x1F68:
2170
+ bufpush(0x1F60);
2171
+ break;
2172
+ case 0x1F69:
2173
+ bufpush(0x1F61);
2174
+ break;
2175
+ case 0x1F6A:
2176
+ bufpush(0x1F62);
2177
+ break;
2178
+ case 0x1F6B:
2179
+ bufpush(0x1F63);
2180
+ break;
2181
+ case 0x1F6C:
2182
+ bufpush(0x1F64);
2183
+ break;
2184
+ case 0x1F6D:
2185
+ bufpush(0x1F65);
2186
+ break;
2187
+ case 0x1F6E:
2188
+ bufpush(0x1F66);
2189
+ break;
2190
+ case 0x1F6F:
2191
+ bufpush(0x1F67);
2192
+ break;
2193
+ case 0x1F80:
2194
+ bufpush(0x1F00);
2195
+ bufpush(0x03B9);
2196
+ break;
2197
+ case 0x1F81:
2198
+ bufpush(0x1F01);
2199
+ bufpush(0x03B9);
2200
+ break;
2201
+ case 0x1F82:
2202
+ bufpush(0x1F02);
2203
+ bufpush(0x03B9);
2204
+ break;
2205
+ case 0x1F83:
2206
+ bufpush(0x1F03);
2207
+ bufpush(0x03B9);
2208
+ break;
2209
+ case 0x1F84:
2210
+ bufpush(0x1F04);
2211
+ bufpush(0x03B9);
2212
+ break;
2213
+ case 0x1F85:
2214
+ bufpush(0x1F05);
2215
+ bufpush(0x03B9);
2216
+ break;
2217
+ case 0x1F86:
2218
+ bufpush(0x1F06);
2219
+ bufpush(0x03B9);
2220
+ break;
2221
+ case 0x1F87:
2222
+ bufpush(0x1F07);
2223
+ bufpush(0x03B9);
2224
+ break;
2225
+ case 0x1F88:
2226
+ bufpush(0x1F00);
2227
+ bufpush(0x03B9);
2228
+ break;
2229
+ case 0x1F89:
2230
+ bufpush(0x1F01);
2231
+ bufpush(0x03B9);
2232
+ break;
2233
+ case 0x1F8A:
2234
+ bufpush(0x1F02);
2235
+ bufpush(0x03B9);
2236
+ break;
2237
+ case 0x1F8B:
2238
+ bufpush(0x1F03);
2239
+ bufpush(0x03B9);
2240
+ break;
2241
+ case 0x1F8C:
2242
+ bufpush(0x1F04);
2243
+ bufpush(0x03B9);
2244
+ break;
2245
+ case 0x1F8D:
2246
+ bufpush(0x1F05);
2247
+ bufpush(0x03B9);
2248
+ break;
2249
+ case 0x1F8E:
2250
+ bufpush(0x1F06);
2251
+ bufpush(0x03B9);
2252
+ break;
2253
+ case 0x1F8F:
2254
+ bufpush(0x1F07);
2255
+ bufpush(0x03B9);
2256
+ break;
2257
+ case 0x1F90:
2258
+ bufpush(0x1F20);
2259
+ bufpush(0x03B9);
2260
+ break;
2261
+ case 0x1F91:
2262
+ bufpush(0x1F21);
2263
+ bufpush(0x03B9);
2264
+ break;
2265
+ case 0x1F92:
2266
+ bufpush(0x1F22);
2267
+ bufpush(0x03B9);
2268
+ break;
2269
+ case 0x1F93:
2270
+ bufpush(0x1F23);
2271
+ bufpush(0x03B9);
2272
+ break;
2273
+ case 0x1F94:
2274
+ bufpush(0x1F24);
2275
+ bufpush(0x03B9);
2276
+ break;
2277
+ case 0x1F95:
2278
+ bufpush(0x1F25);
2279
+ bufpush(0x03B9);
2280
+ break;
2281
+ case 0x1F96:
2282
+ bufpush(0x1F26);
2283
+ bufpush(0x03B9);
2284
+ break;
2285
+ case 0x1F97:
2286
+ bufpush(0x1F27);
2287
+ bufpush(0x03B9);
2288
+ break;
2289
+ case 0x1F98:
2290
+ bufpush(0x1F20);
2291
+ bufpush(0x03B9);
2292
+ break;
2293
+ case 0x1F99:
2294
+ bufpush(0x1F21);
2295
+ bufpush(0x03B9);
2296
+ break;
2297
+ case 0x1F9A:
2298
+ bufpush(0x1F22);
2299
+ bufpush(0x03B9);
2300
+ break;
2301
+ case 0x1F9B:
2302
+ bufpush(0x1F23);
2303
+ bufpush(0x03B9);
2304
+ break;
2305
+ case 0x1F9C:
2306
+ bufpush(0x1F24);
2307
+ bufpush(0x03B9);
2308
+ break;
2309
+ case 0x1F9D:
2310
+ bufpush(0x1F25);
2311
+ bufpush(0x03B9);
2312
+ break;
2313
+ case 0x1F9E:
2314
+ bufpush(0x1F26);
2315
+ bufpush(0x03B9);
2316
+ break;
2317
+ case 0x1F9F:
2318
+ bufpush(0x1F27);
2319
+ bufpush(0x03B9);
2320
+ break;
2321
+ case 0x1FA0:
2322
+ bufpush(0x1F60);
2323
+ bufpush(0x03B9);
2324
+ break;
2325
+ case 0x1FA1:
2326
+ bufpush(0x1F61);
2327
+ bufpush(0x03B9);
2328
+ break;
2329
+ case 0x1FA2:
2330
+ bufpush(0x1F62);
2331
+ bufpush(0x03B9);
2332
+ break;
2333
+ case 0x1FA3:
2334
+ bufpush(0x1F63);
2335
+ bufpush(0x03B9);
2336
+ break;
2337
+ case 0x1FA4:
2338
+ bufpush(0x1F64);
2339
+ bufpush(0x03B9);
2340
+ break;
2341
+ case 0x1FA5:
2342
+ bufpush(0x1F65);
2343
+ bufpush(0x03B9);
2344
+ break;
2345
+ case 0x1FA6:
2346
+ bufpush(0x1F66);
2347
+ bufpush(0x03B9);
2348
+ break;
2349
+ case 0x1FA7:
2350
+ bufpush(0x1F67);
2351
+ bufpush(0x03B9);
2352
+ break;
2353
+ case 0x1FA8:
2354
+ bufpush(0x1F60);
2355
+ bufpush(0x03B9);
2356
+ break;
2357
+ case 0x1FA9:
2358
+ bufpush(0x1F61);
2359
+ bufpush(0x03B9);
2360
+ break;
2361
+ case 0x1FAA:
2362
+ bufpush(0x1F62);
2363
+ bufpush(0x03B9);
2364
+ break;
2365
+ case 0x1FAB:
2366
+ bufpush(0x1F63);
2367
+ bufpush(0x03B9);
2368
+ break;
2369
+ case 0x1FAC:
2370
+ bufpush(0x1F64);
2371
+ bufpush(0x03B9);
2372
+ break;
2373
+ case 0x1FAD:
2374
+ bufpush(0x1F65);
2375
+ bufpush(0x03B9);
2376
+ break;
2377
+ case 0x1FAE:
2378
+ bufpush(0x1F66);
2379
+ bufpush(0x03B9);
2380
+ break;
2381
+ case 0x1FAF:
2382
+ bufpush(0x1F67);
2383
+ bufpush(0x03B9);
2384
+ break;
2385
+ case 0x1FB2:
2386
+ bufpush(0x1F70);
2387
+ bufpush(0x03B9);
2388
+ break;
2389
+ case 0x1FB3:
2390
+ bufpush(0x03B1);
2391
+ bufpush(0x03B9);
2392
+ break;
2393
+ case 0x1FB4:
2394
+ bufpush(0x03AC);
2395
+ bufpush(0x03B9);
2396
+ break;
2397
+ case 0x1FB6:
2398
+ bufpush(0x03B1);
2399
+ bufpush(0x0342);
2400
+ break;
2401
+ case 0x1FB7:
2402
+ bufpush(0x03B1);
2403
+ bufpush(0x0342);
2404
+ bufpush(0x03B9);
2405
+ break;
2406
+ case 0x1FB8:
2407
+ bufpush(0x1FB0);
2408
+ break;
2409
+ case 0x1FB9:
2410
+ bufpush(0x1FB1);
2411
+ break;
2412
+ case 0x1FBA:
2413
+ bufpush(0x1F70);
2414
+ break;
2415
+ case 0x1FBB:
2416
+ bufpush(0x1F71);
2417
+ break;
2418
+ case 0x1FBC:
2419
+ bufpush(0x03B1);
2420
+ bufpush(0x03B9);
2421
+ break;
2422
+ case 0x1FBE:
2423
+ bufpush(0x03B9);
2424
+ break;
2425
+ case 0x1FC2:
2426
+ bufpush(0x1F74);
2427
+ bufpush(0x03B9);
2428
+ break;
2429
+ case 0x1FC3:
2430
+ bufpush(0x03B7);
2431
+ bufpush(0x03B9);
2432
+ break;
2433
+ case 0x1FC4:
2434
+ bufpush(0x03AE);
2435
+ bufpush(0x03B9);
2436
+ break;
2437
+ case 0x1FC6:
2438
+ bufpush(0x03B7);
2439
+ bufpush(0x0342);
2440
+ break;
2441
+ case 0x1FC7:
2442
+ bufpush(0x03B7);
2443
+ bufpush(0x0342);
2444
+ bufpush(0x03B9);
2445
+ break;
2446
+ case 0x1FC8:
2447
+ bufpush(0x1F72);
2448
+ break;
2449
+ case 0x1FC9:
2450
+ bufpush(0x1F73);
2451
+ break;
2452
+ case 0x1FCA:
2453
+ bufpush(0x1F74);
2454
+ break;
2455
+ case 0x1FCB:
2456
+ bufpush(0x1F75);
2457
+ break;
2458
+ case 0x1FCC:
2459
+ bufpush(0x03B7);
2460
+ bufpush(0x03B9);
2461
+ break;
2462
+ case 0x1FD2:
2463
+ bufpush(0x03B9);
2464
+ bufpush(0x0308);
2465
+ bufpush(0x0300);
2466
+ break;
2467
+ case 0x1FD3:
2468
+ bufpush(0x03B9);
2469
+ bufpush(0x0308);
2470
+ bufpush(0x0301);
2471
+ break;
2472
+ case 0x1FD6:
2473
+ bufpush(0x03B9);
2474
+ bufpush(0x0342);
2475
+ break;
2476
+ case 0x1FD7:
2477
+ bufpush(0x03B9);
2478
+ bufpush(0x0308);
2479
+ bufpush(0x0342);
2480
+ break;
2481
+ case 0x1FD8:
2482
+ bufpush(0x1FD0);
2483
+ break;
2484
+ case 0x1FD9:
2485
+ bufpush(0x1FD1);
2486
+ break;
2487
+ case 0x1FDA:
2488
+ bufpush(0x1F76);
2489
+ break;
2490
+ case 0x1FDB:
2491
+ bufpush(0x1F77);
2492
+ break;
2493
+ case 0x1FE2:
2494
+ bufpush(0x03C5);
2495
+ bufpush(0x0308);
2496
+ bufpush(0x0300);
2497
+ break;
2498
+ case 0x1FE3:
2499
+ bufpush(0x03C5);
2500
+ bufpush(0x0308);
2501
+ bufpush(0x0301);
2502
+ break;
2503
+ case 0x1FE4:
2504
+ bufpush(0x03C1);
2505
+ bufpush(0x0313);
2506
+ break;
2507
+ case 0x1FE6:
2508
+ bufpush(0x03C5);
2509
+ bufpush(0x0342);
2510
+ break;
2511
+ case 0x1FE7:
2512
+ bufpush(0x03C5);
2513
+ bufpush(0x0308);
2514
+ bufpush(0x0342);
2515
+ break;
2516
+ case 0x1FE8:
2517
+ bufpush(0x1FE0);
2518
+ break;
2519
+ case 0x1FE9:
2520
+ bufpush(0x1FE1);
2521
+ break;
2522
+ case 0x1FEA:
2523
+ bufpush(0x1F7A);
2524
+ break;
2525
+ case 0x1FEB:
2526
+ bufpush(0x1F7B);
2527
+ break;
2528
+ case 0x1FEC:
2529
+ bufpush(0x1FE5);
2530
+ break;
2531
+ case 0x1FF2:
2532
+ bufpush(0x1F7C);
2533
+ bufpush(0x03B9);
2534
+ break;
2535
+ case 0x1FF3:
2536
+ bufpush(0x03C9);
2537
+ bufpush(0x03B9);
2538
+ break;
2539
+ case 0x1FF4:
2540
+ bufpush(0x03CE);
2541
+ bufpush(0x03B9);
2542
+ break;
2543
+ case 0x1FF6:
2544
+ bufpush(0x03C9);
2545
+ bufpush(0x0342);
2546
+ break;
2547
+ case 0x1FF7:
2548
+ bufpush(0x03C9);
2549
+ bufpush(0x0342);
2550
+ bufpush(0x03B9);
2551
+ break;
2552
+ case 0x1FF8:
2553
+ bufpush(0x1F78);
2554
+ break;
2555
+ case 0x1FF9:
2556
+ bufpush(0x1F79);
2557
+ break;
2558
+ case 0x1FFA:
2559
+ bufpush(0x1F7C);
2560
+ break;
2561
+ case 0x1FFB:
2562
+ bufpush(0x1F7D);
2563
+ break;
2564
+ case 0x1FFC:
2565
+ bufpush(0x03C9);
2566
+ bufpush(0x03B9);
2567
+ break;
2568
+ case 0x2126:
2569
+ bufpush(0x03C9);
2570
+ break;
2571
+ case 0x212A:
2572
+ bufpush(0x006B);
2573
+ break;
2574
+ case 0x212B:
2575
+ bufpush(0x00E5);
2576
+ break;
2577
+ case 0x2132:
2578
+ bufpush(0x214E);
2579
+ break;
2580
+ case 0x2160:
2581
+ bufpush(0x2170);
2582
+ break;
2583
+ case 0x2161:
2584
+ bufpush(0x2171);
2585
+ break;
2586
+ case 0x2162:
2587
+ bufpush(0x2172);
2588
+ break;
2589
+ case 0x2163:
2590
+ bufpush(0x2173);
2591
+ break;
2592
+ case 0x2164:
2593
+ bufpush(0x2174);
2594
+ break;
2595
+ case 0x2165:
2596
+ bufpush(0x2175);
2597
+ break;
2598
+ case 0x2166:
2599
+ bufpush(0x2176);
2600
+ break;
2601
+ case 0x2167:
2602
+ bufpush(0x2177);
2603
+ break;
2604
+ case 0x2168:
2605
+ bufpush(0x2178);
2606
+ break;
2607
+ case 0x2169:
2608
+ bufpush(0x2179);
2609
+ break;
2610
+ case 0x216A:
2611
+ bufpush(0x217A);
2612
+ break;
2613
+ case 0x216B:
2614
+ bufpush(0x217B);
2615
+ break;
2616
+ case 0x216C:
2617
+ bufpush(0x217C);
2618
+ break;
2619
+ case 0x216D:
2620
+ bufpush(0x217D);
2621
+ break;
2622
+ case 0x216E:
2623
+ bufpush(0x217E);
2624
+ break;
2625
+ case 0x216F:
2626
+ bufpush(0x217F);
2627
+ break;
2628
+ case 0x2183:
2629
+ bufpush(0x2184);
2630
+ break;
2631
+ case 0x24B6:
2632
+ bufpush(0x24D0);
2633
+ break;
2634
+ case 0x24B7:
2635
+ bufpush(0x24D1);
2636
+ break;
2637
+ case 0x24B8:
2638
+ bufpush(0x24D2);
2639
+ break;
2640
+ case 0x24B9:
2641
+ bufpush(0x24D3);
2642
+ break;
2643
+ case 0x24BA:
2644
+ bufpush(0x24D4);
2645
+ break;
2646
+ case 0x24BB:
2647
+ bufpush(0x24D5);
2648
+ break;
2649
+ case 0x24BC:
2650
+ bufpush(0x24D6);
2651
+ break;
2652
+ case 0x24BD:
2653
+ bufpush(0x24D7);
2654
+ break;
2655
+ case 0x24BE:
2656
+ bufpush(0x24D8);
2657
+ break;
2658
+ case 0x24BF:
2659
+ bufpush(0x24D9);
2660
+ break;
2661
+ case 0x24C0:
2662
+ bufpush(0x24DA);
2663
+ break;
2664
+ case 0x24C1:
2665
+ bufpush(0x24DB);
2666
+ break;
2667
+ case 0x24C2:
2668
+ bufpush(0x24DC);
2669
+ break;
2670
+ case 0x24C3:
2671
+ bufpush(0x24DD);
2672
+ break;
2673
+ case 0x24C4:
2674
+ bufpush(0x24DE);
2675
+ break;
2676
+ case 0x24C5:
2677
+ bufpush(0x24DF);
2678
+ break;
2679
+ case 0x24C6:
2680
+ bufpush(0x24E0);
2681
+ break;
2682
+ case 0x24C7:
2683
+ bufpush(0x24E1);
2684
+ break;
2685
+ case 0x24C8:
2686
+ bufpush(0x24E2);
2687
+ break;
2688
+ case 0x24C9:
2689
+ bufpush(0x24E3);
2690
+ break;
2691
+ case 0x24CA:
2692
+ bufpush(0x24E4);
2693
+ break;
2694
+ case 0x24CB:
2695
+ bufpush(0x24E5);
2696
+ break;
2697
+ case 0x24CC:
2698
+ bufpush(0x24E6);
2699
+ break;
2700
+ case 0x24CD:
2701
+ bufpush(0x24E7);
2702
+ break;
2703
+ case 0x24CE:
2704
+ bufpush(0x24E8);
2705
+ break;
2706
+ case 0x24CF:
2707
+ bufpush(0x24E9);
2708
+ break;
2709
+ case 0x2C00:
2710
+ bufpush(0x2C30);
2711
+ break;
2712
+ case 0x2C01:
2713
+ bufpush(0x2C31);
2714
+ break;
2715
+ case 0x2C02:
2716
+ bufpush(0x2C32);
2717
+ break;
2718
+ case 0x2C03:
2719
+ bufpush(0x2C33);
2720
+ break;
2721
+ case 0x2C04:
2722
+ bufpush(0x2C34);
2723
+ break;
2724
+ case 0x2C05:
2725
+ bufpush(0x2C35);
2726
+ break;
2727
+ case 0x2C06:
2728
+ bufpush(0x2C36);
2729
+ break;
2730
+ case 0x2C07:
2731
+ bufpush(0x2C37);
2732
+ break;
2733
+ case 0x2C08:
2734
+ bufpush(0x2C38);
2735
+ break;
2736
+ case 0x2C09:
2737
+ bufpush(0x2C39);
2738
+ break;
2739
+ case 0x2C0A:
2740
+ bufpush(0x2C3A);
2741
+ break;
2742
+ case 0x2C0B:
2743
+ bufpush(0x2C3B);
2744
+ break;
2745
+ case 0x2C0C:
2746
+ bufpush(0x2C3C);
2747
+ break;
2748
+ case 0x2C0D:
2749
+ bufpush(0x2C3D);
2750
+ break;
2751
+ case 0x2C0E:
2752
+ bufpush(0x2C3E);
2753
+ break;
2754
+ case 0x2C0F:
2755
+ bufpush(0x2C3F);
2756
+ break;
2757
+ case 0x2C10:
2758
+ bufpush(0x2C40);
2759
+ break;
2760
+ case 0x2C11:
2761
+ bufpush(0x2C41);
2762
+ break;
2763
+ case 0x2C12:
2764
+ bufpush(0x2C42);
2765
+ break;
2766
+ case 0x2C13:
2767
+ bufpush(0x2C43);
2768
+ break;
2769
+ case 0x2C14:
2770
+ bufpush(0x2C44);
2771
+ break;
2772
+ case 0x2C15:
2773
+ bufpush(0x2C45);
2774
+ break;
2775
+ case 0x2C16:
2776
+ bufpush(0x2C46);
2777
+ break;
2778
+ case 0x2C17:
2779
+ bufpush(0x2C47);
2780
+ break;
2781
+ case 0x2C18:
2782
+ bufpush(0x2C48);
2783
+ break;
2784
+ case 0x2C19:
2785
+ bufpush(0x2C49);
2786
+ break;
2787
+ case 0x2C1A:
2788
+ bufpush(0x2C4A);
2789
+ break;
2790
+ case 0x2C1B:
2791
+ bufpush(0x2C4B);
2792
+ break;
2793
+ case 0x2C1C:
2794
+ bufpush(0x2C4C);
2795
+ break;
2796
+ case 0x2C1D:
2797
+ bufpush(0x2C4D);
2798
+ break;
2799
+ case 0x2C1E:
2800
+ bufpush(0x2C4E);
2801
+ break;
2802
+ case 0x2C1F:
2803
+ bufpush(0x2C4F);
2804
+ break;
2805
+ case 0x2C20:
2806
+ bufpush(0x2C50);
2807
+ break;
2808
+ case 0x2C21:
2809
+ bufpush(0x2C51);
2810
+ break;
2811
+ case 0x2C22:
2812
+ bufpush(0x2C52);
2813
+ break;
2814
+ case 0x2C23:
2815
+ bufpush(0x2C53);
2816
+ break;
2817
+ case 0x2C24:
2818
+ bufpush(0x2C54);
2819
+ break;
2820
+ case 0x2C25:
2821
+ bufpush(0x2C55);
2822
+ break;
2823
+ case 0x2C26:
2824
+ bufpush(0x2C56);
2825
+ break;
2826
+ case 0x2C27:
2827
+ bufpush(0x2C57);
2828
+ break;
2829
+ case 0x2C28:
2830
+ bufpush(0x2C58);
2831
+ break;
2832
+ case 0x2C29:
2833
+ bufpush(0x2C59);
2834
+ break;
2835
+ case 0x2C2A:
2836
+ bufpush(0x2C5A);
2837
+ break;
2838
+ case 0x2C2B:
2839
+ bufpush(0x2C5B);
2840
+ break;
2841
+ case 0x2C2C:
2842
+ bufpush(0x2C5C);
2843
+ break;
2844
+ case 0x2C2D:
2845
+ bufpush(0x2C5D);
2846
+ break;
2847
+ case 0x2C2E:
2848
+ bufpush(0x2C5E);
2849
+ break;
2850
+ case 0x2C60:
2851
+ bufpush(0x2C61);
2852
+ break;
2853
+ case 0x2C62:
2854
+ bufpush(0x026B);
2855
+ break;
2856
+ case 0x2C63:
2857
+ bufpush(0x1D7D);
2858
+ break;
2859
+ case 0x2C64:
2860
+ bufpush(0x027D);
2861
+ break;
2862
+ case 0x2C67:
2863
+ bufpush(0x2C68);
2864
+ break;
2865
+ case 0x2C69:
2866
+ bufpush(0x2C6A);
2867
+ break;
2868
+ case 0x2C6B:
2869
+ bufpush(0x2C6C);
2870
+ break;
2871
+ case 0x2C6D:
2872
+ bufpush(0x0251);
2873
+ break;
2874
+ case 0x2C6E:
2875
+ bufpush(0x0271);
2876
+ break;
2877
+ case 0x2C6F:
2878
+ bufpush(0x0250);
2879
+ break;
2880
+ case 0x2C70:
2881
+ bufpush(0x0252);
2882
+ break;
2883
+ case 0x2C72:
2884
+ bufpush(0x2C73);
2885
+ break;
2886
+ case 0x2C75:
2887
+ bufpush(0x2C76);
2888
+ break;
2889
+ case 0x2C7E:
2890
+ bufpush(0x023F);
2891
+ break;
2892
+ case 0x2C7F:
2893
+ bufpush(0x0240);
2894
+ break;
2895
+ case 0x2C80:
2896
+ bufpush(0x2C81);
2897
+ break;
2898
+ case 0x2C82:
2899
+ bufpush(0x2C83);
2900
+ break;
2901
+ case 0x2C84:
2902
+ bufpush(0x2C85);
2903
+ break;
2904
+ case 0x2C86:
2905
+ bufpush(0x2C87);
2906
+ break;
2907
+ case 0x2C88:
2908
+ bufpush(0x2C89);
2909
+ break;
2910
+ case 0x2C8A:
2911
+ bufpush(0x2C8B);
2912
+ break;
2913
+ case 0x2C8C:
2914
+ bufpush(0x2C8D);
2915
+ break;
2916
+ case 0x2C8E:
2917
+ bufpush(0x2C8F);
2918
+ break;
2919
+ case 0x2C90:
2920
+ bufpush(0x2C91);
2921
+ break;
2922
+ case 0x2C92:
2923
+ bufpush(0x2C93);
2924
+ break;
2925
+ case 0x2C94:
2926
+ bufpush(0x2C95);
2927
+ break;
2928
+ case 0x2C96:
2929
+ bufpush(0x2C97);
2930
+ break;
2931
+ case 0x2C98:
2932
+ bufpush(0x2C99);
2933
+ break;
2934
+ case 0x2C9A:
2935
+ bufpush(0x2C9B);
2936
+ break;
2937
+ case 0x2C9C:
2938
+ bufpush(0x2C9D);
2939
+ break;
2940
+ case 0x2C9E:
2941
+ bufpush(0x2C9F);
2942
+ break;
2943
+ case 0x2CA0:
2944
+ bufpush(0x2CA1);
2945
+ break;
2946
+ case 0x2CA2:
2947
+ bufpush(0x2CA3);
2948
+ break;
2949
+ case 0x2CA4:
2950
+ bufpush(0x2CA5);
2951
+ break;
2952
+ case 0x2CA6:
2953
+ bufpush(0x2CA7);
2954
+ break;
2955
+ case 0x2CA8:
2956
+ bufpush(0x2CA9);
2957
+ break;
2958
+ case 0x2CAA:
2959
+ bufpush(0x2CAB);
2960
+ break;
2961
+ case 0x2CAC:
2962
+ bufpush(0x2CAD);
2963
+ break;
2964
+ case 0x2CAE:
2965
+ bufpush(0x2CAF);
2966
+ break;
2967
+ case 0x2CB0:
2968
+ bufpush(0x2CB1);
2969
+ break;
2970
+ case 0x2CB2:
2971
+ bufpush(0x2CB3);
2972
+ break;
2973
+ case 0x2CB4:
2974
+ bufpush(0x2CB5);
2975
+ break;
2976
+ case 0x2CB6:
2977
+ bufpush(0x2CB7);
2978
+ break;
2979
+ case 0x2CB8:
2980
+ bufpush(0x2CB9);
2981
+ break;
2982
+ case 0x2CBA:
2983
+ bufpush(0x2CBB);
2984
+ break;
2985
+ case 0x2CBC:
2986
+ bufpush(0x2CBD);
2987
+ break;
2988
+ case 0x2CBE:
2989
+ bufpush(0x2CBF);
2990
+ break;
2991
+ case 0x2CC0:
2992
+ bufpush(0x2CC1);
2993
+ break;
2994
+ case 0x2CC2:
2995
+ bufpush(0x2CC3);
2996
+ break;
2997
+ case 0x2CC4:
2998
+ bufpush(0x2CC5);
2999
+ break;
3000
+ case 0x2CC6:
3001
+ bufpush(0x2CC7);
3002
+ break;
3003
+ case 0x2CC8:
3004
+ bufpush(0x2CC9);
3005
+ break;
3006
+ case 0x2CCA:
3007
+ bufpush(0x2CCB);
3008
+ break;
3009
+ case 0x2CCC:
3010
+ bufpush(0x2CCD);
3011
+ break;
3012
+ case 0x2CCE:
3013
+ bufpush(0x2CCF);
3014
+ break;
3015
+ case 0x2CD0:
3016
+ bufpush(0x2CD1);
3017
+ break;
3018
+ case 0x2CD2:
3019
+ bufpush(0x2CD3);
3020
+ break;
3021
+ case 0x2CD4:
3022
+ bufpush(0x2CD5);
3023
+ break;
3024
+ case 0x2CD6:
3025
+ bufpush(0x2CD7);
3026
+ break;
3027
+ case 0x2CD8:
3028
+ bufpush(0x2CD9);
3029
+ break;
3030
+ case 0x2CDA:
3031
+ bufpush(0x2CDB);
3032
+ break;
3033
+ case 0x2CDC:
3034
+ bufpush(0x2CDD);
3035
+ break;
3036
+ case 0x2CDE:
3037
+ bufpush(0x2CDF);
3038
+ break;
3039
+ case 0x2CE0:
3040
+ bufpush(0x2CE1);
3041
+ break;
3042
+ case 0x2CE2:
3043
+ bufpush(0x2CE3);
3044
+ break;
3045
+ case 0x2CEB:
3046
+ bufpush(0x2CEC);
3047
+ break;
3048
+ case 0x2CED:
3049
+ bufpush(0x2CEE);
3050
+ break;
3051
+ case 0x2CF2:
3052
+ bufpush(0x2CF3);
3053
+ break;
3054
+ case 0xA640:
3055
+ bufpush(0xA641);
3056
+ break;
3057
+ case 0xA642:
3058
+ bufpush(0xA643);
3059
+ break;
3060
+ case 0xA644:
3061
+ bufpush(0xA645);
3062
+ break;
3063
+ case 0xA646:
3064
+ bufpush(0xA647);
3065
+ break;
3066
+ case 0xA648:
3067
+ bufpush(0xA649);
3068
+ break;
3069
+ case 0xA64A:
3070
+ bufpush(0xA64B);
3071
+ break;
3072
+ case 0xA64C:
3073
+ bufpush(0xA64D);
3074
+ break;
3075
+ case 0xA64E:
3076
+ bufpush(0xA64F);
3077
+ break;
3078
+ case 0xA650:
3079
+ bufpush(0xA651);
3080
+ break;
3081
+ case 0xA652:
3082
+ bufpush(0xA653);
3083
+ break;
3084
+ case 0xA654:
3085
+ bufpush(0xA655);
3086
+ break;
3087
+ case 0xA656:
3088
+ bufpush(0xA657);
3089
+ break;
3090
+ case 0xA658:
3091
+ bufpush(0xA659);
3092
+ break;
3093
+ case 0xA65A:
3094
+ bufpush(0xA65B);
3095
+ break;
3096
+ case 0xA65C:
3097
+ bufpush(0xA65D);
3098
+ break;
3099
+ case 0xA65E:
3100
+ bufpush(0xA65F);
3101
+ break;
3102
+ case 0xA660:
3103
+ bufpush(0xA661);
3104
+ break;
3105
+ case 0xA662:
3106
+ bufpush(0xA663);
3107
+ break;
3108
+ case 0xA664:
3109
+ bufpush(0xA665);
3110
+ break;
3111
+ case 0xA666:
3112
+ bufpush(0xA667);
3113
+ break;
3114
+ case 0xA668:
3115
+ bufpush(0xA669);
3116
+ break;
3117
+ case 0xA66A:
3118
+ bufpush(0xA66B);
3119
+ break;
3120
+ case 0xA66C:
3121
+ bufpush(0xA66D);
3122
+ break;
3123
+ case 0xA680:
3124
+ bufpush(0xA681);
3125
+ break;
3126
+ case 0xA682:
3127
+ bufpush(0xA683);
3128
+ break;
3129
+ case 0xA684:
3130
+ bufpush(0xA685);
3131
+ break;
3132
+ case 0xA686:
3133
+ bufpush(0xA687);
3134
+ break;
3135
+ case 0xA688:
3136
+ bufpush(0xA689);
3137
+ break;
3138
+ case 0xA68A:
3139
+ bufpush(0xA68B);
3140
+ break;
3141
+ case 0xA68C:
3142
+ bufpush(0xA68D);
3143
+ break;
3144
+ case 0xA68E:
3145
+ bufpush(0xA68F);
3146
+ break;
3147
+ case 0xA690:
3148
+ bufpush(0xA691);
3149
+ break;
3150
+ case 0xA692:
3151
+ bufpush(0xA693);
3152
+ break;
3153
+ case 0xA694:
3154
+ bufpush(0xA695);
3155
+ break;
3156
+ case 0xA696:
3157
+ bufpush(0xA697);
3158
+ break;
3159
+ case 0xA698:
3160
+ bufpush(0xA699);
3161
+ break;
3162
+ case 0xA69A:
3163
+ bufpush(0xA69B);
3164
+ break;
3165
+ case 0xA722:
3166
+ bufpush(0xA723);
3167
+ break;
3168
+ case 0xA724:
3169
+ bufpush(0xA725);
3170
+ break;
3171
+ case 0xA726:
3172
+ bufpush(0xA727);
3173
+ break;
3174
+ case 0xA728:
3175
+ bufpush(0xA729);
3176
+ break;
3177
+ case 0xA72A:
3178
+ bufpush(0xA72B);
3179
+ break;
3180
+ case 0xA72C:
3181
+ bufpush(0xA72D);
3182
+ break;
3183
+ case 0xA72E:
3184
+ bufpush(0xA72F);
3185
+ break;
3186
+ case 0xA732:
3187
+ bufpush(0xA733);
3188
+ break;
3189
+ case 0xA734:
3190
+ bufpush(0xA735);
3191
+ break;
3192
+ case 0xA736:
3193
+ bufpush(0xA737);
3194
+ break;
3195
+ case 0xA738:
3196
+ bufpush(0xA739);
3197
+ break;
3198
+ case 0xA73A:
3199
+ bufpush(0xA73B);
3200
+ break;
3201
+ case 0xA73C:
3202
+ bufpush(0xA73D);
3203
+ break;
3204
+ case 0xA73E:
3205
+ bufpush(0xA73F);
3206
+ break;
3207
+ case 0xA740:
3208
+ bufpush(0xA741);
3209
+ break;
3210
+ case 0xA742:
3211
+ bufpush(0xA743);
3212
+ break;
3213
+ case 0xA744:
3214
+ bufpush(0xA745);
3215
+ break;
3216
+ case 0xA746:
3217
+ bufpush(0xA747);
3218
+ break;
3219
+ case 0xA748:
3220
+ bufpush(0xA749);
3221
+ break;
3222
+ case 0xA74A:
3223
+ bufpush(0xA74B);
3224
+ break;
3225
+ case 0xA74C:
3226
+ bufpush(0xA74D);
3227
+ break;
3228
+ case 0xA74E:
3229
+ bufpush(0xA74F);
3230
+ break;
3231
+ case 0xA750:
3232
+ bufpush(0xA751);
3233
+ break;
3234
+ case 0xA752:
3235
+ bufpush(0xA753);
3236
+ break;
3237
+ case 0xA754:
3238
+ bufpush(0xA755);
3239
+ break;
3240
+ case 0xA756:
3241
+ bufpush(0xA757);
3242
+ break;
3243
+ case 0xA758:
3244
+ bufpush(0xA759);
3245
+ break;
3246
+ case 0xA75A:
3247
+ bufpush(0xA75B);
3248
+ break;
3249
+ case 0xA75C:
3250
+ bufpush(0xA75D);
3251
+ break;
3252
+ case 0xA75E:
3253
+ bufpush(0xA75F);
3254
+ break;
3255
+ case 0xA760:
3256
+ bufpush(0xA761);
3257
+ break;
3258
+ case 0xA762:
3259
+ bufpush(0xA763);
3260
+ break;
3261
+ case 0xA764:
3262
+ bufpush(0xA765);
3263
+ break;
3264
+ case 0xA766:
3265
+ bufpush(0xA767);
3266
+ break;
3267
+ case 0xA768:
3268
+ bufpush(0xA769);
3269
+ break;
3270
+ case 0xA76A:
3271
+ bufpush(0xA76B);
3272
+ break;
3273
+ case 0xA76C:
3274
+ bufpush(0xA76D);
3275
+ break;
3276
+ case 0xA76E:
3277
+ bufpush(0xA76F);
3278
+ break;
3279
+ case 0xA779:
3280
+ bufpush(0xA77A);
3281
+ break;
3282
+ case 0xA77B:
3283
+ bufpush(0xA77C);
3284
+ break;
3285
+ case 0xA77D:
3286
+ bufpush(0x1D79);
3287
+ break;
3288
+ case 0xA77E:
3289
+ bufpush(0xA77F);
3290
+ break;
3291
+ case 0xA780:
3292
+ bufpush(0xA781);
3293
+ break;
3294
+ case 0xA782:
3295
+ bufpush(0xA783);
3296
+ break;
3297
+ case 0xA784:
3298
+ bufpush(0xA785);
3299
+ break;
3300
+ case 0xA786:
3301
+ bufpush(0xA787);
3302
+ break;
3303
+ case 0xA78B:
3304
+ bufpush(0xA78C);
3305
+ break;
3306
+ case 0xA78D:
3307
+ bufpush(0x0265);
3308
+ break;
3309
+ case 0xA790:
3310
+ bufpush(0xA791);
3311
+ break;
3312
+ case 0xA792:
3313
+ bufpush(0xA793);
3314
+ break;
3315
+ case 0xA796:
3316
+ bufpush(0xA797);
3317
+ break;
3318
+ case 0xA798:
3319
+ bufpush(0xA799);
3320
+ break;
3321
+ case 0xA79A:
3322
+ bufpush(0xA79B);
3323
+ break;
3324
+ case 0xA79C:
3325
+ bufpush(0xA79D);
3326
+ break;
3327
+ case 0xA79E:
3328
+ bufpush(0xA79F);
3329
+ break;
3330
+ case 0xA7A0:
3331
+ bufpush(0xA7A1);
3332
+ break;
3333
+ case 0xA7A2:
3334
+ bufpush(0xA7A3);
3335
+ break;
3336
+ case 0xA7A4:
3337
+ bufpush(0xA7A5);
3338
+ break;
3339
+ case 0xA7A6:
3340
+ bufpush(0xA7A7);
3341
+ break;
3342
+ case 0xA7A8:
3343
+ bufpush(0xA7A9);
3344
+ break;
3345
+ case 0xA7AA:
3346
+ bufpush(0x0266);
3347
+ break;
3348
+ case 0xA7AB:
3349
+ bufpush(0x025C);
3350
+ break;
3351
+ case 0xA7AC:
3352
+ bufpush(0x0261);
3353
+ break;
3354
+ case 0xA7AD:
3355
+ bufpush(0x026C);
3356
+ break;
3357
+ case 0xA7AE:
3358
+ bufpush(0x026A);
3359
+ break;
3360
+ case 0xA7B0:
3361
+ bufpush(0x029E);
3362
+ break;
3363
+ case 0xA7B1:
3364
+ bufpush(0x0287);
3365
+ break;
3366
+ case 0xA7B2:
3367
+ bufpush(0x029D);
3368
+ break;
3369
+ case 0xA7B3:
3370
+ bufpush(0xAB53);
3371
+ break;
3372
+ case 0xA7B4:
3373
+ bufpush(0xA7B5);
3374
+ break;
3375
+ case 0xA7B6:
3376
+ bufpush(0xA7B7);
3377
+ break;
3378
+ case 0xAB70:
3379
+ bufpush(0x13A0);
3380
+ break;
3381
+ case 0xAB71:
3382
+ bufpush(0x13A1);
3383
+ break;
3384
+ case 0xAB72:
3385
+ bufpush(0x13A2);
3386
+ break;
3387
+ case 0xAB73:
3388
+ bufpush(0x13A3);
3389
+ break;
3390
+ case 0xAB74:
3391
+ bufpush(0x13A4);
3392
+ break;
3393
+ case 0xAB75:
3394
+ bufpush(0x13A5);
3395
+ break;
3396
+ case 0xAB76:
3397
+ bufpush(0x13A6);
3398
+ break;
3399
+ case 0xAB77:
3400
+ bufpush(0x13A7);
3401
+ break;
3402
+ case 0xAB78:
3403
+ bufpush(0x13A8);
3404
+ break;
3405
+ case 0xAB79:
3406
+ bufpush(0x13A9);
3407
+ break;
3408
+ case 0xAB7A:
3409
+ bufpush(0x13AA);
3410
+ break;
3411
+ case 0xAB7B:
3412
+ bufpush(0x13AB);
3413
+ break;
3414
+ case 0xAB7C:
3415
+ bufpush(0x13AC);
3416
+ break;
3417
+ case 0xAB7D:
3418
+ bufpush(0x13AD);
3419
+ break;
3420
+ case 0xAB7E:
3421
+ bufpush(0x13AE);
3422
+ break;
3423
+ case 0xAB7F:
3424
+ bufpush(0x13AF);
3425
+ break;
3426
+ case 0xAB80:
3427
+ bufpush(0x13B0);
3428
+ break;
3429
+ case 0xAB81:
3430
+ bufpush(0x13B1);
3431
+ break;
3432
+ case 0xAB82:
3433
+ bufpush(0x13B2);
3434
+ break;
3435
+ case 0xAB83:
3436
+ bufpush(0x13B3);
3437
+ break;
3438
+ case 0xAB84:
3439
+ bufpush(0x13B4);
3440
+ break;
3441
+ case 0xAB85:
3442
+ bufpush(0x13B5);
3443
+ break;
3444
+ case 0xAB86:
3445
+ bufpush(0x13B6);
3446
+ break;
3447
+ case 0xAB87:
3448
+ bufpush(0x13B7);
3449
+ break;
3450
+ case 0xAB88:
3451
+ bufpush(0x13B8);
3452
+ break;
3453
+ case 0xAB89:
3454
+ bufpush(0x13B9);
3455
+ break;
3456
+ case 0xAB8A:
3457
+ bufpush(0x13BA);
3458
+ break;
3459
+ case 0xAB8B:
3460
+ bufpush(0x13BB);
3461
+ break;
3462
+ case 0xAB8C:
3463
+ bufpush(0x13BC);
3464
+ break;
3465
+ case 0xAB8D:
3466
+ bufpush(0x13BD);
3467
+ break;
3468
+ case 0xAB8E:
3469
+ bufpush(0x13BE);
3470
+ break;
3471
+ case 0xAB8F:
3472
+ bufpush(0x13BF);
3473
+ break;
3474
+ case 0xAB90:
3475
+ bufpush(0x13C0);
3476
+ break;
3477
+ case 0xAB91:
3478
+ bufpush(0x13C1);
3479
+ break;
3480
+ case 0xAB92:
3481
+ bufpush(0x13C2);
3482
+ break;
3483
+ case 0xAB93:
3484
+ bufpush(0x13C3);
3485
+ break;
3486
+ case 0xAB94:
3487
+ bufpush(0x13C4);
3488
+ break;
3489
+ case 0xAB95:
3490
+ bufpush(0x13C5);
3491
+ break;
3492
+ case 0xAB96:
3493
+ bufpush(0x13C6);
3494
+ break;
3495
+ case 0xAB97:
3496
+ bufpush(0x13C7);
3497
+ break;
3498
+ case 0xAB98:
3499
+ bufpush(0x13C8);
3500
+ break;
3501
+ case 0xAB99:
3502
+ bufpush(0x13C9);
3503
+ break;
3504
+ case 0xAB9A:
3505
+ bufpush(0x13CA);
3506
+ break;
3507
+ case 0xAB9B:
3508
+ bufpush(0x13CB);
3509
+ break;
3510
+ case 0xAB9C:
3511
+ bufpush(0x13CC);
3512
+ break;
3513
+ case 0xAB9D:
3514
+ bufpush(0x13CD);
3515
+ break;
3516
+ case 0xAB9E:
3517
+ bufpush(0x13CE);
3518
+ break;
3519
+ case 0xAB9F:
3520
+ bufpush(0x13CF);
3521
+ break;
3522
+ case 0xABA0:
3523
+ bufpush(0x13D0);
3524
+ break;
3525
+ case 0xABA1:
3526
+ bufpush(0x13D1);
3527
+ break;
3528
+ case 0xABA2:
3529
+ bufpush(0x13D2);
3530
+ break;
3531
+ case 0xABA3:
3532
+ bufpush(0x13D3);
3533
+ break;
3534
+ case 0xABA4:
3535
+ bufpush(0x13D4);
3536
+ break;
3537
+ case 0xABA5:
3538
+ bufpush(0x13D5);
3539
+ break;
3540
+ case 0xABA6:
3541
+ bufpush(0x13D6);
3542
+ break;
3543
+ case 0xABA7:
3544
+ bufpush(0x13D7);
3545
+ break;
3546
+ case 0xABA8:
3547
+ bufpush(0x13D8);
3548
+ break;
3549
+ case 0xABA9:
3550
+ bufpush(0x13D9);
3551
+ break;
3552
+ case 0xABAA:
3553
+ bufpush(0x13DA);
3554
+ break;
3555
+ case 0xABAB:
3556
+ bufpush(0x13DB);
3557
+ break;
3558
+ case 0xABAC:
3559
+ bufpush(0x13DC);
3560
+ break;
3561
+ case 0xABAD:
3562
+ bufpush(0x13DD);
3563
+ break;
3564
+ case 0xABAE:
3565
+ bufpush(0x13DE);
3566
+ break;
3567
+ case 0xABAF:
3568
+ bufpush(0x13DF);
3569
+ break;
3570
+ case 0xABB0:
3571
+ bufpush(0x13E0);
3572
+ break;
3573
+ case 0xABB1:
3574
+ bufpush(0x13E1);
3575
+ break;
3576
+ case 0xABB2:
3577
+ bufpush(0x13E2);
3578
+ break;
3579
+ case 0xABB3:
3580
+ bufpush(0x13E3);
3581
+ break;
3582
+ case 0xABB4:
3583
+ bufpush(0x13E4);
3584
+ break;
3585
+ case 0xABB5:
3586
+ bufpush(0x13E5);
3587
+ break;
3588
+ case 0xABB6:
3589
+ bufpush(0x13E6);
3590
+ break;
3591
+ case 0xABB7:
3592
+ bufpush(0x13E7);
3593
+ break;
3594
+ case 0xABB8:
3595
+ bufpush(0x13E8);
3596
+ break;
3597
+ case 0xABB9:
3598
+ bufpush(0x13E9);
3599
+ break;
3600
+ case 0xABBA:
3601
+ bufpush(0x13EA);
3602
+ break;
3603
+ case 0xABBB:
3604
+ bufpush(0x13EB);
3605
+ break;
3606
+ case 0xABBC:
3607
+ bufpush(0x13EC);
3608
+ break;
3609
+ case 0xABBD:
3610
+ bufpush(0x13ED);
3611
+ break;
3612
+ case 0xABBE:
3613
+ bufpush(0x13EE);
3614
+ break;
3615
+ case 0xABBF:
3616
+ bufpush(0x13EF);
3617
+ break;
3618
+ case 0xFB00:
3619
+ bufpush(0x0066);
3620
+ bufpush(0x0066);
3621
+ break;
3622
+ case 0xFB01:
3623
+ bufpush(0x0066);
3624
+ bufpush(0x0069);
3625
+ break;
3626
+ case 0xFB02:
3627
+ bufpush(0x0066);
3628
+ bufpush(0x006C);
3629
+ break;
3630
+ case 0xFB03:
3631
+ bufpush(0x0066);
3632
+ bufpush(0x0066);
3633
+ bufpush(0x0069);
3634
+ break;
3635
+ case 0xFB04:
3636
+ bufpush(0x0066);
3637
+ bufpush(0x0066);
3638
+ bufpush(0x006C);
3639
+ break;
3640
+ case 0xFB05:
3641
+ bufpush(0x0073);
3642
+ bufpush(0x0074);
3643
+ break;
3644
+ case 0xFB06:
3645
+ bufpush(0x0073);
3646
+ bufpush(0x0074);
3647
+ break;
3648
+ case 0xFB13:
3649
+ bufpush(0x0574);
3650
+ bufpush(0x0576);
3651
+ break;
3652
+ case 0xFB14:
3653
+ bufpush(0x0574);
3654
+ bufpush(0x0565);
3655
+ break;
3656
+ case 0xFB15:
3657
+ bufpush(0x0574);
3658
+ bufpush(0x056B);
3659
+ break;
3660
+ case 0xFB16:
3661
+ bufpush(0x057E);
3662
+ bufpush(0x0576);
3663
+ break;
3664
+ case 0xFB17:
3665
+ bufpush(0x0574);
3666
+ bufpush(0x056D);
3667
+ break;
3668
+ case 0xFF21:
3669
+ bufpush(0xFF41);
3670
+ break;
3671
+ case 0xFF22:
3672
+ bufpush(0xFF42);
3673
+ break;
3674
+ case 0xFF23:
3675
+ bufpush(0xFF43);
3676
+ break;
3677
+ case 0xFF24:
3678
+ bufpush(0xFF44);
3679
+ break;
3680
+ case 0xFF25:
3681
+ bufpush(0xFF45);
3682
+ break;
3683
+ case 0xFF26:
3684
+ bufpush(0xFF46);
3685
+ break;
3686
+ case 0xFF27:
3687
+ bufpush(0xFF47);
3688
+ break;
3689
+ case 0xFF28:
3690
+ bufpush(0xFF48);
3691
+ break;
3692
+ case 0xFF29:
3693
+ bufpush(0xFF49);
3694
+ break;
3695
+ case 0xFF2A:
3696
+ bufpush(0xFF4A);
3697
+ break;
3698
+ case 0xFF2B:
3699
+ bufpush(0xFF4B);
3700
+ break;
3701
+ case 0xFF2C:
3702
+ bufpush(0xFF4C);
3703
+ break;
3704
+ case 0xFF2D:
3705
+ bufpush(0xFF4D);
3706
+ break;
3707
+ case 0xFF2E:
3708
+ bufpush(0xFF4E);
3709
+ break;
3710
+ case 0xFF2F:
3711
+ bufpush(0xFF4F);
3712
+ break;
3713
+ case 0xFF30:
3714
+ bufpush(0xFF50);
3715
+ break;
3716
+ case 0xFF31:
3717
+ bufpush(0xFF51);
3718
+ break;
3719
+ case 0xFF32:
3720
+ bufpush(0xFF52);
3721
+ break;
3722
+ case 0xFF33:
3723
+ bufpush(0xFF53);
3724
+ break;
3725
+ case 0xFF34:
3726
+ bufpush(0xFF54);
3727
+ break;
3728
+ case 0xFF35:
3729
+ bufpush(0xFF55);
3730
+ break;
3731
+ case 0xFF36:
3732
+ bufpush(0xFF56);
3733
+ break;
3734
+ case 0xFF37:
3735
+ bufpush(0xFF57);
3736
+ break;
3737
+ case 0xFF38:
3738
+ bufpush(0xFF58);
3739
+ break;
3740
+ case 0xFF39:
3741
+ bufpush(0xFF59);
3742
+ break;
3743
+ case 0xFF3A:
3744
+ bufpush(0xFF5A);
3745
+ break;
3746
+ case 0x10400:
3747
+ bufpush(0x10428);
3748
+ break;
3749
+ case 0x10401:
3750
+ bufpush(0x10429);
3751
+ break;
3752
+ case 0x10402:
3753
+ bufpush(0x1042A);
3754
+ break;
3755
+ case 0x10403:
3756
+ bufpush(0x1042B);
3757
+ break;
3758
+ case 0x10404:
3759
+ bufpush(0x1042C);
3760
+ break;
3761
+ case 0x10405:
3762
+ bufpush(0x1042D);
3763
+ break;
3764
+ case 0x10406:
3765
+ bufpush(0x1042E);
3766
+ break;
3767
+ case 0x10407:
3768
+ bufpush(0x1042F);
3769
+ break;
3770
+ case 0x10408:
3771
+ bufpush(0x10430);
3772
+ break;
3773
+ case 0x10409:
3774
+ bufpush(0x10431);
3775
+ break;
3776
+ case 0x1040A:
3777
+ bufpush(0x10432);
3778
+ break;
3779
+ case 0x1040B:
3780
+ bufpush(0x10433);
3781
+ break;
3782
+ case 0x1040C:
3783
+ bufpush(0x10434);
3784
+ break;
3785
+ case 0x1040D:
3786
+ bufpush(0x10435);
3787
+ break;
3788
+ case 0x1040E:
3789
+ bufpush(0x10436);
3790
+ break;
3791
+ case 0x1040F:
3792
+ bufpush(0x10437);
3793
+ break;
3794
+ case 0x10410:
3795
+ bufpush(0x10438);
3796
+ break;
3797
+ case 0x10411:
3798
+ bufpush(0x10439);
3799
+ break;
3800
+ case 0x10412:
3801
+ bufpush(0x1043A);
3802
+ break;
3803
+ case 0x10413:
3804
+ bufpush(0x1043B);
3805
+ break;
3806
+ case 0x10414:
3807
+ bufpush(0x1043C);
3808
+ break;
3809
+ case 0x10415:
3810
+ bufpush(0x1043D);
3811
+ break;
3812
+ case 0x10416:
3813
+ bufpush(0x1043E);
3814
+ break;
3815
+ case 0x10417:
3816
+ bufpush(0x1043F);
3817
+ break;
3818
+ case 0x10418:
3819
+ bufpush(0x10440);
3820
+ break;
3821
+ case 0x10419:
3822
+ bufpush(0x10441);
3823
+ break;
3824
+ case 0x1041A:
3825
+ bufpush(0x10442);
3826
+ break;
3827
+ case 0x1041B:
3828
+ bufpush(0x10443);
3829
+ break;
3830
+ case 0x1041C:
3831
+ bufpush(0x10444);
3832
+ break;
3833
+ case 0x1041D:
3834
+ bufpush(0x10445);
3835
+ break;
3836
+ case 0x1041E:
3837
+ bufpush(0x10446);
3838
+ break;
3839
+ case 0x1041F:
3840
+ bufpush(0x10447);
3841
+ break;
3842
+ case 0x10420:
3843
+ bufpush(0x10448);
3844
+ break;
3845
+ case 0x10421:
3846
+ bufpush(0x10449);
3847
+ break;
3848
+ case 0x10422:
3849
+ bufpush(0x1044A);
3850
+ break;
3851
+ case 0x10423:
3852
+ bufpush(0x1044B);
3853
+ break;
3854
+ case 0x10424:
3855
+ bufpush(0x1044C);
3856
+ break;
3857
+ case 0x10425:
3858
+ bufpush(0x1044D);
3859
+ break;
3860
+ case 0x10426:
3861
+ bufpush(0x1044E);
3862
+ break;
3863
+ case 0x10427:
3864
+ bufpush(0x1044F);
3865
+ break;
3866
+ case 0x104B0:
3867
+ bufpush(0x104D8);
3868
+ break;
3869
+ case 0x104B1:
3870
+ bufpush(0x104D9);
3871
+ break;
3872
+ case 0x104B2:
3873
+ bufpush(0x104DA);
3874
+ break;
3875
+ case 0x104B3:
3876
+ bufpush(0x104DB);
3877
+ break;
3878
+ case 0x104B4:
3879
+ bufpush(0x104DC);
3880
+ break;
3881
+ case 0x104B5:
3882
+ bufpush(0x104DD);
3883
+ break;
3884
+ case 0x104B6:
3885
+ bufpush(0x104DE);
3886
+ break;
3887
+ case 0x104B7:
3888
+ bufpush(0x104DF);
3889
+ break;
3890
+ case 0x104B8:
3891
+ bufpush(0x104E0);
3892
+ break;
3893
+ case 0x104B9:
3894
+ bufpush(0x104E1);
3895
+ break;
3896
+ case 0x104BA:
3897
+ bufpush(0x104E2);
3898
+ break;
3899
+ case 0x104BB:
3900
+ bufpush(0x104E3);
3901
+ break;
3902
+ case 0x104BC:
3903
+ bufpush(0x104E4);
3904
+ break;
3905
+ case 0x104BD:
3906
+ bufpush(0x104E5);
3907
+ break;
3908
+ case 0x104BE:
3909
+ bufpush(0x104E6);
3910
+ break;
3911
+ case 0x104BF:
3912
+ bufpush(0x104E7);
3913
+ break;
3914
+ case 0x104C0:
3915
+ bufpush(0x104E8);
3916
+ break;
3917
+ case 0x104C1:
3918
+ bufpush(0x104E9);
3919
+ break;
3920
+ case 0x104C2:
3921
+ bufpush(0x104EA);
3922
+ break;
3923
+ case 0x104C3:
3924
+ bufpush(0x104EB);
3925
+ break;
3926
+ case 0x104C4:
3927
+ bufpush(0x104EC);
3928
+ break;
3929
+ case 0x104C5:
3930
+ bufpush(0x104ED);
3931
+ break;
3932
+ case 0x104C6:
3933
+ bufpush(0x104EE);
3934
+ break;
3935
+ case 0x104C7:
3936
+ bufpush(0x104EF);
3937
+ break;
3938
+ case 0x104C8:
3939
+ bufpush(0x104F0);
3940
+ break;
3941
+ case 0x104C9:
3942
+ bufpush(0x104F1);
3943
+ break;
3944
+ case 0x104CA:
3945
+ bufpush(0x104F2);
3946
+ break;
3947
+ case 0x104CB:
3948
+ bufpush(0x104F3);
3949
+ break;
3950
+ case 0x104CC:
3951
+ bufpush(0x104F4);
3952
+ break;
3953
+ case 0x104CD:
3954
+ bufpush(0x104F5);
3955
+ break;
3956
+ case 0x104CE:
3957
+ bufpush(0x104F6);
3958
+ break;
3959
+ case 0x104CF:
3960
+ bufpush(0x104F7);
3961
+ break;
3962
+ case 0x104D0:
3963
+ bufpush(0x104F8);
3964
+ break;
3965
+ case 0x104D1:
3966
+ bufpush(0x104F9);
3967
+ break;
3968
+ case 0x104D2:
3969
+ bufpush(0x104FA);
3970
+ break;
3971
+ case 0x104D3:
3972
+ bufpush(0x104FB);
3973
+ break;
3974
+ case 0x10C80:
3975
+ bufpush(0x10CC0);
3976
+ break;
3977
+ case 0x10C81:
3978
+ bufpush(0x10CC1);
3979
+ break;
3980
+ case 0x10C82:
3981
+ bufpush(0x10CC2);
3982
+ break;
3983
+ case 0x10C83:
3984
+ bufpush(0x10CC3);
3985
+ break;
3986
+ case 0x10C84:
3987
+ bufpush(0x10CC4);
3988
+ break;
3989
+ case 0x10C85:
3990
+ bufpush(0x10CC5);
3991
+ break;
3992
+ case 0x10C86:
3993
+ bufpush(0x10CC6);
3994
+ break;
3995
+ case 0x10C87:
3996
+ bufpush(0x10CC7);
3997
+ break;
3998
+ case 0x10C88:
3999
+ bufpush(0x10CC8);
4000
+ break;
4001
+ case 0x10C89:
4002
+ bufpush(0x10CC9);
4003
+ break;
4004
+ case 0x10C8A:
4005
+ bufpush(0x10CCA);
4006
+ break;
4007
+ case 0x10C8B:
4008
+ bufpush(0x10CCB);
4009
+ break;
4010
+ case 0x10C8C:
4011
+ bufpush(0x10CCC);
4012
+ break;
4013
+ case 0x10C8D:
4014
+ bufpush(0x10CCD);
4015
+ break;
4016
+ case 0x10C8E:
4017
+ bufpush(0x10CCE);
4018
+ break;
4019
+ case 0x10C8F:
4020
+ bufpush(0x10CCF);
4021
+ break;
4022
+ case 0x10C90:
4023
+ bufpush(0x10CD0);
4024
+ break;
4025
+ case 0x10C91:
4026
+ bufpush(0x10CD1);
4027
+ break;
4028
+ case 0x10C92:
4029
+ bufpush(0x10CD2);
4030
+ break;
4031
+ case 0x10C93:
4032
+ bufpush(0x10CD3);
4033
+ break;
4034
+ case 0x10C94:
4035
+ bufpush(0x10CD4);
4036
+ break;
4037
+ case 0x10C95:
4038
+ bufpush(0x10CD5);
4039
+ break;
4040
+ case 0x10C96:
4041
+ bufpush(0x10CD6);
4042
+ break;
4043
+ case 0x10C97:
4044
+ bufpush(0x10CD7);
4045
+ break;
4046
+ case 0x10C98:
4047
+ bufpush(0x10CD8);
4048
+ break;
4049
+ case 0x10C99:
4050
+ bufpush(0x10CD9);
4051
+ break;
4052
+ case 0x10C9A:
4053
+ bufpush(0x10CDA);
4054
+ break;
4055
+ case 0x10C9B:
4056
+ bufpush(0x10CDB);
4057
+ break;
4058
+ case 0x10C9C:
4059
+ bufpush(0x10CDC);
4060
+ break;
4061
+ case 0x10C9D:
4062
+ bufpush(0x10CDD);
4063
+ break;
4064
+ case 0x10C9E:
4065
+ bufpush(0x10CDE);
4066
+ break;
4067
+ case 0x10C9F:
4068
+ bufpush(0x10CDF);
4069
+ break;
4070
+ case 0x10CA0:
4071
+ bufpush(0x10CE0);
4072
+ break;
4073
+ case 0x10CA1:
4074
+ bufpush(0x10CE1);
4075
+ break;
4076
+ case 0x10CA2:
4077
+ bufpush(0x10CE2);
4078
+ break;
4079
+ case 0x10CA3:
4080
+ bufpush(0x10CE3);
4081
+ break;
4082
+ case 0x10CA4:
4083
+ bufpush(0x10CE4);
4084
+ break;
4085
+ case 0x10CA5:
4086
+ bufpush(0x10CE5);
4087
+ break;
4088
+ case 0x10CA6:
4089
+ bufpush(0x10CE6);
4090
+ break;
4091
+ case 0x10CA7:
4092
+ bufpush(0x10CE7);
4093
+ break;
4094
+ case 0x10CA8:
4095
+ bufpush(0x10CE8);
4096
+ break;
4097
+ case 0x10CA9:
4098
+ bufpush(0x10CE9);
4099
+ break;
4100
+ case 0x10CAA:
4101
+ bufpush(0x10CEA);
4102
+ break;
4103
+ case 0x10CAB:
4104
+ bufpush(0x10CEB);
4105
+ break;
4106
+ case 0x10CAC:
4107
+ bufpush(0x10CEC);
4108
+ break;
4109
+ case 0x10CAD:
4110
+ bufpush(0x10CED);
4111
+ break;
4112
+ case 0x10CAE:
4113
+ bufpush(0x10CEE);
4114
+ break;
4115
+ case 0x10CAF:
4116
+ bufpush(0x10CEF);
4117
+ break;
4118
+ case 0x10CB0:
4119
+ bufpush(0x10CF0);
4120
+ break;
4121
+ case 0x10CB1:
4122
+ bufpush(0x10CF1);
4123
+ break;
4124
+ case 0x10CB2:
4125
+ bufpush(0x10CF2);
4126
+ break;
4127
+ case 0x118A0:
4128
+ bufpush(0x118C0);
4129
+ break;
4130
+ case 0x118A1:
4131
+ bufpush(0x118C1);
4132
+ break;
4133
+ case 0x118A2:
4134
+ bufpush(0x118C2);
4135
+ break;
4136
+ case 0x118A3:
4137
+ bufpush(0x118C3);
4138
+ break;
4139
+ case 0x118A4:
4140
+ bufpush(0x118C4);
4141
+ break;
4142
+ case 0x118A5:
4143
+ bufpush(0x118C5);
4144
+ break;
4145
+ case 0x118A6:
4146
+ bufpush(0x118C6);
4147
+ break;
4148
+ case 0x118A7:
4149
+ bufpush(0x118C7);
4150
+ break;
4151
+ case 0x118A8:
4152
+ bufpush(0x118C8);
4153
+ break;
4154
+ case 0x118A9:
4155
+ bufpush(0x118C9);
4156
+ break;
4157
+ case 0x118AA:
4158
+ bufpush(0x118CA);
4159
+ break;
4160
+ case 0x118AB:
4161
+ bufpush(0x118CB);
4162
+ break;
4163
+ case 0x118AC:
4164
+ bufpush(0x118CC);
4165
+ break;
4166
+ case 0x118AD:
4167
+ bufpush(0x118CD);
4168
+ break;
4169
+ case 0x118AE:
4170
+ bufpush(0x118CE);
4171
+ break;
4172
+ case 0x118AF:
4173
+ bufpush(0x118CF);
4174
+ break;
4175
+ case 0x118B0:
4176
+ bufpush(0x118D0);
4177
+ break;
4178
+ case 0x118B1:
4179
+ bufpush(0x118D1);
4180
+ break;
4181
+ case 0x118B2:
4182
+ bufpush(0x118D2);
4183
+ break;
4184
+ case 0x118B3:
4185
+ bufpush(0x118D3);
4186
+ break;
4187
+ case 0x118B4:
4188
+ bufpush(0x118D4);
4189
+ break;
4190
+ case 0x118B5:
4191
+ bufpush(0x118D5);
4192
+ break;
4193
+ case 0x118B6:
4194
+ bufpush(0x118D6);
4195
+ break;
4196
+ case 0x118B7:
4197
+ bufpush(0x118D7);
4198
+ break;
4199
+ case 0x118B8:
4200
+ bufpush(0x118D8);
4201
+ break;
4202
+ case 0x118B9:
4203
+ bufpush(0x118D9);
4204
+ break;
4205
+ case 0x118BA:
4206
+ bufpush(0x118DA);
4207
+ break;
4208
+ case 0x118BB:
4209
+ bufpush(0x118DB);
4210
+ break;
4211
+ case 0x118BC:
4212
+ bufpush(0x118DC);
4213
+ break;
4214
+ case 0x118BD:
4215
+ bufpush(0x118DD);
4216
+ break;
4217
+ case 0x118BE:
4218
+ bufpush(0x118DE);
4219
+ break;
4220
+ case 0x118BF:
4221
+ bufpush(0x118DF);
4222
+ break;
4223
+ case 0x1E900:
4224
+ bufpush(0x1E922);
4225
+ break;
4226
+ case 0x1E901:
4227
+ bufpush(0x1E923);
4228
+ break;
4229
+ case 0x1E902:
4230
+ bufpush(0x1E924);
4231
+ break;
4232
+ case 0x1E903:
4233
+ bufpush(0x1E925);
4234
+ break;
4235
+ case 0x1E904:
4236
+ bufpush(0x1E926);
4237
+ break;
4238
+ case 0x1E905:
4239
+ bufpush(0x1E927);
4240
+ break;
4241
+ case 0x1E906:
4242
+ bufpush(0x1E928);
4243
+ break;
4244
+ case 0x1E907:
4245
+ bufpush(0x1E929);
4246
+ break;
4247
+ case 0x1E908:
4248
+ bufpush(0x1E92A);
4249
+ break;
4250
+ case 0x1E909:
4251
+ bufpush(0x1E92B);
4252
+ break;
4253
+ case 0x1E90A:
4254
+ bufpush(0x1E92C);
4255
+ break;
4256
+ case 0x1E90B:
4257
+ bufpush(0x1E92D);
4258
+ break;
4259
+ case 0x1E90C:
4260
+ bufpush(0x1E92E);
4261
+ break;
4262
+ case 0x1E90D:
4263
+ bufpush(0x1E92F);
4264
+ break;
4265
+ case 0x1E90E:
4266
+ bufpush(0x1E930);
4267
+ break;
4268
+ case 0x1E90F:
4269
+ bufpush(0x1E931);
4270
+ break;
4271
+ case 0x1E910:
4272
+ bufpush(0x1E932);
4273
+ break;
4274
+ case 0x1E911:
4275
+ bufpush(0x1E933);
4276
+ break;
4277
+ case 0x1E912:
4278
+ bufpush(0x1E934);
4279
+ break;
4280
+ case 0x1E913:
4281
+ bufpush(0x1E935);
4282
+ break;
4283
+ case 0x1E914:
4284
+ bufpush(0x1E936);
4285
+ break;
4286
+ case 0x1E915:
4287
+ bufpush(0x1E937);
4288
+ break;
4289
+ case 0x1E916:
4290
+ bufpush(0x1E938);
4291
+ break;
4292
+ case 0x1E917:
4293
+ bufpush(0x1E939);
4294
+ break;
4295
+ case 0x1E918:
4296
+ bufpush(0x1E93A);
4297
+ break;
4298
+ case 0x1E919:
4299
+ bufpush(0x1E93B);
4300
+ break;
4301
+ case 0x1E91A:
4302
+ bufpush(0x1E93C);
4303
+ break;
4304
+ case 0x1E91B:
4305
+ bufpush(0x1E93D);
4306
+ break;
4307
+ case 0x1E91C:
4308
+ bufpush(0x1E93E);
4309
+ break;
4310
+ case 0x1E91D:
4311
+ bufpush(0x1E93F);
4312
+ break;
4313
+ case 0x1E91E:
4314
+ bufpush(0x1E940);
4315
+ break;
4316
+ case 0x1E91F:
4317
+ bufpush(0x1E941);
4318
+ break;
4319
+ case 0x1E920:
4320
+ bufpush(0x1E942);
4321
+ break;
4322
+ case 0x1E921:
4323
+ bufpush(0x1E943);
4324
+ break;
4325
+ default:
4326
+ bufpush(c);
4327
+ }
--- a/src/case_fold_switch.inc
+++ b/src/case_fold_switch.inc
@@ -0,0 +1,4327 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/src/case_fold_switch.inc
+++ b/src/case_fold_switch.inc
@@ -0,0 +1,4327 @@
1 switch (c) {
2 case 0x0041:
3 bufpush(0x0061);
4 break;
5 case 0x0042:
6 bufpush(0x0062);
7 break;
8 case 0x0043:
9 bufpush(0x0063);
10 break;
11 case 0x0044:
12 bufpush(0x0064);
13 break;
14 case 0x0045:
15 bufpush(0x0065);
16 break;
17 case 0x0046:
18 bufpush(0x0066);
19 break;
20 case 0x0047:
21 bufpush(0x0067);
22 break;
23 case 0x0048:
24 bufpush(0x0068);
25 break;
26 case 0x0049:
27 bufpush(0x0069);
28 break;
29 case 0x004A:
30 bufpush(0x006A);
31 break;
32 case 0x004B:
33 bufpush(0x006B);
34 break;
35 case 0x004C:
36 bufpush(0x006C);
37 break;
38 case 0x004D:
39 bufpush(0x006D);
40 break;
41 case 0x004E:
42 bufpush(0x006E);
43 break;
44 case 0x004F:
45 bufpush(0x006F);
46 break;
47 case 0x0050:
48 bufpush(0x0070);
49 break;
50 case 0x0051:
51 bufpush(0x0071);
52 break;
53 case 0x0052:
54 bufpush(0x0072);
55 break;
56 case 0x0053:
57 bufpush(0x0073);
58 break;
59 case 0x0054:
60 bufpush(0x0074);
61 break;
62 case 0x0055:
63 bufpush(0x0075);
64 break;
65 case 0x0056:
66 bufpush(0x0076);
67 break;
68 case 0x0057:
69 bufpush(0x0077);
70 break;
71 case 0x0058:
72 bufpush(0x0078);
73 break;
74 case 0x0059:
75 bufpush(0x0079);
76 break;
77 case 0x005A:
78 bufpush(0x007A);
79 break;
80 case 0x00B5:
81 bufpush(0x03BC);
82 break;
83 case 0x00C0:
84 bufpush(0x00E0);
85 break;
86 case 0x00C1:
87 bufpush(0x00E1);
88 break;
89 case 0x00C2:
90 bufpush(0x00E2);
91 break;
92 case 0x00C3:
93 bufpush(0x00E3);
94 break;
95 case 0x00C4:
96 bufpush(0x00E4);
97 break;
98 case 0x00C5:
99 bufpush(0x00E5);
100 break;
101 case 0x00C6:
102 bufpush(0x00E6);
103 break;
104 case 0x00C7:
105 bufpush(0x00E7);
106 break;
107 case 0x00C8:
108 bufpush(0x00E8);
109 break;
110 case 0x00C9:
111 bufpush(0x00E9);
112 break;
113 case 0x00CA:
114 bufpush(0x00EA);
115 break;
116 case 0x00CB:
117 bufpush(0x00EB);
118 break;
119 case 0x00CC:
120 bufpush(0x00EC);
121 break;
122 case 0x00CD:
123 bufpush(0x00ED);
124 break;
125 case 0x00CE:
126 bufpush(0x00EE);
127 break;
128 case 0x00CF:
129 bufpush(0x00EF);
130 break;
131 case 0x00D0:
132 bufpush(0x00F0);
133 break;
134 case 0x00D1:
135 bufpush(0x00F1);
136 break;
137 case 0x00D2:
138 bufpush(0x00F2);
139 break;
140 case 0x00D3:
141 bufpush(0x00F3);
142 break;
143 case 0x00D4:
144 bufpush(0x00F4);
145 break;
146 case 0x00D5:
147 bufpush(0x00F5);
148 break;
149 case 0x00D6:
150 bufpush(0x00F6);
151 break;
152 case 0x00D8:
153 bufpush(0x00F8);
154 break;
155 case 0x00D9:
156 bufpush(0x00F9);
157 break;
158 case 0x00DA:
159 bufpush(0x00FA);
160 break;
161 case 0x00DB:
162 bufpush(0x00FB);
163 break;
164 case 0x00DC:
165 bufpush(0x00FC);
166 break;
167 case 0x00DD:
168 bufpush(0x00FD);
169 break;
170 case 0x00DE:
171 bufpush(0x00FE);
172 break;
173 case 0x00DF:
174 bufpush(0x0073);
175 bufpush(0x0073);
176 break;
177 case 0x0100:
178 bufpush(0x0101);
179 break;
180 case 0x0102:
181 bufpush(0x0103);
182 break;
183 case 0x0104:
184 bufpush(0x0105);
185 break;
186 case 0x0106:
187 bufpush(0x0107);
188 break;
189 case 0x0108:
190 bufpush(0x0109);
191 break;
192 case 0x010A:
193 bufpush(0x010B);
194 break;
195 case 0x010C:
196 bufpush(0x010D);
197 break;
198 case 0x010E:
199 bufpush(0x010F);
200 break;
201 case 0x0110:
202 bufpush(0x0111);
203 break;
204 case 0x0112:
205 bufpush(0x0113);
206 break;
207 case 0x0114:
208 bufpush(0x0115);
209 break;
210 case 0x0116:
211 bufpush(0x0117);
212 break;
213 case 0x0118:
214 bufpush(0x0119);
215 break;
216 case 0x011A:
217 bufpush(0x011B);
218 break;
219 case 0x011C:
220 bufpush(0x011D);
221 break;
222 case 0x011E:
223 bufpush(0x011F);
224 break;
225 case 0x0120:
226 bufpush(0x0121);
227 break;
228 case 0x0122:
229 bufpush(0x0123);
230 break;
231 case 0x0124:
232 bufpush(0x0125);
233 break;
234 case 0x0126:
235 bufpush(0x0127);
236 break;
237 case 0x0128:
238 bufpush(0x0129);
239 break;
240 case 0x012A:
241 bufpush(0x012B);
242 break;
243 case 0x012C:
244 bufpush(0x012D);
245 break;
246 case 0x012E:
247 bufpush(0x012F);
248 break;
249 case 0x0130:
250 bufpush(0x0069);
251 bufpush(0x0307);
252 break;
253 case 0x0132:
254 bufpush(0x0133);
255 break;
256 case 0x0134:
257 bufpush(0x0135);
258 break;
259 case 0x0136:
260 bufpush(0x0137);
261 break;
262 case 0x0139:
263 bufpush(0x013A);
264 break;
265 case 0x013B:
266 bufpush(0x013C);
267 break;
268 case 0x013D:
269 bufpush(0x013E);
270 break;
271 case 0x013F:
272 bufpush(0x0140);
273 break;
274 case 0x0141:
275 bufpush(0x0142);
276 break;
277 case 0x0143:
278 bufpush(0x0144);
279 break;
280 case 0x0145:
281 bufpush(0x0146);
282 break;
283 case 0x0147:
284 bufpush(0x0148);
285 break;
286 case 0x0149:
287 bufpush(0x02BC);
288 bufpush(0x006E);
289 break;
290 case 0x014A:
291 bufpush(0x014B);
292 break;
293 case 0x014C:
294 bufpush(0x014D);
295 break;
296 case 0x014E:
297 bufpush(0x014F);
298 break;
299 case 0x0150:
300 bufpush(0x0151);
301 break;
302 case 0x0152:
303 bufpush(0x0153);
304 break;
305 case 0x0154:
306 bufpush(0x0155);
307 break;
308 case 0x0156:
309 bufpush(0x0157);
310 break;
311 case 0x0158:
312 bufpush(0x0159);
313 break;
314 case 0x015A:
315 bufpush(0x015B);
316 break;
317 case 0x015C:
318 bufpush(0x015D);
319 break;
320 case 0x015E:
321 bufpush(0x015F);
322 break;
323 case 0x0160:
324 bufpush(0x0161);
325 break;
326 case 0x0162:
327 bufpush(0x0163);
328 break;
329 case 0x0164:
330 bufpush(0x0165);
331 break;
332 case 0x0166:
333 bufpush(0x0167);
334 break;
335 case 0x0168:
336 bufpush(0x0169);
337 break;
338 case 0x016A:
339 bufpush(0x016B);
340 break;
341 case 0x016C:
342 bufpush(0x016D);
343 break;
344 case 0x016E:
345 bufpush(0x016F);
346 break;
347 case 0x0170:
348 bufpush(0x0171);
349 break;
350 case 0x0172:
351 bufpush(0x0173);
352 break;
353 case 0x0174:
354 bufpush(0x0175);
355 break;
356 case 0x0176:
357 bufpush(0x0177);
358 break;
359 case 0x0178:
360 bufpush(0x00FF);
361 break;
362 case 0x0179:
363 bufpush(0x017A);
364 break;
365 case 0x017B:
366 bufpush(0x017C);
367 break;
368 case 0x017D:
369 bufpush(0x017E);
370 break;
371 case 0x017F:
372 bufpush(0x0073);
373 break;
374 case 0x0181:
375 bufpush(0x0253);
376 break;
377 case 0x0182:
378 bufpush(0x0183);
379 break;
380 case 0x0184:
381 bufpush(0x0185);
382 break;
383 case 0x0186:
384 bufpush(0x0254);
385 break;
386 case 0x0187:
387 bufpush(0x0188);
388 break;
389 case 0x0189:
390 bufpush(0x0256);
391 break;
392 case 0x018A:
393 bufpush(0x0257);
394 break;
395 case 0x018B:
396 bufpush(0x018C);
397 break;
398 case 0x018E:
399 bufpush(0x01DD);
400 break;
401 case 0x018F:
402 bufpush(0x0259);
403 break;
404 case 0x0190:
405 bufpush(0x025B);
406 break;
407 case 0x0191:
408 bufpush(0x0192);
409 break;
410 case 0x0193:
411 bufpush(0x0260);
412 break;
413 case 0x0194:
414 bufpush(0x0263);
415 break;
416 case 0x0196:
417 bufpush(0x0269);
418 break;
419 case 0x0197:
420 bufpush(0x0268);
421 break;
422 case 0x0198:
423 bufpush(0x0199);
424 break;
425 case 0x019C:
426 bufpush(0x026F);
427 break;
428 case 0x019D:
429 bufpush(0x0272);
430 break;
431 case 0x019F:
432 bufpush(0x0275);
433 break;
434 case 0x01A0:
435 bufpush(0x01A1);
436 break;
437 case 0x01A2:
438 bufpush(0x01A3);
439 break;
440 case 0x01A4:
441 bufpush(0x01A5);
442 break;
443 case 0x01A6:
444 bufpush(0x0280);
445 break;
446 case 0x01A7:
447 bufpush(0x01A8);
448 break;
449 case 0x01A9:
450 bufpush(0x0283);
451 break;
452 case 0x01AC:
453 bufpush(0x01AD);
454 break;
455 case 0x01AE:
456 bufpush(0x0288);
457 break;
458 case 0x01AF:
459 bufpush(0x01B0);
460 break;
461 case 0x01B1:
462 bufpush(0x028A);
463 break;
464 case 0x01B2:
465 bufpush(0x028B);
466 break;
467 case 0x01B3:
468 bufpush(0x01B4);
469 break;
470 case 0x01B5:
471 bufpush(0x01B6);
472 break;
473 case 0x01B7:
474 bufpush(0x0292);
475 break;
476 case 0x01B8:
477 bufpush(0x01B9);
478 break;
479 case 0x01BC:
480 bufpush(0x01BD);
481 break;
482 case 0x01C4:
483 bufpush(0x01C6);
484 break;
485 case 0x01C5:
486 bufpush(0x01C6);
487 break;
488 case 0x01C7:
489 bufpush(0x01C9);
490 break;
491 case 0x01C8:
492 bufpush(0x01C9);
493 break;
494 case 0x01CA:
495 bufpush(0x01CC);
496 break;
497 case 0x01CB:
498 bufpush(0x01CC);
499 break;
500 case 0x01CD:
501 bufpush(0x01CE);
502 break;
503 case 0x01CF:
504 bufpush(0x01D0);
505 break;
506 case 0x01D1:
507 bufpush(0x01D2);
508 break;
509 case 0x01D3:
510 bufpush(0x01D4);
511 break;
512 case 0x01D5:
513 bufpush(0x01D6);
514 break;
515 case 0x01D7:
516 bufpush(0x01D8);
517 break;
518 case 0x01D9:
519 bufpush(0x01DA);
520 break;
521 case 0x01DB:
522 bufpush(0x01DC);
523 break;
524 case 0x01DE:
525 bufpush(0x01DF);
526 break;
527 case 0x01E0:
528 bufpush(0x01E1);
529 break;
530 case 0x01E2:
531 bufpush(0x01E3);
532 break;
533 case 0x01E4:
534 bufpush(0x01E5);
535 break;
536 case 0x01E6:
537 bufpush(0x01E7);
538 break;
539 case 0x01E8:
540 bufpush(0x01E9);
541 break;
542 case 0x01EA:
543 bufpush(0x01EB);
544 break;
545 case 0x01EC:
546 bufpush(0x01ED);
547 break;
548 case 0x01EE:
549 bufpush(0x01EF);
550 break;
551 case 0x01F0:
552 bufpush(0x006A);
553 bufpush(0x030C);
554 break;
555 case 0x01F1:
556 bufpush(0x01F3);
557 break;
558 case 0x01F2:
559 bufpush(0x01F3);
560 break;
561 case 0x01F4:
562 bufpush(0x01F5);
563 break;
564 case 0x01F6:
565 bufpush(0x0195);
566 break;
567 case 0x01F7:
568 bufpush(0x01BF);
569 break;
570 case 0x01F8:
571 bufpush(0x01F9);
572 break;
573 case 0x01FA:
574 bufpush(0x01FB);
575 break;
576 case 0x01FC:
577 bufpush(0x01FD);
578 break;
579 case 0x01FE:
580 bufpush(0x01FF);
581 break;
582 case 0x0200:
583 bufpush(0x0201);
584 break;
585 case 0x0202:
586 bufpush(0x0203);
587 break;
588 case 0x0204:
589 bufpush(0x0205);
590 break;
591 case 0x0206:
592 bufpush(0x0207);
593 break;
594 case 0x0208:
595 bufpush(0x0209);
596 break;
597 case 0x020A:
598 bufpush(0x020B);
599 break;
600 case 0x020C:
601 bufpush(0x020D);
602 break;
603 case 0x020E:
604 bufpush(0x020F);
605 break;
606 case 0x0210:
607 bufpush(0x0211);
608 break;
609 case 0x0212:
610 bufpush(0x0213);
611 break;
612 case 0x0214:
613 bufpush(0x0215);
614 break;
615 case 0x0216:
616 bufpush(0x0217);
617 break;
618 case 0x0218:
619 bufpush(0x0219);
620 break;
621 case 0x021A:
622 bufpush(0x021B);
623 break;
624 case 0x021C:
625 bufpush(0x021D);
626 break;
627 case 0x021E:
628 bufpush(0x021F);
629 break;
630 case 0x0220:
631 bufpush(0x019E);
632 break;
633 case 0x0222:
634 bufpush(0x0223);
635 break;
636 case 0x0224:
637 bufpush(0x0225);
638 break;
639 case 0x0226:
640 bufpush(0x0227);
641 break;
642 case 0x0228:
643 bufpush(0x0229);
644 break;
645 case 0x022A:
646 bufpush(0x022B);
647 break;
648 case 0x022C:
649 bufpush(0x022D);
650 break;
651 case 0x022E:
652 bufpush(0x022F);
653 break;
654 case 0x0230:
655 bufpush(0x0231);
656 break;
657 case 0x0232:
658 bufpush(0x0233);
659 break;
660 case 0x023A:
661 bufpush(0x2C65);
662 break;
663 case 0x023B:
664 bufpush(0x023C);
665 break;
666 case 0x023D:
667 bufpush(0x019A);
668 break;
669 case 0x023E:
670 bufpush(0x2C66);
671 break;
672 case 0x0241:
673 bufpush(0x0242);
674 break;
675 case 0x0243:
676 bufpush(0x0180);
677 break;
678 case 0x0244:
679 bufpush(0x0289);
680 break;
681 case 0x0245:
682 bufpush(0x028C);
683 break;
684 case 0x0246:
685 bufpush(0x0247);
686 break;
687 case 0x0248:
688 bufpush(0x0249);
689 break;
690 case 0x024A:
691 bufpush(0x024B);
692 break;
693 case 0x024C:
694 bufpush(0x024D);
695 break;
696 case 0x024E:
697 bufpush(0x024F);
698 break;
699 case 0x0345:
700 bufpush(0x03B9);
701 break;
702 case 0x0370:
703 bufpush(0x0371);
704 break;
705 case 0x0372:
706 bufpush(0x0373);
707 break;
708 case 0x0376:
709 bufpush(0x0377);
710 break;
711 case 0x037F:
712 bufpush(0x03F3);
713 break;
714 case 0x0386:
715 bufpush(0x03AC);
716 break;
717 case 0x0388:
718 bufpush(0x03AD);
719 break;
720 case 0x0389:
721 bufpush(0x03AE);
722 break;
723 case 0x038A:
724 bufpush(0x03AF);
725 break;
726 case 0x038C:
727 bufpush(0x03CC);
728 break;
729 case 0x038E:
730 bufpush(0x03CD);
731 break;
732 case 0x038F:
733 bufpush(0x03CE);
734 break;
735 case 0x0390:
736 bufpush(0x03B9);
737 bufpush(0x0308);
738 bufpush(0x0301);
739 break;
740 case 0x0391:
741 bufpush(0x03B1);
742 break;
743 case 0x0392:
744 bufpush(0x03B2);
745 break;
746 case 0x0393:
747 bufpush(0x03B3);
748 break;
749 case 0x0394:
750 bufpush(0x03B4);
751 break;
752 case 0x0395:
753 bufpush(0x03B5);
754 break;
755 case 0x0396:
756 bufpush(0x03B6);
757 break;
758 case 0x0397:
759 bufpush(0x03B7);
760 break;
761 case 0x0398:
762 bufpush(0x03B8);
763 break;
764 case 0x0399:
765 bufpush(0x03B9);
766 break;
767 case 0x039A:
768 bufpush(0x03BA);
769 break;
770 case 0x039B:
771 bufpush(0x03BB);
772 break;
773 case 0x039C:
774 bufpush(0x03BC);
775 break;
776 case 0x039D:
777 bufpush(0x03BD);
778 break;
779 case 0x039E:
780 bufpush(0x03BE);
781 break;
782 case 0x039F:
783 bufpush(0x03BF);
784 break;
785 case 0x03A0:
786 bufpush(0x03C0);
787 break;
788 case 0x03A1:
789 bufpush(0x03C1);
790 break;
791 case 0x03A3:
792 bufpush(0x03C3);
793 break;
794 case 0x03A4:
795 bufpush(0x03C4);
796 break;
797 case 0x03A5:
798 bufpush(0x03C5);
799 break;
800 case 0x03A6:
801 bufpush(0x03C6);
802 break;
803 case 0x03A7:
804 bufpush(0x03C7);
805 break;
806 case 0x03A8:
807 bufpush(0x03C8);
808 break;
809 case 0x03A9:
810 bufpush(0x03C9);
811 break;
812 case 0x03AA:
813 bufpush(0x03CA);
814 break;
815 case 0x03AB:
816 bufpush(0x03CB);
817 break;
818 case 0x03B0:
819 bufpush(0x03C5);
820 bufpush(0x0308);
821 bufpush(0x0301);
822 break;
823 case 0x03C2:
824 bufpush(0x03C3);
825 break;
826 case 0x03CF:
827 bufpush(0x03D7);
828 break;
829 case 0x03D0:
830 bufpush(0x03B2);
831 break;
832 case 0x03D1:
833 bufpush(0x03B8);
834 break;
835 case 0x03D5:
836 bufpush(0x03C6);
837 break;
838 case 0x03D6:
839 bufpush(0x03C0);
840 break;
841 case 0x03D8:
842 bufpush(0x03D9);
843 break;
844 case 0x03DA:
845 bufpush(0x03DB);
846 break;
847 case 0x03DC:
848 bufpush(0x03DD);
849 break;
850 case 0x03DE:
851 bufpush(0x03DF);
852 break;
853 case 0x03E0:
854 bufpush(0x03E1);
855 break;
856 case 0x03E2:
857 bufpush(0x03E3);
858 break;
859 case 0x03E4:
860 bufpush(0x03E5);
861 break;
862 case 0x03E6:
863 bufpush(0x03E7);
864 break;
865 case 0x03E8:
866 bufpush(0x03E9);
867 break;
868 case 0x03EA:
869 bufpush(0x03EB);
870 break;
871 case 0x03EC:
872 bufpush(0x03ED);
873 break;
874 case 0x03EE:
875 bufpush(0x03EF);
876 break;
877 case 0x03F0:
878 bufpush(0x03BA);
879 break;
880 case 0x03F1:
881 bufpush(0x03C1);
882 break;
883 case 0x03F4:
884 bufpush(0x03B8);
885 break;
886 case 0x03F5:
887 bufpush(0x03B5);
888 break;
889 case 0x03F7:
890 bufpush(0x03F8);
891 break;
892 case 0x03F9:
893 bufpush(0x03F2);
894 break;
895 case 0x03FA:
896 bufpush(0x03FB);
897 break;
898 case 0x03FD:
899 bufpush(0x037B);
900 break;
901 case 0x03FE:
902 bufpush(0x037C);
903 break;
904 case 0x03FF:
905 bufpush(0x037D);
906 break;
907 case 0x0400:
908 bufpush(0x0450);
909 break;
910 case 0x0401:
911 bufpush(0x0451);
912 break;
913 case 0x0402:
914 bufpush(0x0452);
915 break;
916 case 0x0403:
917 bufpush(0x0453);
918 break;
919 case 0x0404:
920 bufpush(0x0454);
921 break;
922 case 0x0405:
923 bufpush(0x0455);
924 break;
925 case 0x0406:
926 bufpush(0x0456);
927 break;
928 case 0x0407:
929 bufpush(0x0457);
930 break;
931 case 0x0408:
932 bufpush(0x0458);
933 break;
934 case 0x0409:
935 bufpush(0x0459);
936 break;
937 case 0x040A:
938 bufpush(0x045A);
939 break;
940 case 0x040B:
941 bufpush(0x045B);
942 break;
943 case 0x040C:
944 bufpush(0x045C);
945 break;
946 case 0x040D:
947 bufpush(0x045D);
948 break;
949 case 0x040E:
950 bufpush(0x045E);
951 break;
952 case 0x040F:
953 bufpush(0x045F);
954 break;
955 case 0x0410:
956 bufpush(0x0430);
957 break;
958 case 0x0411:
959 bufpush(0x0431);
960 break;
961 case 0x0412:
962 bufpush(0x0432);
963 break;
964 case 0x0413:
965 bufpush(0x0433);
966 break;
967 case 0x0414:
968 bufpush(0x0434);
969 break;
970 case 0x0415:
971 bufpush(0x0435);
972 break;
973 case 0x0416:
974 bufpush(0x0436);
975 break;
976 case 0x0417:
977 bufpush(0x0437);
978 break;
979 case 0x0418:
980 bufpush(0x0438);
981 break;
982 case 0x0419:
983 bufpush(0x0439);
984 break;
985 case 0x041A:
986 bufpush(0x043A);
987 break;
988 case 0x041B:
989 bufpush(0x043B);
990 break;
991 case 0x041C:
992 bufpush(0x043C);
993 break;
994 case 0x041D:
995 bufpush(0x043D);
996 break;
997 case 0x041E:
998 bufpush(0x043E);
999 break;
1000 case 0x041F:
1001 bufpush(0x043F);
1002 break;
1003 case 0x0420:
1004 bufpush(0x0440);
1005 break;
1006 case 0x0421:
1007 bufpush(0x0441);
1008 break;
1009 case 0x0422:
1010 bufpush(0x0442);
1011 break;
1012 case 0x0423:
1013 bufpush(0x0443);
1014 break;
1015 case 0x0424:
1016 bufpush(0x0444);
1017 break;
1018 case 0x0425:
1019 bufpush(0x0445);
1020 break;
1021 case 0x0426:
1022 bufpush(0x0446);
1023 break;
1024 case 0x0427:
1025 bufpush(0x0447);
1026 break;
1027 case 0x0428:
1028 bufpush(0x0448);
1029 break;
1030 case 0x0429:
1031 bufpush(0x0449);
1032 break;
1033 case 0x042A:
1034 bufpush(0x044A);
1035 break;
1036 case 0x042B:
1037 bufpush(0x044B);
1038 break;
1039 case 0x042C:
1040 bufpush(0x044C);
1041 break;
1042 case 0x042D:
1043 bufpush(0x044D);
1044 break;
1045 case 0x042E:
1046 bufpush(0x044E);
1047 break;
1048 case 0x042F:
1049 bufpush(0x044F);
1050 break;
1051 case 0x0460:
1052 bufpush(0x0461);
1053 break;
1054 case 0x0462:
1055 bufpush(0x0463);
1056 break;
1057 case 0x0464:
1058 bufpush(0x0465);
1059 break;
1060 case 0x0466:
1061 bufpush(0x0467);
1062 break;
1063 case 0x0468:
1064 bufpush(0x0469);
1065 break;
1066 case 0x046A:
1067 bufpush(0x046B);
1068 break;
1069 case 0x046C:
1070 bufpush(0x046D);
1071 break;
1072 case 0x046E:
1073 bufpush(0x046F);
1074 break;
1075 case 0x0470:
1076 bufpush(0x0471);
1077 break;
1078 case 0x0472:
1079 bufpush(0x0473);
1080 break;
1081 case 0x0474:
1082 bufpush(0x0475);
1083 break;
1084 case 0x0476:
1085 bufpush(0x0477);
1086 break;
1087 case 0x0478:
1088 bufpush(0x0479);
1089 break;
1090 case 0x047A:
1091 bufpush(0x047B);
1092 break;
1093 case 0x047C:
1094 bufpush(0x047D);
1095 break;
1096 case 0x047E:
1097 bufpush(0x047F);
1098 break;
1099 case 0x0480:
1100 bufpush(0x0481);
1101 break;
1102 case 0x048A:
1103 bufpush(0x048B);
1104 break;
1105 case 0x048C:
1106 bufpush(0x048D);
1107 break;
1108 case 0x048E:
1109 bufpush(0x048F);
1110 break;
1111 case 0x0490:
1112 bufpush(0x0491);
1113 break;
1114 case 0x0492:
1115 bufpush(0x0493);
1116 break;
1117 case 0x0494:
1118 bufpush(0x0495);
1119 break;
1120 case 0x0496:
1121 bufpush(0x0497);
1122 break;
1123 case 0x0498:
1124 bufpush(0x0499);
1125 break;
1126 case 0x049A:
1127 bufpush(0x049B);
1128 break;
1129 case 0x049C:
1130 bufpush(0x049D);
1131 break;
1132 case 0x049E:
1133 bufpush(0x049F);
1134 break;
1135 case 0x04A0:
1136 bufpush(0x04A1);
1137 break;
1138 case 0x04A2:
1139 bufpush(0x04A3);
1140 break;
1141 case 0x04A4:
1142 bufpush(0x04A5);
1143 break;
1144 case 0x04A6:
1145 bufpush(0x04A7);
1146 break;
1147 case 0x04A8:
1148 bufpush(0x04A9);
1149 break;
1150 case 0x04AA:
1151 bufpush(0x04AB);
1152 break;
1153 case 0x04AC:
1154 bufpush(0x04AD);
1155 break;
1156 case 0x04AE:
1157 bufpush(0x04AF);
1158 break;
1159 case 0x04B0:
1160 bufpush(0x04B1);
1161 break;
1162 case 0x04B2:
1163 bufpush(0x04B3);
1164 break;
1165 case 0x04B4:
1166 bufpush(0x04B5);
1167 break;
1168 case 0x04B6:
1169 bufpush(0x04B7);
1170 break;
1171 case 0x04B8:
1172 bufpush(0x04B9);
1173 break;
1174 case 0x04BA:
1175 bufpush(0x04BB);
1176 break;
1177 case 0x04BC:
1178 bufpush(0x04BD);
1179 break;
1180 case 0x04BE:
1181 bufpush(0x04BF);
1182 break;
1183 case 0x04C0:
1184 bufpush(0x04CF);
1185 break;
1186 case 0x04C1:
1187 bufpush(0x04C2);
1188 break;
1189 case 0x04C3:
1190 bufpush(0x04C4);
1191 break;
1192 case 0x04C5:
1193 bufpush(0x04C6);
1194 break;
1195 case 0x04C7:
1196 bufpush(0x04C8);
1197 break;
1198 case 0x04C9:
1199 bufpush(0x04CA);
1200 break;
1201 case 0x04CB:
1202 bufpush(0x04CC);
1203 break;
1204 case 0x04CD:
1205 bufpush(0x04CE);
1206 break;
1207 case 0x04D0:
1208 bufpush(0x04D1);
1209 break;
1210 case 0x04D2:
1211 bufpush(0x04D3);
1212 break;
1213 case 0x04D4:
1214 bufpush(0x04D5);
1215 break;
1216 case 0x04D6:
1217 bufpush(0x04D7);
1218 break;
1219 case 0x04D8:
1220 bufpush(0x04D9);
1221 break;
1222 case 0x04DA:
1223 bufpush(0x04DB);
1224 break;
1225 case 0x04DC:
1226 bufpush(0x04DD);
1227 break;
1228 case 0x04DE:
1229 bufpush(0x04DF);
1230 break;
1231 case 0x04E0:
1232 bufpush(0x04E1);
1233 break;
1234 case 0x04E2:
1235 bufpush(0x04E3);
1236 break;
1237 case 0x04E4:
1238 bufpush(0x04E5);
1239 break;
1240 case 0x04E6:
1241 bufpush(0x04E7);
1242 break;
1243 case 0x04E8:
1244 bufpush(0x04E9);
1245 break;
1246 case 0x04EA:
1247 bufpush(0x04EB);
1248 break;
1249 case 0x04EC:
1250 bufpush(0x04ED);
1251 break;
1252 case 0x04EE:
1253 bufpush(0x04EF);
1254 break;
1255 case 0x04F0:
1256 bufpush(0x04F1);
1257 break;
1258 case 0x04F2:
1259 bufpush(0x04F3);
1260 break;
1261 case 0x04F4:
1262 bufpush(0x04F5);
1263 break;
1264 case 0x04F6:
1265 bufpush(0x04F7);
1266 break;
1267 case 0x04F8:
1268 bufpush(0x04F9);
1269 break;
1270 case 0x04FA:
1271 bufpush(0x04FB);
1272 break;
1273 case 0x04FC:
1274 bufpush(0x04FD);
1275 break;
1276 case 0x04FE:
1277 bufpush(0x04FF);
1278 break;
1279 case 0x0500:
1280 bufpush(0x0501);
1281 break;
1282 case 0x0502:
1283 bufpush(0x0503);
1284 break;
1285 case 0x0504:
1286 bufpush(0x0505);
1287 break;
1288 case 0x0506:
1289 bufpush(0x0507);
1290 break;
1291 case 0x0508:
1292 bufpush(0x0509);
1293 break;
1294 case 0x050A:
1295 bufpush(0x050B);
1296 break;
1297 case 0x050C:
1298 bufpush(0x050D);
1299 break;
1300 case 0x050E:
1301 bufpush(0x050F);
1302 break;
1303 case 0x0510:
1304 bufpush(0x0511);
1305 break;
1306 case 0x0512:
1307 bufpush(0x0513);
1308 break;
1309 case 0x0514:
1310 bufpush(0x0515);
1311 break;
1312 case 0x0516:
1313 bufpush(0x0517);
1314 break;
1315 case 0x0518:
1316 bufpush(0x0519);
1317 break;
1318 case 0x051A:
1319 bufpush(0x051B);
1320 break;
1321 case 0x051C:
1322 bufpush(0x051D);
1323 break;
1324 case 0x051E:
1325 bufpush(0x051F);
1326 break;
1327 case 0x0520:
1328 bufpush(0x0521);
1329 break;
1330 case 0x0522:
1331 bufpush(0x0523);
1332 break;
1333 case 0x0524:
1334 bufpush(0x0525);
1335 break;
1336 case 0x0526:
1337 bufpush(0x0527);
1338 break;
1339 case 0x0528:
1340 bufpush(0x0529);
1341 break;
1342 case 0x052A:
1343 bufpush(0x052B);
1344 break;
1345 case 0x052C:
1346 bufpush(0x052D);
1347 break;
1348 case 0x052E:
1349 bufpush(0x052F);
1350 break;
1351 case 0x0531:
1352 bufpush(0x0561);
1353 break;
1354 case 0x0532:
1355 bufpush(0x0562);
1356 break;
1357 case 0x0533:
1358 bufpush(0x0563);
1359 break;
1360 case 0x0534:
1361 bufpush(0x0564);
1362 break;
1363 case 0x0535:
1364 bufpush(0x0565);
1365 break;
1366 case 0x0536:
1367 bufpush(0x0566);
1368 break;
1369 case 0x0537:
1370 bufpush(0x0567);
1371 break;
1372 case 0x0538:
1373 bufpush(0x0568);
1374 break;
1375 case 0x0539:
1376 bufpush(0x0569);
1377 break;
1378 case 0x053A:
1379 bufpush(0x056A);
1380 break;
1381 case 0x053B:
1382 bufpush(0x056B);
1383 break;
1384 case 0x053C:
1385 bufpush(0x056C);
1386 break;
1387 case 0x053D:
1388 bufpush(0x056D);
1389 break;
1390 case 0x053E:
1391 bufpush(0x056E);
1392 break;
1393 case 0x053F:
1394 bufpush(0x056F);
1395 break;
1396 case 0x0540:
1397 bufpush(0x0570);
1398 break;
1399 case 0x0541:
1400 bufpush(0x0571);
1401 break;
1402 case 0x0542:
1403 bufpush(0x0572);
1404 break;
1405 case 0x0543:
1406 bufpush(0x0573);
1407 break;
1408 case 0x0544:
1409 bufpush(0x0574);
1410 break;
1411 case 0x0545:
1412 bufpush(0x0575);
1413 break;
1414 case 0x0546:
1415 bufpush(0x0576);
1416 break;
1417 case 0x0547:
1418 bufpush(0x0577);
1419 break;
1420 case 0x0548:
1421 bufpush(0x0578);
1422 break;
1423 case 0x0549:
1424 bufpush(0x0579);
1425 break;
1426 case 0x054A:
1427 bufpush(0x057A);
1428 break;
1429 case 0x054B:
1430 bufpush(0x057B);
1431 break;
1432 case 0x054C:
1433 bufpush(0x057C);
1434 break;
1435 case 0x054D:
1436 bufpush(0x057D);
1437 break;
1438 case 0x054E:
1439 bufpush(0x057E);
1440 break;
1441 case 0x054F:
1442 bufpush(0x057F);
1443 break;
1444 case 0x0550:
1445 bufpush(0x0580);
1446 break;
1447 case 0x0551:
1448 bufpush(0x0581);
1449 break;
1450 case 0x0552:
1451 bufpush(0x0582);
1452 break;
1453 case 0x0553:
1454 bufpush(0x0583);
1455 break;
1456 case 0x0554:
1457 bufpush(0x0584);
1458 break;
1459 case 0x0555:
1460 bufpush(0x0585);
1461 break;
1462 case 0x0556:
1463 bufpush(0x0586);
1464 break;
1465 case 0x0587:
1466 bufpush(0x0565);
1467 bufpush(0x0582);
1468 break;
1469 case 0x10A0:
1470 bufpush(0x2D00);
1471 break;
1472 case 0x10A1:
1473 bufpush(0x2D01);
1474 break;
1475 case 0x10A2:
1476 bufpush(0x2D02);
1477 break;
1478 case 0x10A3:
1479 bufpush(0x2D03);
1480 break;
1481 case 0x10A4:
1482 bufpush(0x2D04);
1483 break;
1484 case 0x10A5:
1485 bufpush(0x2D05);
1486 break;
1487 case 0x10A6:
1488 bufpush(0x2D06);
1489 break;
1490 case 0x10A7:
1491 bufpush(0x2D07);
1492 break;
1493 case 0x10A8:
1494 bufpush(0x2D08);
1495 break;
1496 case 0x10A9:
1497 bufpush(0x2D09);
1498 break;
1499 case 0x10AA:
1500 bufpush(0x2D0A);
1501 break;
1502 case 0x10AB:
1503 bufpush(0x2D0B);
1504 break;
1505 case 0x10AC:
1506 bufpush(0x2D0C);
1507 break;
1508 case 0x10AD:
1509 bufpush(0x2D0D);
1510 break;
1511 case 0x10AE:
1512 bufpush(0x2D0E);
1513 break;
1514 case 0x10AF:
1515 bufpush(0x2D0F);
1516 break;
1517 case 0x10B0:
1518 bufpush(0x2D10);
1519 break;
1520 case 0x10B1:
1521 bufpush(0x2D11);
1522 break;
1523 case 0x10B2:
1524 bufpush(0x2D12);
1525 break;
1526 case 0x10B3:
1527 bufpush(0x2D13);
1528 break;
1529 case 0x10B4:
1530 bufpush(0x2D14);
1531 break;
1532 case 0x10B5:
1533 bufpush(0x2D15);
1534 break;
1535 case 0x10B6:
1536 bufpush(0x2D16);
1537 break;
1538 case 0x10B7:
1539 bufpush(0x2D17);
1540 break;
1541 case 0x10B8:
1542 bufpush(0x2D18);
1543 break;
1544 case 0x10B9:
1545 bufpush(0x2D19);
1546 break;
1547 case 0x10BA:
1548 bufpush(0x2D1A);
1549 break;
1550 case 0x10BB:
1551 bufpush(0x2D1B);
1552 break;
1553 case 0x10BC:
1554 bufpush(0x2D1C);
1555 break;
1556 case 0x10BD:
1557 bufpush(0x2D1D);
1558 break;
1559 case 0x10BE:
1560 bufpush(0x2D1E);
1561 break;
1562 case 0x10BF:
1563 bufpush(0x2D1F);
1564 break;
1565 case 0x10C0:
1566 bufpush(0x2D20);
1567 break;
1568 case 0x10C1:
1569 bufpush(0x2D21);
1570 break;
1571 case 0x10C2:
1572 bufpush(0x2D22);
1573 break;
1574 case 0x10C3:
1575 bufpush(0x2D23);
1576 break;
1577 case 0x10C4:
1578 bufpush(0x2D24);
1579 break;
1580 case 0x10C5:
1581 bufpush(0x2D25);
1582 break;
1583 case 0x10C7:
1584 bufpush(0x2D27);
1585 break;
1586 case 0x10CD:
1587 bufpush(0x2D2D);
1588 break;
1589 case 0x13F8:
1590 bufpush(0x13F0);
1591 break;
1592 case 0x13F9:
1593 bufpush(0x13F1);
1594 break;
1595 case 0x13FA:
1596 bufpush(0x13F2);
1597 break;
1598 case 0x13FB:
1599 bufpush(0x13F3);
1600 break;
1601 case 0x13FC:
1602 bufpush(0x13F4);
1603 break;
1604 case 0x13FD:
1605 bufpush(0x13F5);
1606 break;
1607 case 0x1C80:
1608 bufpush(0x0432);
1609 break;
1610 case 0x1C81:
1611 bufpush(0x0434);
1612 break;
1613 case 0x1C82:
1614 bufpush(0x043E);
1615 break;
1616 case 0x1C83:
1617 bufpush(0x0441);
1618 break;
1619 case 0x1C84:
1620 bufpush(0x0442);
1621 break;
1622 case 0x1C85:
1623 bufpush(0x0442);
1624 break;
1625 case 0x1C86:
1626 bufpush(0x044A);
1627 break;
1628 case 0x1C87:
1629 bufpush(0x0463);
1630 break;
1631 case 0x1C88:
1632 bufpush(0xA64B);
1633 break;
1634 case 0x1E00:
1635 bufpush(0x1E01);
1636 break;
1637 case 0x1E02:
1638 bufpush(0x1E03);
1639 break;
1640 case 0x1E04:
1641 bufpush(0x1E05);
1642 break;
1643 case 0x1E06:
1644 bufpush(0x1E07);
1645 break;
1646 case 0x1E08:
1647 bufpush(0x1E09);
1648 break;
1649 case 0x1E0A:
1650 bufpush(0x1E0B);
1651 break;
1652 case 0x1E0C:
1653 bufpush(0x1E0D);
1654 break;
1655 case 0x1E0E:
1656 bufpush(0x1E0F);
1657 break;
1658 case 0x1E10:
1659 bufpush(0x1E11);
1660 break;
1661 case 0x1E12:
1662 bufpush(0x1E13);
1663 break;
1664 case 0x1E14:
1665 bufpush(0x1E15);
1666 break;
1667 case 0x1E16:
1668 bufpush(0x1E17);
1669 break;
1670 case 0x1E18:
1671 bufpush(0x1E19);
1672 break;
1673 case 0x1E1A:
1674 bufpush(0x1E1B);
1675 break;
1676 case 0x1E1C:
1677 bufpush(0x1E1D);
1678 break;
1679 case 0x1E1E:
1680 bufpush(0x1E1F);
1681 break;
1682 case 0x1E20:
1683 bufpush(0x1E21);
1684 break;
1685 case 0x1E22:
1686 bufpush(0x1E23);
1687 break;
1688 case 0x1E24:
1689 bufpush(0x1E25);
1690 break;
1691 case 0x1E26:
1692 bufpush(0x1E27);
1693 break;
1694 case 0x1E28:
1695 bufpush(0x1E29);
1696 break;
1697 case 0x1E2A:
1698 bufpush(0x1E2B);
1699 break;
1700 case 0x1E2C:
1701 bufpush(0x1E2D);
1702 break;
1703 case 0x1E2E:
1704 bufpush(0x1E2F);
1705 break;
1706 case 0x1E30:
1707 bufpush(0x1E31);
1708 break;
1709 case 0x1E32:
1710 bufpush(0x1E33);
1711 break;
1712 case 0x1E34:
1713 bufpush(0x1E35);
1714 break;
1715 case 0x1E36:
1716 bufpush(0x1E37);
1717 break;
1718 case 0x1E38:
1719 bufpush(0x1E39);
1720 break;
1721 case 0x1E3A:
1722 bufpush(0x1E3B);
1723 break;
1724 case 0x1E3C:
1725 bufpush(0x1E3D);
1726 break;
1727 case 0x1E3E:
1728 bufpush(0x1E3F);
1729 break;
1730 case 0x1E40:
1731 bufpush(0x1E41);
1732 break;
1733 case 0x1E42:
1734 bufpush(0x1E43);
1735 break;
1736 case 0x1E44:
1737 bufpush(0x1E45);
1738 break;
1739 case 0x1E46:
1740 bufpush(0x1E47);
1741 break;
1742 case 0x1E48:
1743 bufpush(0x1E49);
1744 break;
1745 case 0x1E4A:
1746 bufpush(0x1E4B);
1747 break;
1748 case 0x1E4C:
1749 bufpush(0x1E4D);
1750 break;
1751 case 0x1E4E:
1752 bufpush(0x1E4F);
1753 break;
1754 case 0x1E50:
1755 bufpush(0x1E51);
1756 break;
1757 case 0x1E52:
1758 bufpush(0x1E53);
1759 break;
1760 case 0x1E54:
1761 bufpush(0x1E55);
1762 break;
1763 case 0x1E56:
1764 bufpush(0x1E57);
1765 break;
1766 case 0x1E58:
1767 bufpush(0x1E59);
1768 break;
1769 case 0x1E5A:
1770 bufpush(0x1E5B);
1771 break;
1772 case 0x1E5C:
1773 bufpush(0x1E5D);
1774 break;
1775 case 0x1E5E:
1776 bufpush(0x1E5F);
1777 break;
1778 case 0x1E60:
1779 bufpush(0x1E61);
1780 break;
1781 case 0x1E62:
1782 bufpush(0x1E63);
1783 break;
1784 case 0x1E64:
1785 bufpush(0x1E65);
1786 break;
1787 case 0x1E66:
1788 bufpush(0x1E67);
1789 break;
1790 case 0x1E68:
1791 bufpush(0x1E69);
1792 break;
1793 case 0x1E6A:
1794 bufpush(0x1E6B);
1795 break;
1796 case 0x1E6C:
1797 bufpush(0x1E6D);
1798 break;
1799 case 0x1E6E:
1800 bufpush(0x1E6F);
1801 break;
1802 case 0x1E70:
1803 bufpush(0x1E71);
1804 break;
1805 case 0x1E72:
1806 bufpush(0x1E73);
1807 break;
1808 case 0x1E74:
1809 bufpush(0x1E75);
1810 break;
1811 case 0x1E76:
1812 bufpush(0x1E77);
1813 break;
1814 case 0x1E78:
1815 bufpush(0x1E79);
1816 break;
1817 case 0x1E7A:
1818 bufpush(0x1E7B);
1819 break;
1820 case 0x1E7C:
1821 bufpush(0x1E7D);
1822 break;
1823 case 0x1E7E:
1824 bufpush(0x1E7F);
1825 break;
1826 case 0x1E80:
1827 bufpush(0x1E81);
1828 break;
1829 case 0x1E82:
1830 bufpush(0x1E83);
1831 break;
1832 case 0x1E84:
1833 bufpush(0x1E85);
1834 break;
1835 case 0x1E86:
1836 bufpush(0x1E87);
1837 break;
1838 case 0x1E88:
1839 bufpush(0x1E89);
1840 break;
1841 case 0x1E8A:
1842 bufpush(0x1E8B);
1843 break;
1844 case 0x1E8C:
1845 bufpush(0x1E8D);
1846 break;
1847 case 0x1E8E:
1848 bufpush(0x1E8F);
1849 break;
1850 case 0x1E90:
1851 bufpush(0x1E91);
1852 break;
1853 case 0x1E92:
1854 bufpush(0x1E93);
1855 break;
1856 case 0x1E94:
1857 bufpush(0x1E95);
1858 break;
1859 case 0x1E96:
1860 bufpush(0x0068);
1861 bufpush(0x0331);
1862 break;
1863 case 0x1E97:
1864 bufpush(0x0074);
1865 bufpush(0x0308);
1866 break;
1867 case 0x1E98:
1868 bufpush(0x0077);
1869 bufpush(0x030A);
1870 break;
1871 case 0x1E99:
1872 bufpush(0x0079);
1873 bufpush(0x030A);
1874 break;
1875 case 0x1E9A:
1876 bufpush(0x0061);
1877 bufpush(0x02BE);
1878 break;
1879 case 0x1E9B:
1880 bufpush(0x1E61);
1881 break;
1882 case 0x1E9E:
1883 bufpush(0x0073);
1884 bufpush(0x0073);
1885 break;
1886 case 0x1EA0:
1887 bufpush(0x1EA1);
1888 break;
1889 case 0x1EA2:
1890 bufpush(0x1EA3);
1891 break;
1892 case 0x1EA4:
1893 bufpush(0x1EA5);
1894 break;
1895 case 0x1EA6:
1896 bufpush(0x1EA7);
1897 break;
1898 case 0x1EA8:
1899 bufpush(0x1EA9);
1900 break;
1901 case 0x1EAA:
1902 bufpush(0x1EAB);
1903 break;
1904 case 0x1EAC:
1905 bufpush(0x1EAD);
1906 break;
1907 case 0x1EAE:
1908 bufpush(0x1EAF);
1909 break;
1910 case 0x1EB0:
1911 bufpush(0x1EB1);
1912 break;
1913 case 0x1EB2:
1914 bufpush(0x1EB3);
1915 break;
1916 case 0x1EB4:
1917 bufpush(0x1EB5);
1918 break;
1919 case 0x1EB6:
1920 bufpush(0x1EB7);
1921 break;
1922 case 0x1EB8:
1923 bufpush(0x1EB9);
1924 break;
1925 case 0x1EBA:
1926 bufpush(0x1EBB);
1927 break;
1928 case 0x1EBC:
1929 bufpush(0x1EBD);
1930 break;
1931 case 0x1EBE:
1932 bufpush(0x1EBF);
1933 break;
1934 case 0x1EC0:
1935 bufpush(0x1EC1);
1936 break;
1937 case 0x1EC2:
1938 bufpush(0x1EC3);
1939 break;
1940 case 0x1EC4:
1941 bufpush(0x1EC5);
1942 break;
1943 case 0x1EC6:
1944 bufpush(0x1EC7);
1945 break;
1946 case 0x1EC8:
1947 bufpush(0x1EC9);
1948 break;
1949 case 0x1ECA:
1950 bufpush(0x1ECB);
1951 break;
1952 case 0x1ECC:
1953 bufpush(0x1ECD);
1954 break;
1955 case 0x1ECE:
1956 bufpush(0x1ECF);
1957 break;
1958 case 0x1ED0:
1959 bufpush(0x1ED1);
1960 break;
1961 case 0x1ED2:
1962 bufpush(0x1ED3);
1963 break;
1964 case 0x1ED4:
1965 bufpush(0x1ED5);
1966 break;
1967 case 0x1ED6:
1968 bufpush(0x1ED7);
1969 break;
1970 case 0x1ED8:
1971 bufpush(0x1ED9);
1972 break;
1973 case 0x1EDA:
1974 bufpush(0x1EDB);
1975 break;
1976 case 0x1EDC:
1977 bufpush(0x1EDD);
1978 break;
1979 case 0x1EDE:
1980 bufpush(0x1EDF);
1981 break;
1982 case 0x1EE0:
1983 bufpush(0x1EE1);
1984 break;
1985 case 0x1EE2:
1986 bufpush(0x1EE3);
1987 break;
1988 case 0x1EE4:
1989 bufpush(0x1EE5);
1990 break;
1991 case 0x1EE6:
1992 bufpush(0x1EE7);
1993 break;
1994 case 0x1EE8:
1995 bufpush(0x1EE9);
1996 break;
1997 case 0x1EEA:
1998 bufpush(0x1EEB);
1999 break;
2000 case 0x1EEC:
2001 bufpush(0x1EED);
2002 break;
2003 case 0x1EEE:
2004 bufpush(0x1EEF);
2005 break;
2006 case 0x1EF0:
2007 bufpush(0x1EF1);
2008 break;
2009 case 0x1EF2:
2010 bufpush(0x1EF3);
2011 break;
2012 case 0x1EF4:
2013 bufpush(0x1EF5);
2014 break;
2015 case 0x1EF6:
2016 bufpush(0x1EF7);
2017 break;
2018 case 0x1EF8:
2019 bufpush(0x1EF9);
2020 break;
2021 case 0x1EFA:
2022 bufpush(0x1EFB);
2023 break;
2024 case 0x1EFC:
2025 bufpush(0x1EFD);
2026 break;
2027 case 0x1EFE:
2028 bufpush(0x1EFF);
2029 break;
2030 case 0x1F08:
2031 bufpush(0x1F00);
2032 break;
2033 case 0x1F09:
2034 bufpush(0x1F01);
2035 break;
2036 case 0x1F0A:
2037 bufpush(0x1F02);
2038 break;
2039 case 0x1F0B:
2040 bufpush(0x1F03);
2041 break;
2042 case 0x1F0C:
2043 bufpush(0x1F04);
2044 break;
2045 case 0x1F0D:
2046 bufpush(0x1F05);
2047 break;
2048 case 0x1F0E:
2049 bufpush(0x1F06);
2050 break;
2051 case 0x1F0F:
2052 bufpush(0x1F07);
2053 break;
2054 case 0x1F18:
2055 bufpush(0x1F10);
2056 break;
2057 case 0x1F19:
2058 bufpush(0x1F11);
2059 break;
2060 case 0x1F1A:
2061 bufpush(0x1F12);
2062 break;
2063 case 0x1F1B:
2064 bufpush(0x1F13);
2065 break;
2066 case 0x1F1C:
2067 bufpush(0x1F14);
2068 break;
2069 case 0x1F1D:
2070 bufpush(0x1F15);
2071 break;
2072 case 0x1F28:
2073 bufpush(0x1F20);
2074 break;
2075 case 0x1F29:
2076 bufpush(0x1F21);
2077 break;
2078 case 0x1F2A:
2079 bufpush(0x1F22);
2080 break;
2081 case 0x1F2B:
2082 bufpush(0x1F23);
2083 break;
2084 case 0x1F2C:
2085 bufpush(0x1F24);
2086 break;
2087 case 0x1F2D:
2088 bufpush(0x1F25);
2089 break;
2090 case 0x1F2E:
2091 bufpush(0x1F26);
2092 break;
2093 case 0x1F2F:
2094 bufpush(0x1F27);
2095 break;
2096 case 0x1F38:
2097 bufpush(0x1F30);
2098 break;
2099 case 0x1F39:
2100 bufpush(0x1F31);
2101 break;
2102 case 0x1F3A:
2103 bufpush(0x1F32);
2104 break;
2105 case 0x1F3B:
2106 bufpush(0x1F33);
2107 break;
2108 case 0x1F3C:
2109 bufpush(0x1F34);
2110 break;
2111 case 0x1F3D:
2112 bufpush(0x1F35);
2113 break;
2114 case 0x1F3E:
2115 bufpush(0x1F36);
2116 break;
2117 case 0x1F3F:
2118 bufpush(0x1F37);
2119 break;
2120 case 0x1F48:
2121 bufpush(0x1F40);
2122 break;
2123 case 0x1F49:
2124 bufpush(0x1F41);
2125 break;
2126 case 0x1F4A:
2127 bufpush(0x1F42);
2128 break;
2129 case 0x1F4B:
2130 bufpush(0x1F43);
2131 break;
2132 case 0x1F4C:
2133 bufpush(0x1F44);
2134 break;
2135 case 0x1F4D:
2136 bufpush(0x1F45);
2137 break;
2138 case 0x1F50:
2139 bufpush(0x03C5);
2140 bufpush(0x0313);
2141 break;
2142 case 0x1F52:
2143 bufpush(0x03C5);
2144 bufpush(0x0313);
2145 bufpush(0x0300);
2146 break;
2147 case 0x1F54:
2148 bufpush(0x03C5);
2149 bufpush(0x0313);
2150 bufpush(0x0301);
2151 break;
2152 case 0x1F56:
2153 bufpush(0x03C5);
2154 bufpush(0x0313);
2155 bufpush(0x0342);
2156 break;
2157 case 0x1F59:
2158 bufpush(0x1F51);
2159 break;
2160 case 0x1F5B:
2161 bufpush(0x1F53);
2162 break;
2163 case 0x1F5D:
2164 bufpush(0x1F55);
2165 break;
2166 case 0x1F5F:
2167 bufpush(0x1F57);
2168 break;
2169 case 0x1F68:
2170 bufpush(0x1F60);
2171 break;
2172 case 0x1F69:
2173 bufpush(0x1F61);
2174 break;
2175 case 0x1F6A:
2176 bufpush(0x1F62);
2177 break;
2178 case 0x1F6B:
2179 bufpush(0x1F63);
2180 break;
2181 case 0x1F6C:
2182 bufpush(0x1F64);
2183 break;
2184 case 0x1F6D:
2185 bufpush(0x1F65);
2186 break;
2187 case 0x1F6E:
2188 bufpush(0x1F66);
2189 break;
2190 case 0x1F6F:
2191 bufpush(0x1F67);
2192 break;
2193 case 0x1F80:
2194 bufpush(0x1F00);
2195 bufpush(0x03B9);
2196 break;
2197 case 0x1F81:
2198 bufpush(0x1F01);
2199 bufpush(0x03B9);
2200 break;
2201 case 0x1F82:
2202 bufpush(0x1F02);
2203 bufpush(0x03B9);
2204 break;
2205 case 0x1F83:
2206 bufpush(0x1F03);
2207 bufpush(0x03B9);
2208 break;
2209 case 0x1F84:
2210 bufpush(0x1F04);
2211 bufpush(0x03B9);
2212 break;
2213 case 0x1F85:
2214 bufpush(0x1F05);
2215 bufpush(0x03B9);
2216 break;
2217 case 0x1F86:
2218 bufpush(0x1F06);
2219 bufpush(0x03B9);
2220 break;
2221 case 0x1F87:
2222 bufpush(0x1F07);
2223 bufpush(0x03B9);
2224 break;
2225 case 0x1F88:
2226 bufpush(0x1F00);
2227 bufpush(0x03B9);
2228 break;
2229 case 0x1F89:
2230 bufpush(0x1F01);
2231 bufpush(0x03B9);
2232 break;
2233 case 0x1F8A:
2234 bufpush(0x1F02);
2235 bufpush(0x03B9);
2236 break;
2237 case 0x1F8B:
2238 bufpush(0x1F03);
2239 bufpush(0x03B9);
2240 break;
2241 case 0x1F8C:
2242 bufpush(0x1F04);
2243 bufpush(0x03B9);
2244 break;
2245 case 0x1F8D:
2246 bufpush(0x1F05);
2247 bufpush(0x03B9);
2248 break;
2249 case 0x1F8E:
2250 bufpush(0x1F06);
2251 bufpush(0x03B9);
2252 break;
2253 case 0x1F8F:
2254 bufpush(0x1F07);
2255 bufpush(0x03B9);
2256 break;
2257 case 0x1F90:
2258 bufpush(0x1F20);
2259 bufpush(0x03B9);
2260 break;
2261 case 0x1F91:
2262 bufpush(0x1F21);
2263 bufpush(0x03B9);
2264 break;
2265 case 0x1F92:
2266 bufpush(0x1F22);
2267 bufpush(0x03B9);
2268 break;
2269 case 0x1F93:
2270 bufpush(0x1F23);
2271 bufpush(0x03B9);
2272 break;
2273 case 0x1F94:
2274 bufpush(0x1F24);
2275 bufpush(0x03B9);
2276 break;
2277 case 0x1F95:
2278 bufpush(0x1F25);
2279 bufpush(0x03B9);
2280 break;
2281 case 0x1F96:
2282 bufpush(0x1F26);
2283 bufpush(0x03B9);
2284 break;
2285 case 0x1F97:
2286 bufpush(0x1F27);
2287 bufpush(0x03B9);
2288 break;
2289 case 0x1F98:
2290 bufpush(0x1F20);
2291 bufpush(0x03B9);
2292 break;
2293 case 0x1F99:
2294 bufpush(0x1F21);
2295 bufpush(0x03B9);
2296 break;
2297 case 0x1F9A:
2298 bufpush(0x1F22);
2299 bufpush(0x03B9);
2300 break;
2301 case 0x1F9B:
2302 bufpush(0x1F23);
2303 bufpush(0x03B9);
2304 break;
2305 case 0x1F9C:
2306 bufpush(0x1F24);
2307 bufpush(0x03B9);
2308 break;
2309 case 0x1F9D:
2310 bufpush(0x1F25);
2311 bufpush(0x03B9);
2312 break;
2313 case 0x1F9E:
2314 bufpush(0x1F26);
2315 bufpush(0x03B9);
2316 break;
2317 case 0x1F9F:
2318 bufpush(0x1F27);
2319 bufpush(0x03B9);
2320 break;
2321 case 0x1FA0:
2322 bufpush(0x1F60);
2323 bufpush(0x03B9);
2324 break;
2325 case 0x1FA1:
2326 bufpush(0x1F61);
2327 bufpush(0x03B9);
2328 break;
2329 case 0x1FA2:
2330 bufpush(0x1F62);
2331 bufpush(0x03B9);
2332 break;
2333 case 0x1FA3:
2334 bufpush(0x1F63);
2335 bufpush(0x03B9);
2336 break;
2337 case 0x1FA4:
2338 bufpush(0x1F64);
2339 bufpush(0x03B9);
2340 break;
2341 case 0x1FA5:
2342 bufpush(0x1F65);
2343 bufpush(0x03B9);
2344 break;
2345 case 0x1FA6:
2346 bufpush(0x1F66);
2347 bufpush(0x03B9);
2348 break;
2349 case 0x1FA7:
2350 bufpush(0x1F67);
2351 bufpush(0x03B9);
2352 break;
2353 case 0x1FA8:
2354 bufpush(0x1F60);
2355 bufpush(0x03B9);
2356 break;
2357 case 0x1FA9:
2358 bufpush(0x1F61);
2359 bufpush(0x03B9);
2360 break;
2361 case 0x1FAA:
2362 bufpush(0x1F62);
2363 bufpush(0x03B9);
2364 break;
2365 case 0x1FAB:
2366 bufpush(0x1F63);
2367 bufpush(0x03B9);
2368 break;
2369 case 0x1FAC:
2370 bufpush(0x1F64);
2371 bufpush(0x03B9);
2372 break;
2373 case 0x1FAD:
2374 bufpush(0x1F65);
2375 bufpush(0x03B9);
2376 break;
2377 case 0x1FAE:
2378 bufpush(0x1F66);
2379 bufpush(0x03B9);
2380 break;
2381 case 0x1FAF:
2382 bufpush(0x1F67);
2383 bufpush(0x03B9);
2384 break;
2385 case 0x1FB2:
2386 bufpush(0x1F70);
2387 bufpush(0x03B9);
2388 break;
2389 case 0x1FB3:
2390 bufpush(0x03B1);
2391 bufpush(0x03B9);
2392 break;
2393 case 0x1FB4:
2394 bufpush(0x03AC);
2395 bufpush(0x03B9);
2396 break;
2397 case 0x1FB6:
2398 bufpush(0x03B1);
2399 bufpush(0x0342);
2400 break;
2401 case 0x1FB7:
2402 bufpush(0x03B1);
2403 bufpush(0x0342);
2404 bufpush(0x03B9);
2405 break;
2406 case 0x1FB8:
2407 bufpush(0x1FB0);
2408 break;
2409 case 0x1FB9:
2410 bufpush(0x1FB1);
2411 break;
2412 case 0x1FBA:
2413 bufpush(0x1F70);
2414 break;
2415 case 0x1FBB:
2416 bufpush(0x1F71);
2417 break;
2418 case 0x1FBC:
2419 bufpush(0x03B1);
2420 bufpush(0x03B9);
2421 break;
2422 case 0x1FBE:
2423 bufpush(0x03B9);
2424 break;
2425 case 0x1FC2:
2426 bufpush(0x1F74);
2427 bufpush(0x03B9);
2428 break;
2429 case 0x1FC3:
2430 bufpush(0x03B7);
2431 bufpush(0x03B9);
2432 break;
2433 case 0x1FC4:
2434 bufpush(0x03AE);
2435 bufpush(0x03B9);
2436 break;
2437 case 0x1FC6:
2438 bufpush(0x03B7);
2439 bufpush(0x0342);
2440 break;
2441 case 0x1FC7:
2442 bufpush(0x03B7);
2443 bufpush(0x0342);
2444 bufpush(0x03B9);
2445 break;
2446 case 0x1FC8:
2447 bufpush(0x1F72);
2448 break;
2449 case 0x1FC9:
2450 bufpush(0x1F73);
2451 break;
2452 case 0x1FCA:
2453 bufpush(0x1F74);
2454 break;
2455 case 0x1FCB:
2456 bufpush(0x1F75);
2457 break;
2458 case 0x1FCC:
2459 bufpush(0x03B7);
2460 bufpush(0x03B9);
2461 break;
2462 case 0x1FD2:
2463 bufpush(0x03B9);
2464 bufpush(0x0308);
2465 bufpush(0x0300);
2466 break;
2467 case 0x1FD3:
2468 bufpush(0x03B9);
2469 bufpush(0x0308);
2470 bufpush(0x0301);
2471 break;
2472 case 0x1FD6:
2473 bufpush(0x03B9);
2474 bufpush(0x0342);
2475 break;
2476 case 0x1FD7:
2477 bufpush(0x03B9);
2478 bufpush(0x0308);
2479 bufpush(0x0342);
2480 break;
2481 case 0x1FD8:
2482 bufpush(0x1FD0);
2483 break;
2484 case 0x1FD9:
2485 bufpush(0x1FD1);
2486 break;
2487 case 0x1FDA:
2488 bufpush(0x1F76);
2489 break;
2490 case 0x1FDB:
2491 bufpush(0x1F77);
2492 break;
2493 case 0x1FE2:
2494 bufpush(0x03C5);
2495 bufpush(0x0308);
2496 bufpush(0x0300);
2497 break;
2498 case 0x1FE3:
2499 bufpush(0x03C5);
2500 bufpush(0x0308);
2501 bufpush(0x0301);
2502 break;
2503 case 0x1FE4:
2504 bufpush(0x03C1);
2505 bufpush(0x0313);
2506 break;
2507 case 0x1FE6:
2508 bufpush(0x03C5);
2509 bufpush(0x0342);
2510 break;
2511 case 0x1FE7:
2512 bufpush(0x03C5);
2513 bufpush(0x0308);
2514 bufpush(0x0342);
2515 break;
2516 case 0x1FE8:
2517 bufpush(0x1FE0);
2518 break;
2519 case 0x1FE9:
2520 bufpush(0x1FE1);
2521 break;
2522 case 0x1FEA:
2523 bufpush(0x1F7A);
2524 break;
2525 case 0x1FEB:
2526 bufpush(0x1F7B);
2527 break;
2528 case 0x1FEC:
2529 bufpush(0x1FE5);
2530 break;
2531 case 0x1FF2:
2532 bufpush(0x1F7C);
2533 bufpush(0x03B9);
2534 break;
2535 case 0x1FF3:
2536 bufpush(0x03C9);
2537 bufpush(0x03B9);
2538 break;
2539 case 0x1FF4:
2540 bufpush(0x03CE);
2541 bufpush(0x03B9);
2542 break;
2543 case 0x1FF6:
2544 bufpush(0x03C9);
2545 bufpush(0x0342);
2546 break;
2547 case 0x1FF7:
2548 bufpush(0x03C9);
2549 bufpush(0x0342);
2550 bufpush(0x03B9);
2551 break;
2552 case 0x1FF8:
2553 bufpush(0x1F78);
2554 break;
2555 case 0x1FF9:
2556 bufpush(0x1F79);
2557 break;
2558 case 0x1FFA:
2559 bufpush(0x1F7C);
2560 break;
2561 case 0x1FFB:
2562 bufpush(0x1F7D);
2563 break;
2564 case 0x1FFC:
2565 bufpush(0x03C9);
2566 bufpush(0x03B9);
2567 break;
2568 case 0x2126:
2569 bufpush(0x03C9);
2570 break;
2571 case 0x212A:
2572 bufpush(0x006B);
2573 break;
2574 case 0x212B:
2575 bufpush(0x00E5);
2576 break;
2577 case 0x2132:
2578 bufpush(0x214E);
2579 break;
2580 case 0x2160:
2581 bufpush(0x2170);
2582 break;
2583 case 0x2161:
2584 bufpush(0x2171);
2585 break;
2586 case 0x2162:
2587 bufpush(0x2172);
2588 break;
2589 case 0x2163:
2590 bufpush(0x2173);
2591 break;
2592 case 0x2164:
2593 bufpush(0x2174);
2594 break;
2595 case 0x2165:
2596 bufpush(0x2175);
2597 break;
2598 case 0x2166:
2599 bufpush(0x2176);
2600 break;
2601 case 0x2167:
2602 bufpush(0x2177);
2603 break;
2604 case 0x2168:
2605 bufpush(0x2178);
2606 break;
2607 case 0x2169:
2608 bufpush(0x2179);
2609 break;
2610 case 0x216A:
2611 bufpush(0x217A);
2612 break;
2613 case 0x216B:
2614 bufpush(0x217B);
2615 break;
2616 case 0x216C:
2617 bufpush(0x217C);
2618 break;
2619 case 0x216D:
2620 bufpush(0x217D);
2621 break;
2622 case 0x216E:
2623 bufpush(0x217E);
2624 break;
2625 case 0x216F:
2626 bufpush(0x217F);
2627 break;
2628 case 0x2183:
2629 bufpush(0x2184);
2630 break;
2631 case 0x24B6:
2632 bufpush(0x24D0);
2633 break;
2634 case 0x24B7:
2635 bufpush(0x24D1);
2636 break;
2637 case 0x24B8:
2638 bufpush(0x24D2);
2639 break;
2640 case 0x24B9:
2641 bufpush(0x24D3);
2642 break;
2643 case 0x24BA:
2644 bufpush(0x24D4);
2645 break;
2646 case 0x24BB:
2647 bufpush(0x24D5);
2648 break;
2649 case 0x24BC:
2650 bufpush(0x24D6);
2651 break;
2652 case 0x24BD:
2653 bufpush(0x24D7);
2654 break;
2655 case 0x24BE:
2656 bufpush(0x24D8);
2657 break;
2658 case 0x24BF:
2659 bufpush(0x24D9);
2660 break;
2661 case 0x24C0:
2662 bufpush(0x24DA);
2663 break;
2664 case 0x24C1:
2665 bufpush(0x24DB);
2666 break;
2667 case 0x24C2:
2668 bufpush(0x24DC);
2669 break;
2670 case 0x24C3:
2671 bufpush(0x24DD);
2672 break;
2673 case 0x24C4:
2674 bufpush(0x24DE);
2675 break;
2676 case 0x24C5:
2677 bufpush(0x24DF);
2678 break;
2679 case 0x24C6:
2680 bufpush(0x24E0);
2681 break;
2682 case 0x24C7:
2683 bufpush(0x24E1);
2684 break;
2685 case 0x24C8:
2686 bufpush(0x24E2);
2687 break;
2688 case 0x24C9:
2689 bufpush(0x24E3);
2690 break;
2691 case 0x24CA:
2692 bufpush(0x24E4);
2693 break;
2694 case 0x24CB:
2695 bufpush(0x24E5);
2696 break;
2697 case 0x24CC:
2698 bufpush(0x24E6);
2699 break;
2700 case 0x24CD:
2701 bufpush(0x24E7);
2702 break;
2703 case 0x24CE:
2704 bufpush(0x24E8);
2705 break;
2706 case 0x24CF:
2707 bufpush(0x24E9);
2708 break;
2709 case 0x2C00:
2710 bufpush(0x2C30);
2711 break;
2712 case 0x2C01:
2713 bufpush(0x2C31);
2714 break;
2715 case 0x2C02:
2716 bufpush(0x2C32);
2717 break;
2718 case 0x2C03:
2719 bufpush(0x2C33);
2720 break;
2721 case 0x2C04:
2722 bufpush(0x2C34);
2723 break;
2724 case 0x2C05:
2725 bufpush(0x2C35);
2726 break;
2727 case 0x2C06:
2728 bufpush(0x2C36);
2729 break;
2730 case 0x2C07:
2731 bufpush(0x2C37);
2732 break;
2733 case 0x2C08:
2734 bufpush(0x2C38);
2735 break;
2736 case 0x2C09:
2737 bufpush(0x2C39);
2738 break;
2739 case 0x2C0A:
2740 bufpush(0x2C3A);
2741 break;
2742 case 0x2C0B:
2743 bufpush(0x2C3B);
2744 break;
2745 case 0x2C0C:
2746 bufpush(0x2C3C);
2747 break;
2748 case 0x2C0D:
2749 bufpush(0x2C3D);
2750 break;
2751 case 0x2C0E:
2752 bufpush(0x2C3E);
2753 break;
2754 case 0x2C0F:
2755 bufpush(0x2C3F);
2756 break;
2757 case 0x2C10:
2758 bufpush(0x2C40);
2759 break;
2760 case 0x2C11:
2761 bufpush(0x2C41);
2762 break;
2763 case 0x2C12:
2764 bufpush(0x2C42);
2765 break;
2766 case 0x2C13:
2767 bufpush(0x2C43);
2768 break;
2769 case 0x2C14:
2770 bufpush(0x2C44);
2771 break;
2772 case 0x2C15:
2773 bufpush(0x2C45);
2774 break;
2775 case 0x2C16:
2776 bufpush(0x2C46);
2777 break;
2778 case 0x2C17:
2779 bufpush(0x2C47);
2780 break;
2781 case 0x2C18:
2782 bufpush(0x2C48);
2783 break;
2784 case 0x2C19:
2785 bufpush(0x2C49);
2786 break;
2787 case 0x2C1A:
2788 bufpush(0x2C4A);
2789 break;
2790 case 0x2C1B:
2791 bufpush(0x2C4B);
2792 break;
2793 case 0x2C1C:
2794 bufpush(0x2C4C);
2795 break;
2796 case 0x2C1D:
2797 bufpush(0x2C4D);
2798 break;
2799 case 0x2C1E:
2800 bufpush(0x2C4E);
2801 break;
2802 case 0x2C1F:
2803 bufpush(0x2C4F);
2804 break;
2805 case 0x2C20:
2806 bufpush(0x2C50);
2807 break;
2808 case 0x2C21:
2809 bufpush(0x2C51);
2810 break;
2811 case 0x2C22:
2812 bufpush(0x2C52);
2813 break;
2814 case 0x2C23:
2815 bufpush(0x2C53);
2816 break;
2817 case 0x2C24:
2818 bufpush(0x2C54);
2819 break;
2820 case 0x2C25:
2821 bufpush(0x2C55);
2822 break;
2823 case 0x2C26:
2824 bufpush(0x2C56);
2825 break;
2826 case 0x2C27:
2827 bufpush(0x2C57);
2828 break;
2829 case 0x2C28:
2830 bufpush(0x2C58);
2831 break;
2832 case 0x2C29:
2833 bufpush(0x2C59);
2834 break;
2835 case 0x2C2A:
2836 bufpush(0x2C5A);
2837 break;
2838 case 0x2C2B:
2839 bufpush(0x2C5B);
2840 break;
2841 case 0x2C2C:
2842 bufpush(0x2C5C);
2843 break;
2844 case 0x2C2D:
2845 bufpush(0x2C5D);
2846 break;
2847 case 0x2C2E:
2848 bufpush(0x2C5E);
2849 break;
2850 case 0x2C60:
2851 bufpush(0x2C61);
2852 break;
2853 case 0x2C62:
2854 bufpush(0x026B);
2855 break;
2856 case 0x2C63:
2857 bufpush(0x1D7D);
2858 break;
2859 case 0x2C64:
2860 bufpush(0x027D);
2861 break;
2862 case 0x2C67:
2863 bufpush(0x2C68);
2864 break;
2865 case 0x2C69:
2866 bufpush(0x2C6A);
2867 break;
2868 case 0x2C6B:
2869 bufpush(0x2C6C);
2870 break;
2871 case 0x2C6D:
2872 bufpush(0x0251);
2873 break;
2874 case 0x2C6E:
2875 bufpush(0x0271);
2876 break;
2877 case 0x2C6F:
2878 bufpush(0x0250);
2879 break;
2880 case 0x2C70:
2881 bufpush(0x0252);
2882 break;
2883 case 0x2C72:
2884 bufpush(0x2C73);
2885 break;
2886 case 0x2C75:
2887 bufpush(0x2C76);
2888 break;
2889 case 0x2C7E:
2890 bufpush(0x023F);
2891 break;
2892 case 0x2C7F:
2893 bufpush(0x0240);
2894 break;
2895 case 0x2C80:
2896 bufpush(0x2C81);
2897 break;
2898 case 0x2C82:
2899 bufpush(0x2C83);
2900 break;
2901 case 0x2C84:
2902 bufpush(0x2C85);
2903 break;
2904 case 0x2C86:
2905 bufpush(0x2C87);
2906 break;
2907 case 0x2C88:
2908 bufpush(0x2C89);
2909 break;
2910 case 0x2C8A:
2911 bufpush(0x2C8B);
2912 break;
2913 case 0x2C8C:
2914 bufpush(0x2C8D);
2915 break;
2916 case 0x2C8E:
2917 bufpush(0x2C8F);
2918 break;
2919 case 0x2C90:
2920 bufpush(0x2C91);
2921 break;
2922 case 0x2C92:
2923 bufpush(0x2C93);
2924 break;
2925 case 0x2C94:
2926 bufpush(0x2C95);
2927 break;
2928 case 0x2C96:
2929 bufpush(0x2C97);
2930 break;
2931 case 0x2C98:
2932 bufpush(0x2C99);
2933 break;
2934 case 0x2C9A:
2935 bufpush(0x2C9B);
2936 break;
2937 case 0x2C9C:
2938 bufpush(0x2C9D);
2939 break;
2940 case 0x2C9E:
2941 bufpush(0x2C9F);
2942 break;
2943 case 0x2CA0:
2944 bufpush(0x2CA1);
2945 break;
2946 case 0x2CA2:
2947 bufpush(0x2CA3);
2948 break;
2949 case 0x2CA4:
2950 bufpush(0x2CA5);
2951 break;
2952 case 0x2CA6:
2953 bufpush(0x2CA7);
2954 break;
2955 case 0x2CA8:
2956 bufpush(0x2CA9);
2957 break;
2958 case 0x2CAA:
2959 bufpush(0x2CAB);
2960 break;
2961 case 0x2CAC:
2962 bufpush(0x2CAD);
2963 break;
2964 case 0x2CAE:
2965 bufpush(0x2CAF);
2966 break;
2967 case 0x2CB0:
2968 bufpush(0x2CB1);
2969 break;
2970 case 0x2CB2:
2971 bufpush(0x2CB3);
2972 break;
2973 case 0x2CB4:
2974 bufpush(0x2CB5);
2975 break;
2976 case 0x2CB6:
2977 bufpush(0x2CB7);
2978 break;
2979 case 0x2CB8:
2980 bufpush(0x2CB9);
2981 break;
2982 case 0x2CBA:
2983 bufpush(0x2CBB);
2984 break;
2985 case 0x2CBC:
2986 bufpush(0x2CBD);
2987 break;
2988 case 0x2CBE:
2989 bufpush(0x2CBF);
2990 break;
2991 case 0x2CC0:
2992 bufpush(0x2CC1);
2993 break;
2994 case 0x2CC2:
2995 bufpush(0x2CC3);
2996 break;
2997 case 0x2CC4:
2998 bufpush(0x2CC5);
2999 break;
3000 case 0x2CC6:
3001 bufpush(0x2CC7);
3002 break;
3003 case 0x2CC8:
3004 bufpush(0x2CC9);
3005 break;
3006 case 0x2CCA:
3007 bufpush(0x2CCB);
3008 break;
3009 case 0x2CCC:
3010 bufpush(0x2CCD);
3011 break;
3012 case 0x2CCE:
3013 bufpush(0x2CCF);
3014 break;
3015 case 0x2CD0:
3016 bufpush(0x2CD1);
3017 break;
3018 case 0x2CD2:
3019 bufpush(0x2CD3);
3020 break;
3021 case 0x2CD4:
3022 bufpush(0x2CD5);
3023 break;
3024 case 0x2CD6:
3025 bufpush(0x2CD7);
3026 break;
3027 case 0x2CD8:
3028 bufpush(0x2CD9);
3029 break;
3030 case 0x2CDA:
3031 bufpush(0x2CDB);
3032 break;
3033 case 0x2CDC:
3034 bufpush(0x2CDD);
3035 break;
3036 case 0x2CDE:
3037 bufpush(0x2CDF);
3038 break;
3039 case 0x2CE0:
3040 bufpush(0x2CE1);
3041 break;
3042 case 0x2CE2:
3043 bufpush(0x2CE3);
3044 break;
3045 case 0x2CEB:
3046 bufpush(0x2CEC);
3047 break;
3048 case 0x2CED:
3049 bufpush(0x2CEE);
3050 break;
3051 case 0x2CF2:
3052 bufpush(0x2CF3);
3053 break;
3054 case 0xA640:
3055 bufpush(0xA641);
3056 break;
3057 case 0xA642:
3058 bufpush(0xA643);
3059 break;
3060 case 0xA644:
3061 bufpush(0xA645);
3062 break;
3063 case 0xA646:
3064 bufpush(0xA647);
3065 break;
3066 case 0xA648:
3067 bufpush(0xA649);
3068 break;
3069 case 0xA64A:
3070 bufpush(0xA64B);
3071 break;
3072 case 0xA64C:
3073 bufpush(0xA64D);
3074 break;
3075 case 0xA64E:
3076 bufpush(0xA64F);
3077 break;
3078 case 0xA650:
3079 bufpush(0xA651);
3080 break;
3081 case 0xA652:
3082 bufpush(0xA653);
3083 break;
3084 case 0xA654:
3085 bufpush(0xA655);
3086 break;
3087 case 0xA656:
3088 bufpush(0xA657);
3089 break;
3090 case 0xA658:
3091 bufpush(0xA659);
3092 break;
3093 case 0xA65A:
3094 bufpush(0xA65B);
3095 break;
3096 case 0xA65C:
3097 bufpush(0xA65D);
3098 break;
3099 case 0xA65E:
3100 bufpush(0xA65F);
3101 break;
3102 case 0xA660:
3103 bufpush(0xA661);
3104 break;
3105 case 0xA662:
3106 bufpush(0xA663);
3107 break;
3108 case 0xA664:
3109 bufpush(0xA665);
3110 break;
3111 case 0xA666:
3112 bufpush(0xA667);
3113 break;
3114 case 0xA668:
3115 bufpush(0xA669);
3116 break;
3117 case 0xA66A:
3118 bufpush(0xA66B);
3119 break;
3120 case 0xA66C:
3121 bufpush(0xA66D);
3122 break;
3123 case 0xA680:
3124 bufpush(0xA681);
3125 break;
3126 case 0xA682:
3127 bufpush(0xA683);
3128 break;
3129 case 0xA684:
3130 bufpush(0xA685);
3131 break;
3132 case 0xA686:
3133 bufpush(0xA687);
3134 break;
3135 case 0xA688:
3136 bufpush(0xA689);
3137 break;
3138 case 0xA68A:
3139 bufpush(0xA68B);
3140 break;
3141 case 0xA68C:
3142 bufpush(0xA68D);
3143 break;
3144 case 0xA68E:
3145 bufpush(0xA68F);
3146 break;
3147 case 0xA690:
3148 bufpush(0xA691);
3149 break;
3150 case 0xA692:
3151 bufpush(0xA693);
3152 break;
3153 case 0xA694:
3154 bufpush(0xA695);
3155 break;
3156 case 0xA696:
3157 bufpush(0xA697);
3158 break;
3159 case 0xA698:
3160 bufpush(0xA699);
3161 break;
3162 case 0xA69A:
3163 bufpush(0xA69B);
3164 break;
3165 case 0xA722:
3166 bufpush(0xA723);
3167 break;
3168 case 0xA724:
3169 bufpush(0xA725);
3170 break;
3171 case 0xA726:
3172 bufpush(0xA727);
3173 break;
3174 case 0xA728:
3175 bufpush(0xA729);
3176 break;
3177 case 0xA72A:
3178 bufpush(0xA72B);
3179 break;
3180 case 0xA72C:
3181 bufpush(0xA72D);
3182 break;
3183 case 0xA72E:
3184 bufpush(0xA72F);
3185 break;
3186 case 0xA732:
3187 bufpush(0xA733);
3188 break;
3189 case 0xA734:
3190 bufpush(0xA735);
3191 break;
3192 case 0xA736:
3193 bufpush(0xA737);
3194 break;
3195 case 0xA738:
3196 bufpush(0xA739);
3197 break;
3198 case 0xA73A:
3199 bufpush(0xA73B);
3200 break;
3201 case 0xA73C:
3202 bufpush(0xA73D);
3203 break;
3204 case 0xA73E:
3205 bufpush(0xA73F);
3206 break;
3207 case 0xA740:
3208 bufpush(0xA741);
3209 break;
3210 case 0xA742:
3211 bufpush(0xA743);
3212 break;
3213 case 0xA744:
3214 bufpush(0xA745);
3215 break;
3216 case 0xA746:
3217 bufpush(0xA747);
3218 break;
3219 case 0xA748:
3220 bufpush(0xA749);
3221 break;
3222 case 0xA74A:
3223 bufpush(0xA74B);
3224 break;
3225 case 0xA74C:
3226 bufpush(0xA74D);
3227 break;
3228 case 0xA74E:
3229 bufpush(0xA74F);
3230 break;
3231 case 0xA750:
3232 bufpush(0xA751);
3233 break;
3234 case 0xA752:
3235 bufpush(0xA753);
3236 break;
3237 case 0xA754:
3238 bufpush(0xA755);
3239 break;
3240 case 0xA756:
3241 bufpush(0xA757);
3242 break;
3243 case 0xA758:
3244 bufpush(0xA759);
3245 break;
3246 case 0xA75A:
3247 bufpush(0xA75B);
3248 break;
3249 case 0xA75C:
3250 bufpush(0xA75D);
3251 break;
3252 case 0xA75E:
3253 bufpush(0xA75F);
3254 break;
3255 case 0xA760:
3256 bufpush(0xA761);
3257 break;
3258 case 0xA762:
3259 bufpush(0xA763);
3260 break;
3261 case 0xA764:
3262 bufpush(0xA765);
3263 break;
3264 case 0xA766:
3265 bufpush(0xA767);
3266 break;
3267 case 0xA768:
3268 bufpush(0xA769);
3269 break;
3270 case 0xA76A:
3271 bufpush(0xA76B);
3272 break;
3273 case 0xA76C:
3274 bufpush(0xA76D);
3275 break;
3276 case 0xA76E:
3277 bufpush(0xA76F);
3278 break;
3279 case 0xA779:
3280 bufpush(0xA77A);
3281 break;
3282 case 0xA77B:
3283 bufpush(0xA77C);
3284 break;
3285 case 0xA77D:
3286 bufpush(0x1D79);
3287 break;
3288 case 0xA77E:
3289 bufpush(0xA77F);
3290 break;
3291 case 0xA780:
3292 bufpush(0xA781);
3293 break;
3294 case 0xA782:
3295 bufpush(0xA783);
3296 break;
3297 case 0xA784:
3298 bufpush(0xA785);
3299 break;
3300 case 0xA786:
3301 bufpush(0xA787);
3302 break;
3303 case 0xA78B:
3304 bufpush(0xA78C);
3305 break;
3306 case 0xA78D:
3307 bufpush(0x0265);
3308 break;
3309 case 0xA790:
3310 bufpush(0xA791);
3311 break;
3312 case 0xA792:
3313 bufpush(0xA793);
3314 break;
3315 case 0xA796:
3316 bufpush(0xA797);
3317 break;
3318 case 0xA798:
3319 bufpush(0xA799);
3320 break;
3321 case 0xA79A:
3322 bufpush(0xA79B);
3323 break;
3324 case 0xA79C:
3325 bufpush(0xA79D);
3326 break;
3327 case 0xA79E:
3328 bufpush(0xA79F);
3329 break;
3330 case 0xA7A0:
3331 bufpush(0xA7A1);
3332 break;
3333 case 0xA7A2:
3334 bufpush(0xA7A3);
3335 break;
3336 case 0xA7A4:
3337 bufpush(0xA7A5);
3338 break;
3339 case 0xA7A6:
3340 bufpush(0xA7A7);
3341 break;
3342 case 0xA7A8:
3343 bufpush(0xA7A9);
3344 break;
3345 case 0xA7AA:
3346 bufpush(0x0266);
3347 break;
3348 case 0xA7AB:
3349 bufpush(0x025C);
3350 break;
3351 case 0xA7AC:
3352 bufpush(0x0261);
3353 break;
3354 case 0xA7AD:
3355 bufpush(0x026C);
3356 break;
3357 case 0xA7AE:
3358 bufpush(0x026A);
3359 break;
3360 case 0xA7B0:
3361 bufpush(0x029E);
3362 break;
3363 case 0xA7B1:
3364 bufpush(0x0287);
3365 break;
3366 case 0xA7B2:
3367 bufpush(0x029D);
3368 break;
3369 case 0xA7B3:
3370 bufpush(0xAB53);
3371 break;
3372 case 0xA7B4:
3373 bufpush(0xA7B5);
3374 break;
3375 case 0xA7B6:
3376 bufpush(0xA7B7);
3377 break;
3378 case 0xAB70:
3379 bufpush(0x13A0);
3380 break;
3381 case 0xAB71:
3382 bufpush(0x13A1);
3383 break;
3384 case 0xAB72:
3385 bufpush(0x13A2);
3386 break;
3387 case 0xAB73:
3388 bufpush(0x13A3);
3389 break;
3390 case 0xAB74:
3391 bufpush(0x13A4);
3392 break;
3393 case 0xAB75:
3394 bufpush(0x13A5);
3395 break;
3396 case 0xAB76:
3397 bufpush(0x13A6);
3398 break;
3399 case 0xAB77:
3400 bufpush(0x13A7);
3401 break;
3402 case 0xAB78:
3403 bufpush(0x13A8);
3404 break;
3405 case 0xAB79:
3406 bufpush(0x13A9);
3407 break;
3408 case 0xAB7A:
3409 bufpush(0x13AA);
3410 break;
3411 case 0xAB7B:
3412 bufpush(0x13AB);
3413 break;
3414 case 0xAB7C:
3415 bufpush(0x13AC);
3416 break;
3417 case 0xAB7D:
3418 bufpush(0x13AD);
3419 break;
3420 case 0xAB7E:
3421 bufpush(0x13AE);
3422 break;
3423 case 0xAB7F:
3424 bufpush(0x13AF);
3425 break;
3426 case 0xAB80:
3427 bufpush(0x13B0);
3428 break;
3429 case 0xAB81:
3430 bufpush(0x13B1);
3431 break;
3432 case 0xAB82:
3433 bufpush(0x13B2);
3434 break;
3435 case 0xAB83:
3436 bufpush(0x13B3);
3437 break;
3438 case 0xAB84:
3439 bufpush(0x13B4);
3440 break;
3441 case 0xAB85:
3442 bufpush(0x13B5);
3443 break;
3444 case 0xAB86:
3445 bufpush(0x13B6);
3446 break;
3447 case 0xAB87:
3448 bufpush(0x13B7);
3449 break;
3450 case 0xAB88:
3451 bufpush(0x13B8);
3452 break;
3453 case 0xAB89:
3454 bufpush(0x13B9);
3455 break;
3456 case 0xAB8A:
3457 bufpush(0x13BA);
3458 break;
3459 case 0xAB8B:
3460 bufpush(0x13BB);
3461 break;
3462 case 0xAB8C:
3463 bufpush(0x13BC);
3464 break;
3465 case 0xAB8D:
3466 bufpush(0x13BD);
3467 break;
3468 case 0xAB8E:
3469 bufpush(0x13BE);
3470 break;
3471 case 0xAB8F:
3472 bufpush(0x13BF);
3473 break;
3474 case 0xAB90:
3475 bufpush(0x13C0);
3476 break;
3477 case 0xAB91:
3478 bufpush(0x13C1);
3479 break;
3480 case 0xAB92:
3481 bufpush(0x13C2);
3482 break;
3483 case 0xAB93:
3484 bufpush(0x13C3);
3485 break;
3486 case 0xAB94:
3487 bufpush(0x13C4);
3488 break;
3489 case 0xAB95:
3490 bufpush(0x13C5);
3491 break;
3492 case 0xAB96:
3493 bufpush(0x13C6);
3494 break;
3495 case 0xAB97:
3496 bufpush(0x13C7);
3497 break;
3498 case 0xAB98:
3499 bufpush(0x13C8);
3500 break;
3501 case 0xAB99:
3502 bufpush(0x13C9);
3503 break;
3504 case 0xAB9A:
3505 bufpush(0x13CA);
3506 break;
3507 case 0xAB9B:
3508 bufpush(0x13CB);
3509 break;
3510 case 0xAB9C:
3511 bufpush(0x13CC);
3512 break;
3513 case 0xAB9D:
3514 bufpush(0x13CD);
3515 break;
3516 case 0xAB9E:
3517 bufpush(0x13CE);
3518 break;
3519 case 0xAB9F:
3520 bufpush(0x13CF);
3521 break;
3522 case 0xABA0:
3523 bufpush(0x13D0);
3524 break;
3525 case 0xABA1:
3526 bufpush(0x13D1);
3527 break;
3528 case 0xABA2:
3529 bufpush(0x13D2);
3530 break;
3531 case 0xABA3:
3532 bufpush(0x13D3);
3533 break;
3534 case 0xABA4:
3535 bufpush(0x13D4);
3536 break;
3537 case 0xABA5:
3538 bufpush(0x13D5);
3539 break;
3540 case 0xABA6:
3541 bufpush(0x13D6);
3542 break;
3543 case 0xABA7:
3544 bufpush(0x13D7);
3545 break;
3546 case 0xABA8:
3547 bufpush(0x13D8);
3548 break;
3549 case 0xABA9:
3550 bufpush(0x13D9);
3551 break;
3552 case 0xABAA:
3553 bufpush(0x13DA);
3554 break;
3555 case 0xABAB:
3556 bufpush(0x13DB);
3557 break;
3558 case 0xABAC:
3559 bufpush(0x13DC);
3560 break;
3561 case 0xABAD:
3562 bufpush(0x13DD);
3563 break;
3564 case 0xABAE:
3565 bufpush(0x13DE);
3566 break;
3567 case 0xABAF:
3568 bufpush(0x13DF);
3569 break;
3570 case 0xABB0:
3571 bufpush(0x13E0);
3572 break;
3573 case 0xABB1:
3574 bufpush(0x13E1);
3575 break;
3576 case 0xABB2:
3577 bufpush(0x13E2);
3578 break;
3579 case 0xABB3:
3580 bufpush(0x13E3);
3581 break;
3582 case 0xABB4:
3583 bufpush(0x13E4);
3584 break;
3585 case 0xABB5:
3586 bufpush(0x13E5);
3587 break;
3588 case 0xABB6:
3589 bufpush(0x13E6);
3590 break;
3591 case 0xABB7:
3592 bufpush(0x13E7);
3593 break;
3594 case 0xABB8:
3595 bufpush(0x13E8);
3596 break;
3597 case 0xABB9:
3598 bufpush(0x13E9);
3599 break;
3600 case 0xABBA:
3601 bufpush(0x13EA);
3602 break;
3603 case 0xABBB:
3604 bufpush(0x13EB);
3605 break;
3606 case 0xABBC:
3607 bufpush(0x13EC);
3608 break;
3609 case 0xABBD:
3610 bufpush(0x13ED);
3611 break;
3612 case 0xABBE:
3613 bufpush(0x13EE);
3614 break;
3615 case 0xABBF:
3616 bufpush(0x13EF);
3617 break;
3618 case 0xFB00:
3619 bufpush(0x0066);
3620 bufpush(0x0066);
3621 break;
3622 case 0xFB01:
3623 bufpush(0x0066);
3624 bufpush(0x0069);
3625 break;
3626 case 0xFB02:
3627 bufpush(0x0066);
3628 bufpush(0x006C);
3629 break;
3630 case 0xFB03:
3631 bufpush(0x0066);
3632 bufpush(0x0066);
3633 bufpush(0x0069);
3634 break;
3635 case 0xFB04:
3636 bufpush(0x0066);
3637 bufpush(0x0066);
3638 bufpush(0x006C);
3639 break;
3640 case 0xFB05:
3641 bufpush(0x0073);
3642 bufpush(0x0074);
3643 break;
3644 case 0xFB06:
3645 bufpush(0x0073);
3646 bufpush(0x0074);
3647 break;
3648 case 0xFB13:
3649 bufpush(0x0574);
3650 bufpush(0x0576);
3651 break;
3652 case 0xFB14:
3653 bufpush(0x0574);
3654 bufpush(0x0565);
3655 break;
3656 case 0xFB15:
3657 bufpush(0x0574);
3658 bufpush(0x056B);
3659 break;
3660 case 0xFB16:
3661 bufpush(0x057E);
3662 bufpush(0x0576);
3663 break;
3664 case 0xFB17:
3665 bufpush(0x0574);
3666 bufpush(0x056D);
3667 break;
3668 case 0xFF21:
3669 bufpush(0xFF41);
3670 break;
3671 case 0xFF22:
3672 bufpush(0xFF42);
3673 break;
3674 case 0xFF23:
3675 bufpush(0xFF43);
3676 break;
3677 case 0xFF24:
3678 bufpush(0xFF44);
3679 break;
3680 case 0xFF25:
3681 bufpush(0xFF45);
3682 break;
3683 case 0xFF26:
3684 bufpush(0xFF46);
3685 break;
3686 case 0xFF27:
3687 bufpush(0xFF47);
3688 break;
3689 case 0xFF28:
3690 bufpush(0xFF48);
3691 break;
3692 case 0xFF29:
3693 bufpush(0xFF49);
3694 break;
3695 case 0xFF2A:
3696 bufpush(0xFF4A);
3697 break;
3698 case 0xFF2B:
3699 bufpush(0xFF4B);
3700 break;
3701 case 0xFF2C:
3702 bufpush(0xFF4C);
3703 break;
3704 case 0xFF2D:
3705 bufpush(0xFF4D);
3706 break;
3707 case 0xFF2E:
3708 bufpush(0xFF4E);
3709 break;
3710 case 0xFF2F:
3711 bufpush(0xFF4F);
3712 break;
3713 case 0xFF30:
3714 bufpush(0xFF50);
3715 break;
3716 case 0xFF31:
3717 bufpush(0xFF51);
3718 break;
3719 case 0xFF32:
3720 bufpush(0xFF52);
3721 break;
3722 case 0xFF33:
3723 bufpush(0xFF53);
3724 break;
3725 case 0xFF34:
3726 bufpush(0xFF54);
3727 break;
3728 case 0xFF35:
3729 bufpush(0xFF55);
3730 break;
3731 case 0xFF36:
3732 bufpush(0xFF56);
3733 break;
3734 case 0xFF37:
3735 bufpush(0xFF57);
3736 break;
3737 case 0xFF38:
3738 bufpush(0xFF58);
3739 break;
3740 case 0xFF39:
3741 bufpush(0xFF59);
3742 break;
3743 case 0xFF3A:
3744 bufpush(0xFF5A);
3745 break;
3746 case 0x10400:
3747 bufpush(0x10428);
3748 break;
3749 case 0x10401:
3750 bufpush(0x10429);
3751 break;
3752 case 0x10402:
3753 bufpush(0x1042A);
3754 break;
3755 case 0x10403:
3756 bufpush(0x1042B);
3757 break;
3758 case 0x10404:
3759 bufpush(0x1042C);
3760 break;
3761 case 0x10405:
3762 bufpush(0x1042D);
3763 break;
3764 case 0x10406:
3765 bufpush(0x1042E);
3766 break;
3767 case 0x10407:
3768 bufpush(0x1042F);
3769 break;
3770 case 0x10408:
3771 bufpush(0x10430);
3772 break;
3773 case 0x10409:
3774 bufpush(0x10431);
3775 break;
3776 case 0x1040A:
3777 bufpush(0x10432);
3778 break;
3779 case 0x1040B:
3780 bufpush(0x10433);
3781 break;
3782 case 0x1040C:
3783 bufpush(0x10434);
3784 break;
3785 case 0x1040D:
3786 bufpush(0x10435);
3787 break;
3788 case 0x1040E:
3789 bufpush(0x10436);
3790 break;
3791 case 0x1040F:
3792 bufpush(0x10437);
3793 break;
3794 case 0x10410:
3795 bufpush(0x10438);
3796 break;
3797 case 0x10411:
3798 bufpush(0x10439);
3799 break;
3800 case 0x10412:
3801 bufpush(0x1043A);
3802 break;
3803 case 0x10413:
3804 bufpush(0x1043B);
3805 break;
3806 case 0x10414:
3807 bufpush(0x1043C);
3808 break;
3809 case 0x10415:
3810 bufpush(0x1043D);
3811 break;
3812 case 0x10416:
3813 bufpush(0x1043E);
3814 break;
3815 case 0x10417:
3816 bufpush(0x1043F);
3817 break;
3818 case 0x10418:
3819 bufpush(0x10440);
3820 break;
3821 case 0x10419:
3822 bufpush(0x10441);
3823 break;
3824 case 0x1041A:
3825 bufpush(0x10442);
3826 break;
3827 case 0x1041B:
3828 bufpush(0x10443);
3829 break;
3830 case 0x1041C:
3831 bufpush(0x10444);
3832 break;
3833 case 0x1041D:
3834 bufpush(0x10445);
3835 break;
3836 case 0x1041E:
3837 bufpush(0x10446);
3838 break;
3839 case 0x1041F:
3840 bufpush(0x10447);
3841 break;
3842 case 0x10420:
3843 bufpush(0x10448);
3844 break;
3845 case 0x10421:
3846 bufpush(0x10449);
3847 break;
3848 case 0x10422:
3849 bufpush(0x1044A);
3850 break;
3851 case 0x10423:
3852 bufpush(0x1044B);
3853 break;
3854 case 0x10424:
3855 bufpush(0x1044C);
3856 break;
3857 case 0x10425:
3858 bufpush(0x1044D);
3859 break;
3860 case 0x10426:
3861 bufpush(0x1044E);
3862 break;
3863 case 0x10427:
3864 bufpush(0x1044F);
3865 break;
3866 case 0x104B0:
3867 bufpush(0x104D8);
3868 break;
3869 case 0x104B1:
3870 bufpush(0x104D9);
3871 break;
3872 case 0x104B2:
3873 bufpush(0x104DA);
3874 break;
3875 case 0x104B3:
3876 bufpush(0x104DB);
3877 break;
3878 case 0x104B4:
3879 bufpush(0x104DC);
3880 break;
3881 case 0x104B5:
3882 bufpush(0x104DD);
3883 break;
3884 case 0x104B6:
3885 bufpush(0x104DE);
3886 break;
3887 case 0x104B7:
3888 bufpush(0x104DF);
3889 break;
3890 case 0x104B8:
3891 bufpush(0x104E0);
3892 break;
3893 case 0x104B9:
3894 bufpush(0x104E1);
3895 break;
3896 case 0x104BA:
3897 bufpush(0x104E2);
3898 break;
3899 case 0x104BB:
3900 bufpush(0x104E3);
3901 break;
3902 case 0x104BC:
3903 bufpush(0x104E4);
3904 break;
3905 case 0x104BD:
3906 bufpush(0x104E5);
3907 break;
3908 case 0x104BE:
3909 bufpush(0x104E6);
3910 break;
3911 case 0x104BF:
3912 bufpush(0x104E7);
3913 break;
3914 case 0x104C0:
3915 bufpush(0x104E8);
3916 break;
3917 case 0x104C1:
3918 bufpush(0x104E9);
3919 break;
3920 case 0x104C2:
3921 bufpush(0x104EA);
3922 break;
3923 case 0x104C3:
3924 bufpush(0x104EB);
3925 break;
3926 case 0x104C4:
3927 bufpush(0x104EC);
3928 break;
3929 case 0x104C5:
3930 bufpush(0x104ED);
3931 break;
3932 case 0x104C6:
3933 bufpush(0x104EE);
3934 break;
3935 case 0x104C7:
3936 bufpush(0x104EF);
3937 break;
3938 case 0x104C8:
3939 bufpush(0x104F0);
3940 break;
3941 case 0x104C9:
3942 bufpush(0x104F1);
3943 break;
3944 case 0x104CA:
3945 bufpush(0x104F2);
3946 break;
3947 case 0x104CB:
3948 bufpush(0x104F3);
3949 break;
3950 case 0x104CC:
3951 bufpush(0x104F4);
3952 break;
3953 case 0x104CD:
3954 bufpush(0x104F5);
3955 break;
3956 case 0x104CE:
3957 bufpush(0x104F6);
3958 break;
3959 case 0x104CF:
3960 bufpush(0x104F7);
3961 break;
3962 case 0x104D0:
3963 bufpush(0x104F8);
3964 break;
3965 case 0x104D1:
3966 bufpush(0x104F9);
3967 break;
3968 case 0x104D2:
3969 bufpush(0x104FA);
3970 break;
3971 case 0x104D3:
3972 bufpush(0x104FB);
3973 break;
3974 case 0x10C80:
3975 bufpush(0x10CC0);
3976 break;
3977 case 0x10C81:
3978 bufpush(0x10CC1);
3979 break;
3980 case 0x10C82:
3981 bufpush(0x10CC2);
3982 break;
3983 case 0x10C83:
3984 bufpush(0x10CC3);
3985 break;
3986 case 0x10C84:
3987 bufpush(0x10CC4);
3988 break;
3989 case 0x10C85:
3990 bufpush(0x10CC5);
3991 break;
3992 case 0x10C86:
3993 bufpush(0x10CC6);
3994 break;
3995 case 0x10C87:
3996 bufpush(0x10CC7);
3997 break;
3998 case 0x10C88:
3999 bufpush(0x10CC8);
4000 break;
4001 case 0x10C89:
4002 bufpush(0x10CC9);
4003 break;
4004 case 0x10C8A:
4005 bufpush(0x10CCA);
4006 break;
4007 case 0x10C8B:
4008 bufpush(0x10CCB);
4009 break;
4010 case 0x10C8C:
4011 bufpush(0x10CCC);
4012 break;
4013 case 0x10C8D:
4014 bufpush(0x10CCD);
4015 break;
4016 case 0x10C8E:
4017 bufpush(0x10CCE);
4018 break;
4019 case 0x10C8F:
4020 bufpush(0x10CCF);
4021 break;
4022 case 0x10C90:
4023 bufpush(0x10CD0);
4024 break;
4025 case 0x10C91:
4026 bufpush(0x10CD1);
4027 break;
4028 case 0x10C92:
4029 bufpush(0x10CD2);
4030 break;
4031 case 0x10C93:
4032 bufpush(0x10CD3);
4033 break;
4034 case 0x10C94:
4035 bufpush(0x10CD4);
4036 break;
4037 case 0x10C95:
4038 bufpush(0x10CD5);
4039 break;
4040 case 0x10C96:
4041 bufpush(0x10CD6);
4042 break;
4043 case 0x10C97:
4044 bufpush(0x10CD7);
4045 break;
4046 case 0x10C98:
4047 bufpush(0x10CD8);
4048 break;
4049 case 0x10C99:
4050 bufpush(0x10CD9);
4051 break;
4052 case 0x10C9A:
4053 bufpush(0x10CDA);
4054 break;
4055 case 0x10C9B:
4056 bufpush(0x10CDB);
4057 break;
4058 case 0x10C9C:
4059 bufpush(0x10CDC);
4060 break;
4061 case 0x10C9D:
4062 bufpush(0x10CDD);
4063 break;
4064 case 0x10C9E:
4065 bufpush(0x10CDE);
4066 break;
4067 case 0x10C9F:
4068 bufpush(0x10CDF);
4069 break;
4070 case 0x10CA0:
4071 bufpush(0x10CE0);
4072 break;
4073 case 0x10CA1:
4074 bufpush(0x10CE1);
4075 break;
4076 case 0x10CA2:
4077 bufpush(0x10CE2);
4078 break;
4079 case 0x10CA3:
4080 bufpush(0x10CE3);
4081 break;
4082 case 0x10CA4:
4083 bufpush(0x10CE4);
4084 break;
4085 case 0x10CA5:
4086 bufpush(0x10CE5);
4087 break;
4088 case 0x10CA6:
4089 bufpush(0x10CE6);
4090 break;
4091 case 0x10CA7:
4092 bufpush(0x10CE7);
4093 break;
4094 case 0x10CA8:
4095 bufpush(0x10CE8);
4096 break;
4097 case 0x10CA9:
4098 bufpush(0x10CE9);
4099 break;
4100 case 0x10CAA:
4101 bufpush(0x10CEA);
4102 break;
4103 case 0x10CAB:
4104 bufpush(0x10CEB);
4105 break;
4106 case 0x10CAC:
4107 bufpush(0x10CEC);
4108 break;
4109 case 0x10CAD:
4110 bufpush(0x10CED);
4111 break;
4112 case 0x10CAE:
4113 bufpush(0x10CEE);
4114 break;
4115 case 0x10CAF:
4116 bufpush(0x10CEF);
4117 break;
4118 case 0x10CB0:
4119 bufpush(0x10CF0);
4120 break;
4121 case 0x10CB1:
4122 bufpush(0x10CF1);
4123 break;
4124 case 0x10CB2:
4125 bufpush(0x10CF2);
4126 break;
4127 case 0x118A0:
4128 bufpush(0x118C0);
4129 break;
4130 case 0x118A1:
4131 bufpush(0x118C1);
4132 break;
4133 case 0x118A2:
4134 bufpush(0x118C2);
4135 break;
4136 case 0x118A3:
4137 bufpush(0x118C3);
4138 break;
4139 case 0x118A4:
4140 bufpush(0x118C4);
4141 break;
4142 case 0x118A5:
4143 bufpush(0x118C5);
4144 break;
4145 case 0x118A6:
4146 bufpush(0x118C6);
4147 break;
4148 case 0x118A7:
4149 bufpush(0x118C7);
4150 break;
4151 case 0x118A8:
4152 bufpush(0x118C8);
4153 break;
4154 case 0x118A9:
4155 bufpush(0x118C9);
4156 break;
4157 case 0x118AA:
4158 bufpush(0x118CA);
4159 break;
4160 case 0x118AB:
4161 bufpush(0x118CB);
4162 break;
4163 case 0x118AC:
4164 bufpush(0x118CC);
4165 break;
4166 case 0x118AD:
4167 bufpush(0x118CD);
4168 break;
4169 case 0x118AE:
4170 bufpush(0x118CE);
4171 break;
4172 case 0x118AF:
4173 bufpush(0x118CF);
4174 break;
4175 case 0x118B0:
4176 bufpush(0x118D0);
4177 break;
4178 case 0x118B1:
4179 bufpush(0x118D1);
4180 break;
4181 case 0x118B2:
4182 bufpush(0x118D2);
4183 break;
4184 case 0x118B3:
4185 bufpush(0x118D3);
4186 break;
4187 case 0x118B4:
4188 bufpush(0x118D4);
4189 break;
4190 case 0x118B5:
4191 bufpush(0x118D5);
4192 break;
4193 case 0x118B6:
4194 bufpush(0x118D6);
4195 break;
4196 case 0x118B7:
4197 bufpush(0x118D7);
4198 break;
4199 case 0x118B8:
4200 bufpush(0x118D8);
4201 break;
4202 case 0x118B9:
4203 bufpush(0x118D9);
4204 break;
4205 case 0x118BA:
4206 bufpush(0x118DA);
4207 break;
4208 case 0x118BB:
4209 bufpush(0x118DB);
4210 break;
4211 case 0x118BC:
4212 bufpush(0x118DC);
4213 break;
4214 case 0x118BD:
4215 bufpush(0x118DD);
4216 break;
4217 case 0x118BE:
4218 bufpush(0x118DE);
4219 break;
4220 case 0x118BF:
4221 bufpush(0x118DF);
4222 break;
4223 case 0x1E900:
4224 bufpush(0x1E922);
4225 break;
4226 case 0x1E901:
4227 bufpush(0x1E923);
4228 break;
4229 case 0x1E902:
4230 bufpush(0x1E924);
4231 break;
4232 case 0x1E903:
4233 bufpush(0x1E925);
4234 break;
4235 case 0x1E904:
4236 bufpush(0x1E926);
4237 break;
4238 case 0x1E905:
4239 bufpush(0x1E927);
4240 break;
4241 case 0x1E906:
4242 bufpush(0x1E928);
4243 break;
4244 case 0x1E907:
4245 bufpush(0x1E929);
4246 break;
4247 case 0x1E908:
4248 bufpush(0x1E92A);
4249 break;
4250 case 0x1E909:
4251 bufpush(0x1E92B);
4252 break;
4253 case 0x1E90A:
4254 bufpush(0x1E92C);
4255 break;
4256 case 0x1E90B:
4257 bufpush(0x1E92D);
4258 break;
4259 case 0x1E90C:
4260 bufpush(0x1E92E);
4261 break;
4262 case 0x1E90D:
4263 bufpush(0x1E92F);
4264 break;
4265 case 0x1E90E:
4266 bufpush(0x1E930);
4267 break;
4268 case 0x1E90F:
4269 bufpush(0x1E931);
4270 break;
4271 case 0x1E910:
4272 bufpush(0x1E932);
4273 break;
4274 case 0x1E911:
4275 bufpush(0x1E933);
4276 break;
4277 case 0x1E912:
4278 bufpush(0x1E934);
4279 break;
4280 case 0x1E913:
4281 bufpush(0x1E935);
4282 break;
4283 case 0x1E914:
4284 bufpush(0x1E936);
4285 break;
4286 case 0x1E915:
4287 bufpush(0x1E937);
4288 break;
4289 case 0x1E916:
4290 bufpush(0x1E938);
4291 break;
4292 case 0x1E917:
4293 bufpush(0x1E939);
4294 break;
4295 case 0x1E918:
4296 bufpush(0x1E93A);
4297 break;
4298 case 0x1E919:
4299 bufpush(0x1E93B);
4300 break;
4301 case 0x1E91A:
4302 bufpush(0x1E93C);
4303 break;
4304 case 0x1E91B:
4305 bufpush(0x1E93D);
4306 break;
4307 case 0x1E91C:
4308 bufpush(0x1E93E);
4309 break;
4310 case 0x1E91D:
4311 bufpush(0x1E93F);
4312 break;
4313 case 0x1E91E:
4314 bufpush(0x1E940);
4315 break;
4316 case 0x1E91F:
4317 bufpush(0x1E941);
4318 break;
4319 case 0x1E920:
4320 bufpush(0x1E942);
4321 break;
4322 case 0x1E921:
4323 bufpush(0x1E943);
4324 break;
4325 default:
4326 bufpush(c);
4327 }
--- a/src/cmark_amalgamation.c
+++ b/src/cmark_amalgamation.c
@@ -0,0 +1,18982 @@
1
+#include <stdlib.h>
2
+#include <assert.h>
3
+#include <stdio.h>
4
+#include "cmark_amalgamation.h"
5
+
6
+int cmark_version() { return CMARK_VERSION; }
7
+
8
+/* Generated by re2c 0.16 */
9
+bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c,
10
+ bufsize_t offset) {
11
+ bufsize_t res;
12
+ unsigned char *ptr = (unsigned char *)c->data;
13
+
14
+ if (ptr == NULL || offset > c->len) {
15
+ return 0;
16
+ } else {
17
+ unsigned char lim = ptr[c->len];
18
+
19
+ ptr[c->len] = '\0';
20
+ res = scanner(ptr + offset);
21
+ ptr[c->len] = lim;
22
+ }
23
+
24
+ return res;
25
+}
26
+
27
+// Try to match a scheme including colon.
28
+bufsize_t _scan_scheme(const unsigned char *p) {
29
+ const unsigned char *marker = NULL;
30
+ const unsigned char *start = p;
31
+
32
+ {
33
+ unsigned char yych;
34
+ yych = *p;
35
+ if (yych <= '@')
36
+ goto yy2;
37
+ if (yych <= 'Z')
38
+ goto yy4;
39
+ if (yych <= '`')
40
+ goto yy2;
41
+ if (yych <= 'z')
42
+ goto yy4;
43
+ yy2:
44
+ ++p;
45
+ yy3 : { return 0; }
46
+ yy4:
47
+ yych = *(marker = ++p);
48
+ if (yych <= '/') {
49
+ if (yych <= '+') {
50
+ if (yych <= '*')
51
+ goto yy3;
52
+ } else {
53
+ if (yych <= ',')
54
+ goto yy3;
55
+ if (yych >= '/')
56
+ goto yy3;
57
+ }
58
+ } else {
59
+ if (yych <= 'Z') {
60
+ if (yych <= '9')
61
+ goto yy5;
62
+ if (yych <= '@')
63
+ goto yy3;
64
+ } else {
65
+ if (yych <= '`')
66
+ goto yy3;
67
+ if (yych >= '{')
68
+ goto yy3;
69
+ }
70
+ }
71
+ yy5:
72
+ yych = *++p;
73
+ if (yych <= '9') {
74
+ if (yych <= ',') {
75
+ if (yych == '+')
76
+ goto yy7;
77
+ } else {
78
+ if (yych != '/')
79
+ goto yy7;
80
+ }
81
+ } else {
82
+ if (yych <= 'Z') {
83
+ if (yych <= ':')
84
+ goto yy8;
85
+ if (yych >= 'A')
86
+ goto yy7;
87
+ } else {
88
+ if (yych <= '`')
89
+ goto yy6;
90
+ if (yych <= 'z')
91
+ goto yy7;
92
+ }
93
+ }
94
+ yy6:
95
+ p = marker;
96
+ goto yy3;
97
+ yy7:
98
+ yych = *++p;
99
+ if (yych <= '9') {
100
+ if (yych <= ',') {
101
+ if (yych == '+')
102
+ goto yy10;
103
+ goto yy6;
104
+ } else {
105
+ if (yych == '/')
106
+ goto yy6;
107
+ goto yy10;
108
+ }
109
+ } else {
110
+ if (yych <= 'Z') {
111
+ if (yych <= ':')
112
+ goto yy8;
113
+ if (yych <= '@')
114
+ goto yy6;
115
+ goto yy10;
116
+ } else {
117
+ if (yych <= '`')
118
+ goto yy6;
119
+ if (yych <= 'z')
120
+ goto yy10;
121
+ goto yy6;
122
+ }
123
+ }
124
+ yy8:
125
+ ++p;
126
+ { return (bufsize_t)(p - start); }
127
+ yy10:
128
+ yych = *++p;
129
+ if (yych <= '9') {
130
+ if (yych <= ',') {
131
+ if (yych != '+')
132
+ goto yy6;
133
+ } else {
134
+ if (yych == '/')
135
+ goto yy6;
136
+ }
137
+ } else {
138
+ if (yych <= 'Z') {
139
+ if (yych <= ':')
140
+ goto yy8;
141
+ if (yych <= '@')
142
+ goto yy6;
143
+ } else {
144
+ if (yych <= '`')
145
+ goto yy6;
146
+ if (yych >= '{')
147
+ goto yy6;
148
+ }
149
+ }
150
+ yych = *++p;
151
+ if (yych <= '9') {
152
+ if (yych <= ',') {
153
+ if (yych != '+')
154
+ goto yy6;
155
+ } else {
156
+ if (yych == '/')
157
+ goto yy6;
158
+ }
159
+ } else {
160
+ if (yych <= 'Z') {
161
+ if (yych <= ':')
162
+ goto yy8;
163
+ if (yych <= '@')
164
+ goto yy6;
165
+ } else {
166
+ if (yych <= '`')
167
+ goto yy6;
168
+ if (yych >= '{')
169
+ goto yy6;
170
+ }
171
+ }
172
+ yych = *++p;
173
+ if (yych <= '9') {
174
+ if (yych <= ',') {
175
+ if (yych != '+')
176
+ goto yy6;
177
+ } else {
178
+ if (yych == '/')
179
+ goto yy6;
180
+ }
181
+ } else {
182
+ if (yych <= 'Z') {
183
+ if (yych <= ':')
184
+ goto yy8;
185
+ if (yych <= '@')
186
+ goto yy6;
187
+ } else {
188
+ if (yych <= '`')
189
+ goto yy6;
190
+ if (yych >= '{')
191
+ goto yy6;
192
+ }
193
+ }
194
+ yych = *++p;
195
+ if (yych <= '9') {
196
+ if (yych <= ',') {
197
+ if (yych != '+')
198
+ goto yy6;
199
+ } else {
200
+ if (yych == '/')
201
+ goto yy6;
202
+ }
203
+ } else {
204
+ if (yych <= 'Z') {
205
+ if (yych <= ':')
206
+ goto yy8;
207
+ if (yych <= '@')
208
+ goto yy6;
209
+ } else {
210
+ if (yych <= '`')
211
+ goto yy6;
212
+ if (yych >= '{')
213
+ goto yy6;
214
+ }
215
+ }
216
+ yych = *++p;
217
+ if (yych <= '9') {
218
+ if (yych <= ',') {
219
+ if (yych != '+')
220
+ goto yy6;
221
+ } else {
222
+ if (yych == '/')
223
+ goto yy6;
224
+ }
225
+ } else {
226
+ if (yych <= 'Z') {
227
+ if (yych <= ':')
228
+ goto yy8;
229
+ if (yych <= '@')
230
+ goto yy6;
231
+ } else {
232
+ if (yych <= '`')
233
+ goto yy6;
234
+ if (yych >= '{')
235
+ goto yy6;
236
+ }
237
+ }
238
+ yych = *++p;
239
+ if (yych <= '9') {
240
+ if (yych <= ',') {
241
+ if (yych != '+')
242
+ goto yy6;
243
+ } else {
244
+ if (yych == '/')
245
+ goto yy6;
246
+ }
247
+ } else {
248
+ if (yych <= 'Z') {
249
+ if (yych <= ':')
250
+ goto yy8;
251
+ if (yych <= '@')
252
+ goto yy6;
253
+ } else {
254
+ if (yych <= '`')
255
+ goto yy6;
256
+ if (yych >= '{')
257
+ goto yy6;
258
+ }
259
+ }
260
+ yych = *++p;
261
+ if (yych <= '9') {
262
+ if (yych <= ',') {
263
+ if (yych != '+')
264
+ goto yy6;
265
+ } else {
266
+ if (yych == '/')
267
+ goto yy6;
268
+ }
269
+ } else {
270
+ if (yych <= 'Z') {
271
+ if (yych <= ':')
272
+ goto yy8;
273
+ if (yych <= '@')
274
+ goto yy6;
275
+ } else {
276
+ if (yych <= '`')
277
+ goto yy6;
278
+ if (yych >= '{')
279
+ goto yy6;
280
+ }
281
+ }
282
+ yych = *++p;
283
+ if (yych <= '9') {
284
+ if (yych <= ',') {
285
+ if (yych != '+')
286
+ goto yy6;
287
+ } else {
288
+ if (yych == '/')
289
+ goto yy6;
290
+ }
291
+ } else {
292
+ if (yych <= 'Z') {
293
+ if (yych <= ':')
294
+ goto yy8;
295
+ if (yych <= '@')
296
+ goto yy6;
297
+ } else {
298
+ if (yych <= '`')
299
+ goto yy6;
300
+ if (yych >= '{')
301
+ goto yy6;
302
+ }
303
+ }
304
+ yych = *++p;
305
+ if (yych <= '9') {
306
+ if (yych <= ',') {
307
+ if (yych != '+')
308
+ goto yy6;
309
+ } else {
310
+ if (yych == '/')
311
+ goto yy6;
312
+ }
313
+ } else {
314
+ if (yych <= 'Z') {
315
+ if (yych <= ':')
316
+ goto yy8;
317
+ if (yych <= '@')
318
+ goto yy6;
319
+ } else {
320
+ if (yych <= '`')
321
+ goto yy6;
322
+ if (yych >= '{')
323
+ goto yy6;
324
+ }
325
+ }
326
+ yych = *++p;
327
+ if (yych <= '9') {
328
+ if (yych <= ',') {
329
+ if (yych != '+')
330
+ goto yy6;
331
+ } else {
332
+ if (yych == '/')
333
+ goto yy6;
334
+ }
335
+ } else {
336
+ if (yych <= 'Z') {
337
+ if (yych <= ':')
338
+ goto yy8;
339
+ if (yych <= '@')
340
+ goto yy6;
341
+ } else {
342
+ if (yych <= '`')
343
+ goto yy6;
344
+ if (yych >= '{')
345
+ goto yy6;
346
+ }
347
+ }
348
+ yych = *++p;
349
+ if (yych <= '9') {
350
+ if (yych <= ',') {
351
+ if (yych != '+')
352
+ goto yy6;
353
+ } else {
354
+ if (yych == '/')
355
+ goto yy6;
356
+ }
357
+ } else {
358
+ if (yych <= 'Z') {
359
+ if (yych <= ':')
360
+ goto yy8;
361
+ if (yych <= '@')
362
+ goto yy6;
363
+ } else {
364
+ if (yych <= '`')
365
+ goto yy6;
366
+ if (yych >= '{')
367
+ goto yy6;
368
+ }
369
+ }
370
+ yych = *++p;
371
+ if (yych <= '9') {
372
+ if (yych <= ',') {
373
+ if (yych != '+')
374
+ goto yy6;
375
+ } else {
376
+ if (yych == '/')
377
+ goto yy6;
378
+ }
379
+ } else {
380
+ if (yych <= 'Z') {
381
+ if (yych <= ':')
382
+ goto yy8;
383
+ if (yych <= '@')
384
+ goto yy6;
385
+ } else {
386
+ if (yych <= '`')
387
+ goto yy6;
388
+ if (yych >= '{')
389
+ goto yy6;
390
+ }
391
+ }
392
+ yych = *++p;
393
+ if (yych <= '9') {
394
+ if (yych <= ',') {
395
+ if (yych != '+')
396
+ goto yy6;
397
+ } else {
398
+ if (yych == '/')
399
+ goto yy6;
400
+ }
401
+ } else {
402
+ if (yych <= 'Z') {
403
+ if (yych <= ':')
404
+ goto yy8;
405
+ if (yych <= '@')
406
+ goto yy6;
407
+ } else {
408
+ if (yych <= '`')
409
+ goto yy6;
410
+ if (yych >= '{')
411
+ goto yy6;
412
+ }
413
+ }
414
+ yych = *++p;
415
+ if (yych <= '9') {
416
+ if (yych <= ',') {
417
+ if (yych != '+')
418
+ goto yy6;
419
+ } else {
420
+ if (yych == '/')
421
+ goto yy6;
422
+ }
423
+ } else {
424
+ if (yych <= 'Z') {
425
+ if (yych <= ':')
426
+ goto yy8;
427
+ if (yych <= '@')
428
+ goto yy6;
429
+ } else {
430
+ if (yych <= '`')
431
+ goto yy6;
432
+ if (yych >= '{')
433
+ goto yy6;
434
+ }
435
+ }
436
+ yych = *++p;
437
+ if (yych <= '9') {
438
+ if (yych <= ',') {
439
+ if (yych != '+')
440
+ goto yy6;
441
+ } else {
442
+ if (yych == '/')
443
+ goto yy6;
444
+ }
445
+ } else {
446
+ if (yych <= 'Z') {
447
+ if (yych <= ':')
448
+ goto yy8;
449
+ if (yych <= '@')
450
+ goto yy6;
451
+ } else {
452
+ if (yych <= '`')
453
+ goto yy6;
454
+ if (yych >= '{')
455
+ goto yy6;
456
+ }
457
+ }
458
+ yych = *++p;
459
+ if (yych <= '9') {
460
+ if (yych <= ',') {
461
+ if (yych != '+')
462
+ goto yy6;
463
+ } else {
464
+ if (yych == '/')
465
+ goto yy6;
466
+ }
467
+ } else {
468
+ if (yych <= 'Z') {
469
+ if (yych <= ':')
470
+ goto yy8;
471
+ if (yych <= '@')
472
+ goto yy6;
473
+ } else {
474
+ if (yych <= '`')
475
+ goto yy6;
476
+ if (yych >= '{')
477
+ goto yy6;
478
+ }
479
+ }
480
+ yych = *++p;
481
+ if (yych <= '9') {
482
+ if (yych <= ',') {
483
+ if (yych != '+')
484
+ goto yy6;
485
+ } else {
486
+ if (yych == '/')
487
+ goto yy6;
488
+ }
489
+ } else {
490
+ if (yych <= 'Z') {
491
+ if (yych <= ':')
492
+ goto yy8;
493
+ if (yych <= '@')
494
+ goto yy6;
495
+ } else {
496
+ if (yych <= '`')
497
+ goto yy6;
498
+ if (yych >= '{')
499
+ goto yy6;
500
+ }
501
+ }
502
+ yych = *++p;
503
+ if (yych <= '9') {
504
+ if (yych <= ',') {
505
+ if (yych != '+')
506
+ goto yy6;
507
+ } else {
508
+ if (yych == '/')
509
+ goto yy6;
510
+ }
511
+ } else {
512
+ if (yych <= 'Z') {
513
+ if (yych <= ':')
514
+ goto yy8;
515
+ if (yych <= '@')
516
+ goto yy6;
517
+ } else {
518
+ if (yych <= '`')
519
+ goto yy6;
520
+ if (yych >= '{')
521
+ goto yy6;
522
+ }
523
+ }
524
+ yych = *++p;
525
+ if (yych <= '9') {
526
+ if (yych <= ',') {
527
+ if (yych != '+')
528
+ goto yy6;
529
+ } else {
530
+ if (yych == '/')
531
+ goto yy6;
532
+ }
533
+ } else {
534
+ if (yych <= 'Z') {
535
+ if (yych <= ':')
536
+ goto yy8;
537
+ if (yych <= '@')
538
+ goto yy6;
539
+ } else {
540
+ if (yych <= '`')
541
+ goto yy6;
542
+ if (yych >= '{')
543
+ goto yy6;
544
+ }
545
+ }
546
+ yych = *++p;
547
+ if (yych <= '9') {
548
+ if (yych <= ',') {
549
+ if (yych != '+')
550
+ goto yy6;
551
+ } else {
552
+ if (yych == '/')
553
+ goto yy6;
554
+ }
555
+ } else {
556
+ if (yych <= 'Z') {
557
+ if (yych <= ':')
558
+ goto yy8;
559
+ if (yych <= '@')
560
+ goto yy6;
561
+ } else {
562
+ if (yych <= '`')
563
+ goto yy6;
564
+ if (yych >= '{')
565
+ goto yy6;
566
+ }
567
+ }
568
+ yych = *++p;
569
+ if (yych <= '9') {
570
+ if (yych <= ',') {
571
+ if (yych != '+')
572
+ goto yy6;
573
+ } else {
574
+ if (yych == '/')
575
+ goto yy6;
576
+ }
577
+ } else {
578
+ if (yych <= 'Z') {
579
+ if (yych <= ':')
580
+ goto yy8;
581
+ if (yych <= '@')
582
+ goto yy6;
583
+ } else {
584
+ if (yych <= '`')
585
+ goto yy6;
586
+ if (yych >= '{')
587
+ goto yy6;
588
+ }
589
+ }
590
+ yych = *++p;
591
+ if (yych <= '9') {
592
+ if (yych <= ',') {
593
+ if (yych != '+')
594
+ goto yy6;
595
+ } else {
596
+ if (yych == '/')
597
+ goto yy6;
598
+ }
599
+ } else {
600
+ if (yych <= 'Z') {
601
+ if (yych <= ':')
602
+ goto yy8;
603
+ if (yych <= '@')
604
+ goto yy6;
605
+ } else {
606
+ if (yych <= '`')
607
+ goto yy6;
608
+ if (yych >= '{')
609
+ goto yy6;
610
+ }
611
+ }
612
+ yych = *++p;
613
+ if (yych <= '9') {
614
+ if (yych <= ',') {
615
+ if (yych != '+')
616
+ goto yy6;
617
+ } else {
618
+ if (yych == '/')
619
+ goto yy6;
620
+ }
621
+ } else {
622
+ if (yych <= 'Z') {
623
+ if (yych <= ':')
624
+ goto yy8;
625
+ if (yych <= '@')
626
+ goto yy6;
627
+ } else {
628
+ if (yych <= '`')
629
+ goto yy6;
630
+ if (yych >= '{')
631
+ goto yy6;
632
+ }
633
+ }
634
+ yych = *++p;
635
+ if (yych <= '9') {
636
+ if (yych <= ',') {
637
+ if (yych != '+')
638
+ goto yy6;
639
+ } else {
640
+ if (yych == '/')
641
+ goto yy6;
642
+ }
643
+ } else {
644
+ if (yych <= 'Z') {
645
+ if (yych <= ':')
646
+ goto yy8;
647
+ if (yych <= '@')
648
+ goto yy6;
649
+ } else {
650
+ if (yych <= '`')
651
+ goto yy6;
652
+ if (yych >= '{')
653
+ goto yy6;
654
+ }
655
+ }
656
+ yych = *++p;
657
+ if (yych <= '9') {
658
+ if (yych <= ',') {
659
+ if (yych != '+')
660
+ goto yy6;
661
+ } else {
662
+ if (yych == '/')
663
+ goto yy6;
664
+ }
665
+ } else {
666
+ if (yych <= 'Z') {
667
+ if (yych <= ':')
668
+ goto yy8;
669
+ if (yych <= '@')
670
+ goto yy6;
671
+ } else {
672
+ if (yych <= '`')
673
+ goto yy6;
674
+ if (yych >= '{')
675
+ goto yy6;
676
+ }
677
+ }
678
+ yych = *++p;
679
+ if (yych <= '9') {
680
+ if (yych <= ',') {
681
+ if (yych != '+')
682
+ goto yy6;
683
+ } else {
684
+ if (yych == '/')
685
+ goto yy6;
686
+ }
687
+ } else {
688
+ if (yych <= 'Z') {
689
+ if (yych <= ':')
690
+ goto yy8;
691
+ if (yych <= '@')
692
+ goto yy6;
693
+ } else {
694
+ if (yych <= '`')
695
+ goto yy6;
696
+ if (yych >= '{')
697
+ goto yy6;
698
+ }
699
+ }
700
+ yych = *++p;
701
+ if (yych <= '9') {
702
+ if (yych <= ',') {
703
+ if (yych != '+')
704
+ goto yy6;
705
+ } else {
706
+ if (yych == '/')
707
+ goto yy6;
708
+ }
709
+ } else {
710
+ if (yych <= 'Z') {
711
+ if (yych <= ':')
712
+ goto yy8;
713
+ if (yych <= '@')
714
+ goto yy6;
715
+ } else {
716
+ if (yych <= '`')
717
+ goto yy6;
718
+ if (yych >= '{')
719
+ goto yy6;
720
+ }
721
+ }
722
+ yych = *++p;
723
+ if (yych <= '9') {
724
+ if (yych <= ',') {
725
+ if (yych != '+')
726
+ goto yy6;
727
+ } else {
728
+ if (yych == '/')
729
+ goto yy6;
730
+ }
731
+ } else {
732
+ if (yych <= 'Z') {
733
+ if (yych <= ':')
734
+ goto yy8;
735
+ if (yych <= '@')
736
+ goto yy6;
737
+ } else {
738
+ if (yych <= '`')
739
+ goto yy6;
740
+ if (yych >= '{')
741
+ goto yy6;
742
+ }
743
+ }
744
+ ++p;
745
+ if ((yych = *p) == ':')
746
+ goto yy8;
747
+ goto yy6;
748
+ }
749
+}
750
+
751
+// Try to match URI autolink after first <, returning number of chars matched.
752
+bufsize_t _scan_autolink_uri(const unsigned char *p) {
753
+ const unsigned char *marker = NULL;
754
+ const unsigned char *start = p;
755
+
756
+ {
757
+ unsigned char yych;
758
+ static const unsigned char yybm[] = {
759
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
760
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
761
+ 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128,
762
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
763
+ 128, 128, 128, 128, 0, 128, 0, 128, 128, 128, 128, 128, 128, 128,
764
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
765
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
766
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
767
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
768
+ 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
769
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
770
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
771
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
772
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
773
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
774
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
775
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
776
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
777
+ 0, 0, 0, 0,
778
+ };
779
+ yych = *p;
780
+ if (yych <= '@')
781
+ goto yy41;
782
+ if (yych <= 'Z')
783
+ goto yy43;
784
+ if (yych <= '`')
785
+ goto yy41;
786
+ if (yych <= 'z')
787
+ goto yy43;
788
+ yy41:
789
+ ++p;
790
+ yy42 : { return 0; }
791
+ yy43:
792
+ yych = *(marker = ++p);
793
+ if (yych <= '/') {
794
+ if (yych <= '+') {
795
+ if (yych <= '*')
796
+ goto yy42;
797
+ } else {
798
+ if (yych <= ',')
799
+ goto yy42;
800
+ if (yych >= '/')
801
+ goto yy42;
802
+ }
803
+ } else {
804
+ if (yych <= 'Z') {
805
+ if (yych <= '9')
806
+ goto yy44;
807
+ if (yych <= '@')
808
+ goto yy42;
809
+ } else {
810
+ if (yych <= '`')
811
+ goto yy42;
812
+ if (yych >= '{')
813
+ goto yy42;
814
+ }
815
+ }
816
+ yy44:
817
+ yych = *++p;
818
+ if (yych <= '9') {
819
+ if (yych <= ',') {
820
+ if (yych == '+')
821
+ goto yy46;
822
+ } else {
823
+ if (yych != '/')
824
+ goto yy46;
825
+ }
826
+ } else {
827
+ if (yych <= 'Z') {
828
+ if (yych <= ':')
829
+ goto yy47;
830
+ if (yych >= 'A')
831
+ goto yy46;
832
+ } else {
833
+ if (yych <= '`')
834
+ goto yy45;
835
+ if (yych <= 'z')
836
+ goto yy46;
837
+ }
838
+ }
839
+ yy45:
840
+ p = marker;
841
+ goto yy42;
842
+ yy46:
843
+ yych = *++p;
844
+ if (yych <= '9') {
845
+ if (yych <= ',') {
846
+ if (yych == '+')
847
+ goto yy49;
848
+ goto yy45;
849
+ } else {
850
+ if (yych == '/')
851
+ goto yy45;
852
+ goto yy49;
853
+ }
854
+ } else {
855
+ if (yych <= 'Z') {
856
+ if (yych <= ':')
857
+ goto yy47;
858
+ if (yych <= '@')
859
+ goto yy45;
860
+ goto yy49;
861
+ } else {
862
+ if (yych <= '`')
863
+ goto yy45;
864
+ if (yych <= 'z')
865
+ goto yy49;
866
+ goto yy45;
867
+ }
868
+ }
869
+ yy47:
870
+ ++p;
871
+ yych = *p;
872
+ if (yybm[0 + yych] & 128) {
873
+ goto yy47;
874
+ }
875
+ if (yych <= 0xEC) {
876
+ if (yych <= 0xC1) {
877
+ if (yych <= '<')
878
+ goto yy45;
879
+ if (yych <= '>')
880
+ goto yy50;
881
+ goto yy45;
882
+ } else {
883
+ if (yych <= 0xDF)
884
+ goto yy52;
885
+ if (yych <= 0xE0)
886
+ goto yy53;
887
+ goto yy54;
888
+ }
889
+ } else {
890
+ if (yych <= 0xF0) {
891
+ if (yych <= 0xED)
892
+ goto yy55;
893
+ if (yych <= 0xEF)
894
+ goto yy54;
895
+ goto yy56;
896
+ } else {
897
+ if (yych <= 0xF3)
898
+ goto yy57;
899
+ if (yych <= 0xF4)
900
+ goto yy58;
901
+ goto yy45;
902
+ }
903
+ }
904
+ yy49:
905
+ yych = *++p;
906
+ if (yych <= '9') {
907
+ if (yych <= ',') {
908
+ if (yych == '+')
909
+ goto yy59;
910
+ goto yy45;
911
+ } else {
912
+ if (yych == '/')
913
+ goto yy45;
914
+ goto yy59;
915
+ }
916
+ } else {
917
+ if (yych <= 'Z') {
918
+ if (yych <= ':')
919
+ goto yy47;
920
+ if (yych <= '@')
921
+ goto yy45;
922
+ goto yy59;
923
+ } else {
924
+ if (yych <= '`')
925
+ goto yy45;
926
+ if (yych <= 'z')
927
+ goto yy59;
928
+ goto yy45;
929
+ }
930
+ }
931
+ yy50:
932
+ ++p;
933
+ { return (bufsize_t)(p - start); }
934
+ yy52:
935
+ ++p;
936
+ yych = *p;
937
+ if (yych <= 0x7F)
938
+ goto yy45;
939
+ if (yych <= 0xBF)
940
+ goto yy47;
941
+ goto yy45;
942
+ yy53:
943
+ ++p;
944
+ yych = *p;
945
+ if (yych <= 0x9F)
946
+ goto yy45;
947
+ if (yych <= 0xBF)
948
+ goto yy52;
949
+ goto yy45;
950
+ yy54:
951
+ ++p;
952
+ yych = *p;
953
+ if (yych <= 0x7F)
954
+ goto yy45;
955
+ if (yych <= 0xBF)
956
+ goto yy52;
957
+ goto yy45;
958
+ yy55:
959
+ ++p;
960
+ yych = *p;
961
+ if (yych <= 0x7F)
962
+ goto yy45;
963
+ if (yych <= 0x9F)
964
+ goto yy52;
965
+ goto yy45;
966
+ yy56:
967
+ ++p;
968
+ yych = *p;
969
+ if (yych <= 0x8F)
970
+ goto yy45;
971
+ if (yych <= 0xBF)
972
+ goto yy54;
973
+ goto yy45;
974
+ yy57:
975
+ ++p;
976
+ yych = *p;
977
+ if (yych <= 0x7F)
978
+ goto yy45;
979
+ if (yych <= 0xBF)
980
+ goto yy54;
981
+ goto yy45;
982
+ yy58:
983
+ ++p;
984
+ yych = *p;
985
+ if (yych <= 0x7F)
986
+ goto yy45;
987
+ if (yych <= 0x8F)
988
+ goto yy54;
989
+ goto yy45;
990
+ yy59:
991
+ yych = *++p;
992
+ if (yych <= '9') {
993
+ if (yych <= ',') {
994
+ if (yych != '+')
995
+ goto yy45;
996
+ } else {
997
+ if (yych == '/')
998
+ goto yy45;
999
+ }
1000
+ } else {
1001
+ if (yych <= 'Z') {
1002
+ if (yych <= ':')
1003
+ goto yy47;
1004
+ if (yych <= '@')
1005
+ goto yy45;
1006
+ } else {
1007
+ if (yych <= '`')
1008
+ goto yy45;
1009
+ if (yych >= '{')
1010
+ goto yy45;
1011
+ }
1012
+ }
1013
+ yych = *++p;
1014
+ if (yych <= '9') {
1015
+ if (yych <= ',') {
1016
+ if (yych != '+')
1017
+ goto yy45;
1018
+ } else {
1019
+ if (yych == '/')
1020
+ goto yy45;
1021
+ }
1022
+ } else {
1023
+ if (yych <= 'Z') {
1024
+ if (yych <= ':')
1025
+ goto yy47;
1026
+ if (yych <= '@')
1027
+ goto yy45;
1028
+ } else {
1029
+ if (yych <= '`')
1030
+ goto yy45;
1031
+ if (yych >= '{')
1032
+ goto yy45;
1033
+ }
1034
+ }
1035
+ yych = *++p;
1036
+ if (yych <= '9') {
1037
+ if (yych <= ',') {
1038
+ if (yych != '+')
1039
+ goto yy45;
1040
+ } else {
1041
+ if (yych == '/')
1042
+ goto yy45;
1043
+ }
1044
+ } else {
1045
+ if (yych <= 'Z') {
1046
+ if (yych <= ':')
1047
+ goto yy47;
1048
+ if (yych <= '@')
1049
+ goto yy45;
1050
+ } else {
1051
+ if (yych <= '`')
1052
+ goto yy45;
1053
+ if (yych >= '{')
1054
+ goto yy45;
1055
+ }
1056
+ }
1057
+ yych = *++p;
1058
+ if (yych <= '9') {
1059
+ if (yych <= ',') {
1060
+ if (yych != '+')
1061
+ goto yy45;
1062
+ } else {
1063
+ if (yych == '/')
1064
+ goto yy45;
1065
+ }
1066
+ } else {
1067
+ if (yych <= 'Z') {
1068
+ if (yych <= ':')
1069
+ goto yy47;
1070
+ if (yych <= '@')
1071
+ goto yy45;
1072
+ } else {
1073
+ if (yych <= '`')
1074
+ goto yy45;
1075
+ if (yych >= '{')
1076
+ goto yy45;
1077
+ }
1078
+ }
1079
+ yych = *++p;
1080
+ if (yych <= '9') {
1081
+ if (yych <= ',') {
1082
+ if (yych != '+')
1083
+ goto yy45;
1084
+ } else {
1085
+ if (yych == '/')
1086
+ goto yy45;
1087
+ }
1088
+ } else {
1089
+ if (yych <= 'Z') {
1090
+ if (yych <= ':')
1091
+ goto yy47;
1092
+ if (yych <= '@')
1093
+ goto yy45;
1094
+ } else {
1095
+ if (yych <= '`')
1096
+ goto yy45;
1097
+ if (yych >= '{')
1098
+ goto yy45;
1099
+ }
1100
+ }
1101
+ yych = *++p;
1102
+ if (yych <= '9') {
1103
+ if (yych <= ',') {
1104
+ if (yych != '+')
1105
+ goto yy45;
1106
+ } else {
1107
+ if (yych == '/')
1108
+ goto yy45;
1109
+ }
1110
+ } else {
1111
+ if (yych <= 'Z') {
1112
+ if (yych <= ':')
1113
+ goto yy47;
1114
+ if (yych <= '@')
1115
+ goto yy45;
1116
+ } else {
1117
+ if (yych <= '`')
1118
+ goto yy45;
1119
+ if (yych >= '{')
1120
+ goto yy45;
1121
+ }
1122
+ }
1123
+ yych = *++p;
1124
+ if (yych <= '9') {
1125
+ if (yych <= ',') {
1126
+ if (yych != '+')
1127
+ goto yy45;
1128
+ } else {
1129
+ if (yych == '/')
1130
+ goto yy45;
1131
+ }
1132
+ } else {
1133
+ if (yych <= 'Z') {
1134
+ if (yych <= ':')
1135
+ goto yy47;
1136
+ if (yych <= '@')
1137
+ goto yy45;
1138
+ } else {
1139
+ if (yych <= '`')
1140
+ goto yy45;
1141
+ if (yych >= '{')
1142
+ goto yy45;
1143
+ }
1144
+ }
1145
+ yych = *++p;
1146
+ if (yych <= '9') {
1147
+ if (yych <= ',') {
1148
+ if (yych != '+')
1149
+ goto yy45;
1150
+ } else {
1151
+ if (yych == '/')
1152
+ goto yy45;
1153
+ }
1154
+ } else {
1155
+ if (yych <= 'Z') {
1156
+ if (yych <= ':')
1157
+ goto yy47;
1158
+ if (yych <= '@')
1159
+ goto yy45;
1160
+ } else {
1161
+ if (yych <= '`')
1162
+ goto yy45;
1163
+ if (yych >= '{')
1164
+ goto yy45;
1165
+ }
1166
+ }
1167
+ yych = *++p;
1168
+ if (yych <= '9') {
1169
+ if (yych <= ',') {
1170
+ if (yych != '+')
1171
+ goto yy45;
1172
+ } else {
1173
+ if (yych == '/')
1174
+ goto yy45;
1175
+ }
1176
+ } else {
1177
+ if (yych <= 'Z') {
1178
+ if (yych <= ':')
1179
+ goto yy47;
1180
+ if (yych <= '@')
1181
+ goto yy45;
1182
+ } else {
1183
+ if (yych <= '`')
1184
+ goto yy45;
1185
+ if (yych >= '{')
1186
+ goto yy45;
1187
+ }
1188
+ }
1189
+ yych = *++p;
1190
+ if (yych <= '9') {
1191
+ if (yych <= ',') {
1192
+ if (yych != '+')
1193
+ goto yy45;
1194
+ } else {
1195
+ if (yych == '/')
1196
+ goto yy45;
1197
+ }
1198
+ } else {
1199
+ if (yych <= 'Z') {
1200
+ if (yych <= ':')
1201
+ goto yy47;
1202
+ if (yych <= '@')
1203
+ goto yy45;
1204
+ } else {
1205
+ if (yych <= '`')
1206
+ goto yy45;
1207
+ if (yych >= '{')
1208
+ goto yy45;
1209
+ }
1210
+ }
1211
+ yych = *++p;
1212
+ if (yych <= '9') {
1213
+ if (yych <= ',') {
1214
+ if (yych != '+')
1215
+ goto yy45;
1216
+ } else {
1217
+ if (yych == '/')
1218
+ goto yy45;
1219
+ }
1220
+ } else {
1221
+ if (yych <= 'Z') {
1222
+ if (yych <= ':')
1223
+ goto yy47;
1224
+ if (yych <= '@')
1225
+ goto yy45;
1226
+ } else {
1227
+ if (yych <= '`')
1228
+ goto yy45;
1229
+ if (yych >= '{')
1230
+ goto yy45;
1231
+ }
1232
+ }
1233
+ yych = *++p;
1234
+ if (yych <= '9') {
1235
+ if (yych <= ',') {
1236
+ if (yych != '+')
1237
+ goto yy45;
1238
+ } else {
1239
+ if (yych == '/')
1240
+ goto yy45;
1241
+ }
1242
+ } else {
1243
+ if (yych <= 'Z') {
1244
+ if (yych <= ':')
1245
+ goto yy47;
1246
+ if (yych <= '@')
1247
+ goto yy45;
1248
+ } else {
1249
+ if (yych <= '`')
1250
+ goto yy45;
1251
+ if (yych >= '{')
1252
+ goto yy45;
1253
+ }
1254
+ }
1255
+ yych = *++p;
1256
+ if (yych <= '9') {
1257
+ if (yych <= ',') {
1258
+ if (yych != '+')
1259
+ goto yy45;
1260
+ } else {
1261
+ if (yych == '/')
1262
+ goto yy45;
1263
+ }
1264
+ } else {
1265
+ if (yych <= 'Z') {
1266
+ if (yych <= ':')
1267
+ goto yy47;
1268
+ if (yych <= '@')
1269
+ goto yy45;
1270
+ } else {
1271
+ if (yych <= '`')
1272
+ goto yy45;
1273
+ if (yych >= '{')
1274
+ goto yy45;
1275
+ }
1276
+ }
1277
+ yych = *++p;
1278
+ if (yych <= '9') {
1279
+ if (yych <= ',') {
1280
+ if (yych != '+')
1281
+ goto yy45;
1282
+ } else {
1283
+ if (yych == '/')
1284
+ goto yy45;
1285
+ }
1286
+ } else {
1287
+ if (yych <= 'Z') {
1288
+ if (yych <= ':')
1289
+ goto yy47;
1290
+ if (yych <= '@')
1291
+ goto yy45;
1292
+ } else {
1293
+ if (yych <= '`')
1294
+ goto yy45;
1295
+ if (yych >= '{')
1296
+ goto yy45;
1297
+ }
1298
+ }
1299
+ yych = *++p;
1300
+ if (yych <= '9') {
1301
+ if (yych <= ',') {
1302
+ if (yych != '+')
1303
+ goto yy45;
1304
+ } else {
1305
+ if (yych == '/')
1306
+ goto yy45;
1307
+ }
1308
+ } else {
1309
+ if (yych <= 'Z') {
1310
+ if (yych <= ':')
1311
+ goto yy47;
1312
+ if (yych <= '@')
1313
+ goto yy45;
1314
+ } else {
1315
+ if (yych <= '`')
1316
+ goto yy45;
1317
+ if (yych >= '{')
1318
+ goto yy45;
1319
+ }
1320
+ }
1321
+ yych = *++p;
1322
+ if (yych <= '9') {
1323
+ if (yych <= ',') {
1324
+ if (yych != '+')
1325
+ goto yy45;
1326
+ } else {
1327
+ if (yych == '/')
1328
+ goto yy45;
1329
+ }
1330
+ } else {
1331
+ if (yych <= 'Z') {
1332
+ if (yych <= ':')
1333
+ goto yy47;
1334
+ if (yych <= '@')
1335
+ goto yy45;
1336
+ } else {
1337
+ if (yych <= '`')
1338
+ goto yy45;
1339
+ if (yych >= '{')
1340
+ goto yy45;
1341
+ }
1342
+ }
1343
+ yych = *++p;
1344
+ if (yych <= '9') {
1345
+ if (yych <= ',') {
1346
+ if (yych != '+')
1347
+ goto yy45;
1348
+ } else {
1349
+ if (yych == '/')
1350
+ goto yy45;
1351
+ }
1352
+ } else {
1353
+ if (yych <= 'Z') {
1354
+ if (yych <= ':')
1355
+ goto yy47;
1356
+ if (yych <= '@')
1357
+ goto yy45;
1358
+ } else {
1359
+ if (yych <= '`')
1360
+ goto yy45;
1361
+ if (yych >= '{')
1362
+ goto yy45;
1363
+ }
1364
+ }
1365
+ yych = *++p;
1366
+ if (yych <= '9') {
1367
+ if (yych <= ',') {
1368
+ if (yych != '+')
1369
+ goto yy45;
1370
+ } else {
1371
+ if (yych == '/')
1372
+ goto yy45;
1373
+ }
1374
+ } else {
1375
+ if (yych <= 'Z') {
1376
+ if (yych <= ':')
1377
+ goto yy47;
1378
+ if (yych <= '@')
1379
+ goto yy45;
1380
+ } else {
1381
+ if (yych <= '`')
1382
+ goto yy45;
1383
+ if (yych >= '{')
1384
+ goto yy45;
1385
+ }
1386
+ }
1387
+ yych = *++p;
1388
+ if (yych <= '9') {
1389
+ if (yych <= ',') {
1390
+ if (yych != '+')
1391
+ goto yy45;
1392
+ } else {
1393
+ if (yych == '/')
1394
+ goto yy45;
1395
+ }
1396
+ } else {
1397
+ if (yych <= 'Z') {
1398
+ if (yych <= ':')
1399
+ goto yy47;
1400
+ if (yych <= '@')
1401
+ goto yy45;
1402
+ } else {
1403
+ if (yych <= '`')
1404
+ goto yy45;
1405
+ if (yych >= '{')
1406
+ goto yy45;
1407
+ }
1408
+ }
1409
+ yych = *++p;
1410
+ if (yych <= '9') {
1411
+ if (yych <= ',') {
1412
+ if (yych != '+')
1413
+ goto yy45;
1414
+ } else {
1415
+ if (yych == '/')
1416
+ goto yy45;
1417
+ }
1418
+ } else {
1419
+ if (yych <= 'Z') {
1420
+ if (yych <= ':')
1421
+ goto yy47;
1422
+ if (yych <= '@')
1423
+ goto yy45;
1424
+ } else {
1425
+ if (yych <= '`')
1426
+ goto yy45;
1427
+ if (yych >= '{')
1428
+ goto yy45;
1429
+ }
1430
+ }
1431
+ yych = *++p;
1432
+ if (yych <= '9') {
1433
+ if (yych <= ',') {
1434
+ if (yych != '+')
1435
+ goto yy45;
1436
+ } else {
1437
+ if (yych == '/')
1438
+ goto yy45;
1439
+ }
1440
+ } else {
1441
+ if (yych <= 'Z') {
1442
+ if (yych <= ':')
1443
+ goto yy47;
1444
+ if (yych <= '@')
1445
+ goto yy45;
1446
+ } else {
1447
+ if (yych <= '`')
1448
+ goto yy45;
1449
+ if (yych >= '{')
1450
+ goto yy45;
1451
+ }
1452
+ }
1453
+ yych = *++p;
1454
+ if (yych <= '9') {
1455
+ if (yych <= ',') {
1456
+ if (yych != '+')
1457
+ goto yy45;
1458
+ } else {
1459
+ if (yych == '/')
1460
+ goto yy45;
1461
+ }
1462
+ } else {
1463
+ if (yych <= 'Z') {
1464
+ if (yych <= ':')
1465
+ goto yy47;
1466
+ if (yych <= '@')
1467
+ goto yy45;
1468
+ } else {
1469
+ if (yych <= '`')
1470
+ goto yy45;
1471
+ if (yych >= '{')
1472
+ goto yy45;
1473
+ }
1474
+ }
1475
+ yych = *++p;
1476
+ if (yych <= '9') {
1477
+ if (yych <= ',') {
1478
+ if (yych != '+')
1479
+ goto yy45;
1480
+ } else {
1481
+ if (yych == '/')
1482
+ goto yy45;
1483
+ }
1484
+ } else {
1485
+ if (yych <= 'Z') {
1486
+ if (yych <= ':')
1487
+ goto yy47;
1488
+ if (yych <= '@')
1489
+ goto yy45;
1490
+ } else {
1491
+ if (yych <= '`')
1492
+ goto yy45;
1493
+ if (yych >= '{')
1494
+ goto yy45;
1495
+ }
1496
+ }
1497
+ yych = *++p;
1498
+ if (yych <= '9') {
1499
+ if (yych <= ',') {
1500
+ if (yych != '+')
1501
+ goto yy45;
1502
+ } else {
1503
+ if (yych == '/')
1504
+ goto yy45;
1505
+ }
1506
+ } else {
1507
+ if (yych <= 'Z') {
1508
+ if (yych <= ':')
1509
+ goto yy47;
1510
+ if (yych <= '@')
1511
+ goto yy45;
1512
+ } else {
1513
+ if (yych <= '`')
1514
+ goto yy45;
1515
+ if (yych >= '{')
1516
+ goto yy45;
1517
+ }
1518
+ }
1519
+ yych = *++p;
1520
+ if (yych <= '9') {
1521
+ if (yych <= ',') {
1522
+ if (yych != '+')
1523
+ goto yy45;
1524
+ } else {
1525
+ if (yych == '/')
1526
+ goto yy45;
1527
+ }
1528
+ } else {
1529
+ if (yych <= 'Z') {
1530
+ if (yych <= ':')
1531
+ goto yy47;
1532
+ if (yych <= '@')
1533
+ goto yy45;
1534
+ } else {
1535
+ if (yych <= '`')
1536
+ goto yy45;
1537
+ if (yych >= '{')
1538
+ goto yy45;
1539
+ }
1540
+ }
1541
+ yych = *++p;
1542
+ if (yych <= '9') {
1543
+ if (yych <= ',') {
1544
+ if (yych != '+')
1545
+ goto yy45;
1546
+ } else {
1547
+ if (yych == '/')
1548
+ goto yy45;
1549
+ }
1550
+ } else {
1551
+ if (yych <= 'Z') {
1552
+ if (yych <= ':')
1553
+ goto yy47;
1554
+ if (yych <= '@')
1555
+ goto yy45;
1556
+ } else {
1557
+ if (yych <= '`')
1558
+ goto yy45;
1559
+ if (yych >= '{')
1560
+ goto yy45;
1561
+ }
1562
+ }
1563
+ yych = *++p;
1564
+ if (yych <= '9') {
1565
+ if (yych <= ',') {
1566
+ if (yych != '+')
1567
+ goto yy45;
1568
+ } else {
1569
+ if (yych == '/')
1570
+ goto yy45;
1571
+ }
1572
+ } else {
1573
+ if (yych <= 'Z') {
1574
+ if (yych <= ':')
1575
+ goto yy47;
1576
+ if (yych <= '@')
1577
+ goto yy45;
1578
+ } else {
1579
+ if (yych <= '`')
1580
+ goto yy45;
1581
+ if (yych >= '{')
1582
+ goto yy45;
1583
+ }
1584
+ }
1585
+ ++p;
1586
+ if ((yych = *p) == ':')
1587
+ goto yy47;
1588
+ goto yy45;
1589
+ }
1590
+}
1591
+
1592
+// Try to match email autolink after first <, returning num of chars matched.
1593
+bufsize_t _scan_autolink_email(const unsigned char *p) {
1594
+ const unsigned char *marker = NULL;
1595
+ const unsigned char *start = p;
1596
+
1597
+ {
1598
+ unsigned char yych;
1599
+ static const unsigned char yybm[] = {
1600
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1601
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1602
+ 0, 0, 0, 0, 0, 128, 0, 128, 128, 128, 128, 128, 0, 0,
1603
+ 128, 128, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
1604
+ 128, 128, 0, 0, 0, 128, 0, 128, 0, 128, 128, 128, 128, 128,
1605
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
1606
+ 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 128, 128, 128, 128,
1607
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
1608
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
1609
+ 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1610
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1611
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1612
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1613
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1614
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1615
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1616
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1617
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1618
+ 0, 0, 0, 0,
1619
+ };
1620
+ yych = *p;
1621
+ if (yych <= '9') {
1622
+ if (yych <= '\'') {
1623
+ if (yych == '!')
1624
+ goto yy91;
1625
+ if (yych >= '#')
1626
+ goto yy91;
1627
+ } else {
1628
+ if (yych <= ')')
1629
+ goto yy89;
1630
+ if (yych != ',')
1631
+ goto yy91;
1632
+ }
1633
+ } else {
1634
+ if (yych <= '?') {
1635
+ if (yych == '=')
1636
+ goto yy91;
1637
+ if (yych >= '?')
1638
+ goto yy91;
1639
+ } else {
1640
+ if (yych <= 'Z') {
1641
+ if (yych >= 'A')
1642
+ goto yy91;
1643
+ } else {
1644
+ if (yych <= ']')
1645
+ goto yy89;
1646
+ if (yych <= '~')
1647
+ goto yy91;
1648
+ }
1649
+ }
1650
+ }
1651
+ yy89:
1652
+ ++p;
1653
+ yy90 : { return 0; }
1654
+ yy91:
1655
+ yych = *(marker = ++p);
1656
+ if (yych <= ',') {
1657
+ if (yych <= '"') {
1658
+ if (yych == '!')
1659
+ goto yy93;
1660
+ goto yy90;
1661
+ } else {
1662
+ if (yych <= '\'')
1663
+ goto yy93;
1664
+ if (yych <= ')')
1665
+ goto yy90;
1666
+ if (yych <= '+')
1667
+ goto yy93;
1668
+ goto yy90;
1669
+ }
1670
+ } else {
1671
+ if (yych <= '>') {
1672
+ if (yych <= '9')
1673
+ goto yy93;
1674
+ if (yych == '=')
1675
+ goto yy93;
1676
+ goto yy90;
1677
+ } else {
1678
+ if (yych <= 'Z')
1679
+ goto yy93;
1680
+ if (yych <= ']')
1681
+ goto yy90;
1682
+ if (yych <= '~')
1683
+ goto yy93;
1684
+ goto yy90;
1685
+ }
1686
+ }
1687
+ yy92:
1688
+ ++p;
1689
+ yych = *p;
1690
+ yy93:
1691
+ if (yybm[0 + yych] & 128) {
1692
+ goto yy92;
1693
+ }
1694
+ if (yych <= '>')
1695
+ goto yy94;
1696
+ if (yych <= '@')
1697
+ goto yy95;
1698
+ yy94:
1699
+ p = marker;
1700
+ goto yy90;
1701
+ yy95:
1702
+ ++p;
1703
+ yych = *p;
1704
+ if (yych <= '@') {
1705
+ if (yych <= '/')
1706
+ goto yy94;
1707
+ if (yych >= ':')
1708
+ goto yy94;
1709
+ } else {
1710
+ if (yych <= 'Z')
1711
+ goto yy96;
1712
+ if (yych <= '`')
1713
+ goto yy94;
1714
+ if (yych >= '{')
1715
+ goto yy94;
1716
+ }
1717
+ yy96:
1718
+ ++p;
1719
+ yych = *p;
1720
+ if (yych <= '=') {
1721
+ if (yych <= '.') {
1722
+ if (yych <= ',')
1723
+ goto yy94;
1724
+ if (yych >= '.')
1725
+ goto yy95;
1726
+ } else {
1727
+ if (yych <= '/')
1728
+ goto yy94;
1729
+ if (yych <= '9')
1730
+ goto yy98;
1731
+ goto yy94;
1732
+ }
1733
+ } else {
1734
+ if (yych <= 'Z') {
1735
+ if (yych <= '>')
1736
+ goto yy99;
1737
+ if (yych <= '@')
1738
+ goto yy94;
1739
+ goto yy98;
1740
+ } else {
1741
+ if (yych <= '`')
1742
+ goto yy94;
1743
+ if (yych <= 'z')
1744
+ goto yy98;
1745
+ goto yy94;
1746
+ }
1747
+ }
1748
+ ++p;
1749
+ yych = *p;
1750
+ if (yych <= '9') {
1751
+ if (yych == '-')
1752
+ goto yy101;
1753
+ if (yych <= '/')
1754
+ goto yy94;
1755
+ goto yy102;
1756
+ } else {
1757
+ if (yych <= 'Z') {
1758
+ if (yych <= '@')
1759
+ goto yy94;
1760
+ goto yy102;
1761
+ } else {
1762
+ if (yych <= '`')
1763
+ goto yy94;
1764
+ if (yych <= 'z')
1765
+ goto yy102;
1766
+ goto yy94;
1767
+ }
1768
+ }
1769
+ yy98:
1770
+ ++p;
1771
+ yych = *p;
1772
+ if (yych <= '=') {
1773
+ if (yych <= '.') {
1774
+ if (yych <= ',')
1775
+ goto yy94;
1776
+ if (yych <= '-')
1777
+ goto yy101;
1778
+ goto yy95;
1779
+ } else {
1780
+ if (yych <= '/')
1781
+ goto yy94;
1782
+ if (yych <= '9')
1783
+ goto yy102;
1784
+ goto yy94;
1785
+ }
1786
+ } else {
1787
+ if (yych <= 'Z') {
1788
+ if (yych <= '>')
1789
+ goto yy99;
1790
+ if (yych <= '@')
1791
+ goto yy94;
1792
+ goto yy102;
1793
+ } else {
1794
+ if (yych <= '`')
1795
+ goto yy94;
1796
+ if (yych <= 'z')
1797
+ goto yy102;
1798
+ goto yy94;
1799
+ }
1800
+ }
1801
+ yy99:
1802
+ ++p;
1803
+ { return (bufsize_t)(p - start); }
1804
+ yy101:
1805
+ ++p;
1806
+ yych = *p;
1807
+ if (yych <= '9') {
1808
+ if (yych == '-')
1809
+ goto yy103;
1810
+ if (yych <= '/')
1811
+ goto yy94;
1812
+ goto yy104;
1813
+ } else {
1814
+ if (yych <= 'Z') {
1815
+ if (yych <= '@')
1816
+ goto yy94;
1817
+ goto yy104;
1818
+ } else {
1819
+ if (yych <= '`')
1820
+ goto yy94;
1821
+ if (yych <= 'z')
1822
+ goto yy104;
1823
+ goto yy94;
1824
+ }
1825
+ }
1826
+ yy102:
1827
+ ++p;
1828
+ yych = *p;
1829
+ if (yych <= '=') {
1830
+ if (yych <= '.') {
1831
+ if (yych <= ',')
1832
+ goto yy94;
1833
+ if (yych >= '.')
1834
+ goto yy95;
1835
+ } else {
1836
+ if (yych <= '/')
1837
+ goto yy94;
1838
+ if (yych <= '9')
1839
+ goto yy104;
1840
+ goto yy94;
1841
+ }
1842
+ } else {
1843
+ if (yych <= 'Z') {
1844
+ if (yych <= '>')
1845
+ goto yy99;
1846
+ if (yych <= '@')
1847
+ goto yy94;
1848
+ goto yy104;
1849
+ } else {
1850
+ if (yych <= '`')
1851
+ goto yy94;
1852
+ if (yych <= 'z')
1853
+ goto yy104;
1854
+ goto yy94;
1855
+ }
1856
+ }
1857
+ yy103:
1858
+ ++p;
1859
+ yych = *p;
1860
+ if (yych <= '9') {
1861
+ if (yych == '-')
1862
+ goto yy105;
1863
+ if (yych <= '/')
1864
+ goto yy94;
1865
+ goto yy106;
1866
+ } else {
1867
+ if (yych <= 'Z') {
1868
+ if (yych <= '@')
1869
+ goto yy94;
1870
+ goto yy106;
1871
+ } else {
1872
+ if (yych <= '`')
1873
+ goto yy94;
1874
+ if (yych <= 'z')
1875
+ goto yy106;
1876
+ goto yy94;
1877
+ }
1878
+ }
1879
+ yy104:
1880
+ ++p;
1881
+ yych = *p;
1882
+ if (yych <= '=') {
1883
+ if (yych <= '.') {
1884
+ if (yych <= ',')
1885
+ goto yy94;
1886
+ if (yych >= '.')
1887
+ goto yy95;
1888
+ } else {
1889
+ if (yych <= '/')
1890
+ goto yy94;
1891
+ if (yych <= '9')
1892
+ goto yy106;
1893
+ goto yy94;
1894
+ }
1895
+ } else {
1896
+ if (yych <= 'Z') {
1897
+ if (yych <= '>')
1898
+ goto yy99;
1899
+ if (yych <= '@')
1900
+ goto yy94;
1901
+ goto yy106;
1902
+ } else {
1903
+ if (yych <= '`')
1904
+ goto yy94;
1905
+ if (yych <= 'z')
1906
+ goto yy106;
1907
+ goto yy94;
1908
+ }
1909
+ }
1910
+ yy105:
1911
+ ++p;
1912
+ yych = *p;
1913
+ if (yych <= '9') {
1914
+ if (yych == '-')
1915
+ goto yy107;
1916
+ if (yych <= '/')
1917
+ goto yy94;
1918
+ goto yy108;
1919
+ } else {
1920
+ if (yych <= 'Z') {
1921
+ if (yych <= '@')
1922
+ goto yy94;
1923
+ goto yy108;
1924
+ } else {
1925
+ if (yych <= '`')
1926
+ goto yy94;
1927
+ if (yych <= 'z')
1928
+ goto yy108;
1929
+ goto yy94;
1930
+ }
1931
+ }
1932
+ yy106:
1933
+ ++p;
1934
+ yych = *p;
1935
+ if (yych <= '=') {
1936
+ if (yych <= '.') {
1937
+ if (yych <= ',')
1938
+ goto yy94;
1939
+ if (yych >= '.')
1940
+ goto yy95;
1941
+ } else {
1942
+ if (yych <= '/')
1943
+ goto yy94;
1944
+ if (yych <= '9')
1945
+ goto yy108;
1946
+ goto yy94;
1947
+ }
1948
+ } else {
1949
+ if (yych <= 'Z') {
1950
+ if (yych <= '>')
1951
+ goto yy99;
1952
+ if (yych <= '@')
1953
+ goto yy94;
1954
+ goto yy108;
1955
+ } else {
1956
+ if (yych <= '`')
1957
+ goto yy94;
1958
+ if (yych <= 'z')
1959
+ goto yy108;
1960
+ goto yy94;
1961
+ }
1962
+ }
1963
+ yy107:
1964
+ ++p;
1965
+ yych = *p;
1966
+ if (yych <= '9') {
1967
+ if (yych == '-')
1968
+ goto yy109;
1969
+ if (yych <= '/')
1970
+ goto yy94;
1971
+ goto yy110;
1972
+ } else {
1973
+ if (yych <= 'Z') {
1974
+ if (yych <= '@')
1975
+ goto yy94;
1976
+ goto yy110;
1977
+ } else {
1978
+ if (yych <= '`')
1979
+ goto yy94;
1980
+ if (yych <= 'z')
1981
+ goto yy110;
1982
+ goto yy94;
1983
+ }
1984
+ }
1985
+ yy108:
1986
+ ++p;
1987
+ yych = *p;
1988
+ if (yych <= '=') {
1989
+ if (yych <= '.') {
1990
+ if (yych <= ',')
1991
+ goto yy94;
1992
+ if (yych >= '.')
1993
+ goto yy95;
1994
+ } else {
1995
+ if (yych <= '/')
1996
+ goto yy94;
1997
+ if (yych <= '9')
1998
+ goto yy110;
1999
+ goto yy94;
2000
+ }
2001
+ } else {
2002
+ if (yych <= 'Z') {
2003
+ if (yych <= '>')
2004
+ goto yy99;
2005
+ if (yych <= '@')
2006
+ goto yy94;
2007
+ goto yy110;
2008
+ } else {
2009
+ if (yych <= '`')
2010
+ goto yy94;
2011
+ if (yych <= 'z')
2012
+ goto yy110;
2013
+ goto yy94;
2014
+ }
2015
+ }
2016
+ yy109:
2017
+ ++p;
2018
+ yych = *p;
2019
+ if (yych <= '9') {
2020
+ if (yych == '-')
2021
+ goto yy111;
2022
+ if (yych <= '/')
2023
+ goto yy94;
2024
+ goto yy112;
2025
+ } else {
2026
+ if (yych <= 'Z') {
2027
+ if (yych <= '@')
2028
+ goto yy94;
2029
+ goto yy112;
2030
+ } else {
2031
+ if (yych <= '`')
2032
+ goto yy94;
2033
+ if (yych <= 'z')
2034
+ goto yy112;
2035
+ goto yy94;
2036
+ }
2037
+ }
2038
+ yy110:
2039
+ ++p;
2040
+ yych = *p;
2041
+ if (yych <= '=') {
2042
+ if (yych <= '.') {
2043
+ if (yych <= ',')
2044
+ goto yy94;
2045
+ if (yych >= '.')
2046
+ goto yy95;
2047
+ } else {
2048
+ if (yych <= '/')
2049
+ goto yy94;
2050
+ if (yych <= '9')
2051
+ goto yy112;
2052
+ goto yy94;
2053
+ }
2054
+ } else {
2055
+ if (yych <= 'Z') {
2056
+ if (yych <= '>')
2057
+ goto yy99;
2058
+ if (yych <= '@')
2059
+ goto yy94;
2060
+ goto yy112;
2061
+ } else {
2062
+ if (yych <= '`')
2063
+ goto yy94;
2064
+ if (yych <= 'z')
2065
+ goto yy112;
2066
+ goto yy94;
2067
+ }
2068
+ }
2069
+ yy111:
2070
+ ++p;
2071
+ yych = *p;
2072
+ if (yych <= '9') {
2073
+ if (yych == '-')
2074
+ goto yy113;
2075
+ if (yych <= '/')
2076
+ goto yy94;
2077
+ goto yy114;
2078
+ } else {
2079
+ if (yych <= 'Z') {
2080
+ if (yych <= '@')
2081
+ goto yy94;
2082
+ goto yy114;
2083
+ } else {
2084
+ if (yych <= '`')
2085
+ goto yy94;
2086
+ if (yych <= 'z')
2087
+ goto yy114;
2088
+ goto yy94;
2089
+ }
2090
+ }
2091
+ yy112:
2092
+ ++p;
2093
+ yych = *p;
2094
+ if (yych <= '=') {
2095
+ if (yych <= '.') {
2096
+ if (yych <= ',')
2097
+ goto yy94;
2098
+ if (yych >= '.')
2099
+ goto yy95;
2100
+ } else {
2101
+ if (yych <= '/')
2102
+ goto yy94;
2103
+ if (yych <= '9')
2104
+ goto yy114;
2105
+ goto yy94;
2106
+ }
2107
+ } else {
2108
+ if (yych <= 'Z') {
2109
+ if (yych <= '>')
2110
+ goto yy99;
2111
+ if (yych <= '@')
2112
+ goto yy94;
2113
+ goto yy114;
2114
+ } else {
2115
+ if (yych <= '`')
2116
+ goto yy94;
2117
+ if (yych <= 'z')
2118
+ goto yy114;
2119
+ goto yy94;
2120
+ }
2121
+ }
2122
+ yy113:
2123
+ ++p;
2124
+ yych = *p;
2125
+ if (yych <= '9') {
2126
+ if (yych == '-')
2127
+ goto yy115;
2128
+ if (yych <= '/')
2129
+ goto yy94;
2130
+ goto yy116;
2131
+ } else {
2132
+ if (yych <= 'Z') {
2133
+ if (yych <= '@')
2134
+ goto yy94;
2135
+ goto yy116;
2136
+ } else {
2137
+ if (yych <= '`')
2138
+ goto yy94;
2139
+ if (yych <= 'z')
2140
+ goto yy116;
2141
+ goto yy94;
2142
+ }
2143
+ }
2144
+ yy114:
2145
+ ++p;
2146
+ yych = *p;
2147
+ if (yych <= '=') {
2148
+ if (yych <= '.') {
2149
+ if (yych <= ',')
2150
+ goto yy94;
2151
+ if (yych >= '.')
2152
+ goto yy95;
2153
+ } else {
2154
+ if (yych <= '/')
2155
+ goto yy94;
2156
+ if (yych <= '9')
2157
+ goto yy116;
2158
+ goto yy94;
2159
+ }
2160
+ } else {
2161
+ if (yych <= 'Z') {
2162
+ if (yych <= '>')
2163
+ goto yy99;
2164
+ if (yych <= '@')
2165
+ goto yy94;
2166
+ goto yy116;
2167
+ } else {
2168
+ if (yych <= '`')
2169
+ goto yy94;
2170
+ if (yych <= 'z')
2171
+ goto yy116;
2172
+ goto yy94;
2173
+ }
2174
+ }
2175
+ yy115:
2176
+ ++p;
2177
+ yych = *p;
2178
+ if (yych <= '9') {
2179
+ if (yych == '-')
2180
+ goto yy117;
2181
+ if (yych <= '/')
2182
+ goto yy94;
2183
+ goto yy118;
2184
+ } else {
2185
+ if (yych <= 'Z') {
2186
+ if (yych <= '@')
2187
+ goto yy94;
2188
+ goto yy118;
2189
+ } else {
2190
+ if (yych <= '`')
2191
+ goto yy94;
2192
+ if (yych <= 'z')
2193
+ goto yy118;
2194
+ goto yy94;
2195
+ }
2196
+ }
2197
+ yy116:
2198
+ ++p;
2199
+ yych = *p;
2200
+ if (yych <= '=') {
2201
+ if (yych <= '.') {
2202
+ if (yych <= ',')
2203
+ goto yy94;
2204
+ if (yych >= '.')
2205
+ goto yy95;
2206
+ } else {
2207
+ if (yych <= '/')
2208
+ goto yy94;
2209
+ if (yych <= '9')
2210
+ goto yy118;
2211
+ goto yy94;
2212
+ }
2213
+ } else {
2214
+ if (yych <= 'Z') {
2215
+ if (yych <= '>')
2216
+ goto yy99;
2217
+ if (yych <= '@')
2218
+ goto yy94;
2219
+ goto yy118;
2220
+ } else {
2221
+ if (yych <= '`')
2222
+ goto yy94;
2223
+ if (yych <= 'z')
2224
+ goto yy118;
2225
+ goto yy94;
2226
+ }
2227
+ }
2228
+ yy117:
2229
+ ++p;
2230
+ yych = *p;
2231
+ if (yych <= '9') {
2232
+ if (yych == '-')
2233
+ goto yy119;
2234
+ if (yych <= '/')
2235
+ goto yy94;
2236
+ goto yy120;
2237
+ } else {
2238
+ if (yych <= 'Z') {
2239
+ if (yych <= '@')
2240
+ goto yy94;
2241
+ goto yy120;
2242
+ } else {
2243
+ if (yych <= '`')
2244
+ goto yy94;
2245
+ if (yych <= 'z')
2246
+ goto yy120;
2247
+ goto yy94;
2248
+ }
2249
+ }
2250
+ yy118:
2251
+ ++p;
2252
+ yych = *p;
2253
+ if (yych <= '=') {
2254
+ if (yych <= '.') {
2255
+ if (yych <= ',')
2256
+ goto yy94;
2257
+ if (yych >= '.')
2258
+ goto yy95;
2259
+ } else {
2260
+ if (yych <= '/')
2261
+ goto yy94;
2262
+ if (yych <= '9')
2263
+ goto yy120;
2264
+ goto yy94;
2265
+ }
2266
+ } else {
2267
+ if (yych <= 'Z') {
2268
+ if (yych <= '>')
2269
+ goto yy99;
2270
+ if (yych <= '@')
2271
+ goto yy94;
2272
+ goto yy120;
2273
+ } else {
2274
+ if (yych <= '`')
2275
+ goto yy94;
2276
+ if (yych <= 'z')
2277
+ goto yy120;
2278
+ goto yy94;
2279
+ }
2280
+ }
2281
+ yy119:
2282
+ ++p;
2283
+ yych = *p;
2284
+ if (yych <= '9') {
2285
+ if (yych == '-')
2286
+ goto yy121;
2287
+ if (yych <= '/')
2288
+ goto yy94;
2289
+ goto yy122;
2290
+ } else {
2291
+ if (yych <= 'Z') {
2292
+ if (yych <= '@')
2293
+ goto yy94;
2294
+ goto yy122;
2295
+ } else {
2296
+ if (yych <= '`')
2297
+ goto yy94;
2298
+ if (yych <= 'z')
2299
+ goto yy122;
2300
+ goto yy94;
2301
+ }
2302
+ }
2303
+ yy120:
2304
+ ++p;
2305
+ yych = *p;
2306
+ if (yych <= '=') {
2307
+ if (yych <= '.') {
2308
+ if (yych <= ',')
2309
+ goto yy94;
2310
+ if (yych >= '.')
2311
+ goto yy95;
2312
+ } else {
2313
+ if (yych <= '/')
2314
+ goto yy94;
2315
+ if (yych <= '9')
2316
+ goto yy122;
2317
+ goto yy94;
2318
+ }
2319
+ } else {
2320
+ if (yych <= 'Z') {
2321
+ if (yych <= '>')
2322
+ goto yy99;
2323
+ if (yych <= '@')
2324
+ goto yy94;
2325
+ goto yy122;
2326
+ } else {
2327
+ if (yych <= '`')
2328
+ goto yy94;
2329
+ if (yych <= 'z')
2330
+ goto yy122;
2331
+ goto yy94;
2332
+ }
2333
+ }
2334
+ yy121:
2335
+ ++p;
2336
+ yych = *p;
2337
+ if (yych <= '9') {
2338
+ if (yych == '-')
2339
+ goto yy123;
2340
+ if (yych <= '/')
2341
+ goto yy94;
2342
+ goto yy124;
2343
+ } else {
2344
+ if (yych <= 'Z') {
2345
+ if (yych <= '@')
2346
+ goto yy94;
2347
+ goto yy124;
2348
+ } else {
2349
+ if (yych <= '`')
2350
+ goto yy94;
2351
+ if (yych <= 'z')
2352
+ goto yy124;
2353
+ goto yy94;
2354
+ }
2355
+ }
2356
+ yy122:
2357
+ ++p;
2358
+ yych = *p;
2359
+ if (yych <= '=') {
2360
+ if (yych <= '.') {
2361
+ if (yych <= ',')
2362
+ goto yy94;
2363
+ if (yych >= '.')
2364
+ goto yy95;
2365
+ } else {
2366
+ if (yych <= '/')
2367
+ goto yy94;
2368
+ if (yych <= '9')
2369
+ goto yy124;
2370
+ goto yy94;
2371
+ }
2372
+ } else {
2373
+ if (yych <= 'Z') {
2374
+ if (yych <= '>')
2375
+ goto yy99;
2376
+ if (yych <= '@')
2377
+ goto yy94;
2378
+ goto yy124;
2379
+ } else {
2380
+ if (yych <= '`')
2381
+ goto yy94;
2382
+ if (yych <= 'z')
2383
+ goto yy124;
2384
+ goto yy94;
2385
+ }
2386
+ }
2387
+ yy123:
2388
+ ++p;
2389
+ yych = *p;
2390
+ if (yych <= '9') {
2391
+ if (yych == '-')
2392
+ goto yy125;
2393
+ if (yych <= '/')
2394
+ goto yy94;
2395
+ goto yy126;
2396
+ } else {
2397
+ if (yych <= 'Z') {
2398
+ if (yych <= '@')
2399
+ goto yy94;
2400
+ goto yy126;
2401
+ } else {
2402
+ if (yych <= '`')
2403
+ goto yy94;
2404
+ if (yych <= 'z')
2405
+ goto yy126;
2406
+ goto yy94;
2407
+ }
2408
+ }
2409
+ yy124:
2410
+ ++p;
2411
+ yych = *p;
2412
+ if (yych <= '=') {
2413
+ if (yych <= '.') {
2414
+ if (yych <= ',')
2415
+ goto yy94;
2416
+ if (yych >= '.')
2417
+ goto yy95;
2418
+ } else {
2419
+ if (yych <= '/')
2420
+ goto yy94;
2421
+ if (yych <= '9')
2422
+ goto yy126;
2423
+ goto yy94;
2424
+ }
2425
+ } else {
2426
+ if (yych <= 'Z') {
2427
+ if (yych <= '>')
2428
+ goto yy99;
2429
+ if (yych <= '@')
2430
+ goto yy94;
2431
+ goto yy126;
2432
+ } else {
2433
+ if (yych <= '`')
2434
+ goto yy94;
2435
+ if (yych <= 'z')
2436
+ goto yy126;
2437
+ goto yy94;
2438
+ }
2439
+ }
2440
+ yy125:
2441
+ ++p;
2442
+ yych = *p;
2443
+ if (yych <= '9') {
2444
+ if (yych == '-')
2445
+ goto yy127;
2446
+ if (yych <= '/')
2447
+ goto yy94;
2448
+ goto yy128;
2449
+ } else {
2450
+ if (yych <= 'Z') {
2451
+ if (yych <= '@')
2452
+ goto yy94;
2453
+ goto yy128;
2454
+ } else {
2455
+ if (yych <= '`')
2456
+ goto yy94;
2457
+ if (yych <= 'z')
2458
+ goto yy128;
2459
+ goto yy94;
2460
+ }
2461
+ }
2462
+ yy126:
2463
+ ++p;
2464
+ yych = *p;
2465
+ if (yych <= '=') {
2466
+ if (yych <= '.') {
2467
+ if (yych <= ',')
2468
+ goto yy94;
2469
+ if (yych >= '.')
2470
+ goto yy95;
2471
+ } else {
2472
+ if (yych <= '/')
2473
+ goto yy94;
2474
+ if (yych <= '9')
2475
+ goto yy128;
2476
+ goto yy94;
2477
+ }
2478
+ } else {
2479
+ if (yych <= 'Z') {
2480
+ if (yych <= '>')
2481
+ goto yy99;
2482
+ if (yych <= '@')
2483
+ goto yy94;
2484
+ goto yy128;
2485
+ } else {
2486
+ if (yych <= '`')
2487
+ goto yy94;
2488
+ if (yych <= 'z')
2489
+ goto yy128;
2490
+ goto yy94;
2491
+ }
2492
+ }
2493
+ yy127:
2494
+ ++p;
2495
+ yych = *p;
2496
+ if (yych <= '9') {
2497
+ if (yych == '-')
2498
+ goto yy129;
2499
+ if (yych <= '/')
2500
+ goto yy94;
2501
+ goto yy130;
2502
+ } else {
2503
+ if (yych <= 'Z') {
2504
+ if (yych <= '@')
2505
+ goto yy94;
2506
+ goto yy130;
2507
+ } else {
2508
+ if (yych <= '`')
2509
+ goto yy94;
2510
+ if (yych <= 'z')
2511
+ goto yy130;
2512
+ goto yy94;
2513
+ }
2514
+ }
2515
+ yy128:
2516
+ ++p;
2517
+ yych = *p;
2518
+ if (yych <= '=') {
2519
+ if (yych <= '.') {
2520
+ if (yych <= ',')
2521
+ goto yy94;
2522
+ if (yych >= '.')
2523
+ goto yy95;
2524
+ } else {
2525
+ if (yych <= '/')
2526
+ goto yy94;
2527
+ if (yych <= '9')
2528
+ goto yy130;
2529
+ goto yy94;
2530
+ }
2531
+ } else {
2532
+ if (yych <= 'Z') {
2533
+ if (yych <= '>')
2534
+ goto yy99;
2535
+ if (yych <= '@')
2536
+ goto yy94;
2537
+ goto yy130;
2538
+ } else {
2539
+ if (yych <= '`')
2540
+ goto yy94;
2541
+ if (yych <= 'z')
2542
+ goto yy130;
2543
+ goto yy94;
2544
+ }
2545
+ }
2546
+ yy129:
2547
+ ++p;
2548
+ yych = *p;
2549
+ if (yych <= '9') {
2550
+ if (yych == '-')
2551
+ goto yy131;
2552
+ if (yych <= '/')
2553
+ goto yy94;
2554
+ goto yy132;
2555
+ } else {
2556
+ if (yych <= 'Z') {
2557
+ if (yych <= '@')
2558
+ goto yy94;
2559
+ goto yy132;
2560
+ } else {
2561
+ if (yych <= '`')
2562
+ goto yy94;
2563
+ if (yych <= 'z')
2564
+ goto yy132;
2565
+ goto yy94;
2566
+ }
2567
+ }
2568
+ yy130:
2569
+ ++p;
2570
+ yych = *p;
2571
+ if (yych <= '=') {
2572
+ if (yych <= '.') {
2573
+ if (yych <= ',')
2574
+ goto yy94;
2575
+ if (yych >= '.')
2576
+ goto yy95;
2577
+ } else {
2578
+ if (yych <= '/')
2579
+ goto yy94;
2580
+ if (yych <= '9')
2581
+ goto yy132;
2582
+ goto yy94;
2583
+ }
2584
+ } else {
2585
+ if (yych <= 'Z') {
2586
+ if (yych <= '>')
2587
+ goto yy99;
2588
+ if (yych <= '@')
2589
+ goto yy94;
2590
+ goto yy132;
2591
+ } else {
2592
+ if (yych <= '`')
2593
+ goto yy94;
2594
+ if (yych <= 'z')
2595
+ goto yy132;
2596
+ goto yy94;
2597
+ }
2598
+ }
2599
+ yy131:
2600
+ ++p;
2601
+ yych = *p;
2602
+ if (yych <= '9') {
2603
+ if (yych == '-')
2604
+ goto yy133;
2605
+ if (yych <= '/')
2606
+ goto yy94;
2607
+ goto yy134;
2608
+ } else {
2609
+ if (yych <= 'Z') {
2610
+ if (yych <= '@')
2611
+ goto yy94;
2612
+ goto yy134;
2613
+ } else {
2614
+ if (yych <= '`')
2615
+ goto yy94;
2616
+ if (yych <= 'z')
2617
+ goto yy134;
2618
+ goto yy94;
2619
+ }
2620
+ }
2621
+ yy132:
2622
+ ++p;
2623
+ yych = *p;
2624
+ if (yych <= '=') {
2625
+ if (yych <= '.') {
2626
+ if (yych <= ',')
2627
+ goto yy94;
2628
+ if (yych >= '.')
2629
+ goto yy95;
2630
+ } else {
2631
+ if (yych <= '/')
2632
+ goto yy94;
2633
+ if (yych <= '9')
2634
+ goto yy134;
2635
+ goto yy94;
2636
+ }
2637
+ } else {
2638
+ if (yych <= 'Z') {
2639
+ if (yych <= '>')
2640
+ goto yy99;
2641
+ if (yych <= '@')
2642
+ goto yy94;
2643
+ goto yy134;
2644
+ } else {
2645
+ if (yych <= '`')
2646
+ goto yy94;
2647
+ if (yych <= 'z')
2648
+ goto yy134;
2649
+ goto yy94;
2650
+ }
2651
+ }
2652
+ yy133:
2653
+ ++p;
2654
+ yych = *p;
2655
+ if (yych <= '9') {
2656
+ if (yych == '-')
2657
+ goto yy135;
2658
+ if (yych <= '/')
2659
+ goto yy94;
2660
+ goto yy136;
2661
+ } else {
2662
+ if (yych <= 'Z') {
2663
+ if (yych <= '@')
2664
+ goto yy94;
2665
+ goto yy136;
2666
+ } else {
2667
+ if (yych <= '`')
2668
+ goto yy94;
2669
+ if (yych <= 'z')
2670
+ goto yy136;
2671
+ goto yy94;
2672
+ }
2673
+ }
2674
+ yy134:
2675
+ ++p;
2676
+ yych = *p;
2677
+ if (yych <= '=') {
2678
+ if (yych <= '.') {
2679
+ if (yych <= ',')
2680
+ goto yy94;
2681
+ if (yych >= '.')
2682
+ goto yy95;
2683
+ } else {
2684
+ if (yych <= '/')
2685
+ goto yy94;
2686
+ if (yych <= '9')
2687
+ goto yy136;
2688
+ goto yy94;
2689
+ }
2690
+ } else {
2691
+ if (yych <= 'Z') {
2692
+ if (yych <= '>')
2693
+ goto yy99;
2694
+ if (yych <= '@')
2695
+ goto yy94;
2696
+ goto yy136;
2697
+ } else {
2698
+ if (yych <= '`')
2699
+ goto yy94;
2700
+ if (yych <= 'z')
2701
+ goto yy136;
2702
+ goto yy94;
2703
+ }
2704
+ }
2705
+ yy135:
2706
+ ++p;
2707
+ yych = *p;
2708
+ if (yych <= '9') {
2709
+ if (yych == '-')
2710
+ goto yy137;
2711
+ if (yych <= '/')
2712
+ goto yy94;
2713
+ goto yy138;
2714
+ } else {
2715
+ if (yych <= 'Z') {
2716
+ if (yych <= '@')
2717
+ goto yy94;
2718
+ goto yy138;
2719
+ } else {
2720
+ if (yych <= '`')
2721
+ goto yy94;
2722
+ if (yych <= 'z')
2723
+ goto yy138;
2724
+ goto yy94;
2725
+ }
2726
+ }
2727
+ yy136:
2728
+ ++p;
2729
+ yych = *p;
2730
+ if (yych <= '=') {
2731
+ if (yych <= '.') {
2732
+ if (yych <= ',')
2733
+ goto yy94;
2734
+ if (yych >= '.')
2735
+ goto yy95;
2736
+ } else {
2737
+ if (yych <= '/')
2738
+ goto yy94;
2739
+ if (yych <= '9')
2740
+ goto yy138;
2741
+ goto yy94;
2742
+ }
2743
+ } else {
2744
+ if (yych <= 'Z') {
2745
+ if (yych <= '>')
2746
+ goto yy99;
2747
+ if (yych <= '@')
2748
+ goto yy94;
2749
+ goto yy138;
2750
+ } else {
2751
+ if (yych <= '`')
2752
+ goto yy94;
2753
+ if (yych <= 'z')
2754
+ goto yy138;
2755
+ goto yy94;
2756
+ }
2757
+ }
2758
+ yy137:
2759
+ ++p;
2760
+ yych = *p;
2761
+ if (yych <= '9') {
2762
+ if (yych == '-')
2763
+ goto yy139;
2764
+ if (yych <= '/')
2765
+ goto yy94;
2766
+ goto yy140;
2767
+ } else {
2768
+ if (yych <= 'Z') {
2769
+ if (yych <= '@')
2770
+ goto yy94;
2771
+ goto yy140;
2772
+ } else {
2773
+ if (yych <= '`')
2774
+ goto yy94;
2775
+ if (yych <= 'z')
2776
+ goto yy140;
2777
+ goto yy94;
2778
+ }
2779
+ }
2780
+ yy138:
2781
+ ++p;
2782
+ yych = *p;
2783
+ if (yych <= '=') {
2784
+ if (yych <= '.') {
2785
+ if (yych <= ',')
2786
+ goto yy94;
2787
+ if (yych >= '.')
2788
+ goto yy95;
2789
+ } else {
2790
+ if (yych <= '/')
2791
+ goto yy94;
2792
+ if (yych <= '9')
2793
+ goto yy140;
2794
+ goto yy94;
2795
+ }
2796
+ } else {
2797
+ if (yych <= 'Z') {
2798
+ if (yych <= '>')
2799
+ goto yy99;
2800
+ if (yych <= '@')
2801
+ goto yy94;
2802
+ goto yy140;
2803
+ } else {
2804
+ if (yych <= '`')
2805
+ goto yy94;
2806
+ if (yych <= 'z')
2807
+ goto yy140;
2808
+ goto yy94;
2809
+ }
2810
+ }
2811
+ yy139:
2812
+ ++p;
2813
+ yych = *p;
2814
+ if (yych <= '9') {
2815
+ if (yych == '-')
2816
+ goto yy141;
2817
+ if (yych <= '/')
2818
+ goto yy94;
2819
+ goto yy142;
2820
+ } else {
2821
+ if (yych <= 'Z') {
2822
+ if (yych <= '@')
2823
+ goto yy94;
2824
+ goto yy142;
2825
+ } else {
2826
+ if (yych <= '`')
2827
+ goto yy94;
2828
+ if (yych <= 'z')
2829
+ goto yy142;
2830
+ goto yy94;
2831
+ }
2832
+ }
2833
+ yy140:
2834
+ ++p;
2835
+ yych = *p;
2836
+ if (yych <= '=') {
2837
+ if (yych <= '.') {
2838
+ if (yych <= ',')
2839
+ goto yy94;
2840
+ if (yych >= '.')
2841
+ goto yy95;
2842
+ } else {
2843
+ if (yych <= '/')
2844
+ goto yy94;
2845
+ if (yych <= '9')
2846
+ goto yy142;
2847
+ goto yy94;
2848
+ }
2849
+ } else {
2850
+ if (yych <= 'Z') {
2851
+ if (yych <= '>')
2852
+ goto yy99;
2853
+ if (yych <= '@')
2854
+ goto yy94;
2855
+ goto yy142;
2856
+ } else {
2857
+ if (yych <= '`')
2858
+ goto yy94;
2859
+ if (yych <= 'z')
2860
+ goto yy142;
2861
+ goto yy94;
2862
+ }
2863
+ }
2864
+ yy141:
2865
+ ++p;
2866
+ yych = *p;
2867
+ if (yych <= '9') {
2868
+ if (yych == '-')
2869
+ goto yy143;
2870
+ if (yych <= '/')
2871
+ goto yy94;
2872
+ goto yy144;
2873
+ } else {
2874
+ if (yych <= 'Z') {
2875
+ if (yych <= '@')
2876
+ goto yy94;
2877
+ goto yy144;
2878
+ } else {
2879
+ if (yych <= '`')
2880
+ goto yy94;
2881
+ if (yych <= 'z')
2882
+ goto yy144;
2883
+ goto yy94;
2884
+ }
2885
+ }
2886
+ yy142:
2887
+ ++p;
2888
+ yych = *p;
2889
+ if (yych <= '=') {
2890
+ if (yych <= '.') {
2891
+ if (yych <= ',')
2892
+ goto yy94;
2893
+ if (yych >= '.')
2894
+ goto yy95;
2895
+ } else {
2896
+ if (yych <= '/')
2897
+ goto yy94;
2898
+ if (yych <= '9')
2899
+ goto yy144;
2900
+ goto yy94;
2901
+ }
2902
+ } else {
2903
+ if (yych <= 'Z') {
2904
+ if (yych <= '>')
2905
+ goto yy99;
2906
+ if (yych <= '@')
2907
+ goto yy94;
2908
+ goto yy144;
2909
+ } else {
2910
+ if (yych <= '`')
2911
+ goto yy94;
2912
+ if (yych <= 'z')
2913
+ goto yy144;
2914
+ goto yy94;
2915
+ }
2916
+ }
2917
+ yy143:
2918
+ ++p;
2919
+ yych = *p;
2920
+ if (yych <= '9') {
2921
+ if (yych == '-')
2922
+ goto yy145;
2923
+ if (yych <= '/')
2924
+ goto yy94;
2925
+ goto yy146;
2926
+ } else {
2927
+ if (yych <= 'Z') {
2928
+ if (yych <= '@')
2929
+ goto yy94;
2930
+ goto yy146;
2931
+ } else {
2932
+ if (yych <= '`')
2933
+ goto yy94;
2934
+ if (yych <= 'z')
2935
+ goto yy146;
2936
+ goto yy94;
2937
+ }
2938
+ }
2939
+ yy144:
2940
+ ++p;
2941
+ yych = *p;
2942
+ if (yych <= '=') {
2943
+ if (yych <= '.') {
2944
+ if (yych <= ',')
2945
+ goto yy94;
2946
+ if (yych >= '.')
2947
+ goto yy95;
2948
+ } else {
2949
+ if (yych <= '/')
2950
+ goto yy94;
2951
+ if (yych <= '9')
2952
+ goto yy146;
2953
+ goto yy94;
2954
+ }
2955
+ } else {
2956
+ if (yych <= 'Z') {
2957
+ if (yych <= '>')
2958
+ goto yy99;
2959
+ if (yych <= '@')
2960
+ goto yy94;
2961
+ goto yy146;
2962
+ } else {
2963
+ if (yych <= '`')
2964
+ goto yy94;
2965
+ if (yych <= 'z')
2966
+ goto yy146;
2967
+ goto yy94;
2968
+ }
2969
+ }
2970
+ yy145:
2971
+ ++p;
2972
+ yych = *p;
2973
+ if (yych <= '9') {
2974
+ if (yych == '-')
2975
+ goto yy147;
2976
+ if (yych <= '/')
2977
+ goto yy94;
2978
+ goto yy148;
2979
+ } else {
2980
+ if (yych <= 'Z') {
2981
+ if (yych <= '@')
2982
+ goto yy94;
2983
+ goto yy148;
2984
+ } else {
2985
+ if (yych <= '`')
2986
+ goto yy94;
2987
+ if (yych <= 'z')
2988
+ goto yy148;
2989
+ goto yy94;
2990
+ }
2991
+ }
2992
+ yy146:
2993
+ ++p;
2994
+ yych = *p;
2995
+ if (yych <= '=') {
2996
+ if (yych <= '.') {
2997
+ if (yych <= ',')
2998
+ goto yy94;
2999
+ if (yych >= '.')
3000
+ goto yy95;
3001
+ } else {
3002
+ if (yych <= '/')
3003
+ goto yy94;
3004
+ if (yych <= '9')
3005
+ goto yy148;
3006
+ goto yy94;
3007
+ }
3008
+ } else {
3009
+ if (yych <= 'Z') {
3010
+ if (yych <= '>')
3011
+ goto yy99;
3012
+ if (yych <= '@')
3013
+ goto yy94;
3014
+ goto yy148;
3015
+ } else {
3016
+ if (yych <= '`')
3017
+ goto yy94;
3018
+ if (yych <= 'z')
3019
+ goto yy148;
3020
+ goto yy94;
3021
+ }
3022
+ }
3023
+ yy147:
3024
+ ++p;
3025
+ yych = *p;
3026
+ if (yych <= '9') {
3027
+ if (yych == '-')
3028
+ goto yy149;
3029
+ if (yych <= '/')
3030
+ goto yy94;
3031
+ goto yy150;
3032
+ } else {
3033
+ if (yych <= 'Z') {
3034
+ if (yych <= '@')
3035
+ goto yy94;
3036
+ goto yy150;
3037
+ } else {
3038
+ if (yych <= '`')
3039
+ goto yy94;
3040
+ if (yych <= 'z')
3041
+ goto yy150;
3042
+ goto yy94;
3043
+ }
3044
+ }
3045
+ yy148:
3046
+ ++p;
3047
+ yych = *p;
3048
+ if (yych <= '=') {
3049
+ if (yych <= '.') {
3050
+ if (yych <= ',')
3051
+ goto yy94;
3052
+ if (yych >= '.')
3053
+ goto yy95;
3054
+ } else {
3055
+ if (yych <= '/')
3056
+ goto yy94;
3057
+ if (yych <= '9')
3058
+ goto yy150;
3059
+ goto yy94;
3060
+ }
3061
+ } else {
3062
+ if (yych <= 'Z') {
3063
+ if (yych <= '>')
3064
+ goto yy99;
3065
+ if (yych <= '@')
3066
+ goto yy94;
3067
+ goto yy150;
3068
+ } else {
3069
+ if (yych <= '`')
3070
+ goto yy94;
3071
+ if (yych <= 'z')
3072
+ goto yy150;
3073
+ goto yy94;
3074
+ }
3075
+ }
3076
+ yy149:
3077
+ ++p;
3078
+ yych = *p;
3079
+ if (yych <= '9') {
3080
+ if (yych == '-')
3081
+ goto yy151;
3082
+ if (yych <= '/')
3083
+ goto yy94;
3084
+ goto yy152;
3085
+ } else {
3086
+ if (yych <= 'Z') {
3087
+ if (yych <= '@')
3088
+ goto yy94;
3089
+ goto yy152;
3090
+ } else {
3091
+ if (yych <= '`')
3092
+ goto yy94;
3093
+ if (yych <= 'z')
3094
+ goto yy152;
3095
+ goto yy94;
3096
+ }
3097
+ }
3098
+ yy150:
3099
+ ++p;
3100
+ yych = *p;
3101
+ if (yych <= '=') {
3102
+ if (yych <= '.') {
3103
+ if (yych <= ',')
3104
+ goto yy94;
3105
+ if (yych >= '.')
3106
+ goto yy95;
3107
+ } else {
3108
+ if (yych <= '/')
3109
+ goto yy94;
3110
+ if (yych <= '9')
3111
+ goto yy152;
3112
+ goto yy94;
3113
+ }
3114
+ } else {
3115
+ if (yych <= 'Z') {
3116
+ if (yych <= '>')
3117
+ goto yy99;
3118
+ if (yych <= '@')
3119
+ goto yy94;
3120
+ goto yy152;
3121
+ } else {
3122
+ if (yych <= '`')
3123
+ goto yy94;
3124
+ if (yych <= 'z')
3125
+ goto yy152;
3126
+ goto yy94;
3127
+ }
3128
+ }
3129
+ yy151:
3130
+ ++p;
3131
+ yych = *p;
3132
+ if (yych <= '9') {
3133
+ if (yych == '-')
3134
+ goto yy153;
3135
+ if (yych <= '/')
3136
+ goto yy94;
3137
+ goto yy154;
3138
+ } else {
3139
+ if (yych <= 'Z') {
3140
+ if (yych <= '@')
3141
+ goto yy94;
3142
+ goto yy154;
3143
+ } else {
3144
+ if (yych <= '`')
3145
+ goto yy94;
3146
+ if (yych <= 'z')
3147
+ goto yy154;
3148
+ goto yy94;
3149
+ }
3150
+ }
3151
+ yy152:
3152
+ ++p;
3153
+ yych = *p;
3154
+ if (yych <= '=') {
3155
+ if (yych <= '.') {
3156
+ if (yych <= ',')
3157
+ goto yy94;
3158
+ if (yych >= '.')
3159
+ goto yy95;
3160
+ } else {
3161
+ if (yych <= '/')
3162
+ goto yy94;
3163
+ if (yych <= '9')
3164
+ goto yy154;
3165
+ goto yy94;
3166
+ }
3167
+ } else {
3168
+ if (yych <= 'Z') {
3169
+ if (yych <= '>')
3170
+ goto yy99;
3171
+ if (yych <= '@')
3172
+ goto yy94;
3173
+ goto yy154;
3174
+ } else {
3175
+ if (yych <= '`')
3176
+ goto yy94;
3177
+ if (yych <= 'z')
3178
+ goto yy154;
3179
+ goto yy94;
3180
+ }
3181
+ }
3182
+ yy153:
3183
+ ++p;
3184
+ yych = *p;
3185
+ if (yych <= '9') {
3186
+ if (yych == '-')
3187
+ goto yy155;
3188
+ if (yych <= '/')
3189
+ goto yy94;
3190
+ goto yy156;
3191
+ } else {
3192
+ if (yych <= 'Z') {
3193
+ if (yych <= '@')
3194
+ goto yy94;
3195
+ goto yy156;
3196
+ } else {
3197
+ if (yych <= '`')
3198
+ goto yy94;
3199
+ if (yych <= 'z')
3200
+ goto yy156;
3201
+ goto yy94;
3202
+ }
3203
+ }
3204
+ yy154:
3205
+ ++p;
3206
+ yych = *p;
3207
+ if (yych <= '=') {
3208
+ if (yych <= '.') {
3209
+ if (yych <= ',')
3210
+ goto yy94;
3211
+ if (yych >= '.')
3212
+ goto yy95;
3213
+ } else {
3214
+ if (yych <= '/')
3215
+ goto yy94;
3216
+ if (yych <= '9')
3217
+ goto yy156;
3218
+ goto yy94;
3219
+ }
3220
+ } else {
3221
+ if (yych <= 'Z') {
3222
+ if (yych <= '>')
3223
+ goto yy99;
3224
+ if (yych <= '@')
3225
+ goto yy94;
3226
+ goto yy156;
3227
+ } else {
3228
+ if (yych <= '`')
3229
+ goto yy94;
3230
+ if (yych <= 'z')
3231
+ goto yy156;
3232
+ goto yy94;
3233
+ }
3234
+ }
3235
+ yy155:
3236
+ ++p;
3237
+ yych = *p;
3238
+ if (yych <= '9') {
3239
+ if (yych == '-')
3240
+ goto yy157;
3241
+ if (yych <= '/')
3242
+ goto yy94;
3243
+ goto yy158;
3244
+ } else {
3245
+ if (yych <= 'Z') {
3246
+ if (yych <= '@')
3247
+ goto yy94;
3248
+ goto yy158;
3249
+ } else {
3250
+ if (yych <= '`')
3251
+ goto yy94;
3252
+ if (yych <= 'z')
3253
+ goto yy158;
3254
+ goto yy94;
3255
+ }
3256
+ }
3257
+ yy156:
3258
+ ++p;
3259
+ yych = *p;
3260
+ if (yych <= '=') {
3261
+ if (yych <= '.') {
3262
+ if (yych <= ',')
3263
+ goto yy94;
3264
+ if (yych >= '.')
3265
+ goto yy95;
3266
+ } else {
3267
+ if (yych <= '/')
3268
+ goto yy94;
3269
+ if (yych <= '9')
3270
+ goto yy158;
3271
+ goto yy94;
3272
+ }
3273
+ } else {
3274
+ if (yych <= 'Z') {
3275
+ if (yych <= '>')
3276
+ goto yy99;
3277
+ if (yych <= '@')
3278
+ goto yy94;
3279
+ goto yy158;
3280
+ } else {
3281
+ if (yych <= '`')
3282
+ goto yy94;
3283
+ if (yych <= 'z')
3284
+ goto yy158;
3285
+ goto yy94;
3286
+ }
3287
+ }
3288
+ yy157:
3289
+ ++p;
3290
+ yych = *p;
3291
+ if (yych <= '9') {
3292
+ if (yych == '-')
3293
+ goto yy159;
3294
+ if (yych <= '/')
3295
+ goto yy94;
3296
+ goto yy160;
3297
+ } else {
3298
+ if (yych <= 'Z') {
3299
+ if (yych <= '@')
3300
+ goto yy94;
3301
+ goto yy160;
3302
+ } else {
3303
+ if (yych <= '`')
3304
+ goto yy94;
3305
+ if (yych <= 'z')
3306
+ goto yy160;
3307
+ goto yy94;
3308
+ }
3309
+ }
3310
+ yy158:
3311
+ ++p;
3312
+ yych = *p;
3313
+ if (yych <= '=') {
3314
+ if (yych <= '.') {
3315
+ if (yych <= ',')
3316
+ goto yy94;
3317
+ if (yych >= '.')
3318
+ goto yy95;
3319
+ } else {
3320
+ if (yych <= '/')
3321
+ goto yy94;
3322
+ if (yych <= '9')
3323
+ goto yy160;
3324
+ goto yy94;
3325
+ }
3326
+ } else {
3327
+ if (yych <= 'Z') {
3328
+ if (yych <= '>')
3329
+ goto yy99;
3330
+ if (yych <= '@')
3331
+ goto yy94;
3332
+ goto yy160;
3333
+ } else {
3334
+ if (yych <= '`')
3335
+ goto yy94;
3336
+ if (yych <= 'z')
3337
+ goto yy160;
3338
+ goto yy94;
3339
+ }
3340
+ }
3341
+ yy159:
3342
+ ++p;
3343
+ yych = *p;
3344
+ if (yych <= '9') {
3345
+ if (yych == '-')
3346
+ goto yy161;
3347
+ if (yych <= '/')
3348
+ goto yy94;
3349
+ goto yy162;
3350
+ } else {
3351
+ if (yych <= 'Z') {
3352
+ if (yych <= '@')
3353
+ goto yy94;
3354
+ goto yy162;
3355
+ } else {
3356
+ if (yych <= '`')
3357
+ goto yy94;
3358
+ if (yych <= 'z')
3359
+ goto yy162;
3360
+ goto yy94;
3361
+ }
3362
+ }
3363
+ yy160:
3364
+ ++p;
3365
+ yych = *p;
3366
+ if (yych <= '=') {
3367
+ if (yych <= '.') {
3368
+ if (yych <= ',')
3369
+ goto yy94;
3370
+ if (yych >= '.')
3371
+ goto yy95;
3372
+ } else {
3373
+ if (yych <= '/')
3374
+ goto yy94;
3375
+ if (yych <= '9')
3376
+ goto yy162;
3377
+ goto yy94;
3378
+ }
3379
+ } else {
3380
+ if (yych <= 'Z') {
3381
+ if (yych <= '>')
3382
+ goto yy99;
3383
+ if (yych <= '@')
3384
+ goto yy94;
3385
+ goto yy162;
3386
+ } else {
3387
+ if (yych <= '`')
3388
+ goto yy94;
3389
+ if (yych <= 'z')
3390
+ goto yy162;
3391
+ goto yy94;
3392
+ }
3393
+ }
3394
+ yy161:
3395
+ ++p;
3396
+ yych = *p;
3397
+ if (yych <= '9') {
3398
+ if (yych == '-')
3399
+ goto yy163;
3400
+ if (yych <= '/')
3401
+ goto yy94;
3402
+ goto yy164;
3403
+ } else {
3404
+ if (yych <= 'Z') {
3405
+ if (yych <= '@')
3406
+ goto yy94;
3407
+ goto yy164;
3408
+ } else {
3409
+ if (yych <= '`')
3410
+ goto yy94;
3411
+ if (yych <= 'z')
3412
+ goto yy164;
3413
+ goto yy94;
3414
+ }
3415
+ }
3416
+ yy162:
3417
+ ++p;
3418
+ yych = *p;
3419
+ if (yych <= '=') {
3420
+ if (yych <= '.') {
3421
+ if (yych <= ',')
3422
+ goto yy94;
3423
+ if (yych >= '.')
3424
+ goto yy95;
3425
+ } else {
3426
+ if (yych <= '/')
3427
+ goto yy94;
3428
+ if (yych <= '9')
3429
+ goto yy164;
3430
+ goto yy94;
3431
+ }
3432
+ } else {
3433
+ if (yych <= 'Z') {
3434
+ if (yych <= '>')
3435
+ goto yy99;
3436
+ if (yych <= '@')
3437
+ goto yy94;
3438
+ goto yy164;
3439
+ } else {
3440
+ if (yych <= '`')
3441
+ goto yy94;
3442
+ if (yych <= 'z')
3443
+ goto yy164;
3444
+ goto yy94;
3445
+ }
3446
+ }
3447
+ yy163:
3448
+ ++p;
3449
+ yych = *p;
3450
+ if (yych <= '9') {
3451
+ if (yych == '-')
3452
+ goto yy165;
3453
+ if (yych <= '/')
3454
+ goto yy94;
3455
+ goto yy166;
3456
+ } else {
3457
+ if (yych <= 'Z') {
3458
+ if (yych <= '@')
3459
+ goto yy94;
3460
+ goto yy166;
3461
+ } else {
3462
+ if (yych <= '`')
3463
+ goto yy94;
3464
+ if (yych <= 'z')
3465
+ goto yy166;
3466
+ goto yy94;
3467
+ }
3468
+ }
3469
+ yy164:
3470
+ ++p;
3471
+ yych = *p;
3472
+ if (yych <= '=') {
3473
+ if (yych <= '.') {
3474
+ if (yych <= ',')
3475
+ goto yy94;
3476
+ if (yych >= '.')
3477
+ goto yy95;
3478
+ } else {
3479
+ if (yych <= '/')
3480
+ goto yy94;
3481
+ if (yych <= '9')
3482
+ goto yy166;
3483
+ goto yy94;
3484
+ }
3485
+ } else {
3486
+ if (yych <= 'Z') {
3487
+ if (yych <= '>')
3488
+ goto yy99;
3489
+ if (yych <= '@')
3490
+ goto yy94;
3491
+ goto yy166;
3492
+ } else {
3493
+ if (yych <= '`')
3494
+ goto yy94;
3495
+ if (yych <= 'z')
3496
+ goto yy166;
3497
+ goto yy94;
3498
+ }
3499
+ }
3500
+ yy165:
3501
+ ++p;
3502
+ yych = *p;
3503
+ if (yych <= '9') {
3504
+ if (yych == '-')
3505
+ goto yy167;
3506
+ if (yych <= '/')
3507
+ goto yy94;
3508
+ goto yy168;
3509
+ } else {
3510
+ if (yych <= 'Z') {
3511
+ if (yych <= '@')
3512
+ goto yy94;
3513
+ goto yy168;
3514
+ } else {
3515
+ if (yych <= '`')
3516
+ goto yy94;
3517
+ if (yych <= 'z')
3518
+ goto yy168;
3519
+ goto yy94;
3520
+ }
3521
+ }
3522
+ yy166:
3523
+ ++p;
3524
+ yych = *p;
3525
+ if (yych <= '=') {
3526
+ if (yych <= '.') {
3527
+ if (yych <= ',')
3528
+ goto yy94;
3529
+ if (yych >= '.')
3530
+ goto yy95;
3531
+ } else {
3532
+ if (yych <= '/')
3533
+ goto yy94;
3534
+ if (yych <= '9')
3535
+ goto yy168;
3536
+ goto yy94;
3537
+ }
3538
+ } else {
3539
+ if (yych <= 'Z') {
3540
+ if (yych <= '>')
3541
+ goto yy99;
3542
+ if (yych <= '@')
3543
+ goto yy94;
3544
+ goto yy168;
3545
+ } else {
3546
+ if (yych <= '`')
3547
+ goto yy94;
3548
+ if (yych <= 'z')
3549
+ goto yy168;
3550
+ goto yy94;
3551
+ }
3552
+ }
3553
+ yy167:
3554
+ ++p;
3555
+ yych = *p;
3556
+ if (yych <= '9') {
3557
+ if (yych == '-')
3558
+ goto yy169;
3559
+ if (yych <= '/')
3560
+ goto yy94;
3561
+ goto yy170;
3562
+ } else {
3563
+ if (yych <= 'Z') {
3564
+ if (yych <= '@')
3565
+ goto yy94;
3566
+ goto yy170;
3567
+ } else {
3568
+ if (yych <= '`')
3569
+ goto yy94;
3570
+ if (yych <= 'z')
3571
+ goto yy170;
3572
+ goto yy94;
3573
+ }
3574
+ }
3575
+ yy168:
3576
+ ++p;
3577
+ yych = *p;
3578
+ if (yych <= '=') {
3579
+ if (yych <= '.') {
3580
+ if (yych <= ',')
3581
+ goto yy94;
3582
+ if (yych >= '.')
3583
+ goto yy95;
3584
+ } else {
3585
+ if (yych <= '/')
3586
+ goto yy94;
3587
+ if (yych <= '9')
3588
+ goto yy170;
3589
+ goto yy94;
3590
+ }
3591
+ } else {
3592
+ if (yych <= 'Z') {
3593
+ if (yych <= '>')
3594
+ goto yy99;
3595
+ if (yych <= '@')
3596
+ goto yy94;
3597
+ goto yy170;
3598
+ } else {
3599
+ if (yych <= '`')
3600
+ goto yy94;
3601
+ if (yych <= 'z')
3602
+ goto yy170;
3603
+ goto yy94;
3604
+ }
3605
+ }
3606
+ yy169:
3607
+ ++p;
3608
+ yych = *p;
3609
+ if (yych <= '9') {
3610
+ if (yych == '-')
3611
+ goto yy171;
3612
+ if (yych <= '/')
3613
+ goto yy94;
3614
+ goto yy172;
3615
+ } else {
3616
+ if (yych <= 'Z') {
3617
+ if (yych <= '@')
3618
+ goto yy94;
3619
+ goto yy172;
3620
+ } else {
3621
+ if (yych <= '`')
3622
+ goto yy94;
3623
+ if (yych <= 'z')
3624
+ goto yy172;
3625
+ goto yy94;
3626
+ }
3627
+ }
3628
+ yy170:
3629
+ ++p;
3630
+ yych = *p;
3631
+ if (yych <= '=') {
3632
+ if (yych <= '.') {
3633
+ if (yych <= ',')
3634
+ goto yy94;
3635
+ if (yych >= '.')
3636
+ goto yy95;
3637
+ } else {
3638
+ if (yych <= '/')
3639
+ goto yy94;
3640
+ if (yych <= '9')
3641
+ goto yy172;
3642
+ goto yy94;
3643
+ }
3644
+ } else {
3645
+ if (yych <= 'Z') {
3646
+ if (yych <= '>')
3647
+ goto yy99;
3648
+ if (yych <= '@')
3649
+ goto yy94;
3650
+ goto yy172;
3651
+ } else {
3652
+ if (yych <= '`')
3653
+ goto yy94;
3654
+ if (yych <= 'z')
3655
+ goto yy172;
3656
+ goto yy94;
3657
+ }
3658
+ }
3659
+ yy171:
3660
+ ++p;
3661
+ yych = *p;
3662
+ if (yych <= '9') {
3663
+ if (yych == '-')
3664
+ goto yy173;
3665
+ if (yych <= '/')
3666
+ goto yy94;
3667
+ goto yy174;
3668
+ } else {
3669
+ if (yych <= 'Z') {
3670
+ if (yych <= '@')
3671
+ goto yy94;
3672
+ goto yy174;
3673
+ } else {
3674
+ if (yych <= '`')
3675
+ goto yy94;
3676
+ if (yych <= 'z')
3677
+ goto yy174;
3678
+ goto yy94;
3679
+ }
3680
+ }
3681
+ yy172:
3682
+ ++p;
3683
+ yych = *p;
3684
+ if (yych <= '=') {
3685
+ if (yych <= '.') {
3686
+ if (yych <= ',')
3687
+ goto yy94;
3688
+ if (yych >= '.')
3689
+ goto yy95;
3690
+ } else {
3691
+ if (yych <= '/')
3692
+ goto yy94;
3693
+ if (yych <= '9')
3694
+ goto yy174;
3695
+ goto yy94;
3696
+ }
3697
+ } else {
3698
+ if (yych <= 'Z') {
3699
+ if (yych <= '>')
3700
+ goto yy99;
3701
+ if (yych <= '@')
3702
+ goto yy94;
3703
+ goto yy174;
3704
+ } else {
3705
+ if (yych <= '`')
3706
+ goto yy94;
3707
+ if (yych <= 'z')
3708
+ goto yy174;
3709
+ goto yy94;
3710
+ }
3711
+ }
3712
+ yy173:
3713
+ ++p;
3714
+ yych = *p;
3715
+ if (yych <= '9') {
3716
+ if (yych == '-')
3717
+ goto yy175;
3718
+ if (yych <= '/')
3719
+ goto yy94;
3720
+ goto yy176;
3721
+ } else {
3722
+ if (yych <= 'Z') {
3723
+ if (yych <= '@')
3724
+ goto yy94;
3725
+ goto yy176;
3726
+ } else {
3727
+ if (yych <= '`')
3728
+ goto yy94;
3729
+ if (yych <= 'z')
3730
+ goto yy176;
3731
+ goto yy94;
3732
+ }
3733
+ }
3734
+ yy174:
3735
+ ++p;
3736
+ yych = *p;
3737
+ if (yych <= '=') {
3738
+ if (yych <= '.') {
3739
+ if (yych <= ',')
3740
+ goto yy94;
3741
+ if (yych >= '.')
3742
+ goto yy95;
3743
+ } else {
3744
+ if (yych <= '/')
3745
+ goto yy94;
3746
+ if (yych <= '9')
3747
+ goto yy176;
3748
+ goto yy94;
3749
+ }
3750
+ } else {
3751
+ if (yych <= 'Z') {
3752
+ if (yych <= '>')
3753
+ goto yy99;
3754
+ if (yych <= '@')
3755
+ goto yy94;
3756
+ goto yy176;
3757
+ } else {
3758
+ if (yych <= '`')
3759
+ goto yy94;
3760
+ if (yych <= 'z')
3761
+ goto yy176;
3762
+ goto yy94;
3763
+ }
3764
+ }
3765
+ yy175:
3766
+ ++p;
3767
+ yych = *p;
3768
+ if (yych <= '9') {
3769
+ if (yych == '-')
3770
+ goto yy177;
3771
+ if (yych <= '/')
3772
+ goto yy94;
3773
+ goto yy178;
3774
+ } else {
3775
+ if (yych <= 'Z') {
3776
+ if (yych <= '@')
3777
+ goto yy94;
3778
+ goto yy178;
3779
+ } else {
3780
+ if (yych <= '`')
3781
+ goto yy94;
3782
+ if (yych <= 'z')
3783
+ goto yy178;
3784
+ goto yy94;
3785
+ }
3786
+ }
3787
+ yy176:
3788
+ ++p;
3789
+ yych = *p;
3790
+ if (yych <= '=') {
3791
+ if (yych <= '.') {
3792
+ if (yych <= ',')
3793
+ goto yy94;
3794
+ if (yych >= '.')
3795
+ goto yy95;
3796
+ } else {
3797
+ if (yych <= '/')
3798
+ goto yy94;
3799
+ if (yych <= '9')
3800
+ goto yy178;
3801
+ goto yy94;
3802
+ }
3803
+ } else {
3804
+ if (yych <= 'Z') {
3805
+ if (yych <= '>')
3806
+ goto yy99;
3807
+ if (yych <= '@')
3808
+ goto yy94;
3809
+ goto yy178;
3810
+ } else {
3811
+ if (yych <= '`')
3812
+ goto yy94;
3813
+ if (yych <= 'z')
3814
+ goto yy178;
3815
+ goto yy94;
3816
+ }
3817
+ }
3818
+ yy177:
3819
+ ++p;
3820
+ yych = *p;
3821
+ if (yych <= '9') {
3822
+ if (yych == '-')
3823
+ goto yy179;
3824
+ if (yych <= '/')
3825
+ goto yy94;
3826
+ goto yy180;
3827
+ } else {
3828
+ if (yych <= 'Z') {
3829
+ if (yych <= '@')
3830
+ goto yy94;
3831
+ goto yy180;
3832
+ } else {
3833
+ if (yych <= '`')
3834
+ goto yy94;
3835
+ if (yych <= 'z')
3836
+ goto yy180;
3837
+ goto yy94;
3838
+ }
3839
+ }
3840
+ yy178:
3841
+ ++p;
3842
+ yych = *p;
3843
+ if (yych <= '=') {
3844
+ if (yych <= '.') {
3845
+ if (yych <= ',')
3846
+ goto yy94;
3847
+ if (yych >= '.')
3848
+ goto yy95;
3849
+ } else {
3850
+ if (yych <= '/')
3851
+ goto yy94;
3852
+ if (yych <= '9')
3853
+ goto yy180;
3854
+ goto yy94;
3855
+ }
3856
+ } else {
3857
+ if (yych <= 'Z') {
3858
+ if (yych <= '>')
3859
+ goto yy99;
3860
+ if (yych <= '@')
3861
+ goto yy94;
3862
+ goto yy180;
3863
+ } else {
3864
+ if (yych <= '`')
3865
+ goto yy94;
3866
+ if (yych <= 'z')
3867
+ goto yy180;
3868
+ goto yy94;
3869
+ }
3870
+ }
3871
+ yy179:
3872
+ ++p;
3873
+ yych = *p;
3874
+ if (yych <= '9') {
3875
+ if (yych == '-')
3876
+ goto yy181;
3877
+ if (yych <= '/')
3878
+ goto yy94;
3879
+ goto yy182;
3880
+ } else {
3881
+ if (yych <= 'Z') {
3882
+ if (yych <= '@')
3883
+ goto yy94;
3884
+ goto yy182;
3885
+ } else {
3886
+ if (yych <= '`')
3887
+ goto yy94;
3888
+ if (yych <= 'z')
3889
+ goto yy182;
3890
+ goto yy94;
3891
+ }
3892
+ }
3893
+ yy180:
3894
+ ++p;
3895
+ yych = *p;
3896
+ if (yych <= '=') {
3897
+ if (yych <= '.') {
3898
+ if (yych <= ',')
3899
+ goto yy94;
3900
+ if (yych >= '.')
3901
+ goto yy95;
3902
+ } else {
3903
+ if (yych <= '/')
3904
+ goto yy94;
3905
+ if (yych <= '9')
3906
+ goto yy182;
3907
+ goto yy94;
3908
+ }
3909
+ } else {
3910
+ if (yych <= 'Z') {
3911
+ if (yych <= '>')
3912
+ goto yy99;
3913
+ if (yych <= '@')
3914
+ goto yy94;
3915
+ goto yy182;
3916
+ } else {
3917
+ if (yych <= '`')
3918
+ goto yy94;
3919
+ if (yych <= 'z')
3920
+ goto yy182;
3921
+ goto yy94;
3922
+ }
3923
+ }
3924
+ yy181:
3925
+ ++p;
3926
+ yych = *p;
3927
+ if (yych <= '9') {
3928
+ if (yych == '-')
3929
+ goto yy183;
3930
+ if (yych <= '/')
3931
+ goto yy94;
3932
+ goto yy184;
3933
+ } else {
3934
+ if (yych <= 'Z') {
3935
+ if (yych <= '@')
3936
+ goto yy94;
3937
+ goto yy184;
3938
+ } else {
3939
+ if (yych <= '`')
3940
+ goto yy94;
3941
+ if (yych <= 'z')
3942
+ goto yy184;
3943
+ goto yy94;
3944
+ }
3945
+ }
3946
+ yy182:
3947
+ ++p;
3948
+ yych = *p;
3949
+ if (yych <= '=') {
3950
+ if (yych <= '.') {
3951
+ if (yych <= ',')
3952
+ goto yy94;
3953
+ if (yych >= '.')
3954
+ goto yy95;
3955
+ } else {
3956
+ if (yych <= '/')
3957
+ goto yy94;
3958
+ if (yych <= '9')
3959
+ goto yy184;
3960
+ goto yy94;
3961
+ }
3962
+ } else {
3963
+ if (yych <= 'Z') {
3964
+ if (yych <= '>')
3965
+ goto yy99;
3966
+ if (yych <= '@')
3967
+ goto yy94;
3968
+ goto yy184;
3969
+ } else {
3970
+ if (yych <= '`')
3971
+ goto yy94;
3972
+ if (yych <= 'z')
3973
+ goto yy184;
3974
+ goto yy94;
3975
+ }
3976
+ }
3977
+ yy183:
3978
+ ++p;
3979
+ yych = *p;
3980
+ if (yych <= '9') {
3981
+ if (yych == '-')
3982
+ goto yy185;
3983
+ if (yych <= '/')
3984
+ goto yy94;
3985
+ goto yy186;
3986
+ } else {
3987
+ if (yych <= 'Z') {
3988
+ if (yych <= '@')
3989
+ goto yy94;
3990
+ goto yy186;
3991
+ } else {
3992
+ if (yych <= '`')
3993
+ goto yy94;
3994
+ if (yych <= 'z')
3995
+ goto yy186;
3996
+ goto yy94;
3997
+ }
3998
+ }
3999
+ yy184:
4000
+ ++p;
4001
+ yych = *p;
4002
+ if (yych <= '=') {
4003
+ if (yych <= '.') {
4004
+ if (yych <= ',')
4005
+ goto yy94;
4006
+ if (yych >= '.')
4007
+ goto yy95;
4008
+ } else {
4009
+ if (yych <= '/')
4010
+ goto yy94;
4011
+ if (yych <= '9')
4012
+ goto yy186;
4013
+ goto yy94;
4014
+ }
4015
+ } else {
4016
+ if (yych <= 'Z') {
4017
+ if (yych <= '>')
4018
+ goto yy99;
4019
+ if (yych <= '@')
4020
+ goto yy94;
4021
+ goto yy186;
4022
+ } else {
4023
+ if (yych <= '`')
4024
+ goto yy94;
4025
+ if (yych <= 'z')
4026
+ goto yy186;
4027
+ goto yy94;
4028
+ }
4029
+ }
4030
+ yy185:
4031
+ ++p;
4032
+ yych = *p;
4033
+ if (yych <= '9') {
4034
+ if (yych == '-')
4035
+ goto yy187;
4036
+ if (yych <= '/')
4037
+ goto yy94;
4038
+ goto yy188;
4039
+ } else {
4040
+ if (yych <= 'Z') {
4041
+ if (yych <= '@')
4042
+ goto yy94;
4043
+ goto yy188;
4044
+ } else {
4045
+ if (yych <= '`')
4046
+ goto yy94;
4047
+ if (yych <= 'z')
4048
+ goto yy188;
4049
+ goto yy94;
4050
+ }
4051
+ }
4052
+ yy186:
4053
+ ++p;
4054
+ yych = *p;
4055
+ if (yych <= '=') {
4056
+ if (yych <= '.') {
4057
+ if (yych <= ',')
4058
+ goto yy94;
4059
+ if (yych >= '.')
4060
+ goto yy95;
4061
+ } else {
4062
+ if (yych <= '/')
4063
+ goto yy94;
4064
+ if (yych <= '9')
4065
+ goto yy188;
4066
+ goto yy94;
4067
+ }
4068
+ } else {
4069
+ if (yych <= 'Z') {
4070
+ if (yych <= '>')
4071
+ goto yy99;
4072
+ if (yych <= '@')
4073
+ goto yy94;
4074
+ goto yy188;
4075
+ } else {
4076
+ if (yych <= '`')
4077
+ goto yy94;
4078
+ if (yych <= 'z')
4079
+ goto yy188;
4080
+ goto yy94;
4081
+ }
4082
+ }
4083
+ yy187:
4084
+ ++p;
4085
+ yych = *p;
4086
+ if (yych <= '9') {
4087
+ if (yych == '-')
4088
+ goto yy189;
4089
+ if (yych <= '/')
4090
+ goto yy94;
4091
+ goto yy190;
4092
+ } else {
4093
+ if (yych <= 'Z') {
4094
+ if (yych <= '@')
4095
+ goto yy94;
4096
+ goto yy190;
4097
+ } else {
4098
+ if (yych <= '`')
4099
+ goto yy94;
4100
+ if (yych <= 'z')
4101
+ goto yy190;
4102
+ goto yy94;
4103
+ }
4104
+ }
4105
+ yy188:
4106
+ ++p;
4107
+ yych = *p;
4108
+ if (yych <= '=') {
4109
+ if (yych <= '.') {
4110
+ if (yych <= ',')
4111
+ goto yy94;
4112
+ if (yych >= '.')
4113
+ goto yy95;
4114
+ } else {
4115
+ if (yych <= '/')
4116
+ goto yy94;
4117
+ if (yych <= '9')
4118
+ goto yy190;
4119
+ goto yy94;
4120
+ }
4121
+ } else {
4122
+ if (yych <= 'Z') {
4123
+ if (yych <= '>')
4124
+ goto yy99;
4125
+ if (yych <= '@')
4126
+ goto yy94;
4127
+ goto yy190;
4128
+ } else {
4129
+ if (yych <= '`')
4130
+ goto yy94;
4131
+ if (yych <= 'z')
4132
+ goto yy190;
4133
+ goto yy94;
4134
+ }
4135
+ }
4136
+ yy189:
4137
+ ++p;
4138
+ yych = *p;
4139
+ if (yych <= '9') {
4140
+ if (yych == '-')
4141
+ goto yy191;
4142
+ if (yych <= '/')
4143
+ goto yy94;
4144
+ goto yy192;
4145
+ } else {
4146
+ if (yych <= 'Z') {
4147
+ if (yych <= '@')
4148
+ goto yy94;
4149
+ goto yy192;
4150
+ } else {
4151
+ if (yych <= '`')
4152
+ goto yy94;
4153
+ if (yych <= 'z')
4154
+ goto yy192;
4155
+ goto yy94;
4156
+ }
4157
+ }
4158
+ yy190:
4159
+ ++p;
4160
+ yych = *p;
4161
+ if (yych <= '=') {
4162
+ if (yych <= '.') {
4163
+ if (yych <= ',')
4164
+ goto yy94;
4165
+ if (yych >= '.')
4166
+ goto yy95;
4167
+ } else {
4168
+ if (yych <= '/')
4169
+ goto yy94;
4170
+ if (yych <= '9')
4171
+ goto yy192;
4172
+ goto yy94;
4173
+ }
4174
+ } else {
4175
+ if (yych <= 'Z') {
4176
+ if (yych <= '>')
4177
+ goto yy99;
4178
+ if (yych <= '@')
4179
+ goto yy94;
4180
+ goto yy192;
4181
+ } else {
4182
+ if (yych <= '`')
4183
+ goto yy94;
4184
+ if (yych <= 'z')
4185
+ goto yy192;
4186
+ goto yy94;
4187
+ }
4188
+ }
4189
+ yy191:
4190
+ ++p;
4191
+ yych = *p;
4192
+ if (yych <= '9') {
4193
+ if (yych == '-')
4194
+ goto yy193;
4195
+ if (yych <= '/')
4196
+ goto yy94;
4197
+ goto yy194;
4198
+ } else {
4199
+ if (yych <= 'Z') {
4200
+ if (yych <= '@')
4201
+ goto yy94;
4202
+ goto yy194;
4203
+ } else {
4204
+ if (yych <= '`')
4205
+ goto yy94;
4206
+ if (yych <= 'z')
4207
+ goto yy194;
4208
+ goto yy94;
4209
+ }
4210
+ }
4211
+ yy192:
4212
+ ++p;
4213
+ yych = *p;
4214
+ if (yych <= '=') {
4215
+ if (yych <= '.') {
4216
+ if (yych <= ',')
4217
+ goto yy94;
4218
+ if (yych >= '.')
4219
+ goto yy95;
4220
+ } else {
4221
+ if (yych <= '/')
4222
+ goto yy94;
4223
+ if (yych <= '9')
4224
+ goto yy194;
4225
+ goto yy94;
4226
+ }
4227
+ } else {
4228
+ if (yych <= 'Z') {
4229
+ if (yych <= '>')
4230
+ goto yy99;
4231
+ if (yych <= '@')
4232
+ goto yy94;
4233
+ goto yy194;
4234
+ } else {
4235
+ if (yych <= '`')
4236
+ goto yy94;
4237
+ if (yych <= 'z')
4238
+ goto yy194;
4239
+ goto yy94;
4240
+ }
4241
+ }
4242
+ yy193:
4243
+ ++p;
4244
+ yych = *p;
4245
+ if (yych <= '9') {
4246
+ if (yych == '-')
4247
+ goto yy195;
4248
+ if (yych <= '/')
4249
+ goto yy94;
4250
+ goto yy196;
4251
+ } else {
4252
+ if (yych <= 'Z') {
4253
+ if (yych <= '@')
4254
+ goto yy94;
4255
+ goto yy196;
4256
+ } else {
4257
+ if (yych <= '`')
4258
+ goto yy94;
4259
+ if (yych <= 'z')
4260
+ goto yy196;
4261
+ goto yy94;
4262
+ }
4263
+ }
4264
+ yy194:
4265
+ ++p;
4266
+ yych = *p;
4267
+ if (yych <= '=') {
4268
+ if (yych <= '.') {
4269
+ if (yych <= ',')
4270
+ goto yy94;
4271
+ if (yych >= '.')
4272
+ goto yy95;
4273
+ } else {
4274
+ if (yych <= '/')
4275
+ goto yy94;
4276
+ if (yych <= '9')
4277
+ goto yy196;
4278
+ goto yy94;
4279
+ }
4280
+ } else {
4281
+ if (yych <= 'Z') {
4282
+ if (yych <= '>')
4283
+ goto yy99;
4284
+ if (yych <= '@')
4285
+ goto yy94;
4286
+ goto yy196;
4287
+ } else {
4288
+ if (yych <= '`')
4289
+ goto yy94;
4290
+ if (yych <= 'z')
4291
+ goto yy196;
4292
+ goto yy94;
4293
+ }
4294
+ }
4295
+ yy195:
4296
+ ++p;
4297
+ yych = *p;
4298
+ if (yych <= '9') {
4299
+ if (yych == '-')
4300
+ goto yy197;
4301
+ if (yych <= '/')
4302
+ goto yy94;
4303
+ goto yy198;
4304
+ } else {
4305
+ if (yych <= 'Z') {
4306
+ if (yych <= '@')
4307
+ goto yy94;
4308
+ goto yy198;
4309
+ } else {
4310
+ if (yych <= '`')
4311
+ goto yy94;
4312
+ if (yych <= 'z')
4313
+ goto yy198;
4314
+ goto yy94;
4315
+ }
4316
+ }
4317
+ yy196:
4318
+ ++p;
4319
+ yych = *p;
4320
+ if (yych <= '=') {
4321
+ if (yych <= '.') {
4322
+ if (yych <= ',')
4323
+ goto yy94;
4324
+ if (yych >= '.')
4325
+ goto yy95;
4326
+ } else {
4327
+ if (yych <= '/')
4328
+ goto yy94;
4329
+ if (yych <= '9')
4330
+ goto yy198;
4331
+ goto yy94;
4332
+ }
4333
+ } else {
4334
+ if (yych <= 'Z') {
4335
+ if (yych <= '>')
4336
+ goto yy99;
4337
+ if (yych <= '@')
4338
+ goto yy94;
4339
+ goto yy198;
4340
+ } else {
4341
+ if (yych <= '`')
4342
+ goto yy94;
4343
+ if (yych <= 'z')
4344
+ goto yy198;
4345
+ goto yy94;
4346
+ }
4347
+ }
4348
+ yy197:
4349
+ ++p;
4350
+ yych = *p;
4351
+ if (yych <= '9') {
4352
+ if (yych == '-')
4353
+ goto yy199;
4354
+ if (yych <= '/')
4355
+ goto yy94;
4356
+ goto yy200;
4357
+ } else {
4358
+ if (yych <= 'Z') {
4359
+ if (yych <= '@')
4360
+ goto yy94;
4361
+ goto yy200;
4362
+ } else {
4363
+ if (yych <= '`')
4364
+ goto yy94;
4365
+ if (yych <= 'z')
4366
+ goto yy200;
4367
+ goto yy94;
4368
+ }
4369
+ }
4370
+ yy198:
4371
+ ++p;
4372
+ yych = *p;
4373
+ if (yych <= '=') {
4374
+ if (yych <= '.') {
4375
+ if (yych <= ',')
4376
+ goto yy94;
4377
+ if (yych >= '.')
4378
+ goto yy95;
4379
+ } else {
4380
+ if (yych <= '/')
4381
+ goto yy94;
4382
+ if (yych <= '9')
4383
+ goto yy200;
4384
+ goto yy94;
4385
+ }
4386
+ } else {
4387
+ if (yych <= 'Z') {
4388
+ if (yych <= '>')
4389
+ goto yy99;
4390
+ if (yych <= '@')
4391
+ goto yy94;
4392
+ goto yy200;
4393
+ } else {
4394
+ if (yych <= '`')
4395
+ goto yy94;
4396
+ if (yych <= 'z')
4397
+ goto yy200;
4398
+ goto yy94;
4399
+ }
4400
+ }
4401
+ yy199:
4402
+ ++p;
4403
+ yych = *p;
4404
+ if (yych <= '9') {
4405
+ if (yych == '-')
4406
+ goto yy201;
4407
+ if (yych <= '/')
4408
+ goto yy94;
4409
+ goto yy202;
4410
+ } else {
4411
+ if (yych <= 'Z') {
4412
+ if (yych <= '@')
4413
+ goto yy94;
4414
+ goto yy202;
4415
+ } else {
4416
+ if (yych <= '`')
4417
+ goto yy94;
4418
+ if (yych <= 'z')
4419
+ goto yy202;
4420
+ goto yy94;
4421
+ }
4422
+ }
4423
+ yy200:
4424
+ ++p;
4425
+ yych = *p;
4426
+ if (yych <= '=') {
4427
+ if (yych <= '.') {
4428
+ if (yych <= ',')
4429
+ goto yy94;
4430
+ if (yych >= '.')
4431
+ goto yy95;
4432
+ } else {
4433
+ if (yych <= '/')
4434
+ goto yy94;
4435
+ if (yych <= '9')
4436
+ goto yy202;
4437
+ goto yy94;
4438
+ }
4439
+ } else {
4440
+ if (yych <= 'Z') {
4441
+ if (yych <= '>')
4442
+ goto yy99;
4443
+ if (yych <= '@')
4444
+ goto yy94;
4445
+ goto yy202;
4446
+ } else {
4447
+ if (yych <= '`')
4448
+ goto yy94;
4449
+ if (yych <= 'z')
4450
+ goto yy202;
4451
+ goto yy94;
4452
+ }
4453
+ }
4454
+ yy201:
4455
+ ++p;
4456
+ yych = *p;
4457
+ if (yych <= '9') {
4458
+ if (yych == '-')
4459
+ goto yy203;
4460
+ if (yych <= '/')
4461
+ goto yy94;
4462
+ goto yy204;
4463
+ } else {
4464
+ if (yych <= 'Z') {
4465
+ if (yych <= '@')
4466
+ goto yy94;
4467
+ goto yy204;
4468
+ } else {
4469
+ if (yych <= '`')
4470
+ goto yy94;
4471
+ if (yych <= 'z')
4472
+ goto yy204;
4473
+ goto yy94;
4474
+ }
4475
+ }
4476
+ yy202:
4477
+ ++p;
4478
+ yych = *p;
4479
+ if (yych <= '=') {
4480
+ if (yych <= '.') {
4481
+ if (yych <= ',')
4482
+ goto yy94;
4483
+ if (yych >= '.')
4484
+ goto yy95;
4485
+ } else {
4486
+ if (yych <= '/')
4487
+ goto yy94;
4488
+ if (yych <= '9')
4489
+ goto yy204;
4490
+ goto yy94;
4491
+ }
4492
+ } else {
4493
+ if (yych <= 'Z') {
4494
+ if (yych <= '>')
4495
+ goto yy99;
4496
+ if (yych <= '@')
4497
+ goto yy94;
4498
+ goto yy204;
4499
+ } else {
4500
+ if (yych <= '`')
4501
+ goto yy94;
4502
+ if (yych <= 'z')
4503
+ goto yy204;
4504
+ goto yy94;
4505
+ }
4506
+ }
4507
+ yy203:
4508
+ ++p;
4509
+ yych = *p;
4510
+ if (yych <= '9') {
4511
+ if (yych == '-')
4512
+ goto yy205;
4513
+ if (yych <= '/')
4514
+ goto yy94;
4515
+ goto yy206;
4516
+ } else {
4517
+ if (yych <= 'Z') {
4518
+ if (yych <= '@')
4519
+ goto yy94;
4520
+ goto yy206;
4521
+ } else {
4522
+ if (yych <= '`')
4523
+ goto yy94;
4524
+ if (yych <= 'z')
4525
+ goto yy206;
4526
+ goto yy94;
4527
+ }
4528
+ }
4529
+ yy204:
4530
+ ++p;
4531
+ yych = *p;
4532
+ if (yych <= '=') {
4533
+ if (yych <= '.') {
4534
+ if (yych <= ',')
4535
+ goto yy94;
4536
+ if (yych >= '.')
4537
+ goto yy95;
4538
+ } else {
4539
+ if (yych <= '/')
4540
+ goto yy94;
4541
+ if (yych <= '9')
4542
+ goto yy206;
4543
+ goto yy94;
4544
+ }
4545
+ } else {
4546
+ if (yych <= 'Z') {
4547
+ if (yych <= '>')
4548
+ goto yy99;
4549
+ if (yych <= '@')
4550
+ goto yy94;
4551
+ goto yy206;
4552
+ } else {
4553
+ if (yych <= '`')
4554
+ goto yy94;
4555
+ if (yych <= 'z')
4556
+ goto yy206;
4557
+ goto yy94;
4558
+ }
4559
+ }
4560
+ yy205:
4561
+ ++p;
4562
+ yych = *p;
4563
+ if (yych <= '9') {
4564
+ if (yych == '-')
4565
+ goto yy207;
4566
+ if (yych <= '/')
4567
+ goto yy94;
4568
+ goto yy208;
4569
+ } else {
4570
+ if (yych <= 'Z') {
4571
+ if (yych <= '@')
4572
+ goto yy94;
4573
+ goto yy208;
4574
+ } else {
4575
+ if (yych <= '`')
4576
+ goto yy94;
4577
+ if (yych <= 'z')
4578
+ goto yy208;
4579
+ goto yy94;
4580
+ }
4581
+ }
4582
+ yy206:
4583
+ ++p;
4584
+ yych = *p;
4585
+ if (yych <= '=') {
4586
+ if (yych <= '.') {
4587
+ if (yych <= ',')
4588
+ goto yy94;
4589
+ if (yych >= '.')
4590
+ goto yy95;
4591
+ } else {
4592
+ if (yych <= '/')
4593
+ goto yy94;
4594
+ if (yych <= '9')
4595
+ goto yy208;
4596
+ goto yy94;
4597
+ }
4598
+ } else {
4599
+ if (yych <= 'Z') {
4600
+ if (yych <= '>')
4601
+ goto yy99;
4602
+ if (yych <= '@')
4603
+ goto yy94;
4604
+ goto yy208;
4605
+ } else {
4606
+ if (yych <= '`')
4607
+ goto yy94;
4608
+ if (yych <= 'z')
4609
+ goto yy208;
4610
+ goto yy94;
4611
+ }
4612
+ }
4613
+ yy207:
4614
+ ++p;
4615
+ yych = *p;
4616
+ if (yych <= '9') {
4617
+ if (yych == '-')
4618
+ goto yy209;
4619
+ if (yych <= '/')
4620
+ goto yy94;
4621
+ goto yy210;
4622
+ } else {
4623
+ if (yych <= 'Z') {
4624
+ if (yych <= '@')
4625
+ goto yy94;
4626
+ goto yy210;
4627
+ } else {
4628
+ if (yych <= '`')
4629
+ goto yy94;
4630
+ if (yych <= 'z')
4631
+ goto yy210;
4632
+ goto yy94;
4633
+ }
4634
+ }
4635
+ yy208:
4636
+ ++p;
4637
+ yych = *p;
4638
+ if (yych <= '=') {
4639
+ if (yych <= '.') {
4640
+ if (yych <= ',')
4641
+ goto yy94;
4642
+ if (yych >= '.')
4643
+ goto yy95;
4644
+ } else {
4645
+ if (yych <= '/')
4646
+ goto yy94;
4647
+ if (yych <= '9')
4648
+ goto yy210;
4649
+ goto yy94;
4650
+ }
4651
+ } else {
4652
+ if (yych <= 'Z') {
4653
+ if (yych <= '>')
4654
+ goto yy99;
4655
+ if (yych <= '@')
4656
+ goto yy94;
4657
+ goto yy210;
4658
+ } else {
4659
+ if (yych <= '`')
4660
+ goto yy94;
4661
+ if (yych <= 'z')
4662
+ goto yy210;
4663
+ goto yy94;
4664
+ }
4665
+ }
4666
+ yy209:
4667
+ ++p;
4668
+ yych = *p;
4669
+ if (yych <= '9') {
4670
+ if (yych == '-')
4671
+ goto yy211;
4672
+ if (yych <= '/')
4673
+ goto yy94;
4674
+ goto yy212;
4675
+ } else {
4676
+ if (yych <= 'Z') {
4677
+ if (yych <= '@')
4678
+ goto yy94;
4679
+ goto yy212;
4680
+ } else {
4681
+ if (yych <= '`')
4682
+ goto yy94;
4683
+ if (yych <= 'z')
4684
+ goto yy212;
4685
+ goto yy94;
4686
+ }
4687
+ }
4688
+ yy210:
4689
+ ++p;
4690
+ yych = *p;
4691
+ if (yych <= '=') {
4692
+ if (yych <= '.') {
4693
+ if (yych <= ',')
4694
+ goto yy94;
4695
+ if (yych >= '.')
4696
+ goto yy95;
4697
+ } else {
4698
+ if (yych <= '/')
4699
+ goto yy94;
4700
+ if (yych <= '9')
4701
+ goto yy212;
4702
+ goto yy94;
4703
+ }
4704
+ } else {
4705
+ if (yych <= 'Z') {
4706
+ if (yych <= '>')
4707
+ goto yy99;
4708
+ if (yych <= '@')
4709
+ goto yy94;
4710
+ goto yy212;
4711
+ } else {
4712
+ if (yych <= '`')
4713
+ goto yy94;
4714
+ if (yych <= 'z')
4715
+ goto yy212;
4716
+ goto yy94;
4717
+ }
4718
+ }
4719
+ yy211:
4720
+ ++p;
4721
+ yych = *p;
4722
+ if (yych <= '9') {
4723
+ if (yych == '-')
4724
+ goto yy213;
4725
+ if (yych <= '/')
4726
+ goto yy94;
4727
+ goto yy214;
4728
+ } else {
4729
+ if (yych <= 'Z') {
4730
+ if (yych <= '@')
4731
+ goto yy94;
4732
+ goto yy214;
4733
+ } else {
4734
+ if (yych <= '`')
4735
+ goto yy94;
4736
+ if (yych <= 'z')
4737
+ goto yy214;
4738
+ goto yy94;
4739
+ }
4740
+ }
4741
+ yy212:
4742
+ ++p;
4743
+ yych = *p;
4744
+ if (yych <= '=') {
4745
+ if (yych <= '.') {
4746
+ if (yych <= ',')
4747
+ goto yy94;
4748
+ if (yych >= '.')
4749
+ goto yy95;
4750
+ } else {
4751
+ if (yych <= '/')
4752
+ goto yy94;
4753
+ if (yych <= '9')
4754
+ goto yy214;
4755
+ goto yy94;
4756
+ }
4757
+ } else {
4758
+ if (yych <= 'Z') {
4759
+ if (yych <= '>')
4760
+ goto yy99;
4761
+ if (yych <= '@')
4762
+ goto yy94;
4763
+ goto yy214;
4764
+ } else {
4765
+ if (yych <= '`')
4766
+ goto yy94;
4767
+ if (yych <= 'z')
4768
+ goto yy214;
4769
+ goto yy94;
4770
+ }
4771
+ }
4772
+ yy213:
4773
+ ++p;
4774
+ yych = *p;
4775
+ if (yych <= '9') {
4776
+ if (yych == '-')
4777
+ goto yy215;
4778
+ if (yych <= '/')
4779
+ goto yy94;
4780
+ goto yy216;
4781
+ } else {
4782
+ if (yych <= 'Z') {
4783
+ if (yych <= '@')
4784
+ goto yy94;
4785
+ goto yy216;
4786
+ } else {
4787
+ if (yych <= '`')
4788
+ goto yy94;
4789
+ if (yych <= 'z')
4790
+ goto yy216;
4791
+ goto yy94;
4792
+ }
4793
+ }
4794
+ yy214:
4795
+ ++p;
4796
+ yych = *p;
4797
+ if (yych <= '=') {
4798
+ if (yych <= '.') {
4799
+ if (yych <= ',')
4800
+ goto yy94;
4801
+ if (yych >= '.')
4802
+ goto yy95;
4803
+ } else {
4804
+ if (yych <= '/')
4805
+ goto yy94;
4806
+ if (yych <= '9')
4807
+ goto yy216;
4808
+ goto yy94;
4809
+ }
4810
+ } else {
4811
+ if (yych <= 'Z') {
4812
+ if (yych <= '>')
4813
+ goto yy99;
4814
+ if (yych <= '@')
4815
+ goto yy94;
4816
+ goto yy216;
4817
+ } else {
4818
+ if (yych <= '`')
4819
+ goto yy94;
4820
+ if (yych <= 'z')
4821
+ goto yy216;
4822
+ goto yy94;
4823
+ }
4824
+ }
4825
+ yy215:
4826
+ ++p;
4827
+ yych = *p;
4828
+ if (yych <= '9') {
4829
+ if (yych == '-')
4830
+ goto yy217;
4831
+ if (yych <= '/')
4832
+ goto yy94;
4833
+ goto yy218;
4834
+ } else {
4835
+ if (yych <= 'Z') {
4836
+ if (yych <= '@')
4837
+ goto yy94;
4838
+ goto yy218;
4839
+ } else {
4840
+ if (yych <= '`')
4841
+ goto yy94;
4842
+ if (yych <= 'z')
4843
+ goto yy218;
4844
+ goto yy94;
4845
+ }
4846
+ }
4847
+ yy216:
4848
+ ++p;
4849
+ yych = *p;
4850
+ if (yych <= '=') {
4851
+ if (yych <= '.') {
4852
+ if (yych <= ',')
4853
+ goto yy94;
4854
+ if (yych >= '.')
4855
+ goto yy95;
4856
+ } else {
4857
+ if (yych <= '/')
4858
+ goto yy94;
4859
+ if (yych <= '9')
4860
+ goto yy218;
4861
+ goto yy94;
4862
+ }
4863
+ } else {
4864
+ if (yych <= 'Z') {
4865
+ if (yych <= '>')
4866
+ goto yy99;
4867
+ if (yych <= '@')
4868
+ goto yy94;
4869
+ goto yy218;
4870
+ } else {
4871
+ if (yych <= '`')
4872
+ goto yy94;
4873
+ if (yych <= 'z')
4874
+ goto yy218;
4875
+ goto yy94;
4876
+ }
4877
+ }
4878
+ yy217:
4879
+ ++p;
4880
+ yych = *p;
4881
+ if (yych <= '9') {
4882
+ if (yych == '-')
4883
+ goto yy219;
4884
+ if (yych <= '/')
4885
+ goto yy94;
4886
+ goto yy220;
4887
+ } else {
4888
+ if (yych <= 'Z') {
4889
+ if (yych <= '@')
4890
+ goto yy94;
4891
+ goto yy220;
4892
+ } else {
4893
+ if (yych <= '`')
4894
+ goto yy94;
4895
+ if (yych <= 'z')
4896
+ goto yy220;
4897
+ goto yy94;
4898
+ }
4899
+ }
4900
+ yy218:
4901
+ ++p;
4902
+ yych = *p;
4903
+ if (yych <= '=') {
4904
+ if (yych <= '.') {
4905
+ if (yych <= ',')
4906
+ goto yy94;
4907
+ if (yych >= '.')
4908
+ goto yy95;
4909
+ } else {
4910
+ if (yych <= '/')
4911
+ goto yy94;
4912
+ if (yych <= '9')
4913
+ goto yy220;
4914
+ goto yy94;
4915
+ }
4916
+ } else {
4917
+ if (yych <= 'Z') {
4918
+ if (yych <= '>')
4919
+ goto yy99;
4920
+ if (yych <= '@')
4921
+ goto yy94;
4922
+ goto yy220;
4923
+ } else {
4924
+ if (yych <= '`')
4925
+ goto yy94;
4926
+ if (yych <= 'z')
4927
+ goto yy220;
4928
+ goto yy94;
4929
+ }
4930
+ }
4931
+ yy219:
4932
+ ++p;
4933
+ yych = *p;
4934
+ if (yych <= '@') {
4935
+ if (yych <= '/')
4936
+ goto yy94;
4937
+ if (yych <= '9')
4938
+ goto yy221;
4939
+ goto yy94;
4940
+ } else {
4941
+ if (yych <= 'Z')
4942
+ goto yy221;
4943
+ if (yych <= '`')
4944
+ goto yy94;
4945
+ if (yych <= 'z')
4946
+ goto yy221;
4947
+ goto yy94;
4948
+ }
4949
+ yy220:
4950
+ ++p;
4951
+ yych = *p;
4952
+ if (yych <= '=') {
4953
+ if (yych <= '.') {
4954
+ if (yych <= '-')
4955
+ goto yy94;
4956
+ goto yy95;
4957
+ } else {
4958
+ if (yych <= '/')
4959
+ goto yy94;
4960
+ if (yych >= ':')
4961
+ goto yy94;
4962
+ }
4963
+ } else {
4964
+ if (yych <= 'Z') {
4965
+ if (yych <= '>')
4966
+ goto yy99;
4967
+ if (yych <= '@')
4968
+ goto yy94;
4969
+ } else {
4970
+ if (yych <= '`')
4971
+ goto yy94;
4972
+ if (yych >= '{')
4973
+ goto yy94;
4974
+ }
4975
+ }
4976
+ yy221:
4977
+ ++p;
4978
+ yych = *p;
4979
+ if (yych == '.')
4980
+ goto yy95;
4981
+ if (yych == '>')
4982
+ goto yy99;
4983
+ goto yy94;
4984
+ }
4985
+}
4986
+
4987
+// Try to match an HTML tag after first <, returning num of chars matched.
4988
+bufsize_t _scan_html_tag(const unsigned char *p) {
4989
+ const unsigned char *marker = NULL;
4990
+ const unsigned char *start = p;
4991
+
4992
+ {
4993
+ unsigned char yych;
4994
+ static const unsigned char yybm[] = {
4995
+ /* table 1 .. 8: 0 */
4996
+ 0, 250, 250, 250, 250, 250, 250, 250, 250, 235, 235, 235, 235, 235, 250,
4997
+ 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
4998
+ 250, 250, 250, 235, 250, 202, 250, 250, 250, 250, 170, 250, 250, 250,
4999
+ 250, 250, 246, 254, 250, 254, 254, 254, 254, 254, 254, 254, 254, 254,
5000
+ 254, 254, 250, 234, 234, 232, 250, 250, 254, 254, 254, 254, 254, 254,
5001
+ 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
5002
+ 254, 254, 254, 254, 254, 254, 250, 250, 122, 250, 254, 234, 254, 254,
5003
+ 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
5004
+ 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 250, 250, 250, 250,
5005
+ 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5006
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5007
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5008
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5009
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5010
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5011
+ /* table 9 .. 11: 256 */
5012
+ 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
5013
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
5014
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
5015
+ 128, 128, 192, 128, 128, 192, 192, 192, 192, 192, 192, 192, 192, 192,
5016
+ 192, 128, 128, 128, 128, 128, 0, 128, 224, 224, 224, 224, 224, 224, 224,
5017
+ 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
5018
+ 224, 224, 224, 224, 224, 128, 128, 128, 128, 128, 128, 192, 192, 192,
5019
+ 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
5020
+ 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 128, 128, 128, 128, 0,
5021
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5022
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5023
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5024
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5025
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5026
+ 0, 0, 0, 0, 0, 0, 0,
5027
+ };
5028
+ yych = *p;
5029
+ if (yych <= '>') {
5030
+ if (yych <= '!') {
5031
+ if (yych >= '!')
5032
+ goto yy226;
5033
+ } else {
5034
+ if (yych == '/')
5035
+ goto yy227;
5036
+ }
5037
+ } else {
5038
+ if (yych <= 'Z') {
5039
+ if (yych <= '?')
5040
+ goto yy228;
5041
+ if (yych >= 'A')
5042
+ goto yy229;
5043
+ } else {
5044
+ if (yych <= '`')
5045
+ goto yy224;
5046
+ if (yych <= 'z')
5047
+ goto yy229;
5048
+ }
5049
+ }
5050
+ yy224:
5051
+ ++p;
5052
+ yy225 : { return 0; }
5053
+ yy226:
5054
+ yych = *(marker = ++p);
5055
+ if (yybm[256 + yych] & 32) {
5056
+ goto yy232;
5057
+ }
5058
+ if (yych == '-')
5059
+ goto yy230;
5060
+ if (yych <= '@')
5061
+ goto yy225;
5062
+ if (yych <= '[')
5063
+ goto yy234;
5064
+ goto yy225;
5065
+ yy227:
5066
+ yych = *(marker = ++p);
5067
+ if (yych <= '@')
5068
+ goto yy225;
5069
+ if (yych <= 'Z')
5070
+ goto yy235;
5071
+ if (yych <= '`')
5072
+ goto yy225;
5073
+ if (yych <= 'z')
5074
+ goto yy235;
5075
+ goto yy225;
5076
+ yy228:
5077
+ yych = *(marker = ++p);
5078
+ if (yych <= 0x00)
5079
+ goto yy225;
5080
+ if (yych <= 0x7F)
5081
+ goto yy238;
5082
+ if (yych <= 0xC1)
5083
+ goto yy225;
5084
+ if (yych <= 0xF4)
5085
+ goto yy238;
5086
+ goto yy225;
5087
+ yy229:
5088
+ yych = *(marker = ++p);
5089
+ if (yybm[0 + yych] & 1) {
5090
+ goto yy247;
5091
+ }
5092
+ if (yych <= '=') {
5093
+ if (yych <= '.') {
5094
+ if (yych == '-')
5095
+ goto yy249;
5096
+ goto yy225;
5097
+ } else {
5098
+ if (yych <= '/')
5099
+ goto yy251;
5100
+ if (yych <= '9')
5101
+ goto yy249;
5102
+ goto yy225;
5103
+ }
5104
+ } else {
5105
+ if (yych <= 'Z') {
5106
+ if (yych <= '>')
5107
+ goto yy252;
5108
+ if (yych <= '@')
5109
+ goto yy225;
5110
+ goto yy249;
5111
+ } else {
5112
+ if (yych <= '`')
5113
+ goto yy225;
5114
+ if (yych <= 'z')
5115
+ goto yy249;
5116
+ goto yy225;
5117
+ }
5118
+ }
5119
+ yy230:
5120
+ yych = *++p;
5121
+ if (yych == '-')
5122
+ goto yy254;
5123
+ yy231:
5124
+ p = marker;
5125
+ goto yy225;
5126
+ yy232:
5127
+ ++p;
5128
+ yych = *p;
5129
+ if (yybm[256 + yych] & 32) {
5130
+ goto yy232;
5131
+ }
5132
+ if (yych <= 0x08)
5133
+ goto yy231;
5134
+ if (yych <= '\r')
5135
+ goto yy255;
5136
+ if (yych == ' ')
5137
+ goto yy255;
5138
+ goto yy231;
5139
+ yy234:
5140
+ yych = *++p;
5141
+ if (yych == 'C')
5142
+ goto yy257;
5143
+ if (yych == 'c')
5144
+ goto yy257;
5145
+ goto yy231;
5146
+ yy235:
5147
+ ++p;
5148
+ yych = *p;
5149
+ if (yybm[256 + yych] & 64) {
5150
+ goto yy235;
5151
+ }
5152
+ if (yych <= 0x1F) {
5153
+ if (yych <= 0x08)
5154
+ goto yy231;
5155
+ if (yych <= '\r')
5156
+ goto yy258;
5157
+ goto yy231;
5158
+ } else {
5159
+ if (yych <= ' ')
5160
+ goto yy258;
5161
+ if (yych == '>')
5162
+ goto yy252;
5163
+ goto yy231;
5164
+ }
5165
+ yy237:
5166
+ ++p;
5167
+ yych = *p;
5168
+ yy238:
5169
+ if (yybm[256 + yych] & 128) {
5170
+ goto yy237;
5171
+ }
5172
+ if (yych <= 0xEC) {
5173
+ if (yych <= 0xC1) {
5174
+ if (yych <= 0x00)
5175
+ goto yy231;
5176
+ if (yych >= '@')
5177
+ goto yy231;
5178
+ } else {
5179
+ if (yych <= 0xDF)
5180
+ goto yy240;
5181
+ if (yych <= 0xE0)
5182
+ goto yy241;
5183
+ goto yy242;
5184
+ }
5185
+ } else {
5186
+ if (yych <= 0xF0) {
5187
+ if (yych <= 0xED)
5188
+ goto yy243;
5189
+ if (yych <= 0xEF)
5190
+ goto yy242;
5191
+ goto yy244;
5192
+ } else {
5193
+ if (yych <= 0xF3)
5194
+ goto yy245;
5195
+ if (yych <= 0xF4)
5196
+ goto yy246;
5197
+ goto yy231;
5198
+ }
5199
+ }
5200
+ ++p;
5201
+ yych = *p;
5202
+ if (yych <= 0xE0) {
5203
+ if (yych <= '>') {
5204
+ if (yych <= 0x00)
5205
+ goto yy231;
5206
+ if (yych <= '=')
5207
+ goto yy237;
5208
+ goto yy252;
5209
+ } else {
5210
+ if (yych <= 0x7F)
5211
+ goto yy237;
5212
+ if (yych <= 0xC1)
5213
+ goto yy231;
5214
+ if (yych >= 0xE0)
5215
+ goto yy241;
5216
+ }
5217
+ } else {
5218
+ if (yych <= 0xEF) {
5219
+ if (yych == 0xED)
5220
+ goto yy243;
5221
+ goto yy242;
5222
+ } else {
5223
+ if (yych <= 0xF0)
5224
+ goto yy244;
5225
+ if (yych <= 0xF3)
5226
+ goto yy245;
5227
+ if (yych <= 0xF4)
5228
+ goto yy246;
5229
+ goto yy231;
5230
+ }
5231
+ }
5232
+ yy240:
5233
+ ++p;
5234
+ yych = *p;
5235
+ if (yych <= 0x7F)
5236
+ goto yy231;
5237
+ if (yych <= 0xBF)
5238
+ goto yy237;
5239
+ goto yy231;
5240
+ yy241:
5241
+ ++p;
5242
+ yych = *p;
5243
+ if (yych <= 0x9F)
5244
+ goto yy231;
5245
+ if (yych <= 0xBF)
5246
+ goto yy240;
5247
+ goto yy231;
5248
+ yy242:
5249
+ ++p;
5250
+ yych = *p;
5251
+ if (yych <= 0x7F)
5252
+ goto yy231;
5253
+ if (yych <= 0xBF)
5254
+ goto yy240;
5255
+ goto yy231;
5256
+ yy243:
5257
+ ++p;
5258
+ yych = *p;
5259
+ if (yych <= 0x7F)
5260
+ goto yy231;
5261
+ if (yych <= 0x9F)
5262
+ goto yy240;
5263
+ goto yy231;
5264
+ yy244:
5265
+ ++p;
5266
+ yych = *p;
5267
+ if (yych <= 0x8F)
5268
+ goto yy231;
5269
+ if (yych <= 0xBF)
5270
+ goto yy242;
5271
+ goto yy231;
5272
+ yy245:
5273
+ ++p;
5274
+ yych = *p;
5275
+ if (yych <= 0x7F)
5276
+ goto yy231;
5277
+ if (yych <= 0xBF)
5278
+ goto yy242;
5279
+ goto yy231;
5280
+ yy246:
5281
+ ++p;
5282
+ yych = *p;
5283
+ if (yych <= 0x7F)
5284
+ goto yy231;
5285
+ if (yych <= 0x8F)
5286
+ goto yy242;
5287
+ goto yy231;
5288
+ yy247:
5289
+ ++p;
5290
+ yych = *p;
5291
+ if (yybm[0 + yych] & 1) {
5292
+ goto yy247;
5293
+ }
5294
+ if (yych <= '>') {
5295
+ if (yych <= '9') {
5296
+ if (yych == '/')
5297
+ goto yy251;
5298
+ goto yy231;
5299
+ } else {
5300
+ if (yych <= ':')
5301
+ goto yy260;
5302
+ if (yych <= '=')
5303
+ goto yy231;
5304
+ goto yy252;
5305
+ }
5306
+ } else {
5307
+ if (yych <= '^') {
5308
+ if (yych <= '@')
5309
+ goto yy231;
5310
+ if (yych <= 'Z')
5311
+ goto yy260;
5312
+ goto yy231;
5313
+ } else {
5314
+ if (yych == '`')
5315
+ goto yy231;
5316
+ if (yych <= 'z')
5317
+ goto yy260;
5318
+ goto yy231;
5319
+ }
5320
+ }
5321
+ yy249:
5322
+ ++p;
5323
+ yych = *p;
5324
+ if (yybm[0 + yych] & 1) {
5325
+ goto yy247;
5326
+ }
5327
+ if (yych <= '=') {
5328
+ if (yych <= '.') {
5329
+ if (yych == '-')
5330
+ goto yy249;
5331
+ goto yy231;
5332
+ } else {
5333
+ if (yych <= '/')
5334
+ goto yy251;
5335
+ if (yych <= '9')
5336
+ goto yy249;
5337
+ goto yy231;
5338
+ }
5339
+ } else {
5340
+ if (yych <= 'Z') {
5341
+ if (yych <= '>')
5342
+ goto yy252;
5343
+ if (yych <= '@')
5344
+ goto yy231;
5345
+ goto yy249;
5346
+ } else {
5347
+ if (yych <= '`')
5348
+ goto yy231;
5349
+ if (yych <= 'z')
5350
+ goto yy249;
5351
+ goto yy231;
5352
+ }
5353
+ }
5354
+ yy251:
5355
+ yych = *++p;
5356
+ if (yych != '>')
5357
+ goto yy231;
5358
+ yy252:
5359
+ ++p;
5360
+ { return (bufsize_t)(p - start); }
5361
+ yy254:
5362
+ yych = *++p;
5363
+ if (yych == '-')
5364
+ goto yy264;
5365
+ if (yych == '>')
5366
+ goto yy231;
5367
+ goto yy263;
5368
+ yy255:
5369
+ ++p;
5370
+ yych = *p;
5371
+ if (yybm[0 + yych] & 2) {
5372
+ goto yy255;
5373
+ }
5374
+ if (yych <= 0xEC) {
5375
+ if (yych <= 0xC1) {
5376
+ if (yych <= 0x00)
5377
+ goto yy231;
5378
+ if (yych <= '>')
5379
+ goto yy252;
5380
+ goto yy231;
5381
+ } else {
5382
+ if (yych <= 0xDF)
5383
+ goto yy272;
5384
+ if (yych <= 0xE0)
5385
+ goto yy273;
5386
+ goto yy274;
5387
+ }
5388
+ } else {
5389
+ if (yych <= 0xF0) {
5390
+ if (yych <= 0xED)
5391
+ goto yy275;
5392
+ if (yych <= 0xEF)
5393
+ goto yy274;
5394
+ goto yy276;
5395
+ } else {
5396
+ if (yych <= 0xF3)
5397
+ goto yy277;
5398
+ if (yych <= 0xF4)
5399
+ goto yy278;
5400
+ goto yy231;
5401
+ }
5402
+ }
5403
+ yy257:
5404
+ yych = *++p;
5405
+ if (yych == 'D')
5406
+ goto yy279;
5407
+ if (yych == 'd')
5408
+ goto yy279;
5409
+ goto yy231;
5410
+ yy258:
5411
+ ++p;
5412
+ yych = *p;
5413
+ if (yych <= 0x1F) {
5414
+ if (yych <= 0x08)
5415
+ goto yy231;
5416
+ if (yych <= '\r')
5417
+ goto yy258;
5418
+ goto yy231;
5419
+ } else {
5420
+ if (yych <= ' ')
5421
+ goto yy258;
5422
+ if (yych == '>')
5423
+ goto yy252;
5424
+ goto yy231;
5425
+ }
5426
+ yy260:
5427
+ ++p;
5428
+ yych = *p;
5429
+ if (yybm[0 + yych] & 4) {
5430
+ goto yy260;
5431
+ }
5432
+ if (yych <= ',') {
5433
+ if (yych <= '\r') {
5434
+ if (yych <= 0x08)
5435
+ goto yy231;
5436
+ goto yy280;
5437
+ } else {
5438
+ if (yych == ' ')
5439
+ goto yy280;
5440
+ goto yy231;
5441
+ }
5442
+ } else {
5443
+ if (yych <= '<') {
5444
+ if (yych <= '/')
5445
+ goto yy251;
5446
+ goto yy231;
5447
+ } else {
5448
+ if (yych <= '=')
5449
+ goto yy282;
5450
+ if (yych <= '>')
5451
+ goto yy252;
5452
+ goto yy231;
5453
+ }
5454
+ }
5455
+ yy262:
5456
+ ++p;
5457
+ yych = *p;
5458
+ yy263:
5459
+ if (yybm[0 + yych] & 8) {
5460
+ goto yy262;
5461
+ }
5462
+ if (yych <= 0xEC) {
5463
+ if (yych <= 0xC1) {
5464
+ if (yych <= 0x00)
5465
+ goto yy231;
5466
+ if (yych <= '-')
5467
+ goto yy283;
5468
+ goto yy231;
5469
+ } else {
5470
+ if (yych <= 0xDF)
5471
+ goto yy265;
5472
+ if (yych <= 0xE0)
5473
+ goto yy266;
5474
+ goto yy267;
5475
+ }
5476
+ } else {
5477
+ if (yych <= 0xF0) {
5478
+ if (yych <= 0xED)
5479
+ goto yy268;
5480
+ if (yych <= 0xEF)
5481
+ goto yy267;
5482
+ goto yy269;
5483
+ } else {
5484
+ if (yych <= 0xF3)
5485
+ goto yy270;
5486
+ if (yych <= 0xF4)
5487
+ goto yy271;
5488
+ goto yy231;
5489
+ }
5490
+ }
5491
+ yy264:
5492
+ yych = *++p;
5493
+ if (yych == '-')
5494
+ goto yy251;
5495
+ if (yych == '>')
5496
+ goto yy231;
5497
+ goto yy263;
5498
+ yy265:
5499
+ ++p;
5500
+ yych = *p;
5501
+ if (yych <= 0x7F)
5502
+ goto yy231;
5503
+ if (yych <= 0xBF)
5504
+ goto yy262;
5505
+ goto yy231;
5506
+ yy266:
5507
+ ++p;
5508
+ yych = *p;
5509
+ if (yych <= 0x9F)
5510
+ goto yy231;
5511
+ if (yych <= 0xBF)
5512
+ goto yy265;
5513
+ goto yy231;
5514
+ yy267:
5515
+ ++p;
5516
+ yych = *p;
5517
+ if (yych <= 0x7F)
5518
+ goto yy231;
5519
+ if (yych <= 0xBF)
5520
+ goto yy265;
5521
+ goto yy231;
5522
+ yy268:
5523
+ ++p;
5524
+ yych = *p;
5525
+ if (yych <= 0x7F)
5526
+ goto yy231;
5527
+ if (yych <= 0x9F)
5528
+ goto yy265;
5529
+ goto yy231;
5530
+ yy269:
5531
+ ++p;
5532
+ yych = *p;
5533
+ if (yych <= 0x8F)
5534
+ goto yy231;
5535
+ if (yych <= 0xBF)
5536
+ goto yy267;
5537
+ goto yy231;
5538
+ yy270:
5539
+ ++p;
5540
+ yych = *p;
5541
+ if (yych <= 0x7F)
5542
+ goto yy231;
5543
+ if (yych <= 0xBF)
5544
+ goto yy267;
5545
+ goto yy231;
5546
+ yy271:
5547
+ ++p;
5548
+ yych = *p;
5549
+ if (yych <= 0x7F)
5550
+ goto yy231;
5551
+ if (yych <= 0x8F)
5552
+ goto yy267;
5553
+ goto yy231;
5554
+ yy272:
5555
+ ++p;
5556
+ yych = *p;
5557
+ if (yych <= 0x7F)
5558
+ goto yy231;
5559
+ if (yych <= 0xBF)
5560
+ goto yy255;
5561
+ goto yy231;
5562
+ yy273:
5563
+ ++p;
5564
+ yych = *p;
5565
+ if (yych <= 0x9F)
5566
+ goto yy231;
5567
+ if (yych <= 0xBF)
5568
+ goto yy272;
5569
+ goto yy231;
5570
+ yy274:
5571
+ ++p;
5572
+ yych = *p;
5573
+ if (yych <= 0x7F)
5574
+ goto yy231;
5575
+ if (yych <= 0xBF)
5576
+ goto yy272;
5577
+ goto yy231;
5578
+ yy275:
5579
+ ++p;
5580
+ yych = *p;
5581
+ if (yych <= 0x7F)
5582
+ goto yy231;
5583
+ if (yych <= 0x9F)
5584
+ goto yy272;
5585
+ goto yy231;
5586
+ yy276:
5587
+ ++p;
5588
+ yych = *p;
5589
+ if (yych <= 0x8F)
5590
+ goto yy231;
5591
+ if (yych <= 0xBF)
5592
+ goto yy274;
5593
+ goto yy231;
5594
+ yy277:
5595
+ ++p;
5596
+ yych = *p;
5597
+ if (yych <= 0x7F)
5598
+ goto yy231;
5599
+ if (yych <= 0xBF)
5600
+ goto yy274;
5601
+ goto yy231;
5602
+ yy278:
5603
+ ++p;
5604
+ yych = *p;
5605
+ if (yych <= 0x7F)
5606
+ goto yy231;
5607
+ if (yych <= 0x8F)
5608
+ goto yy274;
5609
+ goto yy231;
5610
+ yy279:
5611
+ yych = *++p;
5612
+ if (yych == 'A')
5613
+ goto yy284;
5614
+ if (yych == 'a')
5615
+ goto yy284;
5616
+ goto yy231;
5617
+ yy280:
5618
+ ++p;
5619
+ yych = *p;
5620
+ if (yych <= '<') {
5621
+ if (yych <= ' ') {
5622
+ if (yych <= 0x08)
5623
+ goto yy231;
5624
+ if (yych <= '\r')
5625
+ goto yy280;
5626
+ if (yych <= 0x1F)
5627
+ goto yy231;
5628
+ goto yy280;
5629
+ } else {
5630
+ if (yych <= '/') {
5631
+ if (yych <= '.')
5632
+ goto yy231;
5633
+ goto yy251;
5634
+ } else {
5635
+ if (yych == ':')
5636
+ goto yy260;
5637
+ goto yy231;
5638
+ }
5639
+ }
5640
+ } else {
5641
+ if (yych <= 'Z') {
5642
+ if (yych <= '=')
5643
+ goto yy282;
5644
+ if (yych <= '>')
5645
+ goto yy252;
5646
+ if (yych <= '@')
5647
+ goto yy231;
5648
+ goto yy260;
5649
+ } else {
5650
+ if (yych <= '_') {
5651
+ if (yych <= '^')
5652
+ goto yy231;
5653
+ goto yy260;
5654
+ } else {
5655
+ if (yych <= '`')
5656
+ goto yy231;
5657
+ if (yych <= 'z')
5658
+ goto yy260;
5659
+ goto yy231;
5660
+ }
5661
+ }
5662
+ }
5663
+ yy282:
5664
+ ++p;
5665
+ yych = *p;
5666
+ if (yybm[0 + yych] & 16) {
5667
+ goto yy285;
5668
+ }
5669
+ if (yych <= 0xE0) {
5670
+ if (yych <= '"') {
5671
+ if (yych <= 0x00)
5672
+ goto yy231;
5673
+ if (yych <= ' ')
5674
+ goto yy287;
5675
+ goto yy288;
5676
+ } else {
5677
+ if (yych <= '\'')
5678
+ goto yy290;
5679
+ if (yych <= 0xC1)
5680
+ goto yy231;
5681
+ if (yych <= 0xDF)
5682
+ goto yy292;
5683
+ goto yy293;
5684
+ }
5685
+ } else {
5686
+ if (yych <= 0xEF) {
5687
+ if (yych == 0xED)
5688
+ goto yy295;
5689
+ goto yy294;
5690
+ } else {
5691
+ if (yych <= 0xF0)
5692
+ goto yy296;
5693
+ if (yych <= 0xF3)
5694
+ goto yy297;
5695
+ if (yych <= 0xF4)
5696
+ goto yy298;
5697
+ goto yy231;
5698
+ }
5699
+ }
5700
+ yy283:
5701
+ ++p;
5702
+ yych = *p;
5703
+ if (yybm[0 + yych] & 8) {
5704
+ goto yy262;
5705
+ }
5706
+ if (yych <= 0xEC) {
5707
+ if (yych <= 0xC1) {
5708
+ if (yych <= 0x00)
5709
+ goto yy231;
5710
+ if (yych <= '-')
5711
+ goto yy251;
5712
+ goto yy231;
5713
+ } else {
5714
+ if (yych <= 0xDF)
5715
+ goto yy265;
5716
+ if (yych <= 0xE0)
5717
+ goto yy266;
5718
+ goto yy267;
5719
+ }
5720
+ } else {
5721
+ if (yych <= 0xF0) {
5722
+ if (yych <= 0xED)
5723
+ goto yy268;
5724
+ if (yych <= 0xEF)
5725
+ goto yy267;
5726
+ goto yy269;
5727
+ } else {
5728
+ if (yych <= 0xF3)
5729
+ goto yy270;
5730
+ if (yych <= 0xF4)
5731
+ goto yy271;
5732
+ goto yy231;
5733
+ }
5734
+ }
5735
+ yy284:
5736
+ yych = *++p;
5737
+ if (yych == 'T')
5738
+ goto yy299;
5739
+ if (yych == 't')
5740
+ goto yy299;
5741
+ goto yy231;
5742
+ yy285:
5743
+ ++p;
5744
+ yych = *p;
5745
+ if (yybm[0 + yych] & 16) {
5746
+ goto yy285;
5747
+ }
5748
+ if (yych <= 0xE0) {
5749
+ if (yych <= '=') {
5750
+ if (yych <= 0x00)
5751
+ goto yy231;
5752
+ if (yych <= ' ')
5753
+ goto yy300;
5754
+ goto yy231;
5755
+ } else {
5756
+ if (yych <= '>')
5757
+ goto yy252;
5758
+ if (yych <= 0xC1)
5759
+ goto yy231;
5760
+ if (yych <= 0xDF)
5761
+ goto yy292;
5762
+ goto yy293;
5763
+ }
5764
+ } else {
5765
+ if (yych <= 0xEF) {
5766
+ if (yych == 0xED)
5767
+ goto yy295;
5768
+ goto yy294;
5769
+ } else {
5770
+ if (yych <= 0xF0)
5771
+ goto yy296;
5772
+ if (yych <= 0xF3)
5773
+ goto yy297;
5774
+ if (yych <= 0xF4)
5775
+ goto yy298;
5776
+ goto yy231;
5777
+ }
5778
+ }
5779
+ yy287:
5780
+ ++p;
5781
+ yych = *p;
5782
+ if (yybm[0 + yych] & 16) {
5783
+ goto yy285;
5784
+ }
5785
+ if (yych <= 0xDF) {
5786
+ if (yych <= '\'') {
5787
+ if (yych <= 0x00)
5788
+ goto yy231;
5789
+ if (yych <= ' ')
5790
+ goto yy302;
5791
+ if (yych >= '#')
5792
+ goto yy290;
5793
+ } else {
5794
+ if (yych == '>')
5795
+ goto yy252;
5796
+ if (yych <= 0xC1)
5797
+ goto yy231;
5798
+ goto yy292;
5799
+ }
5800
+ } else {
5801
+ if (yych <= 0xEF) {
5802
+ if (yych <= 0xE0)
5803
+ goto yy293;
5804
+ if (yych == 0xED)
5805
+ goto yy295;
5806
+ goto yy294;
5807
+ } else {
5808
+ if (yych <= 0xF0)
5809
+ goto yy296;
5810
+ if (yych <= 0xF3)
5811
+ goto yy297;
5812
+ if (yych <= 0xF4)
5813
+ goto yy298;
5814
+ goto yy231;
5815
+ }
5816
+ }
5817
+ yy288:
5818
+ ++p;
5819
+ yych = *p;
5820
+ if (yybm[0 + yych] & 32) {
5821
+ goto yy288;
5822
+ }
5823
+ if (yych <= 0xEC) {
5824
+ if (yych <= 0xC1) {
5825
+ if (yych <= 0x00)
5826
+ goto yy231;
5827
+ if (yych <= '"')
5828
+ goto yy304;
5829
+ goto yy231;
5830
+ } else {
5831
+ if (yych <= 0xDF)
5832
+ goto yy305;
5833
+ if (yych <= 0xE0)
5834
+ goto yy306;
5835
+ goto yy307;
5836
+ }
5837
+ } else {
5838
+ if (yych <= 0xF0) {
5839
+ if (yych <= 0xED)
5840
+ goto yy308;
5841
+ if (yych <= 0xEF)
5842
+ goto yy307;
5843
+ goto yy309;
5844
+ } else {
5845
+ if (yych <= 0xF3)
5846
+ goto yy310;
5847
+ if (yych <= 0xF4)
5848
+ goto yy311;
5849
+ goto yy231;
5850
+ }
5851
+ }
5852
+ yy290:
5853
+ ++p;
5854
+ yych = *p;
5855
+ if (yybm[0 + yych] & 64) {
5856
+ goto yy290;
5857
+ }
5858
+ if (yych <= 0xEC) {
5859
+ if (yych <= 0xC1) {
5860
+ if (yych <= 0x00)
5861
+ goto yy231;
5862
+ if (yych <= '\'')
5863
+ goto yy304;
5864
+ goto yy231;
5865
+ } else {
5866
+ if (yych <= 0xDF)
5867
+ goto yy312;
5868
+ if (yych <= 0xE0)
5869
+ goto yy313;
5870
+ goto yy314;
5871
+ }
5872
+ } else {
5873
+ if (yych <= 0xF0) {
5874
+ if (yych <= 0xED)
5875
+ goto yy315;
5876
+ if (yych <= 0xEF)
5877
+ goto yy314;
5878
+ goto yy316;
5879
+ } else {
5880
+ if (yych <= 0xF3)
5881
+ goto yy317;
5882
+ if (yych <= 0xF4)
5883
+ goto yy318;
5884
+ goto yy231;
5885
+ }
5886
+ }
5887
+ yy292:
5888
+ ++p;
5889
+ yych = *p;
5890
+ if (yych <= 0x7F)
5891
+ goto yy231;
5892
+ if (yych <= 0xBF)
5893
+ goto yy285;
5894
+ goto yy231;
5895
+ yy293:
5896
+ ++p;
5897
+ yych = *p;
5898
+ if (yych <= 0x9F)
5899
+ goto yy231;
5900
+ if (yych <= 0xBF)
5901
+ goto yy292;
5902
+ goto yy231;
5903
+ yy294:
5904
+ ++p;
5905
+ yych = *p;
5906
+ if (yych <= 0x7F)
5907
+ goto yy231;
5908
+ if (yych <= 0xBF)
5909
+ goto yy292;
5910
+ goto yy231;
5911
+ yy295:
5912
+ ++p;
5913
+ yych = *p;
5914
+ if (yych <= 0x7F)
5915
+ goto yy231;
5916
+ if (yych <= 0x9F)
5917
+ goto yy292;
5918
+ goto yy231;
5919
+ yy296:
5920
+ ++p;
5921
+ yych = *p;
5922
+ if (yych <= 0x8F)
5923
+ goto yy231;
5924
+ if (yych <= 0xBF)
5925
+ goto yy294;
5926
+ goto yy231;
5927
+ yy297:
5928
+ ++p;
5929
+ yych = *p;
5930
+ if (yych <= 0x7F)
5931
+ goto yy231;
5932
+ if (yych <= 0xBF)
5933
+ goto yy294;
5934
+ goto yy231;
5935
+ yy298:
5936
+ ++p;
5937
+ yych = *p;
5938
+ if (yych <= 0x7F)
5939
+ goto yy231;
5940
+ if (yych <= 0x8F)
5941
+ goto yy294;
5942
+ goto yy231;
5943
+ yy299:
5944
+ yych = *++p;
5945
+ if (yych == 'A')
5946
+ goto yy319;
5947
+ if (yych == 'a')
5948
+ goto yy319;
5949
+ goto yy231;
5950
+ yy300:
5951
+ ++p;
5952
+ yych = *p;
5953
+ if (yych <= '@') {
5954
+ if (yych <= '"') {
5955
+ if (yych <= '\r') {
5956
+ if (yych <= 0x00)
5957
+ goto yy231;
5958
+ if (yych <= 0x08)
5959
+ goto yy285;
5960
+ goto yy300;
5961
+ } else {
5962
+ if (yych == ' ')
5963
+ goto yy300;
5964
+ if (yych <= '!')
5965
+ goto yy285;
5966
+ goto yy231;
5967
+ }
5968
+ } else {
5969
+ if (yych <= ':') {
5970
+ if (yych == '\'')
5971
+ goto yy231;
5972
+ if (yych <= '9')
5973
+ goto yy285;
5974
+ goto yy320;
5975
+ } else {
5976
+ if (yych <= ';')
5977
+ goto yy285;
5978
+ if (yych <= '=')
5979
+ goto yy231;
5980
+ if (yych <= '>')
5981
+ goto yy252;
5982
+ goto yy285;
5983
+ }
5984
+ }
5985
+ } else {
5986
+ if (yych <= 0xDF) {
5987
+ if (yych <= '`') {
5988
+ if (yych <= 'Z')
5989
+ goto yy320;
5990
+ if (yych <= '^')
5991
+ goto yy285;
5992
+ if (yych <= '_')
5993
+ goto yy320;
5994
+ goto yy231;
5995
+ } else {
5996
+ if (yych <= 'z')
5997
+ goto yy320;
5998
+ if (yych <= 0x7F)
5999
+ goto yy285;
6000
+ if (yych <= 0xC1)
6001
+ goto yy231;
6002
+ goto yy292;
6003
+ }
6004
+ } else {
6005
+ if (yych <= 0xEF) {
6006
+ if (yych <= 0xE0)
6007
+ goto yy293;
6008
+ if (yych == 0xED)
6009
+ goto yy295;
6010
+ goto yy294;
6011
+ } else {
6012
+ if (yych <= 0xF0)
6013
+ goto yy296;
6014
+ if (yych <= 0xF3)
6015
+ goto yy297;
6016
+ if (yych <= 0xF4)
6017
+ goto yy298;
6018
+ goto yy231;
6019
+ }
6020
+ }
6021
+ }
6022
+ yy302:
6023
+ ++p;
6024
+ yych = *p;
6025
+ if (yych <= '@') {
6026
+ if (yych <= '"') {
6027
+ if (yych <= '\r') {
6028
+ if (yych <= 0x00)
6029
+ goto yy231;
6030
+ if (yych <= 0x08)
6031
+ goto yy285;
6032
+ goto yy302;
6033
+ } else {
6034
+ if (yych == ' ')
6035
+ goto yy302;
6036
+ if (yych <= '!')
6037
+ goto yy285;
6038
+ goto yy288;
6039
+ }
6040
+ } else {
6041
+ if (yych <= ':') {
6042
+ if (yych == '\'')
6043
+ goto yy290;
6044
+ if (yych <= '9')
6045
+ goto yy285;
6046
+ goto yy320;
6047
+ } else {
6048
+ if (yych <= ';')
6049
+ goto yy285;
6050
+ if (yych <= '=')
6051
+ goto yy231;
6052
+ if (yych <= '>')
6053
+ goto yy252;
6054
+ goto yy285;
6055
+ }
6056
+ }
6057
+ } else {
6058
+ if (yych <= 0xDF) {
6059
+ if (yych <= '`') {
6060
+ if (yych <= 'Z')
6061
+ goto yy320;
6062
+ if (yych <= '^')
6063
+ goto yy285;
6064
+ if (yych <= '_')
6065
+ goto yy320;
6066
+ goto yy231;
6067
+ } else {
6068
+ if (yych <= 'z')
6069
+ goto yy320;
6070
+ if (yych <= 0x7F)
6071
+ goto yy285;
6072
+ if (yych <= 0xC1)
6073
+ goto yy231;
6074
+ goto yy292;
6075
+ }
6076
+ } else {
6077
+ if (yych <= 0xEF) {
6078
+ if (yych <= 0xE0)
6079
+ goto yy293;
6080
+ if (yych == 0xED)
6081
+ goto yy295;
6082
+ goto yy294;
6083
+ } else {
6084
+ if (yych <= 0xF0)
6085
+ goto yy296;
6086
+ if (yych <= 0xF3)
6087
+ goto yy297;
6088
+ if (yych <= 0xF4)
6089
+ goto yy298;
6090
+ goto yy231;
6091
+ }
6092
+ }
6093
+ }
6094
+ yy304:
6095
+ ++p;
6096
+ yych = *p;
6097
+ if (yybm[0 + yych] & 1) {
6098
+ goto yy247;
6099
+ }
6100
+ if (yych == '/')
6101
+ goto yy251;
6102
+ if (yych == '>')
6103
+ goto yy252;
6104
+ goto yy231;
6105
+ yy305:
6106
+ ++p;
6107
+ yych = *p;
6108
+ if (yych <= 0x7F)
6109
+ goto yy231;
6110
+ if (yych <= 0xBF)
6111
+ goto yy288;
6112
+ goto yy231;
6113
+ yy306:
6114
+ ++p;
6115
+ yych = *p;
6116
+ if (yych <= 0x9F)
6117
+ goto yy231;
6118
+ if (yych <= 0xBF)
6119
+ goto yy305;
6120
+ goto yy231;
6121
+ yy307:
6122
+ ++p;
6123
+ yych = *p;
6124
+ if (yych <= 0x7F)
6125
+ goto yy231;
6126
+ if (yych <= 0xBF)
6127
+ goto yy305;
6128
+ goto yy231;
6129
+ yy308:
6130
+ ++p;
6131
+ yych = *p;
6132
+ if (yych <= 0x7F)
6133
+ goto yy231;
6134
+ if (yych <= 0x9F)
6135
+ goto yy305;
6136
+ goto yy231;
6137
+ yy309:
6138
+ ++p;
6139
+ yych = *p;
6140
+ if (yych <= 0x8F)
6141
+ goto yy231;
6142
+ if (yych <= 0xBF)
6143
+ goto yy307;
6144
+ goto yy231;
6145
+ yy310:
6146
+ ++p;
6147
+ yych = *p;
6148
+ if (yych <= 0x7F)
6149
+ goto yy231;
6150
+ if (yych <= 0xBF)
6151
+ goto yy307;
6152
+ goto yy231;
6153
+ yy311:
6154
+ ++p;
6155
+ yych = *p;
6156
+ if (yych <= 0x7F)
6157
+ goto yy231;
6158
+ if (yych <= 0x8F)
6159
+ goto yy307;
6160
+ goto yy231;
6161
+ yy312:
6162
+ ++p;
6163
+ yych = *p;
6164
+ if (yych <= 0x7F)
6165
+ goto yy231;
6166
+ if (yych <= 0xBF)
6167
+ goto yy290;
6168
+ goto yy231;
6169
+ yy313:
6170
+ ++p;
6171
+ yych = *p;
6172
+ if (yych <= 0x9F)
6173
+ goto yy231;
6174
+ if (yych <= 0xBF)
6175
+ goto yy312;
6176
+ goto yy231;
6177
+ yy314:
6178
+ ++p;
6179
+ yych = *p;
6180
+ if (yych <= 0x7F)
6181
+ goto yy231;
6182
+ if (yych <= 0xBF)
6183
+ goto yy312;
6184
+ goto yy231;
6185
+ yy315:
6186
+ ++p;
6187
+ yych = *p;
6188
+ if (yych <= 0x7F)
6189
+ goto yy231;
6190
+ if (yych <= 0x9F)
6191
+ goto yy312;
6192
+ goto yy231;
6193
+ yy316:
6194
+ ++p;
6195
+ yych = *p;
6196
+ if (yych <= 0x8F)
6197
+ goto yy231;
6198
+ if (yych <= 0xBF)
6199
+ goto yy314;
6200
+ goto yy231;
6201
+ yy317:
6202
+ ++p;
6203
+ yych = *p;
6204
+ if (yych <= 0x7F)
6205
+ goto yy231;
6206
+ if (yych <= 0xBF)
6207
+ goto yy314;
6208
+ goto yy231;
6209
+ yy318:
6210
+ ++p;
6211
+ yych = *p;
6212
+ if (yych <= 0x7F)
6213
+ goto yy231;
6214
+ if (yych <= 0x8F)
6215
+ goto yy314;
6216
+ goto yy231;
6217
+ yy319:
6218
+ yych = *++p;
6219
+ if (yych == '[')
6220
+ goto yy322;
6221
+ goto yy231;
6222
+ yy320:
6223
+ ++p;
6224
+ yych = *p;
6225
+ if (yych <= '>') {
6226
+ if (yych <= '&') {
6227
+ if (yych <= 0x1F) {
6228
+ if (yych <= 0x00)
6229
+ goto yy231;
6230
+ if (yych <= 0x08)
6231
+ goto yy285;
6232
+ if (yych <= '\r')
6233
+ goto yy324;
6234
+ goto yy285;
6235
+ } else {
6236
+ if (yych <= ' ')
6237
+ goto yy324;
6238
+ if (yych == '"')
6239
+ goto yy231;
6240
+ goto yy285;
6241
+ }
6242
+ } else {
6243
+ if (yych <= '/') {
6244
+ if (yych <= '\'')
6245
+ goto yy231;
6246
+ if (yych <= ',')
6247
+ goto yy285;
6248
+ if (yych <= '.')
6249
+ goto yy320;
6250
+ goto yy285;
6251
+ } else {
6252
+ if (yych <= ';') {
6253
+ if (yych <= ':')
6254
+ goto yy320;
6255
+ goto yy285;
6256
+ } else {
6257
+ if (yych <= '<')
6258
+ goto yy231;
6259
+ if (yych <= '=')
6260
+ goto yy282;
6261
+ goto yy252;
6262
+ }
6263
+ }
6264
+ }
6265
+ } else {
6266
+ if (yych <= 0xC1) {
6267
+ if (yych <= '_') {
6268
+ if (yych <= '@')
6269
+ goto yy285;
6270
+ if (yych <= 'Z')
6271
+ goto yy320;
6272
+ if (yych <= '^')
6273
+ goto yy285;
6274
+ goto yy320;
6275
+ } else {
6276
+ if (yych <= '`')
6277
+ goto yy231;
6278
+ if (yych <= 'z')
6279
+ goto yy320;
6280
+ if (yych <= 0x7F)
6281
+ goto yy285;
6282
+ goto yy231;
6283
+ }
6284
+ } else {
6285
+ if (yych <= 0xED) {
6286
+ if (yych <= 0xDF)
6287
+ goto yy292;
6288
+ if (yych <= 0xE0)
6289
+ goto yy293;
6290
+ if (yych <= 0xEC)
6291
+ goto yy294;
6292
+ goto yy295;
6293
+ } else {
6294
+ if (yych <= 0xF0) {
6295
+ if (yych <= 0xEF)
6296
+ goto yy294;
6297
+ goto yy296;
6298
+ } else {
6299
+ if (yych <= 0xF3)
6300
+ goto yy297;
6301
+ if (yych <= 0xF4)
6302
+ goto yy298;
6303
+ goto yy231;
6304
+ }
6305
+ }
6306
+ }
6307
+ }
6308
+ yy322:
6309
+ ++p;
6310
+ yych = *p;
6311
+ if (yybm[0 + yych] & 128) {
6312
+ goto yy322;
6313
+ }
6314
+ if (yych <= 0xEC) {
6315
+ if (yych <= 0xC1) {
6316
+ if (yych <= 0x00)
6317
+ goto yy231;
6318
+ if (yych <= ']')
6319
+ goto yy326;
6320
+ goto yy231;
6321
+ } else {
6322
+ if (yych <= 0xDF)
6323
+ goto yy327;
6324
+ if (yych <= 0xE0)
6325
+ goto yy328;
6326
+ goto yy329;
6327
+ }
6328
+ } else {
6329
+ if (yych <= 0xF0) {
6330
+ if (yych <= 0xED)
6331
+ goto yy330;
6332
+ if (yych <= 0xEF)
6333
+ goto yy329;
6334
+ goto yy331;
6335
+ } else {
6336
+ if (yych <= 0xF3)
6337
+ goto yy332;
6338
+ if (yych <= 0xF4)
6339
+ goto yy333;
6340
+ goto yy231;
6341
+ }
6342
+ }
6343
+ yy324:
6344
+ ++p;
6345
+ yych = *p;
6346
+ if (yych <= '@') {
6347
+ if (yych <= '&') {
6348
+ if (yych <= 0x1F) {
6349
+ if (yych <= 0x00)
6350
+ goto yy231;
6351
+ if (yych <= 0x08)
6352
+ goto yy285;
6353
+ if (yych <= '\r')
6354
+ goto yy324;
6355
+ goto yy285;
6356
+ } else {
6357
+ if (yych <= ' ')
6358
+ goto yy324;
6359
+ if (yych == '"')
6360
+ goto yy231;
6361
+ goto yy285;
6362
+ }
6363
+ } else {
6364
+ if (yych <= ';') {
6365
+ if (yych <= '\'')
6366
+ goto yy231;
6367
+ if (yych == ':')
6368
+ goto yy320;
6369
+ goto yy285;
6370
+ } else {
6371
+ if (yych <= '<')
6372
+ goto yy231;
6373
+ if (yych <= '=')
6374
+ goto yy282;
6375
+ if (yych <= '>')
6376
+ goto yy252;
6377
+ goto yy285;
6378
+ }
6379
+ }
6380
+ } else {
6381
+ if (yych <= 0xDF) {
6382
+ if (yych <= '`') {
6383
+ if (yych <= 'Z')
6384
+ goto yy320;
6385
+ if (yych <= '^')
6386
+ goto yy285;
6387
+ if (yych <= '_')
6388
+ goto yy320;
6389
+ goto yy231;
6390
+ } else {
6391
+ if (yych <= 'z')
6392
+ goto yy320;
6393
+ if (yych <= 0x7F)
6394
+ goto yy285;
6395
+ if (yych <= 0xC1)
6396
+ goto yy231;
6397
+ goto yy292;
6398
+ }
6399
+ } else {
6400
+ if (yych <= 0xEF) {
6401
+ if (yych <= 0xE0)
6402
+ goto yy293;
6403
+ if (yych == 0xED)
6404
+ goto yy295;
6405
+ goto yy294;
6406
+ } else {
6407
+ if (yych <= 0xF0)
6408
+ goto yy296;
6409
+ if (yych <= 0xF3)
6410
+ goto yy297;
6411
+ if (yych <= 0xF4)
6412
+ goto yy298;
6413
+ goto yy231;
6414
+ }
6415
+ }
6416
+ }
6417
+ yy326:
6418
+ ++p;
6419
+ yych = *p;
6420
+ if (yybm[0 + yych] & 128) {
6421
+ goto yy322;
6422
+ }
6423
+ if (yych <= 0xEC) {
6424
+ if (yych <= 0xC1) {
6425
+ if (yych <= 0x00)
6426
+ goto yy231;
6427
+ if (yych <= ']')
6428
+ goto yy334;
6429
+ goto yy231;
6430
+ } else {
6431
+ if (yych <= 0xDF)
6432
+ goto yy327;
6433
+ if (yych <= 0xE0)
6434
+ goto yy328;
6435
+ goto yy329;
6436
+ }
6437
+ } else {
6438
+ if (yych <= 0xF0) {
6439
+ if (yych <= 0xED)
6440
+ goto yy330;
6441
+ if (yych <= 0xEF)
6442
+ goto yy329;
6443
+ goto yy331;
6444
+ } else {
6445
+ if (yych <= 0xF3)
6446
+ goto yy332;
6447
+ if (yych <= 0xF4)
6448
+ goto yy333;
6449
+ goto yy231;
6450
+ }
6451
+ }
6452
+ yy327:
6453
+ ++p;
6454
+ yych = *p;
6455
+ if (yych <= 0x7F)
6456
+ goto yy231;
6457
+ if (yych <= 0xBF)
6458
+ goto yy322;
6459
+ goto yy231;
6460
+ yy328:
6461
+ ++p;
6462
+ yych = *p;
6463
+ if (yych <= 0x9F)
6464
+ goto yy231;
6465
+ if (yych <= 0xBF)
6466
+ goto yy327;
6467
+ goto yy231;
6468
+ yy329:
6469
+ ++p;
6470
+ yych = *p;
6471
+ if (yych <= 0x7F)
6472
+ goto yy231;
6473
+ if (yych <= 0xBF)
6474
+ goto yy327;
6475
+ goto yy231;
6476
+ yy330:
6477
+ ++p;
6478
+ yych = *p;
6479
+ if (yych <= 0x7F)
6480
+ goto yy231;
6481
+ if (yych <= 0x9F)
6482
+ goto yy327;
6483
+ goto yy231;
6484
+ yy331:
6485
+ ++p;
6486
+ yych = *p;
6487
+ if (yych <= 0x8F)
6488
+ goto yy231;
6489
+ if (yych <= 0xBF)
6490
+ goto yy329;
6491
+ goto yy231;
6492
+ yy332:
6493
+ ++p;
6494
+ yych = *p;
6495
+ if (yych <= 0x7F)
6496
+ goto yy231;
6497
+ if (yych <= 0xBF)
6498
+ goto yy329;
6499
+ goto yy231;
6500
+ yy333:
6501
+ ++p;
6502
+ yych = *p;
6503
+ if (yych <= 0x7F)
6504
+ goto yy231;
6505
+ if (yych <= 0x8F)
6506
+ goto yy329;
6507
+ goto yy231;
6508
+ yy334:
6509
+ ++p;
6510
+ yych = *p;
6511
+ if (yych <= 0xE0) {
6512
+ if (yych <= '>') {
6513
+ if (yych <= 0x00)
6514
+ goto yy231;
6515
+ if (yych <= '=')
6516
+ goto yy322;
6517
+ goto yy252;
6518
+ } else {
6519
+ if (yych <= 0x7F)
6520
+ goto yy322;
6521
+ if (yych <= 0xC1)
6522
+ goto yy231;
6523
+ if (yych <= 0xDF)
6524
+ goto yy327;
6525
+ goto yy328;
6526
+ }
6527
+ } else {
6528
+ if (yych <= 0xEF) {
6529
+ if (yych == 0xED)
6530
+ goto yy330;
6531
+ goto yy329;
6532
+ } else {
6533
+ if (yych <= 0xF0)
6534
+ goto yy331;
6535
+ if (yych <= 0xF3)
6536
+ goto yy332;
6537
+ if (yych <= 0xF4)
6538
+ goto yy333;
6539
+ goto yy231;
6540
+ }
6541
+ }
6542
+ }
6543
+}
6544
+
6545
+// Try to match an HTML block tag start line, returning
6546
+// an integer code for the type of block (1-6, matching the spec).
6547
+// #7 is handled by a separate function, below.
6548
+bufsize_t _scan_html_block_start(const unsigned char *p) {
6549
+ const unsigned char *marker = NULL;
6550
+
6551
+ {
6552
+ unsigned char yych;
6553
+ yych = *p;
6554
+ if (yych == '<')
6555
+ goto yy339;
6556
+ ++p;
6557
+ yy338 : { return 0; }
6558
+ yy339:
6559
+ yych = *(marker = ++p);
6560
+ switch (yych) {
6561
+ case '!':
6562
+ goto yy340;
6563
+ case '/':
6564
+ goto yy342;
6565
+ case '?':
6566
+ goto yy343;
6567
+ case 'A':
6568
+ case 'a':
6569
+ goto yy345;
6570
+ case 'B':
6571
+ case 'b':
6572
+ goto yy346;
6573
+ case 'C':
6574
+ case 'c':
6575
+ goto yy347;
6576
+ case 'D':
6577
+ case 'd':
6578
+ goto yy348;
6579
+ case 'F':
6580
+ case 'f':
6581
+ goto yy349;
6582
+ case 'H':
6583
+ case 'h':
6584
+ goto yy350;
6585
+ case 'I':
6586
+ case 'i':
6587
+ goto yy351;
6588
+ case 'L':
6589
+ case 'l':
6590
+ goto yy352;
6591
+ case 'M':
6592
+ case 'm':
6593
+ goto yy353;
6594
+ case 'N':
6595
+ case 'n':
6596
+ goto yy354;
6597
+ case 'O':
6598
+ case 'o':
6599
+ goto yy355;
6600
+ case 'P':
6601
+ case 'p':
6602
+ goto yy356;
6603
+ case 'S':
6604
+ case 's':
6605
+ goto yy357;
6606
+ case 'T':
6607
+ case 't':
6608
+ goto yy358;
6609
+ case 'U':
6610
+ case 'u':
6611
+ goto yy359;
6612
+ default:
6613
+ goto yy338;
6614
+ }
6615
+ yy340:
6616
+ yych = *++p;
6617
+ if (yych <= '@') {
6618
+ if (yych == '-')
6619
+ goto yy360;
6620
+ } else {
6621
+ if (yych <= 'Z')
6622
+ goto yy361;
6623
+ if (yych <= '[')
6624
+ goto yy363;
6625
+ }
6626
+ yy341:
6627
+ p = marker;
6628
+ goto yy338;
6629
+ yy342:
6630
+ yych = *++p;
6631
+ switch (yych) {
6632
+ case 'A':
6633
+ case 'a':
6634
+ goto yy345;
6635
+ case 'B':
6636
+ case 'b':
6637
+ goto yy346;
6638
+ case 'C':
6639
+ case 'c':
6640
+ goto yy347;
6641
+ case 'D':
6642
+ case 'd':
6643
+ goto yy348;
6644
+ case 'F':
6645
+ case 'f':
6646
+ goto yy349;
6647
+ case 'H':
6648
+ case 'h':
6649
+ goto yy350;
6650
+ case 'I':
6651
+ case 'i':
6652
+ goto yy351;
6653
+ case 'L':
6654
+ case 'l':
6655
+ goto yy352;
6656
+ case 'M':
6657
+ case 'm':
6658
+ goto yy353;
6659
+ case 'N':
6660
+ case 'n':
6661
+ goto yy354;
6662
+ case 'O':
6663
+ case 'o':
6664
+ goto yy355;
6665
+ case 'P':
6666
+ case 'p':
6667
+ goto yy364;
6668
+ case 'S':
6669
+ case 's':
6670
+ goto yy365;
6671
+ case 'T':
6672
+ case 't':
6673
+ goto yy358;
6674
+ case 'U':
6675
+ case 'u':
6676
+ goto yy359;
6677
+ default:
6678
+ goto yy341;
6679
+ }
6680
+ yy343:
6681
+ ++p;
6682
+ { return 3; }
6683
+ yy345:
6684
+ yych = *++p;
6685
+ if (yych <= 'S') {
6686
+ if (yych <= 'D') {
6687
+ if (yych <= 'C')
6688
+ goto yy341;
6689
+ goto yy366;
6690
+ } else {
6691
+ if (yych <= 'Q')
6692
+ goto yy341;
6693
+ if (yych <= 'R')
6694
+ goto yy367;
6695
+ goto yy368;
6696
+ }
6697
+ } else {
6698
+ if (yych <= 'q') {
6699
+ if (yych == 'd')
6700
+ goto yy366;
6701
+ goto yy341;
6702
+ } else {
6703
+ if (yych <= 'r')
6704
+ goto yy367;
6705
+ if (yych <= 's')
6706
+ goto yy368;
6707
+ goto yy341;
6708
+ }
6709
+ }
6710
+ yy346:
6711
+ yych = *++p;
6712
+ if (yych <= 'O') {
6713
+ if (yych <= 'K') {
6714
+ if (yych == 'A')
6715
+ goto yy369;
6716
+ goto yy341;
6717
+ } else {
6718
+ if (yych <= 'L')
6719
+ goto yy370;
6720
+ if (yych <= 'N')
6721
+ goto yy341;
6722
+ goto yy371;
6723
+ }
6724
+ } else {
6725
+ if (yych <= 'k') {
6726
+ if (yych == 'a')
6727
+ goto yy369;
6728
+ goto yy341;
6729
+ } else {
6730
+ if (yych <= 'l')
6731
+ goto yy370;
6732
+ if (yych == 'o')
6733
+ goto yy371;
6734
+ goto yy341;
6735
+ }
6736
+ }
6737
+ yy347:
6738
+ yych = *++p;
6739
+ if (yych <= 'O') {
6740
+ if (yych <= 'D') {
6741
+ if (yych == 'A')
6742
+ goto yy372;
6743
+ goto yy341;
6744
+ } else {
6745
+ if (yych <= 'E')
6746
+ goto yy373;
6747
+ if (yych <= 'N')
6748
+ goto yy341;
6749
+ goto yy374;
6750
+ }
6751
+ } else {
6752
+ if (yych <= 'd') {
6753
+ if (yych == 'a')
6754
+ goto yy372;
6755
+ goto yy341;
6756
+ } else {
6757
+ if (yych <= 'e')
6758
+ goto yy373;
6759
+ if (yych == 'o')
6760
+ goto yy374;
6761
+ goto yy341;
6762
+ }
6763
+ }
6764
+ yy348:
6765
+ yych = *++p;
6766
+ switch (yych) {
6767
+ case 'D':
6768
+ case 'L':
6769
+ case 'T':
6770
+ case 'd':
6771
+ case 'l':
6772
+ case 't':
6773
+ goto yy375;
6774
+ case 'E':
6775
+ case 'e':
6776
+ goto yy376;
6777
+ case 'I':
6778
+ case 'i':
6779
+ goto yy377;
6780
+ default:
6781
+ goto yy341;
6782
+ }
6783
+ yy349:
6784
+ yych = *++p;
6785
+ if (yych <= 'R') {
6786
+ if (yych <= 'N') {
6787
+ if (yych == 'I')
6788
+ goto yy378;
6789
+ goto yy341;
6790
+ } else {
6791
+ if (yych <= 'O')
6792
+ goto yy379;
6793
+ if (yych <= 'Q')
6794
+ goto yy341;
6795
+ goto yy380;
6796
+ }
6797
+ } else {
6798
+ if (yych <= 'n') {
6799
+ if (yych == 'i')
6800
+ goto yy378;
6801
+ goto yy341;
6802
+ } else {
6803
+ if (yych <= 'o')
6804
+ goto yy379;
6805
+ if (yych == 'r')
6806
+ goto yy380;
6807
+ goto yy341;
6808
+ }
6809
+ }
6810
+ yy350:
6811
+ yych = *++p;
6812
+ if (yych <= 'S') {
6813
+ if (yych <= 'D') {
6814
+ if (yych <= '0')
6815
+ goto yy341;
6816
+ if (yych <= '6')
6817
+ goto yy375;
6818
+ goto yy341;
6819
+ } else {
6820
+ if (yych <= 'E')
6821
+ goto yy381;
6822
+ if (yych == 'R')
6823
+ goto yy375;
6824
+ goto yy341;
6825
+ }
6826
+ } else {
6827
+ if (yych <= 'q') {
6828
+ if (yych <= 'T')
6829
+ goto yy382;
6830
+ if (yych == 'e')
6831
+ goto yy381;
6832
+ goto yy341;
6833
+ } else {
6834
+ if (yych <= 'r')
6835
+ goto yy375;
6836
+ if (yych == 't')
6837
+ goto yy382;
6838
+ goto yy341;
6839
+ }
6840
+ }
6841
+ yy351:
6842
+ yych = *++p;
6843
+ if (yych == 'F')
6844
+ goto yy383;
6845
+ if (yych == 'f')
6846
+ goto yy383;
6847
+ goto yy341;
6848
+ yy352:
6849
+ yych = *++p;
6850
+ if (yych <= 'I') {
6851
+ if (yych == 'E')
6852
+ goto yy384;
6853
+ if (yych <= 'H')
6854
+ goto yy341;
6855
+ goto yy385;
6856
+ } else {
6857
+ if (yych <= 'e') {
6858
+ if (yych <= 'd')
6859
+ goto yy341;
6860
+ goto yy384;
6861
+ } else {
6862
+ if (yych == 'i')
6863
+ goto yy385;
6864
+ goto yy341;
6865
+ }
6866
+ }
6867
+ yy353:
6868
+ yych = *++p;
6869
+ if (yych <= 'E') {
6870
+ if (yych == 'A')
6871
+ goto yy386;
6872
+ if (yych <= 'D')
6873
+ goto yy341;
6874
+ goto yy387;
6875
+ } else {
6876
+ if (yych <= 'a') {
6877
+ if (yych <= '`')
6878
+ goto yy341;
6879
+ goto yy386;
6880
+ } else {
6881
+ if (yych == 'e')
6882
+ goto yy387;
6883
+ goto yy341;
6884
+ }
6885
+ }
6886
+ yy354:
6887
+ yych = *++p;
6888
+ if (yych <= 'O') {
6889
+ if (yych == 'A')
6890
+ goto yy388;
6891
+ if (yych <= 'N')
6892
+ goto yy341;
6893
+ goto yy389;
6894
+ } else {
6895
+ if (yych <= 'a') {
6896
+ if (yych <= '`')
6897
+ goto yy341;
6898
+ goto yy388;
6899
+ } else {
6900
+ if (yych == 'o')
6901
+ goto yy389;
6902
+ goto yy341;
6903
+ }
6904
+ }
6905
+ yy355:
6906
+ yych = *++p;
6907
+ if (yych <= 'P') {
6908
+ if (yych == 'L')
6909
+ goto yy375;
6910
+ if (yych <= 'O')
6911
+ goto yy341;
6912
+ goto yy390;
6913
+ } else {
6914
+ if (yych <= 'l') {
6915
+ if (yych <= 'k')
6916
+ goto yy341;
6917
+ goto yy375;
6918
+ } else {
6919
+ if (yych == 'p')
6920
+ goto yy390;
6921
+ goto yy341;
6922
+ }
6923
+ }
6924
+ yy356:
6925
+ yych = *++p;
6926
+ if (yych <= '>') {
6927
+ if (yych <= ' ') {
6928
+ if (yych <= 0x08)
6929
+ goto yy341;
6930
+ if (yych <= '\r')
6931
+ goto yy391;
6932
+ if (yych <= 0x1F)
6933
+ goto yy341;
6934
+ goto yy391;
6935
+ } else {
6936
+ if (yych == '/')
6937
+ goto yy393;
6938
+ if (yych <= '=')
6939
+ goto yy341;
6940
+ goto yy391;
6941
+ }
6942
+ } else {
6943
+ if (yych <= 'R') {
6944
+ if (yych == 'A')
6945
+ goto yy394;
6946
+ if (yych <= 'Q')
6947
+ goto yy341;
6948
+ goto yy395;
6949
+ } else {
6950
+ if (yych <= 'a') {
6951
+ if (yych <= '`')
6952
+ goto yy341;
6953
+ goto yy394;
6954
+ } else {
6955
+ if (yych == 'r')
6956
+ goto yy395;
6957
+ goto yy341;
6958
+ }
6959
+ }
6960
+ }
6961
+ yy357:
6962
+ yych = *++p;
6963
+ switch (yych) {
6964
+ case 'C':
6965
+ case 'c':
6966
+ goto yy396;
6967
+ case 'E':
6968
+ case 'e':
6969
+ goto yy397;
6970
+ case 'O':
6971
+ case 'o':
6972
+ goto yy398;
6973
+ case 'T':
6974
+ case 't':
6975
+ goto yy399;
6976
+ case 'U':
6977
+ case 'u':
6978
+ goto yy400;
6979
+ default:
6980
+ goto yy341;
6981
+ }
6982
+ yy358:
6983
+ yych = *++p;
6984
+ switch (yych) {
6985
+ case 'A':
6986
+ case 'a':
6987
+ goto yy401;
6988
+ case 'B':
6989
+ case 'b':
6990
+ goto yy402;
6991
+ case 'D':
6992
+ case 'd':
6993
+ goto yy375;
6994
+ case 'F':
6995
+ case 'f':
6996
+ goto yy403;
6997
+ case 'H':
6998
+ case 'h':
6999
+ goto yy404;
7000
+ case 'I':
7001
+ case 'i':
7002
+ goto yy405;
7003
+ case 'R':
7004
+ case 'r':
7005
+ goto yy406;
7006
+ default:
7007
+ goto yy341;
7008
+ }
7009
+ yy359:
7010
+ yych = *++p;
7011
+ if (yych == 'L')
7012
+ goto yy375;
7013
+ if (yych == 'l')
7014
+ goto yy375;
7015
+ goto yy341;
7016
+ yy360:
7017
+ yych = *++p;
7018
+ if (yych == '-')
7019
+ goto yy407;
7020
+ goto yy341;
7021
+ yy361:
7022
+ ++p;
7023
+ { return 4; }
7024
+ yy363:
7025
+ yych = *++p;
7026
+ if (yych == 'C')
7027
+ goto yy409;
7028
+ if (yych == 'c')
7029
+ goto yy409;
7030
+ goto yy341;
7031
+ yy364:
7032
+ yych = *++p;
7033
+ if (yych <= '/') {
7034
+ if (yych <= 0x1F) {
7035
+ if (yych <= 0x08)
7036
+ goto yy341;
7037
+ if (yych <= '\r')
7038
+ goto yy391;
7039
+ goto yy341;
7040
+ } else {
7041
+ if (yych <= ' ')
7042
+ goto yy391;
7043
+ if (yych <= '.')
7044
+ goto yy341;
7045
+ goto yy393;
7046
+ }
7047
+ } else {
7048
+ if (yych <= '@') {
7049
+ if (yych == '>')
7050
+ goto yy391;
7051
+ goto yy341;
7052
+ } else {
7053
+ if (yych <= 'A')
7054
+ goto yy394;
7055
+ if (yych == 'a')
7056
+ goto yy394;
7057
+ goto yy341;
7058
+ }
7059
+ }
7060
+ yy365:
7061
+ yych = *++p;
7062
+ if (yych <= 'U') {
7063
+ if (yych <= 'N') {
7064
+ if (yych == 'E')
7065
+ goto yy397;
7066
+ goto yy341;
7067
+ } else {
7068
+ if (yych <= 'O')
7069
+ goto yy398;
7070
+ if (yych <= 'T')
7071
+ goto yy341;
7072
+ goto yy400;
7073
+ }
7074
+ } else {
7075
+ if (yych <= 'n') {
7076
+ if (yych == 'e')
7077
+ goto yy397;
7078
+ goto yy341;
7079
+ } else {
7080
+ if (yych <= 'o')
7081
+ goto yy398;
7082
+ if (yych == 'u')
7083
+ goto yy400;
7084
+ goto yy341;
7085
+ }
7086
+ }
7087
+ yy366:
7088
+ yych = *++p;
7089
+ if (yych == 'D')
7090
+ goto yy410;
7091
+ if (yych == 'd')
7092
+ goto yy410;
7093
+ goto yy341;
7094
+ yy367:
7095
+ yych = *++p;
7096
+ if (yych == 'T')
7097
+ goto yy411;
7098
+ if (yych == 't')
7099
+ goto yy411;
7100
+ goto yy341;
7101
+ yy368:
7102
+ yych = *++p;
7103
+ if (yych == 'I')
7104
+ goto yy412;
7105
+ if (yych == 'i')
7106
+ goto yy412;
7107
+ goto yy341;
7108
+ yy369:
7109
+ yych = *++p;
7110
+ if (yych == 'S')
7111
+ goto yy413;
7112
+ if (yych == 's')
7113
+ goto yy413;
7114
+ goto yy341;
7115
+ yy370:
7116
+ yych = *++p;
7117
+ if (yych == 'O')
7118
+ goto yy414;
7119
+ if (yych == 'o')
7120
+ goto yy414;
7121
+ goto yy341;
7122
+ yy371:
7123
+ yych = *++p;
7124
+ if (yych == 'D')
7125
+ goto yy415;
7126
+ if (yych == 'd')
7127
+ goto yy415;
7128
+ goto yy341;
7129
+ yy372:
7130
+ yych = *++p;
7131
+ if (yych == 'P')
7132
+ goto yy416;
7133
+ if (yych == 'p')
7134
+ goto yy416;
7135
+ goto yy341;
7136
+ yy373:
7137
+ yych = *++p;
7138
+ if (yych == 'N')
7139
+ goto yy417;
7140
+ if (yych == 'n')
7141
+ goto yy417;
7142
+ goto yy341;
7143
+ yy374:
7144
+ yych = *++p;
7145
+ if (yych == 'L')
7146
+ goto yy418;
7147
+ if (yych == 'l')
7148
+ goto yy418;
7149
+ goto yy341;
7150
+ yy375:
7151
+ yych = *++p;
7152
+ if (yych <= ' ') {
7153
+ if (yych <= 0x08)
7154
+ goto yy341;
7155
+ if (yych <= '\r')
7156
+ goto yy391;
7157
+ if (yych <= 0x1F)
7158
+ goto yy341;
7159
+ goto yy391;
7160
+ } else {
7161
+ if (yych <= '/') {
7162
+ if (yych <= '.')
7163
+ goto yy341;
7164
+ goto yy393;
7165
+ } else {
7166
+ if (yych == '>')
7167
+ goto yy391;
7168
+ goto yy341;
7169
+ }
7170
+ }
7171
+ yy376:
7172
+ yych = *++p;
7173
+ if (yych == 'T')
7174
+ goto yy419;
7175
+ if (yych == 't')
7176
+ goto yy419;
7177
+ goto yy341;
7178
+ yy377:
7179
+ yych = *++p;
7180
+ if (yych <= 'V') {
7181
+ if (yych <= 'Q') {
7182
+ if (yych == 'A')
7183
+ goto yy420;
7184
+ goto yy341;
7185
+ } else {
7186
+ if (yych <= 'R')
7187
+ goto yy375;
7188
+ if (yych <= 'U')
7189
+ goto yy341;
7190
+ goto yy375;
7191
+ }
7192
+ } else {
7193
+ if (yych <= 'q') {
7194
+ if (yych == 'a')
7195
+ goto yy420;
7196
+ goto yy341;
7197
+ } else {
7198
+ if (yych <= 'r')
7199
+ goto yy375;
7200
+ if (yych == 'v')
7201
+ goto yy375;
7202
+ goto yy341;
7203
+ }
7204
+ }
7205
+ yy378:
7206
+ yych = *++p;
7207
+ if (yych <= 'G') {
7208
+ if (yych == 'E')
7209
+ goto yy421;
7210
+ if (yych <= 'F')
7211
+ goto yy341;
7212
+ goto yy422;
7213
+ } else {
7214
+ if (yych <= 'e') {
7215
+ if (yych <= 'd')
7216
+ goto yy341;
7217
+ goto yy421;
7218
+ } else {
7219
+ if (yych == 'g')
7220
+ goto yy422;
7221
+ goto yy341;
7222
+ }
7223
+ }
7224
+ yy379:
7225
+ yych = *++p;
7226
+ if (yych <= 'R') {
7227
+ if (yych == 'O')
7228
+ goto yy417;
7229
+ if (yych <= 'Q')
7230
+ goto yy341;
7231
+ goto yy423;
7232
+ } else {
7233
+ if (yych <= 'o') {
7234
+ if (yych <= 'n')
7235
+ goto yy341;
7236
+ goto yy417;
7237
+ } else {
7238
+ if (yych == 'r')
7239
+ goto yy423;
7240
+ goto yy341;
7241
+ }
7242
+ }
7243
+ yy380:
7244
+ yych = *++p;
7245
+ if (yych == 'A')
7246
+ goto yy424;
7247
+ if (yych == 'a')
7248
+ goto yy424;
7249
+ goto yy341;
7250
+ yy381:
7251
+ yych = *++p;
7252
+ if (yych == 'A')
7253
+ goto yy425;
7254
+ if (yych == 'a')
7255
+ goto yy425;
7256
+ goto yy341;
7257
+ yy382:
7258
+ yych = *++p;
7259
+ if (yych == 'M')
7260
+ goto yy359;
7261
+ if (yych == 'm')
7262
+ goto yy359;
7263
+ goto yy341;
7264
+ yy383:
7265
+ yych = *++p;
7266
+ if (yych == 'R')
7267
+ goto yy426;
7268
+ if (yych == 'r')
7269
+ goto yy426;
7270
+ goto yy341;
7271
+ yy384:
7272
+ yych = *++p;
7273
+ if (yych == 'G')
7274
+ goto yy427;
7275
+ if (yych == 'g')
7276
+ goto yy427;
7277
+ goto yy341;
7278
+ yy385:
7279
+ yych = *++p;
7280
+ if (yych <= '/') {
7281
+ if (yych <= 0x1F) {
7282
+ if (yych <= 0x08)
7283
+ goto yy341;
7284
+ if (yych <= '\r')
7285
+ goto yy391;
7286
+ goto yy341;
7287
+ } else {
7288
+ if (yych <= ' ')
7289
+ goto yy391;
7290
+ if (yych <= '.')
7291
+ goto yy341;
7292
+ goto yy393;
7293
+ }
7294
+ } else {
7295
+ if (yych <= 'M') {
7296
+ if (yych == '>')
7297
+ goto yy391;
7298
+ goto yy341;
7299
+ } else {
7300
+ if (yych <= 'N')
7301
+ goto yy428;
7302
+ if (yych == 'n')
7303
+ goto yy428;
7304
+ goto yy341;
7305
+ }
7306
+ }
7307
+ yy386:
7308
+ yych = *++p;
7309
+ if (yych == 'I')
7310
+ goto yy429;
7311
+ if (yych == 'i')
7312
+ goto yy429;
7313
+ goto yy341;
7314
+ yy387:
7315
+ yych = *++p;
7316
+ if (yych <= 'T') {
7317
+ if (yych == 'N')
7318
+ goto yy430;
7319
+ if (yych <= 'S')
7320
+ goto yy341;
7321
+ goto yy431;
7322
+ } else {
7323
+ if (yych <= 'n') {
7324
+ if (yych <= 'm')
7325
+ goto yy341;
7326
+ goto yy430;
7327
+ } else {
7328
+ if (yych == 't')
7329
+ goto yy431;
7330
+ goto yy341;
7331
+ }
7332
+ }
7333
+ yy388:
7334
+ yych = *++p;
7335
+ if (yych == 'V')
7336
+ goto yy375;
7337
+ if (yych == 'v')
7338
+ goto yy375;
7339
+ goto yy341;
7340
+ yy389:
7341
+ yych = *++p;
7342
+ if (yych == 'F')
7343
+ goto yy432;
7344
+ if (yych == 'f')
7345
+ goto yy432;
7346
+ goto yy341;
7347
+ yy390:
7348
+ yych = *++p;
7349
+ if (yych == 'T')
7350
+ goto yy433;
7351
+ if (yych == 't')
7352
+ goto yy433;
7353
+ goto yy341;
7354
+ yy391:
7355
+ ++p;
7356
+ { return 6; }
7357
+ yy393:
7358
+ yych = *++p;
7359
+ if (yych == '>')
7360
+ goto yy391;
7361
+ goto yy341;
7362
+ yy394:
7363
+ yych = *++p;
7364
+ if (yych == 'R')
7365
+ goto yy434;
7366
+ if (yych == 'r')
7367
+ goto yy434;
7368
+ goto yy341;
7369
+ yy395:
7370
+ yych = *++p;
7371
+ if (yych == 'E')
7372
+ goto yy435;
7373
+ if (yych == 'e')
7374
+ goto yy435;
7375
+ goto yy341;
7376
+ yy396:
7377
+ yych = *++p;
7378
+ if (yych == 'R')
7379
+ goto yy436;
7380
+ if (yych == 'r')
7381
+ goto yy436;
7382
+ goto yy341;
7383
+ yy397:
7384
+ yych = *++p;
7385
+ if (yych == 'C')
7386
+ goto yy416;
7387
+ if (yych == 'c')
7388
+ goto yy416;
7389
+ goto yy341;
7390
+ yy398:
7391
+ yych = *++p;
7392
+ if (yych == 'U')
7393
+ goto yy437;
7394
+ if (yych == 'u')
7395
+ goto yy437;
7396
+ goto yy341;
7397
+ yy399:
7398
+ yych = *++p;
7399
+ if (yych == 'Y')
7400
+ goto yy438;
7401
+ if (yych == 'y')
7402
+ goto yy438;
7403
+ goto yy341;
7404
+ yy400:
7405
+ yych = *++p;
7406
+ if (yych == 'M')
7407
+ goto yy439;
7408
+ if (yych == 'm')
7409
+ goto yy439;
7410
+ goto yy341;
7411
+ yy401:
7412
+ yych = *++p;
7413
+ if (yych == 'B')
7414
+ goto yy440;
7415
+ if (yych == 'b')
7416
+ goto yy440;
7417
+ goto yy341;
7418
+ yy402:
7419
+ yych = *++p;
7420
+ if (yych == 'O')
7421
+ goto yy371;
7422
+ if (yych == 'o')
7423
+ goto yy371;
7424
+ goto yy341;
7425
+ yy403:
7426
+ yych = *++p;
7427
+ if (yych == 'O')
7428
+ goto yy441;
7429
+ if (yych == 'o')
7430
+ goto yy441;
7431
+ goto yy341;
7432
+ yy404:
7433
+ yych = *++p;
7434
+ if (yych <= '/') {
7435
+ if (yych <= 0x1F) {
7436
+ if (yych <= 0x08)
7437
+ goto yy341;
7438
+ if (yych <= '\r')
7439
+ goto yy391;
7440
+ goto yy341;
7441
+ } else {
7442
+ if (yych <= ' ')
7443
+ goto yy391;
7444
+ if (yych <= '.')
7445
+ goto yy341;
7446
+ goto yy393;
7447
+ }
7448
+ } else {
7449
+ if (yych <= 'D') {
7450
+ if (yych == '>')
7451
+ goto yy391;
7452
+ goto yy341;
7453
+ } else {
7454
+ if (yych <= 'E')
7455
+ goto yy442;
7456
+ if (yych == 'e')
7457
+ goto yy442;
7458
+ goto yy341;
7459
+ }
7460
+ }
7461
+ yy405:
7462
+ yych = *++p;
7463
+ if (yych == 'T')
7464
+ goto yy440;
7465
+ if (yych == 't')
7466
+ goto yy440;
7467
+ goto yy341;
7468
+ yy406:
7469
+ yych = *++p;
7470
+ if (yych <= '/') {
7471
+ if (yych <= 0x1F) {
7472
+ if (yych <= 0x08)
7473
+ goto yy341;
7474
+ if (yych <= '\r')
7475
+ goto yy391;
7476
+ goto yy341;
7477
+ } else {
7478
+ if (yych <= ' ')
7479
+ goto yy391;
7480
+ if (yych <= '.')
7481
+ goto yy341;
7482
+ goto yy393;
7483
+ }
7484
+ } else {
7485
+ if (yych <= '@') {
7486
+ if (yych == '>')
7487
+ goto yy391;
7488
+ goto yy341;
7489
+ } else {
7490
+ if (yych <= 'A')
7491
+ goto yy443;
7492
+ if (yych == 'a')
7493
+ goto yy443;
7494
+ goto yy341;
7495
+ }
7496
+ }
7497
+ yy407:
7498
+ ++p;
7499
+ { return 2; }
7500
+ yy409:
7501
+ yych = *++p;
7502
+ if (yych == 'D')
7503
+ goto yy444;
7504
+ if (yych == 'd')
7505
+ goto yy444;
7506
+ goto yy341;
7507
+ yy410:
7508
+ yych = *++p;
7509
+ if (yych == 'R')
7510
+ goto yy445;
7511
+ if (yych == 'r')
7512
+ goto yy445;
7513
+ goto yy341;
7514
+ yy411:
7515
+ yych = *++p;
7516
+ if (yych == 'I')
7517
+ goto yy446;
7518
+ if (yych == 'i')
7519
+ goto yy446;
7520
+ goto yy341;
7521
+ yy412:
7522
+ yych = *++p;
7523
+ if (yych == 'D')
7524
+ goto yy447;
7525
+ if (yych == 'd')
7526
+ goto yy447;
7527
+ goto yy341;
7528
+ yy413:
7529
+ yych = *++p;
7530
+ if (yych == 'E')
7531
+ goto yy448;
7532
+ if (yych == 'e')
7533
+ goto yy448;
7534
+ goto yy341;
7535
+ yy414:
7536
+ yych = *++p;
7537
+ if (yych == 'C')
7538
+ goto yy449;
7539
+ if (yych == 'c')
7540
+ goto yy449;
7541
+ goto yy341;
7542
+ yy415:
7543
+ yych = *++p;
7544
+ if (yych == 'Y')
7545
+ goto yy375;
7546
+ if (yych == 'y')
7547
+ goto yy375;
7548
+ goto yy341;
7549
+ yy416:
7550
+ yych = *++p;
7551
+ if (yych == 'T')
7552
+ goto yy450;
7553
+ if (yych == 't')
7554
+ goto yy450;
7555
+ goto yy341;
7556
+ yy417:
7557
+ yych = *++p;
7558
+ if (yych == 'T')
7559
+ goto yy451;
7560
+ if (yych == 't')
7561
+ goto yy451;
7562
+ goto yy341;
7563
+ yy418:
7564
+ yych = *++p;
7565
+ if (yych <= '/') {
7566
+ if (yych <= 0x1F) {
7567
+ if (yych <= 0x08)
7568
+ goto yy341;
7569
+ if (yych <= '\r')
7570
+ goto yy391;
7571
+ goto yy341;
7572
+ } else {
7573
+ if (yych <= ' ')
7574
+ goto yy391;
7575
+ if (yych <= '.')
7576
+ goto yy341;
7577
+ goto yy393;
7578
+ }
7579
+ } else {
7580
+ if (yych <= 'F') {
7581
+ if (yych == '>')
7582
+ goto yy391;
7583
+ goto yy341;
7584
+ } else {
7585
+ if (yych <= 'G')
7586
+ goto yy452;
7587
+ if (yych == 'g')
7588
+ goto yy452;
7589
+ goto yy341;
7590
+ }
7591
+ }
7592
+ yy419:
7593
+ yych = *++p;
7594
+ if (yych == 'A')
7595
+ goto yy453;
7596
+ if (yych == 'a')
7597
+ goto yy453;
7598
+ goto yy341;
7599
+ yy420:
7600
+ yych = *++p;
7601
+ if (yych == 'L')
7602
+ goto yy454;
7603
+ if (yych == 'l')
7604
+ goto yy454;
7605
+ goto yy341;
7606
+ yy421:
7607
+ yych = *++p;
7608
+ if (yych == 'L')
7609
+ goto yy455;
7610
+ if (yych == 'l')
7611
+ goto yy455;
7612
+ goto yy341;
7613
+ yy422:
7614
+ yych = *++p;
7615
+ if (yych <= 'U') {
7616
+ if (yych == 'C')
7617
+ goto yy456;
7618
+ if (yych <= 'T')
7619
+ goto yy341;
7620
+ goto yy457;
7621
+ } else {
7622
+ if (yych <= 'c') {
7623
+ if (yych <= 'b')
7624
+ goto yy341;
7625
+ goto yy456;
7626
+ } else {
7627
+ if (yych == 'u')
7628
+ goto yy457;
7629
+ goto yy341;
7630
+ }
7631
+ }
7632
+ yy423:
7633
+ yych = *++p;
7634
+ if (yych == 'M')
7635
+ goto yy375;
7636
+ if (yych == 'm')
7637
+ goto yy375;
7638
+ goto yy341;
7639
+ yy424:
7640
+ yych = *++p;
7641
+ if (yych == 'M')
7642
+ goto yy458;
7643
+ if (yych == 'm')
7644
+ goto yy458;
7645
+ goto yy341;
7646
+ yy425:
7647
+ yych = *++p;
7648
+ if (yych == 'D')
7649
+ goto yy459;
7650
+ if (yych == 'd')
7651
+ goto yy459;
7652
+ goto yy341;
7653
+ yy426:
7654
+ yych = *++p;
7655
+ if (yych == 'A')
7656
+ goto yy460;
7657
+ if (yych == 'a')
7658
+ goto yy460;
7659
+ goto yy341;
7660
+ yy427:
7661
+ yych = *++p;
7662
+ if (yych == 'E')
7663
+ goto yy461;
7664
+ if (yych == 'e')
7665
+ goto yy461;
7666
+ goto yy341;
7667
+ yy428:
7668
+ yych = *++p;
7669
+ if (yych == 'K')
7670
+ goto yy375;
7671
+ if (yych == 'k')
7672
+ goto yy375;
7673
+ goto yy341;
7674
+ yy429:
7675
+ yych = *++p;
7676
+ if (yych == 'N')
7677
+ goto yy375;
7678
+ if (yych == 'n')
7679
+ goto yy375;
7680
+ goto yy341;
7681
+ yy430:
7682
+ yych = *++p;
7683
+ if (yych == 'U')
7684
+ goto yy462;
7685
+ if (yych == 'u')
7686
+ goto yy462;
7687
+ goto yy341;
7688
+ yy431:
7689
+ yych = *++p;
7690
+ if (yych == 'A')
7691
+ goto yy375;
7692
+ if (yych == 'a')
7693
+ goto yy375;
7694
+ goto yy341;
7695
+ yy432:
7696
+ yych = *++p;
7697
+ if (yych == 'R')
7698
+ goto yy463;
7699
+ if (yych == 'r')
7700
+ goto yy463;
7701
+ goto yy341;
7702
+ yy433:
7703
+ yych = *++p;
7704
+ if (yych <= 'I') {
7705
+ if (yych == 'G')
7706
+ goto yy452;
7707
+ if (yych <= 'H')
7708
+ goto yy341;
7709
+ goto yy464;
7710
+ } else {
7711
+ if (yych <= 'g') {
7712
+ if (yych <= 'f')
7713
+ goto yy341;
7714
+ goto yy452;
7715
+ } else {
7716
+ if (yych == 'i')
7717
+ goto yy464;
7718
+ goto yy341;
7719
+ }
7720
+ }
7721
+ yy434:
7722
+ yych = *++p;
7723
+ if (yych == 'A')
7724
+ goto yy423;
7725
+ if (yych == 'a')
7726
+ goto yy423;
7727
+ goto yy341;
7728
+ yy435:
7729
+ yych = *++p;
7730
+ if (yych <= 0x1F) {
7731
+ if (yych <= 0x08)
7732
+ goto yy341;
7733
+ if (yych <= '\r')
7734
+ goto yy465;
7735
+ goto yy341;
7736
+ } else {
7737
+ if (yych <= ' ')
7738
+ goto yy465;
7739
+ if (yych == '>')
7740
+ goto yy465;
7741
+ goto yy341;
7742
+ }
7743
+ yy436:
7744
+ yych = *++p;
7745
+ if (yych == 'I')
7746
+ goto yy467;
7747
+ if (yych == 'i')
7748
+ goto yy467;
7749
+ goto yy341;
7750
+ yy437:
7751
+ yych = *++p;
7752
+ if (yych == 'R')
7753
+ goto yy468;
7754
+ if (yych == 'r')
7755
+ goto yy468;
7756
+ goto yy341;
7757
+ yy438:
7758
+ yych = *++p;
7759
+ if (yych == 'L')
7760
+ goto yy395;
7761
+ if (yych == 'l')
7762
+ goto yy395;
7763
+ goto yy341;
7764
+ yy439:
7765
+ yych = *++p;
7766
+ if (yych == 'M')
7767
+ goto yy469;
7768
+ if (yych == 'm')
7769
+ goto yy469;
7770
+ goto yy341;
7771
+ yy440:
7772
+ yych = *++p;
7773
+ if (yych == 'L')
7774
+ goto yy447;
7775
+ if (yych == 'l')
7776
+ goto yy447;
7777
+ goto yy341;
7778
+ yy441:
7779
+ yych = *++p;
7780
+ if (yych == 'O')
7781
+ goto yy470;
7782
+ if (yych == 'o')
7783
+ goto yy470;
7784
+ goto yy341;
7785
+ yy442:
7786
+ yych = *++p;
7787
+ if (yych == 'A')
7788
+ goto yy471;
7789
+ if (yych == 'a')
7790
+ goto yy471;
7791
+ goto yy341;
7792
+ yy443:
7793
+ yych = *++p;
7794
+ if (yych == 'C')
7795
+ goto yy428;
7796
+ if (yych == 'c')
7797
+ goto yy428;
7798
+ goto yy341;
7799
+ yy444:
7800
+ yych = *++p;
7801
+ if (yych == 'A')
7802
+ goto yy472;
7803
+ if (yych == 'a')
7804
+ goto yy472;
7805
+ goto yy341;
7806
+ yy445:
7807
+ yych = *++p;
7808
+ if (yych == 'E')
7809
+ goto yy473;
7810
+ if (yych == 'e')
7811
+ goto yy473;
7812
+ goto yy341;
7813
+ yy446:
7814
+ yych = *++p;
7815
+ if (yych == 'C')
7816
+ goto yy440;
7817
+ if (yych == 'c')
7818
+ goto yy440;
7819
+ goto yy341;
7820
+ yy447:
7821
+ yych = *++p;
7822
+ if (yych == 'E')
7823
+ goto yy375;
7824
+ if (yych == 'e')
7825
+ goto yy375;
7826
+ goto yy341;
7827
+ yy448:
7828
+ yych = *++p;
7829
+ if (yych <= '/') {
7830
+ if (yych <= 0x1F) {
7831
+ if (yych <= 0x08)
7832
+ goto yy341;
7833
+ if (yych <= '\r')
7834
+ goto yy391;
7835
+ goto yy341;
7836
+ } else {
7837
+ if (yych <= ' ')
7838
+ goto yy391;
7839
+ if (yych <= '.')
7840
+ goto yy341;
7841
+ goto yy393;
7842
+ }
7843
+ } else {
7844
+ if (yych <= 'E') {
7845
+ if (yych == '>')
7846
+ goto yy391;
7847
+ goto yy341;
7848
+ } else {
7849
+ if (yych <= 'F')
7850
+ goto yy474;
7851
+ if (yych == 'f')
7852
+ goto yy474;
7853
+ goto yy341;
7854
+ }
7855
+ }
7856
+ yy449:
7857
+ yych = *++p;
7858
+ if (yych == 'K')
7859
+ goto yy475;
7860
+ if (yych == 'k')
7861
+ goto yy475;
7862
+ goto yy341;
7863
+ yy450:
7864
+ yych = *++p;
7865
+ if (yych == 'I')
7866
+ goto yy464;
7867
+ if (yych == 'i')
7868
+ goto yy464;
7869
+ goto yy341;
7870
+ yy451:
7871
+ yych = *++p;
7872
+ if (yych == 'E')
7873
+ goto yy476;
7874
+ if (yych == 'e')
7875
+ goto yy476;
7876
+ goto yy341;
7877
+ yy452:
7878
+ yych = *++p;
7879
+ if (yych == 'R')
7880
+ goto yy477;
7881
+ if (yych == 'r')
7882
+ goto yy477;
7883
+ goto yy341;
7884
+ yy453:
7885
+ yych = *++p;
7886
+ if (yych == 'I')
7887
+ goto yy478;
7888
+ if (yych == 'i')
7889
+ goto yy478;
7890
+ goto yy341;
7891
+ yy454:
7892
+ yych = *++p;
7893
+ if (yych == 'O')
7894
+ goto yy479;
7895
+ if (yych == 'o')
7896
+ goto yy479;
7897
+ goto yy341;
7898
+ yy455:
7899
+ yych = *++p;
7900
+ if (yych == 'D')
7901
+ goto yy480;
7902
+ if (yych == 'd')
7903
+ goto yy480;
7904
+ goto yy341;
7905
+ yy456:
7906
+ yych = *++p;
7907
+ if (yych == 'A')
7908
+ goto yy372;
7909
+ if (yych == 'a')
7910
+ goto yy372;
7911
+ goto yy341;
7912
+ yy457:
7913
+ yych = *++p;
7914
+ if (yych == 'R')
7915
+ goto yy447;
7916
+ if (yych == 'r')
7917
+ goto yy447;
7918
+ goto yy341;
7919
+ yy458:
7920
+ yych = *++p;
7921
+ if (yych == 'E')
7922
+ goto yy481;
7923
+ if (yych == 'e')
7924
+ goto yy481;
7925
+ goto yy341;
7926
+ yy459:
7927
+ yych = *++p;
7928
+ if (yych <= '/') {
7929
+ if (yych <= 0x1F) {
7930
+ if (yych <= 0x08)
7931
+ goto yy341;
7932
+ if (yych <= '\r')
7933
+ goto yy391;
7934
+ goto yy341;
7935
+ } else {
7936
+ if (yych <= ' ')
7937
+ goto yy391;
7938
+ if (yych <= '.')
7939
+ goto yy341;
7940
+ goto yy393;
7941
+ }
7942
+ } else {
7943
+ if (yych <= 'D') {
7944
+ if (yych == '>')
7945
+ goto yy391;
7946
+ goto yy341;
7947
+ } else {
7948
+ if (yych <= 'E')
7949
+ goto yy476;
7950
+ if (yych == 'e')
7951
+ goto yy476;
7952
+ goto yy341;
7953
+ }
7954
+ }
7955
+ yy460:
7956
+ yych = *++p;
7957
+ if (yych == 'M')
7958
+ goto yy447;
7959
+ if (yych == 'm')
7960
+ goto yy447;
7961
+ goto yy341;
7962
+ yy461:
7963
+ yych = *++p;
7964
+ if (yych == 'N')
7965
+ goto yy471;
7966
+ if (yych == 'n')
7967
+ goto yy471;
7968
+ goto yy341;
7969
+ yy462:
7970
+ yych = *++p;
7971
+ if (yych <= '/') {
7972
+ if (yych <= 0x1F) {
7973
+ if (yych <= 0x08)
7974
+ goto yy341;
7975
+ if (yych <= '\r')
7976
+ goto yy391;
7977
+ goto yy341;
7978
+ } else {
7979
+ if (yych <= ' ')
7980
+ goto yy391;
7981
+ if (yych <= '.')
7982
+ goto yy341;
7983
+ goto yy393;
7984
+ }
7985
+ } else {
7986
+ if (yych <= 'H') {
7987
+ if (yych == '>')
7988
+ goto yy391;
7989
+ goto yy341;
7990
+ } else {
7991
+ if (yych <= 'I')
7992
+ goto yy482;
7993
+ if (yych == 'i')
7994
+ goto yy482;
7995
+ goto yy341;
7996
+ }
7997
+ }
7998
+ yy463:
7999
+ yych = *++p;
8000
+ if (yych == 'A')
8001
+ goto yy483;
8002
+ if (yych == 'a')
8003
+ goto yy483;
8004
+ goto yy341;
8005
+ yy464:
8006
+ yych = *++p;
8007
+ if (yych == 'O')
8008
+ goto yy429;
8009
+ if (yych == 'o')
8010
+ goto yy429;
8011
+ goto yy341;
8012
+ yy465:
8013
+ ++p;
8014
+ { return 1; }
8015
+ yy467:
8016
+ yych = *++p;
8017
+ if (yych == 'P')
8018
+ goto yy484;
8019
+ if (yych == 'p')
8020
+ goto yy484;
8021
+ goto yy341;
8022
+ yy468:
8023
+ yych = *++p;
8024
+ if (yych == 'C')
8025
+ goto yy447;
8026
+ if (yych == 'c')
8027
+ goto yy447;
8028
+ goto yy341;
8029
+ yy469:
8030
+ yych = *++p;
8031
+ if (yych == 'A')
8032
+ goto yy485;
8033
+ if (yych == 'a')
8034
+ goto yy485;
8035
+ goto yy341;
8036
+ yy470:
8037
+ yych = *++p;
8038
+ if (yych == 'T')
8039
+ goto yy375;
8040
+ if (yych == 't')
8041
+ goto yy375;
8042
+ goto yy341;
8043
+ yy471:
8044
+ yych = *++p;
8045
+ if (yych == 'D')
8046
+ goto yy375;
8047
+ if (yych == 'd')
8048
+ goto yy375;
8049
+ goto yy341;
8050
+ yy472:
8051
+ yych = *++p;
8052
+ if (yych == 'T')
8053
+ goto yy486;
8054
+ if (yych == 't')
8055
+ goto yy486;
8056
+ goto yy341;
8057
+ yy473:
8058
+ yych = *++p;
8059
+ if (yych == 'S')
8060
+ goto yy487;
8061
+ if (yych == 's')
8062
+ goto yy487;
8063
+ goto yy341;
8064
+ yy474:
8065
+ yych = *++p;
8066
+ if (yych == 'O')
8067
+ goto yy488;
8068
+ if (yych == 'o')
8069
+ goto yy488;
8070
+ goto yy341;
8071
+ yy475:
8072
+ yych = *++p;
8073
+ if (yych == 'Q')
8074
+ goto yy489;
8075
+ if (yych == 'q')
8076
+ goto yy489;
8077
+ goto yy341;
8078
+ yy476:
8079
+ yych = *++p;
8080
+ if (yych == 'R')
8081
+ goto yy375;
8082
+ if (yych == 'r')
8083
+ goto yy375;
8084
+ goto yy341;
8085
+ yy477:
8086
+ yych = *++p;
8087
+ if (yych == 'O')
8088
+ goto yy490;
8089
+ if (yych == 'o')
8090
+ goto yy490;
8091
+ goto yy341;
8092
+ yy478:
8093
+ yych = *++p;
8094
+ if (yych == 'L')
8095
+ goto yy487;
8096
+ if (yych == 'l')
8097
+ goto yy487;
8098
+ goto yy341;
8099
+ yy479:
8100
+ yych = *++p;
8101
+ if (yych == 'G')
8102
+ goto yy375;
8103
+ if (yych == 'g')
8104
+ goto yy375;
8105
+ goto yy341;
8106
+ yy480:
8107
+ yych = *++p;
8108
+ if (yych == 'S')
8109
+ goto yy491;
8110
+ if (yych == 's')
8111
+ goto yy491;
8112
+ goto yy341;
8113
+ yy481:
8114
+ yych = *++p;
8115
+ if (yych <= '/') {
8116
+ if (yych <= 0x1F) {
8117
+ if (yych <= 0x08)
8118
+ goto yy341;
8119
+ if (yych <= '\r')
8120
+ goto yy391;
8121
+ goto yy341;
8122
+ } else {
8123
+ if (yych <= ' ')
8124
+ goto yy391;
8125
+ if (yych <= '.')
8126
+ goto yy341;
8127
+ goto yy393;
8128
+ }
8129
+ } else {
8130
+ if (yych <= 'R') {
8131
+ if (yych == '>')
8132
+ goto yy391;
8133
+ goto yy341;
8134
+ } else {
8135
+ if (yych <= 'S')
8136
+ goto yy491;
8137
+ if (yych == 's')
8138
+ goto yy491;
8139
+ goto yy341;
8140
+ }
8141
+ }
8142
+ yy482:
8143
+ yych = *++p;
8144
+ if (yych == 'T')
8145
+ goto yy492;
8146
+ if (yych == 't')
8147
+ goto yy492;
8148
+ goto yy341;
8149
+ yy483:
8150
+ yych = *++p;
8151
+ if (yych == 'M')
8152
+ goto yy493;
8153
+ if (yych == 'm')
8154
+ goto yy493;
8155
+ goto yy341;
8156
+ yy484:
8157
+ yych = *++p;
8158
+ if (yych == 'T')
8159
+ goto yy435;
8160
+ if (yych == 't')
8161
+ goto yy435;
8162
+ goto yy341;
8163
+ yy485:
8164
+ yych = *++p;
8165
+ if (yych == 'R')
8166
+ goto yy415;
8167
+ if (yych == 'r')
8168
+ goto yy415;
8169
+ goto yy341;
8170
+ yy486:
8171
+ yych = *++p;
8172
+ if (yych == 'A')
8173
+ goto yy494;
8174
+ if (yych == 'a')
8175
+ goto yy494;
8176
+ goto yy341;
8177
+ yy487:
8178
+ yych = *++p;
8179
+ if (yych == 'S')
8180
+ goto yy375;
8181
+ if (yych == 's')
8182
+ goto yy375;
8183
+ goto yy341;
8184
+ yy488:
8185
+ yych = *++p;
8186
+ if (yych == 'N')
8187
+ goto yy470;
8188
+ if (yych == 'n')
8189
+ goto yy470;
8190
+ goto yy341;
8191
+ yy489:
8192
+ yych = *++p;
8193
+ if (yych == 'U')
8194
+ goto yy495;
8195
+ if (yych == 'u')
8196
+ goto yy495;
8197
+ goto yy341;
8198
+ yy490:
8199
+ yych = *++p;
8200
+ if (yych == 'U')
8201
+ goto yy496;
8202
+ if (yych == 'u')
8203
+ goto yy496;
8204
+ goto yy341;
8205
+ yy491:
8206
+ yych = *++p;
8207
+ if (yych == 'E')
8208
+ goto yy470;
8209
+ if (yych == 'e')
8210
+ goto yy470;
8211
+ goto yy341;
8212
+ yy492:
8213
+ yych = *++p;
8214
+ if (yych == 'E')
8215
+ goto yy423;
8216
+ if (yych == 'e')
8217
+ goto yy423;
8218
+ goto yy341;
8219
+ yy493:
8220
+ yych = *++p;
8221
+ if (yych == 'E')
8222
+ goto yy487;
8223
+ if (yych == 'e')
8224
+ goto yy487;
8225
+ goto yy341;
8226
+ yy494:
8227
+ yych = *++p;
8228
+ if (yych == '[')
8229
+ goto yy497;
8230
+ goto yy341;
8231
+ yy495:
8232
+ yych = *++p;
8233
+ if (yych == 'O')
8234
+ goto yy499;
8235
+ if (yych == 'o')
8236
+ goto yy499;
8237
+ goto yy341;
8238
+ yy496:
8239
+ yych = *++p;
8240
+ if (yych == 'P')
8241
+ goto yy375;
8242
+ if (yych == 'p')
8243
+ goto yy375;
8244
+ goto yy341;
8245
+ yy497:
8246
+ ++p;
8247
+ { return 5; }
8248
+ yy499:
8249
+ ++p;
8250
+ if ((yych = *p) == 'T')
8251
+ goto yy447;
8252
+ if (yych == 't')
8253
+ goto yy447;
8254
+ goto yy341;
8255
+ }
8256
+}
8257
+
8258
+// Try to match an HTML block tag start line of type 7, returning
8259
+// 7 if successful, 0 if not.
8260
+bufsize_t _scan_html_block_start_7(const unsigned char *p) {
8261
+ const unsigned char *marker = NULL;
8262
+
8263
+ {
8264
+ unsigned char yych;
8265
+ unsigned int yyaccept = 0;
8266
+ static const unsigned char yybm[] = {
8267
+ 0, 224, 224, 224, 224, 224, 224, 224, 224, 198, 210, 194, 198, 194,
8268
+ 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
8269
+ 224, 224, 224, 224, 198, 224, 128, 224, 224, 224, 224, 64, 224, 224,
8270
+ 224, 224, 224, 233, 232, 224, 233, 233, 233, 233, 233, 233, 233, 233,
8271
+ 233, 233, 232, 224, 192, 192, 192, 224, 224, 233, 233, 233, 233, 233,
8272
+ 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
8273
+ 233, 233, 233, 233, 233, 233, 233, 224, 224, 224, 224, 232, 192, 233,
8274
+ 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
8275
+ 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 224, 224, 224,
8276
+ 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8277
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8278
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8279
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8280
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8281
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8282
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8283
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8284
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8285
+ 0, 0, 0, 0,
8286
+ };
8287
+ yych = *p;
8288
+ if (yych == '<')
8289
+ goto yy504;
8290
+ ++p;
8291
+ yy503 : { return 0; }
8292
+ yy504:
8293
+ yyaccept = 0;
8294
+ yych = *(marker = ++p);
8295
+ if (yych <= '@') {
8296
+ if (yych != '/')
8297
+ goto yy503;
8298
+ } else {
8299
+ if (yych <= 'Z')
8300
+ goto yy507;
8301
+ if (yych <= '`')
8302
+ goto yy503;
8303
+ if (yych <= 'z')
8304
+ goto yy507;
8305
+ goto yy503;
8306
+ }
8307
+ yych = *++p;
8308
+ if (yych <= '@')
8309
+ goto yy506;
8310
+ if (yych <= 'Z')
8311
+ goto yy509;
8312
+ if (yych <= '`')
8313
+ goto yy506;
8314
+ if (yych <= 'z')
8315
+ goto yy509;
8316
+ yy506:
8317
+ p = marker;
8318
+ if (yyaccept == 0) {
8319
+ goto yy503;
8320
+ } else {
8321
+ goto yy522;
8322
+ }
8323
+ yy507:
8324
+ ++p;
8325
+ yych = *p;
8326
+ if (yybm[0 + yych] & 2) {
8327
+ goto yy511;
8328
+ }
8329
+ if (yych <= '=') {
8330
+ if (yych <= '.') {
8331
+ if (yych == '-')
8332
+ goto yy507;
8333
+ goto yy506;
8334
+ } else {
8335
+ if (yych <= '/')
8336
+ goto yy513;
8337
+ if (yych <= '9')
8338
+ goto yy507;
8339
+ goto yy506;
8340
+ }
8341
+ } else {
8342
+ if (yych <= 'Z') {
8343
+ if (yych <= '>')
8344
+ goto yy514;
8345
+ if (yych <= '@')
8346
+ goto yy506;
8347
+ goto yy507;
8348
+ } else {
8349
+ if (yych <= '`')
8350
+ goto yy506;
8351
+ if (yych <= 'z')
8352
+ goto yy507;
8353
+ goto yy506;
8354
+ }
8355
+ }
8356
+ yy509:
8357
+ ++p;
8358
+ yych = *p;
8359
+ if (yych <= '/') {
8360
+ if (yych <= 0x1F) {
8361
+ if (yych <= 0x08)
8362
+ goto yy506;
8363
+ if (yych <= '\r')
8364
+ goto yy516;
8365
+ goto yy506;
8366
+ } else {
8367
+ if (yych <= ' ')
8368
+ goto yy516;
8369
+ if (yych == '-')
8370
+ goto yy509;
8371
+ goto yy506;
8372
+ }
8373
+ } else {
8374
+ if (yych <= '@') {
8375
+ if (yych <= '9')
8376
+ goto yy509;
8377
+ if (yych == '>')
8378
+ goto yy514;
8379
+ goto yy506;
8380
+ } else {
8381
+ if (yych <= 'Z')
8382
+ goto yy509;
8383
+ if (yych <= '`')
8384
+ goto yy506;
8385
+ if (yych <= 'z')
8386
+ goto yy509;
8387
+ goto yy506;
8388
+ }
8389
+ }
8390
+ yy511:
8391
+ ++p;
8392
+ yych = *p;
8393
+ if (yybm[0 + yych] & 2) {
8394
+ goto yy511;
8395
+ }
8396
+ if (yych <= '>') {
8397
+ if (yych <= '9') {
8398
+ if (yych != '/')
8399
+ goto yy506;
8400
+ } else {
8401
+ if (yych <= ':')
8402
+ goto yy518;
8403
+ if (yych <= '=')
8404
+ goto yy506;
8405
+ goto yy514;
8406
+ }
8407
+ } else {
8408
+ if (yych <= '^') {
8409
+ if (yych <= '@')
8410
+ goto yy506;
8411
+ if (yych <= 'Z')
8412
+ goto yy518;
8413
+ goto yy506;
8414
+ } else {
8415
+ if (yych == '`')
8416
+ goto yy506;
8417
+ if (yych <= 'z')
8418
+ goto yy518;
8419
+ goto yy506;
8420
+ }
8421
+ }
8422
+ yy513:
8423
+ yych = *++p;
8424
+ if (yych != '>')
8425
+ goto yy506;
8426
+ yy514:
8427
+ ++p;
8428
+ yych = *p;
8429
+ if (yybm[0 + yych] & 4) {
8430
+ goto yy514;
8431
+ }
8432
+ if (yych <= 0x08)
8433
+ goto yy506;
8434
+ if (yych <= '\n')
8435
+ goto yy520;
8436
+ if (yych <= '\v')
8437
+ goto yy506;
8438
+ if (yych <= '\r')
8439
+ goto yy523;
8440
+ goto yy506;
8441
+ yy516:
8442
+ ++p;
8443
+ yych = *p;
8444
+ if (yych <= 0x1F) {
8445
+ if (yych <= 0x08)
8446
+ goto yy506;
8447
+ if (yych <= '\r')
8448
+ goto yy516;
8449
+ goto yy506;
8450
+ } else {
8451
+ if (yych <= ' ')
8452
+ goto yy516;
8453
+ if (yych == '>')
8454
+ goto yy514;
8455
+ goto yy506;
8456
+ }
8457
+ yy518:
8458
+ ++p;
8459
+ yych = *p;
8460
+ if (yybm[0 + yych] & 8) {
8461
+ goto yy518;
8462
+ }
8463
+ if (yych <= ',') {
8464
+ if (yych <= '\r') {
8465
+ if (yych <= 0x08)
8466
+ goto yy506;
8467
+ goto yy524;
8468
+ } else {
8469
+ if (yych == ' ')
8470
+ goto yy524;
8471
+ goto yy506;
8472
+ }
8473
+ } else {
8474
+ if (yych <= '<') {
8475
+ if (yych <= '/')
8476
+ goto yy513;
8477
+ goto yy506;
8478
+ } else {
8479
+ if (yych <= '=')
8480
+ goto yy526;
8481
+ if (yych <= '>')
8482
+ goto yy514;
8483
+ goto yy506;
8484
+ }
8485
+ }
8486
+ yy520:
8487
+ yyaccept = 1;
8488
+ marker = ++p;
8489
+ yych = *p;
8490
+ if (yybm[0 + yych] & 4) {
8491
+ goto yy514;
8492
+ }
8493
+ if (yych <= 0x08)
8494
+ goto yy522;
8495
+ if (yych <= '\n')
8496
+ goto yy520;
8497
+ if (yych <= '\v')
8498
+ goto yy522;
8499
+ if (yych <= '\r')
8500
+ goto yy523;
8501
+ yy522 : { return 7; }
8502
+ yy523:
8503
+ yych = *++p;
8504
+ goto yy522;
8505
+ yy524:
8506
+ ++p;
8507
+ yych = *p;
8508
+ if (yych <= '<') {
8509
+ if (yych <= ' ') {
8510
+ if (yych <= 0x08)
8511
+ goto yy506;
8512
+ if (yych <= '\r')
8513
+ goto yy524;
8514
+ if (yych <= 0x1F)
8515
+ goto yy506;
8516
+ goto yy524;
8517
+ } else {
8518
+ if (yych <= '/') {
8519
+ if (yych <= '.')
8520
+ goto yy506;
8521
+ goto yy513;
8522
+ } else {
8523
+ if (yych == ':')
8524
+ goto yy518;
8525
+ goto yy506;
8526
+ }
8527
+ }
8528
+ } else {
8529
+ if (yych <= 'Z') {
8530
+ if (yych <= '=')
8531
+ goto yy526;
8532
+ if (yych <= '>')
8533
+ goto yy514;
8534
+ if (yych <= '@')
8535
+ goto yy506;
8536
+ goto yy518;
8537
+ } else {
8538
+ if (yych <= '_') {
8539
+ if (yych <= '^')
8540
+ goto yy506;
8541
+ goto yy518;
8542
+ } else {
8543
+ if (yych <= '`')
8544
+ goto yy506;
8545
+ if (yych <= 'z')
8546
+ goto yy518;
8547
+ goto yy506;
8548
+ }
8549
+ }
8550
+ }
8551
+ yy526:
8552
+ ++p;
8553
+ yych = *p;
8554
+ if (yybm[0 + yych] & 32) {
8555
+ goto yy527;
8556
+ }
8557
+ if (yych <= 0xE0) {
8558
+ if (yych <= '"') {
8559
+ if (yych <= 0x00)
8560
+ goto yy506;
8561
+ if (yych <= ' ')
8562
+ goto yy529;
8563
+ goto yy530;
8564
+ } else {
8565
+ if (yych <= '\'')
8566
+ goto yy532;
8567
+ if (yych <= 0xC1)
8568
+ goto yy506;
8569
+ if (yych <= 0xDF)
8570
+ goto yy534;
8571
+ goto yy535;
8572
+ }
8573
+ } else {
8574
+ if (yych <= 0xEF) {
8575
+ if (yych == 0xED)
8576
+ goto yy537;
8577
+ goto yy536;
8578
+ } else {
8579
+ if (yych <= 0xF0)
8580
+ goto yy538;
8581
+ if (yych <= 0xF3)
8582
+ goto yy539;
8583
+ if (yych <= 0xF4)
8584
+ goto yy540;
8585
+ goto yy506;
8586
+ }
8587
+ }
8588
+ yy527:
8589
+ ++p;
8590
+ yych = *p;
8591
+ if (yybm[0 + yych] & 32) {
8592
+ goto yy527;
8593
+ }
8594
+ if (yych <= 0xE0) {
8595
+ if (yych <= '=') {
8596
+ if (yych <= 0x00)
8597
+ goto yy506;
8598
+ if (yych <= ' ')
8599
+ goto yy541;
8600
+ goto yy506;
8601
+ } else {
8602
+ if (yych <= '>')
8603
+ goto yy514;
8604
+ if (yych <= 0xC1)
8605
+ goto yy506;
8606
+ if (yych <= 0xDF)
8607
+ goto yy534;
8608
+ goto yy535;
8609
+ }
8610
+ } else {
8611
+ if (yych <= 0xEF) {
8612
+ if (yych == 0xED)
8613
+ goto yy537;
8614
+ goto yy536;
8615
+ } else {
8616
+ if (yych <= 0xF0)
8617
+ goto yy538;
8618
+ if (yych <= 0xF3)
8619
+ goto yy539;
8620
+ if (yych <= 0xF4)
8621
+ goto yy540;
8622
+ goto yy506;
8623
+ }
8624
+ }
8625
+ yy529:
8626
+ ++p;
8627
+ yych = *p;
8628
+ if (yybm[0 + yych] & 32) {
8629
+ goto yy527;
8630
+ }
8631
+ if (yych <= 0xDF) {
8632
+ if (yych <= '\'') {
8633
+ if (yych <= 0x00)
8634
+ goto yy506;
8635
+ if (yych <= ' ')
8636
+ goto yy543;
8637
+ if (yych >= '#')
8638
+ goto yy532;
8639
+ } else {
8640
+ if (yych == '>')
8641
+ goto yy514;
8642
+ if (yych <= 0xC1)
8643
+ goto yy506;
8644
+ goto yy534;
8645
+ }
8646
+ } else {
8647
+ if (yych <= 0xEF) {
8648
+ if (yych <= 0xE0)
8649
+ goto yy535;
8650
+ if (yych == 0xED)
8651
+ goto yy537;
8652
+ goto yy536;
8653
+ } else {
8654
+ if (yych <= 0xF0)
8655
+ goto yy538;
8656
+ if (yych <= 0xF3)
8657
+ goto yy539;
8658
+ if (yych <= 0xF4)
8659
+ goto yy540;
8660
+ goto yy506;
8661
+ }
8662
+ }
8663
+ yy530:
8664
+ ++p;
8665
+ yych = *p;
8666
+ if (yybm[0 + yych] & 64) {
8667
+ goto yy530;
8668
+ }
8669
+ if (yych <= 0xEC) {
8670
+ if (yych <= 0xC1) {
8671
+ if (yych <= 0x00)
8672
+ goto yy506;
8673
+ if (yych <= '"')
8674
+ goto yy545;
8675
+ goto yy506;
8676
+ } else {
8677
+ if (yych <= 0xDF)
8678
+ goto yy546;
8679
+ if (yych <= 0xE0)
8680
+ goto yy547;
8681
+ goto yy548;
8682
+ }
8683
+ } else {
8684
+ if (yych <= 0xF0) {
8685
+ if (yych <= 0xED)
8686
+ goto yy549;
8687
+ if (yych <= 0xEF)
8688
+ goto yy548;
8689
+ goto yy550;
8690
+ } else {
8691
+ if (yych <= 0xF3)
8692
+ goto yy551;
8693
+ if (yych <= 0xF4)
8694
+ goto yy552;
8695
+ goto yy506;
8696
+ }
8697
+ }
8698
+ yy532:
8699
+ ++p;
8700
+ yych = *p;
8701
+ if (yybm[0 + yych] & 128) {
8702
+ goto yy532;
8703
+ }
8704
+ if (yych <= 0xEC) {
8705
+ if (yych <= 0xC1) {
8706
+ if (yych <= 0x00)
8707
+ goto yy506;
8708
+ if (yych <= '\'')
8709
+ goto yy545;
8710
+ goto yy506;
8711
+ } else {
8712
+ if (yych <= 0xDF)
8713
+ goto yy553;
8714
+ if (yych <= 0xE0)
8715
+ goto yy554;
8716
+ goto yy555;
8717
+ }
8718
+ } else {
8719
+ if (yych <= 0xF0) {
8720
+ if (yych <= 0xED)
8721
+ goto yy556;
8722
+ if (yych <= 0xEF)
8723
+ goto yy555;
8724
+ goto yy557;
8725
+ } else {
8726
+ if (yych <= 0xF3)
8727
+ goto yy558;
8728
+ if (yych <= 0xF4)
8729
+ goto yy559;
8730
+ goto yy506;
8731
+ }
8732
+ }
8733
+ yy534:
8734
+ ++p;
8735
+ yych = *p;
8736
+ if (yych <= 0x7F)
8737
+ goto yy506;
8738
+ if (yych <= 0xBF)
8739
+ goto yy527;
8740
+ goto yy506;
8741
+ yy535:
8742
+ ++p;
8743
+ yych = *p;
8744
+ if (yych <= 0x9F)
8745
+ goto yy506;
8746
+ if (yych <= 0xBF)
8747
+ goto yy534;
8748
+ goto yy506;
8749
+ yy536:
8750
+ ++p;
8751
+ yych = *p;
8752
+ if (yych <= 0x7F)
8753
+ goto yy506;
8754
+ if (yych <= 0xBF)
8755
+ goto yy534;
8756
+ goto yy506;
8757
+ yy537:
8758
+ ++p;
8759
+ yych = *p;
8760
+ if (yych <= 0x7F)
8761
+ goto yy506;
8762
+ if (yych <= 0x9F)
8763
+ goto yy534;
8764
+ goto yy506;
8765
+ yy538:
8766
+ ++p;
8767
+ yych = *p;
8768
+ if (yych <= 0x8F)
8769
+ goto yy506;
8770
+ if (yych <= 0xBF)
8771
+ goto yy536;
8772
+ goto yy506;
8773
+ yy539:
8774
+ ++p;
8775
+ yych = *p;
8776
+ if (yych <= 0x7F)
8777
+ goto yy506;
8778
+ if (yych <= 0xBF)
8779
+ goto yy536;
8780
+ goto yy506;
8781
+ yy540:
8782
+ ++p;
8783
+ yych = *p;
8784
+ if (yych <= 0x7F)
8785
+ goto yy506;
8786
+ if (yych <= 0x8F)
8787
+ goto yy536;
8788
+ goto yy506;
8789
+ yy541:
8790
+ ++p;
8791
+ yych = *p;
8792
+ if (yych <= '@') {
8793
+ if (yych <= '"') {
8794
+ if (yych <= '\r') {
8795
+ if (yych <= 0x00)
8796
+ goto yy506;
8797
+ if (yych <= 0x08)
8798
+ goto yy527;
8799
+ goto yy541;
8800
+ } else {
8801
+ if (yych == ' ')
8802
+ goto yy541;
8803
+ if (yych <= '!')
8804
+ goto yy527;
8805
+ goto yy506;
8806
+ }
8807
+ } else {
8808
+ if (yych <= ':') {
8809
+ if (yych == '\'')
8810
+ goto yy506;
8811
+ if (yych <= '9')
8812
+ goto yy527;
8813
+ goto yy560;
8814
+ } else {
8815
+ if (yych <= ';')
8816
+ goto yy527;
8817
+ if (yych <= '=')
8818
+ goto yy506;
8819
+ if (yych <= '>')
8820
+ goto yy514;
8821
+ goto yy527;
8822
+ }
8823
+ }
8824
+ } else {
8825
+ if (yych <= 0xDF) {
8826
+ if (yych <= '`') {
8827
+ if (yych <= 'Z')
8828
+ goto yy560;
8829
+ if (yych <= '^')
8830
+ goto yy527;
8831
+ if (yych <= '_')
8832
+ goto yy560;
8833
+ goto yy506;
8834
+ } else {
8835
+ if (yych <= 'z')
8836
+ goto yy560;
8837
+ if (yych <= 0x7F)
8838
+ goto yy527;
8839
+ if (yych <= 0xC1)
8840
+ goto yy506;
8841
+ goto yy534;
8842
+ }
8843
+ } else {
8844
+ if (yych <= 0xEF) {
8845
+ if (yych <= 0xE0)
8846
+ goto yy535;
8847
+ if (yych == 0xED)
8848
+ goto yy537;
8849
+ goto yy536;
8850
+ } else {
8851
+ if (yych <= 0xF0)
8852
+ goto yy538;
8853
+ if (yych <= 0xF3)
8854
+ goto yy539;
8855
+ if (yych <= 0xF4)
8856
+ goto yy540;
8857
+ goto yy506;
8858
+ }
8859
+ }
8860
+ }
8861
+ yy543:
8862
+ ++p;
8863
+ yych = *p;
8864
+ if (yych <= '@') {
8865
+ if (yych <= '"') {
8866
+ if (yych <= '\r') {
8867
+ if (yych <= 0x00)
8868
+ goto yy506;
8869
+ if (yych <= 0x08)
8870
+ goto yy527;
8871
+ goto yy543;
8872
+ } else {
8873
+ if (yych == ' ')
8874
+ goto yy543;
8875
+ if (yych <= '!')
8876
+ goto yy527;
8877
+ goto yy530;
8878
+ }
8879
+ } else {
8880
+ if (yych <= ':') {
8881
+ if (yych == '\'')
8882
+ goto yy532;
8883
+ if (yych <= '9')
8884
+ goto yy527;
8885
+ goto yy560;
8886
+ } else {
8887
+ if (yych <= ';')
8888
+ goto yy527;
8889
+ if (yych <= '=')
8890
+ goto yy506;
8891
+ if (yych <= '>')
8892
+ goto yy514;
8893
+ goto yy527;
8894
+ }
8895
+ }
8896
+ } else {
8897
+ if (yych <= 0xDF) {
8898
+ if (yych <= '`') {
8899
+ if (yych <= 'Z')
8900
+ goto yy560;
8901
+ if (yych <= '^')
8902
+ goto yy527;
8903
+ if (yych <= '_')
8904
+ goto yy560;
8905
+ goto yy506;
8906
+ } else {
8907
+ if (yych <= 'z')
8908
+ goto yy560;
8909
+ if (yych <= 0x7F)
8910
+ goto yy527;
8911
+ if (yych <= 0xC1)
8912
+ goto yy506;
8913
+ goto yy534;
8914
+ }
8915
+ } else {
8916
+ if (yych <= 0xEF) {
8917
+ if (yych <= 0xE0)
8918
+ goto yy535;
8919
+ if (yych == 0xED)
8920
+ goto yy537;
8921
+ goto yy536;
8922
+ } else {
8923
+ if (yych <= 0xF0)
8924
+ goto yy538;
8925
+ if (yych <= 0xF3)
8926
+ goto yy539;
8927
+ if (yych <= 0xF4)
8928
+ goto yy540;
8929
+ goto yy506;
8930
+ }
8931
+ }
8932
+ }
8933
+ yy545:
8934
+ ++p;
8935
+ yych = *p;
8936
+ if (yybm[0 + yych] & 2) {
8937
+ goto yy511;
8938
+ }
8939
+ if (yych == '/')
8940
+ goto yy513;
8941
+ if (yych == '>')
8942
+ goto yy514;
8943
+ goto yy506;
8944
+ yy546:
8945
+ ++p;
8946
+ yych = *p;
8947
+ if (yych <= 0x7F)
8948
+ goto yy506;
8949
+ if (yych <= 0xBF)
8950
+ goto yy530;
8951
+ goto yy506;
8952
+ yy547:
8953
+ ++p;
8954
+ yych = *p;
8955
+ if (yych <= 0x9F)
8956
+ goto yy506;
8957
+ if (yych <= 0xBF)
8958
+ goto yy546;
8959
+ goto yy506;
8960
+ yy548:
8961
+ ++p;
8962
+ yych = *p;
8963
+ if (yych <= 0x7F)
8964
+ goto yy506;
8965
+ if (yych <= 0xBF)
8966
+ goto yy546;
8967
+ goto yy506;
8968
+ yy549:
8969
+ ++p;
8970
+ yych = *p;
8971
+ if (yych <= 0x7F)
8972
+ goto yy506;
8973
+ if (yych <= 0x9F)
8974
+ goto yy546;
8975
+ goto yy506;
8976
+ yy550:
8977
+ ++p;
8978
+ yych = *p;
8979
+ if (yych <= 0x8F)
8980
+ goto yy506;
8981
+ if (yych <= 0xBF)
8982
+ goto yy548;
8983
+ goto yy506;
8984
+ yy551:
8985
+ ++p;
8986
+ yych = *p;
8987
+ if (yych <= 0x7F)
8988
+ goto yy506;
8989
+ if (yych <= 0xBF)
8990
+ goto yy548;
8991
+ goto yy506;
8992
+ yy552:
8993
+ ++p;
8994
+ yych = *p;
8995
+ if (yych <= 0x7F)
8996
+ goto yy506;
8997
+ if (yych <= 0x8F)
8998
+ goto yy548;
8999
+ goto yy506;
9000
+ yy553:
9001
+ ++p;
9002
+ yych = *p;
9003
+ if (yych <= 0x7F)
9004
+ goto yy506;
9005
+ if (yych <= 0xBF)
9006
+ goto yy532;
9007
+ goto yy506;
9008
+ yy554:
9009
+ ++p;
9010
+ yych = *p;
9011
+ if (yych <= 0x9F)
9012
+ goto yy506;
9013
+ if (yych <= 0xBF)
9014
+ goto yy553;
9015
+ goto yy506;
9016
+ yy555:
9017
+ ++p;
9018
+ yych = *p;
9019
+ if (yych <= 0x7F)
9020
+ goto yy506;
9021
+ if (yych <= 0xBF)
9022
+ goto yy553;
9023
+ goto yy506;
9024
+ yy556:
9025
+ ++p;
9026
+ yych = *p;
9027
+ if (yych <= 0x7F)
9028
+ goto yy506;
9029
+ if (yych <= 0x9F)
9030
+ goto yy553;
9031
+ goto yy506;
9032
+ yy557:
9033
+ ++p;
9034
+ yych = *p;
9035
+ if (yych <= 0x8F)
9036
+ goto yy506;
9037
+ if (yych <= 0xBF)
9038
+ goto yy555;
9039
+ goto yy506;
9040
+ yy558:
9041
+ ++p;
9042
+ yych = *p;
9043
+ if (yych <= 0x7F)
9044
+ goto yy506;
9045
+ if (yych <= 0xBF)
9046
+ goto yy555;
9047
+ goto yy506;
9048
+ yy559:
9049
+ ++p;
9050
+ yych = *p;
9051
+ if (yych <= 0x7F)
9052
+ goto yy506;
9053
+ if (yych <= 0x8F)
9054
+ goto yy555;
9055
+ goto yy506;
9056
+ yy560:
9057
+ ++p;
9058
+ yych = *p;
9059
+ if (yych <= '>') {
9060
+ if (yych <= '&') {
9061
+ if (yych <= 0x1F) {
9062
+ if (yych <= 0x00)
9063
+ goto yy506;
9064
+ if (yych <= 0x08)
9065
+ goto yy527;
9066
+ if (yych >= 0x0E)
9067
+ goto yy527;
9068
+ } else {
9069
+ if (yych <= ' ')
9070
+ goto yy562;
9071
+ if (yych == '"')
9072
+ goto yy506;
9073
+ goto yy527;
9074
+ }
9075
+ } else {
9076
+ if (yych <= '/') {
9077
+ if (yych <= '\'')
9078
+ goto yy506;
9079
+ if (yych <= ',')
9080
+ goto yy527;
9081
+ if (yych <= '.')
9082
+ goto yy560;
9083
+ goto yy527;
9084
+ } else {
9085
+ if (yych <= ';') {
9086
+ if (yych <= ':')
9087
+ goto yy560;
9088
+ goto yy527;
9089
+ } else {
9090
+ if (yych <= '<')
9091
+ goto yy506;
9092
+ if (yych <= '=')
9093
+ goto yy526;
9094
+ goto yy514;
9095
+ }
9096
+ }
9097
+ }
9098
+ } else {
9099
+ if (yych <= 0xC1) {
9100
+ if (yych <= '_') {
9101
+ if (yych <= '@')
9102
+ goto yy527;
9103
+ if (yych <= 'Z')
9104
+ goto yy560;
9105
+ if (yych <= '^')
9106
+ goto yy527;
9107
+ goto yy560;
9108
+ } else {
9109
+ if (yych <= '`')
9110
+ goto yy506;
9111
+ if (yych <= 'z')
9112
+ goto yy560;
9113
+ if (yych <= 0x7F)
9114
+ goto yy527;
9115
+ goto yy506;
9116
+ }
9117
+ } else {
9118
+ if (yych <= 0xED) {
9119
+ if (yych <= 0xDF)
9120
+ goto yy534;
9121
+ if (yych <= 0xE0)
9122
+ goto yy535;
9123
+ if (yych <= 0xEC)
9124
+ goto yy536;
9125
+ goto yy537;
9126
+ } else {
9127
+ if (yych <= 0xF0) {
9128
+ if (yych <= 0xEF)
9129
+ goto yy536;
9130
+ goto yy538;
9131
+ } else {
9132
+ if (yych <= 0xF3)
9133
+ goto yy539;
9134
+ if (yych <= 0xF4)
9135
+ goto yy540;
9136
+ goto yy506;
9137
+ }
9138
+ }
9139
+ }
9140
+ }
9141
+ yy562:
9142
+ ++p;
9143
+ yych = *p;
9144
+ if (yych <= '@') {
9145
+ if (yych <= '&') {
9146
+ if (yych <= 0x1F) {
9147
+ if (yych <= 0x00)
9148
+ goto yy506;
9149
+ if (yych <= 0x08)
9150
+ goto yy527;
9151
+ if (yych <= '\r')
9152
+ goto yy562;
9153
+ goto yy527;
9154
+ } else {
9155
+ if (yych <= ' ')
9156
+ goto yy562;
9157
+ if (yych == '"')
9158
+ goto yy506;
9159
+ goto yy527;
9160
+ }
9161
+ } else {
9162
+ if (yych <= ';') {
9163
+ if (yych <= '\'')
9164
+ goto yy506;
9165
+ if (yych == ':')
9166
+ goto yy560;
9167
+ goto yy527;
9168
+ } else {
9169
+ if (yych <= '<')
9170
+ goto yy506;
9171
+ if (yych <= '=')
9172
+ goto yy526;
9173
+ if (yych <= '>')
9174
+ goto yy514;
9175
+ goto yy527;
9176
+ }
9177
+ }
9178
+ } else {
9179
+ if (yych <= 0xDF) {
9180
+ if (yych <= '`') {
9181
+ if (yych <= 'Z')
9182
+ goto yy560;
9183
+ if (yych <= '^')
9184
+ goto yy527;
9185
+ if (yych <= '_')
9186
+ goto yy560;
9187
+ goto yy506;
9188
+ } else {
9189
+ if (yych <= 'z')
9190
+ goto yy560;
9191
+ if (yych <= 0x7F)
9192
+ goto yy527;
9193
+ if (yych <= 0xC1)
9194
+ goto yy506;
9195
+ goto yy534;
9196
+ }
9197
+ } else {
9198
+ if (yych <= 0xEF) {
9199
+ if (yych <= 0xE0)
9200
+ goto yy535;
9201
+ if (yych == 0xED)
9202
+ goto yy537;
9203
+ goto yy536;
9204
+ } else {
9205
+ if (yych <= 0xF0)
9206
+ goto yy538;
9207
+ if (yych <= 0xF3)
9208
+ goto yy539;
9209
+ if (yych <= 0xF4)
9210
+ goto yy540;
9211
+ goto yy506;
9212
+ }
9213
+ }
9214
+ }
9215
+ }
9216
+}
9217
+
9218
+// Try to match an HTML block end line of type 1
9219
+bufsize_t _scan_html_block_end_1(const unsigned char *p) {
9220
+ const unsigned char *marker = NULL;
9221
+ const unsigned char *start = p;
9222
+
9223
+ {
9224
+ unsigned char yych;
9225
+ unsigned int yyaccept = 0;
9226
+ static const unsigned char yybm[] = {
9227
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64,
9228
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
9229
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
9230
+ 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
9231
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
9232
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
9233
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
9234
+ 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9235
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9236
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9237
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9238
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9239
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9240
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9241
+ 0, 0, 0, 0,
9242
+ };
9243
+ yych = *p;
9244
+ if (yych <= 0xDF) {
9245
+ if (yych <= ';') {
9246
+ if (yych == '\n')
9247
+ goto yy568;
9248
+ } else {
9249
+ if (yych <= '<')
9250
+ goto yy569;
9251
+ if (yych <= 0x7F)
9252
+ goto yy566;
9253
+ if (yych <= 0xC1)
9254
+ goto yy568;
9255
+ goto yy570;
9256
+ }
9257
+ } else {
9258
+ if (yych <= 0xEF) {
9259
+ if (yych <= 0xE0)
9260
+ goto yy571;
9261
+ if (yych == 0xED)
9262
+ goto yy573;
9263
+ goto yy572;
9264
+ } else {
9265
+ if (yych <= 0xF0)
9266
+ goto yy574;
9267
+ if (yych <= 0xF3)
9268
+ goto yy575;
9269
+ if (yych <= 0xF4)
9270
+ goto yy576;
9271
+ goto yy568;
9272
+ }
9273
+ }
9274
+ yy566:
9275
+ yyaccept = 0;
9276
+ yych = *(marker = ++p);
9277
+ if (yych <= 0x7F) {
9278
+ if (yych != '\n')
9279
+ goto yy578;
9280
+ } else {
9281
+ if (yych <= 0xC1)
9282
+ goto yy567;
9283
+ if (yych <= 0xF4)
9284
+ goto yy578;
9285
+ }
9286
+ yy567 : { return 0; }
9287
+ yy568:
9288
+ yych = *++p;
9289
+ goto yy567;
9290
+ yy569:
9291
+ yyaccept = 0;
9292
+ yych = *(marker = ++p);
9293
+ if (yych <= '/') {
9294
+ if (yych == '\n')
9295
+ goto yy567;
9296
+ if (yych <= '.')
9297
+ goto yy578;
9298
+ goto yy589;
9299
+ } else {
9300
+ if (yych <= 0x7F)
9301
+ goto yy578;
9302
+ if (yych <= 0xC1)
9303
+ goto yy567;
9304
+ if (yych <= 0xF4)
9305
+ goto yy578;
9306
+ goto yy567;
9307
+ }
9308
+ yy570:
9309
+ yyaccept = 0;
9310
+ yych = *(marker = ++p);
9311
+ if (yych <= 0x7F)
9312
+ goto yy567;
9313
+ if (yych <= 0xBF)
9314
+ goto yy577;
9315
+ goto yy567;
9316
+ yy571:
9317
+ yyaccept = 0;
9318
+ yych = *(marker = ++p);
9319
+ if (yych <= 0x9F)
9320
+ goto yy567;
9321
+ if (yych <= 0xBF)
9322
+ goto yy582;
9323
+ goto yy567;
9324
+ yy572:
9325
+ yyaccept = 0;
9326
+ yych = *(marker = ++p);
9327
+ if (yych <= 0x7F)
9328
+ goto yy567;
9329
+ if (yych <= 0xBF)
9330
+ goto yy582;
9331
+ goto yy567;
9332
+ yy573:
9333
+ yyaccept = 0;
9334
+ yych = *(marker = ++p);
9335
+ if (yych <= 0x7F)
9336
+ goto yy567;
9337
+ if (yych <= 0x9F)
9338
+ goto yy582;
9339
+ goto yy567;
9340
+ yy574:
9341
+ yyaccept = 0;
9342
+ yych = *(marker = ++p);
9343
+ if (yych <= 0x8F)
9344
+ goto yy567;
9345
+ if (yych <= 0xBF)
9346
+ goto yy584;
9347
+ goto yy567;
9348
+ yy575:
9349
+ yyaccept = 0;
9350
+ yych = *(marker = ++p);
9351
+ if (yych <= 0x7F)
9352
+ goto yy567;
9353
+ if (yych <= 0xBF)
9354
+ goto yy584;
9355
+ goto yy567;
9356
+ yy576:
9357
+ yyaccept = 0;
9358
+ yych = *(marker = ++p);
9359
+ if (yych <= 0x7F)
9360
+ goto yy567;
9361
+ if (yych <= 0x8F)
9362
+ goto yy584;
9363
+ goto yy567;
9364
+ yy577:
9365
+ ++p;
9366
+ yych = *p;
9367
+ yy578:
9368
+ if (yybm[0 + yych] & 64) {
9369
+ goto yy577;
9370
+ }
9371
+ if (yych <= 0xEC) {
9372
+ if (yych <= 0xC1) {
9373
+ if (yych <= '\n')
9374
+ goto yy579;
9375
+ if (yych <= '<')
9376
+ goto yy580;
9377
+ } else {
9378
+ if (yych <= 0xDF)
9379
+ goto yy582;
9380
+ if (yych <= 0xE0)
9381
+ goto yy583;
9382
+ goto yy584;
9383
+ }
9384
+ } else {
9385
+ if (yych <= 0xF0) {
9386
+ if (yych <= 0xED)
9387
+ goto yy585;
9388
+ if (yych <= 0xEF)
9389
+ goto yy584;
9390
+ goto yy586;
9391
+ } else {
9392
+ if (yych <= 0xF3)
9393
+ goto yy587;
9394
+ if (yych <= 0xF4)
9395
+ goto yy588;
9396
+ }
9397
+ }
9398
+ yy579:
9399
+ p = marker;
9400
+ if (yyaccept == 0) {
9401
+ goto yy567;
9402
+ } else {
9403
+ goto yy599;
9404
+ }
9405
+ yy580:
9406
+ ++p;
9407
+ yych = *p;
9408
+ if (yybm[0 + yych] & 128) {
9409
+ goto yy580;
9410
+ }
9411
+ if (yych <= 0xDF) {
9412
+ if (yych <= '.') {
9413
+ if (yych == '\n')
9414
+ goto yy579;
9415
+ goto yy577;
9416
+ } else {
9417
+ if (yych <= '/')
9418
+ goto yy589;
9419
+ if (yych <= 0x7F)
9420
+ goto yy577;
9421
+ if (yych <= 0xC1)
9422
+ goto yy579;
9423
+ }
9424
+ } else {
9425
+ if (yych <= 0xEF) {
9426
+ if (yych <= 0xE0)
9427
+ goto yy583;
9428
+ if (yych == 0xED)
9429
+ goto yy585;
9430
+ goto yy584;
9431
+ } else {
9432
+ if (yych <= 0xF0)
9433
+ goto yy586;
9434
+ if (yych <= 0xF3)
9435
+ goto yy587;
9436
+ if (yych <= 0xF4)
9437
+ goto yy588;
9438
+ goto yy579;
9439
+ }
9440
+ }
9441
+ yy582:
9442
+ ++p;
9443
+ yych = *p;
9444
+ if (yych <= 0x7F)
9445
+ goto yy579;
9446
+ if (yych <= 0xBF)
9447
+ goto yy577;
9448
+ goto yy579;
9449
+ yy583:
9450
+ ++p;
9451
+ yych = *p;
9452
+ if (yych <= 0x9F)
9453
+ goto yy579;
9454
+ if (yych <= 0xBF)
9455
+ goto yy582;
9456
+ goto yy579;
9457
+ yy584:
9458
+ ++p;
9459
+ yych = *p;
9460
+ if (yych <= 0x7F)
9461
+ goto yy579;
9462
+ if (yych <= 0xBF)
9463
+ goto yy582;
9464
+ goto yy579;
9465
+ yy585:
9466
+ ++p;
9467
+ yych = *p;
9468
+ if (yych <= 0x7F)
9469
+ goto yy579;
9470
+ if (yych <= 0x9F)
9471
+ goto yy582;
9472
+ goto yy579;
9473
+ yy586:
9474
+ ++p;
9475
+ yych = *p;
9476
+ if (yych <= 0x8F)
9477
+ goto yy579;
9478
+ if (yych <= 0xBF)
9479
+ goto yy584;
9480
+ goto yy579;
9481
+ yy587:
9482
+ ++p;
9483
+ yych = *p;
9484
+ if (yych <= 0x7F)
9485
+ goto yy579;
9486
+ if (yych <= 0xBF)
9487
+ goto yy584;
9488
+ goto yy579;
9489
+ yy588:
9490
+ ++p;
9491
+ yych = *p;
9492
+ if (yych <= 0x7F)
9493
+ goto yy579;
9494
+ if (yych <= 0x8F)
9495
+ goto yy584;
9496
+ goto yy579;
9497
+ yy589:
9498
+ ++p;
9499
+ yych = *p;
9500
+ if (yybm[0 + yych] & 128) {
9501
+ goto yy580;
9502
+ }
9503
+ if (yych <= 's') {
9504
+ if (yych <= 'R') {
9505
+ if (yych <= '\n') {
9506
+ if (yych <= '\t')
9507
+ goto yy577;
9508
+ goto yy579;
9509
+ } else {
9510
+ if (yych != 'P')
9511
+ goto yy577;
9512
+ }
9513
+ } else {
9514
+ if (yych <= 'o') {
9515
+ if (yych <= 'S')
9516
+ goto yy591;
9517
+ goto yy577;
9518
+ } else {
9519
+ if (yych <= 'p')
9520
+ goto yy590;
9521
+ if (yych <= 'r')
9522
+ goto yy577;
9523
+ goto yy591;
9524
+ }
9525
+ }
9526
+ } else {
9527
+ if (yych <= 0xEC) {
9528
+ if (yych <= 0xC1) {
9529
+ if (yych <= 0x7F)
9530
+ goto yy577;
9531
+ goto yy579;
9532
+ } else {
9533
+ if (yych <= 0xDF)
9534
+ goto yy582;
9535
+ if (yych <= 0xE0)
9536
+ goto yy583;
9537
+ goto yy584;
9538
+ }
9539
+ } else {
9540
+ if (yych <= 0xF0) {
9541
+ if (yych <= 0xED)
9542
+ goto yy585;
9543
+ if (yych <= 0xEF)
9544
+ goto yy584;
9545
+ goto yy586;
9546
+ } else {
9547
+ if (yych <= 0xF3)
9548
+ goto yy587;
9549
+ if (yych <= 0xF4)
9550
+ goto yy588;
9551
+ goto yy579;
9552
+ }
9553
+ }
9554
+ }
9555
+ yy590:
9556
+ ++p;
9557
+ yych = *p;
9558
+ if (yybm[0 + yych] & 128) {
9559
+ goto yy580;
9560
+ }
9561
+ if (yych <= 0xC1) {
9562
+ if (yych <= 'R') {
9563
+ if (yych == '\n')
9564
+ goto yy579;
9565
+ if (yych <= 'Q')
9566
+ goto yy577;
9567
+ goto yy592;
9568
+ } else {
9569
+ if (yych == 'r')
9570
+ goto yy592;
9571
+ if (yych <= 0x7F)
9572
+ goto yy577;
9573
+ goto yy579;
9574
+ }
9575
+ } else {
9576
+ if (yych <= 0xED) {
9577
+ if (yych <= 0xDF)
9578
+ goto yy582;
9579
+ if (yych <= 0xE0)
9580
+ goto yy583;
9581
+ if (yych <= 0xEC)
9582
+ goto yy584;
9583
+ goto yy585;
9584
+ } else {
9585
+ if (yych <= 0xF0) {
9586
+ if (yych <= 0xEF)
9587
+ goto yy584;
9588
+ goto yy586;
9589
+ } else {
9590
+ if (yych <= 0xF3)
9591
+ goto yy587;
9592
+ if (yych <= 0xF4)
9593
+ goto yy588;
9594
+ goto yy579;
9595
+ }
9596
+ }
9597
+ }
9598
+ yy591:
9599
+ ++p;
9600
+ yych = *p;
9601
+ if (yybm[0 + yych] & 128) {
9602
+ goto yy580;
9603
+ }
9604
+ if (yych <= 't') {
9605
+ if (yych <= 'S') {
9606
+ if (yych <= '\n') {
9607
+ if (yych <= '\t')
9608
+ goto yy577;
9609
+ goto yy579;
9610
+ } else {
9611
+ if (yych == 'C')
9612
+ goto yy593;
9613
+ goto yy577;
9614
+ }
9615
+ } else {
9616
+ if (yych <= 'b') {
9617
+ if (yych <= 'T')
9618
+ goto yy594;
9619
+ goto yy577;
9620
+ } else {
9621
+ if (yych <= 'c')
9622
+ goto yy593;
9623
+ if (yych <= 's')
9624
+ goto yy577;
9625
+ goto yy594;
9626
+ }
9627
+ }
9628
+ } else {
9629
+ if (yych <= 0xEC) {
9630
+ if (yych <= 0xC1) {
9631
+ if (yych <= 0x7F)
9632
+ goto yy577;
9633
+ goto yy579;
9634
+ } else {
9635
+ if (yych <= 0xDF)
9636
+ goto yy582;
9637
+ if (yych <= 0xE0)
9638
+ goto yy583;
9639
+ goto yy584;
9640
+ }
9641
+ } else {
9642
+ if (yych <= 0xF0) {
9643
+ if (yych <= 0xED)
9644
+ goto yy585;
9645
+ if (yych <= 0xEF)
9646
+ goto yy584;
9647
+ goto yy586;
9648
+ } else {
9649
+ if (yych <= 0xF3)
9650
+ goto yy587;
9651
+ if (yych <= 0xF4)
9652
+ goto yy588;
9653
+ goto yy579;
9654
+ }
9655
+ }
9656
+ }
9657
+ yy592:
9658
+ ++p;
9659
+ yych = *p;
9660
+ if (yybm[0 + yych] & 128) {
9661
+ goto yy580;
9662
+ }
9663
+ if (yych <= 0xC1) {
9664
+ if (yych <= 'E') {
9665
+ if (yych == '\n')
9666
+ goto yy579;
9667
+ if (yych <= 'D')
9668
+ goto yy577;
9669
+ goto yy595;
9670
+ } else {
9671
+ if (yych == 'e')
9672
+ goto yy595;
9673
+ if (yych <= 0x7F)
9674
+ goto yy577;
9675
+ goto yy579;
9676
+ }
9677
+ } else {
9678
+ if (yych <= 0xED) {
9679
+ if (yych <= 0xDF)
9680
+ goto yy582;
9681
+ if (yych <= 0xE0)
9682
+ goto yy583;
9683
+ if (yych <= 0xEC)
9684
+ goto yy584;
9685
+ goto yy585;
9686
+ } else {
9687
+ if (yych <= 0xF0) {
9688
+ if (yych <= 0xEF)
9689
+ goto yy584;
9690
+ goto yy586;
9691
+ } else {
9692
+ if (yych <= 0xF3)
9693
+ goto yy587;
9694
+ if (yych <= 0xF4)
9695
+ goto yy588;
9696
+ goto yy579;
9697
+ }
9698
+ }
9699
+ }
9700
+ yy593:
9701
+ ++p;
9702
+ yych = *p;
9703
+ if (yybm[0 + yych] & 128) {
9704
+ goto yy580;
9705
+ }
9706
+ if (yych <= 0xC1) {
9707
+ if (yych <= 'R') {
9708
+ if (yych == '\n')
9709
+ goto yy579;
9710
+ if (yych <= 'Q')
9711
+ goto yy577;
9712
+ goto yy596;
9713
+ } else {
9714
+ if (yych == 'r')
9715
+ goto yy596;
9716
+ if (yych <= 0x7F)
9717
+ goto yy577;
9718
+ goto yy579;
9719
+ }
9720
+ } else {
9721
+ if (yych <= 0xED) {
9722
+ if (yych <= 0xDF)
9723
+ goto yy582;
9724
+ if (yych <= 0xE0)
9725
+ goto yy583;
9726
+ if (yych <= 0xEC)
9727
+ goto yy584;
9728
+ goto yy585;
9729
+ } else {
9730
+ if (yych <= 0xF0) {
9731
+ if (yych <= 0xEF)
9732
+ goto yy584;
9733
+ goto yy586;
9734
+ } else {
9735
+ if (yych <= 0xF3)
9736
+ goto yy587;
9737
+ if (yych <= 0xF4)
9738
+ goto yy588;
9739
+ goto yy579;
9740
+ }
9741
+ }
9742
+ }
9743
+ yy594:
9744
+ ++p;
9745
+ yych = *p;
9746
+ if (yybm[0 + yych] & 128) {
9747
+ goto yy580;
9748
+ }
9749
+ if (yych <= 0xC1) {
9750
+ if (yych <= 'Y') {
9751
+ if (yych == '\n')
9752
+ goto yy579;
9753
+ if (yych <= 'X')
9754
+ goto yy577;
9755
+ goto yy597;
9756
+ } else {
9757
+ if (yych == 'y')
9758
+ goto yy597;
9759
+ if (yych <= 0x7F)
9760
+ goto yy577;
9761
+ goto yy579;
9762
+ }
9763
+ } else {
9764
+ if (yych <= 0xED) {
9765
+ if (yych <= 0xDF)
9766
+ goto yy582;
9767
+ if (yych <= 0xE0)
9768
+ goto yy583;
9769
+ if (yych <= 0xEC)
9770
+ goto yy584;
9771
+ goto yy585;
9772
+ } else {
9773
+ if (yych <= 0xF0) {
9774
+ if (yych <= 0xEF)
9775
+ goto yy584;
9776
+ goto yy586;
9777
+ } else {
9778
+ if (yych <= 0xF3)
9779
+ goto yy587;
9780
+ if (yych <= 0xF4)
9781
+ goto yy588;
9782
+ goto yy579;
9783
+ }
9784
+ }
9785
+ }
9786
+ yy595:
9787
+ ++p;
9788
+ yych = *p;
9789
+ if (yybm[0 + yych] & 128) {
9790
+ goto yy580;
9791
+ }
9792
+ if (yych <= 0xDF) {
9793
+ if (yych <= '=') {
9794
+ if (yych == '\n')
9795
+ goto yy579;
9796
+ goto yy577;
9797
+ } else {
9798
+ if (yych <= '>')
9799
+ goto yy598;
9800
+ if (yych <= 0x7F)
9801
+ goto yy577;
9802
+ if (yych <= 0xC1)
9803
+ goto yy579;
9804
+ goto yy582;
9805
+ }
9806
+ } else {
9807
+ if (yych <= 0xEF) {
9808
+ if (yych <= 0xE0)
9809
+ goto yy583;
9810
+ if (yych == 0xED)
9811
+ goto yy585;
9812
+ goto yy584;
9813
+ } else {
9814
+ if (yych <= 0xF0)
9815
+ goto yy586;
9816
+ if (yych <= 0xF3)
9817
+ goto yy587;
9818
+ if (yych <= 0xF4)
9819
+ goto yy588;
9820
+ goto yy579;
9821
+ }
9822
+ }
9823
+ yy596:
9824
+ ++p;
9825
+ yych = *p;
9826
+ if (yybm[0 + yych] & 128) {
9827
+ goto yy580;
9828
+ }
9829
+ if (yych <= 0xC1) {
9830
+ if (yych <= 'I') {
9831
+ if (yych == '\n')
9832
+ goto yy579;
9833
+ if (yych <= 'H')
9834
+ goto yy577;
9835
+ goto yy600;
9836
+ } else {
9837
+ if (yych == 'i')
9838
+ goto yy600;
9839
+ if (yych <= 0x7F)
9840
+ goto yy577;
9841
+ goto yy579;
9842
+ }
9843
+ } else {
9844
+ if (yych <= 0xED) {
9845
+ if (yych <= 0xDF)
9846
+ goto yy582;
9847
+ if (yych <= 0xE0)
9848
+ goto yy583;
9849
+ if (yych <= 0xEC)
9850
+ goto yy584;
9851
+ goto yy585;
9852
+ } else {
9853
+ if (yych <= 0xF0) {
9854
+ if (yych <= 0xEF)
9855
+ goto yy584;
9856
+ goto yy586;
9857
+ } else {
9858
+ if (yych <= 0xF3)
9859
+ goto yy587;
9860
+ if (yych <= 0xF4)
9861
+ goto yy588;
9862
+ goto yy579;
9863
+ }
9864
+ }
9865
+ }
9866
+ yy597:
9867
+ ++p;
9868
+ yych = *p;
9869
+ if (yybm[0 + yych] & 128) {
9870
+ goto yy580;
9871
+ }
9872
+ if (yych <= 0xC1) {
9873
+ if (yych <= 'L') {
9874
+ if (yych == '\n')
9875
+ goto yy579;
9876
+ if (yych <= 'K')
9877
+ goto yy577;
9878
+ goto yy592;
9879
+ } else {
9880
+ if (yych == 'l')
9881
+ goto yy592;
9882
+ if (yych <= 0x7F)
9883
+ goto yy577;
9884
+ goto yy579;
9885
+ }
9886
+ } else {
9887
+ if (yych <= 0xED) {
9888
+ if (yych <= 0xDF)
9889
+ goto yy582;
9890
+ if (yych <= 0xE0)
9891
+ goto yy583;
9892
+ if (yych <= 0xEC)
9893
+ goto yy584;
9894
+ goto yy585;
9895
+ } else {
9896
+ if (yych <= 0xF0) {
9897
+ if (yych <= 0xEF)
9898
+ goto yy584;
9899
+ goto yy586;
9900
+ } else {
9901
+ if (yych <= 0xF3)
9902
+ goto yy587;
9903
+ if (yych <= 0xF4)
9904
+ goto yy588;
9905
+ goto yy579;
9906
+ }
9907
+ }
9908
+ }
9909
+ yy598:
9910
+ yyaccept = 1;
9911
+ marker = ++p;
9912
+ yych = *p;
9913
+ if (yybm[0 + yych] & 64) {
9914
+ goto yy577;
9915
+ }
9916
+ if (yych <= 0xEC) {
9917
+ if (yych <= 0xC1) {
9918
+ if (yych <= '\n')
9919
+ goto yy599;
9920
+ if (yych <= '<')
9921
+ goto yy580;
9922
+ } else {
9923
+ if (yych <= 0xDF)
9924
+ goto yy582;
9925
+ if (yych <= 0xE0)
9926
+ goto yy583;
9927
+ goto yy584;
9928
+ }
9929
+ } else {
9930
+ if (yych <= 0xF0) {
9931
+ if (yych <= 0xED)
9932
+ goto yy585;
9933
+ if (yych <= 0xEF)
9934
+ goto yy584;
9935
+ goto yy586;
9936
+ } else {
9937
+ if (yych <= 0xF3)
9938
+ goto yy587;
9939
+ if (yych <= 0xF4)
9940
+ goto yy588;
9941
+ }
9942
+ }
9943
+ yy599 : { return (bufsize_t)(p - start); }
9944
+ yy600:
9945
+ ++p;
9946
+ yych = *p;
9947
+ if (yybm[0 + yych] & 128) {
9948
+ goto yy580;
9949
+ }
9950
+ if (yych <= 0xC1) {
9951
+ if (yych <= 'P') {
9952
+ if (yych == '\n')
9953
+ goto yy579;
9954
+ if (yych <= 'O')
9955
+ goto yy577;
9956
+ } else {
9957
+ if (yych == 'p')
9958
+ goto yy601;
9959
+ if (yych <= 0x7F)
9960
+ goto yy577;
9961
+ goto yy579;
9962
+ }
9963
+ } else {
9964
+ if (yych <= 0xED) {
9965
+ if (yych <= 0xDF)
9966
+ goto yy582;
9967
+ if (yych <= 0xE0)
9968
+ goto yy583;
9969
+ if (yych <= 0xEC)
9970
+ goto yy584;
9971
+ goto yy585;
9972
+ } else {
9973
+ if (yych <= 0xF0) {
9974
+ if (yych <= 0xEF)
9975
+ goto yy584;
9976
+ goto yy586;
9977
+ } else {
9978
+ if (yych <= 0xF3)
9979
+ goto yy587;
9980
+ if (yych <= 0xF4)
9981
+ goto yy588;
9982
+ goto yy579;
9983
+ }
9984
+ }
9985
+ }
9986
+ yy601:
9987
+ ++p;
9988
+ yych = *p;
9989
+ if (yybm[0 + yych] & 128) {
9990
+ goto yy580;
9991
+ }
9992
+ if (yych <= 0xC1) {
9993
+ if (yych <= 'T') {
9994
+ if (yych == '\n')
9995
+ goto yy579;
9996
+ if (yych <= 'S')
9997
+ goto yy577;
9998
+ goto yy595;
9999
+ } else {
10000
+ if (yych == 't')
10001
+ goto yy595;
10002
+ if (yych <= 0x7F)
10003
+ goto yy577;
10004
+ goto yy579;
10005
+ }
10006
+ } else {
10007
+ if (yych <= 0xED) {
10008
+ if (yych <= 0xDF)
10009
+ goto yy582;
10010
+ if (yych <= 0xE0)
10011
+ goto yy583;
10012
+ if (yych <= 0xEC)
10013
+ goto yy584;
10014
+ goto yy585;
10015
+ } else {
10016
+ if (yych <= 0xF0) {
10017
+ if (yych <= 0xEF)
10018
+ goto yy584;
10019
+ goto yy586;
10020
+ } else {
10021
+ if (yych <= 0xF3)
10022
+ goto yy587;
10023
+ if (yych <= 0xF4)
10024
+ goto yy588;
10025
+ goto yy579;
10026
+ }
10027
+ }
10028
+ }
10029
+ }
10030
+}
10031
+
10032
+// Try to match an HTML block end line of type 2
10033
+bufsize_t _scan_html_block_end_2(const unsigned char *p) {
10034
+ const unsigned char *marker = NULL;
10035
+ const unsigned char *start = p;
10036
+
10037
+ {
10038
+ unsigned char yych;
10039
+ unsigned int yyaccept = 0;
10040
+ static const unsigned char yybm[] = {
10041
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64,
10042
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10043
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64,
10044
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10045
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10046
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10047
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10048
+ 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10049
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10050
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10051
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10052
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10053
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10054
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10055
+ 0, 0, 0, 0,
10056
+ };
10057
+ yych = *p;
10058
+ if (yych <= 0xDF) {
10059
+ if (yych <= ',') {
10060
+ if (yych == '\n')
10061
+ goto yy606;
10062
+ } else {
10063
+ if (yych <= '-')
10064
+ goto yy607;
10065
+ if (yych <= 0x7F)
10066
+ goto yy604;
10067
+ if (yych <= 0xC1)
10068
+ goto yy606;
10069
+ goto yy608;
10070
+ }
10071
+ } else {
10072
+ if (yych <= 0xEF) {
10073
+ if (yych <= 0xE0)
10074
+ goto yy609;
10075
+ if (yych == 0xED)
10076
+ goto yy611;
10077
+ goto yy610;
10078
+ } else {
10079
+ if (yych <= 0xF0)
10080
+ goto yy612;
10081
+ if (yych <= 0xF3)
10082
+ goto yy613;
10083
+ if (yych <= 0xF4)
10084
+ goto yy614;
10085
+ goto yy606;
10086
+ }
10087
+ }
10088
+ yy604:
10089
+ yyaccept = 0;
10090
+ yych = *(marker = ++p);
10091
+ if (yych <= 0x7F) {
10092
+ if (yych != '\n')
10093
+ goto yy616;
10094
+ } else {
10095
+ if (yych <= 0xC1)
10096
+ goto yy605;
10097
+ if (yych <= 0xF4)
10098
+ goto yy616;
10099
+ }
10100
+ yy605 : { return 0; }
10101
+ yy606:
10102
+ yych = *++p;
10103
+ goto yy605;
10104
+ yy607:
10105
+ yyaccept = 0;
10106
+ yych = *(marker = ++p);
10107
+ if (yybm[0 + yych] & 128) {
10108
+ goto yy626;
10109
+ }
10110
+ if (yych <= 0x7F) {
10111
+ if (yych == '\n')
10112
+ goto yy605;
10113
+ goto yy616;
10114
+ } else {
10115
+ if (yych <= 0xC1)
10116
+ goto yy605;
10117
+ if (yych <= 0xF4)
10118
+ goto yy616;
10119
+ goto yy605;
10120
+ }
10121
+ yy608:
10122
+ yyaccept = 0;
10123
+ yych = *(marker = ++p);
10124
+ if (yych <= 0x7F)
10125
+ goto yy605;
10126
+ if (yych <= 0xBF)
10127
+ goto yy615;
10128
+ goto yy605;
10129
+ yy609:
10130
+ yyaccept = 0;
10131
+ yych = *(marker = ++p);
10132
+ if (yych <= 0x9F)
10133
+ goto yy605;
10134
+ if (yych <= 0xBF)
10135
+ goto yy619;
10136
+ goto yy605;
10137
+ yy610:
10138
+ yyaccept = 0;
10139
+ yych = *(marker = ++p);
10140
+ if (yych <= 0x7F)
10141
+ goto yy605;
10142
+ if (yych <= 0xBF)
10143
+ goto yy619;
10144
+ goto yy605;
10145
+ yy611:
10146
+ yyaccept = 0;
10147
+ yych = *(marker = ++p);
10148
+ if (yych <= 0x7F)
10149
+ goto yy605;
10150
+ if (yych <= 0x9F)
10151
+ goto yy619;
10152
+ goto yy605;
10153
+ yy612:
10154
+ yyaccept = 0;
10155
+ yych = *(marker = ++p);
10156
+ if (yych <= 0x8F)
10157
+ goto yy605;
10158
+ if (yych <= 0xBF)
10159
+ goto yy621;
10160
+ goto yy605;
10161
+ yy613:
10162
+ yyaccept = 0;
10163
+ yych = *(marker = ++p);
10164
+ if (yych <= 0x7F)
10165
+ goto yy605;
10166
+ if (yych <= 0xBF)
10167
+ goto yy621;
10168
+ goto yy605;
10169
+ yy614:
10170
+ yyaccept = 0;
10171
+ yych = *(marker = ++p);
10172
+ if (yych <= 0x7F)
10173
+ goto yy605;
10174
+ if (yych <= 0x8F)
10175
+ goto yy621;
10176
+ goto yy605;
10177
+ yy615:
10178
+ ++p;
10179
+ yych = *p;
10180
+ yy616:
10181
+ if (yybm[0 + yych] & 64) {
10182
+ goto yy615;
10183
+ }
10184
+ if (yych <= 0xEC) {
10185
+ if (yych <= 0xC1) {
10186
+ if (yych <= '\n')
10187
+ goto yy617;
10188
+ if (yych <= '-')
10189
+ goto yy618;
10190
+ } else {
10191
+ if (yych <= 0xDF)
10192
+ goto yy619;
10193
+ if (yych <= 0xE0)
10194
+ goto yy620;
10195
+ goto yy621;
10196
+ }
10197
+ } else {
10198
+ if (yych <= 0xF0) {
10199
+ if (yych <= 0xED)
10200
+ goto yy622;
10201
+ if (yych <= 0xEF)
10202
+ goto yy621;
10203
+ goto yy623;
10204
+ } else {
10205
+ if (yych <= 0xF3)
10206
+ goto yy624;
10207
+ if (yych <= 0xF4)
10208
+ goto yy625;
10209
+ }
10210
+ }
10211
+ yy617:
10212
+ p = marker;
10213
+ if (yyaccept == 0) {
10214
+ goto yy605;
10215
+ } else {
10216
+ goto yy629;
10217
+ }
10218
+ yy618:
10219
+ ++p;
10220
+ yych = *p;
10221
+ if (yybm[0 + yych] & 64) {
10222
+ goto yy615;
10223
+ }
10224
+ if (yych <= 0xEC) {
10225
+ if (yych <= 0xC1) {
10226
+ if (yych <= '\n')
10227
+ goto yy617;
10228
+ if (yych <= '-')
10229
+ goto yy626;
10230
+ goto yy617;
10231
+ } else {
10232
+ if (yych <= 0xDF)
10233
+ goto yy619;
10234
+ if (yych <= 0xE0)
10235
+ goto yy620;
10236
+ goto yy621;
10237
+ }
10238
+ } else {
10239
+ if (yych <= 0xF0) {
10240
+ if (yych <= 0xED)
10241
+ goto yy622;
10242
+ if (yych <= 0xEF)
10243
+ goto yy621;
10244
+ goto yy623;
10245
+ } else {
10246
+ if (yych <= 0xF3)
10247
+ goto yy624;
10248
+ if (yych <= 0xF4)
10249
+ goto yy625;
10250
+ goto yy617;
10251
+ }
10252
+ }
10253
+ yy619:
10254
+ ++p;
10255
+ yych = *p;
10256
+ if (yych <= 0x7F)
10257
+ goto yy617;
10258
+ if (yych <= 0xBF)
10259
+ goto yy615;
10260
+ goto yy617;
10261
+ yy620:
10262
+ ++p;
10263
+ yych = *p;
10264
+ if (yych <= 0x9F)
10265
+ goto yy617;
10266
+ if (yych <= 0xBF)
10267
+ goto yy619;
10268
+ goto yy617;
10269
+ yy621:
10270
+ ++p;
10271
+ yych = *p;
10272
+ if (yych <= 0x7F)
10273
+ goto yy617;
10274
+ if (yych <= 0xBF)
10275
+ goto yy619;
10276
+ goto yy617;
10277
+ yy622:
10278
+ ++p;
10279
+ yych = *p;
10280
+ if (yych <= 0x7F)
10281
+ goto yy617;
10282
+ if (yych <= 0x9F)
10283
+ goto yy619;
10284
+ goto yy617;
10285
+ yy623:
10286
+ ++p;
10287
+ yych = *p;
10288
+ if (yych <= 0x8F)
10289
+ goto yy617;
10290
+ if (yych <= 0xBF)
10291
+ goto yy621;
10292
+ goto yy617;
10293
+ yy624:
10294
+ ++p;
10295
+ yych = *p;
10296
+ if (yych <= 0x7F)
10297
+ goto yy617;
10298
+ if (yych <= 0xBF)
10299
+ goto yy621;
10300
+ goto yy617;
10301
+ yy625:
10302
+ ++p;
10303
+ yych = *p;
10304
+ if (yych <= 0x7F)
10305
+ goto yy617;
10306
+ if (yych <= 0x8F)
10307
+ goto yy621;
10308
+ goto yy617;
10309
+ yy626:
10310
+ ++p;
10311
+ yych = *p;
10312
+ if (yybm[0 + yych] & 128) {
10313
+ goto yy626;
10314
+ }
10315
+ if (yych <= 0xDF) {
10316
+ if (yych <= '=') {
10317
+ if (yych == '\n')
10318
+ goto yy617;
10319
+ goto yy615;
10320
+ } else {
10321
+ if (yych <= '>')
10322
+ goto yy628;
10323
+ if (yych <= 0x7F)
10324
+ goto yy615;
10325
+ if (yych <= 0xC1)
10326
+ goto yy617;
10327
+ goto yy619;
10328
+ }
10329
+ } else {
10330
+ if (yych <= 0xEF) {
10331
+ if (yych <= 0xE0)
10332
+ goto yy620;
10333
+ if (yych == 0xED)
10334
+ goto yy622;
10335
+ goto yy621;
10336
+ } else {
10337
+ if (yych <= 0xF0)
10338
+ goto yy623;
10339
+ if (yych <= 0xF3)
10340
+ goto yy624;
10341
+ if (yych <= 0xF4)
10342
+ goto yy625;
10343
+ goto yy617;
10344
+ }
10345
+ }
10346
+ yy628:
10347
+ yyaccept = 1;
10348
+ marker = ++p;
10349
+ yych = *p;
10350
+ if (yybm[0 + yych] & 64) {
10351
+ goto yy615;
10352
+ }
10353
+ if (yych <= 0xEC) {
10354
+ if (yych <= 0xC1) {
10355
+ if (yych <= '\n')
10356
+ goto yy629;
10357
+ if (yych <= '-')
10358
+ goto yy618;
10359
+ } else {
10360
+ if (yych <= 0xDF)
10361
+ goto yy619;
10362
+ if (yych <= 0xE0)
10363
+ goto yy620;
10364
+ goto yy621;
10365
+ }
10366
+ } else {
10367
+ if (yych <= 0xF0) {
10368
+ if (yych <= 0xED)
10369
+ goto yy622;
10370
+ if (yych <= 0xEF)
10371
+ goto yy621;
10372
+ goto yy623;
10373
+ } else {
10374
+ if (yych <= 0xF3)
10375
+ goto yy624;
10376
+ if (yych <= 0xF4)
10377
+ goto yy625;
10378
+ }
10379
+ }
10380
+ yy629 : { return (bufsize_t)(p - start); }
10381
+ }
10382
+}
10383
+
10384
+// Try to match an HTML block end line of type 3
10385
+bufsize_t _scan_html_block_end_3(const unsigned char *p) {
10386
+ const unsigned char *marker = NULL;
10387
+ const unsigned char *start = p;
10388
+
10389
+ {
10390
+ unsigned char yych;
10391
+ unsigned int yyaccept = 0;
10392
+ static const unsigned char yybm[] = {
10393
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64,
10394
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10395
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10396
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64,
10397
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10398
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10399
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10400
+ 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10401
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10402
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10403
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10404
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10405
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10406
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10407
+ 0, 0, 0, 0,
10408
+ };
10409
+ yych = *p;
10410
+ if (yych <= 0xDF) {
10411
+ if (yych <= '>') {
10412
+ if (yych == '\n')
10413
+ goto yy634;
10414
+ } else {
10415
+ if (yych <= '?')
10416
+ goto yy635;
10417
+ if (yych <= 0x7F)
10418
+ goto yy632;
10419
+ if (yych <= 0xC1)
10420
+ goto yy634;
10421
+ goto yy636;
10422
+ }
10423
+ } else {
10424
+ if (yych <= 0xEF) {
10425
+ if (yych <= 0xE0)
10426
+ goto yy637;
10427
+ if (yych == 0xED)
10428
+ goto yy639;
10429
+ goto yy638;
10430
+ } else {
10431
+ if (yych <= 0xF0)
10432
+ goto yy640;
10433
+ if (yych <= 0xF3)
10434
+ goto yy641;
10435
+ if (yych <= 0xF4)
10436
+ goto yy642;
10437
+ goto yy634;
10438
+ }
10439
+ }
10440
+ yy632:
10441
+ yyaccept = 0;
10442
+ yych = *(marker = ++p);
10443
+ if (yych <= 0x7F) {
10444
+ if (yych != '\n')
10445
+ goto yy644;
10446
+ } else {
10447
+ if (yych <= 0xC1)
10448
+ goto yy633;
10449
+ if (yych <= 0xF4)
10450
+ goto yy644;
10451
+ }
10452
+ yy633 : { return 0; }
10453
+ yy634:
10454
+ yych = *++p;
10455
+ goto yy633;
10456
+ yy635:
10457
+ yyaccept = 0;
10458
+ yych = *(marker = ++p);
10459
+ if (yych <= '>') {
10460
+ if (yych == '\n')
10461
+ goto yy633;
10462
+ if (yych <= '=')
10463
+ goto yy644;
10464
+ goto yy655;
10465
+ } else {
10466
+ if (yych <= 0x7F)
10467
+ goto yy644;
10468
+ if (yych <= 0xC1)
10469
+ goto yy633;
10470
+ if (yych <= 0xF4)
10471
+ goto yy644;
10472
+ goto yy633;
10473
+ }
10474
+ yy636:
10475
+ yyaccept = 0;
10476
+ yych = *(marker = ++p);
10477
+ if (yych <= 0x7F)
10478
+ goto yy633;
10479
+ if (yych <= 0xBF)
10480
+ goto yy643;
10481
+ goto yy633;
10482
+ yy637:
10483
+ yyaccept = 0;
10484
+ yych = *(marker = ++p);
10485
+ if (yych <= 0x9F)
10486
+ goto yy633;
10487
+ if (yych <= 0xBF)
10488
+ goto yy648;
10489
+ goto yy633;
10490
+ yy638:
10491
+ yyaccept = 0;
10492
+ yych = *(marker = ++p);
10493
+ if (yych <= 0x7F)
10494
+ goto yy633;
10495
+ if (yych <= 0xBF)
10496
+ goto yy648;
10497
+ goto yy633;
10498
+ yy639:
10499
+ yyaccept = 0;
10500
+ yych = *(marker = ++p);
10501
+ if (yych <= 0x7F)
10502
+ goto yy633;
10503
+ if (yych <= 0x9F)
10504
+ goto yy648;
10505
+ goto yy633;
10506
+ yy640:
10507
+ yyaccept = 0;
10508
+ yych = *(marker = ++p);
10509
+ if (yych <= 0x8F)
10510
+ goto yy633;
10511
+ if (yych <= 0xBF)
10512
+ goto yy650;
10513
+ goto yy633;
10514
+ yy641:
10515
+ yyaccept = 0;
10516
+ yych = *(marker = ++p);
10517
+ if (yych <= 0x7F)
10518
+ goto yy633;
10519
+ if (yych <= 0xBF)
10520
+ goto yy650;
10521
+ goto yy633;
10522
+ yy642:
10523
+ yyaccept = 0;
10524
+ yych = *(marker = ++p);
10525
+ if (yych <= 0x7F)
10526
+ goto yy633;
10527
+ if (yych <= 0x8F)
10528
+ goto yy650;
10529
+ goto yy633;
10530
+ yy643:
10531
+ ++p;
10532
+ yych = *p;
10533
+ yy644:
10534
+ if (yybm[0 + yych] & 64) {
10535
+ goto yy643;
10536
+ }
10537
+ if (yych <= 0xEC) {
10538
+ if (yych <= 0xC1) {
10539
+ if (yych <= '\n')
10540
+ goto yy645;
10541
+ if (yych <= '?')
10542
+ goto yy646;
10543
+ } else {
10544
+ if (yych <= 0xDF)
10545
+ goto yy648;
10546
+ if (yych <= 0xE0)
10547
+ goto yy649;
10548
+ goto yy650;
10549
+ }
10550
+ } else {
10551
+ if (yych <= 0xF0) {
10552
+ if (yych <= 0xED)
10553
+ goto yy651;
10554
+ if (yych <= 0xEF)
10555
+ goto yy650;
10556
+ goto yy652;
10557
+ } else {
10558
+ if (yych <= 0xF3)
10559
+ goto yy653;
10560
+ if (yych <= 0xF4)
10561
+ goto yy654;
10562
+ }
10563
+ }
10564
+ yy645:
10565
+ p = marker;
10566
+ if (yyaccept == 0) {
10567
+ goto yy633;
10568
+ } else {
10569
+ goto yy656;
10570
+ }
10571
+ yy646:
10572
+ ++p;
10573
+ yych = *p;
10574
+ if (yybm[0 + yych] & 128) {
10575
+ goto yy646;
10576
+ }
10577
+ if (yych <= 0xDF) {
10578
+ if (yych <= '=') {
10579
+ if (yych == '\n')
10580
+ goto yy645;
10581
+ goto yy643;
10582
+ } else {
10583
+ if (yych <= '>')
10584
+ goto yy655;
10585
+ if (yych <= 0x7F)
10586
+ goto yy643;
10587
+ if (yych <= 0xC1)
10588
+ goto yy645;
10589
+ }
10590
+ } else {
10591
+ if (yych <= 0xEF) {
10592
+ if (yych <= 0xE0)
10593
+ goto yy649;
10594
+ if (yych == 0xED)
10595
+ goto yy651;
10596
+ goto yy650;
10597
+ } else {
10598
+ if (yych <= 0xF0)
10599
+ goto yy652;
10600
+ if (yych <= 0xF3)
10601
+ goto yy653;
10602
+ if (yych <= 0xF4)
10603
+ goto yy654;
10604
+ goto yy645;
10605
+ }
10606
+ }
10607
+ yy648:
10608
+ ++p;
10609
+ yych = *p;
10610
+ if (yych <= 0x7F)
10611
+ goto yy645;
10612
+ if (yych <= 0xBF)
10613
+ goto yy643;
10614
+ goto yy645;
10615
+ yy649:
10616
+ ++p;
10617
+ yych = *p;
10618
+ if (yych <= 0x9F)
10619
+ goto yy645;
10620
+ if (yych <= 0xBF)
10621
+ goto yy648;
10622
+ goto yy645;
10623
+ yy650:
10624
+ ++p;
10625
+ yych = *p;
10626
+ if (yych <= 0x7F)
10627
+ goto yy645;
10628
+ if (yych <= 0xBF)
10629
+ goto yy648;
10630
+ goto yy645;
10631
+ yy651:
10632
+ ++p;
10633
+ yych = *p;
10634
+ if (yych <= 0x7F)
10635
+ goto yy645;
10636
+ if (yych <= 0x9F)
10637
+ goto yy648;
10638
+ goto yy645;
10639
+ yy652:
10640
+ ++p;
10641
+ yych = *p;
10642
+ if (yych <= 0x8F)
10643
+ goto yy645;
10644
+ if (yych <= 0xBF)
10645
+ goto yy650;
10646
+ goto yy645;
10647
+ yy653:
10648
+ ++p;
10649
+ yych = *p;
10650
+ if (yych <= 0x7F)
10651
+ goto yy645;
10652
+ if (yych <= 0xBF)
10653
+ goto yy650;
10654
+ goto yy645;
10655
+ yy654:
10656
+ ++p;
10657
+ yych = *p;
10658
+ if (yych <= 0x7F)
10659
+ goto yy645;
10660
+ if (yych <= 0x8F)
10661
+ goto yy650;
10662
+ goto yy645;
10663
+ yy655:
10664
+ yyaccept = 1;
10665
+ marker = ++p;
10666
+ yych = *p;
10667
+ if (yybm[0 + yych] & 64) {
10668
+ goto yy643;
10669
+ }
10670
+ if (yych <= 0xEC) {
10671
+ if (yych <= 0xC1) {
10672
+ if (yych <= '\n')
10673
+ goto yy656;
10674
+ if (yych <= '?')
10675
+ goto yy646;
10676
+ } else {
10677
+ if (yych <= 0xDF)
10678
+ goto yy648;
10679
+ if (yych <= 0xE0)
10680
+ goto yy649;
10681
+ goto yy650;
10682
+ }
10683
+ } else {
10684
+ if (yych <= 0xF0) {
10685
+ if (yych <= 0xED)
10686
+ goto yy651;
10687
+ if (yych <= 0xEF)
10688
+ goto yy650;
10689
+ goto yy652;
10690
+ } else {
10691
+ if (yych <= 0xF3)
10692
+ goto yy653;
10693
+ if (yych <= 0xF4)
10694
+ goto yy654;
10695
+ }
10696
+ }
10697
+ yy656 : { return (bufsize_t)(p - start); }
10698
+ }
10699
+}
10700
+
10701
+// Try to match an HTML block end line of type 4
10702
+bufsize_t _scan_html_block_end_4(const unsigned char *p) {
10703
+ const unsigned char *marker = NULL;
10704
+ const unsigned char *start = p;
10705
+
10706
+ {
10707
+ unsigned char yych;
10708
+ unsigned int yyaccept = 0;
10709
+ static const unsigned char yybm[] = {
10710
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128,
10711
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
10712
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
10713
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
10714
+ 128, 128, 128, 128, 128, 128, 64, 128, 128, 128, 128, 128, 128, 128,
10715
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
10716
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
10717
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
10718
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
10719
+ 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10720
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10721
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10722
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10723
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10724
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10725
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10726
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10727
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10728
+ 0, 0, 0, 0,
10729
+ };
10730
+ yych = *p;
10731
+ if (yybm[0 + yych] & 64) {
10732
+ goto yy662;
10733
+ }
10734
+ if (yych <= 0xE0) {
10735
+ if (yych <= 0x7F) {
10736
+ if (yych == '\n')
10737
+ goto yy661;
10738
+ } else {
10739
+ if (yych <= 0xC1)
10740
+ goto yy661;
10741
+ if (yych <= 0xDF)
10742
+ goto yy665;
10743
+ goto yy666;
10744
+ }
10745
+ } else {
10746
+ if (yych <= 0xEF) {
10747
+ if (yych == 0xED)
10748
+ goto yy668;
10749
+ goto yy667;
10750
+ } else {
10751
+ if (yych <= 0xF0)
10752
+ goto yy669;
10753
+ if (yych <= 0xF3)
10754
+ goto yy670;
10755
+ if (yych <= 0xF4)
10756
+ goto yy671;
10757
+ goto yy661;
10758
+ }
10759
+ }
10760
+ yyaccept = 0;
10761
+ yych = *(marker = ++p);
10762
+ if (yych <= 0x7F) {
10763
+ if (yych != '\n')
10764
+ goto yy673;
10765
+ } else {
10766
+ if (yych <= 0xC1)
10767
+ goto yy660;
10768
+ if (yych <= 0xF4)
10769
+ goto yy673;
10770
+ }
10771
+ yy660 : { return 0; }
10772
+ yy661:
10773
+ yych = *++p;
10774
+ goto yy660;
10775
+ yy662:
10776
+ yyaccept = 1;
10777
+ marker = ++p;
10778
+ yych = *p;
10779
+ if (yybm[0 + yych] & 128) {
10780
+ goto yy672;
10781
+ }
10782
+ if (yych <= 0xEC) {
10783
+ if (yych <= 0xC1) {
10784
+ if (yych <= '\n')
10785
+ goto yy664;
10786
+ if (yych <= '>')
10787
+ goto yy662;
10788
+ } else {
10789
+ if (yych <= 0xDF)
10790
+ goto yy675;
10791
+ if (yych <= 0xE0)
10792
+ goto yy676;
10793
+ goto yy677;
10794
+ }
10795
+ } else {
10796
+ if (yych <= 0xF0) {
10797
+ if (yych <= 0xED)
10798
+ goto yy678;
10799
+ if (yych <= 0xEF)
10800
+ goto yy677;
10801
+ goto yy679;
10802
+ } else {
10803
+ if (yych <= 0xF3)
10804
+ goto yy680;
10805
+ if (yych <= 0xF4)
10806
+ goto yy681;
10807
+ }
10808
+ }
10809
+ yy664 : { return (bufsize_t)(p - start); }
10810
+ yy665:
10811
+ yyaccept = 0;
10812
+ yych = *(marker = ++p);
10813
+ if (yych <= 0x7F)
10814
+ goto yy660;
10815
+ if (yych <= 0xBF)
10816
+ goto yy672;
10817
+ goto yy660;
10818
+ yy666:
10819
+ yyaccept = 0;
10820
+ yych = *(marker = ++p);
10821
+ if (yych <= 0x9F)
10822
+ goto yy660;
10823
+ if (yych <= 0xBF)
10824
+ goto yy675;
10825
+ goto yy660;
10826
+ yy667:
10827
+ yyaccept = 0;
10828
+ yych = *(marker = ++p);
10829
+ if (yych <= 0x7F)
10830
+ goto yy660;
10831
+ if (yych <= 0xBF)
10832
+ goto yy675;
10833
+ goto yy660;
10834
+ yy668:
10835
+ yyaccept = 0;
10836
+ yych = *(marker = ++p);
10837
+ if (yych <= 0x7F)
10838
+ goto yy660;
10839
+ if (yych <= 0x9F)
10840
+ goto yy675;
10841
+ goto yy660;
10842
+ yy669:
10843
+ yyaccept = 0;
10844
+ yych = *(marker = ++p);
10845
+ if (yych <= 0x8F)
10846
+ goto yy660;
10847
+ if (yych <= 0xBF)
10848
+ goto yy677;
10849
+ goto yy660;
10850
+ yy670:
10851
+ yyaccept = 0;
10852
+ yych = *(marker = ++p);
10853
+ if (yych <= 0x7F)
10854
+ goto yy660;
10855
+ if (yych <= 0xBF)
10856
+ goto yy677;
10857
+ goto yy660;
10858
+ yy671:
10859
+ yyaccept = 0;
10860
+ yych = *(marker = ++p);
10861
+ if (yych <= 0x7F)
10862
+ goto yy660;
10863
+ if (yych <= 0x8F)
10864
+ goto yy677;
10865
+ goto yy660;
10866
+ yy672:
10867
+ ++p;
10868
+ yych = *p;
10869
+ yy673:
10870
+ if (yybm[0 + yych] & 128) {
10871
+ goto yy672;
10872
+ }
10873
+ if (yych <= 0xEC) {
10874
+ if (yych <= 0xC1) {
10875
+ if (yych <= '\n')
10876
+ goto yy674;
10877
+ if (yych <= '>')
10878
+ goto yy662;
10879
+ } else {
10880
+ if (yych <= 0xDF)
10881
+ goto yy675;
10882
+ if (yych <= 0xE0)
10883
+ goto yy676;
10884
+ goto yy677;
10885
+ }
10886
+ } else {
10887
+ if (yych <= 0xF0) {
10888
+ if (yych <= 0xED)
10889
+ goto yy678;
10890
+ if (yych <= 0xEF)
10891
+ goto yy677;
10892
+ goto yy679;
10893
+ } else {
10894
+ if (yych <= 0xF3)
10895
+ goto yy680;
10896
+ if (yych <= 0xF4)
10897
+ goto yy681;
10898
+ }
10899
+ }
10900
+ yy674:
10901
+ p = marker;
10902
+ if (yyaccept == 0) {
10903
+ goto yy660;
10904
+ } else {
10905
+ goto yy664;
10906
+ }
10907
+ yy675:
10908
+ ++p;
10909
+ yych = *p;
10910
+ if (yych <= 0x7F)
10911
+ goto yy674;
10912
+ if (yych <= 0xBF)
10913
+ goto yy672;
10914
+ goto yy674;
10915
+ yy676:
10916
+ ++p;
10917
+ yych = *p;
10918
+ if (yych <= 0x9F)
10919
+ goto yy674;
10920
+ if (yych <= 0xBF)
10921
+ goto yy675;
10922
+ goto yy674;
10923
+ yy677:
10924
+ ++p;
10925
+ yych = *p;
10926
+ if (yych <= 0x7F)
10927
+ goto yy674;
10928
+ if (yych <= 0xBF)
10929
+ goto yy675;
10930
+ goto yy674;
10931
+ yy678:
10932
+ ++p;
10933
+ yych = *p;
10934
+ if (yych <= 0x7F)
10935
+ goto yy674;
10936
+ if (yych <= 0x9F)
10937
+ goto yy675;
10938
+ goto yy674;
10939
+ yy679:
10940
+ ++p;
10941
+ yych = *p;
10942
+ if (yych <= 0x8F)
10943
+ goto yy674;
10944
+ if (yych <= 0xBF)
10945
+ goto yy677;
10946
+ goto yy674;
10947
+ yy680:
10948
+ ++p;
10949
+ yych = *p;
10950
+ if (yych <= 0x7F)
10951
+ goto yy674;
10952
+ if (yych <= 0xBF)
10953
+ goto yy677;
10954
+ goto yy674;
10955
+ yy681:
10956
+ ++p;
10957
+ yych = *p;
10958
+ if (yych <= 0x7F)
10959
+ goto yy674;
10960
+ if (yych <= 0x8F)
10961
+ goto yy677;
10962
+ goto yy674;
10963
+ }
10964
+}
10965
+
10966
+// Try to match an HTML block end line of type 5
10967
+bufsize_t _scan_html_block_end_5(const unsigned char *p) {
10968
+ const unsigned char *marker = NULL;
10969
+ const unsigned char *start = p;
10970
+
10971
+ {
10972
+ unsigned char yych;
10973
+ unsigned int yyaccept = 0;
10974
+ static const unsigned char yybm[] = {
10975
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64,
10976
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10977
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10978
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10979
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10980
+ 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10981
+ 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10982
+ 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10983
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10984
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10985
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10986
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10987
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10988
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10989
+ 0, 0, 0, 0,
10990
+ };
10991
+ yych = *p;
10992
+ if (yych <= 0xDF) {
10993
+ if (yych <= '\\') {
10994
+ if (yych == '\n')
10995
+ goto yy686;
10996
+ } else {
10997
+ if (yych <= ']')
10998
+ goto yy687;
10999
+ if (yych <= 0x7F)
11000
+ goto yy684;
11001
+ if (yych <= 0xC1)
11002
+ goto yy686;
11003
+ goto yy688;
11004
+ }
11005
+ } else {
11006
+ if (yych <= 0xEF) {
11007
+ if (yych <= 0xE0)
11008
+ goto yy689;
11009
+ if (yych == 0xED)
11010
+ goto yy691;
11011
+ goto yy690;
11012
+ } else {
11013
+ if (yych <= 0xF0)
11014
+ goto yy692;
11015
+ if (yych <= 0xF3)
11016
+ goto yy693;
11017
+ if (yych <= 0xF4)
11018
+ goto yy694;
11019
+ goto yy686;
11020
+ }
11021
+ }
11022
+ yy684:
11023
+ yyaccept = 0;
11024
+ yych = *(marker = ++p);
11025
+ if (yych <= 0x7F) {
11026
+ if (yych != '\n')
11027
+ goto yy696;
11028
+ } else {
11029
+ if (yych <= 0xC1)
11030
+ goto yy685;
11031
+ if (yych <= 0xF4)
11032
+ goto yy696;
11033
+ }
11034
+ yy685 : { return 0; }
11035
+ yy686:
11036
+ yych = *++p;
11037
+ goto yy685;
11038
+ yy687:
11039
+ yyaccept = 0;
11040
+ yych = *(marker = ++p);
11041
+ if (yybm[0 + yych] & 128) {
11042
+ goto yy706;
11043
+ }
11044
+ if (yych <= 0x7F) {
11045
+ if (yych == '\n')
11046
+ goto yy685;
11047
+ goto yy696;
11048
+ } else {
11049
+ if (yych <= 0xC1)
11050
+ goto yy685;
11051
+ if (yych <= 0xF4)
11052
+ goto yy696;
11053
+ goto yy685;
11054
+ }
11055
+ yy688:
11056
+ yyaccept = 0;
11057
+ yych = *(marker = ++p);
11058
+ if (yych <= 0x7F)
11059
+ goto yy685;
11060
+ if (yych <= 0xBF)
11061
+ goto yy695;
11062
+ goto yy685;
11063
+ yy689:
11064
+ yyaccept = 0;
11065
+ yych = *(marker = ++p);
11066
+ if (yych <= 0x9F)
11067
+ goto yy685;
11068
+ if (yych <= 0xBF)
11069
+ goto yy699;
11070
+ goto yy685;
11071
+ yy690:
11072
+ yyaccept = 0;
11073
+ yych = *(marker = ++p);
11074
+ if (yych <= 0x7F)
11075
+ goto yy685;
11076
+ if (yych <= 0xBF)
11077
+ goto yy699;
11078
+ goto yy685;
11079
+ yy691:
11080
+ yyaccept = 0;
11081
+ yych = *(marker = ++p);
11082
+ if (yych <= 0x7F)
11083
+ goto yy685;
11084
+ if (yych <= 0x9F)
11085
+ goto yy699;
11086
+ goto yy685;
11087
+ yy692:
11088
+ yyaccept = 0;
11089
+ yych = *(marker = ++p);
11090
+ if (yych <= 0x8F)
11091
+ goto yy685;
11092
+ if (yych <= 0xBF)
11093
+ goto yy701;
11094
+ goto yy685;
11095
+ yy693:
11096
+ yyaccept = 0;
11097
+ yych = *(marker = ++p);
11098
+ if (yych <= 0x7F)
11099
+ goto yy685;
11100
+ if (yych <= 0xBF)
11101
+ goto yy701;
11102
+ goto yy685;
11103
+ yy694:
11104
+ yyaccept = 0;
11105
+ yych = *(marker = ++p);
11106
+ if (yych <= 0x7F)
11107
+ goto yy685;
11108
+ if (yych <= 0x8F)
11109
+ goto yy701;
11110
+ goto yy685;
11111
+ yy695:
11112
+ ++p;
11113
+ yych = *p;
11114
+ yy696:
11115
+ if (yybm[0 + yych] & 64) {
11116
+ goto yy695;
11117
+ }
11118
+ if (yych <= 0xEC) {
11119
+ if (yych <= 0xC1) {
11120
+ if (yych <= '\n')
11121
+ goto yy697;
11122
+ if (yych <= ']')
11123
+ goto yy698;
11124
+ } else {
11125
+ if (yych <= 0xDF)
11126
+ goto yy699;
11127
+ if (yych <= 0xE0)
11128
+ goto yy700;
11129
+ goto yy701;
11130
+ }
11131
+ } else {
11132
+ if (yych <= 0xF0) {
11133
+ if (yych <= 0xED)
11134
+ goto yy702;
11135
+ if (yych <= 0xEF)
11136
+ goto yy701;
11137
+ goto yy703;
11138
+ } else {
11139
+ if (yych <= 0xF3)
11140
+ goto yy704;
11141
+ if (yych <= 0xF4)
11142
+ goto yy705;
11143
+ }
11144
+ }
11145
+ yy697:
11146
+ p = marker;
11147
+ if (yyaccept == 0) {
11148
+ goto yy685;
11149
+ } else {
11150
+ goto yy709;
11151
+ }
11152
+ yy698:
11153
+ ++p;
11154
+ yych = *p;
11155
+ if (yybm[0 + yych] & 64) {
11156
+ goto yy695;
11157
+ }
11158
+ if (yych <= 0xEC) {
11159
+ if (yych <= 0xC1) {
11160
+ if (yych <= '\n')
11161
+ goto yy697;
11162
+ if (yych <= ']')
11163
+ goto yy706;
11164
+ goto yy697;
11165
+ } else {
11166
+ if (yych <= 0xDF)
11167
+ goto yy699;
11168
+ if (yych <= 0xE0)
11169
+ goto yy700;
11170
+ goto yy701;
11171
+ }
11172
+ } else {
11173
+ if (yych <= 0xF0) {
11174
+ if (yych <= 0xED)
11175
+ goto yy702;
11176
+ if (yych <= 0xEF)
11177
+ goto yy701;
11178
+ goto yy703;
11179
+ } else {
11180
+ if (yych <= 0xF3)
11181
+ goto yy704;
11182
+ if (yych <= 0xF4)
11183
+ goto yy705;
11184
+ goto yy697;
11185
+ }
11186
+ }
11187
+ yy699:
11188
+ ++p;
11189
+ yych = *p;
11190
+ if (yych <= 0x7F)
11191
+ goto yy697;
11192
+ if (yych <= 0xBF)
11193
+ goto yy695;
11194
+ goto yy697;
11195
+ yy700:
11196
+ ++p;
11197
+ yych = *p;
11198
+ if (yych <= 0x9F)
11199
+ goto yy697;
11200
+ if (yych <= 0xBF)
11201
+ goto yy699;
11202
+ goto yy697;
11203
+ yy701:
11204
+ ++p;
11205
+ yych = *p;
11206
+ if (yych <= 0x7F)
11207
+ goto yy697;
11208
+ if (yych <= 0xBF)
11209
+ goto yy699;
11210
+ goto yy697;
11211
+ yy702:
11212
+ ++p;
11213
+ yych = *p;
11214
+ if (yych <= 0x7F)
11215
+ goto yy697;
11216
+ if (yych <= 0x9F)
11217
+ goto yy699;
11218
+ goto yy697;
11219
+ yy703:
11220
+ ++p;
11221
+ yych = *p;
11222
+ if (yych <= 0x8F)
11223
+ goto yy697;
11224
+ if (yych <= 0xBF)
11225
+ goto yy701;
11226
+ goto yy697;
11227
+ yy704:
11228
+ ++p;
11229
+ yych = *p;
11230
+ if (yych <= 0x7F)
11231
+ goto yy697;
11232
+ if (yych <= 0xBF)
11233
+ goto yy701;
11234
+ goto yy697;
11235
+ yy705:
11236
+ ++p;
11237
+ yych = *p;
11238
+ if (yych <= 0x7F)
11239
+ goto yy697;
11240
+ if (yych <= 0x8F)
11241
+ goto yy701;
11242
+ goto yy697;
11243
+ yy706:
11244
+ ++p;
11245
+ yych = *p;
11246
+ if (yybm[0 + yych] & 128) {
11247
+ goto yy706;
11248
+ }
11249
+ if (yych <= 0xDF) {
11250
+ if (yych <= '=') {
11251
+ if (yych == '\n')
11252
+ goto yy697;
11253
+ goto yy695;
11254
+ } else {
11255
+ if (yych <= '>')
11256
+ goto yy708;
11257
+ if (yych <= 0x7F)
11258
+ goto yy695;
11259
+ if (yych <= 0xC1)
11260
+ goto yy697;
11261
+ goto yy699;
11262
+ }
11263
+ } else {
11264
+ if (yych <= 0xEF) {
11265
+ if (yych <= 0xE0)
11266
+ goto yy700;
11267
+ if (yych == 0xED)
11268
+ goto yy702;
11269
+ goto yy701;
11270
+ } else {
11271
+ if (yych <= 0xF0)
11272
+ goto yy703;
11273
+ if (yych <= 0xF3)
11274
+ goto yy704;
11275
+ if (yych <= 0xF4)
11276
+ goto yy705;
11277
+ goto yy697;
11278
+ }
11279
+ }
11280
+ yy708:
11281
+ yyaccept = 1;
11282
+ marker = ++p;
11283
+ yych = *p;
11284
+ if (yybm[0 + yych] & 64) {
11285
+ goto yy695;
11286
+ }
11287
+ if (yych <= 0xEC) {
11288
+ if (yych <= 0xC1) {
11289
+ if (yych <= '\n')
11290
+ goto yy709;
11291
+ if (yych <= ']')
11292
+ goto yy698;
11293
+ } else {
11294
+ if (yych <= 0xDF)
11295
+ goto yy699;
11296
+ if (yych <= 0xE0)
11297
+ goto yy700;
11298
+ goto yy701;
11299
+ }
11300
+ } else {
11301
+ if (yych <= 0xF0) {
11302
+ if (yych <= 0xED)
11303
+ goto yy702;
11304
+ if (yych <= 0xEF)
11305
+ goto yy701;
11306
+ goto yy703;
11307
+ } else {
11308
+ if (yych <= 0xF3)
11309
+ goto yy704;
11310
+ if (yych <= 0xF4)
11311
+ goto yy705;
11312
+ }
11313
+ }
11314
+ yy709 : { return (bufsize_t)(p - start); }
11315
+ }
11316
+}
11317
+
11318
+// Try to match a link title (in single quotes, in double quotes, or
11319
+// in parentheses), returning number of chars matched. Allow one
11320
+// level of internal nesting (quotes within quotes).
11321
+bufsize_t _scan_link_title(const unsigned char *p) {
11322
+ const unsigned char *marker = NULL;
11323
+ const unsigned char *start = p;
11324
+
11325
+ {
11326
+ unsigned char yych;
11327
+ unsigned int yyaccept = 0;
11328
+ static const unsigned char yybm[] = {
11329
+ 0, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
11330
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
11331
+ 208, 208, 208, 208, 208, 208, 192, 208, 208, 208, 208, 144, 208, 80,
11332
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
11333
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
11334
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
11335
+ 208, 208, 208, 208, 208, 208, 208, 208, 32, 208, 208, 208, 208, 208,
11336
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
11337
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
11338
+ 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11339
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11340
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11341
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11342
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11343
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11344
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11345
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11346
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11347
+ 0, 0, 0, 0,
11348
+ };
11349
+ yych = *p;
11350
+ if (yych <= '&') {
11351
+ if (yych == '"')
11352
+ goto yy714;
11353
+ } else {
11354
+ if (yych <= '\'')
11355
+ goto yy715;
11356
+ if (yych <= '(')
11357
+ goto yy716;
11358
+ }
11359
+ ++p;
11360
+ yy713 : { return 0; }
11361
+ yy714:
11362
+ yyaccept = 0;
11363
+ yych = *(marker = ++p);
11364
+ if (yych <= 0x00)
11365
+ goto yy713;
11366
+ if (yych <= 0x7F)
11367
+ goto yy718;
11368
+ if (yych <= 0xC1)
11369
+ goto yy713;
11370
+ if (yych <= 0xF4)
11371
+ goto yy718;
11372
+ goto yy713;
11373
+ yy715:
11374
+ yyaccept = 0;
11375
+ yych = *(marker = ++p);
11376
+ if (yych <= 0x00)
11377
+ goto yy713;
11378
+ if (yych <= 0x7F)
11379
+ goto yy732;
11380
+ if (yych <= 0xC1)
11381
+ goto yy713;
11382
+ if (yych <= 0xF4)
11383
+ goto yy732;
11384
+ goto yy713;
11385
+ yy716:
11386
+ yyaccept = 0;
11387
+ yych = *(marker = ++p);
11388
+ if (yych <= 0x00)
11389
+ goto yy713;
11390
+ if (yych <= 0x7F)
11391
+ goto yy745;
11392
+ if (yych <= 0xC1)
11393
+ goto yy713;
11394
+ if (yych <= 0xF4)
11395
+ goto yy745;
11396
+ goto yy713;
11397
+ yy717:
11398
+ ++p;
11399
+ yych = *p;
11400
+ yy718:
11401
+ if (yybm[0 + yych] & 16) {
11402
+ goto yy717;
11403
+ }
11404
+ if (yych <= 0xE0) {
11405
+ if (yych <= '\\') {
11406
+ if (yych <= 0x00)
11407
+ goto yy719;
11408
+ if (yych <= '"')
11409
+ goto yy720;
11410
+ goto yy722;
11411
+ } else {
11412
+ if (yych <= 0xC1)
11413
+ goto yy719;
11414
+ if (yych <= 0xDF)
11415
+ goto yy724;
11416
+ goto yy725;
11417
+ }
11418
+ } else {
11419
+ if (yych <= 0xEF) {
11420
+ if (yych == 0xED)
11421
+ goto yy727;
11422
+ goto yy726;
11423
+ } else {
11424
+ if (yych <= 0xF0)
11425
+ goto yy728;
11426
+ if (yych <= 0xF3)
11427
+ goto yy729;
11428
+ if (yych <= 0xF4)
11429
+ goto yy730;
11430
+ }
11431
+ }
11432
+ yy719:
11433
+ p = marker;
11434
+ if (yyaccept <= 1) {
11435
+ if (yyaccept == 0) {
11436
+ goto yy713;
11437
+ } else {
11438
+ goto yy721;
11439
+ }
11440
+ } else {
11441
+ if (yyaccept == 2) {
11442
+ goto yy734;
11443
+ } else {
11444
+ goto yy747;
11445
+ }
11446
+ }
11447
+ yy720:
11448
+ ++p;
11449
+ yy721 : { return (bufsize_t)(p - start); }
11450
+ yy722:
11451
+ ++p;
11452
+ yych = *p;
11453
+ if (yybm[0 + yych] & 16) {
11454
+ goto yy717;
11455
+ }
11456
+ if (yych <= 0xE0) {
11457
+ if (yych <= '\\') {
11458
+ if (yych <= 0x00)
11459
+ goto yy719;
11460
+ if (yych <= '"')
11461
+ goto yy757;
11462
+ goto yy722;
11463
+ } else {
11464
+ if (yych <= 0xC1)
11465
+ goto yy719;
11466
+ if (yych >= 0xE0)
11467
+ goto yy725;
11468
+ }
11469
+ } else {
11470
+ if (yych <= 0xEF) {
11471
+ if (yych == 0xED)
11472
+ goto yy727;
11473
+ goto yy726;
11474
+ } else {
11475
+ if (yych <= 0xF0)
11476
+ goto yy728;
11477
+ if (yych <= 0xF3)
11478
+ goto yy729;
11479
+ if (yych <= 0xF4)
11480
+ goto yy730;
11481
+ goto yy719;
11482
+ }
11483
+ }
11484
+ yy724:
11485
+ ++p;
11486
+ yych = *p;
11487
+ if (yych <= 0x7F)
11488
+ goto yy719;
11489
+ if (yych <= 0xBF)
11490
+ goto yy717;
11491
+ goto yy719;
11492
+ yy725:
11493
+ ++p;
11494
+ yych = *p;
11495
+ if (yych <= 0x9F)
11496
+ goto yy719;
11497
+ if (yych <= 0xBF)
11498
+ goto yy724;
11499
+ goto yy719;
11500
+ yy726:
11501
+ ++p;
11502
+ yych = *p;
11503
+ if (yych <= 0x7F)
11504
+ goto yy719;
11505
+ if (yych <= 0xBF)
11506
+ goto yy724;
11507
+ goto yy719;
11508
+ yy727:
11509
+ ++p;
11510
+ yych = *p;
11511
+ if (yych <= 0x7F)
11512
+ goto yy719;
11513
+ if (yych <= 0x9F)
11514
+ goto yy724;
11515
+ goto yy719;
11516
+ yy728:
11517
+ ++p;
11518
+ yych = *p;
11519
+ if (yych <= 0x8F)
11520
+ goto yy719;
11521
+ if (yych <= 0xBF)
11522
+ goto yy726;
11523
+ goto yy719;
11524
+ yy729:
11525
+ ++p;
11526
+ yych = *p;
11527
+ if (yych <= 0x7F)
11528
+ goto yy719;
11529
+ if (yych <= 0xBF)
11530
+ goto yy726;
11531
+ goto yy719;
11532
+ yy730:
11533
+ ++p;
11534
+ yych = *p;
11535
+ if (yych <= 0x7F)
11536
+ goto yy719;
11537
+ if (yych <= 0x8F)
11538
+ goto yy726;
11539
+ goto yy719;
11540
+ yy731:
11541
+ ++p;
11542
+ yych = *p;
11543
+ yy732:
11544
+ if (yybm[0 + yych] & 64) {
11545
+ goto yy731;
11546
+ }
11547
+ if (yych <= 0xE0) {
11548
+ if (yych <= '\\') {
11549
+ if (yych <= 0x00)
11550
+ goto yy719;
11551
+ if (yych >= '(')
11552
+ goto yy735;
11553
+ } else {
11554
+ if (yych <= 0xC1)
11555
+ goto yy719;
11556
+ if (yych <= 0xDF)
11557
+ goto yy737;
11558
+ goto yy738;
11559
+ }
11560
+ } else {
11561
+ if (yych <= 0xEF) {
11562
+ if (yych == 0xED)
11563
+ goto yy740;
11564
+ goto yy739;
11565
+ } else {
11566
+ if (yych <= 0xF0)
11567
+ goto yy741;
11568
+ if (yych <= 0xF3)
11569
+ goto yy742;
11570
+ if (yych <= 0xF4)
11571
+ goto yy743;
11572
+ goto yy719;
11573
+ }
11574
+ }
11575
+ yy733:
11576
+ ++p;
11577
+ yy734 : { return (bufsize_t)(p - start); }
11578
+ yy735:
11579
+ ++p;
11580
+ yych = *p;
11581
+ if (yybm[0 + yych] & 64) {
11582
+ goto yy731;
11583
+ }
11584
+ if (yych <= 0xE0) {
11585
+ if (yych <= '\\') {
11586
+ if (yych <= 0x00)
11587
+ goto yy719;
11588
+ if (yych <= '\'')
11589
+ goto yy758;
11590
+ goto yy735;
11591
+ } else {
11592
+ if (yych <= 0xC1)
11593
+ goto yy719;
11594
+ if (yych >= 0xE0)
11595
+ goto yy738;
11596
+ }
11597
+ } else {
11598
+ if (yych <= 0xEF) {
11599
+ if (yych == 0xED)
11600
+ goto yy740;
11601
+ goto yy739;
11602
+ } else {
11603
+ if (yych <= 0xF0)
11604
+ goto yy741;
11605
+ if (yych <= 0xF3)
11606
+ goto yy742;
11607
+ if (yych <= 0xF4)
11608
+ goto yy743;
11609
+ goto yy719;
11610
+ }
11611
+ }
11612
+ yy737:
11613
+ ++p;
11614
+ yych = *p;
11615
+ if (yych <= 0x7F)
11616
+ goto yy719;
11617
+ if (yych <= 0xBF)
11618
+ goto yy731;
11619
+ goto yy719;
11620
+ yy738:
11621
+ ++p;
11622
+ yych = *p;
11623
+ if (yych <= 0x9F)
11624
+ goto yy719;
11625
+ if (yych <= 0xBF)
11626
+ goto yy737;
11627
+ goto yy719;
11628
+ yy739:
11629
+ ++p;
11630
+ yych = *p;
11631
+ if (yych <= 0x7F)
11632
+ goto yy719;
11633
+ if (yych <= 0xBF)
11634
+ goto yy737;
11635
+ goto yy719;
11636
+ yy740:
11637
+ ++p;
11638
+ yych = *p;
11639
+ if (yych <= 0x7F)
11640
+ goto yy719;
11641
+ if (yych <= 0x9F)
11642
+ goto yy737;
11643
+ goto yy719;
11644
+ yy741:
11645
+ ++p;
11646
+ yych = *p;
11647
+ if (yych <= 0x8F)
11648
+ goto yy719;
11649
+ if (yych <= 0xBF)
11650
+ goto yy739;
11651
+ goto yy719;
11652
+ yy742:
11653
+ ++p;
11654
+ yych = *p;
11655
+ if (yych <= 0x7F)
11656
+ goto yy719;
11657
+ if (yych <= 0xBF)
11658
+ goto yy739;
11659
+ goto yy719;
11660
+ yy743:
11661
+ ++p;
11662
+ yych = *p;
11663
+ if (yych <= 0x7F)
11664
+ goto yy719;
11665
+ if (yych <= 0x8F)
11666
+ goto yy739;
11667
+ goto yy719;
11668
+ yy744:
11669
+ ++p;
11670
+ yych = *p;
11671
+ yy745:
11672
+ if (yybm[0 + yych] & 128) {
11673
+ goto yy744;
11674
+ }
11675
+ if (yych <= 0xE0) {
11676
+ if (yych <= '\\') {
11677
+ if (yych <= 0x00)
11678
+ goto yy719;
11679
+ if (yych >= '*')
11680
+ goto yy748;
11681
+ } else {
11682
+ if (yych <= 0xC1)
11683
+ goto yy719;
11684
+ if (yych <= 0xDF)
11685
+ goto yy750;
11686
+ goto yy751;
11687
+ }
11688
+ } else {
11689
+ if (yych <= 0xEF) {
11690
+ if (yych == 0xED)
11691
+ goto yy753;
11692
+ goto yy752;
11693
+ } else {
11694
+ if (yych <= 0xF0)
11695
+ goto yy754;
11696
+ if (yych <= 0xF3)
11697
+ goto yy755;
11698
+ if (yych <= 0xF4)
11699
+ goto yy756;
11700
+ goto yy719;
11701
+ }
11702
+ }
11703
+ yy746:
11704
+ ++p;
11705
+ yy747 : { return (bufsize_t)(p - start); }
11706
+ yy748:
11707
+ ++p;
11708
+ yych = *p;
11709
+ if (yybm[0 + yych] & 128) {
11710
+ goto yy744;
11711
+ }
11712
+ if (yych <= 0xE0) {
11713
+ if (yych <= '\\') {
11714
+ if (yych <= 0x00)
11715
+ goto yy719;
11716
+ if (yych <= ')')
11717
+ goto yy759;
11718
+ goto yy748;
11719
+ } else {
11720
+ if (yych <= 0xC1)
11721
+ goto yy719;
11722
+ if (yych >= 0xE0)
11723
+ goto yy751;
11724
+ }
11725
+ } else {
11726
+ if (yych <= 0xEF) {
11727
+ if (yych == 0xED)
11728
+ goto yy753;
11729
+ goto yy752;
11730
+ } else {
11731
+ if (yych <= 0xF0)
11732
+ goto yy754;
11733
+ if (yych <= 0xF3)
11734
+ goto yy755;
11735
+ if (yych <= 0xF4)
11736
+ goto yy756;
11737
+ goto yy719;
11738
+ }
11739
+ }
11740
+ yy750:
11741
+ ++p;
11742
+ yych = *p;
11743
+ if (yych <= 0x7F)
11744
+ goto yy719;
11745
+ if (yych <= 0xBF)
11746
+ goto yy744;
11747
+ goto yy719;
11748
+ yy751:
11749
+ ++p;
11750
+ yych = *p;
11751
+ if (yych <= 0x9F)
11752
+ goto yy719;
11753
+ if (yych <= 0xBF)
11754
+ goto yy750;
11755
+ goto yy719;
11756
+ yy752:
11757
+ ++p;
11758
+ yych = *p;
11759
+ if (yych <= 0x7F)
11760
+ goto yy719;
11761
+ if (yych <= 0xBF)
11762
+ goto yy750;
11763
+ goto yy719;
11764
+ yy753:
11765
+ ++p;
11766
+ yych = *p;
11767
+ if (yych <= 0x7F)
11768
+ goto yy719;
11769
+ if (yych <= 0x9F)
11770
+ goto yy750;
11771
+ goto yy719;
11772
+ yy754:
11773
+ ++p;
11774
+ yych = *p;
11775
+ if (yych <= 0x8F)
11776
+ goto yy719;
11777
+ if (yych <= 0xBF)
11778
+ goto yy752;
11779
+ goto yy719;
11780
+ yy755:
11781
+ ++p;
11782
+ yych = *p;
11783
+ if (yych <= 0x7F)
11784
+ goto yy719;
11785
+ if (yych <= 0xBF)
11786
+ goto yy752;
11787
+ goto yy719;
11788
+ yy756:
11789
+ ++p;
11790
+ yych = *p;
11791
+ if (yych <= 0x7F)
11792
+ goto yy719;
11793
+ if (yych <= 0x8F)
11794
+ goto yy752;
11795
+ goto yy719;
11796
+ yy757:
11797
+ yyaccept = 1;
11798
+ marker = ++p;
11799
+ yych = *p;
11800
+ if (yybm[0 + yych] & 16) {
11801
+ goto yy717;
11802
+ }
11803
+ if (yych <= 0xE0) {
11804
+ if (yych <= '\\') {
11805
+ if (yych <= 0x00)
11806
+ goto yy721;
11807
+ if (yych <= '"')
11808
+ goto yy720;
11809
+ goto yy722;
11810
+ } else {
11811
+ if (yych <= 0xC1)
11812
+ goto yy721;
11813
+ if (yych <= 0xDF)
11814
+ goto yy724;
11815
+ goto yy725;
11816
+ }
11817
+ } else {
11818
+ if (yych <= 0xEF) {
11819
+ if (yych == 0xED)
11820
+ goto yy727;
11821
+ goto yy726;
11822
+ } else {
11823
+ if (yych <= 0xF0)
11824
+ goto yy728;
11825
+ if (yych <= 0xF3)
11826
+ goto yy729;
11827
+ if (yych <= 0xF4)
11828
+ goto yy730;
11829
+ goto yy721;
11830
+ }
11831
+ }
11832
+ yy758:
11833
+ yyaccept = 2;
11834
+ marker = ++p;
11835
+ yych = *p;
11836
+ if (yybm[0 + yych] & 64) {
11837
+ goto yy731;
11838
+ }
11839
+ if (yych <= 0xE0) {
11840
+ if (yych <= '\\') {
11841
+ if (yych <= 0x00)
11842
+ goto yy734;
11843
+ if (yych <= '\'')
11844
+ goto yy733;
11845
+ goto yy735;
11846
+ } else {
11847
+ if (yych <= 0xC1)
11848
+ goto yy734;
11849
+ if (yych <= 0xDF)
11850
+ goto yy737;
11851
+ goto yy738;
11852
+ }
11853
+ } else {
11854
+ if (yych <= 0xEF) {
11855
+ if (yych == 0xED)
11856
+ goto yy740;
11857
+ goto yy739;
11858
+ } else {
11859
+ if (yych <= 0xF0)
11860
+ goto yy741;
11861
+ if (yych <= 0xF3)
11862
+ goto yy742;
11863
+ if (yych <= 0xF4)
11864
+ goto yy743;
11865
+ goto yy734;
11866
+ }
11867
+ }
11868
+ yy759:
11869
+ yyaccept = 3;
11870
+ marker = ++p;
11871
+ yych = *p;
11872
+ if (yybm[0 + yych] & 128) {
11873
+ goto yy744;
11874
+ }
11875
+ if (yych <= 0xE0) {
11876
+ if (yych <= '\\') {
11877
+ if (yych <= 0x00)
11878
+ goto yy747;
11879
+ if (yych <= ')')
11880
+ goto yy746;
11881
+ goto yy748;
11882
+ } else {
11883
+ if (yych <= 0xC1)
11884
+ goto yy747;
11885
+ if (yych <= 0xDF)
11886
+ goto yy750;
11887
+ goto yy751;
11888
+ }
11889
+ } else {
11890
+ if (yych <= 0xEF) {
11891
+ if (yych == 0xED)
11892
+ goto yy753;
11893
+ goto yy752;
11894
+ } else {
11895
+ if (yych <= 0xF0)
11896
+ goto yy754;
11897
+ if (yych <= 0xF3)
11898
+ goto yy755;
11899
+ if (yych <= 0xF4)
11900
+ goto yy756;
11901
+ goto yy747;
11902
+ }
11903
+ }
11904
+ }
11905
+}
11906
+
11907
+// Match space characters, including newlines.
11908
+bufsize_t _scan_spacechars(const unsigned char *p) {
11909
+ const unsigned char *start = p;
11910
+
11911
+ {
11912
+ unsigned char yych;
11913
+ static const unsigned char yybm[] = {
11914
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0,
11915
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0,
11916
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11917
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11918
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11919
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11920
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11921
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11922
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11923
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11924
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11925
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11926
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11927
+ };
11928
+ yych = *p;
11929
+ if (yybm[0 + yych] & 128) {
11930
+ goto yy764;
11931
+ }
11932
+ ++p;
11933
+ { return 0; }
11934
+ yy764:
11935
+ ++p;
11936
+ yych = *p;
11937
+ if (yybm[0 + yych] & 128) {
11938
+ goto yy764;
11939
+ }
11940
+ { return (bufsize_t)(p - start); }
11941
+ }
11942
+}
11943
+
11944
+// Match ATX heading start.
11945
+bufsize_t _scan_atx_heading_start(const unsigned char *p) {
11946
+ const unsigned char *marker = NULL;
11947
+ const unsigned char *start = p;
11948
+
11949
+ {
11950
+ unsigned char yych;
11951
+ static const unsigned char yybm[] = {
11952
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11953
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11954
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11955
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11956
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11957
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11958
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11959
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11960
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11961
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11962
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11963
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11964
+ };
11965
+ yych = *p;
11966
+ if (yych == '#')
11967
+ goto yy771;
11968
+ ++p;
11969
+ yy770 : { return 0; }
11970
+ yy771:
11971
+ yych = *(marker = ++p);
11972
+ if (yybm[0 + yych] & 128) {
11973
+ goto yy772;
11974
+ }
11975
+ if (yych <= '\f') {
11976
+ if (yych <= 0x08)
11977
+ goto yy770;
11978
+ if (yych <= '\n')
11979
+ goto yy775;
11980
+ goto yy770;
11981
+ } else {
11982
+ if (yych <= '\r')
11983
+ goto yy775;
11984
+ if (yych == '#')
11985
+ goto yy776;
11986
+ goto yy770;
11987
+ }
11988
+ yy772:
11989
+ ++p;
11990
+ yych = *p;
11991
+ if (yybm[0 + yych] & 128) {
11992
+ goto yy772;
11993
+ }
11994
+ yy774 : { return (bufsize_t)(p - start); }
11995
+ yy775:
11996
+ yych = *++p;
11997
+ goto yy774;
11998
+ yy776:
11999
+ yych = *++p;
12000
+ if (yybm[0 + yych] & 128) {
12001
+ goto yy772;
12002
+ }
12003
+ if (yych <= '\f') {
12004
+ if (yych <= 0x08)
12005
+ goto yy777;
12006
+ if (yych <= '\n')
12007
+ goto yy775;
12008
+ } else {
12009
+ if (yych <= '\r')
12010
+ goto yy775;
12011
+ if (yych == '#')
12012
+ goto yy778;
12013
+ }
12014
+ yy777:
12015
+ p = marker;
12016
+ goto yy770;
12017
+ yy778:
12018
+ yych = *++p;
12019
+ if (yybm[0 + yych] & 128) {
12020
+ goto yy772;
12021
+ }
12022
+ if (yych <= '\f') {
12023
+ if (yych <= 0x08)
12024
+ goto yy777;
12025
+ if (yych <= '\n')
12026
+ goto yy775;
12027
+ goto yy777;
12028
+ } else {
12029
+ if (yych <= '\r')
12030
+ goto yy775;
12031
+ if (yych != '#')
12032
+ goto yy777;
12033
+ }
12034
+ yych = *++p;
12035
+ if (yybm[0 + yych] & 128) {
12036
+ goto yy772;
12037
+ }
12038
+ if (yych <= '\f') {
12039
+ if (yych <= 0x08)
12040
+ goto yy777;
12041
+ if (yych <= '\n')
12042
+ goto yy775;
12043
+ goto yy777;
12044
+ } else {
12045
+ if (yych <= '\r')
12046
+ goto yy775;
12047
+ if (yych != '#')
12048
+ goto yy777;
12049
+ }
12050
+ yych = *++p;
12051
+ if (yybm[0 + yych] & 128) {
12052
+ goto yy772;
12053
+ }
12054
+ if (yych <= '\f') {
12055
+ if (yych <= 0x08)
12056
+ goto yy777;
12057
+ if (yych <= '\n')
12058
+ goto yy775;
12059
+ goto yy777;
12060
+ } else {
12061
+ if (yych <= '\r')
12062
+ goto yy775;
12063
+ if (yych != '#')
12064
+ goto yy777;
12065
+ }
12066
+ ++p;
12067
+ if (yybm[0 + (yych = *p)] & 128) {
12068
+ goto yy772;
12069
+ }
12070
+ if (yych <= 0x08)
12071
+ goto yy777;
12072
+ if (yych <= '\n')
12073
+ goto yy775;
12074
+ if (yych == '\r')
12075
+ goto yy775;
12076
+ goto yy777;
12077
+ }
12078
+}
12079
+
12080
+// Match setext heading line. Return 1 for level-1 heading,
12081
+// 2 for level-2, 0 for no match.
12082
+bufsize_t _scan_setext_heading_line(const unsigned char *p) {
12083
+ const unsigned char *marker = NULL;
12084
+
12085
+ {
12086
+ unsigned char yych;
12087
+ static const unsigned char yybm[] = {
12088
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12089
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12090
+ 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0,
12091
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12092
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12093
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12094
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12095
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12096
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12097
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12098
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12099
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12100
+ };
12101
+ yych = *p;
12102
+ if (yych == '-')
12103
+ goto yy786;
12104
+ if (yych == '=')
12105
+ goto yy787;
12106
+ ++p;
12107
+ yy785 : { return 0; }
12108
+ yy786:
12109
+ yych = *(marker = ++p);
12110
+ if (yybm[0 + yych] & 64) {
12111
+ goto yy793;
12112
+ }
12113
+ if (yych <= '\f') {
12114
+ if (yych <= 0x08)
12115
+ goto yy785;
12116
+ if (yych <= '\n')
12117
+ goto yy789;
12118
+ goto yy785;
12119
+ } else {
12120
+ if (yych <= '\r')
12121
+ goto yy789;
12122
+ if (yych == ' ')
12123
+ goto yy789;
12124
+ goto yy785;
12125
+ }
12126
+ yy787:
12127
+ yych = *(marker = ++p);
12128
+ if (yybm[0 + yych] & 128) {
12129
+ goto yy799;
12130
+ }
12131
+ if (yych <= '\f') {
12132
+ if (yych <= 0x08)
12133
+ goto yy785;
12134
+ if (yych <= '\n')
12135
+ goto yy796;
12136
+ goto yy785;
12137
+ } else {
12138
+ if (yych <= '\r')
12139
+ goto yy796;
12140
+ if (yych == ' ')
12141
+ goto yy796;
12142
+ goto yy785;
12143
+ }
12144
+ yy788:
12145
+ ++p;
12146
+ yych = *p;
12147
+ yy789:
12148
+ if (yybm[0 + yych] & 32) {
12149
+ goto yy788;
12150
+ }
12151
+ if (yych <= 0x08)
12152
+ goto yy790;
12153
+ if (yych <= '\n')
12154
+ goto yy791;
12155
+ if (yych == '\r')
12156
+ goto yy791;
12157
+ yy790:
12158
+ p = marker;
12159
+ goto yy785;
12160
+ yy791:
12161
+ ++p;
12162
+ { return 2; }
12163
+ yy793:
12164
+ ++p;
12165
+ yych = *p;
12166
+ if (yybm[0 + yych] & 32) {
12167
+ goto yy788;
12168
+ }
12169
+ if (yych <= '\f') {
12170
+ if (yych <= 0x08)
12171
+ goto yy790;
12172
+ if (yych <= '\n')
12173
+ goto yy791;
12174
+ goto yy790;
12175
+ } else {
12176
+ if (yych <= '\r')
12177
+ goto yy791;
12178
+ if (yych == '-')
12179
+ goto yy793;
12180
+ goto yy790;
12181
+ }
12182
+ yy795:
12183
+ ++p;
12184
+ yych = *p;
12185
+ yy796:
12186
+ if (yych <= '\f') {
12187
+ if (yych <= 0x08)
12188
+ goto yy790;
12189
+ if (yych <= '\t')
12190
+ goto yy795;
12191
+ if (yych >= '\v')
12192
+ goto yy790;
12193
+ } else {
12194
+ if (yych <= '\r')
12195
+ goto yy797;
12196
+ if (yych == ' ')
12197
+ goto yy795;
12198
+ goto yy790;
12199
+ }
12200
+ yy797:
12201
+ ++p;
12202
+ { return 1; }
12203
+ yy799:
12204
+ ++p;
12205
+ yych = *p;
12206
+ if (yybm[0 + yych] & 128) {
12207
+ goto yy799;
12208
+ }
12209
+ if (yych <= '\f') {
12210
+ if (yych <= 0x08)
12211
+ goto yy790;
12212
+ if (yych <= '\t')
12213
+ goto yy795;
12214
+ if (yych <= '\n')
12215
+ goto yy797;
12216
+ goto yy790;
12217
+ } else {
12218
+ if (yych <= '\r')
12219
+ goto yy797;
12220
+ if (yych == ' ')
12221
+ goto yy795;
12222
+ goto yy790;
12223
+ }
12224
+ }
12225
+}
12226
+
12227
+// Scan a thematic break line: "...three or more hyphens, asterisks,
12228
+// or underscores on a line by themselves. If you wish, you may use
12229
+// spaces between the hyphens or asterisks."
12230
+bufsize_t _scan_thematic_break(const unsigned char *p) {
12231
+ const unsigned char *marker = NULL;
12232
+ const unsigned char *start = p;
12233
+
12234
+ {
12235
+ unsigned char yych;
12236
+ static const unsigned char yybm[] = {
12237
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12238
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0,
12239
+ 0, 0, 32, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12240
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12241
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0,
12242
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12243
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12244
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12245
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12246
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12247
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12248
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12249
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12250
+ };
12251
+ yych = *p;
12252
+ if (yych <= ',') {
12253
+ if (yych == '*')
12254
+ goto yy805;
12255
+ } else {
12256
+ if (yych <= '-')
12257
+ goto yy806;
12258
+ if (yych == '_')
12259
+ goto yy807;
12260
+ }
12261
+ ++p;
12262
+ yy804 : { return 0; }
12263
+ yy805:
12264
+ yych = *(marker = ++p);
12265
+ if (yybm[0 + yych] & 16) {
12266
+ goto yy808;
12267
+ }
12268
+ if (yych == '*')
12269
+ goto yy811;
12270
+ goto yy804;
12271
+ yy806:
12272
+ yych = *(marker = ++p);
12273
+ if (yych <= 0x1F) {
12274
+ if (yych == '\t')
12275
+ goto yy813;
12276
+ goto yy804;
12277
+ } else {
12278
+ if (yych <= ' ')
12279
+ goto yy813;
12280
+ if (yych == '-')
12281
+ goto yy815;
12282
+ goto yy804;
12283
+ }
12284
+ yy807:
12285
+ yych = *(marker = ++p);
12286
+ if (yych <= 0x1F) {
12287
+ if (yych == '\t')
12288
+ goto yy817;
12289
+ goto yy804;
12290
+ } else {
12291
+ if (yych <= ' ')
12292
+ goto yy817;
12293
+ if (yych == '_')
12294
+ goto yy819;
12295
+ goto yy804;
12296
+ }
12297
+ yy808:
12298
+ ++p;
12299
+ yych = *p;
12300
+ if (yybm[0 + yych] & 16) {
12301
+ goto yy808;
12302
+ }
12303
+ if (yych == '*')
12304
+ goto yy811;
12305
+ yy810:
12306
+ p = marker;
12307
+ goto yy804;
12308
+ yy811:
12309
+ ++p;
12310
+ yych = *p;
12311
+ if (yych <= 0x1F) {
12312
+ if (yych == '\t')
12313
+ goto yy811;
12314
+ goto yy810;
12315
+ } else {
12316
+ if (yych <= ' ')
12317
+ goto yy811;
12318
+ if (yych == '*')
12319
+ goto yy821;
12320
+ goto yy810;
12321
+ }
12322
+ yy813:
12323
+ ++p;
12324
+ yych = *p;
12325
+ if (yych <= 0x1F) {
12326
+ if (yych == '\t')
12327
+ goto yy813;
12328
+ goto yy810;
12329
+ } else {
12330
+ if (yych <= ' ')
12331
+ goto yy813;
12332
+ if (yych != '-')
12333
+ goto yy810;
12334
+ }
12335
+ yy815:
12336
+ ++p;
12337
+ yych = *p;
12338
+ if (yych <= 0x1F) {
12339
+ if (yych == '\t')
12340
+ goto yy815;
12341
+ goto yy810;
12342
+ } else {
12343
+ if (yych <= ' ')
12344
+ goto yy815;
12345
+ if (yych == '-')
12346
+ goto yy823;
12347
+ goto yy810;
12348
+ }
12349
+ yy817:
12350
+ ++p;
12351
+ yych = *p;
12352
+ if (yych <= 0x1F) {
12353
+ if (yych == '\t')
12354
+ goto yy817;
12355
+ goto yy810;
12356
+ } else {
12357
+ if (yych <= ' ')
12358
+ goto yy817;
12359
+ if (yych != '_')
12360
+ goto yy810;
12361
+ }
12362
+ yy819:
12363
+ ++p;
12364
+ yych = *p;
12365
+ if (yych <= 0x1F) {
12366
+ if (yych == '\t')
12367
+ goto yy819;
12368
+ goto yy810;
12369
+ } else {
12370
+ if (yych <= ' ')
12371
+ goto yy819;
12372
+ if (yych == '_')
12373
+ goto yy825;
12374
+ goto yy810;
12375
+ }
12376
+ yy821:
12377
+ ++p;
12378
+ yych = *p;
12379
+ if (yybm[0 + yych] & 32) {
12380
+ goto yy821;
12381
+ }
12382
+ if (yych <= 0x08)
12383
+ goto yy810;
12384
+ if (yych <= '\n')
12385
+ goto yy827;
12386
+ if (yych == '\r')
12387
+ goto yy827;
12388
+ goto yy810;
12389
+ yy823:
12390
+ ++p;
12391
+ yych = *p;
12392
+ if (yybm[0 + yych] & 64) {
12393
+ goto yy823;
12394
+ }
12395
+ if (yych <= 0x08)
12396
+ goto yy810;
12397
+ if (yych <= '\n')
12398
+ goto yy829;
12399
+ if (yych == '\r')
12400
+ goto yy829;
12401
+ goto yy810;
12402
+ yy825:
12403
+ ++p;
12404
+ yych = *p;
12405
+ if (yybm[0 + yych] & 128) {
12406
+ goto yy825;
12407
+ }
12408
+ if (yych <= 0x08)
12409
+ goto yy810;
12410
+ if (yych <= '\n')
12411
+ goto yy831;
12412
+ if (yych == '\r')
12413
+ goto yy831;
12414
+ goto yy810;
12415
+ yy827:
12416
+ ++p;
12417
+ { return (bufsize_t)(p - start); }
12418
+ yy829:
12419
+ ++p;
12420
+ { return (bufsize_t)(p - start); }
12421
+ yy831:
12422
+ ++p;
12423
+ { return (bufsize_t)(p - start); }
12424
+ }
12425
+}
12426
+
12427
+// Scan an opening code fence.
12428
+bufsize_t _scan_open_code_fence(const unsigned char *p) {
12429
+ const unsigned char *marker = NULL;
12430
+ const unsigned char *start = p;
12431
+
12432
+ {
12433
+ unsigned char yych;
12434
+ static const unsigned char yybm[] = {
12435
+ 0, 192, 192, 192, 192, 192, 192, 192, 192, 192, 0, 192, 192, 0,
12436
+ 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
12437
+ 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
12438
+ 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
12439
+ 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
12440
+ 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
12441
+ 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 144, 192,
12442
+ 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
12443
+ 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
12444
+ 96, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12445
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12446
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12447
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12448
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12449
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12450
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12451
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12452
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12453
+ 0, 0, 0, 0,
12454
+ };
12455
+ yych = *p;
12456
+ if (yych == '`')
12457
+ goto yy837;
12458
+ if (yych == '~')
12459
+ goto yy838;
12460
+ ++p;
12461
+ yy836 : { return 0; }
12462
+ yy837:
12463
+ yych = *(marker = ++p);
12464
+ if (yych == '`')
12465
+ goto yy839;
12466
+ goto yy836;
12467
+ yy838:
12468
+ yych = *(marker = ++p);
12469
+ if (yych == '~')
12470
+ goto yy841;
12471
+ goto yy836;
12472
+ yy839:
12473
+ yych = *++p;
12474
+ if (yybm[0 + yych] & 16) {
12475
+ goto yy842;
12476
+ }
12477
+ yy840:
12478
+ p = marker;
12479
+ goto yy836;
12480
+ yy841:
12481
+ yych = *++p;
12482
+ if (yybm[0 + yych] & 32) {
12483
+ goto yy844;
12484
+ }
12485
+ goto yy840;
12486
+ yy842:
12487
+ ++p;
12488
+ yych = *p;
12489
+ marker = p;
12490
+ if (yybm[0 + yych] & 64) {
12491
+ goto yy846;
12492
+ }
12493
+ if (yych <= 0xE0) {
12494
+ if (yych <= '`') {
12495
+ if (yych <= 0x00)
12496
+ goto yy840;
12497
+ if (yych <= '\r')
12498
+ goto yy848;
12499
+ goto yy842;
12500
+ } else {
12501
+ if (yych <= 0xC1)
12502
+ goto yy840;
12503
+ if (yych <= 0xDF)
12504
+ goto yy850;
12505
+ goto yy851;
12506
+ }
12507
+ } else {
12508
+ if (yych <= 0xEF) {
12509
+ if (yych == 0xED)
12510
+ goto yy853;
12511
+ goto yy852;
12512
+ } else {
12513
+ if (yych <= 0xF0)
12514
+ goto yy854;
12515
+ if (yych <= 0xF3)
12516
+ goto yy855;
12517
+ if (yych <= 0xF4)
12518
+ goto yy856;
12519
+ goto yy840;
12520
+ }
12521
+ }
12522
+ yy844:
12523
+ ++p;
12524
+ yych = *p;
12525
+ marker = p;
12526
+ if (yybm[0 + yych] & 128) {
12527
+ goto yy857;
12528
+ }
12529
+ if (yych <= 0xE0) {
12530
+ if (yych <= '~') {
12531
+ if (yych <= 0x00)
12532
+ goto yy840;
12533
+ if (yych <= '\r')
12534
+ goto yy859;
12535
+ goto yy844;
12536
+ } else {
12537
+ if (yych <= 0xC1)
12538
+ goto yy840;
12539
+ if (yych <= 0xDF)
12540
+ goto yy861;
12541
+ goto yy862;
12542
+ }
12543
+ } else {
12544
+ if (yych <= 0xEF) {
12545
+ if (yych == 0xED)
12546
+ goto yy864;
12547
+ goto yy863;
12548
+ } else {
12549
+ if (yych <= 0xF0)
12550
+ goto yy865;
12551
+ if (yych <= 0xF3)
12552
+ goto yy866;
12553
+ if (yych <= 0xF4)
12554
+ goto yy867;
12555
+ goto yy840;
12556
+ }
12557
+ }
12558
+ yy846:
12559
+ ++p;
12560
+ yych = *p;
12561
+ if (yybm[0 + yych] & 64) {
12562
+ goto yy846;
12563
+ }
12564
+ if (yych <= 0xEC) {
12565
+ if (yych <= 0xC1) {
12566
+ if (yych <= 0x00)
12567
+ goto yy840;
12568
+ if (yych >= 0x0E)
12569
+ goto yy840;
12570
+ } else {
12571
+ if (yych <= 0xDF)
12572
+ goto yy850;
12573
+ if (yych <= 0xE0)
12574
+ goto yy851;
12575
+ goto yy852;
12576
+ }
12577
+ } else {
12578
+ if (yych <= 0xF0) {
12579
+ if (yych <= 0xED)
12580
+ goto yy853;
12581
+ if (yych <= 0xEF)
12582
+ goto yy852;
12583
+ goto yy854;
12584
+ } else {
12585
+ if (yych <= 0xF3)
12586
+ goto yy855;
12587
+ if (yych <= 0xF4)
12588
+ goto yy856;
12589
+ goto yy840;
12590
+ }
12591
+ }
12592
+ yy848:
12593
+ ++p;
12594
+ p = marker;
12595
+ { return (bufsize_t)(p - start); }
12596
+ yy850:
12597
+ ++p;
12598
+ yych = *p;
12599
+ if (yych <= 0x7F)
12600
+ goto yy840;
12601
+ if (yych <= 0xBF)
12602
+ goto yy846;
12603
+ goto yy840;
12604
+ yy851:
12605
+ ++p;
12606
+ yych = *p;
12607
+ if (yych <= 0x9F)
12608
+ goto yy840;
12609
+ if (yych <= 0xBF)
12610
+ goto yy850;
12611
+ goto yy840;
12612
+ yy852:
12613
+ ++p;
12614
+ yych = *p;
12615
+ if (yych <= 0x7F)
12616
+ goto yy840;
12617
+ if (yych <= 0xBF)
12618
+ goto yy850;
12619
+ goto yy840;
12620
+ yy853:
12621
+ ++p;
12622
+ yych = *p;
12623
+ if (yych <= 0x7F)
12624
+ goto yy840;
12625
+ if (yych <= 0x9F)
12626
+ goto yy850;
12627
+ goto yy840;
12628
+ yy854:
12629
+ ++p;
12630
+ yych = *p;
12631
+ if (yych <= 0x8F)
12632
+ goto yy840;
12633
+ if (yych <= 0xBF)
12634
+ goto yy852;
12635
+ goto yy840;
12636
+ yy855:
12637
+ ++p;
12638
+ yych = *p;
12639
+ if (yych <= 0x7F)
12640
+ goto yy840;
12641
+ if (yych <= 0xBF)
12642
+ goto yy852;
12643
+ goto yy840;
12644
+ yy856:
12645
+ ++p;
12646
+ yych = *p;
12647
+ if (yych <= 0x7F)
12648
+ goto yy840;
12649
+ if (yych <= 0x8F)
12650
+ goto yy852;
12651
+ goto yy840;
12652
+ yy857:
12653
+ ++p;
12654
+ yych = *p;
12655
+ if (yybm[0 + yych] & 128) {
12656
+ goto yy857;
12657
+ }
12658
+ if (yych <= 0xEC) {
12659
+ if (yych <= 0xC1) {
12660
+ if (yych <= 0x00)
12661
+ goto yy840;
12662
+ if (yych >= 0x0E)
12663
+ goto yy840;
12664
+ } else {
12665
+ if (yych <= 0xDF)
12666
+ goto yy861;
12667
+ if (yych <= 0xE0)
12668
+ goto yy862;
12669
+ goto yy863;
12670
+ }
12671
+ } else {
12672
+ if (yych <= 0xF0) {
12673
+ if (yych <= 0xED)
12674
+ goto yy864;
12675
+ if (yych <= 0xEF)
12676
+ goto yy863;
12677
+ goto yy865;
12678
+ } else {
12679
+ if (yych <= 0xF3)
12680
+ goto yy866;
12681
+ if (yych <= 0xF4)
12682
+ goto yy867;
12683
+ goto yy840;
12684
+ }
12685
+ }
12686
+ yy859:
12687
+ ++p;
12688
+ p = marker;
12689
+ { return (bufsize_t)(p - start); }
12690
+ yy861:
12691
+ ++p;
12692
+ yych = *p;
12693
+ if (yych <= 0x7F)
12694
+ goto yy840;
12695
+ if (yych <= 0xBF)
12696
+ goto yy857;
12697
+ goto yy840;
12698
+ yy862:
12699
+ ++p;
12700
+ yych = *p;
12701
+ if (yych <= 0x9F)
12702
+ goto yy840;
12703
+ if (yych <= 0xBF)
12704
+ goto yy861;
12705
+ goto yy840;
12706
+ yy863:
12707
+ ++p;
12708
+ yych = *p;
12709
+ if (yych <= 0x7F)
12710
+ goto yy840;
12711
+ if (yych <= 0xBF)
12712
+ goto yy861;
12713
+ goto yy840;
12714
+ yy864:
12715
+ ++p;
12716
+ yych = *p;
12717
+ if (yych <= 0x7F)
12718
+ goto yy840;
12719
+ if (yych <= 0x9F)
12720
+ goto yy861;
12721
+ goto yy840;
12722
+ yy865:
12723
+ ++p;
12724
+ yych = *p;
12725
+ if (yych <= 0x8F)
12726
+ goto yy840;
12727
+ if (yych <= 0xBF)
12728
+ goto yy863;
12729
+ goto yy840;
12730
+ yy866:
12731
+ ++p;
12732
+ yych = *p;
12733
+ if (yych <= 0x7F)
12734
+ goto yy840;
12735
+ if (yych <= 0xBF)
12736
+ goto yy863;
12737
+ goto yy840;
12738
+ yy867:
12739
+ ++p;
12740
+ yych = *p;
12741
+ if (yych <= 0x7F)
12742
+ goto yy840;
12743
+ if (yych <= 0x8F)
12744
+ goto yy863;
12745
+ goto yy840;
12746
+ }
12747
+}
12748
+
12749
+// Scan a closing code fence with length at least len.
12750
+bufsize_t _scan_close_code_fence(const unsigned char *p) {
12751
+ const unsigned char *marker = NULL;
12752
+ const unsigned char *start = p;
12753
+
12754
+ {
12755
+ unsigned char yych;
12756
+ static const unsigned char yybm[] = {
12757
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12758
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12759
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12760
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12761
+ 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12762
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,
12763
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12764
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12765
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12766
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12767
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12768
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12769
+ };
12770
+ yych = *p;
12771
+ if (yych == '`')
12772
+ goto yy872;
12773
+ if (yych == '~')
12774
+ goto yy873;
12775
+ ++p;
12776
+ yy871 : { return 0; }
12777
+ yy872:
12778
+ yych = *(marker = ++p);
12779
+ if (yych == '`')
12780
+ goto yy874;
12781
+ goto yy871;
12782
+ yy873:
12783
+ yych = *(marker = ++p);
12784
+ if (yych == '~')
12785
+ goto yy876;
12786
+ goto yy871;
12787
+ yy874:
12788
+ yych = *++p;
12789
+ if (yybm[0 + yych] & 32) {
12790
+ goto yy877;
12791
+ }
12792
+ yy875:
12793
+ p = marker;
12794
+ goto yy871;
12795
+ yy876:
12796
+ yych = *++p;
12797
+ if (yybm[0 + yych] & 64) {
12798
+ goto yy879;
12799
+ }
12800
+ goto yy875;
12801
+ yy877:
12802
+ ++p;
12803
+ yych = *p;
12804
+ marker = p;
12805
+ if (yybm[0 + yych] & 128) {
12806
+ goto yy881;
12807
+ }
12808
+ if (yych <= '\f') {
12809
+ if (yych <= 0x08)
12810
+ goto yy875;
12811
+ if (yych <= '\n')
12812
+ goto yy883;
12813
+ goto yy875;
12814
+ } else {
12815
+ if (yych <= '\r')
12816
+ goto yy883;
12817
+ if (yych == '`')
12818
+ goto yy877;
12819
+ goto yy875;
12820
+ }
12821
+ yy879:
12822
+ ++p;
12823
+ yych = *p;
12824
+ marker = p;
12825
+ if (yybm[0 + yych] & 64) {
12826
+ goto yy879;
12827
+ }
12828
+ if (yych <= '\f') {
12829
+ if (yych <= 0x08)
12830
+ goto yy875;
12831
+ if (yych <= '\t')
12832
+ goto yy885;
12833
+ if (yych <= '\n')
12834
+ goto yy887;
12835
+ goto yy875;
12836
+ } else {
12837
+ if (yych <= '\r')
12838
+ goto yy887;
12839
+ if (yych == ' ')
12840
+ goto yy885;
12841
+ goto yy875;
12842
+ }
12843
+ yy881:
12844
+ ++p;
12845
+ yych = *p;
12846
+ if (yybm[0 + yych] & 128) {
12847
+ goto yy881;
12848
+ }
12849
+ if (yych <= 0x08)
12850
+ goto yy875;
12851
+ if (yych <= '\n')
12852
+ goto yy883;
12853
+ if (yych != '\r')
12854
+ goto yy875;
12855
+ yy883:
12856
+ ++p;
12857
+ p = marker;
12858
+ { return (bufsize_t)(p - start); }
12859
+ yy885:
12860
+ ++p;
12861
+ yych = *p;
12862
+ if (yych <= '\f') {
12863
+ if (yych <= 0x08)
12864
+ goto yy875;
12865
+ if (yych <= '\t')
12866
+ goto yy885;
12867
+ if (yych >= '\v')
12868
+ goto yy875;
12869
+ } else {
12870
+ if (yych <= '\r')
12871
+ goto yy887;
12872
+ if (yych == ' ')
12873
+ goto yy885;
12874
+ goto yy875;
12875
+ }
12876
+ yy887:
12877
+ ++p;
12878
+ p = marker;
12879
+ { return (bufsize_t)(p - start); }
12880
+ }
12881
+}
12882
+
12883
+// Scans an entity.
12884
+// Returns number of chars matched.
12885
+bufsize_t _scan_entity(const unsigned char *p) {
12886
+ const unsigned char *marker = NULL;
12887
+ const unsigned char *start = p;
12888
+
12889
+ {
12890
+ unsigned char yych;
12891
+ yych = *p;
12892
+ if (yych == '&')
12893
+ goto yy893;
12894
+ ++p;
12895
+ yy892 : { return 0; }
12896
+ yy893:
12897
+ yych = *(marker = ++p);
12898
+ if (yych <= '@') {
12899
+ if (yych != '#')
12900
+ goto yy892;
12901
+ } else {
12902
+ if (yych <= 'Z')
12903
+ goto yy896;
12904
+ if (yych <= '`')
12905
+ goto yy892;
12906
+ if (yych <= 'z')
12907
+ goto yy896;
12908
+ goto yy892;
12909
+ }
12910
+ yych = *++p;
12911
+ if (yych <= 'W') {
12912
+ if (yych <= '/')
12913
+ goto yy895;
12914
+ if (yych <= '9')
12915
+ goto yy897;
12916
+ } else {
12917
+ if (yych <= 'X')
12918
+ goto yy898;
12919
+ if (yych == 'x')
12920
+ goto yy898;
12921
+ }
12922
+ yy895:
12923
+ p = marker;
12924
+ goto yy892;
12925
+ yy896:
12926
+ yych = *++p;
12927
+ if (yych <= '@') {
12928
+ if (yych <= '/')
12929
+ goto yy895;
12930
+ if (yych <= '9')
12931
+ goto yy899;
12932
+ goto yy895;
12933
+ } else {
12934
+ if (yych <= 'Z')
12935
+ goto yy899;
12936
+ if (yych <= '`')
12937
+ goto yy895;
12938
+ if (yych <= 'z')
12939
+ goto yy899;
12940
+ goto yy895;
12941
+ }
12942
+ yy897:
12943
+ yych = *++p;
12944
+ if (yych <= '/')
12945
+ goto yy895;
12946
+ if (yych <= '9')
12947
+ goto yy900;
12948
+ if (yych == ';')
12949
+ goto yy901;
12950
+ goto yy895;
12951
+ yy898:
12952
+ yych = *++p;
12953
+ if (yych <= '@') {
12954
+ if (yych <= '/')
12955
+ goto yy895;
12956
+ if (yych <= '9')
12957
+ goto yy903;
12958
+ goto yy895;
12959
+ } else {
12960
+ if (yych <= 'F')
12961
+ goto yy903;
12962
+ if (yych <= '`')
12963
+ goto yy895;
12964
+ if (yych <= 'f')
12965
+ goto yy903;
12966
+ goto yy895;
12967
+ }
12968
+ yy899:
12969
+ yych = *++p;
12970
+ if (yych <= ';') {
12971
+ if (yych <= '/')
12972
+ goto yy895;
12973
+ if (yych <= '9')
12974
+ goto yy904;
12975
+ if (yych <= ':')
12976
+ goto yy895;
12977
+ goto yy901;
12978
+ } else {
12979
+ if (yych <= 'Z') {
12980
+ if (yych <= '@')
12981
+ goto yy895;
12982
+ goto yy904;
12983
+ } else {
12984
+ if (yych <= '`')
12985
+ goto yy895;
12986
+ if (yych <= 'z')
12987
+ goto yy904;
12988
+ goto yy895;
12989
+ }
12990
+ }
12991
+ yy900:
12992
+ yych = *++p;
12993
+ if (yych <= '/')
12994
+ goto yy895;
12995
+ if (yych <= '9')
12996
+ goto yy905;
12997
+ if (yych != ';')
12998
+ goto yy895;
12999
+ yy901:
13000
+ ++p;
13001
+ { return (bufsize_t)(p - start); }
13002
+ yy903:
13003
+ yych = *++p;
13004
+ if (yych <= ';') {
13005
+ if (yych <= '/')
13006
+ goto yy895;
13007
+ if (yych <= '9')
13008
+ goto yy906;
13009
+ if (yych <= ':')
13010
+ goto yy895;
13011
+ goto yy901;
13012
+ } else {
13013
+ if (yych <= 'F') {
13014
+ if (yych <= '@')
13015
+ goto yy895;
13016
+ goto yy906;
13017
+ } else {
13018
+ if (yych <= '`')
13019
+ goto yy895;
13020
+ if (yych <= 'f')
13021
+ goto yy906;
13022
+ goto yy895;
13023
+ }
13024
+ }
13025
+ yy904:
13026
+ yych = *++p;
13027
+ if (yych <= ';') {
13028
+ if (yych <= '/')
13029
+ goto yy895;
13030
+ if (yych <= '9')
13031
+ goto yy907;
13032
+ if (yych <= ':')
13033
+ goto yy895;
13034
+ goto yy901;
13035
+ } else {
13036
+ if (yych <= 'Z') {
13037
+ if (yych <= '@')
13038
+ goto yy895;
13039
+ goto yy907;
13040
+ } else {
13041
+ if (yych <= '`')
13042
+ goto yy895;
13043
+ if (yych <= 'z')
13044
+ goto yy907;
13045
+ goto yy895;
13046
+ }
13047
+ }
13048
+ yy905:
13049
+ yych = *++p;
13050
+ if (yych <= '/')
13051
+ goto yy895;
13052
+ if (yych <= '9')
13053
+ goto yy908;
13054
+ if (yych == ';')
13055
+ goto yy901;
13056
+ goto yy895;
13057
+ yy906:
13058
+ yych = *++p;
13059
+ if (yych <= ';') {
13060
+ if (yych <= '/')
13061
+ goto yy895;
13062
+ if (yych <= '9')
13063
+ goto yy909;
13064
+ if (yych <= ':')
13065
+ goto yy895;
13066
+ goto yy901;
13067
+ } else {
13068
+ if (yych <= 'F') {
13069
+ if (yych <= '@')
13070
+ goto yy895;
13071
+ goto yy909;
13072
+ } else {
13073
+ if (yych <= '`')
13074
+ goto yy895;
13075
+ if (yych <= 'f')
13076
+ goto yy909;
13077
+ goto yy895;
13078
+ }
13079
+ }
13080
+ yy907:
13081
+ yych = *++p;
13082
+ if (yych <= ';') {
13083
+ if (yych <= '/')
13084
+ goto yy895;
13085
+ if (yych <= '9')
13086
+ goto yy910;
13087
+ if (yych <= ':')
13088
+ goto yy895;
13089
+ goto yy901;
13090
+ } else {
13091
+ if (yych <= 'Z') {
13092
+ if (yych <= '@')
13093
+ goto yy895;
13094
+ goto yy910;
13095
+ } else {
13096
+ if (yych <= '`')
13097
+ goto yy895;
13098
+ if (yych <= 'z')
13099
+ goto yy910;
13100
+ goto yy895;
13101
+ }
13102
+ }
13103
+ yy908:
13104
+ yych = *++p;
13105
+ if (yych <= '/')
13106
+ goto yy895;
13107
+ if (yych <= '9')
13108
+ goto yy911;
13109
+ if (yych == ';')
13110
+ goto yy901;
13111
+ goto yy895;
13112
+ yy909:
13113
+ yych = *++p;
13114
+ if (yych <= ';') {
13115
+ if (yych <= '/')
13116
+ goto yy895;
13117
+ if (yych <= '9')
13118
+ goto yy912;
13119
+ if (yych <= ':')
13120
+ goto yy895;
13121
+ goto yy901;
13122
+ } else {
13123
+ if (yych <= 'F') {
13124
+ if (yych <= '@')
13125
+ goto yy895;
13126
+ goto yy912;
13127
+ } else {
13128
+ if (yych <= '`')
13129
+ goto yy895;
13130
+ if (yych <= 'f')
13131
+ goto yy912;
13132
+ goto yy895;
13133
+ }
13134
+ }
13135
+ yy910:
13136
+ yych = *++p;
13137
+ if (yych <= ';') {
13138
+ if (yych <= '/')
13139
+ goto yy895;
13140
+ if (yych <= '9')
13141
+ goto yy913;
13142
+ if (yych <= ':')
13143
+ goto yy895;
13144
+ goto yy901;
13145
+ } else {
13146
+ if (yych <= 'Z') {
13147
+ if (yych <= '@')
13148
+ goto yy895;
13149
+ goto yy913;
13150
+ } else {
13151
+ if (yych <= '`')
13152
+ goto yy895;
13153
+ if (yych <= 'z')
13154
+ goto yy913;
13155
+ goto yy895;
13156
+ }
13157
+ }
13158
+ yy911:
13159
+ yych = *++p;
13160
+ if (yych <= '/')
13161
+ goto yy895;
13162
+ if (yych <= '9')
13163
+ goto yy914;
13164
+ if (yych == ';')
13165
+ goto yy901;
13166
+ goto yy895;
13167
+ yy912:
13168
+ yych = *++p;
13169
+ if (yych <= ';') {
13170
+ if (yych <= '/')
13171
+ goto yy895;
13172
+ if (yych <= '9')
13173
+ goto yy915;
13174
+ if (yych <= ':')
13175
+ goto yy895;
13176
+ goto yy901;
13177
+ } else {
13178
+ if (yych <= 'F') {
13179
+ if (yych <= '@')
13180
+ goto yy895;
13181
+ goto yy915;
13182
+ } else {
13183
+ if (yych <= '`')
13184
+ goto yy895;
13185
+ if (yych <= 'f')
13186
+ goto yy915;
13187
+ goto yy895;
13188
+ }
13189
+ }
13190
+ yy913:
13191
+ yych = *++p;
13192
+ if (yych <= ';') {
13193
+ if (yych <= '/')
13194
+ goto yy895;
13195
+ if (yych <= '9')
13196
+ goto yy916;
13197
+ if (yych <= ':')
13198
+ goto yy895;
13199
+ goto yy901;
13200
+ } else {
13201
+ if (yych <= 'Z') {
13202
+ if (yych <= '@')
13203
+ goto yy895;
13204
+ goto yy916;
13205
+ } else {
13206
+ if (yych <= '`')
13207
+ goto yy895;
13208
+ if (yych <= 'z')
13209
+ goto yy916;
13210
+ goto yy895;
13211
+ }
13212
+ }
13213
+ yy914:
13214
+ yych = *++p;
13215
+ if (yych <= '/')
13216
+ goto yy895;
13217
+ if (yych <= '9')
13218
+ goto yy917;
13219
+ if (yych == ';')
13220
+ goto yy901;
13221
+ goto yy895;
13222
+ yy915:
13223
+ yych = *++p;
13224
+ if (yych <= ';') {
13225
+ if (yych <= '/')
13226
+ goto yy895;
13227
+ if (yych <= '9')
13228
+ goto yy918;
13229
+ if (yych <= ':')
13230
+ goto yy895;
13231
+ goto yy901;
13232
+ } else {
13233
+ if (yych <= 'F') {
13234
+ if (yych <= '@')
13235
+ goto yy895;
13236
+ goto yy918;
13237
+ } else {
13238
+ if (yych <= '`')
13239
+ goto yy895;
13240
+ if (yych <= 'f')
13241
+ goto yy918;
13242
+ goto yy895;
13243
+ }
13244
+ }
13245
+ yy916:
13246
+ yych = *++p;
13247
+ if (yych <= ';') {
13248
+ if (yych <= '/')
13249
+ goto yy895;
13250
+ if (yych <= '9')
13251
+ goto yy919;
13252
+ if (yych <= ':')
13253
+ goto yy895;
13254
+ goto yy901;
13255
+ } else {
13256
+ if (yych <= 'Z') {
13257
+ if (yych <= '@')
13258
+ goto yy895;
13259
+ goto yy919;
13260
+ } else {
13261
+ if (yych <= '`')
13262
+ goto yy895;
13263
+ if (yych <= 'z')
13264
+ goto yy919;
13265
+ goto yy895;
13266
+ }
13267
+ }
13268
+ yy917:
13269
+ yych = *++p;
13270
+ if (yych <= '/')
13271
+ goto yy895;
13272
+ if (yych <= '9')
13273
+ goto yy920;
13274
+ if (yych == ';')
13275
+ goto yy901;
13276
+ goto yy895;
13277
+ yy918:
13278
+ yych = *++p;
13279
+ if (yych <= ';') {
13280
+ if (yych <= '/')
13281
+ goto yy895;
13282
+ if (yych <= '9')
13283
+ goto yy921;
13284
+ if (yych <= ':')
13285
+ goto yy895;
13286
+ goto yy901;
13287
+ } else {
13288
+ if (yych <= 'F') {
13289
+ if (yych <= '@')
13290
+ goto yy895;
13291
+ goto yy921;
13292
+ } else {
13293
+ if (yych <= '`')
13294
+ goto yy895;
13295
+ if (yych <= 'f')
13296
+ goto yy921;
13297
+ goto yy895;
13298
+ }
13299
+ }
13300
+ yy919:
13301
+ yych = *++p;
13302
+ if (yych <= ';') {
13303
+ if (yych <= '/')
13304
+ goto yy895;
13305
+ if (yych <= '9')
13306
+ goto yy922;
13307
+ if (yych <= ':')
13308
+ goto yy895;
13309
+ goto yy901;
13310
+ } else {
13311
+ if (yych <= 'Z') {
13312
+ if (yych <= '@')
13313
+ goto yy895;
13314
+ goto yy922;
13315
+ } else {
13316
+ if (yych <= '`')
13317
+ goto yy895;
13318
+ if (yych <= 'z')
13319
+ goto yy922;
13320
+ goto yy895;
13321
+ }
13322
+ }
13323
+ yy920:
13324
+ yych = *++p;
13325
+ if (yych == ';')
13326
+ goto yy901;
13327
+ goto yy895;
13328
+ yy921:
13329
+ yych = *++p;
13330
+ if (yych <= ';') {
13331
+ if (yych <= '/')
13332
+ goto yy895;
13333
+ if (yych <= '9')
13334
+ goto yy920;
13335
+ if (yych <= ':')
13336
+ goto yy895;
13337
+ goto yy901;
13338
+ } else {
13339
+ if (yych <= 'F') {
13340
+ if (yych <= '@')
13341
+ goto yy895;
13342
+ goto yy920;
13343
+ } else {
13344
+ if (yych <= '`')
13345
+ goto yy895;
13346
+ if (yych <= 'f')
13347
+ goto yy920;
13348
+ goto yy895;
13349
+ }
13350
+ }
13351
+ yy922:
13352
+ yych = *++p;
13353
+ if (yych <= ';') {
13354
+ if (yych <= '/')
13355
+ goto yy895;
13356
+ if (yych <= '9')
13357
+ goto yy923;
13358
+ if (yych <= ':')
13359
+ goto yy895;
13360
+ goto yy901;
13361
+ } else {
13362
+ if (yych <= 'Z') {
13363
+ if (yych <= '@')
13364
+ goto yy895;
13365
+ } else {
13366
+ if (yych <= '`')
13367
+ goto yy895;
13368
+ if (yych >= '{')
13369
+ goto yy895;
13370
+ }
13371
+ }
13372
+ yy923:
13373
+ yych = *++p;
13374
+ if (yych <= ';') {
13375
+ if (yych <= '/')
13376
+ goto yy895;
13377
+ if (yych <= '9')
13378
+ goto yy924;
13379
+ if (yych <= ':')
13380
+ goto yy895;
13381
+ goto yy901;
13382
+ } else {
13383
+ if (yych <= 'Z') {
13384
+ if (yych <= '@')
13385
+ goto yy895;
13386
+ } else {
13387
+ if (yych <= '`')
13388
+ goto yy895;
13389
+ if (yych >= '{')
13390
+ goto yy895;
13391
+ }
13392
+ }
13393
+ yy924:
13394
+ yych = *++p;
13395
+ if (yych <= ';') {
13396
+ if (yych <= '/')
13397
+ goto yy895;
13398
+ if (yych <= '9')
13399
+ goto yy925;
13400
+ if (yych <= ':')
13401
+ goto yy895;
13402
+ goto yy901;
13403
+ } else {
13404
+ if (yych <= 'Z') {
13405
+ if (yych <= '@')
13406
+ goto yy895;
13407
+ } else {
13408
+ if (yych <= '`')
13409
+ goto yy895;
13410
+ if (yych >= '{')
13411
+ goto yy895;
13412
+ }
13413
+ }
13414
+ yy925:
13415
+ yych = *++p;
13416
+ if (yych <= ';') {
13417
+ if (yych <= '/')
13418
+ goto yy895;
13419
+ if (yych <= '9')
13420
+ goto yy926;
13421
+ if (yych <= ':')
13422
+ goto yy895;
13423
+ goto yy901;
13424
+ } else {
13425
+ if (yych <= 'Z') {
13426
+ if (yych <= '@')
13427
+ goto yy895;
13428
+ } else {
13429
+ if (yych <= '`')
13430
+ goto yy895;
13431
+ if (yych >= '{')
13432
+ goto yy895;
13433
+ }
13434
+ }
13435
+ yy926:
13436
+ yych = *++p;
13437
+ if (yych <= ';') {
13438
+ if (yych <= '/')
13439
+ goto yy895;
13440
+ if (yych <= '9')
13441
+ goto yy927;
13442
+ if (yych <= ':')
13443
+ goto yy895;
13444
+ goto yy901;
13445
+ } else {
13446
+ if (yych <= 'Z') {
13447
+ if (yych <= '@')
13448
+ goto yy895;
13449
+ } else {
13450
+ if (yych <= '`')
13451
+ goto yy895;
13452
+ if (yych >= '{')
13453
+ goto yy895;
13454
+ }
13455
+ }
13456
+ yy927:
13457
+ yych = *++p;
13458
+ if (yych <= ';') {
13459
+ if (yych <= '/')
13460
+ goto yy895;
13461
+ if (yych <= '9')
13462
+ goto yy928;
13463
+ if (yych <= ':')
13464
+ goto yy895;
13465
+ goto yy901;
13466
+ } else {
13467
+ if (yych <= 'Z') {
13468
+ if (yych <= '@')
13469
+ goto yy895;
13470
+ } else {
13471
+ if (yych <= '`')
13472
+ goto yy895;
13473
+ if (yych >= '{')
13474
+ goto yy895;
13475
+ }
13476
+ }
13477
+ yy928:
13478
+ yych = *++p;
13479
+ if (yych <= ';') {
13480
+ if (yych <= '/')
13481
+ goto yy895;
13482
+ if (yych <= '9')
13483
+ goto yy929;
13484
+ if (yych <= ':')
13485
+ goto yy895;
13486
+ goto yy901;
13487
+ } else {
13488
+ if (yych <= 'Z') {
13489
+ if (yych <= '@')
13490
+ goto yy895;
13491
+ } else {
13492
+ if (yych <= '`')
13493
+ goto yy895;
13494
+ if (yych >= '{')
13495
+ goto yy895;
13496
+ }
13497
+ }
13498
+ yy929:
13499
+ yych = *++p;
13500
+ if (yych <= ';') {
13501
+ if (yych <= '/')
13502
+ goto yy895;
13503
+ if (yych <= '9')
13504
+ goto yy930;
13505
+ if (yych <= ':')
13506
+ goto yy895;
13507
+ goto yy901;
13508
+ } else {
13509
+ if (yych <= 'Z') {
13510
+ if (yych <= '@')
13511
+ goto yy895;
13512
+ } else {
13513
+ if (yych <= '`')
13514
+ goto yy895;
13515
+ if (yych >= '{')
13516
+ goto yy895;
13517
+ }
13518
+ }
13519
+ yy930:
13520
+ yych = *++p;
13521
+ if (yych <= ';') {
13522
+ if (yych <= '/')
13523
+ goto yy895;
13524
+ if (yych <= '9')
13525
+ goto yy931;
13526
+ if (yych <= ':')
13527
+ goto yy895;
13528
+ goto yy901;
13529
+ } else {
13530
+ if (yych <= 'Z') {
13531
+ if (yych <= '@')
13532
+ goto yy895;
13533
+ } else {
13534
+ if (yych <= '`')
13535
+ goto yy895;
13536
+ if (yych >= '{')
13537
+ goto yy895;
13538
+ }
13539
+ }
13540
+ yy931:
13541
+ yych = *++p;
13542
+ if (yych <= ';') {
13543
+ if (yych <= '/')
13544
+ goto yy895;
13545
+ if (yych <= '9')
13546
+ goto yy932;
13547
+ if (yych <= ':')
13548
+ goto yy895;
13549
+ goto yy901;
13550
+ } else {
13551
+ if (yych <= 'Z') {
13552
+ if (yych <= '@')
13553
+ goto yy895;
13554
+ } else {
13555
+ if (yych <= '`')
13556
+ goto yy895;
13557
+ if (yych >= '{')
13558
+ goto yy895;
13559
+ }
13560
+ }
13561
+ yy932:
13562
+ yych = *++p;
13563
+ if (yych <= ';') {
13564
+ if (yych <= '/')
13565
+ goto yy895;
13566
+ if (yych <= '9')
13567
+ goto yy933;
13568
+ if (yych <= ':')
13569
+ goto yy895;
13570
+ goto yy901;
13571
+ } else {
13572
+ if (yych <= 'Z') {
13573
+ if (yych <= '@')
13574
+ goto yy895;
13575
+ } else {
13576
+ if (yych <= '`')
13577
+ goto yy895;
13578
+ if (yych >= '{')
13579
+ goto yy895;
13580
+ }
13581
+ }
13582
+ yy933:
13583
+ yych = *++p;
13584
+ if (yych <= ';') {
13585
+ if (yych <= '/')
13586
+ goto yy895;
13587
+ if (yych <= '9')
13588
+ goto yy934;
13589
+ if (yych <= ':')
13590
+ goto yy895;
13591
+ goto yy901;
13592
+ } else {
13593
+ if (yych <= 'Z') {
13594
+ if (yych <= '@')
13595
+ goto yy895;
13596
+ } else {
13597
+ if (yych <= '`')
13598
+ goto yy895;
13599
+ if (yych >= '{')
13600
+ goto yy895;
13601
+ }
13602
+ }
13603
+ yy934:
13604
+ yych = *++p;
13605
+ if (yych <= ';') {
13606
+ if (yych <= '/')
13607
+ goto yy895;
13608
+ if (yych <= '9')
13609
+ goto yy935;
13610
+ if (yych <= ':')
13611
+ goto yy895;
13612
+ goto yy901;
13613
+ } else {
13614
+ if (yych <= 'Z') {
13615
+ if (yych <= '@')
13616
+ goto yy895;
13617
+ } else {
13618
+ if (yych <= '`')
13619
+ goto yy895;
13620
+ if (yych >= '{')
13621
+ goto yy895;
13622
+ }
13623
+ }
13624
+ yy935:
13625
+ yych = *++p;
13626
+ if (yych <= ';') {
13627
+ if (yych <= '/')
13628
+ goto yy895;
13629
+ if (yych <= '9')
13630
+ goto yy936;
13631
+ if (yych <= ':')
13632
+ goto yy895;
13633
+ goto yy901;
13634
+ } else {
13635
+ if (yych <= 'Z') {
13636
+ if (yych <= '@')
13637
+ goto yy895;
13638
+ } else {
13639
+ if (yych <= '`')
13640
+ goto yy895;
13641
+ if (yych >= '{')
13642
+ goto yy895;
13643
+ }
13644
+ }
13645
+ yy936:
13646
+ yych = *++p;
13647
+ if (yych <= ';') {
13648
+ if (yych <= '/')
13649
+ goto yy895;
13650
+ if (yych <= '9')
13651
+ goto yy937;
13652
+ if (yych <= ':')
13653
+ goto yy895;
13654
+ goto yy901;
13655
+ } else {
13656
+ if (yych <= 'Z') {
13657
+ if (yych <= '@')
13658
+ goto yy895;
13659
+ } else {
13660
+ if (yych <= '`')
13661
+ goto yy895;
13662
+ if (yych >= '{')
13663
+ goto yy895;
13664
+ }
13665
+ }
13666
+ yy937:
13667
+ yych = *++p;
13668
+ if (yych <= ';') {
13669
+ if (yych <= '/')
13670
+ goto yy895;
13671
+ if (yych <= '9')
13672
+ goto yy938;
13673
+ if (yych <= ':')
13674
+ goto yy895;
13675
+ goto yy901;
13676
+ } else {
13677
+ if (yych <= 'Z') {
13678
+ if (yych <= '@')
13679
+ goto yy895;
13680
+ } else {
13681
+ if (yych <= '`')
13682
+ goto yy895;
13683
+ if (yych >= '{')
13684
+ goto yy895;
13685
+ }
13686
+ }
13687
+ yy938:
13688
+ yych = *++p;
13689
+ if (yych <= ';') {
13690
+ if (yych <= '/')
13691
+ goto yy895;
13692
+ if (yych <= '9')
13693
+ goto yy939;
13694
+ if (yych <= ':')
13695
+ goto yy895;
13696
+ goto yy901;
13697
+ } else {
13698
+ if (yych <= 'Z') {
13699
+ if (yych <= '@')
13700
+ goto yy895;
13701
+ } else {
13702
+ if (yych <= '`')
13703
+ goto yy895;
13704
+ if (yych >= '{')
13705
+ goto yy895;
13706
+ }
13707
+ }
13708
+ yy939:
13709
+ yych = *++p;
13710
+ if (yych <= ';') {
13711
+ if (yych <= '/')
13712
+ goto yy895;
13713
+ if (yych <= '9')
13714
+ goto yy940;
13715
+ if (yych <= ':')
13716
+ goto yy895;
13717
+ goto yy901;
13718
+ } else {
13719
+ if (yych <= 'Z') {
13720
+ if (yych <= '@')
13721
+ goto yy895;
13722
+ } else {
13723
+ if (yych <= '`')
13724
+ goto yy895;
13725
+ if (yych >= '{')
13726
+ goto yy895;
13727
+ }
13728
+ }
13729
+ yy940:
13730
+ yych = *++p;
13731
+ if (yych <= ';') {
13732
+ if (yych <= '/')
13733
+ goto yy895;
13734
+ if (yych <= '9')
13735
+ goto yy941;
13736
+ if (yych <= ':')
13737
+ goto yy895;
13738
+ goto yy901;
13739
+ } else {
13740
+ if (yych <= 'Z') {
13741
+ if (yych <= '@')
13742
+ goto yy895;
13743
+ } else {
13744
+ if (yych <= '`')
13745
+ goto yy895;
13746
+ if (yych >= '{')
13747
+ goto yy895;
13748
+ }
13749
+ }
13750
+ yy941:
13751
+ yych = *++p;
13752
+ if (yych <= ';') {
13753
+ if (yych <= '/')
13754
+ goto yy895;
13755
+ if (yych <= '9')
13756
+ goto yy942;
13757
+ if (yych <= ':')
13758
+ goto yy895;
13759
+ goto yy901;
13760
+ } else {
13761
+ if (yych <= 'Z') {
13762
+ if (yych <= '@')
13763
+ goto yy895;
13764
+ } else {
13765
+ if (yych <= '`')
13766
+ goto yy895;
13767
+ if (yych >= '{')
13768
+ goto yy895;
13769
+ }
13770
+ }
13771
+ yy942:
13772
+ yych = *++p;
13773
+ if (yych <= ';') {
13774
+ if (yych <= '/')
13775
+ goto yy895;
13776
+ if (yych <= '9')
13777
+ goto yy943;
13778
+ if (yych <= ':')
13779
+ goto yy895;
13780
+ goto yy901;
13781
+ } else {
13782
+ if (yych <= 'Z') {
13783
+ if (yych <= '@')
13784
+ goto yy895;
13785
+ } else {
13786
+ if (yych <= '`')
13787
+ goto yy895;
13788
+ if (yych >= '{')
13789
+ goto yy895;
13790
+ }
13791
+ }
13792
+ yy943:
13793
+ yych = *++p;
13794
+ if (yych <= ';') {
13795
+ if (yych <= '/')
13796
+ goto yy895;
13797
+ if (yych <= '9')
13798
+ goto yy944;
13799
+ if (yych <= ':')
13800
+ goto yy895;
13801
+ goto yy901;
13802
+ } else {
13803
+ if (yych <= 'Z') {
13804
+ if (yych <= '@')
13805
+ goto yy895;
13806
+ } else {
13807
+ if (yych <= '`')
13808
+ goto yy895;
13809
+ if (yych >= '{')
13810
+ goto yy895;
13811
+ }
13812
+ }
13813
+ yy944:
13814
+ ++p;
13815
+ if ((yych = *p) <= ';') {
13816
+ if (yych <= '/')
13817
+ goto yy895;
13818
+ if (yych <= '9')
13819
+ goto yy920;
13820
+ if (yych <= ':')
13821
+ goto yy895;
13822
+ goto yy901;
13823
+ } else {
13824
+ if (yych <= 'Z') {
13825
+ if (yych <= '@')
13826
+ goto yy895;
13827
+ goto yy920;
13828
+ } else {
13829
+ if (yych <= '`')
13830
+ goto yy895;
13831
+ if (yych <= 'z')
13832
+ goto yy920;
13833
+ goto yy895;
13834
+ }
13835
+ }
13836
+ }
13837
+}
13838
+
13839
+// Returns positive value if a URL begins in a way that is potentially
13840
+// dangerous, with javascript:, vbscript:, file:, or data:, otherwise 0.
13841
+bufsize_t _scan_dangerous_url(const unsigned char *p) {
13842
+ const unsigned char *marker = NULL;
13843
+ const unsigned char *start = p;
13844
+
13845
+ {
13846
+ unsigned char yych;
13847
+ unsigned int yyaccept = 0;
13848
+ yych = *p;
13849
+ if (yych <= 'V') {
13850
+ if (yych <= 'F') {
13851
+ if (yych == 'D')
13852
+ goto yy949;
13853
+ if (yych >= 'F')
13854
+ goto yy950;
13855
+ } else {
13856
+ if (yych == 'J')
13857
+ goto yy951;
13858
+ if (yych >= 'V')
13859
+ goto yy952;
13860
+ }
13861
+ } else {
13862
+ if (yych <= 'f') {
13863
+ if (yych == 'd')
13864
+ goto yy949;
13865
+ if (yych >= 'f')
13866
+ goto yy950;
13867
+ } else {
13868
+ if (yych <= 'j') {
13869
+ if (yych >= 'j')
13870
+ goto yy951;
13871
+ } else {
13872
+ if (yych == 'v')
13873
+ goto yy952;
13874
+ }
13875
+ }
13876
+ }
13877
+ ++p;
13878
+ yy948 : { return 0; }
13879
+ yy949:
13880
+ yyaccept = 0;
13881
+ yych = *(marker = ++p);
13882
+ if (yych == 'A')
13883
+ goto yy953;
13884
+ if (yych == 'a')
13885
+ goto yy953;
13886
+ goto yy948;
13887
+ yy950:
13888
+ yyaccept = 0;
13889
+ yych = *(marker = ++p);
13890
+ if (yych == 'I')
13891
+ goto yy955;
13892
+ if (yych == 'i')
13893
+ goto yy955;
13894
+ goto yy948;
13895
+ yy951:
13896
+ yyaccept = 0;
13897
+ yych = *(marker = ++p);
13898
+ if (yych == 'A')
13899
+ goto yy956;
13900
+ if (yych == 'a')
13901
+ goto yy956;
13902
+ goto yy948;
13903
+ yy952:
13904
+ yyaccept = 0;
13905
+ yych = *(marker = ++p);
13906
+ if (yych == 'B')
13907
+ goto yy957;
13908
+ if (yych == 'b')
13909
+ goto yy957;
13910
+ goto yy948;
13911
+ yy953:
13912
+ yych = *++p;
13913
+ if (yych == 'T')
13914
+ goto yy958;
13915
+ if (yych == 't')
13916
+ goto yy958;
13917
+ yy954:
13918
+ p = marker;
13919
+ if (yyaccept == 0) {
13920
+ goto yy948;
13921
+ } else {
13922
+ goto yy966;
13923
+ }
13924
+ yy955:
13925
+ yych = *++p;
13926
+ if (yych == 'L')
13927
+ goto yy959;
13928
+ if (yych == 'l')
13929
+ goto yy959;
13930
+ goto yy954;
13931
+ yy956:
13932
+ yych = *++p;
13933
+ if (yych == 'V')
13934
+ goto yy960;
13935
+ if (yych == 'v')
13936
+ goto yy960;
13937
+ goto yy954;
13938
+ yy957:
13939
+ yych = *++p;
13940
+ if (yych == 'S')
13941
+ goto yy961;
13942
+ if (yych == 's')
13943
+ goto yy961;
13944
+ goto yy954;
13945
+ yy958:
13946
+ yych = *++p;
13947
+ if (yych == 'A')
13948
+ goto yy962;
13949
+ if (yych == 'a')
13950
+ goto yy962;
13951
+ goto yy954;
13952
+ yy959:
13953
+ yych = *++p;
13954
+ if (yych == 'E')
13955
+ goto yy963;
13956
+ if (yych == 'e')
13957
+ goto yy963;
13958
+ goto yy954;
13959
+ yy960:
13960
+ yych = *++p;
13961
+ if (yych == 'A')
13962
+ goto yy957;
13963
+ if (yych == 'a')
13964
+ goto yy957;
13965
+ goto yy954;
13966
+ yy961:
13967
+ yych = *++p;
13968
+ if (yych == 'C')
13969
+ goto yy964;
13970
+ if (yych == 'c')
13971
+ goto yy964;
13972
+ goto yy954;
13973
+ yy962:
13974
+ yych = *++p;
13975
+ if (yych == ':')
13976
+ goto yy965;
13977
+ goto yy954;
13978
+ yy963:
13979
+ yych = *++p;
13980
+ if (yych == ':')
13981
+ goto yy967;
13982
+ goto yy954;
13983
+ yy964:
13984
+ yych = *++p;
13985
+ if (yych == 'R')
13986
+ goto yy968;
13987
+ if (yych == 'r')
13988
+ goto yy968;
13989
+ goto yy954;
13990
+ yy965:
13991
+ yyaccept = 1;
13992
+ yych = *(marker = ++p);
13993
+ if (yych == 'I')
13994
+ goto yy969;
13995
+ if (yych == 'i')
13996
+ goto yy969;
13997
+ yy966 : { return (bufsize_t)(p - start); }
13998
+ yy967:
13999
+ yych = *++p;
14000
+ goto yy966;
14001
+ yy968:
14002
+ yych = *++p;
14003
+ if (yych == 'I')
14004
+ goto yy970;
14005
+ if (yych == 'i')
14006
+ goto yy970;
14007
+ goto yy954;
14008
+ yy969:
14009
+ yych = *++p;
14010
+ if (yych == 'M')
14011
+ goto yy971;
14012
+ if (yych == 'm')
14013
+ goto yy971;
14014
+ goto yy954;
14015
+ yy970:
14016
+ yych = *++p;
14017
+ if (yych == 'P')
14018
+ goto yy972;
14019
+ if (yych == 'p')
14020
+ goto yy972;
14021
+ goto yy954;
14022
+ yy971:
14023
+ yych = *++p;
14024
+ if (yych == 'A')
14025
+ goto yy973;
14026
+ if (yych == 'a')
14027
+ goto yy973;
14028
+ goto yy954;
14029
+ yy972:
14030
+ yych = *++p;
14031
+ if (yych == 'T')
14032
+ goto yy963;
14033
+ if (yych == 't')
14034
+ goto yy963;
14035
+ goto yy954;
14036
+ yy973:
14037
+ yych = *++p;
14038
+ if (yych == 'G')
14039
+ goto yy974;
14040
+ if (yych != 'g')
14041
+ goto yy954;
14042
+ yy974:
14043
+ yych = *++p;
14044
+ if (yych == 'E')
14045
+ goto yy975;
14046
+ if (yych != 'e')
14047
+ goto yy954;
14048
+ yy975:
14049
+ yych = *++p;
14050
+ if (yych != '/')
14051
+ goto yy954;
14052
+ yych = *++p;
14053
+ if (yych <= 'W') {
14054
+ if (yych <= 'J') {
14055
+ if (yych == 'G')
14056
+ goto yy977;
14057
+ if (yych <= 'I')
14058
+ goto yy954;
14059
+ goto yy978;
14060
+ } else {
14061
+ if (yych == 'P')
14062
+ goto yy979;
14063
+ if (yych <= 'V')
14064
+ goto yy954;
14065
+ goto yy980;
14066
+ }
14067
+ } else {
14068
+ if (yych <= 'j') {
14069
+ if (yych == 'g')
14070
+ goto yy977;
14071
+ if (yych <= 'i')
14072
+ goto yy954;
14073
+ goto yy978;
14074
+ } else {
14075
+ if (yych <= 'p') {
14076
+ if (yych <= 'o')
14077
+ goto yy954;
14078
+ goto yy979;
14079
+ } else {
14080
+ if (yych == 'w')
14081
+ goto yy980;
14082
+ goto yy954;
14083
+ }
14084
+ }
14085
+ }
14086
+ yy977:
14087
+ yych = *++p;
14088
+ if (yych == 'I')
14089
+ goto yy981;
14090
+ if (yych == 'i')
14091
+ goto yy981;
14092
+ goto yy954;
14093
+ yy978:
14094
+ yych = *++p;
14095
+ if (yych == 'P')
14096
+ goto yy982;
14097
+ if (yych == 'p')
14098
+ goto yy982;
14099
+ goto yy954;
14100
+ yy979:
14101
+ yych = *++p;
14102
+ if (yych == 'N')
14103
+ goto yy983;
14104
+ if (yych == 'n')
14105
+ goto yy983;
14106
+ goto yy954;
14107
+ yy980:
14108
+ yych = *++p;
14109
+ if (yych == 'E')
14110
+ goto yy984;
14111
+ if (yych == 'e')
14112
+ goto yy984;
14113
+ goto yy954;
14114
+ yy981:
14115
+ yych = *++p;
14116
+ if (yych == 'F')
14117
+ goto yy985;
14118
+ if (yych == 'f')
14119
+ goto yy985;
14120
+ goto yy954;
14121
+ yy982:
14122
+ yych = *++p;
14123
+ if (yych == 'E')
14124
+ goto yy983;
14125
+ if (yych != 'e')
14126
+ goto yy954;
14127
+ yy983:
14128
+ yych = *++p;
14129
+ if (yych == 'G')
14130
+ goto yy985;
14131
+ if (yych == 'g')
14132
+ goto yy985;
14133
+ goto yy954;
14134
+ yy984:
14135
+ yych = *++p;
14136
+ if (yych == 'B')
14137
+ goto yy987;
14138
+ if (yych == 'b')
14139
+ goto yy987;
14140
+ goto yy954;
14141
+ yy985:
14142
+ ++p;
14143
+ { return 0; }
14144
+ yy987:
14145
+ ++p;
14146
+ if ((yych = *p) == 'P')
14147
+ goto yy985;
14148
+ if (yych == 'p')
14149
+ goto yy985;
14150
+ goto yy954;
14151
+ }
14152
+}
14153
+
14154
+
14155
+static const char *EMDASH = "\xE2\x80\x94";
14156
+static const char *ENDASH = "\xE2\x80\x93";
14157
+static const char *ELLIPSES = "\xE2\x80\xA6";
14158
+static const char *LEFTDOUBLEQUOTE = "\xE2\x80\x9C";
14159
+static const char *RIGHTDOUBLEQUOTE = "\xE2\x80\x9D";
14160
+static const char *LEFTSINGLEQUOTE = "\xE2\x80\x98";
14161
+static const char *RIGHTSINGLEQUOTE = "\xE2\x80\x99";
14162
+
14163
+// Macros for creating various kinds of simple.
14164
+#define make_str(mem, s) make_literal(mem, CMARK_NODE_TEXT, s)
14165
+#define make_code(mem, s) make_literal(mem, CMARK_NODE_CODE, s)
14166
+#define make_raw_html(mem, s) make_literal(mem, CMARK_NODE_HTML_INLINE, s)
14167
+#define make_linebreak(mem) make_simple(mem, CMARK_NODE_LINEBREAK)
14168
+#define make_softbreak(mem) make_simple(mem, CMARK_NODE_SOFTBREAK)
14169
+#define make_emph(mem) make_simple(mem, CMARK_NODE_EMPH)
14170
+#define make_strong(mem) make_simple(mem, CMARK_NODE_STRONG)
14171
+
14172
+#define MAXBACKTICKS 1000
14173
+
14174
+typedef struct delimiter {
14175
+ struct delimiter *previous;
14176
+ struct delimiter *next;
14177
+ cmark_node *inl_text;
14178
+ bufsize_t length;
14179
+ unsigned char delim_char;
14180
+ bool can_open;
14181
+ bool can_close;
14182
+} delimiter;
14183
+
14184
+typedef struct bracket {
14185
+ struct bracket *previous;
14186
+ struct delimiter *previous_delimiter;
14187
+ cmark_node *inl_text;
14188
+ bufsize_t position;
14189
+ bool image;
14190
+ bool active;
14191
+ bool bracket_after;
14192
+} bracket;
14193
+
14194
+typedef struct {
14195
+ cmark_mem *mem;
14196
+ cmark_chunk input;
14197
+ bufsize_t pos;
14198
+ cmark_reference_map *refmap;
14199
+ delimiter *last_delim;
14200
+ bracket *last_bracket;
14201
+ bufsize_t backticks[MAXBACKTICKS + 1];
14202
+ bool scanned_for_backticks;
14203
+} subject;
14204
+
14205
+static CMARK_INLINE bool S_is_line_end_char(char c) {
14206
+ return (c == '\n' || c == '\r');
14207
+}
14208
+
14209
+static delimiter *S_insert_emph(subject *subj, delimiter *opener,
14210
+ delimiter *closer);
14211
+
14212
+static int parse_inline(subject *subj, cmark_node *parent, int options);
14213
+
14214
+static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer,
14215
+ cmark_reference_map *refmap);
14216
+static bufsize_t subject_find_special_char(subject *subj, int options);
14217
+
14218
+// Create an inline with a literal string value.
14219
+static CMARK_INLINE cmark_node *make_literal(cmark_mem *mem, cmark_node_type t,
14220
+ cmark_chunk s) {
14221
+ cmark_node *e = (cmark_node *)mem->calloc(1, sizeof(*e));
14222
+ cmark_strbuf_init(mem, &e->content, 0);
14223
+ e->type = t;
14224
+ e->as.literal = s;
14225
+ return e;
14226
+}
14227
+
14228
+// Create an inline with no value.
14229
+static CMARK_INLINE cmark_node *make_simple(cmark_mem *mem, cmark_node_type t) {
14230
+ cmark_node *e = (cmark_node *)mem->calloc(1, sizeof(*e));
14231
+ cmark_strbuf_init(mem, &e->content, 0);
14232
+ e->type = t;
14233
+ return e;
14234
+}
14235
+
14236
+// Like make_str, but parses entities.
14237
+static cmark_node *make_str_with_entities(cmark_mem *mem,
14238
+ cmark_chunk *content) {
14239
+ cmark_strbuf unescaped = CMARK_BUF_INIT(mem);
14240
+
14241
+ if (houdini_unescape_html(&unescaped, content->data, content->len)) {
14242
+ return make_str(mem, cmark_chunk_buf_detach(&unescaped));
14243
+ } else {
14244
+ return make_str(mem, *content);
14245
+ }
14246
+}
14247
+
14248
+// Duplicate a chunk by creating a copy of the buffer not by reusing the
14249
+// buffer like cmark_chunk_dup does.
14250
+static cmark_chunk chunk_clone(cmark_mem *mem, cmark_chunk *src) {
14251
+ cmark_chunk c;
14252
+ bufsize_t len = src->len;
14253
+
14254
+ c.len = len;
14255
+ c.data = (unsigned char *)mem->calloc(len + 1, 1);
14256
+ c.alloc = 1;
14257
+ memcpy(c.data, src->data, len);
14258
+ c.data[len] = '\0';
14259
+
14260
+ return c;
14261
+}
14262
+
14263
+static cmark_chunk cmark_clean_autolink(cmark_mem *mem, cmark_chunk *url,
14264
+ int is_email) {
14265
+ cmark_strbuf buf = CMARK_BUF_INIT(mem);
14266
+
14267
+ cmark_chunk_trim(url);
14268
+
14269
+ if (url->len == 0) {
14270
+ cmark_chunk result = CMARK_CHUNK_EMPTY;
14271
+ return result;
14272
+ }
14273
+
14274
+ if (is_email)
14275
+ cmark_strbuf_puts(&buf, "mailto:");
14276
+
14277
+ houdini_unescape_html_f(&buf, url->data, url->len);
14278
+ return cmark_chunk_buf_detach(&buf);
14279
+}
14280
+
14281
+static CMARK_INLINE cmark_node *make_autolink(cmark_mem *mem, cmark_chunk url,
14282
+ int is_email) {
14283
+ cmark_node *link = make_simple(mem, CMARK_NODE_LINK);
14284
+ link->as.link.url = cmark_clean_autolink(mem, &url, is_email);
14285
+ link->as.link.title = cmark_chunk_literal("");
14286
+ cmark_node_append_child(link, make_str_with_entities(mem, &url));
14287
+ return link;
14288
+}
14289
+
14290
+static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer,
14291
+ cmark_reference_map *refmap) {
14292
+ int i;
14293
+ e->mem = mem;
14294
+ e->input.data = buffer->ptr;
14295
+ e->input.len = buffer->size;
14296
+ e->input.alloc = 0;
14297
+ e->pos = 0;
14298
+ e->refmap = refmap;
14299
+ e->last_delim = NULL;
14300
+ e->last_bracket = NULL;
14301
+ for (i = 0; i <= MAXBACKTICKS; i++) {
14302
+ e->backticks[i] = 0;
14303
+ }
14304
+ e->scanned_for_backticks = false;
14305
+}
14306
+
14307
+static CMARK_INLINE int isbacktick(int c) { return (c == '`'); }
14308
+
14309
+static CMARK_INLINE unsigned char peek_char(subject *subj) {
14310
+ // NULL bytes should have been stripped out by now. If they're
14311
+ // present, it's a programming error:
14312
+ assert(!(subj->pos < subj->input.len && subj->input.data[subj->pos] == 0));
14313
+ return (subj->pos < subj->input.len) ? subj->input.data[subj->pos] : 0;
14314
+}
14315
+
14316
+static CMARK_INLINE unsigned char peek_at(subject *subj, bufsize_t pos) {
14317
+ return subj->input.data[pos];
14318
+}
14319
+
14320
+// Return true if there are more characters in the subject.
14321
+static CMARK_INLINE int is_eof(subject *subj) {
14322
+ return (subj->pos >= subj->input.len);
14323
+}
14324
+
14325
+// Advance the subject. Doesn't check for eof.
14326
+#define advance(subj) (subj)->pos += 1
14327
+
14328
+static CMARK_INLINE bool skip_spaces(subject *subj) {
14329
+ bool skipped = false;
14330
+ while (peek_char(subj) == ' ' || peek_char(subj) == '\t') {
14331
+ advance(subj);
14332
+ skipped = true;
14333
+ }
14334
+ return skipped;
14335
+}
14336
+
14337
+static CMARK_INLINE bool skip_line_end(subject *subj) {
14338
+ bool seen_line_end_char = false;
14339
+ if (peek_char(subj) == '\r') {
14340
+ advance(subj);
14341
+ seen_line_end_char = true;
14342
+ }
14343
+ if (peek_char(subj) == '\n') {
14344
+ advance(subj);
14345
+ seen_line_end_char = true;
14346
+ }
14347
+ return seen_line_end_char || is_eof(subj);
14348
+}
14349
+
14350
+// Take characters while a predicate holds, and return a string.
14351
+static CMARK_INLINE cmark_chunk take_while(subject *subj, int (*f)(int)) {
14352
+ unsigned char c;
14353
+ bufsize_t startpos = subj->pos;
14354
+ bufsize_t len = 0;
14355
+
14356
+ while ((c = peek_char(subj)) && (*f)(c)) {
14357
+ advance(subj);
14358
+ len++;
14359
+ }
14360
+
14361
+ return cmark_chunk_dup(&subj->input, startpos, len);
14362
+}
14363
+
14364
+// Try to process a backtick code span that began with a
14365
+// span of ticks of length openticklength length (already
14366
+// parsed). Return 0 if you don't find matching closing
14367
+// backticks, otherwise return the position in the subject
14368
+// after the closing backticks.
14369
+static bufsize_t scan_to_closing_backticks(subject *subj,
14370
+ bufsize_t openticklength) {
14371
+
14372
+ bool found = false;
14373
+ if (openticklength > MAXBACKTICKS) {
14374
+ // we limit backtick string length because of the array subj->backticks:
14375
+ return 0;
14376
+ }
14377
+ if (subj->scanned_for_backticks &&
14378
+ subj->backticks[openticklength] <= subj->pos) {
14379
+ // return if we already know there's no closer
14380
+ return 0;
14381
+ }
14382
+ while (!found) {
14383
+ // read non backticks
14384
+ unsigned char c;
14385
+ while ((c = peek_char(subj)) && c != '`') {
14386
+ advance(subj);
14387
+ }
14388
+ if (is_eof(subj)) {
14389
+ break;
14390
+ }
14391
+ bufsize_t numticks = 0;
14392
+ while (peek_char(subj) == '`') {
14393
+ advance(subj);
14394
+ numticks++;
14395
+ }
14396
+ // store position of ender
14397
+ if (numticks <= MAXBACKTICKS) {
14398
+ subj->backticks[numticks] = subj->pos - numticks;
14399
+ }
14400
+ if (numticks == openticklength) {
14401
+ return (subj->pos);
14402
+ }
14403
+ }
14404
+ // got through whole input without finding closer
14405
+ subj->scanned_for_backticks = true;
14406
+ return 0;
14407
+}
14408
+
14409
+// Parse backtick code section or raw backticks, return an inline.
14410
+// Assumes that the subject has a backtick at the current position.
14411
+static cmark_node *handle_backticks(subject *subj) {
14412
+ cmark_chunk openticks = take_while(subj, isbacktick);
14413
+ bufsize_t startpos = subj->pos;
14414
+ bufsize_t endpos = scan_to_closing_backticks(subj, openticks.len);
14415
+
14416
+ if (endpos == 0) { // not found
14417
+ subj->pos = startpos; // rewind
14418
+ return make_str(subj->mem, openticks);
14419
+ } else {
14420
+ cmark_strbuf buf = CMARK_BUF_INIT(subj->mem);
14421
+
14422
+ cmark_strbuf_set(&buf, subj->input.data + startpos,
14423
+ endpos - startpos - openticks.len);
14424
+ cmark_strbuf_trim(&buf);
14425
+ cmark_strbuf_normalize_whitespace(&buf);
14426
+
14427
+ return make_code(subj->mem, cmark_chunk_buf_detach(&buf));
14428
+ }
14429
+}
14430
+
14431
+// Scan ***, **, or * and return number scanned, or 0.
14432
+// Advances position.
14433
+static int scan_delims(subject *subj, unsigned char c, bool *can_open,
14434
+ bool *can_close) {
14435
+ int numdelims = 0;
14436
+ bufsize_t before_char_pos;
14437
+ int32_t after_char = 0;
14438
+ int32_t before_char = 0;
14439
+ int len;
14440
+ bool left_flanking, right_flanking;
14441
+
14442
+ if (subj->pos == 0) {
14443
+ before_char = 10;
14444
+ } else {
14445
+ before_char_pos = subj->pos - 1;
14446
+ // walk back to the beginning of the UTF_8 sequence:
14447
+ while (peek_at(subj, before_char_pos) >> 6 == 2 && before_char_pos > 0) {
14448
+ before_char_pos -= 1;
14449
+ }
14450
+ len = cmark_utf8proc_iterate(subj->input.data + before_char_pos,
14451
+ subj->pos - before_char_pos, &before_char);
14452
+ if (len == -1) {
14453
+ before_char = 10;
14454
+ }
14455
+ }
14456
+
14457
+ if (c == '\'' || c == '"') {
14458
+ numdelims++;
14459
+ advance(subj); // limit to 1 delim for quotes
14460
+ } else {
14461
+ while (peek_char(subj) == c) {
14462
+ numdelims++;
14463
+ advance(subj);
14464
+ }
14465
+ }
14466
+
14467
+ len = cmark_utf8proc_iterate(subj->input.data + subj->pos,
14468
+ subj->input.len - subj->pos, &after_char);
14469
+ if (len == -1) {
14470
+ after_char = 10;
14471
+ }
14472
+ left_flanking = numdelims > 0 && !cmark_utf8proc_is_space(after_char) &&
14473
+ !(cmark_utf8proc_is_punctuation(after_char) &&
14474
+ !cmark_utf8proc_is_space(before_char) &&
14475
+ !cmark_utf8proc_is_punctuation(before_char));
14476
+ right_flanking = numdelims > 0 && !cmark_utf8proc_is_space(before_char) &&
14477
+ !(cmark_utf8proc_is_punctuation(before_char) &&
14478
+ !cmark_utf8proc_is_space(after_char) &&
14479
+ !cmark_utf8proc_is_punctuation(after_char));
14480
+ if (c == '_') {
14481
+ *can_open = left_flanking &&
14482
+ (!right_flanking || cmark_utf8proc_is_punctuation(before_char));
14483
+ *can_close = right_flanking &&
14484
+ (!left_flanking || cmark_utf8proc_is_punctuation(after_char));
14485
+ } else if (c == '\'' || c == '"') {
14486
+ *can_open = left_flanking && !right_flanking;
14487
+ *can_close = right_flanking;
14488
+ } else {
14489
+ *can_open = left_flanking;
14490
+ *can_close = right_flanking;
14491
+ }
14492
+ return numdelims;
14493
+}
14494
+
14495
+/*
14496
+static void print_delimiters(subject *subj)
14497
+{
14498
+ delimiter *delim;
14499
+ delim = subj->last_delim;
14500
+ while (delim != NULL) {
14501
+ printf("Item at stack pos %p: %d %d %d next(%p) prev(%p)\n",
14502
+ (void*)delim, delim->delim_char,
14503
+ delim->can_open, delim->can_close,
14504
+ (void*)delim->next, (void*)delim->previous);
14505
+ delim = delim->previous;
14506
+ }
14507
+}
14508
+*/
14509
+
14510
+static void remove_delimiter(subject *subj, delimiter *delim) {
14511
+ if (delim == NULL)
14512
+ return;
14513
+ if (delim->next == NULL) {
14514
+ // end of list:
14515
+ assert(delim == subj->last_delim);
14516
+ subj->last_delim = delim->previous;
14517
+ } else {
14518
+ delim->next->previous = delim->previous;
14519
+ }
14520
+ if (delim->previous != NULL) {
14521
+ delim->previous->next = delim->next;
14522
+ }
14523
+ subj->mem->free(delim);
14524
+}
14525
+
14526
+static void pop_bracket(subject *subj) {
14527
+ bracket *b;
14528
+ if (subj->last_bracket == NULL)
14529
+ return;
14530
+ b = subj->last_bracket;
14531
+ subj->last_bracket = subj->last_bracket->previous;
14532
+ subj->mem->free(b);
14533
+}
14534
+
14535
+static void push_delimiter(subject *subj, unsigned char c, bool can_open,
14536
+ bool can_close, cmark_node *inl_text) {
14537
+ delimiter *delim = (delimiter *)subj->mem->calloc(1, sizeof(delimiter));
14538
+ delim->delim_char = c;
14539
+ delim->can_open = can_open;
14540
+ delim->can_close = can_close;
14541
+ delim->inl_text = inl_text;
14542
+ delim->length = inl_text->as.literal.len;
14543
+ delim->previous = subj->last_delim;
14544
+ delim->next = NULL;
14545
+ if (delim->previous != NULL) {
14546
+ delim->previous->next = delim;
14547
+ }
14548
+ subj->last_delim = delim;
14549
+}
14550
+
14551
+static void push_bracket(subject *subj, bool image, cmark_node *inl_text) {
14552
+ bracket *b = (bracket *)subj->mem->calloc(1, sizeof(bracket));
14553
+ if (subj->last_bracket != NULL) {
14554
+ subj->last_bracket->bracket_after = true;
14555
+ }
14556
+ b->image = image;
14557
+ b->active = true;
14558
+ b->inl_text = inl_text;
14559
+ b->previous = subj->last_bracket;
14560
+ b->previous_delimiter = subj->last_delim;
14561
+ b->position = subj->pos;
14562
+ b->bracket_after = false;
14563
+ subj->last_bracket = b;
14564
+}
14565
+
14566
+// Assumes the subject has a c at the current position.
14567
+static cmark_node *handle_delim(subject *subj, unsigned char c, bool smart) {
14568
+ bufsize_t numdelims;
14569
+ cmark_node *inl_text;
14570
+ bool can_open, can_close;
14571
+ cmark_chunk contents;
14572
+
14573
+ numdelims = scan_delims(subj, c, &can_open, &can_close);
14574
+
14575
+ if (c == '\'' && smart) {
14576
+ contents = cmark_chunk_literal(RIGHTSINGLEQUOTE);
14577
+ } else if (c == '"' && smart) {
14578
+ contents =
14579
+ cmark_chunk_literal(can_close ? RIGHTDOUBLEQUOTE : LEFTDOUBLEQUOTE);
14580
+ } else {
14581
+ contents = cmark_chunk_dup(&subj->input, subj->pos - numdelims, numdelims);
14582
+ }
14583
+
14584
+ inl_text = make_str(subj->mem, contents);
14585
+
14586
+ if ((can_open || can_close) && (!(c == '\'' || c == '"') || smart)) {
14587
+ push_delimiter(subj, c, can_open, can_close, inl_text);
14588
+ }
14589
+
14590
+ return inl_text;
14591
+}
14592
+
14593
+// Assumes we have a hyphen at the current position.
14594
+static cmark_node *handle_hyphen(subject *subj, bool smart) {
14595
+ int startpos = subj->pos;
14596
+
14597
+ advance(subj);
14598
+
14599
+ if (!smart || peek_char(subj) != '-') {
14600
+ return make_str(subj->mem, cmark_chunk_literal("-"));
14601
+ }
14602
+
14603
+ while (smart && peek_char(subj) == '-') {
14604
+ advance(subj);
14605
+ }
14606
+
14607
+ int numhyphens = subj->pos - startpos;
14608
+ int en_count = 0;
14609
+ int em_count = 0;
14610
+ int i;
14611
+ cmark_strbuf buf = CMARK_BUF_INIT(subj->mem);
14612
+
14613
+ if (numhyphens % 3 == 0) { // if divisible by 3, use all em dashes
14614
+ em_count = numhyphens / 3;
14615
+ } else if (numhyphens % 2 == 0) { // if divisible by 2, use all en dashes
14616
+ en_count = numhyphens / 2;
14617
+ } else if (numhyphens % 3 == 2) { // use one en dash at end
14618
+ en_count = 1;
14619
+ em_count = (numhyphens - 2) / 3;
14620
+ } else { // use two en dashes at the end
14621
+ en_count = 2;
14622
+ em_count = (numhyphens - 4) / 3;
14623
+ }
14624
+
14625
+ for (i = em_count; i > 0; i--) {
14626
+ cmark_strbuf_puts(&buf, EMDASH);
14627
+ }
14628
+
14629
+ for (i = en_count; i > 0; i--) {
14630
+ cmark_strbuf_puts(&buf, ENDASH);
14631
+ }
14632
+
14633
+ return make_str(subj->mem, cmark_chunk_buf_detach(&buf));
14634
+}
14635
+
14636
+// Assumes we have a period at the current position.
14637
+static cmark_node *handle_period(subject *subj, bool smart) {
14638
+ advance(subj);
14639
+ if (smart && peek_char(subj) == '.') {
14640
+ advance(subj);
14641
+ if (peek_char(subj) == '.') {
14642
+ advance(subj);
14643
+ return make_str(subj->mem, cmark_chunk_literal(ELLIPSES));
14644
+ } else {
14645
+ return make_str(subj->mem, cmark_chunk_literal(".."));
14646
+ }
14647
+ } else {
14648
+ return make_str(subj->mem, cmark_chunk_literal("."));
14649
+ }
14650
+}
14651
+
14652
+static void process_emphasis(subject *subj, delimiter *stack_bottom) {
14653
+ delimiter *closer = subj->last_delim;
14654
+ delimiter *opener;
14655
+ delimiter *old_closer;
14656
+ bool opener_found;
14657
+ int openers_bottom_index;
14658
+ delimiter *openers_bottom[6] = {stack_bottom, stack_bottom, stack_bottom,
14659
+ stack_bottom, stack_bottom, stack_bottom};
14660
+
14661
+ // move back to first relevant delim.
14662
+ while (closer != NULL && closer->previous != stack_bottom) {
14663
+ closer = closer->previous;
14664
+ }
14665
+
14666
+ // now move forward, looking for closers, and handling each
14667
+ while (closer != NULL) {
14668
+ if (closer->can_close) {
14669
+ switch (closer->delim_char) {
14670
+ case '"':
14671
+ openers_bottom_index = 0;
14672
+ break;
14673
+ case '\'':
14674
+ openers_bottom_index = 1;
14675
+ break;
14676
+ case '_':
14677
+ openers_bottom_index = 2;
14678
+ break;
14679
+ case '*':
14680
+ openers_bottom_index = 3 + (closer->length % 3);
14681
+ break;
14682
+ default:
14683
+ assert(false);
14684
+ }
14685
+
14686
+ // Now look backwards for first matching opener:
14687
+ opener = closer->previous;
14688
+ opener_found = false;
14689
+ while (opener != NULL && opener != openers_bottom[openers_bottom_index]) {
14690
+ if (opener->can_open && opener->delim_char == closer->delim_char) {
14691
+ // interior closer of size 2 can't match opener of size 1
14692
+ // or of size 1 can't match 2
14693
+ if (!(closer->can_open || opener->can_close) ||
14694
+ ((opener->length + closer->length) % 3) != 0) {
14695
+ opener_found = true;
14696
+ break;
14697
+ }
14698
+ }
14699
+ opener = opener->previous;
14700
+ }
14701
+ old_closer = closer;
14702
+ if (closer->delim_char == '*' || closer->delim_char == '_') {
14703
+ if (opener_found) {
14704
+ closer = S_insert_emph(subj, opener, closer);
14705
+ } else {
14706
+ closer = closer->next;
14707
+ }
14708
+ } else if (closer->delim_char == '\'') {
14709
+ cmark_chunk_free(subj->mem, &closer->inl_text->as.literal);
14710
+ closer->inl_text->as.literal = cmark_chunk_literal(RIGHTSINGLEQUOTE);
14711
+ if (opener_found) {
14712
+ cmark_chunk_free(subj->mem, &opener->inl_text->as.literal);
14713
+ opener->inl_text->as.literal = cmark_chunk_literal(LEFTSINGLEQUOTE);
14714
+ }
14715
+ closer = closer->next;
14716
+ } else if (closer->delim_char == '"') {
14717
+ cmark_chunk_free(subj->mem, &closer->inl_text->as.literal);
14718
+ closer->inl_text->as.literal = cmark_chunk_literal(RIGHTDOUBLEQUOTE);
14719
+ if (opener_found) {
14720
+ cmark_chunk_free(subj->mem, &opener->inl_text->as.literal);
14721
+ opener->inl_text->as.literal = cmark_chunk_literal(LEFTDOUBLEQUOTE);
14722
+ }
14723
+ closer = closer->next;
14724
+ }
14725
+ if (!opener_found) {
14726
+ // set lower bound for future searches for openers
14727
+ openers_bottom[openers_bottom_index] = old_closer->previous;
14728
+ if (!old_closer->can_open) {
14729
+ // we can remove a closer that can't be an
14730
+ // opener, once we've seen there's no
14731
+ // matching opener:
14732
+ remove_delimiter(subj, old_closer);
14733
+ }
14734
+ }
14735
+ } else {
14736
+ closer = closer->next;
14737
+ }
14738
+ }
14739
+ // free all delimiters in list until stack_bottom:
14740
+ while (subj->last_delim != NULL && subj->last_delim != stack_bottom) {
14741
+ remove_delimiter(subj, subj->last_delim);
14742
+ }
14743
+}
14744
+
14745
+static delimiter *S_insert_emph(subject *subj, delimiter *opener,
14746
+ delimiter *closer) {
14747
+ delimiter *delim, *tmp_delim;
14748
+ bufsize_t use_delims;
14749
+ cmark_node *opener_inl = opener->inl_text;
14750
+ cmark_node *closer_inl = closer->inl_text;
14751
+ bufsize_t opener_num_chars = opener_inl->as.literal.len;
14752
+ bufsize_t closer_num_chars = closer_inl->as.literal.len;
14753
+ cmark_node *tmp, *tmpnext, *emph;
14754
+
14755
+ // calculate the actual number of characters used from this closer
14756
+ use_delims = (closer_num_chars >= 2 && opener_num_chars >=2) ? 2 : 1;
14757
+
14758
+ // remove used characters from associated inlines.
14759
+ opener_num_chars -= use_delims;
14760
+ closer_num_chars -= use_delims;
14761
+ opener_inl->as.literal.len = opener_num_chars;
14762
+ closer_inl->as.literal.len = closer_num_chars;
14763
+
14764
+ // free delimiters between opener and closer
14765
+ delim = closer->previous;
14766
+ while (delim != NULL && delim != opener) {
14767
+ tmp_delim = delim->previous;
14768
+ remove_delimiter(subj, delim);
14769
+ delim = tmp_delim;
14770
+ }
14771
+
14772
+ // create new emph or strong, and splice it in to our inlines
14773
+ // between the opener and closer
14774
+ emph = use_delims == 1 ? make_emph(subj->mem) : make_strong(subj->mem);
14775
+
14776
+ tmp = opener_inl->next;
14777
+ while (tmp && tmp != closer_inl) {
14778
+ tmpnext = tmp->next;
14779
+ cmark_node_append_child(emph, tmp);
14780
+ tmp = tmpnext;
14781
+ }
14782
+ cmark_node_insert_after(opener_inl, emph);
14783
+
14784
+ // if opener has 0 characters, remove it and its associated inline
14785
+ if (opener_num_chars == 0) {
14786
+ cmark_node_free(opener_inl);
14787
+ remove_delimiter(subj, opener);
14788
+ }
14789
+
14790
+ // if closer has 0 characters, remove it and its associated inline
14791
+ if (closer_num_chars == 0) {
14792
+ // remove empty closer inline
14793
+ cmark_node_free(closer_inl);
14794
+ // remove closer from list
14795
+ tmp_delim = closer->next;
14796
+ remove_delimiter(subj, closer);
14797
+ closer = tmp_delim;
14798
+ }
14799
+
14800
+ return closer;
14801
+}
14802
+
14803
+// Parse backslash-escape or just a backslash, returning an inline.
14804
+static cmark_node *handle_backslash(subject *subj) {
14805
+ advance(subj);
14806
+ unsigned char nextchar = peek_char(subj);
14807
+ if (cmark_ispunct(
14808
+ nextchar)) { // only ascii symbols and newline can be escaped
14809
+ advance(subj);
14810
+ return make_str(subj->mem, cmark_chunk_dup(&subj->input, subj->pos - 1, 1));
14811
+ } else if (!is_eof(subj) && skip_line_end(subj)) {
14812
+ return make_linebreak(subj->mem);
14813
+ } else {
14814
+ return make_str(subj->mem, cmark_chunk_literal("\\"));
14815
+ }
14816
+}
14817
+
14818
+// Parse an entity or a regular "&" string.
14819
+// Assumes the subject has an '&' character at the current position.
14820
+static cmark_node *handle_entity(subject *subj) {
14821
+ cmark_strbuf ent = CMARK_BUF_INIT(subj->mem);
14822
+ bufsize_t len;
14823
+
14824
+ advance(subj);
14825
+
14826
+ len = houdini_unescape_ent(&ent, subj->input.data + subj->pos,
14827
+ subj->input.len - subj->pos);
14828
+
14829
+ if (len == 0)
14830
+ return make_str(subj->mem, cmark_chunk_literal("&"));
14831
+
14832
+ subj->pos += len;
14833
+ return make_str(subj->mem, cmark_chunk_buf_detach(&ent));
14834
+}
14835
+
14836
+// Clean a URL: remove surrounding whitespace and surrounding <>,
14837
+// and remove \ that escape punctuation.
14838
+cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url) {
14839
+ cmark_strbuf buf = CMARK_BUF_INIT(mem);
14840
+
14841
+ cmark_chunk_trim(url);
14842
+
14843
+ if (url->len == 0) {
14844
+ cmark_chunk result = CMARK_CHUNK_EMPTY;
14845
+ return result;
14846
+ }
14847
+
14848
+ if (url->data[0] == '<' && url->data[url->len - 1] == '>') {
14849
+ houdini_unescape_html_f(&buf, url->data + 1, url->len - 2);
14850
+ } else {
14851
+ houdini_unescape_html_f(&buf, url->data, url->len);
14852
+ }
14853
+
14854
+ cmark_strbuf_unescape(&buf);
14855
+ return cmark_chunk_buf_detach(&buf);
14856
+}
14857
+
14858
+cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title) {
14859
+ cmark_strbuf buf = CMARK_BUF_INIT(mem);
14860
+ unsigned char first, last;
14861
+
14862
+ if (title->len == 0) {
14863
+ cmark_chunk result = CMARK_CHUNK_EMPTY;
14864
+ return result;
14865
+ }
14866
+
14867
+ first = title->data[0];
14868
+ last = title->data[title->len - 1];
14869
+
14870
+ // remove surrounding quotes if any:
14871
+ if ((first == '\'' && last == '\'') || (first == '(' && last == ')') ||
14872
+ (first == '"' && last == '"')) {
14873
+ houdini_unescape_html_f(&buf, title->data + 1, title->len - 2);
14874
+ } else {
14875
+ houdini_unescape_html_f(&buf, title->data, title->len);
14876
+ }
14877
+
14878
+ cmark_strbuf_unescape(&buf);
14879
+ return cmark_chunk_buf_detach(&buf);
14880
+}
14881
+
14882
+// Parse an autolink or HTML tag.
14883
+// Assumes the subject has a '<' character at the current position.
14884
+static cmark_node *handle_pointy_brace(subject *subj) {
14885
+ bufsize_t matchlen = 0;
14886
+ cmark_chunk contents;
14887
+
14888
+ advance(subj); // advance past first <
14889
+
14890
+ // first try to match a URL autolink
14891
+ matchlen = scan_autolink_uri(&subj->input, subj->pos);
14892
+ if (matchlen > 0) {
14893
+ contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1);
14894
+ subj->pos += matchlen;
14895
+
14896
+ return make_autolink(subj->mem, contents, 0);
14897
+ }
14898
+
14899
+ // next try to match an email autolink
14900
+ matchlen = scan_autolink_email(&subj->input, subj->pos);
14901
+ if (matchlen > 0) {
14902
+ contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1);
14903
+ subj->pos += matchlen;
14904
+
14905
+ return make_autolink(subj->mem, contents, 1);
14906
+ }
14907
+
14908
+ // finally, try to match an html tag
14909
+ matchlen = scan_html_tag(&subj->input, subj->pos);
14910
+ if (matchlen > 0) {
14911
+ contents = cmark_chunk_dup(&subj->input, subj->pos - 1, matchlen + 1);
14912
+ subj->pos += matchlen;
14913
+ return make_raw_html(subj->mem, contents);
14914
+ }
14915
+
14916
+ // if nothing matches, just return the opening <:
14917
+ return make_str(subj->mem, cmark_chunk_literal("<"));
14918
+}
14919
+
14920
+// Parse a link label. Returns 1 if successful.
14921
+// Note: unescaped brackets are not allowed in labels.
14922
+// The label begins with `[` and ends with the first `]` character
14923
+// encountered. Backticks in labels do not start code spans.
14924
+static int link_label(subject *subj, cmark_chunk *raw_label) {
14925
+ bufsize_t startpos = subj->pos;
14926
+ int length = 0;
14927
+ unsigned char c;
14928
+
14929
+ // advance past [
14930
+ if (peek_char(subj) == '[') {
14931
+ advance(subj);
14932
+ } else {
14933
+ return 0;
14934
+ }
14935
+
14936
+ while ((c = peek_char(subj)) && c != '[' && c != ']') {
14937
+ if (c == '\\') {
14938
+ advance(subj);
14939
+ length++;
14940
+ if (cmark_ispunct(peek_char(subj))) {
14941
+ advance(subj);
14942
+ length++;
14943
+ }
14944
+ } else {
14945
+ advance(subj);
14946
+ length++;
14947
+ }
14948
+ if (length > MAX_LINK_LABEL_LENGTH) {
14949
+ goto noMatch;
14950
+ }
14951
+ }
14952
+
14953
+ if (c == ']') { // match found
14954
+ *raw_label =
14955
+ cmark_chunk_dup(&subj->input, startpos + 1, subj->pos - (startpos + 1));
14956
+ cmark_chunk_trim(raw_label);
14957
+ advance(subj); // advance past ]
14958
+ return 1;
14959
+ }
14960
+
14961
+noMatch:
14962
+ subj->pos = startpos; // rewind
14963
+ return 0;
14964
+}
14965
+static bufsize_t manual_scan_link_url(cmark_chunk *input, bufsize_t offset) {
14966
+ bufsize_t i = offset;
14967
+ size_t nb_p = 0;
14968
+
14969
+ if (i < input->len && input->data[i] == '<') {
14970
+ ++i;
14971
+ while (i < input->len) {
14972
+ if (input->data[i] == '>') {
14973
+ ++i;
14974
+ break;
14975
+ } else if (input->data[i] == '\\')
14976
+ i += 2;
14977
+ else if (cmark_isspace(input->data[i]))
14978
+ return -1;
14979
+ else
14980
+ ++i;
14981
+ }
14982
+ } else {
14983
+ while (i < input->len) {
14984
+ if (input->data[i] == '\\')
14985
+ i += 2;
14986
+ else if (input->data[i] == '(') {
14987
+ ++nb_p;
14988
+ ++i;
14989
+ } else if (input->data[i] == ')') {
14990
+ if (nb_p == 0)
14991
+ break;
14992
+ --nb_p;
14993
+ ++i;
14994
+ } else if (cmark_isspace(input->data[i]))
14995
+ break;
14996
+ else
14997
+ ++i;
14998
+ }
14999
+ }
15000
+
15001
+ if (i >= input->len)
15002
+ return -1;
15003
+ return i - offset;
15004
+}
15005
+// Return a link, an image, or a literal close bracket.
15006
+static cmark_node *handle_close_bracket(subject *subj) {
15007
+ bufsize_t initial_pos, after_link_text_pos;
15008
+ bufsize_t starturl, endurl, starttitle, endtitle, endall;
15009
+ bufsize_t n;
15010
+ bufsize_t sps;
15011
+ cmark_reference *ref = NULL;
15012
+ cmark_chunk url_chunk, title_chunk;
15013
+ cmark_chunk url, title;
15014
+ bracket *opener;
15015
+ cmark_node *inl;
15016
+ cmark_chunk raw_label;
15017
+ int found_label;
15018
+ cmark_node *tmp, *tmpnext;
15019
+ bool is_image;
15020
+
15021
+ advance(subj); // advance past ]
15022
+ initial_pos = subj->pos;
15023
+
15024
+ // get last [ or ![
15025
+ opener = subj->last_bracket;
15026
+
15027
+ if (opener == NULL) {
15028
+ return make_str(subj->mem, cmark_chunk_literal("]"));
15029
+ }
15030
+
15031
+ if (!opener->active) {
15032
+ // take delimiter off stack
15033
+ pop_bracket(subj);
15034
+ return make_str(subj->mem, cmark_chunk_literal("]"));
15035
+ }
15036
+
15037
+ // If we got here, we matched a potential link/image text.
15038
+ // Now we check to see if it's a link/image.
15039
+ is_image = opener->image;
15040
+
15041
+ after_link_text_pos = subj->pos;
15042
+
15043
+ // First, look for an inline link.
15044
+ if (peek_char(subj) == '(' &&
15045
+ ((sps = scan_spacechars(&subj->input, subj->pos + 1)) > -1) &&
15046
+ ((n = manual_scan_link_url(&subj->input, subj->pos + 1 + sps)) > -1)) {
15047
+
15048
+ // try to parse an explicit link:
15049
+ starturl = subj->pos + 1 + sps; // after (
15050
+ endurl = starturl + n;
15051
+ starttitle = endurl + scan_spacechars(&subj->input, endurl);
15052
+
15053
+ // ensure there are spaces btw url and title
15054
+ endtitle = (starttitle == endurl)
15055
+ ? starttitle
15056
+ : starttitle + scan_link_title(&subj->input, starttitle);
15057
+
15058
+ endall = endtitle + scan_spacechars(&subj->input, endtitle);
15059
+
15060
+ if (peek_at(subj, endall) == ')') {
15061
+ subj->pos = endall + 1;
15062
+
15063
+ url_chunk = cmark_chunk_dup(&subj->input, starturl, endurl - starturl);
15064
+ title_chunk =
15065
+ cmark_chunk_dup(&subj->input, starttitle, endtitle - starttitle);
15066
+ url = cmark_clean_url(subj->mem, &url_chunk);
15067
+ title = cmark_clean_title(subj->mem, &title_chunk);
15068
+ cmark_chunk_free(subj->mem, &url_chunk);
15069
+ cmark_chunk_free(subj->mem, &title_chunk);
15070
+ goto match;
15071
+
15072
+ } else {
15073
+ // it could still be a shortcut reference link
15074
+ subj->pos = after_link_text_pos;
15075
+ }
15076
+ }
15077
+
15078
+ // Next, look for a following [link label] that matches in refmap.
15079
+ // skip spaces
15080
+ raw_label = cmark_chunk_literal("");
15081
+ found_label = link_label(subj, &raw_label);
15082
+ if (!found_label) {
15083
+ // If we have a shortcut reference link, back up
15084
+ // to before the spacse we skipped.
15085
+ subj->pos = initial_pos;
15086
+ }
15087
+
15088
+ if ((!found_label || raw_label.len == 0) && !opener->bracket_after) {
15089
+ cmark_chunk_free(subj->mem, &raw_label);
15090
+ raw_label = cmark_chunk_dup(&subj->input, opener->position,
15091
+ initial_pos - opener->position - 1);
15092
+ found_label = true;
15093
+ }
15094
+
15095
+ if (found_label) {
15096
+ ref = cmark_reference_lookup(subj->refmap, &raw_label);
15097
+ cmark_chunk_free(subj->mem, &raw_label);
15098
+ }
15099
+
15100
+ if (ref != NULL) { // found
15101
+ url = chunk_clone(subj->mem, &ref->url);
15102
+ title = chunk_clone(subj->mem, &ref->title);
15103
+ goto match;
15104
+ } else {
15105
+ goto noMatch;
15106
+ }
15107
+
15108
+noMatch:
15109
+ // If we fall through to here, it means we didn't match a link:
15110
+ pop_bracket(subj); // remove this opener from delimiter list
15111
+ subj->pos = initial_pos;
15112
+ return make_str(subj->mem, cmark_chunk_literal("]"));
15113
+
15114
+match:
15115
+ inl = make_simple(subj->mem, is_image ? CMARK_NODE_IMAGE : CMARK_NODE_LINK);
15116
+ inl->as.link.url = url;
15117
+ inl->as.link.title = title;
15118
+ cmark_node_insert_before(opener->inl_text, inl);
15119
+ // Add link text:
15120
+ tmp = opener->inl_text->next;
15121
+ while (tmp) {
15122
+ tmpnext = tmp->next;
15123
+ cmark_node_append_child(inl, tmp);
15124
+ tmp = tmpnext;
15125
+ }
15126
+
15127
+ // Free the bracket [:
15128
+ cmark_node_free(opener->inl_text);
15129
+
15130
+ process_emphasis(subj, opener->previous_delimiter);
15131
+ pop_bracket(subj);
15132
+
15133
+ // Now, if we have a link, we also want to deactivate earlier link
15134
+ // delimiters. (This code can be removed if we decide to allow links
15135
+ // inside links.)
15136
+ if (!is_image) {
15137
+ opener = subj->last_bracket;
15138
+ while (opener != NULL) {
15139
+ if (!opener->image) {
15140
+ if (!opener->active) {
15141
+ break;
15142
+ } else {
15143
+ opener->active = false;
15144
+ }
15145
+ }
15146
+ opener = opener->previous;
15147
+ }
15148
+ }
15149
+
15150
+ return NULL;
15151
+}
15152
+
15153
+// Parse a hard or soft linebreak, returning an inline.
15154
+// Assumes the subject has a cr or newline at the current position.
15155
+static cmark_node *handle_newline(subject *subj) {
15156
+ bufsize_t nlpos = subj->pos;
15157
+ // skip over cr, crlf, or lf:
15158
+ if (peek_at(subj, subj->pos) == '\r') {
15159
+ advance(subj);
15160
+ }
15161
+ if (peek_at(subj, subj->pos) == '\n') {
15162
+ advance(subj);
15163
+ }
15164
+ // skip spaces at beginning of line
15165
+ skip_spaces(subj);
15166
+ if (nlpos > 1 && peek_at(subj, nlpos - 1) == ' ' &&
15167
+ peek_at(subj, nlpos - 2) == ' ') {
15168
+ return make_linebreak(subj->mem);
15169
+ } else {
15170
+ return make_softbreak(subj->mem);
15171
+ }
15172
+}
15173
+
15174
+static bufsize_t subject_find_special_char(subject *subj, int options) {
15175
+ // "\r\n\\`&_*[]<!"
15176
+ static const int8_t SPECIAL_CHARS[256] = {
15177
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15178
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0,
15179
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15180
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
15181
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15182
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15183
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15184
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15185
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15186
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15187
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
15188
+
15189
+ // " ' . -
15190
+ static const char SMART_PUNCT_CHARS[] = {
15191
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15192
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0,
15193
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15194
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15195
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15196
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15197
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15198
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15199
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15200
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15201
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15202
+ };
15203
+
15204
+ bufsize_t n = subj->pos + 1;
15205
+
15206
+ while (n < subj->input.len) {
15207
+ if (SPECIAL_CHARS[subj->input.data[n]])
15208
+ return n;
15209
+ if (options & CMARK_OPT_SMART && SMART_PUNCT_CHARS[subj->input.data[n]])
15210
+ return n;
15211
+ n++;
15212
+ }
15213
+
15214
+ return subj->input.len;
15215
+}
15216
+
15217
+// Parse an inline, advancing subject, and add it as a child of parent.
15218
+// Return 0 if no inline can be parsed, 1 otherwise.
15219
+static int parse_inline(subject *subj, cmark_node *parent, int options) {
15220
+ cmark_node *new_inl = NULL;
15221
+ cmark_chunk contents;
15222
+ unsigned char c;
15223
+ bufsize_t endpos;
15224
+ c = peek_char(subj);
15225
+ if (c == 0) {
15226
+ return 0;
15227
+ }
15228
+ switch (c) {
15229
+ case '\r':
15230
+ case '\n':
15231
+ new_inl = handle_newline(subj);
15232
+ break;
15233
+ case '`':
15234
+ new_inl = handle_backticks(subj);
15235
+ break;
15236
+ case '\\':
15237
+ new_inl = handle_backslash(subj);
15238
+ break;
15239
+ case '&':
15240
+ new_inl = handle_entity(subj);
15241
+ break;
15242
+ case '<':
15243
+ new_inl = handle_pointy_brace(subj);
15244
+ break;
15245
+ case '*':
15246
+ case '_':
15247
+ case '\'':
15248
+ case '"':
15249
+ new_inl = handle_delim(subj, c, (options & CMARK_OPT_SMART) != 0);
15250
+ break;
15251
+ case '-':
15252
+ new_inl = handle_hyphen(subj, (options & CMARK_OPT_SMART) != 0);
15253
+ break;
15254
+ case '.':
15255
+ new_inl = handle_period(subj, (options & CMARK_OPT_SMART) != 0);
15256
+ break;
15257
+ case '[':
15258
+ advance(subj);
15259
+ new_inl = make_str(subj->mem, cmark_chunk_literal("["));
15260
+ push_bracket(subj, false, new_inl);
15261
+ break;
15262
+ case ']':
15263
+ new_inl = handle_close_bracket(subj);
15264
+ break;
15265
+ case '!':
15266
+ advance(subj);
15267
+ if (peek_char(subj) == '[') {
15268
+ advance(subj);
15269
+ new_inl = make_str(subj->mem, cmark_chunk_literal("!["));
15270
+ push_bracket(subj, true, new_inl);
15271
+ } else {
15272
+ new_inl = make_str(subj->mem, cmark_chunk_literal("!"));
15273
+ }
15274
+ break;
15275
+ default:
15276
+ endpos = subject_find_special_char(subj, options);
15277
+ contents = cmark_chunk_dup(&subj->input, subj->pos, endpos - subj->pos);
15278
+ subj->pos = endpos;
15279
+
15280
+ // if we're at a newline, strip trailing spaces.
15281
+ if (S_is_line_end_char(peek_char(subj))) {
15282
+ cmark_chunk_rtrim(&contents);
15283
+ }
15284
+
15285
+ new_inl = make_str(subj->mem, contents);
15286
+ }
15287
+ if (new_inl != NULL) {
15288
+ cmark_node_append_child(parent, new_inl);
15289
+ }
15290
+
15291
+ return 1;
15292
+}
15293
+
15294
+// Parse inlines from parent's string_content, adding as children of parent.
15295
+extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent,
15296
+ cmark_reference_map *refmap, int options) {
15297
+ subject subj;
15298
+ subject_from_buf(mem, &subj, &parent->content, refmap);
15299
+ cmark_chunk_rtrim(&subj.input);
15300
+
15301
+ while (!is_eof(&subj) && parse_inline(&subj, parent, options))
15302
+ ;
15303
+
15304
+ process_emphasis(&subj, NULL);
15305
+ // free bracket and delim stack
15306
+ while (subj.last_delim) {
15307
+ pop_bracket(&subj);
15308
+ }
15309
+ while (subj.last_bracket) {
15310
+ pop_bracket(&subj);
15311
+ }
15312
+}
15313
+
15314
+// Parse zero or more space characters, including at most one newline.
15315
+static void spnl(subject *subj) {
15316
+ skip_spaces(subj);
15317
+ if (skip_line_end(subj)) {
15318
+ skip_spaces(subj);
15319
+ }
15320
+}
15321
+
15322
+// Parse reference. Assumes string begins with '[' character.
15323
+// Modify refmap if a reference is encountered.
15324
+// Return 0 if no reference found, otherwise position of subject
15325
+// after reference is parsed.
15326
+bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input,
15327
+ cmark_reference_map *refmap) {
15328
+ subject subj;
15329
+
15330
+ cmark_chunk lab;
15331
+ cmark_chunk url;
15332
+ cmark_chunk title;
15333
+
15334
+ bufsize_t matchlen = 0;
15335
+ bufsize_t beforetitle;
15336
+
15337
+ subject_from_buf(mem, &subj, input, NULL);
15338
+
15339
+ // parse label:
15340
+ if (!link_label(&subj, &lab) || lab.len == 0)
15341
+ return 0;
15342
+
15343
+ // colon:
15344
+ if (peek_char(&subj) == ':') {
15345
+ advance(&subj);
15346
+ } else {
15347
+ return 0;
15348
+ }
15349
+
15350
+ // parse link url:
15351
+ spnl(&subj);
15352
+ matchlen = manual_scan_link_url(&subj.input, subj.pos);
15353
+ if (matchlen > 0) {
15354
+ url = cmark_chunk_dup(&subj.input, subj.pos, matchlen);
15355
+ subj.pos += matchlen;
15356
+ } else {
15357
+ return 0;
15358
+ }
15359
+
15360
+ // parse optional link_title
15361
+ beforetitle = subj.pos;
15362
+ spnl(&subj);
15363
+ matchlen = scan_link_title(&subj.input, subj.pos);
15364
+ if (matchlen) {
15365
+ title = cmark_chunk_dup(&subj.input, subj.pos, matchlen);
15366
+ subj.pos += matchlen;
15367
+ } else {
15368
+ subj.pos = beforetitle;
15369
+ title = cmark_chunk_literal("");
15370
+ }
15371
+
15372
+ // parse final spaces and newline:
15373
+ skip_spaces(&subj);
15374
+ if (!skip_line_end(&subj)) {
15375
+ if (matchlen) { // try rewinding before title
15376
+ subj.pos = beforetitle;
15377
+ skip_spaces(&subj);
15378
+ if (!skip_line_end(&subj)) {
15379
+ return 0;
15380
+ }
15381
+ } else {
15382
+ return 0;
15383
+ }
15384
+ }
15385
+ // insert reference into refmap
15386
+ cmark_reference_create(refmap, &lab, &url, &title);
15387
+ return subj.pos;
15388
+}
15389
+
15390
+
15391
+static const int8_t utf8proc_utf8class[256] = {
15392
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
15393
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
15394
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
15395
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
15396
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
15397
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15398
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15399
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15400
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
15401
+ 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
15402
+ 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0};
15403
+
15404
+static void encode_unknown(cmark_strbuf *buf) {
15405
+ static const uint8_t repl[] = {239, 191, 189};
15406
+ cmark_strbuf_put(buf, repl, 3);
15407
+}
15408
+
15409
+static int utf8proc_charlen(const uint8_t *str, bufsize_t str_len) {
15410
+ int length, i;
15411
+
15412
+ if (!str_len)
15413
+ return 0;
15414
+
15415
+ length = utf8proc_utf8class[str[0]];
15416
+
15417
+ if (!length)
15418
+ return -1;
15419
+
15420
+ if (str_len >= 0 && (bufsize_t)length > str_len)
15421
+ return -str_len;
15422
+
15423
+ for (i = 1; i < length; i++) {
15424
+ if ((str[i] & 0xC0) != 0x80)
15425
+ return -i;
15426
+ }
15427
+
15428
+ return length;
15429
+}
15430
+
15431
+// Validate a single UTF-8 character according to RFC 3629.
15432
+static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) {
15433
+ int length = utf8proc_utf8class[str[0]];
15434
+
15435
+ if (!length)
15436
+ return -1;
15437
+
15438
+ if ((bufsize_t)length > str_len)
15439
+ return -str_len;
15440
+
15441
+ switch (length) {
15442
+ case 2:
15443
+ if ((str[1] & 0xC0) != 0x80)
15444
+ return -1;
15445
+ if (str[0] < 0xC2) {
15446
+ // Overlong
15447
+ return -length;
15448
+ }
15449
+ break;
15450
+
15451
+ case 3:
15452
+ if ((str[1] & 0xC0) != 0x80)
15453
+ return -1;
15454
+ if ((str[2] & 0xC0) != 0x80)
15455
+ return -2;
15456
+ if (str[0] == 0xE0) {
15457
+ if (str[1] < 0xA0) {
15458
+ // Overlong
15459
+ return -length;
15460
+ }
15461
+ } else if (str[0] == 0xED) {
15462
+ if (str[1] >= 0xA0) {
15463
+ // Surrogate
15464
+ return -length;
15465
+ }
15466
+ }
15467
+ break;
15468
+
15469
+ case 4:
15470
+ if ((str[1] & 0xC0) != 0x80)
15471
+ return -1;
15472
+ if ((str[2] & 0xC0) != 0x80)
15473
+ return -2;
15474
+ if ((str[3] & 0xC0) != 0x80)
15475
+ return -3;
15476
+ if (str[0] == 0xF0) {
15477
+ if (str[1] < 0x90) {
15478
+ // Overlong
15479
+ return -length;
15480
+ }
15481
+ } else if (str[0] >= 0xF4) {
15482
+ if (str[0] > 0xF4 || str[1] >= 0x90) {
15483
+ // Above 0x10FFFF
15484
+ return -length;
15485
+ }
15486
+ }
15487
+ break;
15488
+ }
15489
+
15490
+ return length;
15491
+}
15492
+
15493
+void cmark_utf8proc_check(cmark_strbuf *ob, const uint8_t *line,
15494
+ bufsize_t size) {
15495
+ bufsize_t i = 0;
15496
+
15497
+ while (i < size) {
15498
+ bufsize_t org = i;
15499
+ int charlen = 0;
15500
+
15501
+ while (i < size) {
15502
+ if (line[i] < 0x80 && line[i] != 0) {
15503
+ i++;
15504
+ } else if (line[i] >= 0x80) {
15505
+ charlen = utf8proc_valid(line + i, size - i);
15506
+ if (charlen < 0) {
15507
+ charlen = -charlen;
15508
+ break;
15509
+ }
15510
+ i += charlen;
15511
+ } else if (line[i] == 0) {
15512
+ // ASCII NUL is technically valid but rejected
15513
+ // for security reasons.
15514
+ charlen = 1;
15515
+ break;
15516
+ }
15517
+ }
15518
+
15519
+ if (i > org) {
15520
+ cmark_strbuf_put(ob, line + org, i - org);
15521
+ }
15522
+
15523
+ if (i >= size) {
15524
+ break;
15525
+ } else {
15526
+ // Invalid UTF-8
15527
+ encode_unknown(ob);
15528
+ i += charlen;
15529
+ }
15530
+ }
15531
+}
15532
+
15533
+int cmark_utf8proc_iterate(const uint8_t *str, bufsize_t str_len,
15534
+ int32_t *dst) {
15535
+ int length;
15536
+ int32_t uc = -1;
15537
+
15538
+ *dst = -1;
15539
+ length = utf8proc_charlen(str, str_len);
15540
+ if (length < 0)
15541
+ return -1;
15542
+
15543
+ switch (length) {
15544
+ case 1:
15545
+ uc = str[0];
15546
+ break;
15547
+ case 2:
15548
+ uc = ((str[0] & 0x1F) << 6) + (str[1] & 0x3F);
15549
+ if (uc < 0x80)
15550
+ uc = -1;
15551
+ break;
15552
+ case 3:
15553
+ uc = ((str[0] & 0x0F) << 12) + ((str[1] & 0x3F) << 6) + (str[2] & 0x3F);
15554
+ if (uc < 0x800 || (uc >= 0xD800 && uc < 0xE000))
15555
+ uc = -1;
15556
+ break;
15557
+ case 4:
15558
+ uc = ((str[0] & 0x07) << 18) + ((str[1] & 0x3F) << 12) +
15559
+ ((str[2] & 0x3F) << 6) + (str[3] & 0x3F);
15560
+ if (uc < 0x10000 || uc >= 0x110000)
15561
+ uc = -1;
15562
+ break;
15563
+ }
15564
+
15565
+ if (uc < 0)
15566
+ return -1;
15567
+
15568
+ *dst = uc;
15569
+ return length;
15570
+}
15571
+
15572
+void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf) {
15573
+ uint8_t dst[4];
15574
+ bufsize_t len = 0;
15575
+
15576
+ assert(uc >= 0);
15577
+
15578
+ if (uc < 0x80) {
15579
+ dst[0] = (uint8_t)(uc);
15580
+ len = 1;
15581
+ } else if (uc < 0x800) {
15582
+ dst[0] = (uint8_t)(0xC0 + (uc >> 6));
15583
+ dst[1] = 0x80 + (uc & 0x3F);
15584
+ len = 2;
15585
+ } else if (uc == 0xFFFF) {
15586
+ dst[0] = 0xFF;
15587
+ len = 1;
15588
+ } else if (uc == 0xFFFE) {
15589
+ dst[0] = 0xFE;
15590
+ len = 1;
15591
+ } else if (uc < 0x10000) {
15592
+ dst[0] = (uint8_t)(0xE0 + (uc >> 12));
15593
+ dst[1] = 0x80 + ((uc >> 6) & 0x3F);
15594
+ dst[2] = 0x80 + (uc & 0x3F);
15595
+ len = 3;
15596
+ } else if (uc < 0x110000) {
15597
+ dst[0] = (uint8_t)(0xF0 + (uc >> 18));
15598
+ dst[1] = 0x80 + ((uc >> 12) & 0x3F);
15599
+ dst[2] = 0x80 + ((uc >> 6) & 0x3F);
15600
+ dst[3] = 0x80 + (uc & 0x3F);
15601
+ len = 4;
15602
+ } else {
15603
+ encode_unknown(buf);
15604
+ return;
15605
+ }
15606
+
15607
+ cmark_strbuf_put(buf, dst, len);
15608
+}
15609
+
15610
+void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str,
15611
+ bufsize_t len) {
15612
+ int32_t c;
15613
+
15614
+#define bufpush(x) cmark_utf8proc_encode_char(x, dest)
15615
+
15616
+ while (len > 0) {
15617
+ bufsize_t char_len = cmark_utf8proc_iterate(str, len, &c);
15618
+
15619
+ if (char_len >= 0) {
15620
+#include "case_fold_switch.inc"
15621
+ } else {
15622
+ encode_unknown(dest);
15623
+ char_len = -char_len;
15624
+ }
15625
+
15626
+ str += char_len;
15627
+ len -= char_len;
15628
+ }
15629
+}
15630
+
15631
+// matches anything in the Zs class, plus LF, CR, TAB, FF.
15632
+int cmark_utf8proc_is_space(int32_t uc) {
15633
+ return (uc == 9 || uc == 10 || uc == 12 || uc == 13 || uc == 32 ||
15634
+ uc == 160 || uc == 5760 || (uc >= 8192 && uc <= 8202) || uc == 8239 ||
15635
+ uc == 8287 || uc == 12288);
15636
+}
15637
+
15638
+// matches anything in the P[cdefios] classes.
15639
+int cmark_utf8proc_is_punctuation(int32_t uc) {
15640
+ return (
15641
+ (uc < 128 && cmark_ispunct((char)uc)) || uc == 161 || uc == 167 ||
15642
+ uc == 171 || uc == 182 || uc == 183 || uc == 187 || uc == 191 ||
15643
+ uc == 894 || uc == 903 || (uc >= 1370 && uc <= 1375) || uc == 1417 ||
15644
+ uc == 1418 || uc == 1470 || uc == 1472 || uc == 1475 || uc == 1478 ||
15645
+ uc == 1523 || uc == 1524 || uc == 1545 || uc == 1546 || uc == 1548 ||
15646
+ uc == 1549 || uc == 1563 || uc == 1566 || uc == 1567 ||
15647
+ (uc >= 1642 && uc <= 1645) || uc == 1748 || (uc >= 1792 && uc <= 1805) ||
15648
+ (uc >= 2039 && uc <= 2041) || (uc >= 2096 && uc <= 2110) || uc == 2142 ||
15649
+ uc == 2404 || uc == 2405 || uc == 2416 || uc == 2800 || uc == 3572 ||
15650
+ uc == 3663 || uc == 3674 || uc == 3675 || (uc >= 3844 && uc <= 3858) ||
15651
+ uc == 3860 || (uc >= 3898 && uc <= 3901) || uc == 3973 ||
15652
+ (uc >= 4048 && uc <= 4052) || uc == 4057 || uc == 4058 ||
15653
+ (uc >= 4170 && uc <= 4175) || uc == 4347 || (uc >= 4960 && uc <= 4968) ||
15654
+ uc == 5120 || uc == 5741 || uc == 5742 || uc == 5787 || uc == 5788 ||
15655
+ (uc >= 5867 && uc <= 5869) || uc == 5941 || uc == 5942 ||
15656
+ (uc >= 6100 && uc <= 6102) || (uc >= 6104 && uc <= 6106) ||
15657
+ (uc >= 6144 && uc <= 6154) || uc == 6468 || uc == 6469 || uc == 6686 ||
15658
+ uc == 6687 || (uc >= 6816 && uc <= 6822) || (uc >= 6824 && uc <= 6829) ||
15659
+ (uc >= 7002 && uc <= 7008) || (uc >= 7164 && uc <= 7167) ||
15660
+ (uc >= 7227 && uc <= 7231) || uc == 7294 || uc == 7295 ||
15661
+ (uc >= 7360 && uc <= 7367) || uc == 7379 || (uc >= 8208 && uc <= 8231) ||
15662
+ (uc >= 8240 && uc <= 8259) || (uc >= 8261 && uc <= 8273) ||
15663
+ (uc >= 8275 && uc <= 8286) || uc == 8317 || uc == 8318 || uc == 8333 ||
15664
+ uc == 8334 || (uc >= 8968 && uc <= 8971) || uc == 9001 || uc == 9002 ||
15665
+ (uc >= 10088 && uc <= 10101) || uc == 10181 || uc == 10182 ||
15666
+ (uc >= 10214 && uc <= 10223) || (uc >= 10627 && uc <= 10648) ||
15667
+ (uc >= 10712 && uc <= 10715) || uc == 10748 || uc == 10749 ||
15668
+ (uc >= 11513 && uc <= 11516) || uc == 11518 || uc == 11519 ||
15669
+ uc == 11632 || (uc >= 11776 && uc <= 11822) ||
15670
+ (uc >= 11824 && uc <= 11842) || (uc >= 12289 && uc <= 12291) ||
15671
+ (uc >= 12296 && uc <= 12305) || (uc >= 12308 && uc <= 12319) ||
15672
+ uc == 12336 || uc == 12349 || uc == 12448 || uc == 12539 || uc == 42238 ||
15673
+ uc == 42239 || (uc >= 42509 && uc <= 42511) || uc == 42611 ||
15674
+ uc == 42622 || (uc >= 42738 && uc <= 42743) ||
15675
+ (uc >= 43124 && uc <= 43127) || uc == 43214 || uc == 43215 ||
15676
+ (uc >= 43256 && uc <= 43258) || uc == 43310 || uc == 43311 ||
15677
+ uc == 43359 || (uc >= 43457 && uc <= 43469) || uc == 43486 ||
15678
+ uc == 43487 || (uc >= 43612 && uc <= 43615) || uc == 43742 ||
15679
+ uc == 43743 || uc == 43760 || uc == 43761 || uc == 44011 || uc == 64830 ||
15680
+ uc == 64831 || (uc >= 65040 && uc <= 65049) ||
15681
+ (uc >= 65072 && uc <= 65106) || (uc >= 65108 && uc <= 65121) ||
15682
+ uc == 65123 || uc == 65128 || uc == 65130 || uc == 65131 ||
15683
+ (uc >= 65281 && uc <= 65283) || (uc >= 65285 && uc <= 65290) ||
15684
+ (uc >= 65292 && uc <= 65295) || uc == 65306 || uc == 65307 ||
15685
+ uc == 65311 || uc == 65312 || (uc >= 65339 && uc <= 65341) ||
15686
+ uc == 65343 || uc == 65371 || uc == 65373 ||
15687
+ (uc >= 65375 && uc <= 65381) || (uc >= 65792 && uc <= 65794) ||
15688
+ uc == 66463 || uc == 66512 || uc == 66927 || uc == 67671 || uc == 67871 ||
15689
+ uc == 67903 || (uc >= 68176 && uc <= 68184) || uc == 68223 ||
15690
+ (uc >= 68336 && uc <= 68342) || (uc >= 68409 && uc <= 68415) ||
15691
+ (uc >= 68505 && uc <= 68508) || (uc >= 69703 && uc <= 69709) ||
15692
+ uc == 69819 || uc == 69820 || (uc >= 69822 && uc <= 69825) ||
15693
+ (uc >= 69952 && uc <= 69955) || uc == 70004 || uc == 70005 ||
15694
+ (uc >= 70085 && uc <= 70088) || uc == 70093 ||
15695
+ (uc >= 70200 && uc <= 70205) || uc == 70854 ||
15696
+ (uc >= 71105 && uc <= 71113) || (uc >= 71233 && uc <= 71235) ||
15697
+ (uc >= 74864 && uc <= 74868) || uc == 92782 || uc == 92783 ||
15698
+ uc == 92917 || (uc >= 92983 && uc <= 92987) || uc == 92996 ||
15699
+ uc == 113823);
15700
+}
15701
+
15702
+static unsigned int refhash(const unsigned char *link_ref) {
15703
+ unsigned int hash = 0;
15704
+
15705
+ while (*link_ref)
15706
+ hash = (*link_ref++) + (hash << 6) + (hash << 16) - hash;
15707
+
15708
+ return hash;
15709
+}
15710
+
15711
+static void reference_free(cmark_reference_map *map, cmark_reference *ref) {
15712
+ cmark_mem *mem = map->mem;
15713
+ if (ref != NULL) {
15714
+ mem->free(ref->label);
15715
+ cmark_chunk_free(mem, &ref->url);
15716
+ cmark_chunk_free(mem, &ref->title);
15717
+ mem->free(ref);
15718
+ }
15719
+}
15720
+
15721
+// normalize reference: collapse internal whitespace to single space,
15722
+// remove leading/trailing whitespace, case fold
15723
+// Return NULL if the reference name is actually empty (i.e. composed
15724
+// solely from whitespace)
15725
+static unsigned char *normalize_reference(cmark_mem *mem, cmark_chunk *ref) {
15726
+ cmark_strbuf normalized = CMARK_BUF_INIT(mem);
15727
+ unsigned char *result;
15728
+
15729
+ if (ref == NULL)
15730
+ return NULL;
15731
+
15732
+ if (ref->len == 0)
15733
+ return NULL;
15734
+
15735
+ cmark_utf8proc_case_fold(&normalized, ref->data, ref->len);
15736
+ cmark_strbuf_trim(&normalized);
15737
+ cmark_strbuf_normalize_whitespace(&normalized);
15738
+
15739
+ result = cmark_strbuf_detach(&normalized);
15740
+ assert(result);
15741
+
15742
+ if (result[0] == '\0') {
15743
+ mem->free(result);
15744
+ return NULL;
15745
+ }
15746
+
15747
+ return result;
15748
+}
15749
+
15750
+static void add_reference(cmark_reference_map *map, cmark_reference *ref) {
15751
+ cmark_reference *t = ref->next = map->table[ref->hash % REFMAP_SIZE];
15752
+
15753
+ while (t) {
15754
+ if (t->hash == ref->hash && !strcmp((char *)t->label, (char *)ref->label)) {
15755
+ reference_free(map, ref);
15756
+ return;
15757
+ }
15758
+
15759
+ t = t->next;
15760
+ }
15761
+
15762
+ map->table[ref->hash % REFMAP_SIZE] = ref;
15763
+}
15764
+
15765
+void cmark_reference_create(cmark_reference_map *map, cmark_chunk *label,
15766
+ cmark_chunk *url, cmark_chunk *title) {
15767
+ cmark_reference *ref;
15768
+ unsigned char *reflabel = normalize_reference(map->mem, label);
15769
+
15770
+ /* empty reference name, or composed from only whitespace */
15771
+ if (reflabel == NULL)
15772
+ return;
15773
+
15774
+ ref = (cmark_reference *)map->mem->calloc(1, sizeof(*ref));
15775
+ ref->label = reflabel;
15776
+ ref->hash = refhash(ref->label);
15777
+ ref->url = cmark_clean_url(map->mem, url);
15778
+ ref->title = cmark_clean_title(map->mem, title);
15779
+ ref->next = NULL;
15780
+
15781
+ add_reference(map, ref);
15782
+}
15783
+
15784
+// Returns reference if refmap contains a reference with matching
15785
+// label, otherwise NULL.
15786
+cmark_reference *cmark_reference_lookup(cmark_reference_map *map,
15787
+ cmark_chunk *label) {
15788
+ cmark_reference *ref = NULL;
15789
+ unsigned char *norm;
15790
+ unsigned int hash;
15791
+
15792
+ if (label->len < 1 || label->len > MAX_LINK_LABEL_LENGTH)
15793
+ return NULL;
15794
+
15795
+ if (map == NULL)
15796
+ return NULL;
15797
+
15798
+ norm = normalize_reference(map->mem, label);
15799
+ if (norm == NULL)
15800
+ return NULL;
15801
+
15802
+ hash = refhash(norm);
15803
+ ref = map->table[hash % REFMAP_SIZE];
15804
+
15805
+ while (ref) {
15806
+ if (ref->hash == hash && !strcmp((char *)ref->label, (char *)norm))
15807
+ break;
15808
+ ref = ref->next;
15809
+ }
15810
+
15811
+ map->mem->free(norm);
15812
+ return ref;
15813
+}
15814
+
15815
+void cmark_reference_map_free(cmark_reference_map *map) {
15816
+ unsigned int i;
15817
+
15818
+ if (map == NULL)
15819
+ return;
15820
+
15821
+ for (i = 0; i < REFMAP_SIZE; ++i) {
15822
+ cmark_reference *ref = map->table[i];
15823
+ cmark_reference *next;
15824
+
15825
+ while (ref) {
15826
+ next = ref->next;
15827
+ reference_free(map, ref);
15828
+ ref = next;
15829
+ }
15830
+ }
15831
+
15832
+ map->mem->free(map);
15833
+}
15834
+
15835
+cmark_reference_map *cmark_reference_map_new(cmark_mem *mem) {
15836
+ cmark_reference_map *map =
15837
+ (cmark_reference_map *)mem->calloc(1, sizeof(cmark_reference_map));
15838
+ map->mem = mem;
15839
+ return map;
15840
+}
15841
+
15842
+
15843
+
15844
+/**
15845
+ * Block parsing implementation.
15846
+ *
15847
+ * For a high-level overview of the block parsing process,
15848
+ * see http://spec.commonmark.org/0.24/#phase-1-block-structure
15849
+ */
15850
+
15851
+
15852
+#define CODE_INDENT 4
15853
+#define TAB_STOP 4
15854
+
15855
+#ifndef MIN
15856
+#define MIN(x, y) ((x < y) ? x : y)
15857
+#endif
15858
+
15859
+#define peek_at(i, n) (i)->data[n]
15860
+
15861
+static bool S_last_line_blank(const cmark_node *node) {
15862
+ return (node->flags & CMARK_NODE__LAST_LINE_BLANK) != 0;
15863
+}
15864
+
15865
+static CMARK_INLINE cmark_node_type S_type(const cmark_node *node) {
15866
+ return (cmark_node_type)node->type;
15867
+}
15868
+
15869
+static void S_set_last_line_blank(cmark_node *node, bool is_blank) {
15870
+ if (is_blank)
15871
+ node->flags |= CMARK_NODE__LAST_LINE_BLANK;
15872
+ else
15873
+ node->flags &= ~CMARK_NODE__LAST_LINE_BLANK;
15874
+}
15875
+
15876
+static CMARK_INLINE bool S_is_space_or_tab(char c) {
15877
+ return (c == ' ' || c == '\t');
15878
+}
15879
+
15880
+static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer,
15881
+ size_t len, bool eof);
15882
+
15883
+static void S_process_line(cmark_parser *parser, const unsigned char *buffer,
15884
+ bufsize_t bytes);
15885
+
15886
+static cmark_node *make_block(cmark_mem *mem, cmark_node_type tag,
15887
+ int start_line, int start_column) {
15888
+ cmark_node *e;
15889
+
15890
+ e = (cmark_node *)mem->calloc(1, sizeof(*e));
15891
+ cmark_strbuf_init(mem, &e->content, 32);
15892
+ e->type = (uint16_t)tag;
15893
+ e->flags = CMARK_NODE__OPEN;
15894
+ e->start_line = start_line;
15895
+ e->start_column = start_column;
15896
+ e->end_line = start_line;
15897
+
15898
+ return e;
15899
+}
15900
+
15901
+// Create a root document node.
15902
+static cmark_node *make_document(cmark_mem *mem) {
15903
+ cmark_node *e = make_block(mem, CMARK_NODE_DOCUMENT, 1, 1);
15904
+ return e;
15905
+}
15906
+
15907
+cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem) {
15908
+ cmark_parser *parser = (cmark_parser *)mem->calloc(1, sizeof(cmark_parser));
15909
+ parser->mem = mem;
15910
+
15911
+ cmark_node *document = make_document(mem);
15912
+
15913
+ cmark_strbuf_init(mem, &parser->curline, 256);
15914
+ cmark_strbuf_init(mem, &parser->linebuf, 0);
15915
+
15916
+ parser->refmap = cmark_reference_map_new(mem);
15917
+ parser->root = document;
15918
+ parser->current = document;
15919
+ parser->line_number = 0;
15920
+ parser->offset = 0;
15921
+ parser->column = 0;
15922
+ parser->first_nonspace = 0;
15923
+ parser->first_nonspace_column = 0;
15924
+ parser->indent = 0;
15925
+ parser->blank = false;
15926
+ parser->partially_consumed_tab = false;
15927
+ parser->last_line_length = 0;
15928
+ parser->options = options;
15929
+ parser->last_buffer_ended_with_cr = false;
15930
+
15931
+ return parser;
15932
+}
15933
+
15934
+cmark_parser *cmark_parser_new(int options) {
15935
+ extern cmark_mem DEFAULT_MEM_ALLOCATOR;
15936
+ return cmark_parser_new_with_mem(options, &DEFAULT_MEM_ALLOCATOR);
15937
+}
15938
+
15939
+void cmark_parser_free(cmark_parser *parser) {
15940
+ cmark_mem *mem = parser->mem;
15941
+ cmark_strbuf_free(&parser->curline);
15942
+ cmark_strbuf_free(&parser->linebuf);
15943
+ cmark_reference_map_free(parser->refmap);
15944
+ mem->free(parser);
15945
+}
15946
+
15947
+static cmark_node *finalize(cmark_parser *parser, cmark_node *b);
15948
+
15949
+// Returns true if line has only space characters, else false.
15950
+static bool is_blank(cmark_strbuf *s, bufsize_t offset) {
15951
+ while (offset < s->size) {
15952
+ switch (s->ptr[offset]) {
15953
+ case '\r':
15954
+ case '\n':
15955
+ return true;
15956
+ case ' ':
15957
+ offset++;
15958
+ break;
15959
+ case '\t':
15960
+ offset++;
15961
+ break;
15962
+ default:
15963
+ return false;
15964
+ }
15965
+ }
15966
+
15967
+ return true;
15968
+}
15969
+
15970
+static CMARK_INLINE bool can_contain(cmark_node_type parent_type,
15971
+ cmark_node_type child_type) {
15972
+ return (parent_type == CMARK_NODE_DOCUMENT ||
15973
+ parent_type == CMARK_NODE_BLOCK_QUOTE ||
15974
+ parent_type == CMARK_NODE_ITEM ||
15975
+ (parent_type == CMARK_NODE_LIST && child_type == CMARK_NODE_ITEM));
15976
+}
15977
+
15978
+static CMARK_INLINE bool accepts_lines(cmark_node_type block_type) {
15979
+ return (block_type == CMARK_NODE_PARAGRAPH ||
15980
+ block_type == CMARK_NODE_HEADING ||
15981
+ block_type == CMARK_NODE_CODE_BLOCK);
15982
+}
15983
+
15984
+static CMARK_INLINE bool contains_inlines(cmark_node_type block_type) {
15985
+ return (block_type == CMARK_NODE_PARAGRAPH ||
15986
+ block_type == CMARK_NODE_HEADING);
15987
+}
15988
+
15989
+static void add_line(cmark_node *node, cmark_chunk *ch, cmark_parser *parser) {
15990
+ int chars_to_tab;
15991
+ int i;
15992
+ assert(node->flags & CMARK_NODE__OPEN);
15993
+ if (parser->partially_consumed_tab) {
15994
+ parser->offset += 1; // skip over tab
15995
+ // add space characters:
15996
+ chars_to_tab = TAB_STOP - (parser->column % TAB_STOP);
15997
+ for (i = 0; i < chars_to_tab; i++) {
15998
+ cmark_strbuf_putc(&node->content, ' ');
15999
+ }
16000
+ }
16001
+ cmark_strbuf_put(&node->content, ch->data + parser->offset,
16002
+ ch->len - parser->offset);
16003
+}
16004
+
16005
+static void remove_trailing_blank_lines(cmark_strbuf *ln) {
16006
+ bufsize_t i;
16007
+ unsigned char c;
16008
+
16009
+ for (i = ln->size - 1; i >= 0; --i) {
16010
+ c = ln->ptr[i];
16011
+
16012
+ if (c != ' ' && c != '\t' && !S_is_line_end_char(c))
16013
+ break;
16014
+ }
16015
+
16016
+ if (i < 0) {
16017
+ cmark_strbuf_clear(ln);
16018
+ return;
16019
+ }
16020
+
16021
+ for (; i < ln->size; ++i) {
16022
+ c = ln->ptr[i];
16023
+
16024
+ if (!S_is_line_end_char(c))
16025
+ continue;
16026
+
16027
+ cmark_strbuf_truncate(ln, i);
16028
+ break;
16029
+ }
16030
+}
16031
+
16032
+// Check to see if a node ends with a blank line, descending
16033
+// if needed into lists and sublists.
16034
+static bool ends_with_blank_line(cmark_node *node) {
16035
+ cmark_node *cur = node;
16036
+ while (cur != NULL) {
16037
+ if (S_last_line_blank(cur)) {
16038
+ return true;
16039
+ }
16040
+ if (S_type(cur) == CMARK_NODE_LIST || S_type(cur) == CMARK_NODE_ITEM) {
16041
+ cur = cur->last_child;
16042
+ } else {
16043
+ cur = NULL;
16044
+ }
16045
+ }
16046
+ return false;
16047
+}
16048
+
16049
+static cmark_node *finalize(cmark_parser *parser, cmark_node *b) {
16050
+ bufsize_t pos;
16051
+ cmark_node *item;
16052
+ cmark_node *subitem;
16053
+ cmark_node *parent;
16054
+
16055
+ parent = b->parent;
16056
+ assert(b->flags &
16057
+ CMARK_NODE__OPEN); // shouldn't call finalize on closed blocks
16058
+ b->flags &= ~CMARK_NODE__OPEN;
16059
+
16060
+ if (parser->curline.size == 0) {
16061
+ // end of input - line number has not been incremented
16062
+ b->end_line = parser->line_number;
16063
+ b->end_column = parser->last_line_length;
16064
+ } else if (S_type(b) == CMARK_NODE_DOCUMENT ||
16065
+ (S_type(b) == CMARK_NODE_CODE_BLOCK && b->as.code.fenced) ||
16066
+ (S_type(b) == CMARK_NODE_HEADING && b->as.heading.setext)) {
16067
+ b->end_line = parser->line_number;
16068
+ b->end_column = parser->curline.size;
16069
+ if (b->end_column && parser->curline.ptr[b->end_column - 1] == '\n')
16070
+ b->end_column -= 1;
16071
+ if (b->end_column && parser->curline.ptr[b->end_column - 1] == '\r')
16072
+ b->end_column -= 1;
16073
+ } else {
16074
+ b->end_line = parser->line_number - 1;
16075
+ b->end_column = parser->last_line_length;
16076
+ }
16077
+
16078
+ cmark_strbuf *node_content = &b->content;
16079
+
16080
+ switch (S_type(b)) {
16081
+ case CMARK_NODE_PARAGRAPH:
16082
+ while (cmark_strbuf_at(node_content, 0) == '[' &&
16083
+ (pos = cmark_parse_reference_inline(parser->mem, node_content,
16084
+ parser->refmap))) {
16085
+
16086
+ cmark_strbuf_drop(node_content, pos);
16087
+ }
16088
+ if (is_blank(node_content, 0)) {
16089
+ // remove blank node (former reference def)
16090
+ cmark_node_free(b);
16091
+ }
16092
+ break;
16093
+
16094
+ case CMARK_NODE_CODE_BLOCK:
16095
+ if (!b->as.code.fenced) { // indented code
16096
+ remove_trailing_blank_lines(node_content);
16097
+ cmark_strbuf_putc(node_content, '\n');
16098
+ } else {
16099
+ // first line of contents becomes info
16100
+ for (pos = 0; pos < node_content->size; ++pos) {
16101
+ if (S_is_line_end_char(node_content->ptr[pos]))
16102
+ break;
16103
+ }
16104
+ assert(pos < node_content->size);
16105
+
16106
+ cmark_strbuf tmp = CMARK_BUF_INIT(parser->mem);
16107
+ houdini_unescape_html_f(&tmp, node_content->ptr, pos);
16108
+ cmark_strbuf_trim(&tmp);
16109
+ cmark_strbuf_unescape(&tmp);
16110
+ b->as.code.info = cmark_chunk_buf_detach(&tmp);
16111
+
16112
+ if (node_content->ptr[pos] == '\r')
16113
+ pos += 1;
16114
+ if (node_content->ptr[pos] == '\n')
16115
+ pos += 1;
16116
+ cmark_strbuf_drop(node_content, pos);
16117
+ }
16118
+ b->as.code.literal = cmark_chunk_buf_detach(node_content);
16119
+ break;
16120
+
16121
+ case CMARK_NODE_HTML_BLOCK:
16122
+ b->as.literal = cmark_chunk_buf_detach(node_content);
16123
+ break;
16124
+
16125
+ case CMARK_NODE_LIST: // determine tight/loose status
16126
+ b->as.list.tight = true; // tight by default
16127
+ item = b->first_child;
16128
+
16129
+ while (item) {
16130
+ // check for non-final non-empty list item ending with blank line:
16131
+ if (S_last_line_blank(item) && item->next) {
16132
+ b->as.list.tight = false;
16133
+ break;
16134
+ }
16135
+ // recurse into children of list item, to see if there are
16136
+ // spaces between them:
16137
+ subitem = item->first_child;
16138
+ while (subitem) {
16139
+ if (ends_with_blank_line(subitem) && (item->next || subitem->next)) {
16140
+ b->as.list.tight = false;
16141
+ break;
16142
+ }
16143
+ subitem = subitem->next;
16144
+ }
16145
+ if (!(b->as.list.tight)) {
16146
+ break;
16147
+ }
16148
+ item = item->next;
16149
+ }
16150
+
16151
+ break;
16152
+
16153
+ default:
16154
+ break;
16155
+ }
16156
+
16157
+ return parent;
16158
+}
16159
+
16160
+// Add a node as child of another. Return pointer to child.
16161
+static cmark_node *add_child(cmark_parser *parser, cmark_node *parent,
16162
+ cmark_node_type block_type, int start_column) {
16163
+ assert(parent);
16164
+
16165
+ // if 'parent' isn't the kind of node that can accept this child,
16166
+ // then back up til we hit a node that can.
16167
+ while (!can_contain(S_type(parent), block_type)) {
16168
+ parent = finalize(parser, parent);
16169
+ }
16170
+
16171
+ cmark_node *child =
16172
+ make_block(parser->mem, block_type, parser->line_number, start_column);
16173
+ child->parent = parent;
16174
+
16175
+ if (parent->last_child) {
16176
+ parent->last_child->next = child;
16177
+ child->prev = parent->last_child;
16178
+ } else {
16179
+ parent->first_child = child;
16180
+ child->prev = NULL;
16181
+ }
16182
+ parent->last_child = child;
16183
+ return child;
16184
+}
16185
+
16186
+// Walk through node and all children, recursively, parsing
16187
+// string content into inline content where appropriate.
16188
+static void process_inlines(cmark_mem *mem, cmark_node *root,
16189
+ cmark_reference_map *refmap, int options) {
16190
+ cmark_iter *iter = cmark_iter_new(root);
16191
+ cmark_node *cur;
16192
+ cmark_event_type ev_type;
16193
+
16194
+ while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
16195
+ cur = cmark_iter_get_node(iter);
16196
+ if (ev_type == CMARK_EVENT_ENTER) {
16197
+ if (contains_inlines(S_type(cur))) {
16198
+ cmark_parse_inlines(mem, cur, refmap, options);
16199
+ }
16200
+ }
16201
+ }
16202
+
16203
+ cmark_iter_free(iter);
16204
+}
16205
+
16206
+// Attempts to parse a list item marker (bullet or enumerated).
16207
+// On success, returns length of the marker, and populates
16208
+// data with the details. On failure, returns 0.
16209
+static bufsize_t parse_list_marker(cmark_mem *mem, cmark_chunk *input,
16210
+ bufsize_t pos, bool interrupts_paragraph,
16211
+ cmark_list **dataptr) {
16212
+ unsigned char c;
16213
+ bufsize_t startpos;
16214
+ cmark_list *data;
16215
+ bufsize_t i;
16216
+
16217
+ startpos = pos;
16218
+ c = peek_at(input, pos);
16219
+
16220
+ if (c == '*' || c == '-' || c == '+') {
16221
+ pos++;
16222
+ if (!cmark_isspace(peek_at(input, pos))) {
16223
+ return 0;
16224
+ }
16225
+
16226
+ if (interrupts_paragraph) {
16227
+ i = pos;
16228
+ // require non-blank content after list marker:
16229
+ while (S_is_space_or_tab(peek_at(input, i))) {
16230
+ i++;
16231
+ }
16232
+ if (peek_at(input, i) == '\n') {
16233
+ return 0;
16234
+ }
16235
+ }
16236
+
16237
+ data = (cmark_list *)mem->calloc(1, sizeof(*data));
16238
+ data->marker_offset = 0; // will be adjusted later
16239
+ data->list_type = CMARK_BULLET_LIST;
16240
+ data->bullet_char = c;
16241
+ data->start = 1;
16242
+ data->delimiter = CMARK_PERIOD_DELIM;
16243
+ data->tight = false;
16244
+ } else if (cmark_isdigit(c)) {
16245
+ int start = 0;
16246
+ int digits = 0;
16247
+
16248
+ do {
16249
+ start = (10 * start) + (peek_at(input, pos) - '0');
16250
+ pos++;
16251
+ digits++;
16252
+ // We limit to 9 digits to avoid overflow,
16253
+ // assuming max int is 2^31 - 1
16254
+ // This also seems to be the limit for 'start' in some browsers.
16255
+ } while (digits < 9 && cmark_isdigit(peek_at(input, pos)));
16256
+
16257
+ if (interrupts_paragraph && start != 1) {
16258
+ return 0;
16259
+ }
16260
+ c = peek_at(input, pos);
16261
+ if (c == '.' || c == ')') {
16262
+ pos++;
16263
+ if (!cmark_isspace(peek_at(input, pos))) {
16264
+ return 0;
16265
+ }
16266
+ if (interrupts_paragraph) {
16267
+ // require non-blank content after list marker:
16268
+ i = pos;
16269
+ while (S_is_space_or_tab(peek_at(input, i))) {
16270
+ i++;
16271
+ }
16272
+ if (S_is_line_end_char(peek_at(input, i))) {
16273
+ return 0;
16274
+ }
16275
+ }
16276
+
16277
+ data = (cmark_list *)mem->calloc(1, sizeof(*data));
16278
+ data->marker_offset = 0; // will be adjusted later
16279
+ data->list_type = CMARK_ORDERED_LIST;
16280
+ data->bullet_char = 0;
16281
+ data->start = start;
16282
+ data->delimiter = (c == '.' ? CMARK_PERIOD_DELIM : CMARK_PAREN_DELIM);
16283
+ data->tight = false;
16284
+ } else {
16285
+ return 0;
16286
+ }
16287
+ } else {
16288
+ return 0;
16289
+ }
16290
+
16291
+ *dataptr = data;
16292
+ return (pos - startpos);
16293
+}
16294
+
16295
+// Return 1 if list item belongs in list, else 0.
16296
+static int lists_match(cmark_list *list_data, cmark_list *item_data) {
16297
+ return (list_data->list_type == item_data->list_type &&
16298
+ list_data->delimiter == item_data->delimiter &&
16299
+ // list_data->marker_offset == item_data.marker_offset &&
16300
+ list_data->bullet_char == item_data->bullet_char);
16301
+}
16302
+
16303
+static cmark_node *finalize_document(cmark_parser *parser) {
16304
+ while (parser->current != parser->root) {
16305
+ parser->current = finalize(parser, parser->current);
16306
+ }
16307
+
16308
+ finalize(parser, parser->root);
16309
+ process_inlines(parser->mem, parser->root, parser->refmap, parser->options);
16310
+
16311
+ return parser->root;
16312
+}
16313
+
16314
+cmark_node *cmark_parse_file(FILE *f, int options) {
16315
+ unsigned char buffer[4096];
16316
+ cmark_parser *parser = cmark_parser_new(options);
16317
+ size_t bytes;
16318
+ cmark_node *document;
16319
+
16320
+ while ((bytes = fread(buffer, 1, sizeof(buffer), f)) > 0) {
16321
+ bool eof = bytes < sizeof(buffer);
16322
+ S_parser_feed(parser, buffer, bytes, eof);
16323
+ if (eof) {
16324
+ break;
16325
+ }
16326
+ }
16327
+
16328
+ document = cmark_parser_finish(parser);
16329
+ cmark_parser_free(parser);
16330
+ return document;
16331
+}
16332
+
16333
+cmark_node *cmark_parse_document(const char *buffer, size_t len, int options) {
16334
+ cmark_parser *parser = cmark_parser_new(options);
16335
+ cmark_node *document;
16336
+
16337
+ S_parser_feed(parser, (const unsigned char *)buffer, len, true);
16338
+
16339
+ document = cmark_parser_finish(parser);
16340
+ cmark_parser_free(parser);
16341
+ return document;
16342
+}
16343
+
16344
+void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len) {
16345
+ S_parser_feed(parser, (const unsigned char *)buffer, len, false);
16346
+}
16347
+
16348
+static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer,
16349
+ size_t len, bool eof) {
16350
+ const unsigned char *end = buffer + len;
16351
+ static const uint8_t repl[] = {239, 191, 189};
16352
+
16353
+ if (parser->last_buffer_ended_with_cr && *buffer == '\n') {
16354
+ // skip NL if last buffer ended with CR ; see #117
16355
+ buffer++;
16356
+ }
16357
+ parser->last_buffer_ended_with_cr = false;
16358
+ while (buffer < end) {
16359
+ const unsigned char *eol;
16360
+ bufsize_t chunk_len;
16361
+ bool process = false;
16362
+ for (eol = buffer; eol < end; ++eol) {
16363
+ if (S_is_line_end_char(*eol)) {
16364
+ process = true;
16365
+ break;
16366
+ }
16367
+ if (*eol == '\0' && eol < end) {
16368
+ break;
16369
+ }
16370
+ }
16371
+ if (eol >= end && eof) {
16372
+ process = true;
16373
+ }
16374
+
16375
+ chunk_len = (eol - buffer);
16376
+ if (process) {
16377
+ if (parser->linebuf.size > 0) {
16378
+ cmark_strbuf_put(&parser->linebuf, buffer, chunk_len);
16379
+ S_process_line(parser, parser->linebuf.ptr, parser->linebuf.size);
16380
+ cmark_strbuf_clear(&parser->linebuf);
16381
+ } else {
16382
+ S_process_line(parser, buffer, chunk_len);
16383
+ }
16384
+ } else {
16385
+ if (eol < end && *eol == '\0') {
16386
+ // omit NULL byte
16387
+ cmark_strbuf_put(&parser->linebuf, buffer, chunk_len);
16388
+ // add replacement character
16389
+ cmark_strbuf_put(&parser->linebuf, repl, 3);
16390
+ } else {
16391
+ cmark_strbuf_put(&parser->linebuf, buffer, chunk_len);
16392
+ }
16393
+ }
16394
+
16395
+ buffer += chunk_len;
16396
+ if (buffer < end) {
16397
+ if (*buffer == '\0') {
16398
+ // skip over NULL
16399
+ buffer++;
16400
+ } else {
16401
+ // skip over line ending characters
16402
+ if (*buffer == '\r') {
16403
+ buffer++;
16404
+ if (buffer == end)
16405
+ parser->last_buffer_ended_with_cr = true;
16406
+ }
16407
+ if (buffer < end && *buffer == '\n')
16408
+ buffer++;
16409
+ }
16410
+ }
16411
+ }
16412
+}
16413
+
16414
+static void chop_trailing_hashtags(cmark_chunk *ch) {
16415
+ bufsize_t n, orig_n;
16416
+
16417
+ cmark_chunk_rtrim(ch);
16418
+ orig_n = n = ch->len - 1;
16419
+
16420
+ // if string ends in space followed by #s, remove these:
16421
+ while (n >= 0 && peek_at(ch, n) == '#')
16422
+ n--;
16423
+
16424
+ // Check for a space before the final #s:
16425
+ if (n != orig_n && n >= 0 && S_is_space_or_tab(peek_at(ch, n))) {
16426
+ ch->len = n;
16427
+ cmark_chunk_rtrim(ch);
16428
+ }
16429
+}
16430
+
16431
+// Find first nonspace character from current offset, setting
16432
+// parser->first_nonspace, parser->first_nonspace_column,
16433
+// parser->indent, and parser->blank. Does not advance parser->offset.
16434
+static void S_find_first_nonspace(cmark_parser *parser, cmark_chunk *input) {
16435
+ char c;
16436
+ int chars_to_tab = TAB_STOP - (parser->column % TAB_STOP);
16437
+
16438
+ parser->first_nonspace = parser->offset;
16439
+ parser->first_nonspace_column = parser->column;
16440
+ while ((c = peek_at(input, parser->first_nonspace))) {
16441
+ if (c == ' ') {
16442
+ parser->first_nonspace += 1;
16443
+ parser->first_nonspace_column += 1;
16444
+ chars_to_tab = chars_to_tab - 1;
16445
+ if (chars_to_tab == 0) {
16446
+ chars_to_tab = TAB_STOP;
16447
+ }
16448
+ } else if (c == '\t') {
16449
+ parser->first_nonspace += 1;
16450
+ parser->first_nonspace_column += chars_to_tab;
16451
+ chars_to_tab = TAB_STOP;
16452
+ } else {
16453
+ break;
16454
+ }
16455
+ }
16456
+
16457
+ parser->indent = parser->first_nonspace_column - parser->column;
16458
+ parser->blank = S_is_line_end_char(peek_at(input, parser->first_nonspace));
16459
+}
16460
+
16461
+// Advance parser->offset and parser->column. parser->offset is the
16462
+// byte position in input; parser->column is a virtual column number
16463
+// that takes into account tabs. (Multibyte characters are not taken
16464
+// into account, because the Markdown line prefixes we are interested in
16465
+// analyzing are entirely ASCII.) The count parameter indicates
16466
+// how far to advance the offset. If columns is true, then count
16467
+// indicates a number of columns; otherwise, a number of bytes.
16468
+// If advancing a certain number of columns partially consumes
16469
+// a tab character, parser->partially_consumed_tab is set to true.
16470
+static void S_advance_offset(cmark_parser *parser, cmark_chunk *input,
16471
+ bufsize_t count, bool columns) {
16472
+ char c;
16473
+ int chars_to_tab;
16474
+ int chars_to_advance;
16475
+ while (count > 0 && (c = peek_at(input, parser->offset))) {
16476
+ if (c == '\t') {
16477
+ chars_to_tab = TAB_STOP - (parser->column % TAB_STOP);
16478
+ if (columns) {
16479
+ parser->partially_consumed_tab = chars_to_tab > count;
16480
+ chars_to_advance = MIN(count, chars_to_tab);
16481
+ parser->column += chars_to_advance;
16482
+ parser->offset += (parser->partially_consumed_tab ? 0 : 1);
16483
+ count -= chars_to_advance;
16484
+ } else {
16485
+ parser->partially_consumed_tab = false;
16486
+ parser->column += chars_to_tab;
16487
+ parser->offset += 1;
16488
+ count -= 1;
16489
+ }
16490
+ } else {
16491
+ parser->partially_consumed_tab = false;
16492
+ parser->offset += 1;
16493
+ parser->column += 1; // assume ascii; block starts are ascii
16494
+ count -= 1;
16495
+ }
16496
+ }
16497
+}
16498
+
16499
+static bool S_last_child_is_open(cmark_node *container) {
16500
+ return container->last_child &&
16501
+ (container->last_child->flags & CMARK_NODE__OPEN);
16502
+}
16503
+
16504
+static bool parse_block_quote_prefix(cmark_parser *parser, cmark_chunk *input) {
16505
+ bool res = false;
16506
+ bufsize_t matched = 0;
16507
+
16508
+ matched =
16509
+ parser->indent <= 3 && peek_at(input, parser->first_nonspace) == '>';
16510
+ if (matched) {
16511
+
16512
+ S_advance_offset(parser, input, parser->indent + 1, true);
16513
+
16514
+ if (S_is_space_or_tab(peek_at(input, parser->offset))) {
16515
+ S_advance_offset(parser, input, 1, true);
16516
+ }
16517
+
16518
+ res = true;
16519
+ }
16520
+ return res;
16521
+}
16522
+
16523
+static bool parse_node_item_prefix(cmark_parser *parser, cmark_chunk *input,
16524
+ cmark_node *container) {
16525
+ bool res = false;
16526
+
16527
+ if (parser->indent >=
16528
+ container->as.list.marker_offset + container->as.list.padding) {
16529
+ S_advance_offset(parser, input, container->as.list.marker_offset +
16530
+ container->as.list.padding,
16531
+ true);
16532
+ res = true;
16533
+ } else if (parser->blank && container->first_child != NULL) {
16534
+ // if container->first_child is NULL, then the opening line
16535
+ // of the list item was blank after the list marker; in this
16536
+ // case, we are done with the list item.
16537
+ S_advance_offset(parser, input, parser->first_nonspace - parser->offset,
16538
+ false);
16539
+ res = true;
16540
+ }
16541
+ return res;
16542
+}
16543
+
16544
+static bool parse_code_block_prefix(cmark_parser *parser, cmark_chunk *input,
16545
+ cmark_node *container,
16546
+ bool *should_continue) {
16547
+ bool res = false;
16548
+
16549
+ if (!container->as.code.fenced) { // indented
16550
+ if (parser->indent >= CODE_INDENT) {
16551
+ S_advance_offset(parser, input, CODE_INDENT, true);
16552
+ res = true;
16553
+ } else if (parser->blank) {
16554
+ S_advance_offset(parser, input, parser->first_nonspace - parser->offset,
16555
+ false);
16556
+ res = true;
16557
+ }
16558
+ } else { // fenced
16559
+ bufsize_t matched = 0;
16560
+
16561
+ if (parser->indent <= 3 && (peek_at(input, parser->first_nonspace) ==
16562
+ container->as.code.fence_char)) {
16563
+ matched = scan_close_code_fence(input, parser->first_nonspace);
16564
+ }
16565
+
16566
+ if (matched >= container->as.code.fence_length) {
16567
+ // closing fence - and since we're at
16568
+ // the end of a line, we can stop processing it:
16569
+ *should_continue = false;
16570
+ S_advance_offset(parser, input, matched, false);
16571
+ parser->current = finalize(parser, container);
16572
+ } else {
16573
+ // skip opt. spaces of fence parser->offset
16574
+ int i = container->as.code.fence_offset;
16575
+
16576
+ while (i > 0 && S_is_space_or_tab(peek_at(input, parser->offset))) {
16577
+ S_advance_offset(parser, input, 1, true);
16578
+ i--;
16579
+ }
16580
+ res = true;
16581
+ }
16582
+ }
16583
+
16584
+ return res;
16585
+}
16586
+
16587
+static bool parse_html_block_prefix(cmark_parser *parser,
16588
+ cmark_node *container) {
16589
+ bool res = false;
16590
+ int html_block_type = container->as.html_block_type;
16591
+
16592
+ assert(html_block_type >= 1 && html_block_type <= 7);
16593
+ switch (html_block_type) {
16594
+ case 1:
16595
+ case 2:
16596
+ case 3:
16597
+ case 4:
16598
+ case 5:
16599
+ // these types of blocks can accept blanks
16600
+ res = true;
16601
+ break;
16602
+ case 6:
16603
+ case 7:
16604
+ res = !parser->blank;
16605
+ break;
16606
+ }
16607
+
16608
+ return res;
16609
+}
16610
+
16611
+/**
16612
+ * For each containing node, try to parse the associated line start.
16613
+ *
16614
+ * Will not close unmatched blocks, as we may have a lazy continuation
16615
+ * line -> http://spec.commonmark.org/0.24/#lazy-continuation-line
16616
+ *
16617
+ * Returns: The last matching node, or NULL
16618
+ */
16619
+static cmark_node *check_open_blocks(cmark_parser *parser, cmark_chunk *input,
16620
+ bool *all_matched) {
16621
+ bool should_continue = true;
16622
+ *all_matched = false;
16623
+ cmark_node *container = parser->root;
16624
+ cmark_node_type cont_type;
16625
+
16626
+ while (S_last_child_is_open(container)) {
16627
+ container = container->last_child;
16628
+ cont_type = S_type(container);
16629
+
16630
+ S_find_first_nonspace(parser, input);
16631
+
16632
+ switch (cont_type) {
16633
+ case CMARK_NODE_BLOCK_QUOTE:
16634
+ if (!parse_block_quote_prefix(parser, input))
16635
+ goto done;
16636
+ break;
16637
+ case CMARK_NODE_ITEM:
16638
+ if (!parse_node_item_prefix(parser, input, container))
16639
+ goto done;
16640
+ break;
16641
+ case CMARK_NODE_CODE_BLOCK:
16642
+ if (!parse_code_block_prefix(parser, input, container, &should_continue))
16643
+ goto done;
16644
+ break;
16645
+ case CMARK_NODE_HEADING:
16646
+ // a heading can never contain more than one line
16647
+ goto done;
16648
+ case CMARK_NODE_HTML_BLOCK:
16649
+ if (!parse_html_block_prefix(parser, container))
16650
+ goto done;
16651
+ break;
16652
+ case CMARK_NODE_PARAGRAPH:
16653
+ if (parser->blank)
16654
+ goto done;
16655
+ break;
16656
+ default:
16657
+ break;
16658
+ }
16659
+ }
16660
+
16661
+ *all_matched = true;
16662
+
16663
+done:
16664
+ if (!*all_matched) {
16665
+ container = container->parent; // back up to last matching node
16666
+ }
16667
+
16668
+ if (!should_continue) {
16669
+ container = NULL;
16670
+ }
16671
+
16672
+ return container;
16673
+}
16674
+
16675
+static void open_new_blocks(cmark_parser *parser, cmark_node **container,
16676
+ cmark_chunk *input, bool all_matched) {
16677
+ bool indented;
16678
+ cmark_list *data = NULL;
16679
+ bool maybe_lazy = S_type(parser->current) == CMARK_NODE_PARAGRAPH;
16680
+ cmark_node_type cont_type = S_type(*container);
16681
+ bufsize_t matched = 0;
16682
+ int lev = 0;
16683
+ bool save_partially_consumed_tab;
16684
+ int save_offset;
16685
+ int save_column;
16686
+
16687
+ while (cont_type != CMARK_NODE_CODE_BLOCK &&
16688
+ cont_type != CMARK_NODE_HTML_BLOCK) {
16689
+
16690
+ S_find_first_nonspace(parser, input);
16691
+ indented = parser->indent >= CODE_INDENT;
16692
+
16693
+ if (!indented && peek_at(input, parser->first_nonspace) == '>') {
16694
+
16695
+ bufsize_t blockquote_startpos = parser->first_nonspace;
16696
+
16697
+ S_advance_offset(parser, input,
16698
+ parser->first_nonspace + 1 - parser->offset, false);
16699
+ // optional following character
16700
+ if (S_is_space_or_tab(peek_at(input, parser->offset))) {
16701
+ S_advance_offset(parser, input, 1, true);
16702
+ }
16703
+ *container = add_child(parser, *container, CMARK_NODE_BLOCK_QUOTE,
16704
+ blockquote_startpos + 1);
16705
+
16706
+ } else if (!indented && (matched = scan_atx_heading_start(
16707
+ input, parser->first_nonspace))) {
16708
+ bufsize_t hashpos;
16709
+ int level = 0;
16710
+ bufsize_t heading_startpos = parser->first_nonspace;
16711
+
16712
+ S_advance_offset(parser, input,
16713
+ parser->first_nonspace + matched - parser->offset,
16714
+ false);
16715
+ *container = add_child(parser, *container, CMARK_NODE_HEADING,
16716
+ heading_startpos + 1);
16717
+
16718
+ hashpos = cmark_chunk_strchr(input, '#', parser->first_nonspace);
16719
+
16720
+ while (peek_at(input, hashpos) == '#') {
16721
+ level++;
16722
+ hashpos++;
16723
+ }
16724
+
16725
+ (*container)->as.heading.level = level;
16726
+ (*container)->as.heading.setext = false;
16727
+
16728
+ } else if (!indented && (matched = scan_open_code_fence(
16729
+ input, parser->first_nonspace))) {
16730
+ *container = add_child(parser, *container, CMARK_NODE_CODE_BLOCK,
16731
+ parser->first_nonspace + 1);
16732
+ (*container)->as.code.fenced = true;
16733
+ (*container)->as.code.fence_char = peek_at(input, parser->first_nonspace);
16734
+ (*container)->as.code.fence_length = (matched > 255) ? 255 : matched;
16735
+ (*container)->as.code.fence_offset =
16736
+ (int8_t)(parser->first_nonspace - parser->offset);
16737
+ (*container)->as.code.info = cmark_chunk_literal("");
16738
+ S_advance_offset(parser, input,
16739
+ parser->first_nonspace + matched - parser->offset,
16740
+ false);
16741
+
16742
+ } else if (!indented && ((matched = scan_html_block_start(
16743
+ input, parser->first_nonspace)) ||
16744
+ (cont_type != CMARK_NODE_PARAGRAPH &&
16745
+ (matched = scan_html_block_start_7(
16746
+ input, parser->first_nonspace))))) {
16747
+ *container = add_child(parser, *container, CMARK_NODE_HTML_BLOCK,
16748
+ parser->first_nonspace + 1);
16749
+ (*container)->as.html_block_type = matched;
16750
+ // note, we don't adjust parser->offset because the tag is part of the
16751
+ // text
16752
+ } else if (!indented && cont_type == CMARK_NODE_PARAGRAPH &&
16753
+ (lev =
16754
+ scan_setext_heading_line(input, parser->first_nonspace))) {
16755
+ (*container)->type = (uint16_t)CMARK_NODE_HEADING;
16756
+ (*container)->as.heading.level = lev;
16757
+ (*container)->as.heading.setext = true;
16758
+ S_advance_offset(parser, input, input->len - 1 - parser->offset, false);
16759
+ } else if (!indented &&
16760
+ !(cont_type == CMARK_NODE_PARAGRAPH && !all_matched) &&
16761
+ (matched = scan_thematic_break(input, parser->first_nonspace))) {
16762
+ // it's only now that we know the line is not part of a setext heading:
16763
+ *container = add_child(parser, *container, CMARK_NODE_THEMATIC_BREAK,
16764
+ parser->first_nonspace + 1);
16765
+ S_advance_offset(parser, input, input->len - 1 - parser->offset, false);
16766
+ } else if ((!indented || cont_type == CMARK_NODE_LIST) &&
16767
+ (matched = parse_list_marker(
16768
+ parser->mem, input, parser->first_nonspace,
16769
+ (*container)->type == CMARK_NODE_PARAGRAPH, &data))) {
16770
+
16771
+ // Note that we can have new list items starting with >= 4
16772
+ // spaces indent, as long as the list container is still open.
16773
+ int i = 0;
16774
+
16775
+ // compute padding:
16776
+ S_advance_offset(parser, input,
16777
+ parser->first_nonspace + matched - parser->offset,
16778
+ false);
16779
+
16780
+ save_partially_consumed_tab = parser->partially_consumed_tab;
16781
+ save_offset = parser->offset;
16782
+ save_column = parser->column;
16783
+
16784
+ while (parser->column - save_column <= 5 &&
16785
+ S_is_space_or_tab(peek_at(input, parser->offset))) {
16786
+ S_advance_offset(parser, input, 1, true);
16787
+ }
16788
+
16789
+ i = parser->column - save_column;
16790
+ if (i >= 5 || i < 1 ||
16791
+ // only spaces after list marker:
16792
+ S_is_line_end_char(peek_at(input, parser->offset))) {
16793
+ data->padding = matched + 1;
16794
+ parser->offset = save_offset;
16795
+ parser->column = save_column;
16796
+ parser->partially_consumed_tab = save_partially_consumed_tab;
16797
+ if (i > 0) {
16798
+ S_advance_offset(parser, input, 1, true);
16799
+ }
16800
+ } else {
16801
+ data->padding = matched + i;
16802
+ }
16803
+
16804
+ // check container; if it's a list, see if this list item
16805
+ // can continue the list; otherwise, create a list container.
16806
+
16807
+ data->marker_offset = parser->indent;
16808
+
16809
+ if (cont_type != CMARK_NODE_LIST ||
16810
+ !lists_match(&((*container)->as.list), data)) {
16811
+ *container = add_child(parser, *container, CMARK_NODE_LIST,
16812
+ parser->first_nonspace + 1);
16813
+
16814
+ memcpy(&((*container)->as.list), data, sizeof(*data));
16815
+ }
16816
+
16817
+ // add the list item
16818
+ *container = add_child(parser, *container, CMARK_NODE_ITEM,
16819
+ parser->first_nonspace + 1);
16820
+ /* TODO: static */
16821
+ memcpy(&((*container)->as.list), data, sizeof(*data));
16822
+ parser->mem->free(data);
16823
+ } else if (indented && !maybe_lazy && !parser->blank) {
16824
+ S_advance_offset(parser, input, CODE_INDENT, true);
16825
+ *container = add_child(parser, *container, CMARK_NODE_CODE_BLOCK,
16826
+ parser->offset + 1);
16827
+ (*container)->as.code.fenced = false;
16828
+ (*container)->as.code.fence_char = 0;
16829
+ (*container)->as.code.fence_length = 0;
16830
+ (*container)->as.code.fence_offset = 0;
16831
+ (*container)->as.code.info = cmark_chunk_literal("");
16832
+
16833
+ } else {
16834
+ break;
16835
+ }
16836
+
16837
+ if (accepts_lines(S_type(*container))) {
16838
+ // if it's a line container, it can't contain other containers
16839
+ break;
16840
+ }
16841
+
16842
+ cont_type = S_type(*container);
16843
+ maybe_lazy = false;
16844
+ }
16845
+}
16846
+
16847
+static void add_text_to_container(cmark_parser *parser, cmark_node *container,
16848
+ cmark_node *last_matched_container,
16849
+ cmark_chunk *input) {
16850
+ cmark_node *tmp;
16851
+ // what remains at parser->offset is a text line. add the text to the
16852
+ // appropriate container.
16853
+
16854
+ S_find_first_nonspace(parser, input);
16855
+
16856
+ if (parser->blank && container->last_child)
16857
+ S_set_last_line_blank(container->last_child, true);
16858
+
16859
+ // block quote lines are never blank as they start with >
16860
+ // and we don't count blanks in fenced code for purposes of tight/loose
16861
+ // lists or breaking out of lists. we also don't set last_line_blank
16862
+ // on an empty list item.
16863
+ const cmark_node_type ctype = S_type(container);
16864
+ const bool last_line_blank =
16865
+ (parser->blank && ctype != CMARK_NODE_BLOCK_QUOTE &&
16866
+ ctype != CMARK_NODE_HEADING && ctype != CMARK_NODE_THEMATIC_BREAK &&
16867
+ !(ctype == CMARK_NODE_CODE_BLOCK && container->as.code.fenced) &&
16868
+ !(ctype == CMARK_NODE_ITEM && container->first_child == NULL &&
16869
+ container->start_line == parser->line_number));
16870
+
16871
+ S_set_last_line_blank(container, last_line_blank);
16872
+
16873
+ tmp = container;
16874
+ while (tmp->parent) {
16875
+ S_set_last_line_blank(tmp->parent, false);
16876
+ tmp = tmp->parent;
16877
+ }
16878
+
16879
+ // If the last line processed belonged to a paragraph node,
16880
+ // and we didn't match all of the line prefixes for the open containers,
16881
+ // and we didn't start any new containers,
16882
+ // and the line isn't blank,
16883
+ // then treat this as a "lazy continuation line" and add it to
16884
+ // the open paragraph.
16885
+ if (parser->current != last_matched_container &&
16886
+ container == last_matched_container && !parser->blank &&
16887
+ S_type(parser->current) == CMARK_NODE_PARAGRAPH) {
16888
+ add_line(parser->current, input, parser);
16889
+ } else { // not a lazy continuation
16890
+ // Finalize any blocks that were not matched and set cur to container:
16891
+ while (parser->current != last_matched_container) {
16892
+ parser->current = finalize(parser, parser->current);
16893
+ assert(parser->current != NULL);
16894
+ }
16895
+
16896
+ if (S_type(container) == CMARK_NODE_CODE_BLOCK) {
16897
+ add_line(container, input, parser);
16898
+ } else if (S_type(container) == CMARK_NODE_HTML_BLOCK) {
16899
+ add_line(container, input, parser);
16900
+
16901
+ int matches_end_condition;
16902
+ switch (container->as.html_block_type) {
16903
+ case 1:
16904
+ // </script>, </style>, </pre>
16905
+ matches_end_condition =
16906
+ scan_html_block_end_1(input, parser->first_nonspace);
16907
+ break;
16908
+ case 2:
16909
+ // -->
16910
+ matches_end_condition =
16911
+ scan_html_block_end_2(input, parser->first_nonspace);
16912
+ break;
16913
+ case 3:
16914
+ // ?>
16915
+ matches_end_condition =
16916
+ scan_html_block_end_3(input, parser->first_nonspace);
16917
+ break;
16918
+ case 4:
16919
+ // >
16920
+ matches_end_condition =
16921
+ scan_html_block_end_4(input, parser->first_nonspace);
16922
+ break;
16923
+ case 5:
16924
+ // ]]>
16925
+ matches_end_condition =
16926
+ scan_html_block_end_5(input, parser->first_nonspace);
16927
+ break;
16928
+ default:
16929
+ matches_end_condition = 0;
16930
+ break;
16931
+ }
16932
+
16933
+ if (matches_end_condition) {
16934
+ container = finalize(parser, container);
16935
+ assert(parser->current != NULL);
16936
+ }
16937
+ } else if (parser->blank) {
16938
+ // ??? do nothing
16939
+ } else if (accepts_lines(S_type(container))) {
16940
+ if (S_type(container) == CMARK_NODE_HEADING &&
16941
+ container->as.heading.setext == false) {
16942
+ chop_trailing_hashtags(input);
16943
+ }
16944
+ S_advance_offset(parser, input, parser->first_nonspace - parser->offset,
16945
+ false);
16946
+ add_line(container, input, parser);
16947
+ } else {
16948
+ // create paragraph container for line
16949
+ container = add_child(parser, container, CMARK_NODE_PARAGRAPH,
16950
+ parser->first_nonspace + 1);
16951
+ S_advance_offset(parser, input, parser->first_nonspace - parser->offset,
16952
+ false);
16953
+ add_line(container, input, parser);
16954
+ }
16955
+
16956
+ parser->current = container;
16957
+ }
16958
+}
16959
+
16960
+/* See http://spec.commonmark.org/0.24/#phase-1-block-structure */
16961
+static void S_process_line(cmark_parser *parser, const unsigned char *buffer,
16962
+ bufsize_t bytes) {
16963
+ cmark_node *last_matched_container;
16964
+ bool all_matched = true;
16965
+ cmark_node *container;
16966
+ cmark_chunk input;
16967
+
16968
+ if (parser->options & CMARK_OPT_VALIDATE_UTF8)
16969
+ cmark_utf8proc_check(&parser->curline, buffer, bytes);
16970
+ else
16971
+ cmark_strbuf_put(&parser->curline, buffer, bytes);
16972
+
16973
+ // ensure line ends with a newline:
16974
+ if (bytes == 0 || !S_is_line_end_char(parser->curline.ptr[bytes - 1]))
16975
+ cmark_strbuf_putc(&parser->curline, '\n');
16976
+
16977
+ parser->offset = 0;
16978
+ parser->column = 0;
16979
+ parser->blank = false;
16980
+ parser->partially_consumed_tab = false;
16981
+
16982
+ input.data = parser->curline.ptr;
16983
+ input.len = parser->curline.size;
16984
+ input.alloc = 0;
16985
+
16986
+ parser->line_number++;
16987
+
16988
+ last_matched_container = check_open_blocks(parser, &input, &all_matched);
16989
+
16990
+ if (!last_matched_container)
16991
+ goto finished;
16992
+
16993
+ container = last_matched_container;
16994
+
16995
+ open_new_blocks(parser, &container, &input, all_matched);
16996
+
16997
+ add_text_to_container(parser, container, last_matched_container, &input);
16998
+
16999
+finished:
17000
+ parser->last_line_length = input.len;
17001
+ if (parser->last_line_length &&
17002
+ input.data[parser->last_line_length - 1] == '\n')
17003
+ parser->last_line_length -= 1;
17004
+ if (parser->last_line_length &&
17005
+ input.data[parser->last_line_length - 1] == '\r')
17006
+ parser->last_line_length -= 1;
17007
+
17008
+ cmark_strbuf_clear(&parser->curline);
17009
+}
17010
+
17011
+cmark_node *cmark_parser_finish(cmark_parser *parser) {
17012
+ if (parser->linebuf.size) {
17013
+ S_process_line(parser, parser->linebuf.ptr, parser->linebuf.size);
17014
+ cmark_strbuf_clear(&parser->linebuf);
17015
+ }
17016
+
17017
+ finalize_document(parser);
17018
+
17019
+ if (parser->options & CMARK_OPT_NORMALIZE) {
17020
+ cmark_consolidate_text_nodes(parser->root);
17021
+ }
17022
+
17023
+ cmark_strbuf_free(&parser->curline);
17024
+
17025
+#if CMARK_DEBUG_NODES
17026
+ if (cmark_node_check(parser->root, stderr)) {
17027
+ abort();
17028
+ }
17029
+#endif
17030
+ return parser->root;
17031
+}
17032
+
17033
+
17034
+
17035
+const char *cmark_version_string() { return CMARK_VERSION_STRING; }
17036
+
17037
+static void *xcalloc(size_t nmem, size_t size) {
17038
+ void *ptr = calloc(nmem, size);
17039
+ if (!ptr)
17040
+ abort();
17041
+ return ptr;
17042
+}
17043
+
17044
+static void *xrealloc(void *ptr, size_t size) {
17045
+ void *new_ptr = realloc(ptr, size);
17046
+ if (!new_ptr)
17047
+ abort();
17048
+ return new_ptr;
17049
+}
17050
+
17051
+cmark_mem DEFAULT_MEM_ALLOCATOR = {xcalloc, xrealloc, free};
17052
+
17053
+char *cmark_markdown_to_html(const char *text, size_t len, int options) {
17054
+ cmark_node *doc;
17055
+ char *result;
17056
+
17057
+ doc = cmark_parse_document(text, len, options);
17058
+
17059
+ result = cmark_render_html(doc, options);
17060
+ cmark_node_free(doc);
17061
+
17062
+ return result;
17063
+}
17064
+
17065
+
17066
+
17067
+/** 1 = space, 2 = punct, 3 = digit, 4 = alpha, 0 = other
17068
+ */
17069
+static const uint8_t cmark_ctype_class[256] = {
17070
+ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
17071
+ /* 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0,
17072
+ /* 1 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
17073
+ /* 2 */ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
17074
+ /* 3 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2,
17075
+ /* 4 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
17076
+ /* 5 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2,
17077
+ /* 6 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
17078
+ /* 7 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 0,
17079
+ /* 8 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
17080
+ /* 9 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
17081
+ /* a */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
17082
+ /* b */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
17083
+ /* c */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
17084
+ /* d */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
17085
+ /* e */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
17086
+ /* f */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
17087
+
17088
+/**
17089
+ * Returns 1 if c is a "whitespace" character as defined by the spec.
17090
+ */
17091
+int cmark_isspace(char c) { return cmark_ctype_class[(uint8_t)c] == 1; }
17092
+
17093
+/**
17094
+ * Returns 1 if c is an ascii punctuation character.
17095
+ */
17096
+int cmark_ispunct(char c) { return cmark_ctype_class[(uint8_t)c] == 2; }
17097
+
17098
+int cmark_isalnum(char c) {
17099
+ uint8_t result;
17100
+ result = cmark_ctype_class[(uint8_t)c];
17101
+ return (result == 3 || result == 4);
17102
+}
17103
+
17104
+int cmark_isdigit(char c) { return cmark_ctype_class[(uint8_t)c] == 3; }
17105
+
17106
+int cmark_isalpha(char c) { return cmark_ctype_class[(uint8_t)c] == 4; }
17107
+
17108
+
17109
+
17110
+#include <stdarg.h>
17111
+#include <string.h>
17112
+#include <assert.h>
17113
+#include <string.h>
17114
+#include <stdio.h>
17115
+#include <stdlib.h>
17116
+#include <stdint.h>
17117
+#include <limits.h>
17118
+
17119
+
17120
+/* Used as default value for cmark_strbuf->ptr so that people can always
17121
+ * assume ptr is non-NULL and zero terminated even for new cmark_strbufs.
17122
+ */
17123
+unsigned char cmark_strbuf__initbuf[1];
17124
+
17125
+#ifndef MIN
17126
+#define MIN(x, y) ((x < y) ? x : y)
17127
+#endif
17128
+
17129
+void cmark_strbuf_init(cmark_mem *mem, cmark_strbuf *buf,
17130
+ bufsize_t initial_size) {
17131
+ buf->mem = mem;
17132
+ buf->asize = 0;
17133
+ buf->size = 0;
17134
+ buf->ptr = cmark_strbuf__initbuf;
17135
+
17136
+ if (initial_size > 0)
17137
+ cmark_strbuf_grow(buf, initial_size);
17138
+}
17139
+
17140
+static CMARK_INLINE void S_strbuf_grow_by(cmark_strbuf *buf, bufsize_t add) {
17141
+ cmark_strbuf_grow(buf, buf->size + add);
17142
+}
17143
+
17144
+void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) {
17145
+ assert(target_size > 0);
17146
+
17147
+ if (target_size < buf->asize)
17148
+ return;
17149
+
17150
+ if (target_size > (bufsize_t)(INT32_MAX / 2))
17151
+ abort();
17152
+
17153
+ /* Oversize the buffer by 50% to guarantee amortized linear time
17154
+ * complexity on append operations. */
17155
+ bufsize_t new_size = target_size + target_size / 2;
17156
+ new_size += 1;
17157
+ new_size = (new_size + 7) & ~7;
17158
+
17159
+ buf->ptr = (unsigned char *)buf->mem->realloc(buf->asize ? buf->ptr : NULL,
17160
+ new_size);
17161
+ buf->asize = new_size;
17162
+}
17163
+
17164
+bufsize_t cmark_strbuf_len(const cmark_strbuf *buf) { return buf->size; }
17165
+
17166
+void cmark_strbuf_free(cmark_strbuf *buf) {
17167
+ if (!buf)
17168
+ return;
17169
+
17170
+ if (buf->ptr != cmark_strbuf__initbuf)
17171
+ buf->mem->free(buf->ptr);
17172
+
17173
+ cmark_strbuf_init(buf->mem, buf, 0);
17174
+}
17175
+
17176
+void cmark_strbuf_clear(cmark_strbuf *buf) {
17177
+ buf->size = 0;
17178
+
17179
+ if (buf->asize > 0)
17180
+ buf->ptr[0] = '\0';
17181
+}
17182
+
17183
+void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data,
17184
+ bufsize_t len) {
17185
+ if (len <= 0 || data == NULL) {
17186
+ cmark_strbuf_clear(buf);
17187
+ } else {
17188
+ if (data != buf->ptr) {
17189
+ if (len >= buf->asize)
17190
+ cmark_strbuf_grow(buf, len);
17191
+ memmove(buf->ptr, data, len);
17192
+ }
17193
+ buf->size = len;
17194
+ buf->ptr[buf->size] = '\0';
17195
+ }
17196
+}
17197
+
17198
+void cmark_strbuf_sets(cmark_strbuf *buf, const char *string) {
17199
+ cmark_strbuf_set(buf, (const unsigned char *)string,
17200
+ string ? strlen(string) : 0);
17201
+}
17202
+
17203
+void cmark_strbuf_putc(cmark_strbuf *buf, int c) {
17204
+ S_strbuf_grow_by(buf, 1);
17205
+ buf->ptr[buf->size++] = (unsigned char)(c & 0xFF);
17206
+ buf->ptr[buf->size] = '\0';
17207
+}
17208
+
17209
+void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data,
17210
+ bufsize_t len) {
17211
+ if (len <= 0)
17212
+ return;
17213
+
17214
+ S_strbuf_grow_by(buf, len);
17215
+ memmove(buf->ptr + buf->size, data, len);
17216
+ buf->size += len;
17217
+ buf->ptr[buf->size] = '\0';
17218
+}
17219
+
17220
+void cmark_strbuf_puts(cmark_strbuf *buf, const char *string) {
17221
+ cmark_strbuf_put(buf, (const unsigned char *)string, strlen(string));
17222
+}
17223
+
17224
+void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize,
17225
+ const cmark_strbuf *buf) {
17226
+ bufsize_t copylen;
17227
+
17228
+ assert(buf);
17229
+ if (!data || datasize <= 0)
17230
+ return;
17231
+
17232
+ data[0] = '\0';
17233
+
17234
+ if (buf->size == 0 || buf->asize <= 0)
17235
+ return;
17236
+
17237
+ copylen = buf->size;
17238
+ if (copylen > datasize - 1)
17239
+ copylen = datasize - 1;
17240
+ memmove(data, buf->ptr, copylen);
17241
+ data[copylen] = '\0';
17242
+}
17243
+
17244
+void cmark_strbuf_swap(cmark_strbuf *buf_a, cmark_strbuf *buf_b) {
17245
+ cmark_strbuf t = *buf_a;
17246
+ *buf_a = *buf_b;
17247
+ *buf_b = t;
17248
+}
17249
+
17250
+unsigned char *cmark_strbuf_detach(cmark_strbuf *buf) {
17251
+ unsigned char *data = buf->ptr;
17252
+
17253
+ if (buf->asize == 0) {
17254
+ /* return an empty string */
17255
+ return (unsigned char *)buf->mem->calloc(1, 1);
17256
+ }
17257
+
17258
+ cmark_strbuf_init(buf->mem, buf, 0);
17259
+ return data;
17260
+}
17261
+
17262
+int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b) {
17263
+ int result = memcmp(a->ptr, b->ptr, MIN(a->size, b->size));
17264
+ return (result != 0) ? result
17265
+ : (a->size < b->size) ? -1 : (a->size > b->size) ? 1 : 0;
17266
+}
17267
+
17268
+bufsize_t cmark_strbuf_strchr(const cmark_strbuf *buf, int c, bufsize_t pos) {
17269
+ if (pos >= buf->size)
17270
+ return -1;
17271
+ if (pos < 0)
17272
+ pos = 0;
17273
+
17274
+ const unsigned char *p =
17275
+ (unsigned char *)memchr(buf->ptr + pos, c, buf->size - pos);
17276
+ if (!p)
17277
+ return -1;
17278
+
17279
+ return (bufsize_t)(p - (const unsigned char *)buf->ptr);
17280
+}
17281
+
17282
+bufsize_t cmark_strbuf_strrchr(const cmark_strbuf *buf, int c, bufsize_t pos) {
17283
+ if (pos < 0 || buf->size == 0)
17284
+ return -1;
17285
+ if (pos >= buf->size)
17286
+ pos = buf->size - 1;
17287
+
17288
+ bufsize_t i;
17289
+ for (i = pos; i >= 0; i--) {
17290
+ if (buf->ptr[i] == (unsigned char)c)
17291
+ return i;
17292
+ }
17293
+
17294
+ return -1;
17295
+}
17296
+
17297
+void cmark_strbuf_truncate(cmark_strbuf *buf, bufsize_t len) {
17298
+ if (len < 0)
17299
+ len = 0;
17300
+
17301
+ if (len < buf->size) {
17302
+ buf->size = len;
17303
+ buf->ptr[buf->size] = '\0';
17304
+ }
17305
+}
17306
+
17307
+void cmark_strbuf_drop(cmark_strbuf *buf, bufsize_t n) {
17308
+ if (n > 0) {
17309
+ if (n > buf->size)
17310
+ n = buf->size;
17311
+ buf->size = buf->size - n;
17312
+ if (buf->size)
17313
+ memmove(buf->ptr, buf->ptr + n, buf->size);
17314
+
17315
+ buf->ptr[buf->size] = '\0';
17316
+ }
17317
+}
17318
+
17319
+void cmark_strbuf_rtrim(cmark_strbuf *buf) {
17320
+ if (!buf->size)
17321
+ return;
17322
+
17323
+ while (buf->size > 0) {
17324
+ if (!cmark_isspace(buf->ptr[buf->size - 1]))
17325
+ break;
17326
+
17327
+ buf->size--;
17328
+ }
17329
+
17330
+ buf->ptr[buf->size] = '\0';
17331
+}
17332
+
17333
+void cmark_strbuf_trim(cmark_strbuf *buf) {
17334
+ bufsize_t i = 0;
17335
+
17336
+ if (!buf->size)
17337
+ return;
17338
+
17339
+ while (i < buf->size && cmark_isspace(buf->ptr[i]))
17340
+ i++;
17341
+
17342
+ cmark_strbuf_drop(buf, i);
17343
+
17344
+ cmark_strbuf_rtrim(buf);
17345
+}
17346
+
17347
+// Destructively modify string, collapsing consecutive
17348
+// space and newline characters into a single space.
17349
+void cmark_strbuf_normalize_whitespace(cmark_strbuf *s) {
17350
+ bool last_char_was_space = false;
17351
+ bufsize_t r, w;
17352
+
17353
+ for (r = 0, w = 0; r < s->size; ++r) {
17354
+ if (cmark_isspace(s->ptr[r])) {
17355
+ if (!last_char_was_space) {
17356
+ s->ptr[w++] = ' ';
17357
+ last_char_was_space = true;
17358
+ }
17359
+ } else {
17360
+ s->ptr[w++] = s->ptr[r];
17361
+ last_char_was_space = false;
17362
+ }
17363
+ }
17364
+
17365
+ cmark_strbuf_truncate(s, w);
17366
+}
17367
+
17368
+// Destructively unescape a string: remove backslashes before punctuation chars.
17369
+extern void cmark_strbuf_unescape(cmark_strbuf *buf) {
17370
+ bufsize_t r, w;
17371
+
17372
+ for (r = 0, w = 0; r < buf->size; ++r) {
17373
+ if (buf->ptr[r] == '\\' && cmark_ispunct(buf->ptr[r + 1]))
17374
+ r++;
17375
+
17376
+ buf->ptr[w++] = buf->ptr[r];
17377
+ }
17378
+
17379
+ cmark_strbuf_truncate(buf, w);
17380
+}
17381
+
17382
+
17383
+static void S_node_unlink(cmark_node *node);
17384
+
17385
+#define NODE_MEM(node) cmark_node_mem(node)
17386
+
17387
+static CMARK_INLINE bool S_is_block(cmark_node *node) {
17388
+ if (node == NULL) {
17389
+ return false;
17390
+ }
17391
+ return node->type >= CMARK_NODE_FIRST_BLOCK &&
17392
+ node->type <= CMARK_NODE_LAST_BLOCK;
17393
+}
17394
+
17395
+static CMARK_INLINE bool S_is_inline(cmark_node *node) {
17396
+ if (node == NULL) {
17397
+ return false;
17398
+ }
17399
+ return node->type >= CMARK_NODE_FIRST_INLINE &&
17400
+ node->type <= CMARK_NODE_LAST_INLINE;
17401
+}
17402
+
17403
+static bool S_can_contain(cmark_node *node, cmark_node *child) {
17404
+ cmark_node *cur;
17405
+
17406
+ if (node == NULL || child == NULL) {
17407
+ return false;
17408
+ }
17409
+
17410
+ // Verify that child is not an ancestor of node or equal to node.
17411
+ cur = node;
17412
+ do {
17413
+ if (cur == child) {
17414
+ return false;
17415
+ }
17416
+ cur = cur->parent;
17417
+ } while (cur != NULL);
17418
+
17419
+ if (child->type == CMARK_NODE_DOCUMENT) {
17420
+ return false;
17421
+ }
17422
+
17423
+ switch (node->type) {
17424
+ case CMARK_NODE_DOCUMENT:
17425
+ case CMARK_NODE_BLOCK_QUOTE:
17426
+ case CMARK_NODE_ITEM:
17427
+ return S_is_block(child) && child->type != CMARK_NODE_ITEM;
17428
+
17429
+ case CMARK_NODE_LIST:
17430
+ return child->type == CMARK_NODE_ITEM;
17431
+
17432
+ case CMARK_NODE_CUSTOM_BLOCK:
17433
+ return true;
17434
+
17435
+ case CMARK_NODE_PARAGRAPH:
17436
+ case CMARK_NODE_HEADING:
17437
+ case CMARK_NODE_EMPH:
17438
+ case CMARK_NODE_STRONG:
17439
+ case CMARK_NODE_LINK:
17440
+ case CMARK_NODE_IMAGE:
17441
+ case CMARK_NODE_CUSTOM_INLINE:
17442
+ return S_is_inline(child);
17443
+
17444
+ default:
17445
+ break;
17446
+ }
17447
+
17448
+ return false;
17449
+}
17450
+
17451
+cmark_node *cmark_node_new_with_mem(cmark_node_type type, cmark_mem *mem) {
17452
+ cmark_node *node = (cmark_node *)mem->calloc(1, sizeof(*node));
17453
+ cmark_strbuf_init(mem, &node->content, 0);
17454
+ node->type = (uint16_t)type;
17455
+
17456
+ switch (node->type) {
17457
+ case CMARK_NODE_HEADING:
17458
+ node->as.heading.level = 1;
17459
+ break;
17460
+
17461
+ case CMARK_NODE_LIST: {
17462
+ cmark_list *list = &node->as.list;
17463
+ list->list_type = CMARK_BULLET_LIST;
17464
+ list->start = 1;
17465
+ list->tight = false;
17466
+ break;
17467
+ }
17468
+
17469
+ default:
17470
+ break;
17471
+ }
17472
+
17473
+ return node;
17474
+}
17475
+
17476
+cmark_node *cmark_node_new(cmark_node_type type) {
17477
+ extern cmark_mem DEFAULT_MEM_ALLOCATOR;
17478
+ return cmark_node_new_with_mem(type, &DEFAULT_MEM_ALLOCATOR);
17479
+}
17480
+
17481
+// Free a cmark_node list and any children.
17482
+static void S_free_nodes(cmark_node *e) {
17483
+ cmark_node *next;
17484
+ while (e != NULL) {
17485
+ cmark_strbuf_free(&e->content);
17486
+ switch (e->type) {
17487
+ case CMARK_NODE_CODE_BLOCK:
17488
+ cmark_chunk_free(NODE_MEM(e), &e->as.code.info);
17489
+ cmark_chunk_free(NODE_MEM(e), &e->as.code.literal);
17490
+ break;
17491
+ case CMARK_NODE_TEXT:
17492
+ case CMARK_NODE_HTML_INLINE:
17493
+ case CMARK_NODE_CODE:
17494
+ case CMARK_NODE_HTML_BLOCK:
17495
+ cmark_chunk_free(NODE_MEM(e), &e->as.literal);
17496
+ break;
17497
+ case CMARK_NODE_LINK:
17498
+ case CMARK_NODE_IMAGE:
17499
+ cmark_chunk_free(NODE_MEM(e), &e->as.link.url);
17500
+ cmark_chunk_free(NODE_MEM(e), &e->as.link.title);
17501
+ break;
17502
+ case CMARK_NODE_CUSTOM_BLOCK:
17503
+ case CMARK_NODE_CUSTOM_INLINE:
17504
+ cmark_chunk_free(NODE_MEM(e), &e->as.custom.on_enter);
17505
+ cmark_chunk_free(NODE_MEM(e), &e->as.custom.on_exit);
17506
+ break;
17507
+ default:
17508
+ break;
17509
+ }
17510
+ if (e->last_child) {
17511
+ // Splice children into list
17512
+ e->last_child->next = e->next;
17513
+ e->next = e->first_child;
17514
+ }
17515
+ next = e->next;
17516
+ NODE_MEM(e)->free(e);
17517
+ e = next;
17518
+ }
17519
+}
17520
+
17521
+void cmark_node_free(cmark_node *node) {
17522
+ S_node_unlink(node);
17523
+ node->next = NULL;
17524
+ S_free_nodes(node);
17525
+}
17526
+
17527
+cmark_node_type cmark_node_get_type(cmark_node *node) {
17528
+ if (node == NULL) {
17529
+ return CMARK_NODE_NONE;
17530
+ } else {
17531
+ return (cmark_node_type)node->type;
17532
+ }
17533
+}
17534
+
17535
+const char *cmark_node_get_type_string(cmark_node *node) {
17536
+ if (node == NULL) {
17537
+ return "NONE";
17538
+ }
17539
+
17540
+ switch (node->type) {
17541
+ case CMARK_NODE_NONE:
17542
+ return "none";
17543
+ case CMARK_NODE_DOCUMENT:
17544
+ return "document";
17545
+ case CMARK_NODE_BLOCK_QUOTE:
17546
+ return "block_quote";
17547
+ case CMARK_NODE_LIST:
17548
+ return "list";
17549
+ case CMARK_NODE_ITEM:
17550
+ return "item";
17551
+ case CMARK_NODE_CODE_BLOCK:
17552
+ return "code_block";
17553
+ case CMARK_NODE_HTML_BLOCK:
17554
+ return "html_block";
17555
+ case CMARK_NODE_CUSTOM_BLOCK:
17556
+ return "custom_block";
17557
+ case CMARK_NODE_PARAGRAPH:
17558
+ return "paragraph";
17559
+ case CMARK_NODE_HEADING:
17560
+ return "heading";
17561
+ case CMARK_NODE_THEMATIC_BREAK:
17562
+ return "thematic_break";
17563
+ case CMARK_NODE_TEXT:
17564
+ return "text";
17565
+ case CMARK_NODE_SOFTBREAK:
17566
+ return "softbreak";
17567
+ case CMARK_NODE_LINEBREAK:
17568
+ return "linebreak";
17569
+ case CMARK_NODE_CODE:
17570
+ return "code";
17571
+ case CMARK_NODE_HTML_INLINE:
17572
+ return "html_inline";
17573
+ case CMARK_NODE_CUSTOM_INLINE:
17574
+ return "custom_inline";
17575
+ case CMARK_NODE_EMPH:
17576
+ return "emph";
17577
+ case CMARK_NODE_STRONG:
17578
+ return "strong";
17579
+ case CMARK_NODE_LINK:
17580
+ return "link";
17581
+ case CMARK_NODE_IMAGE:
17582
+ return "image";
17583
+ }
17584
+
17585
+ return "<unknown>";
17586
+}
17587
+
17588
+cmark_node *cmark_node_next(cmark_node *node) {
17589
+ if (node == NULL) {
17590
+ return NULL;
17591
+ } else {
17592
+ return node->next;
17593
+ }
17594
+}
17595
+
17596
+cmark_node *cmark_node_previous(cmark_node *node) {
17597
+ if (node == NULL) {
17598
+ return NULL;
17599
+ } else {
17600
+ return node->prev;
17601
+ }
17602
+}
17603
+
17604
+cmark_node *cmark_node_parent(cmark_node *node) {
17605
+ if (node == NULL) {
17606
+ return NULL;
17607
+ } else {
17608
+ return node->parent;
17609
+ }
17610
+}
17611
+
17612
+cmark_node *cmark_node_first_child(cmark_node *node) {
17613
+ if (node == NULL) {
17614
+ return NULL;
17615
+ } else {
17616
+ return node->first_child;
17617
+ }
17618
+}
17619
+
17620
+cmark_node *cmark_node_last_child(cmark_node *node) {
17621
+ if (node == NULL) {
17622
+ return NULL;
17623
+ } else {
17624
+ return node->last_child;
17625
+ }
17626
+}
17627
+
17628
+void *cmark_node_get_user_data(cmark_node *node) {
17629
+ if (node == NULL) {
17630
+ return NULL;
17631
+ } else {
17632
+ return node->user_data;
17633
+ }
17634
+}
17635
+
17636
+int cmark_node_set_user_data(cmark_node *node, void *user_data) {
17637
+ if (node == NULL) {
17638
+ return 0;
17639
+ }
17640
+ node->user_data = user_data;
17641
+ return 1;
17642
+}
17643
+
17644
+const char *cmark_node_get_literal(cmark_node *node) {
17645
+ if (node == NULL) {
17646
+ return NULL;
17647
+ }
17648
+
17649
+ switch (node->type) {
17650
+ case CMARK_NODE_HTML_BLOCK:
17651
+ case CMARK_NODE_TEXT:
17652
+ case CMARK_NODE_HTML_INLINE:
17653
+ case CMARK_NODE_CODE:
17654
+ return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.literal);
17655
+
17656
+ case CMARK_NODE_CODE_BLOCK:
17657
+ return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.code.literal);
17658
+
17659
+ default:
17660
+ break;
17661
+ }
17662
+
17663
+ return NULL;
17664
+}
17665
+
17666
+int cmark_node_set_literal(cmark_node *node, const char *content) {
17667
+ if (node == NULL) {
17668
+ return 0;
17669
+ }
17670
+
17671
+ switch (node->type) {
17672
+ case CMARK_NODE_HTML_BLOCK:
17673
+ case CMARK_NODE_TEXT:
17674
+ case CMARK_NODE_HTML_INLINE:
17675
+ case CMARK_NODE_CODE:
17676
+ cmark_chunk_set_cstr(NODE_MEM(node), &node->as.literal, content);
17677
+ return 1;
17678
+
17679
+ case CMARK_NODE_CODE_BLOCK:
17680
+ cmark_chunk_set_cstr(NODE_MEM(node), &node->as.code.literal, content);
17681
+ return 1;
17682
+
17683
+ default:
17684
+ break;
17685
+ }
17686
+
17687
+ return 0;
17688
+}
17689
+
17690
+int cmark_node_get_heading_level(cmark_node *node) {
17691
+ if (node == NULL) {
17692
+ return 0;
17693
+ }
17694
+
17695
+ switch (node->type) {
17696
+ case CMARK_NODE_HEADING:
17697
+ return node->as.heading.level;
17698
+
17699
+ default:
17700
+ break;
17701
+ }
17702
+
17703
+ return 0;
17704
+}
17705
+
17706
+int cmark_node_set_heading_level(cmark_node *node, int level) {
17707
+ if (node == NULL || level < 1 || level > 6) {
17708
+ return 0;
17709
+ }
17710
+
17711
+ switch (node->type) {
17712
+ case CMARK_NODE_HEADING:
17713
+ node->as.heading.level = level;
17714
+ return 1;
17715
+
17716
+ default:
17717
+ break;
17718
+ }
17719
+
17720
+ return 0;
17721
+}
17722
+
17723
+cmark_list_type cmark_node_get_list_type(cmark_node *node) {
17724
+ if (node == NULL) {
17725
+ return CMARK_NO_LIST;
17726
+ }
17727
+
17728
+ if (node->type == CMARK_NODE_LIST) {
17729
+ return node->as.list.list_type;
17730
+ } else {
17731
+ return CMARK_NO_LIST;
17732
+ }
17733
+}
17734
+
17735
+int cmark_node_set_list_type(cmark_node *node, cmark_list_type type) {
17736
+ if (!(type == CMARK_BULLET_LIST || type == CMARK_ORDERED_LIST)) {
17737
+ return 0;
17738
+ }
17739
+
17740
+ if (node == NULL) {
17741
+ return 0;
17742
+ }
17743
+
17744
+ if (node->type == CMARK_NODE_LIST) {
17745
+ node->as.list.list_type = type;
17746
+ return 1;
17747
+ } else {
17748
+ return 0;
17749
+ }
17750
+}
17751
+
17752
+cmark_delim_type cmark_node_get_list_delim(cmark_node *node) {
17753
+ if (node == NULL) {
17754
+ return CMARK_NO_DELIM;
17755
+ }
17756
+
17757
+ if (node->type == CMARK_NODE_LIST) {
17758
+ return node->as.list.delimiter;
17759
+ } else {
17760
+ return CMARK_NO_DELIM;
17761
+ }
17762
+}
17763
+
17764
+int cmark_node_set_list_delim(cmark_node *node, cmark_delim_type delim) {
17765
+ if (!(delim == CMARK_PERIOD_DELIM || delim == CMARK_PAREN_DELIM)) {
17766
+ return 0;
17767
+ }
17768
+
17769
+ if (node == NULL) {
17770
+ return 0;
17771
+ }
17772
+
17773
+ if (node->type == CMARK_NODE_LIST) {
17774
+ node->as.list.delimiter = delim;
17775
+ return 1;
17776
+ } else {
17777
+ return 0;
17778
+ }
17779
+}
17780
+
17781
+int cmark_node_get_list_start(cmark_node *node) {
17782
+ if (node == NULL) {
17783
+ return 0;
17784
+ }
17785
+
17786
+ if (node->type == CMARK_NODE_LIST) {
17787
+ return node->as.list.start;
17788
+ } else {
17789
+ return 0;
17790
+ }
17791
+}
17792
+
17793
+int cmark_node_set_list_start(cmark_node *node, int start) {
17794
+ if (node == NULL || start < 0) {
17795
+ return 0;
17796
+ }
17797
+
17798
+ if (node->type == CMARK_NODE_LIST) {
17799
+ node->as.list.start = start;
17800
+ return 1;
17801
+ } else {
17802
+ return 0;
17803
+ }
17804
+}
17805
+
17806
+int cmark_node_get_list_tight(cmark_node *node) {
17807
+ if (node == NULL) {
17808
+ return 0;
17809
+ }
17810
+
17811
+ if (node->type == CMARK_NODE_LIST) {
17812
+ return node->as.list.tight;
17813
+ } else {
17814
+ return 0;
17815
+ }
17816
+}
17817
+
17818
+int cmark_node_set_list_tight(cmark_node *node, int tight) {
17819
+ if (node == NULL) {
17820
+ return 0;
17821
+ }
17822
+
17823
+ if (node->type == CMARK_NODE_LIST) {
17824
+ node->as.list.tight = tight == 1;
17825
+ return 1;
17826
+ } else {
17827
+ return 0;
17828
+ }
17829
+}
17830
+
17831
+const char *cmark_node_get_fence_info(cmark_node *node) {
17832
+ if (node == NULL) {
17833
+ return NULL;
17834
+ }
17835
+
17836
+ if (node->type == CMARK_NODE_CODE_BLOCK) {
17837
+ return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.code.info);
17838
+ } else {
17839
+ return NULL;
17840
+ }
17841
+}
17842
+
17843
+int cmark_node_set_fence_info(cmark_node *node, const char *info) {
17844
+ if (node == NULL) {
17845
+ return 0;
17846
+ }
17847
+
17848
+ if (node->type == CMARK_NODE_CODE_BLOCK) {
17849
+ cmark_chunk_set_cstr(NODE_MEM(node), &node->as.code.info, info);
17850
+ return 1;
17851
+ } else {
17852
+ return 0;
17853
+ }
17854
+}
17855
+
17856
+const char *cmark_node_get_url(cmark_node *node) {
17857
+ if (node == NULL) {
17858
+ return NULL;
17859
+ }
17860
+
17861
+ switch (node->type) {
17862
+ case CMARK_NODE_LINK:
17863
+ case CMARK_NODE_IMAGE:
17864
+ return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.link.url);
17865
+ default:
17866
+ break;
17867
+ }
17868
+
17869
+ return NULL;
17870
+}
17871
+
17872
+int cmark_node_set_url(cmark_node *node, const char *url) {
17873
+ if (node == NULL) {
17874
+ return 0;
17875
+ }
17876
+
17877
+ switch (node->type) {
17878
+ case CMARK_NODE_LINK:
17879
+ case CMARK_NODE_IMAGE:
17880
+ cmark_chunk_set_cstr(NODE_MEM(node), &node->as.link.url, url);
17881
+ return 1;
17882
+ default:
17883
+ break;
17884
+ }
17885
+
17886
+ return 0;
17887
+}
17888
+
17889
+const char *cmark_node_get_title(cmark_node *node) {
17890
+ if (node == NULL) {
17891
+ return NULL;
17892
+ }
17893
+
17894
+ switch (node->type) {
17895
+ case CMARK_NODE_LINK:
17896
+ case CMARK_NODE_IMAGE:
17897
+ return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.link.title);
17898
+ default:
17899
+ break;
17900
+ }
17901
+
17902
+ return NULL;
17903
+}
17904
+
17905
+int cmark_node_set_title(cmark_node *node, const char *title) {
17906
+ if (node == NULL) {
17907
+ return 0;
17908
+ }
17909
+
17910
+ switch (node->type) {
17911
+ case CMARK_NODE_LINK:
17912
+ case CMARK_NODE_IMAGE:
17913
+ cmark_chunk_set_cstr(NODE_MEM(node), &node->as.link.title, title);
17914
+ return 1;
17915
+ default:
17916
+ break;
17917
+ }
17918
+
17919
+ return 0;
17920
+}
17921
+
17922
+const char *cmark_node_get_on_enter(cmark_node *node) {
17923
+ if (node == NULL) {
17924
+ return NULL;
17925
+ }
17926
+
17927
+ switch (node->type) {
17928
+ case CMARK_NODE_CUSTOM_INLINE:
17929
+ case CMARK_NODE_CUSTOM_BLOCK:
17930
+ return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.custom.on_enter);
17931
+ default:
17932
+ break;
17933
+ }
17934
+
17935
+ return NULL;
17936
+}
17937
+
17938
+int cmark_node_set_on_enter(cmark_node *node, const char *on_enter) {
17939
+ if (node == NULL) {
17940
+ return 0;
17941
+ }
17942
+
17943
+ switch (node->type) {
17944
+ case CMARK_NODE_CUSTOM_INLINE:
17945
+ case CMARK_NODE_CUSTOM_BLOCK:
17946
+ cmark_chunk_set_cstr(NODE_MEM(node), &node->as.custom.on_enter, on_enter);
17947
+ return 1;
17948
+ default:
17949
+ break;
17950
+ }
17951
+
17952
+ return 0;
17953
+}
17954
+
17955
+const char *cmark_node_get_on_exit(cmark_node *node) {
17956
+ if (node == NULL) {
17957
+ return NULL;
17958
+ }
17959
+
17960
+ switch (node->type) {
17961
+ case CMARK_NODE_CUSTOM_INLINE:
17962
+ case CMARK_NODE_CUSTOM_BLOCK:
17963
+ return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.custom.on_exit);
17964
+ default:
17965
+ break;
17966
+ }
17967
+
17968
+ return NULL;
17969
+}
17970
+
17971
+int cmark_node_set_on_exit(cmark_node *node, const char *on_exit) {
17972
+ if (node == NULL) {
17973
+ return 0;
17974
+ }
17975
+
17976
+ switch (node->type) {
17977
+ case CMARK_NODE_CUSTOM_INLINE:
17978
+ case CMARK_NODE_CUSTOM_BLOCK:
17979
+ cmark_chunk_set_cstr(NODE_MEM(node), &node->as.custom.on_exit, on_exit);
17980
+ return 1;
17981
+ default:
17982
+ break;
17983
+ }
17984
+
17985
+ return 0;
17986
+}
17987
+
17988
+int cmark_node_get_start_line(cmark_node *node) {
17989
+ if (node == NULL) {
17990
+ return 0;
17991
+ }
17992
+ return node->start_line;
17993
+}
17994
+
17995
+int cmark_node_get_start_column(cmark_node *node) {
17996
+ if (node == NULL) {
17997
+ return 0;
17998
+ }
17999
+ return node->start_column;
18000
+}
18001
+
18002
+int cmark_node_get_end_line(cmark_node *node) {
18003
+ if (node == NULL) {
18004
+ return 0;
18005
+ }
18006
+ return node->end_line;
18007
+}
18008
+
18009
+int cmark_node_get_end_column(cmark_node *node) {
18010
+ if (node == NULL) {
18011
+ return 0;
18012
+ }
18013
+ return node->end_column;
18014
+}
18015
+
18016
+// Unlink a node without adjusting its next, prev, and parent pointers.
18017
+static void S_node_unlink(cmark_node *node) {
18018
+ if (node == NULL) {
18019
+ return;
18020
+ }
18021
+
18022
+ if (node->prev) {
18023
+ node->prev->next = node->next;
18024
+ }
18025
+ if (node->next) {
18026
+ node->next->prev = node->prev;
18027
+ }
18028
+
18029
+ // Adjust first_child and last_child of parent.
18030
+ cmark_node *parent = node->parent;
18031
+ if (parent) {
18032
+ if (parent->first_child == node) {
18033
+ parent->first_child = node->next;
18034
+ }
18035
+ if (parent->last_child == node) {
18036
+ parent->last_child = node->prev;
18037
+ }
18038
+ }
18039
+}
18040
+
18041
+void cmark_node_unlink(cmark_node *node) {
18042
+ S_node_unlink(node);
18043
+
18044
+ node->next = NULL;
18045
+ node->prev = NULL;
18046
+ node->parent = NULL;
18047
+}
18048
+
18049
+int cmark_node_insert_before(cmark_node *node, cmark_node *sibling) {
18050
+ if (node == NULL || sibling == NULL) {
18051
+ return 0;
18052
+ }
18053
+
18054
+ if (!node->parent || !S_can_contain(node->parent, sibling)) {
18055
+ return 0;
18056
+ }
18057
+
18058
+ S_node_unlink(sibling);
18059
+
18060
+ cmark_node *old_prev = node->prev;
18061
+
18062
+ // Insert 'sibling' between 'old_prev' and 'node'.
18063
+ if (old_prev) {
18064
+ old_prev->next = sibling;
18065
+ }
18066
+ sibling->prev = old_prev;
18067
+ sibling->next = node;
18068
+ node->prev = sibling;
18069
+
18070
+ // Set new parent.
18071
+ cmark_node *parent = node->parent;
18072
+ sibling->parent = parent;
18073
+
18074
+ // Adjust first_child of parent if inserted as first child.
18075
+ if (parent && !old_prev) {
18076
+ parent->first_child = sibling;
18077
+ }
18078
+
18079
+ return 1;
18080
+}
18081
+
18082
+int cmark_node_insert_after(cmark_node *node, cmark_node *sibling) {
18083
+ if (node == NULL || sibling == NULL) {
18084
+ return 0;
18085
+ }
18086
+
18087
+ if (!node->parent || !S_can_contain(node->parent, sibling)) {
18088
+ return 0;
18089
+ }
18090
+
18091
+ S_node_unlink(sibling);
18092
+
18093
+ cmark_node *old_next = node->next;
18094
+
18095
+ // Insert 'sibling' between 'node' and 'old_next'.
18096
+ if (old_next) {
18097
+ old_next->prev = sibling;
18098
+ }
18099
+ sibling->next = old_next;
18100
+ sibling->prev = node;
18101
+ node->next = sibling;
18102
+
18103
+ // Set new parent.
18104
+ cmark_node *parent = node->parent;
18105
+ sibling->parent = parent;
18106
+
18107
+ // Adjust last_child of parent if inserted as last child.
18108
+ if (parent && !old_next) {
18109
+ parent->last_child = sibling;
18110
+ }
18111
+
18112
+ return 1;
18113
+}
18114
+
18115
+int cmark_node_replace(cmark_node *oldnode, cmark_node *newnode) {
18116
+ if (!cmark_node_insert_before(oldnode, newnode)) {
18117
+ return 0;
18118
+ }
18119
+ cmark_node_unlink(oldnode);
18120
+ return 1;
18121
+}
18122
+
18123
+int cmark_node_prepend_child(cmark_node *node, cmark_node *child) {
18124
+ if (!S_can_contain(node, child)) {
18125
+ return 0;
18126
+ }
18127
+
18128
+ S_node_unlink(child);
18129
+
18130
+ cmark_node *old_first_child = node->first_child;
18131
+
18132
+ child->next = old_first_child;
18133
+ child->prev = NULL;
18134
+ child->parent = node;
18135
+ node->first_child = child;
18136
+
18137
+ if (old_first_child) {
18138
+ old_first_child->prev = child;
18139
+ } else {
18140
+ // Also set last_child if node previously had no children.
18141
+ node->last_child = child;
18142
+ }
18143
+
18144
+ return 1;
18145
+}
18146
+
18147
+int cmark_node_append_child(cmark_node *node, cmark_node *child) {
18148
+ if (!S_can_contain(node, child)) {
18149
+ return 0;
18150
+ }
18151
+
18152
+ S_node_unlink(child);
18153
+
18154
+ cmark_node *old_last_child = node->last_child;
18155
+
18156
+ child->next = NULL;
18157
+ child->prev = old_last_child;
18158
+ child->parent = node;
18159
+ node->last_child = child;
18160
+
18161
+ if (old_last_child) {
18162
+ old_last_child->next = child;
18163
+ } else {
18164
+ // Also set first_child if node previously had no children.
18165
+ node->first_child = child;
18166
+ }
18167
+
18168
+ return 1;
18169
+}
18170
+
18171
+static void S_print_error(FILE *out, cmark_node *node, const char *elem) {
18172
+ if (out == NULL) {
18173
+ return;
18174
+ }
18175
+ fprintf(out, "Invalid '%s' in node type %s at %d:%d\n", elem,
18176
+ cmark_node_get_type_string(node), node->start_line,
18177
+ node->start_column);
18178
+}
18179
+
18180
+int cmark_node_check(cmark_node *node, FILE *out) {
18181
+ cmark_node *cur;
18182
+ int errors = 0;
18183
+
18184
+ if (!node) {
18185
+ return 0;
18186
+ }
18187
+
18188
+ cur = node;
18189
+ for (;;) {
18190
+ if (cur->first_child) {
18191
+ if (cur->first_child->prev != NULL) {
18192
+ S_print_error(out, cur->first_child, "prev");
18193
+ cur->first_child->prev = NULL;
18194
+ ++errors;
18195
+ }
18196
+ if (cur->first_child->parent != cur) {
18197
+ S_print_error(out, cur->first_child, "parent");
18198
+ cur->first_child->parent = cur;
18199
+ ++errors;
18200
+ }
18201
+ cur = cur->first_child;
18202
+ continue;
18203
+ }
18204
+
18205
+ next_sibling:
18206
+ if (cur == node) {
18207
+ break;
18208
+ }
18209
+ if (cur->next) {
18210
+ if (cur->next->prev != cur) {
18211
+ S_print_error(out, cur->next, "prev");
18212
+ cur->next->prev = cur;
18213
+ ++errors;
18214
+ }
18215
+ if (cur->next->parent != cur->parent) {
18216
+ S_print_error(out, cur->next, "parent");
18217
+ cur->next->parent = cur->parent;
18218
+ ++errors;
18219
+ }
18220
+ cur = cur->next;
18221
+ continue;
18222
+ }
18223
+
18224
+ if (cur->parent->last_child != cur) {
18225
+ S_print_error(out, cur->parent, "last_child");
18226
+ cur->parent->last_child = cur;
18227
+ ++errors;
18228
+ }
18229
+ cur = cur->parent;
18230
+ goto next_sibling;
18231
+ }
18232
+
18233
+ return errors;
18234
+}
18235
+
18236
+
18237
+#include "entities.inc"
18238
+
18239
+/* Binary tree lookup code for entities added by JGM */
18240
+
18241
+static const unsigned char *S_lookup(int i, int low, int hi,
18242
+ const unsigned char *s, int len) {
18243
+ int j;
18244
+ int cmp =
18245
+ strncmp((const char *)s, (const char *)cmark_entities[i].entity, len);
18246
+ if (cmp == 0 && cmark_entities[i].entity[len] == 0) {
18247
+ return (const unsigned char *)cmark_entities[i].bytes;
18248
+ } else if (cmp <= 0 && i > low) {
18249
+ j = i - ((i - low) / 2);
18250
+ if (j == i)
18251
+ j -= 1;
18252
+ return S_lookup(j, low, i - 1, s, len);
18253
+ } else if (cmp > 0 && i < hi) {
18254
+ j = i + ((hi - i) / 2);
18255
+ if (j == i)
18256
+ j += 1;
18257
+ return S_lookup(j, i + 1, hi, s, len);
18258
+ } else {
18259
+ return NULL;
18260
+ }
18261
+}
18262
+
18263
+static const unsigned char *S_lookup_entity(const unsigned char *s, int len) {
18264
+ return S_lookup(CMARK_NUM_ENTITIES / 2, 0, CMARK_NUM_ENTITIES - 1, s, len);
18265
+}
18266
+
18267
+bufsize_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src,
18268
+ bufsize_t size) {
18269
+ bufsize_t i = 0;
18270
+
18271
+ if (size >= 3 && src[0] == '#') {
18272
+ int codepoint = 0;
18273
+ int num_digits = 0;
18274
+
18275
+ if (_isdigit(src[1])) {
18276
+ for (i = 1; i < size && _isdigit(src[i]); ++i) {
18277
+ codepoint = (codepoint * 10) + (src[i] - '0');
18278
+
18279
+ if (codepoint >= 0x110000) {
18280
+ // Keep counting digits but
18281
+ // avoid integer overflow.
18282
+ codepoint = 0x110000;
18283
+ }
18284
+ }
18285
+
18286
+ num_digits = i - 1;
18287
+ }
18288
+
18289
+ else if (src[1] == 'x' || src[1] == 'X') {
18290
+ for (i = 2; i < size && _isxdigit(src[i]); ++i) {
18291
+ codepoint = (codepoint * 16) + ((src[i] | 32) % 39 - 9);
18292
+
18293
+ if (codepoint >= 0x110000) {
18294
+ // Keep counting digits but
18295
+ // avoid integer overflow.
18296
+ codepoint = 0x110000;
18297
+ }
18298
+ }
18299
+
18300
+ num_digits = i - 2;
18301
+ }
18302
+
18303
+ if (num_digits >= 1 && num_digits <= 8 && i < size && src[i] == ';') {
18304
+ if (codepoint == 0 || (codepoint >= 0xD800 && codepoint < 0xE000) ||
18305
+ codepoint >= 0x110000) {
18306
+ codepoint = 0xFFFD;
18307
+ }
18308
+ cmark_utf8proc_encode_char(codepoint, ob);
18309
+ return i + 1;
18310
+ }
18311
+ }
18312
+
18313
+ else {
18314
+ if (size > CMARK_ENTITY_MAX_LENGTH)
18315
+ size = CMARK_ENTITY_MAX_LENGTH;
18316
+
18317
+ for (i = CMARK_ENTITY_MIN_LENGTH; i < size; ++i) {
18318
+ if (src[i] == ' ')
18319
+ break;
18320
+
18321
+ if (src[i] == ';') {
18322
+ const unsigned char *entity = S_lookup_entity(src, i);
18323
+
18324
+ if (entity != NULL) {
18325
+ cmark_strbuf_puts(ob, (const char *)entity);
18326
+ return i + 1;
18327
+ }
18328
+
18329
+ break;
18330
+ }
18331
+ }
18332
+ }
18333
+
18334
+ return 0;
18335
+}
18336
+
18337
+int houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src,
18338
+ bufsize_t size) {
18339
+ bufsize_t i = 0, org, ent;
18340
+
18341
+ while (i < size) {
18342
+ org = i;
18343
+ while (i < size && src[i] != '&')
18344
+ i++;
18345
+
18346
+ if (likely(i > org)) {
18347
+ if (unlikely(org == 0)) {
18348
+ if (i >= size)
18349
+ return 0;
18350
+
18351
+ cmark_strbuf_grow(ob, HOUDINI_UNESCAPED_SIZE(size));
18352
+ }
18353
+
18354
+ cmark_strbuf_put(ob, src + org, i - org);
18355
+ }
18356
+
18357
+ /* escaping */
18358
+ if (i >= size)
18359
+ break;
18360
+
18361
+ i++;
18362
+
18363
+ ent = houdini_unescape_ent(ob, src + i, size - i);
18364
+ i += ent;
18365
+
18366
+ /* not really an entity */
18367
+ if (ent == 0)
18368
+ cmark_strbuf_putc(ob, '&');
18369
+ }
18370
+
18371
+ return 1;
18372
+}
18373
+
18374
+void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src,
18375
+ bufsize_t size) {
18376
+ if (!houdini_unescape_html(ob, src, size))
18377
+ cmark_strbuf_put(ob, src, size);
18378
+}
18379
+
18380
+
18381
+static const int S_leaf_mask =
18382
+ (1 << CMARK_NODE_HTML_BLOCK) | (1 << CMARK_NODE_THEMATIC_BREAK) |
18383
+ (1 << CMARK_NODE_CODE_BLOCK) | (1 << CMARK_NODE_TEXT) |
18384
+ (1 << CMARK_NODE_SOFTBREAK) | (1 << CMARK_NODE_LINEBREAK) |
18385
+ (1 << CMARK_NODE_CODE) | (1 << CMARK_NODE_HTML_INLINE);
18386
+
18387
+cmark_iter *cmark_iter_new(cmark_node *root) {
18388
+ if (root == NULL) {
18389
+ return NULL;
18390
+ }
18391
+ cmark_mem *mem = root->content.mem;
18392
+ cmark_iter *iter = (cmark_iter *)mem->calloc(1, sizeof(cmark_iter));
18393
+ iter->mem = mem;
18394
+ iter->root = root;
18395
+ iter->cur.ev_type = CMARK_EVENT_NONE;
18396
+ iter->cur.node = NULL;
18397
+ iter->next.ev_type = CMARK_EVENT_ENTER;
18398
+ iter->next.node = root;
18399
+ return iter;
18400
+}
18401
+
18402
+void cmark_iter_free(cmark_iter *iter) { iter->mem->free(iter); }
18403
+
18404
+static bool S_is_leaf(cmark_node *node) {
18405
+ return ((1 << node->type) & S_leaf_mask) != 0;
18406
+}
18407
+
18408
+cmark_event_type cmark_iter_next(cmark_iter *iter) {
18409
+ cmark_event_type ev_type = iter->next.ev_type;
18410
+ cmark_node *node = iter->next.node;
18411
+
18412
+ iter->cur.ev_type = ev_type;
18413
+ iter->cur.node = node;
18414
+
18415
+ if (ev_type == CMARK_EVENT_DONE) {
18416
+ return ev_type;
18417
+ }
18418
+
18419
+ /* roll forward to next item, setting both fields */
18420
+ if (ev_type == CMARK_EVENT_ENTER && !S_is_leaf(node)) {
18421
+ if (node->first_child == NULL) {
18422
+ /* stay on this node but exit */
18423
+ iter->next.ev_type = CMARK_EVENT_EXIT;
18424
+ } else {
18425
+ iter->next.ev_type = CMARK_EVENT_ENTER;
18426
+ iter->next.node = node->first_child;
18427
+ }
18428
+ } else if (node == iter->root) {
18429
+ /* don't move past root */
18430
+ iter->next.ev_type = CMARK_EVENT_DONE;
18431
+ iter->next.node = NULL;
18432
+ } else if (node->next) {
18433
+ iter->next.ev_type = CMARK_EVENT_ENTER;
18434
+ iter->next.node = node->next;
18435
+ } else if (node->parent) {
18436
+ iter->next.ev_type = CMARK_EVENT_EXIT;
18437
+ iter->next.node = node->parent;
18438
+ } else {
18439
+ assert(false);
18440
+ iter->next.ev_type = CMARK_EVENT_DONE;
18441
+ iter->next.node = NULL;
18442
+ }
18443
+
18444
+ return ev_type;
18445
+}
18446
+
18447
+void cmark_iter_reset(cmark_iter *iter, cmark_node *current,
18448
+ cmark_event_type event_type) {
18449
+ iter->next.ev_type = event_type;
18450
+ iter->next.node = current;
18451
+ cmark_iter_next(iter);
18452
+}
18453
+
18454
+cmark_node *cmark_iter_get_node(cmark_iter *iter) { return iter->cur.node; }
18455
+
18456
+cmark_event_type cmark_iter_get_event_type(cmark_iter *iter) {
18457
+ return iter->cur.ev_type;
18458
+}
18459
+
18460
+cmark_node *cmark_iter_get_root(cmark_iter *iter) { return iter->root; }
18461
+
18462
+void cmark_consolidate_text_nodes(cmark_node *root) {
18463
+ if (root == NULL) {
18464
+ return;
18465
+ }
18466
+ cmark_iter *iter = cmark_iter_new(root);
18467
+ cmark_strbuf buf = CMARK_BUF_INIT(iter->mem);
18468
+ cmark_event_type ev_type;
18469
+ cmark_node *cur, *tmp, *next;
18470
+
18471
+ while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
18472
+ cur = cmark_iter_get_node(iter);
18473
+ if (ev_type == CMARK_EVENT_ENTER && cur->type == CMARK_NODE_TEXT &&
18474
+ cur->next && cur->next->type == CMARK_NODE_TEXT) {
18475
+ cmark_strbuf_clear(&buf);
18476
+ cmark_strbuf_put(&buf, cur->as.literal.data, cur->as.literal.len);
18477
+ tmp = cur->next;
18478
+ while (tmp && tmp->type == CMARK_NODE_TEXT) {
18479
+ cmark_iter_next(iter); // advance pointer
18480
+ cmark_strbuf_put(&buf, tmp->as.literal.data, tmp->as.literal.len);
18481
+ next = tmp->next;
18482
+ cmark_node_free(tmp);
18483
+ tmp = next;
18484
+ }
18485
+ cmark_chunk_free(iter->mem, &cur->as.literal);
18486
+ cur->as.literal = cmark_chunk_buf_detach(&buf);
18487
+ }
18488
+ }
18489
+
18490
+ cmark_strbuf_free(&buf);
18491
+ cmark_iter_free(iter);
18492
+}
18493
+
18494
+
18495
+#define BUFFER_SIZE 100
18496
+
18497
+// Functions to convert cmark_nodes to HTML strings.
18498
+
18499
+static void escape_html(cmark_strbuf *dest, const unsigned char *source,
18500
+ bufsize_t length) {
18501
+ houdini_escape_html0(dest, source, length, 0);
18502
+}
18503
+
18504
+static CMARK_INLINE void cr(cmark_strbuf *html) {
18505
+ if (html->size && html->ptr[html->size - 1] != '\n')
18506
+ cmark_strbuf_putc(html, '\n');
18507
+}
18508
+
18509
+struct render_state {
18510
+ cmark_strbuf *html;
18511
+ cmark_node *plain;
18512
+};
18513
+
18514
+static void S_render_sourcepos(cmark_node *node, cmark_strbuf *html,
18515
+ int options) {
18516
+ char buffer[BUFFER_SIZE];
18517
+ if (CMARK_OPT_SOURCEPOS & options) {
18518
+ snprintf(buffer, BUFFER_SIZE, " data-sourcepos=\"%d:%d-%d:%d\"",
18519
+ cmark_node_get_start_line(node), cmark_node_get_start_column(node),
18520
+ cmark_node_get_end_line(node), cmark_node_get_end_column(node));
18521
+ cmark_strbuf_puts(html, buffer);
18522
+ }
18523
+}
18524
+
18525
+static int S_render_node(cmark_node *node, cmark_event_type ev_type,
18526
+ struct render_state *state, int options) {
18527
+ cmark_node *parent;
18528
+ cmark_node *grandparent;
18529
+ cmark_strbuf *html = state->html;
18530
+ char start_heading[] = "<h0";
18531
+ char end_heading[] = "</h0";
18532
+ bool tight;
18533
+ char buffer[BUFFER_SIZE];
18534
+
18535
+ bool entering = (ev_type == CMARK_EVENT_ENTER);
18536
+
18537
+ if (state->plain == node) { // back at original node
18538
+ state->plain = NULL;
18539
+ }
18540
+
18541
+ if (state->plain != NULL) {
18542
+ switch (node->type) {
18543
+ case CMARK_NODE_TEXT:
18544
+ case CMARK_NODE_CODE:
18545
+ case CMARK_NODE_HTML_INLINE:
18546
+ escape_html(html, node->as.literal.data, node->as.literal.len);
18547
+ break;
18548
+
18549
+ case CMARK_NODE_LINEBREAK:
18550
+ case CMARK_NODE_SOFTBREAK:
18551
+ cmark_strbuf_putc(html, ' ');
18552
+ break;
18553
+
18554
+ default:
18555
+ break;
18556
+ }
18557
+ return 1;
18558
+ }
18559
+
18560
+ switch (node->type) {
18561
+ case CMARK_NODE_DOCUMENT:
18562
+ break;
18563
+
18564
+ case CMARK_NODE_BLOCK_QUOTE:
18565
+ if (entering) {
18566
+ cr(html);
18567
+ cmark_strbuf_puts(html, "<blockquote");
18568
+ S_render_sourcepos(node, html, options);
18569
+ cmark_strbuf_puts(html, ">\n");
18570
+ } else {
18571
+ cr(html);
18572
+ cmark_strbuf_puts(html, "</blockquote>\n");
18573
+ }
18574
+ break;
18575
+
18576
+ case CMARK_NODE_LIST: {
18577
+ cmark_list_type list_type = node->as.list.list_type;
18578
+ int start = node->as.list.start;
18579
+
18580
+ if (entering) {
18581
+ cr(html);
18582
+ if (list_type == CMARK_BULLET_LIST) {
18583
+ cmark_strbuf_puts(html, "<ul");
18584
+ S_render_sourcepos(node, html, options);
18585
+ cmark_strbuf_puts(html, ">\n");
18586
+ } else if (start == 1) {
18587
+ cmark_strbuf_puts(html, "<ol");
18588
+ S_render_sourcepos(node, html, options);
18589
+ cmark_strbuf_puts(html, ">\n");
18590
+ } else {
18591
+ snprintf(buffer, BUFFER_SIZE, "<ol start=\"%d\"", start);
18592
+ cmark_strbuf_puts(html, buffer);
18593
+ S_render_sourcepos(node, html, options);
18594
+ cmark_strbuf_puts(html, ">\n");
18595
+ }
18596
+ } else {
18597
+ cmark_strbuf_puts(html,
18598
+ list_type == CMARK_BULLET_LIST ? "</ul>\n" : "</ol>\n");
18599
+ }
18600
+ break;
18601
+ }
18602
+
18603
+ case CMARK_NODE_ITEM:
18604
+ if (entering) {
18605
+ cr(html);
18606
+ cmark_strbuf_puts(html, "<li");
18607
+ S_render_sourcepos(node, html, options);
18608
+ cmark_strbuf_putc(html, '>');
18609
+ } else {
18610
+ cmark_strbuf_puts(html, "</li>\n");
18611
+ }
18612
+ break;
18613
+
18614
+ case CMARK_NODE_HEADING:
18615
+ if (entering) {
18616
+ cr(html);
18617
+ start_heading[2] = (char)('0' + node->as.heading.level);
18618
+ cmark_strbuf_puts(html, start_heading);
18619
+ S_render_sourcepos(node, html, options);
18620
+ cmark_strbuf_putc(html, '>');
18621
+ } else {
18622
+ end_heading[3] = (char)('0' + node->as.heading.level);
18623
+ cmark_strbuf_puts(html, end_heading);
18624
+ cmark_strbuf_puts(html, ">\n");
18625
+ }
18626
+ break;
18627
+
18628
+ case CMARK_NODE_CODE_BLOCK:
18629
+ cr(html);
18630
+
18631
+ if (node->as.code.info.len == 0) {
18632
+ cmark_strbuf_puts(html, "<pre");
18633
+ S_render_sourcepos(node, html, options);
18634
+ cmark_strbuf_puts(html, "><code>");
18635
+ } else {
18636
+ bufsize_t first_tag = 0;
18637
+ while (first_tag < node->as.code.info.len &&
18638
+ !cmark_isspace(node->as.code.info.data[first_tag])) {
18639
+ first_tag += 1;
18640
+ }
18641
+
18642
+ cmark_strbuf_puts(html, "<pre");
18643
+ S_render_sourcepos(node, html, options);
18644
+ cmark_strbuf_puts(html, "><code class=\"language-");
18645
+ escape_html(html, node->as.code.info.data, first_tag);
18646
+ cmark_strbuf_puts(html, "\">");
18647
+ }
18648
+
18649
+ escape_html(html, node->as.code.literal.data, node->as.code.literal.len);
18650
+ cmark_strbuf_puts(html, "</code></pre>\n");
18651
+ break;
18652
+
18653
+ case CMARK_NODE_HTML_BLOCK:
18654
+ cr(html);
18655
+ if (options & CMARK_OPT_SAFE) {
18656
+ cmark_strbuf_puts(html, "<!-- raw HTML omitted -->");
18657
+ } else {
18658
+ cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len);
18659
+ }
18660
+ cr(html);
18661
+ break;
18662
+
18663
+ case CMARK_NODE_CUSTOM_BLOCK:
18664
+ cr(html);
18665
+ if (entering) {
18666
+ cmark_strbuf_put(html, node->as.custom.on_enter.data,
18667
+ node->as.custom.on_enter.len);
18668
+ } else {
18669
+ cmark_strbuf_put(html, node->as.custom.on_exit.data,
18670
+ node->as.custom.on_exit.len);
18671
+ }
18672
+ cr(html);
18673
+ break;
18674
+
18675
+ case CMARK_NODE_THEMATIC_BREAK:
18676
+ cr(html);
18677
+ cmark_strbuf_puts(html, "<hr");
18678
+ S_render_sourcepos(node, html, options);
18679
+ cmark_strbuf_puts(html, " />\n");
18680
+ break;
18681
+
18682
+ case CMARK_NODE_PARAGRAPH:
18683
+ parent = cmark_node_parent(node);
18684
+ grandparent = cmark_node_parent(parent);
18685
+ if (grandparent != NULL && grandparent->type == CMARK_NODE_LIST) {
18686
+ tight = grandparent->as.list.tight;
18687
+ } else {
18688
+ tight = false;
18689
+ }
18690
+ if (!tight) {
18691
+ if (entering) {
18692
+ cr(html);
18693
+ cmark_strbuf_puts(html, "<p");
18694
+ S_render_sourcepos(node, html, options);
18695
+ cmark_strbuf_putc(html, '>');
18696
+ } else {
18697
+ cmark_strbuf_puts(html, "</p>\n");
18698
+ }
18699
+ }
18700
+ break;
18701
+
18702
+ case CMARK_NODE_TEXT:
18703
+ escape_html(html, node->as.literal.data, node->as.literal.len);
18704
+ break;
18705
+
18706
+ case CMARK_NODE_LINEBREAK:
18707
+ cmark_strbuf_puts(html, "<br />\n");
18708
+ break;
18709
+
18710
+ case CMARK_NODE_SOFTBREAK:
18711
+ if (options & CMARK_OPT_HARDBREAKS) {
18712
+ cmark_strbuf_puts(html, "<br />\n");
18713
+ } else if (options & CMARK_OPT_NOBREAKS) {
18714
+ cmark_strbuf_putc(html, ' ');
18715
+ } else {
18716
+ cmark_strbuf_putc(html, '\n');
18717
+ }
18718
+ break;
18719
+
18720
+ case CMARK_NODE_CODE:
18721
+ cmark_strbuf_puts(html, "<code>");
18722
+ escape_html(html, node->as.literal.data, node->as.literal.len);
18723
+ cmark_strbuf_puts(html, "</code>");
18724
+ break;
18725
+
18726
+ case CMARK_NODE_HTML_INLINE:
18727
+ if (options & CMARK_OPT_SAFE) {
18728
+ cmark_strbuf_puts(html, "<!-- raw HTML omitted -->");
18729
+ } else {
18730
+ cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len);
18731
+ }
18732
+ break;
18733
+
18734
+ case CMARK_NODE_CUSTOM_INLINE:
18735
+ if (entering) {
18736
+ cmark_strbuf_put(html, node->as.custom.on_enter.data,
18737
+ node->as.custom.on_enter.len);
18738
+ } else {
18739
+ cmark_strbuf_put(html, node->as.custom.on_exit.data,
18740
+ node->as.custom.on_exit.len);
18741
+ }
18742
+ break;
18743
+
18744
+ case CMARK_NODE_STRONG:
18745
+ if (entering) {
18746
+ cmark_strbuf_puts(html, "<strong>");
18747
+ } else {
18748
+ cmark_strbuf_puts(html, "</strong>");
18749
+ }
18750
+ break;
18751
+
18752
+ case CMARK_NODE_EMPH:
18753
+ if (entering) {
18754
+ cmark_strbuf_puts(html, "<em>");
18755
+ } else {
18756
+ cmark_strbuf_puts(html, "</em>");
18757
+ }
18758
+ break;
18759
+
18760
+ case CMARK_NODE_LINK:
18761
+ if (entering) {
18762
+ cmark_strbuf_puts(html, "<a href=\"");
18763
+ if (!((options & CMARK_OPT_SAFE) &&
18764
+ scan_dangerous_url(&node->as.link.url, 0))) {
18765
+ houdini_escape_href(html, node->as.link.url.data,
18766
+ node->as.link.url.len);
18767
+ }
18768
+ if (node->as.link.title.len) {
18769
+ cmark_strbuf_puts(html, "\" title=\"");
18770
+ escape_html(html, node->as.link.title.data, node->as.link.title.len);
18771
+ }
18772
+ cmark_strbuf_puts(html, "\">");
18773
+ } else {
18774
+ cmark_strbuf_puts(html, "</a>");
18775
+ }
18776
+ break;
18777
+
18778
+ case CMARK_NODE_IMAGE:
18779
+ if (entering) {
18780
+ cmark_strbuf_puts(html, "<img src=\"");
18781
+ if (!((options & CMARK_OPT_SAFE) &&
18782
+ scan_dangerous_url(&node->as.link.url, 0))) {
18783
+ houdini_escape_href(html, node->as.link.url.data,
18784
+ node->as.link.url.len);
18785
+ }
18786
+ cmark_strbuf_puts(html, "\" alt=\"");
18787
+ state->plain = node;
18788
+ } else {
18789
+ if (node->as.link.title.len) {
18790
+ cmark_strbuf_puts(html, "\" title=\"");
18791
+ escape_html(html, node->as.link.title.data, node->as.link.title.len);
18792
+ }
18793
+
18794
+ cmark_strbuf_puts(html, "\" />");
18795
+ }
18796
+ break;
18797
+
18798
+ default:
18799
+ assert(false);
18800
+ break;
18801
+ }
18802
+
18803
+ // cmark_strbuf_putc(html, 'x');
18804
+ return 1;
18805
+}
18806
+
18807
+char *cmark_render_html(cmark_node *root, int options) {
18808
+ char *result;
18809
+ cmark_strbuf html = CMARK_BUF_INIT(cmark_node_mem(root));
18810
+ cmark_event_type ev_type;
18811
+ cmark_node *cur;
18812
+ struct render_state state = {&html, NULL};
18813
+ cmark_iter *iter = cmark_iter_new(root);
18814
+
18815
+ while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
18816
+ cur = cmark_iter_get_node(iter);
18817
+ S_render_node(cur, ev_type, &state, options);
18818
+ }
18819
+ result = (char *)cmark_strbuf_detach(&html);
18820
+
18821
+ cmark_iter_free(iter);
18822
+ return result;
18823
+}
18824
+
18825
+
18826
+
18827
+/**
18828
+ * According to the OWASP rules:
18829
+ *
18830
+ * & --> &amp;
18831
+ * < --> &lt;
18832
+ * > --> &gt;
18833
+ * " --> &quot;
18834
+ * ' --> &#x27; &apos; is not recommended
18835
+ * / --> &#x2F; forward slash is included as it helps end an HTML entity
18836
+ *
18837
+ */
18838
+static const char HTML_ESCAPE_TABLE[] = {
18839
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18840
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 4,
18841
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18842
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18843
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18844
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18845
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18846
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18847
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18848
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18849
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18850
+};
18851
+
18852
+static const char *HTML_ESCAPES[] = {"", "&quot;", "&amp;", "&#39;",
18853
+ "&#47;", "&lt;", "&gt;"};
18854
+
18855
+int houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src, bufsize_t size,
18856
+ int secure) {
18857
+ bufsize_t i = 0, org, esc = 0;
18858
+
18859
+ while (i < size) {
18860
+ org = i;
18861
+ while (i < size && (esc = HTML_ESCAPE_TABLE[src[i]]) == 0)
18862
+ i++;
18863
+
18864
+ if (i > org)
18865
+ cmark_strbuf_put(ob, src + org, i - org);
18866
+
18867
+ /* escaping */
18868
+ if (unlikely(i >= size))
18869
+ break;
18870
+
18871
+ /* The forward slash is only escaped in secure mode */
18872
+ if ((src[i] == '/' || src[i] == '\'') && !secure) {
18873
+ cmark_strbuf_putc(ob, src[i]);
18874
+ } else {
18875
+ cmark_strbuf_puts(ob, HTML_ESCAPES[esc]);
18876
+ }
18877
+
18878
+ i++;
18879
+ }
18880
+
18881
+ return 1;
18882
+}
18883
+
18884
+int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) {
18885
+ return houdini_escape_html0(ob, src, size, 1);
18886
+}
18887
+
18888
+
18889
+/*
18890
+ * The following characters will not be escaped:
18891
+ *
18892
+ * -_.+!*'(),%#@?=;:/,+&$ alphanum
18893
+ *
18894
+ * Note that this character set is the addition of:
18895
+ *
18896
+ * - The characters which are safe to be in an URL
18897
+ * - The characters which are *not* safe to be in
18898
+ * an URL because they are RESERVED characters.
18899
+ *
18900
+ * We asume (lazily) that any RESERVED char that
18901
+ * appears inside an URL is actually meant to
18902
+ * have its native function (i.e. as an URL
18903
+ * component/separator) and hence needs no escaping.
18904
+ *
18905
+ * There are two exceptions: the chacters & (amp)
18906
+ * and ' (single quote) do not appear in the table.
18907
+ * They are meant to appear in the URL as components,
18908
+ * yet they require special HTML-entity escaping
18909
+ * to generate valid HTML markup.
18910
+ *
18911
+ * All other characters will be escaped to %XX.
18912
+ *
18913
+ */
18914
+static const char HREF_SAFE[] = {
18915
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18916
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
18917
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
18918
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,
18919
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
18920
+ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18921
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18922
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18923
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18924
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18925
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18926
+};
18927
+
18928
+int houdini_escape_href(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) {
18929
+ static const uint8_t hex_chars[] = "0123456789ABCDEF";
18930
+ bufsize_t i = 0, org;
18931
+ uint8_t hex_str[3];
18932
+
18933
+ hex_str[0] = '%';
18934
+
18935
+ while (i < size) {
18936
+ org = i;
18937
+ while (i < size && HREF_SAFE[src[i]] != 0)
18938
+ i++;
18939
+
18940
+ if (likely(i > org))
18941
+ cmark_strbuf_put(ob, src + org, i - org);
18942
+
18943
+ /* escaping */
18944
+ if (i >= size)
18945
+ break;
18946
+
18947
+ switch (src[i]) {
18948
+ /* amp appears all the time in URLs, but needs
18949
+ * HTML-entity escaping to be inside an href */
18950
+ case '&':
18951
+ cmark_strbuf_puts(ob, "&amp;");
18952
+ break;
18953
+
18954
+ /* the single quote is a valid URL character
18955
+ * according to the standard; it needs HTML
18956
+ * entity escaping too */
18957
+ case '\'':
18958
+ cmark_strbuf_puts(ob, "&#x27;");
18959
+ break;
18960
+
18961
+/* the space can be escaped to %20 or a plus
18962
+ * sign. we're going with the generic escape
18963
+ * for now. the plus thing is more commonly seen
18964
+ * when building GET strings */
18965
+#if 0
18966
+ case ' ':
18967
+ cmark_strbuf_putc(ob, '+');
18968
+ break;
18969
+#endif
18970
+
18971
+ /* every other character goes with a %XX escaping */
18972
+ default:
18973
+ hex_str[1] = hex_chars[(src[i] >> 4) & 0xF];
18974
+ hex_str[2] = hex_chars[src[i] & 0xF];
18975
+ cmark_strbuf_put(ob, hex_str, 3);
18976
+ }
18977
+
18978
+ i++;
18979
+ }
18980
+
18981
+ return 1;
18982
+}
--- a/src/cmark_amalgamation.c
+++ b/src/cmark_amalgamation.c
@@ -0,0 +1,18982 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/src/cmark_amalgamation.c
+++ b/src/cmark_amalgamation.c
@@ -0,0 +1,18982 @@
1 #include <stdlib.h>
2 #include <assert.h>
3 #include <stdio.h>
4 #include "cmark_amalgamation.h"
5
6 int cmark_version() { return CMARK_VERSION; }
7
8 /* Generated by re2c 0.16 */
9 bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c,
10 bufsize_t offset) {
11 bufsize_t res;
12 unsigned char *ptr = (unsigned char *)c->data;
13
14 if (ptr == NULL || offset > c->len) {
15 return 0;
16 } else {
17 unsigned char lim = ptr[c->len];
18
19 ptr[c->len] = '\0';
20 res = scanner(ptr + offset);
21 ptr[c->len] = lim;
22 }
23
24 return res;
25 }
26
27 // Try to match a scheme including colon.
28 bufsize_t _scan_scheme(const unsigned char *p) {
29 const unsigned char *marker = NULL;
30 const unsigned char *start = p;
31
32 {
33 unsigned char yych;
34 yych = *p;
35 if (yych <= '@')
36 goto yy2;
37 if (yych <= 'Z')
38 goto yy4;
39 if (yych <= '`')
40 goto yy2;
41 if (yych <= 'z')
42 goto yy4;
43 yy2:
44 ++p;
45 yy3 : { return 0; }
46 yy4:
47 yych = *(marker = ++p);
48 if (yych <= '/') {
49 if (yych <= '+') {
50 if (yych <= '*')
51 goto yy3;
52 } else {
53 if (yych <= ',')
54 goto yy3;
55 if (yych >= '/')
56 goto yy3;
57 }
58 } else {
59 if (yych <= 'Z') {
60 if (yych <= '9')
61 goto yy5;
62 if (yych <= '@')
63 goto yy3;
64 } else {
65 if (yych <= '`')
66 goto yy3;
67 if (yych >= '{')
68 goto yy3;
69 }
70 }
71 yy5:
72 yych = *++p;
73 if (yych <= '9') {
74 if (yych <= ',') {
75 if (yych == '+')
76 goto yy7;
77 } else {
78 if (yych != '/')
79 goto yy7;
80 }
81 } else {
82 if (yych <= 'Z') {
83 if (yych <= ':')
84 goto yy8;
85 if (yych >= 'A')
86 goto yy7;
87 } else {
88 if (yych <= '`')
89 goto yy6;
90 if (yych <= 'z')
91 goto yy7;
92 }
93 }
94 yy6:
95 p = marker;
96 goto yy3;
97 yy7:
98 yych = *++p;
99 if (yych <= '9') {
100 if (yych <= ',') {
101 if (yych == '+')
102 goto yy10;
103 goto yy6;
104 } else {
105 if (yych == '/')
106 goto yy6;
107 goto yy10;
108 }
109 } else {
110 if (yych <= 'Z') {
111 if (yych <= ':')
112 goto yy8;
113 if (yych <= '@')
114 goto yy6;
115 goto yy10;
116 } else {
117 if (yych <= '`')
118 goto yy6;
119 if (yych <= 'z')
120 goto yy10;
121 goto yy6;
122 }
123 }
124 yy8:
125 ++p;
126 { return (bufsize_t)(p - start); }
127 yy10:
128 yych = *++p;
129 if (yych <= '9') {
130 if (yych <= ',') {
131 if (yych != '+')
132 goto yy6;
133 } else {
134 if (yych == '/')
135 goto yy6;
136 }
137 } else {
138 if (yych <= 'Z') {
139 if (yych <= ':')
140 goto yy8;
141 if (yych <= '@')
142 goto yy6;
143 } else {
144 if (yych <= '`')
145 goto yy6;
146 if (yych >= '{')
147 goto yy6;
148 }
149 }
150 yych = *++p;
151 if (yych <= '9') {
152 if (yych <= ',') {
153 if (yych != '+')
154 goto yy6;
155 } else {
156 if (yych == '/')
157 goto yy6;
158 }
159 } else {
160 if (yych <= 'Z') {
161 if (yych <= ':')
162 goto yy8;
163 if (yych <= '@')
164 goto yy6;
165 } else {
166 if (yych <= '`')
167 goto yy6;
168 if (yych >= '{')
169 goto yy6;
170 }
171 }
172 yych = *++p;
173 if (yych <= '9') {
174 if (yych <= ',') {
175 if (yych != '+')
176 goto yy6;
177 } else {
178 if (yych == '/')
179 goto yy6;
180 }
181 } else {
182 if (yych <= 'Z') {
183 if (yych <= ':')
184 goto yy8;
185 if (yych <= '@')
186 goto yy6;
187 } else {
188 if (yych <= '`')
189 goto yy6;
190 if (yych >= '{')
191 goto yy6;
192 }
193 }
194 yych = *++p;
195 if (yych <= '9') {
196 if (yych <= ',') {
197 if (yych != '+')
198 goto yy6;
199 } else {
200 if (yych == '/')
201 goto yy6;
202 }
203 } else {
204 if (yych <= 'Z') {
205 if (yych <= ':')
206 goto yy8;
207 if (yych <= '@')
208 goto yy6;
209 } else {
210 if (yych <= '`')
211 goto yy6;
212 if (yych >= '{')
213 goto yy6;
214 }
215 }
216 yych = *++p;
217 if (yych <= '9') {
218 if (yych <= ',') {
219 if (yych != '+')
220 goto yy6;
221 } else {
222 if (yych == '/')
223 goto yy6;
224 }
225 } else {
226 if (yych <= 'Z') {
227 if (yych <= ':')
228 goto yy8;
229 if (yych <= '@')
230 goto yy6;
231 } else {
232 if (yych <= '`')
233 goto yy6;
234 if (yych >= '{')
235 goto yy6;
236 }
237 }
238 yych = *++p;
239 if (yych <= '9') {
240 if (yych <= ',') {
241 if (yych != '+')
242 goto yy6;
243 } else {
244 if (yych == '/')
245 goto yy6;
246 }
247 } else {
248 if (yych <= 'Z') {
249 if (yych <= ':')
250 goto yy8;
251 if (yych <= '@')
252 goto yy6;
253 } else {
254 if (yych <= '`')
255 goto yy6;
256 if (yych >= '{')
257 goto yy6;
258 }
259 }
260 yych = *++p;
261 if (yych <= '9') {
262 if (yych <= ',') {
263 if (yych != '+')
264 goto yy6;
265 } else {
266 if (yych == '/')
267 goto yy6;
268 }
269 } else {
270 if (yych <= 'Z') {
271 if (yych <= ':')
272 goto yy8;
273 if (yych <= '@')
274 goto yy6;
275 } else {
276 if (yych <= '`')
277 goto yy6;
278 if (yych >= '{')
279 goto yy6;
280 }
281 }
282 yych = *++p;
283 if (yych <= '9') {
284 if (yych <= ',') {
285 if (yych != '+')
286 goto yy6;
287 } else {
288 if (yych == '/')
289 goto yy6;
290 }
291 } else {
292 if (yych <= 'Z') {
293 if (yych <= ':')
294 goto yy8;
295 if (yych <= '@')
296 goto yy6;
297 } else {
298 if (yych <= '`')
299 goto yy6;
300 if (yych >= '{')
301 goto yy6;
302 }
303 }
304 yych = *++p;
305 if (yych <= '9') {
306 if (yych <= ',') {
307 if (yych != '+')
308 goto yy6;
309 } else {
310 if (yych == '/')
311 goto yy6;
312 }
313 } else {
314 if (yych <= 'Z') {
315 if (yych <= ':')
316 goto yy8;
317 if (yych <= '@')
318 goto yy6;
319 } else {
320 if (yych <= '`')
321 goto yy6;
322 if (yych >= '{')
323 goto yy6;
324 }
325 }
326 yych = *++p;
327 if (yych <= '9') {
328 if (yych <= ',') {
329 if (yych != '+')
330 goto yy6;
331 } else {
332 if (yych == '/')
333 goto yy6;
334 }
335 } else {
336 if (yych <= 'Z') {
337 if (yych <= ':')
338 goto yy8;
339 if (yych <= '@')
340 goto yy6;
341 } else {
342 if (yych <= '`')
343 goto yy6;
344 if (yych >= '{')
345 goto yy6;
346 }
347 }
348 yych = *++p;
349 if (yych <= '9') {
350 if (yych <= ',') {
351 if (yych != '+')
352 goto yy6;
353 } else {
354 if (yych == '/')
355 goto yy6;
356 }
357 } else {
358 if (yych <= 'Z') {
359 if (yych <= ':')
360 goto yy8;
361 if (yych <= '@')
362 goto yy6;
363 } else {
364 if (yych <= '`')
365 goto yy6;
366 if (yych >= '{')
367 goto yy6;
368 }
369 }
370 yych = *++p;
371 if (yych <= '9') {
372 if (yych <= ',') {
373 if (yych != '+')
374 goto yy6;
375 } else {
376 if (yych == '/')
377 goto yy6;
378 }
379 } else {
380 if (yych <= 'Z') {
381 if (yych <= ':')
382 goto yy8;
383 if (yych <= '@')
384 goto yy6;
385 } else {
386 if (yych <= '`')
387 goto yy6;
388 if (yych >= '{')
389 goto yy6;
390 }
391 }
392 yych = *++p;
393 if (yych <= '9') {
394 if (yych <= ',') {
395 if (yych != '+')
396 goto yy6;
397 } else {
398 if (yych == '/')
399 goto yy6;
400 }
401 } else {
402 if (yych <= 'Z') {
403 if (yych <= ':')
404 goto yy8;
405 if (yych <= '@')
406 goto yy6;
407 } else {
408 if (yych <= '`')
409 goto yy6;
410 if (yych >= '{')
411 goto yy6;
412 }
413 }
414 yych = *++p;
415 if (yych <= '9') {
416 if (yych <= ',') {
417 if (yych != '+')
418 goto yy6;
419 } else {
420 if (yych == '/')
421 goto yy6;
422 }
423 } else {
424 if (yych <= 'Z') {
425 if (yych <= ':')
426 goto yy8;
427 if (yych <= '@')
428 goto yy6;
429 } else {
430 if (yych <= '`')
431 goto yy6;
432 if (yych >= '{')
433 goto yy6;
434 }
435 }
436 yych = *++p;
437 if (yych <= '9') {
438 if (yych <= ',') {
439 if (yych != '+')
440 goto yy6;
441 } else {
442 if (yych == '/')
443 goto yy6;
444 }
445 } else {
446 if (yych <= 'Z') {
447 if (yych <= ':')
448 goto yy8;
449 if (yych <= '@')
450 goto yy6;
451 } else {
452 if (yych <= '`')
453 goto yy6;
454 if (yych >= '{')
455 goto yy6;
456 }
457 }
458 yych = *++p;
459 if (yych <= '9') {
460 if (yych <= ',') {
461 if (yych != '+')
462 goto yy6;
463 } else {
464 if (yych == '/')
465 goto yy6;
466 }
467 } else {
468 if (yych <= 'Z') {
469 if (yych <= ':')
470 goto yy8;
471 if (yych <= '@')
472 goto yy6;
473 } else {
474 if (yych <= '`')
475 goto yy6;
476 if (yych >= '{')
477 goto yy6;
478 }
479 }
480 yych = *++p;
481 if (yych <= '9') {
482 if (yych <= ',') {
483 if (yych != '+')
484 goto yy6;
485 } else {
486 if (yych == '/')
487 goto yy6;
488 }
489 } else {
490 if (yych <= 'Z') {
491 if (yych <= ':')
492 goto yy8;
493 if (yych <= '@')
494 goto yy6;
495 } else {
496 if (yych <= '`')
497 goto yy6;
498 if (yych >= '{')
499 goto yy6;
500 }
501 }
502 yych = *++p;
503 if (yych <= '9') {
504 if (yych <= ',') {
505 if (yych != '+')
506 goto yy6;
507 } else {
508 if (yych == '/')
509 goto yy6;
510 }
511 } else {
512 if (yych <= 'Z') {
513 if (yych <= ':')
514 goto yy8;
515 if (yych <= '@')
516 goto yy6;
517 } else {
518 if (yych <= '`')
519 goto yy6;
520 if (yych >= '{')
521 goto yy6;
522 }
523 }
524 yych = *++p;
525 if (yych <= '9') {
526 if (yych <= ',') {
527 if (yych != '+')
528 goto yy6;
529 } else {
530 if (yych == '/')
531 goto yy6;
532 }
533 } else {
534 if (yych <= 'Z') {
535 if (yych <= ':')
536 goto yy8;
537 if (yych <= '@')
538 goto yy6;
539 } else {
540 if (yych <= '`')
541 goto yy6;
542 if (yych >= '{')
543 goto yy6;
544 }
545 }
546 yych = *++p;
547 if (yych <= '9') {
548 if (yych <= ',') {
549 if (yych != '+')
550 goto yy6;
551 } else {
552 if (yych == '/')
553 goto yy6;
554 }
555 } else {
556 if (yych <= 'Z') {
557 if (yych <= ':')
558 goto yy8;
559 if (yych <= '@')
560 goto yy6;
561 } else {
562 if (yych <= '`')
563 goto yy6;
564 if (yych >= '{')
565 goto yy6;
566 }
567 }
568 yych = *++p;
569 if (yych <= '9') {
570 if (yych <= ',') {
571 if (yych != '+')
572 goto yy6;
573 } else {
574 if (yych == '/')
575 goto yy6;
576 }
577 } else {
578 if (yych <= 'Z') {
579 if (yych <= ':')
580 goto yy8;
581 if (yych <= '@')
582 goto yy6;
583 } else {
584 if (yych <= '`')
585 goto yy6;
586 if (yych >= '{')
587 goto yy6;
588 }
589 }
590 yych = *++p;
591 if (yych <= '9') {
592 if (yych <= ',') {
593 if (yych != '+')
594 goto yy6;
595 } else {
596 if (yych == '/')
597 goto yy6;
598 }
599 } else {
600 if (yych <= 'Z') {
601 if (yych <= ':')
602 goto yy8;
603 if (yych <= '@')
604 goto yy6;
605 } else {
606 if (yych <= '`')
607 goto yy6;
608 if (yych >= '{')
609 goto yy6;
610 }
611 }
612 yych = *++p;
613 if (yych <= '9') {
614 if (yych <= ',') {
615 if (yych != '+')
616 goto yy6;
617 } else {
618 if (yych == '/')
619 goto yy6;
620 }
621 } else {
622 if (yych <= 'Z') {
623 if (yych <= ':')
624 goto yy8;
625 if (yych <= '@')
626 goto yy6;
627 } else {
628 if (yych <= '`')
629 goto yy6;
630 if (yych >= '{')
631 goto yy6;
632 }
633 }
634 yych = *++p;
635 if (yych <= '9') {
636 if (yych <= ',') {
637 if (yych != '+')
638 goto yy6;
639 } else {
640 if (yych == '/')
641 goto yy6;
642 }
643 } else {
644 if (yych <= 'Z') {
645 if (yych <= ':')
646 goto yy8;
647 if (yych <= '@')
648 goto yy6;
649 } else {
650 if (yych <= '`')
651 goto yy6;
652 if (yych >= '{')
653 goto yy6;
654 }
655 }
656 yych = *++p;
657 if (yych <= '9') {
658 if (yych <= ',') {
659 if (yych != '+')
660 goto yy6;
661 } else {
662 if (yych == '/')
663 goto yy6;
664 }
665 } else {
666 if (yych <= 'Z') {
667 if (yych <= ':')
668 goto yy8;
669 if (yych <= '@')
670 goto yy6;
671 } else {
672 if (yych <= '`')
673 goto yy6;
674 if (yych >= '{')
675 goto yy6;
676 }
677 }
678 yych = *++p;
679 if (yych <= '9') {
680 if (yych <= ',') {
681 if (yych != '+')
682 goto yy6;
683 } else {
684 if (yych == '/')
685 goto yy6;
686 }
687 } else {
688 if (yych <= 'Z') {
689 if (yych <= ':')
690 goto yy8;
691 if (yych <= '@')
692 goto yy6;
693 } else {
694 if (yych <= '`')
695 goto yy6;
696 if (yych >= '{')
697 goto yy6;
698 }
699 }
700 yych = *++p;
701 if (yych <= '9') {
702 if (yych <= ',') {
703 if (yych != '+')
704 goto yy6;
705 } else {
706 if (yych == '/')
707 goto yy6;
708 }
709 } else {
710 if (yych <= 'Z') {
711 if (yych <= ':')
712 goto yy8;
713 if (yych <= '@')
714 goto yy6;
715 } else {
716 if (yych <= '`')
717 goto yy6;
718 if (yych >= '{')
719 goto yy6;
720 }
721 }
722 yych = *++p;
723 if (yych <= '9') {
724 if (yych <= ',') {
725 if (yych != '+')
726 goto yy6;
727 } else {
728 if (yych == '/')
729 goto yy6;
730 }
731 } else {
732 if (yych <= 'Z') {
733 if (yych <= ':')
734 goto yy8;
735 if (yych <= '@')
736 goto yy6;
737 } else {
738 if (yych <= '`')
739 goto yy6;
740 if (yych >= '{')
741 goto yy6;
742 }
743 }
744 ++p;
745 if ((yych = *p) == ':')
746 goto yy8;
747 goto yy6;
748 }
749 }
750
751 // Try to match URI autolink after first <, returning number of chars matched.
752 bufsize_t _scan_autolink_uri(const unsigned char *p) {
753 const unsigned char *marker = NULL;
754 const unsigned char *start = p;
755
756 {
757 unsigned char yych;
758 static const unsigned char yybm[] = {
759 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
760 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
761 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128,
762 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
763 128, 128, 128, 128, 0, 128, 0, 128, 128, 128, 128, 128, 128, 128,
764 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
765 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
766 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
767 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
768 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
769 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
770 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
771 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
772 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
773 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
774 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
775 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
776 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
777 0, 0, 0, 0,
778 };
779 yych = *p;
780 if (yych <= '@')
781 goto yy41;
782 if (yych <= 'Z')
783 goto yy43;
784 if (yych <= '`')
785 goto yy41;
786 if (yych <= 'z')
787 goto yy43;
788 yy41:
789 ++p;
790 yy42 : { return 0; }
791 yy43:
792 yych = *(marker = ++p);
793 if (yych <= '/') {
794 if (yych <= '+') {
795 if (yych <= '*')
796 goto yy42;
797 } else {
798 if (yych <= ',')
799 goto yy42;
800 if (yych >= '/')
801 goto yy42;
802 }
803 } else {
804 if (yych <= 'Z') {
805 if (yych <= '9')
806 goto yy44;
807 if (yych <= '@')
808 goto yy42;
809 } else {
810 if (yych <= '`')
811 goto yy42;
812 if (yych >= '{')
813 goto yy42;
814 }
815 }
816 yy44:
817 yych = *++p;
818 if (yych <= '9') {
819 if (yych <= ',') {
820 if (yych == '+')
821 goto yy46;
822 } else {
823 if (yych != '/')
824 goto yy46;
825 }
826 } else {
827 if (yych <= 'Z') {
828 if (yych <= ':')
829 goto yy47;
830 if (yych >= 'A')
831 goto yy46;
832 } else {
833 if (yych <= '`')
834 goto yy45;
835 if (yych <= 'z')
836 goto yy46;
837 }
838 }
839 yy45:
840 p = marker;
841 goto yy42;
842 yy46:
843 yych = *++p;
844 if (yych <= '9') {
845 if (yych <= ',') {
846 if (yych == '+')
847 goto yy49;
848 goto yy45;
849 } else {
850 if (yych == '/')
851 goto yy45;
852 goto yy49;
853 }
854 } else {
855 if (yych <= 'Z') {
856 if (yych <= ':')
857 goto yy47;
858 if (yych <= '@')
859 goto yy45;
860 goto yy49;
861 } else {
862 if (yych <= '`')
863 goto yy45;
864 if (yych <= 'z')
865 goto yy49;
866 goto yy45;
867 }
868 }
869 yy47:
870 ++p;
871 yych = *p;
872 if (yybm[0 + yych] & 128) {
873 goto yy47;
874 }
875 if (yych <= 0xEC) {
876 if (yych <= 0xC1) {
877 if (yych <= '<')
878 goto yy45;
879 if (yych <= '>')
880 goto yy50;
881 goto yy45;
882 } else {
883 if (yych <= 0xDF)
884 goto yy52;
885 if (yych <= 0xE0)
886 goto yy53;
887 goto yy54;
888 }
889 } else {
890 if (yych <= 0xF0) {
891 if (yych <= 0xED)
892 goto yy55;
893 if (yych <= 0xEF)
894 goto yy54;
895 goto yy56;
896 } else {
897 if (yych <= 0xF3)
898 goto yy57;
899 if (yych <= 0xF4)
900 goto yy58;
901 goto yy45;
902 }
903 }
904 yy49:
905 yych = *++p;
906 if (yych <= '9') {
907 if (yych <= ',') {
908 if (yych == '+')
909 goto yy59;
910 goto yy45;
911 } else {
912 if (yych == '/')
913 goto yy45;
914 goto yy59;
915 }
916 } else {
917 if (yych <= 'Z') {
918 if (yych <= ':')
919 goto yy47;
920 if (yych <= '@')
921 goto yy45;
922 goto yy59;
923 } else {
924 if (yych <= '`')
925 goto yy45;
926 if (yych <= 'z')
927 goto yy59;
928 goto yy45;
929 }
930 }
931 yy50:
932 ++p;
933 { return (bufsize_t)(p - start); }
934 yy52:
935 ++p;
936 yych = *p;
937 if (yych <= 0x7F)
938 goto yy45;
939 if (yych <= 0xBF)
940 goto yy47;
941 goto yy45;
942 yy53:
943 ++p;
944 yych = *p;
945 if (yych <= 0x9F)
946 goto yy45;
947 if (yych <= 0xBF)
948 goto yy52;
949 goto yy45;
950 yy54:
951 ++p;
952 yych = *p;
953 if (yych <= 0x7F)
954 goto yy45;
955 if (yych <= 0xBF)
956 goto yy52;
957 goto yy45;
958 yy55:
959 ++p;
960 yych = *p;
961 if (yych <= 0x7F)
962 goto yy45;
963 if (yych <= 0x9F)
964 goto yy52;
965 goto yy45;
966 yy56:
967 ++p;
968 yych = *p;
969 if (yych <= 0x8F)
970 goto yy45;
971 if (yych <= 0xBF)
972 goto yy54;
973 goto yy45;
974 yy57:
975 ++p;
976 yych = *p;
977 if (yych <= 0x7F)
978 goto yy45;
979 if (yych <= 0xBF)
980 goto yy54;
981 goto yy45;
982 yy58:
983 ++p;
984 yych = *p;
985 if (yych <= 0x7F)
986 goto yy45;
987 if (yych <= 0x8F)
988 goto yy54;
989 goto yy45;
990 yy59:
991 yych = *++p;
992 if (yych <= '9') {
993 if (yych <= ',') {
994 if (yych != '+')
995 goto yy45;
996 } else {
997 if (yych == '/')
998 goto yy45;
999 }
1000 } else {
1001 if (yych <= 'Z') {
1002 if (yych <= ':')
1003 goto yy47;
1004 if (yych <= '@')
1005 goto yy45;
1006 } else {
1007 if (yych <= '`')
1008 goto yy45;
1009 if (yych >= '{')
1010 goto yy45;
1011 }
1012 }
1013 yych = *++p;
1014 if (yych <= '9') {
1015 if (yych <= ',') {
1016 if (yych != '+')
1017 goto yy45;
1018 } else {
1019 if (yych == '/')
1020 goto yy45;
1021 }
1022 } else {
1023 if (yych <= 'Z') {
1024 if (yych <= ':')
1025 goto yy47;
1026 if (yych <= '@')
1027 goto yy45;
1028 } else {
1029 if (yych <= '`')
1030 goto yy45;
1031 if (yych >= '{')
1032 goto yy45;
1033 }
1034 }
1035 yych = *++p;
1036 if (yych <= '9') {
1037 if (yych <= ',') {
1038 if (yych != '+')
1039 goto yy45;
1040 } else {
1041 if (yych == '/')
1042 goto yy45;
1043 }
1044 } else {
1045 if (yych <= 'Z') {
1046 if (yych <= ':')
1047 goto yy47;
1048 if (yych <= '@')
1049 goto yy45;
1050 } else {
1051 if (yych <= '`')
1052 goto yy45;
1053 if (yych >= '{')
1054 goto yy45;
1055 }
1056 }
1057 yych = *++p;
1058 if (yych <= '9') {
1059 if (yych <= ',') {
1060 if (yych != '+')
1061 goto yy45;
1062 } else {
1063 if (yych == '/')
1064 goto yy45;
1065 }
1066 } else {
1067 if (yych <= 'Z') {
1068 if (yych <= ':')
1069 goto yy47;
1070 if (yych <= '@')
1071 goto yy45;
1072 } else {
1073 if (yych <= '`')
1074 goto yy45;
1075 if (yych >= '{')
1076 goto yy45;
1077 }
1078 }
1079 yych = *++p;
1080 if (yych <= '9') {
1081 if (yych <= ',') {
1082 if (yych != '+')
1083 goto yy45;
1084 } else {
1085 if (yych == '/')
1086 goto yy45;
1087 }
1088 } else {
1089 if (yych <= 'Z') {
1090 if (yych <= ':')
1091 goto yy47;
1092 if (yych <= '@')
1093 goto yy45;
1094 } else {
1095 if (yych <= '`')
1096 goto yy45;
1097 if (yych >= '{')
1098 goto yy45;
1099 }
1100 }
1101 yych = *++p;
1102 if (yych <= '9') {
1103 if (yych <= ',') {
1104 if (yych != '+')
1105 goto yy45;
1106 } else {
1107 if (yych == '/')
1108 goto yy45;
1109 }
1110 } else {
1111 if (yych <= 'Z') {
1112 if (yych <= ':')
1113 goto yy47;
1114 if (yych <= '@')
1115 goto yy45;
1116 } else {
1117 if (yych <= '`')
1118 goto yy45;
1119 if (yych >= '{')
1120 goto yy45;
1121 }
1122 }
1123 yych = *++p;
1124 if (yych <= '9') {
1125 if (yych <= ',') {
1126 if (yych != '+')
1127 goto yy45;
1128 } else {
1129 if (yych == '/')
1130 goto yy45;
1131 }
1132 } else {
1133 if (yych <= 'Z') {
1134 if (yych <= ':')
1135 goto yy47;
1136 if (yych <= '@')
1137 goto yy45;
1138 } else {
1139 if (yych <= '`')
1140 goto yy45;
1141 if (yych >= '{')
1142 goto yy45;
1143 }
1144 }
1145 yych = *++p;
1146 if (yych <= '9') {
1147 if (yych <= ',') {
1148 if (yych != '+')
1149 goto yy45;
1150 } else {
1151 if (yych == '/')
1152 goto yy45;
1153 }
1154 } else {
1155 if (yych <= 'Z') {
1156 if (yych <= ':')
1157 goto yy47;
1158 if (yych <= '@')
1159 goto yy45;
1160 } else {
1161 if (yych <= '`')
1162 goto yy45;
1163 if (yych >= '{')
1164 goto yy45;
1165 }
1166 }
1167 yych = *++p;
1168 if (yych <= '9') {
1169 if (yych <= ',') {
1170 if (yych != '+')
1171 goto yy45;
1172 } else {
1173 if (yych == '/')
1174 goto yy45;
1175 }
1176 } else {
1177 if (yych <= 'Z') {
1178 if (yych <= ':')
1179 goto yy47;
1180 if (yych <= '@')
1181 goto yy45;
1182 } else {
1183 if (yych <= '`')
1184 goto yy45;
1185 if (yych >= '{')
1186 goto yy45;
1187 }
1188 }
1189 yych = *++p;
1190 if (yych <= '9') {
1191 if (yych <= ',') {
1192 if (yych != '+')
1193 goto yy45;
1194 } else {
1195 if (yych == '/')
1196 goto yy45;
1197 }
1198 } else {
1199 if (yych <= 'Z') {
1200 if (yych <= ':')
1201 goto yy47;
1202 if (yych <= '@')
1203 goto yy45;
1204 } else {
1205 if (yych <= '`')
1206 goto yy45;
1207 if (yych >= '{')
1208 goto yy45;
1209 }
1210 }
1211 yych = *++p;
1212 if (yych <= '9') {
1213 if (yych <= ',') {
1214 if (yych != '+')
1215 goto yy45;
1216 } else {
1217 if (yych == '/')
1218 goto yy45;
1219 }
1220 } else {
1221 if (yych <= 'Z') {
1222 if (yych <= ':')
1223 goto yy47;
1224 if (yych <= '@')
1225 goto yy45;
1226 } else {
1227 if (yych <= '`')
1228 goto yy45;
1229 if (yych >= '{')
1230 goto yy45;
1231 }
1232 }
1233 yych = *++p;
1234 if (yych <= '9') {
1235 if (yych <= ',') {
1236 if (yych != '+')
1237 goto yy45;
1238 } else {
1239 if (yych == '/')
1240 goto yy45;
1241 }
1242 } else {
1243 if (yych <= 'Z') {
1244 if (yych <= ':')
1245 goto yy47;
1246 if (yych <= '@')
1247 goto yy45;
1248 } else {
1249 if (yych <= '`')
1250 goto yy45;
1251 if (yych >= '{')
1252 goto yy45;
1253 }
1254 }
1255 yych = *++p;
1256 if (yych <= '9') {
1257 if (yych <= ',') {
1258 if (yych != '+')
1259 goto yy45;
1260 } else {
1261 if (yych == '/')
1262 goto yy45;
1263 }
1264 } else {
1265 if (yych <= 'Z') {
1266 if (yych <= ':')
1267 goto yy47;
1268 if (yych <= '@')
1269 goto yy45;
1270 } else {
1271 if (yych <= '`')
1272 goto yy45;
1273 if (yych >= '{')
1274 goto yy45;
1275 }
1276 }
1277 yych = *++p;
1278 if (yych <= '9') {
1279 if (yych <= ',') {
1280 if (yych != '+')
1281 goto yy45;
1282 } else {
1283 if (yych == '/')
1284 goto yy45;
1285 }
1286 } else {
1287 if (yych <= 'Z') {
1288 if (yych <= ':')
1289 goto yy47;
1290 if (yych <= '@')
1291 goto yy45;
1292 } else {
1293 if (yych <= '`')
1294 goto yy45;
1295 if (yych >= '{')
1296 goto yy45;
1297 }
1298 }
1299 yych = *++p;
1300 if (yych <= '9') {
1301 if (yych <= ',') {
1302 if (yych != '+')
1303 goto yy45;
1304 } else {
1305 if (yych == '/')
1306 goto yy45;
1307 }
1308 } else {
1309 if (yych <= 'Z') {
1310 if (yych <= ':')
1311 goto yy47;
1312 if (yych <= '@')
1313 goto yy45;
1314 } else {
1315 if (yych <= '`')
1316 goto yy45;
1317 if (yych >= '{')
1318 goto yy45;
1319 }
1320 }
1321 yych = *++p;
1322 if (yych <= '9') {
1323 if (yych <= ',') {
1324 if (yych != '+')
1325 goto yy45;
1326 } else {
1327 if (yych == '/')
1328 goto yy45;
1329 }
1330 } else {
1331 if (yych <= 'Z') {
1332 if (yych <= ':')
1333 goto yy47;
1334 if (yych <= '@')
1335 goto yy45;
1336 } else {
1337 if (yych <= '`')
1338 goto yy45;
1339 if (yych >= '{')
1340 goto yy45;
1341 }
1342 }
1343 yych = *++p;
1344 if (yych <= '9') {
1345 if (yych <= ',') {
1346 if (yych != '+')
1347 goto yy45;
1348 } else {
1349 if (yych == '/')
1350 goto yy45;
1351 }
1352 } else {
1353 if (yych <= 'Z') {
1354 if (yych <= ':')
1355 goto yy47;
1356 if (yych <= '@')
1357 goto yy45;
1358 } else {
1359 if (yych <= '`')
1360 goto yy45;
1361 if (yych >= '{')
1362 goto yy45;
1363 }
1364 }
1365 yych = *++p;
1366 if (yych <= '9') {
1367 if (yych <= ',') {
1368 if (yych != '+')
1369 goto yy45;
1370 } else {
1371 if (yych == '/')
1372 goto yy45;
1373 }
1374 } else {
1375 if (yych <= 'Z') {
1376 if (yych <= ':')
1377 goto yy47;
1378 if (yych <= '@')
1379 goto yy45;
1380 } else {
1381 if (yych <= '`')
1382 goto yy45;
1383 if (yych >= '{')
1384 goto yy45;
1385 }
1386 }
1387 yych = *++p;
1388 if (yych <= '9') {
1389 if (yych <= ',') {
1390 if (yych != '+')
1391 goto yy45;
1392 } else {
1393 if (yych == '/')
1394 goto yy45;
1395 }
1396 } else {
1397 if (yych <= 'Z') {
1398 if (yych <= ':')
1399 goto yy47;
1400 if (yych <= '@')
1401 goto yy45;
1402 } else {
1403 if (yych <= '`')
1404 goto yy45;
1405 if (yych >= '{')
1406 goto yy45;
1407 }
1408 }
1409 yych = *++p;
1410 if (yych <= '9') {
1411 if (yych <= ',') {
1412 if (yych != '+')
1413 goto yy45;
1414 } else {
1415 if (yych == '/')
1416 goto yy45;
1417 }
1418 } else {
1419 if (yych <= 'Z') {
1420 if (yych <= ':')
1421 goto yy47;
1422 if (yych <= '@')
1423 goto yy45;
1424 } else {
1425 if (yych <= '`')
1426 goto yy45;
1427 if (yych >= '{')
1428 goto yy45;
1429 }
1430 }
1431 yych = *++p;
1432 if (yych <= '9') {
1433 if (yych <= ',') {
1434 if (yych != '+')
1435 goto yy45;
1436 } else {
1437 if (yych == '/')
1438 goto yy45;
1439 }
1440 } else {
1441 if (yych <= 'Z') {
1442 if (yych <= ':')
1443 goto yy47;
1444 if (yych <= '@')
1445 goto yy45;
1446 } else {
1447 if (yych <= '`')
1448 goto yy45;
1449 if (yych >= '{')
1450 goto yy45;
1451 }
1452 }
1453 yych = *++p;
1454 if (yych <= '9') {
1455 if (yych <= ',') {
1456 if (yych != '+')
1457 goto yy45;
1458 } else {
1459 if (yych == '/')
1460 goto yy45;
1461 }
1462 } else {
1463 if (yych <= 'Z') {
1464 if (yych <= ':')
1465 goto yy47;
1466 if (yych <= '@')
1467 goto yy45;
1468 } else {
1469 if (yych <= '`')
1470 goto yy45;
1471 if (yych >= '{')
1472 goto yy45;
1473 }
1474 }
1475 yych = *++p;
1476 if (yych <= '9') {
1477 if (yych <= ',') {
1478 if (yych != '+')
1479 goto yy45;
1480 } else {
1481 if (yych == '/')
1482 goto yy45;
1483 }
1484 } else {
1485 if (yych <= 'Z') {
1486 if (yych <= ':')
1487 goto yy47;
1488 if (yych <= '@')
1489 goto yy45;
1490 } else {
1491 if (yych <= '`')
1492 goto yy45;
1493 if (yych >= '{')
1494 goto yy45;
1495 }
1496 }
1497 yych = *++p;
1498 if (yych <= '9') {
1499 if (yych <= ',') {
1500 if (yych != '+')
1501 goto yy45;
1502 } else {
1503 if (yych == '/')
1504 goto yy45;
1505 }
1506 } else {
1507 if (yych <= 'Z') {
1508 if (yych <= ':')
1509 goto yy47;
1510 if (yych <= '@')
1511 goto yy45;
1512 } else {
1513 if (yych <= '`')
1514 goto yy45;
1515 if (yych >= '{')
1516 goto yy45;
1517 }
1518 }
1519 yych = *++p;
1520 if (yych <= '9') {
1521 if (yych <= ',') {
1522 if (yych != '+')
1523 goto yy45;
1524 } else {
1525 if (yych == '/')
1526 goto yy45;
1527 }
1528 } else {
1529 if (yych <= 'Z') {
1530 if (yych <= ':')
1531 goto yy47;
1532 if (yych <= '@')
1533 goto yy45;
1534 } else {
1535 if (yych <= '`')
1536 goto yy45;
1537 if (yych >= '{')
1538 goto yy45;
1539 }
1540 }
1541 yych = *++p;
1542 if (yych <= '9') {
1543 if (yych <= ',') {
1544 if (yych != '+')
1545 goto yy45;
1546 } else {
1547 if (yych == '/')
1548 goto yy45;
1549 }
1550 } else {
1551 if (yych <= 'Z') {
1552 if (yych <= ':')
1553 goto yy47;
1554 if (yych <= '@')
1555 goto yy45;
1556 } else {
1557 if (yych <= '`')
1558 goto yy45;
1559 if (yych >= '{')
1560 goto yy45;
1561 }
1562 }
1563 yych = *++p;
1564 if (yych <= '9') {
1565 if (yych <= ',') {
1566 if (yych != '+')
1567 goto yy45;
1568 } else {
1569 if (yych == '/')
1570 goto yy45;
1571 }
1572 } else {
1573 if (yych <= 'Z') {
1574 if (yych <= ':')
1575 goto yy47;
1576 if (yych <= '@')
1577 goto yy45;
1578 } else {
1579 if (yych <= '`')
1580 goto yy45;
1581 if (yych >= '{')
1582 goto yy45;
1583 }
1584 }
1585 ++p;
1586 if ((yych = *p) == ':')
1587 goto yy47;
1588 goto yy45;
1589 }
1590 }
1591
1592 // Try to match email autolink after first <, returning num of chars matched.
1593 bufsize_t _scan_autolink_email(const unsigned char *p) {
1594 const unsigned char *marker = NULL;
1595 const unsigned char *start = p;
1596
1597 {
1598 unsigned char yych;
1599 static const unsigned char yybm[] = {
1600 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1601 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1602 0, 0, 0, 0, 0, 128, 0, 128, 128, 128, 128, 128, 0, 0,
1603 128, 128, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
1604 128, 128, 0, 0, 0, 128, 0, 128, 0, 128, 128, 128, 128, 128,
1605 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
1606 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 128, 128, 128, 128,
1607 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
1608 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
1609 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1610 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1611 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1612 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1613 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1614 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1615 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1616 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1617 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1618 0, 0, 0, 0,
1619 };
1620 yych = *p;
1621 if (yych <= '9') {
1622 if (yych <= '\'') {
1623 if (yych == '!')
1624 goto yy91;
1625 if (yych >= '#')
1626 goto yy91;
1627 } else {
1628 if (yych <= ')')
1629 goto yy89;
1630 if (yych != ',')
1631 goto yy91;
1632 }
1633 } else {
1634 if (yych <= '?') {
1635 if (yych == '=')
1636 goto yy91;
1637 if (yych >= '?')
1638 goto yy91;
1639 } else {
1640 if (yych <= 'Z') {
1641 if (yych >= 'A')
1642 goto yy91;
1643 } else {
1644 if (yych <= ']')
1645 goto yy89;
1646 if (yych <= '~')
1647 goto yy91;
1648 }
1649 }
1650 }
1651 yy89:
1652 ++p;
1653 yy90 : { return 0; }
1654 yy91:
1655 yych = *(marker = ++p);
1656 if (yych <= ',') {
1657 if (yych <= '"') {
1658 if (yych == '!')
1659 goto yy93;
1660 goto yy90;
1661 } else {
1662 if (yych <= '\'')
1663 goto yy93;
1664 if (yych <= ')')
1665 goto yy90;
1666 if (yych <= '+')
1667 goto yy93;
1668 goto yy90;
1669 }
1670 } else {
1671 if (yych <= '>') {
1672 if (yych <= '9')
1673 goto yy93;
1674 if (yych == '=')
1675 goto yy93;
1676 goto yy90;
1677 } else {
1678 if (yych <= 'Z')
1679 goto yy93;
1680 if (yych <= ']')
1681 goto yy90;
1682 if (yych <= '~')
1683 goto yy93;
1684 goto yy90;
1685 }
1686 }
1687 yy92:
1688 ++p;
1689 yych = *p;
1690 yy93:
1691 if (yybm[0 + yych] & 128) {
1692 goto yy92;
1693 }
1694 if (yych <= '>')
1695 goto yy94;
1696 if (yych <= '@')
1697 goto yy95;
1698 yy94:
1699 p = marker;
1700 goto yy90;
1701 yy95:
1702 ++p;
1703 yych = *p;
1704 if (yych <= '@') {
1705 if (yych <= '/')
1706 goto yy94;
1707 if (yych >= ':')
1708 goto yy94;
1709 } else {
1710 if (yych <= 'Z')
1711 goto yy96;
1712 if (yych <= '`')
1713 goto yy94;
1714 if (yych >= '{')
1715 goto yy94;
1716 }
1717 yy96:
1718 ++p;
1719 yych = *p;
1720 if (yych <= '=') {
1721 if (yych <= '.') {
1722 if (yych <= ',')
1723 goto yy94;
1724 if (yych >= '.')
1725 goto yy95;
1726 } else {
1727 if (yych <= '/')
1728 goto yy94;
1729 if (yych <= '9')
1730 goto yy98;
1731 goto yy94;
1732 }
1733 } else {
1734 if (yych <= 'Z') {
1735 if (yych <= '>')
1736 goto yy99;
1737 if (yych <= '@')
1738 goto yy94;
1739 goto yy98;
1740 } else {
1741 if (yych <= '`')
1742 goto yy94;
1743 if (yych <= 'z')
1744 goto yy98;
1745 goto yy94;
1746 }
1747 }
1748 ++p;
1749 yych = *p;
1750 if (yych <= '9') {
1751 if (yych == '-')
1752 goto yy101;
1753 if (yych <= '/')
1754 goto yy94;
1755 goto yy102;
1756 } else {
1757 if (yych <= 'Z') {
1758 if (yych <= '@')
1759 goto yy94;
1760 goto yy102;
1761 } else {
1762 if (yych <= '`')
1763 goto yy94;
1764 if (yych <= 'z')
1765 goto yy102;
1766 goto yy94;
1767 }
1768 }
1769 yy98:
1770 ++p;
1771 yych = *p;
1772 if (yych <= '=') {
1773 if (yych <= '.') {
1774 if (yych <= ',')
1775 goto yy94;
1776 if (yych <= '-')
1777 goto yy101;
1778 goto yy95;
1779 } else {
1780 if (yych <= '/')
1781 goto yy94;
1782 if (yych <= '9')
1783 goto yy102;
1784 goto yy94;
1785 }
1786 } else {
1787 if (yych <= 'Z') {
1788 if (yych <= '>')
1789 goto yy99;
1790 if (yych <= '@')
1791 goto yy94;
1792 goto yy102;
1793 } else {
1794 if (yych <= '`')
1795 goto yy94;
1796 if (yych <= 'z')
1797 goto yy102;
1798 goto yy94;
1799 }
1800 }
1801 yy99:
1802 ++p;
1803 { return (bufsize_t)(p - start); }
1804 yy101:
1805 ++p;
1806 yych = *p;
1807 if (yych <= '9') {
1808 if (yych == '-')
1809 goto yy103;
1810 if (yych <= '/')
1811 goto yy94;
1812 goto yy104;
1813 } else {
1814 if (yych <= 'Z') {
1815 if (yych <= '@')
1816 goto yy94;
1817 goto yy104;
1818 } else {
1819 if (yych <= '`')
1820 goto yy94;
1821 if (yych <= 'z')
1822 goto yy104;
1823 goto yy94;
1824 }
1825 }
1826 yy102:
1827 ++p;
1828 yych = *p;
1829 if (yych <= '=') {
1830 if (yych <= '.') {
1831 if (yych <= ',')
1832 goto yy94;
1833 if (yych >= '.')
1834 goto yy95;
1835 } else {
1836 if (yych <= '/')
1837 goto yy94;
1838 if (yych <= '9')
1839 goto yy104;
1840 goto yy94;
1841 }
1842 } else {
1843 if (yych <= 'Z') {
1844 if (yych <= '>')
1845 goto yy99;
1846 if (yych <= '@')
1847 goto yy94;
1848 goto yy104;
1849 } else {
1850 if (yych <= '`')
1851 goto yy94;
1852 if (yych <= 'z')
1853 goto yy104;
1854 goto yy94;
1855 }
1856 }
1857 yy103:
1858 ++p;
1859 yych = *p;
1860 if (yych <= '9') {
1861 if (yych == '-')
1862 goto yy105;
1863 if (yych <= '/')
1864 goto yy94;
1865 goto yy106;
1866 } else {
1867 if (yych <= 'Z') {
1868 if (yych <= '@')
1869 goto yy94;
1870 goto yy106;
1871 } else {
1872 if (yych <= '`')
1873 goto yy94;
1874 if (yych <= 'z')
1875 goto yy106;
1876 goto yy94;
1877 }
1878 }
1879 yy104:
1880 ++p;
1881 yych = *p;
1882 if (yych <= '=') {
1883 if (yych <= '.') {
1884 if (yych <= ',')
1885 goto yy94;
1886 if (yych >= '.')
1887 goto yy95;
1888 } else {
1889 if (yych <= '/')
1890 goto yy94;
1891 if (yych <= '9')
1892 goto yy106;
1893 goto yy94;
1894 }
1895 } else {
1896 if (yych <= 'Z') {
1897 if (yych <= '>')
1898 goto yy99;
1899 if (yych <= '@')
1900 goto yy94;
1901 goto yy106;
1902 } else {
1903 if (yych <= '`')
1904 goto yy94;
1905 if (yych <= 'z')
1906 goto yy106;
1907 goto yy94;
1908 }
1909 }
1910 yy105:
1911 ++p;
1912 yych = *p;
1913 if (yych <= '9') {
1914 if (yych == '-')
1915 goto yy107;
1916 if (yych <= '/')
1917 goto yy94;
1918 goto yy108;
1919 } else {
1920 if (yych <= 'Z') {
1921 if (yych <= '@')
1922 goto yy94;
1923 goto yy108;
1924 } else {
1925 if (yych <= '`')
1926 goto yy94;
1927 if (yych <= 'z')
1928 goto yy108;
1929 goto yy94;
1930 }
1931 }
1932 yy106:
1933 ++p;
1934 yych = *p;
1935 if (yych <= '=') {
1936 if (yych <= '.') {
1937 if (yych <= ',')
1938 goto yy94;
1939 if (yych >= '.')
1940 goto yy95;
1941 } else {
1942 if (yych <= '/')
1943 goto yy94;
1944 if (yych <= '9')
1945 goto yy108;
1946 goto yy94;
1947 }
1948 } else {
1949 if (yych <= 'Z') {
1950 if (yych <= '>')
1951 goto yy99;
1952 if (yych <= '@')
1953 goto yy94;
1954 goto yy108;
1955 } else {
1956 if (yych <= '`')
1957 goto yy94;
1958 if (yych <= 'z')
1959 goto yy108;
1960 goto yy94;
1961 }
1962 }
1963 yy107:
1964 ++p;
1965 yych = *p;
1966 if (yych <= '9') {
1967 if (yych == '-')
1968 goto yy109;
1969 if (yych <= '/')
1970 goto yy94;
1971 goto yy110;
1972 } else {
1973 if (yych <= 'Z') {
1974 if (yych <= '@')
1975 goto yy94;
1976 goto yy110;
1977 } else {
1978 if (yych <= '`')
1979 goto yy94;
1980 if (yych <= 'z')
1981 goto yy110;
1982 goto yy94;
1983 }
1984 }
1985 yy108:
1986 ++p;
1987 yych = *p;
1988 if (yych <= '=') {
1989 if (yych <= '.') {
1990 if (yych <= ',')
1991 goto yy94;
1992 if (yych >= '.')
1993 goto yy95;
1994 } else {
1995 if (yych <= '/')
1996 goto yy94;
1997 if (yych <= '9')
1998 goto yy110;
1999 goto yy94;
2000 }
2001 } else {
2002 if (yych <= 'Z') {
2003 if (yych <= '>')
2004 goto yy99;
2005 if (yych <= '@')
2006 goto yy94;
2007 goto yy110;
2008 } else {
2009 if (yych <= '`')
2010 goto yy94;
2011 if (yych <= 'z')
2012 goto yy110;
2013 goto yy94;
2014 }
2015 }
2016 yy109:
2017 ++p;
2018 yych = *p;
2019 if (yych <= '9') {
2020 if (yych == '-')
2021 goto yy111;
2022 if (yych <= '/')
2023 goto yy94;
2024 goto yy112;
2025 } else {
2026 if (yych <= 'Z') {
2027 if (yych <= '@')
2028 goto yy94;
2029 goto yy112;
2030 } else {
2031 if (yych <= '`')
2032 goto yy94;
2033 if (yych <= 'z')
2034 goto yy112;
2035 goto yy94;
2036 }
2037 }
2038 yy110:
2039 ++p;
2040 yych = *p;
2041 if (yych <= '=') {
2042 if (yych <= '.') {
2043 if (yych <= ',')
2044 goto yy94;
2045 if (yych >= '.')
2046 goto yy95;
2047 } else {
2048 if (yych <= '/')
2049 goto yy94;
2050 if (yych <= '9')
2051 goto yy112;
2052 goto yy94;
2053 }
2054 } else {
2055 if (yych <= 'Z') {
2056 if (yych <= '>')
2057 goto yy99;
2058 if (yych <= '@')
2059 goto yy94;
2060 goto yy112;
2061 } else {
2062 if (yych <= '`')
2063 goto yy94;
2064 if (yych <= 'z')
2065 goto yy112;
2066 goto yy94;
2067 }
2068 }
2069 yy111:
2070 ++p;
2071 yych = *p;
2072 if (yych <= '9') {
2073 if (yych == '-')
2074 goto yy113;
2075 if (yych <= '/')
2076 goto yy94;
2077 goto yy114;
2078 } else {
2079 if (yych <= 'Z') {
2080 if (yych <= '@')
2081 goto yy94;
2082 goto yy114;
2083 } else {
2084 if (yych <= '`')
2085 goto yy94;
2086 if (yych <= 'z')
2087 goto yy114;
2088 goto yy94;
2089 }
2090 }
2091 yy112:
2092 ++p;
2093 yych = *p;
2094 if (yych <= '=') {
2095 if (yych <= '.') {
2096 if (yych <= ',')
2097 goto yy94;
2098 if (yych >= '.')
2099 goto yy95;
2100 } else {
2101 if (yych <= '/')
2102 goto yy94;
2103 if (yych <= '9')
2104 goto yy114;
2105 goto yy94;
2106 }
2107 } else {
2108 if (yych <= 'Z') {
2109 if (yych <= '>')
2110 goto yy99;
2111 if (yych <= '@')
2112 goto yy94;
2113 goto yy114;
2114 } else {
2115 if (yych <= '`')
2116 goto yy94;
2117 if (yych <= 'z')
2118 goto yy114;
2119 goto yy94;
2120 }
2121 }
2122 yy113:
2123 ++p;
2124 yych = *p;
2125 if (yych <= '9') {
2126 if (yych == '-')
2127 goto yy115;
2128 if (yych <= '/')
2129 goto yy94;
2130 goto yy116;
2131 } else {
2132 if (yych <= 'Z') {
2133 if (yych <= '@')
2134 goto yy94;
2135 goto yy116;
2136 } else {
2137 if (yych <= '`')
2138 goto yy94;
2139 if (yych <= 'z')
2140 goto yy116;
2141 goto yy94;
2142 }
2143 }
2144 yy114:
2145 ++p;
2146 yych = *p;
2147 if (yych <= '=') {
2148 if (yych <= '.') {
2149 if (yych <= ',')
2150 goto yy94;
2151 if (yych >= '.')
2152 goto yy95;
2153 } else {
2154 if (yych <= '/')
2155 goto yy94;
2156 if (yych <= '9')
2157 goto yy116;
2158 goto yy94;
2159 }
2160 } else {
2161 if (yych <= 'Z') {
2162 if (yych <= '>')
2163 goto yy99;
2164 if (yych <= '@')
2165 goto yy94;
2166 goto yy116;
2167 } else {
2168 if (yych <= '`')
2169 goto yy94;
2170 if (yych <= 'z')
2171 goto yy116;
2172 goto yy94;
2173 }
2174 }
2175 yy115:
2176 ++p;
2177 yych = *p;
2178 if (yych <= '9') {
2179 if (yych == '-')
2180 goto yy117;
2181 if (yych <= '/')
2182 goto yy94;
2183 goto yy118;
2184 } else {
2185 if (yych <= 'Z') {
2186 if (yych <= '@')
2187 goto yy94;
2188 goto yy118;
2189 } else {
2190 if (yych <= '`')
2191 goto yy94;
2192 if (yych <= 'z')
2193 goto yy118;
2194 goto yy94;
2195 }
2196 }
2197 yy116:
2198 ++p;
2199 yych = *p;
2200 if (yych <= '=') {
2201 if (yych <= '.') {
2202 if (yych <= ',')
2203 goto yy94;
2204 if (yych >= '.')
2205 goto yy95;
2206 } else {
2207 if (yych <= '/')
2208 goto yy94;
2209 if (yych <= '9')
2210 goto yy118;
2211 goto yy94;
2212 }
2213 } else {
2214 if (yych <= 'Z') {
2215 if (yych <= '>')
2216 goto yy99;
2217 if (yych <= '@')
2218 goto yy94;
2219 goto yy118;
2220 } else {
2221 if (yych <= '`')
2222 goto yy94;
2223 if (yych <= 'z')
2224 goto yy118;
2225 goto yy94;
2226 }
2227 }
2228 yy117:
2229 ++p;
2230 yych = *p;
2231 if (yych <= '9') {
2232 if (yych == '-')
2233 goto yy119;
2234 if (yych <= '/')
2235 goto yy94;
2236 goto yy120;
2237 } else {
2238 if (yych <= 'Z') {
2239 if (yych <= '@')
2240 goto yy94;
2241 goto yy120;
2242 } else {
2243 if (yych <= '`')
2244 goto yy94;
2245 if (yych <= 'z')
2246 goto yy120;
2247 goto yy94;
2248 }
2249 }
2250 yy118:
2251 ++p;
2252 yych = *p;
2253 if (yych <= '=') {
2254 if (yych <= '.') {
2255 if (yych <= ',')
2256 goto yy94;
2257 if (yych >= '.')
2258 goto yy95;
2259 } else {
2260 if (yych <= '/')
2261 goto yy94;
2262 if (yych <= '9')
2263 goto yy120;
2264 goto yy94;
2265 }
2266 } else {
2267 if (yych <= 'Z') {
2268 if (yych <= '>')
2269 goto yy99;
2270 if (yych <= '@')
2271 goto yy94;
2272 goto yy120;
2273 } else {
2274 if (yych <= '`')
2275 goto yy94;
2276 if (yych <= 'z')
2277 goto yy120;
2278 goto yy94;
2279 }
2280 }
2281 yy119:
2282 ++p;
2283 yych = *p;
2284 if (yych <= '9') {
2285 if (yych == '-')
2286 goto yy121;
2287 if (yych <= '/')
2288 goto yy94;
2289 goto yy122;
2290 } else {
2291 if (yych <= 'Z') {
2292 if (yych <= '@')
2293 goto yy94;
2294 goto yy122;
2295 } else {
2296 if (yych <= '`')
2297 goto yy94;
2298 if (yych <= 'z')
2299 goto yy122;
2300 goto yy94;
2301 }
2302 }
2303 yy120:
2304 ++p;
2305 yych = *p;
2306 if (yych <= '=') {
2307 if (yych <= '.') {
2308 if (yych <= ',')
2309 goto yy94;
2310 if (yych >= '.')
2311 goto yy95;
2312 } else {
2313 if (yych <= '/')
2314 goto yy94;
2315 if (yych <= '9')
2316 goto yy122;
2317 goto yy94;
2318 }
2319 } else {
2320 if (yych <= 'Z') {
2321 if (yych <= '>')
2322 goto yy99;
2323 if (yych <= '@')
2324 goto yy94;
2325 goto yy122;
2326 } else {
2327 if (yych <= '`')
2328 goto yy94;
2329 if (yych <= 'z')
2330 goto yy122;
2331 goto yy94;
2332 }
2333 }
2334 yy121:
2335 ++p;
2336 yych = *p;
2337 if (yych <= '9') {
2338 if (yych == '-')
2339 goto yy123;
2340 if (yych <= '/')
2341 goto yy94;
2342 goto yy124;
2343 } else {
2344 if (yych <= 'Z') {
2345 if (yych <= '@')
2346 goto yy94;
2347 goto yy124;
2348 } else {
2349 if (yych <= '`')
2350 goto yy94;
2351 if (yych <= 'z')
2352 goto yy124;
2353 goto yy94;
2354 }
2355 }
2356 yy122:
2357 ++p;
2358 yych = *p;
2359 if (yych <= '=') {
2360 if (yych <= '.') {
2361 if (yych <= ',')
2362 goto yy94;
2363 if (yych >= '.')
2364 goto yy95;
2365 } else {
2366 if (yych <= '/')
2367 goto yy94;
2368 if (yych <= '9')
2369 goto yy124;
2370 goto yy94;
2371 }
2372 } else {
2373 if (yych <= 'Z') {
2374 if (yych <= '>')
2375 goto yy99;
2376 if (yych <= '@')
2377 goto yy94;
2378 goto yy124;
2379 } else {
2380 if (yych <= '`')
2381 goto yy94;
2382 if (yych <= 'z')
2383 goto yy124;
2384 goto yy94;
2385 }
2386 }
2387 yy123:
2388 ++p;
2389 yych = *p;
2390 if (yych <= '9') {
2391 if (yych == '-')
2392 goto yy125;
2393 if (yych <= '/')
2394 goto yy94;
2395 goto yy126;
2396 } else {
2397 if (yych <= 'Z') {
2398 if (yych <= '@')
2399 goto yy94;
2400 goto yy126;
2401 } else {
2402 if (yych <= '`')
2403 goto yy94;
2404 if (yych <= 'z')
2405 goto yy126;
2406 goto yy94;
2407 }
2408 }
2409 yy124:
2410 ++p;
2411 yych = *p;
2412 if (yych <= '=') {
2413 if (yych <= '.') {
2414 if (yych <= ',')
2415 goto yy94;
2416 if (yych >= '.')
2417 goto yy95;
2418 } else {
2419 if (yych <= '/')
2420 goto yy94;
2421 if (yych <= '9')
2422 goto yy126;
2423 goto yy94;
2424 }
2425 } else {
2426 if (yych <= 'Z') {
2427 if (yych <= '>')
2428 goto yy99;
2429 if (yych <= '@')
2430 goto yy94;
2431 goto yy126;
2432 } else {
2433 if (yych <= '`')
2434 goto yy94;
2435 if (yych <= 'z')
2436 goto yy126;
2437 goto yy94;
2438 }
2439 }
2440 yy125:
2441 ++p;
2442 yych = *p;
2443 if (yych <= '9') {
2444 if (yych == '-')
2445 goto yy127;
2446 if (yych <= '/')
2447 goto yy94;
2448 goto yy128;
2449 } else {
2450 if (yych <= 'Z') {
2451 if (yych <= '@')
2452 goto yy94;
2453 goto yy128;
2454 } else {
2455 if (yych <= '`')
2456 goto yy94;
2457 if (yych <= 'z')
2458 goto yy128;
2459 goto yy94;
2460 }
2461 }
2462 yy126:
2463 ++p;
2464 yych = *p;
2465 if (yych <= '=') {
2466 if (yych <= '.') {
2467 if (yych <= ',')
2468 goto yy94;
2469 if (yych >= '.')
2470 goto yy95;
2471 } else {
2472 if (yych <= '/')
2473 goto yy94;
2474 if (yych <= '9')
2475 goto yy128;
2476 goto yy94;
2477 }
2478 } else {
2479 if (yych <= 'Z') {
2480 if (yych <= '>')
2481 goto yy99;
2482 if (yych <= '@')
2483 goto yy94;
2484 goto yy128;
2485 } else {
2486 if (yych <= '`')
2487 goto yy94;
2488 if (yych <= 'z')
2489 goto yy128;
2490 goto yy94;
2491 }
2492 }
2493 yy127:
2494 ++p;
2495 yych = *p;
2496 if (yych <= '9') {
2497 if (yych == '-')
2498 goto yy129;
2499 if (yych <= '/')
2500 goto yy94;
2501 goto yy130;
2502 } else {
2503 if (yych <= 'Z') {
2504 if (yych <= '@')
2505 goto yy94;
2506 goto yy130;
2507 } else {
2508 if (yych <= '`')
2509 goto yy94;
2510 if (yych <= 'z')
2511 goto yy130;
2512 goto yy94;
2513 }
2514 }
2515 yy128:
2516 ++p;
2517 yych = *p;
2518 if (yych <= '=') {
2519 if (yych <= '.') {
2520 if (yych <= ',')
2521 goto yy94;
2522 if (yych >= '.')
2523 goto yy95;
2524 } else {
2525 if (yych <= '/')
2526 goto yy94;
2527 if (yych <= '9')
2528 goto yy130;
2529 goto yy94;
2530 }
2531 } else {
2532 if (yych <= 'Z') {
2533 if (yych <= '>')
2534 goto yy99;
2535 if (yych <= '@')
2536 goto yy94;
2537 goto yy130;
2538 } else {
2539 if (yych <= '`')
2540 goto yy94;
2541 if (yych <= 'z')
2542 goto yy130;
2543 goto yy94;
2544 }
2545 }
2546 yy129:
2547 ++p;
2548 yych = *p;
2549 if (yych <= '9') {
2550 if (yych == '-')
2551 goto yy131;
2552 if (yych <= '/')
2553 goto yy94;
2554 goto yy132;
2555 } else {
2556 if (yych <= 'Z') {
2557 if (yych <= '@')
2558 goto yy94;
2559 goto yy132;
2560 } else {
2561 if (yych <= '`')
2562 goto yy94;
2563 if (yych <= 'z')
2564 goto yy132;
2565 goto yy94;
2566 }
2567 }
2568 yy130:
2569 ++p;
2570 yych = *p;
2571 if (yych <= '=') {
2572 if (yych <= '.') {
2573 if (yych <= ',')
2574 goto yy94;
2575 if (yych >= '.')
2576 goto yy95;
2577 } else {
2578 if (yych <= '/')
2579 goto yy94;
2580 if (yych <= '9')
2581 goto yy132;
2582 goto yy94;
2583 }
2584 } else {
2585 if (yych <= 'Z') {
2586 if (yych <= '>')
2587 goto yy99;
2588 if (yych <= '@')
2589 goto yy94;
2590 goto yy132;
2591 } else {
2592 if (yych <= '`')
2593 goto yy94;
2594 if (yych <= 'z')
2595 goto yy132;
2596 goto yy94;
2597 }
2598 }
2599 yy131:
2600 ++p;
2601 yych = *p;
2602 if (yych <= '9') {
2603 if (yych == '-')
2604 goto yy133;
2605 if (yych <= '/')
2606 goto yy94;
2607 goto yy134;
2608 } else {
2609 if (yych <= 'Z') {
2610 if (yych <= '@')
2611 goto yy94;
2612 goto yy134;
2613 } else {
2614 if (yych <= '`')
2615 goto yy94;
2616 if (yych <= 'z')
2617 goto yy134;
2618 goto yy94;
2619 }
2620 }
2621 yy132:
2622 ++p;
2623 yych = *p;
2624 if (yych <= '=') {
2625 if (yych <= '.') {
2626 if (yych <= ',')
2627 goto yy94;
2628 if (yych >= '.')
2629 goto yy95;
2630 } else {
2631 if (yych <= '/')
2632 goto yy94;
2633 if (yych <= '9')
2634 goto yy134;
2635 goto yy94;
2636 }
2637 } else {
2638 if (yych <= 'Z') {
2639 if (yych <= '>')
2640 goto yy99;
2641 if (yych <= '@')
2642 goto yy94;
2643 goto yy134;
2644 } else {
2645 if (yych <= '`')
2646 goto yy94;
2647 if (yych <= 'z')
2648 goto yy134;
2649 goto yy94;
2650 }
2651 }
2652 yy133:
2653 ++p;
2654 yych = *p;
2655 if (yych <= '9') {
2656 if (yych == '-')
2657 goto yy135;
2658 if (yych <= '/')
2659 goto yy94;
2660 goto yy136;
2661 } else {
2662 if (yych <= 'Z') {
2663 if (yych <= '@')
2664 goto yy94;
2665 goto yy136;
2666 } else {
2667 if (yych <= '`')
2668 goto yy94;
2669 if (yych <= 'z')
2670 goto yy136;
2671 goto yy94;
2672 }
2673 }
2674 yy134:
2675 ++p;
2676 yych = *p;
2677 if (yych <= '=') {
2678 if (yych <= '.') {
2679 if (yych <= ',')
2680 goto yy94;
2681 if (yych >= '.')
2682 goto yy95;
2683 } else {
2684 if (yych <= '/')
2685 goto yy94;
2686 if (yych <= '9')
2687 goto yy136;
2688 goto yy94;
2689 }
2690 } else {
2691 if (yych <= 'Z') {
2692 if (yych <= '>')
2693 goto yy99;
2694 if (yych <= '@')
2695 goto yy94;
2696 goto yy136;
2697 } else {
2698 if (yych <= '`')
2699 goto yy94;
2700 if (yych <= 'z')
2701 goto yy136;
2702 goto yy94;
2703 }
2704 }
2705 yy135:
2706 ++p;
2707 yych = *p;
2708 if (yych <= '9') {
2709 if (yych == '-')
2710 goto yy137;
2711 if (yych <= '/')
2712 goto yy94;
2713 goto yy138;
2714 } else {
2715 if (yych <= 'Z') {
2716 if (yych <= '@')
2717 goto yy94;
2718 goto yy138;
2719 } else {
2720 if (yych <= '`')
2721 goto yy94;
2722 if (yych <= 'z')
2723 goto yy138;
2724 goto yy94;
2725 }
2726 }
2727 yy136:
2728 ++p;
2729 yych = *p;
2730 if (yych <= '=') {
2731 if (yych <= '.') {
2732 if (yych <= ',')
2733 goto yy94;
2734 if (yych >= '.')
2735 goto yy95;
2736 } else {
2737 if (yych <= '/')
2738 goto yy94;
2739 if (yych <= '9')
2740 goto yy138;
2741 goto yy94;
2742 }
2743 } else {
2744 if (yych <= 'Z') {
2745 if (yych <= '>')
2746 goto yy99;
2747 if (yych <= '@')
2748 goto yy94;
2749 goto yy138;
2750 } else {
2751 if (yych <= '`')
2752 goto yy94;
2753 if (yych <= 'z')
2754 goto yy138;
2755 goto yy94;
2756 }
2757 }
2758 yy137:
2759 ++p;
2760 yych = *p;
2761 if (yych <= '9') {
2762 if (yych == '-')
2763 goto yy139;
2764 if (yych <= '/')
2765 goto yy94;
2766 goto yy140;
2767 } else {
2768 if (yych <= 'Z') {
2769 if (yych <= '@')
2770 goto yy94;
2771 goto yy140;
2772 } else {
2773 if (yych <= '`')
2774 goto yy94;
2775 if (yych <= 'z')
2776 goto yy140;
2777 goto yy94;
2778 }
2779 }
2780 yy138:
2781 ++p;
2782 yych = *p;
2783 if (yych <= '=') {
2784 if (yych <= '.') {
2785 if (yych <= ',')
2786 goto yy94;
2787 if (yych >= '.')
2788 goto yy95;
2789 } else {
2790 if (yych <= '/')
2791 goto yy94;
2792 if (yych <= '9')
2793 goto yy140;
2794 goto yy94;
2795 }
2796 } else {
2797 if (yych <= 'Z') {
2798 if (yych <= '>')
2799 goto yy99;
2800 if (yych <= '@')
2801 goto yy94;
2802 goto yy140;
2803 } else {
2804 if (yych <= '`')
2805 goto yy94;
2806 if (yych <= 'z')
2807 goto yy140;
2808 goto yy94;
2809 }
2810 }
2811 yy139:
2812 ++p;
2813 yych = *p;
2814 if (yych <= '9') {
2815 if (yych == '-')
2816 goto yy141;
2817 if (yych <= '/')
2818 goto yy94;
2819 goto yy142;
2820 } else {
2821 if (yych <= 'Z') {
2822 if (yych <= '@')
2823 goto yy94;
2824 goto yy142;
2825 } else {
2826 if (yych <= '`')
2827 goto yy94;
2828 if (yych <= 'z')
2829 goto yy142;
2830 goto yy94;
2831 }
2832 }
2833 yy140:
2834 ++p;
2835 yych = *p;
2836 if (yych <= '=') {
2837 if (yych <= '.') {
2838 if (yych <= ',')
2839 goto yy94;
2840 if (yych >= '.')
2841 goto yy95;
2842 } else {
2843 if (yych <= '/')
2844 goto yy94;
2845 if (yych <= '9')
2846 goto yy142;
2847 goto yy94;
2848 }
2849 } else {
2850 if (yych <= 'Z') {
2851 if (yych <= '>')
2852 goto yy99;
2853 if (yych <= '@')
2854 goto yy94;
2855 goto yy142;
2856 } else {
2857 if (yych <= '`')
2858 goto yy94;
2859 if (yych <= 'z')
2860 goto yy142;
2861 goto yy94;
2862 }
2863 }
2864 yy141:
2865 ++p;
2866 yych = *p;
2867 if (yych <= '9') {
2868 if (yych == '-')
2869 goto yy143;
2870 if (yych <= '/')
2871 goto yy94;
2872 goto yy144;
2873 } else {
2874 if (yych <= 'Z') {
2875 if (yych <= '@')
2876 goto yy94;
2877 goto yy144;
2878 } else {
2879 if (yych <= '`')
2880 goto yy94;
2881 if (yych <= 'z')
2882 goto yy144;
2883 goto yy94;
2884 }
2885 }
2886 yy142:
2887 ++p;
2888 yych = *p;
2889 if (yych <= '=') {
2890 if (yych <= '.') {
2891 if (yych <= ',')
2892 goto yy94;
2893 if (yych >= '.')
2894 goto yy95;
2895 } else {
2896 if (yych <= '/')
2897 goto yy94;
2898 if (yych <= '9')
2899 goto yy144;
2900 goto yy94;
2901 }
2902 } else {
2903 if (yych <= 'Z') {
2904 if (yych <= '>')
2905 goto yy99;
2906 if (yych <= '@')
2907 goto yy94;
2908 goto yy144;
2909 } else {
2910 if (yych <= '`')
2911 goto yy94;
2912 if (yych <= 'z')
2913 goto yy144;
2914 goto yy94;
2915 }
2916 }
2917 yy143:
2918 ++p;
2919 yych = *p;
2920 if (yych <= '9') {
2921 if (yych == '-')
2922 goto yy145;
2923 if (yych <= '/')
2924 goto yy94;
2925 goto yy146;
2926 } else {
2927 if (yych <= 'Z') {
2928 if (yych <= '@')
2929 goto yy94;
2930 goto yy146;
2931 } else {
2932 if (yych <= '`')
2933 goto yy94;
2934 if (yych <= 'z')
2935 goto yy146;
2936 goto yy94;
2937 }
2938 }
2939 yy144:
2940 ++p;
2941 yych = *p;
2942 if (yych <= '=') {
2943 if (yych <= '.') {
2944 if (yych <= ',')
2945 goto yy94;
2946 if (yych >= '.')
2947 goto yy95;
2948 } else {
2949 if (yych <= '/')
2950 goto yy94;
2951 if (yych <= '9')
2952 goto yy146;
2953 goto yy94;
2954 }
2955 } else {
2956 if (yych <= 'Z') {
2957 if (yych <= '>')
2958 goto yy99;
2959 if (yych <= '@')
2960 goto yy94;
2961 goto yy146;
2962 } else {
2963 if (yych <= '`')
2964 goto yy94;
2965 if (yych <= 'z')
2966 goto yy146;
2967 goto yy94;
2968 }
2969 }
2970 yy145:
2971 ++p;
2972 yych = *p;
2973 if (yych <= '9') {
2974 if (yych == '-')
2975 goto yy147;
2976 if (yych <= '/')
2977 goto yy94;
2978 goto yy148;
2979 } else {
2980 if (yych <= 'Z') {
2981 if (yych <= '@')
2982 goto yy94;
2983 goto yy148;
2984 } else {
2985 if (yych <= '`')
2986 goto yy94;
2987 if (yych <= 'z')
2988 goto yy148;
2989 goto yy94;
2990 }
2991 }
2992 yy146:
2993 ++p;
2994 yych = *p;
2995 if (yych <= '=') {
2996 if (yych <= '.') {
2997 if (yych <= ',')
2998 goto yy94;
2999 if (yych >= '.')
3000 goto yy95;
3001 } else {
3002 if (yych <= '/')
3003 goto yy94;
3004 if (yych <= '9')
3005 goto yy148;
3006 goto yy94;
3007 }
3008 } else {
3009 if (yych <= 'Z') {
3010 if (yych <= '>')
3011 goto yy99;
3012 if (yych <= '@')
3013 goto yy94;
3014 goto yy148;
3015 } else {
3016 if (yych <= '`')
3017 goto yy94;
3018 if (yych <= 'z')
3019 goto yy148;
3020 goto yy94;
3021 }
3022 }
3023 yy147:
3024 ++p;
3025 yych = *p;
3026 if (yych <= '9') {
3027 if (yych == '-')
3028 goto yy149;
3029 if (yych <= '/')
3030 goto yy94;
3031 goto yy150;
3032 } else {
3033 if (yych <= 'Z') {
3034 if (yych <= '@')
3035 goto yy94;
3036 goto yy150;
3037 } else {
3038 if (yych <= '`')
3039 goto yy94;
3040 if (yych <= 'z')
3041 goto yy150;
3042 goto yy94;
3043 }
3044 }
3045 yy148:
3046 ++p;
3047 yych = *p;
3048 if (yych <= '=') {
3049 if (yych <= '.') {
3050 if (yych <= ',')
3051 goto yy94;
3052 if (yych >= '.')
3053 goto yy95;
3054 } else {
3055 if (yych <= '/')
3056 goto yy94;
3057 if (yych <= '9')
3058 goto yy150;
3059 goto yy94;
3060 }
3061 } else {
3062 if (yych <= 'Z') {
3063 if (yych <= '>')
3064 goto yy99;
3065 if (yych <= '@')
3066 goto yy94;
3067 goto yy150;
3068 } else {
3069 if (yych <= '`')
3070 goto yy94;
3071 if (yych <= 'z')
3072 goto yy150;
3073 goto yy94;
3074 }
3075 }
3076 yy149:
3077 ++p;
3078 yych = *p;
3079 if (yych <= '9') {
3080 if (yych == '-')
3081 goto yy151;
3082 if (yych <= '/')
3083 goto yy94;
3084 goto yy152;
3085 } else {
3086 if (yych <= 'Z') {
3087 if (yych <= '@')
3088 goto yy94;
3089 goto yy152;
3090 } else {
3091 if (yych <= '`')
3092 goto yy94;
3093 if (yych <= 'z')
3094 goto yy152;
3095 goto yy94;
3096 }
3097 }
3098 yy150:
3099 ++p;
3100 yych = *p;
3101 if (yych <= '=') {
3102 if (yych <= '.') {
3103 if (yych <= ',')
3104 goto yy94;
3105 if (yych >= '.')
3106 goto yy95;
3107 } else {
3108 if (yych <= '/')
3109 goto yy94;
3110 if (yych <= '9')
3111 goto yy152;
3112 goto yy94;
3113 }
3114 } else {
3115 if (yych <= 'Z') {
3116 if (yych <= '>')
3117 goto yy99;
3118 if (yych <= '@')
3119 goto yy94;
3120 goto yy152;
3121 } else {
3122 if (yych <= '`')
3123 goto yy94;
3124 if (yych <= 'z')
3125 goto yy152;
3126 goto yy94;
3127 }
3128 }
3129 yy151:
3130 ++p;
3131 yych = *p;
3132 if (yych <= '9') {
3133 if (yych == '-')
3134 goto yy153;
3135 if (yych <= '/')
3136 goto yy94;
3137 goto yy154;
3138 } else {
3139 if (yych <= 'Z') {
3140 if (yych <= '@')
3141 goto yy94;
3142 goto yy154;
3143 } else {
3144 if (yych <= '`')
3145 goto yy94;
3146 if (yych <= 'z')
3147 goto yy154;
3148 goto yy94;
3149 }
3150 }
3151 yy152:
3152 ++p;
3153 yych = *p;
3154 if (yych <= '=') {
3155 if (yych <= '.') {
3156 if (yych <= ',')
3157 goto yy94;
3158 if (yych >= '.')
3159 goto yy95;
3160 } else {
3161 if (yych <= '/')
3162 goto yy94;
3163 if (yych <= '9')
3164 goto yy154;
3165 goto yy94;
3166 }
3167 } else {
3168 if (yych <= 'Z') {
3169 if (yych <= '>')
3170 goto yy99;
3171 if (yych <= '@')
3172 goto yy94;
3173 goto yy154;
3174 } else {
3175 if (yych <= '`')
3176 goto yy94;
3177 if (yych <= 'z')
3178 goto yy154;
3179 goto yy94;
3180 }
3181 }
3182 yy153:
3183 ++p;
3184 yych = *p;
3185 if (yych <= '9') {
3186 if (yych == '-')
3187 goto yy155;
3188 if (yych <= '/')
3189 goto yy94;
3190 goto yy156;
3191 } else {
3192 if (yych <= 'Z') {
3193 if (yych <= '@')
3194 goto yy94;
3195 goto yy156;
3196 } else {
3197 if (yych <= '`')
3198 goto yy94;
3199 if (yych <= 'z')
3200 goto yy156;
3201 goto yy94;
3202 }
3203 }
3204 yy154:
3205 ++p;
3206 yych = *p;
3207 if (yych <= '=') {
3208 if (yych <= '.') {
3209 if (yych <= ',')
3210 goto yy94;
3211 if (yych >= '.')
3212 goto yy95;
3213 } else {
3214 if (yych <= '/')
3215 goto yy94;
3216 if (yych <= '9')
3217 goto yy156;
3218 goto yy94;
3219 }
3220 } else {
3221 if (yych <= 'Z') {
3222 if (yych <= '>')
3223 goto yy99;
3224 if (yych <= '@')
3225 goto yy94;
3226 goto yy156;
3227 } else {
3228 if (yych <= '`')
3229 goto yy94;
3230 if (yych <= 'z')
3231 goto yy156;
3232 goto yy94;
3233 }
3234 }
3235 yy155:
3236 ++p;
3237 yych = *p;
3238 if (yych <= '9') {
3239 if (yych == '-')
3240 goto yy157;
3241 if (yych <= '/')
3242 goto yy94;
3243 goto yy158;
3244 } else {
3245 if (yych <= 'Z') {
3246 if (yych <= '@')
3247 goto yy94;
3248 goto yy158;
3249 } else {
3250 if (yych <= '`')
3251 goto yy94;
3252 if (yych <= 'z')
3253 goto yy158;
3254 goto yy94;
3255 }
3256 }
3257 yy156:
3258 ++p;
3259 yych = *p;
3260 if (yych <= '=') {
3261 if (yych <= '.') {
3262 if (yych <= ',')
3263 goto yy94;
3264 if (yych >= '.')
3265 goto yy95;
3266 } else {
3267 if (yych <= '/')
3268 goto yy94;
3269 if (yych <= '9')
3270 goto yy158;
3271 goto yy94;
3272 }
3273 } else {
3274 if (yych <= 'Z') {
3275 if (yych <= '>')
3276 goto yy99;
3277 if (yych <= '@')
3278 goto yy94;
3279 goto yy158;
3280 } else {
3281 if (yych <= '`')
3282 goto yy94;
3283 if (yych <= 'z')
3284 goto yy158;
3285 goto yy94;
3286 }
3287 }
3288 yy157:
3289 ++p;
3290 yych = *p;
3291 if (yych <= '9') {
3292 if (yych == '-')
3293 goto yy159;
3294 if (yych <= '/')
3295 goto yy94;
3296 goto yy160;
3297 } else {
3298 if (yych <= 'Z') {
3299 if (yych <= '@')
3300 goto yy94;
3301 goto yy160;
3302 } else {
3303 if (yych <= '`')
3304 goto yy94;
3305 if (yych <= 'z')
3306 goto yy160;
3307 goto yy94;
3308 }
3309 }
3310 yy158:
3311 ++p;
3312 yych = *p;
3313 if (yych <= '=') {
3314 if (yych <= '.') {
3315 if (yych <= ',')
3316 goto yy94;
3317 if (yych >= '.')
3318 goto yy95;
3319 } else {
3320 if (yych <= '/')
3321 goto yy94;
3322 if (yych <= '9')
3323 goto yy160;
3324 goto yy94;
3325 }
3326 } else {
3327 if (yych <= 'Z') {
3328 if (yych <= '>')
3329 goto yy99;
3330 if (yych <= '@')
3331 goto yy94;
3332 goto yy160;
3333 } else {
3334 if (yych <= '`')
3335 goto yy94;
3336 if (yych <= 'z')
3337 goto yy160;
3338 goto yy94;
3339 }
3340 }
3341 yy159:
3342 ++p;
3343 yych = *p;
3344 if (yych <= '9') {
3345 if (yych == '-')
3346 goto yy161;
3347 if (yych <= '/')
3348 goto yy94;
3349 goto yy162;
3350 } else {
3351 if (yych <= 'Z') {
3352 if (yych <= '@')
3353 goto yy94;
3354 goto yy162;
3355 } else {
3356 if (yych <= '`')
3357 goto yy94;
3358 if (yych <= 'z')
3359 goto yy162;
3360 goto yy94;
3361 }
3362 }
3363 yy160:
3364 ++p;
3365 yych = *p;
3366 if (yych <= '=') {
3367 if (yych <= '.') {
3368 if (yych <= ',')
3369 goto yy94;
3370 if (yych >= '.')
3371 goto yy95;
3372 } else {
3373 if (yych <= '/')
3374 goto yy94;
3375 if (yych <= '9')
3376 goto yy162;
3377 goto yy94;
3378 }
3379 } else {
3380 if (yych <= 'Z') {
3381 if (yych <= '>')
3382 goto yy99;
3383 if (yych <= '@')
3384 goto yy94;
3385 goto yy162;
3386 } else {
3387 if (yych <= '`')
3388 goto yy94;
3389 if (yych <= 'z')
3390 goto yy162;
3391 goto yy94;
3392 }
3393 }
3394 yy161:
3395 ++p;
3396 yych = *p;
3397 if (yych <= '9') {
3398 if (yych == '-')
3399 goto yy163;
3400 if (yych <= '/')
3401 goto yy94;
3402 goto yy164;
3403 } else {
3404 if (yych <= 'Z') {
3405 if (yych <= '@')
3406 goto yy94;
3407 goto yy164;
3408 } else {
3409 if (yych <= '`')
3410 goto yy94;
3411 if (yych <= 'z')
3412 goto yy164;
3413 goto yy94;
3414 }
3415 }
3416 yy162:
3417 ++p;
3418 yych = *p;
3419 if (yych <= '=') {
3420 if (yych <= '.') {
3421 if (yych <= ',')
3422 goto yy94;
3423 if (yych >= '.')
3424 goto yy95;
3425 } else {
3426 if (yych <= '/')
3427 goto yy94;
3428 if (yych <= '9')
3429 goto yy164;
3430 goto yy94;
3431 }
3432 } else {
3433 if (yych <= 'Z') {
3434 if (yych <= '>')
3435 goto yy99;
3436 if (yych <= '@')
3437 goto yy94;
3438 goto yy164;
3439 } else {
3440 if (yych <= '`')
3441 goto yy94;
3442 if (yych <= 'z')
3443 goto yy164;
3444 goto yy94;
3445 }
3446 }
3447 yy163:
3448 ++p;
3449 yych = *p;
3450 if (yych <= '9') {
3451 if (yych == '-')
3452 goto yy165;
3453 if (yych <= '/')
3454 goto yy94;
3455 goto yy166;
3456 } else {
3457 if (yych <= 'Z') {
3458 if (yych <= '@')
3459 goto yy94;
3460 goto yy166;
3461 } else {
3462 if (yych <= '`')
3463 goto yy94;
3464 if (yych <= 'z')
3465 goto yy166;
3466 goto yy94;
3467 }
3468 }
3469 yy164:
3470 ++p;
3471 yych = *p;
3472 if (yych <= '=') {
3473 if (yych <= '.') {
3474 if (yych <= ',')
3475 goto yy94;
3476 if (yych >= '.')
3477 goto yy95;
3478 } else {
3479 if (yych <= '/')
3480 goto yy94;
3481 if (yych <= '9')
3482 goto yy166;
3483 goto yy94;
3484 }
3485 } else {
3486 if (yych <= 'Z') {
3487 if (yych <= '>')
3488 goto yy99;
3489 if (yych <= '@')
3490 goto yy94;
3491 goto yy166;
3492 } else {
3493 if (yych <= '`')
3494 goto yy94;
3495 if (yych <= 'z')
3496 goto yy166;
3497 goto yy94;
3498 }
3499 }
3500 yy165:
3501 ++p;
3502 yych = *p;
3503 if (yych <= '9') {
3504 if (yych == '-')
3505 goto yy167;
3506 if (yych <= '/')
3507 goto yy94;
3508 goto yy168;
3509 } else {
3510 if (yych <= 'Z') {
3511 if (yych <= '@')
3512 goto yy94;
3513 goto yy168;
3514 } else {
3515 if (yych <= '`')
3516 goto yy94;
3517 if (yych <= 'z')
3518 goto yy168;
3519 goto yy94;
3520 }
3521 }
3522 yy166:
3523 ++p;
3524 yych = *p;
3525 if (yych <= '=') {
3526 if (yych <= '.') {
3527 if (yych <= ',')
3528 goto yy94;
3529 if (yych >= '.')
3530 goto yy95;
3531 } else {
3532 if (yych <= '/')
3533 goto yy94;
3534 if (yych <= '9')
3535 goto yy168;
3536 goto yy94;
3537 }
3538 } else {
3539 if (yych <= 'Z') {
3540 if (yych <= '>')
3541 goto yy99;
3542 if (yych <= '@')
3543 goto yy94;
3544 goto yy168;
3545 } else {
3546 if (yych <= '`')
3547 goto yy94;
3548 if (yych <= 'z')
3549 goto yy168;
3550 goto yy94;
3551 }
3552 }
3553 yy167:
3554 ++p;
3555 yych = *p;
3556 if (yych <= '9') {
3557 if (yych == '-')
3558 goto yy169;
3559 if (yych <= '/')
3560 goto yy94;
3561 goto yy170;
3562 } else {
3563 if (yych <= 'Z') {
3564 if (yych <= '@')
3565 goto yy94;
3566 goto yy170;
3567 } else {
3568 if (yych <= '`')
3569 goto yy94;
3570 if (yych <= 'z')
3571 goto yy170;
3572 goto yy94;
3573 }
3574 }
3575 yy168:
3576 ++p;
3577 yych = *p;
3578 if (yych <= '=') {
3579 if (yych <= '.') {
3580 if (yych <= ',')
3581 goto yy94;
3582 if (yych >= '.')
3583 goto yy95;
3584 } else {
3585 if (yych <= '/')
3586 goto yy94;
3587 if (yych <= '9')
3588 goto yy170;
3589 goto yy94;
3590 }
3591 } else {
3592 if (yych <= 'Z') {
3593 if (yych <= '>')
3594 goto yy99;
3595 if (yych <= '@')
3596 goto yy94;
3597 goto yy170;
3598 } else {
3599 if (yych <= '`')
3600 goto yy94;
3601 if (yych <= 'z')
3602 goto yy170;
3603 goto yy94;
3604 }
3605 }
3606 yy169:
3607 ++p;
3608 yych = *p;
3609 if (yych <= '9') {
3610 if (yych == '-')
3611 goto yy171;
3612 if (yych <= '/')
3613 goto yy94;
3614 goto yy172;
3615 } else {
3616 if (yych <= 'Z') {
3617 if (yych <= '@')
3618 goto yy94;
3619 goto yy172;
3620 } else {
3621 if (yych <= '`')
3622 goto yy94;
3623 if (yych <= 'z')
3624 goto yy172;
3625 goto yy94;
3626 }
3627 }
3628 yy170:
3629 ++p;
3630 yych = *p;
3631 if (yych <= '=') {
3632 if (yych <= '.') {
3633 if (yych <= ',')
3634 goto yy94;
3635 if (yych >= '.')
3636 goto yy95;
3637 } else {
3638 if (yych <= '/')
3639 goto yy94;
3640 if (yych <= '9')
3641 goto yy172;
3642 goto yy94;
3643 }
3644 } else {
3645 if (yych <= 'Z') {
3646 if (yych <= '>')
3647 goto yy99;
3648 if (yych <= '@')
3649 goto yy94;
3650 goto yy172;
3651 } else {
3652 if (yych <= '`')
3653 goto yy94;
3654 if (yych <= 'z')
3655 goto yy172;
3656 goto yy94;
3657 }
3658 }
3659 yy171:
3660 ++p;
3661 yych = *p;
3662 if (yych <= '9') {
3663 if (yych == '-')
3664 goto yy173;
3665 if (yych <= '/')
3666 goto yy94;
3667 goto yy174;
3668 } else {
3669 if (yych <= 'Z') {
3670 if (yych <= '@')
3671 goto yy94;
3672 goto yy174;
3673 } else {
3674 if (yych <= '`')
3675 goto yy94;
3676 if (yych <= 'z')
3677 goto yy174;
3678 goto yy94;
3679 }
3680 }
3681 yy172:
3682 ++p;
3683 yych = *p;
3684 if (yych <= '=') {
3685 if (yych <= '.') {
3686 if (yych <= ',')
3687 goto yy94;
3688 if (yych >= '.')
3689 goto yy95;
3690 } else {
3691 if (yych <= '/')
3692 goto yy94;
3693 if (yych <= '9')
3694 goto yy174;
3695 goto yy94;
3696 }
3697 } else {
3698 if (yych <= 'Z') {
3699 if (yych <= '>')
3700 goto yy99;
3701 if (yych <= '@')
3702 goto yy94;
3703 goto yy174;
3704 } else {
3705 if (yych <= '`')
3706 goto yy94;
3707 if (yych <= 'z')
3708 goto yy174;
3709 goto yy94;
3710 }
3711 }
3712 yy173:
3713 ++p;
3714 yych = *p;
3715 if (yych <= '9') {
3716 if (yych == '-')
3717 goto yy175;
3718 if (yych <= '/')
3719 goto yy94;
3720 goto yy176;
3721 } else {
3722 if (yych <= 'Z') {
3723 if (yych <= '@')
3724 goto yy94;
3725 goto yy176;
3726 } else {
3727 if (yych <= '`')
3728 goto yy94;
3729 if (yych <= 'z')
3730 goto yy176;
3731 goto yy94;
3732 }
3733 }
3734 yy174:
3735 ++p;
3736 yych = *p;
3737 if (yych <= '=') {
3738 if (yych <= '.') {
3739 if (yych <= ',')
3740 goto yy94;
3741 if (yych >= '.')
3742 goto yy95;
3743 } else {
3744 if (yych <= '/')
3745 goto yy94;
3746 if (yych <= '9')
3747 goto yy176;
3748 goto yy94;
3749 }
3750 } else {
3751 if (yych <= 'Z') {
3752 if (yych <= '>')
3753 goto yy99;
3754 if (yych <= '@')
3755 goto yy94;
3756 goto yy176;
3757 } else {
3758 if (yych <= '`')
3759 goto yy94;
3760 if (yych <= 'z')
3761 goto yy176;
3762 goto yy94;
3763 }
3764 }
3765 yy175:
3766 ++p;
3767 yych = *p;
3768 if (yych <= '9') {
3769 if (yych == '-')
3770 goto yy177;
3771 if (yych <= '/')
3772 goto yy94;
3773 goto yy178;
3774 } else {
3775 if (yych <= 'Z') {
3776 if (yych <= '@')
3777 goto yy94;
3778 goto yy178;
3779 } else {
3780 if (yych <= '`')
3781 goto yy94;
3782 if (yych <= 'z')
3783 goto yy178;
3784 goto yy94;
3785 }
3786 }
3787 yy176:
3788 ++p;
3789 yych = *p;
3790 if (yych <= '=') {
3791 if (yych <= '.') {
3792 if (yych <= ',')
3793 goto yy94;
3794 if (yych >= '.')
3795 goto yy95;
3796 } else {
3797 if (yych <= '/')
3798 goto yy94;
3799 if (yych <= '9')
3800 goto yy178;
3801 goto yy94;
3802 }
3803 } else {
3804 if (yych <= 'Z') {
3805 if (yych <= '>')
3806 goto yy99;
3807 if (yych <= '@')
3808 goto yy94;
3809 goto yy178;
3810 } else {
3811 if (yych <= '`')
3812 goto yy94;
3813 if (yych <= 'z')
3814 goto yy178;
3815 goto yy94;
3816 }
3817 }
3818 yy177:
3819 ++p;
3820 yych = *p;
3821 if (yych <= '9') {
3822 if (yych == '-')
3823 goto yy179;
3824 if (yych <= '/')
3825 goto yy94;
3826 goto yy180;
3827 } else {
3828 if (yych <= 'Z') {
3829 if (yych <= '@')
3830 goto yy94;
3831 goto yy180;
3832 } else {
3833 if (yych <= '`')
3834 goto yy94;
3835 if (yych <= 'z')
3836 goto yy180;
3837 goto yy94;
3838 }
3839 }
3840 yy178:
3841 ++p;
3842 yych = *p;
3843 if (yych <= '=') {
3844 if (yych <= '.') {
3845 if (yych <= ',')
3846 goto yy94;
3847 if (yych >= '.')
3848 goto yy95;
3849 } else {
3850 if (yych <= '/')
3851 goto yy94;
3852 if (yych <= '9')
3853 goto yy180;
3854 goto yy94;
3855 }
3856 } else {
3857 if (yych <= 'Z') {
3858 if (yych <= '>')
3859 goto yy99;
3860 if (yych <= '@')
3861 goto yy94;
3862 goto yy180;
3863 } else {
3864 if (yych <= '`')
3865 goto yy94;
3866 if (yych <= 'z')
3867 goto yy180;
3868 goto yy94;
3869 }
3870 }
3871 yy179:
3872 ++p;
3873 yych = *p;
3874 if (yych <= '9') {
3875 if (yych == '-')
3876 goto yy181;
3877 if (yych <= '/')
3878 goto yy94;
3879 goto yy182;
3880 } else {
3881 if (yych <= 'Z') {
3882 if (yych <= '@')
3883 goto yy94;
3884 goto yy182;
3885 } else {
3886 if (yych <= '`')
3887 goto yy94;
3888 if (yych <= 'z')
3889 goto yy182;
3890 goto yy94;
3891 }
3892 }
3893 yy180:
3894 ++p;
3895 yych = *p;
3896 if (yych <= '=') {
3897 if (yych <= '.') {
3898 if (yych <= ',')
3899 goto yy94;
3900 if (yych >= '.')
3901 goto yy95;
3902 } else {
3903 if (yych <= '/')
3904 goto yy94;
3905 if (yych <= '9')
3906 goto yy182;
3907 goto yy94;
3908 }
3909 } else {
3910 if (yych <= 'Z') {
3911 if (yych <= '>')
3912 goto yy99;
3913 if (yych <= '@')
3914 goto yy94;
3915 goto yy182;
3916 } else {
3917 if (yych <= '`')
3918 goto yy94;
3919 if (yych <= 'z')
3920 goto yy182;
3921 goto yy94;
3922 }
3923 }
3924 yy181:
3925 ++p;
3926 yych = *p;
3927 if (yych <= '9') {
3928 if (yych == '-')
3929 goto yy183;
3930 if (yych <= '/')
3931 goto yy94;
3932 goto yy184;
3933 } else {
3934 if (yych <= 'Z') {
3935 if (yych <= '@')
3936 goto yy94;
3937 goto yy184;
3938 } else {
3939 if (yych <= '`')
3940 goto yy94;
3941 if (yych <= 'z')
3942 goto yy184;
3943 goto yy94;
3944 }
3945 }
3946 yy182:
3947 ++p;
3948 yych = *p;
3949 if (yych <= '=') {
3950 if (yych <= '.') {
3951 if (yych <= ',')
3952 goto yy94;
3953 if (yych >= '.')
3954 goto yy95;
3955 } else {
3956 if (yych <= '/')
3957 goto yy94;
3958 if (yych <= '9')
3959 goto yy184;
3960 goto yy94;
3961 }
3962 } else {
3963 if (yych <= 'Z') {
3964 if (yych <= '>')
3965 goto yy99;
3966 if (yych <= '@')
3967 goto yy94;
3968 goto yy184;
3969 } else {
3970 if (yych <= '`')
3971 goto yy94;
3972 if (yych <= 'z')
3973 goto yy184;
3974 goto yy94;
3975 }
3976 }
3977 yy183:
3978 ++p;
3979 yych = *p;
3980 if (yych <= '9') {
3981 if (yych == '-')
3982 goto yy185;
3983 if (yych <= '/')
3984 goto yy94;
3985 goto yy186;
3986 } else {
3987 if (yych <= 'Z') {
3988 if (yych <= '@')
3989 goto yy94;
3990 goto yy186;
3991 } else {
3992 if (yych <= '`')
3993 goto yy94;
3994 if (yych <= 'z')
3995 goto yy186;
3996 goto yy94;
3997 }
3998 }
3999 yy184:
4000 ++p;
4001 yych = *p;
4002 if (yych <= '=') {
4003 if (yych <= '.') {
4004 if (yych <= ',')
4005 goto yy94;
4006 if (yych >= '.')
4007 goto yy95;
4008 } else {
4009 if (yych <= '/')
4010 goto yy94;
4011 if (yych <= '9')
4012 goto yy186;
4013 goto yy94;
4014 }
4015 } else {
4016 if (yych <= 'Z') {
4017 if (yych <= '>')
4018 goto yy99;
4019 if (yych <= '@')
4020 goto yy94;
4021 goto yy186;
4022 } else {
4023 if (yych <= '`')
4024 goto yy94;
4025 if (yych <= 'z')
4026 goto yy186;
4027 goto yy94;
4028 }
4029 }
4030 yy185:
4031 ++p;
4032 yych = *p;
4033 if (yych <= '9') {
4034 if (yych == '-')
4035 goto yy187;
4036 if (yych <= '/')
4037 goto yy94;
4038 goto yy188;
4039 } else {
4040 if (yych <= 'Z') {
4041 if (yych <= '@')
4042 goto yy94;
4043 goto yy188;
4044 } else {
4045 if (yych <= '`')
4046 goto yy94;
4047 if (yych <= 'z')
4048 goto yy188;
4049 goto yy94;
4050 }
4051 }
4052 yy186:
4053 ++p;
4054 yych = *p;
4055 if (yych <= '=') {
4056 if (yych <= '.') {
4057 if (yych <= ',')
4058 goto yy94;
4059 if (yych >= '.')
4060 goto yy95;
4061 } else {
4062 if (yych <= '/')
4063 goto yy94;
4064 if (yych <= '9')
4065 goto yy188;
4066 goto yy94;
4067 }
4068 } else {
4069 if (yych <= 'Z') {
4070 if (yych <= '>')
4071 goto yy99;
4072 if (yych <= '@')
4073 goto yy94;
4074 goto yy188;
4075 } else {
4076 if (yych <= '`')
4077 goto yy94;
4078 if (yych <= 'z')
4079 goto yy188;
4080 goto yy94;
4081 }
4082 }
4083 yy187:
4084 ++p;
4085 yych = *p;
4086 if (yych <= '9') {
4087 if (yych == '-')
4088 goto yy189;
4089 if (yych <= '/')
4090 goto yy94;
4091 goto yy190;
4092 } else {
4093 if (yych <= 'Z') {
4094 if (yych <= '@')
4095 goto yy94;
4096 goto yy190;
4097 } else {
4098 if (yych <= '`')
4099 goto yy94;
4100 if (yych <= 'z')
4101 goto yy190;
4102 goto yy94;
4103 }
4104 }
4105 yy188:
4106 ++p;
4107 yych = *p;
4108 if (yych <= '=') {
4109 if (yych <= '.') {
4110 if (yych <= ',')
4111 goto yy94;
4112 if (yych >= '.')
4113 goto yy95;
4114 } else {
4115 if (yych <= '/')
4116 goto yy94;
4117 if (yych <= '9')
4118 goto yy190;
4119 goto yy94;
4120 }
4121 } else {
4122 if (yych <= 'Z') {
4123 if (yych <= '>')
4124 goto yy99;
4125 if (yych <= '@')
4126 goto yy94;
4127 goto yy190;
4128 } else {
4129 if (yych <= '`')
4130 goto yy94;
4131 if (yych <= 'z')
4132 goto yy190;
4133 goto yy94;
4134 }
4135 }
4136 yy189:
4137 ++p;
4138 yych = *p;
4139 if (yych <= '9') {
4140 if (yych == '-')
4141 goto yy191;
4142 if (yych <= '/')
4143 goto yy94;
4144 goto yy192;
4145 } else {
4146 if (yych <= 'Z') {
4147 if (yych <= '@')
4148 goto yy94;
4149 goto yy192;
4150 } else {
4151 if (yych <= '`')
4152 goto yy94;
4153 if (yych <= 'z')
4154 goto yy192;
4155 goto yy94;
4156 }
4157 }
4158 yy190:
4159 ++p;
4160 yych = *p;
4161 if (yych <= '=') {
4162 if (yych <= '.') {
4163 if (yych <= ',')
4164 goto yy94;
4165 if (yych >= '.')
4166 goto yy95;
4167 } else {
4168 if (yych <= '/')
4169 goto yy94;
4170 if (yych <= '9')
4171 goto yy192;
4172 goto yy94;
4173 }
4174 } else {
4175 if (yych <= 'Z') {
4176 if (yych <= '>')
4177 goto yy99;
4178 if (yych <= '@')
4179 goto yy94;
4180 goto yy192;
4181 } else {
4182 if (yych <= '`')
4183 goto yy94;
4184 if (yych <= 'z')
4185 goto yy192;
4186 goto yy94;
4187 }
4188 }
4189 yy191:
4190 ++p;
4191 yych = *p;
4192 if (yych <= '9') {
4193 if (yych == '-')
4194 goto yy193;
4195 if (yych <= '/')
4196 goto yy94;
4197 goto yy194;
4198 } else {
4199 if (yych <= 'Z') {
4200 if (yych <= '@')
4201 goto yy94;
4202 goto yy194;
4203 } else {
4204 if (yych <= '`')
4205 goto yy94;
4206 if (yych <= 'z')
4207 goto yy194;
4208 goto yy94;
4209 }
4210 }
4211 yy192:
4212 ++p;
4213 yych = *p;
4214 if (yych <= '=') {
4215 if (yych <= '.') {
4216 if (yych <= ',')
4217 goto yy94;
4218 if (yych >= '.')
4219 goto yy95;
4220 } else {
4221 if (yych <= '/')
4222 goto yy94;
4223 if (yych <= '9')
4224 goto yy194;
4225 goto yy94;
4226 }
4227 } else {
4228 if (yych <= 'Z') {
4229 if (yych <= '>')
4230 goto yy99;
4231 if (yych <= '@')
4232 goto yy94;
4233 goto yy194;
4234 } else {
4235 if (yych <= '`')
4236 goto yy94;
4237 if (yych <= 'z')
4238 goto yy194;
4239 goto yy94;
4240 }
4241 }
4242 yy193:
4243 ++p;
4244 yych = *p;
4245 if (yych <= '9') {
4246 if (yych == '-')
4247 goto yy195;
4248 if (yych <= '/')
4249 goto yy94;
4250 goto yy196;
4251 } else {
4252 if (yych <= 'Z') {
4253 if (yych <= '@')
4254 goto yy94;
4255 goto yy196;
4256 } else {
4257 if (yych <= '`')
4258 goto yy94;
4259 if (yych <= 'z')
4260 goto yy196;
4261 goto yy94;
4262 }
4263 }
4264 yy194:
4265 ++p;
4266 yych = *p;
4267 if (yych <= '=') {
4268 if (yych <= '.') {
4269 if (yych <= ',')
4270 goto yy94;
4271 if (yych >= '.')
4272 goto yy95;
4273 } else {
4274 if (yych <= '/')
4275 goto yy94;
4276 if (yych <= '9')
4277 goto yy196;
4278 goto yy94;
4279 }
4280 } else {
4281 if (yych <= 'Z') {
4282 if (yych <= '>')
4283 goto yy99;
4284 if (yych <= '@')
4285 goto yy94;
4286 goto yy196;
4287 } else {
4288 if (yych <= '`')
4289 goto yy94;
4290 if (yych <= 'z')
4291 goto yy196;
4292 goto yy94;
4293 }
4294 }
4295 yy195:
4296 ++p;
4297 yych = *p;
4298 if (yych <= '9') {
4299 if (yych == '-')
4300 goto yy197;
4301 if (yych <= '/')
4302 goto yy94;
4303 goto yy198;
4304 } else {
4305 if (yych <= 'Z') {
4306 if (yych <= '@')
4307 goto yy94;
4308 goto yy198;
4309 } else {
4310 if (yych <= '`')
4311 goto yy94;
4312 if (yych <= 'z')
4313 goto yy198;
4314 goto yy94;
4315 }
4316 }
4317 yy196:
4318 ++p;
4319 yych = *p;
4320 if (yych <= '=') {
4321 if (yych <= '.') {
4322 if (yych <= ',')
4323 goto yy94;
4324 if (yych >= '.')
4325 goto yy95;
4326 } else {
4327 if (yych <= '/')
4328 goto yy94;
4329 if (yych <= '9')
4330 goto yy198;
4331 goto yy94;
4332 }
4333 } else {
4334 if (yych <= 'Z') {
4335 if (yych <= '>')
4336 goto yy99;
4337 if (yych <= '@')
4338 goto yy94;
4339 goto yy198;
4340 } else {
4341 if (yych <= '`')
4342 goto yy94;
4343 if (yych <= 'z')
4344 goto yy198;
4345 goto yy94;
4346 }
4347 }
4348 yy197:
4349 ++p;
4350 yych = *p;
4351 if (yych <= '9') {
4352 if (yych == '-')
4353 goto yy199;
4354 if (yych <= '/')
4355 goto yy94;
4356 goto yy200;
4357 } else {
4358 if (yych <= 'Z') {
4359 if (yych <= '@')
4360 goto yy94;
4361 goto yy200;
4362 } else {
4363 if (yych <= '`')
4364 goto yy94;
4365 if (yych <= 'z')
4366 goto yy200;
4367 goto yy94;
4368 }
4369 }
4370 yy198:
4371 ++p;
4372 yych = *p;
4373 if (yych <= '=') {
4374 if (yych <= '.') {
4375 if (yych <= ',')
4376 goto yy94;
4377 if (yych >= '.')
4378 goto yy95;
4379 } else {
4380 if (yych <= '/')
4381 goto yy94;
4382 if (yych <= '9')
4383 goto yy200;
4384 goto yy94;
4385 }
4386 } else {
4387 if (yych <= 'Z') {
4388 if (yych <= '>')
4389 goto yy99;
4390 if (yych <= '@')
4391 goto yy94;
4392 goto yy200;
4393 } else {
4394 if (yych <= '`')
4395 goto yy94;
4396 if (yych <= 'z')
4397 goto yy200;
4398 goto yy94;
4399 }
4400 }
4401 yy199:
4402 ++p;
4403 yych = *p;
4404 if (yych <= '9') {
4405 if (yych == '-')
4406 goto yy201;
4407 if (yych <= '/')
4408 goto yy94;
4409 goto yy202;
4410 } else {
4411 if (yych <= 'Z') {
4412 if (yych <= '@')
4413 goto yy94;
4414 goto yy202;
4415 } else {
4416 if (yych <= '`')
4417 goto yy94;
4418 if (yych <= 'z')
4419 goto yy202;
4420 goto yy94;
4421 }
4422 }
4423 yy200:
4424 ++p;
4425 yych = *p;
4426 if (yych <= '=') {
4427 if (yych <= '.') {
4428 if (yych <= ',')
4429 goto yy94;
4430 if (yych >= '.')
4431 goto yy95;
4432 } else {
4433 if (yych <= '/')
4434 goto yy94;
4435 if (yych <= '9')
4436 goto yy202;
4437 goto yy94;
4438 }
4439 } else {
4440 if (yych <= 'Z') {
4441 if (yych <= '>')
4442 goto yy99;
4443 if (yych <= '@')
4444 goto yy94;
4445 goto yy202;
4446 } else {
4447 if (yych <= '`')
4448 goto yy94;
4449 if (yych <= 'z')
4450 goto yy202;
4451 goto yy94;
4452 }
4453 }
4454 yy201:
4455 ++p;
4456 yych = *p;
4457 if (yych <= '9') {
4458 if (yych == '-')
4459 goto yy203;
4460 if (yych <= '/')
4461 goto yy94;
4462 goto yy204;
4463 } else {
4464 if (yych <= 'Z') {
4465 if (yych <= '@')
4466 goto yy94;
4467 goto yy204;
4468 } else {
4469 if (yych <= '`')
4470 goto yy94;
4471 if (yych <= 'z')
4472 goto yy204;
4473 goto yy94;
4474 }
4475 }
4476 yy202:
4477 ++p;
4478 yych = *p;
4479 if (yych <= '=') {
4480 if (yych <= '.') {
4481 if (yych <= ',')
4482 goto yy94;
4483 if (yych >= '.')
4484 goto yy95;
4485 } else {
4486 if (yych <= '/')
4487 goto yy94;
4488 if (yych <= '9')
4489 goto yy204;
4490 goto yy94;
4491 }
4492 } else {
4493 if (yych <= 'Z') {
4494 if (yych <= '>')
4495 goto yy99;
4496 if (yych <= '@')
4497 goto yy94;
4498 goto yy204;
4499 } else {
4500 if (yych <= '`')
4501 goto yy94;
4502 if (yych <= 'z')
4503 goto yy204;
4504 goto yy94;
4505 }
4506 }
4507 yy203:
4508 ++p;
4509 yych = *p;
4510 if (yych <= '9') {
4511 if (yych == '-')
4512 goto yy205;
4513 if (yych <= '/')
4514 goto yy94;
4515 goto yy206;
4516 } else {
4517 if (yych <= 'Z') {
4518 if (yych <= '@')
4519 goto yy94;
4520 goto yy206;
4521 } else {
4522 if (yych <= '`')
4523 goto yy94;
4524 if (yych <= 'z')
4525 goto yy206;
4526 goto yy94;
4527 }
4528 }
4529 yy204:
4530 ++p;
4531 yych = *p;
4532 if (yych <= '=') {
4533 if (yych <= '.') {
4534 if (yych <= ',')
4535 goto yy94;
4536 if (yych >= '.')
4537 goto yy95;
4538 } else {
4539 if (yych <= '/')
4540 goto yy94;
4541 if (yych <= '9')
4542 goto yy206;
4543 goto yy94;
4544 }
4545 } else {
4546 if (yych <= 'Z') {
4547 if (yych <= '>')
4548 goto yy99;
4549 if (yych <= '@')
4550 goto yy94;
4551 goto yy206;
4552 } else {
4553 if (yych <= '`')
4554 goto yy94;
4555 if (yych <= 'z')
4556 goto yy206;
4557 goto yy94;
4558 }
4559 }
4560 yy205:
4561 ++p;
4562 yych = *p;
4563 if (yych <= '9') {
4564 if (yych == '-')
4565 goto yy207;
4566 if (yych <= '/')
4567 goto yy94;
4568 goto yy208;
4569 } else {
4570 if (yych <= 'Z') {
4571 if (yych <= '@')
4572 goto yy94;
4573 goto yy208;
4574 } else {
4575 if (yych <= '`')
4576 goto yy94;
4577 if (yych <= 'z')
4578 goto yy208;
4579 goto yy94;
4580 }
4581 }
4582 yy206:
4583 ++p;
4584 yych = *p;
4585 if (yych <= '=') {
4586 if (yych <= '.') {
4587 if (yych <= ',')
4588 goto yy94;
4589 if (yych >= '.')
4590 goto yy95;
4591 } else {
4592 if (yych <= '/')
4593 goto yy94;
4594 if (yych <= '9')
4595 goto yy208;
4596 goto yy94;
4597 }
4598 } else {
4599 if (yych <= 'Z') {
4600 if (yych <= '>')
4601 goto yy99;
4602 if (yych <= '@')
4603 goto yy94;
4604 goto yy208;
4605 } else {
4606 if (yych <= '`')
4607 goto yy94;
4608 if (yych <= 'z')
4609 goto yy208;
4610 goto yy94;
4611 }
4612 }
4613 yy207:
4614 ++p;
4615 yych = *p;
4616 if (yych <= '9') {
4617 if (yych == '-')
4618 goto yy209;
4619 if (yych <= '/')
4620 goto yy94;
4621 goto yy210;
4622 } else {
4623 if (yych <= 'Z') {
4624 if (yych <= '@')
4625 goto yy94;
4626 goto yy210;
4627 } else {
4628 if (yych <= '`')
4629 goto yy94;
4630 if (yych <= 'z')
4631 goto yy210;
4632 goto yy94;
4633 }
4634 }
4635 yy208:
4636 ++p;
4637 yych = *p;
4638 if (yych <= '=') {
4639 if (yych <= '.') {
4640 if (yych <= ',')
4641 goto yy94;
4642 if (yych >= '.')
4643 goto yy95;
4644 } else {
4645 if (yych <= '/')
4646 goto yy94;
4647 if (yych <= '9')
4648 goto yy210;
4649 goto yy94;
4650 }
4651 } else {
4652 if (yych <= 'Z') {
4653 if (yych <= '>')
4654 goto yy99;
4655 if (yych <= '@')
4656 goto yy94;
4657 goto yy210;
4658 } else {
4659 if (yych <= '`')
4660 goto yy94;
4661 if (yych <= 'z')
4662 goto yy210;
4663 goto yy94;
4664 }
4665 }
4666 yy209:
4667 ++p;
4668 yych = *p;
4669 if (yych <= '9') {
4670 if (yych == '-')
4671 goto yy211;
4672 if (yych <= '/')
4673 goto yy94;
4674 goto yy212;
4675 } else {
4676 if (yych <= 'Z') {
4677 if (yych <= '@')
4678 goto yy94;
4679 goto yy212;
4680 } else {
4681 if (yych <= '`')
4682 goto yy94;
4683 if (yych <= 'z')
4684 goto yy212;
4685 goto yy94;
4686 }
4687 }
4688 yy210:
4689 ++p;
4690 yych = *p;
4691 if (yych <= '=') {
4692 if (yych <= '.') {
4693 if (yych <= ',')
4694 goto yy94;
4695 if (yych >= '.')
4696 goto yy95;
4697 } else {
4698 if (yych <= '/')
4699 goto yy94;
4700 if (yych <= '9')
4701 goto yy212;
4702 goto yy94;
4703 }
4704 } else {
4705 if (yych <= 'Z') {
4706 if (yych <= '>')
4707 goto yy99;
4708 if (yych <= '@')
4709 goto yy94;
4710 goto yy212;
4711 } else {
4712 if (yych <= '`')
4713 goto yy94;
4714 if (yych <= 'z')
4715 goto yy212;
4716 goto yy94;
4717 }
4718 }
4719 yy211:
4720 ++p;
4721 yych = *p;
4722 if (yych <= '9') {
4723 if (yych == '-')
4724 goto yy213;
4725 if (yych <= '/')
4726 goto yy94;
4727 goto yy214;
4728 } else {
4729 if (yych <= 'Z') {
4730 if (yych <= '@')
4731 goto yy94;
4732 goto yy214;
4733 } else {
4734 if (yych <= '`')
4735 goto yy94;
4736 if (yych <= 'z')
4737 goto yy214;
4738 goto yy94;
4739 }
4740 }
4741 yy212:
4742 ++p;
4743 yych = *p;
4744 if (yych <= '=') {
4745 if (yych <= '.') {
4746 if (yych <= ',')
4747 goto yy94;
4748 if (yych >= '.')
4749 goto yy95;
4750 } else {
4751 if (yych <= '/')
4752 goto yy94;
4753 if (yych <= '9')
4754 goto yy214;
4755 goto yy94;
4756 }
4757 } else {
4758 if (yych <= 'Z') {
4759 if (yych <= '>')
4760 goto yy99;
4761 if (yych <= '@')
4762 goto yy94;
4763 goto yy214;
4764 } else {
4765 if (yych <= '`')
4766 goto yy94;
4767 if (yych <= 'z')
4768 goto yy214;
4769 goto yy94;
4770 }
4771 }
4772 yy213:
4773 ++p;
4774 yych = *p;
4775 if (yych <= '9') {
4776 if (yych == '-')
4777 goto yy215;
4778 if (yych <= '/')
4779 goto yy94;
4780 goto yy216;
4781 } else {
4782 if (yych <= 'Z') {
4783 if (yych <= '@')
4784 goto yy94;
4785 goto yy216;
4786 } else {
4787 if (yych <= '`')
4788 goto yy94;
4789 if (yych <= 'z')
4790 goto yy216;
4791 goto yy94;
4792 }
4793 }
4794 yy214:
4795 ++p;
4796 yych = *p;
4797 if (yych <= '=') {
4798 if (yych <= '.') {
4799 if (yych <= ',')
4800 goto yy94;
4801 if (yych >= '.')
4802 goto yy95;
4803 } else {
4804 if (yych <= '/')
4805 goto yy94;
4806 if (yych <= '9')
4807 goto yy216;
4808 goto yy94;
4809 }
4810 } else {
4811 if (yych <= 'Z') {
4812 if (yych <= '>')
4813 goto yy99;
4814 if (yych <= '@')
4815 goto yy94;
4816 goto yy216;
4817 } else {
4818 if (yych <= '`')
4819 goto yy94;
4820 if (yych <= 'z')
4821 goto yy216;
4822 goto yy94;
4823 }
4824 }
4825 yy215:
4826 ++p;
4827 yych = *p;
4828 if (yych <= '9') {
4829 if (yych == '-')
4830 goto yy217;
4831 if (yych <= '/')
4832 goto yy94;
4833 goto yy218;
4834 } else {
4835 if (yych <= 'Z') {
4836 if (yych <= '@')
4837 goto yy94;
4838 goto yy218;
4839 } else {
4840 if (yych <= '`')
4841 goto yy94;
4842 if (yych <= 'z')
4843 goto yy218;
4844 goto yy94;
4845 }
4846 }
4847 yy216:
4848 ++p;
4849 yych = *p;
4850 if (yych <= '=') {
4851 if (yych <= '.') {
4852 if (yych <= ',')
4853 goto yy94;
4854 if (yych >= '.')
4855 goto yy95;
4856 } else {
4857 if (yych <= '/')
4858 goto yy94;
4859 if (yych <= '9')
4860 goto yy218;
4861 goto yy94;
4862 }
4863 } else {
4864 if (yych <= 'Z') {
4865 if (yych <= '>')
4866 goto yy99;
4867 if (yych <= '@')
4868 goto yy94;
4869 goto yy218;
4870 } else {
4871 if (yych <= '`')
4872 goto yy94;
4873 if (yych <= 'z')
4874 goto yy218;
4875 goto yy94;
4876 }
4877 }
4878 yy217:
4879 ++p;
4880 yych = *p;
4881 if (yych <= '9') {
4882 if (yych == '-')
4883 goto yy219;
4884 if (yych <= '/')
4885 goto yy94;
4886 goto yy220;
4887 } else {
4888 if (yych <= 'Z') {
4889 if (yych <= '@')
4890 goto yy94;
4891 goto yy220;
4892 } else {
4893 if (yych <= '`')
4894 goto yy94;
4895 if (yych <= 'z')
4896 goto yy220;
4897 goto yy94;
4898 }
4899 }
4900 yy218:
4901 ++p;
4902 yych = *p;
4903 if (yych <= '=') {
4904 if (yych <= '.') {
4905 if (yych <= ',')
4906 goto yy94;
4907 if (yych >= '.')
4908 goto yy95;
4909 } else {
4910 if (yych <= '/')
4911 goto yy94;
4912 if (yych <= '9')
4913 goto yy220;
4914 goto yy94;
4915 }
4916 } else {
4917 if (yych <= 'Z') {
4918 if (yych <= '>')
4919 goto yy99;
4920 if (yych <= '@')
4921 goto yy94;
4922 goto yy220;
4923 } else {
4924 if (yych <= '`')
4925 goto yy94;
4926 if (yych <= 'z')
4927 goto yy220;
4928 goto yy94;
4929 }
4930 }
4931 yy219:
4932 ++p;
4933 yych = *p;
4934 if (yych <= '@') {
4935 if (yych <= '/')
4936 goto yy94;
4937 if (yych <= '9')
4938 goto yy221;
4939 goto yy94;
4940 } else {
4941 if (yych <= 'Z')
4942 goto yy221;
4943 if (yych <= '`')
4944 goto yy94;
4945 if (yych <= 'z')
4946 goto yy221;
4947 goto yy94;
4948 }
4949 yy220:
4950 ++p;
4951 yych = *p;
4952 if (yych <= '=') {
4953 if (yych <= '.') {
4954 if (yych <= '-')
4955 goto yy94;
4956 goto yy95;
4957 } else {
4958 if (yych <= '/')
4959 goto yy94;
4960 if (yych >= ':')
4961 goto yy94;
4962 }
4963 } else {
4964 if (yych <= 'Z') {
4965 if (yych <= '>')
4966 goto yy99;
4967 if (yych <= '@')
4968 goto yy94;
4969 } else {
4970 if (yych <= '`')
4971 goto yy94;
4972 if (yych >= '{')
4973 goto yy94;
4974 }
4975 }
4976 yy221:
4977 ++p;
4978 yych = *p;
4979 if (yych == '.')
4980 goto yy95;
4981 if (yych == '>')
4982 goto yy99;
4983 goto yy94;
4984 }
4985 }
4986
4987 // Try to match an HTML tag after first <, returning num of chars matched.
4988 bufsize_t _scan_html_tag(const unsigned char *p) {
4989 const unsigned char *marker = NULL;
4990 const unsigned char *start = p;
4991
4992 {
4993 unsigned char yych;
4994 static const unsigned char yybm[] = {
4995 /* table 1 .. 8: 0 */
4996 0, 250, 250, 250, 250, 250, 250, 250, 250, 235, 235, 235, 235, 235, 250,
4997 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
4998 250, 250, 250, 235, 250, 202, 250, 250, 250, 250, 170, 250, 250, 250,
4999 250, 250, 246, 254, 250, 254, 254, 254, 254, 254, 254, 254, 254, 254,
5000 254, 254, 250, 234, 234, 232, 250, 250, 254, 254, 254, 254, 254, 254,
5001 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
5002 254, 254, 254, 254, 254, 254, 250, 250, 122, 250, 254, 234, 254, 254,
5003 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
5004 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 250, 250, 250, 250,
5005 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5006 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5007 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5008 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5009 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5010 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5011 /* table 9 .. 11: 256 */
5012 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
5013 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
5014 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
5015 128, 128, 192, 128, 128, 192, 192, 192, 192, 192, 192, 192, 192, 192,
5016 192, 128, 128, 128, 128, 128, 0, 128, 224, 224, 224, 224, 224, 224, 224,
5017 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
5018 224, 224, 224, 224, 224, 128, 128, 128, 128, 128, 128, 192, 192, 192,
5019 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
5020 192, 192, 192, 192, 192, 192, 192, 192, 192, 128, 128, 128, 128, 128, 0,
5021 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5022 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5023 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5024 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5025 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5026 0, 0, 0, 0, 0, 0, 0,
5027 };
5028 yych = *p;
5029 if (yych <= '>') {
5030 if (yych <= '!') {
5031 if (yych >= '!')
5032 goto yy226;
5033 } else {
5034 if (yych == '/')
5035 goto yy227;
5036 }
5037 } else {
5038 if (yych <= 'Z') {
5039 if (yych <= '?')
5040 goto yy228;
5041 if (yych >= 'A')
5042 goto yy229;
5043 } else {
5044 if (yych <= '`')
5045 goto yy224;
5046 if (yych <= 'z')
5047 goto yy229;
5048 }
5049 }
5050 yy224:
5051 ++p;
5052 yy225 : { return 0; }
5053 yy226:
5054 yych = *(marker = ++p);
5055 if (yybm[256 + yych] & 32) {
5056 goto yy232;
5057 }
5058 if (yych == '-')
5059 goto yy230;
5060 if (yych <= '@')
5061 goto yy225;
5062 if (yych <= '[')
5063 goto yy234;
5064 goto yy225;
5065 yy227:
5066 yych = *(marker = ++p);
5067 if (yych <= '@')
5068 goto yy225;
5069 if (yych <= 'Z')
5070 goto yy235;
5071 if (yych <= '`')
5072 goto yy225;
5073 if (yych <= 'z')
5074 goto yy235;
5075 goto yy225;
5076 yy228:
5077 yych = *(marker = ++p);
5078 if (yych <= 0x00)
5079 goto yy225;
5080 if (yych <= 0x7F)
5081 goto yy238;
5082 if (yych <= 0xC1)
5083 goto yy225;
5084 if (yych <= 0xF4)
5085 goto yy238;
5086 goto yy225;
5087 yy229:
5088 yych = *(marker = ++p);
5089 if (yybm[0 + yych] & 1) {
5090 goto yy247;
5091 }
5092 if (yych <= '=') {
5093 if (yych <= '.') {
5094 if (yych == '-')
5095 goto yy249;
5096 goto yy225;
5097 } else {
5098 if (yych <= '/')
5099 goto yy251;
5100 if (yych <= '9')
5101 goto yy249;
5102 goto yy225;
5103 }
5104 } else {
5105 if (yych <= 'Z') {
5106 if (yych <= '>')
5107 goto yy252;
5108 if (yych <= '@')
5109 goto yy225;
5110 goto yy249;
5111 } else {
5112 if (yych <= '`')
5113 goto yy225;
5114 if (yych <= 'z')
5115 goto yy249;
5116 goto yy225;
5117 }
5118 }
5119 yy230:
5120 yych = *++p;
5121 if (yych == '-')
5122 goto yy254;
5123 yy231:
5124 p = marker;
5125 goto yy225;
5126 yy232:
5127 ++p;
5128 yych = *p;
5129 if (yybm[256 + yych] & 32) {
5130 goto yy232;
5131 }
5132 if (yych <= 0x08)
5133 goto yy231;
5134 if (yych <= '\r')
5135 goto yy255;
5136 if (yych == ' ')
5137 goto yy255;
5138 goto yy231;
5139 yy234:
5140 yych = *++p;
5141 if (yych == 'C')
5142 goto yy257;
5143 if (yych == 'c')
5144 goto yy257;
5145 goto yy231;
5146 yy235:
5147 ++p;
5148 yych = *p;
5149 if (yybm[256 + yych] & 64) {
5150 goto yy235;
5151 }
5152 if (yych <= 0x1F) {
5153 if (yych <= 0x08)
5154 goto yy231;
5155 if (yych <= '\r')
5156 goto yy258;
5157 goto yy231;
5158 } else {
5159 if (yych <= ' ')
5160 goto yy258;
5161 if (yych == '>')
5162 goto yy252;
5163 goto yy231;
5164 }
5165 yy237:
5166 ++p;
5167 yych = *p;
5168 yy238:
5169 if (yybm[256 + yych] & 128) {
5170 goto yy237;
5171 }
5172 if (yych <= 0xEC) {
5173 if (yych <= 0xC1) {
5174 if (yych <= 0x00)
5175 goto yy231;
5176 if (yych >= '@')
5177 goto yy231;
5178 } else {
5179 if (yych <= 0xDF)
5180 goto yy240;
5181 if (yych <= 0xE0)
5182 goto yy241;
5183 goto yy242;
5184 }
5185 } else {
5186 if (yych <= 0xF0) {
5187 if (yych <= 0xED)
5188 goto yy243;
5189 if (yych <= 0xEF)
5190 goto yy242;
5191 goto yy244;
5192 } else {
5193 if (yych <= 0xF3)
5194 goto yy245;
5195 if (yych <= 0xF4)
5196 goto yy246;
5197 goto yy231;
5198 }
5199 }
5200 ++p;
5201 yych = *p;
5202 if (yych <= 0xE0) {
5203 if (yych <= '>') {
5204 if (yych <= 0x00)
5205 goto yy231;
5206 if (yych <= '=')
5207 goto yy237;
5208 goto yy252;
5209 } else {
5210 if (yych <= 0x7F)
5211 goto yy237;
5212 if (yych <= 0xC1)
5213 goto yy231;
5214 if (yych >= 0xE0)
5215 goto yy241;
5216 }
5217 } else {
5218 if (yych <= 0xEF) {
5219 if (yych == 0xED)
5220 goto yy243;
5221 goto yy242;
5222 } else {
5223 if (yych <= 0xF0)
5224 goto yy244;
5225 if (yych <= 0xF3)
5226 goto yy245;
5227 if (yych <= 0xF4)
5228 goto yy246;
5229 goto yy231;
5230 }
5231 }
5232 yy240:
5233 ++p;
5234 yych = *p;
5235 if (yych <= 0x7F)
5236 goto yy231;
5237 if (yych <= 0xBF)
5238 goto yy237;
5239 goto yy231;
5240 yy241:
5241 ++p;
5242 yych = *p;
5243 if (yych <= 0x9F)
5244 goto yy231;
5245 if (yych <= 0xBF)
5246 goto yy240;
5247 goto yy231;
5248 yy242:
5249 ++p;
5250 yych = *p;
5251 if (yych <= 0x7F)
5252 goto yy231;
5253 if (yych <= 0xBF)
5254 goto yy240;
5255 goto yy231;
5256 yy243:
5257 ++p;
5258 yych = *p;
5259 if (yych <= 0x7F)
5260 goto yy231;
5261 if (yych <= 0x9F)
5262 goto yy240;
5263 goto yy231;
5264 yy244:
5265 ++p;
5266 yych = *p;
5267 if (yych <= 0x8F)
5268 goto yy231;
5269 if (yych <= 0xBF)
5270 goto yy242;
5271 goto yy231;
5272 yy245:
5273 ++p;
5274 yych = *p;
5275 if (yych <= 0x7F)
5276 goto yy231;
5277 if (yych <= 0xBF)
5278 goto yy242;
5279 goto yy231;
5280 yy246:
5281 ++p;
5282 yych = *p;
5283 if (yych <= 0x7F)
5284 goto yy231;
5285 if (yych <= 0x8F)
5286 goto yy242;
5287 goto yy231;
5288 yy247:
5289 ++p;
5290 yych = *p;
5291 if (yybm[0 + yych] & 1) {
5292 goto yy247;
5293 }
5294 if (yych <= '>') {
5295 if (yych <= '9') {
5296 if (yych == '/')
5297 goto yy251;
5298 goto yy231;
5299 } else {
5300 if (yych <= ':')
5301 goto yy260;
5302 if (yych <= '=')
5303 goto yy231;
5304 goto yy252;
5305 }
5306 } else {
5307 if (yych <= '^') {
5308 if (yych <= '@')
5309 goto yy231;
5310 if (yych <= 'Z')
5311 goto yy260;
5312 goto yy231;
5313 } else {
5314 if (yych == '`')
5315 goto yy231;
5316 if (yych <= 'z')
5317 goto yy260;
5318 goto yy231;
5319 }
5320 }
5321 yy249:
5322 ++p;
5323 yych = *p;
5324 if (yybm[0 + yych] & 1) {
5325 goto yy247;
5326 }
5327 if (yych <= '=') {
5328 if (yych <= '.') {
5329 if (yych == '-')
5330 goto yy249;
5331 goto yy231;
5332 } else {
5333 if (yych <= '/')
5334 goto yy251;
5335 if (yych <= '9')
5336 goto yy249;
5337 goto yy231;
5338 }
5339 } else {
5340 if (yych <= 'Z') {
5341 if (yych <= '>')
5342 goto yy252;
5343 if (yych <= '@')
5344 goto yy231;
5345 goto yy249;
5346 } else {
5347 if (yych <= '`')
5348 goto yy231;
5349 if (yych <= 'z')
5350 goto yy249;
5351 goto yy231;
5352 }
5353 }
5354 yy251:
5355 yych = *++p;
5356 if (yych != '>')
5357 goto yy231;
5358 yy252:
5359 ++p;
5360 { return (bufsize_t)(p - start); }
5361 yy254:
5362 yych = *++p;
5363 if (yych == '-')
5364 goto yy264;
5365 if (yych == '>')
5366 goto yy231;
5367 goto yy263;
5368 yy255:
5369 ++p;
5370 yych = *p;
5371 if (yybm[0 + yych] & 2) {
5372 goto yy255;
5373 }
5374 if (yych <= 0xEC) {
5375 if (yych <= 0xC1) {
5376 if (yych <= 0x00)
5377 goto yy231;
5378 if (yych <= '>')
5379 goto yy252;
5380 goto yy231;
5381 } else {
5382 if (yych <= 0xDF)
5383 goto yy272;
5384 if (yych <= 0xE0)
5385 goto yy273;
5386 goto yy274;
5387 }
5388 } else {
5389 if (yych <= 0xF0) {
5390 if (yych <= 0xED)
5391 goto yy275;
5392 if (yych <= 0xEF)
5393 goto yy274;
5394 goto yy276;
5395 } else {
5396 if (yych <= 0xF3)
5397 goto yy277;
5398 if (yych <= 0xF4)
5399 goto yy278;
5400 goto yy231;
5401 }
5402 }
5403 yy257:
5404 yych = *++p;
5405 if (yych == 'D')
5406 goto yy279;
5407 if (yych == 'd')
5408 goto yy279;
5409 goto yy231;
5410 yy258:
5411 ++p;
5412 yych = *p;
5413 if (yych <= 0x1F) {
5414 if (yych <= 0x08)
5415 goto yy231;
5416 if (yych <= '\r')
5417 goto yy258;
5418 goto yy231;
5419 } else {
5420 if (yych <= ' ')
5421 goto yy258;
5422 if (yych == '>')
5423 goto yy252;
5424 goto yy231;
5425 }
5426 yy260:
5427 ++p;
5428 yych = *p;
5429 if (yybm[0 + yych] & 4) {
5430 goto yy260;
5431 }
5432 if (yych <= ',') {
5433 if (yych <= '\r') {
5434 if (yych <= 0x08)
5435 goto yy231;
5436 goto yy280;
5437 } else {
5438 if (yych == ' ')
5439 goto yy280;
5440 goto yy231;
5441 }
5442 } else {
5443 if (yych <= '<') {
5444 if (yych <= '/')
5445 goto yy251;
5446 goto yy231;
5447 } else {
5448 if (yych <= '=')
5449 goto yy282;
5450 if (yych <= '>')
5451 goto yy252;
5452 goto yy231;
5453 }
5454 }
5455 yy262:
5456 ++p;
5457 yych = *p;
5458 yy263:
5459 if (yybm[0 + yych] & 8) {
5460 goto yy262;
5461 }
5462 if (yych <= 0xEC) {
5463 if (yych <= 0xC1) {
5464 if (yych <= 0x00)
5465 goto yy231;
5466 if (yych <= '-')
5467 goto yy283;
5468 goto yy231;
5469 } else {
5470 if (yych <= 0xDF)
5471 goto yy265;
5472 if (yych <= 0xE0)
5473 goto yy266;
5474 goto yy267;
5475 }
5476 } else {
5477 if (yych <= 0xF0) {
5478 if (yych <= 0xED)
5479 goto yy268;
5480 if (yych <= 0xEF)
5481 goto yy267;
5482 goto yy269;
5483 } else {
5484 if (yych <= 0xF3)
5485 goto yy270;
5486 if (yych <= 0xF4)
5487 goto yy271;
5488 goto yy231;
5489 }
5490 }
5491 yy264:
5492 yych = *++p;
5493 if (yych == '-')
5494 goto yy251;
5495 if (yych == '>')
5496 goto yy231;
5497 goto yy263;
5498 yy265:
5499 ++p;
5500 yych = *p;
5501 if (yych <= 0x7F)
5502 goto yy231;
5503 if (yych <= 0xBF)
5504 goto yy262;
5505 goto yy231;
5506 yy266:
5507 ++p;
5508 yych = *p;
5509 if (yych <= 0x9F)
5510 goto yy231;
5511 if (yych <= 0xBF)
5512 goto yy265;
5513 goto yy231;
5514 yy267:
5515 ++p;
5516 yych = *p;
5517 if (yych <= 0x7F)
5518 goto yy231;
5519 if (yych <= 0xBF)
5520 goto yy265;
5521 goto yy231;
5522 yy268:
5523 ++p;
5524 yych = *p;
5525 if (yych <= 0x7F)
5526 goto yy231;
5527 if (yych <= 0x9F)
5528 goto yy265;
5529 goto yy231;
5530 yy269:
5531 ++p;
5532 yych = *p;
5533 if (yych <= 0x8F)
5534 goto yy231;
5535 if (yych <= 0xBF)
5536 goto yy267;
5537 goto yy231;
5538 yy270:
5539 ++p;
5540 yych = *p;
5541 if (yych <= 0x7F)
5542 goto yy231;
5543 if (yych <= 0xBF)
5544 goto yy267;
5545 goto yy231;
5546 yy271:
5547 ++p;
5548 yych = *p;
5549 if (yych <= 0x7F)
5550 goto yy231;
5551 if (yych <= 0x8F)
5552 goto yy267;
5553 goto yy231;
5554 yy272:
5555 ++p;
5556 yych = *p;
5557 if (yych <= 0x7F)
5558 goto yy231;
5559 if (yych <= 0xBF)
5560 goto yy255;
5561 goto yy231;
5562 yy273:
5563 ++p;
5564 yych = *p;
5565 if (yych <= 0x9F)
5566 goto yy231;
5567 if (yych <= 0xBF)
5568 goto yy272;
5569 goto yy231;
5570 yy274:
5571 ++p;
5572 yych = *p;
5573 if (yych <= 0x7F)
5574 goto yy231;
5575 if (yych <= 0xBF)
5576 goto yy272;
5577 goto yy231;
5578 yy275:
5579 ++p;
5580 yych = *p;
5581 if (yych <= 0x7F)
5582 goto yy231;
5583 if (yych <= 0x9F)
5584 goto yy272;
5585 goto yy231;
5586 yy276:
5587 ++p;
5588 yych = *p;
5589 if (yych <= 0x8F)
5590 goto yy231;
5591 if (yych <= 0xBF)
5592 goto yy274;
5593 goto yy231;
5594 yy277:
5595 ++p;
5596 yych = *p;
5597 if (yych <= 0x7F)
5598 goto yy231;
5599 if (yych <= 0xBF)
5600 goto yy274;
5601 goto yy231;
5602 yy278:
5603 ++p;
5604 yych = *p;
5605 if (yych <= 0x7F)
5606 goto yy231;
5607 if (yych <= 0x8F)
5608 goto yy274;
5609 goto yy231;
5610 yy279:
5611 yych = *++p;
5612 if (yych == 'A')
5613 goto yy284;
5614 if (yych == 'a')
5615 goto yy284;
5616 goto yy231;
5617 yy280:
5618 ++p;
5619 yych = *p;
5620 if (yych <= '<') {
5621 if (yych <= ' ') {
5622 if (yych <= 0x08)
5623 goto yy231;
5624 if (yych <= '\r')
5625 goto yy280;
5626 if (yych <= 0x1F)
5627 goto yy231;
5628 goto yy280;
5629 } else {
5630 if (yych <= '/') {
5631 if (yych <= '.')
5632 goto yy231;
5633 goto yy251;
5634 } else {
5635 if (yych == ':')
5636 goto yy260;
5637 goto yy231;
5638 }
5639 }
5640 } else {
5641 if (yych <= 'Z') {
5642 if (yych <= '=')
5643 goto yy282;
5644 if (yych <= '>')
5645 goto yy252;
5646 if (yych <= '@')
5647 goto yy231;
5648 goto yy260;
5649 } else {
5650 if (yych <= '_') {
5651 if (yych <= '^')
5652 goto yy231;
5653 goto yy260;
5654 } else {
5655 if (yych <= '`')
5656 goto yy231;
5657 if (yych <= 'z')
5658 goto yy260;
5659 goto yy231;
5660 }
5661 }
5662 }
5663 yy282:
5664 ++p;
5665 yych = *p;
5666 if (yybm[0 + yych] & 16) {
5667 goto yy285;
5668 }
5669 if (yych <= 0xE0) {
5670 if (yych <= '"') {
5671 if (yych <= 0x00)
5672 goto yy231;
5673 if (yych <= ' ')
5674 goto yy287;
5675 goto yy288;
5676 } else {
5677 if (yych <= '\'')
5678 goto yy290;
5679 if (yych <= 0xC1)
5680 goto yy231;
5681 if (yych <= 0xDF)
5682 goto yy292;
5683 goto yy293;
5684 }
5685 } else {
5686 if (yych <= 0xEF) {
5687 if (yych == 0xED)
5688 goto yy295;
5689 goto yy294;
5690 } else {
5691 if (yych <= 0xF0)
5692 goto yy296;
5693 if (yych <= 0xF3)
5694 goto yy297;
5695 if (yych <= 0xF4)
5696 goto yy298;
5697 goto yy231;
5698 }
5699 }
5700 yy283:
5701 ++p;
5702 yych = *p;
5703 if (yybm[0 + yych] & 8) {
5704 goto yy262;
5705 }
5706 if (yych <= 0xEC) {
5707 if (yych <= 0xC1) {
5708 if (yych <= 0x00)
5709 goto yy231;
5710 if (yych <= '-')
5711 goto yy251;
5712 goto yy231;
5713 } else {
5714 if (yych <= 0xDF)
5715 goto yy265;
5716 if (yych <= 0xE0)
5717 goto yy266;
5718 goto yy267;
5719 }
5720 } else {
5721 if (yych <= 0xF0) {
5722 if (yych <= 0xED)
5723 goto yy268;
5724 if (yych <= 0xEF)
5725 goto yy267;
5726 goto yy269;
5727 } else {
5728 if (yych <= 0xF3)
5729 goto yy270;
5730 if (yych <= 0xF4)
5731 goto yy271;
5732 goto yy231;
5733 }
5734 }
5735 yy284:
5736 yych = *++p;
5737 if (yych == 'T')
5738 goto yy299;
5739 if (yych == 't')
5740 goto yy299;
5741 goto yy231;
5742 yy285:
5743 ++p;
5744 yych = *p;
5745 if (yybm[0 + yych] & 16) {
5746 goto yy285;
5747 }
5748 if (yych <= 0xE0) {
5749 if (yych <= '=') {
5750 if (yych <= 0x00)
5751 goto yy231;
5752 if (yych <= ' ')
5753 goto yy300;
5754 goto yy231;
5755 } else {
5756 if (yych <= '>')
5757 goto yy252;
5758 if (yych <= 0xC1)
5759 goto yy231;
5760 if (yych <= 0xDF)
5761 goto yy292;
5762 goto yy293;
5763 }
5764 } else {
5765 if (yych <= 0xEF) {
5766 if (yych == 0xED)
5767 goto yy295;
5768 goto yy294;
5769 } else {
5770 if (yych <= 0xF0)
5771 goto yy296;
5772 if (yych <= 0xF3)
5773 goto yy297;
5774 if (yych <= 0xF4)
5775 goto yy298;
5776 goto yy231;
5777 }
5778 }
5779 yy287:
5780 ++p;
5781 yych = *p;
5782 if (yybm[0 + yych] & 16) {
5783 goto yy285;
5784 }
5785 if (yych <= 0xDF) {
5786 if (yych <= '\'') {
5787 if (yych <= 0x00)
5788 goto yy231;
5789 if (yych <= ' ')
5790 goto yy302;
5791 if (yych >= '#')
5792 goto yy290;
5793 } else {
5794 if (yych == '>')
5795 goto yy252;
5796 if (yych <= 0xC1)
5797 goto yy231;
5798 goto yy292;
5799 }
5800 } else {
5801 if (yych <= 0xEF) {
5802 if (yych <= 0xE0)
5803 goto yy293;
5804 if (yych == 0xED)
5805 goto yy295;
5806 goto yy294;
5807 } else {
5808 if (yych <= 0xF0)
5809 goto yy296;
5810 if (yych <= 0xF3)
5811 goto yy297;
5812 if (yych <= 0xF4)
5813 goto yy298;
5814 goto yy231;
5815 }
5816 }
5817 yy288:
5818 ++p;
5819 yych = *p;
5820 if (yybm[0 + yych] & 32) {
5821 goto yy288;
5822 }
5823 if (yych <= 0xEC) {
5824 if (yych <= 0xC1) {
5825 if (yych <= 0x00)
5826 goto yy231;
5827 if (yych <= '"')
5828 goto yy304;
5829 goto yy231;
5830 } else {
5831 if (yych <= 0xDF)
5832 goto yy305;
5833 if (yych <= 0xE0)
5834 goto yy306;
5835 goto yy307;
5836 }
5837 } else {
5838 if (yych <= 0xF0) {
5839 if (yych <= 0xED)
5840 goto yy308;
5841 if (yych <= 0xEF)
5842 goto yy307;
5843 goto yy309;
5844 } else {
5845 if (yych <= 0xF3)
5846 goto yy310;
5847 if (yych <= 0xF4)
5848 goto yy311;
5849 goto yy231;
5850 }
5851 }
5852 yy290:
5853 ++p;
5854 yych = *p;
5855 if (yybm[0 + yych] & 64) {
5856 goto yy290;
5857 }
5858 if (yych <= 0xEC) {
5859 if (yych <= 0xC1) {
5860 if (yych <= 0x00)
5861 goto yy231;
5862 if (yych <= '\'')
5863 goto yy304;
5864 goto yy231;
5865 } else {
5866 if (yych <= 0xDF)
5867 goto yy312;
5868 if (yych <= 0xE0)
5869 goto yy313;
5870 goto yy314;
5871 }
5872 } else {
5873 if (yych <= 0xF0) {
5874 if (yych <= 0xED)
5875 goto yy315;
5876 if (yych <= 0xEF)
5877 goto yy314;
5878 goto yy316;
5879 } else {
5880 if (yych <= 0xF3)
5881 goto yy317;
5882 if (yych <= 0xF4)
5883 goto yy318;
5884 goto yy231;
5885 }
5886 }
5887 yy292:
5888 ++p;
5889 yych = *p;
5890 if (yych <= 0x7F)
5891 goto yy231;
5892 if (yych <= 0xBF)
5893 goto yy285;
5894 goto yy231;
5895 yy293:
5896 ++p;
5897 yych = *p;
5898 if (yych <= 0x9F)
5899 goto yy231;
5900 if (yych <= 0xBF)
5901 goto yy292;
5902 goto yy231;
5903 yy294:
5904 ++p;
5905 yych = *p;
5906 if (yych <= 0x7F)
5907 goto yy231;
5908 if (yych <= 0xBF)
5909 goto yy292;
5910 goto yy231;
5911 yy295:
5912 ++p;
5913 yych = *p;
5914 if (yych <= 0x7F)
5915 goto yy231;
5916 if (yych <= 0x9F)
5917 goto yy292;
5918 goto yy231;
5919 yy296:
5920 ++p;
5921 yych = *p;
5922 if (yych <= 0x8F)
5923 goto yy231;
5924 if (yych <= 0xBF)
5925 goto yy294;
5926 goto yy231;
5927 yy297:
5928 ++p;
5929 yych = *p;
5930 if (yych <= 0x7F)
5931 goto yy231;
5932 if (yych <= 0xBF)
5933 goto yy294;
5934 goto yy231;
5935 yy298:
5936 ++p;
5937 yych = *p;
5938 if (yych <= 0x7F)
5939 goto yy231;
5940 if (yych <= 0x8F)
5941 goto yy294;
5942 goto yy231;
5943 yy299:
5944 yych = *++p;
5945 if (yych == 'A')
5946 goto yy319;
5947 if (yych == 'a')
5948 goto yy319;
5949 goto yy231;
5950 yy300:
5951 ++p;
5952 yych = *p;
5953 if (yych <= '@') {
5954 if (yych <= '"') {
5955 if (yych <= '\r') {
5956 if (yych <= 0x00)
5957 goto yy231;
5958 if (yych <= 0x08)
5959 goto yy285;
5960 goto yy300;
5961 } else {
5962 if (yych == ' ')
5963 goto yy300;
5964 if (yych <= '!')
5965 goto yy285;
5966 goto yy231;
5967 }
5968 } else {
5969 if (yych <= ':') {
5970 if (yych == '\'')
5971 goto yy231;
5972 if (yych <= '9')
5973 goto yy285;
5974 goto yy320;
5975 } else {
5976 if (yych <= ';')
5977 goto yy285;
5978 if (yych <= '=')
5979 goto yy231;
5980 if (yych <= '>')
5981 goto yy252;
5982 goto yy285;
5983 }
5984 }
5985 } else {
5986 if (yych <= 0xDF) {
5987 if (yych <= '`') {
5988 if (yych <= 'Z')
5989 goto yy320;
5990 if (yych <= '^')
5991 goto yy285;
5992 if (yych <= '_')
5993 goto yy320;
5994 goto yy231;
5995 } else {
5996 if (yych <= 'z')
5997 goto yy320;
5998 if (yych <= 0x7F)
5999 goto yy285;
6000 if (yych <= 0xC1)
6001 goto yy231;
6002 goto yy292;
6003 }
6004 } else {
6005 if (yych <= 0xEF) {
6006 if (yych <= 0xE0)
6007 goto yy293;
6008 if (yych == 0xED)
6009 goto yy295;
6010 goto yy294;
6011 } else {
6012 if (yych <= 0xF0)
6013 goto yy296;
6014 if (yych <= 0xF3)
6015 goto yy297;
6016 if (yych <= 0xF4)
6017 goto yy298;
6018 goto yy231;
6019 }
6020 }
6021 }
6022 yy302:
6023 ++p;
6024 yych = *p;
6025 if (yych <= '@') {
6026 if (yych <= '"') {
6027 if (yych <= '\r') {
6028 if (yych <= 0x00)
6029 goto yy231;
6030 if (yych <= 0x08)
6031 goto yy285;
6032 goto yy302;
6033 } else {
6034 if (yych == ' ')
6035 goto yy302;
6036 if (yych <= '!')
6037 goto yy285;
6038 goto yy288;
6039 }
6040 } else {
6041 if (yych <= ':') {
6042 if (yych == '\'')
6043 goto yy290;
6044 if (yych <= '9')
6045 goto yy285;
6046 goto yy320;
6047 } else {
6048 if (yych <= ';')
6049 goto yy285;
6050 if (yych <= '=')
6051 goto yy231;
6052 if (yych <= '>')
6053 goto yy252;
6054 goto yy285;
6055 }
6056 }
6057 } else {
6058 if (yych <= 0xDF) {
6059 if (yych <= '`') {
6060 if (yych <= 'Z')
6061 goto yy320;
6062 if (yych <= '^')
6063 goto yy285;
6064 if (yych <= '_')
6065 goto yy320;
6066 goto yy231;
6067 } else {
6068 if (yych <= 'z')
6069 goto yy320;
6070 if (yych <= 0x7F)
6071 goto yy285;
6072 if (yych <= 0xC1)
6073 goto yy231;
6074 goto yy292;
6075 }
6076 } else {
6077 if (yych <= 0xEF) {
6078 if (yych <= 0xE0)
6079 goto yy293;
6080 if (yych == 0xED)
6081 goto yy295;
6082 goto yy294;
6083 } else {
6084 if (yych <= 0xF0)
6085 goto yy296;
6086 if (yych <= 0xF3)
6087 goto yy297;
6088 if (yych <= 0xF4)
6089 goto yy298;
6090 goto yy231;
6091 }
6092 }
6093 }
6094 yy304:
6095 ++p;
6096 yych = *p;
6097 if (yybm[0 + yych] & 1) {
6098 goto yy247;
6099 }
6100 if (yych == '/')
6101 goto yy251;
6102 if (yych == '>')
6103 goto yy252;
6104 goto yy231;
6105 yy305:
6106 ++p;
6107 yych = *p;
6108 if (yych <= 0x7F)
6109 goto yy231;
6110 if (yych <= 0xBF)
6111 goto yy288;
6112 goto yy231;
6113 yy306:
6114 ++p;
6115 yych = *p;
6116 if (yych <= 0x9F)
6117 goto yy231;
6118 if (yych <= 0xBF)
6119 goto yy305;
6120 goto yy231;
6121 yy307:
6122 ++p;
6123 yych = *p;
6124 if (yych <= 0x7F)
6125 goto yy231;
6126 if (yych <= 0xBF)
6127 goto yy305;
6128 goto yy231;
6129 yy308:
6130 ++p;
6131 yych = *p;
6132 if (yych <= 0x7F)
6133 goto yy231;
6134 if (yych <= 0x9F)
6135 goto yy305;
6136 goto yy231;
6137 yy309:
6138 ++p;
6139 yych = *p;
6140 if (yych <= 0x8F)
6141 goto yy231;
6142 if (yych <= 0xBF)
6143 goto yy307;
6144 goto yy231;
6145 yy310:
6146 ++p;
6147 yych = *p;
6148 if (yych <= 0x7F)
6149 goto yy231;
6150 if (yych <= 0xBF)
6151 goto yy307;
6152 goto yy231;
6153 yy311:
6154 ++p;
6155 yych = *p;
6156 if (yych <= 0x7F)
6157 goto yy231;
6158 if (yych <= 0x8F)
6159 goto yy307;
6160 goto yy231;
6161 yy312:
6162 ++p;
6163 yych = *p;
6164 if (yych <= 0x7F)
6165 goto yy231;
6166 if (yych <= 0xBF)
6167 goto yy290;
6168 goto yy231;
6169 yy313:
6170 ++p;
6171 yych = *p;
6172 if (yych <= 0x9F)
6173 goto yy231;
6174 if (yych <= 0xBF)
6175 goto yy312;
6176 goto yy231;
6177 yy314:
6178 ++p;
6179 yych = *p;
6180 if (yych <= 0x7F)
6181 goto yy231;
6182 if (yych <= 0xBF)
6183 goto yy312;
6184 goto yy231;
6185 yy315:
6186 ++p;
6187 yych = *p;
6188 if (yych <= 0x7F)
6189 goto yy231;
6190 if (yych <= 0x9F)
6191 goto yy312;
6192 goto yy231;
6193 yy316:
6194 ++p;
6195 yych = *p;
6196 if (yych <= 0x8F)
6197 goto yy231;
6198 if (yych <= 0xBF)
6199 goto yy314;
6200 goto yy231;
6201 yy317:
6202 ++p;
6203 yych = *p;
6204 if (yych <= 0x7F)
6205 goto yy231;
6206 if (yych <= 0xBF)
6207 goto yy314;
6208 goto yy231;
6209 yy318:
6210 ++p;
6211 yych = *p;
6212 if (yych <= 0x7F)
6213 goto yy231;
6214 if (yych <= 0x8F)
6215 goto yy314;
6216 goto yy231;
6217 yy319:
6218 yych = *++p;
6219 if (yych == '[')
6220 goto yy322;
6221 goto yy231;
6222 yy320:
6223 ++p;
6224 yych = *p;
6225 if (yych <= '>') {
6226 if (yych <= '&') {
6227 if (yych <= 0x1F) {
6228 if (yych <= 0x00)
6229 goto yy231;
6230 if (yych <= 0x08)
6231 goto yy285;
6232 if (yych <= '\r')
6233 goto yy324;
6234 goto yy285;
6235 } else {
6236 if (yych <= ' ')
6237 goto yy324;
6238 if (yych == '"')
6239 goto yy231;
6240 goto yy285;
6241 }
6242 } else {
6243 if (yych <= '/') {
6244 if (yych <= '\'')
6245 goto yy231;
6246 if (yych <= ',')
6247 goto yy285;
6248 if (yych <= '.')
6249 goto yy320;
6250 goto yy285;
6251 } else {
6252 if (yych <= ';') {
6253 if (yych <= ':')
6254 goto yy320;
6255 goto yy285;
6256 } else {
6257 if (yych <= '<')
6258 goto yy231;
6259 if (yych <= '=')
6260 goto yy282;
6261 goto yy252;
6262 }
6263 }
6264 }
6265 } else {
6266 if (yych <= 0xC1) {
6267 if (yych <= '_') {
6268 if (yych <= '@')
6269 goto yy285;
6270 if (yych <= 'Z')
6271 goto yy320;
6272 if (yych <= '^')
6273 goto yy285;
6274 goto yy320;
6275 } else {
6276 if (yych <= '`')
6277 goto yy231;
6278 if (yych <= 'z')
6279 goto yy320;
6280 if (yych <= 0x7F)
6281 goto yy285;
6282 goto yy231;
6283 }
6284 } else {
6285 if (yych <= 0xED) {
6286 if (yych <= 0xDF)
6287 goto yy292;
6288 if (yych <= 0xE0)
6289 goto yy293;
6290 if (yych <= 0xEC)
6291 goto yy294;
6292 goto yy295;
6293 } else {
6294 if (yych <= 0xF0) {
6295 if (yych <= 0xEF)
6296 goto yy294;
6297 goto yy296;
6298 } else {
6299 if (yych <= 0xF3)
6300 goto yy297;
6301 if (yych <= 0xF4)
6302 goto yy298;
6303 goto yy231;
6304 }
6305 }
6306 }
6307 }
6308 yy322:
6309 ++p;
6310 yych = *p;
6311 if (yybm[0 + yych] & 128) {
6312 goto yy322;
6313 }
6314 if (yych <= 0xEC) {
6315 if (yych <= 0xC1) {
6316 if (yych <= 0x00)
6317 goto yy231;
6318 if (yych <= ']')
6319 goto yy326;
6320 goto yy231;
6321 } else {
6322 if (yych <= 0xDF)
6323 goto yy327;
6324 if (yych <= 0xE0)
6325 goto yy328;
6326 goto yy329;
6327 }
6328 } else {
6329 if (yych <= 0xF0) {
6330 if (yych <= 0xED)
6331 goto yy330;
6332 if (yych <= 0xEF)
6333 goto yy329;
6334 goto yy331;
6335 } else {
6336 if (yych <= 0xF3)
6337 goto yy332;
6338 if (yych <= 0xF4)
6339 goto yy333;
6340 goto yy231;
6341 }
6342 }
6343 yy324:
6344 ++p;
6345 yych = *p;
6346 if (yych <= '@') {
6347 if (yych <= '&') {
6348 if (yych <= 0x1F) {
6349 if (yych <= 0x00)
6350 goto yy231;
6351 if (yych <= 0x08)
6352 goto yy285;
6353 if (yych <= '\r')
6354 goto yy324;
6355 goto yy285;
6356 } else {
6357 if (yych <= ' ')
6358 goto yy324;
6359 if (yych == '"')
6360 goto yy231;
6361 goto yy285;
6362 }
6363 } else {
6364 if (yych <= ';') {
6365 if (yych <= '\'')
6366 goto yy231;
6367 if (yych == ':')
6368 goto yy320;
6369 goto yy285;
6370 } else {
6371 if (yych <= '<')
6372 goto yy231;
6373 if (yych <= '=')
6374 goto yy282;
6375 if (yych <= '>')
6376 goto yy252;
6377 goto yy285;
6378 }
6379 }
6380 } else {
6381 if (yych <= 0xDF) {
6382 if (yych <= '`') {
6383 if (yych <= 'Z')
6384 goto yy320;
6385 if (yych <= '^')
6386 goto yy285;
6387 if (yych <= '_')
6388 goto yy320;
6389 goto yy231;
6390 } else {
6391 if (yych <= 'z')
6392 goto yy320;
6393 if (yych <= 0x7F)
6394 goto yy285;
6395 if (yych <= 0xC1)
6396 goto yy231;
6397 goto yy292;
6398 }
6399 } else {
6400 if (yych <= 0xEF) {
6401 if (yych <= 0xE0)
6402 goto yy293;
6403 if (yych == 0xED)
6404 goto yy295;
6405 goto yy294;
6406 } else {
6407 if (yych <= 0xF0)
6408 goto yy296;
6409 if (yych <= 0xF3)
6410 goto yy297;
6411 if (yych <= 0xF4)
6412 goto yy298;
6413 goto yy231;
6414 }
6415 }
6416 }
6417 yy326:
6418 ++p;
6419 yych = *p;
6420 if (yybm[0 + yych] & 128) {
6421 goto yy322;
6422 }
6423 if (yych <= 0xEC) {
6424 if (yych <= 0xC1) {
6425 if (yych <= 0x00)
6426 goto yy231;
6427 if (yych <= ']')
6428 goto yy334;
6429 goto yy231;
6430 } else {
6431 if (yych <= 0xDF)
6432 goto yy327;
6433 if (yych <= 0xE0)
6434 goto yy328;
6435 goto yy329;
6436 }
6437 } else {
6438 if (yych <= 0xF0) {
6439 if (yych <= 0xED)
6440 goto yy330;
6441 if (yych <= 0xEF)
6442 goto yy329;
6443 goto yy331;
6444 } else {
6445 if (yych <= 0xF3)
6446 goto yy332;
6447 if (yych <= 0xF4)
6448 goto yy333;
6449 goto yy231;
6450 }
6451 }
6452 yy327:
6453 ++p;
6454 yych = *p;
6455 if (yych <= 0x7F)
6456 goto yy231;
6457 if (yych <= 0xBF)
6458 goto yy322;
6459 goto yy231;
6460 yy328:
6461 ++p;
6462 yych = *p;
6463 if (yych <= 0x9F)
6464 goto yy231;
6465 if (yych <= 0xBF)
6466 goto yy327;
6467 goto yy231;
6468 yy329:
6469 ++p;
6470 yych = *p;
6471 if (yych <= 0x7F)
6472 goto yy231;
6473 if (yych <= 0xBF)
6474 goto yy327;
6475 goto yy231;
6476 yy330:
6477 ++p;
6478 yych = *p;
6479 if (yych <= 0x7F)
6480 goto yy231;
6481 if (yych <= 0x9F)
6482 goto yy327;
6483 goto yy231;
6484 yy331:
6485 ++p;
6486 yych = *p;
6487 if (yych <= 0x8F)
6488 goto yy231;
6489 if (yych <= 0xBF)
6490 goto yy329;
6491 goto yy231;
6492 yy332:
6493 ++p;
6494 yych = *p;
6495 if (yych <= 0x7F)
6496 goto yy231;
6497 if (yych <= 0xBF)
6498 goto yy329;
6499 goto yy231;
6500 yy333:
6501 ++p;
6502 yych = *p;
6503 if (yych <= 0x7F)
6504 goto yy231;
6505 if (yych <= 0x8F)
6506 goto yy329;
6507 goto yy231;
6508 yy334:
6509 ++p;
6510 yych = *p;
6511 if (yych <= 0xE0) {
6512 if (yych <= '>') {
6513 if (yych <= 0x00)
6514 goto yy231;
6515 if (yych <= '=')
6516 goto yy322;
6517 goto yy252;
6518 } else {
6519 if (yych <= 0x7F)
6520 goto yy322;
6521 if (yych <= 0xC1)
6522 goto yy231;
6523 if (yych <= 0xDF)
6524 goto yy327;
6525 goto yy328;
6526 }
6527 } else {
6528 if (yych <= 0xEF) {
6529 if (yych == 0xED)
6530 goto yy330;
6531 goto yy329;
6532 } else {
6533 if (yych <= 0xF0)
6534 goto yy331;
6535 if (yych <= 0xF3)
6536 goto yy332;
6537 if (yych <= 0xF4)
6538 goto yy333;
6539 goto yy231;
6540 }
6541 }
6542 }
6543 }
6544
6545 // Try to match an HTML block tag start line, returning
6546 // an integer code for the type of block (1-6, matching the spec).
6547 // #7 is handled by a separate function, below.
6548 bufsize_t _scan_html_block_start(const unsigned char *p) {
6549 const unsigned char *marker = NULL;
6550
6551 {
6552 unsigned char yych;
6553 yych = *p;
6554 if (yych == '<')
6555 goto yy339;
6556 ++p;
6557 yy338 : { return 0; }
6558 yy339:
6559 yych = *(marker = ++p);
6560 switch (yych) {
6561 case '!':
6562 goto yy340;
6563 case '/':
6564 goto yy342;
6565 case '?':
6566 goto yy343;
6567 case 'A':
6568 case 'a':
6569 goto yy345;
6570 case 'B':
6571 case 'b':
6572 goto yy346;
6573 case 'C':
6574 case 'c':
6575 goto yy347;
6576 case 'D':
6577 case 'd':
6578 goto yy348;
6579 case 'F':
6580 case 'f':
6581 goto yy349;
6582 case 'H':
6583 case 'h':
6584 goto yy350;
6585 case 'I':
6586 case 'i':
6587 goto yy351;
6588 case 'L':
6589 case 'l':
6590 goto yy352;
6591 case 'M':
6592 case 'm':
6593 goto yy353;
6594 case 'N':
6595 case 'n':
6596 goto yy354;
6597 case 'O':
6598 case 'o':
6599 goto yy355;
6600 case 'P':
6601 case 'p':
6602 goto yy356;
6603 case 'S':
6604 case 's':
6605 goto yy357;
6606 case 'T':
6607 case 't':
6608 goto yy358;
6609 case 'U':
6610 case 'u':
6611 goto yy359;
6612 default:
6613 goto yy338;
6614 }
6615 yy340:
6616 yych = *++p;
6617 if (yych <= '@') {
6618 if (yych == '-')
6619 goto yy360;
6620 } else {
6621 if (yych <= 'Z')
6622 goto yy361;
6623 if (yych <= '[')
6624 goto yy363;
6625 }
6626 yy341:
6627 p = marker;
6628 goto yy338;
6629 yy342:
6630 yych = *++p;
6631 switch (yych) {
6632 case 'A':
6633 case 'a':
6634 goto yy345;
6635 case 'B':
6636 case 'b':
6637 goto yy346;
6638 case 'C':
6639 case 'c':
6640 goto yy347;
6641 case 'D':
6642 case 'd':
6643 goto yy348;
6644 case 'F':
6645 case 'f':
6646 goto yy349;
6647 case 'H':
6648 case 'h':
6649 goto yy350;
6650 case 'I':
6651 case 'i':
6652 goto yy351;
6653 case 'L':
6654 case 'l':
6655 goto yy352;
6656 case 'M':
6657 case 'm':
6658 goto yy353;
6659 case 'N':
6660 case 'n':
6661 goto yy354;
6662 case 'O':
6663 case 'o':
6664 goto yy355;
6665 case 'P':
6666 case 'p':
6667 goto yy364;
6668 case 'S':
6669 case 's':
6670 goto yy365;
6671 case 'T':
6672 case 't':
6673 goto yy358;
6674 case 'U':
6675 case 'u':
6676 goto yy359;
6677 default:
6678 goto yy341;
6679 }
6680 yy343:
6681 ++p;
6682 { return 3; }
6683 yy345:
6684 yych = *++p;
6685 if (yych <= 'S') {
6686 if (yych <= 'D') {
6687 if (yych <= 'C')
6688 goto yy341;
6689 goto yy366;
6690 } else {
6691 if (yych <= 'Q')
6692 goto yy341;
6693 if (yych <= 'R')
6694 goto yy367;
6695 goto yy368;
6696 }
6697 } else {
6698 if (yych <= 'q') {
6699 if (yych == 'd')
6700 goto yy366;
6701 goto yy341;
6702 } else {
6703 if (yych <= 'r')
6704 goto yy367;
6705 if (yych <= 's')
6706 goto yy368;
6707 goto yy341;
6708 }
6709 }
6710 yy346:
6711 yych = *++p;
6712 if (yych <= 'O') {
6713 if (yych <= 'K') {
6714 if (yych == 'A')
6715 goto yy369;
6716 goto yy341;
6717 } else {
6718 if (yych <= 'L')
6719 goto yy370;
6720 if (yych <= 'N')
6721 goto yy341;
6722 goto yy371;
6723 }
6724 } else {
6725 if (yych <= 'k') {
6726 if (yych == 'a')
6727 goto yy369;
6728 goto yy341;
6729 } else {
6730 if (yych <= 'l')
6731 goto yy370;
6732 if (yych == 'o')
6733 goto yy371;
6734 goto yy341;
6735 }
6736 }
6737 yy347:
6738 yych = *++p;
6739 if (yych <= 'O') {
6740 if (yych <= 'D') {
6741 if (yych == 'A')
6742 goto yy372;
6743 goto yy341;
6744 } else {
6745 if (yych <= 'E')
6746 goto yy373;
6747 if (yych <= 'N')
6748 goto yy341;
6749 goto yy374;
6750 }
6751 } else {
6752 if (yych <= 'd') {
6753 if (yych == 'a')
6754 goto yy372;
6755 goto yy341;
6756 } else {
6757 if (yych <= 'e')
6758 goto yy373;
6759 if (yych == 'o')
6760 goto yy374;
6761 goto yy341;
6762 }
6763 }
6764 yy348:
6765 yych = *++p;
6766 switch (yych) {
6767 case 'D':
6768 case 'L':
6769 case 'T':
6770 case 'd':
6771 case 'l':
6772 case 't':
6773 goto yy375;
6774 case 'E':
6775 case 'e':
6776 goto yy376;
6777 case 'I':
6778 case 'i':
6779 goto yy377;
6780 default:
6781 goto yy341;
6782 }
6783 yy349:
6784 yych = *++p;
6785 if (yych <= 'R') {
6786 if (yych <= 'N') {
6787 if (yych == 'I')
6788 goto yy378;
6789 goto yy341;
6790 } else {
6791 if (yych <= 'O')
6792 goto yy379;
6793 if (yych <= 'Q')
6794 goto yy341;
6795 goto yy380;
6796 }
6797 } else {
6798 if (yych <= 'n') {
6799 if (yych == 'i')
6800 goto yy378;
6801 goto yy341;
6802 } else {
6803 if (yych <= 'o')
6804 goto yy379;
6805 if (yych == 'r')
6806 goto yy380;
6807 goto yy341;
6808 }
6809 }
6810 yy350:
6811 yych = *++p;
6812 if (yych <= 'S') {
6813 if (yych <= 'D') {
6814 if (yych <= '0')
6815 goto yy341;
6816 if (yych <= '6')
6817 goto yy375;
6818 goto yy341;
6819 } else {
6820 if (yych <= 'E')
6821 goto yy381;
6822 if (yych == 'R')
6823 goto yy375;
6824 goto yy341;
6825 }
6826 } else {
6827 if (yych <= 'q') {
6828 if (yych <= 'T')
6829 goto yy382;
6830 if (yych == 'e')
6831 goto yy381;
6832 goto yy341;
6833 } else {
6834 if (yych <= 'r')
6835 goto yy375;
6836 if (yych == 't')
6837 goto yy382;
6838 goto yy341;
6839 }
6840 }
6841 yy351:
6842 yych = *++p;
6843 if (yych == 'F')
6844 goto yy383;
6845 if (yych == 'f')
6846 goto yy383;
6847 goto yy341;
6848 yy352:
6849 yych = *++p;
6850 if (yych <= 'I') {
6851 if (yych == 'E')
6852 goto yy384;
6853 if (yych <= 'H')
6854 goto yy341;
6855 goto yy385;
6856 } else {
6857 if (yych <= 'e') {
6858 if (yych <= 'd')
6859 goto yy341;
6860 goto yy384;
6861 } else {
6862 if (yych == 'i')
6863 goto yy385;
6864 goto yy341;
6865 }
6866 }
6867 yy353:
6868 yych = *++p;
6869 if (yych <= 'E') {
6870 if (yych == 'A')
6871 goto yy386;
6872 if (yych <= 'D')
6873 goto yy341;
6874 goto yy387;
6875 } else {
6876 if (yych <= 'a') {
6877 if (yych <= '`')
6878 goto yy341;
6879 goto yy386;
6880 } else {
6881 if (yych == 'e')
6882 goto yy387;
6883 goto yy341;
6884 }
6885 }
6886 yy354:
6887 yych = *++p;
6888 if (yych <= 'O') {
6889 if (yych == 'A')
6890 goto yy388;
6891 if (yych <= 'N')
6892 goto yy341;
6893 goto yy389;
6894 } else {
6895 if (yych <= 'a') {
6896 if (yych <= '`')
6897 goto yy341;
6898 goto yy388;
6899 } else {
6900 if (yych == 'o')
6901 goto yy389;
6902 goto yy341;
6903 }
6904 }
6905 yy355:
6906 yych = *++p;
6907 if (yych <= 'P') {
6908 if (yych == 'L')
6909 goto yy375;
6910 if (yych <= 'O')
6911 goto yy341;
6912 goto yy390;
6913 } else {
6914 if (yych <= 'l') {
6915 if (yych <= 'k')
6916 goto yy341;
6917 goto yy375;
6918 } else {
6919 if (yych == 'p')
6920 goto yy390;
6921 goto yy341;
6922 }
6923 }
6924 yy356:
6925 yych = *++p;
6926 if (yych <= '>') {
6927 if (yych <= ' ') {
6928 if (yych <= 0x08)
6929 goto yy341;
6930 if (yych <= '\r')
6931 goto yy391;
6932 if (yych <= 0x1F)
6933 goto yy341;
6934 goto yy391;
6935 } else {
6936 if (yych == '/')
6937 goto yy393;
6938 if (yych <= '=')
6939 goto yy341;
6940 goto yy391;
6941 }
6942 } else {
6943 if (yych <= 'R') {
6944 if (yych == 'A')
6945 goto yy394;
6946 if (yych <= 'Q')
6947 goto yy341;
6948 goto yy395;
6949 } else {
6950 if (yych <= 'a') {
6951 if (yych <= '`')
6952 goto yy341;
6953 goto yy394;
6954 } else {
6955 if (yych == 'r')
6956 goto yy395;
6957 goto yy341;
6958 }
6959 }
6960 }
6961 yy357:
6962 yych = *++p;
6963 switch (yych) {
6964 case 'C':
6965 case 'c':
6966 goto yy396;
6967 case 'E':
6968 case 'e':
6969 goto yy397;
6970 case 'O':
6971 case 'o':
6972 goto yy398;
6973 case 'T':
6974 case 't':
6975 goto yy399;
6976 case 'U':
6977 case 'u':
6978 goto yy400;
6979 default:
6980 goto yy341;
6981 }
6982 yy358:
6983 yych = *++p;
6984 switch (yych) {
6985 case 'A':
6986 case 'a':
6987 goto yy401;
6988 case 'B':
6989 case 'b':
6990 goto yy402;
6991 case 'D':
6992 case 'd':
6993 goto yy375;
6994 case 'F':
6995 case 'f':
6996 goto yy403;
6997 case 'H':
6998 case 'h':
6999 goto yy404;
7000 case 'I':
7001 case 'i':
7002 goto yy405;
7003 case 'R':
7004 case 'r':
7005 goto yy406;
7006 default:
7007 goto yy341;
7008 }
7009 yy359:
7010 yych = *++p;
7011 if (yych == 'L')
7012 goto yy375;
7013 if (yych == 'l')
7014 goto yy375;
7015 goto yy341;
7016 yy360:
7017 yych = *++p;
7018 if (yych == '-')
7019 goto yy407;
7020 goto yy341;
7021 yy361:
7022 ++p;
7023 { return 4; }
7024 yy363:
7025 yych = *++p;
7026 if (yych == 'C')
7027 goto yy409;
7028 if (yych == 'c')
7029 goto yy409;
7030 goto yy341;
7031 yy364:
7032 yych = *++p;
7033 if (yych <= '/') {
7034 if (yych <= 0x1F) {
7035 if (yych <= 0x08)
7036 goto yy341;
7037 if (yych <= '\r')
7038 goto yy391;
7039 goto yy341;
7040 } else {
7041 if (yych <= ' ')
7042 goto yy391;
7043 if (yych <= '.')
7044 goto yy341;
7045 goto yy393;
7046 }
7047 } else {
7048 if (yych <= '@') {
7049 if (yych == '>')
7050 goto yy391;
7051 goto yy341;
7052 } else {
7053 if (yych <= 'A')
7054 goto yy394;
7055 if (yych == 'a')
7056 goto yy394;
7057 goto yy341;
7058 }
7059 }
7060 yy365:
7061 yych = *++p;
7062 if (yych <= 'U') {
7063 if (yych <= 'N') {
7064 if (yych == 'E')
7065 goto yy397;
7066 goto yy341;
7067 } else {
7068 if (yych <= 'O')
7069 goto yy398;
7070 if (yych <= 'T')
7071 goto yy341;
7072 goto yy400;
7073 }
7074 } else {
7075 if (yych <= 'n') {
7076 if (yych == 'e')
7077 goto yy397;
7078 goto yy341;
7079 } else {
7080 if (yych <= 'o')
7081 goto yy398;
7082 if (yych == 'u')
7083 goto yy400;
7084 goto yy341;
7085 }
7086 }
7087 yy366:
7088 yych = *++p;
7089 if (yych == 'D')
7090 goto yy410;
7091 if (yych == 'd')
7092 goto yy410;
7093 goto yy341;
7094 yy367:
7095 yych = *++p;
7096 if (yych == 'T')
7097 goto yy411;
7098 if (yych == 't')
7099 goto yy411;
7100 goto yy341;
7101 yy368:
7102 yych = *++p;
7103 if (yych == 'I')
7104 goto yy412;
7105 if (yych == 'i')
7106 goto yy412;
7107 goto yy341;
7108 yy369:
7109 yych = *++p;
7110 if (yych == 'S')
7111 goto yy413;
7112 if (yych == 's')
7113 goto yy413;
7114 goto yy341;
7115 yy370:
7116 yych = *++p;
7117 if (yych == 'O')
7118 goto yy414;
7119 if (yych == 'o')
7120 goto yy414;
7121 goto yy341;
7122 yy371:
7123 yych = *++p;
7124 if (yych == 'D')
7125 goto yy415;
7126 if (yych == 'd')
7127 goto yy415;
7128 goto yy341;
7129 yy372:
7130 yych = *++p;
7131 if (yych == 'P')
7132 goto yy416;
7133 if (yych == 'p')
7134 goto yy416;
7135 goto yy341;
7136 yy373:
7137 yych = *++p;
7138 if (yych == 'N')
7139 goto yy417;
7140 if (yych == 'n')
7141 goto yy417;
7142 goto yy341;
7143 yy374:
7144 yych = *++p;
7145 if (yych == 'L')
7146 goto yy418;
7147 if (yych == 'l')
7148 goto yy418;
7149 goto yy341;
7150 yy375:
7151 yych = *++p;
7152 if (yych <= ' ') {
7153 if (yych <= 0x08)
7154 goto yy341;
7155 if (yych <= '\r')
7156 goto yy391;
7157 if (yych <= 0x1F)
7158 goto yy341;
7159 goto yy391;
7160 } else {
7161 if (yych <= '/') {
7162 if (yych <= '.')
7163 goto yy341;
7164 goto yy393;
7165 } else {
7166 if (yych == '>')
7167 goto yy391;
7168 goto yy341;
7169 }
7170 }
7171 yy376:
7172 yych = *++p;
7173 if (yych == 'T')
7174 goto yy419;
7175 if (yych == 't')
7176 goto yy419;
7177 goto yy341;
7178 yy377:
7179 yych = *++p;
7180 if (yych <= 'V') {
7181 if (yych <= 'Q') {
7182 if (yych == 'A')
7183 goto yy420;
7184 goto yy341;
7185 } else {
7186 if (yych <= 'R')
7187 goto yy375;
7188 if (yych <= 'U')
7189 goto yy341;
7190 goto yy375;
7191 }
7192 } else {
7193 if (yych <= 'q') {
7194 if (yych == 'a')
7195 goto yy420;
7196 goto yy341;
7197 } else {
7198 if (yych <= 'r')
7199 goto yy375;
7200 if (yych == 'v')
7201 goto yy375;
7202 goto yy341;
7203 }
7204 }
7205 yy378:
7206 yych = *++p;
7207 if (yych <= 'G') {
7208 if (yych == 'E')
7209 goto yy421;
7210 if (yych <= 'F')
7211 goto yy341;
7212 goto yy422;
7213 } else {
7214 if (yych <= 'e') {
7215 if (yych <= 'd')
7216 goto yy341;
7217 goto yy421;
7218 } else {
7219 if (yych == 'g')
7220 goto yy422;
7221 goto yy341;
7222 }
7223 }
7224 yy379:
7225 yych = *++p;
7226 if (yych <= 'R') {
7227 if (yych == 'O')
7228 goto yy417;
7229 if (yych <= 'Q')
7230 goto yy341;
7231 goto yy423;
7232 } else {
7233 if (yych <= 'o') {
7234 if (yych <= 'n')
7235 goto yy341;
7236 goto yy417;
7237 } else {
7238 if (yych == 'r')
7239 goto yy423;
7240 goto yy341;
7241 }
7242 }
7243 yy380:
7244 yych = *++p;
7245 if (yych == 'A')
7246 goto yy424;
7247 if (yych == 'a')
7248 goto yy424;
7249 goto yy341;
7250 yy381:
7251 yych = *++p;
7252 if (yych == 'A')
7253 goto yy425;
7254 if (yych == 'a')
7255 goto yy425;
7256 goto yy341;
7257 yy382:
7258 yych = *++p;
7259 if (yych == 'M')
7260 goto yy359;
7261 if (yych == 'm')
7262 goto yy359;
7263 goto yy341;
7264 yy383:
7265 yych = *++p;
7266 if (yych == 'R')
7267 goto yy426;
7268 if (yych == 'r')
7269 goto yy426;
7270 goto yy341;
7271 yy384:
7272 yych = *++p;
7273 if (yych == 'G')
7274 goto yy427;
7275 if (yych == 'g')
7276 goto yy427;
7277 goto yy341;
7278 yy385:
7279 yych = *++p;
7280 if (yych <= '/') {
7281 if (yych <= 0x1F) {
7282 if (yych <= 0x08)
7283 goto yy341;
7284 if (yych <= '\r')
7285 goto yy391;
7286 goto yy341;
7287 } else {
7288 if (yych <= ' ')
7289 goto yy391;
7290 if (yych <= '.')
7291 goto yy341;
7292 goto yy393;
7293 }
7294 } else {
7295 if (yych <= 'M') {
7296 if (yych == '>')
7297 goto yy391;
7298 goto yy341;
7299 } else {
7300 if (yych <= 'N')
7301 goto yy428;
7302 if (yych == 'n')
7303 goto yy428;
7304 goto yy341;
7305 }
7306 }
7307 yy386:
7308 yych = *++p;
7309 if (yych == 'I')
7310 goto yy429;
7311 if (yych == 'i')
7312 goto yy429;
7313 goto yy341;
7314 yy387:
7315 yych = *++p;
7316 if (yych <= 'T') {
7317 if (yych == 'N')
7318 goto yy430;
7319 if (yych <= 'S')
7320 goto yy341;
7321 goto yy431;
7322 } else {
7323 if (yych <= 'n') {
7324 if (yych <= 'm')
7325 goto yy341;
7326 goto yy430;
7327 } else {
7328 if (yych == 't')
7329 goto yy431;
7330 goto yy341;
7331 }
7332 }
7333 yy388:
7334 yych = *++p;
7335 if (yych == 'V')
7336 goto yy375;
7337 if (yych == 'v')
7338 goto yy375;
7339 goto yy341;
7340 yy389:
7341 yych = *++p;
7342 if (yych == 'F')
7343 goto yy432;
7344 if (yych == 'f')
7345 goto yy432;
7346 goto yy341;
7347 yy390:
7348 yych = *++p;
7349 if (yych == 'T')
7350 goto yy433;
7351 if (yych == 't')
7352 goto yy433;
7353 goto yy341;
7354 yy391:
7355 ++p;
7356 { return 6; }
7357 yy393:
7358 yych = *++p;
7359 if (yych == '>')
7360 goto yy391;
7361 goto yy341;
7362 yy394:
7363 yych = *++p;
7364 if (yych == 'R')
7365 goto yy434;
7366 if (yych == 'r')
7367 goto yy434;
7368 goto yy341;
7369 yy395:
7370 yych = *++p;
7371 if (yych == 'E')
7372 goto yy435;
7373 if (yych == 'e')
7374 goto yy435;
7375 goto yy341;
7376 yy396:
7377 yych = *++p;
7378 if (yych == 'R')
7379 goto yy436;
7380 if (yych == 'r')
7381 goto yy436;
7382 goto yy341;
7383 yy397:
7384 yych = *++p;
7385 if (yych == 'C')
7386 goto yy416;
7387 if (yych == 'c')
7388 goto yy416;
7389 goto yy341;
7390 yy398:
7391 yych = *++p;
7392 if (yych == 'U')
7393 goto yy437;
7394 if (yych == 'u')
7395 goto yy437;
7396 goto yy341;
7397 yy399:
7398 yych = *++p;
7399 if (yych == 'Y')
7400 goto yy438;
7401 if (yych == 'y')
7402 goto yy438;
7403 goto yy341;
7404 yy400:
7405 yych = *++p;
7406 if (yych == 'M')
7407 goto yy439;
7408 if (yych == 'm')
7409 goto yy439;
7410 goto yy341;
7411 yy401:
7412 yych = *++p;
7413 if (yych == 'B')
7414 goto yy440;
7415 if (yych == 'b')
7416 goto yy440;
7417 goto yy341;
7418 yy402:
7419 yych = *++p;
7420 if (yych == 'O')
7421 goto yy371;
7422 if (yych == 'o')
7423 goto yy371;
7424 goto yy341;
7425 yy403:
7426 yych = *++p;
7427 if (yych == 'O')
7428 goto yy441;
7429 if (yych == 'o')
7430 goto yy441;
7431 goto yy341;
7432 yy404:
7433 yych = *++p;
7434 if (yych <= '/') {
7435 if (yych <= 0x1F) {
7436 if (yych <= 0x08)
7437 goto yy341;
7438 if (yych <= '\r')
7439 goto yy391;
7440 goto yy341;
7441 } else {
7442 if (yych <= ' ')
7443 goto yy391;
7444 if (yych <= '.')
7445 goto yy341;
7446 goto yy393;
7447 }
7448 } else {
7449 if (yych <= 'D') {
7450 if (yych == '>')
7451 goto yy391;
7452 goto yy341;
7453 } else {
7454 if (yych <= 'E')
7455 goto yy442;
7456 if (yych == 'e')
7457 goto yy442;
7458 goto yy341;
7459 }
7460 }
7461 yy405:
7462 yych = *++p;
7463 if (yych == 'T')
7464 goto yy440;
7465 if (yych == 't')
7466 goto yy440;
7467 goto yy341;
7468 yy406:
7469 yych = *++p;
7470 if (yych <= '/') {
7471 if (yych <= 0x1F) {
7472 if (yych <= 0x08)
7473 goto yy341;
7474 if (yych <= '\r')
7475 goto yy391;
7476 goto yy341;
7477 } else {
7478 if (yych <= ' ')
7479 goto yy391;
7480 if (yych <= '.')
7481 goto yy341;
7482 goto yy393;
7483 }
7484 } else {
7485 if (yych <= '@') {
7486 if (yych == '>')
7487 goto yy391;
7488 goto yy341;
7489 } else {
7490 if (yych <= 'A')
7491 goto yy443;
7492 if (yych == 'a')
7493 goto yy443;
7494 goto yy341;
7495 }
7496 }
7497 yy407:
7498 ++p;
7499 { return 2; }
7500 yy409:
7501 yych = *++p;
7502 if (yych == 'D')
7503 goto yy444;
7504 if (yych == 'd')
7505 goto yy444;
7506 goto yy341;
7507 yy410:
7508 yych = *++p;
7509 if (yych == 'R')
7510 goto yy445;
7511 if (yych == 'r')
7512 goto yy445;
7513 goto yy341;
7514 yy411:
7515 yych = *++p;
7516 if (yych == 'I')
7517 goto yy446;
7518 if (yych == 'i')
7519 goto yy446;
7520 goto yy341;
7521 yy412:
7522 yych = *++p;
7523 if (yych == 'D')
7524 goto yy447;
7525 if (yych == 'd')
7526 goto yy447;
7527 goto yy341;
7528 yy413:
7529 yych = *++p;
7530 if (yych == 'E')
7531 goto yy448;
7532 if (yych == 'e')
7533 goto yy448;
7534 goto yy341;
7535 yy414:
7536 yych = *++p;
7537 if (yych == 'C')
7538 goto yy449;
7539 if (yych == 'c')
7540 goto yy449;
7541 goto yy341;
7542 yy415:
7543 yych = *++p;
7544 if (yych == 'Y')
7545 goto yy375;
7546 if (yych == 'y')
7547 goto yy375;
7548 goto yy341;
7549 yy416:
7550 yych = *++p;
7551 if (yych == 'T')
7552 goto yy450;
7553 if (yych == 't')
7554 goto yy450;
7555 goto yy341;
7556 yy417:
7557 yych = *++p;
7558 if (yych == 'T')
7559 goto yy451;
7560 if (yych == 't')
7561 goto yy451;
7562 goto yy341;
7563 yy418:
7564 yych = *++p;
7565 if (yych <= '/') {
7566 if (yych <= 0x1F) {
7567 if (yych <= 0x08)
7568 goto yy341;
7569 if (yych <= '\r')
7570 goto yy391;
7571 goto yy341;
7572 } else {
7573 if (yych <= ' ')
7574 goto yy391;
7575 if (yych <= '.')
7576 goto yy341;
7577 goto yy393;
7578 }
7579 } else {
7580 if (yych <= 'F') {
7581 if (yych == '>')
7582 goto yy391;
7583 goto yy341;
7584 } else {
7585 if (yych <= 'G')
7586 goto yy452;
7587 if (yych == 'g')
7588 goto yy452;
7589 goto yy341;
7590 }
7591 }
7592 yy419:
7593 yych = *++p;
7594 if (yych == 'A')
7595 goto yy453;
7596 if (yych == 'a')
7597 goto yy453;
7598 goto yy341;
7599 yy420:
7600 yych = *++p;
7601 if (yych == 'L')
7602 goto yy454;
7603 if (yych == 'l')
7604 goto yy454;
7605 goto yy341;
7606 yy421:
7607 yych = *++p;
7608 if (yych == 'L')
7609 goto yy455;
7610 if (yych == 'l')
7611 goto yy455;
7612 goto yy341;
7613 yy422:
7614 yych = *++p;
7615 if (yych <= 'U') {
7616 if (yych == 'C')
7617 goto yy456;
7618 if (yych <= 'T')
7619 goto yy341;
7620 goto yy457;
7621 } else {
7622 if (yych <= 'c') {
7623 if (yych <= 'b')
7624 goto yy341;
7625 goto yy456;
7626 } else {
7627 if (yych == 'u')
7628 goto yy457;
7629 goto yy341;
7630 }
7631 }
7632 yy423:
7633 yych = *++p;
7634 if (yych == 'M')
7635 goto yy375;
7636 if (yych == 'm')
7637 goto yy375;
7638 goto yy341;
7639 yy424:
7640 yych = *++p;
7641 if (yych == 'M')
7642 goto yy458;
7643 if (yych == 'm')
7644 goto yy458;
7645 goto yy341;
7646 yy425:
7647 yych = *++p;
7648 if (yych == 'D')
7649 goto yy459;
7650 if (yych == 'd')
7651 goto yy459;
7652 goto yy341;
7653 yy426:
7654 yych = *++p;
7655 if (yych == 'A')
7656 goto yy460;
7657 if (yych == 'a')
7658 goto yy460;
7659 goto yy341;
7660 yy427:
7661 yych = *++p;
7662 if (yych == 'E')
7663 goto yy461;
7664 if (yych == 'e')
7665 goto yy461;
7666 goto yy341;
7667 yy428:
7668 yych = *++p;
7669 if (yych == 'K')
7670 goto yy375;
7671 if (yych == 'k')
7672 goto yy375;
7673 goto yy341;
7674 yy429:
7675 yych = *++p;
7676 if (yych == 'N')
7677 goto yy375;
7678 if (yych == 'n')
7679 goto yy375;
7680 goto yy341;
7681 yy430:
7682 yych = *++p;
7683 if (yych == 'U')
7684 goto yy462;
7685 if (yych == 'u')
7686 goto yy462;
7687 goto yy341;
7688 yy431:
7689 yych = *++p;
7690 if (yych == 'A')
7691 goto yy375;
7692 if (yych == 'a')
7693 goto yy375;
7694 goto yy341;
7695 yy432:
7696 yych = *++p;
7697 if (yych == 'R')
7698 goto yy463;
7699 if (yych == 'r')
7700 goto yy463;
7701 goto yy341;
7702 yy433:
7703 yych = *++p;
7704 if (yych <= 'I') {
7705 if (yych == 'G')
7706 goto yy452;
7707 if (yych <= 'H')
7708 goto yy341;
7709 goto yy464;
7710 } else {
7711 if (yych <= 'g') {
7712 if (yych <= 'f')
7713 goto yy341;
7714 goto yy452;
7715 } else {
7716 if (yych == 'i')
7717 goto yy464;
7718 goto yy341;
7719 }
7720 }
7721 yy434:
7722 yych = *++p;
7723 if (yych == 'A')
7724 goto yy423;
7725 if (yych == 'a')
7726 goto yy423;
7727 goto yy341;
7728 yy435:
7729 yych = *++p;
7730 if (yych <= 0x1F) {
7731 if (yych <= 0x08)
7732 goto yy341;
7733 if (yych <= '\r')
7734 goto yy465;
7735 goto yy341;
7736 } else {
7737 if (yych <= ' ')
7738 goto yy465;
7739 if (yych == '>')
7740 goto yy465;
7741 goto yy341;
7742 }
7743 yy436:
7744 yych = *++p;
7745 if (yych == 'I')
7746 goto yy467;
7747 if (yych == 'i')
7748 goto yy467;
7749 goto yy341;
7750 yy437:
7751 yych = *++p;
7752 if (yych == 'R')
7753 goto yy468;
7754 if (yych == 'r')
7755 goto yy468;
7756 goto yy341;
7757 yy438:
7758 yych = *++p;
7759 if (yych == 'L')
7760 goto yy395;
7761 if (yych == 'l')
7762 goto yy395;
7763 goto yy341;
7764 yy439:
7765 yych = *++p;
7766 if (yych == 'M')
7767 goto yy469;
7768 if (yych == 'm')
7769 goto yy469;
7770 goto yy341;
7771 yy440:
7772 yych = *++p;
7773 if (yych == 'L')
7774 goto yy447;
7775 if (yych == 'l')
7776 goto yy447;
7777 goto yy341;
7778 yy441:
7779 yych = *++p;
7780 if (yych == 'O')
7781 goto yy470;
7782 if (yych == 'o')
7783 goto yy470;
7784 goto yy341;
7785 yy442:
7786 yych = *++p;
7787 if (yych == 'A')
7788 goto yy471;
7789 if (yych == 'a')
7790 goto yy471;
7791 goto yy341;
7792 yy443:
7793 yych = *++p;
7794 if (yych == 'C')
7795 goto yy428;
7796 if (yych == 'c')
7797 goto yy428;
7798 goto yy341;
7799 yy444:
7800 yych = *++p;
7801 if (yych == 'A')
7802 goto yy472;
7803 if (yych == 'a')
7804 goto yy472;
7805 goto yy341;
7806 yy445:
7807 yych = *++p;
7808 if (yych == 'E')
7809 goto yy473;
7810 if (yych == 'e')
7811 goto yy473;
7812 goto yy341;
7813 yy446:
7814 yych = *++p;
7815 if (yych == 'C')
7816 goto yy440;
7817 if (yych == 'c')
7818 goto yy440;
7819 goto yy341;
7820 yy447:
7821 yych = *++p;
7822 if (yych == 'E')
7823 goto yy375;
7824 if (yych == 'e')
7825 goto yy375;
7826 goto yy341;
7827 yy448:
7828 yych = *++p;
7829 if (yych <= '/') {
7830 if (yych <= 0x1F) {
7831 if (yych <= 0x08)
7832 goto yy341;
7833 if (yych <= '\r')
7834 goto yy391;
7835 goto yy341;
7836 } else {
7837 if (yych <= ' ')
7838 goto yy391;
7839 if (yych <= '.')
7840 goto yy341;
7841 goto yy393;
7842 }
7843 } else {
7844 if (yych <= 'E') {
7845 if (yych == '>')
7846 goto yy391;
7847 goto yy341;
7848 } else {
7849 if (yych <= 'F')
7850 goto yy474;
7851 if (yych == 'f')
7852 goto yy474;
7853 goto yy341;
7854 }
7855 }
7856 yy449:
7857 yych = *++p;
7858 if (yych == 'K')
7859 goto yy475;
7860 if (yych == 'k')
7861 goto yy475;
7862 goto yy341;
7863 yy450:
7864 yych = *++p;
7865 if (yych == 'I')
7866 goto yy464;
7867 if (yych == 'i')
7868 goto yy464;
7869 goto yy341;
7870 yy451:
7871 yych = *++p;
7872 if (yych == 'E')
7873 goto yy476;
7874 if (yych == 'e')
7875 goto yy476;
7876 goto yy341;
7877 yy452:
7878 yych = *++p;
7879 if (yych == 'R')
7880 goto yy477;
7881 if (yych == 'r')
7882 goto yy477;
7883 goto yy341;
7884 yy453:
7885 yych = *++p;
7886 if (yych == 'I')
7887 goto yy478;
7888 if (yych == 'i')
7889 goto yy478;
7890 goto yy341;
7891 yy454:
7892 yych = *++p;
7893 if (yych == 'O')
7894 goto yy479;
7895 if (yych == 'o')
7896 goto yy479;
7897 goto yy341;
7898 yy455:
7899 yych = *++p;
7900 if (yych == 'D')
7901 goto yy480;
7902 if (yych == 'd')
7903 goto yy480;
7904 goto yy341;
7905 yy456:
7906 yych = *++p;
7907 if (yych == 'A')
7908 goto yy372;
7909 if (yych == 'a')
7910 goto yy372;
7911 goto yy341;
7912 yy457:
7913 yych = *++p;
7914 if (yych == 'R')
7915 goto yy447;
7916 if (yych == 'r')
7917 goto yy447;
7918 goto yy341;
7919 yy458:
7920 yych = *++p;
7921 if (yych == 'E')
7922 goto yy481;
7923 if (yych == 'e')
7924 goto yy481;
7925 goto yy341;
7926 yy459:
7927 yych = *++p;
7928 if (yych <= '/') {
7929 if (yych <= 0x1F) {
7930 if (yych <= 0x08)
7931 goto yy341;
7932 if (yych <= '\r')
7933 goto yy391;
7934 goto yy341;
7935 } else {
7936 if (yych <= ' ')
7937 goto yy391;
7938 if (yych <= '.')
7939 goto yy341;
7940 goto yy393;
7941 }
7942 } else {
7943 if (yych <= 'D') {
7944 if (yych == '>')
7945 goto yy391;
7946 goto yy341;
7947 } else {
7948 if (yych <= 'E')
7949 goto yy476;
7950 if (yych == 'e')
7951 goto yy476;
7952 goto yy341;
7953 }
7954 }
7955 yy460:
7956 yych = *++p;
7957 if (yych == 'M')
7958 goto yy447;
7959 if (yych == 'm')
7960 goto yy447;
7961 goto yy341;
7962 yy461:
7963 yych = *++p;
7964 if (yych == 'N')
7965 goto yy471;
7966 if (yych == 'n')
7967 goto yy471;
7968 goto yy341;
7969 yy462:
7970 yych = *++p;
7971 if (yych <= '/') {
7972 if (yych <= 0x1F) {
7973 if (yych <= 0x08)
7974 goto yy341;
7975 if (yych <= '\r')
7976 goto yy391;
7977 goto yy341;
7978 } else {
7979 if (yych <= ' ')
7980 goto yy391;
7981 if (yych <= '.')
7982 goto yy341;
7983 goto yy393;
7984 }
7985 } else {
7986 if (yych <= 'H') {
7987 if (yych == '>')
7988 goto yy391;
7989 goto yy341;
7990 } else {
7991 if (yych <= 'I')
7992 goto yy482;
7993 if (yych == 'i')
7994 goto yy482;
7995 goto yy341;
7996 }
7997 }
7998 yy463:
7999 yych = *++p;
8000 if (yych == 'A')
8001 goto yy483;
8002 if (yych == 'a')
8003 goto yy483;
8004 goto yy341;
8005 yy464:
8006 yych = *++p;
8007 if (yych == 'O')
8008 goto yy429;
8009 if (yych == 'o')
8010 goto yy429;
8011 goto yy341;
8012 yy465:
8013 ++p;
8014 { return 1; }
8015 yy467:
8016 yych = *++p;
8017 if (yych == 'P')
8018 goto yy484;
8019 if (yych == 'p')
8020 goto yy484;
8021 goto yy341;
8022 yy468:
8023 yych = *++p;
8024 if (yych == 'C')
8025 goto yy447;
8026 if (yych == 'c')
8027 goto yy447;
8028 goto yy341;
8029 yy469:
8030 yych = *++p;
8031 if (yych == 'A')
8032 goto yy485;
8033 if (yych == 'a')
8034 goto yy485;
8035 goto yy341;
8036 yy470:
8037 yych = *++p;
8038 if (yych == 'T')
8039 goto yy375;
8040 if (yych == 't')
8041 goto yy375;
8042 goto yy341;
8043 yy471:
8044 yych = *++p;
8045 if (yych == 'D')
8046 goto yy375;
8047 if (yych == 'd')
8048 goto yy375;
8049 goto yy341;
8050 yy472:
8051 yych = *++p;
8052 if (yych == 'T')
8053 goto yy486;
8054 if (yych == 't')
8055 goto yy486;
8056 goto yy341;
8057 yy473:
8058 yych = *++p;
8059 if (yych == 'S')
8060 goto yy487;
8061 if (yych == 's')
8062 goto yy487;
8063 goto yy341;
8064 yy474:
8065 yych = *++p;
8066 if (yych == 'O')
8067 goto yy488;
8068 if (yych == 'o')
8069 goto yy488;
8070 goto yy341;
8071 yy475:
8072 yych = *++p;
8073 if (yych == 'Q')
8074 goto yy489;
8075 if (yych == 'q')
8076 goto yy489;
8077 goto yy341;
8078 yy476:
8079 yych = *++p;
8080 if (yych == 'R')
8081 goto yy375;
8082 if (yych == 'r')
8083 goto yy375;
8084 goto yy341;
8085 yy477:
8086 yych = *++p;
8087 if (yych == 'O')
8088 goto yy490;
8089 if (yych == 'o')
8090 goto yy490;
8091 goto yy341;
8092 yy478:
8093 yych = *++p;
8094 if (yych == 'L')
8095 goto yy487;
8096 if (yych == 'l')
8097 goto yy487;
8098 goto yy341;
8099 yy479:
8100 yych = *++p;
8101 if (yych == 'G')
8102 goto yy375;
8103 if (yych == 'g')
8104 goto yy375;
8105 goto yy341;
8106 yy480:
8107 yych = *++p;
8108 if (yych == 'S')
8109 goto yy491;
8110 if (yych == 's')
8111 goto yy491;
8112 goto yy341;
8113 yy481:
8114 yych = *++p;
8115 if (yych <= '/') {
8116 if (yych <= 0x1F) {
8117 if (yych <= 0x08)
8118 goto yy341;
8119 if (yych <= '\r')
8120 goto yy391;
8121 goto yy341;
8122 } else {
8123 if (yych <= ' ')
8124 goto yy391;
8125 if (yych <= '.')
8126 goto yy341;
8127 goto yy393;
8128 }
8129 } else {
8130 if (yych <= 'R') {
8131 if (yych == '>')
8132 goto yy391;
8133 goto yy341;
8134 } else {
8135 if (yych <= 'S')
8136 goto yy491;
8137 if (yych == 's')
8138 goto yy491;
8139 goto yy341;
8140 }
8141 }
8142 yy482:
8143 yych = *++p;
8144 if (yych == 'T')
8145 goto yy492;
8146 if (yych == 't')
8147 goto yy492;
8148 goto yy341;
8149 yy483:
8150 yych = *++p;
8151 if (yych == 'M')
8152 goto yy493;
8153 if (yych == 'm')
8154 goto yy493;
8155 goto yy341;
8156 yy484:
8157 yych = *++p;
8158 if (yych == 'T')
8159 goto yy435;
8160 if (yych == 't')
8161 goto yy435;
8162 goto yy341;
8163 yy485:
8164 yych = *++p;
8165 if (yych == 'R')
8166 goto yy415;
8167 if (yych == 'r')
8168 goto yy415;
8169 goto yy341;
8170 yy486:
8171 yych = *++p;
8172 if (yych == 'A')
8173 goto yy494;
8174 if (yych == 'a')
8175 goto yy494;
8176 goto yy341;
8177 yy487:
8178 yych = *++p;
8179 if (yych == 'S')
8180 goto yy375;
8181 if (yych == 's')
8182 goto yy375;
8183 goto yy341;
8184 yy488:
8185 yych = *++p;
8186 if (yych == 'N')
8187 goto yy470;
8188 if (yych == 'n')
8189 goto yy470;
8190 goto yy341;
8191 yy489:
8192 yych = *++p;
8193 if (yych == 'U')
8194 goto yy495;
8195 if (yych == 'u')
8196 goto yy495;
8197 goto yy341;
8198 yy490:
8199 yych = *++p;
8200 if (yych == 'U')
8201 goto yy496;
8202 if (yych == 'u')
8203 goto yy496;
8204 goto yy341;
8205 yy491:
8206 yych = *++p;
8207 if (yych == 'E')
8208 goto yy470;
8209 if (yych == 'e')
8210 goto yy470;
8211 goto yy341;
8212 yy492:
8213 yych = *++p;
8214 if (yych == 'E')
8215 goto yy423;
8216 if (yych == 'e')
8217 goto yy423;
8218 goto yy341;
8219 yy493:
8220 yych = *++p;
8221 if (yych == 'E')
8222 goto yy487;
8223 if (yych == 'e')
8224 goto yy487;
8225 goto yy341;
8226 yy494:
8227 yych = *++p;
8228 if (yych == '[')
8229 goto yy497;
8230 goto yy341;
8231 yy495:
8232 yych = *++p;
8233 if (yych == 'O')
8234 goto yy499;
8235 if (yych == 'o')
8236 goto yy499;
8237 goto yy341;
8238 yy496:
8239 yych = *++p;
8240 if (yych == 'P')
8241 goto yy375;
8242 if (yych == 'p')
8243 goto yy375;
8244 goto yy341;
8245 yy497:
8246 ++p;
8247 { return 5; }
8248 yy499:
8249 ++p;
8250 if ((yych = *p) == 'T')
8251 goto yy447;
8252 if (yych == 't')
8253 goto yy447;
8254 goto yy341;
8255 }
8256 }
8257
8258 // Try to match an HTML block tag start line of type 7, returning
8259 // 7 if successful, 0 if not.
8260 bufsize_t _scan_html_block_start_7(const unsigned char *p) {
8261 const unsigned char *marker = NULL;
8262
8263 {
8264 unsigned char yych;
8265 unsigned int yyaccept = 0;
8266 static const unsigned char yybm[] = {
8267 0, 224, 224, 224, 224, 224, 224, 224, 224, 198, 210, 194, 198, 194,
8268 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
8269 224, 224, 224, 224, 198, 224, 128, 224, 224, 224, 224, 64, 224, 224,
8270 224, 224, 224, 233, 232, 224, 233, 233, 233, 233, 233, 233, 233, 233,
8271 233, 233, 232, 224, 192, 192, 192, 224, 224, 233, 233, 233, 233, 233,
8272 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
8273 233, 233, 233, 233, 233, 233, 233, 224, 224, 224, 224, 232, 192, 233,
8274 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
8275 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 224, 224, 224,
8276 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8277 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8278 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8279 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8280 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8281 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8282 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8283 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8284 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8285 0, 0, 0, 0,
8286 };
8287 yych = *p;
8288 if (yych == '<')
8289 goto yy504;
8290 ++p;
8291 yy503 : { return 0; }
8292 yy504:
8293 yyaccept = 0;
8294 yych = *(marker = ++p);
8295 if (yych <= '@') {
8296 if (yych != '/')
8297 goto yy503;
8298 } else {
8299 if (yych <= 'Z')
8300 goto yy507;
8301 if (yych <= '`')
8302 goto yy503;
8303 if (yych <= 'z')
8304 goto yy507;
8305 goto yy503;
8306 }
8307 yych = *++p;
8308 if (yych <= '@')
8309 goto yy506;
8310 if (yych <= 'Z')
8311 goto yy509;
8312 if (yych <= '`')
8313 goto yy506;
8314 if (yych <= 'z')
8315 goto yy509;
8316 yy506:
8317 p = marker;
8318 if (yyaccept == 0) {
8319 goto yy503;
8320 } else {
8321 goto yy522;
8322 }
8323 yy507:
8324 ++p;
8325 yych = *p;
8326 if (yybm[0 + yych] & 2) {
8327 goto yy511;
8328 }
8329 if (yych <= '=') {
8330 if (yych <= '.') {
8331 if (yych == '-')
8332 goto yy507;
8333 goto yy506;
8334 } else {
8335 if (yych <= '/')
8336 goto yy513;
8337 if (yych <= '9')
8338 goto yy507;
8339 goto yy506;
8340 }
8341 } else {
8342 if (yych <= 'Z') {
8343 if (yych <= '>')
8344 goto yy514;
8345 if (yych <= '@')
8346 goto yy506;
8347 goto yy507;
8348 } else {
8349 if (yych <= '`')
8350 goto yy506;
8351 if (yych <= 'z')
8352 goto yy507;
8353 goto yy506;
8354 }
8355 }
8356 yy509:
8357 ++p;
8358 yych = *p;
8359 if (yych <= '/') {
8360 if (yych <= 0x1F) {
8361 if (yych <= 0x08)
8362 goto yy506;
8363 if (yych <= '\r')
8364 goto yy516;
8365 goto yy506;
8366 } else {
8367 if (yych <= ' ')
8368 goto yy516;
8369 if (yych == '-')
8370 goto yy509;
8371 goto yy506;
8372 }
8373 } else {
8374 if (yych <= '@') {
8375 if (yych <= '9')
8376 goto yy509;
8377 if (yych == '>')
8378 goto yy514;
8379 goto yy506;
8380 } else {
8381 if (yych <= 'Z')
8382 goto yy509;
8383 if (yych <= '`')
8384 goto yy506;
8385 if (yych <= 'z')
8386 goto yy509;
8387 goto yy506;
8388 }
8389 }
8390 yy511:
8391 ++p;
8392 yych = *p;
8393 if (yybm[0 + yych] & 2) {
8394 goto yy511;
8395 }
8396 if (yych <= '>') {
8397 if (yych <= '9') {
8398 if (yych != '/')
8399 goto yy506;
8400 } else {
8401 if (yych <= ':')
8402 goto yy518;
8403 if (yych <= '=')
8404 goto yy506;
8405 goto yy514;
8406 }
8407 } else {
8408 if (yych <= '^') {
8409 if (yych <= '@')
8410 goto yy506;
8411 if (yych <= 'Z')
8412 goto yy518;
8413 goto yy506;
8414 } else {
8415 if (yych == '`')
8416 goto yy506;
8417 if (yych <= 'z')
8418 goto yy518;
8419 goto yy506;
8420 }
8421 }
8422 yy513:
8423 yych = *++p;
8424 if (yych != '>')
8425 goto yy506;
8426 yy514:
8427 ++p;
8428 yych = *p;
8429 if (yybm[0 + yych] & 4) {
8430 goto yy514;
8431 }
8432 if (yych <= 0x08)
8433 goto yy506;
8434 if (yych <= '\n')
8435 goto yy520;
8436 if (yych <= '\v')
8437 goto yy506;
8438 if (yych <= '\r')
8439 goto yy523;
8440 goto yy506;
8441 yy516:
8442 ++p;
8443 yych = *p;
8444 if (yych <= 0x1F) {
8445 if (yych <= 0x08)
8446 goto yy506;
8447 if (yych <= '\r')
8448 goto yy516;
8449 goto yy506;
8450 } else {
8451 if (yych <= ' ')
8452 goto yy516;
8453 if (yych == '>')
8454 goto yy514;
8455 goto yy506;
8456 }
8457 yy518:
8458 ++p;
8459 yych = *p;
8460 if (yybm[0 + yych] & 8) {
8461 goto yy518;
8462 }
8463 if (yych <= ',') {
8464 if (yych <= '\r') {
8465 if (yych <= 0x08)
8466 goto yy506;
8467 goto yy524;
8468 } else {
8469 if (yych == ' ')
8470 goto yy524;
8471 goto yy506;
8472 }
8473 } else {
8474 if (yych <= '<') {
8475 if (yych <= '/')
8476 goto yy513;
8477 goto yy506;
8478 } else {
8479 if (yych <= '=')
8480 goto yy526;
8481 if (yych <= '>')
8482 goto yy514;
8483 goto yy506;
8484 }
8485 }
8486 yy520:
8487 yyaccept = 1;
8488 marker = ++p;
8489 yych = *p;
8490 if (yybm[0 + yych] & 4) {
8491 goto yy514;
8492 }
8493 if (yych <= 0x08)
8494 goto yy522;
8495 if (yych <= '\n')
8496 goto yy520;
8497 if (yych <= '\v')
8498 goto yy522;
8499 if (yych <= '\r')
8500 goto yy523;
8501 yy522 : { return 7; }
8502 yy523:
8503 yych = *++p;
8504 goto yy522;
8505 yy524:
8506 ++p;
8507 yych = *p;
8508 if (yych <= '<') {
8509 if (yych <= ' ') {
8510 if (yych <= 0x08)
8511 goto yy506;
8512 if (yych <= '\r')
8513 goto yy524;
8514 if (yych <= 0x1F)
8515 goto yy506;
8516 goto yy524;
8517 } else {
8518 if (yych <= '/') {
8519 if (yych <= '.')
8520 goto yy506;
8521 goto yy513;
8522 } else {
8523 if (yych == ':')
8524 goto yy518;
8525 goto yy506;
8526 }
8527 }
8528 } else {
8529 if (yych <= 'Z') {
8530 if (yych <= '=')
8531 goto yy526;
8532 if (yych <= '>')
8533 goto yy514;
8534 if (yych <= '@')
8535 goto yy506;
8536 goto yy518;
8537 } else {
8538 if (yych <= '_') {
8539 if (yych <= '^')
8540 goto yy506;
8541 goto yy518;
8542 } else {
8543 if (yych <= '`')
8544 goto yy506;
8545 if (yych <= 'z')
8546 goto yy518;
8547 goto yy506;
8548 }
8549 }
8550 }
8551 yy526:
8552 ++p;
8553 yych = *p;
8554 if (yybm[0 + yych] & 32) {
8555 goto yy527;
8556 }
8557 if (yych <= 0xE0) {
8558 if (yych <= '"') {
8559 if (yych <= 0x00)
8560 goto yy506;
8561 if (yych <= ' ')
8562 goto yy529;
8563 goto yy530;
8564 } else {
8565 if (yych <= '\'')
8566 goto yy532;
8567 if (yych <= 0xC1)
8568 goto yy506;
8569 if (yych <= 0xDF)
8570 goto yy534;
8571 goto yy535;
8572 }
8573 } else {
8574 if (yych <= 0xEF) {
8575 if (yych == 0xED)
8576 goto yy537;
8577 goto yy536;
8578 } else {
8579 if (yych <= 0xF0)
8580 goto yy538;
8581 if (yych <= 0xF3)
8582 goto yy539;
8583 if (yych <= 0xF4)
8584 goto yy540;
8585 goto yy506;
8586 }
8587 }
8588 yy527:
8589 ++p;
8590 yych = *p;
8591 if (yybm[0 + yych] & 32) {
8592 goto yy527;
8593 }
8594 if (yych <= 0xE0) {
8595 if (yych <= '=') {
8596 if (yych <= 0x00)
8597 goto yy506;
8598 if (yych <= ' ')
8599 goto yy541;
8600 goto yy506;
8601 } else {
8602 if (yych <= '>')
8603 goto yy514;
8604 if (yych <= 0xC1)
8605 goto yy506;
8606 if (yych <= 0xDF)
8607 goto yy534;
8608 goto yy535;
8609 }
8610 } else {
8611 if (yych <= 0xEF) {
8612 if (yych == 0xED)
8613 goto yy537;
8614 goto yy536;
8615 } else {
8616 if (yych <= 0xF0)
8617 goto yy538;
8618 if (yych <= 0xF3)
8619 goto yy539;
8620 if (yych <= 0xF4)
8621 goto yy540;
8622 goto yy506;
8623 }
8624 }
8625 yy529:
8626 ++p;
8627 yych = *p;
8628 if (yybm[0 + yych] & 32) {
8629 goto yy527;
8630 }
8631 if (yych <= 0xDF) {
8632 if (yych <= '\'') {
8633 if (yych <= 0x00)
8634 goto yy506;
8635 if (yych <= ' ')
8636 goto yy543;
8637 if (yych >= '#')
8638 goto yy532;
8639 } else {
8640 if (yych == '>')
8641 goto yy514;
8642 if (yych <= 0xC1)
8643 goto yy506;
8644 goto yy534;
8645 }
8646 } else {
8647 if (yych <= 0xEF) {
8648 if (yych <= 0xE0)
8649 goto yy535;
8650 if (yych == 0xED)
8651 goto yy537;
8652 goto yy536;
8653 } else {
8654 if (yych <= 0xF0)
8655 goto yy538;
8656 if (yych <= 0xF3)
8657 goto yy539;
8658 if (yych <= 0xF4)
8659 goto yy540;
8660 goto yy506;
8661 }
8662 }
8663 yy530:
8664 ++p;
8665 yych = *p;
8666 if (yybm[0 + yych] & 64) {
8667 goto yy530;
8668 }
8669 if (yych <= 0xEC) {
8670 if (yych <= 0xC1) {
8671 if (yych <= 0x00)
8672 goto yy506;
8673 if (yych <= '"')
8674 goto yy545;
8675 goto yy506;
8676 } else {
8677 if (yych <= 0xDF)
8678 goto yy546;
8679 if (yych <= 0xE0)
8680 goto yy547;
8681 goto yy548;
8682 }
8683 } else {
8684 if (yych <= 0xF0) {
8685 if (yych <= 0xED)
8686 goto yy549;
8687 if (yych <= 0xEF)
8688 goto yy548;
8689 goto yy550;
8690 } else {
8691 if (yych <= 0xF3)
8692 goto yy551;
8693 if (yych <= 0xF4)
8694 goto yy552;
8695 goto yy506;
8696 }
8697 }
8698 yy532:
8699 ++p;
8700 yych = *p;
8701 if (yybm[0 + yych] & 128) {
8702 goto yy532;
8703 }
8704 if (yych <= 0xEC) {
8705 if (yych <= 0xC1) {
8706 if (yych <= 0x00)
8707 goto yy506;
8708 if (yych <= '\'')
8709 goto yy545;
8710 goto yy506;
8711 } else {
8712 if (yych <= 0xDF)
8713 goto yy553;
8714 if (yych <= 0xE0)
8715 goto yy554;
8716 goto yy555;
8717 }
8718 } else {
8719 if (yych <= 0xF0) {
8720 if (yych <= 0xED)
8721 goto yy556;
8722 if (yych <= 0xEF)
8723 goto yy555;
8724 goto yy557;
8725 } else {
8726 if (yych <= 0xF3)
8727 goto yy558;
8728 if (yych <= 0xF4)
8729 goto yy559;
8730 goto yy506;
8731 }
8732 }
8733 yy534:
8734 ++p;
8735 yych = *p;
8736 if (yych <= 0x7F)
8737 goto yy506;
8738 if (yych <= 0xBF)
8739 goto yy527;
8740 goto yy506;
8741 yy535:
8742 ++p;
8743 yych = *p;
8744 if (yych <= 0x9F)
8745 goto yy506;
8746 if (yych <= 0xBF)
8747 goto yy534;
8748 goto yy506;
8749 yy536:
8750 ++p;
8751 yych = *p;
8752 if (yych <= 0x7F)
8753 goto yy506;
8754 if (yych <= 0xBF)
8755 goto yy534;
8756 goto yy506;
8757 yy537:
8758 ++p;
8759 yych = *p;
8760 if (yych <= 0x7F)
8761 goto yy506;
8762 if (yych <= 0x9F)
8763 goto yy534;
8764 goto yy506;
8765 yy538:
8766 ++p;
8767 yych = *p;
8768 if (yych <= 0x8F)
8769 goto yy506;
8770 if (yych <= 0xBF)
8771 goto yy536;
8772 goto yy506;
8773 yy539:
8774 ++p;
8775 yych = *p;
8776 if (yych <= 0x7F)
8777 goto yy506;
8778 if (yych <= 0xBF)
8779 goto yy536;
8780 goto yy506;
8781 yy540:
8782 ++p;
8783 yych = *p;
8784 if (yych <= 0x7F)
8785 goto yy506;
8786 if (yych <= 0x8F)
8787 goto yy536;
8788 goto yy506;
8789 yy541:
8790 ++p;
8791 yych = *p;
8792 if (yych <= '@') {
8793 if (yych <= '"') {
8794 if (yych <= '\r') {
8795 if (yych <= 0x00)
8796 goto yy506;
8797 if (yych <= 0x08)
8798 goto yy527;
8799 goto yy541;
8800 } else {
8801 if (yych == ' ')
8802 goto yy541;
8803 if (yych <= '!')
8804 goto yy527;
8805 goto yy506;
8806 }
8807 } else {
8808 if (yych <= ':') {
8809 if (yych == '\'')
8810 goto yy506;
8811 if (yych <= '9')
8812 goto yy527;
8813 goto yy560;
8814 } else {
8815 if (yych <= ';')
8816 goto yy527;
8817 if (yych <= '=')
8818 goto yy506;
8819 if (yych <= '>')
8820 goto yy514;
8821 goto yy527;
8822 }
8823 }
8824 } else {
8825 if (yych <= 0xDF) {
8826 if (yych <= '`') {
8827 if (yych <= 'Z')
8828 goto yy560;
8829 if (yych <= '^')
8830 goto yy527;
8831 if (yych <= '_')
8832 goto yy560;
8833 goto yy506;
8834 } else {
8835 if (yych <= 'z')
8836 goto yy560;
8837 if (yych <= 0x7F)
8838 goto yy527;
8839 if (yych <= 0xC1)
8840 goto yy506;
8841 goto yy534;
8842 }
8843 } else {
8844 if (yych <= 0xEF) {
8845 if (yych <= 0xE0)
8846 goto yy535;
8847 if (yych == 0xED)
8848 goto yy537;
8849 goto yy536;
8850 } else {
8851 if (yych <= 0xF0)
8852 goto yy538;
8853 if (yych <= 0xF3)
8854 goto yy539;
8855 if (yych <= 0xF4)
8856 goto yy540;
8857 goto yy506;
8858 }
8859 }
8860 }
8861 yy543:
8862 ++p;
8863 yych = *p;
8864 if (yych <= '@') {
8865 if (yych <= '"') {
8866 if (yych <= '\r') {
8867 if (yych <= 0x00)
8868 goto yy506;
8869 if (yych <= 0x08)
8870 goto yy527;
8871 goto yy543;
8872 } else {
8873 if (yych == ' ')
8874 goto yy543;
8875 if (yych <= '!')
8876 goto yy527;
8877 goto yy530;
8878 }
8879 } else {
8880 if (yych <= ':') {
8881 if (yych == '\'')
8882 goto yy532;
8883 if (yych <= '9')
8884 goto yy527;
8885 goto yy560;
8886 } else {
8887 if (yych <= ';')
8888 goto yy527;
8889 if (yych <= '=')
8890 goto yy506;
8891 if (yych <= '>')
8892 goto yy514;
8893 goto yy527;
8894 }
8895 }
8896 } else {
8897 if (yych <= 0xDF) {
8898 if (yych <= '`') {
8899 if (yych <= 'Z')
8900 goto yy560;
8901 if (yych <= '^')
8902 goto yy527;
8903 if (yych <= '_')
8904 goto yy560;
8905 goto yy506;
8906 } else {
8907 if (yych <= 'z')
8908 goto yy560;
8909 if (yych <= 0x7F)
8910 goto yy527;
8911 if (yych <= 0xC1)
8912 goto yy506;
8913 goto yy534;
8914 }
8915 } else {
8916 if (yych <= 0xEF) {
8917 if (yych <= 0xE0)
8918 goto yy535;
8919 if (yych == 0xED)
8920 goto yy537;
8921 goto yy536;
8922 } else {
8923 if (yych <= 0xF0)
8924 goto yy538;
8925 if (yych <= 0xF3)
8926 goto yy539;
8927 if (yych <= 0xF4)
8928 goto yy540;
8929 goto yy506;
8930 }
8931 }
8932 }
8933 yy545:
8934 ++p;
8935 yych = *p;
8936 if (yybm[0 + yych] & 2) {
8937 goto yy511;
8938 }
8939 if (yych == '/')
8940 goto yy513;
8941 if (yych == '>')
8942 goto yy514;
8943 goto yy506;
8944 yy546:
8945 ++p;
8946 yych = *p;
8947 if (yych <= 0x7F)
8948 goto yy506;
8949 if (yych <= 0xBF)
8950 goto yy530;
8951 goto yy506;
8952 yy547:
8953 ++p;
8954 yych = *p;
8955 if (yych <= 0x9F)
8956 goto yy506;
8957 if (yych <= 0xBF)
8958 goto yy546;
8959 goto yy506;
8960 yy548:
8961 ++p;
8962 yych = *p;
8963 if (yych <= 0x7F)
8964 goto yy506;
8965 if (yych <= 0xBF)
8966 goto yy546;
8967 goto yy506;
8968 yy549:
8969 ++p;
8970 yych = *p;
8971 if (yych <= 0x7F)
8972 goto yy506;
8973 if (yych <= 0x9F)
8974 goto yy546;
8975 goto yy506;
8976 yy550:
8977 ++p;
8978 yych = *p;
8979 if (yych <= 0x8F)
8980 goto yy506;
8981 if (yych <= 0xBF)
8982 goto yy548;
8983 goto yy506;
8984 yy551:
8985 ++p;
8986 yych = *p;
8987 if (yych <= 0x7F)
8988 goto yy506;
8989 if (yych <= 0xBF)
8990 goto yy548;
8991 goto yy506;
8992 yy552:
8993 ++p;
8994 yych = *p;
8995 if (yych <= 0x7F)
8996 goto yy506;
8997 if (yych <= 0x8F)
8998 goto yy548;
8999 goto yy506;
9000 yy553:
9001 ++p;
9002 yych = *p;
9003 if (yych <= 0x7F)
9004 goto yy506;
9005 if (yych <= 0xBF)
9006 goto yy532;
9007 goto yy506;
9008 yy554:
9009 ++p;
9010 yych = *p;
9011 if (yych <= 0x9F)
9012 goto yy506;
9013 if (yych <= 0xBF)
9014 goto yy553;
9015 goto yy506;
9016 yy555:
9017 ++p;
9018 yych = *p;
9019 if (yych <= 0x7F)
9020 goto yy506;
9021 if (yych <= 0xBF)
9022 goto yy553;
9023 goto yy506;
9024 yy556:
9025 ++p;
9026 yych = *p;
9027 if (yych <= 0x7F)
9028 goto yy506;
9029 if (yych <= 0x9F)
9030 goto yy553;
9031 goto yy506;
9032 yy557:
9033 ++p;
9034 yych = *p;
9035 if (yych <= 0x8F)
9036 goto yy506;
9037 if (yych <= 0xBF)
9038 goto yy555;
9039 goto yy506;
9040 yy558:
9041 ++p;
9042 yych = *p;
9043 if (yych <= 0x7F)
9044 goto yy506;
9045 if (yych <= 0xBF)
9046 goto yy555;
9047 goto yy506;
9048 yy559:
9049 ++p;
9050 yych = *p;
9051 if (yych <= 0x7F)
9052 goto yy506;
9053 if (yych <= 0x8F)
9054 goto yy555;
9055 goto yy506;
9056 yy560:
9057 ++p;
9058 yych = *p;
9059 if (yych <= '>') {
9060 if (yych <= '&') {
9061 if (yych <= 0x1F) {
9062 if (yych <= 0x00)
9063 goto yy506;
9064 if (yych <= 0x08)
9065 goto yy527;
9066 if (yych >= 0x0E)
9067 goto yy527;
9068 } else {
9069 if (yych <= ' ')
9070 goto yy562;
9071 if (yych == '"')
9072 goto yy506;
9073 goto yy527;
9074 }
9075 } else {
9076 if (yych <= '/') {
9077 if (yych <= '\'')
9078 goto yy506;
9079 if (yych <= ',')
9080 goto yy527;
9081 if (yych <= '.')
9082 goto yy560;
9083 goto yy527;
9084 } else {
9085 if (yych <= ';') {
9086 if (yych <= ':')
9087 goto yy560;
9088 goto yy527;
9089 } else {
9090 if (yych <= '<')
9091 goto yy506;
9092 if (yych <= '=')
9093 goto yy526;
9094 goto yy514;
9095 }
9096 }
9097 }
9098 } else {
9099 if (yych <= 0xC1) {
9100 if (yych <= '_') {
9101 if (yych <= '@')
9102 goto yy527;
9103 if (yych <= 'Z')
9104 goto yy560;
9105 if (yych <= '^')
9106 goto yy527;
9107 goto yy560;
9108 } else {
9109 if (yych <= '`')
9110 goto yy506;
9111 if (yych <= 'z')
9112 goto yy560;
9113 if (yych <= 0x7F)
9114 goto yy527;
9115 goto yy506;
9116 }
9117 } else {
9118 if (yych <= 0xED) {
9119 if (yych <= 0xDF)
9120 goto yy534;
9121 if (yych <= 0xE0)
9122 goto yy535;
9123 if (yych <= 0xEC)
9124 goto yy536;
9125 goto yy537;
9126 } else {
9127 if (yych <= 0xF0) {
9128 if (yych <= 0xEF)
9129 goto yy536;
9130 goto yy538;
9131 } else {
9132 if (yych <= 0xF3)
9133 goto yy539;
9134 if (yych <= 0xF4)
9135 goto yy540;
9136 goto yy506;
9137 }
9138 }
9139 }
9140 }
9141 yy562:
9142 ++p;
9143 yych = *p;
9144 if (yych <= '@') {
9145 if (yych <= '&') {
9146 if (yych <= 0x1F) {
9147 if (yych <= 0x00)
9148 goto yy506;
9149 if (yych <= 0x08)
9150 goto yy527;
9151 if (yych <= '\r')
9152 goto yy562;
9153 goto yy527;
9154 } else {
9155 if (yych <= ' ')
9156 goto yy562;
9157 if (yych == '"')
9158 goto yy506;
9159 goto yy527;
9160 }
9161 } else {
9162 if (yych <= ';') {
9163 if (yych <= '\'')
9164 goto yy506;
9165 if (yych == ':')
9166 goto yy560;
9167 goto yy527;
9168 } else {
9169 if (yych <= '<')
9170 goto yy506;
9171 if (yych <= '=')
9172 goto yy526;
9173 if (yych <= '>')
9174 goto yy514;
9175 goto yy527;
9176 }
9177 }
9178 } else {
9179 if (yych <= 0xDF) {
9180 if (yych <= '`') {
9181 if (yych <= 'Z')
9182 goto yy560;
9183 if (yych <= '^')
9184 goto yy527;
9185 if (yych <= '_')
9186 goto yy560;
9187 goto yy506;
9188 } else {
9189 if (yych <= 'z')
9190 goto yy560;
9191 if (yych <= 0x7F)
9192 goto yy527;
9193 if (yych <= 0xC1)
9194 goto yy506;
9195 goto yy534;
9196 }
9197 } else {
9198 if (yych <= 0xEF) {
9199 if (yych <= 0xE0)
9200 goto yy535;
9201 if (yych == 0xED)
9202 goto yy537;
9203 goto yy536;
9204 } else {
9205 if (yych <= 0xF0)
9206 goto yy538;
9207 if (yych <= 0xF3)
9208 goto yy539;
9209 if (yych <= 0xF4)
9210 goto yy540;
9211 goto yy506;
9212 }
9213 }
9214 }
9215 }
9216 }
9217
9218 // Try to match an HTML block end line of type 1
9219 bufsize_t _scan_html_block_end_1(const unsigned char *p) {
9220 const unsigned char *marker = NULL;
9221 const unsigned char *start = p;
9222
9223 {
9224 unsigned char yych;
9225 unsigned int yyaccept = 0;
9226 static const unsigned char yybm[] = {
9227 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64,
9228 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
9229 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
9230 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
9231 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
9232 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
9233 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
9234 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9235 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9236 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9237 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9238 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9239 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9240 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
9241 0, 0, 0, 0,
9242 };
9243 yych = *p;
9244 if (yych <= 0xDF) {
9245 if (yych <= ';') {
9246 if (yych == '\n')
9247 goto yy568;
9248 } else {
9249 if (yych <= '<')
9250 goto yy569;
9251 if (yych <= 0x7F)
9252 goto yy566;
9253 if (yych <= 0xC1)
9254 goto yy568;
9255 goto yy570;
9256 }
9257 } else {
9258 if (yych <= 0xEF) {
9259 if (yych <= 0xE0)
9260 goto yy571;
9261 if (yych == 0xED)
9262 goto yy573;
9263 goto yy572;
9264 } else {
9265 if (yych <= 0xF0)
9266 goto yy574;
9267 if (yych <= 0xF3)
9268 goto yy575;
9269 if (yych <= 0xF4)
9270 goto yy576;
9271 goto yy568;
9272 }
9273 }
9274 yy566:
9275 yyaccept = 0;
9276 yych = *(marker = ++p);
9277 if (yych <= 0x7F) {
9278 if (yych != '\n')
9279 goto yy578;
9280 } else {
9281 if (yych <= 0xC1)
9282 goto yy567;
9283 if (yych <= 0xF4)
9284 goto yy578;
9285 }
9286 yy567 : { return 0; }
9287 yy568:
9288 yych = *++p;
9289 goto yy567;
9290 yy569:
9291 yyaccept = 0;
9292 yych = *(marker = ++p);
9293 if (yych <= '/') {
9294 if (yych == '\n')
9295 goto yy567;
9296 if (yych <= '.')
9297 goto yy578;
9298 goto yy589;
9299 } else {
9300 if (yych <= 0x7F)
9301 goto yy578;
9302 if (yych <= 0xC1)
9303 goto yy567;
9304 if (yych <= 0xF4)
9305 goto yy578;
9306 goto yy567;
9307 }
9308 yy570:
9309 yyaccept = 0;
9310 yych = *(marker = ++p);
9311 if (yych <= 0x7F)
9312 goto yy567;
9313 if (yych <= 0xBF)
9314 goto yy577;
9315 goto yy567;
9316 yy571:
9317 yyaccept = 0;
9318 yych = *(marker = ++p);
9319 if (yych <= 0x9F)
9320 goto yy567;
9321 if (yych <= 0xBF)
9322 goto yy582;
9323 goto yy567;
9324 yy572:
9325 yyaccept = 0;
9326 yych = *(marker = ++p);
9327 if (yych <= 0x7F)
9328 goto yy567;
9329 if (yych <= 0xBF)
9330 goto yy582;
9331 goto yy567;
9332 yy573:
9333 yyaccept = 0;
9334 yych = *(marker = ++p);
9335 if (yych <= 0x7F)
9336 goto yy567;
9337 if (yych <= 0x9F)
9338 goto yy582;
9339 goto yy567;
9340 yy574:
9341 yyaccept = 0;
9342 yych = *(marker = ++p);
9343 if (yych <= 0x8F)
9344 goto yy567;
9345 if (yych <= 0xBF)
9346 goto yy584;
9347 goto yy567;
9348 yy575:
9349 yyaccept = 0;
9350 yych = *(marker = ++p);
9351 if (yych <= 0x7F)
9352 goto yy567;
9353 if (yych <= 0xBF)
9354 goto yy584;
9355 goto yy567;
9356 yy576:
9357 yyaccept = 0;
9358 yych = *(marker = ++p);
9359 if (yych <= 0x7F)
9360 goto yy567;
9361 if (yych <= 0x8F)
9362 goto yy584;
9363 goto yy567;
9364 yy577:
9365 ++p;
9366 yych = *p;
9367 yy578:
9368 if (yybm[0 + yych] & 64) {
9369 goto yy577;
9370 }
9371 if (yych <= 0xEC) {
9372 if (yych <= 0xC1) {
9373 if (yych <= '\n')
9374 goto yy579;
9375 if (yych <= '<')
9376 goto yy580;
9377 } else {
9378 if (yych <= 0xDF)
9379 goto yy582;
9380 if (yych <= 0xE0)
9381 goto yy583;
9382 goto yy584;
9383 }
9384 } else {
9385 if (yych <= 0xF0) {
9386 if (yych <= 0xED)
9387 goto yy585;
9388 if (yych <= 0xEF)
9389 goto yy584;
9390 goto yy586;
9391 } else {
9392 if (yych <= 0xF3)
9393 goto yy587;
9394 if (yych <= 0xF4)
9395 goto yy588;
9396 }
9397 }
9398 yy579:
9399 p = marker;
9400 if (yyaccept == 0) {
9401 goto yy567;
9402 } else {
9403 goto yy599;
9404 }
9405 yy580:
9406 ++p;
9407 yych = *p;
9408 if (yybm[0 + yych] & 128) {
9409 goto yy580;
9410 }
9411 if (yych <= 0xDF) {
9412 if (yych <= '.') {
9413 if (yych == '\n')
9414 goto yy579;
9415 goto yy577;
9416 } else {
9417 if (yych <= '/')
9418 goto yy589;
9419 if (yych <= 0x7F)
9420 goto yy577;
9421 if (yych <= 0xC1)
9422 goto yy579;
9423 }
9424 } else {
9425 if (yych <= 0xEF) {
9426 if (yych <= 0xE0)
9427 goto yy583;
9428 if (yych == 0xED)
9429 goto yy585;
9430 goto yy584;
9431 } else {
9432 if (yych <= 0xF0)
9433 goto yy586;
9434 if (yych <= 0xF3)
9435 goto yy587;
9436 if (yych <= 0xF4)
9437 goto yy588;
9438 goto yy579;
9439 }
9440 }
9441 yy582:
9442 ++p;
9443 yych = *p;
9444 if (yych <= 0x7F)
9445 goto yy579;
9446 if (yych <= 0xBF)
9447 goto yy577;
9448 goto yy579;
9449 yy583:
9450 ++p;
9451 yych = *p;
9452 if (yych <= 0x9F)
9453 goto yy579;
9454 if (yych <= 0xBF)
9455 goto yy582;
9456 goto yy579;
9457 yy584:
9458 ++p;
9459 yych = *p;
9460 if (yych <= 0x7F)
9461 goto yy579;
9462 if (yych <= 0xBF)
9463 goto yy582;
9464 goto yy579;
9465 yy585:
9466 ++p;
9467 yych = *p;
9468 if (yych <= 0x7F)
9469 goto yy579;
9470 if (yych <= 0x9F)
9471 goto yy582;
9472 goto yy579;
9473 yy586:
9474 ++p;
9475 yych = *p;
9476 if (yych <= 0x8F)
9477 goto yy579;
9478 if (yych <= 0xBF)
9479 goto yy584;
9480 goto yy579;
9481 yy587:
9482 ++p;
9483 yych = *p;
9484 if (yych <= 0x7F)
9485 goto yy579;
9486 if (yych <= 0xBF)
9487 goto yy584;
9488 goto yy579;
9489 yy588:
9490 ++p;
9491 yych = *p;
9492 if (yych <= 0x7F)
9493 goto yy579;
9494 if (yych <= 0x8F)
9495 goto yy584;
9496 goto yy579;
9497 yy589:
9498 ++p;
9499 yych = *p;
9500 if (yybm[0 + yych] & 128) {
9501 goto yy580;
9502 }
9503 if (yych <= 's') {
9504 if (yych <= 'R') {
9505 if (yych <= '\n') {
9506 if (yych <= '\t')
9507 goto yy577;
9508 goto yy579;
9509 } else {
9510 if (yych != 'P')
9511 goto yy577;
9512 }
9513 } else {
9514 if (yych <= 'o') {
9515 if (yych <= 'S')
9516 goto yy591;
9517 goto yy577;
9518 } else {
9519 if (yych <= 'p')
9520 goto yy590;
9521 if (yych <= 'r')
9522 goto yy577;
9523 goto yy591;
9524 }
9525 }
9526 } else {
9527 if (yych <= 0xEC) {
9528 if (yych <= 0xC1) {
9529 if (yych <= 0x7F)
9530 goto yy577;
9531 goto yy579;
9532 } else {
9533 if (yych <= 0xDF)
9534 goto yy582;
9535 if (yych <= 0xE0)
9536 goto yy583;
9537 goto yy584;
9538 }
9539 } else {
9540 if (yych <= 0xF0) {
9541 if (yych <= 0xED)
9542 goto yy585;
9543 if (yych <= 0xEF)
9544 goto yy584;
9545 goto yy586;
9546 } else {
9547 if (yych <= 0xF3)
9548 goto yy587;
9549 if (yych <= 0xF4)
9550 goto yy588;
9551 goto yy579;
9552 }
9553 }
9554 }
9555 yy590:
9556 ++p;
9557 yych = *p;
9558 if (yybm[0 + yych] & 128) {
9559 goto yy580;
9560 }
9561 if (yych <= 0xC1) {
9562 if (yych <= 'R') {
9563 if (yych == '\n')
9564 goto yy579;
9565 if (yych <= 'Q')
9566 goto yy577;
9567 goto yy592;
9568 } else {
9569 if (yych == 'r')
9570 goto yy592;
9571 if (yych <= 0x7F)
9572 goto yy577;
9573 goto yy579;
9574 }
9575 } else {
9576 if (yych <= 0xED) {
9577 if (yych <= 0xDF)
9578 goto yy582;
9579 if (yych <= 0xE0)
9580 goto yy583;
9581 if (yych <= 0xEC)
9582 goto yy584;
9583 goto yy585;
9584 } else {
9585 if (yych <= 0xF0) {
9586 if (yych <= 0xEF)
9587 goto yy584;
9588 goto yy586;
9589 } else {
9590 if (yych <= 0xF3)
9591 goto yy587;
9592 if (yych <= 0xF4)
9593 goto yy588;
9594 goto yy579;
9595 }
9596 }
9597 }
9598 yy591:
9599 ++p;
9600 yych = *p;
9601 if (yybm[0 + yych] & 128) {
9602 goto yy580;
9603 }
9604 if (yych <= 't') {
9605 if (yych <= 'S') {
9606 if (yych <= '\n') {
9607 if (yych <= '\t')
9608 goto yy577;
9609 goto yy579;
9610 } else {
9611 if (yych == 'C')
9612 goto yy593;
9613 goto yy577;
9614 }
9615 } else {
9616 if (yych <= 'b') {
9617 if (yych <= 'T')
9618 goto yy594;
9619 goto yy577;
9620 } else {
9621 if (yych <= 'c')
9622 goto yy593;
9623 if (yych <= 's')
9624 goto yy577;
9625 goto yy594;
9626 }
9627 }
9628 } else {
9629 if (yych <= 0xEC) {
9630 if (yych <= 0xC1) {
9631 if (yych <= 0x7F)
9632 goto yy577;
9633 goto yy579;
9634 } else {
9635 if (yych <= 0xDF)
9636 goto yy582;
9637 if (yych <= 0xE0)
9638 goto yy583;
9639 goto yy584;
9640 }
9641 } else {
9642 if (yych <= 0xF0) {
9643 if (yych <= 0xED)
9644 goto yy585;
9645 if (yych <= 0xEF)
9646 goto yy584;
9647 goto yy586;
9648 } else {
9649 if (yych <= 0xF3)
9650 goto yy587;
9651 if (yych <= 0xF4)
9652 goto yy588;
9653 goto yy579;
9654 }
9655 }
9656 }
9657 yy592:
9658 ++p;
9659 yych = *p;
9660 if (yybm[0 + yych] & 128) {
9661 goto yy580;
9662 }
9663 if (yych <= 0xC1) {
9664 if (yych <= 'E') {
9665 if (yych == '\n')
9666 goto yy579;
9667 if (yych <= 'D')
9668 goto yy577;
9669 goto yy595;
9670 } else {
9671 if (yych == 'e')
9672 goto yy595;
9673 if (yych <= 0x7F)
9674 goto yy577;
9675 goto yy579;
9676 }
9677 } else {
9678 if (yych <= 0xED) {
9679 if (yych <= 0xDF)
9680 goto yy582;
9681 if (yych <= 0xE0)
9682 goto yy583;
9683 if (yych <= 0xEC)
9684 goto yy584;
9685 goto yy585;
9686 } else {
9687 if (yych <= 0xF0) {
9688 if (yych <= 0xEF)
9689 goto yy584;
9690 goto yy586;
9691 } else {
9692 if (yych <= 0xF3)
9693 goto yy587;
9694 if (yych <= 0xF4)
9695 goto yy588;
9696 goto yy579;
9697 }
9698 }
9699 }
9700 yy593:
9701 ++p;
9702 yych = *p;
9703 if (yybm[0 + yych] & 128) {
9704 goto yy580;
9705 }
9706 if (yych <= 0xC1) {
9707 if (yych <= 'R') {
9708 if (yych == '\n')
9709 goto yy579;
9710 if (yych <= 'Q')
9711 goto yy577;
9712 goto yy596;
9713 } else {
9714 if (yych == 'r')
9715 goto yy596;
9716 if (yych <= 0x7F)
9717 goto yy577;
9718 goto yy579;
9719 }
9720 } else {
9721 if (yych <= 0xED) {
9722 if (yych <= 0xDF)
9723 goto yy582;
9724 if (yych <= 0xE0)
9725 goto yy583;
9726 if (yych <= 0xEC)
9727 goto yy584;
9728 goto yy585;
9729 } else {
9730 if (yych <= 0xF0) {
9731 if (yych <= 0xEF)
9732 goto yy584;
9733 goto yy586;
9734 } else {
9735 if (yych <= 0xF3)
9736 goto yy587;
9737 if (yych <= 0xF4)
9738 goto yy588;
9739 goto yy579;
9740 }
9741 }
9742 }
9743 yy594:
9744 ++p;
9745 yych = *p;
9746 if (yybm[0 + yych] & 128) {
9747 goto yy580;
9748 }
9749 if (yych <= 0xC1) {
9750 if (yych <= 'Y') {
9751 if (yych == '\n')
9752 goto yy579;
9753 if (yych <= 'X')
9754 goto yy577;
9755 goto yy597;
9756 } else {
9757 if (yych == 'y')
9758 goto yy597;
9759 if (yych <= 0x7F)
9760 goto yy577;
9761 goto yy579;
9762 }
9763 } else {
9764 if (yych <= 0xED) {
9765 if (yych <= 0xDF)
9766 goto yy582;
9767 if (yych <= 0xE0)
9768 goto yy583;
9769 if (yych <= 0xEC)
9770 goto yy584;
9771 goto yy585;
9772 } else {
9773 if (yych <= 0xF0) {
9774 if (yych <= 0xEF)
9775 goto yy584;
9776 goto yy586;
9777 } else {
9778 if (yych <= 0xF3)
9779 goto yy587;
9780 if (yych <= 0xF4)
9781 goto yy588;
9782 goto yy579;
9783 }
9784 }
9785 }
9786 yy595:
9787 ++p;
9788 yych = *p;
9789 if (yybm[0 + yych] & 128) {
9790 goto yy580;
9791 }
9792 if (yych <= 0xDF) {
9793 if (yych <= '=') {
9794 if (yych == '\n')
9795 goto yy579;
9796 goto yy577;
9797 } else {
9798 if (yych <= '>')
9799 goto yy598;
9800 if (yych <= 0x7F)
9801 goto yy577;
9802 if (yych <= 0xC1)
9803 goto yy579;
9804 goto yy582;
9805 }
9806 } else {
9807 if (yych <= 0xEF) {
9808 if (yych <= 0xE0)
9809 goto yy583;
9810 if (yych == 0xED)
9811 goto yy585;
9812 goto yy584;
9813 } else {
9814 if (yych <= 0xF0)
9815 goto yy586;
9816 if (yych <= 0xF3)
9817 goto yy587;
9818 if (yych <= 0xF4)
9819 goto yy588;
9820 goto yy579;
9821 }
9822 }
9823 yy596:
9824 ++p;
9825 yych = *p;
9826 if (yybm[0 + yych] & 128) {
9827 goto yy580;
9828 }
9829 if (yych <= 0xC1) {
9830 if (yych <= 'I') {
9831 if (yych == '\n')
9832 goto yy579;
9833 if (yych <= 'H')
9834 goto yy577;
9835 goto yy600;
9836 } else {
9837 if (yych == 'i')
9838 goto yy600;
9839 if (yych <= 0x7F)
9840 goto yy577;
9841 goto yy579;
9842 }
9843 } else {
9844 if (yych <= 0xED) {
9845 if (yych <= 0xDF)
9846 goto yy582;
9847 if (yych <= 0xE0)
9848 goto yy583;
9849 if (yych <= 0xEC)
9850 goto yy584;
9851 goto yy585;
9852 } else {
9853 if (yych <= 0xF0) {
9854 if (yych <= 0xEF)
9855 goto yy584;
9856 goto yy586;
9857 } else {
9858 if (yych <= 0xF3)
9859 goto yy587;
9860 if (yych <= 0xF4)
9861 goto yy588;
9862 goto yy579;
9863 }
9864 }
9865 }
9866 yy597:
9867 ++p;
9868 yych = *p;
9869 if (yybm[0 + yych] & 128) {
9870 goto yy580;
9871 }
9872 if (yych <= 0xC1) {
9873 if (yych <= 'L') {
9874 if (yych == '\n')
9875 goto yy579;
9876 if (yych <= 'K')
9877 goto yy577;
9878 goto yy592;
9879 } else {
9880 if (yych == 'l')
9881 goto yy592;
9882 if (yych <= 0x7F)
9883 goto yy577;
9884 goto yy579;
9885 }
9886 } else {
9887 if (yych <= 0xED) {
9888 if (yych <= 0xDF)
9889 goto yy582;
9890 if (yych <= 0xE0)
9891 goto yy583;
9892 if (yych <= 0xEC)
9893 goto yy584;
9894 goto yy585;
9895 } else {
9896 if (yych <= 0xF0) {
9897 if (yych <= 0xEF)
9898 goto yy584;
9899 goto yy586;
9900 } else {
9901 if (yych <= 0xF3)
9902 goto yy587;
9903 if (yych <= 0xF4)
9904 goto yy588;
9905 goto yy579;
9906 }
9907 }
9908 }
9909 yy598:
9910 yyaccept = 1;
9911 marker = ++p;
9912 yych = *p;
9913 if (yybm[0 + yych] & 64) {
9914 goto yy577;
9915 }
9916 if (yych <= 0xEC) {
9917 if (yych <= 0xC1) {
9918 if (yych <= '\n')
9919 goto yy599;
9920 if (yych <= '<')
9921 goto yy580;
9922 } else {
9923 if (yych <= 0xDF)
9924 goto yy582;
9925 if (yych <= 0xE0)
9926 goto yy583;
9927 goto yy584;
9928 }
9929 } else {
9930 if (yych <= 0xF0) {
9931 if (yych <= 0xED)
9932 goto yy585;
9933 if (yych <= 0xEF)
9934 goto yy584;
9935 goto yy586;
9936 } else {
9937 if (yych <= 0xF3)
9938 goto yy587;
9939 if (yych <= 0xF4)
9940 goto yy588;
9941 }
9942 }
9943 yy599 : { return (bufsize_t)(p - start); }
9944 yy600:
9945 ++p;
9946 yych = *p;
9947 if (yybm[0 + yych] & 128) {
9948 goto yy580;
9949 }
9950 if (yych <= 0xC1) {
9951 if (yych <= 'P') {
9952 if (yych == '\n')
9953 goto yy579;
9954 if (yych <= 'O')
9955 goto yy577;
9956 } else {
9957 if (yych == 'p')
9958 goto yy601;
9959 if (yych <= 0x7F)
9960 goto yy577;
9961 goto yy579;
9962 }
9963 } else {
9964 if (yych <= 0xED) {
9965 if (yych <= 0xDF)
9966 goto yy582;
9967 if (yych <= 0xE0)
9968 goto yy583;
9969 if (yych <= 0xEC)
9970 goto yy584;
9971 goto yy585;
9972 } else {
9973 if (yych <= 0xF0) {
9974 if (yych <= 0xEF)
9975 goto yy584;
9976 goto yy586;
9977 } else {
9978 if (yych <= 0xF3)
9979 goto yy587;
9980 if (yych <= 0xF4)
9981 goto yy588;
9982 goto yy579;
9983 }
9984 }
9985 }
9986 yy601:
9987 ++p;
9988 yych = *p;
9989 if (yybm[0 + yych] & 128) {
9990 goto yy580;
9991 }
9992 if (yych <= 0xC1) {
9993 if (yych <= 'T') {
9994 if (yych == '\n')
9995 goto yy579;
9996 if (yych <= 'S')
9997 goto yy577;
9998 goto yy595;
9999 } else {
10000 if (yych == 't')
10001 goto yy595;
10002 if (yych <= 0x7F)
10003 goto yy577;
10004 goto yy579;
10005 }
10006 } else {
10007 if (yych <= 0xED) {
10008 if (yych <= 0xDF)
10009 goto yy582;
10010 if (yych <= 0xE0)
10011 goto yy583;
10012 if (yych <= 0xEC)
10013 goto yy584;
10014 goto yy585;
10015 } else {
10016 if (yych <= 0xF0) {
10017 if (yych <= 0xEF)
10018 goto yy584;
10019 goto yy586;
10020 } else {
10021 if (yych <= 0xF3)
10022 goto yy587;
10023 if (yych <= 0xF4)
10024 goto yy588;
10025 goto yy579;
10026 }
10027 }
10028 }
10029 }
10030 }
10031
10032 // Try to match an HTML block end line of type 2
10033 bufsize_t _scan_html_block_end_2(const unsigned char *p) {
10034 const unsigned char *marker = NULL;
10035 const unsigned char *start = p;
10036
10037 {
10038 unsigned char yych;
10039 unsigned int yyaccept = 0;
10040 static const unsigned char yybm[] = {
10041 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64,
10042 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10043 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64,
10044 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10045 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10046 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10047 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10048 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10049 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10050 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10051 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10052 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10053 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10054 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10055 0, 0, 0, 0,
10056 };
10057 yych = *p;
10058 if (yych <= 0xDF) {
10059 if (yych <= ',') {
10060 if (yych == '\n')
10061 goto yy606;
10062 } else {
10063 if (yych <= '-')
10064 goto yy607;
10065 if (yych <= 0x7F)
10066 goto yy604;
10067 if (yych <= 0xC1)
10068 goto yy606;
10069 goto yy608;
10070 }
10071 } else {
10072 if (yych <= 0xEF) {
10073 if (yych <= 0xE0)
10074 goto yy609;
10075 if (yych == 0xED)
10076 goto yy611;
10077 goto yy610;
10078 } else {
10079 if (yych <= 0xF0)
10080 goto yy612;
10081 if (yych <= 0xF3)
10082 goto yy613;
10083 if (yych <= 0xF4)
10084 goto yy614;
10085 goto yy606;
10086 }
10087 }
10088 yy604:
10089 yyaccept = 0;
10090 yych = *(marker = ++p);
10091 if (yych <= 0x7F) {
10092 if (yych != '\n')
10093 goto yy616;
10094 } else {
10095 if (yych <= 0xC1)
10096 goto yy605;
10097 if (yych <= 0xF4)
10098 goto yy616;
10099 }
10100 yy605 : { return 0; }
10101 yy606:
10102 yych = *++p;
10103 goto yy605;
10104 yy607:
10105 yyaccept = 0;
10106 yych = *(marker = ++p);
10107 if (yybm[0 + yych] & 128) {
10108 goto yy626;
10109 }
10110 if (yych <= 0x7F) {
10111 if (yych == '\n')
10112 goto yy605;
10113 goto yy616;
10114 } else {
10115 if (yych <= 0xC1)
10116 goto yy605;
10117 if (yych <= 0xF4)
10118 goto yy616;
10119 goto yy605;
10120 }
10121 yy608:
10122 yyaccept = 0;
10123 yych = *(marker = ++p);
10124 if (yych <= 0x7F)
10125 goto yy605;
10126 if (yych <= 0xBF)
10127 goto yy615;
10128 goto yy605;
10129 yy609:
10130 yyaccept = 0;
10131 yych = *(marker = ++p);
10132 if (yych <= 0x9F)
10133 goto yy605;
10134 if (yych <= 0xBF)
10135 goto yy619;
10136 goto yy605;
10137 yy610:
10138 yyaccept = 0;
10139 yych = *(marker = ++p);
10140 if (yych <= 0x7F)
10141 goto yy605;
10142 if (yych <= 0xBF)
10143 goto yy619;
10144 goto yy605;
10145 yy611:
10146 yyaccept = 0;
10147 yych = *(marker = ++p);
10148 if (yych <= 0x7F)
10149 goto yy605;
10150 if (yych <= 0x9F)
10151 goto yy619;
10152 goto yy605;
10153 yy612:
10154 yyaccept = 0;
10155 yych = *(marker = ++p);
10156 if (yych <= 0x8F)
10157 goto yy605;
10158 if (yych <= 0xBF)
10159 goto yy621;
10160 goto yy605;
10161 yy613:
10162 yyaccept = 0;
10163 yych = *(marker = ++p);
10164 if (yych <= 0x7F)
10165 goto yy605;
10166 if (yych <= 0xBF)
10167 goto yy621;
10168 goto yy605;
10169 yy614:
10170 yyaccept = 0;
10171 yych = *(marker = ++p);
10172 if (yych <= 0x7F)
10173 goto yy605;
10174 if (yych <= 0x8F)
10175 goto yy621;
10176 goto yy605;
10177 yy615:
10178 ++p;
10179 yych = *p;
10180 yy616:
10181 if (yybm[0 + yych] & 64) {
10182 goto yy615;
10183 }
10184 if (yych <= 0xEC) {
10185 if (yych <= 0xC1) {
10186 if (yych <= '\n')
10187 goto yy617;
10188 if (yych <= '-')
10189 goto yy618;
10190 } else {
10191 if (yych <= 0xDF)
10192 goto yy619;
10193 if (yych <= 0xE0)
10194 goto yy620;
10195 goto yy621;
10196 }
10197 } else {
10198 if (yych <= 0xF0) {
10199 if (yych <= 0xED)
10200 goto yy622;
10201 if (yych <= 0xEF)
10202 goto yy621;
10203 goto yy623;
10204 } else {
10205 if (yych <= 0xF3)
10206 goto yy624;
10207 if (yych <= 0xF4)
10208 goto yy625;
10209 }
10210 }
10211 yy617:
10212 p = marker;
10213 if (yyaccept == 0) {
10214 goto yy605;
10215 } else {
10216 goto yy629;
10217 }
10218 yy618:
10219 ++p;
10220 yych = *p;
10221 if (yybm[0 + yych] & 64) {
10222 goto yy615;
10223 }
10224 if (yych <= 0xEC) {
10225 if (yych <= 0xC1) {
10226 if (yych <= '\n')
10227 goto yy617;
10228 if (yych <= '-')
10229 goto yy626;
10230 goto yy617;
10231 } else {
10232 if (yych <= 0xDF)
10233 goto yy619;
10234 if (yych <= 0xE0)
10235 goto yy620;
10236 goto yy621;
10237 }
10238 } else {
10239 if (yych <= 0xF0) {
10240 if (yych <= 0xED)
10241 goto yy622;
10242 if (yych <= 0xEF)
10243 goto yy621;
10244 goto yy623;
10245 } else {
10246 if (yych <= 0xF3)
10247 goto yy624;
10248 if (yych <= 0xF4)
10249 goto yy625;
10250 goto yy617;
10251 }
10252 }
10253 yy619:
10254 ++p;
10255 yych = *p;
10256 if (yych <= 0x7F)
10257 goto yy617;
10258 if (yych <= 0xBF)
10259 goto yy615;
10260 goto yy617;
10261 yy620:
10262 ++p;
10263 yych = *p;
10264 if (yych <= 0x9F)
10265 goto yy617;
10266 if (yych <= 0xBF)
10267 goto yy619;
10268 goto yy617;
10269 yy621:
10270 ++p;
10271 yych = *p;
10272 if (yych <= 0x7F)
10273 goto yy617;
10274 if (yych <= 0xBF)
10275 goto yy619;
10276 goto yy617;
10277 yy622:
10278 ++p;
10279 yych = *p;
10280 if (yych <= 0x7F)
10281 goto yy617;
10282 if (yych <= 0x9F)
10283 goto yy619;
10284 goto yy617;
10285 yy623:
10286 ++p;
10287 yych = *p;
10288 if (yych <= 0x8F)
10289 goto yy617;
10290 if (yych <= 0xBF)
10291 goto yy621;
10292 goto yy617;
10293 yy624:
10294 ++p;
10295 yych = *p;
10296 if (yych <= 0x7F)
10297 goto yy617;
10298 if (yych <= 0xBF)
10299 goto yy621;
10300 goto yy617;
10301 yy625:
10302 ++p;
10303 yych = *p;
10304 if (yych <= 0x7F)
10305 goto yy617;
10306 if (yych <= 0x8F)
10307 goto yy621;
10308 goto yy617;
10309 yy626:
10310 ++p;
10311 yych = *p;
10312 if (yybm[0 + yych] & 128) {
10313 goto yy626;
10314 }
10315 if (yych <= 0xDF) {
10316 if (yych <= '=') {
10317 if (yych == '\n')
10318 goto yy617;
10319 goto yy615;
10320 } else {
10321 if (yych <= '>')
10322 goto yy628;
10323 if (yych <= 0x7F)
10324 goto yy615;
10325 if (yych <= 0xC1)
10326 goto yy617;
10327 goto yy619;
10328 }
10329 } else {
10330 if (yych <= 0xEF) {
10331 if (yych <= 0xE0)
10332 goto yy620;
10333 if (yych == 0xED)
10334 goto yy622;
10335 goto yy621;
10336 } else {
10337 if (yych <= 0xF0)
10338 goto yy623;
10339 if (yych <= 0xF3)
10340 goto yy624;
10341 if (yych <= 0xF4)
10342 goto yy625;
10343 goto yy617;
10344 }
10345 }
10346 yy628:
10347 yyaccept = 1;
10348 marker = ++p;
10349 yych = *p;
10350 if (yybm[0 + yych] & 64) {
10351 goto yy615;
10352 }
10353 if (yych <= 0xEC) {
10354 if (yych <= 0xC1) {
10355 if (yych <= '\n')
10356 goto yy629;
10357 if (yych <= '-')
10358 goto yy618;
10359 } else {
10360 if (yych <= 0xDF)
10361 goto yy619;
10362 if (yych <= 0xE0)
10363 goto yy620;
10364 goto yy621;
10365 }
10366 } else {
10367 if (yych <= 0xF0) {
10368 if (yych <= 0xED)
10369 goto yy622;
10370 if (yych <= 0xEF)
10371 goto yy621;
10372 goto yy623;
10373 } else {
10374 if (yych <= 0xF3)
10375 goto yy624;
10376 if (yych <= 0xF4)
10377 goto yy625;
10378 }
10379 }
10380 yy629 : { return (bufsize_t)(p - start); }
10381 }
10382 }
10383
10384 // Try to match an HTML block end line of type 3
10385 bufsize_t _scan_html_block_end_3(const unsigned char *p) {
10386 const unsigned char *marker = NULL;
10387 const unsigned char *start = p;
10388
10389 {
10390 unsigned char yych;
10391 unsigned int yyaccept = 0;
10392 static const unsigned char yybm[] = {
10393 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64,
10394 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10395 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10396 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64,
10397 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10398 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10399 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10400 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10401 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10402 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10403 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10404 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10405 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10406 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10407 0, 0, 0, 0,
10408 };
10409 yych = *p;
10410 if (yych <= 0xDF) {
10411 if (yych <= '>') {
10412 if (yych == '\n')
10413 goto yy634;
10414 } else {
10415 if (yych <= '?')
10416 goto yy635;
10417 if (yych <= 0x7F)
10418 goto yy632;
10419 if (yych <= 0xC1)
10420 goto yy634;
10421 goto yy636;
10422 }
10423 } else {
10424 if (yych <= 0xEF) {
10425 if (yych <= 0xE0)
10426 goto yy637;
10427 if (yych == 0xED)
10428 goto yy639;
10429 goto yy638;
10430 } else {
10431 if (yych <= 0xF0)
10432 goto yy640;
10433 if (yych <= 0xF3)
10434 goto yy641;
10435 if (yych <= 0xF4)
10436 goto yy642;
10437 goto yy634;
10438 }
10439 }
10440 yy632:
10441 yyaccept = 0;
10442 yych = *(marker = ++p);
10443 if (yych <= 0x7F) {
10444 if (yych != '\n')
10445 goto yy644;
10446 } else {
10447 if (yych <= 0xC1)
10448 goto yy633;
10449 if (yych <= 0xF4)
10450 goto yy644;
10451 }
10452 yy633 : { return 0; }
10453 yy634:
10454 yych = *++p;
10455 goto yy633;
10456 yy635:
10457 yyaccept = 0;
10458 yych = *(marker = ++p);
10459 if (yych <= '>') {
10460 if (yych == '\n')
10461 goto yy633;
10462 if (yych <= '=')
10463 goto yy644;
10464 goto yy655;
10465 } else {
10466 if (yych <= 0x7F)
10467 goto yy644;
10468 if (yych <= 0xC1)
10469 goto yy633;
10470 if (yych <= 0xF4)
10471 goto yy644;
10472 goto yy633;
10473 }
10474 yy636:
10475 yyaccept = 0;
10476 yych = *(marker = ++p);
10477 if (yych <= 0x7F)
10478 goto yy633;
10479 if (yych <= 0xBF)
10480 goto yy643;
10481 goto yy633;
10482 yy637:
10483 yyaccept = 0;
10484 yych = *(marker = ++p);
10485 if (yych <= 0x9F)
10486 goto yy633;
10487 if (yych <= 0xBF)
10488 goto yy648;
10489 goto yy633;
10490 yy638:
10491 yyaccept = 0;
10492 yych = *(marker = ++p);
10493 if (yych <= 0x7F)
10494 goto yy633;
10495 if (yych <= 0xBF)
10496 goto yy648;
10497 goto yy633;
10498 yy639:
10499 yyaccept = 0;
10500 yych = *(marker = ++p);
10501 if (yych <= 0x7F)
10502 goto yy633;
10503 if (yych <= 0x9F)
10504 goto yy648;
10505 goto yy633;
10506 yy640:
10507 yyaccept = 0;
10508 yych = *(marker = ++p);
10509 if (yych <= 0x8F)
10510 goto yy633;
10511 if (yych <= 0xBF)
10512 goto yy650;
10513 goto yy633;
10514 yy641:
10515 yyaccept = 0;
10516 yych = *(marker = ++p);
10517 if (yych <= 0x7F)
10518 goto yy633;
10519 if (yych <= 0xBF)
10520 goto yy650;
10521 goto yy633;
10522 yy642:
10523 yyaccept = 0;
10524 yych = *(marker = ++p);
10525 if (yych <= 0x7F)
10526 goto yy633;
10527 if (yych <= 0x8F)
10528 goto yy650;
10529 goto yy633;
10530 yy643:
10531 ++p;
10532 yych = *p;
10533 yy644:
10534 if (yybm[0 + yych] & 64) {
10535 goto yy643;
10536 }
10537 if (yych <= 0xEC) {
10538 if (yych <= 0xC1) {
10539 if (yych <= '\n')
10540 goto yy645;
10541 if (yych <= '?')
10542 goto yy646;
10543 } else {
10544 if (yych <= 0xDF)
10545 goto yy648;
10546 if (yych <= 0xE0)
10547 goto yy649;
10548 goto yy650;
10549 }
10550 } else {
10551 if (yych <= 0xF0) {
10552 if (yych <= 0xED)
10553 goto yy651;
10554 if (yych <= 0xEF)
10555 goto yy650;
10556 goto yy652;
10557 } else {
10558 if (yych <= 0xF3)
10559 goto yy653;
10560 if (yych <= 0xF4)
10561 goto yy654;
10562 }
10563 }
10564 yy645:
10565 p = marker;
10566 if (yyaccept == 0) {
10567 goto yy633;
10568 } else {
10569 goto yy656;
10570 }
10571 yy646:
10572 ++p;
10573 yych = *p;
10574 if (yybm[0 + yych] & 128) {
10575 goto yy646;
10576 }
10577 if (yych <= 0xDF) {
10578 if (yych <= '=') {
10579 if (yych == '\n')
10580 goto yy645;
10581 goto yy643;
10582 } else {
10583 if (yych <= '>')
10584 goto yy655;
10585 if (yych <= 0x7F)
10586 goto yy643;
10587 if (yych <= 0xC1)
10588 goto yy645;
10589 }
10590 } else {
10591 if (yych <= 0xEF) {
10592 if (yych <= 0xE0)
10593 goto yy649;
10594 if (yych == 0xED)
10595 goto yy651;
10596 goto yy650;
10597 } else {
10598 if (yych <= 0xF0)
10599 goto yy652;
10600 if (yych <= 0xF3)
10601 goto yy653;
10602 if (yych <= 0xF4)
10603 goto yy654;
10604 goto yy645;
10605 }
10606 }
10607 yy648:
10608 ++p;
10609 yych = *p;
10610 if (yych <= 0x7F)
10611 goto yy645;
10612 if (yych <= 0xBF)
10613 goto yy643;
10614 goto yy645;
10615 yy649:
10616 ++p;
10617 yych = *p;
10618 if (yych <= 0x9F)
10619 goto yy645;
10620 if (yych <= 0xBF)
10621 goto yy648;
10622 goto yy645;
10623 yy650:
10624 ++p;
10625 yych = *p;
10626 if (yych <= 0x7F)
10627 goto yy645;
10628 if (yych <= 0xBF)
10629 goto yy648;
10630 goto yy645;
10631 yy651:
10632 ++p;
10633 yych = *p;
10634 if (yych <= 0x7F)
10635 goto yy645;
10636 if (yych <= 0x9F)
10637 goto yy648;
10638 goto yy645;
10639 yy652:
10640 ++p;
10641 yych = *p;
10642 if (yych <= 0x8F)
10643 goto yy645;
10644 if (yych <= 0xBF)
10645 goto yy650;
10646 goto yy645;
10647 yy653:
10648 ++p;
10649 yych = *p;
10650 if (yych <= 0x7F)
10651 goto yy645;
10652 if (yych <= 0xBF)
10653 goto yy650;
10654 goto yy645;
10655 yy654:
10656 ++p;
10657 yych = *p;
10658 if (yych <= 0x7F)
10659 goto yy645;
10660 if (yych <= 0x8F)
10661 goto yy650;
10662 goto yy645;
10663 yy655:
10664 yyaccept = 1;
10665 marker = ++p;
10666 yych = *p;
10667 if (yybm[0 + yych] & 64) {
10668 goto yy643;
10669 }
10670 if (yych <= 0xEC) {
10671 if (yych <= 0xC1) {
10672 if (yych <= '\n')
10673 goto yy656;
10674 if (yych <= '?')
10675 goto yy646;
10676 } else {
10677 if (yych <= 0xDF)
10678 goto yy648;
10679 if (yych <= 0xE0)
10680 goto yy649;
10681 goto yy650;
10682 }
10683 } else {
10684 if (yych <= 0xF0) {
10685 if (yych <= 0xED)
10686 goto yy651;
10687 if (yych <= 0xEF)
10688 goto yy650;
10689 goto yy652;
10690 } else {
10691 if (yych <= 0xF3)
10692 goto yy653;
10693 if (yych <= 0xF4)
10694 goto yy654;
10695 }
10696 }
10697 yy656 : { return (bufsize_t)(p - start); }
10698 }
10699 }
10700
10701 // Try to match an HTML block end line of type 4
10702 bufsize_t _scan_html_block_end_4(const unsigned char *p) {
10703 const unsigned char *marker = NULL;
10704 const unsigned char *start = p;
10705
10706 {
10707 unsigned char yych;
10708 unsigned int yyaccept = 0;
10709 static const unsigned char yybm[] = {
10710 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128,
10711 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
10712 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
10713 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
10714 128, 128, 128, 128, 128, 128, 64, 128, 128, 128, 128, 128, 128, 128,
10715 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
10716 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
10717 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
10718 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
10719 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10720 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10721 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10722 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10723 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10724 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10725 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10726 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10727 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10728 0, 0, 0, 0,
10729 };
10730 yych = *p;
10731 if (yybm[0 + yych] & 64) {
10732 goto yy662;
10733 }
10734 if (yych <= 0xE0) {
10735 if (yych <= 0x7F) {
10736 if (yych == '\n')
10737 goto yy661;
10738 } else {
10739 if (yych <= 0xC1)
10740 goto yy661;
10741 if (yych <= 0xDF)
10742 goto yy665;
10743 goto yy666;
10744 }
10745 } else {
10746 if (yych <= 0xEF) {
10747 if (yych == 0xED)
10748 goto yy668;
10749 goto yy667;
10750 } else {
10751 if (yych <= 0xF0)
10752 goto yy669;
10753 if (yych <= 0xF3)
10754 goto yy670;
10755 if (yych <= 0xF4)
10756 goto yy671;
10757 goto yy661;
10758 }
10759 }
10760 yyaccept = 0;
10761 yych = *(marker = ++p);
10762 if (yych <= 0x7F) {
10763 if (yych != '\n')
10764 goto yy673;
10765 } else {
10766 if (yych <= 0xC1)
10767 goto yy660;
10768 if (yych <= 0xF4)
10769 goto yy673;
10770 }
10771 yy660 : { return 0; }
10772 yy661:
10773 yych = *++p;
10774 goto yy660;
10775 yy662:
10776 yyaccept = 1;
10777 marker = ++p;
10778 yych = *p;
10779 if (yybm[0 + yych] & 128) {
10780 goto yy672;
10781 }
10782 if (yych <= 0xEC) {
10783 if (yych <= 0xC1) {
10784 if (yych <= '\n')
10785 goto yy664;
10786 if (yych <= '>')
10787 goto yy662;
10788 } else {
10789 if (yych <= 0xDF)
10790 goto yy675;
10791 if (yych <= 0xE0)
10792 goto yy676;
10793 goto yy677;
10794 }
10795 } else {
10796 if (yych <= 0xF0) {
10797 if (yych <= 0xED)
10798 goto yy678;
10799 if (yych <= 0xEF)
10800 goto yy677;
10801 goto yy679;
10802 } else {
10803 if (yych <= 0xF3)
10804 goto yy680;
10805 if (yych <= 0xF4)
10806 goto yy681;
10807 }
10808 }
10809 yy664 : { return (bufsize_t)(p - start); }
10810 yy665:
10811 yyaccept = 0;
10812 yych = *(marker = ++p);
10813 if (yych <= 0x7F)
10814 goto yy660;
10815 if (yych <= 0xBF)
10816 goto yy672;
10817 goto yy660;
10818 yy666:
10819 yyaccept = 0;
10820 yych = *(marker = ++p);
10821 if (yych <= 0x9F)
10822 goto yy660;
10823 if (yych <= 0xBF)
10824 goto yy675;
10825 goto yy660;
10826 yy667:
10827 yyaccept = 0;
10828 yych = *(marker = ++p);
10829 if (yych <= 0x7F)
10830 goto yy660;
10831 if (yych <= 0xBF)
10832 goto yy675;
10833 goto yy660;
10834 yy668:
10835 yyaccept = 0;
10836 yych = *(marker = ++p);
10837 if (yych <= 0x7F)
10838 goto yy660;
10839 if (yych <= 0x9F)
10840 goto yy675;
10841 goto yy660;
10842 yy669:
10843 yyaccept = 0;
10844 yych = *(marker = ++p);
10845 if (yych <= 0x8F)
10846 goto yy660;
10847 if (yych <= 0xBF)
10848 goto yy677;
10849 goto yy660;
10850 yy670:
10851 yyaccept = 0;
10852 yych = *(marker = ++p);
10853 if (yych <= 0x7F)
10854 goto yy660;
10855 if (yych <= 0xBF)
10856 goto yy677;
10857 goto yy660;
10858 yy671:
10859 yyaccept = 0;
10860 yych = *(marker = ++p);
10861 if (yych <= 0x7F)
10862 goto yy660;
10863 if (yych <= 0x8F)
10864 goto yy677;
10865 goto yy660;
10866 yy672:
10867 ++p;
10868 yych = *p;
10869 yy673:
10870 if (yybm[0 + yych] & 128) {
10871 goto yy672;
10872 }
10873 if (yych <= 0xEC) {
10874 if (yych <= 0xC1) {
10875 if (yych <= '\n')
10876 goto yy674;
10877 if (yych <= '>')
10878 goto yy662;
10879 } else {
10880 if (yych <= 0xDF)
10881 goto yy675;
10882 if (yych <= 0xE0)
10883 goto yy676;
10884 goto yy677;
10885 }
10886 } else {
10887 if (yych <= 0xF0) {
10888 if (yych <= 0xED)
10889 goto yy678;
10890 if (yych <= 0xEF)
10891 goto yy677;
10892 goto yy679;
10893 } else {
10894 if (yych <= 0xF3)
10895 goto yy680;
10896 if (yych <= 0xF4)
10897 goto yy681;
10898 }
10899 }
10900 yy674:
10901 p = marker;
10902 if (yyaccept == 0) {
10903 goto yy660;
10904 } else {
10905 goto yy664;
10906 }
10907 yy675:
10908 ++p;
10909 yych = *p;
10910 if (yych <= 0x7F)
10911 goto yy674;
10912 if (yych <= 0xBF)
10913 goto yy672;
10914 goto yy674;
10915 yy676:
10916 ++p;
10917 yych = *p;
10918 if (yych <= 0x9F)
10919 goto yy674;
10920 if (yych <= 0xBF)
10921 goto yy675;
10922 goto yy674;
10923 yy677:
10924 ++p;
10925 yych = *p;
10926 if (yych <= 0x7F)
10927 goto yy674;
10928 if (yych <= 0xBF)
10929 goto yy675;
10930 goto yy674;
10931 yy678:
10932 ++p;
10933 yych = *p;
10934 if (yych <= 0x7F)
10935 goto yy674;
10936 if (yych <= 0x9F)
10937 goto yy675;
10938 goto yy674;
10939 yy679:
10940 ++p;
10941 yych = *p;
10942 if (yych <= 0x8F)
10943 goto yy674;
10944 if (yych <= 0xBF)
10945 goto yy677;
10946 goto yy674;
10947 yy680:
10948 ++p;
10949 yych = *p;
10950 if (yych <= 0x7F)
10951 goto yy674;
10952 if (yych <= 0xBF)
10953 goto yy677;
10954 goto yy674;
10955 yy681:
10956 ++p;
10957 yych = *p;
10958 if (yych <= 0x7F)
10959 goto yy674;
10960 if (yych <= 0x8F)
10961 goto yy677;
10962 goto yy674;
10963 }
10964 }
10965
10966 // Try to match an HTML block end line of type 5
10967 bufsize_t _scan_html_block_end_5(const unsigned char *p) {
10968 const unsigned char *marker = NULL;
10969 const unsigned char *start = p;
10970
10971 {
10972 unsigned char yych;
10973 unsigned int yyaccept = 0;
10974 static const unsigned char yybm[] = {
10975 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64,
10976 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10977 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10978 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10979 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10980 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10981 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
10982 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10983 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10984 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10985 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10986 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10987 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10988 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
10989 0, 0, 0, 0,
10990 };
10991 yych = *p;
10992 if (yych <= 0xDF) {
10993 if (yych <= '\\') {
10994 if (yych == '\n')
10995 goto yy686;
10996 } else {
10997 if (yych <= ']')
10998 goto yy687;
10999 if (yych <= 0x7F)
11000 goto yy684;
11001 if (yych <= 0xC1)
11002 goto yy686;
11003 goto yy688;
11004 }
11005 } else {
11006 if (yych <= 0xEF) {
11007 if (yych <= 0xE0)
11008 goto yy689;
11009 if (yych == 0xED)
11010 goto yy691;
11011 goto yy690;
11012 } else {
11013 if (yych <= 0xF0)
11014 goto yy692;
11015 if (yych <= 0xF3)
11016 goto yy693;
11017 if (yych <= 0xF4)
11018 goto yy694;
11019 goto yy686;
11020 }
11021 }
11022 yy684:
11023 yyaccept = 0;
11024 yych = *(marker = ++p);
11025 if (yych <= 0x7F) {
11026 if (yych != '\n')
11027 goto yy696;
11028 } else {
11029 if (yych <= 0xC1)
11030 goto yy685;
11031 if (yych <= 0xF4)
11032 goto yy696;
11033 }
11034 yy685 : { return 0; }
11035 yy686:
11036 yych = *++p;
11037 goto yy685;
11038 yy687:
11039 yyaccept = 0;
11040 yych = *(marker = ++p);
11041 if (yybm[0 + yych] & 128) {
11042 goto yy706;
11043 }
11044 if (yych <= 0x7F) {
11045 if (yych == '\n')
11046 goto yy685;
11047 goto yy696;
11048 } else {
11049 if (yych <= 0xC1)
11050 goto yy685;
11051 if (yych <= 0xF4)
11052 goto yy696;
11053 goto yy685;
11054 }
11055 yy688:
11056 yyaccept = 0;
11057 yych = *(marker = ++p);
11058 if (yych <= 0x7F)
11059 goto yy685;
11060 if (yych <= 0xBF)
11061 goto yy695;
11062 goto yy685;
11063 yy689:
11064 yyaccept = 0;
11065 yych = *(marker = ++p);
11066 if (yych <= 0x9F)
11067 goto yy685;
11068 if (yych <= 0xBF)
11069 goto yy699;
11070 goto yy685;
11071 yy690:
11072 yyaccept = 0;
11073 yych = *(marker = ++p);
11074 if (yych <= 0x7F)
11075 goto yy685;
11076 if (yych <= 0xBF)
11077 goto yy699;
11078 goto yy685;
11079 yy691:
11080 yyaccept = 0;
11081 yych = *(marker = ++p);
11082 if (yych <= 0x7F)
11083 goto yy685;
11084 if (yych <= 0x9F)
11085 goto yy699;
11086 goto yy685;
11087 yy692:
11088 yyaccept = 0;
11089 yych = *(marker = ++p);
11090 if (yych <= 0x8F)
11091 goto yy685;
11092 if (yych <= 0xBF)
11093 goto yy701;
11094 goto yy685;
11095 yy693:
11096 yyaccept = 0;
11097 yych = *(marker = ++p);
11098 if (yych <= 0x7F)
11099 goto yy685;
11100 if (yych <= 0xBF)
11101 goto yy701;
11102 goto yy685;
11103 yy694:
11104 yyaccept = 0;
11105 yych = *(marker = ++p);
11106 if (yych <= 0x7F)
11107 goto yy685;
11108 if (yych <= 0x8F)
11109 goto yy701;
11110 goto yy685;
11111 yy695:
11112 ++p;
11113 yych = *p;
11114 yy696:
11115 if (yybm[0 + yych] & 64) {
11116 goto yy695;
11117 }
11118 if (yych <= 0xEC) {
11119 if (yych <= 0xC1) {
11120 if (yych <= '\n')
11121 goto yy697;
11122 if (yych <= ']')
11123 goto yy698;
11124 } else {
11125 if (yych <= 0xDF)
11126 goto yy699;
11127 if (yych <= 0xE0)
11128 goto yy700;
11129 goto yy701;
11130 }
11131 } else {
11132 if (yych <= 0xF0) {
11133 if (yych <= 0xED)
11134 goto yy702;
11135 if (yych <= 0xEF)
11136 goto yy701;
11137 goto yy703;
11138 } else {
11139 if (yych <= 0xF3)
11140 goto yy704;
11141 if (yych <= 0xF4)
11142 goto yy705;
11143 }
11144 }
11145 yy697:
11146 p = marker;
11147 if (yyaccept == 0) {
11148 goto yy685;
11149 } else {
11150 goto yy709;
11151 }
11152 yy698:
11153 ++p;
11154 yych = *p;
11155 if (yybm[0 + yych] & 64) {
11156 goto yy695;
11157 }
11158 if (yych <= 0xEC) {
11159 if (yych <= 0xC1) {
11160 if (yych <= '\n')
11161 goto yy697;
11162 if (yych <= ']')
11163 goto yy706;
11164 goto yy697;
11165 } else {
11166 if (yych <= 0xDF)
11167 goto yy699;
11168 if (yych <= 0xE0)
11169 goto yy700;
11170 goto yy701;
11171 }
11172 } else {
11173 if (yych <= 0xF0) {
11174 if (yych <= 0xED)
11175 goto yy702;
11176 if (yych <= 0xEF)
11177 goto yy701;
11178 goto yy703;
11179 } else {
11180 if (yych <= 0xF3)
11181 goto yy704;
11182 if (yych <= 0xF4)
11183 goto yy705;
11184 goto yy697;
11185 }
11186 }
11187 yy699:
11188 ++p;
11189 yych = *p;
11190 if (yych <= 0x7F)
11191 goto yy697;
11192 if (yych <= 0xBF)
11193 goto yy695;
11194 goto yy697;
11195 yy700:
11196 ++p;
11197 yych = *p;
11198 if (yych <= 0x9F)
11199 goto yy697;
11200 if (yych <= 0xBF)
11201 goto yy699;
11202 goto yy697;
11203 yy701:
11204 ++p;
11205 yych = *p;
11206 if (yych <= 0x7F)
11207 goto yy697;
11208 if (yych <= 0xBF)
11209 goto yy699;
11210 goto yy697;
11211 yy702:
11212 ++p;
11213 yych = *p;
11214 if (yych <= 0x7F)
11215 goto yy697;
11216 if (yych <= 0x9F)
11217 goto yy699;
11218 goto yy697;
11219 yy703:
11220 ++p;
11221 yych = *p;
11222 if (yych <= 0x8F)
11223 goto yy697;
11224 if (yych <= 0xBF)
11225 goto yy701;
11226 goto yy697;
11227 yy704:
11228 ++p;
11229 yych = *p;
11230 if (yych <= 0x7F)
11231 goto yy697;
11232 if (yych <= 0xBF)
11233 goto yy701;
11234 goto yy697;
11235 yy705:
11236 ++p;
11237 yych = *p;
11238 if (yych <= 0x7F)
11239 goto yy697;
11240 if (yych <= 0x8F)
11241 goto yy701;
11242 goto yy697;
11243 yy706:
11244 ++p;
11245 yych = *p;
11246 if (yybm[0 + yych] & 128) {
11247 goto yy706;
11248 }
11249 if (yych <= 0xDF) {
11250 if (yych <= '=') {
11251 if (yych == '\n')
11252 goto yy697;
11253 goto yy695;
11254 } else {
11255 if (yych <= '>')
11256 goto yy708;
11257 if (yych <= 0x7F)
11258 goto yy695;
11259 if (yych <= 0xC1)
11260 goto yy697;
11261 goto yy699;
11262 }
11263 } else {
11264 if (yych <= 0xEF) {
11265 if (yych <= 0xE0)
11266 goto yy700;
11267 if (yych == 0xED)
11268 goto yy702;
11269 goto yy701;
11270 } else {
11271 if (yych <= 0xF0)
11272 goto yy703;
11273 if (yych <= 0xF3)
11274 goto yy704;
11275 if (yych <= 0xF4)
11276 goto yy705;
11277 goto yy697;
11278 }
11279 }
11280 yy708:
11281 yyaccept = 1;
11282 marker = ++p;
11283 yych = *p;
11284 if (yybm[0 + yych] & 64) {
11285 goto yy695;
11286 }
11287 if (yych <= 0xEC) {
11288 if (yych <= 0xC1) {
11289 if (yych <= '\n')
11290 goto yy709;
11291 if (yych <= ']')
11292 goto yy698;
11293 } else {
11294 if (yych <= 0xDF)
11295 goto yy699;
11296 if (yych <= 0xE0)
11297 goto yy700;
11298 goto yy701;
11299 }
11300 } else {
11301 if (yych <= 0xF0) {
11302 if (yych <= 0xED)
11303 goto yy702;
11304 if (yych <= 0xEF)
11305 goto yy701;
11306 goto yy703;
11307 } else {
11308 if (yych <= 0xF3)
11309 goto yy704;
11310 if (yych <= 0xF4)
11311 goto yy705;
11312 }
11313 }
11314 yy709 : { return (bufsize_t)(p - start); }
11315 }
11316 }
11317
11318 // Try to match a link title (in single quotes, in double quotes, or
11319 // in parentheses), returning number of chars matched. Allow one
11320 // level of internal nesting (quotes within quotes).
11321 bufsize_t _scan_link_title(const unsigned char *p) {
11322 const unsigned char *marker = NULL;
11323 const unsigned char *start = p;
11324
11325 {
11326 unsigned char yych;
11327 unsigned int yyaccept = 0;
11328 static const unsigned char yybm[] = {
11329 0, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
11330 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
11331 208, 208, 208, 208, 208, 208, 192, 208, 208, 208, 208, 144, 208, 80,
11332 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
11333 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
11334 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
11335 208, 208, 208, 208, 208, 208, 208, 208, 32, 208, 208, 208, 208, 208,
11336 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
11337 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
11338 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11339 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11340 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11341 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11342 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11343 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11344 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11345 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11346 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11347 0, 0, 0, 0,
11348 };
11349 yych = *p;
11350 if (yych <= '&') {
11351 if (yych == '"')
11352 goto yy714;
11353 } else {
11354 if (yych <= '\'')
11355 goto yy715;
11356 if (yych <= '(')
11357 goto yy716;
11358 }
11359 ++p;
11360 yy713 : { return 0; }
11361 yy714:
11362 yyaccept = 0;
11363 yych = *(marker = ++p);
11364 if (yych <= 0x00)
11365 goto yy713;
11366 if (yych <= 0x7F)
11367 goto yy718;
11368 if (yych <= 0xC1)
11369 goto yy713;
11370 if (yych <= 0xF4)
11371 goto yy718;
11372 goto yy713;
11373 yy715:
11374 yyaccept = 0;
11375 yych = *(marker = ++p);
11376 if (yych <= 0x00)
11377 goto yy713;
11378 if (yych <= 0x7F)
11379 goto yy732;
11380 if (yych <= 0xC1)
11381 goto yy713;
11382 if (yych <= 0xF4)
11383 goto yy732;
11384 goto yy713;
11385 yy716:
11386 yyaccept = 0;
11387 yych = *(marker = ++p);
11388 if (yych <= 0x00)
11389 goto yy713;
11390 if (yych <= 0x7F)
11391 goto yy745;
11392 if (yych <= 0xC1)
11393 goto yy713;
11394 if (yych <= 0xF4)
11395 goto yy745;
11396 goto yy713;
11397 yy717:
11398 ++p;
11399 yych = *p;
11400 yy718:
11401 if (yybm[0 + yych] & 16) {
11402 goto yy717;
11403 }
11404 if (yych <= 0xE0) {
11405 if (yych <= '\\') {
11406 if (yych <= 0x00)
11407 goto yy719;
11408 if (yych <= '"')
11409 goto yy720;
11410 goto yy722;
11411 } else {
11412 if (yych <= 0xC1)
11413 goto yy719;
11414 if (yych <= 0xDF)
11415 goto yy724;
11416 goto yy725;
11417 }
11418 } else {
11419 if (yych <= 0xEF) {
11420 if (yych == 0xED)
11421 goto yy727;
11422 goto yy726;
11423 } else {
11424 if (yych <= 0xF0)
11425 goto yy728;
11426 if (yych <= 0xF3)
11427 goto yy729;
11428 if (yych <= 0xF4)
11429 goto yy730;
11430 }
11431 }
11432 yy719:
11433 p = marker;
11434 if (yyaccept <= 1) {
11435 if (yyaccept == 0) {
11436 goto yy713;
11437 } else {
11438 goto yy721;
11439 }
11440 } else {
11441 if (yyaccept == 2) {
11442 goto yy734;
11443 } else {
11444 goto yy747;
11445 }
11446 }
11447 yy720:
11448 ++p;
11449 yy721 : { return (bufsize_t)(p - start); }
11450 yy722:
11451 ++p;
11452 yych = *p;
11453 if (yybm[0 + yych] & 16) {
11454 goto yy717;
11455 }
11456 if (yych <= 0xE0) {
11457 if (yych <= '\\') {
11458 if (yych <= 0x00)
11459 goto yy719;
11460 if (yych <= '"')
11461 goto yy757;
11462 goto yy722;
11463 } else {
11464 if (yych <= 0xC1)
11465 goto yy719;
11466 if (yych >= 0xE0)
11467 goto yy725;
11468 }
11469 } else {
11470 if (yych <= 0xEF) {
11471 if (yych == 0xED)
11472 goto yy727;
11473 goto yy726;
11474 } else {
11475 if (yych <= 0xF0)
11476 goto yy728;
11477 if (yych <= 0xF3)
11478 goto yy729;
11479 if (yych <= 0xF4)
11480 goto yy730;
11481 goto yy719;
11482 }
11483 }
11484 yy724:
11485 ++p;
11486 yych = *p;
11487 if (yych <= 0x7F)
11488 goto yy719;
11489 if (yych <= 0xBF)
11490 goto yy717;
11491 goto yy719;
11492 yy725:
11493 ++p;
11494 yych = *p;
11495 if (yych <= 0x9F)
11496 goto yy719;
11497 if (yych <= 0xBF)
11498 goto yy724;
11499 goto yy719;
11500 yy726:
11501 ++p;
11502 yych = *p;
11503 if (yych <= 0x7F)
11504 goto yy719;
11505 if (yych <= 0xBF)
11506 goto yy724;
11507 goto yy719;
11508 yy727:
11509 ++p;
11510 yych = *p;
11511 if (yych <= 0x7F)
11512 goto yy719;
11513 if (yych <= 0x9F)
11514 goto yy724;
11515 goto yy719;
11516 yy728:
11517 ++p;
11518 yych = *p;
11519 if (yych <= 0x8F)
11520 goto yy719;
11521 if (yych <= 0xBF)
11522 goto yy726;
11523 goto yy719;
11524 yy729:
11525 ++p;
11526 yych = *p;
11527 if (yych <= 0x7F)
11528 goto yy719;
11529 if (yych <= 0xBF)
11530 goto yy726;
11531 goto yy719;
11532 yy730:
11533 ++p;
11534 yych = *p;
11535 if (yych <= 0x7F)
11536 goto yy719;
11537 if (yych <= 0x8F)
11538 goto yy726;
11539 goto yy719;
11540 yy731:
11541 ++p;
11542 yych = *p;
11543 yy732:
11544 if (yybm[0 + yych] & 64) {
11545 goto yy731;
11546 }
11547 if (yych <= 0xE0) {
11548 if (yych <= '\\') {
11549 if (yych <= 0x00)
11550 goto yy719;
11551 if (yych >= '(')
11552 goto yy735;
11553 } else {
11554 if (yych <= 0xC1)
11555 goto yy719;
11556 if (yych <= 0xDF)
11557 goto yy737;
11558 goto yy738;
11559 }
11560 } else {
11561 if (yych <= 0xEF) {
11562 if (yych == 0xED)
11563 goto yy740;
11564 goto yy739;
11565 } else {
11566 if (yych <= 0xF0)
11567 goto yy741;
11568 if (yych <= 0xF3)
11569 goto yy742;
11570 if (yych <= 0xF4)
11571 goto yy743;
11572 goto yy719;
11573 }
11574 }
11575 yy733:
11576 ++p;
11577 yy734 : { return (bufsize_t)(p - start); }
11578 yy735:
11579 ++p;
11580 yych = *p;
11581 if (yybm[0 + yych] & 64) {
11582 goto yy731;
11583 }
11584 if (yych <= 0xE0) {
11585 if (yych <= '\\') {
11586 if (yych <= 0x00)
11587 goto yy719;
11588 if (yych <= '\'')
11589 goto yy758;
11590 goto yy735;
11591 } else {
11592 if (yych <= 0xC1)
11593 goto yy719;
11594 if (yych >= 0xE0)
11595 goto yy738;
11596 }
11597 } else {
11598 if (yych <= 0xEF) {
11599 if (yych == 0xED)
11600 goto yy740;
11601 goto yy739;
11602 } else {
11603 if (yych <= 0xF0)
11604 goto yy741;
11605 if (yych <= 0xF3)
11606 goto yy742;
11607 if (yych <= 0xF4)
11608 goto yy743;
11609 goto yy719;
11610 }
11611 }
11612 yy737:
11613 ++p;
11614 yych = *p;
11615 if (yych <= 0x7F)
11616 goto yy719;
11617 if (yych <= 0xBF)
11618 goto yy731;
11619 goto yy719;
11620 yy738:
11621 ++p;
11622 yych = *p;
11623 if (yych <= 0x9F)
11624 goto yy719;
11625 if (yych <= 0xBF)
11626 goto yy737;
11627 goto yy719;
11628 yy739:
11629 ++p;
11630 yych = *p;
11631 if (yych <= 0x7F)
11632 goto yy719;
11633 if (yych <= 0xBF)
11634 goto yy737;
11635 goto yy719;
11636 yy740:
11637 ++p;
11638 yych = *p;
11639 if (yych <= 0x7F)
11640 goto yy719;
11641 if (yych <= 0x9F)
11642 goto yy737;
11643 goto yy719;
11644 yy741:
11645 ++p;
11646 yych = *p;
11647 if (yych <= 0x8F)
11648 goto yy719;
11649 if (yych <= 0xBF)
11650 goto yy739;
11651 goto yy719;
11652 yy742:
11653 ++p;
11654 yych = *p;
11655 if (yych <= 0x7F)
11656 goto yy719;
11657 if (yych <= 0xBF)
11658 goto yy739;
11659 goto yy719;
11660 yy743:
11661 ++p;
11662 yych = *p;
11663 if (yych <= 0x7F)
11664 goto yy719;
11665 if (yych <= 0x8F)
11666 goto yy739;
11667 goto yy719;
11668 yy744:
11669 ++p;
11670 yych = *p;
11671 yy745:
11672 if (yybm[0 + yych] & 128) {
11673 goto yy744;
11674 }
11675 if (yych <= 0xE0) {
11676 if (yych <= '\\') {
11677 if (yych <= 0x00)
11678 goto yy719;
11679 if (yych >= '*')
11680 goto yy748;
11681 } else {
11682 if (yych <= 0xC1)
11683 goto yy719;
11684 if (yych <= 0xDF)
11685 goto yy750;
11686 goto yy751;
11687 }
11688 } else {
11689 if (yych <= 0xEF) {
11690 if (yych == 0xED)
11691 goto yy753;
11692 goto yy752;
11693 } else {
11694 if (yych <= 0xF0)
11695 goto yy754;
11696 if (yych <= 0xF3)
11697 goto yy755;
11698 if (yych <= 0xF4)
11699 goto yy756;
11700 goto yy719;
11701 }
11702 }
11703 yy746:
11704 ++p;
11705 yy747 : { return (bufsize_t)(p - start); }
11706 yy748:
11707 ++p;
11708 yych = *p;
11709 if (yybm[0 + yych] & 128) {
11710 goto yy744;
11711 }
11712 if (yych <= 0xE0) {
11713 if (yych <= '\\') {
11714 if (yych <= 0x00)
11715 goto yy719;
11716 if (yych <= ')')
11717 goto yy759;
11718 goto yy748;
11719 } else {
11720 if (yych <= 0xC1)
11721 goto yy719;
11722 if (yych >= 0xE0)
11723 goto yy751;
11724 }
11725 } else {
11726 if (yych <= 0xEF) {
11727 if (yych == 0xED)
11728 goto yy753;
11729 goto yy752;
11730 } else {
11731 if (yych <= 0xF0)
11732 goto yy754;
11733 if (yych <= 0xF3)
11734 goto yy755;
11735 if (yych <= 0xF4)
11736 goto yy756;
11737 goto yy719;
11738 }
11739 }
11740 yy750:
11741 ++p;
11742 yych = *p;
11743 if (yych <= 0x7F)
11744 goto yy719;
11745 if (yych <= 0xBF)
11746 goto yy744;
11747 goto yy719;
11748 yy751:
11749 ++p;
11750 yych = *p;
11751 if (yych <= 0x9F)
11752 goto yy719;
11753 if (yych <= 0xBF)
11754 goto yy750;
11755 goto yy719;
11756 yy752:
11757 ++p;
11758 yych = *p;
11759 if (yych <= 0x7F)
11760 goto yy719;
11761 if (yych <= 0xBF)
11762 goto yy750;
11763 goto yy719;
11764 yy753:
11765 ++p;
11766 yych = *p;
11767 if (yych <= 0x7F)
11768 goto yy719;
11769 if (yych <= 0x9F)
11770 goto yy750;
11771 goto yy719;
11772 yy754:
11773 ++p;
11774 yych = *p;
11775 if (yych <= 0x8F)
11776 goto yy719;
11777 if (yych <= 0xBF)
11778 goto yy752;
11779 goto yy719;
11780 yy755:
11781 ++p;
11782 yych = *p;
11783 if (yych <= 0x7F)
11784 goto yy719;
11785 if (yych <= 0xBF)
11786 goto yy752;
11787 goto yy719;
11788 yy756:
11789 ++p;
11790 yych = *p;
11791 if (yych <= 0x7F)
11792 goto yy719;
11793 if (yych <= 0x8F)
11794 goto yy752;
11795 goto yy719;
11796 yy757:
11797 yyaccept = 1;
11798 marker = ++p;
11799 yych = *p;
11800 if (yybm[0 + yych] & 16) {
11801 goto yy717;
11802 }
11803 if (yych <= 0xE0) {
11804 if (yych <= '\\') {
11805 if (yych <= 0x00)
11806 goto yy721;
11807 if (yych <= '"')
11808 goto yy720;
11809 goto yy722;
11810 } else {
11811 if (yych <= 0xC1)
11812 goto yy721;
11813 if (yych <= 0xDF)
11814 goto yy724;
11815 goto yy725;
11816 }
11817 } else {
11818 if (yych <= 0xEF) {
11819 if (yych == 0xED)
11820 goto yy727;
11821 goto yy726;
11822 } else {
11823 if (yych <= 0xF0)
11824 goto yy728;
11825 if (yych <= 0xF3)
11826 goto yy729;
11827 if (yych <= 0xF4)
11828 goto yy730;
11829 goto yy721;
11830 }
11831 }
11832 yy758:
11833 yyaccept = 2;
11834 marker = ++p;
11835 yych = *p;
11836 if (yybm[0 + yych] & 64) {
11837 goto yy731;
11838 }
11839 if (yych <= 0xE0) {
11840 if (yych <= '\\') {
11841 if (yych <= 0x00)
11842 goto yy734;
11843 if (yych <= '\'')
11844 goto yy733;
11845 goto yy735;
11846 } else {
11847 if (yych <= 0xC1)
11848 goto yy734;
11849 if (yych <= 0xDF)
11850 goto yy737;
11851 goto yy738;
11852 }
11853 } else {
11854 if (yych <= 0xEF) {
11855 if (yych == 0xED)
11856 goto yy740;
11857 goto yy739;
11858 } else {
11859 if (yych <= 0xF0)
11860 goto yy741;
11861 if (yych <= 0xF3)
11862 goto yy742;
11863 if (yych <= 0xF4)
11864 goto yy743;
11865 goto yy734;
11866 }
11867 }
11868 yy759:
11869 yyaccept = 3;
11870 marker = ++p;
11871 yych = *p;
11872 if (yybm[0 + yych] & 128) {
11873 goto yy744;
11874 }
11875 if (yych <= 0xE0) {
11876 if (yych <= '\\') {
11877 if (yych <= 0x00)
11878 goto yy747;
11879 if (yych <= ')')
11880 goto yy746;
11881 goto yy748;
11882 } else {
11883 if (yych <= 0xC1)
11884 goto yy747;
11885 if (yych <= 0xDF)
11886 goto yy750;
11887 goto yy751;
11888 }
11889 } else {
11890 if (yych <= 0xEF) {
11891 if (yych == 0xED)
11892 goto yy753;
11893 goto yy752;
11894 } else {
11895 if (yych <= 0xF0)
11896 goto yy754;
11897 if (yych <= 0xF3)
11898 goto yy755;
11899 if (yych <= 0xF4)
11900 goto yy756;
11901 goto yy747;
11902 }
11903 }
11904 }
11905 }
11906
11907 // Match space characters, including newlines.
11908 bufsize_t _scan_spacechars(const unsigned char *p) {
11909 const unsigned char *start = p;
11910
11911 {
11912 unsigned char yych;
11913 static const unsigned char yybm[] = {
11914 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0,
11915 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0,
11916 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11917 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11918 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11919 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11920 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11921 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11922 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11923 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11924 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11925 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11926 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11927 };
11928 yych = *p;
11929 if (yybm[0 + yych] & 128) {
11930 goto yy764;
11931 }
11932 ++p;
11933 { return 0; }
11934 yy764:
11935 ++p;
11936 yych = *p;
11937 if (yybm[0 + yych] & 128) {
11938 goto yy764;
11939 }
11940 { return (bufsize_t)(p - start); }
11941 }
11942 }
11943
11944 // Match ATX heading start.
11945 bufsize_t _scan_atx_heading_start(const unsigned char *p) {
11946 const unsigned char *marker = NULL;
11947 const unsigned char *start = p;
11948
11949 {
11950 unsigned char yych;
11951 static const unsigned char yybm[] = {
11952 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11953 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11954 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11955 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11956 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11957 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11958 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11959 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11960 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11961 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11962 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11963 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11964 };
11965 yych = *p;
11966 if (yych == '#')
11967 goto yy771;
11968 ++p;
11969 yy770 : { return 0; }
11970 yy771:
11971 yych = *(marker = ++p);
11972 if (yybm[0 + yych] & 128) {
11973 goto yy772;
11974 }
11975 if (yych <= '\f') {
11976 if (yych <= 0x08)
11977 goto yy770;
11978 if (yych <= '\n')
11979 goto yy775;
11980 goto yy770;
11981 } else {
11982 if (yych <= '\r')
11983 goto yy775;
11984 if (yych == '#')
11985 goto yy776;
11986 goto yy770;
11987 }
11988 yy772:
11989 ++p;
11990 yych = *p;
11991 if (yybm[0 + yych] & 128) {
11992 goto yy772;
11993 }
11994 yy774 : { return (bufsize_t)(p - start); }
11995 yy775:
11996 yych = *++p;
11997 goto yy774;
11998 yy776:
11999 yych = *++p;
12000 if (yybm[0 + yych] & 128) {
12001 goto yy772;
12002 }
12003 if (yych <= '\f') {
12004 if (yych <= 0x08)
12005 goto yy777;
12006 if (yych <= '\n')
12007 goto yy775;
12008 } else {
12009 if (yych <= '\r')
12010 goto yy775;
12011 if (yych == '#')
12012 goto yy778;
12013 }
12014 yy777:
12015 p = marker;
12016 goto yy770;
12017 yy778:
12018 yych = *++p;
12019 if (yybm[0 + yych] & 128) {
12020 goto yy772;
12021 }
12022 if (yych <= '\f') {
12023 if (yych <= 0x08)
12024 goto yy777;
12025 if (yych <= '\n')
12026 goto yy775;
12027 goto yy777;
12028 } else {
12029 if (yych <= '\r')
12030 goto yy775;
12031 if (yych != '#')
12032 goto yy777;
12033 }
12034 yych = *++p;
12035 if (yybm[0 + yych] & 128) {
12036 goto yy772;
12037 }
12038 if (yych <= '\f') {
12039 if (yych <= 0x08)
12040 goto yy777;
12041 if (yych <= '\n')
12042 goto yy775;
12043 goto yy777;
12044 } else {
12045 if (yych <= '\r')
12046 goto yy775;
12047 if (yych != '#')
12048 goto yy777;
12049 }
12050 yych = *++p;
12051 if (yybm[0 + yych] & 128) {
12052 goto yy772;
12053 }
12054 if (yych <= '\f') {
12055 if (yych <= 0x08)
12056 goto yy777;
12057 if (yych <= '\n')
12058 goto yy775;
12059 goto yy777;
12060 } else {
12061 if (yych <= '\r')
12062 goto yy775;
12063 if (yych != '#')
12064 goto yy777;
12065 }
12066 ++p;
12067 if (yybm[0 + (yych = *p)] & 128) {
12068 goto yy772;
12069 }
12070 if (yych <= 0x08)
12071 goto yy777;
12072 if (yych <= '\n')
12073 goto yy775;
12074 if (yych == '\r')
12075 goto yy775;
12076 goto yy777;
12077 }
12078 }
12079
12080 // Match setext heading line. Return 1 for level-1 heading,
12081 // 2 for level-2, 0 for no match.
12082 bufsize_t _scan_setext_heading_line(const unsigned char *p) {
12083 const unsigned char *marker = NULL;
12084
12085 {
12086 unsigned char yych;
12087 static const unsigned char yybm[] = {
12088 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12089 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12090 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0,
12091 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12092 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12093 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12094 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12095 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12096 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12097 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12098 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12099 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12100 };
12101 yych = *p;
12102 if (yych == '-')
12103 goto yy786;
12104 if (yych == '=')
12105 goto yy787;
12106 ++p;
12107 yy785 : { return 0; }
12108 yy786:
12109 yych = *(marker = ++p);
12110 if (yybm[0 + yych] & 64) {
12111 goto yy793;
12112 }
12113 if (yych <= '\f') {
12114 if (yych <= 0x08)
12115 goto yy785;
12116 if (yych <= '\n')
12117 goto yy789;
12118 goto yy785;
12119 } else {
12120 if (yych <= '\r')
12121 goto yy789;
12122 if (yych == ' ')
12123 goto yy789;
12124 goto yy785;
12125 }
12126 yy787:
12127 yych = *(marker = ++p);
12128 if (yybm[0 + yych] & 128) {
12129 goto yy799;
12130 }
12131 if (yych <= '\f') {
12132 if (yych <= 0x08)
12133 goto yy785;
12134 if (yych <= '\n')
12135 goto yy796;
12136 goto yy785;
12137 } else {
12138 if (yych <= '\r')
12139 goto yy796;
12140 if (yych == ' ')
12141 goto yy796;
12142 goto yy785;
12143 }
12144 yy788:
12145 ++p;
12146 yych = *p;
12147 yy789:
12148 if (yybm[0 + yych] & 32) {
12149 goto yy788;
12150 }
12151 if (yych <= 0x08)
12152 goto yy790;
12153 if (yych <= '\n')
12154 goto yy791;
12155 if (yych == '\r')
12156 goto yy791;
12157 yy790:
12158 p = marker;
12159 goto yy785;
12160 yy791:
12161 ++p;
12162 { return 2; }
12163 yy793:
12164 ++p;
12165 yych = *p;
12166 if (yybm[0 + yych] & 32) {
12167 goto yy788;
12168 }
12169 if (yych <= '\f') {
12170 if (yych <= 0x08)
12171 goto yy790;
12172 if (yych <= '\n')
12173 goto yy791;
12174 goto yy790;
12175 } else {
12176 if (yych <= '\r')
12177 goto yy791;
12178 if (yych == '-')
12179 goto yy793;
12180 goto yy790;
12181 }
12182 yy795:
12183 ++p;
12184 yych = *p;
12185 yy796:
12186 if (yych <= '\f') {
12187 if (yych <= 0x08)
12188 goto yy790;
12189 if (yych <= '\t')
12190 goto yy795;
12191 if (yych >= '\v')
12192 goto yy790;
12193 } else {
12194 if (yych <= '\r')
12195 goto yy797;
12196 if (yych == ' ')
12197 goto yy795;
12198 goto yy790;
12199 }
12200 yy797:
12201 ++p;
12202 { return 1; }
12203 yy799:
12204 ++p;
12205 yych = *p;
12206 if (yybm[0 + yych] & 128) {
12207 goto yy799;
12208 }
12209 if (yych <= '\f') {
12210 if (yych <= 0x08)
12211 goto yy790;
12212 if (yych <= '\t')
12213 goto yy795;
12214 if (yych <= '\n')
12215 goto yy797;
12216 goto yy790;
12217 } else {
12218 if (yych <= '\r')
12219 goto yy797;
12220 if (yych == ' ')
12221 goto yy795;
12222 goto yy790;
12223 }
12224 }
12225 }
12226
12227 // Scan a thematic break line: "...three or more hyphens, asterisks,
12228 // or underscores on a line by themselves. If you wish, you may use
12229 // spaces between the hyphens or asterisks."
12230 bufsize_t _scan_thematic_break(const unsigned char *p) {
12231 const unsigned char *marker = NULL;
12232 const unsigned char *start = p;
12233
12234 {
12235 unsigned char yych;
12236 static const unsigned char yybm[] = {
12237 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12238 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0,
12239 0, 0, 32, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12240 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12241 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0,
12242 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12243 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12244 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12245 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12246 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12247 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12248 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12249 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12250 };
12251 yych = *p;
12252 if (yych <= ',') {
12253 if (yych == '*')
12254 goto yy805;
12255 } else {
12256 if (yych <= '-')
12257 goto yy806;
12258 if (yych == '_')
12259 goto yy807;
12260 }
12261 ++p;
12262 yy804 : { return 0; }
12263 yy805:
12264 yych = *(marker = ++p);
12265 if (yybm[0 + yych] & 16) {
12266 goto yy808;
12267 }
12268 if (yych == '*')
12269 goto yy811;
12270 goto yy804;
12271 yy806:
12272 yych = *(marker = ++p);
12273 if (yych <= 0x1F) {
12274 if (yych == '\t')
12275 goto yy813;
12276 goto yy804;
12277 } else {
12278 if (yych <= ' ')
12279 goto yy813;
12280 if (yych == '-')
12281 goto yy815;
12282 goto yy804;
12283 }
12284 yy807:
12285 yych = *(marker = ++p);
12286 if (yych <= 0x1F) {
12287 if (yych == '\t')
12288 goto yy817;
12289 goto yy804;
12290 } else {
12291 if (yych <= ' ')
12292 goto yy817;
12293 if (yych == '_')
12294 goto yy819;
12295 goto yy804;
12296 }
12297 yy808:
12298 ++p;
12299 yych = *p;
12300 if (yybm[0 + yych] & 16) {
12301 goto yy808;
12302 }
12303 if (yych == '*')
12304 goto yy811;
12305 yy810:
12306 p = marker;
12307 goto yy804;
12308 yy811:
12309 ++p;
12310 yych = *p;
12311 if (yych <= 0x1F) {
12312 if (yych == '\t')
12313 goto yy811;
12314 goto yy810;
12315 } else {
12316 if (yych <= ' ')
12317 goto yy811;
12318 if (yych == '*')
12319 goto yy821;
12320 goto yy810;
12321 }
12322 yy813:
12323 ++p;
12324 yych = *p;
12325 if (yych <= 0x1F) {
12326 if (yych == '\t')
12327 goto yy813;
12328 goto yy810;
12329 } else {
12330 if (yych <= ' ')
12331 goto yy813;
12332 if (yych != '-')
12333 goto yy810;
12334 }
12335 yy815:
12336 ++p;
12337 yych = *p;
12338 if (yych <= 0x1F) {
12339 if (yych == '\t')
12340 goto yy815;
12341 goto yy810;
12342 } else {
12343 if (yych <= ' ')
12344 goto yy815;
12345 if (yych == '-')
12346 goto yy823;
12347 goto yy810;
12348 }
12349 yy817:
12350 ++p;
12351 yych = *p;
12352 if (yych <= 0x1F) {
12353 if (yych == '\t')
12354 goto yy817;
12355 goto yy810;
12356 } else {
12357 if (yych <= ' ')
12358 goto yy817;
12359 if (yych != '_')
12360 goto yy810;
12361 }
12362 yy819:
12363 ++p;
12364 yych = *p;
12365 if (yych <= 0x1F) {
12366 if (yych == '\t')
12367 goto yy819;
12368 goto yy810;
12369 } else {
12370 if (yych <= ' ')
12371 goto yy819;
12372 if (yych == '_')
12373 goto yy825;
12374 goto yy810;
12375 }
12376 yy821:
12377 ++p;
12378 yych = *p;
12379 if (yybm[0 + yych] & 32) {
12380 goto yy821;
12381 }
12382 if (yych <= 0x08)
12383 goto yy810;
12384 if (yych <= '\n')
12385 goto yy827;
12386 if (yych == '\r')
12387 goto yy827;
12388 goto yy810;
12389 yy823:
12390 ++p;
12391 yych = *p;
12392 if (yybm[0 + yych] & 64) {
12393 goto yy823;
12394 }
12395 if (yych <= 0x08)
12396 goto yy810;
12397 if (yych <= '\n')
12398 goto yy829;
12399 if (yych == '\r')
12400 goto yy829;
12401 goto yy810;
12402 yy825:
12403 ++p;
12404 yych = *p;
12405 if (yybm[0 + yych] & 128) {
12406 goto yy825;
12407 }
12408 if (yych <= 0x08)
12409 goto yy810;
12410 if (yych <= '\n')
12411 goto yy831;
12412 if (yych == '\r')
12413 goto yy831;
12414 goto yy810;
12415 yy827:
12416 ++p;
12417 { return (bufsize_t)(p - start); }
12418 yy829:
12419 ++p;
12420 { return (bufsize_t)(p - start); }
12421 yy831:
12422 ++p;
12423 { return (bufsize_t)(p - start); }
12424 }
12425 }
12426
12427 // Scan an opening code fence.
12428 bufsize_t _scan_open_code_fence(const unsigned char *p) {
12429 const unsigned char *marker = NULL;
12430 const unsigned char *start = p;
12431
12432 {
12433 unsigned char yych;
12434 static const unsigned char yybm[] = {
12435 0, 192, 192, 192, 192, 192, 192, 192, 192, 192, 0, 192, 192, 0,
12436 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
12437 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
12438 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
12439 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
12440 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
12441 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 144, 192,
12442 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
12443 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
12444 96, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12445 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12446 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12447 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12448 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12449 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12450 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12451 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12452 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12453 0, 0, 0, 0,
12454 };
12455 yych = *p;
12456 if (yych == '`')
12457 goto yy837;
12458 if (yych == '~')
12459 goto yy838;
12460 ++p;
12461 yy836 : { return 0; }
12462 yy837:
12463 yych = *(marker = ++p);
12464 if (yych == '`')
12465 goto yy839;
12466 goto yy836;
12467 yy838:
12468 yych = *(marker = ++p);
12469 if (yych == '~')
12470 goto yy841;
12471 goto yy836;
12472 yy839:
12473 yych = *++p;
12474 if (yybm[0 + yych] & 16) {
12475 goto yy842;
12476 }
12477 yy840:
12478 p = marker;
12479 goto yy836;
12480 yy841:
12481 yych = *++p;
12482 if (yybm[0 + yych] & 32) {
12483 goto yy844;
12484 }
12485 goto yy840;
12486 yy842:
12487 ++p;
12488 yych = *p;
12489 marker = p;
12490 if (yybm[0 + yych] & 64) {
12491 goto yy846;
12492 }
12493 if (yych <= 0xE0) {
12494 if (yych <= '`') {
12495 if (yych <= 0x00)
12496 goto yy840;
12497 if (yych <= '\r')
12498 goto yy848;
12499 goto yy842;
12500 } else {
12501 if (yych <= 0xC1)
12502 goto yy840;
12503 if (yych <= 0xDF)
12504 goto yy850;
12505 goto yy851;
12506 }
12507 } else {
12508 if (yych <= 0xEF) {
12509 if (yych == 0xED)
12510 goto yy853;
12511 goto yy852;
12512 } else {
12513 if (yych <= 0xF0)
12514 goto yy854;
12515 if (yych <= 0xF3)
12516 goto yy855;
12517 if (yych <= 0xF4)
12518 goto yy856;
12519 goto yy840;
12520 }
12521 }
12522 yy844:
12523 ++p;
12524 yych = *p;
12525 marker = p;
12526 if (yybm[0 + yych] & 128) {
12527 goto yy857;
12528 }
12529 if (yych <= 0xE0) {
12530 if (yych <= '~') {
12531 if (yych <= 0x00)
12532 goto yy840;
12533 if (yych <= '\r')
12534 goto yy859;
12535 goto yy844;
12536 } else {
12537 if (yych <= 0xC1)
12538 goto yy840;
12539 if (yych <= 0xDF)
12540 goto yy861;
12541 goto yy862;
12542 }
12543 } else {
12544 if (yych <= 0xEF) {
12545 if (yych == 0xED)
12546 goto yy864;
12547 goto yy863;
12548 } else {
12549 if (yych <= 0xF0)
12550 goto yy865;
12551 if (yych <= 0xF3)
12552 goto yy866;
12553 if (yych <= 0xF4)
12554 goto yy867;
12555 goto yy840;
12556 }
12557 }
12558 yy846:
12559 ++p;
12560 yych = *p;
12561 if (yybm[0 + yych] & 64) {
12562 goto yy846;
12563 }
12564 if (yych <= 0xEC) {
12565 if (yych <= 0xC1) {
12566 if (yych <= 0x00)
12567 goto yy840;
12568 if (yych >= 0x0E)
12569 goto yy840;
12570 } else {
12571 if (yych <= 0xDF)
12572 goto yy850;
12573 if (yych <= 0xE0)
12574 goto yy851;
12575 goto yy852;
12576 }
12577 } else {
12578 if (yych <= 0xF0) {
12579 if (yych <= 0xED)
12580 goto yy853;
12581 if (yych <= 0xEF)
12582 goto yy852;
12583 goto yy854;
12584 } else {
12585 if (yych <= 0xF3)
12586 goto yy855;
12587 if (yych <= 0xF4)
12588 goto yy856;
12589 goto yy840;
12590 }
12591 }
12592 yy848:
12593 ++p;
12594 p = marker;
12595 { return (bufsize_t)(p - start); }
12596 yy850:
12597 ++p;
12598 yych = *p;
12599 if (yych <= 0x7F)
12600 goto yy840;
12601 if (yych <= 0xBF)
12602 goto yy846;
12603 goto yy840;
12604 yy851:
12605 ++p;
12606 yych = *p;
12607 if (yych <= 0x9F)
12608 goto yy840;
12609 if (yych <= 0xBF)
12610 goto yy850;
12611 goto yy840;
12612 yy852:
12613 ++p;
12614 yych = *p;
12615 if (yych <= 0x7F)
12616 goto yy840;
12617 if (yych <= 0xBF)
12618 goto yy850;
12619 goto yy840;
12620 yy853:
12621 ++p;
12622 yych = *p;
12623 if (yych <= 0x7F)
12624 goto yy840;
12625 if (yych <= 0x9F)
12626 goto yy850;
12627 goto yy840;
12628 yy854:
12629 ++p;
12630 yych = *p;
12631 if (yych <= 0x8F)
12632 goto yy840;
12633 if (yych <= 0xBF)
12634 goto yy852;
12635 goto yy840;
12636 yy855:
12637 ++p;
12638 yych = *p;
12639 if (yych <= 0x7F)
12640 goto yy840;
12641 if (yych <= 0xBF)
12642 goto yy852;
12643 goto yy840;
12644 yy856:
12645 ++p;
12646 yych = *p;
12647 if (yych <= 0x7F)
12648 goto yy840;
12649 if (yych <= 0x8F)
12650 goto yy852;
12651 goto yy840;
12652 yy857:
12653 ++p;
12654 yych = *p;
12655 if (yybm[0 + yych] & 128) {
12656 goto yy857;
12657 }
12658 if (yych <= 0xEC) {
12659 if (yych <= 0xC1) {
12660 if (yych <= 0x00)
12661 goto yy840;
12662 if (yych >= 0x0E)
12663 goto yy840;
12664 } else {
12665 if (yych <= 0xDF)
12666 goto yy861;
12667 if (yych <= 0xE0)
12668 goto yy862;
12669 goto yy863;
12670 }
12671 } else {
12672 if (yych <= 0xF0) {
12673 if (yych <= 0xED)
12674 goto yy864;
12675 if (yych <= 0xEF)
12676 goto yy863;
12677 goto yy865;
12678 } else {
12679 if (yych <= 0xF3)
12680 goto yy866;
12681 if (yych <= 0xF4)
12682 goto yy867;
12683 goto yy840;
12684 }
12685 }
12686 yy859:
12687 ++p;
12688 p = marker;
12689 { return (bufsize_t)(p - start); }
12690 yy861:
12691 ++p;
12692 yych = *p;
12693 if (yych <= 0x7F)
12694 goto yy840;
12695 if (yych <= 0xBF)
12696 goto yy857;
12697 goto yy840;
12698 yy862:
12699 ++p;
12700 yych = *p;
12701 if (yych <= 0x9F)
12702 goto yy840;
12703 if (yych <= 0xBF)
12704 goto yy861;
12705 goto yy840;
12706 yy863:
12707 ++p;
12708 yych = *p;
12709 if (yych <= 0x7F)
12710 goto yy840;
12711 if (yych <= 0xBF)
12712 goto yy861;
12713 goto yy840;
12714 yy864:
12715 ++p;
12716 yych = *p;
12717 if (yych <= 0x7F)
12718 goto yy840;
12719 if (yych <= 0x9F)
12720 goto yy861;
12721 goto yy840;
12722 yy865:
12723 ++p;
12724 yych = *p;
12725 if (yych <= 0x8F)
12726 goto yy840;
12727 if (yych <= 0xBF)
12728 goto yy863;
12729 goto yy840;
12730 yy866:
12731 ++p;
12732 yych = *p;
12733 if (yych <= 0x7F)
12734 goto yy840;
12735 if (yych <= 0xBF)
12736 goto yy863;
12737 goto yy840;
12738 yy867:
12739 ++p;
12740 yych = *p;
12741 if (yych <= 0x7F)
12742 goto yy840;
12743 if (yych <= 0x8F)
12744 goto yy863;
12745 goto yy840;
12746 }
12747 }
12748
12749 // Scan a closing code fence with length at least len.
12750 bufsize_t _scan_close_code_fence(const unsigned char *p) {
12751 const unsigned char *marker = NULL;
12752 const unsigned char *start = p;
12753
12754 {
12755 unsigned char yych;
12756 static const unsigned char yybm[] = {
12757 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12758 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12759 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12760 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12761 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12762 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,
12763 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12764 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12765 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12766 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12767 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12768 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12769 };
12770 yych = *p;
12771 if (yych == '`')
12772 goto yy872;
12773 if (yych == '~')
12774 goto yy873;
12775 ++p;
12776 yy871 : { return 0; }
12777 yy872:
12778 yych = *(marker = ++p);
12779 if (yych == '`')
12780 goto yy874;
12781 goto yy871;
12782 yy873:
12783 yych = *(marker = ++p);
12784 if (yych == '~')
12785 goto yy876;
12786 goto yy871;
12787 yy874:
12788 yych = *++p;
12789 if (yybm[0 + yych] & 32) {
12790 goto yy877;
12791 }
12792 yy875:
12793 p = marker;
12794 goto yy871;
12795 yy876:
12796 yych = *++p;
12797 if (yybm[0 + yych] & 64) {
12798 goto yy879;
12799 }
12800 goto yy875;
12801 yy877:
12802 ++p;
12803 yych = *p;
12804 marker = p;
12805 if (yybm[0 + yych] & 128) {
12806 goto yy881;
12807 }
12808 if (yych <= '\f') {
12809 if (yych <= 0x08)
12810 goto yy875;
12811 if (yych <= '\n')
12812 goto yy883;
12813 goto yy875;
12814 } else {
12815 if (yych <= '\r')
12816 goto yy883;
12817 if (yych == '`')
12818 goto yy877;
12819 goto yy875;
12820 }
12821 yy879:
12822 ++p;
12823 yych = *p;
12824 marker = p;
12825 if (yybm[0 + yych] & 64) {
12826 goto yy879;
12827 }
12828 if (yych <= '\f') {
12829 if (yych <= 0x08)
12830 goto yy875;
12831 if (yych <= '\t')
12832 goto yy885;
12833 if (yych <= '\n')
12834 goto yy887;
12835 goto yy875;
12836 } else {
12837 if (yych <= '\r')
12838 goto yy887;
12839 if (yych == ' ')
12840 goto yy885;
12841 goto yy875;
12842 }
12843 yy881:
12844 ++p;
12845 yych = *p;
12846 if (yybm[0 + yych] & 128) {
12847 goto yy881;
12848 }
12849 if (yych <= 0x08)
12850 goto yy875;
12851 if (yych <= '\n')
12852 goto yy883;
12853 if (yych != '\r')
12854 goto yy875;
12855 yy883:
12856 ++p;
12857 p = marker;
12858 { return (bufsize_t)(p - start); }
12859 yy885:
12860 ++p;
12861 yych = *p;
12862 if (yych <= '\f') {
12863 if (yych <= 0x08)
12864 goto yy875;
12865 if (yych <= '\t')
12866 goto yy885;
12867 if (yych >= '\v')
12868 goto yy875;
12869 } else {
12870 if (yych <= '\r')
12871 goto yy887;
12872 if (yych == ' ')
12873 goto yy885;
12874 goto yy875;
12875 }
12876 yy887:
12877 ++p;
12878 p = marker;
12879 { return (bufsize_t)(p - start); }
12880 }
12881 }
12882
12883 // Scans an entity.
12884 // Returns number of chars matched.
12885 bufsize_t _scan_entity(const unsigned char *p) {
12886 const unsigned char *marker = NULL;
12887 const unsigned char *start = p;
12888
12889 {
12890 unsigned char yych;
12891 yych = *p;
12892 if (yych == '&')
12893 goto yy893;
12894 ++p;
12895 yy892 : { return 0; }
12896 yy893:
12897 yych = *(marker = ++p);
12898 if (yych <= '@') {
12899 if (yych != '#')
12900 goto yy892;
12901 } else {
12902 if (yych <= 'Z')
12903 goto yy896;
12904 if (yych <= '`')
12905 goto yy892;
12906 if (yych <= 'z')
12907 goto yy896;
12908 goto yy892;
12909 }
12910 yych = *++p;
12911 if (yych <= 'W') {
12912 if (yych <= '/')
12913 goto yy895;
12914 if (yych <= '9')
12915 goto yy897;
12916 } else {
12917 if (yych <= 'X')
12918 goto yy898;
12919 if (yych == 'x')
12920 goto yy898;
12921 }
12922 yy895:
12923 p = marker;
12924 goto yy892;
12925 yy896:
12926 yych = *++p;
12927 if (yych <= '@') {
12928 if (yych <= '/')
12929 goto yy895;
12930 if (yych <= '9')
12931 goto yy899;
12932 goto yy895;
12933 } else {
12934 if (yych <= 'Z')
12935 goto yy899;
12936 if (yych <= '`')
12937 goto yy895;
12938 if (yych <= 'z')
12939 goto yy899;
12940 goto yy895;
12941 }
12942 yy897:
12943 yych = *++p;
12944 if (yych <= '/')
12945 goto yy895;
12946 if (yych <= '9')
12947 goto yy900;
12948 if (yych == ';')
12949 goto yy901;
12950 goto yy895;
12951 yy898:
12952 yych = *++p;
12953 if (yych <= '@') {
12954 if (yych <= '/')
12955 goto yy895;
12956 if (yych <= '9')
12957 goto yy903;
12958 goto yy895;
12959 } else {
12960 if (yych <= 'F')
12961 goto yy903;
12962 if (yych <= '`')
12963 goto yy895;
12964 if (yych <= 'f')
12965 goto yy903;
12966 goto yy895;
12967 }
12968 yy899:
12969 yych = *++p;
12970 if (yych <= ';') {
12971 if (yych <= '/')
12972 goto yy895;
12973 if (yych <= '9')
12974 goto yy904;
12975 if (yych <= ':')
12976 goto yy895;
12977 goto yy901;
12978 } else {
12979 if (yych <= 'Z') {
12980 if (yych <= '@')
12981 goto yy895;
12982 goto yy904;
12983 } else {
12984 if (yych <= '`')
12985 goto yy895;
12986 if (yych <= 'z')
12987 goto yy904;
12988 goto yy895;
12989 }
12990 }
12991 yy900:
12992 yych = *++p;
12993 if (yych <= '/')
12994 goto yy895;
12995 if (yych <= '9')
12996 goto yy905;
12997 if (yych != ';')
12998 goto yy895;
12999 yy901:
13000 ++p;
13001 { return (bufsize_t)(p - start); }
13002 yy903:
13003 yych = *++p;
13004 if (yych <= ';') {
13005 if (yych <= '/')
13006 goto yy895;
13007 if (yych <= '9')
13008 goto yy906;
13009 if (yych <= ':')
13010 goto yy895;
13011 goto yy901;
13012 } else {
13013 if (yych <= 'F') {
13014 if (yych <= '@')
13015 goto yy895;
13016 goto yy906;
13017 } else {
13018 if (yych <= '`')
13019 goto yy895;
13020 if (yych <= 'f')
13021 goto yy906;
13022 goto yy895;
13023 }
13024 }
13025 yy904:
13026 yych = *++p;
13027 if (yych <= ';') {
13028 if (yych <= '/')
13029 goto yy895;
13030 if (yych <= '9')
13031 goto yy907;
13032 if (yych <= ':')
13033 goto yy895;
13034 goto yy901;
13035 } else {
13036 if (yych <= 'Z') {
13037 if (yych <= '@')
13038 goto yy895;
13039 goto yy907;
13040 } else {
13041 if (yych <= '`')
13042 goto yy895;
13043 if (yych <= 'z')
13044 goto yy907;
13045 goto yy895;
13046 }
13047 }
13048 yy905:
13049 yych = *++p;
13050 if (yych <= '/')
13051 goto yy895;
13052 if (yych <= '9')
13053 goto yy908;
13054 if (yych == ';')
13055 goto yy901;
13056 goto yy895;
13057 yy906:
13058 yych = *++p;
13059 if (yych <= ';') {
13060 if (yych <= '/')
13061 goto yy895;
13062 if (yych <= '9')
13063 goto yy909;
13064 if (yych <= ':')
13065 goto yy895;
13066 goto yy901;
13067 } else {
13068 if (yych <= 'F') {
13069 if (yych <= '@')
13070 goto yy895;
13071 goto yy909;
13072 } else {
13073 if (yych <= '`')
13074 goto yy895;
13075 if (yych <= 'f')
13076 goto yy909;
13077 goto yy895;
13078 }
13079 }
13080 yy907:
13081 yych = *++p;
13082 if (yych <= ';') {
13083 if (yych <= '/')
13084 goto yy895;
13085 if (yych <= '9')
13086 goto yy910;
13087 if (yych <= ':')
13088 goto yy895;
13089 goto yy901;
13090 } else {
13091 if (yych <= 'Z') {
13092 if (yych <= '@')
13093 goto yy895;
13094 goto yy910;
13095 } else {
13096 if (yych <= '`')
13097 goto yy895;
13098 if (yych <= 'z')
13099 goto yy910;
13100 goto yy895;
13101 }
13102 }
13103 yy908:
13104 yych = *++p;
13105 if (yych <= '/')
13106 goto yy895;
13107 if (yych <= '9')
13108 goto yy911;
13109 if (yych == ';')
13110 goto yy901;
13111 goto yy895;
13112 yy909:
13113 yych = *++p;
13114 if (yych <= ';') {
13115 if (yych <= '/')
13116 goto yy895;
13117 if (yych <= '9')
13118 goto yy912;
13119 if (yych <= ':')
13120 goto yy895;
13121 goto yy901;
13122 } else {
13123 if (yych <= 'F') {
13124 if (yych <= '@')
13125 goto yy895;
13126 goto yy912;
13127 } else {
13128 if (yych <= '`')
13129 goto yy895;
13130 if (yych <= 'f')
13131 goto yy912;
13132 goto yy895;
13133 }
13134 }
13135 yy910:
13136 yych = *++p;
13137 if (yych <= ';') {
13138 if (yych <= '/')
13139 goto yy895;
13140 if (yych <= '9')
13141 goto yy913;
13142 if (yych <= ':')
13143 goto yy895;
13144 goto yy901;
13145 } else {
13146 if (yych <= 'Z') {
13147 if (yych <= '@')
13148 goto yy895;
13149 goto yy913;
13150 } else {
13151 if (yych <= '`')
13152 goto yy895;
13153 if (yych <= 'z')
13154 goto yy913;
13155 goto yy895;
13156 }
13157 }
13158 yy911:
13159 yych = *++p;
13160 if (yych <= '/')
13161 goto yy895;
13162 if (yych <= '9')
13163 goto yy914;
13164 if (yych == ';')
13165 goto yy901;
13166 goto yy895;
13167 yy912:
13168 yych = *++p;
13169 if (yych <= ';') {
13170 if (yych <= '/')
13171 goto yy895;
13172 if (yych <= '9')
13173 goto yy915;
13174 if (yych <= ':')
13175 goto yy895;
13176 goto yy901;
13177 } else {
13178 if (yych <= 'F') {
13179 if (yych <= '@')
13180 goto yy895;
13181 goto yy915;
13182 } else {
13183 if (yych <= '`')
13184 goto yy895;
13185 if (yych <= 'f')
13186 goto yy915;
13187 goto yy895;
13188 }
13189 }
13190 yy913:
13191 yych = *++p;
13192 if (yych <= ';') {
13193 if (yych <= '/')
13194 goto yy895;
13195 if (yych <= '9')
13196 goto yy916;
13197 if (yych <= ':')
13198 goto yy895;
13199 goto yy901;
13200 } else {
13201 if (yych <= 'Z') {
13202 if (yych <= '@')
13203 goto yy895;
13204 goto yy916;
13205 } else {
13206 if (yych <= '`')
13207 goto yy895;
13208 if (yych <= 'z')
13209 goto yy916;
13210 goto yy895;
13211 }
13212 }
13213 yy914:
13214 yych = *++p;
13215 if (yych <= '/')
13216 goto yy895;
13217 if (yych <= '9')
13218 goto yy917;
13219 if (yych == ';')
13220 goto yy901;
13221 goto yy895;
13222 yy915:
13223 yych = *++p;
13224 if (yych <= ';') {
13225 if (yych <= '/')
13226 goto yy895;
13227 if (yych <= '9')
13228 goto yy918;
13229 if (yych <= ':')
13230 goto yy895;
13231 goto yy901;
13232 } else {
13233 if (yych <= 'F') {
13234 if (yych <= '@')
13235 goto yy895;
13236 goto yy918;
13237 } else {
13238 if (yych <= '`')
13239 goto yy895;
13240 if (yych <= 'f')
13241 goto yy918;
13242 goto yy895;
13243 }
13244 }
13245 yy916:
13246 yych = *++p;
13247 if (yych <= ';') {
13248 if (yych <= '/')
13249 goto yy895;
13250 if (yych <= '9')
13251 goto yy919;
13252 if (yych <= ':')
13253 goto yy895;
13254 goto yy901;
13255 } else {
13256 if (yych <= 'Z') {
13257 if (yych <= '@')
13258 goto yy895;
13259 goto yy919;
13260 } else {
13261 if (yych <= '`')
13262 goto yy895;
13263 if (yych <= 'z')
13264 goto yy919;
13265 goto yy895;
13266 }
13267 }
13268 yy917:
13269 yych = *++p;
13270 if (yych <= '/')
13271 goto yy895;
13272 if (yych <= '9')
13273 goto yy920;
13274 if (yych == ';')
13275 goto yy901;
13276 goto yy895;
13277 yy918:
13278 yych = *++p;
13279 if (yych <= ';') {
13280 if (yych <= '/')
13281 goto yy895;
13282 if (yych <= '9')
13283 goto yy921;
13284 if (yych <= ':')
13285 goto yy895;
13286 goto yy901;
13287 } else {
13288 if (yych <= 'F') {
13289 if (yych <= '@')
13290 goto yy895;
13291 goto yy921;
13292 } else {
13293 if (yych <= '`')
13294 goto yy895;
13295 if (yych <= 'f')
13296 goto yy921;
13297 goto yy895;
13298 }
13299 }
13300 yy919:
13301 yych = *++p;
13302 if (yych <= ';') {
13303 if (yych <= '/')
13304 goto yy895;
13305 if (yych <= '9')
13306 goto yy922;
13307 if (yych <= ':')
13308 goto yy895;
13309 goto yy901;
13310 } else {
13311 if (yych <= 'Z') {
13312 if (yych <= '@')
13313 goto yy895;
13314 goto yy922;
13315 } else {
13316 if (yych <= '`')
13317 goto yy895;
13318 if (yych <= 'z')
13319 goto yy922;
13320 goto yy895;
13321 }
13322 }
13323 yy920:
13324 yych = *++p;
13325 if (yych == ';')
13326 goto yy901;
13327 goto yy895;
13328 yy921:
13329 yych = *++p;
13330 if (yych <= ';') {
13331 if (yych <= '/')
13332 goto yy895;
13333 if (yych <= '9')
13334 goto yy920;
13335 if (yych <= ':')
13336 goto yy895;
13337 goto yy901;
13338 } else {
13339 if (yych <= 'F') {
13340 if (yych <= '@')
13341 goto yy895;
13342 goto yy920;
13343 } else {
13344 if (yych <= '`')
13345 goto yy895;
13346 if (yych <= 'f')
13347 goto yy920;
13348 goto yy895;
13349 }
13350 }
13351 yy922:
13352 yych = *++p;
13353 if (yych <= ';') {
13354 if (yych <= '/')
13355 goto yy895;
13356 if (yych <= '9')
13357 goto yy923;
13358 if (yych <= ':')
13359 goto yy895;
13360 goto yy901;
13361 } else {
13362 if (yych <= 'Z') {
13363 if (yych <= '@')
13364 goto yy895;
13365 } else {
13366 if (yych <= '`')
13367 goto yy895;
13368 if (yych >= '{')
13369 goto yy895;
13370 }
13371 }
13372 yy923:
13373 yych = *++p;
13374 if (yych <= ';') {
13375 if (yych <= '/')
13376 goto yy895;
13377 if (yych <= '9')
13378 goto yy924;
13379 if (yych <= ':')
13380 goto yy895;
13381 goto yy901;
13382 } else {
13383 if (yych <= 'Z') {
13384 if (yych <= '@')
13385 goto yy895;
13386 } else {
13387 if (yych <= '`')
13388 goto yy895;
13389 if (yych >= '{')
13390 goto yy895;
13391 }
13392 }
13393 yy924:
13394 yych = *++p;
13395 if (yych <= ';') {
13396 if (yych <= '/')
13397 goto yy895;
13398 if (yych <= '9')
13399 goto yy925;
13400 if (yych <= ':')
13401 goto yy895;
13402 goto yy901;
13403 } else {
13404 if (yych <= 'Z') {
13405 if (yych <= '@')
13406 goto yy895;
13407 } else {
13408 if (yych <= '`')
13409 goto yy895;
13410 if (yych >= '{')
13411 goto yy895;
13412 }
13413 }
13414 yy925:
13415 yych = *++p;
13416 if (yych <= ';') {
13417 if (yych <= '/')
13418 goto yy895;
13419 if (yych <= '9')
13420 goto yy926;
13421 if (yych <= ':')
13422 goto yy895;
13423 goto yy901;
13424 } else {
13425 if (yych <= 'Z') {
13426 if (yych <= '@')
13427 goto yy895;
13428 } else {
13429 if (yych <= '`')
13430 goto yy895;
13431 if (yych >= '{')
13432 goto yy895;
13433 }
13434 }
13435 yy926:
13436 yych = *++p;
13437 if (yych <= ';') {
13438 if (yych <= '/')
13439 goto yy895;
13440 if (yych <= '9')
13441 goto yy927;
13442 if (yych <= ':')
13443 goto yy895;
13444 goto yy901;
13445 } else {
13446 if (yych <= 'Z') {
13447 if (yych <= '@')
13448 goto yy895;
13449 } else {
13450 if (yych <= '`')
13451 goto yy895;
13452 if (yych >= '{')
13453 goto yy895;
13454 }
13455 }
13456 yy927:
13457 yych = *++p;
13458 if (yych <= ';') {
13459 if (yych <= '/')
13460 goto yy895;
13461 if (yych <= '9')
13462 goto yy928;
13463 if (yych <= ':')
13464 goto yy895;
13465 goto yy901;
13466 } else {
13467 if (yych <= 'Z') {
13468 if (yych <= '@')
13469 goto yy895;
13470 } else {
13471 if (yych <= '`')
13472 goto yy895;
13473 if (yych >= '{')
13474 goto yy895;
13475 }
13476 }
13477 yy928:
13478 yych = *++p;
13479 if (yych <= ';') {
13480 if (yych <= '/')
13481 goto yy895;
13482 if (yych <= '9')
13483 goto yy929;
13484 if (yych <= ':')
13485 goto yy895;
13486 goto yy901;
13487 } else {
13488 if (yych <= 'Z') {
13489 if (yych <= '@')
13490 goto yy895;
13491 } else {
13492 if (yych <= '`')
13493 goto yy895;
13494 if (yych >= '{')
13495 goto yy895;
13496 }
13497 }
13498 yy929:
13499 yych = *++p;
13500 if (yych <= ';') {
13501 if (yych <= '/')
13502 goto yy895;
13503 if (yych <= '9')
13504 goto yy930;
13505 if (yych <= ':')
13506 goto yy895;
13507 goto yy901;
13508 } else {
13509 if (yych <= 'Z') {
13510 if (yych <= '@')
13511 goto yy895;
13512 } else {
13513 if (yych <= '`')
13514 goto yy895;
13515 if (yych >= '{')
13516 goto yy895;
13517 }
13518 }
13519 yy930:
13520 yych = *++p;
13521 if (yych <= ';') {
13522 if (yych <= '/')
13523 goto yy895;
13524 if (yych <= '9')
13525 goto yy931;
13526 if (yych <= ':')
13527 goto yy895;
13528 goto yy901;
13529 } else {
13530 if (yych <= 'Z') {
13531 if (yych <= '@')
13532 goto yy895;
13533 } else {
13534 if (yych <= '`')
13535 goto yy895;
13536 if (yych >= '{')
13537 goto yy895;
13538 }
13539 }
13540 yy931:
13541 yych = *++p;
13542 if (yych <= ';') {
13543 if (yych <= '/')
13544 goto yy895;
13545 if (yych <= '9')
13546 goto yy932;
13547 if (yych <= ':')
13548 goto yy895;
13549 goto yy901;
13550 } else {
13551 if (yych <= 'Z') {
13552 if (yych <= '@')
13553 goto yy895;
13554 } else {
13555 if (yych <= '`')
13556 goto yy895;
13557 if (yych >= '{')
13558 goto yy895;
13559 }
13560 }
13561 yy932:
13562 yych = *++p;
13563 if (yych <= ';') {
13564 if (yych <= '/')
13565 goto yy895;
13566 if (yych <= '9')
13567 goto yy933;
13568 if (yych <= ':')
13569 goto yy895;
13570 goto yy901;
13571 } else {
13572 if (yych <= 'Z') {
13573 if (yych <= '@')
13574 goto yy895;
13575 } else {
13576 if (yych <= '`')
13577 goto yy895;
13578 if (yych >= '{')
13579 goto yy895;
13580 }
13581 }
13582 yy933:
13583 yych = *++p;
13584 if (yych <= ';') {
13585 if (yych <= '/')
13586 goto yy895;
13587 if (yych <= '9')
13588 goto yy934;
13589 if (yych <= ':')
13590 goto yy895;
13591 goto yy901;
13592 } else {
13593 if (yych <= 'Z') {
13594 if (yych <= '@')
13595 goto yy895;
13596 } else {
13597 if (yych <= '`')
13598 goto yy895;
13599 if (yych >= '{')
13600 goto yy895;
13601 }
13602 }
13603 yy934:
13604 yych = *++p;
13605 if (yych <= ';') {
13606 if (yych <= '/')
13607 goto yy895;
13608 if (yych <= '9')
13609 goto yy935;
13610 if (yych <= ':')
13611 goto yy895;
13612 goto yy901;
13613 } else {
13614 if (yych <= 'Z') {
13615 if (yych <= '@')
13616 goto yy895;
13617 } else {
13618 if (yych <= '`')
13619 goto yy895;
13620 if (yych >= '{')
13621 goto yy895;
13622 }
13623 }
13624 yy935:
13625 yych = *++p;
13626 if (yych <= ';') {
13627 if (yych <= '/')
13628 goto yy895;
13629 if (yych <= '9')
13630 goto yy936;
13631 if (yych <= ':')
13632 goto yy895;
13633 goto yy901;
13634 } else {
13635 if (yych <= 'Z') {
13636 if (yych <= '@')
13637 goto yy895;
13638 } else {
13639 if (yych <= '`')
13640 goto yy895;
13641 if (yych >= '{')
13642 goto yy895;
13643 }
13644 }
13645 yy936:
13646 yych = *++p;
13647 if (yych <= ';') {
13648 if (yych <= '/')
13649 goto yy895;
13650 if (yych <= '9')
13651 goto yy937;
13652 if (yych <= ':')
13653 goto yy895;
13654 goto yy901;
13655 } else {
13656 if (yych <= 'Z') {
13657 if (yych <= '@')
13658 goto yy895;
13659 } else {
13660 if (yych <= '`')
13661 goto yy895;
13662 if (yych >= '{')
13663 goto yy895;
13664 }
13665 }
13666 yy937:
13667 yych = *++p;
13668 if (yych <= ';') {
13669 if (yych <= '/')
13670 goto yy895;
13671 if (yych <= '9')
13672 goto yy938;
13673 if (yych <= ':')
13674 goto yy895;
13675 goto yy901;
13676 } else {
13677 if (yych <= 'Z') {
13678 if (yych <= '@')
13679 goto yy895;
13680 } else {
13681 if (yych <= '`')
13682 goto yy895;
13683 if (yych >= '{')
13684 goto yy895;
13685 }
13686 }
13687 yy938:
13688 yych = *++p;
13689 if (yych <= ';') {
13690 if (yych <= '/')
13691 goto yy895;
13692 if (yych <= '9')
13693 goto yy939;
13694 if (yych <= ':')
13695 goto yy895;
13696 goto yy901;
13697 } else {
13698 if (yych <= 'Z') {
13699 if (yych <= '@')
13700 goto yy895;
13701 } else {
13702 if (yych <= '`')
13703 goto yy895;
13704 if (yych >= '{')
13705 goto yy895;
13706 }
13707 }
13708 yy939:
13709 yych = *++p;
13710 if (yych <= ';') {
13711 if (yych <= '/')
13712 goto yy895;
13713 if (yych <= '9')
13714 goto yy940;
13715 if (yych <= ':')
13716 goto yy895;
13717 goto yy901;
13718 } else {
13719 if (yych <= 'Z') {
13720 if (yych <= '@')
13721 goto yy895;
13722 } else {
13723 if (yych <= '`')
13724 goto yy895;
13725 if (yych >= '{')
13726 goto yy895;
13727 }
13728 }
13729 yy940:
13730 yych = *++p;
13731 if (yych <= ';') {
13732 if (yych <= '/')
13733 goto yy895;
13734 if (yych <= '9')
13735 goto yy941;
13736 if (yych <= ':')
13737 goto yy895;
13738 goto yy901;
13739 } else {
13740 if (yych <= 'Z') {
13741 if (yych <= '@')
13742 goto yy895;
13743 } else {
13744 if (yych <= '`')
13745 goto yy895;
13746 if (yych >= '{')
13747 goto yy895;
13748 }
13749 }
13750 yy941:
13751 yych = *++p;
13752 if (yych <= ';') {
13753 if (yych <= '/')
13754 goto yy895;
13755 if (yych <= '9')
13756 goto yy942;
13757 if (yych <= ':')
13758 goto yy895;
13759 goto yy901;
13760 } else {
13761 if (yych <= 'Z') {
13762 if (yych <= '@')
13763 goto yy895;
13764 } else {
13765 if (yych <= '`')
13766 goto yy895;
13767 if (yych >= '{')
13768 goto yy895;
13769 }
13770 }
13771 yy942:
13772 yych = *++p;
13773 if (yych <= ';') {
13774 if (yych <= '/')
13775 goto yy895;
13776 if (yych <= '9')
13777 goto yy943;
13778 if (yych <= ':')
13779 goto yy895;
13780 goto yy901;
13781 } else {
13782 if (yych <= 'Z') {
13783 if (yych <= '@')
13784 goto yy895;
13785 } else {
13786 if (yych <= '`')
13787 goto yy895;
13788 if (yych >= '{')
13789 goto yy895;
13790 }
13791 }
13792 yy943:
13793 yych = *++p;
13794 if (yych <= ';') {
13795 if (yych <= '/')
13796 goto yy895;
13797 if (yych <= '9')
13798 goto yy944;
13799 if (yych <= ':')
13800 goto yy895;
13801 goto yy901;
13802 } else {
13803 if (yych <= 'Z') {
13804 if (yych <= '@')
13805 goto yy895;
13806 } else {
13807 if (yych <= '`')
13808 goto yy895;
13809 if (yych >= '{')
13810 goto yy895;
13811 }
13812 }
13813 yy944:
13814 ++p;
13815 if ((yych = *p) <= ';') {
13816 if (yych <= '/')
13817 goto yy895;
13818 if (yych <= '9')
13819 goto yy920;
13820 if (yych <= ':')
13821 goto yy895;
13822 goto yy901;
13823 } else {
13824 if (yych <= 'Z') {
13825 if (yych <= '@')
13826 goto yy895;
13827 goto yy920;
13828 } else {
13829 if (yych <= '`')
13830 goto yy895;
13831 if (yych <= 'z')
13832 goto yy920;
13833 goto yy895;
13834 }
13835 }
13836 }
13837 }
13838
13839 // Returns positive value if a URL begins in a way that is potentially
13840 // dangerous, with javascript:, vbscript:, file:, or data:, otherwise 0.
13841 bufsize_t _scan_dangerous_url(const unsigned char *p) {
13842 const unsigned char *marker = NULL;
13843 const unsigned char *start = p;
13844
13845 {
13846 unsigned char yych;
13847 unsigned int yyaccept = 0;
13848 yych = *p;
13849 if (yych <= 'V') {
13850 if (yych <= 'F') {
13851 if (yych == 'D')
13852 goto yy949;
13853 if (yych >= 'F')
13854 goto yy950;
13855 } else {
13856 if (yych == 'J')
13857 goto yy951;
13858 if (yych >= 'V')
13859 goto yy952;
13860 }
13861 } else {
13862 if (yych <= 'f') {
13863 if (yych == 'd')
13864 goto yy949;
13865 if (yych >= 'f')
13866 goto yy950;
13867 } else {
13868 if (yych <= 'j') {
13869 if (yych >= 'j')
13870 goto yy951;
13871 } else {
13872 if (yych == 'v')
13873 goto yy952;
13874 }
13875 }
13876 }
13877 ++p;
13878 yy948 : { return 0; }
13879 yy949:
13880 yyaccept = 0;
13881 yych = *(marker = ++p);
13882 if (yych == 'A')
13883 goto yy953;
13884 if (yych == 'a')
13885 goto yy953;
13886 goto yy948;
13887 yy950:
13888 yyaccept = 0;
13889 yych = *(marker = ++p);
13890 if (yych == 'I')
13891 goto yy955;
13892 if (yych == 'i')
13893 goto yy955;
13894 goto yy948;
13895 yy951:
13896 yyaccept = 0;
13897 yych = *(marker = ++p);
13898 if (yych == 'A')
13899 goto yy956;
13900 if (yych == 'a')
13901 goto yy956;
13902 goto yy948;
13903 yy952:
13904 yyaccept = 0;
13905 yych = *(marker = ++p);
13906 if (yych == 'B')
13907 goto yy957;
13908 if (yych == 'b')
13909 goto yy957;
13910 goto yy948;
13911 yy953:
13912 yych = *++p;
13913 if (yych == 'T')
13914 goto yy958;
13915 if (yych == 't')
13916 goto yy958;
13917 yy954:
13918 p = marker;
13919 if (yyaccept == 0) {
13920 goto yy948;
13921 } else {
13922 goto yy966;
13923 }
13924 yy955:
13925 yych = *++p;
13926 if (yych == 'L')
13927 goto yy959;
13928 if (yych == 'l')
13929 goto yy959;
13930 goto yy954;
13931 yy956:
13932 yych = *++p;
13933 if (yych == 'V')
13934 goto yy960;
13935 if (yych == 'v')
13936 goto yy960;
13937 goto yy954;
13938 yy957:
13939 yych = *++p;
13940 if (yych == 'S')
13941 goto yy961;
13942 if (yych == 's')
13943 goto yy961;
13944 goto yy954;
13945 yy958:
13946 yych = *++p;
13947 if (yych == 'A')
13948 goto yy962;
13949 if (yych == 'a')
13950 goto yy962;
13951 goto yy954;
13952 yy959:
13953 yych = *++p;
13954 if (yych == 'E')
13955 goto yy963;
13956 if (yych == 'e')
13957 goto yy963;
13958 goto yy954;
13959 yy960:
13960 yych = *++p;
13961 if (yych == 'A')
13962 goto yy957;
13963 if (yych == 'a')
13964 goto yy957;
13965 goto yy954;
13966 yy961:
13967 yych = *++p;
13968 if (yych == 'C')
13969 goto yy964;
13970 if (yych == 'c')
13971 goto yy964;
13972 goto yy954;
13973 yy962:
13974 yych = *++p;
13975 if (yych == ':')
13976 goto yy965;
13977 goto yy954;
13978 yy963:
13979 yych = *++p;
13980 if (yych == ':')
13981 goto yy967;
13982 goto yy954;
13983 yy964:
13984 yych = *++p;
13985 if (yych == 'R')
13986 goto yy968;
13987 if (yych == 'r')
13988 goto yy968;
13989 goto yy954;
13990 yy965:
13991 yyaccept = 1;
13992 yych = *(marker = ++p);
13993 if (yych == 'I')
13994 goto yy969;
13995 if (yych == 'i')
13996 goto yy969;
13997 yy966 : { return (bufsize_t)(p - start); }
13998 yy967:
13999 yych = *++p;
14000 goto yy966;
14001 yy968:
14002 yych = *++p;
14003 if (yych == 'I')
14004 goto yy970;
14005 if (yych == 'i')
14006 goto yy970;
14007 goto yy954;
14008 yy969:
14009 yych = *++p;
14010 if (yych == 'M')
14011 goto yy971;
14012 if (yych == 'm')
14013 goto yy971;
14014 goto yy954;
14015 yy970:
14016 yych = *++p;
14017 if (yych == 'P')
14018 goto yy972;
14019 if (yych == 'p')
14020 goto yy972;
14021 goto yy954;
14022 yy971:
14023 yych = *++p;
14024 if (yych == 'A')
14025 goto yy973;
14026 if (yych == 'a')
14027 goto yy973;
14028 goto yy954;
14029 yy972:
14030 yych = *++p;
14031 if (yych == 'T')
14032 goto yy963;
14033 if (yych == 't')
14034 goto yy963;
14035 goto yy954;
14036 yy973:
14037 yych = *++p;
14038 if (yych == 'G')
14039 goto yy974;
14040 if (yych != 'g')
14041 goto yy954;
14042 yy974:
14043 yych = *++p;
14044 if (yych == 'E')
14045 goto yy975;
14046 if (yych != 'e')
14047 goto yy954;
14048 yy975:
14049 yych = *++p;
14050 if (yych != '/')
14051 goto yy954;
14052 yych = *++p;
14053 if (yych <= 'W') {
14054 if (yych <= 'J') {
14055 if (yych == 'G')
14056 goto yy977;
14057 if (yych <= 'I')
14058 goto yy954;
14059 goto yy978;
14060 } else {
14061 if (yych == 'P')
14062 goto yy979;
14063 if (yych <= 'V')
14064 goto yy954;
14065 goto yy980;
14066 }
14067 } else {
14068 if (yych <= 'j') {
14069 if (yych == 'g')
14070 goto yy977;
14071 if (yych <= 'i')
14072 goto yy954;
14073 goto yy978;
14074 } else {
14075 if (yych <= 'p') {
14076 if (yych <= 'o')
14077 goto yy954;
14078 goto yy979;
14079 } else {
14080 if (yych == 'w')
14081 goto yy980;
14082 goto yy954;
14083 }
14084 }
14085 }
14086 yy977:
14087 yych = *++p;
14088 if (yych == 'I')
14089 goto yy981;
14090 if (yych == 'i')
14091 goto yy981;
14092 goto yy954;
14093 yy978:
14094 yych = *++p;
14095 if (yych == 'P')
14096 goto yy982;
14097 if (yych == 'p')
14098 goto yy982;
14099 goto yy954;
14100 yy979:
14101 yych = *++p;
14102 if (yych == 'N')
14103 goto yy983;
14104 if (yych == 'n')
14105 goto yy983;
14106 goto yy954;
14107 yy980:
14108 yych = *++p;
14109 if (yych == 'E')
14110 goto yy984;
14111 if (yych == 'e')
14112 goto yy984;
14113 goto yy954;
14114 yy981:
14115 yych = *++p;
14116 if (yych == 'F')
14117 goto yy985;
14118 if (yych == 'f')
14119 goto yy985;
14120 goto yy954;
14121 yy982:
14122 yych = *++p;
14123 if (yych == 'E')
14124 goto yy983;
14125 if (yych != 'e')
14126 goto yy954;
14127 yy983:
14128 yych = *++p;
14129 if (yych == 'G')
14130 goto yy985;
14131 if (yych == 'g')
14132 goto yy985;
14133 goto yy954;
14134 yy984:
14135 yych = *++p;
14136 if (yych == 'B')
14137 goto yy987;
14138 if (yych == 'b')
14139 goto yy987;
14140 goto yy954;
14141 yy985:
14142 ++p;
14143 { return 0; }
14144 yy987:
14145 ++p;
14146 if ((yych = *p) == 'P')
14147 goto yy985;
14148 if (yych == 'p')
14149 goto yy985;
14150 goto yy954;
14151 }
14152 }
14153
14154
14155 static const char *EMDASH = "\xE2\x80\x94";
14156 static const char *ENDASH = "\xE2\x80\x93";
14157 static const char *ELLIPSES = "\xE2\x80\xA6";
14158 static const char *LEFTDOUBLEQUOTE = "\xE2\x80\x9C";
14159 static const char *RIGHTDOUBLEQUOTE = "\xE2\x80\x9D";
14160 static const char *LEFTSINGLEQUOTE = "\xE2\x80\x98";
14161 static const char *RIGHTSINGLEQUOTE = "\xE2\x80\x99";
14162
14163 // Macros for creating various kinds of simple.
14164 #define make_str(mem, s) make_literal(mem, CMARK_NODE_TEXT, s)
14165 #define make_code(mem, s) make_literal(mem, CMARK_NODE_CODE, s)
14166 #define make_raw_html(mem, s) make_literal(mem, CMARK_NODE_HTML_INLINE, s)
14167 #define make_linebreak(mem) make_simple(mem, CMARK_NODE_LINEBREAK)
14168 #define make_softbreak(mem) make_simple(mem, CMARK_NODE_SOFTBREAK)
14169 #define make_emph(mem) make_simple(mem, CMARK_NODE_EMPH)
14170 #define make_strong(mem) make_simple(mem, CMARK_NODE_STRONG)
14171
14172 #define MAXBACKTICKS 1000
14173
14174 typedef struct delimiter {
14175 struct delimiter *previous;
14176 struct delimiter *next;
14177 cmark_node *inl_text;
14178 bufsize_t length;
14179 unsigned char delim_char;
14180 bool can_open;
14181 bool can_close;
14182 } delimiter;
14183
14184 typedef struct bracket {
14185 struct bracket *previous;
14186 struct delimiter *previous_delimiter;
14187 cmark_node *inl_text;
14188 bufsize_t position;
14189 bool image;
14190 bool active;
14191 bool bracket_after;
14192 } bracket;
14193
14194 typedef struct {
14195 cmark_mem *mem;
14196 cmark_chunk input;
14197 bufsize_t pos;
14198 cmark_reference_map *refmap;
14199 delimiter *last_delim;
14200 bracket *last_bracket;
14201 bufsize_t backticks[MAXBACKTICKS + 1];
14202 bool scanned_for_backticks;
14203 } subject;
14204
14205 static CMARK_INLINE bool S_is_line_end_char(char c) {
14206 return (c == '\n' || c == '\r');
14207 }
14208
14209 static delimiter *S_insert_emph(subject *subj, delimiter *opener,
14210 delimiter *closer);
14211
14212 static int parse_inline(subject *subj, cmark_node *parent, int options);
14213
14214 static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer,
14215 cmark_reference_map *refmap);
14216 static bufsize_t subject_find_special_char(subject *subj, int options);
14217
14218 // Create an inline with a literal string value.
14219 static CMARK_INLINE cmark_node *make_literal(cmark_mem *mem, cmark_node_type t,
14220 cmark_chunk s) {
14221 cmark_node *e = (cmark_node *)mem->calloc(1, sizeof(*e));
14222 cmark_strbuf_init(mem, &e->content, 0);
14223 e->type = t;
14224 e->as.literal = s;
14225 return e;
14226 }
14227
14228 // Create an inline with no value.
14229 static CMARK_INLINE cmark_node *make_simple(cmark_mem *mem, cmark_node_type t) {
14230 cmark_node *e = (cmark_node *)mem->calloc(1, sizeof(*e));
14231 cmark_strbuf_init(mem, &e->content, 0);
14232 e->type = t;
14233 return e;
14234 }
14235
14236 // Like make_str, but parses entities.
14237 static cmark_node *make_str_with_entities(cmark_mem *mem,
14238 cmark_chunk *content) {
14239 cmark_strbuf unescaped = CMARK_BUF_INIT(mem);
14240
14241 if (houdini_unescape_html(&unescaped, content->data, content->len)) {
14242 return make_str(mem, cmark_chunk_buf_detach(&unescaped));
14243 } else {
14244 return make_str(mem, *content);
14245 }
14246 }
14247
14248 // Duplicate a chunk by creating a copy of the buffer not by reusing the
14249 // buffer like cmark_chunk_dup does.
14250 static cmark_chunk chunk_clone(cmark_mem *mem, cmark_chunk *src) {
14251 cmark_chunk c;
14252 bufsize_t len = src->len;
14253
14254 c.len = len;
14255 c.data = (unsigned char *)mem->calloc(len + 1, 1);
14256 c.alloc = 1;
14257 memcpy(c.data, src->data, len);
14258 c.data[len] = '\0';
14259
14260 return c;
14261 }
14262
14263 static cmark_chunk cmark_clean_autolink(cmark_mem *mem, cmark_chunk *url,
14264 int is_email) {
14265 cmark_strbuf buf = CMARK_BUF_INIT(mem);
14266
14267 cmark_chunk_trim(url);
14268
14269 if (url->len == 0) {
14270 cmark_chunk result = CMARK_CHUNK_EMPTY;
14271 return result;
14272 }
14273
14274 if (is_email)
14275 cmark_strbuf_puts(&buf, "mailto:");
14276
14277 houdini_unescape_html_f(&buf, url->data, url->len);
14278 return cmark_chunk_buf_detach(&buf);
14279 }
14280
14281 static CMARK_INLINE cmark_node *make_autolink(cmark_mem *mem, cmark_chunk url,
14282 int is_email) {
14283 cmark_node *link = make_simple(mem, CMARK_NODE_LINK);
14284 link->as.link.url = cmark_clean_autolink(mem, &url, is_email);
14285 link->as.link.title = cmark_chunk_literal("");
14286 cmark_node_append_child(link, make_str_with_entities(mem, &url));
14287 return link;
14288 }
14289
14290 static void subject_from_buf(cmark_mem *mem, subject *e, cmark_strbuf *buffer,
14291 cmark_reference_map *refmap) {
14292 int i;
14293 e->mem = mem;
14294 e->input.data = buffer->ptr;
14295 e->input.len = buffer->size;
14296 e->input.alloc = 0;
14297 e->pos = 0;
14298 e->refmap = refmap;
14299 e->last_delim = NULL;
14300 e->last_bracket = NULL;
14301 for (i = 0; i <= MAXBACKTICKS; i++) {
14302 e->backticks[i] = 0;
14303 }
14304 e->scanned_for_backticks = false;
14305 }
14306
14307 static CMARK_INLINE int isbacktick(int c) { return (c == '`'); }
14308
14309 static CMARK_INLINE unsigned char peek_char(subject *subj) {
14310 // NULL bytes should have been stripped out by now. If they're
14311 // present, it's a programming error:
14312 assert(!(subj->pos < subj->input.len && subj->input.data[subj->pos] == 0));
14313 return (subj->pos < subj->input.len) ? subj->input.data[subj->pos] : 0;
14314 }
14315
14316 static CMARK_INLINE unsigned char peek_at(subject *subj, bufsize_t pos) {
14317 return subj->input.data[pos];
14318 }
14319
14320 // Return true if there are more characters in the subject.
14321 static CMARK_INLINE int is_eof(subject *subj) {
14322 return (subj->pos >= subj->input.len);
14323 }
14324
14325 // Advance the subject. Doesn't check for eof.
14326 #define advance(subj) (subj)->pos += 1
14327
14328 static CMARK_INLINE bool skip_spaces(subject *subj) {
14329 bool skipped = false;
14330 while (peek_char(subj) == ' ' || peek_char(subj) == '\t') {
14331 advance(subj);
14332 skipped = true;
14333 }
14334 return skipped;
14335 }
14336
14337 static CMARK_INLINE bool skip_line_end(subject *subj) {
14338 bool seen_line_end_char = false;
14339 if (peek_char(subj) == '\r') {
14340 advance(subj);
14341 seen_line_end_char = true;
14342 }
14343 if (peek_char(subj) == '\n') {
14344 advance(subj);
14345 seen_line_end_char = true;
14346 }
14347 return seen_line_end_char || is_eof(subj);
14348 }
14349
14350 // Take characters while a predicate holds, and return a string.
14351 static CMARK_INLINE cmark_chunk take_while(subject *subj, int (*f)(int)) {
14352 unsigned char c;
14353 bufsize_t startpos = subj->pos;
14354 bufsize_t len = 0;
14355
14356 while ((c = peek_char(subj)) && (*f)(c)) {
14357 advance(subj);
14358 len++;
14359 }
14360
14361 return cmark_chunk_dup(&subj->input, startpos, len);
14362 }
14363
14364 // Try to process a backtick code span that began with a
14365 // span of ticks of length openticklength length (already
14366 // parsed). Return 0 if you don't find matching closing
14367 // backticks, otherwise return the position in the subject
14368 // after the closing backticks.
14369 static bufsize_t scan_to_closing_backticks(subject *subj,
14370 bufsize_t openticklength) {
14371
14372 bool found = false;
14373 if (openticklength > MAXBACKTICKS) {
14374 // we limit backtick string length because of the array subj->backticks:
14375 return 0;
14376 }
14377 if (subj->scanned_for_backticks &&
14378 subj->backticks[openticklength] <= subj->pos) {
14379 // return if we already know there's no closer
14380 return 0;
14381 }
14382 while (!found) {
14383 // read non backticks
14384 unsigned char c;
14385 while ((c = peek_char(subj)) && c != '`') {
14386 advance(subj);
14387 }
14388 if (is_eof(subj)) {
14389 break;
14390 }
14391 bufsize_t numticks = 0;
14392 while (peek_char(subj) == '`') {
14393 advance(subj);
14394 numticks++;
14395 }
14396 // store position of ender
14397 if (numticks <= MAXBACKTICKS) {
14398 subj->backticks[numticks] = subj->pos - numticks;
14399 }
14400 if (numticks == openticklength) {
14401 return (subj->pos);
14402 }
14403 }
14404 // got through whole input without finding closer
14405 subj->scanned_for_backticks = true;
14406 return 0;
14407 }
14408
14409 // Parse backtick code section or raw backticks, return an inline.
14410 // Assumes that the subject has a backtick at the current position.
14411 static cmark_node *handle_backticks(subject *subj) {
14412 cmark_chunk openticks = take_while(subj, isbacktick);
14413 bufsize_t startpos = subj->pos;
14414 bufsize_t endpos = scan_to_closing_backticks(subj, openticks.len);
14415
14416 if (endpos == 0) { // not found
14417 subj->pos = startpos; // rewind
14418 return make_str(subj->mem, openticks);
14419 } else {
14420 cmark_strbuf buf = CMARK_BUF_INIT(subj->mem);
14421
14422 cmark_strbuf_set(&buf, subj->input.data + startpos,
14423 endpos - startpos - openticks.len);
14424 cmark_strbuf_trim(&buf);
14425 cmark_strbuf_normalize_whitespace(&buf);
14426
14427 return make_code(subj->mem, cmark_chunk_buf_detach(&buf));
14428 }
14429 }
14430
14431 // Scan ***, **, or * and return number scanned, or 0.
14432 // Advances position.
14433 static int scan_delims(subject *subj, unsigned char c, bool *can_open,
14434 bool *can_close) {
14435 int numdelims = 0;
14436 bufsize_t before_char_pos;
14437 int32_t after_char = 0;
14438 int32_t before_char = 0;
14439 int len;
14440 bool left_flanking, right_flanking;
14441
14442 if (subj->pos == 0) {
14443 before_char = 10;
14444 } else {
14445 before_char_pos = subj->pos - 1;
14446 // walk back to the beginning of the UTF_8 sequence:
14447 while (peek_at(subj, before_char_pos) >> 6 == 2 && before_char_pos > 0) {
14448 before_char_pos -= 1;
14449 }
14450 len = cmark_utf8proc_iterate(subj->input.data + before_char_pos,
14451 subj->pos - before_char_pos, &before_char);
14452 if (len == -1) {
14453 before_char = 10;
14454 }
14455 }
14456
14457 if (c == '\'' || c == '"') {
14458 numdelims++;
14459 advance(subj); // limit to 1 delim for quotes
14460 } else {
14461 while (peek_char(subj) == c) {
14462 numdelims++;
14463 advance(subj);
14464 }
14465 }
14466
14467 len = cmark_utf8proc_iterate(subj->input.data + subj->pos,
14468 subj->input.len - subj->pos, &after_char);
14469 if (len == -1) {
14470 after_char = 10;
14471 }
14472 left_flanking = numdelims > 0 && !cmark_utf8proc_is_space(after_char) &&
14473 !(cmark_utf8proc_is_punctuation(after_char) &&
14474 !cmark_utf8proc_is_space(before_char) &&
14475 !cmark_utf8proc_is_punctuation(before_char));
14476 right_flanking = numdelims > 0 && !cmark_utf8proc_is_space(before_char) &&
14477 !(cmark_utf8proc_is_punctuation(before_char) &&
14478 !cmark_utf8proc_is_space(after_char) &&
14479 !cmark_utf8proc_is_punctuation(after_char));
14480 if (c == '_') {
14481 *can_open = left_flanking &&
14482 (!right_flanking || cmark_utf8proc_is_punctuation(before_char));
14483 *can_close = right_flanking &&
14484 (!left_flanking || cmark_utf8proc_is_punctuation(after_char));
14485 } else if (c == '\'' || c == '"') {
14486 *can_open = left_flanking && !right_flanking;
14487 *can_close = right_flanking;
14488 } else {
14489 *can_open = left_flanking;
14490 *can_close = right_flanking;
14491 }
14492 return numdelims;
14493 }
14494
14495 /*
14496 static void print_delimiters(subject *subj)
14497 {
14498 delimiter *delim;
14499 delim = subj->last_delim;
14500 while (delim != NULL) {
14501 printf("Item at stack pos %p: %d %d %d next(%p) prev(%p)\n",
14502 (void*)delim, delim->delim_char,
14503 delim->can_open, delim->can_close,
14504 (void*)delim->next, (void*)delim->previous);
14505 delim = delim->previous;
14506 }
14507 }
14508 */
14509
14510 static void remove_delimiter(subject *subj, delimiter *delim) {
14511 if (delim == NULL)
14512 return;
14513 if (delim->next == NULL) {
14514 // end of list:
14515 assert(delim == subj->last_delim);
14516 subj->last_delim = delim->previous;
14517 } else {
14518 delim->next->previous = delim->previous;
14519 }
14520 if (delim->previous != NULL) {
14521 delim->previous->next = delim->next;
14522 }
14523 subj->mem->free(delim);
14524 }
14525
14526 static void pop_bracket(subject *subj) {
14527 bracket *b;
14528 if (subj->last_bracket == NULL)
14529 return;
14530 b = subj->last_bracket;
14531 subj->last_bracket = subj->last_bracket->previous;
14532 subj->mem->free(b);
14533 }
14534
14535 static void push_delimiter(subject *subj, unsigned char c, bool can_open,
14536 bool can_close, cmark_node *inl_text) {
14537 delimiter *delim = (delimiter *)subj->mem->calloc(1, sizeof(delimiter));
14538 delim->delim_char = c;
14539 delim->can_open = can_open;
14540 delim->can_close = can_close;
14541 delim->inl_text = inl_text;
14542 delim->length = inl_text->as.literal.len;
14543 delim->previous = subj->last_delim;
14544 delim->next = NULL;
14545 if (delim->previous != NULL) {
14546 delim->previous->next = delim;
14547 }
14548 subj->last_delim = delim;
14549 }
14550
14551 static void push_bracket(subject *subj, bool image, cmark_node *inl_text) {
14552 bracket *b = (bracket *)subj->mem->calloc(1, sizeof(bracket));
14553 if (subj->last_bracket != NULL) {
14554 subj->last_bracket->bracket_after = true;
14555 }
14556 b->image = image;
14557 b->active = true;
14558 b->inl_text = inl_text;
14559 b->previous = subj->last_bracket;
14560 b->previous_delimiter = subj->last_delim;
14561 b->position = subj->pos;
14562 b->bracket_after = false;
14563 subj->last_bracket = b;
14564 }
14565
14566 // Assumes the subject has a c at the current position.
14567 static cmark_node *handle_delim(subject *subj, unsigned char c, bool smart) {
14568 bufsize_t numdelims;
14569 cmark_node *inl_text;
14570 bool can_open, can_close;
14571 cmark_chunk contents;
14572
14573 numdelims = scan_delims(subj, c, &can_open, &can_close);
14574
14575 if (c == '\'' && smart) {
14576 contents = cmark_chunk_literal(RIGHTSINGLEQUOTE);
14577 } else if (c == '"' && smart) {
14578 contents =
14579 cmark_chunk_literal(can_close ? RIGHTDOUBLEQUOTE : LEFTDOUBLEQUOTE);
14580 } else {
14581 contents = cmark_chunk_dup(&subj->input, subj->pos - numdelims, numdelims);
14582 }
14583
14584 inl_text = make_str(subj->mem, contents);
14585
14586 if ((can_open || can_close) && (!(c == '\'' || c == '"') || smart)) {
14587 push_delimiter(subj, c, can_open, can_close, inl_text);
14588 }
14589
14590 return inl_text;
14591 }
14592
14593 // Assumes we have a hyphen at the current position.
14594 static cmark_node *handle_hyphen(subject *subj, bool smart) {
14595 int startpos = subj->pos;
14596
14597 advance(subj);
14598
14599 if (!smart || peek_char(subj) != '-') {
14600 return make_str(subj->mem, cmark_chunk_literal("-"));
14601 }
14602
14603 while (smart && peek_char(subj) == '-') {
14604 advance(subj);
14605 }
14606
14607 int numhyphens = subj->pos - startpos;
14608 int en_count = 0;
14609 int em_count = 0;
14610 int i;
14611 cmark_strbuf buf = CMARK_BUF_INIT(subj->mem);
14612
14613 if (numhyphens % 3 == 0) { // if divisible by 3, use all em dashes
14614 em_count = numhyphens / 3;
14615 } else if (numhyphens % 2 == 0) { // if divisible by 2, use all en dashes
14616 en_count = numhyphens / 2;
14617 } else if (numhyphens % 3 == 2) { // use one en dash at end
14618 en_count = 1;
14619 em_count = (numhyphens - 2) / 3;
14620 } else { // use two en dashes at the end
14621 en_count = 2;
14622 em_count = (numhyphens - 4) / 3;
14623 }
14624
14625 for (i = em_count; i > 0; i--) {
14626 cmark_strbuf_puts(&buf, EMDASH);
14627 }
14628
14629 for (i = en_count; i > 0; i--) {
14630 cmark_strbuf_puts(&buf, ENDASH);
14631 }
14632
14633 return make_str(subj->mem, cmark_chunk_buf_detach(&buf));
14634 }
14635
14636 // Assumes we have a period at the current position.
14637 static cmark_node *handle_period(subject *subj, bool smart) {
14638 advance(subj);
14639 if (smart && peek_char(subj) == '.') {
14640 advance(subj);
14641 if (peek_char(subj) == '.') {
14642 advance(subj);
14643 return make_str(subj->mem, cmark_chunk_literal(ELLIPSES));
14644 } else {
14645 return make_str(subj->mem, cmark_chunk_literal(".."));
14646 }
14647 } else {
14648 return make_str(subj->mem, cmark_chunk_literal("."));
14649 }
14650 }
14651
14652 static void process_emphasis(subject *subj, delimiter *stack_bottom) {
14653 delimiter *closer = subj->last_delim;
14654 delimiter *opener;
14655 delimiter *old_closer;
14656 bool opener_found;
14657 int openers_bottom_index;
14658 delimiter *openers_bottom[6] = {stack_bottom, stack_bottom, stack_bottom,
14659 stack_bottom, stack_bottom, stack_bottom};
14660
14661 // move back to first relevant delim.
14662 while (closer != NULL && closer->previous != stack_bottom) {
14663 closer = closer->previous;
14664 }
14665
14666 // now move forward, looking for closers, and handling each
14667 while (closer != NULL) {
14668 if (closer->can_close) {
14669 switch (closer->delim_char) {
14670 case '"':
14671 openers_bottom_index = 0;
14672 break;
14673 case '\'':
14674 openers_bottom_index = 1;
14675 break;
14676 case '_':
14677 openers_bottom_index = 2;
14678 break;
14679 case '*':
14680 openers_bottom_index = 3 + (closer->length % 3);
14681 break;
14682 default:
14683 assert(false);
14684 }
14685
14686 // Now look backwards for first matching opener:
14687 opener = closer->previous;
14688 opener_found = false;
14689 while (opener != NULL && opener != openers_bottom[openers_bottom_index]) {
14690 if (opener->can_open && opener->delim_char == closer->delim_char) {
14691 // interior closer of size 2 can't match opener of size 1
14692 // or of size 1 can't match 2
14693 if (!(closer->can_open || opener->can_close) ||
14694 ((opener->length + closer->length) % 3) != 0) {
14695 opener_found = true;
14696 break;
14697 }
14698 }
14699 opener = opener->previous;
14700 }
14701 old_closer = closer;
14702 if (closer->delim_char == '*' || closer->delim_char == '_') {
14703 if (opener_found) {
14704 closer = S_insert_emph(subj, opener, closer);
14705 } else {
14706 closer = closer->next;
14707 }
14708 } else if (closer->delim_char == '\'') {
14709 cmark_chunk_free(subj->mem, &closer->inl_text->as.literal);
14710 closer->inl_text->as.literal = cmark_chunk_literal(RIGHTSINGLEQUOTE);
14711 if (opener_found) {
14712 cmark_chunk_free(subj->mem, &opener->inl_text->as.literal);
14713 opener->inl_text->as.literal = cmark_chunk_literal(LEFTSINGLEQUOTE);
14714 }
14715 closer = closer->next;
14716 } else if (closer->delim_char == '"') {
14717 cmark_chunk_free(subj->mem, &closer->inl_text->as.literal);
14718 closer->inl_text->as.literal = cmark_chunk_literal(RIGHTDOUBLEQUOTE);
14719 if (opener_found) {
14720 cmark_chunk_free(subj->mem, &opener->inl_text->as.literal);
14721 opener->inl_text->as.literal = cmark_chunk_literal(LEFTDOUBLEQUOTE);
14722 }
14723 closer = closer->next;
14724 }
14725 if (!opener_found) {
14726 // set lower bound for future searches for openers
14727 openers_bottom[openers_bottom_index] = old_closer->previous;
14728 if (!old_closer->can_open) {
14729 // we can remove a closer that can't be an
14730 // opener, once we've seen there's no
14731 // matching opener:
14732 remove_delimiter(subj, old_closer);
14733 }
14734 }
14735 } else {
14736 closer = closer->next;
14737 }
14738 }
14739 // free all delimiters in list until stack_bottom:
14740 while (subj->last_delim != NULL && subj->last_delim != stack_bottom) {
14741 remove_delimiter(subj, subj->last_delim);
14742 }
14743 }
14744
14745 static delimiter *S_insert_emph(subject *subj, delimiter *opener,
14746 delimiter *closer) {
14747 delimiter *delim, *tmp_delim;
14748 bufsize_t use_delims;
14749 cmark_node *opener_inl = opener->inl_text;
14750 cmark_node *closer_inl = closer->inl_text;
14751 bufsize_t opener_num_chars = opener_inl->as.literal.len;
14752 bufsize_t closer_num_chars = closer_inl->as.literal.len;
14753 cmark_node *tmp, *tmpnext, *emph;
14754
14755 // calculate the actual number of characters used from this closer
14756 use_delims = (closer_num_chars >= 2 && opener_num_chars >=2) ? 2 : 1;
14757
14758 // remove used characters from associated inlines.
14759 opener_num_chars -= use_delims;
14760 closer_num_chars -= use_delims;
14761 opener_inl->as.literal.len = opener_num_chars;
14762 closer_inl->as.literal.len = closer_num_chars;
14763
14764 // free delimiters between opener and closer
14765 delim = closer->previous;
14766 while (delim != NULL && delim != opener) {
14767 tmp_delim = delim->previous;
14768 remove_delimiter(subj, delim);
14769 delim = tmp_delim;
14770 }
14771
14772 // create new emph or strong, and splice it in to our inlines
14773 // between the opener and closer
14774 emph = use_delims == 1 ? make_emph(subj->mem) : make_strong(subj->mem);
14775
14776 tmp = opener_inl->next;
14777 while (tmp && tmp != closer_inl) {
14778 tmpnext = tmp->next;
14779 cmark_node_append_child(emph, tmp);
14780 tmp = tmpnext;
14781 }
14782 cmark_node_insert_after(opener_inl, emph);
14783
14784 // if opener has 0 characters, remove it and its associated inline
14785 if (opener_num_chars == 0) {
14786 cmark_node_free(opener_inl);
14787 remove_delimiter(subj, opener);
14788 }
14789
14790 // if closer has 0 characters, remove it and its associated inline
14791 if (closer_num_chars == 0) {
14792 // remove empty closer inline
14793 cmark_node_free(closer_inl);
14794 // remove closer from list
14795 tmp_delim = closer->next;
14796 remove_delimiter(subj, closer);
14797 closer = tmp_delim;
14798 }
14799
14800 return closer;
14801 }
14802
14803 // Parse backslash-escape or just a backslash, returning an inline.
14804 static cmark_node *handle_backslash(subject *subj) {
14805 advance(subj);
14806 unsigned char nextchar = peek_char(subj);
14807 if (cmark_ispunct(
14808 nextchar)) { // only ascii symbols and newline can be escaped
14809 advance(subj);
14810 return make_str(subj->mem, cmark_chunk_dup(&subj->input, subj->pos - 1, 1));
14811 } else if (!is_eof(subj) && skip_line_end(subj)) {
14812 return make_linebreak(subj->mem);
14813 } else {
14814 return make_str(subj->mem, cmark_chunk_literal("\\"));
14815 }
14816 }
14817
14818 // Parse an entity or a regular "&" string.
14819 // Assumes the subject has an '&' character at the current position.
14820 static cmark_node *handle_entity(subject *subj) {
14821 cmark_strbuf ent = CMARK_BUF_INIT(subj->mem);
14822 bufsize_t len;
14823
14824 advance(subj);
14825
14826 len = houdini_unescape_ent(&ent, subj->input.data + subj->pos,
14827 subj->input.len - subj->pos);
14828
14829 if (len == 0)
14830 return make_str(subj->mem, cmark_chunk_literal("&"));
14831
14832 subj->pos += len;
14833 return make_str(subj->mem, cmark_chunk_buf_detach(&ent));
14834 }
14835
14836 // Clean a URL: remove surrounding whitespace and surrounding <>,
14837 // and remove \ that escape punctuation.
14838 cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url) {
14839 cmark_strbuf buf = CMARK_BUF_INIT(mem);
14840
14841 cmark_chunk_trim(url);
14842
14843 if (url->len == 0) {
14844 cmark_chunk result = CMARK_CHUNK_EMPTY;
14845 return result;
14846 }
14847
14848 if (url->data[0] == '<' && url->data[url->len - 1] == '>') {
14849 houdini_unescape_html_f(&buf, url->data + 1, url->len - 2);
14850 } else {
14851 houdini_unescape_html_f(&buf, url->data, url->len);
14852 }
14853
14854 cmark_strbuf_unescape(&buf);
14855 return cmark_chunk_buf_detach(&buf);
14856 }
14857
14858 cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title) {
14859 cmark_strbuf buf = CMARK_BUF_INIT(mem);
14860 unsigned char first, last;
14861
14862 if (title->len == 0) {
14863 cmark_chunk result = CMARK_CHUNK_EMPTY;
14864 return result;
14865 }
14866
14867 first = title->data[0];
14868 last = title->data[title->len - 1];
14869
14870 // remove surrounding quotes if any:
14871 if ((first == '\'' && last == '\'') || (first == '(' && last == ')') ||
14872 (first == '"' && last == '"')) {
14873 houdini_unescape_html_f(&buf, title->data + 1, title->len - 2);
14874 } else {
14875 houdini_unescape_html_f(&buf, title->data, title->len);
14876 }
14877
14878 cmark_strbuf_unescape(&buf);
14879 return cmark_chunk_buf_detach(&buf);
14880 }
14881
14882 // Parse an autolink or HTML tag.
14883 // Assumes the subject has a '<' character at the current position.
14884 static cmark_node *handle_pointy_brace(subject *subj) {
14885 bufsize_t matchlen = 0;
14886 cmark_chunk contents;
14887
14888 advance(subj); // advance past first <
14889
14890 // first try to match a URL autolink
14891 matchlen = scan_autolink_uri(&subj->input, subj->pos);
14892 if (matchlen > 0) {
14893 contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1);
14894 subj->pos += matchlen;
14895
14896 return make_autolink(subj->mem, contents, 0);
14897 }
14898
14899 // next try to match an email autolink
14900 matchlen = scan_autolink_email(&subj->input, subj->pos);
14901 if (matchlen > 0) {
14902 contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1);
14903 subj->pos += matchlen;
14904
14905 return make_autolink(subj->mem, contents, 1);
14906 }
14907
14908 // finally, try to match an html tag
14909 matchlen = scan_html_tag(&subj->input, subj->pos);
14910 if (matchlen > 0) {
14911 contents = cmark_chunk_dup(&subj->input, subj->pos - 1, matchlen + 1);
14912 subj->pos += matchlen;
14913 return make_raw_html(subj->mem, contents);
14914 }
14915
14916 // if nothing matches, just return the opening <:
14917 return make_str(subj->mem, cmark_chunk_literal("<"));
14918 }
14919
14920 // Parse a link label. Returns 1 if successful.
14921 // Note: unescaped brackets are not allowed in labels.
14922 // The label begins with `[` and ends with the first `]` character
14923 // encountered. Backticks in labels do not start code spans.
14924 static int link_label(subject *subj, cmark_chunk *raw_label) {
14925 bufsize_t startpos = subj->pos;
14926 int length = 0;
14927 unsigned char c;
14928
14929 // advance past [
14930 if (peek_char(subj) == '[') {
14931 advance(subj);
14932 } else {
14933 return 0;
14934 }
14935
14936 while ((c = peek_char(subj)) && c != '[' && c != ']') {
14937 if (c == '\\') {
14938 advance(subj);
14939 length++;
14940 if (cmark_ispunct(peek_char(subj))) {
14941 advance(subj);
14942 length++;
14943 }
14944 } else {
14945 advance(subj);
14946 length++;
14947 }
14948 if (length > MAX_LINK_LABEL_LENGTH) {
14949 goto noMatch;
14950 }
14951 }
14952
14953 if (c == ']') { // match found
14954 *raw_label =
14955 cmark_chunk_dup(&subj->input, startpos + 1, subj->pos - (startpos + 1));
14956 cmark_chunk_trim(raw_label);
14957 advance(subj); // advance past ]
14958 return 1;
14959 }
14960
14961 noMatch:
14962 subj->pos = startpos; // rewind
14963 return 0;
14964 }
14965 static bufsize_t manual_scan_link_url(cmark_chunk *input, bufsize_t offset) {
14966 bufsize_t i = offset;
14967 size_t nb_p = 0;
14968
14969 if (i < input->len && input->data[i] == '<') {
14970 ++i;
14971 while (i < input->len) {
14972 if (input->data[i] == '>') {
14973 ++i;
14974 break;
14975 } else if (input->data[i] == '\\')
14976 i += 2;
14977 else if (cmark_isspace(input->data[i]))
14978 return -1;
14979 else
14980 ++i;
14981 }
14982 } else {
14983 while (i < input->len) {
14984 if (input->data[i] == '\\')
14985 i += 2;
14986 else if (input->data[i] == '(') {
14987 ++nb_p;
14988 ++i;
14989 } else if (input->data[i] == ')') {
14990 if (nb_p == 0)
14991 break;
14992 --nb_p;
14993 ++i;
14994 } else if (cmark_isspace(input->data[i]))
14995 break;
14996 else
14997 ++i;
14998 }
14999 }
15000
15001 if (i >= input->len)
15002 return -1;
15003 return i - offset;
15004 }
15005 // Return a link, an image, or a literal close bracket.
15006 static cmark_node *handle_close_bracket(subject *subj) {
15007 bufsize_t initial_pos, after_link_text_pos;
15008 bufsize_t starturl, endurl, starttitle, endtitle, endall;
15009 bufsize_t n;
15010 bufsize_t sps;
15011 cmark_reference *ref = NULL;
15012 cmark_chunk url_chunk, title_chunk;
15013 cmark_chunk url, title;
15014 bracket *opener;
15015 cmark_node *inl;
15016 cmark_chunk raw_label;
15017 int found_label;
15018 cmark_node *tmp, *tmpnext;
15019 bool is_image;
15020
15021 advance(subj); // advance past ]
15022 initial_pos = subj->pos;
15023
15024 // get last [ or ![
15025 opener = subj->last_bracket;
15026
15027 if (opener == NULL) {
15028 return make_str(subj->mem, cmark_chunk_literal("]"));
15029 }
15030
15031 if (!opener->active) {
15032 // take delimiter off stack
15033 pop_bracket(subj);
15034 return make_str(subj->mem, cmark_chunk_literal("]"));
15035 }
15036
15037 // If we got here, we matched a potential link/image text.
15038 // Now we check to see if it's a link/image.
15039 is_image = opener->image;
15040
15041 after_link_text_pos = subj->pos;
15042
15043 // First, look for an inline link.
15044 if (peek_char(subj) == '(' &&
15045 ((sps = scan_spacechars(&subj->input, subj->pos + 1)) > -1) &&
15046 ((n = manual_scan_link_url(&subj->input, subj->pos + 1 + sps)) > -1)) {
15047
15048 // try to parse an explicit link:
15049 starturl = subj->pos + 1 + sps; // after (
15050 endurl = starturl + n;
15051 starttitle = endurl + scan_spacechars(&subj->input, endurl);
15052
15053 // ensure there are spaces btw url and title
15054 endtitle = (starttitle == endurl)
15055 ? starttitle
15056 : starttitle + scan_link_title(&subj->input, starttitle);
15057
15058 endall = endtitle + scan_spacechars(&subj->input, endtitle);
15059
15060 if (peek_at(subj, endall) == ')') {
15061 subj->pos = endall + 1;
15062
15063 url_chunk = cmark_chunk_dup(&subj->input, starturl, endurl - starturl);
15064 title_chunk =
15065 cmark_chunk_dup(&subj->input, starttitle, endtitle - starttitle);
15066 url = cmark_clean_url(subj->mem, &url_chunk);
15067 title = cmark_clean_title(subj->mem, &title_chunk);
15068 cmark_chunk_free(subj->mem, &url_chunk);
15069 cmark_chunk_free(subj->mem, &title_chunk);
15070 goto match;
15071
15072 } else {
15073 // it could still be a shortcut reference link
15074 subj->pos = after_link_text_pos;
15075 }
15076 }
15077
15078 // Next, look for a following [link label] that matches in refmap.
15079 // skip spaces
15080 raw_label = cmark_chunk_literal("");
15081 found_label = link_label(subj, &raw_label);
15082 if (!found_label) {
15083 // If we have a shortcut reference link, back up
15084 // to before the spacse we skipped.
15085 subj->pos = initial_pos;
15086 }
15087
15088 if ((!found_label || raw_label.len == 0) && !opener->bracket_after) {
15089 cmark_chunk_free(subj->mem, &raw_label);
15090 raw_label = cmark_chunk_dup(&subj->input, opener->position,
15091 initial_pos - opener->position - 1);
15092 found_label = true;
15093 }
15094
15095 if (found_label) {
15096 ref = cmark_reference_lookup(subj->refmap, &raw_label);
15097 cmark_chunk_free(subj->mem, &raw_label);
15098 }
15099
15100 if (ref != NULL) { // found
15101 url = chunk_clone(subj->mem, &ref->url);
15102 title = chunk_clone(subj->mem, &ref->title);
15103 goto match;
15104 } else {
15105 goto noMatch;
15106 }
15107
15108 noMatch:
15109 // If we fall through to here, it means we didn't match a link:
15110 pop_bracket(subj); // remove this opener from delimiter list
15111 subj->pos = initial_pos;
15112 return make_str(subj->mem, cmark_chunk_literal("]"));
15113
15114 match:
15115 inl = make_simple(subj->mem, is_image ? CMARK_NODE_IMAGE : CMARK_NODE_LINK);
15116 inl->as.link.url = url;
15117 inl->as.link.title = title;
15118 cmark_node_insert_before(opener->inl_text, inl);
15119 // Add link text:
15120 tmp = opener->inl_text->next;
15121 while (tmp) {
15122 tmpnext = tmp->next;
15123 cmark_node_append_child(inl, tmp);
15124 tmp = tmpnext;
15125 }
15126
15127 // Free the bracket [:
15128 cmark_node_free(opener->inl_text);
15129
15130 process_emphasis(subj, opener->previous_delimiter);
15131 pop_bracket(subj);
15132
15133 // Now, if we have a link, we also want to deactivate earlier link
15134 // delimiters. (This code can be removed if we decide to allow links
15135 // inside links.)
15136 if (!is_image) {
15137 opener = subj->last_bracket;
15138 while (opener != NULL) {
15139 if (!opener->image) {
15140 if (!opener->active) {
15141 break;
15142 } else {
15143 opener->active = false;
15144 }
15145 }
15146 opener = opener->previous;
15147 }
15148 }
15149
15150 return NULL;
15151 }
15152
15153 // Parse a hard or soft linebreak, returning an inline.
15154 // Assumes the subject has a cr or newline at the current position.
15155 static cmark_node *handle_newline(subject *subj) {
15156 bufsize_t nlpos = subj->pos;
15157 // skip over cr, crlf, or lf:
15158 if (peek_at(subj, subj->pos) == '\r') {
15159 advance(subj);
15160 }
15161 if (peek_at(subj, subj->pos) == '\n') {
15162 advance(subj);
15163 }
15164 // skip spaces at beginning of line
15165 skip_spaces(subj);
15166 if (nlpos > 1 && peek_at(subj, nlpos - 1) == ' ' &&
15167 peek_at(subj, nlpos - 2) == ' ') {
15168 return make_linebreak(subj->mem);
15169 } else {
15170 return make_softbreak(subj->mem);
15171 }
15172 }
15173
15174 static bufsize_t subject_find_special_char(subject *subj, int options) {
15175 // "\r\n\\`&_*[]<!"
15176 static const int8_t SPECIAL_CHARS[256] = {
15177 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15178 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0,
15179 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15180 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,
15181 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15182 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15183 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15184 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15185 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15186 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15187 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
15188
15189 // " ' . -
15190 static const char SMART_PUNCT_CHARS[] = {
15191 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15192 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0,
15193 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15194 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15195 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15196 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15197 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15198 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15199 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15200 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15201 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15202 };
15203
15204 bufsize_t n = subj->pos + 1;
15205
15206 while (n < subj->input.len) {
15207 if (SPECIAL_CHARS[subj->input.data[n]])
15208 return n;
15209 if (options & CMARK_OPT_SMART && SMART_PUNCT_CHARS[subj->input.data[n]])
15210 return n;
15211 n++;
15212 }
15213
15214 return subj->input.len;
15215 }
15216
15217 // Parse an inline, advancing subject, and add it as a child of parent.
15218 // Return 0 if no inline can be parsed, 1 otherwise.
15219 static int parse_inline(subject *subj, cmark_node *parent, int options) {
15220 cmark_node *new_inl = NULL;
15221 cmark_chunk contents;
15222 unsigned char c;
15223 bufsize_t endpos;
15224 c = peek_char(subj);
15225 if (c == 0) {
15226 return 0;
15227 }
15228 switch (c) {
15229 case '\r':
15230 case '\n':
15231 new_inl = handle_newline(subj);
15232 break;
15233 case '`':
15234 new_inl = handle_backticks(subj);
15235 break;
15236 case '\\':
15237 new_inl = handle_backslash(subj);
15238 break;
15239 case '&':
15240 new_inl = handle_entity(subj);
15241 break;
15242 case '<':
15243 new_inl = handle_pointy_brace(subj);
15244 break;
15245 case '*':
15246 case '_':
15247 case '\'':
15248 case '"':
15249 new_inl = handle_delim(subj, c, (options & CMARK_OPT_SMART) != 0);
15250 break;
15251 case '-':
15252 new_inl = handle_hyphen(subj, (options & CMARK_OPT_SMART) != 0);
15253 break;
15254 case '.':
15255 new_inl = handle_period(subj, (options & CMARK_OPT_SMART) != 0);
15256 break;
15257 case '[':
15258 advance(subj);
15259 new_inl = make_str(subj->mem, cmark_chunk_literal("["));
15260 push_bracket(subj, false, new_inl);
15261 break;
15262 case ']':
15263 new_inl = handle_close_bracket(subj);
15264 break;
15265 case '!':
15266 advance(subj);
15267 if (peek_char(subj) == '[') {
15268 advance(subj);
15269 new_inl = make_str(subj->mem, cmark_chunk_literal("!["));
15270 push_bracket(subj, true, new_inl);
15271 } else {
15272 new_inl = make_str(subj->mem, cmark_chunk_literal("!"));
15273 }
15274 break;
15275 default:
15276 endpos = subject_find_special_char(subj, options);
15277 contents = cmark_chunk_dup(&subj->input, subj->pos, endpos - subj->pos);
15278 subj->pos = endpos;
15279
15280 // if we're at a newline, strip trailing spaces.
15281 if (S_is_line_end_char(peek_char(subj))) {
15282 cmark_chunk_rtrim(&contents);
15283 }
15284
15285 new_inl = make_str(subj->mem, contents);
15286 }
15287 if (new_inl != NULL) {
15288 cmark_node_append_child(parent, new_inl);
15289 }
15290
15291 return 1;
15292 }
15293
15294 // Parse inlines from parent's string_content, adding as children of parent.
15295 extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent,
15296 cmark_reference_map *refmap, int options) {
15297 subject subj;
15298 subject_from_buf(mem, &subj, &parent->content, refmap);
15299 cmark_chunk_rtrim(&subj.input);
15300
15301 while (!is_eof(&subj) && parse_inline(&subj, parent, options))
15302 ;
15303
15304 process_emphasis(&subj, NULL);
15305 // free bracket and delim stack
15306 while (subj.last_delim) {
15307 pop_bracket(&subj);
15308 }
15309 while (subj.last_bracket) {
15310 pop_bracket(&subj);
15311 }
15312 }
15313
15314 // Parse zero or more space characters, including at most one newline.
15315 static void spnl(subject *subj) {
15316 skip_spaces(subj);
15317 if (skip_line_end(subj)) {
15318 skip_spaces(subj);
15319 }
15320 }
15321
15322 // Parse reference. Assumes string begins with '[' character.
15323 // Modify refmap if a reference is encountered.
15324 // Return 0 if no reference found, otherwise position of subject
15325 // after reference is parsed.
15326 bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input,
15327 cmark_reference_map *refmap) {
15328 subject subj;
15329
15330 cmark_chunk lab;
15331 cmark_chunk url;
15332 cmark_chunk title;
15333
15334 bufsize_t matchlen = 0;
15335 bufsize_t beforetitle;
15336
15337 subject_from_buf(mem, &subj, input, NULL);
15338
15339 // parse label:
15340 if (!link_label(&subj, &lab) || lab.len == 0)
15341 return 0;
15342
15343 // colon:
15344 if (peek_char(&subj) == ':') {
15345 advance(&subj);
15346 } else {
15347 return 0;
15348 }
15349
15350 // parse link url:
15351 spnl(&subj);
15352 matchlen = manual_scan_link_url(&subj.input, subj.pos);
15353 if (matchlen > 0) {
15354 url = cmark_chunk_dup(&subj.input, subj.pos, matchlen);
15355 subj.pos += matchlen;
15356 } else {
15357 return 0;
15358 }
15359
15360 // parse optional link_title
15361 beforetitle = subj.pos;
15362 spnl(&subj);
15363 matchlen = scan_link_title(&subj.input, subj.pos);
15364 if (matchlen) {
15365 title = cmark_chunk_dup(&subj.input, subj.pos, matchlen);
15366 subj.pos += matchlen;
15367 } else {
15368 subj.pos = beforetitle;
15369 title = cmark_chunk_literal("");
15370 }
15371
15372 // parse final spaces and newline:
15373 skip_spaces(&subj);
15374 if (!skip_line_end(&subj)) {
15375 if (matchlen) { // try rewinding before title
15376 subj.pos = beforetitle;
15377 skip_spaces(&subj);
15378 if (!skip_line_end(&subj)) {
15379 return 0;
15380 }
15381 } else {
15382 return 0;
15383 }
15384 }
15385 // insert reference into refmap
15386 cmark_reference_create(refmap, &lab, &url, &title);
15387 return subj.pos;
15388 }
15389
15390
15391 static const int8_t utf8proc_utf8class[256] = {
15392 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
15393 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
15394 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
15395 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
15396 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
15397 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15398 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15399 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15400 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
15401 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
15402 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0};
15403
15404 static void encode_unknown(cmark_strbuf *buf) {
15405 static const uint8_t repl[] = {239, 191, 189};
15406 cmark_strbuf_put(buf, repl, 3);
15407 }
15408
15409 static int utf8proc_charlen(const uint8_t *str, bufsize_t str_len) {
15410 int length, i;
15411
15412 if (!str_len)
15413 return 0;
15414
15415 length = utf8proc_utf8class[str[0]];
15416
15417 if (!length)
15418 return -1;
15419
15420 if (str_len >= 0 && (bufsize_t)length > str_len)
15421 return -str_len;
15422
15423 for (i = 1; i < length; i++) {
15424 if ((str[i] & 0xC0) != 0x80)
15425 return -i;
15426 }
15427
15428 return length;
15429 }
15430
15431 // Validate a single UTF-8 character according to RFC 3629.
15432 static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) {
15433 int length = utf8proc_utf8class[str[0]];
15434
15435 if (!length)
15436 return -1;
15437
15438 if ((bufsize_t)length > str_len)
15439 return -str_len;
15440
15441 switch (length) {
15442 case 2:
15443 if ((str[1] & 0xC0) != 0x80)
15444 return -1;
15445 if (str[0] < 0xC2) {
15446 // Overlong
15447 return -length;
15448 }
15449 break;
15450
15451 case 3:
15452 if ((str[1] & 0xC0) != 0x80)
15453 return -1;
15454 if ((str[2] & 0xC0) != 0x80)
15455 return -2;
15456 if (str[0] == 0xE0) {
15457 if (str[1] < 0xA0) {
15458 // Overlong
15459 return -length;
15460 }
15461 } else if (str[0] == 0xED) {
15462 if (str[1] >= 0xA0) {
15463 // Surrogate
15464 return -length;
15465 }
15466 }
15467 break;
15468
15469 case 4:
15470 if ((str[1] & 0xC0) != 0x80)
15471 return -1;
15472 if ((str[2] & 0xC0) != 0x80)
15473 return -2;
15474 if ((str[3] & 0xC0) != 0x80)
15475 return -3;
15476 if (str[0] == 0xF0) {
15477 if (str[1] < 0x90) {
15478 // Overlong
15479 return -length;
15480 }
15481 } else if (str[0] >= 0xF4) {
15482 if (str[0] > 0xF4 || str[1] >= 0x90) {
15483 // Above 0x10FFFF
15484 return -length;
15485 }
15486 }
15487 break;
15488 }
15489
15490 return length;
15491 }
15492
15493 void cmark_utf8proc_check(cmark_strbuf *ob, const uint8_t *line,
15494 bufsize_t size) {
15495 bufsize_t i = 0;
15496
15497 while (i < size) {
15498 bufsize_t org = i;
15499 int charlen = 0;
15500
15501 while (i < size) {
15502 if (line[i] < 0x80 && line[i] != 0) {
15503 i++;
15504 } else if (line[i] >= 0x80) {
15505 charlen = utf8proc_valid(line + i, size - i);
15506 if (charlen < 0) {
15507 charlen = -charlen;
15508 break;
15509 }
15510 i += charlen;
15511 } else if (line[i] == 0) {
15512 // ASCII NUL is technically valid but rejected
15513 // for security reasons.
15514 charlen = 1;
15515 break;
15516 }
15517 }
15518
15519 if (i > org) {
15520 cmark_strbuf_put(ob, line + org, i - org);
15521 }
15522
15523 if (i >= size) {
15524 break;
15525 } else {
15526 // Invalid UTF-8
15527 encode_unknown(ob);
15528 i += charlen;
15529 }
15530 }
15531 }
15532
15533 int cmark_utf8proc_iterate(const uint8_t *str, bufsize_t str_len,
15534 int32_t *dst) {
15535 int length;
15536 int32_t uc = -1;
15537
15538 *dst = -1;
15539 length = utf8proc_charlen(str, str_len);
15540 if (length < 0)
15541 return -1;
15542
15543 switch (length) {
15544 case 1:
15545 uc = str[0];
15546 break;
15547 case 2:
15548 uc = ((str[0] & 0x1F) << 6) + (str[1] & 0x3F);
15549 if (uc < 0x80)
15550 uc = -1;
15551 break;
15552 case 3:
15553 uc = ((str[0] & 0x0F) << 12) + ((str[1] & 0x3F) << 6) + (str[2] & 0x3F);
15554 if (uc < 0x800 || (uc >= 0xD800 && uc < 0xE000))
15555 uc = -1;
15556 break;
15557 case 4:
15558 uc = ((str[0] & 0x07) << 18) + ((str[1] & 0x3F) << 12) +
15559 ((str[2] & 0x3F) << 6) + (str[3] & 0x3F);
15560 if (uc < 0x10000 || uc >= 0x110000)
15561 uc = -1;
15562 break;
15563 }
15564
15565 if (uc < 0)
15566 return -1;
15567
15568 *dst = uc;
15569 return length;
15570 }
15571
15572 void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf) {
15573 uint8_t dst[4];
15574 bufsize_t len = 0;
15575
15576 assert(uc >= 0);
15577
15578 if (uc < 0x80) {
15579 dst[0] = (uint8_t)(uc);
15580 len = 1;
15581 } else if (uc < 0x800) {
15582 dst[0] = (uint8_t)(0xC0 + (uc >> 6));
15583 dst[1] = 0x80 + (uc & 0x3F);
15584 len = 2;
15585 } else if (uc == 0xFFFF) {
15586 dst[0] = 0xFF;
15587 len = 1;
15588 } else if (uc == 0xFFFE) {
15589 dst[0] = 0xFE;
15590 len = 1;
15591 } else if (uc < 0x10000) {
15592 dst[0] = (uint8_t)(0xE0 + (uc >> 12));
15593 dst[1] = 0x80 + ((uc >> 6) & 0x3F);
15594 dst[2] = 0x80 + (uc & 0x3F);
15595 len = 3;
15596 } else if (uc < 0x110000) {
15597 dst[0] = (uint8_t)(0xF0 + (uc >> 18));
15598 dst[1] = 0x80 + ((uc >> 12) & 0x3F);
15599 dst[2] = 0x80 + ((uc >> 6) & 0x3F);
15600 dst[3] = 0x80 + (uc & 0x3F);
15601 len = 4;
15602 } else {
15603 encode_unknown(buf);
15604 return;
15605 }
15606
15607 cmark_strbuf_put(buf, dst, len);
15608 }
15609
15610 void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str,
15611 bufsize_t len) {
15612 int32_t c;
15613
15614 #define bufpush(x) cmark_utf8proc_encode_char(x, dest)
15615
15616 while (len > 0) {
15617 bufsize_t char_len = cmark_utf8proc_iterate(str, len, &c);
15618
15619 if (char_len >= 0) {
15620 #include "case_fold_switch.inc"
15621 } else {
15622 encode_unknown(dest);
15623 char_len = -char_len;
15624 }
15625
15626 str += char_len;
15627 len -= char_len;
15628 }
15629 }
15630
15631 // matches anything in the Zs class, plus LF, CR, TAB, FF.
15632 int cmark_utf8proc_is_space(int32_t uc) {
15633 return (uc == 9 || uc == 10 || uc == 12 || uc == 13 || uc == 32 ||
15634 uc == 160 || uc == 5760 || (uc >= 8192 && uc <= 8202) || uc == 8239 ||
15635 uc == 8287 || uc == 12288);
15636 }
15637
15638 // matches anything in the P[cdefios] classes.
15639 int cmark_utf8proc_is_punctuation(int32_t uc) {
15640 return (
15641 (uc < 128 && cmark_ispunct((char)uc)) || uc == 161 || uc == 167 ||
15642 uc == 171 || uc == 182 || uc == 183 || uc == 187 || uc == 191 ||
15643 uc == 894 || uc == 903 || (uc >= 1370 && uc <= 1375) || uc == 1417 ||
15644 uc == 1418 || uc == 1470 || uc == 1472 || uc == 1475 || uc == 1478 ||
15645 uc == 1523 || uc == 1524 || uc == 1545 || uc == 1546 || uc == 1548 ||
15646 uc == 1549 || uc == 1563 || uc == 1566 || uc == 1567 ||
15647 (uc >= 1642 && uc <= 1645) || uc == 1748 || (uc >= 1792 && uc <= 1805) ||
15648 (uc >= 2039 && uc <= 2041) || (uc >= 2096 && uc <= 2110) || uc == 2142 ||
15649 uc == 2404 || uc == 2405 || uc == 2416 || uc == 2800 || uc == 3572 ||
15650 uc == 3663 || uc == 3674 || uc == 3675 || (uc >= 3844 && uc <= 3858) ||
15651 uc == 3860 || (uc >= 3898 && uc <= 3901) || uc == 3973 ||
15652 (uc >= 4048 && uc <= 4052) || uc == 4057 || uc == 4058 ||
15653 (uc >= 4170 && uc <= 4175) || uc == 4347 || (uc >= 4960 && uc <= 4968) ||
15654 uc == 5120 || uc == 5741 || uc == 5742 || uc == 5787 || uc == 5788 ||
15655 (uc >= 5867 && uc <= 5869) || uc == 5941 || uc == 5942 ||
15656 (uc >= 6100 && uc <= 6102) || (uc >= 6104 && uc <= 6106) ||
15657 (uc >= 6144 && uc <= 6154) || uc == 6468 || uc == 6469 || uc == 6686 ||
15658 uc == 6687 || (uc >= 6816 && uc <= 6822) || (uc >= 6824 && uc <= 6829) ||
15659 (uc >= 7002 && uc <= 7008) || (uc >= 7164 && uc <= 7167) ||
15660 (uc >= 7227 && uc <= 7231) || uc == 7294 || uc == 7295 ||
15661 (uc >= 7360 && uc <= 7367) || uc == 7379 || (uc >= 8208 && uc <= 8231) ||
15662 (uc >= 8240 && uc <= 8259) || (uc >= 8261 && uc <= 8273) ||
15663 (uc >= 8275 && uc <= 8286) || uc == 8317 || uc == 8318 || uc == 8333 ||
15664 uc == 8334 || (uc >= 8968 && uc <= 8971) || uc == 9001 || uc == 9002 ||
15665 (uc >= 10088 && uc <= 10101) || uc == 10181 || uc == 10182 ||
15666 (uc >= 10214 && uc <= 10223) || (uc >= 10627 && uc <= 10648) ||
15667 (uc >= 10712 && uc <= 10715) || uc == 10748 || uc == 10749 ||
15668 (uc >= 11513 && uc <= 11516) || uc == 11518 || uc == 11519 ||
15669 uc == 11632 || (uc >= 11776 && uc <= 11822) ||
15670 (uc >= 11824 && uc <= 11842) || (uc >= 12289 && uc <= 12291) ||
15671 (uc >= 12296 && uc <= 12305) || (uc >= 12308 && uc <= 12319) ||
15672 uc == 12336 || uc == 12349 || uc == 12448 || uc == 12539 || uc == 42238 ||
15673 uc == 42239 || (uc >= 42509 && uc <= 42511) || uc == 42611 ||
15674 uc == 42622 || (uc >= 42738 && uc <= 42743) ||
15675 (uc >= 43124 && uc <= 43127) || uc == 43214 || uc == 43215 ||
15676 (uc >= 43256 && uc <= 43258) || uc == 43310 || uc == 43311 ||
15677 uc == 43359 || (uc >= 43457 && uc <= 43469) || uc == 43486 ||
15678 uc == 43487 || (uc >= 43612 && uc <= 43615) || uc == 43742 ||
15679 uc == 43743 || uc == 43760 || uc == 43761 || uc == 44011 || uc == 64830 ||
15680 uc == 64831 || (uc >= 65040 && uc <= 65049) ||
15681 (uc >= 65072 && uc <= 65106) || (uc >= 65108 && uc <= 65121) ||
15682 uc == 65123 || uc == 65128 || uc == 65130 || uc == 65131 ||
15683 (uc >= 65281 && uc <= 65283) || (uc >= 65285 && uc <= 65290) ||
15684 (uc >= 65292 && uc <= 65295) || uc == 65306 || uc == 65307 ||
15685 uc == 65311 || uc == 65312 || (uc >= 65339 && uc <= 65341) ||
15686 uc == 65343 || uc == 65371 || uc == 65373 ||
15687 (uc >= 65375 && uc <= 65381) || (uc >= 65792 && uc <= 65794) ||
15688 uc == 66463 || uc == 66512 || uc == 66927 || uc == 67671 || uc == 67871 ||
15689 uc == 67903 || (uc >= 68176 && uc <= 68184) || uc == 68223 ||
15690 (uc >= 68336 && uc <= 68342) || (uc >= 68409 && uc <= 68415) ||
15691 (uc >= 68505 && uc <= 68508) || (uc >= 69703 && uc <= 69709) ||
15692 uc == 69819 || uc == 69820 || (uc >= 69822 && uc <= 69825) ||
15693 (uc >= 69952 && uc <= 69955) || uc == 70004 || uc == 70005 ||
15694 (uc >= 70085 && uc <= 70088) || uc == 70093 ||
15695 (uc >= 70200 && uc <= 70205) || uc == 70854 ||
15696 (uc >= 71105 && uc <= 71113) || (uc >= 71233 && uc <= 71235) ||
15697 (uc >= 74864 && uc <= 74868) || uc == 92782 || uc == 92783 ||
15698 uc == 92917 || (uc >= 92983 && uc <= 92987) || uc == 92996 ||
15699 uc == 113823);
15700 }
15701
15702 static unsigned int refhash(const unsigned char *link_ref) {
15703 unsigned int hash = 0;
15704
15705 while (*link_ref)
15706 hash = (*link_ref++) + (hash << 6) + (hash << 16) - hash;
15707
15708 return hash;
15709 }
15710
15711 static void reference_free(cmark_reference_map *map, cmark_reference *ref) {
15712 cmark_mem *mem = map->mem;
15713 if (ref != NULL) {
15714 mem->free(ref->label);
15715 cmark_chunk_free(mem, &ref->url);
15716 cmark_chunk_free(mem, &ref->title);
15717 mem->free(ref);
15718 }
15719 }
15720
15721 // normalize reference: collapse internal whitespace to single space,
15722 // remove leading/trailing whitespace, case fold
15723 // Return NULL if the reference name is actually empty (i.e. composed
15724 // solely from whitespace)
15725 static unsigned char *normalize_reference(cmark_mem *mem, cmark_chunk *ref) {
15726 cmark_strbuf normalized = CMARK_BUF_INIT(mem);
15727 unsigned char *result;
15728
15729 if (ref == NULL)
15730 return NULL;
15731
15732 if (ref->len == 0)
15733 return NULL;
15734
15735 cmark_utf8proc_case_fold(&normalized, ref->data, ref->len);
15736 cmark_strbuf_trim(&normalized);
15737 cmark_strbuf_normalize_whitespace(&normalized);
15738
15739 result = cmark_strbuf_detach(&normalized);
15740 assert(result);
15741
15742 if (result[0] == '\0') {
15743 mem->free(result);
15744 return NULL;
15745 }
15746
15747 return result;
15748 }
15749
15750 static void add_reference(cmark_reference_map *map, cmark_reference *ref) {
15751 cmark_reference *t = ref->next = map->table[ref->hash % REFMAP_SIZE];
15752
15753 while (t) {
15754 if (t->hash == ref->hash && !strcmp((char *)t->label, (char *)ref->label)) {
15755 reference_free(map, ref);
15756 return;
15757 }
15758
15759 t = t->next;
15760 }
15761
15762 map->table[ref->hash % REFMAP_SIZE] = ref;
15763 }
15764
15765 void cmark_reference_create(cmark_reference_map *map, cmark_chunk *label,
15766 cmark_chunk *url, cmark_chunk *title) {
15767 cmark_reference *ref;
15768 unsigned char *reflabel = normalize_reference(map->mem, label);
15769
15770 /* empty reference name, or composed from only whitespace */
15771 if (reflabel == NULL)
15772 return;
15773
15774 ref = (cmark_reference *)map->mem->calloc(1, sizeof(*ref));
15775 ref->label = reflabel;
15776 ref->hash = refhash(ref->label);
15777 ref->url = cmark_clean_url(map->mem, url);
15778 ref->title = cmark_clean_title(map->mem, title);
15779 ref->next = NULL;
15780
15781 add_reference(map, ref);
15782 }
15783
15784 // Returns reference if refmap contains a reference with matching
15785 // label, otherwise NULL.
15786 cmark_reference *cmark_reference_lookup(cmark_reference_map *map,
15787 cmark_chunk *label) {
15788 cmark_reference *ref = NULL;
15789 unsigned char *norm;
15790 unsigned int hash;
15791
15792 if (label->len < 1 || label->len > MAX_LINK_LABEL_LENGTH)
15793 return NULL;
15794
15795 if (map == NULL)
15796 return NULL;
15797
15798 norm = normalize_reference(map->mem, label);
15799 if (norm == NULL)
15800 return NULL;
15801
15802 hash = refhash(norm);
15803 ref = map->table[hash % REFMAP_SIZE];
15804
15805 while (ref) {
15806 if (ref->hash == hash && !strcmp((char *)ref->label, (char *)norm))
15807 break;
15808 ref = ref->next;
15809 }
15810
15811 map->mem->free(norm);
15812 return ref;
15813 }
15814
15815 void cmark_reference_map_free(cmark_reference_map *map) {
15816 unsigned int i;
15817
15818 if (map == NULL)
15819 return;
15820
15821 for (i = 0; i < REFMAP_SIZE; ++i) {
15822 cmark_reference *ref = map->table[i];
15823 cmark_reference *next;
15824
15825 while (ref) {
15826 next = ref->next;
15827 reference_free(map, ref);
15828 ref = next;
15829 }
15830 }
15831
15832 map->mem->free(map);
15833 }
15834
15835 cmark_reference_map *cmark_reference_map_new(cmark_mem *mem) {
15836 cmark_reference_map *map =
15837 (cmark_reference_map *)mem->calloc(1, sizeof(cmark_reference_map));
15838 map->mem = mem;
15839 return map;
15840 }
15841
15842
15843
15844 /**
15845 * Block parsing implementation.
15846 *
15847 * For a high-level overview of the block parsing process,
15848 * see http://spec.commonmark.org/0.24/#phase-1-block-structure
15849 */
15850
15851
15852 #define CODE_INDENT 4
15853 #define TAB_STOP 4
15854
15855 #ifndef MIN
15856 #define MIN(x, y) ((x < y) ? x : y)
15857 #endif
15858
15859 #define peek_at(i, n) (i)->data[n]
15860
15861 static bool S_last_line_blank(const cmark_node *node) {
15862 return (node->flags & CMARK_NODE__LAST_LINE_BLANK) != 0;
15863 }
15864
15865 static CMARK_INLINE cmark_node_type S_type(const cmark_node *node) {
15866 return (cmark_node_type)node->type;
15867 }
15868
15869 static void S_set_last_line_blank(cmark_node *node, bool is_blank) {
15870 if (is_blank)
15871 node->flags |= CMARK_NODE__LAST_LINE_BLANK;
15872 else
15873 node->flags &= ~CMARK_NODE__LAST_LINE_BLANK;
15874 }
15875
15876 static CMARK_INLINE bool S_is_space_or_tab(char c) {
15877 return (c == ' ' || c == '\t');
15878 }
15879
15880 static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer,
15881 size_t len, bool eof);
15882
15883 static void S_process_line(cmark_parser *parser, const unsigned char *buffer,
15884 bufsize_t bytes);
15885
15886 static cmark_node *make_block(cmark_mem *mem, cmark_node_type tag,
15887 int start_line, int start_column) {
15888 cmark_node *e;
15889
15890 e = (cmark_node *)mem->calloc(1, sizeof(*e));
15891 cmark_strbuf_init(mem, &e->content, 32);
15892 e->type = (uint16_t)tag;
15893 e->flags = CMARK_NODE__OPEN;
15894 e->start_line = start_line;
15895 e->start_column = start_column;
15896 e->end_line = start_line;
15897
15898 return e;
15899 }
15900
15901 // Create a root document node.
15902 static cmark_node *make_document(cmark_mem *mem) {
15903 cmark_node *e = make_block(mem, CMARK_NODE_DOCUMENT, 1, 1);
15904 return e;
15905 }
15906
15907 cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem) {
15908 cmark_parser *parser = (cmark_parser *)mem->calloc(1, sizeof(cmark_parser));
15909 parser->mem = mem;
15910
15911 cmark_node *document = make_document(mem);
15912
15913 cmark_strbuf_init(mem, &parser->curline, 256);
15914 cmark_strbuf_init(mem, &parser->linebuf, 0);
15915
15916 parser->refmap = cmark_reference_map_new(mem);
15917 parser->root = document;
15918 parser->current = document;
15919 parser->line_number = 0;
15920 parser->offset = 0;
15921 parser->column = 0;
15922 parser->first_nonspace = 0;
15923 parser->first_nonspace_column = 0;
15924 parser->indent = 0;
15925 parser->blank = false;
15926 parser->partially_consumed_tab = false;
15927 parser->last_line_length = 0;
15928 parser->options = options;
15929 parser->last_buffer_ended_with_cr = false;
15930
15931 return parser;
15932 }
15933
15934 cmark_parser *cmark_parser_new(int options) {
15935 extern cmark_mem DEFAULT_MEM_ALLOCATOR;
15936 return cmark_parser_new_with_mem(options, &DEFAULT_MEM_ALLOCATOR);
15937 }
15938
15939 void cmark_parser_free(cmark_parser *parser) {
15940 cmark_mem *mem = parser->mem;
15941 cmark_strbuf_free(&parser->curline);
15942 cmark_strbuf_free(&parser->linebuf);
15943 cmark_reference_map_free(parser->refmap);
15944 mem->free(parser);
15945 }
15946
15947 static cmark_node *finalize(cmark_parser *parser, cmark_node *b);
15948
15949 // Returns true if line has only space characters, else false.
15950 static bool is_blank(cmark_strbuf *s, bufsize_t offset) {
15951 while (offset < s->size) {
15952 switch (s->ptr[offset]) {
15953 case '\r':
15954 case '\n':
15955 return true;
15956 case ' ':
15957 offset++;
15958 break;
15959 case '\t':
15960 offset++;
15961 break;
15962 default:
15963 return false;
15964 }
15965 }
15966
15967 return true;
15968 }
15969
15970 static CMARK_INLINE bool can_contain(cmark_node_type parent_type,
15971 cmark_node_type child_type) {
15972 return (parent_type == CMARK_NODE_DOCUMENT ||
15973 parent_type == CMARK_NODE_BLOCK_QUOTE ||
15974 parent_type == CMARK_NODE_ITEM ||
15975 (parent_type == CMARK_NODE_LIST && child_type == CMARK_NODE_ITEM));
15976 }
15977
15978 static CMARK_INLINE bool accepts_lines(cmark_node_type block_type) {
15979 return (block_type == CMARK_NODE_PARAGRAPH ||
15980 block_type == CMARK_NODE_HEADING ||
15981 block_type == CMARK_NODE_CODE_BLOCK);
15982 }
15983
15984 static CMARK_INLINE bool contains_inlines(cmark_node_type block_type) {
15985 return (block_type == CMARK_NODE_PARAGRAPH ||
15986 block_type == CMARK_NODE_HEADING);
15987 }
15988
15989 static void add_line(cmark_node *node, cmark_chunk *ch, cmark_parser *parser) {
15990 int chars_to_tab;
15991 int i;
15992 assert(node->flags & CMARK_NODE__OPEN);
15993 if (parser->partially_consumed_tab) {
15994 parser->offset += 1; // skip over tab
15995 // add space characters:
15996 chars_to_tab = TAB_STOP - (parser->column % TAB_STOP);
15997 for (i = 0; i < chars_to_tab; i++) {
15998 cmark_strbuf_putc(&node->content, ' ');
15999 }
16000 }
16001 cmark_strbuf_put(&node->content, ch->data + parser->offset,
16002 ch->len - parser->offset);
16003 }
16004
16005 static void remove_trailing_blank_lines(cmark_strbuf *ln) {
16006 bufsize_t i;
16007 unsigned char c;
16008
16009 for (i = ln->size - 1; i >= 0; --i) {
16010 c = ln->ptr[i];
16011
16012 if (c != ' ' && c != '\t' && !S_is_line_end_char(c))
16013 break;
16014 }
16015
16016 if (i < 0) {
16017 cmark_strbuf_clear(ln);
16018 return;
16019 }
16020
16021 for (; i < ln->size; ++i) {
16022 c = ln->ptr[i];
16023
16024 if (!S_is_line_end_char(c))
16025 continue;
16026
16027 cmark_strbuf_truncate(ln, i);
16028 break;
16029 }
16030 }
16031
16032 // Check to see if a node ends with a blank line, descending
16033 // if needed into lists and sublists.
16034 static bool ends_with_blank_line(cmark_node *node) {
16035 cmark_node *cur = node;
16036 while (cur != NULL) {
16037 if (S_last_line_blank(cur)) {
16038 return true;
16039 }
16040 if (S_type(cur) == CMARK_NODE_LIST || S_type(cur) == CMARK_NODE_ITEM) {
16041 cur = cur->last_child;
16042 } else {
16043 cur = NULL;
16044 }
16045 }
16046 return false;
16047 }
16048
16049 static cmark_node *finalize(cmark_parser *parser, cmark_node *b) {
16050 bufsize_t pos;
16051 cmark_node *item;
16052 cmark_node *subitem;
16053 cmark_node *parent;
16054
16055 parent = b->parent;
16056 assert(b->flags &
16057 CMARK_NODE__OPEN); // shouldn't call finalize on closed blocks
16058 b->flags &= ~CMARK_NODE__OPEN;
16059
16060 if (parser->curline.size == 0) {
16061 // end of input - line number has not been incremented
16062 b->end_line = parser->line_number;
16063 b->end_column = parser->last_line_length;
16064 } else if (S_type(b) == CMARK_NODE_DOCUMENT ||
16065 (S_type(b) == CMARK_NODE_CODE_BLOCK && b->as.code.fenced) ||
16066 (S_type(b) == CMARK_NODE_HEADING && b->as.heading.setext)) {
16067 b->end_line = parser->line_number;
16068 b->end_column = parser->curline.size;
16069 if (b->end_column && parser->curline.ptr[b->end_column - 1] == '\n')
16070 b->end_column -= 1;
16071 if (b->end_column && parser->curline.ptr[b->end_column - 1] == '\r')
16072 b->end_column -= 1;
16073 } else {
16074 b->end_line = parser->line_number - 1;
16075 b->end_column = parser->last_line_length;
16076 }
16077
16078 cmark_strbuf *node_content = &b->content;
16079
16080 switch (S_type(b)) {
16081 case CMARK_NODE_PARAGRAPH:
16082 while (cmark_strbuf_at(node_content, 0) == '[' &&
16083 (pos = cmark_parse_reference_inline(parser->mem, node_content,
16084 parser->refmap))) {
16085
16086 cmark_strbuf_drop(node_content, pos);
16087 }
16088 if (is_blank(node_content, 0)) {
16089 // remove blank node (former reference def)
16090 cmark_node_free(b);
16091 }
16092 break;
16093
16094 case CMARK_NODE_CODE_BLOCK:
16095 if (!b->as.code.fenced) { // indented code
16096 remove_trailing_blank_lines(node_content);
16097 cmark_strbuf_putc(node_content, '\n');
16098 } else {
16099 // first line of contents becomes info
16100 for (pos = 0; pos < node_content->size; ++pos) {
16101 if (S_is_line_end_char(node_content->ptr[pos]))
16102 break;
16103 }
16104 assert(pos < node_content->size);
16105
16106 cmark_strbuf tmp = CMARK_BUF_INIT(parser->mem);
16107 houdini_unescape_html_f(&tmp, node_content->ptr, pos);
16108 cmark_strbuf_trim(&tmp);
16109 cmark_strbuf_unescape(&tmp);
16110 b->as.code.info = cmark_chunk_buf_detach(&tmp);
16111
16112 if (node_content->ptr[pos] == '\r')
16113 pos += 1;
16114 if (node_content->ptr[pos] == '\n')
16115 pos += 1;
16116 cmark_strbuf_drop(node_content, pos);
16117 }
16118 b->as.code.literal = cmark_chunk_buf_detach(node_content);
16119 break;
16120
16121 case CMARK_NODE_HTML_BLOCK:
16122 b->as.literal = cmark_chunk_buf_detach(node_content);
16123 break;
16124
16125 case CMARK_NODE_LIST: // determine tight/loose status
16126 b->as.list.tight = true; // tight by default
16127 item = b->first_child;
16128
16129 while (item) {
16130 // check for non-final non-empty list item ending with blank line:
16131 if (S_last_line_blank(item) && item->next) {
16132 b->as.list.tight = false;
16133 break;
16134 }
16135 // recurse into children of list item, to see if there are
16136 // spaces between them:
16137 subitem = item->first_child;
16138 while (subitem) {
16139 if (ends_with_blank_line(subitem) && (item->next || subitem->next)) {
16140 b->as.list.tight = false;
16141 break;
16142 }
16143 subitem = subitem->next;
16144 }
16145 if (!(b->as.list.tight)) {
16146 break;
16147 }
16148 item = item->next;
16149 }
16150
16151 break;
16152
16153 default:
16154 break;
16155 }
16156
16157 return parent;
16158 }
16159
16160 // Add a node as child of another. Return pointer to child.
16161 static cmark_node *add_child(cmark_parser *parser, cmark_node *parent,
16162 cmark_node_type block_type, int start_column) {
16163 assert(parent);
16164
16165 // if 'parent' isn't the kind of node that can accept this child,
16166 // then back up til we hit a node that can.
16167 while (!can_contain(S_type(parent), block_type)) {
16168 parent = finalize(parser, parent);
16169 }
16170
16171 cmark_node *child =
16172 make_block(parser->mem, block_type, parser->line_number, start_column);
16173 child->parent = parent;
16174
16175 if (parent->last_child) {
16176 parent->last_child->next = child;
16177 child->prev = parent->last_child;
16178 } else {
16179 parent->first_child = child;
16180 child->prev = NULL;
16181 }
16182 parent->last_child = child;
16183 return child;
16184 }
16185
16186 // Walk through node and all children, recursively, parsing
16187 // string content into inline content where appropriate.
16188 static void process_inlines(cmark_mem *mem, cmark_node *root,
16189 cmark_reference_map *refmap, int options) {
16190 cmark_iter *iter = cmark_iter_new(root);
16191 cmark_node *cur;
16192 cmark_event_type ev_type;
16193
16194 while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
16195 cur = cmark_iter_get_node(iter);
16196 if (ev_type == CMARK_EVENT_ENTER) {
16197 if (contains_inlines(S_type(cur))) {
16198 cmark_parse_inlines(mem, cur, refmap, options);
16199 }
16200 }
16201 }
16202
16203 cmark_iter_free(iter);
16204 }
16205
16206 // Attempts to parse a list item marker (bullet or enumerated).
16207 // On success, returns length of the marker, and populates
16208 // data with the details. On failure, returns 0.
16209 static bufsize_t parse_list_marker(cmark_mem *mem, cmark_chunk *input,
16210 bufsize_t pos, bool interrupts_paragraph,
16211 cmark_list **dataptr) {
16212 unsigned char c;
16213 bufsize_t startpos;
16214 cmark_list *data;
16215 bufsize_t i;
16216
16217 startpos = pos;
16218 c = peek_at(input, pos);
16219
16220 if (c == '*' || c == '-' || c == '+') {
16221 pos++;
16222 if (!cmark_isspace(peek_at(input, pos))) {
16223 return 0;
16224 }
16225
16226 if (interrupts_paragraph) {
16227 i = pos;
16228 // require non-blank content after list marker:
16229 while (S_is_space_or_tab(peek_at(input, i))) {
16230 i++;
16231 }
16232 if (peek_at(input, i) == '\n') {
16233 return 0;
16234 }
16235 }
16236
16237 data = (cmark_list *)mem->calloc(1, sizeof(*data));
16238 data->marker_offset = 0; // will be adjusted later
16239 data->list_type = CMARK_BULLET_LIST;
16240 data->bullet_char = c;
16241 data->start = 1;
16242 data->delimiter = CMARK_PERIOD_DELIM;
16243 data->tight = false;
16244 } else if (cmark_isdigit(c)) {
16245 int start = 0;
16246 int digits = 0;
16247
16248 do {
16249 start = (10 * start) + (peek_at(input, pos) - '0');
16250 pos++;
16251 digits++;
16252 // We limit to 9 digits to avoid overflow,
16253 // assuming max int is 2^31 - 1
16254 // This also seems to be the limit for 'start' in some browsers.
16255 } while (digits < 9 && cmark_isdigit(peek_at(input, pos)));
16256
16257 if (interrupts_paragraph && start != 1) {
16258 return 0;
16259 }
16260 c = peek_at(input, pos);
16261 if (c == '.' || c == ')') {
16262 pos++;
16263 if (!cmark_isspace(peek_at(input, pos))) {
16264 return 0;
16265 }
16266 if (interrupts_paragraph) {
16267 // require non-blank content after list marker:
16268 i = pos;
16269 while (S_is_space_or_tab(peek_at(input, i))) {
16270 i++;
16271 }
16272 if (S_is_line_end_char(peek_at(input, i))) {
16273 return 0;
16274 }
16275 }
16276
16277 data = (cmark_list *)mem->calloc(1, sizeof(*data));
16278 data->marker_offset = 0; // will be adjusted later
16279 data->list_type = CMARK_ORDERED_LIST;
16280 data->bullet_char = 0;
16281 data->start = start;
16282 data->delimiter = (c == '.' ? CMARK_PERIOD_DELIM : CMARK_PAREN_DELIM);
16283 data->tight = false;
16284 } else {
16285 return 0;
16286 }
16287 } else {
16288 return 0;
16289 }
16290
16291 *dataptr = data;
16292 return (pos - startpos);
16293 }
16294
16295 // Return 1 if list item belongs in list, else 0.
16296 static int lists_match(cmark_list *list_data, cmark_list *item_data) {
16297 return (list_data->list_type == item_data->list_type &&
16298 list_data->delimiter == item_data->delimiter &&
16299 // list_data->marker_offset == item_data.marker_offset &&
16300 list_data->bullet_char == item_data->bullet_char);
16301 }
16302
16303 static cmark_node *finalize_document(cmark_parser *parser) {
16304 while (parser->current != parser->root) {
16305 parser->current = finalize(parser, parser->current);
16306 }
16307
16308 finalize(parser, parser->root);
16309 process_inlines(parser->mem, parser->root, parser->refmap, parser->options);
16310
16311 return parser->root;
16312 }
16313
16314 cmark_node *cmark_parse_file(FILE *f, int options) {
16315 unsigned char buffer[4096];
16316 cmark_parser *parser = cmark_parser_new(options);
16317 size_t bytes;
16318 cmark_node *document;
16319
16320 while ((bytes = fread(buffer, 1, sizeof(buffer), f)) > 0) {
16321 bool eof = bytes < sizeof(buffer);
16322 S_parser_feed(parser, buffer, bytes, eof);
16323 if (eof) {
16324 break;
16325 }
16326 }
16327
16328 document = cmark_parser_finish(parser);
16329 cmark_parser_free(parser);
16330 return document;
16331 }
16332
16333 cmark_node *cmark_parse_document(const char *buffer, size_t len, int options) {
16334 cmark_parser *parser = cmark_parser_new(options);
16335 cmark_node *document;
16336
16337 S_parser_feed(parser, (const unsigned char *)buffer, len, true);
16338
16339 document = cmark_parser_finish(parser);
16340 cmark_parser_free(parser);
16341 return document;
16342 }
16343
16344 void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len) {
16345 S_parser_feed(parser, (const unsigned char *)buffer, len, false);
16346 }
16347
16348 static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer,
16349 size_t len, bool eof) {
16350 const unsigned char *end = buffer + len;
16351 static const uint8_t repl[] = {239, 191, 189};
16352
16353 if (parser->last_buffer_ended_with_cr && *buffer == '\n') {
16354 // skip NL if last buffer ended with CR ; see #117
16355 buffer++;
16356 }
16357 parser->last_buffer_ended_with_cr = false;
16358 while (buffer < end) {
16359 const unsigned char *eol;
16360 bufsize_t chunk_len;
16361 bool process = false;
16362 for (eol = buffer; eol < end; ++eol) {
16363 if (S_is_line_end_char(*eol)) {
16364 process = true;
16365 break;
16366 }
16367 if (*eol == '\0' && eol < end) {
16368 break;
16369 }
16370 }
16371 if (eol >= end && eof) {
16372 process = true;
16373 }
16374
16375 chunk_len = (eol - buffer);
16376 if (process) {
16377 if (parser->linebuf.size > 0) {
16378 cmark_strbuf_put(&parser->linebuf, buffer, chunk_len);
16379 S_process_line(parser, parser->linebuf.ptr, parser->linebuf.size);
16380 cmark_strbuf_clear(&parser->linebuf);
16381 } else {
16382 S_process_line(parser, buffer, chunk_len);
16383 }
16384 } else {
16385 if (eol < end && *eol == '\0') {
16386 // omit NULL byte
16387 cmark_strbuf_put(&parser->linebuf, buffer, chunk_len);
16388 // add replacement character
16389 cmark_strbuf_put(&parser->linebuf, repl, 3);
16390 } else {
16391 cmark_strbuf_put(&parser->linebuf, buffer, chunk_len);
16392 }
16393 }
16394
16395 buffer += chunk_len;
16396 if (buffer < end) {
16397 if (*buffer == '\0') {
16398 // skip over NULL
16399 buffer++;
16400 } else {
16401 // skip over line ending characters
16402 if (*buffer == '\r') {
16403 buffer++;
16404 if (buffer == end)
16405 parser->last_buffer_ended_with_cr = true;
16406 }
16407 if (buffer < end && *buffer == '\n')
16408 buffer++;
16409 }
16410 }
16411 }
16412 }
16413
16414 static void chop_trailing_hashtags(cmark_chunk *ch) {
16415 bufsize_t n, orig_n;
16416
16417 cmark_chunk_rtrim(ch);
16418 orig_n = n = ch->len - 1;
16419
16420 // if string ends in space followed by #s, remove these:
16421 while (n >= 0 && peek_at(ch, n) == '#')
16422 n--;
16423
16424 // Check for a space before the final #s:
16425 if (n != orig_n && n >= 0 && S_is_space_or_tab(peek_at(ch, n))) {
16426 ch->len = n;
16427 cmark_chunk_rtrim(ch);
16428 }
16429 }
16430
16431 // Find first nonspace character from current offset, setting
16432 // parser->first_nonspace, parser->first_nonspace_column,
16433 // parser->indent, and parser->blank. Does not advance parser->offset.
16434 static void S_find_first_nonspace(cmark_parser *parser, cmark_chunk *input) {
16435 char c;
16436 int chars_to_tab = TAB_STOP - (parser->column % TAB_STOP);
16437
16438 parser->first_nonspace = parser->offset;
16439 parser->first_nonspace_column = parser->column;
16440 while ((c = peek_at(input, parser->first_nonspace))) {
16441 if (c == ' ') {
16442 parser->first_nonspace += 1;
16443 parser->first_nonspace_column += 1;
16444 chars_to_tab = chars_to_tab - 1;
16445 if (chars_to_tab == 0) {
16446 chars_to_tab = TAB_STOP;
16447 }
16448 } else if (c == '\t') {
16449 parser->first_nonspace += 1;
16450 parser->first_nonspace_column += chars_to_tab;
16451 chars_to_tab = TAB_STOP;
16452 } else {
16453 break;
16454 }
16455 }
16456
16457 parser->indent = parser->first_nonspace_column - parser->column;
16458 parser->blank = S_is_line_end_char(peek_at(input, parser->first_nonspace));
16459 }
16460
16461 // Advance parser->offset and parser->column. parser->offset is the
16462 // byte position in input; parser->column is a virtual column number
16463 // that takes into account tabs. (Multibyte characters are not taken
16464 // into account, because the Markdown line prefixes we are interested in
16465 // analyzing are entirely ASCII.) The count parameter indicates
16466 // how far to advance the offset. If columns is true, then count
16467 // indicates a number of columns; otherwise, a number of bytes.
16468 // If advancing a certain number of columns partially consumes
16469 // a tab character, parser->partially_consumed_tab is set to true.
16470 static void S_advance_offset(cmark_parser *parser, cmark_chunk *input,
16471 bufsize_t count, bool columns) {
16472 char c;
16473 int chars_to_tab;
16474 int chars_to_advance;
16475 while (count > 0 && (c = peek_at(input, parser->offset))) {
16476 if (c == '\t') {
16477 chars_to_tab = TAB_STOP - (parser->column % TAB_STOP);
16478 if (columns) {
16479 parser->partially_consumed_tab = chars_to_tab > count;
16480 chars_to_advance = MIN(count, chars_to_tab);
16481 parser->column += chars_to_advance;
16482 parser->offset += (parser->partially_consumed_tab ? 0 : 1);
16483 count -= chars_to_advance;
16484 } else {
16485 parser->partially_consumed_tab = false;
16486 parser->column += chars_to_tab;
16487 parser->offset += 1;
16488 count -= 1;
16489 }
16490 } else {
16491 parser->partially_consumed_tab = false;
16492 parser->offset += 1;
16493 parser->column += 1; // assume ascii; block starts are ascii
16494 count -= 1;
16495 }
16496 }
16497 }
16498
16499 static bool S_last_child_is_open(cmark_node *container) {
16500 return container->last_child &&
16501 (container->last_child->flags & CMARK_NODE__OPEN);
16502 }
16503
16504 static bool parse_block_quote_prefix(cmark_parser *parser, cmark_chunk *input) {
16505 bool res = false;
16506 bufsize_t matched = 0;
16507
16508 matched =
16509 parser->indent <= 3 && peek_at(input, parser->first_nonspace) == '>';
16510 if (matched) {
16511
16512 S_advance_offset(parser, input, parser->indent + 1, true);
16513
16514 if (S_is_space_or_tab(peek_at(input, parser->offset))) {
16515 S_advance_offset(parser, input, 1, true);
16516 }
16517
16518 res = true;
16519 }
16520 return res;
16521 }
16522
16523 static bool parse_node_item_prefix(cmark_parser *parser, cmark_chunk *input,
16524 cmark_node *container) {
16525 bool res = false;
16526
16527 if (parser->indent >=
16528 container->as.list.marker_offset + container->as.list.padding) {
16529 S_advance_offset(parser, input, container->as.list.marker_offset +
16530 container->as.list.padding,
16531 true);
16532 res = true;
16533 } else if (parser->blank && container->first_child != NULL) {
16534 // if container->first_child is NULL, then the opening line
16535 // of the list item was blank after the list marker; in this
16536 // case, we are done with the list item.
16537 S_advance_offset(parser, input, parser->first_nonspace - parser->offset,
16538 false);
16539 res = true;
16540 }
16541 return res;
16542 }
16543
16544 static bool parse_code_block_prefix(cmark_parser *parser, cmark_chunk *input,
16545 cmark_node *container,
16546 bool *should_continue) {
16547 bool res = false;
16548
16549 if (!container->as.code.fenced) { // indented
16550 if (parser->indent >= CODE_INDENT) {
16551 S_advance_offset(parser, input, CODE_INDENT, true);
16552 res = true;
16553 } else if (parser->blank) {
16554 S_advance_offset(parser, input, parser->first_nonspace - parser->offset,
16555 false);
16556 res = true;
16557 }
16558 } else { // fenced
16559 bufsize_t matched = 0;
16560
16561 if (parser->indent <= 3 && (peek_at(input, parser->first_nonspace) ==
16562 container->as.code.fence_char)) {
16563 matched = scan_close_code_fence(input, parser->first_nonspace);
16564 }
16565
16566 if (matched >= container->as.code.fence_length) {
16567 // closing fence - and since we're at
16568 // the end of a line, we can stop processing it:
16569 *should_continue = false;
16570 S_advance_offset(parser, input, matched, false);
16571 parser->current = finalize(parser, container);
16572 } else {
16573 // skip opt. spaces of fence parser->offset
16574 int i = container->as.code.fence_offset;
16575
16576 while (i > 0 && S_is_space_or_tab(peek_at(input, parser->offset))) {
16577 S_advance_offset(parser, input, 1, true);
16578 i--;
16579 }
16580 res = true;
16581 }
16582 }
16583
16584 return res;
16585 }
16586
16587 static bool parse_html_block_prefix(cmark_parser *parser,
16588 cmark_node *container) {
16589 bool res = false;
16590 int html_block_type = container->as.html_block_type;
16591
16592 assert(html_block_type >= 1 && html_block_type <= 7);
16593 switch (html_block_type) {
16594 case 1:
16595 case 2:
16596 case 3:
16597 case 4:
16598 case 5:
16599 // these types of blocks can accept blanks
16600 res = true;
16601 break;
16602 case 6:
16603 case 7:
16604 res = !parser->blank;
16605 break;
16606 }
16607
16608 return res;
16609 }
16610
16611 /**
16612 * For each containing node, try to parse the associated line start.
16613 *
16614 * Will not close unmatched blocks, as we may have a lazy continuation
16615 * line -> http://spec.commonmark.org/0.24/#lazy-continuation-line
16616 *
16617 * Returns: The last matching node, or NULL
16618 */
16619 static cmark_node *check_open_blocks(cmark_parser *parser, cmark_chunk *input,
16620 bool *all_matched) {
16621 bool should_continue = true;
16622 *all_matched = false;
16623 cmark_node *container = parser->root;
16624 cmark_node_type cont_type;
16625
16626 while (S_last_child_is_open(container)) {
16627 container = container->last_child;
16628 cont_type = S_type(container);
16629
16630 S_find_first_nonspace(parser, input);
16631
16632 switch (cont_type) {
16633 case CMARK_NODE_BLOCK_QUOTE:
16634 if (!parse_block_quote_prefix(parser, input))
16635 goto done;
16636 break;
16637 case CMARK_NODE_ITEM:
16638 if (!parse_node_item_prefix(parser, input, container))
16639 goto done;
16640 break;
16641 case CMARK_NODE_CODE_BLOCK:
16642 if (!parse_code_block_prefix(parser, input, container, &should_continue))
16643 goto done;
16644 break;
16645 case CMARK_NODE_HEADING:
16646 // a heading can never contain more than one line
16647 goto done;
16648 case CMARK_NODE_HTML_BLOCK:
16649 if (!parse_html_block_prefix(parser, container))
16650 goto done;
16651 break;
16652 case CMARK_NODE_PARAGRAPH:
16653 if (parser->blank)
16654 goto done;
16655 break;
16656 default:
16657 break;
16658 }
16659 }
16660
16661 *all_matched = true;
16662
16663 done:
16664 if (!*all_matched) {
16665 container = container->parent; // back up to last matching node
16666 }
16667
16668 if (!should_continue) {
16669 container = NULL;
16670 }
16671
16672 return container;
16673 }
16674
16675 static void open_new_blocks(cmark_parser *parser, cmark_node **container,
16676 cmark_chunk *input, bool all_matched) {
16677 bool indented;
16678 cmark_list *data = NULL;
16679 bool maybe_lazy = S_type(parser->current) == CMARK_NODE_PARAGRAPH;
16680 cmark_node_type cont_type = S_type(*container);
16681 bufsize_t matched = 0;
16682 int lev = 0;
16683 bool save_partially_consumed_tab;
16684 int save_offset;
16685 int save_column;
16686
16687 while (cont_type != CMARK_NODE_CODE_BLOCK &&
16688 cont_type != CMARK_NODE_HTML_BLOCK) {
16689
16690 S_find_first_nonspace(parser, input);
16691 indented = parser->indent >= CODE_INDENT;
16692
16693 if (!indented && peek_at(input, parser->first_nonspace) == '>') {
16694
16695 bufsize_t blockquote_startpos = parser->first_nonspace;
16696
16697 S_advance_offset(parser, input,
16698 parser->first_nonspace + 1 - parser->offset, false);
16699 // optional following character
16700 if (S_is_space_or_tab(peek_at(input, parser->offset))) {
16701 S_advance_offset(parser, input, 1, true);
16702 }
16703 *container = add_child(parser, *container, CMARK_NODE_BLOCK_QUOTE,
16704 blockquote_startpos + 1);
16705
16706 } else if (!indented && (matched = scan_atx_heading_start(
16707 input, parser->first_nonspace))) {
16708 bufsize_t hashpos;
16709 int level = 0;
16710 bufsize_t heading_startpos = parser->first_nonspace;
16711
16712 S_advance_offset(parser, input,
16713 parser->first_nonspace + matched - parser->offset,
16714 false);
16715 *container = add_child(parser, *container, CMARK_NODE_HEADING,
16716 heading_startpos + 1);
16717
16718 hashpos = cmark_chunk_strchr(input, '#', parser->first_nonspace);
16719
16720 while (peek_at(input, hashpos) == '#') {
16721 level++;
16722 hashpos++;
16723 }
16724
16725 (*container)->as.heading.level = level;
16726 (*container)->as.heading.setext = false;
16727
16728 } else if (!indented && (matched = scan_open_code_fence(
16729 input, parser->first_nonspace))) {
16730 *container = add_child(parser, *container, CMARK_NODE_CODE_BLOCK,
16731 parser->first_nonspace + 1);
16732 (*container)->as.code.fenced = true;
16733 (*container)->as.code.fence_char = peek_at(input, parser->first_nonspace);
16734 (*container)->as.code.fence_length = (matched > 255) ? 255 : matched;
16735 (*container)->as.code.fence_offset =
16736 (int8_t)(parser->first_nonspace - parser->offset);
16737 (*container)->as.code.info = cmark_chunk_literal("");
16738 S_advance_offset(parser, input,
16739 parser->first_nonspace + matched - parser->offset,
16740 false);
16741
16742 } else if (!indented && ((matched = scan_html_block_start(
16743 input, parser->first_nonspace)) ||
16744 (cont_type != CMARK_NODE_PARAGRAPH &&
16745 (matched = scan_html_block_start_7(
16746 input, parser->first_nonspace))))) {
16747 *container = add_child(parser, *container, CMARK_NODE_HTML_BLOCK,
16748 parser->first_nonspace + 1);
16749 (*container)->as.html_block_type = matched;
16750 // note, we don't adjust parser->offset because the tag is part of the
16751 // text
16752 } else if (!indented && cont_type == CMARK_NODE_PARAGRAPH &&
16753 (lev =
16754 scan_setext_heading_line(input, parser->first_nonspace))) {
16755 (*container)->type = (uint16_t)CMARK_NODE_HEADING;
16756 (*container)->as.heading.level = lev;
16757 (*container)->as.heading.setext = true;
16758 S_advance_offset(parser, input, input->len - 1 - parser->offset, false);
16759 } else if (!indented &&
16760 !(cont_type == CMARK_NODE_PARAGRAPH && !all_matched) &&
16761 (matched = scan_thematic_break(input, parser->first_nonspace))) {
16762 // it's only now that we know the line is not part of a setext heading:
16763 *container = add_child(parser, *container, CMARK_NODE_THEMATIC_BREAK,
16764 parser->first_nonspace + 1);
16765 S_advance_offset(parser, input, input->len - 1 - parser->offset, false);
16766 } else if ((!indented || cont_type == CMARK_NODE_LIST) &&
16767 (matched = parse_list_marker(
16768 parser->mem, input, parser->first_nonspace,
16769 (*container)->type == CMARK_NODE_PARAGRAPH, &data))) {
16770
16771 // Note that we can have new list items starting with >= 4
16772 // spaces indent, as long as the list container is still open.
16773 int i = 0;
16774
16775 // compute padding:
16776 S_advance_offset(parser, input,
16777 parser->first_nonspace + matched - parser->offset,
16778 false);
16779
16780 save_partially_consumed_tab = parser->partially_consumed_tab;
16781 save_offset = parser->offset;
16782 save_column = parser->column;
16783
16784 while (parser->column - save_column <= 5 &&
16785 S_is_space_or_tab(peek_at(input, parser->offset))) {
16786 S_advance_offset(parser, input, 1, true);
16787 }
16788
16789 i = parser->column - save_column;
16790 if (i >= 5 || i < 1 ||
16791 // only spaces after list marker:
16792 S_is_line_end_char(peek_at(input, parser->offset))) {
16793 data->padding = matched + 1;
16794 parser->offset = save_offset;
16795 parser->column = save_column;
16796 parser->partially_consumed_tab = save_partially_consumed_tab;
16797 if (i > 0) {
16798 S_advance_offset(parser, input, 1, true);
16799 }
16800 } else {
16801 data->padding = matched + i;
16802 }
16803
16804 // check container; if it's a list, see if this list item
16805 // can continue the list; otherwise, create a list container.
16806
16807 data->marker_offset = parser->indent;
16808
16809 if (cont_type != CMARK_NODE_LIST ||
16810 !lists_match(&((*container)->as.list), data)) {
16811 *container = add_child(parser, *container, CMARK_NODE_LIST,
16812 parser->first_nonspace + 1);
16813
16814 memcpy(&((*container)->as.list), data, sizeof(*data));
16815 }
16816
16817 // add the list item
16818 *container = add_child(parser, *container, CMARK_NODE_ITEM,
16819 parser->first_nonspace + 1);
16820 /* TODO: static */
16821 memcpy(&((*container)->as.list), data, sizeof(*data));
16822 parser->mem->free(data);
16823 } else if (indented && !maybe_lazy && !parser->blank) {
16824 S_advance_offset(parser, input, CODE_INDENT, true);
16825 *container = add_child(parser, *container, CMARK_NODE_CODE_BLOCK,
16826 parser->offset + 1);
16827 (*container)->as.code.fenced = false;
16828 (*container)->as.code.fence_char = 0;
16829 (*container)->as.code.fence_length = 0;
16830 (*container)->as.code.fence_offset = 0;
16831 (*container)->as.code.info = cmark_chunk_literal("");
16832
16833 } else {
16834 break;
16835 }
16836
16837 if (accepts_lines(S_type(*container))) {
16838 // if it's a line container, it can't contain other containers
16839 break;
16840 }
16841
16842 cont_type = S_type(*container);
16843 maybe_lazy = false;
16844 }
16845 }
16846
16847 static void add_text_to_container(cmark_parser *parser, cmark_node *container,
16848 cmark_node *last_matched_container,
16849 cmark_chunk *input) {
16850 cmark_node *tmp;
16851 // what remains at parser->offset is a text line. add the text to the
16852 // appropriate container.
16853
16854 S_find_first_nonspace(parser, input);
16855
16856 if (parser->blank && container->last_child)
16857 S_set_last_line_blank(container->last_child, true);
16858
16859 // block quote lines are never blank as they start with >
16860 // and we don't count blanks in fenced code for purposes of tight/loose
16861 // lists or breaking out of lists. we also don't set last_line_blank
16862 // on an empty list item.
16863 const cmark_node_type ctype = S_type(container);
16864 const bool last_line_blank =
16865 (parser->blank && ctype != CMARK_NODE_BLOCK_QUOTE &&
16866 ctype != CMARK_NODE_HEADING && ctype != CMARK_NODE_THEMATIC_BREAK &&
16867 !(ctype == CMARK_NODE_CODE_BLOCK && container->as.code.fenced) &&
16868 !(ctype == CMARK_NODE_ITEM && container->first_child == NULL &&
16869 container->start_line == parser->line_number));
16870
16871 S_set_last_line_blank(container, last_line_blank);
16872
16873 tmp = container;
16874 while (tmp->parent) {
16875 S_set_last_line_blank(tmp->parent, false);
16876 tmp = tmp->parent;
16877 }
16878
16879 // If the last line processed belonged to a paragraph node,
16880 // and we didn't match all of the line prefixes for the open containers,
16881 // and we didn't start any new containers,
16882 // and the line isn't blank,
16883 // then treat this as a "lazy continuation line" and add it to
16884 // the open paragraph.
16885 if (parser->current != last_matched_container &&
16886 container == last_matched_container && !parser->blank &&
16887 S_type(parser->current) == CMARK_NODE_PARAGRAPH) {
16888 add_line(parser->current, input, parser);
16889 } else { // not a lazy continuation
16890 // Finalize any blocks that were not matched and set cur to container:
16891 while (parser->current != last_matched_container) {
16892 parser->current = finalize(parser, parser->current);
16893 assert(parser->current != NULL);
16894 }
16895
16896 if (S_type(container) == CMARK_NODE_CODE_BLOCK) {
16897 add_line(container, input, parser);
16898 } else if (S_type(container) == CMARK_NODE_HTML_BLOCK) {
16899 add_line(container, input, parser);
16900
16901 int matches_end_condition;
16902 switch (container->as.html_block_type) {
16903 case 1:
16904 // </script>, </style>, </pre>
16905 matches_end_condition =
16906 scan_html_block_end_1(input, parser->first_nonspace);
16907 break;
16908 case 2:
16909 // -->
16910 matches_end_condition =
16911 scan_html_block_end_2(input, parser->first_nonspace);
16912 break;
16913 case 3:
16914 // ?>
16915 matches_end_condition =
16916 scan_html_block_end_3(input, parser->first_nonspace);
16917 break;
16918 case 4:
16919 // >
16920 matches_end_condition =
16921 scan_html_block_end_4(input, parser->first_nonspace);
16922 break;
16923 case 5:
16924 // ]]>
16925 matches_end_condition =
16926 scan_html_block_end_5(input, parser->first_nonspace);
16927 break;
16928 default:
16929 matches_end_condition = 0;
16930 break;
16931 }
16932
16933 if (matches_end_condition) {
16934 container = finalize(parser, container);
16935 assert(parser->current != NULL);
16936 }
16937 } else if (parser->blank) {
16938 // ??? do nothing
16939 } else if (accepts_lines(S_type(container))) {
16940 if (S_type(container) == CMARK_NODE_HEADING &&
16941 container->as.heading.setext == false) {
16942 chop_trailing_hashtags(input);
16943 }
16944 S_advance_offset(parser, input, parser->first_nonspace - parser->offset,
16945 false);
16946 add_line(container, input, parser);
16947 } else {
16948 // create paragraph container for line
16949 container = add_child(parser, container, CMARK_NODE_PARAGRAPH,
16950 parser->first_nonspace + 1);
16951 S_advance_offset(parser, input, parser->first_nonspace - parser->offset,
16952 false);
16953 add_line(container, input, parser);
16954 }
16955
16956 parser->current = container;
16957 }
16958 }
16959
16960 /* See http://spec.commonmark.org/0.24/#phase-1-block-structure */
16961 static void S_process_line(cmark_parser *parser, const unsigned char *buffer,
16962 bufsize_t bytes) {
16963 cmark_node *last_matched_container;
16964 bool all_matched = true;
16965 cmark_node *container;
16966 cmark_chunk input;
16967
16968 if (parser->options & CMARK_OPT_VALIDATE_UTF8)
16969 cmark_utf8proc_check(&parser->curline, buffer, bytes);
16970 else
16971 cmark_strbuf_put(&parser->curline, buffer, bytes);
16972
16973 // ensure line ends with a newline:
16974 if (bytes == 0 || !S_is_line_end_char(parser->curline.ptr[bytes - 1]))
16975 cmark_strbuf_putc(&parser->curline, '\n');
16976
16977 parser->offset = 0;
16978 parser->column = 0;
16979 parser->blank = false;
16980 parser->partially_consumed_tab = false;
16981
16982 input.data = parser->curline.ptr;
16983 input.len = parser->curline.size;
16984 input.alloc = 0;
16985
16986 parser->line_number++;
16987
16988 last_matched_container = check_open_blocks(parser, &input, &all_matched);
16989
16990 if (!last_matched_container)
16991 goto finished;
16992
16993 container = last_matched_container;
16994
16995 open_new_blocks(parser, &container, &input, all_matched);
16996
16997 add_text_to_container(parser, container, last_matched_container, &input);
16998
16999 finished:
17000 parser->last_line_length = input.len;
17001 if (parser->last_line_length &&
17002 input.data[parser->last_line_length - 1] == '\n')
17003 parser->last_line_length -= 1;
17004 if (parser->last_line_length &&
17005 input.data[parser->last_line_length - 1] == '\r')
17006 parser->last_line_length -= 1;
17007
17008 cmark_strbuf_clear(&parser->curline);
17009 }
17010
17011 cmark_node *cmark_parser_finish(cmark_parser *parser) {
17012 if (parser->linebuf.size) {
17013 S_process_line(parser, parser->linebuf.ptr, parser->linebuf.size);
17014 cmark_strbuf_clear(&parser->linebuf);
17015 }
17016
17017 finalize_document(parser);
17018
17019 if (parser->options & CMARK_OPT_NORMALIZE) {
17020 cmark_consolidate_text_nodes(parser->root);
17021 }
17022
17023 cmark_strbuf_free(&parser->curline);
17024
17025 #if CMARK_DEBUG_NODES
17026 if (cmark_node_check(parser->root, stderr)) {
17027 abort();
17028 }
17029 #endif
17030 return parser->root;
17031 }
17032
17033
17034
17035 const char *cmark_version_string() { return CMARK_VERSION_STRING; }
17036
17037 static void *xcalloc(size_t nmem, size_t size) {
17038 void *ptr = calloc(nmem, size);
17039 if (!ptr)
17040 abort();
17041 return ptr;
17042 }
17043
17044 static void *xrealloc(void *ptr, size_t size) {
17045 void *new_ptr = realloc(ptr, size);
17046 if (!new_ptr)
17047 abort();
17048 return new_ptr;
17049 }
17050
17051 cmark_mem DEFAULT_MEM_ALLOCATOR = {xcalloc, xrealloc, free};
17052
17053 char *cmark_markdown_to_html(const char *text, size_t len, int options) {
17054 cmark_node *doc;
17055 char *result;
17056
17057 doc = cmark_parse_document(text, len, options);
17058
17059 result = cmark_render_html(doc, options);
17060 cmark_node_free(doc);
17061
17062 return result;
17063 }
17064
17065
17066
17067 /** 1 = space, 2 = punct, 3 = digit, 4 = alpha, 0 = other
17068 */
17069 static const uint8_t cmark_ctype_class[256] = {
17070 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
17071 /* 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0,
17072 /* 1 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
17073 /* 2 */ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
17074 /* 3 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2,
17075 /* 4 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
17076 /* 5 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2,
17077 /* 6 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
17078 /* 7 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 0,
17079 /* 8 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
17080 /* 9 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
17081 /* a */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
17082 /* b */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
17083 /* c */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
17084 /* d */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
17085 /* e */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
17086 /* f */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
17087
17088 /**
17089 * Returns 1 if c is a "whitespace" character as defined by the spec.
17090 */
17091 int cmark_isspace(char c) { return cmark_ctype_class[(uint8_t)c] == 1; }
17092
17093 /**
17094 * Returns 1 if c is an ascii punctuation character.
17095 */
17096 int cmark_ispunct(char c) { return cmark_ctype_class[(uint8_t)c] == 2; }
17097
17098 int cmark_isalnum(char c) {
17099 uint8_t result;
17100 result = cmark_ctype_class[(uint8_t)c];
17101 return (result == 3 || result == 4);
17102 }
17103
17104 int cmark_isdigit(char c) { return cmark_ctype_class[(uint8_t)c] == 3; }
17105
17106 int cmark_isalpha(char c) { return cmark_ctype_class[(uint8_t)c] == 4; }
17107
17108
17109
17110 #include <stdarg.h>
17111 #include <string.h>
17112 #include <assert.h>
17113 #include <string.h>
17114 #include <stdio.h>
17115 #include <stdlib.h>
17116 #include <stdint.h>
17117 #include <limits.h>
17118
17119
17120 /* Used as default value for cmark_strbuf->ptr so that people can always
17121 * assume ptr is non-NULL and zero terminated even for new cmark_strbufs.
17122 */
17123 unsigned char cmark_strbuf__initbuf[1];
17124
17125 #ifndef MIN
17126 #define MIN(x, y) ((x < y) ? x : y)
17127 #endif
17128
17129 void cmark_strbuf_init(cmark_mem *mem, cmark_strbuf *buf,
17130 bufsize_t initial_size) {
17131 buf->mem = mem;
17132 buf->asize = 0;
17133 buf->size = 0;
17134 buf->ptr = cmark_strbuf__initbuf;
17135
17136 if (initial_size > 0)
17137 cmark_strbuf_grow(buf, initial_size);
17138 }
17139
17140 static CMARK_INLINE void S_strbuf_grow_by(cmark_strbuf *buf, bufsize_t add) {
17141 cmark_strbuf_grow(buf, buf->size + add);
17142 }
17143
17144 void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) {
17145 assert(target_size > 0);
17146
17147 if (target_size < buf->asize)
17148 return;
17149
17150 if (target_size > (bufsize_t)(INT32_MAX / 2))
17151 abort();
17152
17153 /* Oversize the buffer by 50% to guarantee amortized linear time
17154 * complexity on append operations. */
17155 bufsize_t new_size = target_size + target_size / 2;
17156 new_size += 1;
17157 new_size = (new_size + 7) & ~7;
17158
17159 buf->ptr = (unsigned char *)buf->mem->realloc(buf->asize ? buf->ptr : NULL,
17160 new_size);
17161 buf->asize = new_size;
17162 }
17163
17164 bufsize_t cmark_strbuf_len(const cmark_strbuf *buf) { return buf->size; }
17165
17166 void cmark_strbuf_free(cmark_strbuf *buf) {
17167 if (!buf)
17168 return;
17169
17170 if (buf->ptr != cmark_strbuf__initbuf)
17171 buf->mem->free(buf->ptr);
17172
17173 cmark_strbuf_init(buf->mem, buf, 0);
17174 }
17175
17176 void cmark_strbuf_clear(cmark_strbuf *buf) {
17177 buf->size = 0;
17178
17179 if (buf->asize > 0)
17180 buf->ptr[0] = '\0';
17181 }
17182
17183 void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data,
17184 bufsize_t len) {
17185 if (len <= 0 || data == NULL) {
17186 cmark_strbuf_clear(buf);
17187 } else {
17188 if (data != buf->ptr) {
17189 if (len >= buf->asize)
17190 cmark_strbuf_grow(buf, len);
17191 memmove(buf->ptr, data, len);
17192 }
17193 buf->size = len;
17194 buf->ptr[buf->size] = '\0';
17195 }
17196 }
17197
17198 void cmark_strbuf_sets(cmark_strbuf *buf, const char *string) {
17199 cmark_strbuf_set(buf, (const unsigned char *)string,
17200 string ? strlen(string) : 0);
17201 }
17202
17203 void cmark_strbuf_putc(cmark_strbuf *buf, int c) {
17204 S_strbuf_grow_by(buf, 1);
17205 buf->ptr[buf->size++] = (unsigned char)(c & 0xFF);
17206 buf->ptr[buf->size] = '\0';
17207 }
17208
17209 void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data,
17210 bufsize_t len) {
17211 if (len <= 0)
17212 return;
17213
17214 S_strbuf_grow_by(buf, len);
17215 memmove(buf->ptr + buf->size, data, len);
17216 buf->size += len;
17217 buf->ptr[buf->size] = '\0';
17218 }
17219
17220 void cmark_strbuf_puts(cmark_strbuf *buf, const char *string) {
17221 cmark_strbuf_put(buf, (const unsigned char *)string, strlen(string));
17222 }
17223
17224 void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize,
17225 const cmark_strbuf *buf) {
17226 bufsize_t copylen;
17227
17228 assert(buf);
17229 if (!data || datasize <= 0)
17230 return;
17231
17232 data[0] = '\0';
17233
17234 if (buf->size == 0 || buf->asize <= 0)
17235 return;
17236
17237 copylen = buf->size;
17238 if (copylen > datasize - 1)
17239 copylen = datasize - 1;
17240 memmove(data, buf->ptr, copylen);
17241 data[copylen] = '\0';
17242 }
17243
17244 void cmark_strbuf_swap(cmark_strbuf *buf_a, cmark_strbuf *buf_b) {
17245 cmark_strbuf t = *buf_a;
17246 *buf_a = *buf_b;
17247 *buf_b = t;
17248 }
17249
17250 unsigned char *cmark_strbuf_detach(cmark_strbuf *buf) {
17251 unsigned char *data = buf->ptr;
17252
17253 if (buf->asize == 0) {
17254 /* return an empty string */
17255 return (unsigned char *)buf->mem->calloc(1, 1);
17256 }
17257
17258 cmark_strbuf_init(buf->mem, buf, 0);
17259 return data;
17260 }
17261
17262 int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b) {
17263 int result = memcmp(a->ptr, b->ptr, MIN(a->size, b->size));
17264 return (result != 0) ? result
17265 : (a->size < b->size) ? -1 : (a->size > b->size) ? 1 : 0;
17266 }
17267
17268 bufsize_t cmark_strbuf_strchr(const cmark_strbuf *buf, int c, bufsize_t pos) {
17269 if (pos >= buf->size)
17270 return -1;
17271 if (pos < 0)
17272 pos = 0;
17273
17274 const unsigned char *p =
17275 (unsigned char *)memchr(buf->ptr + pos, c, buf->size - pos);
17276 if (!p)
17277 return -1;
17278
17279 return (bufsize_t)(p - (const unsigned char *)buf->ptr);
17280 }
17281
17282 bufsize_t cmark_strbuf_strrchr(const cmark_strbuf *buf, int c, bufsize_t pos) {
17283 if (pos < 0 || buf->size == 0)
17284 return -1;
17285 if (pos >= buf->size)
17286 pos = buf->size - 1;
17287
17288 bufsize_t i;
17289 for (i = pos; i >= 0; i--) {
17290 if (buf->ptr[i] == (unsigned char)c)
17291 return i;
17292 }
17293
17294 return -1;
17295 }
17296
17297 void cmark_strbuf_truncate(cmark_strbuf *buf, bufsize_t len) {
17298 if (len < 0)
17299 len = 0;
17300
17301 if (len < buf->size) {
17302 buf->size = len;
17303 buf->ptr[buf->size] = '\0';
17304 }
17305 }
17306
17307 void cmark_strbuf_drop(cmark_strbuf *buf, bufsize_t n) {
17308 if (n > 0) {
17309 if (n > buf->size)
17310 n = buf->size;
17311 buf->size = buf->size - n;
17312 if (buf->size)
17313 memmove(buf->ptr, buf->ptr + n, buf->size);
17314
17315 buf->ptr[buf->size] = '\0';
17316 }
17317 }
17318
17319 void cmark_strbuf_rtrim(cmark_strbuf *buf) {
17320 if (!buf->size)
17321 return;
17322
17323 while (buf->size > 0) {
17324 if (!cmark_isspace(buf->ptr[buf->size - 1]))
17325 break;
17326
17327 buf->size--;
17328 }
17329
17330 buf->ptr[buf->size] = '\0';
17331 }
17332
17333 void cmark_strbuf_trim(cmark_strbuf *buf) {
17334 bufsize_t i = 0;
17335
17336 if (!buf->size)
17337 return;
17338
17339 while (i < buf->size && cmark_isspace(buf->ptr[i]))
17340 i++;
17341
17342 cmark_strbuf_drop(buf, i);
17343
17344 cmark_strbuf_rtrim(buf);
17345 }
17346
17347 // Destructively modify string, collapsing consecutive
17348 // space and newline characters into a single space.
17349 void cmark_strbuf_normalize_whitespace(cmark_strbuf *s) {
17350 bool last_char_was_space = false;
17351 bufsize_t r, w;
17352
17353 for (r = 0, w = 0; r < s->size; ++r) {
17354 if (cmark_isspace(s->ptr[r])) {
17355 if (!last_char_was_space) {
17356 s->ptr[w++] = ' ';
17357 last_char_was_space = true;
17358 }
17359 } else {
17360 s->ptr[w++] = s->ptr[r];
17361 last_char_was_space = false;
17362 }
17363 }
17364
17365 cmark_strbuf_truncate(s, w);
17366 }
17367
17368 // Destructively unescape a string: remove backslashes before punctuation chars.
17369 extern void cmark_strbuf_unescape(cmark_strbuf *buf) {
17370 bufsize_t r, w;
17371
17372 for (r = 0, w = 0; r < buf->size; ++r) {
17373 if (buf->ptr[r] == '\\' && cmark_ispunct(buf->ptr[r + 1]))
17374 r++;
17375
17376 buf->ptr[w++] = buf->ptr[r];
17377 }
17378
17379 cmark_strbuf_truncate(buf, w);
17380 }
17381
17382
17383 static void S_node_unlink(cmark_node *node);
17384
17385 #define NODE_MEM(node) cmark_node_mem(node)
17386
17387 static CMARK_INLINE bool S_is_block(cmark_node *node) {
17388 if (node == NULL) {
17389 return false;
17390 }
17391 return node->type >= CMARK_NODE_FIRST_BLOCK &&
17392 node->type <= CMARK_NODE_LAST_BLOCK;
17393 }
17394
17395 static CMARK_INLINE bool S_is_inline(cmark_node *node) {
17396 if (node == NULL) {
17397 return false;
17398 }
17399 return node->type >= CMARK_NODE_FIRST_INLINE &&
17400 node->type <= CMARK_NODE_LAST_INLINE;
17401 }
17402
17403 static bool S_can_contain(cmark_node *node, cmark_node *child) {
17404 cmark_node *cur;
17405
17406 if (node == NULL || child == NULL) {
17407 return false;
17408 }
17409
17410 // Verify that child is not an ancestor of node or equal to node.
17411 cur = node;
17412 do {
17413 if (cur == child) {
17414 return false;
17415 }
17416 cur = cur->parent;
17417 } while (cur != NULL);
17418
17419 if (child->type == CMARK_NODE_DOCUMENT) {
17420 return false;
17421 }
17422
17423 switch (node->type) {
17424 case CMARK_NODE_DOCUMENT:
17425 case CMARK_NODE_BLOCK_QUOTE:
17426 case CMARK_NODE_ITEM:
17427 return S_is_block(child) && child->type != CMARK_NODE_ITEM;
17428
17429 case CMARK_NODE_LIST:
17430 return child->type == CMARK_NODE_ITEM;
17431
17432 case CMARK_NODE_CUSTOM_BLOCK:
17433 return true;
17434
17435 case CMARK_NODE_PARAGRAPH:
17436 case CMARK_NODE_HEADING:
17437 case CMARK_NODE_EMPH:
17438 case CMARK_NODE_STRONG:
17439 case CMARK_NODE_LINK:
17440 case CMARK_NODE_IMAGE:
17441 case CMARK_NODE_CUSTOM_INLINE:
17442 return S_is_inline(child);
17443
17444 default:
17445 break;
17446 }
17447
17448 return false;
17449 }
17450
17451 cmark_node *cmark_node_new_with_mem(cmark_node_type type, cmark_mem *mem) {
17452 cmark_node *node = (cmark_node *)mem->calloc(1, sizeof(*node));
17453 cmark_strbuf_init(mem, &node->content, 0);
17454 node->type = (uint16_t)type;
17455
17456 switch (node->type) {
17457 case CMARK_NODE_HEADING:
17458 node->as.heading.level = 1;
17459 break;
17460
17461 case CMARK_NODE_LIST: {
17462 cmark_list *list = &node->as.list;
17463 list->list_type = CMARK_BULLET_LIST;
17464 list->start = 1;
17465 list->tight = false;
17466 break;
17467 }
17468
17469 default:
17470 break;
17471 }
17472
17473 return node;
17474 }
17475
17476 cmark_node *cmark_node_new(cmark_node_type type) {
17477 extern cmark_mem DEFAULT_MEM_ALLOCATOR;
17478 return cmark_node_new_with_mem(type, &DEFAULT_MEM_ALLOCATOR);
17479 }
17480
17481 // Free a cmark_node list and any children.
17482 static void S_free_nodes(cmark_node *e) {
17483 cmark_node *next;
17484 while (e != NULL) {
17485 cmark_strbuf_free(&e->content);
17486 switch (e->type) {
17487 case CMARK_NODE_CODE_BLOCK:
17488 cmark_chunk_free(NODE_MEM(e), &e->as.code.info);
17489 cmark_chunk_free(NODE_MEM(e), &e->as.code.literal);
17490 break;
17491 case CMARK_NODE_TEXT:
17492 case CMARK_NODE_HTML_INLINE:
17493 case CMARK_NODE_CODE:
17494 case CMARK_NODE_HTML_BLOCK:
17495 cmark_chunk_free(NODE_MEM(e), &e->as.literal);
17496 break;
17497 case CMARK_NODE_LINK:
17498 case CMARK_NODE_IMAGE:
17499 cmark_chunk_free(NODE_MEM(e), &e->as.link.url);
17500 cmark_chunk_free(NODE_MEM(e), &e->as.link.title);
17501 break;
17502 case CMARK_NODE_CUSTOM_BLOCK:
17503 case CMARK_NODE_CUSTOM_INLINE:
17504 cmark_chunk_free(NODE_MEM(e), &e->as.custom.on_enter);
17505 cmark_chunk_free(NODE_MEM(e), &e->as.custom.on_exit);
17506 break;
17507 default:
17508 break;
17509 }
17510 if (e->last_child) {
17511 // Splice children into list
17512 e->last_child->next = e->next;
17513 e->next = e->first_child;
17514 }
17515 next = e->next;
17516 NODE_MEM(e)->free(e);
17517 e = next;
17518 }
17519 }
17520
17521 void cmark_node_free(cmark_node *node) {
17522 S_node_unlink(node);
17523 node->next = NULL;
17524 S_free_nodes(node);
17525 }
17526
17527 cmark_node_type cmark_node_get_type(cmark_node *node) {
17528 if (node == NULL) {
17529 return CMARK_NODE_NONE;
17530 } else {
17531 return (cmark_node_type)node->type;
17532 }
17533 }
17534
17535 const char *cmark_node_get_type_string(cmark_node *node) {
17536 if (node == NULL) {
17537 return "NONE";
17538 }
17539
17540 switch (node->type) {
17541 case CMARK_NODE_NONE:
17542 return "none";
17543 case CMARK_NODE_DOCUMENT:
17544 return "document";
17545 case CMARK_NODE_BLOCK_QUOTE:
17546 return "block_quote";
17547 case CMARK_NODE_LIST:
17548 return "list";
17549 case CMARK_NODE_ITEM:
17550 return "item";
17551 case CMARK_NODE_CODE_BLOCK:
17552 return "code_block";
17553 case CMARK_NODE_HTML_BLOCK:
17554 return "html_block";
17555 case CMARK_NODE_CUSTOM_BLOCK:
17556 return "custom_block";
17557 case CMARK_NODE_PARAGRAPH:
17558 return "paragraph";
17559 case CMARK_NODE_HEADING:
17560 return "heading";
17561 case CMARK_NODE_THEMATIC_BREAK:
17562 return "thematic_break";
17563 case CMARK_NODE_TEXT:
17564 return "text";
17565 case CMARK_NODE_SOFTBREAK:
17566 return "softbreak";
17567 case CMARK_NODE_LINEBREAK:
17568 return "linebreak";
17569 case CMARK_NODE_CODE:
17570 return "code";
17571 case CMARK_NODE_HTML_INLINE:
17572 return "html_inline";
17573 case CMARK_NODE_CUSTOM_INLINE:
17574 return "custom_inline";
17575 case CMARK_NODE_EMPH:
17576 return "emph";
17577 case CMARK_NODE_STRONG:
17578 return "strong";
17579 case CMARK_NODE_LINK:
17580 return "link";
17581 case CMARK_NODE_IMAGE:
17582 return "image";
17583 }
17584
17585 return "<unknown>";
17586 }
17587
17588 cmark_node *cmark_node_next(cmark_node *node) {
17589 if (node == NULL) {
17590 return NULL;
17591 } else {
17592 return node->next;
17593 }
17594 }
17595
17596 cmark_node *cmark_node_previous(cmark_node *node) {
17597 if (node == NULL) {
17598 return NULL;
17599 } else {
17600 return node->prev;
17601 }
17602 }
17603
17604 cmark_node *cmark_node_parent(cmark_node *node) {
17605 if (node == NULL) {
17606 return NULL;
17607 } else {
17608 return node->parent;
17609 }
17610 }
17611
17612 cmark_node *cmark_node_first_child(cmark_node *node) {
17613 if (node == NULL) {
17614 return NULL;
17615 } else {
17616 return node->first_child;
17617 }
17618 }
17619
17620 cmark_node *cmark_node_last_child(cmark_node *node) {
17621 if (node == NULL) {
17622 return NULL;
17623 } else {
17624 return node->last_child;
17625 }
17626 }
17627
17628 void *cmark_node_get_user_data(cmark_node *node) {
17629 if (node == NULL) {
17630 return NULL;
17631 } else {
17632 return node->user_data;
17633 }
17634 }
17635
17636 int cmark_node_set_user_data(cmark_node *node, void *user_data) {
17637 if (node == NULL) {
17638 return 0;
17639 }
17640 node->user_data = user_data;
17641 return 1;
17642 }
17643
17644 const char *cmark_node_get_literal(cmark_node *node) {
17645 if (node == NULL) {
17646 return NULL;
17647 }
17648
17649 switch (node->type) {
17650 case CMARK_NODE_HTML_BLOCK:
17651 case CMARK_NODE_TEXT:
17652 case CMARK_NODE_HTML_INLINE:
17653 case CMARK_NODE_CODE:
17654 return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.literal);
17655
17656 case CMARK_NODE_CODE_BLOCK:
17657 return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.code.literal);
17658
17659 default:
17660 break;
17661 }
17662
17663 return NULL;
17664 }
17665
17666 int cmark_node_set_literal(cmark_node *node, const char *content) {
17667 if (node == NULL) {
17668 return 0;
17669 }
17670
17671 switch (node->type) {
17672 case CMARK_NODE_HTML_BLOCK:
17673 case CMARK_NODE_TEXT:
17674 case CMARK_NODE_HTML_INLINE:
17675 case CMARK_NODE_CODE:
17676 cmark_chunk_set_cstr(NODE_MEM(node), &node->as.literal, content);
17677 return 1;
17678
17679 case CMARK_NODE_CODE_BLOCK:
17680 cmark_chunk_set_cstr(NODE_MEM(node), &node->as.code.literal, content);
17681 return 1;
17682
17683 default:
17684 break;
17685 }
17686
17687 return 0;
17688 }
17689
17690 int cmark_node_get_heading_level(cmark_node *node) {
17691 if (node == NULL) {
17692 return 0;
17693 }
17694
17695 switch (node->type) {
17696 case CMARK_NODE_HEADING:
17697 return node->as.heading.level;
17698
17699 default:
17700 break;
17701 }
17702
17703 return 0;
17704 }
17705
17706 int cmark_node_set_heading_level(cmark_node *node, int level) {
17707 if (node == NULL || level < 1 || level > 6) {
17708 return 0;
17709 }
17710
17711 switch (node->type) {
17712 case CMARK_NODE_HEADING:
17713 node->as.heading.level = level;
17714 return 1;
17715
17716 default:
17717 break;
17718 }
17719
17720 return 0;
17721 }
17722
17723 cmark_list_type cmark_node_get_list_type(cmark_node *node) {
17724 if (node == NULL) {
17725 return CMARK_NO_LIST;
17726 }
17727
17728 if (node->type == CMARK_NODE_LIST) {
17729 return node->as.list.list_type;
17730 } else {
17731 return CMARK_NO_LIST;
17732 }
17733 }
17734
17735 int cmark_node_set_list_type(cmark_node *node, cmark_list_type type) {
17736 if (!(type == CMARK_BULLET_LIST || type == CMARK_ORDERED_LIST)) {
17737 return 0;
17738 }
17739
17740 if (node == NULL) {
17741 return 0;
17742 }
17743
17744 if (node->type == CMARK_NODE_LIST) {
17745 node->as.list.list_type = type;
17746 return 1;
17747 } else {
17748 return 0;
17749 }
17750 }
17751
17752 cmark_delim_type cmark_node_get_list_delim(cmark_node *node) {
17753 if (node == NULL) {
17754 return CMARK_NO_DELIM;
17755 }
17756
17757 if (node->type == CMARK_NODE_LIST) {
17758 return node->as.list.delimiter;
17759 } else {
17760 return CMARK_NO_DELIM;
17761 }
17762 }
17763
17764 int cmark_node_set_list_delim(cmark_node *node, cmark_delim_type delim) {
17765 if (!(delim == CMARK_PERIOD_DELIM || delim == CMARK_PAREN_DELIM)) {
17766 return 0;
17767 }
17768
17769 if (node == NULL) {
17770 return 0;
17771 }
17772
17773 if (node->type == CMARK_NODE_LIST) {
17774 node->as.list.delimiter = delim;
17775 return 1;
17776 } else {
17777 return 0;
17778 }
17779 }
17780
17781 int cmark_node_get_list_start(cmark_node *node) {
17782 if (node == NULL) {
17783 return 0;
17784 }
17785
17786 if (node->type == CMARK_NODE_LIST) {
17787 return node->as.list.start;
17788 } else {
17789 return 0;
17790 }
17791 }
17792
17793 int cmark_node_set_list_start(cmark_node *node, int start) {
17794 if (node == NULL || start < 0) {
17795 return 0;
17796 }
17797
17798 if (node->type == CMARK_NODE_LIST) {
17799 node->as.list.start = start;
17800 return 1;
17801 } else {
17802 return 0;
17803 }
17804 }
17805
17806 int cmark_node_get_list_tight(cmark_node *node) {
17807 if (node == NULL) {
17808 return 0;
17809 }
17810
17811 if (node->type == CMARK_NODE_LIST) {
17812 return node->as.list.tight;
17813 } else {
17814 return 0;
17815 }
17816 }
17817
17818 int cmark_node_set_list_tight(cmark_node *node, int tight) {
17819 if (node == NULL) {
17820 return 0;
17821 }
17822
17823 if (node->type == CMARK_NODE_LIST) {
17824 node->as.list.tight = tight == 1;
17825 return 1;
17826 } else {
17827 return 0;
17828 }
17829 }
17830
17831 const char *cmark_node_get_fence_info(cmark_node *node) {
17832 if (node == NULL) {
17833 return NULL;
17834 }
17835
17836 if (node->type == CMARK_NODE_CODE_BLOCK) {
17837 return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.code.info);
17838 } else {
17839 return NULL;
17840 }
17841 }
17842
17843 int cmark_node_set_fence_info(cmark_node *node, const char *info) {
17844 if (node == NULL) {
17845 return 0;
17846 }
17847
17848 if (node->type == CMARK_NODE_CODE_BLOCK) {
17849 cmark_chunk_set_cstr(NODE_MEM(node), &node->as.code.info, info);
17850 return 1;
17851 } else {
17852 return 0;
17853 }
17854 }
17855
17856 const char *cmark_node_get_url(cmark_node *node) {
17857 if (node == NULL) {
17858 return NULL;
17859 }
17860
17861 switch (node->type) {
17862 case CMARK_NODE_LINK:
17863 case CMARK_NODE_IMAGE:
17864 return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.link.url);
17865 default:
17866 break;
17867 }
17868
17869 return NULL;
17870 }
17871
17872 int cmark_node_set_url(cmark_node *node, const char *url) {
17873 if (node == NULL) {
17874 return 0;
17875 }
17876
17877 switch (node->type) {
17878 case CMARK_NODE_LINK:
17879 case CMARK_NODE_IMAGE:
17880 cmark_chunk_set_cstr(NODE_MEM(node), &node->as.link.url, url);
17881 return 1;
17882 default:
17883 break;
17884 }
17885
17886 return 0;
17887 }
17888
17889 const char *cmark_node_get_title(cmark_node *node) {
17890 if (node == NULL) {
17891 return NULL;
17892 }
17893
17894 switch (node->type) {
17895 case CMARK_NODE_LINK:
17896 case CMARK_NODE_IMAGE:
17897 return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.link.title);
17898 default:
17899 break;
17900 }
17901
17902 return NULL;
17903 }
17904
17905 int cmark_node_set_title(cmark_node *node, const char *title) {
17906 if (node == NULL) {
17907 return 0;
17908 }
17909
17910 switch (node->type) {
17911 case CMARK_NODE_LINK:
17912 case CMARK_NODE_IMAGE:
17913 cmark_chunk_set_cstr(NODE_MEM(node), &node->as.link.title, title);
17914 return 1;
17915 default:
17916 break;
17917 }
17918
17919 return 0;
17920 }
17921
17922 const char *cmark_node_get_on_enter(cmark_node *node) {
17923 if (node == NULL) {
17924 return NULL;
17925 }
17926
17927 switch (node->type) {
17928 case CMARK_NODE_CUSTOM_INLINE:
17929 case CMARK_NODE_CUSTOM_BLOCK:
17930 return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.custom.on_enter);
17931 default:
17932 break;
17933 }
17934
17935 return NULL;
17936 }
17937
17938 int cmark_node_set_on_enter(cmark_node *node, const char *on_enter) {
17939 if (node == NULL) {
17940 return 0;
17941 }
17942
17943 switch (node->type) {
17944 case CMARK_NODE_CUSTOM_INLINE:
17945 case CMARK_NODE_CUSTOM_BLOCK:
17946 cmark_chunk_set_cstr(NODE_MEM(node), &node->as.custom.on_enter, on_enter);
17947 return 1;
17948 default:
17949 break;
17950 }
17951
17952 return 0;
17953 }
17954
17955 const char *cmark_node_get_on_exit(cmark_node *node) {
17956 if (node == NULL) {
17957 return NULL;
17958 }
17959
17960 switch (node->type) {
17961 case CMARK_NODE_CUSTOM_INLINE:
17962 case CMARK_NODE_CUSTOM_BLOCK:
17963 return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.custom.on_exit);
17964 default:
17965 break;
17966 }
17967
17968 return NULL;
17969 }
17970
17971 int cmark_node_set_on_exit(cmark_node *node, const char *on_exit) {
17972 if (node == NULL) {
17973 return 0;
17974 }
17975
17976 switch (node->type) {
17977 case CMARK_NODE_CUSTOM_INLINE:
17978 case CMARK_NODE_CUSTOM_BLOCK:
17979 cmark_chunk_set_cstr(NODE_MEM(node), &node->as.custom.on_exit, on_exit);
17980 return 1;
17981 default:
17982 break;
17983 }
17984
17985 return 0;
17986 }
17987
17988 int cmark_node_get_start_line(cmark_node *node) {
17989 if (node == NULL) {
17990 return 0;
17991 }
17992 return node->start_line;
17993 }
17994
17995 int cmark_node_get_start_column(cmark_node *node) {
17996 if (node == NULL) {
17997 return 0;
17998 }
17999 return node->start_column;
18000 }
18001
18002 int cmark_node_get_end_line(cmark_node *node) {
18003 if (node == NULL) {
18004 return 0;
18005 }
18006 return node->end_line;
18007 }
18008
18009 int cmark_node_get_end_column(cmark_node *node) {
18010 if (node == NULL) {
18011 return 0;
18012 }
18013 return node->end_column;
18014 }
18015
18016 // Unlink a node without adjusting its next, prev, and parent pointers.
18017 static void S_node_unlink(cmark_node *node) {
18018 if (node == NULL) {
18019 return;
18020 }
18021
18022 if (node->prev) {
18023 node->prev->next = node->next;
18024 }
18025 if (node->next) {
18026 node->next->prev = node->prev;
18027 }
18028
18029 // Adjust first_child and last_child of parent.
18030 cmark_node *parent = node->parent;
18031 if (parent) {
18032 if (parent->first_child == node) {
18033 parent->first_child = node->next;
18034 }
18035 if (parent->last_child == node) {
18036 parent->last_child = node->prev;
18037 }
18038 }
18039 }
18040
18041 void cmark_node_unlink(cmark_node *node) {
18042 S_node_unlink(node);
18043
18044 node->next = NULL;
18045 node->prev = NULL;
18046 node->parent = NULL;
18047 }
18048
18049 int cmark_node_insert_before(cmark_node *node, cmark_node *sibling) {
18050 if (node == NULL || sibling == NULL) {
18051 return 0;
18052 }
18053
18054 if (!node->parent || !S_can_contain(node->parent, sibling)) {
18055 return 0;
18056 }
18057
18058 S_node_unlink(sibling);
18059
18060 cmark_node *old_prev = node->prev;
18061
18062 // Insert 'sibling' between 'old_prev' and 'node'.
18063 if (old_prev) {
18064 old_prev->next = sibling;
18065 }
18066 sibling->prev = old_prev;
18067 sibling->next = node;
18068 node->prev = sibling;
18069
18070 // Set new parent.
18071 cmark_node *parent = node->parent;
18072 sibling->parent = parent;
18073
18074 // Adjust first_child of parent if inserted as first child.
18075 if (parent && !old_prev) {
18076 parent->first_child = sibling;
18077 }
18078
18079 return 1;
18080 }
18081
18082 int cmark_node_insert_after(cmark_node *node, cmark_node *sibling) {
18083 if (node == NULL || sibling == NULL) {
18084 return 0;
18085 }
18086
18087 if (!node->parent || !S_can_contain(node->parent, sibling)) {
18088 return 0;
18089 }
18090
18091 S_node_unlink(sibling);
18092
18093 cmark_node *old_next = node->next;
18094
18095 // Insert 'sibling' between 'node' and 'old_next'.
18096 if (old_next) {
18097 old_next->prev = sibling;
18098 }
18099 sibling->next = old_next;
18100 sibling->prev = node;
18101 node->next = sibling;
18102
18103 // Set new parent.
18104 cmark_node *parent = node->parent;
18105 sibling->parent = parent;
18106
18107 // Adjust last_child of parent if inserted as last child.
18108 if (parent && !old_next) {
18109 parent->last_child = sibling;
18110 }
18111
18112 return 1;
18113 }
18114
18115 int cmark_node_replace(cmark_node *oldnode, cmark_node *newnode) {
18116 if (!cmark_node_insert_before(oldnode, newnode)) {
18117 return 0;
18118 }
18119 cmark_node_unlink(oldnode);
18120 return 1;
18121 }
18122
18123 int cmark_node_prepend_child(cmark_node *node, cmark_node *child) {
18124 if (!S_can_contain(node, child)) {
18125 return 0;
18126 }
18127
18128 S_node_unlink(child);
18129
18130 cmark_node *old_first_child = node->first_child;
18131
18132 child->next = old_first_child;
18133 child->prev = NULL;
18134 child->parent = node;
18135 node->first_child = child;
18136
18137 if (old_first_child) {
18138 old_first_child->prev = child;
18139 } else {
18140 // Also set last_child if node previously had no children.
18141 node->last_child = child;
18142 }
18143
18144 return 1;
18145 }
18146
18147 int cmark_node_append_child(cmark_node *node, cmark_node *child) {
18148 if (!S_can_contain(node, child)) {
18149 return 0;
18150 }
18151
18152 S_node_unlink(child);
18153
18154 cmark_node *old_last_child = node->last_child;
18155
18156 child->next = NULL;
18157 child->prev = old_last_child;
18158 child->parent = node;
18159 node->last_child = child;
18160
18161 if (old_last_child) {
18162 old_last_child->next = child;
18163 } else {
18164 // Also set first_child if node previously had no children.
18165 node->first_child = child;
18166 }
18167
18168 return 1;
18169 }
18170
18171 static void S_print_error(FILE *out, cmark_node *node, const char *elem) {
18172 if (out == NULL) {
18173 return;
18174 }
18175 fprintf(out, "Invalid '%s' in node type %s at %d:%d\n", elem,
18176 cmark_node_get_type_string(node), node->start_line,
18177 node->start_column);
18178 }
18179
18180 int cmark_node_check(cmark_node *node, FILE *out) {
18181 cmark_node *cur;
18182 int errors = 0;
18183
18184 if (!node) {
18185 return 0;
18186 }
18187
18188 cur = node;
18189 for (;;) {
18190 if (cur->first_child) {
18191 if (cur->first_child->prev != NULL) {
18192 S_print_error(out, cur->first_child, "prev");
18193 cur->first_child->prev = NULL;
18194 ++errors;
18195 }
18196 if (cur->first_child->parent != cur) {
18197 S_print_error(out, cur->first_child, "parent");
18198 cur->first_child->parent = cur;
18199 ++errors;
18200 }
18201 cur = cur->first_child;
18202 continue;
18203 }
18204
18205 next_sibling:
18206 if (cur == node) {
18207 break;
18208 }
18209 if (cur->next) {
18210 if (cur->next->prev != cur) {
18211 S_print_error(out, cur->next, "prev");
18212 cur->next->prev = cur;
18213 ++errors;
18214 }
18215 if (cur->next->parent != cur->parent) {
18216 S_print_error(out, cur->next, "parent");
18217 cur->next->parent = cur->parent;
18218 ++errors;
18219 }
18220 cur = cur->next;
18221 continue;
18222 }
18223
18224 if (cur->parent->last_child != cur) {
18225 S_print_error(out, cur->parent, "last_child");
18226 cur->parent->last_child = cur;
18227 ++errors;
18228 }
18229 cur = cur->parent;
18230 goto next_sibling;
18231 }
18232
18233 return errors;
18234 }
18235
18236
18237 #include "entities.inc"
18238
18239 /* Binary tree lookup code for entities added by JGM */
18240
18241 static const unsigned char *S_lookup(int i, int low, int hi,
18242 const unsigned char *s, int len) {
18243 int j;
18244 int cmp =
18245 strncmp((const char *)s, (const char *)cmark_entities[i].entity, len);
18246 if (cmp == 0 && cmark_entities[i].entity[len] == 0) {
18247 return (const unsigned char *)cmark_entities[i].bytes;
18248 } else if (cmp <= 0 && i > low) {
18249 j = i - ((i - low) / 2);
18250 if (j == i)
18251 j -= 1;
18252 return S_lookup(j, low, i - 1, s, len);
18253 } else if (cmp > 0 && i < hi) {
18254 j = i + ((hi - i) / 2);
18255 if (j == i)
18256 j += 1;
18257 return S_lookup(j, i + 1, hi, s, len);
18258 } else {
18259 return NULL;
18260 }
18261 }
18262
18263 static const unsigned char *S_lookup_entity(const unsigned char *s, int len) {
18264 return S_lookup(CMARK_NUM_ENTITIES / 2, 0, CMARK_NUM_ENTITIES - 1, s, len);
18265 }
18266
18267 bufsize_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src,
18268 bufsize_t size) {
18269 bufsize_t i = 0;
18270
18271 if (size >= 3 && src[0] == '#') {
18272 int codepoint = 0;
18273 int num_digits = 0;
18274
18275 if (_isdigit(src[1])) {
18276 for (i = 1; i < size && _isdigit(src[i]); ++i) {
18277 codepoint = (codepoint * 10) + (src[i] - '0');
18278
18279 if (codepoint >= 0x110000) {
18280 // Keep counting digits but
18281 // avoid integer overflow.
18282 codepoint = 0x110000;
18283 }
18284 }
18285
18286 num_digits = i - 1;
18287 }
18288
18289 else if (src[1] == 'x' || src[1] == 'X') {
18290 for (i = 2; i < size && _isxdigit(src[i]); ++i) {
18291 codepoint = (codepoint * 16) + ((src[i] | 32) % 39 - 9);
18292
18293 if (codepoint >= 0x110000) {
18294 // Keep counting digits but
18295 // avoid integer overflow.
18296 codepoint = 0x110000;
18297 }
18298 }
18299
18300 num_digits = i - 2;
18301 }
18302
18303 if (num_digits >= 1 && num_digits <= 8 && i < size && src[i] == ';') {
18304 if (codepoint == 0 || (codepoint >= 0xD800 && codepoint < 0xE000) ||
18305 codepoint >= 0x110000) {
18306 codepoint = 0xFFFD;
18307 }
18308 cmark_utf8proc_encode_char(codepoint, ob);
18309 return i + 1;
18310 }
18311 }
18312
18313 else {
18314 if (size > CMARK_ENTITY_MAX_LENGTH)
18315 size = CMARK_ENTITY_MAX_LENGTH;
18316
18317 for (i = CMARK_ENTITY_MIN_LENGTH; i < size; ++i) {
18318 if (src[i] == ' ')
18319 break;
18320
18321 if (src[i] == ';') {
18322 const unsigned char *entity = S_lookup_entity(src, i);
18323
18324 if (entity != NULL) {
18325 cmark_strbuf_puts(ob, (const char *)entity);
18326 return i + 1;
18327 }
18328
18329 break;
18330 }
18331 }
18332 }
18333
18334 return 0;
18335 }
18336
18337 int houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src,
18338 bufsize_t size) {
18339 bufsize_t i = 0, org, ent;
18340
18341 while (i < size) {
18342 org = i;
18343 while (i < size && src[i] != '&')
18344 i++;
18345
18346 if (likely(i > org)) {
18347 if (unlikely(org == 0)) {
18348 if (i >= size)
18349 return 0;
18350
18351 cmark_strbuf_grow(ob, HOUDINI_UNESCAPED_SIZE(size));
18352 }
18353
18354 cmark_strbuf_put(ob, src + org, i - org);
18355 }
18356
18357 /* escaping */
18358 if (i >= size)
18359 break;
18360
18361 i++;
18362
18363 ent = houdini_unescape_ent(ob, src + i, size - i);
18364 i += ent;
18365
18366 /* not really an entity */
18367 if (ent == 0)
18368 cmark_strbuf_putc(ob, '&');
18369 }
18370
18371 return 1;
18372 }
18373
18374 void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src,
18375 bufsize_t size) {
18376 if (!houdini_unescape_html(ob, src, size))
18377 cmark_strbuf_put(ob, src, size);
18378 }
18379
18380
18381 static const int S_leaf_mask =
18382 (1 << CMARK_NODE_HTML_BLOCK) | (1 << CMARK_NODE_THEMATIC_BREAK) |
18383 (1 << CMARK_NODE_CODE_BLOCK) | (1 << CMARK_NODE_TEXT) |
18384 (1 << CMARK_NODE_SOFTBREAK) | (1 << CMARK_NODE_LINEBREAK) |
18385 (1 << CMARK_NODE_CODE) | (1 << CMARK_NODE_HTML_INLINE);
18386
18387 cmark_iter *cmark_iter_new(cmark_node *root) {
18388 if (root == NULL) {
18389 return NULL;
18390 }
18391 cmark_mem *mem = root->content.mem;
18392 cmark_iter *iter = (cmark_iter *)mem->calloc(1, sizeof(cmark_iter));
18393 iter->mem = mem;
18394 iter->root = root;
18395 iter->cur.ev_type = CMARK_EVENT_NONE;
18396 iter->cur.node = NULL;
18397 iter->next.ev_type = CMARK_EVENT_ENTER;
18398 iter->next.node = root;
18399 return iter;
18400 }
18401
18402 void cmark_iter_free(cmark_iter *iter) { iter->mem->free(iter); }
18403
18404 static bool S_is_leaf(cmark_node *node) {
18405 return ((1 << node->type) & S_leaf_mask) != 0;
18406 }
18407
18408 cmark_event_type cmark_iter_next(cmark_iter *iter) {
18409 cmark_event_type ev_type = iter->next.ev_type;
18410 cmark_node *node = iter->next.node;
18411
18412 iter->cur.ev_type = ev_type;
18413 iter->cur.node = node;
18414
18415 if (ev_type == CMARK_EVENT_DONE) {
18416 return ev_type;
18417 }
18418
18419 /* roll forward to next item, setting both fields */
18420 if (ev_type == CMARK_EVENT_ENTER && !S_is_leaf(node)) {
18421 if (node->first_child == NULL) {
18422 /* stay on this node but exit */
18423 iter->next.ev_type = CMARK_EVENT_EXIT;
18424 } else {
18425 iter->next.ev_type = CMARK_EVENT_ENTER;
18426 iter->next.node = node->first_child;
18427 }
18428 } else if (node == iter->root) {
18429 /* don't move past root */
18430 iter->next.ev_type = CMARK_EVENT_DONE;
18431 iter->next.node = NULL;
18432 } else if (node->next) {
18433 iter->next.ev_type = CMARK_EVENT_ENTER;
18434 iter->next.node = node->next;
18435 } else if (node->parent) {
18436 iter->next.ev_type = CMARK_EVENT_EXIT;
18437 iter->next.node = node->parent;
18438 } else {
18439 assert(false);
18440 iter->next.ev_type = CMARK_EVENT_DONE;
18441 iter->next.node = NULL;
18442 }
18443
18444 return ev_type;
18445 }
18446
18447 void cmark_iter_reset(cmark_iter *iter, cmark_node *current,
18448 cmark_event_type event_type) {
18449 iter->next.ev_type = event_type;
18450 iter->next.node = current;
18451 cmark_iter_next(iter);
18452 }
18453
18454 cmark_node *cmark_iter_get_node(cmark_iter *iter) { return iter->cur.node; }
18455
18456 cmark_event_type cmark_iter_get_event_type(cmark_iter *iter) {
18457 return iter->cur.ev_type;
18458 }
18459
18460 cmark_node *cmark_iter_get_root(cmark_iter *iter) { return iter->root; }
18461
18462 void cmark_consolidate_text_nodes(cmark_node *root) {
18463 if (root == NULL) {
18464 return;
18465 }
18466 cmark_iter *iter = cmark_iter_new(root);
18467 cmark_strbuf buf = CMARK_BUF_INIT(iter->mem);
18468 cmark_event_type ev_type;
18469 cmark_node *cur, *tmp, *next;
18470
18471 while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
18472 cur = cmark_iter_get_node(iter);
18473 if (ev_type == CMARK_EVENT_ENTER && cur->type == CMARK_NODE_TEXT &&
18474 cur->next && cur->next->type == CMARK_NODE_TEXT) {
18475 cmark_strbuf_clear(&buf);
18476 cmark_strbuf_put(&buf, cur->as.literal.data, cur->as.literal.len);
18477 tmp = cur->next;
18478 while (tmp && tmp->type == CMARK_NODE_TEXT) {
18479 cmark_iter_next(iter); // advance pointer
18480 cmark_strbuf_put(&buf, tmp->as.literal.data, tmp->as.literal.len);
18481 next = tmp->next;
18482 cmark_node_free(tmp);
18483 tmp = next;
18484 }
18485 cmark_chunk_free(iter->mem, &cur->as.literal);
18486 cur->as.literal = cmark_chunk_buf_detach(&buf);
18487 }
18488 }
18489
18490 cmark_strbuf_free(&buf);
18491 cmark_iter_free(iter);
18492 }
18493
18494
18495 #define BUFFER_SIZE 100
18496
18497 // Functions to convert cmark_nodes to HTML strings.
18498
18499 static void escape_html(cmark_strbuf *dest, const unsigned char *source,
18500 bufsize_t length) {
18501 houdini_escape_html0(dest, source, length, 0);
18502 }
18503
18504 static CMARK_INLINE void cr(cmark_strbuf *html) {
18505 if (html->size && html->ptr[html->size - 1] != '\n')
18506 cmark_strbuf_putc(html, '\n');
18507 }
18508
18509 struct render_state {
18510 cmark_strbuf *html;
18511 cmark_node *plain;
18512 };
18513
18514 static void S_render_sourcepos(cmark_node *node, cmark_strbuf *html,
18515 int options) {
18516 char buffer[BUFFER_SIZE];
18517 if (CMARK_OPT_SOURCEPOS & options) {
18518 snprintf(buffer, BUFFER_SIZE, " data-sourcepos=\"%d:%d-%d:%d\"",
18519 cmark_node_get_start_line(node), cmark_node_get_start_column(node),
18520 cmark_node_get_end_line(node), cmark_node_get_end_column(node));
18521 cmark_strbuf_puts(html, buffer);
18522 }
18523 }
18524
18525 static int S_render_node(cmark_node *node, cmark_event_type ev_type,
18526 struct render_state *state, int options) {
18527 cmark_node *parent;
18528 cmark_node *grandparent;
18529 cmark_strbuf *html = state->html;
18530 char start_heading[] = "<h0";
18531 char end_heading[] = "</h0";
18532 bool tight;
18533 char buffer[BUFFER_SIZE];
18534
18535 bool entering = (ev_type == CMARK_EVENT_ENTER);
18536
18537 if (state->plain == node) { // back at original node
18538 state->plain = NULL;
18539 }
18540
18541 if (state->plain != NULL) {
18542 switch (node->type) {
18543 case CMARK_NODE_TEXT:
18544 case CMARK_NODE_CODE:
18545 case CMARK_NODE_HTML_INLINE:
18546 escape_html(html, node->as.literal.data, node->as.literal.len);
18547 break;
18548
18549 case CMARK_NODE_LINEBREAK:
18550 case CMARK_NODE_SOFTBREAK:
18551 cmark_strbuf_putc(html, ' ');
18552 break;
18553
18554 default:
18555 break;
18556 }
18557 return 1;
18558 }
18559
18560 switch (node->type) {
18561 case CMARK_NODE_DOCUMENT:
18562 break;
18563
18564 case CMARK_NODE_BLOCK_QUOTE:
18565 if (entering) {
18566 cr(html);
18567 cmark_strbuf_puts(html, "<blockquote");
18568 S_render_sourcepos(node, html, options);
18569 cmark_strbuf_puts(html, ">\n");
18570 } else {
18571 cr(html);
18572 cmark_strbuf_puts(html, "</blockquote>\n");
18573 }
18574 break;
18575
18576 case CMARK_NODE_LIST: {
18577 cmark_list_type list_type = node->as.list.list_type;
18578 int start = node->as.list.start;
18579
18580 if (entering) {
18581 cr(html);
18582 if (list_type == CMARK_BULLET_LIST) {
18583 cmark_strbuf_puts(html, "<ul");
18584 S_render_sourcepos(node, html, options);
18585 cmark_strbuf_puts(html, ">\n");
18586 } else if (start == 1) {
18587 cmark_strbuf_puts(html, "<ol");
18588 S_render_sourcepos(node, html, options);
18589 cmark_strbuf_puts(html, ">\n");
18590 } else {
18591 snprintf(buffer, BUFFER_SIZE, "<ol start=\"%d\"", start);
18592 cmark_strbuf_puts(html, buffer);
18593 S_render_sourcepos(node, html, options);
18594 cmark_strbuf_puts(html, ">\n");
18595 }
18596 } else {
18597 cmark_strbuf_puts(html,
18598 list_type == CMARK_BULLET_LIST ? "</ul>\n" : "</ol>\n");
18599 }
18600 break;
18601 }
18602
18603 case CMARK_NODE_ITEM:
18604 if (entering) {
18605 cr(html);
18606 cmark_strbuf_puts(html, "<li");
18607 S_render_sourcepos(node, html, options);
18608 cmark_strbuf_putc(html, '>');
18609 } else {
18610 cmark_strbuf_puts(html, "</li>\n");
18611 }
18612 break;
18613
18614 case CMARK_NODE_HEADING:
18615 if (entering) {
18616 cr(html);
18617 start_heading[2] = (char)('0' + node->as.heading.level);
18618 cmark_strbuf_puts(html, start_heading);
18619 S_render_sourcepos(node, html, options);
18620 cmark_strbuf_putc(html, '>');
18621 } else {
18622 end_heading[3] = (char)('0' + node->as.heading.level);
18623 cmark_strbuf_puts(html, end_heading);
18624 cmark_strbuf_puts(html, ">\n");
18625 }
18626 break;
18627
18628 case CMARK_NODE_CODE_BLOCK:
18629 cr(html);
18630
18631 if (node->as.code.info.len == 0) {
18632 cmark_strbuf_puts(html, "<pre");
18633 S_render_sourcepos(node, html, options);
18634 cmark_strbuf_puts(html, "><code>");
18635 } else {
18636 bufsize_t first_tag = 0;
18637 while (first_tag < node->as.code.info.len &&
18638 !cmark_isspace(node->as.code.info.data[first_tag])) {
18639 first_tag += 1;
18640 }
18641
18642 cmark_strbuf_puts(html, "<pre");
18643 S_render_sourcepos(node, html, options);
18644 cmark_strbuf_puts(html, "><code class=\"language-");
18645 escape_html(html, node->as.code.info.data, first_tag);
18646 cmark_strbuf_puts(html, "\">");
18647 }
18648
18649 escape_html(html, node->as.code.literal.data, node->as.code.literal.len);
18650 cmark_strbuf_puts(html, "</code></pre>\n");
18651 break;
18652
18653 case CMARK_NODE_HTML_BLOCK:
18654 cr(html);
18655 if (options & CMARK_OPT_SAFE) {
18656 cmark_strbuf_puts(html, "<!-- raw HTML omitted -->");
18657 } else {
18658 cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len);
18659 }
18660 cr(html);
18661 break;
18662
18663 case CMARK_NODE_CUSTOM_BLOCK:
18664 cr(html);
18665 if (entering) {
18666 cmark_strbuf_put(html, node->as.custom.on_enter.data,
18667 node->as.custom.on_enter.len);
18668 } else {
18669 cmark_strbuf_put(html, node->as.custom.on_exit.data,
18670 node->as.custom.on_exit.len);
18671 }
18672 cr(html);
18673 break;
18674
18675 case CMARK_NODE_THEMATIC_BREAK:
18676 cr(html);
18677 cmark_strbuf_puts(html, "<hr");
18678 S_render_sourcepos(node, html, options);
18679 cmark_strbuf_puts(html, " />\n");
18680 break;
18681
18682 case CMARK_NODE_PARAGRAPH:
18683 parent = cmark_node_parent(node);
18684 grandparent = cmark_node_parent(parent);
18685 if (grandparent != NULL && grandparent->type == CMARK_NODE_LIST) {
18686 tight = grandparent->as.list.tight;
18687 } else {
18688 tight = false;
18689 }
18690 if (!tight) {
18691 if (entering) {
18692 cr(html);
18693 cmark_strbuf_puts(html, "<p");
18694 S_render_sourcepos(node, html, options);
18695 cmark_strbuf_putc(html, '>');
18696 } else {
18697 cmark_strbuf_puts(html, "</p>\n");
18698 }
18699 }
18700 break;
18701
18702 case CMARK_NODE_TEXT:
18703 escape_html(html, node->as.literal.data, node->as.literal.len);
18704 break;
18705
18706 case CMARK_NODE_LINEBREAK:
18707 cmark_strbuf_puts(html, "<br />\n");
18708 break;
18709
18710 case CMARK_NODE_SOFTBREAK:
18711 if (options & CMARK_OPT_HARDBREAKS) {
18712 cmark_strbuf_puts(html, "<br />\n");
18713 } else if (options & CMARK_OPT_NOBREAKS) {
18714 cmark_strbuf_putc(html, ' ');
18715 } else {
18716 cmark_strbuf_putc(html, '\n');
18717 }
18718 break;
18719
18720 case CMARK_NODE_CODE:
18721 cmark_strbuf_puts(html, "<code>");
18722 escape_html(html, node->as.literal.data, node->as.literal.len);
18723 cmark_strbuf_puts(html, "</code>");
18724 break;
18725
18726 case CMARK_NODE_HTML_INLINE:
18727 if (options & CMARK_OPT_SAFE) {
18728 cmark_strbuf_puts(html, "<!-- raw HTML omitted -->");
18729 } else {
18730 cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len);
18731 }
18732 break;
18733
18734 case CMARK_NODE_CUSTOM_INLINE:
18735 if (entering) {
18736 cmark_strbuf_put(html, node->as.custom.on_enter.data,
18737 node->as.custom.on_enter.len);
18738 } else {
18739 cmark_strbuf_put(html, node->as.custom.on_exit.data,
18740 node->as.custom.on_exit.len);
18741 }
18742 break;
18743
18744 case CMARK_NODE_STRONG:
18745 if (entering) {
18746 cmark_strbuf_puts(html, "<strong>");
18747 } else {
18748 cmark_strbuf_puts(html, "</strong>");
18749 }
18750 break;
18751
18752 case CMARK_NODE_EMPH:
18753 if (entering) {
18754 cmark_strbuf_puts(html, "<em>");
18755 } else {
18756 cmark_strbuf_puts(html, "</em>");
18757 }
18758 break;
18759
18760 case CMARK_NODE_LINK:
18761 if (entering) {
18762 cmark_strbuf_puts(html, "<a href=\"");
18763 if (!((options & CMARK_OPT_SAFE) &&
18764 scan_dangerous_url(&node->as.link.url, 0))) {
18765 houdini_escape_href(html, node->as.link.url.data,
18766 node->as.link.url.len);
18767 }
18768 if (node->as.link.title.len) {
18769 cmark_strbuf_puts(html, "\" title=\"");
18770 escape_html(html, node->as.link.title.data, node->as.link.title.len);
18771 }
18772 cmark_strbuf_puts(html, "\">");
18773 } else {
18774 cmark_strbuf_puts(html, "</a>");
18775 }
18776 break;
18777
18778 case CMARK_NODE_IMAGE:
18779 if (entering) {
18780 cmark_strbuf_puts(html, "<img src=\"");
18781 if (!((options & CMARK_OPT_SAFE) &&
18782 scan_dangerous_url(&node->as.link.url, 0))) {
18783 houdini_escape_href(html, node->as.link.url.data,
18784 node->as.link.url.len);
18785 }
18786 cmark_strbuf_puts(html, "\" alt=\"");
18787 state->plain = node;
18788 } else {
18789 if (node->as.link.title.len) {
18790 cmark_strbuf_puts(html, "\" title=\"");
18791 escape_html(html, node->as.link.title.data, node->as.link.title.len);
18792 }
18793
18794 cmark_strbuf_puts(html, "\" />");
18795 }
18796 break;
18797
18798 default:
18799 assert(false);
18800 break;
18801 }
18802
18803 // cmark_strbuf_putc(html, 'x');
18804 return 1;
18805 }
18806
18807 char *cmark_render_html(cmark_node *root, int options) {
18808 char *result;
18809 cmark_strbuf html = CMARK_BUF_INIT(cmark_node_mem(root));
18810 cmark_event_type ev_type;
18811 cmark_node *cur;
18812 struct render_state state = {&html, NULL};
18813 cmark_iter *iter = cmark_iter_new(root);
18814
18815 while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
18816 cur = cmark_iter_get_node(iter);
18817 S_render_node(cur, ev_type, &state, options);
18818 }
18819 result = (char *)cmark_strbuf_detach(&html);
18820
18821 cmark_iter_free(iter);
18822 return result;
18823 }
18824
18825
18826
18827 /**
18828 * According to the OWASP rules:
18829 *
18830 * & --> &amp;
18831 * < --> &lt;
18832 * > --> &gt;
18833 * " --> &quot;
18834 * ' --> &#x27; &apos; is not recommended
18835 * / --> &#x2F; forward slash is included as it helps end an HTML entity
18836 *
18837 */
18838 static const char HTML_ESCAPE_TABLE[] = {
18839 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18840 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 4,
18841 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18842 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18843 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18844 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18845 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18846 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18847 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18848 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18849 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18850 };
18851
18852 static const char *HTML_ESCAPES[] = {"", "&quot;", "&amp;", "&#39;",
18853 "&#47;", "&lt;", "&gt;"};
18854
18855 int houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src, bufsize_t size,
18856 int secure) {
18857 bufsize_t i = 0, org, esc = 0;
18858
18859 while (i < size) {
18860 org = i;
18861 while (i < size && (esc = HTML_ESCAPE_TABLE[src[i]]) == 0)
18862 i++;
18863
18864 if (i > org)
18865 cmark_strbuf_put(ob, src + org, i - org);
18866
18867 /* escaping */
18868 if (unlikely(i >= size))
18869 break;
18870
18871 /* The forward slash is only escaped in secure mode */
18872 if ((src[i] == '/' || src[i] == '\'') && !secure) {
18873 cmark_strbuf_putc(ob, src[i]);
18874 } else {
18875 cmark_strbuf_puts(ob, HTML_ESCAPES[esc]);
18876 }
18877
18878 i++;
18879 }
18880
18881 return 1;
18882 }
18883
18884 int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) {
18885 return houdini_escape_html0(ob, src, size, 1);
18886 }
18887
18888
18889 /*
18890 * The following characters will not be escaped:
18891 *
18892 * -_.+!*'(),%#@?=;:/,+&$ alphanum
18893 *
18894 * Note that this character set is the addition of:
18895 *
18896 * - The characters which are safe to be in an URL
18897 * - The characters which are *not* safe to be in
18898 * an URL because they are RESERVED characters.
18899 *
18900 * We asume (lazily) that any RESERVED char that
18901 * appears inside an URL is actually meant to
18902 * have its native function (i.e. as an URL
18903 * component/separator) and hence needs no escaping.
18904 *
18905 * There are two exceptions: the chacters & (amp)
18906 * and ' (single quote) do not appear in the table.
18907 * They are meant to appear in the URL as components,
18908 * yet they require special HTML-entity escaping
18909 * to generate valid HTML markup.
18910 *
18911 * All other characters will be escaped to %XX.
18912 *
18913 */
18914 static const char HREF_SAFE[] = {
18915 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18916 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
18917 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
18918 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,
18919 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
18920 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18921 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18922 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18923 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18924 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18925 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18926 };
18927
18928 int houdini_escape_href(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) {
18929 static const uint8_t hex_chars[] = "0123456789ABCDEF";
18930 bufsize_t i = 0, org;
18931 uint8_t hex_str[3];
18932
18933 hex_str[0] = '%';
18934
18935 while (i < size) {
18936 org = i;
18937 while (i < size && HREF_SAFE[src[i]] != 0)
18938 i++;
18939
18940 if (likely(i > org))
18941 cmark_strbuf_put(ob, src + org, i - org);
18942
18943 /* escaping */
18944 if (i >= size)
18945 break;
18946
18947 switch (src[i]) {
18948 /* amp appears all the time in URLs, but needs
18949 * HTML-entity escaping to be inside an href */
18950 case '&':
18951 cmark_strbuf_puts(ob, "&amp;");
18952 break;
18953
18954 /* the single quote is a valid URL character
18955 * according to the standard; it needs HTML
18956 * entity escaping too */
18957 case '\'':
18958 cmark_strbuf_puts(ob, "&#x27;");
18959 break;
18960
18961 /* the space can be escaped to %20 or a plus
18962 * sign. we're going with the generic escape
18963 * for now. the plus thing is more commonly seen
18964 * when building GET strings */
18965 #if 0
18966 case ' ':
18967 cmark_strbuf_putc(ob, '+');
18968 break;
18969 #endif
18970
18971 /* every other character goes with a %XX escaping */
18972 default:
18973 hex_str[1] = hex_chars[(src[i] >> 4) & 0xF];
18974 hex_str[2] = hex_chars[src[i] & 0xF];
18975 cmark_strbuf_put(ob, hex_str, 3);
18976 }
18977
18978 i++;
18979 }
18980
18981 return 1;
18982 }
--- a/src/cmark_amalgamation.h
+++ b/src/cmark_amalgamation.h
@@ -0,0 +1,2019 @@
1
+#ifndef CMARK_H
2
+#define CMARK_H
3
+
4
+#include <stdio.h>
5
+#include <stdarg.h>
6
+#include <string.h>
7
+#include <assert.h>
8
+#include <string.h>
9
+#include <stdio.h>
10
+#include <stdlib.h>
11
+#include <stdint.h>
12
+#include <limits.h>
13
+
14
+#ifdef __cplusplus
15
+extern "C" {
16
+#endif
17
+#ifndef CMARK_CONFIG_H
18
+#define CMARK_CONFIG_H
19
+
20
+#ifdef __cplusplus
21
+extern "C" {
22
+#endif
23
+
24
+#define HAVE_STDBOOL_H
25
+
26
+#ifdef HAVE_STDBOOL_H
27
+ #include <stdbool.h>
28
+#elif !defined(__cplusplus)
29
+ typedef char bool;
30
+#endif
31
+
32
+#define HAVE___BUILTIN_EXPECT
33
+
34
+#define HAVE___ATTRIBUTE__
35
+
36
+#ifdef HAVE___ATTRIBUTE__
37
+ #define CMARK_ATTRIBUTE(list) __attribute__ (list)
38
+#else
39
+ #define CMARK_ATTRIBUTE(list)
40
+#endif
41
+
42
+#ifndef CMARK_INLINE
43
+ #if defined(_MSC_VER) && !defined(__cplusplus)
44
+ #define CMARK_INLINE __inline
45
+ #else
46
+ #define CMARK_INLINE inline
47
+ #endif
48
+#endif
49
+
50
+/* snprintf and vsnprintf fallbacks for MSVC before 2015,
51
+ due to Valentin Milea http://stackoverflow.com/questions/2915672/
52
+*/
53
+
54
+#if defined(_MSC_VER) && _MSC_VER < 1900
55
+
56
+#include <stdio.h>
57
+#include <stdarg.h>
58
+
59
+#define snprintf c99_snprintf
60
+#define vsnprintf c99_vsnprintf
61
+
62
+CMARK_INLINE int c99_vsnprintf(char *outBuf, size_t size, const char *format, va_list ap)
63
+{
64
+ int count = -1;
65
+
66
+ if (size != 0)
67
+ count = _vsnprintf_s(outBuf, size, _TRUNCATE, format, ap);
68
+ if (count == -1)
69
+ count = _vscprintf(format, ap);
70
+
71
+ return count;
72
+}
73
+
74
+CMARK_INLINE int c99_snprintf(char *outBuf, size_t size, const char *format, ...)
75
+{
76
+ int count;
77
+ va_list ap;
78
+
79
+ va_start(ap, format);
80
+ count = c99_vsnprintf(outBuf, size, format, ap);
81
+ va_end(ap);
82
+
83
+ return count;
84
+}
85
+
86
+#endif
87
+
88
+#ifdef __cplusplus
89
+}
90
+#endif
91
+
92
+#endif
93
+/** # NAME
94
+ *
95
+ * **cmark** - CommonMark parsing, manipulating, and rendering
96
+ */
97
+#ifndef CMARK_EXPORT_H
98
+#define CMARK_EXPORT_H
99
+
100
+#ifdef CMARK_STATIC_DEFINE
101
+# define CMARK_EXPORT
102
+# define CMARK_NO_EXPORT
103
+#else
104
+# ifndef CMARK_EXPORT
105
+# ifdef libcmark_EXPORTS
106
+ /* We are building this library */
107
+# define CMARK_EXPORT __attribute__((visibility("default")))
108
+# else
109
+ /* We are using this library */
110
+# define CMARK_EXPORT __attribute__((visibility("default")))
111
+# endif
112
+# endif
113
+
114
+# ifndef CMARK_NO_EXPORT
115
+# define CMARK_NO_EXPORT __attribute__((visibility("hidden")))
116
+# endif
117
+#endif
118
+
119
+#ifndef CMARK_DEPRECATED
120
+# define CMARK_DEPRECATED __attribute__ ((__deprecated__))
121
+#endif
122
+
123
+#ifndef CMARK_DEPRECATED_EXPORT
124
+# define CMARK_DEPRECATED_EXPORT CMARK_EXPORT CMARK_DEPRECATED
125
+#endif
126
+
127
+#ifndef CMARK_DEPRECATED_NO_EXPORT
128
+# define CMARK_DEPRECATED_NO_EXPORT CMARK_NO_EXPORT CMARK_DEPRECATED
129
+#endif
130
+
131
+#if 0 /* DEFINE_NO_DEPRECATED */
132
+# ifndef CMARK_NO_DEPRECATED
133
+# define CMARK_NO_DEPRECATED
134
+# endif
135
+#endif
136
+
137
+#endif
138
+/** # DESCRIPTION
139
+ *
140
+ * ## Simple Interface
141
+ */
142
+
143
+/** Convert 'text' (assumed to be a UTF-8 encoded string with length
144
+ * 'len') from CommonMark Markdown to HTML, returning a null-terminated,
145
+ * UTF-8-encoded string. It is the caller's responsibility
146
+ * to free the returned buffer.
147
+ */
148
+CMARK_EXPORT
149
+char *cmark_markdown_to_html(const char *text, size_t len, int options);
150
+
151
+/** ## Node Structure
152
+ */
153
+
154
+typedef enum {
155
+ /* Error status */
156
+ CMARK_NODE_NONE,
157
+
158
+ /* Block */
159
+ CMARK_NODE_DOCUMENT,
160
+ CMARK_NODE_BLOCK_QUOTE,
161
+ CMARK_NODE_LIST,
162
+ CMARK_NODE_ITEM,
163
+ CMARK_NODE_CODE_BLOCK,
164
+ CMARK_NODE_HTML_BLOCK,
165
+ CMARK_NODE_CUSTOM_BLOCK,
166
+ CMARK_NODE_PARAGRAPH,
167
+ CMARK_NODE_HEADING,
168
+ CMARK_NODE_THEMATIC_BREAK,
169
+
170
+ CMARK_NODE_FIRST_BLOCK = CMARK_NODE_DOCUMENT,
171
+ CMARK_NODE_LAST_BLOCK = CMARK_NODE_THEMATIC_BREAK,
172
+
173
+ /* Inline */
174
+ CMARK_NODE_TEXT,
175
+ CMARK_NODE_SOFTBREAK,
176
+ CMARK_NODE_LINEBREAK,
177
+ CMARK_NODE_CODE,
178
+ CMARK_NODE_HTML_INLINE,
179
+ CMARK_NODE_CUSTOM_INLINE,
180
+ CMARK_NODE_EMPH,
181
+ CMARK_NODE_STRONG,
182
+ CMARK_NODE_LINK,
183
+ CMARK_NODE_IMAGE,
184
+
185
+ CMARK_NODE_FIRST_INLINE = CMARK_NODE_TEXT,
186
+ CMARK_NODE_LAST_INLINE = CMARK_NODE_IMAGE,
187
+} cmark_node_type;
188
+
189
+/* For backwards compatibility: */
190
+#define CMARK_NODE_HEADER CMARK_NODE_HEADING
191
+#define CMARK_NODE_HRULE CMARK_NODE_THEMATIC_BREAK
192
+#define CMARK_NODE_HTML CMARK_NODE_HTML_BLOCK
193
+#define CMARK_NODE_INLINE_HTML CMARK_NODE_HTML_INLINE
194
+
195
+typedef enum {
196
+ CMARK_NO_LIST,
197
+ CMARK_BULLET_LIST,
198
+ CMARK_ORDERED_LIST
199
+} cmark_list_type;
200
+
201
+typedef enum {
202
+ CMARK_NO_DELIM,
203
+ CMARK_PERIOD_DELIM,
204
+ CMARK_PAREN_DELIM
205
+} cmark_delim_type;
206
+
207
+typedef struct cmark_node cmark_node;
208
+typedef struct cmark_parser cmark_parser;
209
+typedef struct cmark_iter cmark_iter;
210
+
211
+/**
212
+ * ## Custom memory allocator support
213
+ */
214
+
215
+/** Defines the memory allocation functions to be used by CMark
216
+ * when parsing and allocating a document tree
217
+ */
218
+typedef struct cmark_mem {
219
+ void *(*calloc)(size_t, size_t);
220
+ void *(*realloc)(void *, size_t);
221
+ void (*free)(void *);
222
+} cmark_mem;
223
+
224
+/**
225
+ * ## Creating and Destroying Nodes
226
+ */
227
+
228
+/** Creates a new node of type 'type'. Note that the node may have
229
+ * other required properties, which it is the caller's responsibility
230
+ * to assign.
231
+ */
232
+CMARK_EXPORT cmark_node *cmark_node_new(cmark_node_type type);
233
+
234
+/** Same as `cmark_node_new`, but explicitly listing the memory
235
+ * allocator used to allocate the node. Note: be sure to use the same
236
+ * allocator for every node in a tree, or bad things can happen.
237
+ */
238
+CMARK_EXPORT cmark_node *cmark_node_new_with_mem(cmark_node_type type,
239
+ cmark_mem *mem);
240
+
241
+/** Frees the memory allocated for a node and any children.
242
+ */
243
+CMARK_EXPORT void cmark_node_free(cmark_node *node);
244
+
245
+/**
246
+ * ## Tree Traversal
247
+ */
248
+
249
+/** Returns the next node in the sequence after 'node', or NULL if
250
+ * there is none.
251
+ */
252
+CMARK_EXPORT cmark_node *cmark_node_next(cmark_node *node);
253
+
254
+/** Returns the previous node in the sequence after 'node', or NULL if
255
+ * there is none.
256
+ */
257
+CMARK_EXPORT cmark_node *cmark_node_previous(cmark_node *node);
258
+
259
+/** Returns the parent of 'node', or NULL if there is none.
260
+ */
261
+CMARK_EXPORT cmark_node *cmark_node_parent(cmark_node *node);
262
+
263
+/** Returns the first child of 'node', or NULL if 'node' has no children.
264
+ */
265
+CMARK_EXPORT cmark_node *cmark_node_first_child(cmark_node *node);
266
+
267
+/** Returns the last child of 'node', or NULL if 'node' has no children.
268
+ */
269
+CMARK_EXPORT cmark_node *cmark_node_last_child(cmark_node *node);
270
+
271
+/**
272
+ * ## Iterator
273
+ *
274
+ * An iterator will walk through a tree of nodes, starting from a root
275
+ * node, returning one node at a time, together with information about
276
+ * whether the node is being entered or exited. The iterator will
277
+ * first descend to a child node, if there is one. When there is no
278
+ * child, the iterator will go to the next sibling. When there is no
279
+ * next sibling, the iterator will return to the parent (but with
280
+ * a 'cmark_event_type' of `CMARK_EVENT_EXIT`). The iterator will
281
+ * return `CMARK_EVENT_DONE` when it reaches the root node again.
282
+ * One natural application is an HTML renderer, where an `ENTER` event
283
+ * outputs an open tag and an `EXIT` event outputs a close tag.
284
+ * An iterator might also be used to transform an AST in some systematic
285
+ * way, for example, turning all level-3 headings into regular paragraphs.
286
+ *
287
+ * void
288
+ * usage_example(cmark_node *root) {
289
+ * cmark_event_type ev_type;
290
+ * cmark_iter *iter = cmark_iter_new(root);
291
+ *
292
+ * while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
293
+ * cmark_node *cur = cmark_iter_get_node(iter);
294
+ * // Do something with `cur` and `ev_type`
295
+ * }
296
+ *
297
+ * cmark_iter_free(iter);
298
+ * }
299
+ *
300
+ * Iterators will never return `EXIT` events for leaf nodes, which are nodes
301
+ * of type:
302
+ *
303
+ * * CMARK_NODE_HTML_BLOCK
304
+ * * CMARK_NODE_THEMATIC_BREAK
305
+ * * CMARK_NODE_CODE_BLOCK
306
+ * * CMARK_NODE_TEXT
307
+ * * CMARK_NODE_SOFTBREAK
308
+ * * CMARK_NODE_LINEBREAK
309
+ * * CMARK_NODE_CODE
310
+ * * CMARK_NODE_HTML_INLINE
311
+ *
312
+ * Nodes must only be modified after an `EXIT` event, or an `ENTER` event for
313
+ * leaf nodes.
314
+ */
315
+
316
+typedef enum {
317
+ CMARK_EVENT_NONE,
318
+ CMARK_EVENT_DONE,
319
+ CMARK_EVENT_ENTER,
320
+ CMARK_EVENT_EXIT
321
+} cmark_event_type;
322
+
323
+/** Creates a new iterator starting at 'root'. The current node and event
324
+ * type are undefined until 'cmark_iter_next' is called for the first time.
325
+ * The memory allocated for the iterator should be released using
326
+ * 'cmark_iter_free' when it is no longer needed.
327
+ */
328
+CMARK_EXPORT
329
+cmark_iter *cmark_iter_new(cmark_node *root);
330
+
331
+/** Frees the memory allocated for an iterator.
332
+ */
333
+CMARK_EXPORT
334
+void cmark_iter_free(cmark_iter *iter);
335
+
336
+/** Advances to the next node and returns the event type (`CMARK_EVENT_ENTER`,
337
+ * `CMARK_EVENT_EXIT` or `CMARK_EVENT_DONE`).
338
+ */
339
+CMARK_EXPORT
340
+cmark_event_type cmark_iter_next(cmark_iter *iter);
341
+
342
+/** Returns the current node.
343
+ */
344
+CMARK_EXPORT
345
+cmark_node *cmark_iter_get_node(cmark_iter *iter);
346
+
347
+/** Returns the current event type.
348
+ */
349
+CMARK_EXPORT
350
+cmark_event_type cmark_iter_get_event_type(cmark_iter *iter);
351
+
352
+/** Returns the root node.
353
+ */
354
+CMARK_EXPORT
355
+cmark_node *cmark_iter_get_root(cmark_iter *iter);
356
+
357
+/** Resets the iterator so that the current node is 'current' and
358
+ * the event type is 'event_type'. The new current node must be a
359
+ * descendant of the root node or the root node itself.
360
+ */
361
+CMARK_EXPORT
362
+void cmark_iter_reset(cmark_iter *iter, cmark_node *current,
363
+ cmark_event_type event_type);
364
+
365
+/**
366
+ * ## Accessors
367
+ */
368
+
369
+/** Returns the user data of 'node'.
370
+ */
371
+CMARK_EXPORT void *cmark_node_get_user_data(cmark_node *node);
372
+
373
+/** Sets arbitrary user data for 'node'. Returns 1 on success,
374
+ * 0 on failure.
375
+ */
376
+CMARK_EXPORT int cmark_node_set_user_data(cmark_node *node, void *user_data);
377
+
378
+/** Returns the type of 'node', or `CMARK_NODE_NONE` on error.
379
+ */
380
+CMARK_EXPORT cmark_node_type cmark_node_get_type(cmark_node *node);
381
+
382
+/** Like 'cmark_node_get_type', but returns a string representation
383
+ of the type, or `"<unknown>"`.
384
+ */
385
+CMARK_EXPORT
386
+const char *cmark_node_get_type_string(cmark_node *node);
387
+
388
+/** Returns the string contents of 'node', or an empty
389
+ string if none is set.
390
+ */
391
+CMARK_EXPORT const char *cmark_node_get_literal(cmark_node *node);
392
+
393
+/** Sets the string contents of 'node'. Returns 1 on success,
394
+ * 0 on failure.
395
+ */
396
+CMARK_EXPORT int cmark_node_set_literal(cmark_node *node, const char *content);
397
+
398
+/** Returns the heading level of 'node', or 0 if 'node' is not a heading.
399
+ */
400
+CMARK_EXPORT int cmark_node_get_heading_level(cmark_node *node);
401
+
402
+/* For backwards compatibility */
403
+#define cmark_node_get_header_level cmark_node_get_heading_level
404
+#define cmark_node_set_header_level cmark_node_set_heading_level
405
+
406
+/** Sets the heading level of 'node', returning 1 on success and 0 on error.
407
+ */
408
+CMARK_EXPORT int cmark_node_set_heading_level(cmark_node *node, int level);
409
+
410
+/** Returns the list type of 'node', or `CMARK_NO_LIST` if 'node'
411
+ * is not a list.
412
+ */
413
+CMARK_EXPORT cmark_list_type cmark_node_get_list_type(cmark_node *node);
414
+
415
+/** Sets the list type of 'node', returning 1 on success and 0 on error.
416
+ */
417
+CMARK_EXPORT int cmark_node_set_list_type(cmark_node *node,
418
+ cmark_list_type type);
419
+
420
+/** Returns the list delimiter type of 'node', or `CMARK_NO_DELIM` if 'node'
421
+ * is not a list.
422
+ */
423
+CMARK_EXPORT cmark_delim_type cmark_node_get_list_delim(cmark_node *node);
424
+
425
+/** Sets the list delimiter type of 'node', returning 1 on success and 0
426
+ * on error.
427
+ */
428
+CMARK_EXPORT int cmark_node_set_list_delim(cmark_node *node,
429
+ cmark_delim_type delim);
430
+
431
+/** Returns starting number of 'node', if it is an ordered list, otherwise 0.
432
+ */
433
+CMARK_EXPORT int cmark_node_get_list_start(cmark_node *node);
434
+
435
+/** Sets starting number of 'node', if it is an ordered list. Returns 1
436
+ * on success, 0 on failure.
437
+ */
438
+CMARK_EXPORT int cmark_node_set_list_start(cmark_node *node, int start);
439
+
440
+/** Returns 1 if 'node' is a tight list, 0 otherwise.
441
+ */
442
+CMARK_EXPORT int cmark_node_get_list_tight(cmark_node *node);
443
+
444
+/** Sets the "tightness" of a list. Returns 1 on success, 0 on failure.
445
+ */
446
+CMARK_EXPORT int cmark_node_set_list_tight(cmark_node *node, int tight);
447
+
448
+/** Returns the info string from a fenced code block.
449
+ */
450
+CMARK_EXPORT const char *cmark_node_get_fence_info(cmark_node *node);
451
+
452
+/** Sets the info string in a fenced code block, returning 1 on
453
+ * success and 0 on failure.
454
+ */
455
+CMARK_EXPORT int cmark_node_set_fence_info(cmark_node *node, const char *info);
456
+
457
+/** Returns the URL of a link or image 'node', or an empty string
458
+ if no URL is set.
459
+ */
460
+CMARK_EXPORT const char *cmark_node_get_url(cmark_node *node);
461
+
462
+/** Sets the URL of a link or image 'node'. Returns 1 on success,
463
+ * 0 on failure.
464
+ */
465
+CMARK_EXPORT int cmark_node_set_url(cmark_node *node, const char *url);
466
+
467
+/** Returns the title of a link or image 'node', or an empty
468
+ string if no title is set.
469
+ */
470
+CMARK_EXPORT const char *cmark_node_get_title(cmark_node *node);
471
+
472
+/** Sets the title of a link or image 'node'. Returns 1 on success,
473
+ * 0 on failure.
474
+ */
475
+CMARK_EXPORT int cmark_node_set_title(cmark_node *node, const char *title);
476
+
477
+/** Returns the literal "on enter" text for a custom 'node', or
478
+ an empty string if no on_enter is set.
479
+ */
480
+CMARK_EXPORT const char *cmark_node_get_on_enter(cmark_node *node);
481
+
482
+/** Sets the literal text to render "on enter" for a custom 'node'.
483
+ Any children of the node will be rendered after this text.
484
+ Returns 1 on success 0 on failure.
485
+ */
486
+CMARK_EXPORT int cmark_node_set_on_enter(cmark_node *node,
487
+ const char *on_enter);
488
+
489
+/** Returns the literal "on exit" text for a custom 'node', or
490
+ an empty string if no on_exit is set.
491
+ */
492
+CMARK_EXPORT const char *cmark_node_get_on_exit(cmark_node *node);
493
+
494
+/** Sets the literal text to render "on exit" for a custom 'node'.
495
+ Any children of the node will be rendered before this text.
496
+ Returns 1 on success 0 on failure.
497
+ */
498
+CMARK_EXPORT int cmark_node_set_on_exit(cmark_node *node, const char *on_exit);
499
+
500
+/** Returns the line on which 'node' begins.
501
+ */
502
+CMARK_EXPORT int cmark_node_get_start_line(cmark_node *node);
503
+
504
+/** Returns the column at which 'node' begins.
505
+ */
506
+CMARK_EXPORT int cmark_node_get_start_column(cmark_node *node);
507
+
508
+/** Returns the line on which 'node' ends.
509
+ */
510
+CMARK_EXPORT int cmark_node_get_end_line(cmark_node *node);
511
+
512
+/** Returns the column at which 'node' ends.
513
+ */
514
+CMARK_EXPORT int cmark_node_get_end_column(cmark_node *node);
515
+
516
+/**
517
+ * ## Tree Manipulation
518
+ */
519
+
520
+/** Unlinks a 'node', removing it from the tree, but not freeing its
521
+ * memory. (Use 'cmark_node_free' for that.)
522
+ */
523
+CMARK_EXPORT void cmark_node_unlink(cmark_node *node);
524
+
525
+/** Inserts 'sibling' before 'node'. Returns 1 on success, 0 on failure.
526
+ */
527
+CMARK_EXPORT int cmark_node_insert_before(cmark_node *node,
528
+ cmark_node *sibling);
529
+
530
+/** Inserts 'sibling' after 'node'. Returns 1 on success, 0 on failure.
531
+ */
532
+CMARK_EXPORT int cmark_node_insert_after(cmark_node *node, cmark_node *sibling);
533
+
534
+/** Replaces 'oldnode' with 'newnode' and unlinks 'oldnode' (but does
535
+ * not free its memory).
536
+ * Returns 1 on success, 0 on failure.
537
+ */
538
+CMARK_EXPORT int cmark_node_replace(cmark_node *oldnode, cmark_node *newnode);
539
+
540
+/** Adds 'child' to the beginning of the children of 'node'.
541
+ * Returns 1 on success, 0 on failure.
542
+ */
543
+CMARK_EXPORT int cmark_node_prepend_child(cmark_node *node, cmark_node *child);
544
+
545
+/** Adds 'child' to the end of the children of 'node'.
546
+ * Returns 1 on success, 0 on failure.
547
+ */
548
+CMARK_EXPORT int cmark_node_append_child(cmark_node *node, cmark_node *child);
549
+
550
+/** Consolidates adjacent text nodes.
551
+ */
552
+CMARK_EXPORT void cmark_consolidate_text_nodes(cmark_node *root);
553
+
554
+/**
555
+ * ## Parsing
556
+ *
557
+ * Simple interface:
558
+ *
559
+ * cmark_node *document = cmark_parse_document("Hello *world*", 13,
560
+ * CMARK_OPT_DEFAULT);
561
+ *
562
+ * Streaming interface:
563
+ *
564
+ * cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT);
565
+ * FILE *fp = fopen("myfile.md", "rb");
566
+ * while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) {
567
+ * cmark_parser_feed(parser, buffer, bytes);
568
+ * if (bytes < sizeof(buffer)) {
569
+ * break;
570
+ * }
571
+ * }
572
+ * document = cmark_parser_finish(parser);
573
+ * cmark_parser_free(parser);
574
+ */
575
+
576
+/** Creates a new parser object.
577
+ */
578
+CMARK_EXPORT
579
+cmark_parser *cmark_parser_new(int options);
580
+
581
+/** Creates a new parser object with the given memory allocator
582
+ */
583
+CMARK_EXPORT
584
+cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem);
585
+
586
+/** Frees memory allocated for a parser object.
587
+ */
588
+CMARK_EXPORT
589
+void cmark_parser_free(cmark_parser *parser);
590
+
591
+/** Feeds a string of length 'len' to 'parser'.
592
+ */
593
+CMARK_EXPORT
594
+void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len);
595
+
596
+/** Finish parsing and return a pointer to a tree of nodes.
597
+ */
598
+CMARK_EXPORT
599
+cmark_node *cmark_parser_finish(cmark_parser *parser);
600
+
601
+/** Parse a CommonMark document in 'buffer' of length 'len'.
602
+ * Returns a pointer to a tree of nodes. The memory allocated for
603
+ * the node tree should be released using 'cmark_node_free'
604
+ * when it is no longer needed.
605
+ */
606
+CMARK_EXPORT
607
+cmark_node *cmark_parse_document(const char *buffer, size_t len, int options);
608
+
609
+/** Parse a CommonMark document in file 'f', returning a pointer to
610
+ * a tree of nodes. The memory allocated for the node tree should be
611
+ * released using 'cmark_node_free' when it is no longer needed.
612
+ */
613
+CMARK_EXPORT
614
+cmark_node *cmark_parse_file(FILE *f, int options);
615
+
616
+/**
617
+ * ## Rendering
618
+ */
619
+
620
+/** Render a 'node' tree as XML. It is the caller's responsibility
621
+ * to free the returned buffer.
622
+ */
623
+CMARK_EXPORT
624
+char *cmark_render_xml(cmark_node *root, int options);
625
+
626
+/** Render a 'node' tree as an HTML fragment. It is up to the user
627
+ * to add an appropriate header and footer. It is the caller's
628
+ * responsibility to free the returned buffer.
629
+ */
630
+CMARK_EXPORT
631
+char *cmark_render_html(cmark_node *root, int options);
632
+
633
+/** Render a 'node' tree as a groff man page, without the header.
634
+ * It is the caller's responsibility to free the returned buffer.
635
+ */
636
+CMARK_EXPORT
637
+char *cmark_render_man(cmark_node *root, int options, int width);
638
+
639
+/** Render a 'node' tree as a commonmark document.
640
+ * It is the caller's responsibility to free the returned buffer.
641
+ */
642
+CMARK_EXPORT
643
+char *cmark_render_commonmark(cmark_node *root, int options, int width);
644
+
645
+/** Render a 'node' tree as a LaTeX document.
646
+ * It is the caller's responsibility to free the returned buffer.
647
+ */
648
+CMARK_EXPORT
649
+char *cmark_render_latex(cmark_node *root, int options, int width);
650
+
651
+/**
652
+ * ## Options
653
+ */
654
+
655
+/** Default options.
656
+ */
657
+#define CMARK_OPT_DEFAULT 0
658
+
659
+/**
660
+ * ### Options affecting rendering
661
+ */
662
+
663
+/** Include a `data-sourcepos` attribute on all block elements.
664
+ */
665
+#define CMARK_OPT_SOURCEPOS (1 << 1)
666
+
667
+/** Render `softbreak` elements as hard line breaks.
668
+ */
669
+#define CMARK_OPT_HARDBREAKS (1 << 2)
670
+
671
+/** Suppress raw HTML and unsafe links (`javascript:`, `vbscript:`,
672
+ * `file:`, and `data:`, except for `image/png`, `image/gif`,
673
+ * `image/jpeg`, or `image/webp` mime types). Raw HTML is replaced
674
+ * by a placeholder HTML comment. Unsafe links are replaced by
675
+ * empty strings.
676
+ */
677
+#define CMARK_OPT_SAFE (1 << 3)
678
+
679
+/** Render `softbreak` elements as spaces.
680
+ */
681
+#define CMARK_OPT_NOBREAKS (1 << 4)
682
+
683
+/**
684
+ * ### Options affecting parsing
685
+ */
686
+
687
+/** Normalize tree by consolidating adjacent text nodes.
688
+ */
689
+#define CMARK_OPT_NORMALIZE (1 << 8)
690
+
691
+/** Validate UTF-8 in the input before parsing, replacing illegal
692
+ * sequences with the replacement character U+FFFD.
693
+ */
694
+#define CMARK_OPT_VALIDATE_UTF8 (1 << 9)
695
+
696
+/** Convert straight quotes to curly, --- to em dashes, -- to en dashes.
697
+ */
698
+#define CMARK_OPT_SMART (1 << 10)
699
+
700
+/**
701
+ * ## Version information
702
+ */
703
+
704
+/** The library version as integer for runtime checks. Also available as
705
+ * macro CMARK_VERSION for compile time checks.
706
+ *
707
+ * * Bits 16-23 contain the major version.
708
+ * * Bits 8-15 contain the minor version.
709
+ * * Bits 0-7 contain the patchlevel.
710
+ *
711
+ * In hexadecimal format, the number 0x010203 represents version 1.2.3.
712
+ */
713
+CMARK_EXPORT
714
+int cmark_version(void);
715
+
716
+/** The library version string for runtime checks. Also available as
717
+ * macro CMARK_VERSION_STRING for compile time checks.
718
+ */
719
+CMARK_EXPORT
720
+const char *cmark_version_string(void);
721
+
722
+/** # AUTHORS
723
+ *
724
+ * John MacFarlane, Vicent Marti, Kārlis Gaņģis, Nick Wellnhofer.
725
+ */
726
+
727
+#ifndef CMARK_NO_SHORT_NAMES
728
+#define NODE_DOCUMENT CMARK_NODE_DOCUMENT
729
+#define NODE_BLOCK_QUOTE CMARK_NODE_BLOCK_QUOTE
730
+#define NODE_LIST CMARK_NODE_LIST
731
+#define NODE_ITEM CMARK_NODE_ITEM
732
+#define NODE_CODE_BLOCK CMARK_NODE_CODE_BLOCK
733
+#define NODE_HTML_BLOCK CMARK_NODE_HTML_BLOCK
734
+#define NODE_CUSTOM_BLOCK CMARK_NODE_CUSTOM_BLOCK
735
+#define NODE_PARAGRAPH CMARK_NODE_PARAGRAPH
736
+#define NODE_HEADING CMARK_NODE_HEADING
737
+#define NODE_HEADER CMARK_NODE_HEADER
738
+#define NODE_THEMATIC_BREAK CMARK_NODE_THEMATIC_BREAK
739
+#define NODE_HRULE CMARK_NODE_HRULE
740
+#define NODE_TEXT CMARK_NODE_TEXT
741
+#define NODE_SOFTBREAK CMARK_NODE_SOFTBREAK
742
+#define NODE_LINEBREAK CMARK_NODE_LINEBREAK
743
+#define NODE_CODE CMARK_NODE_CODE
744
+#define NODE_HTML_INLINE CMARK_NODE_HTML_INLINE
745
+#define NODE_CUSTOM_INLINE CMARK_NODE_CUSTOM_INLINE
746
+#define NODE_EMPH CMARK_NODE_EMPH
747
+#define NODE_STRONG CMARK_NODE_STRONG
748
+#define NODE_LINK CMARK_NODE_LINK
749
+#define NODE_IMAGE CMARK_NODE_IMAGE
750
+#define BULLET_LIST CMARK_BULLET_LIST
751
+#define ORDERED_LIST CMARK_ORDERED_LIST
752
+#define PERIOD_DELIM CMARK_PERIOD_DELIM
753
+#define PAREN_DELIM CMARK_PAREN_DELIM
754
+#endif
755
+
756
+#ifdef __cplusplus
757
+}
758
+#endif
759
+
760
+#endif
761
+
762
+#ifndef CMARK_BUFFER_H
763
+#define CMARK_BUFFER_H
764
+
765
+#include <stddef.h>
766
+#include <stdarg.h>
767
+#include <string.h>
768
+#include <limits.h>
769
+#include <stdint.h>
770
+
771
+#ifdef __cplusplus
772
+extern "C" {
773
+#endif
774
+
775
+typedef int32_t bufsize_t;
776
+
777
+typedef struct {
778
+ cmark_mem *mem;
779
+ unsigned char *ptr;
780
+ bufsize_t asize, size;
781
+} cmark_strbuf;
782
+
783
+extern unsigned char cmark_strbuf__initbuf[];
784
+
785
+#define CMARK_BUF_INIT(mem) \
786
+ { mem, cmark_strbuf__initbuf, 0, 0 }
787
+
788
+/**
789
+ * Initialize a cmark_strbuf structure.
790
+ *
791
+ * For the cases where CMARK_BUF_INIT cannot be used to do static
792
+ * initialization.
793
+ */
794
+void cmark_strbuf_init(cmark_mem *mem, cmark_strbuf *buf,
795
+ bufsize_t initial_size);
796
+
797
+/**
798
+ * Grow the buffer to hold at least `target_size` bytes.
799
+ */
800
+void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size);
801
+
802
+void cmark_strbuf_free(cmark_strbuf *buf);
803
+void cmark_strbuf_swap(cmark_strbuf *buf_a, cmark_strbuf *buf_b);
804
+
805
+bufsize_t cmark_strbuf_len(const cmark_strbuf *buf);
806
+
807
+int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b);
808
+
809
+unsigned char *cmark_strbuf_detach(cmark_strbuf *buf);
810
+void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize,
811
+ const cmark_strbuf *buf);
812
+
813
+static CMARK_INLINE const char *cmark_strbuf_cstr(const cmark_strbuf *buf) {
814
+ return (char *)buf->ptr;
815
+}
816
+
817
+#define cmark_strbuf_at(buf, n) ((buf)->ptr[n])
818
+
819
+void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data,
820
+ bufsize_t len);
821
+void cmark_strbuf_sets(cmark_strbuf *buf, const char *string);
822
+void cmark_strbuf_putc(cmark_strbuf *buf, int c);
823
+void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data,
824
+ bufsize_t len);
825
+void cmark_strbuf_puts(cmark_strbuf *buf, const char *string);
826
+void cmark_strbuf_clear(cmark_strbuf *buf);
827
+
828
+bufsize_t cmark_strbuf_strchr(const cmark_strbuf *buf, int c, bufsize_t pos);
829
+bufsize_t cmark_strbuf_strrchr(const cmark_strbuf *buf, int c, bufsize_t pos);
830
+void cmark_strbuf_drop(cmark_strbuf *buf, bufsize_t n);
831
+void cmark_strbuf_truncate(cmark_strbuf *buf, bufsize_t len);
832
+void cmark_strbuf_rtrim(cmark_strbuf *buf);
833
+void cmark_strbuf_trim(cmark_strbuf *buf);
834
+void cmark_strbuf_normalize_whitespace(cmark_strbuf *s);
835
+void cmark_strbuf_unescape(cmark_strbuf *s);
836
+
837
+#ifdef __cplusplus
838
+}
839
+#endif
840
+
841
+#endif
842
+
843
+#ifndef CMARK_CMARK_CTYPE_H
844
+#define CMARK_CMARK_CTYPE_H
845
+
846
+#ifdef __cplusplus
847
+extern "C" {
848
+#endif
849
+
850
+/** Locale-independent versions of functions from ctype.h.
851
+ * We want cmark to behave the same no matter what the system locale.
852
+ */
853
+
854
+int cmark_isspace(char c);
855
+
856
+int cmark_ispunct(char c);
857
+
858
+int cmark_isalnum(char c);
859
+
860
+int cmark_isdigit(char c);
861
+
862
+int cmark_isalpha(char c);
863
+
864
+#ifdef __cplusplus
865
+}
866
+#endif
867
+
868
+#endif
869
+
870
+#ifndef CMARK_CHUNK_H
871
+#define CMARK_CHUNK_H
872
+
873
+#include <string.h>
874
+#include <stdlib.h>
875
+#include <assert.h>
876
+
877
+#define CMARK_CHUNK_EMPTY \
878
+ { NULL, 0, 0 }
879
+
880
+typedef struct {
881
+ unsigned char *data;
882
+ bufsize_t len;
883
+ bufsize_t alloc; // also implies a NULL-terminated string
884
+} cmark_chunk;
885
+
886
+static CMARK_INLINE void cmark_chunk_free(cmark_mem *mem, cmark_chunk *c) {
887
+ if (c->alloc)
888
+ mem->free(c->data);
889
+
890
+ c->data = NULL;
891
+ c->alloc = 0;
892
+ c->len = 0;
893
+}
894
+
895
+static CMARK_INLINE void cmark_chunk_ltrim(cmark_chunk *c) {
896
+ assert(!c->alloc);
897
+
898
+ while (c->len && cmark_isspace(c->data[0])) {
899
+ c->data++;
900
+ c->len--;
901
+ }
902
+}
903
+
904
+static CMARK_INLINE void cmark_chunk_rtrim(cmark_chunk *c) {
905
+ assert(!c->alloc);
906
+
907
+ while (c->len > 0) {
908
+ if (!cmark_isspace(c->data[c->len - 1]))
909
+ break;
910
+
911
+ c->len--;
912
+ }
913
+}
914
+
915
+static CMARK_INLINE void cmark_chunk_trim(cmark_chunk *c) {
916
+ cmark_chunk_ltrim(c);
917
+ cmark_chunk_rtrim(c);
918
+}
919
+
920
+static CMARK_INLINE bufsize_t cmark_chunk_strchr(cmark_chunk *ch, int c,
921
+ bufsize_t offset) {
922
+ const unsigned char *p =
923
+ (unsigned char *)memchr(ch->data + offset, c, ch->len - offset);
924
+ return p ? (bufsize_t)(p - ch->data) : ch->len;
925
+}
926
+
927
+static CMARK_INLINE const char *cmark_chunk_to_cstr(cmark_mem *mem,
928
+ cmark_chunk *c) {
929
+ unsigned char *str;
930
+
931
+ if (c->alloc) {
932
+ return (char *)c->data;
933
+ }
934
+ str = (unsigned char *)mem->calloc(c->len + 1, 1);
935
+ if (c->len > 0) {
936
+ memcpy(str, c->data, c->len);
937
+ }
938
+ str[c->len] = 0;
939
+ c->data = str;
940
+ c->alloc = 1;
941
+
942
+ return (char *)str;
943
+}
944
+
945
+static CMARK_INLINE void cmark_chunk_set_cstr(cmark_mem *mem, cmark_chunk *c,
946
+ const char *str) {
947
+ unsigned char *old = c->alloc ? c->data : NULL;
948
+ if (str == NULL) {
949
+ c->len = 0;
950
+ c->data = NULL;
951
+ c->alloc = 0;
952
+ } else {
953
+ c->len = (bufsize_t)strlen(str);
954
+ c->data = (unsigned char *)mem->calloc(c->len + 1, 1);
955
+ c->alloc = 1;
956
+ memcpy(c->data, str, c->len + 1);
957
+ }
958
+ if (old != NULL) {
959
+ mem->free(old);
960
+ }
961
+}
962
+
963
+static CMARK_INLINE cmark_chunk cmark_chunk_literal(const char *data) {
964
+ bufsize_t len = data ? (bufsize_t)strlen(data) : 0;
965
+ cmark_chunk c = {(unsigned char *)data, len, 0};
966
+ return c;
967
+}
968
+
969
+static CMARK_INLINE cmark_chunk cmark_chunk_dup(const cmark_chunk *ch,
970
+ bufsize_t pos, bufsize_t len) {
971
+ cmark_chunk c = {ch->data + pos, len, 0};
972
+ return c;
973
+}
974
+
975
+static CMARK_INLINE cmark_chunk cmark_chunk_buf_detach(cmark_strbuf *buf) {
976
+ cmark_chunk c;
977
+
978
+ c.len = buf->size;
979
+ c.data = cmark_strbuf_detach(buf);
980
+ c.alloc = 1;
981
+
982
+ return c;
983
+}
984
+
985
+#endif
986
+
987
+#ifndef CMARK_NODE_H
988
+#define CMARK_NODE_H
989
+
990
+#ifdef __cplusplus
991
+extern "C" {
992
+#endif
993
+
994
+#include <stdio.h>
995
+#include <stdint.h>
996
+
997
+
998
+typedef struct {
999
+ cmark_list_type list_type;
1000
+ int marker_offset;
1001
+ int padding;
1002
+ int start;
1003
+ cmark_delim_type delimiter;
1004
+ unsigned char bullet_char;
1005
+ bool tight;
1006
+} cmark_list;
1007
+
1008
+typedef struct {
1009
+ cmark_chunk info;
1010
+ cmark_chunk literal;
1011
+ uint8_t fence_length;
1012
+ uint8_t fence_offset;
1013
+ unsigned char fence_char;
1014
+ int8_t fenced;
1015
+} cmark_code;
1016
+
1017
+typedef struct {
1018
+ int level;
1019
+ bool setext;
1020
+} cmark_heading;
1021
+
1022
+typedef struct {
1023
+ cmark_chunk url;
1024
+ cmark_chunk title;
1025
+} cmark_link;
1026
+
1027
+typedef struct {
1028
+ cmark_chunk on_enter;
1029
+ cmark_chunk on_exit;
1030
+} cmark_custom;
1031
+
1032
+enum cmark_node__internal_flags {
1033
+ CMARK_NODE__OPEN = (1 << 0),
1034
+ CMARK_NODE__LAST_LINE_BLANK = (1 << 1),
1035
+};
1036
+
1037
+struct cmark_node {
1038
+ cmark_strbuf content;
1039
+
1040
+ struct cmark_node *next;
1041
+ struct cmark_node *prev;
1042
+ struct cmark_node *parent;
1043
+ struct cmark_node *first_child;
1044
+ struct cmark_node *last_child;
1045
+
1046
+ void *user_data;
1047
+
1048
+ int start_line;
1049
+ int start_column;
1050
+ int end_line;
1051
+ int end_column;
1052
+ uint16_t type;
1053
+ uint16_t flags;
1054
+
1055
+ union {
1056
+ cmark_chunk literal;
1057
+ cmark_list list;
1058
+ cmark_code code;
1059
+ cmark_heading heading;
1060
+ cmark_link link;
1061
+ cmark_custom custom;
1062
+ int html_block_type;
1063
+ } as;
1064
+};
1065
+
1066
+static CMARK_INLINE cmark_mem *cmark_node_mem(cmark_node *node) {
1067
+ return node->content.mem;
1068
+}
1069
+CMARK_EXPORT int cmark_node_check(cmark_node *node, FILE *out);
1070
+
1071
+#ifdef __cplusplus
1072
+}
1073
+#endif
1074
+
1075
+#endif
1076
+#ifndef CMARK_HOUDINI_H
1077
+#define CMARK_HOUDINI_H
1078
+
1079
+#ifdef __cplusplus
1080
+extern "C" {
1081
+#endif
1082
+
1083
+#include <stdint.h>
1084
+
1085
+#ifdef HAVE___BUILTIN_EXPECT
1086
+#define likely(x) __builtin_expect((x), 1)
1087
+#define unlikely(x) __builtin_expect((x), 0)
1088
+#else
1089
+#define likely(x) (x)
1090
+#define unlikely(x) (x)
1091
+#endif
1092
+
1093
+#ifdef HOUDINI_USE_LOCALE
1094
+#define _isxdigit(c) isxdigit(c)
1095
+#define _isdigit(c) isdigit(c)
1096
+#else
1097
+/*
1098
+ * Helper _isdigit methods -- do not trust the current locale
1099
+ * */
1100
+#define _isxdigit(c) (strchr("0123456789ABCDEFabcdef", (c)) != NULL)
1101
+#define _isdigit(c) ((c) >= '0' && (c) <= '9')
1102
+#endif
1103
+
1104
+#define HOUDINI_ESCAPED_SIZE(x) (((x)*12) / 10)
1105
+#define HOUDINI_UNESCAPED_SIZE(x) (x)
1106
+
1107
+extern bufsize_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src,
1108
+ bufsize_t size);
1109
+extern int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src,
1110
+ bufsize_t size);
1111
+extern int houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src,
1112
+ bufsize_t size, int secure);
1113
+extern int houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src,
1114
+ bufsize_t size);
1115
+extern void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src,
1116
+ bufsize_t size);
1117
+extern int houdini_escape_href(cmark_strbuf *ob, const uint8_t *src,
1118
+ bufsize_t size);
1119
+
1120
+#ifdef __cplusplus
1121
+}
1122
+#endif
1123
+
1124
+#endif
1125
+#ifndef CMARK_H
1126
+#define CMARK_H
1127
+
1128
+#include <stdio.h>
1129
+#include <cmark_export.h>
1130
+#include <cmark_version.h>
1131
+
1132
+#ifdef __cplusplus
1133
+extern "C" {
1134
+#endif
1135
+
1136
+/** # NAME
1137
+ *
1138
+ * **cmark** - CommonMark parsing, manipulating, and rendering
1139
+ */
1140
+
1141
+/** # DESCRIPTION
1142
+ *
1143
+ * ## Simple Interface
1144
+ */
1145
+
1146
+/** Convert 'text' (assumed to be a UTF-8 encoded string with length
1147
+ * 'len') from CommonMark Markdown to HTML, returning a null-terminated,
1148
+ * UTF-8-encoded string. It is the caller's responsibility
1149
+ * to free the returned buffer.
1150
+ */
1151
+CMARK_EXPORT
1152
+char *cmark_markdown_to_html(const char *text, size_t len, int options);
1153
+
1154
+/** ## Node Structure
1155
+ */
1156
+
1157
+typedef enum {
1158
+ /* Error status */
1159
+ CMARK_NODE_NONE,
1160
+
1161
+ /* Block */
1162
+ CMARK_NODE_DOCUMENT,
1163
+ CMARK_NODE_BLOCK_QUOTE,
1164
+ CMARK_NODE_LIST,
1165
+ CMARK_NODE_ITEM,
1166
+ CMARK_NODE_CODE_BLOCK,
1167
+ CMARK_NODE_HTML_BLOCK,
1168
+ CMARK_NODE_CUSTOM_BLOCK,
1169
+ CMARK_NODE_PARAGRAPH,
1170
+ CMARK_NODE_HEADING,
1171
+ CMARK_NODE_THEMATIC_BREAK,
1172
+
1173
+ CMARK_NODE_FIRST_BLOCK = CMARK_NODE_DOCUMENT,
1174
+ CMARK_NODE_LAST_BLOCK = CMARK_NODE_THEMATIC_BREAK,
1175
+
1176
+ /* Inline */
1177
+ CMARK_NODE_TEXT,
1178
+ CMARK_NODE_SOFTBREAK,
1179
+ CMARK_NODE_LINEBREAK,
1180
+ CMARK_NODE_CODE,
1181
+ CMARK_NODE_HTML_INLINE,
1182
+ CMARK_NODE_CUSTOM_INLINE,
1183
+ CMARK_NODE_EMPH,
1184
+ CMARK_NODE_STRONG,
1185
+ CMARK_NODE_LINK,
1186
+ CMARK_NODE_IMAGE,
1187
+
1188
+ CMARK_NODE_FIRST_INLINE = CMARK_NODE_TEXT,
1189
+ CMARK_NODE_LAST_INLINE = CMARK_NODE_IMAGE,
1190
+} cmark_node_type;
1191
+
1192
+/* For backwards compatibility: */
1193
+#define CMARK_NODE_HEADER CMARK_NODE_HEADING
1194
+#define CMARK_NODE_HRULE CMARK_NODE_THEMATIC_BREAK
1195
+#define CMARK_NODE_HTML CMARK_NODE_HTML_BLOCK
1196
+#define CMARK_NODE_INLINE_HTML CMARK_NODE_HTML_INLINE
1197
+
1198
+typedef enum {
1199
+ CMARK_NO_LIST,
1200
+ CMARK_BULLET_LIST,
1201
+ CMARK_ORDERED_LIST
1202
+} cmark_list_type;
1203
+
1204
+typedef enum {
1205
+ CMARK_NO_DELIM,
1206
+ CMARK_PERIOD_DELIM,
1207
+ CMARK_PAREN_DELIM
1208
+} cmark_delim_type;
1209
+
1210
+typedef struct cmark_node cmark_node;
1211
+typedef struct cmark_parser cmark_parser;
1212
+typedef struct cmark_iter cmark_iter;
1213
+
1214
+/**
1215
+ * ## Custom memory allocator support
1216
+ */
1217
+
1218
+/** Defines the memory allocation functions to be used by CMark
1219
+ * when parsing and allocating a document tree
1220
+ */
1221
+typedef struct cmark_mem {
1222
+ void *(*calloc)(size_t, size_t);
1223
+ void *(*realloc)(void *, size_t);
1224
+ void (*free)(void *);
1225
+} cmark_mem;
1226
+
1227
+/**
1228
+ * ## Creating and Destroying Nodes
1229
+ */
1230
+
1231
+/** Creates a new node of type 'type'. Note that the node may have
1232
+ * other required properties, which it is the caller's responsibility
1233
+ * to assign.
1234
+ */
1235
+CMARK_EXPORT cmark_node *cmark_node_new(cmark_node_type type);
1236
+
1237
+/** Same as `cmark_node_new`, but explicitly listing the memory
1238
+ * allocator used to allocate the node. Note: be sure to use the same
1239
+ * allocator for every node in a tree, or bad things can happen.
1240
+ */
1241
+CMARK_EXPORT cmark_node *cmark_node_new_with_mem(cmark_node_type type,
1242
+ cmark_mem *mem);
1243
+
1244
+/** Frees the memory allocated for a node and any children.
1245
+ */
1246
+CMARK_EXPORT void cmark_node_free(cmark_node *node);
1247
+
1248
+/**
1249
+ * ## Tree Traversal
1250
+ */
1251
+
1252
+/** Returns the next node in the sequence after 'node', or NULL if
1253
+ * there is none.
1254
+ */
1255
+CMARK_EXPORT cmark_node *cmark_node_next(cmark_node *node);
1256
+
1257
+/** Returns the previous node in the sequence after 'node', or NULL if
1258
+ * there is none.
1259
+ */
1260
+CMARK_EXPORT cmark_node *cmark_node_previous(cmark_node *node);
1261
+
1262
+/** Returns the parent of 'node', or NULL if there is none.
1263
+ */
1264
+CMARK_EXPORT cmark_node *cmark_node_parent(cmark_node *node);
1265
+
1266
+/** Returns the first child of 'node', or NULL if 'node' has no children.
1267
+ */
1268
+CMARK_EXPORT cmark_node *cmark_node_first_child(cmark_node *node);
1269
+
1270
+/** Returns the last child of 'node', or NULL if 'node' has no children.
1271
+ */
1272
+CMARK_EXPORT cmark_node *cmark_node_last_child(cmark_node *node);
1273
+
1274
+/**
1275
+ * ## Iterator
1276
+ *
1277
+ * An iterator will walk through a tree of nodes, starting from a root
1278
+ * node, returning one node at a time, together with information about
1279
+ * whether the node is being entered or exited. The iterator will
1280
+ * first descend to a child node, if there is one. When there is no
1281
+ * child, the iterator will go to the next sibling. When there is no
1282
+ * next sibling, the iterator will return to the parent (but with
1283
+ * a 'cmark_event_type' of `CMARK_EVENT_EXIT`). The iterator will
1284
+ * return `CMARK_EVENT_DONE` when it reaches the root node again.
1285
+ * One natural application is an HTML renderer, where an `ENTER` event
1286
+ * outputs an open tag and an `EXIT` event outputs a close tag.
1287
+ * An iterator might also be used to transform an AST in some systematic
1288
+ * way, for example, turning all level-3 headings into regular paragraphs.
1289
+ *
1290
+ * void
1291
+ * usage_example(cmark_node *root) {
1292
+ * cmark_event_type ev_type;
1293
+ * cmark_iter *iter = cmark_iter_new(root);
1294
+ *
1295
+ * while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
1296
+ * cmark_node *cur = cmark_iter_get_node(iter);
1297
+ * // Do something with `cur` and `ev_type`
1298
+ * }
1299
+ *
1300
+ * cmark_iter_free(iter);
1301
+ * }
1302
+ *
1303
+ * Iterators will never return `EXIT` events for leaf nodes, which are nodes
1304
+ * of type:
1305
+ *
1306
+ * * CMARK_NODE_HTML_BLOCK
1307
+ * * CMARK_NODE_THEMATIC_BREAK
1308
+ * * CMARK_NODE_CODE_BLOCK
1309
+ * * CMARK_NODE_TEXT
1310
+ * * CMARK_NODE_SOFTBREAK
1311
+ * * CMARK_NODE_LINEBREAK
1312
+ * * CMARK_NODE_CODE
1313
+ * * CMARK_NODE_HTML_INLINE
1314
+ *
1315
+ * Nodes must only be modified after an `EXIT` event, or an `ENTER` event for
1316
+ * leaf nodes.
1317
+ */
1318
+
1319
+typedef enum {
1320
+ CMARK_EVENT_NONE,
1321
+ CMARK_EVENT_DONE,
1322
+ CMARK_EVENT_ENTER,
1323
+ CMARK_EVENT_EXIT
1324
+} cmark_event_type;
1325
+
1326
+/** Creates a new iterator starting at 'root'. The current node and event
1327
+ * type are undefined until 'cmark_iter_next' is called for the first time.
1328
+ * The memory allocated for the iterator should be released using
1329
+ * 'cmark_iter_free' when it is no longer needed.
1330
+ */
1331
+CMARK_EXPORT
1332
+cmark_iter *cmark_iter_new(cmark_node *root);
1333
+
1334
+/** Frees the memory allocated for an iterator.
1335
+ */
1336
+CMARK_EXPORT
1337
+void cmark_iter_free(cmark_iter *iter);
1338
+
1339
+/** Advances to the next node and returns the event type (`CMARK_EVENT_ENTER`,
1340
+ * `CMARK_EVENT_EXIT` or `CMARK_EVENT_DONE`).
1341
+ */
1342
+CMARK_EXPORT
1343
+cmark_event_type cmark_iter_next(cmark_iter *iter);
1344
+
1345
+/** Returns the current node.
1346
+ */
1347
+CMARK_EXPORT
1348
+cmark_node *cmark_iter_get_node(cmark_iter *iter);
1349
+
1350
+/** Returns the current event type.
1351
+ */
1352
+CMARK_EXPORT
1353
+cmark_event_type cmark_iter_get_event_type(cmark_iter *iter);
1354
+
1355
+/** Returns the root node.
1356
+ */
1357
+CMARK_EXPORT
1358
+cmark_node *cmark_iter_get_root(cmark_iter *iter);
1359
+
1360
+/** Resets the iterator so that the current node is 'current' and
1361
+ * the event type is 'event_type'. The new current node must be a
1362
+ * descendant of the root node or the root node itself.
1363
+ */
1364
+CMARK_EXPORT
1365
+void cmark_iter_reset(cmark_iter *iter, cmark_node *current,
1366
+ cmark_event_type event_type);
1367
+
1368
+/**
1369
+ * ## Accessors
1370
+ */
1371
+
1372
+/** Returns the user data of 'node'.
1373
+ */
1374
+CMARK_EXPORT void *cmark_node_get_user_data(cmark_node *node);
1375
+
1376
+/** Sets arbitrary user data for 'node'. Returns 1 on success,
1377
+ * 0 on failure.
1378
+ */
1379
+CMARK_EXPORT int cmark_node_set_user_data(cmark_node *node, void *user_data);
1380
+
1381
+/** Returns the type of 'node', or `CMARK_NODE_NONE` on error.
1382
+ */
1383
+CMARK_EXPORT cmark_node_type cmark_node_get_type(cmark_node *node);
1384
+
1385
+/** Like 'cmark_node_get_type', but returns a string representation
1386
+ of the type, or `"<unknown>"`.
1387
+ */
1388
+CMARK_EXPORT
1389
+const char *cmark_node_get_type_string(cmark_node *node);
1390
+
1391
+/** Returns the string contents of 'node', or an empty
1392
+ string if none is set.
1393
+ */
1394
+CMARK_EXPORT const char *cmark_node_get_literal(cmark_node *node);
1395
+
1396
+/** Sets the string contents of 'node'. Returns 1 on success,
1397
+ * 0 on failure.
1398
+ */
1399
+CMARK_EXPORT int cmark_node_set_literal(cmark_node *node, const char *content);
1400
+
1401
+/** Returns the heading level of 'node', or 0 if 'node' is not a heading.
1402
+ */
1403
+CMARK_EXPORT int cmark_node_get_heading_level(cmark_node *node);
1404
+
1405
+/* For backwards compatibility */
1406
+#define cmark_node_get_header_level cmark_node_get_heading_level
1407
+#define cmark_node_set_header_level cmark_node_set_heading_level
1408
+
1409
+/** Sets the heading level of 'node', returning 1 on success and 0 on error.
1410
+ */
1411
+CMARK_EXPORT int cmark_node_set_heading_level(cmark_node *node, int level);
1412
+
1413
+/** Returns the list type of 'node', or `CMARK_NO_LIST` if 'node'
1414
+ * is not a list.
1415
+ */
1416
+CMARK_EXPORT cmark_list_type cmark_node_get_list_type(cmark_node *node);
1417
+
1418
+/** Sets the list type of 'node', returning 1 on success and 0 on error.
1419
+ */
1420
+CMARK_EXPORT int cmark_node_set_list_type(cmark_node *node,
1421
+ cmark_list_type type);
1422
+
1423
+/** Returns the list delimiter type of 'node', or `CMARK_NO_DELIM` if 'node'
1424
+ * is not a list.
1425
+ */
1426
+CMARK_EXPORT cmark_delim_type cmark_node_get_list_delim(cmark_node *node);
1427
+
1428
+/** Sets the list delimiter type of 'node', returning 1 on success and 0
1429
+ * on error.
1430
+ */
1431
+CMARK_EXPORT int cmark_node_set_list_delim(cmark_node *node,
1432
+ cmark_delim_type delim);
1433
+
1434
+/** Returns starting number of 'node', if it is an ordered list, otherwise 0.
1435
+ */
1436
+CMARK_EXPORT int cmark_node_get_list_start(cmark_node *node);
1437
+
1438
+/** Sets starting number of 'node', if it is an ordered list. Returns 1
1439
+ * on success, 0 on failure.
1440
+ */
1441
+CMARK_EXPORT int cmark_node_set_list_start(cmark_node *node, int start);
1442
+
1443
+/** Returns 1 if 'node' is a tight list, 0 otherwise.
1444
+ */
1445
+CMARK_EXPORT int cmark_node_get_list_tight(cmark_node *node);
1446
+
1447
+/** Sets the "tightness" of a list. Returns 1 on success, 0 on failure.
1448
+ */
1449
+CMARK_EXPORT int cmark_node_set_list_tight(cmark_node *node, int tight);
1450
+
1451
+/** Returns the info string from a fenced code block.
1452
+ */
1453
+CMARK_EXPORT const char *cmark_node_get_fence_info(cmark_node *node);
1454
+
1455
+/** Sets the info string in a fenced code block, returning 1 on
1456
+ * success and 0 on failure.
1457
+ */
1458
+CMARK_EXPORT int cmark_node_set_fence_info(cmark_node *node, const char *info);
1459
+
1460
+/** Returns the URL of a link or image 'node', or an empty string
1461
+ if no URL is set.
1462
+ */
1463
+CMARK_EXPORT const char *cmark_node_get_url(cmark_node *node);
1464
+
1465
+/** Sets the URL of a link or image 'node'. Returns 1 on success,
1466
+ * 0 on failure.
1467
+ */
1468
+CMARK_EXPORT int cmark_node_set_url(cmark_node *node, const char *url);
1469
+
1470
+/** Returns the title of a link or image 'node', or an empty
1471
+ string if no title is set.
1472
+ */
1473
+CMARK_EXPORT const char *cmark_node_get_title(cmark_node *node);
1474
+
1475
+/** Sets the title of a link or image 'node'. Returns 1 on success,
1476
+ * 0 on failure.
1477
+ */
1478
+CMARK_EXPORT int cmark_node_set_title(cmark_node *node, const char *title);
1479
+
1480
+/** Returns the literal "on enter" text for a custom 'node', or
1481
+ an empty string if no on_enter is set.
1482
+ */
1483
+CMARK_EXPORT const char *cmark_node_get_on_enter(cmark_node *node);
1484
+
1485
+/** Sets the literal text to render "on enter" for a custom 'node'.
1486
+ Any children of the node will be rendered after this text.
1487
+ Returns 1 on success 0 on failure.
1488
+ */
1489
+CMARK_EXPORT int cmark_node_set_on_enter(cmark_node *node,
1490
+ const char *on_enter);
1491
+
1492
+/** Returns the literal "on exit" text for a custom 'node', or
1493
+ an empty string if no on_exit is set.
1494
+ */
1495
+CMARK_EXPORT const char *cmark_node_get_on_exit(cmark_node *node);
1496
+
1497
+/** Sets the literal text to render "on exit" for a custom 'node'.
1498
+ Any children of the node will be rendered before this text.
1499
+ Returns 1 on success 0 on failure.
1500
+ */
1501
+CMARK_EXPORT int cmark_node_set_on_exit(cmark_node *node, const char *on_exit);
1502
+
1503
+/** Returns the line on which 'node' begins.
1504
+ */
1505
+CMARK_EXPORT int cmark_node_get_start_line(cmark_node *node);
1506
+
1507
+/** Returns the column at which 'node' begins.
1508
+ */
1509
+CMARK_EXPORT int cmark_node_get_start_column(cmark_node *node);
1510
+
1511
+/** Returns the line on which 'node' ends.
1512
+ */
1513
+CMARK_EXPORT int cmark_node_get_end_line(cmark_node *node);
1514
+
1515
+/** Returns the column at which 'node' ends.
1516
+ */
1517
+CMARK_EXPORT int cmark_node_get_end_column(cmark_node *node);
1518
+
1519
+/**
1520
+ * ## Tree Manipulation
1521
+ */
1522
+
1523
+/** Unlinks a 'node', removing it from the tree, but not freeing its
1524
+ * memory. (Use 'cmark_node_free' for that.)
1525
+ */
1526
+CMARK_EXPORT void cmark_node_unlink(cmark_node *node);
1527
+
1528
+/** Inserts 'sibling' before 'node'. Returns 1 on success, 0 on failure.
1529
+ */
1530
+CMARK_EXPORT int cmark_node_insert_before(cmark_node *node,
1531
+ cmark_node *sibling);
1532
+
1533
+/** Inserts 'sibling' after 'node'. Returns 1 on success, 0 on failure.
1534
+ */
1535
+CMARK_EXPORT int cmark_node_insert_after(cmark_node *node, cmark_node *sibling);
1536
+
1537
+/** Replaces 'oldnode' with 'newnode' and unlinks 'oldnode' (but does
1538
+ * not free its memory).
1539
+ * Returns 1 on success, 0 on failure.
1540
+ */
1541
+CMARK_EXPORT int cmark_node_replace(cmark_node *oldnode, cmark_node *newnode);
1542
+
1543
+/** Adds 'child' to the beginning of the children of 'node'.
1544
+ * Returns 1 on success, 0 on failure.
1545
+ */
1546
+CMARK_EXPORT int cmark_node_prepend_child(cmark_node *node, cmark_node *child);
1547
+
1548
+/** Adds 'child' to the end of the children of 'node'.
1549
+ * Returns 1 on success, 0 on failure.
1550
+ */
1551
+CMARK_EXPORT int cmark_node_append_child(cmark_node *node, cmark_node *child);
1552
+
1553
+/** Consolidates adjacent text nodes.
1554
+ */
1555
+CMARK_EXPORT void cmark_consolidate_text_nodes(cmark_node *root);
1556
+
1557
+/**
1558
+ * ## Parsing
1559
+ *
1560
+ * Simple interface:
1561
+ *
1562
+ * cmark_node *document = cmark_parse_document("Hello *world*", 13,
1563
+ * CMARK_OPT_DEFAULT);
1564
+ *
1565
+ * Streaming interface:
1566
+ *
1567
+ * cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT);
1568
+ * FILE *fp = fopen("myfile.md", "rb");
1569
+ * while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) {
1570
+ * cmark_parser_feed(parser, buffer, bytes);
1571
+ * if (bytes < sizeof(buffer)) {
1572
+ * break;
1573
+ * }
1574
+ * }
1575
+ * document = cmark_parser_finish(parser);
1576
+ * cmark_parser_free(parser);
1577
+ */
1578
+
1579
+/** Creates a new parser object.
1580
+ */
1581
+CMARK_EXPORT
1582
+cmark_parser *cmark_parser_new(int options);
1583
+
1584
+/** Creates a new parser object with the given memory allocator
1585
+ */
1586
+CMARK_EXPORT
1587
+cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem);
1588
+
1589
+/** Frees memory allocated for a parser object.
1590
+ */
1591
+CMARK_EXPORT
1592
+void cmark_parser_free(cmark_parser *parser);
1593
+
1594
+/** Feeds a string of length 'len' to 'parser'.
1595
+ */
1596
+CMARK_EXPORT
1597
+void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len);
1598
+
1599
+/** Finish parsing and return a pointer to a tree of nodes.
1600
+ */
1601
+CMARK_EXPORT
1602
+cmark_node *cmark_parser_finish(cmark_parser *parser);
1603
+
1604
+/** Parse a CommonMark document in 'buffer' of length 'len'.
1605
+ * Returns a pointer to a tree of nodes. The memory allocated for
1606
+ * the node tree should be released using 'cmark_node_free'
1607
+ * when it is no longer needed.
1608
+ */
1609
+CMARK_EXPORT
1610
+cmark_node *cmark_parse_document(const char *buffer, size_t len, int options);
1611
+
1612
+/** Parse a CommonMark document in file 'f', returning a pointer to
1613
+ * a tree of nodes. The memory allocated for the node tree should be
1614
+ * released using 'cmark_node_free' when it is no longer needed.
1615
+ */
1616
+CMARK_EXPORT
1617
+cmark_node *cmark_parse_file(FILE *f, int options);
1618
+
1619
+/**
1620
+ * ## Rendering
1621
+ */
1622
+
1623
+/** Render a 'node' tree as XML. It is the caller's responsibility
1624
+ * to free the returned buffer.
1625
+ */
1626
+CMARK_EXPORT
1627
+char *cmark_render_xml(cmark_node *root, int options);
1628
+
1629
+/** Render a 'node' tree as an HTML fragment. It is up to the user
1630
+ * to add an appropriate header and footer. It is the caller's
1631
+ * responsibility to free the returned buffer.
1632
+ */
1633
+CMARK_EXPORT
1634
+char *cmark_render_html(cmark_node *root, int options);
1635
+
1636
+/** Render a 'node' tree as a groff man page, without the header.
1637
+ * It is the caller's responsibility to free the returned buffer.
1638
+ */
1639
+CMARK_EXPORT
1640
+char *cmark_render_man(cmark_node *root, int options, int width);
1641
+
1642
+/** Render a 'node' tree as a commonmark document.
1643
+ * It is the caller's responsibility to free the returned buffer.
1644
+ */
1645
+CMARK_EXPORT
1646
+char *cmark_render_commonmark(cmark_node *root, int options, int width);
1647
+
1648
+/** Render a 'node' tree as a LaTeX document.
1649
+ * It is the caller's responsibility to free the returned buffer.
1650
+ */
1651
+CMARK_EXPORT
1652
+char *cmark_render_latex(cmark_node *root, int options, int width);
1653
+
1654
+/**
1655
+ * ## Options
1656
+ */
1657
+
1658
+/** Default options.
1659
+ */
1660
+#define CMARK_OPT_DEFAULT 0
1661
+
1662
+/**
1663
+ * ### Options affecting rendering
1664
+ */
1665
+
1666
+/** Include a `data-sourcepos` attribute on all block elements.
1667
+ */
1668
+#define CMARK_OPT_SOURCEPOS (1 << 1)
1669
+
1670
+/** Render `softbreak` elements as hard line breaks.
1671
+ */
1672
+#define CMARK_OPT_HARDBREAKS (1 << 2)
1673
+
1674
+/** Suppress raw HTML and unsafe links (`javascript:`, `vbscript:`,
1675
+ * `file:`, and `data:`, except for `image/png`, `image/gif`,
1676
+ * `image/jpeg`, or `image/webp` mime types). Raw HTML is replaced
1677
+ * by a placeholder HTML comment. Unsafe links are replaced by
1678
+ * empty strings.
1679
+ */
1680
+#define CMARK_OPT_SAFE (1 << 3)
1681
+
1682
+/** Render `softbreak` elements as spaces.
1683
+ */
1684
+#define CMARK_OPT_NOBREAKS (1 << 4)
1685
+
1686
+/**
1687
+ * ### Options affecting parsing
1688
+ */
1689
+
1690
+/** Normalize tree by consolidating adjacent text nodes.
1691
+ */
1692
+#define CMARK_OPT_NORMALIZE (1 << 8)
1693
+
1694
+/** Validate UTF-8 in the input before parsing, replacing illegal
1695
+ * sequences with the replacement character U+FFFD.
1696
+ */
1697
+#define CMARK_OPT_VALIDATE_UTF8 (1 << 9)
1698
+
1699
+/** Convert straight quotes to curly, --- to em dashes, -- to en dashes.
1700
+ */
1701
+#define CMARK_OPT_SMART (1 << 10)
1702
+
1703
+/**
1704
+ * ## Version information
1705
+ */
1706
+
1707
+/** The library version as integer for runtime checks. Also available as
1708
+ * macro CMARK_VERSION for compile time checks.
1709
+ *
1710
+ * * Bits 16-23 contain the major version.
1711
+ * * Bits 8-15 contain the minor version.
1712
+ * * Bits 0-7 contain the patchlevel.
1713
+ *
1714
+ * In hexadecimal format, the number 0x010203 represents version 1.2.3.
1715
+ */
1716
+CMARK_EXPORT
1717
+int cmark_version(void);
1718
+
1719
+/** The library version string for runtime checks. Also available as
1720
+ * macro CMARK_VERSION_STRING for compile time checks.
1721
+ */
1722
+CMARK_EXPORT
1723
+const char *cmark_version_string(void);
1724
+
1725
+/** # AUTHORS
1726
+ *
1727
+ * John MacFarlane, Vicent Marti, Kārlis Gaņģis, Nick Wellnhofer.
1728
+ */
1729
+
1730
+#ifndef CMARK_NO_SHORT_NAMES
1731
+#define NODE_DOCUMENT CMARK_NODE_DOCUMENT
1732
+#define NODE_BLOCK_QUOTE CMARK_NODE_BLOCK_QUOTE
1733
+#define NODE_LIST CMARK_NODE_LIST
1734
+#define NODE_ITEM CMARK_NODE_ITEM
1735
+#define NODE_CODE_BLOCK CMARK_NODE_CODE_BLOCK
1736
+#define NODE_HTML_BLOCK CMARK_NODE_HTML_BLOCK
1737
+#define NODE_CUSTOM_BLOCK CMARK_NODE_CUSTOM_BLOCK
1738
+#define NODE_PARAGRAPH CMARK_NODE_PARAGRAPH
1739
+#define NODE_HEADING CMARK_NODE_HEADING
1740
+#define NODE_HEADER CMARK_NODE_HEADER
1741
+#define NODE_THEMATIC_BREAK CMARK_NODE_THEMATIC_BREAK
1742
+#define NODE_HRULE CMARK_NODE_HRULE
1743
+#define NODE_TEXT CMARK_NODE_TEXT
1744
+#define NODE_SOFTBREAK CMARK_NODE_SOFTBREAK
1745
+#define NODE_LINEBREAK CMARK_NODE_LINEBREAK
1746
+#define NODE_CODE CMARK_NODE_CODE
1747
+#define NODE_HTML_INLINE CMARK_NODE_HTML_INLINE
1748
+#define NODE_CUSTOM_INLINE CMARK_NODE_CUSTOM_INLINE
1749
+#define NODE_EMPH CMARK_NODE_EMPH
1750
+#define NODE_STRONG CMARK_NODE_STRONG
1751
+#define NODE_LINK CMARK_NODE_LINK
1752
+#define NODE_IMAGE CMARK_NODE_IMAGE
1753
+#define BULLET_LIST CMARK_BULLET_LIST
1754
+#define ORDERED_LIST CMARK_ORDERED_LIST
1755
+#define PERIOD_DELIM CMARK_PERIOD_DELIM
1756
+#define PAREN_DELIM CMARK_PAREN_DELIM
1757
+#endif
1758
+
1759
+#ifdef __cplusplus
1760
+}
1761
+#endif
1762
+
1763
+#endif
1764
+
1765
+#ifndef CMARK_EXPORT_H
1766
+#define CMARK_EXPORT_H
1767
+
1768
+#ifdef CMARK_STATIC_DEFINE
1769
+# define CMARK_EXPORT
1770
+# define CMARK_NO_EXPORT
1771
+#else
1772
+# ifndef CMARK_EXPORT
1773
+# ifdef libcmark_EXPORTS
1774
+ /* We are building this library */
1775
+# define CMARK_EXPORT __attribute__((visibility("default")))
1776
+# else
1777
+ /* We are using this library */
1778
+# define CMARK_EXPORT __attribute__((visibility("default")))
1779
+# endif
1780
+# endif
1781
+
1782
+# ifndef CMARK_NO_EXPORT
1783
+# define CMARK_NO_EXPORT __attribute__((visibility("hidden")))
1784
+# endif
1785
+#endif
1786
+
1787
+#ifndef CMARK_DEPRECATED
1788
+# define CMARK_DEPRECATED __attribute__ ((__deprecated__))
1789
+#endif
1790
+
1791
+#ifndef CMARK_DEPRECATED_EXPORT
1792
+# define CMARK_DEPRECATED_EXPORT CMARK_EXPORT CMARK_DEPRECATED
1793
+#endif
1794
+
1795
+#ifndef CMARK_DEPRECATED_NO_EXPORT
1796
+# define CMARK_DEPRECATED_NO_EXPORT CMARK_NO_EXPORT CMARK_DEPRECATED
1797
+#endif
1798
+
1799
+#if 0 /* DEFINE_NO_DEPRECATED */
1800
+# ifndef CMARK_NO_DEPRECATED
1801
+# define CMARK_NO_DEPRECATED
1802
+# endif
1803
+#endif
1804
+
1805
+#endif
1806
+#ifndef CMARK_VERSION_H
1807
+#define CMARK_VERSION_H
1808
+
1809
+#define CMARK_VERSION ((0 << 16) | (27 << 8) | 1)
1810
+#define CMARK_VERSION_STRING "0.27.1"
1811
+
1812
+#endif
1813
+
1814
+
1815
+#ifndef CMARK_AST_H
1816
+#define CMARK_AST_H
1817
+
1818
+#include <stdio.h>
1819
+
1820
+#ifdef __cplusplus
1821
+extern "C" {
1822
+#endif
1823
+
1824
+#define MAX_LINK_LABEL_LENGTH 1000
1825
+
1826
+struct cmark_parser {
1827
+ struct cmark_mem *mem;
1828
+ struct cmark_reference_map *refmap;
1829
+ struct cmark_node *root;
1830
+ struct cmark_node *current;
1831
+ int line_number;
1832
+ bufsize_t offset;
1833
+ bufsize_t column;
1834
+ bufsize_t first_nonspace;
1835
+ bufsize_t first_nonspace_column;
1836
+ int indent;
1837
+ bool blank;
1838
+ bool partially_consumed_tab;
1839
+ cmark_strbuf curline;
1840
+ bufsize_t last_line_length;
1841
+ cmark_strbuf linebuf;
1842
+ int options;
1843
+ bool last_buffer_ended_with_cr;
1844
+};
1845
+
1846
+#ifdef __cplusplus
1847
+}
1848
+#endif
1849
+
1850
+#endif
1851
+
1852
+
1853
+#ifndef CMARK_REFERENCES_H
1854
+#define CMARK_REFERENCES_H
1855
+
1856
+
1857
+#ifdef __cplusplus
1858
+extern "C" {
1859
+#endif
1860
+
1861
+#define REFMAP_SIZE 16
1862
+
1863
+struct cmark_reference {
1864
+ struct cmark_reference *next;
1865
+ unsigned char *label;
1866
+ cmark_chunk url;
1867
+ cmark_chunk title;
1868
+ unsigned int hash;
1869
+};
1870
+
1871
+typedef struct cmark_reference cmark_reference;
1872
+
1873
+struct cmark_reference_map {
1874
+ cmark_mem *mem;
1875
+ cmark_reference *table[REFMAP_SIZE];
1876
+};
1877
+
1878
+typedef struct cmark_reference_map cmark_reference_map;
1879
+
1880
+cmark_reference_map *cmark_reference_map_new(cmark_mem *mem);
1881
+void cmark_reference_map_free(cmark_reference_map *map);
1882
+cmark_reference *cmark_reference_lookup(cmark_reference_map *map,
1883
+ cmark_chunk *label);
1884
+extern void cmark_reference_create(cmark_reference_map *map, cmark_chunk *label,
1885
+ cmark_chunk *url, cmark_chunk *title);
1886
+
1887
+#ifdef __cplusplus
1888
+}
1889
+#endif
1890
+
1891
+#endif
1892
+
1893
+#ifndef CMARK_UTF8_H
1894
+#define CMARK_UTF8_H
1895
+
1896
+#include <stdint.h>
1897
+
1898
+#ifdef __cplusplus
1899
+extern "C" {
1900
+#endif
1901
+
1902
+void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str,
1903
+ bufsize_t len);
1904
+void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf);
1905
+int cmark_utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst);
1906
+void cmark_utf8proc_check(cmark_strbuf *dest, const uint8_t *line,
1907
+ bufsize_t size);
1908
+int cmark_utf8proc_is_space(int32_t uc);
1909
+int cmark_utf8proc_is_punctuation(int32_t uc);
1910
+
1911
+#ifdef __cplusplus
1912
+}
1913
+#endif
1914
+
1915
+#endif
1916
+
1917
+
1918
+#ifndef CMARK_INLINES_H
1919
+#define CMARK_INLINES_H
1920
+
1921
+#ifdef __cplusplus
1922
+extern "C" {
1923
+#endif
1924
+
1925
+cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url);
1926
+cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title);
1927
+
1928
+void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent,
1929
+ cmark_reference_map *refmap, int options);
1930
+
1931
+bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input,
1932
+ cmark_reference_map *refmap);
1933
+
1934
+#ifdef __cplusplus
1935
+}
1936
+#endif
1937
+
1938
+#endif
1939
+
1940
+
1941
+#ifdef __cplusplus
1942
+extern "C" {
1943
+#endif
1944
+
1945
+bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c,
1946
+ bufsize_t offset);
1947
+bufsize_t _scan_scheme(const unsigned char *p);
1948
+bufsize_t _scan_autolink_uri(const unsigned char *p);
1949
+bufsize_t _scan_autolink_email(const unsigned char *p);
1950
+bufsize_t _scan_html_tag(const unsigned char *p);
1951
+bufsize_t _scan_html_block_start(const unsigned char *p);
1952
+bufsize_t _scan_html_block_start_7(const unsigned char *p);
1953
+bufsize_t _scan_html_block_end_1(const unsigned char *p);
1954
+bufsize_t _scan_html_block_end_2(const unsigned char *p);
1955
+bufsize_t _scan_html_block_end_3(const unsigned char *p);
1956
+bufsize_t _scan_html_block_end_4(const unsigned char *p);
1957
+bufsize_t _scan_html_block_end_5(const unsigned char *p);
1958
+bufsize_t _scan_link_title(const unsigned char *p);
1959
+bufsize_t _scan_spacechars(const unsigned char *p);
1960
+bufsize_t _scan_atx_heading_start(const unsigned char *p);
1961
+bufsize_t _scan_setext_heading_line(const unsigned char *p);
1962
+bufsize_t _scan_thematic_break(const unsigned char *p);
1963
+bufsize_t _scan_open_code_fence(const unsigned char *p);
1964
+bufsize_t _scan_close_code_fence(const unsigned char *p);
1965
+bufsize_t _scan_entity(const unsigned char *p);
1966
+bufsize_t _scan_dangerous_url(const unsigned char *p);
1967
+
1968
+#define scan_scheme(c, n) _scan_at(&_scan_scheme, c, n)
1969
+#define scan_autolink_uri(c, n) _scan_at(&_scan_autolink_uri, c, n)
1970
+#define scan_autolink_email(c, n) _scan_at(&_scan_autolink_email, c, n)
1971
+#define scan_html_tag(c, n) _scan_at(&_scan_html_tag, c, n)
1972
+#define scan_html_block_start(c, n) _scan_at(&_scan_html_block_start, c, n)
1973
+#define scan_html_block_start_7(c, n) _scan_at(&_scan_html_block_start_7, c, n)
1974
+#define scan_html_block_end_1(c, n) _scan_at(&_scan_html_block_end_1, c, n)
1975
+#define scan_html_block_end_2(c, n) _scan_at(&_scan_html_block_end_2, c, n)
1976
+#define scan_html_block_end_3(c, n) _scan_at(&_scan_html_block_end_3, c, n)
1977
+#define scan_html_block_end_4(c, n) _scan_at(&_scan_html_block_end_4, c, n)
1978
+#define scan_html_block_end_5(c, n) _scan_at(&_scan_html_block_end_5, c, n)
1979
+#define scan_link_title(c, n) _scan_at(&_scan_link_title, c, n)
1980
+#define scan_spacechars(c, n) _scan_at(&_scan_spacechars, c, n)
1981
+#define scan_atx_heading_start(c, n) _scan_at(&_scan_atx_heading_start, c, n)
1982
+#define scan_setext_heading_line(c, n) \
1983
+ _scan_at(&_scan_setext_heading_line, c, n)
1984
+#define scan_thematic_break(c, n) _scan_at(&_scan_thematic_break, c, n)
1985
+#define scan_open_code_fence(c, n) _scan_at(&_scan_open_code_fence, c, n)
1986
+#define scan_close_code_fence(c, n) _scan_at(&_scan_close_code_fence, c, n)
1987
+#define scan_entity(c, n) _scan_at(&_scan_entity, c, n)
1988
+#define scan_dangerous_url(c, n) _scan_at(&_scan_dangerous_url, c, n)
1989
+
1990
+#ifdef __cplusplus
1991
+}
1992
+#endif
1993
+
1994
+
1995
+#ifndef CMARK_ITERATOR_H
1996
+#define CMARK_ITERATOR_H
1997
+
1998
+#ifdef __cplusplus
1999
+extern "C" {
2000
+#endif
2001
+
2002
+
2003
+typedef struct {
2004
+ cmark_event_type ev_type;
2005
+ cmark_node *node;
2006
+} cmark_iter_state;
2007
+
2008
+struct cmark_iter {
2009
+ cmark_mem *mem;
2010
+ cmark_node *root;
2011
+ cmark_iter_state cur;
2012
+ cmark_iter_state next;
2013
+};
2014
+
2015
+#ifdef __cplusplus
2016
+}
2017
+#endif
2018
+
2019
+#endif
--- a/src/cmark_amalgamation.h
+++ b/src/cmark_amalgamation.h
@@ -0,0 +1,2019 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/src/cmark_amalgamation.h
+++ b/src/cmark_amalgamation.h
@@ -0,0 +1,2019 @@
1 #ifndef CMARK_H
2 #define CMARK_H
3
4 #include <stdio.h>
5 #include <stdarg.h>
6 #include <string.h>
7 #include <assert.h>
8 #include <string.h>
9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <stdint.h>
12 #include <limits.h>
13
14 #ifdef __cplusplus
15 extern "C" {
16 #endif
17 #ifndef CMARK_CONFIG_H
18 #define CMARK_CONFIG_H
19
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23
24 #define HAVE_STDBOOL_H
25
26 #ifdef HAVE_STDBOOL_H
27 #include <stdbool.h>
28 #elif !defined(__cplusplus)
29 typedef char bool;
30 #endif
31
32 #define HAVE___BUILTIN_EXPECT
33
34 #define HAVE___ATTRIBUTE__
35
36 #ifdef HAVE___ATTRIBUTE__
37 #define CMARK_ATTRIBUTE(list) __attribute__ (list)
38 #else
39 #define CMARK_ATTRIBUTE(list)
40 #endif
41
42 #ifndef CMARK_INLINE
43 #if defined(_MSC_VER) && !defined(__cplusplus)
44 #define CMARK_INLINE __inline
45 #else
46 #define CMARK_INLINE inline
47 #endif
48 #endif
49
50 /* snprintf and vsnprintf fallbacks for MSVC before 2015,
51 due to Valentin Milea http://stackoverflow.com/questions/2915672/
52 */
53
54 #if defined(_MSC_VER) && _MSC_VER < 1900
55
56 #include <stdio.h>
57 #include <stdarg.h>
58
59 #define snprintf c99_snprintf
60 #define vsnprintf c99_vsnprintf
61
62 CMARK_INLINE int c99_vsnprintf(char *outBuf, size_t size, const char *format, va_list ap)
63 {
64 int count = -1;
65
66 if (size != 0)
67 count = _vsnprintf_s(outBuf, size, _TRUNCATE, format, ap);
68 if (count == -1)
69 count = _vscprintf(format, ap);
70
71 return count;
72 }
73
74 CMARK_INLINE int c99_snprintf(char *outBuf, size_t size, const char *format, ...)
75 {
76 int count;
77 va_list ap;
78
79 va_start(ap, format);
80 count = c99_vsnprintf(outBuf, size, format, ap);
81 va_end(ap);
82
83 return count;
84 }
85
86 #endif
87
88 #ifdef __cplusplus
89 }
90 #endif
91
92 #endif
93 /** # NAME
94 *
95 * **cmark** - CommonMark parsing, manipulating, and rendering
96 */
97 #ifndef CMARK_EXPORT_H
98 #define CMARK_EXPORT_H
99
100 #ifdef CMARK_STATIC_DEFINE
101 # define CMARK_EXPORT
102 # define CMARK_NO_EXPORT
103 #else
104 # ifndef CMARK_EXPORT
105 # ifdef libcmark_EXPORTS
106 /* We are building this library */
107 # define CMARK_EXPORT __attribute__((visibility("default")))
108 # else
109 /* We are using this library */
110 # define CMARK_EXPORT __attribute__((visibility("default")))
111 # endif
112 # endif
113
114 # ifndef CMARK_NO_EXPORT
115 # define CMARK_NO_EXPORT __attribute__((visibility("hidden")))
116 # endif
117 #endif
118
119 #ifndef CMARK_DEPRECATED
120 # define CMARK_DEPRECATED __attribute__ ((__deprecated__))
121 #endif
122
123 #ifndef CMARK_DEPRECATED_EXPORT
124 # define CMARK_DEPRECATED_EXPORT CMARK_EXPORT CMARK_DEPRECATED
125 #endif
126
127 #ifndef CMARK_DEPRECATED_NO_EXPORT
128 # define CMARK_DEPRECATED_NO_EXPORT CMARK_NO_EXPORT CMARK_DEPRECATED
129 #endif
130
131 #if 0 /* DEFINE_NO_DEPRECATED */
132 # ifndef CMARK_NO_DEPRECATED
133 # define CMARK_NO_DEPRECATED
134 # endif
135 #endif
136
137 #endif
138 /** # DESCRIPTION
139 *
140 * ## Simple Interface
141 */
142
143 /** Convert 'text' (assumed to be a UTF-8 encoded string with length
144 * 'len') from CommonMark Markdown to HTML, returning a null-terminated,
145 * UTF-8-encoded string. It is the caller's responsibility
146 * to free the returned buffer.
147 */
148 CMARK_EXPORT
149 char *cmark_markdown_to_html(const char *text, size_t len, int options);
150
151 /** ## Node Structure
152 */
153
154 typedef enum {
155 /* Error status */
156 CMARK_NODE_NONE,
157
158 /* Block */
159 CMARK_NODE_DOCUMENT,
160 CMARK_NODE_BLOCK_QUOTE,
161 CMARK_NODE_LIST,
162 CMARK_NODE_ITEM,
163 CMARK_NODE_CODE_BLOCK,
164 CMARK_NODE_HTML_BLOCK,
165 CMARK_NODE_CUSTOM_BLOCK,
166 CMARK_NODE_PARAGRAPH,
167 CMARK_NODE_HEADING,
168 CMARK_NODE_THEMATIC_BREAK,
169
170 CMARK_NODE_FIRST_BLOCK = CMARK_NODE_DOCUMENT,
171 CMARK_NODE_LAST_BLOCK = CMARK_NODE_THEMATIC_BREAK,
172
173 /* Inline */
174 CMARK_NODE_TEXT,
175 CMARK_NODE_SOFTBREAK,
176 CMARK_NODE_LINEBREAK,
177 CMARK_NODE_CODE,
178 CMARK_NODE_HTML_INLINE,
179 CMARK_NODE_CUSTOM_INLINE,
180 CMARK_NODE_EMPH,
181 CMARK_NODE_STRONG,
182 CMARK_NODE_LINK,
183 CMARK_NODE_IMAGE,
184
185 CMARK_NODE_FIRST_INLINE = CMARK_NODE_TEXT,
186 CMARK_NODE_LAST_INLINE = CMARK_NODE_IMAGE,
187 } cmark_node_type;
188
189 /* For backwards compatibility: */
190 #define CMARK_NODE_HEADER CMARK_NODE_HEADING
191 #define CMARK_NODE_HRULE CMARK_NODE_THEMATIC_BREAK
192 #define CMARK_NODE_HTML CMARK_NODE_HTML_BLOCK
193 #define CMARK_NODE_INLINE_HTML CMARK_NODE_HTML_INLINE
194
195 typedef enum {
196 CMARK_NO_LIST,
197 CMARK_BULLET_LIST,
198 CMARK_ORDERED_LIST
199 } cmark_list_type;
200
201 typedef enum {
202 CMARK_NO_DELIM,
203 CMARK_PERIOD_DELIM,
204 CMARK_PAREN_DELIM
205 } cmark_delim_type;
206
207 typedef struct cmark_node cmark_node;
208 typedef struct cmark_parser cmark_parser;
209 typedef struct cmark_iter cmark_iter;
210
211 /**
212 * ## Custom memory allocator support
213 */
214
215 /** Defines the memory allocation functions to be used by CMark
216 * when parsing and allocating a document tree
217 */
218 typedef struct cmark_mem {
219 void *(*calloc)(size_t, size_t);
220 void *(*realloc)(void *, size_t);
221 void (*free)(void *);
222 } cmark_mem;
223
224 /**
225 * ## Creating and Destroying Nodes
226 */
227
228 /** Creates a new node of type 'type'. Note that the node may have
229 * other required properties, which it is the caller's responsibility
230 * to assign.
231 */
232 CMARK_EXPORT cmark_node *cmark_node_new(cmark_node_type type);
233
234 /** Same as `cmark_node_new`, but explicitly listing the memory
235 * allocator used to allocate the node. Note: be sure to use the same
236 * allocator for every node in a tree, or bad things can happen.
237 */
238 CMARK_EXPORT cmark_node *cmark_node_new_with_mem(cmark_node_type type,
239 cmark_mem *mem);
240
241 /** Frees the memory allocated for a node and any children.
242 */
243 CMARK_EXPORT void cmark_node_free(cmark_node *node);
244
245 /**
246 * ## Tree Traversal
247 */
248
249 /** Returns the next node in the sequence after 'node', or NULL if
250 * there is none.
251 */
252 CMARK_EXPORT cmark_node *cmark_node_next(cmark_node *node);
253
254 /** Returns the previous node in the sequence after 'node', or NULL if
255 * there is none.
256 */
257 CMARK_EXPORT cmark_node *cmark_node_previous(cmark_node *node);
258
259 /** Returns the parent of 'node', or NULL if there is none.
260 */
261 CMARK_EXPORT cmark_node *cmark_node_parent(cmark_node *node);
262
263 /** Returns the first child of 'node', or NULL if 'node' has no children.
264 */
265 CMARK_EXPORT cmark_node *cmark_node_first_child(cmark_node *node);
266
267 /** Returns the last child of 'node', or NULL if 'node' has no children.
268 */
269 CMARK_EXPORT cmark_node *cmark_node_last_child(cmark_node *node);
270
271 /**
272 * ## Iterator
273 *
274 * An iterator will walk through a tree of nodes, starting from a root
275 * node, returning one node at a time, together with information about
276 * whether the node is being entered or exited. The iterator will
277 * first descend to a child node, if there is one. When there is no
278 * child, the iterator will go to the next sibling. When there is no
279 * next sibling, the iterator will return to the parent (but with
280 * a 'cmark_event_type' of `CMARK_EVENT_EXIT`). The iterator will
281 * return `CMARK_EVENT_DONE` when it reaches the root node again.
282 * One natural application is an HTML renderer, where an `ENTER` event
283 * outputs an open tag and an `EXIT` event outputs a close tag.
284 * An iterator might also be used to transform an AST in some systematic
285 * way, for example, turning all level-3 headings into regular paragraphs.
286 *
287 * void
288 * usage_example(cmark_node *root) {
289 * cmark_event_type ev_type;
290 * cmark_iter *iter = cmark_iter_new(root);
291 *
292 * while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
293 * cmark_node *cur = cmark_iter_get_node(iter);
294 * // Do something with `cur` and `ev_type`
295 * }
296 *
297 * cmark_iter_free(iter);
298 * }
299 *
300 * Iterators will never return `EXIT` events for leaf nodes, which are nodes
301 * of type:
302 *
303 * * CMARK_NODE_HTML_BLOCK
304 * * CMARK_NODE_THEMATIC_BREAK
305 * * CMARK_NODE_CODE_BLOCK
306 * * CMARK_NODE_TEXT
307 * * CMARK_NODE_SOFTBREAK
308 * * CMARK_NODE_LINEBREAK
309 * * CMARK_NODE_CODE
310 * * CMARK_NODE_HTML_INLINE
311 *
312 * Nodes must only be modified after an `EXIT` event, or an `ENTER` event for
313 * leaf nodes.
314 */
315
316 typedef enum {
317 CMARK_EVENT_NONE,
318 CMARK_EVENT_DONE,
319 CMARK_EVENT_ENTER,
320 CMARK_EVENT_EXIT
321 } cmark_event_type;
322
323 /** Creates a new iterator starting at 'root'. The current node and event
324 * type are undefined until 'cmark_iter_next' is called for the first time.
325 * The memory allocated for the iterator should be released using
326 * 'cmark_iter_free' when it is no longer needed.
327 */
328 CMARK_EXPORT
329 cmark_iter *cmark_iter_new(cmark_node *root);
330
331 /** Frees the memory allocated for an iterator.
332 */
333 CMARK_EXPORT
334 void cmark_iter_free(cmark_iter *iter);
335
336 /** Advances to the next node and returns the event type (`CMARK_EVENT_ENTER`,
337 * `CMARK_EVENT_EXIT` or `CMARK_EVENT_DONE`).
338 */
339 CMARK_EXPORT
340 cmark_event_type cmark_iter_next(cmark_iter *iter);
341
342 /** Returns the current node.
343 */
344 CMARK_EXPORT
345 cmark_node *cmark_iter_get_node(cmark_iter *iter);
346
347 /** Returns the current event type.
348 */
349 CMARK_EXPORT
350 cmark_event_type cmark_iter_get_event_type(cmark_iter *iter);
351
352 /** Returns the root node.
353 */
354 CMARK_EXPORT
355 cmark_node *cmark_iter_get_root(cmark_iter *iter);
356
357 /** Resets the iterator so that the current node is 'current' and
358 * the event type is 'event_type'. The new current node must be a
359 * descendant of the root node or the root node itself.
360 */
361 CMARK_EXPORT
362 void cmark_iter_reset(cmark_iter *iter, cmark_node *current,
363 cmark_event_type event_type);
364
365 /**
366 * ## Accessors
367 */
368
369 /** Returns the user data of 'node'.
370 */
371 CMARK_EXPORT void *cmark_node_get_user_data(cmark_node *node);
372
373 /** Sets arbitrary user data for 'node'. Returns 1 on success,
374 * 0 on failure.
375 */
376 CMARK_EXPORT int cmark_node_set_user_data(cmark_node *node, void *user_data);
377
378 /** Returns the type of 'node', or `CMARK_NODE_NONE` on error.
379 */
380 CMARK_EXPORT cmark_node_type cmark_node_get_type(cmark_node *node);
381
382 /** Like 'cmark_node_get_type', but returns a string representation
383 of the type, or `"<unknown>"`.
384 */
385 CMARK_EXPORT
386 const char *cmark_node_get_type_string(cmark_node *node);
387
388 /** Returns the string contents of 'node', or an empty
389 string if none is set.
390 */
391 CMARK_EXPORT const char *cmark_node_get_literal(cmark_node *node);
392
393 /** Sets the string contents of 'node'. Returns 1 on success,
394 * 0 on failure.
395 */
396 CMARK_EXPORT int cmark_node_set_literal(cmark_node *node, const char *content);
397
398 /** Returns the heading level of 'node', or 0 if 'node' is not a heading.
399 */
400 CMARK_EXPORT int cmark_node_get_heading_level(cmark_node *node);
401
402 /* For backwards compatibility */
403 #define cmark_node_get_header_level cmark_node_get_heading_level
404 #define cmark_node_set_header_level cmark_node_set_heading_level
405
406 /** Sets the heading level of 'node', returning 1 on success and 0 on error.
407 */
408 CMARK_EXPORT int cmark_node_set_heading_level(cmark_node *node, int level);
409
410 /** Returns the list type of 'node', or `CMARK_NO_LIST` if 'node'
411 * is not a list.
412 */
413 CMARK_EXPORT cmark_list_type cmark_node_get_list_type(cmark_node *node);
414
415 /** Sets the list type of 'node', returning 1 on success and 0 on error.
416 */
417 CMARK_EXPORT int cmark_node_set_list_type(cmark_node *node,
418 cmark_list_type type);
419
420 /** Returns the list delimiter type of 'node', or `CMARK_NO_DELIM` if 'node'
421 * is not a list.
422 */
423 CMARK_EXPORT cmark_delim_type cmark_node_get_list_delim(cmark_node *node);
424
425 /** Sets the list delimiter type of 'node', returning 1 on success and 0
426 * on error.
427 */
428 CMARK_EXPORT int cmark_node_set_list_delim(cmark_node *node,
429 cmark_delim_type delim);
430
431 /** Returns starting number of 'node', if it is an ordered list, otherwise 0.
432 */
433 CMARK_EXPORT int cmark_node_get_list_start(cmark_node *node);
434
435 /** Sets starting number of 'node', if it is an ordered list. Returns 1
436 * on success, 0 on failure.
437 */
438 CMARK_EXPORT int cmark_node_set_list_start(cmark_node *node, int start);
439
440 /** Returns 1 if 'node' is a tight list, 0 otherwise.
441 */
442 CMARK_EXPORT int cmark_node_get_list_tight(cmark_node *node);
443
444 /** Sets the "tightness" of a list. Returns 1 on success, 0 on failure.
445 */
446 CMARK_EXPORT int cmark_node_set_list_tight(cmark_node *node, int tight);
447
448 /** Returns the info string from a fenced code block.
449 */
450 CMARK_EXPORT const char *cmark_node_get_fence_info(cmark_node *node);
451
452 /** Sets the info string in a fenced code block, returning 1 on
453 * success and 0 on failure.
454 */
455 CMARK_EXPORT int cmark_node_set_fence_info(cmark_node *node, const char *info);
456
457 /** Returns the URL of a link or image 'node', or an empty string
458 if no URL is set.
459 */
460 CMARK_EXPORT const char *cmark_node_get_url(cmark_node *node);
461
462 /** Sets the URL of a link or image 'node'. Returns 1 on success,
463 * 0 on failure.
464 */
465 CMARK_EXPORT int cmark_node_set_url(cmark_node *node, const char *url);
466
467 /** Returns the title of a link or image 'node', or an empty
468 string if no title is set.
469 */
470 CMARK_EXPORT const char *cmark_node_get_title(cmark_node *node);
471
472 /** Sets the title of a link or image 'node'. Returns 1 on success,
473 * 0 on failure.
474 */
475 CMARK_EXPORT int cmark_node_set_title(cmark_node *node, const char *title);
476
477 /** Returns the literal "on enter" text for a custom 'node', or
478 an empty string if no on_enter is set.
479 */
480 CMARK_EXPORT const char *cmark_node_get_on_enter(cmark_node *node);
481
482 /** Sets the literal text to render "on enter" for a custom 'node'.
483 Any children of the node will be rendered after this text.
484 Returns 1 on success 0 on failure.
485 */
486 CMARK_EXPORT int cmark_node_set_on_enter(cmark_node *node,
487 const char *on_enter);
488
489 /** Returns the literal "on exit" text for a custom 'node', or
490 an empty string if no on_exit is set.
491 */
492 CMARK_EXPORT const char *cmark_node_get_on_exit(cmark_node *node);
493
494 /** Sets the literal text to render "on exit" for a custom 'node'.
495 Any children of the node will be rendered before this text.
496 Returns 1 on success 0 on failure.
497 */
498 CMARK_EXPORT int cmark_node_set_on_exit(cmark_node *node, const char *on_exit);
499
500 /** Returns the line on which 'node' begins.
501 */
502 CMARK_EXPORT int cmark_node_get_start_line(cmark_node *node);
503
504 /** Returns the column at which 'node' begins.
505 */
506 CMARK_EXPORT int cmark_node_get_start_column(cmark_node *node);
507
508 /** Returns the line on which 'node' ends.
509 */
510 CMARK_EXPORT int cmark_node_get_end_line(cmark_node *node);
511
512 /** Returns the column at which 'node' ends.
513 */
514 CMARK_EXPORT int cmark_node_get_end_column(cmark_node *node);
515
516 /**
517 * ## Tree Manipulation
518 */
519
520 /** Unlinks a 'node', removing it from the tree, but not freeing its
521 * memory. (Use 'cmark_node_free' for that.)
522 */
523 CMARK_EXPORT void cmark_node_unlink(cmark_node *node);
524
525 /** Inserts 'sibling' before 'node'. Returns 1 on success, 0 on failure.
526 */
527 CMARK_EXPORT int cmark_node_insert_before(cmark_node *node,
528 cmark_node *sibling);
529
530 /** Inserts 'sibling' after 'node'. Returns 1 on success, 0 on failure.
531 */
532 CMARK_EXPORT int cmark_node_insert_after(cmark_node *node, cmark_node *sibling);
533
534 /** Replaces 'oldnode' with 'newnode' and unlinks 'oldnode' (but does
535 * not free its memory).
536 * Returns 1 on success, 0 on failure.
537 */
538 CMARK_EXPORT int cmark_node_replace(cmark_node *oldnode, cmark_node *newnode);
539
540 /** Adds 'child' to the beginning of the children of 'node'.
541 * Returns 1 on success, 0 on failure.
542 */
543 CMARK_EXPORT int cmark_node_prepend_child(cmark_node *node, cmark_node *child);
544
545 /** Adds 'child' to the end of the children of 'node'.
546 * Returns 1 on success, 0 on failure.
547 */
548 CMARK_EXPORT int cmark_node_append_child(cmark_node *node, cmark_node *child);
549
550 /** Consolidates adjacent text nodes.
551 */
552 CMARK_EXPORT void cmark_consolidate_text_nodes(cmark_node *root);
553
554 /**
555 * ## Parsing
556 *
557 * Simple interface:
558 *
559 * cmark_node *document = cmark_parse_document("Hello *world*", 13,
560 * CMARK_OPT_DEFAULT);
561 *
562 * Streaming interface:
563 *
564 * cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT);
565 * FILE *fp = fopen("myfile.md", "rb");
566 * while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) {
567 * cmark_parser_feed(parser, buffer, bytes);
568 * if (bytes < sizeof(buffer)) {
569 * break;
570 * }
571 * }
572 * document = cmark_parser_finish(parser);
573 * cmark_parser_free(parser);
574 */
575
576 /** Creates a new parser object.
577 */
578 CMARK_EXPORT
579 cmark_parser *cmark_parser_new(int options);
580
581 /** Creates a new parser object with the given memory allocator
582 */
583 CMARK_EXPORT
584 cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem);
585
586 /** Frees memory allocated for a parser object.
587 */
588 CMARK_EXPORT
589 void cmark_parser_free(cmark_parser *parser);
590
591 /** Feeds a string of length 'len' to 'parser'.
592 */
593 CMARK_EXPORT
594 void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len);
595
596 /** Finish parsing and return a pointer to a tree of nodes.
597 */
598 CMARK_EXPORT
599 cmark_node *cmark_parser_finish(cmark_parser *parser);
600
601 /** Parse a CommonMark document in 'buffer' of length 'len'.
602 * Returns a pointer to a tree of nodes. The memory allocated for
603 * the node tree should be released using 'cmark_node_free'
604 * when it is no longer needed.
605 */
606 CMARK_EXPORT
607 cmark_node *cmark_parse_document(const char *buffer, size_t len, int options);
608
609 /** Parse a CommonMark document in file 'f', returning a pointer to
610 * a tree of nodes. The memory allocated for the node tree should be
611 * released using 'cmark_node_free' when it is no longer needed.
612 */
613 CMARK_EXPORT
614 cmark_node *cmark_parse_file(FILE *f, int options);
615
616 /**
617 * ## Rendering
618 */
619
620 /** Render a 'node' tree as XML. It is the caller's responsibility
621 * to free the returned buffer.
622 */
623 CMARK_EXPORT
624 char *cmark_render_xml(cmark_node *root, int options);
625
626 /** Render a 'node' tree as an HTML fragment. It is up to the user
627 * to add an appropriate header and footer. It is the caller's
628 * responsibility to free the returned buffer.
629 */
630 CMARK_EXPORT
631 char *cmark_render_html(cmark_node *root, int options);
632
633 /** Render a 'node' tree as a groff man page, without the header.
634 * It is the caller's responsibility to free the returned buffer.
635 */
636 CMARK_EXPORT
637 char *cmark_render_man(cmark_node *root, int options, int width);
638
639 /** Render a 'node' tree as a commonmark document.
640 * It is the caller's responsibility to free the returned buffer.
641 */
642 CMARK_EXPORT
643 char *cmark_render_commonmark(cmark_node *root, int options, int width);
644
645 /** Render a 'node' tree as a LaTeX document.
646 * It is the caller's responsibility to free the returned buffer.
647 */
648 CMARK_EXPORT
649 char *cmark_render_latex(cmark_node *root, int options, int width);
650
651 /**
652 * ## Options
653 */
654
655 /** Default options.
656 */
657 #define CMARK_OPT_DEFAULT 0
658
659 /**
660 * ### Options affecting rendering
661 */
662
663 /** Include a `data-sourcepos` attribute on all block elements.
664 */
665 #define CMARK_OPT_SOURCEPOS (1 << 1)
666
667 /** Render `softbreak` elements as hard line breaks.
668 */
669 #define CMARK_OPT_HARDBREAKS (1 << 2)
670
671 /** Suppress raw HTML and unsafe links (`javascript:`, `vbscript:`,
672 * `file:`, and `data:`, except for `image/png`, `image/gif`,
673 * `image/jpeg`, or `image/webp` mime types). Raw HTML is replaced
674 * by a placeholder HTML comment. Unsafe links are replaced by
675 * empty strings.
676 */
677 #define CMARK_OPT_SAFE (1 << 3)
678
679 /** Render `softbreak` elements as spaces.
680 */
681 #define CMARK_OPT_NOBREAKS (1 << 4)
682
683 /**
684 * ### Options affecting parsing
685 */
686
687 /** Normalize tree by consolidating adjacent text nodes.
688 */
689 #define CMARK_OPT_NORMALIZE (1 << 8)
690
691 /** Validate UTF-8 in the input before parsing, replacing illegal
692 * sequences with the replacement character U+FFFD.
693 */
694 #define CMARK_OPT_VALIDATE_UTF8 (1 << 9)
695
696 /** Convert straight quotes to curly, --- to em dashes, -- to en dashes.
697 */
698 #define CMARK_OPT_SMART (1 << 10)
699
700 /**
701 * ## Version information
702 */
703
704 /** The library version as integer for runtime checks. Also available as
705 * macro CMARK_VERSION for compile time checks.
706 *
707 * * Bits 16-23 contain the major version.
708 * * Bits 8-15 contain the minor version.
709 * * Bits 0-7 contain the patchlevel.
710 *
711 * In hexadecimal format, the number 0x010203 represents version 1.2.3.
712 */
713 CMARK_EXPORT
714 int cmark_version(void);
715
716 /** The library version string for runtime checks. Also available as
717 * macro CMARK_VERSION_STRING for compile time checks.
718 */
719 CMARK_EXPORT
720 const char *cmark_version_string(void);
721
722 /** # AUTHORS
723 *
724 * John MacFarlane, Vicent Marti, Kārlis Gaņģis, Nick Wellnhofer.
725 */
726
727 #ifndef CMARK_NO_SHORT_NAMES
728 #define NODE_DOCUMENT CMARK_NODE_DOCUMENT
729 #define NODE_BLOCK_QUOTE CMARK_NODE_BLOCK_QUOTE
730 #define NODE_LIST CMARK_NODE_LIST
731 #define NODE_ITEM CMARK_NODE_ITEM
732 #define NODE_CODE_BLOCK CMARK_NODE_CODE_BLOCK
733 #define NODE_HTML_BLOCK CMARK_NODE_HTML_BLOCK
734 #define NODE_CUSTOM_BLOCK CMARK_NODE_CUSTOM_BLOCK
735 #define NODE_PARAGRAPH CMARK_NODE_PARAGRAPH
736 #define NODE_HEADING CMARK_NODE_HEADING
737 #define NODE_HEADER CMARK_NODE_HEADER
738 #define NODE_THEMATIC_BREAK CMARK_NODE_THEMATIC_BREAK
739 #define NODE_HRULE CMARK_NODE_HRULE
740 #define NODE_TEXT CMARK_NODE_TEXT
741 #define NODE_SOFTBREAK CMARK_NODE_SOFTBREAK
742 #define NODE_LINEBREAK CMARK_NODE_LINEBREAK
743 #define NODE_CODE CMARK_NODE_CODE
744 #define NODE_HTML_INLINE CMARK_NODE_HTML_INLINE
745 #define NODE_CUSTOM_INLINE CMARK_NODE_CUSTOM_INLINE
746 #define NODE_EMPH CMARK_NODE_EMPH
747 #define NODE_STRONG CMARK_NODE_STRONG
748 #define NODE_LINK CMARK_NODE_LINK
749 #define NODE_IMAGE CMARK_NODE_IMAGE
750 #define BULLET_LIST CMARK_BULLET_LIST
751 #define ORDERED_LIST CMARK_ORDERED_LIST
752 #define PERIOD_DELIM CMARK_PERIOD_DELIM
753 #define PAREN_DELIM CMARK_PAREN_DELIM
754 #endif
755
756 #ifdef __cplusplus
757 }
758 #endif
759
760 #endif
761
762 #ifndef CMARK_BUFFER_H
763 #define CMARK_BUFFER_H
764
765 #include <stddef.h>
766 #include <stdarg.h>
767 #include <string.h>
768 #include <limits.h>
769 #include <stdint.h>
770
771 #ifdef __cplusplus
772 extern "C" {
773 #endif
774
775 typedef int32_t bufsize_t;
776
777 typedef struct {
778 cmark_mem *mem;
779 unsigned char *ptr;
780 bufsize_t asize, size;
781 } cmark_strbuf;
782
783 extern unsigned char cmark_strbuf__initbuf[];
784
785 #define CMARK_BUF_INIT(mem) \
786 { mem, cmark_strbuf__initbuf, 0, 0 }
787
788 /**
789 * Initialize a cmark_strbuf structure.
790 *
791 * For the cases where CMARK_BUF_INIT cannot be used to do static
792 * initialization.
793 */
794 void cmark_strbuf_init(cmark_mem *mem, cmark_strbuf *buf,
795 bufsize_t initial_size);
796
797 /**
798 * Grow the buffer to hold at least `target_size` bytes.
799 */
800 void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size);
801
802 void cmark_strbuf_free(cmark_strbuf *buf);
803 void cmark_strbuf_swap(cmark_strbuf *buf_a, cmark_strbuf *buf_b);
804
805 bufsize_t cmark_strbuf_len(const cmark_strbuf *buf);
806
807 int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b);
808
809 unsigned char *cmark_strbuf_detach(cmark_strbuf *buf);
810 void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize,
811 const cmark_strbuf *buf);
812
813 static CMARK_INLINE const char *cmark_strbuf_cstr(const cmark_strbuf *buf) {
814 return (char *)buf->ptr;
815 }
816
817 #define cmark_strbuf_at(buf, n) ((buf)->ptr[n])
818
819 void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data,
820 bufsize_t len);
821 void cmark_strbuf_sets(cmark_strbuf *buf, const char *string);
822 void cmark_strbuf_putc(cmark_strbuf *buf, int c);
823 void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data,
824 bufsize_t len);
825 void cmark_strbuf_puts(cmark_strbuf *buf, const char *string);
826 void cmark_strbuf_clear(cmark_strbuf *buf);
827
828 bufsize_t cmark_strbuf_strchr(const cmark_strbuf *buf, int c, bufsize_t pos);
829 bufsize_t cmark_strbuf_strrchr(const cmark_strbuf *buf, int c, bufsize_t pos);
830 void cmark_strbuf_drop(cmark_strbuf *buf, bufsize_t n);
831 void cmark_strbuf_truncate(cmark_strbuf *buf, bufsize_t len);
832 void cmark_strbuf_rtrim(cmark_strbuf *buf);
833 void cmark_strbuf_trim(cmark_strbuf *buf);
834 void cmark_strbuf_normalize_whitespace(cmark_strbuf *s);
835 void cmark_strbuf_unescape(cmark_strbuf *s);
836
837 #ifdef __cplusplus
838 }
839 #endif
840
841 #endif
842
843 #ifndef CMARK_CMARK_CTYPE_H
844 #define CMARK_CMARK_CTYPE_H
845
846 #ifdef __cplusplus
847 extern "C" {
848 #endif
849
850 /** Locale-independent versions of functions from ctype.h.
851 * We want cmark to behave the same no matter what the system locale.
852 */
853
854 int cmark_isspace(char c);
855
856 int cmark_ispunct(char c);
857
858 int cmark_isalnum(char c);
859
860 int cmark_isdigit(char c);
861
862 int cmark_isalpha(char c);
863
864 #ifdef __cplusplus
865 }
866 #endif
867
868 #endif
869
870 #ifndef CMARK_CHUNK_H
871 #define CMARK_CHUNK_H
872
873 #include <string.h>
874 #include <stdlib.h>
875 #include <assert.h>
876
877 #define CMARK_CHUNK_EMPTY \
878 { NULL, 0, 0 }
879
880 typedef struct {
881 unsigned char *data;
882 bufsize_t len;
883 bufsize_t alloc; // also implies a NULL-terminated string
884 } cmark_chunk;
885
886 static CMARK_INLINE void cmark_chunk_free(cmark_mem *mem, cmark_chunk *c) {
887 if (c->alloc)
888 mem->free(c->data);
889
890 c->data = NULL;
891 c->alloc = 0;
892 c->len = 0;
893 }
894
895 static CMARK_INLINE void cmark_chunk_ltrim(cmark_chunk *c) {
896 assert(!c->alloc);
897
898 while (c->len && cmark_isspace(c->data[0])) {
899 c->data++;
900 c->len--;
901 }
902 }
903
904 static CMARK_INLINE void cmark_chunk_rtrim(cmark_chunk *c) {
905 assert(!c->alloc);
906
907 while (c->len > 0) {
908 if (!cmark_isspace(c->data[c->len - 1]))
909 break;
910
911 c->len--;
912 }
913 }
914
915 static CMARK_INLINE void cmark_chunk_trim(cmark_chunk *c) {
916 cmark_chunk_ltrim(c);
917 cmark_chunk_rtrim(c);
918 }
919
920 static CMARK_INLINE bufsize_t cmark_chunk_strchr(cmark_chunk *ch, int c,
921 bufsize_t offset) {
922 const unsigned char *p =
923 (unsigned char *)memchr(ch->data + offset, c, ch->len - offset);
924 return p ? (bufsize_t)(p - ch->data) : ch->len;
925 }
926
927 static CMARK_INLINE const char *cmark_chunk_to_cstr(cmark_mem *mem,
928 cmark_chunk *c) {
929 unsigned char *str;
930
931 if (c->alloc) {
932 return (char *)c->data;
933 }
934 str = (unsigned char *)mem->calloc(c->len + 1, 1);
935 if (c->len > 0) {
936 memcpy(str, c->data, c->len);
937 }
938 str[c->len] = 0;
939 c->data = str;
940 c->alloc = 1;
941
942 return (char *)str;
943 }
944
945 static CMARK_INLINE void cmark_chunk_set_cstr(cmark_mem *mem, cmark_chunk *c,
946 const char *str) {
947 unsigned char *old = c->alloc ? c->data : NULL;
948 if (str == NULL) {
949 c->len = 0;
950 c->data = NULL;
951 c->alloc = 0;
952 } else {
953 c->len = (bufsize_t)strlen(str);
954 c->data = (unsigned char *)mem->calloc(c->len + 1, 1);
955 c->alloc = 1;
956 memcpy(c->data, str, c->len + 1);
957 }
958 if (old != NULL) {
959 mem->free(old);
960 }
961 }
962
963 static CMARK_INLINE cmark_chunk cmark_chunk_literal(const char *data) {
964 bufsize_t len = data ? (bufsize_t)strlen(data) : 0;
965 cmark_chunk c = {(unsigned char *)data, len, 0};
966 return c;
967 }
968
969 static CMARK_INLINE cmark_chunk cmark_chunk_dup(const cmark_chunk *ch,
970 bufsize_t pos, bufsize_t len) {
971 cmark_chunk c = {ch->data + pos, len, 0};
972 return c;
973 }
974
975 static CMARK_INLINE cmark_chunk cmark_chunk_buf_detach(cmark_strbuf *buf) {
976 cmark_chunk c;
977
978 c.len = buf->size;
979 c.data = cmark_strbuf_detach(buf);
980 c.alloc = 1;
981
982 return c;
983 }
984
985 #endif
986
987 #ifndef CMARK_NODE_H
988 #define CMARK_NODE_H
989
990 #ifdef __cplusplus
991 extern "C" {
992 #endif
993
994 #include <stdio.h>
995 #include <stdint.h>
996
997
998 typedef struct {
999 cmark_list_type list_type;
1000 int marker_offset;
1001 int padding;
1002 int start;
1003 cmark_delim_type delimiter;
1004 unsigned char bullet_char;
1005 bool tight;
1006 } cmark_list;
1007
1008 typedef struct {
1009 cmark_chunk info;
1010 cmark_chunk literal;
1011 uint8_t fence_length;
1012 uint8_t fence_offset;
1013 unsigned char fence_char;
1014 int8_t fenced;
1015 } cmark_code;
1016
1017 typedef struct {
1018 int level;
1019 bool setext;
1020 } cmark_heading;
1021
1022 typedef struct {
1023 cmark_chunk url;
1024 cmark_chunk title;
1025 } cmark_link;
1026
1027 typedef struct {
1028 cmark_chunk on_enter;
1029 cmark_chunk on_exit;
1030 } cmark_custom;
1031
1032 enum cmark_node__internal_flags {
1033 CMARK_NODE__OPEN = (1 << 0),
1034 CMARK_NODE__LAST_LINE_BLANK = (1 << 1),
1035 };
1036
1037 struct cmark_node {
1038 cmark_strbuf content;
1039
1040 struct cmark_node *next;
1041 struct cmark_node *prev;
1042 struct cmark_node *parent;
1043 struct cmark_node *first_child;
1044 struct cmark_node *last_child;
1045
1046 void *user_data;
1047
1048 int start_line;
1049 int start_column;
1050 int end_line;
1051 int end_column;
1052 uint16_t type;
1053 uint16_t flags;
1054
1055 union {
1056 cmark_chunk literal;
1057 cmark_list list;
1058 cmark_code code;
1059 cmark_heading heading;
1060 cmark_link link;
1061 cmark_custom custom;
1062 int html_block_type;
1063 } as;
1064 };
1065
1066 static CMARK_INLINE cmark_mem *cmark_node_mem(cmark_node *node) {
1067 return node->content.mem;
1068 }
1069 CMARK_EXPORT int cmark_node_check(cmark_node *node, FILE *out);
1070
1071 #ifdef __cplusplus
1072 }
1073 #endif
1074
1075 #endif
1076 #ifndef CMARK_HOUDINI_H
1077 #define CMARK_HOUDINI_H
1078
1079 #ifdef __cplusplus
1080 extern "C" {
1081 #endif
1082
1083 #include <stdint.h>
1084
1085 #ifdef HAVE___BUILTIN_EXPECT
1086 #define likely(x) __builtin_expect((x), 1)
1087 #define unlikely(x) __builtin_expect((x), 0)
1088 #else
1089 #define likely(x) (x)
1090 #define unlikely(x) (x)
1091 #endif
1092
1093 #ifdef HOUDINI_USE_LOCALE
1094 #define _isxdigit(c) isxdigit(c)
1095 #define _isdigit(c) isdigit(c)
1096 #else
1097 /*
1098 * Helper _isdigit methods -- do not trust the current locale
1099 * */
1100 #define _isxdigit(c) (strchr("0123456789ABCDEFabcdef", (c)) != NULL)
1101 #define _isdigit(c) ((c) >= '0' && (c) <= '9')
1102 #endif
1103
1104 #define HOUDINI_ESCAPED_SIZE(x) (((x)*12) / 10)
1105 #define HOUDINI_UNESCAPED_SIZE(x) (x)
1106
1107 extern bufsize_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src,
1108 bufsize_t size);
1109 extern int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src,
1110 bufsize_t size);
1111 extern int houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src,
1112 bufsize_t size, int secure);
1113 extern int houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src,
1114 bufsize_t size);
1115 extern void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src,
1116 bufsize_t size);
1117 extern int houdini_escape_href(cmark_strbuf *ob, const uint8_t *src,
1118 bufsize_t size);
1119
1120 #ifdef __cplusplus
1121 }
1122 #endif
1123
1124 #endif
1125 #ifndef CMARK_H
1126 #define CMARK_H
1127
1128 #include <stdio.h>
1129 #include <cmark_export.h>
1130 #include <cmark_version.h>
1131
1132 #ifdef __cplusplus
1133 extern "C" {
1134 #endif
1135
1136 /** # NAME
1137 *
1138 * **cmark** - CommonMark parsing, manipulating, and rendering
1139 */
1140
1141 /** # DESCRIPTION
1142 *
1143 * ## Simple Interface
1144 */
1145
1146 /** Convert 'text' (assumed to be a UTF-8 encoded string with length
1147 * 'len') from CommonMark Markdown to HTML, returning a null-terminated,
1148 * UTF-8-encoded string. It is the caller's responsibility
1149 * to free the returned buffer.
1150 */
1151 CMARK_EXPORT
1152 char *cmark_markdown_to_html(const char *text, size_t len, int options);
1153
1154 /** ## Node Structure
1155 */
1156
1157 typedef enum {
1158 /* Error status */
1159 CMARK_NODE_NONE,
1160
1161 /* Block */
1162 CMARK_NODE_DOCUMENT,
1163 CMARK_NODE_BLOCK_QUOTE,
1164 CMARK_NODE_LIST,
1165 CMARK_NODE_ITEM,
1166 CMARK_NODE_CODE_BLOCK,
1167 CMARK_NODE_HTML_BLOCK,
1168 CMARK_NODE_CUSTOM_BLOCK,
1169 CMARK_NODE_PARAGRAPH,
1170 CMARK_NODE_HEADING,
1171 CMARK_NODE_THEMATIC_BREAK,
1172
1173 CMARK_NODE_FIRST_BLOCK = CMARK_NODE_DOCUMENT,
1174 CMARK_NODE_LAST_BLOCK = CMARK_NODE_THEMATIC_BREAK,
1175
1176 /* Inline */
1177 CMARK_NODE_TEXT,
1178 CMARK_NODE_SOFTBREAK,
1179 CMARK_NODE_LINEBREAK,
1180 CMARK_NODE_CODE,
1181 CMARK_NODE_HTML_INLINE,
1182 CMARK_NODE_CUSTOM_INLINE,
1183 CMARK_NODE_EMPH,
1184 CMARK_NODE_STRONG,
1185 CMARK_NODE_LINK,
1186 CMARK_NODE_IMAGE,
1187
1188 CMARK_NODE_FIRST_INLINE = CMARK_NODE_TEXT,
1189 CMARK_NODE_LAST_INLINE = CMARK_NODE_IMAGE,
1190 } cmark_node_type;
1191
1192 /* For backwards compatibility: */
1193 #define CMARK_NODE_HEADER CMARK_NODE_HEADING
1194 #define CMARK_NODE_HRULE CMARK_NODE_THEMATIC_BREAK
1195 #define CMARK_NODE_HTML CMARK_NODE_HTML_BLOCK
1196 #define CMARK_NODE_INLINE_HTML CMARK_NODE_HTML_INLINE
1197
1198 typedef enum {
1199 CMARK_NO_LIST,
1200 CMARK_BULLET_LIST,
1201 CMARK_ORDERED_LIST
1202 } cmark_list_type;
1203
1204 typedef enum {
1205 CMARK_NO_DELIM,
1206 CMARK_PERIOD_DELIM,
1207 CMARK_PAREN_DELIM
1208 } cmark_delim_type;
1209
1210 typedef struct cmark_node cmark_node;
1211 typedef struct cmark_parser cmark_parser;
1212 typedef struct cmark_iter cmark_iter;
1213
1214 /**
1215 * ## Custom memory allocator support
1216 */
1217
1218 /** Defines the memory allocation functions to be used by CMark
1219 * when parsing and allocating a document tree
1220 */
1221 typedef struct cmark_mem {
1222 void *(*calloc)(size_t, size_t);
1223 void *(*realloc)(void *, size_t);
1224 void (*free)(void *);
1225 } cmark_mem;
1226
1227 /**
1228 * ## Creating and Destroying Nodes
1229 */
1230
1231 /** Creates a new node of type 'type'. Note that the node may have
1232 * other required properties, which it is the caller's responsibility
1233 * to assign.
1234 */
1235 CMARK_EXPORT cmark_node *cmark_node_new(cmark_node_type type);
1236
1237 /** Same as `cmark_node_new`, but explicitly listing the memory
1238 * allocator used to allocate the node. Note: be sure to use the same
1239 * allocator for every node in a tree, or bad things can happen.
1240 */
1241 CMARK_EXPORT cmark_node *cmark_node_new_with_mem(cmark_node_type type,
1242 cmark_mem *mem);
1243
1244 /** Frees the memory allocated for a node and any children.
1245 */
1246 CMARK_EXPORT void cmark_node_free(cmark_node *node);
1247
1248 /**
1249 * ## Tree Traversal
1250 */
1251
1252 /** Returns the next node in the sequence after 'node', or NULL if
1253 * there is none.
1254 */
1255 CMARK_EXPORT cmark_node *cmark_node_next(cmark_node *node);
1256
1257 /** Returns the previous node in the sequence after 'node', or NULL if
1258 * there is none.
1259 */
1260 CMARK_EXPORT cmark_node *cmark_node_previous(cmark_node *node);
1261
1262 /** Returns the parent of 'node', or NULL if there is none.
1263 */
1264 CMARK_EXPORT cmark_node *cmark_node_parent(cmark_node *node);
1265
1266 /** Returns the first child of 'node', or NULL if 'node' has no children.
1267 */
1268 CMARK_EXPORT cmark_node *cmark_node_first_child(cmark_node *node);
1269
1270 /** Returns the last child of 'node', or NULL if 'node' has no children.
1271 */
1272 CMARK_EXPORT cmark_node *cmark_node_last_child(cmark_node *node);
1273
1274 /**
1275 * ## Iterator
1276 *
1277 * An iterator will walk through a tree of nodes, starting from a root
1278 * node, returning one node at a time, together with information about
1279 * whether the node is being entered or exited. The iterator will
1280 * first descend to a child node, if there is one. When there is no
1281 * child, the iterator will go to the next sibling. When there is no
1282 * next sibling, the iterator will return to the parent (but with
1283 * a 'cmark_event_type' of `CMARK_EVENT_EXIT`). The iterator will
1284 * return `CMARK_EVENT_DONE` when it reaches the root node again.
1285 * One natural application is an HTML renderer, where an `ENTER` event
1286 * outputs an open tag and an `EXIT` event outputs a close tag.
1287 * An iterator might also be used to transform an AST in some systematic
1288 * way, for example, turning all level-3 headings into regular paragraphs.
1289 *
1290 * void
1291 * usage_example(cmark_node *root) {
1292 * cmark_event_type ev_type;
1293 * cmark_iter *iter = cmark_iter_new(root);
1294 *
1295 * while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
1296 * cmark_node *cur = cmark_iter_get_node(iter);
1297 * // Do something with `cur` and `ev_type`
1298 * }
1299 *
1300 * cmark_iter_free(iter);
1301 * }
1302 *
1303 * Iterators will never return `EXIT` events for leaf nodes, which are nodes
1304 * of type:
1305 *
1306 * * CMARK_NODE_HTML_BLOCK
1307 * * CMARK_NODE_THEMATIC_BREAK
1308 * * CMARK_NODE_CODE_BLOCK
1309 * * CMARK_NODE_TEXT
1310 * * CMARK_NODE_SOFTBREAK
1311 * * CMARK_NODE_LINEBREAK
1312 * * CMARK_NODE_CODE
1313 * * CMARK_NODE_HTML_INLINE
1314 *
1315 * Nodes must only be modified after an `EXIT` event, or an `ENTER` event for
1316 * leaf nodes.
1317 */
1318
1319 typedef enum {
1320 CMARK_EVENT_NONE,
1321 CMARK_EVENT_DONE,
1322 CMARK_EVENT_ENTER,
1323 CMARK_EVENT_EXIT
1324 } cmark_event_type;
1325
1326 /** Creates a new iterator starting at 'root'. The current node and event
1327 * type are undefined until 'cmark_iter_next' is called for the first time.
1328 * The memory allocated for the iterator should be released using
1329 * 'cmark_iter_free' when it is no longer needed.
1330 */
1331 CMARK_EXPORT
1332 cmark_iter *cmark_iter_new(cmark_node *root);
1333
1334 /** Frees the memory allocated for an iterator.
1335 */
1336 CMARK_EXPORT
1337 void cmark_iter_free(cmark_iter *iter);
1338
1339 /** Advances to the next node and returns the event type (`CMARK_EVENT_ENTER`,
1340 * `CMARK_EVENT_EXIT` or `CMARK_EVENT_DONE`).
1341 */
1342 CMARK_EXPORT
1343 cmark_event_type cmark_iter_next(cmark_iter *iter);
1344
1345 /** Returns the current node.
1346 */
1347 CMARK_EXPORT
1348 cmark_node *cmark_iter_get_node(cmark_iter *iter);
1349
1350 /** Returns the current event type.
1351 */
1352 CMARK_EXPORT
1353 cmark_event_type cmark_iter_get_event_type(cmark_iter *iter);
1354
1355 /** Returns the root node.
1356 */
1357 CMARK_EXPORT
1358 cmark_node *cmark_iter_get_root(cmark_iter *iter);
1359
1360 /** Resets the iterator so that the current node is 'current' and
1361 * the event type is 'event_type'. The new current node must be a
1362 * descendant of the root node or the root node itself.
1363 */
1364 CMARK_EXPORT
1365 void cmark_iter_reset(cmark_iter *iter, cmark_node *current,
1366 cmark_event_type event_type);
1367
1368 /**
1369 * ## Accessors
1370 */
1371
1372 /** Returns the user data of 'node'.
1373 */
1374 CMARK_EXPORT void *cmark_node_get_user_data(cmark_node *node);
1375
1376 /** Sets arbitrary user data for 'node'. Returns 1 on success,
1377 * 0 on failure.
1378 */
1379 CMARK_EXPORT int cmark_node_set_user_data(cmark_node *node, void *user_data);
1380
1381 /** Returns the type of 'node', or `CMARK_NODE_NONE` on error.
1382 */
1383 CMARK_EXPORT cmark_node_type cmark_node_get_type(cmark_node *node);
1384
1385 /** Like 'cmark_node_get_type', but returns a string representation
1386 of the type, or `"<unknown>"`.
1387 */
1388 CMARK_EXPORT
1389 const char *cmark_node_get_type_string(cmark_node *node);
1390
1391 /** Returns the string contents of 'node', or an empty
1392 string if none is set.
1393 */
1394 CMARK_EXPORT const char *cmark_node_get_literal(cmark_node *node);
1395
1396 /** Sets the string contents of 'node'. Returns 1 on success,
1397 * 0 on failure.
1398 */
1399 CMARK_EXPORT int cmark_node_set_literal(cmark_node *node, const char *content);
1400
1401 /** Returns the heading level of 'node', or 0 if 'node' is not a heading.
1402 */
1403 CMARK_EXPORT int cmark_node_get_heading_level(cmark_node *node);
1404
1405 /* For backwards compatibility */
1406 #define cmark_node_get_header_level cmark_node_get_heading_level
1407 #define cmark_node_set_header_level cmark_node_set_heading_level
1408
1409 /** Sets the heading level of 'node', returning 1 on success and 0 on error.
1410 */
1411 CMARK_EXPORT int cmark_node_set_heading_level(cmark_node *node, int level);
1412
1413 /** Returns the list type of 'node', or `CMARK_NO_LIST` if 'node'
1414 * is not a list.
1415 */
1416 CMARK_EXPORT cmark_list_type cmark_node_get_list_type(cmark_node *node);
1417
1418 /** Sets the list type of 'node', returning 1 on success and 0 on error.
1419 */
1420 CMARK_EXPORT int cmark_node_set_list_type(cmark_node *node,
1421 cmark_list_type type);
1422
1423 /** Returns the list delimiter type of 'node', or `CMARK_NO_DELIM` if 'node'
1424 * is not a list.
1425 */
1426 CMARK_EXPORT cmark_delim_type cmark_node_get_list_delim(cmark_node *node);
1427
1428 /** Sets the list delimiter type of 'node', returning 1 on success and 0
1429 * on error.
1430 */
1431 CMARK_EXPORT int cmark_node_set_list_delim(cmark_node *node,
1432 cmark_delim_type delim);
1433
1434 /** Returns starting number of 'node', if it is an ordered list, otherwise 0.
1435 */
1436 CMARK_EXPORT int cmark_node_get_list_start(cmark_node *node);
1437
1438 /** Sets starting number of 'node', if it is an ordered list. Returns 1
1439 * on success, 0 on failure.
1440 */
1441 CMARK_EXPORT int cmark_node_set_list_start(cmark_node *node, int start);
1442
1443 /** Returns 1 if 'node' is a tight list, 0 otherwise.
1444 */
1445 CMARK_EXPORT int cmark_node_get_list_tight(cmark_node *node);
1446
1447 /** Sets the "tightness" of a list. Returns 1 on success, 0 on failure.
1448 */
1449 CMARK_EXPORT int cmark_node_set_list_tight(cmark_node *node, int tight);
1450
1451 /** Returns the info string from a fenced code block.
1452 */
1453 CMARK_EXPORT const char *cmark_node_get_fence_info(cmark_node *node);
1454
1455 /** Sets the info string in a fenced code block, returning 1 on
1456 * success and 0 on failure.
1457 */
1458 CMARK_EXPORT int cmark_node_set_fence_info(cmark_node *node, const char *info);
1459
1460 /** Returns the URL of a link or image 'node', or an empty string
1461 if no URL is set.
1462 */
1463 CMARK_EXPORT const char *cmark_node_get_url(cmark_node *node);
1464
1465 /** Sets the URL of a link or image 'node'. Returns 1 on success,
1466 * 0 on failure.
1467 */
1468 CMARK_EXPORT int cmark_node_set_url(cmark_node *node, const char *url);
1469
1470 /** Returns the title of a link or image 'node', or an empty
1471 string if no title is set.
1472 */
1473 CMARK_EXPORT const char *cmark_node_get_title(cmark_node *node);
1474
1475 /** Sets the title of a link or image 'node'. Returns 1 on success,
1476 * 0 on failure.
1477 */
1478 CMARK_EXPORT int cmark_node_set_title(cmark_node *node, const char *title);
1479
1480 /** Returns the literal "on enter" text for a custom 'node', or
1481 an empty string if no on_enter is set.
1482 */
1483 CMARK_EXPORT const char *cmark_node_get_on_enter(cmark_node *node);
1484
1485 /** Sets the literal text to render "on enter" for a custom 'node'.
1486 Any children of the node will be rendered after this text.
1487 Returns 1 on success 0 on failure.
1488 */
1489 CMARK_EXPORT int cmark_node_set_on_enter(cmark_node *node,
1490 const char *on_enter);
1491
1492 /** Returns the literal "on exit" text for a custom 'node', or
1493 an empty string if no on_exit is set.
1494 */
1495 CMARK_EXPORT const char *cmark_node_get_on_exit(cmark_node *node);
1496
1497 /** Sets the literal text to render "on exit" for a custom 'node'.
1498 Any children of the node will be rendered before this text.
1499 Returns 1 on success 0 on failure.
1500 */
1501 CMARK_EXPORT int cmark_node_set_on_exit(cmark_node *node, const char *on_exit);
1502
1503 /** Returns the line on which 'node' begins.
1504 */
1505 CMARK_EXPORT int cmark_node_get_start_line(cmark_node *node);
1506
1507 /** Returns the column at which 'node' begins.
1508 */
1509 CMARK_EXPORT int cmark_node_get_start_column(cmark_node *node);
1510
1511 /** Returns the line on which 'node' ends.
1512 */
1513 CMARK_EXPORT int cmark_node_get_end_line(cmark_node *node);
1514
1515 /** Returns the column at which 'node' ends.
1516 */
1517 CMARK_EXPORT int cmark_node_get_end_column(cmark_node *node);
1518
1519 /**
1520 * ## Tree Manipulation
1521 */
1522
1523 /** Unlinks a 'node', removing it from the tree, but not freeing its
1524 * memory. (Use 'cmark_node_free' for that.)
1525 */
1526 CMARK_EXPORT void cmark_node_unlink(cmark_node *node);
1527
1528 /** Inserts 'sibling' before 'node'. Returns 1 on success, 0 on failure.
1529 */
1530 CMARK_EXPORT int cmark_node_insert_before(cmark_node *node,
1531 cmark_node *sibling);
1532
1533 /** Inserts 'sibling' after 'node'. Returns 1 on success, 0 on failure.
1534 */
1535 CMARK_EXPORT int cmark_node_insert_after(cmark_node *node, cmark_node *sibling);
1536
1537 /** Replaces 'oldnode' with 'newnode' and unlinks 'oldnode' (but does
1538 * not free its memory).
1539 * Returns 1 on success, 0 on failure.
1540 */
1541 CMARK_EXPORT int cmark_node_replace(cmark_node *oldnode, cmark_node *newnode);
1542
1543 /** Adds 'child' to the beginning of the children of 'node'.
1544 * Returns 1 on success, 0 on failure.
1545 */
1546 CMARK_EXPORT int cmark_node_prepend_child(cmark_node *node, cmark_node *child);
1547
1548 /** Adds 'child' to the end of the children of 'node'.
1549 * Returns 1 on success, 0 on failure.
1550 */
1551 CMARK_EXPORT int cmark_node_append_child(cmark_node *node, cmark_node *child);
1552
1553 /** Consolidates adjacent text nodes.
1554 */
1555 CMARK_EXPORT void cmark_consolidate_text_nodes(cmark_node *root);
1556
1557 /**
1558 * ## Parsing
1559 *
1560 * Simple interface:
1561 *
1562 * cmark_node *document = cmark_parse_document("Hello *world*", 13,
1563 * CMARK_OPT_DEFAULT);
1564 *
1565 * Streaming interface:
1566 *
1567 * cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT);
1568 * FILE *fp = fopen("myfile.md", "rb");
1569 * while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) {
1570 * cmark_parser_feed(parser, buffer, bytes);
1571 * if (bytes < sizeof(buffer)) {
1572 * break;
1573 * }
1574 * }
1575 * document = cmark_parser_finish(parser);
1576 * cmark_parser_free(parser);
1577 */
1578
1579 /** Creates a new parser object.
1580 */
1581 CMARK_EXPORT
1582 cmark_parser *cmark_parser_new(int options);
1583
1584 /** Creates a new parser object with the given memory allocator
1585 */
1586 CMARK_EXPORT
1587 cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem);
1588
1589 /** Frees memory allocated for a parser object.
1590 */
1591 CMARK_EXPORT
1592 void cmark_parser_free(cmark_parser *parser);
1593
1594 /** Feeds a string of length 'len' to 'parser'.
1595 */
1596 CMARK_EXPORT
1597 void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len);
1598
1599 /** Finish parsing and return a pointer to a tree of nodes.
1600 */
1601 CMARK_EXPORT
1602 cmark_node *cmark_parser_finish(cmark_parser *parser);
1603
1604 /** Parse a CommonMark document in 'buffer' of length 'len'.
1605 * Returns a pointer to a tree of nodes. The memory allocated for
1606 * the node tree should be released using 'cmark_node_free'
1607 * when it is no longer needed.
1608 */
1609 CMARK_EXPORT
1610 cmark_node *cmark_parse_document(const char *buffer, size_t len, int options);
1611
1612 /** Parse a CommonMark document in file 'f', returning a pointer to
1613 * a tree of nodes. The memory allocated for the node tree should be
1614 * released using 'cmark_node_free' when it is no longer needed.
1615 */
1616 CMARK_EXPORT
1617 cmark_node *cmark_parse_file(FILE *f, int options);
1618
1619 /**
1620 * ## Rendering
1621 */
1622
1623 /** Render a 'node' tree as XML. It is the caller's responsibility
1624 * to free the returned buffer.
1625 */
1626 CMARK_EXPORT
1627 char *cmark_render_xml(cmark_node *root, int options);
1628
1629 /** Render a 'node' tree as an HTML fragment. It is up to the user
1630 * to add an appropriate header and footer. It is the caller's
1631 * responsibility to free the returned buffer.
1632 */
1633 CMARK_EXPORT
1634 char *cmark_render_html(cmark_node *root, int options);
1635
1636 /** Render a 'node' tree as a groff man page, without the header.
1637 * It is the caller's responsibility to free the returned buffer.
1638 */
1639 CMARK_EXPORT
1640 char *cmark_render_man(cmark_node *root, int options, int width);
1641
1642 /** Render a 'node' tree as a commonmark document.
1643 * It is the caller's responsibility to free the returned buffer.
1644 */
1645 CMARK_EXPORT
1646 char *cmark_render_commonmark(cmark_node *root, int options, int width);
1647
1648 /** Render a 'node' tree as a LaTeX document.
1649 * It is the caller's responsibility to free the returned buffer.
1650 */
1651 CMARK_EXPORT
1652 char *cmark_render_latex(cmark_node *root, int options, int width);
1653
1654 /**
1655 * ## Options
1656 */
1657
1658 /** Default options.
1659 */
1660 #define CMARK_OPT_DEFAULT 0
1661
1662 /**
1663 * ### Options affecting rendering
1664 */
1665
1666 /** Include a `data-sourcepos` attribute on all block elements.
1667 */
1668 #define CMARK_OPT_SOURCEPOS (1 << 1)
1669
1670 /** Render `softbreak` elements as hard line breaks.
1671 */
1672 #define CMARK_OPT_HARDBREAKS (1 << 2)
1673
1674 /** Suppress raw HTML and unsafe links (`javascript:`, `vbscript:`,
1675 * `file:`, and `data:`, except for `image/png`, `image/gif`,
1676 * `image/jpeg`, or `image/webp` mime types). Raw HTML is replaced
1677 * by a placeholder HTML comment. Unsafe links are replaced by
1678 * empty strings.
1679 */
1680 #define CMARK_OPT_SAFE (1 << 3)
1681
1682 /** Render `softbreak` elements as spaces.
1683 */
1684 #define CMARK_OPT_NOBREAKS (1 << 4)
1685
1686 /**
1687 * ### Options affecting parsing
1688 */
1689
1690 /** Normalize tree by consolidating adjacent text nodes.
1691 */
1692 #define CMARK_OPT_NORMALIZE (1 << 8)
1693
1694 /** Validate UTF-8 in the input before parsing, replacing illegal
1695 * sequences with the replacement character U+FFFD.
1696 */
1697 #define CMARK_OPT_VALIDATE_UTF8 (1 << 9)
1698
1699 /** Convert straight quotes to curly, --- to em dashes, -- to en dashes.
1700 */
1701 #define CMARK_OPT_SMART (1 << 10)
1702
1703 /**
1704 * ## Version information
1705 */
1706
1707 /** The library version as integer for runtime checks. Also available as
1708 * macro CMARK_VERSION for compile time checks.
1709 *
1710 * * Bits 16-23 contain the major version.
1711 * * Bits 8-15 contain the minor version.
1712 * * Bits 0-7 contain the patchlevel.
1713 *
1714 * In hexadecimal format, the number 0x010203 represents version 1.2.3.
1715 */
1716 CMARK_EXPORT
1717 int cmark_version(void);
1718
1719 /** The library version string for runtime checks. Also available as
1720 * macro CMARK_VERSION_STRING for compile time checks.
1721 */
1722 CMARK_EXPORT
1723 const char *cmark_version_string(void);
1724
1725 /** # AUTHORS
1726 *
1727 * John MacFarlane, Vicent Marti, Kārlis Gaņģis, Nick Wellnhofer.
1728 */
1729
1730 #ifndef CMARK_NO_SHORT_NAMES
1731 #define NODE_DOCUMENT CMARK_NODE_DOCUMENT
1732 #define NODE_BLOCK_QUOTE CMARK_NODE_BLOCK_QUOTE
1733 #define NODE_LIST CMARK_NODE_LIST
1734 #define NODE_ITEM CMARK_NODE_ITEM
1735 #define NODE_CODE_BLOCK CMARK_NODE_CODE_BLOCK
1736 #define NODE_HTML_BLOCK CMARK_NODE_HTML_BLOCK
1737 #define NODE_CUSTOM_BLOCK CMARK_NODE_CUSTOM_BLOCK
1738 #define NODE_PARAGRAPH CMARK_NODE_PARAGRAPH
1739 #define NODE_HEADING CMARK_NODE_HEADING
1740 #define NODE_HEADER CMARK_NODE_HEADER
1741 #define NODE_THEMATIC_BREAK CMARK_NODE_THEMATIC_BREAK
1742 #define NODE_HRULE CMARK_NODE_HRULE
1743 #define NODE_TEXT CMARK_NODE_TEXT
1744 #define NODE_SOFTBREAK CMARK_NODE_SOFTBREAK
1745 #define NODE_LINEBREAK CMARK_NODE_LINEBREAK
1746 #define NODE_CODE CMARK_NODE_CODE
1747 #define NODE_HTML_INLINE CMARK_NODE_HTML_INLINE
1748 #define NODE_CUSTOM_INLINE CMARK_NODE_CUSTOM_INLINE
1749 #define NODE_EMPH CMARK_NODE_EMPH
1750 #define NODE_STRONG CMARK_NODE_STRONG
1751 #define NODE_LINK CMARK_NODE_LINK
1752 #define NODE_IMAGE CMARK_NODE_IMAGE
1753 #define BULLET_LIST CMARK_BULLET_LIST
1754 #define ORDERED_LIST CMARK_ORDERED_LIST
1755 #define PERIOD_DELIM CMARK_PERIOD_DELIM
1756 #define PAREN_DELIM CMARK_PAREN_DELIM
1757 #endif
1758
1759 #ifdef __cplusplus
1760 }
1761 #endif
1762
1763 #endif
1764
1765 #ifndef CMARK_EXPORT_H
1766 #define CMARK_EXPORT_H
1767
1768 #ifdef CMARK_STATIC_DEFINE
1769 # define CMARK_EXPORT
1770 # define CMARK_NO_EXPORT
1771 #else
1772 # ifndef CMARK_EXPORT
1773 # ifdef libcmark_EXPORTS
1774 /* We are building this library */
1775 # define CMARK_EXPORT __attribute__((visibility("default")))
1776 # else
1777 /* We are using this library */
1778 # define CMARK_EXPORT __attribute__((visibility("default")))
1779 # endif
1780 # endif
1781
1782 # ifndef CMARK_NO_EXPORT
1783 # define CMARK_NO_EXPORT __attribute__((visibility("hidden")))
1784 # endif
1785 #endif
1786
1787 #ifndef CMARK_DEPRECATED
1788 # define CMARK_DEPRECATED __attribute__ ((__deprecated__))
1789 #endif
1790
1791 #ifndef CMARK_DEPRECATED_EXPORT
1792 # define CMARK_DEPRECATED_EXPORT CMARK_EXPORT CMARK_DEPRECATED
1793 #endif
1794
1795 #ifndef CMARK_DEPRECATED_NO_EXPORT
1796 # define CMARK_DEPRECATED_NO_EXPORT CMARK_NO_EXPORT CMARK_DEPRECATED
1797 #endif
1798
1799 #if 0 /* DEFINE_NO_DEPRECATED */
1800 # ifndef CMARK_NO_DEPRECATED
1801 # define CMARK_NO_DEPRECATED
1802 # endif
1803 #endif
1804
1805 #endif
1806 #ifndef CMARK_VERSION_H
1807 #define CMARK_VERSION_H
1808
1809 #define CMARK_VERSION ((0 << 16) | (27 << 8) | 1)
1810 #define CMARK_VERSION_STRING "0.27.1"
1811
1812 #endif
1813
1814
1815 #ifndef CMARK_AST_H
1816 #define CMARK_AST_H
1817
1818 #include <stdio.h>
1819
1820 #ifdef __cplusplus
1821 extern "C" {
1822 #endif
1823
1824 #define MAX_LINK_LABEL_LENGTH 1000
1825
1826 struct cmark_parser {
1827 struct cmark_mem *mem;
1828 struct cmark_reference_map *refmap;
1829 struct cmark_node *root;
1830 struct cmark_node *current;
1831 int line_number;
1832 bufsize_t offset;
1833 bufsize_t column;
1834 bufsize_t first_nonspace;
1835 bufsize_t first_nonspace_column;
1836 int indent;
1837 bool blank;
1838 bool partially_consumed_tab;
1839 cmark_strbuf curline;
1840 bufsize_t last_line_length;
1841 cmark_strbuf linebuf;
1842 int options;
1843 bool last_buffer_ended_with_cr;
1844 };
1845
1846 #ifdef __cplusplus
1847 }
1848 #endif
1849
1850 #endif
1851
1852
1853 #ifndef CMARK_REFERENCES_H
1854 #define CMARK_REFERENCES_H
1855
1856
1857 #ifdef __cplusplus
1858 extern "C" {
1859 #endif
1860
1861 #define REFMAP_SIZE 16
1862
1863 struct cmark_reference {
1864 struct cmark_reference *next;
1865 unsigned char *label;
1866 cmark_chunk url;
1867 cmark_chunk title;
1868 unsigned int hash;
1869 };
1870
1871 typedef struct cmark_reference cmark_reference;
1872
1873 struct cmark_reference_map {
1874 cmark_mem *mem;
1875 cmark_reference *table[REFMAP_SIZE];
1876 };
1877
1878 typedef struct cmark_reference_map cmark_reference_map;
1879
1880 cmark_reference_map *cmark_reference_map_new(cmark_mem *mem);
1881 void cmark_reference_map_free(cmark_reference_map *map);
1882 cmark_reference *cmark_reference_lookup(cmark_reference_map *map,
1883 cmark_chunk *label);
1884 extern void cmark_reference_create(cmark_reference_map *map, cmark_chunk *label,
1885 cmark_chunk *url, cmark_chunk *title);
1886
1887 #ifdef __cplusplus
1888 }
1889 #endif
1890
1891 #endif
1892
1893 #ifndef CMARK_UTF8_H
1894 #define CMARK_UTF8_H
1895
1896 #include <stdint.h>
1897
1898 #ifdef __cplusplus
1899 extern "C" {
1900 #endif
1901
1902 void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str,
1903 bufsize_t len);
1904 void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf);
1905 int cmark_utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst);
1906 void cmark_utf8proc_check(cmark_strbuf *dest, const uint8_t *line,
1907 bufsize_t size);
1908 int cmark_utf8proc_is_space(int32_t uc);
1909 int cmark_utf8proc_is_punctuation(int32_t uc);
1910
1911 #ifdef __cplusplus
1912 }
1913 #endif
1914
1915 #endif
1916
1917
1918 #ifndef CMARK_INLINES_H
1919 #define CMARK_INLINES_H
1920
1921 #ifdef __cplusplus
1922 extern "C" {
1923 #endif
1924
1925 cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url);
1926 cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title);
1927
1928 void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent,
1929 cmark_reference_map *refmap, int options);
1930
1931 bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input,
1932 cmark_reference_map *refmap);
1933
1934 #ifdef __cplusplus
1935 }
1936 #endif
1937
1938 #endif
1939
1940
1941 #ifdef __cplusplus
1942 extern "C" {
1943 #endif
1944
1945 bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c,
1946 bufsize_t offset);
1947 bufsize_t _scan_scheme(const unsigned char *p);
1948 bufsize_t _scan_autolink_uri(const unsigned char *p);
1949 bufsize_t _scan_autolink_email(const unsigned char *p);
1950 bufsize_t _scan_html_tag(const unsigned char *p);
1951 bufsize_t _scan_html_block_start(const unsigned char *p);
1952 bufsize_t _scan_html_block_start_7(const unsigned char *p);
1953 bufsize_t _scan_html_block_end_1(const unsigned char *p);
1954 bufsize_t _scan_html_block_end_2(const unsigned char *p);
1955 bufsize_t _scan_html_block_end_3(const unsigned char *p);
1956 bufsize_t _scan_html_block_end_4(const unsigned char *p);
1957 bufsize_t _scan_html_block_end_5(const unsigned char *p);
1958 bufsize_t _scan_link_title(const unsigned char *p);
1959 bufsize_t _scan_spacechars(const unsigned char *p);
1960 bufsize_t _scan_atx_heading_start(const unsigned char *p);
1961 bufsize_t _scan_setext_heading_line(const unsigned char *p);
1962 bufsize_t _scan_thematic_break(const unsigned char *p);
1963 bufsize_t _scan_open_code_fence(const unsigned char *p);
1964 bufsize_t _scan_close_code_fence(const unsigned char *p);
1965 bufsize_t _scan_entity(const unsigned char *p);
1966 bufsize_t _scan_dangerous_url(const unsigned char *p);
1967
1968 #define scan_scheme(c, n) _scan_at(&_scan_scheme, c, n)
1969 #define scan_autolink_uri(c, n) _scan_at(&_scan_autolink_uri, c, n)
1970 #define scan_autolink_email(c, n) _scan_at(&_scan_autolink_email, c, n)
1971 #define scan_html_tag(c, n) _scan_at(&_scan_html_tag, c, n)
1972 #define scan_html_block_start(c, n) _scan_at(&_scan_html_block_start, c, n)
1973 #define scan_html_block_start_7(c, n) _scan_at(&_scan_html_block_start_7, c, n)
1974 #define scan_html_block_end_1(c, n) _scan_at(&_scan_html_block_end_1, c, n)
1975 #define scan_html_block_end_2(c, n) _scan_at(&_scan_html_block_end_2, c, n)
1976 #define scan_html_block_end_3(c, n) _scan_at(&_scan_html_block_end_3, c, n)
1977 #define scan_html_block_end_4(c, n) _scan_at(&_scan_html_block_end_4, c, n)
1978 #define scan_html_block_end_5(c, n) _scan_at(&_scan_html_block_end_5, c, n)
1979 #define scan_link_title(c, n) _scan_at(&_scan_link_title, c, n)
1980 #define scan_spacechars(c, n) _scan_at(&_scan_spacechars, c, n)
1981 #define scan_atx_heading_start(c, n) _scan_at(&_scan_atx_heading_start, c, n)
1982 #define scan_setext_heading_line(c, n) \
1983 _scan_at(&_scan_setext_heading_line, c, n)
1984 #define scan_thematic_break(c, n) _scan_at(&_scan_thematic_break, c, n)
1985 #define scan_open_code_fence(c, n) _scan_at(&_scan_open_code_fence, c, n)
1986 #define scan_close_code_fence(c, n) _scan_at(&_scan_close_code_fence, c, n)
1987 #define scan_entity(c, n) _scan_at(&_scan_entity, c, n)
1988 #define scan_dangerous_url(c, n) _scan_at(&_scan_dangerous_url, c, n)
1989
1990 #ifdef __cplusplus
1991 }
1992 #endif
1993
1994
1995 #ifndef CMARK_ITERATOR_H
1996 #define CMARK_ITERATOR_H
1997
1998 #ifdef __cplusplus
1999 extern "C" {
2000 #endif
2001
2002
2003 typedef struct {
2004 cmark_event_type ev_type;
2005 cmark_node *node;
2006 } cmark_iter_state;
2007
2008 struct cmark_iter {
2009 cmark_mem *mem;
2010 cmark_node *root;
2011 cmark_iter_state cur;
2012 cmark_iter_state next;
2013 };
2014
2015 #ifdef __cplusplus
2016 }
2017 #endif
2018
2019 #endif
--- a/src/entities.inc
+++ b/src/entities.inc
@@ -0,0 +1,2138 @@
1
+/* Autogenerated by tools/make_headers_inc.py */
2
+
3
+struct cmark_entity_node {
4
+ unsigned char *entity;
5
+ unsigned char bytes[8];
6
+};
7
+
8
+#define CMARK_ENTITY_MIN_LENGTH 2
9
+#define CMARK_ENTITY_MAX_LENGTH 32
10
+#define CMARK_NUM_ENTITIES 2125
11
+
12
+static const struct cmark_entity_node cmark_entities[] = {
13
+{(unsigned char*)"AElig", {195, 134, 0}},
14
+{(unsigned char*)"AMP", {38, 0}},
15
+{(unsigned char*)"Aacute", {195, 129, 0}},
16
+{(unsigned char*)"Abreve", {196, 130, 0}},
17
+{(unsigned char*)"Acirc", {195, 130, 0}},
18
+{(unsigned char*)"Acy", {208, 144, 0}},
19
+{(unsigned char*)"Afr", {240, 157, 148, 132, 0}},
20
+{(unsigned char*)"Agrave", {195, 128, 0}},
21
+{(unsigned char*)"Alpha", {206, 145, 0}},
22
+{(unsigned char*)"Amacr", {196, 128, 0}},
23
+{(unsigned char*)"And", {226, 169, 147, 0}},
24
+{(unsigned char*)"Aogon", {196, 132, 0}},
25
+{(unsigned char*)"Aopf", {240, 157, 148, 184, 0}},
26
+{(unsigned char*)"ApplyFunction", {226, 129, 161, 0}},
27
+{(unsigned char*)"Aring", {195, 133, 0}},
28
+{(unsigned char*)"Ascr", {240, 157, 146, 156, 0}},
29
+{(unsigned char*)"Assign", {226, 137, 148, 0}},
30
+{(unsigned char*)"Atilde", {195, 131, 0}},
31
+{(unsigned char*)"Auml", {195, 132, 0}},
32
+{(unsigned char*)"Backslash", {226, 136, 150, 0}},
33
+{(unsigned char*)"Barv", {226, 171, 167, 0}},
34
+{(unsigned char*)"Barwed", {226, 140, 134, 0}},
35
+{(unsigned char*)"Bcy", {208, 145, 0}},
36
+{(unsigned char*)"Because", {226, 136, 181, 0}},
37
+{(unsigned char*)"Bernoullis", {226, 132, 172, 0}},
38
+{(unsigned char*)"Beta", {206, 146, 0}},
39
+{(unsigned char*)"Bfr", {240, 157, 148, 133, 0}},
40
+{(unsigned char*)"Bopf", {240, 157, 148, 185, 0}},
41
+{(unsigned char*)"Breve", {203, 152, 0}},
42
+{(unsigned char*)"Bscr", {226, 132, 172, 0}},
43
+{(unsigned char*)"Bumpeq", {226, 137, 142, 0}},
44
+{(unsigned char*)"CHcy", {208, 167, 0}},
45
+{(unsigned char*)"COPY", {194, 169, 0}},
46
+{(unsigned char*)"Cacute", {196, 134, 0}},
47
+{(unsigned char*)"Cap", {226, 139, 146, 0}},
48
+{(unsigned char*)"CapitalDifferentialD", {226, 133, 133, 0}},
49
+{(unsigned char*)"Cayleys", {226, 132, 173, 0}},
50
+{(unsigned char*)"Ccaron", {196, 140, 0}},
51
+{(unsigned char*)"Ccedil", {195, 135, 0}},
52
+{(unsigned char*)"Ccirc", {196, 136, 0}},
53
+{(unsigned char*)"Cconint", {226, 136, 176, 0}},
54
+{(unsigned char*)"Cdot", {196, 138, 0}},
55
+{(unsigned char*)"Cedilla", {194, 184, 0}},
56
+{(unsigned char*)"CenterDot", {194, 183, 0}},
57
+{(unsigned char*)"Cfr", {226, 132, 173, 0}},
58
+{(unsigned char*)"Chi", {206, 167, 0}},
59
+{(unsigned char*)"CircleDot", {226, 138, 153, 0}},
60
+{(unsigned char*)"CircleMinus", {226, 138, 150, 0}},
61
+{(unsigned char*)"CirclePlus", {226, 138, 149, 0}},
62
+{(unsigned char*)"CircleTimes", {226, 138, 151, 0}},
63
+{(unsigned char*)"ClockwiseContourIntegral", {226, 136, 178, 0}},
64
+{(unsigned char*)"CloseCurlyDoubleQuote", {226, 128, 157, 0}},
65
+{(unsigned char*)"CloseCurlyQuote", {226, 128, 153, 0}},
66
+{(unsigned char*)"Colon", {226, 136, 183, 0}},
67
+{(unsigned char*)"Colone", {226, 169, 180, 0}},
68
+{(unsigned char*)"Congruent", {226, 137, 161, 0}},
69
+{(unsigned char*)"Conint", {226, 136, 175, 0}},
70
+{(unsigned char*)"ContourIntegral", {226, 136, 174, 0}},
71
+{(unsigned char*)"Copf", {226, 132, 130, 0}},
72
+{(unsigned char*)"Coproduct", {226, 136, 144, 0}},
73
+{(unsigned char*)"CounterClockwiseContourIntegral", {226, 136, 179, 0}},
74
+{(unsigned char*)"Cross", {226, 168, 175, 0}},
75
+{(unsigned char*)"Cscr", {240, 157, 146, 158, 0}},
76
+{(unsigned char*)"Cup", {226, 139, 147, 0}},
77
+{(unsigned char*)"CupCap", {226, 137, 141, 0}},
78
+{(unsigned char*)"DD", {226, 133, 133, 0}},
79
+{(unsigned char*)"DDotrahd", {226, 164, 145, 0}},
80
+{(unsigned char*)"DJcy", {208, 130, 0}},
81
+{(unsigned char*)"DScy", {208, 133, 0}},
82
+{(unsigned char*)"DZcy", {208, 143, 0}},
83
+{(unsigned char*)"Dagger", {226, 128, 161, 0}},
84
+{(unsigned char*)"Darr", {226, 134, 161, 0}},
85
+{(unsigned char*)"Dashv", {226, 171, 164, 0}},
86
+{(unsigned char*)"Dcaron", {196, 142, 0}},
87
+{(unsigned char*)"Dcy", {208, 148, 0}},
88
+{(unsigned char*)"Del", {226, 136, 135, 0}},
89
+{(unsigned char*)"Delta", {206, 148, 0}},
90
+{(unsigned char*)"Dfr", {240, 157, 148, 135, 0}},
91
+{(unsigned char*)"DiacriticalAcute", {194, 180, 0}},
92
+{(unsigned char*)"DiacriticalDot", {203, 153, 0}},
93
+{(unsigned char*)"DiacriticalDoubleAcute", {203, 157, 0}},
94
+{(unsigned char*)"DiacriticalGrave", {96, 0}},
95
+{(unsigned char*)"DiacriticalTilde", {203, 156, 0}},
96
+{(unsigned char*)"Diamond", {226, 139, 132, 0}},
97
+{(unsigned char*)"DifferentialD", {226, 133, 134, 0}},
98
+{(unsigned char*)"Dopf", {240, 157, 148, 187, 0}},
99
+{(unsigned char*)"Dot", {194, 168, 0}},
100
+{(unsigned char*)"DotDot", {226, 131, 156, 0}},
101
+{(unsigned char*)"DotEqual", {226, 137, 144, 0}},
102
+{(unsigned char*)"DoubleContourIntegral", {226, 136, 175, 0}},
103
+{(unsigned char*)"DoubleDot", {194, 168, 0}},
104
+{(unsigned char*)"DoubleDownArrow", {226, 135, 147, 0}},
105
+{(unsigned char*)"DoubleLeftArrow", {226, 135, 144, 0}},
106
+{(unsigned char*)"DoubleLeftRightArrow", {226, 135, 148, 0}},
107
+{(unsigned char*)"DoubleLeftTee", {226, 171, 164, 0}},
108
+{(unsigned char*)"DoubleLongLeftArrow", {226, 159, 184, 0}},
109
+{(unsigned char*)"DoubleLongLeftRightArrow", {226, 159, 186, 0}},
110
+{(unsigned char*)"DoubleLongRightArrow", {226, 159, 185, 0}},
111
+{(unsigned char*)"DoubleRightArrow", {226, 135, 146, 0}},
112
+{(unsigned char*)"DoubleRightTee", {226, 138, 168, 0}},
113
+{(unsigned char*)"DoubleUpArrow", {226, 135, 145, 0}},
114
+{(unsigned char*)"DoubleUpDownArrow", {226, 135, 149, 0}},
115
+{(unsigned char*)"DoubleVerticalBar", {226, 136, 165, 0}},
116
+{(unsigned char*)"DownArrow", {226, 134, 147, 0}},
117
+{(unsigned char*)"DownArrowBar", {226, 164, 147, 0}},
118
+{(unsigned char*)"DownArrowUpArrow", {226, 135, 181, 0}},
119
+{(unsigned char*)"DownBreve", {204, 145, 0}},
120
+{(unsigned char*)"DownLeftRightVector", {226, 165, 144, 0}},
121
+{(unsigned char*)"DownLeftTeeVector", {226, 165, 158, 0}},
122
+{(unsigned char*)"DownLeftVector", {226, 134, 189, 0}},
123
+{(unsigned char*)"DownLeftVectorBar", {226, 165, 150, 0}},
124
+{(unsigned char*)"DownRightTeeVector", {226, 165, 159, 0}},
125
+{(unsigned char*)"DownRightVector", {226, 135, 129, 0}},
126
+{(unsigned char*)"DownRightVectorBar", {226, 165, 151, 0}},
127
+{(unsigned char*)"DownTee", {226, 138, 164, 0}},
128
+{(unsigned char*)"DownTeeArrow", {226, 134, 167, 0}},
129
+{(unsigned char*)"Downarrow", {226, 135, 147, 0}},
130
+{(unsigned char*)"Dscr", {240, 157, 146, 159, 0}},
131
+{(unsigned char*)"Dstrok", {196, 144, 0}},
132
+{(unsigned char*)"ENG", {197, 138, 0}},
133
+{(unsigned char*)"ETH", {195, 144, 0}},
134
+{(unsigned char*)"Eacute", {195, 137, 0}},
135
+{(unsigned char*)"Ecaron", {196, 154, 0}},
136
+{(unsigned char*)"Ecirc", {195, 138, 0}},
137
+{(unsigned char*)"Ecy", {208, 173, 0}},
138
+{(unsigned char*)"Edot", {196, 150, 0}},
139
+{(unsigned char*)"Efr", {240, 157, 148, 136, 0}},
140
+{(unsigned char*)"Egrave", {195, 136, 0}},
141
+{(unsigned char*)"Element", {226, 136, 136, 0}},
142
+{(unsigned char*)"Emacr", {196, 146, 0}},
143
+{(unsigned char*)"EmptySmallSquare", {226, 151, 187, 0}},
144
+{(unsigned char*)"EmptyVerySmallSquare", {226, 150, 171, 0}},
145
+{(unsigned char*)"Eogon", {196, 152, 0}},
146
+{(unsigned char*)"Eopf", {240, 157, 148, 188, 0}},
147
+{(unsigned char*)"Epsilon", {206, 149, 0}},
148
+{(unsigned char*)"Equal", {226, 169, 181, 0}},
149
+{(unsigned char*)"EqualTilde", {226, 137, 130, 0}},
150
+{(unsigned char*)"Equilibrium", {226, 135, 140, 0}},
151
+{(unsigned char*)"Escr", {226, 132, 176, 0}},
152
+{(unsigned char*)"Esim", {226, 169, 179, 0}},
153
+{(unsigned char*)"Eta", {206, 151, 0}},
154
+{(unsigned char*)"Euml", {195, 139, 0}},
155
+{(unsigned char*)"Exists", {226, 136, 131, 0}},
156
+{(unsigned char*)"ExponentialE", {226, 133, 135, 0}},
157
+{(unsigned char*)"Fcy", {208, 164, 0}},
158
+{(unsigned char*)"Ffr", {240, 157, 148, 137, 0}},
159
+{(unsigned char*)"FilledSmallSquare", {226, 151, 188, 0}},
160
+{(unsigned char*)"FilledVerySmallSquare", {226, 150, 170, 0}},
161
+{(unsigned char*)"Fopf", {240, 157, 148, 189, 0}},
162
+{(unsigned char*)"ForAll", {226, 136, 128, 0}},
163
+{(unsigned char*)"Fouriertrf", {226, 132, 177, 0}},
164
+{(unsigned char*)"Fscr", {226, 132, 177, 0}},
165
+{(unsigned char*)"GJcy", {208, 131, 0}},
166
+{(unsigned char*)"GT", {62, 0}},
167
+{(unsigned char*)"Gamma", {206, 147, 0}},
168
+{(unsigned char*)"Gammad", {207, 156, 0}},
169
+{(unsigned char*)"Gbreve", {196, 158, 0}},
170
+{(unsigned char*)"Gcedil", {196, 162, 0}},
171
+{(unsigned char*)"Gcirc", {196, 156, 0}},
172
+{(unsigned char*)"Gcy", {208, 147, 0}},
173
+{(unsigned char*)"Gdot", {196, 160, 0}},
174
+{(unsigned char*)"Gfr", {240, 157, 148, 138, 0}},
175
+{(unsigned char*)"Gg", {226, 139, 153, 0}},
176
+{(unsigned char*)"Gopf", {240, 157, 148, 190, 0}},
177
+{(unsigned char*)"GreaterEqual", {226, 137, 165, 0}},
178
+{(unsigned char*)"GreaterEqualLess", {226, 139, 155, 0}},
179
+{(unsigned char*)"GreaterFullEqual", {226, 137, 167, 0}},
180
+{(unsigned char*)"GreaterGreater", {226, 170, 162, 0}},
181
+{(unsigned char*)"GreaterLess", {226, 137, 183, 0}},
182
+{(unsigned char*)"GreaterSlantEqual", {226, 169, 190, 0}},
183
+{(unsigned char*)"GreaterTilde", {226, 137, 179, 0}},
184
+{(unsigned char*)"Gscr", {240, 157, 146, 162, 0}},
185
+{(unsigned char*)"Gt", {226, 137, 171, 0}},
186
+{(unsigned char*)"HARDcy", {208, 170, 0}},
187
+{(unsigned char*)"Hacek", {203, 135, 0}},
188
+{(unsigned char*)"Hat", {94, 0}},
189
+{(unsigned char*)"Hcirc", {196, 164, 0}},
190
+{(unsigned char*)"Hfr", {226, 132, 140, 0}},
191
+{(unsigned char*)"HilbertSpace", {226, 132, 139, 0}},
192
+{(unsigned char*)"Hopf", {226, 132, 141, 0}},
193
+{(unsigned char*)"HorizontalLine", {226, 148, 128, 0}},
194
+{(unsigned char*)"Hscr", {226, 132, 139, 0}},
195
+{(unsigned char*)"Hstrok", {196, 166, 0}},
196
+{(unsigned char*)"HumpDownHump", {226, 137, 142, 0}},
197
+{(unsigned char*)"HumpEqual", {226, 137, 143, 0}},
198
+{(unsigned char*)"IEcy", {208, 149, 0}},
199
+{(unsigned char*)"IJlig", {196, 178, 0}},
200
+{(unsigned char*)"IOcy", {208, 129, 0}},
201
+{(unsigned char*)"Iacute", {195, 141, 0}},
202
+{(unsigned char*)"Icirc", {195, 142, 0}},
203
+{(unsigned char*)"Icy", {208, 152, 0}},
204
+{(unsigned char*)"Idot", {196, 176, 0}},
205
+{(unsigned char*)"Ifr", {226, 132, 145, 0}},
206
+{(unsigned char*)"Igrave", {195, 140, 0}},
207
+{(unsigned char*)"Im", {226, 132, 145, 0}},
208
+{(unsigned char*)"Imacr", {196, 170, 0}},
209
+{(unsigned char*)"ImaginaryI", {226, 133, 136, 0}},
210
+{(unsigned char*)"Implies", {226, 135, 146, 0}},
211
+{(unsigned char*)"Int", {226, 136, 172, 0}},
212
+{(unsigned char*)"Integral", {226, 136, 171, 0}},
213
+{(unsigned char*)"Intersection", {226, 139, 130, 0}},
214
+{(unsigned char*)"InvisibleComma", {226, 129, 163, 0}},
215
+{(unsigned char*)"InvisibleTimes", {226, 129, 162, 0}},
216
+{(unsigned char*)"Iogon", {196, 174, 0}},
217
+{(unsigned char*)"Iopf", {240, 157, 149, 128, 0}},
218
+{(unsigned char*)"Iota", {206, 153, 0}},
219
+{(unsigned char*)"Iscr", {226, 132, 144, 0}},
220
+{(unsigned char*)"Itilde", {196, 168, 0}},
221
+{(unsigned char*)"Iukcy", {208, 134, 0}},
222
+{(unsigned char*)"Iuml", {195, 143, 0}},
223
+{(unsigned char*)"Jcirc", {196, 180, 0}},
224
+{(unsigned char*)"Jcy", {208, 153, 0}},
225
+{(unsigned char*)"Jfr", {240, 157, 148, 141, 0}},
226
+{(unsigned char*)"Jopf", {240, 157, 149, 129, 0}},
227
+{(unsigned char*)"Jscr", {240, 157, 146, 165, 0}},
228
+{(unsigned char*)"Jsercy", {208, 136, 0}},
229
+{(unsigned char*)"Jukcy", {208, 132, 0}},
230
+{(unsigned char*)"KHcy", {208, 165, 0}},
231
+{(unsigned char*)"KJcy", {208, 140, 0}},
232
+{(unsigned char*)"Kappa", {206, 154, 0}},
233
+{(unsigned char*)"Kcedil", {196, 182, 0}},
234
+{(unsigned char*)"Kcy", {208, 154, 0}},
235
+{(unsigned char*)"Kfr", {240, 157, 148, 142, 0}},
236
+{(unsigned char*)"Kopf", {240, 157, 149, 130, 0}},
237
+{(unsigned char*)"Kscr", {240, 157, 146, 166, 0}},
238
+{(unsigned char*)"LJcy", {208, 137, 0}},
239
+{(unsigned char*)"LT", {60, 0}},
240
+{(unsigned char*)"Lacute", {196, 185, 0}},
241
+{(unsigned char*)"Lambda", {206, 155, 0}},
242
+{(unsigned char*)"Lang", {226, 159, 170, 0}},
243
+{(unsigned char*)"Laplacetrf", {226, 132, 146, 0}},
244
+{(unsigned char*)"Larr", {226, 134, 158, 0}},
245
+{(unsigned char*)"Lcaron", {196, 189, 0}},
246
+{(unsigned char*)"Lcedil", {196, 187, 0}},
247
+{(unsigned char*)"Lcy", {208, 155, 0}},
248
+{(unsigned char*)"LeftAngleBracket", {226, 159, 168, 0}},
249
+{(unsigned char*)"LeftArrow", {226, 134, 144, 0}},
250
+{(unsigned char*)"LeftArrowBar", {226, 135, 164, 0}},
251
+{(unsigned char*)"LeftArrowRightArrow", {226, 135, 134, 0}},
252
+{(unsigned char*)"LeftCeiling", {226, 140, 136, 0}},
253
+{(unsigned char*)"LeftDoubleBracket", {226, 159, 166, 0}},
254
+{(unsigned char*)"LeftDownTeeVector", {226, 165, 161, 0}},
255
+{(unsigned char*)"LeftDownVector", {226, 135, 131, 0}},
256
+{(unsigned char*)"LeftDownVectorBar", {226, 165, 153, 0}},
257
+{(unsigned char*)"LeftFloor", {226, 140, 138, 0}},
258
+{(unsigned char*)"LeftRightArrow", {226, 134, 148, 0}},
259
+{(unsigned char*)"LeftRightVector", {226, 165, 142, 0}},
260
+{(unsigned char*)"LeftTee", {226, 138, 163, 0}},
261
+{(unsigned char*)"LeftTeeArrow", {226, 134, 164, 0}},
262
+{(unsigned char*)"LeftTeeVector", {226, 165, 154, 0}},
263
+{(unsigned char*)"LeftTriangle", {226, 138, 178, 0}},
264
+{(unsigned char*)"LeftTriangleBar", {226, 167, 143, 0}},
265
+{(unsigned char*)"LeftTriangleEqual", {226, 138, 180, 0}},
266
+{(unsigned char*)"LeftUpDownVector", {226, 165, 145, 0}},
267
+{(unsigned char*)"LeftUpTeeVector", {226, 165, 160, 0}},
268
+{(unsigned char*)"LeftUpVector", {226, 134, 191, 0}},
269
+{(unsigned char*)"LeftUpVectorBar", {226, 165, 152, 0}},
270
+{(unsigned char*)"LeftVector", {226, 134, 188, 0}},
271
+{(unsigned char*)"LeftVectorBar", {226, 165, 146, 0}},
272
+{(unsigned char*)"Leftarrow", {226, 135, 144, 0}},
273
+{(unsigned char*)"Leftrightarrow", {226, 135, 148, 0}},
274
+{(unsigned char*)"LessEqualGreater", {226, 139, 154, 0}},
275
+{(unsigned char*)"LessFullEqual", {226, 137, 166, 0}},
276
+{(unsigned char*)"LessGreater", {226, 137, 182, 0}},
277
+{(unsigned char*)"LessLess", {226, 170, 161, 0}},
278
+{(unsigned char*)"LessSlantEqual", {226, 169, 189, 0}},
279
+{(unsigned char*)"LessTilde", {226, 137, 178, 0}},
280
+{(unsigned char*)"Lfr", {240, 157, 148, 143, 0}},
281
+{(unsigned char*)"Ll", {226, 139, 152, 0}},
282
+{(unsigned char*)"Lleftarrow", {226, 135, 154, 0}},
283
+{(unsigned char*)"Lmidot", {196, 191, 0}},
284
+{(unsigned char*)"LongLeftArrow", {226, 159, 181, 0}},
285
+{(unsigned char*)"LongLeftRightArrow", {226, 159, 183, 0}},
286
+{(unsigned char*)"LongRightArrow", {226, 159, 182, 0}},
287
+{(unsigned char*)"Longleftarrow", {226, 159, 184, 0}},
288
+{(unsigned char*)"Longleftrightarrow", {226, 159, 186, 0}},
289
+{(unsigned char*)"Longrightarrow", {226, 159, 185, 0}},
290
+{(unsigned char*)"Lopf", {240, 157, 149, 131, 0}},
291
+{(unsigned char*)"LowerLeftArrow", {226, 134, 153, 0}},
292
+{(unsigned char*)"LowerRightArrow", {226, 134, 152, 0}},
293
+{(unsigned char*)"Lscr", {226, 132, 146, 0}},
294
+{(unsigned char*)"Lsh", {226, 134, 176, 0}},
295
+{(unsigned char*)"Lstrok", {197, 129, 0}},
296
+{(unsigned char*)"Lt", {226, 137, 170, 0}},
297
+{(unsigned char*)"Map", {226, 164, 133, 0}},
298
+{(unsigned char*)"Mcy", {208, 156, 0}},
299
+{(unsigned char*)"MediumSpace", {226, 129, 159, 0}},
300
+{(unsigned char*)"Mellintrf", {226, 132, 179, 0}},
301
+{(unsigned char*)"Mfr", {240, 157, 148, 144, 0}},
302
+{(unsigned char*)"MinusPlus", {226, 136, 147, 0}},
303
+{(unsigned char*)"Mopf", {240, 157, 149, 132, 0}},
304
+{(unsigned char*)"Mscr", {226, 132, 179, 0}},
305
+{(unsigned char*)"Mu", {206, 156, 0}},
306
+{(unsigned char*)"NJcy", {208, 138, 0}},
307
+{(unsigned char*)"Nacute", {197, 131, 0}},
308
+{(unsigned char*)"Ncaron", {197, 135, 0}},
309
+{(unsigned char*)"Ncedil", {197, 133, 0}},
310
+{(unsigned char*)"Ncy", {208, 157, 0}},
311
+{(unsigned char*)"NegativeMediumSpace", {226, 128, 139, 0}},
312
+{(unsigned char*)"NegativeThickSpace", {226, 128, 139, 0}},
313
+{(unsigned char*)"NegativeThinSpace", {226, 128, 139, 0}},
314
+{(unsigned char*)"NegativeVeryThinSpace", {226, 128, 139, 0}},
315
+{(unsigned char*)"NestedGreaterGreater", {226, 137, 171, 0}},
316
+{(unsigned char*)"NestedLessLess", {226, 137, 170, 0}},
317
+{(unsigned char*)"NewLine", {10, 0}},
318
+{(unsigned char*)"Nfr", {240, 157, 148, 145, 0}},
319
+{(unsigned char*)"NoBreak", {226, 129, 160, 0}},
320
+{(unsigned char*)"NonBreakingSpace", {194, 160, 0}},
321
+{(unsigned char*)"Nopf", {226, 132, 149, 0}},
322
+{(unsigned char*)"Not", {226, 171, 172, 0}},
323
+{(unsigned char*)"NotCongruent", {226, 137, 162, 0}},
324
+{(unsigned char*)"NotCupCap", {226, 137, 173, 0}},
325
+{(unsigned char*)"NotDoubleVerticalBar", {226, 136, 166, 0}},
326
+{(unsigned char*)"NotElement", {226, 136, 137, 0}},
327
+{(unsigned char*)"NotEqual", {226, 137, 160, 0}},
328
+{(unsigned char*)"NotEqualTilde", {226, 137, 130, 204, 184, 0}},
329
+{(unsigned char*)"NotExists", {226, 136, 132, 0}},
330
+{(unsigned char*)"NotGreater", {226, 137, 175, 0}},
331
+{(unsigned char*)"NotGreaterEqual", {226, 137, 177, 0}},
332
+{(unsigned char*)"NotGreaterFullEqual", {226, 137, 167, 204, 184, 0}},
333
+{(unsigned char*)"NotGreaterGreater", {226, 137, 171, 204, 184, 0}},
334
+{(unsigned char*)"NotGreaterLess", {226, 137, 185, 0}},
335
+{(unsigned char*)"NotGreaterSlantEqual", {226, 169, 190, 204, 184, 0}},
336
+{(unsigned char*)"NotGreaterTilde", {226, 137, 181, 0}},
337
+{(unsigned char*)"NotHumpDownHump", {226, 137, 142, 204, 184, 0}},
338
+{(unsigned char*)"NotHumpEqual", {226, 137, 143, 204, 184, 0}},
339
+{(unsigned char*)"NotLeftTriangle", {226, 139, 170, 0}},
340
+{(unsigned char*)"NotLeftTriangleBar", {226, 167, 143, 204, 184, 0}},
341
+{(unsigned char*)"NotLeftTriangleEqual", {226, 139, 172, 0}},
342
+{(unsigned char*)"NotLess", {226, 137, 174, 0}},
343
+{(unsigned char*)"NotLessEqual", {226, 137, 176, 0}},
344
+{(unsigned char*)"NotLessGreater", {226, 137, 184, 0}},
345
+{(unsigned char*)"NotLessLess", {226, 137, 170, 204, 184, 0}},
346
+{(unsigned char*)"NotLessSlantEqual", {226, 169, 189, 204, 184, 0}},
347
+{(unsigned char*)"NotLessTilde", {226, 137, 180, 0}},
348
+{(unsigned char*)"NotNestedGreaterGreater", {226, 170, 162, 204, 184, 0}},
349
+{(unsigned char*)"NotNestedLessLess", {226, 170, 161, 204, 184, 0}},
350
+{(unsigned char*)"NotPrecedes", {226, 138, 128, 0}},
351
+{(unsigned char*)"NotPrecedesEqual", {226, 170, 175, 204, 184, 0}},
352
+{(unsigned char*)"NotPrecedesSlantEqual", {226, 139, 160, 0}},
353
+{(unsigned char*)"NotReverseElement", {226, 136, 140, 0}},
354
+{(unsigned char*)"NotRightTriangle", {226, 139, 171, 0}},
355
+{(unsigned char*)"NotRightTriangleBar", {226, 167, 144, 204, 184, 0}},
356
+{(unsigned char*)"NotRightTriangleEqual", {226, 139, 173, 0}},
357
+{(unsigned char*)"NotSquareSubset", {226, 138, 143, 204, 184, 0}},
358
+{(unsigned char*)"NotSquareSubsetEqual", {226, 139, 162, 0}},
359
+{(unsigned char*)"NotSquareSuperset", {226, 138, 144, 204, 184, 0}},
360
+{(unsigned char*)"NotSquareSupersetEqual", {226, 139, 163, 0}},
361
+{(unsigned char*)"NotSubset", {226, 138, 130, 226, 131, 146, 0}},
362
+{(unsigned char*)"NotSubsetEqual", {226, 138, 136, 0}},
363
+{(unsigned char*)"NotSucceeds", {226, 138, 129, 0}},
364
+{(unsigned char*)"NotSucceedsEqual", {226, 170, 176, 204, 184, 0}},
365
+{(unsigned char*)"NotSucceedsSlantEqual", {226, 139, 161, 0}},
366
+{(unsigned char*)"NotSucceedsTilde", {226, 137, 191, 204, 184, 0}},
367
+{(unsigned char*)"NotSuperset", {226, 138, 131, 226, 131, 146, 0}},
368
+{(unsigned char*)"NotSupersetEqual", {226, 138, 137, 0}},
369
+{(unsigned char*)"NotTilde", {226, 137, 129, 0}},
370
+{(unsigned char*)"NotTildeEqual", {226, 137, 132, 0}},
371
+{(unsigned char*)"NotTildeFullEqual", {226, 137, 135, 0}},
372
+{(unsigned char*)"NotTildeTilde", {226, 137, 137, 0}},
373
+{(unsigned char*)"NotVerticalBar", {226, 136, 164, 0}},
374
+{(unsigned char*)"Nscr", {240, 157, 146, 169, 0}},
375
+{(unsigned char*)"Ntilde", {195, 145, 0}},
376
+{(unsigned char*)"Nu", {206, 157, 0}},
377
+{(unsigned char*)"OElig", {197, 146, 0}},
378
+{(unsigned char*)"Oacute", {195, 147, 0}},
379
+{(unsigned char*)"Ocirc", {195, 148, 0}},
380
+{(unsigned char*)"Ocy", {208, 158, 0}},
381
+{(unsigned char*)"Odblac", {197, 144, 0}},
382
+{(unsigned char*)"Ofr", {240, 157, 148, 146, 0}},
383
+{(unsigned char*)"Ograve", {195, 146, 0}},
384
+{(unsigned char*)"Omacr", {197, 140, 0}},
385
+{(unsigned char*)"Omega", {206, 169, 0}},
386
+{(unsigned char*)"Omicron", {206, 159, 0}},
387
+{(unsigned char*)"Oopf", {240, 157, 149, 134, 0}},
388
+{(unsigned char*)"OpenCurlyDoubleQuote", {226, 128, 156, 0}},
389
+{(unsigned char*)"OpenCurlyQuote", {226, 128, 152, 0}},
390
+{(unsigned char*)"Or", {226, 169, 148, 0}},
391
+{(unsigned char*)"Oscr", {240, 157, 146, 170, 0}},
392
+{(unsigned char*)"Oslash", {195, 152, 0}},
393
+{(unsigned char*)"Otilde", {195, 149, 0}},
394
+{(unsigned char*)"Otimes", {226, 168, 183, 0}},
395
+{(unsigned char*)"Ouml", {195, 150, 0}},
396
+{(unsigned char*)"OverBar", {226, 128, 190, 0}},
397
+{(unsigned char*)"OverBrace", {226, 143, 158, 0}},
398
+{(unsigned char*)"OverBracket", {226, 142, 180, 0}},
399
+{(unsigned char*)"OverParenthesis", {226, 143, 156, 0}},
400
+{(unsigned char*)"PartialD", {226, 136, 130, 0}},
401
+{(unsigned char*)"Pcy", {208, 159, 0}},
402
+{(unsigned char*)"Pfr", {240, 157, 148, 147, 0}},
403
+{(unsigned char*)"Phi", {206, 166, 0}},
404
+{(unsigned char*)"Pi", {206, 160, 0}},
405
+{(unsigned char*)"PlusMinus", {194, 177, 0}},
406
+{(unsigned char*)"Poincareplane", {226, 132, 140, 0}},
407
+{(unsigned char*)"Popf", {226, 132, 153, 0}},
408
+{(unsigned char*)"Pr", {226, 170, 187, 0}},
409
+{(unsigned char*)"Precedes", {226, 137, 186, 0}},
410
+{(unsigned char*)"PrecedesEqual", {226, 170, 175, 0}},
411
+{(unsigned char*)"PrecedesSlantEqual", {226, 137, 188, 0}},
412
+{(unsigned char*)"PrecedesTilde", {226, 137, 190, 0}},
413
+{(unsigned char*)"Prime", {226, 128, 179, 0}},
414
+{(unsigned char*)"Product", {226, 136, 143, 0}},
415
+{(unsigned char*)"Proportion", {226, 136, 183, 0}},
416
+{(unsigned char*)"Proportional", {226, 136, 157, 0}},
417
+{(unsigned char*)"Pscr", {240, 157, 146, 171, 0}},
418
+{(unsigned char*)"Psi", {206, 168, 0}},
419
+{(unsigned char*)"QUOT", {34, 0}},
420
+{(unsigned char*)"Qfr", {240, 157, 148, 148, 0}},
421
+{(unsigned char*)"Qopf", {226, 132, 154, 0}},
422
+{(unsigned char*)"Qscr", {240, 157, 146, 172, 0}},
423
+{(unsigned char*)"RBarr", {226, 164, 144, 0}},
424
+{(unsigned char*)"REG", {194, 174, 0}},
425
+{(unsigned char*)"Racute", {197, 148, 0}},
426
+{(unsigned char*)"Rang", {226, 159, 171, 0}},
427
+{(unsigned char*)"Rarr", {226, 134, 160, 0}},
428
+{(unsigned char*)"Rarrtl", {226, 164, 150, 0}},
429
+{(unsigned char*)"Rcaron", {197, 152, 0}},
430
+{(unsigned char*)"Rcedil", {197, 150, 0}},
431
+{(unsigned char*)"Rcy", {208, 160, 0}},
432
+{(unsigned char*)"Re", {226, 132, 156, 0}},
433
+{(unsigned char*)"ReverseElement", {226, 136, 139, 0}},
434
+{(unsigned char*)"ReverseEquilibrium", {226, 135, 139, 0}},
435
+{(unsigned char*)"ReverseUpEquilibrium", {226, 165, 175, 0}},
436
+{(unsigned char*)"Rfr", {226, 132, 156, 0}},
437
+{(unsigned char*)"Rho", {206, 161, 0}},
438
+{(unsigned char*)"RightAngleBracket", {226, 159, 169, 0}},
439
+{(unsigned char*)"RightArrow", {226, 134, 146, 0}},
440
+{(unsigned char*)"RightArrowBar", {226, 135, 165, 0}},
441
+{(unsigned char*)"RightArrowLeftArrow", {226, 135, 132, 0}},
442
+{(unsigned char*)"RightCeiling", {226, 140, 137, 0}},
443
+{(unsigned char*)"RightDoubleBracket", {226, 159, 167, 0}},
444
+{(unsigned char*)"RightDownTeeVector", {226, 165, 157, 0}},
445
+{(unsigned char*)"RightDownVector", {226, 135, 130, 0}},
446
+{(unsigned char*)"RightDownVectorBar", {226, 165, 149, 0}},
447
+{(unsigned char*)"RightFloor", {226, 140, 139, 0}},
448
+{(unsigned char*)"RightTee", {226, 138, 162, 0}},
449
+{(unsigned char*)"RightTeeArrow", {226, 134, 166, 0}},
450
+{(unsigned char*)"RightTeeVector", {226, 165, 155, 0}},
451
+{(unsigned char*)"RightTriangle", {226, 138, 179, 0}},
452
+{(unsigned char*)"RightTriangleBar", {226, 167, 144, 0}},
453
+{(unsigned char*)"RightTriangleEqual", {226, 138, 181, 0}},
454
+{(unsigned char*)"RightUpDownVector", {226, 165, 143, 0}},
455
+{(unsigned char*)"RightUpTeeVector", {226, 165, 156, 0}},
456
+{(unsigned char*)"RightUpVector", {226, 134, 190, 0}},
457
+{(unsigned char*)"RightUpVectorBar", {226, 165, 148, 0}},
458
+{(unsigned char*)"RightVector", {226, 135, 128, 0}},
459
+{(unsigned char*)"RightVectorBar", {226, 165, 147, 0}},
460
+{(unsigned char*)"Rightarrow", {226, 135, 146, 0}},
461
+{(unsigned char*)"Ropf", {226, 132, 157, 0}},
462
+{(unsigned char*)"RoundImplies", {226, 165, 176, 0}},
463
+{(unsigned char*)"Rrightarrow", {226, 135, 155, 0}},
464
+{(unsigned char*)"Rscr", {226, 132, 155, 0}},
465
+{(unsigned char*)"Rsh", {226, 134, 177, 0}},
466
+{(unsigned char*)"RuleDelayed", {226, 167, 180, 0}},
467
+{(unsigned char*)"SHCHcy", {208, 169, 0}},
468
+{(unsigned char*)"SHcy", {208, 168, 0}},
469
+{(unsigned char*)"SOFTcy", {208, 172, 0}},
470
+{(unsigned char*)"Sacute", {197, 154, 0}},
471
+{(unsigned char*)"Sc", {226, 170, 188, 0}},
472
+{(unsigned char*)"Scaron", {197, 160, 0}},
473
+{(unsigned char*)"Scedil", {197, 158, 0}},
474
+{(unsigned char*)"Scirc", {197, 156, 0}},
475
+{(unsigned char*)"Scy", {208, 161, 0}},
476
+{(unsigned char*)"Sfr", {240, 157, 148, 150, 0}},
477
+{(unsigned char*)"ShortDownArrow", {226, 134, 147, 0}},
478
+{(unsigned char*)"ShortLeftArrow", {226, 134, 144, 0}},
479
+{(unsigned char*)"ShortRightArrow", {226, 134, 146, 0}},
480
+{(unsigned char*)"ShortUpArrow", {226, 134, 145, 0}},
481
+{(unsigned char*)"Sigma", {206, 163, 0}},
482
+{(unsigned char*)"SmallCircle", {226, 136, 152, 0}},
483
+{(unsigned char*)"Sopf", {240, 157, 149, 138, 0}},
484
+{(unsigned char*)"Sqrt", {226, 136, 154, 0}},
485
+{(unsigned char*)"Square", {226, 150, 161, 0}},
486
+{(unsigned char*)"SquareIntersection", {226, 138, 147, 0}},
487
+{(unsigned char*)"SquareSubset", {226, 138, 143, 0}},
488
+{(unsigned char*)"SquareSubsetEqual", {226, 138, 145, 0}},
489
+{(unsigned char*)"SquareSuperset", {226, 138, 144, 0}},
490
+{(unsigned char*)"SquareSupersetEqual", {226, 138, 146, 0}},
491
+{(unsigned char*)"SquareUnion", {226, 138, 148, 0}},
492
+{(unsigned char*)"Sscr", {240, 157, 146, 174, 0}},
493
+{(unsigned char*)"Star", {226, 139, 134, 0}},
494
+{(unsigned char*)"Sub", {226, 139, 144, 0}},
495
+{(unsigned char*)"Subset", {226, 139, 144, 0}},
496
+{(unsigned char*)"SubsetEqual", {226, 138, 134, 0}},
497
+{(unsigned char*)"Succeeds", {226, 137, 187, 0}},
498
+{(unsigned char*)"SucceedsEqual", {226, 170, 176, 0}},
499
+{(unsigned char*)"SucceedsSlantEqual", {226, 137, 189, 0}},
500
+{(unsigned char*)"SucceedsTilde", {226, 137, 191, 0}},
501
+{(unsigned char*)"SuchThat", {226, 136, 139, 0}},
502
+{(unsigned char*)"Sum", {226, 136, 145, 0}},
503
+{(unsigned char*)"Sup", {226, 139, 145, 0}},
504
+{(unsigned char*)"Superset", {226, 138, 131, 0}},
505
+{(unsigned char*)"SupersetEqual", {226, 138, 135, 0}},
506
+{(unsigned char*)"Supset", {226, 139, 145, 0}},
507
+{(unsigned char*)"THORN", {195, 158, 0}},
508
+{(unsigned char*)"TRADE", {226, 132, 162, 0}},
509
+{(unsigned char*)"TSHcy", {208, 139, 0}},
510
+{(unsigned char*)"TScy", {208, 166, 0}},
511
+{(unsigned char*)"Tab", {9, 0}},
512
+{(unsigned char*)"Tau", {206, 164, 0}},
513
+{(unsigned char*)"Tcaron", {197, 164, 0}},
514
+{(unsigned char*)"Tcedil", {197, 162, 0}},
515
+{(unsigned char*)"Tcy", {208, 162, 0}},
516
+{(unsigned char*)"Tfr", {240, 157, 148, 151, 0}},
517
+{(unsigned char*)"Therefore", {226, 136, 180, 0}},
518
+{(unsigned char*)"Theta", {206, 152, 0}},
519
+{(unsigned char*)"ThickSpace", {226, 129, 159, 226, 128, 138, 0}},
520
+{(unsigned char*)"ThinSpace", {226, 128, 137, 0}},
521
+{(unsigned char*)"Tilde", {226, 136, 188, 0}},
522
+{(unsigned char*)"TildeEqual", {226, 137, 131, 0}},
523
+{(unsigned char*)"TildeFullEqual", {226, 137, 133, 0}},
524
+{(unsigned char*)"TildeTilde", {226, 137, 136, 0}},
525
+{(unsigned char*)"Topf", {240, 157, 149, 139, 0}},
526
+{(unsigned char*)"TripleDot", {226, 131, 155, 0}},
527
+{(unsigned char*)"Tscr", {240, 157, 146, 175, 0}},
528
+{(unsigned char*)"Tstrok", {197, 166, 0}},
529
+{(unsigned char*)"Uacute", {195, 154, 0}},
530
+{(unsigned char*)"Uarr", {226, 134, 159, 0}},
531
+{(unsigned char*)"Uarrocir", {226, 165, 137, 0}},
532
+{(unsigned char*)"Ubrcy", {208, 142, 0}},
533
+{(unsigned char*)"Ubreve", {197, 172, 0}},
534
+{(unsigned char*)"Ucirc", {195, 155, 0}},
535
+{(unsigned char*)"Ucy", {208, 163, 0}},
536
+{(unsigned char*)"Udblac", {197, 176, 0}},
537
+{(unsigned char*)"Ufr", {240, 157, 148, 152, 0}},
538
+{(unsigned char*)"Ugrave", {195, 153, 0}},
539
+{(unsigned char*)"Umacr", {197, 170, 0}},
540
+{(unsigned char*)"UnderBar", {95, 0}},
541
+{(unsigned char*)"UnderBrace", {226, 143, 159, 0}},
542
+{(unsigned char*)"UnderBracket", {226, 142, 181, 0}},
543
+{(unsigned char*)"UnderParenthesis", {226, 143, 157, 0}},
544
+{(unsigned char*)"Union", {226, 139, 131, 0}},
545
+{(unsigned char*)"UnionPlus", {226, 138, 142, 0}},
546
+{(unsigned char*)"Uogon", {197, 178, 0}},
547
+{(unsigned char*)"Uopf", {240, 157, 149, 140, 0}},
548
+{(unsigned char*)"UpArrow", {226, 134, 145, 0}},
549
+{(unsigned char*)"UpArrowBar", {226, 164, 146, 0}},
550
+{(unsigned char*)"UpArrowDownArrow", {226, 135, 133, 0}},
551
+{(unsigned char*)"UpDownArrow", {226, 134, 149, 0}},
552
+{(unsigned char*)"UpEquilibrium", {226, 165, 174, 0}},
553
+{(unsigned char*)"UpTee", {226, 138, 165, 0}},
554
+{(unsigned char*)"UpTeeArrow", {226, 134, 165, 0}},
555
+{(unsigned char*)"Uparrow", {226, 135, 145, 0}},
556
+{(unsigned char*)"Updownarrow", {226, 135, 149, 0}},
557
+{(unsigned char*)"UpperLeftArrow", {226, 134, 150, 0}},
558
+{(unsigned char*)"UpperRightArrow", {226, 134, 151, 0}},
559
+{(unsigned char*)"Upsi", {207, 146, 0}},
560
+{(unsigned char*)"Upsilon", {206, 165, 0}},
561
+{(unsigned char*)"Uring", {197, 174, 0}},
562
+{(unsigned char*)"Uscr", {240, 157, 146, 176, 0}},
563
+{(unsigned char*)"Utilde", {197, 168, 0}},
564
+{(unsigned char*)"Uuml", {195, 156, 0}},
565
+{(unsigned char*)"VDash", {226, 138, 171, 0}},
566
+{(unsigned char*)"Vbar", {226, 171, 171, 0}},
567
+{(unsigned char*)"Vcy", {208, 146, 0}},
568
+{(unsigned char*)"Vdash", {226, 138, 169, 0}},
569
+{(unsigned char*)"Vdashl", {226, 171, 166, 0}},
570
+{(unsigned char*)"Vee", {226, 139, 129, 0}},
571
+{(unsigned char*)"Verbar", {226, 128, 150, 0}},
572
+{(unsigned char*)"Vert", {226, 128, 150, 0}},
573
+{(unsigned char*)"VerticalBar", {226, 136, 163, 0}},
574
+{(unsigned char*)"VerticalLine", {124, 0}},
575
+{(unsigned char*)"VerticalSeparator", {226, 157, 152, 0}},
576
+{(unsigned char*)"VerticalTilde", {226, 137, 128, 0}},
577
+{(unsigned char*)"VeryThinSpace", {226, 128, 138, 0}},
578
+{(unsigned char*)"Vfr", {240, 157, 148, 153, 0}},
579
+{(unsigned char*)"Vopf", {240, 157, 149, 141, 0}},
580
+{(unsigned char*)"Vscr", {240, 157, 146, 177, 0}},
581
+{(unsigned char*)"Vvdash", {226, 138, 170, 0}},
582
+{(unsigned char*)"Wcirc", {197, 180, 0}},
583
+{(unsigned char*)"Wedge", {226, 139, 128, 0}},
584
+{(unsigned char*)"Wfr", {240, 157, 148, 154, 0}},
585
+{(unsigned char*)"Wopf", {240, 157, 149, 142, 0}},
586
+{(unsigned char*)"Wscr", {240, 157, 146, 178, 0}},
587
+{(unsigned char*)"Xfr", {240, 157, 148, 155, 0}},
588
+{(unsigned char*)"Xi", {206, 158, 0}},
589
+{(unsigned char*)"Xopf", {240, 157, 149, 143, 0}},
590
+{(unsigned char*)"Xscr", {240, 157, 146, 179, 0}},
591
+{(unsigned char*)"YAcy", {208, 175, 0}},
592
+{(unsigned char*)"YIcy", {208, 135, 0}},
593
+{(unsigned char*)"YUcy", {208, 174, 0}},
594
+{(unsigned char*)"Yacute", {195, 157, 0}},
595
+{(unsigned char*)"Ycirc", {197, 182, 0}},
596
+{(unsigned char*)"Ycy", {208, 171, 0}},
597
+{(unsigned char*)"Yfr", {240, 157, 148, 156, 0}},
598
+{(unsigned char*)"Yopf", {240, 157, 149, 144, 0}},
599
+{(unsigned char*)"Yscr", {240, 157, 146, 180, 0}},
600
+{(unsigned char*)"Yuml", {197, 184, 0}},
601
+{(unsigned char*)"ZHcy", {208, 150, 0}},
602
+{(unsigned char*)"Zacute", {197, 185, 0}},
603
+{(unsigned char*)"Zcaron", {197, 189, 0}},
604
+{(unsigned char*)"Zcy", {208, 151, 0}},
605
+{(unsigned char*)"Zdot", {197, 187, 0}},
606
+{(unsigned char*)"ZeroWidthSpace", {226, 128, 139, 0}},
607
+{(unsigned char*)"Zeta", {206, 150, 0}},
608
+{(unsigned char*)"Zfr", {226, 132, 168, 0}},
609
+{(unsigned char*)"Zopf", {226, 132, 164, 0}},
610
+{(unsigned char*)"Zscr", {240, 157, 146, 181, 0}},
611
+{(unsigned char*)"aacute", {195, 161, 0}},
612
+{(unsigned char*)"abreve", {196, 131, 0}},
613
+{(unsigned char*)"ac", {226, 136, 190, 0}},
614
+{(unsigned char*)"acE", {226, 136, 190, 204, 179, 0}},
615
+{(unsigned char*)"acd", {226, 136, 191, 0}},
616
+{(unsigned char*)"acirc", {195, 162, 0}},
617
+{(unsigned char*)"acute", {194, 180, 0}},
618
+{(unsigned char*)"acy", {208, 176, 0}},
619
+{(unsigned char*)"aelig", {195, 166, 0}},
620
+{(unsigned char*)"af", {226, 129, 161, 0}},
621
+{(unsigned char*)"afr", {240, 157, 148, 158, 0}},
622
+{(unsigned char*)"agrave", {195, 160, 0}},
623
+{(unsigned char*)"alefsym", {226, 132, 181, 0}},
624
+{(unsigned char*)"aleph", {226, 132, 181, 0}},
625
+{(unsigned char*)"alpha", {206, 177, 0}},
626
+{(unsigned char*)"amacr", {196, 129, 0}},
627
+{(unsigned char*)"amalg", {226, 168, 191, 0}},
628
+{(unsigned char*)"amp", {38, 0}},
629
+{(unsigned char*)"and", {226, 136, 167, 0}},
630
+{(unsigned char*)"andand", {226, 169, 149, 0}},
631
+{(unsigned char*)"andd", {226, 169, 156, 0}},
632
+{(unsigned char*)"andslope", {226, 169, 152, 0}},
633
+{(unsigned char*)"andv", {226, 169, 154, 0}},
634
+{(unsigned char*)"ang", {226, 136, 160, 0}},
635
+{(unsigned char*)"ange", {226, 166, 164, 0}},
636
+{(unsigned char*)"angle", {226, 136, 160, 0}},
637
+{(unsigned char*)"angmsd", {226, 136, 161, 0}},
638
+{(unsigned char*)"angmsdaa", {226, 166, 168, 0}},
639
+{(unsigned char*)"angmsdab", {226, 166, 169, 0}},
640
+{(unsigned char*)"angmsdac", {226, 166, 170, 0}},
641
+{(unsigned char*)"angmsdad", {226, 166, 171, 0}},
642
+{(unsigned char*)"angmsdae", {226, 166, 172, 0}},
643
+{(unsigned char*)"angmsdaf", {226, 166, 173, 0}},
644
+{(unsigned char*)"angmsdag", {226, 166, 174, 0}},
645
+{(unsigned char*)"angmsdah", {226, 166, 175, 0}},
646
+{(unsigned char*)"angrt", {226, 136, 159, 0}},
647
+{(unsigned char*)"angrtvb", {226, 138, 190, 0}},
648
+{(unsigned char*)"angrtvbd", {226, 166, 157, 0}},
649
+{(unsigned char*)"angsph", {226, 136, 162, 0}},
650
+{(unsigned char*)"angst", {195, 133, 0}},
651
+{(unsigned char*)"angzarr", {226, 141, 188, 0}},
652
+{(unsigned char*)"aogon", {196, 133, 0}},
653
+{(unsigned char*)"aopf", {240, 157, 149, 146, 0}},
654
+{(unsigned char*)"ap", {226, 137, 136, 0}},
655
+{(unsigned char*)"apE", {226, 169, 176, 0}},
656
+{(unsigned char*)"apacir", {226, 169, 175, 0}},
657
+{(unsigned char*)"ape", {226, 137, 138, 0}},
658
+{(unsigned char*)"apid", {226, 137, 139, 0}},
659
+{(unsigned char*)"apos", {39, 0}},
660
+{(unsigned char*)"approx", {226, 137, 136, 0}},
661
+{(unsigned char*)"approxeq", {226, 137, 138, 0}},
662
+{(unsigned char*)"aring", {195, 165, 0}},
663
+{(unsigned char*)"ascr", {240, 157, 146, 182, 0}},
664
+{(unsigned char*)"ast", {42, 0}},
665
+{(unsigned char*)"asymp", {226, 137, 136, 0}},
666
+{(unsigned char*)"asympeq", {226, 137, 141, 0}},
667
+{(unsigned char*)"atilde", {195, 163, 0}},
668
+{(unsigned char*)"auml", {195, 164, 0}},
669
+{(unsigned char*)"awconint", {226, 136, 179, 0}},
670
+{(unsigned char*)"awint", {226, 168, 145, 0}},
671
+{(unsigned char*)"bNot", {226, 171, 173, 0}},
672
+{(unsigned char*)"backcong", {226, 137, 140, 0}},
673
+{(unsigned char*)"backepsilon", {207, 182, 0}},
674
+{(unsigned char*)"backprime", {226, 128, 181, 0}},
675
+{(unsigned char*)"backsim", {226, 136, 189, 0}},
676
+{(unsigned char*)"backsimeq", {226, 139, 141, 0}},
677
+{(unsigned char*)"barvee", {226, 138, 189, 0}},
678
+{(unsigned char*)"barwed", {226, 140, 133, 0}},
679
+{(unsigned char*)"barwedge", {226, 140, 133, 0}},
680
+{(unsigned char*)"bbrk", {226, 142, 181, 0}},
681
+{(unsigned char*)"bbrktbrk", {226, 142, 182, 0}},
682
+{(unsigned char*)"bcong", {226, 137, 140, 0}},
683
+{(unsigned char*)"bcy", {208, 177, 0}},
684
+{(unsigned char*)"bdquo", {226, 128, 158, 0}},
685
+{(unsigned char*)"becaus", {226, 136, 181, 0}},
686
+{(unsigned char*)"because", {226, 136, 181, 0}},
687
+{(unsigned char*)"bemptyv", {226, 166, 176, 0}},
688
+{(unsigned char*)"bepsi", {207, 182, 0}},
689
+{(unsigned char*)"bernou", {226, 132, 172, 0}},
690
+{(unsigned char*)"beta", {206, 178, 0}},
691
+{(unsigned char*)"beth", {226, 132, 182, 0}},
692
+{(unsigned char*)"between", {226, 137, 172, 0}},
693
+{(unsigned char*)"bfr", {240, 157, 148, 159, 0}},
694
+{(unsigned char*)"bigcap", {226, 139, 130, 0}},
695
+{(unsigned char*)"bigcirc", {226, 151, 175, 0}},
696
+{(unsigned char*)"bigcup", {226, 139, 131, 0}},
697
+{(unsigned char*)"bigodot", {226, 168, 128, 0}},
698
+{(unsigned char*)"bigoplus", {226, 168, 129, 0}},
699
+{(unsigned char*)"bigotimes", {226, 168, 130, 0}},
700
+{(unsigned char*)"bigsqcup", {226, 168, 134, 0}},
701
+{(unsigned char*)"bigstar", {226, 152, 133, 0}},
702
+{(unsigned char*)"bigtriangledown", {226, 150, 189, 0}},
703
+{(unsigned char*)"bigtriangleup", {226, 150, 179, 0}},
704
+{(unsigned char*)"biguplus", {226, 168, 132, 0}},
705
+{(unsigned char*)"bigvee", {226, 139, 129, 0}},
706
+{(unsigned char*)"bigwedge", {226, 139, 128, 0}},
707
+{(unsigned char*)"bkarow", {226, 164, 141, 0}},
708
+{(unsigned char*)"blacklozenge", {226, 167, 171, 0}},
709
+{(unsigned char*)"blacksquare", {226, 150, 170, 0}},
710
+{(unsigned char*)"blacktriangle", {226, 150, 180, 0}},
711
+{(unsigned char*)"blacktriangledown", {226, 150, 190, 0}},
712
+{(unsigned char*)"blacktriangleleft", {226, 151, 130, 0}},
713
+{(unsigned char*)"blacktriangleright", {226, 150, 184, 0}},
714
+{(unsigned char*)"blank", {226, 144, 163, 0}},
715
+{(unsigned char*)"blk12", {226, 150, 146, 0}},
716
+{(unsigned char*)"blk14", {226, 150, 145, 0}},
717
+{(unsigned char*)"blk34", {226, 150, 147, 0}},
718
+{(unsigned char*)"block", {226, 150, 136, 0}},
719
+{(unsigned char*)"bne", {61, 226, 131, 165, 0}},
720
+{(unsigned char*)"bnequiv", {226, 137, 161, 226, 131, 165, 0}},
721
+{(unsigned char*)"bnot", {226, 140, 144, 0}},
722
+{(unsigned char*)"bopf", {240, 157, 149, 147, 0}},
723
+{(unsigned char*)"bot", {226, 138, 165, 0}},
724
+{(unsigned char*)"bottom", {226, 138, 165, 0}},
725
+{(unsigned char*)"bowtie", {226, 139, 136, 0}},
726
+{(unsigned char*)"boxDL", {226, 149, 151, 0}},
727
+{(unsigned char*)"boxDR", {226, 149, 148, 0}},
728
+{(unsigned char*)"boxDl", {226, 149, 150, 0}},
729
+{(unsigned char*)"boxDr", {226, 149, 147, 0}},
730
+{(unsigned char*)"boxH", {226, 149, 144, 0}},
731
+{(unsigned char*)"boxHD", {226, 149, 166, 0}},
732
+{(unsigned char*)"boxHU", {226, 149, 169, 0}},
733
+{(unsigned char*)"boxHd", {226, 149, 164, 0}},
734
+{(unsigned char*)"boxHu", {226, 149, 167, 0}},
735
+{(unsigned char*)"boxUL", {226, 149, 157, 0}},
736
+{(unsigned char*)"boxUR", {226, 149, 154, 0}},
737
+{(unsigned char*)"boxUl", {226, 149, 156, 0}},
738
+{(unsigned char*)"boxUr", {226, 149, 153, 0}},
739
+{(unsigned char*)"boxV", {226, 149, 145, 0}},
740
+{(unsigned char*)"boxVH", {226, 149, 172, 0}},
741
+{(unsigned char*)"boxVL", {226, 149, 163, 0}},
742
+{(unsigned char*)"boxVR", {226, 149, 160, 0}},
743
+{(unsigned char*)"boxVh", {226, 149, 171, 0}},
744
+{(unsigned char*)"boxVl", {226, 149, 162, 0}},
745
+{(unsigned char*)"boxVr", {226, 149, 159, 0}},
746
+{(unsigned char*)"boxbox", {226, 167, 137, 0}},
747
+{(unsigned char*)"boxdL", {226, 149, 149, 0}},
748
+{(unsigned char*)"boxdR", {226, 149, 146, 0}},
749
+{(unsigned char*)"boxdl", {226, 148, 144, 0}},
750
+{(unsigned char*)"boxdr", {226, 148, 140, 0}},
751
+{(unsigned char*)"boxh", {226, 148, 128, 0}},
752
+{(unsigned char*)"boxhD", {226, 149, 165, 0}},
753
+{(unsigned char*)"boxhU", {226, 149, 168, 0}},
754
+{(unsigned char*)"boxhd", {226, 148, 172, 0}},
755
+{(unsigned char*)"boxhu", {226, 148, 180, 0}},
756
+{(unsigned char*)"boxminus", {226, 138, 159, 0}},
757
+{(unsigned char*)"boxplus", {226, 138, 158, 0}},
758
+{(unsigned char*)"boxtimes", {226, 138, 160, 0}},
759
+{(unsigned char*)"boxuL", {226, 149, 155, 0}},
760
+{(unsigned char*)"boxuR", {226, 149, 152, 0}},
761
+{(unsigned char*)"boxul", {226, 148, 152, 0}},
762
+{(unsigned char*)"boxur", {226, 148, 148, 0}},
763
+{(unsigned char*)"boxv", {226, 148, 130, 0}},
764
+{(unsigned char*)"boxvH", {226, 149, 170, 0}},
765
+{(unsigned char*)"boxvL", {226, 149, 161, 0}},
766
+{(unsigned char*)"boxvR", {226, 149, 158, 0}},
767
+{(unsigned char*)"boxvh", {226, 148, 188, 0}},
768
+{(unsigned char*)"boxvl", {226, 148, 164, 0}},
769
+{(unsigned char*)"boxvr", {226, 148, 156, 0}},
770
+{(unsigned char*)"bprime", {226, 128, 181, 0}},
771
+{(unsigned char*)"breve", {203, 152, 0}},
772
+{(unsigned char*)"brvbar", {194, 166, 0}},
773
+{(unsigned char*)"bscr", {240, 157, 146, 183, 0}},
774
+{(unsigned char*)"bsemi", {226, 129, 143, 0}},
775
+{(unsigned char*)"bsim", {226, 136, 189, 0}},
776
+{(unsigned char*)"bsime", {226, 139, 141, 0}},
777
+{(unsigned char*)"bsol", {92, 0}},
778
+{(unsigned char*)"bsolb", {226, 167, 133, 0}},
779
+{(unsigned char*)"bsolhsub", {226, 159, 136, 0}},
780
+{(unsigned char*)"bull", {226, 128, 162, 0}},
781
+{(unsigned char*)"bullet", {226, 128, 162, 0}},
782
+{(unsigned char*)"bump", {226, 137, 142, 0}},
783
+{(unsigned char*)"bumpE", {226, 170, 174, 0}},
784
+{(unsigned char*)"bumpe", {226, 137, 143, 0}},
785
+{(unsigned char*)"bumpeq", {226, 137, 143, 0}},
786
+{(unsigned char*)"cacute", {196, 135, 0}},
787
+{(unsigned char*)"cap", {226, 136, 169, 0}},
788
+{(unsigned char*)"capand", {226, 169, 132, 0}},
789
+{(unsigned char*)"capbrcup", {226, 169, 137, 0}},
790
+{(unsigned char*)"capcap", {226, 169, 139, 0}},
791
+{(unsigned char*)"capcup", {226, 169, 135, 0}},
792
+{(unsigned char*)"capdot", {226, 169, 128, 0}},
793
+{(unsigned char*)"caps", {226, 136, 169, 239, 184, 128, 0}},
794
+{(unsigned char*)"caret", {226, 129, 129, 0}},
795
+{(unsigned char*)"caron", {203, 135, 0}},
796
+{(unsigned char*)"ccaps", {226, 169, 141, 0}},
797
+{(unsigned char*)"ccaron", {196, 141, 0}},
798
+{(unsigned char*)"ccedil", {195, 167, 0}},
799
+{(unsigned char*)"ccirc", {196, 137, 0}},
800
+{(unsigned char*)"ccups", {226, 169, 140, 0}},
801
+{(unsigned char*)"ccupssm", {226, 169, 144, 0}},
802
+{(unsigned char*)"cdot", {196, 139, 0}},
803
+{(unsigned char*)"cedil", {194, 184, 0}},
804
+{(unsigned char*)"cemptyv", {226, 166, 178, 0}},
805
+{(unsigned char*)"cent", {194, 162, 0}},
806
+{(unsigned char*)"centerdot", {194, 183, 0}},
807
+{(unsigned char*)"cfr", {240, 157, 148, 160, 0}},
808
+{(unsigned char*)"chcy", {209, 135, 0}},
809
+{(unsigned char*)"check", {226, 156, 147, 0}},
810
+{(unsigned char*)"checkmark", {226, 156, 147, 0}},
811
+{(unsigned char*)"chi", {207, 135, 0}},
812
+{(unsigned char*)"cir", {226, 151, 139, 0}},
813
+{(unsigned char*)"cirE", {226, 167, 131, 0}},
814
+{(unsigned char*)"circ", {203, 134, 0}},
815
+{(unsigned char*)"circeq", {226, 137, 151, 0}},
816
+{(unsigned char*)"circlearrowleft", {226, 134, 186, 0}},
817
+{(unsigned char*)"circlearrowright", {226, 134, 187, 0}},
818
+{(unsigned char*)"circledR", {194, 174, 0}},
819
+{(unsigned char*)"circledS", {226, 147, 136, 0}},
820
+{(unsigned char*)"circledast", {226, 138, 155, 0}},
821
+{(unsigned char*)"circledcirc", {226, 138, 154, 0}},
822
+{(unsigned char*)"circleddash", {226, 138, 157, 0}},
823
+{(unsigned char*)"cire", {226, 137, 151, 0}},
824
+{(unsigned char*)"cirfnint", {226, 168, 144, 0}},
825
+{(unsigned char*)"cirmid", {226, 171, 175, 0}},
826
+{(unsigned char*)"cirscir", {226, 167, 130, 0}},
827
+{(unsigned char*)"clubs", {226, 153, 163, 0}},
828
+{(unsigned char*)"clubsuit", {226, 153, 163, 0}},
829
+{(unsigned char*)"colon", {58, 0}},
830
+{(unsigned char*)"colone", {226, 137, 148, 0}},
831
+{(unsigned char*)"coloneq", {226, 137, 148, 0}},
832
+{(unsigned char*)"comma", {44, 0}},
833
+{(unsigned char*)"commat", {64, 0}},
834
+{(unsigned char*)"comp", {226, 136, 129, 0}},
835
+{(unsigned char*)"compfn", {226, 136, 152, 0}},
836
+{(unsigned char*)"complement", {226, 136, 129, 0}},
837
+{(unsigned char*)"complexes", {226, 132, 130, 0}},
838
+{(unsigned char*)"cong", {226, 137, 133, 0}},
839
+{(unsigned char*)"congdot", {226, 169, 173, 0}},
840
+{(unsigned char*)"conint", {226, 136, 174, 0}},
841
+{(unsigned char*)"copf", {240, 157, 149, 148, 0}},
842
+{(unsigned char*)"coprod", {226, 136, 144, 0}},
843
+{(unsigned char*)"copy", {194, 169, 0}},
844
+{(unsigned char*)"copysr", {226, 132, 151, 0}},
845
+{(unsigned char*)"crarr", {226, 134, 181, 0}},
846
+{(unsigned char*)"cross", {226, 156, 151, 0}},
847
+{(unsigned char*)"cscr", {240, 157, 146, 184, 0}},
848
+{(unsigned char*)"csub", {226, 171, 143, 0}},
849
+{(unsigned char*)"csube", {226, 171, 145, 0}},
850
+{(unsigned char*)"csup", {226, 171, 144, 0}},
851
+{(unsigned char*)"csupe", {226, 171, 146, 0}},
852
+{(unsigned char*)"ctdot", {226, 139, 175, 0}},
853
+{(unsigned char*)"cudarrl", {226, 164, 184, 0}},
854
+{(unsigned char*)"cudarrr", {226, 164, 181, 0}},
855
+{(unsigned char*)"cuepr", {226, 139, 158, 0}},
856
+{(unsigned char*)"cuesc", {226, 139, 159, 0}},
857
+{(unsigned char*)"cularr", {226, 134, 182, 0}},
858
+{(unsigned char*)"cularrp", {226, 164, 189, 0}},
859
+{(unsigned char*)"cup", {226, 136, 170, 0}},
860
+{(unsigned char*)"cupbrcap", {226, 169, 136, 0}},
861
+{(unsigned char*)"cupcap", {226, 169, 134, 0}},
862
+{(unsigned char*)"cupcup", {226, 169, 138, 0}},
863
+{(unsigned char*)"cupdot", {226, 138, 141, 0}},
864
+{(unsigned char*)"cupor", {226, 169, 133, 0}},
865
+{(unsigned char*)"cups", {226, 136, 170, 239, 184, 128, 0}},
866
+{(unsigned char*)"curarr", {226, 134, 183, 0}},
867
+{(unsigned char*)"curarrm", {226, 164, 188, 0}},
868
+{(unsigned char*)"curlyeqprec", {226, 139, 158, 0}},
869
+{(unsigned char*)"curlyeqsucc", {226, 139, 159, 0}},
870
+{(unsigned char*)"curlyvee", {226, 139, 142, 0}},
871
+{(unsigned char*)"curlywedge", {226, 139, 143, 0}},
872
+{(unsigned char*)"curren", {194, 164, 0}},
873
+{(unsigned char*)"curvearrowleft", {226, 134, 182, 0}},
874
+{(unsigned char*)"curvearrowright", {226, 134, 183, 0}},
875
+{(unsigned char*)"cuvee", {226, 139, 142, 0}},
876
+{(unsigned char*)"cuwed", {226, 139, 143, 0}},
877
+{(unsigned char*)"cwconint", {226, 136, 178, 0}},
878
+{(unsigned char*)"cwint", {226, 136, 177, 0}},
879
+{(unsigned char*)"cylcty", {226, 140, 173, 0}},
880
+{(unsigned char*)"dArr", {226, 135, 147, 0}},
881
+{(unsigned char*)"dHar", {226, 165, 165, 0}},
882
+{(unsigned char*)"dagger", {226, 128, 160, 0}},
883
+{(unsigned char*)"daleth", {226, 132, 184, 0}},
884
+{(unsigned char*)"darr", {226, 134, 147, 0}},
885
+{(unsigned char*)"dash", {226, 128, 144, 0}},
886
+{(unsigned char*)"dashv", {226, 138, 163, 0}},
887
+{(unsigned char*)"dbkarow", {226, 164, 143, 0}},
888
+{(unsigned char*)"dblac", {203, 157, 0}},
889
+{(unsigned char*)"dcaron", {196, 143, 0}},
890
+{(unsigned char*)"dcy", {208, 180, 0}},
891
+{(unsigned char*)"dd", {226, 133, 134, 0}},
892
+{(unsigned char*)"ddagger", {226, 128, 161, 0}},
893
+{(unsigned char*)"ddarr", {226, 135, 138, 0}},
894
+{(unsigned char*)"ddotseq", {226, 169, 183, 0}},
895
+{(unsigned char*)"deg", {194, 176, 0}},
896
+{(unsigned char*)"delta", {206, 180, 0}},
897
+{(unsigned char*)"demptyv", {226, 166, 177, 0}},
898
+{(unsigned char*)"dfisht", {226, 165, 191, 0}},
899
+{(unsigned char*)"dfr", {240, 157, 148, 161, 0}},
900
+{(unsigned char*)"dharl", {226, 135, 131, 0}},
901
+{(unsigned char*)"dharr", {226, 135, 130, 0}},
902
+{(unsigned char*)"diam", {226, 139, 132, 0}},
903
+{(unsigned char*)"diamond", {226, 139, 132, 0}},
904
+{(unsigned char*)"diamondsuit", {226, 153, 166, 0}},
905
+{(unsigned char*)"diams", {226, 153, 166, 0}},
906
+{(unsigned char*)"die", {194, 168, 0}},
907
+{(unsigned char*)"digamma", {207, 157, 0}},
908
+{(unsigned char*)"disin", {226, 139, 178, 0}},
909
+{(unsigned char*)"div", {195, 183, 0}},
910
+{(unsigned char*)"divide", {195, 183, 0}},
911
+{(unsigned char*)"divideontimes", {226, 139, 135, 0}},
912
+{(unsigned char*)"divonx", {226, 139, 135, 0}},
913
+{(unsigned char*)"djcy", {209, 146, 0}},
914
+{(unsigned char*)"dlcorn", {226, 140, 158, 0}},
915
+{(unsigned char*)"dlcrop", {226, 140, 141, 0}},
916
+{(unsigned char*)"dollar", {36, 0}},
917
+{(unsigned char*)"dopf", {240, 157, 149, 149, 0}},
918
+{(unsigned char*)"dot", {203, 153, 0}},
919
+{(unsigned char*)"doteq", {226, 137, 144, 0}},
920
+{(unsigned char*)"doteqdot", {226, 137, 145, 0}},
921
+{(unsigned char*)"dotminus", {226, 136, 184, 0}},
922
+{(unsigned char*)"dotplus", {226, 136, 148, 0}},
923
+{(unsigned char*)"dotsquare", {226, 138, 161, 0}},
924
+{(unsigned char*)"doublebarwedge", {226, 140, 134, 0}},
925
+{(unsigned char*)"downarrow", {226, 134, 147, 0}},
926
+{(unsigned char*)"downdownarrows", {226, 135, 138, 0}},
927
+{(unsigned char*)"downharpoonleft", {226, 135, 131, 0}},
928
+{(unsigned char*)"downharpoonright", {226, 135, 130, 0}},
929
+{(unsigned char*)"drbkarow", {226, 164, 144, 0}},
930
+{(unsigned char*)"drcorn", {226, 140, 159, 0}},
931
+{(unsigned char*)"drcrop", {226, 140, 140, 0}},
932
+{(unsigned char*)"dscr", {240, 157, 146, 185, 0}},
933
+{(unsigned char*)"dscy", {209, 149, 0}},
934
+{(unsigned char*)"dsol", {226, 167, 182, 0}},
935
+{(unsigned char*)"dstrok", {196, 145, 0}},
936
+{(unsigned char*)"dtdot", {226, 139, 177, 0}},
937
+{(unsigned char*)"dtri", {226, 150, 191, 0}},
938
+{(unsigned char*)"dtrif", {226, 150, 190, 0}},
939
+{(unsigned char*)"duarr", {226, 135, 181, 0}},
940
+{(unsigned char*)"duhar", {226, 165, 175, 0}},
941
+{(unsigned char*)"dwangle", {226, 166, 166, 0}},
942
+{(unsigned char*)"dzcy", {209, 159, 0}},
943
+{(unsigned char*)"dzigrarr", {226, 159, 191, 0}},
944
+{(unsigned char*)"eDDot", {226, 169, 183, 0}},
945
+{(unsigned char*)"eDot", {226, 137, 145, 0}},
946
+{(unsigned char*)"eacute", {195, 169, 0}},
947
+{(unsigned char*)"easter", {226, 169, 174, 0}},
948
+{(unsigned char*)"ecaron", {196, 155, 0}},
949
+{(unsigned char*)"ecir", {226, 137, 150, 0}},
950
+{(unsigned char*)"ecirc", {195, 170, 0}},
951
+{(unsigned char*)"ecolon", {226, 137, 149, 0}},
952
+{(unsigned char*)"ecy", {209, 141, 0}},
953
+{(unsigned char*)"edot", {196, 151, 0}},
954
+{(unsigned char*)"ee", {226, 133, 135, 0}},
955
+{(unsigned char*)"efDot", {226, 137, 146, 0}},
956
+{(unsigned char*)"efr", {240, 157, 148, 162, 0}},
957
+{(unsigned char*)"eg", {226, 170, 154, 0}},
958
+{(unsigned char*)"egrave", {195, 168, 0}},
959
+{(unsigned char*)"egs", {226, 170, 150, 0}},
960
+{(unsigned char*)"egsdot", {226, 170, 152, 0}},
961
+{(unsigned char*)"el", {226, 170, 153, 0}},
962
+{(unsigned char*)"elinters", {226, 143, 167, 0}},
963
+{(unsigned char*)"ell", {226, 132, 147, 0}},
964
+{(unsigned char*)"els", {226, 170, 149, 0}},
965
+{(unsigned char*)"elsdot", {226, 170, 151, 0}},
966
+{(unsigned char*)"emacr", {196, 147, 0}},
967
+{(unsigned char*)"empty", {226, 136, 133, 0}},
968
+{(unsigned char*)"emptyset", {226, 136, 133, 0}},
969
+{(unsigned char*)"emptyv", {226, 136, 133, 0}},
970
+{(unsigned char*)"emsp", {226, 128, 131, 0}},
971
+{(unsigned char*)"emsp13", {226, 128, 132, 0}},
972
+{(unsigned char*)"emsp14", {226, 128, 133, 0}},
973
+{(unsigned char*)"eng", {197, 139, 0}},
974
+{(unsigned char*)"ensp", {226, 128, 130, 0}},
975
+{(unsigned char*)"eogon", {196, 153, 0}},
976
+{(unsigned char*)"eopf", {240, 157, 149, 150, 0}},
977
+{(unsigned char*)"epar", {226, 139, 149, 0}},
978
+{(unsigned char*)"eparsl", {226, 167, 163, 0}},
979
+{(unsigned char*)"eplus", {226, 169, 177, 0}},
980
+{(unsigned char*)"epsi", {206, 181, 0}},
981
+{(unsigned char*)"epsilon", {206, 181, 0}},
982
+{(unsigned char*)"epsiv", {207, 181, 0}},
983
+{(unsigned char*)"eqcirc", {226, 137, 150, 0}},
984
+{(unsigned char*)"eqcolon", {226, 137, 149, 0}},
985
+{(unsigned char*)"eqsim", {226, 137, 130, 0}},
986
+{(unsigned char*)"eqslantgtr", {226, 170, 150, 0}},
987
+{(unsigned char*)"eqslantless", {226, 170, 149, 0}},
988
+{(unsigned char*)"equals", {61, 0}},
989
+{(unsigned char*)"equest", {226, 137, 159, 0}},
990
+{(unsigned char*)"equiv", {226, 137, 161, 0}},
991
+{(unsigned char*)"equivDD", {226, 169, 184, 0}},
992
+{(unsigned char*)"eqvparsl", {226, 167, 165, 0}},
993
+{(unsigned char*)"erDot", {226, 137, 147, 0}},
994
+{(unsigned char*)"erarr", {226, 165, 177, 0}},
995
+{(unsigned char*)"escr", {226, 132, 175, 0}},
996
+{(unsigned char*)"esdot", {226, 137, 144, 0}},
997
+{(unsigned char*)"esim", {226, 137, 130, 0}},
998
+{(unsigned char*)"eta", {206, 183, 0}},
999
+{(unsigned char*)"eth", {195, 176, 0}},
1000
+{(unsigned char*)"euml", {195, 171, 0}},
1001
+{(unsigned char*)"euro", {226, 130, 172, 0}},
1002
+{(unsigned char*)"excl", {33, 0}},
1003
+{(unsigned char*)"exist", {226, 136, 131, 0}},
1004
+{(unsigned char*)"expectation", {226, 132, 176, 0}},
1005
+{(unsigned char*)"exponentiale", {226, 133, 135, 0}},
1006
+{(unsigned char*)"fallingdotseq", {226, 137, 146, 0}},
1007
+{(unsigned char*)"fcy", {209, 132, 0}},
1008
+{(unsigned char*)"female", {226, 153, 128, 0}},
1009
+{(unsigned char*)"ffilig", {239, 172, 131, 0}},
1010
+{(unsigned char*)"fflig", {239, 172, 128, 0}},
1011
+{(unsigned char*)"ffllig", {239, 172, 132, 0}},
1012
+{(unsigned char*)"ffr", {240, 157, 148, 163, 0}},
1013
+{(unsigned char*)"filig", {239, 172, 129, 0}},
1014
+{(unsigned char*)"fjlig", {102, 106, 0}},
1015
+{(unsigned char*)"flat", {226, 153, 173, 0}},
1016
+{(unsigned char*)"fllig", {239, 172, 130, 0}},
1017
+{(unsigned char*)"fltns", {226, 150, 177, 0}},
1018
+{(unsigned char*)"fnof", {198, 146, 0}},
1019
+{(unsigned char*)"fopf", {240, 157, 149, 151, 0}},
1020
+{(unsigned char*)"forall", {226, 136, 128, 0}},
1021
+{(unsigned char*)"fork", {226, 139, 148, 0}},
1022
+{(unsigned char*)"forkv", {226, 171, 153, 0}},
1023
+{(unsigned char*)"fpartint", {226, 168, 141, 0}},
1024
+{(unsigned char*)"frac12", {194, 189, 0}},
1025
+{(unsigned char*)"frac13", {226, 133, 147, 0}},
1026
+{(unsigned char*)"frac14", {194, 188, 0}},
1027
+{(unsigned char*)"frac15", {226, 133, 149, 0}},
1028
+{(unsigned char*)"frac16", {226, 133, 153, 0}},
1029
+{(unsigned char*)"frac18", {226, 133, 155, 0}},
1030
+{(unsigned char*)"frac23", {226, 133, 148, 0}},
1031
+{(unsigned char*)"frac25", {226, 133, 150, 0}},
1032
+{(unsigned char*)"frac34", {194, 190, 0}},
1033
+{(unsigned char*)"frac35", {226, 133, 151, 0}},
1034
+{(unsigned char*)"frac38", {226, 133, 156, 0}},
1035
+{(unsigned char*)"frac45", {226, 133, 152, 0}},
1036
+{(unsigned char*)"frac56", {226, 133, 154, 0}},
1037
+{(unsigned char*)"frac58", {226, 133, 157, 0}},
1038
+{(unsigned char*)"frac78", {226, 133, 158, 0}},
1039
+{(unsigned char*)"frasl", {226, 129, 132, 0}},
1040
+{(unsigned char*)"frown", {226, 140, 162, 0}},
1041
+{(unsigned char*)"fscr", {240, 157, 146, 187, 0}},
1042
+{(unsigned char*)"gE", {226, 137, 167, 0}},
1043
+{(unsigned char*)"gEl", {226, 170, 140, 0}},
1044
+{(unsigned char*)"gacute", {199, 181, 0}},
1045
+{(unsigned char*)"gamma", {206, 179, 0}},
1046
+{(unsigned char*)"gammad", {207, 157, 0}},
1047
+{(unsigned char*)"gap", {226, 170, 134, 0}},
1048
+{(unsigned char*)"gbreve", {196, 159, 0}},
1049
+{(unsigned char*)"gcirc", {196, 157, 0}},
1050
+{(unsigned char*)"gcy", {208, 179, 0}},
1051
+{(unsigned char*)"gdot", {196, 161, 0}},
1052
+{(unsigned char*)"ge", {226, 137, 165, 0}},
1053
+{(unsigned char*)"gel", {226, 139, 155, 0}},
1054
+{(unsigned char*)"geq", {226, 137, 165, 0}},
1055
+{(unsigned char*)"geqq", {226, 137, 167, 0}},
1056
+{(unsigned char*)"geqslant", {226, 169, 190, 0}},
1057
+{(unsigned char*)"ges", {226, 169, 190, 0}},
1058
+{(unsigned char*)"gescc", {226, 170, 169, 0}},
1059
+{(unsigned char*)"gesdot", {226, 170, 128, 0}},
1060
+{(unsigned char*)"gesdoto", {226, 170, 130, 0}},
1061
+{(unsigned char*)"gesdotol", {226, 170, 132, 0}},
1062
+{(unsigned char*)"gesl", {226, 139, 155, 239, 184, 128, 0}},
1063
+{(unsigned char*)"gesles", {226, 170, 148, 0}},
1064
+{(unsigned char*)"gfr", {240, 157, 148, 164, 0}},
1065
+{(unsigned char*)"gg", {226, 137, 171, 0}},
1066
+{(unsigned char*)"ggg", {226, 139, 153, 0}},
1067
+{(unsigned char*)"gimel", {226, 132, 183, 0}},
1068
+{(unsigned char*)"gjcy", {209, 147, 0}},
1069
+{(unsigned char*)"gl", {226, 137, 183, 0}},
1070
+{(unsigned char*)"glE", {226, 170, 146, 0}},
1071
+{(unsigned char*)"gla", {226, 170, 165, 0}},
1072
+{(unsigned char*)"glj", {226, 170, 164, 0}},
1073
+{(unsigned char*)"gnE", {226, 137, 169, 0}},
1074
+{(unsigned char*)"gnap", {226, 170, 138, 0}},
1075
+{(unsigned char*)"gnapprox", {226, 170, 138, 0}},
1076
+{(unsigned char*)"gne", {226, 170, 136, 0}},
1077
+{(unsigned char*)"gneq", {226, 170, 136, 0}},
1078
+{(unsigned char*)"gneqq", {226, 137, 169, 0}},
1079
+{(unsigned char*)"gnsim", {226, 139, 167, 0}},
1080
+{(unsigned char*)"gopf", {240, 157, 149, 152, 0}},
1081
+{(unsigned char*)"grave", {96, 0}},
1082
+{(unsigned char*)"gscr", {226, 132, 138, 0}},
1083
+{(unsigned char*)"gsim", {226, 137, 179, 0}},
1084
+{(unsigned char*)"gsime", {226, 170, 142, 0}},
1085
+{(unsigned char*)"gsiml", {226, 170, 144, 0}},
1086
+{(unsigned char*)"gt", {62, 0}},
1087
+{(unsigned char*)"gtcc", {226, 170, 167, 0}},
1088
+{(unsigned char*)"gtcir", {226, 169, 186, 0}},
1089
+{(unsigned char*)"gtdot", {226, 139, 151, 0}},
1090
+{(unsigned char*)"gtlPar", {226, 166, 149, 0}},
1091
+{(unsigned char*)"gtquest", {226, 169, 188, 0}},
1092
+{(unsigned char*)"gtrapprox", {226, 170, 134, 0}},
1093
+{(unsigned char*)"gtrarr", {226, 165, 184, 0}},
1094
+{(unsigned char*)"gtrdot", {226, 139, 151, 0}},
1095
+{(unsigned char*)"gtreqless", {226, 139, 155, 0}},
1096
+{(unsigned char*)"gtreqqless", {226, 170, 140, 0}},
1097
+{(unsigned char*)"gtrless", {226, 137, 183, 0}},
1098
+{(unsigned char*)"gtrsim", {226, 137, 179, 0}},
1099
+{(unsigned char*)"gvertneqq", {226, 137, 169, 239, 184, 128, 0}},
1100
+{(unsigned char*)"gvnE", {226, 137, 169, 239, 184, 128, 0}},
1101
+{(unsigned char*)"hArr", {226, 135, 148, 0}},
1102
+{(unsigned char*)"hairsp", {226, 128, 138, 0}},
1103
+{(unsigned char*)"half", {194, 189, 0}},
1104
+{(unsigned char*)"hamilt", {226, 132, 139, 0}},
1105
+{(unsigned char*)"hardcy", {209, 138, 0}},
1106
+{(unsigned char*)"harr", {226, 134, 148, 0}},
1107
+{(unsigned char*)"harrcir", {226, 165, 136, 0}},
1108
+{(unsigned char*)"harrw", {226, 134, 173, 0}},
1109
+{(unsigned char*)"hbar", {226, 132, 143, 0}},
1110
+{(unsigned char*)"hcirc", {196, 165, 0}},
1111
+{(unsigned char*)"hearts", {226, 153, 165, 0}},
1112
+{(unsigned char*)"heartsuit", {226, 153, 165, 0}},
1113
+{(unsigned char*)"hellip", {226, 128, 166, 0}},
1114
+{(unsigned char*)"hercon", {226, 138, 185, 0}},
1115
+{(unsigned char*)"hfr", {240, 157, 148, 165, 0}},
1116
+{(unsigned char*)"hksearow", {226, 164, 165, 0}},
1117
+{(unsigned char*)"hkswarow", {226, 164, 166, 0}},
1118
+{(unsigned char*)"hoarr", {226, 135, 191, 0}},
1119
+{(unsigned char*)"homtht", {226, 136, 187, 0}},
1120
+{(unsigned char*)"hookleftarrow", {226, 134, 169, 0}},
1121
+{(unsigned char*)"hookrightarrow", {226, 134, 170, 0}},
1122
+{(unsigned char*)"hopf", {240, 157, 149, 153, 0}},
1123
+{(unsigned char*)"horbar", {226, 128, 149, 0}},
1124
+{(unsigned char*)"hscr", {240, 157, 146, 189, 0}},
1125
+{(unsigned char*)"hslash", {226, 132, 143, 0}},
1126
+{(unsigned char*)"hstrok", {196, 167, 0}},
1127
+{(unsigned char*)"hybull", {226, 129, 131, 0}},
1128
+{(unsigned char*)"hyphen", {226, 128, 144, 0}},
1129
+{(unsigned char*)"iacute", {195, 173, 0}},
1130
+{(unsigned char*)"ic", {226, 129, 163, 0}},
1131
+{(unsigned char*)"icirc", {195, 174, 0}},
1132
+{(unsigned char*)"icy", {208, 184, 0}},
1133
+{(unsigned char*)"iecy", {208, 181, 0}},
1134
+{(unsigned char*)"iexcl", {194, 161, 0}},
1135
+{(unsigned char*)"iff", {226, 135, 148, 0}},
1136
+{(unsigned char*)"ifr", {240, 157, 148, 166, 0}},
1137
+{(unsigned char*)"igrave", {195, 172, 0}},
1138
+{(unsigned char*)"ii", {226, 133, 136, 0}},
1139
+{(unsigned char*)"iiiint", {226, 168, 140, 0}},
1140
+{(unsigned char*)"iiint", {226, 136, 173, 0}},
1141
+{(unsigned char*)"iinfin", {226, 167, 156, 0}},
1142
+{(unsigned char*)"iiota", {226, 132, 169, 0}},
1143
+{(unsigned char*)"ijlig", {196, 179, 0}},
1144
+{(unsigned char*)"imacr", {196, 171, 0}},
1145
+{(unsigned char*)"image", {226, 132, 145, 0}},
1146
+{(unsigned char*)"imagline", {226, 132, 144, 0}},
1147
+{(unsigned char*)"imagpart", {226, 132, 145, 0}},
1148
+{(unsigned char*)"imath", {196, 177, 0}},
1149
+{(unsigned char*)"imof", {226, 138, 183, 0}},
1150
+{(unsigned char*)"imped", {198, 181, 0}},
1151
+{(unsigned char*)"in", {226, 136, 136, 0}},
1152
+{(unsigned char*)"incare", {226, 132, 133, 0}},
1153
+{(unsigned char*)"infin", {226, 136, 158, 0}},
1154
+{(unsigned char*)"infintie", {226, 167, 157, 0}},
1155
+{(unsigned char*)"inodot", {196, 177, 0}},
1156
+{(unsigned char*)"int", {226, 136, 171, 0}},
1157
+{(unsigned char*)"intcal", {226, 138, 186, 0}},
1158
+{(unsigned char*)"integers", {226, 132, 164, 0}},
1159
+{(unsigned char*)"intercal", {226, 138, 186, 0}},
1160
+{(unsigned char*)"intlarhk", {226, 168, 151, 0}},
1161
+{(unsigned char*)"intprod", {226, 168, 188, 0}},
1162
+{(unsigned char*)"iocy", {209, 145, 0}},
1163
+{(unsigned char*)"iogon", {196, 175, 0}},
1164
+{(unsigned char*)"iopf", {240, 157, 149, 154, 0}},
1165
+{(unsigned char*)"iota", {206, 185, 0}},
1166
+{(unsigned char*)"iprod", {226, 168, 188, 0}},
1167
+{(unsigned char*)"iquest", {194, 191, 0}},
1168
+{(unsigned char*)"iscr", {240, 157, 146, 190, 0}},
1169
+{(unsigned char*)"isin", {226, 136, 136, 0}},
1170
+{(unsigned char*)"isinE", {226, 139, 185, 0}},
1171
+{(unsigned char*)"isindot", {226, 139, 181, 0}},
1172
+{(unsigned char*)"isins", {226, 139, 180, 0}},
1173
+{(unsigned char*)"isinsv", {226, 139, 179, 0}},
1174
+{(unsigned char*)"isinv", {226, 136, 136, 0}},
1175
+{(unsigned char*)"it", {226, 129, 162, 0}},
1176
+{(unsigned char*)"itilde", {196, 169, 0}},
1177
+{(unsigned char*)"iukcy", {209, 150, 0}},
1178
+{(unsigned char*)"iuml", {195, 175, 0}},
1179
+{(unsigned char*)"jcirc", {196, 181, 0}},
1180
+{(unsigned char*)"jcy", {208, 185, 0}},
1181
+{(unsigned char*)"jfr", {240, 157, 148, 167, 0}},
1182
+{(unsigned char*)"jmath", {200, 183, 0}},
1183
+{(unsigned char*)"jopf", {240, 157, 149, 155, 0}},
1184
+{(unsigned char*)"jscr", {240, 157, 146, 191, 0}},
1185
+{(unsigned char*)"jsercy", {209, 152, 0}},
1186
+{(unsigned char*)"jukcy", {209, 148, 0}},
1187
+{(unsigned char*)"kappa", {206, 186, 0}},
1188
+{(unsigned char*)"kappav", {207, 176, 0}},
1189
+{(unsigned char*)"kcedil", {196, 183, 0}},
1190
+{(unsigned char*)"kcy", {208, 186, 0}},
1191
+{(unsigned char*)"kfr", {240, 157, 148, 168, 0}},
1192
+{(unsigned char*)"kgreen", {196, 184, 0}},
1193
+{(unsigned char*)"khcy", {209, 133, 0}},
1194
+{(unsigned char*)"kjcy", {209, 156, 0}},
1195
+{(unsigned char*)"kopf", {240, 157, 149, 156, 0}},
1196
+{(unsigned char*)"kscr", {240, 157, 147, 128, 0}},
1197
+{(unsigned char*)"lAarr", {226, 135, 154, 0}},
1198
+{(unsigned char*)"lArr", {226, 135, 144, 0}},
1199
+{(unsigned char*)"lAtail", {226, 164, 155, 0}},
1200
+{(unsigned char*)"lBarr", {226, 164, 142, 0}},
1201
+{(unsigned char*)"lE", {226, 137, 166, 0}},
1202
+{(unsigned char*)"lEg", {226, 170, 139, 0}},
1203
+{(unsigned char*)"lHar", {226, 165, 162, 0}},
1204
+{(unsigned char*)"lacute", {196, 186, 0}},
1205
+{(unsigned char*)"laemptyv", {226, 166, 180, 0}},
1206
+{(unsigned char*)"lagran", {226, 132, 146, 0}},
1207
+{(unsigned char*)"lambda", {206, 187, 0}},
1208
+{(unsigned char*)"lang", {226, 159, 168, 0}},
1209
+{(unsigned char*)"langd", {226, 166, 145, 0}},
1210
+{(unsigned char*)"langle", {226, 159, 168, 0}},
1211
+{(unsigned char*)"lap", {226, 170, 133, 0}},
1212
+{(unsigned char*)"laquo", {194, 171, 0}},
1213
+{(unsigned char*)"larr", {226, 134, 144, 0}},
1214
+{(unsigned char*)"larrb", {226, 135, 164, 0}},
1215
+{(unsigned char*)"larrbfs", {226, 164, 159, 0}},
1216
+{(unsigned char*)"larrfs", {226, 164, 157, 0}},
1217
+{(unsigned char*)"larrhk", {226, 134, 169, 0}},
1218
+{(unsigned char*)"larrlp", {226, 134, 171, 0}},
1219
+{(unsigned char*)"larrpl", {226, 164, 185, 0}},
1220
+{(unsigned char*)"larrsim", {226, 165, 179, 0}},
1221
+{(unsigned char*)"larrtl", {226, 134, 162, 0}},
1222
+{(unsigned char*)"lat", {226, 170, 171, 0}},
1223
+{(unsigned char*)"latail", {226, 164, 153, 0}},
1224
+{(unsigned char*)"late", {226, 170, 173, 0}},
1225
+{(unsigned char*)"lates", {226, 170, 173, 239, 184, 128, 0}},
1226
+{(unsigned char*)"lbarr", {226, 164, 140, 0}},
1227
+{(unsigned char*)"lbbrk", {226, 157, 178, 0}},
1228
+{(unsigned char*)"lbrace", {123, 0}},
1229
+{(unsigned char*)"lbrack", {91, 0}},
1230
+{(unsigned char*)"lbrke", {226, 166, 139, 0}},
1231
+{(unsigned char*)"lbrksld", {226, 166, 143, 0}},
1232
+{(unsigned char*)"lbrkslu", {226, 166, 141, 0}},
1233
+{(unsigned char*)"lcaron", {196, 190, 0}},
1234
+{(unsigned char*)"lcedil", {196, 188, 0}},
1235
+{(unsigned char*)"lceil", {226, 140, 136, 0}},
1236
+{(unsigned char*)"lcub", {123, 0}},
1237
+{(unsigned char*)"lcy", {208, 187, 0}},
1238
+{(unsigned char*)"ldca", {226, 164, 182, 0}},
1239
+{(unsigned char*)"ldquo", {226, 128, 156, 0}},
1240
+{(unsigned char*)"ldquor", {226, 128, 158, 0}},
1241
+{(unsigned char*)"ldrdhar", {226, 165, 167, 0}},
1242
+{(unsigned char*)"ldrushar", {226, 165, 139, 0}},
1243
+{(unsigned char*)"ldsh", {226, 134, 178, 0}},
1244
+{(unsigned char*)"le", {226, 137, 164, 0}},
1245
+{(unsigned char*)"leftarrow", {226, 134, 144, 0}},
1246
+{(unsigned char*)"leftarrowtail", {226, 134, 162, 0}},
1247
+{(unsigned char*)"leftharpoondown", {226, 134, 189, 0}},
1248
+{(unsigned char*)"leftharpoonup", {226, 134, 188, 0}},
1249
+{(unsigned char*)"leftleftarrows", {226, 135, 135, 0}},
1250
+{(unsigned char*)"leftrightarrow", {226, 134, 148, 0}},
1251
+{(unsigned char*)"leftrightarrows", {226, 135, 134, 0}},
1252
+{(unsigned char*)"leftrightharpoons", {226, 135, 139, 0}},
1253
+{(unsigned char*)"leftrightsquigarrow", {226, 134, 173, 0}},
1254
+{(unsigned char*)"leftthreetimes", {226, 139, 139, 0}},
1255
+{(unsigned char*)"leg", {226, 139, 154, 0}},
1256
+{(unsigned char*)"leq", {226, 137, 164, 0}},
1257
+{(unsigned char*)"leqq", {226, 137, 166, 0}},
1258
+{(unsigned char*)"leqslant", {226, 169, 189, 0}},
1259
+{(unsigned char*)"les", {226, 169, 189, 0}},
1260
+{(unsigned char*)"lescc", {226, 170, 168, 0}},
1261
+{(unsigned char*)"lesdot", {226, 169, 191, 0}},
1262
+{(unsigned char*)"lesdoto", {226, 170, 129, 0}},
1263
+{(unsigned char*)"lesdotor", {226, 170, 131, 0}},
1264
+{(unsigned char*)"lesg", {226, 139, 154, 239, 184, 128, 0}},
1265
+{(unsigned char*)"lesges", {226, 170, 147, 0}},
1266
+{(unsigned char*)"lessapprox", {226, 170, 133, 0}},
1267
+{(unsigned char*)"lessdot", {226, 139, 150, 0}},
1268
+{(unsigned char*)"lesseqgtr", {226, 139, 154, 0}},
1269
+{(unsigned char*)"lesseqqgtr", {226, 170, 139, 0}},
1270
+{(unsigned char*)"lessgtr", {226, 137, 182, 0}},
1271
+{(unsigned char*)"lesssim", {226, 137, 178, 0}},
1272
+{(unsigned char*)"lfisht", {226, 165, 188, 0}},
1273
+{(unsigned char*)"lfloor", {226, 140, 138, 0}},
1274
+{(unsigned char*)"lfr", {240, 157, 148, 169, 0}},
1275
+{(unsigned char*)"lg", {226, 137, 182, 0}},
1276
+{(unsigned char*)"lgE", {226, 170, 145, 0}},
1277
+{(unsigned char*)"lhard", {226, 134, 189, 0}},
1278
+{(unsigned char*)"lharu", {226, 134, 188, 0}},
1279
+{(unsigned char*)"lharul", {226, 165, 170, 0}},
1280
+{(unsigned char*)"lhblk", {226, 150, 132, 0}},
1281
+{(unsigned char*)"ljcy", {209, 153, 0}},
1282
+{(unsigned char*)"ll", {226, 137, 170, 0}},
1283
+{(unsigned char*)"llarr", {226, 135, 135, 0}},
1284
+{(unsigned char*)"llcorner", {226, 140, 158, 0}},
1285
+{(unsigned char*)"llhard", {226, 165, 171, 0}},
1286
+{(unsigned char*)"lltri", {226, 151, 186, 0}},
1287
+{(unsigned char*)"lmidot", {197, 128, 0}},
1288
+{(unsigned char*)"lmoust", {226, 142, 176, 0}},
1289
+{(unsigned char*)"lmoustache", {226, 142, 176, 0}},
1290
+{(unsigned char*)"lnE", {226, 137, 168, 0}},
1291
+{(unsigned char*)"lnap", {226, 170, 137, 0}},
1292
+{(unsigned char*)"lnapprox", {226, 170, 137, 0}},
1293
+{(unsigned char*)"lne", {226, 170, 135, 0}},
1294
+{(unsigned char*)"lneq", {226, 170, 135, 0}},
1295
+{(unsigned char*)"lneqq", {226, 137, 168, 0}},
1296
+{(unsigned char*)"lnsim", {226, 139, 166, 0}},
1297
+{(unsigned char*)"loang", {226, 159, 172, 0}},
1298
+{(unsigned char*)"loarr", {226, 135, 189, 0}},
1299
+{(unsigned char*)"lobrk", {226, 159, 166, 0}},
1300
+{(unsigned char*)"longleftarrow", {226, 159, 181, 0}},
1301
+{(unsigned char*)"longleftrightarrow", {226, 159, 183, 0}},
1302
+{(unsigned char*)"longmapsto", {226, 159, 188, 0}},
1303
+{(unsigned char*)"longrightarrow", {226, 159, 182, 0}},
1304
+{(unsigned char*)"looparrowleft", {226, 134, 171, 0}},
1305
+{(unsigned char*)"looparrowright", {226, 134, 172, 0}},
1306
+{(unsigned char*)"lopar", {226, 166, 133, 0}},
1307
+{(unsigned char*)"lopf", {240, 157, 149, 157, 0}},
1308
+{(unsigned char*)"loplus", {226, 168, 173, 0}},
1309
+{(unsigned char*)"lotimes", {226, 168, 180, 0}},
1310
+{(unsigned char*)"lowast", {226, 136, 151, 0}},
1311
+{(unsigned char*)"lowbar", {95, 0}},
1312
+{(unsigned char*)"loz", {226, 151, 138, 0}},
1313
+{(unsigned char*)"lozenge", {226, 151, 138, 0}},
1314
+{(unsigned char*)"lozf", {226, 167, 171, 0}},
1315
+{(unsigned char*)"lpar", {40, 0}},
1316
+{(unsigned char*)"lparlt", {226, 166, 147, 0}},
1317
+{(unsigned char*)"lrarr", {226, 135, 134, 0}},
1318
+{(unsigned char*)"lrcorner", {226, 140, 159, 0}},
1319
+{(unsigned char*)"lrhar", {226, 135, 139, 0}},
1320
+{(unsigned char*)"lrhard", {226, 165, 173, 0}},
1321
+{(unsigned char*)"lrm", {226, 128, 142, 0}},
1322
+{(unsigned char*)"lrtri", {226, 138, 191, 0}},
1323
+{(unsigned char*)"lsaquo", {226, 128, 185, 0}},
1324
+{(unsigned char*)"lscr", {240, 157, 147, 129, 0}},
1325
+{(unsigned char*)"lsh", {226, 134, 176, 0}},
1326
+{(unsigned char*)"lsim", {226, 137, 178, 0}},
1327
+{(unsigned char*)"lsime", {226, 170, 141, 0}},
1328
+{(unsigned char*)"lsimg", {226, 170, 143, 0}},
1329
+{(unsigned char*)"lsqb", {91, 0}},
1330
+{(unsigned char*)"lsquo", {226, 128, 152, 0}},
1331
+{(unsigned char*)"lsquor", {226, 128, 154, 0}},
1332
+{(unsigned char*)"lstrok", {197, 130, 0}},
1333
+{(unsigned char*)"lt", {60, 0}},
1334
+{(unsigned char*)"ltcc", {226, 170, 166, 0}},
1335
+{(unsigned char*)"ltcir", {226, 169, 185, 0}},
1336
+{(unsigned char*)"ltdot", {226, 139, 150, 0}},
1337
+{(unsigned char*)"lthree", {226, 139, 139, 0}},
1338
+{(unsigned char*)"ltimes", {226, 139, 137, 0}},
1339
+{(unsigned char*)"ltlarr", {226, 165, 182, 0}},
1340
+{(unsigned char*)"ltquest", {226, 169, 187, 0}},
1341
+{(unsigned char*)"ltrPar", {226, 166, 150, 0}},
1342
+{(unsigned char*)"ltri", {226, 151, 131, 0}},
1343
+{(unsigned char*)"ltrie", {226, 138, 180, 0}},
1344
+{(unsigned char*)"ltrif", {226, 151, 130, 0}},
1345
+{(unsigned char*)"lurdshar", {226, 165, 138, 0}},
1346
+{(unsigned char*)"luruhar", {226, 165, 166, 0}},
1347
+{(unsigned char*)"lvertneqq", {226, 137, 168, 239, 184, 128, 0}},
1348
+{(unsigned char*)"lvnE", {226, 137, 168, 239, 184, 128, 0}},
1349
+{(unsigned char*)"mDDot", {226, 136, 186, 0}},
1350
+{(unsigned char*)"macr", {194, 175, 0}},
1351
+{(unsigned char*)"male", {226, 153, 130, 0}},
1352
+{(unsigned char*)"malt", {226, 156, 160, 0}},
1353
+{(unsigned char*)"maltese", {226, 156, 160, 0}},
1354
+{(unsigned char*)"map", {226, 134, 166, 0}},
1355
+{(unsigned char*)"mapsto", {226, 134, 166, 0}},
1356
+{(unsigned char*)"mapstodown", {226, 134, 167, 0}},
1357
+{(unsigned char*)"mapstoleft", {226, 134, 164, 0}},
1358
+{(unsigned char*)"mapstoup", {226, 134, 165, 0}},
1359
+{(unsigned char*)"marker", {226, 150, 174, 0}},
1360
+{(unsigned char*)"mcomma", {226, 168, 169, 0}},
1361
+{(unsigned char*)"mcy", {208, 188, 0}},
1362
+{(unsigned char*)"mdash", {226, 128, 148, 0}},
1363
+{(unsigned char*)"measuredangle", {226, 136, 161, 0}},
1364
+{(unsigned char*)"mfr", {240, 157, 148, 170, 0}},
1365
+{(unsigned char*)"mho", {226, 132, 167, 0}},
1366
+{(unsigned char*)"micro", {194, 181, 0}},
1367
+{(unsigned char*)"mid", {226, 136, 163, 0}},
1368
+{(unsigned char*)"midast", {42, 0}},
1369
+{(unsigned char*)"midcir", {226, 171, 176, 0}},
1370
+{(unsigned char*)"middot", {194, 183, 0}},
1371
+{(unsigned char*)"minus", {226, 136, 146, 0}},
1372
+{(unsigned char*)"minusb", {226, 138, 159, 0}},
1373
+{(unsigned char*)"minusd", {226, 136, 184, 0}},
1374
+{(unsigned char*)"minusdu", {226, 168, 170, 0}},
1375
+{(unsigned char*)"mlcp", {226, 171, 155, 0}},
1376
+{(unsigned char*)"mldr", {226, 128, 166, 0}},
1377
+{(unsigned char*)"mnplus", {226, 136, 147, 0}},
1378
+{(unsigned char*)"models", {226, 138, 167, 0}},
1379
+{(unsigned char*)"mopf", {240, 157, 149, 158, 0}},
1380
+{(unsigned char*)"mp", {226, 136, 147, 0}},
1381
+{(unsigned char*)"mscr", {240, 157, 147, 130, 0}},
1382
+{(unsigned char*)"mstpos", {226, 136, 190, 0}},
1383
+{(unsigned char*)"mu", {206, 188, 0}},
1384
+{(unsigned char*)"multimap", {226, 138, 184, 0}},
1385
+{(unsigned char*)"mumap", {226, 138, 184, 0}},
1386
+{(unsigned char*)"nGg", {226, 139, 153, 204, 184, 0}},
1387
+{(unsigned char*)"nGt", {226, 137, 171, 226, 131, 146, 0}},
1388
+{(unsigned char*)"nGtv", {226, 137, 171, 204, 184, 0}},
1389
+{(unsigned char*)"nLeftarrow", {226, 135, 141, 0}},
1390
+{(unsigned char*)"nLeftrightarrow", {226, 135, 142, 0}},
1391
+{(unsigned char*)"nLl", {226, 139, 152, 204, 184, 0}},
1392
+{(unsigned char*)"nLt", {226, 137, 170, 226, 131, 146, 0}},
1393
+{(unsigned char*)"nLtv", {226, 137, 170, 204, 184, 0}},
1394
+{(unsigned char*)"nRightarrow", {226, 135, 143, 0}},
1395
+{(unsigned char*)"nVDash", {226, 138, 175, 0}},
1396
+{(unsigned char*)"nVdash", {226, 138, 174, 0}},
1397
+{(unsigned char*)"nabla", {226, 136, 135, 0}},
1398
+{(unsigned char*)"nacute", {197, 132, 0}},
1399
+{(unsigned char*)"nang", {226, 136, 160, 226, 131, 146, 0}},
1400
+{(unsigned char*)"nap", {226, 137, 137, 0}},
1401
+{(unsigned char*)"napE", {226, 169, 176, 204, 184, 0}},
1402
+{(unsigned char*)"napid", {226, 137, 139, 204, 184, 0}},
1403
+{(unsigned char*)"napos", {197, 137, 0}},
1404
+{(unsigned char*)"napprox", {226, 137, 137, 0}},
1405
+{(unsigned char*)"natur", {226, 153, 174, 0}},
1406
+{(unsigned char*)"natural", {226, 153, 174, 0}},
1407
+{(unsigned char*)"naturals", {226, 132, 149, 0}},
1408
+{(unsigned char*)"nbsp", {194, 160, 0}},
1409
+{(unsigned char*)"nbump", {226, 137, 142, 204, 184, 0}},
1410
+{(unsigned char*)"nbumpe", {226, 137, 143, 204, 184, 0}},
1411
+{(unsigned char*)"ncap", {226, 169, 131, 0}},
1412
+{(unsigned char*)"ncaron", {197, 136, 0}},
1413
+{(unsigned char*)"ncedil", {197, 134, 0}},
1414
+{(unsigned char*)"ncong", {226, 137, 135, 0}},
1415
+{(unsigned char*)"ncongdot", {226, 169, 173, 204, 184, 0}},
1416
+{(unsigned char*)"ncup", {226, 169, 130, 0}},
1417
+{(unsigned char*)"ncy", {208, 189, 0}},
1418
+{(unsigned char*)"ndash", {226, 128, 147, 0}},
1419
+{(unsigned char*)"ne", {226, 137, 160, 0}},
1420
+{(unsigned char*)"neArr", {226, 135, 151, 0}},
1421
+{(unsigned char*)"nearhk", {226, 164, 164, 0}},
1422
+{(unsigned char*)"nearr", {226, 134, 151, 0}},
1423
+{(unsigned char*)"nearrow", {226, 134, 151, 0}},
1424
+{(unsigned char*)"nedot", {226, 137, 144, 204, 184, 0}},
1425
+{(unsigned char*)"nequiv", {226, 137, 162, 0}},
1426
+{(unsigned char*)"nesear", {226, 164, 168, 0}},
1427
+{(unsigned char*)"nesim", {226, 137, 130, 204, 184, 0}},
1428
+{(unsigned char*)"nexist", {226, 136, 132, 0}},
1429
+{(unsigned char*)"nexists", {226, 136, 132, 0}},
1430
+{(unsigned char*)"nfr", {240, 157, 148, 171, 0}},
1431
+{(unsigned char*)"ngE", {226, 137, 167, 204, 184, 0}},
1432
+{(unsigned char*)"nge", {226, 137, 177, 0}},
1433
+{(unsigned char*)"ngeq", {226, 137, 177, 0}},
1434
+{(unsigned char*)"ngeqq", {226, 137, 167, 204, 184, 0}},
1435
+{(unsigned char*)"ngeqslant", {226, 169, 190, 204, 184, 0}},
1436
+{(unsigned char*)"nges", {226, 169, 190, 204, 184, 0}},
1437
+{(unsigned char*)"ngsim", {226, 137, 181, 0}},
1438
+{(unsigned char*)"ngt", {226, 137, 175, 0}},
1439
+{(unsigned char*)"ngtr", {226, 137, 175, 0}},
1440
+{(unsigned char*)"nhArr", {226, 135, 142, 0}},
1441
+{(unsigned char*)"nharr", {226, 134, 174, 0}},
1442
+{(unsigned char*)"nhpar", {226, 171, 178, 0}},
1443
+{(unsigned char*)"ni", {226, 136, 139, 0}},
1444
+{(unsigned char*)"nis", {226, 139, 188, 0}},
1445
+{(unsigned char*)"nisd", {226, 139, 186, 0}},
1446
+{(unsigned char*)"niv", {226, 136, 139, 0}},
1447
+{(unsigned char*)"njcy", {209, 154, 0}},
1448
+{(unsigned char*)"nlArr", {226, 135, 141, 0}},
1449
+{(unsigned char*)"nlE", {226, 137, 166, 204, 184, 0}},
1450
+{(unsigned char*)"nlarr", {226, 134, 154, 0}},
1451
+{(unsigned char*)"nldr", {226, 128, 165, 0}},
1452
+{(unsigned char*)"nle", {226, 137, 176, 0}},
1453
+{(unsigned char*)"nleftarrow", {226, 134, 154, 0}},
1454
+{(unsigned char*)"nleftrightarrow", {226, 134, 174, 0}},
1455
+{(unsigned char*)"nleq", {226, 137, 176, 0}},
1456
+{(unsigned char*)"nleqq", {226, 137, 166, 204, 184, 0}},
1457
+{(unsigned char*)"nleqslant", {226, 169, 189, 204, 184, 0}},
1458
+{(unsigned char*)"nles", {226, 169, 189, 204, 184, 0}},
1459
+{(unsigned char*)"nless", {226, 137, 174, 0}},
1460
+{(unsigned char*)"nlsim", {226, 137, 180, 0}},
1461
+{(unsigned char*)"nlt", {226, 137, 174, 0}},
1462
+{(unsigned char*)"nltri", {226, 139, 170, 0}},
1463
+{(unsigned char*)"nltrie", {226, 139, 172, 0}},
1464
+{(unsigned char*)"nmid", {226, 136, 164, 0}},
1465
+{(unsigned char*)"nopf", {240, 157, 149, 159, 0}},
1466
+{(unsigned char*)"not", {194, 172, 0}},
1467
+{(unsigned char*)"notin", {226, 136, 137, 0}},
1468
+{(unsigned char*)"notinE", {226, 139, 185, 204, 184, 0}},
1469
+{(unsigned char*)"notindot", {226, 139, 181, 204, 184, 0}},
1470
+{(unsigned char*)"notinva", {226, 136, 137, 0}},
1471
+{(unsigned char*)"notinvb", {226, 139, 183, 0}},
1472
+{(unsigned char*)"notinvc", {226, 139, 182, 0}},
1473
+{(unsigned char*)"notni", {226, 136, 140, 0}},
1474
+{(unsigned char*)"notniva", {226, 136, 140, 0}},
1475
+{(unsigned char*)"notnivb", {226, 139, 190, 0}},
1476
+{(unsigned char*)"notnivc", {226, 139, 189, 0}},
1477
+{(unsigned char*)"npar", {226, 136, 166, 0}},
1478
+{(unsigned char*)"nparallel", {226, 136, 166, 0}},
1479
+{(unsigned char*)"nparsl", {226, 171, 189, 226, 131, 165, 0}},
1480
+{(unsigned char*)"npart", {226, 136, 130, 204, 184, 0}},
1481
+{(unsigned char*)"npolint", {226, 168, 148, 0}},
1482
+{(unsigned char*)"npr", {226, 138, 128, 0}},
1483
+{(unsigned char*)"nprcue", {226, 139, 160, 0}},
1484
+{(unsigned char*)"npre", {226, 170, 175, 204, 184, 0}},
1485
+{(unsigned char*)"nprec", {226, 138, 128, 0}},
1486
+{(unsigned char*)"npreceq", {226, 170, 175, 204, 184, 0}},
1487
+{(unsigned char*)"nrArr", {226, 135, 143, 0}},
1488
+{(unsigned char*)"nrarr", {226, 134, 155, 0}},
1489
+{(unsigned char*)"nrarrc", {226, 164, 179, 204, 184, 0}},
1490
+{(unsigned char*)"nrarrw", {226, 134, 157, 204, 184, 0}},
1491
+{(unsigned char*)"nrightarrow", {226, 134, 155, 0}},
1492
+{(unsigned char*)"nrtri", {226, 139, 171, 0}},
1493
+{(unsigned char*)"nrtrie", {226, 139, 173, 0}},
1494
+{(unsigned char*)"nsc", {226, 138, 129, 0}},
1495
+{(unsigned char*)"nsccue", {226, 139, 161, 0}},
1496
+{(unsigned char*)"nsce", {226, 170, 176, 204, 184, 0}},
1497
+{(unsigned char*)"nscr", {240, 157, 147, 131, 0}},
1498
+{(unsigned char*)"nshortmid", {226, 136, 164, 0}},
1499
+{(unsigned char*)"nshortparallel", {226, 136, 166, 0}},
1500
+{(unsigned char*)"nsim", {226, 137, 129, 0}},
1501
+{(unsigned char*)"nsime", {226, 137, 132, 0}},
1502
+{(unsigned char*)"nsimeq", {226, 137, 132, 0}},
1503
+{(unsigned char*)"nsmid", {226, 136, 164, 0}},
1504
+{(unsigned char*)"nspar", {226, 136, 166, 0}},
1505
+{(unsigned char*)"nsqsube", {226, 139, 162, 0}},
1506
+{(unsigned char*)"nsqsupe", {226, 139, 163, 0}},
1507
+{(unsigned char*)"nsub", {226, 138, 132, 0}},
1508
+{(unsigned char*)"nsubE", {226, 171, 133, 204, 184, 0}},
1509
+{(unsigned char*)"nsube", {226, 138, 136, 0}},
1510
+{(unsigned char*)"nsubset", {226, 138, 130, 226, 131, 146, 0}},
1511
+{(unsigned char*)"nsubseteq", {226, 138, 136, 0}},
1512
+{(unsigned char*)"nsubseteqq", {226, 171, 133, 204, 184, 0}},
1513
+{(unsigned char*)"nsucc", {226, 138, 129, 0}},
1514
+{(unsigned char*)"nsucceq", {226, 170, 176, 204, 184, 0}},
1515
+{(unsigned char*)"nsup", {226, 138, 133, 0}},
1516
+{(unsigned char*)"nsupE", {226, 171, 134, 204, 184, 0}},
1517
+{(unsigned char*)"nsupe", {226, 138, 137, 0}},
1518
+{(unsigned char*)"nsupset", {226, 138, 131, 226, 131, 146, 0}},
1519
+{(unsigned char*)"nsupseteq", {226, 138, 137, 0}},
1520
+{(unsigned char*)"nsupseteqq", {226, 171, 134, 204, 184, 0}},
1521
+{(unsigned char*)"ntgl", {226, 137, 185, 0}},
1522
+{(unsigned char*)"ntilde", {195, 177, 0}},
1523
+{(unsigned char*)"ntlg", {226, 137, 184, 0}},
1524
+{(unsigned char*)"ntriangleleft", {226, 139, 170, 0}},
1525
+{(unsigned char*)"ntrianglelefteq", {226, 139, 172, 0}},
1526
+{(unsigned char*)"ntriangleright", {226, 139, 171, 0}},
1527
+{(unsigned char*)"ntrianglerighteq", {226, 139, 173, 0}},
1528
+{(unsigned char*)"nu", {206, 189, 0}},
1529
+{(unsigned char*)"num", {35, 0}},
1530
+{(unsigned char*)"numero", {226, 132, 150, 0}},
1531
+{(unsigned char*)"numsp", {226, 128, 135, 0}},
1532
+{(unsigned char*)"nvDash", {226, 138, 173, 0}},
1533
+{(unsigned char*)"nvHarr", {226, 164, 132, 0}},
1534
+{(unsigned char*)"nvap", {226, 137, 141, 226, 131, 146, 0}},
1535
+{(unsigned char*)"nvdash", {226, 138, 172, 0}},
1536
+{(unsigned char*)"nvge", {226, 137, 165, 226, 131, 146, 0}},
1537
+{(unsigned char*)"nvgt", {62, 226, 131, 146, 0}},
1538
+{(unsigned char*)"nvinfin", {226, 167, 158, 0}},
1539
+{(unsigned char*)"nvlArr", {226, 164, 130, 0}},
1540
+{(unsigned char*)"nvle", {226, 137, 164, 226, 131, 146, 0}},
1541
+{(unsigned char*)"nvlt", {60, 226, 131, 146, 0}},
1542
+{(unsigned char*)"nvltrie", {226, 138, 180, 226, 131, 146, 0}},
1543
+{(unsigned char*)"nvrArr", {226, 164, 131, 0}},
1544
+{(unsigned char*)"nvrtrie", {226, 138, 181, 226, 131, 146, 0}},
1545
+{(unsigned char*)"nvsim", {226, 136, 188, 226, 131, 146, 0}},
1546
+{(unsigned char*)"nwArr", {226, 135, 150, 0}},
1547
+{(unsigned char*)"nwarhk", {226, 164, 163, 0}},
1548
+{(unsigned char*)"nwarr", {226, 134, 150, 0}},
1549
+{(unsigned char*)"nwarrow", {226, 134, 150, 0}},
1550
+{(unsigned char*)"nwnear", {226, 164, 167, 0}},
1551
+{(unsigned char*)"oS", {226, 147, 136, 0}},
1552
+{(unsigned char*)"oacute", {195, 179, 0}},
1553
+{(unsigned char*)"oast", {226, 138, 155, 0}},
1554
+{(unsigned char*)"ocir", {226, 138, 154, 0}},
1555
+{(unsigned char*)"ocirc", {195, 180, 0}},
1556
+{(unsigned char*)"ocy", {208, 190, 0}},
1557
+{(unsigned char*)"odash", {226, 138, 157, 0}},
1558
+{(unsigned char*)"odblac", {197, 145, 0}},
1559
+{(unsigned char*)"odiv", {226, 168, 184, 0}},
1560
+{(unsigned char*)"odot", {226, 138, 153, 0}},
1561
+{(unsigned char*)"odsold", {226, 166, 188, 0}},
1562
+{(unsigned char*)"oelig", {197, 147, 0}},
1563
+{(unsigned char*)"ofcir", {226, 166, 191, 0}},
1564
+{(unsigned char*)"ofr", {240, 157, 148, 172, 0}},
1565
+{(unsigned char*)"ogon", {203, 155, 0}},
1566
+{(unsigned char*)"ograve", {195, 178, 0}},
1567
+{(unsigned char*)"ogt", {226, 167, 129, 0}},
1568
+{(unsigned char*)"ohbar", {226, 166, 181, 0}},
1569
+{(unsigned char*)"ohm", {206, 169, 0}},
1570
+{(unsigned char*)"oint", {226, 136, 174, 0}},
1571
+{(unsigned char*)"olarr", {226, 134, 186, 0}},
1572
+{(unsigned char*)"olcir", {226, 166, 190, 0}},
1573
+{(unsigned char*)"olcross", {226, 166, 187, 0}},
1574
+{(unsigned char*)"oline", {226, 128, 190, 0}},
1575
+{(unsigned char*)"olt", {226, 167, 128, 0}},
1576
+{(unsigned char*)"omacr", {197, 141, 0}},
1577
+{(unsigned char*)"omega", {207, 137, 0}},
1578
+{(unsigned char*)"omicron", {206, 191, 0}},
1579
+{(unsigned char*)"omid", {226, 166, 182, 0}},
1580
+{(unsigned char*)"ominus", {226, 138, 150, 0}},
1581
+{(unsigned char*)"oopf", {240, 157, 149, 160, 0}},
1582
+{(unsigned char*)"opar", {226, 166, 183, 0}},
1583
+{(unsigned char*)"operp", {226, 166, 185, 0}},
1584
+{(unsigned char*)"oplus", {226, 138, 149, 0}},
1585
+{(unsigned char*)"or", {226, 136, 168, 0}},
1586
+{(unsigned char*)"orarr", {226, 134, 187, 0}},
1587
+{(unsigned char*)"ord", {226, 169, 157, 0}},
1588
+{(unsigned char*)"order", {226, 132, 180, 0}},
1589
+{(unsigned char*)"orderof", {226, 132, 180, 0}},
1590
+{(unsigned char*)"ordf", {194, 170, 0}},
1591
+{(unsigned char*)"ordm", {194, 186, 0}},
1592
+{(unsigned char*)"origof", {226, 138, 182, 0}},
1593
+{(unsigned char*)"oror", {226, 169, 150, 0}},
1594
+{(unsigned char*)"orslope", {226, 169, 151, 0}},
1595
+{(unsigned char*)"orv", {226, 169, 155, 0}},
1596
+{(unsigned char*)"oscr", {226, 132, 180, 0}},
1597
+{(unsigned char*)"oslash", {195, 184, 0}},
1598
+{(unsigned char*)"osol", {226, 138, 152, 0}},
1599
+{(unsigned char*)"otilde", {195, 181, 0}},
1600
+{(unsigned char*)"otimes", {226, 138, 151, 0}},
1601
+{(unsigned char*)"otimesas", {226, 168, 182, 0}},
1602
+{(unsigned char*)"ouml", {195, 182, 0}},
1603
+{(unsigned char*)"ovbar", {226, 140, 189, 0}},
1604
+{(unsigned char*)"par", {226, 136, 165, 0}},
1605
+{(unsigned char*)"para", {194, 182, 0}},
1606
+{(unsigned char*)"parallel", {226, 136, 165, 0}},
1607
+{(unsigned char*)"parsim", {226, 171, 179, 0}},
1608
+{(unsigned char*)"parsl", {226, 171, 189, 0}},
1609
+{(unsigned char*)"part", {226, 136, 130, 0}},
1610
+{(unsigned char*)"pcy", {208, 191, 0}},
1611
+{(unsigned char*)"percnt", {37, 0}},
1612
+{(unsigned char*)"period", {46, 0}},
1613
+{(unsigned char*)"permil", {226, 128, 176, 0}},
1614
+{(unsigned char*)"perp", {226, 138, 165, 0}},
1615
+{(unsigned char*)"pertenk", {226, 128, 177, 0}},
1616
+{(unsigned char*)"pfr", {240, 157, 148, 173, 0}},
1617
+{(unsigned char*)"phi", {207, 134, 0}},
1618
+{(unsigned char*)"phiv", {207, 149, 0}},
1619
+{(unsigned char*)"phmmat", {226, 132, 179, 0}},
1620
+{(unsigned char*)"phone", {226, 152, 142, 0}},
1621
+{(unsigned char*)"pi", {207, 128, 0}},
1622
+{(unsigned char*)"pitchfork", {226, 139, 148, 0}},
1623
+{(unsigned char*)"piv", {207, 150, 0}},
1624
+{(unsigned char*)"planck", {226, 132, 143, 0}},
1625
+{(unsigned char*)"planckh", {226, 132, 142, 0}},
1626
+{(unsigned char*)"plankv", {226, 132, 143, 0}},
1627
+{(unsigned char*)"plus", {43, 0}},
1628
+{(unsigned char*)"plusacir", {226, 168, 163, 0}},
1629
+{(unsigned char*)"plusb", {226, 138, 158, 0}},
1630
+{(unsigned char*)"pluscir", {226, 168, 162, 0}},
1631
+{(unsigned char*)"plusdo", {226, 136, 148, 0}},
1632
+{(unsigned char*)"plusdu", {226, 168, 165, 0}},
1633
+{(unsigned char*)"pluse", {226, 169, 178, 0}},
1634
+{(unsigned char*)"plusmn", {194, 177, 0}},
1635
+{(unsigned char*)"plussim", {226, 168, 166, 0}},
1636
+{(unsigned char*)"plustwo", {226, 168, 167, 0}},
1637
+{(unsigned char*)"pm", {194, 177, 0}},
1638
+{(unsigned char*)"pointint", {226, 168, 149, 0}},
1639
+{(unsigned char*)"popf", {240, 157, 149, 161, 0}},
1640
+{(unsigned char*)"pound", {194, 163, 0}},
1641
+{(unsigned char*)"pr", {226, 137, 186, 0}},
1642
+{(unsigned char*)"prE", {226, 170, 179, 0}},
1643
+{(unsigned char*)"prap", {226, 170, 183, 0}},
1644
+{(unsigned char*)"prcue", {226, 137, 188, 0}},
1645
+{(unsigned char*)"pre", {226, 170, 175, 0}},
1646
+{(unsigned char*)"prec", {226, 137, 186, 0}},
1647
+{(unsigned char*)"precapprox", {226, 170, 183, 0}},
1648
+{(unsigned char*)"preccurlyeq", {226, 137, 188, 0}},
1649
+{(unsigned char*)"preceq", {226, 170, 175, 0}},
1650
+{(unsigned char*)"precnapprox", {226, 170, 185, 0}},
1651
+{(unsigned char*)"precneqq", {226, 170, 181, 0}},
1652
+{(unsigned char*)"precnsim", {226, 139, 168, 0}},
1653
+{(unsigned char*)"precsim", {226, 137, 190, 0}},
1654
+{(unsigned char*)"prime", {226, 128, 178, 0}},
1655
+{(unsigned char*)"primes", {226, 132, 153, 0}},
1656
+{(unsigned char*)"prnE", {226, 170, 181, 0}},
1657
+{(unsigned char*)"prnap", {226, 170, 185, 0}},
1658
+{(unsigned char*)"prnsim", {226, 139, 168, 0}},
1659
+{(unsigned char*)"prod", {226, 136, 143, 0}},
1660
+{(unsigned char*)"profalar", {226, 140, 174, 0}},
1661
+{(unsigned char*)"profline", {226, 140, 146, 0}},
1662
+{(unsigned char*)"profsurf", {226, 140, 147, 0}},
1663
+{(unsigned char*)"prop", {226, 136, 157, 0}},
1664
+{(unsigned char*)"propto", {226, 136, 157, 0}},
1665
+{(unsigned char*)"prsim", {226, 137, 190, 0}},
1666
+{(unsigned char*)"prurel", {226, 138, 176, 0}},
1667
+{(unsigned char*)"pscr", {240, 157, 147, 133, 0}},
1668
+{(unsigned char*)"psi", {207, 136, 0}},
1669
+{(unsigned char*)"puncsp", {226, 128, 136, 0}},
1670
+{(unsigned char*)"qfr", {240, 157, 148, 174, 0}},
1671
+{(unsigned char*)"qint", {226, 168, 140, 0}},
1672
+{(unsigned char*)"qopf", {240, 157, 149, 162, 0}},
1673
+{(unsigned char*)"qprime", {226, 129, 151, 0}},
1674
+{(unsigned char*)"qscr", {240, 157, 147, 134, 0}},
1675
+{(unsigned char*)"quaternions", {226, 132, 141, 0}},
1676
+{(unsigned char*)"quatint", {226, 168, 150, 0}},
1677
+{(unsigned char*)"quest", {63, 0}},
1678
+{(unsigned char*)"questeq", {226, 137, 159, 0}},
1679
+{(unsigned char*)"quot", {34, 0}},
1680
+{(unsigned char*)"rAarr", {226, 135, 155, 0}},
1681
+{(unsigned char*)"rArr", {226, 135, 146, 0}},
1682
+{(unsigned char*)"rAtail", {226, 164, 156, 0}},
1683
+{(unsigned char*)"rBarr", {226, 164, 143, 0}},
1684
+{(unsigned char*)"rHar", {226, 165, 164, 0}},
1685
+{(unsigned char*)"race", {226, 136, 189, 204, 177, 0}},
1686
+{(unsigned char*)"racute", {197, 149, 0}},
1687
+{(unsigned char*)"radic", {226, 136, 154, 0}},
1688
+{(unsigned char*)"raemptyv", {226, 166, 179, 0}},
1689
+{(unsigned char*)"rang", {226, 159, 169, 0}},
1690
+{(unsigned char*)"rangd", {226, 166, 146, 0}},
1691
+{(unsigned char*)"range", {226, 166, 165, 0}},
1692
+{(unsigned char*)"rangle", {226, 159, 169, 0}},
1693
+{(unsigned char*)"raquo", {194, 187, 0}},
1694
+{(unsigned char*)"rarr", {226, 134, 146, 0}},
1695
+{(unsigned char*)"rarrap", {226, 165, 181, 0}},
1696
+{(unsigned char*)"rarrb", {226, 135, 165, 0}},
1697
+{(unsigned char*)"rarrbfs", {226, 164, 160, 0}},
1698
+{(unsigned char*)"rarrc", {226, 164, 179, 0}},
1699
+{(unsigned char*)"rarrfs", {226, 164, 158, 0}},
1700
+{(unsigned char*)"rarrhk", {226, 134, 170, 0}},
1701
+{(unsigned char*)"rarrlp", {226, 134, 172, 0}},
1702
+{(unsigned char*)"rarrpl", {226, 165, 133, 0}},
1703
+{(unsigned char*)"rarrsim", {226, 165, 180, 0}},
1704
+{(unsigned char*)"rarrtl", {226, 134, 163, 0}},
1705
+{(unsigned char*)"rarrw", {226, 134, 157, 0}},
1706
+{(unsigned char*)"ratail", {226, 164, 154, 0}},
1707
+{(unsigned char*)"ratio", {226, 136, 182, 0}},
1708
+{(unsigned char*)"rationals", {226, 132, 154, 0}},
1709
+{(unsigned char*)"rbarr", {226, 164, 141, 0}},
1710
+{(unsigned char*)"rbbrk", {226, 157, 179, 0}},
1711
+{(unsigned char*)"rbrace", {125, 0}},
1712
+{(unsigned char*)"rbrack", {93, 0}},
1713
+{(unsigned char*)"rbrke", {226, 166, 140, 0}},
1714
+{(unsigned char*)"rbrksld", {226, 166, 142, 0}},
1715
+{(unsigned char*)"rbrkslu", {226, 166, 144, 0}},
1716
+{(unsigned char*)"rcaron", {197, 153, 0}},
1717
+{(unsigned char*)"rcedil", {197, 151, 0}},
1718
+{(unsigned char*)"rceil", {226, 140, 137, 0}},
1719
+{(unsigned char*)"rcub", {125, 0}},
1720
+{(unsigned char*)"rcy", {209, 128, 0}},
1721
+{(unsigned char*)"rdca", {226, 164, 183, 0}},
1722
+{(unsigned char*)"rdldhar", {226, 165, 169, 0}},
1723
+{(unsigned char*)"rdquo", {226, 128, 157, 0}},
1724
+{(unsigned char*)"rdquor", {226, 128, 157, 0}},
1725
+{(unsigned char*)"rdsh", {226, 134, 179, 0}},
1726
+{(unsigned char*)"real", {226, 132, 156, 0}},
1727
+{(unsigned char*)"realine", {226, 132, 155, 0}},
1728
+{(unsigned char*)"realpart", {226, 132, 156, 0}},
1729
+{(unsigned char*)"reals", {226, 132, 157, 0}},
1730
+{(unsigned char*)"rect", {226, 150, 173, 0}},
1731
+{(unsigned char*)"reg", {194, 174, 0}},
1732
+{(unsigned char*)"rfisht", {226, 165, 189, 0}},
1733
+{(unsigned char*)"rfloor", {226, 140, 139, 0}},
1734
+{(unsigned char*)"rfr", {240, 157, 148, 175, 0}},
1735
+{(unsigned char*)"rhard", {226, 135, 129, 0}},
1736
+{(unsigned char*)"rharu", {226, 135, 128, 0}},
1737
+{(unsigned char*)"rharul", {226, 165, 172, 0}},
1738
+{(unsigned char*)"rho", {207, 129, 0}},
1739
+{(unsigned char*)"rhov", {207, 177, 0}},
1740
+{(unsigned char*)"rightarrow", {226, 134, 146, 0}},
1741
+{(unsigned char*)"rightarrowtail", {226, 134, 163, 0}},
1742
+{(unsigned char*)"rightharpoondown", {226, 135, 129, 0}},
1743
+{(unsigned char*)"rightharpoonup", {226, 135, 128, 0}},
1744
+{(unsigned char*)"rightleftarrows", {226, 135, 132, 0}},
1745
+{(unsigned char*)"rightleftharpoons", {226, 135, 140, 0}},
1746
+{(unsigned char*)"rightrightarrows", {226, 135, 137, 0}},
1747
+{(unsigned char*)"rightsquigarrow", {226, 134, 157, 0}},
1748
+{(unsigned char*)"rightthreetimes", {226, 139, 140, 0}},
1749
+{(unsigned char*)"ring", {203, 154, 0}},
1750
+{(unsigned char*)"risingdotseq", {226, 137, 147, 0}},
1751
+{(unsigned char*)"rlarr", {226, 135, 132, 0}},
1752
+{(unsigned char*)"rlhar", {226, 135, 140, 0}},
1753
+{(unsigned char*)"rlm", {226, 128, 143, 0}},
1754
+{(unsigned char*)"rmoust", {226, 142, 177, 0}},
1755
+{(unsigned char*)"rmoustache", {226, 142, 177, 0}},
1756
+{(unsigned char*)"rnmid", {226, 171, 174, 0}},
1757
+{(unsigned char*)"roang", {226, 159, 173, 0}},
1758
+{(unsigned char*)"roarr", {226, 135, 190, 0}},
1759
+{(unsigned char*)"robrk", {226, 159, 167, 0}},
1760
+{(unsigned char*)"ropar", {226, 166, 134, 0}},
1761
+{(unsigned char*)"ropf", {240, 157, 149, 163, 0}},
1762
+{(unsigned char*)"roplus", {226, 168, 174, 0}},
1763
+{(unsigned char*)"rotimes", {226, 168, 181, 0}},
1764
+{(unsigned char*)"rpar", {41, 0}},
1765
+{(unsigned char*)"rpargt", {226, 166, 148, 0}},
1766
+{(unsigned char*)"rppolint", {226, 168, 146, 0}},
1767
+{(unsigned char*)"rrarr", {226, 135, 137, 0}},
1768
+{(unsigned char*)"rsaquo", {226, 128, 186, 0}},
1769
+{(unsigned char*)"rscr", {240, 157, 147, 135, 0}},
1770
+{(unsigned char*)"rsh", {226, 134, 177, 0}},
1771
+{(unsigned char*)"rsqb", {93, 0}},
1772
+{(unsigned char*)"rsquo", {226, 128, 153, 0}},
1773
+{(unsigned char*)"rsquor", {226, 128, 153, 0}},
1774
+{(unsigned char*)"rthree", {226, 139, 140, 0}},
1775
+{(unsigned char*)"rtimes", {226, 139, 138, 0}},
1776
+{(unsigned char*)"rtri", {226, 150, 185, 0}},
1777
+{(unsigned char*)"rtrie", {226, 138, 181, 0}},
1778
+{(unsigned char*)"rtrif", {226, 150, 184, 0}},
1779
+{(unsigned char*)"rtriltri", {226, 167, 142, 0}},
1780
+{(unsigned char*)"ruluhar", {226, 165, 168, 0}},
1781
+{(unsigned char*)"rx", {226, 132, 158, 0}},
1782
+{(unsigned char*)"sacute", {197, 155, 0}},
1783
+{(unsigned char*)"sbquo", {226, 128, 154, 0}},
1784
+{(unsigned char*)"sc", {226, 137, 187, 0}},
1785
+{(unsigned char*)"scE", {226, 170, 180, 0}},
1786
+{(unsigned char*)"scap", {226, 170, 184, 0}},
1787
+{(unsigned char*)"scaron", {197, 161, 0}},
1788
+{(unsigned char*)"sccue", {226, 137, 189, 0}},
1789
+{(unsigned char*)"sce", {226, 170, 176, 0}},
1790
+{(unsigned char*)"scedil", {197, 159, 0}},
1791
+{(unsigned char*)"scirc", {197, 157, 0}},
1792
+{(unsigned char*)"scnE", {226, 170, 182, 0}},
1793
+{(unsigned char*)"scnap", {226, 170, 186, 0}},
1794
+{(unsigned char*)"scnsim", {226, 139, 169, 0}},
1795
+{(unsigned char*)"scpolint", {226, 168, 147, 0}},
1796
+{(unsigned char*)"scsim", {226, 137, 191, 0}},
1797
+{(unsigned char*)"scy", {209, 129, 0}},
1798
+{(unsigned char*)"sdot", {226, 139, 133, 0}},
1799
+{(unsigned char*)"sdotb", {226, 138, 161, 0}},
1800
+{(unsigned char*)"sdote", {226, 169, 166, 0}},
1801
+{(unsigned char*)"seArr", {226, 135, 152, 0}},
1802
+{(unsigned char*)"searhk", {226, 164, 165, 0}},
1803
+{(unsigned char*)"searr", {226, 134, 152, 0}},
1804
+{(unsigned char*)"searrow", {226, 134, 152, 0}},
1805
+{(unsigned char*)"sect", {194, 167, 0}},
1806
+{(unsigned char*)"semi", {59, 0}},
1807
+{(unsigned char*)"seswar", {226, 164, 169, 0}},
1808
+{(unsigned char*)"setminus", {226, 136, 150, 0}},
1809
+{(unsigned char*)"setmn", {226, 136, 150, 0}},
1810
+{(unsigned char*)"sext", {226, 156, 182, 0}},
1811
+{(unsigned char*)"sfr", {240, 157, 148, 176, 0}},
1812
+{(unsigned char*)"sfrown", {226, 140, 162, 0}},
1813
+{(unsigned char*)"sharp", {226, 153, 175, 0}},
1814
+{(unsigned char*)"shchcy", {209, 137, 0}},
1815
+{(unsigned char*)"shcy", {209, 136, 0}},
1816
+{(unsigned char*)"shortmid", {226, 136, 163, 0}},
1817
+{(unsigned char*)"shortparallel", {226, 136, 165, 0}},
1818
+{(unsigned char*)"shy", {194, 173, 0}},
1819
+{(unsigned char*)"sigma", {207, 131, 0}},
1820
+{(unsigned char*)"sigmaf", {207, 130, 0}},
1821
+{(unsigned char*)"sigmav", {207, 130, 0}},
1822
+{(unsigned char*)"sim", {226, 136, 188, 0}},
1823
+{(unsigned char*)"simdot", {226, 169, 170, 0}},
1824
+{(unsigned char*)"sime", {226, 137, 131, 0}},
1825
+{(unsigned char*)"simeq", {226, 137, 131, 0}},
1826
+{(unsigned char*)"simg", {226, 170, 158, 0}},
1827
+{(unsigned char*)"simgE", {226, 170, 160, 0}},
1828
+{(unsigned char*)"siml", {226, 170, 157, 0}},
1829
+{(unsigned char*)"simlE", {226, 170, 159, 0}},
1830
+{(unsigned char*)"simne", {226, 137, 134, 0}},
1831
+{(unsigned char*)"simplus", {226, 168, 164, 0}},
1832
+{(unsigned char*)"simrarr", {226, 165, 178, 0}},
1833
+{(unsigned char*)"slarr", {226, 134, 144, 0}},
1834
+{(unsigned char*)"smallsetminus", {226, 136, 150, 0}},
1835
+{(unsigned char*)"smashp", {226, 168, 179, 0}},
1836
+{(unsigned char*)"smeparsl", {226, 167, 164, 0}},
1837
+{(unsigned char*)"smid", {226, 136, 163, 0}},
1838
+{(unsigned char*)"smile", {226, 140, 163, 0}},
1839
+{(unsigned char*)"smt", {226, 170, 170, 0}},
1840
+{(unsigned char*)"smte", {226, 170, 172, 0}},
1841
+{(unsigned char*)"smtes", {226, 170, 172, 239, 184, 128, 0}},
1842
+{(unsigned char*)"softcy", {209, 140, 0}},
1843
+{(unsigned char*)"sol", {47, 0}},
1844
+{(unsigned char*)"solb", {226, 167, 132, 0}},
1845
+{(unsigned char*)"solbar", {226, 140, 191, 0}},
1846
+{(unsigned char*)"sopf", {240, 157, 149, 164, 0}},
1847
+{(unsigned char*)"spades", {226, 153, 160, 0}},
1848
+{(unsigned char*)"spadesuit", {226, 153, 160, 0}},
1849
+{(unsigned char*)"spar", {226, 136, 165, 0}},
1850
+{(unsigned char*)"sqcap", {226, 138, 147, 0}},
1851
+{(unsigned char*)"sqcaps", {226, 138, 147, 239, 184, 128, 0}},
1852
+{(unsigned char*)"sqcup", {226, 138, 148, 0}},
1853
+{(unsigned char*)"sqcups", {226, 138, 148, 239, 184, 128, 0}},
1854
+{(unsigned char*)"sqsub", {226, 138, 143, 0}},
1855
+{(unsigned char*)"sqsube", {226, 138, 145, 0}},
1856
+{(unsigned char*)"sqsubset", {226, 138, 143, 0}},
1857
+{(unsigned char*)"sqsubseteq", {226, 138, 145, 0}},
1858
+{(unsigned char*)"sqsup", {226, 138, 144, 0}},
1859
+{(unsigned char*)"sqsupe", {226, 138, 146, 0}},
1860
+{(unsigned char*)"sqsupset", {226, 138, 144, 0}},
1861
+{(unsigned char*)"sqsupseteq", {226, 138, 146, 0}},
1862
+{(unsigned char*)"squ", {226, 150, 161, 0}},
1863
+{(unsigned char*)"square", {226, 150, 161, 0}},
1864
+{(unsigned char*)"squarf", {226, 150, 170, 0}},
1865
+{(unsigned char*)"squf", {226, 150, 170, 0}},
1866
+{(unsigned char*)"srarr", {226, 134, 146, 0}},
1867
+{(unsigned char*)"sscr", {240, 157, 147, 136, 0}},
1868
+{(unsigned char*)"ssetmn", {226, 136, 150, 0}},
1869
+{(unsigned char*)"ssmile", {226, 140, 163, 0}},
1870
+{(unsigned char*)"sstarf", {226, 139, 134, 0}},
1871
+{(unsigned char*)"star", {226, 152, 134, 0}},
1872
+{(unsigned char*)"starf", {226, 152, 133, 0}},
1873
+{(unsigned char*)"straightepsilon", {207, 181, 0}},
1874
+{(unsigned char*)"straightphi", {207, 149, 0}},
1875
+{(unsigned char*)"strns", {194, 175, 0}},
1876
+{(unsigned char*)"sub", {226, 138, 130, 0}},
1877
+{(unsigned char*)"subE", {226, 171, 133, 0}},
1878
+{(unsigned char*)"subdot", {226, 170, 189, 0}},
1879
+{(unsigned char*)"sube", {226, 138, 134, 0}},
1880
+{(unsigned char*)"subedot", {226, 171, 131, 0}},
1881
+{(unsigned char*)"submult", {226, 171, 129, 0}},
1882
+{(unsigned char*)"subnE", {226, 171, 139, 0}},
1883
+{(unsigned char*)"subne", {226, 138, 138, 0}},
1884
+{(unsigned char*)"subplus", {226, 170, 191, 0}},
1885
+{(unsigned char*)"subrarr", {226, 165, 185, 0}},
1886
+{(unsigned char*)"subset", {226, 138, 130, 0}},
1887
+{(unsigned char*)"subseteq", {226, 138, 134, 0}},
1888
+{(unsigned char*)"subseteqq", {226, 171, 133, 0}},
1889
+{(unsigned char*)"subsetneq", {226, 138, 138, 0}},
1890
+{(unsigned char*)"subsetneqq", {226, 171, 139, 0}},
1891
+{(unsigned char*)"subsim", {226, 171, 135, 0}},
1892
+{(unsigned char*)"subsub", {226, 171, 149, 0}},
1893
+{(unsigned char*)"subsup", {226, 171, 147, 0}},
1894
+{(unsigned char*)"succ", {226, 137, 187, 0}},
1895
+{(unsigned char*)"succapprox", {226, 170, 184, 0}},
1896
+{(unsigned char*)"succcurlyeq", {226, 137, 189, 0}},
1897
+{(unsigned char*)"succeq", {226, 170, 176, 0}},
1898
+{(unsigned char*)"succnapprox", {226, 170, 186, 0}},
1899
+{(unsigned char*)"succneqq", {226, 170, 182, 0}},
1900
+{(unsigned char*)"succnsim", {226, 139, 169, 0}},
1901
+{(unsigned char*)"succsim", {226, 137, 191, 0}},
1902
+{(unsigned char*)"sum", {226, 136, 145, 0}},
1903
+{(unsigned char*)"sung", {226, 153, 170, 0}},
1904
+{(unsigned char*)"sup", {226, 138, 131, 0}},
1905
+{(unsigned char*)"sup1", {194, 185, 0}},
1906
+{(unsigned char*)"sup2", {194, 178, 0}},
1907
+{(unsigned char*)"sup3", {194, 179, 0}},
1908
+{(unsigned char*)"supE", {226, 171, 134, 0}},
1909
+{(unsigned char*)"supdot", {226, 170, 190, 0}},
1910
+{(unsigned char*)"supdsub", {226, 171, 152, 0}},
1911
+{(unsigned char*)"supe", {226, 138, 135, 0}},
1912
+{(unsigned char*)"supedot", {226, 171, 132, 0}},
1913
+{(unsigned char*)"suphsol", {226, 159, 137, 0}},
1914
+{(unsigned char*)"suphsub", {226, 171, 151, 0}},
1915
+{(unsigned char*)"suplarr", {226, 165, 187, 0}},
1916
+{(unsigned char*)"supmult", {226, 171, 130, 0}},
1917
+{(unsigned char*)"supnE", {226, 171, 140, 0}},
1918
+{(unsigned char*)"supne", {226, 138, 139, 0}},
1919
+{(unsigned char*)"supplus", {226, 171, 128, 0}},
1920
+{(unsigned char*)"supset", {226, 138, 131, 0}},
1921
+{(unsigned char*)"supseteq", {226, 138, 135, 0}},
1922
+{(unsigned char*)"supseteqq", {226, 171, 134, 0}},
1923
+{(unsigned char*)"supsetneq", {226, 138, 139, 0}},
1924
+{(unsigned char*)"supsetneqq", {226, 171, 140, 0}},
1925
+{(unsigned char*)"supsim", {226, 171, 136, 0}},
1926
+{(unsigned char*)"supsub", {226, 171, 148, 0}},
1927
+{(unsigned char*)"supsup", {226, 171, 150, 0}},
1928
+{(unsigned char*)"swArr", {226, 135, 153, 0}},
1929
+{(unsigned char*)"swarhk", {226, 164, 166, 0}},
1930
+{(unsigned char*)"swarr", {226, 134, 153, 0}},
1931
+{(unsigned char*)"swarrow", {226, 134, 153, 0}},
1932
+{(unsigned char*)"swnwar", {226, 164, 170, 0}},
1933
+{(unsigned char*)"szlig", {195, 159, 0}},
1934
+{(unsigned char*)"target", {226, 140, 150, 0}},
1935
+{(unsigned char*)"tau", {207, 132, 0}},
1936
+{(unsigned char*)"tbrk", {226, 142, 180, 0}},
1937
+{(unsigned char*)"tcaron", {197, 165, 0}},
1938
+{(unsigned char*)"tcedil", {197, 163, 0}},
1939
+{(unsigned char*)"tcy", {209, 130, 0}},
1940
+{(unsigned char*)"tdot", {226, 131, 155, 0}},
1941
+{(unsigned char*)"telrec", {226, 140, 149, 0}},
1942
+{(unsigned char*)"tfr", {240, 157, 148, 177, 0}},
1943
+{(unsigned char*)"there4", {226, 136, 180, 0}},
1944
+{(unsigned char*)"therefore", {226, 136, 180, 0}},
1945
+{(unsigned char*)"theta", {206, 184, 0}},
1946
+{(unsigned char*)"thetasym", {207, 145, 0}},
1947
+{(unsigned char*)"thetav", {207, 145, 0}},
1948
+{(unsigned char*)"thickapprox", {226, 137, 136, 0}},
1949
+{(unsigned char*)"thicksim", {226, 136, 188, 0}},
1950
+{(unsigned char*)"thinsp", {226, 128, 137, 0}},
1951
+{(unsigned char*)"thkap", {226, 137, 136, 0}},
1952
+{(unsigned char*)"thksim", {226, 136, 188, 0}},
1953
+{(unsigned char*)"thorn", {195, 190, 0}},
1954
+{(unsigned char*)"tilde", {203, 156, 0}},
1955
+{(unsigned char*)"times", {195, 151, 0}},
1956
+{(unsigned char*)"timesb", {226, 138, 160, 0}},
1957
+{(unsigned char*)"timesbar", {226, 168, 177, 0}},
1958
+{(unsigned char*)"timesd", {226, 168, 176, 0}},
1959
+{(unsigned char*)"tint", {226, 136, 173, 0}},
1960
+{(unsigned char*)"toea", {226, 164, 168, 0}},
1961
+{(unsigned char*)"top", {226, 138, 164, 0}},
1962
+{(unsigned char*)"topbot", {226, 140, 182, 0}},
1963
+{(unsigned char*)"topcir", {226, 171, 177, 0}},
1964
+{(unsigned char*)"topf", {240, 157, 149, 165, 0}},
1965
+{(unsigned char*)"topfork", {226, 171, 154, 0}},
1966
+{(unsigned char*)"tosa", {226, 164, 169, 0}},
1967
+{(unsigned char*)"tprime", {226, 128, 180, 0}},
1968
+{(unsigned char*)"trade", {226, 132, 162, 0}},
1969
+{(unsigned char*)"triangle", {226, 150, 181, 0}},
1970
+{(unsigned char*)"triangledown", {226, 150, 191, 0}},
1971
+{(unsigned char*)"triangleleft", {226, 151, 131, 0}},
1972
+{(unsigned char*)"trianglelefteq", {226, 138, 180, 0}},
1973
+{(unsigned char*)"triangleq", {226, 137, 156, 0}},
1974
+{(unsigned char*)"triangleright", {226, 150, 185, 0}},
1975
+{(unsigned char*)"trianglerighteq", {226, 138, 181, 0}},
1976
+{(unsigned char*)"tridot", {226, 151, 172, 0}},
1977
+{(unsigned char*)"trie", {226, 137, 156, 0}},
1978
+{(unsigned char*)"triminus", {226, 168, 186, 0}},
1979
+{(unsigned char*)"triplus", {226, 168, 185, 0}},
1980
+{(unsigned char*)"trisb", {226, 167, 141, 0}},
1981
+{(unsigned char*)"tritime", {226, 168, 187, 0}},
1982
+{(unsigned char*)"trpezium", {226, 143, 162, 0}},
1983
+{(unsigned char*)"tscr", {240, 157, 147, 137, 0}},
1984
+{(unsigned char*)"tscy", {209, 134, 0}},
1985
+{(unsigned char*)"tshcy", {209, 155, 0}},
1986
+{(unsigned char*)"tstrok", {197, 167, 0}},
1987
+{(unsigned char*)"twixt", {226, 137, 172, 0}},
1988
+{(unsigned char*)"twoheadleftarrow", {226, 134, 158, 0}},
1989
+{(unsigned char*)"twoheadrightarrow", {226, 134, 160, 0}},
1990
+{(unsigned char*)"uArr", {226, 135, 145, 0}},
1991
+{(unsigned char*)"uHar", {226, 165, 163, 0}},
1992
+{(unsigned char*)"uacute", {195, 186, 0}},
1993
+{(unsigned char*)"uarr", {226, 134, 145, 0}},
1994
+{(unsigned char*)"ubrcy", {209, 158, 0}},
1995
+{(unsigned char*)"ubreve", {197, 173, 0}},
1996
+{(unsigned char*)"ucirc", {195, 187, 0}},
1997
+{(unsigned char*)"ucy", {209, 131, 0}},
1998
+{(unsigned char*)"udarr", {226, 135, 133, 0}},
1999
+{(unsigned char*)"udblac", {197, 177, 0}},
2000
+{(unsigned char*)"udhar", {226, 165, 174, 0}},
2001
+{(unsigned char*)"ufisht", {226, 165, 190, 0}},
2002
+{(unsigned char*)"ufr", {240, 157, 148, 178, 0}},
2003
+{(unsigned char*)"ugrave", {195, 185, 0}},
2004
+{(unsigned char*)"uharl", {226, 134, 191, 0}},
2005
+{(unsigned char*)"uharr", {226, 134, 190, 0}},
2006
+{(unsigned char*)"uhblk", {226, 150, 128, 0}},
2007
+{(unsigned char*)"ulcorn", {226, 140, 156, 0}},
2008
+{(unsigned char*)"ulcorner", {226, 140, 156, 0}},
2009
+{(unsigned char*)"ulcrop", {226, 140, 143, 0}},
2010
+{(unsigned char*)"ultri", {226, 151, 184, 0}},
2011
+{(unsigned char*)"umacr", {197, 171, 0}},
2012
+{(unsigned char*)"uml", {194, 168, 0}},
2013
+{(unsigned char*)"uogon", {197, 179, 0}},
2014
+{(unsigned char*)"uopf", {240, 157, 149, 166, 0}},
2015
+{(unsigned char*)"uparrow", {226, 134, 145, 0}},
2016
+{(unsigned char*)"updownarrow", {226, 134, 149, 0}},
2017
+{(unsigned char*)"upharpoonleft", {226, 134, 191, 0}},
2018
+{(unsigned char*)"upharpoonright", {226, 134, 190, 0}},
2019
+{(unsigned char*)"uplus", {226, 138, 142, 0}},
2020
+{(unsigned char*)"upsi", {207, 133, 0}},
2021
+{(unsigned char*)"upsih", {207, 146, 0}},
2022
+{(unsigned char*)"upsilon", {207, 133, 0}},
2023
+{(unsigned char*)"upuparrows", {226, 135, 136, 0}},
2024
+{(unsigned char*)"urcorn", {226, 140, 157, 0}},
2025
+{(unsigned char*)"urcorner", {226, 140, 157, 0}},
2026
+{(unsigned char*)"urcrop", {226, 140, 142, 0}},
2027
+{(unsigned char*)"uring", {197, 175, 0}},
2028
+{(unsigned char*)"urtri", {226, 151, 185, 0}},
2029
+{(unsigned char*)"uscr", {240, 157, 147, 138, 0}},
2030
+{(unsigned char*)"utdot", {226, 139, 176, 0}},
2031
+{(unsigned char*)"utilde", {197, 169, 0}},
2032
+{(unsigned char*)"utri", {226, 150, 181, 0}},
2033
+{(unsigned char*)"utrif", {226, 150, 180, 0}},
2034
+{(unsigned char*)"uuarr", {226, 135, 136, 0}},
2035
+{(unsigned char*)"uuml", {195, 188, 0}},
2036
+{(unsigned char*)"uwangle", {226, 166, 167, 0}},
2037
+{(unsigned char*)"vArr", {226, 135, 149, 0}},
2038
+{(unsigned char*)"vBar", {226, 171, 168, 0}},
2039
+{(unsigned char*)"vBarv", {226, 171, 169, 0}},
2040
+{(unsigned char*)"vDash", {226, 138, 168, 0}},
2041
+{(unsigned char*)"vangrt", {226, 166, 156, 0}},
2042
+{(unsigned char*)"varepsilon", {207, 181, 0}},
2043
+{(unsigned char*)"varkappa", {207, 176, 0}},
2044
+{(unsigned char*)"varnothing", {226, 136, 133, 0}},
2045
+{(unsigned char*)"varphi", {207, 149, 0}},
2046
+{(unsigned char*)"varpi", {207, 150, 0}},
2047
+{(unsigned char*)"varpropto", {226, 136, 157, 0}},
2048
+{(unsigned char*)"varr", {226, 134, 149, 0}},
2049
+{(unsigned char*)"varrho", {207, 177, 0}},
2050
+{(unsigned char*)"varsigma", {207, 130, 0}},
2051
+{(unsigned char*)"varsubsetneq", {226, 138, 138, 239, 184, 128, 0}},
2052
+{(unsigned char*)"varsubsetneqq", {226, 171, 139, 239, 184, 128, 0}},
2053
+{(unsigned char*)"varsupsetneq", {226, 138, 139, 239, 184, 128, 0}},
2054
+{(unsigned char*)"varsupsetneqq", {226, 171, 140, 239, 184, 128, 0}},
2055
+{(unsigned char*)"vartheta", {207, 145, 0}},
2056
+{(unsigned char*)"vartriangleleft", {226, 138, 178, 0}},
2057
+{(unsigned char*)"vartriangleright", {226, 138, 179, 0}},
2058
+{(unsigned char*)"vcy", {208, 178, 0}},
2059
+{(unsigned char*)"vdash", {226, 138, 162, 0}},
2060
+{(unsigned char*)"vee", {226, 136, 168, 0}},
2061
+{(unsigned char*)"veebar", {226, 138, 187, 0}},
2062
+{(unsigned char*)"veeeq", {226, 137, 154, 0}},
2063
+{(unsigned char*)"vellip", {226, 139, 174, 0}},
2064
+{(unsigned char*)"verbar", {124, 0}},
2065
+{(unsigned char*)"vert", {124, 0}},
2066
+{(unsigned char*)"vfr", {240, 157, 148, 179, 0}},
2067
+{(unsigned char*)"vltri", {226, 138, 178, 0}},
2068
+{(unsigned char*)"vnsub", {226, 138, 130, 226, 131, 146, 0}},
2069
+{(unsigned char*)"vnsup", {226, 138, 131, 226, 131, 146, 0}},
2070
+{(unsigned char*)"vopf", {240, 157, 149, 167, 0}},
2071
+{(unsigned char*)"vprop", {226, 136, 157, 0}},
2072
+{(unsigned char*)"vrtri", {226, 138, 179, 0}},
2073
+{(unsigned char*)"vscr", {240, 157, 147, 139, 0}},
2074
+{(unsigned char*)"vsubnE", {226, 171, 139, 239, 184, 128, 0}},
2075
+{(unsigned char*)"vsubne", {226, 138, 138, 239, 184, 128, 0}},
2076
+{(unsigned char*)"vsupnE", {226, 171, 140, 239, 184, 128, 0}},
2077
+{(unsigned char*)"vsupne", {226, 138, 139, 239, 184, 128, 0}},
2078
+{(unsigned char*)"vzigzag", {226, 166, 154, 0}},
2079
+{(unsigned char*)"wcirc", {197, 181, 0}},
2080
+{(unsigned char*)"wedbar", {226, 169, 159, 0}},
2081
+{(unsigned char*)"wedge", {226, 136, 167, 0}},
2082
+{(unsigned char*)"wedgeq", {226, 137, 153, 0}},
2083
+{(unsigned char*)"weierp", {226, 132, 152, 0}},
2084
+{(unsigned char*)"wfr", {240, 157, 148, 180, 0}},
2085
+{(unsigned char*)"wopf", {240, 157, 149, 168, 0}},
2086
+{(unsigned char*)"wp", {226, 132, 152, 0}},
2087
+{(unsigned char*)"wr", {226, 137, 128, 0}},
2088
+{(unsigned char*)"wreath", {226, 137, 128, 0}},
2089
+{(unsigned char*)"wscr", {240, 157, 147, 140, 0}},
2090
+{(unsigned char*)"xcap", {226, 139, 130, 0}},
2091
+{(unsigned char*)"xcirc", {226, 151, 175, 0}},
2092
+{(unsigned char*)"xcup", {226, 139, 131, 0}},
2093
+{(unsigned char*)"xdtri", {226, 150, 189, 0}},
2094
+{(unsigned char*)"xfr", {240, 157, 148, 181, 0}},
2095
+{(unsigned char*)"xhArr", {226, 159, 186, 0}},
2096
+{(unsigned char*)"xharr", {226, 159, 183, 0}},
2097
+{(unsigned char*)"xi", {206, 190, 0}},
2098
+{(unsigned char*)"xlArr", {226, 159, 184, 0}},
2099
+{(unsigned char*)"xlarr", {226, 159, 181, 0}},
2100
+{(unsigned char*)"xmap", {226, 159, 188, 0}},
2101
+{(unsigned char*)"xnis", {226, 139, 187, 0}},
2102
+{(unsigned char*)"xodot", {226, 168, 128, 0}},
2103
+{(unsigned char*)"xopf", {240, 157, 149, 169, 0}},
2104
+{(unsigned char*)"xoplus", {226, 168, 129, 0}},
2105
+{(unsigned char*)"xotime", {226, 168, 130, 0}},
2106
+{(unsigned char*)"xrArr", {226, 159, 185, 0}},
2107
+{(unsigned char*)"xrarr", {226, 159, 182, 0}},
2108
+{(unsigned char*)"xscr", {240, 157, 147, 141, 0}},
2109
+{(unsigned char*)"xsqcup", {226, 168, 134, 0}},
2110
+{(unsigned char*)"xuplus", {226, 168, 132, 0}},
2111
+{(unsigned char*)"xutri", {226, 150, 179, 0}},
2112
+{(unsigned char*)"xvee", {226, 139, 129, 0}},
2113
+{(unsigned char*)"xwedge", {226, 139, 128, 0}},
2114
+{(unsigned char*)"yacute", {195, 189, 0}},
2115
+{(unsigned char*)"yacy", {209, 143, 0}},
2116
+{(unsigned char*)"ycirc", {197, 183, 0}},
2117
+{(unsigned char*)"ycy", {209, 139, 0}},
2118
+{(unsigned char*)"yen", {194, 165, 0}},
2119
+{(unsigned char*)"yfr", {240, 157, 148, 182, 0}},
2120
+{(unsigned char*)"yicy", {209, 151, 0}},
2121
+{(unsigned char*)"yopf", {240, 157, 149, 170, 0}},
2122
+{(unsigned char*)"yscr", {240, 157, 147, 142, 0}},
2123
+{(unsigned char*)"yucy", {209, 142, 0}},
2124
+{(unsigned char*)"yuml", {195, 191, 0}},
2125
+{(unsigned char*)"zacute", {197, 186, 0}},
2126
+{(unsigned char*)"zcaron", {197, 190, 0}},
2127
+{(unsigned char*)"zcy", {208, 183, 0}},
2128
+{(unsigned char*)"zdot", {197, 188, 0}},
2129
+{(unsigned char*)"zeetrf", {226, 132, 168, 0}},
2130
+{(unsigned char*)"zeta", {206, 182, 0}},
2131
+{(unsigned char*)"zfr", {240, 157, 148, 183, 0}},
2132
+{(unsigned char*)"zhcy", {208, 182, 0}},
2133
+{(unsigned char*)"zigrarr", {226, 135, 157, 0}},
2134
+{(unsigned char*)"zopf", {240, 157, 149, 171, 0}},
2135
+{(unsigned char*)"zscr", {240, 157, 147, 143, 0}},
2136
+{(unsigned char*)"zwj", {226, 128, 141, 0}},
2137
+{(unsigned char*)"zwnj", {226, 128, 140, 0}},
2138
+};
--- a/src/entities.inc
+++ b/src/entities.inc
@@ -0,0 +1,2138 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/src/entities.inc
+++ b/src/entities.inc
@@ -0,0 +1,2138 @@
1 /* Autogenerated by tools/make_headers_inc.py */
2
3 struct cmark_entity_node {
4 unsigned char *entity;
5 unsigned char bytes[8];
6 };
7
8 #define CMARK_ENTITY_MIN_LENGTH 2
9 #define CMARK_ENTITY_MAX_LENGTH 32
10 #define CMARK_NUM_ENTITIES 2125
11
12 static const struct cmark_entity_node cmark_entities[] = {
13 {(unsigned char*)"AElig", {195, 134, 0}},
14 {(unsigned char*)"AMP", {38, 0}},
15 {(unsigned char*)"Aacute", {195, 129, 0}},
16 {(unsigned char*)"Abreve", {196, 130, 0}},
17 {(unsigned char*)"Acirc", {195, 130, 0}},
18 {(unsigned char*)"Acy", {208, 144, 0}},
19 {(unsigned char*)"Afr", {240, 157, 148, 132, 0}},
20 {(unsigned char*)"Agrave", {195, 128, 0}},
21 {(unsigned char*)"Alpha", {206, 145, 0}},
22 {(unsigned char*)"Amacr", {196, 128, 0}},
23 {(unsigned char*)"And", {226, 169, 147, 0}},
24 {(unsigned char*)"Aogon", {196, 132, 0}},
25 {(unsigned char*)"Aopf", {240, 157, 148, 184, 0}},
26 {(unsigned char*)"ApplyFunction", {226, 129, 161, 0}},
27 {(unsigned char*)"Aring", {195, 133, 0}},
28 {(unsigned char*)"Ascr", {240, 157, 146, 156, 0}},
29 {(unsigned char*)"Assign", {226, 137, 148, 0}},
30 {(unsigned char*)"Atilde", {195, 131, 0}},
31 {(unsigned char*)"Auml", {195, 132, 0}},
32 {(unsigned char*)"Backslash", {226, 136, 150, 0}},
33 {(unsigned char*)"Barv", {226, 171, 167, 0}},
34 {(unsigned char*)"Barwed", {226, 140, 134, 0}},
35 {(unsigned char*)"Bcy", {208, 145, 0}},
36 {(unsigned char*)"Because", {226, 136, 181, 0}},
37 {(unsigned char*)"Bernoullis", {226, 132, 172, 0}},
38 {(unsigned char*)"Beta", {206, 146, 0}},
39 {(unsigned char*)"Bfr", {240, 157, 148, 133, 0}},
40 {(unsigned char*)"Bopf", {240, 157, 148, 185, 0}},
41 {(unsigned char*)"Breve", {203, 152, 0}},
42 {(unsigned char*)"Bscr", {226, 132, 172, 0}},
43 {(unsigned char*)"Bumpeq", {226, 137, 142, 0}},
44 {(unsigned char*)"CHcy", {208, 167, 0}},
45 {(unsigned char*)"COPY", {194, 169, 0}},
46 {(unsigned char*)"Cacute", {196, 134, 0}},
47 {(unsigned char*)"Cap", {226, 139, 146, 0}},
48 {(unsigned char*)"CapitalDifferentialD", {226, 133, 133, 0}},
49 {(unsigned char*)"Cayleys", {226, 132, 173, 0}},
50 {(unsigned char*)"Ccaron", {196, 140, 0}},
51 {(unsigned char*)"Ccedil", {195, 135, 0}},
52 {(unsigned char*)"Ccirc", {196, 136, 0}},
53 {(unsigned char*)"Cconint", {226, 136, 176, 0}},
54 {(unsigned char*)"Cdot", {196, 138, 0}},
55 {(unsigned char*)"Cedilla", {194, 184, 0}},
56 {(unsigned char*)"CenterDot", {194, 183, 0}},
57 {(unsigned char*)"Cfr", {226, 132, 173, 0}},
58 {(unsigned char*)"Chi", {206, 167, 0}},
59 {(unsigned char*)"CircleDot", {226, 138, 153, 0}},
60 {(unsigned char*)"CircleMinus", {226, 138, 150, 0}},
61 {(unsigned char*)"CirclePlus", {226, 138, 149, 0}},
62 {(unsigned char*)"CircleTimes", {226, 138, 151, 0}},
63 {(unsigned char*)"ClockwiseContourIntegral", {226, 136, 178, 0}},
64 {(unsigned char*)"CloseCurlyDoubleQuote", {226, 128, 157, 0}},
65 {(unsigned char*)"CloseCurlyQuote", {226, 128, 153, 0}},
66 {(unsigned char*)"Colon", {226, 136, 183, 0}},
67 {(unsigned char*)"Colone", {226, 169, 180, 0}},
68 {(unsigned char*)"Congruent", {226, 137, 161, 0}},
69 {(unsigned char*)"Conint", {226, 136, 175, 0}},
70 {(unsigned char*)"ContourIntegral", {226, 136, 174, 0}},
71 {(unsigned char*)"Copf", {226, 132, 130, 0}},
72 {(unsigned char*)"Coproduct", {226, 136, 144, 0}},
73 {(unsigned char*)"CounterClockwiseContourIntegral", {226, 136, 179, 0}},
74 {(unsigned char*)"Cross", {226, 168, 175, 0}},
75 {(unsigned char*)"Cscr", {240, 157, 146, 158, 0}},
76 {(unsigned char*)"Cup", {226, 139, 147, 0}},
77 {(unsigned char*)"CupCap", {226, 137, 141, 0}},
78 {(unsigned char*)"DD", {226, 133, 133, 0}},
79 {(unsigned char*)"DDotrahd", {226, 164, 145, 0}},
80 {(unsigned char*)"DJcy", {208, 130, 0}},
81 {(unsigned char*)"DScy", {208, 133, 0}},
82 {(unsigned char*)"DZcy", {208, 143, 0}},
83 {(unsigned char*)"Dagger", {226, 128, 161, 0}},
84 {(unsigned char*)"Darr", {226, 134, 161, 0}},
85 {(unsigned char*)"Dashv", {226, 171, 164, 0}},
86 {(unsigned char*)"Dcaron", {196, 142, 0}},
87 {(unsigned char*)"Dcy", {208, 148, 0}},
88 {(unsigned char*)"Del", {226, 136, 135, 0}},
89 {(unsigned char*)"Delta", {206, 148, 0}},
90 {(unsigned char*)"Dfr", {240, 157, 148, 135, 0}},
91 {(unsigned char*)"DiacriticalAcute", {194, 180, 0}},
92 {(unsigned char*)"DiacriticalDot", {203, 153, 0}},
93 {(unsigned char*)"DiacriticalDoubleAcute", {203, 157, 0}},
94 {(unsigned char*)"DiacriticalGrave", {96, 0}},
95 {(unsigned char*)"DiacriticalTilde", {203, 156, 0}},
96 {(unsigned char*)"Diamond", {226, 139, 132, 0}},
97 {(unsigned char*)"DifferentialD", {226, 133, 134, 0}},
98 {(unsigned char*)"Dopf", {240, 157, 148, 187, 0}},
99 {(unsigned char*)"Dot", {194, 168, 0}},
100 {(unsigned char*)"DotDot", {226, 131, 156, 0}},
101 {(unsigned char*)"DotEqual", {226, 137, 144, 0}},
102 {(unsigned char*)"DoubleContourIntegral", {226, 136, 175, 0}},
103 {(unsigned char*)"DoubleDot", {194, 168, 0}},
104 {(unsigned char*)"DoubleDownArrow", {226, 135, 147, 0}},
105 {(unsigned char*)"DoubleLeftArrow", {226, 135, 144, 0}},
106 {(unsigned char*)"DoubleLeftRightArrow", {226, 135, 148, 0}},
107 {(unsigned char*)"DoubleLeftTee", {226, 171, 164, 0}},
108 {(unsigned char*)"DoubleLongLeftArrow", {226, 159, 184, 0}},
109 {(unsigned char*)"DoubleLongLeftRightArrow", {226, 159, 186, 0}},
110 {(unsigned char*)"DoubleLongRightArrow", {226, 159, 185, 0}},
111 {(unsigned char*)"DoubleRightArrow", {226, 135, 146, 0}},
112 {(unsigned char*)"DoubleRightTee", {226, 138, 168, 0}},
113 {(unsigned char*)"DoubleUpArrow", {226, 135, 145, 0}},
114 {(unsigned char*)"DoubleUpDownArrow", {226, 135, 149, 0}},
115 {(unsigned char*)"DoubleVerticalBar", {226, 136, 165, 0}},
116 {(unsigned char*)"DownArrow", {226, 134, 147, 0}},
117 {(unsigned char*)"DownArrowBar", {226, 164, 147, 0}},
118 {(unsigned char*)"DownArrowUpArrow", {226, 135, 181, 0}},
119 {(unsigned char*)"DownBreve", {204, 145, 0}},
120 {(unsigned char*)"DownLeftRightVector", {226, 165, 144, 0}},
121 {(unsigned char*)"DownLeftTeeVector", {226, 165, 158, 0}},
122 {(unsigned char*)"DownLeftVector", {226, 134, 189, 0}},
123 {(unsigned char*)"DownLeftVectorBar", {226, 165, 150, 0}},
124 {(unsigned char*)"DownRightTeeVector", {226, 165, 159, 0}},
125 {(unsigned char*)"DownRightVector", {226, 135, 129, 0}},
126 {(unsigned char*)"DownRightVectorBar", {226, 165, 151, 0}},
127 {(unsigned char*)"DownTee", {226, 138, 164, 0}},
128 {(unsigned char*)"DownTeeArrow", {226, 134, 167, 0}},
129 {(unsigned char*)"Downarrow", {226, 135, 147, 0}},
130 {(unsigned char*)"Dscr", {240, 157, 146, 159, 0}},
131 {(unsigned char*)"Dstrok", {196, 144, 0}},
132 {(unsigned char*)"ENG", {197, 138, 0}},
133 {(unsigned char*)"ETH", {195, 144, 0}},
134 {(unsigned char*)"Eacute", {195, 137, 0}},
135 {(unsigned char*)"Ecaron", {196, 154, 0}},
136 {(unsigned char*)"Ecirc", {195, 138, 0}},
137 {(unsigned char*)"Ecy", {208, 173, 0}},
138 {(unsigned char*)"Edot", {196, 150, 0}},
139 {(unsigned char*)"Efr", {240, 157, 148, 136, 0}},
140 {(unsigned char*)"Egrave", {195, 136, 0}},
141 {(unsigned char*)"Element", {226, 136, 136, 0}},
142 {(unsigned char*)"Emacr", {196, 146, 0}},
143 {(unsigned char*)"EmptySmallSquare", {226, 151, 187, 0}},
144 {(unsigned char*)"EmptyVerySmallSquare", {226, 150, 171, 0}},
145 {(unsigned char*)"Eogon", {196, 152, 0}},
146 {(unsigned char*)"Eopf", {240, 157, 148, 188, 0}},
147 {(unsigned char*)"Epsilon", {206, 149, 0}},
148 {(unsigned char*)"Equal", {226, 169, 181, 0}},
149 {(unsigned char*)"EqualTilde", {226, 137, 130, 0}},
150 {(unsigned char*)"Equilibrium", {226, 135, 140, 0}},
151 {(unsigned char*)"Escr", {226, 132, 176, 0}},
152 {(unsigned char*)"Esim", {226, 169, 179, 0}},
153 {(unsigned char*)"Eta", {206, 151, 0}},
154 {(unsigned char*)"Euml", {195, 139, 0}},
155 {(unsigned char*)"Exists", {226, 136, 131, 0}},
156 {(unsigned char*)"ExponentialE", {226, 133, 135, 0}},
157 {(unsigned char*)"Fcy", {208, 164, 0}},
158 {(unsigned char*)"Ffr", {240, 157, 148, 137, 0}},
159 {(unsigned char*)"FilledSmallSquare", {226, 151, 188, 0}},
160 {(unsigned char*)"FilledVerySmallSquare", {226, 150, 170, 0}},
161 {(unsigned char*)"Fopf", {240, 157, 148, 189, 0}},
162 {(unsigned char*)"ForAll", {226, 136, 128, 0}},
163 {(unsigned char*)"Fouriertrf", {226, 132, 177, 0}},
164 {(unsigned char*)"Fscr", {226, 132, 177, 0}},
165 {(unsigned char*)"GJcy", {208, 131, 0}},
166 {(unsigned char*)"GT", {62, 0}},
167 {(unsigned char*)"Gamma", {206, 147, 0}},
168 {(unsigned char*)"Gammad", {207, 156, 0}},
169 {(unsigned char*)"Gbreve", {196, 158, 0}},
170 {(unsigned char*)"Gcedil", {196, 162, 0}},
171 {(unsigned char*)"Gcirc", {196, 156, 0}},
172 {(unsigned char*)"Gcy", {208, 147, 0}},
173 {(unsigned char*)"Gdot", {196, 160, 0}},
174 {(unsigned char*)"Gfr", {240, 157, 148, 138, 0}},
175 {(unsigned char*)"Gg", {226, 139, 153, 0}},
176 {(unsigned char*)"Gopf", {240, 157, 148, 190, 0}},
177 {(unsigned char*)"GreaterEqual", {226, 137, 165, 0}},
178 {(unsigned char*)"GreaterEqualLess", {226, 139, 155, 0}},
179 {(unsigned char*)"GreaterFullEqual", {226, 137, 167, 0}},
180 {(unsigned char*)"GreaterGreater", {226, 170, 162, 0}},
181 {(unsigned char*)"GreaterLess", {226, 137, 183, 0}},
182 {(unsigned char*)"GreaterSlantEqual", {226, 169, 190, 0}},
183 {(unsigned char*)"GreaterTilde", {226, 137, 179, 0}},
184 {(unsigned char*)"Gscr", {240, 157, 146, 162, 0}},
185 {(unsigned char*)"Gt", {226, 137, 171, 0}},
186 {(unsigned char*)"HARDcy", {208, 170, 0}},
187 {(unsigned char*)"Hacek", {203, 135, 0}},
188 {(unsigned char*)"Hat", {94, 0}},
189 {(unsigned char*)"Hcirc", {196, 164, 0}},
190 {(unsigned char*)"Hfr", {226, 132, 140, 0}},
191 {(unsigned char*)"HilbertSpace", {226, 132, 139, 0}},
192 {(unsigned char*)"Hopf", {226, 132, 141, 0}},
193 {(unsigned char*)"HorizontalLine", {226, 148, 128, 0}},
194 {(unsigned char*)"Hscr", {226, 132, 139, 0}},
195 {(unsigned char*)"Hstrok", {196, 166, 0}},
196 {(unsigned char*)"HumpDownHump", {226, 137, 142, 0}},
197 {(unsigned char*)"HumpEqual", {226, 137, 143, 0}},
198 {(unsigned char*)"IEcy", {208, 149, 0}},
199 {(unsigned char*)"IJlig", {196, 178, 0}},
200 {(unsigned char*)"IOcy", {208, 129, 0}},
201 {(unsigned char*)"Iacute", {195, 141, 0}},
202 {(unsigned char*)"Icirc", {195, 142, 0}},
203 {(unsigned char*)"Icy", {208, 152, 0}},
204 {(unsigned char*)"Idot", {196, 176, 0}},
205 {(unsigned char*)"Ifr", {226, 132, 145, 0}},
206 {(unsigned char*)"Igrave", {195, 140, 0}},
207 {(unsigned char*)"Im", {226, 132, 145, 0}},
208 {(unsigned char*)"Imacr", {196, 170, 0}},
209 {(unsigned char*)"ImaginaryI", {226, 133, 136, 0}},
210 {(unsigned char*)"Implies", {226, 135, 146, 0}},
211 {(unsigned char*)"Int", {226, 136, 172, 0}},
212 {(unsigned char*)"Integral", {226, 136, 171, 0}},
213 {(unsigned char*)"Intersection", {226, 139, 130, 0}},
214 {(unsigned char*)"InvisibleComma", {226, 129, 163, 0}},
215 {(unsigned char*)"InvisibleTimes", {226, 129, 162, 0}},
216 {(unsigned char*)"Iogon", {196, 174, 0}},
217 {(unsigned char*)"Iopf", {240, 157, 149, 128, 0}},
218 {(unsigned char*)"Iota", {206, 153, 0}},
219 {(unsigned char*)"Iscr", {226, 132, 144, 0}},
220 {(unsigned char*)"Itilde", {196, 168, 0}},
221 {(unsigned char*)"Iukcy", {208, 134, 0}},
222 {(unsigned char*)"Iuml", {195, 143, 0}},
223 {(unsigned char*)"Jcirc", {196, 180, 0}},
224 {(unsigned char*)"Jcy", {208, 153, 0}},
225 {(unsigned char*)"Jfr", {240, 157, 148, 141, 0}},
226 {(unsigned char*)"Jopf", {240, 157, 149, 129, 0}},
227 {(unsigned char*)"Jscr", {240, 157, 146, 165, 0}},
228 {(unsigned char*)"Jsercy", {208, 136, 0}},
229 {(unsigned char*)"Jukcy", {208, 132, 0}},
230 {(unsigned char*)"KHcy", {208, 165, 0}},
231 {(unsigned char*)"KJcy", {208, 140, 0}},
232 {(unsigned char*)"Kappa", {206, 154, 0}},
233 {(unsigned char*)"Kcedil", {196, 182, 0}},
234 {(unsigned char*)"Kcy", {208, 154, 0}},
235 {(unsigned char*)"Kfr", {240, 157, 148, 142, 0}},
236 {(unsigned char*)"Kopf", {240, 157, 149, 130, 0}},
237 {(unsigned char*)"Kscr", {240, 157, 146, 166, 0}},
238 {(unsigned char*)"LJcy", {208, 137, 0}},
239 {(unsigned char*)"LT", {60, 0}},
240 {(unsigned char*)"Lacute", {196, 185, 0}},
241 {(unsigned char*)"Lambda", {206, 155, 0}},
242 {(unsigned char*)"Lang", {226, 159, 170, 0}},
243 {(unsigned char*)"Laplacetrf", {226, 132, 146, 0}},
244 {(unsigned char*)"Larr", {226, 134, 158, 0}},
245 {(unsigned char*)"Lcaron", {196, 189, 0}},
246 {(unsigned char*)"Lcedil", {196, 187, 0}},
247 {(unsigned char*)"Lcy", {208, 155, 0}},
248 {(unsigned char*)"LeftAngleBracket", {226, 159, 168, 0}},
249 {(unsigned char*)"LeftArrow", {226, 134, 144, 0}},
250 {(unsigned char*)"LeftArrowBar", {226, 135, 164, 0}},
251 {(unsigned char*)"LeftArrowRightArrow", {226, 135, 134, 0}},
252 {(unsigned char*)"LeftCeiling", {226, 140, 136, 0}},
253 {(unsigned char*)"LeftDoubleBracket", {226, 159, 166, 0}},
254 {(unsigned char*)"LeftDownTeeVector", {226, 165, 161, 0}},
255 {(unsigned char*)"LeftDownVector", {226, 135, 131, 0}},
256 {(unsigned char*)"LeftDownVectorBar", {226, 165, 153, 0}},
257 {(unsigned char*)"LeftFloor", {226, 140, 138, 0}},
258 {(unsigned char*)"LeftRightArrow", {226, 134, 148, 0}},
259 {(unsigned char*)"LeftRightVector", {226, 165, 142, 0}},
260 {(unsigned char*)"LeftTee", {226, 138, 163, 0}},
261 {(unsigned char*)"LeftTeeArrow", {226, 134, 164, 0}},
262 {(unsigned char*)"LeftTeeVector", {226, 165, 154, 0}},
263 {(unsigned char*)"LeftTriangle", {226, 138, 178, 0}},
264 {(unsigned char*)"LeftTriangleBar", {226, 167, 143, 0}},
265 {(unsigned char*)"LeftTriangleEqual", {226, 138, 180, 0}},
266 {(unsigned char*)"LeftUpDownVector", {226, 165, 145, 0}},
267 {(unsigned char*)"LeftUpTeeVector", {226, 165, 160, 0}},
268 {(unsigned char*)"LeftUpVector", {226, 134, 191, 0}},
269 {(unsigned char*)"LeftUpVectorBar", {226, 165, 152, 0}},
270 {(unsigned char*)"LeftVector", {226, 134, 188, 0}},
271 {(unsigned char*)"LeftVectorBar", {226, 165, 146, 0}},
272 {(unsigned char*)"Leftarrow", {226, 135, 144, 0}},
273 {(unsigned char*)"Leftrightarrow", {226, 135, 148, 0}},
274 {(unsigned char*)"LessEqualGreater", {226, 139, 154, 0}},
275 {(unsigned char*)"LessFullEqual", {226, 137, 166, 0}},
276 {(unsigned char*)"LessGreater", {226, 137, 182, 0}},
277 {(unsigned char*)"LessLess", {226, 170, 161, 0}},
278 {(unsigned char*)"LessSlantEqual", {226, 169, 189, 0}},
279 {(unsigned char*)"LessTilde", {226, 137, 178, 0}},
280 {(unsigned char*)"Lfr", {240, 157, 148, 143, 0}},
281 {(unsigned char*)"Ll", {226, 139, 152, 0}},
282 {(unsigned char*)"Lleftarrow", {226, 135, 154, 0}},
283 {(unsigned char*)"Lmidot", {196, 191, 0}},
284 {(unsigned char*)"LongLeftArrow", {226, 159, 181, 0}},
285 {(unsigned char*)"LongLeftRightArrow", {226, 159, 183, 0}},
286 {(unsigned char*)"LongRightArrow", {226, 159, 182, 0}},
287 {(unsigned char*)"Longleftarrow", {226, 159, 184, 0}},
288 {(unsigned char*)"Longleftrightarrow", {226, 159, 186, 0}},
289 {(unsigned char*)"Longrightarrow", {226, 159, 185, 0}},
290 {(unsigned char*)"Lopf", {240, 157, 149, 131, 0}},
291 {(unsigned char*)"LowerLeftArrow", {226, 134, 153, 0}},
292 {(unsigned char*)"LowerRightArrow", {226, 134, 152, 0}},
293 {(unsigned char*)"Lscr", {226, 132, 146, 0}},
294 {(unsigned char*)"Lsh", {226, 134, 176, 0}},
295 {(unsigned char*)"Lstrok", {197, 129, 0}},
296 {(unsigned char*)"Lt", {226, 137, 170, 0}},
297 {(unsigned char*)"Map", {226, 164, 133, 0}},
298 {(unsigned char*)"Mcy", {208, 156, 0}},
299 {(unsigned char*)"MediumSpace", {226, 129, 159, 0}},
300 {(unsigned char*)"Mellintrf", {226, 132, 179, 0}},
301 {(unsigned char*)"Mfr", {240, 157, 148, 144, 0}},
302 {(unsigned char*)"MinusPlus", {226, 136, 147, 0}},
303 {(unsigned char*)"Mopf", {240, 157, 149, 132, 0}},
304 {(unsigned char*)"Mscr", {226, 132, 179, 0}},
305 {(unsigned char*)"Mu", {206, 156, 0}},
306 {(unsigned char*)"NJcy", {208, 138, 0}},
307 {(unsigned char*)"Nacute", {197, 131, 0}},
308 {(unsigned char*)"Ncaron", {197, 135, 0}},
309 {(unsigned char*)"Ncedil", {197, 133, 0}},
310 {(unsigned char*)"Ncy", {208, 157, 0}},
311 {(unsigned char*)"NegativeMediumSpace", {226, 128, 139, 0}},
312 {(unsigned char*)"NegativeThickSpace", {226, 128, 139, 0}},
313 {(unsigned char*)"NegativeThinSpace", {226, 128, 139, 0}},
314 {(unsigned char*)"NegativeVeryThinSpace", {226, 128, 139, 0}},
315 {(unsigned char*)"NestedGreaterGreater", {226, 137, 171, 0}},
316 {(unsigned char*)"NestedLessLess", {226, 137, 170, 0}},
317 {(unsigned char*)"NewLine", {10, 0}},
318 {(unsigned char*)"Nfr", {240, 157, 148, 145, 0}},
319 {(unsigned char*)"NoBreak", {226, 129, 160, 0}},
320 {(unsigned char*)"NonBreakingSpace", {194, 160, 0}},
321 {(unsigned char*)"Nopf", {226, 132, 149, 0}},
322 {(unsigned char*)"Not", {226, 171, 172, 0}},
323 {(unsigned char*)"NotCongruent", {226, 137, 162, 0}},
324 {(unsigned char*)"NotCupCap", {226, 137, 173, 0}},
325 {(unsigned char*)"NotDoubleVerticalBar", {226, 136, 166, 0}},
326 {(unsigned char*)"NotElement", {226, 136, 137, 0}},
327 {(unsigned char*)"NotEqual", {226, 137, 160, 0}},
328 {(unsigned char*)"NotEqualTilde", {226, 137, 130, 204, 184, 0}},
329 {(unsigned char*)"NotExists", {226, 136, 132, 0}},
330 {(unsigned char*)"NotGreater", {226, 137, 175, 0}},
331 {(unsigned char*)"NotGreaterEqual", {226, 137, 177, 0}},
332 {(unsigned char*)"NotGreaterFullEqual", {226, 137, 167, 204, 184, 0}},
333 {(unsigned char*)"NotGreaterGreater", {226, 137, 171, 204, 184, 0}},
334 {(unsigned char*)"NotGreaterLess", {226, 137, 185, 0}},
335 {(unsigned char*)"NotGreaterSlantEqual", {226, 169, 190, 204, 184, 0}},
336 {(unsigned char*)"NotGreaterTilde", {226, 137, 181, 0}},
337 {(unsigned char*)"NotHumpDownHump", {226, 137, 142, 204, 184, 0}},
338 {(unsigned char*)"NotHumpEqual", {226, 137, 143, 204, 184, 0}},
339 {(unsigned char*)"NotLeftTriangle", {226, 139, 170, 0}},
340 {(unsigned char*)"NotLeftTriangleBar", {226, 167, 143, 204, 184, 0}},
341 {(unsigned char*)"NotLeftTriangleEqual", {226, 139, 172, 0}},
342 {(unsigned char*)"NotLess", {226, 137, 174, 0}},
343 {(unsigned char*)"NotLessEqual", {226, 137, 176, 0}},
344 {(unsigned char*)"NotLessGreater", {226, 137, 184, 0}},
345 {(unsigned char*)"NotLessLess", {226, 137, 170, 204, 184, 0}},
346 {(unsigned char*)"NotLessSlantEqual", {226, 169, 189, 204, 184, 0}},
347 {(unsigned char*)"NotLessTilde", {226, 137, 180, 0}},
348 {(unsigned char*)"NotNestedGreaterGreater", {226, 170, 162, 204, 184, 0}},
349 {(unsigned char*)"NotNestedLessLess", {226, 170, 161, 204, 184, 0}},
350 {(unsigned char*)"NotPrecedes", {226, 138, 128, 0}},
351 {(unsigned char*)"NotPrecedesEqual", {226, 170, 175, 204, 184, 0}},
352 {(unsigned char*)"NotPrecedesSlantEqual", {226, 139, 160, 0}},
353 {(unsigned char*)"NotReverseElement", {226, 136, 140, 0}},
354 {(unsigned char*)"NotRightTriangle", {226, 139, 171, 0}},
355 {(unsigned char*)"NotRightTriangleBar", {226, 167, 144, 204, 184, 0}},
356 {(unsigned char*)"NotRightTriangleEqual", {226, 139, 173, 0}},
357 {(unsigned char*)"NotSquareSubset", {226, 138, 143, 204, 184, 0}},
358 {(unsigned char*)"NotSquareSubsetEqual", {226, 139, 162, 0}},
359 {(unsigned char*)"NotSquareSuperset", {226, 138, 144, 204, 184, 0}},
360 {(unsigned char*)"NotSquareSupersetEqual", {226, 139, 163, 0}},
361 {(unsigned char*)"NotSubset", {226, 138, 130, 226, 131, 146, 0}},
362 {(unsigned char*)"NotSubsetEqual", {226, 138, 136, 0}},
363 {(unsigned char*)"NotSucceeds", {226, 138, 129, 0}},
364 {(unsigned char*)"NotSucceedsEqual", {226, 170, 176, 204, 184, 0}},
365 {(unsigned char*)"NotSucceedsSlantEqual", {226, 139, 161, 0}},
366 {(unsigned char*)"NotSucceedsTilde", {226, 137, 191, 204, 184, 0}},
367 {(unsigned char*)"NotSuperset", {226, 138, 131, 226, 131, 146, 0}},
368 {(unsigned char*)"NotSupersetEqual", {226, 138, 137, 0}},
369 {(unsigned char*)"NotTilde", {226, 137, 129, 0}},
370 {(unsigned char*)"NotTildeEqual", {226, 137, 132, 0}},
371 {(unsigned char*)"NotTildeFullEqual", {226, 137, 135, 0}},
372 {(unsigned char*)"NotTildeTilde", {226, 137, 137, 0}},
373 {(unsigned char*)"NotVerticalBar", {226, 136, 164, 0}},
374 {(unsigned char*)"Nscr", {240, 157, 146, 169, 0}},
375 {(unsigned char*)"Ntilde", {195, 145, 0}},
376 {(unsigned char*)"Nu", {206, 157, 0}},
377 {(unsigned char*)"OElig", {197, 146, 0}},
378 {(unsigned char*)"Oacute", {195, 147, 0}},
379 {(unsigned char*)"Ocirc", {195, 148, 0}},
380 {(unsigned char*)"Ocy", {208, 158, 0}},
381 {(unsigned char*)"Odblac", {197, 144, 0}},
382 {(unsigned char*)"Ofr", {240, 157, 148, 146, 0}},
383 {(unsigned char*)"Ograve", {195, 146, 0}},
384 {(unsigned char*)"Omacr", {197, 140, 0}},
385 {(unsigned char*)"Omega", {206, 169, 0}},
386 {(unsigned char*)"Omicron", {206, 159, 0}},
387 {(unsigned char*)"Oopf", {240, 157, 149, 134, 0}},
388 {(unsigned char*)"OpenCurlyDoubleQuote", {226, 128, 156, 0}},
389 {(unsigned char*)"OpenCurlyQuote", {226, 128, 152, 0}},
390 {(unsigned char*)"Or", {226, 169, 148, 0}},
391 {(unsigned char*)"Oscr", {240, 157, 146, 170, 0}},
392 {(unsigned char*)"Oslash", {195, 152, 0}},
393 {(unsigned char*)"Otilde", {195, 149, 0}},
394 {(unsigned char*)"Otimes", {226, 168, 183, 0}},
395 {(unsigned char*)"Ouml", {195, 150, 0}},
396 {(unsigned char*)"OverBar", {226, 128, 190, 0}},
397 {(unsigned char*)"OverBrace", {226, 143, 158, 0}},
398 {(unsigned char*)"OverBracket", {226, 142, 180, 0}},
399 {(unsigned char*)"OverParenthesis", {226, 143, 156, 0}},
400 {(unsigned char*)"PartialD", {226, 136, 130, 0}},
401 {(unsigned char*)"Pcy", {208, 159, 0}},
402 {(unsigned char*)"Pfr", {240, 157, 148, 147, 0}},
403 {(unsigned char*)"Phi", {206, 166, 0}},
404 {(unsigned char*)"Pi", {206, 160, 0}},
405 {(unsigned char*)"PlusMinus", {194, 177, 0}},
406 {(unsigned char*)"Poincareplane", {226, 132, 140, 0}},
407 {(unsigned char*)"Popf", {226, 132, 153, 0}},
408 {(unsigned char*)"Pr", {226, 170, 187, 0}},
409 {(unsigned char*)"Precedes", {226, 137, 186, 0}},
410 {(unsigned char*)"PrecedesEqual", {226, 170, 175, 0}},
411 {(unsigned char*)"PrecedesSlantEqual", {226, 137, 188, 0}},
412 {(unsigned char*)"PrecedesTilde", {226, 137, 190, 0}},
413 {(unsigned char*)"Prime", {226, 128, 179, 0}},
414 {(unsigned char*)"Product", {226, 136, 143, 0}},
415 {(unsigned char*)"Proportion", {226, 136, 183, 0}},
416 {(unsigned char*)"Proportional", {226, 136, 157, 0}},
417 {(unsigned char*)"Pscr", {240, 157, 146, 171, 0}},
418 {(unsigned char*)"Psi", {206, 168, 0}},
419 {(unsigned char*)"QUOT", {34, 0}},
420 {(unsigned char*)"Qfr", {240, 157, 148, 148, 0}},
421 {(unsigned char*)"Qopf", {226, 132, 154, 0}},
422 {(unsigned char*)"Qscr", {240, 157, 146, 172, 0}},
423 {(unsigned char*)"RBarr", {226, 164, 144, 0}},
424 {(unsigned char*)"REG", {194, 174, 0}},
425 {(unsigned char*)"Racute", {197, 148, 0}},
426 {(unsigned char*)"Rang", {226, 159, 171, 0}},
427 {(unsigned char*)"Rarr", {226, 134, 160, 0}},
428 {(unsigned char*)"Rarrtl", {226, 164, 150, 0}},
429 {(unsigned char*)"Rcaron", {197, 152, 0}},
430 {(unsigned char*)"Rcedil", {197, 150, 0}},
431 {(unsigned char*)"Rcy", {208, 160, 0}},
432 {(unsigned char*)"Re", {226, 132, 156, 0}},
433 {(unsigned char*)"ReverseElement", {226, 136, 139, 0}},
434 {(unsigned char*)"ReverseEquilibrium", {226, 135, 139, 0}},
435 {(unsigned char*)"ReverseUpEquilibrium", {226, 165, 175, 0}},
436 {(unsigned char*)"Rfr", {226, 132, 156, 0}},
437 {(unsigned char*)"Rho", {206, 161, 0}},
438 {(unsigned char*)"RightAngleBracket", {226, 159, 169, 0}},
439 {(unsigned char*)"RightArrow", {226, 134, 146, 0}},
440 {(unsigned char*)"RightArrowBar", {226, 135, 165, 0}},
441 {(unsigned char*)"RightArrowLeftArrow", {226, 135, 132, 0}},
442 {(unsigned char*)"RightCeiling", {226, 140, 137, 0}},
443 {(unsigned char*)"RightDoubleBracket", {226, 159, 167, 0}},
444 {(unsigned char*)"RightDownTeeVector", {226, 165, 157, 0}},
445 {(unsigned char*)"RightDownVector", {226, 135, 130, 0}},
446 {(unsigned char*)"RightDownVectorBar", {226, 165, 149, 0}},
447 {(unsigned char*)"RightFloor", {226, 140, 139, 0}},
448 {(unsigned char*)"RightTee", {226, 138, 162, 0}},
449 {(unsigned char*)"RightTeeArrow", {226, 134, 166, 0}},
450 {(unsigned char*)"RightTeeVector", {226, 165, 155, 0}},
451 {(unsigned char*)"RightTriangle", {226, 138, 179, 0}},
452 {(unsigned char*)"RightTriangleBar", {226, 167, 144, 0}},
453 {(unsigned char*)"RightTriangleEqual", {226, 138, 181, 0}},
454 {(unsigned char*)"RightUpDownVector", {226, 165, 143, 0}},
455 {(unsigned char*)"RightUpTeeVector", {226, 165, 156, 0}},
456 {(unsigned char*)"RightUpVector", {226, 134, 190, 0}},
457 {(unsigned char*)"RightUpVectorBar", {226, 165, 148, 0}},
458 {(unsigned char*)"RightVector", {226, 135, 128, 0}},
459 {(unsigned char*)"RightVectorBar", {226, 165, 147, 0}},
460 {(unsigned char*)"Rightarrow", {226, 135, 146, 0}},
461 {(unsigned char*)"Ropf", {226, 132, 157, 0}},
462 {(unsigned char*)"RoundImplies", {226, 165, 176, 0}},
463 {(unsigned char*)"Rrightarrow", {226, 135, 155, 0}},
464 {(unsigned char*)"Rscr", {226, 132, 155, 0}},
465 {(unsigned char*)"Rsh", {226, 134, 177, 0}},
466 {(unsigned char*)"RuleDelayed", {226, 167, 180, 0}},
467 {(unsigned char*)"SHCHcy", {208, 169, 0}},
468 {(unsigned char*)"SHcy", {208, 168, 0}},
469 {(unsigned char*)"SOFTcy", {208, 172, 0}},
470 {(unsigned char*)"Sacute", {197, 154, 0}},
471 {(unsigned char*)"Sc", {226, 170, 188, 0}},
472 {(unsigned char*)"Scaron", {197, 160, 0}},
473 {(unsigned char*)"Scedil", {197, 158, 0}},
474 {(unsigned char*)"Scirc", {197, 156, 0}},
475 {(unsigned char*)"Scy", {208, 161, 0}},
476 {(unsigned char*)"Sfr", {240, 157, 148, 150, 0}},
477 {(unsigned char*)"ShortDownArrow", {226, 134, 147, 0}},
478 {(unsigned char*)"ShortLeftArrow", {226, 134, 144, 0}},
479 {(unsigned char*)"ShortRightArrow", {226, 134, 146, 0}},
480 {(unsigned char*)"ShortUpArrow", {226, 134, 145, 0}},
481 {(unsigned char*)"Sigma", {206, 163, 0}},
482 {(unsigned char*)"SmallCircle", {226, 136, 152, 0}},
483 {(unsigned char*)"Sopf", {240, 157, 149, 138, 0}},
484 {(unsigned char*)"Sqrt", {226, 136, 154, 0}},
485 {(unsigned char*)"Square", {226, 150, 161, 0}},
486 {(unsigned char*)"SquareIntersection", {226, 138, 147, 0}},
487 {(unsigned char*)"SquareSubset", {226, 138, 143, 0}},
488 {(unsigned char*)"SquareSubsetEqual", {226, 138, 145, 0}},
489 {(unsigned char*)"SquareSuperset", {226, 138, 144, 0}},
490 {(unsigned char*)"SquareSupersetEqual", {226, 138, 146, 0}},
491 {(unsigned char*)"SquareUnion", {226, 138, 148, 0}},
492 {(unsigned char*)"Sscr", {240, 157, 146, 174, 0}},
493 {(unsigned char*)"Star", {226, 139, 134, 0}},
494 {(unsigned char*)"Sub", {226, 139, 144, 0}},
495 {(unsigned char*)"Subset", {226, 139, 144, 0}},
496 {(unsigned char*)"SubsetEqual", {226, 138, 134, 0}},
497 {(unsigned char*)"Succeeds", {226, 137, 187, 0}},
498 {(unsigned char*)"SucceedsEqual", {226, 170, 176, 0}},
499 {(unsigned char*)"SucceedsSlantEqual", {226, 137, 189, 0}},
500 {(unsigned char*)"SucceedsTilde", {226, 137, 191, 0}},
501 {(unsigned char*)"SuchThat", {226, 136, 139, 0}},
502 {(unsigned char*)"Sum", {226, 136, 145, 0}},
503 {(unsigned char*)"Sup", {226, 139, 145, 0}},
504 {(unsigned char*)"Superset", {226, 138, 131, 0}},
505 {(unsigned char*)"SupersetEqual", {226, 138, 135, 0}},
506 {(unsigned char*)"Supset", {226, 139, 145, 0}},
507 {(unsigned char*)"THORN", {195, 158, 0}},
508 {(unsigned char*)"TRADE", {226, 132, 162, 0}},
509 {(unsigned char*)"TSHcy", {208, 139, 0}},
510 {(unsigned char*)"TScy", {208, 166, 0}},
511 {(unsigned char*)"Tab", {9, 0}},
512 {(unsigned char*)"Tau", {206, 164, 0}},
513 {(unsigned char*)"Tcaron", {197, 164, 0}},
514 {(unsigned char*)"Tcedil", {197, 162, 0}},
515 {(unsigned char*)"Tcy", {208, 162, 0}},
516 {(unsigned char*)"Tfr", {240, 157, 148, 151, 0}},
517 {(unsigned char*)"Therefore", {226, 136, 180, 0}},
518 {(unsigned char*)"Theta", {206, 152, 0}},
519 {(unsigned char*)"ThickSpace", {226, 129, 159, 226, 128, 138, 0}},
520 {(unsigned char*)"ThinSpace", {226, 128, 137, 0}},
521 {(unsigned char*)"Tilde", {226, 136, 188, 0}},
522 {(unsigned char*)"TildeEqual", {226, 137, 131, 0}},
523 {(unsigned char*)"TildeFullEqual", {226, 137, 133, 0}},
524 {(unsigned char*)"TildeTilde", {226, 137, 136, 0}},
525 {(unsigned char*)"Topf", {240, 157, 149, 139, 0}},
526 {(unsigned char*)"TripleDot", {226, 131, 155, 0}},
527 {(unsigned char*)"Tscr", {240, 157, 146, 175, 0}},
528 {(unsigned char*)"Tstrok", {197, 166, 0}},
529 {(unsigned char*)"Uacute", {195, 154, 0}},
530 {(unsigned char*)"Uarr", {226, 134, 159, 0}},
531 {(unsigned char*)"Uarrocir", {226, 165, 137, 0}},
532 {(unsigned char*)"Ubrcy", {208, 142, 0}},
533 {(unsigned char*)"Ubreve", {197, 172, 0}},
534 {(unsigned char*)"Ucirc", {195, 155, 0}},
535 {(unsigned char*)"Ucy", {208, 163, 0}},
536 {(unsigned char*)"Udblac", {197, 176, 0}},
537 {(unsigned char*)"Ufr", {240, 157, 148, 152, 0}},
538 {(unsigned char*)"Ugrave", {195, 153, 0}},
539 {(unsigned char*)"Umacr", {197, 170, 0}},
540 {(unsigned char*)"UnderBar", {95, 0}},
541 {(unsigned char*)"UnderBrace", {226, 143, 159, 0}},
542 {(unsigned char*)"UnderBracket", {226, 142, 181, 0}},
543 {(unsigned char*)"UnderParenthesis", {226, 143, 157, 0}},
544 {(unsigned char*)"Union", {226, 139, 131, 0}},
545 {(unsigned char*)"UnionPlus", {226, 138, 142, 0}},
546 {(unsigned char*)"Uogon", {197, 178, 0}},
547 {(unsigned char*)"Uopf", {240, 157, 149, 140, 0}},
548 {(unsigned char*)"UpArrow", {226, 134, 145, 0}},
549 {(unsigned char*)"UpArrowBar", {226, 164, 146, 0}},
550 {(unsigned char*)"UpArrowDownArrow", {226, 135, 133, 0}},
551 {(unsigned char*)"UpDownArrow", {226, 134, 149, 0}},
552 {(unsigned char*)"UpEquilibrium", {226, 165, 174, 0}},
553 {(unsigned char*)"UpTee", {226, 138, 165, 0}},
554 {(unsigned char*)"UpTeeArrow", {226, 134, 165, 0}},
555 {(unsigned char*)"Uparrow", {226, 135, 145, 0}},
556 {(unsigned char*)"Updownarrow", {226, 135, 149, 0}},
557 {(unsigned char*)"UpperLeftArrow", {226, 134, 150, 0}},
558 {(unsigned char*)"UpperRightArrow", {226, 134, 151, 0}},
559 {(unsigned char*)"Upsi", {207, 146, 0}},
560 {(unsigned char*)"Upsilon", {206, 165, 0}},
561 {(unsigned char*)"Uring", {197, 174, 0}},
562 {(unsigned char*)"Uscr", {240, 157, 146, 176, 0}},
563 {(unsigned char*)"Utilde", {197, 168, 0}},
564 {(unsigned char*)"Uuml", {195, 156, 0}},
565 {(unsigned char*)"VDash", {226, 138, 171, 0}},
566 {(unsigned char*)"Vbar", {226, 171, 171, 0}},
567 {(unsigned char*)"Vcy", {208, 146, 0}},
568 {(unsigned char*)"Vdash", {226, 138, 169, 0}},
569 {(unsigned char*)"Vdashl", {226, 171, 166, 0}},
570 {(unsigned char*)"Vee", {226, 139, 129, 0}},
571 {(unsigned char*)"Verbar", {226, 128, 150, 0}},
572 {(unsigned char*)"Vert", {226, 128, 150, 0}},
573 {(unsigned char*)"VerticalBar", {226, 136, 163, 0}},
574 {(unsigned char*)"VerticalLine", {124, 0}},
575 {(unsigned char*)"VerticalSeparator", {226, 157, 152, 0}},
576 {(unsigned char*)"VerticalTilde", {226, 137, 128, 0}},
577 {(unsigned char*)"VeryThinSpace", {226, 128, 138, 0}},
578 {(unsigned char*)"Vfr", {240, 157, 148, 153, 0}},
579 {(unsigned char*)"Vopf", {240, 157, 149, 141, 0}},
580 {(unsigned char*)"Vscr", {240, 157, 146, 177, 0}},
581 {(unsigned char*)"Vvdash", {226, 138, 170, 0}},
582 {(unsigned char*)"Wcirc", {197, 180, 0}},
583 {(unsigned char*)"Wedge", {226, 139, 128, 0}},
584 {(unsigned char*)"Wfr", {240, 157, 148, 154, 0}},
585 {(unsigned char*)"Wopf", {240, 157, 149, 142, 0}},
586 {(unsigned char*)"Wscr", {240, 157, 146, 178, 0}},
587 {(unsigned char*)"Xfr", {240, 157, 148, 155, 0}},
588 {(unsigned char*)"Xi", {206, 158, 0}},
589 {(unsigned char*)"Xopf", {240, 157, 149, 143, 0}},
590 {(unsigned char*)"Xscr", {240, 157, 146, 179, 0}},
591 {(unsigned char*)"YAcy", {208, 175, 0}},
592 {(unsigned char*)"YIcy", {208, 135, 0}},
593 {(unsigned char*)"YUcy", {208, 174, 0}},
594 {(unsigned char*)"Yacute", {195, 157, 0}},
595 {(unsigned char*)"Ycirc", {197, 182, 0}},
596 {(unsigned char*)"Ycy", {208, 171, 0}},
597 {(unsigned char*)"Yfr", {240, 157, 148, 156, 0}},
598 {(unsigned char*)"Yopf", {240, 157, 149, 144, 0}},
599 {(unsigned char*)"Yscr", {240, 157, 146, 180, 0}},
600 {(unsigned char*)"Yuml", {197, 184, 0}},
601 {(unsigned char*)"ZHcy", {208, 150, 0}},
602 {(unsigned char*)"Zacute", {197, 185, 0}},
603 {(unsigned char*)"Zcaron", {197, 189, 0}},
604 {(unsigned char*)"Zcy", {208, 151, 0}},
605 {(unsigned char*)"Zdot", {197, 187, 0}},
606 {(unsigned char*)"ZeroWidthSpace", {226, 128, 139, 0}},
607 {(unsigned char*)"Zeta", {206, 150, 0}},
608 {(unsigned char*)"Zfr", {226, 132, 168, 0}},
609 {(unsigned char*)"Zopf", {226, 132, 164, 0}},
610 {(unsigned char*)"Zscr", {240, 157, 146, 181, 0}},
611 {(unsigned char*)"aacute", {195, 161, 0}},
612 {(unsigned char*)"abreve", {196, 131, 0}},
613 {(unsigned char*)"ac", {226, 136, 190, 0}},
614 {(unsigned char*)"acE", {226, 136, 190, 204, 179, 0}},
615 {(unsigned char*)"acd", {226, 136, 191, 0}},
616 {(unsigned char*)"acirc", {195, 162, 0}},
617 {(unsigned char*)"acute", {194, 180, 0}},
618 {(unsigned char*)"acy", {208, 176, 0}},
619 {(unsigned char*)"aelig", {195, 166, 0}},
620 {(unsigned char*)"af", {226, 129, 161, 0}},
621 {(unsigned char*)"afr", {240, 157, 148, 158, 0}},
622 {(unsigned char*)"agrave", {195, 160, 0}},
623 {(unsigned char*)"alefsym", {226, 132, 181, 0}},
624 {(unsigned char*)"aleph", {226, 132, 181, 0}},
625 {(unsigned char*)"alpha", {206, 177, 0}},
626 {(unsigned char*)"amacr", {196, 129, 0}},
627 {(unsigned char*)"amalg", {226, 168, 191, 0}},
628 {(unsigned char*)"amp", {38, 0}},
629 {(unsigned char*)"and", {226, 136, 167, 0}},
630 {(unsigned char*)"andand", {226, 169, 149, 0}},
631 {(unsigned char*)"andd", {226, 169, 156, 0}},
632 {(unsigned char*)"andslope", {226, 169, 152, 0}},
633 {(unsigned char*)"andv", {226, 169, 154, 0}},
634 {(unsigned char*)"ang", {226, 136, 160, 0}},
635 {(unsigned char*)"ange", {226, 166, 164, 0}},
636 {(unsigned char*)"angle", {226, 136, 160, 0}},
637 {(unsigned char*)"angmsd", {226, 136, 161, 0}},
638 {(unsigned char*)"angmsdaa", {226, 166, 168, 0}},
639 {(unsigned char*)"angmsdab", {226, 166, 169, 0}},
640 {(unsigned char*)"angmsdac", {226, 166, 170, 0}},
641 {(unsigned char*)"angmsdad", {226, 166, 171, 0}},
642 {(unsigned char*)"angmsdae", {226, 166, 172, 0}},
643 {(unsigned char*)"angmsdaf", {226, 166, 173, 0}},
644 {(unsigned char*)"angmsdag", {226, 166, 174, 0}},
645 {(unsigned char*)"angmsdah", {226, 166, 175, 0}},
646 {(unsigned char*)"angrt", {226, 136, 159, 0}},
647 {(unsigned char*)"angrtvb", {226, 138, 190, 0}},
648 {(unsigned char*)"angrtvbd", {226, 166, 157, 0}},
649 {(unsigned char*)"angsph", {226, 136, 162, 0}},
650 {(unsigned char*)"angst", {195, 133, 0}},
651 {(unsigned char*)"angzarr", {226, 141, 188, 0}},
652 {(unsigned char*)"aogon", {196, 133, 0}},
653 {(unsigned char*)"aopf", {240, 157, 149, 146, 0}},
654 {(unsigned char*)"ap", {226, 137, 136, 0}},
655 {(unsigned char*)"apE", {226, 169, 176, 0}},
656 {(unsigned char*)"apacir", {226, 169, 175, 0}},
657 {(unsigned char*)"ape", {226, 137, 138, 0}},
658 {(unsigned char*)"apid", {226, 137, 139, 0}},
659 {(unsigned char*)"apos", {39, 0}},
660 {(unsigned char*)"approx", {226, 137, 136, 0}},
661 {(unsigned char*)"approxeq", {226, 137, 138, 0}},
662 {(unsigned char*)"aring", {195, 165, 0}},
663 {(unsigned char*)"ascr", {240, 157, 146, 182, 0}},
664 {(unsigned char*)"ast", {42, 0}},
665 {(unsigned char*)"asymp", {226, 137, 136, 0}},
666 {(unsigned char*)"asympeq", {226, 137, 141, 0}},
667 {(unsigned char*)"atilde", {195, 163, 0}},
668 {(unsigned char*)"auml", {195, 164, 0}},
669 {(unsigned char*)"awconint", {226, 136, 179, 0}},
670 {(unsigned char*)"awint", {226, 168, 145, 0}},
671 {(unsigned char*)"bNot", {226, 171, 173, 0}},
672 {(unsigned char*)"backcong", {226, 137, 140, 0}},
673 {(unsigned char*)"backepsilon", {207, 182, 0}},
674 {(unsigned char*)"backprime", {226, 128, 181, 0}},
675 {(unsigned char*)"backsim", {226, 136, 189, 0}},
676 {(unsigned char*)"backsimeq", {226, 139, 141, 0}},
677 {(unsigned char*)"barvee", {226, 138, 189, 0}},
678 {(unsigned char*)"barwed", {226, 140, 133, 0}},
679 {(unsigned char*)"barwedge", {226, 140, 133, 0}},
680 {(unsigned char*)"bbrk", {226, 142, 181, 0}},
681 {(unsigned char*)"bbrktbrk", {226, 142, 182, 0}},
682 {(unsigned char*)"bcong", {226, 137, 140, 0}},
683 {(unsigned char*)"bcy", {208, 177, 0}},
684 {(unsigned char*)"bdquo", {226, 128, 158, 0}},
685 {(unsigned char*)"becaus", {226, 136, 181, 0}},
686 {(unsigned char*)"because", {226, 136, 181, 0}},
687 {(unsigned char*)"bemptyv", {226, 166, 176, 0}},
688 {(unsigned char*)"bepsi", {207, 182, 0}},
689 {(unsigned char*)"bernou", {226, 132, 172, 0}},
690 {(unsigned char*)"beta", {206, 178, 0}},
691 {(unsigned char*)"beth", {226, 132, 182, 0}},
692 {(unsigned char*)"between", {226, 137, 172, 0}},
693 {(unsigned char*)"bfr", {240, 157, 148, 159, 0}},
694 {(unsigned char*)"bigcap", {226, 139, 130, 0}},
695 {(unsigned char*)"bigcirc", {226, 151, 175, 0}},
696 {(unsigned char*)"bigcup", {226, 139, 131, 0}},
697 {(unsigned char*)"bigodot", {226, 168, 128, 0}},
698 {(unsigned char*)"bigoplus", {226, 168, 129, 0}},
699 {(unsigned char*)"bigotimes", {226, 168, 130, 0}},
700 {(unsigned char*)"bigsqcup", {226, 168, 134, 0}},
701 {(unsigned char*)"bigstar", {226, 152, 133, 0}},
702 {(unsigned char*)"bigtriangledown", {226, 150, 189, 0}},
703 {(unsigned char*)"bigtriangleup", {226, 150, 179, 0}},
704 {(unsigned char*)"biguplus", {226, 168, 132, 0}},
705 {(unsigned char*)"bigvee", {226, 139, 129, 0}},
706 {(unsigned char*)"bigwedge", {226, 139, 128, 0}},
707 {(unsigned char*)"bkarow", {226, 164, 141, 0}},
708 {(unsigned char*)"blacklozenge", {226, 167, 171, 0}},
709 {(unsigned char*)"blacksquare", {226, 150, 170, 0}},
710 {(unsigned char*)"blacktriangle", {226, 150, 180, 0}},
711 {(unsigned char*)"blacktriangledown", {226, 150, 190, 0}},
712 {(unsigned char*)"blacktriangleleft", {226, 151, 130, 0}},
713 {(unsigned char*)"blacktriangleright", {226, 150, 184, 0}},
714 {(unsigned char*)"blank", {226, 144, 163, 0}},
715 {(unsigned char*)"blk12", {226, 150, 146, 0}},
716 {(unsigned char*)"blk14", {226, 150, 145, 0}},
717 {(unsigned char*)"blk34", {226, 150, 147, 0}},
718 {(unsigned char*)"block", {226, 150, 136, 0}},
719 {(unsigned char*)"bne", {61, 226, 131, 165, 0}},
720 {(unsigned char*)"bnequiv", {226, 137, 161, 226, 131, 165, 0}},
721 {(unsigned char*)"bnot", {226, 140, 144, 0}},
722 {(unsigned char*)"bopf", {240, 157, 149, 147, 0}},
723 {(unsigned char*)"bot", {226, 138, 165, 0}},
724 {(unsigned char*)"bottom", {226, 138, 165, 0}},
725 {(unsigned char*)"bowtie", {226, 139, 136, 0}},
726 {(unsigned char*)"boxDL", {226, 149, 151, 0}},
727 {(unsigned char*)"boxDR", {226, 149, 148, 0}},
728 {(unsigned char*)"boxDl", {226, 149, 150, 0}},
729 {(unsigned char*)"boxDr", {226, 149, 147, 0}},
730 {(unsigned char*)"boxH", {226, 149, 144, 0}},
731 {(unsigned char*)"boxHD", {226, 149, 166, 0}},
732 {(unsigned char*)"boxHU", {226, 149, 169, 0}},
733 {(unsigned char*)"boxHd", {226, 149, 164, 0}},
734 {(unsigned char*)"boxHu", {226, 149, 167, 0}},
735 {(unsigned char*)"boxUL", {226, 149, 157, 0}},
736 {(unsigned char*)"boxUR", {226, 149, 154, 0}},
737 {(unsigned char*)"boxUl", {226, 149, 156, 0}},
738 {(unsigned char*)"boxUr", {226, 149, 153, 0}},
739 {(unsigned char*)"boxV", {226, 149, 145, 0}},
740 {(unsigned char*)"boxVH", {226, 149, 172, 0}},
741 {(unsigned char*)"boxVL", {226, 149, 163, 0}},
742 {(unsigned char*)"boxVR", {226, 149, 160, 0}},
743 {(unsigned char*)"boxVh", {226, 149, 171, 0}},
744 {(unsigned char*)"boxVl", {226, 149, 162, 0}},
745 {(unsigned char*)"boxVr", {226, 149, 159, 0}},
746 {(unsigned char*)"boxbox", {226, 167, 137, 0}},
747 {(unsigned char*)"boxdL", {226, 149, 149, 0}},
748 {(unsigned char*)"boxdR", {226, 149, 146, 0}},
749 {(unsigned char*)"boxdl", {226, 148, 144, 0}},
750 {(unsigned char*)"boxdr", {226, 148, 140, 0}},
751 {(unsigned char*)"boxh", {226, 148, 128, 0}},
752 {(unsigned char*)"boxhD", {226, 149, 165, 0}},
753 {(unsigned char*)"boxhU", {226, 149, 168, 0}},
754 {(unsigned char*)"boxhd", {226, 148, 172, 0}},
755 {(unsigned char*)"boxhu", {226, 148, 180, 0}},
756 {(unsigned char*)"boxminus", {226, 138, 159, 0}},
757 {(unsigned char*)"boxplus", {226, 138, 158, 0}},
758 {(unsigned char*)"boxtimes", {226, 138, 160, 0}},
759 {(unsigned char*)"boxuL", {226, 149, 155, 0}},
760 {(unsigned char*)"boxuR", {226, 149, 152, 0}},
761 {(unsigned char*)"boxul", {226, 148, 152, 0}},
762 {(unsigned char*)"boxur", {226, 148, 148, 0}},
763 {(unsigned char*)"boxv", {226, 148, 130, 0}},
764 {(unsigned char*)"boxvH", {226, 149, 170, 0}},
765 {(unsigned char*)"boxvL", {226, 149, 161, 0}},
766 {(unsigned char*)"boxvR", {226, 149, 158, 0}},
767 {(unsigned char*)"boxvh", {226, 148, 188, 0}},
768 {(unsigned char*)"boxvl", {226, 148, 164, 0}},
769 {(unsigned char*)"boxvr", {226, 148, 156, 0}},
770 {(unsigned char*)"bprime", {226, 128, 181, 0}},
771 {(unsigned char*)"breve", {203, 152, 0}},
772 {(unsigned char*)"brvbar", {194, 166, 0}},
773 {(unsigned char*)"bscr", {240, 157, 146, 183, 0}},
774 {(unsigned char*)"bsemi", {226, 129, 143, 0}},
775 {(unsigned char*)"bsim", {226, 136, 189, 0}},
776 {(unsigned char*)"bsime", {226, 139, 141, 0}},
777 {(unsigned char*)"bsol", {92, 0}},
778 {(unsigned char*)"bsolb", {226, 167, 133, 0}},
779 {(unsigned char*)"bsolhsub", {226, 159, 136, 0}},
780 {(unsigned char*)"bull", {226, 128, 162, 0}},
781 {(unsigned char*)"bullet", {226, 128, 162, 0}},
782 {(unsigned char*)"bump", {226, 137, 142, 0}},
783 {(unsigned char*)"bumpE", {226, 170, 174, 0}},
784 {(unsigned char*)"bumpe", {226, 137, 143, 0}},
785 {(unsigned char*)"bumpeq", {226, 137, 143, 0}},
786 {(unsigned char*)"cacute", {196, 135, 0}},
787 {(unsigned char*)"cap", {226, 136, 169, 0}},
788 {(unsigned char*)"capand", {226, 169, 132, 0}},
789 {(unsigned char*)"capbrcup", {226, 169, 137, 0}},
790 {(unsigned char*)"capcap", {226, 169, 139, 0}},
791 {(unsigned char*)"capcup", {226, 169, 135, 0}},
792 {(unsigned char*)"capdot", {226, 169, 128, 0}},
793 {(unsigned char*)"caps", {226, 136, 169, 239, 184, 128, 0}},
794 {(unsigned char*)"caret", {226, 129, 129, 0}},
795 {(unsigned char*)"caron", {203, 135, 0}},
796 {(unsigned char*)"ccaps", {226, 169, 141, 0}},
797 {(unsigned char*)"ccaron", {196, 141, 0}},
798 {(unsigned char*)"ccedil", {195, 167, 0}},
799 {(unsigned char*)"ccirc", {196, 137, 0}},
800 {(unsigned char*)"ccups", {226, 169, 140, 0}},
801 {(unsigned char*)"ccupssm", {226, 169, 144, 0}},
802 {(unsigned char*)"cdot", {196, 139, 0}},
803 {(unsigned char*)"cedil", {194, 184, 0}},
804 {(unsigned char*)"cemptyv", {226, 166, 178, 0}},
805 {(unsigned char*)"cent", {194, 162, 0}},
806 {(unsigned char*)"centerdot", {194, 183, 0}},
807 {(unsigned char*)"cfr", {240, 157, 148, 160, 0}},
808 {(unsigned char*)"chcy", {209, 135, 0}},
809 {(unsigned char*)"check", {226, 156, 147, 0}},
810 {(unsigned char*)"checkmark", {226, 156, 147, 0}},
811 {(unsigned char*)"chi", {207, 135, 0}},
812 {(unsigned char*)"cir", {226, 151, 139, 0}},
813 {(unsigned char*)"cirE", {226, 167, 131, 0}},
814 {(unsigned char*)"circ", {203, 134, 0}},
815 {(unsigned char*)"circeq", {226, 137, 151, 0}},
816 {(unsigned char*)"circlearrowleft", {226, 134, 186, 0}},
817 {(unsigned char*)"circlearrowright", {226, 134, 187, 0}},
818 {(unsigned char*)"circledR", {194, 174, 0}},
819 {(unsigned char*)"circledS", {226, 147, 136, 0}},
820 {(unsigned char*)"circledast", {226, 138, 155, 0}},
821 {(unsigned char*)"circledcirc", {226, 138, 154, 0}},
822 {(unsigned char*)"circleddash", {226, 138, 157, 0}},
823 {(unsigned char*)"cire", {226, 137, 151, 0}},
824 {(unsigned char*)"cirfnint", {226, 168, 144, 0}},
825 {(unsigned char*)"cirmid", {226, 171, 175, 0}},
826 {(unsigned char*)"cirscir", {226, 167, 130, 0}},
827 {(unsigned char*)"clubs", {226, 153, 163, 0}},
828 {(unsigned char*)"clubsuit", {226, 153, 163, 0}},
829 {(unsigned char*)"colon", {58, 0}},
830 {(unsigned char*)"colone", {226, 137, 148, 0}},
831 {(unsigned char*)"coloneq", {226, 137, 148, 0}},
832 {(unsigned char*)"comma", {44, 0}},
833 {(unsigned char*)"commat", {64, 0}},
834 {(unsigned char*)"comp", {226, 136, 129, 0}},
835 {(unsigned char*)"compfn", {226, 136, 152, 0}},
836 {(unsigned char*)"complement", {226, 136, 129, 0}},
837 {(unsigned char*)"complexes", {226, 132, 130, 0}},
838 {(unsigned char*)"cong", {226, 137, 133, 0}},
839 {(unsigned char*)"congdot", {226, 169, 173, 0}},
840 {(unsigned char*)"conint", {226, 136, 174, 0}},
841 {(unsigned char*)"copf", {240, 157, 149, 148, 0}},
842 {(unsigned char*)"coprod", {226, 136, 144, 0}},
843 {(unsigned char*)"copy", {194, 169, 0}},
844 {(unsigned char*)"copysr", {226, 132, 151, 0}},
845 {(unsigned char*)"crarr", {226, 134, 181, 0}},
846 {(unsigned char*)"cross", {226, 156, 151, 0}},
847 {(unsigned char*)"cscr", {240, 157, 146, 184, 0}},
848 {(unsigned char*)"csub", {226, 171, 143, 0}},
849 {(unsigned char*)"csube", {226, 171, 145, 0}},
850 {(unsigned char*)"csup", {226, 171, 144, 0}},
851 {(unsigned char*)"csupe", {226, 171, 146, 0}},
852 {(unsigned char*)"ctdot", {226, 139, 175, 0}},
853 {(unsigned char*)"cudarrl", {226, 164, 184, 0}},
854 {(unsigned char*)"cudarrr", {226, 164, 181, 0}},
855 {(unsigned char*)"cuepr", {226, 139, 158, 0}},
856 {(unsigned char*)"cuesc", {226, 139, 159, 0}},
857 {(unsigned char*)"cularr", {226, 134, 182, 0}},
858 {(unsigned char*)"cularrp", {226, 164, 189, 0}},
859 {(unsigned char*)"cup", {226, 136, 170, 0}},
860 {(unsigned char*)"cupbrcap", {226, 169, 136, 0}},
861 {(unsigned char*)"cupcap", {226, 169, 134, 0}},
862 {(unsigned char*)"cupcup", {226, 169, 138, 0}},
863 {(unsigned char*)"cupdot", {226, 138, 141, 0}},
864 {(unsigned char*)"cupor", {226, 169, 133, 0}},
865 {(unsigned char*)"cups", {226, 136, 170, 239, 184, 128, 0}},
866 {(unsigned char*)"curarr", {226, 134, 183, 0}},
867 {(unsigned char*)"curarrm", {226, 164, 188, 0}},
868 {(unsigned char*)"curlyeqprec", {226, 139, 158, 0}},
869 {(unsigned char*)"curlyeqsucc", {226, 139, 159, 0}},
870 {(unsigned char*)"curlyvee", {226, 139, 142, 0}},
871 {(unsigned char*)"curlywedge", {226, 139, 143, 0}},
872 {(unsigned char*)"curren", {194, 164, 0}},
873 {(unsigned char*)"curvearrowleft", {226, 134, 182, 0}},
874 {(unsigned char*)"curvearrowright", {226, 134, 183, 0}},
875 {(unsigned char*)"cuvee", {226, 139, 142, 0}},
876 {(unsigned char*)"cuwed", {226, 139, 143, 0}},
877 {(unsigned char*)"cwconint", {226, 136, 178, 0}},
878 {(unsigned char*)"cwint", {226, 136, 177, 0}},
879 {(unsigned char*)"cylcty", {226, 140, 173, 0}},
880 {(unsigned char*)"dArr", {226, 135, 147, 0}},
881 {(unsigned char*)"dHar", {226, 165, 165, 0}},
882 {(unsigned char*)"dagger", {226, 128, 160, 0}},
883 {(unsigned char*)"daleth", {226, 132, 184, 0}},
884 {(unsigned char*)"darr", {226, 134, 147, 0}},
885 {(unsigned char*)"dash", {226, 128, 144, 0}},
886 {(unsigned char*)"dashv", {226, 138, 163, 0}},
887 {(unsigned char*)"dbkarow", {226, 164, 143, 0}},
888 {(unsigned char*)"dblac", {203, 157, 0}},
889 {(unsigned char*)"dcaron", {196, 143, 0}},
890 {(unsigned char*)"dcy", {208, 180, 0}},
891 {(unsigned char*)"dd", {226, 133, 134, 0}},
892 {(unsigned char*)"ddagger", {226, 128, 161, 0}},
893 {(unsigned char*)"ddarr", {226, 135, 138, 0}},
894 {(unsigned char*)"ddotseq", {226, 169, 183, 0}},
895 {(unsigned char*)"deg", {194, 176, 0}},
896 {(unsigned char*)"delta", {206, 180, 0}},
897 {(unsigned char*)"demptyv", {226, 166, 177, 0}},
898 {(unsigned char*)"dfisht", {226, 165, 191, 0}},
899 {(unsigned char*)"dfr", {240, 157, 148, 161, 0}},
900 {(unsigned char*)"dharl", {226, 135, 131, 0}},
901 {(unsigned char*)"dharr", {226, 135, 130, 0}},
902 {(unsigned char*)"diam", {226, 139, 132, 0}},
903 {(unsigned char*)"diamond", {226, 139, 132, 0}},
904 {(unsigned char*)"diamondsuit", {226, 153, 166, 0}},
905 {(unsigned char*)"diams", {226, 153, 166, 0}},
906 {(unsigned char*)"die", {194, 168, 0}},
907 {(unsigned char*)"digamma", {207, 157, 0}},
908 {(unsigned char*)"disin", {226, 139, 178, 0}},
909 {(unsigned char*)"div", {195, 183, 0}},
910 {(unsigned char*)"divide", {195, 183, 0}},
911 {(unsigned char*)"divideontimes", {226, 139, 135, 0}},
912 {(unsigned char*)"divonx", {226, 139, 135, 0}},
913 {(unsigned char*)"djcy", {209, 146, 0}},
914 {(unsigned char*)"dlcorn", {226, 140, 158, 0}},
915 {(unsigned char*)"dlcrop", {226, 140, 141, 0}},
916 {(unsigned char*)"dollar", {36, 0}},
917 {(unsigned char*)"dopf", {240, 157, 149, 149, 0}},
918 {(unsigned char*)"dot", {203, 153, 0}},
919 {(unsigned char*)"doteq", {226, 137, 144, 0}},
920 {(unsigned char*)"doteqdot", {226, 137, 145, 0}},
921 {(unsigned char*)"dotminus", {226, 136, 184, 0}},
922 {(unsigned char*)"dotplus", {226, 136, 148, 0}},
923 {(unsigned char*)"dotsquare", {226, 138, 161, 0}},
924 {(unsigned char*)"doublebarwedge", {226, 140, 134, 0}},
925 {(unsigned char*)"downarrow", {226, 134, 147, 0}},
926 {(unsigned char*)"downdownarrows", {226, 135, 138, 0}},
927 {(unsigned char*)"downharpoonleft", {226, 135, 131, 0}},
928 {(unsigned char*)"downharpoonright", {226, 135, 130, 0}},
929 {(unsigned char*)"drbkarow", {226, 164, 144, 0}},
930 {(unsigned char*)"drcorn", {226, 140, 159, 0}},
931 {(unsigned char*)"drcrop", {226, 140, 140, 0}},
932 {(unsigned char*)"dscr", {240, 157, 146, 185, 0}},
933 {(unsigned char*)"dscy", {209, 149, 0}},
934 {(unsigned char*)"dsol", {226, 167, 182, 0}},
935 {(unsigned char*)"dstrok", {196, 145, 0}},
936 {(unsigned char*)"dtdot", {226, 139, 177, 0}},
937 {(unsigned char*)"dtri", {226, 150, 191, 0}},
938 {(unsigned char*)"dtrif", {226, 150, 190, 0}},
939 {(unsigned char*)"duarr", {226, 135, 181, 0}},
940 {(unsigned char*)"duhar", {226, 165, 175, 0}},
941 {(unsigned char*)"dwangle", {226, 166, 166, 0}},
942 {(unsigned char*)"dzcy", {209, 159, 0}},
943 {(unsigned char*)"dzigrarr", {226, 159, 191, 0}},
944 {(unsigned char*)"eDDot", {226, 169, 183, 0}},
945 {(unsigned char*)"eDot", {226, 137, 145, 0}},
946 {(unsigned char*)"eacute", {195, 169, 0}},
947 {(unsigned char*)"easter", {226, 169, 174, 0}},
948 {(unsigned char*)"ecaron", {196, 155, 0}},
949 {(unsigned char*)"ecir", {226, 137, 150, 0}},
950 {(unsigned char*)"ecirc", {195, 170, 0}},
951 {(unsigned char*)"ecolon", {226, 137, 149, 0}},
952 {(unsigned char*)"ecy", {209, 141, 0}},
953 {(unsigned char*)"edot", {196, 151, 0}},
954 {(unsigned char*)"ee", {226, 133, 135, 0}},
955 {(unsigned char*)"efDot", {226, 137, 146, 0}},
956 {(unsigned char*)"efr", {240, 157, 148, 162, 0}},
957 {(unsigned char*)"eg", {226, 170, 154, 0}},
958 {(unsigned char*)"egrave", {195, 168, 0}},
959 {(unsigned char*)"egs", {226, 170, 150, 0}},
960 {(unsigned char*)"egsdot", {226, 170, 152, 0}},
961 {(unsigned char*)"el", {226, 170, 153, 0}},
962 {(unsigned char*)"elinters", {226, 143, 167, 0}},
963 {(unsigned char*)"ell", {226, 132, 147, 0}},
964 {(unsigned char*)"els", {226, 170, 149, 0}},
965 {(unsigned char*)"elsdot", {226, 170, 151, 0}},
966 {(unsigned char*)"emacr", {196, 147, 0}},
967 {(unsigned char*)"empty", {226, 136, 133, 0}},
968 {(unsigned char*)"emptyset", {226, 136, 133, 0}},
969 {(unsigned char*)"emptyv", {226, 136, 133, 0}},
970 {(unsigned char*)"emsp", {226, 128, 131, 0}},
971 {(unsigned char*)"emsp13", {226, 128, 132, 0}},
972 {(unsigned char*)"emsp14", {226, 128, 133, 0}},
973 {(unsigned char*)"eng", {197, 139, 0}},
974 {(unsigned char*)"ensp", {226, 128, 130, 0}},
975 {(unsigned char*)"eogon", {196, 153, 0}},
976 {(unsigned char*)"eopf", {240, 157, 149, 150, 0}},
977 {(unsigned char*)"epar", {226, 139, 149, 0}},
978 {(unsigned char*)"eparsl", {226, 167, 163, 0}},
979 {(unsigned char*)"eplus", {226, 169, 177, 0}},
980 {(unsigned char*)"epsi", {206, 181, 0}},
981 {(unsigned char*)"epsilon", {206, 181, 0}},
982 {(unsigned char*)"epsiv", {207, 181, 0}},
983 {(unsigned char*)"eqcirc", {226, 137, 150, 0}},
984 {(unsigned char*)"eqcolon", {226, 137, 149, 0}},
985 {(unsigned char*)"eqsim", {226, 137, 130, 0}},
986 {(unsigned char*)"eqslantgtr", {226, 170, 150, 0}},
987 {(unsigned char*)"eqslantless", {226, 170, 149, 0}},
988 {(unsigned char*)"equals", {61, 0}},
989 {(unsigned char*)"equest", {226, 137, 159, 0}},
990 {(unsigned char*)"equiv", {226, 137, 161, 0}},
991 {(unsigned char*)"equivDD", {226, 169, 184, 0}},
992 {(unsigned char*)"eqvparsl", {226, 167, 165, 0}},
993 {(unsigned char*)"erDot", {226, 137, 147, 0}},
994 {(unsigned char*)"erarr", {226, 165, 177, 0}},
995 {(unsigned char*)"escr", {226, 132, 175, 0}},
996 {(unsigned char*)"esdot", {226, 137, 144, 0}},
997 {(unsigned char*)"esim", {226, 137, 130, 0}},
998 {(unsigned char*)"eta", {206, 183, 0}},
999 {(unsigned char*)"eth", {195, 176, 0}},
1000 {(unsigned char*)"euml", {195, 171, 0}},
1001 {(unsigned char*)"euro", {226, 130, 172, 0}},
1002 {(unsigned char*)"excl", {33, 0}},
1003 {(unsigned char*)"exist", {226, 136, 131, 0}},
1004 {(unsigned char*)"expectation", {226, 132, 176, 0}},
1005 {(unsigned char*)"exponentiale", {226, 133, 135, 0}},
1006 {(unsigned char*)"fallingdotseq", {226, 137, 146, 0}},
1007 {(unsigned char*)"fcy", {209, 132, 0}},
1008 {(unsigned char*)"female", {226, 153, 128, 0}},
1009 {(unsigned char*)"ffilig", {239, 172, 131, 0}},
1010 {(unsigned char*)"fflig", {239, 172, 128, 0}},
1011 {(unsigned char*)"ffllig", {239, 172, 132, 0}},
1012 {(unsigned char*)"ffr", {240, 157, 148, 163, 0}},
1013 {(unsigned char*)"filig", {239, 172, 129, 0}},
1014 {(unsigned char*)"fjlig", {102, 106, 0}},
1015 {(unsigned char*)"flat", {226, 153, 173, 0}},
1016 {(unsigned char*)"fllig", {239, 172, 130, 0}},
1017 {(unsigned char*)"fltns", {226, 150, 177, 0}},
1018 {(unsigned char*)"fnof", {198, 146, 0}},
1019 {(unsigned char*)"fopf", {240, 157, 149, 151, 0}},
1020 {(unsigned char*)"forall", {226, 136, 128, 0}},
1021 {(unsigned char*)"fork", {226, 139, 148, 0}},
1022 {(unsigned char*)"forkv", {226, 171, 153, 0}},
1023 {(unsigned char*)"fpartint", {226, 168, 141, 0}},
1024 {(unsigned char*)"frac12", {194, 189, 0}},
1025 {(unsigned char*)"frac13", {226, 133, 147, 0}},
1026 {(unsigned char*)"frac14", {194, 188, 0}},
1027 {(unsigned char*)"frac15", {226, 133, 149, 0}},
1028 {(unsigned char*)"frac16", {226, 133, 153, 0}},
1029 {(unsigned char*)"frac18", {226, 133, 155, 0}},
1030 {(unsigned char*)"frac23", {226, 133, 148, 0}},
1031 {(unsigned char*)"frac25", {226, 133, 150, 0}},
1032 {(unsigned char*)"frac34", {194, 190, 0}},
1033 {(unsigned char*)"frac35", {226, 133, 151, 0}},
1034 {(unsigned char*)"frac38", {226, 133, 156, 0}},
1035 {(unsigned char*)"frac45", {226, 133, 152, 0}},
1036 {(unsigned char*)"frac56", {226, 133, 154, 0}},
1037 {(unsigned char*)"frac58", {226, 133, 157, 0}},
1038 {(unsigned char*)"frac78", {226, 133, 158, 0}},
1039 {(unsigned char*)"frasl", {226, 129, 132, 0}},
1040 {(unsigned char*)"frown", {226, 140, 162, 0}},
1041 {(unsigned char*)"fscr", {240, 157, 146, 187, 0}},
1042 {(unsigned char*)"gE", {226, 137, 167, 0}},
1043 {(unsigned char*)"gEl", {226, 170, 140, 0}},
1044 {(unsigned char*)"gacute", {199, 181, 0}},
1045 {(unsigned char*)"gamma", {206, 179, 0}},
1046 {(unsigned char*)"gammad", {207, 157, 0}},
1047 {(unsigned char*)"gap", {226, 170, 134, 0}},
1048 {(unsigned char*)"gbreve", {196, 159, 0}},
1049 {(unsigned char*)"gcirc", {196, 157, 0}},
1050 {(unsigned char*)"gcy", {208, 179, 0}},
1051 {(unsigned char*)"gdot", {196, 161, 0}},
1052 {(unsigned char*)"ge", {226, 137, 165, 0}},
1053 {(unsigned char*)"gel", {226, 139, 155, 0}},
1054 {(unsigned char*)"geq", {226, 137, 165, 0}},
1055 {(unsigned char*)"geqq", {226, 137, 167, 0}},
1056 {(unsigned char*)"geqslant", {226, 169, 190, 0}},
1057 {(unsigned char*)"ges", {226, 169, 190, 0}},
1058 {(unsigned char*)"gescc", {226, 170, 169, 0}},
1059 {(unsigned char*)"gesdot", {226, 170, 128, 0}},
1060 {(unsigned char*)"gesdoto", {226, 170, 130, 0}},
1061 {(unsigned char*)"gesdotol", {226, 170, 132, 0}},
1062 {(unsigned char*)"gesl", {226, 139, 155, 239, 184, 128, 0}},
1063 {(unsigned char*)"gesles", {226, 170, 148, 0}},
1064 {(unsigned char*)"gfr", {240, 157, 148, 164, 0}},
1065 {(unsigned char*)"gg", {226, 137, 171, 0}},
1066 {(unsigned char*)"ggg", {226, 139, 153, 0}},
1067 {(unsigned char*)"gimel", {226, 132, 183, 0}},
1068 {(unsigned char*)"gjcy", {209, 147, 0}},
1069 {(unsigned char*)"gl", {226, 137, 183, 0}},
1070 {(unsigned char*)"glE", {226, 170, 146, 0}},
1071 {(unsigned char*)"gla", {226, 170, 165, 0}},
1072 {(unsigned char*)"glj", {226, 170, 164, 0}},
1073 {(unsigned char*)"gnE", {226, 137, 169, 0}},
1074 {(unsigned char*)"gnap", {226, 170, 138, 0}},
1075 {(unsigned char*)"gnapprox", {226, 170, 138, 0}},
1076 {(unsigned char*)"gne", {226, 170, 136, 0}},
1077 {(unsigned char*)"gneq", {226, 170, 136, 0}},
1078 {(unsigned char*)"gneqq", {226, 137, 169, 0}},
1079 {(unsigned char*)"gnsim", {226, 139, 167, 0}},
1080 {(unsigned char*)"gopf", {240, 157, 149, 152, 0}},
1081 {(unsigned char*)"grave", {96, 0}},
1082 {(unsigned char*)"gscr", {226, 132, 138, 0}},
1083 {(unsigned char*)"gsim", {226, 137, 179, 0}},
1084 {(unsigned char*)"gsime", {226, 170, 142, 0}},
1085 {(unsigned char*)"gsiml", {226, 170, 144, 0}},
1086 {(unsigned char*)"gt", {62, 0}},
1087 {(unsigned char*)"gtcc", {226, 170, 167, 0}},
1088 {(unsigned char*)"gtcir", {226, 169, 186, 0}},
1089 {(unsigned char*)"gtdot", {226, 139, 151, 0}},
1090 {(unsigned char*)"gtlPar", {226, 166, 149, 0}},
1091 {(unsigned char*)"gtquest", {226, 169, 188, 0}},
1092 {(unsigned char*)"gtrapprox", {226, 170, 134, 0}},
1093 {(unsigned char*)"gtrarr", {226, 165, 184, 0}},
1094 {(unsigned char*)"gtrdot", {226, 139, 151, 0}},
1095 {(unsigned char*)"gtreqless", {226, 139, 155, 0}},
1096 {(unsigned char*)"gtreqqless", {226, 170, 140, 0}},
1097 {(unsigned char*)"gtrless", {226, 137, 183, 0}},
1098 {(unsigned char*)"gtrsim", {226, 137, 179, 0}},
1099 {(unsigned char*)"gvertneqq", {226, 137, 169, 239, 184, 128, 0}},
1100 {(unsigned char*)"gvnE", {226, 137, 169, 239, 184, 128, 0}},
1101 {(unsigned char*)"hArr", {226, 135, 148, 0}},
1102 {(unsigned char*)"hairsp", {226, 128, 138, 0}},
1103 {(unsigned char*)"half", {194, 189, 0}},
1104 {(unsigned char*)"hamilt", {226, 132, 139, 0}},
1105 {(unsigned char*)"hardcy", {209, 138, 0}},
1106 {(unsigned char*)"harr", {226, 134, 148, 0}},
1107 {(unsigned char*)"harrcir", {226, 165, 136, 0}},
1108 {(unsigned char*)"harrw", {226, 134, 173, 0}},
1109 {(unsigned char*)"hbar", {226, 132, 143, 0}},
1110 {(unsigned char*)"hcirc", {196, 165, 0}},
1111 {(unsigned char*)"hearts", {226, 153, 165, 0}},
1112 {(unsigned char*)"heartsuit", {226, 153, 165, 0}},
1113 {(unsigned char*)"hellip", {226, 128, 166, 0}},
1114 {(unsigned char*)"hercon", {226, 138, 185, 0}},
1115 {(unsigned char*)"hfr", {240, 157, 148, 165, 0}},
1116 {(unsigned char*)"hksearow", {226, 164, 165, 0}},
1117 {(unsigned char*)"hkswarow", {226, 164, 166, 0}},
1118 {(unsigned char*)"hoarr", {226, 135, 191, 0}},
1119 {(unsigned char*)"homtht", {226, 136, 187, 0}},
1120 {(unsigned char*)"hookleftarrow", {226, 134, 169, 0}},
1121 {(unsigned char*)"hookrightarrow", {226, 134, 170, 0}},
1122 {(unsigned char*)"hopf", {240, 157, 149, 153, 0}},
1123 {(unsigned char*)"horbar", {226, 128, 149, 0}},
1124 {(unsigned char*)"hscr", {240, 157, 146, 189, 0}},
1125 {(unsigned char*)"hslash", {226, 132, 143, 0}},
1126 {(unsigned char*)"hstrok", {196, 167, 0}},
1127 {(unsigned char*)"hybull", {226, 129, 131, 0}},
1128 {(unsigned char*)"hyphen", {226, 128, 144, 0}},
1129 {(unsigned char*)"iacute", {195, 173, 0}},
1130 {(unsigned char*)"ic", {226, 129, 163, 0}},
1131 {(unsigned char*)"icirc", {195, 174, 0}},
1132 {(unsigned char*)"icy", {208, 184, 0}},
1133 {(unsigned char*)"iecy", {208, 181, 0}},
1134 {(unsigned char*)"iexcl", {194, 161, 0}},
1135 {(unsigned char*)"iff", {226, 135, 148, 0}},
1136 {(unsigned char*)"ifr", {240, 157, 148, 166, 0}},
1137 {(unsigned char*)"igrave", {195, 172, 0}},
1138 {(unsigned char*)"ii", {226, 133, 136, 0}},
1139 {(unsigned char*)"iiiint", {226, 168, 140, 0}},
1140 {(unsigned char*)"iiint", {226, 136, 173, 0}},
1141 {(unsigned char*)"iinfin", {226, 167, 156, 0}},
1142 {(unsigned char*)"iiota", {226, 132, 169, 0}},
1143 {(unsigned char*)"ijlig", {196, 179, 0}},
1144 {(unsigned char*)"imacr", {196, 171, 0}},
1145 {(unsigned char*)"image", {226, 132, 145, 0}},
1146 {(unsigned char*)"imagline", {226, 132, 144, 0}},
1147 {(unsigned char*)"imagpart", {226, 132, 145, 0}},
1148 {(unsigned char*)"imath", {196, 177, 0}},
1149 {(unsigned char*)"imof", {226, 138, 183, 0}},
1150 {(unsigned char*)"imped", {198, 181, 0}},
1151 {(unsigned char*)"in", {226, 136, 136, 0}},
1152 {(unsigned char*)"incare", {226, 132, 133, 0}},
1153 {(unsigned char*)"infin", {226, 136, 158, 0}},
1154 {(unsigned char*)"infintie", {226, 167, 157, 0}},
1155 {(unsigned char*)"inodot", {196, 177, 0}},
1156 {(unsigned char*)"int", {226, 136, 171, 0}},
1157 {(unsigned char*)"intcal", {226, 138, 186, 0}},
1158 {(unsigned char*)"integers", {226, 132, 164, 0}},
1159 {(unsigned char*)"intercal", {226, 138, 186, 0}},
1160 {(unsigned char*)"intlarhk", {226, 168, 151, 0}},
1161 {(unsigned char*)"intprod", {226, 168, 188, 0}},
1162 {(unsigned char*)"iocy", {209, 145, 0}},
1163 {(unsigned char*)"iogon", {196, 175, 0}},
1164 {(unsigned char*)"iopf", {240, 157, 149, 154, 0}},
1165 {(unsigned char*)"iota", {206, 185, 0}},
1166 {(unsigned char*)"iprod", {226, 168, 188, 0}},
1167 {(unsigned char*)"iquest", {194, 191, 0}},
1168 {(unsigned char*)"iscr", {240, 157, 146, 190, 0}},
1169 {(unsigned char*)"isin", {226, 136, 136, 0}},
1170 {(unsigned char*)"isinE", {226, 139, 185, 0}},
1171 {(unsigned char*)"isindot", {226, 139, 181, 0}},
1172 {(unsigned char*)"isins", {226, 139, 180, 0}},
1173 {(unsigned char*)"isinsv", {226, 139, 179, 0}},
1174 {(unsigned char*)"isinv", {226, 136, 136, 0}},
1175 {(unsigned char*)"it", {226, 129, 162, 0}},
1176 {(unsigned char*)"itilde", {196, 169, 0}},
1177 {(unsigned char*)"iukcy", {209, 150, 0}},
1178 {(unsigned char*)"iuml", {195, 175, 0}},
1179 {(unsigned char*)"jcirc", {196, 181, 0}},
1180 {(unsigned char*)"jcy", {208, 185, 0}},
1181 {(unsigned char*)"jfr", {240, 157, 148, 167, 0}},
1182 {(unsigned char*)"jmath", {200, 183, 0}},
1183 {(unsigned char*)"jopf", {240, 157, 149, 155, 0}},
1184 {(unsigned char*)"jscr", {240, 157, 146, 191, 0}},
1185 {(unsigned char*)"jsercy", {209, 152, 0}},
1186 {(unsigned char*)"jukcy", {209, 148, 0}},
1187 {(unsigned char*)"kappa", {206, 186, 0}},
1188 {(unsigned char*)"kappav", {207, 176, 0}},
1189 {(unsigned char*)"kcedil", {196, 183, 0}},
1190 {(unsigned char*)"kcy", {208, 186, 0}},
1191 {(unsigned char*)"kfr", {240, 157, 148, 168, 0}},
1192 {(unsigned char*)"kgreen", {196, 184, 0}},
1193 {(unsigned char*)"khcy", {209, 133, 0}},
1194 {(unsigned char*)"kjcy", {209, 156, 0}},
1195 {(unsigned char*)"kopf", {240, 157, 149, 156, 0}},
1196 {(unsigned char*)"kscr", {240, 157, 147, 128, 0}},
1197 {(unsigned char*)"lAarr", {226, 135, 154, 0}},
1198 {(unsigned char*)"lArr", {226, 135, 144, 0}},
1199 {(unsigned char*)"lAtail", {226, 164, 155, 0}},
1200 {(unsigned char*)"lBarr", {226, 164, 142, 0}},
1201 {(unsigned char*)"lE", {226, 137, 166, 0}},
1202 {(unsigned char*)"lEg", {226, 170, 139, 0}},
1203 {(unsigned char*)"lHar", {226, 165, 162, 0}},
1204 {(unsigned char*)"lacute", {196, 186, 0}},
1205 {(unsigned char*)"laemptyv", {226, 166, 180, 0}},
1206 {(unsigned char*)"lagran", {226, 132, 146, 0}},
1207 {(unsigned char*)"lambda", {206, 187, 0}},
1208 {(unsigned char*)"lang", {226, 159, 168, 0}},
1209 {(unsigned char*)"langd", {226, 166, 145, 0}},
1210 {(unsigned char*)"langle", {226, 159, 168, 0}},
1211 {(unsigned char*)"lap", {226, 170, 133, 0}},
1212 {(unsigned char*)"laquo", {194, 171, 0}},
1213 {(unsigned char*)"larr", {226, 134, 144, 0}},
1214 {(unsigned char*)"larrb", {226, 135, 164, 0}},
1215 {(unsigned char*)"larrbfs", {226, 164, 159, 0}},
1216 {(unsigned char*)"larrfs", {226, 164, 157, 0}},
1217 {(unsigned char*)"larrhk", {226, 134, 169, 0}},
1218 {(unsigned char*)"larrlp", {226, 134, 171, 0}},
1219 {(unsigned char*)"larrpl", {226, 164, 185, 0}},
1220 {(unsigned char*)"larrsim", {226, 165, 179, 0}},
1221 {(unsigned char*)"larrtl", {226, 134, 162, 0}},
1222 {(unsigned char*)"lat", {226, 170, 171, 0}},
1223 {(unsigned char*)"latail", {226, 164, 153, 0}},
1224 {(unsigned char*)"late", {226, 170, 173, 0}},
1225 {(unsigned char*)"lates", {226, 170, 173, 239, 184, 128, 0}},
1226 {(unsigned char*)"lbarr", {226, 164, 140, 0}},
1227 {(unsigned char*)"lbbrk", {226, 157, 178, 0}},
1228 {(unsigned char*)"lbrace", {123, 0}},
1229 {(unsigned char*)"lbrack", {91, 0}},
1230 {(unsigned char*)"lbrke", {226, 166, 139, 0}},
1231 {(unsigned char*)"lbrksld", {226, 166, 143, 0}},
1232 {(unsigned char*)"lbrkslu", {226, 166, 141, 0}},
1233 {(unsigned char*)"lcaron", {196, 190, 0}},
1234 {(unsigned char*)"lcedil", {196, 188, 0}},
1235 {(unsigned char*)"lceil", {226, 140, 136, 0}},
1236 {(unsigned char*)"lcub", {123, 0}},
1237 {(unsigned char*)"lcy", {208, 187, 0}},
1238 {(unsigned char*)"ldca", {226, 164, 182, 0}},
1239 {(unsigned char*)"ldquo", {226, 128, 156, 0}},
1240 {(unsigned char*)"ldquor", {226, 128, 158, 0}},
1241 {(unsigned char*)"ldrdhar", {226, 165, 167, 0}},
1242 {(unsigned char*)"ldrushar", {226, 165, 139, 0}},
1243 {(unsigned char*)"ldsh", {226, 134, 178, 0}},
1244 {(unsigned char*)"le", {226, 137, 164, 0}},
1245 {(unsigned char*)"leftarrow", {226, 134, 144, 0}},
1246 {(unsigned char*)"leftarrowtail", {226, 134, 162, 0}},
1247 {(unsigned char*)"leftharpoondown", {226, 134, 189, 0}},
1248 {(unsigned char*)"leftharpoonup", {226, 134, 188, 0}},
1249 {(unsigned char*)"leftleftarrows", {226, 135, 135, 0}},
1250 {(unsigned char*)"leftrightarrow", {226, 134, 148, 0}},
1251 {(unsigned char*)"leftrightarrows", {226, 135, 134, 0}},
1252 {(unsigned char*)"leftrightharpoons", {226, 135, 139, 0}},
1253 {(unsigned char*)"leftrightsquigarrow", {226, 134, 173, 0}},
1254 {(unsigned char*)"leftthreetimes", {226, 139, 139, 0}},
1255 {(unsigned char*)"leg", {226, 139, 154, 0}},
1256 {(unsigned char*)"leq", {226, 137, 164, 0}},
1257 {(unsigned char*)"leqq", {226, 137, 166, 0}},
1258 {(unsigned char*)"leqslant", {226, 169, 189, 0}},
1259 {(unsigned char*)"les", {226, 169, 189, 0}},
1260 {(unsigned char*)"lescc", {226, 170, 168, 0}},
1261 {(unsigned char*)"lesdot", {226, 169, 191, 0}},
1262 {(unsigned char*)"lesdoto", {226, 170, 129, 0}},
1263 {(unsigned char*)"lesdotor", {226, 170, 131, 0}},
1264 {(unsigned char*)"lesg", {226, 139, 154, 239, 184, 128, 0}},
1265 {(unsigned char*)"lesges", {226, 170, 147, 0}},
1266 {(unsigned char*)"lessapprox", {226, 170, 133, 0}},
1267 {(unsigned char*)"lessdot", {226, 139, 150, 0}},
1268 {(unsigned char*)"lesseqgtr", {226, 139, 154, 0}},
1269 {(unsigned char*)"lesseqqgtr", {226, 170, 139, 0}},
1270 {(unsigned char*)"lessgtr", {226, 137, 182, 0}},
1271 {(unsigned char*)"lesssim", {226, 137, 178, 0}},
1272 {(unsigned char*)"lfisht", {226, 165, 188, 0}},
1273 {(unsigned char*)"lfloor", {226, 140, 138, 0}},
1274 {(unsigned char*)"lfr", {240, 157, 148, 169, 0}},
1275 {(unsigned char*)"lg", {226, 137, 182, 0}},
1276 {(unsigned char*)"lgE", {226, 170, 145, 0}},
1277 {(unsigned char*)"lhard", {226, 134, 189, 0}},
1278 {(unsigned char*)"lharu", {226, 134, 188, 0}},
1279 {(unsigned char*)"lharul", {226, 165, 170, 0}},
1280 {(unsigned char*)"lhblk", {226, 150, 132, 0}},
1281 {(unsigned char*)"ljcy", {209, 153, 0}},
1282 {(unsigned char*)"ll", {226, 137, 170, 0}},
1283 {(unsigned char*)"llarr", {226, 135, 135, 0}},
1284 {(unsigned char*)"llcorner", {226, 140, 158, 0}},
1285 {(unsigned char*)"llhard", {226, 165, 171, 0}},
1286 {(unsigned char*)"lltri", {226, 151, 186, 0}},
1287 {(unsigned char*)"lmidot", {197, 128, 0}},
1288 {(unsigned char*)"lmoust", {226, 142, 176, 0}},
1289 {(unsigned char*)"lmoustache", {226, 142, 176, 0}},
1290 {(unsigned char*)"lnE", {226, 137, 168, 0}},
1291 {(unsigned char*)"lnap", {226, 170, 137, 0}},
1292 {(unsigned char*)"lnapprox", {226, 170, 137, 0}},
1293 {(unsigned char*)"lne", {226, 170, 135, 0}},
1294 {(unsigned char*)"lneq", {226, 170, 135, 0}},
1295 {(unsigned char*)"lneqq", {226, 137, 168, 0}},
1296 {(unsigned char*)"lnsim", {226, 139, 166, 0}},
1297 {(unsigned char*)"loang", {226, 159, 172, 0}},
1298 {(unsigned char*)"loarr", {226, 135, 189, 0}},
1299 {(unsigned char*)"lobrk", {226, 159, 166, 0}},
1300 {(unsigned char*)"longleftarrow", {226, 159, 181, 0}},
1301 {(unsigned char*)"longleftrightarrow", {226, 159, 183, 0}},
1302 {(unsigned char*)"longmapsto", {226, 159, 188, 0}},
1303 {(unsigned char*)"longrightarrow", {226, 159, 182, 0}},
1304 {(unsigned char*)"looparrowleft", {226, 134, 171, 0}},
1305 {(unsigned char*)"looparrowright", {226, 134, 172, 0}},
1306 {(unsigned char*)"lopar", {226, 166, 133, 0}},
1307 {(unsigned char*)"lopf", {240, 157, 149, 157, 0}},
1308 {(unsigned char*)"loplus", {226, 168, 173, 0}},
1309 {(unsigned char*)"lotimes", {226, 168, 180, 0}},
1310 {(unsigned char*)"lowast", {226, 136, 151, 0}},
1311 {(unsigned char*)"lowbar", {95, 0}},
1312 {(unsigned char*)"loz", {226, 151, 138, 0}},
1313 {(unsigned char*)"lozenge", {226, 151, 138, 0}},
1314 {(unsigned char*)"lozf", {226, 167, 171, 0}},
1315 {(unsigned char*)"lpar", {40, 0}},
1316 {(unsigned char*)"lparlt", {226, 166, 147, 0}},
1317 {(unsigned char*)"lrarr", {226, 135, 134, 0}},
1318 {(unsigned char*)"lrcorner", {226, 140, 159, 0}},
1319 {(unsigned char*)"lrhar", {226, 135, 139, 0}},
1320 {(unsigned char*)"lrhard", {226, 165, 173, 0}},
1321 {(unsigned char*)"lrm", {226, 128, 142, 0}},
1322 {(unsigned char*)"lrtri", {226, 138, 191, 0}},
1323 {(unsigned char*)"lsaquo", {226, 128, 185, 0}},
1324 {(unsigned char*)"lscr", {240, 157, 147, 129, 0}},
1325 {(unsigned char*)"lsh", {226, 134, 176, 0}},
1326 {(unsigned char*)"lsim", {226, 137, 178, 0}},
1327 {(unsigned char*)"lsime", {226, 170, 141, 0}},
1328 {(unsigned char*)"lsimg", {226, 170, 143, 0}},
1329 {(unsigned char*)"lsqb", {91, 0}},
1330 {(unsigned char*)"lsquo", {226, 128, 152, 0}},
1331 {(unsigned char*)"lsquor", {226, 128, 154, 0}},
1332 {(unsigned char*)"lstrok", {197, 130, 0}},
1333 {(unsigned char*)"lt", {60, 0}},
1334 {(unsigned char*)"ltcc", {226, 170, 166, 0}},
1335 {(unsigned char*)"ltcir", {226, 169, 185, 0}},
1336 {(unsigned char*)"ltdot", {226, 139, 150, 0}},
1337 {(unsigned char*)"lthree", {226, 139, 139, 0}},
1338 {(unsigned char*)"ltimes", {226, 139, 137, 0}},
1339 {(unsigned char*)"ltlarr", {226, 165, 182, 0}},
1340 {(unsigned char*)"ltquest", {226, 169, 187, 0}},
1341 {(unsigned char*)"ltrPar", {226, 166, 150, 0}},
1342 {(unsigned char*)"ltri", {226, 151, 131, 0}},
1343 {(unsigned char*)"ltrie", {226, 138, 180, 0}},
1344 {(unsigned char*)"ltrif", {226, 151, 130, 0}},
1345 {(unsigned char*)"lurdshar", {226, 165, 138, 0}},
1346 {(unsigned char*)"luruhar", {226, 165, 166, 0}},
1347 {(unsigned char*)"lvertneqq", {226, 137, 168, 239, 184, 128, 0}},
1348 {(unsigned char*)"lvnE", {226, 137, 168, 239, 184, 128, 0}},
1349 {(unsigned char*)"mDDot", {226, 136, 186, 0}},
1350 {(unsigned char*)"macr", {194, 175, 0}},
1351 {(unsigned char*)"male", {226, 153, 130, 0}},
1352 {(unsigned char*)"malt", {226, 156, 160, 0}},
1353 {(unsigned char*)"maltese", {226, 156, 160, 0}},
1354 {(unsigned char*)"map", {226, 134, 166, 0}},
1355 {(unsigned char*)"mapsto", {226, 134, 166, 0}},
1356 {(unsigned char*)"mapstodown", {226, 134, 167, 0}},
1357 {(unsigned char*)"mapstoleft", {226, 134, 164, 0}},
1358 {(unsigned char*)"mapstoup", {226, 134, 165, 0}},
1359 {(unsigned char*)"marker", {226, 150, 174, 0}},
1360 {(unsigned char*)"mcomma", {226, 168, 169, 0}},
1361 {(unsigned char*)"mcy", {208, 188, 0}},
1362 {(unsigned char*)"mdash", {226, 128, 148, 0}},
1363 {(unsigned char*)"measuredangle", {226, 136, 161, 0}},
1364 {(unsigned char*)"mfr", {240, 157, 148, 170, 0}},
1365 {(unsigned char*)"mho", {226, 132, 167, 0}},
1366 {(unsigned char*)"micro", {194, 181, 0}},
1367 {(unsigned char*)"mid", {226, 136, 163, 0}},
1368 {(unsigned char*)"midast", {42, 0}},
1369 {(unsigned char*)"midcir", {226, 171, 176, 0}},
1370 {(unsigned char*)"middot", {194, 183, 0}},
1371 {(unsigned char*)"minus", {226, 136, 146, 0}},
1372 {(unsigned char*)"minusb", {226, 138, 159, 0}},
1373 {(unsigned char*)"minusd", {226, 136, 184, 0}},
1374 {(unsigned char*)"minusdu", {226, 168, 170, 0}},
1375 {(unsigned char*)"mlcp", {226, 171, 155, 0}},
1376 {(unsigned char*)"mldr", {226, 128, 166, 0}},
1377 {(unsigned char*)"mnplus", {226, 136, 147, 0}},
1378 {(unsigned char*)"models", {226, 138, 167, 0}},
1379 {(unsigned char*)"mopf", {240, 157, 149, 158, 0}},
1380 {(unsigned char*)"mp", {226, 136, 147, 0}},
1381 {(unsigned char*)"mscr", {240, 157, 147, 130, 0}},
1382 {(unsigned char*)"mstpos", {226, 136, 190, 0}},
1383 {(unsigned char*)"mu", {206, 188, 0}},
1384 {(unsigned char*)"multimap", {226, 138, 184, 0}},
1385 {(unsigned char*)"mumap", {226, 138, 184, 0}},
1386 {(unsigned char*)"nGg", {226, 139, 153, 204, 184, 0}},
1387 {(unsigned char*)"nGt", {226, 137, 171, 226, 131, 146, 0}},
1388 {(unsigned char*)"nGtv", {226, 137, 171, 204, 184, 0}},
1389 {(unsigned char*)"nLeftarrow", {226, 135, 141, 0}},
1390 {(unsigned char*)"nLeftrightarrow", {226, 135, 142, 0}},
1391 {(unsigned char*)"nLl", {226, 139, 152, 204, 184, 0}},
1392 {(unsigned char*)"nLt", {226, 137, 170, 226, 131, 146, 0}},
1393 {(unsigned char*)"nLtv", {226, 137, 170, 204, 184, 0}},
1394 {(unsigned char*)"nRightarrow", {226, 135, 143, 0}},
1395 {(unsigned char*)"nVDash", {226, 138, 175, 0}},
1396 {(unsigned char*)"nVdash", {226, 138, 174, 0}},
1397 {(unsigned char*)"nabla", {226, 136, 135, 0}},
1398 {(unsigned char*)"nacute", {197, 132, 0}},
1399 {(unsigned char*)"nang", {226, 136, 160, 226, 131, 146, 0}},
1400 {(unsigned char*)"nap", {226, 137, 137, 0}},
1401 {(unsigned char*)"napE", {226, 169, 176, 204, 184, 0}},
1402 {(unsigned char*)"napid", {226, 137, 139, 204, 184, 0}},
1403 {(unsigned char*)"napos", {197, 137, 0}},
1404 {(unsigned char*)"napprox", {226, 137, 137, 0}},
1405 {(unsigned char*)"natur", {226, 153, 174, 0}},
1406 {(unsigned char*)"natural", {226, 153, 174, 0}},
1407 {(unsigned char*)"naturals", {226, 132, 149, 0}},
1408 {(unsigned char*)"nbsp", {194, 160, 0}},
1409 {(unsigned char*)"nbump", {226, 137, 142, 204, 184, 0}},
1410 {(unsigned char*)"nbumpe", {226, 137, 143, 204, 184, 0}},
1411 {(unsigned char*)"ncap", {226, 169, 131, 0}},
1412 {(unsigned char*)"ncaron", {197, 136, 0}},
1413 {(unsigned char*)"ncedil", {197, 134, 0}},
1414 {(unsigned char*)"ncong", {226, 137, 135, 0}},
1415 {(unsigned char*)"ncongdot", {226, 169, 173, 204, 184, 0}},
1416 {(unsigned char*)"ncup", {226, 169, 130, 0}},
1417 {(unsigned char*)"ncy", {208, 189, 0}},
1418 {(unsigned char*)"ndash", {226, 128, 147, 0}},
1419 {(unsigned char*)"ne", {226, 137, 160, 0}},
1420 {(unsigned char*)"neArr", {226, 135, 151, 0}},
1421 {(unsigned char*)"nearhk", {226, 164, 164, 0}},
1422 {(unsigned char*)"nearr", {226, 134, 151, 0}},
1423 {(unsigned char*)"nearrow", {226, 134, 151, 0}},
1424 {(unsigned char*)"nedot", {226, 137, 144, 204, 184, 0}},
1425 {(unsigned char*)"nequiv", {226, 137, 162, 0}},
1426 {(unsigned char*)"nesear", {226, 164, 168, 0}},
1427 {(unsigned char*)"nesim", {226, 137, 130, 204, 184, 0}},
1428 {(unsigned char*)"nexist", {226, 136, 132, 0}},
1429 {(unsigned char*)"nexists", {226, 136, 132, 0}},
1430 {(unsigned char*)"nfr", {240, 157, 148, 171, 0}},
1431 {(unsigned char*)"ngE", {226, 137, 167, 204, 184, 0}},
1432 {(unsigned char*)"nge", {226, 137, 177, 0}},
1433 {(unsigned char*)"ngeq", {226, 137, 177, 0}},
1434 {(unsigned char*)"ngeqq", {226, 137, 167, 204, 184, 0}},
1435 {(unsigned char*)"ngeqslant", {226, 169, 190, 204, 184, 0}},
1436 {(unsigned char*)"nges", {226, 169, 190, 204, 184, 0}},
1437 {(unsigned char*)"ngsim", {226, 137, 181, 0}},
1438 {(unsigned char*)"ngt", {226, 137, 175, 0}},
1439 {(unsigned char*)"ngtr", {226, 137, 175, 0}},
1440 {(unsigned char*)"nhArr", {226, 135, 142, 0}},
1441 {(unsigned char*)"nharr", {226, 134, 174, 0}},
1442 {(unsigned char*)"nhpar", {226, 171, 178, 0}},
1443 {(unsigned char*)"ni", {226, 136, 139, 0}},
1444 {(unsigned char*)"nis", {226, 139, 188, 0}},
1445 {(unsigned char*)"nisd", {226, 139, 186, 0}},
1446 {(unsigned char*)"niv", {226, 136, 139, 0}},
1447 {(unsigned char*)"njcy", {209, 154, 0}},
1448 {(unsigned char*)"nlArr", {226, 135, 141, 0}},
1449 {(unsigned char*)"nlE", {226, 137, 166, 204, 184, 0}},
1450 {(unsigned char*)"nlarr", {226, 134, 154, 0}},
1451 {(unsigned char*)"nldr", {226, 128, 165, 0}},
1452 {(unsigned char*)"nle", {226, 137, 176, 0}},
1453 {(unsigned char*)"nleftarrow", {226, 134, 154, 0}},
1454 {(unsigned char*)"nleftrightarrow", {226, 134, 174, 0}},
1455 {(unsigned char*)"nleq", {226, 137, 176, 0}},
1456 {(unsigned char*)"nleqq", {226, 137, 166, 204, 184, 0}},
1457 {(unsigned char*)"nleqslant", {226, 169, 189, 204, 184, 0}},
1458 {(unsigned char*)"nles", {226, 169, 189, 204, 184, 0}},
1459 {(unsigned char*)"nless", {226, 137, 174, 0}},
1460 {(unsigned char*)"nlsim", {226, 137, 180, 0}},
1461 {(unsigned char*)"nlt", {226, 137, 174, 0}},
1462 {(unsigned char*)"nltri", {226, 139, 170, 0}},
1463 {(unsigned char*)"nltrie", {226, 139, 172, 0}},
1464 {(unsigned char*)"nmid", {226, 136, 164, 0}},
1465 {(unsigned char*)"nopf", {240, 157, 149, 159, 0}},
1466 {(unsigned char*)"not", {194, 172, 0}},
1467 {(unsigned char*)"notin", {226, 136, 137, 0}},
1468 {(unsigned char*)"notinE", {226, 139, 185, 204, 184, 0}},
1469 {(unsigned char*)"notindot", {226, 139, 181, 204, 184, 0}},
1470 {(unsigned char*)"notinva", {226, 136, 137, 0}},
1471 {(unsigned char*)"notinvb", {226, 139, 183, 0}},
1472 {(unsigned char*)"notinvc", {226, 139, 182, 0}},
1473 {(unsigned char*)"notni", {226, 136, 140, 0}},
1474 {(unsigned char*)"notniva", {226, 136, 140, 0}},
1475 {(unsigned char*)"notnivb", {226, 139, 190, 0}},
1476 {(unsigned char*)"notnivc", {226, 139, 189, 0}},
1477 {(unsigned char*)"npar", {226, 136, 166, 0}},
1478 {(unsigned char*)"nparallel", {226, 136, 166, 0}},
1479 {(unsigned char*)"nparsl", {226, 171, 189, 226, 131, 165, 0}},
1480 {(unsigned char*)"npart", {226, 136, 130, 204, 184, 0}},
1481 {(unsigned char*)"npolint", {226, 168, 148, 0}},
1482 {(unsigned char*)"npr", {226, 138, 128, 0}},
1483 {(unsigned char*)"nprcue", {226, 139, 160, 0}},
1484 {(unsigned char*)"npre", {226, 170, 175, 204, 184, 0}},
1485 {(unsigned char*)"nprec", {226, 138, 128, 0}},
1486 {(unsigned char*)"npreceq", {226, 170, 175, 204, 184, 0}},
1487 {(unsigned char*)"nrArr", {226, 135, 143, 0}},
1488 {(unsigned char*)"nrarr", {226, 134, 155, 0}},
1489 {(unsigned char*)"nrarrc", {226, 164, 179, 204, 184, 0}},
1490 {(unsigned char*)"nrarrw", {226, 134, 157, 204, 184, 0}},
1491 {(unsigned char*)"nrightarrow", {226, 134, 155, 0}},
1492 {(unsigned char*)"nrtri", {226, 139, 171, 0}},
1493 {(unsigned char*)"nrtrie", {226, 139, 173, 0}},
1494 {(unsigned char*)"nsc", {226, 138, 129, 0}},
1495 {(unsigned char*)"nsccue", {226, 139, 161, 0}},
1496 {(unsigned char*)"nsce", {226, 170, 176, 204, 184, 0}},
1497 {(unsigned char*)"nscr", {240, 157, 147, 131, 0}},
1498 {(unsigned char*)"nshortmid", {226, 136, 164, 0}},
1499 {(unsigned char*)"nshortparallel", {226, 136, 166, 0}},
1500 {(unsigned char*)"nsim", {226, 137, 129, 0}},
1501 {(unsigned char*)"nsime", {226, 137, 132, 0}},
1502 {(unsigned char*)"nsimeq", {226, 137, 132, 0}},
1503 {(unsigned char*)"nsmid", {226, 136, 164, 0}},
1504 {(unsigned char*)"nspar", {226, 136, 166, 0}},
1505 {(unsigned char*)"nsqsube", {226, 139, 162, 0}},
1506 {(unsigned char*)"nsqsupe", {226, 139, 163, 0}},
1507 {(unsigned char*)"nsub", {226, 138, 132, 0}},
1508 {(unsigned char*)"nsubE", {226, 171, 133, 204, 184, 0}},
1509 {(unsigned char*)"nsube", {226, 138, 136, 0}},
1510 {(unsigned char*)"nsubset", {226, 138, 130, 226, 131, 146, 0}},
1511 {(unsigned char*)"nsubseteq", {226, 138, 136, 0}},
1512 {(unsigned char*)"nsubseteqq", {226, 171, 133, 204, 184, 0}},
1513 {(unsigned char*)"nsucc", {226, 138, 129, 0}},
1514 {(unsigned char*)"nsucceq", {226, 170, 176, 204, 184, 0}},
1515 {(unsigned char*)"nsup", {226, 138, 133, 0}},
1516 {(unsigned char*)"nsupE", {226, 171, 134, 204, 184, 0}},
1517 {(unsigned char*)"nsupe", {226, 138, 137, 0}},
1518 {(unsigned char*)"nsupset", {226, 138, 131, 226, 131, 146, 0}},
1519 {(unsigned char*)"nsupseteq", {226, 138, 137, 0}},
1520 {(unsigned char*)"nsupseteqq", {226, 171, 134, 204, 184, 0}},
1521 {(unsigned char*)"ntgl", {226, 137, 185, 0}},
1522 {(unsigned char*)"ntilde", {195, 177, 0}},
1523 {(unsigned char*)"ntlg", {226, 137, 184, 0}},
1524 {(unsigned char*)"ntriangleleft", {226, 139, 170, 0}},
1525 {(unsigned char*)"ntrianglelefteq", {226, 139, 172, 0}},
1526 {(unsigned char*)"ntriangleright", {226, 139, 171, 0}},
1527 {(unsigned char*)"ntrianglerighteq", {226, 139, 173, 0}},
1528 {(unsigned char*)"nu", {206, 189, 0}},
1529 {(unsigned char*)"num", {35, 0}},
1530 {(unsigned char*)"numero", {226, 132, 150, 0}},
1531 {(unsigned char*)"numsp", {226, 128, 135, 0}},
1532 {(unsigned char*)"nvDash", {226, 138, 173, 0}},
1533 {(unsigned char*)"nvHarr", {226, 164, 132, 0}},
1534 {(unsigned char*)"nvap", {226, 137, 141, 226, 131, 146, 0}},
1535 {(unsigned char*)"nvdash", {226, 138, 172, 0}},
1536 {(unsigned char*)"nvge", {226, 137, 165, 226, 131, 146, 0}},
1537 {(unsigned char*)"nvgt", {62, 226, 131, 146, 0}},
1538 {(unsigned char*)"nvinfin", {226, 167, 158, 0}},
1539 {(unsigned char*)"nvlArr", {226, 164, 130, 0}},
1540 {(unsigned char*)"nvle", {226, 137, 164, 226, 131, 146, 0}},
1541 {(unsigned char*)"nvlt", {60, 226, 131, 146, 0}},
1542 {(unsigned char*)"nvltrie", {226, 138, 180, 226, 131, 146, 0}},
1543 {(unsigned char*)"nvrArr", {226, 164, 131, 0}},
1544 {(unsigned char*)"nvrtrie", {226, 138, 181, 226, 131, 146, 0}},
1545 {(unsigned char*)"nvsim", {226, 136, 188, 226, 131, 146, 0}},
1546 {(unsigned char*)"nwArr", {226, 135, 150, 0}},
1547 {(unsigned char*)"nwarhk", {226, 164, 163, 0}},
1548 {(unsigned char*)"nwarr", {226, 134, 150, 0}},
1549 {(unsigned char*)"nwarrow", {226, 134, 150, 0}},
1550 {(unsigned char*)"nwnear", {226, 164, 167, 0}},
1551 {(unsigned char*)"oS", {226, 147, 136, 0}},
1552 {(unsigned char*)"oacute", {195, 179, 0}},
1553 {(unsigned char*)"oast", {226, 138, 155, 0}},
1554 {(unsigned char*)"ocir", {226, 138, 154, 0}},
1555 {(unsigned char*)"ocirc", {195, 180, 0}},
1556 {(unsigned char*)"ocy", {208, 190, 0}},
1557 {(unsigned char*)"odash", {226, 138, 157, 0}},
1558 {(unsigned char*)"odblac", {197, 145, 0}},
1559 {(unsigned char*)"odiv", {226, 168, 184, 0}},
1560 {(unsigned char*)"odot", {226, 138, 153, 0}},
1561 {(unsigned char*)"odsold", {226, 166, 188, 0}},
1562 {(unsigned char*)"oelig", {197, 147, 0}},
1563 {(unsigned char*)"ofcir", {226, 166, 191, 0}},
1564 {(unsigned char*)"ofr", {240, 157, 148, 172, 0}},
1565 {(unsigned char*)"ogon", {203, 155, 0}},
1566 {(unsigned char*)"ograve", {195, 178, 0}},
1567 {(unsigned char*)"ogt", {226, 167, 129, 0}},
1568 {(unsigned char*)"ohbar", {226, 166, 181, 0}},
1569 {(unsigned char*)"ohm", {206, 169, 0}},
1570 {(unsigned char*)"oint", {226, 136, 174, 0}},
1571 {(unsigned char*)"olarr", {226, 134, 186, 0}},
1572 {(unsigned char*)"olcir", {226, 166, 190, 0}},
1573 {(unsigned char*)"olcross", {226, 166, 187, 0}},
1574 {(unsigned char*)"oline", {226, 128, 190, 0}},
1575 {(unsigned char*)"olt", {226, 167, 128, 0}},
1576 {(unsigned char*)"omacr", {197, 141, 0}},
1577 {(unsigned char*)"omega", {207, 137, 0}},
1578 {(unsigned char*)"omicron", {206, 191, 0}},
1579 {(unsigned char*)"omid", {226, 166, 182, 0}},
1580 {(unsigned char*)"ominus", {226, 138, 150, 0}},
1581 {(unsigned char*)"oopf", {240, 157, 149, 160, 0}},
1582 {(unsigned char*)"opar", {226, 166, 183, 0}},
1583 {(unsigned char*)"operp", {226, 166, 185, 0}},
1584 {(unsigned char*)"oplus", {226, 138, 149, 0}},
1585 {(unsigned char*)"or", {226, 136, 168, 0}},
1586 {(unsigned char*)"orarr", {226, 134, 187, 0}},
1587 {(unsigned char*)"ord", {226, 169, 157, 0}},
1588 {(unsigned char*)"order", {226, 132, 180, 0}},
1589 {(unsigned char*)"orderof", {226, 132, 180, 0}},
1590 {(unsigned char*)"ordf", {194, 170, 0}},
1591 {(unsigned char*)"ordm", {194, 186, 0}},
1592 {(unsigned char*)"origof", {226, 138, 182, 0}},
1593 {(unsigned char*)"oror", {226, 169, 150, 0}},
1594 {(unsigned char*)"orslope", {226, 169, 151, 0}},
1595 {(unsigned char*)"orv", {226, 169, 155, 0}},
1596 {(unsigned char*)"oscr", {226, 132, 180, 0}},
1597 {(unsigned char*)"oslash", {195, 184, 0}},
1598 {(unsigned char*)"osol", {226, 138, 152, 0}},
1599 {(unsigned char*)"otilde", {195, 181, 0}},
1600 {(unsigned char*)"otimes", {226, 138, 151, 0}},
1601 {(unsigned char*)"otimesas", {226, 168, 182, 0}},
1602 {(unsigned char*)"ouml", {195, 182, 0}},
1603 {(unsigned char*)"ovbar", {226, 140, 189, 0}},
1604 {(unsigned char*)"par", {226, 136, 165, 0}},
1605 {(unsigned char*)"para", {194, 182, 0}},
1606 {(unsigned char*)"parallel", {226, 136, 165, 0}},
1607 {(unsigned char*)"parsim", {226, 171, 179, 0}},
1608 {(unsigned char*)"parsl", {226, 171, 189, 0}},
1609 {(unsigned char*)"part", {226, 136, 130, 0}},
1610 {(unsigned char*)"pcy", {208, 191, 0}},
1611 {(unsigned char*)"percnt", {37, 0}},
1612 {(unsigned char*)"period", {46, 0}},
1613 {(unsigned char*)"permil", {226, 128, 176, 0}},
1614 {(unsigned char*)"perp", {226, 138, 165, 0}},
1615 {(unsigned char*)"pertenk", {226, 128, 177, 0}},
1616 {(unsigned char*)"pfr", {240, 157, 148, 173, 0}},
1617 {(unsigned char*)"phi", {207, 134, 0}},
1618 {(unsigned char*)"phiv", {207, 149, 0}},
1619 {(unsigned char*)"phmmat", {226, 132, 179, 0}},
1620 {(unsigned char*)"phone", {226, 152, 142, 0}},
1621 {(unsigned char*)"pi", {207, 128, 0}},
1622 {(unsigned char*)"pitchfork", {226, 139, 148, 0}},
1623 {(unsigned char*)"piv", {207, 150, 0}},
1624 {(unsigned char*)"planck", {226, 132, 143, 0}},
1625 {(unsigned char*)"planckh", {226, 132, 142, 0}},
1626 {(unsigned char*)"plankv", {226, 132, 143, 0}},
1627 {(unsigned char*)"plus", {43, 0}},
1628 {(unsigned char*)"plusacir", {226, 168, 163, 0}},
1629 {(unsigned char*)"plusb", {226, 138, 158, 0}},
1630 {(unsigned char*)"pluscir", {226, 168, 162, 0}},
1631 {(unsigned char*)"plusdo", {226, 136, 148, 0}},
1632 {(unsigned char*)"plusdu", {226, 168, 165, 0}},
1633 {(unsigned char*)"pluse", {226, 169, 178, 0}},
1634 {(unsigned char*)"plusmn", {194, 177, 0}},
1635 {(unsigned char*)"plussim", {226, 168, 166, 0}},
1636 {(unsigned char*)"plustwo", {226, 168, 167, 0}},
1637 {(unsigned char*)"pm", {194, 177, 0}},
1638 {(unsigned char*)"pointint", {226, 168, 149, 0}},
1639 {(unsigned char*)"popf", {240, 157, 149, 161, 0}},
1640 {(unsigned char*)"pound", {194, 163, 0}},
1641 {(unsigned char*)"pr", {226, 137, 186, 0}},
1642 {(unsigned char*)"prE", {226, 170, 179, 0}},
1643 {(unsigned char*)"prap", {226, 170, 183, 0}},
1644 {(unsigned char*)"prcue", {226, 137, 188, 0}},
1645 {(unsigned char*)"pre", {226, 170, 175, 0}},
1646 {(unsigned char*)"prec", {226, 137, 186, 0}},
1647 {(unsigned char*)"precapprox", {226, 170, 183, 0}},
1648 {(unsigned char*)"preccurlyeq", {226, 137, 188, 0}},
1649 {(unsigned char*)"preceq", {226, 170, 175, 0}},
1650 {(unsigned char*)"precnapprox", {226, 170, 185, 0}},
1651 {(unsigned char*)"precneqq", {226, 170, 181, 0}},
1652 {(unsigned char*)"precnsim", {226, 139, 168, 0}},
1653 {(unsigned char*)"precsim", {226, 137, 190, 0}},
1654 {(unsigned char*)"prime", {226, 128, 178, 0}},
1655 {(unsigned char*)"primes", {226, 132, 153, 0}},
1656 {(unsigned char*)"prnE", {226, 170, 181, 0}},
1657 {(unsigned char*)"prnap", {226, 170, 185, 0}},
1658 {(unsigned char*)"prnsim", {226, 139, 168, 0}},
1659 {(unsigned char*)"prod", {226, 136, 143, 0}},
1660 {(unsigned char*)"profalar", {226, 140, 174, 0}},
1661 {(unsigned char*)"profline", {226, 140, 146, 0}},
1662 {(unsigned char*)"profsurf", {226, 140, 147, 0}},
1663 {(unsigned char*)"prop", {226, 136, 157, 0}},
1664 {(unsigned char*)"propto", {226, 136, 157, 0}},
1665 {(unsigned char*)"prsim", {226, 137, 190, 0}},
1666 {(unsigned char*)"prurel", {226, 138, 176, 0}},
1667 {(unsigned char*)"pscr", {240, 157, 147, 133, 0}},
1668 {(unsigned char*)"psi", {207, 136, 0}},
1669 {(unsigned char*)"puncsp", {226, 128, 136, 0}},
1670 {(unsigned char*)"qfr", {240, 157, 148, 174, 0}},
1671 {(unsigned char*)"qint", {226, 168, 140, 0}},
1672 {(unsigned char*)"qopf", {240, 157, 149, 162, 0}},
1673 {(unsigned char*)"qprime", {226, 129, 151, 0}},
1674 {(unsigned char*)"qscr", {240, 157, 147, 134, 0}},
1675 {(unsigned char*)"quaternions", {226, 132, 141, 0}},
1676 {(unsigned char*)"quatint", {226, 168, 150, 0}},
1677 {(unsigned char*)"quest", {63, 0}},
1678 {(unsigned char*)"questeq", {226, 137, 159, 0}},
1679 {(unsigned char*)"quot", {34, 0}},
1680 {(unsigned char*)"rAarr", {226, 135, 155, 0}},
1681 {(unsigned char*)"rArr", {226, 135, 146, 0}},
1682 {(unsigned char*)"rAtail", {226, 164, 156, 0}},
1683 {(unsigned char*)"rBarr", {226, 164, 143, 0}},
1684 {(unsigned char*)"rHar", {226, 165, 164, 0}},
1685 {(unsigned char*)"race", {226, 136, 189, 204, 177, 0}},
1686 {(unsigned char*)"racute", {197, 149, 0}},
1687 {(unsigned char*)"radic", {226, 136, 154, 0}},
1688 {(unsigned char*)"raemptyv", {226, 166, 179, 0}},
1689 {(unsigned char*)"rang", {226, 159, 169, 0}},
1690 {(unsigned char*)"rangd", {226, 166, 146, 0}},
1691 {(unsigned char*)"range", {226, 166, 165, 0}},
1692 {(unsigned char*)"rangle", {226, 159, 169, 0}},
1693 {(unsigned char*)"raquo", {194, 187, 0}},
1694 {(unsigned char*)"rarr", {226, 134, 146, 0}},
1695 {(unsigned char*)"rarrap", {226, 165, 181, 0}},
1696 {(unsigned char*)"rarrb", {226, 135, 165, 0}},
1697 {(unsigned char*)"rarrbfs", {226, 164, 160, 0}},
1698 {(unsigned char*)"rarrc", {226, 164, 179, 0}},
1699 {(unsigned char*)"rarrfs", {226, 164, 158, 0}},
1700 {(unsigned char*)"rarrhk", {226, 134, 170, 0}},
1701 {(unsigned char*)"rarrlp", {226, 134, 172, 0}},
1702 {(unsigned char*)"rarrpl", {226, 165, 133, 0}},
1703 {(unsigned char*)"rarrsim", {226, 165, 180, 0}},
1704 {(unsigned char*)"rarrtl", {226, 134, 163, 0}},
1705 {(unsigned char*)"rarrw", {226, 134, 157, 0}},
1706 {(unsigned char*)"ratail", {226, 164, 154, 0}},
1707 {(unsigned char*)"ratio", {226, 136, 182, 0}},
1708 {(unsigned char*)"rationals", {226, 132, 154, 0}},
1709 {(unsigned char*)"rbarr", {226, 164, 141, 0}},
1710 {(unsigned char*)"rbbrk", {226, 157, 179, 0}},
1711 {(unsigned char*)"rbrace", {125, 0}},
1712 {(unsigned char*)"rbrack", {93, 0}},
1713 {(unsigned char*)"rbrke", {226, 166, 140, 0}},
1714 {(unsigned char*)"rbrksld", {226, 166, 142, 0}},
1715 {(unsigned char*)"rbrkslu", {226, 166, 144, 0}},
1716 {(unsigned char*)"rcaron", {197, 153, 0}},
1717 {(unsigned char*)"rcedil", {197, 151, 0}},
1718 {(unsigned char*)"rceil", {226, 140, 137, 0}},
1719 {(unsigned char*)"rcub", {125, 0}},
1720 {(unsigned char*)"rcy", {209, 128, 0}},
1721 {(unsigned char*)"rdca", {226, 164, 183, 0}},
1722 {(unsigned char*)"rdldhar", {226, 165, 169, 0}},
1723 {(unsigned char*)"rdquo", {226, 128, 157, 0}},
1724 {(unsigned char*)"rdquor", {226, 128, 157, 0}},
1725 {(unsigned char*)"rdsh", {226, 134, 179, 0}},
1726 {(unsigned char*)"real", {226, 132, 156, 0}},
1727 {(unsigned char*)"realine", {226, 132, 155, 0}},
1728 {(unsigned char*)"realpart", {226, 132, 156, 0}},
1729 {(unsigned char*)"reals", {226, 132, 157, 0}},
1730 {(unsigned char*)"rect", {226, 150, 173, 0}},
1731 {(unsigned char*)"reg", {194, 174, 0}},
1732 {(unsigned char*)"rfisht", {226, 165, 189, 0}},
1733 {(unsigned char*)"rfloor", {226, 140, 139, 0}},
1734 {(unsigned char*)"rfr", {240, 157, 148, 175, 0}},
1735 {(unsigned char*)"rhard", {226, 135, 129, 0}},
1736 {(unsigned char*)"rharu", {226, 135, 128, 0}},
1737 {(unsigned char*)"rharul", {226, 165, 172, 0}},
1738 {(unsigned char*)"rho", {207, 129, 0}},
1739 {(unsigned char*)"rhov", {207, 177, 0}},
1740 {(unsigned char*)"rightarrow", {226, 134, 146, 0}},
1741 {(unsigned char*)"rightarrowtail", {226, 134, 163, 0}},
1742 {(unsigned char*)"rightharpoondown", {226, 135, 129, 0}},
1743 {(unsigned char*)"rightharpoonup", {226, 135, 128, 0}},
1744 {(unsigned char*)"rightleftarrows", {226, 135, 132, 0}},
1745 {(unsigned char*)"rightleftharpoons", {226, 135, 140, 0}},
1746 {(unsigned char*)"rightrightarrows", {226, 135, 137, 0}},
1747 {(unsigned char*)"rightsquigarrow", {226, 134, 157, 0}},
1748 {(unsigned char*)"rightthreetimes", {226, 139, 140, 0}},
1749 {(unsigned char*)"ring", {203, 154, 0}},
1750 {(unsigned char*)"risingdotseq", {226, 137, 147, 0}},
1751 {(unsigned char*)"rlarr", {226, 135, 132, 0}},
1752 {(unsigned char*)"rlhar", {226, 135, 140, 0}},
1753 {(unsigned char*)"rlm", {226, 128, 143, 0}},
1754 {(unsigned char*)"rmoust", {226, 142, 177, 0}},
1755 {(unsigned char*)"rmoustache", {226, 142, 177, 0}},
1756 {(unsigned char*)"rnmid", {226, 171, 174, 0}},
1757 {(unsigned char*)"roang", {226, 159, 173, 0}},
1758 {(unsigned char*)"roarr", {226, 135, 190, 0}},
1759 {(unsigned char*)"robrk", {226, 159, 167, 0}},
1760 {(unsigned char*)"ropar", {226, 166, 134, 0}},
1761 {(unsigned char*)"ropf", {240, 157, 149, 163, 0}},
1762 {(unsigned char*)"roplus", {226, 168, 174, 0}},
1763 {(unsigned char*)"rotimes", {226, 168, 181, 0}},
1764 {(unsigned char*)"rpar", {41, 0}},
1765 {(unsigned char*)"rpargt", {226, 166, 148, 0}},
1766 {(unsigned char*)"rppolint", {226, 168, 146, 0}},
1767 {(unsigned char*)"rrarr", {226, 135, 137, 0}},
1768 {(unsigned char*)"rsaquo", {226, 128, 186, 0}},
1769 {(unsigned char*)"rscr", {240, 157, 147, 135, 0}},
1770 {(unsigned char*)"rsh", {226, 134, 177, 0}},
1771 {(unsigned char*)"rsqb", {93, 0}},
1772 {(unsigned char*)"rsquo", {226, 128, 153, 0}},
1773 {(unsigned char*)"rsquor", {226, 128, 153, 0}},
1774 {(unsigned char*)"rthree", {226, 139, 140, 0}},
1775 {(unsigned char*)"rtimes", {226, 139, 138, 0}},
1776 {(unsigned char*)"rtri", {226, 150, 185, 0}},
1777 {(unsigned char*)"rtrie", {226, 138, 181, 0}},
1778 {(unsigned char*)"rtrif", {226, 150, 184, 0}},
1779 {(unsigned char*)"rtriltri", {226, 167, 142, 0}},
1780 {(unsigned char*)"ruluhar", {226, 165, 168, 0}},
1781 {(unsigned char*)"rx", {226, 132, 158, 0}},
1782 {(unsigned char*)"sacute", {197, 155, 0}},
1783 {(unsigned char*)"sbquo", {226, 128, 154, 0}},
1784 {(unsigned char*)"sc", {226, 137, 187, 0}},
1785 {(unsigned char*)"scE", {226, 170, 180, 0}},
1786 {(unsigned char*)"scap", {226, 170, 184, 0}},
1787 {(unsigned char*)"scaron", {197, 161, 0}},
1788 {(unsigned char*)"sccue", {226, 137, 189, 0}},
1789 {(unsigned char*)"sce", {226, 170, 176, 0}},
1790 {(unsigned char*)"scedil", {197, 159, 0}},
1791 {(unsigned char*)"scirc", {197, 157, 0}},
1792 {(unsigned char*)"scnE", {226, 170, 182, 0}},
1793 {(unsigned char*)"scnap", {226, 170, 186, 0}},
1794 {(unsigned char*)"scnsim", {226, 139, 169, 0}},
1795 {(unsigned char*)"scpolint", {226, 168, 147, 0}},
1796 {(unsigned char*)"scsim", {226, 137, 191, 0}},
1797 {(unsigned char*)"scy", {209, 129, 0}},
1798 {(unsigned char*)"sdot", {226, 139, 133, 0}},
1799 {(unsigned char*)"sdotb", {226, 138, 161, 0}},
1800 {(unsigned char*)"sdote", {226, 169, 166, 0}},
1801 {(unsigned char*)"seArr", {226, 135, 152, 0}},
1802 {(unsigned char*)"searhk", {226, 164, 165, 0}},
1803 {(unsigned char*)"searr", {226, 134, 152, 0}},
1804 {(unsigned char*)"searrow", {226, 134, 152, 0}},
1805 {(unsigned char*)"sect", {194, 167, 0}},
1806 {(unsigned char*)"semi", {59, 0}},
1807 {(unsigned char*)"seswar", {226, 164, 169, 0}},
1808 {(unsigned char*)"setminus", {226, 136, 150, 0}},
1809 {(unsigned char*)"setmn", {226, 136, 150, 0}},
1810 {(unsigned char*)"sext", {226, 156, 182, 0}},
1811 {(unsigned char*)"sfr", {240, 157, 148, 176, 0}},
1812 {(unsigned char*)"sfrown", {226, 140, 162, 0}},
1813 {(unsigned char*)"sharp", {226, 153, 175, 0}},
1814 {(unsigned char*)"shchcy", {209, 137, 0}},
1815 {(unsigned char*)"shcy", {209, 136, 0}},
1816 {(unsigned char*)"shortmid", {226, 136, 163, 0}},
1817 {(unsigned char*)"shortparallel", {226, 136, 165, 0}},
1818 {(unsigned char*)"shy", {194, 173, 0}},
1819 {(unsigned char*)"sigma", {207, 131, 0}},
1820 {(unsigned char*)"sigmaf", {207, 130, 0}},
1821 {(unsigned char*)"sigmav", {207, 130, 0}},
1822 {(unsigned char*)"sim", {226, 136, 188, 0}},
1823 {(unsigned char*)"simdot", {226, 169, 170, 0}},
1824 {(unsigned char*)"sime", {226, 137, 131, 0}},
1825 {(unsigned char*)"simeq", {226, 137, 131, 0}},
1826 {(unsigned char*)"simg", {226, 170, 158, 0}},
1827 {(unsigned char*)"simgE", {226, 170, 160, 0}},
1828 {(unsigned char*)"siml", {226, 170, 157, 0}},
1829 {(unsigned char*)"simlE", {226, 170, 159, 0}},
1830 {(unsigned char*)"simne", {226, 137, 134, 0}},
1831 {(unsigned char*)"simplus", {226, 168, 164, 0}},
1832 {(unsigned char*)"simrarr", {226, 165, 178, 0}},
1833 {(unsigned char*)"slarr", {226, 134, 144, 0}},
1834 {(unsigned char*)"smallsetminus", {226, 136, 150, 0}},
1835 {(unsigned char*)"smashp", {226, 168, 179, 0}},
1836 {(unsigned char*)"smeparsl", {226, 167, 164, 0}},
1837 {(unsigned char*)"smid", {226, 136, 163, 0}},
1838 {(unsigned char*)"smile", {226, 140, 163, 0}},
1839 {(unsigned char*)"smt", {226, 170, 170, 0}},
1840 {(unsigned char*)"smte", {226, 170, 172, 0}},
1841 {(unsigned char*)"smtes", {226, 170, 172, 239, 184, 128, 0}},
1842 {(unsigned char*)"softcy", {209, 140, 0}},
1843 {(unsigned char*)"sol", {47, 0}},
1844 {(unsigned char*)"solb", {226, 167, 132, 0}},
1845 {(unsigned char*)"solbar", {226, 140, 191, 0}},
1846 {(unsigned char*)"sopf", {240, 157, 149, 164, 0}},
1847 {(unsigned char*)"spades", {226, 153, 160, 0}},
1848 {(unsigned char*)"spadesuit", {226, 153, 160, 0}},
1849 {(unsigned char*)"spar", {226, 136, 165, 0}},
1850 {(unsigned char*)"sqcap", {226, 138, 147, 0}},
1851 {(unsigned char*)"sqcaps", {226, 138, 147, 239, 184, 128, 0}},
1852 {(unsigned char*)"sqcup", {226, 138, 148, 0}},
1853 {(unsigned char*)"sqcups", {226, 138, 148, 239, 184, 128, 0}},
1854 {(unsigned char*)"sqsub", {226, 138, 143, 0}},
1855 {(unsigned char*)"sqsube", {226, 138, 145, 0}},
1856 {(unsigned char*)"sqsubset", {226, 138, 143, 0}},
1857 {(unsigned char*)"sqsubseteq", {226, 138, 145, 0}},
1858 {(unsigned char*)"sqsup", {226, 138, 144, 0}},
1859 {(unsigned char*)"sqsupe", {226, 138, 146, 0}},
1860 {(unsigned char*)"sqsupset", {226, 138, 144, 0}},
1861 {(unsigned char*)"sqsupseteq", {226, 138, 146, 0}},
1862 {(unsigned char*)"squ", {226, 150, 161, 0}},
1863 {(unsigned char*)"square", {226, 150, 161, 0}},
1864 {(unsigned char*)"squarf", {226, 150, 170, 0}},
1865 {(unsigned char*)"squf", {226, 150, 170, 0}},
1866 {(unsigned char*)"srarr", {226, 134, 146, 0}},
1867 {(unsigned char*)"sscr", {240, 157, 147, 136, 0}},
1868 {(unsigned char*)"ssetmn", {226, 136, 150, 0}},
1869 {(unsigned char*)"ssmile", {226, 140, 163, 0}},
1870 {(unsigned char*)"sstarf", {226, 139, 134, 0}},
1871 {(unsigned char*)"star", {226, 152, 134, 0}},
1872 {(unsigned char*)"starf", {226, 152, 133, 0}},
1873 {(unsigned char*)"straightepsilon", {207, 181, 0}},
1874 {(unsigned char*)"straightphi", {207, 149, 0}},
1875 {(unsigned char*)"strns", {194, 175, 0}},
1876 {(unsigned char*)"sub", {226, 138, 130, 0}},
1877 {(unsigned char*)"subE", {226, 171, 133, 0}},
1878 {(unsigned char*)"subdot", {226, 170, 189, 0}},
1879 {(unsigned char*)"sube", {226, 138, 134, 0}},
1880 {(unsigned char*)"subedot", {226, 171, 131, 0}},
1881 {(unsigned char*)"submult", {226, 171, 129, 0}},
1882 {(unsigned char*)"subnE", {226, 171, 139, 0}},
1883 {(unsigned char*)"subne", {226, 138, 138, 0}},
1884 {(unsigned char*)"subplus", {226, 170, 191, 0}},
1885 {(unsigned char*)"subrarr", {226, 165, 185, 0}},
1886 {(unsigned char*)"subset", {226, 138, 130, 0}},
1887 {(unsigned char*)"subseteq", {226, 138, 134, 0}},
1888 {(unsigned char*)"subseteqq", {226, 171, 133, 0}},
1889 {(unsigned char*)"subsetneq", {226, 138, 138, 0}},
1890 {(unsigned char*)"subsetneqq", {226, 171, 139, 0}},
1891 {(unsigned char*)"subsim", {226, 171, 135, 0}},
1892 {(unsigned char*)"subsub", {226, 171, 149, 0}},
1893 {(unsigned char*)"subsup", {226, 171, 147, 0}},
1894 {(unsigned char*)"succ", {226, 137, 187, 0}},
1895 {(unsigned char*)"succapprox", {226, 170, 184, 0}},
1896 {(unsigned char*)"succcurlyeq", {226, 137, 189, 0}},
1897 {(unsigned char*)"succeq", {226, 170, 176, 0}},
1898 {(unsigned char*)"succnapprox", {226, 170, 186, 0}},
1899 {(unsigned char*)"succneqq", {226, 170, 182, 0}},
1900 {(unsigned char*)"succnsim", {226, 139, 169, 0}},
1901 {(unsigned char*)"succsim", {226, 137, 191, 0}},
1902 {(unsigned char*)"sum", {226, 136, 145, 0}},
1903 {(unsigned char*)"sung", {226, 153, 170, 0}},
1904 {(unsigned char*)"sup", {226, 138, 131, 0}},
1905 {(unsigned char*)"sup1", {194, 185, 0}},
1906 {(unsigned char*)"sup2", {194, 178, 0}},
1907 {(unsigned char*)"sup3", {194, 179, 0}},
1908 {(unsigned char*)"supE", {226, 171, 134, 0}},
1909 {(unsigned char*)"supdot", {226, 170, 190, 0}},
1910 {(unsigned char*)"supdsub", {226, 171, 152, 0}},
1911 {(unsigned char*)"supe", {226, 138, 135, 0}},
1912 {(unsigned char*)"supedot", {226, 171, 132, 0}},
1913 {(unsigned char*)"suphsol", {226, 159, 137, 0}},
1914 {(unsigned char*)"suphsub", {226, 171, 151, 0}},
1915 {(unsigned char*)"suplarr", {226, 165, 187, 0}},
1916 {(unsigned char*)"supmult", {226, 171, 130, 0}},
1917 {(unsigned char*)"supnE", {226, 171, 140, 0}},
1918 {(unsigned char*)"supne", {226, 138, 139, 0}},
1919 {(unsigned char*)"supplus", {226, 171, 128, 0}},
1920 {(unsigned char*)"supset", {226, 138, 131, 0}},
1921 {(unsigned char*)"supseteq", {226, 138, 135, 0}},
1922 {(unsigned char*)"supseteqq", {226, 171, 134, 0}},
1923 {(unsigned char*)"supsetneq", {226, 138, 139, 0}},
1924 {(unsigned char*)"supsetneqq", {226, 171, 140, 0}},
1925 {(unsigned char*)"supsim", {226, 171, 136, 0}},
1926 {(unsigned char*)"supsub", {226, 171, 148, 0}},
1927 {(unsigned char*)"supsup", {226, 171, 150, 0}},
1928 {(unsigned char*)"swArr", {226, 135, 153, 0}},
1929 {(unsigned char*)"swarhk", {226, 164, 166, 0}},
1930 {(unsigned char*)"swarr", {226, 134, 153, 0}},
1931 {(unsigned char*)"swarrow", {226, 134, 153, 0}},
1932 {(unsigned char*)"swnwar", {226, 164, 170, 0}},
1933 {(unsigned char*)"szlig", {195, 159, 0}},
1934 {(unsigned char*)"target", {226, 140, 150, 0}},
1935 {(unsigned char*)"tau", {207, 132, 0}},
1936 {(unsigned char*)"tbrk", {226, 142, 180, 0}},
1937 {(unsigned char*)"tcaron", {197, 165, 0}},
1938 {(unsigned char*)"tcedil", {197, 163, 0}},
1939 {(unsigned char*)"tcy", {209, 130, 0}},
1940 {(unsigned char*)"tdot", {226, 131, 155, 0}},
1941 {(unsigned char*)"telrec", {226, 140, 149, 0}},
1942 {(unsigned char*)"tfr", {240, 157, 148, 177, 0}},
1943 {(unsigned char*)"there4", {226, 136, 180, 0}},
1944 {(unsigned char*)"therefore", {226, 136, 180, 0}},
1945 {(unsigned char*)"theta", {206, 184, 0}},
1946 {(unsigned char*)"thetasym", {207, 145, 0}},
1947 {(unsigned char*)"thetav", {207, 145, 0}},
1948 {(unsigned char*)"thickapprox", {226, 137, 136, 0}},
1949 {(unsigned char*)"thicksim", {226, 136, 188, 0}},
1950 {(unsigned char*)"thinsp", {226, 128, 137, 0}},
1951 {(unsigned char*)"thkap", {226, 137, 136, 0}},
1952 {(unsigned char*)"thksim", {226, 136, 188, 0}},
1953 {(unsigned char*)"thorn", {195, 190, 0}},
1954 {(unsigned char*)"tilde", {203, 156, 0}},
1955 {(unsigned char*)"times", {195, 151, 0}},
1956 {(unsigned char*)"timesb", {226, 138, 160, 0}},
1957 {(unsigned char*)"timesbar", {226, 168, 177, 0}},
1958 {(unsigned char*)"timesd", {226, 168, 176, 0}},
1959 {(unsigned char*)"tint", {226, 136, 173, 0}},
1960 {(unsigned char*)"toea", {226, 164, 168, 0}},
1961 {(unsigned char*)"top", {226, 138, 164, 0}},
1962 {(unsigned char*)"topbot", {226, 140, 182, 0}},
1963 {(unsigned char*)"topcir", {226, 171, 177, 0}},
1964 {(unsigned char*)"topf", {240, 157, 149, 165, 0}},
1965 {(unsigned char*)"topfork", {226, 171, 154, 0}},
1966 {(unsigned char*)"tosa", {226, 164, 169, 0}},
1967 {(unsigned char*)"tprime", {226, 128, 180, 0}},
1968 {(unsigned char*)"trade", {226, 132, 162, 0}},
1969 {(unsigned char*)"triangle", {226, 150, 181, 0}},
1970 {(unsigned char*)"triangledown", {226, 150, 191, 0}},
1971 {(unsigned char*)"triangleleft", {226, 151, 131, 0}},
1972 {(unsigned char*)"trianglelefteq", {226, 138, 180, 0}},
1973 {(unsigned char*)"triangleq", {226, 137, 156, 0}},
1974 {(unsigned char*)"triangleright", {226, 150, 185, 0}},
1975 {(unsigned char*)"trianglerighteq", {226, 138, 181, 0}},
1976 {(unsigned char*)"tridot", {226, 151, 172, 0}},
1977 {(unsigned char*)"trie", {226, 137, 156, 0}},
1978 {(unsigned char*)"triminus", {226, 168, 186, 0}},
1979 {(unsigned char*)"triplus", {226, 168, 185, 0}},
1980 {(unsigned char*)"trisb", {226, 167, 141, 0}},
1981 {(unsigned char*)"tritime", {226, 168, 187, 0}},
1982 {(unsigned char*)"trpezium", {226, 143, 162, 0}},
1983 {(unsigned char*)"tscr", {240, 157, 147, 137, 0}},
1984 {(unsigned char*)"tscy", {209, 134, 0}},
1985 {(unsigned char*)"tshcy", {209, 155, 0}},
1986 {(unsigned char*)"tstrok", {197, 167, 0}},
1987 {(unsigned char*)"twixt", {226, 137, 172, 0}},
1988 {(unsigned char*)"twoheadleftarrow", {226, 134, 158, 0}},
1989 {(unsigned char*)"twoheadrightarrow", {226, 134, 160, 0}},
1990 {(unsigned char*)"uArr", {226, 135, 145, 0}},
1991 {(unsigned char*)"uHar", {226, 165, 163, 0}},
1992 {(unsigned char*)"uacute", {195, 186, 0}},
1993 {(unsigned char*)"uarr", {226, 134, 145, 0}},
1994 {(unsigned char*)"ubrcy", {209, 158, 0}},
1995 {(unsigned char*)"ubreve", {197, 173, 0}},
1996 {(unsigned char*)"ucirc", {195, 187, 0}},
1997 {(unsigned char*)"ucy", {209, 131, 0}},
1998 {(unsigned char*)"udarr", {226, 135, 133, 0}},
1999 {(unsigned char*)"udblac", {197, 177, 0}},
2000 {(unsigned char*)"udhar", {226, 165, 174, 0}},
2001 {(unsigned char*)"ufisht", {226, 165, 190, 0}},
2002 {(unsigned char*)"ufr", {240, 157, 148, 178, 0}},
2003 {(unsigned char*)"ugrave", {195, 185, 0}},
2004 {(unsigned char*)"uharl", {226, 134, 191, 0}},
2005 {(unsigned char*)"uharr", {226, 134, 190, 0}},
2006 {(unsigned char*)"uhblk", {226, 150, 128, 0}},
2007 {(unsigned char*)"ulcorn", {226, 140, 156, 0}},
2008 {(unsigned char*)"ulcorner", {226, 140, 156, 0}},
2009 {(unsigned char*)"ulcrop", {226, 140, 143, 0}},
2010 {(unsigned char*)"ultri", {226, 151, 184, 0}},
2011 {(unsigned char*)"umacr", {197, 171, 0}},
2012 {(unsigned char*)"uml", {194, 168, 0}},
2013 {(unsigned char*)"uogon", {197, 179, 0}},
2014 {(unsigned char*)"uopf", {240, 157, 149, 166, 0}},
2015 {(unsigned char*)"uparrow", {226, 134, 145, 0}},
2016 {(unsigned char*)"updownarrow", {226, 134, 149, 0}},
2017 {(unsigned char*)"upharpoonleft", {226, 134, 191, 0}},
2018 {(unsigned char*)"upharpoonright", {226, 134, 190, 0}},
2019 {(unsigned char*)"uplus", {226, 138, 142, 0}},
2020 {(unsigned char*)"upsi", {207, 133, 0}},
2021 {(unsigned char*)"upsih", {207, 146, 0}},
2022 {(unsigned char*)"upsilon", {207, 133, 0}},
2023 {(unsigned char*)"upuparrows", {226, 135, 136, 0}},
2024 {(unsigned char*)"urcorn", {226, 140, 157, 0}},
2025 {(unsigned char*)"urcorner", {226, 140, 157, 0}},
2026 {(unsigned char*)"urcrop", {226, 140, 142, 0}},
2027 {(unsigned char*)"uring", {197, 175, 0}},
2028 {(unsigned char*)"urtri", {226, 151, 185, 0}},
2029 {(unsigned char*)"uscr", {240, 157, 147, 138, 0}},
2030 {(unsigned char*)"utdot", {226, 139, 176, 0}},
2031 {(unsigned char*)"utilde", {197, 169, 0}},
2032 {(unsigned char*)"utri", {226, 150, 181, 0}},
2033 {(unsigned char*)"utrif", {226, 150, 180, 0}},
2034 {(unsigned char*)"uuarr", {226, 135, 136, 0}},
2035 {(unsigned char*)"uuml", {195, 188, 0}},
2036 {(unsigned char*)"uwangle", {226, 166, 167, 0}},
2037 {(unsigned char*)"vArr", {226, 135, 149, 0}},
2038 {(unsigned char*)"vBar", {226, 171, 168, 0}},
2039 {(unsigned char*)"vBarv", {226, 171, 169, 0}},
2040 {(unsigned char*)"vDash", {226, 138, 168, 0}},
2041 {(unsigned char*)"vangrt", {226, 166, 156, 0}},
2042 {(unsigned char*)"varepsilon", {207, 181, 0}},
2043 {(unsigned char*)"varkappa", {207, 176, 0}},
2044 {(unsigned char*)"varnothing", {226, 136, 133, 0}},
2045 {(unsigned char*)"varphi", {207, 149, 0}},
2046 {(unsigned char*)"varpi", {207, 150, 0}},
2047 {(unsigned char*)"varpropto", {226, 136, 157, 0}},
2048 {(unsigned char*)"varr", {226, 134, 149, 0}},
2049 {(unsigned char*)"varrho", {207, 177, 0}},
2050 {(unsigned char*)"varsigma", {207, 130, 0}},
2051 {(unsigned char*)"varsubsetneq", {226, 138, 138, 239, 184, 128, 0}},
2052 {(unsigned char*)"varsubsetneqq", {226, 171, 139, 239, 184, 128, 0}},
2053 {(unsigned char*)"varsupsetneq", {226, 138, 139, 239, 184, 128, 0}},
2054 {(unsigned char*)"varsupsetneqq", {226, 171, 140, 239, 184, 128, 0}},
2055 {(unsigned char*)"vartheta", {207, 145, 0}},
2056 {(unsigned char*)"vartriangleleft", {226, 138, 178, 0}},
2057 {(unsigned char*)"vartriangleright", {226, 138, 179, 0}},
2058 {(unsigned char*)"vcy", {208, 178, 0}},
2059 {(unsigned char*)"vdash", {226, 138, 162, 0}},
2060 {(unsigned char*)"vee", {226, 136, 168, 0}},
2061 {(unsigned char*)"veebar", {226, 138, 187, 0}},
2062 {(unsigned char*)"veeeq", {226, 137, 154, 0}},
2063 {(unsigned char*)"vellip", {226, 139, 174, 0}},
2064 {(unsigned char*)"verbar", {124, 0}},
2065 {(unsigned char*)"vert", {124, 0}},
2066 {(unsigned char*)"vfr", {240, 157, 148, 179, 0}},
2067 {(unsigned char*)"vltri", {226, 138, 178, 0}},
2068 {(unsigned char*)"vnsub", {226, 138, 130, 226, 131, 146, 0}},
2069 {(unsigned char*)"vnsup", {226, 138, 131, 226, 131, 146, 0}},
2070 {(unsigned char*)"vopf", {240, 157, 149, 167, 0}},
2071 {(unsigned char*)"vprop", {226, 136, 157, 0}},
2072 {(unsigned char*)"vrtri", {226, 138, 179, 0}},
2073 {(unsigned char*)"vscr", {240, 157, 147, 139, 0}},
2074 {(unsigned char*)"vsubnE", {226, 171, 139, 239, 184, 128, 0}},
2075 {(unsigned char*)"vsubne", {226, 138, 138, 239, 184, 128, 0}},
2076 {(unsigned char*)"vsupnE", {226, 171, 140, 239, 184, 128, 0}},
2077 {(unsigned char*)"vsupne", {226, 138, 139, 239, 184, 128, 0}},
2078 {(unsigned char*)"vzigzag", {226, 166, 154, 0}},
2079 {(unsigned char*)"wcirc", {197, 181, 0}},
2080 {(unsigned char*)"wedbar", {226, 169, 159, 0}},
2081 {(unsigned char*)"wedge", {226, 136, 167, 0}},
2082 {(unsigned char*)"wedgeq", {226, 137, 153, 0}},
2083 {(unsigned char*)"weierp", {226, 132, 152, 0}},
2084 {(unsigned char*)"wfr", {240, 157, 148, 180, 0}},
2085 {(unsigned char*)"wopf", {240, 157, 149, 168, 0}},
2086 {(unsigned char*)"wp", {226, 132, 152, 0}},
2087 {(unsigned char*)"wr", {226, 137, 128, 0}},
2088 {(unsigned char*)"wreath", {226, 137, 128, 0}},
2089 {(unsigned char*)"wscr", {240, 157, 147, 140, 0}},
2090 {(unsigned char*)"xcap", {226, 139, 130, 0}},
2091 {(unsigned char*)"xcirc", {226, 151, 175, 0}},
2092 {(unsigned char*)"xcup", {226, 139, 131, 0}},
2093 {(unsigned char*)"xdtri", {226, 150, 189, 0}},
2094 {(unsigned char*)"xfr", {240, 157, 148, 181, 0}},
2095 {(unsigned char*)"xhArr", {226, 159, 186, 0}},
2096 {(unsigned char*)"xharr", {226, 159, 183, 0}},
2097 {(unsigned char*)"xi", {206, 190, 0}},
2098 {(unsigned char*)"xlArr", {226, 159, 184, 0}},
2099 {(unsigned char*)"xlarr", {226, 159, 181, 0}},
2100 {(unsigned char*)"xmap", {226, 159, 188, 0}},
2101 {(unsigned char*)"xnis", {226, 139, 187, 0}},
2102 {(unsigned char*)"xodot", {226, 168, 128, 0}},
2103 {(unsigned char*)"xopf", {240, 157, 149, 169, 0}},
2104 {(unsigned char*)"xoplus", {226, 168, 129, 0}},
2105 {(unsigned char*)"xotime", {226, 168, 130, 0}},
2106 {(unsigned char*)"xrArr", {226, 159, 185, 0}},
2107 {(unsigned char*)"xrarr", {226, 159, 182, 0}},
2108 {(unsigned char*)"xscr", {240, 157, 147, 141, 0}},
2109 {(unsigned char*)"xsqcup", {226, 168, 134, 0}},
2110 {(unsigned char*)"xuplus", {226, 168, 132, 0}},
2111 {(unsigned char*)"xutri", {226, 150, 179, 0}},
2112 {(unsigned char*)"xvee", {226, 139, 129, 0}},
2113 {(unsigned char*)"xwedge", {226, 139, 128, 0}},
2114 {(unsigned char*)"yacute", {195, 189, 0}},
2115 {(unsigned char*)"yacy", {209, 143, 0}},
2116 {(unsigned char*)"ycirc", {197, 183, 0}},
2117 {(unsigned char*)"ycy", {209, 139, 0}},
2118 {(unsigned char*)"yen", {194, 165, 0}},
2119 {(unsigned char*)"yfr", {240, 157, 148, 182, 0}},
2120 {(unsigned char*)"yicy", {209, 151, 0}},
2121 {(unsigned char*)"yopf", {240, 157, 149, 170, 0}},
2122 {(unsigned char*)"yscr", {240, 157, 147, 142, 0}},
2123 {(unsigned char*)"yucy", {209, 142, 0}},
2124 {(unsigned char*)"yuml", {195, 191, 0}},
2125 {(unsigned char*)"zacute", {197, 186, 0}},
2126 {(unsigned char*)"zcaron", {197, 190, 0}},
2127 {(unsigned char*)"zcy", {208, 183, 0}},
2128 {(unsigned char*)"zdot", {197, 188, 0}},
2129 {(unsigned char*)"zeetrf", {226, 132, 168, 0}},
2130 {(unsigned char*)"zeta", {206, 182, 0}},
2131 {(unsigned char*)"zfr", {240, 157, 148, 183, 0}},
2132 {(unsigned char*)"zhcy", {208, 182, 0}},
2133 {(unsigned char*)"zigrarr", {226, 135, 157, 0}},
2134 {(unsigned char*)"zopf", {240, 157, 149, 171, 0}},
2135 {(unsigned char*)"zscr", {240, 157, 147, 143, 0}},
2136 {(unsigned char*)"zwj", {226, 128, 141, 0}},
2137 {(unsigned char*)"zwnj", {226, 128, 140, 0}},
2138 };
--- src/main.mk
+++ src/main.mk
@@ -582,10 +582,11 @@
582582
$(LINENOISE_OBJ.$(USE_LINENOISE)) \
583583
$(OBJDIR)/shell.o \
584584
$(OBJDIR)/th.o \
585585
$(OBJDIR)/th_lang.o \
586586
$(OBJDIR)/th_tcl.o \
587
+ $(OBJDIR)/cmark_amalgamation.o \
587588
$(OBJDIR)/cson_amalgamation.o
588589
589590
590591
$(APPNAME): $(OBJDIR)/headers $(OBJDIR)/codecheck1 $(OBJ) $(EXTRAOBJ)
591592
$(OBJDIR)/codecheck1 $(TRANS_SRC)
@@ -1763,12 +1764,14 @@
17631764
$(XTCC) $(MINIZ_OPTIONS) -c $(SRCDIR)/miniz.c -o $@
17641765
17651766
$(OBJDIR)/cson_amalgamation.o: $(SRCDIR)/cson_amalgamation.c
17661767
$(XTCC) -c $(SRCDIR)/cson_amalgamation.c -o $@
17671768
1769
+$(OBJDIR)/cmark_amalgamation.o: $(SRCDIR)/cmark_amalgamation.c
1770
+ $(XTCC) -c $(SRCDIR)/cmark_amalgamation.c -o $@
17681771
#
17691772
# The list of all the targets that do not correspond to real files. This stops
17701773
# 'make' from getting confused when someone makes an error in a rule.
17711774
#
17721775
17731776
.PHONY: all install test clean
17741777
17751778
--- src/main.mk
+++ src/main.mk
@@ -582,10 +582,11 @@
582 $(LINENOISE_OBJ.$(USE_LINENOISE)) \
583 $(OBJDIR)/shell.o \
584 $(OBJDIR)/th.o \
585 $(OBJDIR)/th_lang.o \
586 $(OBJDIR)/th_tcl.o \
 
587 $(OBJDIR)/cson_amalgamation.o
588
589
590 $(APPNAME): $(OBJDIR)/headers $(OBJDIR)/codecheck1 $(OBJ) $(EXTRAOBJ)
591 $(OBJDIR)/codecheck1 $(TRANS_SRC)
@@ -1763,12 +1764,14 @@
1763 $(XTCC) $(MINIZ_OPTIONS) -c $(SRCDIR)/miniz.c -o $@
1764
1765 $(OBJDIR)/cson_amalgamation.o: $(SRCDIR)/cson_amalgamation.c
1766 $(XTCC) -c $(SRCDIR)/cson_amalgamation.c -o $@
1767
 
 
1768 #
1769 # The list of all the targets that do not correspond to real files. This stops
1770 # 'make' from getting confused when someone makes an error in a rule.
1771 #
1772
1773 .PHONY: all install test clean
1774
1775
--- src/main.mk
+++ src/main.mk
@@ -582,10 +582,11 @@
582 $(LINENOISE_OBJ.$(USE_LINENOISE)) \
583 $(OBJDIR)/shell.o \
584 $(OBJDIR)/th.o \
585 $(OBJDIR)/th_lang.o \
586 $(OBJDIR)/th_tcl.o \
587 $(OBJDIR)/cmark_amalgamation.o \
588 $(OBJDIR)/cson_amalgamation.o
589
590
591 $(APPNAME): $(OBJDIR)/headers $(OBJDIR)/codecheck1 $(OBJ) $(EXTRAOBJ)
592 $(OBJDIR)/codecheck1 $(TRANS_SRC)
@@ -1763,12 +1764,14 @@
1764 $(XTCC) $(MINIZ_OPTIONS) -c $(SRCDIR)/miniz.c -o $@
1765
1766 $(OBJDIR)/cson_amalgamation.o: $(SRCDIR)/cson_amalgamation.c
1767 $(XTCC) -c $(SRCDIR)/cson_amalgamation.c -o $@
1768
1769 $(OBJDIR)/cmark_amalgamation.o: $(SRCDIR)/cmark_amalgamation.c
1770 $(XTCC) -c $(SRCDIR)/cmark_amalgamation.c -o $@
1771 #
1772 # The list of all the targets that do not correspond to real files. This stops
1773 # 'make' from getting confused when someone makes an error in a rule.
1774 #
1775
1776 .PHONY: all install test clean
1777
1778

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button