pub(crate) const ANY: u8 = 0;
pub(crate) const HAN: u8 = 42;
pub(crate) const HIRAGANA: u8 = 47;
pub(crate) const KATAKANA: u8 = 55;
pub(crate) static RANGES: &[(u32, u32, u8)] = &[
(0x0, 0x40, 24),
(0x41, 0x5A, 62),
(0x5B, 0x60, 24),
(0x61, 0x7A, 62),
(0x7B, 0xA9, 24),
(0xAA, 0xAA, 62),
(0xAB, 0xB9, 24),
(0xBA, 0xBA, 62),
(0xBB, 0xBF, 24),
(0xC0, 0xD6, 62),
(0xD7, 0xD7, 24),
(0xD8, 0xF6, 62),
(0xF7, 0xF7, 24),
(0xF8, 0x2B8, 62),
(0x2B9, 0x2DF, 24),
(0x2E0, 0x2E4, 62),
(0x2E5, 0x2E9, 24),
(0x2EA, 0x2EB, 13),
(0x2EC, 0x2FF, 24),
(0x300, 0x36F, 49),
(0x370, 0x373, 39),
(0x374, 0x374, 24),
(0x375, 0x377, 39),
(0x37A, 0x37D, 39),
(0x37E, 0x37E, 24),
(0x37F, 0x37F, 39),
(0x384, 0x384, 39),
(0x385, 0x385, 24),
(0x386, 0x386, 39),
(0x387, 0x387, 24),
(0x388, 0x38A, 39),
(0x38C, 0x38C, 39),
(0x38E, 0x3A1, 39),
(0x3A3, 0x3E1, 39),
(0x3E2, 0x3EF, 25),
(0x3F0, 0x3FF, 39),
(0x400, 0x484, 28),
(0x485, 0x486, 49),
(0x487, 0x52F, 28),
(0x531, 0x556, 5),
(0x559, 0x55F, 5),
(0x561, 0x587, 5),
(0x589, 0x589, 24),
(0x58A, 0x58A, 5),
(0x58D, 0x58F, 5),
(0x591, 0x5C7, 46),
(0x5D0, 0x5EA, 46),
(0x5F0, 0x5F4, 46),
(0x600, 0x604, 4),
(0x605, 0x605, 24),
(0x606, 0x60B, 4),
(0x60C, 0x60C, 24),
(0x60D, 0x61A, 4),
(0x61B, 0x61C, 24),
(0x61E, 0x61E, 4),
(0x61F, 0x61F, 24),
(0x620, 0x63F, 4),
(0x640, 0x640, 24),
(0x641, 0x64A, 4),
(0x64B, 0x655, 49),
(0x656, 0x66F, 4),
(0x670, 0x670, 49),
(0x671, 0x6DC, 4),
(0x6DD, 0x6DD, 24),
(0x6DE, 0x6FF, 4),
(0x700, 0x70D, 119),
(0x70F, 0x74A, 119),
(0x74D, 0x74F, 119),
(0x750, 0x77F, 4),
(0x780, 0x7B1, 129),
(0x7C0, 0x7FA, 88),
(0x800, 0x82D, 109),
(0x830, 0x83E, 109),
(0x840, 0x85B, 72),
(0x85E, 0x85E, 72),
(0x8A0, 0x8B4, 4),
(0x8B6, 0x8BD, 4),
(0x8D4, 0x8E1, 4),
(0x8E2, 0x8E2, 24),
(0x8E3, 0x8FF, 4),
(0x900, 0x950, 30),
(0x951, 0x952, 49),
(0x953, 0x963, 30),
(0x964, 0x965, 24),
(0x966, 0x97F, 30),
(0x980, 0x983, 11),
(0x985, 0x98C, 11),
(0x98F, 0x990, 11),
(0x993, 0x9A8, 11),
(0x9AA, 0x9B0, 11),
(0x9B2, 0x9B2, 11),
(0x9B6, 0x9B9, 11),
(0x9BC, 0x9C4, 11),
(0x9C7, 0x9C8, 11),
(0x9CB, 0x9CE, 11),
(0x9D7, 0x9D7, 11),
(0x9DC, 0x9DD, 11),
(0x9DF, 0x9E3, 11),
(0x9E6, 0x9FB, 11),
(0xA01, 0xA03, 41),
(0xA05, 0xA0A, 41),
(0xA0F, 0xA10, 41),
(0xA13, 0xA28, 41),
(0xA2A, 0xA30, 41),
(0xA32, 0xA33, 41),
(0xA35, 0xA36, 41),
(0xA38, 0xA39, 41),
(0xA3C, 0xA3C, 41),
(0xA3E, 0xA42, 41),
(0xA47, 0xA48, 41),
(0xA4B, 0xA4D, 41),
(0xA51, 0xA51, 41),
(0xA59, 0xA5C, 41),
(0xA5E, 0xA5E, 41),
(0xA66, 0xA75, 41),
(0xA81, 0xA83, 40),
(0xA85, 0xA8D, 40),
(0xA8F, 0xA91, 40),
(0xA93, 0xAA8, 40),
(0xAAA, 0xAB0, 40),
(0xAB2, 0xAB3, 40),
(0xAB5, 0xAB9, 40),
(0xABC, 0xAC5, 40),
(0xAC7, 0xAC9, 40),
(0xACB, 0xACD, 40),
(0xAD0, 0xAD0, 40),
(0xAE0, 0xAE3, 40),
(0xAE6, 0xAF1, 40),
(0xAF9, 0xAF9, 40),
(0xB01, 0xB03, 98),
(0xB05, 0xB0C, 98),
(0xB0F, 0xB10, 98),
(0xB13, 0xB28, 98),
(0xB2A, 0xB30, 98),
(0xB32, 0xB33, 98),
(0xB35, 0xB39, 98),
(0xB3C, 0xB44, 98),
(0xB47, 0xB48, 98),
(0xB4B, 0xB4D, 98),
(0xB56, 0xB57, 98),
(0xB5C, 0xB5D, 98),
(0xB5F, 0xB63, 98),
(0xB66, 0xB77, 98),
(0xB82, 0xB83, 126),
(0xB85, 0xB8A, 126),
(0xB8E, 0xB90, 126),
(0xB92, 0xB95, 126),
(0xB99, 0xB9A, 126),
(0xB9C, 0xB9C, 126),
(0xB9E, 0xB9F, 126),
(0xBA3, 0xBA4, 126),
(0xBA8, 0xBAA, 126),
(0xBAE, 0xBB9, 126),
(0xBBE, 0xBC2, 126),
(0xBC6, 0xBC8, 126),
(0xBCA, 0xBCD, 126),
(0xBD0, 0xBD0, 126),
(0xBD7, 0xBD7, 126),
(0xBE6, 0xBFA, 126),
(0xC00, 0xC03, 128),
(0xC05, 0xC0C, 128),
(0xC0E, 0xC10, 128),
(0xC12, 0xC28, 128),
(0xC2A, 0xC39, 128),
(0xC3D, 0xC44, 128),
(0xC46, 0xC48, 128),
(0xC4A, 0xC4D, 128),
(0xC55, 0xC56, 128),
(0xC58, 0xC5A, 128),
(0xC60, 0xC63, 128),
(0xC66, 0xC6F, 128),
(0xC78, 0xC7F, 128),
(0xC80, 0xC83, 54),
(0xC85, 0xC8C, 54),
(0xC8E, 0xC90, 54),
(0xC92, 0xCA8, 54),
(0xCAA, 0xCB3, 54),
(0xCB5, 0xCB9, 54),
(0xCBC, 0xCC4, 54),
(0xCC6, 0xCC8, 54),
(0xCCA, 0xCCD, 54),
(0xCD5, 0xCD6, 54),
(0xCDE, 0xCDE, 54),
(0xCE0, 0xCE3, 54),
(0xCE6, 0xCEF, 54),
(0xCF1, 0xCF2, 54),
(0xD01, 0xD03, 71),
(0xD05, 0xD0C, 71),
(0xD0E, 0xD10, 71),
(0xD12, 0xD3A, 71),
(0xD3D, 0xD44, 71),
(0xD46, 0xD48, 71),
(0xD4A, 0xD4F, 71),
(0xD54, 0xD63, 71),
(0xD66, 0xD7F, 71),
(0xD82, 0xD83, 115),
(0xD85, 0xD96, 115),
(0xD9A, 0xDB1, 115),
(0xDB3, 0xDBB, 115),
(0xDBD, 0xDBD, 115),
(0xDC0, 0xDC6, 115),
(0xDCA, 0xDCA, 115),
(0xDCF, 0xDD4, 115),
(0xDD6, 0xDD6, 115),
(0xDD8, 0xDDF, 115),
(0xDE6, 0xDEF, 115),
(0xDF2, 0xDF4, 115),
(0xE01, 0xE3A, 130),
(0xE3F, 0xE3F, 24),
(0xE40, 0xE5B, 130),
(0xE81, 0xE82, 61),
(0xE84, 0xE84, 61),
(0xE87, 0xE88, 61),
(0xE8A, 0xE8A, 61),
(0xE8D, 0xE8D, 61),
(0xE94, 0xE97, 61),
(0xE99, 0xE9F, 61),
(0xEA1, 0xEA3, 61),
(0xEA5, 0xEA5, 61),
(0xEA7, 0xEA7, 61),
(0xEAA, 0xEAB, 61),
(0xEAD, 0xEB9, 61),
(0xEBB, 0xEBD, 61),
(0xEC0, 0xEC4, 61),
(0xEC6, 0xEC6, 61),
(0xEC8, 0xECD, 61),
(0xED0, 0xED9, 61),
(0xEDC, 0xEDF, 61),
(0xF00, 0xF47, 131),
(0xF49, 0xF6C, 131),
(0xF71, 0xF97, 131),
(0xF99, 0xFBC, 131),
(0xFBE, 0xFCC, 131),
(0xFCE, 0xFD4, 131),
(0xFD5, 0xFD8, 24),
(0xFD9, 0xFDA, 131),
(0x1000, 0x109F, 84),
(0x10A0, 0x10C5, 35),
(0x10C7, 0x10C7, 35),
(0x10CD, 0x10CD, 35),
(0x10D0, 0x10FA, 35),
(0x10FB, 0x10FB, 24),
(0x10FC, 0x10FF, 35),
(0x1100, 0x11FF, 43),
(0x1200, 0x1248, 34),
(0x124A, 0x124D, 34),
(0x1250, 0x1256, 34),
(0x1258, 0x1258, 34),
(0x125A, 0x125D, 34),
(0x1260, 0x1288, 34),
(0x128A, 0x128D, 34),
(0x1290, 0x12B0, 34),
(0x12B2, 0x12B5, 34),
(0x12B8, 0x12BE, 34),
(0x12C0, 0x12C0, 34),
(0x12C2, 0x12C5, 34),
(0x12C8, 0x12D6, 34),
(0x12D8, 0x1310, 34),
(0x1312, 0x1315, 34),
(0x1318, 0x135A, 34),
(0x135D, 0x137C, 34),
(0x1380, 0x1399, 34),
(0x13A0, 0x13F5, 23),
(0x13F8, 0x13FD, 23),
(0x1400, 0x167F, 18),
(0x1680, 0x169C, 89),
(0x16A0, 0x16EA, 108),
(0x16EB, 0x16ED, 24),
(0x16EE, 0x16F8, 108),
(0x1700, 0x170C, 120),
(0x170E, 0x1714, 120),
(0x1720, 0x1734, 44),
(0x1735, 0x1736, 24),
(0x1740, 0x1753, 17),
(0x1760, 0x176C, 121),
(0x176E, 0x1770, 121),
(0x1772, 0x1773, 121),
(0x1780, 0x17DD, 58),
(0x17E0, 0x17E9, 58),
(0x17F0, 0x17F9, 58),
(0x1800, 0x1801, 81),
(0x1802, 0x1803, 24),
(0x1804, 0x1804, 81),
(0x1805, 0x1805, 24),
(0x1806, 0x180E, 81),
(0x1810, 0x1819, 81),
(0x1820, 0x1877, 81),
(0x1880, 0x18AA, 81),
(0x18B0, 0x18F5, 18),
(0x1900, 0x191E, 64),
(0x1920, 0x192B, 64),
(0x1930, 0x193B, 64),
(0x1940, 0x1940, 64),
(0x1944, 0x194F, 64),
(0x1950, 0x196D, 122),
(0x1970, 0x1974, 122),
(0x1980, 0x19AB, 86),
(0x19B0, 0x19C9, 86),
(0x19D0, 0x19DA, 86),
(0x19DE, 0x19DF, 86),
(0x19E0, 0x19FF, 58),
(0x1A00, 0x1A1B, 16),
(0x1A1E, 0x1A1F, 16),
(0x1A20, 0x1A5E, 123),
(0x1A60, 0x1A7C, 123),
(0x1A7F, 0x1A89, 123),
(0x1A90, 0x1A99, 123),
(0x1AA0, 0x1AAD, 123),
(0x1AB0, 0x1ABE, 49),
(0x1B00, 0x1B4B, 7),
(0x1B50, 0x1B7C, 7),
(0x1B80, 0x1BBF, 117),
(0x1BC0, 0x1BF3, 10),
(0x1BFC, 0x1BFF, 10),
(0x1C00, 0x1C37, 63),
(0x1C3B, 0x1C49, 63),
(0x1C4D, 0x1C4F, 63),
(0x1C50, 0x1C7F, 90),
(0x1C80, 0x1C88, 28),
(0x1CC0, 0x1CC7, 117),
(0x1CD0, 0x1CD2, 49),
(0x1CD3, 0x1CD3, 24),
(0x1CD4, 0x1CE0, 49),
(0x1CE1, 0x1CE1, 24),
(0x1CE2, 0x1CE8, 49),
(0x1CE9, 0x1CEC, 24),
(0x1CED, 0x1CED, 49),
(0x1CEE, 0x1CF3, 24),
(0x1CF4, 0x1CF4, 49),
(0x1CF5, 0x1CF6, 24),
(0x1CF8, 0x1CF9, 49),
(0x1D00, 0x1D25, 62),
(0x1D26, 0x1D2A, 39),
(0x1D2B, 0x1D2B, 28),
(0x1D2C, 0x1D5C, 62),
(0x1D5D, 0x1D61, 39),
(0x1D62, 0x1D65, 62),
(0x1D66, 0x1D6A, 39),
(0x1D6B, 0x1D77, 62),
(0x1D78, 0x1D78, 28),
(0x1D79, 0x1DBE, 62),
(0x1DBF, 0x1DBF, 39),
(0x1DC0, 0x1DF5, 49),
(0x1DFB, 0x1DFF, 49),
(0x1E00, 0x1EFF, 62),
(0x1F00, 0x1F15, 39),
(0x1F18, 0x1F1D, 39),
(0x1F20, 0x1F45, 39),
(0x1F48, 0x1F4D, 39),
(0x1F50, 0x1F57, 39),
(0x1F59, 0x1F59, 39),
(0x1F5B, 0x1F5B, 39),
(0x1F5D, 0x1F5D, 39),
(0x1F5F, 0x1F7D, 39),
(0x1F80, 0x1FB4, 39),
(0x1FB6, 0x1FC4, 39),
(0x1FC6, 0x1FD3, 39),
(0x1FD6, 0x1FDB, 39),
(0x1FDD, 0x1FEF, 39),
(0x1FF2, 0x1FF4, 39),
(0x1FF6, 0x1FFE, 39),
(0x2000, 0x200B, 24),
(0x200C, 0x200D, 49),
(0x200E, 0x2064, 24),
(0x2066, 0x2070, 24),
(0x2071, 0x2071, 62),
(0x2074, 0x207E, 24),
(0x207F, 0x207F, 62),
(0x2080, 0x208E, 24),
(0x2090, 0x209C, 62),
(0x20A0, 0x20BE, 24),
(0x20D0, 0x20F0, 49),
(0x2100, 0x2125, 24),
(0x2126, 0x2126, 39),
(0x2127, 0x2129, 24),
(0x212A, 0x212B, 62),
(0x212C, 0x2131, 24),
(0x2132, 0x2132, 62),
(0x2133, 0x214D, 24),
(0x214E, 0x214E, 62),
(0x214F, 0x215F, 24),
(0x2160, 0x2188, 62),
(0x2189, 0x218B, 24),
(0x2190, 0x23FE, 24),
(0x2400, 0x2426, 24),
(0x2440, 0x244A, 24),
(0x2460, 0x27FF, 24),
(0x2800, 0x28FF, 15),
(0x2900, 0x2B73, 24),
(0x2B76, 0x2B95, 24),
(0x2B98, 0x2BB9, 24),
(0x2BBD, 0x2BC8, 24),
(0x2BCA, 0x2BD1, 24),
(0x2BEC, 0x2BEF, 24),
(0x2C00, 0x2C2E, 36),
(0x2C30, 0x2C5E, 36),
(0x2C60, 0x2C7F, 62),
(0x2C80, 0x2CF3, 25),
(0x2CF9, 0x2CFF, 25),
(0x2D00, 0x2D25, 35),
(0x2D27, 0x2D27, 35),
(0x2D2D, 0x2D2D, 35),
(0x2D30, 0x2D67, 132),
(0x2D6F, 0x2D70, 132),
(0x2D7F, 0x2D7F, 132),
(0x2D80, 0x2D96, 34),
(0x2DA0, 0x2DA6, 34),
(0x2DA8, 0x2DAE, 34),
(0x2DB0, 0x2DB6, 34),
(0x2DB8, 0x2DBE, 34),
(0x2DC0, 0x2DC6, 34),
(0x2DC8, 0x2DCE, 34),
(0x2DD0, 0x2DD6, 34),
(0x2DD8, 0x2DDE, 34),
(0x2DE0, 0x2DFF, 28),
(0x2E00, 0x2E44, 24),
(0x2E80, 0x2E99, 42),
(0x2E9B, 0x2EF3, 42),
(0x2F00, 0x2FD5, 42),
(0x2FF0, 0x2FFB, 24),
(0x3000, 0x3004, 24),
(0x3005, 0x3005, 42),
(0x3006, 0x3006, 24),
(0x3007, 0x3007, 42),
(0x3008, 0x3020, 24),
(0x3021, 0x3029, 42),
(0x302A, 0x302D, 49),
(0x302E, 0x302F, 43),
(0x3030, 0x3037, 24),
(0x3038, 0x303B, 42),
(0x303C, 0x303F, 24),
(0x3041, 0x3096, 47),
(0x3099, 0x309A, 49),
(0x309B, 0x309C, 24),
(0x309D, 0x309F, 47),
(0x30A0, 0x30A0, 24),
(0x30A1, 0x30FA, 55),
(0x30FB, 0x30FC, 24),
(0x30FD, 0x30FF, 55),
(0x3105, 0x312D, 13),
(0x3131, 0x318E, 43),
(0x3190, 0x319F, 24),
(0x31A0, 0x31BA, 13),
(0x31C0, 0x31E3, 24),
(0x31F0, 0x31FF, 55),
(0x3200, 0x321E, 43),
(0x3220, 0x325F, 24),
(0x3260, 0x327E, 43),
(0x327F, 0x32CF, 24),
(0x32D0, 0x32FE, 55),
(0x3300, 0x3357, 55),
(0x3358, 0x33FF, 24),
(0x3400, 0x4DB5, 42),
(0x4DC0, 0x4DFF, 24),
(0x4E00, 0x9FD5, 42),
(0xA000, 0xA48C, 137),
(0xA490, 0xA4C6, 137),
(0xA4D0, 0xA4FF, 67),
(0xA500, 0xA62B, 135),
(0xA640, 0xA69F, 28),
(0xA6A0, 0xA6F7, 8),
(0xA700, 0xA721, 24),
(0xA722, 0xA787, 62),
(0xA788, 0xA78A, 24),
(0xA78B, 0xA7AE, 62),
(0xA7B0, 0xA7B7, 62),
(0xA7F7, 0xA7FF, 62),
(0xA800, 0xA82B, 118),
(0xA830, 0xA839, 24),
(0xA840, 0xA877, 104),
(0xA880, 0xA8C5, 110),
(0xA8CE, 0xA8D9, 110),
(0xA8E0, 0xA8FD, 30),
(0xA900, 0xA92D, 56),
(0xA92E, 0xA92E, 24),
(0xA92F, 0xA92F, 56),
(0xA930, 0xA953, 107),
(0xA95F, 0xA95F, 107),
(0xA960, 0xA97C, 43),
(0xA980, 0xA9CD, 52),
(0xA9CF, 0xA9CF, 24),
(0xA9D0, 0xA9D9, 52),
(0xA9DE, 0xA9DF, 52),
(0xA9E0, 0xA9FE, 84),
(0xAA00, 0xAA36, 22),
(0xAA40, 0xAA4D, 22),
(0xAA50, 0xAA59, 22),
(0xAA5C, 0xAA5F, 22),
(0xAA60, 0xAA7F, 84),
(0xAA80, 0xAAC2, 124),
(0xAADB, 0xAADF, 124),
(0xAAE0, 0xAAF6, 75),
(0xAB01, 0xAB06, 34),
(0xAB09, 0xAB0E, 34),
(0xAB11, 0xAB16, 34),
(0xAB20, 0xAB26, 34),
(0xAB28, 0xAB2E, 34),
(0xAB30, 0xAB5A, 62),
(0xAB5B, 0xAB5B, 24),
(0xAB5C, 0xAB64, 62),
(0xAB65, 0xAB65, 39),
(0xAB70, 0xABBF, 23),
(0xABC0, 0xABED, 75),
(0xABF0, 0xABF9, 75),
(0xAC00, 0xD7A3, 43),
(0xD7B0, 0xD7C6, 43),
(0xD7CB, 0xD7FB, 43),
(0xF900, 0xFA6D, 42),
(0xFA70, 0xFAD9, 42),
(0xFB00, 0xFB06, 62),
(0xFB13, 0xFB17, 5),
(0xFB1D, 0xFB36, 46),
(0xFB38, 0xFB3C, 46),
(0xFB3E, 0xFB3E, 46),
(0xFB40, 0xFB41, 46),
(0xFB43, 0xFB44, 46),
(0xFB46, 0xFB4F, 46),
(0xFB50, 0xFBC1, 4),
(0xFBD3, 0xFD3D, 4),
(0xFD3E, 0xFD3F, 24),
(0xFD50, 0xFD8F, 4),
(0xFD92, 0xFDC7, 4),
(0xFDF0, 0xFDFD, 4),
(0xFE00, 0xFE0F, 49),
(0xFE10, 0xFE19, 24),
(0xFE20, 0xFE2D, 49),
(0xFE2E, 0xFE2F, 28),
(0xFE30, 0xFE52, 24),
(0xFE54, 0xFE66, 24),
(0xFE68, 0xFE6B, 24),
(0xFE70, 0xFE74, 4),
(0xFE76, 0xFEFC, 4),
(0xFEFF, 0xFEFF, 24),
(0xFF01, 0xFF20, 24),
(0xFF21, 0xFF3A, 62),
(0xFF3B, 0xFF40, 24),
(0xFF41, 0xFF5A, 62),
(0xFF5B, 0xFF65, 24),
(0xFF66, 0xFF6F, 55),
(0xFF70, 0xFF70, 24),
(0xFF71, 0xFF9D, 55),
(0xFF9E, 0xFF9F, 24),
(0xFFA0, 0xFFBE, 43),
(0xFFC2, 0xFFC7, 43),
(0xFFCA, 0xFFCF, 43),
(0xFFD2, 0xFFD7, 43),
(0xFFDA, 0xFFDC, 43),
(0xFFE0, 0xFFE6, 24),
(0xFFE8, 0xFFEE, 24),
(0xFFF9, 0xFFFD, 24),
(0x10000, 0x1000B, 66),
(0x1000D, 0x10026, 66),
(0x10028, 0x1003A, 66),
(0x1003C, 0x1003D, 66),
(0x1003F, 0x1004D, 66),
(0x10050, 0x1005D, 66),
(0x10080, 0x100FA, 66),
(0x10100, 0x10102, 24),
(0x10107, 0x10133, 24),
(0x10137, 0x1013F, 24),
(0x10140, 0x1018E, 39),
(0x10190, 0x1019B, 24),
(0x101A0, 0x101A0, 39),
(0x101D0, 0x101FC, 24),
(0x101FD, 0x101FD, 49),
(0x10280, 0x1029C, 68),
(0x102A0, 0x102D0, 19),
(0x102E0, 0x102E0, 49),
(0x102E1, 0x102FB, 24),
(0x10300, 0x10323, 92),
(0x10330, 0x1034A, 37),
(0x10350, 0x1037A, 94),
(0x10380, 0x1039D, 134),
(0x1039F, 0x1039F, 134),
(0x103A0, 0x103C3, 95),
(0x103C8, 0x103D5, 95),
(0x10400, 0x1044F, 29),
(0x10450, 0x1047F, 112),
(0x10480, 0x1049D, 100),
(0x104A0, 0x104A9, 100),
(0x104B0, 0x104D3, 99),
(0x104D8, 0x104FB, 99),
(0x10500, 0x10527, 33),
(0x10530, 0x10563, 20),
(0x1056F, 0x1056F, 20),
(0x10600, 0x10736, 65),
(0x10740, 0x10755, 65),
(0x10760, 0x10767, 65),
(0x10800, 0x10805, 27),
(0x10808, 0x10808, 27),
(0x1080A, 0x10835, 27),
(0x10837, 0x10838, 27),
(0x1083C, 0x1083C, 27),
(0x1083F, 0x1083F, 27),
(0x10840, 0x10855, 48),
(0x10857, 0x1085F, 48),
(0x10860, 0x1087F, 102),
(0x10880, 0x1089E, 85),
(0x108A7, 0x108AF, 85),
(0x108E0, 0x108F2, 45),
(0x108F4, 0x108F5, 45),
(0x108FB, 0x108FF, 45),
(0x10900, 0x1091B, 105),
(0x1091F, 0x1091F, 105),
(0x10920, 0x10939, 69),
(0x1093F, 0x1093F, 69),
(0x10980, 0x1099F, 78),
(0x109A0, 0x109B7, 77),
(0x109BC, 0x109CF, 77),
(0x109D2, 0x109FF, 77),
(0x10A00, 0x10A03, 57),
(0x10A05, 0x10A06, 57),
(0x10A0C, 0x10A13, 57),
(0x10A15, 0x10A17, 57),
(0x10A19, 0x10A33, 57),
(0x10A38, 0x10A3A, 57),
(0x10A3F, 0x10A47, 57),
(0x10A50, 0x10A58, 57),
(0x10A60, 0x10A7F, 96),
(0x10A80, 0x10A9F, 93),
(0x10AC0, 0x10AE6, 73),
(0x10AEB, 0x10AF6, 73),
(0x10B00, 0x10B35, 6),
(0x10B39, 0x10B3F, 6),
(0x10B40, 0x10B55, 51),
(0x10B58, 0x10B5F, 51),
(0x10B60, 0x10B72, 50),
(0x10B78, 0x10B7F, 50),
(0x10B80, 0x10B91, 106),
(0x10B99, 0x10B9C, 106),
(0x10BA9, 0x10BAF, 106),
(0x10C00, 0x10C48, 97),
(0x10C80, 0x10CB2, 91),
(0x10CC0, 0x10CF2, 91),
(0x10CFA, 0x10CFF, 91),
(0x10E60, 0x10E7E, 4),
(0x11000, 0x1104D, 14),
(0x11052, 0x1106F, 14),
(0x1107F, 0x1107F, 14),
(0x11080, 0x110C1, 53),
(0x110D0, 0x110E8, 116),
(0x110F0, 0x110F9, 116),
(0x11100, 0x11134, 21),
(0x11136, 0x11143, 21),
(0x11150, 0x11176, 70),
(0x11180, 0x111CD, 111),
(0x111D0, 0x111DF, 111),
(0x111E1, 0x111F4, 115),
(0x11200, 0x11211, 59),
(0x11213, 0x1123E, 59),
(0x11280, 0x11286, 83),
(0x11288, 0x11288, 83),
(0x1128A, 0x1128D, 83),
(0x1128F, 0x1129D, 83),
(0x1129F, 0x112A9, 83),
(0x112B0, 0x112EA, 60),
(0x112F0, 0x112F9, 60),
(0x11300, 0x11303, 38),
(0x11305, 0x1130C, 38),
(0x1130F, 0x11310, 38),
(0x11313, 0x11328, 38),
(0x1132A, 0x11330, 38),
(0x11332, 0x11333, 38),
(0x11335, 0x11339, 38),
(0x1133C, 0x11344, 38),
(0x11347, 0x11348, 38),
(0x1134B, 0x1134D, 38),
(0x11350, 0x11350, 38),
(0x11357, 0x11357, 38),
(0x1135D, 0x11363, 38),
(0x11366, 0x1136C, 38),
(0x11370, 0x11374, 38),
(0x11400, 0x11459, 87),
(0x1145B, 0x1145B, 87),
(0x1145D, 0x1145D, 87),
(0x11480, 0x114C7, 133),
(0x114D0, 0x114D9, 133),
(0x11580, 0x115B5, 113),
(0x115B8, 0x115DD, 113),
(0x11600, 0x11644, 80),
(0x11650, 0x11659, 80),
(0x11660, 0x1166C, 81),
(0x11680, 0x116B7, 125),
(0x116C0, 0x116C9, 125),
(0x11700, 0x11719, 2),
(0x1171D, 0x1172B, 2),
(0x11730, 0x1173F, 2),
(0x118A0, 0x118F2, 136),
(0x118FF, 0x118FF, 136),
(0x11AC0, 0x11AF8, 103),
(0x11C00, 0x11C08, 12),
(0x11C0A, 0x11C36, 12),
(0x11C38, 0x11C45, 12),
(0x11C50, 0x11C6C, 12),
(0x11C70, 0x11C8F, 74),
(0x11C92, 0x11CA7, 74),
(0x11CA9, 0x11CB6, 74),
(0x12000, 0x12399, 26),
(0x12400, 0x1246E, 26),
(0x12470, 0x12474, 26),
(0x12480, 0x12543, 26),
(0x13000, 0x1342E, 32),
(0x14400, 0x14646, 3),
(0x16800, 0x16A38, 8),
(0x16A40, 0x16A5E, 82),
(0x16A60, 0x16A69, 82),
(0x16A6E, 0x16A6F, 82),
(0x16AD0, 0x16AED, 9),
(0x16AF0, 0x16AF5, 9),
(0x16B00, 0x16B45, 101),
(0x16B50, 0x16B59, 101),
(0x16B5B, 0x16B61, 101),
(0x16B63, 0x16B77, 101),
(0x16B7D, 0x16B8F, 101),
(0x16F00, 0x16F44, 79),
(0x16F50, 0x16F7E, 79),
(0x16F8F, 0x16F9F, 79),
(0x16FE0, 0x16FE0, 127),
(0x17000, 0x187EC, 127),
(0x18800, 0x18AF2, 127),
(0x1B000, 0x1B000, 55),
(0x1B001, 0x1B001, 47),
(0x1BC00, 0x1BC6A, 31),
(0x1BC70, 0x1BC7C, 31),
(0x1BC80, 0x1BC88, 31),
(0x1BC90, 0x1BC99, 31),
(0x1BC9C, 0x1BC9F, 31),
(0x1BCA0, 0x1BCA3, 24),
(0x1D000, 0x1D0F5, 24),
(0x1D100, 0x1D126, 24),
(0x1D129, 0x1D166, 24),
(0x1D167, 0x1D169, 49),
(0x1D16A, 0x1D17A, 24),
(0x1D17B, 0x1D182, 49),
(0x1D183, 0x1D184, 24),
(0x1D185, 0x1D18B, 49),
(0x1D18C, 0x1D1A9, 24),
(0x1D1AA, 0x1D1AD, 49),
(0x1D1AE, 0x1D1E8, 24),
(0x1D200, 0x1D245, 39),
(0x1D300, 0x1D356, 24),
(0x1D360, 0x1D371, 24),
(0x1D400, 0x1D454, 24),
(0x1D456, 0x1D49C, 24),
(0x1D49E, 0x1D49F, 24),
(0x1D4A2, 0x1D4A2, 24),
(0x1D4A5, 0x1D4A6, 24),
(0x1D4A9, 0x1D4AC, 24),
(0x1D4AE, 0x1D4B9, 24),
(0x1D4BB, 0x1D4BB, 24),
(0x1D4BD, 0x1D4C3, 24),
(0x1D4C5, 0x1D505, 24),
(0x1D507, 0x1D50A, 24),
(0x1D50D, 0x1D514, 24),
(0x1D516, 0x1D51C, 24),
(0x1D51E, 0x1D539, 24),
(0x1D53B, 0x1D53E, 24),
(0x1D540, 0x1D544, 24),
(0x1D546, 0x1D546, 24),
(0x1D54A, 0x1D550, 24),
(0x1D552, 0x1D6A5, 24),
(0x1D6A8, 0x1D7CB, 24),
(0x1D7CE, 0x1D7FF, 24),
(0x1D800, 0x1DA8B, 114),
(0x1DA9B, 0x1DA9F, 114),
(0x1DAA1, 0x1DAAF, 114),
(0x1E000, 0x1E006, 36),
(0x1E008, 0x1E018, 36),
(0x1E01B, 0x1E021, 36),
(0x1E023, 0x1E024, 36),
(0x1E026, 0x1E02A, 36),
(0x1E800, 0x1E8C4, 76),
(0x1E8C7, 0x1E8D6, 76),
(0x1E900, 0x1E94A, 1),
(0x1E950, 0x1E959, 1),
(0x1E95E, 0x1E95F, 1),
(0x1EE00, 0x1EE03, 4),
(0x1EE05, 0x1EE1F, 4),
(0x1EE21, 0x1EE22, 4),
(0x1EE24, 0x1EE24, 4),
(0x1EE27, 0x1EE27, 4),
(0x1EE29, 0x1EE32, 4),
(0x1EE34, 0x1EE37, 4),
(0x1EE39, 0x1EE39, 4),
(0x1EE3B, 0x1EE3B, 4),
(0x1EE42, 0x1EE42, 4),
(0x1EE47, 0x1EE47, 4),
(0x1EE49, 0x1EE49, 4),
(0x1EE4B, 0x1EE4B, 4),
(0x1EE4D, 0x1EE4F, 4),
(0x1EE51, 0x1EE52, 4),
(0x1EE54, 0x1EE54, 4),
(0x1EE57, 0x1EE57, 4),
(0x1EE59, 0x1EE59, 4),
(0x1EE5B, 0x1EE5B, 4),
(0x1EE5D, 0x1EE5D, 4),
(0x1EE5F, 0x1EE5F, 4),
(0x1EE61, 0x1EE62, 4),
(0x1EE64, 0x1EE64, 4),
(0x1EE67, 0x1EE6A, 4),
(0x1EE6C, 0x1EE72, 4),
(0x1EE74, 0x1EE77, 4),
(0x1EE79, 0x1EE7C, 4),
(0x1EE7E, 0x1EE7E, 4),
(0x1EE80, 0x1EE89, 4),
(0x1EE8B, 0x1EE9B, 4),
(0x1EEA1, 0x1EEA3, 4),
(0x1EEA5, 0x1EEA9, 4),
(0x1EEAB, 0x1EEBB, 4),
(0x1EEF0, 0x1EEF1, 4),
(0x1F000, 0x1F02B, 24),
(0x1F030, 0x1F093, 24),
(0x1F0A0, 0x1F0AE, 24),
(0x1F0B1, 0x1F0BF, 24),
(0x1F0C1, 0x1F0CF, 24),
(0x1F0D1, 0x1F0F5, 24),
(0x1F100, 0x1F10C, 24),
(0x1F110, 0x1F12E, 24),
(0x1F130, 0x1F16B, 24),
(0x1F170, 0x1F1AC, 24),
(0x1F1E6, 0x1F1FF, 24),
(0x1F200, 0x1F200, 47),
(0x1F201, 0x1F202, 24),
(0x1F210, 0x1F23B, 24),
(0x1F240, 0x1F248, 24),
(0x1F250, 0x1F251, 24),
(0x1F300, 0x1F6D2, 24),
(0x1F6E0, 0x1F6EC, 24),
(0x1F6F0, 0x1F6F6, 24),
(0x1F700, 0x1F773, 24),
(0x1F780, 0x1F7D4, 24),
(0x1F800, 0x1F80B, 24),
(0x1F810, 0x1F847, 24),
(0x1F850, 0x1F859, 24),
(0x1F860, 0x1F887, 24),
(0x1F890, 0x1F8AD, 24),
(0x1F910, 0x1F91E, 24),
(0x1F920, 0x1F927, 24),
(0x1F930, 0x1F930, 24),
(0x1F933, 0x1F93E, 24),
(0x1F940, 0x1F94B, 24),
(0x1F950, 0x1F95E, 24),
(0x1F980, 0x1F991, 24),
(0x1F9C0, 0x1F9C0, 24),
(0x20000, 0x2A6D6, 42),
(0x2A700, 0x2B734, 42),
(0x2B740, 0x2B81D, 42),
(0x2B820, 0x2CEA1, 42),
(0x2F800, 0x2FA1D, 42),
(0xE0001, 0xE0001, 24),
(0xE0020, 0xE007F, 24),
(0xE0100, 0xE01EF, 49),
];
pub(crate) fn get_script(c: char) -> u8 {
let cp = c as u32;
match RANGES.binary_search_by(|&(lo, hi, _)| {
if hi < cp {
std::cmp::Ordering::Less
} else if lo > cp {
std::cmp::Ordering::Greater
} else {
std::cmp::Ordering::Equal
}
}) {
Ok(i) => RANGES[i].2,
Err(_) => ANY,
}
}