Signed-off-by: Sergio Gómez Del Real sdelreal@codeweavers.com --- libs/port/compose.c | 60 ++ libs/port/decompose.c | 1476 +++++++++++++++++++++++++++++++++++++++++++++++++ tools/make_unicode | 306 +++++++++- 3 files changed, 1841 insertions(+), 1 deletion(-)
diff --git a/libs/port/compose.c b/libs/port/compose.c index 71589f47c1..77ad4026ee 100644 --- a/libs/port/compose.c +++ b/libs/port/compose.c @@ -380,6 +380,8 @@ static const WCHAR table[0x85e] = 0x30d8, 0x30da, 0x30db, 0x30dd };
+#include "decompose.c" + static inline int binary_search( WCHAR ch, int low, int high ) { while (low <= high) @@ -403,3 +405,61 @@ WCHAR DECLSPEC_HIDDEN wine_compose( const WCHAR *str ) count = table[2 * pos + 3]; } } + +static inline int is_blocked(WCHAR *ptr1, WCHAR *ptr2) +{ + if (ptr1 >= ptr2) return -1; + + while (++ptr1 < ptr2) + { + const WCHAR *map1, *map2; + map1 = unicode_table_lookup( *ptr1, 0, idx1_comb, 8, idx2_comb, 4, + offsets_comb, 4, data_comb, 0 ); + map2 = unicode_table_lookup( *ptr2, 0, idx1_comb, 8, idx2_comb, 4, + offsets_comb, 4, data_comb, 0 ); + if (*map1 == 0 || *map2 <= *map1) return 1; + } + return 0; +} + +static inline int is_fullexcl(WCHAR ch) +{ + const WCHAR *map; + map = unicode_table_lookup( ch, 0, idx1_fullcomp, 8, idx2_fullcomp, 4, + offsets_fullcomp, 4, data_fullcomp, 0 ); + return (int)*map; +} + +UINT unicode_canonical_composition( WCHAR *str, UINT strlen ) +{ + int i, j; + WCHAR dum[3] = {0}; + + if (strlen == 0) strlen = strlenW( str ); + + for (i = 1; i <= strlen; i++) + { + WCHAR *scratch = str+i, comp; + if (*scratch == 0) break; + for (scratch = str+i; scratch - str > 0; --scratch) + { + if (is_starter(*scratch)) break; + } + if (!is_starter(*scratch)) continue; + if (is_blocked( scratch, str+i )) continue; + dum[0] = *scratch; + dum[1] = str[i]; + comp = wine_compose( dum ); + if (comp == 0) continue; + if (is_fullexcl( comp )) continue; + *scratch = comp; // replace + for (j = i; j < strlen-1; j++) + { + str[j] = str[j+1]; + } + strlen--; + i--; + } + + return strlen; +} diff --git a/libs/port/decompose.c b/libs/port/decompose.c index 9f77802c88..de237d16b1 100644 --- a/libs/port/decompose.c +++ b/libs/port/decompose.c @@ -3994,6 +3994,1434 @@ static const USHORT offsets_decomp[15296] = 0x118e, 0x118e, 0x28c4, 0x28c4, 0x0000, 0x0000, 0x0000, 0x0000 };
+static const WCHAR data_comb[827] = +{ + 0x0000, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0232, 0x0220, + 0x0220, 0x0220, 0x0220, 0x0232, 0x0216, 0x0220, 0x0220, 0x0220, + 0x0220, 0x0220, 0x0202, 0x0202, 0x0220, 0x0220, 0x0220, 0x0220, + 0x0202, 0x0202, 0x0220, 0x0220, 0x0220, 0x0220, 0x0220, 0x0220, + 0x0220, 0x0220, 0x0220, 0x0220, 0x0220, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0220, 0x0220, 0x0220, 0x0220, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0240, 0x0230, + 0x0220, 0x0220, 0x0220, 0x0230, 0x0230, 0x0230, 0x0220, 0x0220, + 0x0230, 0x0230, 0x0230, 0x0220, 0x0220, 0x0220, 0x0220, 0x0230, + 0x0232, 0x0220, 0x0220, 0x0230, 0x0233, 0x0234, 0x0234, 0x0233, + 0x0234, 0x0234, 0x0233, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0220, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0220, 0x0230, 0x0230, 0x0230, 0x0222, 0x0220, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0220, 0x0220, + 0x0220, 0x0220, 0x0220, 0x0220, 0x0230, 0x0230, 0x0220, 0x0230, + 0x0230, 0x0222, 0x0228, 0x0230, 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x0019, 0x0020, + 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0230, 0x0220, 0x0018, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0030, 0x0031, 0x0032, 0x0027, 0x0028, 0x0029, 0x0030, 0x0031, + 0x0032, 0x0033, 0x0034, 0x0230, 0x0230, 0x0220, 0x0220, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0220, 0x0230, 0x0230, 0x0220, + 0x0035, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0220, 0x0230, 0x0230, 0x0230, + 0x0220, 0x0230, 0x0230, 0x0220, 0x0036, 0x0230, 0x0220, 0x0230, + 0x0230, 0x0220, 0x0230, 0x0230, 0x0220, 0x0220, 0x0220, 0x0230, + 0x0220, 0x0220, 0x0230, 0x0220, 0x0230, 0x0230, 0x0230, 0x0220, + 0x0230, 0x0220, 0x0230, 0x0220, 0x0230, 0x0220, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0220, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0220, 0x0220, + 0x0220, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0220, + 0x0230, 0x0230, 0x0220, 0x0230, 0x0230, 0x0220, 0x0230, 0x0230, + 0x0230, 0x0220, 0x0220, 0x0220, 0x0027, 0x0028, 0x0029, 0x0230, + 0x0230, 0x0230, 0x0220, 0x0230, 0x0230, 0x0220, 0x0220, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0007, 0x0009, 0x0230, 0x0220, + 0x0230, 0x0230, 0x0007, 0x0009, 0x0007, 0x0009, 0x0007, 0x0009, + 0x0007, 0x0009, 0x0009, 0x0009, 0x0084, 0x0091, 0x0007, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0103, 0x0103, 0x0009, 0x0107, + 0x0107, 0x0107, 0x0107, 0x0118, 0x0118, 0x0122, 0x0122, 0x0122, + 0x0122, 0x0220, 0x0220, 0x0220, 0x0220, 0x0216, 0x0129, 0x0130, + 0x0132, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0230, 0x0230, + 0x0009, 0x0230, 0x0230, 0x0220, 0x0007, 0x0009, 0x0009, 0x0220, + 0x0230, 0x0230, 0x0230, 0x0009, 0x0009, 0x0009, 0x0230, 0x0228, + 0x0222, 0x0230, 0x0220, 0x0230, 0x0220, 0x0009, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0220, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0220, 0x0220, 0x0220, 0x0220, + 0x0220, 0x0220, 0x0230, 0x0230, 0x0220, 0x0007, 0x0009, 0x0230, + 0x0220, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0009, 0x0009, 0x0007, 0x0009, 0x0009, 0x0007, 0x0230, 0x0230, + 0x0230, 0x0001, 0x0220, 0x0220, 0x0220, 0x0220, 0x0220, 0x0230, + 0x0230, 0x0220, 0x0220, 0x0220, 0x0220, 0x0230, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0220, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0220, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0220, 0x0230, 0x0230, 0x0234, 0x0214, + 0x0220, 0x0202, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0232, + 0x0228, 0x0228, 0x0220, 0x0230, 0x0233, 0x0220, 0x0230, 0x0220, + 0x0230, 0x0230, 0x0001, 0x0001, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0001, 0x0001, 0x0001, 0x0230, 0x0230, 0x0230, 0x0001, 0x0001, + 0x0230, 0x0220, 0x0230, 0x0001, 0x0001, 0x0220, 0x0220, 0x0220, + 0x0220, 0x0230, 0x0230, 0x0230, 0x0230, 0x0009, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0218, 0x0228, + 0x0232, 0x0222, 0x0224, 0x0224, 0x0008, 0x0008, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0009, 0x0009, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0220, 0x0220, 0x0220, 0x0009, 0x0007, 0x0009, 0x0230, + 0x0230, 0x0230, 0x0220, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0009, 0x0009, 0x0026, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0220, 0x0220, 0x0220, 0x0220, 0x0220, 0x0220, + 0x0220, 0x0230, 0x0230, 0x0220, 0x0220, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0220, 0x0230, 0x0230, 0x0001, 0x0220, 0x0009, + 0x0230, 0x0220, 0x0009, 0x0009, 0x0009, 0x0007, 0x0230, 0x0230, + 0x0230, 0x0009, 0x0009, 0x0007, 0x0009, 0x0007, 0x0009, 0x0007, + 0x0007, 0x0009, 0x0007, 0x0009, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0009, 0x0007, 0x0009, 0x0007, 0x0009, 0x0007, 0x0009, 0x0009, + 0x0007, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0007, 0x0009, + 0x0009, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0001, 0x0216, 0x0216, + 0x0001, 0x0001, 0x0001, 0x0226, 0x0216, 0x0216, 0x0216, 0x0216, + 0x0216, 0x0220, 0x0220, 0x0220, 0x0220, 0x0220, 0x0220, 0x0220, + 0x0220, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0220, 0x0220, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0230, 0x0230, 0x0230, 0x0220, 0x0220, 0x0220, + 0x0220, 0x0220, 0x0220, 0x0220, 0x0230, 0x0230, 0x0230, 0x0230, + 0x0230, 0x0230, 0x0007 +}; + +static const BYTE idx1_comb[490] = +{ + 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, + 0x0e, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x19, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, + 0x1c, 0x1d, 0x1e, 0x1f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x00, + 0x00, 0x22, 0x23, 0x24, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x00, 0x00, 0x2e, 0x00, 0x2f, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x31, 0x32, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x34, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x37, 0x38 +}; + +static const USHORT idx2_comb[912] = +{ + /* all-zero 256-char blocks get mapped to here */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x01 */ + 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x02 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x03 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0009, 0x000a, 0x000b, 0x000c, 0x0000, 0x0000, 0x0000, + /* sub-index 0x04 */ + 0x0000, 0x000d, 0x0000, 0x0000, 0x000e, 0x000f, 0x0000, 0x0010, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0011, 0x0012, 0x0000, + /* sub-index 0x05 */ + 0x0000, 0x0013, 0x0000, 0x0014, 0x0015, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0017, + /* sub-index 0x06 */ + 0x0000, 0x0018, 0x0019, 0x0000, 0x0000, 0x001a, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001b, 0x001c, 0x001d, + /* sub-index 0x07 */ + 0x0000, 0x0000, 0x0000, 0x001e, 0x001f, 0x0020, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0021, 0x0022, 0x0000, 0x0000, 0x0000, + /* sub-index 0x08 */ + 0x0000, 0x0000, 0x0000, 0x0023, 0x0024, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0025, 0x0026, 0x0000, 0x0000, 0x0000, + /* sub-index 0x09 */ + 0x0000, 0x0000, 0x0000, 0x0027, 0x0028, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0029, 0x0000, 0x0000, 0x0000, + /* sub-index 0x0a */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x002a, 0x002b, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x002c, 0x002d, 0x0000, 0x0000, 0x0000, + /* sub-index 0x0b */ + 0x0000, 0x0000, 0x0000, 0x002e, 0x002f, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0030, 0x0000, 0x0000, 0x0000, + /* sub-index 0x0c */ + 0x0000, 0x0000, 0x0000, 0x0031, 0x0032, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0033, 0x0034, 0x0000, 0x0000, 0x0000, + /* sub-index 0x0d */ + 0x0000, 0x0035, 0x0000, 0x0036, 0x0000, 0x0000, 0x0000, 0x0037, + 0x0038, 0x0000, 0x0000, 0x0000, 0x0039, 0x0000, 0x0000, 0x0000, + /* sub-index 0x0e */ + 0x0000, 0x0000, 0x0000, 0x003a, 0x0000, 0x0000, 0x0000, 0x0000, + 0x003b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x0f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x003c, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x10 */ + 0x0000, 0x003d, 0x0000, 0x003e, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x003f, 0x0000, 0x0000, + /* sub-index 0x11 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0040, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x12 */ + 0x0000, 0x0000, 0x0000, 0x0041, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x13 */ + 0x0000, 0x0042, 0x0000, 0x0000, 0x0000, 0x0000, 0x0043, 0x0044, + 0x0000, 0x0000, 0x0000, 0x0045, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x14 */ + 0x0000, 0x0000, 0x0000, 0x0046, 0x0047, 0x0000, 0x0048, 0x0049, + 0x0000, 0x0000, 0x004a, 0x0000, 0x0000, 0x0000, 0x004b, 0x004c, + /* sub-index 0x15 */ + 0x0000, 0x0000, 0x0000, 0x004d, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x004e, 0x004f, 0x0050, + /* sub-index 0x16 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0051, 0x0052, 0x0053, 0x0054, + /* sub-index 0x17 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0055, 0x0056, 0x0057, + /* sub-index 0x18 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0058, 0x0059, + /* sub-index 0x19 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x005a, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x005b, 0x005c, + /* sub-index 0x1a */ + 0x0000, 0x0000, 0x005d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x005e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x1b */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x005f, 0x0060, + 0x0000, 0x0061, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0062, + /* sub-index 0x1c */ + 0x0063, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0064, 0x0000, 0x0065, 0x0066, + /* sub-index 0x1d */ + 0x0000, 0x0000, 0x0067, 0x0000, 0x0000, 0x0068, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0069, 0x006a, 0x0000, 0x0000, 0x0000, + /* sub-index 0x1e */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x006b, 0x006c, 0x0000, 0x0000, 0x006d, + /* sub-index 0x1f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x006e, 0x0000, + /* sub-index 0x20 */ + 0x0000, 0x006f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x21 */ + 0x0000, 0x0000, 0x0070, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x22 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0071, + /* sub-index 0x23 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0072, 0x0000, + /* sub-index 0x24 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0073, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x25 */ + 0x0074, 0x0000, 0x0000, 0x0075, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0076, 0x0000, + /* sub-index 0x26 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0077, 0x0000, 0x0000, 0x0078, + 0x0000, 0x0000, 0x0000, 0x0079, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x27 */ + 0x007a, 0x0000, 0x0000, 0x007b, 0x0000, 0x0000, 0x0000, 0x007c, + 0x0000, 0x0000, 0x0000, 0x0000, 0x007d, 0x0000, 0x0000, 0x0000, + /* sub-index 0x28 */ + 0x0000, 0x0000, 0x0000, 0x007e, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x007f, 0x0000, + /* sub-index 0x29 */ + 0x0000, 0x0000, 0x0000, 0x0080, 0x0081, 0x0000, 0x0082, 0x0083, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x2a */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0084, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0085, 0x0000, 0x0000, 0x0000, + /* sub-index 0x2b */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0086, 0x0087, 0x0000, 0x0000, 0x0000, + /* sub-index 0x2c */ + 0x0000, 0x0000, 0x0000, 0x0088, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0089, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x2d */ + 0x0000, 0x0000, 0x008a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x2e */ + 0x0000, 0x0000, 0x0000, 0x008b, 0x008c, 0x0000, 0x0000, 0x0000, + 0x0000, 0x008d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x2f */ + 0x0000, 0x0000, 0x0000, 0x008e, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x30 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x008f, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x31 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0090, + /* sub-index 0x32 */ + 0x0000, 0x0000, 0x0000, 0x0091, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x33 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0092, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x34 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0093, 0x0094, + 0x0095, 0x0000, 0x0096, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x35 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0097, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x36 */ + 0x0098, 0x0099, 0x009a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x37 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x009b, 0x0000, 0x0000, + /* sub-index 0x38 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x009c, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +static const USHORT offsets_comb[2512] = +{ + /* all-zero 16-char blocks get mapped to here */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0300 .. 0x030f */ + 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, + 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, 0x0010, + /* 0x0310 .. 0x031f */ + 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, + 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, 0x0020, + /* 0x0320 .. 0x032f */ + 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, + 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, 0x0030, + /* 0x0330 .. 0x033f */ + 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, + 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040, + /* 0x0340 .. 0x034f */ + 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, + 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0000, + /* 0x0350 .. 0x035f */ + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x0360 .. 0x036f */ + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x0480 .. 0x048f */ + 0x0000, 0x0000, 0x0000, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0590 .. 0x059f */ + 0x0000, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, 0x0080, 0x0081, 0x0082, 0x0083, + /* 0x05a0 .. 0x05af */ + 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008a, 0x008b, + 0x008c, 0x008d, 0x008e, 0x008f, 0x0090, 0x0091, 0x0092, 0x0093, + /* 0x05b0 .. 0x05bf */ + 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009a, 0x009b, + 0x009c, 0x009d, 0x009e, 0x009f, 0x00a0, 0x00a1, 0x0000, 0x00a2, + /* 0x05c0 .. 0x05cf */ + 0x0000, 0x00a3, 0x00a4, 0x0000, 0x00a5, 0x00a6, 0x0000, 0x00a7, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0610 .. 0x061f */ + 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + 0x00b0, 0x00b1, 0x00b2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0640 .. 0x064f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + /* 0x0650 .. 0x065f */ + 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, + 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, + /* 0x0670 .. 0x067f */ + 0x00c8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x06d0 .. 0x06df */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00c9, 0x00ca, + 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x0000, 0x0000, 0x00d0, + /* 0x06e0 .. 0x06ef */ + 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x0000, 0x0000, 0x00d6, + 0x00d7, 0x0000, 0x00d8, 0x00d9, 0x00da, 0x00db, 0x0000, 0x0000, + /* 0x0710 .. 0x071f */ + 0x0000, 0x00dc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0730 .. 0x073f */ + 0x00dd, 0x00de, 0x00df, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, + 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, + /* 0x0740 .. 0x074f */ + 0x00ed, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, + 0x00f5, 0x00f6, 0x00f7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x07e0 .. 0x07ef */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, + /* 0x07f0 .. 0x07ff */ + 0x00fd, 0x00fe, 0x00ff, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0810 .. 0x081f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0101, 0x0102, + 0x0103, 0x0104, 0x0000, 0x0105, 0x0106, 0x0107, 0x0108, 0x0109, + /* 0x0820 .. 0x082f */ + 0x010a, 0x010b, 0x010c, 0x010d, 0x0000, 0x010e, 0x010f, 0x0110, + 0x0000, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0000, 0x0000, + /* 0x0850 .. 0x085f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0116, 0x0117, 0x0118, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x08d0 .. 0x08df */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0119, 0x011a, 0x011b, 0x011c, + 0x011d, 0x011e, 0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, + /* 0x08e0 .. 0x08ef */ + 0x0125, 0x0126, 0x0000, 0x0127, 0x0128, 0x0129, 0x012a, 0x012b, + 0x012c, 0x012d, 0x012e, 0x012f, 0x0130, 0x0131, 0x0132, 0x0133, + /* 0x08f0 .. 0x08ff */ + 0x0134, 0x0135, 0x0136, 0x0137, 0x0138, 0x0139, 0x013a, 0x013b, + 0x013c, 0x013d, 0x013e, 0x013f, 0x0140, 0x0141, 0x0142, 0x0143, + /* 0x0930 .. 0x093f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0144, 0x0000, 0x0000, 0x0000, + /* 0x0940 .. 0x094f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0145, 0x0000, 0x0000, + /* 0x0950 .. 0x095f */ + 0x0000, 0x0146, 0x0147, 0x0148, 0x0149, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x09b0 .. 0x09bf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x014a, 0x0000, 0x0000, 0x0000, + /* 0x09c0 .. 0x09cf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x014b, 0x0000, 0x0000, + /* 0x0a30 .. 0x0a3f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x014c, 0x0000, 0x0000, 0x0000, + /* 0x0a40 .. 0x0a4f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x014d, 0x0000, 0x0000, + /* 0x0ab0 .. 0x0abf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x014e, 0x0000, 0x0000, 0x0000, + /* 0x0ac0 .. 0x0acf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x014f, 0x0000, 0x0000, + /* 0x0b30 .. 0x0b3f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0150, 0x0000, 0x0000, 0x0000, + /* 0x0b40 .. 0x0b4f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0151, 0x0000, 0x0000, + /* 0x0bc0 .. 0x0bcf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0152, 0x0000, 0x0000, + /* 0x0c40 .. 0x0c4f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0153, 0x0000, 0x0000, + /* 0x0c50 .. 0x0c5f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0154, 0x0155, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0cb0 .. 0x0cbf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0156, 0x0000, 0x0000, 0x0000, + /* 0x0cc0 .. 0x0ccf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0157, 0x0000, 0x0000, + /* 0x0d30 .. 0x0d3f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0158, 0x0159, 0x0000, 0x0000, 0x0000, + /* 0x0d40 .. 0x0d4f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x015a, 0x0000, 0x0000, + /* 0x0dc0 .. 0x0dcf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x015b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0e30 .. 0x0e3f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x015c, 0x015d, 0x015e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0e40 .. 0x0e4f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x015f, 0x0160, 0x0161, 0x0162, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0eb0 .. 0x0ebf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0163, 0x0164, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0ec0 .. 0x0ecf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0165, 0x0166, 0x0167, 0x0168, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0f10 .. 0x0f1f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0169, 0x016a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0f30 .. 0x0f3f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x016b, 0x0000, 0x016c, + 0x0000, 0x016d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0f70 .. 0x0f7f */ + 0x0000, 0x016e, 0x016f, 0x0000, 0x0170, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0171, 0x0172, 0x0173, 0x0174, 0x0000, 0x0000, + /* 0x0f80 .. 0x0f8f */ + 0x0175, 0x0000, 0x0176, 0x0177, 0x0178, 0x0000, 0x0179, 0x017a, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0fc0 .. 0x0fcf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x017b, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1030 .. 0x103f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x017c, + 0x0000, 0x017d, 0x017e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1080 .. 0x108f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x017f, 0x0000, 0x0000, + /* 0x1350 .. 0x135f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0181, 0x0182, + /* 0x1710 .. 0x171f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0183, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1730 .. 0x173f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0184, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x17d0 .. 0x17df */ + 0x0000, 0x0000, 0x0185, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0186, 0x0000, 0x0000, + /* 0x18a0 .. 0x18af */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0187, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1930 .. 0x193f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0188, 0x0189, 0x018a, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1a10 .. 0x1a1f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x018b, + 0x018c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1a60 .. 0x1a6f */ + 0x018d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1a70 .. 0x1a7f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x018e, 0x018f, 0x0190, + 0x0191, 0x0192, 0x0193, 0x0194, 0x0195, 0x0000, 0x0000, 0x0196, + /* 0x1ab0 .. 0x1abf */ + 0x0197, 0x0198, 0x0199, 0x019a, 0x019b, 0x019c, 0x019d, 0x019e, + 0x019f, 0x01a0, 0x01a1, 0x01a2, 0x01a3, 0x01a4, 0x0000, 0x0000, + /* 0x1b30 .. 0x1b3f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x01a5, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1b40 .. 0x1b4f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x01a6, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1b60 .. 0x1b6f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x01a7, 0x01a8, 0x01a9, 0x01aa, 0x01ab, + /* 0x1b70 .. 0x1b7f */ + 0x01ac, 0x01ad, 0x01ae, 0x01af, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1ba0 .. 0x1baf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x01b0, 0x01b1, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1be0 .. 0x1bef */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01b2, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1bf0 .. 0x1bff */ + 0x0000, 0x0000, 0x01b3, 0x01b4, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1c30 .. 0x1c3f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01b5, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1cd0 .. 0x1cdf */ + 0x01b6, 0x01b7, 0x01b8, 0x0000, 0x01b9, 0x01ba, 0x01bb, 0x01bc, + 0x01bd, 0x01be, 0x01bf, 0x01c0, 0x01c1, 0x01c2, 0x01c3, 0x01c4, + /* 0x1ce0 .. 0x1cef */ + 0x01c5, 0x0000, 0x01c6, 0x01c7, 0x01c8, 0x01c9, 0x01ca, 0x01cb, + 0x01cc, 0x0000, 0x0000, 0x0000, 0x0000, 0x01cd, 0x0000, 0x0000, + /* 0x1cf0 .. 0x1cff */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x01ce, 0x0000, 0x0000, 0x0000, + 0x01cf, 0x01d0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1dc0 .. 0x1dcf */ + 0x01d1, 0x01d2, 0x01d3, 0x01d4, 0x01d5, 0x01d6, 0x01d7, 0x01d8, + 0x01d9, 0x01da, 0x01db, 0x01dc, 0x01dd, 0x01de, 0x01df, 0x01e0, + /* 0x1dd0 .. 0x1ddf */ + 0x01e1, 0x01e2, 0x01e3, 0x01e4, 0x01e5, 0x01e6, 0x01e7, 0x01e8, + 0x01e9, 0x01ea, 0x01eb, 0x01ec, 0x01ed, 0x01ee, 0x01ef, 0x01f0, + /* 0x1de0 .. 0x1def */ + 0x01f1, 0x01f2, 0x01f3, 0x01f4, 0x01f5, 0x01f6, 0x01f7, 0x01f8, + 0x01f9, 0x01fa, 0x01fb, 0x01fc, 0x01fd, 0x01fe, 0x01ff, 0x0200, + /* 0x1df0 .. 0x1dff */ + 0x0201, 0x0202, 0x0203, 0x0204, 0x0205, 0x0206, 0x0207, 0x0208, + 0x0209, 0x020a, 0x0000, 0x020b, 0x020c, 0x020d, 0x020e, 0x020f, + /* 0x20d0 .. 0x20df */ + 0x0210, 0x0211, 0x0212, 0x0213, 0x0214, 0x0215, 0x0216, 0x0217, + 0x0218, 0x0219, 0x021a, 0x021b, 0x021c, 0x0000, 0x0000, 0x0000, + /* 0x20e0 .. 0x20ef */ + 0x0000, 0x021d, 0x0000, 0x0000, 0x0000, 0x021e, 0x021f, 0x0220, + 0x0221, 0x0222, 0x0223, 0x0224, 0x0225, 0x0226, 0x0227, 0x0228, + /* 0x20f0 .. 0x20ff */ + 0x0229, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x2ce0 .. 0x2cef */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x022a, + /* 0x2cf0 .. 0x2cff */ + 0x022b, 0x022c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x2d70 .. 0x2d7f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x022d, + /* 0x2de0 .. 0x2def */ + 0x022e, 0x022f, 0x0230, 0x0231, 0x0232, 0x0233, 0x0234, 0x0235, + 0x0236, 0x0237, 0x0238, 0x0239, 0x023a, 0x023b, 0x023c, 0x023d, + /* 0x2df0 .. 0x2dff */ + 0x023e, 0x023f, 0x0240, 0x0241, 0x0242, 0x0243, 0x0244, 0x0245, + 0x0246, 0x0247, 0x0248, 0x0249, 0x024a, 0x024b, 0x024c, 0x024d, + /* 0x3020 .. 0x302f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x024e, 0x024f, 0x0250, 0x0251, 0x0252, 0x0253, + /* 0x3090 .. 0x309f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0254, 0x0255, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xa660 .. 0xa66f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0256, + /* 0xa670 .. 0xa67f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0257, 0x0258, 0x0259, 0x025a, + 0x025b, 0x025c, 0x025d, 0x025e, 0x025f, 0x0260, 0x0000, 0x0000, + /* 0xa690 .. 0xa69f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0261, 0x0262, + /* 0xa6f0 .. 0xa6ff */ + 0x0263, 0x0264, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xa800 .. 0xa80f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0265, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xa8c0 .. 0xa8cf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0266, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xa8e0 .. 0xa8ef */ + 0x0267, 0x0268, 0x0269, 0x026a, 0x026b, 0x026c, 0x026d, 0x026e, + 0x026f, 0x0270, 0x0271, 0x0272, 0x0273, 0x0274, 0x0275, 0x0276, + /* 0xa8f0 .. 0xa8ff */ + 0x0277, 0x0278, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xa920 .. 0xa92f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0279, 0x027a, 0x027b, 0x0000, 0x0000, + /* 0xa950 .. 0xa95f */ + 0x0000, 0x0000, 0x0000, 0x027c, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xa9b0 .. 0xa9bf */ + 0x0000, 0x0000, 0x0000, 0x027d, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xa9c0 .. 0xa9cf */ + 0x027e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xaab0 .. 0xaabf */ + 0x027f, 0x0000, 0x0280, 0x0281, 0x0282, 0x0000, 0x0000, 0x0283, + 0x0284, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0285, 0x0286, + /* 0xaac0 .. 0xaacf */ + 0x0000, 0x0287, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xaaf0 .. 0xaaff */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0288, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xabe0 .. 0xabef */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0289, 0x0000, 0x0000, + /* 0xfb10 .. 0xfb1f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x028a, 0x0000, + /* 0xfe20 .. 0xfe2f */ + 0x028b, 0x028c, 0x028d, 0x028e, 0x028f, 0x0290, 0x0291, 0x0292, + 0x0293, 0x0294, 0x0295, 0x0296, 0x0297, 0x0298, 0x0299, 0x029a, + /* 0x101f0 .. 0x101ff */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x029b, 0x0000, 0x0000, + /* 0x102e0 .. 0x102ef */ + 0x029c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x10370 .. 0x1037f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x029d, 0x029e, + 0x029f, 0x02a0, 0x02a1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x10a00 .. 0x10a0f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a2, 0x0000, 0x02a3, + /* 0x10a30 .. 0x10a3f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x02a4, 0x02a5, 0x02a6, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a7, + /* 0x10ae0 .. 0x10aef */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, 0x02a9, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x11040 .. 0x1104f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02aa, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x11070 .. 0x1107f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02ab, + /* 0x110b0 .. 0x110bf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x02ac, 0x02ad, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x11100 .. 0x1110f */ + 0x02ae, 0x02af, 0x02b0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x11130 .. 0x1113f */ + 0x0000, 0x0000, 0x0000, 0x02b1, 0x02b2, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x11170 .. 0x1117f */ + 0x0000, 0x0000, 0x0000, 0x02b3, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x111c0 .. 0x111cf */ + 0x02b4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x02b5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x11230 .. 0x1123f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02b6, 0x02b7, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x112e0 .. 0x112ef */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x02b8, 0x02b9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x11330 .. 0x1133f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x02ba, 0x0000, 0x0000, 0x0000, + /* 0x11340 .. 0x1134f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02bb, 0x0000, 0x0000, + /* 0x11360 .. 0x1136f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02bc, 0x02bd, + 0x02be, 0x02bf, 0x02c0, 0x02c1, 0x02c2, 0x0000, 0x0000, 0x0000, + /* 0x11370 .. 0x1137f */ + 0x02c3, 0x02c4, 0x02c5, 0x02c6, 0x02c7, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x11440 .. 0x1144f */ + 0x0000, 0x0000, 0x02c8, 0x0000, 0x0000, 0x0000, 0x02c9, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x114c0 .. 0x114cf */ + 0x0000, 0x0000, 0x02ca, 0x02cb, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x115b0 .. 0x115bf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02cc, + /* 0x115c0 .. 0x115cf */ + 0x02cd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x11630 .. 0x1163f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02ce, + /* 0x116b0 .. 0x116bf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02cf, 0x02d0, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x11720 .. 0x1172f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x02d1, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x11a30 .. 0x11a3f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x02d2, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x11a40 .. 0x11a4f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02d3, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x11a90 .. 0x11a9f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x02d4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x11c30 .. 0x11c3f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02d5, + /* 0x11d40 .. 0x11d4f */ + 0x0000, 0x0000, 0x02d6, 0x0000, 0x02d7, 0x02d8, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x16af0 .. 0x16aff */ + 0x02d9, 0x02da, 0x02db, 0x02dc, 0x02dd, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x16b30 .. 0x16b3f */ + 0x02de, 0x02df, 0x02e0, 0x02e1, 0x02e2, 0x02e3, 0x02e4, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1bc90 .. 0x1bc9f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02e5, 0x0000, + /* 0x1d160 .. 0x1d16f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02e6, 0x02e7, 0x02e8, + 0x02e9, 0x02ea, 0x0000, 0x0000, 0x0000, 0x02eb, 0x02ec, 0x02ed, + /* 0x1d170 .. 0x1d17f */ + 0x02ee, 0x02ef, 0x02f0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x02f1, 0x02f2, 0x02f3, 0x02f4, 0x02f5, + /* 0x1d180 .. 0x1d18f */ + 0x02f6, 0x02f7, 0x02f8, 0x0000, 0x0000, 0x02f9, 0x02fa, 0x02fb, + 0x02fc, 0x02fd, 0x02fe, 0x02ff, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1d1a0 .. 0x1d1af */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0300, 0x0301, 0x0302, 0x0303, 0x0000, 0x0000, + /* 0x1d240 .. 0x1d24f */ + 0x0000, 0x0000, 0x0304, 0x0305, 0x0306, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1e000 .. 0x1e00f */ + 0x0307, 0x0308, 0x0309, 0x030a, 0x030b, 0x030c, 0x030d, 0x0000, + 0x030e, 0x030f, 0x0310, 0x0311, 0x0312, 0x0313, 0x0314, 0x0315, + /* 0x1e010 .. 0x1e01f */ + 0x0316, 0x0317, 0x0318, 0x0319, 0x031a, 0x031b, 0x031c, 0x031d, + 0x031e, 0x0000, 0x0000, 0x031f, 0x0320, 0x0321, 0x0322, 0x0323, + /* 0x1e020 .. 0x1e02f */ + 0x0324, 0x0325, 0x0000, 0x0326, 0x0327, 0x0000, 0x0328, 0x0329, + 0x032a, 0x032b, 0x032c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1e8d0 .. 0x1e8df */ + 0x032d, 0x032e, 0x032f, 0x0330, 0x0331, 0x0332, 0x0333, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1e940 .. 0x1e94f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0334, 0x0335, 0x0336, 0x0337, + 0x0338, 0x0339, 0x033a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +const WCHAR data_fullcomp[1121] = +{ + 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001 +}; + +const BYTE idx1_fullcomp[763] = +{ + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x07, 0x08, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0b, 0x0c, 0x0d, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0x10, 0x11 +}; + +const USHORT idx2_fullcomp[288] = +{ + /* all-zero 256-char blocks get mapped to here */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x01 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0002, + 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x02 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0005, 0x0000, 0x0000, + /* sub-index 0x03 */ + 0x0000, 0x0000, 0x0000, 0x0006, 0x0000, 0x0007, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x04 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x05 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x000a, 0x000b, 0x000c, + 0x000d, 0x000e, 0x000f, 0x0010, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x06 */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0011, + 0x0000, 0x0000, 0x0000, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, + /* sub-index 0x07 */ + 0x0017, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x08 */ + 0x0000, 0x0000, 0x0018, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x09 */ + 0x0000, 0x0000, 0x0019, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x0a */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001a, 0x0000, 0x0000, + /* sub-index 0x0b */ + 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, 0x0020, 0x0021, 0x0022, + 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, + /* sub-index 0x0c */ + 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, + 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0000, 0x0000, + /* sub-index 0x0d */ + 0x0000, 0x0039, 0x003a, 0x003b, 0x003c, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* sub-index 0x0e */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x003d, 0x003e, 0x0000, + 0x0000, 0x0000, 0x0000, 0x003f, 0x0040, 0x0000, 0x0000, 0x0000, + /* sub-index 0x0f */ + 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, + 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, + /* sub-index 0x10 */ + 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, + 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 0x0060, + /* sub-index 0x11 */ + 0x0061, 0x0062, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +const USHORT offsets_fullcomp[1584] = +{ + /* all-zero 16-char blocks get mapped to here */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0340 .. 0x034f */ + 0x0001, 0x0002, 0x0000, 0x0003, 0x0004, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0370 .. 0x037f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0000, + /* 0x0380 .. 0x038f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0950 .. 0x095f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x09d0 .. 0x09df */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0011, 0x0000, 0x0012, + /* 0x0a30 .. 0x0a3f */ + 0x0000, 0x0000, 0x0000, 0x0013, 0x0000, 0x0000, 0x0014, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0a50 .. 0x0a5f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0015, 0x0016, 0x0017, 0x0000, 0x0000, 0x0018, 0x0000, + /* 0x0b50 .. 0x0b5f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0019, 0x001a, 0x0000, 0x0000, + /* 0x0f40 .. 0x0f4f */ + 0x0000, 0x0000, 0x0000, 0x001b, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001c, 0x0000, 0x0000, + /* 0x0f50 .. 0x0f5f */ + 0x0000, 0x0000, 0x001d, 0x0000, 0x0000, 0x0000, 0x0000, 0x001e, + 0x0000, 0x0000, 0x0000, 0x0000, 0x001f, 0x0000, 0x0000, 0x0000, + /* 0x0f60 .. 0x0f6f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0f70 .. 0x0f7f */ + 0x0000, 0x0000, 0x0000, 0x0021, 0x0000, 0x0022, 0x0023, 0x0000, + 0x0024, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0f80 .. 0x0f8f */ + 0x0000, 0x0025, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x0f90 .. 0x0f9f */ + 0x0000, 0x0000, 0x0000, 0x0026, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0027, 0x0000, 0x0000, + /* 0x0fa0 .. 0x0faf */ + 0x0000, 0x0000, 0x0028, 0x0000, 0x0000, 0x0000, 0x0000, 0x0029, + 0x0000, 0x0000, 0x0000, 0x0000, 0x002a, 0x0000, 0x0000, 0x0000, + /* 0x0fb0 .. 0x0fbf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x002b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1f70 .. 0x1f7f */ + 0x0000, 0x002c, 0x0000, 0x002d, 0x0000, 0x002e, 0x0000, 0x002f, + 0x0000, 0x0030, 0x0000, 0x0031, 0x0000, 0x0032, 0x0000, 0x0000, + /* 0x1fb0 .. 0x1fbf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0033, 0x0000, 0x0000, 0x0034, 0x0000, + /* 0x1fc0 .. 0x1fcf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0035, 0x0000, 0x0036, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1fd0 .. 0x1fdf */ + 0x0000, 0x0000, 0x0000, 0x0037, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0038, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1fe0 .. 0x1fef */ + 0x0000, 0x0000, 0x0000, 0x0039, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x003a, 0x0000, 0x0000, 0x003b, 0x003c, + /* 0x1ff0 .. 0x1fff */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x003d, 0x0000, 0x003e, 0x0000, 0x003f, 0x0000, 0x0000, + /* 0x2000 .. 0x200f */ + 0x0040, 0x0041, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x2120 .. 0x212f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0042, 0x0000, + 0x0000, 0x0000, 0x0043, 0x0044, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x2320 .. 0x232f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0045, 0x0046, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x2ad0 .. 0x2adf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0047, 0x0000, 0x0000, 0x0000, + /* 0xf900 .. 0xf90f */ + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + /* 0xf910 .. 0xf91f */ + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + /* 0xf920 .. 0xf92f */ + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + /* 0xf930 .. 0xf93f */ + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + /* 0xf940 .. 0xf94f */ + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + /* 0xf950 .. 0xf95f */ + 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, + 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + /* 0xf960 .. 0xf96f */ + 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + /* 0xf970 .. 0xf97f */ + 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, + 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, + /* 0xf980 .. 0xf98f */ + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, + /* 0xf990 .. 0xf99f */ + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + /* 0xf9a0 .. 0xf9af */ + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, + /* 0xf9b0 .. 0xf9bf */ + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff, + 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, 0x0107, + /* 0xf9c0 .. 0xf9cf */ + 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e, 0x010f, + 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116, 0x0117, + /* 0xf9d0 .. 0xf9df */ + 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e, 0x011f, + 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126, 0x0127, + /* 0xf9e0 .. 0xf9ef */ + 0x0128, 0x0129, 0x012a, 0x012b, 0x012c, 0x012d, 0x012e, 0x012f, + 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136, 0x0137, + /* 0xf9f0 .. 0xf9ff */ + 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e, 0x013f, + 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0146, 0x0147, + /* 0xfa00 .. 0xfa0f */ + 0x0148, 0x0149, 0x014a, 0x014b, 0x014c, 0x014d, 0x014e, 0x014f, + 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155, 0x0000, 0x0000, + /* 0xfa10 .. 0xfa1f */ + 0x0156, 0x0000, 0x0157, 0x0000, 0x0000, 0x0158, 0x0159, 0x015a, + 0x015b, 0x015c, 0x015d, 0x015e, 0x015f, 0x0160, 0x0161, 0x0000, + /* 0xfa20 .. 0xfa2f */ + 0x0162, 0x0000, 0x0163, 0x0000, 0x0000, 0x0164, 0x0165, 0x0000, + 0x0000, 0x0000, 0x0166, 0x0167, 0x0168, 0x0169, 0x016a, 0x016b, + /* 0xfa30 .. 0xfa3f */ + 0x016c, 0x016d, 0x016e, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, + 0x0174, 0x0175, 0x0176, 0x0177, 0x0178, 0x0179, 0x017a, 0x017b, + /* 0xfa40 .. 0xfa4f */ + 0x017c, 0x017d, 0x017e, 0x017f, 0x0180, 0x0181, 0x0182, 0x0183, + 0x0184, 0x0185, 0x0186, 0x0187, 0x0188, 0x0189, 0x018a, 0x018b, + /* 0xfa50 .. 0xfa5f */ + 0x018c, 0x018d, 0x018e, 0x018f, 0x0190, 0x0191, 0x0192, 0x0193, + 0x0194, 0x0195, 0x0196, 0x0197, 0x0198, 0x0199, 0x019a, 0x019b, + /* 0xfa60 .. 0xfa6f */ + 0x019c, 0x019d, 0x019e, 0x019f, 0x01a0, 0x01a1, 0x01a2, 0x01a3, + 0x01a4, 0x01a5, 0x01a6, 0x01a7, 0x01a8, 0x01a9, 0x0000, 0x0000, + /* 0xfa70 .. 0xfa7f */ + 0x01aa, 0x01ab, 0x01ac, 0x01ad, 0x01ae, 0x01af, 0x01b0, 0x01b1, + 0x01b2, 0x01b3, 0x01b4, 0x01b5, 0x01b6, 0x01b7, 0x01b8, 0x01b9, + /* 0xfa80 .. 0xfa8f */ + 0x01ba, 0x01bb, 0x01bc, 0x01bd, 0x01be, 0x01bf, 0x01c0, 0x01c1, + 0x01c2, 0x01c3, 0x01c4, 0x01c5, 0x01c6, 0x01c7, 0x01c8, 0x01c9, + /* 0xfa90 .. 0xfa9f */ + 0x01ca, 0x01cb, 0x01cc, 0x01cd, 0x01ce, 0x01cf, 0x01d0, 0x01d1, + 0x01d2, 0x01d3, 0x01d4, 0x01d5, 0x01d6, 0x01d7, 0x01d8, 0x01d9, + /* 0xfaa0 .. 0xfaaf */ + 0x01da, 0x01db, 0x01dc, 0x01dd, 0x01de, 0x01df, 0x01e0, 0x01e1, + 0x01e2, 0x01e3, 0x01e4, 0x01e5, 0x01e6, 0x01e7, 0x01e8, 0x01e9, + /* 0xfab0 .. 0xfabf */ + 0x01ea, 0x01eb, 0x01ec, 0x01ed, 0x01ee, 0x01ef, 0x01f0, 0x01f1, + 0x01f2, 0x01f3, 0x01f4, 0x01f5, 0x01f6, 0x01f7, 0x01f8, 0x01f9, + /* 0xfac0 .. 0xfacf */ + 0x01fa, 0x01fb, 0x01fc, 0x01fd, 0x01fe, 0x01ff, 0x0200, 0x0201, + 0x0202, 0x0203, 0x0204, 0x0205, 0x0206, 0x0207, 0x0208, 0x0209, + /* 0xfad0 .. 0xfadf */ + 0x020a, 0x020b, 0x020c, 0x020d, 0x020e, 0x020f, 0x0210, 0x0211, + 0x0212, 0x0213, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xfb10 .. 0xfb1f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0214, 0x0000, 0x0215, + /* 0xfb20 .. 0xfb2f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0216, 0x0217, 0x0218, 0x0219, 0x021a, 0x021b, + /* 0xfb30 .. 0xfb3f */ + 0x021c, 0x021d, 0x021e, 0x021f, 0x0220, 0x0221, 0x0222, 0x0000, + 0x0223, 0x0224, 0x0225, 0x0226, 0x0227, 0x0000, 0x0228, 0x0000, + /* 0xfb40 .. 0xfb4f */ + 0x0229, 0x022a, 0x0000, 0x022b, 0x022c, 0x0000, 0x022d, 0x022e, + 0x022f, 0x0230, 0x0231, 0x0232, 0x0233, 0x0234, 0x0235, 0x0000, + /* 0x1d150 .. 0x1d15f */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0236, 0x0237, + /* 0x1d160 .. 0x1d16f */ + 0x0238, 0x0239, 0x023a, 0x023b, 0x023c, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x1d1b0 .. 0x1d1bf */ + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x023d, 0x023e, 0x023f, 0x0240, 0x0241, + /* 0x1d1c0 .. 0x1d1cf */ + 0x0242, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x2f800 .. 0x2f80f */ + 0x0243, 0x0244, 0x0245, 0x0246, 0x0247, 0x0248, 0x0249, 0x024a, + 0x024b, 0x024c, 0x024d, 0x024e, 0x024f, 0x0250, 0x0251, 0x0252, + /* 0x2f810 .. 0x2f81f */ + 0x0253, 0x0254, 0x0255, 0x0256, 0x0257, 0x0258, 0x0259, 0x025a, + 0x025b, 0x025c, 0x025d, 0x025e, 0x025f, 0x0260, 0x0261, 0x0262, + /* 0x2f820 .. 0x2f82f */ + 0x0263, 0x0264, 0x0265, 0x0266, 0x0267, 0x0268, 0x0269, 0x026a, + 0x026b, 0x026c, 0x026d, 0x026e, 0x026f, 0x0270, 0x0271, 0x0272, + /* 0x2f830 .. 0x2f83f */ + 0x0273, 0x0274, 0x0275, 0x0276, 0x0277, 0x0278, 0x0279, 0x027a, + 0x027b, 0x027c, 0x027d, 0x027e, 0x027f, 0x0280, 0x0281, 0x0282, + /* 0x2f840 .. 0x2f84f */ + 0x0283, 0x0284, 0x0285, 0x0286, 0x0287, 0x0288, 0x0289, 0x028a, + 0x028b, 0x028c, 0x028d, 0x028e, 0x028f, 0x0290, 0x0291, 0x0292, + /* 0x2f850 .. 0x2f85f */ + 0x0293, 0x0294, 0x0295, 0x0296, 0x0297, 0x0298, 0x0299, 0x029a, + 0x029b, 0x029c, 0x029d, 0x029e, 0x029f, 0x02a0, 0x02a1, 0x02a2, + /* 0x2f860 .. 0x2f86f */ + 0x02a3, 0x02a4, 0x02a5, 0x02a6, 0x02a7, 0x02a8, 0x02a9, 0x02aa, + 0x02ab, 0x02ac, 0x02ad, 0x02ae, 0x02af, 0x02b0, 0x02b1, 0x02b2, + /* 0x2f870 .. 0x2f87f */ + 0x02b3, 0x02b4, 0x02b5, 0x02b6, 0x02b7, 0x02b8, 0x02b9, 0x02ba, + 0x02bb, 0x02bc, 0x02bd, 0x02be, 0x02bf, 0x02c0, 0x02c1, 0x02c2, + /* 0x2f880 .. 0x2f88f */ + 0x02c3, 0x02c4, 0x02c5, 0x02c6, 0x02c7, 0x02c8, 0x02c9, 0x02ca, + 0x02cb, 0x02cc, 0x02cd, 0x02ce, 0x02cf, 0x02d0, 0x02d1, 0x02d2, + /* 0x2f890 .. 0x2f89f */ + 0x02d3, 0x02d4, 0x02d5, 0x02d6, 0x02d7, 0x02d8, 0x02d9, 0x02da, + 0x02db, 0x02dc, 0x02dd, 0x02de, 0x02df, 0x02e0, 0x02e1, 0x02e2, + /* 0x2f8a0 .. 0x2f8af */ + 0x02e3, 0x02e4, 0x02e5, 0x02e6, 0x02e7, 0x02e8, 0x02e9, 0x02ea, + 0x02eb, 0x02ec, 0x02ed, 0x02ee, 0x02ef, 0x02f0, 0x02f1, 0x02f2, + /* 0x2f8b0 .. 0x2f8bf */ + 0x02f3, 0x02f4, 0x02f5, 0x02f6, 0x02f7, 0x02f8, 0x02f9, 0x02fa, + 0x02fb, 0x02fc, 0x02fd, 0x02fe, 0x02ff, 0x0300, 0x0301, 0x0302, + /* 0x2f8c0 .. 0x2f8cf */ + 0x0303, 0x0304, 0x0305, 0x0306, 0x0307, 0x0308, 0x0309, 0x030a, + 0x030b, 0x030c, 0x030d, 0x030e, 0x030f, 0x0310, 0x0311, 0x0312, + /* 0x2f8d0 .. 0x2f8df */ + 0x0313, 0x0314, 0x0315, 0x0316, 0x0317, 0x0318, 0x0319, 0x031a, + 0x031b, 0x031c, 0x031d, 0x031e, 0x031f, 0x0320, 0x0321, 0x0322, + /* 0x2f8e0 .. 0x2f8ef */ + 0x0323, 0x0324, 0x0325, 0x0326, 0x0327, 0x0328, 0x0329, 0x032a, + 0x032b, 0x032c, 0x032d, 0x032e, 0x032f, 0x0330, 0x0331, 0x0332, + /* 0x2f8f0 .. 0x2f8ff */ + 0x0333, 0x0334, 0x0335, 0x0336, 0x0337, 0x0338, 0x0339, 0x033a, + 0x033b, 0x033c, 0x033d, 0x033e, 0x033f, 0x0340, 0x0341, 0x0342, + /* 0x2f900 .. 0x2f90f */ + 0x0343, 0x0344, 0x0345, 0x0346, 0x0347, 0x0348, 0x0349, 0x034a, + 0x034b, 0x034c, 0x034d, 0x034e, 0x034f, 0x0350, 0x0351, 0x0352, + /* 0x2f910 .. 0x2f91f */ + 0x0353, 0x0354, 0x0355, 0x0356, 0x0357, 0x0358, 0x0359, 0x035a, + 0x035b, 0x035c, 0x035d, 0x035e, 0x035f, 0x0360, 0x0361, 0x0362, + /* 0x2f920 .. 0x2f92f */ + 0x0363, 0x0364, 0x0365, 0x0366, 0x0367, 0x0368, 0x0369, 0x036a, + 0x036b, 0x036c, 0x036d, 0x036e, 0x036f, 0x0370, 0x0371, 0x0372, + /* 0x2f930 .. 0x2f93f */ + 0x0373, 0x0374, 0x0375, 0x0376, 0x0377, 0x0378, 0x0379, 0x037a, + 0x037b, 0x037c, 0x037d, 0x037e, 0x037f, 0x0380, 0x0381, 0x0382, + /* 0x2f940 .. 0x2f94f */ + 0x0383, 0x0384, 0x0385, 0x0386, 0x0387, 0x0388, 0x0389, 0x038a, + 0x038b, 0x038c, 0x038d, 0x038e, 0x038f, 0x0390, 0x0391, 0x0392, + /* 0x2f950 .. 0x2f95f */ + 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, + 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a2, + /* 0x2f960 .. 0x2f96f */ + 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03aa, + 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03b0, 0x03b1, 0x03b2, + /* 0x2f970 .. 0x2f97f */ + 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, + 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c2, + /* 0x2f980 .. 0x2f98f */ + 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x03ca, + 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x03cf, 0x03d0, 0x03d1, 0x03d2, + /* 0x2f990 .. 0x2f99f */ + 0x03d3, 0x03d4, 0x03d5, 0x03d6, 0x03d7, 0x03d8, 0x03d9, 0x03da, + 0x03db, 0x03dc, 0x03dd, 0x03de, 0x03df, 0x03e0, 0x03e1, 0x03e2, + /* 0x2f9a0 .. 0x2f9af */ + 0x03e3, 0x03e4, 0x03e5, 0x03e6, 0x03e7, 0x03e8, 0x03e9, 0x03ea, + 0x03eb, 0x03ec, 0x03ed, 0x03ee, 0x03ef, 0x03f0, 0x03f1, 0x03f2, + /* 0x2f9b0 .. 0x2f9bf */ + 0x03f3, 0x03f4, 0x03f5, 0x03f6, 0x03f7, 0x03f8, 0x03f9, 0x03fa, + 0x03fb, 0x03fc, 0x03fd, 0x03fe, 0x03ff, 0x0400, 0x0401, 0x0402, + /* 0x2f9c0 .. 0x2f9cf */ + 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, 0x040a, + 0x040b, 0x040c, 0x040d, 0x040e, 0x040f, 0x0410, 0x0411, 0x0412, + /* 0x2f9d0 .. 0x2f9df */ + 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, + 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, 0x0420, 0x0421, 0x0422, + /* 0x2f9e0 .. 0x2f9ef */ + 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, + 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0x0430, 0x0431, 0x0432, + /* 0x2f9f0 .. 0x2f9ff */ + 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, + 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, + /* 0x2fa00 .. 0x2fa0f */ + 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, + 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, 0x0450, 0x0451, 0x0452, + /* 0x2fa10 .. 0x2fa1f */ + 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, 0x0459, 0x045a, + 0x045b, 0x045c, 0x045d, 0x045e, 0x045f, 0x0460, 0x0000, 0x0000 +}; + static const WCHAR *unicode_table_lookup( UINT cp, int compat, const BYTE *idx1, UINT scale_idx1, const USHORT *idx2, UINT scale_idx2, const USHORT *offsets, UINT scale_off, const WCHAR *data, UINT scale_data ) @@ -4032,6 +5460,20 @@ static inline int decompose_hangul( WCHAR ch, WCHAR dum[4], int dstlen ) return 0; }
+static inline int reorderable_pair( WCHAR ch1, WCHAR ch2 ) +{ + const WCHAR *cc1, *cc2; + + if (ch1 == 0 || ch2 == 0) return 0; + + cc1 = unicode_table_lookup( ch1, 0, idx1_comb, 8, idx2_comb, 4, + offsets_comb, 4, data_comb, 0 ); + cc2 = unicode_table_lookup( ch2, 0, idx1_comb, 8, idx2_comb, 4, + offsets_comb, 4, data_comb, 0 ); + if (*cc2 < *cc1) return 1; + else return 0; +} + static inline UINT utf16_codepoint_to_surrogates( UINT cp ) { UINT ch = cp; @@ -4161,3 +5603,37 @@ unsigned int wine_unicode_decompose_string( int compat, const WCHAR *src, int sr
return dstpos; } + +int is_starter( WCHAR ch ) +{ + const WCHAR *map = unicode_table_lookup( ch, 0, idx1_comb, 8, idx2_comb, 4, + offsets_comb, 4, data_comb, 0 ); + return (*map == 0) ? 1 : 0; +} + +void unicode_canon_order( WCHAR *str, int strlen ) +{ + int i, j, m, sublen = 0, tot_sublen = 0; + WCHAR *substr = str; + + for (m = 1; m < strlen; m++) + { + if (m == strlen || is_starter(str[m])) sublen = m - tot_sublen; + else continue; + + for (i = 0; i < sublen; i++) + { + for (j = i+1; j < sublen; j++) + { + if (reorderable_pair( substr[i], substr[j] )) + { + WCHAR swp = substr[i]; + substr[i] = substr[j]; + substr[j] = swp; + } + } + } + tot_sublen += m; + substr = str+m; + } +} diff --git a/tools/make_unicode b/tools/make_unicode index 34938f9786..321b7854f2 100755 --- a/tools/make_unicode +++ b/tools/make_unicode @@ -359,6 +359,8 @@ my @joining_table = (); my @direction_table = (); my @decomp_table = (); my @compose_table = (); +my @comb_class_table = (); +my @full_comp_table = (); my $default_char; my $default_wchar;
@@ -469,6 +471,11 @@ sub READ_DEFAULTS($) } }
+ if ($comb != 0) + { + $comb_class_table[$src] = (hex $comb); + } + next if $decomp eq ""; # no decomposition, skip it
# store decomposition table @@ -561,6 +568,25 @@ sub READ_DEFAULTS($) my $flag = $ctype{$cat}; foreach my $i (@{$special_categories{$cat}}) { $category_table[$i] |= $flag; } } + + my $UNICODE_DERIVED = open_data_file( $UNIDATA, "DerivedNormalizationProps.txt" ); + while (<$UNICODE_DERIVED>) + { + next unless (/^([0-9a-fA-F.]+)\s+;\s+Full_Composition_Exclusion/); + my ($first, $last) = split /../,$1; + $first = hex $first; + if (defined $last) + { + $last = hex $last; + while ($last gt $first) + { + $full_comp_table[$last] = 1; + $last--; + } + } + $full_comp_table[$first] = 1; + } + close $UNICODE_DERIVED; }
@@ -2249,6 +2275,8 @@ sub dump_compose_table($) } print OUTPUT "\n};\n\n"; print OUTPUT <<"EOF"; +#include "decompose.c" + static inline int binary_search( WCHAR ch, int low, int high ) { while (low <= high) @@ -2272,6 +2300,64 @@ WCHAR DECLSPEC_HIDDEN wine_compose( const WCHAR *str ) count = table[2 * pos + 3]; } } + +static inline int is_blocked(WCHAR *ptr1, WCHAR *ptr2) +{ + if (ptr1 >= ptr2) return -1; + + while (++ptr1 < ptr2) + { + const WCHAR *map1, *map2; + map1 = unicode_table_lookup( *ptr1, 0, idx1_comb, 8, idx2_comb, 4, + offsets_comb, 4, data_comb, 0 ); + map2 = unicode_table_lookup( *ptr2, 0, idx1_comb, 8, idx2_comb, 4, + offsets_comb, 4, data_comb, 0 ); + if (*map1 == 0 || *map2 <= *map1) return 1; + } + return 0; +} + +static inline int is_fullexcl(WCHAR ch) +{ + const WCHAR *map; + map = unicode_table_lookup( ch, 0, idx1_fullcomp, 8, idx2_fullcomp, 4, + offsets_fullcomp, 4, data_fullcomp, 0 ); + return (int)*map; +} + +UINT unicode_canonical_composition( WCHAR *str, UINT strlen ) +{ + int i, j; + WCHAR dum[3] = {0}; + + if (strlen == 0) strlen = strlenW( str ); + + for (i = 1; i <= strlen; i++) + { + WCHAR *scratch = str+i, comp; + if (*scratch == 0) break; + for (scratch = str+i; scratch - str > 0; --scratch) + { + if (is_starter(*scratch)) break; + } + if (!is_starter(*scratch)) continue; + if (is_blocked( scratch, str+i )) continue; + dum[0] = *scratch; + dum[1] = str[i]; + comp = wine_compose( dum ); + if (comp == 0) continue; + if (is_fullexcl( comp )) continue; + *scratch = comp; // replace + for (j = i; j < strlen-1; j++) + { + str[j] = str[j+1]; + } + strlen--; + i--; + } + + return strlen; +} EOF close OUTPUT; save_file($filename); @@ -2339,13 +2425,21 @@ sub dump_decompose_table($) my %nfd_lookup = (); my %nfkd_lookup = (); my %decomp_lookup = (); + my %comb_lookup = (); + my %fullcomp_lookup = (); my @decomp_data = (0); + my @comb_data = (0); + my @full_comp_data = (0); my $pos = 1; + my $pos_comb = 1; + my $pos_fullcomp = 1; my $lastchar_decomp; + my $lastchar_comb; + my $lastchar_fullcomp;
for (my $i = 0; $i < $utflim; $i++) { - next unless defined $decomp_table[$i]; + next unless defined $decomp_table[$i] || defined $comb_class_table[$i] || defined $full_comp_table[$i];
if (defined $decomp_table[$i]) { @@ -2400,6 +2494,20 @@ sub dump_decompose_table($) $pos += @nfkd; } } + if (defined $comb_class_table[$i]) + { + push @comb_data, $comb_class_table[$i]; + $lastchar_comb = $i; + $comb_lookup{$i} = $pos_comb; + $pos_comb++; + } + if (defined $full_comp_table[$i]) + { + push @full_comp_data, $full_comp_table[$i]; + $lastchar_fullcomp = $i; + $fullcomp_lookup{$i} = $pos_fullcomp; + $pos_fullcomp++; + } }
printf OUTPUT "static const UINT last_decomposable = 0x%x;\n\n", $lastchar_decomp; @@ -2491,6 +2599,154 @@ sub dump_decompose_table($) } print OUTPUT "\n};\n\n";
+ # now for Compatibility Class + + printf OUTPUT "static const WCHAR data_comb[%d] =\n", $pos_comb; + print OUTPUT "{\n"; + printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @comb_data ); + print OUTPUT "\n};\n\n"; + + my $comb_pos = 1; + my $comb_lim = ($lastchar_comb >> 8) + 1; + my @comb_filled = (0) x $comb_lim; + for (my $i = 0; $i < $utflim; $i++) + { + last if $i > $lastchar_comb; + next unless defined $comb_class_table[$i]; + $comb_filled[$i >> 8] = $comb_pos++; + $i |= 255; + } + printf OUTPUT "static const BYTE idx1_comb[%d] =\n", $comb_lim; + print OUTPUT "{\n"; + printf OUTPUT "%s", DUMP_ARRAY( "0x%02x", 0, @comb_filled ); + print OUTPUT "\n};\n\n"; + + my $sub_comb_filled_pos = 1; + my %sub_comb_filled = (); + for (my $i = 0; $i < $comb_lim; $i++) + { + next unless $comb_filled[$i]; + for (my $j = 0; $j < 256; $j++) + { + my $idx = ($i << 8) | $j; + next unless defined $comb_class_table[$idx]; + $sub_comb_filled{$idx >> 4} = $sub_comb_filled_pos++; + $j |= 15; + } + } + + printf OUTPUT "static const USHORT idx2_comb[%d] =\n", $comb_pos * 16; + print OUTPUT "{\n"; + @null_idx = (0) x 16; + print OUTPUT " /* all-zero 256-char blocks get mapped to here */\n"; + printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @null_idx ); + for (my $i = 0; $i < $comb_lim; $i++) + { + next unless $comb_filled[$i]; + printf OUTPUT ",\n /* sub-index 0x%02x */\n", $comb_filled[$i]; + + my @sub_idx; + for (my $j = 0; $j < 16; $j++) + { + my $idx = ($i << 4) | $j; + $sub_idx[$j] = $sub_comb_filled{$idx} || 0; + } + printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @sub_idx ); + } + print OUTPUT "\n};\n\n"; + + printf OUTPUT "static const USHORT offsets_comb[%d] =\n", 16 * $sub_comb_filled_pos; + print OUTPUT "{\n"; + @null_table = (0) x 16; + print OUTPUT " /* all-zero 16-char blocks get mapped to here */\n"; + printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @null_table ); + for my $key (sort {$a <=> $b} keys %sub_comb_filled) + { + printf OUTPUT ",\n /* 0x%03x0 .. 0x%03xf */\n", $key, $key; + my @sub_table; + for (my $j = 0; $j < 16; $j++) + { + my $idx = ($key << 4) | $j; + $sub_table[$j] = $comb_lookup{$idx} || 0; + } + printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @sub_table ); + } + print OUTPUT "\n};\n\n"; + + # now for Full Composition Exclusion + + printf OUTPUT "const WCHAR data_fullcomp[%d] =\n", $pos_fullcomp; + print OUTPUT "{\n"; + printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @full_comp_data ); + print OUTPUT "\n};\n\n"; + + my $fullcomp_pos = 1; + my $fullcomp_lim = ($lastchar_fullcomp >> 8) + 1; + my @fullcomp_filled = (0) x $fullcomp_lim; + for (my $i = 0; $i < $utflim; $i++) + { + last if $i > $lastchar_fullcomp; + next unless defined $full_comp_table[$i]; + $fullcomp_filled[$i >> 8] = $fullcomp_pos++; + $i |= 255; + } + printf OUTPUT "const BYTE idx1_fullcomp[%d] =\n", $fullcomp_lim; + print OUTPUT "{\n"; + printf OUTPUT "%s", DUMP_ARRAY( "0x%02x", 0, @fullcomp_filled ); + print OUTPUT "\n};\n\n"; + + my $sub_fullcomp_filled_pos = 1; + my %sub_fullcomp_filled = (); + for (my $i = 0; $i < $fullcomp_lim; $i++) + { + next unless $fullcomp_filled[$i]; + for (my $j = 0; $j < 256; $j++) + { + my $idx = ($i << 8) | $j; + next unless defined $full_comp_table[$idx]; + $sub_fullcomp_filled{$idx >> 4} = $sub_fullcomp_filled_pos++; + $j |= 15; + } + } + + printf OUTPUT "const USHORT idx2_fullcomp[%d] =\n", $fullcomp_pos * 16; + print OUTPUT "{\n"; + @null_idx = (0) x 16; + print OUTPUT " /* all-zero 256-char blocks get mapped to here */\n"; + printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @null_idx ); + for (my $i = 0; $i < $fullcomp_lim; $i++) + { + next unless $fullcomp_filled[$i]; + printf OUTPUT ",\n /* sub-index 0x%02x */\n", $fullcomp_filled[$i]; + + my @sub_idx; + for (my $j = 0; $j < 16; $j++) + { + my $idx = ($i << 4) | $j; + $sub_idx[$j] = $sub_fullcomp_filled{$idx} || 0; + } + printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @sub_idx ); + } + print OUTPUT "\n};\n\n"; + + printf OUTPUT "const USHORT offsets_fullcomp[%d] =\n", 16 * $sub_fullcomp_filled_pos; + print OUTPUT "{\n"; + @null_table = (0) x 16; + print OUTPUT " /* all-zero 16-char blocks get mapped to here */\n"; + printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @null_table ); + for my $key (sort {$a <=> $b} keys %sub_fullcomp_filled) + { + printf OUTPUT ",\n /* 0x%03x0 .. 0x%03xf */\n", $key, $key; + my @sub_table; + for (my $j = 0; $j < 16; $j++) + { + my $idx = ($key << 4) | $j; + $sub_table[$j] = $fullcomp_lookup{$idx} || 0; + } + printf OUTPUT "%s", DUMP_ARRAY( "0x%04x", 0, @sub_table ); + } + print OUTPUT "\n};\n\n"; + print OUTPUT <<"EOF"; static const WCHAR *unicode_table_lookup( UINT cp, int compat, const BYTE *idx1, UINT scale_idx1, const USHORT *idx2, UINT scale_idx2, const USHORT *offsets, @@ -2530,6 +2786,20 @@ static inline int decompose_hangul( WCHAR ch, WCHAR dum[4], int dstlen ) return 0; }
+static inline int reorderable_pair( WCHAR ch1, WCHAR ch2 ) +{ + const WCHAR *cc1, *cc2; + + if (ch1 == 0 || ch2 == 0) return 0; + + cc1 = unicode_table_lookup( ch1, 0, idx1_comb, 8, idx2_comb, 4, + offsets_comb, 4, data_comb, 0 ); + cc2 = unicode_table_lookup( ch2, 0, idx1_comb, 8, idx2_comb, 4, + offsets_comb, 4, data_comb, 0 ); + if (*cc2 < *cc1) return 1; + else return 0; +} + static inline UINT utf16_codepoint_to_surrogates( UINT cp ) { UINT ch = cp; @@ -2659,6 +2929,40 @@ unsigned int wine_unicode_decompose_string( int compat, const WCHAR *src, int sr
return dstpos; } + +int is_starter( WCHAR ch ) +{ + const WCHAR *map = unicode_table_lookup( ch, 0, idx1_comb, 8, idx2_comb, 4, + offsets_comb, 4, data_comb, 0 ); + return (*map == 0) ? 1 : 0; +} + +void unicode_canon_order( WCHAR *str, int strlen ) +{ + int i, j, m, sublen = 0, tot_sublen = 0; + WCHAR *substr = str; + + for (m = 1; m < strlen; m++) + { + if (m == strlen || is_starter(str[m])) sublen = m - tot_sublen; + else continue; + + for (i = 0; i < sublen; i++) + { + for (j = i+1; j < sublen; j++) + { + if (reorderable_pair( substr[i], substr[j] )) + { + WCHAR swp = substr[i]; + substr[i] = substr[j]; + substr[j] = swp; + } + } + } + tot_sublen += m; + substr = str+m; + } +} EOF close OUTPUT; save_file($filename);