// Copyright 2025 International Digital Economy Academy
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

///|
/// Autohint tables generated from upstream skrifa.
///
/// Source: `fontations-reference/skrifa/generated/generated_autohint_styles.rs`
///
/// This file is generated; edit the generator instead.

///|
priv struct AutoHintStyleRange {
  first : Int
  last : Int
  bits : Int
}

///|
fn autohint_style_ranges() -> Array[AutoHintStyleRange] {
  [
    { first: 32, last: 93, bits: 60 },
    { first: 94, last: 96, bits: 316 },
    { first: 97, last: 125, bits: 60 },
    { first: 126, last: 126, bits: 316 },
    { first: 127, last: 127, bits: 60 },
    { first: 160, last: 167, bits: 60 },
    { first: 168, last: 169, bits: 316 },
    { first: 170, last: 170, bits: 62 },
    { first: 171, last: 173, bits: 60 },
    { first: 174, last: 176, bits: 316 },
    { first: 177, last: 177, bits: 60 },
    { first: 178, last: 179, bits: 62 },
    { first: 180, last: 180, bits: 316 },
    { first: 181, last: 183, bits: 60 },
    { first: 184, last: 184, bits: 316 },
    { first: 185, last: 186, bits: 62 },
    { first: 187, last: 187, bits: 60 },
    { first: 188, last: 190, bits: 316 },
    { first: 191, last: 687, bits: 60 },
    { first: 688, last: 696, bits: 62 },
    { first: 697, last: 735, bits: 316 },
    { first: 736, last: 740, bits: 62 },
    { first: 741, last: 879, bits: 316 },
    { first: 880, last: 889, bits: 41 },
    { first: 890, last: 890, bits: 297 },
    { first: 891, last: 899, bits: 41 },
    { first: 900, last: 901, bits: 297 },
    { first: 902, last: 1023, bits: 41 },
    { first: 1024, last: 1154, bits: 23 },
    { first: 1155, last: 1161, bits: 279 },
    { first: 1162, last: 1327, bits: 23 },
    { first: 1328, last: 1368, bits: 2 },
    { first: 1369, last: 1375, bits: 258 },
    { first: 1376, last: 1423, bits: 2 },
    { first: 1424, last: 1424, bits: 44 },
    { first: 1425, last: 1471, bits: 300 },
    { first: 1472, last: 1472, bits: 44 },
    { first: 1473, last: 1474, bits: 300 },
    { first: 1475, last: 1475, bits: 44 },
    { first: 1476, last: 1477, bits: 300 },
    { first: 1478, last: 1478, bits: 44 },
    { first: 1479, last: 1479, bits: 300 },
    { first: 1480, last: 1535, bits: 44 },
    { first: 1536, last: 1541, bits: 257 },
    { first: 1542, last: 1551, bits: 1 },
    { first: 1552, last: 1562, bits: 257 },
    { first: 1563, last: 1610, bits: 1 },
    { first: 1611, last: 1631, bits: 257 },
    { first: 1632, last: 1647, bits: 1 },
    { first: 1648, last: 1648, bits: 257 },
    { first: 1649, last: 1749, bits: 1 },
    { first: 1750, last: 1756, bits: 257 },
    { first: 1757, last: 1758, bits: 1 },
    { first: 1759, last: 1764, bits: 257 },
    { first: 1765, last: 1766, bits: 1 },
    { first: 1767, last: 1768, bits: 257 },
    { first: 1769, last: 1769, bits: 1 },
    { first: 1770, last: 1773, bits: 257 },
    { first: 1774, last: 1791, bits: 1 },
    { first: 1872, last: 2047, bits: 1 },
    { first: 2208, last: 2258, bits: 1 },
    { first: 2259, last: 2303, bits: 257 },
    { first: 2304, last: 2306, bits: 280 },
    { first: 2307, last: 2361, bits: 24 },
    { first: 2362, last: 2362, bits: 280 },
    { first: 2363, last: 2363, bits: 24 },
    { first: 2365, last: 2368, bits: 24 },
    { first: 2369, last: 2376, bits: 280 },
    { first: 2377, last: 2380, bits: 24 },
    { first: 2381, last: 2381, bits: 280 },
    { first: 2382, last: 2384, bits: 24 },
    { first: 2387, last: 2391, bits: 280 },
    { first: 2392, last: 2401, bits: 24 },
    { first: 2402, last: 2403, bits: 280 },
    { first: 2406, last: 2431, bits: 24 },
    { first: 2432, last: 2432, bits: 5 },
    { first: 2433, last: 2433, bits: 261 },
    { first: 2434, last: 2491, bits: 5 },
    { first: 2492, last: 2492, bits: 261 },
    { first: 2493, last: 2496, bits: 5 },
    { first: 2497, last: 2500, bits: 261 },
    { first: 2501, last: 2508, bits: 5 },
    { first: 2509, last: 2509, bits: 261 },
    { first: 2510, last: 2529, bits: 5 },
    { first: 2530, last: 2531, bits: 261 },
    { first: 2532, last: 2557, bits: 5 },
    { first: 2558, last: 2558, bits: 261 },
    { first: 2559, last: 2559, bits: 5 },
    { first: 2560, last: 2560, bits: 43 },
    { first: 2561, last: 2562, bits: 299 },
    { first: 2563, last: 2619, bits: 43 },
    { first: 2620, last: 2620, bits: 299 },
    { first: 2621, last: 2624, bits: 43 },
    { first: 2625, last: 2641, bits: 299 },
    { first: 2642, last: 2671, bits: 43 },
    { first: 2672, last: 2673, bits: 299 },
    { first: 2674, last: 2676, bits: 43 },
    { first: 2677, last: 2677, bits: 299 },
    { first: 2678, last: 2687, bits: 43 },
    { first: 2688, last: 2688, bits: 42 },
    { first: 2689, last: 2690, bits: 298 },
    { first: 2691, last: 2747, bits: 42 },
    { first: 2748, last: 2748, bits: 298 },
    { first: 2749, last: 2752, bits: 42 },
    { first: 2753, last: 2760, bits: 298 },
    { first: 2761, last: 2764, bits: 42 },
    { first: 2765, last: 2765, bits: 298 },
    { first: 2766, last: 2785, bits: 42 },
    { first: 2786, last: 2787, bits: 298 },
    { first: 2788, last: 2809, bits: 42 },
    { first: 2810, last: 2815, bits: 298 },
    { first: 2816, last: 2816, bits: 86 },
    { first: 2817, last: 2818, bits: 342 },
    { first: 2819, last: 2875, bits: 86 },
    { first: 2876, last: 2876, bits: 342 },
    { first: 2877, last: 2878, bits: 86 },
    { first: 2879, last: 2879, bits: 342 },
    { first: 2880, last: 2880, bits: 86 },
    { first: 2881, last: 2884, bits: 342 },
    { first: 2885, last: 2892, bits: 86 },
    { first: 2893, last: 2902, bits: 342 },
    { first: 2903, last: 2913, bits: 86 },
    { first: 2914, last: 2915, bits: 342 },
    { first: 2916, last: 2943, bits: 86 },
    { first: 2944, last: 2945, bits: 79 },
    { first: 2946, last: 2946, bits: 335 },
    { first: 2947, last: 3007, bits: 79 },
    { first: 3008, last: 3010, bits: 335 },
    { first: 3011, last: 3020, bits: 79 },
    { first: 3021, last: 3021, bits: 335 },
    { first: 3022, last: 3071, bits: 79 },
    { first: 3072, last: 3072, bits: 337 },
    { first: 3073, last: 3075, bits: 81 },
    { first: 3076, last: 3076, bits: 337 },
    { first: 3077, last: 3133, bits: 81 },
    { first: 3134, last: 3136, bits: 337 },
    { first: 3137, last: 3141, bits: 81 },
    { first: 3142, last: 3158, bits: 337 },
    { first: 3159, last: 3169, bits: 81 },
    { first: 3170, last: 3171, bits: 337 },
    { first: 3172, last: 3199, bits: 81 },
    { first: 3200, last: 3200, bits: 48 },
    { first: 3201, last: 3201, bits: 304 },
    { first: 3202, last: 3259, bits: 48 },
    { first: 3260, last: 3260, bits: 304 },
    { first: 3261, last: 3262, bits: 48 },
    { first: 3263, last: 3263, bits: 304 },
    { first: 3264, last: 3269, bits: 48 },
    { first: 3270, last: 3270, bits: 304 },
    { first: 3271, last: 3275, bits: 48 },
    { first: 3276, last: 3277, bits: 304 },
    { first: 3278, last: 3297, bits: 48 },
    { first: 3298, last: 3299, bits: 304 },
    { first: 3300, last: 3327, bits: 48 },
    { first: 3328, last: 3329, bits: 320 },
    { first: 3330, last: 3386, bits: 64 },
    { first: 3387, last: 3388, bits: 320 },
    { first: 3389, last: 3404, bits: 64 },
    { first: 3405, last: 3406, bits: 320 },
    { first: 3407, last: 3425, bits: 64 },
    { first: 3426, last: 3427, bits: 320 },
    { first: 3428, last: 3455, bits: 64 },
    { first: 3456, last: 3529, bits: 77 },
    { first: 3530, last: 3530, bits: 333 },
    { first: 3531, last: 3537, bits: 77 },
    { first: 3538, last: 3542, bits: 333 },
    { first: 3543, last: 3583, bits: 77 },
    { first: 3584, last: 3632, bits: 83 },
    { first: 3633, last: 3633, bits: 339 },
    { first: 3634, last: 3635, bits: 83 },
    { first: 3636, last: 3642, bits: 339 },
    { first: 3643, last: 3654, bits: 83 },
    { first: 3655, last: 3662, bits: 339 },
    { first: 3663, last: 3711, bits: 83 },
    { first: 3712, last: 3760, bits: 49 },
    { first: 3761, last: 3761, bits: 305 },
    { first: 3762, last: 3763, bits: 49 },
    { first: 3764, last: 3772, bits: 305 },
    { first: 3773, last: 3783, bits: 49 },
    { first: 3784, last: 3789, bits: 305 },
    { first: 3790, last: 3839, bits: 49 },
    { first: 3840, last: 3863, bits: 88 },
    { first: 3864, last: 3865, bits: 344 },
    { first: 3866, last: 3892, bits: 88 },
    { first: 3893, last: 3893, bits: 344 },
    { first: 3894, last: 3894, bits: 88 },
    { first: 3895, last: 3895, bits: 344 },
    { first: 3896, last: 3896, bits: 88 },
    { first: 3897, last: 3897, bits: 344 },
    { first: 3898, last: 3901, bits: 88 },
    { first: 3902, last: 3903, bits: 344 },
    { first: 3904, last: 3952, bits: 88 },
    { first: 3953, last: 3966, bits: 344 },
    { first: 3967, last: 3967, bits: 88 },
    { first: 3968, last: 3972, bits: 344 },
    { first: 3973, last: 3973, bits: 88 },
    { first: 3974, last: 3975, bits: 344 },
    { first: 3976, last: 3980, bits: 88 },
    { first: 3981, last: 4028, bits: 344 },
    { first: 4029, last: 4095, bits: 88 },
    { first: 4096, last: 4140, bits: 67 },
    { first: 4141, last: 4144, bits: 323 },
    { first: 4145, last: 4145, bits: 67 },
    { first: 4146, last: 4151, bits: 323 },
    { first: 4152, last: 4153, bits: 67 },
    { first: 4154, last: 4154, bits: 323 },
    { first: 4155, last: 4156, bits: 67 },
    { first: 4157, last: 4158, bits: 323 },
    { first: 4159, last: 4183, bits: 67 },
    { first: 4184, last: 4185, bits: 323 },
    { first: 4186, last: 4189, bits: 67 },
    { first: 4190, last: 4192, bits: 323 },
    { first: 4193, last: 4208, bits: 67 },
    { first: 4209, last: 4212, bits: 323 },
    { first: 4213, last: 4225, bits: 67 },
    { first: 4226, last: 4226, bits: 323 },
    { first: 4227, last: 4228, bits: 67 },
    { first: 4229, last: 4230, bits: 323 },
    { first: 4231, last: 4236, bits: 67 },
    { first: 4237, last: 4237, bits: 323 },
    { first: 4238, last: 4255, bits: 67 },
    { first: 4256, last: 4301, bits: 28 },
    { first: 4304, last: 4351, bits: 27 },
    { first: 4352, last: 4607, bits: 89 },
    { first: 4608, last: 4956, bits: 26 },
    { first: 4957, last: 4959, bits: 282 },
    { first: 4960, last: 5023, bits: 26 },
    { first: 5024, last: 5119, bits: 10 },
    { first: 5120, last: 5759, bits: 8 },
    { first: 5952, last: 5969, bits: 6 },
    { first: 5970, last: 5971, bits: 262 },
    { first: 5972, last: 5983, bits: 6 },
    { first: 6016, last: 6070, bits: 46 },
    { first: 6071, last: 6077, bits: 302 },
    { first: 6078, last: 6085, bits: 46 },
    { first: 6086, last: 6086, bits: 302 },
    { first: 6087, last: 6088, bits: 46 },
    { first: 6089, last: 6099, bits: 302 },
    { first: 6100, last: 6108, bits: 46 },
    { first: 6109, last: 6109, bits: 302 },
    { first: 6110, last: 6143, bits: 46 },
    { first: 6144, last: 6276, bits: 66 },
    { first: 6277, last: 6278, bits: 322 },
    { first: 6279, last: 6312, bits: 66 },
    { first: 6313, last: 6313, bits: 322 },
    { first: 6314, last: 6319, bits: 66 },
    { first: 6320, last: 6399, bits: 8 },
    { first: 6400, last: 6431, bits: 85 },
    { first: 6432, last: 6434, bits: 341 },
    { first: 6435, last: 6438, bits: 85 },
    { first: 6439, last: 6452, bits: 341 },
    { first: 6453, last: 6454, bits: 85 },
    { first: 6455, last: 6459, bits: 341 },
    { first: 6460, last: 6479, bits: 85 },
    { first: 6624, last: 6655, bits: 47 },
    { first: 6832, last: 6846, bits: 316 },
    { first: 7040, last: 7042, bits: 334 },
    { first: 7043, last: 7072, bits: 78 },
    { first: 7073, last: 7085, bits: 334 },
    { first: 7086, last: 7103, bits: 78 },
    { first: 7248, last: 7295, bits: 70 },
    { first: 7296, last: 7311, bits: 23 },
    { first: 7312, last: 7359, bits: 27 },
    { first: 7360, last: 7375, bits: 78 },
    { first: 7424, last: 7467, bits: 60 },
    { first: 7468, last: 7521, bits: 62 },
    { first: 7522, last: 7530, bits: 61 },
    { first: 7531, last: 7543, bits: 60 },
    { first: 7544, last: 7544, bits: 62 },
    { first: 7545, last: 7578, bits: 60 },
    { first: 7579, last: 7615, bits: 62 },
    { first: 7616, last: 7679, bits: 316 },
    { first: 7680, last: 7935, bits: 60 },
    { first: 7936, last: 8124, bits: 41 },
    { first: 8125, last: 8129, bits: 297 },
    { first: 8130, last: 8140, bits: 41 },
    { first: 8141, last: 8143, bits: 297 },
    { first: 8144, last: 8156, bits: 41 },
    { first: 8157, last: 8159, bits: 297 },
    { first: 8160, last: 8172, bits: 41 },
    { first: 8173, last: 8175, bits: 297 },
    { first: 8176, last: 8188, bits: 41 },
    { first: 8189, last: 8190, bits: 297 },
    { first: 8191, last: 8191, bits: 41 },
    { first: 8192, last: 8214, bits: 60 },
    { first: 8215, last: 8215, bits: 316 },
    { first: 8216, last: 8253, bits: 60 },
    { first: 8254, last: 8254, bits: 316 },
    { first: 8255, last: 8303, bits: 60 },
    { first: 8304, last: 8319, bits: 62 },
    { first: 8320, last: 8348, bits: 61 },
    { first: 8352, last: 8376, bits: 60 },
    { first: 8377, last: 8377, bits: 24 },
    { first: 8378, last: 8399, bits: 60 },
    { first: 8528, last: 8591, bits: 60 },
    { first: 11264, last: 11359, bits: 29 },
    { first: 11360, last: 11387, bits: 60 },
    { first: 11388, last: 11388, bits: 61 },
    { first: 11389, last: 11389, bits: 62 },
    { first: 11390, last: 11391, bits: 60 },
    { first: 11392, last: 11502, bits: 11 },
    { first: 11503, last: 11505, bits: 267 },
    { first: 11506, last: 11519, bits: 11 },
    { first: 11520, last: 11565, bits: 28 },
    { first: 11568, last: 11647, bits: 82 },
    { first: 11648, last: 11743, bits: 26 },
    { first: 11744, last: 11775, bits: 279 },
    { first: 11776, last: 11903, bits: 60 },
    { first: 11904, last: 12255, bits: 89 },
    { first: 12272, last: 12329, bits: 89 },
    { first: 12330, last: 12335, bits: 345 },
    { first: 12336, last: 12687, bits: 89 },
    { first: 12688, last: 12703, bits: 345 },
    { first: 12704, last: 12799, bits: 89 },
    { first: 13056, last: 40959, bits: 89 },
    { first: 42192, last: 42239, bits: 63 },
    { first: 42240, last: 42559, bits: 84 },
    { first: 42560, last: 42606, bits: 23 },
    { first: 42607, last: 42623, bits: 279 },
    { first: 42624, last: 42653, bits: 23 },
    { first: 42654, last: 42655, bits: 279 },
    { first: 42656, last: 42735, bits: 4 },
    { first: 42736, last: 42737, bits: 260 },
    { first: 42738, last: 42751, bits: 4 },
    { first: 42784, last: 42863, bits: 60 },
    { first: 42864, last: 42864, bits: 62 },
    { first: 42865, last: 42887, bits: 60 },
    { first: 42888, last: 42888, bits: 316 },
    { first: 42889, last: 42999, bits: 60 },
    { first: 43000, last: 43001, bits: 62 },
    { first: 43002, last: 43002, bits: 316 },
    { first: 43003, last: 43007, bits: 60 },
    { first: 43008, last: 43009, bits: 87 },
    { first: 43010, last: 43010, bits: 343 },
    { first: 43011, last: 43013, bits: 87 },
    { first: 43014, last: 43014, bits: 343 },
    { first: 43015, last: 43018, bits: 87 },
    { first: 43019, last: 43019, bits: 343 },
    { first: 43020, last: 43044, bits: 87 },
    { first: 43045, last: 43046, bits: 343 },
    { first: 43047, last: 43055, bits: 87 },
    { first: 43136, last: 43137, bits: 331 },
    { first: 43138, last: 43187, bits: 75 },
    { first: 43188, last: 43205, bits: 331 },
    { first: 43206, last: 43231, bits: 75 },
    { first: 43232, last: 43249, bits: 280 },
    { first: 43250, last: 43262, bits: 24 },
    { first: 43263, last: 43263, bits: 280 },
    { first: 43264, last: 43301, bits: 45 },
    { first: 43302, last: 43309, bits: 301 },
    { first: 43310, last: 43311, bits: 45 },
    { first: 43360, last: 43391, bits: 89 },
    { first: 43488, last: 43492, bits: 67 },
    { first: 43493, last: 43493, bits: 323 },
    { first: 43494, last: 43519, bits: 67 },
    { first: 43616, last: 43643, bits: 67 },
    { first: 43644, last: 43644, bits: 323 },
    { first: 43645, last: 43647, bits: 67 },
    { first: 43648, last: 43695, bits: 80 },
    { first: 43696, last: 43696, bits: 336 },
    { first: 43697, last: 43697, bits: 80 },
    { first: 43698, last: 43700, bits: 336 },
    { first: 43701, last: 43702, bits: 80 },
    { first: 43703, last: 43704, bits: 336 },
    { first: 43705, last: 43709, bits: 80 },
    { first: 43710, last: 43711, bits: 336 },
    { first: 43712, last: 43712, bits: 80 },
    { first: 43713, last: 43713, bits: 336 },
    { first: 43714, last: 43743, bits: 80 },
    { first: 43776, last: 43823, bits: 26 },
    { first: 43824, last: 43867, bits: 60 },
    { first: 43868, last: 43871, bits: 62 },
    { first: 43872, last: 43887, bits: 60 },
    { first: 43888, last: 43967, bits: 10 },
    { first: 44032, last: 55295, bits: 89 },
    { first: 63744, last: 64255, bits: 89 },
    { first: 64256, last: 64262, bits: 60 },
    { first: 64275, last: 64279, bits: 2 },
    { first: 64285, last: 64285, bits: 44 },
    { first: 64286, last: 64286, bits: 300 },
    { first: 64287, last: 64335, bits: 44 },
    { first: 64336, last: 64433, bits: 1 },
    { first: 64434, last: 64449, bits: 257 },
    { first: 64450, last: 65023, bits: 1 },
    { first: 65040, last: 65055, bits: 89 },
    { first: 65072, last: 65103, bits: 89 },
    { first: 65136, last: 65136, bits: 257 },
    { first: 65137, last: 65137, bits: 1 },
    { first: 65138, last: 65138, bits: 257 },
    { first: 65139, last: 65139, bits: 1 },
    { first: 65140, last: 65140, bits: 257 },
    { first: 65141, last: 65141, bits: 1 },
    { first: 65142, last: 65142, bits: 257 },
    { first: 65143, last: 65143, bits: 1 },
    { first: 65144, last: 65144, bits: 257 },
    { first: 65145, last: 65145, bits: 1 },
    { first: 65146, last: 65146, bits: 257 },
    { first: 65147, last: 65147, bits: 1 },
    { first: 65148, last: 65148, bits: 257 },
    { first: 65149, last: 65149, bits: 1 },
    { first: 65150, last: 65150, bits: 257 },
    { first: 65151, last: 65279, bits: 1 },
    { first: 65280, last: 65519, bits: 89 },
    { first: 66208, last: 66271, bits: 9 },
    { first: 66352, last: 66383, bits: 30 },
    { first: 66560, last: 66639, bits: 25 },
    { first: 66640, last: 66687, bits: 76 },
    { first: 66688, last: 66735, bits: 73 },
    { first: 66736, last: 66815, bits: 72 },
    { first: 67584, last: 67647, bits: 12 },
    { first: 68352, last: 68408, bits: 3 },
    { first: 68409, last: 68415, bits: 259 },
    { first: 68608, last: 68687, bits: 71 },
    { first: 68864, last: 68927, bits: 74 },
    { first: 69888, last: 69890, bits: 263 },
    { first: 69891, last: 69926, bits: 7 },
    { first: 69927, last: 69940, bits: 263 },
    { first: 69941, last: 69957, bits: 7 },
    { first: 69958, last: 69958, bits: 263 },
    { first: 69959, last: 69967, bits: 7 },
    { first: 71264, last: 71295, bits: 66 },
    { first: 93760, last: 93855, bits: 65 },
    { first: 110592, last: 110895, bits: 89 },
    { first: 119552, last: 119647, bits: 89 },
    { first: 119808, last: 120831, bits: 60 },
    { first: 122880, last: 122927, bits: 285 },
    { first: 125184, last: 125258, bits: 256 },
    { first: 125259, last: 125279, bits: 0 },
    { first: 126464, last: 126719, bits: 1 },
    { first: 131072, last: 173791, bits: 89 },
    { first: 173824, last: 191471, bits: 89 },
    { first: 194560, last: 195103, bits: 89 },
  ]
}

///|
fn autohint_style_range_for_codepoint(
  ch : Int,
  ranges : ArrayView[AutoHintStyleRange],
) -> (Int, Int, Int)? {
  if ch < 0 {
    return None
  }
  let mut lo = 0
  let mut hi = ranges.length()
  while lo < hi {
    let mid = (lo + hi) / 2
    let r = ranges.at(mid)
    if ch < r.first {
      hi = mid
    } else if ch > r.last {
      lo = mid + 1
    } else {
      return Some((r.first, r.last, r.bits))
    }
  }
  None
}

///|
fn autohint_style_script_ix(style_ix : Int) -> Int {
  match style_ix {
    0 => 0
    1 => 1
    2 => 2
    3 => 3
    4 => 4
    5 => 5
    6 => 6
    7 => 7
    8 => 8
    9 => 9
    10 => 10
    11 => 11
    12 => 12
    13 => 13
    14 => 13
    15 => 13
    16 => 13
    17 => 13
    18 => 13
    19 => 13
    20 => 13
    21 => 13
    22 => 13
    23 => 13
    24 => 14
    25 => 15
    26 => 16
    27 => 17
    28 => 18
    29 => 19
    30 => 20
    31 => 21
    32 => 21
    33 => 21
    34 => 21
    35 => 21
    36 => 21
    37 => 21
    38 => 21
    39 => 21
    40 => 21
    41 => 21
    42 => 22
    43 => 23
    44 => 24
    45 => 25
    46 => 26
    47 => 27
    48 => 28
    49 => 29
    50 => 30
    51 => 30
    52 => 30
    53 => 30
    54 => 30
    55 => 30
    56 => 30
    57 => 30
    58 => 30
    59 => 30
    60 => 30
    61 => 31
    62 => 32
    63 => 33
    64 => 34
    65 => 35
    66 => 36
    67 => 37
    68 => 38
    69 => 39
    70 => 40
    71 => 41
    72 => 42
    73 => 43
    74 => 44
    75 => 45
    76 => 46
    77 => 47
    78 => 48
    79 => 49
    80 => 50
    81 => 51
    82 => 52
    83 => 53
    84 => 54
    85 => 55
    86 => 56
    87 => 57
    88 => 58
    89 => 59
    _ => 0
  }
}

///|
fn autohint_script_group(script_ix : Int) -> AutoHintScriptGroup {
  match script_ix {
    0 => Default
    1 => Default
    2 => Default
    3 => Default
    4 => Default
    5 => Default
    6 => Default
    7 => Default
    8 => Default
    9 => Default
    10 => Default
    11 => Default
    12 => Default
    13 => Default
    14 => Default
    15 => Default
    16 => Default
    17 => Default
    18 => Default
    19 => Default
    20 => Default
    21 => Default
    22 => Default
    23 => Default
    24 => Default
    25 => Default
    26 => Default
    27 => Default
    28 => Default
    29 => Default
    30 => Default
    31 => Default
    32 => Default
    33 => Default
    34 => Default
    35 => Default
    36 => Default
    37 => Default
    38 => Default
    39 => Default
    40 => Default
    41 => Default
    42 => Default
    43 => Default
    44 => Default
    45 => Default
    46 => Default
    47 => Default
    48 => Default
    49 => Default
    50 => Default
    51 => Default
    52 => Default
    53 => Default
    54 => Default
    55 => Default
    56 => Default
    57 => Default
    58 => Default
    59 => Cjk
    _ => Default
  }
}

///|
fn autohint_script_hint_top_to_bottom(script_ix : Int) -> Bool {
  match script_ix {
    0 => false
    1 => false
    2 => false
    3 => false
    4 => false
    5 => true
    6 => false
    7 => false
    8 => false
    9 => false
    10 => false
    11 => false
    12 => false
    13 => false
    14 => true
    15 => false
    16 => false
    17 => false
    18 => false
    19 => false
    20 => true
    21 => false
    22 => false
    23 => true
    24 => false
    25 => false
    26 => false
    27 => false
    28 => false
    29 => false
    30 => false
    31 => false
    32 => false
    33 => false
    34 => false
    35 => false
    36 => true
    37 => false
    38 => false
    39 => false
    40 => false
    41 => false
    42 => false
    43 => false
    44 => false
    45 => false
    46 => false
    47 => false
    48 => false
    49 => false
    50 => false
    51 => false
    52 => false
    53 => false
    54 => false
    55 => false
    56 => false
    57 => false
    58 => false
    59 => false
    _ => false
  }
}

///|
fn autohint_script_std_chars(script_ix : Int) -> String {
  match script_ix {
    0 => "𞤌 𞤮"
    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 => "o O 0"
    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 => "o"
    56 => "o"
    57 => "o"
    58 => "o"
    59 => "田 囗"
    _ => ""
  }
}

///|
fn autohint_script_blues(script_ix : Int) -> Array[(String, Int)] {
  match script_ix {
    0 =>
      [
        ("𞤌 𞤅 𞤈 𞤏 𞤔 𞤚", AUTOHINT_BLUE_TOP),
        ("𞤂 𞤖", AUTOHINT_BLUE_NONE),
        ("𞤬 𞤮 𞤻 𞤼 𞤾", AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT),
        ("𞤤 𞤨 𞤩 𞤭 𞤴 𞤸 𞤺 𞥀", AUTOHINT_BLUE_NONE),
      ]
    1 =>
      [
        ("ا إ ل ك ط ظ", AUTOHINT_BLUE_TOP),
        ("ت ث ط ظ ك", AUTOHINT_BLUE_NONE),
        ("ـ", AUTOHINT_BLUE_NEUTRAL),
      ]
    2 =>
      [
        ("Ա Մ Ւ Ս Բ Գ Դ Օ", AUTOHINT_BLUE_TOP),
        ("Ւ Ո Դ Ճ Շ Ս Տ Օ", AUTOHINT_BLUE_NONE),
        ("ե է ի մ վ ֆ ճ", AUTOHINT_BLUE_TOP),
        ("ա յ ւ ս գ շ ր օ", AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT),
        ("հ ո ճ ա ե ծ ս օ", AUTOHINT_BLUE_NONE),
        ("բ ը ի լ ղ պ փ ց", AUTOHINT_BLUE_NONE),
      ]
    3 =>
      [
        ("𐬀 𐬁 𐬐 𐬛", AUTOHINT_BLUE_TOP),
        ("𐬀 𐬁", AUTOHINT_BLUE_NONE),
      ]
    4 =>
      [
        ("ꚧ ꚨ ꛛ ꛉ ꛁ ꛈ ꛫ ꛯ", AUTOHINT_BLUE_TOP),
        ("ꚭ ꚳ ꚶ ꛬ ꚢ ꚽ ꛯ ꛲", AUTOHINT_BLUE_NONE),
      ]
    5 =>
      [
        ("ই ট ঠ ি ী ৈ ৗ", AUTOHINT_BLUE_TOP),
        ("ও এ ড ত ন ব ল ক", AUTOHINT_BLUE_TOP),
        (
          "অ ড ত ন ব ভ ল ক",
          AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_NEUTRAL,
        ),
        ("অ ড ত ন ব ভ ল ক", AUTOHINT_BLUE_NONE),
      ]
    6 =>
      [
        ("ᝐ ᝈ", AUTOHINT_BLUE_TOP),
        ("ᝅ ᝊ ᝎ", AUTOHINT_BLUE_TOP),
        ("ᝂ ᝃ ᝉ ᝌ", AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT),
        ("ᝀ ᝃ ᝆ ᝉ ᝋ ᝏ ᝑ", AUTOHINT_BLUE_NONE),
      ]
    7 =>
      [
        ("𑄃 𑄅 𑄉 𑄙 𑄗", AUTOHINT_BLUE_TOP),
        ("𑄅 𑄛 𑄝 𑄗 𑄓", AUTOHINT_BLUE_NONE),
        (
          "𑄖𑄳𑄢 𑄘𑄳𑄢 𑄙𑄳𑄢 𑄤𑄳𑄢 𑄥𑄳𑄢",
          AUTOHINT_BLUE_NONE,
        ),
      ]
    8 =>
      [
        ("ᗜ ᖴ ᐁ ᒣ ᑫ ᑎ ᔑ ᗰ", AUTOHINT_BLUE_TOP),
        ("ᗶ ᖵ ᒧ ᐃ ᑌ ᒍ ᔑ ᗢ", AUTOHINT_BLUE_NONE),
        (
          "ᓓ ᓕ ᓀ ᓂ ᓄ ᕄ ᕆ ᘣ",
          AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT,
        ),
        ("ᕃ ᓂ ᓀ ᕂ ᓗ ᓚ ᕆ ᘣ", AUTOHINT_BLUE_NONE),
        ("ᐪ ᙆ ᣘ ᐢ ᒾ ᣗ ᔆ", AUTOHINT_BLUE_TOP),
        ("ᙆ ᗮ ᒻ ᐞ ᔆ ᒡ ᒢ ᓑ", AUTOHINT_BLUE_NONE),
      ]
    9 =>
      [
        ("𐊧 𐊫 𐊬 𐊭 𐊱 𐊺 𐊼 𐊿", AUTOHINT_BLUE_TOP),
        ("𐊣 𐊧 𐊷 𐋀 𐊫 𐊸 𐋉", AUTOHINT_BLUE_NONE),
      ]
    10 =>
      [
        ("Ꮖ Ꮋ Ꭼ Ꮓ Ꭴ Ꮳ Ꭶ Ꮥ", AUTOHINT_BLUE_TOP),
        ("Ꮖ Ꮋ Ꭼ Ꮓ Ꭴ Ꮳ Ꭶ Ꮥ", AUTOHINT_BLUE_NONE),
        ("ꮒ ꮤ ꮶ ꭴ ꭾ ꮗ ꮝ ꮿ", AUTOHINT_BLUE_TOP),
        (
          "ꮖ ꭼ ꮓ ꮠ ꮳ ꭶ ꮥ ꮻ",
          AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT,
        ),
        ("ꮖ ꭼ ꮓ ꮠ ꮳ ꭶ ꮥ ꮻ", AUTOHINT_BLUE_NONE),
        ("ᏸ ꮐ ꭹ ꭻ", AUTOHINT_BLUE_NONE),
      ]
    11 =>
      [
        ("Ⲍ Ⲏ Ⲡ Ⳟ Ⲟ Ⲑ Ⲥ Ⳋ", AUTOHINT_BLUE_TOP),
        ("Ⳑ Ⳙ Ⳟ Ⲏ Ⲟ Ⲑ Ⳝ Ⲱ", AUTOHINT_BLUE_NONE),
        (
          "ⲍ ⲏ ⲡ ⳟ ⲟ ⲑ ⲥ ⳋ",
          AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT,
        ),
        ("ⳑ ⳙ ⳟ ⲏ ⲟ ⲑ ⳝ Ⳓ", AUTOHINT_BLUE_NONE),
      ]
    12 =>
      [
        ("𐠍 𐠙 𐠳 𐠱 𐠅 𐠓 𐠣 𐠦", AUTOHINT_BLUE_TOP),
        ("𐠃 𐠊 𐠛 𐠣 𐠳 𐠵 𐠐", AUTOHINT_BLUE_NONE),
        ("𐠈 𐠏 𐠖", AUTOHINT_BLUE_TOP),
        ("𐠈 𐠏 𐠖", AUTOHINT_BLUE_NONE),
      ]
    13 =>
      [
        ("Б В Е П З О С Э", AUTOHINT_BLUE_TOP),
        ("Б В Е Ш З О С Э", AUTOHINT_BLUE_NONE),
        ("х п н ш е з о с", AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT),
        ("х п н ш е з о с", AUTOHINT_BLUE_NONE),
        ("р у ф", AUTOHINT_BLUE_NONE),
      ]
    14 =>
      [
        ("ई ऐ ओ औ ि ी ो ौ", AUTOHINT_BLUE_TOP),
        ("क म अ आ थ ध भ श", AUTOHINT_BLUE_TOP),
        (
          "क न म उ छ ट ठ ड",
          AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_NEUTRAL,
        ),
        ("क न म उ छ ट ठ ड", AUTOHINT_BLUE_NONE),
        ("ु ृ", AUTOHINT_BLUE_NONE),
      ]
    15 =>
      [
        ("𐐂 𐐄 𐐋 𐐗 𐐑", AUTOHINT_BLUE_TOP),
        ("𐐀 𐐂 𐐄 𐐗 𐐛", AUTOHINT_BLUE_NONE),
        ("𐐪 𐐬 𐐳 𐐿 𐐹", AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT),
        ("𐐨 𐐪 𐐬 𐐿 𐑃", AUTOHINT_BLUE_NONE),
      ]
    16 =>
      [
        ("ሀ ሃ ዘ ፐ ማ በ ዋ ዐ", AUTOHINT_BLUE_TOP),
        ("ለ ሐ በ ዘ ሀ ሪ ዐ ጨ", AUTOHINT_BLUE_NONE),
      ]
    17 =>
      [
        (
          "გ დ ე ვ თ ი ო ღ",
          AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT,
        ),
        ("ა ზ მ ს შ ძ ხ პ", AUTOHINT_BLUE_NONE),
        ("ს ხ ქ ზ მ შ ჩ წ", AUTOHINT_BLUE_TOP),
        ("ე ვ ჟ ტ უ ფ ქ ყ", AUTOHINT_BLUE_NONE),
        ("Ნ Ჟ Ჳ Ჸ Გ Ე Ო Ჴ", AUTOHINT_BLUE_TOP),
        ("Ი Ჲ Ო Ჩ Მ Შ Ჯ Ჽ", AUTOHINT_BLUE_NONE),
      ]
    18 =>
      [
        ("Ⴑ Ⴇ Ⴙ Ⴜ Ⴄ Ⴅ Ⴓ Ⴚ", AUTOHINT_BLUE_TOP),
        ("Ⴄ Ⴅ Ⴇ Ⴈ Ⴆ Ⴑ Ⴊ Ⴋ", AUTOHINT_BLUE_NONE),
        (
          "ⴁ ⴗ ⴂ ⴄ ⴅ ⴇ ⴔ ⴖ",
          AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT,
        ),
        ("ⴈ ⴌ ⴖ ⴎ ⴃ ⴆ ⴋ ⴢ", AUTOHINT_BLUE_NONE),
        ("ⴐ ⴑ ⴓ ⴕ ⴙ ⴛ ⴡ ⴣ", AUTOHINT_BLUE_TOP),
        ("ⴄ ⴅ ⴔ ⴕ ⴁ ⴂ ⴘ ⴝ", AUTOHINT_BLUE_NONE),
      ]
    19 =>
      [
        ("Ⰵ Ⱄ Ⱚ Ⰴ Ⰲ Ⰺ Ⱛ Ⰻ", AUTOHINT_BLUE_TOP),
        ("Ⰵ Ⰴ Ⰲ Ⱚ Ⱎ Ⱑ Ⰺ Ⱄ", AUTOHINT_BLUE_NONE),
        (
          "ⰵ ⱄ ⱚ ⰴ ⰲ ⰺ ⱛ ⰻ",
          AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT,
        ),
        ("ⰵ ⰴ ⰲ ⱚ ⱎ ⱑ ⰺ ⱄ", AUTOHINT_BLUE_NONE),
      ]
    20 =>
      [
        ("𐌲 𐌶 𐍀 𐍄 𐌴 𐍃 𐍈 𐌾", AUTOHINT_BLUE_TOP),
        ("𐌶 𐌴 𐍃 𐍈", AUTOHINT_BLUE_NONE),
      ]
    21 =>
      [
        ("Γ Β Ε Ζ Θ Ο Ω", AUTOHINT_BLUE_TOP),
        ("Β Δ Ζ Ξ Θ Ο", AUTOHINT_BLUE_NONE),
        ("β θ δ ζ λ ξ", AUTOHINT_BLUE_TOP),
        ("α ε ι ο π σ τ ω", AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT),
        ("α ε ι ο π σ τ ω", AUTOHINT_BLUE_NONE),
        ("β γ η μ ρ φ χ ψ", AUTOHINT_BLUE_NONE),
      ]
    22 =>
      [
        (
          "ત ન ઋ ઌ છ ટ ર ૦",
          AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT,
        ),
        ("ખ ગ ઘ ઞ ઇ ઈ ઠ જ", AUTOHINT_BLUE_NONE),
        ("ઈ ઊ િ ી લી શ્ચિ જિ સી", AUTOHINT_BLUE_TOP),
        ("ુ ૃ ૄ ખુ છૃ છૄ", AUTOHINT_BLUE_NONE),
        ("૦ ૧ ૨ ૩ ૭", AUTOHINT_BLUE_TOP),
      ]
    23 =>
      [
        ("ਇ ਈ ਉ ਏ ਓ ੳ ਿ ੀ", AUTOHINT_BLUE_TOP),
        ("ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ", AUTOHINT_BLUE_TOP),
        (
          "ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ",
          AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_NEUTRAL,
        ),
        ("ਅ ਏ ਓ ਗ ਜ ਠ ਰ ਸ", AUTOHINT_BLUE_NONE),
        ("੦ ੧ ੨ ੩ ੭", AUTOHINT_BLUE_TOP),
      ]
    24 =>
      [
        ("ב ד ה ח ך כ ם ס", AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_LONG),
        ("ב ט כ ם ס צ", AUTOHINT_BLUE_NONE),
        ("ק ך ן ף ץ", AUTOHINT_BLUE_NONE),
      ]
    25 =>
      [
        ("꤅ ꤏ ꤁ ꤋ ꤀ ꤍ", AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT),
        ("꤈ ꤘ ꤀ ꤍ ꤢ", AUTOHINT_BLUE_NONE),
        ("ꤖ ꤡ", AUTOHINT_BLUE_TOP),
        ("ꤑ ꤜ ꤞ", AUTOHINT_BLUE_NONE),
        ("ꤑ꤬ ꤜ꤭ ꤔ꤬", AUTOHINT_BLUE_NONE),
      ]
    26 =>
      [
        ("ខ ទ ន ឧ ឩ ា", AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT),
        ("ក្ក ក្ខ ក្គ ក្ថ", AUTOHINT_BLUE_SUB_TOP),
        ("ខ ឃ ច ឋ ប ម យ ឲ", AUTOHINT_BLUE_NONE),
        ("ត្រ រៀ ឲ្យ អឿ", AUTOHINT_BLUE_NONE),
        (
          "ន្ត្រៃ ង្ខ្យ ក្បៀ ច្រៀ ន្តឿ ល្បឿ",
          AUTOHINT_BLUE_NONE,
        ),
      ]
    27 =>
      [
        ("᧠ ᧡", AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT),
        ("᧶ ᧹", AUTOHINT_BLUE_NONE),
      ]
    28 =>
      [
        ("ಇ ಊ ಐ ಣ ಸಾ ನಾ ದಾ ರಾ", AUTOHINT_BLUE_TOP),
        ("ಅ ಉ ಎ ಲ ೦ ೨ ೬ ೭", AUTOHINT_BLUE_NONE),
      ]
    29 =>
      [
        (
          "າ ດ ອ ມ ລ ວ ຣ ງ",
          AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT,
        ),
        ("າ ອ ບ ຍ ຣ ຮ ວ ຢ", AUTOHINT_BLUE_NONE),
        ("ປ ຢ ຟ ຝ", AUTOHINT_BLUE_TOP),
        ("ໂ ໄ ໃ", AUTOHINT_BLUE_TOP),
        ("ງ ຊ ຖ ຽ ໆ ຯ", AUTOHINT_BLUE_NONE),
      ]
    30 =>
      [
        ("T H E Z O C Q S", AUTOHINT_BLUE_TOP),
        ("H E Z L O C U S", AUTOHINT_BLUE_NONE),
        ("f i j k d b h", AUTOHINT_BLUE_TOP),
        ("u v x z o e s c", AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT),
        ("n r x z o e s c", AUTOHINT_BLUE_NONE),
        ("p q g j y", AUTOHINT_BLUE_NONE),
      ]
    31 =>
      [
        ("₀ ₃ ₅ ₇ ₈", AUTOHINT_BLUE_TOP),
        ("₀ ₁ ₂ ₃ ₈", AUTOHINT_BLUE_NONE),
        ("ᵢ ⱼ ₕ ₖ ₗ", AUTOHINT_BLUE_TOP),
        (
          "ₐ ₑ ₒ ₓ ₙ ₛ ᵥ ᵤ ᵣ",
          AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT,
        ),
        ("ₐ ₑ ₒ ₓ ₙ ₛ ᵥ ᵤ ᵣ", AUTOHINT_BLUE_NONE),
        ("ᵦ ᵧ ᵨ ᵩ ₚ", AUTOHINT_BLUE_NONE),
      ]
    32 =>
      [
        ("⁰ ³ ⁵ ⁷ ᵀ ᴴ ᴱ ᴼ", AUTOHINT_BLUE_TOP),
        ("⁰ ¹ ² ³ ᴱ ᴸ ᴼ ᵁ", AUTOHINT_BLUE_NONE),
        ("ᵇ ᵈ ᵏ ʰ ʲ ᶠ ⁱ", AUTOHINT_BLUE_TOP),
        ("ᵉ ᵒ ʳ ˢ ˣ ᶜ ᶻ", AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT),
        ("ᵉ ᵒ ʳ ˢ ˣ ᶜ ᶻ", AUTOHINT_BLUE_NONE),
        ("ᵖ ʸ ᵍ", AUTOHINT_BLUE_NONE),
      ]
    33 =>
      [
        ("ꓡ ꓧ ꓱ ꓶ ꓩ ꓚ ꓵ ꓳ", AUTOHINT_BLUE_TOP),
        ("ꓕ ꓜ ꓞ ꓡ ꓛ ꓢ ꓳ ꓴ", AUTOHINT_BLUE_NONE),
      ]
    34 =>
      [
        ("ഒ ട ഠ റ ച പ ച്ച പ്പ", AUTOHINT_BLUE_TOP),
        ("ട ഠ ധ ശ ഘ ച ഥ ല", AUTOHINT_BLUE_NONE),
      ]
    35 =>
      [
        ("𖹀 𖹁 𖹂 𖹃 𖹏 𖹚 𖹟", AUTOHINT_BLUE_TOP),
        ("𖹀 𖹁 𖹂 𖹃 𖹏 𖹚 𖹒 𖹓", AUTOHINT_BLUE_NONE),
        ("𖹤 𖹬 𖹧 𖹴 𖹶 𖹾", AUTOHINT_BLUE_TOP),
        (
          "𖹠 𖹡 𖹢 𖹹 𖹳 𖹮",
          AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT,
        ),
        ("𖹠 𖹡 𖹢 𖹳 𖹭 𖹽", AUTOHINT_BLUE_NONE),
        ("𖹥 𖹨 𖹩", AUTOHINT_BLUE_NONE),
        ("𖺀 𖺅 𖺈 𖺄 𖺍", AUTOHINT_BLUE_TOP),
      ]
    36 =>
      [
        (
          "ᠳ ᠴ ᠶ ᠽ ᡂ ᡊ \\u{200d}ᡡ\\u{200d} \\u{200d}ᡳ\\u{200d}",
          AUTOHINT_BLUE_TOP,
        ),
        ("ᡃ", AUTOHINT_BLUE_NONE),
      ]
    37 =>
      [
        (
          "ခ ဂ င ဒ ဝ ၥ ၊ ။",
          AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT,
        ),
        ("င ဎ ဒ ပ ဗ ဝ ၊ ။", AUTOHINT_BLUE_NONE),
        ("ဩ ြ ၍ ၏ ၆ ါ ိ", AUTOHINT_BLUE_TOP),
        ("ဉ ည ဥ ဩ ဨ ၂ ၅ ၉", AUTOHINT_BLUE_NONE),
      ]
    38 =>
      [
        ("ߐ ߉ ߒ ߟ ߖ ߜ ߠ ߥ", AUTOHINT_BLUE_TOP),
        ("߀ ߘ ߡ ߠ ߥ", AUTOHINT_BLUE_NONE),
        ("ߏ ߛ ߋ", AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT),
        ("ߎ ߏ ߛ ߋ", AUTOHINT_BLUE_NONE),
      ]
    39 => []
    40 =>
      [
        ("ᱛ ᱜ ᱝ ᱡ ᱢ ᱥ", AUTOHINT_BLUE_TOP),
        ("ᱛ ᱜ ᱝ ᱡ ᱢ ᱥ", AUTOHINT_BLUE_NONE),
      ]
    41 =>
      [
        ("𐰗 𐰘 𐰧", AUTOHINT_BLUE_TOP),
        ("𐰉 𐰗 𐰦 𐰧", AUTOHINT_BLUE_NONE),
      ]
    42 =>
      [
        ("𐒾 𐓍 𐓒 𐓓 𐒻 𐓂 𐒵 𐓆", AUTOHINT_BLUE_TOP),
        ("𐒰 𐓍 𐓂 𐒿 𐓎 𐒹", AUTOHINT_BLUE_NONE),
        ("𐒼 𐒽 𐒾", AUTOHINT_BLUE_NONE),
        (
          "𐓵 𐓶 𐓺 𐓻 𐓝 𐓣 𐓪 𐓮",
          AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT,
        ),
        ("𐓘 𐓚 𐓣 𐓵 𐓡 𐓧 𐓪 𐓶", AUTOHINT_BLUE_NONE),
        ("𐓤 𐓦 𐓸 𐓹 𐓛", AUTOHINT_BLUE_TOP),
        ("𐓤 𐓥 𐓦", AUTOHINT_BLUE_NONE),
      ]
    43 =>
      [
        ("𐒆 𐒉 𐒐 𐒒 𐒘 𐒛 𐒠 𐒣", AUTOHINT_BLUE_TOP),
        ("𐒀 𐒂 𐒆 𐒈 𐒊 𐒒 𐒠 𐒩", AUTOHINT_BLUE_NONE),
      ]
    44 =>
      [
        ("𐴃 𐴀 𐴆 𐴖 𐴕", AUTOHINT_BLUE_TOP),
        ("𐴔 𐴖 𐴕 𐴑 𐴐", AUTOHINT_BLUE_NONE),
        ("ـ", AUTOHINT_BLUE_NEUTRAL),
      ]
    45 =>
      [
        ("ꢜ ꢞ ꢳ ꢂ ꢖ ꢒ ꢝ ꢛ", AUTOHINT_BLUE_TOP),
        ("ꢂ ꢨ ꢺ ꢤ ꢎ", AUTOHINT_BLUE_NONE),
      ]
    46 =>
      [
        ("𐑕 𐑙", AUTOHINT_BLUE_TOP),
        ("𐑔 𐑖 𐑗 𐑹 𐑻", AUTOHINT_BLUE_NONE),
        ("𐑟 𐑣", AUTOHINT_BLUE_NONE),
        (
          "𐑱 𐑲 𐑳 𐑴 𐑸 𐑺 𐑼",
          AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT,
        ),
        ("𐑴 𐑻 𐑹", AUTOHINT_BLUE_NONE),
      ]
    47 =>
      [
        ("ඉ ක ඝ ඳ ප ය ල ෆ", AUTOHINT_BLUE_TOP),
        ("එ ඔ ඝ ජ ට ථ ධ ර", AUTOHINT_BLUE_NONE),
        ("ද ඳ උ ල තූ තු බු දු", AUTOHINT_BLUE_NONE),
      ]
    48 =>
      [
        ("ᮋ ᮞ ᮮ ᮽ ᮰ ᮈ", AUTOHINT_BLUE_TOP),
        ("ᮄ ᮔ ᮕ ᮗ ᮰ ᮆ ᮈ ᮉ", AUTOHINT_BLUE_NONE),
        ("ᮼ ᳄", AUTOHINT_BLUE_NONE),
      ]
    49 =>
      [
        ("உ ஒ ஓ ற ஈ க ங ச", AUTOHINT_BLUE_TOP),
        ("க ச ல ஶ உ ங ட ப", AUTOHINT_BLUE_NONE),
      ]
    50 =>
      [
        ("ꪆ ꪔ ꪒ ꪖ ꪫ", AUTOHINT_BLUE_TOP),
        ("ꪉ ꪫ ꪮ", AUTOHINT_BLUE_NONE),
      ]
    51 =>
      [
        ("ఇ ఌ ఙ ఞ ణ ఱ ౯", AUTOHINT_BLUE_TOP),
        ("అ క చ ర ఽ ౨ ౬", AUTOHINT_BLUE_NONE),
      ]
    52 =>
      [
        ("ⵔ ⵙ ⵛ ⵞ ⴵ ⴼ ⴹ ⵎ", AUTOHINT_BLUE_TOP),
        ("ⵔ ⵙ ⵛ ⵞ ⴵ ⴼ ⴹ ⵎ", AUTOHINT_BLUE_NONE),
      ]
    53 =>
      [
        ("บ เ แ อ ก า", AUTOHINT_BLUE_TOP | AUTOHINT_BLUE_X_HEIGHT),
        ("บ ป ษ ฯ อ ย ฮ", AUTOHINT_BLUE_NONE),
        ("ป ฝ ฟ", AUTOHINT_BLUE_TOP),
        ("โ ใ ไ", AUTOHINT_BLUE_TOP),
        ("ฎ ฏ ฤ ฦ", AUTOHINT_BLUE_NONE),
        ("ญ ฐ", AUTOHINT_BLUE_NONE),
        ("๐ ๑ ๓", AUTOHINT_BLUE_NONE),
      ]
    54 =>
      [
        ("ꗍ ꘖ ꘙ ꘜ ꖜ ꖝ ꔅ ꕢ", AUTOHINT_BLUE_TOP),
        ("ꗍ ꘖ ꘙ ꗞ ꔅ ꕢ ꖜ ꔆ", AUTOHINT_BLUE_NONE),
      ]
    55 => []
    56 => []
    57 => []
    58 => []
    59 =>
      [
        (
          "他 们 你 來 們 到 和 地 对 對 就 席 我 时 時 會 来 為 能 舰 說 说 这 這 齊 | 军 同 已 愿 既 星 是 景 民 照 现 現 理 用 置 要 軍 那 配 里 開 雷 露 面 顾",
          AUTOHINT_BLUE_TOP,
        ),
        (
          "个 为 人 他 以 们 你 來 個 們 到 和 大 对 對 就 我 时 時 有 来 為 要 說 说 | 主 些 因 它 想 意 理 生 當 看 着 置 者 自 著 裡 过 还 进 進 過 道 還 里 面",
          AUTOHINT_BLUE_NONE,
        ),
        (
          " 些 们 你 來 們 到 和 地 她 将 將 就 年 得 情 最 样 樣 理 能 說 说 这 這 通 | 即 吗 吧 听 呢 品 响 嗎 师 師 收 断 斷 明 眼 間 间 际 陈 限 除 陳 随 際 隨",
          AUTOHINT_BLUE_HORIZONTAL,
        ),
        (
          "事 前 學 将 將 情 想 或 政 斯 新 样 樣 民 沒 没 然 特 现 現 球 第 經 谁 起 | 例 別 别 制 动 動 吗 嗎 增 指 明 朝 期 构 物 确 种 調 调 費 费 那 都 間 间",
          AUTOHINT_BLUE_HORIZONTAL | AUTOHINT_BLUE_RIGHT,
        ),
      ]
    _ => Array::new()
  }
}