// Generated Unicode 15.0.0 classification for the dateutil-compatible lexer.
///|
let parser_word_ranges : Array[(Int32, Int32)] = [
(65, 90),
(97, 122),
(170, 170),
(181, 181),
(186, 186),
(192, 214),
(216, 246),
(248, 705),
(710, 721),
(736, 740),
(748, 748),
(750, 750),
(880, 884),
(886, 887),
(890, 893),
(895, 895),
(902, 902),
(904, 906),
(908, 908),
(910, 929),
(931, 1013),
(1015, 1153),
(1162, 1327),
(1329, 1366),
(1369, 1369),
(1376, 1416),
(1488, 1514),
(1519, 1522),
(1568, 1610),
(1646, 1647),
(1649, 1747),
(1749, 1749),
(1765, 1766),
(1774, 1775),
(1786, 1788),
(1791, 1791),
(1808, 1808),
(1810, 1839),
(1869, 1957),
(1969, 1969),
(1994, 2026),
(2036, 2037),
(2042, 2042),
(2048, 2069),
(2074, 2074),
(2084, 2084),
(2088, 2088),
(2112, 2136),
(2144, 2154),
(2160, 2183),
(2185, 2190),
(2208, 2249),
(2308, 2361),
(2365, 2365),
(2384, 2384),
(2392, 2401),
(2417, 2432),
(2437, 2444),
(2447, 2448),
(2451, 2472),
(2474, 2480),
(2482, 2482),
(2486, 2489),
(2493, 2493),
(2510, 2510),
(2524, 2525),
(2527, 2529),
(2544, 2545),
(2556, 2556),
(2565, 2570),
(2575, 2576),
(2579, 2600),
(2602, 2608),
(2610, 2611),
(2613, 2614),
(2616, 2617),
(2649, 2652),
(2654, 2654),
(2674, 2676),
(2693, 2701),
(2703, 2705),
(2707, 2728),
(2730, 2736),
(2738, 2739),
(2741, 2745),
(2749, 2749),
(2768, 2768),
(2784, 2785),
(2809, 2809),
(2821, 2828),
(2831, 2832),
(2835, 2856),
(2858, 2864),
(2866, 2867),
(2869, 2873),
(2877, 2877),
(2908, 2909),
(2911, 2913),
(2929, 2929),
(2947, 2947),
(2949, 2954),
(2958, 2960),
(2962, 2965),
(2969, 2970),
(2972, 2972),
(2974, 2975),
(2979, 2980),
(2984, 2986),
(2990, 3001),
(3024, 3024),
(3077, 3084),
(3086, 3088),
(3090, 3112),
(3114, 3129),
(3133, 3133),
(3160, 3162),
(3165, 3165),
(3168, 3169),
(3200, 3200),
(3205, 3212),
(3214, 3216),
(3218, 3240),
(3242, 3251),
(3253, 3257),
(3261, 3261),
(3293, 3294),
(3296, 3297),
(3313, 3314),
(3332, 3340),
(3342, 3344),
(3346, 3386),
(3389, 3389),
(3406, 3406),
(3412, 3414),
(3423, 3425),
(3450, 3455),
(3461, 3478),
(3482, 3505),
(3507, 3515),
(3517, 3517),
(3520, 3526),
(3585, 3632),
(3634, 3635),
(3648, 3654),
(3713, 3714),
(3716, 3716),
(3718, 3722),
(3724, 3747),
(3749, 3749),
(3751, 3760),
(3762, 3763),
(3773, 3773),
(3776, 3780),
(3782, 3782),
(3804, 3807),
(3840, 3840),
(3904, 3911),
(3913, 3948),
(3976, 3980),
(4096, 4138),
(4159, 4159),
(4176, 4181),
(4186, 4189),
(4193, 4193),
(4197, 4198),
(4206, 4208),
(4213, 4225),
(4238, 4238),
(4256, 4293),
(4295, 4295),
(4301, 4301),
(4304, 4346),
(4348, 4680),
(4682, 4685),
(4688, 4694),
(4696, 4696),
(4698, 4701),
(4704, 4744),
(4746, 4749),
(4752, 4784),
(4786, 4789),
(4792, 4798),
(4800, 4800),
(4802, 4805),
(4808, 4822),
(4824, 4880),
(4882, 4885),
(4888, 4954),
(4992, 5007),
(5024, 5109),
(5112, 5117),
(5121, 5740),
(5743, 5759),
(5761, 5786),
(5792, 5866),
(5873, 5880),
(5888, 5905),
(5919, 5937),
(5952, 5969),
(5984, 5996),
(5998, 6000),
(6016, 6067),
(6103, 6103),
(6108, 6108),
(6176, 6264),
(6272, 6276),
(6279, 6312),
(6314, 6314),
(6320, 6389),
(6400, 6430),
(6480, 6509),
(6512, 6516),
(6528, 6571),
(6576, 6601),
(6656, 6678),
(6688, 6740),
(6823, 6823),
(6917, 6963),
(6981, 6988),
(7043, 7072),
(7086, 7087),
(7098, 7141),
(7168, 7203),
(7245, 7247),
(7258, 7293),
(7296, 7304),
(7312, 7354),
(7357, 7359),
(7401, 7404),
(7406, 7411),
(7413, 7414),
(7418, 7418),
(7424, 7615),
(7680, 7957),
(7960, 7965),
(7968, 8005),
(8008, 8013),
(8016, 8023),
(8025, 8025),
(8027, 8027),
(8029, 8029),
(8031, 8061),
(8064, 8116),
(8118, 8124),
(8126, 8126),
(8130, 8132),
(8134, 8140),
(8144, 8147),
(8150, 8155),
(8160, 8172),
(8178, 8180),
(8182, 8188),
(8305, 8305),
(8319, 8319),
(8336, 8348),
(8450, 8450),
(8455, 8455),
(8458, 8467),
(8469, 8469),
(8473, 8477),
(8484, 8484),
(8486, 8486),
(8488, 8488),
(8490, 8493),
(8495, 8505),
(8508, 8511),
(8517, 8521),
(8526, 8526),
(8579, 8580),
(11264, 11492),
(11499, 11502),
(11506, 11507),
(11520, 11557),
(11559, 11559),
(11565, 11565),
(11568, 11623),
(11631, 11631),
(11648, 11670),
(11680, 11686),
(11688, 11694),
(11696, 11702),
(11704, 11710),
(11712, 11718),
(11720, 11726),
(11728, 11734),
(11736, 11742),
(11823, 11823),
(12293, 12294),
(12337, 12341),
(12347, 12348),
(12353, 12438),
(12445, 12447),
(12449, 12538),
(12540, 12543),
(12549, 12591),
(12593, 12686),
(12704, 12735),
(12784, 12799),
(13312, 19903),
(19968, 42124),
(42192, 42237),
(42240, 42508),
(42512, 42527),
(42538, 42539),
(42560, 42606),
(42623, 42653),
(42656, 42725),
(42775, 42783),
(42786, 42888),
(42891, 42954),
(42960, 42961),
(42963, 42963),
(42965, 42969),
(42994, 43009),
(43011, 43013),
(43015, 43018),
(43020, 43042),
(43072, 43123),
(43138, 43187),
(43250, 43255),
(43259, 43259),
(43261, 43262),
(43274, 43301),
(43312, 43334),
(43360, 43388),
(43396, 43442),
(43471, 43471),
(43488, 43492),
(43494, 43503),
(43514, 43518),
(43520, 43560),
(43584, 43586),
(43588, 43595),
(43616, 43638),
(43642, 43642),
(43646, 43695),
(43697, 43697),
(43701, 43702),
(43705, 43709),
(43712, 43712),
(43714, 43714),
(43739, 43741),
(43744, 43754),
(43762, 43764),
(43777, 43782),
(43785, 43790),
(43793, 43798),
(43808, 43814),
(43816, 43822),
(43824, 43866),
(43868, 43881),
(43888, 44002),
(44032, 55203),
(55216, 55238),
(55243, 55291),
(63744, 64109),
(64112, 64217),
(64256, 64262),
(64275, 64279),
(64285, 64285),
(64287, 64296),
(64298, 64310),
(64312, 64316),
(64318, 64318),
(64320, 64321),
(64323, 64324),
(64326, 64433),
(64467, 64829),
(64848, 64911),
(64914, 64967),
(65008, 65019),
(65136, 65140),
(65142, 65276),
(65313, 65338),
(65345, 65370),
(65382, 65470),
(65474, 65479),
(65482, 65487),
(65490, 65495),
(65498, 65500),
(65536, 65547),
(65549, 65574),
(65576, 65594),
(65596, 65597),
(65599, 65613),
(65616, 65629),
(65664, 65786),
(66176, 66204),
(66208, 66256),
(66304, 66335),
(66349, 66368),
(66370, 66377),
(66384, 66421),
(66432, 66461),
(66464, 66499),
(66504, 66511),
(66560, 66717),
(66736, 66771),
(66776, 66811),
(66816, 66855),
(66864, 66915),
(66928, 66938),
(66940, 66954),
(66956, 66962),
(66964, 66965),
(66967, 66977),
(66979, 66993),
(66995, 67001),
(67003, 67004),
(67072, 67382),
(67392, 67413),
(67424, 67431),
(67456, 67461),
(67463, 67504),
(67506, 67514),
(67584, 67589),
(67592, 67592),
(67594, 67637),
(67639, 67640),
(67644, 67644),
(67647, 67669),
(67680, 67702),
(67712, 67742),
(67808, 67826),
(67828, 67829),
(67840, 67861),
(67872, 67897),
(67968, 68023),
(68030, 68031),
(68096, 68096),
(68112, 68115),
(68117, 68119),
(68121, 68149),
(68192, 68220),
(68224, 68252),
(68288, 68295),
(68297, 68324),
(68352, 68405),
(68416, 68437),
(68448, 68466),
(68480, 68497),
(68608, 68680),
(68736, 68786),
(68800, 68850),
(68864, 68899),
(69248, 69289),
(69296, 69297),
(69376, 69404),
(69415, 69415),
(69424, 69445),
(69488, 69505),
(69552, 69572),
(69600, 69622),
(69635, 69687),
(69745, 69746),
(69749, 69749),
(69763, 69807),
(69840, 69864),
(69891, 69926),
(69956, 69956),
(69959, 69959),
(69968, 70002),
(70006, 70006),
(70019, 70066),
(70081, 70084),
(70106, 70106),
(70108, 70108),
(70144, 70161),
(70163, 70187),
(70207, 70208),
(70272, 70278),
(70280, 70280),
(70282, 70285),
(70287, 70301),
(70303, 70312),
(70320, 70366),
(70405, 70412),
(70415, 70416),
(70419, 70440),
(70442, 70448),
(70450, 70451),
(70453, 70457),
(70461, 70461),
(70480, 70480),
(70493, 70497),
(70656, 70708),
(70727, 70730),
(70751, 70753),
(70784, 70831),
(70852, 70853),
(70855, 70855),
(71040, 71086),
(71128, 71131),
(71168, 71215),
(71236, 71236),
(71296, 71338),
(71352, 71352),
(71424, 71450),
(71488, 71494),
(71680, 71723),
(71840, 71903),
(71935, 71942),
(71945, 71945),
(71948, 71955),
(71957, 71958),
(71960, 71983),
(71999, 71999),
(72001, 72001),
(72096, 72103),
(72106, 72144),
(72161, 72161),
(72163, 72163),
(72192, 72192),
(72203, 72242),
(72250, 72250),
(72272, 72272),
(72284, 72329),
(72349, 72349),
(72368, 72440),
(72704, 72712),
(72714, 72750),
(72768, 72768),
(72818, 72847),
(72960, 72966),
(72968, 72969),
(72971, 73008),
(73030, 73030),
(73056, 73061),
(73063, 73064),
(73066, 73097),
(73112, 73112),
(73440, 73458),
(73474, 73474),
(73476, 73488),
(73490, 73523),
(73648, 73648),
(73728, 74649),
(74880, 75075),
(77712, 77808),
(77824, 78895),
(78913, 78918),
(82944, 83526),
(92160, 92728),
(92736, 92766),
(92784, 92862),
(92880, 92909),
(92928, 92975),
(92992, 92995),
(93027, 93047),
(93053, 93071),
(93760, 93823),
(93952, 94026),
(94032, 94032),
(94099, 94111),
(94176, 94177),
(94179, 94179),
(94208, 100343),
(100352, 101589),
(101632, 101640),
(110576, 110579),
(110581, 110587),
(110589, 110590),
(110592, 110882),
(110898, 110898),
(110928, 110930),
(110933, 110933),
(110948, 110951),
(110960, 111355),
(113664, 113770),
(113776, 113788),
(113792, 113800),
(113808, 113817),
(119808, 119892),
(119894, 119964),
(119966, 119967),
(119970, 119970),
(119973, 119974),
(119977, 119980),
(119982, 119993),
(119995, 119995),
(119997, 120003),
(120005, 120069),
(120071, 120074),
(120077, 120084),
(120086, 120092),
(120094, 120121),
(120123, 120126),
(120128, 120132),
(120134, 120134),
(120138, 120144),
(120146, 120485),
(120488, 120512),
(120514, 120538),
(120540, 120570),
(120572, 120596),
(120598, 120628),
(120630, 120654),
(120656, 120686),
(120688, 120712),
(120714, 120744),
(120746, 120770),
(120772, 120779),
(122624, 122654),
(122661, 122666),
(122928, 122989),
(123136, 123180),
(123191, 123197),
(123214, 123214),
(123536, 123565),
(123584, 123627),
(124112, 124139),
(124896, 124902),
(124904, 124907),
(124909, 124910),
(124912, 124926),
(124928, 125124),
(125184, 125251),
(125259, 125259),
(126464, 126467),
(126469, 126495),
(126497, 126498),
(126500, 126500),
(126503, 126503),
(126505, 126514),
(126516, 126519),
(126521, 126521),
(126523, 126523),
(126530, 126530),
(126535, 126535),
(126537, 126537),
(126539, 126539),
(126541, 126543),
(126545, 126546),
(126548, 126548),
(126551, 126551),
(126553, 126553),
(126555, 126555),
(126557, 126557),
(126559, 126559),
(126561, 126562),
(126564, 126564),
(126567, 126570),
(126572, 126578),
(126580, 126583),
(126585, 126588),
(126590, 126590),
(126592, 126601),
(126603, 126619),
(126625, 126627),
(126629, 126633),
(126635, 126651),
(131072, 173791),
(173824, 177977),
(177984, 178205),
(178208, 183969),
(183984, 191456),
(194560, 195101),
(196608, 201546),
(201552, 205743),
]
///|
let parser_digit_ranges : Array[(Int32, Int32)] = [
(48, 57),
(178, 179),
(185, 185),
(1632, 1641),
(1776, 1785),
(1984, 1993),
(2406, 2415),
(2534, 2543),
(2662, 2671),
(2790, 2799),
(2918, 2927),
(3046, 3055),
(3174, 3183),
(3302, 3311),
(3430, 3439),
(3558, 3567),
(3664, 3673),
(3792, 3801),
(3872, 3881),
(4160, 4169),
(4240, 4249),
(4969, 4977),
(6112, 6121),
(6160, 6169),
(6470, 6479),
(6608, 6618),
(6784, 6793),
(6800, 6809),
(6992, 7001),
(7088, 7097),
(7232, 7241),
(7248, 7257),
(8304, 8304),
(8308, 8313),
(8320, 8329),
(9312, 9320),
(9332, 9340),
(9352, 9360),
(9450, 9450),
(9461, 9469),
(9471, 9471),
(10102, 10110),
(10112, 10120),
(10122, 10130),
(42528, 42537),
(43216, 43225),
(43264, 43273),
(43472, 43481),
(43504, 43513),
(43600, 43609),
(44016, 44025),
(65296, 65305),
(66720, 66729),
(68160, 68163),
(68912, 68921),
(69216, 69224),
(69714, 69722),
(69734, 69743),
(69872, 69881),
(69942, 69951),
(70096, 70105),
(70384, 70393),
(70736, 70745),
(70864, 70873),
(71248, 71257),
(71360, 71369),
(71472, 71481),
(71904, 71913),
(72016, 72025),
(72784, 72793),
(73040, 73049),
(73120, 73129),
(73552, 73561),
(92768, 92777),
(92864, 92873),
(93008, 93017),
(120782, 120831),
(123200, 123209),
(123632, 123641),
(124144, 124153),
(125264, 125273),
(127232, 127242),
(130032, 130041),
]
///|
let parser_space_ranges : Array[(Int32, Int32)] = [
(9, 13),
(28, 32),
(133, 133),
(160, 160),
(5760, 5760),
(8192, 8202),
(8232, 8233),
(8239, 8239),
(8287, 8287),
(12288, 12288),
]
///|
let parser_decimal_ranges : Array[(Int32, Int32)] = [
(48, 57),
(1632, 1641),
(1776, 1785),
(1984, 1993),
(2406, 2415),
(2534, 2543),
(2662, 2671),
(2790, 2799),
(2918, 2927),
(3046, 3055),
(3174, 3183),
(3302, 3311),
(3430, 3439),
(3558, 3567),
(3664, 3673),
(3792, 3801),
(3872, 3881),
(4160, 4169),
(4240, 4249),
(6112, 6121),
(6160, 6169),
(6470, 6479),
(6608, 6617),
(6784, 6793),
(6800, 6809),
(6992, 7001),
(7088, 7097),
(7232, 7241),
(7248, 7257),
(42528, 42537),
(43216, 43225),
(43264, 43273),
(43472, 43481),
(43504, 43513),
(43600, 43609),
(44016, 44025),
(65296, 65305),
(66720, 66729),
(68912, 68921),
(69734, 69743),
(69872, 69881),
(69942, 69951),
(70096, 70105),
(70384, 70393),
(70736, 70745),
(70864, 70873),
(71248, 71257),
(71360, 71369),
(71472, 71481),
(71904, 71913),
(72016, 72025),
(72784, 72793),
(73040, 73049),
(73120, 73129),
(73552, 73561),
(92768, 92777),
(92864, 92873),
(93008, 93017),
(120782, 120831),
(123200, 123209),
(123632, 123641),
(124144, 124153),
(125264, 125273),
(130032, 130041),
]
///|
fn parser_unicode_index(char : Char, ranges : Array[(Int32, Int32)]) -> Int32? {
let value = char.to_int()
let mut lower = 0
let mut upper = ranges.length()
while lower < upper {
let middle = (lower + upper) / 2
let (first, last) = ranges[middle]
if value < first {
upper = middle
} else if value > last {
lower = middle + 1
} else {
return Some(middle)
}
}
None
}
///|
fn parser_is_word(char : Char) -> Bool {
parser_unicode_index(char, parser_word_ranges) is Some(_)
}
///|
fn parser_is_digit(char : Char) -> Bool {
parser_unicode_index(char, parser_digit_ranges) is Some(_)
}
///|
fn parser_is_space(char : Char) -> Bool {
parser_unicode_index(char, parser_space_ranges) is Some(_)
}
///|
fn parser_decimal_digit(char : Char) -> Int32? {
parser_unicode_index(char, parser_decimal_ranges).map(index => {
(char.to_int() - parser_decimal_ranges[index].0) % 10
})
}