aboutsummaryrefslogtreecommitdiff
path: root/iconvdata
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1998-04-13 09:17:55 +0000
committerUlrich Drepper <drepper@redhat.com>1998-04-13 09:17:55 +0000
commit40b4c81d4ec13a7a5acdeb1288f1d897b511b36c (patch)
tree749983afdca46082e5edb506b00c72917f76ea18 /iconvdata
parent8acdf4fd69b5362bca57b9136b7d243333774484 (diff)
downloadglibc-40b4c81d4ec13a7a5acdeb1288f1d897b511b36c.tar.xz
glibc-40b4c81d4ec13a7a5acdeb1288f1d897b511b36c.zip
Update.
1998-04-13 09:11 Ulrich Drepper <drepper@cygnus.com> * iconvdata/eucjp.c: New file. * iconvdata/euccn.c: New file. * iconvdata/gb2312.h: New file. * iconvdata/gb2312.c: New file. * iconvdata/Makefile: Add rules for EUC-JP and EUC-CN. * iconvdata/gconv-modules: Likewise. * iconvdata/euckr.c: Use stdint.h instead of inttypes.h.
Diffstat (limited to 'iconvdata')
-rw-r--r--iconvdata/Makefile13
-rw-r--r--iconvdata/euccn.c304
-rw-r--r--iconvdata/euckr.c4
-rw-r--r--iconvdata/gb2312.c4560
-rw-r--r--iconvdata/gb2312.h185
-rw-r--r--iconvdata/gconv-modules10
6 files changed, 5072 insertions, 4 deletions
diff --git a/iconvdata/Makefile b/iconvdata/Makefile
index caa34d921c..6ac99ba3fe 100644
--- a/iconvdata/Makefile
+++ b/iconvdata/Makefile
@@ -26,7 +26,8 @@ modules := ISO8859-1 ISO8859-2 ISO8859-3 ISO8859-4 ISO8859-5 \
ISO8859-6 ISO8859-7 ISO8859-8 ISO8859-9 ISO8859-10 \
T.61 ISO_6937 SJIS KOI-8 KOI8-R LATIN-GREEK LATIN-GREEK-1 \
HP-ROMAN8 EBCDIC-AT-DE EBCDIC-AT-DE-A EBCDIC-CA-FR \
- EUC-KR UHC JOHAB libJIS libKSC ISO646 BIG5
+ EUC-KR UHC JOHAB libJIS libKSC ISO646 BIG5 EUC-JP libGB \
+ EUC-CN
modules.so := $(addsuffix .so, $(modules))
@@ -58,8 +59,11 @@ EUC-KR-routines := euckr
JOHAB-routines := johab
UHC-routines := uhc
BIG5-routines := big5
+EUC-JP-routines := eucjp
+EUC-CN-routines := euccn
libJIS-routines := jis0201 jis0208 jis0212
libKSC-routines := ksc5601
+libGB-routines := gb2312
LDFLAGS-EUC-KR.so = -Wl,-rpath,$(gconvdir)
$(objpfx)EUC-KR.so: $(objpfx)libKSC.so
@@ -67,9 +71,14 @@ LDFLAGS-JOHAB.so = -Wl,-rpath,$(gconvdir)
$(objpfx)JOHAB.so: $(objpfx)libKSC.so
LDFLAGS-UHC.so = -Wl,-rpath,$(gconvdir)
$(objpfx)UHC.so: $(objpfx)libKSC.so
+LDFLAGS-EUC-JP.so = -Wl,-rpath,$(gconvdir)
+$(objpfx)EUC-JP.so: $(objpfx)libJIS.so
+LDFLAGS-EUC-CN.so = -Wl,-rpath,$(gconvdir)
+$(objpfx)EUC-CN.so: $(objpfx)libGB.so
LDFLAGS-libJIS.so = -Wl,-soname,$(@F)
LDFLAGS-libKSC.so = -Wl,-soname,$(@F)
+LDFLAGS-libGB.so = -Wl,-soname,$(@F)
distribute := 8bit-generic.c 8bit-gap.c gap.pl gaptab.pl gconv-modules \
iso8859-1.c iso8859-2.c iso8859-3.c iso8859-4.c iso8859-5.c \
@@ -79,7 +88,7 @@ distribute := 8bit-generic.c 8bit-gap.c gap.pl gaptab.pl gconv-modules \
latin-greek.h latin-greek-1.c latin-greek-1.h ebcdic-at-de.c \
ebcdic-at-de-a.c ebcdic-ca-fr.c jis0201.c jis0208.c jis0212.c \
extra-module.mk euckr.c johab.c uhc.c ksc5601.c ksc5601.h \
- iso646.c big5.c
+ iso646.c big5.c eucjp.c gb2312.c gb2312.h euccn.c
# We build the transformation modules only when we build shared libs.
ifeq (yes,$(build-shared))
diff --git a/iconvdata/euccn.c b/iconvdata/euccn.c
new file mode 100644
index 0000000000..108974a972
--- /dev/null
+++ b/iconvdata/euccn.c
@@ -0,0 +1,304 @@
+/* Mapping tables for EUC-CN handling.
+ Copyright (C) 1998 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <gconv.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+#include <gb2312.h>
+
+/* Direction of the transformation. */
+enum direction
+{
+ illegal,
+ to_euccn,
+ from_euccn
+};
+
+struct euccn_data
+{
+ enum direction dir;
+};
+
+
+int
+gconv_init (struct gconv_step *step)
+{
+ /* Determine which direction. */
+ struct euccn_data *new_data;
+ enum direction dir;
+ int result;
+
+ if (strcasestr (step->from_name, "EUC-CN") != NULL)
+ dir = from_euccn;
+ else if (strcasestr (step->to_name, "EUC-CN") != NULL)
+ dir = to_euccn;
+ else
+ dir = illegal;
+
+ result = GCONV_NOCONV;
+ if (dir != illegal
+ && ((new_data
+ = (struct euccn_data *) malloc (sizeof (struct euccn_data)))
+ != NULL))
+ {
+ new_data->dir = dir;
+ step->data = new_data;
+ result = GCONV_OK;
+ }
+
+ return result;
+}
+
+
+void
+gconv_end (struct gconv_step *data)
+{
+ free (data->data);
+}
+
+
+int
+gconv (struct gconv_step *step, struct gconv_step_data *data,
+ const char *inbuf, size_t *inbufsize, size_t *written, int do_flush)
+{
+ struct gconv_step *next_step = step + 1;
+ struct gconv_step_data *next_data = data + 1;
+ gconv_fct fct = next_step->fct;
+ size_t do_write;
+ int result;
+
+ /* If the function is called with no input this means we have to reset
+ to the initial state. The possibly partly converted input is
+ dropped. */
+ if (do_flush)
+ {
+ do_write = 0;
+
+ /* Call the steps down the chain if there are any. */
+ if (data->is_last)
+ result = GCONV_OK;
+ else
+ {
+ struct gconv_step *next_step = step + 1;
+ struct gconv_step_data *next_data = data + 1;
+
+ result = (*fct) (next_step, next_data, NULL, 0, written, 1);
+
+ /* Clear output buffer. */
+ data->outbufavail = 0;
+ }
+ }
+ else
+ {
+ enum direction dir = ((struct euccn_data *) step->data)->dir;
+
+ do_write = 0;
+
+ do
+ {
+ result = GCONV_OK;
+
+ if (dir == from_euccn)
+ {
+ size_t inchars = *inbufsize;
+ size_t outwchars = data->outbufavail;
+ char *outbuf = data->outbuf;
+ size_t cnt = 0;
+
+ while (cnt < inchars
+ && (outwchars + sizeof (wchar_t) <= data->outbufsize))
+ {
+ int inchar = (unsigned char) inbuf[cnt];
+ wchar_t ch;
+
+ if (inchar <= 0x7f)
+ ch = (wchar_t) inchar;
+ else if ((inchar <= 0xa0 || inchar > 0xfe)
+ && inchar != 0x8e && inchar != 0x8f)
+ /* This is illegal. */
+ ch = L'\0';
+ else
+ {
+ /* Two or more byte character. First test whether the
+ next character is also available. */
+ const char *endp;
+ int inchar2;
+
+ if (cnt + 1 >= inchars)
+ {
+ /* The second character is not available. Store
+ the intermediate result. */
+ result = GCONV_INCOMPLETE_INPUT;
+ break;
+ }
+
+ inchar2 = (unsigned char) inbuf[++cnt];
+
+ /* All second bytes of a multibyte character must be
+ >= 0xa1. */
+ if (inchar2 < 0xa1)
+ {
+ /* This is an illegal character. */
+ --cnt;
+ result = GCONV_ILLEGAL_INPUT;
+ break;
+ }
+
+ /* This is code set 1: GB 2312-80. */
+ endp = &inbuf[cnt - 1];
+
+ ch = gb2312_to_ucs4 (&endp, 2, 0x80);
+ if (ch != L'\0')
+ ++cnt;
+
+ if (ch == UNKNOWN_10646_CHAR)
+ ch = L'\0';
+
+ if (ch == L'\0')
+ --cnt;
+ }
+
+ if (ch == L'\0' && inbuf[cnt] != '\0')
+ {
+ /* This is an illegal character. */
+ result = GCONV_ILLEGAL_INPUT;
+ break;
+ }
+
+ *((wchar_t *) (outbuf + outwchars)) = ch;
+ ++do_write;
+ outwchars += sizeof (wchar_t);
+ ++cnt;
+ }
+ *inbufsize -= cnt;
+ data->outbufavail = outwchars;
+ }
+ else
+ {
+ size_t inwchars = *inbufsize;
+ size_t outchars = data->outbufavail;
+ char *outbuf = data->outbuf;
+ size_t cnt = 0;
+ int extra = 0;
+
+ while (inwchars >= cnt + sizeof (wchar_t)
+ && outchars < data->outbufsize)
+ {
+ wchar_t ch = *((wchar_t *) (inbuf + cnt));
+
+ if (ch <= L'\x7f')
+ /* It's plain ASCII. */
+ outbuf[outchars] = ch;
+ else
+ {
+ /* Try the JIS character sets. */
+ size_t found;
+
+ found = ucs4_to_gb2312 (ch, &outbuf[outchars],
+ (data->outbufsize
+ - outchars));
+ if (found > 0)
+ {
+ /* It's a GB 2312 character, adjust it for
+ EUC-CN. */
+ outbuf[outchars++] += 0x80;
+ outbuf[outchars] += 0x80;
+ }
+ else if (found == 0)
+ {
+ /* We ran out of space. */
+ extra = 2;
+ break;
+ }
+ else
+ /* Illegal character. */
+ break;
+ }
+
+ ++do_write;
+ ++outchars;
+ cnt += sizeof (wchar_t);
+ }
+ *inbufsize -= cnt;
+ data->outbufavail = outchars;
+
+ if (outchars + extra < data->outbufsize)
+ {
+ /* If there is still room in the output buffer something
+ is wrong with the input. */
+ if (inwchars >= cnt + sizeof (wchar_t))
+ {
+ /* An error occurred. */
+ result = GCONV_ILLEGAL_INPUT;
+ break;
+ }
+ if (inwchars != cnt)
+ {
+ /* There are some unprocessed bytes at the end of the
+ input buffer. */
+ result = GCONV_INCOMPLETE_INPUT;
+ break;
+ }
+ }
+ }
+
+ if (result != GCONV_OK)
+ break;
+
+ if (data->is_last)
+ {
+ /* This is the last step. */
+ result = (*inbufsize > (dir == from_euccn
+ ? 0 : sizeof (wchar_t) - 1)
+ ? GCONV_FULL_OUTPUT : GCONV_EMPTY_INPUT);
+ break;
+ }
+
+ /* Status so far. */
+ result = GCONV_EMPTY_INPUT;
+
+ if (data->outbufavail > 0)
+ {
+ /* Call the functions below in the chain. */
+ size_t newavail = data->outbufavail;
+
+ result = (*fct) (next_step, next_data, data->outbuf, &newavail,
+ written, 0);
+
+ /* Correct the output buffer. */
+ if (newavail != data->outbufavail && newavail > 0)
+ {
+ memmove (data->outbuf,
+ &data->outbuf[data->outbufavail - newavail],
+ newavail);
+ data->outbufavail = newavail;
+ }
+ }
+ }
+ while (*inbufsize > 0 && result == GCONV_EMPTY_INPUT);
+ }
+
+ if (written != NULL && data->is_last)
+ *written = do_write;
+
+ return result;
+}
diff --git a/iconvdata/euckr.c b/iconvdata/euckr.c
index 9789e883e9..62dd2c47bf 100644
--- a/iconvdata/euckr.c
+++ b/iconvdata/euckr.c
@@ -19,7 +19,7 @@
Boston, MA 02111-1307, USA. */
#include <gconv.h>
-#include <inttypes.h>
+#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>
@@ -168,7 +168,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
/* 0xfe(->0x7e : row 94) and 0xc9(->0x59 : row 41) are user-defined areas */
- else if ( inchar <= 0xa0 || inchar >= 0xfe || inchar == 0xc9)
+ else if ( inchar <= 0xa0 || inchar > 0xfe || inchar == 0xc9)
/* This is illegal. */
ch = L'\0';
else
diff --git a/iconvdata/gb2312.c b/iconvdata/gb2312.c
new file mode 100644
index 0000000000..89d716196f
--- /dev/null
+++ b/iconvdata/gb2312.c
@@ -0,0 +1,4560 @@
+/* GB 2312 conversion tables.
+ Copyright (C) 1998 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <stdint.h>
+
+/* The conversion table to UCS4 has almost no holes. It can be generated with:
+
+ egrep '^0x' /mnt/cdrom/unix/mappings/eastasia/gb/gb2312.txt |
+ perl tab.pl
+
+ where tab.pl is:
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ $n=0;
+ while (<>) {
+ local($gb, $ucs4, %rest) = split;
+ local($u)=hex($ucs4);
+ local($g)=hex($gb);
+ printf ("\n ") if ($n % 4 eq 0);
+ ++$n;
+ printf (" [0x%04x] = 0x%04x,",
+ int(($g - 0x2121) / 256) * 94 + (($g - 0x2121) & 0xff), $u);
+ }
+ printf ("\n");
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ */
+const uint16_t gb2312_to_ucs[] =
+{
+ [0x0000] = 0x3000, [0x0001] = 0x3001, [0x0002] = 0x3002, [0x0003] = 0x30fb,
+ [0x0004] = 0x02c9, [0x0005] = 0x02c7, [0x0006] = 0x00a8, [0x0007] = 0x3003,
+ [0x0008] = 0x3005, [0x0009] = 0x2015, [0x000a] = 0xff5e, [0x000b] = 0x2225,
+ [0x000c] = 0x2026, [0x000d] = 0x2018, [0x000e] = 0x2019, [0x000f] = 0x201c,
+ [0x0010] = 0x201d, [0x0011] = 0x3014, [0x0012] = 0x3015, [0x0013] = 0x3008,
+ [0x0014] = 0x3009, [0x0015] = 0x300a, [0x0016] = 0x300b, [0x0017] = 0x300c,
+ [0x0018] = 0x300d, [0x0019] = 0x300e, [0x001a] = 0x300f, [0x001b] = 0x3016,
+ [0x001c] = 0x3017, [0x001d] = 0x3010, [0x001e] = 0x3011, [0x001f] = 0x00b1,
+ [0x0020] = 0x00d7, [0x0021] = 0x00f7, [0x0022] = 0x2236, [0x0023] = 0x2227,
+ [0x0024] = 0x2228, [0x0025] = 0x2211, [0x0026] = 0x220f, [0x0027] = 0x222a,
+ [0x0028] = 0x2229, [0x0029] = 0x2208, [0x002a] = 0x2237, [0x002b] = 0x221a,
+ [0x002c] = 0x22a5, [0x002d] = 0x2225, [0x002e] = 0x2220, [0x002f] = 0x2312,
+ [0x0030] = 0x2299, [0x0031] = 0x222b, [0x0032] = 0x222e, [0x0033] = 0x2261,
+ [0x0034] = 0x224c, [0x0035] = 0x2248, [0x0036] = 0x223d, [0x0037] = 0x221d,
+ [0x0038] = 0x2260, [0x0039] = 0x226e, [0x003a] = 0x226f, [0x003b] = 0x2264,
+ [0x003c] = 0x2265, [0x003d] = 0x221e, [0x003e] = 0x2235, [0x003f] = 0x2234,
+ [0x0040] = 0x2642, [0x0041] = 0x2640, [0x0042] = 0x00b0, [0x0043] = 0x2032,
+ [0x0044] = 0x2033, [0x0045] = 0x2103, [0x0046] = 0xff04, [0x0047] = 0x00a4,
+ [0x0048] = 0xffe0, [0x0049] = 0xffe1, [0x004a] = 0x2030, [0x004b] = 0x00a7,
+ [0x004c] = 0x2116, [0x004d] = 0x2606, [0x004e] = 0x2605, [0x004f] = 0x25cb,
+ [0x0050] = 0x25cf, [0x0051] = 0x25ce, [0x0052] = 0x25c7, [0x0053] = 0x25c6,
+ [0x0054] = 0x25a1, [0x0055] = 0x25a0, [0x0056] = 0x25b3, [0x0057] = 0x25b2,
+ [0x0058] = 0x203b, [0x0059] = 0x2192, [0x005a] = 0x2190, [0x005b] = 0x2191,
+ [0x005c] = 0x2193, [0x005d] = 0x3013, [0x006e] = 0x2488, [0x006f] = 0x2489,
+ [0x0070] = 0x248a, [0x0071] = 0x248b, [0x0072] = 0x248c, [0x0073] = 0x248d,
+ [0x0074] = 0x248e, [0x0075] = 0x248f, [0x0076] = 0x2490, [0x0077] = 0x2491,
+ [0x0078] = 0x2492, [0x0079] = 0x2493, [0x007a] = 0x2494, [0x007b] = 0x2495,
+ [0x007c] = 0x2496, [0x007d] = 0x2497, [0x007e] = 0x2498, [0x007f] = 0x2499,
+ [0x0080] = 0x249a, [0x0081] = 0x249b, [0x0082] = 0x2474, [0x0083] = 0x2475,
+ [0x0084] = 0x2476, [0x0085] = 0x2477, [0x0086] = 0x2478, [0x0087] = 0x2479,
+ [0x0088] = 0x247a, [0x0089] = 0x247b, [0x008a] = 0x247c, [0x008b] = 0x247d,
+ [0x008c] = 0x247e, [0x008d] = 0x247f, [0x008e] = 0x2480, [0x008f] = 0x2481,
+ [0x0090] = 0x2482, [0x0091] = 0x2483, [0x0092] = 0x2484, [0x0093] = 0x2485,
+ [0x0094] = 0x2486, [0x0095] = 0x2487, [0x0096] = 0x2460, [0x0097] = 0x2461,
+ [0x0098] = 0x2462, [0x0099] = 0x2463, [0x009a] = 0x2464, [0x009b] = 0x2465,
+ [0x009c] = 0x2466, [0x009d] = 0x2467, [0x009e] = 0x2468, [0x009f] = 0x2469,
+ [0x00a2] = 0x3220, [0x00a3] = 0x3221, [0x00a4] = 0x3222, [0x00a5] = 0x3223,
+ [0x00a6] = 0x3224, [0x00a7] = 0x3225, [0x00a8] = 0x3226, [0x00a9] = 0x3227,
+ [0x00aa] = 0x3228, [0x00ab] = 0x3229, [0x00ae] = 0x2160, [0x00af] = 0x2161,
+ [0x00b0] = 0x2162, [0x00b1] = 0x2163, [0x00b2] = 0x2164, [0x00b3] = 0x2165,
+ [0x00b4] = 0x2166, [0x00b5] = 0x2167, [0x00b6] = 0x2168, [0x00b7] = 0x2169,
+ [0x00b8] = 0x216a, [0x00b9] = 0x216b, [0x00bc] = 0xff01, [0x00bd] = 0xff02,
+ [0x00be] = 0xff03, [0x00bf] = 0xffe5, [0x00c0] = 0xff05, [0x00c1] = 0xff06,
+ [0x00c2] = 0xff07, [0x00c3] = 0xff08, [0x00c4] = 0xff09, [0x00c5] = 0xff0a,
+ [0x00c6] = 0xff0b, [0x00c7] = 0xff0c, [0x00c8] = 0xff0d, [0x00c9] = 0xff0e,
+ [0x00ca] = 0xff0f, [0x00cb] = 0xff10, [0x00cc] = 0xff11, [0x00cd] = 0xff12,
+ [0x00ce] = 0xff13, [0x00cf] = 0xff14, [0x00d0] = 0xff15, [0x00d1] = 0xff16,
+ [0x00d2] = 0xff17, [0x00d3] = 0xff18, [0x00d4] = 0xff19, [0x00d5] = 0xff1a,
+ [0x00d6] = 0xff1b, [0x00d7] = 0xff1c, [0x00d8] = 0xff1d, [0x00d9] = 0xff1e,
+ [0x00da] = 0xff1f, [0x00db] = 0xff20, [0x00dc] = 0xff21, [0x00dd] = 0xff22,
+ [0x00de] = 0xff23, [0x00df] = 0xff24, [0x00e0] = 0xff25, [0x00e1] = 0xff26,
+ [0x00e2] = 0xff27, [0x00e3] = 0xff28, [0x00e4] = 0xff29, [0x00e5] = 0xff2a,
+ [0x00e6] = 0xff2b, [0x00e7] = 0xff2c, [0x00e8] = 0xff2d, [0x00e9] = 0xff2e,
+ [0x00ea] = 0xff2f, [0x00eb] = 0xff30, [0x00ec] = 0xff31, [0x00ed] = 0xff32,
+ [0x00ee] = 0xff33, [0x00ef] = 0xff34, [0x00f0] = 0xff35, [0x00f1] = 0xff36,
+ [0x00f2] = 0xff37, [0x00f3] = 0xff38, [0x00f4] = 0xff39, [0x00f5] = 0xff3a,
+ [0x00f6] = 0xff3b, [0x00f7] = 0xff3c, [0x00f8] = 0xff3d, [0x00f9] = 0xff3e,
+ [0x00fa] = 0xff3f, [0x00fb] = 0xff40, [0x00fc] = 0xff41, [0x00fd] = 0xff42,
+ [0x00fe] = 0xff43, [0x00ff] = 0xff44, [0x0100] = 0xff45, [0x0101] = 0xff46,
+ [0x0102] = 0xff47, [0x0103] = 0xff48, [0x0104] = 0xff49, [0x0105] = 0xff4a,
+ [0x0106] = 0xff4b, [0x0107] = 0xff4c, [0x0108] = 0xff4d, [0x0109] = 0xff4e,
+ [0x010a] = 0xff4f, [0x010b] = 0xff50, [0x010c] = 0xff51, [0x010d] = 0xff52,
+ [0x010e] = 0xff53, [0x010f] = 0xff54, [0x0110] = 0xff55, [0x0111] = 0xff56,
+ [0x0112] = 0xff57, [0x0113] = 0xff58, [0x0114] = 0xff59, [0x0115] = 0xff5a,
+ [0x0116] = 0xff5b, [0x0117] = 0xff5c, [0x0118] = 0xff5d, [0x0119] = 0xffe3,
+ [0x011a] = 0x3041, [0x011b] = 0x3042, [0x011c] = 0x3043, [0x011d] = 0x3044,
+ [0x011e] = 0x3045, [0x011f] = 0x3046, [0x0120] = 0x3047, [0x0121] = 0x3048,
+ [0x0122] = 0x3049, [0x0123] = 0x304a, [0x0124] = 0x304b, [0x0125] = 0x304c,
+ [0x0126] = 0x304d, [0x0127] = 0x304e, [0x0128] = 0x304f, [0x0129] = 0x3050,
+ [0x012a] = 0x3051, [0x012b] = 0x3052, [0x012c] = 0x3053, [0x012d] = 0x3054,
+ [0x012e] = 0x3055, [0x012f] = 0x3056, [0x0130] = 0x3057, [0x0131] = 0x3058,
+ [0x0132] = 0x3059, [0x0133] = 0x305a, [0x0134] = 0x305b, [0x0135] = 0x305c,
+ [0x0136] = 0x305d, [0x0137] = 0x305e, [0x0138] = 0x305f, [0x0139] = 0x3060,
+ [0x013a] = 0x3061, [0x013b] = 0x3062, [0x013c] = 0x3063, [0x013d] = 0x3064,
+ [0x013e] = 0x3065, [0x013f] = 0x3066, [0x0140] = 0x3067, [0x0141] = 0x3068,
+ [0x0142] = 0x3069, [0x0143] = 0x306a, [0x0144] = 0x306b, [0x0145] = 0x306c,
+ [0x0146] = 0x306d, [0x0147] = 0x306e, [0x0148] = 0x306f, [0x0149] = 0x3070,
+ [0x014a] = 0x3071, [0x014b] = 0x3072, [0x014c] = 0x3073, [0x014d] = 0x3074,
+ [0x014e] = 0x3075, [0x014f] = 0x3076, [0x0150] = 0x3077, [0x0151] = 0x3078,
+ [0x0152] = 0x3079, [0x0153] = 0x307a, [0x0154] = 0x307b, [0x0155] = 0x307c,
+ [0x0156] = 0x307d, [0x0157] = 0x307e, [0x0158] = 0x307f, [0x0159] = 0x3080,
+ [0x015a] = 0x3081, [0x015b] = 0x3082, [0x015c] = 0x3083, [0x015d] = 0x3084,
+ [0x015e] = 0x3085, [0x015f] = 0x3086, [0x0160] = 0x3087, [0x0161] = 0x3088,
+ [0x0162] = 0x3089, [0x0163] = 0x308a, [0x0164] = 0x308b, [0x0165] = 0x308c,
+ [0x0166] = 0x308d, [0x0167] = 0x308e, [0x0168] = 0x308f, [0x0169] = 0x3090,
+ [0x016a] = 0x3091, [0x016b] = 0x3092, [0x016c] = 0x3093, [0x0178] = 0x30a1,
+ [0x0179] = 0x30a2, [0x017a] = 0x30a3, [0x017b] = 0x30a4, [0x017c] = 0x30a5,
+ [0x017d] = 0x30a6, [0x017e] = 0x30a7, [0x017f] = 0x30a8, [0x0180] = 0x30a9,
+ [0x0181] = 0x30aa, [0x0182] = 0x30ab, [0x0183] = 0x30ac, [0x0184] = 0x30ad,
+ [0x0185] = 0x30ae, [0x0186] = 0x30af, [0x0187] = 0x30b0, [0x0188] = 0x30b1,
+ [0x0189] = 0x30b2, [0x018a] = 0x30b3, [0x018b] = 0x30b4, [0x018c] = 0x30b5,
+ [0x018d] = 0x30b6, [0x018e] = 0x30b7, [0x018f] = 0x30b8, [0x0190] = 0x30b9,
+ [0x0191] = 0x30ba, [0x0192] = 0x30bb, [0x0193] = 0x30bc, [0x0194] = 0x30bd,
+ [0x0195] = 0x30be, [0x0196] = 0x30bf, [0x0197] = 0x30c0, [0x0198] = 0x30c1,
+ [0x0199] = 0x30c2, [0x019a] = 0x30c3, [0x019b] = 0x30c4, [0x019c] = 0x30c5,
+ [0x019d] = 0x30c6, [0x019e] = 0x30c7, [0x019f] = 0x30c8, [0x01a0] = 0x30c9,
+ [0x01a1] = 0x30ca, [0x01a2] = 0x30cb, [0x01a3] = 0x30cc, [0x01a4] = 0x30cd,
+ [0x01a5] = 0x30ce, [0x01a6] = 0x30cf, [0x01a7] = 0x30d0, [0x01a8] = 0x30d1,
+ [0x01a9] = 0x30d2, [0x01aa] = 0x30d3, [0x01ab] = 0x30d4, [0x01ac] = 0x30d5,
+ [0x01ad] = 0x30d6, [0x01ae] = 0x30d7, [0x01af] = 0x30d8, [0x01b0] = 0x30d9,
+ [0x01b1] = 0x30da, [0x01b2] = 0x30db, [0x01b3] = 0x30dc, [0x01b4] = 0x30dd,
+ [0x01b5] = 0x30de, [0x01b6] = 0x30df, [0x01b7] = 0x30e0, [0x01b8] = 0x30e1,
+ [0x01b9] = 0x30e2, [0x01ba] = 0x30e3, [0x01bb] = 0x30e4, [0x01bc] = 0x30e5,
+ [0x01bd] = 0x30e6, [0x01be] = 0x30e7, [0x01bf] = 0x30e8, [0x01c0] = 0x30e9,
+ [0x01c1] = 0x30ea, [0x01c2] = 0x30eb, [0x01c3] = 0x30ec, [0x01c4] = 0x30ed,
+ [0x01c5] = 0x30ee, [0x01c6] = 0x30ef, [0x01c7] = 0x30f0, [0x01c8] = 0x30f1,
+ [0x01c9] = 0x30f2, [0x01ca] = 0x30f3, [0x01cb] = 0x30f4, [0x01cc] = 0x30f5,
+ [0x01cd] = 0x30f6, [0x01d6] = 0x0391, [0x01d7] = 0x0392, [0x01d8] = 0x0393,
+ [0x01d9] = 0x0394, [0x01da] = 0x0395, [0x01db] = 0x0396, [0x01dc] = 0x0397,
+ [0x01dd] = 0x0398, [0x01de] = 0x0399, [0x01df] = 0x039a, [0x01e0] = 0x039b,
+ [0x01e1] = 0x039c, [0x01e2] = 0x039d, [0x01e3] = 0x039e, [0x01e4] = 0x039f,
+ [0x01e5] = 0x03a0, [0x01e6] = 0x03a1, [0x01e7] = 0x03a3, [0x01e8] = 0x03a4,
+ [0x01e9] = 0x03a5, [0x01ea] = 0x03a6, [0x01eb] = 0x03a7, [0x01ec] = 0x03a8,
+ [0x01ed] = 0x03a9, [0x01f6] = 0x03b1, [0x01f7] = 0x03b2, [0x01f8] = 0x03b3,
+ [0x01f9] = 0x03b4, [0x01fa] = 0x03b5, [0x01fb] = 0x03b6, [0x01fc] = 0x03b7,
+ [0x01fd] = 0x03b8, [0x01fe] = 0x03b9, [0x01ff] = 0x03ba, [0x0200] = 0x03bb,
+ [0x0201] = 0x03bc, [0x0202] = 0x03bd, [0x0203] = 0x03be, [0x0204] = 0x03bf,
+ [0x0205] = 0x03c0, [0x0206] = 0x03c1, [0x0207] = 0x03c3, [0x0208] = 0x03c4,
+ [0x0209] = 0x03c5, [0x020a] = 0x03c6, [0x020b] = 0x03c7, [0x020c] = 0x03c8,
+ [0x020d] = 0x03c9, [0x0234] = 0x0410, [0x0235] = 0x0411, [0x0236] = 0x0412,
+ [0x0237] = 0x0413, [0x0238] = 0x0414, [0x0239] = 0x0415, [0x023a] = 0x0401,
+ [0x023b] = 0x0416, [0x023c] = 0x0417, [0x023d] = 0x0418, [0x023e] = 0x0419,
+ [0x023f] = 0x041a, [0x0240] = 0x041b, [0x0241] = 0x041c, [0x0242] = 0x041d,
+ [0x0243] = 0x041e, [0x0244] = 0x041f, [0x0245] = 0x0420, [0x0246] = 0x0421,
+ [0x0247] = 0x0422, [0x0248] = 0x0423, [0x0249] = 0x0424, [0x024a] = 0x0425,
+ [0x024b] = 0x0426, [0x024c] = 0x0427, [0x024d] = 0x0428, [0x024e] = 0x0429,
+ [0x024f] = 0x042a, [0x0250] = 0x042b, [0x0251] = 0x042c, [0x0252] = 0x042d,
+ [0x0253] = 0x042e, [0x0254] = 0x042f, [0x0264] = 0x0430, [0x0265] = 0x0431,
+ [0x0266] = 0x0432, [0x0267] = 0x0433, [0x0268] = 0x0434, [0x0269] = 0x0435,
+ [0x026a] = 0x0451, [0x026b] = 0x0436, [0x026c] = 0x0437, [0x026d] = 0x0438,
+ [0x026e] = 0x0439, [0x026f] = 0x043a, [0x0270] = 0x043b, [0x0271] = 0x043c,
+ [0x0272] = 0x043d, [0x0273] = 0x043e, [0x0274] = 0x043f, [0x0275] = 0x0440,
+ [0x0276] = 0x0441, [0x0277] = 0x0442, [0x0278] = 0x0443, [0x0279] = 0x0444,
+ [0x027a] = 0x0445, [0x027b] = 0x0446, [0x027c] = 0x0447, [0x027d] = 0x0448,
+ [0x027e] = 0x0449, [0x027f] = 0x044a, [0x0280] = 0x044b, [0x0281] = 0x044c,
+ [0x0282] = 0x044d, [0x0283] = 0x044e, [0x0284] = 0x044f, [0x0292] = 0x0101,
+ [0x0293] = 0x00e1, [0x0294] = 0x01ce, [0x0295] = 0x00e0, [0x0296] = 0x0113,
+ [0x0297] = 0x00e9, [0x0298] = 0x011b, [0x0299] = 0x00e8, [0x029a] = 0x012b,
+ [0x029b] = 0x00ed, [0x029c] = 0x01d0, [0x029d] = 0x00ec, [0x029e] = 0x014d,
+ [0x029f] = 0x00f3, [0x02a0] = 0x01d2, [0x02a1] = 0x00f2, [0x02a2] = 0x016b,
+ [0x02a3] = 0x00fa, [0x02a4] = 0x01d4, [0x02a5] = 0x00f9, [0x02a6] = 0x01d6,
+ [0x02a7] = 0x01d8, [0x02a8] = 0x01da, [0x02a9] = 0x01dc, [0x02aa] = 0x00fc,
+ [0x02ab] = 0x00ea, [0x02b6] = 0x3105, [0x02b7] = 0x3106