kernelbase: Reimplement MultiByteToWideChar() using Win32-format codepage tables.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
stable
Alexandre Julliard 2019-12-05 11:22:19 +01:00
parent 5de7b6a159
commit 7e8f1dac30
6 changed files with 1439 additions and 10 deletions

View File

@ -6,6 +6,7 @@ EXTRADLLFLAGS = -nodefaultlibs -nostartfiles -mno-cygwin
C_SRCS = \
console.c \
debug.c \
decompose.c \
digitmap.c \
file.c \
loader.c \

View File

@ -0,0 +1,948 @@
/* Unicode char composition */
/* generated from http://www.unicode.org/Public/12.0.0/ucd/UnicodeData.txt */
/* DO NOT EDIT!! */
#include "windef.h"
static const WCHAR table[5856] =
{
/* index */
0x0110, 0x0120, 0x0130, 0x0140, 0x0150, 0x0100, 0x0160, 0x0100,
0x0100, 0x0170, 0x0180, 0x0190, 0x01a0, 0x01b0, 0x0100, 0x01c0,
0x01d0, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x01e0, 0x0100, 0x0100, 0x01f0, 0x0200,
0x0210, 0x0220, 0x0230, 0x0240, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0250, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0260, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
0x0100, 0x0270, 0x0280, 0x0290, 0x0100, 0x0100, 0x0100, 0x0100,
/* null sub-index */
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0,
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0,
/* sub-index 00 */
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0,
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02c0, 0x02e0, 0x0300, 0x0320,
/* sub-index 01 */
0x0340, 0x0360, 0x0380, 0x03a0, 0x03c0, 0x03e0, 0x0400, 0x0420,
0x02a0, 0x02a0, 0x0440, 0x0460, 0x0480, 0x04a0, 0x04c0, 0x04e0,
/* sub-index 02 */
0x0500, 0x0520, 0x0540, 0x0560, 0x02a0, 0x02a0, 0x02a0, 0x02a0,
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0,
/* sub-index 03 */
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x0580, 0x02a0, 0x02a0, 0x05a0,
0x05c0, 0x05e0, 0x0600, 0x0620, 0x0640, 0x0660, 0x02a0, 0x02a0,
/* sub-index 04 */
0x0680, 0x06a0, 0x02a0, 0x06c0, 0x02a0, 0x06e0, 0x02a0, 0x0700,
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x0720, 0x0740, 0x0760, 0x0780,
/* sub-index 06 */
0x02a0, 0x02a0, 0x07a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0,
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x07c0, 0x07e0, 0x02a0, 0x02a0,
/* sub-index 09 */
0x02a0, 0x02a0, 0x0800, 0x0820, 0x02a0, 0x0840, 0x02a0, 0x02a0,
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x0860, 0x0880, 0x02a0, 0x02a0,
/* sub-index 0a */
0x02a0, 0x02a0, 0x02a0, 0x08a0, 0x02a0, 0x08c0, 0x02a0, 0x02a0,
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0,
/* sub-index 0b */
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x08e0, 0x0900, 0x02a0, 0x02a0,
0x02a0, 0x0920, 0x02a0, 0x02a0, 0x0940, 0x02a0, 0x02a0, 0x02a0,
/* sub-index 0c */
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x0960, 0x02a0, 0x02a0, 0x02a0,
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x0980, 0x02a0, 0x02a0, 0x02a0,
/* sub-index 0d */
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x09a0, 0x02a0, 0x02a0, 0x02a0,
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x09c0, 0x02a0, 0x02a0,
/* sub-index 0f */
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x09e0, 0x0a00, 0x0a20, 0x0a40,
0x0a60, 0x0a80, 0x0aa0, 0x0ac0, 0x02a0, 0x02a0, 0x02a0, 0x02a0,
/* sub-index 10 */
0x02a0, 0x02a0, 0x0ae0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0,
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0,
/* sub-index 1b */
0x0b00, 0x0b20, 0x02a0, 0x0b40, 0x0b60, 0x02a0, 0x02a0, 0x02a0,
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0,
/* sub-index 1e */
0x0b80, 0x0ba0, 0x0bc0, 0x0be0, 0x0c00, 0x0c20, 0x0c40, 0x0c60,
0x0c80, 0x0ca0, 0x0cc0, 0x0ce0, 0x0d00, 0x0d20, 0x0d40, 0x0d60,
/* sub-index 1f */
0x0d80, 0x0da0, 0x0dc0, 0x0de0, 0x0e00, 0x0e20, 0x0e40, 0x0e60,
0x0e80, 0x0ea0, 0x0ec0, 0x0ee0, 0x0f00, 0x0f20, 0x0f40, 0x0f60,
/* sub-index 20 */
0x0f80, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0,
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0,
/* sub-index 21 */
0x02a0, 0x02a0, 0x0fa0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0,
0x02a0, 0x0fc0, 0x0fe0, 0x02a0, 0x1000, 0x02a0, 0x02a0, 0x02a0,
/* sub-index 22 */
0x1020, 0x02a0, 0x1040, 0x02a0, 0x1060, 0x02a0, 0x1080, 0x10a0,
0x10c0, 0x02a0, 0x10e0, 0x02a0, 0x02a0, 0x02a0, 0x1100, 0x02a0,
/* sub-index 23 */
0x02a0, 0x02a0, 0x1120, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0,
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0,
/* sub-index 2a */
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0,
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x1140, 0x02a0, 0x02a0,
/* sub-index 30 */
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x1160, 0x1180, 0x11a0, 0x11c0,
0x02a0, 0x11e0, 0x1200, 0x1220, 0x1240, 0x1260, 0x02a0, 0x1280,
/* sub-index f9 */
0x12a0, 0x12c0, 0x12e0, 0x1300, 0x1320, 0x1340, 0x1360, 0x1380,
0x13a0, 0x13c0, 0x13e0, 0x1400, 0x1420, 0x1440, 0x1460, 0x1480,
/* sub-index fa */
0x14a0, 0x14c0, 0x14e0, 0x1500, 0x1520, 0x1540, 0x1560, 0x1580,
0x15a0, 0x15c0, 0x15e0, 0x1600, 0x1620, 0x1640, 0x02a0, 0x02a0,
/* sub-index fb */
0x02a0, 0x1660, 0x1680, 0x16a0, 0x16c0, 0x02a0, 0x02a0, 0x02a0,
0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0,
/* null mapping */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x00c0 .. 0x00cf */
0x0041, 0x0300, 0x0041, 0x0301, 0x0041, 0x0302, 0x0041, 0x0303,
0x0041, 0x0308, 0x0041, 0x030a, 0x0000, 0x0000, 0x0043, 0x0327,
0x0045, 0x0300, 0x0045, 0x0301, 0x0045, 0x0302, 0x0045, 0x0308,
0x0049, 0x0300, 0x0049, 0x0301, 0x0049, 0x0302, 0x0049, 0x0308,
/* 0x00d0 .. 0x00df */
0x0000, 0x0000, 0x004e, 0x0303, 0x004f, 0x0300, 0x004f, 0x0301,
0x004f, 0x0302, 0x004f, 0x0303, 0x004f, 0x0308, 0x0000, 0x0000,
0x0000, 0x0000, 0x0055, 0x0300, 0x0055, 0x0301, 0x0055, 0x0302,
0x0055, 0x0308, 0x0059, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x00e0 .. 0x00ef */
0x0061, 0x0300, 0x0061, 0x0301, 0x0061, 0x0302, 0x0061, 0x0303,
0x0061, 0x0308, 0x0061, 0x030a, 0x0000, 0x0000, 0x0063, 0x0327,
0x0065, 0x0300, 0x0065, 0x0301, 0x0065, 0x0302, 0x0065, 0x0308,
0x0069, 0x0300, 0x0069, 0x0301, 0x0069, 0x0302, 0x0069, 0x0308,
/* 0x00f0 .. 0x00ff */
0x0000, 0x0000, 0x006e, 0x0303, 0x006f, 0x0300, 0x006f, 0x0301,
0x006f, 0x0302, 0x006f, 0x0303, 0x006f, 0x0308, 0x0000, 0x0000,
0x0000, 0x0000, 0x0075, 0x0300, 0x0075, 0x0301, 0x0075, 0x0302,
0x0075, 0x0308, 0x0079, 0x0301, 0x0000, 0x0000, 0x0079, 0x0308,
/* 0x0100 .. 0x010f */
0x0041, 0x0304, 0x0061, 0x0304, 0x0041, 0x0306, 0x0061, 0x0306,
0x0041, 0x0328, 0x0061, 0x0328, 0x0043, 0x0301, 0x0063, 0x0301,
0x0043, 0x0302, 0x0063, 0x0302, 0x0043, 0x0307, 0x0063, 0x0307,
0x0043, 0x030c, 0x0063, 0x030c, 0x0044, 0x030c, 0x0064, 0x030c,
/* 0x0110 .. 0x011f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0045, 0x0304, 0x0065, 0x0304,
0x0045, 0x0306, 0x0065, 0x0306, 0x0045, 0x0307, 0x0065, 0x0307,
0x0045, 0x0328, 0x0065, 0x0328, 0x0045, 0x030c, 0x0065, 0x030c,
0x0047, 0x0302, 0x0067, 0x0302, 0x0047, 0x0306, 0x0067, 0x0306,
/* 0x0120 .. 0x012f */
0x0047, 0x0307, 0x0067, 0x0307, 0x0047, 0x0327, 0x0067, 0x0327,
0x0048, 0x0302, 0x0068, 0x0302, 0x0000, 0x0000, 0x0000, 0x0000,
0x0049, 0x0303, 0x0069, 0x0303, 0x0049, 0x0304, 0x0069, 0x0304,
0x0049, 0x0306, 0x0069, 0x0306, 0x0049, 0x0328, 0x0069, 0x0328,
/* 0x0130 .. 0x013f */
0x0049, 0x0307, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x004a, 0x0302, 0x006a, 0x0302, 0x004b, 0x0327, 0x006b, 0x0327,
0x0000, 0x0000, 0x004c, 0x0301, 0x006c, 0x0301, 0x004c, 0x0327,
0x006c, 0x0327, 0x004c, 0x030c, 0x006c, 0x030c, 0x0000, 0x0000,
/* 0x0140 .. 0x014f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x004e, 0x0301,
0x006e, 0x0301, 0x004e, 0x0327, 0x006e, 0x0327, 0x004e, 0x030c,
0x006e, 0x030c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x004f, 0x0304, 0x006f, 0x0304, 0x004f, 0x0306, 0x006f, 0x0306,
/* 0x0150 .. 0x015f */
0x004f, 0x030b, 0x006f, 0x030b, 0x0000, 0x0000, 0x0000, 0x0000,
0x0052, 0x0301, 0x0072, 0x0301, 0x0052, 0x0327, 0x0072, 0x0327,
0x0052, 0x030c, 0x0072, 0x030c, 0x0053, 0x0301, 0x0073, 0x0301,
0x0053, 0x0302, 0x0073, 0x0302, 0x0053, 0x0327, 0x0073, 0x0327,
/* 0x0160 .. 0x016f */
0x0053, 0x030c, 0x0073, 0x030c, 0x0054, 0x0327, 0x0074, 0x0327,
0x0054, 0x030c, 0x0074, 0x030c, 0x0000, 0x0000, 0x0000, 0x0000,
0x0055, 0x0303, 0x0075, 0x0303, 0x0055, 0x0304, 0x0075, 0x0304,
0x0055, 0x0306, 0x0075, 0x0306, 0x0055, 0x030a, 0x0075, 0x030a,
/* 0x0170 .. 0x017f */
0x0055, 0x030b, 0x0075, 0x030b, 0x0055, 0x0328, 0x0075, 0x0328,
0x0057, 0x0302, 0x0077, 0x0302, 0x0059, 0x0302, 0x0079, 0x0302,
0x0059, 0x0308, 0x005a, 0x0301, 0x007a, 0x0301, 0x005a, 0x0307,
0x007a, 0x0307, 0x005a, 0x030c, 0x007a, 0x030c, 0x0000, 0x0000,
/* 0x01a0 .. 0x01af */
0x004f, 0x031b, 0x006f, 0x031b, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0055, 0x031b,
/* 0x01b0 .. 0x01bf */
0x0075, 0x031b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x01c0 .. 0x01cf */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0041, 0x030c, 0x0061, 0x030c, 0x0049, 0x030c,
/* 0x01d0 .. 0x01df */
0x0069, 0x030c, 0x004f, 0x030c, 0x006f, 0x030c, 0x0055, 0x030c,
0x0075, 0x030c, 0x00dc, 0x0304, 0x00fc, 0x0304, 0x00dc, 0x0301,
0x00fc, 0x0301, 0x00dc, 0x030c, 0x00fc, 0x030c, 0x00dc, 0x0300,
0x00fc, 0x0300, 0x0000, 0x0000, 0x00c4, 0x0304, 0x00e4, 0x0304,
/* 0x01e0 .. 0x01ef */
0x0226, 0x0304, 0x0227, 0x0304, 0x00c6, 0x0304, 0x00e6, 0x0304,
0x0000, 0x0000, 0x0000, 0x0000, 0x0047, 0x030c, 0x0067, 0x030c,
0x004b, 0x030c, 0x006b, 0x030c, 0x004f, 0x0328, 0x006f, 0x0328,
0x01ea, 0x0304, 0x01eb, 0x0304, 0x01b7, 0x030c, 0x0292, 0x030c,
/* 0x01f0 .. 0x01ff */
0x006a, 0x030c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0047, 0x0301, 0x0067, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000,
0x004e, 0x0300, 0x006e, 0x0300, 0x00c5, 0x0301, 0x00e5, 0x0301,
0x00c6, 0x0301, 0x00e6, 0x0301, 0x00d8, 0x0301, 0x00f8, 0x0301,
/* 0x0200 .. 0x020f */
0x0041, 0x030f, 0x0061, 0x030f, 0x0041, 0x0311, 0x0061, 0x0311,
0x0045, 0x030f, 0x0065, 0x030f, 0x0045, 0x0311, 0x0065, 0x0311,
0x0049, 0x030f, 0x0069, 0x030f, 0x0049, 0x0311, 0x0069, 0x0311,
0x004f, 0x030f, 0x006f, 0x030f, 0x004f, 0x0311, 0x006f, 0x0311,
/* 0x0210 .. 0x021f */
0x0052, 0x030f, 0x0072, 0x030f, 0x0052, 0x0311, 0x0072, 0x0311,
0x0055, 0x030f, 0x0075, 0x030f, 0x0055, 0x0311, 0x0075, 0x0311,
0x0053, 0x0326, 0x0073, 0x0326, 0x0054, 0x0326, 0x0074, 0x0326,
0x0000, 0x0000, 0x0000, 0x0000, 0x0048, 0x030c, 0x0068, 0x030c,
/* 0x0220 .. 0x022f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0041, 0x0307, 0x0061, 0x0307,
0x0045, 0x0327, 0x0065, 0x0327, 0x00d6, 0x0304, 0x00f6, 0x0304,
0x00d5, 0x0304, 0x00f5, 0x0304, 0x004f, 0x0307, 0x006f, 0x0307,
/* 0x0230 .. 0x023f */
0x022e, 0x0304, 0x022f, 0x0304, 0x0059, 0x0304, 0x0079, 0x0304,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0340 .. 0x034f */
0x0300, 0x0000, 0x0301, 0x0000, 0x0000, 0x0000, 0x0313, 0x0000,
0x0308, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0370 .. 0x037f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x02b9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x003b, 0x0000, 0x0000, 0x0000,
/* 0x0380 .. 0x038f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x00a8, 0x0301, 0x0391, 0x0301, 0x00b7, 0x0000,
0x0395, 0x0301, 0x0397, 0x0301, 0x0399, 0x0301, 0x0000, 0x0000,
0x039f, 0x0301, 0x0000, 0x0000, 0x03a5, 0x0301, 0x03a9, 0x0301,
/* 0x0390 .. 0x039f */
0x03ca, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x03a0 .. 0x03af */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0399, 0x0308, 0x03a5, 0x0308,
0x03b1, 0x0301, 0x03b5, 0x0301, 0x03b7, 0x0301, 0x03b9, 0x0301,
/* 0x03b0 .. 0x03bf */
0x03cb, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x03c0 .. 0x03cf */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x03b9, 0x0308, 0x03c5, 0x0308,
0x03bf, 0x0301, 0x03c5, 0x0301, 0x03c9, 0x0301, 0x0000, 0x0000,
/* 0x03d0 .. 0x03df */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03d2, 0x0301,
0x03d2, 0x0308, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0400 .. 0x040f */
0x0415, 0x0300, 0x0415, 0x0308, 0x0000, 0x0000, 0x0413, 0x0301,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0406, 0x0308,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x041a, 0x0301, 0x0418, 0x0300, 0x0423, 0x0306, 0x0000, 0x0000,
/* 0x0410 .. 0x041f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0418, 0x0306, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0430 .. 0x043f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0438, 0x0306, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0450 .. 0x045f */
0x0435, 0x0300, 0x0435, 0x0308, 0x0000, 0x0000, 0x0433, 0x0301,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0456, 0x0308,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x043a, 0x0301, 0x0438, 0x0300, 0x0443, 0x0306, 0x0000, 0x0000,
/* 0x0470 .. 0x047f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0474, 0x030f, 0x0475, 0x030f,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x04c0 .. 0x04cf */
0x0000, 0x0000, 0x0416, 0x0306, 0x0436, 0x0306, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x04d0 .. 0x04df */
0x0410, 0x0306, 0x0430, 0x0306, 0x0410, 0x0308, 0x0430, 0x0308,
0x0000, 0x0000, 0x0000, 0x0000, 0x0415, 0x0306, 0x0435, 0x0306,
0x0000, 0x0000, 0x0000, 0x0000, 0x04d8, 0x0308, 0x04d9, 0x0308,
0x0416, 0x0308, 0x0436, 0x0308, 0x0417, 0x0308, 0x0437, 0x0308,
/* 0x04e0 .. 0x04ef */
0x0000, 0x0000, 0x0000, 0x0000, 0x0418, 0x0304, 0x0438, 0x0304,
0x0418, 0x0308, 0x0438, 0x0308, 0x041e, 0x0308, 0x043e, 0x0308,
0x0000, 0x0000, 0x0000, 0x0000, 0x04e8, 0x0308, 0x04e9, 0x0308,
0x042d, 0x0308, 0x044d, 0x0308, 0x0423, 0x0304, 0x0443, 0x0304,
/* 0x04f0 .. 0x04ff */
0x0423, 0x0308, 0x0443, 0x0308, 0x0423, 0x030b, 0x0443, 0x030b,
0x0427, 0x0308, 0x0447, 0x0308, 0x0000, 0x0000, 0x0000, 0x0000,
0x042b, 0x0308, 0x044b, 0x0308, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0620 .. 0x062f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0627, 0x0653, 0x0627, 0x0654,
0x0648, 0x0654, 0x0627, 0x0655, 0x064a, 0x0654, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x06c0 .. 0x06cf */
0x06d5, 0x0654, 0x0000, 0x0000, 0x06c1, 0x0654, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x06d0 .. 0x06df */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x06d2, 0x0654,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0920 .. 0x092f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0928, 0x093c, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0930 .. 0x093f */
0x0000, 0x0000, 0x0930, 0x093c, 0x0000, 0x0000, 0x0000, 0x0000,
0x0933, 0x093c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0950 .. 0x095f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0915, 0x093c, 0x0916, 0x093c, 0x0917, 0x093c, 0x091c, 0x093c,
0x0921, 0x093c, 0x0922, 0x093c, 0x092b, 0x093c, 0x092f, 0x093c,
/* 0x09c0 .. 0x09cf */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x09c7, 0x09be,
0x09c7, 0x09d7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x09d0 .. 0x09df */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x09a1, 0x09bc, 0x09a2, 0x09bc, 0x0000, 0x0000, 0x09af, 0x09bc,
/* 0x0a30 .. 0x0a3f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a32, 0x0a3c,
0x0000, 0x0000, 0x0000, 0x0000, 0x0a38, 0x0a3c, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0a50 .. 0x0a5f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0a16, 0x0a3c, 0x0a17, 0x0a3c, 0x0a1c, 0x0a3c,
0x0000, 0x0000, 0x0000, 0x0000, 0x0a2b, 0x0a3c, 0x0000, 0x0000,
/* 0x0b40 .. 0x0b4f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0b47, 0x0b56, 0x0000, 0x0000, 0x0000, 0x0000, 0x0b47, 0x0b3e,
0x0b47, 0x0b57, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0b50 .. 0x0b5f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0b21, 0x0b3c, 0x0b22, 0x0b3c, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0b90 .. 0x0b9f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0b92, 0x0bd7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0bc0 .. 0x0bcf */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0bc6, 0x0bbe, 0x0bc7, 0x0bbe,
0x0bc6, 0x0bd7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0c40 .. 0x0c4f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0c46, 0x0c56, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0cc0 .. 0x0ccf */
0x0cbf, 0x0cd5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0cc6, 0x0cd5,
0x0cc6, 0x0cd6, 0x0000, 0x0000, 0x0cc6, 0x0cc2, 0x0cca, 0x0cd5,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0d40 .. 0x0d4f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0d46, 0x0d3e, 0x0d47, 0x0d3e,
0x0d46, 0x0d57, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0dd0 .. 0x0ddf */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0dd9, 0x0dca, 0x0000, 0x0000,
0x0dd9, 0x0dcf, 0x0ddc, 0x0dca, 0x0dd9, 0x0ddf, 0x0000, 0x0000,
/* 0x0f40 .. 0x0f4f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f42, 0x0fb7,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0f4c, 0x0fb7, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0f50 .. 0x0f5f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0f51, 0x0fb7, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f56, 0x0fb7,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0f5b, 0x0fb7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0f60 .. 0x0f6f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0f40, 0x0fb5, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0f70 .. 0x0f7f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f71, 0x0f72,
0x0000, 0x0000, 0x0f71, 0x0f74, 0x0fb2, 0x0f80, 0x0000, 0x0000,
0x0fb3, 0x0f80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0f80 .. 0x0f8f */
0x0000, 0x0000, 0x0f71, 0x0f80, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0f90 .. 0x0f9f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f92, 0x0fb7,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0f9c, 0x0fb7, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0fa0 .. 0x0faf */
0x0000, 0x0000, 0x0000, 0x0000, 0x0fa1, 0x0fb7, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0fa6, 0x0fb7,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0fab, 0x0fb7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x0fb0 .. 0x0fbf */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0f90, 0x0fb5, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x1020 .. 0x102f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x1025, 0x102e, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x1b00 .. 0x1b0f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x1b05, 0x1b35, 0x0000, 0x0000,
0x1b07, 0x1b35, 0x0000, 0x0000, 0x1b09, 0x1b35, 0x0000, 0x0000,
0x1b0b, 0x1b35, 0x0000, 0x0000, 0x1b0d, 0x1b35, 0x0000, 0x0000,
/* 0x1b10 .. 0x1b1f */
0x0000, 0x0000, 0x0000, 0x0000, 0x1b11, 0x1b35, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x1b30 .. 0x1b3f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1b3a, 0x1b35,
0x0000, 0x0000, 0x1b3c, 0x1b35, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x1b40 .. 0x1b4f */
0x1b3e, 0x1b35, 0x1b3f, 0x1b35, 0x0000, 0x0000, 0x1b42, 0x1b35,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x1e00 .. 0x1e0f */
0x0041, 0x0325, 0x0061, 0x0325, 0x0042, 0x0307, 0x0062, 0x0307,
0x0042, 0x0323, 0x0062, 0x0323, 0x0042, 0x0331, 0x0062, 0x0331,
0x00c7, 0x0301, 0x00e7, 0x0301, 0x0044, 0x0307, 0x0064, 0x0307,
0x0044, 0x0323, 0x0064, 0x0323, 0x0044, 0x0331, 0x0064, 0x0331,
/* 0x1e10 .. 0x1e1f */
0x0044, 0x0327, 0x0064, 0x0327, 0x0044, 0x032d, 0x0064, 0x032d,
0x0112, 0x0300, 0x0113, 0x0300, 0x0112, 0x0301, 0x0113, 0x0301,
0x0045, 0x032d, 0x0065, 0x032d, 0x0045, 0x0330, 0x0065, 0x0330,
0x0228, 0x0306, 0x0229, 0x0306, 0x0046, 0x0307, 0x0066, 0x0307,
/* 0x1e20 .. 0x1e2f */
0x0047, 0x0304, 0x0067, 0x0304, 0x0048, 0x0307, 0x0068, 0x0307,
0x0048, 0x0323, 0x0068, 0x0323, 0x0048, 0x0308, 0x0068, 0x0308,
0x0048, 0x0327, 0x0068, 0x0327, 0x0048, 0x032e, 0x0068, 0x032e,
0x0049, 0x0330, 0x0069, 0x0330, 0x00cf, 0x0301, 0x00ef, 0x0301,
/* 0x1e30 .. 0x1e3f */
0x004b, 0x0301, 0x006b, 0x0301, 0x004b, 0x0323, 0x006b, 0x0323,
0x004b, 0x0331, 0x006b, 0x0331, 0x004c, 0x0323, 0x006c, 0x0323,
0x1e36, 0x0304, 0x1e37, 0x0304, 0x004c, 0x0331, 0x006c, 0x0331,
0x004c, 0x032d, 0x006c, 0x032d, 0x004d, 0x0301, 0x006d, 0x0301,
/* 0x1e40 .. 0x1e4f */
0x004d, 0x0307, 0x006d, 0x0307, 0x004d, 0x0323, 0x006d, 0x0323,
0x004e, 0x0307, 0x006e, 0x0307, 0x004e, 0x0323, 0x006e, 0x0323,
0x004e, 0x0331, 0x006e, 0x0331, 0x004e, 0x032d, 0x006e, 0x032d,
0x00d5, 0x0301, 0x00f5, 0x0301, 0x00d5, 0x0308, 0x00f5, 0x0308,
/* 0x1e50 .. 0x1e5f */
0x014c, 0x0300, 0x014d, 0x0300, 0x014c, 0x0301, 0x014d, 0x0301,
0x0050, 0x0301, 0x0070, 0x0301, 0x0050, 0x0307, 0x0070, 0x0307,
0x0052, 0x0307, 0x0072, 0x0307, 0x0052, 0x0323, 0x0072, 0x0323,
0x1e5a, 0x0304, 0x1e5b, 0x0304, 0x0052, 0x0331, 0x0072, 0x0331,
/* 0x1e60 .. 0x1e6f */
0x0053, 0x0307, 0x0073, 0x0307, 0x0053, 0x0323, 0x0073, 0x0323,
0x015a, 0x0307, 0x015b, 0x0307, 0x0160, 0x0307, 0x0161, 0x0307,
0x1e62, 0x0307, 0x1e63, 0x0307, 0x0054, 0x0307, 0x0074, 0x0307,
0x0054, 0x0323, 0x0074, 0x0323, 0x0054, 0x0331, 0x0074, 0x0331,
/* 0x1e70 .. 0x1e7f */
0x0054, 0x032d, 0x0074, 0x032d, 0x0055, 0x0324, 0x0075, 0x0324,
0x0055, 0x0330, 0x0075, 0x0330, 0x0055, 0x032d, 0x0075, 0x032d,
0x0168, 0x0301, 0x0169, 0x0301, 0x016a, 0x0308, 0x016b, 0x0308,
0x0056, 0x0303, 0x0076, 0x0303, 0x0056, 0x0323, 0x0076, 0x0323,
/* 0x1e80 .. 0x1e8f */
0x0057, 0x0300, 0x0077, 0x0300, 0x0057, 0x0301, 0x0077, 0x0301,
0x0057, 0x0308, 0x0077, 0x0308, 0x0057, 0x0307, 0x0077, 0x0307,
0x0057, 0x0323, 0x0077, 0x0323, 0x0058, 0x0307, 0x0078, 0x0307,
0x0058, 0x0308, 0x0078, 0x0308, 0x0059, 0x0307, 0x0079, 0x0307,
/* 0x1e90 .. 0x1e9f */
0x005a, 0x0302, 0x007a, 0x0302, 0x005a, 0x0323, 0x007a, 0x0323,
0x005a, 0x0331, 0x007a, 0x0331, 0x0068, 0x0331, 0x0074, 0x0308,
0x0077, 0x030a, 0x0079, 0x030a, 0x0000, 0x0000, 0x017f, 0x0307,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x1ea0 .. 0x1eaf */
0x0041, 0x0323, 0x0061, 0x0323, 0x0041, 0x0309, 0x0061, 0x0309,
0x00c2, 0x0301, 0x00e2, 0x0301, 0x00c2, 0x0300, 0x00e2, 0x0300,
0x00c2, 0x0309, 0x00e2, 0x0309, 0x00c2, 0x0303, 0x00e2, 0x0303,
0x1ea0, 0x0302, 0x1ea1, 0x0302, 0x0102, 0x0301, 0x0103, 0x0301,
/* 0x1eb0 .. 0x1ebf */
0x0102, 0x0300, 0x0103, 0x0300, 0x0102, 0x0309, 0x0103, 0x0309,
0x0102, 0x0303, 0x0103, 0x0303, 0x1ea0, 0x0306, 0x1ea1, 0x0306,
0x0045, 0x0323, 0x0065, 0x0323, 0x0045, 0x0309, 0x0065, 0x0309,
0x0045, 0x0303, 0x0065, 0x0303, 0x00ca, 0x0301, 0x00ea, 0x0301,
/* 0x1ec0 .. 0x1ecf */
0x00ca, 0x0300, 0x00ea, 0x0300, 0x00ca, 0x0309, 0x00ea, 0x0309,
0x00ca, 0x0303, 0x00ea, 0x0303, 0x1eb8, 0x0302, 0x1eb9, 0x0302,
0x0049, 0x0309, 0x0069, 0x0309, 0x0049, 0x0323, 0x0069, 0x0323,
0x004f, 0x0323, 0x006f, 0x0323, 0x004f, 0x0309, 0x006f, 0x0309,
/* 0x1ed0 .. 0x1edf */
0x00d4, 0x0301, 0x00f4, 0x0301, 0x00d4, 0x0300, 0x00f4, 0x0300,
0x00d4, 0x0309, 0x00f4, 0x0309, 0x00d4, 0x0303, 0x00f4, 0x0303,
0x1ecc, 0x0302, 0x1ecd, 0x0302, 0x01a0, 0x0301, 0x01a1, 0x0301,
0x01a0, 0x0300, 0x01a1, 0x0300, 0x01a0, 0x0309, 0x01a1, 0x0309,
/* 0x1ee0 .. 0x1eef */
0x01a0, 0x0303, 0x01a1, 0x0303, 0x01a0, 0x0323, 0x01a1, 0x0323,
0x0055, 0x0323, 0x0075, 0x0323, 0x0055, 0x0309, 0x0075, 0x0309,
0x01af, 0x0301, 0x01b0, 0x0301, 0x01af, 0x0300, 0x01b0, 0x0300,
0x01af, 0x0309, 0x01b0, 0x0309, 0x01af, 0x0303, 0x01b0, 0x0303,
/* 0x1ef0 .. 0x1eff */
0x01af, 0x0323, 0x01b0, 0x0323, 0x0059, 0x0300, 0x0079, 0x0300,
0x0059, 0x0323, 0x0079, 0x0323, 0x0059, 0x0309, 0x0079, 0x0309,
0x0059, 0x0303, 0x0079, 0x0303, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x1f00 .. 0x1f0f */
0x03b1, 0x0313, 0x03b1, 0x0314, 0x1f00, 0x0300, 0x1f01, 0x0300,
0x1f00, 0x0301, 0x1f01, 0x0301, 0x1f00, 0x0342, 0x1f01, 0x0342,
0x0391, 0x0313, 0x0391, 0x0314, 0x1f08, 0x0300, 0x1f09, 0x0300,
0x1f08, 0x0301, 0x1f09, 0x0301, 0x1f08, 0x0342, 0x1f09, 0x0342,
/* 0x1f10 .. 0x1f1f */
0x03b5, 0x0313, 0x03b5, 0x0314, 0x1f10, 0x0300, 0x1f11, 0x0300,
0x1f10, 0x0301, 0x1f11, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000,
0x0395, 0x0313, 0x0395, 0x0314, 0x1f18, 0x0300, 0x1f19, 0x0300,
0x1f18, 0x0301, 0x1f19, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x1f20 .. 0x1f2f */
0x03b7, 0x0313, 0x03b7, 0x0314, 0x1f20, 0x0300, 0x1f21, 0x0300,
0x1f20, 0x0301, 0x1f21, 0x0301, 0x1f20, 0x0342, 0x1f21, 0x0342,
0x0397, 0x0313, 0x0397, 0x0314, 0x1f28, 0x0300, 0x1f29, 0x0300,
0x1f28, 0x0301, 0x1f29, 0x0301, 0x1f28, 0x0342, 0x1f29, 0x0342,
/* 0x1f30 .. 0x1f3f */
0x03b9, 0x0313, 0x03b9, 0x0314, 0x1f30, 0x0300, 0x1f31, 0x0300,
0x1f30, 0x0301, 0x1f31, 0x0301, 0x1f30, 0x0342, 0x1f31, 0x0342,
0x0399, 0x0313, 0x0399, 0x0314, 0x1f38, 0x0300, 0x1f39, 0x0300,
0x1f38, 0x0301, 0x1f39, 0x0301, 0x1f38, 0x0342, 0x1f39, 0x0342,
/* 0x1f40 .. 0x1f4f */
0x03bf, 0x0313, 0x03bf, 0x0314, 0x1f40, 0x0300, 0x1f41, 0x0300,
0x1f40, 0x0301, 0x1f41, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000,
0x039f, 0x0313, 0x039f, 0x0314, 0x1f48, 0x0300, 0x1f49, 0x0300,
0x1f48, 0x0301, 0x1f49, 0x0301, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x1f50 .. 0x1f5f */
0x03c5, 0x0313, 0x03c5, 0x0314, 0x1f50, 0x0300, 0x1f51, 0x0300,
0x1f50, 0x0301, 0x1f51, 0x0301, 0x1f50, 0x0342, 0x1f51, 0x0342,
0x0000, 0x0000, 0x03a5, 0x0314, 0x0000, 0x0000, 0x1f59, 0x0300,
0x0000, 0x0000, 0x1f59, 0x0301, 0x0000, 0x0000, 0x1f59, 0x0342,
/* 0x1f60 .. 0x1f6f */
0x03c9, 0x0313, 0x03c9, 0x0314, 0x1f60, 0x0300, 0x1f61, 0x0300,
0x1f60, 0x0301, 0x1f61, 0x0301, 0x1f60, 0x0342, 0x1f61, 0x0342,
0x03a9, 0x0313, 0x03a9, 0x0314, 0x1f68, 0x0300, 0x1f69, 0x0300,
0x1f68, 0x0301, 0x1f69, 0x0301, 0x1f68, 0x0342, 0x1f69, 0x0342,
/* 0x1f70 .. 0x1f7f */
0x03b1, 0x0300, 0x03ac, 0x0000, 0x03b5, 0x0300, 0x03ad, 0x0000,
0x03b7, 0x0300, 0x03ae, 0x0000, 0x03b9, 0x0300, 0x03af, 0x0000,
0x03bf, 0x0300, 0x03cc, 0x0000, 0x03c5, 0x0300, 0x03cd, 0x0000,
0x03c9, 0x0300, 0x03ce, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x1f80 .. 0x1f8f */
0x1f00, 0x0345, 0x1f01, 0x0345, 0x1f02, 0x0345, 0x1f03, 0x0345,
0x1f04, 0x0345, 0x1f05, 0x0345, 0x1f06, 0x0345, 0x1f07, 0x0345,
0x1f08, 0x0345, 0x1f09, 0x0345, 0x1f0a, 0x0345, 0x1f0b, 0x0345,
0x1f0c, 0x0345, 0x1f0d, 0x0345, 0x1f0e, 0x0345, 0x1f0f, 0x0345,
/* 0x1f90 .. 0x1f9f */
0x1f20, 0x0345, 0x1f21, 0x0345, 0x1f22, 0x0345, 0x1f23, 0x0345,
0x1f24, 0x0345, 0x1f25, 0x0345, 0x1f26, 0x0345, 0x1f27, 0x0345,
0x1f28, 0x0345, 0x1f29, 0x0345, 0x1f2a, 0x0345, 0x1f2b, 0x0345,
0x1f2c, 0x0345, 0x1f2d, 0x0345, 0x1f2e, 0x0345, 0x1f2f, 0x0345,
/* 0x1fa0 .. 0x1faf */
0x1f60, 0x0345, 0x1f61, 0x0345, 0x1f62, 0x0345, 0x1f63, 0x0345,
0x1f64, 0x0345, 0x1f65, 0x0345, 0x1f66, 0x0345, 0x1f67, 0x0345,
0x1f68, 0x0345, 0x1f69, 0x0345, 0x1f6a, 0x0345, 0x1f6b, 0x0345,
0x1f6c, 0x0345, 0x1f6d, 0x0345, 0x1f6e, 0x0345, 0x1f6f, 0x0345,
/* 0x1fb0 .. 0x1fbf */
0x03b1, 0x0306, 0x03b1, 0x0304, 0x1f70, 0x0345, 0x03b1, 0x0345,
0x03ac, 0x0345, 0x0000, 0x0000, 0x03b1, 0x0342, 0x1fb6, 0x0345,
0x0391, 0x0306, 0x0391, 0x0304, 0x0391, 0x0300, 0x0386, 0x0000,
0x0391, 0x0345, 0x0000, 0x0000, 0x03b9, 0x0000, 0x0000, 0x0000,
/* 0x1fc0 .. 0x1fcf */
0x0000, 0x0000, 0x00a8, 0x0342, 0x1f74, 0x0345, 0x03b7, 0x0345,
0x03ae, 0x0345, 0x0000, 0x0000, 0x03b7, 0x0342, 0x1fc6, 0x0345,
0x0395, 0x0300, 0x0388, 0x0000, 0x0397, 0x0300, 0x0389, 0x0000,
0x0397, 0x0345, 0x1fbf, 0x0300, 0x1fbf, 0x0301, 0x1fbf, 0x0342,
/* 0x1fd0 .. 0x1fdf */
0x03b9, 0x0306, 0x03b9, 0x0304, 0x03ca, 0x0300, 0x0390, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x03b9, 0x0342, 0x03ca, 0x0342,
0x0399, 0x0306, 0x0399, 0x0304, 0x0399, 0x0300, 0x038a, 0x0000,
0x0000, 0x0000, 0x1ffe, 0x0300, 0x1ffe, 0x0301, 0x1ffe, 0x0342,
/* 0x1fe0 .. 0x1fef */
0x03c5, 0x0306, 0x03c5, 0x0304, 0x03cb, 0x0300, 0x03b0, 0x0000,
0x03c1, 0x0313, 0x03c1, 0x0314, 0x03c5, 0x0342, 0x03cb, 0x0342,
0x03a5, 0x0306, 0x03a5, 0x0304, 0x03a5, 0x0300, 0x038e, 0x0000,
0x03a1, 0x0314, 0x00a8, 0x0300, 0x0385, 0x0000, 0x0060, 0x0000,
/* 0x1ff0 .. 0x1fff */
0x0000, 0x0000, 0x0000, 0x0000, 0x1f7c, 0x0345, 0x03c9, 0x0345,
0x03ce, 0x0345, 0x0000, 0x0000, 0x03c9, 0x0342, 0x1ff6, 0x0345,
0x039f, 0x0300, 0x038c, 0x0000, 0x03a9, 0x0300, 0x038f, 0x0000,
0x03a9, 0x0345, 0x00b4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x2000 .. 0x200f */
0x2002, 0x0000, 0x2003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x2120 .. 0x212f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x03a9, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x004b, 0x0000, 0x00c5, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x2190 .. 0x219f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x2190, 0x0338, 0x2192, 0x0338,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x21a0 .. 0x21af */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x2194, 0x0338, 0x0000, 0x0000,
/* 0x21c0 .. 0x21cf */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x21d0, 0x0338, 0x21d4, 0x0338, 0x21d2, 0x0338,
/* 0x2200 .. 0x220f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x2203, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x2208, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000,
0x220b, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x2220 .. 0x222f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x2223, 0x0338, 0x0000, 0x0000, 0x2225, 0x0338, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x2240 .. 0x224f */
0x0000, 0x0000, 0x223c, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000,
0x2243, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, 0x2245, 0x0338,
0x0000, 0x0000, 0x2248, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x2260 .. 0x226f */
0x003d, 0x0338, 0x0000, 0x0000, 0x2261, 0x0338, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x224d, 0x0338, 0x003c, 0x0338, 0x003e, 0x0338,
/* 0x2270 .. 0x227f */
0x2264, 0x0338, 0x2265, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000,
0x2272, 0x0338, 0x2273, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000,
0x2276, 0x0338, 0x2277, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x2280 .. 0x228f */
0x227a, 0x0338, 0x227b, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000,
0x2282, 0x0338, 0x2283, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000,
0x2286, 0x0338, 0x2287, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x22a0 .. 0x22af */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x22a2, 0x0338, 0x22a8, 0x0338, 0x22a9, 0x0338, 0x22ab, 0x0338,
/* 0x22e0 .. 0x22ef */
0x227c, 0x0338, 0x227d, 0x0338, 0x2291, 0x0338, 0x2292, 0x0338,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x22b2, 0x0338, 0x22b3, 0x0338,
0x22b4, 0x0338, 0x22b5, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x2320 .. 0x232f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x3008, 0x0000, 0x3009, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x2ad0 .. 0x2adf */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x2add, 0x0338, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x3040 .. 0x304f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x304b, 0x3099, 0x0000, 0x0000, 0x304d, 0x3099, 0x0000, 0x0000,
/* 0x3050 .. 0x305f */
0x304f, 0x3099, 0x0000, 0x0000, 0x3051, 0x3099, 0x0000, 0x0000,
0x3053, 0x3099, 0x0000, 0x0000, 0x3055, 0x3099, 0x0000, 0x0000,
0x3057, 0x3099, 0x0000, 0x0000, 0x3059, 0x3099, 0x0000, 0x0000,
0x305b, 0x3099, 0x0000, 0x0000, 0x305d, 0x3099, 0x0000, 0x0000,
/* 0x3060 .. 0x306f */
0x305f, 0x3099, 0x0000, 0x0000, 0x3061, 0x3099, 0x0000, 0x0000,
0x0000, 0x0000, 0x3064, 0x3099, 0x0000, 0x0000, 0x3066, 0x3099,
0x0000, 0x0000, 0x3068, 0x3099, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x3070 .. 0x307f */
0x306f, 0x3099, 0x306f, 0x309a, 0x0000, 0x0000, 0x3072, 0x3099,
0x3072, 0x309a, 0x0000, 0x0000, 0x3075, 0x3099, 0x3075, 0x309a,
0x0000, 0x0000, 0x3078, 0x3099, 0x3078, 0x309a, 0x0000, 0x0000,
0x307b, 0x3099, 0x307b, 0x309a, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x3090 .. 0x309f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x3046, 0x3099, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x309d, 0x3099, 0x0000, 0x0000,
/* 0x30a0 .. 0x30af */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x30ab, 0x3099, 0x0000, 0x0000, 0x30ad, 0x3099, 0x0000, 0x0000,
/* 0x30b0 .. 0x30bf */
0x30af, 0x3099, 0x0000, 0x0000, 0x30b1, 0x3099, 0x0000, 0x0000,
0x30b3, 0x3099, 0x0000, 0x0000, 0x30b5, 0x3099, 0x0000, 0x0000,
0x30b7, 0x3099, 0x0000, 0x0000, 0x30b9, 0x3099, 0x0000, 0x0000,
0x30bb, 0x3099, 0x0000, 0x0000, 0x30bd, 0x3099, 0x0000, 0x0000,
/* 0x30c0 .. 0x30cf */
0x30bf, 0x3099, 0x0000, 0x0000, 0x30c1, 0x3099, 0x0000, 0x0000,
0x0000, 0x0000, 0x30c4, 0x3099, 0x0000, 0x0000, 0x30c6, 0x3099,
0x0000, 0x0000, 0x30c8, 0x3099, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x30d0 .. 0x30df */
0x30cf, 0x3099, 0x30cf, 0x309a, 0x0000, 0x0000, 0x30d2, 0x3099,
0x30d2, 0x309a, 0x0000, 0x0000, 0x30d5, 0x3099, 0x30d5, 0x309a,
0x0000, 0x0000, 0x30d8, 0x3099, 0x30d8, 0x309a, 0x0000, 0x0000,
0x30db, 0x3099, 0x30db, 0x309a, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0x30f0 .. 0x30ff */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x30a6, 0x3099, 0x0000, 0x0000, 0x0000, 0x0000, 0x30ef, 0x3099,
0x30f0, 0x3099, 0x30f1, 0x3099, 0x30f2, 0x3099, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x30fd, 0x3099, 0x0000, 0x0000,
/* 0xf900 .. 0xf90f */
0x8c48, 0x0000, 0x66f4, 0x0000, 0x8eca, 0x0000, 0x8cc8, 0x0000,
0x6ed1, 0x0000, 0x4e32, 0x0000, 0x53e5, 0x0000, 0x9f9c, 0x0000,
0x9f9c, 0x0000, 0x5951, 0x0000, 0x91d1, 0x0000, 0x5587, 0x0000,
0x5948, 0x0000, 0x61f6, 0x0000, 0x7669, 0x0000, 0x7f85, 0x0000,
/* 0xf910 .. 0xf91f */
0x863f, 0x0000, 0x87ba, 0x0000, 0x88f8, 0x0000, 0x908f, 0x0000,
0x6a02, 0x0000, 0x6d1b, 0x0000, 0x70d9, 0x0000, 0x73de, 0x0000,
0x843d, 0x0000, 0x916a, 0x0000, 0x99f1, 0x0000, 0x4e82, 0x0000,
0x5375, 0x0000, 0x6b04, 0x0000, 0x721b, 0x0000, 0x862d, 0x0000,
/* 0xf920 .. 0xf92f */
0x9e1e, 0x0000, 0x5d50, 0x0000, 0x6feb, 0x0000, 0x85cd, 0x0000,
0x8964, 0x0000, 0x62c9, 0x0000, 0x81d8, 0x0000, 0x881f, 0x0000,
0x5eca, 0x0000, 0x6717, 0x0000, 0x6d6a, 0x0000, 0x72fc, 0x0000,
0x90ce, 0x0000, 0x4f86, 0x0000, 0x51b7, 0x0000, 0x52de, 0x0000,
/* 0xf930 .. 0xf93f */
0x64c4, 0x0000, 0x6ad3, 0x0000, 0x7210, 0x0000, 0x76e7, 0x0000,
0x8001, 0x0000, 0x8606, 0x0000, 0x865c, 0x0000, 0x8def, 0x0000,
0x9732, 0x0000, 0x9b6f, 0x0000, 0x9dfa, 0x0000, 0x788c, 0x0000,
0x797f, 0x0000, 0x7da0, 0x0000, 0x83c9, 0x0000, 0x9304, 0x0000,
/* 0xf940 .. 0xf94f */
0x9e7f, 0x0000, 0x8ad6, 0x0000, 0x58df, 0x0000, 0x5f04, 0x0000,
0x7c60, 0x0000, 0x807e, 0x0000, 0x7262, 0x0000, 0x78ca, 0x0000,
0x8cc2, 0x0000, 0x96f7, 0x0000, 0x58d8, 0x0000, 0x5c62, 0x0000,
0x6a13, 0x0000, 0x6dda, 0x0000, 0x6f0f, 0x0000, 0x7d2f, 0x0000,
/* 0xf950 .. 0xf95f */
0x7e37, 0x0000, 0x964b, 0x0000, 0x52d2, 0x0000, 0x808b, 0x0000,
0x51dc, 0x0000, 0x51cc, 0x0000, 0x7a1c, 0x0000, 0x7dbe, 0x0000,
0x83f1, 0x0000, 0x9675, 0x0000, 0x8b80, 0x0000, 0x62cf, 0x0000,
0x6a02, 0x0000, 0x8afe, 0x0000, 0x4e39, 0x0000, 0x5be7, 0x0000,
/* 0xf960 .. 0xf96f */
0x6012, 0x0000, 0x7387, 0x0000, 0x7570, 0x0000, 0x5317, 0x0000,
0x78fb, 0x0000, 0x4fbf, 0x0000, 0x5fa9, 0x0000, 0x4e0d, 0x0000,
0x6ccc, 0x0000, 0x6578, 0x0000, 0x7d22, 0x0000, 0x53c3, 0x0000,
0x585e, 0x0000, 0x7701, 0x0000, 0x8449, 0x0000, 0x8aaa, 0x0000,
/* 0xf970 .. 0xf97f */
0x6bba, 0x0000, 0x8fb0, 0x0000, 0x6c88, 0x0000, 0x62fe, 0x0000,
0x82e5, 0x0000, 0x63a0, 0x0000, 0x7565, 0x0000, 0x4eae, 0x0000,
0x5169, 0x0000, 0x51c9, 0x0000, 0x6881, 0x0000, 0x7ce7, 0x0000,
0x826f, 0x0000, 0x8ad2, 0x0000, 0x91cf, 0x0000, 0x52f5, 0x0000,
/* 0xf980 .. 0xf98f */
0x5442, 0x0000, 0x5973, 0x0000, 0x5eec, 0x0000, 0x65c5, 0x0000,
0x6ffe, 0x0000, 0x792a, 0x0000, 0x95ad, 0x0000, 0x9a6a, 0x0000,
0x9e97, 0x0000, 0x9ece, 0x0000, 0x529b, 0x0000, 0x66c6, 0x0000,
0x6b77, 0x0000, 0x8f62, 0x0000, 0x5e74, 0x0000, 0x6190, 0x0000,
/* 0xf990 .. 0xf99f */
0x6200, 0x0000, 0x649a, 0x0000, 0x6f23, 0x0000, 0x7149, 0x0000,
0x7489, 0x0000, 0x79ca, 0x0000, 0x7df4, 0x0000, 0x806f, 0x0000,
0x8f26, 0x0000, 0x84ee, 0x0000, 0x9023, 0x0000, 0x934a, 0x0000,
0x5217, 0x0000, 0x52a3, 0x0000, 0x54bd, 0x0000, 0x70c8, 0x0000,
/* 0xf9a0 .. 0xf9af */
0x88c2, 0x0000, 0x8aaa, 0x0000, 0x5ec9, 0x0000, 0x5ff5, 0x0000,
0x637b, 0x0000, 0x6bae, 0x0000, 0x7c3e, 0x0000, 0x7375, 0x0000,
0x4ee4, 0x0000, 0x56f9, 0x0000, 0x5be7, 0x0000, 0x5dba, 0x0000,
0x601c, 0x0000, 0x73b2, 0x0000, 0x7469, 0x0000, 0x7f9a, 0x0000,
/* 0xf9b0 .. 0xf9bf */
0x8046, 0x0000, 0x9234, 0x0000, 0x96f6, 0x0000, 0x9748, 0x0000,
0x9818, 0x0000, 0x4f8b, 0x0000, 0x79ae, 0x0000, 0x91b4, 0x0000,
0x96b8, 0x0000, 0x60e1, 0x0000, 0x4e86, 0x0000, 0x50da, 0x0000,
0x5bee, 0x0000, 0x5c3f, 0x0000, 0x6599, 0x0000, 0x6a02, 0x0000,
/* 0xf9c0 .. 0xf9cf */
0x71ce, 0x0000, 0x7642, 0x0000, 0x84fc, 0x0000, 0x907c, 0x0000,
0x9f8d, 0x0000, 0x6688, 0x0000, 0x962e, 0x0000, 0x5289, 0x0000,
0x677b, 0x0000, 0x67f3, 0x0000, 0x6d41, 0x0000, 0x6e9c, 0x0000,
0x7409, 0x0000, 0x7559, 0x0000, 0x786b, 0x0000, 0x7d10, 0x0000,
/* 0xf9d0 .. 0xf9df */
0x985e, 0x0000, 0x516d, 0x0000, 0x622e, 0x0000, 0x9678, 0x0000,
0x502b, 0x0000, 0x5d19, 0x0000, 0x6dea, 0x0000, 0x8f2a, 0x0000,
0x5f8b, 0x0000, 0x6144, 0x0000, 0x6817, 0x0000, 0x7387, 0x0000,
0x9686, 0x0000, 0x5229, 0x0000, 0x540f, 0x0000, 0x5c65, 0x0000,
/* 0xf9e0 .. 0xf9ef */
0x6613, 0x0000, 0x674e, 0x0000, 0x68a8, 0x0000, 0x6ce5, 0x0000,
0x7406, 0x0000, 0x75e2, 0x0000, 0x7f79, 0x0000, 0x88cf, 0x0000,
0x88e1, 0x0000, 0x91cc, 0x0000, 0x96e2, 0x0000, 0x533f, 0x0000,
0x6eba, 0x0000, 0x541d, 0x0000, 0x71d0, 0x0000, 0x7498, 0x0000,
/* 0xf9f0 .. 0xf9ff */
0x85fa, 0x0000, 0x96a3, 0x0000, 0x9c57, 0x0000, 0x9e9f, 0x0000,
0x6797, 0x0000, 0x6dcb, 0x0000, 0x81e8, 0x0000, 0x7acb, 0x0000,
0x7b20, 0x0000, 0x7c92, 0x0000, 0x72c0, 0x0000, 0x7099, 0x0000,
0x8b58, 0x0000, 0x4ec0, 0x0000, 0x8336, 0x0000, 0x523a, 0x0000,
/* 0xfa00 .. 0xfa0f */
0x5207, 0x0000, 0x5ea6, 0x0000, 0x62d3, 0x0000, 0x7cd6, 0x0000,
0x5b85, 0x0000, 0x6d1e, 0x0000, 0x66b4, 0x0000, 0x8f3b, 0x0000,
0x884c, 0x0000, 0x964d, 0x0000, 0x898b, 0x0000, 0x5ed3, 0x0000,
0x5140, 0x0000, 0x55c0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0xfa10 .. 0xfa1f */
0x585a, 0x0000, 0x0000, 0x0000, 0x6674, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x51de, 0x0000, 0x732a, 0x0000, 0x76ca, 0x0000,
0x793c, 0x0000, 0x795e, 0x0000, 0x7965, 0x0000, 0x798f, 0x0000,
0x9756, 0x0000, 0x7cbe, 0x0000, 0x7fbd, 0x0000, 0x0000, 0x0000,
/* 0xfa20 .. 0xfa2f */
0x8612, 0x0000, 0x0000, 0x0000, 0x8af8, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x9038, 0x0000, 0x90fd, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x98ef, 0x0000, 0x98fc, 0x0000,
0x9928, 0x0000, 0x9db4, 0x0000, 0x90de, 0x0000, 0x96b7, 0x0000,
/* 0xfa30 .. 0xfa3f */
0x4fae, 0x0000, 0x50e7, 0x0000, 0x514d, 0x0000, 0x52c9, 0x0000,
0x52e4, 0x0000, 0x5351, 0x0000, 0x559d, 0x0000, 0x5606, 0x0000,
0x5668, 0x0000, 0x5840, 0x0000, 0x58a8, 0x0000, 0x5c64, 0x0000,
0x5c6e, 0x0000, 0x6094, 0x0000, 0x6168, 0x0000, 0x618e, 0x0000,
/* 0xfa40 .. 0xfa4f */
0x61f2, 0x0000, 0x654f, 0x0000, 0x65e2, 0x0000, 0x6691, 0x0000,
0x6885, 0x0000, 0x6d77, 0x0000, 0x6e1a, 0x0000, 0x6f22, 0x0000,
0x716e, 0x0000, 0x722b, 0x0000, 0x7422, 0x0000, 0x7891, 0x0000,
0x793e, 0x0000, 0x7949, 0x0000, 0x7948, 0x0000, 0x7950, 0x0000,
/* 0xfa50 .. 0xfa5f */
0x7956, 0x0000, 0x795d, 0x0000, 0x798d, 0x0000, 0x798e, 0x0000,
0x7a40, 0x0000, 0x7a81, 0x0000, 0x7bc0, 0x0000, 0x7df4, 0x0000,
0x7e09, 0x0000, 0x7e41, 0x0000, 0x7f72, 0x0000, 0x8005, 0x0000,
0x81ed, 0x0000, 0x8279, 0x0000, 0x8279, 0x0000, 0x8457, 0x0000,
/* 0xfa60 .. 0xfa6f */
0x8910, 0x0000, 0x8996, 0x0000, 0x8b01, 0x0000, 0x8b39, 0x0000,
0x8cd3, 0x0000, 0x8d08, 0x0000, 0x8fb6, 0x0000, 0x9038, 0x0000,
0x96e3, 0x0000, 0x97ff, 0x0000, 0x983b, 0x0000, 0x6075, 0x0000,
0x0000, 0x0000, 0x8218, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0xfa70 .. 0xfa7f */
0x4e26, 0x0000, 0x51b5, 0x0000, 0x5168, 0x0000, 0x4f80, 0x0000,
0x5145, 0x0000, 0x5180, 0x0000, 0x52c7, 0x0000, 0x52fa, 0x0000,
0x559d, 0x0000, 0x5555, 0x0000, 0x5599, 0x0000, 0x55e2, 0x0000,
0x585a, 0x0000, 0x58b3, 0x0000, 0x5944, 0x0000, 0x5954, 0x0000,
/* 0xfa80 .. 0xfa8f */
0x5a62, 0x0000, 0x5b28, 0x0000, 0x5ed2, 0x0000, 0x5ed9, 0x0000,
0x5f69, 0x0000, 0x5fad, 0x0000, 0x60d8, 0x0000, 0x614e, 0x0000,
0x6108, 0x0000, 0x618e, 0x0000, 0x6160, 0x0000, 0x61f2, 0x0000,
0x6234, 0x0000, 0x63c4, 0x0000, 0x641c, 0x0000, 0x6452, 0x0000,
/* 0xfa90 .. 0xfa9f */
0x6556, 0x0000, 0x6674, 0x0000, 0x6717, 0x0000, 0x671b, 0x0000,
0x6756, 0x0000, 0x6b79, 0x0000, 0x6bba, 0x0000, 0x6d41, 0x0000,
0x6edb, 0x0000, 0x6ecb, 0x0000, 0x6f22, 0x0000, 0x701e, 0x0000,
0x716e, 0x0000, 0x77a7, 0x0000, 0x7235, 0x0000, 0x72af, 0x0000,
/* 0xfaa0 .. 0xfaaf */
0x732a, 0x0000, 0x7471, 0x0000, 0x7506, 0x0000, 0x753b, 0x0000,
0x761d, 0x0000, 0x761f, 0x0000, 0x76ca, 0x0000, 0x76db, 0x0000,
0x76f4, 0x0000, 0x774a, 0x0000, 0x7740, 0x0000, 0x78cc, 0x0000,
0x7ab1, 0x0000, 0x7bc0, 0x0000, 0x7c7b, 0x0000, 0x7d5b, 0x0000,
/* 0xfab0 .. 0xfabf */
0x7df4, 0x0000, 0x7f3e, 0x0000, 0x8005, 0x0000, 0x8352, 0x0000,
0x83ef, 0x0000, 0x8779, 0x0000, 0x8941, 0x0000, 0x8986, 0x0000,
0x8996, 0x0000, 0x8abf, 0x0000, 0x8af8, 0x0000, 0x8acb, 0x0000,
0x8b01, 0x0000, 0x8afe, 0x0000, 0x8aed, 0x0000, 0x8b39, 0x0000,
/* 0xfac0 .. 0xfacf */
0x8b8a, 0x0000, 0x8d08, 0x0000, 0x8f38, 0x0000, 0x9072, 0x0000,
0x9199, 0x0000, 0x9276, 0x0000, 0x967c, 0x0000, 0x96e3, 0x0000,
0x9756, 0x0000, 0x97db, 0x0000, 0x97ff, 0x0000, 0x980b, 0x0000,
0x983b, 0x0000, 0x9b12, 0x0000, 0x9f9c, 0x0000, 0x0000, 0x0000,
/* 0xfad0 .. 0xfadf */
0x0000, 0x0000, 0x0000, 0x0000, 0x3b9d, 0x0000, 0x4018, 0x0000,
0x4039, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x9f43, 0x0000, 0x9f8e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* 0xfb10 .. 0xfb1f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x05d9, 0x05b4, 0x0000, 0x0000, 0x05f2, 0x05b7,
/* 0xfb20 .. 0xfb2f */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x05e9, 0x05c1, 0x05e9, 0x05c2,
0xfb49, 0x05c1, 0xfb49, 0x05c2, 0x05d0, 0x05b7, 0x05d0, 0x05b8,
/* 0xfb30 .. 0xfb3f */
0x05d0, 0x05bc, 0x05d1, 0x05bc, 0x05d2, 0x05bc, 0x05d3, 0x05bc,
0x05d4, 0x05bc, 0x05d5, 0x05bc, 0x05d6, 0x05bc, 0x0000, 0x0000,
0x05d8, 0x05bc, 0x05d9, 0x05bc, 0x05da, 0x05bc, 0x05db, 0x05bc,
0x05dc, 0x05bc, 0x0000, 0x0000, 0x05de, 0x05bc, 0x0000, 0x0000,
/* 0xfb40 .. 0xfb4f */
0x05e0, 0x05bc, 0x05e1, 0x05bc, 0x0000, 0x0000, 0x05e3, 0x05bc,
0x05e4, 0x05bc, 0x0000, 0x0000, 0x05e6, 0x05bc, 0x05e7, 0x05bc,
0x05e8, 0x05bc, 0x05e9, 0x05bc, 0x05ea, 0x05bc, 0x05d5, 0x05b9,
0x05d1, 0x05bf, 0x05db, 0x05bf, 0x05e4, 0x05bf, 0x0000, 0x0000
};
unsigned int DECLSPEC_HIDDEN wine_decompose( int flags, WCHAR ch, WCHAR *dst, unsigned int dstlen )
{
const WCHAR *ptr = table + table[table[ch >> 8] + ((ch >> 4) & 0x0f)] + 2 * (ch & 0xf);
unsigned int res, len, dst_pos = 0;
*dst = ch;
if (!*ptr) return 1;
len = ptr[1] ? 2 : 1;
if (dstlen < len) return 0;
/* apply the decomposition recursively */
while (len--)
{
if (!(res = wine_decompose( flags, *ptr++, dst + dst_pos, dstlen - dst_pos - len ))) return 0;
dst_pos += res;
}
return dst_pos;
}

View File

@ -957,7 +957,7 @@
# @ stub MoveFileWithProgressTransactedW
@ stdcall MoveFileWithProgressW(wstr wstr ptr ptr long) kernel32.MoveFileWithProgressW
@ stdcall MulDiv(long long long) kernel32.MulDiv
@ stdcall MultiByteToWideChar(long long str long ptr long) kernel32.MultiByteToWideChar
@ stdcall MultiByteToWideChar(long long str long ptr long)
# @ stub NamedPipeEventEnum
# @ stub NamedPipeEventSelect
@ stdcall NeedCurrentDirectoryForExePathA(str)

View File

@ -41,6 +41,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(nls);
#define CALINFO_MAX_YEAR 2029
extern UINT CDECL __wine_get_unix_codepage(void);
extern unsigned int wine_decompose( int flags, WCHAR ch, WCHAR *dst, unsigned int dstlen ) DECLSPEC_HIDDEN;
static HANDLE kernel32_handle;
static const struct registry_value
@ -436,6 +439,409 @@ static int fold_digits( const WCHAR *src, int srclen, WCHAR *dst, int dstlen )
}
static int mbstowcs_cpsymbol( DWORD flags, const char *src, int srclen, WCHAR *dst, int dstlen )
{
int len, i;
if (flags)
{
SetLastError( ERROR_INVALID_FLAGS );
return 0;
}
if (!dstlen) return srclen;
len = min( srclen, dstlen );
for (i = 0; i < len; i++)
{
unsigned char c = src[i];
dst[i] = (c < 0x20) ? c : c + 0xf000;
}
if (len < srclen)
{
SetLastError( ERROR_INSUFFICIENT_BUFFER );
return 0;
}
return len;
}
static int mbstowcs_utf7( DWORD flags, const char *src, int srclen, WCHAR *dst, int dstlen )
{
static const signed char base64_decoding_table[] =
{
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0x00-0x0F */
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0x10-0x1F */
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, /* 0x20-0x2F */
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, /* 0x30-0x3F */
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, /* 0x40-0x4F */
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, /* 0x50-0x5F */
-1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, /* 0x60-0x6F */
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1 /* 0x70-0x7F */
};
const char *source_end = src + srclen;
int offset = 0, pos = 0;
DWORD byte_pair = 0;
if (flags)
{
SetLastError( ERROR_INVALID_FLAGS );
return 0;
}
#define OUTPUT(ch) \
do { \
if (dstlen > 0) \
{ \
if (pos >= dstlen) goto overflow; \
dst[pos] = (ch); \
} \
pos++; \
} while(0)
while (src < source_end)
{
if (*src == '+')
{
src++;
if (src >= source_end) break;
if (*src == '-')
{
/* just a plus sign escaped as +- */
OUTPUT( '+' );
src++;
continue;
}
do
{
signed char sextet = *src;
if (sextet == '-')
{
/* skip over the dash and end base64 decoding
* the current, unfinished byte pair is discarded */
src++;
offset = 0;
break;
}
if (sextet < 0)
{
/* the next character of src is < 0 and therefore not part of a base64 sequence
* the current, unfinished byte pair is NOT discarded in this case
* this is probably a bug in Windows */
break;
}
sextet = base64_decoding_table[sextet];
if (sextet == -1)
{
/* -1 means that the next character of src is not part of a base64 sequence
* in other words, all sextets in this base64 sequence have been processed
* the current, unfinished byte pair is discarded */
offset = 0;
break;
}
byte_pair = (byte_pair << 6) | sextet;
offset += 6;
if (offset >= 16)
{
/* this byte pair is done */
OUTPUT( byte_pair >> (offset - 16) );
offset -= 16;
}
src++;
}
while (src < source_end);
}
else
{
OUTPUT( (unsigned char)*src );
src++;
}
}
return pos;
overflow:
SetLastError( ERROR_INSUFFICIENT_BUFFER );
return 0;
#undef OUTPUT
}
static int mbstowcs_utf8( DWORD flags, const char *src, int srclen, WCHAR *dst, int dstlen )
{
DWORD reslen;
NTSTATUS status;
if (flags & ~(MB_PRECOMPOSED | MB_COMPOSITE | MB_USEGLYPHCHARS | MB_ERR_INVALID_CHARS))
{
SetLastError( ERROR_INVALID_FLAGS );
return 0;
}
if (!dstlen) dst = NULL;
status = RtlUTF8ToUnicodeN( dst, dstlen * sizeof(WCHAR), &reslen, src, srclen );
if (status == STATUS_SOME_NOT_MAPPED)
{
if (flags & MB_ERR_INVALID_CHARS)
{
SetLastError( ERROR_NO_UNICODE_TRANSLATION );
return 0;
}
}
else if (!set_ntstatus( status )) reslen = 0;
return reslen / sizeof(WCHAR);
}
static inline int is_private_use_area_char( WCHAR code )
{
return (code >= 0xe000 && code <= 0xf8ff);
}
static int check_invalid_chars( const CPTABLEINFO *info, const unsigned char *src, int srclen )
{
if (info->DBCSOffsets)
{
for ( ; srclen; src++, srclen-- )
{
USHORT off = info->DBCSOffsets[*src];
if (off)
{
if (srclen == 1) break; /* partial char, error */
if (info->DBCSOffsets[off + src[1]] == info->UniDefaultChar &&
((src[0] << 8) | src[1]) != info->TransDefaultChar) break;
src++;
srclen--;
continue;
}
if (info->MultiByteTable[*src] == info->UniDefaultChar && *src != info->TransDefaultChar)
break;
if (is_private_use_area_char( info->MultiByteTable[*src] )) break;
}
}
else
{
for ( ; srclen; src++, srclen-- )
{
if (info->MultiByteTable[*src] == info->UniDefaultChar && *src != info->TransDefaultChar)
break;
if (is_private_use_area_char( info->MultiByteTable[*src] )) break;
}
}
return !!srclen;
}
static int mbstowcs_decompose( const CPTABLEINFO *info, const unsigned char *src, int srclen,
WCHAR *dst, int dstlen )
{
WCHAR ch, dummy[4]; /* no decomposition is larger than 4 chars */
USHORT off;
int len, res;
if (info->DBCSOffsets)
{
if (!dstlen) /* compute length */
{
for (len = 0; srclen; srclen--, src++)
{
if ((off = info->DBCSOffsets[*src]))
{
if (srclen > 1 && src[1])
{
src++;
srclen--;
ch = info->DBCSOffsets[off + *src];
}
else ch = info->UniDefaultChar;
}
else ch = info->MultiByteTable[*src];
len += wine_decompose( 0, ch, dummy, 4 );
}
return len;
}
for (len = dstlen; srclen && len; srclen--, src++)
{
if ((off = info->DBCSOffsets[*src]))
{
if (srclen > 1 && src[1])
{
src++;
srclen--;
ch = info->DBCSOffsets[off + *src];
}
else ch = info->UniDefaultChar;
}
else ch = info->MultiByteTable[*src];
if (!(res = wine_decompose( 0, ch, dst, len ))) break;
dst += res;
len -= res;
}
}
else
{
if (!dstlen) /* compute length */
{
for (len = 0; srclen; srclen--, src++)
len += wine_decompose( 0, info->MultiByteTable[*src], dummy, 4 );
return len;
}
for (len = dstlen; srclen && len; srclen--, src++)
{
if (!(res = wine_decompose( 0, info->MultiByteTable[*src], dst, len ))) break;
len -= res;
dst += res;
}
}
if (srclen)
{
SetLastError( ERROR_INSUFFICIENT_BUFFER );
return 0;
}
return dstlen - len;
}
static int mbstowcs_sbcs( const CPTABLEINFO *info, const unsigned char *src, int srclen,
WCHAR *dst, int dstlen )
{
const USHORT *table = info->MultiByteTable;
int ret = srclen;
if (!dstlen) return srclen;
if (dstlen < srclen) /* buffer too small: fill it up to dstlen and return error */
{
srclen = dstlen;
SetLastError( ERROR_INSUFFICIENT_BUFFER );
ret = 0;
}
while (srclen >= 16)
{
dst[0] = table[src[0]];
dst[1] = table[src[1]];
dst[2] = table[src[2]];
dst[3] = table[src[3]];
dst[4] = table[src[4]];
dst[5] = table[src[5]];
dst[6] = table[src[6]];
dst[7] = table[src[7]];
dst[8] = table[src[8]];
dst[9] = table[src[9]];
dst[10] = table[src[10]];
dst[11] = table[src[11]];
dst[12] = table[src[12]];
dst[13] = table[src[13]];
dst[14] = table[src[14]];
dst[15] = table[src[15]];
src += 16;
dst += 16;
srclen -= 16;
}
/* now handle the remaining characters */
src += srclen;
dst += srclen;
switch (srclen)
{
case 15: dst[-15] = table[src[-15]];
case 14: dst[-14] = table[src[-14]];
case 13: dst[-13] = table[src[-13]];
case 12: dst[-12] = table[src[-12]];
case 11: dst[-11] = table[src[-11]];
case 10: dst[-10] = table[src[-10]];
case 9: dst[-9] = table[src[-9]];
case 8: dst[-8] = table[src[-8]];
case 7: dst[-7] = table[src[-7]];
case 6: dst[-6] = table[src[-6]];
case 5: dst[-5] = table[src[-5]];
case 4: dst[-4] = table[src[-4]];
case 3: dst[-3] = table[src[-3]];
case 2: dst[-2] = table[src[-2]];
case 1: dst[-1] = table[src[-1]];
case 0: break;
}
return ret;
}
static int mbstowcs_dbcs( const CPTABLEINFO *info, const unsigned char *src, int srclen,
WCHAR *dst, int dstlen )
{
USHORT off;
int i;
if (!dstlen)
{
for (i = 0; srclen; i++, src++, srclen--)
if (info->DBCSOffsets[*src] && srclen > 1 && src[1]) { src++; srclen--; }
return i;
}
for (i = dstlen; srclen && i; i--, srclen--, src++, dst++)
{
if ((off = info->DBCSOffsets[*src]))
{
if (srclen > 1 && src[1])
{
src++;
srclen--;
*dst = info->DBCSOffsets[off + *src];
}
else *dst = info->UniDefaultChar;
}
else *dst = info->MultiByteTable[*src];
}
if (srclen)
{
SetLastError( ERROR_INSUFFICIENT_BUFFER );
return 0;
}
return dstlen - i;
}
static int mbstowcs_codepage( UINT codepage, DWORD flags, const char *src, int srclen,
WCHAR *dst, int dstlen )
{
CPTABLEINFO local_info;
const CPTABLEINFO *info = get_codepage_table( codepage );
const unsigned char *str = (const unsigned char *)src;
if (!info)
{
SetLastError( ERROR_INVALID_PARAMETER );
return 0;
}
if (flags & ~(MB_PRECOMPOSED | MB_COMPOSITE | MB_USEGLYPHCHARS | MB_ERR_INVALID_CHARS))
{
SetLastError( ERROR_INVALID_FLAGS );
return 0;
}
if ((flags & MB_USEGLYPHCHARS) && info->MultiByteTable[256] == 256)
{
local_info = *info;
local_info.MultiByteTable += 257;
info = &local_info;
}
if ((flags & MB_ERR_INVALID_CHARS) && check_invalid_chars( info, str, srclen ))
{
SetLastError( ERROR_NO_UNICODE_TRANSLATION );
return 0;
}
if (flags & MB_COMPOSITE) return mbstowcs_decompose( info, str, srclen, dst, dstlen );
if (info->DBCSOffsets) return mbstowcs_dbcs( info, str, srclen, dst, dstlen );
return mbstowcs_sbcs( info, str, srclen, dst, dstlen );
}
/* Note: the Internal_ functions are not documented. The number of parameters
* should be correct, but their exact meaning may not.
*/
@ -1742,6 +2148,52 @@ LCID WINAPI DECLSPEC_HOTPATCH LocaleNameToLCID( const WCHAR *name, DWORD flags )
}
/******************************************************************************
* MultiByteToWideChar (kernelbase.@)
*/
INT WINAPI DECLSPEC_HOTPATCH MultiByteToWideChar( UINT codepage, DWORD flags, const char *src, INT srclen,
WCHAR *dst, INT dstlen )
{
int ret;
if (!src || !srclen || (!dst && dstlen) || dstlen < 0)
{
SetLastError( ERROR_INVALID_PARAMETER );
return 0;
}
if (srclen < 0) srclen = strlen(src) + 1;
switch (codepage)
{
case CP_SYMBOL:
ret = mbstowcs_cpsymbol( flags, src, srclen, dst, dstlen );
break;
case CP_UTF7:
ret = mbstowcs_utf7( flags, src, srclen, dst, dstlen );
break;
case CP_UTF8:
ret = mbstowcs_utf8( flags, src, srclen, dst, dstlen );
break;
case CP_UNIXCP:
codepage = __wine_get_unix_codepage();
if (codepage == CP_UTF8)
{
ret = mbstowcs_utf8( flags, src, srclen, dst, dstlen );
#ifdef __APPLE__ /* work around broken Mac OS X filesystem that enforces decomposed Unicode */
if (ret && dstlen) RtlNormalizeString( NormalizationC, dst, ret, dst, &ret );
#endif
break;
}
/* fall through */
default:
ret = mbstowcs_codepage( codepage, flags, src, srclen, dst, dstlen );
break;
}
TRACE( "cp %d %s -> %s, ret = %d\n", codepage, debugstr_an(src, srclen), debugstr_wn(dst, ret), ret );
return ret;
}
/******************************************************************************
* NormalizeString (kernelbase.@)
*/

View File

@ -2,7 +2,7 @@
/* generated from http://www.unicode.org/Public/12.0.0/ucd/UnicodeData.txt */
/* DO NOT EDIT!! */
#include "wine/unicode.h"
#include "windef.h"
static const WCHAR table[5856] =
{
@ -2195,6 +2195,8 @@ static const WCHAR compatmap_table[8152] =
0x2502, 0x2190, 0x2191, 0x2192, 0x2193, 0x25a0, 0x25cb
};
#include "wine/unicode.h"
static const WCHAR *get_compatmap_entry( WCHAR ch, unsigned int *len )
{
unsigned short offset_offs = compatmap_table[compatmap_table[ch >> 8] + ((ch >> 4) & 0xf)] + (ch & 0xf);

View File

@ -2502,16 +2502,16 @@ sub dump_full_compat_table()
################################################################
# dump the char decomposition table
sub dump_decompose_table($)
sub dump_decompose_table($$)
{
my $filename = shift;
my ($filename, $compat) = @_;
open OUTPUT,">$filename.new" or die "Cannot create $filename";
print "Building $filename\n";
print OUTPUT "/* Unicode char composition */\n";
print OUTPUT "/* generated from $UNIDATA/UnicodeData.txt */\n";
print OUTPUT "/* DO NOT EDIT!! */\n\n";
print OUTPUT "#include \"wine/unicode.h\"\n\n";
print OUTPUT "#include \"windef.h\"\n\n";
# first determine all the 16-char subsets that contain something
@ -2587,11 +2587,13 @@ sub dump_decompose_table($)
printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @table );
}
printf OUTPUT "\n};\n\n";
print OUTPUT "\n};\n\n";
if ($compat)
{
dump_full_compat_table();
print OUTPUT <<"EOF";
#include "wine/unicode.h"
dump_full_compat_table();
print OUTPUT <<"EOF";
static const WCHAR *get_compatmap_entry( WCHAR ch, unsigned int *len )
{
unsigned short offset_offs = compatmap_table[compatmap_table[ch >> 8] + ((ch >> 4) & 0xf)] + (ch & 0xf);
@ -2635,6 +2637,29 @@ unsigned int DECLSPEC_HIDDEN wine_decompose( int flags, WCHAR ch, WCHAR *dst, un
return dst_pos;
}
EOF
}
else
{
print OUTPUT <<"EOF";
unsigned int DECLSPEC_HIDDEN wine_decompose( int flags, WCHAR ch, WCHAR *dst, unsigned int dstlen )
{
const WCHAR *ptr = table + table[table[ch >> 8] + ((ch >> 4) & 0x0f)] + 2 * (ch & 0xf);
unsigned int res, len, dst_pos = 0;
*dst = ch;
if (!*ptr) return 1;
len = ptr[1] ? 2 : 1;
if (dstlen < len) return 0;
/* apply the decomposition recursively */
while (len--)
{
if (!(res = wine_decompose( flags, *ptr++, dst + dst_pos, dstlen - dst_pos - len ))) return 0;
dst_pos += res;
}
return dst_pos;
}
EOF
}
close OUTPUT;
save_file($filename);
}
@ -2888,7 +2913,8 @@ READ_DEFAULTS( $DEFAULTS );
dump_case_mappings( "libs/port/casemap.c" );
dump_sortkeys( "libs/port/collation.c", READ_SORTKEYS_FILE() );
dump_compose_table( "libs/port/compose.c" );
dump_decompose_table( "libs/port/decompose.c" );
dump_decompose_table( "libs/port/decompose.c", 1 );
dump_decompose_table( "dlls/kernelbase/decompose.c", 0 );
dump_ctype_tables( "libs/port/wctype.c" );
dump_bidi_dir_table( "dlls/gdi32/direction.c" );
dump_bidi_dir_table( "dlls/usp10/direction.c" );