diff options
Diffstat (limited to 'strings')
-rwxr-xr-x | strings/CMakeLists.txt | 4 | ||||
-rw-r--r-- | strings/Makefile.am | 19 | ||||
-rw-r--r-- | strings/ctype-big5.c | 621 | ||||
-rw-r--r-- | strings/ctype-bin.c | 5 | ||||
-rw-r--r-- | strings/ctype-cp932.c | 1510 | ||||
-rw-r--r-- | strings/ctype-euc_kr.c | 1275 | ||||
-rw-r--r-- | strings/ctype-eucjpms.c | 1541 | ||||
-rw-r--r-- | strings/ctype-gb2312.c | 646 | ||||
-rw-r--r-- | strings/ctype-gbk.c | 862 | ||||
-rw-r--r-- | strings/ctype-latin1.c | 5 | ||||
-rw-r--r-- | strings/ctype-mb.c | 113 | ||||
-rw-r--r-- | strings/ctype-simple.c | 10 | ||||
-rw-r--r-- | strings/ctype-sjis.c | 879 | ||||
-rw-r--r-- | strings/ctype-uca.c | 11 | ||||
-rw-r--r-- | strings/ctype-ujis.c | 1271 | ||||
-rw-r--r-- | strings/ctype.c | 5 | ||||
-rw-r--r-- | strings/decimal.c | 45 | ||||
-rw-r--r-- | strings/dtoa.c | 2780 | ||||
-rw-r--r-- | strings/longlong2str.c | 10 | ||||
-rw-r--r-- | strings/longlong2str_asm.c | 5 | ||||
-rw-r--r-- | strings/my_vsnprintf.c | 69 | ||||
-rw-r--r-- | strings/str_test.c | 16 | ||||
-rw-r--r-- | strings/strtod.c | 236 |
23 files changed, 11590 insertions, 348 deletions
diff --git a/strings/CMakeLists.txt b/strings/CMakeLists.txt index 294a129fc1b..572ca076a41 100755 --- a/strings/CMakeLists.txt +++ b/strings/CMakeLists.txt @@ -18,10 +18,10 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) SET(STRINGS_SOURCES bchange.c bcmp.c bfill.c bmove512.c bmove_upp.c ctype-big5.c ctype-bin.c ctype-cp932.c ctype-czech.c ctype-euc_kr.c ctype-eucjpms.c ctype-extra.c ctype-gb2312.c ctype-gbk.c ctype-latin1.c ctype-mb.c ctype-simple.c ctype-sjis.c ctype-tis620.c ctype-uca.c - ctype-ucs2.c ctype-ujis.c ctype-utf8.c ctype-win1250ch.c ctype.c decimal.c int2str.c + ctype-ucs2.c ctype-ujis.c ctype-utf8.c ctype-win1250ch.c ctype.c decimal.c dtoa.c int2str.c is_prefix.c llstr.c longlong2str.c my_strtoll10.c my_vsnprintf.c r_strinstr.c str2int.c str_alloc.c strcend.c strend.c strfill.c strmake.c strmov.c strnmov.c - strtod.c strtol.c strtoll.c strtoul.c strtoull.c strxmov.c strxnmov.c xml.c + strtol.c strtoll.c strtoul.c strtoull.c strxmov.c strxnmov.c xml.c my_strchr.c strcont.c strinstr.c strnlen.c) IF(NOT SOURCE_SUBLIBS) diff --git a/strings/Makefile.am b/strings/Makefile.am index db9016b7148..ff4436ddbcb 100644 --- a/strings/Makefile.am +++ b/strings/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2000-2006 MySQL AB +# Copyright (C) 2000-2006 MySQL AB, 2009 Sun Microsystems, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,25 +15,34 @@ # This file is public domain and comes with NO WARRANTY of any kind -INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include +# +# Note that the string library is built with #define THREAD, +# which by default cause all the thread related code (my_pthread.h) +# and therefore the associated instrumentation (mysql/psi/mysql_thread.h) +# to be used. +# Since the string code itself is not instrumented, we use +# #define DISABLE_MYSQL_THREAD_H here to avoid unneeded dependencies. +# + +INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -DDISABLE_MYSQL_THREAD_H pkglib_LIBRARIES = libmystrings.a # Exact one of ASSEMBLER_X if ASSEMBLER_x86 ASRCS = strings-x86.s longlong2str-x86.s my_strtoll10-x86.s -CSRCS = bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c strtod.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-cp932.c ctype-czech.c ctype-eucjpms.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-ucs2.c ctype-uca.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c decimal.c ctype-extra.c str_alloc.c longlong2str_asm.c my_strchr.c strmov.c +CSRCS = bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-cp932.c ctype-czech.c ctype-eucjpms.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-ucs2.c ctype-uca.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c decimal.c ctype-extra.c str_alloc.c longlong2str_asm.c my_strchr.c dtoa.c strmov.c else if ASSEMBLER_sparc32 # These file MUST all be on the same line!! Otherwise automake # generats a very broken makefile ASRCS = bmove_upp-sparc.s strappend-sparc.s strend-sparc.s strinstr-sparc.s strmake-sparc.s strmov-sparc.s strnmov-sparc.s strstr-sparc.s -CSRCS = strcont.c strfill.c strcend.c is_prefix.c longlong2str.c bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c strtod.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c strxmov.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-cp932.c ctype-czech.c ctype-eucjpms.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-ucs2.c ctype-uca.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c decimal.c ctype-extra.c my_strtoll10.c str_alloc.c my_strchr.c strmov.c +CSRCS = strcont.c strfill.c strcend.c is_prefix.c longlong2str.c bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c strxmov.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-cp932.c ctype-czech.c ctype-eucjpms.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-ucs2.c ctype-uca.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c decimal.c ctype-extra.c my_strtoll10.c str_alloc.c my_strchr.c dtoa.c strmov.c else #no assembler ASRCS = # These file MUST all be on the same line!! Otherwise automake # generats a very broken makefile -CSRCS = strxmov.c bmove_upp.c strappend.c strcont.c strend.c strfill.c strcend.c is_prefix.c strstr.c strinstr.c strmake.c strnmov.c strmov.c longlong2str.c bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c strtod.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-cp932.c ctype-czech.c ctype-eucjpms.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-ucs2.c ctype-uca.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c decimal.c ctype-extra.c my_strtoll10.c str_alloc.c my_strchr.c +CSRCS = strxmov.c bmove_upp.c strappend.c strcont.c strend.c strfill.c strcend.c is_prefix.c strstr.c strinstr.c strmake.c strnmov.c strmov.c longlong2str.c bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-cp932.c ctype-czech.c ctype-eucjpms.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-ucs2.c ctype-uca.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c decimal.c ctype-extra.c my_strtoll10.c str_alloc.c my_strchr.c dtoa.c endif endif diff --git a/strings/ctype-big5.c b/strings/ctype-big5.c index 3da307b82fc..966acdfa8f0 100644 --- a/strings/ctype-big5.c +++ b/strings/ctype-big5.c @@ -176,6 +176,623 @@ static uchar NEAR sort_order_big5[]= (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377', }; + +static MY_UNICASE_INFO cA2[256]= +{ + /* A200-A20F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* A210-A21F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* A220-A22F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* A230-A23F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* A240-A24F */ + {0xA240,0xA240,0xFFFD}, + {0xA241,0xA241,0xFF0F}, + {0xA242,0xA242,0xFF3C}, + {0xA243,0xA243,0xFF04}, + {0xA244,0xA244,0x00A5}, + {0xA245,0xA245,0x3012}, + {0xA246,0xA246,0x00A2}, + {0xA247,0xA247,0x00A3}, + {0xA248,0xA248,0xFF05}, + {0xA249,0xA249,0xFF20}, + {0xA24A,0xA24A,0x2103}, + {0xA24B,0xA24B,0x2109}, + {0xA24C,0xA24C,0xFE69}, + {0xA24D,0xA24D,0xFE6A}, + {0xA24E,0xA24E,0xFE6B}, + {0xA24F,0xA24F,0x33D5}, + /* A250-A25F */ + {0xA250,0xA250,0x339C}, + {0xA251,0xA251,0x339D}, + {0xA252,0xA252,0x339E}, + {0xA253,0xA253,0x33CE}, + {0xA254,0xA254,0x33A1}, + {0xA255,0xA255,0x338E}, + {0xA256,0xA256,0x338F}, + {0xA257,0xA257,0x33C4}, + {0xA258,0xA258,0x00B0}, + {0xA259,0xA259,0x5159}, + {0xA25A,0xA25A,0x515B}, + {0xA25B,0xA25B,0x515E}, + {0xA25C,0xA25C,0x515D}, + {0xA25D,0xA25D,0x5161}, + {0xA25E,0xA25E,0x5163}, + {0xA25F,0xA25F,0x55E7}, + /* A260-A26F */ + {0xA260,0xA260,0x74E9}, + {0xA261,0xA261,0x7CCE}, + {0xA262,0xA262,0x2581}, + {0xA263,0xA263,0x2582}, + {0xA264,0xA264,0x2583}, + {0xA265,0xA265,0x2584}, + {0xA266,0xA266,0x2585}, + {0xA267,0xA267,0x2586}, + {0xA268,0xA268,0x2587}, + {0xA269,0xA269,0x2588}, + {0xA26A,0xA26A,0x258F}, + {0xA26B,0xA26B,0x258E}, + {0xA26C,0xA26C,0x258D}, + {0xA26D,0xA26D,0x258C}, + {0xA26E,0xA26E,0x258B}, + {0xA26F,0xA26F,0x258A}, + /* A270-A27F */ + {0xA270,0xA270,0x2589}, + {0xA271,0xA271,0x253C}, + {0xA272,0xA272,0x2534}, + {0xA273,0xA273,0x252C}, + {0xA274,0xA274,0x2524}, + {0xA275,0xA275,0x251C}, + {0xA276,0xA276,0x2594}, + {0xA277,0xA277,0x2500}, + {0xA278,0xA278,0x2502}, + {0xA279,0xA279,0x2595}, + {0xA27A,0xA27A,0x250C}, + {0xA27B,0xA27B,0x2510}, + {0xA27C,0xA27C,0x2514}, + {0xA27D,0xA27D,0x2518}, + {0xA27E,0xA27E,0x256D}, + {0x0000,0x0000,0x0000}, + /* A280-A28F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* A290-A29F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* A2A0-A2AF */ + {0x0000,0x0000,0x0000}, + {0xA2A1,0xA2A1,0x256E}, + {0xA2A2,0xA2A2,0x2570}, + {0xA2A3,0xA2A3,0x256F}, + {0xA2A4,0xA2A4,0x2550}, + {0xA2A5,0xA2A5,0x255E}, + {0xA2A6,0xA2A6,0x256A}, + {0xA2A7,0xA2A7,0x2561}, + {0xA2A8,0xA2A8,0x25E2}, + {0xA2A9,0xA2A9,0x25E3}, + {0xA2AA,0xA2AA,0x25E5}, + {0xA2AB,0xA2AB,0x25E4}, + {0xA2AC,0xA2AC,0x2571}, + {0xA2AD,0xA2AD,0x2572}, + {0xA2AE,0xA2AE,0x2573}, + {0xA2AF,0xA2AF,0xFF10}, + /* A2B0-A2BF */ + {0xA2B0,0xA2B0,0xFF11}, + {0xA2B1,0xA2B1,0xFF12}, + {0xA2B2,0xA2B2,0xFF13}, + {0xA2B3,0xA2B3,0xFF14}, + {0xA2B4,0xA2B4,0xFF15}, + {0xA2B5,0xA2B5,0xFF16}, + {0xA2B6,0xA2B6,0xFF17}, + {0xA2B7,0xA2B7,0xFF18}, + {0xA2B8,0xA2B8,0xFF19}, + {0xA2B9,0xA2B9,0x2160}, + {0xA2BA,0xA2BA,0x2161}, + {0xA2BB,0xA2BB,0x2162}, + {0xA2BC,0xA2BC,0x2163}, + {0xA2BD,0xA2BD,0x2164}, + {0xA2BE,0xA2BE,0x2165}, + {0xA2BF,0xA2BF,0x2166}, + /* A2C0-A2CF */ + {0xA2C0,0xA2C0,0x2167}, + {0xA2C1,0xA2C1,0x2168}, + {0xA2C2,0xA2C2,0x2169}, + {0xA2C3,0xA2C3,0x3021}, + {0xA2C4,0xA2C4,0x3022}, + {0xA2C5,0xA2C5,0x3023}, + {0xA2C6,0xA2C6,0x3024}, + {0xA2C7,0xA2C7,0x3025}, + {0xA2C8,0xA2C8,0x3026}, + {0xA2C9,0xA2C9,0x3027}, + {0xA2CA,0xA2CA,0x3028}, + {0xA2CB,0xA2CB,0x3029}, + {0xA2CC,0xA2CC,0xFFFD}, + {0xA2CD,0xA2CD,0x5344}, + {0xA2CE,0xA2CE,0xFFFD}, + {0xA2CF,0xA2E9,0xFF21}, + /* A2D0-A2DF */ + {0xA2D0,0xA2EA,0xFF22}, + {0xA2D1,0xA2EB,0xFF23}, + {0xA2D2,0xA2EC,0xFF24}, + {0xA2D3,0xA2ED,0xFF25}, + {0xA2D4,0xA2EE,0xFF26}, + {0xA2D5,0xA2EF,0xFF27}, + {0xA2D6,0xA2F0,0xFF28}, + {0xA2D7,0xA2F1,0xFF29}, + {0xA2D8,0xA2F2,0xFF2A}, + {0xA2D9,0xA2F3,0xFF2B}, + {0xA2DA,0xA2F4,0xFF2C}, + {0xA2DB,0xA2F5,0xFF2D}, + {0xA2DC,0xA2F6,0xFF2E}, + {0xA2DD,0xA2F7,0xFF2F}, + {0xA2DE,0xA2F8,0xFF30}, + {0xA2DF,0xA2F9,0xFF31}, + /* A2E0-A2EF */ + {0xA2E0,0xA2FA,0xFF32}, + {0xA2E1,0xA2FB,0xFF33}, + {0xA2E2,0xA2FC,0xFF34}, + {0xA2E3,0xA2FD,0xFF35}, + {0xA2E4,0xA2FE,0xFF36}, + {0xA2E5,0xA340,0xFF37}, + {0xA2E6,0xA341,0xFF38}, + {0xA2E7,0xA342,0xFF39}, + {0xA2E8,0xA343,0xFF3A}, + {0xA2CF,0xA2E9,0xFF41}, + {0xA2D0,0xA2EA,0xFF42}, + {0xA2D1,0xA2EB,0xFF43}, + {0xA2D2,0xA2EC,0xFF44}, + {0xA2D3,0xA2ED,0xFF45}, + {0xA2D4,0xA2EE,0xFF46}, + {0xA2D5,0xA2EF,0xFF47}, + /* A2F0-A2FF */ + {0xA2D6,0xA2F0,0xFF48}, + {0xA2D7,0xA2F1,0xFF49}, + {0xA2D8,0xA2F2,0xFF4A}, + {0xA2D9,0xA2F3,0xFF4B}, + {0xA2DA,0xA2F4,0xFF4C}, + {0xA2DB,0xA2F5,0xFF4D}, + {0xA2DC,0xA2F6,0xFF4E}, + {0xA2DD,0xA2F7,0xFF4F}, + {0xA2DE,0xA2F8,0xFF50}, + {0xA2DF,0xA2F9,0xFF51}, + {0xA2E0,0xA2FA,0xFF52}, + {0xA2E1,0xA2FB,0xFF53}, + {0xA2E2,0xA2FC,0xFF54}, + {0xA2E3,0xA2FD,0xFF55}, + {0xA2E4,0xA2FE,0xFF56}, + {0x0000,0x0000,0x0000} +}; + + +static MY_UNICASE_INFO cA3[256]= +{ + /* A300-A30F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* A310-A31F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* A320-A32F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* A330-A33F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* A340-A34F */ + {0xA2E5,0xA340,0xFF57}, + {0xA2E6,0xA341,0xFF58}, + {0xA2E7,0xA342,0xFF59}, + {0xA2E8,0xA343,0xFF5A}, + {0xA344,0xA35C,0x0391}, + {0xA345,0xA35D,0x0392}, + {0xA346,0xA35E,0x0393}, + {0xA347,0xA35F,0x0394}, + {0xA348,0xA360,0x0395}, + {0xA349,0xA361,0x0396}, + {0xA34A,0xA362,0x0397}, + {0xA34B,0xA363,0x0398}, + {0xA34C,0xA364,0x0399}, + {0xA34D,0xA365,0x039A}, + {0xA34E,0xA366,0x039B}, + {0xA34F,0xA367,0x039C}, + /* A350-A35F */ + {0xA350,0xA368,0x039D}, + {0xA351,0xA369,0x039E}, + {0xA352,0xA36A,0x039F}, + {0xA353,0xA36B,0x03A0}, + {0xA354,0xA36C,0x03A1}, + {0xA355,0xA36D,0x03A3}, + {0xA356,0xA36E,0x03A4}, + {0xA357,0xA36F,0x03A5}, + {0xA358,0xA370,0x03A6}, + {0xA359,0xA371,0x03A7}, + {0xA35A,0xA372,0x03A8}, + {0xA35B,0xA373,0x03A9}, + {0xA344,0xA35C,0x03B1}, + {0xA345,0xA35D,0x03B2}, + {0xA346,0xA35E,0x03B3}, + {0xA347,0xA35F,0x03B4}, + /* A360-A36F */ + {0xA348,0xA360,0x03B5}, + {0xA349,0xA361,0x03B6}, + {0xA34A,0xA362,0x03B7}, + {0xA34B,0xA363,0x03B8}, + {0xA34C,0xA364,0x03B9}, + {0xA34D,0xA365,0x03BA}, + {0xA34E,0xA366,0x03BB}, + {0xA34F,0xA367,0x03BC}, + {0xA350,0xA368,0x03BD}, + {0xA351,0xA369,0x03BE}, + {0xA352,0xA36A,0x03BF}, + {0xA353,0xA36B,0x03C0}, + {0xA354,0xA36C,0x03C1}, + {0xA355,0xA36D,0x03C3}, + {0xA356,0xA36E,0x03C4}, + {0xA357,0xA36F,0x03C5}, + /* A370-A37F */ + {0xA358,0xA370,0x03C6}, + {0xA359,0xA371,0x03C7}, + {0xA35A,0xA372,0x03C8}, + {0xA35B,0xA373,0x03C9}, + {0xA374,0xA374,0x3105}, + {0xA375,0xA375,0x3106}, + {0xA376,0xA376,0x3107}, + {0xA377,0xA377,0x3108}, + {0xA378,0xA378,0x3109}, + {0xA379,0xA379,0x310A}, + {0xA37A,0xA37A,0x310B}, + {0xA37B,0xA37B,0x310C}, + {0xA37C,0xA37C,0x310D}, + {0xA37D,0xA37D,0x310E}, + {0xA37E,0xA37E,0x310F}, + {0x0000,0x0000,0x0000}, + /* A380-A38F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* A390-A39F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* A3A0-A3AF */ + {0x0000,0x0000,0x0000}, + {0xA3A1,0xA3A1,0x3110}, + {0xA3A2,0xA3A2,0x3111}, + {0xA3A3,0xA3A3,0x3112}, + {0xA3A4,0xA3A4,0x3113}, + {0xA3A5,0xA3A5,0x3114}, + {0xA3A6,0xA3A6,0x3115}, + {0xA3A7,0xA3A7,0x3116}, + {0xA3A8,0xA3A8,0x3117}, + {0xA3A9,0xA3A9,0x3118}, + {0xA3AA,0xA3AA,0x3119}, + {0xA3AB,0xA3AB,0x311A}, + {0xA3AC,0xA3AC,0x311B}, + {0xA3AD,0xA3AD,0x311C}, + {0xA3AE,0xA3AE,0x311D}, + {0xA3AF,0xA3AF,0x311E}, + /* A3B0-A3BF */ + {0xA3B0,0xA3B0,0x311F}, + {0xA3B1,0xA3B1,0x3120}, + {0xA3B2,0xA3B2,0x3121}, + {0xA3B3,0xA3B3,0x3122}, + {0xA3B4,0xA3B4,0x3123}, + {0xA3B5,0xA3B5,0x3124}, + {0xA3B6,0xA3B6,0x3125}, + {0xA3B7,0xA3B7,0x3126}, + {0xA3B8,0xA3B8,0x3127}, + {0xA3B9,0xA3B9,0x3128}, + {0xA3BA,0xA3BA,0x3129}, + {0xA3BB,0xA3BB,0x02D9}, + {0xA3BC,0xA3BC,0x02C9}, + {0xA3BD,0xA3BD,0x02CA}, + {0xA3BE,0xA3BE,0x02C7}, + {0xA3BF,0xA3BF,0x02CB}, + /* A3C0-A3CF */ + {0xA3C0,0xA3C0,0x003F}, + {0xA3C1,0xA3C1,0x003F}, + {0xA3C2,0xA3C2,0x003F}, + {0xA3C3,0xA3C3,0x003F}, + {0xA3C4,0xA3C4,0x003F}, + {0xA3C5,0xA3C5,0x003F}, + {0xA3C6,0xA3C6,0x003F}, + {0xA3C7,0xA3C7,0x003F}, + {0xA3C8,0xA3C8,0x003F}, + {0xA3C9,0xA3C9,0x003F}, + {0xA3CA,0xA3CA,0x003F}, + {0xA3CB,0xA3CB,0x003F}, + {0xA3CC,0xA3CC,0x003F}, + {0xA3CD,0xA3CD,0x003F}, + {0xA3CE,0xA3CE,0x003F}, + {0xA3CF,0xA3CF,0x003F}, + /* A3D0-A3DF */ + {0xA3D0,0xA3D0,0x003F}, + {0xA3D1,0xA3D1,0x003F}, + {0xA3D2,0xA3D2,0x003F}, + {0xA3D3,0xA3D3,0x003F}, + {0xA3D4,0xA3D4,0x003F}, + {0xA3D5,0xA3D5,0x003F}, + {0xA3D6,0xA3D6,0x003F}, + {0xA3D7,0xA3D7,0x003F}, + {0xA3D8,0xA3D8,0x003F}, + {0xA3D9,0xA3D9,0x003F}, + {0xA3DA,0xA3DA,0x003F}, + {0xA3DB,0xA3DB,0x003F}, + {0xA3DC,0xA3DC,0x003F}, + {0xA3DD,0xA3DD,0x003F}, + {0xA3DE,0xA3DE,0x003F}, + {0xA3DF,0xA3DF,0x003F}, + /* A3E0-A3EF */ + {0xA3E0,0xA3E0,0x003F}, + {0xA3E1,0xA3E1,0x003F}, + {0xA3E2,0xA3E2,0x003F}, + {0xA3E3,0xA3E3,0x003F}, + {0xA3E4,0xA3E4,0x003F}, + {0xA3E5,0xA3E5,0x003F}, + {0xA3E6,0xA3E6,0x003F}, + {0xA3E7,0xA3E7,0x003F}, + {0xA3E8,0xA3E8,0x003F}, + {0xA3E9,0xA3E9,0x003F}, + {0xA3EA,0xA3EA,0x003F}, + {0xA3EB,0xA3EB,0x003F}, + {0xA3EC,0xA3EC,0x003F}, + {0xA3ED,0xA3ED,0x003F}, + {0xA3EE,0xA3EE,0x003F}, + {0xA3EF,0xA3EF,0x003F}, + /* A3F0-A3FF */ + {0xA3F0,0xA3F0,0x003F}, + {0xA3F1,0xA3F1,0x003F}, + {0xA3F2,0xA3F2,0x003F}, + {0xA3F3,0xA3F3,0x003F}, + {0xA3F4,0xA3F4,0x003F}, + {0xA3F5,0xA3F5,0x003F}, + {0xA3F6,0xA3F6,0x003F}, + {0xA3F7,0xA3F7,0x003F}, + {0xA3F8,0xA3F8,0x003F}, + {0xA3F9,0xA3F9,0x003F}, + {0xA3FA,0xA3FA,0x003F}, + {0xA3FB,0xA3FB,0x003F}, + {0xA3FC,0xA3FC,0x003F}, + {0xA3FD,0xA3FD,0x003F}, + {0xA3FE,0xA3FE,0x003F}, + {0x0000,0x0000,0x0000} +}; + + +static MY_UNICASE_INFO cC7[256]= +{ + /* C700-C70F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* C710-C71F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* C720-C72F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* C730-C73F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* C740-C74F */ + {0xC740,0xC740,0x30A8}, + {0xC741,0xC741,0x30A9}, + {0xC742,0xC742,0x30AA}, + {0xC743,0xC743,0x30AB}, + {0xC744,0xC744,0x30AC}, + {0xC745,0xC745,0x30AD}, + {0xC746,0xC746,0x30AE}, + {0xC747,0xC747,0x30AF}, + {0xC748,0xC748,0x30B0}, + {0xC749,0xC749,0x30B1}, + {0xC74A,0xC74A,0x30B2}, + {0xC74B,0xC74B,0x30B3}, + {0xC74C,0xC74C,0x30B4}, + {0xC74D,0xC74D,0x30B5}, + {0xC74E,0xC74E,0x30B6}, + {0xC74F,0xC74F,0x30B7}, + /* C750-C75F */ + {0xC750,0xC750,0x30B8}, + {0xC751,0xC751,0x30B9}, + {0xC752,0xC752,0x30BA}, + {0xC753,0xC753,0x30BB}, + {0xC754,0xC754,0x30BC}, + {0xC755,0xC755,0x30BD}, + {0xC756,0xC756,0x30BE}, + {0xC757,0xC757,0x30BF}, + {0xC758,0xC758,0x30C0}, + {0xC759,0xC759,0x30C1}, + {0xC75A,0xC75A,0x30C2}, + {0xC75B,0xC75B,0x30C3}, + {0xC75C,0xC75C,0x30C4}, + {0xC75D,0xC75D,0x30C5}, + {0xC75E,0xC75E,0x30C6}, + {0xC75F,0xC75F,0x30C7}, + /* C760-C76F */ + {0xC760,0xC760,0x30C8}, + {0xC761,0xC761,0x30C9}, + {0xC762,0xC762,0x30CA}, + {0xC763,0xC763,0x30CB}, + {0xC764,0xC764,0x30CC}, + {0xC765,0xC765,0x30CD}, + {0xC766,0xC766,0x30CE}, + {0xC767,0xC767,0x30CF}, + {0xC768,0xC768,0x30D0}, + {0xC769,0xC769,0x30D1}, + {0xC76A,0xC76A,0x30D2}, + {0xC76B,0xC76B,0x30D3}, + {0xC76C,0xC76C,0x30D4}, + {0xC76D,0xC76D,0x30D5}, + {0xC76E,0xC76E,0x30D6}, + {0xC76F,0xC76F,0x30D7}, + /* C770-C77F */ + {0xC770,0xC770,0x30D8}, + {0xC771,0xC771,0x30D9}, + {0xC772,0xC772,0x30DA}, + {0xC773,0xC773,0x30DB}, + {0xC774,0xC774,0x30DC}, + {0xC775,0xC775,0x30DD}, + {0xC776,0xC776,0x30DE}, + {0xC777,0xC777,0x30DF}, + {0xC778,0xC778,0x30E0}, + {0xC779,0xC779,0x30E1}, + {0xC77A,0xC77A,0x30E2}, + {0xC77B,0xC77B,0x30E3}, + {0xC77C,0xC77C,0x30E4}, + {0xC77D,0xC77D,0x30E5}, + {0xC77E,0xC77E,0x30E6}, + {0x0000,0x0000,0x0000}, + /* C780-C78F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* C790-C79F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* C7A0-C7AF */ + {0x0000,0x0000,0x0000}, + {0xC7A1,0xC7A1,0x30E7}, + {0xC7A2,0xC7A2,0x30E8}, + {0xC7A3,0xC7A3,0x30E9}, + {0xC7A4,0xC7A4,0x30EA}, + {0xC7A5,0xC7A5,0x30EB}, + {0xC7A6,0xC7A6,0x30EC}, + {0xC7A7,0xC7A7,0x30ED}, + {0xC7A8,0xC7A8,0x30EE}, + {0xC7A9,0xC7A9,0x30EF}, + {0xC7AA,0xC7AA,0x30F0}, + {0xC7AB,0xC7AB,0x30F1}, + {0xC7AC,0xC7AC,0x30F2}, + {0xC7AD,0xC7AD,0x30F3}, + {0xC7AE,0xC7AE,0x30F4}, + {0xC7AF,0xC7AF,0x30F5}, + /* C7B0-C7BF */ + {0xC7B0,0xC7B0,0x30F6}, + {0xC7B1,0xC7CC,0x0414}, + {0xC7B2,0xC7CD,0x0415}, + {0xC7B3,0xC7CE,0x0401}, + {0xC7B4,0xC7CF,0x0416}, + {0xC7B5,0xC7D0,0x0417}, + {0xC7B6,0xC7D1,0x0418}, + {0xC7B7,0xC7D2,0x0419}, + {0xC7B8,0xC7D3,0x041A}, + {0xC7B9,0xC7D4,0x041B}, + {0xC7BA,0xC7D5,0x041C}, + {0xC7BB,0xC7DC,0x0423}, + {0xC7BC,0xC7DD,0x0424}, + {0xC7BD,0xC7DE,0x0425}, + {0xC7BE,0xC7DF,0x0426}, + {0xC7BF,0xC7E0,0x0427}, + /* C7C0-C7CF */ + {0xC7C0,0xC7E1,0x0428}, + {0xC7C1,0xC7E2,0x0429}, + {0xC7C2,0xC7E3,0x042A}, + {0xC7C3,0xC7E4,0x042B}, + {0xC7C4,0xC7E5,0x042C}, + {0xC7C5,0xC7E6,0x042D}, + {0xC7C6,0xC7E7,0x042E}, + {0xC7C7,0xC7E8,0x042F}, + {0xC7C8,0xC7C8,0x0430}, + {0xC7C9,0xC7C9,0x0431}, + {0xC7CA,0xC7CA,0x0432}, + {0xC7CB,0xC7CB,0x0433}, + {0xC7B1,0xC7CC,0x0434}, + {0xC7B2,0xC7CD,0x0435}, + {0xC7B3,0xC7CE,0x0451}, + {0xC7B4,0xC7CF,0x0436}, + /* C7D0-C7DF */ + {0xC7B5,0xC7D0,0x0437}, + {0xC7B6,0xC7D1,0x0438}, + {0xC7B7,0xC7D2,0x0439}, + {0xC7B8,0xC7D3,0x043A}, + {0xC7B9,0xC7D4,0x043B}, + {0xC7BA,0xC7D5,0x043C}, + {0xC7D6,0xC7D6,0x043D}, + {0xC7D7,0xC7D7,0x043E}, + {0xC7D8,0xC7D8,0x043F}, + {0xC7D9,0xC7D9,0x0440}, + {0xC7DA,0xC7DA,0x0441}, + {0xC7DB,0xC7DB,0x0442}, + {0xC7BB,0xC7DC,0x0443}, + {0xC7BC,0xC7DD,0x0444}, + {0xC7BD,0xC7DE,0x0445}, + {0xC7BE,0xC7DF,0x0446}, + /* C7E0-C7EF */ + {0xC7BF,0xC7E0,0x0447}, + {0xC7C0,0xC7E1,0x0448}, + {0xC7C1,0xC7E2,0x0449}, + {0xC7C2,0xC7E3,0x044A}, + {0xC7C3,0xC7E4,0x044B}, + {0xC7C4,0xC7E5,0x044C}, + {0xC7C5,0xC7E6,0x044D}, + {0xC7C6,0xC7E7,0x044E}, + {0xC7C7,0xC7E8,0x044F}, + {0xC7E9,0xC7E9,0x2460}, + {0xC7EA,0xC7EA,0x2461}, + {0xC7EB,0xC7EB,0x2462}, + {0xC7EC,0xC7EC,0x2463}, + {0xC7ED,0xC7ED,0x2464}, + {0xC7EE,0xC7EE,0x2465}, + {0xC7EF,0xC7EF,0x2466}, + /* C7F0-C7FF */ + {0xC7F0,0xC7F0,0x2467}, + {0xC7F1,0xC7F1,0x2468}, + {0xC7F2,0xC7F2,0x2469}, + {0xC7F3,0xC7F3,0x2474}, + {0xC7F4,0xC7F4,0x2475}, + {0xC7F5,0xC7F5,0x2476}, + {0xC7F6,0xC7F6,0x2477}, + {0xC7F7,0xC7F7,0x2478}, + {0xC7F8,0xC7F8,0x2479}, + {0xC7F9,0xC7F9,0x247A}, + {0xC7FA,0xC7FA,0x247B}, + {0xC7FB,0xC7FB,0x247C}, + {0xC7FC,0xC7FC,0x247D}, + {0xC7FD,0xC7FD,0x003F}, + {0xC7FE,0xC7FE,0x003F}, + {0x0000,0x0000,0x0000} +}; + + +static MY_UNICASE_INFO *my_caseinfo_big5[256]= +{ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 1 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 2 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 3 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 4 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 5 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 6 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 7 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 8 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 9 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, cA2, cA3, NULL, NULL, NULL, NULL, /* A */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* B */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, cC7, /* C */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* D */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* E */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* F */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, +}; + + static uint16 big5strokexfrm(uint16 i) { if ((i == 0xA440) || (i == 0xA441)) return 0xA440; @@ -6393,7 +7010,7 @@ CHARSET_INFO my_charset_big5_chinese_ci= NULL, /* sort_order_big*/ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ + my_caseinfo_big5, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -6426,7 +7043,7 @@ CHARSET_INFO my_charset_big5_bin= NULL, /* sort_order_big*/ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ + my_caseinfo_big5, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ diff --git a/strings/ctype-bin.c b/strings/ctype-bin.c index 95d97af2bfb..3b6a977e47c 100644 --- a/strings/ctype-bin.c +++ b/strings/ctype-bin.c @@ -278,14 +278,11 @@ void my_hash_sort_8bit_bin(CHARSET_INFO *cs __attribute__((unused)), { const uchar *pos = key; - key+= len; - /* Remove trailing spaces. We have to do this to be able to compare 'A ' and 'A' as identical */ - while (key > pos && key[-1] == ' ') - key--; + key= skip_trailing_space(key, len); for (; pos < (uchar*) key ; pos++) { diff --git a/strings/ctype-cp932.c b/strings/ctype-cp932.c index 07191c436b7..f36f93b5527 100644 --- a/strings/ctype-cp932.c +++ b/strings/ctype-cp932.c @@ -197,6 +197,1512 @@ static uint mbcharlen_cp932(CHARSET_INFO *cs __attribute__((unused)),uint c) #define cp932code(c,d) ((((uint) (uchar)(c)) << 8) | (uint) (uchar) (d)) +static MY_UNICASE_INFO c81[256]= +{ + /* 8100-810F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8110-811F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8120-812F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8130-813F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + + {0x8140,0x8140,0x3000}, /* 8140-814F */ + {0x8141,0x8141,0x3001}, + {0x8142,0x8142,0x3002}, + {0x8143,0x8143,0xFF0C}, + {0x8144,0x8144,0xFF0E}, + {0x8145,0x8145,0x30FB}, + {0x8146,0x8146,0xFF1A}, + {0x8147,0x8147,0xFF1B}, + {0x8148,0x8148,0xFF1F}, + {0x8149,0x8149,0xFF01}, + {0x814A,0x814A,0x309B}, + {0x814B,0x814B,0x309C}, + {0x814C,0x814C,0x00B4}, + {0x814D,0x814D,0xFF40}, + {0x814E,0x814E,0x00A8}, + {0x814F,0x814F,0xFF3E}, + {0x8150,0x8150,0xFFE3}, /* 8150-815F */ + {0x8151,0x8151,0xFF3F}, + {0x8152,0x8152,0x30FD}, + {0x8153,0x8153,0x30FE}, + {0x8154,0x8154,0x309D}, + {0x8155,0x8155,0x309E}, + {0x8156,0x8156,0x3003}, + {0x8157,0x8157,0x4EDD}, + {0x8158,0x8158,0x3005}, + {0x8159,0x8159,0x3006}, + {0x815A,0x815A,0x3007}, + {0x815B,0x815B,0x30FC}, + {0x815C,0x815C,0x2015}, + {0x815D,0x815D,0x2010}, + {0x815E,0x815E,0xFF0F}, + {0x815F,0x815F,0xFF3C}, + {0x8160,0x8160,0xFF5E}, /* 8160-816F */ + {0x8161,0x8161,0x2225}, + {0x8162,0x8162,0xFF5C}, + {0x8163,0x8163,0x2026}, + {0x8164,0x8164,0x2025}, + {0x8165,0x8165,0x2018}, + {0x8166,0x8166,0x2019}, + {0x8167,0x8167,0x201C}, + {0x8168,0x8168,0x201D}, + {0x8169,0x8169,0xFF08}, + {0x816A,0x816A,0xFF09}, + {0x816B,0x816B,0x3014}, + {0x816C,0x816C,0x3015}, + {0x816D,0x816D,0xFF3B}, + {0x816E,0x816E,0xFF3D}, + {0x816F,0x816F,0xFF5B}, + {0x8170,0x8170,0xFF5D}, /* 8170-817F */ + {0x8171,0x8171,0x3008}, + {0x8172,0x8172,0x3009}, + {0x8173,0x8173,0x300A}, + {0x8174,0x8174,0x300B}, + {0x8175,0x8175,0x300C}, + {0x8176,0x8176,0x300D}, + {0x8177,0x8177,0x300E}, + {0x8178,0x8178,0x300F}, + {0x8179,0x8179,0x3010}, + {0x817A,0x817A,0x3011}, + {0x817B,0x817B,0xFF0B}, + {0x817C,0x817C,0xFF0D}, + {0x817D,0x817D,0x00B1}, + {0x817E,0x817E,0x00D7}, + {0,0,0}, + {0x8180,0x8180,0x00F7}, /* 8180-818F */ + {0x8181,0x8181,0xFF1D}, + {0x8182,0x8182,0x2260}, + {0x8183,0x8183,0xFF1C}, + {0x8184,0x8184,0xFF1E}, + {0x8185,0x8185,0x2266}, + {0x8186,0x8186,0x2267}, + {0x8187,0x8187,0x221E}, + {0x8188,0x8188,0x2234}, + {0x8189,0x8189,0x2642}, + {0x818A,0x818A,0x2640}, + {0x818B,0x818B,0x00B0}, + {0x818C,0x818C,0x2032}, + {0x818D,0x818D,0x2033}, + {0x818E,0x818E,0x2103}, + {0x818F,0x818F,0xFFE5}, + {0x8190,0x8190,0xFF04}, /* 8190-819F*/ + {0x8191,0x8191,0xFFE0}, + {0x8192,0x8192,0xFFE1}, + {0x8193,0x8193,0xFF05}, + {0x8194,0x8194,0xFF03}, + {0x8195,0x8195,0xFF06}, + {0x8196,0x8196,0xFF0A}, + {0x8197,0x8197,0xFF20}, + {0x8198,0x8198,0x00A7}, + {0x8199,0x8199,0x2606}, + {0x819A,0x819A,0x2605}, + {0x819B,0x819B,0x25CB}, + {0x819C,0x819C,0x25CF}, + {0x819D,0x819D,0x25CE}, + {0x819E,0x819E,0x25C7}, + {0x819F,0x819F,0x25C6}, + {0x81A0,0x81A0,0x25A1}, /* 81A0-81AF */ + {0x81A1,0x81A1,0x25A0}, + {0x81A2,0x81A2,0x25B3}, + {0x81A3,0x81A3,0x25B2}, + {0x81A4,0x81A4,0x25BD}, + {0x81A5,0x81A5,0x25BC}, + {0x81A6,0x81A6,0x203B}, + {0x81A7,0x81A7,0x3012}, + {0x81A8,0x81A8,0x2192}, + {0x81A9,0x81A9,0x2190}, + {0x81AA,0x81AA,0x2191}, + {0x81AB,0x81AB,0x2193}, + {0x81AC,0x81AC,0x3013}, + {0x81AD,0x81AD,0x003F}, + {0x81AE,0x81AE,0x003F}, + {0x81AF,0x81AF,0x003F}, + {0x81B0,0x81B0,0x003F}, /* 81B0-81BF */ + {0x81B1,0x81B1,0x003F}, + {0x81B2,0x81B2,0x003F}, + {0x81B3,0x81B3,0x003F}, + {0x81B4,0x81B4,0x003F}, + {0x81B5,0x81B5,0x003F}, + {0x81B6,0x81B6,0x003F}, + {0x81B7,0x81B7,0x003F}, + {0x81B8,0x81B8,0x2208}, + {0x81B9,0x81B9,0x220B}, + {0x81BA,0x81BA,0x2286}, + {0x81BB,0x81BB,0x2287}, + {0x81BC,0x81BC,0x2282}, + {0x81BD,0x81BD,0x2283}, + {0x81BE,0x81BE,0x222A}, + {0x81BF,0x81BF,0x2229}, + {0x81C0,0x81C0,0x003F}, /* 81C0-81CF */ + {0x81C1,0x81C1,0x003F}, + {0x81C2,0x81C2,0x003F}, + {0x81C3,0x81C3,0x003F}, + {0x81C4,0x81C4,0x003F}, + {0x81C5,0x81C5,0x003F}, + {0x81C6,0x81C6,0x003F}, + {0x81C7,0x81C7,0x003F}, + {0x81C8,0x81C8,0x2227}, + {0x81C9,0x81C9,0x2228}, + {0x81CA,0x81CA,0xFFE2}, + {0x81CB,0x81CB,0x21D2}, + {0x81CC,0x81CC,0x21D4}, + {0x81CD,0x81CD,0x2200}, + {0x81CE,0x81CE,0x2203}, + {0x81CF,0x81CF,0x003F}, + {0x81D0,0x81D0,0x003F}, /* 81D0-81DF */ + {0x81D1,0x81D1,0x003F}, + {0x81D2,0x81D2,0x003F}, + {0x81D3,0x81D3,0x003F}, + {0x81D4,0x81D4,0x003F}, + {0x81D5,0x81D5,0x003F}, + {0x81D6,0x81D6,0x003F}, + {0x81D7,0x81D7,0x003F}, + {0x81D8,0x81D8,0x003F}, + {0x81D9,0x81D9,0x003F}, + {0x81DA,0x81DA,0x2220}, + {0x81DB,0x81DB,0x22A5}, + {0x81DC,0x81DC,0x2312}, + {0x81DD,0x81DD,0x2202}, + {0x81DE,0x81DE,0x2207}, + {0x81DF,0x81DF,0x2261}, + {0x81E0,0x81E0,0x2252}, /* 81E0-81EF */ + {0x81E1,0x81E1,0x226A}, + {0x81E2,0x81E2,0x226B}, + {0x81E3,0x81E3,0x221A}, + {0x81E4,0x81E4,0x223D}, + {0x81E5,0x81E5,0x221D}, + {0x81E6,0x81E6,0x2235}, + {0x81E7,0x81E7,0x222B}, + {0x81E8,0x81E8,0x222C}, + {0x81E9,0x81E9,0x003F}, + {0x81EA,0x81EA,0x003F}, + {0x81EB,0x81EB,0x003F}, + {0x81EC,0x81EC,0x003F}, + {0x81ED,0x81ED,0x003F}, + {0x81EE,0x81EE,0x003F}, + {0x81EF,0x81EF,0x003F}, + {0x81F0,0x81F0,0x212B}, /* 81F0-81FF */ + {0x81F1,0x81F1,0x2030}, + {0x81F2,0x81F2,0x266F}, + {0x81F3,0x81F3,0x266D}, + {0x81F4,0x81F4,0x266A}, + {0x81F5,0x81F5,0x2020}, + {0x81F6,0x81F6,0x2021}, + {0x81F7,0x81F7,0x00B6}, + {0x81F8,0x81F8,0x003F}, + {0x81F9,0x81F9,0x003F}, + {0x81FA,0x81FA,0x003F}, + {0x81FB,0x81FB,0x003F}, + {0x81FC,0x81FC,0x25EF}, + {0,0,0}, + {0,0,0}, + {0,0,0}, +}; + + +static MY_UNICASE_INFO c82[256]= +{ + /* 8200-820F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8210-821F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8220-822F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8230-823F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + + {0x8240,0x8240,0x003F}, /* 8240-824F */ + {0x8241,0x8241,0x003F}, + {0x8242,0x8242,0x003F}, + {0x8243,0x8243,0x003F}, + {0x8244,0x8244,0x003F}, + {0x8245,0x8245,0x003F}, + {0x8246,0x8246,0x003F}, + {0x8247,0x8247,0x003F}, + {0x8248,0x8248,0x003F}, + {0x8249,0x8249,0x003F}, + {0x824A,0x824A,0x003F}, + {0x824B,0x824B,0x003F}, + {0x824C,0x824C,0x003F}, + {0x824D,0x824D,0x003F}, + {0x824E,0x824E,0x003F}, + {0x824F,0x824F,0xFF10}, + {0x8250,0x8250,0xFF11}, /* 8250-825F */ + {0x8251,0x8251,0xFF12}, + {0x8252,0x8252,0xFF13}, + {0x8253,0x8253,0xFF14}, + {0x8254,0x8254,0xFF15}, + {0x8255,0x8255,0xFF16}, + {0x8256,0x8256,0xFF17}, + {0x8257,0x8257,0xFF18}, + {0x8258,0x8258,0xFF19}, + {0x8259,0x8259,0x003F}, + {0x825A,0x825A,0x003F}, + {0x825B,0x825B,0x003F}, + {0x825C,0x825C,0x003F}, + {0x825D,0x825D,0x003F}, + {0x825E,0x825E,0x003F}, + {0x825F,0x825F,0x003F}, + {0x8260,0x8281,0xFF21}, /* 8260-826F */ + {0x8261,0x8282,0xFF22}, + {0x8262,0x8283,0xFF23}, + {0x8263,0x8284,0xFF24}, + {0x8264,0x8285,0xFF25}, + {0x8265,0x8286,0xFF26}, + {0x8266,0x8287,0xFF27}, + {0x8267,0x8288,0xFF28}, + {0x8268,0x8289,0xFF29}, + {0x8269,0x828A,0xFF2A}, + {0x826A,0x828B,0xFF2B}, + {0x826B,0x828C,0xFF2C}, + {0x826C,0x828D,0xFF2D}, + {0x826D,0x828E,0xFF2E}, + {0x826E,0x828F,0xFF2F}, + {0x826F,0x8290,0xFF30}, + {0x8270,0x8291,0xFF31}, /* 8270-827F */ + {0x8271,0x8292,0xFF32}, + {0x8272,0x8293,0xFF33}, + {0x8273,0x8294,0xFF34}, + {0x8274,0x8295,0xFF35}, + {0x8275,0x8296,0xFF36}, + {0x8276,0x8297,0xFF37}, + {0x8277,0x8298,0xFF38}, + {0x8278,0x8299,0xFF39}, + {0x8279,0x829A,0xFF3A}, + {0x827A,0x827A,0x003F}, + {0x827B,0x827B,0x003F}, + {0x827C,0x827C,0x003F}, + {0x827D,0x827D,0x003F}, + {0x827E,0x827E,0x003F}, + {0,0,0}, + {0x8280,0x8280,0x003F}, /* 8280-828F */ + {0x8260,0x8281,0xFF41}, + {0x8261,0x8282,0xFF42}, + {0x8262,0x8283,0xFF43}, + {0x8263,0x8284,0xFF44}, + {0x8264,0x8285,0xFF45}, + {0x8265,0x8286,0xFF46}, + {0x8266,0x8287,0xFF47}, + {0x8267,0x8288,0xFF48}, + {0x8268,0x8289,0xFF49}, + {0x8269,0x828A,0xFF4A}, + {0x826A,0x828B,0xFF4B}, + {0x826B,0x828C,0xFF4C}, + {0x826C,0x828D,0xFF4D}, + {0x826D,0x828E,0xFF4E}, + {0x826E,0x828F,0xFF4F}, + {0x826F,0x8290,0xFF50}, /* 8290-829F */ + {0x8270,0x8291,0xFF51}, + {0x8271,0x8292,0xFF52}, + {0x8272,0x8293,0xFF53}, + {0x8273,0x8294,0xFF54}, + {0x8274,0x8295,0xFF55}, + {0x8275,0x8296,0xFF56}, + {0x8276,0x8297,0xFF57}, + {0x8277,0x8298,0xFF58}, + {0x8278,0x8299,0xFF59}, + {0x8279,0x829A,0xFF5A}, + {0x829B,0x829B,0x003F}, + {0x829C,0x829C,0x003F}, + {0x829D,0x829D,0x003F}, + {0x829E,0x829E,0x003F}, + {0x829F,0x829F,0x3041}, + {0x82A0,0x82A0,0x3042}, /* 82A0-82AF */ + {0x82A1,0x82A1,0x3043}, + {0x82A2,0x82A2,0x3044}, + {0x82A3,0x82A3,0x3045}, + {0x82A4,0x82A4,0x3046}, + {0x82A5,0x82A5,0x3047}, + {0x82A6,0x82A6,0x3048}, + {0x82A7,0x82A7,0x3049}, + {0x82A8,0x82A8,0x304A}, + {0x82A9,0x82A9,0x304B}, + {0x82AA,0x82AA,0x304C}, + {0x82AB,0x82AB,0x304D}, + {0x82AC,0x82AC,0x304E}, + {0x82AD,0x82AD,0x304F}, + {0x82AE,0x82AE,0x3050}, + {0x82AF,0x82AF,0x3051}, + {0x82B0,0x82B0,0x3052}, /* 82B0-82BF */ + {0x82B1,0x82B1,0x3053}, + {0x82B2,0x82B2,0x3054}, + {0x82B3,0x82B3,0x3055}, + {0x82B4,0x82B4,0x3056}, + {0x82B5,0x82B5,0x3057}, + {0x82B6,0x82B6,0x3058}, + {0x82B7,0x82B7,0x3059}, + {0x82B8,0x82B8,0x305A}, + {0x82B9,0x82B9,0x305B}, + {0x82BA,0x82BA,0x305C}, + {0x82BB,0x82BB,0x305D}, + {0x82BC,0x82BC,0x305E}, + {0x82BD,0x82BD,0x305F}, + {0x82BE,0x82BE,0x3060}, + {0x82BF,0x82BF,0x3061}, + {0x82C0,0x82C0,0x3062}, /* 82C0-82CF */ + {0x82C1,0x82C1,0x3063}, + {0x82C2,0x82C2,0x3064}, + {0x82C3,0x82C3,0x3065}, + {0x82C4,0x82C4,0x3066}, + {0x82C5,0x82C5,0x3067}, + {0x82C6,0x82C6,0x3068}, + {0x82C7,0x82C7,0x3069}, + {0x82C8,0x82C8,0x306A}, + {0x82C9,0x82C9,0x306B}, + {0x82CA,0x82CA,0x306C}, + {0x82CB,0x82CB,0x306D}, + {0x82CC,0x82CC,0x306E}, + {0x82CD,0x82CD,0x306F}, + {0x82CE,0x82CE,0x3070}, + {0x82CF,0x82CF,0x3071}, + {0x82D0,0x82D0,0x3072}, /* 82D0-82DF */ + {0x82D1,0x82D1,0x3073}, + {0x82D2,0x82D2,0x3074}, + {0x82D3,0x82D3,0x3075}, + {0x82D4,0x82D4,0x3076}, + {0x82D5,0x82D5,0x3077}, + {0x82D6,0x82D6,0x3078}, + {0x82D7,0x82D7,0x3079}, + {0x82D8,0x82D8,0x307A}, + {0x82D9,0x82D9,0x307B}, + {0x82DA,0x82DA,0x307C}, + {0x82DB,0x82DB,0x307D}, + {0x82DC,0x82DC,0x307E}, + {0x82DD,0x82DD,0x307F}, + {0x82DE,0x82DE,0x3080}, + {0x82DF,0x82DF,0x3081}, + {0x82E0,0x82E0,0x3082}, /* 82E0-82EF */ + {0x82E1,0x82E1,0x3083}, + {0x82E2,0x82E2,0x3084}, + {0x82E3,0x82E3,0x3085}, + {0x82E4,0x82E4,0x3086}, + {0x82E5,0x82E5,0x3087}, + {0x82E6,0x82E6,0x3088}, + {0x82E7,0x82E7,0x3089}, + {0x82E8,0x82E8,0x308A}, + {0x82E9,0x82E9,0x308B}, + {0x82EA,0x82EA,0x308C}, + {0x82EB,0x82EB,0x308D}, + {0x82EC,0x82EC,0x308E}, + {0x82ED,0x82ED,0x308F}, + {0x82EE,0x82EE,0x3090}, + {0x82EF,0x82EF,0x3091}, + {0x82F0,0x82F0,0x3092}, /* 82F0-82FF */ + {0x82F1,0x82F1,0x3093}, + {0x82F2,0x82F2,0x003F}, + {0x82F3,0x82F3,0x003F}, + {0x82F4,0x82F4,0x003F}, + {0x82F5,0x82F5,0x003F}, + {0x82F6,0x82F6,0x003F}, + {0x82F7,0x82F7,0x003F}, + {0x82F8,0x82F8,0x003F}, + {0x82F9,0x82F9,0x003F}, + {0x82FA,0x82FA,0x003F}, + {0x82FB,0x82FB,0x003F}, + {0x82FC,0x82FC,0x003F}, + {0,0,0} +}; + + +static MY_UNICASE_INFO c83[256]= +{ + /* 8300-830F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8310-831F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8320-832F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8330-833F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + + {0x8340,0x8340,0x30A1}, /* 8340 */ + {0x8341,0x8341,0x30A2}, + {0x8342,0x8342,0x30A3}, + {0x8343,0x8343,0x30A4}, + {0x8344,0x8344,0x30A5}, + {0x8345,0x8345,0x30A6}, + {0x8346,0x8346,0x30A7}, + {0x8347,0x8347,0x30A8}, + {0x8348,0x8348,0x30A9}, + {0x8349,0x8349,0x30AA}, + {0x834A,0x834A,0x30AB}, + {0x834B,0x834B,0x30AC}, + {0x834C,0x834C,0x30AD}, + {0x834D,0x834D,0x30AE}, + {0x834E,0x834E,0x30AF}, + {0x834F,0x834F,0x30B0}, + {0x8350,0x8350,0x30B1}, /* 8350 */ + {0x8351,0x8351,0x30B2}, + {0x8352,0x8352,0x30B3}, + {0x8353,0x8353,0x30B4}, + {0x8354,0x8354,0x30B5}, + {0x8355,0x8355,0x30B6}, + {0x8356,0x8356,0x30B7}, + {0x8357,0x8357,0x30B8}, + {0x8358,0x8358,0x30B9}, + {0x8359,0x8359,0x30BA}, + {0x835A,0x835A,0x30BB}, + {0x835B,0x835B,0x30BC}, + {0x835C,0x835C,0x30BD}, + {0x835D,0x835D,0x30BE}, + {0x835E,0x835E,0x30BF}, + {0x835F,0x835F,0x30C0}, + {0x8360,0x8360,0x30C1}, /* 8360 */ + {0x8361,0x8361,0x30C2}, + {0x8362,0x8362,0x30C3}, + {0x8363,0x8363,0x30C4}, + {0x8364,0x8364,0x30C5}, + {0x8365,0x8365,0x30C6}, + {0x8366,0x8366,0x30C7}, + {0x8367,0x8367,0x30C8}, + {0x8368,0x8368,0x30C9}, + {0x8369,0x8369,0x30CA}, + {0x836A,0x836A,0x30CB}, + {0x836B,0x836B,0x30CC}, + {0x836C,0x836C,0x30CD}, + {0x836D,0x836D,0x30CE}, + {0x836E,0x836E,0x30CF}, + {0x836F,0x836F,0x30D0}, + {0x8370,0x8370,0x30D1}, /* 8370 */ + {0x8371,0x8371,0x30D2}, + {0x8372,0x8372,0x30D3}, + {0x8373,0x8373,0x30D4}, + {0x8374,0x8374,0x30D5}, + {0x8375,0x8375,0x30D6}, + {0x8376,0x8376,0x30D7}, + {0x8377,0x8377,0x30D8}, + {0x8378,0x8378,0x30D9}, + {0x8379,0x8379,0x30DA}, + {0x837A,0x837A,0x30DB}, + {0x837B,0x837B,0x30DC}, + {0x837C,0x837C,0x30DD}, + {0x837D,0x837D,0x30DE}, + {0x837E,0x837E,0x30DF}, + {0,0,0}, + {0x8380,0x8380,0x30E0}, /* 8380 */ + {0x8381,0x8381,0x30E1}, + {0x8382,0x8382,0x30E2}, + {0x8383,0x8383,0x30E3}, + {0x8384,0x8384,0x30E4}, + {0x8385,0x8385,0x30E5}, + {0x8386,0x8386,0x30E6}, + {0x8387,0x8387,0x30E7}, + {0x8388,0x8388,0x30E8}, + {0x8389,0x8389,0x30E9}, + {0x838A,0x838A,0x30EA}, + {0x838B,0x838B,0x30EB}, + {0x838C,0x838C,0x30EC}, + {0x838D,0x838D,0x30ED}, + {0x838E,0x838E,0x30EE}, + {0x838F,0x838F,0x30EF}, + {0x8390,0x8390,0x30F0}, /* 8390 */ + {0x8391,0x8391,0x30F1}, + {0x8392,0x8392,0x30F2}, + {0x8393,0x8393,0x30F3}, + {0x8394,0x8394,0x30F4}, + {0x8395,0x8395,0x30F5}, + {0x8396,0x8396,0x30F6}, + {0x8397,0x8397,0x003F}, + {0x8398,0x8398,0x003F}, + {0x8399,0x8399,0x003F}, + {0x839A,0x839A,0x003F}, + {0x839B,0x839B,0x003F}, + {0x839C,0x839C,0x003F}, + {0x839D,0x839D,0x003F}, + {0x839E,0x839E,0x003F}, + {0x839F,0x83BF,0x0391}, + {0x83A0,0x83C0,0x0392}, /* 83A0 */ + {0x83A1,0x83C1,0x0393}, + {0x83A2,0x83C2,0x0394}, + {0x83A3,0x83C3,0x0395}, + {0x83A4,0x83C4,0x0396}, + {0x83A5,0x83C5,0x0397}, + {0x83A6,0x83C6,0x0398}, + {0x83A7,0x83C7,0x0399}, + {0x83A8,0x83C8,0x039A}, + {0x83A9,0x83C9,0x039B}, + {0x83AA,0x83CA,0x039C}, + {0x83AB,0x83CB,0x039D}, + {0x83AC,0x83CC,0x039E}, + {0x83AD,0x83CD,0x039F}, + {0x83AE,0x83CE,0x03A0}, + {0x83AF,0x83CF,0x03A1}, + {0x83B0,0x83D0,0x03A3}, /* 83B0 */ + {0x83B1,0x83D1,0x03A4}, + {0x83B2,0x83D2,0x03A5}, + {0x83B3,0x83D3,0x03A6}, + {0x83B4,0x83D4,0x03A7}, + {0x83B5,0x83D5,0x03A8}, + {0x83B6,0x83D6,0x03A9}, + {0x83B7,0x83B7,0x003F}, + {0x83B8,0x83B8,0x003F}, + {0x83B9,0x83B9,0x003F}, + {0x83BA,0x83BA,0x003F}, + {0x83BB,0x83BB,0x003F}, + {0x83BC,0x83BC,0x003F}, + {0x83BD,0x83BD,0x003F}, + {0x83BE,0x83BE,0x003F}, + {0x839F,0x83BF,0x03B1}, + {0x83A0,0x83C0,0x03B2}, /* 83C0 */ + {0x83A1,0x83C1,0x03B3}, + {0x83A2,0x83C2,0x03B4}, + {0x83A3,0x83C3,0x03B5}, + {0x83A4,0x83C4,0x03B6}, + {0x83A5,0x83C5,0x03B7}, + {0x83A6,0x83C6,0x03B8}, + {0x83A7,0x83C7,0x03B9}, + {0x83A8,0x83C8,0x03BA}, + {0x83A9,0x83C9,0x03BB}, + {0x83AA,0x83CA,0x03BC}, + {0x83AB,0x83CB,0x03BD}, + {0x83AC,0x83CC,0x03BE}, + {0x83AD,0x83CD,0x03BF}, + {0x83AE,0x83CE,0x03C0}, + {0x83AF,0x83CF,0x03C1}, + {0x83B0,0x83D0,0x03C3}, /* 83D0 */ + {0x83B1,0x83D1,0x03C4}, + {0x83B2,0x83D2,0x03C5}, + {0x83B3,0x83D3,0x03C6}, + {0x83B4,0x83D4,0x03C7}, + {0x83B5,0x83D5,0x03C8}, + {0x83B6,0x83D6,0x03C9}, + {0x83D7,0x83D7,0x003F}, + {0x83D8,0x83D8,0x003F}, + {0x83D9,0x83D9,0x003F}, + {0x83DA,0x83DA,0x003F}, + {0x83DB,0x83DB,0x003F}, + {0x83DC,0x83DC,0x003F}, + {0x83DD,0x83DD,0x003F}, + {0x83DE,0x83DE,0x003F}, + {0x83DF,0x83DF,0x003F}, + {0x83E0,0x83E0,0x003F}, /* 83E0 */ + {0x83E1,0x83E1,0x003F}, + {0x83E2,0x83E2,0x003F}, + {0x83E3,0x83E3,0x003F}, + {0x83E4,0x83E4,0x003F}, + {0x83E5,0x83E5,0x003F}, + {0x83E6,0x83E6,0x003F}, + {0x83E7,0x83E7,0x003F}, + {0x83E8,0x83E8,0x003F}, + {0x83E9,0x83E9,0x003F}, + {0x83EA,0x83EA,0x003F}, + {0x83EB,0x83EB,0x003F}, + {0x83EC,0x83EC,0x003F}, + {0x83ED,0x83ED,0x003F}, + {0x83EE,0x83EE,0x003F}, + {0x83EF,0x83EF,0x003F}, + {0x83F0,0x83F0,0x003F}, /* 83F0 */ + {0x83F1,0x83F1,0x003F}, + {0x83F2,0x83F2,0x003F}, + {0x83F3,0x83F3,0x003F}, + {0x83F4,0x83F4,0x003F}, + {0x83F5,0x83F5,0x003F}, + {0x83F6,0x83F6,0x003F}, + {0x83F7,0x83F7,0x003F}, + {0x83F8,0x83F8,0x003F}, + {0x83F9,0x83F9,0x003F}, + {0x83FA,0x83FA,0x003F}, + {0x83FB,0x83FB,0x003F}, + {0x83FC,0x83FC,0x003F}, + {0,0,0}, + {0,0,0}, + {0,0,0} +}; + + +static MY_UNICASE_INFO c84[256]= +{ + /* 8400-840F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8410-841F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8420-842F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8430-843F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + + {0x8440,0x8470,0x0410}, /* 8440 */ + {0x8441,0x8471,0x0411}, + {0x8442,0x8472,0x0412}, + {0x8443,0x8473,0x0413}, + {0x8444,0x8474,0x0414}, + {0x8445,0x8475,0x0415}, + {0x8446,0x8476,0x0401}, + {0x8447,0x8477,0x0416}, + {0x8448,0x8478,0x0417}, + {0x8449,0x8479,0x0418}, + {0x844A,0x847A,0x0419}, + {0x844B,0x847B,0x041A}, + {0x844C,0x847C,0x041B}, + {0x844D,0x847D,0x041C}, + {0x844E,0x847E,0x041D}, + {0x844F,0x8480,0x041E}, + {0x8450,0x8481,0x041F}, /* 8450 */ + {0x8451,0x8482,0x0420}, + {0x8452,0x8483,0x0421}, + {0x8453,0x8484,0x0422}, + {0x8454,0x8485,0x0423}, + {0x8455,0x8486,0x0424}, + {0x8456,0x8487,0x0425}, + {0x8457,0x8488,0x0426}, + {0x8458,0x8489,0x0427}, + {0x8459,0x848A,0x0428}, + {0x845A,0x848B,0x0429}, + {0x845B,0x848C,0x042A}, + {0x845C,0x848D,0x042B}, + {0x845D,0x848E,0x042C}, + {0x845E,0x848F,0x042D}, + {0x845F,0x8490,0x042E}, + {0x8460,0x8491,0x042F}, /* 8460 */ + {0x8461,0x8461,0x003F}, + {0x8462,0x8462,0x003F}, + {0x8463,0x8463,0x003F}, + {0x8464,0x8464,0x003F}, + {0x8465,0x8465,0x003F}, + {0x8466,0x8466,0x003F}, + {0x8467,0x8467,0x003F}, + {0x8468,0x8468,0x003F}, + {0x8469,0x8469,0x003F}, + {0x846A,0x846A,0x003F}, + {0x846B,0x846B,0x003F}, + {0x846C,0x846C,0x003F}, + {0x846D,0x846D,0x003F}, + {0x846E,0x846E,0x003F}, + {0x846F,0x846F,0x003F}, + {0x8440,0x8470,0x0430}, /* 8470 */ + {0x8441,0x8471,0x0431}, + {0x8442,0x8472,0x0432}, + {0x8443,0x8473,0x0433}, + {0x8444,0x8474,0x0434}, + {0x8445,0x8475,0x0435}, + {0x8446,0x8476,0x0451}, + {0x8447,0x8477,0x0436}, + {0x8448,0x8478,0x0437}, + {0x8449,0x8479,0x0438}, + {0x844A,0x847A,0x0439}, + {0x844B,0x847B,0x043A}, + {0x844C,0x847C,0x043B}, + {0x844D,0x847D,0x043C}, + {0x844E,0x847E,0x043D}, + {0,0,0}, + {0x844F,0x8480,0x043E}, /* 8480 */ + {0x8450,0x8481,0x043F}, + {0x8451,0x8482,0x0440}, + {0x8452,0x8483,0x0441}, + {0x8453,0x8484,0x0442}, + {0x8454,0x8485,0x0443}, + {0x8455,0x8486,0x0444}, + {0x8456,0x8487,0x0445}, + {0x8457,0x8488,0x0446}, + {0x8458,0x8489,0x0447}, + {0x8459,0x848A,0x0448}, + {0x845A,0x848B,0x0449}, + {0x845B,0x848C,0x044A}, + {0x845C,0x848D,0x044B}, + {0x845D,0x848E,0x044C}, + {0x845E,0x848F,0x044D}, + {0x845F,0x8490,0x044E}, /* 8490 */ + {0x8460,0x8491,0x044F}, + {0x8492,0x8492,0x003F}, + {0x8493,0x8493,0x003F}, + {0x8494,0x8494,0x003F}, + {0x8495,0x8495,0x003F}, + {0x8496,0x8496,0x003F}, + {0x8497,0x8497,0x003F}, + {0x8498,0x8498,0x003F}, + {0x8499,0x8499,0x003F}, + {0x849A,0x849A,0x003F}, + {0x849B,0x849B,0x003F}, + {0x849C,0x849C,0x003F}, + {0x849D,0x849D,0x003F}, + {0x849E,0x849E,0x003F}, + {0x849F,0x849F,0x2500}, + {0x84A0,0x84A0,0x2502}, /* 84A0 */ + {0x84A1,0x84A1,0x250C}, + {0x84A2,0x84A2,0x2510}, + {0x84A3,0x84A3,0x2518}, + {0x84A4,0x84A4,0x2514}, + {0x84A5,0x84A5,0x251C}, + {0x84A6,0x84A6,0x252C}, + {0x84A7,0x84A7,0x2524}, + {0x84A8,0x84A8,0x2534}, + {0x84A9,0x84A9,0x253C}, + {0x84AA,0x84AA,0x2501}, + {0x84AB,0x84AB,0x2503}, + {0x84AC,0x84AC,0x250F}, + {0x84AD,0x84AD,0x2513}, + {0x84AE,0x84AE,0x251B}, + {0x84AF,0x84AF,0x2517}, + {0x84B0,0x84B0,0x2523}, /* 84B0 */ + {0x84B1,0x84B1,0x2533}, + {0x84B2,0x84B2,0x252B}, + {0x84B3,0x84B3,0x253B}, + {0x84B4,0x84B4,0x254B}, + {0x84B5,0x84B5,0x2520}, + {0x84B6,0x84B6,0x252F}, + {0x84B7,0x84B7,0x2528}, + {0x84B8,0x84B8,0x2537}, + {0x84B9,0x84B9,0x253F}, + {0x84BA,0x84BA,0x251D}, + {0x84BB,0x84BB,0x2530}, + {0x84BC,0x84BC,0x2525}, + {0x84BD,0x84BD,0x2538}, + {0x84BE,0x84BE,0x2542}, + {0x84BF,0x84BF,0x003F}, + {0x84C0,0x84C0,0x003F}, /* 84C0 */ + {0x84C1,0x84C1,0x003F}, + {0x84C2,0x84C2,0x003F}, + {0x84C3,0x84C3,0x003F}, + {0x84C4,0x84C4,0x003F}, + {0x84C5,0x84C5,0x003F}, + {0x84C6,0x84C6,0x003F}, + {0x84C7,0x84C7,0x003F}, + {0x84C8,0x84C8,0x003F}, + {0x84C9,0x84C9,0x003F}, + {0x84CA,0x84CA,0x003F}, + {0x84CB,0x84CB,0x003F}, + {0x84CC,0x84CC,0x003F}, + {0x84CD,0x84CD,0x003F}, + {0x84CE,0x84CE,0x003F}, + {0x84CF,0x84CF,0x003F}, + {0x84D0,0x84D0,0x003F}, /* 84D0 */ + {0x84D1,0x84D1,0x003F}, + {0x84D2,0x84D2,0x003F}, + {0x84D3,0x84D3,0x003F}, + {0x84D4,0x84D4,0x003F}, + {0x84D5,0x84D5,0x003F}, + {0x84D6,0x84D6,0x003F}, + {0x84D7,0x84D7,0x003F}, + {0x84D8,0x84D8,0x003F}, + {0x84D9,0x84D9,0x003F}, + {0x84DA,0x84DA,0x003F}, + {0x84DB,0x84DB,0x003F}, + {0x84DC,0x84DC,0x003F}, + {0x84DD,0x84DD,0x003F}, + {0x84DE,0x84DE,0x003F}, + {0x84DF,0x84DF,0x003F}, + {0x84E0,0x84E0,0x003F}, /* 84E0 */ + {0x84E1,0x84E1,0x003F}, + {0x84E2,0x84E2,0x003F}, + {0x84E3,0x84E3,0x003F}, + {0x84E4,0x84E4,0x003F}, + {0x84E5,0x84E5,0x003F}, + {0x84E6,0x84E6,0x003F}, + {0x84E7,0x84E7,0x003F}, + {0x84E8,0x84E8,0x003F}, + {0x84E9,0x84E9,0x003F}, + {0x84EA,0x84EA,0x003F}, + {0x84EB,0x84EB,0x003F}, + {0x84EC,0x84EC,0x003F}, + {0x84ED,0x84ED,0x003F}, + {0x84EE,0x84EE,0x003F}, + {0x84EF,0x84EF,0x003F}, + {0x84F0,0x84F0,0x003F}, /* 84F0 */ + {0x84F1,0x84F1,0x003F}, + {0x84F2,0x84F2,0x003F}, + {0x84F3,0x84F3,0x003F}, + {0x84F4,0x84F4,0x003F}, + {0x84F5,0x84F5,0x003F}, + {0x84F6,0x84F6,0x003F}, + {0x84F7,0x84F7,0x003F}, + {0x84F8,0x84F8,0x003F}, + {0x84F9,0x84F9,0x003F}, + {0x84FA,0x84FA,0x003F}, + {0x84FB,0x84FB,0x003F}, + {0x84FC,0x84FC,0x003F}, + {0,0,0}, + {0,0,0}, + {0,0,0} +}; + + +static MY_UNICASE_INFO c87[256]= +{ + /* 8700-870F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8710-871F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8720-872F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8730-873F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + + {0x8740,0x8740,0x2460}, /* 8740 */ + {0x8741,0x8741,0x2461}, + {0x8742,0x8742,0x2462}, + {0x8743,0x8743,0x2463}, + {0x8744,0x8744,0x2464}, + {0x8745,0x8745,0x2465}, + {0x8746,0x8746,0x2466}, + {0x8747,0x8747,0x2467}, + {0x8748,0x8748,0x2468}, + {0x8749,0x8749,0x2469}, + {0x874A,0x874A,0x246A}, + {0x874B,0x874B,0x246B}, + {0x874C,0x874C,0x246C}, + {0x874D,0x874D,0x246D}, + {0x874E,0x874E,0x246E}, + {0x874F,0x874F,0x246F}, + {0x8750,0x8750,0x2470}, /* 8750 */ + {0x8751,0x8751,0x2471}, + {0x8752,0x8752,0x2472}, + {0x8753,0x8753,0x2473}, + {0x8754,0xEEEF,0x2160}, + {0x8755,0xEEF0,0x2161}, + {0x8756,0xEEF1,0x2162}, + {0x8757,0xEEF2,0x2163}, + {0x8758,0xEEF3,0x2164}, + {0x8759,0xEEF4,0x2165}, + {0x875A,0xEEF5,0x2166}, + {0x875B,0xEEF6,0x2167}, + {0x875C,0xEEF7,0x2168}, + {0x875D,0xEEF8,0x2169}, + {0x875E,0x875E,0x003F}, + {0x875F,0x875F,0x3349}, + {0x8760,0x8760,0x3314}, /* 8760 */ + {0x8761,0x8761,0x3322}, + {0x8762,0x8762,0x334D}, + {0x8763,0x8763,0x3318}, + {0x8764,0x8764,0x3327}, + {0x8765,0x8765,0x3303}, + {0x8766,0x8766,0x3336}, + {0x8767,0x8767,0x3351}, + {0x8768,0x8768,0x3357}, + {0x8769,0x8769,0x330D}, + {0x876A,0x876A,0x3326}, + {0x876B,0x876B,0x3323}, + {0x876C,0x876C,0x332B}, + {0x876D,0x876D,0x334A}, + {0x876E,0x876E,0x333B}, + {0x876F,0x876F,0x339C}, + {0x8770,0x8770,0x339D}, /* 8770 */ + {0x8771,0x8771,0x339E}, + {0x8772,0x8772,0x338E}, + {0x8773,0x8773,0x338F}, + {0x8774,0x8774,0x33C4}, + {0x8775,0x8775,0x33A1}, + {0x8776,0x8776,0x003F}, + {0x8777,0x8777,0x003F}, + {0x8778,0x8778,0x003F}, + {0x8779,0x8779,0x003F}, + {0x877A,0x877A,0x003F}, + {0x877B,0x877B,0x003F}, + {0x877C,0x877C,0x003F}, + {0x877D,0x877D,0x003F}, + {0x877E,0x877E,0x337B}, + {0,0,0}, + {0x8780,0x8780,0x301D}, /* 8780 */ + {0x8781,0x8781,0x301F}, + {0x8782,0x8782,0x2116}, + {0x8783,0x8783,0x33CD}, + {0x8784,0x8784,0x2121}, + {0x8785,0x8785,0x32A4}, + {0x8786,0x8786,0x32A5}, + {0x8787,0x8787,0x32A6}, + {0x8788,0x8788,0x32A7}, + {0x8789,0x8789,0x32A8}, + {0x878A,0x878A,0x3231}, + {0x878B,0x878B,0x3232}, + {0x878C,0x878C,0x3239}, + {0x878D,0x878D,0x337E}, + {0x878E,0x878E,0x337D}, + {0x878F,0x878F,0x337C}, + {0x8790,0x8790,0x2252}, /* 8790 */ + {0x8791,0x8791,0x2261}, + {0x8792,0x8792,0x222B}, + {0x8793,0x8793,0x222E}, + {0x8794,0x8794,0x2211}, + {0x8795,0x8795,0x221A}, + {0x8796,0x8796,0x22A5}, + {0x8797,0x8797,0x2220}, + {0x8798,0x8798,0x221F}, + {0x8799,0x8799,0x22BF}, + {0x879A,0x879A,0x2235}, + {0x879B,0x879B,0x2229}, + {0x879C,0x879C,0x222A}, + {0x879D,0x879D,0x003F}, + {0x879E,0x879E,0x003F}, + {0x879F,0x879F,0x003F}, + {0x87A0,0x87A0,0x003F}, /* 87A0 */ + {0x87A1,0x87A1,0x003F}, + {0x87A2,0x87A2,0x003F}, + {0x87A3,0x87A3,0x003F}, + {0x87A4,0x87A4,0x003F}, + {0x87A5,0x87A5,0x003F}, + {0x87A6,0x87A6,0x003F}, + {0x87A7,0x87A7,0x003F}, + {0x87A8,0x87A8,0x003F}, + {0x87A9,0x87A9,0x003F}, + {0x87AA,0x87AA,0x003F}, + {0x87AB,0x87AB,0x003F}, + {0x87AC,0x87AC,0x003F}, + {0x87AD,0x87AD,0x003F}, + {0x87AE,0x87AE,0x003F}, + {0x87AF,0x87AF,0x003F}, + {0x87B0,0x87B0,0x003F}, /* 87B0 */ + {0x87B1,0x87B1,0x003F}, + {0x87B2,0x87B2,0x003F}, + {0x87B3,0x87B3,0x003F}, + {0x87B4,0x87B4,0x003F}, + {0x87B5,0x87B5,0x003F}, + {0x87B6,0x87B6,0x003F}, + {0x87B7,0x87B7,0x003F}, + {0x87B8,0x87B8,0x003F}, + {0x87B9,0x87B9,0x003F}, + {0x87BA,0x87BA,0x003F}, + {0x87BB,0x87BB,0x003F}, + {0x87BC,0x87BC,0x003F}, + {0x87BD,0x87BD,0x003F}, + {0x87BE,0x87BE,0x003F}, + {0x87BF,0x87BF,0x003F}, + {0x87C0,0x87C0,0x003F}, /* 87C0 */ + {0x87C1,0x87C1,0x003F}, + {0x87C2,0x87C2,0x003F}, + {0x87C3,0x87C3,0x003F}, + {0x87C4,0x87C4,0x003F}, + {0x87C5,0x87C5,0x003F}, + {0x87C6,0x87C6,0x003F}, + {0x87C7,0x87C7,0x003F}, + {0x87C8,0x87C8,0x003F}, + {0x87C9,0x87C9,0x003F}, + {0x87CA,0x87CA,0x003F}, + {0x87CB,0x87CB,0x003F}, + {0x87CC,0x87CC,0x003F}, + {0x87CD,0x87CD,0x003F}, + {0x87CE,0x87CE,0x003F}, + {0x87CF,0x87CF,0x003F}, + {0x87D0,0x87D0,0x003F}, /* 87D0 */ + {0x87D1,0x87D1,0x003F}, + {0x87D2,0x87D2,0x003F}, + {0x87D3,0x87D3,0x003F}, + {0x87D4,0x87D4,0x003F}, + {0x87D5,0x87D5,0x003F}, + {0x87D6,0x87D6,0x003F}, + {0x87D7,0x87D7,0x003F}, + {0x87D8,0x87D8,0x003F}, + {0x87D9,0x87D9,0x003F}, + {0x87DA,0x87DA,0x003F}, + {0x87DB,0x87DB,0x003F}, + {0x87DC,0x87DC,0x003F}, + {0x87DD,0x87DD,0x003F}, + {0x87DE,0x87DE,0x003F}, + {0x87DF,0x87DF,0x003F}, + {0x87E0,0x87E0,0x003F}, /* 87E0 */ + {0x87E1,0x87E1,0x003F}, + {0x87E2,0x87E2,0x003F}, + {0x87E3,0x87E3,0x003F}, + {0x87E4,0x87E4,0x003F}, + {0x87E5,0x87E5,0x003F}, + {0x87E6,0x87E6,0x003F}, + {0x87E7,0x87E7,0x003F}, + {0x87E8,0x87E8,0x003F}, + {0x87E9,0x87E9,0x003F}, + {0x87EA,0x87EA,0x003F}, + {0x87EB,0x87EB,0x003F}, + {0x87EC,0x87EC,0x003F}, + {0x87ED,0x87ED,0x003F}, + {0x87EE,0x87EE,0x003F}, + {0x87EF,0x87EF,0x003F}, + {0x87F0,0x87F0,0x003F}, /* 87F0 */ + {0x87F1,0x87F1,0x003F}, + {0x87F2,0x87F2,0x003F}, + {0x87F3,0x87F3,0x003F}, + {0x87F4,0x87F4,0x003F}, + {0x87F5,0x87F5,0x003F}, + {0x87F6,0x87F6,0x003F}, + {0x87F7,0x87F7,0x003F}, + {0x87F8,0x87F8,0x003F}, + {0x87F9,0x87F9,0x003F}, + {0x87FA,0x87FA,0x003F}, + {0x87FB,0x87FB,0x003F}, + {0x87FC,0x87FC,0x003F}, + {0,0,0}, + {0,0,0}, + {0,0,0} +}; + + +static MY_UNICASE_INFO cEE[256]= +{ + /* EE00-EE0F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* EE10-EE1F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* EE20-EE2F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* EE30-EE3F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + + {0xEE40,0xEE40,0x72BE}, /* EE40 */ + {0xEE41,0xEE41,0x7324}, + {0xEE42,0xEE42,0xFA16}, + {0xEE43,0xEE43,0x7377}, + {0xEE44,0xEE44,0x73BD}, + {0xEE45,0xEE45,0x73C9}, + {0xEE46,0xEE46,0x73D6}, + {0xEE47,0xEE47,0x73E3}, + {0xEE48,0xEE48,0x73D2}, + {0xEE49,0xEE49,0x7407}, + {0xEE4A,0xEE4A,0x73F5}, + {0xEE4B,0xEE4B,0x7426}, + {0xEE4C,0xEE4C,0x742A}, + {0xEE4D,0xEE4D,0x7429}, + {0xEE4E,0xEE4E,0x742E}, + {0xEE4F,0xEE4F,0x7462}, + + {0xEE50,0xEE50,0x7489}, /* EE50 */ + {0xEE51,0xEE51,0x749F}, + {0xEE52,0xEE52,0x7501}, + {0xEE53,0xEE53,0x756F}, + {0xEE54,0xEE54,0x7682}, + {0xEE55,0xEE55,0x769C}, + {0xEE56,0xEE56,0x769E}, + {0xEE57,0xEE57,0x769B}, + {0xEE58,0xEE58,0x76A6}, + {0xEE59,0xEE59,0xFA17}, + {0xEE5A,0xEE5A,0x7746}, + {0xEE5B,0xEE5B,0x52AF}, + {0xEE5C,0xEE5C,0x7821}, + {0xEE5D,0xEE5D,0x784E}, + {0xEE5E,0xEE5E,0x7864}, + {0xEE5F,0xEE5F,0x787A}, + {0xEE60,0xEE60,0x7930}, /* EE60 */ + {0xEE61,0xEE61,0xFA18}, + {0xEE62,0xEE62,0xFA19}, + {0xEE63,0xEE63,0xFA1A}, + {0xEE64,0xEE64,0x7994}, + {0xEE65,0xEE65,0xFA1B}, + {0xEE66,0xEE66,0x799B}, + {0xEE67,0xEE67,0x7AD1}, + {0xEE68,0xEE68,0x7AE7}, + {0xEE69,0xEE69,0xFA1C}, + {0xEE6A,0xEE6A,0x7AEB}, + {0xEE6B,0xEE6B,0x7B9E}, + {0xEE6C,0xEE6C,0xFA1D}, + {0xEE6D,0xEE6D,0x7D48}, + {0xEE6E,0xEE6E,0x7D5C}, + {0xEE6F,0xEE6F,0x7DB7}, + {0xEE70,0xEE70,0x7DA0}, /* EE70 */ + {0xEE71,0xEE71,0x7DD6}, + {0xEE72,0xEE72,0x7E52}, + {0xEE73,0xEE73,0x7F47}, + {0xEE74,0xEE74,0x7FA1}, + {0xEE75,0xEE75,0xFA1E}, + {0xEE76,0xEE76,0x8301}, + {0xEE77,0xEE77,0x8362}, + {0xEE78,0xEE78,0x837F}, + {0xEE79,0xEE79,0x83C7}, + {0xEE7A,0xEE7A,0x83F6}, + {0xEE7B,0xEE7B,0x8448}, + {0xEE7C,0xEE7C,0x84B4}, + {0xEE7D,0xEE7D,0x8553}, + {0xEE7E,0xEE7E,0x8559}, + {0,0,0}, + {0xEE80,0xEE80,0x856B}, /* EE80 */ + {0xEE81,0xEE81,0xFA1F}, + {0xEE82,0xEE82,0x85B0}, + {0xEE83,0xEE83,0xFA20}, + {0xEE84,0xEE84,0xFA21}, + {0xEE85,0xEE85,0x8807}, + {0xEE86,0xEE86,0x88F5}, + {0xEE87,0xEE87,0x8A12}, + {0xEE88,0xEE88,0x8A37}, + {0xEE89,0xEE89,0x8A79}, + {0xEE8A,0xEE8A,0x8AA7}, + {0xEE8B,0xEE8B,0x8ABE}, + {0xEE8C,0xEE8C,0x8ADF}, + {0xEE8D,0xEE8D,0xFA22}, + {0xEE8E,0xEE8E,0x8AF6}, + {0xEE8F,0xEE8F,0x8B53}, + {0xEE90,0xEE90,0x8B7F}, /* EE90 */ + {0xEE91,0xEE91,0x8CF0}, + {0xEE92,0xEE92,0x8CF4}, + {0xEE93,0xEE93,0x8D12}, + {0xEE94,0xEE94,0x8D76}, + {0xEE95,0xEE95,0xFA23}, + {0xEE96,0xEE96,0x8ECF}, + {0xEE97,0xEE97,0xFA24}, + {0xEE98,0xEE98,0xFA25}, + {0xEE99,0xEE99,0x9067}, + {0xEE9A,0xEE9A,0x90DE}, + {0xEE9B,0xEE9B,0xFA26}, + {0xEE9C,0xEE9C,0x9115}, + {0xEE9D,0xEE9D,0x9127}, + {0xEE9E,0xEE9E,0x91DA}, + {0xEE9F,0xEE9F,0x91D7}, + {0xEEA0,0xEEA0,0x91DE}, /* EEA0 */ + {0xEEA1,0xEEA1,0x91ED}, + {0xEEA2,0xEEA2,0x91EE}, + {0xEEA3,0xEEA3,0x91E4}, + {0xEEA4,0xEEA4,0x91E5}, + {0xEEA5,0xEEA5,0x9206}, + {0xEEA6,0xEEA6,0x9210}, + {0xEEA7,0xEEA7,0x920A}, + {0xEEA8,0xEEA8,0x923A}, + {0xEEA9,0xEEA9,0x9240}, + {0xEEAA,0xEEAA,0x923C}, + {0xEEAB,0xEEAB,0x924E}, + {0xEEAC,0xEEAC,0x9259}, + {0xEEAD,0xEEAD,0x9251}, + {0xEEAE,0xEEAE,0x9239}, + {0xEEAF,0xEEAF,0x9267}, + {0xEEB0,0xEEB0,0x92A7}, /* EEB0 */ + {0xEEB1,0xEEB1,0x9277}, + {0xEEB2,0xEEB2,0x9278}, + {0xEEB3,0xEEB3,0x92E7}, + {0xEEB4,0xEEB4,0x92D7}, + {0xEEB5,0xEEB5,0x92D9}, + {0xEEB6,0xEEB6,0x92D0}, + {0xEEB7,0xEEB7,0xFA27}, + {0xEEB8,0xEEB8,0x92D5}, + {0xEEB9,0xEEB9,0x92E0}, + {0xEEBA,0xEEBA,0x92D3}, + {0xEEBB,0xEEBB,0x9325}, + {0xEEBC,0xEEBC,0x9321}, + {0xEEBD,0xEEBD,0x92FB}, + {0xEEBE,0xEEBE,0xFA28}, + {0xEEBF,0xEEBF,0x931E}, + {0xEEC0,0xEEC0,0x92FF}, /* EEC0 */ + {0xEEC1,0xEEC1,0x931D}, + {0xEEC2,0xEEC2,0x9302}, + {0xEEC3,0xEEC3,0x9370}, + {0xEEC4,0xEEC4,0x9357}, + {0xEEC5,0xEEC5,0x93A4}, + {0xEEC6,0xEEC6,0x93C6}, + {0xEEC7,0xEEC7,0x93DE}, + {0xEEC8,0xEEC8,0x93F8}, + {0xEEC9,0xEEC9,0x9431}, + {0xEECA,0xEECA,0x9445}, + {0xEECB,0xEECB,0x9448}, + {0xEECC,0xEECC,0x9592}, + {0xEECD,0xEECD,0xF9DC}, + {0xEECE,0xEECE,0xFA29}, + {0xEECF,0xEECF,0x969D}, + {0xEED0,0xEED0,0x96AF}, /* EED0 */ + {0xEED1,0xEED1,0x9733}, + {0xEED2,0xEED2,0x973B}, + {0xEED3,0xEED3,0x9743}, + {0xEED4,0xEED4,0x974D}, + {0xEED5,0xEED5,0x974F}, + {0xEED6,0xEED6,0x9751}, + {0xEED7,0xEED7,0x9755}, + {0xEED8,0xEED8,0x9857}, + {0xEED9,0xEED9,0x9865}, + {0xEEDA,0xEEDA,0xFA2A}, + {0xEEDB,0xEEDB,0xFA2B}, + {0xEEDC,0xEEDC,0x9927}, + {0xEEDD,0xEEDD,0xFA2C}, + {0xEEDE,0xEEDE,0x999E}, + {0xEEDF,0xEEDF,0x9A4E}, + {0xEEE0,0xEEE0,0x9AD9}, /* EEE0 */ + {0xEEE1,0xEEE1,0x9ADC}, + {0xEEE2,0xEEE2,0x9B75}, + {0xEEE3,0xEEE3,0x9B72}, + {0xEEE4,0xEEE4,0x9B8F}, + {0xEEE5,0xEEE5,0x9BB1}, + {0xEEE6,0xEEE6,0x9BBB}, + {0xEEE7,0xEEE7,0x9C00}, + {0xEEE8,0xEEE8,0x9D70}, + {0xEEE9,0xEEE9,0x9D6B}, + {0xEEEA,0xEEEA,0xFA2D}, + {0xEEEB,0xEEEB,0x9E19}, + {0xEEEC,0xEEEC,0x9ED1}, + {0xEEED,0xEEED,0x003F}, + {0xEEEE,0xEEEE,0x003F}, + {0x8754,0xEEEF,0x2170}, + {0x8755,0xEEF0,0x2171}, /* EEF0 */ + {0x8756,0xEEF1,0x2172}, + {0x8757,0xEEF2,0x2173}, + {0x8758,0xEEF3,0x2174}, + {0x8759,0xEEF4,0x2175}, + {0x875A,0xEEF5,0x2176}, + {0x875B,0xEEF6,0x2177}, + {0x875C,0xEEF7,0x2178}, + {0x875D,0xEEF8,0x2179}, + {0xEEF9,0xEEF9,0xFFE2}, + {0xEEFA,0xEEFA,0xFFE4}, + {0xEEFB,0xEEFB,0xFF07}, + {0xEEFC,0xEEFC,0xFF02}, + {0,0,0}, + {0,0,0}, + {0,0,0} +}; + + +static MY_UNICASE_INFO cFA[256]= +{ + /* FA00-FA0F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* FA10-FA1F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* FA20-FA2F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* FA30-FA3F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + + {0xFA4A,0xFA40,0x2170}, /* FA40 */ + {0xFA4B,0xFA41,0x2171}, + {0xFA4C,0xFA42,0x2172}, + {0xFA4D,0xFA43,0x2173}, + {0xFA4E,0xFA44,0x2174}, + {0xFA4F,0xFA45,0x2175}, + {0xFA50,0xFA46,0x2176}, + {0xFA51,0xFA47,0x2177}, + {0xFA52,0xFA48,0x2178}, + {0xFA53,0xFA49,0x2179}, + {0xFA4A,0xFA40,0x2160}, + {0xFA4B,0xFA41,0x2161}, + {0xFA4C,0xFA42,0x2162}, + {0xFA4D,0xFA43,0x2163}, + {0xFA4E,0xFA44,0x2164}, + {0xFA4F,0xFA45,0x2165}, + {0xFA50,0xFA46,0x2166}, /* FA50 */ + {0xFA51,0xFA47,0x2167}, + {0xFA52,0xFA48,0x2168}, + {0xFA53,0xFA49,0x2169}, + {0xFA54,0xFA54,0xFFE2}, + {0xFA55,0xFA55,0xFFE4}, + {0xFA56,0xFA56,0xFF07}, + {0xFA57,0xFA57,0xFF02}, + {0xFA58,0xFA58,0x3231}, + {0xFA59,0xFA59,0x2116}, + {0xFA5A,0xFA5A,0x2121}, + {0xFA5B,0xFA5B,0x2235}, + {0xFA5C,0xFA5C,0x7E8A}, + {0xFA5D,0xFA5D,0x891C}, + {0xFA5E,0xFA5E,0x9348}, + {0xFA5F,0xFA5F,0x9288}, + {0xFA60,0xFA60,0x84DC}, /* FA60 */ + {0xFA61,0xFA61,0x4FC9}, + {0xFA62,0xFA62,0x70BB}, + {0xFA63,0xFA63,0x6631}, + {0xFA64,0xFA64,0x68C8}, + {0xFA65,0xFA65,0x92F9}, + {0xFA66,0xFA66,0x66FB}, + {0xFA67,0xFA67,0x5F45}, + {0xFA68,0xFA68,0x4E28}, + {0xFA69,0xFA69,0x4EE1}, + {0xFA6A,0xFA6A,0x4EFC}, + {0xFA6B,0xFA6B,0x4F00}, + {0xFA6C,0xFA6C,0x4F03}, + {0xFA6D,0xFA6D,0x4F39}, + {0xFA6E,0xFA6E,0x4F56}, + {0xFA6F,0xFA6F,0x4F92}, + {0xFA70,0xFA70,0x4F8A}, /* FA70 */ + {0xFA71,0xFA71,0x4F9A}, + {0xFA72,0xFA72,0x4F94}, + {0xFA73,0xFA73,0x4FCD}, + {0xFA74,0xFA74,0x5040}, + {0xFA75,0xFA75,0x5022}, + {0xFA76,0xFA76,0x4FFF}, + {0xFA77,0xFA77,0x501E}, + {0xFA78,0xFA78,0x5046}, + {0xFA79,0xFA79,0x5070}, + {0xFA7A,0xFA7A,0x5042}, + {0xFA7B,0xFA7B,0x5094}, + {0xFA7C,0xFA7C,0x50F4}, + {0xFA7D,0xFA7D,0x50D8}, + {0xFA7E,0xFA7E,0x514A}, + {0,0,0}, + {0xFA80,0xFA80,0x5164}, /* FA80 */ + {0xFA81,0xFA81,0x519D}, + {0xFA82,0xFA82,0x51BE}, + {0xFA83,0xFA83,0x51EC}, + {0xFA84,0xFA84,0x5215}, + {0xFA85,0xFA85,0x529C}, + {0xFA86,0xFA86,0x52A6}, + {0xFA87,0xFA87,0x52C0}, + {0xFA88,0xFA88,0x52DB}, + {0xFA89,0xFA89,0x5300}, + {0xFA8A,0xFA8A,0x5307}, + {0xFA8B,0xFA8B,0x5324}, + {0xFA8C,0xFA8C,0x5372}, + {0xFA8D,0xFA8D,0x5393}, + {0xFA8E,0xFA8E,0x53B2}, + {0xFA8F,0xFA8F,0x53DD}, + {0xFA90,0xFA90,0xFA0E}, /* FA90 */ + {0xFA91,0xFA91,0x549C}, + {0xFA92,0xFA92,0x548A}, + {0xFA93,0xFA93,0x54A9}, + {0xFA94,0xFA94,0x54FF}, + {0xFA95,0xFA95,0x5586}, + {0xFA96,0xFA96,0x5759}, + {0xFA97,0xFA97,0x5765}, + {0xFA98,0xFA98,0x57AC}, + {0xFA99,0xFA99,0x57C8}, + {0xFA9A,0xFA9A,0x57C7}, + {0xFA9B,0xFA9B,0xFA0F}, + {0xFA9C,0xFA9C,0xFA10}, + {0xFA9D,0xFA9D,0x589E}, + {0xFA9E,0xFA9E,0x58B2}, + {0xFA9F,0xFA9F,0x590B}, + {0xFAA0,0xFAA0,0x5953}, /* FAA0 */ + {0xFAA1,0xFAA1,0x595B}, + {0xFAA2,0xFAA2,0x595D}, + {0xFAA3,0xFAA3,0x5963}, + {0xFAA4,0xFAA4,0x59A4}, + {0xFAA5,0xFAA5,0x59BA}, + {0xFAA6,0xFAA6,0x5B56}, + {0xFAA7,0xFAA7,0x5BC0}, + {0xFAA8,0xFAA8,0x752F}, + {0xFAA9,0xFAA9,0x5BD8}, + {0xFAAA,0xFAAA,0x5BEC}, + {0xFAAB,0xFAAB,0x5C1E}, + {0xFAAC,0xFAAC,0x5CA6}, + {0xFAAD,0xFAAD,0x5CBA}, + {0xFAAE,0xFAAE,0x5CF5}, + {0xFAAF,0xFAAF,0x5D27}, + {0xFAB0,0xFAB0,0x5D53}, /* FAB0 */ + {0xFAB1,0xFAB1,0xFA11}, + {0xFAB2,0xFAB2,0x5D42}, + {0xFAB3,0xFAB3,0x5D6D}, + {0xFAB4,0xFAB4,0x5DB8}, + {0xFAB5,0xFAB5,0x5DB9}, + {0xFAB6,0xFAB6,0x5DD0}, + {0xFAB7,0xFAB7,0x5F21}, + {0xFAB8,0xFAB8,0x5F34}, + {0xFAB9,0xFAB9,0x5F67}, + {0xFABA,0xFABA,0x5FB7}, + {0xFABB,0xFABB,0x5FDE}, + {0xFABC,0xFABC,0x605D}, + {0xFABD,0xFABD,0x6085}, + {0xFABE,0xFABE,0x608A}, + {0xFABF,0xFABF,0x60DE}, + {0xFAC0,0xFAC0,0x60D5}, /* FAC0 */ + {0xFAC1,0xFAC1,0x6120}, + {0xFAC2,0xFAC2,0x60F2}, + {0xFAC3,0xFAC3,0x6111}, + {0xFAC4,0xFAC4,0x6137}, + {0xFAC5,0xFAC5,0x6130}, + {0xFAC6,0xFAC6,0x6198}, + {0xFAC7,0xFAC7,0x6213}, + {0xFAC8,0xFAC8,0x62A6}, + {0xFAC9,0xFAC9,0x63F5}, + {0xFACA,0xFACA,0x6460}, + {0xFACB,0xFACB,0x649D}, + {0xFACC,0xFACC,0x64CE}, + {0xFACD,0xFACD,0x654E}, + {0xFACE,0xFACE,0x6600}, + {0xFACF,0xFACF,0x6615}, + {0xFAD0,0xFAD0,0x663B}, /* FAD0 */ + {0xFAD1,0xFAD1,0x6609}, + {0xFAD2,0xFAD2,0x662E}, + {0xFAD3,0xFAD3,0x661E}, + {0xFAD4,0xFAD4,0x6624}, + {0xFAD5,0xFAD5,0x6665}, + {0xFAD6,0xFAD6,0x6657}, + {0xFAD7,0xFAD7,0x6659}, + {0xFAD8,0xFAD8,0xFA12}, + {0xFAD9,0xFAD9,0x6673}, + {0xFADA,0xFADA,0x6699}, + {0xFADB,0xFADB,0x66A0}, + {0xFADC,0xFADC,0x66B2}, + {0xFADD,0xFADD,0x66BF}, + {0xFADE,0xFADE,0x66FA}, + {0xFADF,0xFADF,0x670E}, + {0xFAE0,0xFAE0,0xF929}, /* FAE0 */ + {0xFAE1,0xFAE1,0x6766}, + {0xFAE2,0xFAE2,0x67BB}, + {0xFAE3,0xFAE3,0x6852}, + {0xFAE4,0xFAE4,0x67C0}, + {0xFAE5,0xFAE5,0x6801}, + {0xFAE6,0xFAE6,0x6844}, + {0xFAE7,0xFAE7,0x68CF}, + {0xFAE8,0xFAE8,0xFA13}, + {0xFAE9,0xFAE9,0x6968}, + {0xFAEA,0xFAEA,0xFA14}, + {0xFAEB,0xFAEB,0x6998}, + {0xFAEC,0xFAEC,0x69E2}, + {0xFAED,0xFAED,0x6A30}, + {0xFAEE,0xFAEE,0x6A6B}, + {0xFAEF,0xFAEF,0x6A46}, + {0xFAF0,0xFAF0,0x6A73}, /* FAF0 */ + {0xFAF1,0xFAF1,0x6A7E}, + {0xFAF2,0xFAF2,0x6AE2}, + {0xFAF3,0xFAF3,0x6AE4}, + {0xFAF4,0xFAF4,0x6BD6}, + {0xFAF5,0xFAF5,0x6C3F}, + {0xFAF6,0xFAF6,0x6C5C}, + {0xFAF7,0xFAF7,0x6C86}, + {0xFAF8,0xFAF8,0x6C6F}, + {0xFAF9,0xFAF9,0x6CDA}, + {0xFAFA,0xFAFA,0x6D04}, + {0xFAFB,0xFAFB,0x6D87}, + {0xFAFC,0xFAFC,0x6D6F}, + {0,0,0}, + {0,0,0}, + {0,0,0} +}; + + +static MY_UNICASE_INFO *my_caseinfo_cp932[256]= +{ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 1 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 2 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 3 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 4 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 5 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 6 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 7 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, c81, c82, c83, c84, NULL, NULL, c87, /* 8 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 9 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* A */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* B */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* C */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* D */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* E */ + NULL, NULL, NULL, NULL, NULL, NULL, cEE, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* F */ + NULL, NULL, cFA, NULL, NULL, NULL, NULL, NULL +}; + + static int my_strnncoll_cp932_internal(CHARSET_INFO *cs, const uchar **a_res, size_t a_length, const uchar **b_res, size_t b_length) @@ -5524,7 +7030,7 @@ CHARSET_INFO my_charset_cp932_japanese_ci= NULL, /* sort_order_big*/ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ + my_caseinfo_cp932, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -5556,7 +7062,7 @@ CHARSET_INFO my_charset_cp932_bin= NULL, /* sort_order_big*/ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ + my_caseinfo_cp932, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ diff --git a/strings/ctype-euc_kr.c b/strings/ctype-euc_kr.c index fc0af7e35d5..154d49ed085 100644 --- a/strings/ctype-euc_kr.c +++ b/strings/ctype-euc_kr.c @@ -216,6 +216,1273 @@ static uint mbcharlen_euc_kr(CHARSET_INFO *cs __attribute__((unused)),uint c) } +static MY_UNICASE_INFO cA3[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA340,0xA340,0x003F}, /* A340 */ + {0xA341,0xA341,0xC971}, + {0xA342,0xA342,0xC972}, + {0xA343,0xA343,0xC973}, + {0xA344,0xA344,0xC975}, + {0xA345,0xA345,0xC976}, + {0xA346,0xA346,0xC977}, + {0xA347,0xA347,0xC978}, + {0xA348,0xA348,0xC979}, + {0xA349,0xA349,0xC97A}, + {0xA34A,0xA34A,0xC97B}, + {0xA34B,0xA34B,0xC97D}, + {0xA34C,0xA34C,0xC97E}, + {0xA34D,0xA34D,0xC97F}, + {0xA34E,0xA34E,0xC980}, + {0xA34F,0xA34F,0xC981}, + {0xA350,0xA350,0xC982}, /* A350 */ + {0xA351,0xA351,0xC983}, + {0xA352,0xA352,0xC984}, + {0xA353,0xA353,0xC985}, + {0xA354,0xA354,0xC986}, + {0xA355,0xA355,0xC987}, + {0xA356,0xA356,0xC98A}, + {0xA357,0xA357,0xC98B}, + {0xA358,0xA358,0xC98D}, + {0xA359,0xA359,0xC98E}, + {0xA35A,0xA35A,0xC98F}, + {0xA35B,0xA35B,0x003F}, + {0xA35C,0xA35C,0x003F}, + {0xA35D,0xA35D,0x003F}, + {0xA35E,0xA35E,0x003F}, + {0xA35F,0xA35F,0x003F}, + {0xA360,0xA360,0x003F}, /* A360 */ + {0xA361,0xA361,0xC991}, + {0xA362,0xA362,0xC992}, + {0xA363,0xA363,0xC993}, + {0xA364,0xA364,0xC994}, + {0xA365,0xA365,0xC995}, + {0xA366,0xA366,0xC996}, + {0xA367,0xA367,0xC997}, + {0xA368,0xA368,0xC99A}, + {0xA369,0xA369,0xC99C}, + {0xA36A,0xA36A,0xC99E}, + {0xA36B,0xA36B,0xC99F}, + {0xA36C,0xA36C,0xC9A0}, + {0xA36D,0xA36D,0xC9A1}, + {0xA36E,0xA36E,0xC9A2}, + {0xA36F,0xA36F,0xC9A3}, + {0xA370,0xA370,0xC9A4}, /* A370 */ + {0xA371,0xA371,0xC9A5}, + {0xA372,0xA372,0xC9A6}, + {0xA373,0xA373,0xC9A7}, + {0xA374,0xA374,0xC9A8}, + {0xA375,0xA375,0xC9A9}, + {0xA376,0xA376,0xC9AA}, + {0xA377,0xA377,0xC9AB}, + {0xA378,0xA378,0xC9AC}, + {0xA379,0xA379,0xC9AD}, + {0xA37A,0xA37A,0xC9AE}, + {0xA37B,0xA37B,0x003F}, + {0xA37C,0xA37C,0x003F}, + {0xA37D,0xA37D,0x003F}, + {0xA37E,0xA37E,0x003F}, + {0xA37F,0xA37F,0x003F}, + {0xA380,0xA380,0x003F}, /* A380 */ + {0xA381,0xA381,0xC9AF}, + {0xA382,0xA382,0xC9B0}, + {0xA383,0xA383,0xC9B1}, + {0xA384,0xA384,0xC9B2}, + {0xA385,0xA385,0xC9B3}, + {0xA386,0xA386,0xC9B4}, + {0xA387,0xA387,0xC9B5}, + {0xA388,0xA388,0xC9B6}, + {0xA389,0xA389,0xC9B7}, + {0xA38A,0xA38A,0xC9B8}, + {0xA38B,0xA38B,0xC9B9}, + {0xA38C,0xA38C,0xC9BA}, + {0xA38D,0xA38D,0xC9BB}, + {0xA38E,0xA38E,0xC9BC}, + {0xA38F,0xA38F,0xC9BD}, + {0xA390,0xA390,0xC9BE}, /* A390 */ + {0xA391,0xA391,0xC9BF}, + {0xA392,0xA392,0xC9C2}, + {0xA393,0xA393,0xC9C3}, + {0xA394,0xA394,0xC9C5}, + {0xA395,0xA395,0xC9C6}, + {0xA396,0xA396,0xC9C9}, + {0xA397,0xA397,0xC9CB}, + {0xA398,0xA398,0xC9CC}, + {0xA399,0xA399,0xC9CD}, + {0xA39A,0xA39A,0xC9CE}, + {0xA39B,0xA39B,0xC9CF}, + {0xA39C,0xA39C,0xC9D2}, + {0xA39D,0xA39D,0xC9D4}, + {0xA39E,0xA39E,0xC9D7}, + {0xA39F,0xA39F,0xC9D8}, + {0xA3A0,0xA3A0,0xC9DB}, /* A3A0 */ + {0xA3A1,0xA3A1,0xFF01}, + {0xA3A2,0xA3A2,0xFF02}, + {0xA3A3,0xA3A3,0xFF03}, + {0xA3A4,0xA3A4,0xFF04}, + {0xA3A5,0xA3A5,0xFF05}, + {0xA3A6,0xA3A6,0xFF06}, + {0xA3A7,0xA3A7,0xFF07}, + {0xA3A8,0xA3A8,0xFF08}, + {0xA3A9,0xA3A9,0xFF09}, + {0xA3AA,0xA3AA,0xFF0A}, + {0xA3AB,0xA3AB,0xFF0B}, + {0xA3AC,0xA3AC,0xFF0C}, + {0xA3AD,0xA3AD,0xFF0D}, + {0xA3AE,0xA3AE,0xFF0E}, + {0xA3AF,0xA3AF,0xFF0F}, + {0xA3B0,0xA3B0,0xFF10}, /* A3B0 */ + {0xA3B1,0xA3B1,0xFF11}, + {0xA3B2,0xA3B2,0xFF12}, + {0xA3B3,0xA3B3,0xFF13}, + {0xA3B4,0xA3B4,0xFF14}, + {0xA3B5,0xA3B5,0xFF15}, + {0xA3B6,0xA3B6,0xFF16}, + {0xA3B7,0xA3B7,0xFF17}, + {0xA3B8,0xA3B8,0xFF18}, + {0xA3B9,0xA3B9,0xFF19}, + {0xA3BA,0xA3BA,0xFF1A}, + {0xA3BB,0xA3BB,0xFF1B}, + {0xA3BC,0xA3BC,0xFF1C}, + {0xA3BD,0xA3BD,0xFF1D}, + {0xA3BE,0xA3BE,0xFF1E}, + {0xA3BF,0xA3BF,0xFF1F}, + {0xA3C0,0xA3C0,0xFF20}, /* A3C0 */ + {0xA3C1,0xA3E1,0xFF21}, + {0xA3C2,0xA3E2,0xFF22}, + {0xA3C3,0xA3E3,0xFF23}, + {0xA3C4,0xA3E4,0xFF24}, + {0xA3C5,0xA3E5,0xFF25}, + {0xA3C6,0xA3E6,0xFF26}, + {0xA3C7,0xA3E7,0xFF27}, + {0xA3C8,0xA3E8,0xFF28}, + {0xA3C9,0xA3E9,0xFF29}, + {0xA3CA,0xA3EA,0xFF2A}, + {0xA3CB,0xA3EB,0xFF2B}, + {0xA3CC,0xA3EC,0xFF2C}, + {0xA3CD,0xA3ED,0xFF2D}, + {0xA3CE,0xA3EE,0xFF2E}, + {0xA3CF,0xA3EF,0xFF2F}, + {0xA3D0,0xA3F0,0xFF30}, /* A3D0 */ + {0xA3D1,0xA3F1,0xFF31}, + {0xA3D2,0xA3F2,0xFF32}, + {0xA3D3,0xA3F3,0xFF33}, + {0xA3D4,0xA3F4,0xFF34}, + {0xA3D5,0xA3F5,0xFF35}, + {0xA3D6,0xA3F6,0xFF36}, + {0xA3D7,0xA3F7,0xFF37}, + {0xA3D8,0xA3F8,0xFF38}, + {0xA3D9,0xA3F9,0xFF39}, + {0xA3DA,0xA3FA,0xFF3A}, + {0xA3DB,0xA3DB,0xFF3B}, + {0xA3DC,0xA3DC,0xFFE6}, + {0xA3DD,0xA3DD,0xFF3D}, + {0xA3DE,0xA3DE,0xFF3E}, + {0xA3DF,0xA3DF,0xFF3F}, + {0xA3E0,0xA3E0,0xFF40}, /* A3E0 */ + {0xA3C1,0xA3E1,0xFF41}, + {0xA3C2,0xA3E2,0xFF42}, + {0xA3C3,0xA3E3,0xFF43}, + {0xA3C4,0xA3E4,0xFF44}, + {0xA3C5,0xA3E5,0xFF45}, + {0xA3C6,0xA3E6,0xFF46}, + {0xA3C7,0xA3E7,0xFF47}, + {0xA3C8,0xA3E8,0xFF48}, + {0xA3C9,0xA3E9,0xFF49}, + {0xA3CA,0xA3EA,0xFF4A}, + {0xA3CB,0xA3EB,0xFF4B}, + {0xA3CC,0xA3EC,0xFF4C}, + {0xA3CD,0xA3ED,0xFF4D}, + {0xA3CE,0xA3EE,0xFF4E}, + {0xA3CF,0xA3EF,0xFF4F}, + {0xA3D0,0xA3F0,0xFF50}, /* A3F0 */ + {0xA3D1,0xA3F1,0xFF51}, + {0xA3D2,0xA3F2,0xFF52}, + {0xA3D3,0xA3F3,0xFF53}, + {0xA3D4,0xA3F4,0xFF54}, + {0xA3D5,0xA3F5,0xFF55}, + {0xA3D6,0xA3F6,0xFF56}, + {0xA3D7,0xA3F7,0xFF57}, + {0xA3D8,0xA3F8,0xFF58}, + {0xA3D9,0xA3F9,0xFF59}, + {0xA3DA,0xA3FA,0xFF5A}, + {0xA3FB,0xA3FB,0xFF5B}, + {0xA3FC,0xA3FC,0xFF5C}, + {0xA3FD,0xA3FD,0xFF5D}, + {0xA3FE,0xA3FE,0xFFE3}, + {0xA3FF,0xA3FF,0x003F} +}; + + +static MY_UNICASE_INFO cA5[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA540,0xA540,0x003F}, /* A540 */ + {0xA541,0xA541,0xCA47}, + {0xA542,0xA542,0xCA48}, + {0xA543,0xA543,0xCA49}, + {0xA544,0xA544,0xCA4A}, + {0xA545,0xA545,0xCA4B}, + {0xA546,0xA546,0xCA4E}, + {0xA547,0xA547,0xCA4F}, + {0xA548,0xA548,0xCA51}, + {0xA549,0xA549,0xCA52}, + {0xA54A,0xA54A,0xCA53}, + {0xA54B,0xA54B,0xCA55}, + {0xA54C,0xA54C,0xCA56}, + {0xA54D,0xA54D,0xCA57}, + {0xA54E,0xA54E,0xCA58}, + {0xA54F,0xA54F,0xCA59}, + {0xA550,0xA550,0xCA5A}, /* A550 */ + {0xA551,0xA551,0xCA5B}, + {0xA552,0xA552,0xCA5E}, + {0xA553,0xA553,0xCA62}, + {0xA554,0xA554,0xCA63}, + {0xA555,0xA555,0xCA64}, + {0xA556,0xA556,0xCA65}, + {0xA557,0xA557,0xCA66}, + {0xA558,0xA558,0xCA67}, + {0xA559,0xA559,0xCA69}, + {0xA55A,0xA55A,0xCA6A}, + {0xA55B,0xA55B,0x003F}, + {0xA55C,0xA55C,0x003F}, + {0xA55D,0xA55D,0x003F}, + {0xA55E,0xA55E,0x003F}, + {0xA55F,0xA55F,0x003F}, + {0xA560,0xA560,0x003F}, /* A560 */ + {0xA561,0xA561,0xCA6B}, + {0xA562,0xA562,0xCA6C}, + {0xA563,0xA563,0xCA6D}, + {0xA564,0xA564,0xCA6E}, + {0xA565,0xA565,0xCA6F}, + {0xA566,0xA566,0xCA70}, + {0xA567,0xA567,0xCA71}, + {0xA568,0xA568,0xCA72}, + {0xA569,0xA569,0xCA73}, + {0xA56A,0xA56A,0xCA74}, + {0xA56B,0xA56B,0xCA75}, + {0xA56C,0xA56C,0xCA76}, + {0xA56D,0xA56D,0xCA77}, + {0xA56E,0xA56E,0xCA78}, + {0xA56F,0xA56F,0xCA79}, + {0xA570,0xA570,0xCA7A}, /* A570 */ + {0xA571,0xA571,0xCA7B}, + {0xA572,0xA572,0xCA7C}, + {0xA573,0xA573,0xCA7E}, + {0xA574,0xA574,0xCA7F}, + {0xA575,0xA575,0xCA80}, + {0xA576,0xA576,0xCA81}, + {0xA577,0xA577,0xCA82}, + {0xA578,0xA578,0xCA83}, + {0xA579,0xA579,0xCA85}, + {0xA57A,0xA57A,0xCA86}, + {0xA57B,0xA57B,0x003F}, + {0xA57C,0xA57C,0x003F}, + {0xA57D,0xA57D,0x003F}, + {0xA57E,0xA57E,0x003F}, + {0xA57F,0xA57F,0x003F}, + {0xA580,0xA580,0x003F}, /* A580 */ + {0xA581,0xA581,0xCA87}, + {0xA582,0xA582,0xCA88}, + {0xA583,0xA583,0xCA89}, + {0xA584,0xA584,0xCA8A}, + {0xA585,0xA585,0xCA8B}, + {0xA586,0xA586,0xCA8C}, + {0xA587,0xA587,0xCA8D}, + {0xA588,0xA588,0xCA8E}, + {0xA589,0xA589,0xCA8F}, + {0xA58A,0xA58A,0xCA90}, + {0xA58B,0xA58B,0xCA91}, + {0xA58C,0xA58C,0xCA92}, + {0xA58D,0xA58D,0xCA93}, + {0xA58E,0xA58E,0xCA94}, + {0xA58F,0xA58F,0xCA95}, + {0xA590,0xA590,0xCA96}, /* A590 */ + {0xA591,0xA591,0xCA97}, + {0xA592,0xA592,0xCA99}, + {0xA593,0xA593,0xCA9A}, + {0xA594,0xA594,0xCA9B}, + {0xA595,0xA595,0xCA9C}, + {0xA596,0xA596,0xCA9D}, + {0xA597,0xA597,0xCA9E}, + {0xA598,0xA598,0xCA9F}, + {0xA599,0xA599,0xCAA0}, + {0xA59A,0xA59A,0xCAA1}, + {0xA59B,0xA59B,0xCAA2}, + {0xA59C,0xA59C,0xCAA3}, + {0xA59D,0xA59D,0xCAA4}, + {0xA59E,0xA59E,0xCAA5}, + {0xA59F,0xA59F,0xCAA6}, + {0xA5A0,0xA5A0,0xCAA7}, /* A5A0 */ + {0xA5B0,0xA5A1,0x2170}, + {0xA5B1,0xA5A2,0x2171}, + {0xA5B2,0xA5A3,0x2172}, + {0xA5B3,0xA5A4,0x2173}, + {0xA5B4,0xA5A5,0x2174}, + {0xA5B5,0xA5A6,0x2175}, + {0xA5B6,0xA5A7,0x2176}, + {0xA5B7,0xA5A8,0x2177}, + {0xA5B8,0xA5A9,0x2178}, + {0xA5B9,0xA5AA,0x2179}, + {0xA5AB,0xA5AB,0x003F}, + {0xA5AC,0xA5AC,0x003F}, + {0xA5AD,0xA5AD,0x003F}, + {0xA5AE,0xA5AE,0x003F}, + {0xA5AF,0xA5AF,0x003F}, + {0xA5B0,0xA5A1,0x2160}, /* A5B0 */ + {0xA5B1,0xA5A2,0x2161}, + {0xA5B2,0xA5A3,0x2162}, + {0xA5B3,0xA5A4,0x2163}, + {0xA5B4,0xA5A5,0x2164}, + {0xA5B5,0xA5A6,0x2165}, + {0xA5B6,0xA5A7,0x2166}, + {0xA5B7,0xA5A8,0x2167}, + {0xA5B8,0xA5A9,0x2168}, + {0xA5B9,0xA5AA,0x2169}, + {0xA5BA,0xA5BA,0x003F}, + {0xA5BB,0xA5BB,0x003F}, + {0xA5BC,0xA5BC,0x003F}, + {0xA5BD,0xA5BD,0x003F}, + {0xA5BE,0xA5BE,0x003F}, + {0xA5BF,0xA5BF,0x003F}, + {0xA5C0,0xA5C0,0x003F}, /* A5C0 */ + {0xA5C1,0xA5E1,0x0391}, + {0xA5C2,0xA5E2,0x0392}, + {0xA5C3,0xA5E3,0x0393}, + {0xA5C4,0xA5E4,0x0394}, + {0xA5C5,0xA5E5,0x0395}, + {0xA5C6,0xA5E6,0x0396}, + {0xA5C7,0xA5E7,0x0397}, + {0xA5C8,0xA5E8,0x0398}, + {0xA5C9,0xA5E9,0x0399}, + {0xA5CA,0xA5EA,0x039A}, + {0xA5CB,0xA5EB,0x039B}, + {0xA5CC,0xA5EC,0x039C}, + {0xA5CD,0xA5ED,0x039D}, + {0xA5CE,0xA5EE,0x039E}, + {0xA5CF,0xA5EF,0x039F}, + {0xA5D0,0xA5F0,0x03A0}, /* A5D0 */ + {0xA5D1,0xA5F1,0x03A1}, + {0xA5D2,0xA5F2,0x03A3}, + {0xA5D3,0xA5F3,0x03A4}, + {0xA5D4,0xA5F4,0x03A5}, + {0xA5D5,0xA5F5,0x03A6}, + {0xA5D6,0xA5F6,0x03A7}, + {0xA5D7,0xA5F7,0x03A8}, + {0xA5D8,0xA5F8,0x03A9}, + {0xA5D9,0xA5D9,0x003F}, + {0xA5DA,0xA5DA,0x003F}, + {0xA5DB,0xA5DB,0x003F}, + {0xA5DC,0xA5DC,0x003F}, + {0xA5DD,0xA5DD,0x003F}, + {0xA5DE,0xA5DE,0x003F}, + {0xA5DF,0xA5DF,0x003F}, + {0xA5E0,0xA5E0,0x003F}, /* A5E0 */ + {0xA5C1,0xA5E1,0x03B1}, + {0xA5C2,0xA5E2,0x03B2}, + {0xA5C3,0xA5E3,0x03B3}, + {0xA5C4,0xA5E4,0x03B4}, + {0xA5C5,0xA5E5,0x03B5}, + {0xA5C6,0xA5E6,0x03B6}, + {0xA5C7,0xA5E7,0x03B7}, + {0xA5C8,0xA5E8,0x03B8}, + {0xA5C9,0xA5E9,0x03B9}, + {0xA5CA,0xA5EA,0x03BA}, + {0xA5CB,0xA5EB,0x03BB}, + {0xA5CC,0xA5EC,0x03BC}, + {0xA5CD,0xA5ED,0x03BD}, + {0xA5CE,0xA5EE,0x03BE}, + {0xA5CF,0xA5EF,0x03BF}, + {0xA5D0,0xA5F0,0x03C0}, /* A5F0 */ + {0xA5D1,0xA5F1,0x03C1}, + {0xA5D2,0xA5F2,0x03C3}, + {0xA5D3,0xA5F3,0x03C4}, + {0xA5D4,0xA5F4,0x03C5}, + {0xA5D5,0xA5F5,0x03C6}, + {0xA5D6,0xA5F6,0x03C7}, + {0xA5D7,0xA5F7,0x03C8}, + {0xA5D8,0xA5F8,0x03C9}, + {0xA5F9,0xA5F9,0x003F}, + {0xA5FA,0xA5FA,0x003F}, + {0xA5FB,0xA5FB,0x003F}, + {0xA5FC,0xA5FC,0x003F}, + {0xA5FD,0xA5FD,0x003F}, + {0xA5FE,0xA5FE,0x003F}, + {0xA5FF,0xA5FF,0x003F} +}; + + +static MY_UNICASE_INFO cA7[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA740,0xA740,0x003F}, /* A740 */ + {0xA741,0xA741,0xCB0B}, + {0xA742,0xA742,0xCB0C}, + {0xA743,0xA743,0xCB0D}, + {0xA744,0xA744,0xCB0E}, + {0xA745,0xA745,0xCB0F}, + {0xA746,0xA746,0xCB11}, + {0xA747,0xA747,0xCB12}, + {0xA748,0xA748,0xCB13}, + {0xA749,0xA749,0xCB15}, + {0xA74A,0xA74A,0xCB16}, + {0xA74B,0xA74B,0xCB17}, + {0xA74C,0xA74C,0xCB19}, + {0xA74D,0xA74D,0xCB1A}, + {0xA74E,0xA74E,0xCB1B}, + {0xA74F,0xA74F,0xCB1C}, + {0xA750,0xA750,0xCB1D}, /* A750 */ + {0xA751,0xA751,0xCB1E}, + {0xA752,0xA752,0xCB1F}, + {0xA753,0xA753,0xCB22}, + {0xA754,0xA754,0xCB23}, + {0xA755,0xA755,0xCB24}, + {0xA756,0xA756,0xCB25}, + {0xA757,0xA757,0xCB26}, + {0xA758,0xA758,0xCB27}, + {0xA759,0xA759,0xCB28}, + {0xA75A,0xA75A,0xCB29}, + {0xA75B,0xA75B,0x003F}, + {0xA75C,0xA75C,0x003F}, + {0xA75D,0xA75D,0x003F}, + {0xA75E,0xA75E,0x003F}, + {0xA75F,0xA75F,0x003F}, + {0xA760,0xA760,0x003F}, /* A760 */ + {0xA761,0xA761,0xCB2A}, + {0xA762,0xA762,0xCB2B}, + {0xA763,0xA763,0xCB2C}, + {0xA764,0xA764,0xCB2D}, + {0xA765,0xA765,0xCB2E}, + {0xA766,0xA766,0xCB2F}, + {0xA767,0xA767,0xCB30}, + {0xA768,0xA768,0xCB31}, + {0xA769,0xA769,0xCB32}, + {0xA76A,0xA76A,0xCB33}, + {0xA76B,0xA76B,0xCB34}, + {0xA76C,0xA76C,0xCB35}, + {0xA76D,0xA76D,0xCB36}, + {0xA76E,0xA76E,0xCB37}, + {0xA76F,0xA76F,0xCB38}, + {0xA770,0xA770,0xCB39}, /* A770 */ + {0xA771,0xA771,0xCB3A}, + {0xA772,0xA772,0xCB3B}, + {0xA773,0xA773,0xCB3C}, + {0xA774,0xA774,0xCB3D}, + {0xA775,0xA775,0xCB3E}, + {0xA776,0xA776,0xCB3F}, + {0xA777,0xA777,0xCB40}, + {0xA778,0xA778,0xCB42}, + {0xA779,0xA779,0xCB43}, + {0xA77A,0xA77A,0xCB44}, + {0xA77B,0xA77B,0x003F}, + {0xA77C,0xA77C,0x003F}, + {0xA77D,0xA77D,0x003F}, + {0xA77E,0xA77E,0x003F}, + {0xA77F,0xA77F,0x003F}, + {0xA780,0xA780,0x003F}, /* A780 */ + {0xA781,0xA781,0xCB45}, + {0xA782,0xA782,0xCB46}, + {0xA783,0xA783,0xCB47}, + {0xA784,0xA784,0xCB4A}, + {0xA785,0xA785,0xCB4B}, + {0xA786,0xA786,0xCB4D}, + {0xA787,0xA787,0xCB4E}, + {0xA788,0xA788,0xCB4F}, + {0xA789,0xA789,0xCB51}, + {0xA78A,0xA78A,0xCB52}, + {0xA78B,0xA78B,0xCB53}, + {0xA78C,0xA78C,0xCB54}, + {0xA78D,0xA78D,0xCB55}, + {0xA78E,0xA78E,0xCB56}, + {0xA78F,0xA78F,0xCB57}, + {0xA790,0xA790,0xCB5A}, /* A790 */ + {0xA791,0xA791,0xCB5B}, + {0xA792,0xA792,0xCB5C}, + {0xA793,0xA793,0xCB5E}, + {0xA794,0xA794,0xCB5F}, + {0xA795,0xA795,0xCB60}, + {0xA796,0xA796,0xCB61}, + {0xA797,0xA797,0xCB62}, + {0xA798,0xA798,0xCB63}, + {0xA799,0xA799,0xCB65}, + {0xA79A,0xA79A,0xCB66}, + {0xA79B,0xA79B,0xCB67}, + {0xA79C,0xA79C,0xCB68}, + {0xA79D,0xA79D,0xCB69}, + {0xA79E,0xA79E,0xCB6A}, + {0xA79F,0xA79F,0xCB6B}, + {0xA7A0,0xA7A0,0xCB6C}, /* A7A0 */ + {0xA7A1,0xA7A1,0x3395}, + {0xA7A2,0xA7A2,0x3396}, + {0xA7A3,0xA7A3,0x3397}, + {0xA7A4,0xA7A4,0x2113}, + {0xA7A5,0xA7A5,0x3398}, + {0xA7A6,0xA7A6,0x33C4}, + {0xA7A7,0xA7A7,0x33A3}, + {0xA7A8,0xA7A8,0x33A4}, + {0xA7A9,0xA7A9,0x33A5}, + {0xA7AA,0xA7AA,0x33A6}, + {0xA7AB,0xA7AB,0x3399}, + {0xA7AC,0xA7AC,0x339A}, + {0xA7AD,0xA7AD,0x339B}, + {0xA7AE,0xA7AE,0x339C}, + {0xA7AF,0xA7AF,0x339D}, + {0xA7B0,0xA7B0,0x339E}, /* A7B0 */ + {0xA7B1,0xA7B1,0x339F}, + {0xA7B2,0xA7B2,0x33A0}, + {0xA7B3,0xA7B3,0x33A1}, + {0xA7B4,0xA7B4,0x33A2}, + {0xA7B5,0xA7B5,0x33CA}, + {0xA7B6,0xA7B6,0x338D}, + {0xA7B7,0xA7B7,0x338E}, + {0xA7B8,0xA7B8,0x338F}, + {0xA7B9,0xA7B9,0x33CF}, + {0xA7BA,0xA7BA,0x3388}, + {0xA7BB,0xA7BB,0x3389}, + {0xA7BC,0xA7BC,0x33C8}, + {0xA7BD,0xA7BD,0x33A7}, + {0xA7BE,0xA7BE,0x33A8}, + {0xA7BF,0xA7BF,0x33B0}, + {0xA7C0,0xA7C0,0x33B1}, /* A7C0 */ + {0xA7C1,0xA7C1,0x33B2}, + {0xA7C2,0xA7C2,0x33B3}, + {0xA7C3,0xA7C3,0x33B4}, + {0xA7C4,0xA7C4,0x33B5}, + {0xA7C5,0xA7C5,0x33B6}, + {0xA7C6,0xA7C6,0x33B7}, + {0xA7C7,0xA7C7,0x33B8}, + {0xA7C8,0xA7C8,0x33B9}, + {0xA7C9,0xA7C9,0x3380}, + {0xA7CA,0xA7CA,0x3381}, + {0xA7CB,0xA7CB,0x3382}, + {0xA7CC,0xA7CC,0x3383}, + {0xA7CD,0xA7CD,0x3384}, + {0xA7CE,0xA7CE,0x33BA}, + {0xA7CF,0xA7CF,0x33BB}, + {0xA7D0,0xA7D0,0x33BC}, /* A7D0 */ + {0xA7D1,0xA7D1,0x33BD}, + {0xA7D2,0xA7D2,0x33BE}, + {0xA7D3,0xA7D3,0x33BF}, + {0xA7D4,0xA7D4,0x3390}, + {0xA7D5,0xA7D5,0x3391}, + {0xA7D6,0xA7D6,0x3392}, + {0xA7D7,0xA7D7,0x3393}, + {0xA7D8,0xA7D8,0x3394}, + {0xA7D9,0xA5F8,0x2126}, + {0xA7DA,0xA7DA,0x33C0}, + {0xA7DB,0xA7DB,0x33C1}, + {0xA7DC,0xA7DC,0x338A}, + {0xA7DD,0xA7DD,0x338B}, + {0xA7DE,0xA7DE,0x338C}, + {0xA7DF,0xA7DF,0x33D6}, + {0xA7E0,0xA7E0,0x33C5}, /* A7E0 */ + {0xA7E1,0xA7E1,0x33AD}, + {0xA7E2,0xA7E2,0x33AE}, + {0xA7E3,0xA7E3,0x33AF}, + {0xA7E4,0xA7E4,0x33DB}, + {0xA7E5,0xA7E5,0x33A9}, + {0xA7E6,0xA7E6,0x33AA}, + {0xA7E7,0xA7E7,0x33AB}, + {0xA7E8,0xA7E8,0x33AC}, + {0xA7E9,0xA7E9,0x33DD}, + {0xA7EA,0xA7EA,0x33D0}, + {0xA7EB,0xA7EB,0x33D3}, + {0xA7EC,0xA7EC,0x33C3}, + {0xA7ED,0xA7ED,0x33C9}, + {0xA7EE,0xA7EE,0x33DC}, + {0xA7EF,0xA7EF,0x33C6}, + {0xA7F0,0xA7F0,0x003F}, /* A7F0 */ + {0xA7F1,0xA7F1,0x003F}, + {0xA7F2,0xA7F2,0x003F}, + {0xA7F3,0xA7F3,0x003F}, + {0xA7F4,0xA7F4,0x003F}, + {0xA7F5,0xA7F5,0x003F}, + {0xA7F6,0xA7F6,0x003F}, + {0xA7F7,0xA7F7,0x003F}, + {0xA7F8,0xA7F8,0x003F}, + {0xA7F9,0xA7F9,0x003F}, + {0xA7FA,0xA7FA,0x003F}, + {0xA7FB,0xA7FB,0x003F}, + {0xA7FC,0xA7FC,0x003F}, + {0xA7FD,0xA7FD,0x003F}, + {0xA7FE,0xA7FE,0x003F}, + {0xA7FF,0xA7FF,0x003F} +}; + + +static MY_UNICASE_INFO cA8[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA840,0xA840,0x003F}, /* A840 */ + {0xA841,0xA841,0xCB6D}, + {0xA842,0xA842,0xCB6E}, + {0xA843,0xA843,0xCB6F}, + {0xA844,0xA844,0xCB70}, + {0xA845,0xA845,0xCB71}, + {0xA846,0xA846,0xCB72}, + {0xA847,0xA847,0xCB73}, + {0xA848,0xA848,0xCB74}, + {0xA849,0xA849,0xCB75}, + {0xA84A,0xA84A,0xCB76}, + {0xA84B,0xA84B,0xCB77}, + {0xA84C,0xA84C,0xCB7A}, + {0xA84D,0xA84D,0xCB7B}, + {0xA84E,0xA84E,0xCB7C}, + {0xA84F,0xA84F,0xCB7D}, + {0xA850,0xA850,0xCB7E}, /* A850 */ + {0xA851,0xA851,0xCB7F}, + {0xA852,0xA852,0xCB80}, + {0xA853,0xA853,0xCB81}, + {0xA854,0xA854,0xCB82}, + {0xA855,0xA855,0xCB83}, + {0xA856,0xA856,0xCB84}, + {0xA857,0xA857,0xCB85}, + {0xA858,0xA858,0xCB86}, + {0xA859,0xA859,0xCB87}, + {0xA85A,0xA85A,0xCB88}, + {0xA85B,0xA85B,0x003F}, + {0xA85C,0xA85C,0x003F}, + {0xA85D,0xA85D,0x003F}, + {0xA85E,0xA85E,0x003F}, + {0xA85F,0xA85F,0x003F}, + {0xA860,0xA860,0x003F}, /* A860 */ + {0xA861,0xA861,0xCB89}, + {0xA862,0xA862,0xCB8A}, + {0xA863,0xA863,0xCB8B}, + {0xA864,0xA864,0xCB8C}, + {0xA865,0xA865,0xCB8D}, + {0xA866,0xA866,0xCB8E}, + {0xA867,0xA867,0xCB8F}, + {0xA868,0xA868,0xCB90}, + {0xA869,0xA869,0xCB91}, + {0xA86A,0xA86A,0xCB92}, + {0xA86B,0xA86B,0xCB93}, + {0xA86C,0xA86C,0xCB94}, + {0xA86D,0xA86D,0xCB95}, + {0xA86E,0xA86E,0xCB96}, + {0xA86F,0xA86F,0xCB97}, + {0xA870,0xA870,0xCB98}, /* A870 */ + {0xA871,0xA871,0xCB99}, + {0xA872,0xA872,0xCB9A}, + {0xA873,0xA873,0xCB9B}, + {0xA874,0xA874,0xCB9D}, + {0xA875,0xA875,0xCB9E}, + {0xA876,0xA876,0xCB9F}, + {0xA877,0xA877,0xCBA0}, + {0xA878,0xA878,0xCBA1}, + {0xA879,0xA879,0xCBA2}, + {0xA87A,0xA87A,0xCBA3}, + {0xA87B,0xA87B,0x003F}, + {0xA87C,0xA87C,0x003F}, + {0xA87D,0xA87D,0x003F}, + {0xA87E,0xA87E,0x003F}, + {0xA87F,0xA87F,0x003F}, + {0xA880,0xA880,0x003F}, /* A880 */ + {0xA881,0xA881,0xCBA4}, + {0xA882,0xA882,0xCBA5}, + {0xA883,0xA883,0xCBA6}, + {0xA884,0xA884,0xCBA7}, + {0xA885,0xA885,0xCBA8}, + {0xA886,0xA886,0xCBA9}, + {0xA887,0xA887,0xCBAA}, + {0xA888,0xA888,0xCBAB}, + {0xA889,0xA889,0xCBAC}, + {0xA88A,0xA88A,0xCBAD}, + {0xA88B,0xA88B,0xCBAE}, + {0xA88C,0xA88C,0xCBAF}, + {0xA88D,0xA88D,0xCBB0}, + {0xA88E,0xA88E,0xCBB1}, + {0xA88F,0xA88F,0xCBB2}, + {0xA890,0xA890,0xCBB3}, /* A890 */ + {0xA891,0xA891,0xCBB4}, + {0xA892,0xA892,0xCBB5}, + {0xA893,0xA893,0xCBB6}, + {0xA894,0xA894,0xCBB7}, + {0xA895,0xA895,0xCBB9}, + {0xA896,0xA896,0xCBBA}, + {0xA897,0xA897,0xCBBB}, + {0xA898,0xA898,0xCBBC}, + {0xA899,0xA899,0xCBBD}, + {0xA89A,0xA89A,0xCBBE}, + {0xA89B,0xA89B,0xCBBF}, + {0xA89C,0xA89C,0xCBC0}, + {0xA89D,0xA89D,0xCBC1}, + {0xA89E,0xA89E,0xCBC2}, + {0xA89F,0xA89F,0xCBC3}, + {0xA8A0,0xA8A0,0xCBC4}, /* A8A0 */ + {0xA8A1,0xA9A1,0x00C6}, + {0xA8A2,0xA9A3,0x00D0}, + {0xA8A3,0xA8A3,0x00AA}, + {0xA8A4,0xA9A4,0x0126}, + {0xA8A5,0xA8A5,0x003F}, + {0xA8A6,0xA9A6,0x0132}, + {0xA8A7,0xA8A7,0x003F}, + {0xA8A8,0xA9A8,0x013F}, + {0xA8A9,0xA9A9,0x0141}, + {0xA8AA,0xA9AA,0x00D8}, + {0xA8AB,0xA9AB,0x0152}, + {0xA8AC,0xA8AC,0x00BA}, + {0xA8AD,0xA9AD,0x00DE}, + {0xA8AE,0xA9AE,0x0166}, + {0xA8AF,0xA9AF,0x014A}, + {0xA8B0,0xA8B0,0x003F}, /* A8B0 */ + {0xA8B1,0xA8B1,0x3260}, + {0xA8B2,0xA8B2,0x3261}, + {0xA8B3,0xA8B3,0x3262}, + {0xA8B4,0xA8B4,0x3263}, + {0xA8B5,0xA8B5,0x3264}, + {0xA8B6,0xA8B6,0x3265}, + {0xA8B7,0xA8B7,0x3266}, + {0xA8B8,0xA8B8,0x3267}, + {0xA8B9,0xA8B9,0x3268}, + {0xA8BA,0xA8BA,0x3269}, + {0xA8BB,0xA8BB,0x326A}, + {0xA8BC,0xA8BC,0x326B}, + {0xA8BD,0xA8BD,0x326C}, + {0xA8BE,0xA8BE,0x326D}, + {0xA8BF,0xA8BF,0x326E}, + {0xA8C0,0xA8C0,0x326F}, /* A8C0 */ + {0xA8C1,0xA8C1,0x3270}, + {0xA8C2,0xA8C2,0x3271}, + {0xA8C3,0xA8C3,0x3272}, + {0xA8C4,0xA8C4,0x3273}, + {0xA8C5,0xA8C5,0x3274}, + {0xA8C6,0xA8C6,0x3275}, + {0xA8C7,0xA8C7,0x3276}, + {0xA8C8,0xA8C8,0x3277}, + {0xA8C9,0xA8C9,0x3278}, + {0xA8CA,0xA8CA,0x3279}, + {0xA8CB,0xA8CB,0x327A}, + {0xA8CC,0xA8CC,0x327B}, + {0xA8CD,0xA8CD,0x24D0}, + {0xA8CE,0xA8CE,0x24D1}, + {0xA8CF,0xA8CF,0x24D2}, + {0xA8D0,0xA8D0,0x24D3}, /* A8D0 */ + {0xA8D1,0xA8D1,0x24D4}, + {0xA8D2,0xA8D2,0x24D5}, + {0xA8D3,0xA8D3,0x24D6}, + {0xA8D4,0xA8D4,0x24D7}, + {0xA8D5,0xA8D5,0x24D8}, + {0xA8D6,0xA8D6,0x24D9}, + {0xA8D7,0xA8D7,0x24DA}, + {0xA8D8,0xA8D8,0x24DB}, + {0xA8D9,0xA8D9,0x24DC}, + {0xA8DA,0xA8DA,0x24DD}, + {0xA8DB,0xA8DB,0x24DE}, + {0xA8DC,0xA8DC,0x24DF}, + {0xA8DD,0xA8DD,0x24E0}, + {0xA8DE,0xA8DE,0x24E1}, + {0xA8DF,0xA8DF,0x24E2}, + {0xA8E0,0xA8E0,0x24E3}, /* A8E0 */ + {0xA8E1,0xA8E1,0x24E4}, + {0xA8E2,0xA8E2,0x24E5}, + {0xA8E3,0xA8E3,0x24E6}, + {0xA8E4,0xA8E4,0x24E7}, + {0xA8E5,0xA8E5,0x24E8}, + {0xA8E6,0xA8E6,0x24E9}, + {0xA8E7,0xA8E7,0x2460}, + {0xA8E8,0xA8E8,0x2461}, + {0xA8E9,0xA8E9,0x2462}, + {0xA8EA,0xA8EA,0x2463}, + {0xA8EB,0xA8EB,0x2464}, + {0xA8EC,0xA8EC,0x2465}, + {0xA8ED,0xA8ED,0x2466}, + {0xA8EE,0xA8EE,0x2467}, + {0xA8EF,0xA8EF,0x2468}, + {0xA8F0,0xA8F0,0x2469}, /* A8F0 */ + {0xA8F1,0xA8F1,0x246A}, + {0xA8F2,0xA8F2,0x246B}, + {0xA8F3,0xA8F3,0x246C}, + {0xA8F4,0xA8F4,0x246D}, + {0xA8F5,0xA8F5,0x246E}, + {0xA8F6,0xA8F6,0x00BD}, + {0xA8F7,0xA8F7,0x2153}, + {0xA8F8,0xA8F8,0x2154}, + {0xA8F9,0xA8F9,0x00BC}, + {0xA8FA,0xA8FA,0x00BE}, + {0xA8FB,0xA8FB,0x215B}, + {0xA8FC,0xA8FC,0x215C}, + {0xA8FD,0xA8FD,0x215D}, + {0xA8FE,0xA8FE,0x215E}, + {0xA8FF,0xA8FF,0x003F} +}; + + +static MY_UNICASE_INFO cA9[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA940,0xA940,0x003F}, /* A940 */ + {0xA941,0xA941,0xCBC5}, + {0xA942,0xA942,0xCBC6}, + {0xA943,0xA943,0xCBC7}, + {0xA944,0xA944,0xCBC8}, + {0xA945,0xA945,0xCBC9}, + {0xA946,0xA946,0xCBCA}, + {0xA947,0xA947,0xCBCB}, + {0xA948,0xA948,0xCBCC}, + {0xA949,0xA949,0xCBCD}, + {0xA94A,0xA94A,0xCBCE}, + {0xA94B,0xA94B,0xCBCF}, + {0xA94C,0xA94C,0xCBD0}, + {0xA94D,0xA94D,0xCBD1}, + {0xA94E,0xA94E,0xCBD2}, + {0xA94F,0xA94F,0xCBD3}, + {0xA950,0xA950,0xCBD5}, /* A950 */ + {0xA951,0xA951,0xCBD6}, + {0xA952,0xA952,0xCBD7}, + {0xA953,0xA953,0xCBD8}, + {0xA954,0xA954,0xCBD9}, + {0xA955,0xA955,0xCBDA}, + {0xA956,0xA956,0xCBDB}, + {0xA957,0xA957,0xCBDC}, + {0xA958,0xA958,0xCBDD}, + {0xA959,0xA959,0xCBDE}, + {0xA95A,0xA95A,0xCBDF}, + {0xA95B,0xA95B,0x003F}, + {0xA95C,0xA95C,0x003F}, + {0xA95D,0xA95D,0x003F}, + {0xA95E,0xA95E,0x003F}, + {0xA95F,0xA95F,0x003F}, + {0xA960,0xA960,0x003F}, /* A960 */ + {0xA961,0xA961,0xCBE0}, + {0xA962,0xA962,0xCBE1}, + {0xA963,0xA963,0xCBE2}, + {0xA964,0xA964,0xCBE3}, + {0xA965,0xA965,0xCBE5}, + {0xA966,0xA966,0xCBE6}, + {0xA967,0xA967,0xCBE8}, + {0xA968,0xA968,0xCBEA}, + {0xA969,0xA969,0xCBEB}, + {0xA96A,0xA96A,0xCBEC}, + {0xA96B,0xA96B,0xCBED}, + {0xA96C,0xA96C,0xCBEE}, + {0xA96D,0xA96D,0xCBEF}, + {0xA96E,0xA96E,0xCBF0}, + {0xA96F,0xA96F,0xCBF1}, + {0xA970,0xA970,0xCBF2}, /* A970 */ + {0xA971,0xA971,0xCBF3}, + {0xA972,0xA972,0xCBF4}, + {0xA973,0xA973,0xCBF5}, + {0xA974,0xA974,0xCBF6}, + {0xA975,0xA975,0xCBF7}, + {0xA976,0xA976,0xCBF8}, + {0xA977,0xA977,0xCBF9}, + {0xA978,0xA978,0xCBFA}, + {0xA979,0xA979,0xCBFB}, + {0xA97A,0xA97A,0xCBFC}, + {0xA97B,0xA97B,0x003F}, + {0xA97C,0xA97C,0x003F}, + {0xA97D,0xA97D,0x003F}, + {0xA97E,0xA97E,0x003F}, + {0xA97F,0xA97F,0x003F}, + {0xA980,0xA980,0x003F}, /* A980 */ + {0xA981,0xA981,0xCBFD}, + {0xA982,0xA982,0xCBFE}, + {0xA983,0xA983,0xCBFF}, + {0xA984,0xA984,0xCC00}, + {0xA985,0xA985,0xCC01}, + {0xA986,0xA986,0xCC02}, + {0xA987,0xA987,0xCC03}, + {0xA988,0xA988,0xCC04}, + {0xA989,0xA989,0xCC05}, + {0xA98A,0xA98A,0xCC06}, + {0xA98B,0xA98B,0xCC07}, + {0xA98C,0xA98C,0xCC08}, + {0xA98D,0xA98D,0xCC09}, + {0xA98E,0xA98E,0xCC0A}, + {0xA98F,0xA98F,0xCC0B}, + {0xA990,0xA990,0xCC0E}, /* A990 */ + {0xA991,0xA991,0xCC0F}, + {0xA992,0xA992,0xCC11}, + {0xA993,0xA993,0xCC12}, + {0xA994,0xA994,0xCC13}, + {0xA995,0xA995,0xCC15}, + {0xA996,0xA996,0xCC16}, + {0xA997,0xA997,0xCC17}, + {0xA998,0xA998,0xCC18}, + {0xA999,0xA999,0xCC19}, + {0xA99A,0xA99A,0xCC1A}, + {0xA99B,0xA99B,0xCC1B}, + {0xA99C,0xA99C,0xCC1E}, + {0xA99D,0xA99D,0xCC1F}, + {0xA99E,0xA99E,0xCC20}, + {0xA99F,0xA99F,0xCC23}, + {0xA9A0,0xA9A0,0xCC24}, /* A9A0 */ + {0xA8A1,0xA9A1,0x00E6}, + {0xA9A2,0xA9A2,0x0111}, + {0xA8A2,0xA9A3,0x00F0}, + {0xA8A4,0xA9A4,0x0127}, + { 0x49,0xA9A5,0x0131}, /* Turkish i */ + {0xA8A6,0xA9A6,0x0133}, + {0xA9A7,0xA9A7,0x0138}, + {0xA8A8,0xA9A8,0x0140}, + {0xA8A9,0xA9A9,0x0142}, + {0xA8AA,0xA9AA,0x00F8}, + {0xA8AB,0xA9AB,0x0153}, + {0xA9AC,0xA9AC,0x00DF}, + {0xA8AD,0xA9AD,0x00FE}, + {0xA8AE,0xA9AE,0x0167}, + {0xA8AF,0xA9AF,0x014B}, + {0xA9B0,0xA9B0,0x0149}, /* A9B0 */ + {0xA9B1,0xA9B1,0x3200}, + {0xA9B2,0xA9B2,0x3201}, + {0xA9B3,0xA9B3,0x3202}, + {0xA9B4,0xA9B4,0x3203}, + {0xA9B5,0xA9B5,0x3204}, + {0xA9B6,0xA9B6,0x3205}, + {0xA9B7,0xA9B7,0x3206}, + {0xA9B8,0xA9B8,0x3207}, + {0xA9B9,0xA9B9,0x3208}, + {0xA9BA,0xA9BA,0x3209}, + {0xA9BB,0xA9BB,0x320A}, + {0xA9BC,0xA9BC,0x320B}, + {0xA9BD,0xA9BD,0x320C}, + {0xA9BE,0xA9BE,0x320D}, + {0xA9BF,0xA9BF,0x320E}, + {0xA9C0,0xA9C0,0x320F}, /* A9C0 */ + {0xA9C1,0xA9C1,0x3210}, + {0xA9C2,0xA9C2,0x3211}, + {0xA9C3,0xA9C3,0x3212}, + {0xA9C4,0xA9C4,0x3213}, + {0xA9C5,0xA9C5,0x3214}, + {0xA9C6,0xA9C6,0x3215}, + {0xA9C7,0xA9C7,0x3216}, + {0xA9C8,0xA9C8,0x3217}, + {0xA9C9,0xA9C9,0x3218}, + {0xA9CA,0xA9CA,0x3219}, + {0xA9CB,0xA9CB,0x321A}, + {0xA9CC,0xA9CC,0x321B}, + {0xA9CD,0xA9CD,0x249C}, + {0xA9CE,0xA9CE,0x249D}, + {0xA9CF,0xA9CF,0x249E}, + {0xA9D0,0xA9D0,0x249F}, /* A9D0 */ + {0xA9D1,0xA9D1,0x24A0}, + {0xA9D2,0xA9D2,0x24A1}, + {0xA9D3,0xA9D3,0x24A2}, + {0xA9D4,0xA9D4,0x24A3}, + {0xA9D5,0xA9D5,0x24A4}, + {0xA9D6,0xA9D6,0x24A5}, + {0xA9D7,0xA9D7,0x24A6}, + {0xA9D8,0xA9D8,0x24A7}, + {0xA9D9,0xA9D9,0x24A8}, + {0xA9DA,0xA9DA,0x24A9}, + {0xA9DB,0xA9DB,0x24AA}, + {0xA9DC,0xA9DC,0x24AB}, + {0xA9DD,0xA9DD,0x24AC}, + {0xA9DE,0xA9DE,0x24AD}, + {0xA9DF,0xA9DF,0x24AE}, + {0xA9E0,0xA9E0,0x24AF}, /* A9E0 */ + {0xA9E1,0xA9E1,0x24B0}, + {0xA9E2,0xA9E2,0x24B1}, + {0xA9E3,0xA9E3,0x24B2}, + {0xA9E4,0xA9E4,0x24B3}, + {0xA9E5,0xA9E5,0x24B4}, + {0xA9E6,0xA9E6,0x24B5}, + {0xA9E7,0xA9E7,0x2474}, + {0xA9E8,0xA9E8,0x2475}, + {0xA9E9,0xA9E9,0x2476}, + {0xA9EA,0xA9EA,0x2477}, + {0xA9EB,0xA9EB,0x2478}, + {0xA9EC,0xA9EC,0x2479}, + {0xA9ED,0xA9ED,0x247A}, + {0xA9EE,0xA9EE,0x247B}, + {0xA9EF,0xA9EF,0x247C}, + {0xA9F0,0xA9F0,0x247D}, /* A9F0 */ + {0xA9F1,0xA9F1,0x247E}, + {0xA9F2,0xA9F2,0x247F}, + {0xA9F3,0xA9F3,0x2480}, + {0xA9F4,0xA9F4,0x2481}, + {0xA9F5,0xA9F5,0x2482}, + {0xA9F6,0xA9F6,0x00B9}, + {0xA9F7,0xA9F7,0x00B2}, + {0xA9F8,0xA9F8,0x00B3}, + {0xA9F9,0xA9F9,0x2074}, + {0xA9FA,0xA9FA,0x207F}, + {0xA9FB,0xA9FB,0x2081}, + {0xA9FC,0xA9FC,0x2082}, + {0xA9FD,0xA9FD,0x2083}, + {0xA9FE,0xA9FE,0x2084}, + {0xA9FF,0xA9FF,0x003F} +}; + + +static MY_UNICASE_INFO cAC[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xAC40,0xAC40,0x003F}, /* AC40 */ + {0xAC41,0xAC41,0xCCFE}, + {0xAC42,0xAC42,0xCCFF}, + {0xAC43,0xAC43,0xCD00}, + {0xAC44,0xAC44,0xCD02}, + {0xAC45,0xAC45,0xCD03}, + {0xAC46,0xAC46,0xCD04}, + {0xAC47,0xAC47,0xCD05}, + {0xAC48,0xAC48,0xCD06}, + {0xAC49,0xAC49,0xCD07}, + {0xAC4A,0xAC4A,0xCD0A}, + {0xAC4B,0xAC4B,0xCD0B}, + {0xAC4C,0xAC4C,0xCD0D}, + {0xAC4D,0xAC4D,0xCD0E}, + {0xAC4E,0xAC4E,0xCD0F}, + {0xAC4F,0xAC4F,0xCD11}, + {0xAC50,0xAC50,0xCD12}, /* AC50 */ + {0xAC51,0xAC51,0xCD13}, + {0xAC52,0xAC52,0xCD14}, + {0xAC53,0xAC53,0xCD15}, + {0xAC54,0xAC54,0xCD16}, + {0xAC55,0xAC55,0xCD17}, + {0xAC56,0xAC56,0xCD1A}, + {0xAC57,0xAC57,0xCD1C}, + {0xAC58,0xAC58,0xCD1E}, + {0xAC59,0xAC59,0xCD1F}, + {0xAC5A,0xAC5A,0xCD20}, + {0xAC5B,0xAC5B,0x003F}, + {0xAC5C,0xAC5C,0x003F}, + {0xAC5D,0xAC5D,0x003F}, + {0xAC5E,0xAC5E,0x003F}, + {0xAC5F,0xAC5F,0x003F}, + {0xAC60,0xAC60,0x003F}, /* AC60 */ + {0xAC61,0xAC61,0xCD21}, + {0xAC62,0xAC62,0xCD22}, + {0xAC63,0xAC63,0xCD23}, + {0xAC64,0xAC64,0xCD25}, + {0xAC65,0xAC65,0xCD26}, + {0xAC66,0xAC66,0xCD27}, + {0xAC67,0xAC67,0xCD29}, + {0xAC68,0xAC68,0xCD2A}, + {0xAC69,0xAC69,0xCD2B}, + {0xAC6A,0xAC6A,0xCD2D}, + {0xAC6B,0xAC6B,0xCD2E}, + {0xAC6C,0xAC6C,0xCD2F}, + {0xAC6D,0xAC6D,0xCD30}, + {0xAC6E,0xAC6E,0xCD31}, + {0xAC6F,0xAC6F,0xCD32}, + {0xAC70,0xAC70,0xCD33}, /* AC70 */ + {0xAC71,0xAC71,0xCD34}, + {0xAC72,0xAC72,0xCD35}, + {0xAC73,0xAC73,0xCD36}, + {0xAC74,0xAC74,0xCD37}, + {0xAC75,0xAC75,0xCD38}, + {0xAC76,0xAC76,0xCD3A}, + {0xAC77,0xAC77,0xCD3B}, + {0xAC78,0xAC78,0xCD3C}, + {0xAC79,0xAC79,0xCD3D}, + {0xAC7A,0xAC7A,0xCD3E}, + {0xAC7B,0xAC7B,0x003F}, + {0xAC7C,0xAC7C,0x003F}, + {0xAC7D,0xAC7D,0x003F}, + {0xAC7E,0xAC7E,0x003F}, + {0xAC7F,0xAC7F,0x003F}, + {0xAC80,0xAC80,0x003F}, /* AC80 */ + {0xAC81,0xAC81,0xCD3F}, + {0xAC82,0xAC82,0xCD40}, + {0xAC83,0xAC83,0xCD41}, + {0xAC84,0xAC84,0xCD42}, + {0xAC85,0xAC85,0xCD43}, + {0xAC86,0xAC86,0xCD44}, + {0xAC87,0xAC87,0xCD45}, + {0xAC88,0xAC88,0xCD46}, + {0xAC89,0xAC89,0xCD47}, + {0xAC8A,0xAC8A,0xCD48}, + {0xAC8B,0xAC8B,0xCD49}, + {0xAC8C,0xAC8C,0xCD4A}, + {0xAC8D,0xAC8D,0xCD4B}, + {0xAC8E,0xAC8E,0xCD4C}, + {0xAC8F,0xAC8F,0xCD4D}, + {0xAC90,0xAC90,0xCD4E}, /* AC90 */ + {0xAC91,0xAC91,0xCD4F}, + {0xAC92,0xAC92,0xCD50}, + {0xAC93,0xAC93,0xCD51}, + {0xAC94,0xAC94,0xCD52}, + {0xAC95,0xAC95,0xCD53}, + {0xAC96,0xAC96,0xCD54}, + {0xAC97,0xAC97,0xCD55}, + {0xAC98,0xAC98,0xCD56}, + {0xAC99,0xAC99,0xCD57}, + {0xAC9A,0xAC9A,0xCD58}, + {0xAC9B,0xAC9B,0xCD59}, + {0xAC9C,0xAC9C,0xCD5A}, + {0xAC9D,0xAC9D,0xCD5B}, + {0xAC9E,0xAC9E,0xCD5D}, + {0xAC9F,0xAC9F,0xCD5E}, + {0xACA0,0xACA0,0xCD5F}, /* ACA0 */ + {0xACA1,0xACD1,0x0410}, + {0xACA2,0xACD2,0x0411}, + {0xACA3,0xACD3,0x0412}, + {0xACA4,0xACD4,0x0413}, + {0xACA5,0xACD5,0x0414}, + {0xACA6,0xACD6,0x0415}, + {0xACA7,0xACD7,0x0401}, + {0xACA8,0xACD8,0x0416}, + {0xACA9,0xACD9,0x0417}, + {0xACAA,0xACDA,0x0418}, + {0xACAB,0xACDB,0x0419}, + {0xACAC,0xACDC,0x041A}, + {0xACAD,0xACDD,0x041B}, + {0xACAE,0xACDE,0x041C}, + {0xACAF,0xACDF,0x041D}, + {0xACB0,0xACE0,0x041E}, /* ACB0 */ + {0xACB1,0xACE1,0x041F}, + {0xACB2,0xACE2,0x0420}, + {0xACB3,0xACE3,0x0421}, + {0xACB4,0xACE4,0x0422}, + {0xACB5,0xACE5,0x0423}, + {0xACB6,0xACE6,0x0424}, + {0xACB7,0xACE7,0x0425}, + {0xACB8,0xACE8,0x0426}, + {0xACB9,0xACE9,0x0427}, + {0xACBA,0xACEA,0x0428}, + {0xACBB,0xACEB,0x0429}, + {0xACBC,0xACEC,0x042A}, + {0xACBD,0xACED,0x042B}, + {0xACBE,0xACEE,0x042C}, + {0xACBF,0xACEF,0x042D}, + {0xACC0,0xACF0,0x042E}, /* ACC0 */ + {0xACC1,0xACF1,0x042F}, + {0xACC2,0xACC2,0x003F}, + {0xACC3,0xACC3,0x003F}, + {0xACC4,0xACC4,0x003F}, + {0xACC5,0xACC5,0x003F}, + {0xACC6,0xACC6,0x003F}, + {0xACC7,0xACC7,0x003F}, + {0xACC8,0xACC8,0x003F}, + {0xACC9,0xACC9,0x003F}, + {0xACCA,0xACCA,0x003F}, + {0xACCB,0xACCB,0x003F}, + {0xACCC,0xACCC,0x003F}, + {0xACCD,0xACCD,0x003F}, + {0xACCE,0xACCE,0x003F}, + {0xACCF,0xACCF,0x003F}, + {0xACD0,0xACD0,0x003F}, /* ACD0 */ + {0xACA1,0xACD1,0x0430}, + {0xACA2,0xACD2,0x0431}, + {0xACA3,0xACD3,0x0432}, + {0xACA4,0xACD4,0x0433}, + {0xACA5,0xACD5,0x0434}, + {0xACA6,0xACD6,0x0435}, + {0xACA7,0xACD7,0x0451}, + {0xACA8,0xACD8,0x0436}, + {0xACA9,0xACD9,0x0437}, + {0xACAA,0xACDA,0x0438}, + {0xACAB,0xACDB,0x0439}, + {0xACAC,0xACDC,0x043A}, + {0xACAD,0xACDD,0x043B}, + {0xACAE,0xACDE,0x043C}, + {0xACAF,0xACDF,0x043D}, + {0xACB0,0xACE0,0x043E}, /* ACE0 */ + {0xACB1,0xACE1,0x043F}, + {0xACB2,0xACE2,0x0440}, + {0xACB3,0xACE3,0x0441}, + {0xACB4,0xACE4,0x0442}, + {0xACB5,0xACE5,0x0443}, + {0xACB6,0xACE6,0x0444}, + {0xACB7,0xACE7,0x0445}, + {0xACB8,0xACE8,0x0446}, + {0xACB9,0xACE9,0x0447}, + {0xACBA,0xACEA,0x0448}, + {0xACBB,0xACEB,0x0449}, + {0xACBC,0xACEC,0x044A}, + {0xACBD,0xACED,0x044B}, + {0xACBE,0xACEE,0x044C}, + {0xACBF,0xACEF,0x044D}, + {0xACC0,0xACF0,0x044E}, /* ACF0 */ + {0xACC1,0xACF1,0x044F}, + {0xACF2,0xACF2,0x003F}, + {0xACF3,0xACF3,0x003F}, + {0xACF4,0xACF4,0x003F}, + {0xACF5,0xACF5,0x003F}, + {0xACF6,0xACF6,0x003F}, + {0xACF7,0xACF7,0x003F}, + {0xACF8,0xACF8,0x003F}, + {0xACF9,0xACF9,0x003F}, + {0xACFA,0xACFA,0x003F}, + {0xACFB,0xACFB,0x003F}, + {0xACFC,0xACFC,0x003F}, + {0xACFD,0xACFD,0x003F}, + {0xACFE,0xACFE,0x003F}, + {0xACFF,0xACFF,0x003F} +}; + + +static MY_UNICASE_INFO *my_caseinfo_euckr[256]= +{ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 1 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 2 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 3 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 4 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 5 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 6 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 7 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 8 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 9 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, cA3, NULL, cA5, NULL, cA7, /* A */ + cA8, cA9, NULL, NULL, cAC, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* B */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* C */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* D */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* E */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* F */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +}; + + /* page 0 0x8141-0xC8FE */ static uint16 tab_ksc5601_uni0[]={ 0xAC02,0xAC03,0xAC05,0xAC06,0xAC0B,0xAC0C,0xAC0D,0xAC0E, @@ -8720,8 +9987,8 @@ static MY_CHARSET_HANDLER my_charset_handler= my_mb_ctype_mb, my_caseup_str_mb, my_casedn_str_mb, - my_caseup_mb, - my_casedn_mb, + my_caseup_mb_varlen, /* UPPER() can reduce length: Turkish DOTLESS i -> I */ + my_casedn_mb, /* LOWER() does not change length, use simple version*/ my_snprintf_8bit, my_long10_to_str_8bit, my_longlong10_to_str_8bit, @@ -8753,7 +10020,7 @@ CHARSET_INFO my_charset_euckr_korean_ci= NULL, /* sort_order_big*/ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ + my_caseinfo_euckr, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -8786,7 +10053,7 @@ CHARSET_INFO my_charset_euckr_bin= NULL, /* sort_order_big*/ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ + my_caseinfo_euckr, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ diff --git a/strings/ctype-eucjpms.c b/strings/ctype-eucjpms.c index b8b04dfca6b..77e6a0f4e0f 100644 --- a/strings/ctype-eucjpms.c +++ b/strings/ctype-eucjpms.c @@ -201,6 +201,1535 @@ static uint mbcharlen_eucjpms(CHARSET_INFO *cs __attribute__((unused)),uint c) } + +/* Case info pages for JIS-X-0208 range */ + +static MY_UNICASE_INFO cA2[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA2A0,0xA2A0,0x003F}, /* A2A0 */ + {0xA2A1,0xA2A1,0x25C6}, + {0xA2A2,0xA2A2,0x25A1}, + {0xA2A3,0xA2A3,0x25A0}, + {0xA2A4,0xA2A4,0x25B3}, + {0xA2A5,0xA2A5,0x25B2}, + {0xA2A6,0xA2A6,0x25BD}, + {0xA2A7,0xA2A7,0x25BC}, + {0xA2A8,0xA2A8,0x203B}, + {0xA2A9,0xA2A9,0x3012}, + {0xA2AA,0xA2AA,0x2192}, + {0xA2AB,0xA2AB,0x2190}, + {0xA2AC,0xA2AC,0x2191}, + {0xA2AD,0xA2AD,0x2193}, + {0xA2AE,0xA2AE,0x3013}, + {0xA2AF,0xA2AF,0x003F}, + {0xA2B0,0xA2B0,0x003F}, /* A2B0 */ + {0xA2B1,0xA2B1,0x003F}, + {0xA2B2,0xA2B2,0x003F}, + {0xA2B3,0xA2B3,0x003F}, + {0xA2B4,0xA2B4,0x003F}, + {0xA2B5,0xA2B5,0x003F}, + {0xA2B6,0xA2B6,0x003F}, + {0xA2B7,0xA2B7,0x003F}, + {0xA2B8,0xA2B8,0x003F}, + {0xA2B9,0xA2B9,0x003F}, + {0xA2BA,0xA2BA,0x2208}, + {0xA2BB,0xA2BB,0x220B}, + {0xA2BC,0xA2BC,0x2286}, + {0xA2BD,0xA2BD,0x2287}, + {0xA2BE,0xA2BE,0x2282}, + {0xA2BF,0xA2BF,0x2283}, + {0xA2C0,0xA2C0,0x222A}, /* A2C0 */ + {0xA2C1,0xA2C1,0x2229}, + {0xA2C2,0xA2C2,0x003F}, + {0xA2C3,0xA2C3,0x003F}, + {0xA2C4,0xA2C4,0x003F}, + {0xA2C5,0xA2C5,0x003F}, + {0xA2C6,0xA2C6,0x003F}, + {0xA2C7,0xA2C7,0x003F}, + {0xA2C8,0xA2C8,0x003F}, + {0xA2C9,0xA2C9,0x003F}, + {0xA2CA,0xA2CA,0x2227}, + {0xA2CB,0xA2CB,0x2228}, + {0xA2CC,0xA2CC,0xFFE2}, + {0xA2CD,0xA2CD,0x21D2}, + {0xA2CE,0xA2CE,0x21D4}, + {0xA2CF,0xA2CF,0x2200}, + {0xA2D0,0xA2D0,0x2203}, /* A2D0 */ + {0xA2D1,0xA2D1,0x003F}, + {0xA2D2,0xA2D2,0x003F}, + {0xA2D3,0xA2D3,0x003F}, + {0xA2D4,0xA2D4,0x003F}, + {0xA2D5,0xA2D5,0x003F}, + {0xA2D6,0xA2D6,0x003F}, + {0xA2D7,0xA2D7,0x003F}, + {0xA2D8,0xA2D8,0x003F}, + {0xA2D9,0xA2D9,0x003F}, + {0xA2DA,0xA2DA,0x003F}, + {0xA2DB,0xA2DB,0x003F}, + {0xA2DC,0xA2DC,0x2220}, + {0xA2DD,0xA2DD,0x22A5}, + {0xA2DE,0xA2DE,0x2312}, + {0xA2DF,0xA2DF,0x2202}, + {0xA2E0,0xA2E0,0x2207}, /* A2E0 */ + {0xA2E1,0xA2E1,0x2261}, + {0xA2E2,0xA2E2,0x2252}, + {0xA2E3,0xA2E3,0x226A}, + {0xA2E4,0xA2E4,0x226B}, + {0xA2E5,0xA2E5,0x221A}, + {0xA2E6,0xA2E6,0x223D}, + {0xA2E7,0xA2E7,0x221D}, + {0xA2E8,0xA2E8,0x2235}, + {0xA2E9,0xA2E9,0x222B}, + {0xA2EA,0xA2EA,0x222C}, + {0xA2EB,0xA2EB,0x003F}, + {0xA2EC,0xA2EC,0x003F}, + {0xA2ED,0xA2ED,0x003F}, + {0xA2EE,0xA2EE,0x003F}, + {0xA2EF,0xA2EF,0x003F}, + {0xA2F0,0xA2F0,0x003F}, /* A2F0 */ + {0xA2F1,0xA2F1,0x003F}, + {0xA2F2,0x8FABA9,0x212B}, + {0xA2F3,0xA2F3,0x2030}, + {0xA2F4,0xA2F4,0x266F}, + {0xA2F5,0xA2F5,0x266D}, + {0xA2F6,0xA2F6,0x266A}, + {0xA2F7,0xA2F7,0x2020}, + {0xA2F8,0xA2F8,0x2021}, + {0xA2F9,0xA2F9,0x00B6}, + {0xA2FA,0xA2FA,0x003F}, + {0xA2FB,0xA2FB,0x003F}, + {0xA2FC,0xA2FC,0x003F}, + {0xA2FD,0xA2FD,0x003F}, + {0xA2FE,0xA2FE,0x25EF}, + {0xA2FF,0xA2FF,0x003F}, +}; + + +static MY_UNICASE_INFO cA3[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA3A0,0xA3A0,0x003F}, /* A3A0 */ + {0xA3A1,0xA3A1,0x003F}, + {0xA3A2,0xA3A2,0x003F}, + {0xA3A3,0xA3A3,0x003F}, + {0xA3A4,0xA3A4,0x003F}, + {0xA3A5,0xA3A5,0x003F}, + {0xA3A6,0xA3A6,0x003F}, + {0xA3A7,0xA3A7,0x003F}, + {0xA3A8,0xA3A8,0x003F}, + {0xA3A9,0xA3A9,0x003F}, + {0xA3AA,0xA3AA,0x003F}, + {0xA3AB,0xA3AB,0x003F}, + {0xA3AC,0xA3AC,0x003F}, + {0xA3AD,0xA3AD,0x003F}, + {0xA3AE,0xA3AE,0x003F}, + {0xA3AF,0xA3AF,0x003F}, + {0xA3B0,0xA3B0,0xFF10}, /* A3B0 */ + {0xA3B1,0xA3B1,0xFF11}, + {0xA3B2,0xA3B2,0xFF12}, + {0xA3B3,0xA3B3,0xFF13}, + {0xA3B4,0xA3B4,0xFF14}, + {0xA3B5,0xA3B5,0xFF15}, + {0xA3B6,0xA3B6,0xFF16}, + {0xA3B7,0xA3B7,0xFF17}, + {0xA3B8,0xA3B8,0xFF18}, + {0xA3B9,0xA3B9,0xFF19}, + {0xA3BA,0xA3BA,0x003F}, + {0xA3BB,0xA3BB,0x003F}, + {0xA3BC,0xA3BC,0x003F}, + {0xA3BD,0xA3BD,0x003F}, + {0xA3BE,0xA3BE,0x003F}, + {0xA3BF,0xA3BF,0x003F}, + {0xA3C0,0xA3C0,0x003F}, /* A3C0 */ + {0xA3C1,0xA3E1,0xFF21}, + {0xA3C2,0xA3E2,0xFF22}, + {0xA3C3,0xA3E3,0xFF23}, + {0xA3C4,0xA3E4,0xFF24}, + {0xA3C5,0xA3E5,0xFF25}, + {0xA3C6,0xA3E6,0xFF26}, + {0xA3C7,0xA3E7,0xFF27}, + {0xA3C8,0xA3E8,0xFF28}, + {0xA3C9,0xA3E9,0xFF29}, + {0xA3CA,0xA3EA,0xFF2A}, + {0xA3CB,0xA3EB,0xFF2B}, + {0xA3CC,0xA3EC,0xFF2C}, + {0xA3CD,0xA3ED,0xFF2D}, + {0xA3CE,0xA3EE,0xFF2E}, + {0xA3CF,0xA3EF,0xFF2F}, + {0xA3D0,0xA3F0,0xFF30}, /* A3D0 */ + {0xA3D1,0xA3F1,0xFF31}, + {0xA3D2,0xA3F2,0xFF32}, + {0xA3D3,0xA3F3,0xFF33}, + {0xA3D4,0xA3F4,0xFF34}, + {0xA3D5,0xA3F5,0xFF35}, + {0xA3D6,0xA3F6,0xFF36}, + {0xA3D7,0xA3F7,0xFF37}, + {0xA3D8,0xA3F8,0xFF38}, + {0xA3D9,0xA3F9,0xFF39}, + {0xA3DA,0xA3FA,0xFF3A}, + {0xA3DB,0xA3DB,0x003F}, + {0xA3DC,0xA3DC,0x003F}, + {0xA3DD,0xA3DD,0x003F}, + {0xA3DE,0xA3DE,0x003F}, + {0xA3DF,0xA3DF,0x003F}, + {0xA3E0,0xA3E0,0x003F}, /* A3E0 */ + {0xA3C1,0xA3E1,0xFF41}, + {0xA3C2,0xA3E2,0xFF42}, + {0xA3C3,0xA3E3,0xFF43}, + {0xA3C4,0xA3E4,0xFF44}, + {0xA3C5,0xA3E5,0xFF45}, + {0xA3C6,0xA3E6,0xFF46}, + {0xA3C7,0xA3E7,0xFF47}, + {0xA3C8,0xA3E8,0xFF48}, + {0xA3C9,0xA3E9,0xFF49}, + {0xA3CA,0xA3EA,0xFF4A}, + {0xA3CB,0xA3EB,0xFF4B}, + {0xA3CC,0xA3EC,0xFF4C}, + {0xA3CD,0xA3ED,0xFF4D}, + {0xA3CE,0xA3EE,0xFF4E}, + {0xA3CF,0xA3EF,0xFF4F}, + {0xA3D0,0xA3F0,0xFF50}, /* A3F0 */ + {0xA3D1,0xA3F1,0xFF51}, + {0xA3D2,0xA3F2,0xFF52}, + {0xA3D3,0xA3F3,0xFF53}, + {0xA3D4,0xA3F4,0xFF54}, + {0xA3D5,0xA3F5,0xFF55}, + {0xA3D6,0xA3F6,0xFF56}, + {0xA3D7,0xA3F7,0xFF57}, + {0xA3D8,0xA3F8,0xFF58}, + {0xA3D9,0xA3F9,0xFF59}, + {0xA3DA,0xA3FA,0xFF5A}, + {0xA3FB,0xA3FB,0x003F}, + {0xA3FC,0xA3FC,0x003F}, + {0xA3FD,0xA3FD,0x003F}, + {0xA3FE,0xA3FE,0x003F}, + {0xA3FF,0xA3FF,0x003F}, +}; + + +static MY_UNICASE_INFO cA6[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA6A0,0xA6A0,0x003F}, /* A6A0 */ + {0xA6A1,0xA6C1,0x0391}, + {0xA6A2,0xA6C2,0x0392}, + {0xA6A3,0xA6C3,0x0393}, + {0xA6A4,0xA6C4,0x0394}, + {0xA6A5,0xA6C5,0x0395}, + {0xA6A6,0xA6C6,0x0396}, + {0xA6A7,0xA6C7,0x0397}, + {0xA6A8,0xA6C8,0x0398}, + {0xA6A9,0xA6C9,0x0399}, + {0xA6AA,0xA6CA,0x039A}, + {0xA6AB,0xA6CB,0x039B}, + {0xA6AC,0xA6CC,0x039C}, + {0xA6AD,0xA6CD,0x039D}, + {0xA6AE,0xA6CE,0x039E}, + {0xA6AF,0xA6CF,0x039F}, + {0xA6B0,0xA6D0,0x03A0}, /* A6B0 */ + {0xA6B1,0xA6D1,0x03A1}, + {0xA6B2,0xA6D2,0x03A3}, + {0xA6B3,0xA6D3,0x03A4}, + {0xA6B4,0xA6D4,0x03A5}, + {0xA6B5,0xA6D5,0x03A6}, + {0xA6B6,0xA6D6,0x03A7}, + {0xA6B7,0xA6D7,0x03A8}, + {0xA6B8,0xA6D8,0x03A9}, + {0xA6B9,0xA6B9,0x003F}, + {0xA6BA,0xA6BA,0x003F}, + {0xA6BB,0xA6BB,0x003F}, + {0xA6BC,0xA6BC,0x003F}, + {0xA6BD,0xA6BD,0x003F}, + {0xA6BE,0xA6BE,0x003F}, + {0xA6BF,0xA6BF,0x003F}, + {0xA6C0,0xA6C0,0x003F}, /* A6C0 */ + {0xA6A1,0xA6C1,0x03B1}, + {0xA6A2,0xA6C2,0x03B2}, + {0xA6A3,0xA6C3,0x03B3}, + {0xA6A4,0xA6C4,0x03B4}, + {0xA6A5,0xA6C5,0x03B5}, + {0xA6A6,0xA6C6,0x03B6}, + {0xA6A7,0xA6C7,0x03B7}, + {0xA6A8,0xA6C8,0x03B8}, + {0xA6A9,0xA6C9,0x03B9}, + {0xA6AA,0xA6CA,0x03BA}, + {0xA6AB,0xA6CB,0x03BB}, + {0xA6AC,0xA6CC,0x03BC}, + {0xA6AD,0xA6CD,0x03BD}, + {0xA6AE,0xA6CE,0x03BE}, + {0xA6AF,0xA6CF,0x03BF}, + {0xA6B0,0xA6D0,0x03C0}, /* A6D0 */ + {0xA6B1,0xA6D1,0x03C1}, + {0xA6B2,0xA6D2,0x03C3}, + {0xA6B3,0xA6D3,0x03C4}, + {0xA6B4,0xA6D4,0x03C5}, + {0xA6B5,0xA6D5,0x03C6}, + {0xA6B6,0xA6D6,0x03C7}, + {0xA6B7,0xA6D7,0x03C8}, + {0xA6B8,0xA6D8,0x03C9}, + {0xA6D9,0xA6D9,0x003F}, + {0xA6DA,0xA6DA,0x003F}, + {0xA6DB,0xA6DB,0x003F}, + {0xA6DC,0xA6DC,0x003F}, + {0xA6DD,0xA6DD,0x003F}, + {0xA6DE,0xA6DE,0x003F}, + {0xA6DF,0xA6DF,0x003F}, + {0xA6E0,0xA6E0,0x003F}, /* A6E0 */ + {0xA6E1,0xA6E1,0x003F}, + {0xA6E2,0xA6E2,0x003F}, + {0xA6E3,0xA6E3,0x003F}, + {0xA6E4,0xA6E4,0x003F}, + {0xA6E5,0xA6E5,0x003F}, + {0xA6E6,0xA6E6,0x003F}, + {0xA6E7,0xA6E7,0x003F}, + {0xA6E8,0xA6E8,0x003F}, + {0xA6E9,0xA6E9,0x003F}, + {0xA6EA,0xA6EA,0x003F}, + {0xA6EB,0xA6EB,0x003F}, + {0xA6EC,0xA6EC,0x003F}, + {0xA6ED,0xA6ED,0x003F}, + {0xA6EE,0xA6EE,0x003F}, + {0xA6EF,0xA6EF,0x003F}, + {0xA6F0,0xA6F0,0x003F}, /* A6F0 */ + {0xA6F1,0xA6F1,0x003F}, + {0xA6F2,0xA6F2,0x003F}, + {0xA6F3,0xA6F3,0x003F}, + {0xA6F4,0xA6F4,0x003F}, + {0xA6F5,0xA6F5,0x003F}, + {0xA6F6,0xA6F6,0x003F}, + {0xA6F7,0xA6F7,0x003F}, + {0xA6F8,0xA6F8,0x003F}, + {0xA6F9,0xA6F9,0x003F}, + {0xA6FA,0xA6FA,0x003F}, + {0xA6FB,0xA6FB,0x003F}, + {0xA6FC,0xA6FC,0x003F}, + {0xA6FD,0xA6FD,0x003F}, + {0xA6FE,0xA6FE,0x003F}, + {0xA6FF,0xA6FF,0x003F}, +}; + + +static MY_UNICASE_INFO cA7[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA7A0,0xA7A0,0x003F}, /* A7A0 */ + {0xA7A1,0xA7D1,0x0410}, + {0xA7A2,0xA7D2,0x0411}, + {0xA7A3,0xA7D3,0x0412}, + {0xA7A4,0xA7D4,0x0413}, + {0xA7A5,0xA7D5,0x0414}, + {0xA7A6,0xA7D6,0x0415}, + {0xA7A7,0xA7D7,0x0401}, + {0xA7A8,0xA7D8,0x0416}, + {0xA7A9,0xA7D9,0x0417}, + {0xA7AA,0xA7DA,0x0418}, + {0xA7AB,0xA7DB,0x0419}, + {0xA7AC,0xA7DC,0x041A}, + {0xA7AD,0xA7DD,0x041B}, + {0xA7AE,0xA7DE,0x041C}, + {0xA7AF,0xA7DF,0x041D}, + {0xA7B0,0xA7E0,0x041E}, /* A7B0 */ + {0xA7B1,0xA7E1,0x041F}, + {0xA7B2,0xA7E2,0x0420}, + {0xA7B3,0xA7E3,0x0421}, + {0xA7B4,0xA7E4,0x0422}, + {0xA7B5,0xA7E5,0x0423}, + {0xA7B6,0xA7E6,0x0424}, + {0xA7B7,0xA7E7,0x0425}, + {0xA7B8,0xA7E8,0x0426}, + {0xA7B9,0xA7E9,0x0427}, + {0xA7BA,0xA7EA,0x0428}, + {0xA7BB,0xA7EB,0x0429}, + {0xA7BC,0xA7EC,0x042A}, + {0xA7BD,0xA7ED,0x042B}, + {0xA7BE,0xA7EE,0x042C}, + {0xA7BF,0xA7EF,0x042D}, + {0xA7C0,0xA7F0,0x042E}, /* A7C0 */ + {0xA7C1,0xA7F1,0x042F}, + {0xA7C2,0xA7C2,0x003F}, + {0xA7C3,0xA7C3,0x003F}, + {0xA7C4,0xA7C4,0x003F}, + {0xA7C5,0xA7C5,0x003F}, + {0xA7C6,0xA7C6,0x003F}, + {0xA7C7,0xA7C7,0x003F}, + {0xA7C8,0xA7C8,0x003F}, + {0xA7C9,0xA7C9,0x003F}, + {0xA7CA,0xA7CA,0x003F}, + {0xA7CB,0xA7CB,0x003F}, + {0xA7CC,0xA7CC,0x003F}, + {0xA7CD,0xA7CD,0x003F}, + {0xA7CE,0xA7CE,0x003F}, + {0xA7CF,0xA7CF,0x003F}, + {0xA7D0,0xA7D0,0x003F}, /* A7D0 */ + {0xA7A1,0xA7D1,0x0430}, + {0xA7A2,0xA7D2,0x0431}, + {0xA7A3,0xA7D3,0x0432}, + {0xA7A4,0xA7D4,0x0433}, + {0xA7A5,0xA7D5,0x0434}, + {0xA7A6,0xA7D6,0x0435}, + {0xA7A7,0xA7D7,0x0451}, + {0xA7A8,0xA7D8,0x0436}, + {0xA7A9,0xA7D9,0x0437}, + {0xA7AA,0xA7DA,0x0438}, + {0xA7AB,0xA7DB,0x0439}, + {0xA7AC,0xA7DC,0x043A}, + {0xA7AD,0xA7DD,0x043B}, + {0xA7AE,0xA7DE,0x043C}, + {0xA7AF,0xA7DF,0x043D}, + {0xA7B0,0xA7E0,0x043E}, /* A7E0 */ + {0xA7B1,0xA7E1,0x043F}, + {0xA7B2,0xA7E2,0x0440}, + {0xA7B3,0xA7E3,0x0441}, + {0xA7B4,0xA7E4,0x0442}, + {0xA7B5,0xA7E5,0x0443}, + {0xA7B6,0xA7E6,0x0444}, + {0xA7B7,0xA7E7,0x0445}, + {0xA7B8,0xA7E8,0x0446}, + {0xA7B9,0xA7E9,0x0447}, + {0xA7BA,0xA7EA,0x0448}, + {0xA7BB,0xA7EB,0x0449}, + {0xA7BC,0xA7EC,0x044A}, + {0xA7BD,0xA7ED,0x044B}, + {0xA7BE,0xA7EE,0x044C}, + {0xA7BF,0xA7EF,0x044D}, + {0xA7C0,0xA7F0,0x044E}, /* A7F0 */ + {0xA7C1,0xA7F1,0x044F}, + {0xA7F2,0xA7F2,0x003F}, + {0xA7F3,0xA7F3,0x003F}, + {0xA7F4,0xA7F4,0x003F}, + {0xA7F5,0xA7F5,0x003F}, + {0xA7F6,0xA7F6,0x003F}, + {0xA7F7,0xA7F7,0x003F}, + {0xA7F8,0xA7F8,0x003F}, + {0xA7F9,0xA7F9,0x003F}, + {0xA7FA,0xA7FA,0x003F}, + {0xA7FB,0xA7FB,0x003F}, + {0xA7FC,0xA7FC,0x003F}, + {0xA7FD,0xA7FD,0x003F}, + {0xA7FE,0xA7FE,0x003F}, + {0xA7FF,0xA7FF,0x003F}, +}; + + +static MY_UNICASE_INFO cAD[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xADA0,0xADA0,0x003F}, /* ADA0 */ + {0xADA1,0xADA1,0x2460}, + {0xADA2,0xADA2,0x2461}, + {0xADA3,0xADA3,0x2462}, + {0xADA4,0xADA4,0x2463}, + {0xADA5,0xADA5,0x2464}, + {0xADA6,0xADA6,0x2465}, + {0xADA7,0xADA7,0x2466}, + {0xADA8,0xADA8,0x2467}, + {0xADA9,0xADA9,0x2468}, + {0xADAA,0xADAA,0x2469}, + {0xADAB,0xADAB,0x246A}, + {0xADAC,0xADAC,0x246B}, + {0xADAD,0xADAD,0x246C}, + {0xADAE,0xADAE,0x246D}, + {0xADAF,0xADAF,0x246E}, + {0xADB0,0xADB0,0x246F}, /* ADB0 */ + {0xADB1,0xADB1,0x2470}, + {0xADB2,0xADB2,0x2471}, + {0xADB3,0xADB3,0x2472}, + {0xADB4,0xADB4,0x2473}, + {0xADB5,0x8FF3F3,0x2160}, + {0xADB6,0x8FF3F4,0x2161}, + {0xADB7,0x8FF3F5,0x2162}, + {0xADB8,0x8FF3F6,0x2163}, + {0xADB9,0x8FF3F7,0x2164}, + {0xADBA,0x8FF3F8,0x2165}, + {0xADBB,0x8FF3F9,0x2166}, + {0xADBC,0x8FF3FA,0x2167}, + {0xADBD,0x8FF3FB,0x2168}, + {0xADBE,0x8FF3FC,0x2169}, + {0xADBF,0xADBF,0x003F}, + {0xADC0,0xADC0,0x3349}, /* ADC0 */ + {0xADC1,0xADC1,0x3314}, + {0xADC2,0xADC2,0x3322}, + {0xADC3,0xADC3,0x334D}, + {0xADC4,0xADC4,0x3318}, + {0xADC5,0xADC5,0x3327}, + {0xADC6,0xADC6,0x3303}, + {0xADC7,0xADC7,0x3336}, + {0xADC8,0xADC8,0x3351}, + {0xADC9,0xADC9,0x3357}, + {0xADCA,0xADCA,0x330D}, + {0xADCB,0xADCB,0x3326}, + {0xADCC,0xADCC,0x3323}, + {0xADCD,0xADCD,0x332B}, + {0xADCE,0xADCE,0x334A}, + {0xADCF,0xADCF,0x333B}, + {0xADD0,0xADD0,0x339C}, /* ADD0 */ + {0xADD1,0xADD1,0x339D}, + {0xADD2,0xADD2,0x339E}, + {0xADD3,0xADD3,0x338E}, + {0xADD4,0xADD4,0x338F}, + {0xADD5,0xADD5,0x33C4}, + {0xADD6,0xADD6,0x33A1}, + {0xADD7,0xADD7,0x003F}, + {0xADD8,0xADD8,0x003F}, + {0xADD9,0xADD9,0x003F}, + {0xADDA,0xADDA,0x003F}, + {0xADDB,0xADDB,0x003F}, + {0xADDC,0xADDC,0x003F}, + {0xADDD,0xADDD,0x003F}, + {0xADDE,0xADDE,0x003F}, + {0xADDF,0xADDF,0x337B}, + {0xADE0,0xADE0,0x301D}, /* ADE0 */ + {0xADE1,0xADE1,0x301F}, + {0xADE2,0xADE2,0x2116}, + {0xADE3,0xADE3,0x33CD}, + {0xADE4,0xADE4,0x2121}, + {0xADE5,0xADE5,0x32A4}, + {0xADE6,0xADE6,0x32A5}, + {0xADE7,0xADE7,0x32A6}, + {0xADE8,0xADE8,0x32A7}, + {0xADE9,0xADE9,0x32A8}, + {0xADEA,0xADEA,0x3231}, + {0xADEB,0xADEB,0x3232}, + {0xADEC,0xADEC,0x3239}, + {0xADED,0xADED,0x337E}, + {0xADEE,0xADEE,0x337D}, + {0xADEF,0xADEF,0x337C}, + {0xADF0,0xADF0,0x2252}, /* ADF0 */ + {0xADF1,0xADF1,0x2261}, + {0xADF2,0xADF2,0x222B}, + {0xADF3,0xADF3,0x222E}, + {0xADF4,0xADF4,0x2211}, + {0xADF5,0xADF5,0x221A}, + {0xADF6,0xADF6,0x22A5}, + {0xADF7,0xADF7,0x2220}, + {0xADF8,0xADF8,0x221F}, + {0xADF9,0xADF9,0x22BF}, + {0xADFA,0xADFA,0x2235}, + {0xADFB,0xADFB,0x2229}, + {0xADFC,0xADFC,0x222A}, + {0xADFD,0xADFD,0x003F}, + {0xADFE,0xADFE,0x003F}, + {0xADFF,0xADFF,0x003F}, +}; + + +/* Case info pages for JIS-X-0212 range */ + +static MY_UNICASE_INFO c8FA6[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0x8FA6A0,0x8FA6A0,0x003F}, /* 8FA6A0 */ + {0x8FA6A1,0x8FA6A1,0x003F}, + {0x8FA6A2,0x8FA6A2,0x003F}, + {0x8FA6A3,0x8FA6A3,0x003F}, + {0x8FA6A4,0x8FA6A4,0x003F}, + {0x8FA6A5,0x8FA6A5,0x003F}, + {0x8FA6A6,0x8FA6A6,0x003F}, + {0x8FA6A7,0x8FA6A7,0x003F}, + {0x8FA6A8,0x8FA6A8,0x003F}, + {0x8FA6A9,0x8FA6A9,0x003F}, + {0x8FA6AA,0x8FA6AA,0x003F}, + {0x8FA6AB,0x8FA6AB,0x003F}, + {0x8FA6AC,0x8FA6AC,0x003F}, + {0x8FA6AD,0x8FA6AD,0x003F}, + {0x8FA6AE,0x8FA6AE,0x003F}, + {0x8FA6AF,0x8FA6AF,0x003F}, + {0x8FA6B0,0x8FA6B0,0x003F}, /* 8FA6B0 */ + {0x8FA6B1,0x8FA6B1,0x003F}, + {0x8FA6B2,0x8FA6B2,0x003F}, + {0x8FA6B3,0x8FA6B3,0x003F}, + {0x8FA6B4,0x8FA6B4,0x003F}, + {0x8FA6B5,0x8FA6B5,0x003F}, + {0x8FA6B6,0x8FA6B6,0x003F}, + {0x8FA6B7,0x8FA6B7,0x003F}, + {0x8FA6B8,0x8FA6B8,0x003F}, + {0x8FA6B9,0x8FA6B9,0x003F}, + {0x8FA6BA,0x8FA6BA,0x003F}, + {0x8FA6BB,0x8FA6BB,0x003F}, + {0x8FA6BC,0x8FA6BC,0x003F}, + {0x8FA6BD,0x8FA6BD,0x003F}, + {0x8FA6BE,0x8FA6BE,0x003F}, + {0x8FA6BF,0x8FA6BF,0x003F}, + {0x8FA6C0,0x8FA6C0,0x003F}, /* 8FA6C0 */ + {0x8FA6C1,0x8FA6C1,0x003F}, + {0x8FA6C2,0x8FA6C2,0x003F}, + {0x8FA6C3,0x8FA6C3,0x003F}, + {0x8FA6C4,0x8FA6C4,0x003F}, + {0x8FA6C5,0x8FA6C5,0x003F}, + {0x8FA6C6,0x8FA6C6,0x003F}, + {0x8FA6C7,0x8FA6C7,0x003F}, + {0x8FA6C8,0x8FA6C8,0x003F}, + {0x8FA6C9,0x8FA6C9,0x003F}, + {0x8FA6CA,0x8FA6CA,0x003F}, + {0x8FA6CB,0x8FA6CB,0x003F}, + {0x8FA6CC,0x8FA6CC,0x003F}, + {0x8FA6CD,0x8FA6CD,0x003F}, + {0x8FA6CE,0x8FA6CE,0x003F}, + {0x8FA6CF,0x8FA6CF,0x003F}, + {0x8FA6D0,0x8FA6D0,0x003F}, /* 8FA6D0 */ + {0x8FA6D1,0x8FA6D1,0x003F}, + {0x8FA6D2,0x8FA6D2,0x003F}, + {0x8FA6D3,0x8FA6D3,0x003F}, + {0x8FA6D4,0x8FA6D4,0x003F}, + {0x8FA6D5,0x8FA6D5,0x003F}, + {0x8FA6D6,0x8FA6D6,0x003F}, + {0x8FA6D7,0x8FA6D7,0x003F}, + {0x8FA6D8,0x8FA6D8,0x003F}, + {0x8FA6D9,0x8FA6D9,0x003F}, + {0x8FA6DA,0x8FA6DA,0x003F}, + {0x8FA6DB,0x8FA6DB,0x003F}, + {0x8FA6DC,0x8FA6DC,0x003F}, + {0x8FA6DD,0x8FA6DD,0x003F}, + {0x8FA6DE,0x8FA6DE,0x003F}, + {0x8FA6DF,0x8FA6DF,0x003F}, + {0x8FA6E0,0x8FA6E0,0x003F}, /* 8FA6E0 */ + {0x8FA6E1,0x8FA6F1,0x0386}, + {0x8FA6E2,0x8FA6F2,0x0388}, + {0x8FA6E3,0x8FA6F3,0x0389}, + {0x8FA6E4,0x8FA6F4,0x038A}, + {0x8FA6E5,0x8FA6F5,0x03AA}, + {0x8FA6E6,0x8FA6E6,0x003F}, + {0x8FA6E7,0x8FA6F7,0x038C}, + {0x8FA6E8,0x8FA6E8,0x003F}, + {0x8FA6E9,0x8FA6F9,0x038E}, + {0x8FA6EA,0x8FA6FA,0x03AB}, + {0x8FA6EB,0x8FA6EB,0x003F}, + {0x8FA6EC,0x8FA6FC,0x038F}, + {0x8FA6ED,0x8FA6ED,0x003F}, + {0x8FA6EE,0x8FA6EE,0x003F}, + {0x8FA6EF,0x8FA6EF,0x003F}, + {0x8FA6F0,0x8FA6F0,0x003F}, /* 8FA6F0 */ + {0x8FA6E1,0x8FA6F1,0x03AC}, + {0x8FA6E2,0x8FA6F2,0x03AD}, + {0x8FA6E3,0x8FA6F3,0x03AE}, + {0x8FA6E4,0x8FA6F4,0x03AF}, + {0x8FA6E5,0x8FA6F5,0x03CA}, + {0x8FA6F6,0x8FA6F6,0x0390}, + {0x8FA6E7,0x8FA6F7,0x03CC}, + {0xA6B2,0x8FA6F8,0x03C2}, + {0x8FA6E9,0x8FA6F9,0x03CD}, + {0x8FA6EA,0x8FA6FA,0x03CB}, + {0x8FA6FB,0x8FA6FB,0x03B0}, + {0x8FA6EC,0x8FA6FC,0x03CE}, + {0x8FA6FD,0x8FA6FD,0x003F}, + {0x8FA6FE,0x8FA6FE,0x003F}, + {0x8FA6FF,0x8FA6FF,0x003F}, +}; + + +static MY_UNICASE_INFO c8FA7[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0x8FA7A0,0x8FA7A0,0x003F}, /* 8FA7A0 */ + {0x8FA7A1,0x8FA7A1,0x003F}, + {0x8FA7A2,0x8FA7A2,0x003F}, + {0x8FA7A3,0x8FA7A3,0x003F}, + {0x8FA7A4,0x8FA7A4,0x003F}, + {0x8FA7A5,0x8FA7A5,0x003F}, + {0x8FA7A6,0x8FA7A6,0x003F}, + {0x8FA7A7,0x8FA7A7,0x003F}, + {0x8FA7A8,0x8FA7A8,0x003F}, + {0x8FA7A9,0x8FA7A9,0x003F}, + {0x8FA7AA,0x8FA7AA,0x003F}, + {0x8FA7AB,0x8FA7AB,0x003F}, + {0x8FA7AC,0x8FA7AC,0x003F}, + {0x8FA7AD,0x8FA7AD,0x003F}, + {0x8FA7AE,0x8FA7AE,0x003F}, + {0x8FA7AF,0x8FA7AF,0x003F}, + {0x8FA7B0,0x8FA7B0,0x003F}, /* 8FA7B0 */ + {0x8FA7B1,0x8FA7B1,0x003F}, + {0x8FA7B2,0x8FA7B2,0x003F}, + {0x8FA7B3,0x8FA7B3,0x003F}, + {0x8FA7B4,0x8FA7B4,0x003F}, + {0x8FA7B5,0x8FA7B5,0x003F}, + {0x8FA7B6,0x8FA7B6,0x003F}, + {0x8FA7B7,0x8FA7B7,0x003F}, + {0x8FA7B8,0x8FA7B8,0x003F}, + {0x8FA7B9,0x8FA7B9,0x003F}, + {0x8FA7BA,0x8FA7BA,0x003F}, + {0x8FA7BB,0x8FA7BB,0x003F}, + {0x8FA7BC,0x8FA7BC,0x003F}, + {0x8FA7BD,0x8FA7BD,0x003F}, + {0x8FA7BE,0x8FA7BE,0x003F}, + {0x8FA7BF,0x8FA7BF,0x003F}, + {0x8FA7C0,0x8FA7C0,0x003F}, /* 8FA7C0 */ + {0x8FA7C1,0x8FA7C1,0x003F}, + {0x8FA7C2,0x8FA7F2,0x0402}, + {0x8FA7C3,0x8FA7F3,0x0403}, + {0x8FA7C4,0x8FA7F4,0x0404}, + {0x8FA7C5,0x8FA7F5,0x0405}, + {0x8FA7C6,0x8FA7F6,0x0406}, + {0x8FA7C7,0x8FA7F7,0x0407}, + {0x8FA7C8,0x8FA7F8,0x0408}, + {0x8FA7C9,0x8FA7F9,0x0409}, + {0x8FA7CA,0x8FA7FA,0x040A}, + {0x8FA7CB,0x8FA7FB,0x040B}, + {0x8FA7CC,0x8FA7FC,0x040C}, + {0x8FA7CD,0x8FA7FD,0x040E}, + {0x8FA7CE,0x8FA7FE,0x040F}, + {0x8FA7CF,0x8FA7CF,0x003F}, + {0x8FA7D0,0x8FA7D0,0x003F}, /* 8FA7D0 */ + {0x8FA7D1,0x8FA7D1,0x003F}, + {0x8FA7D2,0x8FA7D2,0x003F}, + {0x8FA7D3,0x8FA7D3,0x003F}, + {0x8FA7D4,0x8FA7D4,0x003F}, + {0x8FA7D5,0x8FA7D5,0x003F}, + {0x8FA7D6,0x8FA7D6,0x003F}, + {0x8FA7D7,0x8FA7D7,0x003F}, + {0x8FA7D8,0x8FA7D8,0x003F}, + {0x8FA7D9,0x8FA7D9,0x003F}, + {0x8FA7DA,0x8FA7DA,0x003F}, + {0x8FA7DB,0x8FA7DB,0x003F}, + {0x8FA7DC,0x8FA7DC,0x003F}, + {0x8FA7DD,0x8FA7DD,0x003F}, + {0x8FA7DE,0x8FA7DE,0x003F}, + {0x8FA7DF,0x8FA7DF,0x003F}, + {0x8FA7E0,0x8FA7E0,0x003F}, /* 8FA7E0 */ + {0x8FA7E1,0x8FA7E1,0x003F}, + {0x8FA7E2,0x8FA7E2,0x003F}, + {0x8FA7E3,0x8FA7E3,0x003F}, + {0x8FA7E4,0x8FA7E4,0x003F}, + {0x8FA7E5,0x8FA7E5,0x003F}, + {0x8FA7E6,0x8FA7E6,0x003F}, + {0x8FA7E7,0x8FA7E7,0x003F}, + {0x8FA7E8,0x8FA7E8,0x003F}, + {0x8FA7E9,0x8FA7E9,0x003F}, + {0x8FA7EA,0x8FA7EA,0x003F}, + {0x8FA7EB,0x8FA7EB,0x003F}, + {0x8FA7EC,0x8FA7EC,0x003F}, + {0x8FA7ED,0x8FA7ED,0x003F}, + {0x8FA7EE,0x8FA7EE,0x003F}, + {0x8FA7EF,0x8FA7EF,0x003F}, + {0x8FA7F0,0x8FA7F0,0x003F}, /* 8FA7F0 */ + {0x8FA7F1,0x8FA7F1,0x003F}, + {0x8FA7C2,0x8FA7F2,0x0452}, + {0x8FA7C3,0x8FA7F3,0x0453}, + {0x8FA7C4,0x8FA7F4,0x0454}, + {0x8FA7C5,0x8FA7F5,0x0455}, + {0x8FA7C6,0x8FA7F6,0x0456}, + {0x8FA7C7,0x8FA7F7,0x0457}, + {0x8FA7C8,0x8FA7F8,0x0458}, + {0x8FA7C9,0x8FA7F9,0x0459}, + {0x8FA7CA,0x8FA7FA,0x045A}, + {0x8FA7CB,0x8FA7FB,0x045B}, + {0x8FA7CC,0x8FA7FC,0x045C}, + {0x8FA7CD,0x8FA7FD,0x045E}, + {0x8FA7CE,0x8FA7FE,0x045F}, + {0x8FA7FF,0x8FA7FF,0x003F}, +}; + + +static MY_UNICASE_INFO c8FA9[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0x8FA9A0,0x8FA9A0,0x003F}, /* 8FA9A0 */ + {0x8FA9A1,0x8FA9C1,0x00C6}, + {0x8FA9A2,0x8FA9C2,0x0110}, + {0x8FA9A3,0x8FA9A3,0x003F}, + {0x8FA9A4,0x8FA9C4,0x0126}, + {0x8FA9A5,0x8FA9A5,0x003F}, + {0x8FA9A6,0x8FA9C6,0x0132}, + {0x8FA9A7,0x8FA9A7,0x003F}, + {0x8FA9A8,0x8FA9C8,0x0141}, + {0x8FA9A9,0x8FA9C9,0x013F}, + {0x8FA9AA,0x8FA9AA,0x003F}, + {0x8FA9AB,0x8FA9CB,0x014A}, + {0x8FA9AC,0x8FA9CC,0x00D8}, + {0x8FA9AD,0x8FA9CD,0x0152}, + {0x8FA9AE,0x8FA9AE,0x003F}, + {0x8FA9AF,0x8FA9CF,0x0166}, + {0x8FA9B0,0x8FA9D0,0x00DE}, /* 8FA9B0 */ + {0x8FA9B1,0x8FA9B1,0x003F}, + {0x8FA9B2,0x8FA9B2,0x003F}, + {0x8FA9B3,0x8FA9B3,0x003F}, + {0x8FA9B4,0x8FA9B4,0x003F}, + {0x8FA9B5,0x8FA9B5,0x003F}, + {0x8FA9B6,0x8FA9B6,0x003F}, + {0x8FA9B7,0x8FA9B7,0x003F}, + {0x8FA9B8,0x8FA9B8,0x003F}, + {0x8FA9B9,0x8FA9B9,0x003F}, + {0x8FA9BA,0x8FA9BA,0x003F}, + {0x8FA9BB,0x8FA9BB,0x003F}, + {0x8FA9BC,0x8FA9BC,0x003F}, + {0x8FA9BD,0x8FA9BD,0x003F}, + {0x8FA9BE,0x8FA9BE,0x003F}, + {0x8FA9BF,0x8FA9BF,0x003F}, + {0x8FA9C0,0x8FA9C0,0x003F}, /* 8FA9C0 */ + {0x8FA9A1,0x8FA9C1,0x00E6}, + {0x8FA9A2,0x8FA9C2,0x0111}, + {0x8FA9C3,0x8FA9C3,0x00F0}, + {0x8FA9A4,0x8FA9C4,0x0127}, + {0x49,0x8FA9C5,0x0131}, + {0x8FA9A6,0x8FA9C6,0x0133}, + {0x8FA9C7,0x8FA9C7,0x0138}, + {0x8FA9A8,0x8FA9C8,0x0142}, + {0x8FA9A9,0x8FA9C9,0x0140}, + {0x8FA9CA,0x8FA9CA,0x0149}, + {0x8FA9AB,0x8FA9CB,0x014B}, + {0x8FA9AC,0x8FA9CC,0x00F8}, + {0x8FA9AD,0x8FA9CD,0x0153}, + {0x8FA9CE,0x8FA9CE,0x00DF}, + {0x8FA9AF,0x8FA9CF,0x0167}, + {0x8FA9B0,0x8FA9D0,0x00FE}, /* 8FA9D0 */ + {0x8FA9D1,0x8FA9D1,0x003F}, + {0x8FA9D2,0x8FA9D2,0x003F}, + {0x8FA9D3,0x8FA9D3,0x003F}, + {0x8FA9D4,0x8FA9D4,0x003F}, + {0x8FA9D5,0x8FA9D5,0x003F}, + {0x8FA9D6,0x8FA9D6,0x003F}, + {0x8FA9D7,0x8FA9D7,0x003F}, + {0x8FA9D8,0x8FA9D8,0x003F}, + {0x8FA9D9,0x8FA9D9,0x003F}, + {0x8FA9DA,0x8FA9DA,0x003F}, + {0x8FA9DB,0x8FA9DB,0x003F}, + {0x8FA9DC,0x8FA9DC,0x003F}, + {0x8FA9DD,0x8FA9DD,0x003F}, + {0x8FA9DE,0x8FA9DE,0x003F}, + {0x8FA9DF,0x8FA9DF,0x003F}, + {0x8FA9E0,0x8FA9E0,0x003F}, /* 8FA9E0 */ + {0x8FA9E1,0x8FA9E1,0x003F}, + {0x8FA9E2,0x8FA9E2,0x003F}, + {0x8FA9E3,0x8FA9E3,0x003F}, + {0x8FA9E4,0x8FA9E4,0x003F}, + {0x8FA9E5,0x8FA9E5,0x003F}, + {0x8FA9E6,0x8FA9E6,0x003F}, + {0x8FA9E7,0x8FA9E7,0x003F}, + {0x8FA9E8,0x8FA9E8,0x003F}, + {0x8FA9E9,0x8FA9E9,0x003F}, + {0x8FA9EA,0x8FA9EA,0x003F}, + {0x8FA9EB,0x8FA9EB,0x003F}, + {0x8FA9EC,0x8FA9EC,0x003F}, + {0x8FA9ED,0x8FA9ED,0x003F}, + {0x8FA9EE,0x8FA9EE,0x003F}, + {0x8FA9EF,0x8FA9EF,0x003F}, + {0x8FA9F0,0x8FA9F0,0x003F}, /* 8FA9F0 */ + {0x8FA9F1,0x8FA9F1,0x003F}, + {0x8FA9F2,0x8FA9F2,0x003F}, + {0x8FA9F3,0x8FA9F3,0x003F}, + {0x8FA9F4,0x8FA9F4,0x003F}, + {0x8FA9F5,0x8FA9F5,0x003F}, + {0x8FA9F6,0x8FA9F6,0x003F}, + {0x8FA9F7,0x8FA9F7,0x003F}, + {0x8FA9F8,0x8FA9F8,0x003F}, + {0x8FA9F9,0x8FA9F9,0x003F}, + {0x8FA9FA,0x8FA9FA,0x003F}, + {0x8FA9FB,0x8FA9FB,0x003F}, + {0x8FA9FC,0x8FA9FC,0x003F}, + {0x8FA9FD,0x8FA9FD,0x003F}, + {0x8FA9FE,0x8FA9FE,0x003F}, + {0x8FA9FF,0x8FA9FF,0x003F}, +}; + + +static MY_UNICASE_INFO c8FAA[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0x8FAAA0,0x8FAAA0,0x003F}, /* 8FAAA0 */ + {0x8FAAA1,0x8FABA1,0x00C1}, + {0x8FAAA2,0x8FABA2,0x00C0}, + {0x8FAAA3,0x8FABA3,0x00C4}, + {0x8FAAA4,0x8FABA4,0x00C2}, + {0x8FAAA5,0x8FABA5,0x0102}, + {0x8FAAA6,0x8FABA6,0x01CD}, + {0x8FAAA7,0x8FABA7,0x0100}, + {0x8FAAA8,0x8FABA8,0x0104}, + {0x8FAAA9,0x8FABA9,0x00C5}, + {0x8FAAAA,0x8FABAA,0x00C3}, + {0x8FAAAB,0x8FABAB,0x0106}, + {0x8FAAAC,0x8FABAC,0x0108}, + {0x8FAAAD,0x8FABAD,0x010C}, + {0x8FAAAE,0x8FABAE,0x00C7}, + {0x8FAAAF,0x8FABAF,0x010A}, + {0x8FAAB0,0x8FABB0,0x010E}, /* 8FAAB0 */ + {0x8FAAB1,0x8FABB1,0x00C9}, + {0x8FAAB2,0x8FABB2,0x00C8}, + {0x8FAAB3,0x8FABB3,0x00CB}, + {0x8FAAB4,0x8FABB4,0x00CA}, + {0x8FAAB5,0x8FABB5,0x011A}, + {0x8FAAB6,0x8FABB6,0x0116}, + {0x8FAAB7,0x8FABB7,0x0112}, + {0x8FAAB8,0x8FABB8,0x0118}, + {0x8FAAB9,0x8FAAB9,0x003F}, + {0x8FAABA,0x8FABBA,0x011C}, + {0x8FAABB,0x8FABBB,0x011E}, + {0x8FAABC,0x8FAABC,0x0122}, + {0x8FAABD,0x8FABBD,0x0120}, + {0x8FAABE,0x8FABBE,0x0124}, + {0x8FAABF,0x8FABBF,0x00CD}, + {0x8FAAC0,0x8FABC0,0x00CC}, /* 8FAAC0 */ + {0x8FAAC1,0x8FABC1,0x00CF}, + {0x8FAAC2,0x8FABC2,0x00CE}, + {0x8FAAC3,0x8FABC3,0x01CF}, + {0x8FAAC4,0x69,0x0130}, + {0x8FAAC5,0x8FABC5,0x012A}, + {0x8FAAC6,0x8FABC6,0x012E}, + {0x8FAAC7,0x8FABC7,0x0128}, + {0x8FAAC8,0x8FABC8,0x0134}, + {0x8FAAC9,0x8FABC9,0x0136}, + {0x8FAACA,0x8FABCA,0x0139}, + {0x8FAACB,0x8FABCB,0x013D}, + {0x8FAACC,0x8FABCC,0x013B}, + {0x8FAACD,0x8FABCD,0x0143}, + {0x8FAACE,0x8FABCE,0x0147}, + {0x8FAACF,0x8FABCF,0x0145}, + {0x8FAAD0,0x8FABD0,0x00D1}, /* 8FAAD0 */ + {0x8FAAD1,0x8FABD1,0x00D3}, + {0x8FAAD2,0x8FABD2,0x00D2}, + {0x8FAAD3,0x8FABD3,0x00D6}, + {0x8FAAD4,0x8FABD4,0x00D4}, + {0x8FAAD5,0x8FABD5,0x01D1}, + {0x8FAAD6,0x8FABD6,0x0150}, + {0x8FAAD7,0x8FABD7,0x014C}, + {0x8FAAD8,0x8FABD8,0x00D5}, + {0x8FAAD9,0x8FABD9,0x0154}, + {0x8FAADA,0x8FABDA,0x0158}, + {0x8FAADB,0x8FABDB,0x0156}, + {0x8FAADC,0x8FABDC,0x015A}, + {0x8FAADD,0x8FABDD,0x015C}, + {0x8FAADE,0x8FABDE,0x0160}, + {0x8FAADF,0x8FABDF,0x015E}, + {0x8FAAE0,0x8FABE0,0x0164}, /* 8FAAE0 */ + {0x8FAAE1,0x8FABE1,0x0162}, + {0x8FAAE2,0x8FABE2,0x00DA}, + {0x8FAAE3,0x8FABE3,0x00D9}, + {0x8FAAE4,0x8FABE4,0x00DC}, + {0x8FAAE5,0x8FABE5,0x00DB}, + {0x8FAAE6,0x8FABE6,0x016C}, + {0x8FAAE7,0x8FABE7,0x01D3}, + {0x8FAAE8,0x8FABE8,0x0170}, + {0x8FAAE9,0x8FABE9,0x016A}, + {0x8FAAEA,0x8FABEA,0x0172}, + {0x8FAAEB,0x8FABEB,0x016E}, + {0x8FAAEC,0x8FABEC,0x0168}, + {0x8FAAED,0x8FABED,0x01D7}, + {0x8FAAEE,0x8FABEE,0x01DB}, + {0x8FAAEF,0x8FABEF,0x01D9}, + {0x8FAAF0,0x8FABF0,0x01D5}, /* 8FAAF0 */ + {0x8FAAF1,0x8FABF1,0x0174}, + {0x8FAAF2,0x8FABF2,0x00DD}, + {0x8FAAF3,0x8FABF3,0x0178}, + {0x8FAAF4,0x8FABF4,0x0176}, + {0x8FAAF5,0x8FABF5,0x0179}, + {0x8FAAF6,0x8FABF6,0x017D}, + {0x8FAAF7,0x8FABF7,0x017B}, + {0x8FAAF8,0x8FAAF8,0x003F}, + {0x8FAAF9,0x8FAAF9,0x003F}, + {0x8FAAFA,0x8FAAFA,0x003F}, + {0x8FAAFB,0x8FAAFB,0x003F}, + {0x8FAAFC,0x8FAAFC,0x003F}, + {0x8FAAFD,0x8FAAFD,0x003F}, + {0x8FAAFE,0x8FAAFE,0x003F}, + {0x8FAAFF,0x8FAAFF,0x003F}, +}; + + +static MY_UNICASE_INFO c8FAB[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0x8FABA0,0x8FABA0,0x003F}, /* 8FABA0 */ + {0x8FAAA1,0x8FABA1,0x00E1}, + {0x8FAAA2,0x8FABA2,0x00E0}, + {0x8FAAA3,0x8FABA3,0x00E4}, + {0x8FAAA4,0x8FABA4,0x00E2}, + {0x8FAAA5,0x8FABA5,0x0103}, + {0x8FAAA6,0x8FABA6,0x01CE}, + {0x8FAAA7,0x8FABA7,0x0101}, + {0x8FAAA8,0x8FABA8,0x0105}, + {0x8FAAA9,0x8FABA9,0x00E5}, + {0x8FAAAA,0x8FABAA,0x00E3}, + {0x8FAAAB,0x8FABAB,0x0107}, + {0x8FAAAC,0x8FABAC,0x0109}, + {0x8FAAAD,0x8FABAD,0x010D}, + {0x8FAAAE,0x8FABAE,0x00E7}, + {0x8FAAAF,0x8FABAF,0x010B}, + {0x8FAAB0,0x8FABB0,0x010F}, /* 8FABB0 */ + {0x8FAAB1,0x8FABB1,0x00E9}, + {0x8FAAB2,0x8FABB2,0x00E8}, + {0x8FAAB3,0x8FABB3,0x00EB}, + {0x8FAAB4,0x8FABB4,0x00EA}, + {0x8FAAB5,0x8FABB5,0x011B}, + {0x8FAAB6,0x8FABB6,0x0117}, + {0x8FAAB7,0x8FABB7,0x0113}, + {0x8FAAB8,0x8FABB8,0x0119}, + {0x8FABB9,0x8FABB9,0x01F5}, + {0x8FAABA,0x8FABBA,0x011D}, + {0x8FAABB,0x8FABBB,0x011F}, + {0x8FABBC,0x8FABBC,0x003F}, + {0x8FAABD,0x8FABBD,0x0121}, + {0x8FAABE,0x8FABBE,0x0125}, + {0x8FAABF,0x8FABBF,0x00ED}, + {0x8FAAC0,0x8FABC0,0x00EC}, /* 8FABC0 */ + {0x8FAAC1,0x8FABC1,0x00EF}, + {0x8FAAC2,0x8FABC2,0x00EE}, + {0x8FAAC3,0x8FABC3,0x01D0}, + {0x8FABC4,0x8FABC4,0x003F}, + {0x8FAAC5,0x8FABC5,0x012B}, + {0x8FAAC6,0x8FABC6,0x012F}, + {0x8FAAC7,0x8FABC7,0x0129}, + {0x8FAAC8,0x8FABC8,0x0135}, + {0x8FAAC9,0x8FABC9,0x0137}, + {0x8FAACA,0x8FABCA,0x013A}, + {0x8FAACB,0x8FABCB,0x013E}, + {0x8FAACC,0x8FABCC,0x013C}, + {0x8FAACD,0x8FABCD,0x0144}, + {0x8FAACE,0x8FABCE,0x0148}, + {0x8FAACF,0x8FABCF,0x0146}, + {0x8FAAD0,0x8FABD0,0x00F1}, /* 8FABD0 */ + {0x8FAAD1,0x8FABD1,0x00F3}, + {0x8FAAD2,0x8FABD2,0x00F2}, + {0x8FAAD3,0x8FABD3,0x00F6}, + {0x8FAAD4,0x8FABD4,0x00F4}, + {0x8FAAD5,0x8FABD5,0x01D2}, + {0x8FAAD6,0x8FABD6,0x0151}, + {0x8FAAD7,0x8FABD7,0x014D}, + {0x8FAAD8,0x8FABD8,0x00F5}, + {0x8FAAD9,0x8FABD9,0x0155}, + {0x8FAADA,0x8FABDA,0x0159}, + {0x8FAADB,0x8FABDB,0x0157}, + {0x8FAADC,0x8FABDC,0x015B}, + {0x8FAADD,0x8FABDD,0x015D}, + {0x8FAADE,0x8FABDE,0x0161}, + {0x8FAADF,0x8FABDF,0x015F}, + {0x8FAAE0,0x8FABE0,0x0165}, /* 8FABE0 */ + {0x8FAAE1,0x8FABE1,0x0163}, + {0x8FAAE2,0x8FABE2,0x00FA}, + {0x8FAAE3,0x8FABE3,0x00F9}, + {0x8FAAE4,0x8FABE4,0x00FC}, + {0x8FAAE5,0x8FABE5,0x00FB}, + {0x8FAAE6,0x8FABE6,0x016D}, + {0x8FAAE7,0x8FABE7,0x01D4}, + {0x8FAAE8,0x8FABE8,0x0171}, + {0x8FAAE9,0x8FABE9,0x016B}, + {0x8FAAEA,0x8FABEA,0x0173}, + {0x8FAAEB,0x8FABEB,0x016F}, + {0x8FAAEC,0x8FABEC,0x0169}, + {0x8FAAED,0x8FABED,0x01D8}, + {0x8FAAEE,0x8FABEE,0x01DC}, + {0x8FAAEF,0x8FABEF,0x01DA}, + {0x8FAAF0,0x8FABF0,0x01D6}, /* 8FABF0 */ + {0x8FAAF1,0x8FABF1,0x0175}, + {0x8FAAF2,0x8FABF2,0x00FD}, + {0x8FAAF3,0x8FABF3,0x00FF}, + {0x8FAAF4,0x8FABF4,0x0177}, + {0x8FAAF5,0x8FABF5,0x017A}, + {0x8FAAF6,0x8FABF6,0x017E}, + {0x8FAAF7,0x8FABF7,0x017C}, + {0x8FABF8,0x8FABF8,0x003F}, + {0x8FABF9,0x8FABF9,0x003F}, + {0x8FABFA,0x8FABFA,0x003F}, + {0x8FABFB,0x8FABFB,0x003F}, + {0x8FABFC,0x8FABFC,0x003F}, + {0x8FABFD,0x8FABFD,0x003F}, + {0x8FABFE,0x8FABFE,0x003F}, + {0x8FABFF,0x8FABFF,0x003F}, +}; + + +static MY_UNICASE_INFO c8FF3[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0x8FF3A0,0x8FF3A0,0x003F}, /* 8FF3F0 */ + {0x8FF3A1,0x8FF3A1,0x003F}, + {0x8FF3A2,0x8FF3A2,0x003F}, + {0x8FF3A3,0x8FF3A3,0x003F}, + {0x8FF3A4,0x8FF3A4,0x003F}, + {0x8FF3A5,0x8FF3A5,0x003F}, + {0x8FF3A6,0x8FF3A6,0x003F}, + {0x8FF3A7,0x8FF3A7,0x003F}, + {0x8FF3A8,0x8FF3A8,0x003F}, + {0x8FF3A9,0x8FF3A9,0x003F}, + {0x8FF3AA,0x8FF3AA,0x003F}, + {0x8FF3AB,0x8FF3AB,0x003F}, + {0x8FF3AC,0x8FF3AC,0x003F}, + {0x8FF3AD,0x8FF3AD,0x003F}, + {0x8FF3AE,0x8FF3AE,0x003F}, + {0x8FF3AF,0x8FF3AF,0x003F}, + {0x8FF3B0,0x8FF3B0,0x003F}, /* 8FF3B0 */ + {0x8FF3B1,0x8FF3B1,0x003F}, + {0x8FF3B2,0x8FF3B2,0x003F}, + {0x8FF3B3,0x8FF3B3,0x003F}, + {0x8FF3B4,0x8FF3B4,0x003F}, + {0x8FF3B5,0x8FF3B5,0x003F}, + {0x8FF3B6,0x8FF3B6,0x003F}, + {0x8FF3B7,0x8FF3B7,0x003F}, + {0x8FF3B8,0x8FF3B8,0x003F}, + {0x8FF3B9,0x8FF3B9,0x003F}, + {0x8FF3BA,0x8FF3BA,0x003F}, + {0x8FF3BB,0x8FF3BB,0x003F}, + {0x8FF3BC,0x8FF3BC,0x003F}, + {0x8FF3BD,0x8FF3BD,0x003F}, + {0x8FF3BE,0x8FF3BE,0x003F}, + {0x8FF3BF,0x8FF3BF,0x003F}, + {0x8FF3C0,0x8FF3C0,0x003F}, /* 8FF3C0 */ + {0x8FF3C1,0x8FF3C1,0x003F}, + {0x8FF3C2,0x8FF3C2,0x003F}, + {0x8FF3C3,0x8FF3C3,0x003F}, + {0x8FF3C4,0x8FF3C4,0x003F}, + {0x8FF3C5,0x8FF3C5,0x003F}, + {0x8FF3C6,0x8FF3C6,0x003F}, + {0x8FF3C7,0x8FF3C7,0x003F}, + {0x8FF3C8,0x8FF3C8,0x003F}, + {0x8FF3C9,0x8FF3C9,0x003F}, + {0x8FF3CA,0x8FF3CA,0x003F}, + {0x8FF3CB,0x8FF3CB,0x003F}, + {0x8FF3CC,0x8FF3CC,0x003F}, + {0x8FF3CD,0x8FF3CD,0x003F}, + {0x8FF3CE,0x8FF3CE,0x003F}, + {0x8FF3CF,0x8FF3CF,0x003F}, + {0x8FF3D0,0x8FF3D0,0x003F}, /* 8FF3D0 */ + {0x8FF3D1,0x8FF3D1,0x003F}, + {0x8FF3D2,0x8FF3D2,0x003F}, + {0x8FF3D3,0x8FF3D3,0x003F}, + {0x8FF3D4,0x8FF3D4,0x003F}, + {0x8FF3D5,0x8FF3D5,0x003F}, + {0x8FF3D6,0x8FF3D6,0x003F}, + {0x8FF3D7,0x8FF3D7,0x003F}, + {0x8FF3D8,0x8FF3D8,0x003F}, + {0x8FF3D9,0x8FF3D9,0x003F}, + {0x8FF3DA,0x8FF3DA,0x003F}, + {0x8FF3DB,0x8FF3DB,0x003F}, + {0x8FF3DC,0x8FF3DC,0x003F}, + {0x8FF3DD,0x8FF3DD,0x003F}, + {0x8FF3DE,0x8FF3DE,0x003F}, + {0x8FF3DF,0x8FF3DF,0x003F}, + {0x8FF3E0,0x8FF3E0,0x003F}, /* 8FF3E0 */ + {0x8FF3E1,0x8FF3E1,0x003F}, + {0x8FF3E2,0x8FF3E2,0x003F}, + {0x8FF3E3,0x8FF3E3,0x003F}, + {0x8FF3E4,0x8FF3E4,0x003F}, + {0x8FF3E5,0x8FF3E5,0x003F}, + {0x8FF3E6,0x8FF3E6,0x003F}, + {0x8FF3E7,0x8FF3E7,0x003F}, + {0x8FF3E8,0x8FF3E8,0x003F}, + {0x8FF3E9,0x8FF3E9,0x003F}, + {0x8FF3EA,0x8FF3EA,0x003F}, + {0x8FF3EB,0x8FF3EB,0x003F}, + {0x8FF3EC,0x8FF3EC,0x003F}, + {0x8FF3ED,0x8FF3ED,0x003F}, + {0x8FF3EE,0x8FF3EE,0x003F}, + {0x8FF3EF,0x8FF3EF,0x003F}, + {0x8FF3F0,0x8FF3F0,0x003F}, /* 8FF3F0 */ + {0x8FF3F1,0x8FF3F1,0x003F}, + {0x8FF3F2,0x8FF3F2,0x003F}, + {0x8FF3FD,0x8FF3F3,0x2170}, + {0x8FF3FE,0x8FF3F4,0x2171}, + {0x8FF4A1,0x8FF3F5,0x2172}, + {0x8FF4A2,0x8FF3F6,0x2173}, + {0x8FF4A3,0x8FF3F7,0x2174}, + {0x8FF4A4,0x8FF3F8,0x2175}, + {0x8FF4A5,0x8FF3F9,0x2176}, + {0x8FF4A6,0x8FF3FA,0x2177}, + {0x8FF4A7,0x8FF3FB,0x2178}, + {0x8FF4A8,0x8FF3FC,0x2179}, + {0x8FF3FD,0x8FF3F3,0x2160}, + {0x8FF3FE,0x8FF3F4,0x2161}, + {0x8FF3FF,0x8FF3FF,0x003F}, +}; + + +static MY_UNICASE_INFO c8FF4[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0x8FF4A0,0x8FF4A0,0x003F}, /* 8FF4A0 */ + {0x8FF4A1,0x8FF3F5,0x2162}, + {0x8FF4A2,0x8FF3F6,0x2163}, + {0x8FF4A3,0x8FF3F7,0x2164}, + {0x8FF4A4,0x8FF3F8,0x2165}, + {0x8FF4A5,0x8FF3F9,0x2166}, + {0x8FF4A6,0x8FF3FA,0x2167}, + {0x8FF4A7,0x8FF3FB,0x2168}, + {0x8FF4A8,0x8FF3FC,0x2169}, + {0x8FF4A9,0x8FF4A9,0xFF07}, + {0x8FF4AA,0x8FF4AA,0xFF02}, + {0x8FF4AB,0x8FF4AB,0x3231}, + {0x8FF4AC,0x8FF4AC,0x2116}, + {0x8FF4AD,0x8FF4AD,0x2121}, + {0x8FF4AE,0x8FF4AE,0x70BB}, + {0x8FF4AF,0x8FF4AF,0x4EFC}, + {0x8FF4B0,0x8FF4B0,0x50F4}, /* 8FF4B0 */ + {0x8FF4B1,0x8FF4B1,0x51EC}, + {0x8FF4B2,0x8FF4B2,0x5307}, + {0x8FF4B3,0x8FF4B3,0x5324}, + {0x8FF4B4,0x8FF4B4,0xFA0E}, + {0x8FF4B5,0x8FF4B5,0x548A}, + {0x8FF4B6,0x8FF4B6,0x5759}, + {0x8FF4B7,0x8FF4B7,0xFA0F}, + {0x8FF4B8,0x8FF4B8,0xFA10}, + {0x8FF4B9,0x8FF4B9,0x589E}, + {0x8FF4BA,0x8FF4BA,0x5BEC}, + {0x8FF4BB,0x8FF4BB,0x5CF5}, + {0x8FF4BC,0x8FF4BC,0x5D53}, + {0x8FF4BD,0x8FF4BD,0xFA11}, + {0x8FF4BE,0x8FF4BE,0x5FB7}, + {0x8FF4BF,0x8FF4BF,0x6085}, + {0x8FF4C0,0x8FF4C0,0x6120}, /* 8FF4C0 */ + {0x8FF4C1,0x8FF4C1,0x654E}, + {0x8FF4C2,0x8FF4C2,0x663B}, + {0x8FF4C3,0x8FF4C3,0x6665}, + {0x8FF4C4,0x8FF4C4,0xFA12}, + {0x8FF4C5,0x8FF4C5,0xF929}, + {0x8FF4C6,0x8FF4C6,0x6801}, + {0x8FF4C7,0x8FF4C7,0xFA13}, + {0x8FF4C8,0x8FF4C8,0xFA14}, + {0x8FF4C9,0x8FF4C9,0x6A6B}, + {0x8FF4CA,0x8FF4CA,0x6AE2}, + {0x8FF4CB,0x8FF4CB,0x6DF8}, + {0x8FF4CC,0x8FF4CC,0x6DF2}, + {0x8FF4CD,0x8FF4CD,0x7028}, + {0x8FF4CE,0x8FF4CE,0xFA15}, + {0x8FF4CF,0x8FF4CF,0xFA16}, + {0x8FF4D0,0x8FF4D0,0x7501}, /* 8FF4D0 */ + {0x8FF4D1,0x8FF4D1,0x7682}, + {0x8FF4D2,0x8FF4D2,0x769E}, + {0x8FF4D3,0x8FF4D3,0xFA17}, + {0x8FF4D4,0x8FF4D4,0x7930}, + {0x8FF4D5,0x8FF4D5,0xFA18}, + {0x8FF4D6,0x8FF4D6,0xFA19}, + {0x8FF4D7,0x8FF4D7,0xFA1A}, + {0x8FF4D8,0x8FF4D8,0xFA1B}, + {0x8FF4D9,0x8FF4D9,0x7AE7}, + {0x8FF4DA,0x8FF4DA,0xFA1C}, + {0x8FF4DB,0x8FF4DB,0xFA1D}, + {0x8FF4DC,0x8FF4DC,0x7DA0}, + {0x8FF4DD,0x8FF4DD,0x7DD6}, + {0x8FF4DE,0x8FF4DE,0xFA1E}, + {0x8FF4DF,0x8FF4DF,0x8362}, + {0x8FF4E0,0x8FF4E0,0xFA1F}, /* 8FF4E0 */ + {0x8FF4E1,0x8FF4E1,0x85B0}, + {0x8FF4E2,0x8FF4E2,0xFA20}, + {0x8FF4E3,0x8FF4E3,0xFA21}, + {0x8FF4E4,0x8FF4E4,0x8807}, + {0x8FF4E5,0x8FF4E5,0xFA22}, + {0x8FF4E6,0x8FF4E6,0x8B7F}, + {0x8FF4E7,0x8FF4E7,0x8CF4}, + {0x8FF4E8,0x8FF4E8,0x8D76}, + {0x8FF4E9,0x8FF4E9,0xFA23}, + {0x8FF4EA,0x8FF4EA,0xFA24}, + {0x8FF4EB,0x8FF4EB,0xFA25}, + {0x8FF4EC,0x8FF4EC,0x90DE}, + {0x8FF4ED,0x8FF4ED,0xFA26}, + {0x8FF4EE,0x8FF4EE,0x9115}, + {0x8FF4EF,0x8FF4EF,0xFA27}, + {0x8FF4F0,0x8FF4F0,0xFA28}, /* 8FF4F0 */ + {0x8FF4F1,0x8FF4F1,0x9592}, + {0x8FF4F2,0x8FF4F2,0xF9DC}, + {0x8FF4F3,0x8FF4F3,0xFA29}, + {0x8FF4F4,0x8FF4F4,0x973B}, + {0x8FF4F5,0x8FF4F5,0x974D}, + {0x8FF4F6,0x8FF4F6,0x9751}, + {0x8FF4F7,0x8FF4F7,0xFA2A}, + {0x8FF4F8,0x8FF4F8,0xFA2B}, + {0x8FF4F9,0x8FF4F9,0xFA2C}, + {0x8FF4FA,0x8FF4FA,0x999E}, + {0x8FF4FB,0x8FF4FB,0x9AD9}, + {0x8FF4FC,0x8FF4FC,0x9B72}, + {0x8FF4FD,0x8FF4FD,0xFA2D}, + {0x8FF4FE,0x8FF4FE,0x9ED1}, + {0x8FF4FF,0x8FF4FF,0x003F}, +}; + + +static MY_UNICASE_INFO *my_caseinfo_eucjpms[512]= +{ + /* JIS-X-0208 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 1 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 2 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 3 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 4 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 5 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 6 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 7 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 8 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 9 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, cA2, cA3, NULL, NULL, cA6, cA7, /* A */ + NULL, NULL, NULL, NULL, NULL, cAD, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* B */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* C */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* D */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* E */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* F */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + + /* JIS-X-0212 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 1 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 2 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 3 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 4 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 5 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 6 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 7 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 8 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 9 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL,c8FA6,c8FA7, /* A */ + NULL, c8FA9,c8FAA,c8FAB,NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* B */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* C */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* D */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* E */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL,c8FF3,c8FF4, NULL, NULL, NULL, /* F */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +}; + + static uint16 tab_jisx0201_uni[256]={ 0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, @@ -8667,8 +10196,8 @@ static MY_CHARSET_HANDLER my_charset_handler= my_mb_ctype_mb, my_caseup_str_mb, my_casedn_str_mb, - my_caseup_mb, - my_casedn_mb, + my_caseup_ujis, + my_casedn_ujis, my_snprintf_8bit, my_long10_to_str_8bit, my_longlong10_to_str_8bit, @@ -8701,12 +10230,12 @@ CHARSET_INFO my_charset_eucjpms_japanese_ci= NULL, /* contractions */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ + my_caseinfo_eucjpms,/* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ 1, /* caseup_multiply */ - 1, /* casedn_multiply */ + 2, /* casedn_multiply */ 1, /* mbminlen */ 3, /* mbmaxlen */ 0, /* min_sort_char */ @@ -8734,12 +10263,12 @@ CHARSET_INFO my_charset_eucjpms_bin= NULL, /* sort_order_big*/ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ + my_caseinfo_eucjpms,/* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ 1, /* caseup_multiply */ - 1, /* casedn_multiply */ + 2, /* casedn_multiply */ 1, /* mbminlen */ 3, /* mbmaxlen */ 0, /* min_sort_char */ diff --git a/strings/ctype-gb2312.c b/strings/ctype-gb2312.c index 0267f35ff5c..c3a52047977 100644 --- a/strings/ctype-gb2312.c +++ b/strings/ctype-gb2312.c @@ -177,6 +177,648 @@ static uint mbcharlen_gb2312(CHARSET_INFO *cs __attribute__((unused)),uint c) } +static MY_UNICASE_INFO cA2[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA2A0,0xA2A0,0xA2A0}, /* A2A0 */ + {0xA2A1,0xA2A1,0x003F}, + {0xA2A2,0xA2A2,0x003F}, + {0xA2A3,0xA2A3,0x003F}, + {0xA2A4,0xA2A4,0x003F}, + {0xA2A5,0xA2A5,0x003F}, + {0xA2A6,0xA2A6,0x003F}, + {0xA2A7,0xA2A7,0x003F}, + {0xA2A8,0xA2A8,0x003F}, + {0xA2A9,0xA2A9,0x003F}, + {0xA2AA,0xA2AA,0x003F}, + {0xA2AB,0xA2AB,0x003F}, + {0xA2AC,0xA2AC,0x003F}, + {0xA2AD,0xA2AD,0x003F}, + {0xA2AE,0xA2AE,0x003F}, + {0xA2AF,0xA2AF,0x003F}, + {0xA2B0,0xA2B0,0x003F}, /* A2B0 */ + {0xA2B1,0xA2B1,0x2488}, + {0xA2B2,0xA2B2,0x2489}, + {0xA2B3,0xA2B3,0x248A}, + {0xA2B4,0xA2B4,0x248B}, + {0xA2B5,0xA2B5,0x248C}, + {0xA2B6,0xA2B6,0x248D}, + {0xA2B7,0xA2B7,0x248E}, + {0xA2B8,0xA2B8,0x248F}, + {0xA2B9,0xA2B9,0x2490}, + {0xA2BA,0xA2BA,0x2491}, + {0xA2BB,0xA2BB,0x2492}, + {0xA2BC,0xA2BC,0x2493}, + {0xA2BD,0xA2BD,0x2494}, + {0xA2BE,0xA2BE,0x2495}, + {0xA2BF,0xA2BF,0x2496}, + {0xA2C0,0xA2C0,0x2497}, /* A2C0 */ + {0xA2C1,0xA2C1,0x2498}, + {0xA2C2,0xA2C2,0x2499}, + {0xA2C3,0xA2C3,0x249A}, + {0xA2C4,0xA2C4,0x249B}, + {0xA2C5,0xA2C5,0x2474}, + {0xA2C6,0xA2C6,0x2475}, + {0xA2C7,0xA2C7,0x2476}, + {0xA2C8,0xA2C8,0x2477}, + {0xA2C9,0xA2C9,0x2478}, + {0xA2CA,0xA2CA,0x2479}, + {0xA2CB,0xA2CB,0x247A}, + {0xA2CC,0xA2CC,0x247B}, + {0xA2CD,0xA2CD,0x247C}, + {0xA2CE,0xA2CE,0x247D}, + {0xA2CF,0xA2CF,0x247E}, + {0xA2D0,0xA2D0,0x247F}, /* A2D0 */ + {0xA2D1,0xA2D1,0x2480}, + {0xA2D2,0xA2D2,0x2481}, + {0xA2D3,0xA2D3,0x2482}, + {0xA2D4,0xA2D4,0x2483}, + {0xA2D5,0xA2D5,0x2484}, + {0xA2D6,0xA2D6,0x2485}, + {0xA2D7,0xA2D7,0x2486}, + {0xA2D8,0xA2D8,0x2487}, + {0xA2D9,0xA2D9,0x2460}, + {0xA2DA,0xA2DA,0x2461}, + {0xA2DB,0xA2DB,0x2462}, + {0xA2DC,0xA2DC,0x2463}, + {0xA2DD,0xA2DD,0x2464}, + {0xA2DE,0xA2DE,0x2465}, + {0xA2DF,0xA2DF,0x2466}, + {0xA2E0,0xA2E0,0x2467}, /* A2E0 */ + {0xA2E1,0xA2E1,0x2468}, + {0xA2E2,0xA2E2,0x2469}, + {0xA2E3,0xA2E3,0x003F}, + {0xA2E4,0xA2E4,0x003F}, + {0xA2E5,0xA2E5,0x3220}, + {0xA2E6,0xA2E6,0x3221}, + {0xA2E7,0xA2E7,0x3222}, + {0xA2E8,0xA2E8,0x3223}, + {0xA2E9,0xA2E9,0x3224}, + {0xA2EA,0xA2EA,0x3225}, + {0xA2EB,0xA2EB,0x3226}, + {0xA2EC,0xA2EC,0x3227}, + {0xA2ED,0xA2ED,0x3228}, + {0xA2EE,0xA2EE,0x3229}, + {0xA2EF,0xA2EF,0x003F}, + {0xA2F0,0xA2F0,0x003F}, /* A2F0 */ + {0xA2F1,0xA2F1,0x2160}, + {0xA2F2,0xA2F2,0x2161}, + {0xA2F3,0xA2F3,0x2162}, + {0xA2F4,0xA2F4,0x2163}, + {0xA2F5,0xA2F5,0x2164}, + {0xA2F6,0xA2F6,0x2165}, + {0xA2F7,0xA2F7,0x2166}, + {0xA2F8,0xA2F8,0x2167}, + {0xA2F9,0xA2F9,0x2168}, + {0xA2FA,0xA2FA,0x2169}, + {0xA2FB,0xA2FB,0x216A}, + {0xA2FC,0xA2FC,0x216B}, + {0xA2FD,0xA2FD,0x003F}, + {0xA2FE,0xA2FE,0x003F}, + {0xA2FF,0xA2FF,0xA2FF} +}; + + +static MY_UNICASE_INFO cA3[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA3A0,0xA3A0,0xA3A0}, /* A3A0 */ + {0xA3A1,0xA3A1,0xFF01}, + {0xA3A2,0xA3A2,0xFF02}, + {0xA3A3,0xA3A3,0xFF03}, + {0xA3A4,0xA3A4,0xFFE5}, + {0xA3A5,0xA3A5,0xFF05}, + {0xA3A6,0xA3A6,0xFF06}, + {0xA3A7,0xA3A7,0xFF07}, + {0xA3A8,0xA3A8,0xFF08}, + {0xA3A9,0xA3A9,0xFF09}, + {0xA3AA,0xA3AA,0xFF0A}, + {0xA3AB,0xA3AB,0xFF0B}, + {0xA3AC,0xA3AC,0xFF0C}, + {0xA3AD,0xA3AD,0xFF0D}, + {0xA3AE,0xA3AE,0xFF0E}, + {0xA3AF,0xA3AF,0xFF0F}, + {0xA3B0,0xA3B0,0xFF10}, /* A3B0 */ + {0xA3B1,0xA3B1,0xFF11}, + {0xA3B2,0xA3B2,0xFF12}, + {0xA3B3,0xA3B3,0xFF13}, + {0xA3B4,0xA3B4,0xFF14}, + {0xA3B5,0xA3B5,0xFF15}, + {0xA3B6,0xA3B6,0xFF16}, + {0xA3B7,0xA3B7,0xFF17}, + {0xA3B8,0xA3B8,0xFF18}, + {0xA3B9,0xA3B9,0xFF19}, + {0xA3BA,0xA3BA,0xFF1A}, + {0xA3BB,0xA3BB,0xFF1B}, + {0xA3BC,0xA3BC,0xFF1C}, + {0xA3BD,0xA3BD,0xFF1D}, + {0xA3BE,0xA3BE,0xFF1E}, + {0xA3BF,0xA3BF,0xFF1F}, + {0xA3C0,0xA3C0,0xFF20}, /* A3C0 */ + {0xA3C1,0xA3E1,0xFF21}, + {0xA3C2,0xA3E2,0xFF22}, + {0xA3C3,0xA3E3,0xFF23}, + {0xA3C4,0xA3E4,0xFF24}, + {0xA3C5,0xA3E5,0xFF25}, + {0xA3C6,0xA3E6,0xFF26}, + {0xA3C7,0xA3E7,0xFF27}, + {0xA3C8,0xA3E8,0xFF28}, + {0xA3C9,0xA3E9,0xFF29}, + {0xA3CA,0xA3EA,0xFF2A}, + {0xA3CB,0xA3EB,0xFF2B}, + {0xA3CC,0xA3EC,0xFF2C}, + {0xA3CD,0xA3ED,0xFF2D}, + {0xA3CE,0xA3EE,0xFF2E}, + {0xA3CF,0xA3EF,0xFF2F}, + {0xA3D0,0xA3F0,0xFF30}, /* A3D0 */ + {0xA3D1,0xA3F1,0xFF31}, + {0xA3D2,0xA3F2,0xFF32}, + {0xA3D3,0xA3F3,0xFF33}, + {0xA3D4,0xA3F4,0xFF34}, + {0xA3D5,0xA3F5,0xFF35}, + {0xA3D6,0xA3F6,0xFF36}, + {0xA3D7,0xA3F7,0xFF37}, + {0xA3D8,0xA3F8,0xFF38}, + {0xA3D9,0xA3F9,0xFF39}, + {0xA3DA,0xA3FA,0xFF3A}, + {0xA3DB,0xA3DB,0xFF3B}, + {0xA3DC,0xA3DC,0xFF3C}, + {0xA3DD,0xA3DD,0xFF3D}, + {0xA3DE,0xA3DE,0xFF3E}, + {0xA3DF,0xA3DF,0xFF3F}, + {0xA3E0,0xA3E0,0xFF40}, /* A3E0 */ + {0xA3C1,0xA3E1,0xFF41}, + {0xA3C2,0xA3E2,0xFF42}, + {0xA3C3,0xA3E3,0xFF43}, + {0xA3C4,0xA3E4,0xFF44}, + {0xA3C5,0xA3E5,0xFF45}, + {0xA3C6,0xA3E6,0xFF46}, + {0xA3C7,0xA3E7,0xFF47}, + {0xA3C8,0xA3E8,0xFF48}, + {0xA3C9,0xA3E9,0xFF49}, + {0xA3CA,0xA3EA,0xFF4A}, + {0xA3CB,0xA3EB,0xFF4B}, + {0xA3CC,0xA3EC,0xFF4C}, + {0xA3CD,0xA3ED,0xFF4D}, + {0xA3CE,0xA3EE,0xFF4E}, + {0xA3CF,0xA3EF,0xFF4F}, + {0xA3D0,0xA3F0,0xFF50}, /* A3F0 */ + {0xA3D1,0xA3F1,0xFF51}, + {0xA3D2,0xA3F2,0xFF52}, + {0xA3D3,0xA3F3,0xFF53}, + {0xA3D4,0xA3F4,0xFF54}, + {0xA3D5,0xA3F5,0xFF55}, + {0xA3D6,0xA3F6,0xFF56}, + {0xA3D7,0xA3F7,0xFF57}, + {0xA3D8,0xA3F8,0xFF58}, + {0xA3D9,0xA3F9,0xFF59}, + {0xA3DA,0xA3FA,0xFF5A}, + {0xA3FB,0xA3FB,0xFF5B}, + {0xA3FC,0xA3FC,0xFF5C}, + {0xA3FD,0xA3FD,0xFF5D}, + {0xA3FE,0xA3FE,0xFFE3}, + {0xA3FF,0xA3FF,0xA3FF} +}; + + +static MY_UNICASE_INFO cA6[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA6A0,0xA6A0,0xA6A0}, /* A6A0 */ + {0xA6A1,0xA6C1,0x0391}, + {0xA6A2,0xA6C2,0x0392}, + {0xA6A3,0xA6C3,0x0393}, + {0xA6A4,0xA6C4,0x0394}, + {0xA6A5,0xA6C5,0x0395}, + {0xA6A6,0xA6C6,0x0396}, + {0xA6A7,0xA6C7,0x0397}, + {0xA6A8,0xA6C8,0x0398}, + {0xA6A9,0xA6C9,0x0399}, + {0xA6AA,0xA6CA,0x039A}, + {0xA6AB,0xA6CB,0x039B}, + {0xA6AC,0xA6CC,0x039C}, + {0xA6AD,0xA6CD,0x039D}, + {0xA6AE,0xA6CE,0x039E}, + {0xA6AF,0xA6CF,0x039F}, + {0xA6B0,0xA6D0,0x03A0}, /* A6B0 */ + {0xA6B1,0xA6D1,0x03A1}, + {0xA6B2,0xA6D2,0x03A3}, + {0xA6B3,0xA6D3,0x03A4}, + {0xA6B4,0xA6D4,0x03A5}, + {0xA6B5,0xA6D5,0x03A6}, + {0xA6B6,0xA6D6,0x03A7}, + {0xA6B7,0xA6D7,0x03A8}, + {0xA6B8,0xA6D8,0x03A9}, + {0xA6B9,0xA6B9,0x003F}, + {0xA6BA,0xA6BA,0x003F}, + {0xA6BB,0xA6BB,0x003F}, + {0xA6BC,0xA6BC,0x003F}, + {0xA6BD,0xA6BD,0x003F}, + {0xA6BE,0xA6BE,0x003F}, + {0xA6BF,0xA6BF,0x003F}, + {0xA6C0,0xA6C0,0x003F}, /* A6C0 */ + {0xA6A1,0xA6C1,0x03B1}, + {0xA6A2,0xA6C2,0x03B2}, + {0xA6A3,0xA6C3,0x03B3}, + {0xA6A4,0xA6C4,0x03B4}, + {0xA6A5,0xA6C5,0x03B5}, + {0xA6A6,0xA6C6,0x03B6}, + {0xA6A7,0xA6C7,0x03B7}, + {0xA6A8,0xA6C8,0x03B8}, + {0xA6A9,0xA6C9,0x03B9}, + {0xA6AA,0xA6CA,0x03BA}, + {0xA6AB,0xA6CB,0x03BB}, + {0xA6AC,0xA6CC,0x03BC}, + {0xA6AD,0xA6CD,0x03BD}, + {0xA6AE,0xA6CE,0x03BE}, + {0xA6AF,0xA6CF,0x03BF}, + {0xA6B0,0xA6D0,0x03C0}, /* A6D0 */ + {0xA6B1,0xA6D1,0x03C1}, + {0xA6B2,0xA6D2,0x03C3}, + {0xA6B3,0xA6D3,0x03C4}, + {0xA6B4,0xA6D4,0x03C5}, + {0xA6B5,0xA6D5,0x03C6}, + {0xA6B6,0xA6D6,0x03C7}, + {0xA6B7,0xA6D7,0x03C8}, + {0xA6B8,0xA6D8,0x03C9}, + {0xA6D9,0xA6D9,0x003F}, + {0xA6DA,0xA6DA,0x003F}, + {0xA6DB,0xA6DB,0x003F}, + {0xA6DC,0xA6DC,0x003F}, + {0xA6DD,0xA6DD,0x003F}, + {0xA6DE,0xA6DE,0x003F}, + {0xA6DF,0xA6DF,0x003F}, + {0xA6E0,0xA6E0,0x003F}, /* A6E0 */ + {0xA6E1,0xA6E1,0x003F}, + {0xA6E2,0xA6E2,0x003F}, + {0xA6E3,0xA6E3,0x003F}, + {0xA6E4,0xA6E4,0x003F}, + {0xA6E5,0xA6E5,0x003F}, + {0xA6E6,0xA6E6,0x003F}, + {0xA6E7,0xA6E7,0x003F}, + {0xA6E8,0xA6E8,0x003F}, + {0xA6E9,0xA6E9,0x003F}, + {0xA6EA,0xA6EA,0x003F}, + {0xA6EB,0xA6EB,0x003F}, + {0xA6EC,0xA6EC,0x003F}, + {0xA6ED,0xA6ED,0x003F}, + {0xA6EE,0xA6EE,0x003F}, + {0xA6EF,0xA6EF,0x003F}, + {0xA6F0,0xA6F0,0x003F}, /* A6F0 */ + {0xA6F1,0xA6F1,0x003F}, + {0xA6F2,0xA6F2,0x003F}, + {0xA6F3,0xA6F3,0x003F}, + {0xA6F4,0xA6F4,0x003F}, + {0xA6F5,0xA6F5,0x003F}, + {0xA6F6,0xA6F6,0x003F}, + {0xA6F7,0xA6F7,0x003F}, + {0xA6F8,0xA6F8,0x003F}, + {0xA6F9,0xA6F9,0x003F}, + {0xA6FA,0xA6FA,0x003F}, + {0xA6FB,0xA6FB,0x003F}, + {0xA6FC,0xA6FC,0x003F}, + {0xA6FD,0xA6FD,0x003F}, + {0xA6FE,0xA6FE,0x003F}, + {0xA6FF,0xA6FF,0xA6FF} +}; + + +static MY_UNICASE_INFO cA7[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA7A0,0xA7A0,0xA7A0}, /* A7A0 */ + {0xA7A1,0xA7D1,0x0410}, + {0xA7A2,0xA7D2,0x0411}, + {0xA7A3,0xA7D3,0x0412}, + {0xA7A4,0xA7D4,0x0413}, + {0xA7A5,0xA7D5,0x0414}, + {0xA7A6,0xA7D6,0x0415}, + {0xA7A7,0xA7D7,0x0401}, + {0xA7A8,0xA7D8,0x0416}, + {0xA7A9,0xA7D9,0x0417}, + {0xA7AA,0xA7DA,0x0418}, + {0xA7AB,0xA7DB,0x0419}, + {0xA7AC,0xA7DC,0x041A}, + {0xA7AD,0xA7DD,0x041B}, + {0xA7AE,0xA7DE,0x041C}, + {0xA7AF,0xA7DF,0x041D}, + {0xA7B0,0xA7E0,0x041E}, /* A7B0 */ + {0xA7B1,0xA7E1,0x041F}, + {0xA7B2,0xA7E2,0x0420}, + {0xA7B3,0xA7E3,0x0421}, + {0xA7B4,0xA7E4,0x0422}, + {0xA7B5,0xA7E5,0x0423}, + {0xA7B6,0xA7E6,0x0424}, + {0xA7B7,0xA7E7,0x0425}, + {0xA7B8,0xA7E8,0x0426}, + {0xA7B9,0xA7E9,0x0427}, + {0xA7BA,0xA7EA,0x0428}, + {0xA7BB,0xA7EB,0x0429}, + {0xA7BC,0xA7EC,0x042A}, + {0xA7BD,0xA7ED,0x042B}, + {0xA7BE,0xA7EE,0x042C}, + {0xA7BF,0xA7EF,0x042D}, + {0xA7C0,0xA7F0,0x042E}, /* A7C0 */ + {0xA7C1,0xA7F1,0x042F}, + {0xA7C2,0xA7C2,0x003F}, + {0xA7C3,0xA7C3,0x003F}, + {0xA7C4,0xA7C4,0x003F}, + {0xA7C5,0xA7C5,0x003F}, + {0xA7C6,0xA7C6,0x003F}, + {0xA7C7,0xA7C7,0x003F}, + {0xA7C8,0xA7C8,0x003F}, + {0xA7C9,0xA7C9,0x003F}, + {0xA7CA,0xA7CA,0x003F}, + {0xA7CB,0xA7CB,0x003F}, + {0xA7CC,0xA7CC,0x003F}, + {0xA7CD,0xA7CD,0x003F}, + {0xA7CE,0xA7CE,0x003F}, + {0xA7CF,0xA7CF,0x003F}, + {0xA7D0,0xA7D0,0x003F}, /* A7D0 */ + {0xA7A1,0xA7D1,0x0430}, + {0xA7A2,0xA7D2,0x0431}, + {0xA7A3,0xA7D3,0x0432}, + {0xA7A4,0xA7D4,0x0433}, + {0xA7A5,0xA7D5,0x0434}, + {0xA7A6,0xA7D6,0x0435}, + {0xA7A7,0xA7D7,0x0451}, + {0xA7A8,0xA7D8,0x0436}, + {0xA7A9,0xA7D9,0x0437}, + {0xA7AA,0xA7DA,0x0438}, + {0xA7AB,0xA7DB,0x0439}, + {0xA7AC,0xA7DC,0x043A}, + {0xA7AD,0xA7DD,0x043B}, + {0xA7AE,0xA7DE,0x043C}, + {0xA7AF,0xA7DF,0x043D}, + {0xA7B0,0xA7E0,0x043E}, /* A7E0 */ + {0xA7B1,0xA7E1,0x043F}, + {0xA7B2,0xA7E2,0x0440}, + {0xA7B3,0xA7E3,0x0441}, + {0xA7B4,0xA7E4,0x0442}, + {0xA7B5,0xA7E5,0x0443}, + {0xA7B6,0xA7E6,0x0444}, + {0xA7B7,0xA7E7,0x0445}, + {0xA7B8,0xA7E8,0x0446}, + {0xA7B9,0xA7E9,0x0447}, + {0xA7BA,0xA7EA,0x0448}, + {0xA7BB,0xA7EB,0x0449}, + {0xA7BC,0xA7EC,0x044A}, + {0xA7BD,0xA7ED,0x044B}, + {0xA7BE,0xA7EE,0x044C}, + {0xA7BF,0xA7EF,0x044D}, + {0xA7C0,0xA7F0,0x044E}, /* A7F0 */ + {0xA7C1,0xA7F1,0x044F}, + {0xA7F2,0xA7F2,0x003F}, + {0xA7F3,0xA7F3,0x003F}, + {0xA7F4,0xA7F4,0x003F}, + {0xA7F5,0xA7F5,0x003F}, + {0xA7F6,0xA7F6,0x003F}, + {0xA7F7,0xA7F7,0x003F}, + {0xA7F8,0xA7F8,0x003F}, + {0xA7F9,0xA7F9,0x003F}, + {0xA7FA,0xA7FA,0x003F}, + {0xA7FB,0xA7FB,0x003F}, + {0xA7FC,0xA7FC,0x003F}, + {0xA7FD,0xA7FD,0x003F}, + {0xA7FE,0xA7FE,0x003F}, + {0xA7FF,0xA7FF,0xA7FF} +}; + + +static MY_UNICASE_INFO cA8[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA8A0,0xA8A0,0xA8A0}, /* A8A0 */ + {0xA8A1,0xA8A1,0x0101}, + {0xA8A2,0xA8A2,0x00E1}, + {0xA8A3,0xA8A3,0x01CE}, + {0xA8A4,0xA8A4,0x00E0}, + {0xA8A5,0xA8A5,0x0113}, + {0xA8A6,0xA8A6,0x00E9}, + {0xA8A7,0xA8A7,0x011B}, + {0xA8A8,0xA8A8,0x00E8}, + {0xA8A9,0xA8A9,0x012B}, + {0xA8AA,0xA8AA,0x00ED}, + {0xA8AB,0xA8AB,0x01D0}, + {0xA8AC,0xA8AC,0x00EC}, + {0xA8AD,0xA8AD,0x014D}, + {0xA8AE,0xA8AE,0x00F3}, + {0xA8AF,0xA8AF,0x01D2}, + {0xA8B0,0xA8B0,0x00F2}, /* A8B0 */ + {0xA8B1,0xA8B1,0x016B}, + {0xA8B2,0xA8B2,0x00FA}, + {0xA8B3,0xA8B3,0x01D4}, + {0xA8B4,0xA8B4,0x00F9}, + {0xA8B5,0xA8B5,0x01D6}, + {0xA8B6,0xA8B6,0x01D8}, + {0xA8B7,0xA8B7,0x01DA}, + {0xA8B8,0xA8B8,0x01DC}, + {0xA8B9,0xA8B9,0x00FC}, + {0xA8BA,0xA8BA,0x00EA}, + {0xA8BB,0xA8BB,0x003F}, + {0xA8BC,0xA8BC,0x003F}, + {0xA8BD,0xA8BD,0x003F}, + {0xA8BE,0xA8BE,0x003F}, + {0xA8BF,0xA8BF,0x003F}, + {0xA8C0,0xA8C0,0x003F}, /* A8C0 */ + {0xA8C1,0xA8C1,0x003F}, + {0xA8C2,0xA8C2,0x003F}, + {0xA8C3,0xA8C3,0x003F}, + {0xA8C4,0xA8C4,0x003F}, + {0xA8C5,0xA8C5,0x3105}, + {0xA8C6,0xA8C6,0x3106}, + {0xA8C7,0xA8C7,0x3107}, + {0xA8C8,0xA8C8,0x3108}, + {0xA8C9,0xA8C9,0x3109}, + {0xA8CA,0xA8CA,0x310A}, + {0xA8CB,0xA8CB,0x310B}, + {0xA8CC,0xA8CC,0x310C}, + {0xA8CD,0xA8CD,0x310D}, + {0xA8CE,0xA8CE,0x310E}, + {0xA8CF,0xA8CF,0x310F}, + {0xA8D0,0xA8D0,0x3110}, /* A8D0 */ + {0xA8D1,0xA8D1,0x3111}, + {0xA8D2,0xA8D2,0x3112}, + {0xA8D3,0xA8D3,0x3113}, + {0xA8D4,0xA8D4,0x3114}, + {0xA8D5,0xA8D5,0x3115}, + {0xA8D6,0xA8D6,0x3116}, + {0xA8D7,0xA8D7,0x3117}, + {0xA8D8,0xA8D8,0x3118}, + {0xA8D9,0xA8D9,0x3119}, + {0xA8DA,0xA8DA,0x311A}, + {0xA8DB,0xA8DB,0x311B}, + {0xA8DC,0xA8DC,0x311C}, + {0xA8DD,0xA8DD,0x311D}, + {0xA8DE,0xA8DE,0x311E}, + {0xA8DF,0xA8DF,0x311F}, + {0xA8E0,0xA8E0,0x3120}, /* A8E0 */ + {0xA8E1,0xA8E1,0x3121}, + {0xA8E2,0xA8E2,0x3122}, + {0xA8E3,0xA8E3,0x3123}, + {0xA8E4,0xA8E4,0x3124}, + {0xA8E5,0xA8E5,0x3125}, + {0xA8E6,0xA8E6,0x3126}, + {0xA8E7,0xA8E7,0x3127}, + {0xA8E8,0xA8E8,0x3128}, + {0xA8E9,0xA8E9,0x3129}, + {0xA8EA,0xA8EA,0x003F}, + {0xA8EB,0xA8EB,0x003F}, + {0xA8EC,0xA8EC,0x003F}, + {0xA8ED,0xA8ED,0x003F}, + {0xA8EE,0xA8EE,0x003F}, + {0xA8EF,0xA8EF,0x003F}, + {0xA8F0,0xA8F0,0x003F}, /* A8F0 */ + {0xA8F1,0xA8F1,0x003F}, + {0xA8F2,0xA8F2,0x003F}, + {0xA8F3,0xA8F3,0x003F}, + {0xA8F4,0xA8F4,0x003F}, + {0xA8F5,0xA8F5,0x003F}, + {0xA8F6,0xA8F6,0x003F}, + {0xA8F7,0xA8F7,0x003F}, + {0xA8F8,0xA8F8,0x003F}, + {0xA8F9,0xA8F9,0x003F}, + {0xA8FA,0xA8FA,0x003F}, + {0xA8FB,0xA8FB,0x003F}, + {0xA8FC,0xA8FC,0x003F}, + {0xA8FD,0xA8FD,0x003F}, + {0xA8FE,0xA8FE,0x003F}, + {0xA8FF,0xA8FF,0xA8FF} +}; + + +static MY_UNICASE_INFO *my_caseinfo_gb2312[256]= +{ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 1 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 2 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 3 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 4 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 5 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 6 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 7 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 8 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 9 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, cA2, cA3, NULL, NULL, cA6, cA7, /* A */ + cA8, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* B */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* C */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* D */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* E */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* F */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +}; + + /* page 0 0x2121-0x2658 */ static uint16 tab_gb2312_uni0[]={ 0x3000,0x3001,0x3002,0x30FB,0x02C9,0x02C7,0x00A8,0x3003, @@ -5781,7 +6423,7 @@ CHARSET_INFO my_charset_gb2312_chinese_ci= NULL, /* sort_order_big*/ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ + my_caseinfo_gb2312, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -5813,7 +6455,7 @@ CHARSET_INFO my_charset_gb2312_bin= NULL, /* sort_order_big*/ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ + my_caseinfo_gb2312, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ diff --git a/strings/ctype-gbk.c b/strings/ctype-gbk.c index 7b8bb85652b..52a8d994fa4 100644 --- a/strings/ctype-gbk.c +++ b/strings/ctype-gbk.c @@ -137,6 +137,864 @@ static uchar NEAR to_upper_gbk[]= (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377', }; + +static MY_UNICASE_INFO cA2[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA240,0xA240,0x003F}, /* A240 */ + {0xA241,0xA241,0x003F}, + {0xA242,0xA242,0x003F}, + {0xA243,0xA243,0x003F}, + {0xA244,0xA244,0x003F}, + {0xA245,0xA245,0x003F}, + {0xA246,0xA246,0x003F}, + {0xA247,0xA247,0x003F}, + {0xA248,0xA248,0x003F}, + {0xA249,0xA249,0x003F}, + {0xA24A,0xA24A,0x003F}, + {0xA24B,0xA24B,0x003F}, + {0xA24C,0xA24C,0x003F}, + {0xA24D,0xA24D,0x003F}, + {0xA24E,0xA24E,0x003F}, + {0xA24F,0xA24F,0x003F}, + {0xA250,0xA250,0x003F}, /* A250 */ + {0xA251,0xA251,0x003F}, + {0xA252,0xA252,0x003F}, + {0xA253,0xA253,0x003F}, + {0xA254,0xA254,0x003F}, + {0xA255,0xA255,0x003F}, + {0xA256,0xA256,0x003F}, + {0xA257,0xA257,0x003F}, + {0xA258,0xA258,0x003F}, + {0xA259,0xA259,0x003F}, + {0xA25A,0xA25A,0x003F}, + {0xA25B,0xA25B,0x003F}, + {0xA25C,0xA25C,0x003F}, + {0xA25D,0xA25D,0x003F}, + {0xA25E,0xA25E,0x003F}, + {0xA25F,0xA25F,0x003F}, + {0xA260,0xA260,0x003F}, /* A260 */ + {0xA261,0xA261,0x003F}, + {0xA262,0xA262,0x003F}, + {0xA263,0xA263,0x003F}, + {0xA264,0xA264,0x003F}, + {0xA265,0xA265,0x003F}, + {0xA266,0xA266,0x003F}, + {0xA267,0xA267,0x003F}, + {0xA268,0xA268,0x003F}, + {0xA269,0xA269,0x003F}, + {0xA26A,0xA26A,0x003F}, + {0xA26B,0xA26B,0x003F}, + {0xA26C,0xA26C,0x003F}, + {0xA26D,0xA26D,0x003F}, + {0xA26E,0xA26E,0x003F}, + {0xA26F,0xA26F,0x003F}, + {0xA270,0xA270,0x003F}, /* A270 */ + {0xA271,0xA271,0x003F}, + {0xA272,0xA272,0x003F}, + {0xA273,0xA273,0x003F}, + {0xA274,0xA274,0x003F}, + {0xA275,0xA275,0x003F}, + {0xA276,0xA276,0x003F}, + {0xA277,0xA277,0x003F}, + {0xA278,0xA278,0x003F}, + {0xA279,0xA279,0x003F}, + {0xA27A,0xA27A,0x003F}, + {0xA27B,0xA27B,0x003F}, + {0xA27C,0xA27C,0x003F}, + {0xA27D,0xA27D,0x003F}, + {0xA27E,0xA27E,0x003F}, + {0xA27F,0xA27F,0xA27F}, + {0xA280,0xA280,0x003F}, /* A280 */ + {0xA281,0xA281,0x003F}, + {0xA282,0xA282,0x003F}, + {0xA283,0xA283,0x003F}, + {0xA284,0xA284,0x003F}, + {0xA285,0xA285,0x003F}, + {0xA286,0xA286,0x003F}, + {0xA287,0xA287,0x003F}, + {0xA288,0xA288,0x003F}, + {0xA289,0xA289,0x003F}, + {0xA28A,0xA28A,0x003F}, + {0xA28B,0xA28B,0x003F}, + {0xA28C,0xA28C,0x003F}, + {0xA28D,0xA28D,0x003F}, + {0xA28E,0xA28E,0x003F}, + {0xA28F,0xA28F,0x003F}, + {0xA290,0xA290,0x003F}, /* A290 */ + {0xA291,0xA291,0x003F}, + {0xA292,0xA292,0x003F}, + {0xA293,0xA293,0x003F}, + {0xA294,0xA294,0x003F}, + {0xA295,0xA295,0x003F}, + {0xA296,0xA296,0x003F}, + {0xA297,0xA297,0x003F}, + {0xA298,0xA298,0x003F}, + {0xA299,0xA299,0x003F}, + {0xA29A,0xA29A,0x003F}, + {0xA29B,0xA29B,0x003F}, + {0xA29C,0xA29C,0x003F}, + {0xA29D,0xA29D,0x003F}, + {0xA29E,0xA29E,0x003F}, + {0xA29F,0xA29F,0x003F}, + {0xA2A0,0xA2A0,0x003F}, /* A2A0 */ + {0xA2F1,0xA2A1,0x2170}, + {0xA2F2,0xA2A2,0x2171}, + {0xA2F3,0xA2A3,0x2172}, + {0xA2F4,0xA2A4,0x2173}, + {0xA2F5,0xA2A5,0x2174}, + {0xA2F6,0xA2A6,0x2175}, + {0xA2F7,0xA2A7,0x2176}, + {0xA2F8,0xA2A8,0x2177}, + {0xA2F9,0xA2A9,0x2178}, + {0xA2FA,0xA2AA,0x2179}, + {0xA2AB,0xA2AB,0x003F}, + {0xA2AC,0xA2AC,0x003F}, + {0xA2AD,0xA2AD,0x003F}, + {0xA2AE,0xA2AE,0x003F}, + {0xA2AF,0xA2AF,0x003F}, + {0xA2B0,0xA2B0,0x003F}, /* A2B0 */ + {0xA2B1,0xA2B1,0x2488}, + {0xA2B2,0xA2B2,0x2489}, + {0xA2B3,0xA2B3,0x248A}, + {0xA2B4,0xA2B4,0x248B}, + {0xA2B5,0xA2B5,0x248C}, + {0xA2B6,0xA2B6,0x248D}, + {0xA2B7,0xA2B7,0x248E}, + {0xA2B8,0xA2B8,0x248F}, + {0xA2B9,0xA2B9,0x2490}, + {0xA2BA,0xA2BA,0x2491}, + {0xA2BB,0xA2BB,0x2492}, + {0xA2BC,0xA2BC,0x2493}, + {0xA2BD,0xA2BD,0x2494}, + {0xA2BE,0xA2BE,0x2495}, + {0xA2BF,0xA2BF,0x2496}, + {0xA2C0,0xA2C0,0x2497}, /* A2C0 */ + {0xA2C1,0xA2C1,0x2498}, + {0xA2C2,0xA2C2,0x2499}, + {0xA2C3,0xA2C3,0x249A}, + {0xA2C4,0xA2C4,0x249B}, + {0xA2C5,0xA2C5,0x2474}, + {0xA2C6,0xA2C6,0x2475}, + {0xA2C7,0xA2C7,0x2476}, + {0xA2C8,0xA2C8,0x2477}, + {0xA2C9,0xA2C9,0x2478}, + {0xA2CA,0xA2CA,0x2479}, + {0xA2CB,0xA2CB,0x247A}, + {0xA2CC,0xA2CC,0x247B}, + {0xA2CD,0xA2CD,0x247C}, + {0xA2CE,0xA2CE,0x247D}, + {0xA2CF,0xA2CF,0x247E}, + {0xA2D0,0xA2D0,0x247F}, /* A2D0 */ + {0xA2D1,0xA2D1,0x2480}, + {0xA2D2,0xA2D2,0x2481}, + {0xA2D3,0xA2D3,0x2482}, + {0xA2D4,0xA2D4,0x2483}, + {0xA2D5,0xA2D5,0x2484}, + {0xA2D6,0xA2D6,0x2485}, + {0xA2D7,0xA2D7,0x2486}, + {0xA2D8,0xA2D8,0x2487}, + {0xA2D9,0xA2D9,0x2460}, + {0xA2DA,0xA2DA,0x2461}, + {0xA2DB,0xA2DB,0x2462}, + {0xA2DC,0xA2DC,0x2463}, + {0xA2DD,0xA2DD,0x2464}, + {0xA2DE,0xA2DE,0x2465}, + {0xA2DF,0xA2DF,0x2466}, + {0xA2E0,0xA2E0,0x2467}, /* A2E0 */ + {0xA2E1,0xA2E1,0x2468}, + {0xA2E2,0xA2E2,0x2469}, + {0xA2E3,0xA2E3,0x003F}, + {0xA2E4,0xA2E4,0x003F}, + {0xA2E5,0xA2E5,0x3220}, + {0xA2E6,0xA2E6,0x3221}, + {0xA2E7,0xA2E7,0x3222}, + {0xA2E8,0xA2E8,0x3223}, + {0xA2E9,0xA2E9,0x3224}, + {0xA2EA,0xA2EA,0x3225}, + {0xA2EB,0xA2EB,0x3226}, + {0xA2EC,0xA2EC,0x3227}, + {0xA2ED,0xA2ED,0x3228}, + {0xA2EE,0xA2EE,0x3229}, + {0xA2EF,0xA2EF,0x003F}, + {0xA2F0,0xA2F0,0x003F}, /* A2F0 */ + {0xA2F1,0xA2A1,0x2160}, + {0xA2F2,0xA2A2,0x2161}, + {0xA2F3,0xA2A3,0x2162}, + {0xA2F4,0xA2A4,0x2163}, + {0xA2F5,0xA2A5,0x2164}, + {0xA2F6,0xA2A6,0x2165}, + {0xA2F7,0xA2A7,0x2166}, + {0xA2F8,0xA2A8,0x2167}, + {0xA2F9,0xA2A9,0x2168}, + {0xA2FA,0xA2AA,0x2169}, + {0xA2FB,0xA2FB,0x216A}, + {0xA2FC,0xA2FC,0x216B}, + {0xA2FD,0xA2FD,0x003F}, + {0xA2FE,0xA2FE,0x003F}, + {0xA2FF,0xA2FF,0xA2FF} +}; + +static MY_UNICASE_INFO cA3[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA340,0xA340,0x003F}, /* A340 */ + {0xA341,0xA341,0x003F}, + {0xA342,0xA342,0x003F}, + {0xA343,0xA343,0x003F}, + {0xA344,0xA344,0x003F}, + {0xA345,0xA345,0x003F}, + {0xA346,0xA346,0x003F}, + {0xA347,0xA347,0x003F}, + {0xA348,0xA348,0x003F}, + {0xA349,0xA349,0x003F}, + {0xA34A,0xA34A,0x003F}, + {0xA34B,0xA34B,0x003F}, + {0xA34C,0xA34C,0x003F}, + {0xA34D,0xA34D,0x003F}, + {0xA34E,0xA34E,0x003F}, + {0xA34F,0xA34F,0x003F}, + {0xA350,0xA350,0x003F}, /* A350 */ + {0xA351,0xA351,0x003F}, + {0xA352,0xA352,0x003F}, + {0xA353,0xA353,0x003F}, + {0xA354,0xA354,0x003F}, + {0xA355,0xA355,0x003F}, + {0xA356,0xA356,0x003F}, + {0xA357,0xA357,0x003F}, + {0xA358,0xA358,0x003F}, + {0xA359,0xA359,0x003F}, + {0xA35A,0xA35A,0x003F}, + {0xA35B,0xA35B,0x003F}, + {0xA35C,0xA35C,0x003F}, + {0xA35D,0xA35D,0x003F}, + {0xA35E,0xA35E,0x003F}, + {0xA35F,0xA35F,0x003F}, + {0xA360,0xA360,0x003F}, /* A360 */ + {0xA361,0xA361,0x003F}, + {0xA362,0xA362,0x003F}, + {0xA363,0xA363,0x003F}, + {0xA364,0xA364,0x003F}, + {0xA365,0xA365,0x003F}, + {0xA366,0xA366,0x003F}, + {0xA367,0xA367,0x003F}, + {0xA368,0xA368,0x003F}, + {0xA369,0xA369,0x003F}, + {0xA36A,0xA36A,0x003F}, + {0xA36B,0xA36B,0x003F}, + {0xA36C,0xA36C,0x003F}, + {0xA36D,0xA36D,0x003F}, + {0xA36E,0xA36E,0x003F}, + {0xA36F,0xA36F,0x003F}, + {0xA370,0xA370,0x003F}, /* A370 */ + {0xA371,0xA371,0x003F}, + {0xA372,0xA372,0x003F}, + {0xA373,0xA373,0x003F}, + {0xA374,0xA374,0x003F}, + {0xA375,0xA375,0x003F}, + {0xA376,0xA376,0x003F}, + {0xA377,0xA377,0x003F}, + {0xA378,0xA378,0x003F}, + {0xA379,0xA379,0x003F}, + {0xA37A,0xA37A,0x003F}, + {0xA37B,0xA37B,0x003F}, + {0xA37C,0xA37C,0x003F}, + {0xA37D,0xA37D,0x003F}, + {0xA37E,0xA37E,0x003F}, + {0xA37F,0xA37F,0xA37F}, + {0xA380,0xA380,0x003F}, /* A380 */ + {0xA381,0xA381,0x003F}, + {0xA382,0xA382,0x003F}, + {0xA383,0xA383,0x003F}, + {0xA384,0xA384,0x003F}, + {0xA385,0xA385,0x003F}, + {0xA386,0xA386,0x003F}, + {0xA387,0xA387,0x003F}, + {0xA388,0xA388,0x003F}, + {0xA389,0xA389,0x003F}, + {0xA38A,0xA38A,0x003F}, + {0xA38B,0xA38B,0x003F}, + {0xA38C,0xA38C,0x003F}, + {0xA38D,0xA38D,0x003F}, + {0xA38E,0xA38E,0x003F}, + {0xA38F,0xA38F,0x003F}, + {0xA390,0xA390,0x003F}, /* A390 */ + {0xA391,0xA391,0x003F}, + {0xA392,0xA392,0x003F}, + {0xA393,0xA393,0x003F}, + {0xA394,0xA394,0x003F}, + {0xA395,0xA395,0x003F}, + {0xA396,0xA396,0x003F}, + {0xA397,0xA397,0x003F}, + {0xA398,0xA398,0x003F}, + {0xA399,0xA399,0x003F}, + {0xA39A,0xA39A,0x003F}, + {0xA39B,0xA39B,0x003F}, + {0xA39C,0xA39C,0x003F}, + {0xA39D,0xA39D,0x003F}, + {0xA39E,0xA39E,0x003F}, + {0xA39F,0xA39F,0x003F}, + {0xA3A0,0xA3A0,0x003F}, /* A3A0 */ + {0xA3A1,0xA3A1,0xFF01}, + {0xA3A2,0xA3A2,0xFF02}, + {0xA3A3,0xA3A3,0xFF03}, + {0xA3A4,0xA3A4,0xFFE5}, + {0xA3A5,0xA3A5,0xFF05}, + {0xA3A6,0xA3A6,0xFF06}, + {0xA3A7,0xA3A7,0xFF07}, + {0xA3A8,0xA3A8,0xFF08}, + {0xA3A9,0xA3A9,0xFF09}, + {0xA3AA,0xA3AA,0xFF0A}, + {0xA3AB,0xA3AB,0xFF0B}, + {0xA3AC,0xA3AC,0xFF0C}, + {0xA3AD,0xA3AD,0xFF0D}, + {0xA3AE,0xA3AE,0xFF0E}, + {0xA3AF,0xA3AF,0xFF0F}, + {0xA3B0,0xA3B0,0xFF10}, /* A3B0 */ + {0xA3B1,0xA3B1,0xFF11}, + {0xA3B2,0xA3B2,0xFF12}, + {0xA3B3,0xA3B3,0xFF13}, + {0xA3B4,0xA3B4,0xFF14}, + {0xA3B5,0xA3B5,0xFF15}, + {0xA3B6,0xA3B6,0xFF16}, + {0xA3B7,0xA3B7,0xFF17}, + {0xA3B8,0xA3B8,0xFF18}, + {0xA3B9,0xA3B9,0xFF19}, + {0xA3BA,0xA3BA,0xFF1A}, + {0xA3BB,0xA3BB,0xFF1B}, + {0xA3BC,0xA3BC,0xFF1C}, + {0xA3BD,0xA3BD,0xFF1D}, + {0xA3BE,0xA3BE,0xFF1E}, + {0xA3BF,0xA3BF,0xFF1F}, + {0xA3C0,0xA3C0,0xFF20}, /* A3C0 */ + {0xA3C1,0xA3E1,0xFF21}, + {0xA3C2,0xA3E2,0xFF22}, + {0xA3C3,0xA3E3,0xFF23}, + {0xA3C4,0xA3E4,0xFF24}, + {0xA3C5,0xA3E5,0xFF25}, + {0xA3C6,0xA3E6,0xFF26}, + {0xA3C7,0xA3E7,0xFF27}, + {0xA3C8,0xA3E8,0xFF28}, + {0xA3C9,0xA3E9,0xFF29}, + {0xA3CA,0xA3EA,0xFF2A}, + {0xA3CB,0xA3EB,0xFF2B}, + {0xA3CC,0xA3EC,0xFF2C}, + {0xA3CD,0xA3ED,0xFF2D}, + {0xA3CE,0xA3EE,0xFF2E}, + {0xA3CF,0xA3EF,0xFF2F}, + {0xA3D0,0xA3F0,0xFF30}, /* A3D0 */ + {0xA3D1,0xA3F1,0xFF31}, + {0xA3D2,0xA3F2,0xFF32}, + {0xA3D3,0xA3F3,0xFF33}, + {0xA3D4,0xA3F4,0xFF34}, + {0xA3D5,0xA3F5,0xFF35}, + {0xA3D6,0xA3F6,0xFF36}, + {0xA3D7,0xA3F7,0xFF37}, + {0xA3D8,0xA3F8,0xFF38}, + {0xA3D9,0xA3F9,0xFF39}, + {0xA3DA,0xA3FA,0xFF3A}, + {0xA3DB,0xA3DB,0xFF3B}, + {0xA3DC,0xA3DC,0xFF3C}, + {0xA3DD,0xA3DD,0xFF3D}, + {0xA3DE,0xA3DE,0xFF3E}, + {0xA3DF,0xA3DF,0xFF3F}, + {0xA3E0,0xA3E0,0xFF40}, /* A3E0 */ + {0xA3C1,0xA3E1,0xFF41}, + {0xA3C2,0xA3E2,0xFF42}, + {0xA3C3,0xA3E3,0xFF43}, + {0xA3C4,0xA3E4,0xFF44}, + {0xA3C5,0xA3E5,0xFF45}, + {0xA3C6,0xA3E6,0xFF46}, + {0xA3C7,0xA3E7,0xFF47}, + {0xA3C8,0xA3E8,0xFF48}, + {0xA3C9,0xA3E9,0xFF49}, + {0xA3CA,0xA3EA,0xFF4A}, + {0xA3CB,0xA3EB,0xFF4B}, + {0xA3CC,0xA3EC,0xFF4C}, + {0xA3CD,0xA3ED,0xFF4D}, + {0xA3CE,0xA3EE,0xFF4E}, + {0xA3CF,0xA3EF,0xFF4F}, + {0xA3D0,0xA3F0,0xFF50}, /* A3F0 */ + {0xA3D1,0xA3F1,0xFF51}, + {0xA3D2,0xA3F2,0xFF52}, + {0xA3D3,0xA3F3,0xFF53}, + {0xA3D4,0xA3F4,0xFF54}, + {0xA3D5,0xA3F5,0xFF55}, + {0xA3D6,0xA3F6,0xFF56}, + {0xA3D7,0xA3F7,0xFF57}, + {0xA3D8,0xA3F8,0xFF58}, + {0xA3D9,0xA3F9,0xFF59}, + {0xA3DA,0xA3FA,0xFF5A}, + {0xA3FB,0xA3FB,0xFF5B}, + {0xA3FC,0xA3FC,0xFF5C}, + {0xA3FD,0xA3FD,0xFF5D}, + {0xA3FE,0xA3FE,0xFFE3}, + {0xA3FF,0xA3FF,0xA3FF} +}; + + +static MY_UNICASE_INFO cA6[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA640,0xA640,0x003F}, /* A640 */ + {0xA641,0xA641,0x003F}, + {0xA642,0xA642,0x003F}, + {0xA643,0xA643,0x003F}, + {0xA644,0xA644,0x003F}, + {0xA645,0xA645,0x003F}, + {0xA646,0xA646,0x003F}, + {0xA647,0xA647,0x003F}, + {0xA648,0xA648,0x003F}, + {0xA649,0xA649,0x003F}, + {0xA64A,0xA64A,0x003F}, + {0xA64B,0xA64B,0x003F}, + {0xA64C,0xA64C,0x003F}, + {0xA64D,0xA64D,0x003F}, + {0xA64E,0xA64E,0x003F}, + {0xA64F,0xA64F,0x003F}, + {0xA650,0xA650,0x003F}, /* A650 */ + {0xA651,0xA651,0x003F}, + {0xA652,0xA652,0x003F}, + {0xA653,0xA653,0x003F}, + {0xA654,0xA654,0x003F}, + {0xA655,0xA655,0x003F}, + {0xA656,0xA656,0x003F}, + {0xA657,0xA657,0x003F}, + {0xA658,0xA658,0x003F}, + {0xA659,0xA659,0x003F}, + {0xA65A,0xA65A,0x003F}, + {0xA65B,0xA65B,0x003F}, + {0xA65C,0xA65C,0x003F}, + {0xA65D,0xA65D,0x003F}, + {0xA65E,0xA65E,0x003F}, + {0xA65F,0xA65F,0x003F}, + {0xA660,0xA660,0x003F}, /* A660 */ + {0xA661,0xA661,0x003F}, + {0xA662,0xA662,0x003F}, + {0xA663,0xA663,0x003F}, + {0xA664,0xA664,0x003F}, + {0xA665,0xA665,0x003F}, + {0xA666,0xA666,0x003F}, + {0xA667,0xA667,0x003F}, + {0xA668,0xA668,0x003F}, + {0xA669,0xA669,0x003F}, + {0xA66A,0xA66A,0x003F}, + {0xA66B,0xA66B,0x003F}, + {0xA66C,0xA66C,0x003F}, + {0xA66D,0xA66D,0x003F}, + {0xA66E,0xA66E,0x003F}, + {0xA66F,0xA66F,0x003F}, + {0xA670,0xA670,0x003F}, /* A670 */ + {0xA671,0xA671,0x003F}, + {0xA672,0xA672,0x003F}, + {0xA673,0xA673,0x003F}, + {0xA674,0xA674,0x003F}, + {0xA675,0xA675,0x003F}, + {0xA676,0xA676,0x003F}, + {0xA677,0xA677,0x003F}, + {0xA678,0xA678,0x003F}, + {0xA679,0xA679,0x003F}, + {0xA67A,0xA67A,0x003F}, + {0xA67B,0xA67B,0x003F}, + {0xA67C,0xA67C,0x003F}, + {0xA67D,0xA67D,0x003F}, + {0xA67E,0xA67E,0x003F}, + {0xA67F,0xA67F,0xA67F}, + {0xA680,0xA680,0x003F}, /* A680 */ + {0xA681,0xA681,0x003F}, + {0xA682,0xA682,0x003F}, + {0xA683,0xA683,0x003F}, + {0xA684,0xA684,0x003F}, + {0xA685,0xA685,0x003F}, + {0xA686,0xA686,0x003F}, + {0xA687,0xA687,0x003F}, + {0xA688,0xA688,0x003F}, + {0xA689,0xA689,0x003F}, + {0xA68A,0xA68A,0x003F}, + {0xA68B,0xA68B,0x003F}, + {0xA68C,0xA68C,0x003F}, + {0xA68D,0xA68D,0x003F}, + {0xA68E,0xA68E,0x003F}, + {0xA68F,0xA68F,0x003F}, + {0xA690,0xA690,0x003F}, /* A690 */ + {0xA691,0xA691,0x003F}, + {0xA692,0xA692,0x003F}, + {0xA693,0xA693,0x003F}, + {0xA694,0xA694,0x003F}, + {0xA695,0xA695,0x003F}, + {0xA696,0xA696,0x003F}, + {0xA697,0xA697,0x003F}, + {0xA698,0xA698,0x003F}, + {0xA699,0xA699,0x003F}, + {0xA69A,0xA69A,0x003F}, + {0xA69B,0xA69B,0x003F}, + {0xA69C,0xA69C,0x003F}, + {0xA69D,0xA69D,0x003F}, + {0xA69E,0xA69E,0x003F}, + {0xA69F,0xA69F,0x003F}, + {0xA6A0,0xA6A0,0x003F}, /* A6A0 */ + {0xA6A1,0xA6C1,0x0391}, + {0xA6A2,0xA6C2,0x0392}, + {0xA6A3,0xA6C3,0x0393}, + {0xA6A4,0xA6C4,0x0394}, + {0xA6A5,0xA6C5,0x0395}, + {0xA6A6,0xA6C6,0x0396}, + {0xA6A7,0xA6C7,0x0397}, + {0xA6A8,0xA6C8,0x0398}, + {0xA6A9,0xA6C9,0x0399}, + {0xA6AA,0xA6CA,0x039A}, + {0xA6AB,0xA6CB,0x039B}, + {0xA6AC,0xA6CC,0x039C}, + {0xA6AD,0xA6CD,0x039D}, + {0xA6AE,0xA6CE,0x039E}, + {0xA6AF,0xA6CF,0x039F}, + {0xA6B0,0xA6D0,0x03A0}, /* A6B0 */ + {0xA6B1,0xA6D1,0x03A1}, + {0xA6B2,0xA6D2,0x03A3}, + {0xA6B3,0xA6D3,0x03A4}, + {0xA6B4,0xA6D4,0x03A5}, + {0xA6B5,0xA6D5,0x03A6}, + {0xA6B6,0xA6D6,0x03A7}, + {0xA6B7,0xA6D7,0x03A8}, + {0xA6B8,0xA6D8,0x03A9}, + {0xA6B9,0xA6B9,0x003F}, + {0xA6BA,0xA6BA,0x003F}, + {0xA6BB,0xA6BB,0x003F}, + {0xA6BC,0xA6BC,0x003F}, + {0xA6BD,0xA6BD,0x003F}, + {0xA6BE,0xA6BE,0x003F}, + {0xA6BF,0xA6BF,0x003F}, + {0xA6C0,0xA6C0,0x003F}, /* A6C0 */ + {0xA6A1,0xA6C1,0x03B1}, + {0xA6A2,0xA6C2,0x03B2}, + {0xA6A3,0xA6C3,0x03B3}, + {0xA6A4,0xA6C4,0x03B4}, + {0xA6A5,0xA6C5,0x03B5}, + {0xA6A6,0xA6C6,0x03B6}, + {0xA6A7,0xA6C7,0x03B7}, + {0xA6A8,0xA6C8,0x03B8}, + {0xA6A9,0xA6C9,0x03B9}, + {0xA6AA,0xA6CA,0x03BA}, + {0xA6AB,0xA6CB,0x03BB}, + {0xA6AC,0xA6CC,0x03BC}, + {0xA6AD,0xA6CD,0x03BD}, + {0xA6AE,0xA6CE,0x03BE}, + {0xA6AF,0xA6CF,0x03BF}, + {0xA6B0,0xA6D0,0x03C0}, /* A6D0 */ + {0xA6B1,0xA6D1,0x03C1}, + {0xA6B2,0xA6D2,0x03C3}, + {0xA6B3,0xA6D3,0x03C4}, + {0xA6B4,0xA6D4,0x03C5}, + {0xA6B5,0xA6D5,0x03C6}, + {0xA6B6,0xA6D6,0x03C7}, + {0xA6B7,0xA6D7,0x03C8}, + {0xA6B8,0xA6D8,0x03C9}, + {0xA6D9,0xA6D9,0x003F}, + {0xA6DA,0xA6DA,0x003F}, + {0xA6DB,0xA6DB,0x003F}, + {0xA6DC,0xA6DC,0x003F}, + {0xA6DD,0xA6DD,0x003F}, + {0xA6DE,0xA6DE,0x003F}, + {0xA6DF,0xA6DF,0x003F}, + {0xA6E0,0xA6E0,0xFE35}, /* A6E0 */ + {0xA6E1,0xA6E1,0xFE36}, + {0xA6E2,0xA6E2,0xFE39}, + {0xA6E3,0xA6E3,0xFE3A}, + {0xA6E4,0xA6E4,0xFE3F}, + {0xA6E5,0xA6E5,0xFE40}, + {0xA6E6,0xA6E6,0xFE3D}, + {0xA6E7,0xA6E7,0xFE3E}, + {0xA6E8,0xA6E8,0xFE41}, + {0xA6E9,0xA6E9,0xFE42}, + {0xA6EA,0xA6EA,0xFE43}, + {0xA6EB,0xA6EB,0xFE44}, + {0xA6EC,0xA6EC,0x003F}, + {0xA6ED,0xA6ED,0x003F}, + {0xA6EE,0xA6EE,0xFE3B}, + {0xA6EF,0xA6EF,0xFE3C}, + {0xA6F0,0xA6F0,0xFE37}, /* A6F0 */ + {0xA6F1,0xA6F1,0xFE38}, + {0xA6F2,0xA6F2,0xFE31}, + {0xA6F3,0xA6F3,0x003F}, + {0xA6F4,0xA6F4,0xFE33}, + {0xA6F5,0xA6F5,0xFE34}, + {0xA6F6,0xA6F6,0x003F}, + {0xA6F7,0xA6F7,0x003F}, + {0xA6F8,0xA6F8,0x003F}, + {0xA6F9,0xA6F9,0x003F}, + {0xA6FA,0xA6FA,0x003F}, + {0xA6FB,0xA6FB,0x003F}, + {0xA6FC,0xA6FC,0x003F}, + {0xA6FD,0xA6FD,0x003F}, + {0xA6FE,0xA6FE,0x003F}, + {0xA6FF,0xA6FF,0xA6FF} +}; + + +static MY_UNICASE_INFO cA7[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA740,0xA740,0x003F}, /* A740 */ + {0xA741,0xA741,0x003F}, + {0xA742,0xA742,0x003F}, + {0xA743,0xA743,0x003F}, + {0xA744,0xA744,0x003F}, + {0xA745,0xA745,0x003F}, + {0xA746,0xA746,0x003F}, + {0xA747,0xA747,0x003F}, + {0xA748,0xA748,0x003F}, + {0xA749,0xA749,0x003F}, + {0xA74A,0xA74A,0x003F}, + {0xA74B,0xA74B,0x003F}, + {0xA74C,0xA74C,0x003F}, + {0xA74D,0xA74D,0x003F}, + {0xA74E,0xA74E,0x003F}, + {0xA74F,0xA74F,0x003F}, + {0xA750,0xA750,0x003F}, /* A750 */ + {0xA751,0xA751,0x003F}, + {0xA752,0xA752,0x003F}, + {0xA753,0xA753,0x003F}, + {0xA754,0xA754,0x003F}, + {0xA755,0xA755,0x003F}, + {0xA756,0xA756,0x003F}, + {0xA757,0xA757,0x003F}, + {0xA758,0xA758,0x003F}, + {0xA759,0xA759,0x003F}, + {0xA75A,0xA75A,0x003F}, + {0xA75B,0xA75B,0x003F}, + {0xA75C,0xA75C,0x003F}, + {0xA75D,0xA75D,0x003F}, + {0xA75E,0xA75E,0x003F}, + {0xA75F,0xA75F,0x003F}, + {0xA760,0xA760,0x003F}, /* A760 */ + {0xA761,0xA761,0x003F}, + {0xA762,0xA762,0x003F}, + {0xA763,0xA763,0x003F}, + {0xA764,0xA764,0x003F}, + {0xA765,0xA765,0x003F}, + {0xA766,0xA766,0x003F}, + {0xA767,0xA767,0x003F}, + {0xA768,0xA768,0x003F}, + {0xA769,0xA769,0x003F}, + {0xA76A,0xA76A,0x003F}, + {0xA76B,0xA76B,0x003F}, + {0xA76C,0xA76C,0x003F}, + {0xA76D,0xA76D,0x003F}, + {0xA76E,0xA76E,0x003F}, + {0xA76F,0xA76F,0x003F}, + {0xA770,0xA770,0x003F}, /* A770 */ + {0xA771,0xA771,0x003F}, + {0xA772,0xA772,0x003F}, + {0xA773,0xA773,0x003F}, + {0xA774,0xA774,0x003F}, + {0xA775,0xA775,0x003F}, + {0xA776,0xA776,0x003F}, + {0xA777,0xA777,0x003F}, + {0xA778,0xA778,0x003F}, + {0xA779,0xA779,0x003F}, + {0xA77A,0xA77A,0x003F}, + {0xA77B,0xA77B,0x003F}, + {0xA77C,0xA77C,0x003F}, + {0xA77D,0xA77D,0x003F}, + {0xA77E,0xA77E,0x003F}, + {0xA77F,0xA77F,0xA77F}, + {0xA780,0xA780,0x003F}, /* A780 */ + {0xA781,0xA781,0x003F}, + {0xA782,0xA782,0x003F}, + {0xA783,0xA783,0x003F}, + {0xA784,0xA784,0x003F}, + {0xA785,0xA785,0x003F}, + {0xA786,0xA786,0x003F}, + {0xA787,0xA787,0x003F}, + {0xA788,0xA788,0x003F}, + {0xA789,0xA789,0x003F}, + {0xA78A,0xA78A,0x003F}, + {0xA78B,0xA78B,0x003F}, + {0xA78C,0xA78C,0x003F}, + {0xA78D,0xA78D,0x003F}, + {0xA78E,0xA78E,0x003F}, + {0xA78F,0xA78F,0x003F}, + {0xA790,0xA790,0x003F}, /* A790 */ + {0xA791,0xA791,0x003F}, + {0xA792,0xA792,0x003F}, + {0xA793,0xA793,0x003F}, + {0xA794,0xA794,0x003F}, + {0xA795,0xA795,0x003F}, + {0xA796,0xA796,0x003F}, + {0xA797,0xA797,0x003F}, + {0xA798,0xA798,0x003F}, + {0xA799,0xA799,0x003F}, + {0xA79A,0xA79A,0x003F}, + {0xA79B,0xA79B,0x003F}, + {0xA79C,0xA79C,0x003F}, + {0xA79D,0xA79D,0x003F}, + {0xA79E,0xA79E,0x003F}, + {0xA79F,0xA79F,0x003F}, + {0xA7A0,0xA7A0,0x003F}, /* A7A0 */ + {0xA7A1,0xA7D1,0x0410}, + {0xA7A2,0xA7D2,0x0411}, + {0xA7A3,0xA7D3,0x0412}, + {0xA7A4,0xA7D4,0x0413}, + {0xA7A5,0xA7D5,0x0414}, + {0xA7A6,0xA7D6,0x0415}, + {0xA7A7,0xA7D7,0x0401}, + {0xA7A8,0xA7D8,0x0416}, + {0xA7A9,0xA7D9,0x0417}, + {0xA7AA,0xA7DA,0x0418}, + {0xA7AB,0xA7DB,0x0419}, + {0xA7AC,0xA7DC,0x041A}, + {0xA7AD,0xA7DD,0x041B}, + {0xA7AE,0xA7DE,0x041C}, + {0xA7AF,0xA7DF,0x041D}, + {0xA7B0,0xA7E0,0x041E}, /* A7B0 */ + {0xA7B1,0xA7E1,0x041F}, + {0xA7B2,0xA7E2,0x0420}, + {0xA7B3,0xA7E3,0x0421}, + {0xA7B4,0xA7E4,0x0422}, + {0xA7B5,0xA7E5,0x0423}, + {0xA7B6,0xA7E6,0x0424}, + {0xA7B7,0xA7E7,0x0425}, + {0xA7B8,0xA7E8,0x0426}, + {0xA7B9,0xA7E9,0x0427}, + {0xA7BA,0xA7EA,0x0428}, + {0xA7BB,0xA7EB,0x0429}, + {0xA7BC,0xA7EC,0x042A}, + {0xA7BD,0xA7ED,0x042B}, + {0xA7BE,0xA7EE,0x042C}, + {0xA7BF,0xA7EF,0x042D}, + {0xA7C0,0xA7F0,0x042E}, /* A7C0 */ + {0xA7C1,0xA7F1,0x042F}, + {0xA7C2,0xA7C2,0x003F}, + {0xA7C3,0xA7C3,0x003F}, + {0xA7C4,0xA7C4,0x003F}, + {0xA7C5,0xA7C5,0x003F}, + {0xA7C6,0xA7C6,0x003F}, + {0xA7C7,0xA7C7,0x003F}, + {0xA7C8,0xA7C8,0x003F}, + {0xA7C9,0xA7C9,0x003F}, + {0xA7CA,0xA7CA,0x003F}, + {0xA7CB,0xA7CB,0x003F}, + {0xA7CC,0xA7CC,0x003F}, + {0xA7CD,0xA7CD,0x003F}, + {0xA7CE,0xA7CE,0x003F}, + {0xA7CF,0xA7CF,0x003F}, + {0xA7D0,0xA7D0,0x003F}, /* A7D0 */ + {0xA7A1,0xA7D1,0x0430}, + {0xA7A2,0xA7D2,0x0431}, + {0xA7A3,0xA7D3,0x0432}, + {0xA7A4,0xA7D4,0x0433}, + {0xA7A5,0xA7D5,0x0434}, + {0xA7A6,0xA7D6,0x0435}, + {0xA7A7,0xA7D7,0x0451}, + {0xA7A8,0xA7D8,0x0436}, + {0xA7A9,0xA7D9,0x0437}, + {0xA7AA,0xA7DA,0x0438}, + {0xA7AB,0xA7DB,0x0439}, + {0xA7AC,0xA7DC,0x043A}, + {0xA7AD,0xA7DD,0x043B}, + {0xA7AE,0xA7DE,0x043C}, + {0xA7AF,0xA7DF,0x043D}, + {0xA7B0,0xA7E0,0x043E}, /* A7E0 */ + {0xA7B1,0xA7E1,0x043F}, + {0xA7B2,0xA7E2,0x0440}, + {0xA7B3,0xA7E3,0x0441}, + {0xA7B4,0xA7E4,0x0442}, + {0xA7B5,0xA7E5,0x0443}, + {0xA7B6,0xA7E6,0x0444}, + {0xA7B7,0xA7E7,0x0445}, + {0xA7B8,0xA7E8,0x0446}, + {0xA7B9,0xA7E9,0x0447}, + {0xA7BA,0xA7EA,0x0448}, + {0xA7BB,0xA7EB,0x0449}, + {0xA7BC,0xA7EC,0x044A}, + {0xA7BD,0xA7ED,0x044B}, + {0xA7BE,0xA7EE,0x044C}, + {0xA7BF,0xA7EF,0x044D}, + {0xA7C0,0xA7F0,0x044E}, /* A7F0 */ + {0xA7C1,0xA7F1,0x044F}, + {0xA7F2,0xA7F2,0x003F}, + {0xA7F3,0xA7F3,0x003F}, + {0xA7F4,0xA7F4,0x003F}, + {0xA7F5,0xA7F5,0x003F}, + {0xA7F6,0xA7F6,0x003F}, + {0xA7F7,0xA7F7,0x003F}, + {0xA7F8,0xA7F8,0x003F}, + {0xA7F9,0xA7F9,0x003F}, + {0xA7FA,0xA7FA,0x003F}, + {0xA7FB,0xA7FB,0x003F}, + {0xA7FC,0xA7FC,0x003F}, + {0xA7FD,0xA7FD,0x003F}, + {0xA7FE,0xA7FE,0x003F}, + {0xA7FF,0xA7FF,0xA7FF} +}; + + +static MY_UNICASE_INFO *my_caseinfo_gbk[256]= +{ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 1 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 2 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 3 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 4 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 5 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 6 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 7 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 8 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 9 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, cA2, cA3, NULL, NULL, cA6, cA7, /* A */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* B */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* C */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* D */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* E */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* F */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +}; + + + static uchar NEAR sort_order_gbk[]= { '\000','\001','\002','\003','\004','\005','\006','\007', @@ -10039,7 +10897,7 @@ CHARSET_INFO my_charset_gbk_chinese_ci= NULL, /* sort_order_big*/ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ + my_caseinfo_gbk, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -10071,7 +10929,7 @@ CHARSET_INFO my_charset_gbk_bin= NULL, /* sort_order_big*/ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ + my_caseinfo_gbk, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ diff --git a/strings/ctype-latin1.c b/strings/ctype-latin1.c index e5333c4101b..dbd91c09637 100644 --- a/strings/ctype-latin1.c +++ b/strings/ctype-latin1.c @@ -678,13 +678,12 @@ void my_hash_sort_latin1_de(CHARSET_INFO *cs __attribute__((unused)), const uchar *key, size_t len, ulong *nr1, ulong *nr2) { - const uchar *end= key+len; + const uchar *end; /* Remove end space. We have to do this to be able to compare 'AE' and 'Ä' as identical */ - while (end > key && end[-1] == ' ') - end--; + end= skip_trailing_space(key, len); for (; key < end ; key++) { diff --git a/strings/ctype-mb.c b/strings/ctype-mb.c index 903811e2ab9..252c5a08b8c 100644 --- a/strings/ctype-mb.c +++ b/strings/ctype-mb.c @@ -62,6 +62,17 @@ size_t my_casedn_str_mb(CHARSET_INFO * cs, char *str) } +static inline MY_UNICASE_INFO* +get_case_info_for_ch(CHARSET_INFO *cs, uint page, uint offs) +{ + MY_UNICASE_INFO *p; + return cs->caseinfo ? ((p= cs->caseinfo[page]) ? &p[offs] : NULL) : NULL; +} + + +/* + For character sets which don't change octet length in case conversion. +*/ size_t my_caseup_mb(CHARSET_INFO * cs, char *src, size_t srclen, char *dst __attribute__((unused)), size_t dstlen __attribute__((unused))) @@ -70,11 +81,23 @@ size_t my_caseup_mb(CHARSET_INFO * cs, char *src, size_t srclen, register char *srcend= src + srclen; register uchar *map= cs->to_upper; + DBUG_ASSERT(cs->caseup_multiply == 1); DBUG_ASSERT(src == dst && srclen == dstlen); + DBUG_ASSERT(cs->mbmaxlen == 2); + while (src < srcend) { if ((l=my_ismbchar(cs, src, srcend))) - src+= l; + { + MY_UNICASE_INFO *ch; + if ((ch= get_case_info_for_ch(cs, (uchar) src[0], (uchar) src[1]))) + { + *src++= ch->toupper >> 8; + *src++= ch->toupper & 0xFF; + } + else + src+= l; + } else { *src=(char) map[(uchar) *src]; @@ -93,11 +116,23 @@ size_t my_casedn_mb(CHARSET_INFO * cs, char *src, size_t srclen, register char *srcend= src + srclen; register uchar *map=cs->to_lower; + DBUG_ASSERT(cs->casedn_multiply == 1); DBUG_ASSERT(src == dst && srclen == dstlen); + DBUG_ASSERT(cs->mbmaxlen == 2); + while (src < srcend) { if ((l= my_ismbchar(cs, src, srcend))) - src+= l; + { + MY_UNICASE_INFO *ch; + if ((ch= get_case_info_for_ch(cs, (uchar) src[0], (uchar) src[1]))) + { + *src++= ch->tolower >> 8; + *src++= ch->tolower & 0xFF; + } + else + src+= l; + } else { *src= (char) map[(uchar)*src]; @@ -109,6 +144,75 @@ size_t my_casedn_mb(CHARSET_INFO * cs, char *src, size_t srclen, /* + Case folding functions for character set + where case conversion can change string octet length. + For example, in EUCKR, + _euckr 0xA9A5 == "LATIN LETTER DOTLESS I" (Turkish letter) + is upper-cased to to + _euckr 0x49 "LATIN CAPITAL LETTER I" ('usual' letter I) + Length is reduced in this example from two bytes to one byte. +*/ +static size_t +my_casefold_mb_varlen(CHARSET_INFO *cs, + char *src, size_t srclen, + char *dst, size_t dstlen __attribute__((unused)), + uchar *map, + size_t is_upper) +{ + char *srcend= src + srclen, *dst0= dst; + + DBUG_ASSERT(cs->mbmaxlen == 2); + + while (src < srcend) + { + size_t mblen= my_ismbchar(cs, src, srcend); + if (mblen) + { + MY_UNICASE_INFO *ch; + if ((ch= get_case_info_for_ch(cs, (uchar) src[0], (uchar) src[1]))) + { + int code= is_upper ? ch->toupper : ch->tolower; + src+= 2; + if (code > 0xFF) + *dst++= code >> 8; + *dst++= code & 0xFF; + } + else + { + *dst++= *src++; + *dst++= *src++; + } + } + else + { + *dst++= (char) map[(uchar) *src++]; + } + } + return (size_t) (dst - dst0); +} + + +size_t +my_casedn_mb_varlen(CHARSET_INFO * cs, char *src, size_t srclen, + char *dst, size_t dstlen) +{ + DBUG_ASSERT(dstlen >= srclen * cs->casedn_multiply); + DBUG_ASSERT(src != dst || cs->casedn_multiply == 1); + return my_casefold_mb_varlen(cs, src, srclen, dst, dstlen, cs->to_lower, 0); +} + + +size_t +my_caseup_mb_varlen(CHARSET_INFO * cs, char *src, size_t srclen, + char *dst, size_t dstlen) +{ + DBUG_ASSERT(dstlen >= srclen * cs->caseup_multiply); + DBUG_ASSERT(src != dst || cs->caseup_multiply == 1); + return my_casefold_mb_varlen(cs, src, srclen, dst, dstlen, cs->to_upper, 1); +} + + +/* my_strcasecmp_mb() returns 0 if strings are equal, non-zero otherwise. */ @@ -469,14 +573,11 @@ static void my_hash_sort_mb_bin(CHARSET_INFO *cs __attribute__((unused)), { const uchar *pos = key; - key+= len; - /* Remove trailing spaces. We have to do this to be able to compare 'A ' and 'A' as identical */ - while (key > pos && key[-1] == ' ') - key--; + key= skip_trailing_space(key, len); for (; pos < (uchar*) key ; pos++) { diff --git a/strings/ctype-simple.c b/strings/ctype-simple.c index 4f3aaa6f668..6ff8c83dcf7 100644 --- a/strings/ctype-simple.c +++ b/strings/ctype-simple.c @@ -304,14 +304,13 @@ void my_hash_sort_simple(CHARSET_INFO *cs, ulong *nr1, ulong *nr2) { register uchar *sort_order=cs->sort_order; - const uchar *end= key + len; + const uchar *end; /* Remove end space. We have to do this to be able to compare 'A ' and 'A' as identical */ - while (end > key && end[-1] == ' ') - end--; + end= skip_trailing_space(key, len); for (; key < (uchar*) end ; key++) { @@ -1165,9 +1164,8 @@ size_t my_well_formed_len_8bit(CHARSET_INFO *cs __attribute__((unused)), size_t my_lengthsp_8bit(CHARSET_INFO *cs __attribute__((unused)), const char *ptr, size_t length) { - const char *end= ptr+length; - while (end > ptr && end[-1] == ' ') - end--; + const char *end; + end= (const char *) skip_trailing_space((const uchar *)ptr, length); return (size_t) (end-ptr); } diff --git a/strings/ctype-sjis.c b/strings/ctype-sjis.c index 60280efe087..cdf5e75f16f 100644 --- a/strings/ctype-sjis.c +++ b/strings/ctype-sjis.c @@ -197,6 +197,881 @@ static uint mbcharlen_sjis(CHARSET_INFO *cs __attribute__((unused)),uint c) #define sjiscode(c,d) ((((uint) (uchar)(c)) << 8) | (uint) (uchar) (d)) +static MY_UNICASE_INFO c81[256]= +{ + /* 8100-810F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8110-811F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8120-812F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8130-813F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + + {0x8140,0x8140,0x3000}, /* 8140-814F */ + {0x8141,0x8141,0x3001}, + {0x8142,0x8142,0x3002}, + {0x8143,0x8143,0xFF0C}, + {0x8144,0x8144,0xFF0E}, + {0x8145,0x8145,0x30FB}, + {0x8146,0x8146,0xFF1A}, + {0x8147,0x8147,0xFF1B}, + {0x8148,0x8148,0xFF1F}, + {0x8149,0x8149,0xFF01}, + {0x814A,0x814A,0x309B}, + {0x814B,0x814B,0x309C}, + {0x814C,0x814C,0x00B4}, + {0x814D,0x814D,0xFF40}, + {0x814E,0x814E,0x00A8}, + {0x814F,0x814F,0xFF3E}, + {0x8150,0x8150,0xFFE3}, /* 8150-815F */ + {0x8151,0x8151,0xFF3F}, + {0x8152,0x8152,0x30FD}, + {0x8153,0x8153,0x30FE}, + {0x8154,0x8154,0x309D}, + {0x8155,0x8155,0x309E}, + {0x8156,0x8156,0x3003}, + {0x8157,0x8157,0x4EDD}, + {0x8158,0x8158,0x3005}, + {0x8159,0x8159,0x3006}, + {0x815A,0x815A,0x3007}, + {0x815B,0x815B,0x30FC}, + {0x815C,0x815C,0x2015}, + {0x815D,0x815D,0x2010}, + {0x815E,0x815E,0xFF0F}, + {0x815F,0x815F,0xFF3C}, + {0x8160,0x8160,0xFF5E}, /* 8160-816F */ + {0x8161,0x8161,0x2225}, + {0x8162,0x8162,0xFF5C}, + {0x8163,0x8163,0x2026}, + {0x8164,0x8164,0x2025}, + {0x8165,0x8165,0x2018}, + {0x8166,0x8166,0x2019}, + {0x8167,0x8167,0x201C}, + {0x8168,0x8168,0x201D}, + {0x8169,0x8169,0xFF08}, + {0x816A,0x816A,0xFF09}, + {0x816B,0x816B,0x3014}, + {0x816C,0x816C,0x3015}, + {0x816D,0x816D,0xFF3B}, + {0x816E,0x816E,0xFF3D}, + {0x816F,0x816F,0xFF5B}, + {0x8170,0x8170,0xFF5D}, /* 8170-817F */ + {0x8171,0x8171,0x3008}, + {0x8172,0x8172,0x3009}, + {0x8173,0x8173,0x300A}, + {0x8174,0x8174,0x300B}, + {0x8175,0x8175,0x300C}, + {0x8176,0x8176,0x300D}, + {0x8177,0x8177,0x300E}, + {0x8178,0x8178,0x300F}, + {0x8179,0x8179,0x3010}, + {0x817A,0x817A,0x3011}, + {0x817B,0x817B,0xFF0B}, + {0x817C,0x817C,0xFF0D}, + {0x817D,0x817D,0x00B1}, + {0x817E,0x817E,0x00D7}, + {0,0,0}, + {0x8180,0x8180,0x00F7}, /* 8180-818F */ + {0x8181,0x8181,0xFF1D}, + {0x8182,0x8182,0x2260}, + {0x8183,0x8183,0xFF1C}, + {0x8184,0x8184,0xFF1E}, + {0x8185,0x8185,0x2266}, + {0x8186,0x8186,0x2267}, + {0x8187,0x8187,0x221E}, + {0x8188,0x8188,0x2234}, + {0x8189,0x8189,0x2642}, + {0x818A,0x818A,0x2640}, + {0x818B,0x818B,0x00B0}, + {0x818C,0x818C,0x2032}, + {0x818D,0x818D,0x2033}, + {0x818E,0x818E,0x2103}, + {0x818F,0x818F,0xFFE5}, + {0x8190,0x8190,0xFF04}, /* 8190-819F*/ + {0x8191,0x8191,0xFFE0}, + {0x8192,0x8192,0xFFE1}, + {0x8193,0x8193,0xFF05}, + {0x8194,0x8194,0xFF03}, + {0x8195,0x8195,0xFF06}, + {0x8196,0x8196,0xFF0A}, + {0x8197,0x8197,0xFF20}, + {0x8198,0x8198,0x00A7}, + {0x8199,0x8199,0x2606}, + {0x819A,0x819A,0x2605}, + {0x819B,0x819B,0x25CB}, + {0x819C,0x819C,0x25CF}, + {0x819D,0x819D,0x25CE}, + {0x819E,0x819E,0x25C7}, + {0x819F,0x819F,0x25C6}, + {0x81A0,0x81A0,0x25A1}, /* 81A0-81AF */ + {0x81A1,0x81A1,0x25A0}, + {0x81A2,0x81A2,0x25B3}, + {0x81A3,0x81A3,0x25B2}, + {0x81A4,0x81A4,0x25BD}, + {0x81A5,0x81A5,0x25BC}, + {0x81A6,0x81A6,0x203B}, + {0x81A7,0x81A7,0x3012}, + {0x81A8,0x81A8,0x2192}, + {0x81A9,0x81A9,0x2190}, + {0x81AA,0x81AA,0x2191}, + {0x81AB,0x81AB,0x2193}, + {0x81AC,0x81AC,0x3013}, + {0x81AD,0x81AD,0x003F}, + {0x81AE,0x81AE,0x003F}, + {0x81AF,0x81AF,0x003F}, + {0x81B0,0x81B0,0x003F}, /* 81B0-81BF */ + {0x81B1,0x81B1,0x003F}, + {0x81B2,0x81B2,0x003F}, + {0x81B3,0x81B3,0x003F}, + {0x81B4,0x81B4,0x003F}, + {0x81B5,0x81B5,0x003F}, + {0x81B6,0x81B6,0x003F}, + {0x81B7,0x81B7,0x003F}, + {0x81B8,0x81B8,0x2208}, + {0x81B9,0x81B9,0x220B}, + {0x81BA,0x81BA,0x2286}, + {0x81BB,0x81BB,0x2287}, + {0x81BC,0x81BC,0x2282}, + {0x81BD,0x81BD,0x2283}, + {0x81BE,0x81BE,0x222A}, + {0x81BF,0x81BF,0x2229}, + {0x81C0,0x81C0,0x003F}, /* 81C0-81CF */ + {0x81C1,0x81C1,0x003F}, + {0x81C2,0x81C2,0x003F}, + {0x81C3,0x81C3,0x003F}, + {0x81C4,0x81C4,0x003F}, + {0x81C5,0x81C5,0x003F}, + {0x81C6,0x81C6,0x003F}, + {0x81C7,0x81C7,0x003F}, + {0x81C8,0x81C8,0x2227}, + {0x81C9,0x81C9,0x2228}, + {0x81CA,0x81CA,0xFFE2}, + {0x81CB,0x81CB,0x21D2}, + {0x81CC,0x81CC,0x21D4}, + {0x81CD,0x81CD,0x2200}, + {0x81CE,0x81CE,0x2203}, + {0x81CF,0x81CF,0x003F}, + {0x81D0,0x81D0,0x003F}, /* 81D0-81DF */ + {0x81D1,0x81D1,0x003F}, + {0x81D2,0x81D2,0x003F}, + {0x81D3,0x81D3,0x003F}, + {0x81D4,0x81D4,0x003F}, + {0x81D5,0x81D5,0x003F}, + {0x81D6,0x81D6,0x003F}, + {0x81D7,0x81D7,0x003F}, + {0x81D8,0x81D8,0x003F}, + {0x81D9,0x81D9,0x003F}, + {0x81DA,0x81DA,0x2220}, + {0x81DB,0x81DB,0x22A5}, + {0x81DC,0x81DC,0x2312}, + {0x81DD,0x81DD,0x2202}, + {0x81DE,0x81DE,0x2207}, + {0x81DF,0x81DF,0x2261}, + {0x81E0,0x81E0,0x2252}, /* 81E0-81EF */ + {0x81E1,0x81E1,0x226A}, + {0x81E2,0x81E2,0x226B}, + {0x81E3,0x81E3,0x221A}, + {0x81E4,0x81E4,0x223D}, + {0x81E5,0x81E5,0x221D}, + {0x81E6,0x81E6,0x2235}, + {0x81E7,0x81E7,0x222B}, + {0x81E8,0x81E8,0x222C}, + {0x81E9,0x81E9,0x003F}, + {0x81EA,0x81EA,0x003F}, + {0x81EB,0x81EB,0x003F}, + {0x81EC,0x81EC,0x003F}, + {0x81ED,0x81ED,0x003F}, + {0x81EE,0x81EE,0x003F}, + {0x81EF,0x81EF,0x003F}, + {0x81F0,0x81F0,0x212B}, /* 81F0-81FF */ + {0x81F1,0x81F1,0x2030}, + {0x81F2,0x81F2,0x266F}, + {0x81F3,0x81F3,0x266D}, + {0x81F4,0x81F4,0x266A}, + {0x81F5,0x81F5,0x2020}, + {0x81F6,0x81F6,0x2021}, + {0x81F7,0x81F7,0x00B6}, + {0x81F8,0x81F8,0x003F}, + {0x81F9,0x81F9,0x003F}, + {0x81FA,0x81FA,0x003F}, + {0x81FB,0x81FB,0x003F}, + {0x81FC,0x81FC,0x25EF}, + {0,0,0}, + {0,0,0}, + {0,0,0}, +}; + + +static MY_UNICASE_INFO c82[256]= +{ + /* 8200-820F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8210-821F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8220-822F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8230-823F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + + {0x8240,0x8240,0x003F}, /* 8240-824F */ + {0x8241,0x8241,0x003F}, + {0x8242,0x8242,0x003F}, + {0x8243,0x8243,0x003F}, + {0x8244,0x8244,0x003F}, + {0x8245,0x8245,0x003F}, + {0x8246,0x8246,0x003F}, + {0x8247,0x8247,0x003F}, + {0x8248,0x8248,0x003F}, + {0x8249,0x8249,0x003F}, + {0x824A,0x824A,0x003F}, + {0x824B,0x824B,0x003F}, + {0x824C,0x824C,0x003F}, + {0x824D,0x824D,0x003F}, + {0x824E,0x824E,0x003F}, + {0x824F,0x824F,0xFF10}, + {0x8250,0x8250,0xFF11}, /* 8250-825F */ + {0x8251,0x8251,0xFF12}, + {0x8252,0x8252,0xFF13}, + {0x8253,0x8253,0xFF14}, + {0x8254,0x8254,0xFF15}, + {0x8255,0x8255,0xFF16}, + {0x8256,0x8256,0xFF17}, + {0x8257,0x8257,0xFF18}, + {0x8258,0x8258,0xFF19}, + {0x8259,0x8259,0x003F}, + {0x825A,0x825A,0x003F}, + {0x825B,0x825B,0x003F}, + {0x825C,0x825C,0x003F}, + {0x825D,0x825D,0x003F}, + {0x825E,0x825E,0x003F}, + {0x825F,0x825F,0x003F}, + {0x8260,0x8281,0xFF21}, /* 8260-826F */ + {0x8261,0x8282,0xFF22}, + {0x8262,0x8283,0xFF23}, + {0x8263,0x8284,0xFF24}, + {0x8264,0x8285,0xFF25}, + {0x8265,0x8286,0xFF26}, + {0x8266,0x8287,0xFF27}, + {0x8267,0x8288,0xFF28}, + {0x8268,0x8289,0xFF29}, + {0x8269,0x828A,0xFF2A}, + {0x826A,0x828B,0xFF2B}, + {0x826B,0x828C,0xFF2C}, + {0x826C,0x828D,0xFF2D}, + {0x826D,0x828E,0xFF2E}, + {0x826E,0x828F,0xFF2F}, + {0x826F,0x8290,0xFF30}, + {0x8270,0x8291,0xFF31}, /* 8270-827F */ + {0x8271,0x8292,0xFF32}, + {0x8272,0x8293,0xFF33}, + {0x8273,0x8294,0xFF34}, + {0x8274,0x8295,0xFF35}, + {0x8275,0x8296,0xFF36}, + {0x8276,0x8297,0xFF37}, + {0x8277,0x8298,0xFF38}, + {0x8278,0x8299,0xFF39}, + {0x8279,0x829A,0xFF3A}, + {0x827A,0x827A,0x003F}, + {0x827B,0x827B,0x003F}, + {0x827C,0x827C,0x003F}, + {0x827D,0x827D,0x003F}, + {0x827E,0x827E,0x003F}, + {0,0,0}, + {0x8280,0x8280,0x003F}, /* 8280-828F */ + {0x8260,0x8281,0xFF41}, + {0x8261,0x8282,0xFF42}, + {0x8262,0x8283,0xFF43}, + {0x8263,0x8284,0xFF44}, + {0x8264,0x8285,0xFF45}, + {0x8265,0x8286,0xFF46}, + {0x8266,0x8287,0xFF47}, + {0x8267,0x8288,0xFF48}, + {0x8268,0x8289,0xFF49}, + {0x8269,0x828A,0xFF4A}, + {0x826A,0x828B,0xFF4B}, + {0x826B,0x828C,0xFF4C}, + {0x826C,0x828D,0xFF4D}, + {0x826D,0x828E,0xFF4E}, + {0x826E,0x828F,0xFF4F}, + {0x826F,0x8290,0xFF50}, /* 8290-829F */ + {0x8270,0x8291,0xFF51}, + {0x8271,0x8292,0xFF52}, + {0x8272,0x8293,0xFF53}, + {0x8273,0x8294,0xFF54}, + {0x8274,0x8295,0xFF55}, + {0x8275,0x8296,0xFF56}, + {0x8276,0x8297,0xFF57}, + {0x8277,0x8298,0xFF58}, + {0x8278,0x8299,0xFF59}, + {0x8279,0x829A,0xFF5A}, + {0x829B,0x829B,0x003F}, + {0x829C,0x829C,0x003F}, + {0x829D,0x829D,0x003F}, + {0x829E,0x829E,0x003F}, + {0x829F,0x829F,0x3041}, + {0x82A0,0x82A0,0x3042}, /* 82A0-82AF */ + {0x82A1,0x82A1,0x3043}, + {0x82A2,0x82A2,0x3044}, + {0x82A3,0x82A3,0x3045}, + {0x82A4,0x82A4,0x3046}, + {0x82A5,0x82A5,0x3047}, + {0x82A6,0x82A6,0x3048}, + {0x82A7,0x82A7,0x3049}, + {0x82A8,0x82A8,0x304A}, + {0x82A9,0x82A9,0x304B}, + {0x82AA,0x82AA,0x304C}, + {0x82AB,0x82AB,0x304D}, + {0x82AC,0x82AC,0x304E}, + {0x82AD,0x82AD,0x304F}, + {0x82AE,0x82AE,0x3050}, + {0x82AF,0x82AF,0x3051}, + {0x82B0,0x82B0,0x3052}, /* 82B0-82BF */ + {0x82B1,0x82B1,0x3053}, + {0x82B2,0x82B2,0x3054}, + {0x82B3,0x82B3,0x3055}, + {0x82B4,0x82B4,0x3056}, + {0x82B5,0x82B5,0x3057}, + {0x82B6,0x82B6,0x3058}, + {0x82B7,0x82B7,0x3059}, + {0x82B8,0x82B8,0x305A}, + {0x82B9,0x82B9,0x305B}, + {0x82BA,0x82BA,0x305C}, + {0x82BB,0x82BB,0x305D}, + {0x82BC,0x82BC,0x305E}, + {0x82BD,0x82BD,0x305F}, + {0x82BE,0x82BE,0x3060}, + {0x82BF,0x82BF,0x3061}, + {0x82C0,0x82C0,0x3062}, /* 82C0-82CF */ + {0x82C1,0x82C1,0x3063}, + {0x82C2,0x82C2,0x3064}, + {0x82C3,0x82C3,0x3065}, + {0x82C4,0x82C4,0x3066}, + {0x82C5,0x82C5,0x3067}, + {0x82C6,0x82C6,0x3068}, + {0x82C7,0x82C7,0x3069}, + {0x82C8,0x82C8,0x306A}, + {0x82C9,0x82C9,0x306B}, + {0x82CA,0x82CA,0x306C}, + {0x82CB,0x82CB,0x306D}, + {0x82CC,0x82CC,0x306E}, + {0x82CD,0x82CD,0x306F}, + {0x82CE,0x82CE,0x3070}, + {0x82CF,0x82CF,0x3071}, + {0x82D0,0x82D0,0x3072}, /* 82D0-82DF */ + {0x82D1,0x82D1,0x3073}, + {0x82D2,0x82D2,0x3074}, + {0x82D3,0x82D3,0x3075}, + {0x82D4,0x82D4,0x3076}, + {0x82D5,0x82D5,0x3077}, + {0x82D6,0x82D6,0x3078}, + {0x82D7,0x82D7,0x3079}, + {0x82D8,0x82D8,0x307A}, + {0x82D9,0x82D9,0x307B}, + {0x82DA,0x82DA,0x307C}, + {0x82DB,0x82DB,0x307D}, + {0x82DC,0x82DC,0x307E}, + {0x82DD,0x82DD,0x307F}, + {0x82DE,0x82DE,0x3080}, + {0x82DF,0x82DF,0x3081}, + {0x82E0,0x82E0,0x3082}, /* 82E0-82EF */ + {0x82E1,0x82E1,0x3083}, + {0x82E2,0x82E2,0x3084}, + {0x82E3,0x82E3,0x3085}, + {0x82E4,0x82E4,0x3086}, + {0x82E5,0x82E5,0x3087}, + {0x82E6,0x82E6,0x3088}, + {0x82E7,0x82E7,0x3089}, + {0x82E8,0x82E8,0x308A}, + {0x82E9,0x82E9,0x308B}, + {0x82EA,0x82EA,0x308C}, + {0x82EB,0x82EB,0x308D}, + {0x82EC,0x82EC,0x308E}, + {0x82ED,0x82ED,0x308F}, + {0x82EE,0x82EE,0x3090}, + {0x82EF,0x82EF,0x3091}, + {0x82F0,0x82F0,0x3092}, /* 82F0-82FF */ + {0x82F1,0x82F1,0x3093}, + {0x82F2,0x82F2,0x003F}, + {0x82F3,0x82F3,0x003F}, + {0x82F4,0x82F4,0x003F}, + {0x82F5,0x82F5,0x003F}, + {0x82F6,0x82F6,0x003F}, + {0x82F7,0x82F7,0x003F}, + {0x82F8,0x82F8,0x003F}, + {0x82F9,0x82F9,0x003F}, + {0x82FA,0x82FA,0x003F}, + {0x82FB,0x82FB,0x003F}, + {0x82FC,0x82FC,0x003F}, + {0,0,0} +}; + + +static MY_UNICASE_INFO c83[256]= +{ + /* 8300-830F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8310-831F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8320-832F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8330-833F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + + {0x8340,0x8340,0x30A1}, /* 8340 */ + {0x8341,0x8341,0x30A2}, + {0x8342,0x8342,0x30A3}, + {0x8343,0x8343,0x30A4}, + {0x8344,0x8344,0x30A5}, + {0x8345,0x8345,0x30A6}, + {0x8346,0x8346,0x30A7}, + {0x8347,0x8347,0x30A8}, + {0x8348,0x8348,0x30A9}, + {0x8349,0x8349,0x30AA}, + {0x834A,0x834A,0x30AB}, + {0x834B,0x834B,0x30AC}, + {0x834C,0x834C,0x30AD}, + {0x834D,0x834D,0x30AE}, + {0x834E,0x834E,0x30AF}, + {0x834F,0x834F,0x30B0}, + {0x8350,0x8350,0x30B1}, /* 8350 */ + {0x8351,0x8351,0x30B2}, + {0x8352,0x8352,0x30B3}, + {0x8353,0x8353,0x30B4}, + {0x8354,0x8354,0x30B5}, + {0x8355,0x8355,0x30B6}, + {0x8356,0x8356,0x30B7}, + {0x8357,0x8357,0x30B8}, + {0x8358,0x8358,0x30B9}, + {0x8359,0x8359,0x30BA}, + {0x835A,0x835A,0x30BB}, + {0x835B,0x835B,0x30BC}, + {0x835C,0x835C,0x30BD}, + {0x835D,0x835D,0x30BE}, + {0x835E,0x835E,0x30BF}, + {0x835F,0x835F,0x30C0}, + {0x8360,0x8360,0x30C1}, /* 8360 */ + {0x8361,0x8361,0x30C2}, + {0x8362,0x8362,0x30C3}, + {0x8363,0x8363,0x30C4}, + {0x8364,0x8364,0x30C5}, + {0x8365,0x8365,0x30C6}, + {0x8366,0x8366,0x30C7}, + {0x8367,0x8367,0x30C8}, + {0x8368,0x8368,0x30C9}, + {0x8369,0x8369,0x30CA}, + {0x836A,0x836A,0x30CB}, + {0x836B,0x836B,0x30CC}, + {0x836C,0x836C,0x30CD}, + {0x836D,0x836D,0x30CE}, + {0x836E,0x836E,0x30CF}, + {0x836F,0x836F,0x30D0}, + {0x8370,0x8370,0x30D1}, /* 8370 */ + {0x8371,0x8371,0x30D2}, + {0x8372,0x8372,0x30D3}, + {0x8373,0x8373,0x30D4}, + {0x8374,0x8374,0x30D5}, + {0x8375,0x8375,0x30D6}, + {0x8376,0x8376,0x30D7}, + {0x8377,0x8377,0x30D8}, + {0x8378,0x8378,0x30D9}, + {0x8379,0x8379,0x30DA}, + {0x837A,0x837A,0x30DB}, + {0x837B,0x837B,0x30DC}, + {0x837C,0x837C,0x30DD}, + {0x837D,0x837D,0x30DE}, + {0x837E,0x837E,0x30DF}, + {0,0,0}, + {0x8380,0x8380,0x30E0}, /* 8380 */ + {0x8381,0x8381,0x30E1}, + {0x8382,0x8382,0x30E2}, + {0x8383,0x8383,0x30E3}, + {0x8384,0x8384,0x30E4}, + {0x8385,0x8385,0x30E5}, + {0x8386,0x8386,0x30E6}, + {0x8387,0x8387,0x30E7}, + {0x8388,0x8388,0x30E8}, + {0x8389,0x8389,0x30E9}, + {0x838A,0x838A,0x30EA}, + {0x838B,0x838B,0x30EB}, + {0x838C,0x838C,0x30EC}, + {0x838D,0x838D,0x30ED}, + {0x838E,0x838E,0x30EE}, + {0x838F,0x838F,0x30EF}, + {0x8390,0x8390,0x30F0}, /* 8390 */ + {0x8391,0x8391,0x30F1}, + {0x8392,0x8392,0x30F2}, + {0x8393,0x8393,0x30F3}, + {0x8394,0x8394,0x30F4}, + {0x8395,0x8395,0x30F5}, + {0x8396,0x8396,0x30F6}, + {0x8397,0x8397,0x003F}, + {0x8398,0x8398,0x003F}, + {0x8399,0x8399,0x003F}, + {0x839A,0x839A,0x003F}, + {0x839B,0x839B,0x003F}, + {0x839C,0x839C,0x003F}, + {0x839D,0x839D,0x003F}, + {0x839E,0x839E,0x003F}, + {0x839F,0x83BF,0x0391}, + {0x83A0,0x83C0,0x0392}, /* 83A0 */ + {0x83A1,0x83C1,0x0393}, + {0x83A2,0x83C2,0x0394}, + {0x83A3,0x83C3,0x0395}, + {0x83A4,0x83C4,0x0396}, + {0x83A5,0x83C5,0x0397}, + {0x83A6,0x83C6,0x0398}, + {0x83A7,0x83C7,0x0399}, + {0x83A8,0x83C8,0x039A}, + {0x83A9,0x83C9,0x039B}, + {0x83AA,0x83CA,0x039C}, + {0x83AB,0x83CB,0x039D}, + {0x83AC,0x83CC,0x039E}, + {0x83AD,0x83CD,0x039F}, + {0x83AE,0x83CE,0x03A0}, + {0x83AF,0x83CF,0x03A1}, + {0x83B0,0x83D0,0x03A3}, /* 83B0 */ + {0x83B1,0x83D1,0x03A4}, + {0x83B2,0x83D2,0x03A5}, + {0x83B3,0x83D3,0x03A6}, + {0x83B4,0x83D4,0x03A7}, + {0x83B5,0x83D5,0x03A8}, + {0x83B6,0x83D6,0x03A9}, + {0x83B7,0x83B7,0x003F}, + {0x83B8,0x83B8,0x003F}, + {0x83B9,0x83B9,0x003F}, + {0x83BA,0x83BA,0x003F}, + {0x83BB,0x83BB,0x003F}, + {0x83BC,0x83BC,0x003F}, + {0x83BD,0x83BD,0x003F}, + {0x83BE,0x83BE,0x003F}, + {0x839F,0x83BF,0x03B1}, + {0x83A0,0x83C0,0x03B2}, /* 83C0 */ + {0x83A1,0x83C1,0x03B3}, + {0x83A2,0x83C2,0x03B4}, + {0x83A3,0x83C3,0x03B5}, + {0x83A4,0x83C4,0x03B6}, + {0x83A5,0x83C5,0x03B7}, + {0x83A6,0x83C6,0x03B8}, + {0x83A7,0x83C7,0x03B9}, + {0x83A8,0x83C8,0x03BA}, + {0x83A9,0x83C9,0x03BB}, + {0x83AA,0x83CA,0x03BC}, + {0x83AB,0x83CB,0x03BD}, + {0x83AC,0x83CC,0x03BE}, + {0x83AD,0x83CD,0x03BF}, + {0x83AE,0x83CE,0x03C0}, + {0x83AF,0x83CF,0x03C1}, + {0x83B0,0x83D0,0x03C3}, /* 83D0 */ + {0x83B1,0x83D1,0x03C4}, + {0x83B2,0x83D2,0x03C5}, + {0x83B3,0x83D3,0x03C6}, + {0x83B4,0x83D4,0x03C7}, + {0x83B5,0x83D5,0x03C8}, + {0x83B6,0x83D6,0x03C9}, + {0x83D7,0x83D7,0x003F}, + {0x83D8,0x83D8,0x003F}, + {0x83D9,0x83D9,0x003F}, + {0x83DA,0x83DA,0x003F}, + {0x83DB,0x83DB,0x003F}, + {0x83DC,0x83DC,0x003F}, + {0x83DD,0x83DD,0x003F}, + {0x83DE,0x83DE,0x003F}, + {0x83DF,0x83DF,0x003F}, + {0x83E0,0x83E0,0x003F}, /* 83E0 */ + {0x83E1,0x83E1,0x003F}, + {0x83E2,0x83E2,0x003F}, + {0x83E3,0x83E3,0x003F}, + {0x83E4,0x83E4,0x003F}, + {0x83E5,0x83E5,0x003F}, + {0x83E6,0x83E6,0x003F}, + {0x83E7,0x83E7,0x003F}, + {0x83E8,0x83E8,0x003F}, + {0x83E9,0x83E9,0x003F}, + {0x83EA,0x83EA,0x003F}, + {0x83EB,0x83EB,0x003F}, + {0x83EC,0x83EC,0x003F}, + {0x83ED,0x83ED,0x003F}, + {0x83EE,0x83EE,0x003F}, + {0x83EF,0x83EF,0x003F}, + {0x83F0,0x83F0,0x003F}, /* 83F0 */ + {0x83F1,0x83F1,0x003F}, + {0x83F2,0x83F2,0x003F}, + {0x83F3,0x83F3,0x003F}, + {0x83F4,0x83F4,0x003F}, + {0x83F5,0x83F5,0x003F}, + {0x83F6,0x83F6,0x003F}, + {0x83F7,0x83F7,0x003F}, + {0x83F8,0x83F8,0x003F}, + {0x83F9,0x83F9,0x003F}, + {0x83FA,0x83FA,0x003F}, + {0x83FB,0x83FB,0x003F}, + {0x83FC,0x83FC,0x003F}, + {0,0,0}, + {0,0,0}, + {0,0,0} +}; + + +static MY_UNICASE_INFO c84[256]= +{ + /* 8400-840F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8410-841F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8420-842F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + /* 8430-843F */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + + {0x8440,0x8470,0x0410}, /* 8440 */ + {0x8441,0x8471,0x0411}, + {0x8442,0x8472,0x0412}, + {0x8443,0x8473,0x0413}, + {0x8444,0x8474,0x0414}, + {0x8445,0x8475,0x0415}, + {0x8446,0x8476,0x0401}, + {0x8447,0x8477,0x0416}, + {0x8448,0x8478,0x0417}, + {0x8449,0x8479,0x0418}, + {0x844A,0x847A,0x0419}, + {0x844B,0x847B,0x041A}, + {0x844C,0x847C,0x041B}, + {0x844D,0x847D,0x041C}, + {0x844E,0x847E,0x041D}, + {0x844F,0x8480,0x041E}, + {0x8450,0x8481,0x041F}, /* 8450 */ + {0x8451,0x8482,0x0420}, + {0x8452,0x8483,0x0421}, + {0x8453,0x8484,0x0422}, + {0x8454,0x8485,0x0423}, + {0x8455,0x8486,0x0424}, + {0x8456,0x8487,0x0425}, + {0x8457,0x8488,0x0426}, + {0x8458,0x8489,0x0427}, + {0x8459,0x848A,0x0428}, + {0x845A,0x848B,0x0429}, + {0x845B,0x848C,0x042A}, + {0x845C,0x848D,0x042B}, + {0x845D,0x848E,0x042C}, + {0x845E,0x848F,0x042D}, + {0x845F,0x8490,0x042E}, + {0x8460,0x8491,0x042F}, /* 8460 */ + {0x8461,0x8461,0x003F}, + {0x8462,0x8462,0x003F}, + {0x8463,0x8463,0x003F}, + {0x8464,0x8464,0x003F}, + {0x8465,0x8465,0x003F}, + {0x8466,0x8466,0x003F}, + {0x8467,0x8467,0x003F}, + {0x8468,0x8468,0x003F}, + {0x8469,0x8469,0x003F}, + {0x846A,0x846A,0x003F}, + {0x846B,0x846B,0x003F}, + {0x846C,0x846C,0x003F}, + {0x846D,0x846D,0x003F}, + {0x846E,0x846E,0x003F}, + {0x846F,0x846F,0x003F}, + {0x8440,0x8470,0x0430}, /* 8470 */ + {0x8441,0x8471,0x0431}, + {0x8442,0x8472,0x0432}, + {0x8443,0x8473,0x0433}, + {0x8444,0x8474,0x0434}, + {0x8445,0x8475,0x0435}, + {0x8446,0x8476,0x0451}, + {0x8447,0x8477,0x0436}, + {0x8448,0x8478,0x0437}, + {0x8449,0x8479,0x0438}, + {0x844A,0x847A,0x0439}, + {0x844B,0x847B,0x043A}, + {0x844C,0x847C,0x043B}, + {0x844D,0x847D,0x043C}, + {0x844E,0x847E,0x043D}, + {0,0,0}, + {0x844F,0x8480,0x043E}, /* 8480 */ + {0x8450,0x8481,0x043F}, + {0x8451,0x8482,0x0440}, + {0x8452,0x8483,0x0441}, + {0x8453,0x8484,0x0442}, + {0x8454,0x8485,0x0443}, + {0x8455,0x8486,0x0444}, + {0x8456,0x8487,0x0445}, + {0x8457,0x8488,0x0446}, + {0x8458,0x8489,0x0447}, + {0x8459,0x848A,0x0448}, + {0x845A,0x848B,0x0449}, + {0x845B,0x848C,0x044A}, + {0x845C,0x848D,0x044B}, + {0x845D,0x848E,0x044C}, + {0x845E,0x848F,0x044D}, + {0x845F,0x8490,0x044E}, /* 8490 */ + {0x8460,0x8491,0x044F}, + {0x8492,0x8492,0x003F}, + {0x8493,0x8493,0x003F}, + {0x8494,0x8494,0x003F}, + {0x8495,0x8495,0x003F}, + {0x8496,0x8496,0x003F}, + {0x8497,0x8497,0x003F}, + {0x8498,0x8498,0x003F}, + {0x8499,0x8499,0x003F}, + {0x849A,0x849A,0x003F}, + {0x849B,0x849B,0x003F}, + {0x849C,0x849C,0x003F}, + {0x849D,0x849D,0x003F}, + {0x849E,0x849E,0x003F}, + {0x849F,0x849F,0x2500}, + {0x84A0,0x84A0,0x2502}, /* 84A0 */ + {0x84A1,0x84A1,0x250C}, + {0x84A2,0x84A2,0x2510}, + {0x84A3,0x84A3,0x2518}, + {0x84A4,0x84A4,0x2514}, + {0x84A5,0x84A5,0x251C}, + {0x84A6,0x84A6,0x252C}, + {0x84A7,0x84A7,0x2524}, + {0x84A8,0x84A8,0x2534}, + {0x84A9,0x84A9,0x253C}, + {0x84AA,0x84AA,0x2501}, + {0x84AB,0x84AB,0x2503}, + {0x84AC,0x84AC,0x250F}, + {0x84AD,0x84AD,0x2513}, + {0x84AE,0x84AE,0x251B}, + {0x84AF,0x84AF,0x2517}, + {0x84B0,0x84B0,0x2523}, /* 84B0 */ + {0x84B1,0x84B1,0x2533}, + {0x84B2,0x84B2,0x252B}, + {0x84B3,0x84B3,0x253B}, + {0x84B4,0x84B4,0x254B}, + {0x84B5,0x84B5,0x2520}, + {0x84B6,0x84B6,0x252F}, + {0x84B7,0x84B7,0x2528}, + {0x84B8,0x84B8,0x2537}, + {0x84B9,0x84B9,0x253F}, + {0x84BA,0x84BA,0x251D}, + {0x84BB,0x84BB,0x2530}, + {0x84BC,0x84BC,0x2525}, + {0x84BD,0x84BD,0x2538}, + {0x84BE,0x84BE,0x2542}, + {0x84BF,0x84BF,0x003F}, + {0x84C0,0x84C0,0x003F}, /* 84C0 */ + {0x84C1,0x84C1,0x003F}, + {0x84C2,0x84C2,0x003F}, + {0x84C3,0x84C3,0x003F}, + {0x84C4,0x84C4,0x003F}, + {0x84C5,0x84C5,0x003F}, + {0x84C6,0x84C6,0x003F}, + {0x84C7,0x84C7,0x003F}, + {0x84C8,0x84C8,0x003F}, + {0x84C9,0x84C9,0x003F}, + {0x84CA,0x84CA,0x003F}, + {0x84CB,0x84CB,0x003F}, + {0x84CC,0x84CC,0x003F}, + {0x84CD,0x84CD,0x003F}, + {0x84CE,0x84CE,0x003F}, + {0x84CF,0x84CF,0x003F}, + {0x84D0,0x84D0,0x003F}, /* 84D0 */ + {0x84D1,0x84D1,0x003F}, + {0x84D2,0x84D2,0x003F}, + {0x84D3,0x84D3,0x003F}, + {0x84D4,0x84D4,0x003F}, + {0x84D5,0x84D5,0x003F}, + {0x84D6,0x84D6,0x003F}, + {0x84D7,0x84D7,0x003F}, + {0x84D8,0x84D8,0x003F}, + {0x84D9,0x84D9,0x003F}, + {0x84DA,0x84DA,0x003F}, + {0x84DB,0x84DB,0x003F}, + {0x84DC,0x84DC,0x003F}, + {0x84DD,0x84DD,0x003F}, + {0x84DE,0x84DE,0x003F}, + {0x84DF,0x84DF,0x003F}, + {0x84E0,0x84E0,0x003F}, /* 84E0 */ + {0x84E1,0x84E1,0x003F}, + {0x84E2,0x84E2,0x003F}, + {0x84E3,0x84E3,0x003F}, + {0x84E4,0x84E4,0x003F}, + {0x84E5,0x84E5,0x003F}, + {0x84E6,0x84E6,0x003F}, + {0x84E7,0x84E7,0x003F}, + {0x84E8,0x84E8,0x003F}, + {0x84E9,0x84E9,0x003F}, + {0x84EA,0x84EA,0x003F}, + {0x84EB,0x84EB,0x003F}, + {0x84EC,0x84EC,0x003F}, + {0x84ED,0x84ED,0x003F}, + {0x84EE,0x84EE,0x003F}, + {0x84EF,0x84EF,0x003F}, + {0x84F0,0x84F0,0x003F}, /* 84F0 */ + {0x84F1,0x84F1,0x003F}, + {0x84F2,0x84F2,0x003F}, + {0x84F3,0x84F3,0x003F}, + {0x84F4,0x84F4,0x003F}, + {0x84F5,0x84F5,0x003F}, + {0x84F6,0x84F6,0x003F}, + {0x84F7,0x84F7,0x003F}, + {0x84F8,0x84F8,0x003F}, + {0x84F9,0x84F9,0x003F}, + {0x84FA,0x84FA,0x003F}, + {0x84FB,0x84FB,0x003F}, + {0x84FC,0x84FC,0x003F}, + {0,0,0}, + {0,0,0}, + {0,0,0} +}; + + +static MY_UNICASE_INFO *my_caseinfo_sjis[256]= +{ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 1 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 2 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 3 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 4 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 5 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 6 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 7 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, c81, c82, c83, c84, NULL, NULL, NULL, /* 8 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 9 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* A */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* B */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* C */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* D */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* E */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* F */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +}; + + static int my_strnncoll_sjis_internal(CHARSET_INFO *cs, const uchar **a_res, size_t a_length, const uchar **b_res, size_t b_length) @@ -4685,7 +5560,7 @@ CHARSET_INFO my_charset_sjis_japanese_ci= NULL, /* sort_order_big*/ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ + my_caseinfo_sjis, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ @@ -4717,7 +5592,7 @@ CHARSET_INFO my_charset_sjis_bin= NULL, /* sort_order_big*/ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ + my_caseinfo_sjis, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ diff --git a/strings/ctype-uca.c b/strings/ctype-uca.c index 541eb7afeb9..56f3ddccae4 100644 --- a/strings/ctype-uca.c +++ b/strings/ctype-uca.c @@ -7661,6 +7661,13 @@ static my_coll_lexem_num my_coll_lexem_next(MY_COLL_LEXEM *lexem) goto ex; } + if (beg[0] == '=') + { + beg++; + rc= MY_COLL_LEXEM_DIFF; + goto ex; + } + if (beg[0] == '<') { for (beg++, lexem->diff= 1; @@ -7821,6 +7828,10 @@ static int my_coll_rule_parse(MY_COLL_RULE *rule, size_t mitems, item.diff[1]= 0; item.diff[2]= 0; } + else if (lexem.diff == 0) + { + item.diff[0]= item.diff[1]= item.diff[2]= 0; + } if (nitems >= mitems) { my_coll_lexem_print_error(&lexem,errstr,errsize-1,"Too many rules"); diff --git a/strings/ctype-ujis.c b/strings/ctype-ujis.c index 1a872a92595..bec566c7782 100644 --- a/strings/ctype-ujis.c +++ b/strings/ctype-ujis.c @@ -8494,6 +8494,1263 @@ my_wc_mb_euc_jp(CHARSET_INFO *c,my_wc_t wc, uchar *s, uchar *e) } +/* Case info pages for JIS-X-0208 range */ +static MY_UNICASE_INFO cA2[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA2A0,0xA2A0,0x003F}, /* A2A0 */ + {0xA2A1,0xA2A1,0x25C6}, + {0xA2A2,0xA2A2,0x25A1}, + {0xA2A3,0xA2A3,0x25A0}, + {0xA2A4,0xA2A4,0x25B3}, + {0xA2A5,0xA2A5,0x25B2}, + {0xA2A6,0xA2A6,0x25BD}, + {0xA2A7,0xA2A7,0x25BC}, + {0xA2A8,0xA2A8,0x203B}, + {0xA2A9,0xA2A9,0x3012}, + {0xA2AA,0xA2AA,0x2192}, + {0xA2AB,0xA2AB,0x2190}, + {0xA2AC,0xA2AC,0x2191}, + {0xA2AD,0xA2AD,0x2193}, + {0xA2AE,0xA2AE,0x3013}, + {0xA2AF,0xA2AF,0x003F}, + {0xA2B0,0xA2B0,0x003F}, /* A2B0 */ + {0xA2B1,0xA2B1,0x003F}, + {0xA2B2,0xA2B2,0x003F}, + {0xA2B3,0xA2B3,0x003F}, + {0xA2B4,0xA2B4,0x003F}, + {0xA2B5,0xA2B5,0x003F}, + {0xA2B6,0xA2B6,0x003F}, + {0xA2B7,0xA2B7,0x003F}, + {0xA2B8,0xA2B8,0x003F}, + {0xA2B9,0xA2B9,0x003F}, + {0xA2BA,0xA2BA,0x2208}, + {0xA2BB,0xA2BB,0x220B}, + {0xA2BC,0xA2BC,0x2286}, + {0xA2BD,0xA2BD,0x2287}, + {0xA2BE,0xA2BE,0x2282}, + {0xA2BF,0xA2BF,0x2283}, + {0xA2C0,0xA2C0,0x222A}, /* A2C0 */ + {0xA2C1,0xA2C1,0x2229}, + {0xA2C2,0xA2C2,0x003F}, + {0xA2C3,0xA2C3,0x003F}, + {0xA2C4,0xA2C4,0x003F}, + {0xA2C5,0xA2C5,0x003F}, + {0xA2C6,0xA2C6,0x003F}, + {0xA2C7,0xA2C7,0x003F}, + {0xA2C8,0xA2C8,0x003F}, + {0xA2C9,0xA2C9,0x003F}, + {0xA2CA,0xA2CA,0x2227}, + {0xA2CB,0xA2CB,0x2228}, + {0xA2CC,0xA2CC,0x00AC}, + {0xA2CD,0xA2CD,0x21D2}, + {0xA2CE,0xA2CE,0x21D4}, + {0xA2CF,0xA2CF,0x2200}, + {0xA2D0,0xA2D0,0x2203}, /* A2D0 */ + {0xA2D1,0xA2D1,0x003F}, + {0xA2D2,0xA2D2,0x003F}, + {0xA2D3,0xA2D3,0x003F}, + {0xA2D4,0xA2D4,0x003F}, + {0xA2D5,0xA2D5,0x003F}, + {0xA2D6,0xA2D6,0x003F}, + {0xA2D7,0xA2D7,0x003F}, + {0xA2D8,0xA2D8,0x003F}, + {0xA2D9,0xA2D9,0x003F}, + {0xA2DA,0xA2DA,0x003F}, + {0xA2DB,0xA2DB,0x003F}, + {0xA2DC,0xA2DC,0x2220}, + {0xA2DD,0xA2DD,0x22A5}, + {0xA2DE,0xA2DE,0x2312}, + {0xA2DF,0xA2DF,0x2202}, + {0xA2E0,0xA2E0,0x2207}, /* A2E0 */ + {0xA2E1,0xA2E1,0x2261}, + {0xA2E2,0xA2E2,0x2252}, + {0xA2E3,0xA2E3,0x226A}, + {0xA2E4,0xA2E4,0x226B}, + {0xA2E5,0xA2E5,0x221A}, + {0xA2E6,0xA2E6,0x223D}, + {0xA2E7,0xA2E7,0x221D}, + {0xA2E8,0xA2E8,0x2235}, + {0xA2E9,0xA2E9,0x222B}, + {0xA2EA,0xA2EA,0x222C}, + {0xA2EB,0xA2EB,0x003F}, + {0xA2EC,0xA2EC,0x003F}, + {0xA2ED,0xA2ED,0x003F}, + {0xA2EE,0xA2EE,0x003F}, + {0xA2EF,0xA2EF,0x003F}, + {0xA2F0,0xA2F0,0x003F}, /* A2F0 */ + {0xA2F1,0xA2F1,0x003F}, + {0xA2F2,0x8FABA9,0x212B}, + {0xA2F3,0xA2F3,0x2030}, + {0xA2F4,0xA2F4,0x266F}, + {0xA2F5,0xA2F5,0x266D}, + {0xA2F6,0xA2F6,0x266A}, + {0xA2F7,0xA2F7,0x2020}, + {0xA2F8,0xA2F8,0x2021}, + {0xA2F9,0xA2F9,0x00B6}, + {0xA2FA,0xA2FA,0x003F}, + {0xA2FB,0xA2FB,0x003F}, + {0xA2FC,0xA2FC,0x003F}, + {0xA2FD,0xA2FD,0x003F}, + {0xA2FE,0xA2FE,0x25EF}, + {0xA2FF,0xA2FF,0x003F} +}; + + +static MY_UNICASE_INFO cA3[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA3A0,0xA3A0,0x003F}, /* A3A0 */ + {0xA3A1,0xA3A1,0x003F}, + {0xA3A2,0xA3A2,0x003F}, + {0xA3A3,0xA3A3,0x003F}, + {0xA3A4,0xA3A4,0x003F}, + {0xA3A5,0xA3A5,0x003F}, + {0xA3A6,0xA3A6,0x003F}, + {0xA3A7,0xA3A7,0x003F}, + {0xA3A8,0xA3A8,0x003F}, + {0xA3A9,0xA3A9,0x003F}, + {0xA3AA,0xA3AA,0x003F}, + {0xA3AB,0xA3AB,0x003F}, + {0xA3AC,0xA3AC,0x003F}, + {0xA3AD,0xA3AD,0x003F}, + {0xA3AE,0xA3AE,0x003F}, + {0xA3AF,0xA3AF,0x003F}, + {0xA3B0,0xA3B0,0xFF10}, /* A3B0 */ + {0xA3B1,0xA3B1,0xFF11}, + {0xA3B2,0xA3B2,0xFF12}, + {0xA3B3,0xA3B3,0xFF13}, + {0xA3B4,0xA3B4,0xFF14}, + {0xA3B5,0xA3B5,0xFF15}, + {0xA3B6,0xA3B6,0xFF16}, + {0xA3B7,0xA3B7,0xFF17}, + {0xA3B8,0xA3B8,0xFF18}, + {0xA3B9,0xA3B9,0xFF19}, + {0xA3BA,0xA3BA,0x003F}, + {0xA3BB,0xA3BB,0x003F}, + {0xA3BC,0xA3BC,0x003F}, + {0xA3BD,0xA3BD,0x003F}, + {0xA3BE,0xA3BE,0x003F}, + {0xA3BF,0xA3BF,0x003F}, + {0xA3C0,0xA3C0,0x003F}, /* A3C0 */ + {0xA3C1,0xA3E1,0xFF21}, + {0xA3C2,0xA3E2,0xFF22}, + {0xA3C3,0xA3E3,0xFF23}, + {0xA3C4,0xA3E4,0xFF24}, + {0xA3C5,0xA3E5,0xFF25}, + {0xA3C6,0xA3E6,0xFF26}, + {0xA3C7,0xA3E7,0xFF27}, + {0xA3C8,0xA3E8,0xFF28}, + {0xA3C9,0xA3E9,0xFF29}, + {0xA3CA,0xA3EA,0xFF2A}, + {0xA3CB,0xA3EB,0xFF2B}, + {0xA3CC,0xA3EC,0xFF2C}, + {0xA3CD,0xA3ED,0xFF2D}, + {0xA3CE,0xA3EE,0xFF2E}, + {0xA3CF,0xA3EF,0xFF2F}, + {0xA3D0,0xA3F0,0xFF30}, /* A3D0 */ + {0xA3D1,0xA3F1,0xFF31}, + {0xA3D2,0xA3F2,0xFF32}, + {0xA3D3,0xA3F3,0xFF33}, + {0xA3D4,0xA3F4,0xFF34}, + {0xA3D5,0xA3F5,0xFF35}, + {0xA3D6,0xA3F6,0xFF36}, + {0xA3D7,0xA3F7,0xFF37}, + {0xA3D8,0xA3F8,0xFF38}, + {0xA3D9,0xA3F9,0xFF39}, + {0xA3DA,0xA3FA,0xFF3A}, + {0xA3DB,0xA3DB,0x003F}, + {0xA3DC,0xA3DC,0x003F}, + {0xA3DD,0xA3DD,0x003F}, + {0xA3DE,0xA3DE,0x003F}, + {0xA3DF,0xA3DF,0x003F}, + {0xA3E0,0xA3E0,0x003F}, /* A3E0 */ + {0xA3C1,0xA3E1,0xFF41}, + {0xA3C2,0xA3E2,0xFF42}, + {0xA3C3,0xA3E3,0xFF43}, + {0xA3C4,0xA3E4,0xFF44}, + {0xA3C5,0xA3E5,0xFF45}, + {0xA3C6,0xA3E6,0xFF46}, + {0xA3C7,0xA3E7,0xFF47}, + {0xA3C8,0xA3E8,0xFF48}, + {0xA3C9,0xA3E9,0xFF49}, + {0xA3CA,0xA3EA,0xFF4A}, + {0xA3CB,0xA3EB,0xFF4B}, + {0xA3CC,0xA3EC,0xFF4C}, + {0xA3CD,0xA3ED,0xFF4D}, + {0xA3CE,0xA3EE,0xFF4E}, + {0xA3CF,0xA3EF,0xFF4F}, + {0xA3D0,0xA3F0,0xFF50}, /* A3F0 */ + {0xA3D1,0xA3F1,0xFF51}, + {0xA3D2,0xA3F2,0xFF52}, + {0xA3D3,0xA3F3,0xFF53}, + {0xA3D4,0xA3F4,0xFF54}, + {0xA3D5,0xA3F5,0xFF55}, + {0xA3D6,0xA3F6,0xFF56}, + {0xA3D7,0xA3F7,0xFF57}, + {0xA3D8,0xA3F8,0xFF58}, + {0xA3D9,0xA3F9,0xFF59}, + {0xA3DA,0xA3FA,0xFF5A}, + {0xA3FB,0xA3FB,0x003F}, + {0xA3FC,0xA3FC,0x003F}, + {0xA3FD,0xA3FD,0x003F}, + {0xA3FE,0xA3FE,0x003F}, + {0xA3FF,0xA3FF,0x003F} +}; + + +static MY_UNICASE_INFO cA6[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA6A0,0xA6A0,0x003F}, /* A6A0 */ + {0xA6A1,0xA6C1,0x0391}, + {0xA6A2,0xA6C2,0x0392}, + {0xA6A3,0xA6C3,0x0393}, + {0xA6A4,0xA6C4,0x0394}, + {0xA6A5,0xA6C5,0x0395}, + {0xA6A6,0xA6C6,0x0396}, + {0xA6A7,0xA6C7,0x0397}, + {0xA6A8,0xA6C8,0x0398}, + {0xA6A9,0xA6C9,0x0399}, + {0xA6AA,0xA6CA,0x039A}, + {0xA6AB,0xA6CB,0x039B}, + {0xA6AC,0xA6CC,0x039C}, + {0xA6AD,0xA6CD,0x039D}, + {0xA6AE,0xA6CE,0x039E}, + {0xA6AF,0xA6CF,0x039F}, + {0xA6B0,0xA6D0,0x03A0}, /* A6B0 */ + {0xA6B1,0xA6D1,0x03A1}, + {0xA6B2,0xA6D2,0x03A3}, + {0xA6B3,0xA6D3,0x03A4}, + {0xA6B4,0xA6D4,0x03A5}, + {0xA6B5,0xA6D5,0x03A6}, + {0xA6B6,0xA6D6,0x03A7}, + {0xA6B7,0xA6D7,0x03A8}, + {0xA6B8,0xA6D8,0x03A9}, + {0xA6B9,0xA6B9,0x003F}, + {0xA6BA,0xA6BA,0x003F}, + {0xA6BB,0xA6BB,0x003F}, + {0xA6BC,0xA6BC,0x003F}, + {0xA6BD,0xA6BD,0x003F}, + {0xA6BE,0xA6BE,0x003F}, + {0xA6BF,0xA6BF,0x003F}, + {0xA6C0,0xA6C0,0x003F}, /* A6C0 */ + {0xA6A1,0xA6C1,0x03B1}, + {0xA6A2,0xA6C2,0x03B2}, + {0xA6A3,0xA6C3,0x03B3}, + {0xA6A4,0xA6C4,0x03B4}, + {0xA6A5,0xA6C5,0x03B5}, + {0xA6A6,0xA6C6,0x03B6}, + {0xA6A7,0xA6C7,0x03B7}, + {0xA6A8,0xA6C8,0x03B8}, + {0xA6A9,0xA6C9,0x03B9}, + {0xA6AA,0xA6CA,0x03BA}, + {0xA6AB,0xA6CB,0x03BB}, + {0xA6AC,0xA6CC,0x03BC}, + {0xA6AD,0xA6CD,0x03BD}, + {0xA6AE,0xA6CE,0x03BE}, + {0xA6AF,0xA6CF,0x03BF}, + {0xA6B0,0xA6D0,0x03C0}, /* A6D0 */ + {0xA6B1,0xA6D1,0x03C1}, + {0xA6B2,0xA6D2,0x03C3}, + {0xA6B3,0xA6D3,0x03C4}, + {0xA6B4,0xA6D4,0x03C5}, + {0xA6B5,0xA6D5,0x03C6}, + {0xA6B6,0xA6D6,0x03C7}, + {0xA6B7,0xA6D7,0x03C8}, + {0xA6B8,0xA6D8,0x03C9}, + {0xA6D9,0xA6D9,0x003F}, + {0xA6DA,0xA6DA,0x003F}, + {0xA6DB,0xA6DB,0x003F}, + {0xA6DC,0xA6DC,0x003F}, + {0xA6DD,0xA6DD,0x003F}, + {0xA6DE,0xA6DE,0x003F}, + {0xA6DF,0xA6DF,0x003F}, + {0xA6E0,0xA6E0,0x003F}, /* A6E0 */ + {0xA6E1,0xA6E1,0x003F}, + {0xA6E2,0xA6E2,0x003F}, + {0xA6E3,0xA6E3,0x003F}, + {0xA6E4,0xA6E4,0x003F}, + {0xA6E5,0xA6E5,0x003F}, + {0xA6E6,0xA6E6,0x003F}, + {0xA6E7,0xA6E7,0x003F}, + {0xA6E8,0xA6E8,0x003F}, + {0xA6E9,0xA6E9,0x003F}, + {0xA6EA,0xA6EA,0x003F}, + {0xA6EB,0xA6EB,0x003F}, + {0xA6EC,0xA6EC,0x003F}, + {0xA6ED,0xA6ED,0x003F}, + {0xA6EE,0xA6EE,0x003F}, + {0xA6EF,0xA6EF,0x003F}, + {0xA6F0,0xA6F0,0x003F}, /* A6F0 */ + {0xA6F1,0xA6F1,0x003F}, + {0xA6F2,0xA6F2,0x003F}, + {0xA6F3,0xA6F3,0x003F}, + {0xA6F4,0xA6F4,0x003F}, + {0xA6F5,0xA6F5,0x003F}, + {0xA6F6,0xA6F6,0x003F}, + {0xA6F7,0xA6F7,0x003F}, + {0xA6F8,0xA6F8,0x003F}, + {0xA6F9,0xA6F9,0x003F}, + {0xA6FA,0xA6FA,0x003F}, + {0xA6FB,0xA6FB,0x003F}, + {0xA6FC,0xA6FC,0x003F}, + {0xA6FD,0xA6FD,0x003F}, + {0xA6FE,0xA6FE,0x003F}, + {0xA6FF,0xA6FF,0x003F} +}; + + +static MY_UNICASE_INFO cA7[256]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0xA7A0,0xA7A0,0x003F}, + {0xA7A1,0xA7D1,0x0410}, + {0xA7A2,0xA7D2,0x0411}, + {0xA7A3,0xA7D3,0x0412}, + {0xA7A4,0xA7D4,0x0413}, + {0xA7A5,0xA7D5,0x0414}, + {0xA7A6,0xA7D6,0x0415}, + {0xA7A7,0xA7D7,0x0401}, + {0xA7A8,0xA7D8,0x0416}, + {0xA7A9,0xA7D9,0x0417}, + {0xA7AA,0xA7DA,0x0418}, + {0xA7AB,0xA7DB,0x0419}, + {0xA7AC,0xA7DC,0x041A}, + {0xA7AD,0xA7DD,0x041B}, + {0xA7AE,0xA7DE,0x041C}, + {0xA7AF,0xA7DF,0x041D}, + {0xA7B0,0xA7E0,0x041E}, /* A7B0 */ + {0xA7B1,0xA7E1,0x041F}, + {0xA7B2,0xA7E2,0x0420}, + {0xA7B3,0xA7E3,0x0421}, + {0xA7B4,0xA7E4,0x0422}, + {0xA7B5,0xA7E5,0x0423}, + {0xA7B6,0xA7E6,0x0424}, + {0xA7B7,0xA7E7,0x0425}, + {0xA7B8,0xA7E8,0x0426}, + {0xA7B9,0xA7E9,0x0427}, + {0xA7BA,0xA7EA,0x0428}, + {0xA7BB,0xA7EB,0x0429}, + {0xA7BC,0xA7EC,0x042A}, + {0xA7BD,0xA7ED,0x042B}, + {0xA7BE,0xA7EE,0x042C}, + {0xA7BF,0xA7EF,0x042D}, + {0xA7C0,0xA7F0,0x042E}, /* A7C0 */ + {0xA7C1,0xA7F1,0x042F}, + {0xA7C2,0xA7C2,0x003F}, + {0xA7C3,0xA7C3,0x003F}, + {0xA7C4,0xA7C4,0x003F}, + {0xA7C5,0xA7C5,0x003F}, + {0xA7C6,0xA7C6,0x003F}, + {0xA7C7,0xA7C7,0x003F}, + {0xA7C8,0xA7C8,0x003F}, + {0xA7C9,0xA7C9,0x003F}, + {0xA7CA,0xA7CA,0x003F}, + {0xA7CB,0xA7CB,0x003F}, + {0xA7CC,0xA7CC,0x003F}, + {0xA7CD,0xA7CD,0x003F}, + {0xA7CE,0xA7CE,0x003F}, + {0xA7CF,0xA7CF,0x003F}, + {0xA7D0,0xA7D0,0x003F}, /* A7D0 */ + {0xA7A1,0xA7D1,0x0430}, + {0xA7A2,0xA7D2,0x0431}, + {0xA7A3,0xA7D3,0x0432}, + {0xA7A4,0xA7D4,0x0433}, + {0xA7A5,0xA7D5,0x0434}, + {0xA7A6,0xA7D6,0x0435}, + {0xA7A7,0xA7D7,0x0451}, + {0xA7A8,0xA7D8,0x0436}, + {0xA7A9,0xA7D9,0x0437}, + {0xA7AA,0xA7DA,0x0438}, + {0xA7AB,0xA7DB,0x0439}, + {0xA7AC,0xA7DC,0x043A}, + {0xA7AD,0xA7DD,0x043B}, + {0xA7AE,0xA7DE,0x043C}, + {0xA7AF,0xA7DF,0x043D}, + {0xA7B0,0xA7E0,0x043E}, /* A7E0 */ + {0xA7B1,0xA7E1,0x043F}, + {0xA7B2,0xA7E2,0x0440}, + {0xA7B3,0xA7E3,0x0441}, + {0xA7B4,0xA7E4,0x0442}, + {0xA7B5,0xA7E5,0x0443}, + {0xA7B6,0xA7E6,0x0444}, + {0xA7B7,0xA7E7,0x0445}, + {0xA7B8,0xA7E8,0x0446}, + {0xA7B9,0xA7E9,0x0447}, + {0xA7BA,0xA7EA,0x0448}, + {0xA7BB,0xA7EB,0x0449}, + {0xA7BC,0xA7EC,0x044A}, + {0xA7BD,0xA7ED,0x044B}, + {0xA7BE,0xA7EE,0x044C}, + {0xA7BF,0xA7EF,0x044D}, + {0xA7C0,0xA7F0,0x044E}, /* A7F0 */ + {0xA7C1,0xA7F1,0x044F}, + {0xA7F2,0xA7F2,0x003F}, + {0xA7F3,0xA7F3,0x003F}, + {0xA7F4,0xA7F4,0x003F}, + {0xA7F5,0xA7F5,0x003F}, + {0xA7F6,0xA7F6,0x003F}, + {0xA7F7,0xA7F7,0x003F}, + {0xA7F8,0xA7F8,0x003F}, + {0xA7F9,0xA7F9,0x003F}, + {0xA7FA,0xA7FA,0x003F}, + {0xA7FB,0xA7FB,0x003F}, + {0xA7FC,0xA7FC,0x003F}, + {0xA7FD,0xA7FD,0x003F}, + {0xA7FE,0xA7FE,0x003F}, + {0xA7FF,0xA7FF,0x003F}, +}; + + +/* Case info pages for JIS-X-0212 range */ +static MY_UNICASE_INFO c8FA6[]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0x8FA6A0,0x8FA6A0,0x003F}, /* 8FA6A0 */ + {0x8FA6A1,0x8FA6A1,0x003F}, + {0x8FA6A2,0x8FA6A2,0x003F}, + {0x8FA6A3,0x8FA6A3,0x003F}, + {0x8FA6A4,0x8FA6A4,0x003F}, + {0x8FA6A5,0x8FA6A5,0x003F}, + {0x8FA6A6,0x8FA6A6,0x003F}, + {0x8FA6A7,0x8FA6A7,0x003F}, + {0x8FA6A8,0x8FA6A8,0x003F}, + {0x8FA6A9,0x8FA6A9,0x003F}, + {0x8FA6AA,0x8FA6AA,0x003F}, + {0x8FA6AB,0x8FA6AB,0x003F}, + {0x8FA6AC,0x8FA6AC,0x003F}, + {0x8FA6AD,0x8FA6AD,0x003F}, + {0x8FA6AE,0x8FA6AE,0x003F}, + {0x8FA6AF,0x8FA6AF,0x003F}, + {0x8FA6B0,0x8FA6B0,0x003F}, /* 8FA6B0 */ + {0x8FA6B1,0x8FA6B1,0x003F}, + {0x8FA6B2,0x8FA6B2,0x003F}, + {0x8FA6B3,0x8FA6B3,0x003F}, + {0x8FA6B4,0x8FA6B4,0x003F}, + {0x8FA6B5,0x8FA6B5,0x003F}, + {0x8FA6B6,0x8FA6B6,0x003F}, + {0x8FA6B7,0x8FA6B7,0x003F}, + {0x8FA6B8,0x8FA6B8,0x003F}, + {0x8FA6B9,0x8FA6B9,0x003F}, + {0x8FA6BA,0x8FA6BA,0x003F}, + {0x8FA6BB,0x8FA6BB,0x003F}, + {0x8FA6BC,0x8FA6BC,0x003F}, + {0x8FA6BD,0x8FA6BD,0x003F}, + {0x8FA6BE,0x8FA6BE,0x003F}, + {0x8FA6BF,0x8FA6BF,0x003F}, + {0x8FA6C0,0x8FA6C0,0x003F}, /* 8FA6C0 */ + {0x8FA6C1,0x8FA6C1,0x003F}, + {0x8FA6C2,0x8FA6C2,0x003F}, + {0x8FA6C3,0x8FA6C3,0x003F}, + {0x8FA6C4,0x8FA6C4,0x003F}, + {0x8FA6C5,0x8FA6C5,0x003F}, + {0x8FA6C6,0x8FA6C6,0x003F}, + {0x8FA6C7,0x8FA6C7,0x003F}, + {0x8FA6C8,0x8FA6C8,0x003F}, + {0x8FA6C9,0x8FA6C9,0x003F}, + {0x8FA6CA,0x8FA6CA,0x003F}, + {0x8FA6CB,0x8FA6CB,0x003F}, + {0x8FA6CC,0x8FA6CC,0x003F}, + {0x8FA6CD,0x8FA6CD,0x003F}, + {0x8FA6CE,0x8FA6CE,0x003F}, + {0x8FA6CF,0x8FA6CF,0x003F}, + {0x8FA6D0,0x8FA6D0,0x003F}, /* 8FA6D0 */ + {0x8FA6D1,0x8FA6D1,0x003F}, + {0x8FA6D2,0x8FA6D2,0x003F}, + {0x8FA6D3,0x8FA6D3,0x003F}, + {0x8FA6D4,0x8FA6D4,0x003F}, + {0x8FA6D5,0x8FA6D5,0x003F}, + {0x8FA6D6,0x8FA6D6,0x003F}, + {0x8FA6D7,0x8FA6D7,0x003F}, + {0x8FA6D8,0x8FA6D8,0x003F}, + {0x8FA6D9,0x8FA6D9,0x003F}, + {0x8FA6DA,0x8FA6DA,0x003F}, + {0x8FA6DB,0x8FA6DB,0x003F}, + {0x8FA6DC,0x8FA6DC,0x003F}, + {0x8FA6DD,0x8FA6DD,0x003F}, + {0x8FA6DE,0x8FA6DE,0x003F}, + {0x8FA6DF,0x8FA6DF,0x003F}, + {0x8FA6E0,0x8FA6E0,0x003F}, /* 8FA6E0 */ + {0x8FA6E1,0x8FA6F1,0x0386}, + {0x8FA6E2,0x8FA6F2,0x0388}, + {0x8FA6E3,0x8FA6F3,0x0389}, + {0x8FA6E4,0x8FA6F4,0x038A}, + {0x8FA6E5,0x8FA6F5,0x03AA}, + {0x8FA6E6,0x8FA6E6,0x003F}, + {0x8FA6E7,0x8FA6F7,0x038C}, + {0x8FA6E8,0x8FA6E8,0x003F}, + {0x8FA6E9,0x8FA6F9,0x038E}, + {0x8FA6EA,0x8FA6FA,0x03AB}, + {0x8FA6EB,0x8FA6EB,0x003F}, + {0x8FA6EC,0x8FA6FC,0x038F}, + {0x8FA6ED,0x8FA6ED,0x003F}, + {0x8FA6EE,0x8FA6EE,0x003F}, + {0x8FA6EF,0x8FA6EF,0x003F}, + {0x8FA6F0,0x8FA6F0,0x003F}, /* 8FA6F0 */ + {0x8FA6E1,0x8FA6F1,0x03AC}, + {0x8FA6E2,0x8FA6F2,0x03AD}, + {0x8FA6E3,0x8FA6F3,0x03AE}, + {0x8FA6E4,0x8FA6F4,0x03AF}, + {0x8FA6E5,0x8FA6F5,0x03CA}, + {0x8FA6F6,0x8FA6F6,0x0390}, + {0x8FA6E7,0x8FA6F7,0x03CC}, + { 0xA6B2,0x8FA6F8,0x03C2}, + {0x8FA6E9,0x8FA6F9,0x03CD}, + {0x8FA6EA,0x8FA6FA,0x03CB}, + {0x8FA6FB,0x8FA6FB,0x03B0}, + {0x8FA6EC,0x8FA6FC,0x03CE}, + {0x8FA6FD,0x8FA6FD,0x003F}, + {0x8FA6FE,0x8FA6FE,0x003F}, + {0x8FA6FF,0x8FA6FF,0x003F}, +}; + + +static MY_UNICASE_INFO c8FA7[]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0x8FA7A0,0x8FA7A0,0x003F}, /* 8FA7A0 */ + {0x8FA7A1,0x8FA7A1,0x003F}, + {0x8FA7A2,0x8FA7A2,0x003F}, + {0x8FA7A3,0x8FA7A3,0x003F}, + {0x8FA7A4,0x8FA7A4,0x003F}, + {0x8FA7A5,0x8FA7A5,0x003F}, + {0x8FA7A6,0x8FA7A6,0x003F}, + {0x8FA7A7,0x8FA7A7,0x003F}, + {0x8FA7A8,0x8FA7A8,0x003F}, + {0x8FA7A9,0x8FA7A9,0x003F}, + {0x8FA7AA,0x8FA7AA,0x003F}, + {0x8FA7AB,0x8FA7AB,0x003F}, + {0x8FA7AC,0x8FA7AC,0x003F}, + {0x8FA7AD,0x8FA7AD,0x003F}, + {0x8FA7AE,0x8FA7AE,0x003F}, + {0x8FA7AF,0x8FA7AF,0x003F}, + {0x8FA7B0,0x8FA7B0,0x003F}, /* 8FA7B0 */ + {0x8FA7B1,0x8FA7B1,0x003F}, + {0x8FA7B2,0x8FA7B2,0x003F}, + {0x8FA7B3,0x8FA7B3,0x003F}, + {0x8FA7B4,0x8FA7B4,0x003F}, + {0x8FA7B5,0x8FA7B5,0x003F}, + {0x8FA7B6,0x8FA7B6,0x003F}, + {0x8FA7B7,0x8FA7B7,0x003F}, + {0x8FA7B8,0x8FA7B8,0x003F}, + {0x8FA7B9,0x8FA7B9,0x003F}, + {0x8FA7BA,0x8FA7BA,0x003F}, + {0x8FA7BB,0x8FA7BB,0x003F}, + {0x8FA7BC,0x8FA7BC,0x003F}, + {0x8FA7BD,0x8FA7BD,0x003F}, + {0x8FA7BE,0x8FA7BE,0x003F}, + {0x8FA7BF,0x8FA7BF,0x003F}, + {0x8FA7C0,0x8FA7C0,0x003F}, /* 8FA7C0 */ + {0x8FA7C1,0x8FA7C1,0x003F}, + {0x8FA7C2,0x8FA7F2,0x0402}, + {0x8FA7C3,0x8FA7F3,0x0403}, + {0x8FA7C4,0x8FA7F4,0x0404}, + {0x8FA7C5,0x8FA7F5,0x0405}, + {0x8FA7C6,0x8FA7F6,0x0406}, + {0x8FA7C7,0x8FA7F7,0x0407}, + {0x8FA7C8,0x8FA7F8,0x0408}, + {0x8FA7C9,0x8FA7F9,0x0409}, + {0x8FA7CA,0x8FA7FA,0x040A}, + {0x8FA7CB,0x8FA7FB,0x040B}, + {0x8FA7CC,0x8FA7FC,0x040C}, + {0x8FA7CD,0x8FA7FD,0x040E}, + {0x8FA7CE,0x8FA7FE,0x040F}, + {0x8FA7CF,0x8FA7CF,0x003F}, + {0x8FA7D0,0x8FA7D0,0x003F}, /* 8FA7D0 */ + {0x8FA7D1,0x8FA7D1,0x003F}, + {0x8FA7D2,0x8FA7D2,0x003F}, + {0x8FA7D3,0x8FA7D3,0x003F}, + {0x8FA7D4,0x8FA7D4,0x003F}, + {0x8FA7D5,0x8FA7D5,0x003F}, + {0x8FA7D6,0x8FA7D6,0x003F}, + {0x8FA7D7,0x8FA7D7,0x003F}, + {0x8FA7D8,0x8FA7D8,0x003F}, + {0x8FA7D9,0x8FA7D9,0x003F}, + {0x8FA7DA,0x8FA7DA,0x003F}, + {0x8FA7DB,0x8FA7DB,0x003F}, + {0x8FA7DC,0x8FA7DC,0x003F}, + {0x8FA7DD,0x8FA7DD,0x003F}, + {0x8FA7DE,0x8FA7DE,0x003F}, + {0x8FA7DF,0x8FA7DF,0x003F}, + {0x8FA7E0,0x8FA7E0,0x003F}, /* 8FA7E0 */ + {0x8FA7E1,0x8FA7E1,0x003F}, + {0x8FA7E2,0x8FA7E2,0x003F}, + {0x8FA7E3,0x8FA7E3,0x003F}, + {0x8FA7E4,0x8FA7E4,0x003F}, + {0x8FA7E5,0x8FA7E5,0x003F}, + {0x8FA7E6,0x8FA7E6,0x003F}, + {0x8FA7E7,0x8FA7E7,0x003F}, + {0x8FA7E8,0x8FA7E8,0x003F}, + {0x8FA7E9,0x8FA7E9,0x003F}, + {0x8FA7EA,0x8FA7EA,0x003F}, + {0x8FA7EB,0x8FA7EB,0x003F}, + {0x8FA7EC,0x8FA7EC,0x003F}, + {0x8FA7ED,0x8FA7ED,0x003F}, + {0x8FA7EE,0x8FA7EE,0x003F}, + {0x8FA7EF,0x8FA7EF,0x003F}, + {0x8FA7F0,0x8FA7F0,0x003F}, /* 8FA7F0 */ + {0x8FA7F1,0x8FA7F1,0x003F}, + {0x8FA7C2,0x8FA7F2,0x0452}, + {0x8FA7C3,0x8FA7F3,0x0453}, + {0x8FA7C4,0x8FA7F4,0x0454}, + {0x8FA7C5,0x8FA7F5,0x0455}, + {0x8FA7C6,0x8FA7F6,0x0456}, + {0x8FA7C7,0x8FA7F7,0x0457}, + {0x8FA7C8,0x8FA7F8,0x0458}, + {0x8FA7C9,0x8FA7F9,0x0459}, + {0x8FA7CA,0x8FA7FA,0x045A}, + {0x8FA7CB,0x8FA7FB,0x045B}, + {0x8FA7CC,0x8FA7FC,0x045C}, + {0x8FA7CD,0x8FA7FD,0x045E}, + {0x8FA7CE,0x8FA7FE,0x045F}, + {0x8FA7FF,0x8FA7FF,0x003F} +}; + + +static MY_UNICASE_INFO c8FA9[]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0x8FA9A0,0x8FA9A0,0x003F}, /* 8FA9A0 */ + {0x8FA9A1,0x8FA9C1,0x00C6}, + {0x8FA9A2,0x8FA9C2,0x0110}, + {0x8FA9A3,0x8FA9A3,0x003F}, + {0x8FA9A4,0x8FA9C4,0x0126}, + {0x8FA9A5,0x8FA9A5,0x003F}, + {0x8FA9A6,0x8FA9C6,0x0132}, + {0x8FA9A7,0x8FA9A7,0x003F}, + {0x8FA9A8,0x8FA9C8,0x0141}, + {0x8FA9A9,0x8FA9C9,0x013F}, + {0x8FA9AA,0x8FA9AA,0x003F}, + {0x8FA9AB,0x8FA9CB,0x014A}, + {0x8FA9AC,0x8FA9CC,0x00D8}, + {0x8FA9AD,0x8FA9CD,0x0152}, + {0x8FA9AE,0x8FA9AE,0x003F}, + {0x8FA9AF,0x8FA9CF,0x0166}, + {0x8FA9B0,0x8FA9D0,0x00DE}, /* 8FA9B0 */ + {0x8FA9B1,0x8FA9B1,0x003F}, + {0x8FA9B2,0x8FA9B2,0x003F}, + {0x8FA9B3,0x8FA9B3,0x003F}, + {0x8FA9B4,0x8FA9B4,0x003F}, + {0x8FA9B5,0x8FA9B5,0x003F}, + {0x8FA9B6,0x8FA9B6,0x003F}, + {0x8FA9B7,0x8FA9B7,0x003F}, + {0x8FA9B8,0x8FA9B8,0x003F}, + {0x8FA9B9,0x8FA9B9,0x003F}, + {0x8FA9BA,0x8FA9BA,0x003F}, + {0x8FA9BB,0x8FA9BB,0x003F}, + {0x8FA9BC,0x8FA9BC,0x003F}, + {0x8FA9BD,0x8FA9BD,0x003F}, + {0x8FA9BE,0x8FA9BE,0x003F}, + {0x8FA9BF,0x8FA9BF,0x003F}, + {0x8FA9C0,0x8FA9C0,0x003F}, /* 8FA9C0 */ + {0x8FA9A1,0x8FA9C1,0x00E6}, + {0x8FA9A2,0x8FA9C2,0x0111}, + {0x8FA9C3,0x8FA9C3,0x00F0}, + {0x8FA9A4,0x8FA9C4,0x0127}, + { 0x49,0x8FA9C5,0x0131}, + {0x8FA9A6,0x8FA9C6,0x0133}, + {0x8FA9C7,0x8FA9C7,0x0138}, + {0x8FA9A8,0x8FA9C8,0x0142}, + {0x8FA9A9,0x8FA9C9,0x0140}, + {0x8FA9CA,0x8FA9CA,0x0149}, + {0x8FA9AB,0x8FA9CB,0x014B}, + {0x8FA9AC,0x8FA9CC,0x00F8}, + {0x8FA9AD,0x8FA9CD,0x0153}, + {0x8FA9CE,0x8FA9CE,0x00DF}, + {0x8FA9AF,0x8FA9CF,0x0167}, + {0x8FA9B0,0x8FA9D0,0x00FE}, /* 8FA9D0 */ + {0x8FA9D1,0x8FA9D1,0x003F}, + {0x8FA9D2,0x8FA9D2,0x003F}, + {0x8FA9D3,0x8FA9D3,0x003F}, + {0x8FA9D4,0x8FA9D4,0x003F}, + {0x8FA9D5,0x8FA9D5,0x003F}, + {0x8FA9D6,0x8FA9D6,0x003F}, + {0x8FA9D7,0x8FA9D7,0x003F}, + {0x8FA9D8,0x8FA9D8,0x003F}, + {0x8FA9D9,0x8FA9D9,0x003F}, + {0x8FA9DA,0x8FA9DA,0x003F}, + {0x8FA9DB,0x8FA9DB,0x003F}, + {0x8FA9DC,0x8FA9DC,0x003F}, + {0x8FA9DD,0x8FA9DD,0x003F}, + {0x8FA9DE,0x8FA9DE,0x003F}, + {0x8FA9DF,0x8FA9DF,0x003F}, + {0x8FA9E0,0x8FA9E0,0x003F}, /* 8FA9E0 */ + {0x8FA9E1,0x8FA9E1,0x003F}, + {0x8FA9E2,0x8FA9E2,0x003F}, + {0x8FA9E3,0x8FA9E3,0x003F}, + {0x8FA9E4,0x8FA9E4,0x003F}, + {0x8FA9E5,0x8FA9E5,0x003F}, + {0x8FA9E6,0x8FA9E6,0x003F}, + {0x8FA9E7,0x8FA9E7,0x003F}, + {0x8FA9E8,0x8FA9E8,0x003F}, + {0x8FA9E9,0x8FA9E9,0x003F}, + {0x8FA9EA,0x8FA9EA,0x003F}, + {0x8FA9EB,0x8FA9EB,0x003F}, + {0x8FA9EC,0x8FA9EC,0x003F}, + {0x8FA9ED,0x8FA9ED,0x003F}, + {0x8FA9EE,0x8FA9EE,0x003F}, + {0x8FA9EF,0x8FA9EF,0x003F}, + {0x8FA9F0,0x8FA9F0,0x003F}, /* 8FA9F0 */ + {0x8FA9F1,0x8FA9F1,0x003F}, + {0x8FA9F2,0x8FA9F2,0x003F}, + {0x8FA9F3,0x8FA9F3,0x003F}, + {0x8FA9F4,0x8FA9F4,0x003F}, + {0x8FA9F5,0x8FA9F5,0x003F}, + {0x8FA9F6,0x8FA9F6,0x003F}, + {0x8FA9F7,0x8FA9F7,0x003F}, + {0x8FA9F8,0x8FA9F8,0x003F}, + {0x8FA9F9,0x8FA9F9,0x003F}, + {0x8FA9FA,0x8FA9FA,0x003F}, + {0x8FA9FB,0x8FA9FB,0x003F}, + {0x8FA9FC,0x8FA9FC,0x003F}, + {0x8FA9FD,0x8FA9FD,0x003F}, + {0x8FA9FE,0x8FA9FE,0x003F}, + {0x8FA9FF,0x8FA9FF,0x003F}, +}; + + +static MY_UNICASE_INFO c8FAA[]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0x8FAAA0,0x8FAAA0,0x003F}, /* 8FAAA0 */ + {0x8FAAA1,0x8FABA1,0x00C1}, + {0x8FAAA2,0x8FABA2,0x00C0}, + {0x8FAAA3,0x8FABA3,0x00C4}, + {0x8FAAA4,0x8FABA4,0x00C2}, + {0x8FAAA5,0x8FABA5,0x0102}, + {0x8FAAA6,0x8FABA6,0x01CD}, + {0x8FAAA7,0x8FABA7,0x0100}, + {0x8FAAA8,0x8FABA8,0x0104}, + {0x8FAAA9,0x8FABA9,0x00C5}, + {0x8FAAAA,0x8FABAA,0x00C3}, + {0x8FAAAB,0x8FABAB,0x0106}, + {0x8FAAAC,0x8FABAC,0x0108}, + {0x8FAAAD,0x8FABAD,0x010C}, + {0x8FAAAE,0x8FABAE,0x00C7}, + {0x8FAAAF,0x8FABAF,0x010A}, + {0x8FAAB0,0x8FABB0,0x010E}, /* 8FAAB0 */ + {0x8FAAB1,0x8FABB1,0x00C9}, + {0x8FAAB2,0x8FABB2,0x00C8}, + {0x8FAAB3,0x8FABB3,0x00CB}, + {0x8FAAB4,0x8FABB4,0x00CA}, + {0x8FAAB5,0x8FABB5,0x011A}, + {0x8FAAB6,0x8FABB6,0x0116}, + {0x8FAAB7,0x8FABB7,0x0112}, + {0x8FAAB8,0x8FABB8,0x0118}, + {0x8FAAB9,0x8FAAB9,0x003F}, + {0x8FAABA,0x8FABBA,0x011C}, + {0x8FAABB,0x8FABBB,0x011E}, + {0x8FAABC,0x8FAABC,0x0122}, + {0x8FAABD,0x8FABBD,0x0120}, + {0x8FAABE,0x8FABBE,0x0124}, + {0x8FAABF,0x8FABBF,0x00CD}, + {0x8FAAC0,0x8FABC0,0x00CC}, /* 8FAAC0 */ + {0x8FAAC1,0x8FABC1,0x00CF}, + {0x8FAAC2,0x8FABC2,0x00CE}, + {0x8FAAC3,0x8FABC3,0x01CF}, + {0x8FAAC4, 0x69,0x0130}, + {0x8FAAC5,0x8FABC5,0x012A}, + {0x8FAAC6,0x8FABC6,0x012E}, + {0x8FAAC7,0x8FABC7,0x0128}, + {0x8FAAC8,0x8FABC8,0x0134}, + {0x8FAAC9,0x8FABC9,0x0136}, + {0x8FAACA,0x8FABCA,0x0139}, + {0x8FAACB,0x8FABCB,0x013D}, + {0x8FAACC,0x8FABCC,0x013B}, + {0x8FAACD,0x8FABCD,0x0143}, + {0x8FAACE,0x8FABCE,0x0147}, + {0x8FAACF,0x8FABCF,0x0145}, + {0x8FAAD0,0x8FABD0,0x00D1}, /* 8FAAD0 */ + {0x8FAAD1,0x8FABD1,0x00D3}, + {0x8FAAD2,0x8FABD2,0x00D2}, + {0x8FAAD3,0x8FABD3,0x00D6}, + {0x8FAAD4,0x8FABD4,0x00D4}, + {0x8FAAD5,0x8FABD5,0x01D1}, + {0x8FAAD6,0x8FABD6,0x0150}, + {0x8FAAD7,0x8FABD7,0x014C}, + {0x8FAAD8,0x8FABD8,0x00D5}, + {0x8FAAD9,0x8FABD9,0x0154}, + {0x8FAADA,0x8FABDA,0x0158}, + {0x8FAADB,0x8FABDB,0x0156}, + {0x8FAADC,0x8FABDC,0x015A}, + {0x8FAADD,0x8FABDD,0x015C}, + {0x8FAADE,0x8FABDE,0x0160}, + {0x8FAADF,0x8FABDF,0x015E}, + {0x8FAAE0,0x8FABE0,0x0164}, /* 8FAAE0 */ + {0x8FAAE1,0x8FABE1,0x0162}, + {0x8FAAE2,0x8FABE2,0x00DA}, + {0x8FAAE3,0x8FABE3,0x00D9}, + {0x8FAAE4,0x8FABE4,0x00DC}, + {0x8FAAE5,0x8FABE5,0x00DB}, + {0x8FAAE6,0x8FABE6,0x016C}, + {0x8FAAE7,0x8FABE7,0x01D3}, + {0x8FAAE8,0x8FABE8,0x0170}, + {0x8FAAE9,0x8FABE9,0x016A}, + {0x8FAAEA,0x8FABEA,0x0172}, + {0x8FAAEB,0x8FABEB,0x016E}, + {0x8FAAEC,0x8FABEC,0x0168}, + {0x8FAAED,0x8FABED,0x01D7}, + {0x8FAAEE,0x8FABEE,0x01DB}, + {0x8FAAEF,0x8FABEF,0x01D9}, + {0x8FAAF0,0x8FABF0,0x01D5}, /* 8FAAF0 */ + {0x8FAAF1,0x8FABF1,0x0174}, + {0x8FAAF2,0x8FABF2,0x00DD}, + {0x8FAAF3,0x8FABF3,0x0178}, + {0x8FAAF4,0x8FABF4,0x0176}, + {0x8FAAF5,0x8FABF5,0x0179}, + {0x8FAAF6,0x8FABF6,0x017D}, + {0x8FAAF7,0x8FABF7,0x017B}, + {0x8FAAF8,0x8FAAF8,0x003F}, + {0x8FAAF9,0x8FAAF9,0x003F}, + {0x8FAAFA,0x8FAAFA,0x003F}, + {0x8FAAFB,0x8FAAFB,0x003F}, + {0x8FAAFC,0x8FAAFC,0x003F}, + {0x8FAAFD,0x8FAAFD,0x003F}, + {0x8FAAFE,0x8FAAFE,0x003F}, + {0x8FAAFF,0x8FAAFF,0x003F}, +}; + + +static MY_UNICASE_INFO c8FAB[]= +{ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */ + {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, + {0x8FABA0,0x8FABA0,0x003F}, /* 8FABA0 */ + {0x8FAAA1,0x8FABA1,0x00E1}, + {0x8FAAA2,0x8FABA2,0x00E0}, + {0x8FAAA3,0x8FABA3,0x00E4}, + {0x8FAAA4,0x8FABA4,0x00E2}, + {0x8FAAA5,0x8FABA5,0x0103}, + {0x8FAAA6,0x8FABA6,0x01CE}, + {0x8FAAA7,0x8FABA7,0x0101}, + {0x8FAAA8,0x8FABA8,0x0105}, + {0x8FAAA9,0x8FABA9,0x00E5}, + {0x8FAAAA,0x8FABAA,0x00E3}, + {0x8FAAAB,0x8FABAB,0x0107}, + {0x8FAAAC,0x8FABAC,0x0109}, + {0x8FAAAD,0x8FABAD,0x010D}, + {0x8FAAAE,0x8FABAE,0x00E7}, + {0x8FAAAF,0x8FABAF,0x010B}, + {0x8FAAB0,0x8FABB0,0x010F}, /* 8FABB0 */ + {0x8FAAB1,0x8FABB1,0x00E9}, + {0x8FAAB2,0x8FABB2,0x00E8}, + {0x8FAAB3,0x8FABB3,0x00EB}, + {0x8FAAB4,0x8FABB4,0x00EA}, + {0x8FAAB5,0x8FABB5,0x011B}, + {0x8FAAB6,0x8FABB6,0x0117}, + {0x8FAAB7,0x8FABB7,0x0113}, + {0x8FAAB8,0x8FABB8,0x0119}, + {0x8FABB9,0x8FABB9,0x01F5}, + {0x8FAABA,0x8FABBA,0x011D}, + {0x8FAABB,0x8FABBB,0x011F}, + {0x8FABBC,0x8FABBC,0x003F}, + {0x8FAABD,0x8FABBD,0x0121}, + {0x8FAABE,0x8FABBE,0x0125}, + {0x8FAABF,0x8FABBF,0x00ED}, + {0x8FAAC0,0x8FABC0,0x00EC}, /* 8FABC0 */ + {0x8FAAC1,0x8FABC1,0x00EF}, + {0x8FAAC2,0x8FABC2,0x00EE}, + {0x8FAAC3,0x8FABC3,0x01D0}, + {0x8FABC4,0x8FABC4,0x003F}, + {0x8FAAC5,0x8FABC5,0x012B}, + {0x8FAAC6,0x8FABC6,0x012F}, + {0x8FAAC7,0x8FABC7,0x0129}, + {0x8FAAC8,0x8FABC8,0x0135}, + {0x8FAAC9,0x8FABC9,0x0137}, + {0x8FAACA,0x8FABCA,0x013A}, + {0x8FAACB,0x8FABCB,0x013E}, + {0x8FAACC,0x8FABCC,0x013C}, + {0x8FAACD,0x8FABCD,0x0144}, + {0x8FAACE,0x8FABCE,0x0148}, + {0x8FAACF,0x8FABCF,0x0146}, + {0x8FAAD0,0x8FABD0,0x00F1}, /* 8FABD0 */ + {0x8FAAD1,0x8FABD1,0x00F3}, + {0x8FAAD2,0x8FABD2,0x00F2}, + {0x8FAAD3,0x8FABD3,0x00F6}, + {0x8FAAD4,0x8FABD4,0x00F4}, + {0x8FAAD5,0x8FABD5,0x01D2}, + {0x8FAAD6,0x8FABD6,0x0151}, + {0x8FAAD7,0x8FABD7,0x014D}, + {0x8FAAD8,0x8FABD8,0x00F5}, + {0x8FAAD9,0x8FABD9,0x0155}, + {0x8FAADA,0x8FABDA,0x0159}, + {0x8FAADB,0x8FABDB,0x0157}, + {0x8FAADC,0x8FABDC,0x015B}, + {0x8FAADD,0x8FABDD,0x015D}, + {0x8FAADE,0x8FABDE,0x0161}, + {0x8FAADF,0x8FABDF,0x015F}, + {0x8FAAE0,0x8FABE0,0x0165}, /* 8FABE0 */ + {0x8FAAE1,0x8FABE1,0x0163}, + {0x8FAAE2,0x8FABE2,0x00FA}, + {0x8FAAE3,0x8FABE3,0x00F9}, + {0x8FAAE4,0x8FABE4,0x00FC}, + {0x8FAAE5,0x8FABE5,0x00FB}, + {0x8FAAE6,0x8FABE6,0x016D}, + {0x8FAAE7,0x8FABE7,0x01D4}, + {0x8FAAE8,0x8FABE8,0x0171}, + {0x8FAAE9,0x8FABE9,0x016B}, + {0x8FAAEA,0x8FABEA,0x0173}, + {0x8FAAEB,0x8FABEB,0x016F}, + {0x8FAAEC,0x8FABEC,0x0169}, + {0x8FAAED,0x8FABED,0x01D8}, + {0x8FAAEE,0x8FABEE,0x01DC}, + {0x8FAAEF,0x8FABEF,0x01DA}, + {0x8FAAF0,0x8FABF0,0x01D6}, /* 8FABF0 */ + {0x8FAAF1,0x8FABF1,0x0175}, + {0x8FAAF2,0x8FABF2,0x00FD}, + {0x8FAAF3,0x8FABF3,0x00FF}, + {0x8FAAF4,0x8FABF4,0x0177}, + {0x8FAAF5,0x8FABF5,0x017A}, + {0x8FAAF6,0x8FABF6,0x017E}, + {0x8FAAF7,0x8FABF7,0x017C}, + {0x8FABF8,0x8FABF8,0x003F}, + {0x8FABF9,0x8FABF9,0x003F}, + {0x8FABFA,0x8FABFA,0x003F}, + {0x8FABFB,0x8FABFB,0x003F}, + {0x8FABFC,0x8FABFC,0x003F}, + {0x8FABFD,0x8FABFD,0x003F}, + {0x8FABFE,0x8FABFE,0x003F}, + {0x8FABFF,0x8FABFF,0x003F} +}; + + +static MY_UNICASE_INFO *my_caseinfo_ujis[512]= +{ + /* JIS-X-0208 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 1 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 2 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 3 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 4 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 5 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 6 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 7 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 8 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 9 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, cA2, cA3, NULL, NULL, cA6, cA7, /* A */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* B */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* C */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* D */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* E */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* F */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + + /* JIS-X-0212 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 1 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 2 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 3 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 4 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 5 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 6 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 7 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 8 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 9 */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL,c8FA6,c8FA7, /* A */ + NULL, c8FA9,c8FAA,c8FAB,NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* B */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* C */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* D */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* E */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* F */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +}; +#endif /* HAVE_CHARSET_ujis */ + + + +#if defined(HAVE_CHARSET_ujis) || defined(HAVE_CHARSET_eucjpms) + +/* + UJIS and EUCJPMS share the same UPPER/LOWER functions. +*/ + +static MY_UNICASE_INFO* +get_case_info_for_ch(CHARSET_INFO *cs, uint plane, uint page, uint offs) +{ + MY_UNICASE_INFO *p; + return (p= cs->caseinfo[page + plane * 256]) ? &p[offs & 0xFF] : NULL; +} + + +/* + Generic function to handle UPPER and LOWER translation +*/ +static size_t +my_casefold_ujis(CHARSET_INFO *cs, + char *src, size_t srclen, + char *dst, size_t dstlen __attribute__((unused)), + uchar *map, + size_t is_upper) +{ + char *srcend= src + srclen, *dst0= dst; + + while (src < srcend) + { + size_t mblen= my_ismbchar(cs, src, srcend); + if (mblen) + { + MY_UNICASE_INFO *ch; + ch= (mblen == 2) ? + get_case_info_for_ch(cs, 0, (uchar) src[0], (uchar) src[1]) : + get_case_info_for_ch(cs, 1, (uchar) src[1], (uchar) src[2]); + if (ch) + { + int code= is_upper ? ch->toupper : ch->tolower; + src+= mblen; + if (code > 0xFFFF) + *dst++= (char) (uchar) ((code >> 16) & 0xFF); + if (code > 0xFF) + *dst++= (char) (uchar) ((code >> 8) & 0xFF); + *dst++= (char) (uchar) (code & 0xFF); + } + else + { + if (mblen == 3) + *dst++= *src++; + *dst++= *src++; + *dst++= *src++; + } + } + else + { + *dst++= (char) map[(uchar) *src++]; + } + } + return (size_t) (dst - dst0); +} + + +/* + LOWER() +*/ +size_t +my_casedn_ujis(CHARSET_INFO * cs, char *src, size_t srclen, + char *dst, size_t dstlen) +{ + DBUG_ASSERT(dstlen >= srclen * cs->casedn_multiply); + DBUG_ASSERT(src != dst || cs->casedn_multiply == 1); + return my_casefold_ujis(cs, src, srclen, dst, dstlen, cs->to_lower, 0); +} + + +/* + UPPER() +*/ +size_t +my_caseup_ujis(CHARSET_INFO * cs, char *src, size_t srclen, + char *dst, size_t dstlen) +{ + DBUG_ASSERT(dstlen >= srclen * cs->caseup_multiply); + DBUG_ASSERT(src != dst || cs->caseup_multiply == 1); + return my_casefold_ujis(cs, src, srclen, dst, dstlen, cs->to_upper, 1); +} +#endif /* defined(HAVE_CHARSET_ujis) || defined(HAVE_CHARSET_eucjpms) */ + + + +#ifdef HAVE_CHARSET_ujis + static MY_COLLATION_HANDLER my_collation_ci_handler = { NULL, /* init */ @@ -8524,8 +9781,8 @@ static MY_CHARSET_HANDLER my_charset_handler= my_mb_ctype_mb, my_caseup_str_mb, my_casedn_str_mb, - my_caseup_mb, - my_casedn_mb, + my_caseup_ujis, + my_casedn_ujis, my_snprintf_8bit, my_long10_to_str_8bit, my_longlong10_to_str_8bit, @@ -8558,12 +9815,12 @@ CHARSET_INFO my_charset_ujis_japanese_ci= NULL, /* contractions */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ + my_caseinfo_ujis, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ 1, /* caseup_multiply */ - 1, /* casedn_multiply */ + 2, /* casedn_multiply */ 1, /* mbminlen */ 3, /* mbmaxlen */ 0, /* min_sort_char */ @@ -8591,12 +9848,12 @@ CHARSET_INFO my_charset_ujis_bin= NULL, /* sort_order_big*/ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ - my_unicase_default, /* caseinfo */ + my_caseinfo_ujis, /* caseinfo */ NULL, /* state_map */ NULL, /* ident_map */ 1, /* strxfrm_multiply */ 1, /* caseup_multiply */ - 1, /* casedn_multiply */ + 2, /* casedn_multiply */ 1, /* mbminlen */ 3, /* mbmaxlen */ 0, /* min_sort_char */ @@ -8608,4 +9865,4 @@ CHARSET_INFO my_charset_ujis_bin= }; -#endif +#endif /* HAVE_CHARSET_ujis */ diff --git a/strings/ctype.c b/strings/ctype.c index 75d76aceea3..4891e657b6e 100644 --- a/strings/ctype.c +++ b/strings/ctype.c @@ -74,6 +74,7 @@ struct my_cs_file_section_st #define _CS_DIFF1 19 #define _CS_DIFF2 20 #define _CS_DIFF3 21 +#define _CS_IDENTICAL 22 static struct my_cs_file_section_st sec[] = @@ -108,6 +109,7 @@ static struct my_cs_file_section_st sec[] = {_CS_DIFF1, "charsets/charset/collation/rules/p"}, {_CS_DIFF2, "charsets/charset/collation/rules/s"}, {_CS_DIFF3, "charsets/charset/collation/rules/t"}, + {_CS_IDENTICAL, "charsets/charset/collation/rules/i"}, {0, NULL} }; @@ -269,6 +271,7 @@ static int cs_value(MY_XML_PARSER *st,const char *attr, size_t len) case _CS_DIFF1: case _CS_DIFF2: case _CS_DIFF3: + case _CS_IDENTICAL: { /* Convert collation description from @@ -276,7 +279,7 @@ static int cs_value(MY_XML_PARSER *st,const char *attr, size_t len) into ICU Collation Customization expression. */ char arg[16]; - const char *cmd[]= {"&","<","<<","<<<"}; + const char *cmd[]= {"&","<","<<","<<<","="}; i->cs.tailoring= i->tailoring; mstr(arg,attr,len,sizeof(arg)-1); if (i->tailoring_length + 20 < sizeof(i->tailoring)) diff --git a/strings/decimal.c b/strings/decimal.c index 282e7cae8ab..42dc33e5ac6 100644 --- a/strings/decimal.c +++ b/strings/decimal.c @@ -137,12 +137,6 @@ static const dec1 frac_max[DIG_PER_DEC1-1]={ 900000000, 990000000, 999000000, 999900000, 999990000, 999999000, 999999900, 999999990 }; -static double scaler10[]= { - 1.0, 1e10, 1e20, 1e30, 1e40, 1e50, 1e60, 1e70, 1e80, 1e90 -}; -static double scaler1[]= { - 1.0, 10.0, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9 -}; #ifdef HAVE_purify #define sanity(d) DBUG_ASSERT((d)->len > 0) @@ -947,33 +941,25 @@ fatal_error: to - result will be stored there RETURN VALUE - E_DEC_OK + E_DEC_OK/E_DEC_OVERFLOW/E_DEC_TRUNCATED */ int decimal2double(decimal_t *from, double *to) { - double result= 0.0; - int i, exp= 0; - dec1 *buf= from->buf; - - for (i= from->intg; i > 0; i-= DIG_PER_DEC1) - result= result * DIG_BASE + *buf++; - - for (i= from->frac; i > 0; i-= DIG_PER_DEC1) { - result= result * DIG_BASE + *buf++; - exp+= DIG_PER_DEC1; - } - - DBUG_PRINT("info", ("interm.: %f %d %f", result, exp, - scaler10[exp / 10] * scaler1[exp % 10])); + char strbuf[FLOATING_POINT_BUFFER], *end; + int len= sizeof(strbuf); + int rc, error; - result/= scaler10[exp / 10] * scaler1[exp % 10]; - - *to= from->sign ? -result : result; + rc = decimal2string(from, strbuf, &len, 0, 0, 0); + end= strbuf + len; + + DBUG_PRINT("info", ("interm.: %s", strbuf)); + *to= my_strtod(strbuf, &end, &error); + DBUG_PRINT("info", ("result: %f (%lx)", *to, *(ulong *)to)); - return E_DEC_OK; + return (rc != E_DEC_OK) ? rc : (error ? E_DEC_OVERFLOW : E_DEC_OK); } /* @@ -990,13 +976,10 @@ int decimal2double(decimal_t *from, double *to) int double2decimal(double from, decimal_t *to) { - /* TODO: fix it, when we'll have dtoa */ - char buff[400], *end; - int length, res; + char buff[FLOATING_POINT_BUFFER], *end; + int res; DBUG_ENTER("double2decimal"); - length= my_sprintf(buff, (buff, "%.16G", from)); - DBUG_PRINT("info",("from: %g from_as_str: %s", from, buff)); - end= buff+length; + end= buff + my_gcvt(from, MY_GCVT_ARG_DOUBLE, sizeof(buff) - 1, buff, NULL); res= string2decimal(buff, to, &end); DBUG_PRINT("exit", ("res: %d", res)); DBUG_RETURN(res); diff --git a/strings/dtoa.c b/strings/dtoa.c new file mode 100644 index 00000000000..88e0d9272a8 --- /dev/null +++ b/strings/dtoa.c @@ -0,0 +1,2780 @@ +/* Copyright (C) 2007 MySQL AB + + This 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; version 2 + of the License. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/**************************************************************** + + This file incorporates work covered by the following copyright and + permission notice: + + The author of this software is David M. Gay. + + Copyright (c) 1991, 2000, 2001 by Lucent Technologies. + + Permission to use, copy, modify, and distribute this software for any + purpose without fee is hereby granted, provided that this entire notice + is included in all copies of any software which is or includes a copy + or modification of this software and in all copies of the supporting + documentation for such software. + + THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED + WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY + REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY + OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + + ***************************************************************/ + +#include <my_base.h> /* for EOVERFLOW on Windows */ +#include <my_global.h> +#include <m_string.h> /* for memcpy and NOT_FIXED_DEC */ + +/** + Appears to suffice to not call malloc() in most cases. + @todo + see if it is possible to get rid of malloc(). + this constant is sufficient to avoid malloc() on all inputs I have tried. +*/ +#define DTOA_BUFF_SIZE (420 * sizeof(void *)) + +/* Magic value returned by dtoa() to indicate overflow */ +#define DTOA_OVERFLOW 9999 + +static double my_strtod_int(const char *, char **, int *, char *, size_t); +static char *dtoa(double, int, int, int *, int *, char **, char *, size_t); +static void dtoa_free(char *, char *, size_t); + +/** + @brief + Converts a given floating point number to a zero-terminated string + representation using the 'f' format. + + @details + This function is a wrapper around dtoa() to do the same as + sprintf(to, "%-.*f", precision, x), though the conversion is usually more + precise. The only difference is in handling [-,+]infinity and nan values, + in which case we print '0\0' to the output string and indicate an overflow. + + @param x the input floating point number. + @param precision the number of digits after the decimal point. + All properties of sprintf() apply: + - if the number of significant digits after the decimal + point is less than precision, the resulting string is + right-padded with zeros + - if the precision is 0, no decimal point appears + - if a decimal point appears, at least one digit appears + before it + @param to pointer to the output buffer. The longest string which + my_fcvt() can return is FLOATING_POINT_BUFFER bytes + (including the terminating '\0'). + @param error if not NULL, points to a location where the status of + conversion is stored upon return. + FALSE successful conversion + TRUE the input number is [-,+]infinity or nan. + The output string in this case is always '0'. + @return number of written characters (excluding terminating '\0') +*/ + +size_t my_fcvt(double x, int precision, char *to, my_bool *error) +{ + int decpt, sign, len, i; + char *res, *src, *end, *dst= to; + char buf[DTOA_BUFF_SIZE]; + DBUG_ASSERT(precision >= 0 && precision < NOT_FIXED_DEC && to != NULL); + + res= dtoa(x, 5, precision, &decpt, &sign, &end, buf, sizeof(buf)); + + if (decpt == DTOA_OVERFLOW) + { + dtoa_free(res, buf, sizeof(buf)); + *to++= '0'; + *to= '\0'; + if (error != NULL) + *error= TRUE; + return 1; + } + + src= res; + len= end - src; + + if (sign) + *dst++= '-'; + + if (decpt <= 0) + { + *dst++= '0'; + *dst++= '.'; + for (i= decpt; i < 0; i++) + *dst++= '0'; + } + + for (i= 1; i <= len; i++) + { + *dst++= *src++; + if (i == decpt && i < len) + *dst++= '.'; + } + while (i++ <= decpt) + *dst++= '0'; + + if (precision > 0) + { + if (len <= decpt) + *dst++= '.'; + + for (i= precision - max(0, (len - decpt)); i > 0; i--) + *dst++= '0'; + } + + *dst= '\0'; + if (error != NULL) + *error= FALSE; + + dtoa_free(res, buf, sizeof(buf)); + + return dst - to; +} + +/** + @brief + Converts a given floating point number to a zero-terminated string + representation with a given field width using the 'e' format + (aka scientific notation) or the 'f' one. + + @details + The format is chosen automatically to provide the most number of significant + digits (and thus, precision) with a given field width. In many cases, the + result is similar to that of sprintf(to, "%g", x) with a few notable + differences: + - the conversion is usually more precise than C library functions. + - there is no 'precision' argument. instead, we specify the number of + characters available for conversion (i.e. a field width). + - the result never exceeds the specified field width. If the field is too + short to contain even a rounded decimal representation, my_gcvt() + indicates overflow and truncates the output string to the specified width. + - float-type arguments are handled differently than double ones. For a + float input number (i.e. when the 'type' argument is MY_GCVT_ARG_FLOAT) + we deliberately limit the precision of conversion by FLT_DIG digits to + avoid garbage past the significant digits. + - unlike sprintf(), in cases where the 'e' format is preferred, we don't + zero-pad the exponent to save space for significant digits. The '+' sign + for a positive exponent does not appear for the same reason. + + @param x the input floating point number. + @param type is either MY_GCVT_ARG_FLOAT or MY_GCVT_ARG_DOUBLE. + Specifies the type of the input number (see notes above). + @param width field width in characters. The minimal field width to + hold any number representation (albeit rounded) is 7 + characters ("-Ne-NNN"). + @param to pointer to the output buffer. The result is always + zero-terminated, and the longest returned string is thus + 'width + 1' bytes. + @param error if not NULL, points to a location where the status of + conversion is stored upon return. + FALSE successful conversion + TRUE the input number is [-,+]infinity or nan. + The output string in this case is always '0'. + @return number of written characters (excluding terminating '\0') + + @todo + Check if it is possible and makes sense to do our own rounding on top of + dtoa() instead of calling dtoa() twice in (rare) cases when the resulting + string representation does not fit in the specified field width and we want + to re-round the input number with fewer significant digits. Examples: + + my_gcvt(-9e-3, ..., 4, ...); + my_gcvt(-9e-3, ..., 2, ...); + my_gcvt(1.87e-3, ..., 4, ...); + my_gcvt(55, ..., 1, ...); + + We do our best to minimize such cases by: + + - passing to dtoa() the field width as the number of significant digits + + - removing the sign of the number early (and decreasing the width before + passing it to dtoa()) + + - choosing the proper format to preserve the most number of significant + digits. +*/ + +size_t my_gcvt(double x, my_gcvt_arg_type type, int width, char *to, + my_bool *error) +{ + int decpt, sign, len, exp_len; + char *res, *src, *end, *dst= to, *dend= dst + width; + char buf[DTOA_BUFF_SIZE]; + my_bool have_space, force_e_format; + DBUG_ASSERT(width > 0 && to != NULL); + + /* We want to remove '-' from equations early */ + if (x < 0.) + width--; + + res= dtoa(x, 4, type == MY_GCVT_ARG_DOUBLE ? width : min(width, FLT_DIG), + &decpt, &sign, &end, buf, sizeof(buf)); + if (decpt == DTOA_OVERFLOW) + { + dtoa_free(res, buf, sizeof(buf)); + *to++= '0'; + *to= '\0'; + if (error != NULL) + *error= TRUE; + return 1; + } + + if (error != NULL) + *error= FALSE; + + src= res; + len= end - res; + + /* + Number of digits in the exponent from the 'e' conversion. + The sign of the exponent is taken into account separetely, we don't need + to count it here. + */ + exp_len= 1 + (decpt >= 101 || decpt <= -99) + (decpt >= 11 || decpt <= -9); + + /* + Do we have enough space for all digits in the 'f' format? + Let 'len' be the number of significant digits returned by dtoa, + and F be the length of the resulting decimal representation. + Consider the following cases: + 1. decpt <= 0, i.e. we have "0.NNN" => F = len - decpt + 2 + 2. 0 < decpt < len, i.e. we have "NNN.NNN" => F = len + 1 + 3. len <= decpt, i.e. we have "NNN00" => F = decpt + */ + have_space= (decpt <= 0 ? len - decpt + 2 : + decpt > 0 && decpt < len ? len + 1 : + decpt) <= width; + /* + The following is true when no significant digits can be placed with the + specified field width using the 'f' format, and the 'e' format + will not be truncated. + */ + force_e_format= (decpt <= 0 && width <= 2 - decpt && width >= 3 + exp_len); + /* + Assume that we don't have enough space to place all significant digits in + the 'f' format. We have to choose between the 'e' format and the 'f' one + to keep as many significant digits as possible. + Let E and F be the lengths of decimal representaion in the 'e' and 'f' + formats, respectively. We want to use the 'f' format if, and only if F <= E. + Consider the following cases: + 1. decpt <= 0. + F = len - decpt + 2 (see above) + E = len + (len > 1) + 1 + 1 (decpt <= -99) + (decpt <= -9) + 1 + ("N.NNe-MMM") + (F <= E) <=> (len == 1 && decpt >= -1) || (len > 1 && decpt >= -2) + We also need to ensure that if the 'f' format is chosen, + the field width allows us to place at least one significant digit + (i.e. width > 2 - decpt). If not, we prefer the 'e' format. + 2. 0 < decpt < len + F = len + 1 (see above) + E = len + 1 + 1 + ... ("N.NNeMMM") + F is always less than E. + 3. len <= decpt <= width + In this case we have enough space to represent the number in the 'f' + format, so we prefer it with some exceptions. + 4. width < decpt + The number cannot be represented in the 'f' format at all, always use + the 'e' 'one. + */ + if ((have_space || + /* + Not enough space, let's see if the 'f' format provides the most number + of significant digits. + */ + ((decpt <= width && (decpt >= -1 || (decpt == -2 && + (len > 1 || !force_e_format)))) && + !force_e_format)) && + + /* + Use the 'e' format in some cases even if we have enough space for the + 'f' one. See comment for MAX_DECPT_FOR_F_FORMAT. + */ + (!have_space || (decpt >= -MAX_DECPT_FOR_F_FORMAT + 1 && + (decpt <= MAX_DECPT_FOR_F_FORMAT || len > decpt)))) + { + /* 'f' format */ + int i; + + width-= (decpt < len) + (decpt <= 0 ? 1 - decpt : 0); + + /* Do we have to truncate any digits? */ + if (width < len) + { + if (width < decpt) + { + if (error != NULL) + *error= TRUE; + width= decpt; + } + + /* + We want to truncate (len - width) least significant digits after the + decimal point. For this we are calling dtoa with mode=5, passing the + number of significant digits = (len-decpt) - (len-width) = width-decpt + */ + dtoa_free(res, buf, sizeof(buf)); + res= dtoa(x, 5, width - decpt, &decpt, &sign, &end, buf, sizeof(buf)); + src= res; + len= end - res; + } + + if (len == 0) + { + /* Underflow. Just print '0' and exit */ + *dst++= '0'; + goto end; + } + + /* + At this point we are sure we have enough space to put all digits + returned by dtoa + */ + if (sign && dst < dend) + *dst++= '-'; + if (decpt <= 0) + { + if (dst < dend) + *dst++= '0'; + if (len > 0 && dst < dend) + *dst++= '.'; + for (; decpt < 0 && dst < dend; decpt++) + *dst++= '0'; + } + + for (i= 1; i <= len && dst < dend; i++) + { + *dst++= *src++; + if (i == decpt && i < len && dst < dend) + *dst++= '.'; + } + while (i++ <= decpt && dst < dend) + *dst++= '0'; + } + else + { + /* 'e' format */ + int decpt_sign= 0; + + if (--decpt < 0) + { + decpt= -decpt; + width--; + decpt_sign= 1; + } + width-= 1 + exp_len; /* eNNN */ + + if (len > 1) + width--; + + if (width <= 0) + { + /* Overflow */ + if (error != NULL) + *error= TRUE; + width= 0; + } + + /* Do we have to truncate any digits? */ + if (width < len) + { + /* Yes, re-convert with a smaller width */ + dtoa_free(res, buf, sizeof(buf)); + res= dtoa(x, 4, width, &decpt, &sign, &end, buf, sizeof(buf)); + src= res; + len= end - res; + if (--decpt < 0) + decpt= -decpt; + } + /* + At this point we are sure we have enough space to put all digits + returned by dtoa + */ + if (sign && dst < dend) + *dst++= '-'; + if (dst < dend) + *dst++= *src++; + if (len > 1 && dst < dend) + { + *dst++= '.'; + while (src < end && dst < dend) + *dst++= *src++; + } + if (dst < dend) + *dst++= 'e'; + if (decpt_sign && dst < dend) + *dst++= '-'; + + if (decpt >= 100 && dst < dend) + { + *dst++= decpt / 100 + '0'; + decpt%= 100; + if (dst < dend) + *dst++= decpt / 10 + '0'; + } + else if (decpt >= 10 && dst < dend) + *dst++= decpt / 10 + '0'; + if (dst < dend) + *dst++= decpt % 10 + '0'; + + } + +end: + dtoa_free(res, buf, sizeof(buf)); + *dst= '\0'; + + return dst - to; +} + +/** + @brief + Converts string to double (string does not have to be zero-terminated) + + @details + This is a wrapper around dtoa's version of strtod(). + + @param str input string + @param end address of a pointer to the first character after the input + string. Upon return the pointer is set to point to the first + rejected character. + @param error Upon return is set to EOVERFLOW in case of underflow or + overflow. + + @return The resulting double value. In case of underflow, 0.0 is + returned. In case overflow, signed DBL_MAX is returned. +*/ + +double my_strtod(const char *str, char **end, int *error) +{ + char buf[DTOA_BUFF_SIZE]; + double res; + DBUG_ASSERT(str != NULL && end != NULL && *end != NULL && error != NULL); + + res= my_strtod_int(str, end, error, buf, sizeof(buf)); + return (*error == 0) ? res : (res < 0 ? -DBL_MAX : DBL_MAX); +} + + +double my_atof(const char *nptr) +{ + int error; + const char *end= nptr+65535; /* Should be enough */ + return (my_strtod(nptr, (char**) &end, &error)); +} + + +/**************************************************************** + * + * The author of this software is David M. Gay. + * + * Copyright (c) 1991, 2000, 2001 by Lucent Technologies. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose without fee is hereby granted, provided that this entire notice + * is included in all copies of any software which is or includes a copy + * or modification of this software and in all copies of the supporting + * documentation for such software. + * + * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED + * WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY + * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY + * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + * + ***************************************************************/ +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +/* + Original copy of the software is located at http://www.netlib.org/fp/dtoa.c + It was adjusted to serve MySQL server needs: + * strtod() was modified to not expect a zero-terminated string. + It now honors 'se' (end of string) argument as the input parameter, + not just as the output one. + * in dtoa(), in case of overflow/underflow/NaN result string now contains "0"; + decpt is set to DTOA_OVERFLOW to indicate overflow. + * support for VAX, IBM mainframe and 16-bit hardware removed + * we always assume that 64-bit integer type is available + * support for Kernigan-Ritchie style headers (pre-ANSI compilers) + removed + * all gcc warnings ironed out + * we always assume multithreaded environment, so we had to change + memory allocation procedures to use stack in most cases; + malloc is used as the last resort. + * pow5mult rewritten to use pre-calculated pow5 list instead of + the one generated on the fly. +*/ + + +/* + On a machine with IEEE extended-precision registers, it is + necessary to specify double-precision (53-bit) rounding precision + before invoking strtod or dtoa. If the machine uses (the equivalent + of) Intel 80x87 arithmetic, the call + _control87(PC_53, MCW_PC); + does this with many compilers. Whether this or another call is + appropriate depends on the compiler; for this to work, it may be + necessary to #include "float.h" or another system-dependent header + file. +*/ + +/* + #define Honor_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3 + and dtoa should round accordingly. + #define Check_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3 + and Honor_FLT_ROUNDS is not #defined. + + TODO: check if we can get rid of the above two +*/ + +typedef int32 Long; +typedef uint32 ULong; +typedef int64 LLong; +typedef uint64 ULLong; + +typedef union { double d; ULong L[2]; } U; + +#if defined(WORDS_BIGENDIAN) || (defined(__FLOAT_WORD_ORDER) && \ + (__FLOAT_WORD_ORDER == __BIG_ENDIAN)) +#define word0(x) ((U*)&x)->L[0] +#define word1(x) ((U*)&x)->L[1] +#else +#define word0(x) ((U*)&x)->L[1] +#define word1(x) ((U*)&x)->L[0] +#endif + +#define dval(x) ((U*)&x)->d + +/* #define P DBL_MANT_DIG */ +/* Ten_pmax= floor(P*log(2)/log(5)) */ +/* Bletch= (highest power of 2 < DBL_MAX_10_EXP) / 16 */ +/* Quick_max= floor((P-1)*log(FLT_RADIX)/log(10) - 1) */ +/* Int_max= floor(P*log(FLT_RADIX)/log(10) - 1) */ + +#define Exp_shift 20 +#define Exp_shift1 20 +#define Exp_msk1 0x100000 +#define Exp_mask 0x7ff00000 +#define P 53 +#define Bias 1023 +#define Emin (-1022) +#define Exp_1 0x3ff00000 +#define Exp_11 0x3ff00000 +#define Ebits 11 +#define Frac_mask 0xfffff +#define Frac_mask1 0xfffff +#define Ten_pmax 22 +#define Bletch 0x10 +#define Bndry_mask 0xfffff +#define Bndry_mask1 0xfffff +#define LSB 1 +#define Sign_bit 0x80000000 +#define Log2P 1 +#define Tiny1 1 +#define Quick_max 14 +#define Int_max 14 + +#ifndef Flt_Rounds +#ifdef FLT_ROUNDS +#define Flt_Rounds FLT_ROUNDS +#else +#define Flt_Rounds 1 +#endif +#endif /*Flt_Rounds*/ + +#ifdef Honor_FLT_ROUNDS +#define Rounding rounding +#undef Check_FLT_ROUNDS +#define Check_FLT_ROUNDS +#else +#define Rounding Flt_Rounds +#endif + +#define rounded_product(a,b) a*= b +#define rounded_quotient(a,b) a/= b + +#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1)) +#define Big1 0xffffffff +#define FFFFFFFF 0xffffffffUL + +/* This is tested to be enough for dtoa */ + +#define Kmax 15 + +#define Bcopy(x,y) memcpy((char *)&x->sign, (char *)&y->sign, \ + 2*sizeof(int) + y->wds*sizeof(ULong)) + +/* Arbitrary-length integer */ + +typedef struct Bigint +{ + union { + ULong *x; /* points right after this Bigint object */ + struct Bigint *next; /* to maintain free lists */ + } p; + int k; /* 2^k = maxwds */ + int maxwds; /* maximum length in 32-bit words */ + int sign; /* not zero if number is negative */ + int wds; /* current length in 32-bit words */ +} Bigint; + + +/* A simple stack-memory based allocator for Bigints */ + +typedef struct Stack_alloc +{ + char *begin; + char *free; + char *end; + /* + Having list of free blocks lets us reduce maximum required amount + of memory from ~4000 bytes to < 1680 (tested on x86). + */ + Bigint *freelist[Kmax+1]; +} Stack_alloc; + + +/* + Try to allocate object on stack, and resort to malloc if all + stack memory is used. Ensure allocated objects to be aligned by the pointer + size in order to not break the alignment rules when storing a pointer to a + Bigint. +*/ + +static Bigint *Balloc(int k, Stack_alloc *alloc) +{ + Bigint *rv; + if (k <= Kmax && alloc->freelist[k]) + { + rv= alloc->freelist[k]; + alloc->freelist[k]= rv->p.next; + } + else + { + int x, len; + + x= 1 << k; + len= MY_ALIGN(sizeof(Bigint) + x * sizeof(ULong), SIZEOF_CHARP); + + if (alloc->free + len <= alloc->end) + { + rv= (Bigint*) alloc->free; + alloc->free+= len; + } + else + rv= (Bigint*) malloc(len); + + rv->k= k; + rv->maxwds= x; + } + rv->sign= rv->wds= 0; + rv->p.x= (ULong*) (rv + 1); + return rv; +} + + +/* + If object was allocated on stack, try putting it to the free + list. Otherwise call free(). +*/ + +static void Bfree(Bigint *v, Stack_alloc *alloc) +{ + char *gptr= (char*) v; /* generic pointer */ + if (gptr < alloc->begin || gptr >= alloc->end) + free(gptr); + else if (v->k <= Kmax) + { + /* + Maintain free lists only for stack objects: this way we don't + have to bother with freeing lists in the end of dtoa; + heap should not be used normally anyway. + */ + v->p.next= alloc->freelist[v->k]; + alloc->freelist[v->k]= v; + } +} + + +/* + This is to place return value of dtoa in: tries to use stack + as well, but passes by free lists management and just aligns len by + the pointer size in order to not break the alignment rules when storing a + pointer to a Bigint. +*/ + +static char *dtoa_alloc(int i, Stack_alloc *alloc) +{ + char *rv; + int aligned_size= MY_ALIGN(i, SIZEOF_CHARP); + if (alloc->free + aligned_size <= alloc->end) + { + rv= alloc->free; + alloc->free+= aligned_size; + } + else + rv= malloc(i); + return rv; +} + + +/* + dtoa_free() must be used to free values s returned by dtoa() + This is the counterpart of dtoa_alloc() +*/ + +static void dtoa_free(char *gptr, char *buf, size_t buf_size) +{ + if (gptr < buf || gptr >= buf + buf_size) + free(gptr); +} + + +/* Bigint arithmetic functions */ + +/* Multiply by m and add a */ + +static Bigint *multadd(Bigint *b, int m, int a, Stack_alloc *alloc) +{ + int i, wds; + ULong *x; + ULLong carry, y; + Bigint *b1; + + wds= b->wds; + x= b->p.x; + i= 0; + carry= a; + do + { + y= *x * (ULLong)m + carry; + carry= y >> 32; + *x++= (ULong)(y & FFFFFFFF); + } + while (++i < wds); + if (carry) + { + if (wds >= b->maxwds) + { + b1= Balloc(b->k+1, alloc); + Bcopy(b1, b); + Bfree(b, alloc); + b= b1; + } + b->p.x[wds++]= (ULong) carry; + b->wds= wds; + } + return b; +} + + +static Bigint *s2b(const char *s, int nd0, int nd, ULong y9, Stack_alloc *alloc) +{ + Bigint *b; + int i, k; + Long x, y; + + x= (nd + 8) / 9; + for (k= 0, y= 1; x > y; y <<= 1, k++) ; + b= Balloc(k, alloc); + b->p.x[0]= y9; + b->wds= 1; + + i= 9; + if (9 < nd0) + { + s+= 9; + do + b= multadd(b, 10, *s++ - '0', alloc); + while (++i < nd0); + s++; + } + else + s+= 10; + for(; i < nd; i++) + b= multadd(b, 10, *s++ - '0', alloc); + return b; +} + + +static int hi0bits(register ULong x) +{ + register int k= 0; + + if (!(x & 0xffff0000)) + { + k= 16; + x<<= 16; + } + if (!(x & 0xff000000)) + { + k+= 8; + x<<= 8; + } + if (!(x & 0xf0000000)) + { + k+= 4; + x<<= 4; + } + if (!(x & 0xc0000000)) + { + k+= 2; + x<<= 2; + } + if (!(x & 0x80000000)) + { + k++; + if (!(x & 0x40000000)) + return 32; + } + return k; +} + + +static int lo0bits(ULong *y) +{ + register int k; + register ULong x= *y; + + if (x & 7) + { + if (x & 1) + return 0; + if (x & 2) + { + *y= x >> 1; + return 1; + } + *y= x >> 2; + return 2; + } + k= 0; + if (!(x & 0xffff)) + { + k= 16; + x>>= 16; + } + if (!(x & 0xff)) + { + k+= 8; + x>>= 8; + } + if (!(x & 0xf)) + { + k+= 4; + x>>= 4; + } + if (!(x & 0x3)) + { + k+= 2; + x>>= 2; + } + if (!(x & 1)) + { + k++; + x>>= 1; + if (!x) + return 32; + } + *y= x; + return k; +} + + +/* Convert integer to Bigint number */ + +static Bigint *i2b(int i, Stack_alloc *alloc) +{ + Bigint *b; + + b= Balloc(1, alloc); + b->p.x[0]= i; + b->wds= 1; + return b; +} + + +/* Multiply two Bigint numbers */ + +static Bigint *mult(Bigint *a, Bigint *b, Stack_alloc *alloc) +{ + Bigint *c; + int k, wa, wb, wc; + ULong *x, *xa, *xae, *xb, *xbe, *xc, *xc0; + ULong y; + ULLong carry, z; + + if (a->wds < b->wds) + { + c= a; + a= b; + b= c; + } + k= a->k; + wa= a->wds; + wb= b->wds; + wc= wa + wb; + if (wc > a->maxwds) + k++; + c= Balloc(k, alloc); + for (x= c->p.x, xa= x + wc; x < xa; x++) + *x= 0; + xa= a->p.x; + xae= xa + wa; + xb= b->p.x; + xbe= xb + wb; + xc0= c->p.x; + for (; xb < xbe; xc0++) + { + if ((y= *xb++)) + { + x= xa; + xc= xc0; + carry= 0; + do + { + z= *x++ * (ULLong)y + *xc + carry; + carry= z >> 32; + *xc++= (ULong) (z & FFFFFFFF); + } + while (x < xae); + *xc= (ULong) carry; + } + } + for (xc0= c->p.x, xc= xc0 + wc; wc > 0 && !*--xc; --wc) ; + c->wds= wc; + return c; +} + + +/* + Precalculated array of powers of 5: tested to be enough for + vasting majority of dtoa_r cases. +*/ + +static ULong powers5[]= +{ + 625UL, + + 390625UL, + + 2264035265UL, 35UL, + + 2242703233UL, 762134875UL, 1262UL, + + 3211403009UL, 1849224548UL, 3668416493UL, 3913284084UL, 1593091UL, + + 781532673UL, 64985353UL, 253049085UL, 594863151UL, 3553621484UL, + 3288652808UL, 3167596762UL, 2788392729UL, 3911132675UL, 590UL, + + 2553183233UL, 3201533787UL, 3638140786UL, 303378311UL, 1809731782UL, + 3477761648UL, 3583367183UL, 649228654UL, 2915460784UL, 487929380UL, + 1011012442UL, 1677677582UL, 3428152256UL, 1710878487UL, 1438394610UL, + 2161952759UL, 4100910556UL, 1608314830UL, 349175UL +}; + + +static Bigint p5_a[]= +{ + /* { x } - k - maxwds - sign - wds */ + { { powers5 }, 1, 1, 0, 1 }, + { { powers5 + 1 }, 1, 1, 0, 1 }, + { { powers5 + 2 }, 1, 2, 0, 2 }, + { { powers5 + 4 }, 2, 3, 0, 3 }, + { { powers5 + 7 }, 3, 5, 0, 5 }, + { { powers5 + 12 }, 4, 10, 0, 10 }, + { { powers5 + 22 }, 5, 19, 0, 19 } +}; + +#define P5A_MAX (sizeof(p5_a)/sizeof(*p5_a) - 1) + +static Bigint *pow5mult(Bigint *b, int k, Stack_alloc *alloc) +{ + Bigint *b1, *p5, *p51; + int i; + static int p05[3]= { 5, 25, 125 }; + + if ((i= k & 3)) + b= multadd(b, p05[i-1], 0, alloc); + + if (!(k>>= 2)) + return b; + p5= p5_a; + for (;;) + { + if (k & 1) + { + b1= mult(b, p5, alloc); + Bfree(b, alloc); + b= b1; + } + if (!(k>>= 1)) + break; + /* Calculate next power of 5 */ + if (p5 < p5_a + P5A_MAX) + ++p5; + else if (p5 == p5_a + P5A_MAX) + p5= mult(p5, p5, alloc); + else + { + p51= mult(p5, p5, alloc); + Bfree(p5, alloc); + p5= p51; + } + } + return b; +} + + +static Bigint *lshift(Bigint *b, int k, Stack_alloc *alloc) +{ + int i, k1, n, n1; + Bigint *b1; + ULong *x, *x1, *xe, z; + + n= k >> 5; + k1= b->k; + n1= n + b->wds + 1; + for (i= b->maxwds; n1 > i; i<<= 1) + k1++; + b1= Balloc(k1, alloc); + x1= b1->p.x; + for (i= 0; i < n; i++) + *x1++= 0; + x= b->p.x; + xe= x + b->wds; + if (k&= 0x1f) + { + k1= 32 - k; + z= 0; + do + { + *x1++= *x << k | z; + z= *x++ >> k1; + } + while (x < xe); + if ((*x1= z)) + ++n1; + } + else + do + *x1++= *x++; + while (x < xe); + b1->wds= n1 - 1; + Bfree(b, alloc); + return b1; +} + + +static int cmp(Bigint *a, Bigint *b) +{ + ULong *xa, *xa0, *xb, *xb0; + int i, j; + + i= a->wds; + j= b->wds; + if (i-= j) + return i; + xa0= a->p.x; + xa= xa0 + j; + xb0= b->p.x; + xb= xb0 + j; + for (;;) + { + if (*--xa != *--xb) + return *xa < *xb ? -1 : 1; + if (xa <= xa0) + break; + } + return 0; +} + + +static Bigint *diff(Bigint *a, Bigint *b, Stack_alloc *alloc) +{ + Bigint *c; + int i, wa, wb; + ULong *xa, *xae, *xb, *xbe, *xc; + ULLong borrow, y; + + i= cmp(a,b); + if (!i) + { + c= Balloc(0, alloc); + c->wds= 1; + c->p.x[0]= 0; + return c; + } + if (i < 0) + { + c= a; + a= b; + b= c; + i= 1; + } + else + i= 0; + c= Balloc(a->k, alloc); + c->sign= i; + wa= a->wds; + xa= a->p.x; + xae= xa + wa; + wb= b->wds; + xb= b->p.x; + xbe= xb + wb; + xc= c->p.x; + borrow= 0; + do + { + y= (ULLong)*xa++ - *xb++ - borrow; + borrow= y >> 32 & (ULong)1; + *xc++= (ULong) (y & FFFFFFFF); + } + while (xb < xbe); + while (xa < xae) + { + y= *xa++ - borrow; + borrow= y >> 32 & (ULong)1; + *xc++= (ULong) (y & FFFFFFFF); + } + while (!*--xc) + wa--; + c->wds= wa; + return c; +} + + +static double ulp(double x) +{ + register Long L; + double a; + + L= (word0(x) & Exp_mask) - (P - 1)*Exp_msk1; + word0(a) = L; + word1(a) = 0; + return dval(a); +} + + +static double b2d(Bigint *a, int *e) +{ + ULong *xa, *xa0, w, y, z; + int k; + double d; +#define d0 word0(d) +#define d1 word1(d) + + xa0= a->p.x; + xa= xa0 + a->wds; + y= *--xa; + k= hi0bits(y); + *e= 32 - k; + if (k < Ebits) + { + d0= Exp_1 | y >> (Ebits - k); + w= xa > xa0 ? *--xa : 0; + d1= y << ((32-Ebits) + k) | w >> (Ebits - k); + goto ret_d; + } + z= xa > xa0 ? *--xa : 0; + if (k-= Ebits) + { + d0= Exp_1 | y << k | z >> (32 - k); + y= xa > xa0 ? *--xa : 0; + d1= z << k | y >> (32 - k); + } + else + { + d0= Exp_1 | y; + d1= z; + } + ret_d: +#undef d0 +#undef d1 + return dval(d); +} + + +static Bigint *d2b(double d, int *e, int *bits, Stack_alloc *alloc) +{ + Bigint *b; + int de, k; + ULong *x, y, z; + int i; +#define d0 word0(d) +#define d1 word1(d) + + b= Balloc(1, alloc); + x= b->p.x; + + z= d0 & Frac_mask; + d0 &= 0x7fffffff; /* clear sign bit, which we ignore */ + if ((de= (int)(d0 >> Exp_shift))) + z|= Exp_msk1; + if ((y= d1)) + { + if ((k= lo0bits(&y))) + { + x[0]= y | z << (32 - k); + z>>= k; + } + else + x[0]= y; + i= b->wds= (x[1]= z) ? 2 : 1; + } + else + { + k= lo0bits(&z); + x[0]= z; + i= b->wds= 1; + k+= 32; + } + if (de) + { + *e= de - Bias - (P-1) + k; + *bits= P - k; + } + else + { + *e= de - Bias - (P-1) + 1 + k; + *bits= 32*i - hi0bits(x[i-1]); + } + return b; +#undef d0 +#undef d1 +} + + +static double ratio(Bigint *a, Bigint *b) +{ + double da, db; + int k, ka, kb; + + dval(da)= b2d(a, &ka); + dval(db)= b2d(b, &kb); + k= ka - kb + 32*(a->wds - b->wds); + if (k > 0) + word0(da)+= k*Exp_msk1; + else + { + k= -k; + word0(db)+= k*Exp_msk1; + } + return dval(da) / dval(db); +} + +static const double tens[] = +{ + 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, + 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, + 1e20, 1e21, 1e22 +}; + +static const double bigtens[]= { 1e16, 1e32, 1e64, 1e128, 1e256 }; +static const double tinytens[]= +{ 1e-16, 1e-32, 1e-64, 1e-128, + 9007199254740992.*9007199254740992.e-256 /* = 2^106 * 1e-53 */ +}; +/* + The factor of 2^53 in tinytens[4] helps us avoid setting the underflow + flag unnecessarily. It leads to a song and dance at the end of strtod. +*/ +#define Scale_Bit 0x10 +#define n_bigtens 5 + +/* + strtod for IEEE--arithmetic machines. + + This strtod returns a nearest machine number to the input decimal + string (or sets errno to EOVERFLOW). Ties are broken by the IEEE round-even + rule. + + Inspired loosely by William D. Clinger's paper "How to Read Floating + Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 92-101]. + + Modifications: + + 1. We only require IEEE (not IEEE double-extended). + 2. We get by with floating-point arithmetic in a case that + Clinger missed -- when we're computing d * 10^n + for a small integer d and the integer n is not too + much larger than 22 (the maximum integer k for which + we can represent 10^k exactly), we may be able to + compute (d*10^k) * 10^(e-k) with just one roundoff. + 3. Rather than a bit-at-a-time adjustment of the binary + result in the hard case, we use floating-point + arithmetic to determine the adjustment to within + one bit; only in really hard cases do we need to + compute a second residual. + 4. Because of 3., we don't need a large table of powers of 10 + for ten-to-e (just some small tables, e.g. of 10^k + for 0 <= k <= 22). +*/ + +static double my_strtod_int(const char *s00, char **se, int *error, char *buf, size_t buf_size) +{ + int scale; + int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, dsign, + e, e1, esign, i, j, k, nd, nd0, nf, nz, nz0, sign; + const char *s, *s0, *s1, *end = *se; + double aadj, aadj1, adj, rv, rv0; + Long L; + ULong y, z; + Bigint *bb, *bb1, *bd, *bd0, *bs, *delta; +#ifdef SET_INEXACT + int inexact, oldinexact; +#endif +#ifdef Honor_FLT_ROUNDS + int rounding; +#endif + Stack_alloc alloc; + LINT_INIT(c); + + *error= 0; + + alloc.begin= alloc.free= buf; + alloc.end= buf + buf_size; + memset(alloc.freelist, 0, sizeof(alloc.freelist)); + + sign= nz0= nz= 0; + dval(rv)= 0.; + for (s= s00; s < end; s++) + switch (*s) { + case '-': + sign= 1; + /* no break */ + case '+': + s++; + goto break2; + case '\t': + case '\n': + case '\v': + case '\f': + case '\r': + case ' ': + continue; + default: + goto break2; + } + break2: + if (s >= end) + goto ret0; + + if (*s == '0') + { + nz0= 1; + while (++s < end && *s == '0') ; + if (s >= end) + goto ret; + } + s0= s; + y= z= 0; + for (nd= nf= 0; s < end && (c= *s) >= '0' && c <= '9'; nd++, s++) + if (nd < 9) + y= 10*y + c - '0'; + else if (nd < 16) + z= 10*z + c - '0'; + nd0= nd; + if (s < end - 1 && c == '.') + { + c= *++s; + if (!nd) + { + for (; s < end && c == '0'; c= *++s) + nz++; + if (s < end && c > '0' && c <= '9') + { + s0= s; + nf+= nz; + nz= 0; + goto have_dig; + } + goto dig_done; + } + for (; s < end && c >= '0' && c <= '9'; c = *++s) + { + have_dig: + nz++; + if (c-= '0') + { + nf+= nz; + for (i= 1; i < nz; i++) + if (nd++ < 9) + y*= 10; + else if (nd <= DBL_DIG + 1) + z*= 10; + if (nd++ < 9) + y= 10*y + c; + else if (nd <= DBL_DIG + 1) + z= 10*z + c; + nz= 0; + } + } + } + dig_done: + e= 0; + if (s < end && (c == 'e' || c == 'E')) + { + if (!nd && !nz && !nz0) + goto ret0; + s00= s; + esign= 0; + if (++s < end) + switch (c= *s) { + case '-': + esign= 1; + case '+': + c= *++s; + } + if (s < end && c >= '0' && c <= '9') + { + while (s < end && c == '0') + c= *++s; + if (s < end && c > '0' && c <= '9') { + L= c - '0'; + s1= s; + while (++s < end && (c= *s) >= '0' && c <= '9') + L= 10*L + c - '0'; + if (s - s1 > 8 || L > 19999) + /* Avoid confusion from exponents + * so large that e might overflow. + */ + e= 19999; /* safe for 16 bit ints */ + else + e= (int)L; + if (esign) + e= -e; + } + else + e= 0; + } + else + s= s00; + } + if (!nd) + { + if (!nz && !nz0) + { + ret0: + s= s00; + sign= 0; + } + goto ret; + } + e1= e -= nf; + + /* + Now we have nd0 digits, starting at s0, followed by a + decimal point, followed by nd-nd0 digits. The number we're + after is the integer represented by those digits times + 10**e + */ + + if (!nd0) + nd0= nd; + k= nd < DBL_DIG + 1 ? nd : DBL_DIG + 1; + dval(rv)= y; + if (k > 9) + { +#ifdef SET_INEXACT + if (k > DBL_DIG) + oldinexact = get_inexact(); +#endif + dval(rv)= tens[k - 9] * dval(rv) + z; + } + bd0= 0; + if (nd <= DBL_DIG +#ifndef Honor_FLT_ROUNDS + && Flt_Rounds == 1 +#endif + ) + { + if (!e) + goto ret; + if (e > 0) + { + if (e <= Ten_pmax) + { +#ifdef Honor_FLT_ROUNDS + /* round correctly FLT_ROUNDS = 2 or 3 */ + if (sign) + { + rv= -rv; + sign= 0; + } +#endif + /* rv = */ rounded_product(dval(rv), tens[e]); + goto ret; + } + i= DBL_DIG - nd; + if (e <= Ten_pmax + i) + { + /* + A fancier test would sometimes let us do + this for larger i values. + */ +#ifdef Honor_FLT_ROUNDS + /* round correctly FLT_ROUNDS = 2 or 3 */ + if (sign) + { + rv= -rv; + sign= 0; + } +#endif + e-= i; + dval(rv)*= tens[i]; + /* rv = */ rounded_product(dval(rv), tens[e]); + goto ret; + } + } +#ifndef Inaccurate_Divide + else if (e >= -Ten_pmax) + { +#ifdef Honor_FLT_ROUNDS + /* round correctly FLT_ROUNDS = 2 or 3 */ + if (sign) + { + rv= -rv; + sign= 0; + } +#endif + /* rv = */ rounded_quotient(dval(rv), tens[-e]); + goto ret; + } +#endif + } + e1+= nd - k; + +#ifdef SET_INEXACT + inexact= 1; + if (k <= DBL_DIG) + oldinexact= get_inexact(); +#endif + scale= 0; +#ifdef Honor_FLT_ROUNDS + if ((rounding= Flt_Rounds) >= 2) + { + if (sign) + rounding= rounding == 2 ? 0 : 2; + else + if (rounding != 2) + rounding= 0; + } +#endif + + /* Get starting approximation = rv * 10**e1 */ + + if (e1 > 0) + { + if ((i= e1 & 15)) + dval(rv)*= tens[i]; + if (e1&= ~15) + { + if (e1 > DBL_MAX_10_EXP) + { + ovfl: + *error= EOVERFLOW; + /* Can't trust HUGE_VAL */ +#ifdef Honor_FLT_ROUNDS + switch (rounding) + { + case 0: /* toward 0 */ + case 3: /* toward -infinity */ + word0(rv)= Big0; + word1(rv)= Big1; + break; + default: + word0(rv)= Exp_mask; + word1(rv)= 0; + } +#else /*Honor_FLT_ROUNDS*/ + word0(rv)= Exp_mask; + word1(rv)= 0; +#endif /*Honor_FLT_ROUNDS*/ +#ifdef SET_INEXACT + /* set overflow bit */ + dval(rv0)= 1e300; + dval(rv0)*= dval(rv0); +#endif + if (bd0) + goto retfree; + goto ret; + } + e1>>= 4; + for(j= 0; e1 > 1; j++, e1>>= 1) + if (e1 & 1) + dval(rv)*= bigtens[j]; + /* The last multiplication could overflow. */ + word0(rv)-= P*Exp_msk1; + dval(rv)*= bigtens[j]; + if ((z= word0(rv) & Exp_mask) > Exp_msk1 * (DBL_MAX_EXP + Bias - P)) + goto ovfl; + if (z > Exp_msk1 * (DBL_MAX_EXP + Bias - 1 - P)) + { + /* set to largest number (Can't trust DBL_MAX) */ + word0(rv)= Big0; + word1(rv)= Big1; + } + else + word0(rv)+= P*Exp_msk1; + } + } + else if (e1 < 0) + { + e1= -e1; + if ((i= e1 & 15)) + dval(rv)/= tens[i]; + if ((e1>>= 4)) + { + if (e1 >= 1 << n_bigtens) + goto undfl; + if (e1 & Scale_Bit) + scale= 2 * P; + for(j= 0; e1 > 0; j++, e1>>= 1) + if (e1 & 1) + dval(rv)*= tinytens[j]; + if (scale && (j = 2 * P + 1 - ((word0(rv) & Exp_mask) >> Exp_shift)) > 0) + { + /* scaled rv is denormal; zap j low bits */ + if (j >= 32) + { + word1(rv)= 0; + if (j >= 53) + word0(rv)= (P + 2) * Exp_msk1; + else + word0(rv)&= 0xffffffff << (j - 32); + } + else + word1(rv)&= 0xffffffff << j; + } + if (!dval(rv)) + { + undfl: + dval(rv)= 0.; + if (bd0) + goto retfree; + goto ret; + } + } + } + + /* Now the hard part -- adjusting rv to the correct value.*/ + + /* Put digits into bd: true value = bd * 10^e */ + + bd0= s2b(s0, nd0, nd, y, &alloc); + + for(;;) + { + bd= Balloc(bd0->k, &alloc); + Bcopy(bd, bd0); + bb= d2b(dval(rv), &bbe, &bbbits, &alloc); /* rv = bb * 2^bbe */ + bs= i2b(1, &alloc); + + if (e >= 0) + { + bb2= bb5= 0; + bd2= bd5= e; + } + else + { + bb2= bb5= -e; + bd2= bd5= 0; + } + if (bbe >= 0) + bb2+= bbe; + else + bd2-= bbe; + bs2= bb2; +#ifdef Honor_FLT_ROUNDS + if (rounding != 1) + bs2++; +#endif + j= bbe - scale; + i= j + bbbits - 1; /* logb(rv) */ + if (i < Emin) /* denormal */ + j+= P - Emin; + else + j= P + 1 - bbbits; + bb2+= j; + bd2+= j; + bd2+= scale; + i= bb2 < bd2 ? bb2 : bd2; + if (i > bs2) + i= bs2; + if (i > 0) + { + bb2-= i; + bd2-= i; + bs2-= i; + } + if (bb5 > 0) + { + bs= pow5mult(bs, bb5, &alloc); + bb1= mult(bs, bb, &alloc); + Bfree(bb, &alloc); + bb= bb1; + } + if (bb2 > 0) + bb= lshift(bb, bb2, &alloc); + if (bd5 > 0) + bd= pow5mult(bd, bd5, &alloc); + if (bd2 > 0) + bd= lshift(bd, bd2, &alloc); + if (bs2 > 0) + bs= lshift(bs, bs2, &alloc); + delta= diff(bb, bd, &alloc); + dsign= delta->sign; + delta->sign= 0; + i= cmp(delta, bs); +#ifdef Honor_FLT_ROUNDS + if (rounding != 1) + { + if (i < 0) + { + /* Error is less than an ulp */ + if (!delta->x[0] && delta->wds <= 1) + { + /* exact */ +#ifdef SET_INEXACT + inexact= 0; +#endif + break; + } + if (rounding) + { + if (dsign) + { + adj= 1.; + goto apply_adj; + } + } + else if (!dsign) + { + adj= -1.; + if (!word1(rv) && !(word0(rv) & Frac_mask)) + { + y= word0(rv) & Exp_mask; + if (!scale || y > 2*P*Exp_msk1) + { + delta= lshift(delta,Log2P); + if (cmp(delta, bs) <= 0) + adj= -0.5; + } + } + apply_adj: + if (scale && (y= word0(rv) & Exp_mask) <= 2 * P * Exp_msk1) + word0(adj)+= (2 * P + 1) * Exp_msk1 - y; + dval(rv)+= adj * ulp(dval(rv)); + } + break; + } + adj= ratio(delta, bs); + if (adj < 1.) + adj= 1.; + if (adj <= 0x7ffffffe) + { + /* adj = rounding ? ceil(adj) : floor(adj); */ + y= adj; + if (y != adj) + { + if (!((rounding >> 1) ^ dsign)) + y++; + adj= y; + } + } + if (scale && (y= word0(rv) & Exp_mask) <= 2 * P * Exp_msk1) + word0(adj)+= (2 * P + 1) * Exp_msk1 - y; + adj*= ulp(dval(rv)); + if (dsign) + dval(rv)+= adj; + else + dval(rv)-= adj; + goto cont; + } +#endif /*Honor_FLT_ROUNDS*/ + + if (i < 0) + { + /* + Error is less than half an ulp -- check for special case of mantissa + a power of two. + */ + if (dsign || word1(rv) || word0(rv) & Bndry_mask || + (word0(rv) & Exp_mask) <= (2 * P + 1) * Exp_msk1) + { +#ifdef SET_INEXACT + if (!delta->x[0] && delta->wds <= 1) + inexact= 0; +#endif + break; + } + if (!delta->p.x[0] && delta->wds <= 1) + { + /* exact result */ +#ifdef SET_INEXACT + inexact= 0; +#endif + break; + } + delta= lshift(delta, Log2P, &alloc); + if (cmp(delta, bs) > 0) + goto drop_down; + break; + } + if (i == 0) + { + /* exactly half-way between */ + if (dsign) + { + if ((word0(rv) & Bndry_mask1) == Bndry_mask1 && + word1(rv) == + ((scale && (y = word0(rv) & Exp_mask) <= 2 * P * Exp_msk1) ? + (0xffffffff & (0xffffffff << (2*P+1-(y>>Exp_shift)))) : + 0xffffffff)) + { + /*boundary case -- increment exponent*/ + word0(rv)= (word0(rv) & Exp_mask) + Exp_msk1; + word1(rv) = 0; + dsign = 0; + break; + } + } + else if (!(word0(rv) & Bndry_mask) && !word1(rv)) + { + drop_down: + /* boundary case -- decrement exponent */ + if (scale) + { + L= word0(rv) & Exp_mask; + if (L <= (2 *P + 1) * Exp_msk1) + { + if (L > (P + 2) * Exp_msk1) + /* round even ==> accept rv */ + break; + /* rv = smallest denormal */ + goto undfl; + } + } + L= (word0(rv) & Exp_mask) - Exp_msk1; + word0(rv)= L | Bndry_mask1; + word1(rv)= 0xffffffff; + break; + } + if (!(word1(rv) & LSB)) + break; + if (dsign) + dval(rv)+= ulp(dval(rv)); + else + { + dval(rv)-= ulp(dval(rv)); + if (!dval(rv)) + goto undfl; + } + dsign= 1 - dsign; + break; + } + if ((aadj= ratio(delta, bs)) <= 2.) + { + if (dsign) + aadj= aadj1= 1.; + else if (word1(rv) || word0(rv) & Bndry_mask) + { + if (word1(rv) == Tiny1 && !word0(rv)) + goto undfl; + aadj= 1.; + aadj1= -1.; + } + else + { + /* special case -- power of FLT_RADIX to be rounded down... */ + if (aadj < 2. / FLT_RADIX) + aadj= 1. / FLT_RADIX; + else + aadj*= 0.5; + aadj1= -aadj; + } + } + else + { + aadj*= 0.5; + aadj1= dsign ? aadj : -aadj; +#ifdef Check_FLT_ROUNDS + switch (Rounding) + { + case 2: /* towards +infinity */ + aadj1-= 0.5; + break; + case 0: /* towards 0 */ + case 3: /* towards -infinity */ + aadj1+= 0.5; + } +#else + if (Flt_Rounds == 0) + aadj1+= 0.5; +#endif /*Check_FLT_ROUNDS*/ + } + y= word0(rv) & Exp_mask; + + /* Check for overflow */ + + if (y == Exp_msk1 * (DBL_MAX_EXP + Bias - 1)) + { + dval(rv0)= dval(rv); + word0(rv)-= P * Exp_msk1; + adj= aadj1 * ulp(dval(rv)); + dval(rv)+= adj; + if ((word0(rv) & Exp_mask) >= Exp_msk1 * (DBL_MAX_EXP + Bias - P)) + { + if (word0(rv0) == Big0 && word1(rv0) == Big1) + goto ovfl; + word0(rv)= Big0; + word1(rv)= Big1; + goto cont; + } + else + word0(rv)+= P * Exp_msk1; + } + else + { + if (scale && y <= 2 * P * Exp_msk1) + { + if (aadj <= 0x7fffffff) + { + if ((z= (ULong) aadj) <= 0) + z= 1; + aadj= z; + aadj1= dsign ? aadj : -aadj; + } + word0(aadj1)+= (2 * P + 1) * Exp_msk1 - y; + } + adj = aadj1 * ulp(dval(rv)); + dval(rv) += adj; + } + z= word0(rv) & Exp_mask; +#ifndef SET_INEXACT + if (!scale) + if (y == z) + { + /* Can we stop now? */ + L= (Long)aadj; + aadj-= L; + /* The tolerances below are conservative. */ + if (dsign || word1(rv) || word0(rv) & Bndry_mask) + { + if (aadj < .4999999 || aadj > .5000001) + break; + } + else if (aadj < .4999999 / FLT_RADIX) + break; + } +#endif + cont: + Bfree(bb, &alloc); + Bfree(bd, &alloc); + Bfree(bs, &alloc); + Bfree(delta, &alloc); + } +#ifdef SET_INEXACT + if (inexact) + { + if (!oldinexact) + { + word0(rv0)= Exp_1 + (70 << Exp_shift); + word1(rv0)= 0; + dval(rv0)+= 1.; + } + } + else if (!oldinexact) + clear_inexact(); +#endif + if (scale) + { + word0(rv0)= Exp_1 - 2 * P * Exp_msk1; + word1(rv0)= 0; + dval(rv)*= dval(rv0); + } +#ifdef SET_INEXACT + if (inexact && !(word0(rv) & Exp_mask)) + { + /* set underflow bit */ + dval(rv0)= 1e-300; + dval(rv0)*= dval(rv0); + } +#endif + retfree: + Bfree(bb, &alloc); + Bfree(bd, &alloc); + Bfree(bs, &alloc); + Bfree(bd0, &alloc); + Bfree(delta, &alloc); + ret: + *se= (char *)s; + return sign ? -dval(rv) : dval(rv); +} + + +static int quorem(Bigint *b, Bigint *S) +{ + int n; + ULong *bx, *bxe, q, *sx, *sxe; + ULLong borrow, carry, y, ys; + + n= S->wds; + if (b->wds < n) + return 0; + sx= S->p.x; + sxe= sx + --n; + bx= b->p.x; + bxe= bx + n; + q= *bxe / (*sxe + 1); /* ensure q <= true quotient */ + if (q) + { + borrow= 0; + carry= 0; + do + { + ys= *sx++ * (ULLong)q + carry; + carry= ys >> 32; + y= *bx - (ys & FFFFFFFF) - borrow; + borrow= y >> 32 & (ULong)1; + *bx++= (ULong) (y & FFFFFFFF); + } + while (sx <= sxe); + if (!*bxe) + { + bx= b->p.x; + while (--bxe > bx && !*bxe) + --n; + b->wds= n; + } + } + if (cmp(b, S) >= 0) + { + q++; + borrow= 0; + carry= 0; + bx= b->p.x; + sx= S->p.x; + do + { + ys= *sx++ + carry; + carry= ys >> 32; + y= *bx - (ys & FFFFFFFF) - borrow; + borrow= y >> 32 & (ULong)1; + *bx++= (ULong) (y & FFFFFFFF); + } + while (sx <= sxe); + bx= b->p.x; + bxe= bx + n; + if (!*bxe) + { + while (--bxe > bx && !*bxe) + --n; + b->wds= n; + } + } + return q; +} + + +/* + dtoa for IEEE arithmetic (dmg): convert double to ASCII string. + + Inspired by "How to Print Floating-Point Numbers Accurately" by + Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126]. + + Modifications: + 1. Rather than iterating, we use a simple numeric overestimate + to determine k= floor(log10(d)). We scale relevant + quantities using O(log2(k)) rather than O(k) multiplications. + 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't + try to generate digits strictly left to right. Instead, we + compute with fewer bits and propagate the carry if necessary + when rounding the final digit up. This is often faster. + 3. Under the assumption that input will be rounded nearest, + mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22. + That is, we allow equality in stopping tests when the + round-nearest rule will give the same floating-point value + as would satisfaction of the stopping test with strict + inequality. + 4. We remove common factors of powers of 2 from relevant + quantities. + 5. When converting floating-point integers less than 1e16, + we use floating-point arithmetic rather than resorting + to multiple-precision integers. + 6. When asked to produce fewer than 15 digits, we first try + to get by with floating-point arithmetic; we resort to + multiple-precision integer arithmetic only if we cannot + guarantee that the floating-point calculation has given + the correctly rounded result. For k requested digits and + "uniformly" distributed input, the probability is + something like 10^(k-15) that we must resort to the Long + calculation. + */ + +static char *dtoa(double d, int mode, int ndigits, int *decpt, int *sign, + char **rve, char *buf, size_t buf_size) +{ + /* + Arguments ndigits, decpt, sign are similar to those + of ecvt and fcvt; trailing zeros are suppressed from + the returned string. If not null, *rve is set to point + to the end of the return value. If d is +-Infinity or NaN, + then *decpt is set to DTOA_OVERFLOW. + + mode: + 0 ==> shortest string that yields d when read in + and rounded to nearest. + 1 ==> like 0, but with Steele & White stopping rule; + e.g. with IEEE P754 arithmetic , mode 0 gives + 1e23 whereas mode 1 gives 9.999999999999999e22. + 2 ==> max(1,ndigits) significant digits. This gives a + return value similar to that of ecvt, except + that trailing zeros are suppressed. + 3 ==> through ndigits past the decimal point. This + gives a return value similar to that from fcvt, + except that trailing zeros are suppressed, and + ndigits can be negative. + 4,5 ==> similar to 2 and 3, respectively, but (in + round-nearest mode) with the tests of mode 0 to + possibly return a shorter string that rounds to d. + With IEEE arithmetic and compilation with + -DHonor_FLT_ROUNDS, modes 4 and 5 behave the same + as modes 2 and 3 when FLT_ROUNDS != 1. + 6-9 ==> Debugging modes similar to mode - 4: don't try + fast floating-point estimate (if applicable). + + Values of mode other than 0-9 are treated as mode 0. + + Sufficient space is allocated to the return value + to hold the suppressed trailing zeros. + */ + + int bbits, b2, b5, be, dig, i, ieps, UNINIT_VAR(ilim), ilim0, + UNINIT_VAR(ilim1), j, j1, k, k0, k_check, leftright, m2, m5, s2, s5, + spec_case, try_quick; + Long L; + int denorm; + ULong x; + Bigint *b, *b1, *delta, *mlo, *mhi, *S; + double d2, ds, eps; + char *s, *s0; +#ifdef Honor_FLT_ROUNDS + int rounding; +#endif + Stack_alloc alloc; + + alloc.begin= alloc.free= buf; + alloc.end= buf + buf_size; + memset(alloc.freelist, 0, sizeof(alloc.freelist)); + + if (word0(d) & Sign_bit) + { + /* set sign for everything, including 0's and NaNs */ + *sign= 1; + word0(d) &= ~Sign_bit; /* clear sign bit */ + } + else + *sign= 0; + + /* If infinity, set decpt to DTOA_OVERFLOW, if 0 set it to 1 */ + if (((word0(d) & Exp_mask) == Exp_mask && (*decpt= DTOA_OVERFLOW)) || + (!dval(d) && (*decpt= 1))) + { + /* Infinity, NaN, 0 */ + char *res= (char*) dtoa_alloc(2, &alloc); + res[0]= '0'; + res[1]= '\0'; + if (rve) + *rve= res + 1; + return res; + } + +#ifdef Honor_FLT_ROUNDS + if ((rounding= Flt_Rounds) >= 2) + { + if (*sign) + rounding= rounding == 2 ? 0 : 2; + else + if (rounding != 2) + rounding= 0; + } +#endif + + b= d2b(dval(d), &be, &bbits, &alloc); + if ((i= (int)(word0(d) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) + { + dval(d2)= dval(d); + word0(d2) &= Frac_mask1; + word0(d2) |= Exp_11; + + /* + log(x) ~=~ log(1.5) + (x-1.5)/1.5 + log10(x) = log(x) / log(10) + ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10)) + log10(d)= (i-Bias)*log(2)/log(10) + log10(d2) + + This suggests computing an approximation k to log10(d) by + + k= (i - Bias)*0.301029995663981 + + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 ); + + We want k to be too large rather than too small. + The error in the first-order Taylor series approximation + is in our favor, so we just round up the constant enough + to compensate for any error in the multiplication of + (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077, + and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14, + adding 1e-13 to the constant term more than suffices. + Hence we adjust the constant term to 0.1760912590558. + (We could get a more accurate k by invoking log10, + but this is probably not worthwhile.) + */ + + i-= Bias; + denorm= 0; + } + else + { + /* d is denormalized */ + + i= bbits + be + (Bias + (P-1) - 1); + x= i > 32 ? word0(d) << (64 - i) | word1(d) >> (i - 32) + : word1(d) << (32 - i); + dval(d2)= x; + word0(d2)-= 31*Exp_msk1; /* adjust exponent */ + i-= (Bias + (P-1) - 1) + 1; + denorm= 1; + } + ds= (dval(d2)-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981; + k= (int)ds; + if (ds < 0. && ds != k) + k--; /* want k= floor(ds) */ + k_check= 1; + if (k >= 0 && k <= Ten_pmax) + { + if (dval(d) < tens[k]) + k--; + k_check= 0; + } + j= bbits - i - 1; + if (j >= 0) + { + b2= 0; + s2= j; + } + else + { + b2= -j; + s2= 0; + } + if (k >= 0) + { + b5= 0; + s5= k; + s2+= k; + } + else + { + b2-= k; + b5= -k; + s5= 0; + } + if (mode < 0 || mode > 9) + mode= 0; + +#ifdef Check_FLT_ROUNDS + try_quick= Rounding == 1; +#else + try_quick= 1; +#endif + + if (mode > 5) + { + mode-= 4; + try_quick= 0; + } + leftright= 1; + switch (mode) { + case 0: + case 1: + ilim= ilim1= -1; + i= 18; + ndigits= 0; + break; + case 2: + leftright= 0; + /* no break */ + case 4: + if (ndigits <= 0) + ndigits= 1; + ilim= ilim1= i= ndigits; + break; + case 3: + leftright= 0; + /* no break */ + case 5: + i= ndigits + k + 1; + ilim= i; + ilim1= i - 1; + if (i <= 0) + i= 1; + } + s= s0= dtoa_alloc(i, &alloc); + +#ifdef Honor_FLT_ROUNDS + if (mode > 1 && rounding != 1) + leftright= 0; +#endif + + if (ilim >= 0 && ilim <= Quick_max && try_quick) + { + /* Try to get by with floating-point arithmetic. */ + i= 0; + dval(d2)= dval(d); + k0= k; + ilim0= ilim; + ieps= 2; /* conservative */ + if (k > 0) + { + ds= tens[k&0xf]; + j= k >> 4; + if (j & Bletch) + { + /* prevent overflows */ + j&= Bletch - 1; + dval(d)/= bigtens[n_bigtens-1]; + ieps++; + } + for (; j; j>>= 1, i++) + { + if (j & 1) + { + ieps++; + ds*= bigtens[i]; + } + } + dval(d)/= ds; + } + else if ((j1= -k)) + { + dval(d)*= tens[j1 & 0xf]; + for (j= j1 >> 4; j; j>>= 1, i++) + { + if (j & 1) + { + ieps++; + dval(d)*= bigtens[i]; + } + } + } + if (k_check && dval(d) < 1. && ilim > 0) + { + if (ilim1 <= 0) + goto fast_failed; + ilim= ilim1; + k--; + dval(d)*= 10.; + ieps++; + } + dval(eps)= ieps*dval(d) + 7.; + word0(eps)-= (P-1)*Exp_msk1; + if (ilim == 0) + { + S= mhi= 0; + dval(d)-= 5.; + if (dval(d) > dval(eps)) + goto one_digit; + if (dval(d) < -dval(eps)) + goto no_digits; + goto fast_failed; + } + if (leftright) + { + /* Use Steele & White method of only generating digits needed. */ + dval(eps)= 0.5/tens[ilim-1] - dval(eps); + for (i= 0;;) + { + L= (Long) dval(d); + dval(d)-= L; + *s++= '0' + (int)L; + if (dval(d) < dval(eps)) + goto ret1; + if (1. - dval(d) < dval(eps)) + goto bump_up; + if (++i >= ilim) + break; + dval(eps)*= 10.; + dval(d)*= 10.; + } + } + else + { + /* Generate ilim digits, then fix them up. */ + dval(eps)*= tens[ilim-1]; + for (i= 1;; i++, dval(d)*= 10.) + { + L= (Long)(dval(d)); + if (!(dval(d)-= L)) + ilim= i; + *s++= '0' + (int)L; + if (i == ilim) + { + if (dval(d) > 0.5 + dval(eps)) + goto bump_up; + else if (dval(d) < 0.5 - dval(eps)) + { + while (*--s == '0'); + s++; + goto ret1; + } + break; + } + } + } + fast_failed: + s= s0; + dval(d)= dval(d2); + k= k0; + ilim= ilim0; + } + + /* Do we have a "small" integer? */ + + if (be >= 0 && k <= Int_max) + { + /* Yes. */ + ds= tens[k]; + if (ndigits < 0 && ilim <= 0) + { + S= mhi= 0; + if (ilim < 0 || dval(d) <= 5*ds) + goto no_digits; + goto one_digit; + } + for (i= 1;; i++, dval(d)*= 10.) + { + L= (Long)(dval(d) / ds); + dval(d)-= L*ds; +#ifdef Check_FLT_ROUNDS + /* If FLT_ROUNDS == 2, L will usually be high by 1 */ + if (dval(d) < 0) + { + L--; + dval(d)+= ds; + } +#endif + *s++= '0' + (int)L; + if (!dval(d)) + { + break; + } + if (i == ilim) + { +#ifdef Honor_FLT_ROUNDS + if (mode > 1) + { + switch (rounding) { + case 0: goto ret1; + case 2: goto bump_up; + } + } +#endif + dval(d)+= dval(d); + if (dval(d) > ds || (dval(d) == ds && L & 1)) + { +bump_up: + while (*--s == '9') + if (s == s0) + { + k++; + *s= '0'; + break; + } + ++*s++; + } + break; + } + } + goto ret1; + } + + m2= b2; + m5= b5; + mhi= mlo= 0; + if (leftright) + { + i = denorm ? be + (Bias + (P-1) - 1 + 1) : 1 + P - bbits; + b2+= i; + s2+= i; + mhi= i2b(1, &alloc); + } + if (m2 > 0 && s2 > 0) + { + i= m2 < s2 ? m2 : s2; + b2-= i; + m2-= i; + s2-= i; + } + if (b5 > 0) + { + if (leftright) + { + if (m5 > 0) + { + mhi= pow5mult(mhi, m5, &alloc); + b1= mult(mhi, b, &alloc); + Bfree(b, &alloc); + b= b1; + } + if ((j= b5 - m5)) + b= pow5mult(b, j, &alloc); + } + else + b= pow5mult(b, b5, &alloc); + } + S= i2b(1, &alloc); + if (s5 > 0) + S= pow5mult(S, s5, &alloc); + + /* Check for special case that d is a normalized power of 2. */ + + spec_case= 0; + if ((mode < 2 || leftright) +#ifdef Honor_FLT_ROUNDS + && rounding == 1 +#endif + ) + { + if (!word1(d) && !(word0(d) & Bndry_mask) && + word0(d) & (Exp_mask & ~Exp_msk1) + ) + { + /* The special case */ + b2+= Log2P; + s2+= Log2P; + spec_case= 1; + } + } + + /* + Arrange for convenient computation of quotients: + shift left if necessary so divisor has 4 leading 0 bits. + + Perhaps we should just compute leading 28 bits of S once + a nd for all and pass them and a shift to quorem, so it + can do shifts and ors to compute the numerator for q. + */ + if ((i= ((s5 ? 32 - hi0bits(S->p.x[S->wds-1]) : 1) + s2) & 0x1f)) + i= 32 - i; + if (i > 4) + { + i-= 4; + b2+= i; + m2+= i; + s2+= i; + } + else if (i < 4) + { + i+= 28; + b2+= i; + m2+= i; + s2+= i; + } + if (b2 > 0) + b= lshift(b, b2, &alloc); + if (s2 > 0) + S= lshift(S, s2, &alloc); + if (k_check) + { + if (cmp(b,S) < 0) + { + k--; + /* we botched the k estimate */ + b= multadd(b, 10, 0, &alloc); + if (leftright) + mhi= multadd(mhi, 10, 0, &alloc); + ilim= ilim1; + } + } + if (ilim <= 0 && (mode == 3 || mode == 5)) + { + if (ilim < 0 || cmp(b,S= multadd(S,5,0, &alloc)) <= 0) + { + /* no digits, fcvt style */ +no_digits: + k= -1 - ndigits; + goto ret; + } +one_digit: + *s++= '1'; + k++; + goto ret; + } + if (leftright) + { + if (m2 > 0) + mhi= lshift(mhi, m2, &alloc); + + /* + Compute mlo -- check for special case that d is a normalized power of 2. + */ + + mlo= mhi; + if (spec_case) + { + mhi= Balloc(mhi->k, &alloc); + Bcopy(mhi, mlo); + mhi= lshift(mhi, Log2P, &alloc); + } + + for (i= 1;;i++) + { + dig= quorem(b,S) + '0'; + /* Do we yet have the shortest decimal string that will round to d? */ + j= cmp(b, mlo); + delta= diff(S, mhi, &alloc); + j1= delta->sign ? 1 : cmp(b, delta); + Bfree(delta, &alloc); + if (j1 == 0 && mode != 1 && !(word1(d) & 1) +#ifdef Honor_FLT_ROUNDS + && rounding >= 1 +#endif + ) + { + if (dig == '9') + goto round_9_up; + if (j > 0) + dig++; + *s++= dig; + goto ret; + } + if (j < 0 || (j == 0 && mode != 1 && !(word1(d) & 1))) + { + if (!b->p.x[0] && b->wds <= 1) + { + goto accept_dig; + } +#ifdef Honor_FLT_ROUNDS + if (mode > 1) + switch (rounding) { + case 0: goto accept_dig; + case 2: goto keep_dig; + } +#endif /*Honor_FLT_ROUNDS*/ + if (j1 > 0) + { + b= lshift(b, 1, &alloc); + j1= cmp(b, S); + if ((j1 > 0 || (j1 == 0 && dig & 1)) + && dig++ == '9') + goto round_9_up; + } +accept_dig: + *s++= dig; + goto ret; + } + if (j1 > 0) + { +#ifdef Honor_FLT_ROUNDS + if (!rounding) + goto accept_dig; +#endif + if (dig == '9') + { /* possible if i == 1 */ +round_9_up: + *s++= '9'; + goto roundoff; + } + *s++= dig + 1; + goto ret; + } +#ifdef Honor_FLT_ROUNDS +keep_dig: +#endif + *s++= dig; + if (i == ilim) + break; + b= multadd(b, 10, 0, &alloc); + if (mlo == mhi) + mlo= mhi= multadd(mhi, 10, 0, &alloc); + else + { + mlo= multadd(mlo, 10, 0, &alloc); + mhi= multadd(mhi, 10, 0, &alloc); + } + } + } + else + for (i= 1;; i++) + { + *s++= dig= quorem(b,S) + '0'; + if (!b->p.x[0] && b->wds <= 1) + { + goto ret; + } + if (i >= ilim) + break; + b= multadd(b, 10, 0, &alloc); + } + + /* Round off last digit */ + +#ifdef Honor_FLT_ROUNDS + switch (rounding) { + case 0: goto trimzeros; + case 2: goto roundoff; + } +#endif + b= lshift(b, 1, &alloc); + j= cmp(b, S); + if (j > 0 || (j == 0 && dig & 1)) + { +roundoff: + while (*--s == '9') + if (s == s0) + { + k++; + *s++= '1'; + goto ret; + } + ++*s++; + } + else + { +#ifdef Honor_FLT_ROUNDS +trimzeros: +#endif + while (*--s == '0'); + s++; + } +ret: + Bfree(S, &alloc); + if (mhi) + { + if (mlo && mlo != mhi) + Bfree(mlo, &alloc); + Bfree(mhi, &alloc); + } +ret1: + Bfree(b, &alloc); + *s= 0; + *decpt= k + 1; + if (rve) + *rve= s; + return s0; +} diff --git a/strings/longlong2str.c b/strings/longlong2str.c index d7de5bb0f7c..641ae0955d3 100644 --- a/strings/longlong2str.c +++ b/strings/longlong2str.c @@ -40,17 +40,18 @@ #include <my_global.h> #include "m_string.h" -#if defined(HAVE_LONG_LONG) && !defined(longlong2str) && !defined(HAVE_LONGLONG2STR) +#ifndef ll2str /* This assumes that longlong multiplication is faster than longlong division. */ -char *longlong2str(longlong val,char *dst,int radix) +char *ll2str(longlong val,char *dst,int radix, int upcase) { char buffer[65]; register char *p; long long_val; + char *dig_vec= upcase ? _dig_vec_upper : _dig_vec_lower; ulonglong uval= (ulonglong) val; if (radix < 0) @@ -80,20 +81,19 @@ char *longlong2str(longlong val,char *dst,int radix) { ulonglong quo= uval/(uint) radix; uint rem= (uint) (uval- quo* (uint) radix); - *--p = _dig_vec_upper[rem]; + *--p= dig_vec[rem]; uval= quo; } long_val= (long) uval; while (long_val != 0) { long quo= long_val/radix; - *--p = _dig_vec_upper[(uchar) (long_val - quo*radix)]; + *--p= dig_vec[(uchar) (long_val - quo*radix)]; long_val= quo; } while ((*dst++ = *p++) != 0) ; return dst-1; } - #endif #ifndef longlong10_to_str diff --git a/strings/longlong2str_asm.c b/strings/longlong2str_asm.c index 637815e52c5..e5628043da6 100644 --- a/strings/longlong2str_asm.c +++ b/strings/longlong2str_asm.c @@ -26,7 +26,8 @@ extern char *longlong2str_with_dig_vector(longlong val,char *dst,int radix, const char *dig_vector); -char *longlong2str(longlong val,char *dst,int radix) +char *ll2str(longlong val,char *dst,int radix, int upcase) { - return longlong2str_with_dig_vector(val, dst, radix, _dig_vec_upper); + return longlong2str_with_dig_vector(val, dst, radix, + upcase ? _dig_vec_upper : _dig_vec_lower); } diff --git a/strings/my_vsnprintf.c b/strings/my_vsnprintf.c index ad8e7c8c776..251c3905d5a 100644 --- a/strings/my_vsnprintf.c +++ b/strings/my_vsnprintf.c @@ -221,6 +221,27 @@ static char *process_bin_arg(char *to, char *end, size_t width, char *par) /** + Prints double or float argument +*/ + +static char *process_dbl_arg(char *to, char *end, size_t width, + double par, char arg_type) +{ + if (width == SIZE_T_MAX) + width= FLT_DIG; /* width not set, use default */ + else if (width >= NOT_FIXED_DEC) + width= NOT_FIXED_DEC - 1; /* max.precision for my_fcvt() */ + width= min(width, (size_t)(end-to) - 1); + + if (arg_type == 'f') + to+= my_fcvt(par, (int)width , to, NULL); + else + to+= my_gcvt(par, MY_GCVT_ARG_DOUBLE, (int) width , to, NULL); + return to; +} + + +/** Prints integer argument */ @@ -235,19 +256,23 @@ static char *process_int_arg(char *to, char *end, size_t length, store_start= buff; if (arg_type == 'd') - store_end= int10_to_str(par, store_start, -10); + store_end= longlong10_to_str(par, store_start, -10); else if (arg_type == 'u') - store_end= int10_to_str(par, store_start, 10); + store_end= longlong10_to_str(par, store_start, 10); else if (arg_type == 'p') { store_start[0]= '0'; store_start[1]= 'x'; - store_end= int2str(par, store_start + 2, 16, 0); + store_end= ll2str(par, store_start + 2, 16, 0); + } + else if (arg_type == 'o') + { + store_end= ll2str(par, store_start, 8, 0); } else { DBUG_ASSERT(arg_type == 'X' || arg_type =='x'); - store_end= int2str(par, store_start, 16, (arg_type == 'X')); + store_end= ll2str(par, store_start, 16, (arg_type == 'X')); } if ((res_length= (size_t) (store_end - store_start)) > to_length) @@ -377,6 +402,7 @@ start: case 'u': case 'x': case 'X': + case 'o': case 'p': if (args_arr[i].have_longlong) args_arr[i].longlong_arg= va_arg(ap,longlong); @@ -395,21 +421,23 @@ start: /* Print result string */ for (i= 0; i <= idx; i++) { - uint width= 0, length= 0; + size_t width= 0, length= 0; switch (print_arr[i].arg_type) { case 's': { char *par= args_arr[print_arr[i].arg_idx].str_arg; - width= (print_arr[i].flags & WIDTH_ARG) ? - args_arr[print_arr[i].width].longlong_arg : print_arr[i].width; + width= (print_arr[i].flags & WIDTH_ARG) + ? (size_t)args_arr[print_arr[i].width].longlong_arg + : print_arr[i].width; to= process_str_arg(cs, to, end, width, par, print_arr[i].flags); break; } case 'b': { char *par = args_arr[print_arr[i].arg_idx].str_arg; - width= (print_arr[i].flags & WIDTH_ARG) ? - args_arr[print_arr[i].width].longlong_arg : print_arr[i].width; + width= (print_arr[i].flags & WIDTH_ARG) + ? (size_t)args_arr[print_arr[i].width].longlong_arg + : print_arr[i].width; to= process_bin_arg(to, end, width, par); break; } @@ -420,16 +448,27 @@ start: *to++= (char) args_arr[print_arr[i].arg_idx].longlong_arg; break; } + case 'f': + case 'g': + { + double d= args_arr[print_arr[i].arg_idx].double_arg; + width= (print_arr[i].flags & WIDTH_ARG) ? + (uint)args_arr[print_arr[i].width].longlong_arg : print_arr[i].width; + to= process_dbl_arg(to, end, width, d, print_arr[i].arg_type); + break; + } case 'd': case 'u': case 'x': case 'X': + case 'o': case 'p': { /* Integer parameter */ longlong larg; - length= (print_arr[i].flags & LENGTH_ARG) ? - args_arr[print_arr[i].length].longlong_arg : print_arr[i].length; + length= (print_arr[i].flags & LENGTH_ARG) + ? (size_t)args_arr[print_arr[i].length].longlong_arg + : print_arr[i].length; if (args_arr[print_arr[i].arg_idx].have_longlong) larg = args_arr[print_arr[i].arg_idx].longlong_arg; @@ -570,8 +609,14 @@ size_t my_vsnprintf_ex(CHARSET_INFO *cs, char *to, size_t n, to= process_bin_arg(to, end, width, par); continue; } + else if (*fmt == 'f' || *fmt == 'g') + { + double d= va_arg(ap, double); + to= process_dbl_arg(to, end, width, d, *fmt); + continue; + } else if (*fmt == 'd' || *fmt == 'u' || *fmt == 'x' || *fmt == 'X' || - *fmt == 'p') + *fmt == 'p' || *fmt == 'o') { /* Integer parameter */ longlong larg; diff --git a/strings/str_test.c b/strings/str_test.c index 3ddfca39419..e4358196f27 100644 --- a/strings/str_test.c +++ b/strings/str_test.c @@ -265,13 +265,13 @@ extern void dummy_functions(void); void dummy_functions(void) { - VOID(memchr(from,'a',5)); - VOID(memcmp(from,to,5)); - VOID(memcpy(from,to,5)); - VOID(memset(from,' ',5)); - VOID(strcmp(from,to)); - VOID(strcpy(from,to)); - VOID(strstr(from,to)); - VOID(strrchr(from,'a')); + (void) memchr(from,'a',5); + (void) memcmp(from,to,5); + (void) memcpy(from,to,5); + (void) memset(from,' ',5); + (void) strcmp(from,to); + (void) strcpy(from,to); + (void) strstr(from,to); + (void) strrchr(from,'a'); return; } diff --git a/strings/strtod.c b/strings/strtod.c deleted file mode 100644 index 4c9cf931cb3..00000000000 --- a/strings/strtod.c +++ /dev/null @@ -1,236 +0,0 @@ -/* - An alternative implementation of "strtod()" that is both - simplier, and thread-safe. - - Original code from mit-threads as bundled with MySQL 3.23 - - SQL:2003 specifies a number as - -<signed numeric literal> ::= [ <sign> ] <unsigned numeric literal> - -<unsigned numeric literal> ::= - <exact numeric literal> - | <approximate numeric literal> - -<exact numeric literal> ::= - <unsigned integer> [ <period> [ <unsigned integer> ] ] - | <period> <unsigned integer> - -<approximate numeric literal> ::= <mantissa> E <exponent> - -<mantissa> ::= <exact numeric literal> - -<exponent> ::= <signed integer> - - So do we. - - */ - -#include "my_base.h" /* Includes errno.h + EOVERFLOW */ -#include "m_ctype.h" -#ifdef HAVE_IEEEFP_H -#include <ieeefp.h> -#endif - -#define MAX_DBL_EXP 308 -#define MAX_RESULT_FOR_MAX_EXP 1.7976931348623157 - -const double log_10[] = { - 1e000, 1e001, 1e002, 1e003, 1e004, 1e005, 1e006, 1e007, 1e008, 1e009, - 1e010, 1e011, 1e012, 1e013, 1e014, 1e015, 1e016, 1e017, 1e018, 1e019, - 1e020, 1e021, 1e022, 1e023, 1e024, 1e025, 1e026, 1e027, 1e028, 1e029, - 1e030, 1e031, 1e032, 1e033, 1e034, 1e035, 1e036, 1e037, 1e038, 1e039, - 1e040, 1e041, 1e042, 1e043, 1e044, 1e045, 1e046, 1e047, 1e048, 1e049, - 1e050, 1e051, 1e052, 1e053, 1e054, 1e055, 1e056, 1e057, 1e058, 1e059, - 1e060, 1e061, 1e062, 1e063, 1e064, 1e065, 1e066, 1e067, 1e068, 1e069, - 1e070, 1e071, 1e072, 1e073, 1e074, 1e075, 1e076, 1e077, 1e078, 1e079, - 1e080, 1e081, 1e082, 1e083, 1e084, 1e085, 1e086, 1e087, 1e088, 1e089, - 1e090, 1e091, 1e092, 1e093, 1e094, 1e095, 1e096, 1e097, 1e098, 1e099, - 1e100, 1e101, 1e102, 1e103, 1e104, 1e105, 1e106, 1e107, 1e108, 1e109, - 1e110, 1e111, 1e112, 1e113, 1e114, 1e115, 1e116, 1e117, 1e118, 1e119, - 1e120, 1e121, 1e122, 1e123, 1e124, 1e125, 1e126, 1e127, 1e128, 1e129, - 1e130, 1e131, 1e132, 1e133, 1e134, 1e135, 1e136, 1e137, 1e138, 1e139, - 1e140, 1e141, 1e142, 1e143, 1e144, 1e145, 1e146, 1e147, 1e148, 1e149, - 1e150, 1e151, 1e152, 1e153, 1e154, 1e155, 1e156, 1e157, 1e158, 1e159, - 1e160, 1e161, 1e162, 1e163, 1e164, 1e165, 1e166, 1e167, 1e168, 1e169, - 1e170, 1e171, 1e172, 1e173, 1e174, 1e175, 1e176, 1e177, 1e178, 1e179, - 1e180, 1e181, 1e182, 1e183, 1e184, 1e185, 1e186, 1e187, 1e188, 1e189, - 1e190, 1e191, 1e192, 1e193, 1e194, 1e195, 1e196, 1e197, 1e198, 1e199, - 1e200, 1e201, 1e202, 1e203, 1e204, 1e205, 1e206, 1e207, 1e208, 1e209, - 1e210, 1e211, 1e212, 1e213, 1e214, 1e215, 1e216, 1e217, 1e218, 1e219, - 1e220, 1e221, 1e222, 1e223, 1e224, 1e225, 1e226, 1e227, 1e228, 1e229, - 1e230, 1e231, 1e232, 1e233, 1e234, 1e235, 1e236, 1e237, 1e238, 1e239, - 1e240, 1e241, 1e242, 1e243, 1e244, 1e245, 1e246, 1e247, 1e248, 1e249, - 1e250, 1e251, 1e252, 1e253, 1e254, 1e255, 1e256, 1e257, 1e258, 1e259, - 1e260, 1e261, 1e262, 1e263, 1e264, 1e265, 1e266, 1e267, 1e268, 1e269, - 1e270, 1e271, 1e272, 1e273, 1e274, 1e275, 1e276, 1e277, 1e278, 1e279, - 1e280, 1e281, 1e282, 1e283, 1e284, 1e285, 1e286, 1e287, 1e288, 1e289, - 1e290, 1e291, 1e292, 1e293, 1e294, 1e295, 1e296, 1e297, 1e298, 1e299, - 1e300, 1e301, 1e302, 1e303, 1e304, 1e305, 1e306, 1e307, 1e308 -}; - -/* - Convert string to double (string doesn't have to be null terminated) - - SYNOPSIS - my_strtod() - str String to convert - end_ptr Pointer to pointer that points to end of string - Will be updated to point to end of double. - error Will contain error number in case of error (else 0) - - RETURN - value of str as double -*/ - -double my_strtod(const char *str, char **end_ptr, int *error) -{ - double result= 0.0; - uint negative= 0, neg_exp= 0; - size_t ndigits, dec_digits= 0; - int exponent= 0, digits_after_dec_point= 0, tmp_exp, step; - const char *old_str, *end= *end_ptr, *start_of_number; - char next_char; - my_bool overflow=0; - double scaler= 1.0; - - *error= 0; - if (str >= end) - goto done; - - while (my_isspace(&my_charset_latin1, *str)) - { - if (++str == end) - goto done; - } - - start_of_number= str; - if ((negative= (*str == '-')) || *str=='+') - { - if (++str == end) - goto done; /* Could be changed to error */ - } - - /* Skip pre-zero for easier calculation of overflows */ - while (*str == '0') - { - if (++str == end) - goto done; - start_of_number= 0; /* Found digit */ - } - - old_str= str; - while ((next_char= *str) >= '0' && next_char <= '9') - { - result= result*10.0 + (next_char - '0'); - scaler= scaler*10.0; - if (++str == end) - { - next_char= 0; /* Found end of string */ - break; - } - start_of_number= 0; /* Found digit */ - } - ndigits= (size_t) (str-old_str); - - if (next_char == '.' && str < end-1) - { - /* - Continue to add numbers after decimal point to the result, as if there - was no decimal point. We will later (in the exponent handling) shift - the number down with the required number of fractions. We do it this - way to be able to get maximum precision for numbers like 123.45E+02, - which are normal for some ODBC applications. - */ - old_str= ++str; - while (my_isdigit(&my_charset_latin1, (next_char= *str))) - { - result= result*10.0 + (next_char - '0'); - digits_after_dec_point++; - scaler= scaler*10.0; - if (++str == end) - { - next_char= 0; - break; - } - } - /* If we found just '+.' or '.' then point at first character */ - if (!(dec_digits= (size_t) (str-old_str)) && start_of_number) - str= start_of_number; /* Point at '+' or '.' */ - } - if ((next_char == 'e' || next_char == 'E') && - dec_digits + ndigits != 0 && str < end-1) - { - const char *old_str2= str++; - - if ((neg_exp= (*str == '-')) || *str == '+') - str++; - - if (str == end || !my_isdigit(&my_charset_latin1, *str)) - str= old_str2; - else - { - do - { - if (exponent < 9999) /* prot. against exp overfl. */ - exponent= exponent*10 + (*str - '0'); - str++; - } while (str < end && my_isdigit(&my_charset_latin1, *str)); - } - } - tmp_exp= (neg_exp ? exponent + digits_after_dec_point : - exponent - digits_after_dec_point); - if (tmp_exp) - { - int order; - /* - Check for underflow/overflow. - order is such an integer number that f = C * 10 ^ order, - where f is the resulting floating point number and 1 <= C < 10. - Here we compute the modulus - */ - order= exponent + (neg_exp ? -1 : 1) * (ndigits - 1); - if (order < 0) - order= -order; - if (order >= MAX_DBL_EXP && !neg_exp && result) - { - double c; - /* Compute modulus of C (see comment above) */ - c= result / scaler * 10.0; - if (order > MAX_DBL_EXP || c > MAX_RESULT_FOR_MAX_EXP) - { - overflow= 1; - goto done; - } - } - - exponent= tmp_exp; - if (exponent < 0) - { - exponent= -exponent; - neg_exp= 1; /* neg_exp was 0 before */ - } - step= array_elements(log_10) - 1; - for (; exponent > step; exponent-= step) - result= neg_exp ? result / log_10[step] : result * log_10[step]; - result= neg_exp ? result / log_10[exponent] : result * log_10[exponent]; - } - -done: - *end_ptr= (char*) str; /* end of number */ - - if (overflow || my_isinf(result)) - { - result= DBL_MAX; - *error= EOVERFLOW; - } - - return negative ? -result : result; -} - -double my_atof(const char *nptr) -{ - int error; - const char *end= nptr+65535; /* Should be enough */ - return (my_strtod(nptr, (char**) &end, &error)); -} |