""" The hardcoded information on this module was loaded from the Unicode file Scripts-16.0.0.txt https://www.unicode.org/Public/UNIDATA/Scripts.txt Python's standard "unicodedata" library doesn't offer this table. """ from enum import IntEnum from functools import lru_cache class UnicodeScript(IntEnum): COMMON = 0 LATIN = 1 GREEK = 2 CYRILLIC = 3 ARMENIAN = 4 HEBREW = 5 ARABIC = 6 SYRIAC = 7 THAANA = 8 DEVANAGARI = 9 BENGALI = 10 GURMUKHI = 11 GUJARATI = 12 ORIYA = 13 TAMIL = 14 TELUGU = 15 KANNADA = 16 MALAYALAM = 17 SINHALA = 18 THAI = 19 LAO = 20 TIBETAN = 21 MYANMAR = 22 GEORGIAN = 23 HANGUL = 24 ETHIOPIC = 25 CHEROKEE = 26 CANADIAN_ABORIGINAL = 27 OGHAM = 28 RUNIC = 29 KHMER = 30 MONGOLIAN = 31 HIRAGANA = 32 KATAKANA = 33 BOPOMOFO = 34 HAN = 35 YI = 36 OLD_ITALIC = 37 GOTHIC = 38 DESERET = 39 INHERITED = 40 TAGALOG = 41 HANUNOO = 42 BUHID = 43 TAGBANWA = 44 LIMBU = 45 TAI_LE = 46 LINEAR_B = 47 UGARITIC = 48 SHAVIAN = 49 OSMANYA = 50 CYPRIOT = 51 BRAILLE = 52 BUGINESE = 53 COPTIC = 54 NEW_TAI_LUE = 55 GLAGOLITIC = 56 TIFINAGH = 57 SYLOTI_NAGRI = 58 OLD_PERSIAN = 59 KHAROSHTHI = 60 BALINESE = 61 CUNEIFORM = 62 PHOENICIAN = 63 PHAGS_PA = 64 NKO = 65 SUNDANESE = 66 LEPCHA = 67 OL_CHIKI = 68 VAI = 69 SAURASHTRA = 70 KAYAH_LI = 71 REJANG = 72 LYCIAN = 73 CARIAN = 74 LYDIAN = 75 CHAM = 76 TAI_THAM = 77 TAI_VIET = 78 AVESTAN = 79 EGYPTIAN_HIEROGLYPHS = 80 SAMARITAN = 81 LISU = 82 BAMUM = 83 JAVANESE = 84 MEETEI_MAYEK = 85 IMPERIAL_ARAMAIC = 86 OLD_SOUTH_ARABIAN = 87 INSCRIPTIONAL_PARTHIAN = 88 INSCRIPTIONAL_PAHLAVI = 89 OLD_TURKIC = 90 KAITHI = 91 BATAK = 92 BRAHMI = 93 MANDAIC = 94 CHAKMA = 95 MEROITIC_CURSIVE = 96 MEROITIC_HIEROGLYPHS = 97 MIAO = 98 SHARADA = 99 SORA_SOMPENG = 100 TAKRI = 101 CAUCASIAN_ALBANIAN = 102 BASSA_VAH = 103 DUPLOYAN = 104 ELBASAN = 105 GRANTHA = 106 PAHAWH_HMONG = 107 KHOJKI = 108 LINEAR_A = 109 MAHAJANI = 110 MANICHAEAN = 111 MENDE_KIKAKUI = 112 MODI = 113 MRO = 114 OLD_NORTH_ARABIAN = 115 NABATAEAN = 116 PALMYRENE = 117 PAU_CIN_HAU = 118 OLD_PERMIC = 119 PSALTER_PAHLAVI = 120 SIDDHAM = 121 KHUDAWADI = 122 TIRHUTA = 123 WARANG_CITI = 124 AHOM = 125 ANATOLIAN_HIEROGLYPHS = 126 HATRAN = 127 MULTANI = 128 OLD_HUNGARIAN = 129 SIGNWRITING = 130 ADLAM = 131 BHAIKSUKI = 132 MARCHEN = 133 NEWA = 134 OSAGE = 135 TANGUT = 136 MASARAM_GONDI = 137 NUSHU = 138 SOYOMBO = 139 ZANABAZAR_SQUARE = 140 DOGRA = 141 GUNJALA_GONDI = 142 MAKASAR = 143 MEDEFAIDRIN = 144 HANIFI_ROHINGYA = 145 SOGDIAN = 146 OLD_SOGDIAN = 147 ELYMAIC = 148 NANDINAGARI = 149 NYIAKENG_PUACHUE_HMONG = 150 WANCHO = 151 CHORASMIAN = 152 DIVES_AKURU = 153 KHITAN_SMALL_SCRIPT = 154 YEZIDI = 155 CYPRO_MINOAN = 156 OLD_UYGHUR = 157 TANGSA = 158 TOTO = 159 VITHKUQI = 160 KAWI = 161 NAG_MUNDARI = 162 GARAY = 163 GURUNG_KHEMA = 164 KIRAT_RAI = 165 OL_ONAL = 166 SUNUWAR = 167 TODHRI = 168 TULU_TIGALARI = 169 UNKNOWN = 999 UNICODE_RANGE_TO_SCRIPT: tuple[tuple[int, int, int], ...] = ( (0, 64, 0), (65, 90, 1), (91, 96, 0), (97, 122, 1), (123, 169, 0), (170, 170, 1), (171, 185, 0), (186, 186, 1), (187, 191, 0), (192, 214, 1), (215, 215, 0), (216, 246, 1), (247, 247, 0), (248, 696, 1), (697, 735, 0), (736, 740, 1), (741, 745, 0), (746, 747, 34), (748, 767, 0), (768, 879, 40), (880, 883, 2), (884, 884, 0), (885, 887, 2), (890, 893, 2), (894, 894, 0), (895, 895, 2), (900, 900, 2), (901, 901, 0), (902, 902, 2), (903, 903, 0), (904, 906, 2), (908, 908, 2), (910, 929, 2), (931, 993, 2), (994, 1007, 54), (1008, 1023, 2), (1024, 1156, 3), (1157, 1158, 40), (1159, 1327, 3), (1329, 1366, 4), (1369, 1418, 4), (1421, 1423, 4), (1425, 1479, 5), (1488, 1514, 5), (1519, 1524, 5), (1536, 1540, 6), (1541, 1541, 0), (1542, 1547, 6), (1548, 1548, 0), (1549, 1562, 6), (1563, 1563, 0), (1564, 1566, 6), (1567, 1567, 0), (1568, 1599, 6), (1600, 1600, 0), (1601, 1610, 6), (1611, 1621, 40), (1622, 1647, 6), (1648, 1648, 40), (1649, 1756, 6), (1757, 1757, 0), (1758, 1791, 6), (1792, 1805, 7), (1807, 1866, 7), (1869, 1871, 7), (1872, 1919, 6), (1920, 1969, 8), (1984, 2042, 65), (2045, 2047, 65), (2048, 2093, 81), (2096, 2110, 81), (2112, 2139, 94), (2142, 2142, 94), (2144, 2154, 7), (2160, 2190, 6), (2192, 2193, 6), (2199, 2273, 6), (2274, 2274, 0), (2275, 2303, 6), (2304, 2384, 9), (2385, 2388, 40), (2389, 2403, 9), (2404, 2405, 0), (2406, 2431, 9), (2432, 2435, 10), (2437, 2444, 10), (2447, 2448, 10), (2451, 2472, 10), (2474, 2480, 10), (2482, 2482, 10), (2486, 2489, 10), (2492, 2500, 10), (2503, 2504, 10), (2507, 2510, 10), (2519, 2519, 10), (2524, 2525, 10), (2527, 2531, 10), (2534, 2558, 10), (2561, 2563, 11), (2565, 2570, 11), (2575, 2576, 11), (2579, 2600, 11), (2602, 2608, 11), (2610, 2611, 11), (2613, 2614, 11), (2616, 2617, 11), (2620, 2620, 11), (2622, 2626, 11), (2631, 2632, 11), (2635, 2637, 11), (2641, 2641, 11), (2649, 2652, 11), (2654, 2654, 11), (2662, 2678, 11), (2689, 2691, 12), (2693, 2701, 12), (2703, 2705, 12), (2707, 2728, 12), (2730, 2736, 12), (2738, 2739, 12), (2741, 2745, 12), (2748, 2757, 12), (2759, 2761, 12), (2763, 2765, 12), (2768, 2768, 12), (2784, 2787, 12), (2790, 2801, 12), (2809, 2815, 12), (2817, 2819, 13), (2821, 2828, 13), (2831, 2832, 13), (2835, 2856, 13), (2858, 2864, 13), (2866, 2867, 13), (2869, 2873, 13), (2876, 2884, 13), (2887, 2888, 13), (2891, 2893, 13), (2901, 2903, 13), (2908, 2909, 13), (2911, 2915, 13), (2918, 2935, 13), (2946, 2947, 14), (2949, 2954, 14), (2958, 2960, 14), (2962, 2965, 14), (2969, 2970, 14), (2972, 2972, 14), (2974, 2975, 14), (2979, 2980, 14), (2984, 2986, 14), (2990, 3001, 14), (3006, 3010, 14), (3014, 3016, 14), (3018, 3021, 14), (3024, 3024, 14), (3031, 3031, 14), (3046, 3066, 14), (3072, 3084, 15), (3086, 3088, 15), (3090, 3112, 15), (3114, 3129, 15), (3132, 3140, 15), (3142, 3144, 15), (3146, 3149, 15), (3157, 3158, 15), (3160, 3162, 15), (3165, 3165, 15), (3168, 3171, 15), (3174, 3183, 15), (3191, 3199, 15), (3200, 3212, 16), (3214, 3216, 16), (3218, 3240, 16), (3242, 3251, 16), (3253, 3257, 16), (3260, 3268, 16), (3270, 3272, 16), (3274, 3277, 16), (3285, 3286, 16), (3293, 3294, 16), (3296, 3299, 16), (3302, 3311, 16), (3313, 3315, 16), (3328, 3340, 17), (3342, 3344, 17), (3346, 3396, 17), (3398, 3400, 17), (3402, 3407, 17), (3412, 3427, 17), (3430, 3455, 17), (3457, 3459, 18), (3461, 3478, 18), (3482, 3505, 18), (3507, 3515, 18), (3517, 3517, 18), (3520, 3526, 18), (3530, 3530, 18), (3535, 3540, 18), (3542, 3542, 18), (3544, 3551, 18), (3558, 3567, 18), (3570, 3572, 18), (3585, 3642, 19), (3647, 3647, 0), (3648, 3675, 19), (3713, 3714, 20), (3716, 3716, 20), (3718, 3722, 20), (3724, 3747, 20), (3749, 3749, 20), (3751, 3773, 20), (3776, 3780, 20), (3782, 3782, 20), (3784, 3790, 20), (3792, 3801, 20), (3804, 3807, 20), (3840, 3911, 21), (3913, 3948, 21), (3953, 3991, 21), (3993, 4028, 21), (4030, 4044, 21), (4046, 4052, 21), (4053, 4056, 0), (4057, 4058, 21), (4096, 4255, 22), (4256, 4293, 23), (4295, 4295, 23), (4301, 4301, 23), (4304, 4346, 23), (4347, 4347, 0), (4348, 4351, 23), (4352, 4607, 24), (4608, 4680, 25), (4682, 4685, 25), (4688, 4694, 25), (4696, 4696, 25), (4698, 4701, 25), (4704, 4744, 25), (4746, 4749, 25), (4752, 4784, 25), (4786, 4789, 25), (4792, 4798, 25), (4800, 4800, 25), (4802, 4805, 25), (4808, 4822, 25), (4824, 4880, 25), (4882, 4885, 25), (4888, 4954, 25), (4957, 4988, 25), (4992, 5017, 25), (5024, 5109, 26), (5112, 5117, 26), (5120, 5759, 27), (5760, 5788, 28), (5792, 5866, 29), (5867, 5869, 0), (5870, 5880, 29), (5888, 5909, 41), (5919, 5919, 41), (5920, 5940, 42), (5941, 5942, 0), (5952, 5971, 43), (5984, 5996, 44), (5998, 6000, 44), (6002, 6003, 44), (6016, 6109, 30), (6112, 6121, 30), (6128, 6137, 30), (6144, 6145, 31), (6146, 6147, 0), (6148, 6148, 31), (6149, 6149, 0), (6150, 6169, 31), (6176, 6264, 31), (6272, 6314, 31), (6320, 6389, 27), (6400, 6430, 45), (6432, 6443, 45), (6448, 6459, 45), (6464, 6464, 45), (6468, 6479, 45), (6480, 6509, 46), (6512, 6516, 46), (6528, 6571, 55), (6576, 6601, 55), (6608, 6618, 55), (6622, 6623, 55), (6624, 6655, 30), (6656, 6683, 53), (6686, 6687, 53), (6688, 6750, 77), (6752, 6780, 77), (6783, 6793, 77), (6800, 6809, 77), (6816, 6829, 77), (6832, 6862, 40), (6912, 6988, 61), (6990, 7039, 61), (7040, 7103, 66), (7104, 7155, 92), (7164, 7167, 92), (7168, 7223, 67), (7227, 7241, 67), (7245, 7247, 67), (7248, 7295, 68), (7296, 7306, 3), (7312, 7354, 23), (7357, 7359, 23), (7360, 7367, 66), (7376, 7378, 40), (7379, 7379, 0), (7380, 7392, 40), (7393, 7393, 0), (7394, 7400, 40), (7401, 7404, 0), (7405, 7405, 40), (7406, 7411, 0), (7412, 7412, 40), (7413, 7415, 0), (7416, 7417, 40), (7418, 7418, 0), (7424, 7461, 1), (7462, 7466, 2), (7467, 7467, 3), (7468, 7516, 1), (7517, 7521, 2), (7522, 7525, 1), (7526, 7530, 2), (7531, 7543, 1), (7544, 7544, 3), (7545, 7614, 1), (7615, 7615, 2), (7616, 7679, 40), (7680, 7935, 1), (7936, 7957, 2), (7960, 7965, 2), (7968, 8005, 2), (8008, 8013, 2), (8016, 8023, 2), (8025, 8025, 2), (8027, 8027, 2), (8029, 8029, 2), (8031, 8061, 2), (8064, 8116, 2), (8118, 8132, 2), (8134, 8147, 2), (8150, 8155, 2), (8157, 8175, 2), (8178, 8180, 2), (8182, 8190, 2), (8192, 8203, 0), (8204, 8205, 40), (8206, 8292, 0), (8294, 8304, 0), (8305, 8305, 1), (8308, 8318, 0), (8319, 8319, 1), (8320, 8334, 0), (8336, 8348, 1), (8352, 8384, 0), (8400, 8432, 40), (8448, 8485, 0), (8486, 8486, 2), (8487, 8489, 0), (8490, 8491, 1), (8492, 8497, 0), (8498, 8498, 1), (8499, 8525, 0), (8526, 8526, 1), (8527, 8543, 0), (8544, 8584, 1), (8585, 8587, 0), (8592, 9257, 0), (9280, 9290, 0), (9312, 10239, 0), (10240, 10495, 52), (10496, 11123, 0), (11126, 11157, 0), (11159, 11263, 0), (11264, 11359, 56), (11360, 11391, 1), (11392, 11507, 54), (11513, 11519, 54), (11520, 11557, 23), (11559, 11559, 23), (11565, 11565, 23), (11568, 11623, 57), (11631, 11632, 57), (11647, 11647, 57), (11648, 11670, 25), (11680, 11686, 25), (11688, 11694, 25), (11696, 11702, 25), (11704, 11710, 25), (11712, 11718, 25), (11720, 11726, 25), (11728, 11734, 25), (11736, 11742, 25), (11744, 11775, 3), (11776, 11869, 0), (11904, 11929, 35), (11931, 12019, 35), (12032, 12245, 35), (12272, 12292, 0), (12293, 12293, 35), (12294, 12294, 0), (12295, 12295, 35), (12296, 12320, 0), (12321, 12329, 35), (12330, 12333, 40), (12334, 12335, 24), (12336, 12343, 0), (12344, 12347, 35), (12348, 12351, 0), (12353, 12438, 32), (12441, 12442, 40), (12443, 12444, 0), (12445, 12447, 32), (12448, 12448, 0), (12449, 12538, 33), (12539, 12540, 0), (12541, 12543, 33), (12549, 12591, 34), (12593, 12686, 24), (12688, 12703, 0), (12704, 12735, 34), (12736, 12773, 0), (12783, 12783, 0), (12784, 12799, 33), (12800, 12830, 24), (12832, 12895, 0), (12896, 12926, 24), (12927, 13007, 0), (13008, 13054, 33), (13055, 13055, 0), (13056, 13143, 33), (13144, 13311, 0), (13312, 19903, 35), (19904, 19967, 0), (19968, 40959, 35), (40960, 42124, 36), (42128, 42182, 36), (42192, 42239, 82), (42240, 42539, 69), (42560, 42655, 3), (42656, 42743, 83), (42752, 42785, 0), (42786, 42887, 1), (42888, 42890, 0), (42891, 42957, 1), (42960, 42961, 1), (42963, 42963, 1), (42965, 42972, 1), (42994, 43007, 1), (43008, 43052, 58), (43056, 43065, 0), (43072, 43127, 64), (43136, 43205, 70), (43214, 43225, 70), (43232, 43263, 9), (43264, 43309, 71), (43310, 43310, 0), (43311, 43311, 71), (43312, 43347, 72), (43359, 43359, 72), (43360, 43388, 24), (43392, 43469, 84), (43471, 43471, 0), (43472, 43481, 84), (43486, 43487, 84), (43488, 43518, 22), (43520, 43574, 76), (43584, 43597, 76), (43600, 43609, 76), (43612, 43615, 76), (43616, 43647, 22), (43648, 43714, 78), (43739, 43743, 78), (43744, 43766, 85), (43777, 43782, 25), (43785, 43790, 25), (43793, 43798, 25), (43808, 43814, 25), (43816, 43822, 25), (43824, 43866, 1), (43867, 43867, 0), (43868, 43876, 1), (43877, 43877, 2), (43878, 43881, 1), (43882, 43883, 0), (43888, 43967, 26), (43968, 44013, 85), (44016, 44025, 85), (44032, 55203, 24), (55216, 55238, 24), (55243, 55291, 24), (63744, 64109, 35), (64112, 64217, 35), (64256, 64262, 1), (64275, 64279, 4), (64285, 64310, 5), (64312, 64316, 5), (64318, 64318, 5), (64320, 64321, 5), (64323, 64324, 5), (64326, 64335, 5), (64336, 64450, 6), (64467, 64829, 6), (64830, 64831, 0), (64832, 64911, 6), (64914, 64967, 6), (64975, 64975, 6), (65008, 65023, 6), (65024, 65039, 40), (65040, 65049, 0), (65056, 65069, 40), (65070, 65071, 3), (65072, 65106, 0), (65108, 65126, 0), (65128, 65131, 0), (65136, 65140, 6), (65142, 65276, 6), (65279, 65279, 0), (65281, 65312, 0), (65313, 65338, 1), (65339, 65344, 0), (65345, 65370, 1), (65371, 65381, 0), (65382, 65391, 33), (65392, 65392, 0), (65393, 65437, 33), (65438, 65439, 0), (65440, 65470, 24), (65474, 65479, 24), (65482, 65487, 24), (65490, 65495, 24), (65498, 65500, 24), (65504, 65510, 0), (65512, 65518, 0), (65529, 65533, 0), (65536, 65547, 47), (65549, 65574, 47), (65576, 65594, 47), (65596, 65597, 47), (65599, 65613, 47), (65616, 65629, 47), (65664, 65786, 47), (65792, 65794, 0), (65799, 65843, 0), (65847, 65855, 0), (65856, 65934, 2), (65936, 65948, 0), (65952, 65952, 2), (66000, 66044, 0), (66045, 66045, 40), (66176, 66204, 73), (66208, 66256, 74), (66272, 66272, 40), (66273, 66299, 0), (66304, 66339, 37), (66349, 66351, 37), (66352, 66378, 38), (66384, 66426, 119), (66432, 66461, 48), (66463, 66463, 48), (66464, 66499, 59), (66504, 66517, 59), (66560, 66639, 39), (66640, 66687, 49), (66688, 66717, 50), (66720, 66729, 50), (66736, 66771, 135), (66776, 66811, 135), (66816, 66855, 105), (66864, 66915, 102), (66927, 66927, 102), (66928, 66938, 160), (66940, 66954, 160), (66956, 66962, 160), (66964, 66965, 160), (66967, 66977, 160), (66979, 66993, 160), (66995, 67001, 160), (67003, 67004, 160), (67008, 67059, 168), (67072, 67382, 109), (67392, 67413, 109), (67424, 67431, 109), (67456, 67461, 1), (67463, 67504, 1), (67506, 67514, 1), (67584, 67589, 51), (67592, 67592, 51), (67594, 67637, 51), (67639, 67640, 51), (67644, 67644, 51), (67647, 67647, 51), (67648, 67669, 86), (67671, 67679, 86), (67680, 67711, 117), (67712, 67742, 116), (67751, 67759, 116), (67808, 67826, 127), (67828, 67829, 127), (67835, 67839, 127), (67840, 67867, 63), (67871, 67871, 63), (67872, 67897, 75), (67903, 67903, 75), (67968, 67999, 97), (68000, 68023, 96), (68028, 68047, 96), (68050, 68095, 96), (68096, 68099, 60), (68101, 68102, 60), (68108, 68115, 60), (68117, 68119, 60), (68121, 68149, 60), (68152, 68154, 60), (68159, 68168, 60), (68176, 68184, 60), (68192, 68223, 87), (68224, 68255, 115), (68288, 68326, 111), (68331, 68342, 111), (68352, 68405, 79), (68409, 68415, 79), (68416, 68437, 88), (68440, 68447, 88), (68448, 68466, 89), (68472, 68479, 89), (68480, 68497, 120), (68505, 68508, 120), (68521, 68527, 120), (68608, 68680, 90), (68736, 68786, 129), (68800, 68850, 129), (68858, 68863, 129), (68864, 68903, 145), (68912, 68921, 145), (68928, 68965, 163), (68969, 68997, 163), (69006, 69007, 163), (69216, 69246, 6), (69248, 69289, 155), (69291, 69293, 155), (69296, 69297, 155), (69314, 69316, 6), (69372, 69375, 6), (69376, 69415, 147), (69424, 69465, 146), (69488, 69513, 157), (69552, 69579, 152), (69600, 69622, 148), (69632, 69709, 93), (69714, 69749, 93), (69759, 69759, 93), (69760, 69826, 91), (69837, 69837, 91), (69840, 69864, 100), (69872, 69881, 100), (69888, 69940, 95), (69942, 69959, 95), (69968, 70006, 110), (70016, 70111, 99), (70113, 70132, 18), (70144, 70161, 108), (70163, 70209, 108), (70272, 70278, 128), (70280, 70280, 128), (70282, 70285, 128), (70287, 70301, 128), (70303, 70313, 128), (70320, 70378, 122), (70384, 70393, 122), (70400, 70403, 106), (70405, 70412, 106), (70415, 70416, 106), (70419, 70440, 106), (70442, 70448, 106), (70450, 70451, 106), (70453, 70457, 106), (70459, 70459, 40), (70460, 70468, 106), (70471, 70472, 106), (70475, 70477, 106), (70480, 70480, 106), (70487, 70487, 106), (70493, 70499, 106), (70502, 70508, 106), (70512, 70516, 106), (70528, 70537, 169), (70539, 70539, 169), (70542, 70542, 169), (70544, 70581, 169), (70583, 70592, 169), (70594, 70594, 169), (70597, 70597, 169), (70599, 70602, 169), (70604, 70613, 169), (70615, 70616, 169), (70625, 70626, 169), (70656, 70747, 134), (70749, 70753, 134), (70784, 70855, 123), (70864, 70873, 123), (71040, 71093, 121), (71096, 71133, 121), (71168, 71236, 113), (71248, 71257, 113), (71264, 71276, 31), (71296, 71353, 101), (71360, 71369, 101), (71376, 71395, 22), (71424, 71450, 125), (71453, 71467, 125), (71472, 71494, 125), (71680, 71739, 141), (71840, 71922, 124), (71935, 71935, 124), (71936, 71942, 153), (71945, 71945, 153), (71948, 71955, 153), (71957, 71958, 153), (71960, 71989, 153), (71991, 71992, 153), (71995, 72006, 153), (72016, 72025, 153), (72096, 72103, 149), (72106, 72151, 149), (72154, 72164, 149), (72192, 72263, 140), (72272, 72354, 139), (72368, 72383, 27), (72384, 72440, 118), (72448, 72457, 9), (72640, 72673, 167), (72688, 72697, 167), (72704, 72712, 132), (72714, 72758, 132), (72760, 72773, 132), (72784, 72812, 132), (72816, 72847, 133), (72850, 72871, 133), (72873, 72886, 133), (72960, 72966, 137), (72968, 72969, 137), (72971, 73014, 137), (73018, 73018, 137), (73020, 73021, 137), (73023, 73031, 137), (73040, 73049, 137), (73056, 73061, 142), (73063, 73064, 142), (73066, 73102, 142), (73104, 73105, 142), (73107, 73112, 142), (73120, 73129, 142), (73440, 73464, 143), (73472, 73488, 161), (73490, 73530, 161), (73534, 73562, 161), (73648, 73648, 82), (73664, 73713, 14), (73727, 73727, 14), (73728, 74649, 62), (74752, 74862, 62), (74864, 74868, 62), (74880, 75075, 62), (77712, 77810, 156), (77824, 78933, 80), (78944, 82938, 80), (82944, 83526, 126), (90368, 90425, 164), (92160, 92728, 83), (92736, 92766, 114), (92768, 92777, 114), (92782, 92783, 114), (92784, 92862, 158), (92864, 92873, 158), (92880, 92909, 103), (92912, 92917, 103), (92928, 92997, 107), (93008, 93017, 107), (93019, 93025, 107), (93027, 93047, 107), (93053, 93071, 107), (93504, 93561, 165), (93760, 93850, 144), (93952, 94026, 98), (94031, 94087, 98), (94095, 94111, 98), (94176, 94176, 136), (94177, 94177, 138), (94178, 94179, 35), (94180, 94180, 154), (94192, 94193, 35), (94208, 100343, 136), (100352, 101119, 136), (101120, 101589, 154), (101631, 101631, 154), (101632, 101640, 136), (110576, 110579, 33), (110581, 110587, 33), (110589, 110590, 33), (110592, 110592, 33), (110593, 110879, 32), (110880, 110882, 33), (110898, 110898, 32), (110928, 110930, 32), (110933, 110933, 33), (110948, 110951, 33), (110960, 111355, 138), (113664, 113770, 104), (113776, 113788, 104), (113792, 113800, 104), (113808, 113817, 104), (113820, 113823, 104), (113824, 113827, 0), (117760, 118009, 0), (118016, 118451, 0), (118528, 118573, 40), (118576, 118598, 40), (118608, 118723, 0), (118784, 119029, 0), (119040, 119078, 0), (119081, 119142, 0), (119143, 119145, 40), (119146, 119162, 0), (119163, 119170, 40), (119171, 119172, 0), (119173, 119179, 40), (119180, 119209, 0), (119210, 119213, 40), (119214, 119274, 0), (119296, 119365, 2), (119488, 119507, 0), (119520, 119539, 0), (119552, 119638, 0), (119648, 119672, 0), (119808, 119892, 0), (119894, 119964, 0), (119966, 119967, 0), (119970, 119970, 0), (119973, 119974, 0), (119977, 119980, 0), (119982, 119993, 0), (119995, 119995, 0), (119997, 120003, 0), (120005, 120069, 0), (120071, 120074, 0), (120077, 120084, 0), (120086, 120092, 0), (120094, 120121, 0), (120123, 120126, 0), (120128, 120132, 0), (120134, 120134, 0), (120138, 120144, 0), (120146, 120485, 0), (120488, 120779, 0), (120782, 120831, 0), (120832, 121483, 130), (121499, 121503, 130), (121505, 121519, 130), (122624, 122654, 1), (122661, 122666, 1), (122880, 122886, 56), (122888, 122904, 56), (122907, 122913, 56), (122915, 122916, 56), (122918, 122922, 56), (122928, 122989, 3), (123023, 123023, 3), (123136, 123180, 150), (123184, 123197, 150), (123200, 123209, 150), (123214, 123215, 150), (123536, 123566, 159), (123584, 123641, 151), (123647, 123647, 151), (124112, 124153, 162), (124368, 124410, 166), (124415, 124415, 166), (124896, 124902, 25), (124904, 124907, 25), (124909, 124910, 25), (124912, 124926, 25), (124928, 125124, 112), (125127, 125142, 112), (125184, 125259, 131), (125264, 125273, 131), (125278, 125279, 131), (126065, 126132, 0), (126209, 126269, 0), (126464, 126467, 6), (126469, 126495, 6), (126497, 126498, 6), (126500, 126500, 6), (126503, 126503, 6), (126505, 126514, 6), (126516, 126519, 6), (126521, 126521, 6), (126523, 126523, 6), (126530, 126530, 6), (126535, 126535, 6), (126537, 126537, 6), (126539, 126539, 6), (126541, 126543, 6), (126545, 126546, 6), (126548, 126548, 6), (126551, 126551, 6), (126553, 126553, 6), (126555, 126555, 6), (126557, 126557, 6), (126559, 126559, 6), (126561, 126562, 6), (126564, 126564, 6), (126567, 126570, 6), (126572, 126578, 6), (126580, 126583, 6), (126585, 126588, 6), (126590, 126590, 6), (126592, 126601, 6), (126603, 126619, 6), (126625, 126627, 6), (126629, 126633, 6), (126635, 126651, 6), (126704, 126705, 6), (126976, 127019, 0), (127024, 127123, 0), (127136, 127150, 0), (127153, 127167, 0), (127169, 127183, 0), (127185, 127221, 0), (127232, 127405, 0), (127462, 127487, 0), (127488, 127488, 32), (127489, 127490, 0), (127504, 127547, 0), (127552, 127560, 0), (127568, 127569, 0), (127584, 127589, 0), (127744, 128727, 0), (128732, 128748, 0), (128752, 128764, 0), (128768, 128886, 0), (128891, 128985, 0), (128992, 129003, 0), (129008, 129008, 0), (129024, 129035, 0), (129040, 129095, 0), (129104, 129113, 0), (129120, 129159, 0), (129168, 129197, 0), (129200, 129211, 0), (129216, 129217, 0), (129280, 129619, 0), (129632, 129645, 0), (129648, 129660, 0), (129664, 129673, 0), (129679, 129734, 0), (129742, 129756, 0), (129759, 129769, 0), (129776, 129784, 0), (129792, 129938, 0), (129940, 130041, 0), (131072, 173791, 35), (173824, 177977, 35), (177984, 178205, 35), (178208, 183969, 35), (183984, 191456, 35), (191472, 192093, 35), (194560, 195101, 35), (196608, 201546, 35), (201552, 205743, 35), (917505, 917505, 0), (917536, 917631, 0), (917760, 917999, 40), ) @lru_cache(maxsize=None) def get_unicode_script(char: str) -> UnicodeScript: chr_search = ord(char) for range_start, range_end, script_code in UNICODE_RANGE_TO_SCRIPT: if range_start <= chr_search <= range_end: return UnicodeScript(script_code) if chr_search < range_start: break return UnicodeScript(999) # default to Unknown