diff --git a/terminal/bidi.c b/terminal/bidi.c index c17671b6..47bfaedf 100644 --- a/terminal/bidi.c +++ b/terminal/bidi.c @@ -320,1327 +320,13 @@ static const shape_node shapetypes[] = { /* * Returns the bidi character type of ch. - * - * The data table in this function is constructed from the Unicode - * Character Database version 14.0.0, downloadable from unicode.org at - * the URL - * - * https://www.unicode.org/Public/14.0.0/ucd/ - * - * by the following fragment of Perl: - -perl -ne '@_=split ";"; $num = hex $_[0]; $type = $_[4];' \ - -e '$fl = ($_[1] =~ /First/ ? 1 : $_[1] =~ /Last/ ? 2 : 0);' \ - -e 'if ($type eq $runtype and ($runend == $num-1 or ' \ - -e ' ($fl==2 and $pfl==1))) {$runend = $num;} else { &reset; }' \ - -e '$pfl=$fl; END { &reset }; sub reset {' \ - -e 'printf" {0x%04x, 0x%04x, %s},\n",$runstart,$runend,$runtype' \ - -e ' if defined $runstart and $runtype ne "ON";' \ - -e '$runstart=$runend=$num; $runtype=$type;}' \ - UnicodeData.txt - */ unsigned char bidi_getType(int ch) { static const struct { int first, last, type; } lookup[] = { - {0x0000, 0x0008, BN}, - {0x0009, 0x0009, S}, - {0x000a, 0x000a, B}, - {0x000b, 0x000b, S}, - {0x000c, 0x000c, WS}, - {0x000d, 0x000d, B}, - {0x000e, 0x001b, BN}, - {0x001c, 0x001e, B}, - {0x001f, 0x001f, S}, - {0x0020, 0x0020, WS}, - {0x0023, 0x0025, ET}, - {0x002b, 0x002b, ES}, - {0x002c, 0x002c, CS}, - {0x002d, 0x002d, ES}, - {0x002e, 0x002f, CS}, - {0x0030, 0x0039, EN}, - {0x003a, 0x003a, CS}, - {0x0041, 0x005a, L}, - {0x0061, 0x007a, L}, - {0x007f, 0x0084, BN}, - {0x0085, 0x0085, B}, - {0x0086, 0x009f, BN}, - {0x00a0, 0x00a0, CS}, - {0x00a2, 0x00a5, ET}, - {0x00aa, 0x00aa, L}, - {0x00ad, 0x00ad, BN}, - {0x00b0, 0x00b1, ET}, - {0x00b2, 0x00b3, EN}, - {0x00b5, 0x00b5, L}, - {0x00b9, 0x00b9, EN}, - {0x00ba, 0x00ba, L}, - {0x00c0, 0x00d6, L}, - {0x00d8, 0x00f6, L}, - {0x00f8, 0x02b8, L}, - {0x02bb, 0x02c1, L}, - {0x02d0, 0x02d1, L}, - {0x02e0, 0x02e4, L}, - {0x02ee, 0x02ee, L}, - {0x0300, 0x036f, NSM}, - {0x0370, 0x0373, L}, - {0x0376, 0x0377, L}, - {0x037a, 0x037d, L}, - {0x037f, 0x037f, L}, - {0x0386, 0x0386, L}, - {0x0388, 0x038a, L}, - {0x038c, 0x038c, L}, - {0x038e, 0x03a1, L}, - {0x03a3, 0x03f5, L}, - {0x03f7, 0x0482, L}, - {0x0483, 0x0489, NSM}, - {0x048a, 0x052f, L}, - {0x0531, 0x0556, L}, - {0x0559, 0x0589, L}, - {0x058f, 0x058f, ET}, - {0x0591, 0x05bd, NSM}, - {0x05be, 0x05be, R}, - {0x05bf, 0x05bf, NSM}, - {0x05c0, 0x05c0, R}, - {0x05c1, 0x05c2, NSM}, - {0x05c3, 0x05c3, R}, - {0x05c4, 0x05c5, NSM}, - {0x05c6, 0x05c6, R}, - {0x05c7, 0x05c7, NSM}, - {0x05d0, 0x05ea, R}, - {0x05ef, 0x05f4, R}, - {0x0600, 0x0605, AN}, - {0x0608, 0x0608, AL}, - {0x0609, 0x060a, ET}, - {0x060b, 0x060b, AL}, - {0x060c, 0x060c, CS}, - {0x060d, 0x060d, AL}, - {0x0610, 0x061a, NSM}, - {0x061b, 0x064a, AL}, - {0x064b, 0x065f, NSM}, - {0x0660, 0x0669, AN}, - {0x066a, 0x066a, ET}, - {0x066b, 0x066c, AN}, - {0x066d, 0x066f, AL}, - {0x0670, 0x0670, NSM}, - {0x0671, 0x06d5, AL}, - {0x06d6, 0x06dc, NSM}, - {0x06dd, 0x06dd, AN}, - {0x06df, 0x06e4, NSM}, - {0x06e5, 0x06e6, AL}, - {0x06e7, 0x06e8, NSM}, - {0x06ea, 0x06ed, NSM}, - {0x06ee, 0x06ef, AL}, - {0x06f0, 0x06f9, EN}, - {0x06fa, 0x070d, AL}, - {0x070f, 0x0710, AL}, - {0x0711, 0x0711, NSM}, - {0x0712, 0x072f, AL}, - {0x0730, 0x074a, NSM}, - {0x074d, 0x07a5, AL}, - {0x07a6, 0x07b0, NSM}, - {0x07b1, 0x07b1, AL}, - {0x07c0, 0x07ea, R}, - {0x07eb, 0x07f3, NSM}, - {0x07f4, 0x07f5, R}, - {0x07fa, 0x07fa, R}, - {0x07fd, 0x07fd, NSM}, - {0x07fe, 0x0815, R}, - {0x0816, 0x0819, NSM}, - {0x081a, 0x081a, R}, - {0x081b, 0x0823, NSM}, - {0x0824, 0x0824, R}, - {0x0825, 0x0827, NSM}, - {0x0828, 0x0828, R}, - {0x0829, 0x082d, NSM}, - {0x0830, 0x083e, R}, - {0x0840, 0x0858, R}, - {0x0859, 0x085b, NSM}, - {0x085e, 0x085e, R}, - {0x0860, 0x086a, AL}, - {0x0870, 0x088e, AL}, - {0x0890, 0x0891, AN}, - {0x0898, 0x089f, NSM}, - {0x08a0, 0x08c9, AL}, - {0x08ca, 0x08e1, NSM}, - {0x08e2, 0x08e2, AN}, - {0x08e3, 0x0902, NSM}, - {0x0903, 0x0939, L}, - {0x093a, 0x093a, NSM}, - {0x093b, 0x093b, L}, - {0x093c, 0x093c, NSM}, - {0x093d, 0x0940, L}, - {0x0941, 0x0948, NSM}, - {0x0949, 0x094c, L}, - {0x094d, 0x094d, NSM}, - {0x094e, 0x0950, L}, - {0x0951, 0x0957, NSM}, - {0x0958, 0x0961, L}, - {0x0962, 0x0963, NSM}, - {0x0964, 0x0980, L}, - {0x0981, 0x0981, NSM}, - {0x0982, 0x0983, L}, - {0x0985, 0x098c, L}, - {0x098f, 0x0990, L}, - {0x0993, 0x09a8, L}, - {0x09aa, 0x09b0, L}, - {0x09b2, 0x09b2, L}, - {0x09b6, 0x09b9, L}, - {0x09bc, 0x09bc, NSM}, - {0x09bd, 0x09c0, L}, - {0x09c1, 0x09c4, NSM}, - {0x09c7, 0x09c8, L}, - {0x09cb, 0x09cc, L}, - {0x09cd, 0x09cd, NSM}, - {0x09ce, 0x09ce, L}, - {0x09d7, 0x09d7, L}, - {0x09dc, 0x09dd, L}, - {0x09df, 0x09e1, L}, - {0x09e2, 0x09e3, NSM}, - {0x09e6, 0x09f1, L}, - {0x09f2, 0x09f3, ET}, - {0x09f4, 0x09fa, L}, - {0x09fb, 0x09fb, ET}, - {0x09fc, 0x09fd, L}, - {0x09fe, 0x09fe, NSM}, - {0x0a01, 0x0a02, NSM}, - {0x0a03, 0x0a03, L}, - {0x0a05, 0x0a0a, L}, - {0x0a0f, 0x0a10, L}, - {0x0a13, 0x0a28, L}, - {0x0a2a, 0x0a30, L}, - {0x0a32, 0x0a33, L}, - {0x0a35, 0x0a36, L}, - {0x0a38, 0x0a39, L}, - {0x0a3c, 0x0a3c, NSM}, - {0x0a3e, 0x0a40, L}, - {0x0a41, 0x0a42, NSM}, - {0x0a47, 0x0a48, NSM}, - {0x0a4b, 0x0a4d, NSM}, - {0x0a51, 0x0a51, NSM}, - {0x0a59, 0x0a5c, L}, - {0x0a5e, 0x0a5e, L}, - {0x0a66, 0x0a6f, L}, - {0x0a70, 0x0a71, NSM}, - {0x0a72, 0x0a74, L}, - {0x0a75, 0x0a75, NSM}, - {0x0a76, 0x0a76, L}, - {0x0a81, 0x0a82, NSM}, - {0x0a83, 0x0a83, L}, - {0x0a85, 0x0a8d, L}, - {0x0a8f, 0x0a91, L}, - {0x0a93, 0x0aa8, L}, - {0x0aaa, 0x0ab0, L}, - {0x0ab2, 0x0ab3, L}, - {0x0ab5, 0x0ab9, L}, - {0x0abc, 0x0abc, NSM}, - {0x0abd, 0x0ac0, L}, - {0x0ac1, 0x0ac5, NSM}, - {0x0ac7, 0x0ac8, NSM}, - {0x0ac9, 0x0ac9, L}, - {0x0acb, 0x0acc, L}, - {0x0acd, 0x0acd, NSM}, - {0x0ad0, 0x0ad0, L}, - {0x0ae0, 0x0ae1, L}, - {0x0ae2, 0x0ae3, NSM}, - {0x0ae6, 0x0af0, L}, - {0x0af1, 0x0af1, ET}, - {0x0af9, 0x0af9, L}, - {0x0afa, 0x0aff, NSM}, - {0x0b01, 0x0b01, NSM}, - {0x0b02, 0x0b03, L}, - {0x0b05, 0x0b0c, L}, - {0x0b0f, 0x0b10, L}, - {0x0b13, 0x0b28, L}, - {0x0b2a, 0x0b30, L}, - {0x0b32, 0x0b33, L}, - {0x0b35, 0x0b39, L}, - {0x0b3c, 0x0b3c, NSM}, - {0x0b3d, 0x0b3e, L}, - {0x0b3f, 0x0b3f, NSM}, - {0x0b40, 0x0b40, L}, - {0x0b41, 0x0b44, NSM}, - {0x0b47, 0x0b48, L}, - {0x0b4b, 0x0b4c, L}, - {0x0b4d, 0x0b4d, NSM}, - {0x0b55, 0x0b56, NSM}, - {0x0b57, 0x0b57, L}, - {0x0b5c, 0x0b5d, L}, - {0x0b5f, 0x0b61, L}, - {0x0b62, 0x0b63, NSM}, - {0x0b66, 0x0b77, L}, - {0x0b82, 0x0b82, NSM}, - {0x0b83, 0x0b83, L}, - {0x0b85, 0x0b8a, L}, - {0x0b8e, 0x0b90, L}, - {0x0b92, 0x0b95, L}, - {0x0b99, 0x0b9a, L}, - {0x0b9c, 0x0b9c, L}, - {0x0b9e, 0x0b9f, L}, - {0x0ba3, 0x0ba4, L}, - {0x0ba8, 0x0baa, L}, - {0x0bae, 0x0bb9, L}, - {0x0bbe, 0x0bbf, L}, - {0x0bc0, 0x0bc0, NSM}, - {0x0bc1, 0x0bc2, L}, - {0x0bc6, 0x0bc8, L}, - {0x0bca, 0x0bcc, L}, - {0x0bcd, 0x0bcd, NSM}, - {0x0bd0, 0x0bd0, L}, - {0x0bd7, 0x0bd7, L}, - {0x0be6, 0x0bf2, L}, - {0x0bf9, 0x0bf9, ET}, - {0x0c00, 0x0c00, NSM}, - {0x0c01, 0x0c03, L}, - {0x0c04, 0x0c04, NSM}, - {0x0c05, 0x0c0c, L}, - {0x0c0e, 0x0c10, L}, - {0x0c12, 0x0c28, L}, - {0x0c2a, 0x0c39, L}, - {0x0c3c, 0x0c3c, NSM}, - {0x0c3d, 0x0c3d, L}, - {0x0c3e, 0x0c40, NSM}, - {0x0c41, 0x0c44, L}, - {0x0c46, 0x0c48, NSM}, - {0x0c4a, 0x0c4d, NSM}, - {0x0c55, 0x0c56, NSM}, - {0x0c58, 0x0c5a, L}, - {0x0c5d, 0x0c5d, L}, - {0x0c60, 0x0c61, L}, - {0x0c62, 0x0c63, NSM}, - {0x0c66, 0x0c6f, L}, - {0x0c77, 0x0c77, L}, - {0x0c7f, 0x0c80, L}, - {0x0c81, 0x0c81, NSM}, - {0x0c82, 0x0c8c, L}, - {0x0c8e, 0x0c90, L}, - {0x0c92, 0x0ca8, L}, - {0x0caa, 0x0cb3, L}, - {0x0cb5, 0x0cb9, L}, - {0x0cbc, 0x0cbc, NSM}, - {0x0cbd, 0x0cc4, L}, - {0x0cc6, 0x0cc8, L}, - {0x0cca, 0x0ccb, L}, - {0x0ccc, 0x0ccd, NSM}, - {0x0cd5, 0x0cd6, L}, - {0x0cdd, 0x0cde, L}, - {0x0ce0, 0x0ce1, L}, - {0x0ce2, 0x0ce3, NSM}, - {0x0ce6, 0x0cef, L}, - {0x0cf1, 0x0cf2, L}, - {0x0d00, 0x0d01, NSM}, - {0x0d02, 0x0d0c, L}, - {0x0d0e, 0x0d10, L}, - {0x0d12, 0x0d3a, L}, - {0x0d3b, 0x0d3c, NSM}, - {0x0d3d, 0x0d40, L}, - {0x0d41, 0x0d44, NSM}, - {0x0d46, 0x0d48, L}, - {0x0d4a, 0x0d4c, L}, - {0x0d4d, 0x0d4d, NSM}, - {0x0d4e, 0x0d4f, L}, - {0x0d54, 0x0d61, L}, - {0x0d62, 0x0d63, NSM}, - {0x0d66, 0x0d7f, L}, - {0x0d81, 0x0d81, NSM}, - {0x0d82, 0x0d83, L}, - {0x0d85, 0x0d96, L}, - {0x0d9a, 0x0db1, L}, - {0x0db3, 0x0dbb, L}, - {0x0dbd, 0x0dbd, L}, - {0x0dc0, 0x0dc6, L}, - {0x0dca, 0x0dca, NSM}, - {0x0dcf, 0x0dd1, L}, - {0x0dd2, 0x0dd4, NSM}, - {0x0dd6, 0x0dd6, NSM}, - {0x0dd8, 0x0ddf, L}, - {0x0de6, 0x0def, L}, - {0x0df2, 0x0df4, L}, - {0x0e01, 0x0e30, L}, - {0x0e31, 0x0e31, NSM}, - {0x0e32, 0x0e33, L}, - {0x0e34, 0x0e3a, NSM}, - {0x0e3f, 0x0e3f, ET}, - {0x0e40, 0x0e46, L}, - {0x0e47, 0x0e4e, NSM}, - {0x0e4f, 0x0e5b, L}, - {0x0e81, 0x0e82, L}, - {0x0e84, 0x0e84, L}, - {0x0e86, 0x0e8a, L}, - {0x0e8c, 0x0ea3, L}, - {0x0ea5, 0x0ea5, L}, - {0x0ea7, 0x0eb0, L}, - {0x0eb1, 0x0eb1, NSM}, - {0x0eb2, 0x0eb3, L}, - {0x0eb4, 0x0ebc, NSM}, - {0x0ebd, 0x0ebd, L}, - {0x0ec0, 0x0ec4, L}, - {0x0ec6, 0x0ec6, L}, - {0x0ec8, 0x0ecd, NSM}, - {0x0ed0, 0x0ed9, L}, - {0x0edc, 0x0edf, L}, - {0x0f00, 0x0f17, L}, - {0x0f18, 0x0f19, NSM}, - {0x0f1a, 0x0f34, L}, - {0x0f35, 0x0f35, NSM}, - {0x0f36, 0x0f36, L}, - {0x0f37, 0x0f37, NSM}, - {0x0f38, 0x0f38, L}, - {0x0f39, 0x0f39, NSM}, - {0x0f3e, 0x0f47, L}, - {0x0f49, 0x0f6c, L}, - {0x0f71, 0x0f7e, NSM}, - {0x0f7f, 0x0f7f, L}, - {0x0f80, 0x0f84, NSM}, - {0x0f85, 0x0f85, L}, - {0x0f86, 0x0f87, NSM}, - {0x0f88, 0x0f8c, L}, - {0x0f8d, 0x0f97, NSM}, - {0x0f99, 0x0fbc, NSM}, - {0x0fbe, 0x0fc5, L}, - {0x0fc6, 0x0fc6, NSM}, - {0x0fc7, 0x0fcc, L}, - {0x0fce, 0x0fda, L}, - {0x1000, 0x102c, L}, - {0x102d, 0x1030, NSM}, - {0x1031, 0x1031, L}, - {0x1032, 0x1037, NSM}, - {0x1038, 0x1038, L}, - {0x1039, 0x103a, NSM}, - {0x103b, 0x103c, L}, - {0x103d, 0x103e, NSM}, - {0x103f, 0x1057, L}, - {0x1058, 0x1059, NSM}, - {0x105a, 0x105d, L}, - {0x105e, 0x1060, NSM}, - {0x1061, 0x1070, L}, - {0x1071, 0x1074, NSM}, - {0x1075, 0x1081, L}, - {0x1082, 0x1082, NSM}, - {0x1083, 0x1084, L}, - {0x1085, 0x1086, NSM}, - {0x1087, 0x108c, L}, - {0x108d, 0x108d, NSM}, - {0x108e, 0x109c, L}, - {0x109d, 0x109d, NSM}, - {0x109e, 0x10c5, L}, - {0x10c7, 0x10c7, L}, - {0x10cd, 0x10cd, L}, - {0x10d0, 0x1248, L}, - {0x124a, 0x124d, L}, - {0x1250, 0x1256, L}, - {0x1258, 0x1258, L}, - {0x125a, 0x125d, L}, - {0x1260, 0x1288, L}, - {0x128a, 0x128d, L}, - {0x1290, 0x12b0, L}, - {0x12b2, 0x12b5, L}, - {0x12b8, 0x12be, L}, - {0x12c0, 0x12c0, L}, - {0x12c2, 0x12c5, L}, - {0x12c8, 0x12d6, L}, - {0x12d8, 0x1310, L}, - {0x1312, 0x1315, L}, - {0x1318, 0x135a, L}, - {0x135d, 0x135f, NSM}, - {0x1360, 0x137c, L}, - {0x1380, 0x138f, L}, - {0x13a0, 0x13f5, L}, - {0x13f8, 0x13fd, L}, - {0x1401, 0x167f, L}, - {0x1680, 0x1680, WS}, - {0x1681, 0x169a, L}, - {0x16a0, 0x16f8, L}, - {0x1700, 0x1711, L}, - {0x1712, 0x1714, NSM}, - {0x1715, 0x1715, L}, - {0x171f, 0x1731, L}, - {0x1732, 0x1733, NSM}, - {0x1734, 0x1736, L}, - {0x1740, 0x1751, L}, - {0x1752, 0x1753, NSM}, - {0x1760, 0x176c, L}, - {0x176e, 0x1770, L}, - {0x1772, 0x1773, NSM}, - {0x1780, 0x17b3, L}, - {0x17b4, 0x17b5, NSM}, - {0x17b6, 0x17b6, L}, - {0x17b7, 0x17bd, NSM}, - {0x17be, 0x17c5, L}, - {0x17c6, 0x17c6, NSM}, - {0x17c7, 0x17c8, L}, - {0x17c9, 0x17d3, NSM}, - {0x17d4, 0x17da, L}, - {0x17db, 0x17db, ET}, - {0x17dc, 0x17dc, L}, - {0x17dd, 0x17dd, NSM}, - {0x17e0, 0x17e9, L}, - {0x180b, 0x180d, NSM}, - {0x180e, 0x180e, BN}, - {0x180f, 0x180f, NSM}, - {0x1810, 0x1819, L}, - {0x1820, 0x1878, L}, - {0x1880, 0x1884, L}, - {0x1885, 0x1886, NSM}, - {0x1887, 0x18a8, L}, - {0x18a9, 0x18a9, NSM}, - {0x18aa, 0x18aa, L}, - {0x18b0, 0x18f5, L}, - {0x1900, 0x191e, L}, - {0x1920, 0x1922, NSM}, - {0x1923, 0x1926, L}, - {0x1927, 0x1928, NSM}, - {0x1929, 0x192b, L}, - {0x1930, 0x1931, L}, - {0x1932, 0x1932, NSM}, - {0x1933, 0x1938, L}, - {0x1939, 0x193b, NSM}, - {0x1946, 0x196d, L}, - {0x1970, 0x1974, L}, - {0x1980, 0x19ab, L}, - {0x19b0, 0x19c9, L}, - {0x19d0, 0x19da, L}, - {0x1a00, 0x1a16, L}, - {0x1a17, 0x1a18, NSM}, - {0x1a19, 0x1a1a, L}, - {0x1a1b, 0x1a1b, NSM}, - {0x1a1e, 0x1a55, L}, - {0x1a56, 0x1a56, NSM}, - {0x1a57, 0x1a57, L}, - {0x1a58, 0x1a5e, NSM}, - {0x1a60, 0x1a60, NSM}, - {0x1a61, 0x1a61, L}, - {0x1a62, 0x1a62, NSM}, - {0x1a63, 0x1a64, L}, - {0x1a65, 0x1a6c, NSM}, - {0x1a6d, 0x1a72, L}, - {0x1a73, 0x1a7c, NSM}, - {0x1a7f, 0x1a7f, NSM}, - {0x1a80, 0x1a89, L}, - {0x1a90, 0x1a99, L}, - {0x1aa0, 0x1aad, L}, - {0x1ab0, 0x1ace, NSM}, - {0x1b00, 0x1b03, NSM}, - {0x1b04, 0x1b33, L}, - {0x1b34, 0x1b34, NSM}, - {0x1b35, 0x1b35, L}, - {0x1b36, 0x1b3a, NSM}, - {0x1b3b, 0x1b3b, L}, - {0x1b3c, 0x1b3c, NSM}, - {0x1b3d, 0x1b41, L}, - {0x1b42, 0x1b42, NSM}, - {0x1b43, 0x1b4c, L}, - {0x1b50, 0x1b6a, L}, - {0x1b6b, 0x1b73, NSM}, - {0x1b74, 0x1b7e, L}, - {0x1b80, 0x1b81, NSM}, - {0x1b82, 0x1ba1, L}, - {0x1ba2, 0x1ba5, NSM}, - {0x1ba6, 0x1ba7, L}, - {0x1ba8, 0x1ba9, NSM}, - {0x1baa, 0x1baa, L}, - {0x1bab, 0x1bad, NSM}, - {0x1bae, 0x1be5, L}, - {0x1be6, 0x1be6, NSM}, - {0x1be7, 0x1be7, L}, - {0x1be8, 0x1be9, NSM}, - {0x1bea, 0x1bec, L}, - {0x1bed, 0x1bed, NSM}, - {0x1bee, 0x1bee, L}, - {0x1bef, 0x1bf1, NSM}, - {0x1bf2, 0x1bf3, L}, - {0x1bfc, 0x1c2b, L}, - {0x1c2c, 0x1c33, NSM}, - {0x1c34, 0x1c35, L}, - {0x1c36, 0x1c37, NSM}, - {0x1c3b, 0x1c49, L}, - {0x1c4d, 0x1c88, L}, - {0x1c90, 0x1cba, L}, - {0x1cbd, 0x1cc7, L}, - {0x1cd0, 0x1cd2, NSM}, - {0x1cd3, 0x1cd3, L}, - {0x1cd4, 0x1ce0, NSM}, - {0x1ce1, 0x1ce1, L}, - {0x1ce2, 0x1ce8, NSM}, - {0x1ce9, 0x1cec, L}, - {0x1ced, 0x1ced, NSM}, - {0x1cee, 0x1cf3, L}, - {0x1cf4, 0x1cf4, NSM}, - {0x1cf5, 0x1cf7, L}, - {0x1cf8, 0x1cf9, NSM}, - {0x1cfa, 0x1cfa, L}, - {0x1d00, 0x1dbf, L}, - {0x1dc0, 0x1dff, NSM}, - {0x1e00, 0x1f15, L}, - {0x1f18, 0x1f1d, L}, - {0x1f20, 0x1f45, L}, - {0x1f48, 0x1f4d, L}, - {0x1f50, 0x1f57, L}, - {0x1f59, 0x1f59, L}, - {0x1f5b, 0x1f5b, L}, - {0x1f5d, 0x1f5d, L}, - {0x1f5f, 0x1f7d, L}, - {0x1f80, 0x1fb4, L}, - {0x1fb6, 0x1fbc, L}, - {0x1fbe, 0x1fbe, L}, - {0x1fc2, 0x1fc4, L}, - {0x1fc6, 0x1fcc, L}, - {0x1fd0, 0x1fd3, L}, - {0x1fd6, 0x1fdb, L}, - {0x1fe0, 0x1fec, L}, - {0x1ff2, 0x1ff4, L}, - {0x1ff6, 0x1ffc, L}, - {0x2000, 0x200a, WS}, - {0x200b, 0x200d, BN}, - {0x200e, 0x200e, L}, - {0x200f, 0x200f, R}, - {0x2028, 0x2028, WS}, - {0x2029, 0x2029, B}, - {0x202a, 0x202a, LRE}, - {0x202b, 0x202b, RLE}, - {0x202c, 0x202c, PDF}, - {0x202d, 0x202d, LRO}, - {0x202e, 0x202e, RLO}, - {0x202f, 0x202f, CS}, - {0x2030, 0x2034, ET}, - {0x2044, 0x2044, CS}, - {0x205f, 0x205f, WS}, - {0x2060, 0x2064, BN}, - {0x2066, 0x2066, LRI}, - {0x2067, 0x2067, RLI}, - {0x2068, 0x2068, FSI}, - {0x2069, 0x2069, PDI}, - {0x206a, 0x206f, BN}, - {0x2070, 0x2070, EN}, - {0x2071, 0x2071, L}, - {0x2074, 0x2079, EN}, - {0x207a, 0x207b, ES}, - {0x207f, 0x207f, L}, - {0x2080, 0x2089, EN}, - {0x208a, 0x208b, ES}, - {0x2090, 0x209c, L}, - {0x20a0, 0x20c0, ET}, - {0x20d0, 0x20f0, NSM}, - {0x2102, 0x2102, L}, - {0x2107, 0x2107, L}, - {0x210a, 0x2113, L}, - {0x2115, 0x2115, L}, - {0x2119, 0x211d, L}, - {0x2124, 0x2124, L}, - {0x2126, 0x2126, L}, - {0x2128, 0x2128, L}, - {0x212a, 0x212d, L}, - {0x212e, 0x212e, ET}, - {0x212f, 0x2139, L}, - {0x213c, 0x213f, L}, - {0x2145, 0x2149, L}, - {0x214e, 0x214f, L}, - {0x2160, 0x2188, L}, - {0x2212, 0x2212, ES}, - {0x2213, 0x2213, ET}, - {0x2336, 0x237a, L}, - {0x2395, 0x2395, L}, - {0x2488, 0x249b, EN}, - {0x249c, 0x24e9, L}, - {0x26ac, 0x26ac, L}, - {0x2800, 0x28ff, L}, - {0x2c00, 0x2ce4, L}, - {0x2ceb, 0x2cee, L}, - {0x2cef, 0x2cf1, NSM}, - {0x2cf2, 0x2cf3, L}, - {0x2d00, 0x2d25, L}, - {0x2d27, 0x2d27, L}, - {0x2d2d, 0x2d2d, L}, - {0x2d30, 0x2d67, L}, - {0x2d6f, 0x2d70, L}, - {0x2d7f, 0x2d7f, NSM}, - {0x2d80, 0x2d96, L}, - {0x2da0, 0x2da6, L}, - {0x2da8, 0x2dae, L}, - {0x2db0, 0x2db6, L}, - {0x2db8, 0x2dbe, L}, - {0x2dc0, 0x2dc6, L}, - {0x2dc8, 0x2dce, L}, - {0x2dd0, 0x2dd6, L}, - {0x2dd8, 0x2dde, L}, - {0x2de0, 0x2dff, NSM}, - {0x3000, 0x3000, WS}, - {0x3005, 0x3007, L}, - {0x3021, 0x3029, L}, - {0x302a, 0x302d, NSM}, - {0x302e, 0x302f, L}, - {0x3031, 0x3035, L}, - {0x3038, 0x303c, L}, - {0x3041, 0x3096, L}, - {0x3099, 0x309a, NSM}, - {0x309d, 0x309f, L}, - {0x30a1, 0x30fa, L}, - {0x30fc, 0x30ff, L}, - {0x3105, 0x312f, L}, - {0x3131, 0x318e, L}, - {0x3190, 0x31bf, L}, - {0x31f0, 0x321c, L}, - {0x3220, 0x324f, L}, - {0x3260, 0x327b, L}, - {0x327f, 0x32b0, L}, - {0x32c0, 0x32cb, L}, - {0x32d0, 0x3376, L}, - {0x337b, 0x33dd, L}, - {0x33e0, 0x33fe, L}, - {0x3400, 0x4dbf, L}, - {0x4e00, 0xa48c, L}, - {0xa4d0, 0xa60c, L}, - {0xa610, 0xa62b, L}, - {0xa640, 0xa66e, L}, - {0xa66f, 0xa672, NSM}, - {0xa674, 0xa67d, NSM}, - {0xa680, 0xa69d, L}, - {0xa69e, 0xa69f, NSM}, - {0xa6a0, 0xa6ef, L}, - {0xa6f0, 0xa6f1, NSM}, - {0xa6f2, 0xa6f7, L}, - {0xa722, 0xa787, L}, - {0xa789, 0xa7ca, L}, - {0xa7d0, 0xa7d1, L}, - {0xa7d3, 0xa7d3, L}, - {0xa7d5, 0xa7d9, L}, - {0xa7f2, 0xa801, L}, - {0xa802, 0xa802, NSM}, - {0xa803, 0xa805, L}, - {0xa806, 0xa806, NSM}, - {0xa807, 0xa80a, L}, - {0xa80b, 0xa80b, NSM}, - {0xa80c, 0xa824, L}, - {0xa825, 0xa826, NSM}, - {0xa827, 0xa827, L}, - {0xa82c, 0xa82c, NSM}, - {0xa830, 0xa837, L}, - {0xa838, 0xa839, ET}, - {0xa840, 0xa873, L}, - {0xa880, 0xa8c3, L}, - {0xa8c4, 0xa8c5, NSM}, - {0xa8ce, 0xa8d9, L}, - {0xa8e0, 0xa8f1, NSM}, - {0xa8f2, 0xa8fe, L}, - {0xa8ff, 0xa8ff, NSM}, - {0xa900, 0xa925, L}, - {0xa926, 0xa92d, NSM}, - {0xa92e, 0xa946, L}, - {0xa947, 0xa951, NSM}, - {0xa952, 0xa953, L}, - {0xa95f, 0xa97c, L}, - {0xa980, 0xa982, NSM}, - {0xa983, 0xa9b2, L}, - {0xa9b3, 0xa9b3, NSM}, - {0xa9b4, 0xa9b5, L}, - {0xa9b6, 0xa9b9, NSM}, - {0xa9ba, 0xa9bb, L}, - {0xa9bc, 0xa9bd, NSM}, - {0xa9be, 0xa9cd, L}, - {0xa9cf, 0xa9d9, L}, - {0xa9de, 0xa9e4, L}, - {0xa9e5, 0xa9e5, NSM}, - {0xa9e6, 0xa9fe, L}, - {0xaa00, 0xaa28, L}, - {0xaa29, 0xaa2e, NSM}, - {0xaa2f, 0xaa30, L}, - {0xaa31, 0xaa32, NSM}, - {0xaa33, 0xaa34, L}, - {0xaa35, 0xaa36, NSM}, - {0xaa40, 0xaa42, L}, - {0xaa43, 0xaa43, NSM}, - {0xaa44, 0xaa4b, L}, - {0xaa4c, 0xaa4c, NSM}, - {0xaa4d, 0xaa4d, L}, - {0xaa50, 0xaa59, L}, - {0xaa5c, 0xaa7b, L}, - {0xaa7c, 0xaa7c, NSM}, - {0xaa7d, 0xaaaf, L}, - {0xaab0, 0xaab0, NSM}, - {0xaab1, 0xaab1, L}, - {0xaab2, 0xaab4, NSM}, - {0xaab5, 0xaab6, L}, - {0xaab7, 0xaab8, NSM}, - {0xaab9, 0xaabd, L}, - {0xaabe, 0xaabf, NSM}, - {0xaac0, 0xaac0, L}, - {0xaac1, 0xaac1, NSM}, - {0xaac2, 0xaac2, L}, - {0xaadb, 0xaaeb, L}, - {0xaaec, 0xaaed, NSM}, - {0xaaee, 0xaaf5, L}, - {0xaaf6, 0xaaf6, NSM}, - {0xab01, 0xab06, L}, - {0xab09, 0xab0e, L}, - {0xab11, 0xab16, L}, - {0xab20, 0xab26, L}, - {0xab28, 0xab2e, L}, - {0xab30, 0xab69, L}, - {0xab70, 0xabe4, L}, - {0xabe5, 0xabe5, NSM}, - {0xabe6, 0xabe7, L}, - {0xabe8, 0xabe8, NSM}, - {0xabe9, 0xabec, L}, - {0xabed, 0xabed, NSM}, - {0xabf0, 0xabf9, L}, - {0xac00, 0xd7a3, L}, - {0xd7b0, 0xd7c6, L}, - {0xd7cb, 0xd7fb, L}, - {0xd800, 0xfa6d, L}, - {0xfa70, 0xfad9, L}, - {0xfb00, 0xfb06, L}, - {0xfb13, 0xfb17, L}, - {0xfb1d, 0xfb1d, R}, - {0xfb1e, 0xfb1e, NSM}, - {0xfb1f, 0xfb28, R}, - {0xfb29, 0xfb29, ES}, - {0xfb2a, 0xfb36, R}, - {0xfb38, 0xfb3c, R}, - {0xfb3e, 0xfb3e, R}, - {0xfb40, 0xfb41, R}, - {0xfb43, 0xfb44, R}, - {0xfb46, 0xfb4f, R}, - {0xfb50, 0xfbc2, AL}, - {0xfbd3, 0xfd3d, AL}, - {0xfd50, 0xfd8f, AL}, - {0xfd92, 0xfdc7, AL}, - {0xfdf0, 0xfdfc, AL}, - {0xfe00, 0xfe0f, NSM}, - {0xfe20, 0xfe2f, NSM}, - {0xfe50, 0xfe50, CS}, - {0xfe52, 0xfe52, CS}, - {0xfe55, 0xfe55, CS}, - {0xfe5f, 0xfe5f, ET}, - {0xfe62, 0xfe63, ES}, - {0xfe69, 0xfe6a, ET}, - {0xfe70, 0xfe74, AL}, - {0xfe76, 0xfefc, AL}, - {0xfeff, 0xfeff, BN}, - {0xff03, 0xff05, ET}, - {0xff0b, 0xff0b, ES}, - {0xff0c, 0xff0c, CS}, - {0xff0d, 0xff0d, ES}, - {0xff0e, 0xff0f, CS}, - {0xff10, 0xff19, EN}, - {0xff1a, 0xff1a, CS}, - {0xff21, 0xff3a, L}, - {0xff41, 0xff5a, L}, - {0xff66, 0xffbe, L}, - {0xffc2, 0xffc7, L}, - {0xffca, 0xffcf, L}, - {0xffd2, 0xffd7, L}, - {0xffda, 0xffdc, L}, - {0xffe0, 0xffe1, ET}, - {0xffe5, 0xffe6, ET}, - {0x10000, 0x1000b, L}, - {0x1000d, 0x10026, L}, - {0x10028, 0x1003a, L}, - {0x1003c, 0x1003d, L}, - {0x1003f, 0x1004d, L}, - {0x10050, 0x1005d, L}, - {0x10080, 0x100fa, L}, - {0x10100, 0x10100, L}, - {0x10102, 0x10102, L}, - {0x10107, 0x10133, L}, - {0x10137, 0x1013f, L}, - {0x1018d, 0x1018e, L}, - {0x101d0, 0x101fc, L}, - {0x101fd, 0x101fd, NSM}, - {0x10280, 0x1029c, L}, - {0x102a0, 0x102d0, L}, - {0x102e0, 0x102e0, NSM}, - {0x102e1, 0x102fb, EN}, - {0x10300, 0x10323, L}, - {0x1032d, 0x1034a, L}, - {0x10350, 0x10375, L}, - {0x10376, 0x1037a, NSM}, - {0x10380, 0x1039d, L}, - {0x1039f, 0x103c3, L}, - {0x103c8, 0x103d5, L}, - {0x10400, 0x1049d, L}, - {0x104a0, 0x104a9, L}, - {0x104b0, 0x104d3, L}, - {0x104d8, 0x104fb, L}, - {0x10500, 0x10527, L}, - {0x10530, 0x10563, L}, - {0x1056f, 0x1057a, L}, - {0x1057c, 0x1058a, L}, - {0x1058c, 0x10592, L}, - {0x10594, 0x10595, L}, - {0x10597, 0x105a1, L}, - {0x105a3, 0x105b1, L}, - {0x105b3, 0x105b9, L}, - {0x105bb, 0x105bc, L}, - {0x10600, 0x10736, L}, - {0x10740, 0x10755, L}, - {0x10760, 0x10767, L}, - {0x10780, 0x10785, L}, - {0x10787, 0x107b0, L}, - {0x107b2, 0x107ba, L}, - {0x10800, 0x10805, R}, - {0x10808, 0x10808, R}, - {0x1080a, 0x10835, R}, - {0x10837, 0x10838, R}, - {0x1083c, 0x1083c, R}, - {0x1083f, 0x10855, R}, - {0x10857, 0x1089e, R}, - {0x108a7, 0x108af, R}, - {0x108e0, 0x108f2, R}, - {0x108f4, 0x108f5, R}, - {0x108fb, 0x1091b, R}, - {0x10920, 0x10939, R}, - {0x1093f, 0x1093f, R}, - {0x10980, 0x109b7, R}, - {0x109bc, 0x109cf, R}, - {0x109d2, 0x10a00, R}, - {0x10a01, 0x10a03, NSM}, - {0x10a05, 0x10a06, NSM}, - {0x10a0c, 0x10a0f, NSM}, - {0x10a10, 0x10a13, R}, - {0x10a15, 0x10a17, R}, - {0x10a19, 0x10a35, R}, - {0x10a38, 0x10a3a, NSM}, - {0x10a3f, 0x10a3f, NSM}, - {0x10a40, 0x10a48, R}, - {0x10a50, 0x10a58, R}, - {0x10a60, 0x10a9f, R}, - {0x10ac0, 0x10ae4, R}, - {0x10ae5, 0x10ae6, NSM}, - {0x10aeb, 0x10af6, R}, - {0x10b00, 0x10b35, R}, - {0x10b40, 0x10b55, R}, - {0x10b58, 0x10b72, R}, - {0x10b78, 0x10b91, R}, - {0x10b99, 0x10b9c, R}, - {0x10ba9, 0x10baf, R}, - {0x10c00, 0x10c48, R}, - {0x10c80, 0x10cb2, R}, - {0x10cc0, 0x10cf2, R}, - {0x10cfa, 0x10cff, R}, - {0x10d00, 0x10d23, AL}, - {0x10d24, 0x10d27, NSM}, - {0x10d30, 0x10d39, AN}, - {0x10e60, 0x10e7e, AN}, - {0x10e80, 0x10ea9, R}, - {0x10eab, 0x10eac, NSM}, - {0x10ead, 0x10ead, R}, - {0x10eb0, 0x10eb1, R}, - {0x10f00, 0x10f27, R}, - {0x10f30, 0x10f45, AL}, - {0x10f46, 0x10f50, NSM}, - {0x10f51, 0x10f59, AL}, - {0x10f70, 0x10f81, R}, - {0x10f82, 0x10f85, NSM}, - {0x10f86, 0x10f89, R}, - {0x10fb0, 0x10fcb, R}, - {0x10fe0, 0x10ff6, R}, - {0x11000, 0x11000, L}, - {0x11001, 0x11001, NSM}, - {0x11002, 0x11037, L}, - {0x11038, 0x11046, NSM}, - {0x11047, 0x1104d, L}, - {0x11066, 0x1106f, L}, - {0x11070, 0x11070, NSM}, - {0x11071, 0x11072, L}, - {0x11073, 0x11074, NSM}, - {0x11075, 0x11075, L}, - {0x1107f, 0x11081, NSM}, - {0x11082, 0x110b2, L}, - {0x110b3, 0x110b6, NSM}, - {0x110b7, 0x110b8, L}, - {0x110b9, 0x110ba, NSM}, - {0x110bb, 0x110c1, L}, - {0x110c2, 0x110c2, NSM}, - {0x110cd, 0x110cd, L}, - {0x110d0, 0x110e8, L}, - {0x110f0, 0x110f9, L}, - {0x11100, 0x11102, NSM}, - {0x11103, 0x11126, L}, - {0x11127, 0x1112b, NSM}, - {0x1112c, 0x1112c, L}, - {0x1112d, 0x11134, NSM}, - {0x11136, 0x11147, L}, - {0x11150, 0x11172, L}, - {0x11173, 0x11173, NSM}, - {0x11174, 0x11176, L}, - {0x11180, 0x11181, NSM}, - {0x11182, 0x111b5, L}, - {0x111b6, 0x111be, NSM}, - {0x111bf, 0x111c8, L}, - {0x111c9, 0x111cc, NSM}, - {0x111cd, 0x111ce, L}, - {0x111cf, 0x111cf, NSM}, - {0x111d0, 0x111df, L}, - {0x111e1, 0x111f4, L}, - {0x11200, 0x11211, L}, - {0x11213, 0x1122e, L}, - {0x1122f, 0x11231, NSM}, - {0x11232, 0x11233, L}, - {0x11234, 0x11234, NSM}, - {0x11235, 0x11235, L}, - {0x11236, 0x11237, NSM}, - {0x11238, 0x1123d, L}, - {0x1123e, 0x1123e, NSM}, - {0x11280, 0x11286, L}, - {0x11288, 0x11288, L}, - {0x1128a, 0x1128d, L}, - {0x1128f, 0x1129d, L}, - {0x1129f, 0x112a9, L}, - {0x112b0, 0x112de, L}, - {0x112df, 0x112df, NSM}, - {0x112e0, 0x112e2, L}, - {0x112e3, 0x112ea, NSM}, - {0x112f0, 0x112f9, L}, - {0x11300, 0x11301, NSM}, - {0x11302, 0x11303, L}, - {0x11305, 0x1130c, L}, - {0x1130f, 0x11310, L}, - {0x11313, 0x11328, L}, - {0x1132a, 0x11330, L}, - {0x11332, 0x11333, L}, - {0x11335, 0x11339, L}, - {0x1133b, 0x1133c, NSM}, - {0x1133d, 0x1133f, L}, - {0x11340, 0x11340, NSM}, - {0x11341, 0x11344, L}, - {0x11347, 0x11348, L}, - {0x1134b, 0x1134d, L}, - {0x11350, 0x11350, L}, - {0x11357, 0x11357, L}, - {0x1135d, 0x11363, L}, - {0x11366, 0x1136c, NSM}, - {0x11370, 0x11374, NSM}, - {0x11400, 0x11437, L}, - {0x11438, 0x1143f, NSM}, - {0x11440, 0x11441, L}, - {0x11442, 0x11444, NSM}, - {0x11445, 0x11445, L}, - {0x11446, 0x11446, NSM}, - {0x11447, 0x1145b, L}, - {0x1145d, 0x1145d, L}, - {0x1145e, 0x1145e, NSM}, - {0x1145f, 0x11461, L}, - {0x11480, 0x114b2, L}, - {0x114b3, 0x114b8, NSM}, - {0x114b9, 0x114b9, L}, - {0x114ba, 0x114ba, NSM}, - {0x114bb, 0x114be, L}, - {0x114bf, 0x114c0, NSM}, - {0x114c1, 0x114c1, L}, - {0x114c2, 0x114c3, NSM}, - {0x114c4, 0x114c7, L}, - {0x114d0, 0x114d9, L}, - {0x11580, 0x115b1, L}, - {0x115b2, 0x115b5, NSM}, - {0x115b8, 0x115bb, L}, - {0x115bc, 0x115bd, NSM}, - {0x115be, 0x115be, L}, - {0x115bf, 0x115c0, NSM}, - {0x115c1, 0x115db, L}, - {0x115dc, 0x115dd, NSM}, - {0x11600, 0x11632, L}, - {0x11633, 0x1163a, NSM}, - {0x1163b, 0x1163c, L}, - {0x1163d, 0x1163d, NSM}, - {0x1163e, 0x1163e, L}, - {0x1163f, 0x11640, NSM}, - {0x11641, 0x11644, L}, - {0x11650, 0x11659, L}, - {0x11680, 0x116aa, L}, - {0x116ab, 0x116ab, NSM}, - {0x116ac, 0x116ac, L}, - {0x116ad, 0x116ad, NSM}, - {0x116ae, 0x116af, L}, - {0x116b0, 0x116b5, NSM}, - {0x116b6, 0x116b6, L}, - {0x116b7, 0x116b7, NSM}, - {0x116b8, 0x116b9, L}, - {0x116c0, 0x116c9, L}, - {0x11700, 0x1171a, L}, - {0x1171d, 0x1171f, NSM}, - {0x11720, 0x11721, L}, - {0x11722, 0x11725, NSM}, - {0x11726, 0x11726, L}, - {0x11727, 0x1172b, NSM}, - {0x11730, 0x11746, L}, - {0x11800, 0x1182e, L}, - {0x1182f, 0x11837, NSM}, - {0x11838, 0x11838, L}, - {0x11839, 0x1183a, NSM}, - {0x1183b, 0x1183b, L}, - {0x118a0, 0x118f2, L}, - {0x118ff, 0x11906, L}, - {0x11909, 0x11909, L}, - {0x1190c, 0x11913, L}, - {0x11915, 0x11916, L}, - {0x11918, 0x11935, L}, - {0x11937, 0x11938, L}, - {0x1193b, 0x1193c, NSM}, - {0x1193d, 0x1193d, L}, - {0x1193e, 0x1193e, NSM}, - {0x1193f, 0x11942, L}, - {0x11943, 0x11943, NSM}, - {0x11944, 0x11946, L}, - {0x11950, 0x11959, L}, - {0x119a0, 0x119a7, L}, - {0x119aa, 0x119d3, L}, - {0x119d4, 0x119d7, NSM}, - {0x119da, 0x119db, NSM}, - {0x119dc, 0x119df, L}, - {0x119e0, 0x119e0, NSM}, - {0x119e1, 0x119e4, L}, - {0x11a00, 0x11a00, L}, - {0x11a01, 0x11a06, NSM}, - {0x11a07, 0x11a08, L}, - {0x11a09, 0x11a0a, NSM}, - {0x11a0b, 0x11a32, L}, - {0x11a33, 0x11a38, NSM}, - {0x11a39, 0x11a3a, L}, - {0x11a3b, 0x11a3e, NSM}, - {0x11a3f, 0x11a46, L}, - {0x11a47, 0x11a47, NSM}, - {0x11a50, 0x11a50, L}, - {0x11a51, 0x11a56, NSM}, - {0x11a57, 0x11a58, L}, - {0x11a59, 0x11a5b, NSM}, - {0x11a5c, 0x11a89, L}, - {0x11a8a, 0x11a96, NSM}, - {0x11a97, 0x11a97, L}, - {0x11a98, 0x11a99, NSM}, - {0x11a9a, 0x11aa2, L}, - {0x11ab0, 0x11af8, L}, - {0x11c00, 0x11c08, L}, - {0x11c0a, 0x11c2f, L}, - {0x11c30, 0x11c36, NSM}, - {0x11c38, 0x11c3d, NSM}, - {0x11c3e, 0x11c45, L}, - {0x11c50, 0x11c6c, L}, - {0x11c70, 0x11c8f, L}, - {0x11c92, 0x11ca7, NSM}, - {0x11ca9, 0x11ca9, L}, - {0x11caa, 0x11cb0, NSM}, - {0x11cb1, 0x11cb1, L}, - {0x11cb2, 0x11cb3, NSM}, - {0x11cb4, 0x11cb4, L}, - {0x11cb5, 0x11cb6, NSM}, - {0x11d00, 0x11d06, L}, - {0x11d08, 0x11d09, L}, - {0x11d0b, 0x11d30, L}, - {0x11d31, 0x11d36, NSM}, - {0x11d3a, 0x11d3a, NSM}, - {0x11d3c, 0x11d3d, NSM}, - {0x11d3f, 0x11d45, NSM}, - {0x11d46, 0x11d46, L}, - {0x11d47, 0x11d47, NSM}, - {0x11d50, 0x11d59, L}, - {0x11d60, 0x11d65, L}, - {0x11d67, 0x11d68, L}, - {0x11d6a, 0x11d8e, L}, - {0x11d90, 0x11d91, NSM}, - {0x11d93, 0x11d94, L}, - {0x11d95, 0x11d95, NSM}, - {0x11d96, 0x11d96, L}, - {0x11d97, 0x11d97, NSM}, - {0x11d98, 0x11d98, L}, - {0x11da0, 0x11da9, L}, - {0x11ee0, 0x11ef2, L}, - {0x11ef3, 0x11ef4, NSM}, - {0x11ef5, 0x11ef8, L}, - {0x11fb0, 0x11fb0, L}, - {0x11fc0, 0x11fd4, L}, - {0x11fdd, 0x11fe0, ET}, - {0x11fff, 0x12399, L}, - {0x12400, 0x1246e, L}, - {0x12470, 0x12474, L}, - {0x12480, 0x12543, L}, - {0x12f90, 0x12ff2, L}, - {0x13000, 0x1342e, L}, - {0x13430, 0x13438, L}, - {0x14400, 0x14646, L}, - {0x16800, 0x16a38, L}, - {0x16a40, 0x16a5e, L}, - {0x16a60, 0x16a69, L}, - {0x16a6e, 0x16abe, L}, - {0x16ac0, 0x16ac9, L}, - {0x16ad0, 0x16aed, L}, - {0x16af0, 0x16af4, NSM}, - {0x16af5, 0x16af5, L}, - {0x16b00, 0x16b2f, L}, - {0x16b30, 0x16b36, NSM}, - {0x16b37, 0x16b45, L}, - {0x16b50, 0x16b59, L}, - {0x16b5b, 0x16b61, L}, - {0x16b63, 0x16b77, L}, - {0x16b7d, 0x16b8f, L}, - {0x16e40, 0x16e9a, L}, - {0x16f00, 0x16f4a, L}, - {0x16f4f, 0x16f4f, NSM}, - {0x16f50, 0x16f87, L}, - {0x16f8f, 0x16f92, NSM}, - {0x16f93, 0x16f9f, L}, - {0x16fe0, 0x16fe1, L}, - {0x16fe3, 0x16fe3, L}, - {0x16fe4, 0x16fe4, NSM}, - {0x16ff0, 0x16ff1, L}, - {0x17000, 0x187f7, L}, - {0x18800, 0x18cd5, L}, - {0x18d00, 0x18d08, L}, - {0x1aff0, 0x1aff3, L}, - {0x1aff5, 0x1affb, L}, - {0x1affd, 0x1affe, L}, - {0x1b000, 0x1b122, L}, - {0x1b150, 0x1b152, L}, - {0x1b164, 0x1b167, L}, - {0x1b170, 0x1b2fb, L}, - {0x1bc00, 0x1bc6a, L}, - {0x1bc70, 0x1bc7c, L}, - {0x1bc80, 0x1bc88, L}, - {0x1bc90, 0x1bc99, L}, - {0x1bc9c, 0x1bc9c, L}, - {0x1bc9d, 0x1bc9e, NSM}, - {0x1bc9f, 0x1bc9f, L}, - {0x1bca0, 0x1bca3, BN}, - {0x1cf00, 0x1cf2d, NSM}, - {0x1cf30, 0x1cf46, NSM}, - {0x1cf50, 0x1cfc3, L}, - {0x1d000, 0x1d0f5, L}, - {0x1d100, 0x1d126, L}, - {0x1d129, 0x1d166, L}, - {0x1d167, 0x1d169, NSM}, - {0x1d16a, 0x1d172, L}, - {0x1d173, 0x1d17a, BN}, - {0x1d17b, 0x1d182, NSM}, - {0x1d183, 0x1d184, L}, - {0x1d185, 0x1d18b, NSM}, - {0x1d18c, 0x1d1a9, L}, - {0x1d1aa, 0x1d1ad, NSM}, - {0x1d1ae, 0x1d1e8, L}, - {0x1d242, 0x1d244, NSM}, - {0x1d2e0, 0x1d2f3, L}, - {0x1d360, 0x1d378, L}, - {0x1d400, 0x1d454, L}, - {0x1d456, 0x1d49c, L}, - {0x1d49e, 0x1d49f, L}, - {0x1d4a2, 0x1d4a2, L}, - {0x1d4a5, 0x1d4a6, L}, - {0x1d4a9, 0x1d4ac, L}, - {0x1d4ae, 0x1d4b9, L}, - {0x1d4bb, 0x1d4bb, L}, - {0x1d4bd, 0x1d4c3, L}, - {0x1d4c5, 0x1d505, L}, - {0x1d507, 0x1d50a, L}, - {0x1d50d, 0x1d514, L}, - {0x1d516, 0x1d51c, L}, - {0x1d51e, 0x1d539, L}, - {0x1d53b, 0x1d53e, L}, - {0x1d540, 0x1d544, L}, - {0x1d546, 0x1d546, L}, - {0x1d54a, 0x1d550, L}, - {0x1d552, 0x1d6a5, L}, - {0x1d6a8, 0x1d6da, L}, - {0x1d6dc, 0x1d714, L}, - {0x1d716, 0x1d74e, L}, - {0x1d750, 0x1d788, L}, - {0x1d78a, 0x1d7c2, L}, - {0x1d7c4, 0x1d7cb, L}, - {0x1d7ce, 0x1d7ff, EN}, - {0x1d800, 0x1d9ff, L}, - {0x1da00, 0x1da36, NSM}, - {0x1da37, 0x1da3a, L}, - {0x1da3b, 0x1da6c, NSM}, - {0x1da6d, 0x1da74, L}, - {0x1da75, 0x1da75, NSM}, - {0x1da76, 0x1da83, L}, - {0x1da84, 0x1da84, NSM}, - {0x1da85, 0x1da8b, L}, - {0x1da9b, 0x1da9f, NSM}, - {0x1daa1, 0x1daaf, NSM}, - {0x1df00, 0x1df1e, L}, - {0x1e000, 0x1e006, NSM}, - {0x1e008, 0x1e018, NSM}, - {0x1e01b, 0x1e021, NSM}, - {0x1e023, 0x1e024, NSM}, - {0x1e026, 0x1e02a, NSM}, - {0x1e100, 0x1e12c, L}, - {0x1e130, 0x1e136, NSM}, - {0x1e137, 0x1e13d, L}, - {0x1e140, 0x1e149, L}, - {0x1e14e, 0x1e14f, L}, - {0x1e290, 0x1e2ad, L}, - {0x1e2ae, 0x1e2ae, NSM}, - {0x1e2c0, 0x1e2eb, L}, - {0x1e2ec, 0x1e2ef, NSM}, - {0x1e2f0, 0x1e2f9, L}, - {0x1e2ff, 0x1e2ff, ET}, - {0x1e7e0, 0x1e7e6, L}, - {0x1e7e8, 0x1e7eb, L}, - {0x1e7ed, 0x1e7ee, L}, - {0x1e7f0, 0x1e7fe, L}, - {0x1e800, 0x1e8c4, R}, - {0x1e8c7, 0x1e8cf, R}, - {0x1e8d0, 0x1e8d6, NSM}, - {0x1e900, 0x1e943, R}, - {0x1e944, 0x1e94a, NSM}, - {0x1e94b, 0x1e94b, R}, - {0x1e950, 0x1e959, R}, - {0x1e95e, 0x1e95f, R}, - {0x1ec71, 0x1ecb4, AL}, - {0x1ed01, 0x1ed3d, AL}, - {0x1ee00, 0x1ee03, AL}, - {0x1ee05, 0x1ee1f, AL}, - {0x1ee21, 0x1ee22, AL}, - {0x1ee24, 0x1ee24, AL}, - {0x1ee27, 0x1ee27, AL}, - {0x1ee29, 0x1ee32, AL}, - {0x1ee34, 0x1ee37, AL}, - {0x1ee39, 0x1ee39, AL}, - {0x1ee3b, 0x1ee3b, AL}, - {0x1ee42, 0x1ee42, AL}, - {0x1ee47, 0x1ee47, AL}, - {0x1ee49, 0x1ee49, AL}, - {0x1ee4b, 0x1ee4b, AL}, - {0x1ee4d, 0x1ee4f, AL}, - {0x1ee51, 0x1ee52, AL}, - {0x1ee54, 0x1ee54, AL}, - {0x1ee57, 0x1ee57, AL}, - {0x1ee59, 0x1ee59, AL}, - {0x1ee5b, 0x1ee5b, AL}, - {0x1ee5d, 0x1ee5d, AL}, - {0x1ee5f, 0x1ee5f, AL}, - {0x1ee61, 0x1ee62, AL}, - {0x1ee64, 0x1ee64, AL}, - {0x1ee67, 0x1ee6a, AL}, - {0x1ee6c, 0x1ee72, AL}, - {0x1ee74, 0x1ee77, AL}, - {0x1ee79, 0x1ee7c, AL}, - {0x1ee7e, 0x1ee7e, AL}, - {0x1ee80, 0x1ee89, AL}, - {0x1ee8b, 0x1ee9b, AL}, - {0x1eea1, 0x1eea3, AL}, - {0x1eea5, 0x1eea9, AL}, - {0x1eeab, 0x1eebb, AL}, - {0x1f100, 0x1f10a, EN}, - {0x1f110, 0x1f12e, L}, - {0x1f130, 0x1f169, L}, - {0x1f170, 0x1f1ac, L}, - {0x1f1e6, 0x1f202, L}, - {0x1f210, 0x1f23b, L}, - {0x1f240, 0x1f248, L}, - {0x1f250, 0x1f251, L}, - {0x1fbf0, 0x1fbf9, EN}, - {0x20000, 0x2a6df, L}, - {0x2a700, 0x2b738, L}, - {0x2b740, 0x2b81d, L}, - {0x2b820, 0x2cea1, L}, - {0x2ceb0, 0x2ebe0, L}, - {0x2f800, 0x2fa1d, L}, - {0x30000, 0x3134a, L}, - {0xe0001, 0xe0001, BN}, - {0xe0020, 0xe007f, BN}, - {0xe0100, 0xe01ef, NSM}, - {0xf0000, 0xffffd, L}, - {0x100000, 0x10fffd, L}, + #include "unicode/bidi_type.h" }; int i, j, k; @@ -1671,27 +357,6 @@ unsigned char bidi_getType(int ch) /* * Return the mirrored version of a glyph. - - * The data table in this function is constructed from the Unicode - * Character Database version 14.0.0, downloadable from unicode.org at - * the URL - * - * https://www.unicode.org/Public/14.0.0/ucd/ - * - * by the following fragment of Perl: - -perl -e ' - while (<<>>) { - chomp; s{\s}{}g; s{#.*$}{}; next unless /./; - @_ = split /;/, $_; - $src = hex $_[0]; $dst = hex $_[1]; - $m{$src}=$dst; $m{$dst}=$src; - } - for $src (sort {$a <=> $b} keys %m) { - printf " {0x%04x, 0x%04x},\n", $src, $m{$src}; - } -' BidiMirroring.txt - * * FIXME: there are also glyphs which the text rendering engine is * supposed to display left-right reflected, since no mirrored glyph @@ -1706,434 +371,7 @@ static unsigned mirror_glyph(unsigned int ch) static const struct { unsigned src, dst; } mirror_pairs[] = { - {0x0028, 0x0029}, - {0x0029, 0x0028}, - {0x003c, 0x003e}, - {0x003e, 0x003c}, - {0x005b, 0x005d}, - {0x005d, 0x005b}, - {0x007b, 0x007d}, - {0x007d, 0x007b}, - {0x00ab, 0x00bb}, - {0x00bb, 0x00ab}, - {0x0f3a, 0x0f3b}, - {0x0f3b, 0x0f3a}, - {0x0f3c, 0x0f3d}, - {0x0f3d, 0x0f3c}, - {0x169b, 0x169c}, - {0x169c, 0x169b}, - {0x2039, 0x203a}, - {0x203a, 0x2039}, - {0x2045, 0x2046}, - {0x2046, 0x2045}, - {0x207d, 0x207e}, - {0x207e, 0x207d}, - {0x208d, 0x208e}, - {0x208e, 0x208d}, - {0x2208, 0x220b}, - {0x2209, 0x220c}, - {0x220a, 0x220d}, - {0x220b, 0x2208}, - {0x220c, 0x2209}, - {0x220d, 0x220a}, - {0x2215, 0x29f5}, - {0x221f, 0x2bfe}, - {0x2220, 0x29a3}, - {0x2221, 0x299b}, - {0x2222, 0x29a0}, - {0x2224, 0x2aee}, - {0x223c, 0x223d}, - {0x223d, 0x223c}, - {0x2243, 0x22cd}, - {0x2245, 0x224c}, - {0x224c, 0x2245}, - {0x2252, 0x2253}, - {0x2253, 0x2252}, - {0x2254, 0x2255}, - {0x2255, 0x2254}, - {0x2264, 0x2265}, - {0x2265, 0x2264}, - {0x2266, 0x2267}, - {0x2267, 0x2266}, - {0x2268, 0x2269}, - {0x2269, 0x2268}, - {0x226a, 0x226b}, - {0x226b, 0x226a}, - {0x226e, 0x226f}, - {0x226f, 0x226e}, - {0x2270, 0x2271}, - {0x2271, 0x2270}, - {0x2272, 0x2273}, - {0x2273, 0x2272}, - {0x2274, 0x2275}, - {0x2275, 0x2274}, - {0x2276, 0x2277}, - {0x2277, 0x2276}, - {0x2278, 0x2279}, - {0x2279, 0x2278}, - {0x227a, 0x227b}, - {0x227b, 0x227a}, - {0x227c, 0x227d}, - {0x227d, 0x227c}, - {0x227e, 0x227f}, - {0x227f, 0x227e}, - {0x2280, 0x2281}, - {0x2281, 0x2280}, - {0x2282, 0x2283}, - {0x2283, 0x2282}, - {0x2284, 0x2285}, - {0x2285, 0x2284}, - {0x2286, 0x2287}, - {0x2287, 0x2286}, - {0x2288, 0x2289}, - {0x2289, 0x2288}, - {0x228a, 0x228b}, - {0x228b, 0x228a}, - {0x228f, 0x2290}, - {0x2290, 0x228f}, - {0x2291, 0x2292}, - {0x2292, 0x2291}, - {0x2298, 0x29b8}, - {0x22a2, 0x22a3}, - {0x22a3, 0x22a2}, - {0x22a6, 0x2ade}, - {0x22a8, 0x2ae4}, - {0x22a9, 0x2ae3}, - {0x22ab, 0x2ae5}, - {0x22b0, 0x22b1}, - {0x22b1, 0x22b0}, - {0x22b2, 0x22b3}, - {0x22b3, 0x22b2}, - {0x22b4, 0x22b5}, - {0x22b5, 0x22b4}, - {0x22b6, 0x22b7}, - {0x22b7, 0x22b6}, - {0x22b8, 0x27dc}, - {0x22c9, 0x22ca}, - {0x22ca, 0x22c9}, - {0x22cb, 0x22cc}, - {0x22cc, 0x22cb}, - {0x22cd, 0x2243}, - {0x22d0, 0x22d1}, - {0x22d1, 0x22d0}, - {0x22d6, 0x22d7}, - {0x22d7, 0x22d6}, - {0x22d8, 0x22d9}, - {0x22d9, 0x22d8}, - {0x22da, 0x22db}, - {0x22db, 0x22da}, - {0x22dc, 0x22dd}, - {0x22dd, 0x22dc}, - {0x22de, 0x22df}, - {0x22df, 0x22de}, - {0x22e0, 0x22e1}, - {0x22e1, 0x22e0}, - {0x22e2, 0x22e3}, - {0x22e3, 0x22e2}, - {0x22e4, 0x22e5}, - {0x22e5, 0x22e4}, - {0x22e6, 0x22e7}, - {0x22e7, 0x22e6}, - {0x22e8, 0x22e9}, - {0x22e9, 0x22e8}, - {0x22ea, 0x22eb}, - {0x22eb, 0x22ea}, - {0x22ec, 0x22ed}, - {0x22ed, 0x22ec}, - {0x22f0, 0x22f1}, - {0x22f1, 0x22f0}, - {0x22f2, 0x22fa}, - {0x22f3, 0x22fb}, - {0x22f4, 0x22fc}, - {0x22f6, 0x22fd}, - {0x22f7, 0x22fe}, - {0x22fa, 0x22f2}, - {0x22fb, 0x22f3}, - {0x22fc, 0x22f4}, - {0x22fd, 0x22f6}, - {0x22fe, 0x22f7}, - {0x2308, 0x2309}, - {0x2309, 0x2308}, - {0x230a, 0x230b}, - {0x230b, 0x230a}, - {0x2329, 0x232a}, - {0x232a, 0x2329}, - {0x2768, 0x2769}, - {0x2769, 0x2768}, - {0x276a, 0x276b}, - {0x276b, 0x276a}, - {0x276c, 0x276d}, - {0x276d, 0x276c}, - {0x276e, 0x276f}, - {0x276f, 0x276e}, - {0x2770, 0x2771}, - {0x2771, 0x2770}, - {0x2772, 0x2773}, - {0x2773, 0x2772}, - {0x2774, 0x2775}, - {0x2775, 0x2774}, - {0x27c3, 0x27c4}, - {0x27c4, 0x27c3}, - {0x27c5, 0x27c6}, - {0x27c6, 0x27c5}, - {0x27c8, 0x27c9}, - {0x27c9, 0x27c8}, - {0x27cb, 0x27cd}, - {0x27cd, 0x27cb}, - {0x27d5, 0x27d6}, - {0x27d6, 0x27d5}, - {0x27dc, 0x22b8}, - {0x27dd, 0x27de}, - {0x27de, 0x27dd}, - {0x27e2, 0x27e3}, - {0x27e3, 0x27e2}, - {0x27e4, 0x27e5}, - {0x27e5, 0x27e4}, - {0x27e6, 0x27e7}, - {0x27e7, 0x27e6}, - {0x27e8, 0x27e9}, - {0x27e9, 0x27e8}, - {0x27ea, 0x27eb}, - {0x27eb, 0x27ea}, - {0x27ec, 0x27ed}, - {0x27ed, 0x27ec}, - {0x27ee, 0x27ef}, - {0x27ef, 0x27ee}, - {0x2983, 0x2984}, - {0x2984, 0x2983}, - {0x2985, 0x2986}, - {0x2986, 0x2985}, - {0x2987, 0x2988}, - {0x2988, 0x2987}, - {0x2989, 0x298a}, - {0x298a, 0x2989}, - {0x298b, 0x298c}, - {0x298c, 0x298b}, - {0x298d, 0x2990}, - {0x298e, 0x298f}, - {0x298f, 0x298e}, - {0x2990, 0x298d}, - {0x2991, 0x2992}, - {0x2992, 0x2991}, - {0x2993, 0x2994}, - {0x2994, 0x2993}, - {0x2995, 0x2996}, - {0x2996, 0x2995}, - {0x2997, 0x2998}, - {0x2998, 0x2997}, - {0x299b, 0x2221}, - {0x29a0, 0x2222}, - {0x29a3, 0x2220}, - {0x29a4, 0x29a5}, - {0x29a5, 0x29a4}, - {0x29a8, 0x29a9}, - {0x29a9, 0x29a8}, - {0x29aa, 0x29ab}, - {0x29ab, 0x29aa}, - {0x29ac, 0x29ad}, - {0x29ad, 0x29ac}, - {0x29ae, 0x29af}, - {0x29af, 0x29ae}, - {0x29b8, 0x2298}, - {0x29c0, 0x29c1}, - {0x29c1, 0x29c0}, - {0x29c4, 0x29c5}, - {0x29c5, 0x29c4}, - {0x29cf, 0x29d0}, - {0x29d0, 0x29cf}, - {0x29d1, 0x29d2}, - {0x29d2, 0x29d1}, - {0x29d4, 0x29d5}, - {0x29d5, 0x29d4}, - {0x29d8, 0x29d9}, - {0x29d9, 0x29d8}, - {0x29da, 0x29db}, - {0x29db, 0x29da}, - {0x29e8, 0x29e9}, - {0x29e9, 0x29e8}, - {0x29f5, 0x2215}, - {0x29f8, 0x29f9}, - {0x29f9, 0x29f8}, - {0x29fc, 0x29fd}, - {0x29fd, 0x29fc}, - {0x2a2b, 0x2a2c}, - {0x2a2c, 0x2a2b}, - {0x2a2d, 0x2a2e}, - {0x2a2e, 0x2a2d}, - {0x2a34, 0x2a35}, - {0x2a35, 0x2a34}, - {0x2a3c, 0x2a3d}, - {0x2a3d, 0x2a3c}, - {0x2a64, 0x2a65}, - {0x2a65, 0x2a64}, - {0x2a79, 0x2a7a}, - {0x2a7a, 0x2a79}, - {0x2a7b, 0x2a7c}, - {0x2a7c, 0x2a7b}, - {0x2a7d, 0x2a7e}, - {0x2a7e, 0x2a7d}, - {0x2a7f, 0x2a80}, - {0x2a80, 0x2a7f}, - {0x2a81, 0x2a82}, - {0x2a82, 0x2a81}, - {0x2a83, 0x2a84}, - {0x2a84, 0x2a83}, - {0x2a85, 0x2a86}, - {0x2a86, 0x2a85}, - {0x2a87, 0x2a88}, - {0x2a88, 0x2a87}, - {0x2a89, 0x2a8a}, - {0x2a8a, 0x2a89}, - {0x2a8b, 0x2a8c}, - {0x2a8c, 0x2a8b}, - {0x2a8d, 0x2a8e}, - {0x2a8e, 0x2a8d}, - {0x2a8f, 0x2a90}, - {0x2a90, 0x2a8f}, - {0x2a91, 0x2a92}, - {0x2a92, 0x2a91}, - {0x2a93, 0x2a94}, - {0x2a94, 0x2a93}, - {0x2a95, 0x2a96}, - {0x2a96, 0x2a95}, - {0x2a97, 0x2a98}, - {0x2a98, 0x2a97}, - {0x2a99, 0x2a9a}, - {0x2a9a, 0x2a99}, - {0x2a9b, 0x2a9c}, - {0x2a9c, 0x2a9b}, - {0x2a9d, 0x2a9e}, - {0x2a9e, 0x2a9d}, - {0x2a9f, 0x2aa0}, - {0x2aa0, 0x2a9f}, - {0x2aa1, 0x2aa2}, - {0x2aa2, 0x2aa1}, - {0x2aa6, 0x2aa7}, - {0x2aa7, 0x2aa6}, - {0x2aa8, 0x2aa9}, - {0x2aa9, 0x2aa8}, - {0x2aaa, 0x2aab}, - {0x2aab, 0x2aaa}, - {0x2aac, 0x2aad}, - {0x2aad, 0x2aac}, - {0x2aaf, 0x2ab0}, - {0x2ab0, 0x2aaf}, - {0x2ab1, 0x2ab2}, - {0x2ab2, 0x2ab1}, - {0x2ab3, 0x2ab4}, - {0x2ab4, 0x2ab3}, - {0x2ab5, 0x2ab6}, - {0x2ab6, 0x2ab5}, - {0x2ab7, 0x2ab8}, - {0x2ab8, 0x2ab7}, - {0x2ab9, 0x2aba}, - {0x2aba, 0x2ab9}, - {0x2abb, 0x2abc}, - {0x2abc, 0x2abb}, - {0x2abd, 0x2abe}, - {0x2abe, 0x2abd}, - {0x2abf, 0x2ac0}, - {0x2ac0, 0x2abf}, - {0x2ac1, 0x2ac2}, - {0x2ac2, 0x2ac1}, - {0x2ac3, 0x2ac4}, - {0x2ac4, 0x2ac3}, - {0x2ac5, 0x2ac6}, - {0x2ac6, 0x2ac5}, - {0x2ac7, 0x2ac8}, - {0x2ac8, 0x2ac7}, - {0x2ac9, 0x2aca}, - {0x2aca, 0x2ac9}, - {0x2acb, 0x2acc}, - {0x2acc, 0x2acb}, - {0x2acd, 0x2ace}, - {0x2ace, 0x2acd}, - {0x2acf, 0x2ad0}, - {0x2ad0, 0x2acf}, - {0x2ad1, 0x2ad2}, - {0x2ad2, 0x2ad1}, - {0x2ad3, 0x2ad4}, - {0x2ad4, 0x2ad3}, - {0x2ad5, 0x2ad6}, - {0x2ad6, 0x2ad5}, - {0x2ade, 0x22a6}, - {0x2ae3, 0x22a9}, - {0x2ae4, 0x22a8}, - {0x2ae5, 0x22ab}, - {0x2aec, 0x2aed}, - {0x2aed, 0x2aec}, - {0x2aee, 0x2224}, - {0x2af7, 0x2af8}, - {0x2af8, 0x2af7}, - {0x2af9, 0x2afa}, - {0x2afa, 0x2af9}, - {0x2bfe, 0x221f}, - {0x2e02, 0x2e03}, - {0x2e03, 0x2e02}, - {0x2e04, 0x2e05}, - {0x2e05, 0x2e04}, - {0x2e09, 0x2e0a}, - {0x2e0a, 0x2e09}, - {0x2e0c, 0x2e0d}, - {0x2e0d, 0x2e0c}, - {0x2e1c, 0x2e1d}, - {0x2e1d, 0x2e1c}, - {0x2e20, 0x2e21}, - {0x2e21, 0x2e20}, - {0x2e22, 0x2e23}, - {0x2e23, 0x2e22}, - {0x2e24, 0x2e25}, - {0x2e25, 0x2e24}, - {0x2e26, 0x2e27}, - {0x2e27, 0x2e26}, - {0x2e28, 0x2e29}, - {0x2e29, 0x2e28}, - {0x2e55, 0x2e56}, - {0x2e56, 0x2e55}, - {0x2e57, 0x2e58}, - {0x2e58, 0x2e57}, - {0x2e59, 0x2e5a}, - {0x2e5a, 0x2e59}, - {0x2e5b, 0x2e5c}, - {0x2e5c, 0x2e5b}, - {0x3008, 0x3009}, - {0x3009, 0x3008}, - {0x300a, 0x300b}, - {0x300b, 0x300a}, - {0x300c, 0x300d}, - {0x300d, 0x300c}, - {0x300e, 0x300f}, - {0x300f, 0x300e}, - {0x3010, 0x3011}, - {0x3011, 0x3010}, - {0x3014, 0x3015}, - {0x3015, 0x3014}, - {0x3016, 0x3017}, - {0x3017, 0x3016}, - {0x3018, 0x3019}, - {0x3019, 0x3018}, - {0x301a, 0x301b}, - {0x301b, 0x301a}, - {0xfe59, 0xfe5a}, - {0xfe5a, 0xfe59}, - {0xfe5b, 0xfe5c}, - {0xfe5c, 0xfe5b}, - {0xfe5d, 0xfe5e}, - {0xfe5e, 0xfe5d}, - {0xfe64, 0xfe65}, - {0xfe65, 0xfe64}, - {0xff08, 0xff09}, - {0xff09, 0xff08}, - {0xff1c, 0xff1e}, - {0xff1e, 0xff1c}, - {0xff3b, 0xff3d}, - {0xff3d, 0xff3b}, - {0xff5b, 0xff5d}, - {0xff5d, 0xff5b}, - {0xff5f, 0xff60}, - {0xff60, 0xff5f}, - {0xff62, 0xff63}, - {0xff63, 0xff62}, + #include "unicode/bidi_mirror.h" }; int i, j, k; @@ -2157,41 +395,6 @@ static unsigned mirror_glyph(unsigned int ch) /* * Identify the bracket characters treated specially by bidi rule * BD19, and return their paired character(s). - * - * The data table in this function is constructed from the Unicode - * Character Database version 14.0.0, downloadable from unicode.org at - * the URL - * - * https://www.unicode.org/Public/14.0.0/ucd/ - * - * by the following fragment of Perl: - -perl -e ' - open BIDIBRACKETS, "<", $ARGV[0] or die; - while () { - chomp; s{\s}{}g; s{#.*$}{}; next unless /./; - @_ = split /;/, $_; - $src = hex $_[0]; $dst = hex $_[1]; $kind = $_[2]; - $m{$src}=[$kind, $dst]; - } - open UNICODEDATA, "<", $ARGV[1] or die; - while () { - chomp; @_ = split /;/, $_; - $src = hex $_[0]; next unless defined $m{$src}; - if ($_[5] =~ /^[0-9a-f]+$/i) { - $equiv = hex $_[5]; - $e{$src} = $equiv; - $e{$equiv} = $src; - } - } - for $src (sort {$a <=> $b} keys %m) { - ($kind, $dst) = @{$m{$src}}; - $equiv = 0 + $e{$dst}; - printf " {0x%04x, {0x%04x, 0x%04x, %s}},\n", $src, $dst, $equiv, - $kind eq "c" ? "BT_CLOSE" : "BT_OPEN"; - } -' BidiBrackets.txt UnicodeData.txt - */ typedef enum { BT_NONE, BT_OPEN, BT_CLOSE } BracketType; typedef struct BracketTypeData { @@ -2204,134 +407,7 @@ static BracketTypeData bracket_type(unsigned int ch) unsigned src; BracketTypeData payload; } bracket_pairs[] = { - {0x0028, {0x0029, 0x0000, BT_OPEN}}, - {0x0029, {0x0028, 0x0000, BT_CLOSE}}, - {0x005b, {0x005d, 0x0000, BT_OPEN}}, - {0x005d, {0x005b, 0x0000, BT_CLOSE}}, - {0x007b, {0x007d, 0x0000, BT_OPEN}}, - {0x007d, {0x007b, 0x0000, BT_CLOSE}}, - {0x0f3a, {0x0f3b, 0x0000, BT_OPEN}}, - {0x0f3b, {0x0f3a, 0x0000, BT_CLOSE}}, - {0x0f3c, {0x0f3d, 0x0000, BT_OPEN}}, - {0x0f3d, {0x0f3c, 0x0000, BT_CLOSE}}, - {0x169b, {0x169c, 0x0000, BT_OPEN}}, - {0x169c, {0x169b, 0x0000, BT_CLOSE}}, - {0x2045, {0x2046, 0x0000, BT_OPEN}}, - {0x2046, {0x2045, 0x0000, BT_CLOSE}}, - {0x207d, {0x207e, 0x0000, BT_OPEN}}, - {0x207e, {0x207d, 0x0000, BT_CLOSE}}, - {0x208d, {0x208e, 0x0000, BT_OPEN}}, - {0x208e, {0x208d, 0x0000, BT_CLOSE}}, - {0x2308, {0x2309, 0x0000, BT_OPEN}}, - {0x2309, {0x2308, 0x0000, BT_CLOSE}}, - {0x230a, {0x230b, 0x0000, BT_OPEN}}, - {0x230b, {0x230a, 0x0000, BT_CLOSE}}, - {0x2329, {0x232a, 0x3009, BT_OPEN}}, - {0x232a, {0x2329, 0x3008, BT_CLOSE}}, - {0x2768, {0x2769, 0x0000, BT_OPEN}}, - {0x2769, {0x2768, 0x0000, BT_CLOSE}}, - {0x276a, {0x276b, 0x0000, BT_OPEN}}, - {0x276b, {0x276a, 0x0000, BT_CLOSE}}, - {0x276c, {0x276d, 0x0000, BT_OPEN}}, - {0x276d, {0x276c, 0x0000, BT_CLOSE}}, - {0x276e, {0x276f, 0x0000, BT_OPEN}}, - {0x276f, {0x276e, 0x0000, BT_CLOSE}}, - {0x2770, {0x2771, 0x0000, BT_OPEN}}, - {0x2771, {0x2770, 0x0000, BT_CLOSE}}, - {0x2772, {0x2773, 0x0000, BT_OPEN}}, - {0x2773, {0x2772, 0x0000, BT_CLOSE}}, - {0x2774, {0x2775, 0x0000, BT_OPEN}}, - {0x2775, {0x2774, 0x0000, BT_CLOSE}}, - {0x27c5, {0x27c6, 0x0000, BT_OPEN}}, - {0x27c6, {0x27c5, 0x0000, BT_CLOSE}}, - {0x27e6, {0x27e7, 0x0000, BT_OPEN}}, - {0x27e7, {0x27e6, 0x0000, BT_CLOSE}}, - {0x27e8, {0x27e9, 0x0000, BT_OPEN}}, - {0x27e9, {0x27e8, 0x0000, BT_CLOSE}}, - {0x27ea, {0x27eb, 0x0000, BT_OPEN}}, - {0x27eb, {0x27ea, 0x0000, BT_CLOSE}}, - {0x27ec, {0x27ed, 0x0000, BT_OPEN}}, - {0x27ed, {0x27ec, 0x0000, BT_CLOSE}}, - {0x27ee, {0x27ef, 0x0000, BT_OPEN}}, - {0x27ef, {0x27ee, 0x0000, BT_CLOSE}}, - {0x2983, {0x2984, 0x0000, BT_OPEN}}, - {0x2984, {0x2983, 0x0000, BT_CLOSE}}, - {0x2985, {0x2986, 0x0000, BT_OPEN}}, - {0x2986, {0x2985, 0x0000, BT_CLOSE}}, - {0x2987, {0x2988, 0x0000, BT_OPEN}}, - {0x2988, {0x2987, 0x0000, BT_CLOSE}}, - {0x2989, {0x298a, 0x0000, BT_OPEN}}, - {0x298a, {0x2989, 0x0000, BT_CLOSE}}, - {0x298b, {0x298c, 0x0000, BT_OPEN}}, - {0x298c, {0x298b, 0x0000, BT_CLOSE}}, - {0x298d, {0x2990, 0x0000, BT_OPEN}}, - {0x298e, {0x298f, 0x0000, BT_CLOSE}}, - {0x298f, {0x298e, 0x0000, BT_OPEN}}, - {0x2990, {0x298d, 0x0000, BT_CLOSE}}, - {0x2991, {0x2992, 0x0000, BT_OPEN}}, - {0x2992, {0x2991, 0x0000, BT_CLOSE}}, - {0x2993, {0x2994, 0x0000, BT_OPEN}}, - {0x2994, {0x2993, 0x0000, BT_CLOSE}}, - {0x2995, {0x2996, 0x0000, BT_OPEN}}, - {0x2996, {0x2995, 0x0000, BT_CLOSE}}, - {0x2997, {0x2998, 0x0000, BT_OPEN}}, - {0x2998, {0x2997, 0x0000, BT_CLOSE}}, - {0x29d8, {0x29d9, 0x0000, BT_OPEN}}, - {0x29d9, {0x29d8, 0x0000, BT_CLOSE}}, - {0x29da, {0x29db, 0x0000, BT_OPEN}}, - {0x29db, {0x29da, 0x0000, BT_CLOSE}}, - {0x29fc, {0x29fd, 0x0000, BT_OPEN}}, - {0x29fd, {0x29fc, 0x0000, BT_CLOSE}}, - {0x2e22, {0x2e23, 0x0000, BT_OPEN}}, - {0x2e23, {0x2e22, 0x0000, BT_CLOSE}}, - {0x2e24, {0x2e25, 0x0000, BT_OPEN}}, - {0x2e25, {0x2e24, 0x0000, BT_CLOSE}}, - {0x2e26, {0x2e27, 0x0000, BT_OPEN}}, - {0x2e27, {0x2e26, 0x0000, BT_CLOSE}}, - {0x2e28, {0x2e29, 0x0000, BT_OPEN}}, - {0x2e29, {0x2e28, 0x0000, BT_CLOSE}}, - {0x2e55, {0x2e56, 0x0000, BT_OPEN}}, - {0x2e56, {0x2e55, 0x0000, BT_CLOSE}}, - {0x2e57, {0x2e58, 0x0000, BT_OPEN}}, - {0x2e58, {0x2e57, 0x0000, BT_CLOSE}}, - {0x2e59, {0x2e5a, 0x0000, BT_OPEN}}, - {0x2e5a, {0x2e59, 0x0000, BT_CLOSE}}, - {0x2e5b, {0x2e5c, 0x0000, BT_OPEN}}, - {0x2e5c, {0x2e5b, 0x0000, BT_CLOSE}}, - {0x3008, {0x3009, 0x232a, BT_OPEN}}, - {0x3009, {0x3008, 0x2329, BT_CLOSE}}, - {0x300a, {0x300b, 0x0000, BT_OPEN}}, - {0x300b, {0x300a, 0x0000, BT_CLOSE}}, - {0x300c, {0x300d, 0x0000, BT_OPEN}}, - {0x300d, {0x300c, 0x0000, BT_CLOSE}}, - {0x300e, {0x300f, 0x0000, BT_OPEN}}, - {0x300f, {0x300e, 0x0000, BT_CLOSE}}, - {0x3010, {0x3011, 0x0000, BT_OPEN}}, - {0x3011, {0x3010, 0x0000, BT_CLOSE}}, - {0x3014, {0x3015, 0x0000, BT_OPEN}}, - {0x3015, {0x3014, 0x0000, BT_CLOSE}}, - {0x3016, {0x3017, 0x0000, BT_OPEN}}, - {0x3017, {0x3016, 0x0000, BT_CLOSE}}, - {0x3018, {0x3019, 0x0000, BT_OPEN}}, - {0x3019, {0x3018, 0x0000, BT_CLOSE}}, - {0x301a, {0x301b, 0x0000, BT_OPEN}}, - {0x301b, {0x301a, 0x0000, BT_CLOSE}}, - {0xfe59, {0xfe5a, 0x0000, BT_OPEN}}, - {0xfe5a, {0xfe59, 0x0000, BT_CLOSE}}, - {0xfe5b, {0xfe5c, 0x0000, BT_OPEN}}, - {0xfe5c, {0xfe5b, 0x0000, BT_CLOSE}}, - {0xfe5d, {0xfe5e, 0x0000, BT_OPEN}}, - {0xfe5e, {0xfe5d, 0x0000, BT_CLOSE}}, - {0xff08, {0xff09, 0x0000, BT_OPEN}}, - {0xff09, {0xff08, 0x0000, BT_CLOSE}}, - {0xff3b, {0xff3d, 0x0000, BT_OPEN}}, - {0xff3d, {0xff3b, 0x0000, BT_CLOSE}}, - {0xff5b, {0xff5d, 0x0000, BT_OPEN}}, - {0xff5d, {0xff5b, 0x0000, BT_CLOSE}}, - {0xff5f, {0xff60, 0x0000, BT_OPEN}}, - {0xff60, {0xff5f, 0x0000, BT_CLOSE}}, - {0xff62, {0xff63, 0x0000, BT_OPEN}}, - {0xff63, {0xff62, 0x0000, BT_CLOSE}}, + #include "unicode/bidi_brackets.h" }; int i, j, k; diff --git a/unicode/ambiguous_wide_chars.h b/unicode/ambiguous_wide_chars.h new file mode 100644 index 00000000..13aa45d6 --- /dev/null +++ b/unicode/ambiguous_wide_chars.h @@ -0,0 +1,189 @@ +/* + * Autogenerated by read_ucd.py from The Unicode Standard 14.0.0 + * + * Identify Unicode characters that are width-ambiguous: some regimes + * regard them as occupying two adjacent character cells in a terminal, + * and others do not. + * + * Used by utils/wcwidth.c. + */ + +{0x00a1, 0x00a1}, +{0x00a4, 0x00a4}, +{0x00a7, 0x00a8}, +{0x00aa, 0x00aa}, +{0x00ad, 0x00ae}, +{0x00b0, 0x00b4}, +{0x00b6, 0x00ba}, +{0x00bc, 0x00bf}, +{0x00c6, 0x00c6}, +{0x00d0, 0x00d0}, +{0x00d7, 0x00d8}, +{0x00de, 0x00e1}, +{0x00e6, 0x00e6}, +{0x00e8, 0x00ea}, +{0x00ec, 0x00ed}, +{0x00f0, 0x00f0}, +{0x00f2, 0x00f3}, +{0x00f7, 0x00fa}, +{0x00fc, 0x00fc}, +{0x00fe, 0x00fe}, +{0x0101, 0x0101}, +{0x0111, 0x0111}, +{0x0113, 0x0113}, +{0x011b, 0x011b}, +{0x0126, 0x0127}, +{0x012b, 0x012b}, +{0x0131, 0x0133}, +{0x0138, 0x0138}, +{0x013f, 0x0142}, +{0x0144, 0x0144}, +{0x0148, 0x014b}, +{0x014d, 0x014d}, +{0x0152, 0x0153}, +{0x0166, 0x0167}, +{0x016b, 0x016b}, +{0x01ce, 0x01ce}, +{0x01d0, 0x01d0}, +{0x01d2, 0x01d2}, +{0x01d4, 0x01d4}, +{0x01d6, 0x01d6}, +{0x01d8, 0x01d8}, +{0x01da, 0x01da}, +{0x01dc, 0x01dc}, +{0x0251, 0x0251}, +{0x0261, 0x0261}, +{0x02c4, 0x02c4}, +{0x02c7, 0x02c7}, +{0x02c9, 0x02cb}, +{0x02cd, 0x02cd}, +{0x02d0, 0x02d0}, +{0x02d8, 0x02db}, +{0x02dd, 0x02dd}, +{0x02df, 0x02df}, +{0x0300, 0x036f}, +{0x0391, 0x03a1}, +{0x03a3, 0x03a9}, +{0x03b1, 0x03c1}, +{0x03c3, 0x03c9}, +{0x0401, 0x0401}, +{0x0410, 0x044f}, +{0x0451, 0x0451}, +{0x2010, 0x2010}, +{0x2013, 0x2016}, +{0x2018, 0x2019}, +{0x201c, 0x201d}, +{0x2020, 0x2022}, +{0x2024, 0x2027}, +{0x2030, 0x2030}, +{0x2032, 0x2033}, +{0x2035, 0x2035}, +{0x203b, 0x203b}, +{0x203e, 0x203e}, +{0x2074, 0x2074}, +{0x207f, 0x207f}, +{0x2081, 0x2084}, +{0x20ac, 0x20ac}, +{0x2103, 0x2103}, +{0x2105, 0x2105}, +{0x2109, 0x2109}, +{0x2113, 0x2113}, +{0x2116, 0x2116}, +{0x2121, 0x2122}, +{0x2126, 0x2126}, +{0x212b, 0x212b}, +{0x2153, 0x2154}, +{0x215b, 0x215e}, +{0x2160, 0x216b}, +{0x2170, 0x2179}, +{0x2189, 0x2189}, +{0x2190, 0x2199}, +{0x21b8, 0x21b9}, +{0x21d2, 0x21d2}, +{0x21d4, 0x21d4}, +{0x21e7, 0x21e7}, +{0x2200, 0x2200}, +{0x2202, 0x2203}, +{0x2207, 0x2208}, +{0x220b, 0x220b}, +{0x220f, 0x220f}, +{0x2211, 0x2211}, +{0x2215, 0x2215}, +{0x221a, 0x221a}, +{0x221d, 0x2220}, +{0x2223, 0x2223}, +{0x2225, 0x2225}, +{0x2227, 0x222c}, +{0x222e, 0x222e}, +{0x2234, 0x2237}, +{0x223c, 0x223d}, +{0x2248, 0x2248}, +{0x224c, 0x224c}, +{0x2252, 0x2252}, +{0x2260, 0x2261}, +{0x2264, 0x2267}, +{0x226a, 0x226b}, +{0x226e, 0x226f}, +{0x2282, 0x2283}, +{0x2286, 0x2287}, +{0x2295, 0x2295}, +{0x2299, 0x2299}, +{0x22a5, 0x22a5}, +{0x22bf, 0x22bf}, +{0x2312, 0x2312}, +{0x2460, 0x24e9}, +{0x24eb, 0x254b}, +{0x2550, 0x2573}, +{0x2580, 0x258f}, +{0x2592, 0x2595}, +{0x25a0, 0x25a1}, +{0x25a3, 0x25a9}, +{0x25b2, 0x25b3}, +{0x25b6, 0x25b7}, +{0x25bc, 0x25bd}, +{0x25c0, 0x25c1}, +{0x25c6, 0x25c8}, +{0x25cb, 0x25cb}, +{0x25ce, 0x25d1}, +{0x25e2, 0x25e5}, +{0x25ef, 0x25ef}, +{0x2605, 0x2606}, +{0x2609, 0x2609}, +{0x260e, 0x260f}, +{0x261c, 0x261c}, +{0x261e, 0x261e}, +{0x2640, 0x2640}, +{0x2642, 0x2642}, +{0x2660, 0x2661}, +{0x2663, 0x2665}, +{0x2667, 0x266a}, +{0x266c, 0x266d}, +{0x266f, 0x266f}, +{0x269e, 0x269f}, +{0x26bf, 0x26bf}, +{0x26c6, 0x26cd}, +{0x26cf, 0x26d3}, +{0x26d5, 0x26e1}, +{0x26e3, 0x26e3}, +{0x26e8, 0x26e9}, +{0x26eb, 0x26f1}, +{0x26f4, 0x26f4}, +{0x26f6, 0x26f9}, +{0x26fb, 0x26fc}, +{0x26fe, 0x26ff}, +{0x273d, 0x273d}, +{0x2776, 0x277f}, +{0x2b56, 0x2b59}, +{0x3248, 0x324f}, +{0xe000, 0xf8ff}, +{0xfe00, 0xfe0f}, +{0xfffd, 0xfffd}, +{0x1f100, 0x1f10a}, +{0x1f110, 0x1f12d}, +{0x1f130, 0x1f169}, +{0x1f170, 0x1f18d}, +{0x1f18f, 0x1f190}, +{0x1f19b, 0x1f1ac}, +{0xe0100, 0xe01ef}, +{0xf0000, 0xffffd}, +{0x100000, 0x10fffd}, diff --git a/unicode/bidi_brackets.h b/unicode/bidi_brackets.h new file mode 100644 index 00000000..f3a69d9f --- /dev/null +++ b/unicode/bidi_brackets.h @@ -0,0 +1,139 @@ +/* + * Autogenerated by read_ucd.py from The Unicode Standard 14.0.0 + * + * Identify Unicode characters that count as brackets for the purposes of + * bidirectional text layout. For each one, indicate whether it's an open + * or closed bracket, and identify up to two characters that can act as + * its counterpart. + * + * Used by terminal/bidi.c. + */ + +{0x0028, {0x0029, 0x0000, BT_OPEN}}, +{0x0029, {0x0028, 0x0000, BT_CLOSE}}, +{0x005b, {0x005d, 0x0000, BT_OPEN}}, +{0x005d, {0x005b, 0x0000, BT_CLOSE}}, +{0x007b, {0x007d, 0x0000, BT_OPEN}}, +{0x007d, {0x007b, 0x0000, BT_CLOSE}}, +{0x0f3a, {0x0f3b, 0x0000, BT_OPEN}}, +{0x0f3b, {0x0f3a, 0x0000, BT_CLOSE}}, +{0x0f3c, {0x0f3d, 0x0000, BT_OPEN}}, +{0x0f3d, {0x0f3c, 0x0000, BT_CLOSE}}, +{0x169b, {0x169c, 0x0000, BT_OPEN}}, +{0x169c, {0x169b, 0x0000, BT_CLOSE}}, +{0x2045, {0x2046, 0x0000, BT_OPEN}}, +{0x2046, {0x2045, 0x0000, BT_CLOSE}}, +{0x207d, {0x207e, 0x0000, BT_OPEN}}, +{0x207e, {0x207d, 0x0000, BT_CLOSE}}, +{0x208d, {0x208e, 0x0000, BT_OPEN}}, +{0x208e, {0x208d, 0x0000, BT_CLOSE}}, +{0x2308, {0x2309, 0x0000, BT_OPEN}}, +{0x2309, {0x2308, 0x0000, BT_CLOSE}}, +{0x230a, {0x230b, 0x0000, BT_OPEN}}, +{0x230b, {0x230a, 0x0000, BT_CLOSE}}, +{0x2329, {0x232a, 0x3009, BT_OPEN}}, +{0x232a, {0x2329, 0x3008, BT_CLOSE}}, +{0x2768, {0x2769, 0x0000, BT_OPEN}}, +{0x2769, {0x2768, 0x0000, BT_CLOSE}}, +{0x276a, {0x276b, 0x0000, BT_OPEN}}, +{0x276b, {0x276a, 0x0000, BT_CLOSE}}, +{0x276c, {0x276d, 0x0000, BT_OPEN}}, +{0x276d, {0x276c, 0x0000, BT_CLOSE}}, +{0x276e, {0x276f, 0x0000, BT_OPEN}}, +{0x276f, {0x276e, 0x0000, BT_CLOSE}}, +{0x2770, {0x2771, 0x0000, BT_OPEN}}, +{0x2771, {0x2770, 0x0000, BT_CLOSE}}, +{0x2772, {0x2773, 0x0000, BT_OPEN}}, +{0x2773, {0x2772, 0x0000, BT_CLOSE}}, +{0x2774, {0x2775, 0x0000, BT_OPEN}}, +{0x2775, {0x2774, 0x0000, BT_CLOSE}}, +{0x27c5, {0x27c6, 0x0000, BT_OPEN}}, +{0x27c6, {0x27c5, 0x0000, BT_CLOSE}}, +{0x27e6, {0x27e7, 0x0000, BT_OPEN}}, +{0x27e7, {0x27e6, 0x0000, BT_CLOSE}}, +{0x27e8, {0x27e9, 0x0000, BT_OPEN}}, +{0x27e9, {0x27e8, 0x0000, BT_CLOSE}}, +{0x27ea, {0x27eb, 0x0000, BT_OPEN}}, +{0x27eb, {0x27ea, 0x0000, BT_CLOSE}}, +{0x27ec, {0x27ed, 0x0000, BT_OPEN}}, +{0x27ed, {0x27ec, 0x0000, BT_CLOSE}}, +{0x27ee, {0x27ef, 0x0000, BT_OPEN}}, +{0x27ef, {0x27ee, 0x0000, BT_CLOSE}}, +{0x2983, {0x2984, 0x0000, BT_OPEN}}, +{0x2984, {0x2983, 0x0000, BT_CLOSE}}, +{0x2985, {0x2986, 0x0000, BT_OPEN}}, +{0x2986, {0x2985, 0x0000, BT_CLOSE}}, +{0x2987, {0x2988, 0x0000, BT_OPEN}}, +{0x2988, {0x2987, 0x0000, BT_CLOSE}}, +{0x2989, {0x298a, 0x0000, BT_OPEN}}, +{0x298a, {0x2989, 0x0000, BT_CLOSE}}, +{0x298b, {0x298c, 0x0000, BT_OPEN}}, +{0x298c, {0x298b, 0x0000, BT_CLOSE}}, +{0x298d, {0x2990, 0x0000, BT_OPEN}}, +{0x298e, {0x298f, 0x0000, BT_CLOSE}}, +{0x298f, {0x298e, 0x0000, BT_OPEN}}, +{0x2990, {0x298d, 0x0000, BT_CLOSE}}, +{0x2991, {0x2992, 0x0000, BT_OPEN}}, +{0x2992, {0x2991, 0x0000, BT_CLOSE}}, +{0x2993, {0x2994, 0x0000, BT_OPEN}}, +{0x2994, {0x2993, 0x0000, BT_CLOSE}}, +{0x2995, {0x2996, 0x0000, BT_OPEN}}, +{0x2996, {0x2995, 0x0000, BT_CLOSE}}, +{0x2997, {0x2998, 0x0000, BT_OPEN}}, +{0x2998, {0x2997, 0x0000, BT_CLOSE}}, +{0x29d8, {0x29d9, 0x0000, BT_OPEN}}, +{0x29d9, {0x29d8, 0x0000, BT_CLOSE}}, +{0x29da, {0x29db, 0x0000, BT_OPEN}}, +{0x29db, {0x29da, 0x0000, BT_CLOSE}}, +{0x29fc, {0x29fd, 0x0000, BT_OPEN}}, +{0x29fd, {0x29fc, 0x0000, BT_CLOSE}}, +{0x2e22, {0x2e23, 0x0000, BT_OPEN}}, +{0x2e23, {0x2e22, 0x0000, BT_CLOSE}}, +{0x2e24, {0x2e25, 0x0000, BT_OPEN}}, +{0x2e25, {0x2e24, 0x0000, BT_CLOSE}}, +{0x2e26, {0x2e27, 0x0000, BT_OPEN}}, +{0x2e27, {0x2e26, 0x0000, BT_CLOSE}}, +{0x2e28, {0x2e29, 0x0000, BT_OPEN}}, +{0x2e29, {0x2e28, 0x0000, BT_CLOSE}}, +{0x2e55, {0x2e56, 0x0000, BT_OPEN}}, +{0x2e56, {0x2e55, 0x0000, BT_CLOSE}}, +{0x2e57, {0x2e58, 0x0000, BT_OPEN}}, +{0x2e58, {0x2e57, 0x0000, BT_CLOSE}}, +{0x2e59, {0x2e5a, 0x0000, BT_OPEN}}, +{0x2e5a, {0x2e59, 0x0000, BT_CLOSE}}, +{0x2e5b, {0x2e5c, 0x0000, BT_OPEN}}, +{0x2e5c, {0x2e5b, 0x0000, BT_CLOSE}}, +{0x3008, {0x3009, 0x232a, BT_OPEN}}, +{0x3009, {0x3008, 0x2329, BT_CLOSE}}, +{0x300a, {0x300b, 0x0000, BT_OPEN}}, +{0x300b, {0x300a, 0x0000, BT_CLOSE}}, +{0x300c, {0x300d, 0x0000, BT_OPEN}}, +{0x300d, {0x300c, 0x0000, BT_CLOSE}}, +{0x300e, {0x300f, 0x0000, BT_OPEN}}, +{0x300f, {0x300e, 0x0000, BT_CLOSE}}, +{0x3010, {0x3011, 0x0000, BT_OPEN}}, +{0x3011, {0x3010, 0x0000, BT_CLOSE}}, +{0x3014, {0x3015, 0x0000, BT_OPEN}}, +{0x3015, {0x3014, 0x0000, BT_CLOSE}}, +{0x3016, {0x3017, 0x0000, BT_OPEN}}, +{0x3017, {0x3016, 0x0000, BT_CLOSE}}, +{0x3018, {0x3019, 0x0000, BT_OPEN}}, +{0x3019, {0x3018, 0x0000, BT_CLOSE}}, +{0x301a, {0x301b, 0x0000, BT_OPEN}}, +{0x301b, {0x301a, 0x0000, BT_CLOSE}}, +{0xfe59, {0xfe5a, 0x0000, BT_OPEN}}, +{0xfe5a, {0xfe59, 0x0000, BT_CLOSE}}, +{0xfe5b, {0xfe5c, 0x0000, BT_OPEN}}, +{0xfe5c, {0xfe5b, 0x0000, BT_CLOSE}}, +{0xfe5d, {0xfe5e, 0x0000, BT_OPEN}}, +{0xfe5e, {0xfe5d, 0x0000, BT_CLOSE}}, +{0xff08, {0xff09, 0x0000, BT_OPEN}}, +{0xff09, {0xff08, 0x0000, BT_CLOSE}}, +{0xff3b, {0xff3d, 0x0000, BT_OPEN}}, +{0xff3d, {0xff3b, 0x0000, BT_CLOSE}}, +{0xff5b, {0xff5d, 0x0000, BT_OPEN}}, +{0xff5d, {0xff5b, 0x0000, BT_CLOSE}}, +{0xff5f, {0xff60, 0x0000, BT_OPEN}}, +{0xff60, {0xff5f, 0x0000, BT_CLOSE}}, +{0xff62, {0xff63, 0x0000, BT_OPEN}}, +{0xff63, {0xff62, 0x0000, BT_CLOSE}}, diff --git a/unicode/bidi_mirror.h b/unicode/bidi_mirror.h new file mode 100644 index 00000000..6bba00b4 --- /dev/null +++ b/unicode/bidi_mirror.h @@ -0,0 +1,437 @@ +/* + * Autogenerated by read_ucd.py from The Unicode Standard 14.0.0 + * + * Map each Unicode character to its mirrored form when printing right to + * left. + * + * Used by terminal/bidi.c. + */ + +{0x0028, 0x0029}, +{0x0029, 0x0028}, +{0x003c, 0x003e}, +{0x003e, 0x003c}, +{0x005b, 0x005d}, +{0x005d, 0x005b}, +{0x007b, 0x007d}, +{0x007d, 0x007b}, +{0x00ab, 0x00bb}, +{0x00bb, 0x00ab}, +{0x0f3a, 0x0f3b}, +{0x0f3b, 0x0f3a}, +{0x0f3c, 0x0f3d}, +{0x0f3d, 0x0f3c}, +{0x169b, 0x169c}, +{0x169c, 0x169b}, +{0x2039, 0x203a}, +{0x203a, 0x2039}, +{0x2045, 0x2046}, +{0x2046, 0x2045}, +{0x207d, 0x207e}, +{0x207e, 0x207d}, +{0x208d, 0x208e}, +{0x208e, 0x208d}, +{0x2208, 0x220b}, +{0x2209, 0x220c}, +{0x220a, 0x220d}, +{0x220b, 0x2208}, +{0x220c, 0x2209}, +{0x220d, 0x220a}, +{0x2215, 0x29f5}, +{0x221f, 0x2bfe}, +{0x2220, 0x29a3}, +{0x2221, 0x299b}, +{0x2222, 0x29a0}, +{0x2224, 0x2aee}, +{0x223c, 0x223d}, +{0x223d, 0x223c}, +{0x2243, 0x22cd}, +{0x2245, 0x224c}, +{0x224c, 0x2245}, +{0x2252, 0x2253}, +{0x2253, 0x2252}, +{0x2254, 0x2255}, +{0x2255, 0x2254}, +{0x2264, 0x2265}, +{0x2265, 0x2264}, +{0x2266, 0x2267}, +{0x2267, 0x2266}, +{0x2268, 0x2269}, +{0x2269, 0x2268}, +{0x226a, 0x226b}, +{0x226b, 0x226a}, +{0x226e, 0x226f}, +{0x226f, 0x226e}, +{0x2270, 0x2271}, +{0x2271, 0x2270}, +{0x2272, 0x2273}, +{0x2273, 0x2272}, +{0x2274, 0x2275}, +{0x2275, 0x2274}, +{0x2276, 0x2277}, +{0x2277, 0x2276}, +{0x2278, 0x2279}, +{0x2279, 0x2278}, +{0x227a, 0x227b}, +{0x227b, 0x227a}, +{0x227c, 0x227d}, +{0x227d, 0x227c}, +{0x227e, 0x227f}, +{0x227f, 0x227e}, +{0x2280, 0x2281}, +{0x2281, 0x2280}, +{0x2282, 0x2283}, +{0x2283, 0x2282}, +{0x2284, 0x2285}, +{0x2285, 0x2284}, +{0x2286, 0x2287}, +{0x2287, 0x2286}, +{0x2288, 0x2289}, +{0x2289, 0x2288}, +{0x228a, 0x228b}, +{0x228b, 0x228a}, +{0x228f, 0x2290}, +{0x2290, 0x228f}, +{0x2291, 0x2292}, +{0x2292, 0x2291}, +{0x2298, 0x29b8}, +{0x22a2, 0x22a3}, +{0x22a3, 0x22a2}, +{0x22a6, 0x2ade}, +{0x22a8, 0x2ae4}, +{0x22a9, 0x2ae3}, +{0x22ab, 0x2ae5}, +{0x22b0, 0x22b1}, +{0x22b1, 0x22b0}, +{0x22b2, 0x22b3}, +{0x22b3, 0x22b2}, +{0x22b4, 0x22b5}, +{0x22b5, 0x22b4}, +{0x22b6, 0x22b7}, +{0x22b7, 0x22b6}, +{0x22b8, 0x27dc}, +{0x22c9, 0x22ca}, +{0x22ca, 0x22c9}, +{0x22cb, 0x22cc}, +{0x22cc, 0x22cb}, +{0x22cd, 0x2243}, +{0x22d0, 0x22d1}, +{0x22d1, 0x22d0}, +{0x22d6, 0x22d7}, +{0x22d7, 0x22d6}, +{0x22d8, 0x22d9}, +{0x22d9, 0x22d8}, +{0x22da, 0x22db}, +{0x22db, 0x22da}, +{0x22dc, 0x22dd}, +{0x22dd, 0x22dc}, +{0x22de, 0x22df}, +{0x22df, 0x22de}, +{0x22e0, 0x22e1}, +{0x22e1, 0x22e0}, +{0x22e2, 0x22e3}, +{0x22e3, 0x22e2}, +{0x22e4, 0x22e5}, +{0x22e5, 0x22e4}, +{0x22e6, 0x22e7}, +{0x22e7, 0x22e6}, +{0x22e8, 0x22e9}, +{0x22e9, 0x22e8}, +{0x22ea, 0x22eb}, +{0x22eb, 0x22ea}, +{0x22ec, 0x22ed}, +{0x22ed, 0x22ec}, +{0x22f0, 0x22f1}, +{0x22f1, 0x22f0}, +{0x22f2, 0x22fa}, +{0x22f3, 0x22fb}, +{0x22f4, 0x22fc}, +{0x22f6, 0x22fd}, +{0x22f7, 0x22fe}, +{0x22fa, 0x22f2}, +{0x22fb, 0x22f3}, +{0x22fc, 0x22f4}, +{0x22fd, 0x22f6}, +{0x22fe, 0x22f7}, +{0x2308, 0x2309}, +{0x2309, 0x2308}, +{0x230a, 0x230b}, +{0x230b, 0x230a}, +{0x2329, 0x232a}, +{0x232a, 0x2329}, +{0x2768, 0x2769}, +{0x2769, 0x2768}, +{0x276a, 0x276b}, +{0x276b, 0x276a}, +{0x276c, 0x276d}, +{0x276d, 0x276c}, +{0x276e, 0x276f}, +{0x276f, 0x276e}, +{0x2770, 0x2771}, +{0x2771, 0x2770}, +{0x2772, 0x2773}, +{0x2773, 0x2772}, +{0x2774, 0x2775}, +{0x2775, 0x2774}, +{0x27c3, 0x27c4}, +{0x27c4, 0x27c3}, +{0x27c5, 0x27c6}, +{0x27c6, 0x27c5}, +{0x27c8, 0x27c9}, +{0x27c9, 0x27c8}, +{0x27cb, 0x27cd}, +{0x27cd, 0x27cb}, +{0x27d5, 0x27d6}, +{0x27d6, 0x27d5}, +{0x27dc, 0x22b8}, +{0x27dd, 0x27de}, +{0x27de, 0x27dd}, +{0x27e2, 0x27e3}, +{0x27e3, 0x27e2}, +{0x27e4, 0x27e5}, +{0x27e5, 0x27e4}, +{0x27e6, 0x27e7}, +{0x27e7, 0x27e6}, +{0x27e8, 0x27e9}, +{0x27e9, 0x27e8}, +{0x27ea, 0x27eb}, +{0x27eb, 0x27ea}, +{0x27ec, 0x27ed}, +{0x27ed, 0x27ec}, +{0x27ee, 0x27ef}, +{0x27ef, 0x27ee}, +{0x2983, 0x2984}, +{0x2984, 0x2983}, +{0x2985, 0x2986}, +{0x2986, 0x2985}, +{0x2987, 0x2988}, +{0x2988, 0x2987}, +{0x2989, 0x298a}, +{0x298a, 0x2989}, +{0x298b, 0x298c}, +{0x298c, 0x298b}, +{0x298d, 0x2990}, +{0x298e, 0x298f}, +{0x298f, 0x298e}, +{0x2990, 0x298d}, +{0x2991, 0x2992}, +{0x2992, 0x2991}, +{0x2993, 0x2994}, +{0x2994, 0x2993}, +{0x2995, 0x2996}, +{0x2996, 0x2995}, +{0x2997, 0x2998}, +{0x2998, 0x2997}, +{0x299b, 0x2221}, +{0x29a0, 0x2222}, +{0x29a3, 0x2220}, +{0x29a4, 0x29a5}, +{0x29a5, 0x29a4}, +{0x29a8, 0x29a9}, +{0x29a9, 0x29a8}, +{0x29aa, 0x29ab}, +{0x29ab, 0x29aa}, +{0x29ac, 0x29ad}, +{0x29ad, 0x29ac}, +{0x29ae, 0x29af}, +{0x29af, 0x29ae}, +{0x29b8, 0x2298}, +{0x29c0, 0x29c1}, +{0x29c1, 0x29c0}, +{0x29c4, 0x29c5}, +{0x29c5, 0x29c4}, +{0x29cf, 0x29d0}, +{0x29d0, 0x29cf}, +{0x29d1, 0x29d2}, +{0x29d2, 0x29d1}, +{0x29d4, 0x29d5}, +{0x29d5, 0x29d4}, +{0x29d8, 0x29d9}, +{0x29d9, 0x29d8}, +{0x29da, 0x29db}, +{0x29db, 0x29da}, +{0x29e8, 0x29e9}, +{0x29e9, 0x29e8}, +{0x29f5, 0x2215}, +{0x29f8, 0x29f9}, +{0x29f9, 0x29f8}, +{0x29fc, 0x29fd}, +{0x29fd, 0x29fc}, +{0x2a2b, 0x2a2c}, +{0x2a2c, 0x2a2b}, +{0x2a2d, 0x2a2e}, +{0x2a2e, 0x2a2d}, +{0x2a34, 0x2a35}, +{0x2a35, 0x2a34}, +{0x2a3c, 0x2a3d}, +{0x2a3d, 0x2a3c}, +{0x2a64, 0x2a65}, +{0x2a65, 0x2a64}, +{0x2a79, 0x2a7a}, +{0x2a7a, 0x2a79}, +{0x2a7b, 0x2a7c}, +{0x2a7c, 0x2a7b}, +{0x2a7d, 0x2a7e}, +{0x2a7e, 0x2a7d}, +{0x2a7f, 0x2a80}, +{0x2a80, 0x2a7f}, +{0x2a81, 0x2a82}, +{0x2a82, 0x2a81}, +{0x2a83, 0x2a84}, +{0x2a84, 0x2a83}, +{0x2a85, 0x2a86}, +{0x2a86, 0x2a85}, +{0x2a87, 0x2a88}, +{0x2a88, 0x2a87}, +{0x2a89, 0x2a8a}, +{0x2a8a, 0x2a89}, +{0x2a8b, 0x2a8c}, +{0x2a8c, 0x2a8b}, +{0x2a8d, 0x2a8e}, +{0x2a8e, 0x2a8d}, +{0x2a8f, 0x2a90}, +{0x2a90, 0x2a8f}, +{0x2a91, 0x2a92}, +{0x2a92, 0x2a91}, +{0x2a93, 0x2a94}, +{0x2a94, 0x2a93}, +{0x2a95, 0x2a96}, +{0x2a96, 0x2a95}, +{0x2a97, 0x2a98}, +{0x2a98, 0x2a97}, +{0x2a99, 0x2a9a}, +{0x2a9a, 0x2a99}, +{0x2a9b, 0x2a9c}, +{0x2a9c, 0x2a9b}, +{0x2a9d, 0x2a9e}, +{0x2a9e, 0x2a9d}, +{0x2a9f, 0x2aa0}, +{0x2aa0, 0x2a9f}, +{0x2aa1, 0x2aa2}, +{0x2aa2, 0x2aa1}, +{0x2aa6, 0x2aa7}, +{0x2aa7, 0x2aa6}, +{0x2aa8, 0x2aa9}, +{0x2aa9, 0x2aa8}, +{0x2aaa, 0x2aab}, +{0x2aab, 0x2aaa}, +{0x2aac, 0x2aad}, +{0x2aad, 0x2aac}, +{0x2aaf, 0x2ab0}, +{0x2ab0, 0x2aaf}, +{0x2ab1, 0x2ab2}, +{0x2ab2, 0x2ab1}, +{0x2ab3, 0x2ab4}, +{0x2ab4, 0x2ab3}, +{0x2ab5, 0x2ab6}, +{0x2ab6, 0x2ab5}, +{0x2ab7, 0x2ab8}, +{0x2ab8, 0x2ab7}, +{0x2ab9, 0x2aba}, +{0x2aba, 0x2ab9}, +{0x2abb, 0x2abc}, +{0x2abc, 0x2abb}, +{0x2abd, 0x2abe}, +{0x2abe, 0x2abd}, +{0x2abf, 0x2ac0}, +{0x2ac0, 0x2abf}, +{0x2ac1, 0x2ac2}, +{0x2ac2, 0x2ac1}, +{0x2ac3, 0x2ac4}, +{0x2ac4, 0x2ac3}, +{0x2ac5, 0x2ac6}, +{0x2ac6, 0x2ac5}, +{0x2ac7, 0x2ac8}, +{0x2ac8, 0x2ac7}, +{0x2ac9, 0x2aca}, +{0x2aca, 0x2ac9}, +{0x2acb, 0x2acc}, +{0x2acc, 0x2acb}, +{0x2acd, 0x2ace}, +{0x2ace, 0x2acd}, +{0x2acf, 0x2ad0}, +{0x2ad0, 0x2acf}, +{0x2ad1, 0x2ad2}, +{0x2ad2, 0x2ad1}, +{0x2ad3, 0x2ad4}, +{0x2ad4, 0x2ad3}, +{0x2ad5, 0x2ad6}, +{0x2ad6, 0x2ad5}, +{0x2ade, 0x22a6}, +{0x2ae3, 0x22a9}, +{0x2ae4, 0x22a8}, +{0x2ae5, 0x22ab}, +{0x2aec, 0x2aed}, +{0x2aed, 0x2aec}, +{0x2aee, 0x2224}, +{0x2af7, 0x2af8}, +{0x2af8, 0x2af7}, +{0x2af9, 0x2afa}, +{0x2afa, 0x2af9}, +{0x2bfe, 0x221f}, +{0x2e02, 0x2e03}, +{0x2e03, 0x2e02}, +{0x2e04, 0x2e05}, +{0x2e05, 0x2e04}, +{0x2e09, 0x2e0a}, +{0x2e0a, 0x2e09}, +{0x2e0c, 0x2e0d}, +{0x2e0d, 0x2e0c}, +{0x2e1c, 0x2e1d}, +{0x2e1d, 0x2e1c}, +{0x2e20, 0x2e21}, +{0x2e21, 0x2e20}, +{0x2e22, 0x2e23}, +{0x2e23, 0x2e22}, +{0x2e24, 0x2e25}, +{0x2e25, 0x2e24}, +{0x2e26, 0x2e27}, +{0x2e27, 0x2e26}, +{0x2e28, 0x2e29}, +{0x2e29, 0x2e28}, +{0x2e55, 0x2e56}, +{0x2e56, 0x2e55}, +{0x2e57, 0x2e58}, +{0x2e58, 0x2e57}, +{0x2e59, 0x2e5a}, +{0x2e5a, 0x2e59}, +{0x2e5b, 0x2e5c}, +{0x2e5c, 0x2e5b}, +{0x3008, 0x3009}, +{0x3009, 0x3008}, +{0x300a, 0x300b}, +{0x300b, 0x300a}, +{0x300c, 0x300d}, +{0x300d, 0x300c}, +{0x300e, 0x300f}, +{0x300f, 0x300e}, +{0x3010, 0x3011}, +{0x3011, 0x3010}, +{0x3014, 0x3015}, +{0x3015, 0x3014}, +{0x3016, 0x3017}, +{0x3017, 0x3016}, +{0x3018, 0x3019}, +{0x3019, 0x3018}, +{0x301a, 0x301b}, +{0x301b, 0x301a}, +{0xfe59, 0xfe5a}, +{0xfe5a, 0xfe59}, +{0xfe5b, 0xfe5c}, +{0xfe5c, 0xfe5b}, +{0xfe5d, 0xfe5e}, +{0xfe5e, 0xfe5d}, +{0xfe64, 0xfe65}, +{0xfe65, 0xfe64}, +{0xff08, 0xff09}, +{0xff09, 0xff08}, +{0xff1c, 0xff1e}, +{0xff1e, 0xff1c}, +{0xff3b, 0xff3d}, +{0xff3d, 0xff3b}, +{0xff5b, 0xff5d}, +{0xff5d, 0xff5b}, +{0xff5f, 0xff60}, +{0xff60, 0xff5f}, +{0xff62, 0xff63}, +{0xff63, 0xff62}, diff --git a/unicode/bidi_type.h b/unicode/bidi_type.h new file mode 100644 index 00000000..0feb49b0 --- /dev/null +++ b/unicode/bidi_type.h @@ -0,0 +1,1306 @@ +/* + * Autogenerated by read_ucd.py from The Unicode Standard 14.0.0 + * + * Bidirectional type of every Unicode character, excluding those with + * type ON. + * + * Used by terminal/bidi.c, whose associated lookup function returns ON + * by default for anything not in this list. + */ + +{0x0000, 0x0008, BN}, +{0x0009, 0x0009, S}, +{0x000a, 0x000a, B}, +{0x000b, 0x000b, S}, +{0x000c, 0x000c, WS}, +{0x000d, 0x000d, B}, +{0x000e, 0x001b, BN}, +{0x001c, 0x001e, B}, +{0x001f, 0x001f, S}, +{0x0020, 0x0020, WS}, +{0x0023, 0x0025, ET}, +{0x002b, 0x002b, ES}, +{0x002c, 0x002c, CS}, +{0x002d, 0x002d, ES}, +{0x002e, 0x002f, CS}, +{0x0030, 0x0039, EN}, +{0x003a, 0x003a, CS}, +{0x0041, 0x005a, L}, +{0x0061, 0x007a, L}, +{0x007f, 0x0084, BN}, +{0x0085, 0x0085, B}, +{0x0086, 0x009f, BN}, +{0x00a0, 0x00a0, CS}, +{0x00a2, 0x00a5, ET}, +{0x00aa, 0x00aa, L}, +{0x00ad, 0x00ad, BN}, +{0x00b0, 0x00b1, ET}, +{0x00b2, 0x00b3, EN}, +{0x00b5, 0x00b5, L}, +{0x00b9, 0x00b9, EN}, +{0x00ba, 0x00ba, L}, +{0x00c0, 0x00d6, L}, +{0x00d8, 0x00f6, L}, +{0x00f8, 0x02b8, L}, +{0x02bb, 0x02c1, L}, +{0x02d0, 0x02d1, L}, +{0x02e0, 0x02e4, L}, +{0x02ee, 0x02ee, L}, +{0x0300, 0x036f, NSM}, +{0x0370, 0x0373, L}, +{0x0376, 0x0377, L}, +{0x037a, 0x037d, L}, +{0x037f, 0x037f, L}, +{0x0386, 0x0386, L}, +{0x0388, 0x038a, L}, +{0x038c, 0x038c, L}, +{0x038e, 0x03a1, L}, +{0x03a3, 0x03f5, L}, +{0x03f7, 0x0482, L}, +{0x0483, 0x0489, NSM}, +{0x048a, 0x052f, L}, +{0x0531, 0x0556, L}, +{0x0559, 0x0589, L}, +{0x058f, 0x058f, ET}, +{0x0591, 0x05bd, NSM}, +{0x05be, 0x05be, R}, +{0x05bf, 0x05bf, NSM}, +{0x05c0, 0x05c0, R}, +{0x05c1, 0x05c2, NSM}, +{0x05c3, 0x05c3, R}, +{0x05c4, 0x05c5, NSM}, +{0x05c6, 0x05c6, R}, +{0x05c7, 0x05c7, NSM}, +{0x05d0, 0x05ea, R}, +{0x05ef, 0x05f4, R}, +{0x0600, 0x0605, AN}, +{0x0608, 0x0608, AL}, +{0x0609, 0x060a, ET}, +{0x060b, 0x060b, AL}, +{0x060c, 0x060c, CS}, +{0x060d, 0x060d, AL}, +{0x0610, 0x061a, NSM}, +{0x061b, 0x064a, AL}, +{0x064b, 0x065f, NSM}, +{0x0660, 0x0669, AN}, +{0x066a, 0x066a, ET}, +{0x066b, 0x066c, AN}, +{0x066d, 0x066f, AL}, +{0x0670, 0x0670, NSM}, +{0x0671, 0x06d5, AL}, +{0x06d6, 0x06dc, NSM}, +{0x06dd, 0x06dd, AN}, +{0x06df, 0x06e4, NSM}, +{0x06e5, 0x06e6, AL}, +{0x06e7, 0x06e8, NSM}, +{0x06ea, 0x06ed, NSM}, +{0x06ee, 0x06ef, AL}, +{0x06f0, 0x06f9, EN}, +{0x06fa, 0x070d, AL}, +{0x070f, 0x0710, AL}, +{0x0711, 0x0711, NSM}, +{0x0712, 0x072f, AL}, +{0x0730, 0x074a, NSM}, +{0x074d, 0x07a5, AL}, +{0x07a6, 0x07b0, NSM}, +{0x07b1, 0x07b1, AL}, +{0x07c0, 0x07ea, R}, +{0x07eb, 0x07f3, NSM}, +{0x07f4, 0x07f5, R}, +{0x07fa, 0x07fa, R}, +{0x07fd, 0x07fd, NSM}, +{0x07fe, 0x0815, R}, +{0x0816, 0x0819, NSM}, +{0x081a, 0x081a, R}, +{0x081b, 0x0823, NSM}, +{0x0824, 0x0824, R}, +{0x0825, 0x0827, NSM}, +{0x0828, 0x0828, R}, +{0x0829, 0x082d, NSM}, +{0x0830, 0x083e, R}, +{0x0840, 0x0858, R}, +{0x0859, 0x085b, NSM}, +{0x085e, 0x085e, R}, +{0x0860, 0x086a, AL}, +{0x0870, 0x088e, AL}, +{0x0890, 0x0891, AN}, +{0x0898, 0x089f, NSM}, +{0x08a0, 0x08c9, AL}, +{0x08ca, 0x08e1, NSM}, +{0x08e2, 0x08e2, AN}, +{0x08e3, 0x0902, NSM}, +{0x0903, 0x0939, L}, +{0x093a, 0x093a, NSM}, +{0x093b, 0x093b, L}, +{0x093c, 0x093c, NSM}, +{0x093d, 0x0940, L}, +{0x0941, 0x0948, NSM}, +{0x0949, 0x094c, L}, +{0x094d, 0x094d, NSM}, +{0x094e, 0x0950, L}, +{0x0951, 0x0957, NSM}, +{0x0958, 0x0961, L}, +{0x0962, 0x0963, NSM}, +{0x0964, 0x0980, L}, +{0x0981, 0x0981, NSM}, +{0x0982, 0x0983, L}, +{0x0985, 0x098c, L}, +{0x098f, 0x0990, L}, +{0x0993, 0x09a8, L}, +{0x09aa, 0x09b0, L}, +{0x09b2, 0x09b2, L}, +{0x09b6, 0x09b9, L}, +{0x09bc, 0x09bc, NSM}, +{0x09bd, 0x09c0, L}, +{0x09c1, 0x09c4, NSM}, +{0x09c7, 0x09c8, L}, +{0x09cb, 0x09cc, L}, +{0x09cd, 0x09cd, NSM}, +{0x09ce, 0x09ce, L}, +{0x09d7, 0x09d7, L}, +{0x09dc, 0x09dd, L}, +{0x09df, 0x09e1, L}, +{0x09e2, 0x09e3, NSM}, +{0x09e6, 0x09f1, L}, +{0x09f2, 0x09f3, ET}, +{0x09f4, 0x09fa, L}, +{0x09fb, 0x09fb, ET}, +{0x09fc, 0x09fd, L}, +{0x09fe, 0x09fe, NSM}, +{0x0a01, 0x0a02, NSM}, +{0x0a03, 0x0a03, L}, +{0x0a05, 0x0a0a, L}, +{0x0a0f, 0x0a10, L}, +{0x0a13, 0x0a28, L}, +{0x0a2a, 0x0a30, L}, +{0x0a32, 0x0a33, L}, +{0x0a35, 0x0a36, L}, +{0x0a38, 0x0a39, L}, +{0x0a3c, 0x0a3c, NSM}, +{0x0a3e, 0x0a40, L}, +{0x0a41, 0x0a42, NSM}, +{0x0a47, 0x0a48, NSM}, +{0x0a4b, 0x0a4d, NSM}, +{0x0a51, 0x0a51, NSM}, +{0x0a59, 0x0a5c, L}, +{0x0a5e, 0x0a5e, L}, +{0x0a66, 0x0a6f, L}, +{0x0a70, 0x0a71, NSM}, +{0x0a72, 0x0a74, L}, +{0x0a75, 0x0a75, NSM}, +{0x0a76, 0x0a76, L}, +{0x0a81, 0x0a82, NSM}, +{0x0a83, 0x0a83, L}, +{0x0a85, 0x0a8d, L}, +{0x0a8f, 0x0a91, L}, +{0x0a93, 0x0aa8, L}, +{0x0aaa, 0x0ab0, L}, +{0x0ab2, 0x0ab3, L}, +{0x0ab5, 0x0ab9, L}, +{0x0abc, 0x0abc, NSM}, +{0x0abd, 0x0ac0, L}, +{0x0ac1, 0x0ac5, NSM}, +{0x0ac7, 0x0ac8, NSM}, +{0x0ac9, 0x0ac9, L}, +{0x0acb, 0x0acc, L}, +{0x0acd, 0x0acd, NSM}, +{0x0ad0, 0x0ad0, L}, +{0x0ae0, 0x0ae1, L}, +{0x0ae2, 0x0ae3, NSM}, +{0x0ae6, 0x0af0, L}, +{0x0af1, 0x0af1, ET}, +{0x0af9, 0x0af9, L}, +{0x0afa, 0x0aff, NSM}, +{0x0b01, 0x0b01, NSM}, +{0x0b02, 0x0b03, L}, +{0x0b05, 0x0b0c, L}, +{0x0b0f, 0x0b10, L}, +{0x0b13, 0x0b28, L}, +{0x0b2a, 0x0b30, L}, +{0x0b32, 0x0b33, L}, +{0x0b35, 0x0b39, L}, +{0x0b3c, 0x0b3c, NSM}, +{0x0b3d, 0x0b3e, L}, +{0x0b3f, 0x0b3f, NSM}, +{0x0b40, 0x0b40, L}, +{0x0b41, 0x0b44, NSM}, +{0x0b47, 0x0b48, L}, +{0x0b4b, 0x0b4c, L}, +{0x0b4d, 0x0b4d, NSM}, +{0x0b55, 0x0b56, NSM}, +{0x0b57, 0x0b57, L}, +{0x0b5c, 0x0b5d, L}, +{0x0b5f, 0x0b61, L}, +{0x0b62, 0x0b63, NSM}, +{0x0b66, 0x0b77, L}, +{0x0b82, 0x0b82, NSM}, +{0x0b83, 0x0b83, L}, +{0x0b85, 0x0b8a, L}, +{0x0b8e, 0x0b90, L}, +{0x0b92, 0x0b95, L}, +{0x0b99, 0x0b9a, L}, +{0x0b9c, 0x0b9c, L}, +{0x0b9e, 0x0b9f, L}, +{0x0ba3, 0x0ba4, L}, +{0x0ba8, 0x0baa, L}, +{0x0bae, 0x0bb9, L}, +{0x0bbe, 0x0bbf, L}, +{0x0bc0, 0x0bc0, NSM}, +{0x0bc1, 0x0bc2, L}, +{0x0bc6, 0x0bc8, L}, +{0x0bca, 0x0bcc, L}, +{0x0bcd, 0x0bcd, NSM}, +{0x0bd0, 0x0bd0, L}, +{0x0bd7, 0x0bd7, L}, +{0x0be6, 0x0bf2, L}, +{0x0bf9, 0x0bf9, ET}, +{0x0c00, 0x0c00, NSM}, +{0x0c01, 0x0c03, L}, +{0x0c04, 0x0c04, NSM}, +{0x0c05, 0x0c0c, L}, +{0x0c0e, 0x0c10, L}, +{0x0c12, 0x0c28, L}, +{0x0c2a, 0x0c39, L}, +{0x0c3c, 0x0c3c, NSM}, +{0x0c3d, 0x0c3d, L}, +{0x0c3e, 0x0c40, NSM}, +{0x0c41, 0x0c44, L}, +{0x0c46, 0x0c48, NSM}, +{0x0c4a, 0x0c4d, NSM}, +{0x0c55, 0x0c56, NSM}, +{0x0c58, 0x0c5a, L}, +{0x0c5d, 0x0c5d, L}, +{0x0c60, 0x0c61, L}, +{0x0c62, 0x0c63, NSM}, +{0x0c66, 0x0c6f, L}, +{0x0c77, 0x0c77, L}, +{0x0c7f, 0x0c80, L}, +{0x0c81, 0x0c81, NSM}, +{0x0c82, 0x0c8c, L}, +{0x0c8e, 0x0c90, L}, +{0x0c92, 0x0ca8, L}, +{0x0caa, 0x0cb3, L}, +{0x0cb5, 0x0cb9, L}, +{0x0cbc, 0x0cbc, NSM}, +{0x0cbd, 0x0cc4, L}, +{0x0cc6, 0x0cc8, L}, +{0x0cca, 0x0ccb, L}, +{0x0ccc, 0x0ccd, NSM}, +{0x0cd5, 0x0cd6, L}, +{0x0cdd, 0x0cde, L}, +{0x0ce0, 0x0ce1, L}, +{0x0ce2, 0x0ce3, NSM}, +{0x0ce6, 0x0cef, L}, +{0x0cf1, 0x0cf2, L}, +{0x0d00, 0x0d01, NSM}, +{0x0d02, 0x0d0c, L}, +{0x0d0e, 0x0d10, L}, +{0x0d12, 0x0d3a, L}, +{0x0d3b, 0x0d3c, NSM}, +{0x0d3d, 0x0d40, L}, +{0x0d41, 0x0d44, NSM}, +{0x0d46, 0x0d48, L}, +{0x0d4a, 0x0d4c, L}, +{0x0d4d, 0x0d4d, NSM}, +{0x0d4e, 0x0d4f, L}, +{0x0d54, 0x0d61, L}, +{0x0d62, 0x0d63, NSM}, +{0x0d66, 0x0d7f, L}, +{0x0d81, 0x0d81, NSM}, +{0x0d82, 0x0d83, L}, +{0x0d85, 0x0d96, L}, +{0x0d9a, 0x0db1, L}, +{0x0db3, 0x0dbb, L}, +{0x0dbd, 0x0dbd, L}, +{0x0dc0, 0x0dc6, L}, +{0x0dca, 0x0dca, NSM}, +{0x0dcf, 0x0dd1, L}, +{0x0dd2, 0x0dd4, NSM}, +{0x0dd6, 0x0dd6, NSM}, +{0x0dd8, 0x0ddf, L}, +{0x0de6, 0x0def, L}, +{0x0df2, 0x0df4, L}, +{0x0e01, 0x0e30, L}, +{0x0e31, 0x0e31, NSM}, +{0x0e32, 0x0e33, L}, +{0x0e34, 0x0e3a, NSM}, +{0x0e3f, 0x0e3f, ET}, +{0x0e40, 0x0e46, L}, +{0x0e47, 0x0e4e, NSM}, +{0x0e4f, 0x0e5b, L}, +{0x0e81, 0x0e82, L}, +{0x0e84, 0x0e84, L}, +{0x0e86, 0x0e8a, L}, +{0x0e8c, 0x0ea3, L}, +{0x0ea5, 0x0ea5, L}, +{0x0ea7, 0x0eb0, L}, +{0x0eb1, 0x0eb1, NSM}, +{0x0eb2, 0x0eb3, L}, +{0x0eb4, 0x0ebc, NSM}, +{0x0ebd, 0x0ebd, L}, +{0x0ec0, 0x0ec4, L}, +{0x0ec6, 0x0ec6, L}, +{0x0ec8, 0x0ecd, NSM}, +{0x0ed0, 0x0ed9, L}, +{0x0edc, 0x0edf, L}, +{0x0f00, 0x0f17, L}, +{0x0f18, 0x0f19, NSM}, +{0x0f1a, 0x0f34, L}, +{0x0f35, 0x0f35, NSM}, +{0x0f36, 0x0f36, L}, +{0x0f37, 0x0f37, NSM}, +{0x0f38, 0x0f38, L}, +{0x0f39, 0x0f39, NSM}, +{0x0f3e, 0x0f47, L}, +{0x0f49, 0x0f6c, L}, +{0x0f71, 0x0f7e, NSM}, +{0x0f7f, 0x0f7f, L}, +{0x0f80, 0x0f84, NSM}, +{0x0f85, 0x0f85, L}, +{0x0f86, 0x0f87, NSM}, +{0x0f88, 0x0f8c, L}, +{0x0f8d, 0x0f97, NSM}, +{0x0f99, 0x0fbc, NSM}, +{0x0fbe, 0x0fc5, L}, +{0x0fc6, 0x0fc6, NSM}, +{0x0fc7, 0x0fcc, L}, +{0x0fce, 0x0fda, L}, +{0x1000, 0x102c, L}, +{0x102d, 0x1030, NSM}, +{0x1031, 0x1031, L}, +{0x1032, 0x1037, NSM}, +{0x1038, 0x1038, L}, +{0x1039, 0x103a, NSM}, +{0x103b, 0x103c, L}, +{0x103d, 0x103e, NSM}, +{0x103f, 0x1057, L}, +{0x1058, 0x1059, NSM}, +{0x105a, 0x105d, L}, +{0x105e, 0x1060, NSM}, +{0x1061, 0x1070, L}, +{0x1071, 0x1074, NSM}, +{0x1075, 0x1081, L}, +{0x1082, 0x1082, NSM}, +{0x1083, 0x1084, L}, +{0x1085, 0x1086, NSM}, +{0x1087, 0x108c, L}, +{0x108d, 0x108d, NSM}, +{0x108e, 0x109c, L}, +{0x109d, 0x109d, NSM}, +{0x109e, 0x10c5, L}, +{0x10c7, 0x10c7, L}, +{0x10cd, 0x10cd, L}, +{0x10d0, 0x1248, L}, +{0x124a, 0x124d, L}, +{0x1250, 0x1256, L}, +{0x1258, 0x1258, L}, +{0x125a, 0x125d, L}, +{0x1260, 0x1288, L}, +{0x128a, 0x128d, L}, +{0x1290, 0x12b0, L}, +{0x12b2, 0x12b5, L}, +{0x12b8, 0x12be, L}, +{0x12c0, 0x12c0, L}, +{0x12c2, 0x12c5, L}, +{0x12c8, 0x12d6, L}, +{0x12d8, 0x1310, L}, +{0x1312, 0x1315, L}, +{0x1318, 0x135a, L}, +{0x135d, 0x135f, NSM}, +{0x1360, 0x137c, L}, +{0x1380, 0x138f, L}, +{0x13a0, 0x13f5, L}, +{0x13f8, 0x13fd, L}, +{0x1401, 0x167f, L}, +{0x1680, 0x1680, WS}, +{0x1681, 0x169a, L}, +{0x16a0, 0x16f8, L}, +{0x1700, 0x1711, L}, +{0x1712, 0x1714, NSM}, +{0x1715, 0x1715, L}, +{0x171f, 0x1731, L}, +{0x1732, 0x1733, NSM}, +{0x1734, 0x1736, L}, +{0x1740, 0x1751, L}, +{0x1752, 0x1753, NSM}, +{0x1760, 0x176c, L}, +{0x176e, 0x1770, L}, +{0x1772, 0x1773, NSM}, +{0x1780, 0x17b3, L}, +{0x17b4, 0x17b5, NSM}, +{0x17b6, 0x17b6, L}, +{0x17b7, 0x17bd, NSM}, +{0x17be, 0x17c5, L}, +{0x17c6, 0x17c6, NSM}, +{0x17c7, 0x17c8, L}, +{0x17c9, 0x17d3, NSM}, +{0x17d4, 0x17da, L}, +{0x17db, 0x17db, ET}, +{0x17dc, 0x17dc, L}, +{0x17dd, 0x17dd, NSM}, +{0x17e0, 0x17e9, L}, +{0x180b, 0x180d, NSM}, +{0x180e, 0x180e, BN}, +{0x180f, 0x180f, NSM}, +{0x1810, 0x1819, L}, +{0x1820, 0x1878, L}, +{0x1880, 0x1884, L}, +{0x1885, 0x1886, NSM}, +{0x1887, 0x18a8, L}, +{0x18a9, 0x18a9, NSM}, +{0x18aa, 0x18aa, L}, +{0x18b0, 0x18f5, L}, +{0x1900, 0x191e, L}, +{0x1920, 0x1922, NSM}, +{0x1923, 0x1926, L}, +{0x1927, 0x1928, NSM}, +{0x1929, 0x192b, L}, +{0x1930, 0x1931, L}, +{0x1932, 0x1932, NSM}, +{0x1933, 0x1938, L}, +{0x1939, 0x193b, NSM}, +{0x1946, 0x196d, L}, +{0x1970, 0x1974, L}, +{0x1980, 0x19ab, L}, +{0x19b0, 0x19c9, L}, +{0x19d0, 0x19da, L}, +{0x1a00, 0x1a16, L}, +{0x1a17, 0x1a18, NSM}, +{0x1a19, 0x1a1a, L}, +{0x1a1b, 0x1a1b, NSM}, +{0x1a1e, 0x1a55, L}, +{0x1a56, 0x1a56, NSM}, +{0x1a57, 0x1a57, L}, +{0x1a58, 0x1a5e, NSM}, +{0x1a60, 0x1a60, NSM}, +{0x1a61, 0x1a61, L}, +{0x1a62, 0x1a62, NSM}, +{0x1a63, 0x1a64, L}, +{0x1a65, 0x1a6c, NSM}, +{0x1a6d, 0x1a72, L}, +{0x1a73, 0x1a7c, NSM}, +{0x1a7f, 0x1a7f, NSM}, +{0x1a80, 0x1a89, L}, +{0x1a90, 0x1a99, L}, +{0x1aa0, 0x1aad, L}, +{0x1ab0, 0x1ace, NSM}, +{0x1b00, 0x1b03, NSM}, +{0x1b04, 0x1b33, L}, +{0x1b34, 0x1b34, NSM}, +{0x1b35, 0x1b35, L}, +{0x1b36, 0x1b3a, NSM}, +{0x1b3b, 0x1b3b, L}, +{0x1b3c, 0x1b3c, NSM}, +{0x1b3d, 0x1b41, L}, +{0x1b42, 0x1b42, NSM}, +{0x1b43, 0x1b4c, L}, +{0x1b50, 0x1b6a, L}, +{0x1b6b, 0x1b73, NSM}, +{0x1b74, 0x1b7e, L}, +{0x1b80, 0x1b81, NSM}, +{0x1b82, 0x1ba1, L}, +{0x1ba2, 0x1ba5, NSM}, +{0x1ba6, 0x1ba7, L}, +{0x1ba8, 0x1ba9, NSM}, +{0x1baa, 0x1baa, L}, +{0x1bab, 0x1bad, NSM}, +{0x1bae, 0x1be5, L}, +{0x1be6, 0x1be6, NSM}, +{0x1be7, 0x1be7, L}, +{0x1be8, 0x1be9, NSM}, +{0x1bea, 0x1bec, L}, +{0x1bed, 0x1bed, NSM}, +{0x1bee, 0x1bee, L}, +{0x1bef, 0x1bf1, NSM}, +{0x1bf2, 0x1bf3, L}, +{0x1bfc, 0x1c2b, L}, +{0x1c2c, 0x1c33, NSM}, +{0x1c34, 0x1c35, L}, +{0x1c36, 0x1c37, NSM}, +{0x1c3b, 0x1c49, L}, +{0x1c4d, 0x1c88, L}, +{0x1c90, 0x1cba, L}, +{0x1cbd, 0x1cc7, L}, +{0x1cd0, 0x1cd2, NSM}, +{0x1cd3, 0x1cd3, L}, +{0x1cd4, 0x1ce0, NSM}, +{0x1ce1, 0x1ce1, L}, +{0x1ce2, 0x1ce8, NSM}, +{0x1ce9, 0x1cec, L}, +{0x1ced, 0x1ced, NSM}, +{0x1cee, 0x1cf3, L}, +{0x1cf4, 0x1cf4, NSM}, +{0x1cf5, 0x1cf7, L}, +{0x1cf8, 0x1cf9, NSM}, +{0x1cfa, 0x1cfa, L}, +{0x1d00, 0x1dbf, L}, +{0x1dc0, 0x1dff, NSM}, +{0x1e00, 0x1f15, L}, +{0x1f18, 0x1f1d, L}, +{0x1f20, 0x1f45, L}, +{0x1f48, 0x1f4d, L}, +{0x1f50, 0x1f57, L}, +{0x1f59, 0x1f59, L}, +{0x1f5b, 0x1f5b, L}, +{0x1f5d, 0x1f5d, L}, +{0x1f5f, 0x1f7d, L}, +{0x1f80, 0x1fb4, L}, +{0x1fb6, 0x1fbc, L}, +{0x1fbe, 0x1fbe, L}, +{0x1fc2, 0x1fc4, L}, +{0x1fc6, 0x1fcc, L}, +{0x1fd0, 0x1fd3, L}, +{0x1fd6, 0x1fdb, L}, +{0x1fe0, 0x1fec, L}, +{0x1ff2, 0x1ff4, L}, +{0x1ff6, 0x1ffc, L}, +{0x2000, 0x200a, WS}, +{0x200b, 0x200d, BN}, +{0x200e, 0x200e, L}, +{0x200f, 0x200f, R}, +{0x2028, 0x2028, WS}, +{0x2029, 0x2029, B}, +{0x202a, 0x202a, LRE}, +{0x202b, 0x202b, RLE}, +{0x202c, 0x202c, PDF}, +{0x202d, 0x202d, LRO}, +{0x202e, 0x202e, RLO}, +{0x202f, 0x202f, CS}, +{0x2030, 0x2034, ET}, +{0x2044, 0x2044, CS}, +{0x205f, 0x205f, WS}, +{0x2060, 0x2064, BN}, +{0x2066, 0x2066, LRI}, +{0x2067, 0x2067, RLI}, +{0x2068, 0x2068, FSI}, +{0x2069, 0x2069, PDI}, +{0x206a, 0x206f, BN}, +{0x2070, 0x2070, EN}, +{0x2071, 0x2071, L}, +{0x2074, 0x2079, EN}, +{0x207a, 0x207b, ES}, +{0x207f, 0x207f, L}, +{0x2080, 0x2089, EN}, +{0x208a, 0x208b, ES}, +{0x2090, 0x209c, L}, +{0x20a0, 0x20c0, ET}, +{0x20d0, 0x20f0, NSM}, +{0x2102, 0x2102, L}, +{0x2107, 0x2107, L}, +{0x210a, 0x2113, L}, +{0x2115, 0x2115, L}, +{0x2119, 0x211d, L}, +{0x2124, 0x2124, L}, +{0x2126, 0x2126, L}, +{0x2128, 0x2128, L}, +{0x212a, 0x212d, L}, +{0x212e, 0x212e, ET}, +{0x212f, 0x2139, L}, +{0x213c, 0x213f, L}, +{0x2145, 0x2149, L}, +{0x214e, 0x214f, L}, +{0x2160, 0x2188, L}, +{0x2212, 0x2212, ES}, +{0x2213, 0x2213, ET}, +{0x2336, 0x237a, L}, +{0x2395, 0x2395, L}, +{0x2488, 0x249b, EN}, +{0x249c, 0x24e9, L}, +{0x26ac, 0x26ac, L}, +{0x2800, 0x28ff, L}, +{0x2c00, 0x2ce4, L}, +{0x2ceb, 0x2cee, L}, +{0x2cef, 0x2cf1, NSM}, +{0x2cf2, 0x2cf3, L}, +{0x2d00, 0x2d25, L}, +{0x2d27, 0x2d27, L}, +{0x2d2d, 0x2d2d, L}, +{0x2d30, 0x2d67, L}, +{0x2d6f, 0x2d70, L}, +{0x2d7f, 0x2d7f, NSM}, +{0x2d80, 0x2d96, L}, +{0x2da0, 0x2da6, L}, +{0x2da8, 0x2dae, L}, +{0x2db0, 0x2db6, L}, +{0x2db8, 0x2dbe, L}, +{0x2dc0, 0x2dc6, L}, +{0x2dc8, 0x2dce, L}, +{0x2dd0, 0x2dd6, L}, +{0x2dd8, 0x2dde, L}, +{0x2de0, 0x2dff, NSM}, +{0x3000, 0x3000, WS}, +{0x3005, 0x3007, L}, +{0x3021, 0x3029, L}, +{0x302a, 0x302d, NSM}, +{0x302e, 0x302f, L}, +{0x3031, 0x3035, L}, +{0x3038, 0x303c, L}, +{0x3041, 0x3096, L}, +{0x3099, 0x309a, NSM}, +{0x309d, 0x309f, L}, +{0x30a1, 0x30fa, L}, +{0x30fc, 0x30ff, L}, +{0x3105, 0x312f, L}, +{0x3131, 0x318e, L}, +{0x3190, 0x31bf, L}, +{0x31f0, 0x321c, L}, +{0x3220, 0x324f, L}, +{0x3260, 0x327b, L}, +{0x327f, 0x32b0, L}, +{0x32c0, 0x32cb, L}, +{0x32d0, 0x3376, L}, +{0x337b, 0x33dd, L}, +{0x33e0, 0x33fe, L}, +{0x3400, 0x4dbf, L}, +{0x4e00, 0xa48c, L}, +{0xa4d0, 0xa60c, L}, +{0xa610, 0xa62b, L}, +{0xa640, 0xa66e, L}, +{0xa66f, 0xa672, NSM}, +{0xa674, 0xa67d, NSM}, +{0xa680, 0xa69d, L}, +{0xa69e, 0xa69f, NSM}, +{0xa6a0, 0xa6ef, L}, +{0xa6f0, 0xa6f1, NSM}, +{0xa6f2, 0xa6f7, L}, +{0xa722, 0xa787, L}, +{0xa789, 0xa7ca, L}, +{0xa7d0, 0xa7d1, L}, +{0xa7d3, 0xa7d3, L}, +{0xa7d5, 0xa7d9, L}, +{0xa7f2, 0xa801, L}, +{0xa802, 0xa802, NSM}, +{0xa803, 0xa805, L}, +{0xa806, 0xa806, NSM}, +{0xa807, 0xa80a, L}, +{0xa80b, 0xa80b, NSM}, +{0xa80c, 0xa824, L}, +{0xa825, 0xa826, NSM}, +{0xa827, 0xa827, L}, +{0xa82c, 0xa82c, NSM}, +{0xa830, 0xa837, L}, +{0xa838, 0xa839, ET}, +{0xa840, 0xa873, L}, +{0xa880, 0xa8c3, L}, +{0xa8c4, 0xa8c5, NSM}, +{0xa8ce, 0xa8d9, L}, +{0xa8e0, 0xa8f1, NSM}, +{0xa8f2, 0xa8fe, L}, +{0xa8ff, 0xa8ff, NSM}, +{0xa900, 0xa925, L}, +{0xa926, 0xa92d, NSM}, +{0xa92e, 0xa946, L}, +{0xa947, 0xa951, NSM}, +{0xa952, 0xa953, L}, +{0xa95f, 0xa97c, L}, +{0xa980, 0xa982, NSM}, +{0xa983, 0xa9b2, L}, +{0xa9b3, 0xa9b3, NSM}, +{0xa9b4, 0xa9b5, L}, +{0xa9b6, 0xa9b9, NSM}, +{0xa9ba, 0xa9bb, L}, +{0xa9bc, 0xa9bd, NSM}, +{0xa9be, 0xa9cd, L}, +{0xa9cf, 0xa9d9, L}, +{0xa9de, 0xa9e4, L}, +{0xa9e5, 0xa9e5, NSM}, +{0xa9e6, 0xa9fe, L}, +{0xaa00, 0xaa28, L}, +{0xaa29, 0xaa2e, NSM}, +{0xaa2f, 0xaa30, L}, +{0xaa31, 0xaa32, NSM}, +{0xaa33, 0xaa34, L}, +{0xaa35, 0xaa36, NSM}, +{0xaa40, 0xaa42, L}, +{0xaa43, 0xaa43, NSM}, +{0xaa44, 0xaa4b, L}, +{0xaa4c, 0xaa4c, NSM}, +{0xaa4d, 0xaa4d, L}, +{0xaa50, 0xaa59, L}, +{0xaa5c, 0xaa7b, L}, +{0xaa7c, 0xaa7c, NSM}, +{0xaa7d, 0xaaaf, L}, +{0xaab0, 0xaab0, NSM}, +{0xaab1, 0xaab1, L}, +{0xaab2, 0xaab4, NSM}, +{0xaab5, 0xaab6, L}, +{0xaab7, 0xaab8, NSM}, +{0xaab9, 0xaabd, L}, +{0xaabe, 0xaabf, NSM}, +{0xaac0, 0xaac0, L}, +{0xaac1, 0xaac1, NSM}, +{0xaac2, 0xaac2, L}, +{0xaadb, 0xaaeb, L}, +{0xaaec, 0xaaed, NSM}, +{0xaaee, 0xaaf5, L}, +{0xaaf6, 0xaaf6, NSM}, +{0xab01, 0xab06, L}, +{0xab09, 0xab0e, L}, +{0xab11, 0xab16, L}, +{0xab20, 0xab26, L}, +{0xab28, 0xab2e, L}, +{0xab30, 0xab69, L}, +{0xab70, 0xabe4, L}, +{0xabe5, 0xabe5, NSM}, +{0xabe6, 0xabe7, L}, +{0xabe8, 0xabe8, NSM}, +{0xabe9, 0xabec, L}, +{0xabed, 0xabed, NSM}, +{0xabf0, 0xabf9, L}, +{0xac00, 0xd7a3, L}, +{0xd7b0, 0xd7c6, L}, +{0xd7cb, 0xd7fb, L}, +{0xd800, 0xfa6d, L}, +{0xfa70, 0xfad9, L}, +{0xfb00, 0xfb06, L}, +{0xfb13, 0xfb17, L}, +{0xfb1d, 0xfb1d, R}, +{0xfb1e, 0xfb1e, NSM}, +{0xfb1f, 0xfb28, R}, +{0xfb29, 0xfb29, ES}, +{0xfb2a, 0xfb36, R}, +{0xfb38, 0xfb3c, R}, +{0xfb3e, 0xfb3e, R}, +{0xfb40, 0xfb41, R}, +{0xfb43, 0xfb44, R}, +{0xfb46, 0xfb4f, R}, +{0xfb50, 0xfbc2, AL}, +{0xfbd3, 0xfd3d, AL}, +{0xfd50, 0xfd8f, AL}, +{0xfd92, 0xfdc7, AL}, +{0xfdf0, 0xfdfc, AL}, +{0xfe00, 0xfe0f, NSM}, +{0xfe20, 0xfe2f, NSM}, +{0xfe50, 0xfe50, CS}, +{0xfe52, 0xfe52, CS}, +{0xfe55, 0xfe55, CS}, +{0xfe5f, 0xfe5f, ET}, +{0xfe62, 0xfe63, ES}, +{0xfe69, 0xfe6a, ET}, +{0xfe70, 0xfe74, AL}, +{0xfe76, 0xfefc, AL}, +{0xfeff, 0xfeff, BN}, +{0xff03, 0xff05, ET}, +{0xff0b, 0xff0b, ES}, +{0xff0c, 0xff0c, CS}, +{0xff0d, 0xff0d, ES}, +{0xff0e, 0xff0f, CS}, +{0xff10, 0xff19, EN}, +{0xff1a, 0xff1a, CS}, +{0xff21, 0xff3a, L}, +{0xff41, 0xff5a, L}, +{0xff66, 0xffbe, L}, +{0xffc2, 0xffc7, L}, +{0xffca, 0xffcf, L}, +{0xffd2, 0xffd7, L}, +{0xffda, 0xffdc, L}, +{0xffe0, 0xffe1, ET}, +{0xffe5, 0xffe6, ET}, +{0x10000, 0x1000b, L}, +{0x1000d, 0x10026, L}, +{0x10028, 0x1003a, L}, +{0x1003c, 0x1003d, L}, +{0x1003f, 0x1004d, L}, +{0x10050, 0x1005d, L}, +{0x10080, 0x100fa, L}, +{0x10100, 0x10100, L}, +{0x10102, 0x10102, L}, +{0x10107, 0x10133, L}, +{0x10137, 0x1013f, L}, +{0x1018d, 0x1018e, L}, +{0x101d0, 0x101fc, L}, +{0x101fd, 0x101fd, NSM}, +{0x10280, 0x1029c, L}, +{0x102a0, 0x102d0, L}, +{0x102e0, 0x102e0, NSM}, +{0x102e1, 0x102fb, EN}, +{0x10300, 0x10323, L}, +{0x1032d, 0x1034a, L}, +{0x10350, 0x10375, L}, +{0x10376, 0x1037a, NSM}, +{0x10380, 0x1039d, L}, +{0x1039f, 0x103c3, L}, +{0x103c8, 0x103d5, L}, +{0x10400, 0x1049d, L}, +{0x104a0, 0x104a9, L}, +{0x104b0, 0x104d3, L}, +{0x104d8, 0x104fb, L}, +{0x10500, 0x10527, L}, +{0x10530, 0x10563, L}, +{0x1056f, 0x1057a, L}, +{0x1057c, 0x1058a, L}, +{0x1058c, 0x10592, L}, +{0x10594, 0x10595, L}, +{0x10597, 0x105a1, L}, +{0x105a3, 0x105b1, L}, +{0x105b3, 0x105b9, L}, +{0x105bb, 0x105bc, L}, +{0x10600, 0x10736, L}, +{0x10740, 0x10755, L}, +{0x10760, 0x10767, L}, +{0x10780, 0x10785, L}, +{0x10787, 0x107b0, L}, +{0x107b2, 0x107ba, L}, +{0x10800, 0x10805, R}, +{0x10808, 0x10808, R}, +{0x1080a, 0x10835, R}, +{0x10837, 0x10838, R}, +{0x1083c, 0x1083c, R}, +{0x1083f, 0x10855, R}, +{0x10857, 0x1089e, R}, +{0x108a7, 0x108af, R}, +{0x108e0, 0x108f2, R}, +{0x108f4, 0x108f5, R}, +{0x108fb, 0x1091b, R}, +{0x10920, 0x10939, R}, +{0x1093f, 0x1093f, R}, +{0x10980, 0x109b7, R}, +{0x109bc, 0x109cf, R}, +{0x109d2, 0x10a00, R}, +{0x10a01, 0x10a03, NSM}, +{0x10a05, 0x10a06, NSM}, +{0x10a0c, 0x10a0f, NSM}, +{0x10a10, 0x10a13, R}, +{0x10a15, 0x10a17, R}, +{0x10a19, 0x10a35, R}, +{0x10a38, 0x10a3a, NSM}, +{0x10a3f, 0x10a3f, NSM}, +{0x10a40, 0x10a48, R}, +{0x10a50, 0x10a58, R}, +{0x10a60, 0x10a9f, R}, +{0x10ac0, 0x10ae4, R}, +{0x10ae5, 0x10ae6, NSM}, +{0x10aeb, 0x10af6, R}, +{0x10b00, 0x10b35, R}, +{0x10b40, 0x10b55, R}, +{0x10b58, 0x10b72, R}, +{0x10b78, 0x10b91, R}, +{0x10b99, 0x10b9c, R}, +{0x10ba9, 0x10baf, R}, +{0x10c00, 0x10c48, R}, +{0x10c80, 0x10cb2, R}, +{0x10cc0, 0x10cf2, R}, +{0x10cfa, 0x10cff, R}, +{0x10d00, 0x10d23, AL}, +{0x10d24, 0x10d27, NSM}, +{0x10d30, 0x10d39, AN}, +{0x10e60, 0x10e7e, AN}, +{0x10e80, 0x10ea9, R}, +{0x10eab, 0x10eac, NSM}, +{0x10ead, 0x10ead, R}, +{0x10eb0, 0x10eb1, R}, +{0x10f00, 0x10f27, R}, +{0x10f30, 0x10f45, AL}, +{0x10f46, 0x10f50, NSM}, +{0x10f51, 0x10f59, AL}, +{0x10f70, 0x10f81, R}, +{0x10f82, 0x10f85, NSM}, +{0x10f86, 0x10f89, R}, +{0x10fb0, 0x10fcb, R}, +{0x10fe0, 0x10ff6, R}, +{0x11000, 0x11000, L}, +{0x11001, 0x11001, NSM}, +{0x11002, 0x11037, L}, +{0x11038, 0x11046, NSM}, +{0x11047, 0x1104d, L}, +{0x11066, 0x1106f, L}, +{0x11070, 0x11070, NSM}, +{0x11071, 0x11072, L}, +{0x11073, 0x11074, NSM}, +{0x11075, 0x11075, L}, +{0x1107f, 0x11081, NSM}, +{0x11082, 0x110b2, L}, +{0x110b3, 0x110b6, NSM}, +{0x110b7, 0x110b8, L}, +{0x110b9, 0x110ba, NSM}, +{0x110bb, 0x110c1, L}, +{0x110c2, 0x110c2, NSM}, +{0x110cd, 0x110cd, L}, +{0x110d0, 0x110e8, L}, +{0x110f0, 0x110f9, L}, +{0x11100, 0x11102, NSM}, +{0x11103, 0x11126, L}, +{0x11127, 0x1112b, NSM}, +{0x1112c, 0x1112c, L}, +{0x1112d, 0x11134, NSM}, +{0x11136, 0x11147, L}, +{0x11150, 0x11172, L}, +{0x11173, 0x11173, NSM}, +{0x11174, 0x11176, L}, +{0x11180, 0x11181, NSM}, +{0x11182, 0x111b5, L}, +{0x111b6, 0x111be, NSM}, +{0x111bf, 0x111c8, L}, +{0x111c9, 0x111cc, NSM}, +{0x111cd, 0x111ce, L}, +{0x111cf, 0x111cf, NSM}, +{0x111d0, 0x111df, L}, +{0x111e1, 0x111f4, L}, +{0x11200, 0x11211, L}, +{0x11213, 0x1122e, L}, +{0x1122f, 0x11231, NSM}, +{0x11232, 0x11233, L}, +{0x11234, 0x11234, NSM}, +{0x11235, 0x11235, L}, +{0x11236, 0x11237, NSM}, +{0x11238, 0x1123d, L}, +{0x1123e, 0x1123e, NSM}, +{0x11280, 0x11286, L}, +{0x11288, 0x11288, L}, +{0x1128a, 0x1128d, L}, +{0x1128f, 0x1129d, L}, +{0x1129f, 0x112a9, L}, +{0x112b0, 0x112de, L}, +{0x112df, 0x112df, NSM}, +{0x112e0, 0x112e2, L}, +{0x112e3, 0x112ea, NSM}, +{0x112f0, 0x112f9, L}, +{0x11300, 0x11301, NSM}, +{0x11302, 0x11303, L}, +{0x11305, 0x1130c, L}, +{0x1130f, 0x11310, L}, +{0x11313, 0x11328, L}, +{0x1132a, 0x11330, L}, +{0x11332, 0x11333, L}, +{0x11335, 0x11339, L}, +{0x1133b, 0x1133c, NSM}, +{0x1133d, 0x1133f, L}, +{0x11340, 0x11340, NSM}, +{0x11341, 0x11344, L}, +{0x11347, 0x11348, L}, +{0x1134b, 0x1134d, L}, +{0x11350, 0x11350, L}, +{0x11357, 0x11357, L}, +{0x1135d, 0x11363, L}, +{0x11366, 0x1136c, NSM}, +{0x11370, 0x11374, NSM}, +{0x11400, 0x11437, L}, +{0x11438, 0x1143f, NSM}, +{0x11440, 0x11441, L}, +{0x11442, 0x11444, NSM}, +{0x11445, 0x11445, L}, +{0x11446, 0x11446, NSM}, +{0x11447, 0x1145b, L}, +{0x1145d, 0x1145d, L}, +{0x1145e, 0x1145e, NSM}, +{0x1145f, 0x11461, L}, +{0x11480, 0x114b2, L}, +{0x114b3, 0x114b8, NSM}, +{0x114b9, 0x114b9, L}, +{0x114ba, 0x114ba, NSM}, +{0x114bb, 0x114be, L}, +{0x114bf, 0x114c0, NSM}, +{0x114c1, 0x114c1, L}, +{0x114c2, 0x114c3, NSM}, +{0x114c4, 0x114c7, L}, +{0x114d0, 0x114d9, L}, +{0x11580, 0x115b1, L}, +{0x115b2, 0x115b5, NSM}, +{0x115b8, 0x115bb, L}, +{0x115bc, 0x115bd, NSM}, +{0x115be, 0x115be, L}, +{0x115bf, 0x115c0, NSM}, +{0x115c1, 0x115db, L}, +{0x115dc, 0x115dd, NSM}, +{0x11600, 0x11632, L}, +{0x11633, 0x1163a, NSM}, +{0x1163b, 0x1163c, L}, +{0x1163d, 0x1163d, NSM}, +{0x1163e, 0x1163e, L}, +{0x1163f, 0x11640, NSM}, +{0x11641, 0x11644, L}, +{0x11650, 0x11659, L}, +{0x11680, 0x116aa, L}, +{0x116ab, 0x116ab, NSM}, +{0x116ac, 0x116ac, L}, +{0x116ad, 0x116ad, NSM}, +{0x116ae, 0x116af, L}, +{0x116b0, 0x116b5, NSM}, +{0x116b6, 0x116b6, L}, +{0x116b7, 0x116b7, NSM}, +{0x116b8, 0x116b9, L}, +{0x116c0, 0x116c9, L}, +{0x11700, 0x1171a, L}, +{0x1171d, 0x1171f, NSM}, +{0x11720, 0x11721, L}, +{0x11722, 0x11725, NSM}, +{0x11726, 0x11726, L}, +{0x11727, 0x1172b, NSM}, +{0x11730, 0x11746, L}, +{0x11800, 0x1182e, L}, +{0x1182f, 0x11837, NSM}, +{0x11838, 0x11838, L}, +{0x11839, 0x1183a, NSM}, +{0x1183b, 0x1183b, L}, +{0x118a0, 0x118f2, L}, +{0x118ff, 0x11906, L}, +{0x11909, 0x11909, L}, +{0x1190c, 0x11913, L}, +{0x11915, 0x11916, L}, +{0x11918, 0x11935, L}, +{0x11937, 0x11938, L}, +{0x1193b, 0x1193c, NSM}, +{0x1193d, 0x1193d, L}, +{0x1193e, 0x1193e, NSM}, +{0x1193f, 0x11942, L}, +{0x11943, 0x11943, NSM}, +{0x11944, 0x11946, L}, +{0x11950, 0x11959, L}, +{0x119a0, 0x119a7, L}, +{0x119aa, 0x119d3, L}, +{0x119d4, 0x119d7, NSM}, +{0x119da, 0x119db, NSM}, +{0x119dc, 0x119df, L}, +{0x119e0, 0x119e0, NSM}, +{0x119e1, 0x119e4, L}, +{0x11a00, 0x11a00, L}, +{0x11a01, 0x11a06, NSM}, +{0x11a07, 0x11a08, L}, +{0x11a09, 0x11a0a, NSM}, +{0x11a0b, 0x11a32, L}, +{0x11a33, 0x11a38, NSM}, +{0x11a39, 0x11a3a, L}, +{0x11a3b, 0x11a3e, NSM}, +{0x11a3f, 0x11a46, L}, +{0x11a47, 0x11a47, NSM}, +{0x11a50, 0x11a50, L}, +{0x11a51, 0x11a56, NSM}, +{0x11a57, 0x11a58, L}, +{0x11a59, 0x11a5b, NSM}, +{0x11a5c, 0x11a89, L}, +{0x11a8a, 0x11a96, NSM}, +{0x11a97, 0x11a97, L}, +{0x11a98, 0x11a99, NSM}, +{0x11a9a, 0x11aa2, L}, +{0x11ab0, 0x11af8, L}, +{0x11c00, 0x11c08, L}, +{0x11c0a, 0x11c2f, L}, +{0x11c30, 0x11c36, NSM}, +{0x11c38, 0x11c3d, NSM}, +{0x11c3e, 0x11c45, L}, +{0x11c50, 0x11c6c, L}, +{0x11c70, 0x11c8f, L}, +{0x11c92, 0x11ca7, NSM}, +{0x11ca9, 0x11ca9, L}, +{0x11caa, 0x11cb0, NSM}, +{0x11cb1, 0x11cb1, L}, +{0x11cb2, 0x11cb3, NSM}, +{0x11cb4, 0x11cb4, L}, +{0x11cb5, 0x11cb6, NSM}, +{0x11d00, 0x11d06, L}, +{0x11d08, 0x11d09, L}, +{0x11d0b, 0x11d30, L}, +{0x11d31, 0x11d36, NSM}, +{0x11d3a, 0x11d3a, NSM}, +{0x11d3c, 0x11d3d, NSM}, +{0x11d3f, 0x11d45, NSM}, +{0x11d46, 0x11d46, L}, +{0x11d47, 0x11d47, NSM}, +{0x11d50, 0x11d59, L}, +{0x11d60, 0x11d65, L}, +{0x11d67, 0x11d68, L}, +{0x11d6a, 0x11d8e, L}, +{0x11d90, 0x11d91, NSM}, +{0x11d93, 0x11d94, L}, +{0x11d95, 0x11d95, NSM}, +{0x11d96, 0x11d96, L}, +{0x11d97, 0x11d97, NSM}, +{0x11d98, 0x11d98, L}, +{0x11da0, 0x11da9, L}, +{0x11ee0, 0x11ef2, L}, +{0x11ef3, 0x11ef4, NSM}, +{0x11ef5, 0x11ef8, L}, +{0x11fb0, 0x11fb0, L}, +{0x11fc0, 0x11fd4, L}, +{0x11fdd, 0x11fe0, ET}, +{0x11fff, 0x12399, L}, +{0x12400, 0x1246e, L}, +{0x12470, 0x12474, L}, +{0x12480, 0x12543, L}, +{0x12f90, 0x12ff2, L}, +{0x13000, 0x1342e, L}, +{0x13430, 0x13438, L}, +{0x14400, 0x14646, L}, +{0x16800, 0x16a38, L}, +{0x16a40, 0x16a5e, L}, +{0x16a60, 0x16a69, L}, +{0x16a6e, 0x16abe, L}, +{0x16ac0, 0x16ac9, L}, +{0x16ad0, 0x16aed, L}, +{0x16af0, 0x16af4, NSM}, +{0x16af5, 0x16af5, L}, +{0x16b00, 0x16b2f, L}, +{0x16b30, 0x16b36, NSM}, +{0x16b37, 0x16b45, L}, +{0x16b50, 0x16b59, L}, +{0x16b5b, 0x16b61, L}, +{0x16b63, 0x16b77, L}, +{0x16b7d, 0x16b8f, L}, +{0x16e40, 0x16e9a, L}, +{0x16f00, 0x16f4a, L}, +{0x16f4f, 0x16f4f, NSM}, +{0x16f50, 0x16f87, L}, +{0x16f8f, 0x16f92, NSM}, +{0x16f93, 0x16f9f, L}, +{0x16fe0, 0x16fe1, L}, +{0x16fe3, 0x16fe3, L}, +{0x16fe4, 0x16fe4, NSM}, +{0x16ff0, 0x16ff1, L}, +{0x17000, 0x187f7, L}, +{0x18800, 0x18cd5, L}, +{0x18d00, 0x18d08, L}, +{0x1aff0, 0x1aff3, L}, +{0x1aff5, 0x1affb, L}, +{0x1affd, 0x1affe, L}, +{0x1b000, 0x1b122, L}, +{0x1b150, 0x1b152, L}, +{0x1b164, 0x1b167, L}, +{0x1b170, 0x1b2fb, L}, +{0x1bc00, 0x1bc6a, L}, +{0x1bc70, 0x1bc7c, L}, +{0x1bc80, 0x1bc88, L}, +{0x1bc90, 0x1bc99, L}, +{0x1bc9c, 0x1bc9c, L}, +{0x1bc9d, 0x1bc9e, NSM}, +{0x1bc9f, 0x1bc9f, L}, +{0x1bca0, 0x1bca3, BN}, +{0x1cf00, 0x1cf2d, NSM}, +{0x1cf30, 0x1cf46, NSM}, +{0x1cf50, 0x1cfc3, L}, +{0x1d000, 0x1d0f5, L}, +{0x1d100, 0x1d126, L}, +{0x1d129, 0x1d166, L}, +{0x1d167, 0x1d169, NSM}, +{0x1d16a, 0x1d172, L}, +{0x1d173, 0x1d17a, BN}, +{0x1d17b, 0x1d182, NSM}, +{0x1d183, 0x1d184, L}, +{0x1d185, 0x1d18b, NSM}, +{0x1d18c, 0x1d1a9, L}, +{0x1d1aa, 0x1d1ad, NSM}, +{0x1d1ae, 0x1d1e8, L}, +{0x1d242, 0x1d244, NSM}, +{0x1d2e0, 0x1d2f3, L}, +{0x1d360, 0x1d378, L}, +{0x1d400, 0x1d454, L}, +{0x1d456, 0x1d49c, L}, +{0x1d49e, 0x1d49f, L}, +{0x1d4a2, 0x1d4a2, L}, +{0x1d4a5, 0x1d4a6, L}, +{0x1d4a9, 0x1d4ac, L}, +{0x1d4ae, 0x1d4b9, L}, +{0x1d4bb, 0x1d4bb, L}, +{0x1d4bd, 0x1d4c3, L}, +{0x1d4c5, 0x1d505, L}, +{0x1d507, 0x1d50a, L}, +{0x1d50d, 0x1d514, L}, +{0x1d516, 0x1d51c, L}, +{0x1d51e, 0x1d539, L}, +{0x1d53b, 0x1d53e, L}, +{0x1d540, 0x1d544, L}, +{0x1d546, 0x1d546, L}, +{0x1d54a, 0x1d550, L}, +{0x1d552, 0x1d6a5, L}, +{0x1d6a8, 0x1d6da, L}, +{0x1d6dc, 0x1d714, L}, +{0x1d716, 0x1d74e, L}, +{0x1d750, 0x1d788, L}, +{0x1d78a, 0x1d7c2, L}, +{0x1d7c4, 0x1d7cb, L}, +{0x1d7ce, 0x1d7ff, EN}, +{0x1d800, 0x1d9ff, L}, +{0x1da00, 0x1da36, NSM}, +{0x1da37, 0x1da3a, L}, +{0x1da3b, 0x1da6c, NSM}, +{0x1da6d, 0x1da74, L}, +{0x1da75, 0x1da75, NSM}, +{0x1da76, 0x1da83, L}, +{0x1da84, 0x1da84, NSM}, +{0x1da85, 0x1da8b, L}, +{0x1da9b, 0x1da9f, NSM}, +{0x1daa1, 0x1daaf, NSM}, +{0x1df00, 0x1df1e, L}, +{0x1e000, 0x1e006, NSM}, +{0x1e008, 0x1e018, NSM}, +{0x1e01b, 0x1e021, NSM}, +{0x1e023, 0x1e024, NSM}, +{0x1e026, 0x1e02a, NSM}, +{0x1e100, 0x1e12c, L}, +{0x1e130, 0x1e136, NSM}, +{0x1e137, 0x1e13d, L}, +{0x1e140, 0x1e149, L}, +{0x1e14e, 0x1e14f, L}, +{0x1e290, 0x1e2ad, L}, +{0x1e2ae, 0x1e2ae, NSM}, +{0x1e2c0, 0x1e2eb, L}, +{0x1e2ec, 0x1e2ef, NSM}, +{0x1e2f0, 0x1e2f9, L}, +{0x1e2ff, 0x1e2ff, ET}, +{0x1e7e0, 0x1e7e6, L}, +{0x1e7e8, 0x1e7eb, L}, +{0x1e7ed, 0x1e7ee, L}, +{0x1e7f0, 0x1e7fe, L}, +{0x1e800, 0x1e8c4, R}, +{0x1e8c7, 0x1e8cf, R}, +{0x1e8d0, 0x1e8d6, NSM}, +{0x1e900, 0x1e943, R}, +{0x1e944, 0x1e94a, NSM}, +{0x1e94b, 0x1e94b, R}, +{0x1e950, 0x1e959, R}, +{0x1e95e, 0x1e95f, R}, +{0x1ec71, 0x1ecb4, AL}, +{0x1ed01, 0x1ed3d, AL}, +{0x1ee00, 0x1ee03, AL}, +{0x1ee05, 0x1ee1f, AL}, +{0x1ee21, 0x1ee22, AL}, +{0x1ee24, 0x1ee24, AL}, +{0x1ee27, 0x1ee27, AL}, +{0x1ee29, 0x1ee32, AL}, +{0x1ee34, 0x1ee37, AL}, +{0x1ee39, 0x1ee39, AL}, +{0x1ee3b, 0x1ee3b, AL}, +{0x1ee42, 0x1ee42, AL}, +{0x1ee47, 0x1ee47, AL}, +{0x1ee49, 0x1ee49, AL}, +{0x1ee4b, 0x1ee4b, AL}, +{0x1ee4d, 0x1ee4f, AL}, +{0x1ee51, 0x1ee52, AL}, +{0x1ee54, 0x1ee54, AL}, +{0x1ee57, 0x1ee57, AL}, +{0x1ee59, 0x1ee59, AL}, +{0x1ee5b, 0x1ee5b, AL}, +{0x1ee5d, 0x1ee5d, AL}, +{0x1ee5f, 0x1ee5f, AL}, +{0x1ee61, 0x1ee62, AL}, +{0x1ee64, 0x1ee64, AL}, +{0x1ee67, 0x1ee6a, AL}, +{0x1ee6c, 0x1ee72, AL}, +{0x1ee74, 0x1ee77, AL}, +{0x1ee79, 0x1ee7c, AL}, +{0x1ee7e, 0x1ee7e, AL}, +{0x1ee80, 0x1ee89, AL}, +{0x1ee8b, 0x1ee9b, AL}, +{0x1eea1, 0x1eea3, AL}, +{0x1eea5, 0x1eea9, AL}, +{0x1eeab, 0x1eebb, AL}, +{0x1f100, 0x1f10a, EN}, +{0x1f110, 0x1f12e, L}, +{0x1f130, 0x1f169, L}, +{0x1f170, 0x1f1ac, L}, +{0x1f1e6, 0x1f202, L}, +{0x1f210, 0x1f23b, L}, +{0x1f240, 0x1f248, L}, +{0x1f250, 0x1f251, L}, +{0x1fbf0, 0x1fbf9, EN}, +{0x20000, 0x2a6df, L}, +{0x2a700, 0x2b738, L}, +{0x2b740, 0x2b81d, L}, +{0x2b820, 0x2cea1, L}, +{0x2ceb0, 0x2ebe0, L}, +{0x2f800, 0x2fa1d, L}, +{0x30000, 0x3134a, L}, +{0xe0001, 0xe0001, BN}, +{0xe0020, 0xe007f, BN}, +{0xe0100, 0xe01ef, NSM}, +{0xf0000, 0xffffd, L}, +{0x100000, 0x10fffd, L}, diff --git a/unicode/nonspacing_chars.h b/unicode/nonspacing_chars.h new file mode 100644 index 00000000..6fe6f634 --- /dev/null +++ b/unicode/nonspacing_chars.h @@ -0,0 +1,357 @@ +/* + * Autogenerated by read_ucd.py from The Unicode Standard 14.0.0 + * + * Identify Unicode characters that occupy no character cells of a + * terminal. + * + * Used by utils/wcwidth.c. + */ + +{0x0300, 0x036f}, +{0x0483, 0x0489}, +{0x0591, 0x05bd}, +{0x05bf, 0x05bf}, +{0x05c1, 0x05c2}, +{0x05c4, 0x05c5}, +{0x05c7, 0x05c7}, +{0x0600, 0x0605}, +{0x0610, 0x061a}, +{0x061c, 0x061c}, +{0x064b, 0x065f}, +{0x0670, 0x0670}, +{0x06d6, 0x06dd}, +{0x06df, 0x06e4}, +{0x06e7, 0x06e8}, +{0x06ea, 0x06ed}, +{0x070f, 0x070f}, +{0x0711, 0x0711}, +{0x0730, 0x074a}, +{0x07a6, 0x07b0}, +{0x07eb, 0x07f3}, +{0x07fd, 0x07fd}, +{0x0816, 0x0819}, +{0x081b, 0x0823}, +{0x0825, 0x0827}, +{0x0829, 0x082d}, +{0x0859, 0x085b}, +{0x0890, 0x0891}, +{0x0898, 0x089f}, +{0x08ca, 0x0902}, +{0x093a, 0x093a}, +{0x093c, 0x093c}, +{0x0941, 0x0948}, +{0x094d, 0x094d}, +{0x0951, 0x0957}, +{0x0962, 0x0963}, +{0x0981, 0x0981}, +{0x09bc, 0x09bc}, +{0x09c1, 0x09c4}, +{0x09cd, 0x09cd}, +{0x09e2, 0x09e3}, +{0x09fe, 0x09fe}, +{0x0a01, 0x0a02}, +{0x0a3c, 0x0a3c}, +{0x0a41, 0x0a42}, +{0x0a47, 0x0a48}, +{0x0a4b, 0x0a4d}, +{0x0a51, 0x0a51}, +{0x0a70, 0x0a71}, +{0x0a75, 0x0a75}, +{0x0a81, 0x0a82}, +{0x0abc, 0x0abc}, +{0x0ac1, 0x0ac5}, +{0x0ac7, 0x0ac8}, +{0x0acd, 0x0acd}, +{0x0ae2, 0x0ae3}, +{0x0afa, 0x0aff}, +{0x0b01, 0x0b01}, +{0x0b3c, 0x0b3c}, +{0x0b3f, 0x0b3f}, +{0x0b41, 0x0b44}, +{0x0b4d, 0x0b4d}, +{0x0b55, 0x0b56}, +{0x0b62, 0x0b63}, +{0x0b82, 0x0b82}, +{0x0bc0, 0x0bc0}, +{0x0bcd, 0x0bcd}, +{0x0c00, 0x0c00}, +{0x0c04, 0x0c04}, +{0x0c3c, 0x0c3c}, +{0x0c3e, 0x0c40}, +{0x0c46, 0x0c48}, +{0x0c4a, 0x0c4d}, +{0x0c55, 0x0c56}, +{0x0c62, 0x0c63}, +{0x0c81, 0x0c81}, +{0x0cbc, 0x0cbc}, +{0x0cbf, 0x0cbf}, +{0x0cc6, 0x0cc6}, +{0x0ccc, 0x0ccd}, +{0x0ce2, 0x0ce3}, +{0x0d00, 0x0d01}, +{0x0d3b, 0x0d3c}, +{0x0d41, 0x0d44}, +{0x0d4d, 0x0d4d}, +{0x0d62, 0x0d63}, +{0x0d81, 0x0d81}, +{0x0dca, 0x0dca}, +{0x0dd2, 0x0dd4}, +{0x0dd6, 0x0dd6}, +{0x0e31, 0x0e31}, +{0x0e34, 0x0e3a}, +{0x0e47, 0x0e4e}, +{0x0eb1, 0x0eb1}, +{0x0eb4, 0x0ebc}, +{0x0ec8, 0x0ecd}, +{0x0f18, 0x0f19}, +{0x0f35, 0x0f35}, +{0x0f37, 0x0f37}, +{0x0f39, 0x0f39}, +{0x0f71, 0x0f7e}, +{0x0f80, 0x0f84}, +{0x0f86, 0x0f87}, +{0x0f8d, 0x0f97}, +{0x0f99, 0x0fbc}, +{0x0fc6, 0x0fc6}, +{0x102d, 0x1030}, +{0x1032, 0x1037}, +{0x1039, 0x103a}, +{0x103d, 0x103e}, +{0x1058, 0x1059}, +{0x105e, 0x1060}, +{0x1071, 0x1074}, +{0x1082, 0x1082}, +{0x1085, 0x1086}, +{0x108d, 0x108d}, +{0x109d, 0x109d}, +{0x1160, 0x11ff}, +{0x135d, 0x135f}, +{0x1712, 0x1714}, +{0x1732, 0x1733}, +{0x1752, 0x1753}, +{0x1772, 0x1773}, +{0x17b4, 0x17b5}, +{0x17b7, 0x17bd}, +{0x17c6, 0x17c6}, +{0x17c9, 0x17d3}, +{0x17dd, 0x17dd}, +{0x180b, 0x180f}, +{0x1885, 0x1886}, +{0x18a9, 0x18a9}, +{0x1920, 0x1922}, +{0x1927, 0x1928}, +{0x1932, 0x1932}, +{0x1939, 0x193b}, +{0x1a17, 0x1a18}, +{0x1a1b, 0x1a1b}, +{0x1a56, 0x1a56}, +{0x1a58, 0x1a5e}, +{0x1a60, 0x1a60}, +{0x1a62, 0x1a62}, +{0x1a65, 0x1a6c}, +{0x1a73, 0x1a7c}, +{0x1a7f, 0x1a7f}, +{0x1ab0, 0x1ace}, +{0x1b00, 0x1b03}, +{0x1b34, 0x1b34}, +{0x1b36, 0x1b3a}, +{0x1b3c, 0x1b3c}, +{0x1b42, 0x1b42}, +{0x1b6b, 0x1b73}, +{0x1b80, 0x1b81}, +{0x1ba2, 0x1ba5}, +{0x1ba8, 0x1ba9}, +{0x1bab, 0x1bad}, +{0x1be6, 0x1be6}, +{0x1be8, 0x1be9}, +{0x1bed, 0x1bed}, +{0x1bef, 0x1bf1}, +{0x1c2c, 0x1c33}, +{0x1c36, 0x1c37}, +{0x1cd0, 0x1cd2}, +{0x1cd4, 0x1ce0}, +{0x1ce2, 0x1ce8}, +{0x1ced, 0x1ced}, +{0x1cf4, 0x1cf4}, +{0x1cf8, 0x1cf9}, +{0x1dc0, 0x1dff}, +{0x200b, 0x200f}, +{0x202a, 0x202e}, +{0x2060, 0x2064}, +{0x2066, 0x206f}, +{0x20d0, 0x20f0}, +{0x2cef, 0x2cf1}, +{0x2d7f, 0x2d7f}, +{0x2de0, 0x2dff}, +{0x302a, 0x302d}, +{0x3099, 0x309a}, +{0xa66f, 0xa672}, +{0xa674, 0xa67d}, +{0xa69e, 0xa69f}, +{0xa6f0, 0xa6f1}, +{0xa802, 0xa802}, +{0xa806, 0xa806}, +{0xa80b, 0xa80b}, +{0xa825, 0xa826}, +{0xa82c, 0xa82c}, +{0xa8c4, 0xa8c5}, +{0xa8e0, 0xa8f1}, +{0xa8ff, 0xa8ff}, +{0xa926, 0xa92d}, +{0xa947, 0xa951}, +{0xa980, 0xa982}, +{0xa9b3, 0xa9b3}, +{0xa9b6, 0xa9b9}, +{0xa9bc, 0xa9bd}, +{0xa9e5, 0xa9e5}, +{0xaa29, 0xaa2e}, +{0xaa31, 0xaa32}, +{0xaa35, 0xaa36}, +{0xaa43, 0xaa43}, +{0xaa4c, 0xaa4c}, +{0xaa7c, 0xaa7c}, +{0xaab0, 0xaab0}, +{0xaab2, 0xaab4}, +{0xaab7, 0xaab8}, +{0xaabe, 0xaabf}, +{0xaac1, 0xaac1}, +{0xaaec, 0xaaed}, +{0xaaf6, 0xaaf6}, +{0xabe5, 0xabe5}, +{0xabe8, 0xabe8}, +{0xabed, 0xabed}, +{0xfb1e, 0xfb1e}, +{0xfe00, 0xfe0f}, +{0xfe20, 0xfe2f}, +{0xfeff, 0xfeff}, +{0xfff9, 0xfffb}, +{0x101fd, 0x101fd}, +{0x102e0, 0x102e0}, +{0x10376, 0x1037a}, +{0x10a01, 0x10a03}, +{0x10a05, 0x10a06}, +{0x10a0c, 0x10a0f}, +{0x10a38, 0x10a3a}, +{0x10a3f, 0x10a3f}, +{0x10ae5, 0x10ae6}, +{0x10d24, 0x10d27}, +{0x10eab, 0x10eac}, +{0x10f46, 0x10f50}, +{0x10f82, 0x10f85}, +{0x11001, 0x11001}, +{0x11038, 0x11046}, +{0x11070, 0x11070}, +{0x11073, 0x11074}, +{0x1107f, 0x11081}, +{0x110b3, 0x110b6}, +{0x110b9, 0x110ba}, +{0x110bd, 0x110bd}, +{0x110c2, 0x110c2}, +{0x110cd, 0x110cd}, +{0x11100, 0x11102}, +{0x11127, 0x1112b}, +{0x1112d, 0x11134}, +{0x11173, 0x11173}, +{0x11180, 0x11181}, +{0x111b6, 0x111be}, +{0x111c9, 0x111cc}, +{0x111cf, 0x111cf}, +{0x1122f, 0x11231}, +{0x11234, 0x11234}, +{0x11236, 0x11237}, +{0x1123e, 0x1123e}, +{0x112df, 0x112df}, +{0x112e3, 0x112ea}, +{0x11300, 0x11301}, +{0x1133b, 0x1133c}, +{0x11340, 0x11340}, +{0x11366, 0x1136c}, +{0x11370, 0x11374}, +{0x11438, 0x1143f}, +{0x11442, 0x11444}, +{0x11446, 0x11446}, +{0x1145e, 0x1145e}, +{0x114b3, 0x114b8}, +{0x114ba, 0x114ba}, +{0x114bf, 0x114c0}, +{0x114c2, 0x114c3}, +{0x115b2, 0x115b5}, +{0x115bc, 0x115bd}, +{0x115bf, 0x115c0}, +{0x115dc, 0x115dd}, +{0x11633, 0x1163a}, +{0x1163d, 0x1163d}, +{0x1163f, 0x11640}, +{0x116ab, 0x116ab}, +{0x116ad, 0x116ad}, +{0x116b0, 0x116b5}, +{0x116b7, 0x116b7}, +{0x1171d, 0x1171f}, +{0x11722, 0x11725}, +{0x11727, 0x1172b}, +{0x1182f, 0x11837}, +{0x11839, 0x1183a}, +{0x1193b, 0x1193c}, +{0x1193e, 0x1193e}, +{0x11943, 0x11943}, +{0x119d4, 0x119d7}, +{0x119da, 0x119db}, +{0x119e0, 0x119e0}, +{0x11a01, 0x11a0a}, +{0x11a33, 0x11a38}, +{0x11a3b, 0x11a3e}, +{0x11a47, 0x11a47}, +{0x11a51, 0x11a56}, +{0x11a59, 0x11a5b}, +{0x11a8a, 0x11a96}, +{0x11a98, 0x11a99}, +{0x11c30, 0x11c36}, +{0x11c38, 0x11c3d}, +{0x11c3f, 0x11c3f}, +{0x11c92, 0x11ca7}, +{0x11caa, 0x11cb0}, +{0x11cb2, 0x11cb3}, +{0x11cb5, 0x11cb6}, +{0x11d31, 0x11d36}, +{0x11d3a, 0x11d3a}, +{0x11d3c, 0x11d3d}, +{0x11d3f, 0x11d45}, +{0x11d47, 0x11d47}, +{0x11d90, 0x11d91}, +{0x11d95, 0x11d95}, +{0x11d97, 0x11d97}, +{0x11ef3, 0x11ef4}, +{0x13430, 0x13438}, +{0x16af0, 0x16af4}, +{0x16b30, 0x16b36}, +{0x16f4f, 0x16f4f}, +{0x16f8f, 0x16f92}, +{0x16fe4, 0x16fe4}, +{0x1bc9d, 0x1bc9e}, +{0x1bca0, 0x1bca3}, +{0x1cf00, 0x1cf2d}, +{0x1cf30, 0x1cf46}, +{0x1d167, 0x1d169}, +{0x1d173, 0x1d182}, +{0x1d185, 0x1d18b}, +{0x1d1aa, 0x1d1ad}, +{0x1d242, 0x1d244}, +{0x1da00, 0x1da36}, +{0x1da3b, 0x1da6c}, +{0x1da75, 0x1da75}, +{0x1da84, 0x1da84}, +{0x1da9b, 0x1da9f}, +{0x1daa1, 0x1daaf}, +{0x1e000, 0x1e006}, +{0x1e008, 0x1e018}, +{0x1e01b, 0x1e021}, +{0x1e023, 0x1e024}, +{0x1e026, 0x1e02a}, +{0x1e130, 0x1e136}, +{0x1e2ae, 0x1e2ae}, +{0x1e2ec, 0x1e2ef}, +{0x1e8d0, 0x1e8d6}, +{0x1e944, 0x1e94a}, +{0xe0001, 0xe0001}, +{0xe0020, 0xe007f}, +{0xe0100, 0xe01ef}, diff --git a/unicode/version.h b/unicode/version.h new file mode 100644 index 00000000..ef511991 --- /dev/null +++ b/unicode/version.h @@ -0,0 +1,9 @@ +/* + * Autogenerated by read_ucd.py from The Unicode Standard 15.0.0 + * + * String literals giving the currently supported version of Unicode. + * Useful for error messages and 'about' boxes. + */ + +#define UNICODE_VERSION_FULL "The Unicode Standard 15.0.0" +#define UNICODE_VERSION_SHORT "15.0.0" diff --git a/unicode/wide_chars.h b/unicode/wide_chars.h new file mode 100644 index 00000000..c045f21f --- /dev/null +++ b/unicode/wide_chars.h @@ -0,0 +1,130 @@ +/* + * Autogenerated by read_ucd.py from The Unicode Standard 14.0.0 + * + * Identify Unicode characters that occupy two adjacent character cells + * in a terminal. + * + * Used by utils/wcwidth.c. + */ + +{0x1100, 0x115f}, +{0x231a, 0x231b}, +{0x2329, 0x232a}, +{0x23e9, 0x23ec}, +{0x23f0, 0x23f0}, +{0x23f3, 0x23f3}, +{0x25fd, 0x25fe}, +{0x2614, 0x2615}, +{0x2648, 0x2653}, +{0x267f, 0x267f}, +{0x2693, 0x2693}, +{0x26a1, 0x26a1}, +{0x26aa, 0x26ab}, +{0x26bd, 0x26be}, +{0x26c4, 0x26c5}, +{0x26ce, 0x26ce}, +{0x26d4, 0x26d4}, +{0x26ea, 0x26ea}, +{0x26f2, 0x26f3}, +{0x26f5, 0x26f5}, +{0x26fa, 0x26fa}, +{0x26fd, 0x26fd}, +{0x2705, 0x2705}, +{0x270a, 0x270b}, +{0x2728, 0x2728}, +{0x274c, 0x274c}, +{0x274e, 0x274e}, +{0x2753, 0x2755}, +{0x2757, 0x2757}, +{0x2795, 0x2797}, +{0x27b0, 0x27b0}, +{0x27bf, 0x27bf}, +{0x2b1b, 0x2b1c}, +{0x2b50, 0x2b50}, +{0x2b55, 0x2b55}, +{0x2e80, 0x2e99}, +{0x2e9b, 0x2ef3}, +{0x2f00, 0x2fd5}, +{0x2ff0, 0x2ffb}, +{0x3000, 0x303e}, +{0x3041, 0x3096}, +{0x3099, 0x30ff}, +{0x3105, 0x312f}, +{0x3131, 0x318e}, +{0x3190, 0x31e3}, +{0x31f0, 0x321e}, +{0x3220, 0x3247}, +{0x3250, 0x4dbf}, +{0x4e00, 0xa48c}, +{0xa490, 0xa4c6}, +{0xa960, 0xa97c}, +{0xac00, 0xd7a3}, +{0xf900, 0xfaff}, +{0xfe10, 0xfe19}, +{0xfe30, 0xfe52}, +{0xfe54, 0xfe66}, +{0xfe68, 0xfe6b}, +{0xff01, 0xff60}, +{0xffe0, 0xffe6}, +{0x16fe0, 0x16fe4}, +{0x16ff0, 0x16ff1}, +{0x17000, 0x187f7}, +{0x18800, 0x18cd5}, +{0x18d00, 0x18d08}, +{0x1aff0, 0x1aff3}, +{0x1aff5, 0x1affb}, +{0x1affd, 0x1affe}, +{0x1b000, 0x1b122}, +{0x1b150, 0x1b152}, +{0x1b164, 0x1b167}, +{0x1b170, 0x1b2fb}, +{0x1f004, 0x1f004}, +{0x1f0cf, 0x1f0cf}, +{0x1f18e, 0x1f18e}, +{0x1f191, 0x1f19a}, +{0x1f200, 0x1f202}, +{0x1f210, 0x1f23b}, +{0x1f240, 0x1f248}, +{0x1f250, 0x1f251}, +{0x1f260, 0x1f265}, +{0x1f300, 0x1f320}, +{0x1f32d, 0x1f335}, +{0x1f337, 0x1f37c}, +{0x1f37e, 0x1f393}, +{0x1f3a0, 0x1f3ca}, +{0x1f3cf, 0x1f3d3}, +{0x1f3e0, 0x1f3f0}, +{0x1f3f4, 0x1f3f4}, +{0x1f3f8, 0x1f43e}, +{0x1f440, 0x1f440}, +{0x1f442, 0x1f4fc}, +{0x1f4ff, 0x1f53d}, +{0x1f54b, 0x1f54e}, +{0x1f550, 0x1f567}, +{0x1f57a, 0x1f57a}, +{0x1f595, 0x1f596}, +{0x1f5a4, 0x1f5a4}, +{0x1f5fb, 0x1f64f}, +{0x1f680, 0x1f6c5}, +{0x1f6cc, 0x1f6cc}, +{0x1f6d0, 0x1f6d2}, +{0x1f6d5, 0x1f6d7}, +{0x1f6dd, 0x1f6df}, +{0x1f6eb, 0x1f6ec}, +{0x1f6f4, 0x1f6fc}, +{0x1f7e0, 0x1f7eb}, +{0x1f7f0, 0x1f7f0}, +{0x1f90c, 0x1f93a}, +{0x1f93c, 0x1f945}, +{0x1f947, 0x1f9ff}, +{0x1fa70, 0x1fa74}, +{0x1fa78, 0x1fa7c}, +{0x1fa80, 0x1fa86}, +{0x1fa90, 0x1faac}, +{0x1fab0, 0x1faba}, +{0x1fac0, 0x1fac5}, +{0x1fad0, 0x1fad9}, +{0x1fae0, 0x1fae7}, +{0x1faf0, 0x1faf6}, +{0x20000, 0x2fffd}, +{0x30000, 0x3fffd}, diff --git a/utils/wcwidth.c b/utils/wcwidth.c index 7705d984..018e4c5b 100644 --- a/utils/wcwidth.c +++ b/utils/wcwidth.c @@ -124,509 +124,13 @@ static bool bisearch(unsigned int ucs, const struct interval *table, int max) { int mk_wcwidth(unsigned int ucs) { /* sorted list of non-overlapping intervals of non-spacing characters */ - /* generated by the following Perl - * from the Unicode 14.0.0 data files available at: - * https://www.unicode.org/Public/14.0.0/ucd/ - -open DATA, "<", "UnicodeData.txt" || die "$!"; -while () { - @fields = split /;/; - $chr = hex $fields[0]; - $cat = $fields[2]; - $include = ($cat eq "Me" || $cat eq "Mn" || $cat eq "Cf"); - $include = 0 if ($chr == 0x00AD); - $include = 1 if (0x1160 <= $chr && $chr <= 0x11FF); - $include = 1 if ($chr == 0x200B); - $chrs{$chr} = $include; -} -close DATA; -for ($chr = 0; $chr < 0x110000; $chr++) { - if ($chrs{$chr}) { - $start = $chr; - $chr++ while $chrs{$chr}; - printf " { 0x%04X, 0x%04X },\n", $start, $chr-1; - } -} - - */ static const struct interval combining[] = { - { 0x0300, 0x036F }, - { 0x0483, 0x0489 }, - { 0x0591, 0x05BD }, - { 0x05BF, 0x05BF }, - { 0x05C1, 0x05C2 }, - { 0x05C4, 0x05C5 }, - { 0x05C7, 0x05C7 }, - { 0x0600, 0x0605 }, - { 0x0610, 0x061A }, - { 0x061C, 0x061C }, - { 0x064B, 0x065F }, - { 0x0670, 0x0670 }, - { 0x06D6, 0x06DD }, - { 0x06DF, 0x06E4 }, - { 0x06E7, 0x06E8 }, - { 0x06EA, 0x06ED }, - { 0x070F, 0x070F }, - { 0x0711, 0x0711 }, - { 0x0730, 0x074A }, - { 0x07A6, 0x07B0 }, - { 0x07EB, 0x07F3 }, - { 0x07FD, 0x07FD }, - { 0x0816, 0x0819 }, - { 0x081B, 0x0823 }, - { 0x0825, 0x0827 }, - { 0x0829, 0x082D }, - { 0x0859, 0x085B }, - { 0x0890, 0x0891 }, - { 0x0898, 0x089F }, - { 0x08CA, 0x0902 }, - { 0x093A, 0x093A }, - { 0x093C, 0x093C }, - { 0x0941, 0x0948 }, - { 0x094D, 0x094D }, - { 0x0951, 0x0957 }, - { 0x0962, 0x0963 }, - { 0x0981, 0x0981 }, - { 0x09BC, 0x09BC }, - { 0x09C1, 0x09C4 }, - { 0x09CD, 0x09CD }, - { 0x09E2, 0x09E3 }, - { 0x09FE, 0x09FE }, - { 0x0A01, 0x0A02 }, - { 0x0A3C, 0x0A3C }, - { 0x0A41, 0x0A42 }, - { 0x0A47, 0x0A48 }, - { 0x0A4B, 0x0A4D }, - { 0x0A51, 0x0A51 }, - { 0x0A70, 0x0A71 }, - { 0x0A75, 0x0A75 }, - { 0x0A81, 0x0A82 }, - { 0x0ABC, 0x0ABC }, - { 0x0AC1, 0x0AC5 }, - { 0x0AC7, 0x0AC8 }, - { 0x0ACD, 0x0ACD }, - { 0x0AE2, 0x0AE3 }, - { 0x0AFA, 0x0AFF }, - { 0x0B01, 0x0B01 }, - { 0x0B3C, 0x0B3C }, - { 0x0B3F, 0x0B3F }, - { 0x0B41, 0x0B44 }, - { 0x0B4D, 0x0B4D }, - { 0x0B55, 0x0B56 }, - { 0x0B62, 0x0B63 }, - { 0x0B82, 0x0B82 }, - { 0x0BC0, 0x0BC0 }, - { 0x0BCD, 0x0BCD }, - { 0x0C00, 0x0C00 }, - { 0x0C04, 0x0C04 }, - { 0x0C3C, 0x0C3C }, - { 0x0C3E, 0x0C40 }, - { 0x0C46, 0x0C48 }, - { 0x0C4A, 0x0C4D }, - { 0x0C55, 0x0C56 }, - { 0x0C62, 0x0C63 }, - { 0x0C81, 0x0C81 }, - { 0x0CBC, 0x0CBC }, - { 0x0CBF, 0x0CBF }, - { 0x0CC6, 0x0CC6 }, - { 0x0CCC, 0x0CCD }, - { 0x0CE2, 0x0CE3 }, - { 0x0D00, 0x0D01 }, - { 0x0D3B, 0x0D3C }, - { 0x0D41, 0x0D44 }, - { 0x0D4D, 0x0D4D }, - { 0x0D62, 0x0D63 }, - { 0x0D81, 0x0D81 }, - { 0x0DCA, 0x0DCA }, - { 0x0DD2, 0x0DD4 }, - { 0x0DD6, 0x0DD6 }, - { 0x0E31, 0x0E31 }, - { 0x0E34, 0x0E3A }, - { 0x0E47, 0x0E4E }, - { 0x0EB1, 0x0EB1 }, - { 0x0EB4, 0x0EBC }, - { 0x0EC8, 0x0ECD }, - { 0x0F18, 0x0F19 }, - { 0x0F35, 0x0F35 }, - { 0x0F37, 0x0F37 }, - { 0x0F39, 0x0F39 }, - { 0x0F71, 0x0F7E }, - { 0x0F80, 0x0F84 }, - { 0x0F86, 0x0F87 }, - { 0x0F8D, 0x0F97 }, - { 0x0F99, 0x0FBC }, - { 0x0FC6, 0x0FC6 }, - { 0x102D, 0x1030 }, - { 0x1032, 0x1037 }, - { 0x1039, 0x103A }, - { 0x103D, 0x103E }, - { 0x1058, 0x1059 }, - { 0x105E, 0x1060 }, - { 0x1071, 0x1074 }, - { 0x1082, 0x1082 }, - { 0x1085, 0x1086 }, - { 0x108D, 0x108D }, - { 0x109D, 0x109D }, - { 0x1160, 0x11FF }, - { 0x135D, 0x135F }, - { 0x1712, 0x1714 }, - { 0x1732, 0x1733 }, - { 0x1752, 0x1753 }, - { 0x1772, 0x1773 }, - { 0x17B4, 0x17B5 }, - { 0x17B7, 0x17BD }, - { 0x17C6, 0x17C6 }, - { 0x17C9, 0x17D3 }, - { 0x17DD, 0x17DD }, - { 0x180B, 0x180F }, - { 0x1885, 0x1886 }, - { 0x18A9, 0x18A9 }, - { 0x1920, 0x1922 }, - { 0x1927, 0x1928 }, - { 0x1932, 0x1932 }, - { 0x1939, 0x193B }, - { 0x1A17, 0x1A18 }, - { 0x1A1B, 0x1A1B }, - { 0x1A56, 0x1A56 }, - { 0x1A58, 0x1A5E }, - { 0x1A60, 0x1A60 }, - { 0x1A62, 0x1A62 }, - { 0x1A65, 0x1A6C }, - { 0x1A73, 0x1A7C }, - { 0x1A7F, 0x1A7F }, - { 0x1AB0, 0x1ACE }, - { 0x1B00, 0x1B03 }, - { 0x1B34, 0x1B34 }, - { 0x1B36, 0x1B3A }, - { 0x1B3C, 0x1B3C }, - { 0x1B42, 0x1B42 }, - { 0x1B6B, 0x1B73 }, - { 0x1B80, 0x1B81 }, - { 0x1BA2, 0x1BA5 }, - { 0x1BA8, 0x1BA9 }, - { 0x1BAB, 0x1BAD }, - { 0x1BE6, 0x1BE6 }, - { 0x1BE8, 0x1BE9 }, - { 0x1BED, 0x1BED }, - { 0x1BEF, 0x1BF1 }, - { 0x1C2C, 0x1C33 }, - { 0x1C36, 0x1C37 }, - { 0x1CD0, 0x1CD2 }, - { 0x1CD4, 0x1CE0 }, - { 0x1CE2, 0x1CE8 }, - { 0x1CED, 0x1CED }, - { 0x1CF4, 0x1CF4 }, - { 0x1CF8, 0x1CF9 }, - { 0x1DC0, 0x1DFF }, - { 0x200B, 0x200F }, - { 0x202A, 0x202E }, - { 0x2060, 0x2064 }, - { 0x2066, 0x206F }, - { 0x20D0, 0x20F0 }, - { 0x2CEF, 0x2CF1 }, - { 0x2D7F, 0x2D7F }, - { 0x2DE0, 0x2DFF }, - { 0x302A, 0x302D }, - { 0x3099, 0x309A }, - { 0xA66F, 0xA672 }, - { 0xA674, 0xA67D }, - { 0xA69E, 0xA69F }, - { 0xA6F0, 0xA6F1 }, - { 0xA802, 0xA802 }, - { 0xA806, 0xA806 }, - { 0xA80B, 0xA80B }, - { 0xA825, 0xA826 }, - { 0xA82C, 0xA82C }, - { 0xA8C4, 0xA8C5 }, - { 0xA8E0, 0xA8F1 }, - { 0xA8FF, 0xA8FF }, - { 0xA926, 0xA92D }, - { 0xA947, 0xA951 }, - { 0xA980, 0xA982 }, - { 0xA9B3, 0xA9B3 }, - { 0xA9B6, 0xA9B9 }, - { 0xA9BC, 0xA9BD }, - { 0xA9E5, 0xA9E5 }, - { 0xAA29, 0xAA2E }, - { 0xAA31, 0xAA32 }, - { 0xAA35, 0xAA36 }, - { 0xAA43, 0xAA43 }, - { 0xAA4C, 0xAA4C }, - { 0xAA7C, 0xAA7C }, - { 0xAAB0, 0xAAB0 }, - { 0xAAB2, 0xAAB4 }, - { 0xAAB7, 0xAAB8 }, - { 0xAABE, 0xAABF }, - { 0xAAC1, 0xAAC1 }, - { 0xAAEC, 0xAAED }, - { 0xAAF6, 0xAAF6 }, - { 0xABE5, 0xABE5 }, - { 0xABE8, 0xABE8 }, - { 0xABED, 0xABED }, - { 0xFB1E, 0xFB1E }, - { 0xFE00, 0xFE0F }, - { 0xFE20, 0xFE2F }, - { 0xFEFF, 0xFEFF }, - { 0xFFF9, 0xFFFB }, - { 0x101FD, 0x101FD }, - { 0x102E0, 0x102E0 }, - { 0x10376, 0x1037A }, - { 0x10A01, 0x10A03 }, - { 0x10A05, 0x10A06 }, - { 0x10A0C, 0x10A0F }, - { 0x10A38, 0x10A3A }, - { 0x10A3F, 0x10A3F }, - { 0x10AE5, 0x10AE6 }, - { 0x10D24, 0x10D27 }, - { 0x10EAB, 0x10EAC }, - { 0x10F46, 0x10F50 }, - { 0x10F82, 0x10F85 }, - { 0x11001, 0x11001 }, - { 0x11038, 0x11046 }, - { 0x11070, 0x11070 }, - { 0x11073, 0x11074 }, - { 0x1107F, 0x11081 }, - { 0x110B3, 0x110B6 }, - { 0x110B9, 0x110BA }, - { 0x110BD, 0x110BD }, - { 0x110C2, 0x110C2 }, - { 0x110CD, 0x110CD }, - { 0x11100, 0x11102 }, - { 0x11127, 0x1112B }, - { 0x1112D, 0x11134 }, - { 0x11173, 0x11173 }, - { 0x11180, 0x11181 }, - { 0x111B6, 0x111BE }, - { 0x111C9, 0x111CC }, - { 0x111CF, 0x111CF }, - { 0x1122F, 0x11231 }, - { 0x11234, 0x11234 }, - { 0x11236, 0x11237 }, - { 0x1123E, 0x1123E }, - { 0x112DF, 0x112DF }, - { 0x112E3, 0x112EA }, - { 0x11300, 0x11301 }, - { 0x1133B, 0x1133C }, - { 0x11340, 0x11340 }, - { 0x11366, 0x1136C }, - { 0x11370, 0x11374 }, - { 0x11438, 0x1143F }, - { 0x11442, 0x11444 }, - { 0x11446, 0x11446 }, - { 0x1145E, 0x1145E }, - { 0x114B3, 0x114B8 }, - { 0x114BA, 0x114BA }, - { 0x114BF, 0x114C0 }, - { 0x114C2, 0x114C3 }, - { 0x115B2, 0x115B5 }, - { 0x115BC, 0x115BD }, - { 0x115BF, 0x115C0 }, - { 0x115DC, 0x115DD }, - { 0x11633, 0x1163A }, - { 0x1163D, 0x1163D }, - { 0x1163F, 0x11640 }, - { 0x116AB, 0x116AB }, - { 0x116AD, 0x116AD }, - { 0x116B0, 0x116B5 }, - { 0x116B7, 0x116B7 }, - { 0x1171D, 0x1171F }, - { 0x11722, 0x11725 }, - { 0x11727, 0x1172B }, - { 0x1182F, 0x11837 }, - { 0x11839, 0x1183A }, - { 0x1193B, 0x1193C }, - { 0x1193E, 0x1193E }, - { 0x11943, 0x11943 }, - { 0x119D4, 0x119D7 }, - { 0x119DA, 0x119DB }, - { 0x119E0, 0x119E0 }, - { 0x11A01, 0x11A0A }, - { 0x11A33, 0x11A38 }, - { 0x11A3B, 0x11A3E }, - { 0x11A47, 0x11A47 }, - { 0x11A51, 0x11A56 }, - { 0x11A59, 0x11A5B }, - { 0x11A8A, 0x11A96 }, - { 0x11A98, 0x11A99 }, - { 0x11C30, 0x11C36 }, - { 0x11C38, 0x11C3D }, - { 0x11C3F, 0x11C3F }, - { 0x11C92, 0x11CA7 }, - { 0x11CAA, 0x11CB0 }, - { 0x11CB2, 0x11CB3 }, - { 0x11CB5, 0x11CB6 }, - { 0x11D31, 0x11D36 }, - { 0x11D3A, 0x11D3A }, - { 0x11D3C, 0x11D3D }, - { 0x11D3F, 0x11D45 }, - { 0x11D47, 0x11D47 }, - { 0x11D90, 0x11D91 }, - { 0x11D95, 0x11D95 }, - { 0x11D97, 0x11D97 }, - { 0x11EF3, 0x11EF4 }, - { 0x13430, 0x13438 }, - { 0x16AF0, 0x16AF4 }, - { 0x16B30, 0x16B36 }, - { 0x16F4F, 0x16F4F }, - { 0x16F8F, 0x16F92 }, - { 0x16FE4, 0x16FE4 }, - { 0x1BC9D, 0x1BC9E }, - { 0x1BCA0, 0x1BCA3 }, - { 0x1CF00, 0x1CF2D }, - { 0x1CF30, 0x1CF46 }, - { 0x1D167, 0x1D169 }, - { 0x1D173, 0x1D182 }, - { 0x1D185, 0x1D18B }, - { 0x1D1AA, 0x1D1AD }, - { 0x1D242, 0x1D244 }, - { 0x1DA00, 0x1DA36 }, - { 0x1DA3B, 0x1DA6C }, - { 0x1DA75, 0x1DA75 }, - { 0x1DA84, 0x1DA84 }, - { 0x1DA9B, 0x1DA9F }, - { 0x1DAA1, 0x1DAAF }, - { 0x1E000, 0x1E006 }, - { 0x1E008, 0x1E018 }, - { 0x1E01B, 0x1E021 }, - { 0x1E023, 0x1E024 }, - { 0x1E026, 0x1E02A }, - { 0x1E130, 0x1E136 }, - { 0x1E2AE, 0x1E2AE }, - { 0x1E2EC, 0x1E2EF }, - { 0x1E8D0, 0x1E8D6 }, - { 0x1E944, 0x1E94A }, - { 0xE0001, 0xE0001 }, - { 0xE0020, 0xE007F }, - { 0xE0100, 0xE01EF }, + #include "unicode/nonspacing_chars.h" }; - /* A sorted list of intervals of double-width characters generated by: - * https://raw.githubusercontent.com/GNOME/glib/37d4c2941bd0326b8b6e6bb22c81bd424fcc040b/glib/gen-unicode-tables.pl - * from the Unicode 14.0.0 data files available at: - * https://www.unicode.org/Public/14.0.0/ucd/ - */ + /* A sorted list of intervals of double-width characters */ static const struct interval wide[] = { - {0x1100, 0x115F}, - {0x231A, 0x231B}, - {0x2329, 0x232A}, - {0x23E9, 0x23EC}, - {0x23F0, 0x23F0}, - {0x23F3, 0x23F3}, - {0x25FD, 0x25FE}, - {0x2614, 0x2615}, - {0x2648, 0x2653}, - {0x267F, 0x267F}, - {0x2693, 0x2693}, - {0x26A1, 0x26A1}, - {0x26AA, 0x26AB}, - {0x26BD, 0x26BE}, - {0x26C4, 0x26C5}, - {0x26CE, 0x26CE}, - {0x26D4, 0x26D4}, - {0x26EA, 0x26EA}, - {0x26F2, 0x26F3}, - {0x26F5, 0x26F5}, - {0x26FA, 0x26FA}, - {0x26FD, 0x26FD}, - {0x2705, 0x2705}, - {0x270A, 0x270B}, - {0x2728, 0x2728}, - {0x274C, 0x274C}, - {0x274E, 0x274E}, - {0x2753, 0x2755}, - {0x2757, 0x2757}, - {0x2795, 0x2797}, - {0x27B0, 0x27B0}, - {0x27BF, 0x27BF}, - {0x2B1B, 0x2B1C}, - {0x2B50, 0x2B50}, - {0x2B55, 0x2B55}, - {0x2E80, 0x2E99}, - {0x2E9B, 0x2EF3}, - {0x2F00, 0x2FD5}, - {0x2FF0, 0x2FFB}, - {0x3000, 0x303E}, - {0x3041, 0x3096}, - {0x3099, 0x30FF}, - {0x3105, 0x312F}, - {0x3131, 0x318E}, - {0x3190, 0x31E3}, - {0x31F0, 0x321E}, - {0x3220, 0x3247}, - {0x3250, 0x4DBF}, - {0x4E00, 0xA48C}, - {0xA490, 0xA4C6}, - {0xA960, 0xA97C}, - {0xAC00, 0xD7A3}, - {0xF900, 0xFAFF}, - {0xFE10, 0xFE19}, - {0xFE30, 0xFE52}, - {0xFE54, 0xFE66}, - {0xFE68, 0xFE6B}, - {0xFF01, 0xFF60}, - {0xFFE0, 0xFFE6}, - {0x16FE0, 0x16FE4}, - {0x16FF0, 0x16FF1}, - {0x17000, 0x187F7}, - {0x18800, 0x18CD5}, - {0x18D00, 0x18D08}, - {0x1AFF0, 0x1AFF3}, - {0x1AFF5, 0x1AFFB}, - {0x1AFFD, 0x1AFFE}, - {0x1B000, 0x1B122}, - {0x1B150, 0x1B152}, - {0x1B164, 0x1B167}, - {0x1B170, 0x1B2FB}, - {0x1F004, 0x1F004}, - {0x1F0CF, 0x1F0CF}, - {0x1F18E, 0x1F18E}, - {0x1F191, 0x1F19A}, - {0x1F200, 0x1F202}, - {0x1F210, 0x1F23B}, - {0x1F240, 0x1F248}, - {0x1F250, 0x1F251}, - {0x1F260, 0x1F265}, - {0x1F300, 0x1F320}, - {0x1F32D, 0x1F335}, - {0x1F337, 0x1F37C}, - {0x1F37E, 0x1F393}, - {0x1F3A0, 0x1F3CA}, - {0x1F3CF, 0x1F3D3}, - {0x1F3E0, 0x1F3F0}, - {0x1F3F4, 0x1F3F4}, - {0x1F3F8, 0x1F43E}, - {0x1F440, 0x1F440}, - {0x1F442, 0x1F4FC}, - {0x1F4FF, 0x1F53D}, - {0x1F54B, 0x1F54E}, - {0x1F550, 0x1F567}, - {0x1F57A, 0x1F57A}, - {0x1F595, 0x1F596}, - {0x1F5A4, 0x1F5A4}, - {0x1F5FB, 0x1F64F}, - {0x1F680, 0x1F6C5}, - {0x1F6CC, 0x1F6CC}, - {0x1F6D0, 0x1F6D2}, - {0x1F6D5, 0x1F6D7}, - {0x1F6DD, 0x1F6DF}, - {0x1F6EB, 0x1F6EC}, - {0x1F6F4, 0x1F6FC}, - {0x1F7E0, 0x1F7EB}, - {0x1F7F0, 0x1F7F0}, - {0x1F90C, 0x1F93A}, - {0x1F93C, 0x1F945}, - {0x1F947, 0x1F9FF}, - {0x1FA70, 0x1FA74}, - {0x1FA78, 0x1FA7C}, - {0x1FA80, 0x1FA86}, - {0x1FA90, 0x1FAAC}, - {0x1FAB0, 0x1FABA}, - {0x1FAC0, 0x1FAC5}, - {0x1FAD0, 0x1FAD9}, - {0x1FAE0, 0x1FAE7}, - {0x1FAF0, 0x1FAF6}, - {0x20000, 0x2FFFD}, - {0x30000, 0x3FFFD}, + #include "unicode/wide_chars.h" }; /* test for 8-bit control characters */ @@ -677,191 +181,9 @@ int mk_wcswidth(const unsigned int *pwcs, size_t n) */ int mk_wcwidth_cjk(unsigned int ucs) { - /* A sorted list of intervals of ambiguous width characters generated by: - * https://raw.githubusercontent.com/GNOME/glib/37d4c2941bd0326b8b6e6bb22c81bd424fcc040b/glib/gen-unicode-tables.pl - * from the Unicode 9.0.0 data files available at: - * http://www.unicode.org/Public/9.0.0/ucd/ - */ + /* A sorted list of intervals of ambiguous width characters */ static const struct interval ambiguous[] = { - {0x00A1, 0x00A1}, - {0x00A4, 0x00A4}, - {0x00A7, 0x00A8}, - {0x00AA, 0x00AA}, - {0x00AD, 0x00AE}, - {0x00B0, 0x00B4}, - {0x00B6, 0x00BA}, - {0x00BC, 0x00BF}, - {0x00C6, 0x00C6}, - {0x00D0, 0x00D0}, - {0x00D7, 0x00D8}, - {0x00DE, 0x00E1}, - {0x00E6, 0x00E6}, - {0x00E8, 0x00EA}, - {0x00EC, 0x00ED}, - {0x00F0, 0x00F0}, - {0x00F2, 0x00F3}, - {0x00F7, 0x00FA}, - {0x00FC, 0x00FC}, - {0x00FE, 0x00FE}, - {0x0101, 0x0101}, - {0x0111, 0x0111}, - {0x0113, 0x0113}, - {0x011B, 0x011B}, - {0x0126, 0x0127}, - {0x012B, 0x012B}, - {0x0131, 0x0133}, - {0x0138, 0x0138}, - {0x013F, 0x0142}, - {0x0144, 0x0144}, - {0x0148, 0x014B}, - {0x014D, 0x014D}, - {0x0152, 0x0153}, - {0x0166, 0x0167}, - {0x016B, 0x016B}, - {0x01CE, 0x01CE}, - {0x01D0, 0x01D0}, - {0x01D2, 0x01D2}, - {0x01D4, 0x01D4}, - {0x01D6, 0x01D6}, - {0x01D8, 0x01D8}, - {0x01DA, 0x01DA}, - {0x01DC, 0x01DC}, - {0x0251, 0x0251}, - {0x0261, 0x0261}, - {0x02C4, 0x02C4}, - {0x02C7, 0x02C7}, - {0x02C9, 0x02CB}, - {0x02CD, 0x02CD}, - {0x02D0, 0x02D0}, - {0x02D8, 0x02DB}, - {0x02DD, 0x02DD}, - {0x02DF, 0x02DF}, - {0x0300, 0x036F}, - {0x0391, 0x03A1}, - {0x03A3, 0x03A9}, - {0x03B1, 0x03C1}, - {0x03C3, 0x03C9}, - {0x0401, 0x0401}, - {0x0410, 0x044F}, - {0x0451, 0x0451}, - {0x2010, 0x2010}, - {0x2013, 0x2016}, - {0x2018, 0x2019}, - {0x201C, 0x201D}, - {0x2020, 0x2022}, - {0x2024, 0x2027}, - {0x2030, 0x2030}, - {0x2032, 0x2033}, - {0x2035, 0x2035}, - {0x203B, 0x203B}, - {0x203E, 0x203E}, - {0x2074, 0x2074}, - {0x207F, 0x207F}, - {0x2081, 0x2084}, - {0x20AC, 0x20AC}, - {0x2103, 0x2103}, - {0x2105, 0x2105}, - {0x2109, 0x2109}, - {0x2113, 0x2113}, - {0x2116, 0x2116}, - {0x2121, 0x2122}, - {0x2126, 0x2126}, - {0x212B, 0x212B}, - {0x2153, 0x2154}, - {0x215B, 0x215E}, - {0x2160, 0x216B}, - {0x2170, 0x2179}, - {0x2189, 0x2189}, - {0x2190, 0x2199}, - {0x21B8, 0x21B9}, - {0x21D2, 0x21D2}, - {0x21D4, 0x21D4}, - {0x21E7, 0x21E7}, - {0x2200, 0x2200}, - {0x2202, 0x2203}, - {0x2207, 0x2208}, - {0x220B, 0x220B}, - {0x220F, 0x220F}, - {0x2211, 0x2211}, - {0x2215, 0x2215}, - {0x221A, 0x221A}, - {0x221D, 0x2220}, - {0x2223, 0x2223}, - {0x2225, 0x2225}, - {0x2227, 0x222C}, - {0x222E, 0x222E}, - {0x2234, 0x2237}, - {0x223C, 0x223D}, - {0x2248, 0x2248}, - {0x224C, 0x224C}, - {0x2252, 0x2252}, - {0x2260, 0x2261}, - {0x2264, 0x2267}, - {0x226A, 0x226B}, - {0x226E, 0x226F}, - {0x2282, 0x2283}, - {0x2286, 0x2287}, - {0x2295, 0x2295}, - {0x2299, 0x2299}, - {0x22A5, 0x22A5}, - {0x22BF, 0x22BF}, - {0x2312, 0x2312}, - {0x2460, 0x24E9}, - {0x24EB, 0x254B}, - {0x2550, 0x2573}, - {0x2580, 0x258F}, - {0x2592, 0x2595}, - {0x25A0, 0x25A1}, - {0x25A3, 0x25A9}, - {0x25B2, 0x25B3}, - {0x25B6, 0x25B7}, - {0x25BC, 0x25BD}, - {0x25C0, 0x25C1}, - {0x25C6, 0x25C8}, - {0x25CB, 0x25CB}, - {0x25CE, 0x25D1}, - {0x25E2, 0x25E5}, - {0x25EF, 0x25EF}, - {0x2605, 0x2606}, - {0x2609, 0x2609}, - {0x260E, 0x260F}, - {0x261C, 0x261C}, - {0x261E, 0x261E}, - {0x2640, 0x2640}, - {0x2642, 0x2642}, - {0x2660, 0x2661}, - {0x2663, 0x2665}, - {0x2667, 0x266A}, - {0x266C, 0x266D}, - {0x266F, 0x266F}, - {0x269E, 0x269F}, - {0x26BF, 0x26BF}, - {0x26C6, 0x26CD}, - {0x26CF, 0x26D3}, - {0x26D5, 0x26E1}, - {0x26E3, 0x26E3}, - {0x26E8, 0x26E9}, - {0x26EB, 0x26F1}, - {0x26F4, 0x26F4}, - {0x26F6, 0x26F9}, - {0x26FB, 0x26FC}, - {0x26FE, 0x26FF}, - {0x273D, 0x273D}, - {0x2776, 0x277F}, - {0x2B56, 0x2B59}, - {0x3248, 0x324F}, - {0xE000, 0xF8FF}, - {0xFE00, 0xFE0F}, - {0xFFFD, 0xFFFD}, - {0x1F100, 0x1F10A}, - {0x1F110, 0x1F12D}, - {0x1F130, 0x1F169}, - {0x1F170, 0x1F18D}, - {0x1F18F, 0x1F190}, - {0x1F19B, 0x1F1AC}, - {0xE0100, 0xE01EF}, - {0xF0000, 0xFFFFD}, - {0x100000, 0x10FFFD}, + #include "unicode/ambiguous_wide_chars.h" }; /* binary search in table of non-spacing characters */