Import new jupp release jupp-3_1_27
authorThorsten Glaser <tg@mirbsd.org>
Sun, 29 Jun 2014 11:57:25 +0000 (11:57 +0000)
committerThorsten Glaser <tg@mirbsd.org>
Sun, 29 Jun 2014 11:57:25 +0000 (11:57 +0000)
31 files changed:
HINTS
INFO
LIST
Makefile.bsd-wrapper
NEWS
builtins.c
bw.c
bw.h
charmap.c
charmap.h
cmd.h
config.h
configure
configure.ac
i18n.c
i18n.h
jmacsrc.in
joerc.in
jpicorc.in
jstarrc.in
jupprc
main.c
rjoerc.in
selinux.c
syntax.c
syntax/c.jsf.in
termcap.c
termidx.c
uedit.h
utf8.c
vs.c

diff --git a/HINTS b/HINTS
index 4d4cbec..20cb446 100644 (file)
--- a/HINTS
+++ b/HINTS
@@ -21,6 +21,9 @@ This needs verification and possibly fixes.
 UTF-8
 -----
 
+Do note that the joerc files must be written using the 8-bit encoding
+(probably ISO-8859-1), not UTF-8.
+
 JOE now handles two classes of character sets: UTF-8 and byte coded (like
 ISO-8859-1).  It can not yet handle other major classes such as UTF-16 or
 GB2312. There are other restrictions: character sets must use LF (0x0A) or
@@ -131,4 +134,4 @@ will not insert.
 - Search, incremental search, and search & replace all operate as usual.
 
 __________________________________________________________________
-$MirOS: contrib/code/jupp/HINTS,v 1.7 2013/08/19 22:04:14 tg Exp $
+$MirOS: contrib/code/jupp/HINTS,v 1.8 2014/06/29 11:39:50 tg Exp $
diff --git a/INFO b/INFO
index 92f0b1b..a89955b 100644 (file)
--- a/INFO
+++ b/INFO
@@ -1,4 +1,4 @@
-$MirOS: contrib/code/jupp/INFO,v 1.10 2011/10/04 22:47:51 tg Exp $
+$MirOS: contrib/code/jupp/INFO,v 1.11 2014/06/29 11:39:50 tg Exp $
 ------------------------------------------------------------------
 
                                     Jupp
@@ -29,7 +29,7 @@ UNIX-integration features of VI.
 
        JOE's initialization file determines much of JOE's personality and
 the name of the initialization file is simply the name of the editor
-executable followed by "rc".  JOE comes with four "rc" files in addition to
+executable followed by "rc".  JOE comes with five "rc" files in addition to
 the basic "joerc", which allow it to emulate these editors:
 
        JPICO   - An enhanced version of the Pine mailer system's PICO
diff --git a/LIST b/LIST
index a8db6fc..f48f63e 100644 (file)
--- a/LIST
+++ b/LIST
@@ -1,4 +1,4 @@
-$MirOS: contrib/code/jupp/LIST,v 1.8 2013/08/19 19:19:30 tg Exp $
+$MirOS: contrib/code/jupp/LIST,v 1.9 2014/06/09 16:06:45 tg Exp $
 -----------------------------------------------------------------
 
 Joe commands grouped by function
@@ -17,7 +17,6 @@ blkmove               Move marked block to cursor
 blksave                Save marked block into a file
 copy           Copy block to kill-ring
 drop           Set markb.  If it was already set, eliminate it.
-dropon          Set markb.  If it was already set, eliminate it.  Turn on marking mode.
 
 toggle_marking If we're in a block: clear markb and markk.
                If marking is off: set markb and turn on marking.
index 2563c51..7405f8b 100644 (file)
@@ -1,4 +1,6 @@
-# $MirOS: contrib/code/jupp/Makefile.bsd-wrapper,v 1.1 2013/08/19 17:40:16 tg Exp $
+# $MirOS: contrib/code/jupp/Makefile.bsd-wrapper,v 1.2 2013/11/07 22:22:50 tg Exp $
+#-
+# make -f Makefile.bsd-wrapper CFPREFIX=/usr/mpkg sysconfjoesubdir=/joe
 
 MAN=           joe.1
 INST_TARGET=   INSTALL_MAN= install
diff --git a/NEWS b/NEWS
index 29c83bd..f5ae9b1 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,18 @@
-$MirOS: contrib/code/jupp/NEWS,v 1.83 2013/11/07 22:19:02 tg Exp $
+$MirOS: contrib/code/jupp/NEWS,v 1.90 2014/06/29 11:39:50 tg Exp $
 ------------------------------------------------------------------
 
+JUPP-current
+
+- …
+
+JOE 3.1jupp27
+
+- Update complete internationalisation code and data to Unicode 7.0.0
+- Minor fixes to C language syntax highlighting; use it for NXC too
+- Fix compilation on SuSE Linux 1.0 (portability)
+- Stop trying to match ed(1) diffs for highlighting (false positives)
+- Add cp437 encoding
+
 JOE 3.1jupp26
 
 - Syntax files are now both parsed and applied on bytes, not characters;
index aeb20de..d28262f 100644 (file)
@@ -8,8 +8,7 @@
 
 #include "types.h"
 
-const unsigned char * const builtins[]=
-{
+const unsigned char * const builtins[] = {
        US "jupprc", US
                "-asis\n"
                "-assume_color\n"
@@ -142,10 +141,9 @@ const unsigned char * const builtins[]=
                "\\i \\i go to \\uhttp://sf.net/projects/joe-editor/\\u for upstream bug reports. JUPP 2.8 \\i \\i\n"
                "\\i \\i for DOS compiled by A. Totlis, packed with LHarc 2.13; JUPP 3.x for UNIX\\d(R)\\d \\i \\i\n"
                "\\i \\i at \\uhttp://mirbsd.de/jupp\\u and by \\bThorsten \"\\dmirabilos\\d\" Glaser <\\utg@mirbsd.org\\u>\\b \\i \\i\n"
-               "\\i \\i @(#) blt_in 2013-11-07; 3.1; autoCR-LF; UTF-8 via locale; per-file encoding \\i \\i\n"
+               "\\i \\i @(#) blt_in 2014-06-29; 3.1; autoCR-LF; UTF-8 via locale; per-file encoding \\i \\i\n"
                "}\n"
                "\n"
-               "\n"
                "{CharTable\n"
                "\\i   Help Screen    turn off with ^J     prev. screen ^[,    \\uCharacter Map\\u       \\i\n"
                "\\i \\i Dec Hex  \\u 0123 4567  89AB CDEF    0123 4567  89AB CDEF \\u  Hex Dec            \\i \\i\n"
@@ -532,5 +530,5 @@ const unsigned char * const builtins[]=
                ":querysr\n"
                "type           ^@ TO \xFF\n"
 ,      NULL
-,      "@(#) $MirOS: contrib/code/jupp/builtins.c,v 1.18 2013/11/07 22:19:02 tg Exp $"
+,      "@(#) $MirOS: contrib/code/jupp/builtins.c,v 1.19 2014/06/29 11:27:26 tg Exp $"
 };
diff --git a/bw.c b/bw.c
index 0804e43..595bbd0 100644 (file)
--- a/bw.c
+++ b/bw.c
@@ -1,4 +1,4 @@
-/* $MirOS: contrib/code/jupp/bw.c,v 1.19 2013/11/07 21:50:35 tg Exp $ */
+/* $MirOS: contrib/code/jupp/bw.c,v 1.20 2014/03/04 23:04:11 tg Exp $ */
 /*
  *     Edit buffer window generation
  *     Copyright
@@ -20,6 +20,7 @@
 #endif
 
 #include "b.h"
+#include "bw.h"
 #include "blocks.h"
 #include "kbd.h"
 #include "rc.h"
@@ -712,9 +713,9 @@ void bwgenh(BW *w)
                txt[76]=0;
                if (!flg) {
 #if SIZEOF_LONG_LONG && SIZEOF_LONG_LONG == SIZEOF_OFF_T
-                       snprintf((char *)bf,sizeof(bf),"%8llX ",(unsigned long long)q->byte);
+                       joe_snprintf_1((char *)bf,sizeof(bf),"%8llX ",(unsigned long long)q->byte);
 #else
-                       snprintf((char *)bf,sizeof(bf),"%8lX ",(unsigned long)q->byte);
+                       joe_snprintf_1((char *)bf,sizeof(bf),"%8lX ",(unsigned long)q->byte);
 #endif
                        memcpy(txt,bf,9);
                        for (x=0; x!=8; ++x) {
@@ -730,7 +731,7 @@ void bwgenh(BW *w)
                                }
                                c = pgetb(q);
                                if (c >= 0) {
-                                       snprintf((char *)bf,sizeof(bf),"%2.2X",c);
+                                       joe_snprintf_1((char *)bf,sizeof(bf),"%2.2X",c);
                                        txt[10+x*3] = bf[0];
                                        txt[10+x*3+1] = bf[1];
                                        if (c >= 0x20 && c <= 0x7E)
@@ -753,7 +754,7 @@ void bwgenh(BW *w)
                                }
                                c = pgetb(q);
                                if (c >= 0) {
-                                       snprintf((char *)bf,sizeof(bf),"%2.2X",c);
+                                       joe_snprintf_1((char *)bf,sizeof(bf),"%2.2X",c);
                                        txt[11+x*3] = bf[0];
                                        txt[11+x*3+1] = bf[1];
                                        if (c >= 0x20 && c <= 0x7E)
diff --git a/bw.h b/bw.h
index ed69da3..4f4a6f1 100644 (file)
--- a/bw.h
+++ b/bw.h
@@ -1,4 +1,4 @@
-/* $MirOS: contrib/code/jupp/bw.h,v 1.3 2009/10/18 14:52:56 tg Exp $ */
+/* $MirOS: contrib/code/jupp/bw.h,v 1.4 2014/03/04 23:04:11 tg Exp $ */
 /*
  *     Edit buffer window generation
  *     Copyright
@@ -24,6 +24,8 @@ BW *bwmk PARAMS((W *window, B *b, int prompt));
 void bwmove PARAMS((BW *w, int x, int y));
 void bwresz PARAMS((BW *w, int wi, int he));
 void bwrm PARAMS((BW *w));
+#undef ustat
+#define ustat ustat_j /* to avoid Linux libc4 conflict */
 int ustat PARAMS((BW *bw));
 int ucrawll PARAMS((BW *bw));
 int ucrawlr PARAMS((BW *bw));
index bcd27b4..a29d9f5 100644 (file)
--- a/charmap.c
+++ b/charmap.c
@@ -1,4 +1,7 @@
-/* $MirOS: contrib/code/jupp/charmap.c,v 1.10 2011/07/16 21:57:56 tg Exp $ */
+#if 0
+.if "0" == "1"
+#endif
+/* $MirOS: contrib/code/jupp/charmap.c,v 1.14 2014/06/26 19:05:28 tg Exp $ */
 /*
  *     UNICODE/ISO-10646 conversion utilities
  *     Copyright
 
 /* Convert from byte code to unicode.  Returns -1 for unknown. */
 
-int to_uni(struct charmap *cset, int c)
+int
+to_uni(struct charmap *cset, int c)
 {
-       return cset->to_map[c];
+       return (cset->to_map[c]);
 }
 
 /* Convert from unicode to byte code.  Returns -1 for unknown. */
 
-int from_uni(struct charmap *cset, int c)
+int
+from_uni(struct charmap *cset, int c)
 {
        int x, y, z;
 
        x = 0;
        y = cset->from_size-1;
        z = -1;
+       /* this is not a bsearch and first/last are in reality from/to */
        while (z != (x + y + 1) / 2) {
                z = (x + y + 1) / 2;
                if (c > cset->from_map[z].first)
@@ -40,9 +46,9 @@ int from_uni(struct charmap *cset, int c)
                else if (c < cset->from_map[z].first)
                        y = z;
                else
-                       return cset->from_map[z].last;
+                       return (cset->from_map[z].last);
        }
-       return -1;
+       return (-1);
 }
 
 /* Builtin maps */
@@ -55,7 +61,7 @@ static const struct {
 } alias_table[] = {
        { US "c", US "ascii" },
        { US "posix", US "ascii" },
-       { US "iso_646", US "ascii" },
+       { US "iso646", US "ascii" },
        { US "8859-1", US "iso-8859-1" },
        { US "8859-2", US "iso-8859-2" },
        { US "8859-3", US "iso-8859-3" },
@@ -71,6 +77,7 @@ static const struct {
        { US "8859-14", US "iso-8859-14" },
        { US "8859-15", US "iso-8859-15" },
        { US "8859-16", US "iso-8859-16" },
+       { US "oem", US "cp437" },
        { US "ansi", US "cp1252" },
        { US "latin1", US "iso-8859-1" },
        { US "latin2", US "iso-8859-2" },
@@ -91,16 +98,11 @@ static const struct {
        { 0, 0 }
 };
 
-/* I took all the ISO-8859- ones, plus any ones referenced by a locale */
-
-struct builtin_charmap {
+static const struct builtin_charmap {
        const unsigned char *name;
        int extra_b7, extra_2192;
        int to_uni[256];
-};
-
-static const struct builtin_charmap builtin_charmaps[]=
-{
+} builtin_charmaps[] = {
        { US "ascii", 0x20, 0x20, {
        0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
        0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
@@ -761,6 +763,40 @@ static const struct builtin_charmap builtin_charmaps[]=
        0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
        0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
        0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a }},
+       { US "cp437", 0xF9, 0xAA, {
+       /* From: src/share/i18n/csmapper/CP/CP437%UCS.src,v 1.2 2014/06/26 18:58:50 tg Exp $ */
+       0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+       0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+       0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+       0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+       0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+       0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+       0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+       0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+       0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+       0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+       0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+       0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+       0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+       0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+       0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+       0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+       0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7,
+       0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
+       0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9,
+       0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
+       0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA,
+       0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
+       0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
+       0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
+       0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F,
+       0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
+       0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B,
+       0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
+       0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4,
+       0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
+       0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248,
+       0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 }},
        { US "cp1251", 0x20, 0x20, {
        0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
        0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
@@ -827,7 +863,7 @@ static const struct builtin_charmap builtin_charmaps[]=
        0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
        0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
        0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff }},
-       { US "cp1256", 0x20, 0x20, {
+       { US "cp1255", 0x20, 0x20, {
        0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
        0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
        0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
@@ -844,23 +880,23 @@ static const struct builtin_charmap builtin_charmaps[]=
        0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
        0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
        0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
-       0x20ac, 0x067e, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
-       0x02c6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688,
-       0x06af, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
-       0x06a9, 0x2122, 0x0691, 0x203a, 0x0153, 0x200c, 0x200d, 0x06ba,
-       0x00a0, 0x060c, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
-       0x00a8, 0x00a9, 0x06be, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
+       0x20ac,     -1, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
+       0x02c6, 0x2030,     -1, 0x2039,     -1,     -1,     -1,     -1,
+           -1, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
+       0x02dc, 0x2122,     -1, 0x203a,     -1,     -1,     -1,     -1,
+       0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20aa, 0x00a5, 0x00a6, 0x00a7,
+       0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
        0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7,
-       0x00b8, 0x00b9, 0x061b, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x061f,
-       0x06c1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
-       0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f,
-       0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00d7,
-       0x0637, 0x0638, 0x0639, 0x063a, 0x0640, 0x0641, 0x0642, 0x0643,
-       0x00e0, 0x0644, 0x00e2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00e7,
-       0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x0649, 0x064a, 0x00ee, 0x00ef,
-       0x064b, 0x064c, 0x064d, 0x064e, 0x00f4, 0x064f, 0x0650, 0x00f7,
-       0x0651, 0x00f9, 0x0652, 0x00fb, 0x00fc, 0x200e, 0x200f, 0x06d2 }},
-       { US "cp1255", 0x20, 0x20, {
+       0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf,
+       0x05b0, 0x05b1, 0x05b2, 0x05b3, 0x05b4, 0x05b5, 0x05b6, 0x05b7,
+       0x05b8, 0x05b9,     -1, 0x05bb, 0x05bc, 0x05bd, 0x05be, 0x05bf,
+       0x05c0, 0x05c1, 0x05c2, 0x05c3, 0x05f0, 0x05f1, 0x05f2, 0x05f3,
+       0x05f4,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+       0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7,
+       0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df,
+       0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7,
+       0x05e8, 0x05e9, 0x05ea,     -1,     -1, 0x200e, 0x200f,     -1 }},
+       { US "cp1256", 0x20, 0x20, {
        0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
        0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
        0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
@@ -877,22 +913,22 @@ static const struct builtin_charmap builtin_charmaps[]=
        0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
        0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
        0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
-       0x20ac,     -1, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
-       0x02c6, 0x2030,     -1, 0x2039,     -1,     -1,     -1,     -1,
-           -1, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
-       0x02dc, 0x2122,     -1, 0x203a,     -1,     -1,     -1,     -1,
-       0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20aa, 0x00a5, 0x00a6, 0x00a7,
-       0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
+       0x20ac, 0x067e, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
+       0x02c6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688,
+       0x06af, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
+       0x06a9, 0x2122, 0x0691, 0x203a, 0x0153, 0x200c, 0x200d, 0x06ba,
+       0x00a0, 0x060c, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
+       0x00a8, 0x00a9, 0x06be, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
        0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7,
-       0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf,
-       0x05b0, 0x05b1, 0x05b2, 0x05b3, 0x05b4, 0x05b5, 0x05b6, 0x05b7,
-       0x05b8, 0x05b9,     -1, 0x05bb, 0x05bc, 0x05bd, 0x05be, 0x05bf,
-       0x05c0, 0x05c1, 0x05c2, 0x05c3, 0x05f0, 0x05f1, 0x05f2, 0x05f3,
-       0x05f4,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
-       0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7,
-       0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df,
-       0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7,
-       0x05e8, 0x05e9, 0x05ea,     -1,     -1, 0x200e, 0x200f,     -1 }},
+       0x00b8, 0x00b9, 0x061b, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x061f,
+       0x06c1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
+       0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f,
+       0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00d7,
+       0x0637, 0x0638, 0x0639, 0x063a, 0x0640, 0x0641, 0x0642, 0x0643,
+       0x00e0, 0x0644, 0x00e2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00e7,
+       0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x0649, 0x064a, 0x00ee, 0x00ef,
+       0x064b, 0x064c, 0x064d, 0x064e, 0x00f4, 0x064f, 0x0650, 0x00f7,
+       0x0651, 0x00f9, 0x0652, 0x00fb, 0x00fc, 0x200e, 0x200f, 0x06d2 }},
        { US "armscii-8", 0x20, 0x20, {
        0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
        0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
@@ -996,96 +1032,107 @@ static const struct builtin_charmap builtin_charmaps[]=
 
 /* For qsort() */
 
-static int pair_cmp(struct pair *a,struct pair *b)
+static int
+pair_cmp(struct pair *a, struct pair *b)
 {
-       if (a->first>b->first)
-               return 1;
-       else if(a->first<b->first)
-               return -1;
+       if (a->first > b->first)
+               return (1);
+       else if (a->first < b->first)
+               return (-1);
        else
-               return 0;
+               return (0);
 }
 
 /* Predicate and conversion functions for byte-oriented charmaps */
 
-int byte_ispunct(struct charmap *map,int c)
+int
+byte_ispunct(struct charmap *map, int c)
 {
-       int ofst = (c>>3);
-       int bitn = (1<<(c&7));
-       if (c<0 || c>255)
-               return 0;
-       return (map->print_map[ofst]&bitn) != 0 && (map->alnum__map[ofst]&bitn) == 0;
+       int ofst = (c >> 3);
+       int bitn = (1 << (c & 7));
+
+       if (c < 0 || c > 255)
+               return (0);
+       return (((map->print_map[ofst] & bitn) != 0) &&
+           ((map->alnum__map[ofst] & bitn) == 0));
 }
 
-int byte_isprint(struct charmap *map,int c)
+int
+byte_isprint(struct charmap *map, int c)
 {
-       int ofst = (c>>3);
-       int bitn = (1<<(c&7));
-       if (c<0 || c>255)
-               return 0;
-       return (map->print_map[ofst]&bitn) != 0;
+       int ofst = (c >> 3);
+       int bitn = (1 << (c & 7));
+
+       if (c < 0 || c > 255)
+               return (0);
+       return ((map->print_map[ofst] & bitn) != 0);
 }
 
-int byte_isspace(struct charmap *map,int c)
+int
+byte_isspace(struct charmap *map, int c)
 {
-       return c==32 || (c >= 9 && c <= 13);
+       return (c == 32 || (c >= 9 && c <= 13));
 }
 
-int byte_isalpha_(struct charmap *map,int c)
+int
+byte_isalpha_(struct charmap *map, int c)
 {
-       int ofst = (c>>3);
-       int bitn = (1<<(c&7));
-       if (c<0 || c>255)
-               return 0;
-       return (map->alpha__map[ofst]&bitn) != 0;
+       int ofst = (c >> 3);
+       int bitn = (1 << (c & 7));
+
+       if (c < 0 || c > 255)
+               return (0);
+       return ((map->alpha__map[ofst] & bitn) != 0);
 }
 
-int byte_isalnum_(struct charmap *map,int c)
+int
+byte_isalnum_(struct charmap *map, int c)
 {
-       int ofst = (c>>3);
-       int bitn = (1<<(c&7));
-       if (c<0 || c>255)
-               return 0;
-       return (map->alnum__map[ofst]&bitn) != 0;
+       int ofst = (c >> 3);
+       int bitn = (1 << (c & 7));
+
+       if (c < 0 || c > 255)
+               return (0);
+       return ((map->alnum__map[ofst] & bitn) != 0);
 }
 
-int byte_tolower(struct charmap *map,int c)
+int
+byte_tolower(struct charmap *map, int c)
 {
-       if (c<0 || c>255)
-               return c;
-       else
-               return map->lower_map[c];
+       return ((c < 0 || c > 255) ? c : map->lower_map[c]);
 }
 
-int byte_toupper(struct charmap *map,int c)
+int
+byte_toupper(struct charmap *map, int c)
 {
-       if (c<0 || c>255)
-               return c;
-       else
-               return map->upper_map[c];
+       return ((c < 0 || c > 255) ? c : map->upper_map[c]);
 }
 
 /* Load built-in character maps */
 
-static void set_bit(unsigned char *map,int n)
+static void
+set_bit(unsigned char *map, int n)
 {
-       map[n>>3] |= (1<<(n&7));
+       map[n >> 3] |= (1 << (n & 7));
 }
 
-static int rtn_arg(struct charmap *map,int c)
+static int
+rtn_arg(struct charmap *map, int c)
 {
-       return c;
+       return (c);
 }
 
-static struct charmap *charmaps = NULL;        /* Loaded character sets */
+/* loaded character sets */
+static struct charmap *charmaps = NULL;
 
 /* Process a byte-oriented character map and add it to database.
    Consults unicode database "i18n.c" to determine which characters are
    uppercase, etc. */
 
-static struct charmap *process_builtin(const struct builtin_charmap *builtin)
+static struct charmap *
+process_builtin(const struct builtin_charmap *builtin)
 {
-       int x, extra_b7, extra_2192;
+       int x, c, extra_b7, extra_2192;
        struct charmap *map;
 
        extra_b7 = builtin->extra_b7;
@@ -1104,14 +1151,14 @@ static struct charmap *process_builtin(const struct builtin_charmap *builtin)
        map->from_uni = from_uni;
        map->from_size = 0;
        map->to_map = builtin->to_uni;
-       for (x=0; x!=256; ++x) {
-               if (map->to_map[x]!=-1) {
-                       map->from_map[map->from_size].first = map->to_map[x];
+       for (x = 0; x != 256; ++x) {
+               if ((c = map->to_map[x]) != -1) {
+                       map->from_map[map->from_size].first = c;
                        map->from_map[map->from_size].last = x;
                        ++map->from_size;
-                       if (map->to_map[x] == 0xB7)
+                       if (c == 0xB7)
                                extra_b7 = -1;
-                       if (map->to_map[x] == 0x2192)
+                       if (c == 0x2192)
                                extra_2192 = -1;
                }
        }
@@ -1126,71 +1173,60 @@ static struct charmap *process_builtin(const struct builtin_charmap *builtin)
                ++map->from_size;
        }
 
-       qsort(map->from_map,map->from_size,sizeof(struct pair), (int (*)(const void *, const void *))pair_cmp);
-
-       /* Fill in print, alpha and alnum bit maps */
+       qsort(map->from_map, map->from_size, sizeof(struct pair),
+           (int (*)(const void *, const void *))pair_cmp);
 
-       for (x=0;x!=32;++x) {
+       for (x = 0; x != 32; ++x) {
                map->print_map[x] = 0;
                map->alpha__map[x] = 0;
                map->alnum__map[x] = 0;
        }
 
-       for (x=0; x!=256; ++x)
-               if (map->to_map[x] != -1) {
-                       if (joe_iswprint(NULL,map->to_map[x]))
-                               set_bit(map->print_map,x);
-                       if (joe_iswalpha(NULL,map->to_map[x])) {
-                               set_bit(map->alpha__map,x);
-                               set_bit(map->alnum__map,x);
+       for (x = 0; x != 256; ++x) {
+               map->lower_map[x] = x;
+               map->upper_map[x] = x;
+               if ((c = map->to_map[x]) != -1) {
+                       int y, z;
+
+                       if (joe_iswprint(NULL, c))
+                               set_bit(map->print_map, x);
+                       if (joe_iswalpha(NULL, c)) {
+                               set_bit(map->alpha__map, x);
+                               set_bit(map->alnum__map, x);
                        }
-               }
 
-       /* Set underbar <U+005F> */
+                       y = joe_towlower(NULL, c);
+                       if ((z = from_uni(map, y)) != -1)
+                               map->lower_map[x] = z;
 
-       x = from_uni(map,0x5F);
-       if (x != -1) {
-               set_bit(map->alpha__map,x);
-               set_bit(map->alnum__map,x);
+                       y = joe_towupper(NULL, c);
+                       if ((z = from_uni(map, y)) != -1)
+                               map->upper_map[x] = z;
+               }
        }
 
-       /* Put digits in alnum map */
+       /* Set underbar <U+005F> */
 
-       for (x=0x30; x!=0x3A; ++x) {
-               int y = from_uni(map,x);
-               if (y != -1)
-                       set_bit(map->alnum__map,y);
+       if ((c = from_uni(map, 0x5F)) != -1) {
+               set_bit(map->alpha__map, c);
+               set_bit(map->alnum__map, c);
        }
 
-       /* Build case conversion tables */
+       /* Put digits into alnum map */
 
-       for (x=0; x!=256; ++x) {
-               map->lower_map[x] = x;
-               if (map->to_map[x] != -1) {
-                       int y = joe_towlower(NULL,map->to_map[x]);
-                       int z = from_uni(map,y);
-                       if (z != -1)
-                               map->lower_map[x] = z;
-               }
-       }
-
-       for (x=0; x!=256; ++x) {
-               map->upper_map[x] = x;
-               if (map->to_map[x] != -1) {
-                       int y = joe_towupper(NULL,map->to_map[x]);
-                       int z = from_uni(map,y);
-                       if (z != -1)
-                               map->upper_map[x] = z;
-               }
+       for (x = 0x30; x != 0x3A; ++x) {
+               if ((c = from_uni(map, x)) != -1)
+                       set_bit(map->alnum__map, c);
        }
 
        map->next = charmaps;
        charmaps = map;
 
-       return map;
+       return (map);
 }
 
-static void load_builtins(void)
+static void
+load_builtins(void)
 {
        struct charmap *map;
 
@@ -1203,119 +1239,107 @@ static void load_builtins(void)
        map->is_punct = joe_iswpunct;
        map->is_print = joe_iswprint;
        map->is_space = joe_iswspace;
-       map->is_alpha_ = joe_iswalpha_;
-       map->is_alnum_ = joe_iswalnum_;
+       map->is_alpha_ = joe_iswalpha;
+       map->is_alnum_ = joe_iswalnum;
        map->to_lower = joe_towlower;
        map->to_upper = joe_towupper;
        map->next = charmaps;
        charmaps = map;
-
-       /* Load all built-in byte maps */
-       /*
-       for (y=0; y!=sizeof(builtin_charmaps)/sizeof(struct builtin_charmap); ++y)
-               process_builtin(builtin_charmaps + y);
-       */
 }
 
 /* Parse character map file */
 
-static struct builtin_charmap *parse_charmap(const unsigned char *name,FILE *f)
+static struct builtin_charmap *
+parse_charmap(const unsigned char *name, FILE *f)
 {
        unsigned char buf[1024];
        unsigned char bf1[1024];
        unsigned comment_char = '#';
        int in_map = 0;
        int x;
-
        struct builtin_charmap *b;
 
        if (!f)
-               return 0;
+               return (NULL);
 
        b = malloc(sizeof(struct builtin_charmap));
-
        b->name = (unsigned char *)strdup((char *)name);
 
-       for (x=0; x!=256; ++x)
-               b->to_uni[x]= -1;
+       for (x = 0; x != 256; ++x)
+               b->to_uni[x] = -1;
 
        /* This is a _really_bad_ parser.  The file has to be perfect. */
-       while (fgets((char *)buf,1023,f)) {
+       while (fgets((char *)buf, 1023, f)) {
                unsigned char *p = buf;
+
                parse_ws(&p, comment_char);
                parse_tows(&p, bf1);
-               if (!strcmp((char *)bf1,"<comment_char>")) {
+               if (!strcmp((char *)bf1, "<comment_char>")) {
                        parse_ws(&p, comment_char);
                        parse_tows(&p, bf1);
                        comment_char = bf1[0];
-               } else if (!strcmp((char *)bf1,"<escape_char>")) {
+               } else if (!strcmp((char *)bf1, "<escape_char>")) {
                        parse_ws(&p, comment_char);
                        parse_tows(&p, bf1);
-               } else if (!strcmp((char *)bf1,"CHARMAP")) {
+               } else if (!strcmp((char *)bf1, "CHARMAP")) {
                        in_map = 1;
-               } else if (!strcmp((char *)bf1,"END")) {
+               } else if (!strcmp((char *)bf1, "END")) {
                        in_map = 0;
-               } else if (in_map && bf1[0]=='<' && bf1[1]=='U') {
+               } else if (in_map && bf1[0] == '<' && bf1[1] == 'U') {
                        int uni;
                        int byt;
-                       sscanf((char *)bf1+2,"%x",&uni);
+
+                       sscanf((char *)bf1+2, "%x", &uni);
                        parse_ws(&p, comment_char);
                        parse_tows(&p, bf1);
-                       sscanf((char *)bf1+2,"%x",&byt);
-                       b->to_uni[byt]=uni;
+                       sscanf((char *)bf1+2, "%x", &byt);
+                       b->to_uni[byt] = uni;
                }
        }
 
-       /* For generating builtin maps from /usr/share/i18n/charmaps/ */
-/*
-       printf("        { \"%s\"\n",name);
-       for (y=0;y!=256;y+=8) {
-               printf("\t");
-               for(x=0;x!=8;++x) {
-                       if (b->to_uni[y+x]==-1)
-                               printf("    -1, ");
-                       else
-                               printf("0x%4.4X, ",b->to_uni[y+x]);
-               }
-               printf("\n");
-       }
-*/
        fclose(f);
-       return b;
+       return (b);
 }
 
 /* Byte wide character map to unicode conversion */
 
-/* Compare character map names.  Ignores '-'s and terminates string on '.' */
-/* Chicken and egg problem here.. */
+/*
+ * Compare character map names.
+ * Ignores '-'s and '_'s and terminates string on '.'.
+ * Chicken and egg problem here...
+ */
 
-static int map_up(int c)
+static int
+map_up(int c)
 {
-       if (c>='a' && c<='z')
-               return c+'A'-'a';
-       else
-               return c;
+       return ((c >= 'a' && c <= 'z') ? (c + 'A' - 'a') : c);
 }
 
-int map_name_cmp(const unsigned char *a, const unsigned char *b)
+int
+map_name_cmp(const unsigned char *a, const unsigned char *b)
 {
-       while (*a=='-') ++a;
-       while (*b=='-') ++b;
-       while (*a && *b && map_up(*a)==map_up(*b)) {
+       unsigned char ca, cb;
+
+       goto into_the_loop;
+ loop_beg:
+       if (!(ca = *a) || !(cb = *b) || (map_up(ca) != map_up(cb)))
+               goto loop_end;
+       ++a;
+       ++b;
+ into_the_loop:
+       while ((ca = *a) == '-' || ca == '_')
                ++a;
+       while ((cb = *b) == '-' || ca == '_')
                ++b;
-               while (*a=='-') ++a;
-               while (*b=='-') ++b;
-       }
-       if (!*a && (*b=='.' || !*b))
-               return 0;
-       else
-               return 1;
+       goto loop_beg;
+ loop_end:
+       return ((!*a && (*b == '.' || !*b)) ? 0 : 1);
 }
 
 /* Find a character map */
 
-struct charmap *find_charmap(const unsigned char *name)
+struct charmap *
+find_charmap(const unsigned char *name)
 {
        unsigned char buf[1024];
        unsigned char *p;
@@ -1325,62 +1349,69 @@ struct charmap *find_charmap(const unsigned char *name)
        int y;
 
        if (!name)
-               return 0;
+               return (0);
 
        /* Install some initial character maps */
        if (!charmaps)
                load_builtins();
 
        /* Alias? */
-       for (y=0; alias_table[y].alias; ++y)
-               if (!map_name_cmp(alias_table[y].alias,name)) {
+       for (y = 0; alias_table[y].alias; ++y)
+               if (!map_name_cmp(alias_table[y].alias, name)) {
                        name = alias_table[y].builtin;
                        break;
                }
 
        /* Already loaded? */
-       for (m=charmaps; m; m=m->next)
-               if (!map_name_cmp(m->name,name))
-                       return m;
+       for (m = charmaps; m; m = m->next)
+               if (!map_name_cmp(m->name, name))
+                       return (m);
 
        /* Check ~/.joe/charmaps */
        p = (unsigned char *)getenv("HOME");
        if (p) {
-               joe_snprintf_2((char *)buf,sizeof(buf),"%s/.joe/charmaps/%s",p,name);
-               f = fopen((char *)buf,"r");
+               joe_snprintf_2((char *)buf, sizeof(buf),
+                   "%s/.joe/charmaps/%s", p, name);
+               f = fopen((char *)buf, "r");
        }
 
        /* Check JOERCcharmaps */
        if (!f) {
-               joe_snprintf_2((char *)buf,sizeof(buf),"%scharmaps/%s",JOERC,name);
-               f = fopen((char *)buf,"r");
+               joe_snprintf_2((char *)buf, sizeof(buf),
+                   "%scharmaps/%s", JOERC, name);
+               f = fopen((char *)buf, "r");
        }
 
        /* Parse and install character map from file */
-       if (f && (b = parse_charmap(name,f)))
-               return process_builtin(b);
+       if (f && (b = parse_charmap(name, f)))
+               return (process_builtin(b));
 
        /* Check builtin sets */
-       for (y=0; y!=sizeof(builtin_charmaps)/sizeof(struct builtin_charmap); ++y)
-               if (!map_name_cmp(builtin_charmaps[y].name,name))
-                       return process_builtin(builtin_charmaps + y);
+       for (y = 0; y != NELEM(builtin_charmaps); ++y)
+               if (!map_name_cmp(builtin_charmaps[y].name, name))
+                       return (process_builtin(builtin_charmaps + y));
 
-       return NULL;
+       return (NULL);
 }
 
 /* Test */
 
-#if 0
-main(int argc,char *argv[])
+#ifdef TEST_CHARMAP
+int
+main(int argc, char *argv[])
 {
-       struct charmap *map=find_charmap(argv[1]);
+       struct charmap *map;
        int u;
        int uni;
-       if (!map)
+
+       if (!argv[1] || !argv[2] || !(map = find_charmap(argv[1]))) {
                printf("Not found\n");
-       sscanf(argv[2],"%x",&u);
-       printf("Unicode=%X\n",uni=to_uni(map,u));
-       printf("Local=%X\n",from_uni(map,uni));
+               return (1);
+       }
+       sscanf(argv[2], "%x", &u);
+       printf("Unicode=%X\n", uni = to_uni(map, u));
+       printf("Local=%X\n", from_uni(map, uni));
+       return (0);
 }
 #endif
 
@@ -1399,35 +1430,34 @@ get_encodings(void)
 
        /* Builtin maps */
 
-       r = vsncpy(NULL,0,sc("utf-8"));
+       r = vsncpy(NULL, 0, sc("utf-8"));
        encodings = vaadd(encodings, r);
 
-       for (y=0; y!=sizeof(builtin_charmaps)/sizeof(struct builtin_charmap); ++y) {
-               r = vsncpy(NULL,0,sz(builtin_charmaps[y].name));
+       for (y = 0; y != NELEM(builtin_charmaps); ++y) {
+               r = vsncpy(NULL, 0, sz(builtin_charmaps[y].name));
                encodings = vaadd(encodings, r);
        }
 
        /* Aliases */
 
-       for (y=0; alias_table[y].alias; ++y) {
-               r = vsncpy(NULL,0,sz(alias_table[y].alias));
+       for (y = 0; alias_table[y].alias; ++y) {
+               r = vsncpy(NULL, 0, sz(alias_table[y].alias));
                encodings = vaadd(encodings, r);
        }
 
        /* External maps */
 
-       p = (unsigned char *)getenv("HOME");
-       if (p) {
-               joe_snprintf_1((char *)buf,sizeof(buf),"%s/.joe/charmaps",p);
+       if ((p = (unsigned char *)getenv("HOME"))) {
+               joe_snprintf_1((char *)buf, sizeof(buf), "%s/.joe/charmaps", p);
                if (!chpwd(buf) && (t = rexpnd(US "*"))) {
                        for (x = 0; x != aLEN(t); ++x)
-                               if (strcmp(t[x],"..")) {
+                               if (strcmp(t[x], "..")) {
                                        for (y = 0; y != aLEN(encodings); ++y)
-                                               if (!strcmp(t[x],encodings[y]))
+                                               if (!strcmp(t[x], encodings[y]))
                                                        break;
                                        if (y == aLEN(encodings)) {
-                                               r = vsncpy(NULL,0,sv(t[x]));
-                                               encodings = vaadd(encodings,r);
+                                               r = vsncpy(NULL, 0, sv(t[x]));
+                                               encodings = vaadd(encodings, r);
                                        }
                                }
                        varm(t);
@@ -1436,13 +1466,13 @@ get_encodings(void)
 
        if (!chpwd(US (JOERC "charmaps")) && (t = rexpnd(US "*"))) {
                for (x = 0; x != aLEN(t); ++x)
-                       if (strcmp(t[x],"..")) {
+                       if (strcmp(t[x], "..")) {
                                for (y = 0; y != aLEN(encodings); ++y)
-                                       if (!strcmp(t[x],encodings[y]))
+                                       if (!strcmp(t[x], encodings[y]))
                                                break;
                                if (y == aLEN(encodings)) {
-                                       r = vsncpy(NULL,0,sv(t[x]));
-                                       encodings = vaadd(encodings,r);
+                                       r = vsncpy(NULL, 0, sv(t[x]));
+                                       encodings = vaadd(encodings, r);
                                }
                        }
                varm(t);
@@ -1450,82 +1480,51 @@ get_encodings(void)
 
        chpwd(oldpwd);
 
-       return encodings;
+       return (encodings);
 }
 
-#if 0
-
-/* Convert to uppercase via unicode.  Returns original
-   character if there was no conversion. */
-
-int joe_toupper(struct charmap *map,int c)
-{
-       int d;
-
-       /* This appears to always be true */
-       if (c>='a' && c<='z')
-               return c+'A'-'a';
-       else if (c<128)
-               return c;
-
-       /* Slow... */
-       d = to_uni(map,c);
-       if (d== -1)
-               return c;
-       d = joe_towupper(d);
-       if (d== -1)
-               return c;
-       d = from_uni(map,d);
-       if (d== -1)
-               return c;
-       else
-               return d;
-}
-
-/* Convert to uppercase via unicode.  Returns original
-   character if there was no conversion. */
-
-int joe_tolower(struct charmap *map,int c)
-{
-       int d;
-
-       /* This appears to always be true */
-       if (c>='A' && c<='Z')
-               return c+'a'-'A';
-       else if (c<128)
-               return c;
-
-       /* Slow... */
-       d = to_uni(map,c);
-       if (d== -1)
-               return c;
-       d = joe_towlower(d);
-       if (d== -1)
-               return c;
-       d = from_uni(map,d);
-       if (d== -1)
-               return c;
-       else
-               return d;
-}
-#endif
-
 /* This is not correct... (EBCDIC for example) */
 
-int joe_isblank(struct charmap *map,int c)
+int
+joe_isblank(struct charmap *map, int c)
 {
-       return c==32 || c==9;
+       return (c == 32 || c == 9);
 }
 
-int joe_isspace_eof(struct charmap *map,int c)
+int
+joe_isspace_eof(struct charmap *map, int c)
 {
-       return (c==0) || joe_isspace(map,c);
+       return ((c == 0) || joe_isspace(map, c));
 }
 
-unsigned char *lowerize(unsigned char *s)
+unsigned char *
+joe_strtolower(unsigned char *s)
 {
        unsigned char *t;
-       for (t=s;*t;t++)
-               *t = joe_tolower(locale_map,*t);
-       return s;
+
+       for (t = s; *t; t++)
+               *t = joe_tolower(locale_map, *t);
+       return (s);
 }
+
+#if 0
+.endif
+
+PROG=          charmap
+SRCS=          charmap.c
+SRCS+=         i18n.c path.c utf8.c utils.c va.c vs.c
+NOMAN=         Yes
+CPPFLAGS+=     -DTEST -DTEST_CHARMAP
+CPPFLAGS+=     -D'JOERC="/etc/joe"'
+
+.include <bsd.own.mk>
+
+.ifdef __CRAZY
+COPTS+=                -Wno-unused-parameter \
+               -Wno-strict-prototypes \
+               -Wno-cast-qual \
+               -Wno-missing-prototypes -Wno-missing-declarations
+.endif
+
+.include <bsd.prog.mk>
+#endif
index 35f3336..a50c2f3 100644 (file)
--- a/charmap.h
+++ b/charmap.h
@@ -1,4 +1,4 @@
-/* $MirOS: contrib/code/jupp/charmap.h,v 1.4 2010/01/03 18:22:04 tg Exp $ */
+/* $MirOS: contrib/code/jupp/charmap.h,v 1.5 2014/06/26 17:51:14 tg Exp $ */
 /*
  *     Character sets
  *     Copyright
@@ -76,7 +76,7 @@ int joe_isspace_eof PARAMS((struct charmap *map,int c));
 #define joe_toupper(map,c) ((map)->to_upper((map),(c)))
 #define joe_to_uni(map,c) ((map)->to_uni((map),(c)))
 #define joe_from_uni(map,c) ((map)->from_uni((map),(c)))
-unsigned char *lowerize PARAMS((unsigned char *s));
+unsigned char *joe_strtolower PARAMS((unsigned char *s));
 
 /* Find (load if necessary) a character set */
 struct charmap *find_charmap PARAMS((const unsigned char *name));
diff --git a/cmd.h b/cmd.h
index d36aa04..1c78927 100644 (file)
--- a/cmd.h
+++ b/cmd.h
@@ -1,4 +1,4 @@
-/* $MirOS: contrib/code/jupp/cmd.h,v 1.3 2008/07/28 00:12:06 tg Exp $ */
+/* $MirOS: contrib/code/jupp/cmd.h,v 1.4 2014/06/09 16:06:46 tg Exp $ */
 /*
  *     Command execution
  *     Copyright
@@ -26,7 +26,7 @@ extern int dobeep;
 #define EKILL           64     /* Function is a kill */
 #define EMOD           128     /* Not allowed on readonly files */
 /* These use same bits as TYPE* in types.h */
-#define EBLOCK         0x4000  /* Finish block selection (call udropon) */
+#define EBLOCK         0x4000  /* Finish block selection */
 
 /* CMD *findcmd(char *s);
  * Return command address for given name
index cb09430..c6e9bd8 100644 (file)
--- a/config.h
+++ b/config.h
@@ -1,9 +1,26 @@
-/* $MirOS: contrib/code/jupp/config.h,v 1.5 2011/07/16 21:57:56 tg Exp $ */
+/* $MirOS: contrib/code/jupp/config.h,v 1.7 2014/06/26 18:15:17 tg Exp $ */
 
 #ifndef _JOE_CONFIG_H
 #define _JOE_CONFIG_H
 
+#ifndef TEST
 #include "autoconf.h"
+#else
+#define HAVE_DECL_STRLCAT 1
+#define HAVE_DECL_STRLCPY 1
+#define HAVE_GETCWD 1
+#define HAVE_MKSTEMP 1
+#define HAVE_SNPRINTF 1
+#define HAVE_SYS_TYPES_H 1
+#define HAVE_SYS_STAT_H 1
+#define HAVE_DIRENT_H 1
+#define HAVE_LIMITS_H 1
+#define HAVE_SIGNAL_H 1
+#define HAVE_STDLIB_H 1
+#define HAVE_UNISTD_H 1
+#define RETSIGTYPE void
+#define PARAMS(protos) protos
+#endif
 
 #ifdef HAVE_SNPRINTF
 
index 4e095a7..0809526 100644 (file)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61-MirPorts-1 for joe 3.1jupp26.
+# Generated by GNU Autoconf 2.61-MirPorts-1 for joe 3.1jupp27.
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
 # 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
@@ -572,8 +572,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
 # Identity of this package.
 PACKAGE_NAME='joe'
 PACKAGE_TARNAME='joe'
-PACKAGE_VERSION='3.1jupp26'
-PACKAGE_STRING='joe 3.1jupp26'
+PACKAGE_VERSION='3.1jupp27'
+PACKAGE_STRING='joe 3.1jupp27'
 PACKAGE_BUGREPORT=''
 
 ac_unique_file="b.c"
@@ -1223,7 +1223,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures joe 3.1jupp26 to adapt to many kinds of systems.
+\`configure' configures joe 3.1jupp27 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1294,7 +1294,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of joe 3.1jupp26:";;
+     short | recursive ) echo "Configuration of joe 3.1jupp27:";;
    esac
   cat <<\_ACEOF
 
@@ -1385,7 +1385,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-joe configure 3.1jupp26
+joe configure 3.1jupp27
 generated by GNU Autoconf 2.61-MirPorts-1
 
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1399,7 +1399,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by joe $as_me 3.1jupp26, which was
+It was created by joe $as_me 3.1jupp27, which was
 generated by GNU Autoconf 2.61-MirPorts-1.  Invocation command line was
 
   $ $0 $@
@@ -2200,7 +2200,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='joe'
- VERSION='3.1jupp26'
+ VERSION='3.1jupp27'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -10908,7 +10908,7 @@ exec 6>&1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by joe $as_me 3.1jupp26, which was
+This file was extended by joe $as_me 3.1jupp27, which was
 generated by GNU Autoconf 2.61-MirPorts-1.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -10961,7 +10961,7 @@ Report bugs to <bug-autoconf@gnu.org>."
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
-joe config.status 3.1jupp26
+joe config.status 3.1jupp27
 configured by $0, generated by GNU Autoconf 2.61-MirPorts-1,
   with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
index f263a0d..70f5395 100644 (file)
@@ -1,4 +1,4 @@
-# $MirOS: contrib/code/jupp/configure.ac,v 1.44 2013/11/07 22:17:43 tg Exp $
+# $MirOS: contrib/code/jupp/configure.ac,v 1.45 2014/06/29 11:39:51 tg Exp $
 #-
 # Process this file with autoconf to produce a configure script.
 
@@ -6,7 +6,7 @@
 AC_PREREQ(2.54)
 
 #### Here's the only place where to change version number ####
-AC_INIT(joe, 3.1jupp26)
+AC_INIT(joe, 3.1jupp27)
 #### But see main.c for the Copyright (c) owner and year! ####
 AC_CONFIG_SRCDIR([b.c])
 
diff --git a/i18n.c b/i18n.c
index 66d2e19..cb449b6 100644 (file)
--- a/i18n.c
+++ b/i18n.c
@@ -1,8 +1,12 @@
-/* $MirOS: contrib/code/jupp/i18n.c,v 1.8 2013/08/19 17:39:29 tg Exp $ */
+#if 0
+.if "0" == "1"
+#endif
+/* $MirOS: contrib/code/jupp/i18n.c,v 1.14 2014/06/26 18:02:30 tg Exp $ */
 /*
  *     UNICODE/ISO-10646 functions for JOE
  *     Copyright
  *             (C) 1992 Joseph H. Allen
+ *     Copyright © 2014 Thorsten Glaser
  *
  *     This file is part of JOE (Joe's Own Editor)
  *
@@ -21,7 +25,7 @@
 #include "utf8.h"
 #include "i18n.h"
 
-/* From: X11/xc/programs/xterm/wcwidth.c,v 1.6 2013/05/31 23:27:09 tg Exp $ */
+/* From: X11/xc/programs/xterm/wcwidth.c,v 1.8 2014/06/24 19:53:53 tg Exp $ */
 
 struct mb_ucsrange {
        unsigned int beg;
@@ -31,20 +35,9 @@ struct mb_ucsrange {
 static size_t mb_ucsbsearch(const struct mb_ucsrange arr[], size_t elems,
     unsigned int val);
 
-/* Macro for generating joe_iswXXX functions */
-
-#define MAKE_ISW(x) \
-       int joe_isw##x(struct charmap *foo,int c) \
-       { \
-               if (mb_ucsbsearch(data_wctype_##x, NELEM(data_wctype_##x), c) != (size_t)-1) \
-                       return 1; \
-               else \
-                       return 0; \
-       }
-
 /*
- * Generated by MirOS: contrib/code/Snippets/eawparse,v 1.1 2013/05/31 23:27:16 tg Exp $
- * from Unicode 6.2.0
+ * Generated by MirOS: contrib/code/Snippets/eawparse,v 1.2 2013/11/30 13:45:17 tg Exp $
+ * from the Unicode Character Database, Version 7.0.0
  */
 
 static const struct mb_ucsrange mb_ucs_combining[] = {
@@ -55,8 +48,9 @@ static const struct mb_ucsrange mb_ucs_combining[] = {
        { 0x05C1, 0x05C2 },
        { 0x05C4, 0x05C5 },
        { 0x05C7, 0x05C7 },
-       { 0x0600, 0x0604 },
+       { 0x0600, 0x0605 },
        { 0x0610, 0x061A },
+       { 0x061C, 0x061C },
        { 0x064B, 0x065F },
        { 0x0670, 0x0670 },
        { 0x06D6, 0x06DD },
@@ -73,8 +67,7 @@ static const struct mb_ucsrange mb_ucs_combining[] = {
        { 0x0825, 0x0827 },
        { 0x0829, 0x082D },
        { 0x0859, 0x085B },
-       { 0x08E4, 0x08FE },
-       { 0x0900, 0x0902 },
+       { 0x08E4, 0x0902 },
        { 0x093A, 0x093A },
        { 0x093C, 0x093C },
        { 0x0941, 0x0948 },
@@ -110,16 +103,19 @@ static const struct mb_ucsrange mb_ucs_combining[] = {
        { 0x0B82, 0x0B82 },
        { 0x0BC0, 0x0BC0 },
        { 0x0BCD, 0x0BCD },
+       { 0x0C00, 0x0C00 },
        { 0x0C3E, 0x0C40 },
        { 0x0C46, 0x0C48 },
        { 0x0C4A, 0x0C4D },
        { 0x0C55, 0x0C56 },
        { 0x0C62, 0x0C63 },
+       { 0x0C81, 0x0C81 },
        { 0x0CBC, 0x0CBC },
        { 0x0CBF, 0x0CBF },
        { 0x0CC6, 0x0CC6 },
        { 0x0CCC, 0x0CCD },
        { 0x0CE2, 0x0CE3 },
+       { 0x0D01, 0x0D01 },
        { 0x0D41, 0x0D44 },
        { 0x0D4D, 0x0D4D },
        { 0x0D62, 0x0D63 },
@@ -165,13 +161,14 @@ static const struct mb_ucsrange mb_ucs_combining[] = {
        { 0x17C6, 0x17C6 },
        { 0x17C9, 0x17D3 },
        { 0x17DD, 0x17DD },
-       { 0x180B, 0x180D },
+       { 0x180B, 0x180E },
        { 0x18A9, 0x18A9 },
        { 0x1920, 0x1922 },
        { 0x1927, 0x1928 },
        { 0x1932, 0x1932 },
        { 0x1939, 0x193B },
        { 0x1A17, 0x1A18 },
+       { 0x1A1B, 0x1A1B },
        { 0x1A56, 0x1A56 },
        { 0x1A58, 0x1A5E },
        { 0x1A60, 0x1A60 },
@@ -179,6 +176,7 @@ static const struct mb_ucsrange mb_ucs_combining[] = {
        { 0x1A65, 0x1A6C },
        { 0x1A73, 0x1A7C },
        { 0x1A7F, 0x1A7F },
+       { 0x1AB0, 0x1ABE },
        { 0x1B00, 0x1B03 },
        { 0x1B34, 0x1B34 },
        { 0x1B36, 0x1B3A },
@@ -188,7 +186,7 @@ static const struct mb_ucsrange mb_ucs_combining[] = {
        { 0x1B80, 0x1B81 },
        { 0x1BA2, 0x1BA5 },
        { 0x1BA8, 0x1BA9 },
-       { 0x1BAB, 0x1BAB },
+       { 0x1BAB, 0x1BAD },
        { 0x1BE6, 0x1BE6 },
        { 0x1BE8, 0x1BE9 },
        { 0x1BED, 0x1BED },
@@ -200,12 +198,13 @@ static const struct mb_ucsrange mb_ucs_combining[] = {
        { 0x1CE2, 0x1CE8 },
        { 0x1CED, 0x1CED },
        { 0x1CF4, 0x1CF4 },
-       { 0x1DC0, 0x1DE6 },
+       { 0x1CF8, 0x1CF9 },
+       { 0x1DC0, 0x1DF5 },
        { 0x1DFC, 0x1DFF },
        { 0x200B, 0x200F },
        { 0x202A, 0x202E },
        { 0x2060, 0x2064 },
-       { 0x206A, 0x206F },
+       { 0x2066, 0x206F },
        { 0x20D0, 0x20F0 },
        { 0x2CEF, 0x2CF1 },
        { 0x2D7F, 0x2D7F },
@@ -228,11 +227,13 @@ static const struct mb_ucsrange mb_ucs_combining[] = {
        { 0xA9B3, 0xA9B3 },
        { 0xA9B6, 0xA9B9 },
        { 0xA9BC, 0xA9BC },
+       { 0xA9E5, 0xA9E5 },
        { 0xAA29, 0xAA2E },
        { 0xAA31, 0xAA32 },
        { 0xAA35, 0xAA36 },
        { 0xAA43, 0xAA43 },
        { 0xAA4C, 0xAA4C },
+       { 0xAA7C, 0xAA7C },
        { 0xAAB0, 0xAAB0 },
        { 0xAAB2, 0xAAB4 },
        { 0xAAB7, 0xAAB8 },
@@ -245,36 +246,65 @@ static const struct mb_ucsrange mb_ucs_combining[] = {
        { 0xABED, 0xABED },
        { 0xFB1E, 0xFB1E },
        { 0xFE00, 0xFE0F },
-       { 0xFE20, 0xFE26 },
+       { 0xFE20, 0xFE2D },
        { 0xFEFF, 0xFEFF },
        { 0xFFF9, 0xFFFB },
        { 0x101FD, 0x101FD },
+       { 0x102E0, 0x102E0 },
+       { 0x10376, 0x1037A },
        { 0x10A01, 0x10A03 },
        { 0x10A05, 0x10A06 },
        { 0x10A0C, 0x10A0F },
        { 0x10A38, 0x10A3A },
        { 0x10A3F, 0x10A3F },
+       { 0x10AE5, 0x10AE6 },
        { 0x11001, 0x11001 },
        { 0x11038, 0x11046 },
-       { 0x11080, 0x11081 },
+       { 0x1107F, 0x11081 },
        { 0x110B3, 0x110B6 },
        { 0x110B9, 0x110BA },
        { 0x110BD, 0x110BD },
        { 0x11100, 0x11102 },
        { 0x11127, 0x1112B },
        { 0x1112D, 0x11134 },
+       { 0x11173, 0x11173 },
        { 0x11180, 0x11181 },
        { 0x111B6, 0x111BE },
+       { 0x1122F, 0x11231 },
+       { 0x11234, 0x11234 },
+       { 0x11236, 0x11237 },
+       { 0x112DF, 0x112DF },
+       { 0x112E3, 0x112EA },
+       { 0x11301, 0x11301 },
+       { 0x1133C, 0x1133C },
+       { 0x11340, 0x11340 },
+       { 0x11366, 0x1136C },
+       { 0x11370, 0x11374 },
+       { 0x114B3, 0x114B8 },
+       { 0x114BA, 0x114BA },
+       { 0x114BF, 0x114C0 },
+       { 0x114C2, 0x114C3 },
+       { 0x115B2, 0x115B5 },
+       { 0x115BC, 0x115BD },
+       { 0x115BF, 0x115C0 },
+       { 0x11633, 0x1163A },
+       { 0x1163D, 0x1163D },
+       { 0x1163F, 0x11640 },
        { 0x116AB, 0x116AB },
        { 0x116AD, 0x116AD },
        { 0x116B0, 0x116B5 },
        { 0x116B7, 0x116B7 },
+       { 0x16AF0, 0x16AF4 },
+       { 0x16B30, 0x16B36 },
        { 0x16F8F, 0x16F92 },
+       { 0x1BC9D, 0x1BC9E },
+       { 0x1BCA0, 0x1BCA3 },
        { 0x1D167, 0x1D169 },
        { 0x1D173, 0x1D182 },
        { 0x1D185, 0x1D18B },
        { 0x1D1AA, 0x1D1AD },
        { 0x1D242, 0x1D244 },
+       { 0x1E8D0, 0x1E8D6 },
        { 0xE0001, 0xE0001 },
        { 0xE0020, 0xE007F },
        { 0xE0100, 0xE01EF }
@@ -301,9 +331,6 @@ static const struct mb_ucsrange mb_ucs_fullwidth[] = {
        { 0x30000, 0x3FFFD }
 };
 
-/* from mksh */
-#define NELEM(a)       (sizeof(a) / sizeof((a)[0]))
-
 /* simple binary search in ranges, with bounds optimisation */
 static size_t
 mb_ucsbsearch(const struct mb_ucsrange arr[], size_t elems, unsigned int val)
@@ -329,11 +356,12 @@ mb_ucsbsearch(const struct mb_ucsrange arr[], size_t elems, unsigned int val)
 /* Modified for JOE: returns printed width of control and other non-printable
    characters */
 
+/*XXX possibly more */
 static const struct mb_ucsrange joe_ctrlchars[] = {
        { 0x200B, 0x200F },
        { 0x2028, 0x202E },
        { 0x2060, 0x2063 },
-       { 0x206A, 0x206F },
+       { 0x2066, 0x206F },
        { 0xFDD0, 0xFDEF },
        { 0xFEFF, 0xFEFF },
        { 0xFFF9, 0xFFFB },
@@ -342,10 +370,12 @@ static const struct mb_ucsrange joe_ctrlchars[] = {
 
 int joe_wcwidth(int wide, unsigned int ucs)
 {
+#ifndef TEST
        /* If terminal is not UTF-8 or file is not UTF-8: width is 1 */
        /* FIXME */
        if (!locale_map->type || !wide)
                return (1);
+#endif
 
        if ((wide = unictrl(ucs)))
                return (wide);
@@ -360,82 +390,428 @@ int joe_wcwidth(int wide, unsigned int ucs)
        return (1);
 }
 
+/* Macro for generating joe_iswXXX functions */
+
+#define MAKE_ISW(what)                                         \
+       int joe_isw##what(struct charmap *foo, int c)           \
+       {                                                       \
+               return ((mb_ucsbsearch(data_wctype_##what,      \
+                   NELEM(data_wctype_##what),                  \
+                   c) != (size_t)-1) ? 1 : 0);                 \
+       }
+
 /* MAKE_ISW functions... */
 
-static struct mb_ucsrange data_wctype_upper[]=
-{
+/* From: contrib/hosted/tg/jupptables,v 1.1 2013/11/30 23:58:29 tg Exp $ */
+
+static const struct mb_ucsrange data_wctype_upper[] = {
        { 0x0041, 0x005A },
        { 0x00C0, 0x00D6 },
        { 0x00D8, 0x00DE },
-       { 0x0100, 0x0136 },
-       { 0x0139, 0x0147 },
-       { 0x014A, 0x0178 },
-       { 0x0179, 0x017D },
-       { 0x0181, 0x0181 },
-       { 0x0182, 0x0186 },
-       { 0x0187, 0x0187 },
+       { 0x0100, 0x0100 },
+       { 0x0102, 0x0102 },
+       { 0x0104, 0x0104 },
+       { 0x0106, 0x0106 },
+       { 0x0108, 0x0108 },
+       { 0x010A, 0x010A },
+       { 0x010C, 0x010C },
+       { 0x010E, 0x010E },
+       { 0x0110, 0x0110 },
+       { 0x0112, 0x0112 },
+       { 0x0114, 0x0114 },
+       { 0x0116, 0x0116 },
+       { 0x0118, 0x0118 },
+       { 0x011A, 0x011A },
+       { 0x011C, 0x011C },
+       { 0x011E, 0x011E },
+       { 0x0120, 0x0120 },
+       { 0x0122, 0x0122 },
+       { 0x0124, 0x0124 },
+       { 0x0126, 0x0126 },
+       { 0x0128, 0x0128 },
+       { 0x012A, 0x012A },
+       { 0x012C, 0x012C },
+       { 0x012E, 0x012E },
+       { 0x0130, 0x0130 },
+       { 0x0132, 0x0132 },
+       { 0x0134, 0x0134 },
+       { 0x0136, 0x0136 },
+       { 0x0139, 0x0139 },
+       { 0x013B, 0x013B },
+       { 0x013D, 0x013D },
+       { 0x013F, 0x013F },
+       { 0x0141, 0x0141 },
+       { 0x0143, 0x0143 },
+       { 0x0145, 0x0145 },
+       { 0x0147, 0x0147 },
+       { 0x014A, 0x014A },
+       { 0x014C, 0x014C },
+       { 0x014E, 0x014E },
+       { 0x0150, 0x0150 },
+       { 0x0152, 0x0152 },
+       { 0x0154, 0x0154 },
+       { 0x0156, 0x0156 },
+       { 0x0158, 0x0158 },
+       { 0x015A, 0x015A },
+       { 0x015C, 0x015C },
+       { 0x015E, 0x015E },
+       { 0x0160, 0x0160 },
+       { 0x0162, 0x0162 },
+       { 0x0164, 0x0164 },
+       { 0x0166, 0x0166 },
+       { 0x0168, 0x0168 },
+       { 0x016A, 0x016A },
+       { 0x016C, 0x016C },
+       { 0x016E, 0x016E },
+       { 0x0170, 0x0170 },
+       { 0x0172, 0x0172 },
+       { 0x0174, 0x0174 },
+       { 0x0176, 0x0176 },
+       { 0x0178, 0x0179 },
+       { 0x017B, 0x017B },
+       { 0x017D, 0x017D },
+       { 0x0181, 0x0182 },
+       { 0x0184, 0x0184 },
+       { 0x0186, 0x0187 },
        { 0x0189, 0x018B },
        { 0x018E, 0x0191 },
-       { 0x0193, 0x0193 },
-       { 0x0194, 0x0194 },
+       { 0x0193, 0x0194 },
        { 0x0196, 0x0198 },
-       { 0x019C, 0x019C },
-       { 0x019D, 0x019D },
-       { 0x019F, 0x019F },
-       { 0x01A0, 0x01A4 },
-       { 0x01A6, 0x01A6 },
-       { 0x01A7, 0x01A7 },
+       { 0x019C, 0x019D },
+       { 0x019F, 0x01A0 },
+       { 0x01A2, 0x01A2 },
+       { 0x01A4, 0x01A4 },
+       { 0x01A6, 0x01A7 },
        { 0x01A9, 0x01A9 },
        { 0x01AC, 0x01AC },
-       { 0x01AE, 0x01AE },
-       { 0x01AF, 0x01AF },
+       { 0x01AE, 0x01AF },
        { 0x01B1, 0x01B3 },
        { 0x01B5, 0x01B5 },
-       { 0x01B7, 0x01B7 },
-       { 0x01B8, 0x01B8 },
+       { 0x01B7, 0x01B8 },
        { 0x01BC, 0x01BC },
-       { 0x01C4, 0x01C4 },
-       { 0x01C5, 0x01C5 },
-       { 0x01C7, 0x01C7 },
-       { 0x01C8, 0x01C8 },
-       { 0x01CA, 0x01CA },
-       { 0x01CB, 0x01CB },
-       { 0x01CD, 0x01DB },
-       { 0x01DE, 0x01EE },
-       { 0x01F1, 0x01F1 },
-       { 0x01F2, 0x01F2 },
+       { 0x01C4, 0x01C5 },
+       { 0x01C7, 0x01C8 },
+       { 0x01CA, 0x01CB },
+       { 0x01CD, 0x01CD },
+       { 0x01CF, 0x01CF },
+       { 0x01D1, 0x01D1 },
+       { 0x01D3, 0x01D3 },
+       { 0x01D5, 0x01D5 },
+       { 0x01D7, 0x01D7 },
+       { 0x01D9, 0x01D9 },
+       { 0x01DB, 0x01DB },
+       { 0x01DE, 0x01DE },
+       { 0x01E0, 0x01E0 },
+       { 0x01E2, 0x01E2 },
+       { 0x01E4, 0x01E4 },
+       { 0x01E6, 0x01E6 },
+       { 0x01E8, 0x01E8 },
+       { 0x01EA, 0x01EA },
+       { 0x01EC, 0x01EC },
+       { 0x01EE, 0x01EE },
+       { 0x01F1, 0x01F2 },
        { 0x01F4, 0x01F4 },
        { 0x01F6, 0x01F8 },
-       { 0x01FA, 0x01FE },
-       { 0x0200, 0x0232 },
+       { 0x01FA, 0x01FA },
+       { 0x01FC, 0x01FC },
+       { 0x01FE, 0x01FE },
+       { 0x0200, 0x0200 },
+       { 0x0202, 0x0202 },
+       { 0x0204, 0x0204 },
+       { 0x0206, 0x0206 },
+       { 0x0208, 0x0208 },
+       { 0x020A, 0x020A },
+       { 0x020C, 0x020C },
+       { 0x020E, 0x020E },
+       { 0x0210, 0x0210 },
+       { 0x0212, 0x0212 },
+       { 0x0214, 0x0214 },
+       { 0x0216, 0x0216 },
+       { 0x0218, 0x0218 },
+       { 0x021A, 0x021A },
+       { 0x021C, 0x021C },
+       { 0x021E, 0x021E },
+       { 0x0220, 0x0220 },
+       { 0x0222, 0x0222 },
+       { 0x0224, 0x0224 },
+       { 0x0226, 0x0226 },
+       { 0x0228, 0x0228 },
+       { 0x022A, 0x022A },
+       { 0x022C, 0x022C },
+       { 0x022E, 0x022E },
+       { 0x0230, 0x0230 },
+       { 0x0232, 0x0232 },
+       { 0x023A, 0x023B },
+       { 0x023D, 0x023E },
+       { 0x0241, 0x0241 },
+       { 0x0243, 0x0246 },
+       { 0x0248, 0x0248 },
+       { 0x024A, 0x024A },
+       { 0x024C, 0x024C },
+       { 0x024E, 0x024E },
+       { 0x0370, 0x0370 },
+       { 0x0372, 0x0372 },
+       { 0x0376, 0x0376 },
+       { 0x037F, 0x037F },
        { 0x0386, 0x0386 },
        { 0x0388, 0x038A },
        { 0x038C, 0x038C },
-       { 0x038E, 0x038E },
-       { 0x038F, 0x038F },
+       { 0x038E, 0x038F },
        { 0x0391, 0x03A1 },
        { 0x03A3, 0x03AB },
-       { 0x03D8, 0x03DE },
-       { 0x03E0, 0x03EE },
+       { 0x03CF, 0x03CF },
+       { 0x03D8, 0x03D8 },
+       { 0x03DA, 0x03DA },
+       { 0x03DC, 0x03DC },
+       { 0x03DE, 0x03DE },
+       { 0x03E0, 0x03E0 },
+       { 0x03E2, 0x03E2 },
+       { 0x03E4, 0x03E4 },
+       { 0x03E6, 0x03E6 },
+       { 0x03E8, 0x03E8 },
+       { 0x03EA, 0x03EA },
+       { 0x03EC, 0x03EC },
+       { 0x03EE, 0x03EE },
        { 0x03F4, 0x03F4 },
-       { 0x0400, 0x042F },
-       { 0x0460, 0x047E },
+       { 0x03F7, 0x03F7 },
+       { 0x03F9, 0x03FA },
+       { 0x03FD, 0x042F },
+       { 0x0460, 0x0460 },
+       { 0x0462, 0x0462 },
+       { 0x0464, 0x0464 },
+       { 0x0466, 0x0466 },
+       { 0x0468, 0x0468 },
+       { 0x046A, 0x046A },
+       { 0x046C, 0x046C },
+       { 0x046E, 0x046E },
+       { 0x0470, 0x0470 },
+       { 0x0472, 0x0472 },
+       { 0x0474, 0x0474 },
+       { 0x0476, 0x0476 },
+       { 0x0478, 0x0478 },
+       { 0x047A, 0x047A },
+       { 0x047C, 0x047C },
+       { 0x047E, 0x047E },
        { 0x0480, 0x0480 },
-       { 0x048A, 0x04BE },
-       { 0x04C1, 0x04CD },
-       { 0x04D0, 0x04F4 },
+       { 0x048A, 0x048A },
+       { 0x048C, 0x048C },
+       { 0x048E, 0x048E },
+       { 0x0490, 0x0490 },
+       { 0x0492, 0x0492 },
+       { 0x0494, 0x0494 },
+       { 0x0496, 0x0496 },
+       { 0x0498, 0x0498 },
+       { 0x049A, 0x049A },
+       { 0x049C, 0x049C },
+       { 0x049E, 0x049E },
+       { 0x04A0, 0x04A0 },
+       { 0x04A2, 0x04A2 },
+       { 0x04A4, 0x04A4 },
+       { 0x04A6, 0x04A6 },
+       { 0x04A8, 0x04A8 },
+       { 0x04AA, 0x04AA },
+       { 0x04AC, 0x04AC },
+       { 0x04AE, 0x04AE },
+       { 0x04B0, 0x04B0 },
+       { 0x04B2, 0x04B2 },
+       { 0x04B4, 0x04B4 },
+       { 0x04B6, 0x04B6 },
+       { 0x04B8, 0x04B8 },
+       { 0x04BA, 0x04BA },
+       { 0x04BC, 0x04BC },
+       { 0x04BE, 0x04BE },
+       { 0x04C0, 0x04C1 },
+       { 0x04C3, 0x04C3 },
+       { 0x04C5, 0x04C5 },
+       { 0x04C7, 0x04C7 },
+       { 0x04C9, 0x04C9 },
+       { 0x04CB, 0x04CB },
+       { 0x04CD, 0x04CD },
+       { 0x04D0, 0x04D0 },
+       { 0x04D2, 0x04D2 },
+       { 0x04D4, 0x04D4 },
+       { 0x04D6, 0x04D6 },
+       { 0x04D8, 0x04D8 },
+       { 0x04DA, 0x04DA },
+       { 0x04DC, 0x04DC },
+       { 0x04DE, 0x04DE },
+       { 0x04E0, 0x04E0 },
+       { 0x04E2, 0x04E2 },
+       { 0x04E4, 0x04E4 },
+       { 0x04E6, 0x04E6 },
+       { 0x04E8, 0x04E8 },
+       { 0x04EA, 0x04EA },
+       { 0x04EC, 0x04EC },
+       { 0x04EE, 0x04EE },
+       { 0x04F0, 0x04F0 },
+       { 0x04F2, 0x04F2 },
+       { 0x04F4, 0x04F4 },
+       { 0x04F6, 0x04F6 },
        { 0x04F8, 0x04F8 },
-       { 0x0500, 0x050E },
+       { 0x04FA, 0x04FA },
+       { 0x04FC, 0x04FC },
+       { 0x04FE, 0x04FE },
+       { 0x0500, 0x0500 },
+       { 0x0502, 0x0502 },
+       { 0x0504, 0x0504 },
+       { 0x0506, 0x0506 },
+       { 0x0508, 0x0508 },
+       { 0x050A, 0x050A },
+       { 0x050C, 0x050C },
+       { 0x050E, 0x050E },
+       { 0x0510, 0x0510 },
+       { 0x0512, 0x0512 },
+       { 0x0514, 0x0514 },
+       { 0x0516, 0x0516 },
+       { 0x0518, 0x0518 },
+       { 0x051A, 0x051A },
+       { 0x051C, 0x051C },
+       { 0x051E, 0x051E },
+       { 0x0520, 0x0520 },
+       { 0x0522, 0x0522 },
+       { 0x0524, 0x0524 },
+       { 0x0526, 0x0526 },
+       { 0x0528, 0x0528 },
+       { 0x052A, 0x052A },
+       { 0x052C, 0x052C },
+       { 0x052E, 0x052E },
        { 0x0531, 0x0556 },
-       { 0x1E00, 0x1E7E },
-       { 0x1E80, 0x1E94 },
-       { 0x1EA0, 0x1EF8 },
+       { 0x10A0, 0x10C5 },
+       { 0x10C7, 0x10C7 },
+       { 0x10CD, 0x10CD },
+       { 0x1E00, 0x1E00 },
+       { 0x1E02, 0x1E02 },
+       { 0x1E04, 0x1E04 },
+       { 0x1E06, 0x1E06 },
+       { 0x1E08, 0x1E08 },
+       { 0x1E0A, 0x1E0A },
+       { 0x1E0C, 0x1E0C },
+       { 0x1E0E, 0x1E0E },
+       { 0x1E10, 0x1E10 },
+       { 0x1E12, 0x1E12 },
+       { 0x1E14, 0x1E14 },
+       { 0x1E16, 0x1E16 },
+       { 0x1E18, 0x1E18 },
+       { 0x1E1A, 0x1E1A },
+       { 0x1E1C, 0x1E1C },
+       { 0x1E1E, 0x1E1E },
+       { 0x1E20, 0x1E20 },
+       { 0x1E22, 0x1E22 },
+       { 0x1E24, 0x1E24 },
+       { 0x1E26, 0x1E26 },
+       { 0x1E28, 0x1E28 },
+       { 0x1E2A, 0x1E2A },
+       { 0x1E2C, 0x1E2C },
+       { 0x1E2E, 0x1E2E },
+       { 0x1E30, 0x1E30 },
+       { 0x1E32, 0x1E32 },
+       { 0x1E34, 0x1E34 },
+       { 0x1E36, 0x1E36 },
+       { 0x1E38, 0x1E38 },
+       { 0x1E3A, 0x1E3A },
+       { 0x1E3C, 0x1E3C },
+       { 0x1E3E, 0x1E3E },
+       { 0x1E40, 0x1E40 },
+       { 0x1E42, 0x1E42 },
+       { 0x1E44, 0x1E44 },
+       { 0x1E46, 0x1E46 },
+       { 0x1E48, 0x1E48 },
+       { 0x1E4A, 0x1E4A },
+       { 0x1E4C, 0x1E4C },
+       { 0x1E4E, 0x1E4E },
+       { 0x1E50, 0x1E50 },
+       { 0x1E52, 0x1E52 },
+       { 0x1E54, 0x1E54 },
+       { 0x1E56, 0x1E56 },
+       { 0x1E58, 0x1E58 },
+       { 0x1E5A, 0x1E5A },
+       { 0x1E5C, 0x1E5C },
+       { 0x1E5E, 0x1E5E },
+       { 0x1E60, 0x1E60 },
+       { 0x1E62, 0x1E62 },
+       { 0x1E64, 0x1E64 },
+       { 0x1E66, 0x1E66 },
+       { 0x1E68, 0x1E68 },
+       { 0x1E6A, 0x1E6A },
+       { 0x1E6C, 0x1E6C },
+       { 0x1E6E, 0x1E6E },
+       { 0x1E70, 0x1E70 },
+       { 0x1E72, 0x1E72 },
+       { 0x1E74, 0x1E74 },
+       { 0x1E76, 0x1E76 },
+       { 0x1E78, 0x1E78 },
+       { 0x1E7A, 0x1E7A },
+       { 0x1E7C, 0x1E7C },
+       { 0x1E7E, 0x1E7E },
+       { 0x1E80, 0x1E80 },
+       { 0x1E82, 0x1E82 },
+       { 0x1E84, 0x1E84 },
+       { 0x1E86, 0x1E86 },
+       { 0x1E88, 0x1E88 },
+       { 0x1E8A, 0x1E8A },
+       { 0x1E8C, 0x1E8C },
+       { 0x1E8E, 0x1E8E },
+       { 0x1E90, 0x1E90 },
+       { 0x1E92, 0x1E92 },
+       { 0x1E94, 0x1E94 },
+       { 0x1E9E, 0x1E9E },
+       { 0x1EA0, 0x1EA0 },
+       { 0x1EA2, 0x1EA2 },
+       { 0x1EA4, 0x1EA4 },
+       { 0x1EA6, 0x1EA6 },
+       { 0x1EA8, 0x1EA8 },
+       { 0x1EAA, 0x1EAA },
+       { 0x1EAC, 0x1EAC },
+       { 0x1EAE, 0x1EAE },
+       { 0x1EB0, 0x1EB0 },
+       { 0x1EB2, 0x1EB2 },
+       { 0x1EB4, 0x1EB4 },
+       { 0x1EB6, 0x1EB6 },
+       { 0x1EB8, 0x1EB8 },
+       { 0x1EBA, 0x1EBA },
+       { 0x1EBC, 0x1EBC },
+       { 0x1EBE, 0x1EBE },
+       { 0x1EC0, 0x1EC0 },
+       { 0x1EC2, 0x1EC2 },
+       { 0x1EC4, 0x1EC4 },
+       { 0x1EC6, 0x1EC6 },
+       { 0x1EC8, 0x1EC8 },
+       { 0x1ECA, 0x1ECA },
+       { 0x1ECC, 0x1ECC },
+       { 0x1ECE, 0x1ECE },
+       { 0x1ED0, 0x1ED0 },
+       { 0x1ED2, 0x1ED2 },
+       { 0x1ED4, 0x1ED4 },
+       { 0x1ED6, 0x1ED6 },
+       { 0x1ED8, 0x1ED8 },
+       { 0x1EDA, 0x1EDA },
+       { 0x1EDC, 0x1EDC },
+       { 0x1EDE, 0x1EDE },
+       { 0x1EE0, 0x1EE0 },
+       { 0x1EE2, 0x1EE2 },
+       { 0x1EE4, 0x1EE4 },
+       { 0x1EE6, 0x1EE6 },
+       { 0x1EE8, 0x1EE8 },
+       { 0x1EEA, 0x1EEA },
+       { 0x1EEC, 0x1EEC },
+       { 0x1EEE, 0x1EEE },
+       { 0x1EF0, 0x1EF0 },
+       { 0x1EF2, 0x1EF2 },
+       { 0x1EF4, 0x1EF4 },
+       { 0x1EF6, 0x1EF6 },
+       { 0x1EF8, 0x1EF8 },
+       { 0x1EFA, 0x1EFA },
+       { 0x1EFC, 0x1EFC },
+       { 0x1EFE, 0x1EFE },
        { 0x1F08, 0x1F0F },
        { 0x1F18, 0x1F1D },
        { 0x1F28, 0x1F2F },
        { 0x1F38, 0x1F3F },
        { 0x1F48, 0x1F4D },
-       { 0x1F59, 0x1F5F },
+       { 0x1F59, 0x1F59 },
+       { 0x1F5B, 0x1F5B },
+       { 0x1F5D, 0x1F5D },
+       { 0x1F5F, 0x1F5F },
        { 0x1F68, 0x1F6F },
        { 0x1F88, 0x1F8F },
        { 0x1F98, 0x1F9F },
@@ -447,32 +823,251 @@ static struct mb_ucsrange data_wctype_upper[]=
        { 0x1FF8, 0x1FFC },
        { 0x2126, 0x2126 },
        { 0x212A, 0x212B },
+       { 0x2132, 0x2132 },
        { 0x2160, 0x216F },
+       { 0x2183, 0x2183 },
        { 0x24B6, 0x24CF },
+       { 0x2C00, 0x2C2E },
+       { 0x2C60, 0x2C60 },
+       { 0x2C62, 0x2C64 },
+       { 0x2C67, 0x2C67 },
+       { 0x2C69, 0x2C69 },
+       { 0x2C6B, 0x2C6B },
+       { 0x2C6D, 0x2C70 },
+       { 0x2C72, 0x2C72 },
+       { 0x2C75, 0x2C75 },
+       { 0x2C7E, 0x2C80 },
+       { 0x2C82, 0x2C82 },
+       { 0x2C84, 0x2C84 },
+       { 0x2C86, 0x2C86 },
+       { 0x2C88, 0x2C88 },
+       { 0x2C8A, 0x2C8A },
+       { 0x2C8C, 0x2C8C },
+       { 0x2C8E, 0x2C8E },
+       { 0x2C90, 0x2C90 },
+       { 0x2C92, 0x2C92 },
+       { 0x2C94, 0x2C94 },
+       { 0x2C96, 0x2C96 },
+       { 0x2C98, 0x2C98 },
+       { 0x2C9A, 0x2C9A },
+       { 0x2C9C, 0x2C9C },
+       { 0x2C9E, 0x2C9E },
+       { 0x2CA0, 0x2CA0 },
+       { 0x2CA2, 0x2CA2 },
+       { 0x2CA4, 0x2CA4 },
+       { 0x2CA6, 0x2CA6 },
+       { 0x2CA8, 0x2CA8 },
+       { 0x2CAA, 0x2CAA },
+       { 0x2CAC, 0x2CAC },
+       { 0x2CAE, 0x2CAE },
+       { 0x2CB0, 0x2CB0 },
+       { 0x2CB2, 0x2CB2 },
+       { 0x2CB4, 0x2CB4 },
+       { 0x2CB6, 0x2CB6 },
+       { 0x2CB8, 0x2CB8 },
+       { 0x2CBA, 0x2CBA },
+       { 0x2CBC, 0x2CBC },
+       { 0x2CBE, 0x2CBE },
+       { 0x2CC0, 0x2CC0 },
+       { 0x2CC2, 0x2CC2 },
+       { 0x2CC4, 0x2CC4 },
+       { 0x2CC6, 0x2CC6 },
+       { 0x2CC8, 0x2CC8 },
+       { 0x2CCA, 0x2CCA },
+       { 0x2CCC, 0x2CCC },
+       { 0x2CCE, 0x2CCE },
+       { 0x2CD0, 0x2CD0 },
+       { 0x2CD2, 0x2CD2 },
+       { 0x2CD4, 0x2CD4 },
+       { 0x2CD6, 0x2CD6 },
+       { 0x2CD8, 0x2CD8 },
+       { 0x2CDA, 0x2CDA },
+       { 0x2CDC, 0x2CDC },
+       { 0x2CDE, 0x2CDE },
+       { 0x2CE0, 0x2CE0 },
+       { 0x2CE2, 0x2CE2 },
+       { 0x2CEB, 0x2CEB },
+       { 0x2CED, 0x2CED },
+       { 0x2CF2, 0x2CF2 },
+       { 0xA640, 0xA640 },
+       { 0xA642, 0xA642 },
+       { 0xA644, 0xA644 },
+       { 0xA646, 0xA646 },
+       { 0xA648, 0xA648 },
+       { 0xA64A, 0xA64A },
+       { 0xA64C, 0xA64C },
+       { 0xA64E, 0xA64E },
+       { 0xA650, 0xA650 },
+       { 0xA652, 0xA652 },
+       { 0xA654, 0xA654 },
+       { 0xA656, 0xA656 },
+       { 0xA658, 0xA658 },
+       { 0xA65A, 0xA65A },
+       { 0xA65C, 0xA65C },
+       { 0xA65E, 0xA65E },
+       { 0xA660, 0xA660 },
+       { 0xA662, 0xA662 },
+       { 0xA664, 0xA664 },
+       { 0xA666, 0xA666 },
+       { 0xA668, 0xA668 },
+       { 0xA66A, 0xA66A },
+       { 0xA66C, 0xA66C },
+       { 0xA680, 0xA680 },
+       { 0xA682, 0xA682 },
+       { 0xA684, 0xA684 },
+       { 0xA686, 0xA686 },
+       { 0xA688, 0xA688 },
+       { 0xA68A, 0xA68A },
+       { 0xA68C, 0xA68C },
+       { 0xA68E, 0xA68E },
+       { 0xA690, 0xA690 },
+       { 0xA692, 0xA692 },
+       { 0xA694, 0xA694 },
+       { 0xA696, 0xA696 },
+       { 0xA698, 0xA698 },
+       { 0xA69A, 0xA69A },
+       { 0xA722, 0xA722 },
+       { 0xA724, 0xA724 },
+       { 0xA726, 0xA726 },
+       { 0xA728, 0xA728 },
+       { 0xA72A, 0xA72A },
+       { 0xA72C, 0xA72C },
+       { 0xA72E, 0xA72E },
+       { 0xA732, 0xA732 },
+       { 0xA734, 0xA734 },
+       { 0xA736, 0xA736 },
+       { 0xA738, 0xA738 },
+       { 0xA73A, 0xA73A },
+       { 0xA73C, 0xA73C },
+       { 0xA73E, 0xA73E },
+       { 0xA740, 0xA740 },
+       { 0xA742, 0xA742 },
+       { 0xA744, 0xA744 },
+       { 0xA746, 0xA746 },
+       { 0xA748, 0xA748 },
+       { 0xA74A, 0xA74A },
+       { 0xA74C, 0xA74C },
+       { 0xA74E, 0xA74E },
+       { 0xA750, 0xA750 },
+       { 0xA752, 0xA752 },
+       { 0xA754, 0xA754 },
+       { 0xA756, 0xA756 },
+       { 0xA758, 0xA758 },
+       { 0xA75A, 0xA75A },
+       { 0xA75C, 0xA75C },
+       { 0xA75E, 0xA75E },
+       { 0xA760, 0xA760 },
+       { 0xA762, 0xA762 },
+       { 0xA764, 0xA764 },
+       { 0xA766, 0xA766 },
+       { 0xA768, 0xA768 },
+       { 0xA76A, 0xA76A },
+       { 0xA76C, 0xA76C },
+       { 0xA76E, 0xA76E },
+       { 0xA779, 0xA779 },
+       { 0xA77B, 0xA77B },
+       { 0xA77D, 0xA77E },
+       { 0xA780, 0xA780 },
+       { 0xA782, 0xA782 },
+       { 0xA784, 0xA784 },
+       { 0xA786, 0xA786 },
+       { 0xA78B, 0xA78B },
+       { 0xA78D, 0xA78D },
+       { 0xA790, 0xA790 },
+       { 0xA792, 0xA792 },
+       { 0xA796, 0xA796 },
+       { 0xA798, 0xA798 },
+       { 0xA79A, 0xA79A },
+       { 0xA79C, 0xA79C },
+       { 0xA79E, 0xA79E },
+       { 0xA7A0, 0xA7A0 },
+       { 0xA7A2, 0xA7A2 },
+       { 0xA7A4, 0xA7A4 },
+       { 0xA7A6, 0xA7A6 },
+       { 0xA7A8, 0xA7A8 },
+       { 0xA7AA, 0xA7AD },
+       { 0xA7B0, 0xA7B1 },
        { 0xFF21, 0xFF3A },
-       { 0x00010400, 0x00010425 }
+       { 0x10400, 0x10427 },
+       { 0x118A0, 0x118BF }
 };
 
 MAKE_ISW(upper)
 
-static struct mb_ucsrange data_wctype_lower[]=
-{
+static const struct mb_ucsrange data_wctype_lower[] = {
        { 0x0061, 0x007A },
        { 0x00B5, 0x00B5 },
-       { 0x00DF, 0x00F6 },
+       { 0x00E0, 0x00F6 },
        { 0x00F8, 0x00FF },
-       { 0x0101, 0x0137 },
-       { 0x013A, 0x0148 },
-       { 0x014B, 0x0177 },
-       { 0x017A, 0x017E },
-       { 0x017F, 0x017F },
+       { 0x0101, 0x0101 },
+       { 0x0103, 0x0103 },
+       { 0x0105, 0x0105 },
+       { 0x0107, 0x0107 },
+       { 0x0109, 0x0109 },
+       { 0x010B, 0x010B },
+       { 0x010D, 0x010D },
+       { 0x010F, 0x010F },
+       { 0x0111, 0x0111 },
+       { 0x0113, 0x0113 },
+       { 0x0115, 0x0115 },
+       { 0x0117, 0x0117 },
+       { 0x0119, 0x0119 },
+       { 0x011B, 0x011B },
+       { 0x011D, 0x011D },
+       { 0x011F, 0x011F },
+       { 0x0121, 0x0121 },
+       { 0x0123, 0x0123 },
+       { 0x0125, 0x0125 },
+       { 0x0127, 0x0127 },
+       { 0x0129, 0x0129 },
+       { 0x012B, 0x012B },
+       { 0x012D, 0x012D },
+       { 0x012F, 0x012F },
+       { 0x0131, 0x0131 },
+       { 0x0133, 0x0133 },
+       { 0x0135, 0x0135 },
+       { 0x0137, 0x0137 },
+       { 0x013A, 0x013A },
+       { 0x013C, 0x013C },
+       { 0x013E, 0x013E },
+       { 0x0140, 0x0140 },
+       { 0x0142, 0x0142 },
+       { 0x0144, 0x0144 },
+       { 0x0146, 0x0146 },
+       { 0x0148, 0x0148 },
+       { 0x014B, 0x014B },
+       { 0x014D, 0x014D },
+       { 0x014F, 0x014F },
+       { 0x0151, 0x0151 },
+       { 0x0153, 0x0153 },
+       { 0x0155, 0x0155 },
+       { 0x0157, 0x0157 },
+       { 0x0159, 0x0159 },
+       { 0x015B, 0x015B },
+       { 0x015D, 0x015D },
+       { 0x015F, 0x015F },
+       { 0x0161, 0x0161 },
+       { 0x0163, 0x0163 },
+       { 0x0165, 0x0165 },
+       { 0x0167, 0x0167 },
+       { 0x0169, 0x0169 },
+       { 0x016B, 0x016B },
+       { 0x016D, 0x016D },
+       { 0x016F, 0x016F },
+       { 0x0171, 0x0171 },
+       { 0x0173, 0x0173 },
+       { 0x0175, 0x0175 },
+       { 0x0177, 0x0177 },
+       { 0x017A, 0x017A },
+       { 0x017C, 0x017C },
+       { 0x017E, 0x0180 },
        { 0x0183, 0x0183 },
        { 0x0185, 0x0185 },
        { 0x0188, 0x0188 },
        { 0x018C, 0x018C },
        { 0x0192, 0x0192 },
        { 0x0195, 0x0195 },
-       { 0x0199, 0x0199 },
+       { 0x0199, 0x019A },
        { 0x019E, 0x019E },
        { 0x01A1, 0x01A1 },
        { 0x01A3, 0x01A3 },
@@ -485,245 +1080,664 @@ static struct mb_ucsrange data_wctype_lower[]=
        { 0x01B9, 0x01B9 },
        { 0x01BD, 0x01BD },
        { 0x01BF, 0x01BF },
-       { 0x01C5, 0x01C5 },
        { 0x01C6, 0x01C6 },
-       { 0x01C8, 0x01C8 },
        { 0x01C9, 0x01C9 },
-       { 0x01CB, 0x01CB },
-       { 0x01CC, 0x01DC },
-       { 0x01DD, 0x01EF },
-       { 0x01F2, 0x01F2 },
+       { 0x01CC, 0x01CC },
+       { 0x01CE, 0x01CE },
+       { 0x01D0, 0x01D0 },
+       { 0x01D2, 0x01D2 },
+       { 0x01D4, 0x01D4 },
+       { 0x01D6, 0x01D6 },
+       { 0x01D8, 0x01D8 },
+       { 0x01DA, 0x01DA },
+       { 0x01DC, 0x01DD },
+       { 0x01DF, 0x01DF },
+       { 0x01E1, 0x01E1 },
+       { 0x01E3, 0x01E3 },
+       { 0x01E5, 0x01E5 },
+       { 0x01E7, 0x01E7 },
+       { 0x01E9, 0x01E9 },
+       { 0x01EB, 0x01EB },
+       { 0x01ED, 0x01ED },
+       { 0x01EF, 0x01EF },
        { 0x01F3, 0x01F3 },
        { 0x01F5, 0x01F5 },
-       { 0x01F9, 0x01FF },
-       { 0x0201, 0x021F },
-       { 0x0223, 0x0233 },
-       { 0x0253, 0x0253 },
-       { 0x0254, 0x0254 },
-       { 0x0256, 0x0256 },
-       { 0x0257, 0x0257 },
+       { 0x01F9, 0x01F9 },
+       { 0x01FB, 0x01FB },
+       { 0x01FD, 0x01FD },
+       { 0x01FF, 0x01FF },
+       { 0x0201, 0x0201 },
+       { 0x0203, 0x0203 },
+       { 0x0205, 0x0205 },
+       { 0x0207, 0x0207 },
+       { 0x0209, 0x0209 },
+       { 0x020B, 0x020B },
+       { 0x020D, 0x020D },
+       { 0x020F, 0x020F },
+       { 0x0211, 0x0211 },
+       { 0x0213, 0x0213 },
+       { 0x0215, 0x0215 },
+       { 0x0217, 0x0217 },
+       { 0x0219, 0x0219 },
+       { 0x021B, 0x021B },
+       { 0x021D, 0x021D },
+       { 0x021F, 0x021F },
+       { 0x0223, 0x0223 },
+       { 0x0225, 0x0225 },
+       { 0x0227, 0x0227 },
+       { 0x0229, 0x0229 },
+       { 0x022B, 0x022B },
+       { 0x022D, 0x022D },
+       { 0x022F, 0x022F },
+       { 0x0231, 0x0231 },
+       { 0x0233, 0x0233 },
+       { 0x023C, 0x023C },
+       { 0x023F, 0x0240 },
+       { 0x0242, 0x0242 },
+       { 0x0247, 0x0247 },
+       { 0x0249, 0x0249 },
+       { 0x024B, 0x024B },
+       { 0x024D, 0x024D },
+       { 0x024F, 0x0254 },
+       { 0x0256, 0x0257 },
        { 0x0259, 0x0259 },
-       { 0x025B, 0x025B },
-       { 0x0260, 0x0260 },
+       { 0x025B, 0x025C },
+       { 0x0260, 0x0261 },
        { 0x0263, 0x0263 },
-       { 0x0268, 0x0268 },
-       { 0x0269, 0x0269 },
+       { 0x0265, 0x0266 },
+       { 0x0268, 0x0269 },
+       { 0x026B, 0x026C },
        { 0x026F, 0x026F },
-       { 0x0272, 0x0272 },
+       { 0x0271, 0x0272 },
        { 0x0275, 0x0275 },
+       { 0x027D, 0x027D },
        { 0x0280, 0x0280 },
        { 0x0283, 0x0283 },
-       { 0x0288, 0x0288 },
-       { 0x028A, 0x028A },
-       { 0x028B, 0x028B },
+       { 0x0287, 0x028C },
        { 0x0292, 0x0292 },
+       { 0x029E, 0x029E },
        { 0x0345, 0x0345 },
+       { 0x0371, 0x0371 },
+       { 0x0373, 0x0373 },
+       { 0x0377, 0x0377 },
+       { 0x037B, 0x037D },
        { 0x03AC, 0x03AF },
        { 0x03B1, 0x03CE },
-       { 0x03D0, 0x03D0 },
-       { 0x03D1, 0x03D1 },
-       { 0x03D5, 0x03D5 },
-       { 0x03D6, 0x03D6 },
-       { 0x03D9, 0x03EF },
-       { 0x03F0, 0x03F2 },
+       { 0x03D0, 0x03D1 },
+       { 0x03D5, 0x03D7 },
+       { 0x03D9, 0x03D9 },
+       { 0x03DB, 0x03DB },
+       { 0x03DD, 0x03DD },
+       { 0x03DF, 0x03DF },
+       { 0x03E1, 0x03E1 },
+       { 0x03E3, 0x03E3 },
+       { 0x03E5, 0x03E5 },
+       { 0x03E7, 0x03E7 },
+       { 0x03E9, 0x03E9 },
+       { 0x03EB, 0x03EB },
+       { 0x03ED, 0x03ED },
+       { 0x03EF, 0x03F3 },
        { 0x03F5, 0x03F5 },
+       { 0x03F8, 0x03F8 },
+       { 0x03FB, 0x03FB },
        { 0x0430, 0x045F },
-       { 0x0461, 0x047F },
+       { 0x0461, 0x0461 },
+       { 0x0463, 0x0463 },
+       { 0x0465, 0x0465 },
+       { 0x0467, 0x0467 },
+       { 0x0469, 0x0469 },
+       { 0x046B, 0x046B },
+       { 0x046D, 0x046D },
+       { 0x046F, 0x046F },
+       { 0x0471, 0x0471 },
+       { 0x0473, 0x0473 },
+       { 0x0475, 0x0475 },
+       { 0x0477, 0x0477 },
+       { 0x0479, 0x0479 },
+       { 0x047B, 0x047B },
+       { 0x047D, 0x047D },
+       { 0x047F, 0x047F },
        { 0x0481, 0x0481 },
-       { 0x048B, 0x04BF },
-       { 0x04C2, 0x04CE },
-       { 0x04D1, 0x04F5 },
+       { 0x048B, 0x048B },
+       { 0x048D, 0x048D },
+       { 0x048F, 0x048F },
+       { 0x0491, 0x0491 },
+       { 0x0493, 0x0493 },
+       { 0x0495, 0x0495 },
+       { 0x0497, 0x0497 },
+       { 0x0499, 0x0499 },
+       { 0x049B, 0x049B },
+       { 0x049D, 0x049D },
+       { 0x049F, 0x049F },
+       { 0x04A1, 0x04A1 },
+       { 0x04A3, 0x04A3 },
+       { 0x04A5, 0x04A5 },
+       { 0x04A7, 0x04A7 },
+       { 0x04A9, 0x04A9 },
+       { 0x04AB, 0x04AB },
+       { 0x04AD, 0x04AD },
+       { 0x04AF, 0x04AF },
+       { 0x04B1, 0x04B1 },
+       { 0x04B3, 0x04B3 },
+       { 0x04B5, 0x04B5 },
+       { 0x04B7, 0x04B7 },
+       { 0x04B9, 0x04B9 },
+       { 0x04BB, 0x04BB },
+       { 0x04BD, 0x04BD },
+       { 0x04BF, 0x04BF },
+       { 0x04C2, 0x04C2 },
+       { 0x04C4, 0x04C4 },
+       { 0x04C6, 0x04C6 },
+       { 0x04C8, 0x04C8 },
+       { 0x04CA, 0x04CA },
+       { 0x04CC, 0x04CC },
+       { 0x04CE, 0x04CF },
+       { 0x04D1, 0x04D1 },
+       { 0x04D3, 0x04D3 },
+       { 0x04D5, 0x04D5 },
+       { 0x04D7, 0x04D7 },
+       { 0x04D9, 0x04D9 },
+       { 0x04DB, 0x04DB },
+       { 0x04DD, 0x04DD },
+       { 0x04DF, 0x04DF },
+       { 0x04E1, 0x04E1 },
+       { 0x04E3, 0x04E3 },
+       { 0x04E5, 0x04E5 },
+       { 0x04E7, 0x04E7 },
+       { 0x04E9, 0x04E9 },
+       { 0x04EB, 0x04EB },
+       { 0x04ED, 0x04ED },
+       { 0x04EF, 0x04EF },
+       { 0x04F1, 0x04F1 },
+       { 0x04F3, 0x04F3 },
+       { 0x04F5, 0x04F5 },
+       { 0x04F7, 0x04F7 },
        { 0x04F9, 0x04F9 },
-       { 0x0501, 0x050F },
+       { 0x04FB, 0x04FB },
+       { 0x04FD, 0x04FD },
+       { 0x04FF, 0x04FF },
+       { 0x0501, 0x0501 },
+       { 0x0503, 0x0503 },
+       { 0x0505, 0x0505 },
+       { 0x0507, 0x0507 },
+       { 0x0509, 0x0509 },
+       { 0x050B, 0x050B },
+       { 0x050D, 0x050D },
+       { 0x050F, 0x050F },
+       { 0x0511, 0x0511 },
+       { 0x0513, 0x0513 },
+       { 0x0515, 0x0515 },
+       { 0x0517, 0x0517 },
+       { 0x0519, 0x0519 },
+       { 0x051B, 0x051B },
+       { 0x051D, 0x051D },
+       { 0x051F, 0x051F },
+       { 0x0521, 0x0521 },
+       { 0x0523, 0x0523 },
+       { 0x0525, 0x0525 },
+       { 0x0527, 0x0527 },
+       { 0x0529, 0x0529 },
+       { 0x052B, 0x052B },
+       { 0x052D, 0x052D },
+       { 0x052F, 0x052F },
        { 0x0561, 0x0586 },
-       { 0x1E01, 0x1E95 },
+       { 0x1D79, 0x1D79 },
+       { 0x1D7D, 0x1D7D },
+       { 0x1E01, 0x1E01 },
+       { 0x1E03, 0x1E03 },
+       { 0x1E05, 0x1E05 },
+       { 0x1E07, 0x1E07 },
+       { 0x1E09, 0x1E09 },
+       { 0x1E0B, 0x1E0B },
+       { 0x1E0D, 0x1E0D },
+       { 0x1E0F, 0x1E0F },
+       { 0x1E11, 0x1E11 },
+       { 0x1E13, 0x1E13 },
+       { 0x1E15, 0x1E15 },
+       { 0x1E17, 0x1E17 },
+       { 0x1E19, 0x1E19 },
+       { 0x1E1B, 0x1E1B },
+       { 0x1E1D, 0x1E1D },
+       { 0x1E1F, 0x1E1F },
+       { 0x1E21, 0x1E21 },
+       { 0x1E23, 0x1E23 },
+       { 0x1E25, 0x1E25 },
+       { 0x1E27, 0x1E27 },
+       { 0x1E29, 0x1E29 },
+       { 0x1E2B, 0x1E2B },
+       { 0x1E2D, 0x1E2D },
+       { 0x1E2F, 0x1E2F },
+       { 0x1E31, 0x1E31 },
+       { 0x1E33, 0x1E33 },
+       { 0x1E35, 0x1E35 },
+       { 0x1E37, 0x1E37 },
+       { 0x1E39, 0x1E39 },
+       { 0x1E3B, 0x1E3B },
+       { 0x1E3D, 0x1E3D },
+       { 0x1E3F, 0x1E3F },
+       { 0x1E41, 0x1E41 },
+       { 0x1E43, 0x1E43 },
+       { 0x1E45, 0x1E45 },
+       { 0x1E47, 0x1E47 },
+       { 0x1E49, 0x1E49 },
+       { 0x1E4B, 0x1E4B },
+       { 0x1E4D, 0x1E4D },
+       { 0x1E4F, 0x1E4F },
+       { 0x1E51, 0x1E51 },
+       { 0x1E53, 0x1E53 },
+       { 0x1E55, 0x1E55 },
+       { 0x1E57, 0x1E57 },
+       { 0x1E59, 0x1E59 },
+       { 0x1E5B, 0x1E5B },
+       { 0x1E5D, 0x1E5D },
+       { 0x1E5F, 0x1E5F },
+       { 0x1E61, 0x1E61 },
+       { 0x1E63, 0x1E63 },
+       { 0x1E65, 0x1E65 },
+       { 0x1E67, 0x1E67 },
+       { 0x1E69, 0x1E69 },
+       { 0x1E6B, 0x1E6B },
+       { 0x1E6D, 0x1E6D },
+       { 0x1E6F, 0x1E6F },
+       { 0x1E71, 0x1E71 },
+       { 0x1E73, 0x1E73 },
+       { 0x1E75, 0x1E75 },
+       { 0x1E77, 0x1E77 },
+       { 0x1E79, 0x1E79 },
+       { 0x1E7B, 0x1E7B },
+       { 0x1E7D, 0x1E7D },
+       { 0x1E7F, 0x1E7F },
+       { 0x1E81, 0x1E81 },
+       { 0x1E83, 0x1E83 },
+       { 0x1E85, 0x1E85 },
+       { 0x1E87, 0x1E87 },
+       { 0x1E89, 0x1E89 },
+       { 0x1E8B, 0x1E8B },
+       { 0x1E8D, 0x1E8D },
+       { 0x1E8F, 0x1E8F },
+       { 0x1E91, 0x1E91 },
+       { 0x1E93, 0x1E93 },
+       { 0x1E95, 0x1E95 },
        { 0x1E9B, 0x1E9B },
-       { 0x1EA1, 0x1EF9 },
-       { 0x1F00, 0x1F07 },
+       { 0x1EA1, 0x1EA1 },
+       { 0x1EA3, 0x1EA3 },
+       { 0x1EA5, 0x1EA5 },
+       { 0x1EA7, 0x1EA7 },
+       { 0x1EA9, 0x1EA9 },
+       { 0x1EAB, 0x1EAB },
+       { 0x1EAD, 0x1EAD },
+       { 0x1EAF, 0x1EAF },
+       { 0x1EB1, 0x1EB1 },
+       { 0x1EB3, 0x1EB3 },
+       { 0x1EB5, 0x1EB5 },
+       { 0x1EB7, 0x1EB7 },
+       { 0x1EB9, 0x1EB9 },
+       { 0x1EBB, 0x1EBB },
+       { 0x1EBD, 0x1EBD },
+       { 0x1EBF, 0x1EBF },
+       { 0x1EC1, 0x1EC1 },
+       { 0x1EC3, 0x1EC3 },
+       { 0x1EC5, 0x1EC5 },
+       { 0x1EC7, 0x1EC7 },
+       { 0x1EC9, 0x1EC9 },
+       { 0x1ECB, 0x1ECB },
+       { 0x1ECD, 0x1ECD },
+       { 0x1ECF, 0x1ECF },
+       { 0x1ED1, 0x1ED1 },
+       { 0x1ED3, 0x1ED3 },
+       { 0x1ED5, 0x1ED5 },
+       { 0x1ED7, 0x1ED7 },
+       { 0x1ED9, 0x1ED9 },
+       { 0x1EDB, 0x1EDB },
+       { 0x1EDD, 0x1EDD },
+       { 0x1EDF, 0x1EDF },
+       { 0x1EE1, 0x1EE1 },
+       { 0x1EE3, 0x1EE3 },
+       { 0x1EE5, 0x1EE5 },
+       { 0x1EE7, 0x1EE7 },
+       { 0x1EE9, 0x1EE9 },
+       { 0x1EEB, 0x1EEB },
+       { 0x1EED, 0x1EED },
+       { 0x1EEF, 0x1EEF },
+       { 0x1EF1, 0x1EF1 },
+       { 0x1EF3, 0x1EF3 },
+       { 0x1EF5, 0x1EF5 },
+       { 0x1EF7, 0x1EF7 },
+       { 0x1EF9, 0x1EF9 },
+       { 0x1EFB, 0x1EFB },
+       { 0x1EFD, 0x1EFD },
+       { 0x1EFF, 0x1F07 },
        { 0x1F10, 0x1F15 },
        { 0x1F20, 0x1F27 },
        { 0x1F30, 0x1F37 },
        { 0x1F40, 0x1F45 },
-       { 0x1F51, 0x1F57 },
+       { 0x1F51, 0x1F51 },
+       { 0x1F53, 0x1F53 },
+       { 0x1F55, 0x1F55 },
+       { 0x1F57, 0x1F57 },
        { 0x1F60, 0x1F67 },
        { 0x1F70, 0x1F7D },
        { 0x1F80, 0x1F87 },
        { 0x1F90, 0x1F97 },
        { 0x1FA0, 0x1FA7 },
-       { 0x1FB0, 0x1FB0 },
-       { 0x1FB1, 0x1FB1 },
+       { 0x1FB0, 0x1FB1 },
        { 0x1FB3, 0x1FB3 },
        { 0x1FBE, 0x1FBE },
        { 0x1FC3, 0x1FC3 },
-       { 0x1FD0, 0x1FD0 },
-       { 0x1FD1, 0x1FD1 },
-       { 0x1FE0, 0x1FE0 },
-       { 0x1FE1, 0x1FE1 },
+       { 0x1FD0, 0x1FD1 },
+       { 0x1FE0, 0x1FE1 },
        { 0x1FE5, 0x1FE5 },
        { 0x1FF3, 0x1FF3 },
+       { 0x214E, 0x214E },
        { 0x2170, 0x217F },
+       { 0x2184, 0x2184 },
        { 0x24D0, 0x24E9 },
+       { 0x2C30, 0x2C5E },
+       { 0x2C61, 0x2C61 },
+       { 0x2C65, 0x2C66 },
+       { 0x2C68, 0x2C68 },
+       { 0x2C6A, 0x2C6A },
+       { 0x2C6C, 0x2C6C },
+       { 0x2C73, 0x2C73 },
+       { 0x2C76, 0x2C76 },
+       { 0x2C81, 0x2C81 },
+       { 0x2C83, 0x2C83 },
+       { 0x2C85, 0x2C85 },
+       { 0x2C87, 0x2C87 },
+       { 0x2C89, 0x2C89 },
+       { 0x2C8B, 0x2C8B },
+       { 0x2C8D, 0x2C8D },
+       { 0x2C8F, 0x2C8F },
+       { 0x2C91, 0x2C91 },
+       { 0x2C93, 0x2C93 },
+       { 0x2C95, 0x2C95 },
+       { 0x2C97, 0x2C97 },
+       { 0x2C99, 0x2C99 },
+       { 0x2C9B, 0x2C9B },
+       { 0x2C9D, 0x2C9D },
+       { 0x2C9F, 0x2C9F },
+       { 0x2CA1, 0x2CA1 },
+       { 0x2CA3, 0x2CA3 },
+       { 0x2CA5, 0x2CA5 },
+       { 0x2CA7, 0x2CA7 },
+       { 0x2CA9, 0x2CA9 },
+       { 0x2CAB, 0x2CAB },
+       { 0x2CAD, 0x2CAD },
+       { 0x2CAF, 0x2CAF },
+       { 0x2CB1, 0x2CB1 },
+       { 0x2CB3, 0x2CB3 },
+       { 0x2CB5, 0x2CB5 },
+       { 0x2CB7, 0x2CB7 },
+       { 0x2CB9, 0x2CB9 },
+       { 0x2CBB, 0x2CBB },
+       { 0x2CBD, 0x2CBD },
+       { 0x2CBF, 0x2CBF },
+       { 0x2CC1, 0x2CC1 },
+       { 0x2CC3, 0x2CC3 },
+       { 0x2CC5, 0x2CC5 },
+       { 0x2CC7, 0x2CC7 },
+       { 0x2CC9, 0x2CC9 },
+       { 0x2CCB, 0x2CCB },
+       { 0x2CCD, 0x2CCD },
+       { 0x2CCF, 0x2CCF },
+       { 0x2CD1, 0x2CD1 },
+       { 0x2CD3, 0x2CD3 },
+       { 0x2CD5, 0x2CD5 },
+       { 0x2CD7, 0x2CD7 },
+       { 0x2CD9, 0x2CD9 },
+       { 0x2CDB, 0x2CDB },
+       { 0x2CDD, 0x2CDD },
+       { 0x2CDF, 0x2CDF },
+       { 0x2CE1, 0x2CE1 },
+       { 0x2CE3, 0x2CE3 },
+       { 0x2CEC, 0x2CEC },
+       { 0x2CEE, 0x2CEE },
+       { 0x2CF3, 0x2CF3 },
+       { 0x2D00, 0x2D25 },
+       { 0x2D27, 0x2D27 },
+       { 0x2D2D, 0x2D2D },
+       { 0xA641, 0xA641 },
+       { 0xA643, 0xA643 },
+       { 0xA645, 0xA645 },
+       { 0xA647, 0xA647 },
+       { 0xA649, 0xA649 },
+       { 0xA64B, 0xA64B },
+       { 0xA64D, 0xA64D },
+       { 0xA64F, 0xA64F },
+       { 0xA651, 0xA651 },
+       { 0xA653, 0xA653 },
+       { 0xA655, 0xA655 },
+       { 0xA657, 0xA657 },
+       { 0xA659, 0xA659 },
+       { 0xA65B, 0xA65B },
+       { 0xA65D, 0xA65D },
+       { 0xA65F, 0xA65F },
+       { 0xA661, 0xA661 },
+       { 0xA663, 0xA663 },
+       { 0xA665, 0xA665 },
+       { 0xA667, 0xA667 },
+       { 0xA669, 0xA669 },
+       { 0xA66B, 0xA66B },
+       { 0xA66D, 0xA66D },
+       { 0xA681, 0xA681 },
+       { 0xA683, 0xA683 },
+       { 0xA685, 0xA685 },
+       { 0xA687, 0xA687 },
+       { 0xA689, 0xA689 },
+       { 0xA68B, 0xA68B },
+       { 0xA68D, 0xA68D },
+       { 0xA68F, 0xA68F },
+       { 0xA691, 0xA691 },
+       { 0xA693, 0xA693 },
+       { 0xA695, 0xA695 },
+       { 0xA697, 0xA697 },
+       { 0xA699, 0xA699 },
+       { 0xA69B, 0xA69B },
+       { 0xA723, 0xA723 },
+       { 0xA725, 0xA725 },
+       { 0xA727, 0xA727 },
+       { 0xA729, 0xA729 },
+       { 0xA72B, 0xA72B },
+       { 0xA72D, 0xA72D },
+       { 0xA72F, 0xA72F },
+       { 0xA733, 0xA733 },
+       { 0xA735, 0xA735 },
+       { 0xA737, 0xA737 },
+       { 0xA739, 0xA739 },
+       { 0xA73B, 0xA73B },
+       { 0xA73D, 0xA73D },
+       { 0xA73F, 0xA73F },
+       { 0xA741, 0xA741 },
+       { 0xA743, 0xA743 },
+       { 0xA745, 0xA745 },
+       { 0xA747, 0xA747 },
+       { 0xA749, 0xA749 },
+       { 0xA74B, 0xA74B },
+       { 0xA74D, 0xA74D },
+       { 0xA74F, 0xA74F },
+       { 0xA751, 0xA751 },
+       { 0xA753, 0xA753 },
+       { 0xA755, 0xA755 },
+       { 0xA757, 0xA757 },
+       { 0xA759, 0xA759 },
+       { 0xA75B, 0xA75B },
+       { 0xA75D, 0xA75D },
+       { 0xA75F, 0xA75F },
+       { 0xA761, 0xA761 },
+       { 0xA763, 0xA763 },
+       { 0xA765, 0xA765 },
+       { 0xA767, 0xA767 },
+       { 0xA769, 0xA769 },
+       { 0xA76B, 0xA76B },
+       { 0xA76D, 0xA76D },
+       { 0xA76F, 0xA76F },
+       { 0xA77A, 0xA77A },
+       { 0xA77C, 0xA77C },
+       { 0xA77F, 0xA77F },
+       { 0xA781, 0xA781 },
+       { 0xA783, 0xA783 },
+       { 0xA785, 0xA785 },
+       { 0xA787, 0xA787 },
+       { 0xA78C, 0xA78C },
+       { 0xA791, 0xA791 },
+       { 0xA793, 0xA793 },
+       { 0xA797, 0xA797 },
+       { 0xA799, 0xA799 },
+       { 0xA79B, 0xA79B },
+       { 0xA79D, 0xA79D },
+       { 0xA79F, 0xA79F },
+       { 0xA7A1, 0xA7A1 },
+       { 0xA7A3, 0xA7A3 },
+       { 0xA7A5, 0xA7A5 },
+       { 0xA7A7, 0xA7A7 },
+       { 0xA7A9, 0xA7A9 },
        { 0xFF41, 0xFF5A },
-       { 0x00010428, 0x0001044D }
+       { 0x10428, 0x1044F },
+       { 0x118C0, 0x118DF }
 };
 
 MAKE_ISW(lower)
 
-struct mb_ucsrange data_wctype_alpha[]=
-{
+/* plus U+005F (UNDERSCORE) */
+static const struct mb_ucsrange data_wctype_alpha[] = {
        { 0x0041, 0x005A },
-       { 0x005F, 0x005F },     /* Include _ for joe */
+       { 0x005F, 0x005F },
        { 0x0061, 0x007A },
        { 0x00AA, 0x00AA },
        { 0x00B5, 0x00B5 },
        { 0x00BA, 0x00BA },
        { 0x00C0, 0x00D6 },
        { 0x00D8, 0x00F6 },
-       { 0x00F8, 0x00FF },
-       { 0x0100, 0x017F },
-       { 0x0180, 0x0220 },
-       { 0x0222, 0x0233 },
-       { 0x0250, 0x02AD },
-       { 0x02B0, 0x02B8 },
-       { 0x02BB, 0x02C1 },
-       { 0x02D0, 0x02D0 },
-       { 0x02D1, 0x02D1 },
+       { 0x00F8, 0x02C1 },
+       { 0x02C6, 0x02D1 },
        { 0x02E0, 0x02E4 },
+       { 0x02EC, 0x02EC },
        { 0x02EE, 0x02EE },
        { 0x0345, 0x0345 },
-       { 0x037A, 0x037A },
+       { 0x0370, 0x0374 },
+       { 0x0376, 0x0377 },
+       { 0x037A, 0x037D },
+       { 0x037F, 0x037F },
        { 0x0386, 0x0386 },
        { 0x0388, 0x038A },
        { 0x038C, 0x038C },
        { 0x038E, 0x03A1 },
-       { 0x03A3, 0x03CE },
-       { 0x03D0, 0x03F5 },
-       { 0x0400, 0x0481 },
-       { 0x048A, 0x04CE },
-       { 0x04D0, 0x04F5 },
-       { 0x04F8, 0x04F9 },
-       { 0x0500, 0x050F },
+       { 0x03A3, 0x03F5 },
+       { 0x03F7, 0x0481 },
+       { 0x048A, 0x052F },
        { 0x0531, 0x0556 },
        { 0x0559, 0x0559 },
        { 0x0561, 0x0587 },
        { 0x05D0, 0x05EA },
        { 0x05F0, 0x05F2 },
-       { 0x0621, 0x063A },
-       { 0x0640, 0x064A },
-       { 0x0660, 0x0669 },
+       { 0x0620, 0x064A },
        { 0x066E, 0x066F },
        { 0x0671, 0x06D3 },
        { 0x06D5, 0x06D5 },
        { 0x06E5, 0x06E6 },
-       { 0x06F0, 0x06F9 },
+       { 0x06EE, 0x06EF },
        { 0x06FA, 0x06FC },
+       { 0x06FF, 0x06FF },
        { 0x0710, 0x0710 },
-       { 0x0712, 0x072C },
-       { 0x0780, 0x07A5 },
+       { 0x0712, 0x072F },
+       { 0x074D, 0x07A5 },
        { 0x07B1, 0x07B1 },
-       { 0x0905, 0x0939 },
+       { 0x07CA, 0x07EA },
+       { 0x07F4, 0x07F5 },
+       { 0x07FA, 0x07FA },
+       { 0x0800, 0x0815 },
+       { 0x081A, 0x081A },
+       { 0x0824, 0x0824 },
+       { 0x0828, 0x0828 },
+       { 0x0840, 0x0858 },
+       { 0x08A0, 0x08B2 },
+       { 0x0904, 0x0939 },
        { 0x093D, 0x093D },
        { 0x0950, 0x0950 },
        { 0x0958, 0x0961 },
-       { 0x0966, 0x096F },
+       { 0x0971, 0x0980 },
        { 0x0985, 0x098C },
-       { 0x098F, 0x098F },
-       { 0x0990, 0x0990 },
+       { 0x098F, 0x0990 },
        { 0x0993, 0x09A8 },
        { 0x09AA, 0x09B0 },
        { 0x09B2, 0x09B2 },
        { 0x09B6, 0x09B9 },
-       { 0x09DC, 0x09DC },
-       { 0x09DD, 0x09DD },
+       { 0x09BD, 0x09BD },
+       { 0x09CE, 0x09CE },
+       { 0x09DC, 0x09DD },
        { 0x09DF, 0x09E1 },
-       { 0x09E6, 0x09EF },
        { 0x09F0, 0x09F1 },
        { 0x0A05, 0x0A0A },
-       { 0x0A0F, 0x0A0F },
-       { 0x0A10, 0x0A10 },
+       { 0x0A0F, 0x0A10 },
        { 0x0A13, 0x0A28 },
        { 0x0A2A, 0x0A30 },
-       { 0x0A32, 0x0A32 },
-       { 0x0A33, 0x0A33 },
-       { 0x0A35, 0x0A35 },
-       { 0x0A36, 0x0A36 },
-       { 0x0A38, 0x0A38 },
-       { 0x0A39, 0x0A39 },
+       { 0x0A32, 0x0A33 },
+       { 0x0A35, 0x0A36 },
+       { 0x0A38, 0x0A39 },
        { 0x0A59, 0x0A5C },
        { 0x0A5E, 0x0A5E },
-       { 0x0A66, 0x0A6F },
        { 0x0A72, 0x0A74 },
-       { 0x0A85, 0x0A8B },
-       { 0x0A8D, 0x0A8D },
+       { 0x0A85, 0x0A8D },
        { 0x0A8F, 0x0A91 },
        { 0x0A93, 0x0AA8 },
        { 0x0AAA, 0x0AB0 },
-       { 0x0AB2, 0x0AB2 },
-       { 0x0AB3, 0x0AB3 },
+       { 0x0AB2, 0x0AB3 },
        { 0x0AB5, 0x0AB9 },
        { 0x0ABD, 0x0ABD },
        { 0x0AD0, 0x0AD0 },
-       { 0x0AE0, 0x0AE0 },
-       { 0x0AE6, 0x0AEF },
+       { 0x0AE0, 0x0AE1 },
        { 0x0B05, 0x0B0C },
-       { 0x0B0F, 0x0B0F },
-       { 0x0B10, 0x0B10 },
+       { 0x0B0F, 0x0B10 },
        { 0x0B13, 0x0B28 },
        { 0x0B2A, 0x0B30 },
-       { 0x0B32, 0x0B32 },
-       { 0x0B33, 0x0B33 },
-       { 0x0B36, 0x0B39 },
+       { 0x0B32, 0x0B33 },
+       { 0x0B35, 0x0B39 },
        { 0x0B3D, 0x0B3D },
-       { 0x0B5C, 0x0B5C },
-       { 0x0B5D, 0x0B5D },
+       { 0x0B5C, 0x0B5D },
        { 0x0B5F, 0x0B61 },
-       { 0x0B66, 0x0B6F },
+       { 0x0B71, 0x0B71 },
        { 0x0B83, 0x0B83 },
        { 0x0B85, 0x0B8A },
        { 0x0B8E, 0x0B90 },
        { 0x0B92, 0x0B95 },
-       { 0x0B99, 0x0B99 },
-       { 0x0B9A, 0x0B9A },
+       { 0x0B99, 0x0B9A },
        { 0x0B9C, 0x0B9C },
-       { 0x0B9E, 0x0B9E },
-       { 0x0B9F, 0x0B9F },
-       { 0x0BA3, 0x0BA3 },
-       { 0x0BA4, 0x0BA4 },
+       { 0x0B9E, 0x0B9F },
+       { 0x0BA3, 0x0BA4 },
        { 0x0BA8, 0x0BAA },
-       { 0x0BAE, 0x0BB5 },
-       { 0x0BB7, 0x0BB9 },
-       { 0x0BE7, 0x0BEF },
+       { 0x0BAE, 0x0BB9 },
+       { 0x0BD0, 0x0BD0 },
        { 0x0C05, 0x0C0C },
        { 0x0C0E, 0x0C10 },
        { 0x0C12, 0x0C28 },
-       { 0x0C2A, 0x0C33 },
-       { 0x0C35, 0x0C39 },
+       { 0x0C2A, 0x0C39 },
+       { 0x0C3D, 0x0C3D },
+       { 0x0C58, 0x0C59 },
        { 0x0C60, 0x0C61 },
-       { 0x0C66, 0x0C6F },
        { 0x0C85, 0x0C8C },
        { 0x0C8E, 0x0C90 },
        { 0x0C92, 0x0CA8 },
        { 0x0CAA, 0x0CB3 },
        { 0x0CB5, 0x0CB9 },
+       { 0x0CBD, 0x0CBD },
        { 0x0CDE, 0x0CDE },
        { 0x0CE0, 0x0CE1 },
-       { 0x0CE6, 0x0CEF },
+       { 0x0CF1, 0x0CF2 },
        { 0x0D05, 0x0D0C },
        { 0x0D0E, 0x0D10 },
-       { 0x0D12, 0x0D28 },
-       { 0x0D2A, 0x0D39 },
+       { 0x0D12, 0x0D3A },
+       { 0x0D3D, 0x0D3D },
+       { 0x0D4E, 0x0D4E },
        { 0x0D60, 0x0D61 },
-       { 0x0D66, 0x0D6F },
+       { 0x0D7A, 0x0D7F },
        { 0x0D85, 0x0D96 },
        { 0x0D9A, 0x0DB1 },
        { 0x0DB3, 0x0DBB },
        { 0x0DBD, 0x0DBD },
        { 0x0DC0, 0x0DC6 },
-       { 0x0E01, 0x0E2E },
-       { 0x0E30, 0x0E3A },
-       { 0x0E40, 0x0E45 },
-       { 0x0E47, 0x0E4E },
-       { 0x0E50, 0x0E59 },
+       { 0x0E01, 0x0E30 },
+       { 0x0E32, 0x0E33 },
+       { 0x0E40, 0x0E46 },
        { 0x0E81, 0x0E82 },
        { 0x0E84, 0x0E84 },
        { 0x0E87, 0x0E88 },
@@ -740,56 +1754,47 @@ struct mb_ucsrange data_wctype_alpha[]=
        { 0x0EBD, 0x0EBD },
        { 0x0EC0, 0x0EC4 },
        { 0x0EC6, 0x0EC6 },
-       { 0x0ED0, 0x0ED9 },
-       { 0x0EDC, 0x0EDD },
+       { 0x0EDC, 0x0EDF },
        { 0x0F00, 0x0F00 },
-       { 0x0F20, 0x0F29 },
        { 0x0F40, 0x0F47 },
-       { 0x0F49, 0x0F6A },
-       { 0x0F88, 0x0F8B },
-       { 0x1000, 0x1021 },
-       { 0x1023, 0x1027 },
-       { 0x1029, 0x1029 },
-       { 0x102A, 0x102A },
-       { 0x1040, 0x1049 },
+       { 0x0F49, 0x0F6C },
+       { 0x0F88, 0x0F8C },
+       { 0x1000, 0x102A },
+       { 0x103F, 0x103F },
        { 0x1050, 0x1055 },
+       { 0x105A, 0x105D },
+       { 0x1061, 0x1061 },
+       { 0x1065, 0x1066 },
+       { 0x106E, 0x1070 },
+       { 0x1075, 0x1081 },
+       { 0x108E, 0x108E },
        { 0x10A0, 0x10C5 },
-       { 0x10D0, 0x10F8 },
-       { 0x1100, 0x1159 },
-       { 0x115F, 0x11A2 },
-       { 0x11A8, 0x11F9 },
-       { 0x1200, 0x1206 },
-       { 0x1208, 0x1246 },
-       { 0x1248, 0x1248 },
+       { 0x10C7, 0x10C7 },
+       { 0x10CD, 0x10CD },
+       { 0x10D0, 0x10FA },
+       { 0x10FC, 0x1248 },
        { 0x124A, 0x124D },
        { 0x1250, 0x1256 },
        { 0x1258, 0x1258 },
        { 0x125A, 0x125D },
-       { 0x1260, 0x1286 },
-       { 0x1288, 0x1288 },
+       { 0x1260, 0x1288 },
        { 0x128A, 0x128D },
-       { 0x1290, 0x12AE },
-       { 0x12B0, 0x12B0 },
+       { 0x1290, 0x12B0 },
        { 0x12B2, 0x12B5 },
        { 0x12B8, 0x12BE },
        { 0x12C0, 0x12C0 },
        { 0x12C2, 0x12C5 },
-       { 0x12C8, 0x12CE },
-       { 0x12D0, 0x12D6 },
-       { 0x12D8, 0x12EE },
-       { 0x12F0, 0x130E },
-       { 0x1310, 0x1310 },
+       { 0x12C8, 0x12D6 },
+       { 0x12D8, 0x1310 },
        { 0x1312, 0x1315 },
-       { 0x1318, 0x131E },
-       { 0x1320, 0x1346 },
-       { 0x1348, 0x135A },
-       { 0x1369, 0x1371 },
+       { 0x1318, 0x135A },
+       { 0x1380, 0x138F },
        { 0x13A0, 0x13F4 },
        { 0x1401, 0x166C },
-       { 0x166F, 0x1676 },
+       { 0x166F, 0x167F },
        { 0x1681, 0x169A },
        { 0x16A0, 0x16EA },
-       { 0x16EE, 0x16F0 },
+       { 0x16F1, 0x16F8 },
        { 0x1700, 0x170C },
        { 0x170E, 0x1711 },
        { 0x1720, 0x1731 },
@@ -799,13 +1804,31 @@ struct mb_ucsrange data_wctype_alpha[]=
        { 0x1780, 0x17B3 },
        { 0x17D7, 0x17D7 },
        { 0x17DC, 0x17DC },
-       { 0x17E0, 0x17E9 },
-       { 0x1810, 0x1819 },
        { 0x1820, 0x1877 },
        { 0x1880, 0x18A8 },
-       { 0x1E00, 0x1E9B },
-       { 0x1EA0, 0x1EF9 },
-       { 0x1F00, 0x1F15 },
+       { 0x18AA, 0x18AA },
+       { 0x18B0, 0x18F5 },
+       { 0x1900, 0x191E },
+       { 0x1950, 0x196D },
+       { 0x1970, 0x1974 },
+       { 0x1980, 0x19AB },
+       { 0x19C1, 0x19C7 },
+       { 0x1A00, 0x1A16 },
+       { 0x1A20, 0x1A54 },
+       { 0x1AA7, 0x1AA7 },
+       { 0x1B05, 0x1B33 },
+       { 0x1B45, 0x1B4B },
+       { 0x1B83, 0x1BA0 },
+       { 0x1BAE, 0x1BAF },
+       { 0x1BBA, 0x1BE5 },
+       { 0x1C00, 0x1C23 },
+       { 0x1C4D, 0x1C4F },
+       { 0x1C5A, 0x1C7D },
+       { 0x1CE9, 0x1CEC },
+       { 0x1CEE, 0x1CF1 },
+       { 0x1CF5, 0x1CF6 },
+       { 0x1D00, 0x1DBF },
+       { 0x1E00, 0x1F15 },
        { 0x1F18, 0x1F1D },
        { 0x1F20, 0x1F45 },
        { 0x1F48, 0x1F4D },
@@ -826,6 +1849,7 @@ struct mb_ucsrange data_wctype_alpha[]=
        { 0x1FF6, 0x1FFC },
        { 0x2071, 0x2071 },
        { 0x207F, 0x207F },
+       { 0x2090, 0x209C },
        { 0x2102, 0x2102 },
        { 0x2107, 0x2107 },
        { 0x210A, 0x2113 },
@@ -833,31 +1857,105 @@ struct mb_ucsrange data_wctype_alpha[]=
        { 0x2119, 0x211D },
        { 0x2124, 0x2124 },
        { 0x2126, 0x2126 },
-       { 0x2128, 0x212D },
-       { 0x212F, 0x2131 },
-       { 0x2133, 0x2139 },
-       { 0x213D, 0x213F },
+       { 0x2128, 0x2128 },
+       { 0x212A, 0x212D },
+       { 0x212F, 0x2139 },
+       { 0x213C, 0x213F },
        { 0x2145, 0x2149 },
-       { 0x2160, 0x2183 },
-       { 0x249C, 0x24E9 },
-       { 0x3005, 0x3007 },
-       { 0x3021, 0x3029 },
+       { 0x214E, 0x214E },
+       { 0x2160, 0x217F },
+       { 0x2183, 0x2184 },
+       { 0x24B6, 0x24E9 },
+       { 0x2C00, 0x2C2E },
+       { 0x2C30, 0x2C5E },
+       { 0x2C60, 0x2CE4 },
+       { 0x2CEB, 0x2CEE },
+       { 0x2CF2, 0x2CF3 },
+       { 0x2D00, 0x2D25 },
+       { 0x2D27, 0x2D27 },
+       { 0x2D2D, 0x2D2D },
+       { 0x2D30, 0x2D67 },
+       { 0x2D6F, 0x2D6F },
+       { 0x2D80, 0x2D96 },
+       { 0x2DA0, 0x2DA6 },
+       { 0x2DA8, 0x2DAE },
+       { 0x2DB0, 0x2DB6 },
+       { 0x2DB8, 0x2DBE },
+       { 0x2DC0, 0x2DC6 },
+       { 0x2DC8, 0x2DCE },
+       { 0x2DD0, 0x2DD6 },
+       { 0x2DD8, 0x2DDE },
+       { 0x2E2F, 0x2E2F },
+       { 0x3005, 0x3006 },
        { 0x3031, 0x3035 },
-       { 0x3038, 0x303C },
+       { 0x303B, 0x303C },
        { 0x3041, 0x3096 },
        { 0x309D, 0x309F },
        { 0x30A1, 0x30FA },
        { 0x30FC, 0x30FF },
-       { 0x3105, 0x312C },
+       { 0x3105, 0x312D },
        { 0x3131, 0x318E },
-       { 0x31A0, 0x31B7 },
+       { 0x31A0, 0x31BA },
        { 0x31F0, 0x31FF },
        { 0x3400, 0x4DB5 },
-       { 0x4E00, 0x9FA5 },
+       { 0x4E00, 0x9FCC },
        { 0xA000, 0xA48C },
+       { 0xA4D0, 0xA4FD },
+       { 0xA500, 0xA60C },
+       { 0xA610, 0xA61F },
+       { 0xA62A, 0xA62B },
+       { 0xA640, 0xA66E },
+       { 0xA67F, 0xA69D },
+       { 0xA6A0, 0xA6E5 },
+       { 0xA717, 0xA71F },
+       { 0xA722, 0xA788 },
+       { 0xA78B, 0xA78E },
+       { 0xA790, 0xA7AD },
+       { 0xA7B0, 0xA7B1 },
+       { 0xA7F7, 0xA801 },
+       { 0xA803, 0xA805 },
+       { 0xA807, 0xA80A },
+       { 0xA80C, 0xA822 },
+       { 0xA840, 0xA873 },
+       { 0xA882, 0xA8B3 },
+       { 0xA8F2, 0xA8F7 },
+       { 0xA8FB, 0xA8FB },
+       { 0xA90A, 0xA925 },
+       { 0xA930, 0xA946 },
+       { 0xA960, 0xA97C },
+       { 0xA984, 0xA9B2 },
+       { 0xA9CF, 0xA9CF },
+       { 0xA9E0, 0xA9E4 },
+       { 0xA9E6, 0xA9EF },
+       { 0xA9FA, 0xA9FE },
+       { 0xAA00, 0xAA28 },
+       { 0xAA40, 0xAA42 },
+       { 0xAA44, 0xAA4B },
+       { 0xAA60, 0xAA76 },
+       { 0xAA7A, 0xAA7A },
+       { 0xAA7E, 0xAAAF },
+       { 0xAAB1, 0xAAB1 },
+       { 0xAAB5, 0xAAB6 },
+       { 0xAAB9, 0xAABD },
+       { 0xAAC0, 0xAAC0 },
+       { 0xAAC2, 0xAAC2 },
+       { 0xAADB, 0xAADD },
+       { 0xAAE0, 0xAAEA },
+       { 0xAAF2, 0xAAF4 },
+       { 0xAB01, 0xAB06 },
+       { 0xAB09, 0xAB0E },
+       { 0xAB11, 0xAB16 },
+       { 0xAB20, 0xAB26 },
+       { 0xAB28, 0xAB2E },
+       { 0xAB30, 0xAB5A },
+       { 0xAB5C, 0xAB5F },
+       { 0xAB64, 0xAB65 },
+       { 0xABC0, 0xABE2 },
        { 0xAC00, 0xD7A3 },
-       { 0xF900, 0xFA2D },
-       { 0xFA30, 0xFA6A },
+       { 0xD7B0, 0xD7C6 },
+       { 0xD7CB, 0xD7FB },
+       { 0xF900, 0xFA6D },
+       { 0xFA70, 0xFAD9 },
        { 0xFB00, 0xFB06 },
        { 0xFB13, 0xFB17 },
        { 0xFB1D, 0xFB1D },
@@ -865,19 +1963,15 @@ struct mb_ucsrange data_wctype_alpha[]=
        { 0xFB2A, 0xFB36 },
        { 0xFB38, 0xFB3C },
        { 0xFB3E, 0xFB3E },
-       { 0xFB40, 0xFB40 },
-       { 0xFB41, 0xFB41 },
-       { 0xFB43, 0xFB43 },
-       { 0xFB44, 0xFB44 },
-       { 0xFB46, 0xFB4F },
-       { 0xFB50, 0xFBB1 },
+       { 0xFB40, 0xFB41 },
+       { 0xFB43, 0xFB44 },
+       { 0xFB46, 0xFBB1 },
        { 0xFBD3, 0xFD3D },
        { 0xFD50, 0xFD8F },
        { 0xFD92, 0xFDC7 },
        { 0xFDF0, 0xFDFB },
        { 0xFE70, 0xFE74 },
        { 0xFE76, 0xFEFC },
-       { 0xFF10, 0xFF19 },
        { 0xFF21, 0xFF3A },
        { 0xFF41, 0xFF5A },
        { 0xFF66, 0xFFBE },
@@ -885,98 +1979,214 @@ struct mb_ucsrange data_wctype_alpha[]=
        { 0xFFCA, 0xFFCF },
        { 0xFFD2, 0xFFD7 },
        { 0xFFDA, 0xFFDC },
-       { 0x00010300, 0x0001031E },
-       { 0x00010330, 0x0001034A },
-       { 0x00010400, 0x00010425 },
-       { 0x00010428, 0x0001044D },
-       { 0x0001D400, 0x0001D454 },
-       { 0x0001D456, 0x0001D49C },
-       { 0x0001D49E, 0x0001D49F },
-       { 0x0001D4A2, 0x0001D4A2 },
-       { 0x0001D4A5, 0x0001D4A6 },
-       { 0x0001D4A9, 0x0001D4AC },
-       { 0x0001D4AE, 0x0001D4B9 },
-       { 0x0001D4BB, 0x0001D4BB },
-       { 0x0001D4BD, 0x0001D4C0 },
-       { 0x0001D4C2, 0x0001D4C3 },
-       { 0x0001D4C5, 0x0001D505 },
-       { 0x0001D507, 0x0001D50A },
-       { 0x0001D50D, 0x0001D514 },
-       { 0x0001D516, 0x0001D51C },
-       { 0x0001D51E, 0x0001D539 },
-       { 0x0001D53B, 0x0001D53E },
-       { 0x0001D540, 0x0001D544 },
-       { 0x0001D546, 0x0001D546 },
-       { 0x0001D54A, 0x0001D550 },
-       { 0x0001D552, 0x0001D6A3 },
-       { 0x0001D6A8, 0x0001D6C0 },
-       { 0x0001D6C2, 0x0001D6DA },
-       { 0x0001D6DC, 0x0001D6FA },
-       { 0x0001D6FC, 0x0001D714 },
-       { 0x0001D716, 0x0001D734 },
-       { 0x0001D736, 0x0001D74E },
-       { 0x0001D750, 0x0001D76E },
-       { 0x0001D770, 0x0001D788 },
-       { 0x0001D78A, 0x0001D7A8 },
-       { 0x0001D7AA, 0x0001D7C2 },
-       { 0x0001D7C4, 0x0001D7C9 },
-       { 0x0001D7CE, 0x0001D7FF },
-       { 0x00020000, 0x0002A6D6 },
-       { 0x0002F800, 0x0002FA1D }
+       { 0x10000, 0x1000B },
+       { 0x1000D, 0x10026 },
+       { 0x10028, 0x1003A },
+       { 0x1003C, 0x1003D },
+       { 0x1003F, 0x1004D },
+       { 0x10050, 0x1005D },
+       { 0x10080, 0x100FA },
+       { 0x10280, 0x1029C },
+       { 0x102A0, 0x102D0 },
+       { 0x10300, 0x1031F },
+       { 0x10330, 0x10340 },
+       { 0x10342, 0x10349 },
+       { 0x10350, 0x10375 },
+       { 0x10380, 0x1039D },
+       { 0x103A0, 0x103C3 },
+       { 0x103C8, 0x103CF },
+       { 0x10400, 0x1049D },
+       { 0x10500, 0x10527 },
+       { 0x10530, 0x10563 },
+       { 0x10600, 0x10736 },
+       { 0x10740, 0x10755 },
+       { 0x10760, 0x10767 },
+       { 0x10800, 0x10805 },
+       { 0x10808, 0x10808 },
+       { 0x1080A, 0x10835 },
+       { 0x10837, 0x10838 },
+       { 0x1083C, 0x1083C },
+       { 0x1083F, 0x10855 },
+       { 0x10860, 0x10876 },
+       { 0x10880, 0x1089E },
+       { 0x10900, 0x10915 },
+       { 0x10920, 0x10939 },
+       { 0x10980, 0x109B7 },
+       { 0x109BE, 0x109BF },
+       { 0x10A00, 0x10A00 },
+       { 0x10A10, 0x10A13 },
+       { 0x10A15, 0x10A17 },
+       { 0x10A19, 0x10A33 },
+       { 0x10A60, 0x10A7C },
+       { 0x10A80, 0x10A9C },
+       { 0x10AC0, 0x10AC7 },
+       { 0x10AC9, 0x10AE4 },
+       { 0x10B00, 0x10B35 },
+       { 0x10B40, 0x10B55 },
+       { 0x10B60, 0x10B72 },
+       { 0x10B80, 0x10B91 },
+       { 0x10C00, 0x10C48 },
+       { 0x11003, 0x11037 },
+       { 0x11083, 0x110AF },
+       { 0x110D0, 0x110E8 },
+       { 0x11103, 0x11126 },
+       { 0x11150, 0x11172 },
+       { 0x11176, 0x11176 },
+       { 0x11183, 0x111B2 },
+       { 0x111C1, 0x111C4 },
+       { 0x111DA, 0x111DA },
+       { 0x11200, 0x11211 },
+       { 0x11213, 0x1122B },
+       { 0x112B0, 0x112DE },
+       { 0x11305, 0x1130C },
+       { 0x1130F, 0x11310 },
+       { 0x11313, 0x11328 },
+       { 0x1132A, 0x11330 },
+       { 0x11332, 0x11333 },
+       { 0x11335, 0x11339 },
+       { 0x1133D, 0x1133D },
+       { 0x1135D, 0x11361 },
+       { 0x11480, 0x114AF },
+       { 0x114C4, 0x114C5 },
+       { 0x114C7, 0x114C7 },
+       { 0x11580, 0x115AE },
+       { 0x11600, 0x1162F },
+       { 0x11644, 0x11644 },
+       { 0x11680, 0x116AA },
+       { 0x118A0, 0x118DF },
+       { 0x118FF, 0x118FF },
+       { 0x11AC0, 0x11AF8 },
+       { 0x12000, 0x12398 },
+       { 0x13000, 0x1342E },
+       { 0x16800, 0x16A38 },
+       { 0x16A40, 0x16A5E },
+       { 0x16AD0, 0x16AED },
+       { 0x16B00, 0x16B2F },
+       { 0x16B40, 0x16B43 },
+       { 0x16B63, 0x16B77 },
+       { 0x16B7D, 0x16B8F },
+       { 0x16F00, 0x16F44 },
+       { 0x16F50, 0x16F50 },
+       { 0x16F93, 0x16F9F },
+       { 0x1B000, 0x1B001 },
+       { 0x1BC00, 0x1BC6A },
+       { 0x1BC70, 0x1BC7C },
+       { 0x1BC80, 0x1BC88 },
+       { 0x1BC90, 0x1BC99 },
+       { 0x1D400, 0x1D454 },
+       { 0x1D456, 0x1D49C },
+       { 0x1D49E, 0x1D49F },
+       { 0x1D4A2, 0x1D4A2 },
+       { 0x1D4A5, 0x1D4A6 },
+       { 0x1D4A9, 0x1D4AC },
+       { 0x1D4AE, 0x1D4B9 },
+       { 0x1D4BB, 0x1D4BB },
+       { 0x1D4BD, 0x1D4C3 },
+       { 0x1D4C5, 0x1D505 },
+       { 0x1D507, 0x1D50A },
+       { 0x1D50D, 0x1D514 },
+       { 0x1D516, 0x1D51C },
+       { 0x1D51E, 0x1D539 },
+       { 0x1D53B, 0x1D53E },
+       { 0x1D540, 0x1D544 },
+       { 0x1D546, 0x1D546 },
+       { 0x1D54A, 0x1D550 },
+       { 0x1D552, 0x1D6A5 },
+       { 0x1D6A8, 0x1D6C0 },
+       { 0x1D6C2, 0x1D6DA },
+       { 0x1D6DC, 0x1D6FA },
+       { 0x1D6FC, 0x1D714 },
+       { 0x1D716, 0x1D734 },
+       { 0x1D736, 0x1D74E },
+       { 0x1D750, 0x1D76E },
+       { 0x1D770, 0x1D788 },
+       { 0x1D78A, 0x1D7A8 },
+       { 0x1D7AA, 0x1D7C2 },
+       { 0x1D7C4, 0x1D7CB },
+       { 0x1E800, 0x1E8C4 },
+       { 0x1EE00, 0x1EE03 },
+       { 0x1EE05, 0x1EE1F },
+       { 0x1EE21, 0x1EE22 },
+       { 0x1EE24, 0x1EE24 },
+       { 0x1EE27, 0x1EE27 },
+       { 0x1EE29, 0x1EE32 },
+       { 0x1EE34, 0x1EE37 },
+       { 0x1EE39, 0x1EE39 },
+       { 0x1EE3B, 0x1EE3B },
+       { 0x1EE42, 0x1EE42 },
+       { 0x1EE47, 0x1EE47 },
+       { 0x1EE49, 0x1EE49 },
+       { 0x1EE4B, 0x1EE4B },
+       { 0x1EE4D, 0x1EE4F },
+       { 0x1EE51, 0x1EE52 },
+       { 0x1EE54, 0x1EE54 },
+       { 0x1EE57, 0x1EE57 },
+       { 0x1EE59, 0x1EE59 },
+       { 0x1EE5B, 0x1EE5B },
+       { 0x1EE5D, 0x1EE5D },
+       { 0x1EE5F, 0x1EE5F },
+       { 0x1EE61, 0x1EE62 },
+       { 0x1EE64, 0x1EE64 },
+       { 0x1EE67, 0x1EE6A },
+       { 0x1EE6C, 0x1EE72 },
+       { 0x1EE74, 0x1EE77 },
+       { 0x1EE79, 0x1EE7C },
+       { 0x1EE7E, 0x1EE7E },
+       { 0x1EE80, 0x1EE89 },
+       { 0x1EE8B, 0x1EE9B },
+       { 0x1EEA1, 0x1EEA3 },
+       { 0x1EEA5, 0x1EEA9 },
+       { 0x1EEAB, 0x1EEBB },
+       { 0x20000, 0x2A6D6 },
+       { 0x2A700, 0x2B734 },
+       { 0x2B740, 0x2B81D },
+       { 0x2F800, 0x2FA1D }
 };
 
 MAKE_ISW(alpha)
 
-int joe_iswalpha_(struct charmap *foo,int c)
+int joe_iswalnum(struct charmap *foo, int c)
 {
-       if (c==0x5F)
-               return 1;
-       else
-               return joe_iswalpha(foo,c);
+       return ((c >= 0x30 && c <= 0x39) ? 1 : joe_iswalpha(foo, c));
 }
 
-int joe_iswalnum_(struct charmap *foo,int c)
+int joe_iswdigit(struct charmap *foo, int c)
 {
-       if ((c>=0x30 && c<=0x39) || c==0x5F)
-               return 1;
-       else
-               return joe_iswalpha(foo,c);
+       return ((c >= 0x30 && c <= 0x39) ? 1 : 0);
 }
 
-struct mb_ucsrange data_wctype_digit[]=
-{
-       { 0x0030, 0x0039 }
-};
-
-MAKE_ISW(digit)
-
-struct mb_ucsrange data_wctype_space[]=
-{
+/*
+ * this includes ;WS;
+ * except U+2007 (<noBreak> FIGURE SPACE)
+ * plus U+200B (ZERO WIDTH SPACE)
+ * plus U+2029 (PARAGRAPH SEPARATOR)
+ */
+static const struct mb_ucsrange data_wctype_space[] = {
        { 0x0009, 0x000D },
        { 0x0020, 0x0020 },
        { 0x1680, 0x1680 },
        { 0x2000, 0x2006 },
        { 0x2008, 0x200B },
-       { 0x2028, 0x2028 },
-       { 0x2029, 0x2029 },
+       { 0x2028, 0x2029 },
        { 0x205F, 0x205F },
        { 0x3000, 0x3000 }
 };
 
 MAKE_ISW(space)
 
-struct mb_ucsrange data_wctype_ctrl[]=
-{
+/*
+ * plus U+2028 (LINE SEPARATOR)
+ * plus U+2029 (PARAGRAPH SEPARATOR)
+ */
+static const struct mb_ucsrange data_wctype_cntrl[] = {
        { 0x0000, 0x001F },
        { 0x007F, 0x009F },
-       { 0x2028, 0x2028 },
-       { 0x2029, 0x2029 }
+       { 0x2028, 0x2029 }
 };
 
-MAKE_ISW(ctrl)
+MAKE_ISW(cntrl)
 
-struct mb_ucsrange data_wctype_punct[]=
-{
+static const struct mb_ucsrange data_wctype_punct[] = {
        { 0x0021, 0x002F },
        { 0x003A, 0x0040 },
        { 0x005B, 0x0060 },
@@ -987,47 +2197,52 @@ struct mb_ucsrange data_wctype_punct[]=
        { 0x00BB, 0x00BF },
        { 0x00D7, 0x00D7 },
        { 0x00F7, 0x00F7 },
-       { 0x02B9, 0x02BA },
-       { 0x02C2, 0x02CF },
+       { 0x02C2, 0x02C5 },
        { 0x02D2, 0x02DF },
-       { 0x02E5, 0x02ED },
-       { 0x0300, 0x0344 },
-       { 0x0346, 0x034F },
-       { 0x0360, 0x036F },
-       { 0x0374, 0x0375 },
+       { 0x02E5, 0x02EB },
+       { 0x02ED, 0x02ED },
+       { 0x02EF, 0x0344 },
+       { 0x0346, 0x036F },
+       { 0x0375, 0x0375 },
        { 0x037E, 0x037E },
        { 0x0384, 0x0385 },
        { 0x0387, 0x0387 },
        { 0x03F6, 0x03F6 },
-       { 0x0482, 0x0486 },
-       { 0x0488, 0x0489 },
+       { 0x0482, 0x0489 },
        { 0x055A, 0x055F },
        { 0x0589, 0x058A },
-       { 0x0591, 0x05A1 },
-       { 0x05A3, 0x05B9 },
-       { 0x05BB, 0x05C4 },
+       { 0x058D, 0x058F },
+       { 0x0591, 0x05C7 },
        { 0x05F3, 0x05F4 },
-       { 0x060C, 0x060C },
-       { 0x061B, 0x061B },
-       { 0x061F, 0x061F },
-       { 0x064B, 0x0655 },
-       { 0x066A, 0x066D },
+       { 0x0600, 0x061C },
+       { 0x061E, 0x061F },
+       { 0x064B, 0x066D },
        { 0x0670, 0x0670 },
        { 0x06D4, 0x06D4 },
        { 0x06D6, 0x06E4 },
        { 0x06E7, 0x06ED },
+       { 0x06F0, 0x06F9 },
        { 0x06FD, 0x06FE },
        { 0x0700, 0x070D },
        { 0x070F, 0x070F },
        { 0x0711, 0x0711 },
        { 0x0730, 0x074A },
        { 0x07A6, 0x07B0 },
-       { 0x0901, 0x0903 },
-       { 0x093C, 0x093C },
-       { 0x093E, 0x094D },
-       { 0x0951, 0x0954 },
-       { 0x0962, 0x0965 },
-       { 0x0970, 0x0970 },
+       { 0x07C0, 0x07C9 },
+       { 0x07EB, 0x07F3 },
+       { 0x07F6, 0x07F9 },
+       { 0x0816, 0x0819 },
+       { 0x081B, 0x0823 },
+       { 0x0825, 0x0827 },
+       { 0x0829, 0x082D },
+       { 0x0830, 0x083E },
+       { 0x0859, 0x085B },
+       { 0x085E, 0x085E },
+       { 0x08E4, 0x0903 },
+       { 0x093A, 0x093C },
+       { 0x093E, 0x094F },
+       { 0x0951, 0x0957 },
+       { 0x0962, 0x0970 },
        { 0x0981, 0x0983 },
        { 0x09BC, 0x09BC },
        { 0x09BE, 0x09C4 },
@@ -1035,102 +2250,161 @@ struct mb_ucsrange data_wctype_punct[]=
        { 0x09CB, 0x09CD },
        { 0x09D7, 0x09D7 },
        { 0x09E2, 0x09E3 },
-       { 0x09F2, 0x09FA },
-       { 0x0A02, 0x0A02 },
+       { 0x09E6, 0x09EF },
+       { 0x09F2, 0x09FB },
+       { 0x0A01, 0x0A03 },
        { 0x0A3C, 0x0A3C },
        { 0x0A3E, 0x0A42 },
        { 0x0A47, 0x0A48 },
        { 0x0A4B, 0x0A4D },
-       { 0x0A70, 0x0A71 },
+       { 0x0A51, 0x0A51 },
+       { 0x0A66, 0x0A71 },
+       { 0x0A75, 0x0A75 },
        { 0x0A81, 0x0A83 },
        { 0x0ABC, 0x0ABC },
        { 0x0ABE, 0x0AC5 },
        { 0x0AC7, 0x0AC9 },
        { 0x0ACB, 0x0ACD },
+       { 0x0AE2, 0x0AE3 },
+       { 0x0AE6, 0x0AF1 },
        { 0x0B01, 0x0B03 },
        { 0x0B3C, 0x0B3C },
-       { 0x0B3E, 0x0B43 },
+       { 0x0B3E, 0x0B44 },
        { 0x0B47, 0x0B48 },
        { 0x0B4B, 0x0B4D },
        { 0x0B56, 0x0B57 },
-       { 0x0B70, 0x0B70 },
+       { 0x0B62, 0x0B63 },
+       { 0x0B66, 0x0B70 },
+       { 0x0B72, 0x0B77 },
        { 0x0B82, 0x0B82 },
        { 0x0BBE, 0x0BC2 },
        { 0x0BC6, 0x0BC8 },
        { 0x0BCA, 0x0BCD },
        { 0x0BD7, 0x0BD7 },
-       { 0x0BF0, 0x0BF2 },
-       { 0x0C01, 0x0C03 },
+       { 0x0BE6, 0x0BFA },
+       { 0x0C00, 0x0C03 },
        { 0x0C3E, 0x0C44 },
        { 0x0C46, 0x0C48 },
        { 0x0C4A, 0x0C4D },
        { 0x0C55, 0x0C56 },
-       { 0x0C82, 0x0C83 },
+       { 0x0C62, 0x0C63 },
+       { 0x0C66, 0x0C6F },
+       { 0x0C78, 0x0C7F },
+       { 0x0C81, 0x0C83 },
+       { 0x0CBC, 0x0CBC },
        { 0x0CBE, 0x0CC4 },
        { 0x0CC6, 0x0CC8 },
        { 0x0CCA, 0x0CCD },
        { 0x0CD5, 0x0CD6 },
-       { 0x0D02, 0x0D03 },
-       { 0x0D3E, 0x0D43 },
+       { 0x0CE2, 0x0CE3 },
+       { 0x0CE6, 0x0CEF },
+       { 0x0D01, 0x0D03 },
+       { 0x0D3E, 0x0D44 },
        { 0x0D46, 0x0D48 },
        { 0x0D4A, 0x0D4D },
        { 0x0D57, 0x0D57 },
+       { 0x0D62, 0x0D63 },
+       { 0x0D66, 0x0D75 },
+       { 0x0D79, 0x0D79 },
        { 0x0D82, 0x0D83 },
        { 0x0DCA, 0x0DCA },
        { 0x0DCF, 0x0DD4 },
        { 0x0DD6, 0x0DD6 },
        { 0x0DD8, 0x0DDF },
+       { 0x0DE6, 0x0DEF },
        { 0x0DF2, 0x0DF4 },
-       { 0x0E2F, 0x0E2F },
+       { 0x0E31, 0x0E31 },
+       { 0x0E34, 0x0E3A },
        { 0x0E3F, 0x0E3F },
-       { 0x0E46, 0x0E46 },
-       { 0x0E4F, 0x0E4F },
-       { 0x0E5A, 0x0E5B },
+       { 0x0E47, 0x0E5B },
        { 0x0EB1, 0x0EB1 },
        { 0x0EB4, 0x0EB9 },
        { 0x0EBB, 0x0EBC },
        { 0x0EC8, 0x0ECD },
-       { 0x0F01, 0x0F1F },
-       { 0x0F2A, 0x0F3F },
+       { 0x0ED0, 0x0ED9 },
+       { 0x0F01, 0x0F3F },
        { 0x0F71, 0x0F87 },
-       { 0x0F90, 0x0F97 },
+       { 0x0F8D, 0x0F97 },
        { 0x0F99, 0x0FBC },
        { 0x0FBE, 0x0FCC },
-       { 0x0FCF, 0x0FCF },
-       { 0x102C, 0x1032 },
-       { 0x1036, 0x1039 },
-       { 0x104A, 0x104F },
+       { 0x0FCE, 0x0FDA },
+       { 0x102B, 0x103E },
+       { 0x1040, 0x104F },
        { 0x1056, 0x1059 },
+       { 0x105E, 0x1060 },
+       { 0x1062, 0x1064 },
+       { 0x1067, 0x106D },
+       { 0x1071, 0x1074 },
+       { 0x1082, 0x108D },
+       { 0x108F, 0x109F },
        { 0x10FB, 0x10FB },
-       { 0x1361, 0x1368 },
-       { 0x1372, 0x137C },
+       { 0x135D, 0x137C },
+       { 0x1390, 0x1399 },
+       { 0x1400, 0x1400 },
        { 0x166D, 0x166E },
+       { 0x1680, 0x1680 },
        { 0x169B, 0x169C },
-       { 0x16EB, 0x16ED },
+       { 0x16EB, 0x16F0 },
        { 0x1712, 0x1714 },
        { 0x1732, 0x1736 },
        { 0x1752, 0x1753 },
        { 0x1772, 0x1773 },
        { 0x17B4, 0x17D6 },
        { 0x17D8, 0x17DB },
+       { 0x17DD, 0x17DD },
+       { 0x17E0, 0x17E9 },
+       { 0x17F0, 0x17F9 },
        { 0x1800, 0x180E },
+       { 0x1810, 0x1819 },
        { 0x18A9, 0x18A9 },
+       { 0x1920, 0x192B },
+       { 0x1930, 0x193B },
+       { 0x1940, 0x1940 },
+       { 0x1944, 0x194F },
+       { 0x19B0, 0x19C0 },
+       { 0x19C8, 0x19C9 },
+       { 0x19D0, 0x19DA },
+       { 0x19DE, 0x19FF },
+       { 0x1A17, 0x1A1B },
+       { 0x1A1E, 0x1A1F },
+       { 0x1A55, 0x1A5E },
+       { 0x1A60, 0x1A7C },
+       { 0x1A7F, 0x1A89 },
+       { 0x1A90, 0x1A99 },
+       { 0x1AA0, 0x1AA6 },
+       { 0x1AA8, 0x1AAD },
+       { 0x1AB0, 0x1ABE },
+       { 0x1B00, 0x1B04 },
+       { 0x1B34, 0x1B44 },
+       { 0x1B50, 0x1B7C },
+       { 0x1B80, 0x1B82 },
+       { 0x1BA1, 0x1BAD },
+       { 0x1BB0, 0x1BB9 },
+       { 0x1BE6, 0x1BF3 },
+       { 0x1BFC, 0x1BFF },
+       { 0x1C24, 0x1C37 },
+       { 0x1C3B, 0x1C49 },
+       { 0x1C50, 0x1C59 },
+       { 0x1C7E, 0x1C7F },
+       { 0x1CC0, 0x1CC7 },
+       { 0x1CD0, 0x1CE8 },
+       { 0x1CED, 0x1CED },
+       { 0x1CF2, 0x1CF4 },
+       { 0x1CF8, 0x1CF9 },
+       { 0x1DC0, 0x1DF5 },
+       { 0x1DFC, 0x1DFF },
        { 0x1FBD, 0x1FBD },
        { 0x1FBF, 0x1FC1 },
        { 0x1FCD, 0x1FCF },
        { 0x1FDD, 0x1FDF },
        { 0x1FED, 0x1FEF },
        { 0x1FFD, 0x1FFE },
-       { 0x2007, 0x2007 },
-       { 0x200C, 0x2027 },
-       { 0x202A, 0x2052 },
-       { 0x2057, 0x2057 },
-       { 0x2060, 0x2063 },
-       { 0x206A, 0x2070 },
+       { 0x2000, 0x2064 },
+       { 0x2066, 0x2070 },
        { 0x2074, 0x207E },
        { 0x2080, 0x208E },
-       { 0x20A0, 0x20B1 },
-       { 0x20D0, 0x20EA },
+       { 0x20A0, 0x20BD },
+       { 0x20D0, 0x20F0 },
        { 0x2100, 0x2101 },
        { 0x2103, 0x2106 },
        { 0x2108, 0x2109 },
@@ -1139,160 +2413,304 @@ struct mb_ucsrange data_wctype_punct[]=
        { 0x211E, 0x2123 },
        { 0x2125, 0x2125 },
        { 0x2127, 0x2127 },
+       { 0x2129, 0x2129 },
        { 0x212E, 0x212E },
-       { 0x2132, 0x2132 },
-       { 0x213A, 0x213A },
+       { 0x213A, 0x213B },
        { 0x2140, 0x2144 },
-       { 0x214A, 0x214B },
-       { 0x2153, 0x215F },
-       { 0x2190, 0x23CE },
+       { 0x214A, 0x214D },
+       { 0x214F, 0x215F },
+       { 0x2180, 0x2182 },
+       { 0x2185, 0x2189 },
+       { 0x2190, 0x23FA },
        { 0x2400, 0x2426 },
        { 0x2440, 0x244A },
-       { 0x2460, 0x249B },
-       { 0x24EA, 0x24FE },
-       { 0x2500, 0x2613 },
-       { 0x2616, 0x2617 },
-       { 0x2619, 0x267D },
-       { 0x2680, 0x2689 },
-       { 0x2701, 0x2704 },
-       { 0x2706, 0x2709 },
-       { 0x270C, 0x2727 },
-       { 0x2729, 0x274B },
-       { 0x274D, 0x274D },
-       { 0x274F, 0x2752 },
-       { 0x2756, 0x2756 },
-       { 0x2758, 0x275E },
-       { 0x2761, 0x2794 },
-       { 0x2798, 0x27AF },
-       { 0x27B1, 0x27BE },
-       { 0x27D0, 0x27EB },
-       { 0x27F0, 0x2AFF },
+       { 0x2460, 0x24B5 },
+       { 0x24EA, 0x2B73 },
+       { 0x2B76, 0x2B95 },
+       { 0x2B98, 0x2BB9 },
+       { 0x2BBD, 0x2BC8 },
+       { 0x2BCA, 0x2BD1 },
+       { 0x2CE5, 0x2CEA },
+       { 0x2CEF, 0x2CF1 },
+       { 0x2CF9, 0x2CFF },
+       { 0x2D70, 0x2D70 },
+       { 0x2D7F, 0x2D7F },
+       { 0x2DE0, 0x2E2E },
+       { 0x2E30, 0x2E42 },
        { 0x2E80, 0x2E99 },
        { 0x2E9B, 0x2EF3 },
        { 0x2F00, 0x2FD5 },
        { 0x2FF0, 0x2FFB },
-       { 0x3001, 0x3004 },
-       { 0x3008, 0x3020 },
-       { 0x302A, 0x3030 },
-       { 0x3036, 0x3037 },
+       { 0x3000, 0x3004 },
+       { 0x3007, 0x3030 },
+       { 0x3036, 0x303A },
        { 0x303D, 0x303F },
        { 0x3099, 0x309C },
        { 0x30A0, 0x30A0 },
        { 0x30FB, 0x30FB },
        { 0x3190, 0x319F },
-       { 0x3200, 0x321C },
-       { 0x3220, 0x3243 },
-       { 0x3251, 0x327B },
-       { 0x327F, 0x32CB },
-       { 0x32D0, 0x32FE },
-       { 0x3300, 0x3376 },
-       { 0x337B, 0x33DD },
-       { 0x33E0, 0x33FE },
+       { 0x31C0, 0x31E3 },
+       { 0x3200, 0x321E },
+       { 0x3220, 0x32FE },
+       { 0x3300, 0x33FF },
+       { 0x4DC0, 0x4DFF },
        { 0xA490, 0xA4C6 },
+       { 0xA4FE, 0xA4FF },
+       { 0xA60D, 0xA60F },
+       { 0xA620, 0xA629 },
+       { 0xA66F, 0xA67E },
+       { 0xA69F, 0xA69F },
+       { 0xA6E6, 0xA6F7 },
+       { 0xA700, 0xA716 },
+       { 0xA720, 0xA721 },
+       { 0xA789, 0xA78A },
+       { 0xA802, 0xA802 },
+       { 0xA806, 0xA806 },
+       { 0xA80B, 0xA80B },
+       { 0xA823, 0xA82B },
+       { 0xA830, 0xA839 },
+       { 0xA874, 0xA877 },
+       { 0xA880, 0xA881 },
+       { 0xA8B4, 0xA8C4 },
+       { 0xA8CE, 0xA8D9 },
+       { 0xA8E0, 0xA8F1 },
+       { 0xA8F8, 0xA8FA },
+       { 0xA900, 0xA909 },
+       { 0xA926, 0xA92F },
+       { 0xA947, 0xA953 },
+       { 0xA95F, 0xA95F },
+       { 0xA980, 0xA983 },
+       { 0xA9B3, 0xA9CD },
+       { 0xA9D0, 0xA9D9 },
+       { 0xA9DE, 0xA9DF },
+       { 0xA9E5, 0xA9E5 },
+       { 0xA9F0, 0xA9F9 },
+       { 0xAA29, 0xAA36 },
+       { 0xAA43, 0xAA43 },
+       { 0xAA4C, 0xAA4D },
+       { 0xAA50, 0xAA59 },
+       { 0xAA5C, 0xAA5F },
+       { 0xAA77, 0xAA79 },
+       { 0xAA7B, 0xAA7D },
+       { 0xAAB0, 0xAAB0 },
+       { 0xAAB2, 0xAAB4 },
+       { 0xAAB7, 0xAAB8 },
+       { 0xAABE, 0xAABF },
+       { 0xAAC1, 0xAAC1 },
+       { 0xAADE, 0xAADF },
+       { 0xAAEB, 0xAAF1 },
+       { 0xAAF5, 0xAAF6 },
+       { 0xAB5B, 0xAB5B },
+       { 0xABE3, 0xABED },
+       { 0xABF0, 0xABF9 },
        { 0xE000, 0xF8FF },
        { 0xFB1E, 0xFB1E },
        { 0xFB29, 0xFB29 },
+       { 0xFBB2, 0xFBC1 },
        { 0xFD3E, 0xFD3F },
-       { 0xFDFC, 0xFDFC },
-       { 0xFE00, 0xFE0F },
-       { 0xFE20, 0xFE23 },
-       { 0xFE30, 0xFE44 },
-       { 0xFE49, 0xFE52 },
+       { 0xFDFC, 0xFDFD },
+       { 0xFE00, 0xFE19 },
+       { 0xFE20, 0xFE2D },
+       { 0xFE30, 0xFE52 },
        { 0xFE54, 0xFE66 },
        { 0xFE68, 0xFE6B },
        { 0xFEFF, 0xFEFF },
-       { 0xFF01, 0xFF0F },
-       { 0xFF1A, 0xFF20 },
+       { 0xFF01, 0xFF20 },
        { 0xFF3B, 0xFF40 },
        { 0xFF5B, 0xFF65 },
        { 0xFFE0, 0xFFE6 },
        { 0xFFE8, 0xFFEE },
        { 0xFFF9, 0xFFFD },
-       { 0x00010320, 0x00010323 },
-       { 0x0001D000, 0x0001D0F5 },
-       { 0x0001D100, 0x0001D126 },
-       { 0x0001D12A, 0x0001D1DD },
-       { 0x0001D6C1, 0x0001D6C1 },
-       { 0x0001D6DB, 0x0001D6DB },
-       { 0x0001D6FB, 0x0001D6FB },
-       { 0x0001D715, 0x0001D715 },
-       { 0x0001D735, 0x0001D735 },
-       { 0x0001D74F, 0x0001D74F },
-       { 0x0001D76F, 0x0001D76F },
-       { 0x0001D789, 0x0001D789 },
-       { 0x0001D7A9, 0x0001D7A9 },
-       { 0x0001D7C3, 0x0001D7C3 },
-       { 0x000E0001, 0x000E0001 },
-       { 0x000E0020, 0x000E007F },
-       { 0x000F0000, 0x000FFFFD },
-       { 0x00100000, 0x0010FFFD }
+       { 0x10100, 0x10102 },
+       { 0x10107, 0x10133 },
+       { 0x10137, 0x1018C },
+       { 0x10190, 0x1019B },
+       { 0x101A0, 0x101A0 },
+       { 0x101D0, 0x101FD },
+       { 0x102E0, 0x102FB },
+       { 0x10320, 0x10323 },
+       { 0x10341, 0x10341 },
+       { 0x1034A, 0x1034A },
+       { 0x10376, 0x1037A },
+       { 0x1039F, 0x1039F },
+       { 0x103D0, 0x103D5 },
+       { 0x104A0, 0x104A9 },
+       { 0x1056F, 0x1056F },
+       { 0x10857, 0x1085F },
+       { 0x10877, 0x1087F },
+       { 0x108A7, 0x108AF },
+       { 0x10916, 0x1091B },
+       { 0x1091F, 0x1091F },
+       { 0x1093F, 0x1093F },
+       { 0x10A01, 0x10A03 },
+       { 0x10A05, 0x10A06 },
+       { 0x10A0C, 0x10A0F },
+       { 0x10A38, 0x10A3A },
+       { 0x10A3F, 0x10A47 },
+       { 0x10A50, 0x10A58 },
+       { 0x10A7D, 0x10A7F },
+       { 0x10A9D, 0x10A9F },
+       { 0x10AC8, 0x10AC8 },
+       { 0x10AE5, 0x10AE6 },
+       { 0x10AEB, 0x10AF6 },
+       { 0x10B39, 0x10B3F },
+       { 0x10B58, 0x10B5F },
+       { 0x10B78, 0x10B7F },
+       { 0x10B99, 0x10B9C },
+       { 0x10BA9, 0x10BAF },
+       { 0x10E60, 0x10E7E },
+       { 0x11000, 0x11002 },
+       { 0x11038, 0x1104D },
+       { 0x11052, 0x1106F },
+       { 0x1107F, 0x11082 },
+       { 0x110B0, 0x110C1 },
+       { 0x110F0, 0x110F9 },
+       { 0x11100, 0x11102 },
+       { 0x11127, 0x11134 },
+       { 0x11136, 0x11143 },
+       { 0x11173, 0x11175 },
+       { 0x11180, 0x11182 },
+       { 0x111B3, 0x111C0 },
+       { 0x111C5, 0x111C8 },
+       { 0x111CD, 0x111CD },
+       { 0x111D0, 0x111D9 },
+       { 0x111E1, 0x111F4 },
+       { 0x1122C, 0x1123D },
+       { 0x112DF, 0x112EA },
+       { 0x112F0, 0x112F9 },
+       { 0x11301, 0x11303 },
+       { 0x1133C, 0x1133C },
+       { 0x1133E, 0x11344 },
+       { 0x11347, 0x11348 },
+       { 0x1134B, 0x1134D },
+       { 0x11357, 0x11357 },
+       { 0x11362, 0x11363 },
+       { 0x11366, 0x1136C },
+       { 0x11370, 0x11374 },
+       { 0x114B0, 0x114C3 },
+       { 0x114C6, 0x114C6 },
+       { 0x114D0, 0x114D9 },
+       { 0x115AF, 0x115B5 },
+       { 0x115B8, 0x115C9 },
+       { 0x11630, 0x11643 },
+       { 0x11650, 0x11659 },
+       { 0x116AB, 0x116B7 },
+       { 0x116C0, 0x116C9 },
+       { 0x118E0, 0x118F2 },
+       { 0x12400, 0x1246E },
+       { 0x12470, 0x12474 },
+       { 0x16A60, 0x16A69 },
+       { 0x16A6E, 0x16A6F },
+       { 0x16AF0, 0x16AF5 },
+       { 0x16B30, 0x16B3F },
+       { 0x16B44, 0x16B45 },
+       { 0x16B50, 0x16B59 },
+       { 0x16B5B, 0x16B61 },
+       { 0x16F51, 0x16F7E },
+       { 0x16F8F, 0x16F92 },
+       { 0x1BC9C, 0x1BCA3 },
+       { 0x1D000, 0x1D0F5 },
+       { 0x1D100, 0x1D126 },
+       { 0x1D129, 0x1D1DD },
+       { 0x1D200, 0x1D245 },
+       { 0x1D300, 0x1D356 },
+       { 0x1D360, 0x1D371 },
+       { 0x1D6C1, 0x1D6C1 },
+       { 0x1D6DB, 0x1D6DB },
+       { 0x1D6FB, 0x1D6FB },
+       { 0x1D715, 0x1D715 },
+       { 0x1D735, 0x1D735 },
+       { 0x1D74F, 0x1D74F },
+       { 0x1D76F, 0x1D76F },
+       { 0x1D789, 0x1D789 },
+       { 0x1D7A9, 0x1D7A9 },
+       { 0x1D7C3, 0x1D7C3 },
+       { 0x1D7CE, 0x1D7FF },
+       { 0x1E8C7, 0x1E8D6 },
+       { 0x1EEF0, 0x1EEF1 },
+       { 0x1F000, 0x1F02B },
+       { 0x1F030, 0x1F093 },
+       { 0x1F0A0, 0x1F0AE },
+       { 0x1F0B1, 0x1F0BF },
+       { 0x1F0C1, 0x1F0CF },
+       { 0x1F0D1, 0x1F0F5 },
+       { 0x1F100, 0x1F10C },
+       { 0x1F110, 0x1F12E },
+       { 0x1F130, 0x1F16B },
+       { 0x1F170, 0x1F19A },
+       { 0x1F1E6, 0x1F202 },
+       { 0x1F210, 0x1F23A },
+       { 0x1F240, 0x1F248 },
+       { 0x1F250, 0x1F251 },
+       { 0x1F300, 0x1F32C },
+       { 0x1F330, 0x1F37D },
+       { 0x1F380, 0x1F3CE },
+       { 0x1F3D4, 0x1F3F7 },
+       { 0x1F400, 0x1F4FE },
+       { 0x1F500, 0x1F54A },
+       { 0x1F550, 0x1F579 },
+       { 0x1F57B, 0x1F5A3 },
+       { 0x1F5A5, 0x1F642 },
+       { 0x1F645, 0x1F6CF },
+       { 0x1F6E0, 0x1F6EC },
+       { 0x1F6F0, 0x1F6F3 },
+       { 0x1F700, 0x1F773 },
+       { 0x1F780, 0x1F7D4 },
+       { 0x1F800, 0x1F80B },
+       { 0x1F810, 0x1F847 },
+       { 0x1F850, 0x1F859 },
+       { 0x1F860, 0x1F887 },
+       { 0x1F890, 0x1F8AD },
+       { 0xE0001, 0xE0001 },
+       { 0xE0020, 0xE007F },
+       { 0xE0100, 0xE01EF },
+       { 0xF0000, 0xFFFFD },
+       { 0x100000, 0x10FFFD }
 };
 
 MAKE_ISW(punct)
 
-struct mb_ucsrange data_wctype_graph[]=
-{
+static const struct mb_ucsrange data_wctype_graph[] = {
        { 0x0021, 0x007E },
-       { 0x00A0, 0x0220 },
-       { 0x0222, 0x0233 },
-       { 0x0250, 0x02AD },
-       { 0x02B0, 0x02EE },
-       { 0x0300, 0x034F },
-       { 0x0360, 0x036F },
-       { 0x0374, 0x0375 },
-       { 0x037A, 0x037A },
-       { 0x037E, 0x037E },
+       { 0x00A0, 0x0377 },
+       { 0x037A, 0x037F },
        { 0x0384, 0x038A },
        { 0x038C, 0x038C },
        { 0x038E, 0x03A1 },
-       { 0x03A3, 0x03CE },
-       { 0x03D0, 0x03F6 },
-       { 0x0400, 0x0486 },
-       { 0x0488, 0x04CE },
-       { 0x04D0, 0x04F5 },
-       { 0x04F8, 0x04F9 },
-       { 0x0500, 0x050F },
+       { 0x03A3, 0x052F },
        { 0x0531, 0x0556 },
        { 0x0559, 0x055F },
        { 0x0561, 0x0587 },
        { 0x0589, 0x058A },
-       { 0x0591, 0x05A1 },
-       { 0x05A3, 0x05B9 },
-       { 0x05BB, 0x05C4 },
+       { 0x058D, 0x058F },
+       { 0x0591, 0x05C7 },
        { 0x05D0, 0x05EA },
        { 0x05F0, 0x05F4 },
-       { 0x060C, 0x060C },
-       { 0x061B, 0x061B },
-       { 0x061F, 0x061F },
-       { 0x0621, 0x063A },
-       { 0x0640, 0x0655 },
-       { 0x0660, 0x06ED },
-       { 0x06F0, 0x06FE },
-       { 0x0700, 0x070D },
-       { 0x070F, 0x072C },
-       { 0x0730, 0x074A },
-       { 0x0780, 0x07B1 },
-       { 0x0901, 0x0903 },
-       { 0x0905, 0x0939 },
-       { 0x093C, 0x094D },
-       { 0x0950, 0x0954 },
-       { 0x0958, 0x0970 },
-       { 0x0981, 0x0983 },
+       { 0x0600, 0x061C },
+       { 0x061E, 0x070D },
+       { 0x070F, 0x074A },
+       { 0x074D, 0x07B1 },
+       { 0x07C0, 0x07FA },
+       { 0x0800, 0x082D },
+       { 0x0830, 0x083E },
+       { 0x0840, 0x085B },
+       { 0x085E, 0x085E },
+       { 0x08A0, 0x08B2 },
+       { 0x08E4, 0x0983 },
        { 0x0985, 0x098C },
        { 0x098F, 0x0990 },
        { 0x0993, 0x09A8 },
        { 0x09AA, 0x09B0 },
        { 0x09B2, 0x09B2 },
        { 0x09B6, 0x09B9 },
-       { 0x09BC, 0x09BC },
-       { 0x09BE, 0x09C4 },
+       { 0x09BC, 0x09C4 },
        { 0x09C7, 0x09C8 },
-       { 0x09CB, 0x09CD },
+       { 0x09CB, 0x09CE },
        { 0x09D7, 0x09D7 },
        { 0x09DC, 0x09DD },
        { 0x09DF, 0x09E3 },
-       { 0x09E6, 0x09FA },
-       { 0x0A02, 0x0A02 },
+       { 0x09E6, 0x09FB },
+       { 0x0A01, 0x0A03 },
        { 0x0A05, 0x0A0A },
        { 0x0A0F, 0x0A10 },
        { 0x0A13, 0x0A28 },
@@ -1304,12 +2722,12 @@ struct mb_ucsrange data_wctype_graph[]=
        { 0x0A3E, 0x0A42 },
        { 0x0A47, 0x0A48 },
        { 0x0A4B, 0x0A4D },
+       { 0x0A51, 0x0A51 },
        { 0x0A59, 0x0A5C },
        { 0x0A5E, 0x0A5E },
-       { 0x0A66, 0x0A74 },
+       { 0x0A66, 0x0A75 },
        { 0x0A81, 0x0A83 },
-       { 0x0A85, 0x0A8B },
-       { 0x0A8D, 0x0A8D },
+       { 0x0A85, 0x0A8D },
        { 0x0A8F, 0x0A91 },
        { 0x0A93, 0x0AA8 },
        { 0x0AAA, 0x0AB0 },
@@ -1319,22 +2737,22 @@ struct mb_ucsrange data_wctype_graph[]=
        { 0x0AC7, 0x0AC9 },
        { 0x0ACB, 0x0ACD },
        { 0x0AD0, 0x0AD0 },
-       { 0x0AE0, 0x0AE0 },
-       { 0x0AE6, 0x0AEF },
+       { 0x0AE0, 0x0AE3 },
+       { 0x0AE6, 0x0AF1 },
        { 0x0B01, 0x0B03 },
        { 0x0B05, 0x0B0C },
        { 0x0B0F, 0x0B10 },
        { 0x0B13, 0x0B28 },
        { 0x0B2A, 0x0B30 },
        { 0x0B32, 0x0B33 },
-       { 0x0B36, 0x0B39 },
-       { 0x0B3C, 0x0B43 },
+       { 0x0B35, 0x0B39 },
+       { 0x0B3C, 0x0B44 },
        { 0x0B47, 0x0B48 },
        { 0x0B4B, 0x0B4D },
        { 0x0B56, 0x0B57 },
        { 0x0B5C, 0x0B5D },
-       { 0x0B5F, 0x0B61 },
-       { 0x0B66, 0x0B70 },
+       { 0x0B5F, 0x0B63 },
+       { 0x0B66, 0x0B77 },
        { 0x0B82, 0x0B83 },
        { 0x0B85, 0x0B8A },
        { 0x0B8E, 0x0B90 },
@@ -1344,49 +2762,51 @@ struct mb_ucsrange data_wctype_graph[]=
        { 0x0B9E, 0x0B9F },
        { 0x0BA3, 0x0BA4 },
        { 0x0BA8, 0x0BAA },
-       { 0x0BAE, 0x0BB5 },
-       { 0x0BB7, 0x0BB9 },
+       { 0x0BAE, 0x0BB9 },
        { 0x0BBE, 0x0BC2 },
        { 0x0BC6, 0x0BC8 },
        { 0x0BCA, 0x0BCD },
+       { 0x0BD0, 0x0BD0 },
        { 0x0BD7, 0x0BD7 },
-       { 0x0BE7, 0x0BF2 },
-       { 0x0C01, 0x0C03 },
+       { 0x0BE6, 0x0BFA },
+       { 0x0C00, 0x0C03 },
        { 0x0C05, 0x0C0C },
        { 0x0C0E, 0x0C10 },
        { 0x0C12, 0x0C28 },
-       { 0x0C2A, 0x0C33 },
-       { 0x0C35, 0x0C39 },
-       { 0x0C3E, 0x0C44 },
+       { 0x0C2A, 0x0C39 },
+       { 0x0C3D, 0x0C44 },
        { 0x0C46, 0x0C48 },
        { 0x0C4A, 0x0C4D },
        { 0x0C55, 0x0C56 },
-       { 0x0C60, 0x0C61 },
+       { 0x0C58, 0x0C59 },
+       { 0x0C60, 0x0C63 },
        { 0x0C66, 0x0C6F },
-       { 0x0C82, 0x0C83 },
+       { 0x0C78, 0x0C7F },
+       { 0x0C81, 0x0C83 },
        { 0x0C85, 0x0C8C },
        { 0x0C8E, 0x0C90 },
        { 0x0C92, 0x0CA8 },
        { 0x0CAA, 0x0CB3 },
        { 0x0CB5, 0x0CB9 },
-       { 0x0CBE, 0x0CC4 },
+       { 0x0CBC, 0x0CC4 },
        { 0x0CC6, 0x0CC8 },
        { 0x0CCA, 0x0CCD },
        { 0x0CD5, 0x0CD6 },
        { 0x0CDE, 0x0CDE },
-       { 0x0CE0, 0x0CE1 },
+       { 0x0CE0, 0x0CE3 },
        { 0x0CE6, 0x0CEF },
-       { 0x0D02, 0x0D03 },
+       { 0x0CF1, 0x0CF2 },
+       { 0x0D01, 0x0D03 },
        { 0x0D05, 0x0D0C },
        { 0x0D0E, 0x0D10 },
-       { 0x0D12, 0x0D28 },
-       { 0x0D2A, 0x0D39 },
-       { 0x0D3E, 0x0D43 },
+       { 0x0D12, 0x0D3A },
+       { 0x0D3D, 0x0D44 },
        { 0x0D46, 0x0D48 },
-       { 0x0D4A, 0x0D4D },
+       { 0x0D4A, 0x0D4E },
        { 0x0D57, 0x0D57 },
-       { 0x0D60, 0x0D61 },
-       { 0x0D66, 0x0D6F },
+       { 0x0D60, 0x0D63 },
+       { 0x0D66, 0x0D75 },
+       { 0x0D79, 0x0D7F },
        { 0x0D82, 0x0D83 },
        { 0x0D85, 0x0D96 },
        { 0x0D9A, 0x0DB1 },
@@ -1397,6 +2817,7 @@ struct mb_ucsrange data_wctype_graph[]=
        { 0x0DCF, 0x0DD4 },
        { 0x0DD6, 0x0DD6 },
        { 0x0DD8, 0x0DDF },
+       { 0x0DE6, 0x0DEF },
        { 0x0DF2, 0x0DF4 },
        { 0x0E01, 0x0E3A },
        { 0x0E3F, 0x0E5B },
@@ -1417,56 +2838,37 @@ struct mb_ucsrange data_wctype_graph[]=
        { 0x0EC6, 0x0EC6 },
        { 0x0EC8, 0x0ECD },
        { 0x0ED0, 0x0ED9 },
-       { 0x0EDC, 0x0EDD },
+       { 0x0EDC, 0x0EDF },
        { 0x0F00, 0x0F47 },
-       { 0x0F49, 0x0F6A },
-       { 0x0F71, 0x0F8B },
-       { 0x0F90, 0x0F97 },
+       { 0x0F49, 0x0F6C },
+       { 0x0F71, 0x0F97 },
        { 0x0F99, 0x0FBC },
        { 0x0FBE, 0x0FCC },
-       { 0x0FCF, 0x0FCF },
-       { 0x1000, 0x1021 },
-       { 0x1023, 0x1027 },
-       { 0x1029, 0x102A },
-       { 0x102C, 0x1032 },
-       { 0x1036, 0x1039 },
-       { 0x1040, 0x1059 },
-       { 0x10A0, 0x10C5 },
-       { 0x10D0, 0x10F8 },
-       { 0x10FB, 0x10FB },
-       { 0x1100, 0x1159 },
-       { 0x115F, 0x11A2 },
-       { 0x11A8, 0x11F9 },
-       { 0x1200, 0x1206 },
-       { 0x1208, 0x1246 },
-       { 0x1248, 0x1248 },
+       { 0x0FCE, 0x0FDA },
+       { 0x1000, 0x10C5 },
+       { 0x10C7, 0x10C7 },
+       { 0x10CD, 0x10CD },
+       { 0x10D0, 0x1248 },
        { 0x124A, 0x124D },
        { 0x1250, 0x1256 },
        { 0x1258, 0x1258 },
        { 0x125A, 0x125D },
-       { 0x1260, 0x1286 },
-       { 0x1288, 0x1288 },
+       { 0x1260, 0x1288 },
        { 0x128A, 0x128D },
-       { 0x1290, 0x12AE },
-       { 0x12B0, 0x12B0 },
+       { 0x1290, 0x12B0 },
        { 0x12B2, 0x12B5 },
        { 0x12B8, 0x12BE },
        { 0x12C0, 0x12C0 },
        { 0x12C2, 0x12C5 },
-       { 0x12C8, 0x12CE },
-       { 0x12D0, 0x12D6 },
-       { 0x12D8, 0x12EE },
-       { 0x12F0, 0x130E },
-       { 0x1310, 0x1310 },
+       { 0x12C8, 0x12D6 },
+       { 0x12D8, 0x1310 },
        { 0x1312, 0x1315 },
-       { 0x1318, 0x131E },
-       { 0x1320, 0x1346 },
-       { 0x1348, 0x135A },
-       { 0x1361, 0x137C },
+       { 0x1318, 0x135A },
+       { 0x135D, 0x137C },
+       { 0x1380, 0x1399 },
        { 0x13A0, 0x13F4 },
-       { 0x1401, 0x1676 },
-       { 0x1681, 0x169C },
-       { 0x16A0, 0x16F0 },
+       { 0x1400, 0x169C },
+       { 0x16A0, 0x16F8 },
        { 0x1700, 0x170C },
        { 0x170E, 0x1714 },
        { 0x1720, 0x1736 },
@@ -1474,15 +2876,41 @@ struct mb_ucsrange data_wctype_graph[]=
        { 0x1760, 0x176C },
        { 0x176E, 0x1770 },
        { 0x1772, 0x1773 },
-       { 0x1780, 0x17DC },
+       { 0x1780, 0x17DD },
        { 0x17E0, 0x17E9 },
+       { 0x17F0, 0x17F9 },
        { 0x1800, 0x180E },
        { 0x1810, 0x1819 },
        { 0x1820, 0x1877 },
-       { 0x1880, 0x18A9 },
-       { 0x1E00, 0x1E9B },
-       { 0x1EA0, 0x1EF9 },
-       { 0x1F00, 0x1F15 },
+       { 0x1880, 0x18AA },
+       { 0x18B0, 0x18F5 },
+       { 0x1900, 0x191E },
+       { 0x1920, 0x192B },
+       { 0x1930, 0x193B },
+       { 0x1940, 0x1940 },
+       { 0x1944, 0x196D },
+       { 0x1970, 0x1974 },
+       { 0x1980, 0x19AB },
+       { 0x19B0, 0x19C9 },
+       { 0x19D0, 0x19DA },
+       { 0x19DE, 0x1A1B },
+       { 0x1A1E, 0x1A5E },
+       { 0x1A60, 0x1A7C },
+       { 0x1A7F, 0x1A89 },
+       { 0x1A90, 0x1A99 },
+       { 0x1AA0, 0x1AAD },
+       { 0x1AB0, 0x1ABE },
+       { 0x1B00, 0x1B4B },
+       { 0x1B50, 0x1B7C },
+       { 0x1B80, 0x1BF3 },
+       { 0x1BFC, 0x1C37 },
+       { 0x1C3B, 0x1C49 },
+       { 0x1C4D, 0x1C7F },
+       { 0x1CC0, 0x1CC7 },
+       { 0x1CD0, 0x1CF6 },
+       { 0x1CF8, 0x1CF9 },
+       { 0x1D00, 0x1DF5 },
+       { 0x1DFC, 0x1F15 },
        { 0x1F18, 0x1F1D },
        { 0x1F20, 0x1F45 },
        { 0x1F48, 0x1F4D },
@@ -1498,64 +2926,92 @@ struct mb_ucsrange data_wctype_graph[]=
        { 0x1FDD, 0x1FEF },
        { 0x1FF2, 0x1FF4 },
        { 0x1FF6, 0x1FFE },
-       { 0x2007, 0x2007 },
-       { 0x200C, 0x2027 },
-       { 0x202A, 0x2052 },
-       { 0x2057, 0x2057 },
-       { 0x2060, 0x2063 },
-       { 0x206A, 0x2071 },
+       { 0x2000, 0x2064 },
+       { 0x2066, 0x2071 },
        { 0x2074, 0x208E },
-       { 0x20A0, 0x20B1 },
-       { 0x20D0, 0x20EA },
-       { 0x2100, 0x213A },
-       { 0x213D, 0x214B },
-       { 0x2153, 0x2183 },
-       { 0x2190, 0x23CE },
+       { 0x2090, 0x209C },
+       { 0x20A0, 0x20BD },
+       { 0x20D0, 0x20F0 },
+       { 0x2100, 0x2189 },
+       { 0x2190, 0x23FA },
        { 0x2400, 0x2426 },
        { 0x2440, 0x244A },
-       { 0x2460, 0x24FE },
-       { 0x2500, 0x2613 },
-       { 0x2616, 0x2617 },
-       { 0x2619, 0x267D },
-       { 0x2680, 0x2689 },
-       { 0x2701, 0x2704 },
-       { 0x2706, 0x2709 },
-       { 0x270C, 0x2727 },
-       { 0x2729, 0x274B },
-       { 0x274D, 0x274D },
-       { 0x274F, 0x2752 },
-       { 0x2756, 0x2756 },
-       { 0x2758, 0x275E },
-       { 0x2761, 0x2794 },
-       { 0x2798, 0x27AF },
-       { 0x27B1, 0x27BE },
-       { 0x27D0, 0x27EB },
-       { 0x27F0, 0x2AFF },
+       { 0x2460, 0x2B73 },
+       { 0x2B76, 0x2B95 },
+       { 0x2B98, 0x2BB9 },
+       { 0x2BBD, 0x2BC8 },
+       { 0x2BCA, 0x2BD1 },
+       { 0x2C00, 0x2C2E },
+       { 0x2C30, 0x2C5E },
+       { 0x2C60, 0x2CF3 },
+       { 0x2CF9, 0x2D25 },
+       { 0x2D27, 0x2D27 },
+       { 0x2D2D, 0x2D2D },
+       { 0x2D30, 0x2D67 },
+       { 0x2D6F, 0x2D70 },
+       { 0x2D7F, 0x2D96 },
+       { 0x2DA0, 0x2DA6 },
+       { 0x2DA8, 0x2DAE },
+       { 0x2DB0, 0x2DB6 },
+       { 0x2DB8, 0x2DBE },
+       { 0x2DC0, 0x2DC6 },
+       { 0x2DC8, 0x2DCE },
+       { 0x2DD0, 0x2DD6 },
+       { 0x2DD8, 0x2DDE },
+       { 0x2DE0, 0x2E42 },
        { 0x2E80, 0x2E99 },
        { 0x2E9B, 0x2EF3 },
        { 0x2F00, 0x2FD5 },
        { 0x2FF0, 0x2FFB },
-       { 0x3001, 0x303F },
+       { 0x3000, 0x303F },
        { 0x3041, 0x3096 },
        { 0x3099, 0x30FF },
-       { 0x3105, 0x312C },
+       { 0x3105, 0x312D },
        { 0x3131, 0x318E },
-       { 0x3190, 0x31B7 },
-       { 0x31F0, 0x321C },
-       { 0x3220, 0x3243 },
-       { 0x3251, 0x327B },
-       { 0x327F, 0x32CB },
-       { 0x32D0, 0x32FE },
-       { 0x3300, 0x3376 },
-       { 0x337B, 0x33DD },
-       { 0x33E0, 0x33FE },
-       { 0x3400, 0x4DB5 },
-       { 0x4E00, 0x9FA5 },
+       { 0x3190, 0x31BA },
+       { 0x31C0, 0x31E3 },
+       { 0x31F0, 0x321E },
+       { 0x3220, 0x32FE },
+       { 0x3300, 0x4DB5 },
+       { 0x4DC0, 0x9FCC },
        { 0xA000, 0xA48C },
        { 0xA490, 0xA4C6 },
+       { 0xA4D0, 0xA62B },
+       { 0xA640, 0xA69D },
+       { 0xA69F, 0xA6F7 },
+       { 0xA700, 0xA78E },
+       { 0xA790, 0xA7AD },
+       { 0xA7B0, 0xA7B1 },
+       { 0xA7F7, 0xA82B },
+       { 0xA830, 0xA839 },
+       { 0xA840, 0xA877 },
+       { 0xA880, 0xA8C4 },
+       { 0xA8CE, 0xA8D9 },
+       { 0xA8E0, 0xA8FB },
+       { 0xA900, 0xA953 },
+       { 0xA95F, 0xA97C },
+       { 0xA980, 0xA9CD },
+       { 0xA9CF, 0xA9D9 },
+       { 0xA9DE, 0xA9FE },
+       { 0xAA00, 0xAA36 },
+       { 0xAA40, 0xAA4D },
+       { 0xAA50, 0xAA59 },
+       { 0xAA5C, 0xAAC2 },
+       { 0xAADB, 0xAAF6 },
+       { 0xAB01, 0xAB06 },
+       { 0xAB09, 0xAB0E },
+       { 0xAB11, 0xAB16 },
+       { 0xAB20, 0xAB26 },
+       { 0xAB28, 0xAB2E },
+       { 0xAB30, 0xAB5F },
+       { 0xAB64, 0xAB65 },
+       { 0xABC0, 0xABED },
+       { 0xABF0, 0xABF9 },
        { 0xAC00, 0xD7A3 },
-       { 0xE000, 0xFA2D },
-       { 0xFA30, 0xFA6A },
+       { 0xD7B0, 0xD7C6 },
+       { 0xD7CB, 0xD7FB },
+       { 0xE000, 0xFA6D },
+       { 0xFA70, 0xFAD9 },
        { 0xFB00, 0xFB06 },
        { 0xFB13, 0xFB17 },
        { 0xFB1D, 0xFB36 },
@@ -1563,15 +3019,14 @@ struct mb_ucsrange data_wctype_graph[]=
        { 0xFB3E, 0xFB3E },
        { 0xFB40, 0xFB41 },
        { 0xFB43, 0xFB44 },
-       { 0xFB46, 0xFBB1 },
+       { 0xFB46, 0xFBC1 },
        { 0xFBD3, 0xFD3F },
        { 0xFD50, 0xFD8F },
        { 0xFD92, 0xFDC7 },
-       { 0xFDF0, 0xFDFC },
-       { 0xFE00, 0xFE0F },
-       { 0xFE20, 0xFE23 },
-       { 0xFE30, 0xFE46 },
-       { 0xFE49, 0xFE52 },
+       { 0xFDF0, 0xFDFD },
+       { 0xFE00, 0xFE19 },
+       { 0xFE20, 0xFE2D },
+       { 0xFE30, 0xFE52 },
        { 0xFE54, 0xFE66 },
        { 0xFE68, 0xFE6B },
        { 0xFE70, 0xFE74 },
@@ -1585,109 +3040,283 @@ struct mb_ucsrange data_wctype_graph[]=
        { 0xFFE0, 0xFFE6 },
        { 0xFFE8, 0xFFEE },
        { 0xFFF9, 0xFFFD },
-       { 0x00010300, 0x0001031E },
-       { 0x00010320, 0x00010323 },
-       { 0x00010330, 0x0001034A },
-       { 0x00010400, 0x00010425 },
-       { 0x00010428, 0x0001044D },
-       { 0x0001D000, 0x0001D0F5 },
-       { 0x0001D100, 0x0001D126 },
-       { 0x0001D12A, 0x0001D1DD },
-       { 0x0001D400, 0x0001D454 },
-       { 0x0001D456, 0x0001D49C },
-       { 0x0001D49E, 0x0001D49F },
-       { 0x0001D4A2, 0x0001D4A2 },
-       { 0x0001D4A5, 0x0001D4A6 },
-       { 0x0001D4A9, 0x0001D4AC },
-       { 0x0001D4AE, 0x0001D4B9 },
-       { 0x0001D4BB, 0x0001D4BB },
-       { 0x0001D4BD, 0x0001D4C0 },
-       { 0x0001D4C2, 0x0001D4C3 },
-       { 0x0001D4C5, 0x0001D505 },
-       { 0x0001D507, 0x0001D50A },
-       { 0x0001D50D, 0x0001D514 },
-       { 0x0001D516, 0x0001D51C },
-       { 0x0001D51E, 0x0001D539 },
-       { 0x0001D53B, 0x0001D53E },
-       { 0x0001D540, 0x0001D544 },
-       { 0x0001D546, 0x0001D546 },
-       { 0x0001D54A, 0x0001D550 },
-       { 0x0001D552, 0x0001D6A3 },
-       { 0x0001D6A8, 0x0001D7C9 },
-       { 0x0001D7CE, 0x0001D7FF },
-       { 0x00020000, 0x0002A6D6 },
-       { 0x0002F800, 0x0002FA1D },
-       { 0x000E0001, 0x000E0001 },
-       { 0x000E0020, 0x000E007F },
-       { 0x000F0000, 0x000FFFFD },
-       { 0x00100000, 0x0010FFFD }
+       { 0x10000, 0x1000B },
+       { 0x1000D, 0x10026 },
+       { 0x10028, 0x1003A },
+       { 0x1003C, 0x1003D },
+       { 0x1003F, 0x1004D },
+       { 0x10050, 0x1005D },
+       { 0x10080, 0x100FA },
+       { 0x10100, 0x10102 },
+       { 0x10107, 0x10133 },
+       { 0x10137, 0x1018C },
+       { 0x10190, 0x1019B },
+       { 0x101A0, 0x101A0 },
+       { 0x101D0, 0x101FD },
+       { 0x10280, 0x1029C },
+       { 0x102A0, 0x102D0 },
+       { 0x102E0, 0x102FB },
+       { 0x10300, 0x10323 },
+       { 0x10330, 0x1034A },
+       { 0x10350, 0x1037A },
+       { 0x10380, 0x1039D },
+       { 0x1039F, 0x103C3 },
+       { 0x103C8, 0x103D5 },
+       { 0x10400, 0x1049D },
+       { 0x104A0, 0x104A9 },
+       { 0x10500, 0x10527 },
+       { 0x10530, 0x10563 },
+       { 0x1056F, 0x1056F },
+       { 0x10600, 0x10736 },
+       { 0x10740, 0x10755 },
+       { 0x10760, 0x10767 },
+       { 0x10800, 0x10805 },
+       { 0x10808, 0x10808 },
+       { 0x1080A, 0x10835 },
+       { 0x10837, 0x10838 },
+       { 0x1083C, 0x1083C },
+       { 0x1083F, 0x10855 },
+       { 0x10857, 0x1089E },
+       { 0x108A7, 0x108AF },
+       { 0x10900, 0x1091B },
+       { 0x1091F, 0x10939 },
+       { 0x1093F, 0x1093F },
+       { 0x10980, 0x109B7 },
+       { 0x109BE, 0x109BF },
+       { 0x10A00, 0x10A03 },
+       { 0x10A05, 0x10A06 },
+       { 0x10A0C, 0x10A13 },
+       { 0x10A15, 0x10A17 },
+       { 0x10A19, 0x10A33 },
+       { 0x10A38, 0x10A3A },
+       { 0x10A3F, 0x10A47 },
+       { 0x10A50, 0x10A58 },
+       { 0x10A60, 0x10A9F },
+       { 0x10AC0, 0x10AE6 },
+       { 0x10AEB, 0x10AF6 },
+       { 0x10B00, 0x10B35 },
+       { 0x10B39, 0x10B55 },
+       { 0x10B58, 0x10B72 },
+       { 0x10B78, 0x10B91 },
+       { 0x10B99, 0x10B9C },
+       { 0x10BA9, 0x10BAF },
+       { 0x10C00, 0x10C48 },
+       { 0x10E60, 0x10E7E },
+       { 0x11000, 0x1104D },
+       { 0x11052, 0x1106F },
+       { 0x1107F, 0x110C1 },
+       { 0x110D0, 0x110E8 },
+       { 0x110F0, 0x110F9 },
+       { 0x11100, 0x11134 },
+       { 0x11136, 0x11143 },
+       { 0x11150, 0x11176 },
+       { 0x11180, 0x111C8 },
+       { 0x111CD, 0x111CD },
+       { 0x111D0, 0x111DA },
+       { 0x111E1, 0x111F4 },
+       { 0x11200, 0x11211 },
+       { 0x11213, 0x1123D },
+       { 0x112B0, 0x112EA },
+       { 0x112F0, 0x112F9 },
+       { 0x11301, 0x11303 },
+       { 0x11305, 0x1130C },
+       { 0x1130F, 0x11310 },
+       { 0x11313, 0x11328 },
+       { 0x1132A, 0x11330 },
+       { 0x11332, 0x11333 },
+       { 0x11335, 0x11339 },
+       { 0x1133C, 0x11344 },
+       { 0x11347, 0x11348 },
+       { 0x1134B, 0x1134D },
+       { 0x11357, 0x11357 },
+       { 0x1135D, 0x11363 },
+       { 0x11366, 0x1136C },
+       { 0x11370, 0x11374 },
+       { 0x11480, 0x114C7 },
+       { 0x114D0, 0x114D9 },
+       { 0x11580, 0x115B5 },
+       { 0x115B8, 0x115C9 },
+       { 0x11600, 0x11644 },
+       { 0x11650, 0x11659 },
+       { 0x11680, 0x116B7 },
+       { 0x116C0, 0x116C9 },
+       { 0x118A0, 0x118F2 },
+       { 0x118FF, 0x118FF },
+       { 0x11AC0, 0x11AF8 },
+       { 0x12000, 0x12398 },
+       { 0x12400, 0x1246E },
+       { 0x12470, 0x12474 },
+       { 0x13000, 0x1342E },
+       { 0x16800, 0x16A38 },
+       { 0x16A40, 0x16A5E },
+       { 0x16A60, 0x16A69 },
+       { 0x16A6E, 0x16A6F },
+       { 0x16AD0, 0x16AED },
+       { 0x16AF0, 0x16AF5 },
+       { 0x16B00, 0x16B45 },
+       { 0x16B50, 0x16B59 },
+       { 0x16B5B, 0x16B61 },
+       { 0x16B63, 0x16B77 },
+       { 0x16B7D, 0x16B8F },
+       { 0x16F00, 0x16F44 },
+       { 0x16F50, 0x16F7E },
+       { 0x16F8F, 0x16F9F },
+       { 0x1B000, 0x1B001 },
+       { 0x1BC00, 0x1BC6A },
+       { 0x1BC70, 0x1BC7C },
+       { 0x1BC80, 0x1BC88 },
+       { 0x1BC90, 0x1BC99 },
+       { 0x1BC9C, 0x1BCA3 },
+       { 0x1D000, 0x1D0F5 },
+       { 0x1D100, 0x1D126 },
+       { 0x1D129, 0x1D1DD },
+       { 0x1D200, 0x1D245 },
+       { 0x1D300, 0x1D356 },
+       { 0x1D360, 0x1D371 },
+       { 0x1D400, 0x1D454 },
+       { 0x1D456, 0x1D49C },
+       { 0x1D49E, 0x1D49F },
+       { 0x1D4A2, 0x1D4A2 },
+       { 0x1D4A5, 0x1D4A6 },
+       { 0x1D4A9, 0x1D4AC },
+       { 0x1D4AE, 0x1D4B9 },
+       { 0x1D4BB, 0x1D4BB },
+       { 0x1D4BD, 0x1D4C3 },
+       { 0x1D4C5, 0x1D505 },
+       { 0x1D507, 0x1D50A },
+       { 0x1D50D, 0x1D514 },
+       { 0x1D516, 0x1D51C },
+       { 0x1D51E, 0x1D539 },
+       { 0x1D53B, 0x1D53E },
+       { 0x1D540, 0x1D544 },
+       { 0x1D546, 0x1D546 },
+       { 0x1D54A, 0x1D550 },
+       { 0x1D552, 0x1D6A5 },
+       { 0x1D6A8, 0x1D7CB },
+       { 0x1D7CE, 0x1D7FF },
+       { 0x1E800, 0x1E8C4 },
+       { 0x1E8C7, 0x1E8D6 },
+       { 0x1EE00, 0x1EE03 },
+       { 0x1EE05, 0x1EE1F },
+       { 0x1EE21, 0x1EE22 },
+       { 0x1EE24, 0x1EE24 },
+       { 0x1EE27, 0x1EE27 },
+       { 0x1EE29, 0x1EE32 },
+       { 0x1EE34, 0x1EE37 },
+       { 0x1EE39, 0x1EE39 },
+       { 0x1EE3B, 0x1EE3B },
+       { 0x1EE42, 0x1EE42 },
+       { 0x1EE47, 0x1EE47 },
+       { 0x1EE49, 0x1EE49 },
+       { 0x1EE4B, 0x1EE4B },
+       { 0x1EE4D, 0x1EE4F },
+       { 0x1EE51, 0x1EE52 },
+       { 0x1EE54, 0x1EE54 },
+       { 0x1EE57, 0x1EE57 },
+       { 0x1EE59, 0x1EE59 },
+       { 0x1EE5B, 0x1EE5B },
+       { 0x1EE5D, 0x1EE5D },
+       { 0x1EE5F, 0x1EE5F },
+       { 0x1EE61, 0x1EE62 },
+       { 0x1EE64, 0x1EE64 },
+       { 0x1EE67, 0x1EE6A },
+       { 0x1EE6C, 0x1EE72 },
+       { 0x1EE74, 0x1EE77 },
+       { 0x1EE79, 0x1EE7C },
+       { 0x1EE7E, 0x1EE7E },
+       { 0x1EE80, 0x1EE89 },
+       { 0x1EE8B, 0x1EE9B },
+       { 0x1EEA1, 0x1EEA3 },
+       { 0x1EEA5, 0x1EEA9 },
+       { 0x1EEAB, 0x1EEBB },
+       { 0x1EEF0, 0x1EEF1 },
+       { 0x1F000, 0x1F02B },
+       { 0x1F030, 0x1F093 },
+       { 0x1F0A0, 0x1F0AE },
+       { 0x1F0B1, 0x1F0BF },
+       { 0x1F0C1, 0x1F0CF },
+       { 0x1F0D1, 0x1F0F5 },
+       { 0x1F100, 0x1F10C },
+       { 0x1F110, 0x1F12E },
+       { 0x1F130, 0x1F16B },
+       { 0x1F170, 0x1F19A },
+       { 0x1F1E6, 0x1F202 },
+       { 0x1F210, 0x1F23A },
+       { 0x1F240, 0x1F248 },
+       { 0x1F250, 0x1F251 },
+       { 0x1F300, 0x1F32C },
+       { 0x1F330, 0x1F37D },
+       { 0x1F380, 0x1F3CE },
+       { 0x1F3D4, 0x1F3F7 },
+       { 0x1F400, 0x1F4FE },
+       { 0x1F500, 0x1F54A },
+       { 0x1F550, 0x1F579 },
+       { 0x1F57B, 0x1F5A3 },
+       { 0x1F5A5, 0x1F642 },
+       { 0x1F645, 0x1F6CF },
+       { 0x1F6E0, 0x1F6EC },
+       { 0x1F6F0, 0x1F6F3 },
+       { 0x1F700, 0x1F773 },
+       { 0x1F780, 0x1F7D4 },
+       { 0x1F800, 0x1F80B },
+       { 0x1F810, 0x1F847 },
+       { 0x1F850, 0x1F859 },
+       { 0x1F860, 0x1F887 },
+       { 0x1F890, 0x1F8AD },
+       { 0x20000, 0x2A6D6 },
+       { 0x2A700, 0x2B734 },
+       { 0x2B740, 0x2B81D },
+       { 0x2F800, 0x2FA1D },
+       { 0xE0001, 0xE0001 },
+       { 0xE0020, 0xE007F },
+       { 0xE0100, 0xE01EF },
+       { 0xF0000, 0xFFFFD },
+       { 0x100000, 0x10FFFD }
 };
 
 MAKE_ISW(graph)
 
-struct mb_ucsrange data_wctype_print[]=
-{
+static const struct mb_ucsrange data_wctype_print[] = {
        { 0x0020, 0x007E },
-       { 0x00A0, 0x0220 },
-       { 0x0222, 0x0233 },
-       { 0x0250, 0x02AD },
-       { 0x02B0, 0x02EE },
-       { 0x0300, 0x034F },
-       { 0x0360, 0x036F },
-       { 0x0374, 0x0375 },
-       { 0x037A, 0x037A },
-       { 0x037E, 0x037E },
+       { 0x00A0, 0x0377 },
+       { 0x037A, 0x037F },
        { 0x0384, 0x038A },
        { 0x038C, 0x038C },
        { 0x038E, 0x03A1 },
-       { 0x03A3, 0x03CE },
-       { 0x03D0, 0x03F6 },
-       { 0x0400, 0x0486 },
-       { 0x0488, 0x04CE },
-       { 0x04D0, 0x04F5 },
-       { 0x04F8, 0x04F9 },
-       { 0x0500, 0x050F },
+       { 0x03A3, 0x052F },
        { 0x0531, 0x0556 },
        { 0x0559, 0x055F },
        { 0x0561, 0x0587 },
        { 0x0589, 0x058A },
-       { 0x0591, 0x05A1 },
-       { 0x05A3, 0x05B9 },
-       { 0x05BB, 0x05C4 },
+       { 0x058D, 0x058F },
+       { 0x0591, 0x05C7 },
        { 0x05D0, 0x05EA },
        { 0x05F0, 0x05F4 },
-       { 0x060C, 0x060C },
-       { 0x061B, 0x061B },
-       { 0x061F, 0x061F },
-       { 0x0621, 0x063A },
-       { 0x0640, 0x0655 },
-       { 0x0660, 0x06ED },
-       { 0x06F0, 0x06FE },
-       { 0x0700, 0x070D },
-       { 0x070F, 0x072C },
-       { 0x0730, 0x074A },
-       { 0x0780, 0x07B1 },
-       { 0x0901, 0x0903 },
-       { 0x0905, 0x0939 },
-       { 0x093C, 0x094D },
-       { 0x0950, 0x0954 },
-       { 0x0958, 0x0970 },
-       { 0x0981, 0x0983 },
+       { 0x0600, 0x061C },
+       { 0x061E, 0x070D },
+       { 0x070F, 0x074A },
+       { 0x074D, 0x07B1 },
+       { 0x07C0, 0x07FA },
+       { 0x0800, 0x082D },
+       { 0x0830, 0x083E },
+       { 0x0840, 0x085B },
+       { 0x085E, 0x085E },
+       { 0x08A0, 0x08B2 },
+       { 0x08E4, 0x0983 },
        { 0x0985, 0x098C },
        { 0x098F, 0x0990 },
        { 0x0993, 0x09A8 },
        { 0x09AA, 0x09B0 },
        { 0x09B2, 0x09B2 },
        { 0x09B6, 0x09B9 },
-       { 0x09BC, 0x09BC },
-       { 0x09BE, 0x09C4 },
+       { 0x09BC, 0x09C4 },
        { 0x09C7, 0x09C8 },
-       { 0x09CB, 0x09CD },
+       { 0x09CB, 0x09CE },
        { 0x09D7, 0x09D7 },
        { 0x09DC, 0x09DD },
        { 0x09DF, 0x09E3 },
-       { 0x09E6, 0x09FA },
-       { 0x0A02, 0x0A02 },
+       { 0x09E6, 0x09FB },
+       { 0x0A01, 0x0A03 },
        { 0x0A05, 0x0A0A },
        { 0x0A0F, 0x0A10 },
        { 0x0A13, 0x0A28 },
@@ -1699,12 +3328,12 @@ struct mb_ucsrange data_wctype_print[]=
        { 0x0A3E, 0x0A42 },
        { 0x0A47, 0x0A48 },
        { 0x0A4B, 0x0A4D },
+       { 0x0A51, 0x0A51 },
        { 0x0A59, 0x0A5C },
        { 0x0A5E, 0x0A5E },
-       { 0x0A66, 0x0A74 },
+       { 0x0A66, 0x0A75 },
        { 0x0A81, 0x0A83 },
-       { 0x0A85, 0x0A8B },
-       { 0x0A8D, 0x0A8D },
+       { 0x0A85, 0x0A8D },
        { 0x0A8F, 0x0A91 },
        { 0x0A93, 0x0AA8 },
        { 0x0AAA, 0x0AB0 },
@@ -1714,22 +3343,22 @@ struct mb_ucsrange data_wctype_print[]=
        { 0x0AC7, 0x0AC9 },
        { 0x0ACB, 0x0ACD },
        { 0x0AD0, 0x0AD0 },
-       { 0x0AE0, 0x0AE0 },
-       { 0x0AE6, 0x0AEF },
+       { 0x0AE0, 0x0AE3 },
+       { 0x0AE6, 0x0AF1 },
        { 0x0B01, 0x0B03 },
        { 0x0B05, 0x0B0C },
        { 0x0B0F, 0x0B10 },
        { 0x0B13, 0x0B28 },
        { 0x0B2A, 0x0B30 },
        { 0x0B32, 0x0B33 },
-       { 0x0B36, 0x0B39 },
-       { 0x0B3C, 0x0B43 },
+       { 0x0B35, 0x0B39 },
+       { 0x0B3C, 0x0B44 },
        { 0x0B47, 0x0B48 },
        { 0x0B4B, 0x0B4D },
        { 0x0B56, 0x0B57 },
        { 0x0B5C, 0x0B5D },
-       { 0x0B5F, 0x0B61 },
-       { 0x0B66, 0x0B70 },
+       { 0x0B5F, 0x0B63 },
+       { 0x0B66, 0x0B77 },
        { 0x0B82, 0x0B83 },
        { 0x0B85, 0x0B8A },
        { 0x0B8E, 0x0B90 },
@@ -1739,49 +3368,51 @@ struct mb_ucsrange data_wctype_print[]=
        { 0x0B9E, 0x0B9F },
        { 0x0BA3, 0x0BA4 },
        { 0x0BA8, 0x0BAA },
-       { 0x0BAE, 0x0BB5 },
-       { 0x0BB7, 0x0BB9 },
+       { 0x0BAE, 0x0BB9 },
        { 0x0BBE, 0x0BC2 },
        { 0x0BC6, 0x0BC8 },
        { 0x0BCA, 0x0BCD },
+       { 0x0BD0, 0x0BD0 },
        { 0x0BD7, 0x0BD7 },
-       { 0x0BE7, 0x0BF2 },
-       { 0x0C01, 0x0C03 },
+       { 0x0BE6, 0x0BFA },
+       { 0x0C00, 0x0C03 },
        { 0x0C05, 0x0C0C },
        { 0x0C0E, 0x0C10 },
        { 0x0C12, 0x0C28 },
-       { 0x0C2A, 0x0C33 },
-       { 0x0C35, 0x0C39 },
-       { 0x0C3E, 0x0C44 },
+       { 0x0C2A, 0x0C39 },
+       { 0x0C3D, 0x0C44 },
        { 0x0C46, 0x0C48 },
        { 0x0C4A, 0x0C4D },
        { 0x0C55, 0x0C56 },
-       { 0x0C60, 0x0C61 },
+       { 0x0C58, 0x0C59 },
+       { 0x0C60, 0x0C63 },
        { 0x0C66, 0x0C6F },
-       { 0x0C82, 0x0C83 },
+       { 0x0C78, 0x0C7F },
+       { 0x0C81, 0x0C83 },
        { 0x0C85, 0x0C8C },
        { 0x0C8E, 0x0C90 },
        { 0x0C92, 0x0CA8 },
        { 0x0CAA, 0x0CB3 },
        { 0x0CB5, 0x0CB9 },
-       { 0x0CBE, 0x0CC4 },
+       { 0x0CBC, 0x0CC4 },
        { 0x0CC6, 0x0CC8 },
        { 0x0CCA, 0x0CCD },
        { 0x0CD5, 0x0CD6 },
        { 0x0CDE, 0x0CDE },
-       { 0x0CE0, 0x0CE1 },
+       { 0x0CE0, 0x0CE3 },
        { 0x0CE6, 0x0CEF },
-       { 0x0D02, 0x0D03 },
+       { 0x0CF1, 0x0CF2 },
+       { 0x0D01, 0x0D03 },
        { 0x0D05, 0x0D0C },
        { 0x0D0E, 0x0D10 },
-       { 0x0D12, 0x0D28 },
-       { 0x0D2A, 0x0D39 },
-       { 0x0D3E, 0x0D43 },
+       { 0x0D12, 0x0D3A },
+       { 0x0D3D, 0x0D44 },
        { 0x0D46, 0x0D48 },
-       { 0x0D4A, 0x0D4D },
+       { 0x0D4A, 0x0D4E },
        { 0x0D57, 0x0D57 },
-       { 0x0D60, 0x0D61 },
-       { 0x0D66, 0x0D6F },
+       { 0x0D60, 0x0D63 },
+       { 0x0D66, 0x0D75 },
+       { 0x0D79, 0x0D7F },
        { 0x0D82, 0x0D83 },
        { 0x0D85, 0x0D96 },
        { 0x0D9A, 0x0DB1 },
@@ -1792,6 +3423,7 @@ struct mb_ucsrange data_wctype_print[]=
        { 0x0DCF, 0x0DD4 },
        { 0x0DD6, 0x0DD6 },
        { 0x0DD8, 0x0DDF },
+       { 0x0DE6, 0x0DEF },
        { 0x0DF2, 0x0DF4 },
        { 0x0E01, 0x0E3A },
        { 0x0E3F, 0x0E5B },
@@ -1812,56 +3444,37 @@ struct mb_ucsrange data_wctype_print[]=
        { 0x0EC6, 0x0EC6 },
        { 0x0EC8, 0x0ECD },
        { 0x0ED0, 0x0ED9 },
-       { 0x0EDC, 0x0EDD },
+       { 0x0EDC, 0x0EDF },
        { 0x0F00, 0x0F47 },
-       { 0x0F49, 0x0F6A },
-       { 0x0F71, 0x0F8B },
-       { 0x0F90, 0x0F97 },
+       { 0x0F49, 0x0F6C },
+       { 0x0F71, 0x0F97 },
        { 0x0F99, 0x0FBC },
        { 0x0FBE, 0x0FCC },
-       { 0x0FCF, 0x0FCF },
-       { 0x1000, 0x1021 },
-       { 0x1023, 0x1027 },
-       { 0x1029, 0x102A },
-       { 0x102C, 0x1032 },
-       { 0x1036, 0x1039 },
-       { 0x1040, 0x1059 },
-       { 0x10A0, 0x10C5 },
-       { 0x10D0, 0x10F8 },
-       { 0x10FB, 0x10FB },
-       { 0x1100, 0x1159 },
-       { 0x115F, 0x11A2 },
-       { 0x11A8, 0x11F9 },
-       { 0x1200, 0x1206 },
-       { 0x1208, 0x1246 },
-       { 0x1248, 0x1248 },
+       { 0x0FCE, 0x0FDA },
+       { 0x1000, 0x10C5 },
+       { 0x10C7, 0x10C7 },
+       { 0x10CD, 0x10CD },
+       { 0x10D0, 0x1248 },
        { 0x124A, 0x124D },
        { 0x1250, 0x1256 },
        { 0x1258, 0x1258 },
        { 0x125A, 0x125D },
-       { 0x1260, 0x1286 },
-       { 0x1288, 0x1288 },
+       { 0x1260, 0x1288 },
        { 0x128A, 0x128D },
-       { 0x1290, 0x12AE },
-       { 0x12B0, 0x12B0 },
+       { 0x1290, 0x12B0 },
        { 0x12B2, 0x12B5 },
        { 0x12B8, 0x12BE },
        { 0x12C0, 0x12C0 },
        { 0x12C2, 0x12C5 },
-       { 0x12C8, 0x12CE },
-       { 0x12D0, 0x12D6 },
-       { 0x12D8, 0x12EE },
-       { 0x12F0, 0x130E },
-       { 0x1310, 0x1310 },
+       { 0x12C8, 0x12D6 },
+       { 0x12D8, 0x1310 },
        { 0x1312, 0x1315 },
-       { 0x1318, 0x131E },
-       { 0x1320, 0x1346 },
-       { 0x1348, 0x135A },
-       { 0x1361, 0x137C },
+       { 0x1318, 0x135A },
+       { 0x135D, 0x137C },
+       { 0x1380, 0x1399 },
        { 0x13A0, 0x13F4 },
-       { 0x1401, 0x1676 },
-       { 0x1680, 0x169C },
-       { 0x16A0, 0x16F0 },
+       { 0x1400, 0x169C },
+       { 0x16A0, 0x16F8 },
        { 0x1700, 0x170C },
        { 0x170E, 0x1714 },
        { 0x1720, 0x1736 },
@@ -1869,15 +3482,41 @@ struct mb_ucsrange data_wctype_print[]=
        { 0x1760, 0x176C },
        { 0x176E, 0x1770 },
        { 0x1772, 0x1773 },
-       { 0x1780, 0x17DC },
+       { 0x1780, 0x17DD },
        { 0x17E0, 0x17E9 },
+       { 0x17F0, 0x17F9 },
        { 0x1800, 0x180E },
        { 0x1810, 0x1819 },
        { 0x1820, 0x1877 },
-       { 0x1880, 0x18A9 },
-       { 0x1E00, 0x1E9B },
-       { 0x1EA0, 0x1EF9 },
-       { 0x1F00, 0x1F15 },
+       { 0x1880, 0x18AA },
+       { 0x18B0, 0x18F5 },
+       { 0x1900, 0x191E },
+       { 0x1920, 0x192B },
+       { 0x1930, 0x193B },
+       { 0x1940, 0x1940 },
+       { 0x1944, 0x196D },
+       { 0x1970, 0x1974 },
+       { 0x1980, 0x19AB },
+       { 0x19B0, 0x19C9 },
+       { 0x19D0, 0x19DA },
+       { 0x19DE, 0x1A1B },
+       { 0x1A1E, 0x1A5E },
+       { 0x1A60, 0x1A7C },
+       { 0x1A7F, 0x1A89 },
+       { 0x1A90, 0x1A99 },
+       { 0x1AA0, 0x1AAD },
+       { 0x1AB0, 0x1ABE },
+       { 0x1B00, 0x1B4B },
+       { 0x1B50, 0x1B7C },
+       { 0x1B80, 0x1BF3 },
+       { 0x1BFC, 0x1C37 },
+       { 0x1C3B, 0x1C49 },
+       { 0x1C4D, 0x1C7F },
+       { 0x1CC0, 0x1CC7 },
+       { 0x1CD0, 0x1CF6 },
+       { 0x1CF8, 0x1CF9 },
+       { 0x1D00, 0x1DF5 },
+       { 0x1DFC, 0x1F15 },
        { 0x1F18, 0x1F1D },
        { 0x1F20, 0x1F45 },
        { 0x1F48, 0x1F4D },
@@ -1893,38 +3532,39 @@ struct mb_ucsrange data_wctype_print[]=
        { 0x1FDD, 0x1FEF },
        { 0x1FF2, 0x1FF4 },
        { 0x1FF6, 0x1FFE },
-       { 0x2000, 0x2027 },
-       { 0x202A, 0x2052 },
-       { 0x2057, 0x2057 },
-       { 0x205F, 0x2063 },
-       { 0x206A, 0x2071 },
+       { 0x2000, 0x2064 },
+       { 0x2066, 0x2071 },
        { 0x2074, 0x208E },
-       { 0x20A0, 0x20B1 },
-       { 0x20D0, 0x20EA },
-       { 0x2100, 0x213A },
-       { 0x213D, 0x214B },
-       { 0x2153, 0x2183 },
-       { 0x2190, 0x23CE },
+       { 0x2090, 0x209C },
+       { 0x20A0, 0x20BD },
+       { 0x20D0, 0x20F0 },
+       { 0x2100, 0x2189 },
+       { 0x2190, 0x23FA },
        { 0x2400, 0x2426 },
        { 0x2440, 0x244A },
-       { 0x2460, 0x24FE },
-       { 0x2500, 0x2613 },
-       { 0x2616, 0x2617 },
-       { 0x2619, 0x267D },
-       { 0x2680, 0x2689 },
-       { 0x2701, 0x2704 },
-       { 0x2706, 0x2709 },
-       { 0x270C, 0x2727 },
-       { 0x2729, 0x274B },
-       { 0x274D, 0x274D },
-       { 0x274F, 0x2752 },
-       { 0x2756, 0x2756 },
-       { 0x2758, 0x275E },
-       { 0x2761, 0x2794 },
-       { 0x2798, 0x27AF },
-       { 0x27B1, 0x27BE },
-       { 0x27D0, 0x27EB },
-       { 0x27F0, 0x2AFF },
+       { 0x2460, 0x2B73 },
+       { 0x2B76, 0x2B95 },
+       { 0x2B98, 0x2BB9 },
+       { 0x2BBD, 0x2BC8 },
+       { 0x2BCA, 0x2BD1 },
+       { 0x2C00, 0x2C2E },
+       { 0x2C30, 0x2C5E },
+       { 0x2C60, 0x2CF3 },
+       { 0x2CF9, 0x2D25 },
+       { 0x2D27, 0x2D27 },
+       { 0x2D2D, 0x2D2D },
+       { 0x2D30, 0x2D67 },
+       { 0x2D6F, 0x2D70 },
+       { 0x2D7F, 0x2D96 },
+       { 0x2DA0, 0x2DA6 },
+       { 0x2DA8, 0x2DAE },
+       { 0x2DB0, 0x2DB6 },
+       { 0x2DB8, 0x2DBE },
+       { 0x2DC0, 0x2DC6 },
+       { 0x2DC8, 0x2DCE },
+       { 0x2DD0, 0x2DD6 },
+       { 0x2DD8, 0x2DDE },
+       { 0x2DE0, 0x2E42 },
        { 0x2E80, 0x2E99 },
        { 0x2E9B, 0x2EF3 },
        { 0x2F00, 0x2FD5 },
@@ -1932,24 +3572,52 @@ struct mb_ucsrange data_wctype_print[]=
        { 0x3000, 0x303F },
        { 0x3041, 0x3096 },
        { 0x3099, 0x30FF },
-       { 0x3105, 0x312C },
+       { 0x3105, 0x312D },
        { 0x3131, 0x318E },
-       { 0x3190, 0x31B7 },
-       { 0x31F0, 0x321C },
-       { 0x3220, 0x3243 },
-       { 0x3251, 0x327B },
-       { 0x327F, 0x32CB },
-       { 0x32D0, 0x32FE },
-       { 0x3300, 0x3376 },
-       { 0x337B, 0x33DD },
-       { 0x33E0, 0x33FE },
-       { 0x3400, 0x4DB5 },
-       { 0x4E00, 0x9FA5 },
+       { 0x3190, 0x31BA },
+       { 0x31C0, 0x31E3 },
+       { 0x31F0, 0x321E },
+       { 0x3220, 0x32FE },
+       { 0x3300, 0x4DB5 },
+       { 0x4DC0, 0x9FCC },
        { 0xA000, 0xA48C },
        { 0xA490, 0xA4C6 },
+       { 0xA4D0, 0xA62B },
+       { 0xA640, 0xA69D },
+       { 0xA69F, 0xA6F7 },
+       { 0xA700, 0xA78E },
+       { 0xA790, 0xA7AD },
+       { 0xA7B0, 0xA7B1 },
+       { 0xA7F7, 0xA82B },
+       { 0xA830, 0xA839 },
+       { 0xA840, 0xA877 },
+       { 0xA880, 0xA8C4 },
+       { 0xA8CE, 0xA8D9 },
+       { 0xA8E0, 0xA8FB },
+       { 0xA900, 0xA953 },
+       { 0xA95F, 0xA97C },
+       { 0xA980, 0xA9CD },
+       { 0xA9CF, 0xA9D9 },
+       { 0xA9DE, 0xA9FE },
+       { 0xAA00, 0xAA36 },
+       { 0xAA40, 0xAA4D },
+       { 0xAA50, 0xAA59 },
+       { 0xAA5C, 0xAAC2 },
+       { 0xAADB, 0xAAF6 },
+       { 0xAB01, 0xAB06 },
+       { 0xAB09, 0xAB0E },
+       { 0xAB11, 0xAB16 },
+       { 0xAB20, 0xAB26 },
+       { 0xAB28, 0xAB2E },
+       { 0xAB30, 0xAB5F },
+       { 0xAB64, 0xAB65 },
+       { 0xABC0, 0xABED },
+       { 0xABF0, 0xABF9 },
        { 0xAC00, 0xD7A3 },
-       { 0xE000, 0xFA2D },
-       { 0xFA30, 0xFA6A },
+       { 0xD7B0, 0xD7C6 },
+       { 0xD7CB, 0xD7FB },
+       { 0xE000, 0xFA6D },
+       { 0xFA70, 0xFAD9 },
        { 0xFB00, 0xFB06 },
        { 0xFB13, 0xFB17 },
        { 0xFB1D, 0xFB36 },
@@ -1957,15 +3625,14 @@ struct mb_ucsrange data_wctype_print[]=
        { 0xFB3E, 0xFB3E },
        { 0xFB40, 0xFB41 },
        { 0xFB43, 0xFB44 },
-       { 0xFB46, 0xFBB1 },
+       { 0xFB46, 0xFBC1 },
        { 0xFBD3, 0xFD3F },
        { 0xFD50, 0xFD8F },
        { 0xFD92, 0xFDC7 },
-       { 0xFDF0, 0xFDFC },
-       { 0xFE00, 0xFE0F },
-       { 0xFE20, 0xFE23 },
-       { 0xFE30, 0xFE46 },
-       { 0xFE49, 0xFE52 },
+       { 0xFDF0, 0xFDFD },
+       { 0xFE00, 0xFE19 },
+       { 0xFE20, 0xFE2D },
+       { 0xFE30, 0xFE52 },
        { 0xFE54, 0xFE66 },
        { 0xFE68, 0xFE6B },
        { 0xFE70, 0xFE74 },
@@ -1979,48 +3646,243 @@ struct mb_ucsrange data_wctype_print[]=
        { 0xFFE0, 0xFFE6 },
        { 0xFFE8, 0xFFEE },
        { 0xFFF9, 0xFFFD },
-       { 0x00010300, 0x0001031E },
-       { 0x00010320, 0x00010323 },
-       { 0x00010330, 0x0001034A },
-       { 0x00010400, 0x00010425 },
-       { 0x00010428, 0x0001044D },
-       { 0x0001D000, 0x0001D0F5 },
-       { 0x0001D100, 0x0001D126 },
-       { 0x0001D12A, 0x0001D1DD },
-       { 0x0001D400, 0x0001D454 },
-       { 0x0001D456, 0x0001D49C },
-       { 0x0001D49E, 0x0001D49F },
-       { 0x0001D4A2, 0x0001D4A2 },
-       { 0x0001D4A5, 0x0001D4A6 },
-       { 0x0001D4A9, 0x0001D4AC },
-       { 0x0001D4AE, 0x0001D4B9 },
-       { 0x0001D4BB, 0x0001D4BB },
-       { 0x0001D4BD, 0x0001D4C0 },
-       { 0x0001D4C2, 0x0001D4C3 },
-       { 0x0001D4C5, 0x0001D505 },
-       { 0x0001D507, 0x0001D50A },
-       { 0x0001D50D, 0x0001D514 },
-       { 0x0001D516, 0x0001D51C },
-       { 0x0001D51E, 0x0001D539 },
-       { 0x0001D53B, 0x0001D53E },
-       { 0x0001D540, 0x0001D544 },
-       { 0x0001D546, 0x0001D546 },
-       { 0x0001D54A, 0x0001D550 },
-       { 0x0001D552, 0x0001D6A3 },
-       { 0x0001D6A8, 0x0001D7C9 },
-       { 0x0001D7CE, 0x0001D7FF },
-       { 0x00020000, 0x0002A6D6 },
-       { 0x0002F800, 0x0002FA1D },
-       { 0x000E0001, 0x000E0001 },
-       { 0x000E0020, 0x000E007F },
-       { 0x000F0000, 0x000FFFFD },
-       { 0x00100000, 0x0010FFFD }
+       { 0x10000, 0x1000B },
+       { 0x1000D, 0x10026 },
+       { 0x10028, 0x1003A },
+       { 0x1003C, 0x1003D },
+       { 0x1003F, 0x1004D },
+       { 0x10050, 0x1005D },
+       { 0x10080, 0x100FA },
+       { 0x10100, 0x10102 },
+       { 0x10107, 0x10133 },
+       { 0x10137, 0x1018C },
+       { 0x10190, 0x1019B },
+       { 0x101A0, 0x101A0 },
+       { 0x101D0, 0x101FD },
+       { 0x10280, 0x1029C },
+       { 0x102A0, 0x102D0 },
+       { 0x102E0, 0x102FB },
+       { 0x10300, 0x10323 },
+       { 0x10330, 0x1034A },
+       { 0x10350, 0x1037A },
+       { 0x10380, 0x1039D },
+       { 0x1039F, 0x103C3 },
+       { 0x103C8, 0x103D5 },
+       { 0x10400, 0x1049D },
+       { 0x104A0, 0x104A9 },
+       { 0x10500, 0x10527 },
+       { 0x10530, 0x10563 },
+       { 0x1056F, 0x1056F },
+       { 0x10600, 0x10736 },
+       { 0x10740, 0x10755 },
+       { 0x10760, 0x10767 },
+       { 0x10800, 0x10805 },
+       { 0x10808, 0x10808 },
+       { 0x1080A, 0x10835 },
+       { 0x10837, 0x10838 },
+       { 0x1083C, 0x1083C },
+       { 0x1083F, 0x10855 },
+       { 0x10857, 0x1089E },
+       { 0x108A7, 0x108AF },
+       { 0x10900, 0x1091B },
+       { 0x1091F, 0x10939 },
+       { 0x1093F, 0x1093F },
+       { 0x10980, 0x109B7 },
+       { 0x109BE, 0x109BF },
+       { 0x10A00, 0x10A03 },
+       { 0x10A05, 0x10A06 },
+       { 0x10A0C, 0x10A13 },
+       { 0x10A15, 0x10A17 },
+       { 0x10A19, 0x10A33 },
+       { 0x10A38, 0x10A3A },
+       { 0x10A3F, 0x10A47 },
+       { 0x10A50, 0x10A58 },
+       { 0x10A60, 0x10A9F },
+       { 0x10AC0, 0x10AE6 },
+       { 0x10AEB, 0x10AF6 },
+       { 0x10B00, 0x10B35 },
+       { 0x10B39, 0x10B55 },
+       { 0x10B58, 0x10B72 },
+       { 0x10B78, 0x10B91 },
+       { 0x10B99, 0x10B9C },
+       { 0x10BA9, 0x10BAF },
+       { 0x10C00, 0x10C48 },
+       { 0x10E60, 0x10E7E },
+       { 0x11000, 0x1104D },
+       { 0x11052, 0x1106F },
+       { 0x1107F, 0x110C1 },
+       { 0x110D0, 0x110E8 },
+       { 0x110F0, 0x110F9 },
+       { 0x11100, 0x11134 },
+       { 0x11136, 0x11143 },
+       { 0x11150, 0x11176 },
+       { 0x11180, 0x111C8 },
+       { 0x111CD, 0x111CD },
+       { 0x111D0, 0x111DA },
+       { 0x111E1, 0x111F4 },
+       { 0x11200, 0x11211 },
+       { 0x11213, 0x1123D },
+       { 0x112B0, 0x112EA },
+       { 0x112F0, 0x112F9 },
+       { 0x11301, 0x11303 },
+       { 0x11305, 0x1130C },
+       { 0x1130F, 0x11310 },
+       { 0x11313, 0x11328 },
+       { 0x1132A, 0x11330 },
+       { 0x11332, 0x11333 },
+       { 0x11335, 0x11339 },
+       { 0x1133C, 0x11344 },
+       { 0x11347, 0x11348 },
+       { 0x1134B, 0x1134D },
+       { 0x11357, 0x11357 },
+       { 0x1135D, 0x11363 },
+       { 0x11366, 0x1136C },
+       { 0x11370, 0x11374 },
+       { 0x11480, 0x114C7 },
+       { 0x114D0, 0x114D9 },
+       { 0x11580, 0x115B5 },
+       { 0x115B8, 0x115C9 },
+       { 0x11600, 0x11644 },
+       { 0x11650, 0x11659 },
+       { 0x11680, 0x116B7 },
+       { 0x116C0, 0x116C9 },
+       { 0x118A0, 0x118F2 },
+       { 0x118FF, 0x118FF },
+       { 0x11AC0, 0x11AF8 },
+       { 0x12000, 0x12398 },
+       { 0x12400, 0x1246E },
+       { 0x12470, 0x12474 },
+       { 0x13000, 0x1342E },
+       { 0x16800, 0x16A38 },
+       { 0x16A40, 0x16A5E },
+       { 0x16A60, 0x16A69 },
+       { 0x16A6E, 0x16A6F },
+       { 0x16AD0, 0x16AED },
+       { 0x16AF0, 0x16AF5 },
+       { 0x16B00, 0x16B45 },
+       { 0x16B50, 0x16B59 },
+       { 0x16B5B, 0x16B61 },
+       { 0x16B63, 0x16B77 },
+       { 0x16B7D, 0x16B8F },
+       { 0x16F00, 0x16F44 },
+       { 0x16F50, 0x16F7E },
+       { 0x16F8F, 0x16F9F },
+       { 0x1B000, 0x1B001 },
+       { 0x1BC00, 0x1BC6A },
+       { 0x1BC70, 0x1BC7C },
+       { 0x1BC80, 0x1BC88 },
+       { 0x1BC90, 0x1BC99 },
+       { 0x1BC9C, 0x1BCA3 },
+       { 0x1D000, 0x1D0F5 },
+       { 0x1D100, 0x1D126 },
+       { 0x1D129, 0x1D1DD },
+       { 0x1D200, 0x1D245 },
+       { 0x1D300, 0x1D356 },
+       { 0x1D360, 0x1D371 },
+       { 0x1D400, 0x1D454 },
+       { 0x1D456, 0x1D49C },
+       { 0x1D49E, 0x1D49F },
+       { 0x1D4A2, 0x1D4A2 },
+       { 0x1D4A5, 0x1D4A6 },
+       { 0x1D4A9, 0x1D4AC },
+       { 0x1D4AE, 0x1D4B9 },
+       { 0x1D4BB, 0x1D4BB },
+       { 0x1D4BD, 0x1D4C3 },
+       { 0x1D4C5, 0x1D505 },
+       { 0x1D507, 0x1D50A },
+       { 0x1D50D, 0x1D514 },
+       { 0x1D516, 0x1D51C },
+       { 0x1D51E, 0x1D539 },
+       { 0x1D53B, 0x1D53E },
+       { 0x1D540, 0x1D544 },
+       { 0x1D546, 0x1D546 },
+       { 0x1D54A, 0x1D550 },
+       { 0x1D552, 0x1D6A5 },
+       { 0x1D6A8, 0x1D7CB },
+       { 0x1D7CE, 0x1D7FF },
+       { 0x1E800, 0x1E8C4 },
+       { 0x1E8C7, 0x1E8D6 },
+       { 0x1EE00, 0x1EE03 },
+       { 0x1EE05, 0x1EE1F },
+       { 0x1EE21, 0x1EE22 },
+       { 0x1EE24, 0x1EE24 },
+       { 0x1EE27, 0x1EE27 },
+       { 0x1EE29, 0x1EE32 },
+       { 0x1EE34, 0x1EE37 },
+       { 0x1EE39, 0x1EE39 },
+       { 0x1EE3B, 0x1EE3B },
+       { 0x1EE42, 0x1EE42 },
+       { 0x1EE47, 0x1EE47 },
+       { 0x1EE49, 0x1EE49 },
+       { 0x1EE4B, 0x1EE4B },
+       { 0x1EE4D, 0x1EE4F },
+       { 0x1EE51, 0x1EE52 },
+       { 0x1EE54, 0x1EE54 },
+       { 0x1EE57, 0x1EE57 },
+       { 0x1EE59, 0x1EE59 },
+       { 0x1EE5B, 0x1EE5B },
+       { 0x1EE5D, 0x1EE5D },
+       { 0x1EE5F, 0x1EE5F },
+       { 0x1EE61, 0x1EE62 },
+       { 0x1EE64, 0x1EE64 },
+       { 0x1EE67, 0x1EE6A },
+       { 0x1EE6C, 0x1EE72 },
+       { 0x1EE74, 0x1EE77 },
+       { 0x1EE79, 0x1EE7C },
+       { 0x1EE7E, 0x1EE7E },
+       { 0x1EE80, 0x1EE89 },
+       { 0x1EE8B, 0x1EE9B },
+       { 0x1EEA1, 0x1EEA3 },
+       { 0x1EEA5, 0x1EEA9 },
+       { 0x1EEAB, 0x1EEBB },
+       { 0x1EEF0, 0x1EEF1 },
+       { 0x1F000, 0x1F02B },
+       { 0x1F030, 0x1F093 },
+       { 0x1F0A0, 0x1F0AE },
+       { 0x1F0B1, 0x1F0BF },
+       { 0x1F0C1, 0x1F0CF },
+       { 0x1F0D1, 0x1F0F5 },
+       { 0x1F100, 0x1F10C },
+       { 0x1F110, 0x1F12E },
+       { 0x1F130, 0x1F16B },
+       { 0x1F170, 0x1F19A },
+       { 0x1F1E6, 0x1F202 },
+       { 0x1F210, 0x1F23A },
+       { 0x1F240, 0x1F248 },
+       { 0x1F250, 0x1F251 },
+       { 0x1F300, 0x1F32C },
+       { 0x1F330, 0x1F37D },
+       { 0x1F380, 0x1F3CE },
+       { 0x1F3D4, 0x1F3F7 },
+       { 0x1F400, 0x1F4FE },
+       { 0x1F500, 0x1F54A },
+       { 0x1F550, 0x1F579 },
+       { 0x1F57B, 0x1F5A3 },
+       { 0x1F5A5, 0x1F642 },
+       { 0x1F645, 0x1F6CF },
+       { 0x1F6E0, 0x1F6EC },
+       { 0x1F6F0, 0x1F6F3 },
+       { 0x1F700, 0x1F773 },
+       { 0x1F780, 0x1F7D4 },
+       { 0x1F800, 0x1F80B },
+       { 0x1F810, 0x1F847 },
+       { 0x1F850, 0x1F859 },
+       { 0x1F860, 0x1F887 },
+       { 0x1F890, 0x1F8AD },
+       { 0x20000, 0x2A6D6 },
+       { 0x2A700, 0x2B734 },
+       { 0x2B740, 0x2B81D },
+       { 0x2F800, 0x2FA1D },
+       { 0xE0001, 0xE0001 },
+       { 0xE0020, 0xE007F },
+       { 0xE0100, 0xE01EF },
+       { 0xF0000, 0xFFFFD },
+       { 0x100000, 0x10FFFD }
 };
 
 MAKE_ISW(print)
 
-struct mb_ucsrange data_wctype_xdigit[]=
-{
+static const struct mb_ucsrange data_wctype_xdigit[] = {
        { 0x0030, 0x0039 },
        { 0x0041, 0x0046 },
        { 0x0061, 0x0066 }
@@ -2028,8 +3890,14 @@ struct mb_ucsrange data_wctype_xdigit[]=
 
 MAKE_ISW(xdigit)
 
-struct mb_ucsrange data_wctype_blank[]=
-{
+/*
+ * this includes ;Zs;
+ * except U+00A0 (<noBreak> NON-BREAKING SPACE)
+ * except U+2007 (<noBreak> FIGURE SPACE)
+ * except U+202F (<noBreak> NARROW NO-BREAK SPACE)
+ * plus U+200B (ZERO WIDTH SPACE)
+ */
+static const struct mb_ucsrange data_wctype_blank[] = {
        { 0x0009, 0x0009 },
        { 0x0020, 0x0020 },
        { 0x1680, 0x1680 },
@@ -2043,1617 +3911,2615 @@ MAKE_ISW(blank)
 
 /* Conversion functions */
 
-static struct mb_ucsrange data_wctype_toupper[]=
-{
-       { 0x0061, 0x0041 },
-       { 0x0062, 0x0042 },
-       { 0x0063, 0x0043 },
-       { 0x0064, 0x0044 },
-       { 0x0065, 0x0045 },
-       { 0x0066, 0x0046 },
-       { 0x0067, 0x0047 },
-       { 0x0068, 0x0048 },
-       { 0x0069, 0x0049 },
-       { 0x006A, 0x004A },
-       { 0x006B, 0x004B },
-       { 0x006C, 0x004C },
-       { 0x006D, 0x004D },
-       { 0x006E, 0x004E },
-       { 0x006F, 0x004F },
-       { 0x0070, 0x0050 },
-       { 0x0071, 0x0051 },
-       { 0x0072, 0x0052 },
-       { 0x0073, 0x0053 },
-       { 0x0074, 0x0054 },
-       { 0x0075, 0x0055 },
-       { 0x0076, 0x0056 },
-       { 0x0077, 0x0057 },
-       { 0x0078, 0x0058 },
-       { 0x0079, 0x0059 },
-       { 0x007A, 0x005A },
-       { 0x00B5, 0x039C },
-       { 0x00E0, 0x00C0 },
-       { 0x00E1, 0x00C1 },
-       { 0x00E2, 0x00C2 },
-       { 0x00E3, 0x00C3 },
-       { 0x00E4, 0x00C4 },
-       { 0x00E5, 0x00C5 },
-       { 0x00E6, 0x00C6 },
-       { 0x00E7, 0x00C7 },
-       { 0x00E8, 0x00C8 },
-       { 0x00E9, 0x00C9 },
-       { 0x00EA, 0x00CA },
-       { 0x00EB, 0x00CB },
-       { 0x00EC, 0x00CC },
-       { 0x00ED, 0x00CD },
-       { 0x00EE, 0x00CE },
-       { 0x00EF, 0x00CF },
-       { 0x00F0, 0x00D0 },
-       { 0x00F1, 0x00D1 },
-       { 0x00F2, 0x00D2 },
-       { 0x00F3, 0x00D3 },
-       { 0x00F4, 0x00D4 },
-       { 0x00F5, 0x00D5 },
-       { 0x00F6, 0x00D6 },
-       { 0x00F8, 0x00D8 },
-       { 0x00F9, 0x00D9 },
-       { 0x00FA, 0x00DA },
-       { 0x00FB, 0x00DB },
-       { 0x00FC, 0x00DC },
-       { 0x00FD, 0x00DD },
-       { 0x00FE, 0x00DE },
-       { 0x00FF, 0x0178 },
-       { 0x0101, 0x0100 },
-       { 0x0103, 0x0102 },
-       { 0x0105, 0x0104 },
-       { 0x0107, 0x0106 },
-       { 0x0109, 0x0108 },
-       { 0x010B, 0x010A },
-       { 0x010D, 0x010C },
-       { 0x010F, 0x010E },
-       { 0x0111, 0x0110 },
-       { 0x0113, 0x0112 },
-       { 0x0115, 0x0114 },
-       { 0x0117, 0x0116 },
-       { 0x0119, 0x0118 },
-       { 0x011B, 0x011A },
-       { 0x011D, 0x011C },
-       { 0x011F, 0x011E },
-       { 0x0121, 0x0120 },
-       { 0x0123, 0x0122 },
-       { 0x0125, 0x0124 },
-       { 0x0127, 0x0126 },
-       { 0x0129, 0x0128 },
-       { 0x012B, 0x012A },
-       { 0x012D, 0x012C },
-       { 0x012F, 0x012E },
-       { 0x0131, 0x0049 },
-       { 0x0133, 0x0132 },
-       { 0x0135, 0x0134 },
-       { 0x0137, 0x0136 },
-       { 0x013A, 0x0139 },
-       { 0x013C, 0x013B },
-       { 0x013E, 0x013D },
-       { 0x0140, 0x013F },
-       { 0x0142, 0x0141 },
-       { 0x0144, 0x0143 },
-       { 0x0146, 0x0145 },
-       { 0x0148, 0x0147 },
-       { 0x014B, 0x014A },
-       { 0x014D, 0x014C },
-       { 0x014F, 0x014E },
-       { 0x0151, 0x0150 },
-       { 0x0153, 0x0152 },
-       { 0x0155, 0x0154 },
-       { 0x0157, 0x0156 },
-       { 0x0159, 0x0158 },
-       { 0x015B, 0x015A },
-       { 0x015D, 0x015C },
-       { 0x015F, 0x015E },
-       { 0x0161, 0x0160 },
-       { 0x0163, 0x0162 },
-       { 0x0165, 0x0164 },
-       { 0x0167, 0x0166 },
-       { 0x0169, 0x0168 },
-       { 0x016B, 0x016A },
-       { 0x016D, 0x016C },
-       { 0x016F, 0x016E },
-       { 0x0171, 0x0170 },
-       { 0x0173, 0x0172 },
-       { 0x0175, 0x0174 },
-       { 0x0177, 0x0176 },
-       { 0x017A, 0x0179 },
-       { 0x017C, 0x017B },
-       { 0x017E, 0x017D },
-       { 0x017F, 0x0053 },
-       { 0x0183, 0x0182 },
-       { 0x0185, 0x0184 },
-       { 0x0188, 0x0187 },
-       { 0x018C, 0x018B },
-       { 0x0192, 0x0191 },
-       { 0x0195, 0x01F6 },
-       { 0x0199, 0x0198 },
-       { 0x019E, 0x0220 },
-       { 0x01A1, 0x01A0 },
-       { 0x01A3, 0x01A2 },
-       { 0x01A5, 0x01A4 },
-       { 0x01A8, 0x01A7 },
-       { 0x01AD, 0x01AC },
-       { 0x01B0, 0x01AF },
-       { 0x01B4, 0x01B3 },
-       { 0x01B6, 0x01B5 },
-       { 0x01B9, 0x01B8 },
-       { 0x01BD, 0x01BC },
-       { 0x01BF, 0x01F7 },
-       { 0x01C5, 0x01C4 },
-       { 0x01C6, 0x01C4 },
-       { 0x01C8, 0x01C7 },
-       { 0x01C9, 0x01C7 },
-       { 0x01CB, 0x01CA },
-       { 0x01CC, 0x01CA },
-       { 0x01CE, 0x01CD },
-       { 0x01D0, 0x01CF },
-       { 0x01D2, 0x01D1 },
-       { 0x01D4, 0x01D3 },
-       { 0x01D6, 0x01D5 },
-       { 0x01D8, 0x01D7 },
-       { 0x01DA, 0x01D9 },
-       { 0x01DC, 0x01DB },
-       { 0x01DD, 0x018E },
-       { 0x01DF, 0x01DE },
-       { 0x01E1, 0x01E0 },
-       { 0x01E3, 0x01E2 },
-       { 0x01E5, 0x01E4 },
-       { 0x01E7, 0x01E6 },
-       { 0x01E9, 0x01E8 },
-       { 0x01EB, 0x01EA },
-       { 0x01ED, 0x01EC },
-       { 0x01EF, 0x01EE },
-       { 0x01F2, 0x01F1 },
-       { 0x01F3, 0x01F1 },
-       { 0x01F5, 0x01F4 },
-       { 0x01F9, 0x01F8 },
-       { 0x01FB, 0x01FA },
-       { 0x01FD, 0x01FC },
-       { 0x01FF, 0x01FE },
-       { 0x0201, 0x0200 },
-       { 0x0203, 0x0202 },
-       { 0x0205, 0x0204 },
-       { 0x0207, 0x0206 },
-       { 0x0209, 0x0208 },
-       { 0x020B, 0x020A },
-       { 0x020D, 0x020C },
-       { 0x020F, 0x020E },
-       { 0x0211, 0x0210 },
-       { 0x0213, 0x0212 },
-       { 0x0215, 0x0214 },
-       { 0x0217, 0x0216 },
-       { 0x0219, 0x0218 },
-       { 0x021B, 0x021A },
-       { 0x021D, 0x021C },
-       { 0x021F, 0x021E },
-       { 0x0223, 0x0222 },
-       { 0x0225, 0x0224 },
-       { 0x0227, 0x0226 },
-       { 0x0229, 0x0228 },
-       { 0x022B, 0x022A },
-       { 0x022D, 0x022C },
-       { 0x022F, 0x022E },
-       { 0x0231, 0x0230 },
-       { 0x0233, 0x0232 },
-       { 0x0253, 0x0181 },
-       { 0x0254, 0x0186 },
-       { 0x0256, 0x0189 },
-       { 0x0257, 0x018A },
-       { 0x0259, 0x018F },
-       { 0x025B, 0x0190 },
-       { 0x0260, 0x0193 },
-       { 0x0263, 0x0194 },
-       { 0x0268, 0x0197 },
-       { 0x0269, 0x0196 },
-       { 0x026F, 0x019C },
-       { 0x0272, 0x019D },
-       { 0x0275, 0x019F },
-       { 0x0280, 0x01A6 },
-       { 0x0283, 0x01A9 },
-       { 0x0288, 0x01AE },
-       { 0x028A, 0x01B1 },
-       { 0x028B, 0x01B2 },
-       { 0x0292, 0x01B7 },
-       { 0x0345, 0x0399 },
-       { 0x03AC, 0x0386 },
-       { 0x03AD, 0x0388 },
-       { 0x03AE, 0x0389 },
-       { 0x03AF, 0x038A },
-       { 0x03B1, 0x0391 },
-       { 0x03B2, 0x0392 },
-       { 0x03B3, 0x0393 },
-       { 0x03B4, 0x0394 },
-       { 0x03B5, 0x0395 },
-       { 0x03B6, 0x0396 },
-       { 0x03B7, 0x0397 },
-       { 0x03B8, 0x0398 },
-       { 0x03B9, 0x0399 },
-       { 0x03BA, 0x039A },
-       { 0x03BB, 0x039B },
-       { 0x03BC, 0x039C },
-       { 0x03BD, 0x039D },
-       { 0x03BE, 0x039E },
-       { 0x03BF, 0x039F },
-       { 0x03C0, 0x03A0 },
-       { 0x03C1, 0x03A1 },
-       { 0x03C2, 0x03A3 },
-       { 0x03C3, 0x03A3 },
-       { 0x03C4, 0x03A4 },
-       { 0x03C5, 0x03A5 },
-       { 0x03C6, 0x03A6 },
-       { 0x03C7, 0x03A7 },
-       { 0x03C8, 0x03A8 },
-       { 0x03C9, 0x03A9 },
-       { 0x03CA, 0x03AA },
-       { 0x03CB, 0x03AB },
-       { 0x03CC, 0x038C },
-       { 0x03CD, 0x038E },
-       { 0x03CE, 0x038F },
-       { 0x03D0, 0x0392 },
-       { 0x03D1, 0x0398 },
-       { 0x03D5, 0x03A6 },
-       { 0x03D6, 0x03A0 },
-       { 0x03D9, 0x03D8 },
-       { 0x03DB, 0x03DA },
-       { 0x03DD, 0x03DC },
-       { 0x03DF, 0x03DE },
-       { 0x03E1, 0x03E0 },
-       { 0x03E3, 0x03E2 },
-       { 0x03E5, 0x03E4 },
-       { 0x03E7, 0x03E6 },
-       { 0x03E9, 0x03E8 },
-       { 0x03EB, 0x03EA },
-       { 0x03ED, 0x03EC },
-       { 0x03EF, 0x03EE },
-       { 0x03F0, 0x039A },
-       { 0x03F1, 0x03A1 },
-       { 0x03F2, 0x03A3 },
-       { 0x03F5, 0x0395 },
-       { 0x0430, 0x0410 },
-       { 0x0431, 0x0411 },
-       { 0x0432, 0x0412 },
-       { 0x0433, 0x0413 },
-       { 0x0434, 0x0414 },
-       { 0x0435, 0x0415 },
-       { 0x0436, 0x0416 },
-       { 0x0437, 0x0417 },
-       { 0x0438, 0x0418 },
-       { 0x0439, 0x0419 },
-       { 0x043A, 0x041A },
-       { 0x043B, 0x041B },
-       { 0x043C, 0x041C },
-       { 0x043D, 0x041D },
-       { 0x043E, 0x041E },
-       { 0x043F, 0x041F },
-       { 0x0440, 0x0420 },
-       { 0x0441, 0x0421 },
-       { 0x0442, 0x0422 },
-       { 0x0443, 0x0423 },
-       { 0x0444, 0x0424 },
-       { 0x0445, 0x0425 },
-       { 0x0446, 0x0426 },
-       { 0x0447, 0x0427 },
-       { 0x0448, 0x0428 },
-       { 0x0449, 0x0429 },
-       { 0x044A, 0x042A },
-       { 0x044B, 0x042B },
-       { 0x044C, 0x042C },
-       { 0x044D, 0x042D },
-       { 0x044E, 0x042E },
-       { 0x044F, 0x042F },
-       { 0x0450, 0x0400 },
-       { 0x0451, 0x0401 },
-       { 0x0452, 0x0402 },
-       { 0x0453, 0x0403 },
-       { 0x0454, 0x0404 },
-       { 0x0455, 0x0405 },
-       { 0x0456, 0x0406 },
-       { 0x0457, 0x0407 },
-       { 0x0458, 0x0408 },
-       { 0x0459, 0x0409 },
-       { 0x045A, 0x040A },
-       { 0x045B, 0x040B },
-       { 0x045C, 0x040C },
-       { 0x045D, 0x040D },
-       { 0x045E, 0x040E },
-       { 0x045F, 0x040F },
-       { 0x0461, 0x0460 },
-       { 0x0463, 0x0462 },
-       { 0x0465, 0x0464 },
-       { 0x0467, 0x0466 },
-       { 0x0469, 0x0468 },
-       { 0x046B, 0x046A },
-       { 0x046D, 0x046C },
-       { 0x046F, 0x046E },
-       { 0x0471, 0x0470 },
-       { 0x0473, 0x0472 },
-       { 0x0475, 0x0474 },
-       { 0x0477, 0x0476 },
-       { 0x0479, 0x0478 },
-       { 0x047B, 0x047A },
-       { 0x047D, 0x047C },
-       { 0x047F, 0x047E },
-       { 0x0481, 0x0480 },
-       { 0x048B, 0x048A },
-       { 0x048D, 0x048C },
-       { 0x048F, 0x048E },
-       { 0x0491, 0x0490 },
-       { 0x0493, 0x0492 },
-       { 0x0495, 0x0494 },
-       { 0x0497, 0x0496 },
-       { 0x0499, 0x0498 },
-       { 0x049B, 0x049A },
-       { 0x049D, 0x049C },
-       { 0x049F, 0x049E },
-       { 0x04A1, 0x04A0 },
-       { 0x04A3, 0x04A2 },
-       { 0x04A5, 0x04A4 },
-       { 0x04A7, 0x04A6 },
-       { 0x04A9, 0x04A8 },
-       { 0x04AB, 0x04AA },
-       { 0x04AD, 0x04AC },
-       { 0x04AF, 0x04AE },
-       { 0x04B1, 0x04B0 },
-       { 0x04B3, 0x04B2 },
-       { 0x04B5, 0x04B4 },
-       { 0x04B7, 0x04B6 },
-       { 0x04B9, 0x04B8 },
-       { 0x04BB, 0x04BA },
-       { 0x04BD, 0x04BC },
-       { 0x04BF, 0x04BE },
-       { 0x04C2, 0x04C1 },
-       { 0x04C4, 0x04C3 },
-       { 0x04C6, 0x04C5 },
-       { 0x04C8, 0x04C7 },
-       { 0x04CA, 0x04C9 },
-       { 0x04CC, 0x04CB },
-       { 0x04CE, 0x04CD },
-       { 0x04D1, 0x04D0 },
-       { 0x04D3, 0x04D2 },
-       { 0x04D5, 0x04D4 },
-       { 0x04D7, 0x04D6 },
-       { 0x04D9, 0x04D8 },
-       { 0x04DB, 0x04DA },
-       { 0x04DD, 0x04DC },
-       { 0x04DF, 0x04DE },
-       { 0x04E1, 0x04E0 },
-       { 0x04E3, 0x04E2 },
-       { 0x04E5, 0x04E4 },
-       { 0x04E7, 0x04E6 },
-       { 0x04E9, 0x04E8 },
-       { 0x04EB, 0x04EA },
-       { 0x04ED, 0x04EC },
-       { 0x04EF, 0x04EE },
-       { 0x04F1, 0x04F0 },
-       { 0x04F3, 0x04F2 },
-       { 0x04F5, 0x04F4 },
-       { 0x04F9, 0x04F8 },
-       { 0x0501, 0x0500 },
-       { 0x0503, 0x0502 },
-       { 0x0505, 0x0504 },
-       { 0x0507, 0x0506 },
-       { 0x0509, 0x0508 },
-       { 0x050B, 0x050A },
-       { 0x050D, 0x050C },
-       { 0x050F, 0x050E },
-       { 0x0561, 0x0531 },
-       { 0x0562, 0x0532 },
-       { 0x0563, 0x0533 },
-       { 0x0564, 0x0534 },
-       { 0x0565, 0x0535 },
-       { 0x0566, 0x0536 },
-       { 0x0567, 0x0537 },
-       { 0x0568, 0x0538 },
-       { 0x0569, 0x0539 },
-       { 0x056A, 0x053A },
-       { 0x056B, 0x053B },
-       { 0x056C, 0x053C },
-       { 0x056D, 0x053D },
-       { 0x056E, 0x053E },
-       { 0x056F, 0x053F },
-       { 0x0570, 0x0540 },
-       { 0x0571, 0x0541 },
-       { 0x0572, 0x0542 },
-       { 0x0573, 0x0543 },
-       { 0x0574, 0x0544 },
-       { 0x0575, 0x0545 },
-       { 0x0576, 0x0546 },
-       { 0x0577, 0x0547 },
-       { 0x0578, 0x0548 },
-       { 0x0579, 0x0549 },
-       { 0x057A, 0x054A },
-       { 0x057B, 0x054B },
-       { 0x057C, 0x054C },
-       { 0x057D, 0x054D },
-       { 0x057E, 0x054E },
-       { 0x057F, 0x054F },
-       { 0x0580, 0x0550 },
-       { 0x0581, 0x0551 },
-       { 0x0582, 0x0552 },
-       { 0x0583, 0x0553 },
-       { 0x0584, 0x0554 },
-       { 0x0585, 0x0555 },
-       { 0x0586, 0x0556 },
-       { 0x1E01, 0x1E00 },
-       { 0x1E03, 0x1E02 },
-       { 0x1E05, 0x1E04 },
-       { 0x1E07, 0x1E06 },
-       { 0x1E09, 0x1E08 },
-       { 0x1E0B, 0x1E0A },
-       { 0x1E0D, 0x1E0C },
-       { 0x1E0F, 0x1E0E },
-       { 0x1E11, 0x1E10 },
-       { 0x1E13, 0x1E12 },
-       { 0x1E15, 0x1E14 },
-       { 0x1E17, 0x1E16 },
-       { 0x1E19, 0x1E18 },
-       { 0x1E1B, 0x1E1A },
-       { 0x1E1D, 0x1E1C },
-       { 0x1E1F, 0x1E1E },
-       { 0x1E21, 0x1E20 },
-       { 0x1E23, 0x1E22 },
-       { 0x1E25, 0x1E24 },
-       { 0x1E27, 0x1E26 },
-       { 0x1E29, 0x1E28 },
-       { 0x1E2B, 0x1E2A },
-       { 0x1E2D, 0x1E2C },
-       { 0x1E2F, 0x1E2E },
-       { 0x1E31, 0x1E30 },
-       { 0x1E33, 0x1E32 },
-       { 0x1E35, 0x1E34 },
-       { 0x1E37, 0x1E36 },
-       { 0x1E39, 0x1E38 },
-       { 0x1E3B, 0x1E3A },
-       { 0x1E3D, 0x1E3C },
-       { 0x1E3F, 0x1E3E },
-       { 0x1E41, 0x1E40 },
-       { 0x1E43, 0x1E42 },
-       { 0x1E45, 0x1E44 },
-       { 0x1E47, 0x1E46 },
-       { 0x1E49, 0x1E48 },
-       { 0x1E4B, 0x1E4A },
-       { 0x1E4D, 0x1E4C },
-       { 0x1E4F, 0x1E4E },
-       { 0x1E51, 0x1E50 },
-       { 0x1E53, 0x1E52 },
-       { 0x1E55, 0x1E54 },
-       { 0x1E57, 0x1E56 },
-       { 0x1E59, 0x1E58 },
-       { 0x1E5B, 0x1E5A },
-       { 0x1E5D, 0x1E5C },
-       { 0x1E5F, 0x1E5E },
-       { 0x1E61, 0x1E60 },
-       { 0x1E63, 0x1E62 },
-       { 0x1E65, 0x1E64 },
-       { 0x1E67, 0x1E66 },
-       { 0x1E69, 0x1E68 },
-       { 0x1E6B, 0x1E6A },
-       { 0x1E6D, 0x1E6C },
-       { 0x1E6F, 0x1E6E },
-       { 0x1E71, 0x1E70 },
-       { 0x1E73, 0x1E72 },
-       { 0x1E75, 0x1E74 },
-       { 0x1E77, 0x1E76 },
-       { 0x1E79, 0x1E78 },
-       { 0x1E7B, 0x1E7A },
-       { 0x1E7D, 0x1E7C },
-       { 0x1E7F, 0x1E7E },
-       { 0x1E81, 0x1E80 },
-       { 0x1E83, 0x1E82 },
-       { 0x1E85, 0x1E84 },
-       { 0x1E87, 0x1E86 },
-       { 0x1E89, 0x1E88 },
-       { 0x1E8B, 0x1E8A },
-       { 0x1E8D, 0x1E8C },
-       { 0x1E8F, 0x1E8E },
-       { 0x1E91, 0x1E90 },
-       { 0x1E93, 0x1E92 },
-       { 0x1E95, 0x1E94 },
-       { 0x1E9B, 0x1E60 },
-       { 0x1EA1, 0x1EA0 },
-       { 0x1EA3, 0x1EA2 },
-       { 0x1EA5, 0x1EA4 },
-       { 0x1EA7, 0x1EA6 },
-       { 0x1EA9, 0x1EA8 },
-       { 0x1EAB, 0x1EAA },
-       { 0x1EAD, 0x1EAC },
-       { 0x1EAF, 0x1EAE },
-       { 0x1EB1, 0x1EB0 },
-       { 0x1EB3, 0x1EB2 },
-       { 0x1EB5, 0x1EB4 },
-       { 0x1EB7, 0x1EB6 },
-       { 0x1EB9, 0x1EB8 },
-       { 0x1EBB, 0x1EBA },
-       { 0x1EBD, 0x1EBC },
-       { 0x1EBF, 0x1EBE },
-       { 0x1EC1, 0x1EC0 },
-       { 0x1EC3, 0x1EC2 },
-       { 0x1EC5, 0x1EC4 },
-       { 0x1EC7, 0x1EC6 },
-       { 0x1EC9, 0x1EC8 },
-       { 0x1ECB, 0x1ECA },
-       { 0x1ECD, 0x1ECC },
-       { 0x1ECF, 0x1ECE },
-       { 0x1ED1, 0x1ED0 },
-       { 0x1ED3, 0x1ED2 },
-       { 0x1ED5, 0x1ED4 },
-       { 0x1ED7, 0x1ED6 },
-       { 0x1ED9, 0x1ED8 },
-       { 0x1EDB, 0x1EDA },
-       { 0x1EDD, 0x1EDC },
-       { 0x1EDF, 0x1EDE },
-       { 0x1EE1, 0x1EE0 },
-       { 0x1EE3, 0x1EE2 },
-       { 0x1EE5, 0x1EE4 },
-       { 0x1EE7, 0x1EE6 },
-       { 0x1EE9, 0x1EE8 },
-       { 0x1EEB, 0x1EEA },
-       { 0x1EED, 0x1EEC },
-       { 0x1EEF, 0x1EEE },
-       { 0x1EF1, 0x1EF0 },
-       { 0x1EF3, 0x1EF2 },
-       { 0x1EF5, 0x1EF4 },
-       { 0x1EF7, 0x1EF6 },
-       { 0x1EF9, 0x1EF8 },
-       { 0x1F00, 0x1F08 },
-       { 0x1F01, 0x1F09 },
-       { 0x1F02, 0x1F0A },
-       { 0x1F03, 0x1F0B },
-       { 0x1F04, 0x1F0C },
-       { 0x1F05, 0x1F0D },
-       { 0x1F06, 0x1F0E },
-       { 0x1F07, 0x1F0F },
-       { 0x1F10, 0x1F18 },
-       { 0x1F11, 0x1F19 },
-       { 0x1F12, 0x1F1A },
-       { 0x1F13, 0x1F1B },
-       { 0x1F14, 0x1F1C },
-       { 0x1F15, 0x1F1D },
-       { 0x1F20, 0x1F28 },
-       { 0x1F21, 0x1F29 },
-       { 0x1F22, 0x1F2A },
-       { 0x1F23, 0x1F2B },
-       { 0x1F24, 0x1F2C },
-       { 0x1F25, 0x1F2D },
-       { 0x1F26, 0x1F2E },
-       { 0x1F27, 0x1F2F },
-       { 0x1F30, 0x1F38 },
-       { 0x1F31, 0x1F39 },
-       { 0x1F32, 0x1F3A },
-       { 0x1F33, 0x1F3B },
-       { 0x1F34, 0x1F3C },
-       { 0x1F35, 0x1F3D },
-       { 0x1F36, 0x1F3E },
-       { 0x1F37, 0x1F3F },
-       { 0x1F40, 0x1F48 },
-       { 0x1F41, 0x1F49 },
-       { 0x1F42, 0x1F4A },
-       { 0x1F43, 0x1F4B },
-       { 0x1F44, 0x1F4C },
-       { 0x1F45, 0x1F4D },
-       { 0x1F51, 0x1F59 },
-       { 0x1F53, 0x1F5B },
-       { 0x1F55, 0x1F5D },
-       { 0x1F57, 0x1F5F },
-       { 0x1F60, 0x1F68 },
-       { 0x1F61, 0x1F69 },
-       { 0x1F62, 0x1F6A },
-       { 0x1F63, 0x1F6B },
-       { 0x1F64, 0x1F6C },
-       { 0x1F65, 0x1F6D },
-       { 0x1F66, 0x1F6E },
-       { 0x1F67, 0x1F6F },
-       { 0x1F70, 0x1FBA },
-       { 0x1F71, 0x1FBB },
-       { 0x1F72, 0x1FC8 },
-       { 0x1F73, 0x1FC9 },
-       { 0x1F74, 0x1FCA },
-       { 0x1F75, 0x1FCB },
-       { 0x1F76, 0x1FDA },
-       { 0x1F77, 0x1FDB },
-       { 0x1F78, 0x1FF8 },
-       { 0x1F79, 0x1FF9 },
-       { 0x1F7A, 0x1FEA },
-       { 0x1F7B, 0x1FEB },
-       { 0x1F7C, 0x1FFA },
-       { 0x1F7D, 0x1FFB },
-       { 0x1F80, 0x1F88 },
-       { 0x1F81, 0x1F89 },
-       { 0x1F82, 0x1F8A },
-       { 0x1F83, 0x1F8B },
-       { 0x1F84, 0x1F8C },
-       { 0x1F85, 0x1F8D },
-       { 0x1F86, 0x1F8E },
-       { 0x1F87, 0x1F8F },
-       { 0x1F90, 0x1F98 },
-       { 0x1F91, 0x1F99 },
-       { 0x1F92, 0x1F9A },
-       { 0x1F93, 0x1F9B },
-       { 0x1F94, 0x1F9C },
-       { 0x1F95, 0x1F9D },
-       { 0x1F96, 0x1F9E },
-       { 0x1F97, 0x1F9F },
-       { 0x1FA0, 0x1FA8 },
-       { 0x1FA1, 0x1FA9 },
-       { 0x1FA2, 0x1FAA },
-       { 0x1FA3, 0x1FAB },
-       { 0x1FA4, 0x1FAC },
-       { 0x1FA5, 0x1FAD },
-       { 0x1FA6, 0x1FAE },
-       { 0x1FA7, 0x1FAF },
-       { 0x1FB0, 0x1FB8 },
-       { 0x1FB1, 0x1FB9 },
-       { 0x1FB3, 0x1FBC },
-       { 0x1FBE, 0x0399 },
-       { 0x1FC3, 0x1FCC },
-       { 0x1FD0, 0x1FD8 },
-       { 0x1FD1, 0x1FD9 },
-       { 0x1FE0, 0x1FE8 },
-       { 0x1FE1, 0x1FE9 },
-       { 0x1FE5, 0x1FEC },
-       { 0x1FF3, 0x1FFC },
-       { 0x2170, 0x2160 },
-       { 0x2171, 0x2161 },
-       { 0x2172, 0x2162 },
-       { 0x2173, 0x2163 },
-       { 0x2174, 0x2164 },
-       { 0x2175, 0x2165 },
-       { 0x2176, 0x2166 },
-       { 0x2177, 0x2167 },
-       { 0x2178, 0x2168 },
-       { 0x2179, 0x2169 },
-       { 0x217A, 0x216A },
-       { 0x217B, 0x216B },
-       { 0x217C, 0x216C },
-       { 0x217D, 0x216D },
-       { 0x217E, 0x216E },
-       { 0x217F, 0x216F },
-       { 0x24D0, 0x24B6 },
-       { 0x24D1, 0x24B7 },
-       { 0x24D2, 0x24B8 },
-       { 0x24D3, 0x24B9 },
-       { 0x24D4, 0x24BA },
-       { 0x24D5, 0x24BB },
-       { 0x24D6, 0x24BC },
-       { 0x24D7, 0x24BD },
-       { 0x24D8, 0x24BE },
-       { 0x24D9, 0x24BF },
-       { 0x24DA, 0x24C0 },
-       { 0x24DB, 0x24C1 },
-       { 0x24DC, 0x24C2 },
-       { 0x24DD, 0x24C3 },
-       { 0x24DE, 0x24C4 },
-       { 0x24DF, 0x24C5 },
-       { 0x24E0, 0x24C6 },
-       { 0x24E1, 0x24C7 },
-       { 0x24E2, 0x24C8 },
-       { 0x24E3, 0x24C9 },
-       { 0x24E4, 0x24CA },
-       { 0x24E5, 0x24CB },
-       { 0x24E6, 0x24CC },
-       { 0x24E7, 0x24CD },
-       { 0x24E8, 0x24CE },
-       { 0x24E9, 0x24CF },
-       { 0xFF41, 0xFF21 },
-       { 0xFF42, 0xFF22 },
-       { 0xFF43, 0xFF23 },
-       { 0xFF44, 0xFF24 },
-       { 0xFF45, 0xFF25 },
-       { 0xFF46, 0xFF26 },
-       { 0xFF47, 0xFF27 },
-       { 0xFF48, 0xFF28 },
-       { 0xFF49, 0xFF29 },
-       { 0xFF4A, 0xFF2A },
-       { 0xFF4B, 0xFF2B },
-       { 0xFF4C, 0xFF2C },
-       { 0xFF4D, 0xFF2D },
-       { 0xFF4E, 0xFF2E },
-       { 0xFF4F, 0xFF2F },
-       { 0xFF50, 0xFF30 },
-       { 0xFF51, 0xFF31 },
-       { 0xFF52, 0xFF32 },
-       { 0xFF53, 0xFF33 },
-       { 0xFF54, 0xFF34 },
-       { 0xFF55, 0xFF35 },
-       { 0xFF56, 0xFF36 },
-       { 0xFF57, 0xFF37 },
-       { 0xFF58, 0xFF38 },
-       { 0xFF59, 0xFF39 },
-       { 0xFF5A, 0xFF3A },
-       { 0x00010428, 0x00010400 },
-       { 0x00010429, 0x00010401 },
-       { 0x0001042A, 0x00010402 },
-       { 0x0001042B, 0x00010403 },
-       { 0x0001042C, 0x00010404 },
-       { 0x0001042D, 0x00010405 },
-       { 0x0001042E, 0x00010406 },
-       { 0x0001042F, 0x00010407 },
-       { 0x00010430, 0x00010408 },
-       { 0x00010431, 0x00010409 },
-       { 0x00010432, 0x0001040A },
-       { 0x00010433, 0x0001040B },
-       { 0x00010434, 0x0001040C },
-       { 0x00010435, 0x0001040D },
-       { 0x00010436, 0x0001040E },
-       { 0x00010437, 0x0001040F },
-       { 0x00010438, 0x00010410 },
-       { 0x00010439, 0x00010411 },
-       { 0x0001043A, 0x00010412 },
-       { 0x0001043B, 0x00010413 },
-       { 0x0001043C, 0x00010414 },
-       { 0x0001043D, 0x00010415 },
-       { 0x0001043E, 0x00010416 },
-       { 0x0001043F, 0x00010417 },
-       { 0x00010440, 0x00010418 },
-       { 0x00010441, 0x00010419 },
-       { 0x00010442, 0x0001041A },
-       { 0x00010443, 0x0001041B },
-       { 0x00010444, 0x0001041C },
-       { 0x00010445, 0x0001041D },
-       { 0x00010446, 0x0001041E },
-       { 0x00010447, 0x0001041F },
-       { 0x00010448, 0x00010420 },
-       { 0x00010449, 0x00010421 },
-       { 0x0001044A, 0x00010422 },
-       { 0x0001044B, 0x00010423 },
-       { 0x0001044C, 0x00010424 },
-       { 0x0001044D, 0x00010425 }
+static const struct mb_ucsrange data_wcrange_toupper[] = {
+       { 0x0061, 0x007A },
+       { 0x00B5, 0x00B5 },
+       { 0x00E0, 0x00F6 },
+       { 0x00F8, 0x00FE },
+       { 0x00FF, 0x00FF },
+       { 0x0101, 0x0101 },
+       { 0x0103, 0x0103 },
+       { 0x0105, 0x0105 },
+       { 0x0107, 0x0107 },
+       { 0x0109, 0x0109 },
+       { 0x010B, 0x010B },
+       { 0x010D, 0x010D },
+       { 0x010F, 0x010F },
+       { 0x0111, 0x0111 },
+       { 0x0113, 0x0113 },
+       { 0x0115, 0x0115 },
+       { 0x0117, 0x0117 },
+       { 0x0119, 0x0119 },
+       { 0x011B, 0x011B },
+       { 0x011D, 0x011D },
+       { 0x011F, 0x011F },
+       { 0x0121, 0x0121 },
+       { 0x0123, 0x0123 },
+       { 0x0125, 0x0125 },
+       { 0x0127, 0x0127 },
+       { 0x0129, 0x0129 },
+       { 0x012B, 0x012B },
+       { 0x012D, 0x012D },
+       { 0x012F, 0x012F },
+       { 0x0131, 0x0131 },
+       { 0x0133, 0x0133 },
+       { 0x0135, 0x0135 },
+       { 0x0137, 0x0137 },
+       { 0x013A, 0x013A },
+       { 0x013C, 0x013C },
+       { 0x013E, 0x013E },
+       { 0x0140, 0x0140 },
+       { 0x0142, 0x0142 },
+       { 0x0144, 0x0144 },
+       { 0x0146, 0x0146 },
+       { 0x0148, 0x0148 },
+       { 0x014B, 0x014B },
+       { 0x014D, 0x014D },
+       { 0x014F, 0x014F },
+       { 0x0151, 0x0151 },
+       { 0x0153, 0x0153 },
+       { 0x0155, 0x0155 },
+       { 0x0157, 0x0157 },
+       { 0x0159, 0x0159 },
+       { 0x015B, 0x015B },
+       { 0x015D, 0x015D },
+       { 0x015F, 0x015F },
+       { 0x0161, 0x0161 },
+       { 0x0163, 0x0163 },
+       { 0x0165, 0x0165 },
+       { 0x0167, 0x0167 },
+       { 0x0169, 0x0169 },
+       { 0x016B, 0x016B },
+       { 0x016D, 0x016D },
+       { 0x016F, 0x016F },
+       { 0x0171, 0x0171 },
+       { 0x0173, 0x0173 },
+       { 0x0175, 0x0175 },
+       { 0x0177, 0x0177 },
+       { 0x017A, 0x017A },
+       { 0x017C, 0x017C },
+       { 0x017E, 0x017E },
+       { 0x017F, 0x017F },
+       { 0x0180, 0x0180 },
+       { 0x0183, 0x0183 },
+       { 0x0185, 0x0185 },
+       { 0x0188, 0x0188 },
+       { 0x018C, 0x018C },
+       { 0x0192, 0x0192 },
+       { 0x0195, 0x0195 },
+       { 0x0199, 0x0199 },
+       { 0x019A, 0x019A },
+       { 0x019E, 0x019E },
+       { 0x01A1, 0x01A1 },
+       { 0x01A3, 0x01A3 },
+       { 0x01A5, 0x01A5 },
+       { 0x01A8, 0x01A8 },
+       { 0x01AD, 0x01AD },
+       { 0x01B0, 0x01B0 },
+       { 0x01B4, 0x01B4 },
+       { 0x01B6, 0x01B6 },
+       { 0x01B9, 0x01B9 },
+       { 0x01BD, 0x01BD },
+       { 0x01BF, 0x01BF },
+       { 0x01C5, 0x01C5 },
+       { 0x01C6, 0x01C6 },
+       { 0x01C8, 0x01C8 },
+       { 0x01C9, 0x01C9 },
+       { 0x01CB, 0x01CB },
+       { 0x01CC, 0x01CC },
+       { 0x01CE, 0x01CE },
+       { 0x01D0, 0x01D0 },
+       { 0x01D2, 0x01D2 },
+       { 0x01D4, 0x01D4 },
+       { 0x01D6, 0x01D6 },
+       { 0x01D8, 0x01D8 },
+       { 0x01DA, 0x01DA },
+       { 0x01DC, 0x01DC },
+       { 0x01DD, 0x01DD },
+       { 0x01DF, 0x01DF },
+       { 0x01E1, 0x01E1 },
+       { 0x01E3, 0x01E3 },
+       { 0x01E5, 0x01E5 },
+       { 0x01E7, 0x01E7 },
+       { 0x01E9, 0x01E9 },
+       { 0x01EB, 0x01EB },
+       { 0x01ED, 0x01ED },
+       { 0x01EF, 0x01EF },
+       { 0x01F2, 0x01F2 },
+       { 0x01F3, 0x01F3 },
+       { 0x01F5, 0x01F5 },
+       { 0x01F9, 0x01F9 },
+       { 0x01FB, 0x01FB },
+       { 0x01FD, 0x01FD },
+       { 0x01FF, 0x01FF },
+       { 0x0201, 0x0201 },
+       { 0x0203, 0x0203 },
+       { 0x0205, 0x0205 },
+       { 0x0207, 0x0207 },
+       { 0x0209, 0x0209 },
+       { 0x020B, 0x020B },
+       { 0x020D, 0x020D },
+       { 0x020F, 0x020F },
+       { 0x0211, 0x0211 },
+       { 0x0213, 0x0213 },
+       { 0x0215, 0x0215 },
+       { 0x0217, 0x0217 },
+       { 0x0219, 0x0219 },
+       { 0x021B, 0x021B },
+       { 0x021D, 0x021D },
+       { 0x021F, 0x021F },
+       { 0x0223, 0x0223 },
+       { 0x0225, 0x0225 },
+       { 0x0227, 0x0227 },
+       { 0x0229, 0x0229 },
+       { 0x022B, 0x022B },
+       { 0x022D, 0x022D },
+       { 0x022F, 0x022F },
+       { 0x0231, 0x0231 },
+       { 0x0233, 0x0233 },
+       { 0x023C, 0x023C },
+       { 0x023F, 0x0240 },
+       { 0x0242, 0x0242 },
+       { 0x0247, 0x0247 },
+       { 0x0249, 0x0249 },
+       { 0x024B, 0x024B },
+       { 0x024D, 0x024D },
+       { 0x024F, 0x024F },
+       { 0x0250, 0x0250 },
+       { 0x0251, 0x0251 },
+       { 0x0252, 0x0252 },
+       { 0x0253, 0x0253 },
+       { 0x0254, 0x0254 },
+       { 0x0256, 0x0257 },
+       { 0x0259, 0x0259 },
+       { 0x025B, 0x025B },
+       { 0x025C, 0x025C },
+       { 0x0260, 0x0260 },
+       { 0x0261, 0x0261 },
+       { 0x0263, 0x0263 },
+       { 0x0265, 0x0265 },
+       { 0x0266, 0x0266 },
+       { 0x0268, 0x0268 },
+       { 0x0269, 0x0269 },
+       { 0x026B, 0x026B },
+       { 0x026C, 0x026C },
+       { 0x026F, 0x026F },
+       { 0x0271, 0x0271 },
+       { 0x0272, 0x0272 },
+       { 0x0275, 0x0275 },
+       { 0x027D, 0x027D },
+       { 0x0280, 0x0280 },
+       { 0x0283, 0x0283 },
+       { 0x0287, 0x0287 },
+       { 0x0288, 0x0288 },
+       { 0x0289, 0x0289 },
+       { 0x028A, 0x028B },
+       { 0x028C, 0x028C },
+       { 0x0292, 0x0292 },
+       { 0x029E, 0x029E },
+       { 0x0345, 0x0345 },
+       { 0x0371, 0x0371 },
+       { 0x0373, 0x0373 },
+       { 0x0377, 0x0377 },
+       { 0x037B, 0x037D },
+       { 0x03AC, 0x03AC },
+       { 0x03AD, 0x03AF },
+       { 0x03B1, 0x03C1 },
+       { 0x03C2, 0x03C2 },
+       { 0x03C3, 0x03CB },
+       { 0x03CC, 0x03CC },
+       { 0x03CD, 0x03CE },
+       { 0x03D0, 0x03D0 },
+       { 0x03D1, 0x03D1 },
+       { 0x03D5, 0x03D5 },
+       { 0x03D6, 0x03D6 },
+       { 0x03D7, 0x03D7 },
+       { 0x03D9, 0x03D9 },
+       { 0x03DB, 0x03DB },
+       { 0x03DD, 0x03DD },
+       { 0x03DF, 0x03DF },
+       { 0x03E1, 0x03E1 },
+       { 0x03E3, 0x03E3 },
+       { 0x03E5, 0x03E5 },
+       { 0x03E7, 0x03E7 },
+       { 0x03E9, 0x03E9 },
+       { 0x03EB, 0x03EB },
+       { 0x03ED, 0x03ED },
+       { 0x03EF, 0x03EF },
+       { 0x03F0, 0x03F0 },
+       { 0x03F1, 0x03F1 },
+       { 0x03F2, 0x03F2 },
+       { 0x03F3, 0x03F3 },
+       { 0x03F5, 0x03F5 },
+       { 0x03F8, 0x03F8 },
+       { 0x03FB, 0x03FB },
+       { 0x0430, 0x044F },
+       { 0x0450, 0x045F },
+       { 0x0461, 0x0461 },
+       { 0x0463, 0x0463 },
+       { 0x0465, 0x0465 },
+       { 0x0467, 0x0467 },
+       { 0x0469, 0x0469 },
+       { 0x046B, 0x046B },
+       { 0x046D, 0x046D },
+       { 0x046F, 0x046F },
+       { 0x0471, 0x0471 },
+       { 0x0473, 0x0473 },
+       { 0x0475, 0x0475 },
+       { 0x0477, 0x0477 },
+       { 0x0479, 0x0479 },
+       { 0x047B, 0x047B },
+       { 0x047D, 0x047D },
+       { 0x047F, 0x047F },
+       { 0x0481, 0x0481 },
+       { 0x048B, 0x048B },
+       { 0x048D, 0x048D },
+       { 0x048F, 0x048F },
+       { 0x0491, 0x0491 },
+       { 0x0493, 0x0493 },
+       { 0x0495, 0x0495 },
+       { 0x0497, 0x0497 },
+       { 0x0499, 0x0499 },
+       { 0x049B, 0x049B },
+       { 0x049D, 0x049D },
+       { 0x049F, 0x049F },
+       { 0x04A1, 0x04A1 },
+       { 0x04A3, 0x04A3 },
+       { 0x04A5, 0x04A5 },
+       { 0x04A7, 0x04A7 },
+       { 0x04A9, 0x04A9 },
+       { 0x04AB, 0x04AB },
+       { 0x04AD, 0x04AD },
+       { 0x04AF, 0x04AF },
+       { 0x04B1, 0x04B1 },
+       { 0x04B3, 0x04B3 },
+       { 0x04B5, 0x04B5 },
+       { 0x04B7, 0x04B7 },
+       { 0x04B9, 0x04B9 },
+       { 0x04BB, 0x04BB },
+       { 0x04BD, 0x04BD },
+       { 0x04BF, 0x04BF },
+       { 0x04C2, 0x04C2 },
+       { 0x04C4, 0x04C4 },
+       { 0x04C6, 0x04C6 },
+       { 0x04C8, 0x04C8 },
+       { 0x04CA, 0x04CA },
+       { 0x04CC, 0x04CC },
+       { 0x04CE, 0x04CE },
+       { 0x04CF, 0x04CF },
+       { 0x04D1, 0x04D1 },
+       { 0x04D3, 0x04D3 },
+       { 0x04D5, 0x04D5 },
+       { 0x04D7, 0x04D7 },
+       { 0x04D9, 0x04D9 },
+       { 0x04DB, 0x04DB },
+       { 0x04DD, 0x04DD },
+       { 0x04DF, 0x04DF },
+       { 0x04E1, 0x04E1 },
+       { 0x04E3, 0x04E3 },
+       { 0x04E5, 0x04E5 },
+       { 0x04E7, 0x04E7 },
+       { 0x04E9, 0x04E9 },
+       { 0x04EB, 0x04EB },
+       { 0x04ED, 0x04ED },
+       { 0x04EF, 0x04EF },
+       { 0x04F1, 0x04F1 },
+       { 0x04F3, 0x04F3 },
+       { 0x04F5, 0x04F5 },
+       { 0x04F7, 0x04F7 },
+       { 0x04F9, 0x04F9 },
+       { 0x04FB, 0x04FB },
+       { 0x04FD, 0x04FD },
+       { 0x04FF, 0x04FF },
+       { 0x0501, 0x0501 },
+       { 0x0503, 0x0503 },
+       { 0x0505, 0x0505 },
+       { 0x0507, 0x0507 },
+       { 0x0509, 0x0509 },
+       { 0x050B, 0x050B },
+       { 0x050D, 0x050D },
+       { 0x050F, 0x050F },
+       { 0x0511, 0x0511 },
+       { 0x0513, 0x0513 },
+       { 0x0515, 0x0515 },
+       { 0x0517, 0x0517 },
+       { 0x0519, 0x0519 },
+       { 0x051B, 0x051B },
+       { 0x051D, 0x051D },
+       { 0x051F, 0x051F },
+       { 0x0521, 0x0521 },
+       { 0x0523, 0x0523 },
+       { 0x0525, 0x0525 },
+       { 0x0527, 0x0527 },
+       { 0x0529, 0x0529 },
+       { 0x052B, 0x052B },
+       { 0x052D, 0x052D },
+       { 0x052F, 0x052F },
+       { 0x0561, 0x0586 },
+       { 0x1D79, 0x1D79 },
+       { 0x1D7D, 0x1D7D },
+       { 0x1E01, 0x1E01 },
+       { 0x1E03, 0x1E03 },
+       { 0x1E05, 0x1E05 },
+       { 0x1E07, 0x1E07 },
+       { 0x1E09, 0x1E09 },
+       { 0x1E0B, 0x1E0B },
+       { 0x1E0D, 0x1E0D },
+       { 0x1E0F, 0x1E0F },
+       { 0x1E11, 0x1E11 },
+       { 0x1E13, 0x1E13 },
+       { 0x1E15, 0x1E15 },
+       { 0x1E17, 0x1E17 },
+       { 0x1E19, 0x1E19 },
+       { 0x1E1B, 0x1E1B },
+       { 0x1E1D, 0x1E1D },
+       { 0x1E1F, 0x1E1F },
+       { 0x1E21, 0x1E21 },
+       { 0x1E23, 0x1E23 },
+       { 0x1E25, 0x1E25 },
+       { 0x1E27, 0x1E27 },
+       { 0x1E29, 0x1E29 },
+       { 0x1E2B, 0x1E2B },
+       { 0x1E2D, 0x1E2D },
+       { 0x1E2F, 0x1E2F },
+       { 0x1E31, 0x1E31 },
+       { 0x1E33, 0x1E33 },
+       { 0x1E35, 0x1E35 },
+       { 0x1E37, 0x1E37 },
+       { 0x1E39, 0x1E39 },
+       { 0x1E3B, 0x1E3B },
+       { 0x1E3D, 0x1E3D },
+       { 0x1E3F, 0x1E3F },
+       { 0x1E41, 0x1E41 },
+       { 0x1E43, 0x1E43 },
+       { 0x1E45, 0x1E45 },
+       { 0x1E47, 0x1E47 },
+       { 0x1E49, 0x1E49 },
+       { 0x1E4B, 0x1E4B },
+       { 0x1E4D, 0x1E4D },
+       { 0x1E4F, 0x1E4F },
+       { 0x1E51, 0x1E51 },
+       { 0x1E53, 0x1E53 },
+       { 0x1E55, 0x1E55 },
+       { 0x1E57, 0x1E57 },
+       { 0x1E59, 0x1E59 },
+       { 0x1E5B, 0x1E5B },
+       { 0x1E5D, 0x1E5D },
+       { 0x1E5F, 0x1E5F },
+       { 0x1E61, 0x1E61 },
+       { 0x1E63, 0x1E63 },
+       { 0x1E65, 0x1E65 },
+       { 0x1E67, 0x1E67 },
+       { 0x1E69, 0x1E69 },
+       { 0x1E6B, 0x1E6B },
+       { 0x1E6D, 0x1E6D },
+       { 0x1E6F, 0x1E6F },
+       { 0x1E71, 0x1E71 },
+       { 0x1E73, 0x1E73 },
+       { 0x1E75, 0x1E75 },
+       { 0x1E77, 0x1E77 },
+       { 0x1E79, 0x1E79 },
+       { 0x1E7B, 0x1E7B },
+       { 0x1E7D, 0x1E7D },
+       { 0x1E7F, 0x1E7F },
+       { 0x1E81, 0x1E81 },
+       { 0x1E83, 0x1E83 },
+       { 0x1E85, 0x1E85 },
+       { 0x1E87, 0x1E87 },
+       { 0x1E89, 0x1E89 },
+       { 0x1E8B, 0x1E8B },
+       { 0x1E8D, 0x1E8D },
+       { 0x1E8F, 0x1E8F },
+       { 0x1E91, 0x1E91 },
+       { 0x1E93, 0x1E93 },
+       { 0x1E95, 0x1E95 },
+       { 0x1E9B, 0x1E9B },
+       { 0x1EA1, 0x1EA1 },
+       { 0x1EA3, 0x1EA3 },
+       { 0x1EA5, 0x1EA5 },
+       { 0x1EA7, 0x1EA7 },
+       { 0x1EA9, 0x1EA9 },
+       { 0x1EAB, 0x1EAB },
+       { 0x1EAD, 0x1EAD },
+       { 0x1EAF, 0x1EAF },
+       { 0x1EB1, 0x1EB1 },
+       { 0x1EB3, 0x1EB3 },
+       { 0x1EB5, 0x1EB5 },
+       { 0x1EB7, 0x1EB7 },
+       { 0x1EB9, 0x1EB9 },
+       { 0x1EBB, 0x1EBB },
+       { 0x1EBD, 0x1EBD },
+       { 0x1EBF, 0x1EBF },
+       { 0x1EC1, 0x1EC1 },
+       { 0x1EC3, 0x1EC3 },
+       { 0x1EC5, 0x1EC5 },
+       { 0x1EC7, 0x1EC7 },
+       { 0x1EC9, 0x1EC9 },
+       { 0x1ECB, 0x1ECB },
+       { 0x1ECD, 0x1ECD },
+       { 0x1ECF, 0x1ECF },
+       { 0x1ED1, 0x1ED1 },
+       { 0x1ED3, 0x1ED3 },
+       { 0x1ED5, 0x1ED5 },
+       { 0x1ED7, 0x1ED7 },
+       { 0x1ED9, 0x1ED9 },
+       { 0x1EDB, 0x1EDB },
+       { 0x1EDD, 0x1EDD },
+       { 0x1EDF, 0x1EDF },
+       { 0x1EE1, 0x1EE1 },
+       { 0x1EE3, 0x1EE3 },
+       { 0x1EE5, 0x1EE5 },
+       { 0x1EE7, 0x1EE7 },
+       { 0x1EE9, 0x1EE9 },
+       { 0x1EEB, 0x1EEB },
+       { 0x1EED, 0x1EED },
+       { 0x1EEF, 0x1EEF },
+       { 0x1EF1, 0x1EF1 },
+       { 0x1EF3, 0x1EF3 },
+       { 0x1EF5, 0x1EF5 },
+       { 0x1EF7, 0x1EF7 },
+       { 0x1EF9, 0x1EF9 },
+       { 0x1EFB, 0x1EFB },
+       { 0x1EFD, 0x1EFD },
+       { 0x1EFF, 0x1EFF },
+       { 0x1F00, 0x1F07 },
+       { 0x1F10, 0x1F15 },
+       { 0x1F20, 0x1F27 },
+       { 0x1F30, 0x1F37 },
+       { 0x1F40, 0x1F45 },
+       { 0x1F51, 0x1F51 },
+       { 0x1F53, 0x1F53 },
+       { 0x1F55, 0x1F55 },
+       { 0x1F57, 0x1F57 },
+       { 0x1F60, 0x1F67 },
+       { 0x1F70, 0x1F71 },
+       { 0x1F72, 0x1F75 },
+       { 0x1F76, 0x1F77 },
+       { 0x1F78, 0x1F79 },
+       { 0x1F7A, 0x1F7B },
+       { 0x1F7C, 0x1F7D },
+       { 0x1F80, 0x1F87 },
+       { 0x1F90, 0x1F97 },
+       { 0x1FA0, 0x1FA7 },
+       { 0x1FB0, 0x1FB1 },
+       { 0x1FB3, 0x1FB3 },
+       { 0x1FBE, 0x1FBE },
+       { 0x1FC3, 0x1FC3 },
+       { 0x1FD0, 0x1FD1 },
+       { 0x1FE0, 0x1FE1 },
+       { 0x1FE5, 0x1FE5 },
+       { 0x1FF3, 0x1FF3 },
+       { 0x214E, 0x214E },
+       { 0x2170, 0x217F },
+       { 0x2184, 0x2184 },
+       { 0x24D0, 0x24E9 },
+       { 0x2C30, 0x2C5E },
+       { 0x2C61, 0x2C61 },
+       { 0x2C65, 0x2C65 },
+       { 0x2C66, 0x2C66 },
+       { 0x2C68, 0x2C68 },
+       { 0x2C6A, 0x2C6A },
+       { 0x2C6C, 0x2C6C },
+       { 0x2C73, 0x2C73 },
+       { 0x2C76, 0x2C76 },
+       { 0x2C81, 0x2C81 },
+       { 0x2C83, 0x2C83 },
+       { 0x2C85, 0x2C85 },
+       { 0x2C87, 0x2C87 },
+       { 0x2C89, 0x2C89 },
+       { 0x2C8B, 0x2C8B },
+       { 0x2C8D, 0x2C8D },
+       { 0x2C8F, 0x2C8F },
+       { 0x2C91, 0x2C91 },
+       { 0x2C93, 0x2C93 },
+       { 0x2C95, 0x2C95 },
+       { 0x2C97, 0x2C97 },
+       { 0x2C99, 0x2C99 },
+       { 0x2C9B, 0x2C9B },
+       { 0x2C9D, 0x2C9D },
+       { 0x2C9F, 0x2C9F },
+       { 0x2CA1, 0x2CA1 },
+       { 0x2CA3, 0x2CA3 },
+       { 0x2CA5, 0x2CA5 },
+       { 0x2CA7, 0x2CA7 },
+       { 0x2CA9, 0x2CA9 },
+       { 0x2CAB, 0x2CAB },
+       { 0x2CAD, 0x2CAD },
+       { 0x2CAF, 0x2CAF },
+       { 0x2CB1, 0x2CB1 },
+       { 0x2CB3, 0x2CB3 },
+       { 0x2CB5, 0x2CB5 },
+       { 0x2CB7, 0x2CB7 },
+       { 0x2CB9, 0x2CB9 },
+       { 0x2CBB, 0x2CBB },
+       { 0x2CBD, 0x2CBD },
+       { 0x2CBF, 0x2CBF },
+       { 0x2CC1, 0x2CC1 },
+       { 0x2CC3, 0x2CC3 },
+       { 0x2CC5, 0x2CC5 },
+       { 0x2CC7, 0x2CC7 },
+       { 0x2CC9, 0x2CC9 },
+       { 0x2CCB, 0x2CCB },
+       { 0x2CCD, 0x2CCD },
+       { 0x2CCF, 0x2CCF },
+       { 0x2CD1, 0x2CD1 },
+       { 0x2CD3, 0x2CD3 },
+       { 0x2CD5, 0x2CD5 },
+       { 0x2CD7, 0x2CD7 },
+       { 0x2CD9, 0x2CD9 },
+       { 0x2CDB, 0x2CDB },
+       { 0x2CDD, 0x2CDD },
+       { 0x2CDF, 0x2CDF },
+       { 0x2CE1, 0x2CE1 },
+       { 0x2CE3, 0x2CE3 },
+       { 0x2CEC, 0x2CEC },
+       { 0x2CEE, 0x2CEE },
+       { 0x2CF3, 0x2CF3 },
+       { 0x2D00, 0x2D25 },
+       { 0x2D27, 0x2D27 },
+       { 0x2D2D, 0x2D2D },
+       { 0xA641, 0xA641 },
+       { 0xA643, 0xA643 },
+       { 0xA645, 0xA645 },
+       { 0xA647, 0xA647 },
+       { 0xA649, 0xA649 },
+       { 0xA64B, 0xA64B },
+       { 0xA64D, 0xA64D },
+       { 0xA64F, 0xA64F },
+       { 0xA651, 0xA651 },
+       { 0xA653, 0xA653 },
+       { 0xA655, 0xA655 },
+       { 0xA657, 0xA657 },
+       { 0xA659, 0xA659 },
+       { 0xA65B, 0xA65B },
+       { 0xA65D, 0xA65D },
+       { 0xA65F, 0xA65F },
+       { 0xA661, 0xA661 },
+       { 0xA663, 0xA663 },
+       { 0xA665, 0xA665 },
+       { 0xA667, 0xA667 },
+       { 0xA669, 0xA669 },
+       { 0xA66B, 0xA66B },
+       { 0xA66D, 0xA66D },
+       { 0xA681, 0xA681 },
+       { 0xA683, 0xA683 },
+       { 0xA685, 0xA685 },
+       { 0xA687, 0xA687 },
+       { 0xA689, 0xA689 },
+       { 0xA68B, 0xA68B },
+       { 0xA68D, 0xA68D },
+       { 0xA68F, 0xA68F },
+       { 0xA691, 0xA691 },
+       { 0xA693, 0xA693 },
+       { 0xA695, 0xA695 },
+       { 0xA697, 0xA697 },
+       { 0xA699, 0xA699 },
+       { 0xA69B, 0xA69B },
+       { 0xA723, 0xA723 },
+       { 0xA725, 0xA725 },
+       { 0xA727, 0xA727 },
+       { 0xA729, 0xA729 },
+       { 0xA72B, 0xA72B },
+       { 0xA72D, 0xA72D },
+       { 0xA72F, 0xA72F },
+       { 0xA733, 0xA733 },
+       { 0xA735, 0xA735 },
+       { 0xA737, 0xA737 },
+       { 0xA739, 0xA739 },
+       { 0xA73B, 0xA73B },
+       { 0xA73D, 0xA73D },
+       { 0xA73F, 0xA73F },
+       { 0xA741, 0xA741 },
+       { 0xA743, 0xA743 },
+       { 0xA745, 0xA745 },
+       { 0xA747, 0xA747 },
+       { 0xA749, 0xA749 },
+       { 0xA74B, 0xA74B },
+       { 0xA74D, 0xA74D },
+       { 0xA74F, 0xA74F },
+       { 0xA751, 0xA751 },
+       { 0xA753, 0xA753 },
+       { 0xA755, 0xA755 },
+       { 0xA757, 0xA757 },
+       { 0xA759, 0xA759 },
+       { 0xA75B, 0xA75B },
+       { 0xA75D, 0xA75D },
+       { 0xA75F, 0xA75F },
+       { 0xA761, 0xA761 },
+       { 0xA763, 0xA763 },
+       { 0xA765, 0xA765 },
+       { 0xA767, 0xA767 },
+       { 0xA769, 0xA769 },
+       { 0xA76B, 0xA76B },
+       { 0xA76D, 0xA76D },
+       { 0xA76F, 0xA76F },
+       { 0xA77A, 0xA77A },
+       { 0xA77C, 0xA77C },
+       { 0xA77F, 0xA77F },
+       { 0xA781, 0xA781 },
+       { 0xA783, 0xA783 },
+       { 0xA785, 0xA785 },
+       { 0xA787, 0xA787 },
+       { 0xA78C, 0xA78C },
+       { 0xA791, 0xA791 },
+       { 0xA793, 0xA793 },
+       { 0xA797, 0xA797 },
+       { 0xA799, 0xA799 },
+       { 0xA79B, 0xA79B },
+       { 0xA79D, 0xA79D },
+       { 0xA79F, 0xA79F },
+       { 0xA7A1, 0xA7A1 },
+       { 0xA7A3, 0xA7A3 },
+       { 0xA7A5, 0xA7A5 },
+       { 0xA7A7, 0xA7A7 },
+       { 0xA7A9, 0xA7A9 },
+       { 0xFF41, 0xFF5A },
+       { 0x10428, 0x1044F },
+       { 0x118C0, 0x118DF }
 };
 
-static struct mb_ucsrange *data_wctype_toupper_i;
-static int toupper_i_size;
-static int *toupper_cvt;
+static const int data_wcdelta_toupper[] = {
+       32,
+       -743,
+       32,
+       32,
+       -121,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       232,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       300,
+       -195,
+       1,
+       1,
+       1,
+       1,
+       1,
+       -97,
+       1,
+       -163,
+       -130,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       -56,
+       1,
+       2,
+       1,
+       2,
+       1,
+       2,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       79,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       2,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       -10815,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       -10783,
+       -10780,
+       -10782,
+       210,
+       206,
+       205,
+       202,
+       203,
+       -42319,
+       205,
+       -42315,
+       207,
+       -42280,
+       -42308,
+       209,
+       211,
+       -10743,
+       -42305,
+       211,
+       -10749,
+       213,
+       214,
+       -10727,
+       218,
+       218,
+       -42282,
+       218,
+       69,
+       217,
+       71,
+       219,
+       -42258,
+       -84,
+       1,
+       1,
+       1,
+       -130,
+       38,
+       37,
+       32,
+       31,
+       32,
+       64,
+       63,
+       62,
+       57,
+       47,
+       54,
+       8,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       86,
+       80,
+       -7,
+       116,
+       96,
+       1,
+       1,
+       32,
+       80,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       15,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       48,
+       -35332,
+       -3814,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       59,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       -8,
+       -8,
+       -8,
+       -8,
+       -8,
+       -8,
+       -8,
+       -8,
+       -8,
+       -8,
+       -74,
+       -86,
+       -100,
+       -128,
+       -112,
+       -126,
+       -8,
+       -8,
+       -8,
+       -8,
+       -9,
+       7205,
+       -9,
+       -8,
+       -8,
+       -7,
+       -9,
+       28,
+       16,
+       1,
+       26,
+       48,
+       1,
+       10795,
+       10792,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       7264,
+       7264,
+       7264,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       1,
+       32,
+       40,
+       32
+};
 
-int joe_towupper(struct charmap *foo,int c)
+int joe_towupper(struct charmap *foo, int c)
 {
        size_t idx;
 
-       if (c>=0x61 && c<=0x7A)
-               return c+0x41-0x61;
-
-       else if(c<128)
-               return c;
-
-       if (!data_wctype_toupper_i) {
-               int x;
-               int y = -1;
-               data_wctype_toupper_i = (struct mb_ucsrange *)malloc(sizeof(data_wctype_toupper));
-               toupper_cvt = (int *)malloc(sizeof(data_wctype_toupper)/sizeof(struct mb_ucsrange)*sizeof(int));
-
-               for (x=0;x!=sizeof(data_wctype_toupper)/sizeof(struct mb_ucsrange);++x) {
-                       if (y == -1 || data_wctype_toupper_i[y].beg + 1 != data_wctype_toupper[x].beg ||
-                           toupper_cvt[y] != (int)(data_wctype_toupper[x].end - data_wctype_toupper[x].beg)) {
-                               ++y;
-                               data_wctype_toupper_i[y].beg = data_wctype_toupper[x].beg;
-                               data_wctype_toupper_i[y].end = data_wctype_toupper[x].beg;
-                               toupper_cvt[y] = data_wctype_toupper[x].end - data_wctype_toupper[x].beg;
-                       } else
-                               ++data_wctype_toupper_i[y].end;
-               }
-               toupper_i_size = y + 1;
-       }
-
-       idx = mb_ucsbsearch(data_wctype_toupper_i, toupper_i_size, c);
-
-       if (idx == (size_t)-1)
-               return c;
-       else
-               return c+toupper_cvt[idx];
+       if ((idx = mb_ucsbsearch(data_wcrange_toupper,
+           NELEM(data_wcrange_toupper), c)) == (size_t)-1)
+               return (c);
+       return (c - data_wcdelta_toupper[idx]);
 }
 
-static struct mb_ucsrange data_wctype_tolower[]=
-{
-       { 0x0041, 0x0061 },
-       { 0x0042, 0x0062 },
-       { 0x0043, 0x0063 },
-       { 0x0044, 0x0064 },
-       { 0x0045, 0x0065 },
-       { 0x0046, 0x0066 },
-       { 0x0047, 0x0067 },
-       { 0x0048, 0x0068 },
-       { 0x0049, 0x0069 },
-       { 0x004A, 0x006A },
-       { 0x004B, 0x006B },
-       { 0x004C, 0x006C },
-       { 0x004D, 0x006D },
-       { 0x004E, 0x006E },
-       { 0x004F, 0x006F },
-       { 0x0050, 0x0070 },
-       { 0x0051, 0x0071 },
-       { 0x0052, 0x0072 },
-       { 0x0053, 0x0073 },
-       { 0x0054, 0x0074 },
-       { 0x0055, 0x0075 },
-       { 0x0056, 0x0076 },
-       { 0x0057, 0x0077 },
-       { 0x0058, 0x0078 },
-       { 0x0059, 0x0079 },
-       { 0x005A, 0x007A },
-       { 0x00C0, 0x00E0 },
-       { 0x00C1, 0x00E1 },
-       { 0x00C2, 0x00E2 },
-       { 0x00C3, 0x00E3 },
-       { 0x00C4, 0x00E4 },
-       { 0x00C5, 0x00E5 },
-       { 0x00C6, 0x00E6 },
-       { 0x00C7, 0x00E7 },
-       { 0x00C8, 0x00E8 },
-       { 0x00C9, 0x00E9 },
-       { 0x00CA, 0x00EA },
-       { 0x00CB, 0x00EB },
-       { 0x00CC, 0x00EC },
-       { 0x00CD, 0x00ED },
-       { 0x00CE, 0x00EE },
-       { 0x00CF, 0x00EF },
-       { 0x00D0, 0x00F0 },
-       { 0x00D1, 0x00F1 },
-       { 0x00D2, 0x00F2 },
-       { 0x00D3, 0x00F3 },
-       { 0x00D4, 0x00F4 },
-       { 0x00D5, 0x00F5 },
-       { 0x00D6, 0x00F6 },
-       { 0x00D8, 0x00F8 },
-       { 0x00D9, 0x00F9 },
-       { 0x00DA, 0x00FA },
-       { 0x00DB, 0x00FB },
-       { 0x00DC, 0x00FC },
-       { 0x00DD, 0x00FD },
-       { 0x00DE, 0x00FE },
-       { 0x0100, 0x0101 },
-       { 0x0102, 0x0103 },
-       { 0x0104, 0x0105 },
-       { 0x0106, 0x0107 },
-       { 0x0108, 0x0109 },
-       { 0x010A, 0x010B },
-       { 0x010C, 0x010D },
-       { 0x010E, 0x010F },
-       { 0x0110, 0x0111 },
-       { 0x0112, 0x0113 },
-       { 0x0114, 0x0115 },
-       { 0x0116, 0x0117 },
-       { 0x0118, 0x0119 },
-       { 0x011A, 0x011B },
-       { 0x011C, 0x011D },
-       { 0x011E, 0x011F },
-       { 0x0120, 0x0121 },
-       { 0x0122, 0x0123 },
-       { 0x0124, 0x0125 },
-       { 0x0126, 0x0127 },
-       { 0x0128, 0x0129 },
-       { 0x012A, 0x012B },
-       { 0x012C, 0x012D },
-       { 0x012E, 0x012F },
-       { 0x0130, 0x0069 },
-       { 0x0132, 0x0133 },
-       { 0x0134, 0x0135 },
-       { 0x0136, 0x0137 },
-       { 0x0139, 0x013A },
-       { 0x013B, 0x013C },
-       { 0x013D, 0x013E },
-       { 0x013F, 0x0140 },
-       { 0x0141, 0x0142 },
-       { 0x0143, 0x0144 },
-       { 0x0145, 0x0146 },
-       { 0x0147, 0x0148 },
-       { 0x014A, 0x014B },
-       { 0x014C, 0x014D },
-       { 0x014E, 0x014F },
-       { 0x0150, 0x0151 },
-       { 0x0152, 0x0153 },
-       { 0x0154, 0x0155 },
-       { 0x0156, 0x0157 },
-       { 0x0158, 0x0159 },
-       { 0x015A, 0x015B },
-       { 0x015C, 0x015D },
-       { 0x015E, 0x015F },
-       { 0x0160, 0x0161 },
-       { 0x0162, 0x0163 },
-       { 0x0164, 0x0165 },
-       { 0x0166, 0x0167 },
-       { 0x0168, 0x0169 },
-       { 0x016A, 0x016B },
-       { 0x016C, 0x016D },
-       { 0x016E, 0x016F },
-       { 0x0170, 0x0171 },
-       { 0x0172, 0x0173 },
-       { 0x0174, 0x0175 },
-       { 0x0176, 0x0177 },
-       { 0x0178, 0x00FF },
-       { 0x0179, 0x017A },
-       { 0x017B, 0x017C },
-       { 0x017D, 0x017E },
-       { 0x0181, 0x0253 },
-       { 0x0182, 0x0183 },
-       { 0x0184, 0x0185 },
-       { 0x0186, 0x0254 },
-       { 0x0187, 0x0188 },
-       { 0x0189, 0x0256 },
-       { 0x018A, 0x0257 },
-       { 0x018B, 0x018C },
-       { 0x018E, 0x01DD },
-       { 0x018F, 0x0259 },
-       { 0x0190, 0x025B },
-       { 0x0191, 0x0192 },
-       { 0x0193, 0x0260 },
-       { 0x0194, 0x0263 },
-       { 0x0196, 0x0269 },
-       { 0x0197, 0x0268 },
-       { 0x0198, 0x0199 },
-       { 0x019C, 0x026F },
-       { 0x019D, 0x0272 },
-       { 0x019F, 0x0275 },
-       { 0x01A0, 0x01A1 },
-       { 0x01A2, 0x01A3 },
-       { 0x01A4, 0x01A5 },
-       { 0x01A6, 0x0280 },
-       { 0x01A7, 0x01A8 },
-       { 0x01A9, 0x0283 },
-       { 0x01AC, 0x01AD },
-       { 0x01AE, 0x0288 },
-       { 0x01AF, 0x01B0 },
-       { 0x01B1, 0x028A },
-       { 0x01B2, 0x028B },
-       { 0x01B3, 0x01B4 },
-       { 0x01B5, 0x01B6 },
-       { 0x01B7, 0x0292 },
-       { 0x01B8, 0x01B9 },
-       { 0x01BC, 0x01BD },
-       { 0x01C4, 0x01C6 },
-       { 0x01C5, 0x01C6 },
-       { 0x01C7, 0x01C9 },
-       { 0x01C8, 0x01C9 },
-       { 0x01CA, 0x01CC },
-       { 0x01CB, 0x01CC },
-       { 0x01CD, 0x01CE },
-       { 0x01CF, 0x01D0 },
-       { 0x01D1, 0x01D2 },
-       { 0x01D3, 0x01D4 },
-       { 0x01D5, 0x01D6 },
-       { 0x01D7, 0x01D8 },
-       { 0x01D9, 0x01DA },
-       { 0x01DB, 0x01DC },
-       { 0x01DE, 0x01DF },
-       { 0x01E0, 0x01E1 },
-       { 0x01E2, 0x01E3 },
-       { 0x01E4, 0x01E5 },
-       { 0x01E6, 0x01E7 },
-       { 0x01E8, 0x01E9 },
-       { 0x01EA, 0x01EB },
-       { 0x01EC, 0x01ED },
-       { 0x01EE, 0x01EF },
-       { 0x01F1, 0x01F3 },
-       { 0x01F2, 0x01F3 },
-       { 0x01F4, 0x01F5 },
-       { 0x01F6, 0x0195 },
-       { 0x01F7, 0x01BF },
-       { 0x01F8, 0x01F9 },
-       { 0x01FA, 0x01FB },
-       { 0x01FC, 0x01FD },
-       { 0x01FE, 0x01FF },
-       { 0x0200, 0x0201 },
-       { 0x0202, 0x0203 },
-       { 0x0204, 0x0205 },
-       { 0x0206, 0x0207 },
-       { 0x0208, 0x0209 },
-       { 0x020A, 0x020B },
-       { 0x020C, 0x020D },
-       { 0x020E, 0x020F },
-       { 0x0210, 0x0211 },
-       { 0x0212, 0x0213 },
-       { 0x0214, 0x0215 },
-       { 0x0216, 0x0217 },
-       { 0x0218, 0x0219 },
-       { 0x021A, 0x021B },
-       { 0x021C, 0x021D },
-       { 0x021E, 0x021F },
-       { 0x0220, 0x019E },
-       { 0x0222, 0x0223 },
-       { 0x0224, 0x0225 },
-       { 0x0226, 0x0227 },
-       { 0x0228, 0x0229 },
-       { 0x022A, 0x022B },
-       { 0x022C, 0x022D },
-       { 0x022E, 0x022F },
-       { 0x0230, 0x0231 },
-       { 0x0232, 0x0233 },
-       { 0x0386, 0x03AC },
-       { 0x0388, 0x03AD },
-       { 0x0389, 0x03AE },
-       { 0x038A, 0x03AF },
-       { 0x038C, 0x03CC },
-       { 0x038E, 0x03CD },
-       { 0x038F, 0x03CE },
-       { 0x0391, 0x03B1 },
-       { 0x0392, 0x03B2 },
-       { 0x0393, 0x03B3 },
-       { 0x0394, 0x03B4 },
-       { 0x0395, 0x03B5 },
-       { 0x0396, 0x03B6 },
-       { 0x0397, 0x03B7 },
-       { 0x0398, 0x03B8 },
-       { 0x0399, 0x03B9 },
-       { 0x039A, 0x03BA },
-       { 0x039B, 0x03BB },
-       { 0x039C, 0x03BC },
-       { 0x039D, 0x03BD },
-       { 0x039E, 0x03BE },
-       { 0x039F, 0x03BF },
-       { 0x03A0, 0x03C0 },
-       { 0x03A1, 0x03C1 },
-       { 0x03A3, 0x03C3 },
-       { 0x03A4, 0x03C4 },
-       { 0x03A5, 0x03C5 },
-       { 0x03A6, 0x03C6 },
-       { 0x03A7, 0x03C7 },
-       { 0x03A8, 0x03C8 },
-       { 0x03A9, 0x03C9 },
-       { 0x03AA, 0x03CA },
-       { 0x03AB, 0x03CB },
-       { 0x03D8, 0x03D9 },
-       { 0x03DA, 0x03DB },
-       { 0x03DC, 0x03DD },
-       { 0x03DE, 0x03DF },
-       { 0x03E0, 0x03E1 },
-       { 0x03E2, 0x03E3 },
-       { 0x03E4, 0x03E5 },
-       { 0x03E6, 0x03E7 },
-       { 0x03E8, 0x03E9 },
-       { 0x03EA, 0x03EB },
-       { 0x03EC, 0x03ED },
-       { 0x03EE, 0x03EF },
-       { 0x03F4, 0x03B8 },
-       { 0x0400, 0x0450 },
-       { 0x0401, 0x0451 },
-       { 0x0402, 0x0452 },
-       { 0x0403, 0x0453 },
-       { 0x0404, 0x0454 },
-       { 0x0405, 0x0455 },
-       { 0x0406, 0x0456 },
-       { 0x0407, 0x0457 },
-       { 0x0408, 0x0458 },
-       { 0x0409, 0x0459 },
-       { 0x040A, 0x045A },
-       { 0x040B, 0x045B },
-       { 0x040C, 0x045C },
-       { 0x040D, 0x045D },
-       { 0x040E, 0x045E },
-       { 0x040F, 0x045F },
-       { 0x0410, 0x0430 },
-       { 0x0411, 0x0431 },
-       { 0x0412, 0x0432 },
-       { 0x0413, 0x0433 },
-       { 0x0414, 0x0434 },
-       { 0x0415, 0x0435 },
-       { 0x0416, 0x0436 },
-       { 0x0417, 0x0437 },
-       { 0x0418, 0x0438 },
-       { 0x0419, 0x0439 },
-       { 0x041A, 0x043A },
-       { 0x041B, 0x043B },
-       { 0x041C, 0x043C },
-       { 0x041D, 0x043D },
-       { 0x041E, 0x043E },
-       { 0x041F, 0x043F },
-       { 0x0420, 0x0440 },
-       { 0x0421, 0x0441 },
-       { 0x0422, 0x0442 },
-       { 0x0423, 0x0443 },
-       { 0x0424, 0x0444 },
-       { 0x0425, 0x0445 },
-       { 0x0426, 0x0446 },
-       { 0x0427, 0x0447 },
-       { 0x0428, 0x0448 },
-       { 0x0429, 0x0449 },
-       { 0x042A, 0x044A },
-       { 0x042B, 0x044B },
-       { 0x042C, 0x044C },
-       { 0x042D, 0x044D },
-       { 0x042E, 0x044E },
-       { 0x042F, 0x044F },
-       { 0x0460, 0x0461 },
-       { 0x0462, 0x0463 },
-       { 0x0464, 0x0465 },
-       { 0x0466, 0x0467 },
-       { 0x0468, 0x0469 },
-       { 0x046A, 0x046B },
-       { 0x046C, 0x046D },
-       { 0x046E, 0x046F },
-       { 0x0470, 0x0471 },
-       { 0x0472, 0x0473 },
-       { 0x0474, 0x0475 },
-       { 0x0476, 0x0477 },
-       { 0x0478, 0x0479 },
-       { 0x047A, 0x047B },
-       { 0x047C, 0x047D },
-       { 0x047E, 0x047F },
-       { 0x0480, 0x0481 },
-       { 0x048A, 0x048B },
-       { 0x048C, 0x048D },
-       { 0x048E, 0x048F },
-       { 0x0490, 0x0491 },
-       { 0x0492, 0x0493 },
-       { 0x0494, 0x0495 },
-       { 0x0496, 0x0497 },
-       { 0x0498, 0x0499 },
-       { 0x049A, 0x049B },
-       { 0x049C, 0x049D },
-       { 0x049E, 0x049F },
-       { 0x04A0, 0x04A1 },
-       { 0x04A2, 0x04A3 },
-       { 0x04A4, 0x04A5 },
-       { 0x04A6, 0x04A7 },
-       { 0x04A8, 0x04A9 },
-       { 0x04AA, 0x04AB },
-       { 0x04AC, 0x04AD },
-       { 0x04AE, 0x04AF },
-       { 0x04B0, 0x04B1 },
-       { 0x04B2, 0x04B3 },
-       { 0x04B4, 0x04B5 },
-       { 0x04B6, 0x04B7 },
-       { 0x04B8, 0x04B9 },
-       { 0x04BA, 0x04BB },
-       { 0x04BC, 0x04BD },
-       { 0x04BE, 0x04BF },
-       { 0x04C1, 0x04C2 },
-       { 0x04C3, 0x04C4 },
-       { 0x04C5, 0x04C6 },
-       { 0x04C7, 0x04C8 },
-       { 0x04C9, 0x04CA },
-       { 0x04CB, 0x04CC },
-       { 0x04CD, 0x04CE },
-       { 0x04D0, 0x04D1 },
-       { 0x04D2, 0x04D3 },
-       { 0x04D4, 0x04D5 },
-       { 0x04D6, 0x04D7 },
-       { 0x04D8, 0x04D9 },
-       { 0x04DA, 0x04DB },
-       { 0x04DC, 0x04DD },
-       { 0x04DE, 0x04DF },
-       { 0x04E0, 0x04E1 },
-       { 0x04E2, 0x04E3 },
-       { 0x04E4, 0x04E5 },
-       { 0x04E6, 0x04E7 },
-       { 0x04E8, 0x04E9 },
-       { 0x04EA, 0x04EB },
-       { 0x04EC, 0x04ED },
-       { 0x04EE, 0x04EF },
-       { 0x04F0, 0x04F1 },
-       { 0x04F2, 0x04F3 },
-       { 0x04F4, 0x04F5 },
-       { 0x04F8, 0x04F9 },
-       { 0x0500, 0x0501 },
-       { 0x0502, 0x0503 },
-       { 0x0504, 0x0505 },
-       { 0x0506, 0x0507 },
-       { 0x0508, 0x0509 },
-       { 0x050A, 0x050B },
-       { 0x050C, 0x050D },
-       { 0x050E, 0x050F },
-       { 0x0531, 0x0561 },
-       { 0x0532, 0x0562 },
-       { 0x0533, 0x0563 },
-       { 0x0534, 0x0564 },
-       { 0x0535, 0x0565 },
-       { 0x0536, 0x0566 },
-       { 0x0537, 0x0567 },
-       { 0x0538, 0x0568 },
-       { 0x0539, 0x0569 },
-       { 0x053A, 0x056A },
-       { 0x053B, 0x056B },
-       { 0x053C, 0x056C },
-       { 0x053D, 0x056D },
-       { 0x053E, 0x056E },
-       { 0x053F, 0x056F },
-       { 0x0540, 0x0570 },
-       { 0x0541, 0x0571 },
-       { 0x0542, 0x0572 },
-       { 0x0543, 0x0573 },
-       { 0x0544, 0x0574 },
-       { 0x0545, 0x0575 },
-       { 0x0546, 0x0576 },
-       { 0x0547, 0x0577 },
-       { 0x0548, 0x0578 },
-       { 0x0549, 0x0579 },
-       { 0x054A, 0x057A },
-       { 0x054B, 0x057B },
-       { 0x054C, 0x057C },
-       { 0x054D, 0x057D },
-       { 0x054E, 0x057E },
-       { 0x054F, 0x057F },
-       { 0x0550, 0x0580 },
-       { 0x0551, 0x0581 },
-       { 0x0552, 0x0582 },
-       { 0x0553, 0x0583 },
-       { 0x0554, 0x0584 },
-       { 0x0555, 0x0585 },
-       { 0x0556, 0x0586 },
-       { 0x1E00, 0x1E01 },
-       { 0x1E02, 0x1E03 },
-       { 0x1E04, 0x1E05 },
-       { 0x1E06, 0x1E07 },
-       { 0x1E08, 0x1E09 },
-       { 0x1E0A, 0x1E0B },
-       { 0x1E0C, 0x1E0D },
-       { 0x1E0E, 0x1E0F },
-       { 0x1E10, 0x1E11 },
-       { 0x1E12, 0x1E13 },
-       { 0x1E14, 0x1E15 },
-       { 0x1E16, 0x1E17 },
-       { 0x1E18, 0x1E19 },
-       { 0x1E1A, 0x1E1B },
-       { 0x1E1C, 0x1E1D },
-       { 0x1E1E, 0x1E1F },
-       { 0x1E20, 0x1E21 },
-       { 0x1E22, 0x1E23 },
-       { 0x1E24, 0x1E25 },
-       { 0x1E26, 0x1E27 },
-       { 0x1E28, 0x1E29 },
-       { 0x1E2A, 0x1E2B },
-       { 0x1E2C, 0x1E2D },
-       { 0x1E2E, 0x1E2F },
-       { 0x1E30, 0x1E31 },
-       { 0x1E32, 0x1E33 },
-       { 0x1E34, 0x1E35 },
-       { 0x1E36, 0x1E37 },
-       { 0x1E38, 0x1E39 },
-       { 0x1E3A, 0x1E3B },
-       { 0x1E3C, 0x1E3D },
-       { 0x1E3E, 0x1E3F },
-       { 0x1E40, 0x1E41 },
-       { 0x1E42, 0x1E43 },
-       { 0x1E44, 0x1E45 },
-       { 0x1E46, 0x1E47 },
-       { 0x1E48, 0x1E49 },
-       { 0x1E4A, 0x1E4B },
-       { 0x1E4C, 0x1E4D },
-       { 0x1E4E, 0x1E4F },
-       { 0x1E50, 0x1E51 },
-       { 0x1E52, 0x1E53 },
-       { 0x1E54, 0x1E55 },
-       { 0x1E56, 0x1E57 },
-       { 0x1E58, 0x1E59 },
-       { 0x1E5A, 0x1E5B },
-       { 0x1E5C, 0x1E5D },
-       { 0x1E5E, 0x1E5F },
-       { 0x1E60, 0x1E61 },
-       { 0x1E62, 0x1E63 },
-       { 0x1E64, 0x1E65 },
-       { 0x1E66, 0x1E67 },
-       { 0x1E68, 0x1E69 },
-       { 0x1E6A, 0x1E6B },
-       { 0x1E6C, 0x1E6D },
-       { 0x1E6E, 0x1E6F },
-       { 0x1E70, 0x1E71 },
-       { 0x1E72, 0x1E73 },
-       { 0x1E74, 0x1E75 },
-       { 0x1E76, 0x1E77 },
-       { 0x1E78, 0x1E79 },
-       { 0x1E7A, 0x1E7B },
-       { 0x1E7C, 0x1E7D },
-       { 0x1E7E, 0x1E7F },
-       { 0x1E80, 0x1E81 },
-       { 0x1E82, 0x1E83 },
-       { 0x1E84, 0x1E85 },
-       { 0x1E86, 0x1E87 },
-       { 0x1E88, 0x1E89 },
-       { 0x1E8A, 0x1E8B },
-       { 0x1E8C, 0x1E8D },
-       { 0x1E8E, 0x1E8F },
-       { 0x1E90, 0x1E91 },
-       { 0x1E92, 0x1E93 },
-       { 0x1E94, 0x1E95 },
-       { 0x1EA0, 0x1EA1 },
-       { 0x1EA2, 0x1EA3 },
-       { 0x1EA4, 0x1EA5 },
-       { 0x1EA6, 0x1EA7 },
-       { 0x1EA8, 0x1EA9 },
-       { 0x1EAA, 0x1EAB },
-       { 0x1EAC, 0x1EAD },
-       { 0x1EAE, 0x1EAF },
-       { 0x1EB0, 0x1EB1 },
-       { 0x1EB2, 0x1EB3 },
-       { 0x1EB4, 0x1EB5 },
-       { 0x1EB6, 0x1EB7 },
-       { 0x1EB8, 0x1EB9 },
-       { 0x1EBA, 0x1EBB },
-       { 0x1EBC, 0x1EBD },
-       { 0x1EBE, 0x1EBF },
-       { 0x1EC0, 0x1EC1 },
-       { 0x1EC2, 0x1EC3 },
-       { 0x1EC4, 0x1EC5 },
-       { 0x1EC6, 0x1EC7 },
-       { 0x1EC8, 0x1EC9 },
-       { 0x1ECA, 0x1ECB },
-       { 0x1ECC, 0x1ECD },
-       { 0x1ECE, 0x1ECF },
-       { 0x1ED0, 0x1ED1 },
-       { 0x1ED2, 0x1ED3 },
-       { 0x1ED4, 0x1ED5 },
-       { 0x1ED6, 0x1ED7 },
-       { 0x1ED8, 0x1ED9 },
-       { 0x1EDA, 0x1EDB },
-       { 0x1EDC, 0x1EDD },
-       { 0x1EDE, 0x1EDF },
-       { 0x1EE0, 0x1EE1 },
-       { 0x1EE2, 0x1EE3 },
-       { 0x1EE4, 0x1EE5 },
-       { 0x1EE6, 0x1EE7 },
-       { 0x1EE8, 0x1EE9 },
-       { 0x1EEA, 0x1EEB },
-       { 0x1EEC, 0x1EED },
-       { 0x1EEE, 0x1EEF },
-       { 0x1EF0, 0x1EF1 },
-       { 0x1EF2, 0x1EF3 },
-       { 0x1EF4, 0x1EF5 },
-       { 0x1EF6, 0x1EF7 },
-       { 0x1EF8, 0x1EF9 },
-       { 0x1F08, 0x1F00 },
-       { 0x1F09, 0x1F01 },
-       { 0x1F0A, 0x1F02 },
-       { 0x1F0B, 0x1F03 },
-       { 0x1F0C, 0x1F04 },
-       { 0x1F0D, 0x1F05 },
-       { 0x1F0E, 0x1F06 },
-       { 0x1F0F, 0x1F07 },
-       { 0x1F18, 0x1F10 },
-       { 0x1F19, 0x1F11 },
-       { 0x1F1A, 0x1F12 },
-       { 0x1F1B, 0x1F13 },
-       { 0x1F1C, 0x1F14 },
-       { 0x1F1D, 0x1F15 },
-       { 0x1F28, 0x1F20 },
-       { 0x1F29, 0x1F21 },
-       { 0x1F2A, 0x1F22 },
-       { 0x1F2B, 0x1F23 },
-       { 0x1F2C, 0x1F24 },
-       { 0x1F2D, 0x1F25 },
-       { 0x1F2E, 0x1F26 },
-       { 0x1F2F, 0x1F27 },
-       { 0x1F38, 0x1F30 },
-       { 0x1F39, 0x1F31 },
-       { 0x1F3A, 0x1F32 },
-       { 0x1F3B, 0x1F33 },
-       { 0x1F3C, 0x1F34 },
-       { 0x1F3D, 0x1F35 },
-       { 0x1F3E, 0x1F36 },
-       { 0x1F3F, 0x1F37 },
-       { 0x1F48, 0x1F40 },
-       { 0x1F49, 0x1F41 },
-       { 0x1F4A, 0x1F42 },
-       { 0x1F4B, 0x1F43 },
-       { 0x1F4C, 0x1F44 },
-       { 0x1F4D, 0x1F45 },
-       { 0x1F59, 0x1F51 },
-       { 0x1F5B, 0x1F53 },
-       { 0x1F5D, 0x1F55 },
-       { 0x1F5F, 0x1F57 },
-       { 0x1F68, 0x1F60 },
-       { 0x1F69, 0x1F61 },
-       { 0x1F6A, 0x1F62 },
-       { 0x1F6B, 0x1F63 },
-       { 0x1F6C, 0x1F64 },
-       { 0x1F6D, 0x1F65 },
-       { 0x1F6E, 0x1F66 },
-       { 0x1F6F, 0x1F67 },
-       { 0x1F88, 0x1F80 },
-       { 0x1F89, 0x1F81 },
-       { 0x1F8A, 0x1F82 },
-       { 0x1F8B, 0x1F83 },
-       { 0x1F8C, 0x1F84 },
-       { 0x1F8D, 0x1F85 },
-       { 0x1F8E, 0x1F86 },
-       { 0x1F8F, 0x1F87 },
-       { 0x1F98, 0x1F90 },
-       { 0x1F99, 0x1F91 },
-       { 0x1F9A, 0x1F92 },
-       { 0x1F9B, 0x1F93 },
-       { 0x1F9C, 0x1F94 },
-       { 0x1F9D, 0x1F95 },
-       { 0x1F9E, 0x1F96 },
-       { 0x1F9F, 0x1F97 },
-       { 0x1FA8, 0x1FA0 },
-       { 0x1FA9, 0x1FA1 },
-       { 0x1FAA, 0x1FA2 },
-       { 0x1FAB, 0x1FA3 },
-       { 0x1FAC, 0x1FA4 },
-       { 0x1FAD, 0x1FA5 },
-       { 0x1FAE, 0x1FA6 },
-       { 0x1FAF, 0x1FA7 },
-       { 0x1FB8, 0x1FB0 },
-       { 0x1FB9, 0x1FB1 },
-       { 0x1FBA, 0x1F70 },
-       { 0x1FBB, 0x1F71 },
-       { 0x1FBC, 0x1FB3 },
-       { 0x1FC8, 0x1F72 },
-       { 0x1FC9, 0x1F73 },
-       { 0x1FCA, 0x1F74 },
-       { 0x1FCB, 0x1F75 },
-       { 0x1FCC, 0x1FC3 },
-       { 0x1FD8, 0x1FD0 },
-       { 0x1FD9, 0x1FD1 },
-       { 0x1FDA, 0x1F76 },
-       { 0x1FDB, 0x1F77 },
-       { 0x1FE8, 0x1FE0 },
-       { 0x1FE9, 0x1FE1 },
-       { 0x1FEA, 0x1F7A },
-       { 0x1FEB, 0x1F7B },
-       { 0x1FEC, 0x1FE5 },
-       { 0x1FF8, 0x1F78 },
-       { 0x1FF9, 0x1F79 },
-       { 0x1FFA, 0x1F7C },
-       { 0x1FFB, 0x1F7D },
-       { 0x1FFC, 0x1FF3 },
-       { 0x2126, 0x03C9 },
-       { 0x212A, 0x006B },
-       { 0x212B, 0x00E5 },
-       { 0x2160, 0x2170 },
-       { 0x2161, 0x2171 },
-       { 0x2162, 0x2172 },
-       { 0x2163, 0x2173 },
-       { 0x2164, 0x2174 },
-       { 0x2165, 0x2175 },
-       { 0x2166, 0x2176 },
-       { 0x2167, 0x2177 },
-       { 0x2168, 0x2178 },
-       { 0x2169, 0x2179 },
-       { 0x216A, 0x217A },
-       { 0x216B, 0x217B },
-       { 0x216C, 0x217C },
-       { 0x216D, 0x217D },
-       { 0x216E, 0x217E },
-       { 0x216F, 0x217F },
-       { 0x24B6, 0x24D0 },
-       { 0x24B7, 0x24D1 },
-       { 0x24B8, 0x24D2 },
-       { 0x24B9, 0x24D3 },
-       { 0x24BA, 0x24D4 },
-       { 0x24BB, 0x24D5 },
-       { 0x24BC, 0x24D6 },
-       { 0x24BD, 0x24D7 },
-       { 0x24BE, 0x24D8 },
-       { 0x24BF, 0x24D9 },
-       { 0x24C0, 0x24DA },
-       { 0x24C1, 0x24DB },
-       { 0x24C2, 0x24DC },
-       { 0x24C3, 0x24DD },
-       { 0x24C4, 0x24DE },
-       { 0x24C5, 0x24DF },
-       { 0x24C6, 0x24E0 },
-       { 0x24C7, 0x24E1 },
-       { 0x24C8, 0x24E2 },
-       { 0x24C9, 0x24E3 },
-       { 0x24CA, 0x24E4 },
-       { 0x24CB, 0x24E5 },
-       { 0x24CC, 0x24E6 },
-       { 0x24CD, 0x24E7 },
-       { 0x24CE, 0x24E8 },
-       { 0x24CF, 0x24E9 },
-       { 0xFF21, 0xFF41 },
-       { 0xFF22, 0xFF42 },
-       { 0xFF23, 0xFF43 },
-       { 0xFF24, 0xFF44 },
-       { 0xFF25, 0xFF45 },
-       { 0xFF26, 0xFF46 },
-       { 0xFF27, 0xFF47 },
-       { 0xFF28, 0xFF48 },
-       { 0xFF29, 0xFF49 },
-       { 0xFF2A, 0xFF4A },
-       { 0xFF2B, 0xFF4B },
-       { 0xFF2C, 0xFF4C },
-       { 0xFF2D, 0xFF4D },
-       { 0xFF2E, 0xFF4E },
-       { 0xFF2F, 0xFF4F },
-       { 0xFF30, 0xFF50 },
-       { 0xFF31, 0xFF51 },
-       { 0xFF32, 0xFF52 },
-       { 0xFF33, 0xFF53 },
-       { 0xFF34, 0xFF54 },
-       { 0xFF35, 0xFF55 },
-       { 0xFF36, 0xFF56 },
-       { 0xFF37, 0xFF57 },
-       { 0xFF38, 0xFF58 },
-       { 0xFF39, 0xFF59 },
-       { 0xFF3A, 0xFF5A },
-       { 0x00010400, 0x00010428 },
-       { 0x00010401, 0x00010429 },
-       { 0x00010402, 0x0001042A },
-       { 0x00010403, 0x0001042B },
-       { 0x00010404, 0x0001042C },
-       { 0x00010405, 0x0001042D },
-       { 0x00010406, 0x0001042E },
-       { 0x00010407, 0x0001042F },
-       { 0x00010408, 0x00010430 },
-       { 0x00010409, 0x00010431 },
-       { 0x0001040A, 0x00010432 },
-       { 0x0001040B, 0x00010433 },
-       { 0x0001040C, 0x00010434 },
-       { 0x0001040D, 0x00010435 },
-       { 0x0001040E, 0x00010436 },
-       { 0x0001040F, 0x00010437 },
-       { 0x00010410, 0x00010438 },
-       { 0x00010411, 0x00010439 },
-       { 0x00010412, 0x0001043A },
-       { 0x00010413, 0x0001043B },
-       { 0x00010414, 0x0001043C },
-       { 0x00010415, 0x0001043D },
-       { 0x00010416, 0x0001043E },
-       { 0x00010417, 0x0001043F },
-       { 0x00010418, 0x00010440 },
-       { 0x00010419, 0x00010441 },
-       { 0x0001041A, 0x00010442 },
-       { 0x0001041B, 0x00010443 },
-       { 0x0001041C, 0x00010444 },
-       { 0x0001041D, 0x00010445 },
-       { 0x0001041E, 0x00010446 },
-       { 0x0001041F, 0x00010447 },
-       { 0x00010420, 0x00010448 },
-       { 0x00010421, 0x00010449 },
-       { 0x00010422, 0x0001044A },
-       { 0x00010423, 0x0001044B },
-       { 0x00010424, 0x0001044C },
-       { 0x00010425, 0x0001044D }
+static const struct mb_ucsrange data_wcrange_tolower[] = {
+       { 0x0041, 0x005A },
+       { 0x00C0, 0x00D6 },
+       { 0x00D8, 0x00DE },
+       { 0x0100, 0x0100 },
+       { 0x0102, 0x0102 },
+       { 0x0104, 0x0104 },
+       { 0x0106, 0x0106 },
+       { 0x0108, 0x0108 },
+       { 0x010A, 0x010A },
+       { 0x010C, 0x010C },
+       { 0x010E, 0x010E },
+       { 0x0110, 0x0110 },
+       { 0x0112, 0x0112 },
+       { 0x0114, 0x0114 },
+       { 0x0116, 0x0116 },
+       { 0x0118, 0x0118 },
+       { 0x011A, 0x011A },
+       { 0x011C, 0x011C },
+       { 0x011E, 0x011E },
+       { 0x0120, 0x0120 },
+       { 0x0122, 0x0122 },
+       { 0x0124, 0x0124 },
+       { 0x0126, 0x0126 },
+       { 0x0128, 0x0128 },
+       { 0x012A, 0x012A },
+       { 0x012C, 0x012C },
+       { 0x012E, 0x012E },
+       { 0x0130, 0x0130 },
+       { 0x0132, 0x0132 },
+       { 0x0134, 0x0134 },
+       { 0x0136, 0x0136 },
+       { 0x0139, 0x0139 },
+       { 0x013B, 0x013B },
+       { 0x013D, 0x013D },
+       { 0x013F, 0x013F },
+       { 0x0141, 0x0141 },
+       { 0x0143, 0x0143 },
+       { 0x0145, 0x0145 },
+       { 0x0147, 0x0147 },
+       { 0x014A, 0x014A },
+       { 0x014C, 0x014C },
+       { 0x014E, 0x014E },
+       { 0x0150, 0x0150 },
+       { 0x0152, 0x0152 },
+       { 0x0154, 0x0154 },
+       { 0x0156, 0x0156 },
+       { 0x0158, 0x0158 },
+       { 0x015A, 0x015A },
+       { 0x015C, 0x015C },
+       { 0x015E, 0x015E },
+       { 0x0160, 0x0160 },
+       { 0x0162, 0x0162 },
+       { 0x0164, 0x0164 },
+       { 0x0166, 0x0166 },
+       { 0x0168, 0x0168 },
+       { 0x016A, 0x016A },
+       { 0x016C, 0x016C },
+       { 0x016E, 0x016E },
+       { 0x0170, 0x0170 },
+       { 0x0172, 0x0172 },
+       { 0x0174, 0x0174 },
+       { 0x0176, 0x0176 },
+       { 0x0178, 0x0178 },
+       { 0x0179, 0x0179 },
+       { 0x017B, 0x017B },
+       { 0x017D, 0x017D },
+       { 0x0181, 0x0181 },
+       { 0x0182, 0x0182 },
+       { 0x0184, 0x0184 },
+       { 0x0186, 0x0186 },
+       { 0x0187, 0x0187 },
+       { 0x0189, 0x018A },
+       { 0x018B, 0x018B },
+       { 0x018E, 0x018E },
+       { 0x018F, 0x018F },
+       { 0x0190, 0x0190 },
+       { 0x0191, 0x0191 },
+       { 0x0193, 0x0193 },
+       { 0x0194, 0x0194 },
+       { 0x0196, 0x0196 },
+       { 0x0197, 0x0197 },
+       { 0x0198, 0x0198 },
+       { 0x019C, 0x019C },
+       { 0x019D, 0x019D },
+       { 0x019F, 0x019F },
+       { 0x01A0, 0x01A0 },
+       { 0x01A2, 0x01A2 },
+       { 0x01A4, 0x01A4 },
+       { 0x01A6, 0x01A6 },
+       { 0x01A7, 0x01A7 },
+       { 0x01A9, 0x01A9 },
+       { 0x01AC, 0x01AC },
+       { 0x01AE, 0x01AE },
+       { 0x01AF, 0x01AF },
+       { 0x01B1, 0x01B2 },
+       { 0x01B3, 0x01B3 },
+       { 0x01B5, 0x01B5 },
+       { 0x01B7, 0x01B7 },
+       { 0x01B8, 0x01B8 },
+       { 0x01BC, 0x01BC },
+       { 0x01C4, 0x01C4 },
+       { 0x01C5, 0x01C5 },
+       { 0x01C7, 0x01C7 },
+       { 0x01C8, 0x01C8 },
+       { 0x01CA, 0x01CA },
+       { 0x01CB, 0x01CB },
+       { 0x01CD, 0x01CD },
+       { 0x01CF, 0x01CF },
+       { 0x01D1, 0x01D1 },
+       { 0x01D3, 0x01D3 },
+       { 0x01D5, 0x01D5 },
+       { 0x01D7, 0x01D7 },
+       { 0x01D9, 0x01D9 },
+       { 0x01DB, 0x01DB },
+       { 0x01DE, 0x01DE },
+       { 0x01E0, 0x01E0 },
+       { 0x01E2, 0x01E2 },
+       { 0x01E4, 0x01E4 },
+       { 0x01E6, 0x01E6 },
+       { 0x01E8, 0x01E8 },
+       { 0x01EA, 0x01EA },
+       { 0x01EC, 0x01EC },
+       { 0x01EE, 0x01EE },
+       { 0x01F1, 0x01F1 },
+       { 0x01F2, 0x01F2 },
+       { 0x01F4, 0x01F4 },
+       { 0x01F6, 0x01F6 },
+       { 0x01F7, 0x01F7 },
+       { 0x01F8, 0x01F8 },
+       { 0x01FA, 0x01FA },
+       { 0x01FC, 0x01FC },
+       { 0x01FE, 0x01FE },
+       { 0x0200, 0x0200 },
+       { 0x0202, 0x0202 },
+       { 0x0204, 0x0204 },
+       { 0x0206, 0x0206 },
+       { 0x0208, 0x0208 },
+       { 0x020A, 0x020A },
+       { 0x020C, 0x020C },
+       { 0x020E, 0x020E },
+       { 0x0210, 0x0210 },
+       { 0x0212, 0x0212 },
+       { 0x0214, 0x0214 },
+       { 0x0216, 0x0216 },
+       { 0x0218, 0x0218 },
+       { 0x021A, 0x021A },
+       { 0x021C, 0x021C },
+       { 0x021E, 0x021E },
+       { 0x0220, 0x0220 },
+       { 0x0222, 0x0222 },
+       { 0x0224, 0x0224 },
+       { 0x0226, 0x0226 },
+       { 0x0228, 0x0228 },
+       { 0x022A, 0x022A },
+       { 0x022C, 0x022C },
+       { 0x022E, 0x022E },
+       { 0x0230, 0x0230 },
+       { 0x0232, 0x0232 },
+       { 0x023A, 0x023A },
+       { 0x023B, 0x023B },
+       { 0x023D, 0x023D },
+       { 0x023E, 0x023E },
+       { 0x0241, 0x0241 },
+       { 0x0243, 0x0243 },
+       { 0x0244, 0x0244 },
+       { 0x0245, 0x0245 },
+       { 0x0246, 0x0246 },
+       { 0x0248, 0x0248 },
+       { 0x024A, 0x024A },
+       { 0x024C, 0x024C },
+       { 0x024E, 0x024E },
+       { 0x0370, 0x0370 },
+       { 0x0372, 0x0372 },
+       { 0x0376, 0x0376 },
+       { 0x037F, 0x037F },
+       { 0x0386, 0x0386 },
+       { 0x0388, 0x038A },
+       { 0x038C, 0x038C },
+       { 0x038E, 0x038F },
+       { 0x0391, 0x03A1 },
+       { 0x03A3, 0x03AB },
+       { 0x03CF, 0x03CF },
+       { 0x03D8, 0x03D8 },
+       { 0x03DA, 0x03DA },
+       { 0x03DC, 0x03DC },
+       { 0x03DE, 0x03DE },
+       { 0x03E0, 0x03E0 },
+       { 0x03E2, 0x03E2 },
+       { 0x03E4, 0x03E4 },
+       { 0x03E6, 0x03E6 },
+       { 0x03E8, 0x03E8 },
+       { 0x03EA, 0x03EA },
+       { 0x03EC, 0x03EC },
+       { 0x03EE, 0x03EE },
+       { 0x03F4, 0x03F4 },
+       { 0x03F7, 0x03F7 },
+       { 0x03F9, 0x03F9 },
+       { 0x03FA, 0x03FA },
+       { 0x03FD, 0x03FF },
+       { 0x0400, 0x040F },
+       { 0x0410, 0x042F },
+       { 0x0460, 0x0460 },
+       { 0x0462, 0x0462 },
+       { 0x0464, 0x0464 },
+       { 0x0466, 0x0466 },
+       { 0x0468, 0x0468 },
+       { 0x046A, 0x046A },
+       { 0x046C, 0x046C },
+       { 0x046E, 0x046E },
+       { 0x0470, 0x0470 },
+       { 0x0472, 0x0472 },
+       { 0x0474, 0x0474 },
+       { 0x0476, 0x0476 },
+       { 0x0478, 0x0478 },
+       { 0x047A, 0x047A },
+       { 0x047C, 0x047C },
+       { 0x047E, 0x047E },
+       { 0x0480, 0x0480 },
+       { 0x048A, 0x048A },
+       { 0x048C, 0x048C },
+       { 0x048E, 0x048E },
+       { 0x0490, 0x0490 },
+       { 0x0492, 0x0492 },
+       { 0x0494, 0x0494 },
+       { 0x0496, 0x0496 },
+       { 0x0498, 0x0498 },
+       { 0x049A, 0x049A },
+       { 0x049C, 0x049C },
+       { 0x049E, 0x049E },
+       { 0x04A0, 0x04A0 },
+       { 0x04A2, 0x04A2 },
+       { 0x04A4, 0x04A4 },
+       { 0x04A6, 0x04A6 },
+       { 0x04A8, 0x04A8 },
+       { 0x04AA, 0x04AA },
+       { 0x04AC, 0x04AC },
+       { 0x04AE, 0x04AE },
+       { 0x04B0, 0x04B0 },
+       { 0x04B2, 0x04B2 },
+       { 0x04B4, 0x04B4 },
+       { 0x04B6, 0x04B6 },
+       { 0x04B8, 0x04B8 },
+       { 0x04BA, 0x04BA },
+       { 0x04BC, 0x04BC },
+       { 0x04BE, 0x04BE },
+       { 0x04C0, 0x04C0 },
+       { 0x04C1, 0x04C1 },
+       { 0x04C3, 0x04C3 },
+       { 0x04C5, 0x04C5 },
+       { 0x04C7, 0x04C7 },
+       { 0x04C9, 0x04C9 },
+       { 0x04CB, 0x04CB },
+       { 0x04CD, 0x04CD },
+       { 0x04D0, 0x04D0 },
+       { 0x04D2, 0x04D2 },
+       { 0x04D4, 0x04D4 },
+       { 0x04D6, 0x04D6 },
+       { 0x04D8, 0x04D8 },
+       { 0x04DA, 0x04DA },
+       { 0x04DC, 0x04DC },
+       { 0x04DE, 0x04DE },
+       { 0x04E0, 0x04E0 },
+       { 0x04E2, 0x04E2 },
+       { 0x04E4, 0x04E4 },
+       { 0x04E6, 0x04E6 },
+       { 0x04E8, 0x04E8 },
+       { 0x04EA, 0x04EA },
+       { 0x04EC, 0x04EC },
+       { 0x04EE, 0x04EE },
+       { 0x04F0, 0x04F0 },
+       { 0x04F2, 0x04F2 },
+       { 0x04F4, 0x04F4 },
+       { 0x04F6, 0x04F6 },
+       { 0x04F8, 0x04F8 },
+       { 0x04FA, 0x04FA },
+       { 0x04FC, 0x04FC },
+       { 0x04FE, 0x04FE },
+       { 0x0500, 0x0500 },
+       { 0x0502, 0x0502 },
+       { 0x0504, 0x0504 },
+       { 0x0506, 0x0506 },
+       { 0x0508, 0x0508 },
+       { 0x050A, 0x050A },
+       { 0x050C, 0x050C },
+       { 0x050E, 0x050E },
+       { 0x0510, 0x0510 },
+       { 0x0512, 0x0512 },
+       { 0x0514, 0x0514 },
+       { 0x0516, 0x0516 },
+       { 0x0518, 0x0518 },
+       { 0x051A, 0x051A },
+       { 0x051C, 0x051C },
+       { 0x051E, 0x051E },
+       { 0x0520, 0x0520 },
+       { 0x0522, 0x0522 },
+       { 0x0524, 0x0524 },
+       { 0x0526, 0x0526 },
+       { 0x0528, 0x0528 },
+       { 0x052A, 0x052A },
+       { 0x052C, 0x052C },
+       { 0x052E, 0x052E },
+       { 0x0531, 0x0556 },
+       { 0x10A0, 0x10C5 },
+       { 0x10C7, 0x10C7 },
+       { 0x10CD, 0x10CD },
+       { 0x1E00, 0x1E00 },
+       { 0x1E02, 0x1E02 },
+       { 0x1E04, 0x1E04 },
+       { 0x1E06, 0x1E06 },
+       { 0x1E08, 0x1E08 },
+       { 0x1E0A, 0x1E0A },
+       { 0x1E0C, 0x1E0C },
+       { 0x1E0E, 0x1E0E },
+       { 0x1E10, 0x1E10 },
+       { 0x1E12, 0x1E12 },
+       { 0x1E14, 0x1E14 },
+       { 0x1E16, 0x1E16 },
+       { 0x1E18, 0x1E18 },
+       { 0x1E1A, 0x1E1A },
+       { 0x1E1C, 0x1E1C },
+       { 0x1E1E, 0x1E1E },
+       { 0x1E20, 0x1E20 },
+       { 0x1E22, 0x1E22 },
+       { 0x1E24, 0x1E24 },
+       { 0x1E26, 0x1E26 },
+       { 0x1E28, 0x1E28 },
+       { 0x1E2A, 0x1E2A },
+       { 0x1E2C, 0x1E2C },
+       { 0x1E2E, 0x1E2E },
+       { 0x1E30, 0x1E30 },
+       { 0x1E32, 0x1E32 },
+       { 0x1E34, 0x1E34 },
+       { 0x1E36, 0x1E36 },
+       { 0x1E38, 0x1E38 },
+       { 0x1E3A, 0x1E3A },
+       { 0x1E3C, 0x1E3C },
+       { 0x1E3E, 0x1E3E },
+       { 0x1E40, 0x1E40 },
+       { 0x1E42, 0x1E42 },
+       { 0x1E44, 0x1E44 },
+       { 0x1E46, 0x1E46 },
+       { 0x1E48, 0x1E48 },
+       { 0x1E4A, 0x1E4A },
+       { 0x1E4C, 0x1E4C },
+       { 0x1E4E, 0x1E4E },
+       { 0x1E50, 0x1E50 },
+       { 0x1E52, 0x1E52 },
+       { 0x1E54, 0x1E54 },
+       { 0x1E56, 0x1E56 },
+       { 0x1E58, 0x1E58 },
+       { 0x1E5A, 0x1E5A },
+       { 0x1E5C, 0x1E5C },