#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[allow(non_camel_case_types)]
pub enum BidiClass {
L,
R,
AL,
EN,
ES,
ET,
AN,
CS,
NSM,
BN,
B,
S,
WS,
ON,
LRE,
RLE,
LRO,
RLO,
PDF,
LRI,
RLI,
FSI,
PDI,
}
const BIDI_CLASS_RANGES: &[(u32, u32, BidiClass)] = &[
(0x0000, 0x0008, BidiClass::BN),
(0x0009, 0x0009, BidiClass::S),
(0x000A, 0x000A, BidiClass::B),
(0x000B, 0x000B, BidiClass::S),
(0x000C, 0x000C, BidiClass::WS),
(0x000D, 0x000D, BidiClass::B),
(0x000E, 0x001B, BidiClass::BN),
(0x001C, 0x001E, BidiClass::B),
(0x001F, 0x001F, BidiClass::S),
(0x0020, 0x0020, BidiClass::WS),
(0x0021, 0x0022, BidiClass::ON),
(0x0023, 0x0025, BidiClass::ET),
(0x0026, 0x002A, BidiClass::ON),
(0x002B, 0x002B, BidiClass::ES),
(0x002C, 0x002C, BidiClass::CS),
(0x002D, 0x002D, BidiClass::ES),
(0x002E, 0x002F, BidiClass::CS),
(0x0030, 0x0039, BidiClass::EN),
(0x003A, 0x003A, BidiClass::CS),
(0x003B, 0x0040, BidiClass::ON),
(0x005B, 0x0060, BidiClass::ON),
(0x007B, 0x007E, BidiClass::ON),
(0x007F, 0x0084, BidiClass::BN),
(0x0085, 0x0085, BidiClass::B),
(0x0086, 0x009F, BidiClass::BN),
(0x00A0, 0x00A0, BidiClass::CS),
(0x00A1, 0x00A1, BidiClass::ON),
(0x00A2, 0x00A5, BidiClass::ET),
(0x00A6, 0x00A9, BidiClass::ON),
(0x00AB, 0x00AC, BidiClass::ON),
(0x00AD, 0x00AD, BidiClass::BN),
(0x00AE, 0x00AF, BidiClass::ON),
(0x00B0, 0x00B1, BidiClass::ET),
(0x00B2, 0x00B3, BidiClass::EN),
(0x00B4, 0x00B4, BidiClass::ON),
(0x00B6, 0x00B8, BidiClass::ON),
(0x00B9, 0x00B9, BidiClass::EN),
(0x00BB, 0x00BF, BidiClass::ON),
(0x00D7, 0x00D7, BidiClass::ON),
(0x00F7, 0x00F7, BidiClass::ON),
(0x02B9, 0x02BA, BidiClass::ON),
(0x02C2, 0x02CF, BidiClass::ON),
(0x02D2, 0x02DF, BidiClass::ON),
(0x02E5, 0x02ED, BidiClass::ON),
(0x02EF, 0x02FF, BidiClass::ON),
(0x0300, 0x036F, BidiClass::NSM),
(0x0374, 0x0375, BidiClass::ON),
(0x037E, 0x037E, BidiClass::ON),
(0x0384, 0x0385, BidiClass::ON),
(0x0387, 0x0387, BidiClass::ON),
(0x03F6, 0x03F6, BidiClass::ON),
(0x0483, 0x0489, BidiClass::NSM),
(0x058A, 0x058A, BidiClass::ON),
(0x058D, 0x058E, BidiClass::ON),
(0x058F, 0x058F, BidiClass::ET),
(0x0591, 0x05BD, BidiClass::NSM),
(0x05BE, 0x05BE, BidiClass::R),
(0x05BF, 0x05BF, BidiClass::NSM),
(0x05C0, 0x05C0, BidiClass::R),
(0x05C1, 0x05C2, BidiClass::NSM),
(0x05C3, 0x05C3, BidiClass::R),
(0x05C4, 0x05C5, BidiClass::NSM),
(0x05C6, 0x05C6, BidiClass::R),
(0x05C7, 0x05C7, BidiClass::NSM),
(0x05D0, 0x05EA, BidiClass::R),
(0x05EF, 0x05F4, BidiClass::R),
(0x0600, 0x0605, BidiClass::AN),
(0x0606, 0x0607, BidiClass::ON),
(0x0608, 0x0608, BidiClass::AL),
(0x0609, 0x060A, BidiClass::ET),
(0x060B, 0x060B, BidiClass::AL),
(0x060C, 0x060C, BidiClass::CS),
(0x060D, 0x060D, BidiClass::AL),
(0x060E, 0x060F, BidiClass::ON),
(0x0610, 0x061A, BidiClass::NSM),
(0x061B, 0x064A, BidiClass::AL),
(0x064B, 0x065F, BidiClass::NSM),
(0x0660, 0x0669, BidiClass::AN),
(0x066A, 0x066A, BidiClass::ET),
(0x066B, 0x066C, BidiClass::AN),
(0x066D, 0x066F, BidiClass::AL),
(0x0670, 0x0670, BidiClass::NSM),
(0x0671, 0x06D5, BidiClass::AL),
(0x06D6, 0x06DC, BidiClass::NSM),
(0x06DD, 0x06DD, BidiClass::AN),
(0x06DE, 0x06DE, BidiClass::ON),
(0x06DF, 0x06E4, BidiClass::NSM),
(0x06E5, 0x06E6, BidiClass::AL),
(0x06E7, 0x06E8, BidiClass::NSM),
(0x06E9, 0x06E9, BidiClass::ON),
(0x06EA, 0x06ED, BidiClass::NSM),
(0x06EE, 0x06EF, BidiClass::AL),
(0x06F0, 0x06F9, BidiClass::EN),
(0x06FA, 0x070D, BidiClass::AL),
(0x070F, 0x0710, BidiClass::AL),
(0x0711, 0x0711, BidiClass::NSM),
(0x0712, 0x072F, BidiClass::AL),
(0x0730, 0x074A, BidiClass::NSM),
(0x074D, 0x07A5, BidiClass::AL),
(0x07A6, 0x07B0, BidiClass::NSM),
(0x07B1, 0x07B1, BidiClass::AL),
(0x07C0, 0x07EA, BidiClass::R),
(0x07EB, 0x07F3, BidiClass::NSM),
(0x07F4, 0x07F5, BidiClass::R),
(0x07F6, 0x07F9, BidiClass::ON),
(0x07FA, 0x07FA, BidiClass::R),
(0x07FD, 0x07FD, BidiClass::NSM),
(0x07FE, 0x0815, BidiClass::R),
(0x0816, 0x0819, BidiClass::NSM),
(0x081A, 0x081A, BidiClass::R),
(0x081B, 0x0823, BidiClass::NSM),
(0x0824, 0x0824, BidiClass::R),
(0x0825, 0x0827, BidiClass::NSM),
(0x0828, 0x0828, BidiClass::R),
(0x0829, 0x082D, BidiClass::NSM),
(0x0830, 0x083E, BidiClass::R),
(0x0840, 0x0858, BidiClass::R),
(0x0859, 0x085B, BidiClass::NSM),
(0x085E, 0x085E, BidiClass::R),
(0x0860, 0x086A, BidiClass::AL),
(0x0870, 0x088F, BidiClass::AL),
(0x0890, 0x0891, BidiClass::AN),
(0x0897, 0x089F, BidiClass::NSM),
(0x08A0, 0x08C9, BidiClass::AL),
(0x08CA, 0x08E1, BidiClass::NSM),
(0x08E2, 0x08E2, BidiClass::AN),
(0x08E3, 0x0902, BidiClass::NSM),
(0x093A, 0x093A, BidiClass::NSM),
(0x093C, 0x093C, BidiClass::NSM),
(0x0941, 0x0948, BidiClass::NSM),
(0x094D, 0x094D, BidiClass::NSM),
(0x0951, 0x0957, BidiClass::NSM),
(0x0962, 0x0963, BidiClass::NSM),
(0x0981, 0x0981, BidiClass::NSM),
(0x09BC, 0x09BC, BidiClass::NSM),
(0x09C1, 0x09C4, BidiClass::NSM),
(0x09CD, 0x09CD, BidiClass::NSM),
(0x09E2, 0x09E3, BidiClass::NSM),
(0x09F2, 0x09F3, BidiClass::ET),
(0x09FB, 0x09FB, BidiClass::ET),
(0x09FE, 0x09FE, BidiClass::NSM),
(0x0A01, 0x0A02, BidiClass::NSM),
(0x0A3C, 0x0A3C, BidiClass::NSM),
(0x0A41, 0x0A42, BidiClass::NSM),
(0x0A47, 0x0A48, BidiClass::NSM),
(0x0A4B, 0x0A4D, BidiClass::NSM),
(0x0A51, 0x0A51, BidiClass::NSM),
(0x0A70, 0x0A71, BidiClass::NSM),
(0x0A75, 0x0A75, BidiClass::NSM),
(0x0A81, 0x0A82, BidiClass::NSM),
(0x0ABC, 0x0ABC, BidiClass::NSM),
(0x0AC1, 0x0AC5, BidiClass::NSM),
(0x0AC7, 0x0AC8, BidiClass::NSM),
(0x0ACD, 0x0ACD, BidiClass::NSM),
(0x0AE2, 0x0AE3, BidiClass::NSM),
(0x0AF1, 0x0AF1, BidiClass::ET),
(0x0AFA, 0x0AFF, BidiClass::NSM),
(0x0B01, 0x0B01, BidiClass::NSM),
(0x0B3C, 0x0B3C, BidiClass::NSM),
(0x0B3F, 0x0B3F, BidiClass::NSM),
(0x0B41, 0x0B44, BidiClass::NSM),
(0x0B4D, 0x0B4D, BidiClass::NSM),
(0x0B55, 0x0B56, BidiClass::NSM),
(0x0B62, 0x0B63, BidiClass::NSM),
(0x0B82, 0x0B82, BidiClass::NSM),
(0x0BC0, 0x0BC0, BidiClass::NSM),
(0x0BCD, 0x0BCD, BidiClass::NSM),
(0x0BF3, 0x0BF8, BidiClass::ON),
(0x0BF9, 0x0BF9, BidiClass::ET),
(0x0BFA, 0x0BFA, BidiClass::ON),
(0x0C00, 0x0C00, BidiClass::NSM),
(0x0C04, 0x0C04, BidiClass::NSM),
(0x0C3C, 0x0C3C, BidiClass::NSM),
(0x0C3E, 0x0C40, BidiClass::NSM),
(0x0C46, 0x0C48, BidiClass::NSM),
(0x0C4A, 0x0C4D, BidiClass::NSM),
(0x0C55, 0x0C56, BidiClass::NSM),
(0x0C62, 0x0C63, BidiClass::NSM),
(0x0C78, 0x0C7E, BidiClass::ON),
(0x0C81, 0x0C81, BidiClass::NSM),
(0x0CBC, 0x0CBC, BidiClass::NSM),
(0x0CCC, 0x0CCD, BidiClass::NSM),
(0x0CE2, 0x0CE3, BidiClass::NSM),
(0x0D00, 0x0D01, BidiClass::NSM),
(0x0D3B, 0x0D3C, BidiClass::NSM),
(0x0D41, 0x0D44, BidiClass::NSM),
(0x0D4D, 0x0D4D, BidiClass::NSM),
(0x0D62, 0x0D63, BidiClass::NSM),
(0x0D81, 0x0D81, BidiClass::NSM),
(0x0DCA, 0x0DCA, BidiClass::NSM),
(0x0DD2, 0x0DD4, BidiClass::NSM),
(0x0DD6, 0x0DD6, BidiClass::NSM),
(0x0E31, 0x0E31, BidiClass::NSM),
(0x0E34, 0x0E3A, BidiClass::NSM),
(0x0E3F, 0x0E3F, BidiClass::ET),
(0x0E47, 0x0E4E, BidiClass::NSM),
(0x0EB1, 0x0EB1, BidiClass::NSM),
(0x0EB4, 0x0EBC, BidiClass::NSM),
(0x0EC8, 0x0ECE, BidiClass::NSM),
(0x0F18, 0x0F19, BidiClass::NSM),
(0x0F35, 0x0F35, BidiClass::NSM),
(0x0F37, 0x0F37, BidiClass::NSM),
(0x0F39, 0x0F39, BidiClass::NSM),
(0x0F3A, 0x0F3D, BidiClass::ON),
(0x0F71, 0x0F7E, BidiClass::NSM),
(0x0F80, 0x0F84, BidiClass::NSM),
(0x0F86, 0x0F87, BidiClass::NSM),
(0x0F8D, 0x0F97, BidiClass::NSM),
(0x0F99, 0x0FBC, BidiClass::NSM),
(0x0FC6, 0x0FC6, BidiClass::NSM),
(0x102D, 0x1030, BidiClass::NSM),
(0x1032, 0x1037, BidiClass::NSM),
(0x1039, 0x103A, BidiClass::NSM),
(0x103D, 0x103E, BidiClass::NSM),
(0x1058, 0x1059, BidiClass::NSM),
(0x105E, 0x1060, BidiClass::NSM),
(0x1071, 0x1074, BidiClass::NSM),
(0x1082, 0x1082, BidiClass::NSM),
(0x1085, 0x1086, BidiClass::NSM),
(0x108D, 0x108D, BidiClass::NSM),
(0x109D, 0x109D, BidiClass::NSM),
(0x135D, 0x135F, BidiClass::NSM),
(0x1390, 0x1399, BidiClass::ON),
(0x1400, 0x1400, BidiClass::ON),
(0x1680, 0x1680, BidiClass::WS),
(0x169B, 0x169C, BidiClass::ON),
(0x1712, 0x1714, BidiClass::NSM),
(0x1732, 0x1733, BidiClass::NSM),
(0x1752, 0x1753, BidiClass::NSM),
(0x1772, 0x1773, BidiClass::NSM),
(0x17B4, 0x17B5, BidiClass::NSM),
(0x17B7, 0x17BD, BidiClass::NSM),
(0x17C6, 0x17C6, BidiClass::NSM),
(0x17C9, 0x17D3, BidiClass::NSM),
(0x17DB, 0x17DB, BidiClass::ET),
(0x17DD, 0x17DD, BidiClass::NSM),
(0x17F0, 0x17F9, BidiClass::ON),
(0x1800, 0x180A, BidiClass::ON),
(0x180B, 0x180D, BidiClass::NSM),
(0x180E, 0x180E, BidiClass::BN),
(0x180F, 0x180F, BidiClass::NSM),
(0x1885, 0x1886, BidiClass::NSM),
(0x18A9, 0x18A9, BidiClass::NSM),
(0x1920, 0x1922, BidiClass::NSM),
(0x1927, 0x1928, BidiClass::NSM),
(0x1932, 0x1932, BidiClass::NSM),
(0x1939, 0x193B, BidiClass::NSM),
(0x1940, 0x1940, BidiClass::ON),
(0x1944, 0x1945, BidiClass::ON),
(0x19DE, 0x19FF, BidiClass::ON),
(0x1A17, 0x1A18, BidiClass::NSM),
(0x1A1B, 0x1A1B, BidiClass::NSM),
(0x1A56, 0x1A56, BidiClass::NSM),
(0x1A58, 0x1A5E, BidiClass::NSM),
(0x1A60, 0x1A60, BidiClass::NSM),
(0x1A62, 0x1A62, BidiClass::NSM),
(0x1A65, 0x1A6C, BidiClass::NSM),
(0x1A73, 0x1A7C, BidiClass::NSM),
(0x1A7F, 0x1A7F, BidiClass::NSM),
(0x1AB0, 0x1ADD, BidiClass::NSM),
(0x1AE0, 0x1AEB, BidiClass::NSM),
(0x1B00, 0x1B03, BidiClass::NSM),
(0x1B34, 0x1B34, BidiClass::NSM),
(0x1B36, 0x1B3A, BidiClass::NSM),
(0x1B3C, 0x1B3C, BidiClass::NSM),
(0x1B42, 0x1B42, BidiClass::NSM),
(0x1B6B, 0x1B73, BidiClass::NSM),
(0x1B80, 0x1B81, BidiClass::NSM),
(0x1BA2, 0x1BA5, BidiClass::NSM),
(0x1BA8, 0x1BA9, BidiClass::NSM),
(0x1BAB, 0x1BAD, BidiClass::NSM),
(0x1BE6, 0x1BE6, BidiClass::NSM),
(0x1BE8, 0x1BE9, BidiClass::NSM),
(0x1BED, 0x1BED, BidiClass::NSM),
(0x1BEF, 0x1BF1, BidiClass::NSM),
(0x1C2C, 0x1C33, BidiClass::NSM),
(0x1C36, 0x1C37, BidiClass::NSM),
(0x1CD0, 0x1CD2, BidiClass::NSM),
(0x1CD4, 0x1CE0, BidiClass::NSM),
(0x1CE2, 0x1CE8, BidiClass::NSM),
(0x1CED, 0x1CED, BidiClass::NSM),
(0x1CF4, 0x1CF4, BidiClass::NSM),
(0x1CF8, 0x1CF9, BidiClass::NSM),
(0x1DC0, 0x1DFF, BidiClass::NSM),
(0x1FBD, 0x1FBD, BidiClass::ON),
(0x1FBF, 0x1FC1, BidiClass::ON),
(0x1FCD, 0x1FCF, BidiClass::ON),
(0x1FDD, 0x1FDF, BidiClass::ON),
(0x1FED, 0x1FEF, BidiClass::ON),
(0x1FFD, 0x1FFE, BidiClass::ON),
(0x2000, 0x200A, BidiClass::WS),
(0x200B, 0x200D, BidiClass::BN),
(0x200F, 0x200F, BidiClass::R),
(0x2010, 0x2027, BidiClass::ON),
(0x2028, 0x2028, BidiClass::WS),
(0x2029, 0x2029, BidiClass::B),
(0x202A, 0x202A, BidiClass::LRE),
(0x202B, 0x202B, BidiClass::RLE),
(0x202C, 0x202C, BidiClass::PDF),
(0x202D, 0x202D, BidiClass::LRO),
(0x202E, 0x202E, BidiClass::RLO),
(0x202F, 0x202F, BidiClass::CS),
(0x2030, 0x2034, BidiClass::ET),
(0x2035, 0x2043, BidiClass::ON),
(0x2044, 0x2044, BidiClass::CS),
(0x2045, 0x205E, BidiClass::ON),
(0x205F, 0x205F, BidiClass::WS),
(0x2060, 0x2064, BidiClass::BN),
(0x2066, 0x2066, BidiClass::LRI),
(0x2067, 0x2067, BidiClass::RLI),
(0x2068, 0x2068, BidiClass::FSI),
(0x2069, 0x2069, BidiClass::PDI),
(0x206A, 0x206F, BidiClass::BN),
(0x2070, 0x2070, BidiClass::EN),
(0x2074, 0x2079, BidiClass::EN),
(0x207A, 0x207B, BidiClass::ES),
(0x207C, 0x207E, BidiClass::ON),
(0x2080, 0x2089, BidiClass::EN),
(0x208A, 0x208B, BidiClass::ES),
(0x208C, 0x208E, BidiClass::ON),
(0x20A0, 0x20C1, BidiClass::ET),
(0x20D0, 0x20F0, BidiClass::NSM),
(0x2100, 0x2101, BidiClass::ON),
(0x2103, 0x2106, BidiClass::ON),
(0x2108, 0x2109, BidiClass::ON),
(0x2114, 0x2114, BidiClass::ON),
(0x2116, 0x2118, BidiClass::ON),
(0x211E, 0x2123, BidiClass::ON),
(0x2125, 0x2125, BidiClass::ON),
(0x2127, 0x2127, BidiClass::ON),
(0x2129, 0x2129, BidiClass::ON),
(0x212E, 0x212E, BidiClass::ET),
(0x213A, 0x213B, BidiClass::ON),
(0x2140, 0x2144, BidiClass::ON),
(0x214A, 0x214D, BidiClass::ON),
(0x2150, 0x215F, BidiClass::ON),
(0x2189, 0x218B, BidiClass::ON),
(0x2190, 0x2211, BidiClass::ON),
(0x2212, 0x2212, BidiClass::ES),
(0x2213, 0x2213, BidiClass::ET),
(0x2214, 0x2335, BidiClass::ON),
(0x237B, 0x2394, BidiClass::ON),
(0x2396, 0x2429, BidiClass::ON),
(0x2440, 0x244A, BidiClass::ON),
(0x2460, 0x2487, BidiClass::ON),
(0x2488, 0x249B, BidiClass::EN),
(0x24EA, 0x26AB, BidiClass::ON),
(0x26AD, 0x27FF, BidiClass::ON),
(0x2900, 0x2B73, BidiClass::ON),
(0x2B76, 0x2BFF, BidiClass::ON),
(0x2CE5, 0x2CEA, BidiClass::ON),
(0x2CEF, 0x2CF1, BidiClass::NSM),
(0x2CF9, 0x2CFF, BidiClass::ON),
(0x2D7F, 0x2D7F, BidiClass::NSM),
(0x2DE0, 0x2DFF, BidiClass::NSM),
(0x2E00, 0x2E5D, BidiClass::ON),
(0x2E80, 0x2E99, BidiClass::ON),
(0x2E9B, 0x2EF3, BidiClass::ON),
(0x2F00, 0x2FD5, BidiClass::ON),
(0x2FF0, 0x2FFF, BidiClass::ON),
(0x3000, 0x3000, BidiClass::WS),
(0x3001, 0x3004, BidiClass::ON),
(0x3008, 0x3020, BidiClass::ON),
(0x302A, 0x302D, BidiClass::NSM),
(0x3030, 0x3030, BidiClass::ON),
(0x3036, 0x3037, BidiClass::ON),
(0x303D, 0x303F, BidiClass::ON),
(0x3099, 0x309A, BidiClass::NSM),
(0x309B, 0x309C, BidiClass::ON),
(0x30A0, 0x30A0, BidiClass::ON),
(0x30FB, 0x30FB, BidiClass::ON),
(0x31C0, 0x31E5, BidiClass::ON),
(0x31EF, 0x31EF, BidiClass::ON),
(0x321D, 0x321E, BidiClass::ON),
(0x3250, 0x325F, BidiClass::ON),
(0x327C, 0x327E, BidiClass::ON),
(0x32B1, 0x32BF, BidiClass::ON),
(0x32CC, 0x32CF, BidiClass::ON),
(0x3377, 0x337A, BidiClass::ON),
(0x33DE, 0x33DF, BidiClass::ON),
(0x33FF, 0x33FF, BidiClass::ON),
(0x4DC0, 0x4DFF, BidiClass::ON),
(0xA490, 0xA4C6, BidiClass::ON),
(0xA60D, 0xA60F, BidiClass::ON),
(0xA66F, 0xA672, BidiClass::NSM),
(0xA673, 0xA673, BidiClass::ON),
(0xA674, 0xA67D, BidiClass::NSM),
(0xA67E, 0xA67F, BidiClass::ON),
(0xA69E, 0xA69F, BidiClass::NSM),
(0xA6F0, 0xA6F1, BidiClass::NSM),
(0xA700, 0xA721, BidiClass::ON),
(0xA788, 0xA788, BidiClass::ON),
(0xA802, 0xA802, BidiClass::NSM),
(0xA806, 0xA806, BidiClass::NSM),
(0xA80B, 0xA80B, BidiClass::NSM),
(0xA825, 0xA826, BidiClass::NSM),
(0xA828, 0xA82B, BidiClass::ON),
(0xA82C, 0xA82C, BidiClass::NSM),
(0xA838, 0xA839, BidiClass::ET),
(0xA874, 0xA877, BidiClass::ON),
(0xA8C4, 0xA8C5, BidiClass::NSM),
(0xA8E0, 0xA8F1, BidiClass::NSM),
(0xA8FF, 0xA8FF, BidiClass::NSM),
(0xA926, 0xA92D, BidiClass::NSM),
(0xA947, 0xA951, BidiClass::NSM),
(0xA980, 0xA982, BidiClass::NSM),
(0xA9B3, 0xA9B3, BidiClass::NSM),
(0xA9B6, 0xA9B9, BidiClass::NSM),
(0xA9BC, 0xA9BD, BidiClass::NSM),
(0xA9E5, 0xA9E5, BidiClass::NSM),
(0xAA29, 0xAA2E, BidiClass::NSM),
(0xAA31, 0xAA32, BidiClass::NSM),
(0xAA35, 0xAA36, BidiClass::NSM),
(0xAA43, 0xAA43, BidiClass::NSM),
(0xAA4C, 0xAA4C, BidiClass::NSM),
(0xAA7C, 0xAA7C, BidiClass::NSM),
(0xAAB0, 0xAAB0, BidiClass::NSM),
(0xAAB2, 0xAAB4, BidiClass::NSM),
(0xAAB7, 0xAAB8, BidiClass::NSM),
(0xAABE, 0xAABF, BidiClass::NSM),
(0xAAC1, 0xAAC1, BidiClass::NSM),
(0xAAEC, 0xAAED, BidiClass::NSM),
(0xAAF6, 0xAAF6, BidiClass::NSM),
(0xAB6A, 0xAB6B, BidiClass::ON),
(0xABE5, 0xABE5, BidiClass::NSM),
(0xABE8, 0xABE8, BidiClass::NSM),
(0xABED, 0xABED, BidiClass::NSM),
(0xFB1D, 0xFB1D, BidiClass::R),
(0xFB1E, 0xFB1E, BidiClass::NSM),
(0xFB1F, 0xFB28, BidiClass::R),
(0xFB29, 0xFB29, BidiClass::ES),
(0xFB2A, 0xFB36, BidiClass::R),
(0xFB38, 0xFB3C, BidiClass::R),
(0xFB3E, 0xFB3E, BidiClass::R),
(0xFB40, 0xFB41, BidiClass::R),
(0xFB43, 0xFB44, BidiClass::R),
(0xFB46, 0xFB4F, BidiClass::R),
(0xFB50, 0xFBC2, BidiClass::AL),
(0xFBC3, 0xFBD2, BidiClass::ON),
(0xFBD3, 0xFD3D, BidiClass::AL),
(0xFD3E, 0xFD4F, BidiClass::ON),
(0xFD50, 0xFD8F, BidiClass::AL),
(0xFD90, 0xFD91, BidiClass::ON),
(0xFD92, 0xFDC7, BidiClass::AL),
(0xFDC8, 0xFDCF, BidiClass::ON),
(0xFDF0, 0xFDFC, BidiClass::AL),
(0xFDFD, 0xFDFF, BidiClass::ON),
(0xFE00, 0xFE0F, BidiClass::NSM),
(0xFE10, 0xFE19, BidiClass::ON),
(0xFE20, 0xFE2F, BidiClass::NSM),
(0xFE30, 0xFE4F, BidiClass::ON),
(0xFE50, 0xFE50, BidiClass::CS),
(0xFE51, 0xFE51, BidiClass::ON),
(0xFE52, 0xFE52, BidiClass::CS),
(0xFE54, 0xFE54, BidiClass::ON),
(0xFE55, 0xFE55, BidiClass::CS),
(0xFE56, 0xFE5E, BidiClass::ON),
(0xFE5F, 0xFE5F, BidiClass::ET),
(0xFE60, 0xFE61, BidiClass::ON),
(0xFE62, 0xFE63, BidiClass::ES),
(0xFE64, 0xFE66, BidiClass::ON),
(0xFE68, 0xFE68, BidiClass::ON),
(0xFE69, 0xFE6A, BidiClass::ET),
(0xFE6B, 0xFE6B, BidiClass::ON),
(0xFE70, 0xFE74, BidiClass::AL),
(0xFE76, 0xFEFC, BidiClass::AL),
(0xFEFF, 0xFEFF, BidiClass::BN),
(0xFF01, 0xFF02, BidiClass::ON),
(0xFF03, 0xFF05, BidiClass::ET),
(0xFF06, 0xFF0A, BidiClass::ON),
(0xFF0B, 0xFF0B, BidiClass::ES),
(0xFF0C, 0xFF0C, BidiClass::CS),
(0xFF0D, 0xFF0D, BidiClass::ES),
(0xFF0E, 0xFF0F, BidiClass::CS),
(0xFF10, 0xFF19, BidiClass::EN),
(0xFF1A, 0xFF1A, BidiClass::CS),
(0xFF1B, 0xFF20, BidiClass::ON),
(0xFF3B, 0xFF40, BidiClass::ON),
(0xFF5B, 0xFF65, BidiClass::ON),
(0xFFE0, 0xFFE1, BidiClass::ET),
(0xFFE2, 0xFFE4, BidiClass::ON),
(0xFFE5, 0xFFE6, BidiClass::ET),
(0xFFE8, 0xFFEE, BidiClass::ON),
(0xFFF9, 0xFFFD, BidiClass::ON),
(0x10101, 0x10101, BidiClass::ON),
(0x10140, 0x1018C, BidiClass::ON),
(0x10190, 0x1019C, BidiClass::ON),
(0x101A0, 0x101A0, BidiClass::ON),
(0x101FD, 0x101FD, BidiClass::NSM),
(0x102E0, 0x102E0, BidiClass::NSM),
(0x102E1, 0x102FB, BidiClass::EN),
(0x10376, 0x1037A, BidiClass::NSM),
(0x10800, 0x10805, BidiClass::R),
(0x10808, 0x10808, BidiClass::R),
(0x1080A, 0x10835, BidiClass::R),
(0x10837, 0x10838, BidiClass::R),
(0x1083C, 0x1083C, BidiClass::R),
(0x1083F, 0x10855, BidiClass::R),
(0x10857, 0x1089E, BidiClass::R),
(0x108A7, 0x108AF, BidiClass::R),
(0x108E0, 0x108F2, BidiClass::R),
(0x108F4, 0x108F5, BidiClass::R),
(0x108FB, 0x1091B, BidiClass::R),
(0x1091F, 0x1091F, BidiClass::ON),
(0x10920, 0x10939, BidiClass::R),
(0x1093F, 0x10959, BidiClass::R),
(0x10980, 0x109B7, BidiClass::R),
(0x109BC, 0x109CF, BidiClass::R),
(0x109D2, 0x10A00, BidiClass::R),
(0x10A01, 0x10A03, BidiClass::NSM),
(0x10A05, 0x10A06, BidiClass::NSM),
(0x10A0C, 0x10A0F, BidiClass::NSM),
(0x10A10, 0x10A13, BidiClass::R),
(0x10A15, 0x10A17, BidiClass::R),
(0x10A19, 0x10A35, BidiClass::R),
(0x10A38, 0x10A3A, BidiClass::NSM),
(0x10A3F, 0x10A3F, BidiClass::NSM),
(0x10A40, 0x10A48, BidiClass::R),
(0x10A50, 0x10A58, BidiClass::R),
(0x10A60, 0x10A9F, BidiClass::R),
(0x10AC0, 0x10AE4, BidiClass::R),
(0x10AE5, 0x10AE6, BidiClass::NSM),
(0x10AEB, 0x10AF6, BidiClass::R),
(0x10B00, 0x10B35, BidiClass::R),
(0x10B39, 0x10B3F, BidiClass::ON),
(0x10B40, 0x10B55, BidiClass::R),
(0x10B58, 0x10B72, BidiClass::R),
(0x10B78, 0x10B91, BidiClass::R),
(0x10B99, 0x10B9C, BidiClass::R),
(0x10BA9, 0x10BAF, BidiClass::R),
(0x10C00, 0x10C48, BidiClass::R),
(0x10C80, 0x10CB2, BidiClass::R),
(0x10CC0, 0x10CF2, BidiClass::R),
(0x10CFA, 0x10CFF, BidiClass::R),
(0x10D00, 0x10D23, BidiClass::AL),
(0x10D24, 0x10D27, BidiClass::NSM),
(0x10D30, 0x10D39, BidiClass::AN),
(0x10D40, 0x10D49, BidiClass::AN),
(0x10D4A, 0x10D65, BidiClass::R),
(0x10D69, 0x10D6D, BidiClass::NSM),
(0x10D6E, 0x10D6E, BidiClass::ON),
(0x10D6F, 0x10D85, BidiClass::R),
(0x10D8E, 0x10D8F, BidiClass::R),
(0x10E60, 0x10E7E, BidiClass::AN),
(0x10E80, 0x10EA9, BidiClass::R),
(0x10EAB, 0x10EAC, BidiClass::NSM),
(0x10EAD, 0x10EAD, BidiClass::R),
(0x10EB0, 0x10EB1, BidiClass::R),
(0x10EC2, 0x10EC7, BidiClass::AL),
(0x10ED0, 0x10ED8, BidiClass::ON),
(0x10EFA, 0x10EFF, BidiClass::NSM),
(0x10F00, 0x10F27, BidiClass::R),
(0x10F30, 0x10F45, BidiClass::AL),
(0x10F46, 0x10F50, BidiClass::NSM),
(0x10F51, 0x10F59, BidiClass::AL),
(0x10F70, 0x10F81, BidiClass::R),
(0x10F82, 0x10F85, BidiClass::NSM),
(0x10F86, 0x10F89, BidiClass::R),
(0x10FB0, 0x10FCB, BidiClass::R),
(0x10FE0, 0x10FF6, BidiClass::R),
(0x11001, 0x11001, BidiClass::NSM),
(0x11038, 0x11046, BidiClass::NSM),
(0x11052, 0x11065, BidiClass::ON),
(0x11070, 0x11070, BidiClass::NSM),
(0x11073, 0x11074, BidiClass::NSM),
(0x1107F, 0x11081, BidiClass::NSM),
(0x110B3, 0x110B6, BidiClass::NSM),
(0x110B9, 0x110BA, BidiClass::NSM),
(0x110C2, 0x110C2, BidiClass::NSM),
(0x11100, 0x11102, BidiClass::NSM),
(0x11127, 0x1112B, BidiClass::NSM),
(0x1112D, 0x11134, BidiClass::NSM),
(0x11173, 0x11173, BidiClass::NSM),
(0x11180, 0x11181, BidiClass::NSM),
(0x111B6, 0x111BE, BidiClass::NSM),
(0x111C9, 0x111CC, BidiClass::NSM),
(0x111CF, 0x111CF, BidiClass::NSM),
(0x1122F, 0x11231, BidiClass::NSM),
(0x11234, 0x11234, BidiClass::NSM),
(0x11236, 0x11237, BidiClass::NSM),
(0x1123E, 0x1123E, BidiClass::NSM),
(0x11241, 0x11241, BidiClass::NSM),
(0x112DF, 0x112DF, BidiClass::NSM),
(0x112E3, 0x112EA, BidiClass::NSM),
(0x11300, 0x11301, BidiClass::NSM),
(0x1133B, 0x1133C, BidiClass::NSM),
(0x11340, 0x11340, BidiClass::NSM),
(0x11366, 0x1136C, BidiClass::NSM),
(0x11370, 0x11374, BidiClass::NSM),
(0x113BB, 0x113C0, BidiClass::NSM),
(0x113CE, 0x113CE, BidiClass::NSM),
(0x113D0, 0x113D0, BidiClass::NSM),
(0x113D2, 0x113D2, BidiClass::NSM),
(0x113E1, 0x113E2, BidiClass::NSM),
(0x11438, 0x1143F, BidiClass::NSM),
(0x11442, 0x11444, BidiClass::NSM),
(0x11446, 0x11446, BidiClass::NSM),
(0x1145E, 0x1145E, BidiClass::NSM),
(0x114B3, 0x114B8, BidiClass::NSM),
(0x114BA, 0x114BA, BidiClass::NSM),
(0x114BF, 0x114C0, BidiClass::NSM),
(0x114C2, 0x114C3, BidiClass::NSM),
(0x115B2, 0x115B5, BidiClass::NSM),
(0x115BC, 0x115BD, BidiClass::NSM),
(0x115BF, 0x115C0, BidiClass::NSM),
(0x115DC, 0x115DD, BidiClass::NSM),
(0x11633, 0x1163A, BidiClass::NSM),
(0x1163D, 0x1163D, BidiClass::NSM),
(0x1163F, 0x11640, BidiClass::NSM),
(0x11660, 0x1166C, BidiClass::ON),
(0x116AB, 0x116AB, BidiClass::NSM),
(0x116AD, 0x116AD, BidiClass::NSM),
(0x116B0, 0x116B5, BidiClass::NSM),
(0x116B7, 0x116B7, BidiClass::NSM),
(0x1171D, 0x1171D, BidiClass::NSM),
(0x1171F, 0x1171F, BidiClass::NSM),
(0x11722, 0x11725, BidiClass::NSM),
(0x11727, 0x1172B, BidiClass::NSM),
(0x1182F, 0x11837, BidiClass::NSM),
(0x11839, 0x1183A, BidiClass::NSM),
(0x1193B, 0x1193C, BidiClass::NSM),
(0x1193E, 0x1193E, BidiClass::NSM),
(0x11943, 0x11943, BidiClass::NSM),
(0x119D4, 0x119D7, BidiClass::NSM),
(0x119DA, 0x119DB, BidiClass::NSM),
(0x119E0, 0x119E0, BidiClass::NSM),
(0x11A01, 0x11A06, BidiClass::NSM),
(0x11A09, 0x11A0A, BidiClass::NSM),
(0x11A33, 0x11A38, BidiClass::NSM),
(0x11A3B, 0x11A3E, BidiClass::NSM),
(0x11A47, 0x11A47, BidiClass::NSM),
(0x11A51, 0x11A56, BidiClass::NSM),
(0x11A59, 0x11A5B, BidiClass::NSM),
(0x11A8A, 0x11A96, BidiClass::NSM),
(0x11A98, 0x11A99, BidiClass::NSM),
(0x11B60, 0x11B60, BidiClass::NSM),
(0x11B62, 0x11B64, BidiClass::NSM),
(0x11B66, 0x11B66, BidiClass::NSM),
(0x11C30, 0x11C36, BidiClass::NSM),
(0x11C38, 0x11C3D, BidiClass::NSM),
(0x11C92, 0x11CA7, BidiClass::NSM),
(0x11CAA, 0x11CB0, BidiClass::NSM),
(0x11CB2, 0x11CB3, BidiClass::NSM),
(0x11CB5, 0x11CB6, BidiClass::NSM),
(0x11D31, 0x11D36, BidiClass::NSM),
(0x11D3A, 0x11D3A, BidiClass::NSM),
(0x11D3C, 0x11D3D, BidiClass::NSM),
(0x11D3F, 0x11D45, BidiClass::NSM),
(0x11D47, 0x11D47, BidiClass::NSM),
(0x11D90, 0x11D91, BidiClass::NSM),
(0x11D95, 0x11D95, BidiClass::NSM),
(0x11D97, 0x11D97, BidiClass::NSM),
(0x11EF3, 0x11EF4, BidiClass::NSM),
(0x11F00, 0x11F01, BidiClass::NSM),
(0x11F36, 0x11F3A, BidiClass::NSM),
(0x11F40, 0x11F40, BidiClass::NSM),
(0x11F42, 0x11F42, BidiClass::NSM),
(0x11F5A, 0x11F5A, BidiClass::NSM),
(0x11FD5, 0x11FDC, BidiClass::ON),
(0x11FDD, 0x11FE0, BidiClass::ET),
(0x11FE1, 0x11FF1, BidiClass::ON),
(0x13440, 0x13440, BidiClass::NSM),
(0x13447, 0x13455, BidiClass::NSM),
(0x1611E, 0x16129, BidiClass::NSM),
(0x1612D, 0x1612F, BidiClass::NSM),
(0x16AF0, 0x16AF4, BidiClass::NSM),
(0x16B30, 0x16B36, BidiClass::NSM),
(0x16F4F, 0x16F4F, BidiClass::NSM),
(0x16F8F, 0x16F92, BidiClass::NSM),
(0x16FE2, 0x16FE2, BidiClass::ON),
(0x16FE4, 0x16FE4, BidiClass::NSM),
(0x1BC9D, 0x1BC9E, BidiClass::NSM),
(0x1BCA0, 0x1BCA3, BidiClass::BN),
(0x1CC00, 0x1CCD5, BidiClass::ON),
(0x1CCF0, 0x1CCF9, BidiClass::EN),
(0x1CCFA, 0x1CCFC, BidiClass::ON),
(0x1CD00, 0x1CEB3, BidiClass::ON),
(0x1CEBA, 0x1CED0, BidiClass::ON),
(0x1CEE0, 0x1CEF0, BidiClass::ON),
(0x1CF00, 0x1CF2D, BidiClass::NSM),
(0x1CF30, 0x1CF46, BidiClass::NSM),
(0x1D167, 0x1D169, BidiClass::NSM),
(0x1D173, 0x1D17A, BidiClass::BN),
(0x1D17B, 0x1D182, BidiClass::NSM),
(0x1D185, 0x1D18B, BidiClass::NSM),
(0x1D1AA, 0x1D1AD, BidiClass::NSM),
(0x1D1E9, 0x1D1EA, BidiClass::ON),
(0x1D200, 0x1D241, BidiClass::ON),
(0x1D242, 0x1D244, BidiClass::NSM),
(0x1D245, 0x1D245, BidiClass::ON),
(0x1D300, 0x1D356, BidiClass::ON),
(0x1D6C1, 0x1D6C1, BidiClass::ON),
(0x1D6DB, 0x1D6DB, BidiClass::ON),
(0x1D6FB, 0x1D6FB, BidiClass::ON),
(0x1D715, 0x1D715, BidiClass::ON),
(0x1D735, 0x1D735, BidiClass::ON),
(0x1D74F, 0x1D74F, BidiClass::ON),
(0x1D76F, 0x1D76F, BidiClass::ON),
(0x1D789, 0x1D789, BidiClass::ON),
(0x1D7A9, 0x1D7A9, BidiClass::ON),
(0x1D7C3, 0x1D7C3, BidiClass::ON),
(0x1D7CE, 0x1D7FF, BidiClass::EN),
(0x1DA00, 0x1DA36, BidiClass::NSM),
(0x1DA3B, 0x1DA6C, BidiClass::NSM),
(0x1DA75, 0x1DA75, BidiClass::NSM),
(0x1DA84, 0x1DA84, BidiClass::NSM),
(0x1DA9B, 0x1DA9F, BidiClass::NSM),
(0x1DAA1, 0x1DAAF, BidiClass::NSM),
(0x1E000, 0x1E006, BidiClass::NSM),
(0x1E008, 0x1E018, BidiClass::NSM),
(0x1E01B, 0x1E021, BidiClass::NSM),
(0x1E023, 0x1E024, BidiClass::NSM),
(0x1E026, 0x1E02A, BidiClass::NSM),
(0x1E08F, 0x1E08F, BidiClass::NSM),
(0x1E130, 0x1E136, BidiClass::NSM),
(0x1E2AE, 0x1E2AE, BidiClass::NSM),
(0x1E2EC, 0x1E2EF, BidiClass::NSM),
(0x1E2FF, 0x1E2FF, BidiClass::ET),
(0x1E4EC, 0x1E4EF, BidiClass::NSM),
(0x1E5EE, 0x1E5EF, BidiClass::NSM),
(0x1E6E3, 0x1E6E3, BidiClass::NSM),
(0x1E6E6, 0x1E6E6, BidiClass::NSM),
(0x1E6EE, 0x1E6EF, BidiClass::NSM),
(0x1E6F5, 0x1E6F5, BidiClass::NSM),
(0x1E800, 0x1E8C4, BidiClass::R),
(0x1E8C7, 0x1E8CF, BidiClass::R),
(0x1E8D0, 0x1E8D6, BidiClass::NSM),
(0x1E900, 0x1E943, BidiClass::R),
(0x1E944, 0x1E94A, BidiClass::NSM),
(0x1E94B, 0x1E94B, BidiClass::R),
(0x1E950, 0x1E959, BidiClass::R),
(0x1E95E, 0x1E95F, BidiClass::R),
(0x1EC71, 0x1ECB4, BidiClass::AL),
(0x1ED01, 0x1ED3D, BidiClass::AL),
(0x1EE00, 0x1EE03, BidiClass::AL),
(0x1EE05, 0x1EE1F, BidiClass::AL),
(0x1EE21, 0x1EE22, BidiClass::AL),
(0x1EE24, 0x1EE24, BidiClass::AL),
(0x1EE27, 0x1EE27, BidiClass::AL),
(0x1EE29, 0x1EE32, BidiClass::AL),
(0x1EE34, 0x1EE37, BidiClass::AL),
(0x1EE39, 0x1EE39, BidiClass::AL),
(0x1EE3B, 0x1EE3B, BidiClass::AL),
(0x1EE42, 0x1EE42, BidiClass::AL),
(0x1EE47, 0x1EE47, BidiClass::AL),
(0x1EE49, 0x1EE49, BidiClass::AL),
(0x1EE4B, 0x1EE4B, BidiClass::AL),
(0x1EE4D, 0x1EE4F, BidiClass::AL),
(0x1EE51, 0x1EE52, BidiClass::AL),
(0x1EE54, 0x1EE54, BidiClass::AL),
(0x1EE57, 0x1EE57, BidiClass::AL),
(0x1EE59, 0x1EE59, BidiClass::AL),
(0x1EE5B, 0x1EE5B, BidiClass::AL),
(0x1EE5D, 0x1EE5D, BidiClass::AL),
(0x1EE5F, 0x1EE5F, BidiClass::AL),
(0x1EE61, 0x1EE62, BidiClass::AL),
(0x1EE64, 0x1EE64, BidiClass::AL),
(0x1EE67, 0x1EE6A, BidiClass::AL),
(0x1EE6C, 0x1EE72, BidiClass::AL),
(0x1EE74, 0x1EE77, BidiClass::AL),
(0x1EE79, 0x1EE7C, BidiClass::AL),
(0x1EE7E, 0x1EE7E, BidiClass::AL),
(0x1EE80, 0x1EE89, BidiClass::AL),
(0x1EE8B, 0x1EE9B, BidiClass::AL),
(0x1EEA1, 0x1EEA3, BidiClass::AL),
(0x1EEA5, 0x1EEA9, BidiClass::AL),
(0x1EEAB, 0x1EEBB, BidiClass::AL),
(0x1EEF0, 0x1EEF1, BidiClass::ON),
(0x1F000, 0x1F02B, BidiClass::ON),
(0x1F030, 0x1F093, BidiClass::ON),
(0x1F0A0, 0x1F0AE, BidiClass::ON),
(0x1F0B1, 0x1F0BF, BidiClass::ON),
(0x1F0C1, 0x1F0CF, BidiClass::ON),
(0x1F0D1, 0x1F0F5, BidiClass::ON),
(0x1F100, 0x1F10A, BidiClass::EN),
(0x1F10B, 0x1F10F, BidiClass::ON),
(0x1F12F, 0x1F12F, BidiClass::ON),
(0x1F16A, 0x1F16F, BidiClass::ON),
(0x1F1AD, 0x1F1AD, BidiClass::ON),
(0x1F260, 0x1F265, BidiClass::ON),
(0x1F300, 0x1F6D8, BidiClass::ON),
(0x1F6DC, 0x1F6EC, BidiClass::ON),
(0x1F6F0, 0x1F6FC, BidiClass::ON),
(0x1F700, 0x1F7D9, BidiClass::ON),
(0x1F7E0, 0x1F7EB, BidiClass::ON),
(0x1F7F0, 0x1F7F0, BidiClass::ON),
(0x1F800, 0x1F80B, BidiClass::ON),
(0x1F810, 0x1F847, BidiClass::ON),
(0x1F850, 0x1F859, BidiClass::ON),
(0x1F860, 0x1F887, BidiClass::ON),
(0x1F890, 0x1F8AD, BidiClass::ON),
(0x1F8B0, 0x1F8BB, BidiClass::ON),
(0x1F8C0, 0x1F8C1, BidiClass::ON),
(0x1F8D0, 0x1F8D8, BidiClass::ON),
(0x1F900, 0x1FA57, BidiClass::ON),
(0x1FA60, 0x1FA6D, BidiClass::ON),
(0x1FA70, 0x1FA7C, BidiClass::ON),
(0x1FA80, 0x1FA8A, BidiClass::ON),
(0x1FA8E, 0x1FAC6, BidiClass::ON),
(0x1FAC8, 0x1FAC8, BidiClass::ON),
(0x1FACD, 0x1FADC, BidiClass::ON),
(0x1FADF, 0x1FAEA, BidiClass::ON),
(0x1FAEF, 0x1FAF8, BidiClass::ON),
(0x1FB00, 0x1FB92, BidiClass::ON),
(0x1FB94, 0x1FBEF, BidiClass::ON),
(0x1FBF0, 0x1FBF9, BidiClass::EN),
(0x1FBFA, 0x1FBFA, BidiClass::ON),
(0xE0001, 0xE0001, BidiClass::BN),
(0xE0020, 0xE007F, BidiClass::BN),
(0xE0100, 0xE01EF, BidiClass::NSM),
];
pub fn bidi_class(cp: u32) -> BidiClass {
let mut lo: usize = 0;
let mut hi: usize = BIDI_CLASS_RANGES.len();
while lo < hi {
let mid = lo + (hi - lo) / 2;
let (start, end, _) = BIDI_CLASS_RANGES[mid];
if cp < start {
hi = mid;
} else if cp > end {
lo = mid + 1;
} else {
return BIDI_CLASS_RANGES[mid].2;
}
}
BidiClass::L
}
const BRACKET_PAIRS: &[(u32, u32)] = &[
(0x0028, 0x0029),
(0x005B, 0x005D),
(0x007B, 0x007D),
(0x0F3A, 0x0F3B),
(0x0F3C, 0x0F3D),
(0x169B, 0x169C),
(0x2045, 0x2046),
(0x207D, 0x207E),
(0x208D, 0x208E),
(0x2308, 0x2309),
(0x230A, 0x230B),
(0x2329, 0x232A),
(0x2768, 0x2769),
(0x276A, 0x276B),
(0x276C, 0x276D),
(0x276E, 0x276F),
(0x2770, 0x2771),
(0x2772, 0x2773),
(0x2774, 0x2775),
(0x27C5, 0x27C6),
(0x27E6, 0x27E7),
(0x27E8, 0x27E9),
(0x27EA, 0x27EB),
(0x27EC, 0x27ED),
(0x27EE, 0x27EF),
(0x2983, 0x2984),
(0x2985, 0x2986),
(0x2987, 0x2988),
(0x2989, 0x298A),
(0x298B, 0x298C),
(0x298D, 0x2990),
(0x298F, 0x298E),
(0x2991, 0x2992),
(0x2993, 0x2994),
(0x2995, 0x2996),
(0x2997, 0x2998),
(0x29D8, 0x29D9),
(0x29DA, 0x29DB),
(0x29FC, 0x29FD),
(0x2E22, 0x2E23),
(0x2E24, 0x2E25),
(0x2E26, 0x2E27),
(0x2E28, 0x2E29),
(0x2E55, 0x2E56),
(0x2E57, 0x2E58),
(0x2E59, 0x2E5A),
(0x2E5B, 0x2E5C),
(0x3008, 0x3009),
(0x300A, 0x300B),
(0x300C, 0x300D),
(0x300E, 0x300F),
(0x3010, 0x3011),
(0x3014, 0x3015),
(0x3016, 0x3017),
(0x3018, 0x3019),
(0x301A, 0x301B),
(0xFE59, 0xFE5A),
(0xFE5B, 0xFE5C),
(0xFE5D, 0xFE5E),
(0xFF08, 0xFF09),
(0xFF3B, 0xFF3D),
(0xFF5B, 0xFF5D),
(0xFF5F, 0xFF60),
(0xFF62, 0xFF63),
];
pub fn bracket_pair(cp: u32) -> Option<u32> {
let mut lo: usize = 0;
let mut hi: usize = BRACKET_PAIRS.len();
while lo < hi {
let mid = lo + (hi - lo) / 2;
let (open, _) = BRACKET_PAIRS[mid];
if cp < open {
hi = mid;
} else if cp > open {
lo = mid + 1;
} else {
return Some(BRACKET_PAIRS[mid].1);
}
}
None
}
const CLOSING_BRACKETS: &[(u32, u32)] = &[
(0x0029, 0x0029),
(0x005D, 0x005D),
(0x007D, 0x007D),
(0x0F3B, 0x0F3B),
(0x0F3D, 0x0F3D),
(0x169C, 0x169C),
(0x2046, 0x2046),
(0x207E, 0x207E),
(0x208E, 0x208E),
(0x2309, 0x2309),
(0x230B, 0x230B),
(0x232A, 0x232A),
(0x2769, 0x2769),
(0x276B, 0x276B),
(0x276D, 0x276D),
(0x276F, 0x276F),
(0x2771, 0x2771),
(0x2773, 0x2773),
(0x2775, 0x2775),
(0x27C6, 0x27C6),
(0x27E7, 0x27E7),
(0x27E9, 0x27E9),
(0x27EB, 0x27EB),
(0x27ED, 0x27ED),
(0x27EF, 0x27EF),
(0x2984, 0x2984),
(0x2986, 0x2986),
(0x2988, 0x2988),
(0x298A, 0x298A),
(0x298C, 0x298C),
(0x298E, 0x298E),
(0x2990, 0x2990),
(0x2992, 0x2992),
(0x2994, 0x2994),
(0x2996, 0x2996),
(0x2998, 0x2998),
(0x29D9, 0x29D9),
(0x29DB, 0x29DB),
(0x29FD, 0x29FD),
(0x2E23, 0x2E23),
(0x2E25, 0x2E25),
(0x2E27, 0x2E27),
(0x2E29, 0x2E29),
(0x2E56, 0x2E56),
(0x2E58, 0x2E58),
(0x2E5A, 0x2E5A),
(0x2E5C, 0x2E5C),
(0x3009, 0x3009),
(0x300B, 0x300B),
(0x300D, 0x300D),
(0x300F, 0x300F),
(0x3011, 0x3011),
(0x3015, 0x3015),
(0x3017, 0x3017),
(0x3019, 0x3019),
(0x301B, 0x301B),
(0xFE5A, 0xFE5A),
(0xFE5C, 0xFE5C),
(0xFE5E, 0xFE5E),
(0xFF09, 0xFF09),
(0xFF3D, 0xFF3D),
(0xFF5D, 0xFF5D),
(0xFF60, 0xFF60),
(0xFF63, 0xFF63),
];
pub fn is_closing_bracket(cp: u32) -> bool {
let mut lo: usize = 0;
let mut hi: usize = CLOSING_BRACKETS.len();
while lo < hi {
let mid = lo + (hi - lo) / 2;
let (start, end) = CLOSING_BRACKETS[mid];
if cp < start {
hi = mid;
} else if cp > end {
lo = mid + 1;
} else {
return true;
}
}
false
}
const CLOSE_TO_OPEN: &[(u32, u32)] = &[
(0x0029, 0x0028),
(0x005D, 0x005B),
(0x007D, 0x007B),
(0x0F3B, 0x0F3A),
(0x0F3D, 0x0F3C),
(0x169C, 0x169B),
(0x2046, 0x2045),
(0x207E, 0x207D),
(0x208E, 0x208D),
(0x2309, 0x2308),
(0x230B, 0x230A),
(0x232A, 0x2329),
(0x2769, 0x2768),
(0x276B, 0x276A),
(0x276D, 0x276C),
(0x276F, 0x276E),
(0x2771, 0x2770),
(0x2773, 0x2772),
(0x2775, 0x2774),
(0x27C6, 0x27C5),
(0x27E7, 0x27E6),
(0x27E9, 0x27E8),
(0x27EB, 0x27EA),
(0x27ED, 0x27EC),
(0x27EF, 0x27EE),
(0x2984, 0x2983),
(0x2986, 0x2985),
(0x2988, 0x2987),
(0x298A, 0x2989),
(0x298C, 0x298B),
(0x298E, 0x298F),
(0x2990, 0x298D),
(0x2992, 0x2991),
(0x2994, 0x2993),
(0x2996, 0x2995),
(0x2998, 0x2997),
(0x29D9, 0x29D8),
(0x29DB, 0x29DA),
(0x29FD, 0x29FC),
(0x2E23, 0x2E22),
(0x2E25, 0x2E24),
(0x2E27, 0x2E26),
(0x2E29, 0x2E28),
(0x2E56, 0x2E55),
(0x2E58, 0x2E57),
(0x2E5A, 0x2E59),
(0x2E5C, 0x2E5B),
(0x3009, 0x3008),
(0x300B, 0x300A),
(0x300D, 0x300C),
(0x300F, 0x300E),
(0x3011, 0x3010),
(0x3015, 0x3014),
(0x3017, 0x3016),
(0x3019, 0x3018),
(0x301B, 0x301A),
(0xFE5A, 0xFE59),
(0xFE5C, 0xFE5B),
(0xFE5E, 0xFE5D),
(0xFF09, 0xFF08),
(0xFF3D, 0xFF3B),
(0xFF5D, 0xFF5B),
(0xFF60, 0xFF5F),
(0xFF63, 0xFF62),
];
pub fn opening_bracket_for(cp: u32) -> Option<u32> {
let mut lo: usize = 0;
let mut hi: usize = CLOSE_TO_OPEN.len();
while lo < hi {
let mid = lo + (hi - lo) / 2;
let (close, _) = CLOSE_TO_OPEN[mid];
if cp < close {
hi = mid;
} else if cp > close {
lo = mid + 1;
} else {
return Some(CLOSE_TO_OPEN[mid].1);
}
}
None
}