skryn 0.0.4

A servo/webrender based Desktop GUI library
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
use self::Script::*;
use harfbuzz_sys::*;

#[allow(non_camel_case_types)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
/// Represents the Unicode character property **Script**.
///
/// http://www.unicode.org/reports/tr24/
pub enum Script {
    Unknown,
    Ahom,
    Anatolian_Hieroglyphs,
    Arabic,
    Armenian,
    Avestan,
    Balinese,
    Bamum,
    Bassa_Vah,
    Batak,
    Bengali,
    Bopomofo,
    Brahmi,
    Braille,
    Buginese,
    Buhid,
    Canadian_Aboriginal,
    Carian,
    Caucasian_Albanian,
    Chakma,
    Cham,
    Cherokee,
    Common,
    Coptic,
    Cuneiform,
    Cypriot,
    Cyrillic,
    Deseret,
    Devanagari,
    Duployan,
    Egyptian_Hieroglyphs,
    Elbasan,
    Ethiopic,
    Georgian,
    Glagolitic,
    Gothic,
    Grantha,
    Greek,
    Gujarati,
    Gurmukhi,
    Han,
    Hangul,
    Hanunoo,
    Hatran,
    Hebrew,
    Hiragana,
    Imperial_Aramaic,
    Inherited,
    Inscriptional_Pahlavi,
    Inscriptional_Parthian,
    Javanese,
    Kaithi,
    Kannada,
    Katakana,
    Kayah_Li,
    Kharoshthi,
    Khmer,
    Khojki,
    Khudawadi,
    Lao,
    Latin,
    Lepcha,
    Limbu,
    Linear_A,
    Linear_B,
    Lisu,
    Lycian,
    Lydian,
    Mahajani,
    Malayalam,
    Mandaic,
    Manichaean,
    Meetei_Mayek,
    Mende_Kikakui,
    Meroitic_Cursive,
    Meroitic_Hieroglyphs,
    Miao,
    Modi,
    Mongolian,
    Mro,
    Multani,
    Myanmar,
    Nabataean,
    New_Tai_Lue,
    Nko,
    Ogham,
    Ol_Chiki,
    Old_Hungarian,
    Old_Italic,
    Old_North_Arabian,
    Old_Permic,
    Old_Persian,
    Old_South_Arabian,
    Old_Turkic,
    Oriya,
    Osmanya,
    Pahawh_Hmong,
    Palmyrene,
    Pau_Cin_Hau,
    Phags_Pa,
    Phoenician,
    Psalter_Pahlavi,
    Rejang,
    Runic,
    Samaritan,
    Saurashtra,
    Sharada,
    Shavian,
    Siddham,
    SignWriting,
    Sinhala,
    Sora_Sompeng,
    Sundanese,
    Syloti_Nagri,
    Syriac,
    Tagalog,
    Tagbanwa,
    Tai_Le,
    Tai_Tham,
    Tai_Viet,
    Takri,
    Tamil,
    Telugu,
    Thaana,
    Thai,
    Tibetan,
    Tifinagh,
    Tirhuta,
    Ugaritic,
    Vai,
    Warang_Citi,
    Yi,
}

fn bsearch_range_value_table(c: char, r: &'static [(char, char, Script)]) -> Script {
    use std::cmp::Ordering::{Equal, Greater, Less};
    match r.binary_search_by(|&(lo, hi, _)| {
        if lo <= c && c <= hi {
            Equal
        } else if hi < c {
            Less
        } else {
            Greater
        }
    }) {
        Ok(idx) => {
            let (_, _, cat) = r[idx];
            cat
        }
        Err(_) => Unknown,
    }
}

/// Find the script of a single char.
pub fn get_script(c: char) -> Script {
    bsearch_range_value_table(c, SCRIPT_TABLE)
}

const SCRIPT_TABLE: &'static [(char, char, Script)] = &[
    ('\u{0}', '\u{40}', Common),
    ('\u{41}', '\u{5a}', Latin),
    ('\u{5b}', '\u{60}', Common),
    ('\u{61}', '\u{7a}', Latin),
    ('\u{7b}', '\u{a9}', Common),
    ('\u{aa}', '\u{aa}', Latin),
    ('\u{ab}', '\u{b9}', Common),
    ('\u{ba}', '\u{ba}', Latin),
    ('\u{bb}', '\u{bf}', Common),
    ('\u{c0}', '\u{d6}', Latin),
    ('\u{d7}', '\u{d7}', Common),
    ('\u{d8}', '\u{f6}', Latin),
    ('\u{f7}', '\u{f7}', Common),
    ('\u{f8}', '\u{2b8}', Latin),
    ('\u{2b9}', '\u{2df}', Common),
    ('\u{2e0}', '\u{2e4}', Latin),
    ('\u{2e5}', '\u{2e9}', Common),
    ('\u{2ea}', '\u{2eb}', Bopomofo),
    ('\u{2ec}', '\u{2ff}', Common),
    ('\u{300}', '\u{36f}', Inherited),
    ('\u{370}', '\u{373}', Greek),
    ('\u{374}', '\u{374}', Common),
    ('\u{375}', '\u{377}', Greek),
    ('\u{37a}', '\u{37d}', Greek),
    ('\u{37e}', '\u{37e}', Common),
    ('\u{37f}', '\u{37f}', Greek),
    ('\u{384}', '\u{384}', Greek),
    ('\u{385}', '\u{385}', Common),
    ('\u{386}', '\u{386}', Greek),
    ('\u{387}', '\u{387}', Common),
    ('\u{388}', '\u{38a}', Greek),
    ('\u{38c}', '\u{38c}', Greek),
    ('\u{38e}', '\u{3a1}', Greek),
    ('\u{3a3}', '\u{3e1}', Greek),
    ('\u{3e2}', '\u{3ef}', Coptic),
    ('\u{3f0}', '\u{3ff}', Greek),
    ('\u{400}', '\u{484}', Cyrillic),
    ('\u{485}', '\u{486}', Inherited),
    ('\u{487}', '\u{52f}', Cyrillic),
    ('\u{531}', '\u{556}', Armenian),
    ('\u{559}', '\u{55f}', Armenian),
    ('\u{561}', '\u{587}', Armenian),
    ('\u{589}', '\u{589}', Common),
    ('\u{58a}', '\u{58a}', Armenian),
    ('\u{58d}', '\u{58f}', Armenian),
    ('\u{591}', '\u{5c7}', Hebrew),
    ('\u{5d0}', '\u{5ea}', Hebrew),
    ('\u{5f0}', '\u{5f4}', Hebrew),
    ('\u{600}', '\u{604}', Arabic),
    ('\u{605}', '\u{605}', Common),
    ('\u{606}', '\u{60b}', Arabic),
    ('\u{60c}', '\u{60c}', Common),
    ('\u{60d}', '\u{61a}', Arabic),
    ('\u{61b}', '\u{61c}', Common),
    ('\u{61e}', '\u{61e}', Arabic),
    ('\u{61f}', '\u{61f}', Common),
    ('\u{620}', '\u{63f}', Arabic),
    ('\u{640}', '\u{640}', Common),
    ('\u{641}', '\u{64a}', Arabic),
    ('\u{64b}', '\u{655}', Inherited),
    ('\u{656}', '\u{66f}', Arabic),
    ('\u{670}', '\u{670}', Inherited),
    ('\u{671}', '\u{6dc}', Arabic),
    ('\u{6dd}', '\u{6dd}', Common),
    ('\u{6de}', '\u{6ff}', Arabic),
    ('\u{700}', '\u{70d}', Syriac),
    ('\u{70f}', '\u{74a}', Syriac),
    ('\u{74d}', '\u{74f}', Syriac),
    ('\u{750}', '\u{77f}', Arabic),
    ('\u{780}', '\u{7b1}', Thaana),
    ('\u{7c0}', '\u{7fa}', Nko),
    ('\u{800}', '\u{82d}', Samaritan),
    ('\u{830}', '\u{83e}', Samaritan),
    ('\u{840}', '\u{85b}', Mandaic),
    ('\u{85e}', '\u{85e}', Mandaic),
    ('\u{8a0}', '\u{8b4}', Arabic),
    ('\u{8e3}', '\u{8ff}', Arabic),
    ('\u{900}', '\u{950}', Devanagari),
    ('\u{951}', '\u{952}', Inherited),
    ('\u{953}', '\u{963}', Devanagari),
    ('\u{964}', '\u{965}', Common),
    ('\u{966}', '\u{97f}', Devanagari),
    ('\u{980}', '\u{983}', Bengali),
    ('\u{985}', '\u{98c}', Bengali),
    ('\u{98f}', '\u{990}', Bengali),
    ('\u{993}', '\u{9a8}', Bengali),
    ('\u{9aa}', '\u{9b0}', Bengali),
    ('\u{9b2}', '\u{9b2}', Bengali),
    ('\u{9b6}', '\u{9b9}', Bengali),
    ('\u{9bc}', '\u{9c4}', Bengali),
    ('\u{9c7}', '\u{9c8}', Bengali),
    ('\u{9cb}', '\u{9ce}', Bengali),
    ('\u{9d7}', '\u{9d7}', Bengali),
    ('\u{9dc}', '\u{9dd}', Bengali),
    ('\u{9df}', '\u{9e3}', Bengali),
    ('\u{9e6}', '\u{9fb}', Bengali),
    ('\u{a01}', '\u{a03}', Gurmukhi),
    ('\u{a05}', '\u{a0a}', Gurmukhi),
    ('\u{a0f}', '\u{a10}', Gurmukhi),
    ('\u{a13}', '\u{a28}', Gurmukhi),
    ('\u{a2a}', '\u{a30}', Gurmukhi),
    ('\u{a32}', '\u{a33}', Gurmukhi),
    ('\u{a35}', '\u{a36}', Gurmukhi),
    ('\u{a38}', '\u{a39}', Gurmukhi),
    ('\u{a3c}', '\u{a3c}', Gurmukhi),
    ('\u{a3e}', '\u{a42}', Gurmukhi),
    ('\u{a47}', '\u{a48}', Gurmukhi),
    ('\u{a4b}', '\u{a4d}', Gurmukhi),
    ('\u{a51}', '\u{a51}', Gurmukhi),
    ('\u{a59}', '\u{a5c}', Gurmukhi),
    ('\u{a5e}', '\u{a5e}', Gurmukhi),
    ('\u{a66}', '\u{a75}', Gurmukhi),
    ('\u{a81}', '\u{a83}', Gujarati),
    ('\u{a85}', '\u{a8d}', Gujarati),
    ('\u{a8f}', '\u{a91}', Gujarati),
    ('\u{a93}', '\u{aa8}', Gujarati),
    ('\u{aaa}', '\u{ab0}', Gujarati),
    ('\u{ab2}', '\u{ab3}', Gujarati),
    ('\u{ab5}', '\u{ab9}', Gujarati),
    ('\u{abc}', '\u{ac5}', Gujarati),
    ('\u{ac7}', '\u{ac9}', Gujarati),
    ('\u{acb}', '\u{acd}', Gujarati),
    ('\u{ad0}', '\u{ad0}', Gujarati),
    ('\u{ae0}', '\u{ae3}', Gujarati),
    ('\u{ae6}', '\u{af1}', Gujarati),
    ('\u{af9}', '\u{af9}', Gujarati),
    ('\u{b01}', '\u{b03}', Oriya),
    ('\u{b05}', '\u{b0c}', Oriya),
    ('\u{b0f}', '\u{b10}', Oriya),
    ('\u{b13}', '\u{b28}', Oriya),
    ('\u{b2a}', '\u{b30}', Oriya),
    ('\u{b32}', '\u{b33}', Oriya),
    ('\u{b35}', '\u{b39}', Oriya),
    ('\u{b3c}', '\u{b44}', Oriya),
    ('\u{b47}', '\u{b48}', Oriya),
    ('\u{b4b}', '\u{b4d}', Oriya),
    ('\u{b56}', '\u{b57}', Oriya),
    ('\u{b5c}', '\u{b5d}', Oriya),
    ('\u{b5f}', '\u{b63}', Oriya),
    ('\u{b66}', '\u{b77}', Oriya),
    ('\u{b82}', '\u{b83}', Tamil),
    ('\u{b85}', '\u{b8a}', Tamil),
    ('\u{b8e}', '\u{b90}', Tamil),
    ('\u{b92}', '\u{b95}', Tamil),
    ('\u{b99}', '\u{b9a}', Tamil),
    ('\u{b9c}', '\u{b9c}', Tamil),
    ('\u{b9e}', '\u{b9f}', Tamil),
    ('\u{ba3}', '\u{ba4}', Tamil),
    ('\u{ba8}', '\u{baa}', Tamil),
    ('\u{bae}', '\u{bb9}', Tamil),
    ('\u{bbe}', '\u{bc2}', Tamil),
    ('\u{bc6}', '\u{bc8}', Tamil),
    ('\u{bca}', '\u{bcd}', Tamil),
    ('\u{bd0}', '\u{bd0}', Tamil),
    ('\u{bd7}', '\u{bd7}', Tamil),
    ('\u{be6}', '\u{bfa}', Tamil),
    ('\u{c00}', '\u{c03}', Telugu),
    ('\u{c05}', '\u{c0c}', Telugu),
    ('\u{c0e}', '\u{c10}', Telugu),
    ('\u{c12}', '\u{c28}', Telugu),
    ('\u{c2a}', '\u{c39}', Telugu),
    ('\u{c3d}', '\u{c44}', Telugu),
    ('\u{c46}', '\u{c48}', Telugu),
    ('\u{c4a}', '\u{c4d}', Telugu),
    ('\u{c55}', '\u{c56}', Telugu),
    ('\u{c58}', '\u{c5a}', Telugu),
    ('\u{c60}', '\u{c63}', Telugu),
    ('\u{c66}', '\u{c6f}', Telugu),
    ('\u{c78}', '\u{c7f}', Telugu),
    ('\u{c81}', '\u{c83}', Kannada),
    ('\u{c85}', '\u{c8c}', Kannada),
    ('\u{c8e}', '\u{c90}', Kannada),
    ('\u{c92}', '\u{ca8}', Kannada),
    ('\u{caa}', '\u{cb3}', Kannada),
    ('\u{cb5}', '\u{cb9}', Kannada),
    ('\u{cbc}', '\u{cc4}', Kannada),
    ('\u{cc6}', '\u{cc8}', Kannada),
    ('\u{cca}', '\u{ccd}', Kannada),
    ('\u{cd5}', '\u{cd6}', Kannada),
    ('\u{cde}', '\u{cde}', Kannada),
    ('\u{ce0}', '\u{ce3}', Kannada),
    ('\u{ce6}', '\u{cef}', Kannada),
    ('\u{cf1}', '\u{cf2}', Kannada),
    ('\u{d01}', '\u{d03}', Malayalam),
    ('\u{d05}', '\u{d0c}', Malayalam),
    ('\u{d0e}', '\u{d10}', Malayalam),
    ('\u{d12}', '\u{d3a}', Malayalam),
    ('\u{d3d}', '\u{d44}', Malayalam),
    ('\u{d46}', '\u{d48}', Malayalam),
    ('\u{d4a}', '\u{d4e}', Malayalam),
    ('\u{d57}', '\u{d57}', Malayalam),
    ('\u{d5f}', '\u{d63}', Malayalam),
    ('\u{d66}', '\u{d75}', Malayalam),
    ('\u{d79}', '\u{d7f}', Malayalam),
    ('\u{d82}', '\u{d83}', Sinhala),
    ('\u{d85}', '\u{d96}', Sinhala),
    ('\u{d9a}', '\u{db1}', Sinhala),
    ('\u{db3}', '\u{dbb}', Sinhala),
    ('\u{dbd}', '\u{dbd}', Sinhala),
    ('\u{dc0}', '\u{dc6}', Sinhala),
    ('\u{dca}', '\u{dca}', Sinhala),
    ('\u{dcf}', '\u{dd4}', Sinhala),
    ('\u{dd6}', '\u{dd6}', Sinhala),
    ('\u{dd8}', '\u{ddf}', Sinhala),
    ('\u{de6}', '\u{def}', Sinhala),
    ('\u{df2}', '\u{df4}', Sinhala),
    ('\u{e01}', '\u{e3a}', Thai),
    ('\u{e3f}', '\u{e3f}', Common),
    ('\u{e40}', '\u{e5b}', Thai),
    ('\u{e81}', '\u{e82}', Lao),
    ('\u{e84}', '\u{e84}', Lao),
    ('\u{e87}', '\u{e88}', Lao),
    ('\u{e8a}', '\u{e8a}', Lao),
    ('\u{e8d}', '\u{e8d}', Lao),
    ('\u{e94}', '\u{e97}', Lao),
    ('\u{e99}', '\u{e9f}', Lao),
    ('\u{ea1}', '\u{ea3}', Lao),
    ('\u{ea5}', '\u{ea5}', Lao),
    ('\u{ea7}', '\u{ea7}', Lao),
    ('\u{eaa}', '\u{eab}', Lao),
    ('\u{ead}', '\u{eb9}', Lao),
    ('\u{ebb}', '\u{ebd}', Lao),
    ('\u{ec0}', '\u{ec4}', Lao),
    ('\u{ec6}', '\u{ec6}', Lao),
    ('\u{ec8}', '\u{ecd}', Lao),
    ('\u{ed0}', '\u{ed9}', Lao),
    ('\u{edc}', '\u{edf}', Lao),
    ('\u{f00}', '\u{f47}', Tibetan),
    ('\u{f49}', '\u{f6c}', Tibetan),
    ('\u{f71}', '\u{f97}', Tibetan),
    ('\u{f99}', '\u{fbc}', Tibetan),
    ('\u{fbe}', '\u{fcc}', Tibetan),
    ('\u{fce}', '\u{fd4}', Tibetan),
    ('\u{fd5}', '\u{fd8}', Common),
    ('\u{fd9}', '\u{fda}', Tibetan),
    ('\u{1000}', '\u{109f}', Myanmar),
    ('\u{10a0}', '\u{10c5}', Georgian),
    ('\u{10c7}', '\u{10c7}', Georgian),
    ('\u{10cd}', '\u{10cd}', Georgian),
    ('\u{10d0}', '\u{10fa}', Georgian),
    ('\u{10fb}', '\u{10fb}', Common),
    ('\u{10fc}', '\u{10ff}', Georgian),
    ('\u{1100}', '\u{11ff}', Hangul),
    ('\u{1200}', '\u{1248}', Ethiopic),
    ('\u{124a}', '\u{124d}', Ethiopic),
    ('\u{1250}', '\u{1256}', Ethiopic),
    ('\u{1258}', '\u{1258}', Ethiopic),
    ('\u{125a}', '\u{125d}', Ethiopic),
    ('\u{1260}', '\u{1288}', Ethiopic),
    ('\u{128a}', '\u{128d}', Ethiopic),
    ('\u{1290}', '\u{12b0}', Ethiopic),
    ('\u{12b2}', '\u{12b5}', Ethiopic),
    ('\u{12b8}', '\u{12be}', Ethiopic),
    ('\u{12c0}', '\u{12c0}', Ethiopic),
    ('\u{12c2}', '\u{12c5}', Ethiopic),
    ('\u{12c8}', '\u{12d6}', Ethiopic),
    ('\u{12d8}', '\u{1310}', Ethiopic),
    ('\u{1312}', '\u{1315}', Ethiopic),
    ('\u{1318}', '\u{135a}', Ethiopic),
    ('\u{135d}', '\u{137c}', Ethiopic),
    ('\u{1380}', '\u{1399}', Ethiopic),
    ('\u{13a0}', '\u{13f5}', Cherokee),
    ('\u{13f8}', '\u{13fd}', Cherokee),
    ('\u{1400}', '\u{167f}', Canadian_Aboriginal),
    ('\u{1680}', '\u{169c}', Ogham),
    ('\u{16a0}', '\u{16ea}', Runic),
    ('\u{16eb}', '\u{16ed}', Common),
    ('\u{16ee}', '\u{16f8}', Runic),
    ('\u{1700}', '\u{170c}', Tagalog),
    ('\u{170e}', '\u{1714}', Tagalog),
    ('\u{1720}', '\u{1734}', Hanunoo),
    ('\u{1735}', '\u{1736}', Common),
    ('\u{1740}', '\u{1753}', Buhid),
    ('\u{1760}', '\u{176c}', Tagbanwa),
    ('\u{176e}', '\u{1770}', Tagbanwa),
    ('\u{1772}', '\u{1773}', Tagbanwa),
    ('\u{1780}', '\u{17dd}', Khmer),
    ('\u{17e0}', '\u{17e9}', Khmer),
    ('\u{17f0}', '\u{17f9}', Khmer),
    ('\u{1800}', '\u{1801}', Mongolian),
    ('\u{1802}', '\u{1803}', Common),
    ('\u{1804}', '\u{1804}', Mongolian),
    ('\u{1805}', '\u{1805}', Common),
    ('\u{1806}', '\u{180e}', Mongolian),
    ('\u{1810}', '\u{1819}', Mongolian),
    ('\u{1820}', '\u{1877}', Mongolian),
    ('\u{1880}', '\u{18aa}', Mongolian),
    ('\u{18b0}', '\u{18f5}', Canadian_Aboriginal),
    ('\u{1900}', '\u{191e}', Limbu),
    ('\u{1920}', '\u{192b}', Limbu),
    ('\u{1930}', '\u{193b}', Limbu),
    ('\u{1940}', '\u{1940}', Limbu),
    ('\u{1944}', '\u{194f}', Limbu),
    ('\u{1950}', '\u{196d}', Tai_Le),
    ('\u{1970}', '\u{1974}', Tai_Le),
    ('\u{1980}', '\u{19ab}', New_Tai_Lue),
    ('\u{19b0}', '\u{19c9}', New_Tai_Lue),
    ('\u{19d0}', '\u{19da}', New_Tai_Lue),
    ('\u{19de}', '\u{19df}', New_Tai_Lue),
    ('\u{19e0}', '\u{19ff}', Khmer),
    ('\u{1a00}', '\u{1a1b}', Buginese),
    ('\u{1a1e}', '\u{1a1f}', Buginese),
    ('\u{1a20}', '\u{1a5e}', Tai_Tham),
    ('\u{1a60}', '\u{1a7c}', Tai_Tham),
    ('\u{1a7f}', '\u{1a89}', Tai_Tham),
    ('\u{1a90}', '\u{1a99}', Tai_Tham),
    ('\u{1aa0}', '\u{1aad}', Tai_Tham),
    ('\u{1ab0}', '\u{1abe}', Inherited),
    ('\u{1b00}', '\u{1b4b}', Balinese),
    ('\u{1b50}', '\u{1b7c}', Balinese),
    ('\u{1b80}', '\u{1bbf}', Sundanese),
    ('\u{1bc0}', '\u{1bf3}', Batak),
    ('\u{1bfc}', '\u{1bff}', Batak),
    ('\u{1c00}', '\u{1c37}', Lepcha),
    ('\u{1c3b}', '\u{1c49}', Lepcha),
    ('\u{1c4d}', '\u{1c4f}', Lepcha),
    ('\u{1c50}', '\u{1c7f}', Ol_Chiki),
    ('\u{1cc0}', '\u{1cc7}', Sundanese),
    ('\u{1cd0}', '\u{1cd2}', Inherited),
    ('\u{1cd3}', '\u{1cd3}', Common),
    ('\u{1cd4}', '\u{1ce0}', Inherited),
    ('\u{1ce1}', '\u{1ce1}', Common),
    ('\u{1ce2}', '\u{1ce8}', Inherited),
    ('\u{1ce9}', '\u{1cec}', Common),
    ('\u{1ced}', '\u{1ced}', Inherited),
    ('\u{1cee}', '\u{1cf3}', Common),
    ('\u{1cf4}', '\u{1cf4}', Inherited),
    ('\u{1cf5}', '\u{1cf6}', Common),
    ('\u{1cf8}', '\u{1cf9}', Inherited),
    ('\u{1d00}', '\u{1d25}', Latin),
    ('\u{1d26}', '\u{1d2a}', Greek),
    ('\u{1d2b}', '\u{1d2b}', Cyrillic),
    ('\u{1d2c}', '\u{1d5c}', Latin),
    ('\u{1d5d}', '\u{1d61}', Greek),
    ('\u{1d62}', '\u{1d65}', Latin),
    ('\u{1d66}', '\u{1d6a}', Greek),
    ('\u{1d6b}', '\u{1d77}', Latin),
    ('\u{1d78}', '\u{1d78}', Cyrillic),
    ('\u{1d79}', '\u{1dbe}', Latin),
    ('\u{1dbf}', '\u{1dbf}', Greek),
    ('\u{1dc0}', '\u{1df5}', Inherited),
    ('\u{1dfc}', '\u{1dff}', Inherited),
    ('\u{1e00}', '\u{1eff}', Latin),
    ('\u{1f00}', '\u{1f15}', Greek),
    ('\u{1f18}', '\u{1f1d}', Greek),
    ('\u{1f20}', '\u{1f45}', Greek),
    ('\u{1f48}', '\u{1f4d}', Greek),
    ('\u{1f50}', '\u{1f57}', Greek),
    ('\u{1f59}', '\u{1f59}', Greek),
    ('\u{1f5b}', '\u{1f5b}', Greek),
    ('\u{1f5d}', '\u{1f5d}', Greek),
    ('\u{1f5f}', '\u{1f7d}', Greek),
    ('\u{1f80}', '\u{1fb4}', Greek),
    ('\u{1fb6}', '\u{1fc4}', Greek),
    ('\u{1fc6}', '\u{1fd3}', Greek),
    ('\u{1fd6}', '\u{1fdb}', Greek),
    ('\u{1fdd}', '\u{1fef}', Greek),
    ('\u{1ff2}', '\u{1ff4}', Greek),
    ('\u{1ff6}', '\u{1ffe}', Greek),
    ('\u{2000}', '\u{200b}', Common),
    ('\u{200c}', '\u{200d}', Inherited),
    ('\u{200e}', '\u{2064}', Common),
    ('\u{2066}', '\u{2070}', Common),
    ('\u{2071}', '\u{2071}', Latin),
    ('\u{2074}', '\u{207e}', Common),
    ('\u{207f}', '\u{207f}', Latin),
    ('\u{2080}', '\u{208e}', Common),
    ('\u{2090}', '\u{209c}', Latin),
    ('\u{20a0}', '\u{20be}', Common),
    ('\u{20d0}', '\u{20f0}', Inherited),
    ('\u{2100}', '\u{2125}', Common),
    ('\u{2126}', '\u{2126}', Greek),
    ('\u{2127}', '\u{2129}', Common),
    ('\u{212a}', '\u{212b}', Latin),
    ('\u{212c}', '\u{2131}', Common),
    ('\u{2132}', '\u{2132}', Latin),
    ('\u{2133}', '\u{214d}', Common),
    ('\u{214e}', '\u{214e}', Latin),
    ('\u{214f}', '\u{215f}', Common),
    ('\u{2160}', '\u{2188}', Latin),
    ('\u{2189}', '\u{218b}', Common),
    ('\u{2190}', '\u{23fa}', Common),
    ('\u{2400}', '\u{2426}', Common),
    ('\u{2440}', '\u{244a}', Common),
    ('\u{2460}', '\u{27ff}', Common),
    ('\u{2800}', '\u{28ff}', Braille),
    ('\u{2900}', '\u{2b73}', Common),
    ('\u{2b76}', '\u{2b95}', Common),
    ('\u{2b98}', '\u{2bb9}', Common),
    ('\u{2bbd}', '\u{2bc8}', Common),
    ('\u{2bca}', '\u{2bd1}', Common),
    ('\u{2bec}', '\u{2bef}', Common),
    ('\u{2c00}', '\u{2c2e}', Glagolitic),
    ('\u{2c30}', '\u{2c5e}', Glagolitic),
    ('\u{2c60}', '\u{2c7f}', Latin),
    ('\u{2c80}', '\u{2cf3}', Coptic),
    ('\u{2cf9}', '\u{2cff}', Coptic),
    ('\u{2d00}', '\u{2d25}', Georgian),
    ('\u{2d27}', '\u{2d27}', Georgian),
    ('\u{2d2d}', '\u{2d2d}', Georgian),
    ('\u{2d30}', '\u{2d67}', Tifinagh),
    ('\u{2d6f}', '\u{2d70}', Tifinagh),
    ('\u{2d7f}', '\u{2d7f}', Tifinagh),
    ('\u{2d80}', '\u{2d96}', Ethiopic),
    ('\u{2da0}', '\u{2da6}', Ethiopic),
    ('\u{2da8}', '\u{2dae}', Ethiopic),
    ('\u{2db0}', '\u{2db6}', Ethiopic),
    ('\u{2db8}', '\u{2dbe}', Ethiopic),
    ('\u{2dc0}', '\u{2dc6}', Ethiopic),
    ('\u{2dc8}', '\u{2dce}', Ethiopic),
    ('\u{2dd0}', '\u{2dd6}', Ethiopic),
    ('\u{2dd8}', '\u{2dde}', Ethiopic),
    ('\u{2de0}', '\u{2dff}', Cyrillic),
    ('\u{2e00}', '\u{2e42}', Common),
    ('\u{2e80}', '\u{2e99}', Han),
    ('\u{2e9b}', '\u{2ef3}', Han),
    ('\u{2f00}', '\u{2fd5}', Han),
    ('\u{2ff0}', '\u{2ffb}', Common),
    ('\u{3000}', '\u{3004}', Common),
    ('\u{3005}', '\u{3005}', Han),
    ('\u{3006}', '\u{3006}', Common),
    ('\u{3007}', '\u{3007}', Han),
    ('\u{3008}', '\u{3020}', Common),
    ('\u{3021}', '\u{3029}', Han),
    ('\u{302a}', '\u{302d}', Inherited),
    ('\u{302e}', '\u{302f}', Hangul),
    ('\u{3030}', '\u{3037}', Common),
    ('\u{3038}', '\u{303b}', Han),
    ('\u{303c}', '\u{303f}', Common),
    ('\u{3041}', '\u{3096}', Hiragana),
    ('\u{3099}', '\u{309a}', Inherited),
    ('\u{309b}', '\u{309c}', Common),
    ('\u{309d}', '\u{309f}', Hiragana),
    ('\u{30a0}', '\u{30a0}', Common),
    ('\u{30a1}', '\u{30fa}', Katakana),
    ('\u{30fb}', '\u{30fc}', Common),
    ('\u{30fd}', '\u{30ff}', Katakana),
    ('\u{3105}', '\u{312d}', Bopomofo),
    ('\u{3131}', '\u{318e}', Hangul),
    ('\u{3190}', '\u{319f}', Common),
    ('\u{31a0}', '\u{31ba}', Bopomofo),
    ('\u{31c0}', '\u{31e3}', Common),
    ('\u{31f0}', '\u{31ff}', Katakana),
    ('\u{3200}', '\u{321e}', Hangul),
    ('\u{3220}', '\u{325f}', Common),
    ('\u{3260}', '\u{327e}', Hangul),
    ('\u{327f}', '\u{32cf}', Common),
    ('\u{32d0}', '\u{32fe}', Katakana),
    ('\u{3300}', '\u{3357}', Katakana),
    ('\u{3358}', '\u{33ff}', Common),
    ('\u{3400}', '\u{4db5}', Han),
    ('\u{4dc0}', '\u{4dff}', Common),
    ('\u{4e00}', '\u{9fd5}', Han),
    ('\u{a000}', '\u{a48c}', Yi),
    ('\u{a490}', '\u{a4c6}', Yi),
    ('\u{a4d0}', '\u{a4ff}', Lisu),
    ('\u{a500}', '\u{a62b}', Vai),
    ('\u{a640}', '\u{a69f}', Cyrillic),
    ('\u{a6a0}', '\u{a6f7}', Bamum),
    ('\u{a700}', '\u{a721}', Common),
    ('\u{a722}', '\u{a787}', Latin),
    ('\u{a788}', '\u{a78a}', Common),
    ('\u{a78b}', '\u{a7ad}', Latin),
    ('\u{a7b0}', '\u{a7b7}', Latin),
    ('\u{a7f7}', '\u{a7ff}', Latin),
    ('\u{a800}', '\u{a82b}', Syloti_Nagri),
    ('\u{a830}', '\u{a839}', Common),
    ('\u{a840}', '\u{a877}', Phags_Pa),
    ('\u{a880}', '\u{a8c4}', Saurashtra),
    ('\u{a8ce}', '\u{a8d9}', Saurashtra),
    ('\u{a8e0}', '\u{a8fd}', Devanagari),
    ('\u{a900}', '\u{a92d}', Kayah_Li),
    ('\u{a92e}', '\u{a92e}', Common),
    ('\u{a92f}', '\u{a92f}', Kayah_Li),
    ('\u{a930}', '\u{a953}', Rejang),
    ('\u{a95f}', '\u{a95f}', Rejang),
    ('\u{a960}', '\u{a97c}', Hangul),
    ('\u{a980}', '\u{a9cd}', Javanese),
    ('\u{a9cf}', '\u{a9cf}', Common),
    ('\u{a9d0}', '\u{a9d9}', Javanese),
    ('\u{a9de}', '\u{a9df}', Javanese),
    ('\u{a9e0}', '\u{a9fe}', Myanmar),
    ('\u{aa00}', '\u{aa36}', Cham),
    ('\u{aa40}', '\u{aa4d}', Cham),
    ('\u{aa50}', '\u{aa59}', Cham),
    ('\u{aa5c}', '\u{aa5f}', Cham),
    ('\u{aa60}', '\u{aa7f}', Myanmar),
    ('\u{aa80}', '\u{aac2}', Tai_Viet),
    ('\u{aadb}', '\u{aadf}', Tai_Viet),
    ('\u{aae0}', '\u{aaf6}', Meetei_Mayek),
    ('\u{ab01}', '\u{ab06}', Ethiopic),
    ('\u{ab09}', '\u{ab0e}', Ethiopic),
    ('\u{ab11}', '\u{ab16}', Ethiopic),
    ('\u{ab20}', '\u{ab26}', Ethiopic),
    ('\u{ab28}', '\u{ab2e}', Ethiopic),
    ('\u{ab30}', '\u{ab5a}', Latin),
    ('\u{ab5b}', '\u{ab5b}', Common),
    ('\u{ab5c}', '\u{ab64}', Latin),
    ('\u{ab65}', '\u{ab65}', Greek),
    ('\u{ab70}', '\u{abbf}', Cherokee),
    ('\u{abc0}', '\u{abed}', Meetei_Mayek),
    ('\u{abf0}', '\u{abf9}', Meetei_Mayek),
    ('\u{ac00}', '\u{d7a3}', Hangul),
    ('\u{d7b0}', '\u{d7c6}', Hangul),
    ('\u{d7cb}', '\u{d7fb}', Hangul),
    ('\u{f900}', '\u{fa6d}', Han),
    ('\u{fa70}', '\u{fad9}', Han),
    ('\u{fb00}', '\u{fb06}', Latin),
    ('\u{fb13}', '\u{fb17}', Armenian),
    ('\u{fb1d}', '\u{fb36}', Hebrew),
    ('\u{fb38}', '\u{fb3c}', Hebrew),
    ('\u{fb3e}', '\u{fb3e}', Hebrew),
    ('\u{fb40}', '\u{fb41}', Hebrew),
    ('\u{fb43}', '\u{fb44}', Hebrew),
    ('\u{fb46}', '\u{fb4f}', Hebrew),
    ('\u{fb50}', '\u{fbc1}', Arabic),
    ('\u{fbd3}', '\u{fd3d}', Arabic),
    ('\u{fd3e}', '\u{fd3f}', Common),
    ('\u{fd50}', '\u{fd8f}', Arabic),
    ('\u{fd92}', '\u{fdc7}', Arabic),
    ('\u{fdf0}', '\u{fdfd}', Arabic),
    ('\u{fe00}', '\u{fe0f}', Inherited),
    ('\u{fe10}', '\u{fe19}', Common),
    ('\u{fe20}', '\u{fe2d}', Inherited),
    ('\u{fe2e}', '\u{fe2f}', Cyrillic),
    ('\u{fe30}', '\u{fe52}', Common),
    ('\u{fe54}', '\u{fe66}', Common),
    ('\u{fe68}', '\u{fe6b}', Common),
    ('\u{fe70}', '\u{fe74}', Arabic),
    ('\u{fe76}', '\u{fefc}', Arabic),
    ('\u{feff}', '\u{feff}', Common),
    ('\u{ff01}', '\u{ff20}', Common),
    ('\u{ff21}', '\u{ff3a}', Latin),
    ('\u{ff3b}', '\u{ff40}', Common),
    ('\u{ff41}', '\u{ff5a}', Latin),
    ('\u{ff5b}', '\u{ff65}', Common),
    ('\u{ff66}', '\u{ff6f}', Katakana),
    ('\u{ff70}', '\u{ff70}', Common),
    ('\u{ff71}', '\u{ff9d}', Katakana),
    ('\u{ff9e}', '\u{ff9f}', Common),
    ('\u{ffa0}', '\u{ffbe}', Hangul),
    ('\u{ffc2}', '\u{ffc7}', Hangul),
    ('\u{ffca}', '\u{ffcf}', Hangul),
    ('\u{ffd2}', '\u{ffd7}', Hangul),
    ('\u{ffda}', '\u{ffdc}', Hangul),
    ('\u{ffe0}', '\u{ffe6}', Common),
    ('\u{ffe8}', '\u{ffee}', Common),
    ('\u{fff9}', '\u{fffd}', Common),
    ('\u{10000}', '\u{1000b}', Linear_B),
    ('\u{1000d}', '\u{10026}', Linear_B),
    ('\u{10028}', '\u{1003a}', Linear_B),
    ('\u{1003c}', '\u{1003d}', Linear_B),
    ('\u{1003f}', '\u{1004d}', Linear_B),
    ('\u{10050}', '\u{1005d}', Linear_B),
    ('\u{10080}', '\u{100fa}', Linear_B),
    ('\u{10100}', '\u{10102}', Common),
    ('\u{10107}', '\u{10133}', Common),
    ('\u{10137}', '\u{1013f}', Common),
    ('\u{10140}', '\u{1018c}', Greek),
    ('\u{10190}', '\u{1019b}', Common),
    ('\u{101a0}', '\u{101a0}', Greek),
    ('\u{101d0}', '\u{101fc}', Common),
    ('\u{101fd}', '\u{101fd}', Inherited),
    ('\u{10280}', '\u{1029c}', Lycian),
    ('\u{102a0}', '\u{102d0}', Carian),
    ('\u{102e0}', '\u{102e0}', Inherited),
    ('\u{102e1}', '\u{102fb}', Common),
    ('\u{10300}', '\u{10323}', Old_Italic),
    ('\u{10330}', '\u{1034a}', Gothic),
    ('\u{10350}', '\u{1037a}', Old_Permic),
    ('\u{10380}', '\u{1039d}', Ugaritic),
    ('\u{1039f}', '\u{1039f}', Ugaritic),
    ('\u{103a0}', '\u{103c3}', Old_Persian),
    ('\u{103c8}', '\u{103d5}', Old_Persian),
    ('\u{10400}', '\u{1044f}', Deseret),
    ('\u{10450}', '\u{1047f}', Shavian),
    ('\u{10480}', '\u{1049d}', Osmanya),
    ('\u{104a0}', '\u{104a9}', Osmanya),
    ('\u{10500}', '\u{10527}', Elbasan),
    ('\u{10530}', '\u{10563}', Caucasian_Albanian),
    ('\u{1056f}', '\u{1056f}', Caucasian_Albanian),
    ('\u{10600}', '\u{10736}', Linear_A),
    ('\u{10740}', '\u{10755}', Linear_A),
    ('\u{10760}', '\u{10767}', Linear_A),
    ('\u{10800}', '\u{10805}', Cypriot),
    ('\u{10808}', '\u{10808}', Cypriot),
    ('\u{1080a}', '\u{10835}', Cypriot),
    ('\u{10837}', '\u{10838}', Cypriot),
    ('\u{1083c}', '\u{1083c}', Cypriot),
    ('\u{1083f}', '\u{1083f}', Cypriot),
    ('\u{10840}', '\u{10855}', Imperial_Aramaic),
    ('\u{10857}', '\u{1085f}', Imperial_Aramaic),
    ('\u{10860}', '\u{1087f}', Palmyrene),
    ('\u{10880}', '\u{1089e}', Nabataean),
    ('\u{108a7}', '\u{108af}', Nabataean),
    ('\u{108e0}', '\u{108f2}', Hatran),
    ('\u{108f4}', '\u{108f5}', Hatran),
    ('\u{108fb}', '\u{108ff}', Hatran),
    ('\u{10900}', '\u{1091b}', Phoenician),
    ('\u{1091f}', '\u{1091f}', Phoenician),
    ('\u{10920}', '\u{10939}', Lydian),
    ('\u{1093f}', '\u{1093f}', Lydian),
    ('\u{10980}', '\u{1099f}', Meroitic_Hieroglyphs),
    ('\u{109a0}', '\u{109b7}', Meroitic_Cursive),
    ('\u{109bc}', '\u{109cf}', Meroitic_Cursive),
    ('\u{109d2}', '\u{109ff}', Meroitic_Cursive),
    ('\u{10a00}', '\u{10a03}', Kharoshthi),
    ('\u{10a05}', '\u{10a06}', Kharoshthi),
    ('\u{10a0c}', '\u{10a13}', Kharoshthi),
    ('\u{10a15}', '\u{10a17}', Kharoshthi),
    ('\u{10a19}', '\u{10a33}', Kharoshthi),
    ('\u{10a38}', '\u{10a3a}', Kharoshthi),
    ('\u{10a3f}', '\u{10a47}', Kharoshthi),
    ('\u{10a50}', '\u{10a58}', Kharoshthi),
    ('\u{10a60}', '\u{10a7f}', Old_South_Arabian),
    ('\u{10a80}', '\u{10a9f}', Old_North_Arabian),
    ('\u{10ac0}', '\u{10ae6}', Manichaean),
    ('\u{10aeb}', '\u{10af6}', Manichaean),
    ('\u{10b00}', '\u{10b35}', Avestan),
    ('\u{10b39}', '\u{10b3f}', Avestan),
    ('\u{10b40}', '\u{10b55}', Inscriptional_Parthian),
    ('\u{10b58}', '\u{10b5f}', Inscriptional_Parthian),
    ('\u{10b60}', '\u{10b72}', Inscriptional_Pahlavi),
    ('\u{10b78}', '\u{10b7f}', Inscriptional_Pahlavi),
    ('\u{10b80}', '\u{10b91}', Psalter_Pahlavi),
    ('\u{10b99}', '\u{10b9c}', Psalter_Pahlavi),
    ('\u{10ba9}', '\u{10baf}', Psalter_Pahlavi),
    ('\u{10c00}', '\u{10c48}', Old_Turkic),
    ('\u{10c80}', '\u{10cb2}', Old_Hungarian),
    ('\u{10cc0}', '\u{10cf2}', Old_Hungarian),
    ('\u{10cfa}', '\u{10cff}', Old_Hungarian),
    ('\u{10e60}', '\u{10e7e}', Arabic),
    ('\u{11000}', '\u{1104d}', Brahmi),
    ('\u{11052}', '\u{1106f}', Brahmi),
    ('\u{1107f}', '\u{1107f}', Brahmi),
    ('\u{11080}', '\u{110c1}', Kaithi),
    ('\u{110d0}', '\u{110e8}', Sora_Sompeng),
    ('\u{110f0}', '\u{110f9}', Sora_Sompeng),
    ('\u{11100}', '\u{11134}', Chakma),
    ('\u{11136}', '\u{11143}', Chakma),
    ('\u{11150}', '\u{11176}', Mahajani),
    ('\u{11180}', '\u{111cd}', Sharada),
    ('\u{111d0}', '\u{111df}', Sharada),
    ('\u{111e1}', '\u{111f4}', Sinhala),
    ('\u{11200}', '\u{11211}', Khojki),
    ('\u{11213}', '\u{1123d}', Khojki),
    ('\u{11280}', '\u{11286}', Multani),
    ('\u{11288}', '\u{11288}', Multani),
    ('\u{1128a}', '\u{1128d}', Multani),
    ('\u{1128f}', '\u{1129d}', Multani),
    ('\u{1129f}', '\u{112a9}', Multani),
    ('\u{112b0}', '\u{112ea}', Khudawadi),
    ('\u{112f0}', '\u{112f9}', Khudawadi),
    ('\u{11300}', '\u{11303}', Grantha),
    ('\u{11305}', '\u{1130c}', Grantha),
    ('\u{1130f}', '\u{11310}', Grantha),
    ('\u{11313}', '\u{11328}', Grantha),
    ('\u{1132a}', '\u{11330}', Grantha),
    ('\u{11332}', '\u{11333}', Grantha),
    ('\u{11335}', '\u{11339}', Grantha),
    ('\u{1133c}', '\u{11344}', Grantha),
    ('\u{11347}', '\u{11348}', Grantha),
    ('\u{1134b}', '\u{1134d}', Grantha),
    ('\u{11350}', '\u{11350}', Grantha),
    ('\u{11357}', '\u{11357}', Grantha),
    ('\u{1135d}', '\u{11363}', Grantha),
    ('\u{11366}', '\u{1136c}', Grantha),
    ('\u{11370}', '\u{11374}', Grantha),
    ('\u{11480}', '\u{114c7}', Tirhuta),
    ('\u{114d0}', '\u{114d9}', Tirhuta),
    ('\u{11580}', '\u{115b5}', Siddham),
    ('\u{115b8}', '\u{115dd}', Siddham),
    ('\u{11600}', '\u{11644}', Modi),
    ('\u{11650}', '\u{11659}', Modi),
    ('\u{11680}', '\u{116b7}', Takri),
    ('\u{116c0}', '\u{116c9}', Takri),
    ('\u{11700}', '\u{11719}', Ahom),
    ('\u{1171d}', '\u{1172b}', Ahom),
    ('\u{11730}', '\u{1173f}', Ahom),
    ('\u{118a0}', '\u{118f2}', Warang_Citi),
    ('\u{118ff}', '\u{118ff}', Warang_Citi),
    ('\u{11ac0}', '\u{11af8}', Pau_Cin_Hau),
    ('\u{12000}', '\u{12399}', Cuneiform),
    ('\u{12400}', '\u{1246e}', Cuneiform),
    ('\u{12470}', '\u{12474}', Cuneiform),
    ('\u{12480}', '\u{12543}', Cuneiform),
    ('\u{13000}', '\u{1342e}', Egyptian_Hieroglyphs),
    ('\u{14400}', '\u{14646}', Anatolian_Hieroglyphs),
    ('\u{16800}', '\u{16a38}', Bamum),
    ('\u{16a40}', '\u{16a5e}', Mro),
    ('\u{16a60}', '\u{16a69}', Mro),
    ('\u{16a6e}', '\u{16a6f}', Mro),
    ('\u{16ad0}', '\u{16aed}', Bassa_Vah),
    ('\u{16af0}', '\u{16af5}', Bassa_Vah),
    ('\u{16b00}', '\u{16b45}', Pahawh_Hmong),
    ('\u{16b50}', '\u{16b59}', Pahawh_Hmong),
    ('\u{16b5b}', '\u{16b61}', Pahawh_Hmong),
    ('\u{16b63}', '\u{16b77}', Pahawh_Hmong),
    ('\u{16b7d}', '\u{16b8f}', Pahawh_Hmong),
    ('\u{16f00}', '\u{16f44}', Miao),
    ('\u{16f50}', '\u{16f7e}', Miao),
    ('\u{16f8f}', '\u{16f9f}', Miao),
    ('\u{1b000}', '\u{1b000}', Katakana),
    ('\u{1b001}', '\u{1b001}', Hiragana),
    ('\u{1bc00}', '\u{1bc6a}', Duployan),
    ('\u{1bc70}', '\u{1bc7c}', Duployan),
    ('\u{1bc80}', '\u{1bc88}', Duployan),
    ('\u{1bc90}', '\u{1bc99}', Duployan),
    ('\u{1bc9c}', '\u{1bc9f}', Duployan),
    ('\u{1bca0}', '\u{1bca3}', Common),
    ('\u{1d000}', '\u{1d0f5}', Common),
    ('\u{1d100}', '\u{1d126}', Common),
    ('\u{1d129}', '\u{1d166}', Common),
    ('\u{1d167}', '\u{1d169}', Inherited),
    ('\u{1d16a}', '\u{1d17a}', Common),
    ('\u{1d17b}', '\u{1d182}', Inherited),
    ('\u{1d183}', '\u{1d184}', Common),
    ('\u{1d185}', '\u{1d18b}', Inherited),
    ('\u{1d18c}', '\u{1d1a9}', Common),
    ('\u{1d1aa}', '\u{1d1ad}', Inherited),
    ('\u{1d1ae}', '\u{1d1e8}', Common),
    ('\u{1d200}', '\u{1d245}', Greek),
    ('\u{1d300}', '\u{1d356}', Common),
    ('\u{1d360}', '\u{1d371}', Common),
    ('\u{1d400}', '\u{1d454}', Common),
    ('\u{1d456}', '\u{1d49c}', Common),
    ('\u{1d49e}', '\u{1d49f}', Common),
    ('\u{1d4a2}', '\u{1d4a2}', Common),
    ('\u{1d4a5}', '\u{1d4a6}', Common),
    ('\u{1d4a9}', '\u{1d4ac}', Common),
    ('\u{1d4ae}', '\u{1d4b9}', Common),
    ('\u{1d4bb}', '\u{1d4bb}', Common),
    ('\u{1d4bd}', '\u{1d4c3}', Common),
    ('\u{1d4c5}', '\u{1d505}', Common),
    ('\u{1d507}', '\u{1d50a}', Common),
    ('\u{1d50d}', '\u{1d514}', Common),
    ('\u{1d516}', '\u{1d51c}', Common),
    ('\u{1d51e}', '\u{1d539}', Common),
    ('\u{1d53b}', '\u{1d53e}', Common),
    ('\u{1d540}', '\u{1d544}', Common),
    ('\u{1d546}', '\u{1d546}', Common),
    ('\u{1d54a}', '\u{1d550}', Common),
    ('\u{1d552}', '\u{1d6a5}', Common),
    ('\u{1d6a8}', '\u{1d7cb}', Common),
    ('\u{1d7ce}', '\u{1d7ff}', Common),
    ('\u{1d800}', '\u{1da8b}', SignWriting),
    ('\u{1da9b}', '\u{1da9f}', SignWriting),
    ('\u{1daa1}', '\u{1daaf}', SignWriting),
    ('\u{1e800}', '\u{1e8c4}', Mende_Kikakui),
    ('\u{1e8c7}', '\u{1e8d6}', Mende_Kikakui),
    ('\u{1ee00}', '\u{1ee03}', Arabic),
    ('\u{1ee05}', '\u{1ee1f}', Arabic),
    ('\u{1ee21}', '\u{1ee22}', Arabic),
    ('\u{1ee24}', '\u{1ee24}', Arabic),
    ('\u{1ee27}', '\u{1ee27}', Arabic),
    ('\u{1ee29}', '\u{1ee32}', Arabic),
    ('\u{1ee34}', '\u{1ee37}', Arabic),
    ('\u{1ee39}', '\u{1ee39}', Arabic),
    ('\u{1ee3b}', '\u{1ee3b}', Arabic),
    ('\u{1ee42}', '\u{1ee42}', Arabic),
    ('\u{1ee47}', '\u{1ee47}', Arabic),
    ('\u{1ee49}', '\u{1ee49}', Arabic),
    ('\u{1ee4b}', '\u{1ee4b}', Arabic),
    ('\u{1ee4d}', '\u{1ee4f}', Arabic),
    ('\u{1ee51}', '\u{1ee52}', Arabic),
    ('\u{1ee54}', '\u{1ee54}', Arabic),
    ('\u{1ee57}', '\u{1ee57}', Arabic),
    ('\u{1ee59}', '\u{1ee59}', Arabic),
    ('\u{1ee5b}', '\u{1ee5b}', Arabic),
    ('\u{1ee5d}', '\u{1ee5d}', Arabic),
    ('\u{1ee5f}', '\u{1ee5f}', Arabic),
    ('\u{1ee61}', '\u{1ee62}', Arabic),
    ('\u{1ee64}', '\u{1ee64}', Arabic),
    ('\u{1ee67}', '\u{1ee6a}', Arabic),
    ('\u{1ee6c}', '\u{1ee72}', Arabic),
    ('\u{1ee74}', '\u{1ee77}', Arabic),
    ('\u{1ee79}', '\u{1ee7c}', Arabic),
    ('\u{1ee7e}', '\u{1ee7e}', Arabic),
    ('\u{1ee80}', '\u{1ee89}', Arabic),
    ('\u{1ee8b}', '\u{1ee9b}', Arabic),
    ('\u{1eea1}', '\u{1eea3}', Arabic),
    ('\u{1eea5}', '\u{1eea9}', Arabic),
    ('\u{1eeab}', '\u{1eebb}', Arabic),
    ('\u{1eef0}', '\u{1eef1}', Arabic),
    ('\u{1f000}', '\u{1f02b}', Common),
    ('\u{1f030}', '\u{1f093}', Common),
    ('\u{1f0a0}', '\u{1f0ae}', Common),
    ('\u{1f0b1}', '\u{1f0bf}', Common),
    ('\u{1f0c1}', '\u{1f0cf}', Common),
    ('\u{1f0d1}', '\u{1f0f5}', Common),
    ('\u{1f100}', '\u{1f10c}', Common),
    ('\u{1f110}', '\u{1f12e}', Common),
    ('\u{1f130}', '\u{1f16b}', Common),
    ('\u{1f170}', '\u{1f19a}', Common),
    ('\u{1f1e6}', '\u{1f1ff}', Common),
    ('\u{1f200}', '\u{1f200}', Hiragana),
    ('\u{1f201}', '\u{1f202}', Common),
    ('\u{1f210}', '\u{1f23a}', Common),
    ('\u{1f240}', '\u{1f248}', Common),
    ('\u{1f250}', '\u{1f251}', Common),
    ('\u{1f300}', '\u{1f579}', Common),
    ('\u{1f57b}', '\u{1f5a3}', Common),
    ('\u{1f5a5}', '\u{1f6d0}', Common),
    ('\u{1f6e0}', '\u{1f6ec}', Common),
    ('\u{1f6f0}', '\u{1f6f3}', Common),
    ('\u{1f700}', '\u{1f773}', Common),
    ('\u{1f780}', '\u{1f7d4}', Common),
    ('\u{1f800}', '\u{1f80b}', Common),
    ('\u{1f810}', '\u{1f847}', Common),
    ('\u{1f850}', '\u{1f859}', Common),
    ('\u{1f860}', '\u{1f887}', Common),
    ('\u{1f890}', '\u{1f8ad}', Common),
    ('\u{1f910}', '\u{1f918}', Common),
    ('\u{1f980}', '\u{1f984}', Common),
    ('\u{1f9c0}', '\u{1f9c0}', Common),
    ('\u{20000}', '\u{2a6d6}', Han),
    ('\u{2a700}', '\u{2b734}', Han),
    ('\u{2b740}', '\u{2b81d}', Han),
    ('\u{2b820}', '\u{2cea1}', Han),
    ('\u{2f800}', '\u{2fa1d}', Han),
    ('\u{e0001}', '\u{e0001}', Common),
    ('\u{e0020}', '\u{e007f}', Common),
    ('\u{e0100}', '\u{e01ef}', Inherited),
];

impl Script {
    pub fn to_hb_script(self) -> harfbuzz_sys::hb_script_t {
        match self {
            Ahom => HB_SCRIPT_AHOM,
            Anatolian_Hieroglyphs => HB_SCRIPT_ANATOLIAN_HIEROGLYPHS,
            Arabic => HB_SCRIPT_ARABIC,
            Armenian => HB_SCRIPT_ARMENIAN,
            Avestan => HB_SCRIPT_AVESTAN,
            Balinese => HB_SCRIPT_BALINESE,
            Bamum => HB_SCRIPT_BAMUM,
            Bassa_Vah => HB_SCRIPT_BASSA_VAH,
            Batak => HB_SCRIPT_BATAK,
            Bengali => HB_SCRIPT_BENGALI,
            Bopomofo => HB_SCRIPT_BOPOMOFO,
            Brahmi => HB_SCRIPT_BRAHMI,
            Braille => HB_SCRIPT_BRAILLE,
            Buginese => HB_SCRIPT_BUGINESE,
            Buhid => HB_SCRIPT_BUHID,
            Canadian_Aboriginal => HB_SCRIPT_CANADIAN_SYLLABICS,
            Carian => HB_SCRIPT_CARIAN,
            Caucasian_Albanian => HB_SCRIPT_CAUCASIAN_ALBANIAN,
            Chakma => HB_SCRIPT_CHAKMA,
            Cham => HB_SCRIPT_CHAM,
            Cherokee => HB_SCRIPT_CHEROKEE,
            Common => HB_SCRIPT_COMMON,
            Coptic => HB_SCRIPT_COPTIC,
            Cuneiform => HB_SCRIPT_CUNEIFORM,
            Cypriot => HB_SCRIPT_CYPRIOT,
            Cyrillic => HB_SCRIPT_CYRILLIC,
            Deseret => HB_SCRIPT_DESERET,
            Devanagari => HB_SCRIPT_DEVANAGARI,
            Duployan => HB_SCRIPT_DUPLOYAN,
            Egyptian_Hieroglyphs => HB_SCRIPT_EGYPTIAN_HIEROGLYPHS,
            Elbasan => HB_SCRIPT_ELBASAN,
            Ethiopic => HB_SCRIPT_ETHIOPIC,
            Georgian => HB_SCRIPT_GEORGIAN,
            Glagolitic => HB_SCRIPT_GLAGOLITIC,
            Gothic => HB_SCRIPT_GOTHIC,
            Grantha => HB_SCRIPT_GRANTHA,
            Greek => HB_SCRIPT_GREEK,
            Gujarati => HB_SCRIPT_GUJARATI,
            Gurmukhi => HB_SCRIPT_GURMUKHI,
            Han => HB_SCRIPT_HAN,
            Hangul => HB_SCRIPT_HANGUL,
            Hanunoo => HB_SCRIPT_HANUNOO,
            Hatran => HB_SCRIPT_HATRAN,
            Hebrew => HB_SCRIPT_HEBREW,
            Hiragana => HB_SCRIPT_HIRAGANA,
            Imperial_Aramaic => HB_SCRIPT_IMPERIAL_ARAMAIC,
            Inherited => HB_SCRIPT_INHERITED,
            Inscriptional_Pahlavi => HB_SCRIPT_INSCRIPTIONAL_PAHLAVI,
            Inscriptional_Parthian => HB_SCRIPT_INSCRIPTIONAL_PARTHIAN,
            Javanese => HB_SCRIPT_JAVANESE,
            Kaithi => HB_SCRIPT_KAITHI,
            Kannada => HB_SCRIPT_KANNADA,
            Katakana => HB_SCRIPT_KATAKANA,
            Kayah_Li => HB_SCRIPT_KAYAH_LI,
            Kharoshthi => HB_SCRIPT_KHAROSHTHI,
            Khmer => HB_SCRIPT_KHMER,
            Khojki => HB_SCRIPT_KHOJKI,
            Khudawadi => HB_SCRIPT_KHUDAWADI,
            Lao => HB_SCRIPT_LAO,
            Latin => HB_SCRIPT_LATIN,
            Lepcha => HB_SCRIPT_LEPCHA,
            Limbu => HB_SCRIPT_LIMBU,
            Linear_A => HB_SCRIPT_LINEAR_A,
            Linear_B => HB_SCRIPT_LINEAR_B,
            Lisu => HB_SCRIPT_LISU,
            Lycian => HB_SCRIPT_LYCIAN,
            Lydian => HB_SCRIPT_LYDIAN,
            Mahajani => HB_SCRIPT_MAHAJANI,
            Malayalam => HB_SCRIPT_MALAYALAM,
            Mandaic => HB_SCRIPT_MANDAIC,
            Manichaean => HB_SCRIPT_MANICHAEAN,
            Meetei_Mayek => HB_SCRIPT_MEETEI_MAYEK,
            Mende_Kikakui => HB_SCRIPT_MENDE_KIKAKUI,
            Meroitic_Cursive => HB_SCRIPT_MEROITIC_CURSIVE,
            Meroitic_Hieroglyphs => HB_SCRIPT_MEROITIC_HIEROGLYPHS,
            Miao => HB_SCRIPT_MIAO,
            Modi => HB_SCRIPT_MODI,
            Mongolian => HB_SCRIPT_MONGOLIAN,
            Mro => HB_SCRIPT_MRO,
            Multani => HB_SCRIPT_MULTANI,
            Myanmar => HB_SCRIPT_MYANMAR,
            Nabataean => HB_SCRIPT_NABATAEAN,
            New_Tai_Lue => HB_SCRIPT_NEW_TAI_LUE,
            Nko => HB_SCRIPT_NKO,
            Ogham => HB_SCRIPT_OGHAM,
            Ol_Chiki => HB_SCRIPT_OL_CHIKI,
            Old_Hungarian => HB_SCRIPT_OLD_HUNGARIAN,
            Old_Italic => HB_SCRIPT_OLD_ITALIC,
            Old_North_Arabian => HB_SCRIPT_OLD_NORTH_ARABIAN,
            Old_Permic => HB_SCRIPT_OLD_PERMIC,
            Old_Persian => HB_SCRIPT_OLD_PERSIAN,
            Old_South_Arabian => HB_SCRIPT_OLD_SOUTH_ARABIAN,
            Old_Turkic => HB_SCRIPT_OLD_TURKIC,
            Oriya => HB_SCRIPT_ORIYA,
            Osmanya => HB_SCRIPT_OSMANYA,
            Pahawh_Hmong => HB_SCRIPT_PAHAWH_HMONG,
            Palmyrene => HB_SCRIPT_PALMYRENE,
            Pau_Cin_Hau => HB_SCRIPT_PAU_CIN_HAU,
            Phags_Pa => HB_SCRIPT_PHAGS_PA,
            Phoenician => HB_SCRIPT_PHOENICIAN,
            Psalter_Pahlavi => HB_SCRIPT_PSALTER_PAHLAVI,
            Rejang => HB_SCRIPT_REJANG,
            Runic => HB_SCRIPT_RUNIC,
            Samaritan => HB_SCRIPT_SAMARITAN,
            Saurashtra => HB_SCRIPT_SAURASHTRA,
            Sharada => HB_SCRIPT_SHARADA,
            Shavian => HB_SCRIPT_SHAVIAN,
            Siddham => HB_SCRIPT_SIDDHAM,
            SignWriting => HB_SCRIPT_SIGNWRITING,
            Sinhala => HB_SCRIPT_SINHALA,
            Sora_Sompeng => HB_SCRIPT_SORA_SOMPENG,
            Sundanese => HB_SCRIPT_SUNDANESE,
            Syloti_Nagri => HB_SCRIPT_SYLOTI_NAGRI,
            Syriac => HB_SCRIPT_SYRIAC,
            Tagalog => HB_SCRIPT_TAGALOG,
            Tagbanwa => HB_SCRIPT_TAGBANWA,
            Tai_Le => HB_SCRIPT_TAI_LE,
            Tai_Tham => HB_SCRIPT_TAI_THAM,
            Tai_Viet => HB_SCRIPT_TAI_VIET,
            Takri => HB_SCRIPT_TAKRI,
            Tamil => HB_SCRIPT_TAMIL,
            Telugu => HB_SCRIPT_TELUGU,
            Thaana => HB_SCRIPT_THAANA,
            Thai => HB_SCRIPT_THAI,
            Tibetan => HB_SCRIPT_TIBETAN,
            Tifinagh => HB_SCRIPT_TIFINAGH,
            Tirhuta => HB_SCRIPT_TIRHUTA,
            Ugaritic => HB_SCRIPT_UGARITIC,
            Unknown => HB_SCRIPT_UNKNOWN,
            Vai => HB_SCRIPT_VAI,
            Warang_Citi => HB_SCRIPT_WARANG_CITI,
            Yi => HB_SCRIPT_YI,
        }
    }
}