pulldown_cmark/
puncttable.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
// Copyright 2015 Google Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

//! CommonMark punctuation set based on spec and Unicode properties.

// Autogenerated by mk_puncttable.py

const PUNCT_MASKS_ASCII: [u16; 8] = [
    0x0000, // U+0000...U+000F
    0x0000, // U+0010...U+001F
    0xfffe, // U+0020...U+002F
    0xfc00, // U+0030...U+003F
    0x0001, // U+0040...U+004F
    0xf800, // U+0050...U+005F
    0x0001, // U+0060...U+006F
    0x7800, // U+0070...U+007F
];

const PUNCT_TAB: [u16; 727] = [
    10,   // U+00A0...U+00AF
    11,   // U+00B0...U+00BF
    13,   // U+00D0...U+00DF
    15,   // U+00F0...U+00FF
    44,   // U+02C0...U+02CF
    45,   // U+02D0...U+02DF
    46,   // U+02E0...U+02EF
    47,   // U+02F0...U+02FF
    55,   // U+0370...U+037F
    56,   // U+0380...U+038F
    63,   // U+03F0...U+03FF
    72,   // U+0480...U+048F
    85,   // U+0550...U+055F
    88,   // U+0580...U+058F
    91,   // U+05B0...U+05BF
    92,   // U+05C0...U+05CF
    95,   // U+05F0...U+05FF
    96,   // U+0600...U+060F
    97,   // U+0610...U+061F
    102,  // U+0660...U+066F
    109,  // U+06D0...U+06DF
    110,  // U+06E0...U+06EF
    111,  // U+06F0...U+06FF
    112,  // U+0700...U+070F
    127,  // U+07F0...U+07FF
    131,  // U+0830...U+083F
    133,  // U+0850...U+085F
    136,  // U+0880...U+088F
    150,  // U+0960...U+096F
    151,  // U+0970...U+097F
    159,  // U+09F0...U+09FF
    167,  // U+0A70...U+0A7F
    175,  // U+0AF0...U+0AFF
    183,  // U+0B70...U+0B7F
    191,  // U+0BF0...U+0BFF
    199,  // U+0C70...U+0C7F
    200,  // U+0C80...U+0C8F
    212,  // U+0D40...U+0D4F
    215,  // U+0D70...U+0D7F
    223,  // U+0DF0...U+0DFF
    227,  // U+0E30...U+0E3F
    228,  // U+0E40...U+0E4F
    229,  // U+0E50...U+0E5F
    240,  // U+0F00...U+0F0F
    241,  // U+0F10...U+0F1F
    243,  // U+0F30...U+0F3F
    248,  // U+0F80...U+0F8F
    251,  // U+0FB0...U+0FBF
    252,  // U+0FC0...U+0FCF
    253,  // U+0FD0...U+0FDF
    260,  // U+1040...U+104F
    265,  // U+1090...U+109F
    271,  // U+10F0...U+10FF
    310,  // U+1360...U+136F
    313,  // U+1390...U+139F
    320,  // U+1400...U+140F
    358,  // U+1660...U+166F
    361,  // U+1690...U+169F
    366,  // U+16E0...U+16EF
    371,  // U+1730...U+173F
    381,  // U+17D0...U+17DF
    384,  // U+1800...U+180F
    404,  // U+1940...U+194F
    413,  // U+19D0...U+19DF
    414,  // U+19E0...U+19EF
    415,  // U+19F0...U+19FF
    417,  // U+1A10...U+1A1F
    426,  // U+1AA0...U+1AAF
    437,  // U+1B50...U+1B5F
    438,  // U+1B60...U+1B6F
    439,  // U+1B70...U+1B7F
    447,  // U+1BF0...U+1BFF
    451,  // U+1C30...U+1C3F
    455,  // U+1C70...U+1C7F
    460,  // U+1CC0...U+1CCF
    461,  // U+1CD0...U+1CDF
    507,  // U+1FB0...U+1FBF
    508,  // U+1FC0...U+1FCF
    509,  // U+1FD0...U+1FDF
    510,  // U+1FE0...U+1FEF
    511,  // U+1FF0...U+1FFF
    513,  // U+2010...U+201F
    514,  // U+2020...U+202F
    515,  // U+2030...U+203F
    516,  // U+2040...U+204F
    517,  // U+2050...U+205F
    519,  // U+2070...U+207F
    520,  // U+2080...U+208F
    522,  // U+20A0...U+20AF
    523,  // U+20B0...U+20BF
    524,  // U+20C0...U+20CF
    528,  // U+2100...U+210F
    529,  // U+2110...U+211F
    530,  // U+2120...U+212F
    531,  // U+2130...U+213F
    532,  // U+2140...U+214F
    536,  // U+2180...U+218F
    537,  // U+2190...U+219F
    538,  // U+21A0...U+21AF
    539,  // U+21B0...U+21BF
    540,  // U+21C0...U+21CF
    541,  // U+21D0...U+21DF
    542,  // U+21E0...U+21EF
    543,  // U+21F0...U+21FF
    544,  // U+2200...U+220F
    545,  // U+2210...U+221F
    546,  // U+2220...U+222F
    547,  // U+2230...U+223F
    548,  // U+2240...U+224F
    549,  // U+2250...U+225F
    550,  // U+2260...U+226F
    551,  // U+2270...U+227F
    552,  // U+2280...U+228F
    553,  // U+2290...U+229F
    554,  // U+22A0...U+22AF
    555,  // U+22B0...U+22BF
    556,  // U+22C0...U+22CF
    557,  // U+22D0...U+22DF
    558,  // U+22E0...U+22EF
    559,  // U+22F0...U+22FF
    560,  // U+2300...U+230F
    561,  // U+2310...U+231F
    562,  // U+2320...U+232F
    563,  // U+2330...U+233F
    564,  // U+2340...U+234F
    565,  // U+2350...U+235F
    566,  // U+2360...U+236F
    567,  // U+2370...U+237F
    568,  // U+2380...U+238F
    569,  // U+2390...U+239F
    570,  // U+23A0...U+23AF
    571,  // U+23B0...U+23BF
    572,  // U+23C0...U+23CF
    573,  // U+23D0...U+23DF
    574,  // U+23E0...U+23EF
    575,  // U+23F0...U+23FF
    576,  // U+2400...U+240F
    577,  // U+2410...U+241F
    578,  // U+2420...U+242F
    580,  // U+2440...U+244F
    585,  // U+2490...U+249F
    586,  // U+24A0...U+24AF
    587,  // U+24B0...U+24BF
    588,  // U+24C0...U+24CF
    589,  // U+24D0...U+24DF
    590,  // U+24E0...U+24EF
    592,  // U+2500...U+250F
    593,  // U+2510...U+251F
    594,  // U+2520...U+252F
    595,  // U+2530...U+253F
    596,  // U+2540...U+254F
    597,  // U+2550...U+255F
    598,  // U+2560...U+256F
    599,  // U+2570...U+257F
    600,  // U+2580...U+258F
    601,  // U+2590...U+259F
    602,  // U+25A0...U+25AF
    603,  // U+25B0...U+25BF
    604,  // U+25C0...U+25CF
    605,  // U+25D0...U+25DF
    606,  // U+25E0...U+25EF
    607,  // U+25F0...U+25FF
    608,  // U+2600...U+260F
    609,  // U+2610...U+261F
    610,  // U+2620...U+262F
    611,  // U+2630...U+263F
    612,  // U+2640...U+264F
    613,  // U+2650...U+265F
    614,  // U+2660...U+266F
    615,  // U+2670...U+267F
    616,  // U+2680...U+268F
    617,  // U+2690...U+269F
    618,  // U+26A0...U+26AF
    619,  // U+26B0...U+26BF
    620,  // U+26C0...U+26CF
    621,  // U+26D0...U+26DF
    622,  // U+26E0...U+26EF
    623,  // U+26F0...U+26FF
    624,  // U+2700...U+270F
    625,  // U+2710...U+271F
    626,  // U+2720...U+272F
    627,  // U+2730...U+273F
    628,  // U+2740...U+274F
    629,  // U+2750...U+275F
    630,  // U+2760...U+276F
    631,  // U+2770...U+277F
    633,  // U+2790...U+279F
    634,  // U+27A0...U+27AF
    635,  // U+27B0...U+27BF
    636,  // U+27C0...U+27CF
    637,  // U+27D0...U+27DF
    638,  // U+27E0...U+27EF
    639,  // U+27F0...U+27FF
    640,  // U+2800...U+280F
    641,  // U+2810...U+281F
    642,  // U+2820...U+282F
    643,  // U+2830...U+283F
    644,  // U+2840...U+284F
    645,  // U+2850...U+285F
    646,  // U+2860...U+286F
    647,  // U+2870...U+287F
    648,  // U+2880...U+288F
    649,  // U+2890...U+289F
    650,  // U+28A0...U+28AF
    651,  // U+28B0...U+28BF
    652,  // U+28C0...U+28CF
    653,  // U+28D0...U+28DF
    654,  // U+28E0...U+28EF
    655,  // U+28F0...U+28FF
    656,  // U+2900...U+290F
    657,  // U+2910...U+291F
    658,  // U+2920...U+292F
    659,  // U+2930...U+293F
    660,  // U+2940...U+294F
    661,  // U+2950...U+295F
    662,  // U+2960...U+296F
    663,  // U+2970...U+297F
    664,  // U+2980...U+298F
    665,  // U+2990...U+299F
    666,  // U+29A0...U+29AF
    667,  // U+29B0...U+29BF
    668,  // U+29C0...U+29CF
    669,  // U+29D0...U+29DF
    670,  // U+29E0...U+29EF
    671,  // U+29F0...U+29FF
    672,  // U+2A00...U+2A0F
    673,  // U+2A10...U+2A1F
    674,  // U+2A20...U+2A2F
    675,  // U+2A30...U+2A3F
    676,  // U+2A40...U+2A4F
    677,  // U+2A50...U+2A5F
    678,  // U+2A60...U+2A6F
    679,  // U+2A70...U+2A7F
    680,  // U+2A80...U+2A8F
    681,  // U+2A90...U+2A9F
    682,  // U+2AA0...U+2AAF
    683,  // U+2AB0...U+2ABF
    684,  // U+2AC0...U+2ACF
    685,  // U+2AD0...U+2ADF
    686,  // U+2AE0...U+2AEF
    687,  // U+2AF0...U+2AFF
    688,  // U+2B00...U+2B0F
    689,  // U+2B10...U+2B1F
    690,  // U+2B20...U+2B2F
    691,  // U+2B30...U+2B3F
    692,  // U+2B40...U+2B4F
    693,  // U+2B50...U+2B5F
    694,  // U+2B60...U+2B6F
    695,  // U+2B70...U+2B7F
    696,  // U+2B80...U+2B8F
    697,  // U+2B90...U+2B9F
    698,  // U+2BA0...U+2BAF
    699,  // U+2BB0...U+2BBF
    700,  // U+2BC0...U+2BCF
    701,  // U+2BD0...U+2BDF
    702,  // U+2BE0...U+2BEF
    703,  // U+2BF0...U+2BFF
    718,  // U+2CE0...U+2CEF
    719,  // U+2CF0...U+2CFF
    727,  // U+2D70...U+2D7F
    736,  // U+2E00...U+2E0F
    737,  // U+2E10...U+2E1F
    738,  // U+2E20...U+2E2F
    739,  // U+2E30...U+2E3F
    740,  // U+2E40...U+2E4F
    741,  // U+2E50...U+2E5F
    744,  // U+2E80...U+2E8F
    745,  // U+2E90...U+2E9F
    746,  // U+2EA0...U+2EAF
    747,  // U+2EB0...U+2EBF
    748,  // U+2EC0...U+2ECF
    749,  // U+2ED0...U+2EDF
    750,  // U+2EE0...U+2EEF
    751,  // U+2EF0...U+2EFF
    752,  // U+2F00...U+2F0F
    753,  // U+2F10...U+2F1F
    754,  // U+2F20...U+2F2F
    755,  // U+2F30...U+2F3F
    756,  // U+2F40...U+2F4F
    757,  // U+2F50...U+2F5F
    758,  // U+2F60...U+2F6F
    759,  // U+2F70...U+2F7F
    760,  // U+2F80...U+2F8F
    761,  // U+2F90...U+2F9F
    762,  // U+2FA0...U+2FAF
    763,  // U+2FB0...U+2FBF
    764,  // U+2FC0...U+2FCF
    765,  // U+2FD0...U+2FDF
    767,  // U+2FF0...U+2FFF
    768,  // U+3000...U+300F
    769,  // U+3010...U+301F
    770,  // U+3020...U+302F
    771,  // U+3030...U+303F
    777,  // U+3090...U+309F
    778,  // U+30A0...U+30AF
    783,  // U+30F0...U+30FF
    793,  // U+3190...U+319F
    796,  // U+31C0...U+31CF
    797,  // U+31D0...U+31DF
    798,  // U+31E0...U+31EF
    800,  // U+3200...U+320F
    801,  // U+3210...U+321F
    802,  // U+3220...U+322F
    803,  // U+3230...U+323F
    804,  // U+3240...U+324F
    805,  // U+3250...U+325F
    806,  // U+3260...U+326F
    807,  // U+3270...U+327F
    808,  // U+3280...U+328F
    809,  // U+3290...U+329F
    810,  // U+32A0...U+32AF
    811,  // U+32B0...U+32BF
    812,  // U+32C0...U+32CF
    813,  // U+32D0...U+32DF
    814,  // U+32E0...U+32EF
    815,  // U+32F0...U+32FF
    816,  // U+3300...U+330F
    817,  // U+3310...U+331F
    818,  // U+3320...U+332F
    819,  // U+3330...U+333F
    820,  // U+3340...U+334F
    821,  // U+3350...U+335F
    822,  // U+3360...U+336F
    823,  // U+3370...U+337F
    824,  // U+3380...U+338F
    825,  // U+3390...U+339F
    826,  // U+33A0...U+33AF
    827,  // U+33B0...U+33BF
    828,  // U+33C0...U+33CF
    829,  // U+33D0...U+33DF
    830,  // U+33E0...U+33EF
    831,  // U+33F0...U+33FF
    1244, // U+4DC0...U+4DCF
    1245, // U+4DD0...U+4DDF
    1246, // U+4DE0...U+4DEF
    1247, // U+4DF0...U+4DFF
    2633, // U+A490...U+A49F
    2634, // U+A4A0...U+A4AF
    2635, // U+A4B0...U+A4BF
    2636, // U+A4C0...U+A4CF
    2639, // U+A4F0...U+A4FF
    2656, // U+A600...U+A60F
    2663, // U+A670...U+A67F
    2671, // U+A6F0...U+A6FF
    2672, // U+A700...U+A70F
    2673, // U+A710...U+A71F
    2674, // U+A720...U+A72F
    2680, // U+A780...U+A78F
    2690, // U+A820...U+A82F
    2691, // U+A830...U+A83F
    2695, // U+A870...U+A87F
    2700, // U+A8C0...U+A8CF
    2703, // U+A8F0...U+A8FF
    2706, // U+A920...U+A92F
    2709, // U+A950...U+A95F
    2716, // U+A9C0...U+A9CF
    2717, // U+A9D0...U+A9DF
    2725, // U+AA50...U+AA5F
    2727, // U+AA70...U+AA7F
    2733, // U+AAD0...U+AADF
    2735, // U+AAF0...U+AAFF
    2741, // U+AB50...U+AB5F
    2742, // U+AB60...U+AB6F
    2750, // U+ABE0...U+ABEF
    4018, // U+FB20...U+FB2F
    4027, // U+FBB0...U+FBBF
    4028, // U+FBC0...U+FBCF
    4051, // U+FD30...U+FD3F
    4052, // U+FD40...U+FD4F
    4060, // U+FDC0...U+FDCF
    4063, // U+FDF0...U+FDFF
    4065, // U+FE10...U+FE1F
    4067, // U+FE30...U+FE3F
    4068, // U+FE40...U+FE4F
    4069, // U+FE50...U+FE5F
    4070, // U+FE60...U+FE6F
    4080, // U+FF00...U+FF0F
    4081, // U+FF10...U+FF1F
    4082, // U+FF20...U+FF2F
    4083, // U+FF30...U+FF3F
    4084, // U+FF40...U+FF4F
    4085, // U+FF50...U+FF5F
    4086, // U+FF60...U+FF6F
    4094, // U+FFE0...U+FFEF
    4095, // U+FFF0...U+FFFF
    4112, // U+10100...U+1010F
    4115, // U+10130...U+1013F
    4119, // U+10170...U+1017F
    4120, // U+10180...U+1018F
    4121, // U+10190...U+1019F
    4122, // U+101A0...U+101AF
    4125, // U+101D0...U+101DF
    4126, // U+101E0...U+101EF
    4127, // U+101F0...U+101FF
    4153, // U+10390...U+1039F
    4157, // U+103D0...U+103DF
    4182, // U+10560...U+1056F
    4229, // U+10850...U+1085F
    4231, // U+10870...U+1087F
    4241, // U+10910...U+1091F
    4243, // U+10930...U+1093F
    4261, // U+10A50...U+10A5F
    4263, // U+10A70...U+10A7F
    4268, // U+10AC0...U+10ACF
    4271, // U+10AF0...U+10AFF
    4275, // U+10B30...U+10B3F
    4281, // U+10B90...U+10B9F
    4330, // U+10EA0...U+10EAF
    4341, // U+10F50...U+10F5F
    4344, // U+10F80...U+10F8F
    4356, // U+11040...U+1104F
    4363, // U+110B0...U+110BF
    4364, // U+110C0...U+110CF
    4372, // U+11140...U+1114F
    4375, // U+11170...U+1117F
    4380, // U+111C0...U+111CF
    4381, // U+111D0...U+111DF
    4387, // U+11230...U+1123F
    4394, // U+112A0...U+112AF
    4420, // U+11440...U+1144F
    4421, // U+11450...U+1145F
    4428, // U+114C0...U+114CF
    4444, // U+115C0...U+115CF
    4445, // U+115D0...U+115DF
    4452, // U+11640...U+1164F
    4454, // U+11660...U+1166F
    4459, // U+116B0...U+116BF
    4467, // U+11730...U+1173F
    4483, // U+11830...U+1183F
    4500, // U+11940...U+1194F
    4510, // U+119E0...U+119EF
    4515, // U+11A30...U+11A3F
    4516, // U+11A40...U+11A4F
    4521, // U+11A90...U+11A9F
    4522, // U+11AA0...U+11AAF
    4528, // U+11B00...U+11B0F
    4548, // U+11C40...U+11C4F
    4551, // U+11C70...U+11C7F
    4591, // U+11EF0...U+11EFF
    4596, // U+11F40...U+11F4F
    4605, // U+11FD0...U+11FDF
    4606, // U+11FE0...U+11FEF
    4607, // U+11FF0...U+11FFF
    4679, // U+12470...U+1247F
    4863, // U+12FF0...U+12FFF
    5798, // U+16A60...U+16A6F
    5807, // U+16AF0...U+16AFF
    5811, // U+16B30...U+16B3F
    5812, // U+16B40...U+16B4F
    5865, // U+16E90...U+16E9F
    5886, // U+16FE0...U+16FEF
    7113, // U+1BC90...U+1BC9F
    7413, // U+1CF50...U+1CF5F
    7414, // U+1CF60...U+1CF6F
    7415, // U+1CF70...U+1CF7F
    7416, // U+1CF80...U+1CF8F
    7417, // U+1CF90...U+1CF9F
    7418, // U+1CFA0...U+1CFAF
    7419, // U+1CFB0...U+1CFBF
    7420, // U+1CFC0...U+1CFCF
    7424, // U+1D000...U+1D00F
    7425, // U+1D010...U+1D01F
    7426, // U+1D020...U+1D02F
    7427, // U+1D030...U+1D03F
    7428, // U+1D040...U+1D04F
    7429, // U+1D050...U+1D05F
    7430, // U+1D060...U+1D06F
    7431, // U+1D070...U+1D07F
    7432, // U+1D080...U+1D08F
    7433, // U+1D090...U+1D09F
    7434, // U+1D0A0...U+1D0AF
    7435, // U+1D0B0...U+1D0BF
    7436, // U+1D0C0...U+1D0CF
    7437, // U+1D0D0...U+1D0DF
    7438, // U+1D0E0...U+1D0EF
    7439, // U+1D0F0...U+1D0FF
    7440, // U+1D100...U+1D10F
    7441, // U+1D110...U+1D11F
    7442, // U+1D120...U+1D12F
    7443, // U+1D130...U+1D13F
    7444, // U+1D140...U+1D14F
    7445, // U+1D150...U+1D15F
    7446, // U+1D160...U+1D16F
    7448, // U+1D180...U+1D18F
    7449, // U+1D190...U+1D19F
    7450, // U+1D1A0...U+1D1AF
    7451, // U+1D1B0...U+1D1BF
    7452, // U+1D1C0...U+1D1CF
    7453, // U+1D1D0...U+1D1DF
    7454, // U+1D1E0...U+1D1EF
    7456, // U+1D200...U+1D20F
    7457, // U+1D210...U+1D21F
    7458, // U+1D220...U+1D22F
    7459, // U+1D230...U+1D23F
    7460, // U+1D240...U+1D24F
    7472, // U+1D300...U+1D30F
    7473, // U+1D310...U+1D31F
    7474, // U+1D320...U+1D32F
    7475, // U+1D330...U+1D33F
    7476, // U+1D340...U+1D34F
    7477, // U+1D350...U+1D35F
    7532, // U+1D6C0...U+1D6CF
    7533, // U+1D6D0...U+1D6DF
    7535, // U+1D6F0...U+1D6FF
    7537, // U+1D710...U+1D71F
    7539, // U+1D730...U+1D73F
    7540, // U+1D740...U+1D74F
    7542, // U+1D760...U+1D76F
    7544, // U+1D780...U+1D78F
    7546, // U+1D7A0...U+1D7AF
    7548, // U+1D7C0...U+1D7CF
    7552, // U+1D800...U+1D80F
    7553, // U+1D810...U+1D81F
    7554, // U+1D820...U+1D82F
    7555, // U+1D830...U+1D83F
    7556, // U+1D840...U+1D84F
    7557, // U+1D850...U+1D85F
    7558, // U+1D860...U+1D86F
    7559, // U+1D870...U+1D87F
    7560, // U+1D880...U+1D88F
    7561, // U+1D890...U+1D89F
    7562, // U+1D8A0...U+1D8AF
    7563, // U+1D8B0...U+1D8BF
    7564, // U+1D8C0...U+1D8CF
    7565, // U+1D8D0...U+1D8DF
    7566, // U+1D8E0...U+1D8EF
    7567, // U+1D8F0...U+1D8FF
    7568, // U+1D900...U+1D90F
    7569, // U+1D910...U+1D91F
    7570, // U+1D920...U+1D92F
    7571, // U+1D930...U+1D93F
    7572, // U+1D940...U+1D94F
    7573, // U+1D950...U+1D95F
    7574, // U+1D960...U+1D96F
    7575, // U+1D970...U+1D97F
    7576, // U+1D980...U+1D98F
    7577, // U+1D990...U+1D99F
    7578, // U+1D9A0...U+1D9AF
    7579, // U+1D9B0...U+1D9BF
    7580, // U+1D9C0...U+1D9CF
    7581, // U+1D9D0...U+1D9DF
    7582, // U+1D9E0...U+1D9EF
    7583, // U+1D9F0...U+1D9FF
    7587, // U+1DA30...U+1DA3F
    7590, // U+1DA60...U+1DA6F
    7591, // U+1DA70...U+1DA7F
    7592, // U+1DA80...U+1DA8F
    7700, // U+1E140...U+1E14F
    7727, // U+1E2F0...U+1E2FF
    7829, // U+1E950...U+1E95F
    7882, // U+1ECA0...U+1ECAF
    7883, // U+1ECB0...U+1ECBF
    7890, // U+1ED20...U+1ED2F
    7919, // U+1EEF0...U+1EEFF
    7936, // U+1F000...U+1F00F
    7937, // U+1F010...U+1F01F
    7938, // U+1F020...U+1F02F
    7939, // U+1F030...U+1F03F
    7940, // U+1F040...U+1F04F
    7941, // U+1F050...U+1F05F
    7942, // U+1F060...U+1F06F
    7943, // U+1F070...U+1F07F
    7944, // U+1F080...U+1F08F
    7945, // U+1F090...U+1F09F
    7946, // U+1F0A0...U+1F0AF
    7947, // U+1F0B0...U+1F0BF
    7948, // U+1F0C0...U+1F0CF
    7949, // U+1F0D0...U+1F0DF
    7950, // U+1F0E0...U+1F0EF
    7951, // U+1F0F0...U+1F0FF
    7952, // U+1F100...U+1F10F
    7953, // U+1F110...U+1F11F
    7954, // U+1F120...U+1F12F
    7955, // U+1F130...U+1F13F
    7956, // U+1F140...U+1F14F
    7957, // U+1F150...U+1F15F
    7958, // U+1F160...U+1F16F
    7959, // U+1F170...U+1F17F
    7960, // U+1F180...U+1F18F
    7961, // U+1F190...U+1F19F
    7962, // U+1F1A0...U+1F1AF
    7966, // U+1F1E0...U+1F1EF
    7967, // U+1F1F0...U+1F1FF
    7968, // U+1F200...U+1F20F
    7969, // U+1F210...U+1F21F
    7970, // U+1F220...U+1F22F
    7971, // U+1F230...U+1F23F
    7972, // U+1F240...U+1F24F
    7973, // U+1F250...U+1F25F
    7974, // U+1F260...U+1F26F
    7984, // U+1F300...U+1F30F
    7985, // U+1F310...U+1F31F
    7986, // U+1F320...U+1F32F
    7987, // U+1F330...U+1F33F
    7988, // U+1F340...U+1F34F
    7989, // U+1F350...U+1F35F
    7990, // U+1F360...U+1F36F
    7991, // U+1F370...U+1F37F
    7992, // U+1F380...U+1F38F
    7993, // U+1F390...U+1F39F
    7994, // U+1F3A0...U+1F3AF
    7995, // U+1F3B0...U+1F3BF
    7996, // U+1F3C0...U+1F3CF
    7997, // U+1F3D0...U+1F3DF
    7998, // U+1F3E0...U+1F3EF
    7999, // U+1F3F0...U+1F3FF
    8000, // U+1F400...U+1F40F
    8001, // U+1F410...U+1F41F
    8002, // U+1F420...U+1F42F
    8003, // U+1F430...U+1F43F
    8004, // U+1F440...U+1F44F
    8005, // U+1F450...U+1F45F
    8006, // U+1F460...U+1F46F
    8007, // U+1F470...U+1F47F
    8008, // U+1F480...U+1F48F
    8009, // U+1F490...U+1F49F
    8010, // U+1F4A0...U+1F4AF
    8011, // U+1F4B0...U+1F4BF
    8012, // U+1F4C0...U+1F4CF
    8013, // U+1F4D0...U+1F4DF
    8014, // U+1F4E0...U+1F4EF
    8015, // U+1F4F0...U+1F4FF
    8016, // U+1F500...U+1F50F
    8017, // U+1F510...U+1F51F
    8018, // U+1F520...U+1F52F
    8019, // U+1F530...U+1F53F
    8020, // U+1F540...U+1F54F
    8021, // U+1F550...U+1F55F
    8022, // U+1F560...U+1F56F
    8023, // U+1F570...U+1F57F
    8024, // U+1F580...U+1F58F
    8025, // U+1F590...U+1F59F
    8026, // U+1F5A0...U+1F5AF
    8027, // U+1F5B0...U+1F5BF
    8028, // U+1F5C0...U+1F5CF
    8029, // U+1F5D0...U+1F5DF
    8030, // U+1F5E0...U+1F5EF
    8031, // U+1F5F0...U+1F5FF
    8032, // U+1F600...U+1F60F
    8033, // U+1F610...U+1F61F
    8034, // U+1F620...U+1F62F
    8035, // U+1F630...U+1F63F
    8036, // U+1F640...U+1F64F
    8037, // U+1F650...U+1F65F
    8038, // U+1F660...U+1F66F
    8039, // U+1F670...U+1F67F
    8040, // U+1F680...U+1F68F
    8041, // U+1F690...U+1F69F
    8042, // U+1F6A0...U+1F6AF
    8043, // U+1F6B0...U+1F6BF
    8044, // U+1F6C0...U+1F6CF
    8045, // U+1F6D0...U+1F6DF
    8046, // U+1F6E0...U+1F6EF
    8047, // U+1F6F0...U+1F6FF
    8048, // U+1F700...U+1F70F
    8049, // U+1F710...U+1F71F
    8050, // U+1F720...U+1F72F
    8051, // U+1F730...U+1F73F
    8052, // U+1F740...U+1F74F
    8053, // U+1F750...U+1F75F
    8054, // U+1F760...U+1F76F
    8055, // U+1F770...U+1F77F
    8056, // U+1F780...U+1F78F
    8057, // U+1F790...U+1F79F
    8058, // U+1F7A0...U+1F7AF
    8059, // U+1F7B0...U+1F7BF
    8060, // U+1F7C0...U+1F7CF
    8061, // U+1F7D0...U+1F7DF
    8062, // U+1F7E0...U+1F7EF
    8063, // U+1F7F0...U+1F7FF
    8064, // U+1F800...U+1F80F
    8065, // U+1F810...U+1F81F
    8066, // U+1F820...U+1F82F
    8067, // U+1F830...U+1F83F
    8068, // U+1F840...U+1F84F
    8069, // U+1F850...U+1F85F
    8070, // U+1F860...U+1F86F
    8071, // U+1F870...U+1F87F
    8072, // U+1F880...U+1F88F
    8073, // U+1F890...U+1F89F
    8074, // U+1F8A0...U+1F8AF
    8075, // U+1F8B0...U+1F8BF
    8080, // U+1F900...U+1F90F
    8081, // U+1F910...U+1F91F
    8082, // U+1F920...U+1F92F
    8083, // U+1F930...U+1F93F
    8084, // U+1F940...U+1F94F
    8085, // U+1F950...U+1F95F
    8086, // U+1F960...U+1F96F
    8087, // U+1F970...U+1F97F
    8088, // U+1F980...U+1F98F
    8089, // U+1F990...U+1F99F
    8090, // U+1F9A0...U+1F9AF
    8091, // U+1F9B0...U+1F9BF
    8092, // U+1F9C0...U+1F9CF
    8093, // U+1F9D0...U+1F9DF
    8094, // U+1F9E0...U+1F9EF
    8095, // U+1F9F0...U+1F9FF
    8096, // U+1FA00...U+1FA0F
    8097, // U+1FA10...U+1FA1F
    8098, // U+1FA20...U+1FA2F
    8099, // U+1FA30...U+1FA3F
    8100, // U+1FA40...U+1FA4F
    8101, // U+1FA50...U+1FA5F
    8102, // U+1FA60...U+1FA6F
    8103, // U+1FA70...U+1FA7F
    8104, // U+1FA80...U+1FA8F
    8105, // U+1FA90...U+1FA9F
    8106, // U+1FAA0...U+1FAAF
    8107, // U+1FAB0...U+1FABF
    8108, // U+1FAC0...U+1FACF
    8109, // U+1FAD0...U+1FADF
    8110, // U+1FAE0...U+1FAEF
    8111, // U+1FAF0...U+1FAFF
    8112, // U+1FB00...U+1FB0F
    8113, // U+1FB10...U+1FB1F
    8114, // U+1FB20...U+1FB2F
    8115, // U+1FB30...U+1FB3F
    8116, // U+1FB40...U+1FB4F
    8117, // U+1FB50...U+1FB5F
    8118, // U+1FB60...U+1FB6F
    8119, // U+1FB70...U+1FB7F
    8120, // U+1FB80...U+1FB8F
    8121, // U+1FB90...U+1FB9F
    8122, // U+1FBA0...U+1FBAF
    8123, // U+1FBB0...U+1FBBF
    8124, // U+1FBC0...U+1FBCF
];

const PUNCT_MASKS: [u16; 727] = [
    0xdbfe, // U+00A0...U+00AF
    0x89d3, // U+00B0...U+00BF
    0x0080, // U+00D0...U+00DF
    0x0080, // U+00F0...U+00FF
    0x003c, // U+02C0...U+02CF
    0xfffc, // U+02D0...U+02DF
    0xafe0, // U+02E0...U+02EF
    0xffff, // U+02F0...U+02FF
    0x4020, // U+0370...U+037F
    0x00b0, // U+0380...U+038F
    0x0040, // U+03F0...U+03FF
    0x0004, // U+0480...U+048F
    0xfc00, // U+0550...U+055F
    0xe600, // U+0580...U+058F
    0x4000, // U+05B0...U+05BF
    0x0049, // U+05C0...U+05CF
    0x0018, // U+05F0...U+05FF
    0xffc0, // U+0600...U+060F
    0xe800, // U+0610...U+061F
    0x3c00, // U+0660...U+066F
    0x4010, // U+06D0...U+06DF
    0x0200, // U+06E0...U+06EF
    0x6000, // U+06F0...U+06FF
    0x3fff, // U+0700...U+070F
    0xc3c0, // U+07F0...U+07FF
    0x7fff, // U+0830...U+083F
    0x4000, // U+0850...U+085F
    0x0100, // U+0880...U+088F
    0x0030, // U+0960...U+096F
    0x0001, // U+0970...U+097F
    0x2c0c, // U+09F0...U+09FF
    0x0040, // U+0A70...U+0A7F
    0x0003, // U+0AF0...U+0AFF
    0x0001, // U+0B70...U+0B7F
    0x07f8, // U+0BF0...U+0BFF
    0x8080, // U+0C70...U+0C7F
    0x0010, // U+0C80...U+0C8F
    0x8000, // U+0D40...U+0D4F
    0x0200, // U+0D70...U+0D7F
    0x0010, // U+0DF0...U+0DFF
    0x8000, // U+0E30...U+0E3F
    0x8000, // U+0E40...U+0E4F
    0x0c00, // U+0E50...U+0E5F
    0xfffe, // U+0F00...U+0F0F
    0xfcff, // U+0F10...U+0F1F
    0x3d50, // U+0F30...U+0F3F
    0x0020, // U+0F80...U+0F8F
    0xc000, // U+0FB0...U+0FBF
    0xdfbf, // U+0FC0...U+0FCF
    0x07ff, // U+0FD0...U+0FDF
    0xfc00, // U+1040...U+104F
    0xc000, // U+1090...U+109F
    0x0800, // U+10F0...U+10FF
    0x01ff, // U+1360...U+136F
    0x03ff, // U+1390...U+139F
    0x0001, // U+1400...U+140F
    0x6000, // U+1660...U+166F
    0x1800, // U+1690...U+169F
    0x3800, // U+16E0...U+16EF
    0x0060, // U+1730...U+173F
    0x0f70, // U+17D0...U+17DF
    0x07ff, // U+1800...U+180F
    0x0031, // U+1940...U+194F
    0xc000, // U+19D0...U+19DF
    0xffff, // U+19E0...U+19EF
    0xffff, // U+19F0...U+19FF
    0xc000, // U+1A10...U+1A1F
    0x3f7f, // U+1AA0...U+1AAF
    0xfc00, // U+1B50...U+1B5F
    0x07ff, // U+1B60...U+1B6F
    0x7ff0, // U+1B70...U+1B7F
    0xf000, // U+1BF0...U+1BFF
    0xf800, // U+1C30...U+1C3F
    0xc000, // U+1C70...U+1C7F
    0x00ff, // U+1CC0...U+1CCF
    0x0008, // U+1CD0...U+1CDF
    0xa000, // U+1FB0...U+1FBF
    0xe003, // U+1FC0...U+1FCF
    0xe000, // U+1FD0...U+1FDF
    0xe000, // U+1FE0...U+1FEF
    0x6000, // U+1FF0...U+1FFF
    0xffff, // U+2010...U+201F
    0x00ff, // U+2020...U+202F
    0xffff, // U+2030...U+203F
    0xffff, // U+2040...U+204F
    0x7fff, // U+2050...U+205F
    0x7c00, // U+2070...U+207F
    0x7c00, // U+2080...U+208F
    0xffff, // U+20A0...U+20AF
    0xffff, // U+20B0...U+20BF
    0x0001, // U+20C0...U+20CF
    0x037b, // U+2100...U+210F
    0xc1d0, // U+2110...U+211F
    0x42af, // U+2120...U+212F
    0x0c00, // U+2130...U+213F
    0xbc1f, // U+2140...U+214F
    0x0c00, // U+2180...U+218F
    0xffff, // U+2190...U+219F
    0xffff, // U+21A0...U+21AF
    0xffff, // U+21B0...U+21BF
    0xffff, // U+21C0...U+21CF
    0xffff, // U+21D0...U+21DF
    0xffff, // U+21E0...U+21EF
    0xffff, // U+21F0...U+21FF
    0xffff, // U+2200...U+220F
    0xffff, // U+2210...U+221F
    0xffff, // U+2220...U+222F
    0xffff, // U+2230...U+223F
    0xffff, // U+2240...U+224F
    0xffff, // U+2250...U+225F
    0xffff, // U+2260...U+226F
    0xffff, // U+2270...U+227F
    0xffff, // U+2280...U+228F
    0xffff, // U+2290...U+229F
    0xffff, // U+22A0...U+22AF
    0xffff, // U+22B0...U+22BF
    0xffff, // U+22C0...U+22CF
    0xffff, // U+22D0...U+22DF
    0xffff, // U+22E0...U+22EF
    0xffff, // U+22F0...U+22FF
    0xffff, // U+2300...U+230F
    0xffff, // U+2310...U+231F
    0xffff, // U+2320...U+232F
    0xffff, // U+2330...U+233F
    0xffff, // U+2340...U+234F
    0xffff, // U+2350...U+235F
    0xffff, // U+2360...U+236F
    0xffff, // U+2370...U+237F
    0xffff, // U+2380...U+238F
    0xffff, // U+2390...U+239F
    0xffff, // U+23A0...U+23AF
    0xffff, // U+23B0...U+23BF
    0xffff, // U+23C0...U+23CF
    0xffff, // U+23D0...U+23DF
    0xffff, // U+23E0...U+23EF
    0xffff, // U+23F0...U+23FF
    0xffff, // U+2400...U+240F
    0xffff, // U+2410...U+241F
    0x007f, // U+2420...U+242F
    0x07ff, // U+2440...U+244F
    0xf000, // U+2490...U+249F
    0xffff, // U+24A0...U+24AF
    0xffff, // U+24B0...U+24BF
    0xffff, // U+24C0...U+24CF
    0xffff, // U+24D0...U+24DF
    0x03ff, // U+24E0...U+24EF
    0xffff, // U+2500...U+250F
    0xffff, // U+2510...U+251F
    0xffff, // U+2520...U+252F
    0xffff, // U+2530...U+253F
    0xffff, // U+2540...U+254F
    0xffff, // U+2550...U+255F
    0xffff, // U+2560...U+256F
    0xffff, // U+2570...U+257F
    0xffff, // U+2580...U+258F
    0xffff, // U+2590...U+259F
    0xffff, // U+25A0...U+25AF
    0xffff, // U+25B0...U+25BF
    0xffff, // U+25C0...U+25CF
    0xffff, // U+25D0...U+25DF
    0xffff, // U+25E0...U+25EF
    0xffff, // U+25F0...U+25FF
    0xffff, // U+2600...U+260F
    0xffff, // U+2610...U+261F
    0xffff, // U+2620...U+262F
    0xffff, // U+2630...U+263F
    0xffff, // U+2640...U+264F
    0xffff, // U+2650...U+265F
    0xffff, // U+2660...U+266F
    0xffff, // U+2670...U+267F
    0xffff, // U+2680...U+268F
    0xffff, // U+2690...U+269F
    0xffff, // U+26A0...U+26AF
    0xffff, // U+26B0...U+26BF
    0xffff, // U+26C0...U+26CF
    0xffff, // U+26D0...U+26DF
    0xffff, // U+26E0...U+26EF
    0xffff, // U+26F0...U+26FF
    0xffff, // U+2700...U+270F
    0xffff, // U+2710...U+271F
    0xffff, // U+2720...U+272F
    0xffff, // U+2730...U+273F
    0xffff, // U+2740...U+274F
    0xffff, // U+2750...U+275F
    0xffff, // U+2760...U+276F
    0x003f, // U+2770...U+277F
    0xfff0, // U+2790...U+279F
    0xffff, // U+27A0...U+27AF
    0xffff, // U+27B0...U+27BF
    0xffff, // U+27C0...U+27CF
    0xffff, // U+27D0...U+27DF
    0xffff, // U+27E0...U+27EF
    0xffff, // U+27F0...U+27FF
    0xffff, // U+2800...U+280F
    0xffff, // U+2810...U+281F
    0xffff, // U+2820...U+282F
    0xffff, // U+2830...U+283F
    0xffff, // U+2840...U+284F
    0xffff, // U+2850...U+285F
    0xffff, // U+2860...U+286F
    0xffff, // U+2870...U+287F
    0xffff, // U+2880...U+288F
    0xffff, // U+2890...U+289F
    0xffff, // U+28A0...U+28AF
    0xffff, // U+28B0...U+28BF
    0xffff, // U+28C0...U+28CF
    0xffff, // U+28D0...U+28DF
    0xffff, // U+28E0...U+28EF
    0xffff, // U+28F0...U+28FF
    0xffff, // U+2900...U+290F
    0xffff, // U+2910...U+291F
    0xffff, // U+2920...U+292F
    0xffff, // U+2930...U+293F
    0xffff, // U+2940...U+294F
    0xffff, // U+2950...U+295F
    0xffff, // U+2960...U+296F
    0xffff, // U+2970...U+297F
    0xffff, // U+2980...U+298F
    0xffff, // U+2990...U+299F
    0xffff, // U+29A0...U+29AF
    0xffff, // U+29B0...U+29BF
    0xffff, // U+29C0...U+29CF
    0xffff, // U+29D0...U+29DF
    0xffff, // U+29E0...U+29EF
    0xffff, // U+29F0...U+29FF
    0xffff, // U+2A00...U+2A0F
    0xffff, // U+2A10...U+2A1F
    0xffff, // U+2A20...U+2A2F
    0xffff, // U+2A30...U+2A3F
    0xffff, // U+2A40...U+2A4F
    0xffff, // U+2A50...U+2A5F
    0xffff, // U+2A60...U+2A6F
    0xffff, // U+2A70...U+2A7F
    0xffff, // U+2A80...U+2A8F
    0xffff, // U+2A90...U+2A9F
    0xffff, // U+2AA0...U+2AAF
    0xffff, // U+2AB0...U+2ABF
    0xffff, // U+2AC0...U+2ACF
    0xffff, // U+2AD0...U+2ADF
    0xffff, // U+2AE0...U+2AEF
    0xffff, // U+2AF0...U+2AFF
    0xffff, // U+2B00...U+2B0F
    0xffff, // U+2B10...U+2B1F
    0xffff, // U+2B20...U+2B2F
    0xffff, // U+2B30...U+2B3F
    0xffff, // U+2B40...U+2B4F
    0xffff, // U+2B50...U+2B5F
    0xffff, // U+2B60...U+2B6F
    0xffcf, // U+2B70...U+2B7F
    0xffff, // U+2B80...U+2B8F
    0xffbf, // U+2B90...U+2B9F
    0xffff, // U+2BA0...U+2BAF
    0xffff, // U+2BB0...U+2BBF
    0xffff, // U+2BC0...U+2BCF
    0xffff, // U+2BD0...U+2BDF
    0xffff, // U+2BE0...U+2BEF
    0xffff, // U+2BF0...U+2BFF
    0x07e0, // U+2CE0...U+2CEF
    0xde00, // U+2CF0...U+2CFF
    0x0001, // U+2D70...U+2D7F
    0xffff, // U+2E00...U+2E0F
    0xffff, // U+2E10...U+2E1F
    0x7fff, // U+2E20...U+2E2F
    0xffff, // U+2E30...U+2E3F
    0xffff, // U+2E40...U+2E4F
    0x3fff, // U+2E50...U+2E5F
    0xffff, // U+2E80...U+2E8F
    0xfbff, // U+2E90...U+2E9F
    0xffff, // U+2EA0...U+2EAF
    0xffff, // U+2EB0...U+2EBF
    0xffff, // U+2EC0...U+2ECF
    0xffff, // U+2ED0...U+2EDF
    0xffff, // U+2EE0...U+2EEF
    0x000f, // U+2EF0...U+2EFF
    0xffff, // U+2F00...U+2F0F
    0xffff, // U+2F10...U+2F1F
    0xffff, // U+2F20...U+2F2F
    0xffff, // U+2F30...U+2F3F
    0xffff, // U+2F40...U+2F4F
    0xffff, // U+2F50...U+2F5F
    0xffff, // U+2F60...U+2F6F
    0xffff, // U+2F70...U+2F7F
    0xffff, // U+2F80...U+2F8F
    0xffff, // U+2F90...U+2F9F
    0xffff, // U+2FA0...U+2FAF
    0xffff, // U+2FB0...U+2FBF
    0xffff, // U+2FC0...U+2FCF
    0x003f, // U+2FD0...U+2FDF
    0xffff, // U+2FF0...U+2FFF
    0xff1e, // U+3000...U+300F
    0xffff, // U+3010...U+301F
    0x0001, // U+3020...U+302F
    0xe0c1, // U+3030...U+303F
    0x1800, // U+3090...U+309F
    0x0001, // U+30A0...U+30AF
    0x0800, // U+30F0...U+30FF
    0xffc3, // U+3190...U+319F
    0xffff, // U+31C0...U+31CF
    0xffff, // U+31D0...U+31DF
    0x800f, // U+31E0...U+31EF
    0xffff, // U+3200...U+320F
    0x7fff, // U+3210...U+321F
    0xfc00, // U+3220...U+322F
    0xffff, // U+3230...U+323F
    0x00ff, // U+3240...U+324F
    0x0001, // U+3250...U+325F
    0xffff, // U+3260...U+326F
    0xffff, // U+3270...U+327F
    0xfc00, // U+3280...U+328F
    0xffff, // U+3290...U+329F
    0xffff, // U+32A0...U+32AF
    0x0001, // U+32B0...U+32BF
    0xffff, // U+32C0...U+32CF
    0xffff, // U+32D0...U+32DF
    0xffff, // U+32E0...U+32EF
    0xffff, // U+32F0...U+32FF
    0xffff, // U+3300...U+330F
    0xffff, // U+3310...U+331F
    0xffff, // U+3320...U+332F
    0xffff, // U+3330...U+333F
    0xffff, // U+3340...U+334F
    0xffff, // U+3350...U+335F
    0xffff, // U+3360...U+336F
    0xffff, // U+3370...U+337F
    0xffff, // U+3380...U+338F
    0xffff, // U+3390...U+339F
    0xffff, // U+33A0...U+33AF
    0xffff, // U+33B0...U+33BF
    0xffff, // U+33C0...U+33CF
    0xffff, // U+33D0...U+33DF
    0xffff, // U+33E0...U+33EF
    0xffff, // U+33F0...U+33FF
    0xffff, // U+4DC0...U+4DCF
    0xffff, // U+4DD0...U+4DDF
    0xffff, // U+4DE0...U+4DEF
    0xffff, // U+4DF0...U+4DFF
    0xffff, // U+A490...U+A49F
    0xffff, // U+A4A0...U+A4AF
    0xffff, // U+A4B0...U+A4BF
    0x007f, // U+A4C0...U+A4CF
    0xc000, // U+A4F0...U+A4FF
    0xe000, // U+A600...U+A60F
    0x4008, // U+A670...U+A67F
    0x00fc, // U+A6F0...U+A6FF
    0xffff, // U+A700...U+A70F
    0x007f, // U+A710...U+A71F
    0x0003, // U+A720...U+A72F
    0x0600, // U+A780...U+A78F
    0x0f00, // U+A820...U+A82F
    0x03c0, // U+A830...U+A83F
    0x00f0, // U+A870...U+A87F
    0xc000, // U+A8C0...U+A8CF
    0x1700, // U+A8F0...U+A8FF
    0xc000, // U+A920...U+A92F
    0x8000, // U+A950...U+A95F
    0x3ffe, // U+A9C0...U+A9CF
    0xc000, // U+A9D0...U+A9DF
    0xf000, // U+AA50...U+AA5F
    0x0380, // U+AA70...U+AA7F
    0xc000, // U+AAD0...U+AADF
    0x0003, // U+AAF0...U+AAFF
    0x0800, // U+AB50...U+AB5F
    0x0c00, // U+AB60...U+AB6F
    0x0800, // U+ABE0...U+ABEF
    0x0200, // U+FB20...U+FB2F
    0xfffc, // U+FBB0...U+FBBF
    0x0007, // U+FBC0...U+FBCF
    0xc000, // U+FD30...U+FD3F
    0xffff, // U+FD40...U+FD4F
    0x8000, // U+FDC0...U+FDCF
    0xf000, // U+FDF0...U+FDFF
    0x03ff, // U+FE10...U+FE1F
    0xffff, // U+FE30...U+FE3F
    0xffff, // U+FE40...U+FE4F
    0xfff7, // U+FE50...U+FE5F
    0x0f7f, // U+FE60...U+FE6F
    0xfffe, // U+FF00...U+FF0F
    0xfc00, // U+FF10...U+FF1F
    0x0001, // U+FF20...U+FF2F
    0xf800, // U+FF30...U+FF3F
    0x0001, // U+FF40...U+FF4F
    0xf800, // U+FF50...U+FF5F
    0x003f, // U+FF60...U+FF6F
    0x7f7f, // U+FFE0...U+FFEF
    0x3000, // U+FFF0...U+FFFF
    0x0007, // U+10100...U+1010F
    0xff80, // U+10130...U+1013F
    0xfe00, // U+10170...U+1017F
    0x73ff, // U+10180...U+1018F
    0x1fff, // U+10190...U+1019F
    0x0001, // U+101A0...U+101AF
    0xffff, // U+101D0...U+101DF
    0xffff, // U+101E0...U+101EF
    0x1fff, // U+101F0...U+101FF
    0x8000, // U+10390...U+1039F
    0x0001, // U+103D0...U+103DF
    0x8000, // U+10560...U+1056F
    0x0080, // U+10850...U+1085F
    0x0180, // U+10870...U+1087F
    0x8000, // U+10910...U+1091F
    0x8000, // U+10930...U+1093F
    0x01ff, // U+10A50...U+10A5F
    0x8000, // U+10A70...U+10A7F
    0x0100, // U+10AC0...U+10ACF
    0x007f, // U+10AF0...U+10AFF
    0xfe00, // U+10B30...U+10B3F
    0x1e00, // U+10B90...U+10B9F
    0x2000, // U+10EA0...U+10EAF
    0x03e0, // U+10F50...U+10F5F
    0x03c0, // U+10F80...U+10F8F
    0x3f80, // U+11040...U+1104F
    0xd800, // U+110B0...U+110BF
    0x0003, // U+110C0...U+110CF
    0x000f, // U+11140...U+1114F
    0x0030, // U+11170...U+1117F
    0x21e0, // U+111C0...U+111CF
    0xe800, // U+111D0...U+111DF
    0x3f00, // U+11230...U+1123F
    0x0200, // U+112A0...U+112AF
    0xf800, // U+11440...U+1144F
    0x2c00, // U+11450...U+1145F
    0x0040, // U+114C0...U+114CF
    0xfffe, // U+115C0...U+115CF
    0x00ff, // U+115D0...U+115DF
    0x000e, // U+11640...U+1164F
    0x1fff, // U+11660...U+1166F
    0x0200, // U+116B0...U+116BF
    0xf000, // U+11730...U+1173F
    0x0800, // U+11830...U+1183F
    0x0070, // U+11940...U+1194F
    0x0004, // U+119E0...U+119EF
    0x8000, // U+11A30...U+11A3F
    0x007f, // U+11A40...U+11A4F
    0xdc00, // U+11A90...U+11A9F
    0x0007, // U+11AA0...U+11AAF
    0x03ff, // U+11B00...U+11B0F
    0x003e, // U+11C40...U+11C4F
    0x0003, // U+11C70...U+11C7F
    0x0180, // U+11EF0...U+11EFF
    0xfff8, // U+11F40...U+11F4F
    0xffe0, // U+11FD0...U+11FDF
    0xffff, // U+11FE0...U+11FEF
    0x8003, // U+11FF0...U+11FFF
    0x001f, // U+12470...U+1247F
    0x0006, // U+12FF0...U+12FFF
    0xc000, // U+16A60...U+16A6F
    0x0020, // U+16AF0...U+16AFF
    0xff80, // U+16B30...U+16B3F
    0x0030, // U+16B40...U+16B4F
    0x0780, // U+16E90...U+16E9F
    0x0004, // U+16FE0...U+16FEF
    0x9000, // U+1BC90...U+1BC9F
    0xffff, // U+1CF50...U+1CF5F
    0xffff, // U+1CF60...U+1CF6F
    0xffff, // U+1CF70...U+1CF7F
    0xffff, // U+1CF80...U+1CF8F
    0xffff, // U+1CF90...U+1CF9F
    0xffff, // U+1CFA0...U+1CFAF
    0xffff, // U+1CFB0...U+1CFBF
    0x000f, // U+1CFC0...U+1CFCF
    0xffff, // U+1D000...U+1D00F
    0xffff, // U+1D010...U+1D01F
    0xffff, // U+1D020...U+1D02F
    0xffff, // U+1D030...U+1D03F
    0xffff, // U+1D040...U+1D04F
    0xffff, // U+1D050...U+1D05F
    0xffff, // U+1D060...U+1D06F
    0xffff, // U+1D070...U+1D07F
    0xffff, // U+1D080...U+1D08F
    0xffff, // U+1D090...U+1D09F
    0xffff, // U+1D0A0...U+1D0AF
    0xffff, // U+1D0B0...U+1D0BF
    0xffff, // U+1D0C0...U+1D0CF
    0xffff, // U+1D0D0...U+1D0DF
    0xffff, // U+1D0E0...U+1D0EF
    0x003f, // U+1D0F0...U+1D0FF
    0xffff, // U+1D100...U+1D10F
    0xffff, // U+1D110...U+1D11F
    0xfe7f, // U+1D120...U+1D12F
    0xffff, // U+1D130...U+1D13F
    0xffff, // U+1D140...U+1D14F
    0xffff, // U+1D150...U+1D15F
    0x1c1f, // U+1D160...U+1D16F
    0xf018, // U+1D180...U+1D18F
    0xffff, // U+1D190...U+1D19F
    0xc3ff, // U+1D1A0...U+1D1AF
    0xffff, // U+1D1B0...U+1D1BF
    0xffff, // U+1D1C0...U+1D1CF
    0xffff, // U+1D1D0...U+1D1DF
    0x07ff, // U+1D1E0...U+1D1EF
    0xffff, // U+1D200...U+1D20F
    0xffff, // U+1D210...U+1D21F
    0xffff, // U+1D220...U+1D22F
    0xffff, // U+1D230...U+1D23F
    0x0023, // U+1D240...U+1D24F
    0xffff, // U+1D300...U+1D30F
    0xffff, // U+1D310...U+1D31F
    0xffff, // U+1D320...U+1D32F
    0xffff, // U+1D330...U+1D33F
    0xffff, // U+1D340...U+1D34F
    0x007f, // U+1D350...U+1D35F
    0x0002, // U+1D6C0...U+1D6CF
    0x0800, // U+1D6D0...U+1D6DF
    0x0800, // U+1D6F0...U+1D6FF
    0x0020, // U+1D710...U+1D71F
    0x0020, // U+1D730...U+1D73F
    0x8000, // U+1D740...U+1D74F
    0x8000, // U+1D760...U+1D76F
    0x0200, // U+1D780...U+1D78F
    0x0200, // U+1D7A0...U+1D7AF
    0x0008, // U+1D7C0...U+1D7CF
    0xffff, // U+1D800...U+1D80F
    0xffff, // U+1D810...U+1D81F
    0xffff, // U+1D820...U+1D82F
    0xffff, // U+1D830...U+1D83F
    0xffff, // U+1D840...U+1D84F
    0xffff, // U+1D850...U+1D85F
    0xffff, // U+1D860...U+1D86F
    0xffff, // U+1D870...U+1D87F
    0xffff, // U+1D880...U+1D88F
    0xffff, // U+1D890...U+1D89F
    0xffff, // U+1D8A0...U+1D8AF
    0xffff, // U+1D8B0...U+1D8BF
    0xffff, // U+1D8C0...U+1D8CF
    0xffff, // U+1D8D0...U+1D8DF
    0xffff, // U+1D8E0...U+1D8EF
    0xffff, // U+1D8F0...U+1D8FF
    0xffff, // U+1D900...U+1D90F
    0xffff, // U+1D910...U+1D91F
    0xffff, // U+1D920...U+1D92F
    0xffff, // U+1D930...U+1D93F
    0xffff, // U+1D940...U+1D94F
    0xffff, // U+1D950...U+1D95F
    0xffff, // U+1D960...U+1D96F
    0xffff, // U+1D970...U+1D97F
    0xffff, // U+1D980...U+1D98F
    0xffff, // U+1D990...U+1D99F
    0xffff, // U+1D9A0...U+1D9AF
    0xffff, // U+1D9B0...U+1D9BF
    0xffff, // U+1D9C0...U+1D9CF
    0xffff, // U+1D9D0...U+1D9DF
    0xffff, // U+1D9E0...U+1D9EF
    0xffff, // U+1D9F0...U+1D9FF
    0x0780, // U+1DA30...U+1DA3F
    0xe000, // U+1DA60...U+1DA6F
    0xffdf, // U+1DA70...U+1DA7F
    0x0fef, // U+1DA80...U+1DA8F
    0x8000, // U+1E140...U+1E14F
    0x8000, // U+1E2F0...U+1E2FF
    0xc000, // U+1E950...U+1E95F
    0x1000, // U+1ECA0...U+1ECAF
    0x0001, // U+1ECB0...U+1ECBF
    0x4000, // U+1ED20...U+1ED2F
    0x0003, // U+1EEF0...U+1EEFF
    0xffff, // U+1F000...U+1F00F
    0xffff, // U+1F010...U+1F01F
    0x0fff, // U+1F020...U+1F02F
    0xffff, // U+1F030...U+1F03F
    0xffff, // U+1F040...U+1F04F
    0xffff, // U+1F050...U+1F05F
    0xffff, // U+1F060...U+1F06F
    0xffff, // U+1F070...U+1F07F
    0xffff, // U+1F080...U+1F08F
    0x000f, // U+1F090...U+1F09F
    0x7fff, // U+1F0A0...U+1F0AF
    0xfffe, // U+1F0B0...U+1F0BF
    0xfffe, // U+1F0C0...U+1F0CF
    0xfffe, // U+1F0D0...U+1F0DF
    0xffff, // U+1F0E0...U+1F0EF
    0x003f, // U+1F0F0...U+1F0FF
    0xe000, // U+1F100...U+1F10F
    0xffff, // U+1F110...U+1F11F
    0xffff, // U+1F120...U+1F12F
    0xffff, // U+1F130...U+1F13F
    0xffff, // U+1F140...U+1F14F
    0xffff, // U+1F150...U+1F15F
    0xffff, // U+1F160...U+1F16F
    0xffff, // U+1F170...U+1F17F
    0xffff, // U+1F180...U+1F18F
    0xffff, // U+1F190...U+1F19F
    0x3fff, // U+1F1A0...U+1F1AF
    0xffc0, // U+1F1E0...U+1F1EF
    0xffff, // U+1F1F0...U+1F1FF
    0x0007, // U+1F200...U+1F20F
    0xffff, // U+1F210...U+1F21F
    0xffff, // U+1F220...U+1F22F
    0x0fff, // U+1F230...U+1F23F
    0x01ff, // U+1F240...U+1F24F
    0x0003, // U+1F250...U+1F25F
    0x003f, // U+1F260...U+1F26F
    0xffff, // U+1F300...U+1F30F
    0xffff, // U+1F310...U+1F31F
    0xffff, // U+1F320...U+1F32F
    0xffff, // U+1F330...U+1F33F
    0xffff, // U+1F340...U+1F34F
    0xffff, // U+1F350...U+1F35F
    0xffff, // U+1F360...U+1F36F
    0xffff, // U+1F370...U+1F37F
    0xffff, // U+1F380...U+1F38F
    0xffff, // U+1F390...U+1F39F
    0xffff, // U+1F3A0...U+1F3AF
    0xffff, // U+1F3B0...U+1F3BF
    0xffff, // U+1F3C0...U+1F3CF
    0xffff, // U+1F3D0...U+1F3DF
    0xffff, // U+1F3E0...U+1F3EF
    0xffff, // U+1F3F0...U+1F3FF
    0xffff, // U+1F400...U+1F40F
    0xffff, // U+1F410...U+1F41F
    0xffff, // U+1F420...U+1F42F
    0xffff, // U+1F430...U+1F43F
    0xffff, // U+1F440...U+1F44F
    0xffff, // U+1F450...U+1F45F
    0xffff, // U+1F460...U+1F46F
    0xffff, // U+1F470...U+1F47F
    0xffff, // U+1F480...U+1F48F
    0xffff, // U+1F490...U+1F49F
    0xffff, // U+1F4A0...U+1F4AF
    0xffff, // U+1F4B0...U+1F4BF
    0xffff, // U+1F4C0...U+1F4CF
    0xffff, // U+1F4D0...U+1F4DF
    0xffff, // U+1F4E0...U+1F4EF
    0xffff, // U+1F4F0...U+1F4FF
    0xffff, // U+1F500...U+1F50F
    0xffff, // U+1F510...U+1F51F
    0xffff, // U+1F520...U+1F52F
    0xffff, // U+1F530...U+1F53F
    0xffff, // U+1F540...U+1F54F
    0xffff, // U+1F550...U+1F55F
    0xffff, // U+1F560...U+1F56F
    0xffff, // U+1F570...U+1F57F
    0xffff, // U+1F580...U+1F58F
    0xffff, // U+1F590...U+1F59F
    0xffff, // U+1F5A0...U+1F5AF
    0xffff, // U+1F5B0...U+1F5BF
    0xffff, // U+1F5C0...U+1F5CF
    0xffff, // U+1F5D0...U+1F5DF
    0xffff, // U+1F5E0...U+1F5EF
    0xffff, // U+1F5F0...U+1F5FF
    0xffff, // U+1F600...U+1F60F
    0xffff, // U+1F610...U+1F61F
    0xffff, // U+1F620...U+1F62F
    0xffff, // U+1F630...U+1F63F
    0xffff, // U+1F640...U+1F64F
    0xffff, // U+1F650...U+1F65F
    0xffff, // U+1F660...U+1F66F
    0xffff, // U+1F670...U+1F67F
    0xffff, // U+1F680...U+1F68F
    0xffff, // U+1F690...U+1F69F
    0xffff, // U+1F6A0...U+1F6AF
    0xffff, // U+1F6B0...U+1F6BF
    0xffff, // U+1F6C0...U+1F6CF
    0xf0ff, // U+1F6D0...U+1F6DF
    0x1fff, // U+1F6E0...U+1F6EF
    0x1fff, // U+1F6F0...U+1F6FF
    0xffff, // U+1F700...U+1F70F
    0xffff, // U+1F710...U+1F71F
    0xffff, // U+1F720...U+1F72F
    0xffff, // U+1F730...U+1F73F
    0xffff, // U+1F740...U+1F74F
    0xffff, // U+1F750...U+1F75F
    0xffff, // U+1F760...U+1F76F
    0xf87f, // U+1F770...U+1F77F
    0xffff, // U+1F780...U+1F78F
    0xffff, // U+1F790...U+1F79F
    0xffff, // U+1F7A0...U+1F7AF
    0xffff, // U+1F7B0...U+1F7BF
    0xffff, // U+1F7C0...U+1F7CF
    0x03ff, // U+1F7D0...U+1F7DF
    0x0fff, // U+1F7E0...U+1F7EF
    0x0001, // U+1F7F0...U+1F7FF
    0x0fff, // U+1F800...U+1F80F
    0xffff, // U+1F810...U+1F81F
    0xffff, // U+1F820...U+1F82F
    0xffff, // U+1F830...U+1F83F
    0x00ff, // U+1F840...U+1F84F
    0x03ff, // U+1F850...U+1F85F
    0xffff, // U+1F860...U+1F86F
    0xffff, // U+1F870...U+1F87F
    0x00ff, // U+1F880...U+1F88F
    0xffff, // U+1F890...U+1F89F
    0x3fff, // U+1F8A0...U+1F8AF
    0x0003, // U+1F8B0...U+1F8BF
    0xffff, // U+1F900...U+1F90F
    0xffff, // U+1F910...U+1F91F
    0xffff, // U+1F920...U+1F92F
    0xffff, // U+1F930...U+1F93F
    0xffff, // U+1F940...U+1F94F
    0xffff, // U+1F950...U+1F95F
    0xffff, // U+1F960...U+1F96F
    0xffff, // U+1F970...U+1F97F
    0xffff, // U+1F980...U+1F98F
    0xffff, // U+1F990...U+1F99F
    0xffff, // U+1F9A0...U+1F9AF
    0xffff, // U+1F9B0...U+1F9BF
    0xffff, // U+1F9C0...U+1F9CF
    0xffff, // U+1F9D0...U+1F9DF
    0xffff, // U+1F9E0...U+1F9EF
    0xffff, // U+1F9F0...U+1F9FF
    0xffff, // U+1FA00...U+1FA0F
    0xffff, // U+1FA10...U+1FA1F
    0xffff, // U+1FA20...U+1FA2F
    0xffff, // U+1FA30...U+1FA3F
    0xffff, // U+1FA40...U+1FA4F
    0x000f, // U+1FA50...U+1FA5F
    0x3fff, // U+1FA60...U+1FA6F
    0x1fff, // U+1FA70...U+1FA7F
    0x01ff, // U+1FA80...U+1FA8F
    0xffff, // U+1FA90...U+1FA9F
    0xffff, // U+1FAA0...U+1FAAF
    0xbfff, // U+1FAB0...U+1FABF
    0xc03f, // U+1FAC0...U+1FACF
    0x0fff, // U+1FAD0...U+1FADF
    0x01ff, // U+1FAE0...U+1FAEF
    0x01ff, // U+1FAF0...U+1FAFF
    0xffff, // U+1FB00...U+1FB0F
    0xffff, // U+1FB10...U+1FB1F
    0xffff, // U+1FB20...U+1FB2F
    0xffff, // U+1FB30...U+1FB3F
    0xffff, // U+1FB40...U+1FB4F
    0xffff, // U+1FB50...U+1FB5F
    0xffff, // U+1FB60...U+1FB6F
    0xffff, // U+1FB70...U+1FB7F
    0xffff, // U+1FB80...U+1FB8F
    0xfff7, // U+1FB90...U+1FB9F
    0xffff, // U+1FBA0...U+1FBAF
    0xffff, // U+1FBB0...U+1FBBF
    0x07ff, // U+1FBC0...U+1FBCF
];

pub(crate) fn is_ascii_punctuation(c: u8) -> bool {
    c < 128 && (PUNCT_MASKS_ASCII[(c / 16) as usize] & (1 << (c & 15))) != 0
}

pub(crate) fn is_punctuation(c: char) -> bool {
    let cp = c as u32;
    if cp < 128 {
        return is_ascii_punctuation(cp as u8);
    }
    if cp > 0x1FBCA {
        return false;
    }
    let high = (cp / 16) as u16;
    match PUNCT_TAB.binary_search(&high) {
        Ok(index) => (PUNCT_MASKS[index] & (1 << (cp & 15))) != 0,
        _ => false,
    }
}

#[cfg(test)]
mod tests {
    use super::{is_ascii_punctuation, is_punctuation};

    #[test]
    fn test_ascii() {
        assert!(is_ascii_punctuation(b'!'));
        assert!(is_ascii_punctuation(b'@'));
        assert!(is_ascii_punctuation(b'~'));
        assert!(!is_ascii_punctuation(b' '));
        assert!(!is_ascii_punctuation(b'0'));
        assert!(!is_ascii_punctuation(b'A'));
        assert!(!is_ascii_punctuation(0xA1));
    }

    #[test]
    fn test_unicode() {
        assert!(is_punctuation('~'));
        assert!(!is_punctuation(' '));

        assert!(is_punctuation('\u{00A1}'));
        assert!(is_punctuation('\u{060C}'));
        assert!(is_punctuation('\u{FF65}'));
        assert!(is_punctuation('\u{1BC9F}'));
        assert!(!is_punctuation('\u{1BCA0}'));
    }
}