// Generated JDK 22.0.1 BMP letter/digit ranges; supplementary UTF-16 pairs are quoted.
// Regenerate with node tools/generate-path-characters.mjs [--live].

///|
let path_character_ranges : Array[(Int, Int)] = [
  (48, 57),
  (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),
  (1632, 1641),
  (1646, 1647),
  (1649, 1747),
  (1749, 1749),
  (1765, 1766),
  (1774, 1788),
  (1791, 1791),
  (1808, 1808),
  (1810, 1839),
  (1869, 1957),
  (1969, 1969),
  (1984, 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),
  (2406, 2415),
  (2417, 2432),
  (2437, 2444),
  (2447, 2448),
  (2451, 2472),
  (2474, 2480),
  (2482, 2482),
  (2486, 2489),
  (2493, 2493),
  (2510, 2510),
  (2524, 2525),
  (2527, 2529),
  (2534, 2545),
  (2556, 2556),
  (2565, 2570),
  (2575, 2576),
  (2579, 2600),
  (2602, 2608),
  (2610, 2611),
  (2613, 2614),
  (2616, 2617),
  (2649, 2652),
  (2654, 2654),
  (2662, 2671),
  (2674, 2676),
  (2693, 2701),
  (2703, 2705),
  (2707, 2728),
  (2730, 2736),
  (2738, 2739),
  (2741, 2745),
  (2749, 2749),
  (2768, 2768),
  (2784, 2785),
  (2790, 2799),
  (2809, 2809),
  (2821, 2828),
  (2831, 2832),
  (2835, 2856),
  (2858, 2864),
  (2866, 2867),
  (2869, 2873),
  (2877, 2877),
  (2908, 2909),
  (2911, 2913),
  (2918, 2927),
  (2929, 2929),
  (2947, 2947),
  (2949, 2954),
  (2958, 2960),
  (2962, 2965),
  (2969, 2970),
  (2972, 2972),
  (2974, 2975),
  (2979, 2980),
  (2984, 2986),
  (2990, 3001),
  (3024, 3024),
  (3046, 3055),
  (3077, 3084),
  (3086, 3088),
  (3090, 3112),
  (3114, 3129),
  (3133, 3133),
  (3160, 3162),
  (3165, 3165),
  (3168, 3169),
  (3174, 3183),
  (3200, 3200),
  (3205, 3212),
  (3214, 3216),
  (3218, 3240),
  (3242, 3251),
  (3253, 3257),
  (3261, 3261),
  (3293, 3294),
  (3296, 3297),
  (3302, 3311),
  (3313, 3314),
  (3332, 3340),
  (3342, 3344),
  (3346, 3386),
  (3389, 3389),
  (3406, 3406),
  (3412, 3414),
  (3423, 3425),
  (3430, 3439),
  (3450, 3455),
  (3461, 3478),
  (3482, 3505),
  (3507, 3515),
  (3517, 3517),
  (3520, 3526),
  (3558, 3567),
  (3585, 3632),
  (3634, 3635),
  (3648, 3654),
  (3664, 3673),
  (3713, 3714),
  (3716, 3716),
  (3718, 3722),
  (3724, 3747),
  (3749, 3749),
  (3751, 3760),
  (3762, 3763),
  (3773, 3773),
  (3776, 3780),
  (3782, 3782),
  (3792, 3801),
  (3804, 3807),
  (3840, 3840),
  (3872, 3881),
  (3904, 3911),
  (3913, 3948),
  (3976, 3980),
  (4096, 4138),
  (4159, 4169),
  (4176, 4181),
  (4186, 4189),
  (4193, 4193),
  (4197, 4198),
  (4206, 4208),
  (4213, 4225),
  (4238, 4238),
  (4240, 4249),
  (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),
  (6112, 6121),
  (6160, 6169),
  (6176, 6264),
  (6272, 6276),
  (6279, 6312),
  (6314, 6314),
  (6320, 6389),
  (6400, 6430),
  (6470, 6509),
  (6512, 6516),
  (6528, 6571),
  (6576, 6601),
  (6608, 6617),
  (6656, 6678),
  (6688, 6740),
  (6784, 6793),
  (6800, 6809),
  (6823, 6823),
  (6917, 6963),
  (6981, 6988),
  (6992, 7001),
  (7043, 7072),
  (7086, 7141),
  (7168, 7203),
  (7232, 7241),
  (7245, 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, 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),
  (43216, 43225),
  (43250, 43255),
  (43259, 43259),
  (43261, 43262),
  (43264, 43301),
  (43312, 43334),
  (43360, 43388),
  (43396, 43442),
  (43471, 43481),
  (43488, 43492),
  (43494, 43518),
  (43520, 43560),
  (43584, 43586),
  (43588, 43595),
  (43600, 43609),
  (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),
  (44016, 44025),
  (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),
  (65296, 65305),
  (65313, 65338),
  (65345, 65370),
  (65382, 65470),
  (65474, 65479),
  (65482, 65487),
  (65490, 65495),
  (65498, 65500),
]

///|
fn path_character(c : Char) -> Bool {
  let cp = c.to_int()
  if cp == 45 || cp == 95 {
    return true
  }
  let mut low = 0
  let mut high = path_character_ranges.length()
  while low < high {
    let middle = low + (high - low) / 2
    let range = path_character_ranges[middle]
    if cp < range.0 {
      high = middle
    } else if cp > range.1 {
      low = middle + 1
    } else {
      return true
    }
  }
  false
}