// Code point ranges per script, decoded from the regular expressions in
// franc-min 6.2.0 expressions.js (surrogate pairs combined, adjacent
// ranges merged). Each table is sorted, inclusive [lo, hi] pairs.

///|
let han_ranges : FixedArray[Int32] = [
  0x2E80, 0x2E99, 0x2E9B, 0x2EF3, 0x2F00, 0x2FD5, 0x3005, 0x3005, 0x3007, 0x3007,
  0x3021, 0x3029, 0x3038, 0x303B, 0x3400, 0x4DBF, 0x4E00, 0x9FFF, 0xF900, 0xFA6D,
  0xFA70, 0xFAD9, 0x16FE2, 0x16FE3, 0x16FF0, 0x16FF1, 0x20000, 0x2A6DF, 0x2A700,
  0x2B739, 0x2B740, 0x2B81D, 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, 0x2F800, 0x2FA1D,
  0x30000, 0x3134A, 0x31350, 0x323AF,
]

///|
let latin_ranges : FixedArray[Int32] = [
  0x41, 0x5A, 0x61, 0x7A, 0xAA, 0xAA, 0xBA, 0xBA, 0xC0, 0xD6, 0xD8, 0xF6, 0xF8, 0x2B8,
  0x2E0, 0x2E4, 0x1D00, 0x1D25, 0x1D2C, 0x1D5C, 0x1D62, 0x1D65, 0x1D6B, 0x1D77, 0x1D79,
  0x1DBE, 0x1E00, 0x1EFF, 0x2071, 0x2071, 0x207F, 0x207F, 0x2090, 0x209C, 0x212A,
  0x212B, 0x2132, 0x2132, 0x214E, 0x214E, 0x2160, 0x2188, 0x2C60, 0x2C7F, 0xA722,
  0xA787, 0xA78B, 0xA7CA, 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9, 0xA7F2,
  0xA7FF, 0xAB30, 0xAB5A, 0xAB5C, 0xAB64, 0xAB66, 0xAB69, 0xFB00, 0xFB06, 0xFF21,
  0xFF3A, 0xFF41, 0xFF5A, 0x10780, 0x10785, 0x10787, 0x107B0, 0x107B2, 0x107BA, 0x1DF00,
  0x1DF1E, 0x1DF25, 0x1DF2A,
]

///|
let cyrillic_ranges : FixedArray[Int32] = [
  0x400, 0x484, 0x487, 0x52F, 0x1C80, 0x1C88, 0x1D2B, 0x1D2B, 0x1D78, 0x1D78, 0x2DE0,
  0x2DFF, 0xA640, 0xA69F, 0xFE2E, 0xFE2F, 0x1E030, 0x1E06D, 0x1E08F, 0x1E08F,
]

///|
let arabic_ranges : FixedArray[Int32] = [
  0x600, 0x604, 0x606, 0x60B, 0x60D, 0x61A, 0x61C, 0x61E, 0x620, 0x63F, 0x641, 0x64A,
  0x656, 0x66F, 0x671, 0x6DC, 0x6DE, 0x6FF, 0x750, 0x77F, 0x870, 0x88E, 0x890, 0x891,
  0x898, 0x8E1, 0x8E3, 0x8FF, 0xFB50, 0xFBC2, 0xFBD3, 0xFD3D, 0xFD40, 0xFD8F, 0xFD92,
  0xFDC7, 0xFDCF, 0xFDCF, 0xFDF0, 0xFDFF, 0xFE70, 0xFE74, 0xFE76, 0xFEFC, 0x10E60,
  0x10E7E, 0x10EFD, 0x10EFF, 0x1EE00, 0x1EE03, 0x1EE05, 0x1EE1F, 0x1EE21, 0x1EE22,
  0x1EE24, 0x1EE24, 0x1EE27, 0x1EE27, 0x1EE29, 0x1EE32, 0x1EE34, 0x1EE37, 0x1EE39,
  0x1EE39, 0x1EE3B, 0x1EE3B, 0x1EE42, 0x1EE42, 0x1EE47, 0x1EE47, 0x1EE49, 0x1EE49,
  0x1EE4B, 0x1EE4B, 0x1EE4D, 0x1EE4F, 0x1EE51, 0x1EE52, 0x1EE54, 0x1EE54, 0x1EE57,
  0x1EE57, 0x1EE59, 0x1EE59, 0x1EE5B, 0x1EE5B, 0x1EE5D, 0x1EE5D, 0x1EE5F, 0x1EE5F,
  0x1EE61, 0x1EE62, 0x1EE64, 0x1EE64, 0x1EE67, 0x1EE6A, 0x1EE6C, 0x1EE72, 0x1EE74,
  0x1EE77, 0x1EE79, 0x1EE7C, 0x1EE7E, 0x1EE7E, 0x1EE80, 0x1EE89, 0x1EE8B, 0x1EE9B,
  0x1EEA1, 0x1EEA3, 0x1EEA5, 0x1EEA9, 0x1EEAB, 0x1EEBB, 0x1EEF0, 0x1EEF1,
]

///|
let bengali_ranges : FixedArray[Int32] = [
  0x980, 0x983, 0x985, 0x98C, 0x98F, 0x990, 0x993, 0x9A8, 0x9AA, 0x9B0, 0x9B2, 0x9B2,
  0x9B6, 0x9B9, 0x9BC, 0x9C4, 0x9C7, 0x9C8, 0x9CB, 0x9CE, 0x9D7, 0x9D7, 0x9DC, 0x9DD,
  0x9DF, 0x9E3, 0x9E6, 0x9FE,
]

///|
let devanagari_ranges : FixedArray[Int32] = [
  0x900, 0x950, 0x955, 0x963, 0x966, 0x97F, 0xA8E0, 0xA8FF, 0x11B00, 0x11B09,
]

///|
let kana_ranges : FixedArray[Int32] = [
  0x3041, 0x3096, 0x309D, 0x309F, 0x30A1, 0x30FA, 0x30FD, 0x30FF, 0x31F0, 0x31FF,
  0x32D0, 0x32FE, 0x3300, 0x3357, 0x3400, 0x4DB5, 0x4E00, 0x9FAF, 0xFF66, 0xFF6F,
  0xFF71, 0xFF9D, 0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE, 0x1B000,
  0x1B122, 0x1B132, 0x1B132, 0x1B150, 0x1B152, 0x1B155, 0x1B155, 0x1B164, 0x1B167,
  0x1F200, 0x1F200,
]

///|
let javanese_ranges : FixedArray[Int32] = [
  0xA980, 0xA9CD, 0xA9D0, 0xA9D9, 0xA9DE, 0xA9DF,
]

///|
let hangul_ranges : FixedArray[Int32] = [
  0x1100, 0x11FF, 0x302E, 0x302F, 0x3131, 0x318E, 0x3200, 0x321E, 0x3260, 0x327E,
  0xA960, 0xA97C, 0xAC00, 0xD7A3, 0xD7B0, 0xD7C6, 0xD7CB, 0xD7FB, 0xFFA0, 0xFFBE,
  0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF, 0xFFD2, 0xFFD7, 0xFFDA, 0xFFDC,
]

///|
let telugu_ranges : FixedArray[Int32] = [
  0xC00, 0xC0C, 0xC0E, 0xC10, 0xC12, 0xC28, 0xC2A, 0xC39, 0xC3C, 0xC44, 0xC46, 0xC48,
  0xC4A, 0xC4D, 0xC55, 0xC56, 0xC58, 0xC5A, 0xC5D, 0xC5D, 0xC60, 0xC63, 0xC66, 0xC6F,
  0xC77, 0xC7F,
]

///|
let tamil_ranges : FixedArray[Int32] = [
  0xB82, 0xB83, 0xB85, 0xB8A, 0xB8E, 0xB90, 0xB92, 0xB95, 0xB99, 0xB9A, 0xB9C, 0xB9C,
  0xB9E, 0xB9F, 0xBA3, 0xBA4, 0xBA8, 0xBAA, 0xBAE, 0xBB9, 0xBBE, 0xBC2, 0xBC6, 0xBC8,
  0xBCA, 0xBCD, 0xBD0, 0xBD0, 0xBD7, 0xBD7, 0xBE6, 0xBFA, 0x11FC0, 0x11FF1, 0x11FFF,
  0x11FFF,
]

///|
let gujarati_ranges : FixedArray[Int32] = [
  0xA81, 0xA83, 0xA85, 0xA8D, 0xA8F, 0xA91, 0xA93, 0xAA8, 0xAAA, 0xAB0, 0xAB2, 0xAB3,
  0xAB5, 0xAB9, 0xABC, 0xAC5, 0xAC7, 0xAC9, 0xACB, 0xACD, 0xAD0, 0xAD0, 0xAE0, 0xAE3,
  0xAE6, 0xAF1, 0xAF9, 0xAFF,
]

///|
let kannada_ranges : FixedArray[Int32] = [
  0xC80, 0xC8C, 0xC8E, 0xC90, 0xC92, 0xCA8, 0xCAA, 0xCB3, 0xCB5, 0xCB9, 0xCBC, 0xCC4,
  0xCC6, 0xCC8, 0xCCA, 0xCCD, 0xCD5, 0xCD6, 0xCDD, 0xCDE, 0xCE0, 0xCE3, 0xCE6, 0xCEF,
  0xCF1, 0xCF3,
]

///|
let malayalam_ranges : FixedArray[Int32] = [
  0xD00, 0xD0C, 0xD0E, 0xD10, 0xD12, 0xD44, 0xD46, 0xD48, 0xD4A, 0xD4F, 0xD54, 0xD63,
  0xD66, 0xD7F,
]

///|
let myanmar_ranges : FixedArray[Int32] = [
  0x1000, 0x109F, 0xA9E0, 0xA9FE, 0xAA60, 0xAA7F,
]

///|
let gurmukhi_ranges : FixedArray[Int32] = [
  0xA01, 0xA03, 0xA05, 0xA0A, 0xA0F, 0xA10, 0xA13, 0xA28, 0xA2A, 0xA30, 0xA32, 0xA33,
  0xA35, 0xA36, 0xA38, 0xA39, 0xA3C, 0xA3C, 0xA3E, 0xA42, 0xA47, 0xA48, 0xA4B, 0xA4D,
  0xA51, 0xA51, 0xA59, 0xA5C, 0xA5E, 0xA5E, 0xA66, 0xA76,
]

///|
let ethiopic_ranges : FixedArray[Int32] = [
  0x1200, 0x1248, 0x124A, 0x124D, 0x1250, 0x1256, 0x1258, 0x1258, 0x125A, 0x125D,
  0x1260, 0x1288, 0x128A, 0x128D, 0x1290, 0x12B0, 0x12B2, 0x12B5, 0x12B8, 0x12BE,
  0x12C0, 0x12C0, 0x12C2, 0x12C5, 0x12C8, 0x12D6, 0x12D8, 0x1310, 0x1312, 0x1315,
  0x1318, 0x135A, 0x135D, 0x137C, 0x1380, 0x1399, 0x2D80, 0x2D96, 0x2DA0, 0x2DA6,
  0x2DA8, 0x2DAE, 0x2DB0, 0x2DB6, 0x2DB8, 0x2DBE, 0x2DC0, 0x2DC6, 0x2DC8, 0x2DCE,
  0x2DD0, 0x2DD6, 0x2DD8, 0x2DDE, 0xAB01, 0xAB06, 0xAB09, 0xAB0E, 0xAB11, 0xAB16,
  0xAB20, 0xAB26, 0xAB28, 0xAB2E, 0x1E7E0, 0x1E7E6, 0x1E7E8, 0x1E7EB, 0x1E7ED, 0x1E7EE,
  0x1E7F0, 0x1E7FE,
]

///|
let thai_ranges : FixedArray[Int32] = [0xE01, 0xE3A, 0xE40, 0xE5B]

///|
let sinhala_ranges : FixedArray[Int32] = [
  0xD81, 0xD83, 0xD85, 0xD96, 0xD9A, 0xDB1, 0xDB3, 0xDBB, 0xDBD, 0xDBD, 0xDC0, 0xDC6,
  0xDCA, 0xDCA, 0xDCF, 0xDD4, 0xDD6, 0xDD6, 0xDD8, 0xDDF, 0xDE6, 0xDEF, 0xDF2, 0xDF4,
  0x111E1, 0x111F4,
]

///|
let greek_ranges : FixedArray[Int32] = [
  0x370, 0x373, 0x375, 0x377, 0x37A, 0x37D, 0x37F, 0x37F, 0x384, 0x384, 0x386, 0x386,
  0x388, 0x38A, 0x38C, 0x38C, 0x38E, 0x3A1, 0x3A3, 0x3E1, 0x3F0, 0x3FF, 0x1D26, 0x1D2A,
  0x1D5D, 0x1D61, 0x1D66, 0x1D6A, 0x1DBF, 0x1DBF, 0x1F00, 0x1F15, 0x1F18, 0x1F1D,
  0x1F20, 0x1F45, 0x1F48, 0x1F4D, 0x1F50, 0x1F57, 0x1F59, 0x1F59, 0x1F5B, 0x1F5B,
  0x1F5D, 0x1F5D, 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FC4, 0x1FC6, 0x1FD3,
  0x1FD6, 0x1FDB, 0x1FDD, 0x1FEF, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FFE, 0x2126, 0x2126,
  0xAB65, 0xAB65, 0x10140, 0x1018E, 0x101A0, 0x101A0, 0x1D200, 0x1D245,
]

///|
/// Range tables indexed like `all_scripts`.
let script_ranges : FixedArray[FixedArray[Int32]] = [
  han_ranges, latin_ranges, cyrillic_ranges, arabic_ranges, bengali_ranges, devanagari_ranges,
  kana_ranges, javanese_ranges, hangul_ranges, telugu_ranges, tamil_ranges, gujarati_ranges,
  kannada_ranges, malayalam_ranges, myanmar_ranges, gurmukhi_ranges, ethiopic_ranges,
  thai_ranges, sinhala_ranges, greek_ranges,
]