Ukrainian support

Oleh R. Nykyforchyn nick at pu.if.ua
Tue Jan 18 13:41:45 CST 2005


Dear maintainers!

I propose a patch to Wine-20050111 that provides full support of Ukrainian
language. First, codepage 21866 (koi8-u) was added and erroneous references
to 20866 (koi8-r) were corrected. Changes to cpmap.pl script were made to
generate cp_21866.c and other involved files automatically.

Second, all keyboard layouts in present version of Wine don't match de facto
standard for Ukrainian keyboards. Most keyboards within my reach (except bought
in ancient times) have the same symbols on key caps, and I assembled them to
two layouts - "Ukrainian standard" and "Russian standard".

To Changelog:
dlls/kernel/nls/ukr.nls, dlls/x11drv/keyboard.c, dlls/kernel/locale.c,
dlls/mlang/mlang.c, libs/unicode/c_21866.c, libs/unicode/cpmap.pl,
dlls/x11drv/xfont.c, libs/unicode/cptable.c, libs/unicode/Makefile.in

Ukrainian codepage 21866 added and respective files corrected. Two keyboard layouts
(for Ukrainian and Russian) submitted.

Oleh R. Nykyforchyn <nick_at_pu.if.ua>

--- wine-20050111/dlls/kernel/nls/ukr.nls.orig	2003-09-08 22:38:47.000000000 +0300
+++ wine-20050111/dlls/kernel/nls/ukr.nls	2005-01-14 15:31:35.000000000 +0200
@@ -36,7 +36,7 @@
   LOCALE_IDEFAULTEBCDICCODEPAGE "500"
   LOCALE_IDEFAULTLANGUAGE "0422"
   LOCALE_IDEFAULTMACCODEPAGE "10017"
-  LOCALE_IDEFAULTUNIXCODEPAGE "20866"
+  LOCALE_IDEFAULTUNIXCODEPAGE "21866"
   LOCALE_IDIGITS "2"
   LOCALE_IDIGITSUBSTITUTION "1"
   LOCALE_IFIRSTDAYOFWEEK "0"
--- wine-20050111/dlls/kernel/locale.c.orig	2004-12-23 20:48:47.000000000 +0200
+++ wine-20050111/dlls/kernel/locale.c	2005-01-14 15:32:02.000000000 +0200
@@ -121,7 +121,7 @@
     { "ISO88598", 28598 },
     { "ISO88599", 28599 },
     { "KOI8R", 20866 },
-    { "KOI8U", 20866 },
+    { "KOI8U", 21866 },
     { "UTF8", CP_UTF8 }
 };
 
--- wine-20050111/dlls/mlang/mlang.c.orig	2004-10-07 06:06:50.000000000 +0300
+++ wine-20050111/dlls/mlang/mlang.c	2005-01-14 15:33:29.000000000 +0200
@@ -187,6 +187,12 @@
              MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT |
              MIMECONTF_VALID_NLS | MIMECONTF_MIME_IE4 | MIMECONTF_MIME_LATEST,
       "koi8-r", "koi8-r", "koi8-r" },
+    { "Cyrillic (KOI8-U)",
+      21866, MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_MINIMAL |
+             MIMECONTF_IMPORT | MIMECONTF_SAVABLE_MAILNEWS |
+             MIMECONTF_SAVABLE_BROWSER | MIMECONTF_EXPORT |
+             MIMECONTF_VALID_NLS | MIMECONTF_MIME_IE4 | MIMECONTF_MIME_LATEST,
+      "koi8-u", "koi8-u", "koi8-u" },
     { "Cyrillic (ISO)",
       28595, MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_MINIMAL |
              MIMECONTF_IMPORT | MIMECONTF_SAVABLE_MAILNEWS |
--- wine-20050111/dlls/x11drv/keyboard.c.orig	2005-01-18 13:35:20.000000000 +0200
+++ wine-20050111/dlls/x11drv/keyboard.c	2005-01-18 18:54:17.000000000 +0200
@@ -488,6 +488,27 @@
  "<>" /* the phantom key */
 };
 
+/*** Ukrainian keyboard layout KOI8-U by O. Nykyforchyn */
+/***  (as it appears on most of keyboards sold today)   */
+static const char main_key_UA_std[MAIN_LEN][4] =
+{
+ "ґҐ","1!","2\"","3'","4;","5%","6:","7?","8*","9(","0)","-_","=+",
+ "йЙ","цЦ","уУ","кК","еЕ","нН","гГ","шШ","щЩ","зЗ","хХ","їЇ",
+ "фФ","іІ","вВ","аА","пП","рР","оО","лЛ","дД","жЖ","єЄ","\\/",
+ "яЯ","чЧ","сС","мМ","иИ","тТ","ьЬ","бБ","юЮ",".,",
+ "<>" /* the phantom key */
+};
+
+/*** Russian keyboard layout KOI8-R (pair to the previous) */
+static const char main_key_RU_std[MAIN_LEN][4] =
+{
+ "ёЁ","1!","2\"","3'","4;","5%","6:","7?","8*","9(","0)","-_","=+",
+ "йЙ","цЦ","уУ","кК","еЕ","нН","гГ","шШ","щЩ","зЗ","хХ","ъЪ",
+ "фФ","ыЫ","вВ","аА","пП","рР","оО","лЛ","дД","жЖ","эЭ","\\/",
+ "яЯ","чЧ","сС","мМ","иИ","тТ","ьЬ","бБ","юЮ",".,",
+ "<>" /* the phantom key */
+};
+
 /*** Spanish keyboard layout (setxkbmap es) */
 static const char main_key_ES[MAIN_LEN][4] =
 {
@@ -812,6 +833,8 @@
  {0x0419, "Russian keyboard layout cp1251", &main_key_RU_cp1251, &main_key_scan_qwerty, &main_key_vkey_qwerty},
  {0x0419, "Russian phonetic keyboard layout", &main_key_RU_phonetic, &main_key_scan_qwerty, &main_key_vkey_qwerty},
  {0x0422, "Ukrainian keyboard layout KOI8-U", &main_key_UA, &main_key_scan_qwerty, &main_key_vkey_qwerty},
+ {0x0422, "Ukrainian keyboard layout (standard)", &main_key_UA_std, &main_key_scan_qwerty, &main_key_vkey_qwerty},
+ {0x0419, "Russian keyboard layout (standard)", &main_key_RU_std, &main_key_scan_qwerty, &main_key_vkey_qwerty},
  {0x040a, "Spanish keyboard layout", &main_key_ES, &main_key_scan_qwerty, &main_key_vkey_qwerty},
  {0x0410, "Italian keyboard layout", &main_key_IT, &main_key_scan_qwerty, &main_key_vkey_qwerty},
  {0x040f, "Icelandic keyboard layout", &main_key_IS, &main_key_scan_qwerty, &main_key_vkey_qwerty},
--- wine-20050111/dlls/x11drv/xfont.c.orig	2005-01-09 18:52:50.000000000 +0200
+++ wine-20050111/dlls/x11drv/xfont.c	2005-01-14 15:38:40.000000000 +0200
@@ -178,8 +178,8 @@
 
 static const SuffixCharset sufch_koi8[] = {
     { "r", RUSSIAN_CHARSET, 20866, X11DRV_CPTABLE_SBCS },
-    { "ru", RUSSIAN_CHARSET, 20866, X11DRV_CPTABLE_SBCS },
-    { "u", RUSSIAN_CHARSET, 20866, X11DRV_CPTABLE_SBCS },
+    { "ru", RUSSIAN_CHARSET, 21866, X11DRV_CPTABLE_SBCS },
+    { "u", RUSSIAN_CHARSET, 21866, X11DRV_CPTABLE_SBCS },
     { NULL, RUSSIAN_CHARSET, 20866, X11DRV_CPTABLE_SBCS }};
 
 static const SuffixCharset sufch_jisx0201[] = {
--- wine-20050111/libs/unicode/c_21866.c.orig	2005-01-14 15:24:43.000000000 +0200
+++ wine-20050111/libs/unicode/c_21866.c	2005-01-14 15:22:25.000000000 +0200
@@ -0,0 +1,716 @@
+/* code page 21866 (Ukrainian KOI8) */
+/* generated from ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/KOI8-R.TXT */
+/* DO NOT EDIT!! */
+
+#include "wine/unicode.h"
+
+static const WCHAR cp2uni[256] =
+{
+    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,
+    0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524,
+    0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590,
+    0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248,
+    0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7,
+    0x2550, 0x2551, 0x2552, 0x0451, 0x0454, 0x2554, 0x0456, 0x0457,
+    0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x0491, 0x045e, 0x255e,
+    0x255f, 0x2560, 0x2561, 0x0401, 0x0404, 0x2563, 0x0406, 0x0407,
+    0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x0490, 0x040e, 0x00a9,
+    0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
+    0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
+    0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
+    0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
+    0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
+    0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
+    0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
+    0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a
+};
+
+static const unsigned char uni2cp_low[4864] =
+{
+    /* 0x0000 .. 0x00ff */
+    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+    0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+    0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+    0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+    0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+    0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+    0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+    0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+    0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+    0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+    0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+    0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+    0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+    0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x9a, 0x21, 0x63, 0x4c, 0x3f, 0x59, 0x7c, 0x3f,
+    0x22, 0xbf, 0x61, 0x3c, 0x3f, 0x2d, 0x72, 0x2d,
+    0x9c, 0x3f, 0x9d, 0x33, 0x27, 0x75, 0x3f, 0x9e,
+    0x2c, 0x31, 0x6f, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43,
+    0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49,
+    0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x78,
+    0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0x3f, 0x3f,
+    0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63,
+    0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69,
+    0x64, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x9f,
+    0x6f, 0x75, 0x75, 0x75, 0x75, 0x79, 0x3f, 0x79,
+    /* 0x0100 .. 0x01ff */
+    0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x43, 0x63,
+    0x43, 0x63, 0x43, 0x63, 0x43, 0x63, 0x44, 0x64,
+    0x44, 0x64, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65,
+    0x45, 0x65, 0x45, 0x65, 0x47, 0x67, 0x47, 0x67,
+    0x47, 0x67, 0x47, 0x67, 0x48, 0x68, 0x48, 0x68,
+    0x49, 0x69, 0x49, 0x69, 0x49, 0x69, 0x49, 0x69,
+    0x49, 0x69, 0x3f, 0x3f, 0x4a, 0x6a, 0x4b, 0x6b,
+    0x3f, 0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x3f,
+    0x3f, 0x4c, 0x6c, 0x4e, 0x6e, 0x4e, 0x6e, 0x4e,
+    0x6e, 0x3f, 0x3f, 0x3f, 0x4f, 0x6f, 0x4f, 0x6f,
+    0x4f, 0x6f, 0x4f, 0x6f, 0x52, 0x72, 0x52, 0x72,
+    0x52, 0x72, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73,
+    0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74,
+    0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75,
+    0x55, 0x75, 0x55, 0x75, 0x57, 0x77, 0x59, 0x79,
+    0x59, 0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x73,
+    0x62, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x45, 0x46, 0x66, 0x3f, 0x3f, 0x3f, 0x3f, 0x49,
+    0x3f, 0x3f, 0x6c, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f,
+    0x4f, 0x6f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x74, 0x3f, 0x3f, 0x54, 0x55,
+    0x75, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7a, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x81, 0x3f, 0x3f, 0x21, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61, 0x49,
+    0x69, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75, 0x55,
+    0x75, 0x55, 0x75, 0x55, 0x75, 0x3f, 0x41, 0x61,
+    0x41, 0x61, 0x41, 0x61, 0x47, 0x67, 0x47, 0x67,
+    0x4b, 0x6b, 0x4f, 0x6f, 0x4f, 0x6f, 0x3f, 0x3f,
+    0x6a, 0x3f, 0x3f, 0x3f, 0x47, 0x67, 0x3f, 0x3f,
+    0x4e, 0x6e, 0x41, 0x61, 0x41, 0x61, 0x4f, 0x6f,
+    /* 0x0200 .. 0x02ff */
+    0x41, 0x61, 0x41, 0x61, 0x45, 0x65, 0x45, 0x65,
+    0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f,
+    0x52, 0x72, 0x52, 0x72, 0x55, 0x75, 0x55, 0x75,
+    0x53, 0x73, 0x54, 0x74, 0x3f, 0x3f, 0x48, 0x68,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x61,
+    0x45, 0x65, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f,
+    0x4f, 0x6f, 0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x67, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x68, 0x3f, 0x6a, 0x72, 0x3f, 0x3f, 0x3f, 0x77,
+    0x79, 0x27, 0x22, 0x60, 0x27, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x5e, 0x76,
+    0x27, 0x2d, 0x27, 0x60, 0x3f, 0x5f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x9c, 0x3f, 0x7e, 0x22, 0x3f, 0x3f,
+    0x3f, 0x6c, 0x73, 0x78, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    /* 0x0300 .. 0x03ff */
+    0x60, 0x27, 0x5e, 0x7e, 0x2d, 0x2d, 0x3f, 0x3f,
+    0x22, 0x3f, 0x9c, 0x22, 0x76, 0x3f, 0x22, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2c,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x5f, 0x5f, 0x5f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x60, 0x27, 0x3f, 0x3f, 0x22, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x27, 0x22, 0x41, 0x9e,
+    0x45, 0x48, 0x49, 0x3f, 0x4f, 0x3f, 0x59, 0x3f,
+    0x3f, 0x41, 0x42, 0x3f, 0x3f, 0x45, 0x5a, 0x48,
+    0x3f, 0x49, 0x4b, 0x3f, 0x4d, 0x4e, 0x3f, 0x4f,
+    0x3f, 0x50, 0x3f, 0x3f, 0x54, 0x59, 0x3f, 0x58,
+    0x3f, 0x3f, 0x49, 0x59, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x75, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x59, 0x59, 0x59, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    /* 0x0400 .. 0x04ff */
+    0xe5, 0xb3, 0x3f, 0xe7, 0xb4, 0x3f, 0xb6, 0xb7,
+    0x3f, 0x3f, 0x3f, 0x3f, 0xeb, 0xe9, 0xbe, 0x3f,
+    0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa,
+    0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0,
+    0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe,
+    0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1,
+    0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda,
+    0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
+    0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde,
+    0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1,
+    0xc5, 0xa3, 0x3f, 0xc7, 0xa4, 0x3f, 0xa6, 0xa7,
+    0x3f, 0x3f, 0x3f, 0x3f, 0xcb, 0xc9, 0xae, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0xbd, 0xad, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0xf6, 0xd6, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0xe1, 0xc1, 0xe1, 0xc1, 0x3f, 0x3f, 0xe5, 0xc5,
+    0x3f, 0x3f, 0x3f, 0x3f, 0xf6, 0xd6, 0xfa, 0xda,
+    0x3f, 0x3f, 0xe9, 0xc9, 0xe9, 0xc9, 0xef, 0xcf,
+    0x3f, 0x3f, 0x3f, 0x3f, 0xfc, 0xdc, 0xf5, 0xd5,
+    0xf5, 0xd5, 0xf5, 0xd5, 0xfe, 0xde, 0x3f, 0x3f,
+    0xf9, 0xd9, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    /* 0x1d00 .. 0x1dff */
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x41, 0x42, 0x3f,
+    0x44, 0x45, 0x3f, 0x47, 0x48, 0x49, 0x4a, 0x4b,
+    0x4c, 0x4d, 0x4e, 0x3f, 0x4f, 0x3f, 0x50, 0x52,
+    0x54, 0x55, 0x57, 0x61, 0x3f, 0x3f, 0x3f, 0x62,
+    0x64, 0x65, 0x3f, 0x3f, 0x3f, 0x67, 0x3f, 0x6b,
+    0x6d, 0x3f, 0x6f, 0x3f, 0x3f, 0x3f, 0x70, 0x74,
+    0x75, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x69, 0x72, 0x75, 0x76, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    /* 0x1e00 .. 0x1eff */
+    0x41, 0x61, 0x42, 0x62, 0x42, 0x62, 0x42, 0x62,
+    0x43, 0x63, 0x44, 0x64, 0x44, 0x64, 0x44, 0x64,
+    0x44, 0x64, 0x44, 0x64, 0x45, 0x65, 0x45, 0x65,
+    0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x46, 0x66,
+    0x47, 0x67, 0x48, 0x68, 0x48, 0x68, 0x48, 0x68,
+    0x48, 0x68, 0x48, 0x68, 0x49, 0x69, 0x49, 0x69,
+    0x4b, 0x6b, 0x4b, 0x6b, 0x4b, 0x6b, 0x4c, 0x6c,
+    0x4c, 0x6c, 0x4c, 0x6c, 0x4c, 0x6c, 0x4d, 0x6d,
+    0x4d, 0x6d, 0x4d, 0x6d, 0x4e, 0x6e, 0x4e, 0x6e,
+    0x4e, 0x6e, 0x4e, 0x6e, 0x4f, 0x6f, 0x4f, 0x6f,
+    0x4f, 0x6f, 0x4f, 0x6f, 0x50, 0x70, 0x50, 0x70,
+    0x52, 0x72, 0x52, 0x72, 0x52, 0x72, 0x52, 0x72,
+    0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73,
+    0x53, 0x73, 0x54, 0x74, 0x54, 0x74, 0x54, 0x74,
+    0x54, 0x74, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75,
+    0x55, 0x75, 0x55, 0x75, 0x56, 0x76, 0x56, 0x76,
+    0x57, 0x77, 0x57, 0x77, 0x57, 0x77, 0x57, 0x77,
+    0x57, 0x77, 0x58, 0x78, 0x58, 0x78, 0x59, 0x79,
+    0x5a, 0x7a, 0x5a, 0x7a, 0x5a, 0x7a, 0x68, 0x74,
+    0x77, 0x79, 0x3f, 0x73, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61,
+    0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61,
+    0x41, 0x61, 0x41, 0x61, 0x41, 0x61, 0x41, 0x61,
+    0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65,
+    0x45, 0x65, 0x45, 0x65, 0x45, 0x65, 0x45, 0x65,
+    0x49, 0x69, 0x49, 0x69, 0x4f, 0x6f, 0x4f, 0x6f,
+    0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f,
+    0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f, 0x4f, 0x6f,
+    0x4f, 0x6f, 0x4f, 0x6f, 0x55, 0x75, 0x55, 0x75,
+    0x55, 0x75, 0x55, 0x75, 0x55, 0x75, 0x55, 0x75,
+    0x55, 0x75, 0x59, 0x79, 0x59, 0x79, 0x59, 0x79,
+    0x59, 0x79, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    /* 0x1f00 .. 0x1fff */
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59, 0x3f, 0x59,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x41, 0x41, 0x41, 0x41, 0x41, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x45, 0x45, 0x48, 0x48, 0x48, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x49, 0x49, 0x49, 0x49, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x59, 0x59, 0x59, 0x59, 0x50, 0x22, 0x22, 0x60,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x4f, 0x4f, 0x3f, 0x3f, 0x3f, 0x27, 0x3f, 0x3f,
+    /* 0x2000 .. 0x20ff */
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x2d, 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x5f,
+    0x60, 0x27, 0x2c, 0x60, 0x22, 0x22, 0x2c, 0x3f,
+    0x3f, 0x3f, 0x95, 0x3f, 0x2e, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20,
+    0x3f, 0x3f, 0x27, 0x22, 0x3f, 0x60, 0x3f, 0x3f,
+    0x3f, 0x3c, 0x3e, 0x3f, 0x21, 0x3f, 0x2d, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x2f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x20,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x9c, 0x69, 0x3f, 0x3f, 0x34, 0x35, 0x36, 0x37,
+    0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x6e,
+    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+    0x38, 0x39, 0x2b, 0x2d, 0x3d, 0x28, 0x29, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x63, 0x3f, 0x3f, 0x4c, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    /* 0x2100 .. 0x21ff */
+    0x3f, 0x3f, 0x43, 0x3f, 0x3f, 0x3f, 0x3f, 0x45,
+    0x3f, 0x3f, 0x67, 0x48, 0x48, 0x48, 0x68, 0x68,
+    0x49, 0x49, 0x4c, 0x6c, 0x3f, 0x4e, 0x3f, 0x3f,
+    0x50, 0x50, 0x51, 0x52, 0x52, 0x52, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x5a, 0x3f, 0x3f, 0x3f,
+    0x5a, 0x3f, 0x4b, 0x41, 0x42, 0x43, 0x65, 0x65,
+    0x45, 0x46, 0x3f, 0x4d, 0x6f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x69, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x44, 0x64, 0x65,
+    0x69, 0x6a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x49, 0x3f, 0x3f, 0x3f, 0x56, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x58, 0x3f, 0x3f, 0x4c, 0x43, 0x44, 0x4d,
+    0x69, 0x3f, 0x3f, 0x3f, 0x76, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x78, 0x3f, 0x3f, 0x6c, 0x63, 0x64, 0x6d,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3c, 0x5e, 0x3e, 0x76, 0x2d, 0x7c, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x2d, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    /* 0x2200 .. 0x22ff */
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x2d, 0x3f, 0x3f, 0x2f, 0x5c, 0x2a,
+    0x9c, 0x95, 0x96, 0x3f, 0x3f, 0x3f, 0x3f, 0x4c,
+    0x3f, 0x3f, 0x3f, 0x7c, 0x7c, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x6e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3a, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x7e, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x7e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x97, 0x97, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3d, 0x3d, 0x3d, 0x3d, 0x98, 0x99, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3c, 0x3e,
+    0x98, 0x99, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x9e, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    /* 0x2300 .. 0x23ff */
+    0x3f, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x93, 0x9b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    /* 0x2400 .. 0x24ff */
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
+    0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x41, 0x42,
+    0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a,
+    0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52,
+    0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a,
+    0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
+    0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
+    0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
+    0x79, 0x7a, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    /* 0x2500 .. 0x25ff */
+    0x80, 0x80, 0x81, 0x81, 0x2d, 0x2d, 0x7c, 0x7c,
+    0x2d, 0x2d, 0x7c, 0x7c, 0x82, 0x82, 0x82, 0x82,
+    0x83, 0x83, 0x83, 0x83, 0x84, 0x84, 0x84, 0x84,
+    0x85, 0x85, 0x85, 0x85, 0x86, 0x86, 0x86, 0x86,
+    0x86, 0x86, 0x86, 0x86, 0x87, 0x87, 0x87, 0x87,
+    0x87, 0x87, 0x87, 0x87, 0x88, 0x88, 0x88, 0x88,
+    0x88, 0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x89,
+    0x89, 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a,
+    0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
+    0x8a, 0x8a, 0x8a, 0x8a, 0x2d, 0x2d, 0x7c, 0x7c,
+    0xa0, 0xa1, 0xa2, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
+    0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0,
+    0xb1, 0xb2, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9,
+    0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x2f, 0x5c, 0x58, 0x2d, 0x7c, 0x2d, 0x7c,
+    0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c, 0x2d, 0x7c,
+    0x8b, 0x3f, 0x3f, 0x3f, 0x8c, 0x3f, 0x3f, 0x3f,
+    0x8d, 0x3f, 0x3f, 0x3f, 0x8e, 0x3f, 0x3f, 0x3f,
+    0x8f, 0x90, 0x91, 0x92, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x94, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x4f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x4f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    /* 0x3000 .. 0x30ff */
+    0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3c, 0x3e, 0x3c, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x5b, 0x5d, 0x3f, 0x22, 0x22, 0x2c,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    /* 0xfb00 .. 0xfbff */
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    /* 0xfe00 .. 0xfeff */
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x2d, 0x2d, 0x2d, 0x2d, 0x5f, 0x5f, 0x5f,
+    0x2c, 0x3f, 0x2e, 0x3f, 0x3b, 0x3a, 0x3f, 0x21,
+    0x2d, 0x28, 0x29, 0x7b, 0x7d, 0x3f, 0x3f, 0x23,
+    0x26, 0x2a, 0x2b, 0x2d, 0x3c, 0x3e, 0x3d, 0x3f,
+    0x5c, 0x24, 0x25, 0x40, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    /* 0xff00 .. 0xffff */
+    0x3f, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+    0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+    0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+    0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+    0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+    0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+    0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+    0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+    0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+    0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+    0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x63, 0x4c, 0x3f, 0x2d, 0x7c, 0x59, 0x3f, 0x3f,
+    0x81, 0x3c, 0x5e, 0x3e, 0x76, 0x94, 0x4f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    /* defaults */
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f
+};
+
+static const unsigned short uni2cp_high[256] =
+{
+    0x0000, 0x0100, 0x0200, 0x0300, 0x0400, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0500, 0x0600, 0x0700,
+    0x0800, 0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x0e00, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,
+    0x1200, 0x1200, 0x1200, 0x0f00, 0x1200, 0x1200, 0x1000, 0x1100
+};
+
+const struct sbcs_table cptable_21866 =
+{
+    { 21866, 1, 0x003f, 0x003f, "Ukrainian KOI8" },
+    cp2uni,
+    uni2cp_low,
+    uni2cp_high
+};
--- wine-20050111/libs/unicode/cpmap.pl.orig	2004-01-21 00:39:06.000000000 +0200
+++ wine-20050111/libs/unicode/cpmap.pl	2005-01-14 15:22:12.000000000 +0200
@@ -82,6 +82,7 @@
     [ 10081, "VENDORS/MICSFT/MAC/TURKISH.TXT",    "Mac Turkish" ],
     [ 20866, "VENDORS/MISC/KOI8-R.TXT",           "Russian KOI8" ],
     [ 20932, "OBSOLETE/EASTASIA/JIS/JIS0208.TXT", "EUC-JP" ],
+    [ 21866, "VENDORS/MISC/KOI8-R.TXT",           "Ukrainian KOI8" ],
     [ 28591, "ISO8859/8859-1.TXT",                "ISO 8859-1 Latin 1" ],
     [ 28592, "ISO8859/8859-2.TXT",                "ISO 8859-2 Latin 2 (East European)" ],
     [ 28593, "ISO8859/8859-3.TXT",                "ISO 8859-3 Latin 3 (South European)" ],
@@ -396,6 +397,58 @@
 
 
 ################################################################
+# parse the input file
+sub READ_KOI8_U_FILE
+{
+    my $name = shift;
+    open INPUT,$name or die "Cannot open $name";
+    @cp2uni = ();
+    @lead_bytes = ();
+    @uni2cp = ();
+
+    while (<INPUT>)
+    {
+        next if /^\#/;  # skip comments
+        next if /^$/;  # skip empty lines
+        next if /\x1a/;  # skip ^Z
+        next if (/^0x([0-9a-fA-F]+)\s+\#UNDEFINED/);  # undefined char
+
+        if (/^0x([0-9a-fA-F]+)\s+\#DBCS LEAD BYTE/)
+        {
+            $cp = hex $1;
+            push @lead_bytes,$cp;
+            $cp2uni[$cp] = 0;
+            next;
+        }
+        if (/^0x([0-9a-fA-F]+)\s+0x([0-9a-fA-F]+)\s+(\#.*)?/)
+        {
+            $cp = hex $1;
+            $uni = hex $2;
+            $cp2uni[$cp] = $uni unless defined($cp2uni[$cp]);
+            $uni2cp[$uni] = $cp unless defined($uni2cp[$uni]);
+            next;
+        }
+        die "$name: Unrecognized line $_\n";
+    }
+# ukrainian ie/IE
+    @cp2uni[0xa4] = 0x454; @uni2cp[0x454] = 0xa4;
+    @cp2uni[0xb4] = 0x404; @uni2cp[0x404] = 0xb4;
+# ukrainian i/I
+    @cp2uni[0xa6] = 0x456; @uni2cp[0x456] = 0xa6;
+    @cp2uni[0xb6] = 0x406; @uni2cp[0x406] = 0xb6;
+# ukrainian yi/YI
+    @cp2uni[0xa7] = 0x457; @uni2cp[0x457] = 0xa7;
+    @cp2uni[0xb7] = 0x407; @uni2cp[0x407] = 0xb7;
+# ukrainian ghe/GHE with upturn
+    @cp2uni[0xad] = 0x491; @uni2cp[0x491] = 0xad;
+    @cp2uni[0xbd] = 0x490; @uni2cp[0x490] = 0xbd;
+# byelarussian short u/U
+    @cp2uni[0xae] = 0x45e; @uni2cp[0x45e] = 0xae;
+    @cp2uni[0xbe] = 0x40e; @uni2cp[0x40e] = 0xbe;
+}
+
+
+################################################################
 # build EUC-JP table from the JIS 0208 file
 # FIXME: for proper EUC-JP we should probably read JIS 0212 too
 # but this would require 3-byte DBCS characters
@@ -1137,6 +1190,7 @@
 
     # symbol codepage file is special
     if ($codepage == 20932) { READ_JIS0208_FILE($MAPPREFIX . $filename); }
+    elsif ($codepage == 21866) { READ_KOI8_U_FILE($MAPPREFIX . $filename); }
     else { READ_FILE($MAPPREFIX . $filename); }
 
     # hack: 0x00a5 must map to backslash in Shift-JIS
--- wine-20050111/libs/unicode/cptable.c.orig	2004-11-30 23:38:58.000000000 +0200
+++ wine-20050111/libs/unicode/cptable.c	2005-01-14 15:22:27.000000000 +0200
@@ -69,6 +69,7 @@
 extern union cptable cptable_10081;
 extern union cptable cptable_20866;
 extern union cptable cptable_20932;
+extern union cptable cptable_21866;
 extern union cptable cptable_28591;
 extern union cptable cptable_28592;
 extern union cptable cptable_28593;
@@ -84,7 +85,7 @@
 extern union cptable cptable_28605;
 extern union cptable cptable_28606;
 
-static const union cptable * const cptables[59] =
+static const union cptable * const cptables[60] =
 {
     &cptable_037,
     &cptable_424,
@@ -131,6 +132,7 @@
     &cptable_10081,
     &cptable_20866,
     &cptable_20932,
+    &cptable_21866,
     &cptable_28591,
     &cptable_28592,
     &cptable_28593,
--- wine-20050111/libs/unicode/Makefile.in.orig	2004-02-13 00:54:00.000000000 +0200
+++ wine-20050111/libs/unicode/Makefile.in	2005-01-14 16:22:30.000000000 +0200
@@ -53,6 +53,7 @@
 	10081 \
 	20866 \
 	20932 \
+	21866 \
 	28591 \
 	28592 \
 	28593 \



More information about the wine-patches mailing list