1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-09 01:18:00 +00:00

Commit read_ucd.py's output and switch over to it.

This removes the superseded tables in source files, and also all the
code snippets in comments that generated them.
This commit is contained in:
Simon Tatham 2022-11-11 08:40:59 +00:00
parent 430af47a38
commit 4bb37233a5
9 changed files with 2575 additions and 2610 deletions

File diff suppressed because it is too large Load Diff

View File

@ -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},

139
unicode/bidi_brackets.h Normal file
View File

@ -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}},

437
unicode/bidi_mirror.h Normal file
View File

@ -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},

1306
unicode/bidi_type.h Normal file

File diff suppressed because it is too large Load Diff

357
unicode/nonspacing_chars.h Normal file
View File

@ -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},

9
unicode/version.h Normal file
View File

@ -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"

130
unicode/wide_chars.h Normal file
View File

@ -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},

View File

@ -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 (<DATA>) {
@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 */