diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c index 1e25122c23e..d877c65ec6e 100644 --- a/dlls/kernel32/tests/locale.c +++ b/dlls/kernel32/tests/locale.c @@ -5685,6 +5685,11 @@ static void test_NormalizeString(void) static const WCHAR part1_str10[] = {0x309B,0}; static const WCHAR part1_nfkc10[] = {0x20,0x3099,0}; + /* ANGSTROM SIGN */ + static const WCHAR part1_str11[] = {0x212B,0}; + static const WCHAR part1_nfc11[] = {0xC5,0}; + static const WCHAR part1_nfd11[] = {'A',0x030A,0}; + struct test_data_normal { const WCHAR *str; const WCHAR *expected[4]; @@ -5713,6 +5718,7 @@ static void test_NormalizeString(void) { part1_str8, { part1_str8, part1_nfd8, part1_str8, part1_nfd8 }, { 1, 0, 1, 0 } }, { part1_str9, { part1_str9, part1_str9, part1_nfkc9, part1_nfkc9 }, { 1, 0, 1, 0 } }, { part1_str10, { part1_str10, part1_str10, part1_nfkc10, part1_nfkc10 }, { 1, 0, 1, 0 } }, + { part1_str11, { part1_nfc11, part1_nfd11, part1_nfc11, part1_nfd11 }, { 1, 0, 1, 0 } }, { 0 } }; const struct test_data_normal *ptest = test_arr; diff --git a/libs/port/decompose.c b/libs/port/decompose.c index c46906921a0..e8305d938b6 100644 --- a/libs/port/decompose.c +++ b/libs/port/decompose.c @@ -4,16 +4,16 @@ #include "wine/unicode.h" -static const WCHAR table[4704] = +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, - 0x0100, 0x0210, 0x0220, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0230, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0240, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 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, @@ -38,73 +38,85 @@ static const WCHAR table[4704] = 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, 0x0250, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0270, 0x0280, 0x0290, 0x0100, 0x0100, 0x0100, 0x0100, /* null sub-index */ - 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, - 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, /* sub-index 00 */ - 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, - 0x0260, 0x0260, 0x0260, 0x0260, 0x0280, 0x02a0, 0x02c0, 0x02e0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02c0, 0x02e0, 0x0300, 0x0320, /* sub-index 01 */ - 0x0300, 0x0320, 0x0340, 0x0360, 0x0380, 0x03a0, 0x03c0, 0x03e0, - 0x0260, 0x0260, 0x0400, 0x0420, 0x0440, 0x0460, 0x0480, 0x04a0, + 0x0340, 0x0360, 0x0380, 0x03a0, 0x03c0, 0x03e0, 0x0400, 0x0420, + 0x02a0, 0x02a0, 0x0440, 0x0460, 0x0480, 0x04a0, 0x04c0, 0x04e0, /* sub-index 02 */ - 0x04c0, 0x04e0, 0x0500, 0x0520, 0x0260, 0x0260, 0x0260, 0x0260, - 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, + 0x0500, 0x0520, 0x0540, 0x0560, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, /* sub-index 03 */ - 0x0260, 0x0260, 0x0260, 0x0260, 0x0540, 0x0260, 0x0260, 0x0260, - 0x0560, 0x0580, 0x05a0, 0x05c0, 0x05e0, 0x0600, 0x0260, 0x0260, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x0580, 0x02a0, 0x02a0, 0x05a0, + 0x05c0, 0x05e0, 0x0600, 0x0620, 0x0640, 0x0660, 0x02a0, 0x02a0, /* sub-index 04 */ - 0x0620, 0x0640, 0x0260, 0x0660, 0x0260, 0x0680, 0x0260, 0x06a0, - 0x0260, 0x0260, 0x0260, 0x0260, 0x06c0, 0x06e0, 0x0700, 0x0720, + 0x0680, 0x06a0, 0x02a0, 0x06c0, 0x02a0, 0x06e0, 0x02a0, 0x0700, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x0720, 0x0740, 0x0760, 0x0780, /* sub-index 06 */ - 0x0260, 0x0260, 0x0740, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, - 0x0260, 0x0260, 0x0260, 0x0260, 0x0760, 0x0780, 0x0260, 0x0260, + 0x02a0, 0x02a0, 0x07a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x07c0, 0x07e0, 0x02a0, 0x02a0, /* sub-index 09 */ - 0x0260, 0x0260, 0x07a0, 0x07c0, 0x0260, 0x07e0, 0x0260, 0x0260, - 0x0260, 0x0260, 0x0260, 0x0260, 0x0800, 0x0820, 0x0260, 0x0260, + 0x02a0, 0x02a0, 0x0800, 0x0820, 0x02a0, 0x0840, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x0860, 0x0880, 0x02a0, 0x02a0, /* sub-index 0a */ - 0x0260, 0x0260, 0x0260, 0x0840, 0x0260, 0x0860, 0x0260, 0x0260, - 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, + 0x02a0, 0x02a0, 0x02a0, 0x08a0, 0x02a0, 0x08c0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, /* sub-index 0b */ - 0x0260, 0x0260, 0x0260, 0x0260, 0x0880, 0x08a0, 0x0260, 0x0260, - 0x0260, 0x08c0, 0x0260, 0x0260, 0x08e0, 0x0260, 0x0260, 0x0260, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x08e0, 0x0900, 0x02a0, 0x02a0, + 0x02a0, 0x0920, 0x02a0, 0x02a0, 0x0940, 0x02a0, 0x02a0, 0x02a0, /* sub-index 0c */ - 0x0260, 0x0260, 0x0260, 0x0260, 0x0900, 0x0260, 0x0260, 0x0260, - 0x0260, 0x0260, 0x0260, 0x0260, 0x0920, 0x0260, 0x0260, 0x0260, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x0960, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x0980, 0x02a0, 0x02a0, 0x02a0, /* sub-index 0d */ - 0x0260, 0x0260, 0x0260, 0x0260, 0x0940, 0x0260, 0x0260, 0x0260, - 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0960, 0x0260, 0x0260, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x09a0, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x09c0, 0x02a0, 0x02a0, /* sub-index 0f */ - 0x0260, 0x0260, 0x0260, 0x0260, 0x0980, 0x09a0, 0x09c0, 0x09e0, - 0x0a00, 0x0a20, 0x0a40, 0x0a60, 0x0260, 0x0260, 0x0260, 0x0260, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x09e0, 0x0a00, 0x0a20, 0x0a40, + 0x0a60, 0x0a80, 0x0aa0, 0x0ac0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, /* sub-index 10 */ - 0x0260, 0x0260, 0x0a80, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, - 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, + 0x02a0, 0x02a0, 0x0ae0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, /* sub-index 1b */ - 0x0aa0, 0x0ac0, 0x0260, 0x0ae0, 0x0b00, 0x0260, 0x0260, 0x0260, - 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, + 0x0b00, 0x0b20, 0x02a0, 0x0b40, 0x0b60, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, /* sub-index 1e */ - 0x0b20, 0x0b40, 0x0b60, 0x0b80, 0x0ba0, 0x0bc0, 0x0be0, 0x0c00, - 0x0c20, 0x0c40, 0x0c60, 0x0c80, 0x0ca0, 0x0cc0, 0x0ce0, 0x0d00, + 0x0b80, 0x0ba0, 0x0bc0, 0x0be0, 0x0c00, 0x0c20, 0x0c40, 0x0c60, + 0x0c80, 0x0ca0, 0x0cc0, 0x0ce0, 0x0d00, 0x0d20, 0x0d40, 0x0d60, /* sub-index 1f */ - 0x0d20, 0x0d40, 0x0d60, 0x0d80, 0x0da0, 0x0dc0, 0x0de0, 0x0e00, - 0x0e20, 0x0e40, 0x0e60, 0x0e80, 0x0ea0, 0x0ec0, 0x0ee0, 0x0f00, + 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 */ - 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, - 0x0260, 0x0f20, 0x0f40, 0x0260, 0x0f60, 0x0260, 0x0260, 0x0260, + 0x02a0, 0x02a0, 0x0fa0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x0fc0, 0x0fe0, 0x02a0, 0x1000, 0x02a0, 0x02a0, 0x02a0, /* sub-index 22 */ - 0x0f80, 0x0260, 0x0fa0, 0x0260, 0x0fc0, 0x0260, 0x0fe0, 0x1000, - 0x1020, 0x0260, 0x1040, 0x0260, 0x0260, 0x0260, 0x1060, 0x0260, + 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 */ - 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, - 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x1080, 0x0260, 0x0260, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, + 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x1140, 0x02a0, 0x02a0, /* sub-index 30 */ - 0x0260, 0x0260, 0x0260, 0x0260, 0x10a0, 0x10c0, 0x10e0, 0x1100, - 0x0260, 0x1120, 0x1140, 0x1160, 0x1180, 0x11a0, 0x0260, 0x11c0, + 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 */ - 0x0260, 0x11e0, 0x1200, 0x1220, 0x1240, 0x0260, 0x0260, 0x0260, - 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, + 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, @@ -221,13 +233,18 @@ static const WCHAR table[4704] = 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0340 .. 0x034f */ - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 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, 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 */ @@ -571,10 +588,10 @@ static const WCHAR table[4704] = 0x03a9, 0x0313, 0x03a9, 0x0314, 0x1f68, 0x0300, 0x1f69, 0x0300, 0x1f68, 0x0301, 0x1f69, 0x0301, 0x1f68, 0x0342, 0x1f69, 0x0342, /* 0x1f70 .. 0x1f7f */ - 0x03b1, 0x0300, 0x0000, 0x0000, 0x03b5, 0x0300, 0x0000, 0x0000, - 0x03b7, 0x0300, 0x0000, 0x0000, 0x03b9, 0x0300, 0x0000, 0x0000, - 0x03bf, 0x0300, 0x0000, 0x0000, 0x03c5, 0x0300, 0x0000, 0x0000, - 0x03c9, 0x0300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 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, @@ -593,28 +610,38 @@ static const WCHAR table[4704] = /* 0x1fb0 .. 0x1fbf */ 0x03b1, 0x0306, 0x03b1, 0x0304, 0x1f70, 0x0345, 0x03b1, 0x0345, 0x03ac, 0x0345, 0x0000, 0x0000, 0x03b1, 0x0342, 0x1fb6, 0x0345, - 0x0391, 0x0306, 0x0391, 0x0304, 0x0391, 0x0300, 0x0000, 0x0000, - 0x0391, 0x0345, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 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, 0x0000, 0x0000, 0x0397, 0x0300, 0x0000, 0x0000, + 0x0395, 0x0300, 0x0388, 0x0000, 0x0397, 0x0300, 0x0389, 0x0000, 0x0397, 0x0345, 0x1fbf, 0x0300, 0x1fbf, 0x0301, 0x1fbf, 0x0342, /* 0x1fd0 .. 0x1fdf */ - 0x03b9, 0x0306, 0x03b9, 0x0304, 0x03ca, 0x0300, 0x0000, 0x0000, + 0x03b9, 0x0306, 0x03b9, 0x0304, 0x03ca, 0x0300, 0x0390, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03b9, 0x0342, 0x03ca, 0x0342, - 0x0399, 0x0306, 0x0399, 0x0304, 0x0399, 0x0300, 0x0000, 0x0000, + 0x0399, 0x0306, 0x0399, 0x0304, 0x0399, 0x0300, 0x038a, 0x0000, 0x0000, 0x0000, 0x1ffe, 0x0300, 0x1ffe, 0x0301, 0x1ffe, 0x0342, /* 0x1fe0 .. 0x1fef */ - 0x03c5, 0x0306, 0x03c5, 0x0304, 0x03cb, 0x0300, 0x0000, 0x0000, + 0x03c5, 0x0306, 0x03c5, 0x0304, 0x03cb, 0x0300, 0x03b0, 0x0000, 0x03c1, 0x0313, 0x03c1, 0x0314, 0x03c5, 0x0342, 0x03cb, 0x0342, - 0x03a5, 0x0306, 0x03a5, 0x0304, 0x03a5, 0x0300, 0x0000, 0x0000, - 0x03a1, 0x0314, 0x00a8, 0x0300, 0x0000, 0x0000, 0x0000, 0x0000, + 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, 0x0000, 0x0000, 0x03a9, 0x0300, 0x0000, 0x0000, - 0x03a9, 0x0345, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 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, @@ -670,6 +697,11 @@ static const WCHAR table[4704] = 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, @@ -725,6 +757,156 @@ static const WCHAR table[4704] = 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, @@ -2041,7 +2223,7 @@ unsigned int DECLSPEC_HIDDEN wine_decompose( int flags, WCHAR ch, WCHAR *dst, un if (!ptr) { ptr = table + table[table[ch >> 8] + ((ch >> 4) & 0x0f)] + 2 * (ch & 0xf); - len = 2; + len = ptr[1] ? 2 : 1; } if (!*ptr) return 1; diff --git a/tools/make_unicode b/tools/make_unicode index 3a9fefe474f..dbf640abe7c 100755 --- a/tools/make_unicode +++ b/tools/make_unicode @@ -528,11 +528,19 @@ sub READ_DEFAULTS($) $decomp_table[$src] = [ hex $1, hex $2 ]; push @compose_table, [ hex $1, hex $2, $src ]; } - elsif ($decomp =~ /^(<[a-z]+>\s)*([0-9a-fA-F]+)$/ && - (($src >= 0xf900 && $src < 0xfb00) || ($src >= 0xfe30 && $src < 0xfffd))) + elsif ($decomp =~ /^([0-9a-fA-F]+)$/) { - # Single char decomposition in the compatibility range - $compatmap_table[$src] = hex $2; + # Single char decomposition + if (hex $1 < 65536) + { + $decomp_table[$src] = [ hex $1, 0 ]; + } + + if (($src >= 0xf900 && $src < 0xfb00) || ($src >= 0xfe30 && $src < 0xfffd)) + { + # Single char decomposition in the compatibility range + $compatmap_table[$src] = hex $1; + } } } else @@ -2494,7 +2502,7 @@ unsigned int DECLSPEC_HIDDEN wine_decompose( int flags, WCHAR ch, WCHAR *dst, un if (!ptr) { ptr = table + table[table[ch >> 8] + ((ch >> 4) & 0x0f)] + 2 * (ch & 0xf); - len = 2; + len = ptr[1] ? 2 : 1; } if (!*ptr) return 1;