makepad-rustybuzz 0.8.0

A complete harfbuzz shaping algorithm port to Rust.
Documentation
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
// WARNING: this file was generated by ../scripts/gen-universal-table.py

use super::universal::{Category, category::*};

const USE_TABLE: &[Category] = &[


  /* Basic Latin */
                                                                         O,     O,     O,     O,     O,    GB,     O,     O,
  /* 0030 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,

  /* Latin-1 Supplement */

  /* 00A0 */    GB,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 00B0 */     O,     O, FMPST, FMPST,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 00C0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 00D0 */     O,     O,     O,     O,     O,     O,     O,    GB,

  /* Combining Diacritical Marks */
                                                                         O,     O,     O,     O,     O,     O,     O,   CGJ,

  /* Devanagari */

  /* 0900 */ VMABV, VMABV, VMABV, VMPST,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0910 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0920 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0930 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VABV,  VPST, CMBLW,     B,  VPST,  VPRE,
  /* 0940 */  VPST,  VBLW,  VBLW,  VBLW,  VBLW,  VABV,  VABV,  VABV,  VABV,  VPST,  VPST,  VPST,  VPST,     H,  VPRE,  VPST,
  /* 0950 */     O, VMABV, VMBLW,     O,     O,  VABV,  VBLW,  VBLW,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0960 */     B,     B,  VBLW,  VBLW,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0970 */     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,

  /* Bengali */

  /* 0980 */    GB, VMABV, VMPST, VMPST,     O,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     B,
  /* 0990 */     B,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 09A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
  /* 09B0 */     B,     O,     B,     O,     O,     O,     B,     B,     B,     B,     O,     O, CMBLW,     B,  VPST,  VPRE,
  /* 09C0 */  VPST,  VBLW,  VBLW,  VBLW,  VBLW,     O,     O,  VPRE,  VPRE,     O,     O,  VPST,  VPST,     H,   IND,     O,
  /* 09D0 */     O,     O,     O,     O,     O,     O,     O,  VPST,     O,     O,     O,     O,     B,     B,     O,     B,
  /* 09E0 */     B,     B,  VBLW,  VBLW,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 09F0 */     B,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     B,     O, FMABV,     O,

  /* Gurmukhi */

  /* 0A00 */     O, VMABV, VMABV, VMPST,     O,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     B,
  /* 0A10 */     B,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0A20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
  /* 0A30 */     B,     O,     B,     B,     O,     B,     B,     O,     B,     B,     O,     O, CMBLW,     O,  VPST,  VPRE,
  /* 0A40 */  VPST,  VBLW,  VBLW,     O,     O,     O,     O,  VABV,  VABV,     O,     O,  VABV,  VABV,     H,     O,     O,
  /* 0A50 */     O, VMBLW,     O,     O,     O,     O,     O,     O,     O,     B,     B,     B,     B,     O,     B,     O,
  /* 0A60 */     O,     O,     O,     O,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0A70 */ VMABV, CMABV,    GB,    GB,     O,  MBLW,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Gujarati */

  /* 0A80 */     O, VMABV, VMABV, VMPST,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,
  /* 0A90 */     B,     B,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0AA0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
  /* 0AB0 */     B,     O,     B,     B,     O,     B,     B,     B,     B,     B,     O,     O, CMBLW,     B,  VPST,  VPRE,
  /* 0AC0 */  VPST,  VBLW,  VBLW,  VBLW,  VBLW,  VABV,     O,  VABV,  VABV,  VABV,     O,  VPST,  VPST,     H,     O,     O,
  /* 0AD0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 0AE0 */     B,     B,  VBLW,  VBLW,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0AF0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     B, VMABV, VMABV, VMABV, CMABV, CMABV, CMABV,

  /* Oriya */

  /* 0B00 */     O, VMABV, VMPST, VMPST,     O,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     B,
  /* 0B10 */     B,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0B20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
  /* 0B30 */     B,     O,     B,     B,     O,     B,     B,     B,     B,     B,     O,     O, CMBLW,     B,  VPST,  VABV,
  /* 0B40 */  VPST,  VBLW,  VBLW,  VBLW,  VBLW,     O,     O,  VPRE,  VPST,     O,     O,  VPST,  VPST,     H,     O,     O,
  /* 0B50 */     O,     O,     O,     O,     O,     O,  VABV,  VABV,     O,     O,     O,     O,     B,     B,     O,     B,
  /* 0B60 */     B,     B,  VBLW,  VBLW,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0B70 */     O,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Tamil */

  /* 0B80 */     O,     O, VMABV,   IND,     O,     B,     B,     B,     B,     B,     B,     O,     O,     O,     B,     B,
  /* 0B90 */     B,     O,     B,     B,     B,     B,     O,     O,     O,     B,     B,     O,     B,     O,     B,     B,
  /* 0BA0 */     O,     O,     O,     B,     B,     O,     O,     O,     B,     B,     B,     O,     O,     O,     B,     B,
  /* 0BB0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,  VPST,  VPST,
  /* 0BC0 */  VABV,  VPST,  VPST,     O,     O,     O,  VPRE,  VPRE,  VPRE,     O,  VPST,  VPST,  VPST,     H,     O,     O,
  /* 0BD0 */     O,     O,     O,     O,     O,     O,     O,  VPST,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 0BE0 */     O,     O,     O,     O,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0BF0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Telugu */

  /* 0C00 */ VMABV, VMPST, VMPST, VMPST, VMABV,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,
  /* 0C10 */     B,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0C20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
  /* 0C30 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     B,  VABV,  VABV,
  /* 0C40 */  VABV,  VPST,  VPST,  VPST,  VPST,     O,  VABV,  VABV,  VABV,     O,  VABV,  VABV,  VABV,     H,     O,     O,
  /* 0C50 */     O,     O,     O,     O,     O,  VABV,  VBLW,     O,     B,     B,     B,     O,     O,     O,     O,     O,
  /* 0C60 */     B,     B,  VBLW,  VBLW,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0C70 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Kannada */

  /* 0C80 */     B, VMABV, VMPST, VMPST,     O,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,
  /* 0C90 */     B,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0CA0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
  /* 0CB0 */     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     O,     O, CMBLW,     B,  VPST,  VABV,
  /* 0CC0 */  VABV,  VPST,  VPST,  VPST,  VPST,     O,  VABV,  VABV,  VABV,     O,  VABV,  VABV,  VABV,     H,     O,     O,
  /* 0CD0 */     O,     O,     O,     O,     O,  VPST,  VPST,     O,     O,     O,     O,     O,     O,     O,     B,     O,
  /* 0CE0 */     B,     B,  VBLW,  VBLW,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0CF0 */     O,    CS,    CS,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Malayalam */

  /* 0D00 */ VMABV, VMABV, VMPST, VMPST,     O,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,
  /* 0D10 */     B,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0D20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0D30 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VABV,  VABV,     B,  VPST,  VPST,
  /* 0D40 */  VPST,  VPST,  VPST,  VBLW,  VBLW,     O,  VPRE,  VPRE,  VPRE,     O,  VPST,  VPST,  VPST,     H,     R,     O,
  /* 0D50 */     O,     O,     O,     O,   IND,   IND,   IND,  VPST,     O,     O,     O,     O,     O,     O,     O,     B,
  /* 0D60 */     B,     B,  VBLW,  VBLW,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0D70 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,   IND,   IND,   IND,   IND,   IND,   IND,

  /* Sinhala */

  /* 0D80 */     O,     O, VMPST, VMPST,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0D90 */     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     B,     B,     B,     B,     B,     B,
  /* 0DA0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0DB0 */     B,     B,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     O,     O,
  /* 0DC0 */     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     H,     O,     O,     O,     O,  VPST,
  /* 0DD0 */  VPST,  VPST,  VABV,  VABV,  VBLW,     O,  VBLW,     O,  VPST,  VPRE,  VPST,  VPRE,  VPST,  VPST,  VPST,  VPST,
  /* 0DE0 */     O,     O,     O,     O,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0DF0 */     O,     O,  VPST,  VPST,     O,     O,     O,     O,

  /* Tibetan */
                                                                      VBLW,  VBLW,     O,     O,     O,     O,     O,     O,
  /* 0F20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0F30 */     B,     B,     B,     B,     O, FMBLW,     O, FMBLW,     O, CMABV,     O,     O,     O,     O,  VPST,  VPRE,
  /* 0F40 */     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,     B,
  /* 0F50 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 0F60 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,
  /* 0F70 */     O,  VBLW,  VBLW,  VABV,  VBLW,  VBLW,  VABV,  VABV,  VABV,  VABV,  VBLW,  VBLW,  VBLW,  VBLW, VMABV, VMPST,
  /* 0F80 */  VBLW,  VABV, VMABV, VMABV,  VBLW,   IND, VMABV, VMABV,     B,     B,     B,     B,     B,   SUB,   SUB,   SUB,
  /* 0F90 */   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,     O,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,
  /* 0FA0 */   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,
  /* 0FB0 */   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,     O,     O,     O,
  /* 0FC0 */     O,     O,     O,     O,     O,     O, FMBLW,     O,

  /* Myanmar */

  /* 1000 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1010 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1020 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VPST,  VPST,  VABV,  VABV,  VBLW,
  /* 1030 */  VBLW,  VPRE,  VABV,  VABV,  VABV,  VABV, VMABV, VMBLW, VMPST,     H,  VABV,  MPST,  MPRE,  MBLW,  MBLW,     B,
  /* 1040 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,    GB,     O,     O,    GB,     O,
  /* 1050 */     B,     B,     B,     B,     B,     B,  VPST,  VPST,  VBLW,  VBLW,     B,     B,     B,     B,  MBLW,  MBLW,
  /* 1060 */  MBLW,     B,  VPST, VMPST, VMPST,     B,     B,  VPST,  VPST, VMPST, VMPST, VMPST, VMPST, VMPST,     B,     B,
  /* 1070 */     B,  VABV,  VABV,  VABV,  VABV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1080 */     B,     B,  MBLW,  VPST,  VPRE,  VABV,  VABV, VMPST, VMPST, VMPST, VMPST, VMPST, VMPST, VMBLW,     B, VMPST,
  /* 1090 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B, VMPST, VMPST,  VPST,  VABV,     O,     O,

  /* Tagalog */

  /* 1700 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,
  /* 1710 */     B,     B,  VABV,  VBLW,  VBLW,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Hanunoo */

  /* 1720 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1730 */     B,     B,  VABV,  VBLW,  VBLW,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Buhid */

  /* 1740 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1750 */     B,     B,  VABV,  VBLW,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Tagbanwa */

  /* 1760 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,
  /* 1770 */     B,     O,  VABV,  VBLW,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Khmer */

  /* 1780 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1790 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 17A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 17B0 */     B,     B,     B,     B,     O,     O,  VPST,  VABV,  VABV,  VABV,  VABV,  VBLW,  VBLW,  VBLW,  VPST,  VPST,
  /* 17C0 */  VPST,  VPRE,  VPRE,  VPRE,  VPST,  VPST, VMABV, VMPST,  VPST, VMABV, VMABV, FMABV,  FABV, CMABV, FMABV, FMABV,
  /* 17D0 */ FMABV,  VABV,     H, FMABV,     O,     O,     O,     O,     O,     O,     O,     O,     B, FMABV,     O,     O,
  /* 17E0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,

  /* Limbu */

  /* 1900 */    GB,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1910 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,
  /* 1920 */  VABV,  VABV,  VBLW,  VPST,  VPST,  VABV,  VABV,  VABV,  VABV,   SUB,   SUB,   SUB,     O,     O,     O,     O,
  /* 1930 */  FPST,  FPST, VMBLW,  FPST,  FPST,  FPST,  FPST,  FPST,  FPST,  FBLW,  VABV, FMBLW,     O,     O,     O,     O,
  /* 1940 */     O,     O,     O,     O,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,

  /* Tai Le */

  /* 1950 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1960 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,
  /* 1970 */     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* New Tai Lue */

  /* 1980 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1990 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 19A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,
  /* 19B0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 19C0 */     B,     B,     B,     B,     B,     B,     B,     B, VMPST, VMPST,     O,     O,     O,     O,     O,     O,
  /* 19D0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,
  /* 19E0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 19F0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Buginese */

  /* 1A00 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1A10 */     B,     B,     B,     B,     B,     B,     B,  VABV,  VBLW,  VPRE,  VPST,  VABV,     O,     O,     O,     O,

  /* Tai Tham */

  /* 1A20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1A30 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1A40 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1A50 */     B,     B,     B,     B,     B,  MPRE,  MBLW,   SUB,  FABV,  FABV,  MABV,   SUB,   SUB,   SUB,   SUB,     O,
  /* 1A60 */    SK,  VPST,  VABV,  VPST,  VPST,  VABV,  VABV,  VABV,  VABV,  VBLW,  VBLW,  VABV,  VBLW,  VPST,  VPRE,  VPRE,
  /* 1A70 */  VPRE,  VPRE,  VPRE,  VABV, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV,  VABV, FMABV, FMABV,     O,     O, FMBLW,
  /* 1A80 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
  /* 1A90 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,

  /* Balinese */

  /* 1B00 */ VMABV, VMABV, VMABV,  FABV, VMPST,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1B10 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1B20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1B30 */     B,     B,     B,     B, CMABV,  VPST,  VABV,  VABV,  VBLW,  VBLW,  VBLW,  VBLW,  VABV,  VABV,  VPRE,  VPRE,
  /* 1B40 */  VPST,  VPST,  VABV,  VABV,     H,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,
  /* 1B50 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,    GB,    GB,     O,     O,    GB,
  /* 1B60 */     O,     S,    GB,     S,     S,     S,     S,     S,    GB,     S,     S, SMABV, SMBLW, SMABV, SMABV, SMABV,
  /* 1B70 */ SMABV, SMABV, SMABV, SMABV,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Sundanese */

  /* 1B80 */ VMABV,  FABV, VMPST,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1B90 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1BA0 */     B,   SUB,   SUB,   SUB,  VABV,  VBLW,  VPRE,  VPST,  VABV,  VABV,  VPST,     H,   SUB,   SUB,     B,     B,
  /* 1BB0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,

  /* Batak */

  /* 1BC0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1BD0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1BE0 */     B,     B,     B,     B,     B,     B, CMABV,  VPST,  VABV,  VABV,  VPST,  VPST,  VPST,  VABV,  VPST,  VABV,
  /* 1BF0 */  FABV,  FABV, CMBLW, CMBLW,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Lepcha */

  /* 1C00 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1C10 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 1C20 */     B,     B,     B,     B,   SUB,   SUB,  VPST,  VPRE,  VPRE,  VPRE,  VPST,  VPST,  VBLW,  FABV,  FABV,  FABV,
  /* 1C30 */  FABV,  FABV,  FABV,  FABV, VMPRE, VMPRE, FMABV, CMBLW,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 1C40 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     B,     B,     B,

  /* Vedic Extensions */

  /* 1CD0 */ VMABV, VMABV, VMABV,     O, VMBLW, VMBLW, VMBLW, VMBLW, VMBLW, VMBLW, VMABV, VMABV, VMBLW, VMBLW, VMBLW, VMBLW,
  /* 1CE0 */ VMABV, VMPST, VMBLW, VMBLW, VMBLW, VMBLW, VMBLW, VMBLW, VMBLW,     O,     O,     O,     O, VMBLW,     O,     O,
  /* 1CF0 */     O,     O,   IND,   IND, VMABV,    CS,    CS, VMPST, VMABV, VMABV,    GB,     O,     O,     O,     O,     O,

  /* Combining Diacritical Marks Supplement */
                                                                         O,     O,     O, FMABV,     O,     O,     O,     O,

  /* General Punctuation */
                                                                         O,     O,     O,     O,  ZWNJ,   ZWJ,     O,     O,
  /* 2010 */    GB,    GB,    GB,    GB,    GB,     O,     O,     O,
  /* 2060 */    WJ,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Superscripts and Subscripts */

  /* 2070 */     O,     O,     O,     O, FMPST,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 2080 */     O,     O, FMPST, FMPST, FMPST,     O,     O,     O,

  /* Combining Diacritical Marks for Symbols */

  /* 20F0 */ VMABV,     O,     O,     O,     O,     O,     O,     O,

  /* Geometric Shapes */
                                                                         O,     O,     O,     O,    GB,     O,     O,     O,

  /* Syloti Nagri */

  /* A800 */     B,     B,  VABV,     B,     B,     B,     H,     B,     B,     B,     B, VMABV,     B,     B,     B,     B,
  /* A810 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* A820 */     B,     B,     B,  VPST,  VPST,  VBLW,  VABV,  VPST,     O,     O,     O,     O,     O,     O,     O,     O,
  /* A830 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Phags-pa */

  /* A840 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* A850 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* A860 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* A870 */     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Saurashtra */

  /* A880 */ VMPST, VMPST,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* A890 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* A8A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* A8B0 */     B,     B,     B,     B,  MPST,  VPST,  VPST,  VPST,  VPST,  VPST,  VPST,  VPST,  VPST,  VPST,  VPST,  VPST,
  /* A8C0 */  VPST,  VPST,  VPST,  VPST,     H, VMABV,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* A8D0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,

  /* Devanagari Extended */

  /* A8E0 */ VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV,
  /* A8F0 */ VMABV, VMABV,     B,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     B,  VABV,

  /* Kayah Li */

  /* A900 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* A910 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* A920 */     B,     B,     B,     B,     B,     B,  VABV,  VABV,  VABV,  VABV,  VABV, VMBLW, VMBLW, VMBLW,     O,     O,

  /* Rejang */

  /* A930 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* A940 */     B,     B,     B,     B,     B,     B,     B,  VBLW,  VBLW,  VBLW,  VABV,  VBLW,  VBLW,  VBLW,  VBLW,  FABV,
  /* A950 */  FABV,  FABV,  FPST,  VPST,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* A960 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* A970 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Javanese */

  /* A980 */ VMABV, VMABV,  FABV, VMPST,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* A990 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* A9A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* A9B0 */     B,     B,     B, CMABV,  VPST,  VPST,  VABV,  VABV,  VBLW,  VBLW,  VPRE,  VPRE,  VABV,  MBLW,  MPST,  MBLW,
  /* A9C0 */     H,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* A9D0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,

  /* Myanmar Extended-B */

  /* A9E0 */     B,     B,     B,     B,     B,  VABV,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* A9F0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,

  /* Cham */

  /* AA00 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* AA10 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* AA20 */     B,     B,     B,     B,     B,     B,     B,     B,     B, VMABV,  VABV,  VABV,  VABV,  VBLW,  VABV,  VPRE,
  /* AA30 */  VPRE,  VABV,  VBLW,  MPST,  MPRE,  MBLW,  MBLW,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* AA40 */     B,     B,     B,  FABV,     B,     B,     B,     B,     B,     B,     B,     B,  FABV,  FPST,     O,     O,
  /* AA50 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,

  /* Myanmar Extended-A */

  /* AA60 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* AA70 */     O,     B,     B,     B,    GB,    GB,    GB,     O,     O,     O,     B, VMPST, VMABV, VMPST,     B,     B,

  /* Tai Viet */

  /* AA80 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* AA90 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* AAA0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* AAB0 */  VABV,     B,  VABV,  VABV,  VBLW,     B,     B,  VABV,  VABV,     B,     B,     B,     B,     B,  VABV, VMABV,
  /* AAC0 */     B, VMABV,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* AAD0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Meetei Mayek Extensions */

  /* AAE0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VPRE,  VBLW,  VABV,  VPRE,  VPST,
  /* AAF0 */     O,     O,     O,     O,     O, VMPST,     H,     O,

  /* Meetei Mayek */

  /* ABC0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* ABD0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* ABE0 */     B,     B,     B,  VPST,  VPST,  VABV,  VPST,  VPST,  VBLW,  VPST,  VPST,     O, VMPST,  VBLW,     O,     O,
  /* ABF0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,

  /* Variation Selectors */

  /* FE00 */    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,

  /* Kharoshthi */

  /* 10A00 */     B,  VBLW,  VBLW,  VBLW,     O,  VABV,  VBLW,     O,     O,     O,     O,     O,  VBLW,  VBLW, VMBLW, VMABV,
  /* 10A10 */     B,     B,     B,     B,     O,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,     B,
  /* 10A20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 10A30 */     B,     B,     B,     B,     B,     B,     O,     O, CMABV, CMBLW, CMBLW,     O,     O,     O,     O,     H,
  /* 10A40 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,     O,

  /* Brahmi */

  /* 11000 */ VMPST, VMABV, VMPST,    CS,    CS,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11010 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11020 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11030 */     B,     B,     B,     B,     B,     B,     B,     B,  VABV,  VABV,  VABV,  VABV,  VBLW,  VBLW,  VBLW,  VBLW,
  /* 11040 */  VBLW,  VBLW,  VABV,  VABV,  VABV,  VABV,   HVM,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 11050 */     O,     O,     N,     N,     N,     N,     N,     N,     N,     N,     N,     N,     N,     N,     N,     N,
  /* 11060 */     N,     N,     N,     N,     N,     N,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11070 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,    HN,

  /* Kaithi */

  /* 11080 */ VMABV, VMABV, VMPST,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11090 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 110A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 110B0 */  VPST,  VPRE,  VPST,  VBLW,  VBLW,  VABV,  VABV,  VPST,  VPST,     H, CMBLW,     O,     O,     O,     O,     O,

  /* Chakma */

  /* 11100 */ VMABV, VMABV, VMABV,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11110 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11120 */     B,     B,     B,     B,     B,     B,     B,  VBLW,  VBLW,  VBLW,  VABV,  VABV,  VPRE,  VBLW,  VABV,  VABV,
  /* 11130 */  VBLW,  VABV,  VABV,     H, CMBLW,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11140 */     O,     O,     O,     O,     B,  VPST,  VPST,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Mahajani */

  /* 11150 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11160 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11170 */     B,     B,     B, CMBLW,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Sharada */

  /* 11180 */ VMABV, VMABV, VMPST,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11190 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 111A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 111B0 */     B,     B,     B,  VPST,  VPRE,  VPST,  VBLW,  VBLW,  VBLW,  VBLW,  VBLW,  VBLW,  VABV,  VABV,  VABV,  VABV,
  /* 111C0 */     H,     B,     R,     R,     O,     O,     O,     O,    GB, FMBLW, CMBLW,  VABV,  VBLW,     O,     O,     O,
  /* 111D0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,

  /* Sinhala Archaic Numbers */

  /* 111E0 */     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 111F0 */     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Khojki */

  /* 11200 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11210 */     B,     B,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11220 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VPST,  VPST,  VPST,  VBLW,
  /* 11230 */  VABV,  VABV,  VABV,  VABV, VMABV,     H, CMABV, CMABV,     O,     O,     O,     O,     O,     O, VMABV,     O,

  /* Multani */

  /* 11280 */     B,     B,     B,     B,     B,     B,     B,     O,     B,     O,     B,     B,     B,     B,     O,     B,
  /* 11290 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,
  /* 112A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,     O,

  /* Khudawadi */

  /* 112B0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 112C0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 112D0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B, VMABV,
  /* 112E0 */  VPST,  VPRE,  VPST,  VBLW,  VBLW,  VABV,  VABV,  VABV,  VABV, CMBLW,  VBLW,     O,     O,     O,     O,     O,
  /* 112F0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,

  /* Grantha */

  /* 11300 */ VMABV, VMABV, VMABV, VMABV,     O,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     B,
  /* 11310 */     B,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11320 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
  /* 11330 */     B,     O,     B,     B,     O,     B,     B,     B,     B,     B,     O, CMBLW, CMBLW,     B,  VPST,  VPST,
  /* 11340 */  VABV,  VPST,  VPST,  VPST,  VPST,     O,     O,  VPRE,  VPRE,     O,     O,  VPST,  VPST,   HVM,     O,     O,
  /* 11350 */     O,     O,     O,     O,     O,     O,     O,  VPST,     O,     O,     O,     O,     O,     O,     B,     B,
  /* 11360 */     B,     B,  VPST,  VPST,     O,     O, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV,     O,     O,     O,
  /* 11370 */ VMABV, VMABV, VMABV, VMABV, VMABV,     O,     O,     O,

  /* Newa */

  /* 11400 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11410 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11420 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11430 */     B,     B,     B,     B,     B,  VPST,  VPRE,  VPST,  VBLW,  VBLW,  VBLW,  VBLW,  VBLW,  VBLW,  VABV,  VABV,
  /* 11440 */  VPST,  VPST,     H, VMABV, VMABV, VMPST, CMBLW,     B,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 11450 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O, FMABV,     B,
  /* 11460 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 11470 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Tirhuta */

  /* 11480 */     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11490 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 114A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 114B0 */  VPST,  VPRE,  VPST,  VBLW,  VBLW,  VBLW,  VBLW,  VBLW,  VBLW,  VPRE,  VABV,  VPST,  VPST,  VPST,  VPST, VMABV,
  /* 114C0 */ VMABV, VMABV,     H, CMBLW,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 114D0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,

  /* Siddham */

  /* 11580 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11590 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 115A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VPST,
  /* 115B0 */  VPRE,  VPST,  VBLW,  VBLW,  VBLW,  VBLW,     O,     O,  VPRE,  VPST,  VPST,  VPST, VMABV, VMABV, VMPST,     H,
  /* 115C0 */ CMBLW,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 115D0 */     O,     O,     O,     O,     O,     O,     O,     O,     B,     B,     B,     B,  VBLW,  VBLW,     O,     O,
  /* 115E0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 115F0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Modi */

  /* 11600 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11610 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11620 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11630 */  VPST,  VPST,  VPST,  VBLW,  VBLW,  VBLW,  VBLW,  VBLW,  VBLW,  VABV,  VABV,  VPST,  VPST, VMABV, VMPST,     H,
  /* 11640 */  VABV,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 11650 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
  /* 11660 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 11670 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Takri */

  /* 11680 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11690 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 116A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B, VMABV, VMPST,  VABV,  VPRE,  VPST,
  /* 116B0 */  VBLW,  VBLW,  VABV,  VABV,  VABV,  VABV,     H, CMBLW,     B,     O,     O,     O,     O,     O,     O,     O,
  /* 116C0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
  /* 116D0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 116E0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 116F0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Ahom */

  /* 11700 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11710 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,  MBLW,  MPRE,  MABV,
  /* 11720 */  VPST,  VPST,  VABV,  VABV,  VBLW,  VBLW,  VPRE,  VABV,  VBLW,  VABV,  VABV,  VABV,     O,     O,     O,     O,
  /* 11730 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,

  /* Dogra */

  /* 11800 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11810 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11820 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VPST,  VPRE,  VPST,  VBLW,
  /* 11830 */  VBLW,  VBLW,  VBLW,  VABV,  VABV,  VABV,  VABV, VMABV, VMPST,     H, CMBLW,     O,     O,     O,     O,     O,

  /* Nandinagari */

  /* 119A0 */     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     B,     B,     B,     B,     B,     B,
  /* 119B0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 119C0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 119D0 */     B,  VPST,  VPRE,  VPST,  VBLW,  VBLW,  VBLW,  VBLW,     O,     O,  VABV,  VABV,  VPST,  VPST, VMPST, VMPST,
  /* 119E0 */     H,     B,     O,     O,  VPRE,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 119F0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Zanabazar Square */

  /* 11A00 */     B,  VABV,  VBLW,  VBLW,  VABV,  VABV,  VABV,  VABV,  VABV,  VABV,  VBLW,     B,     B,     B,     B,     B,
  /* 11A10 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11A20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11A30 */     B,     B,     B, FMBLW,  VBLW, VMABV, VMABV, VMABV, VMABV, VMPST,     R,  MBLW,  MBLW,  MBLW,  MBLW,    GB,
  /* 11A40 */     O,     O,     O,     O,     O,    GB,     O,     H,     O,     O,     O,     O,     O,     O,     O,     O,

  /* Soyombo */

  /* 11A50 */     B,  VABV,  VBLW,  VBLW,  VABV,  VABV,  VABV,  VPST,  VPST,  VBLW,  VBLW,  VBLW,     B,     B,     B,     B,
  /* 11A60 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11A70 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11A80 */     B,     B,     B,     B,     R,     R,     R,     R,     R,     R,  FBLW,  FBLW,  FBLW,  FBLW,  FBLW,  FBLW,
  /* 11A90 */  FBLW,  FBLW,  FBLW,  FBLW,  FBLW,  FBLW, VMABV, VMPST, CMABV,     H,     O,     O,     O,     B,     O,     O,

  /* Bhaiksuki */

  /* 11C00 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
  /* 11C10 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11C20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VPST,
  /* 11C30 */  VABV,  VABV,  VBLW,  VBLW,  VBLW,  VBLW,  VBLW,     O,  VABV,  VABV,  VABV,  VABV, VMABV, VMABV, VMPST,     H,
  /* 11C40 */     B,     O,     O,     O,    GB,    GB,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 11C50 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11C60 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,

  /* Marchen */

  /* 11C70 */     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11C80 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11C90 */     O,     O,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,
  /* 11CA0 */   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,     O,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,
  /* 11CB0 */  VBLW,  VPRE,  VBLW,  VABV,  VPST, VMABV, VMABV,     O,

  /* Masaram Gondi */

  /* 11D00 */     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     O,     B,     B,     B,     B,     B,
  /* 11D10 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11D20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11D30 */     B,  VABV,  VABV,  VABV,  VABV,  VABV,  VBLW,     O,     O,     O,  VABV,     O,  VABV,  VABV,     O,  VABV,
  /* 11D40 */ VMABV, VMABV, CMBLW,  VABV,  VBLW,     H,     R,  MBLW,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 11D50 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,

  /* Gunjala Gondi */

  /* 11D60 */     B,     B,     B,     B,     B,     B,     O,     B,     B,     O,     B,     B,     B,     B,     B,     B,
  /* 11D70 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11D80 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VPST,  VPST,  VPST,  VPST,  VPST,     O,
  /* 11D90 */  VABV,  VABV,     O,  VPST,  VPST, VMABV, VMPST,     H,     O,     O,     O,     O,     O,     O,     O,     O,
  /* 11DA0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,

  /* Makasar */

  /* 11EE0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
  /* 11EF0 */     B,     B,    GB,  VABV,  VBLW,  VPRE,  VPST,     O,

];

const USE_OFFSET_0X0028: usize = 0;
const USE_OFFSET_0X00A0: usize = 24;
const USE_OFFSET_0X0348: usize = 80;
const USE_OFFSET_0X0900: usize = 88;
const USE_OFFSET_0X0F18: usize = 1360;
const USE_OFFSET_0X1000: usize = 1536;
const USE_OFFSET_0X1700: usize = 1696;
const USE_OFFSET_0X1900: usize = 1936;
const USE_OFFSET_0X1B00: usize = 2352;
const USE_OFFSET_0X1CD0: usize = 2688;
const USE_OFFSET_0X1DF8: usize = 2736;
const USE_OFFSET_0X2008: usize = 2744;
const USE_OFFSET_0X2060: usize = 2760;
const USE_OFFSET_0X20F0: usize = 2800;
const USE_OFFSET_0X25C8: usize = 2808;
const USE_OFFSET_0XA800: usize = 2816;
const USE_OFFSET_0XABC0: usize = 3576;
const USE_OFFSET_0XFE00: usize = 3640;
const USE_OFFSET_0X10A00: usize = 3656;
const USE_OFFSET_0X11000: usize = 3736;
const USE_OFFSET_0X11100: usize = 3928;
const USE_OFFSET_0X11280: usize = 4248;
const USE_OFFSET_0X11400: usize = 4496;
const USE_OFFSET_0X11580: usize = 4720;
const USE_OFFSET_0X11800: usize = 5168;
const USE_OFFSET_0X119A0: usize = 5232;
const USE_OFFSET_0X11C00: usize = 5488;
const USE_OFFSET_0X11D00: usize = 5672;
const USE_OFFSET_0X11EE0: usize = 5848;

pub fn get_category(u: u32) -> Category {
    match u >> 12 {
        0x0 => {
            if (0x0028..=0x003F).contains(&u) { return USE_TABLE[u as usize - 0x0028 + USE_OFFSET_0X0028]; }
            if (0x00A0..=0x00D7).contains(&u) { return USE_TABLE[u as usize - 0x00A0 + USE_OFFSET_0X00A0]; }
            if (0x0348..=0x034F).contains(&u) { return USE_TABLE[u as usize - 0x0348 + USE_OFFSET_0X0348]; }
            if (0x0900..=0x0DF7).contains(&u) { return USE_TABLE[u as usize - 0x0900 + USE_OFFSET_0X0900]; }
            if (0x0F18..=0x0FC7).contains(&u) { return USE_TABLE[u as usize - 0x0F18 + USE_OFFSET_0X0F18]; }
        }
        0x1 => {
            if (0x1000..=0x109F).contains(&u) { return USE_TABLE[u as usize - 0x1000 + USE_OFFSET_0X1000]; }
            if (0x1700..=0x17EF).contains(&u) { return USE_TABLE[u as usize - 0x1700 + USE_OFFSET_0X1700]; }
            if (0x1900..=0x1A9F).contains(&u) { return USE_TABLE[u as usize - 0x1900 + USE_OFFSET_0X1900]; }
            if (0x1B00..=0x1C4F).contains(&u) { return USE_TABLE[u as usize - 0x1B00 + USE_OFFSET_0X1B00]; }
            if (0x1CD0..=0x1CFF).contains(&u) { return USE_TABLE[u as usize - 0x1CD0 + USE_OFFSET_0X1CD0]; }
            if (0x1DF8..=0x1DFF).contains(&u) { return USE_TABLE[u as usize - 0x1DF8 + USE_OFFSET_0X1DF8]; }
        }
        0x2 => {
            if (0x2008..=0x2017).contains(&u) { return USE_TABLE[u as usize - 0x2008 + USE_OFFSET_0X2008]; }
            if (0x2060..=0x2087).contains(&u) { return USE_TABLE[u as usize - 0x2060 + USE_OFFSET_0X2060]; }
            if (0x20F0..=0x20F7).contains(&u) { return USE_TABLE[u as usize - 0x20F0 + USE_OFFSET_0X20F0]; }
            if (0x25C8..=0x25CF).contains(&u) { return USE_TABLE[u as usize - 0x25C8 + USE_OFFSET_0X25C8]; }
        }
        0xA => {
            if (0xA800..=0xAAF7).contains(&u) { return USE_TABLE[u as usize - 0xA800 + USE_OFFSET_0XA800]; }
            if (0xABC0..=0xABFF).contains(&u) { return USE_TABLE[u as usize - 0xABC0 + USE_OFFSET_0XABC0]; }
        }
        0xF => {
            if (0xFE00..=0xFE0F).contains(&u) { return USE_TABLE[u as usize - 0xFE00 + USE_OFFSET_0XFE00]; }
        }
        0x10 => {
            if (0x10A00..=0x10A4F).contains(&u) { return USE_TABLE[u as usize - 0x10A00 + USE_OFFSET_0X10A00]; }
        }
        0x11 => {
            if (0x11000..=0x110BF).contains(&u) { return USE_TABLE[u as usize - 0x11000 + USE_OFFSET_0X11000]; }
            if (0x11100..=0x1123F).contains(&u) { return USE_TABLE[u as usize - 0x11100 + USE_OFFSET_0X11100]; }
            if (0x11280..=0x11377).contains(&u) { return USE_TABLE[u as usize - 0x11280 + USE_OFFSET_0X11280]; }
            if (0x11400..=0x114DF).contains(&u) { return USE_TABLE[u as usize - 0x11400 + USE_OFFSET_0X11400]; }
            if (0x11580..=0x1173F).contains(&u) { return USE_TABLE[u as usize - 0x11580 + USE_OFFSET_0X11580]; }
            if (0x11800..=0x1183F).contains(&u) { return USE_TABLE[u as usize - 0x11800 + USE_OFFSET_0X11800]; }
            if (0x119A0..=0x11A9F).contains(&u) { return USE_TABLE[u as usize - 0x119A0 + USE_OFFSET_0X119A0]; }
            if (0x11C00..=0x11CB7).contains(&u) { return USE_TABLE[u as usize - 0x11C00 + USE_OFFSET_0X11C00]; }
            if (0x11D00..=0x11DAF).contains(&u) { return USE_TABLE[u as usize - 0x11D00 + USE_OFFSET_0X11D00]; }
            if (0x11EE0..=0x11EF7).contains(&u) { return USE_TABLE[u as usize - 0x11EE0 + USE_OFFSET_0X11EE0]; }
        }
        _ => {}
    }

    O
}