aboutsummaryrefslogtreecommitdiff
path: root/iconvdata
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-08-14 08:49:16 +0000
committerUlrich Drepper <drepper@redhat.com>2003-08-14 08:49:16 +0000
commit41d70e88b1e4d25553f3c581b04d012e140e2868 (patch)
tree32e0b894e2ce03c35414905b5e85ae107ac443a4 /iconvdata
parentb61c8aba800959edfa405adb8c8a6f2f371633dd (diff)
downloadglibc-41d70e88b1e4d25553f3c581b04d012e140e2868.tar.xz
glibc-41d70e88b1e4d25553f3c581b04d012e140e2868.zip
Update.
2003-08-14 Ulrich Drepper <drepper@redhat.com> * iconvdata/cp932.c: Fixed checking of a few border of code areas. Changed conversion of JIS X 0201 from using a table to calculating. * iconvdata/euc-jp-ms.c: Fixed conversion table and rewrote conversion routine. Changed CHARSET_NAME definition from EUCJP-MS to EUC-JP-MS. * iconvdata/tst-tables.sh: Add CP932 and EUC-JP-MS. * iconvdata/CP932.irreversible: New file. * iconvdata/EUC-JP-MS.irreversible: New file. Patch by MORIYAMA Masayuki <msyk@mtg.biglobe.ne.jp>.
Diffstat (limited to 'iconvdata')
-rw-r--r--iconvdata/CP932.irreversible407
-rw-r--r--iconvdata/EUC-JP-MS.irreversible34
-rw-r--r--iconvdata/cp932.c25
-rw-r--r--iconvdata/euc-jp-ms.c8500
-rwxr-xr-xiconvdata/tst-tables.sh2
5 files changed, 4717 insertions, 4251 deletions
diff --git a/iconvdata/CP932.irreversible b/iconvdata/CP932.irreversible
new file mode 100644
index 0000000000..81e113ed7c
--- /dev/null
+++ b/iconvdata/CP932.irreversible
@@ -0,0 +1,407 @@
+0x5C 0x00A5
+0x7E 0x203E
+0x815C 0x2014
+0x8160 0x301C
+0x8161 0x2016
+0x817C 0x2212
+0x8191 0x00A2
+0x8192 0x00A3
+0x81CA 0x00AC
+0x8790 0x2252
+0x8791 0x2261
+0x8792 0x222B
+0x8795 0x221A
+0x8796 0x22A5
+0x8797 0x2220
+0x879A 0x2235
+0x879B 0x2229
+0x879C 0x222A
+0xED40 0x7E8A
+0xED41 0x891C
+0xED42 0x9348
+0xED43 0x9288
+0xED44 0x84DC
+0xED45 0x4FC9
+0xED46 0x70BB
+0xED47 0x6631
+0xED48 0x68C8
+0xED49 0x92F9
+0xED4A 0x66FB
+0xED4B 0x5F45
+0xED4C 0x4E28
+0xED4D 0x4EE1
+0xED4E 0x4EFC
+0xED4F 0x4F00
+0xED50 0x4F03
+0xED51 0x4F39
+0xED52 0x4F56
+0xED53 0x4F92
+0xED54 0x4F8A
+0xED55 0x4F9A
+0xED56 0x4F94
+0xED57 0x4FCD
+0xED58 0x5040
+0xED59 0x5022
+0xED5A 0x4FFF
+0xED5B 0x501E
+0xED5C 0x5046
+0xED5D 0x5070
+0xED5E 0x5042
+0xED5F 0x5094
+0xED60 0x50F4
+0xED61 0x50D8
+0xED62 0x514A
+0xED63 0x5164
+0xED64 0x519D
+0xED65 0x51BE
+0xED66 0x51EC
+0xED67 0x5215
+0xED68 0x529C
+0xED69 0x52A6
+0xED6A 0x52C0
+0xED6B 0x52DB
+0xED6C 0x5300
+0xED6D 0x5307
+0xED6E 0x5324
+0xED6F 0x5372
+0xED70 0x5393
+0xED71 0x53B2
+0xED72 0x53DD
+0xED73 0xFA0E
+0xED74 0x549C
+0xED75 0x548A
+0xED76 0x54A9
+0xED77 0x54FF
+0xED78 0x5586
+0xED79 0x5759
+0xED7A 0x5765
+0xED7B 0x57AC
+0xED7C 0x57C8
+0xED7D 0x57C7
+0xED7E 0xFA0F
+0xED80 0xFA10
+0xED81 0x589E
+0xED82 0x58B2
+0xED83 0x590B
+0xED84 0x5953
+0xED85 0x595B
+0xED86 0x595D
+0xED87 0x5963
+0xED88 0x59A4
+0xED89 0x59BA
+0xED8A 0x5B56
+0xED8B 0x5BC0
+0xED8C 0x752F
+0xED8D 0x5BD8
+0xED8E 0x5BEC
+0xED8F 0x5C1E
+0xED90 0x5CA6
+0xED91 0x5CBA
+0xED92 0x5CF5
+0xED93 0x5D27
+0xED94 0x5D53
+0xED95 0xFA11
+0xED96 0x5D42
+0xED97 0x5D6D
+0xED98 0x5DB8
+0xED99 0x5DB9
+0xED9A 0x5DD0
+0xED9B 0x5F21
+0xED9C 0x5F34
+0xED9D 0x5F67
+0xED9E 0x5FB7
+0xED9F 0x5FDE
+0xEDA0 0x605D
+0xEDA1 0x6085
+0xEDA2 0x608A
+0xEDA3 0x60DE
+0xEDA4 0x60D5
+0xEDA5 0x6120
+0xEDA6 0x60F2
+0xEDA7 0x6111
+0xEDA8 0x6137
+0xEDA9 0x6130
+0xEDAA 0x6198
+0xEDAB 0x6213
+0xEDAC 0x62A6
+0xEDAD 0x63F5
+0xEDAE 0x6460
+0xEDAF 0x649D
+0xEDB0 0x64CE
+0xEDB1 0x654E
+0xEDB2 0x6600
+0xEDB3 0x6615
+0xEDB4 0x663B
+0xEDB5 0x6609
+0xEDB6 0x662E
+0xEDB7 0x661E
+0xEDB8 0x6624
+0xEDB9 0x6665
+0xEDBA 0x6657
+0xEDBB 0x6659
+0xEDBC 0xFA12
+0xEDBD 0x6673
+0xEDBE 0x6699
+0xEDBF 0x66A0
+0xEDC0 0x66B2
+0xEDC1 0x66BF
+0xEDC2 0x66FA
+0xEDC3 0x670E
+0xEDC4 0xF929
+0xEDC5 0x6766
+0xEDC6 0x67BB
+0xEDC7 0x6852
+0xEDC8 0x67C0
+0xEDC9 0x6801
+0xEDCA 0x6844
+0xEDCB 0x68CF
+0xEDCC 0xFA13
+0xEDCD 0x6968
+0xEDCE 0xFA14
+0xEDCF 0x6998
+0xEDD0 0x69E2
+0xEDD1 0x6A30
+0xEDD2 0x6A6B
+0xEDD3 0x6A46
+0xEDD4 0x6A73
+0xEDD5 0x6A7E
+0xEDD6 0x6AE2
+0xEDD7 0x6AE4
+0xEDD8 0x6BD6
+0xEDD9 0x6C3F
+0xEDDA 0x6C5C
+0xEDDB 0x6C86
+0xEDDC 0x6C6F
+0xEDDD 0x6CDA
+0xEDDE 0x6D04
+0xEDDF 0x6D87
+0xEDE0 0x6D6F
+0xEDE1 0x6D96
+0xEDE2 0x6DAC
+0xEDE3 0x6DCF
+0xEDE4 0x6DF8
+0xEDE5 0x6DF2
+0xEDE6 0x6DFC
+0xEDE7 0x6E39
+0xEDE8 0x6E5C
+0xEDE9 0x6E27
+0xEDEA 0x6E3C
+0xEDEB 0x6EBF
+0xEDEC 0x6F88
+0xEDED 0x6FB5
+0xEDEE 0x6FF5
+0xEDEF 0x7005
+0xEDF0 0x7007
+0xEDF1 0x7028
+0xEDF2 0x7085
+0xEDF3 0x70AB
+0xEDF4 0x710F
+0xEDF5 0x7104
+0xEDF6 0x715C
+0xEDF7 0x7146
+0xEDF8 0x7147
+0xEDF9 0xFA15
+0xEDFA 0x71C1
+0xEDFB 0x71FE
+0xEDFC 0x72B1
+0xEE40 0x72BE
+0xEE41 0x7324
+0xEE42 0xFA16
+0xEE43 0x7377
+0xEE44 0x73BD
+0xEE45 0x73C9
+0xEE46 0x73D6
+0xEE47 0x73E3
+0xEE48 0x73D2
+0xEE49 0x7407
+0xEE4A 0x73F5
+0xEE4B 0x7426
+0xEE4C 0x742A
+0xEE4D 0x7429
+0xEE4E 0x742E
+0xEE4F 0x7462
+0xEE50 0x7489
+0xEE51 0x749F
+0xEE52 0x7501
+0xEE53 0x756F
+0xEE54 0x7682
+0xEE55 0x769C
+0xEE56 0x769E
+0xEE57 0x769B
+0xEE58 0x76A6
+0xEE59 0xFA17
+0xEE5A 0x7746
+0xEE5B 0x52AF
+0xEE5C 0x7821
+0xEE5D 0x784E
+0xEE5E 0x7864
+0xEE5F 0x787A
+0xEE60 0x7930
+0xEE61 0xFA18
+0xEE62 0xFA19
+0xEE63 0xFA1A
+0xEE64 0x7994
+0xEE65 0xFA1B
+0xEE66 0x799B
+0xEE67 0x7AD1
+0xEE68 0x7AE7
+0xEE69 0xFA1C
+0xEE6A 0x7AEB
+0xEE6B 0x7B9E
+0xEE6C 0xFA1D
+0xEE6D 0x7D48
+0xEE6E 0x7D5C
+0xEE6F 0x7DB7
+0xEE70 0x7DA0
+0xEE71 0x7DD6
+0xEE72 0x7E52
+0xEE73 0x7F47
+0xEE74 0x7FA1
+0xEE75 0xFA1E
+0xEE76 0x8301
+0xEE77 0x8362
+0xEE78 0x837F
+0xEE79 0x83C7
+0xEE7A 0x83F6
+0xEE7B 0x8448
+0xEE7C 0x84B4
+0xEE7D 0x8553
+0xEE7E 0x8559
+0xEE80 0x856B
+0xEE81 0xFA1F
+0xEE82 0x85B0
+0xEE83 0xFA20
+0xEE84 0xFA21
+0xEE85 0x8807
+0xEE86 0x88F5
+0xEE87 0x8A12
+0xEE88 0x8A37
+0xEE89 0x8A79
+0xEE8A 0x8AA7
+0xEE8B 0x8ABE
+0xEE8C 0x8ADF
+0xEE8D 0xFA22
+0xEE8E 0x8AF6
+0xEE8F 0x8B53
+0xEE90 0x8B7F
+0xEE91 0x8CF0
+0xEE92 0x8CF4
+0xEE93 0x8D12
+0xEE94 0x8D76
+0xEE95 0xFA23
+0xEE96 0x8ECF
+0xEE97 0xFA24
+0xEE98 0xFA25
+0xEE99 0x9067
+0xEE9A 0x90DE
+0xEE9B 0xFA26
+0xEE9C 0x9115
+0xEE9D 0x9127
+0xEE9E 0x91DA
+0xEE9F 0x91D7
+0xEEA0 0x91DE
+0xEEA1 0x91ED
+0xEEA2 0x91EE
+0xEEA3 0x91E4
+0xEEA4 0x91E5
+0xEEA5 0x9206
+0xEEA6 0x9210
+0xEEA7 0x920A
+0xEEA8 0x923A
+0xEEA9 0x9240
+0xEEAA 0x923C
+0xEEAB 0x924E
+0xEEAC 0x9259
+0xEEAD 0x9251
+0xEEAE 0x9239
+0xEEAF 0x9267
+0xEEB0 0x92A7
+0xEEB1 0x9277
+0xEEB2 0x9278
+0xEEB3 0x92E7
+0xEEB4 0x92D7
+0xEEB5 0x92D9
+0xEEB6 0x92D0
+0xEEB7 0xFA27
+0xEEB8 0x92D5
+0xEEB9 0x92E0
+0xEEBA 0x92D3
+0xEEBB 0x9325
+0xEEBC 0x9321
+0xEEBD 0x92FB
+0xEEBE 0xFA28
+0xEEBF 0x931E
+0xEEC0 0x92FF
+0xEEC1 0x931D
+0xEEC2 0x9302
+0xEEC3 0x9370
+0xEEC4 0x9357
+0xEEC5 0x93A4
+0xEEC6 0x93C6
+0xEEC7 0x93DE
+0xEEC8 0x93F8
+0xEEC9 0x9431
+0xEECA 0x9445
+0xEECB 0x9448
+0xEECC 0x9592
+0xEECD 0xF9DC
+0xEECE 0xFA29
+0xEECF 0x969D
+0xEED0 0x96AF
+0xEED1 0x9733
+0xEED2 0x973B
+0xEED3 0x9743
+0xEED4 0x974D
+0xEED5 0x974F
+0xEED6 0x9751
+0xEED7 0x9755
+0xEED8 0x9857
+0xEED9 0x9865
+0xEEDA 0xFA2A
+0xEEDB 0xFA2B
+0xEEDC 0x9927
+0xEEDD 0xFA2C
+0xEEDE 0x999E
+0xEEDF 0x9A4E
+0xEEE0 0x9AD9
+0xEEE1 0x9ADC
+0xEEE2 0x9B75
+0xEEE3 0x9B72
+0xEEE4 0x9B8F
+0xEEE5 0x9BB1
+0xEEE6 0x9BBB
+0xEEE7 0x9C00
+0xEEE8 0x9D70
+0xEEE9 0x9D6B
+0xEEEA 0xFA2D
+0xEEEB 0x9E19
+0xEEEC 0x9ED1
+0xEEEF 0x2170
+0xEEF0 0x2171
+0xEEF1 0x2172
+0xEEF2 0x2173
+0xEEF3 0x2174
+0xEEF4 0x2175
+0xEEF5 0x2176
+0xEEF6 0x2177
+0xEEF7 0x2178
+0xEEF8 0x2179
+0xEEF9 0xFFE2
+0xEEFA 0xFFE4
+0xEEFB 0xFF07
+0xEEFC 0xFF02
+0xFA4A 0x2160
+0xFA4B 0x2161
+0xFA4C 0x2162
+0xFA4D 0x2163
+0xFA4E 0x2164
+0xFA4F 0x2165
+0xFA50 0x2166
+0xFA51 0x2167
+0xFA52 0x2168
+0xFA53 0x2169
+0xFA54 0xFFE2
+0xFA58 0x3231
+0xFA59 0x2116
+0xFA5A 0x2121
+0xFA5B 0x2235
diff --git a/iconvdata/EUC-JP-MS.irreversible b/iconvdata/EUC-JP-MS.irreversible
new file mode 100644
index 0000000000..67b369b18f
--- /dev/null
+++ b/iconvdata/EUC-JP-MS.irreversible
@@ -0,0 +1,34 @@
+0x5C 0x00A5
+0x7E 0x203E
+0x8FA2B7 0xFF5E
+0x8FA2C3 0x00A6
+0x8FA2F1 0x2116
+0x8FF3FD 0x2160
+0x8FF3FE 0x2161
+0x8FF4A1 0x2162
+0x8FF4A2 0x2163
+0x8FF4A3 0x2164
+0x8FF4A4 0x2165
+0x8FF4A5 0x2166
+0x8FF4A6 0x2167
+0x8FF4A7 0x2168
+0x8FF4A8 0x2169
+0x8FF4AB 0x3231
+0x8FF4AC 0x2116
+0x8FF4AD 0x2121
+0xA1BD 0x2014
+0xA1C1 0x301C
+0xA1C2 0x2016
+0xA1DD 0x2212
+0xA1F1 0x00A2
+0xA1F2 0x00A3
+0xA2CC 0x00AC
+0xADF0 0x2252
+0xADF1 0x2261
+0xADF2 0x222B
+0xADF5 0x221A
+0xADF6 0x22A5
+0xADF7 0x2220
+0xADFA 0x2235
+0xADFB 0x2229
+0xADFC 0x222A
diff --git a/iconvdata/cp932.c b/iconvdata/cp932.c
index ff4556307a..90ecad96bd 100644
--- a/iconvdata/cp932.c
+++ b/iconvdata/cp932.c
@@ -22,18 +22,6 @@
#include <stdint.h>
#include <wchar.h>
-static const uint32_t halfkana_to_ucs4[] =
-{
- 0xff61, 0xff62, 0xff63, 0xff64, 0xff65, 0xff66, 0xff67, 0xff68,
- 0xff69, 0xff6a, 0xff6b, 0xff6c, 0xff6d, 0xff6e, 0xff6f, 0xff70,
- 0xff71, 0xff72, 0xff73, 0xff74, 0xff75, 0xff76, 0xff77, 0xff78,
- 0xff79, 0xff7a, 0xff7b, 0xff7c, 0xff7d, 0xff7e, 0xff7f, 0xff80,
- 0xff81, 0xff82, 0xff83, 0xff84, 0xff85, 0xff86, 0xff87, 0xff88,
- 0xff89, 0xff8a, 0xff8b, 0xff8c, 0xff8d, 0xff8e, 0xff8f, 0xff90,
- 0xff91, 0xff92, 0xff93, 0xff94, 0xff95, 0xff96, 0xff97, 0xff98,
- 0xff99, 0xff9a, 0xff9b, 0xff9c, 0xff9d, 0xff9e, 0xff9f
-};
-
static const uint16_t cjk_block1[703] =
{
/* start = 0x8140, end = 0x84be */
@@ -4559,10 +4547,10 @@ static const char from_ucs4_extra[229][2] =
\
if (ch < 0x80) \
++inptr; \
- else if (ch >= 0xa1 && ch <= 0xdf) \
- { \
- ch = halfkana_to_ucs4[ch - 0xa1]; \
- ++inptr; \
+ else if (ch >= 0xa1 && ch <= 0xdf) \
+ { \
+ ch += 0xfec0; \
+ ++inptr; \
} \
else if (__builtin_expect (ch, 0) == 0xa0 \
|| __builtin_expect (ch <= 0x80, 0) \
@@ -4598,11 +4586,14 @@ static const char from_ucs4_extra[229][2] =
ch2 = inptr[1]; \
idx = ch * 256 + ch2; \
if (__builtin_expect (ch2 < 0x40, 0) \
+ || __builtin_expect (ch2 > 0xfc, 0) \
+ || __builtin_expect (ch2 == 0x7f, 0) \
|| (__builtin_expect (idx > 0x84be, 0) && idx < 0x8740) \
|| (__builtin_expect (idx > 0x879c, 0) && idx < 0x889f) \
|| (__builtin_expect (idx > 0x88fc, 0) && idx < 0x8940) \
|| (__builtin_expect (idx > 0x9ffc, 0) && idx < 0xe040) \
|| (__builtin_expect (idx > 0xeaa4, 0) && idx < 0xed40) \
+ || (__builtin_expect (idx > 0xeefc, 0) && idx < 0xf040) \
|| __builtin_expect (idx > 0xfc4b, 0)) \
{ \
/* This is illegal. */ \
@@ -4693,7 +4684,7 @@ static const char from_ucs4_extra[229][2] =
else if (ch >= 0xf929 && ch <= 0xfa2d) \
cp = from_ucs4_cjkcpt[ch - 0xf929]; \
else if (__builtin_expect (ch >= 0xff01, 1) \
- && __builtin_expect (ch <= 0xffef, 1)) \
+ && __builtin_expect (ch <= 0xffe5, 1)) \
cp = from_ucs4_extra[ch - 0xff01]; \
else \
{ \
diff --git a/iconvdata/euc-jp-ms.c b/iconvdata/euc-jp-ms.c
index f5b3d76f23..1c1cc2be3d 100644
--- a/iconvdata/euc-jp-ms.c
+++ b/iconvdata/euc-jp-ms.c
@@ -203,9 +203,21 @@ static const char from_ucs4_lat1[256][2] =
[ 117] = "\x75\x00", [ 118] = "\x76\x00", [ 119] = "\x77\x00",
[ 120] = "\x78\x00", [ 121] = "\x79\x00", [ 122] = "\x7a\x00",
[ 123] = "\x7b\x00", [ 124] = "\x7c\x00", [ 125] = "\x7d\x00",
- [ 126] = "\x7e\x00", [ 161] = "\xa2\x42", [ 164] = "\xa2\x70",
- [ 167] = "\xa1\xf8", [ 168] = "\xa1\xaf", [ 169] = "\xa2\x6d",
- [ 170] = "\xa2\x6c", [ 174] = "\xa2\x6e", [ 175] = "\xa2\x34",
+ [ 126] = "\x7e\x00", [ 127] = "\x7f\x00", [ 128] = "\x80\x00",
+ [ 129] = "\x81\x00", [ 130] = "\x82\x00", [ 131] = "\x83\x00",
+ [ 132] = "\x84\x00", [ 133] = "\x85\x00", [ 134] = "\x86\x00",
+ [ 135] = "\x87\x00", [ 136] = "\x88\x00", [ 137] = "\x89\x00",
+ [ 138] = "\x8a\x00", [ 139] = "\x8b\x00", [ 140] = "\x8c\x00",
+ [ 141] = "\x8d\x00", [ 144] = "\x90\x00", [ 145] = "\x91\x00",
+ [ 146] = "\x92\x00", [ 147] = "\x93\x00", [ 148] = "\x94\x00",
+ [ 149] = "\x95\x00", [ 150] = "\x96\x00", [ 151] = "\x97\x00",
+ [ 152] = "\x98\x00", [ 153] = "\x99\x00", [ 154] = "\x9a\x00",
+ [ 155] = "\x9b\x00", [ 156] = "\x9c\x00", [ 157] = "\x9d\x00",
+ [ 158] = "\x9e\x00", [ 159] = "\x9f\x00", [ 161] = "\xa2\x42",
+ [ 162] = "\xa1\xf1", [ 163] = "\xa1\xf2", [ 164] = "\xa2\x70",
+ [ 165] = "\x5c\x00", [ 166] = "\xa2\x43", [ 167] = "\xa1\xf8",
+ [ 168] = "\xa1\xaf", [ 169] = "\xa2\x6d", [ 170] = "\xa2\x6c",
+ [ 172] = "\xa2\xcc", [ 174] = "\xa2\x6e", [ 175] = "\xa2\x34",
[ 176] = "\xa1\xeb", [ 177] = "\xa1\xde", [ 180] = "\xa1\xad",
[ 182] = "\xa2\xf9", [ 184] = "\xa2\x31", [ 186] = "\xa2\x6b",
[ 191] = "\xa2\x44", [ 192] = "\xaa\x22", [ 193] = "\xaa\x21",
@@ -342,11 +354,12 @@ static const char from_ucs4_greek[864][2] =
static const char from_ucs4_cjk[32662][2] =
{
/* start = 0x2010, end = 0x9fa5 */
- [ 0] = "\xa1\xbe", [ 5] = "\xa1\xbd", [ 8] = "\xa1\xc6",
- [ 9] = "\xa1\xc7", [ 12] = "\xa1\xc8", [ 13] = "\xa1\xc9",
- [ 16] = "\xa2\xf7", [ 17] = "\xa2\xf8", [ 21] = "\xa1\xc5",
- [ 22] = "\xa1\xc4", [ 32] = "\xa2\xf3", [ 34] = "\xa1\xec",
- [ 35] = "\xa1\xed", [ 43] = "\xa2\xa8", [ 243] = "\xa1\xee",
+ [ 0] = "\xa1\xbe", [ 4] = "\xa1\xbd", [ 5] = "\xa1\xbd",
+ [ 6] = "\xa1\xc2", [ 8] = "\xa1\xc6", [ 9] = "\xa1\xc7",
+ [ 12] = "\xa1\xc8", [ 13] = "\xa1\xc9", [ 16] = "\xa2\xf7",
+ [ 17] = "\xa2\xf8", [ 21] = "\xa1\xc5", [ 22] = "\xa1\xc4",
+ [ 32] = "\xa2\xf3", [ 34] = "\xa1\xec", [ 35] = "\xa1\xed",
+ [ 43] = "\xa2\xa8", [ 46] = "\x7e\x00", [ 243] = "\xa1\xee",
[ 262] = "\xad\xe2", [ 273] = "\xad\xe4", [ 274] = "\xa2\x6f",
[ 283] = "\xa2\xf2", [ 336] = "\xad\xb5", [ 337] = "\xad\xb6",
[ 338] = "\xad\xb7", [ 339] = "\xad\xb8", [ 340] = "\xad\xb9",
@@ -359,4187 +372,4188 @@ static const char from_ucs4_cjk[32662][2] =
[ 387] = "\xa2\xad", [ 450] = "\xa2\xcd", [ 452] = "\xa2\xce",
[ 496] = "\xa2\xcf", [ 498] = "\xa2\xdf", [ 499] = "\xa2\xd0",
[ 503] = "\xa2\xe0", [ 504] = "\xa2\xba", [ 507] = "\xa2\xbb",
- [ 513] = "\xad\xf4", [ 522] = "\xa2\xe5", [ 525] = "\xa2\xe7",
- [ 526] = "\xa1\xe7", [ 527] = "\xad\xf8", [ 528] = "\xa2\xdc",
- [ 533] = "\xa1\xc2", [ 535] = "\xa2\xca", [ 536] = "\xa2\xcb",
- [ 537] = "\xa2\xc1", [ 538] = "\xa2\xc0", [ 539] = "\xa2\xe9",
- [ 540] = "\xa2\xea", [ 542] = "\xad\xf3", [ 548] = "\xa1\xe8",
- [ 549] = "\xa2\xe8", [ 557] = "\xa2\xe6", [ 578] = "\xa2\xe2",
- [ 592] = "\xa1\xe2", [ 593] = "\xa2\xe1", [ 598] = "\xa1\xe5",
- [ 599] = "\xa1\xe6", [ 602] = "\xa2\xe3", [ 603] = "\xa2\xe4",
- [ 626] = "\xa2\xbe", [ 627] = "\xa2\xbf", [ 630] = "\xa2\xbc",
- [ 631] = "\xa2\xbd", [ 661] = "\xa2\xdd", [ 687] = "\xad\xf9",
- [ 770] = "\xa2\xde", [ 1104] = "\xad\xa1", [ 1105] = "\xad\xa2",
- [ 1106] = "\xad\xa3", [ 1107] = "\xad\xa4", [ 1108] = "\xad\xa5",
- [ 1109] = "\xad\xa6", [ 1110] = "\xad\xa7", [ 1111] = "\xad\xa8",
- [ 1112] = "\xad\xa9", [ 1113] = "\xad\xaa", [ 1114] = "\xad\xab",
- [ 1115] = "\xad\xac", [ 1116] = "\xad\xad", [ 1117] = "\xad\xae",
- [ 1118] = "\xad\xaf", [ 1119] = "\xad\xb0", [ 1120] = "\xad\xb1",
- [ 1121] = "\xad\xb2", [ 1122] = "\xad\xb3", [ 1123] = "\xad\xb4",
- [ 1264] = "\xa8\xa1", [ 1265] = "\xa8\xac", [ 1266] = "\xa8\xa2",
- [ 1267] = "\xa8\xad", [ 1276] = "\xa8\xa3", [ 1279] = "\xa8\xae",
- [ 1280] = "\xa8\xa4", [ 1283] = "\xa8\xaf", [ 1284] = "\xa8\xa6",
- [ 1287] = "\xa8\xb1", [ 1288] = "\xa8\xa5", [ 1291] = "\xa8\xb0",
- [ 1292] = "\xa8\xa7", [ 1293] = "\xa8\xbc", [ 1296] = "\xa8\xb7",
- [ 1299] = "\xa8\xb2", [ 1300] = "\xa8\xa9", [ 1301] = "\xa8\xbe",
- [ 1304] = "\xa8\xb9", [ 1307] = "\xa8\xb4", [ 1308] = "\xa8\xa8",
- [ 1311] = "\xa8\xb8", [ 1312] = "\xa8\xbd", [ 1315] = "\xa8\xb3",
- [ 1316] = "\xa8\xaa", [ 1319] = "\xa8\xba", [ 1320] = "\xa8\xbf",
- [ 1323] = "\xa8\xb5", [ 1324] = "\xa8\xab", [ 1327] = "\xa8\xbb",
- [ 1330] = "\xa8\xc0", [ 1339] = "\xa8\xb6", [ 1424] = "\xa2\xa3",
- [ 1425] = "\xa2\xa2", [ 1442] = "\xa2\xa5", [ 1443] = "\xa2\xa4",
- [ 1452] = "\xa2\xa7", [ 1453] = "\xa2\xa6", [ 1462] = "\xa2\xa1",
- [ 1463] = "\xa1\xfe", [ 1467] = "\xa1\xfb", [ 1470] = "\xa1\xfd",
- [ 1471] = "\xa1\xfc", [ 1503] = "\xa2\xfe", [ 1525] = "\xa1\xfa",
- [ 1526] = "\xa1\xf9", [ 1584] = "\xa1\xea", [ 1586] = "\xa1\xe9",
- [ 1626] = "\xa2\xf6", [ 1629] = "\xa2\xf5", [ 1631] = "\xa2\xf4",
- [ 4080] = "\xa1\xa1", [ 4081] = "\xa1\xa2", [ 4082] = "\xa1\xa3",
- [ 4083] = "\xa1\xb7", [ 4085] = "\xa1\xb9", [ 4086] = "\xa1\xba",
- [ 4087] = "\xa1\xbb", [ 4088] = "\xa1\xd2", [ 4089] = "\xa1\xd3",
- [ 4090] = "\xa1\xd4", [ 4091] = "\xa1\xd5", [ 4092] = "\xa1\xd6",
- [ 4093] = "\xa1\xd7", [ 4094] = "\xa1\xd8", [ 4095] = "\xa1\xd9",
- [ 4096] = "\xa1\xda", [ 4097] = "\xa1\xdb", [ 4098] = "\xa2\xa9",
- [ 4099] = "\xa2\xae", [ 4100] = "\xa1\xcc", [ 4101] = "\xa1\xcd",
- [ 4109] = "\xad\xe0", [ 4111] = "\xad\xe1", [ 4145] = "\xa4\xa1",
- [ 4146] = "\xa4\xa2", [ 4147] = "\xa4\xa3", [ 4148] = "\xa4\xa4",
- [ 4149] = "\xa4\xa5", [ 4150] = "\xa4\xa6", [ 4151] = "\xa4\xa7",
- [ 4152] = "\xa4\xa8", [ 4153] = "\xa4\xa9", [ 4154] = "\xa4\xaa",
- [ 4155] = "\xa4\xab", [ 4156] = "\xa4\xac", [ 4157] = "\xa4\xad",
- [ 4158] = "\xa4\xae", [ 4159] = "\xa4\xaf", [ 4160] = "\xa4\xb0",
- [ 4161] = "\xa4\xb1", [ 4162] = "\xa4\xb2", [ 4163] = "\xa4\xb3",
- [ 4164] = "\xa4\xb4", [ 4165] = "\xa4\xb5", [ 4166] = "\xa4\xb6",
- [ 4167] = "\xa4\xb7", [ 4168] = "\xa4\xb8", [ 4169] = "\xa4\xb9",
- [ 4170] = "\xa4\xba", [ 4171] = "\xa4\xbb", [ 4172] = "\xa4\xbc",
- [ 4173] = "\xa4\xbd", [ 4174] = "\xa4\xbe", [ 4175] = "\xa4\xbf",
- [ 4176] = "\xa4\xc0", [ 4177] = "\xa4\xc1", [ 4178] = "\xa4\xc2",
- [ 4179] = "\xa4\xc3", [ 4180] = "\xa4\xc4", [ 4181] = "\xa4\xc5",
- [ 4182] = "\xa4\xc6", [ 4183] = "\xa4\xc7", [ 4184] = "\xa4\xc8",
- [ 4185] = "\xa4\xc9", [ 4186] = "\xa4\xca", [ 4187] = "\xa4\xcb",
- [ 4188] = "\xa4\xcc", [ 4189] = "\xa4\xcd", [ 4190] = "\xa4\xce",
- [ 4191] = "\xa4\xcf", [ 4192] = "\xa4\xd0", [ 4193] = "\xa4\xd1",
- [ 4194] = "\xa4\xd2", [ 4195] = "\xa4\xd3", [ 4196] = "\xa4\xd4",
- [ 4197] = "\xa4\xd5", [ 4198] = "\xa4\xd6", [ 4199] = "\xa4\xd7",
- [ 4200] = "\xa4\xd8", [ 4201] = "\xa4\xd9", [ 4202] = "\xa4\xda",
- [ 4203] = "\xa4\xdb", [ 4204] = "\xa4\xdc", [ 4205] = "\xa4\xdd",
- [ 4206] = "\xa4\xde", [ 4207] = "\xa4\xdf", [ 4208] = "\xa4\xe0",
- [ 4209] = "\xa4\xe1", [ 4210] = "\xa4\xe2", [ 4211] = "\xa4\xe3",
- [ 4212] = "\xa4\xe4", [ 4213] = "\xa4\xe5", [ 4214] = "\xa4\xe6",
- [ 4215] = "\xa4\xe7", [ 4216] = "\xa4\xe8", [ 4217] = "\xa4\xe9",
- [ 4218] = "\xa4\xea", [ 4219] = "\xa4\xeb", [ 4220] = "\xa4\xec",
- [ 4221] = "\xa4\xed", [ 4222] = "\xa4\xee", [ 4223] = "\xa4\xef",
- [ 4224] = "\xa4\xf0", [ 4225] = "\xa4\xf1", [ 4226] = "\xa4\xf2",
- [ 4227] = "\xa4\xf3", [ 4235] = "\xa1\xab", [ 4236] = "\xa1\xac",
- [ 4237] = "\xa1\xb5", [ 4238] = "\xa1\xb6", [ 4241] = "\xa5\xa1",
- [ 4242] = "\xa5\xa2", [ 4243] = "\xa5\xa3", [ 4244] = "\xa5\xa4",
- [ 4245] = "\xa5\xa5", [ 4246] = "\xa5\xa6", [ 4247] = "\xa5\xa7",
- [ 4248] = "\xa5\xa8", [ 4249] = "\xa5\xa9", [ 4250] = "\xa5\xaa",
- [ 4251] = "\xa5\xab", [ 4252] = "\xa5\xac", [ 4253] = "\xa5\xad",
- [ 4254] = "\xa5\xae", [ 4255] = "\xa5\xaf", [ 4256] = "\xa5\xb0",
- [ 4257] = "\xa5\xb1", [ 4258] = "\xa5\xb2", [ 4259] = "\xa5\xb3",
- [ 4260] = "\xa5\xb4", [ 4261] = "\xa5\xb5", [ 4262] = "\xa5\xb6",
- [ 4263] = "\xa5\xb7", [ 4264] = "\xa5\xb8", [ 4265] = "\xa5\xb9",
- [ 4266] = "\xa5\xba", [ 4267] = "\xa5\xbb", [ 4268] = "\xa5\xbc",
- [ 4269] = "\xa5\xbd", [ 4270] = "\xa5\xbe", [ 4271] = "\xa5\xbf",
- [ 4272] = "\xa5\xc0", [ 4273] = "\xa5\xc1", [ 4274] = "\xa5\xc2",
- [ 4275] = "\xa5\xc3", [ 4276] = "\xa5\xc4", [ 4277] = "\xa5\xc5",
- [ 4278] = "\xa5\xc6", [ 4279] = "\xa5\xc7", [ 4280] = "\xa5\xc8",
- [ 4281] = "\xa5\xc9", [ 4282] = "\xa5\xca", [ 4283] = "\xa5\xcb",
- [ 4284] = "\xa5\xcc", [ 4285] = "\xa5\xcd", [ 4286] = "\xa5\xce",
- [ 4287] = "\xa5\xcf", [ 4288] = "\xa5\xd0", [ 4289] = "\xa5\xd1",
- [ 4290] = "\xa5\xd2", [ 4291] = "\xa5\xd3", [ 4292] = "\xa5\xd4",
- [ 4293] = "\xa5\xd5", [ 4294] = "\xa5\xd6", [ 4295] = "\xa5\xd7",
- [ 4296] = "\xa5\xd8", [ 4297] = "\xa5\xd9", [ 4298] = "\xa5\xda",
- [ 4299] = "\xa5\xdb", [ 4300] = "\xa5\xdc", [ 4301] = "\xa5\xdd",
- [ 4302] = "\xa5\xde", [ 4303] = "\xa5\xdf", [ 4304] = "\xa5\xe0",
- [ 4305] = "\xa5\xe1", [ 4306] = "\xa5\xe2", [ 4307] = "\xa5\xe3",
- [ 4308] = "\xa5\xe4", [ 4309] = "\xa5\xe5", [ 4310] = "\xa5\xe6",
- [ 4311] = "\xa5\xe7", [ 4312] = "\xa5\xe8", [ 4313] = "\xa5\xe9",
- [ 4314] = "\xa5\xea", [ 4315] = "\xa5\xeb", [ 4316] = "\xa5\xec",
- [ 4317] = "\xa5\xed", [ 4318] = "\xa5\xee", [ 4319] = "\xa5\xef",
- [ 4320] = "\xa5\xf0", [ 4321] = "\xa5\xf1", [ 4322] = "\xa5\xf2",
- [ 4323] = "\xa5\xf3", [ 4324] = "\xa5\xf4", [ 4325] = "\xa5\xf5",
- [ 4326] = "\xa5\xf6", [ 4331] = "\xa1\xa6", [ 4332] = "\xa1\xbc",
- [ 4333] = "\xa1\xb3", [ 4334] = "\xa1\xb4", [ 4641] = "\xad\xea",
- [ 4642] = "\xad\xeb", [ 4649] = "\xad\xec", [ 4756] = "\xad\xe5",
- [ 4757] = "\xad\xe6", [ 4758] = "\xad\xe7", [ 4759] = "\xad\xe8",
- [ 4760] = "\xad\xe9", [ 4851] = "\xad\xc6", [ 4861] = "\xad\xca",
- [ 4868] = "\xad\xc1", [ 4872] = "\xad\xc4", [ 4882] = "\xad\xc2",
- [ 4883] = "\xad\xcc", [ 4886] = "\xad\xcb", [ 4887] = "\xad\xc5",
- [ 4891] = "\xad\xcd", [ 4902] = "