Send various state changes to LOK
[LibreOffice.git] / sal / textenc / tcvtscn6.tab
blob3bcdd45f4dc0ed005c1cd27f6c05ac57283b5d4e
1 /*
2  * This file is part of the LibreOffice project.
3  *
4  * This Source Code Form is subject to the terms of the Mozilla Public
5  * License, v. 2.0. If a copy of the MPL was not distributed with this
6  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7  *
8  * This file incorporates work covered by the following license notice:
9  *
10  *   Licensed to the Apache Software Foundation (ASF) under one or more
11  *   contributor license agreements. See the NOTICE file distributed
12  *   with this work for additional information regarding copyright
13  *   ownership. The ASF licenses this file to you under the Apache
14  *   License, Version 2.0 (the "License"); you may not use this file
15  *   except in compliance with the License. You may obtain a copy of
16  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
17  */
19 #include <sal/config.h>
21 #include "tenchelp.hxx"
23 /* ======================================================================= */
25 /* This file contain the information tables for all */
26 /* chinese simplified (China) charsets: */
27 /* GB2312, GBK, MS936, APPLE_CHINSIMP */
29 /* GBK is MS-CP 936 and a superset of GB-2312-80. In GB-2312-80 the range */
30 /* is 0xA1-0xFE for the leading byte and 0xA1-0xFE for the trailing byte. */
31 /* In GBK the range is from 0x81-0xFE for the leading byte and 0x40-0xFE */
32 /* for the trailing byte. */
34 /* ======================================================================= */
36 #define GBKOFF      0x61
38 /* ======================================================================= */
40 static ImplDBCSToUniLeadTab const aGB2312UniLeadTab[256] =
42     { 0x0000,    0,    0, nullptr },                               /* 0x00 */
43     { 0x0001,    0,    0, nullptr },                               /* 0x01 */
44     { 0x0002,    0,    0, nullptr },                               /* 0x02 */
45     { 0x0003,    0,    0, nullptr },                               /* 0x03 */
46     { 0x0004,    0,    0, nullptr },                               /* 0x04 */
47     { 0x0005,    0,    0, nullptr },                               /* 0x05 */
48     { 0x0006,    0,    0, nullptr },                               /* 0x06 */
49     { 0x0007,    0,    0, nullptr },                               /* 0x07 */
50     { 0x0008,    0,    0, nullptr },                               /* 0x08 */
51     { 0x0009,    0,    0, nullptr },                               /* 0x09 */
52     { 0x000A,    0,    0, nullptr },                               /* 0x0A */
53     { 0x000B,    0,    0, nullptr },                               /* 0x0B */
54     { 0x000C,    0,    0, nullptr },                               /* 0x0C */
55     { 0x000D,    0,    0, nullptr },                               /* 0x0D */
56     { 0x000E,    0,    0, nullptr },                               /* 0x0E */
57     { 0x000F,    0,    0, nullptr },                               /* 0x0F */
58     { 0x0010,    0,    0, nullptr },                               /* 0x10 */
59     { 0x0011,    0,    0, nullptr },                               /* 0x11 */
60     { 0x0012,    0,    0, nullptr },                               /* 0x12 */
61     { 0x0013,    0,    0, nullptr },                               /* 0x13 */
62     { 0x0014,    0,    0, nullptr },                               /* 0x14 */
63     { 0x0015,    0,    0, nullptr },                               /* 0x15 */
64     { 0x0016,    0,    0, nullptr },                               /* 0x16 */
65     { 0x0017,    0,    0, nullptr },                               /* 0x17 */
66     { 0x0018,    0,    0, nullptr },                               /* 0x18 */
67     { 0x0019,    0,    0, nullptr },                               /* 0x19 */
68     { 0x001A,    0,    0, nullptr },                               /* 0x1A */
69     { 0x001B,    0,    0, nullptr },                               /* 0x1B */
70     { 0x001C,    0,    0, nullptr },                               /* 0x1C */
71     { 0x001D,    0,    0, nullptr },                               /* 0x1D */
72     { 0x001E,    0,    0, nullptr },                               /* 0x1E */
73     { 0x001F,    0,    0, nullptr },                               /* 0x1F */
74     { 0x0020,    0,    0, nullptr },                               /* 0x20 */
75     { 0x0021,    0,    0, nullptr },                               /* 0x21 */
76     { 0x0022,    0,    0, nullptr },                               /* 0x22 */
77     { 0x0023,    0,    0, nullptr },                               /* 0x23 */
78     { 0x0024,    0,    0, nullptr },                               /* 0x24 */
79     { 0x0025,    0,    0, nullptr },                               /* 0x25 */
80     { 0x0026,    0,    0, nullptr },                               /* 0x26 */
81     { 0x0027,    0,    0, nullptr },                               /* 0x27 */
82     { 0x0028,    0,    0, nullptr },                               /* 0x28 */
83     { 0x0029,    0,    0, nullptr },                               /* 0x29 */
84     { 0x002A,    0,    0, nullptr },                               /* 0x2A */
85     { 0x002B,    0,    0, nullptr },                               /* 0x2B */
86     { 0x002C,    0,    0, nullptr },                               /* 0x2C */
87     { 0x002D,    0,    0, nullptr },                               /* 0x2D */
88     { 0x002E,    0,    0, nullptr },                               /* 0x2E */
89     { 0x002F,    0,    0, nullptr },                               /* 0x2F */
90     { 0x0030,    0,    0, nullptr },                               /* 0x30 */
91     { 0x0031,    0,    0, nullptr },                               /* 0x31 */
92     { 0x0032,    0,    0, nullptr },                               /* 0x32 */
93     { 0x0033,    0,    0, nullptr },                               /* 0x33 */
94     { 0x0034,    0,    0, nullptr },                               /* 0x34 */
95     { 0x0035,    0,    0, nullptr },                               /* 0x35 */
96     { 0x0036,    0,    0, nullptr },                               /* 0x36 */
97     { 0x0037,    0,    0, nullptr },                               /* 0x37 */
98     { 0x0038,    0,    0, nullptr },                               /* 0x38 */
99     { 0x0039,    0,    0, nullptr },                               /* 0x39 */
100     { 0x003A,    0,    0, nullptr },                               /* 0x3A */
101     { 0x003B,    0,    0, nullptr },                               /* 0x3B */
102     { 0x003C,    0,    0, nullptr },                               /* 0x3C */
103     { 0x003D,    0,    0, nullptr },                               /* 0x3D */
104     { 0x003E,    0,    0, nullptr },                               /* 0x3E */
105     { 0x003F,    0,    0, nullptr },                               /* 0x3F */
106     { 0x0040,    0,    0, nullptr },                               /* 0x40 */
107     { 0x0041,    0,    0, nullptr },                               /* 0x41 */
108     { 0x0042,    0,    0, nullptr },                               /* 0x42 */
109     { 0x0043,    0,    0, nullptr },                               /* 0x43 */
110     { 0x0044,    0,    0, nullptr },                               /* 0x44 */
111     { 0x0045,    0,    0, nullptr },                               /* 0x45 */
112     { 0x0046,    0,    0, nullptr },                               /* 0x46 */
113     { 0x0047,    0,    0, nullptr },                               /* 0x47 */
114     { 0x0048,    0,    0, nullptr },                               /* 0x48 */
115     { 0x0049,    0,    0, nullptr },                               /* 0x49 */
116     { 0x004A,    0,    0, nullptr },                               /* 0x4A */
117     { 0x004B,    0,    0, nullptr },                               /* 0x4B */
118     { 0x004C,    0,    0, nullptr },                               /* 0x4C */
119     { 0x004D,    0,    0, nullptr },                               /* 0x4D */
120     { 0x004E,    0,    0, nullptr },                               /* 0x4E */
121     { 0x004F,    0,    0, nullptr },                               /* 0x4F */
122     { 0x0050,    0,    0, nullptr },                               /* 0x50 */
123     { 0x0051,    0,    0, nullptr },                               /* 0x51 */
124     { 0x0052,    0,    0, nullptr },                               /* 0x52 */
125     { 0x0053,    0,    0, nullptr },                               /* 0x53 */
126     { 0x0054,    0,    0, nullptr },                               /* 0x54 */
127     { 0x0055,    0,    0, nullptr },                               /* 0x55 */
128     { 0x0056,    0,    0, nullptr },                               /* 0x56 */
129     { 0x0057,    0,    0, nullptr },                               /* 0x57 */
130     { 0x0058,    0,    0, nullptr },                               /* 0x58 */
131     { 0x0059,    0,    0, nullptr },                               /* 0x59 */
132     { 0x005A,    0,    0, nullptr },                               /* 0x5A */
133     { 0x005B,    0,    0, nullptr },                               /* 0x5B */
134     { 0x005C,    0,    0, nullptr },                               /* 0x5C */
135     { 0x005D,    0,    0, nullptr },                               /* 0x5D */
136     { 0x005E,    0,    0, nullptr },                               /* 0x5E */
137     { 0x005F,    0,    0, nullptr },                               /* 0x5F */
138     { 0x0060,    0,    0, nullptr },                               /* 0x60 */
139     { 0x0061,    0,    0, nullptr },                               /* 0x61 */
140     { 0x0062,    0,    0, nullptr },                               /* 0x62 */
141     { 0x0063,    0,    0, nullptr },                               /* 0x63 */
142     { 0x0064,    0,    0, nullptr },                               /* 0x64 */
143     { 0x0065,    0,    0, nullptr },                               /* 0x65 */
144     { 0x0066,    0,    0, nullptr },                               /* 0x66 */
145     { 0x0067,    0,    0, nullptr },                               /* 0x67 */
146     { 0x0068,    0,    0, nullptr },                               /* 0x68 */
147     { 0x0069,    0,    0, nullptr },                               /* 0x69 */
148     { 0x006A,    0,    0, nullptr },                               /* 0x6A */
149     { 0x006B,    0,    0, nullptr },                               /* 0x6B */
150     { 0x006C,    0,    0, nullptr },                               /* 0x6C */
151     { 0x006D,    0,    0, nullptr },                               /* 0x6D */
152     { 0x006E,    0,    0, nullptr },                               /* 0x6E */
153     { 0x006F,    0,    0, nullptr },                               /* 0x6F */
154     { 0x0070,    0,    0, nullptr },                               /* 0x70 */
155     { 0x0071,    0,    0, nullptr },                               /* 0x71 */
156     { 0x0072,    0,    0, nullptr },                               /* 0x72 */
157     { 0x0073,    0,    0, nullptr },                               /* 0x73 */
158     { 0x0074,    0,    0, nullptr },                               /* 0x74 */
159     { 0x0075,    0,    0, nullptr },                               /* 0x75 */
160     { 0x0076,    0,    0, nullptr },                               /* 0x76 */
161     { 0x0077,    0,    0, nullptr },                               /* 0x77 */
162     { 0x0078,    0,    0, nullptr },                               /* 0x78 */
163     { 0x0079,    0,    0, nullptr },                               /* 0x79 */
164     { 0x007A,    0,    0, nullptr },                               /* 0x7A */
165     { 0x007B,    0,    0, nullptr },                               /* 0x7B */
166     { 0x007C,    0,    0, nullptr },                               /* 0x7C */
167     { 0x007D,    0,    0, nullptr },                               /* 0x7D */
168     { 0x007E,    0,    0, nullptr },                               /* 0x7E */
169     { 0x007F,    0,    0, nullptr },                               /* 0x7F */
170     { 0x20AC,    0,    0, nullptr },                               /* 0x80 */
171     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x81 */ /* We convert this as double byte */
172     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x82 */ /* We convert this as double byte */
173     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x83 */ /* We convert this as double byte */
174     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x84 */ /* We convert this as double byte */
175     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x85 */ /* We convert this as double byte */
176     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x86 */ /* We convert this as double byte */
177     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x87 */ /* We convert this as double byte */
178     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x88 */ /* We convert this as double byte */
179     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x89 */ /* We convert this as double byte */
180     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x8A */ /* We convert this as double byte */
181     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x8B */ /* We convert this as double byte */
182     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x8C */ /* We convert this as double byte */
183     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x8D */ /* We convert this as double byte */
184     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x8E */ /* We convert this as double byte */
185     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x8F */ /* We convert this as double byte */
186     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x90 */ /* We convert this as double byte */
187     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x91 */ /* We convert this as double byte */
188     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x92 */ /* We convert this as double byte */
189     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x93 */ /* We convert this as double byte */
190     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x94 */ /* We convert this as double byte */
191     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x95 */ /* We convert this as double byte */
192     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x96 */ /* We convert this as double byte */
193     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x97 */ /* We convert this as double byte */
194     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x98 */ /* We convert this as double byte */
195     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x99 */ /* We convert this as double byte */
196     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x9A */ /* We convert this as double byte */
197     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x9B */ /* We convert this as double byte */
198     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x9C */ /* We convert this as double byte */
199     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x9D */ /* We convert this as double byte */
200     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x9E */ /* We convert this as double byte */
201     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x9F */ /* We convert this as double byte */
202     {      0,    1,    0, nullptr },                               /* 0xA0 */
203     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A1 },            /* 0xA1 */
204     {      0, 0xA1, 0xFC, aImplDBCSToUniTab_GB_A2 },            /* 0xA2 */
205     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A3 },            /* 0xA3 */
206     {      0, 0xA1, 0xF3, aImplDBCSToUniTab_GB_A4 },            /* 0xA4 */
207     {      0, 0xA1, 0xF6, aImplDBCSToUniTab_GB_A5 },            /* 0xA5 */
208     {      0, 0xA1, 0xF5, aImplDBCSToUniTab_GB_A6 },            /* 0xA6 */
209     {      0, 0xA1, 0xF1, aImplDBCSToUniTab_GB_A7 },            /* 0xA7 */
210     {      0, 0xA1, 0xE9, aImplDBCSToUniTab_GBK_A8+GBKOFF },    /* 0xA8 */
211     {      0, 0xA1, 0xEF, aImplDBCSToUniTab_GBK_A9+GBKOFF },    /* 0xA9 */
212     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xAA */ /* We convert this as double byte */
213     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xAB */ /* We convert this as double byte */
214     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xAC */ /* We convert this as double byte */
215     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xAD */ /* We convert this as double byte */
216     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xAE */ /* We convert this as double byte */
217     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xAF */ /* We convert this as double byte */
218     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B0+GBKOFF },    /* 0xB0 */
219     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B1+GBKOFF },    /* 0xB1 */
220     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B2+GBKOFF },    /* 0xB2 */
221     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B3+GBKOFF },    /* 0xB3 */
222     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B4+GBKOFF },    /* 0xB4 */
223     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B5+GBKOFF },    /* 0xB5 */
224     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B6+GBKOFF },    /* 0xB6 */
225     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B7+GBKOFF },    /* 0xB7 */
226     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B8+GBKOFF },    /* 0xB8 */
227     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B9+GBKOFF },    /* 0xB9 */
228     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BA+GBKOFF },    /* 0xBA */
229     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BB+GBKOFF },    /* 0xBB */
230     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BC+GBKOFF },    /* 0xBC */
231     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BD+GBKOFF },    /* 0xBD */
232     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BE+GBKOFF },    /* 0xBE */
233     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BF+GBKOFF },    /* 0xBF */
234     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C0+GBKOFF },    /* 0xC0 */
235     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C1+GBKOFF },    /* 0xC1 */
236     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C2+GBKOFF },    /* 0xC2 */
237     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C3+GBKOFF },    /* 0xC3 */
238     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C4+GBKOFF },    /* 0xC4 */
239     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C5+GBKOFF },    /* 0xC5 */
240     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C6+GBKOFF },    /* 0xC6 */
241     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C7+GBKOFF },    /* 0xC7 */
242     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C8+GBKOFF },    /* 0xC8 */
243     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C9+GBKOFF },    /* 0xC9 */
244     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CA+GBKOFF },    /* 0xCA */
245     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CB+GBKOFF },    /* 0xCB */
246     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CC+GBKOFF },    /* 0xCC */
247     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CD+GBKOFF },    /* 0xCD */
248     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CE+GBKOFF },    /* 0xCE */
249     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CF+GBKOFF },    /* 0xCF */
250     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D0+GBKOFF },    /* 0xD0 */
251     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D1+GBKOFF },    /* 0xD1 */
252     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D2+GBKOFF },    /* 0xD2 */
253     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D3+GBKOFF },    /* 0xD3 */
254     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D4+GBKOFF },    /* 0xD4 */
255     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D5+GBKOFF },    /* 0xD5 */
256     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D6+GBKOFF },    /* 0xD6 */
257     {      0, 0xA1, 0xF9, aImplDBCSToUniTab_GBK_D7+GBKOFF },    /* 0xD7 */
258     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D8+GBKOFF },    /* 0xD8 */
259     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D9+GBKOFF },    /* 0xD9 */
260     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DA+GBKOFF },    /* 0xDA */
261     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DB+GBKOFF },    /* 0xDB */
262     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DC+GBKOFF },    /* 0xDC */
263     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DD+GBKOFF },    /* 0xDD */
264     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DE+GBKOFF },    /* 0xDE */
265     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DF+GBKOFF },    /* 0xDF */
266     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E0+GBKOFF },    /* 0xE0 */
267     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E1+GBKOFF },    /* 0xE1 */
268     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E2+GBKOFF },    /* 0xE2 */
269     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E3+GBKOFF },    /* 0xE3 */
270     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E4+GBKOFF },    /* 0xE4 */
271     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E5+GBKOFF },    /* 0xE5 */
272     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E6+GBKOFF },    /* 0xE6 */
273     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E7+GBKOFF },    /* 0xE7 */
274     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E8+GBKOFF },    /* 0xE8 */
275     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E9+GBKOFF },    /* 0xE9 */
276     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EA+GBKOFF },    /* 0xEA */
277     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EB+GBKOFF },    /* 0xEB */
278     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EC+GBKOFF },    /* 0xEC */
279     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_ED+GBKOFF },    /* 0xED */
280     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EE+GBKOFF },    /* 0xEE */
281     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EF+GBKOFF },    /* 0xEF */
282     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F0+GBKOFF },    /* 0xF0 */
283     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F1+GBKOFF },    /* 0xF1 */
284     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F2+GBKOFF },    /* 0xF2 */
285     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F3+GBKOFF },    /* 0xF3 */
286     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F4+GBKOFF },    /* 0xF4 */
287     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F5+GBKOFF },    /* 0xF5 */
288     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F6+GBKOFF },    /* 0xF6 */
289     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F7+GBKOFF },    /* 0xF7 */
290     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF8 */ /* We convert this as double byte */
291     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF9 */ /* We convert this as double byte */
292     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xFA */ /* We convert this as double byte */
293     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xFB */ /* We convert this as double byte */
294     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xFC */ /* We convert this as double byte */
295     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xFD */ /* We convert this as double byte */
296     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xFE */ /* We convert this as double byte */
297     {      0,    1,    0, nullptr }                                /* 0xFF */
300 /* ----------------------------------------------------------------------- */
302 static ImplUniToDBCSHighTab const aGB2312DBCSHighTab[256] =
304     { 0x00, 0xFC, aImplUniToDBCSTab_GB_00 },                    /* 0x00 */
305     { 0x01, 0xDC, aImplUniToDBCSTab_GB_01 },                    /* 0x01 */
306     { 0x51, 0xC9, aImplUniToDBCSTab_GB_02 },                    /* 0x02 */
307     { 0x91, 0xC9, aImplUniToDBCSTab_GB_03 },                    /* 0x03 */
308     { 0x01, 0x51, aImplUniToDBCSTab_GB_04 },                    /* 0x04 */
309     {    1,    0, nullptr },                                       /* 0x05 */
310     {    1,    0, nullptr },                                       /* 0x06 */
311     {    1,    0, nullptr },                                       /* 0x07 */
312     {    1,    0, nullptr },                                       /* 0x08 */
313     {    1,    0, nullptr },                                       /* 0x09 */
314     {    1,    0, nullptr },                                       /* 0x0A */
315     {    1,    0, nullptr },                                       /* 0x0B */
316     {    1,    0, nullptr },                                       /* 0x0C */
317     {    1,    0, nullptr },                                       /* 0x0D */
318     {    1,    0, nullptr },                                       /* 0x0E */
319     {    1,    0, nullptr },                                       /* 0x0F */
320     {    1,    0, nullptr },                                       /* 0x10 */
321     {    1,    0, nullptr },                                       /* 0x11 */
322     {    1,    0, nullptr },                                       /* 0x12 */
323     {    1,    0, nullptr },                                       /* 0x13 */
324     {    1,    0, nullptr },                                       /* 0x14 */
325     {    1,    0, nullptr },                                       /* 0x15 */
326     {    1,    0, nullptr },                                       /* 0x16 */
327     {    1,    0, nullptr },                                       /* 0x17 */
328     {    1,    0, nullptr },                                       /* 0x18 */
329     {    1,    0, nullptr },                                       /* 0x19 */
330     {    1,    0, nullptr },                                       /* 0x1A */
331     {    1,    0, nullptr },                                       /* 0x1B */
332     {    1,    0, nullptr },                                       /* 0x1C */
333     {    1,    0, nullptr },                                       /* 0x1D */
334     { 0x3F, 0x3F, aImplUniToDBCSTab_APPLECHINSIMP_1E },         /* 0x1E */ /* we convert this char also to unicode */
335     {    1,    0, nullptr },                                       /* 0x1F */
336     { 0x14, 0xAC, aImplUniToDBCSTab_GB_20 },                    /* 0x20 */
337     { 0x03, 0x93, aImplUniToDBCSTab_GB_21 },                    /* 0x21 */
338     { 0x08, 0xEF, aImplUniToDBCSTab_GB_22 },                    /* 0x22 */
339     { 0x12, 0x12, aImplUniToDBCSTab_GB_23 },                    /* 0x23 */
340     { 0x60, 0x9B, aImplUniToDBCSTab_GB_24 },                    /* 0x24 */
341     { 0x00, 0xCF, aImplUniToDBCSTab_GB_25 },                    /* 0x25 */
342     { 0x05, 0x42, aImplUniToDBCSTab_GB_26 },                    /* 0x26 */
343     {    1,    0, nullptr },                                       /* 0x27 */
344     {    1,    0, nullptr },                                       /* 0x28 */
345     {    1,    0, nullptr },                                       /* 0x29 */
346     {    1,    0, nullptr },                                       /* 0x2A */
347     {    1,    0, nullptr },                                       /* 0x2B */
348     {    1,    0, nullptr },                                       /* 0x2C */
349     {    1,    0, nullptr },                                       /* 0x2D */
350     {    1,    0, nullptr },                                       /* 0x2E */
351     {    1,    0, nullptr },                                       /* 0x2F */
352     { 0x00, 0xFB, aImplUniToDBCSTab_GB_30 },                    /* 0x30 */
353     { 0x05, 0x29, aImplUniToDBCSTab_GB_31 },                    /* 0x31 */
354     { 0x20, 0x29, aImplUniToDBCSTab_GBK_32 },                   /* 0x32 */
355     {    1,    0, nullptr },                                       /* 0x33 */
356     {    1,    0, nullptr },                                       /* 0x34 */
357     {    1,    0, nullptr },                                       /* 0x35 */
358     {    1,    0, nullptr },                                       /* 0x36 */
359     {    1,    0, nullptr },                                       /* 0x37 */
360     {    1,    0, nullptr },                                       /* 0x38 */
361     {    1,    0, nullptr },                                       /* 0x39 */
362     {    1,    0, nullptr },                                       /* 0x3A */
363     {    1,    0, nullptr },                                       /* 0x3B */
364     {    1,    0, nullptr },                                       /* 0x3C */
365     {    1,    0, nullptr },                                       /* 0x3D */
366     {    1,    0, nullptr },                                       /* 0x3E */
367     {    1,    0, nullptr },                                       /* 0x3F */
368     {    1,    0, nullptr },                                       /* 0x40 */
369     {    1,    0, nullptr },                                       /* 0x41 */
370     {    1,    0, nullptr },                                       /* 0x42 */
371     {    1,    0, nullptr },                                       /* 0x43 */
372     {    1,    0, nullptr },                                       /* 0x44 */
373     {    1,    0, nullptr },                                       /* 0x45 */
374     {    1,    0, nullptr },                                       /* 0x46 */
375     {    1,    0, nullptr },                                       /* 0x47 */
376     {    1,    0, nullptr },                                       /* 0x48 */
377     {    1,    0, nullptr },                                       /* 0x49 */
378     {    1,    0, nullptr },                                       /* 0x4A */
379     {    1,    0, nullptr },                                       /* 0x4B */
380     {    1,    0, nullptr },                                       /* 0x4C */
381     {    1,    0, nullptr },                                       /* 0x4D */
382     { 0x00, 0xFF, aImplUniToDBCSTab_GB_4E },                    /* 0x4E */
383     { 0x01, 0xFE, aImplUniToDBCSTab_GB_4F },                    /* 0x4F */
384     { 0x0C, 0xFB, aImplUniToDBCSTab_GB_50 },                    /* 0x50 */
385     { 0x06, 0xFF, aImplUniToDBCSTab_GB_51 },                    /* 0x51 */
386     { 0x00, 0xFF, aImplUniToDBCSTab_GB_52 },                    /* 0x52 */
387     { 0x00, 0xFD, aImplUniToDBCSTab_GB_53 },                    /* 0x53 */
388     { 0x01, 0xFF, aImplUniToDBCSTab_GB_54 },                    /* 0x54 */
389     { 0x01, 0xFE, aImplUniToDBCSTab_GB_55 },                    /* 0x55 */
390     { 0x00, 0xFF, aImplUniToDBCSTab_GB_56 },                    /* 0x56 */
391     { 0x03, 0xFD, aImplUniToDBCSTab_GB_57 },                    /* 0x57 */
392     { 0x00, 0xF9, aImplUniToDBCSTab_GB_58 },                    /* 0x58 */
393     { 0x02, 0xFF, aImplUniToDBCSTab_GB_59 },                    /* 0x59 */
394     { 0x01, 0xF1, aImplUniToDBCSTab_GB_5A },                    /* 0x5A */
395     { 0x09, 0xFF, aImplUniToDBCSTab_GB_5B },                    /* 0x5B */
396     { 0x01, 0xFB, aImplUniToDBCSTab_GB_5C },                    /* 0x5C */
397     { 0x02, 0xFE, aImplUniToDBCSTab_GB_5D },                    /* 0x5D */
398     { 0x01, 0xFF, aImplUniToDBCSTab_GB_5E },                    /* 0x5E */
399     { 0x00, 0xFF, aImplUniToDBCSTab_GB_5F },                    /* 0x5F */
400     { 0x00, 0xFA, aImplUniToDBCSTab_GB_60 },                    /* 0x60 */
401     { 0x00, 0xFF, aImplUniToDBCSTab_GB_61 },                    /* 0x61 */
402     { 0x06, 0xFF, aImplUniToDBCSTab_GB_62 },                    /* 0x62 */
403     { 0x01, 0xFF, aImplUniToDBCSTab_GB_63 },                    /* 0x63 */
404     { 0x00, 0xE6, aImplUniToDBCSTab_GB_64 },                    /* 0x64 */
405     { 0x00, 0xFA, aImplUniToDBCSTab_GB_65 },                    /* 0x65 */
406     { 0x00, 0xFF, aImplUniToDBCSTab_GB_66 },                    /* 0x66 */
407     { 0x00, 0xFF, aImplUniToDBCSTab_GB_67 },                    /* 0x67 */
408     { 0x00, 0xFC, aImplUniToDBCSTab_GB_68 },                    /* 0x68 */
409     { 0x01, 0xFF, aImplUniToDBCSTab_GB_69 },                    /* 0x69 */
410     { 0x0A, 0xAC, aImplUniToDBCSTab_GB_6A },                    /* 0x6A */
411     { 0x20, 0xFD, aImplUniToDBCSTab_GB_6B },                    /* 0x6B */
412     { 0x05, 0xFE, aImplUniToDBCSTab_GB_6C },                    /* 0x6C */
413     { 0x01, 0xFC, aImplUniToDBCSTab_GB_6D },                    /* 0x6D */
414     { 0x05, 0xF9, aImplUniToDBCSTab_GB_6E },                    /* 0x6E */
415     { 0x02, 0xEF, aImplUniToDBCSTab_GB_6F },                    /* 0x6F */
416     { 0x11, 0xFD, aImplUniToDBCSTab_GB_70 },                    /* 0x70 */
417     { 0x09, 0xF9, aImplUniToDBCSTab_GB_71 },                    /* 0x71 */
418     { 0x06, 0xFC, aImplUniToDBCSTab_GB_72 },                    /* 0x72 */
419     { 0x01, 0xF2, aImplUniToDBCSTab_GB_73 },                    /* 0x73 */
420     { 0x03, 0xFF, aImplUniToDBCSTab_GB_74 },                    /* 0x74 */
421     { 0x04, 0xFF, aImplUniToDBCSTab_GB_75 },                    /* 0x75 */
422     { 0x00, 0xFE, aImplUniToDBCSTab_GB_76 },                    /* 0x76 */
423     { 0x01, 0xFF, aImplUniToDBCSTab_GB_77 },                    /* 0x77 */
424     { 0x00, 0xFA, aImplUniToDBCSTab_GB_78 },                    /* 0x78 */
425     { 0x01, 0xFD, aImplUniToDBCSTab_GB_79 },                    /* 0x79 */
426     { 0x00, 0xFF, aImplUniToDBCSTab_GB_7A },                    /* 0x7A */
427     { 0x03, 0xFE, aImplUniToDBCSTab_GB_7B },                    /* 0x7B */
428     { 0x07, 0xFB, aImplUniToDBCSTab_GB_7C },                    /* 0x7C */
429     { 0x0A, 0xAE, aImplUniToDBCSTab_GB_7D },                    /* 0x7D */
430     { 0x3B, 0xFF, aImplUniToDBCSTab_GB_7E },                    /* 0x7E */
431     { 0x00, 0xFC, aImplUniToDBCSTab_GB_7F },                    /* 0x7F */
432     { 0x00, 0xFD, aImplUniToDBCSTab_GB_80 },                    /* 0x80 */
433     { 0x02, 0xFE, aImplUniToDBCSTab_GB_81 },                    /* 0x81 */
434     { 0x00, 0xFB, aImplUniToDBCSTab_GB_82 },                    /* 0x82 */
435     { 0x01, 0xFD, aImplUniToDBCSTab_GB_83 },                    /* 0x83 */
436     { 0x01, 0xFF, aImplUniToDBCSTab_GB_84 },                    /* 0x84 */
437     { 0x0C, 0xFF, aImplUniToDBCSTab_GB_85 },                    /* 0x85 */
438     { 0x05, 0xFE, aImplUniToDBCSTab_GB_86 },                    /* 0x86 */
439     { 0x00, 0xFE, aImplUniToDBCSTab_GB_87 },                    /* 0x87 */
440     { 0x03, 0xFE, aImplUniToDBCSTab_GB_88 },                    /* 0x88 */
441     { 0x02, 0xF3, aImplUniToDBCSTab_GB_89 },                    /* 0x89 */
442     { 0x00, 0x93, aImplUniToDBCSTab_GB_8A },                    /* 0x8A */
443     { 0x07, 0xFF, aImplUniToDBCSTab_GB_8B },                    /* 0x8B */
444     { 0x00, 0x98, aImplUniToDBCSTab_GB_8C },                    /* 0x8C */
445     { 0x1D, 0xFD, aImplUniToDBCSTab_GB_8D },                    /* 0x8D */
446     { 0x05, 0xCE, aImplUniToDBCSTab_GB_8E },                    /* 0x8E */
447     { 0x66, 0xFD, aImplUniToDBCSTab_GB_8F },                    /* 0x8F */
448     { 0x00, 0xFE, aImplUniToDBCSTab_GB_90 },                    /* 0x90 */
449     { 0x02, 0xDC, aImplUniToDBCSTab_GB_91 },                    /* 0x91 */
450     { 0x74, 0xC8, aImplUniToDBCSTab_GB_92 },                    /* 0x92 */
451     { 0x3E, 0xD6, aImplUniToDBCSTab_GB_93 },                    /* 0x93 */
452     { 0x3E, 0xFF, aImplUniToDBCSTab_GB_94 },                    /* 0x94 */
453     { 0x00, 0xFE, aImplUniToDBCSTab_GB_95 },                    /* 0x95 */
454     { 0x00, 0xFE, aImplUniToDBCSTab_GB_96 },                    /* 0x96 */
455     { 0x00, 0xF6, aImplUniToDBCSTab_GB_97 },                    /* 0x97 */
456     { 0x75, 0xE9, aImplUniToDBCSTab_GB_98 },                    /* 0x98 */
457     { 0x0D, 0xA8, aImplUniToDBCSTab_GB_99 },                    /* 0x99 */
458     { 0x6C, 0xFB, aImplUniToDBCSTab_GB_9A },                    /* 0x9A */
459     { 0x03, 0x54, aImplUniToDBCSTab_GB_9B },                    /* 0x9B */
460     { 0x7C, 0xE2, aImplUniToDBCSTab_GB_9C },                    /* 0x9C */
461     {    1,    0, nullptr },                                       /* 0x9D */
462     { 0x1F, 0xFE, aImplUniToDBCSTab_GB_9E },                    /* 0x9E */
463     { 0x0B, 0xA0, aImplUniToDBCSTab_GB_9F },                    /* 0x9F */
464     {    1,    0, nullptr },                                       /* 0xA0 */
465     {    1,    0, nullptr },                                       /* 0xA1 */
466     {    1,    0, nullptr },                                       /* 0xA2 */
467     {    1,    0, nullptr },                                       /* 0xA3 */
468     {    1,    0, nullptr },                                       /* 0xA4 */
469     {    1,    0, nullptr },                                       /* 0xA5 */
470     {    1,    0, nullptr },                                       /* 0xA6 */
471     {    1,    0, nullptr },                                       /* 0xA7 */
472     {    1,    0, nullptr },                                       /* 0xA8 */
473     {    1,    0, nullptr },                                       /* 0xA9 */
474     {    1,    0, nullptr },                                       /* 0xAA */
475     {    1,    0, nullptr },                                       /* 0xAB */
476     {    1,    0, nullptr },                                       /* 0xAC */
477     {    1,    0, nullptr },                                       /* 0xAD */
478     {    1,    0, nullptr },                                       /* 0xAE */
479     {    1,    0, nullptr },                                       /* 0xAF */
480     {    1,    0, nullptr },                                       /* 0xB0 */
481     {    1,    0, nullptr },                                       /* 0xB1 */
482     {    1,    0, nullptr },                                       /* 0xB2 */
483     {    1,    0, nullptr },                                       /* 0xB3 */
484     {    1,    0, nullptr },                                       /* 0xB4 */
485     {    1,    0, nullptr },                                       /* 0xB5 */
486     {    1,    0, nullptr },                                       /* 0xB6 */
487     {    1,    0, nullptr },                                       /* 0xB7 */
488     {    1,    0, nullptr },                                       /* 0xB8 */
489     {    1,    0, nullptr },                                       /* 0xB9 */
490     {    1,    0, nullptr },                                       /* 0xBA */
491     {    1,    0, nullptr },                                       /* 0xBB */
492     {    1,    0, nullptr },                                       /* 0xBC */
493     {    1,    0, nullptr },                                       /* 0xBD */
494     {    1,    0, nullptr },                                       /* 0xBE */
495     {    1,    0, nullptr },                                       /* 0xBF */
496     {    1,    0, nullptr },                                       /* 0xC0 */
497     {    1,    0, nullptr },                                       /* 0xC1 */
498     {    1,    0, nullptr },                                       /* 0xC2 */
499     {    1,    0, nullptr },                                       /* 0xC3 */
500     {    1,    0, nullptr },                                       /* 0xC4 */
501     {    1,    0, nullptr },                                       /* 0xC5 */
502     {    1,    0, nullptr },                                       /* 0xC6 */
503     {    1,    0, nullptr },                                       /* 0xC7 */
504     {    1,    0, nullptr },                                       /* 0xC8 */
505     {    1,    0, nullptr },                                       /* 0xC9 */
506     {    1,    0, nullptr },                                       /* 0xCA */
507     {    1,    0, nullptr },                                       /* 0xCB */
508     {    1,    0, nullptr },                                       /* 0xCC */
509     {    1,    0, nullptr },                                       /* 0xCD */
510     {    1,    0, nullptr },                                       /* 0xCE */
511     {    1,    0, nullptr },                                       /* 0xCF */
512     {    1,    0, nullptr },                                       /* 0xD0 */
513     {    1,    0, nullptr },                                       /* 0xD1 */
514     {    1,    0, nullptr },                                       /* 0xD2 */
515     {    1,    0, nullptr },                                       /* 0xD3 */
516     {    1,    0, nullptr },                                       /* 0xD4 */
517     {    1,    0, nullptr },                                       /* 0xD5 */
518     {    1,    0, nullptr },                                       /* 0xD6 */
519     {    1,    0, nullptr },                                       /* 0xD7 */
520     {    1,    0, nullptr },                                       /* 0xD8 */
521     {    1,    0, nullptr },                                       /* 0xD9 */
522     {    1,    0, nullptr },                                       /* 0xDA */
523     {    1,    0, nullptr },                                       /* 0xDB */
524     {    1,    0, nullptr },                                       /* 0xDC */
525     {    1,    0, nullptr },                                       /* 0xDD */
526     {    1,    0, nullptr },                                       /* 0xDE */
527     {    1,    0, nullptr },                                       /* 0xDF */
528     {    1,    0, nullptr },                                       /* 0xE0 */
529     {    1,    0, nullptr },                                       /* 0xE1 */
530     {    1,    0, nullptr },                                       /* 0xE2 */
531     {    1,    0, nullptr },                                       /* 0xE3 */
532     {    1,    0, nullptr },                                       /* 0xE4 */
533     {    1,    0, nullptr },                                       /* 0xE5 */
534     {    1,    0, nullptr },                                       /* 0xE6 */
535     {    1,    0, nullptr },                                       /* 0xE7 */
536     {    1,    0, nullptr },                                       /* 0xE8 */
537     {    1,    0, nullptr },                                       /* 0xE9 */
538     {    1,    0, nullptr },                                       /* 0xEA */
539     {    1,    0, nullptr },                                       /* 0xEB */
540     {    1,    0, nullptr },                                       /* 0xEC */
541     {    1,    0, nullptr },                                       /* 0xED */
542     {    1,    0, nullptr },                                       /* 0xEE */
543     {    1,    0, nullptr },                                       /* 0xEF */
544     {    1,    0, nullptr },                                       /* 0xF0 */
545     {    1,    0, nullptr },                                       /* 0xF1 */
546     {    1,    0, nullptr },                                       /* 0xF2 */
547     {    1,    0, nullptr },                                       /* 0xF3 */
548     {    1,    0, nullptr },                                       /* 0xF4 */
549     {    1,    0, nullptr },                                       /* 0xF5 */
550     {    1,    0, nullptr },                                       /* 0xF6 */
551     {    1,    0, nullptr },                                       /* 0xF7 */
552     {    1,    0, nullptr },                                       /* 0xF8 */
553     {    1,    0, nullptr },                                       /* 0xF9 */
554     {    1,    0, nullptr },                                       /* 0xFA */
555     {    1,    0, nullptr },                                       /* 0xFB */
556     {    1,    0, nullptr },                                       /* 0xFC */
557     {    1,    0, nullptr },                                       /* 0xFD */
558     { 0x31, 0x44, aImplUniToDBCSTab_GB_FE },                    /* 0xFE */
559     { 0x01, 0xE5, aImplUniToDBCSTab_GB_FF }                     /* 0xFF */
562 /* ----------------------------------------------------------------------- */
564 /* F8A1-FEFE    --> E000-E29F */
565 /* AAA1-AFFE    --> E2A0-E4DF */
567 #define DBCS_EUDC_MS936_COUNT       2
568 static ImplDBCSEUDCData const aImplMS936DBCSEUDCTab[DBCS_EUDC_MS936_COUNT] =
570     /* EUDC-Range (the mapping defined by MS is A0-FF, because the */
571     /* unicode range is E000-E29F and E2A0-E4DF) */
572     /* Lead:    F8-FE */
573     /* Trail:   A1-FE */
574     { 0xF8, 0xFE, 0xA0, 0xFF, 0, 0, 0, 0, 1, 0x60, 0xE000, 0xE29F },
575     /* Lead:    AA-AF */
576     /* Trail:   A1-FE */
577     { 0xAA, 0xAF, 0xA0, 0xFF, 0, 0, 0, 0, 1, 0x60, 0xE2A0, 0xE4DF }
580 /* ----------------------------------------------------------------------- */
582 static ImplDBCSConvertData const aImplGB2312DBCSCvtData =
584     aGB2312UniLeadTab,
585     aGB2312DBCSHighTab,
586     0x00, 0xFF,
587     0xA1, 0xFE,
588     aImplMS936DBCSEUDCTab,
589     DBCS_EUDC_MS936_COUNT
592 /* ----------------------------------------------------------------------- */
594 static ImplTextEncodingData const aImplGB2312TextEncodingData
595     = { { &aImplGB2312DBCSCvtData,
596           ImplDBCSToUnicode,
597           ImplUnicodeToDBCS,
598           nullptr,
599           nullptr,
600           nullptr,
601           nullptr,
602           nullptr,
603           nullptr },
604         1,
605         2,
606         2,
607         134,
608         "euc-cn",
609         "gb2312",
610         RTL_TEXTENCODING_INFO_ASCII
611             | RTL_TEXTENCODING_INFO_MULTIBYTE
612             | RTL_TEXTENCODING_INFO_MIME };
613     /* SCRIPT_CHINESE_SIMPLIFIED, pc code page 936, mac encoding 25 */
615 /* ======================================================================= */
617 static ImplTextEncodingData const aImplEUCCNTextEncodingData
618     = { { &aImplGB2312DBCSCvtData,
619           ImplDBCSToUnicode,
620           ImplUnicodeToDBCS,
621           nullptr,
622           nullptr,
623           nullptr,
624           nullptr,
625           nullptr,
626           nullptr },
627         1,
628         2,
629         2,
630         134,
631         "euc-cn",
632         "gb2312",
633         RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MULTIBYTE };
634     /* SCRIPT_CHINESE_SIMPLIFIED, pc code page 936, mac encoding 25 */
636 /* ======================================================================= */
638 static ImplDBCSToUniLeadTab const aGBT12345UniLeadTab[256] =
640     { 0x0000,    0,    0, nullptr },                               /* 0x00 */
641     { 0x0001,    0,    0, nullptr },                               /* 0x01 */
642     { 0x0002,    0,    0, nullptr },                               /* 0x02 */
643     { 0x0003,    0,    0, nullptr },                               /* 0x03 */
644     { 0x0004,    0,    0, nullptr },                               /* 0x04 */
645     { 0x0005,    0,    0, nullptr },                               /* 0x05 */
646     { 0x0006,    0,    0, nullptr },                               /* 0x06 */
647     { 0x0007,    0,    0, nullptr },                               /* 0x07 */
648     { 0x0008,    0,    0, nullptr },                               /* 0x08 */
649     { 0x0009,    0,    0, nullptr },                               /* 0x09 */
650     { 0x000A,    0,    0, nullptr },                               /* 0x0A */
651     { 0x000B,    0,    0, nullptr },                               /* 0x0B */
652     { 0x000C,    0,    0, nullptr },                               /* 0x0C */
653     { 0x000D,    0,    0, nullptr },                               /* 0x0D */
654     { 0x000E,    0,    0, nullptr },                               /* 0x0E */
655     { 0x000F,    0,    0, nullptr },                               /* 0x0F */
656     { 0x0010,    0,    0, nullptr },                               /* 0x10 */
657     { 0x0011,    0,    0, nullptr },                               /* 0x11 */
658     { 0x0012,    0,    0, nullptr },                               /* 0x12 */
659     { 0x0013,    0,    0, nullptr },                               /* 0x13 */
660     { 0x0014,    0,    0, nullptr },                               /* 0x14 */
661     { 0x0015,    0,    0, nullptr },                               /* 0x15 */
662     { 0x0016,    0,    0, nullptr },                               /* 0x16 */
663     { 0x0017,    0,    0, nullptr },                               /* 0x17 */
664     { 0x0018,    0,    0, nullptr },                               /* 0x18 */
665     { 0x0019,    0,    0, nullptr },                               /* 0x19 */
666     { 0x001A,    0,    0, nullptr },                               /* 0x1A */
667     { 0x001B,    0,    0, nullptr },                               /* 0x1B */
668     { 0x001C,    0,    0, nullptr },                               /* 0x1C */
669     { 0x001D,    0,    0, nullptr },                               /* 0x1D */
670     { 0x001E,    0,    0, nullptr },                               /* 0x1E */
671     { 0x001F,    0,    0, nullptr },                               /* 0x1F */
672     { 0x0020,    0,    0, nullptr },                               /* 0x20 */
673     { 0x0021,    0,    0, nullptr },                               /* 0x21 */
674     { 0x0022,    0,    0, nullptr },                               /* 0x22 */
675     { 0x0023,    0,    0, nullptr },                               /* 0x23 */
676     { 0x0024,    0,    0, nullptr },                               /* 0x24 */
677     { 0x0025,    0,    0, nullptr },                               /* 0x25 */
678     { 0x0026,    0,    0, nullptr },                               /* 0x26 */
679     { 0x0027,    0,    0, nullptr },                               /* 0x27 */
680     { 0x0028,    0,    0, nullptr },                               /* 0x28 */
681     { 0x0029,    0,    0, nullptr },                               /* 0x29 */
682     { 0x002A,    0,    0, nullptr },                               /* 0x2A */
683     { 0x002B,    0,    0, nullptr },                               /* 0x2B */
684     { 0x002C,    0,    0, nullptr },                               /* 0x2C */
685     { 0x002D,    0,    0, nullptr },                               /* 0x2D */
686     { 0x002E,    0,    0, nullptr },                               /* 0x2E */
687     { 0x002F,    0,    0, nullptr },                               /* 0x2F */
688     { 0x0030,    0,    0, nullptr },                               /* 0x30 */
689     { 0x0031,    0,    0, nullptr },                               /* 0x31 */
690     { 0x0032,    0,    0, nullptr },                               /* 0x32 */
691     { 0x0033,    0,    0, nullptr },                               /* 0x33 */
692     { 0x0034,    0,    0, nullptr },                               /* 0x34 */
693     { 0x0035,    0,    0, nullptr },                               /* 0x35 */
694     { 0x0036,    0,    0, nullptr },                               /* 0x36 */
695     { 0x0037,    0,    0, nullptr },                               /* 0x37 */
696     { 0x0038,    0,    0, nullptr },                               /* 0x38 */
697     { 0x0039,    0,    0, nullptr },                               /* 0x39 */
698     { 0x003A,    0,    0, nullptr },                               /* 0x3A */
699     { 0x003B,    0,    0, nullptr },                               /* 0x3B */
700     { 0x003C,    0,    0, nullptr },                               /* 0x3C */
701     { 0x003D,    0,    0, nullptr },                               /* 0x3D */
702     { 0x003E,    0,    0, nullptr },                               /* 0x3E */
703     { 0x003F,    0,    0, nullptr },                               /* 0x3F */
704     { 0x0040,    0,    0, nullptr },                               /* 0x40 */
705     { 0x0041,    0,    0, nullptr },                               /* 0x41 */
706     { 0x0042,    0,    0, nullptr },                               /* 0x42 */
707     { 0x0043,    0,    0, nullptr },                               /* 0x43 */
708     { 0x0044,    0,    0, nullptr },                               /* 0x44 */
709     { 0x0045,    0,    0, nullptr },                               /* 0x45 */
710     { 0x0046,    0,    0, nullptr },                               /* 0x46 */
711     { 0x0047,    0,    0, nullptr },                               /* 0x47 */
712     { 0x0048,    0,    0, nullptr },                               /* 0x48 */
713     { 0x0049,    0,    0, nullptr },                               /* 0x49 */
714     { 0x004A,    0,    0, nullptr },                               /* 0x4A */
715     { 0x004B,    0,    0, nullptr },                               /* 0x4B */
716     { 0x004C,    0,    0, nullptr },                               /* 0x4C */
717     { 0x004D,    0,    0, nullptr },                               /* 0x4D */
718     { 0x004E,    0,    0, nullptr },                               /* 0x4E */
719     { 0x004F,    0,    0, nullptr },                               /* 0x4F */
720     { 0x0050,    0,    0, nullptr },                               /* 0x50 */
721     { 0x0051,    0,    0, nullptr },                               /* 0x51 */
722     { 0x0052,    0,    0, nullptr },                               /* 0x52 */
723     { 0x0053,    0,    0, nullptr },                               /* 0x53 */
724     { 0x0054,    0,    0, nullptr },                               /* 0x54 */
725     { 0x0055,    0,    0, nullptr },                               /* 0x55 */
726     { 0x0056,    0,    0, nullptr },                               /* 0x56 */
727     { 0x0057,    0,    0, nullptr },                               /* 0x57 */
728     { 0x0058,    0,    0, nullptr },                               /* 0x58 */
729     { 0x0059,    0,    0, nullptr },                               /* 0x59 */
730     { 0x005A,    0,    0, nullptr },                               /* 0x5A */
731     { 0x005B,    0,    0, nullptr },                               /* 0x5B */
732     { 0x005C,    0,    0, nullptr },                               /* 0x5C */
733     { 0x005D,    0,    0, nullptr },                               /* 0x5D */
734     { 0x005E,    0,    0, nullptr },                               /* 0x5E */
735     { 0x005F,    0,    0, nullptr },                               /* 0x5F */
736     { 0x0060,    0,    0, nullptr },                               /* 0x60 */
737     { 0x0061,    0,    0, nullptr },                               /* 0x61 */
738     { 0x0062,    0,    0, nullptr },                               /* 0x62 */
739     { 0x0063,    0,    0, nullptr },                               /* 0x63 */
740     { 0x0064,    0,    0, nullptr },                               /* 0x64 */
741     { 0x0065,    0,    0, nullptr },                               /* 0x65 */
742     { 0x0066,    0,    0, nullptr },                               /* 0x66 */
743     { 0x0067,    0,    0, nullptr },                               /* 0x67 */
744     { 0x0068,    0,    0, nullptr },                               /* 0x68 */
745     { 0x0069,    0,    0, nullptr },                               /* 0x69 */
746     { 0x006A,    0,    0, nullptr },                               /* 0x6A */
747     { 0x006B,    0,    0, nullptr },                               /* 0x6B */
748     { 0x006C,    0,    0, nullptr },                               /* 0x6C */
749     { 0x006D,    0,    0, nullptr },                               /* 0x6D */
750     { 0x006E,    0,    0, nullptr },                               /* 0x6E */
751     { 0x006F,    0,    0, nullptr },                               /* 0x6F */
752     { 0x0070,    0,    0, nullptr },                               /* 0x70 */
753     { 0x0071,    0,    0, nullptr },                               /* 0x71 */
754     { 0x0072,    0,    0, nullptr },                               /* 0x72 */
755     { 0x0073,    0,    0, nullptr },                               /* 0x73 */
756     { 0x0074,    0,    0, nullptr },                               /* 0x74 */
757     { 0x0075,    0,    0, nullptr },                               /* 0x75 */
758     { 0x0076,    0,    0, nullptr },                               /* 0x76 */
759     { 0x0077,    0,    0, nullptr },                               /* 0x77 */
760     { 0x0078,    0,    0, nullptr },                               /* 0x78 */
761     { 0x0079,    0,    0, nullptr },                               /* 0x79 */
762     { 0x007A,    0,    0, nullptr },                               /* 0x7A */
763     { 0x007B,    0,    0, nullptr },                               /* 0x7B */
764     { 0x007C,    0,    0, nullptr },                               /* 0x7C */
765     { 0x007D,    0,    0, nullptr },                               /* 0x7D */
766     { 0x007E,    0,    0, nullptr },                               /* 0x7E */
767     { 0x007F,    0,    0, nullptr },                               /* 0x7F */
768     { 0x20AC,    0,    0, nullptr },                               /* 0x80 */
769     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x81 */ /* We convert this as double byte */
770     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x82 */ /* We convert this as double byte */
771     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x83 */ /* We convert this as double byte */
772     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x84 */ /* We convert this as double byte */
773     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x85 */ /* We convert this as double byte */
774     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x86 */ /* We convert this as double byte */
775     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x87 */ /* We convert this as double byte */
776     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x88 */ /* We convert this as double byte */
777     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x89 */ /* We convert this as double byte */
778     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x8A */ /* We convert this as double byte */
779     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x8B */ /* We convert this as double byte */
780     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x8C */ /* We convert this as double byte */
781     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x8D */ /* We convert this as double byte */
782     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x8E */ /* We convert this as double byte */
783     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x8F */ /* We convert this as double byte */
784     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x90 */ /* We convert this as double byte */
785     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x91 */ /* We convert this as double byte */
786     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x92 */ /* We convert this as double byte */
787     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x93 */ /* We convert this as double byte */
788     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x94 */ /* We convert this as double byte */
789     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x95 */ /* We convert this as double byte */
790     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x96 */ /* We convert this as double byte */
791     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x97 */ /* We convert this as double byte */
792     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x98 */ /* We convert this as double byte */
793     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x99 */ /* We convert this as double byte */
794     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x9A */ /* We convert this as double byte */
795     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x9B */ /* We convert this as double byte */
796     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x9C */ /* We convert this as double byte */
797     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x9D */ /* We convert this as double byte */
798     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x9E */ /* We convert this as double byte */
799     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x9F */ /* We convert this as double byte */
800     {      0,    1,    0, nullptr },                               /* 0xA0 */
801     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A1 },            /* 0xA1 */
802     {      0, 0xA1, 0xFC, aImplDBCSToUniTab_GB_A2 },            /* 0xA2 */
803     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A3 },            /* 0xA3 */
804     {      0, 0xA1, 0xF3, aImplDBCSToUniTab_GB_A4 },            /* 0xA4 */
805     {      0, 0xA1, 0xF6, aImplDBCSToUniTab_GB_A5 },            /* 0xA5 */
806     {      0, 0xA1, 0xF5, aImplDBCSToUniTab_GB_A6 },            /* 0xA6 */
807     {      0, 0xA1, 0xF1, aImplDBCSToUniTab_GB_A7 },            /* 0xA7 */
808     {      0, 0xA1, 0xE9, aImplDBCSToUniTab_GBK_A8+GBKOFF },    /* 0xA8 */
809     {      0, 0xA1, 0xEF, aImplDBCSToUniTab_GBK_A9+GBKOFF },    /* 0xA9 */
810     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xAA */ /* We convert this as double byte */
811     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xAB */ /* We convert this as double byte */
812     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xAC */ /* We convert this as double byte */
813     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xAD */ /* We convert this as double byte */
814     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xAE */ /* We convert this as double byte */
815     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xAF */ /* We convert this as double byte */
816     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B0 },           /* 0xB0 */
817     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B1 },           /* 0xB1 */
818     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B2 },           /* 0xB2 */
819     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B3 },           /* 0xB3 */
820     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B4 },           /* 0xB4 */
821     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B5 },           /* 0xB5 */
822     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B6 },           /* 0xB6 */
823     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B7 },           /* 0xB7 */
824     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B8 },           /* 0xB8 */
825     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_B9 },           /* 0xB9 */
826     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_BA },           /* 0xBA */
827     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_BB },           /* 0xBB */
828     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_BC },           /* 0xBC */
829     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_BD },           /* 0xBD */
830     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_BE },           /* 0xBE */
831     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_BF },           /* 0xBF */
832     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C0 },           /* 0xC0 */
833     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C1 },           /* 0xC1 */
834     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C2 },           /* 0xC2 */
835     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C3 },           /* 0xC3 */
836     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C4 },           /* 0xC4 */
837     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C5 },           /* 0xC5 */
838     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C6 },           /* 0xC6 */
839     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C7 },           /* 0xC7 */
840     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C8 },           /* 0xC8 */
841     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_C9 },           /* 0xC9 */
842     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_CA },           /* 0xCA */
843     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_CB },           /* 0xCB */
844     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_CC },           /* 0xCC */
845     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_CD },           /* 0xCD */
846     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_CE },           /* 0xCE */
847     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_CF },           /* 0xCF */
848     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D0 },           /* 0xD0 */
849     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D1 },           /* 0xD1 */
850     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D2 },           /* 0xD2 */
851     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D3 },           /* 0xD3 */
852     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D4 },           /* 0xD4 */
853     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D5 },           /* 0xD5 */
854     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D6 },           /* 0xD6 */
855     {      0, 0xA1, 0xF9, aImplDBCSToUniTab_GBT_D7 },           /* 0xD7 */
856     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D8 },           /* 0xD8 */
857     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_D9 },           /* 0xD9 */
858     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_DA },           /* 0xDA */
859     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_DB },           /* 0xDB */
860     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_DC },           /* 0xDC */
861     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_DD },           /* 0xDD */
862     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_DE },           /* 0xDE */
863     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_DF },           /* 0xDF */
864     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E0 },           /* 0xE0 */
865     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E1 },           /* 0xE1 */
866     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E2 },           /* 0xE2 */
867     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E3 },           /* 0xE3 */
868     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E4 },           /* 0xE4 */
869     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E5 },           /* 0xE5 */
870     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E6 },           /* 0xE6 */
871     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E7 },           /* 0xE7 */
872     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E8 },           /* 0xE8 */
873     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_E9 },           /* 0xE9 */
874     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_EA },           /* 0xEA */
875     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_EB },           /* 0xEB */
876     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_EC },           /* 0xEC */
877     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_ED },           /* 0xED */
878     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_EE },           /* 0xEE */
879     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_EF },           /* 0xEF */
880     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F0 },           /* 0xF0 */
881     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F1 },           /* 0xF1 */
882     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F2 },           /* 0xF2 */
883     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F3 },           /* 0xF3 */
884     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F4 },           /* 0xF4 */
885     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F5 },           /* 0xF5 */
886     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F6 },           /* 0xF6 */
887     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F7 },           /* 0xF7 */
888     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBT_F8 },           /* 0xF8 */
889     {      0, 0xA1, 0xA9, aImplDBCSToUniTab_GBT_F9 },           /* 0xF9 */
890     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xFA */ /* We convert this as double byte */
891     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xFB */ /* We convert this as double byte */
892     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xFC */ /* We convert this as double byte */
893     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xFD */ /* We convert this as double byte */
894     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xFE */ /* We convert this as double byte */
895     {      0,    1,    0, nullptr }                                /* 0xFF */
898 /* ----------------------------------------------------------------------- */
900 static ImplUniToDBCSHighTab const aGBT12345DBCSHighTab[256] =
902     { 0x00, 0xFC, aImplUniToDBCSTab_GB_00 },                    /* 0x00 */
903     { 0x01, 0xDC, aImplUniToDBCSTab_GB_01 },                    /* 0x01 */
904     { 0x51, 0xC9, aImplUniToDBCSTab_GB_02 },                    /* 0x02 */
905     { 0x91, 0xC9, aImplUniToDBCSTab_GB_03 },                    /* 0x03 */
906     { 0x01, 0x51, aImplUniToDBCSTab_GB_04 },                    /* 0x04 */
907     {    1,    0, nullptr },                                       /* 0x05 */
908     {    1,    0, nullptr },                                       /* 0x06 */
909     {    1,    0, nullptr },                                       /* 0x07 */
910     {    1,    0, nullptr },                                       /* 0x08 */
911     {    1,    0, nullptr },                                       /* 0x09 */
912     {    1,    0, nullptr },                                       /* 0x0A */
913     {    1,    0, nullptr },                                       /* 0x0B */
914     {    1,    0, nullptr },                                       /* 0x0C */
915     {    1,    0, nullptr },                                       /* 0x0D */
916     {    1,    0, nullptr },                                       /* 0x0E */
917     {    1,    0, nullptr },                                       /* 0x0F */
918     {    1,    0, nullptr },                                       /* 0x10 */
919     {    1,    0, nullptr },                                       /* 0x11 */
920     {    1,    0, nullptr },                                       /* 0x12 */
921     {    1,    0, nullptr },                                       /* 0x13 */
922     {    1,    0, nullptr },                                       /* 0x14 */
923     {    1,    0, nullptr },                                       /* 0x15 */
924     {    1,    0, nullptr },                                       /* 0x16 */
925     {    1,    0, nullptr },                                       /* 0x17 */
926     {    1,    0, nullptr },                                       /* 0x18 */
927     {    1,    0, nullptr },                                       /* 0x19 */
928     {    1,    0, nullptr },                                       /* 0x1A */
929     {    1,    0, nullptr },                                       /* 0x1B */
930     {    1,    0, nullptr },                                       /* 0x1C */
931     {    1,    0, nullptr },                                       /* 0x1D */
932     { 0x3F, 0x3F, aImplUniToDBCSTab_APPLECHINSIMP_1E },         /* 0x1E */ /* we convert this char also to unicode */
933     {    1,    0, nullptr },                                       /* 0x1F */
934     { 0x14, 0xAC, aImplUniToDBCSTab_GB_20 },                    /* 0x20 */
935     { 0x03, 0x93, aImplUniToDBCSTab_GB_21 },                    /* 0x21 */
936     { 0x08, 0xEF, aImplUniToDBCSTab_GB_22 },                    /* 0x22 */
937     { 0x12, 0x12, aImplUniToDBCSTab_GB_23 },                    /* 0x23 */
938     { 0x60, 0x9B, aImplUniToDBCSTab_GB_24 },                    /* 0x24 */
939     { 0x00, 0xCF, aImplUniToDBCSTab_GB_25 },                    /* 0x25 */
940     { 0x05, 0x42, aImplUniToDBCSTab_GB_26 },                    /* 0x26 */
941     {    1,    0, nullptr },                                       /* 0x27 */
942     {    1,    0, nullptr },                                       /* 0x28 */
943     {    1,    0, nullptr },                                       /* 0x29 */
944     {    1,    0, nullptr },                                       /* 0x2A */
945     {    1,    0, nullptr },                                       /* 0x2B */
946     {    1,    0, nullptr },                                       /* 0x2C */
947     {    1,    0, nullptr },                                       /* 0x2D */
948     {    1,    0, nullptr },                                       /* 0x2E */
949     {    1,    0, nullptr },                                       /* 0x2F */
950     { 0x00, 0xFB, aImplUniToDBCSTab_GB_30 },                    /* 0x30 */
951     { 0x05, 0x29, aImplUniToDBCSTab_GB_31 },                    /* 0x31 */
952     { 0x20, 0x29, aImplUniToDBCSTab_GBK_32 },                   /* 0x32 */
953     {    1,    0, nullptr },                                       /* 0x33 */
954     {    1,    0, nullptr },                                       /* 0x34 */
955     {    1,    0, nullptr },                                       /* 0x35 */
956     {    1,    0, nullptr },                                       /* 0x36 */
957     {    1,    0, nullptr },                                       /* 0x37 */
958     {    1,    0, nullptr },                                       /* 0x38 */
959     {    1,    0, nullptr },                                       /* 0x39 */
960     {    1,    0, nullptr },                                       /* 0x3A */
961     {    1,    0, nullptr },                                       /* 0x3B */
962     {    1,    0, nullptr },                                       /* 0x3C */
963     {    1,    0, nullptr },                                       /* 0x3D */
964     {    1,    0, nullptr },                                       /* 0x3E */
965     {    1,    0, nullptr },                                       /* 0x3F */
966     {    1,    0, nullptr },                                       /* 0x40 */
967     {    1,    0, nullptr },                                       /* 0x41 */
968     {    1,    0, nullptr },                                       /* 0x42 */
969     {    1,    0, nullptr },                                       /* 0x43 */
970     {    1,    0, nullptr },                                       /* 0x44 */
971     {    1,    0, nullptr },                                       /* 0x45 */
972     {    1,    0, nullptr },                                       /* 0x46 */
973     {    1,    0, nullptr },                                       /* 0x47 */
974     {    1,    0, nullptr },                                       /* 0x48 */
975     {    1,    0, nullptr },                                       /* 0x49 */
976     {    1,    0, nullptr },                                       /* 0x4A */
977     {    1,    0, nullptr },                                       /* 0x4B */
978     {    1,    0, nullptr },                                       /* 0x4C */
979     {    1,    0, nullptr },                                       /* 0x4D */
980     { 0x00, 0xFF, aImplUniToDBCSTab_GBT_4E },                   /* 0x4E */
981     { 0x01, 0xFE, aImplUniToDBCSTab_GBT_4F },                   /* 0x4F */
982     { 0x00, 0xFB, aImplUniToDBCSTab_GBT_50 },                   /* 0x50 */
983     { 0x00, 0xFD, aImplUniToDBCSTab_GBT_51 },                   /* 0x51 */
984     { 0x00, 0xFF, aImplUniToDBCSTab_GBT_52 },                   /* 0x52 */
985     { 0x00, 0xFC, aImplUniToDBCSTab_GBT_53 },                   /* 0x53 */
986     { 0x01, 0xFF, aImplUniToDBCSTab_GBT_54 },                   /* 0x54 */
987     { 0x01, 0xFE, aImplUniToDBCSTab_GBT_55 },                   /* 0x55 */
988     { 0x00, 0xFF, aImplUniToDBCSTab_GBT_56 },                   /* 0x56 */
989     { 0x03, 0xFD, aImplUniToDBCSTab_GBT_57 },                   /* 0x57 */
990     { 0x00, 0xFD, aImplUniToDBCSTab_GBT_58 },                   /* 0x58 */
991     { 0x02, 0xFF, aImplUniToDBCSTab_GBT_59 },                   /* 0x59 */
992     { 0x01, 0xFB, aImplUniToDBCSTab_GBT_5A },                   /* 0x5A */
993     { 0x00, 0xFA, aImplUniToDBCSTab_GBT_5B },                   /* 0x5B */
994     { 0x01, 0xFD, aImplUniToDBCSTab_GBT_5C },                   /* 0x5C */
995     { 0x06, 0xFE, aImplUniToDBCSTab_GBT_5D },                   /* 0x5D */
996     { 0x02, 0xFF, aImplUniToDBCSTab_GBT_5E },                   /* 0x5E */
997     { 0x01, 0xFF, aImplUniToDBCSTab_GBT_5F },                   /* 0x5F */
998     { 0x0A, 0xFB, aImplUniToDBCSTab_GBT_60 },                   /* 0x60 */
999     { 0x00, 0xFF, aImplUniToDBCSTab_GBT_61 },                   /* 0x61 */
1000     { 0x00, 0xFF, aImplUniToDBCSTab_GBT_62 },                   /* 0x62 */
1001     { 0x01, 0xF8, aImplUniToDBCSTab_GBT_63 },                   /* 0x63 */
1002     { 0x0B, 0xFE, aImplUniToDBCSTab_GBT_64 },                   /* 0x64 */
1003     { 0x00, 0xFA, aImplUniToDBCSTab_GBT_65 },                   /* 0x65 */
1004     { 0x00, 0xFF, aImplUniToDBCSTab_GBT_66 },                   /* 0x66 */
1005     { 0x00, 0xFF, aImplUniToDBCSTab_GBT_67 },                   /* 0x67 */
1006     { 0x00, 0xFC, aImplUniToDBCSTab_GBT_68 },                   /* 0x68 */
1007     { 0x01, 0xFF, aImplUniToDBCSTab_GBT_69 },                   /* 0x69 */
1008     { 0x01, 0xFB, aImplUniToDBCSTab_GBT_6A },                   /* 0x6A */
1009     { 0x04, 0xFF, aImplUniToDBCSTab_GBT_6B },                   /* 0x6B */
1010     { 0x05, 0xF5, aImplUniToDBCSTab_GBT_6C },                   /* 0x6C */
1011     { 0x04, 0xFC, aImplUniToDBCSTab_GBT_6D },                   /* 0x6D */
1012     { 0x05, 0xFF, aImplUniToDBCSTab_GBT_6E },                   /* 0x6E */
1013     { 0x01, 0xFE, aImplUniToDBCSTab_GBT_6F },                   /* 0x6F */
1014     { 0x05, 0xFD, aImplUniToDBCSTab_GBT_70 },                   /* 0x70 */
1015     { 0x09, 0xFE, aImplUniToDBCSTab_GBT_71 },                   /* 0x71 */
1016     { 0x06, 0xFD, aImplUniToDBCSTab_GBT_72 },                   /* 0x72 */
1017     { 0x01, 0xFE, aImplUniToDBCSTab_GBT_73 },                   /* 0x73 */
1018     { 0x03, 0xFF, aImplUniToDBCSTab_GBT_74 },                   /* 0x74 */
1019     { 0x04, 0xFF, aImplUniToDBCSTab_GBT_75 },                   /* 0x75 */
1020     { 0x00, 0xFE, aImplUniToDBCSTab_GBT_76 },                   /* 0x76 */
1021     { 0x01, 0xFD, aImplUniToDBCSTab_GBT_77 },                   /* 0x77 */
1022     { 0x02, 0xFD, aImplUniToDBCSTab_GBT_78 },                   /* 0x78 */
1023     { 0x01, 0xFB, aImplUniToDBCSTab_GBT_79 },                   /* 0x79 */
1024     { 0x00, 0xFF, aImplUniToDBCSTab_GBT_7A },                   /* 0x7A */
1025     { 0x04, 0xFE, aImplUniToDBCSTab_GBT_7B },                   /* 0x7B */
1026     { 0x00, 0xFE, aImplUniToDBCSTab_GBT_7C },                   /* 0x7C */
1027     { 0x00, 0xFB, aImplUniToDBCSTab_GBT_7D },                   /* 0x7D */
1028     { 0x08, 0x9C, aImplUniToDBCSTab_GBT_7E },                   /* 0x7E */
1029     { 0x36, 0xFC, aImplUniToDBCSTab_GBT_7F },                   /* 0x7F */
1030     { 0x00, 0xFD, aImplUniToDBCSTab_GBT_80 },                   /* 0x80 */
1031     { 0x02, 0xFE, aImplUniToDBCSTab_GBT_81 },                   /* 0x81 */
1032     { 0x00, 0xFB, aImplUniToDBCSTab_GBT_82 },                   /* 0x82 */
1033     { 0x01, 0xFD, aImplUniToDBCSTab_GBT_83 },                   /* 0x83 */
1034     { 0x01, 0xFF, aImplUniToDBCSTab_GBT_84 },                   /* 0x84 */
1035     { 0x0C, 0xFF, aImplUniToDBCSTab_GBT_85 },                   /* 0x85 */
1036     { 0x04, 0xFE, aImplUniToDBCSTab_GBT_86 },                   /* 0x86 */
1037     { 0x00, 0xFE, aImplUniToDBCSTab_GBT_87 },                   /* 0x87 */
1038     { 0x03, 0xFE, aImplUniToDBCSTab_GBT_88 },                   /* 0x88 */
1039     { 0x02, 0xF8, aImplUniToDBCSTab_GBT_89 },                   /* 0x89 */
1040     { 0x00, 0xFE, aImplUniToDBCSTab_GBT_8A },                   /* 0x8A */
1041     { 0x00, 0xFE, aImplUniToDBCSTab_GBT_8B },                   /* 0x8B */
1042     { 0x07, 0xFE, aImplUniToDBCSTab_GBT_8C },                   /* 0x8C */
1043     { 0x04, 0xFD, aImplUniToDBCSTab_GBT_8D },                   /* 0x8D */
1044     { 0x05, 0xFE, aImplUniToDBCSTab_GBT_8E },                   /* 0x8E */
1045     { 0x03, 0xFD, aImplUniToDBCSTab_GBT_8F },                   /* 0x8F */
1046     { 0x00, 0xFE, aImplUniToDBCSTab_GBT_90 },                   /* 0x90 */
1047     { 0x02, 0xFA, aImplUniToDBCSTab_GBT_91 },                   /* 0x91 */
1048     { 0x00, 0xFC, aImplUniToDBCSTab_GBT_92 },                   /* 0x92 */
1049     { 0x01, 0xF9, aImplUniToDBCSTab_GBT_93 },                   /* 0x93 */
1050     { 0x03, 0x7F, aImplUniToDBCSTab_GBT_94 },                   /* 0x94 */
1051     { 0x77, 0xE5, aImplUniToDBCSTab_GBT_95 },                   /* 0x95 */
1052     { 0x1C, 0xFB, aImplUniToDBCSTab_GBT_96 },                   /* 0x96 */
1053     { 0x00, 0xFF, aImplUniToDBCSTab_GBT_97 },                   /* 0x97 */
1054     { 0x01, 0xFE, aImplUniToDBCSTab_GBT_98 },                   /* 0x98 */
1055     { 0x03, 0xFF, aImplUniToDBCSTab_GBT_99 },                   /* 0x99 */
1056     { 0x01, 0xFB, aImplUniToDBCSTab_GBT_9A },                   /* 0x9A */
1057     { 0x03, 0xFF, aImplUniToDBCSTab_GBT_9B },                   /* 0x9B */
1058     { 0x08, 0xF6, aImplUniToDBCSTab_GBT_9C },                   /* 0x9C */
1059     { 0x06, 0xFA, aImplUniToDBCSTab_GBT_9D },                   /* 0x9D */
1060     { 0x0C, 0xFF, aImplUniToDBCSTab_GBT_9E },                   /* 0x9E */
1061     { 0x09, 0xA0, aImplUniToDBCSTab_GBT_9F },                   /* 0x9F */
1062     {    1,    0, nullptr },                                       /* 0xA0 */
1063     {    1,    0, nullptr },                                       /* 0xA1 */
1064     {    1,    0, nullptr },                                       /* 0xA2 */
1065     {    1,    0, nullptr },                                       /* 0xA3 */
1066     {    1,    0, nullptr },                                       /* 0xA4 */
1067     {    1,    0, nullptr },                                       /* 0xA5 */
1068     {    1,    0, nullptr },                                       /* 0xA6 */
1069     {    1,    0, nullptr },                                       /* 0xA7 */
1070     {    1,    0, nullptr },                                       /* 0xA8 */
1071     {    1,    0, nullptr },                                       /* 0xA9 */
1072     {    1,    0, nullptr },                                       /* 0xAA */
1073     {    1,    0, nullptr },                                       /* 0xAB */
1074     {    1,    0, nullptr },                                       /* 0xAC */
1075     {    1,    0, nullptr },                                       /* 0xAD */
1076     {    1,    0, nullptr },                                       /* 0xAE */
1077     {    1,    0, nullptr },                                       /* 0xAF */
1078     {    1,    0, nullptr },                                       /* 0xB0 */
1079     {    1,    0, nullptr },                                       /* 0xB1 */
1080     {    1,    0, nullptr },                                       /* 0xB2 */
1081     {    1,    0, nullptr },                                       /* 0xB3 */
1082     {    1,    0, nullptr },                                       /* 0xB4 */
1083     {    1,    0, nullptr },                                       /* 0xB5 */
1084     {    1,    0, nullptr },                                       /* 0xB6 */
1085     {    1,    0, nullptr },                                       /* 0xB7 */
1086     {    1,    0, nullptr },                                       /* 0xB8 */
1087     {    1,    0, nullptr },                                       /* 0xB9 */
1088     {    1,    0, nullptr },                                       /* 0xBA */
1089     {    1,    0, nullptr },                                       /* 0xBB */
1090     {    1,    0, nullptr },                                       /* 0xBC */
1091     {    1,    0, nullptr },                                       /* 0xBD */
1092     {    1,    0, nullptr },                                       /* 0xBE */
1093     {    1,    0, nullptr },                                       /* 0xBF */
1094     {    1,    0, nullptr },                                       /* 0xC0 */
1095     {    1,    0, nullptr },                                       /* 0xC1 */
1096     {    1,    0, nullptr },                                       /* 0xC2 */
1097     {    1,    0, nullptr },                                       /* 0xC3 */
1098     {    1,    0, nullptr },                                       /* 0xC4 */
1099     {    1,    0, nullptr },                                       /* 0xC5 */
1100     {    1,    0, nullptr },                                       /* 0xC6 */
1101     {    1,    0, nullptr },                                       /* 0xC7 */
1102     {    1,    0, nullptr },                                       /* 0xC8 */
1103     {    1,    0, nullptr },                                       /* 0xC9 */
1104     {    1,    0, nullptr },                                       /* 0xCA */
1105     {    1,    0, nullptr },                                       /* 0xCB */
1106     {    1,    0, nullptr },                                       /* 0xCC */
1107     {    1,    0, nullptr },                                       /* 0xCD */
1108     {    1,    0, nullptr },                                       /* 0xCE */
1109     {    1,    0, nullptr },                                       /* 0xCF */
1110     {    1,    0, nullptr },                                       /* 0xD0 */
1111     {    1,    0, nullptr },                                       /* 0xD1 */
1112     {    1,    0, nullptr },                                       /* 0xD2 */
1113     {    1,    0, nullptr },                                       /* 0xD3 */
1114     {    1,    0, nullptr },                                       /* 0xD4 */
1115     {    1,    0, nullptr },                                       /* 0xD5 */
1116     {    1,    0, nullptr },                                       /* 0xD6 */
1117     {    1,    0, nullptr },                                       /* 0xD7 */
1118     {    1,    0, nullptr },                                       /* 0xD8 */
1119     {    1,    0, nullptr },                                       /* 0xD9 */
1120     {    1,    0, nullptr },                                       /* 0xDA */
1121     {    1,    0, nullptr },                                       /* 0xDB */
1122     {    1,    0, nullptr },                                       /* 0xDC */
1123     {    1,    0, nullptr },                                       /* 0xDD */
1124     {    1,    0, nullptr },                                       /* 0xDE */
1125     {    1,    0, nullptr },                                       /* 0xDF */
1126     {    1,    0, nullptr },                                       /* 0xE0 */
1127     {    1,    0, nullptr },                                       /* 0xE1 */
1128     {    1,    0, nullptr },                                       /* 0xE2 */
1129     {    1,    0, nullptr },                                       /* 0xE3 */
1130     {    1,    0, nullptr },                                       /* 0xE4 */
1131     {    1,    0, nullptr },                                       /* 0xE5 */
1132     {    1,    0, nullptr },                                       /* 0xE6 */
1133     {    1,    0, nullptr },                                       /* 0xE7 */
1134     {    1,    0, nullptr },                                       /* 0xE8 */
1135     {    1,    0, nullptr },                                       /* 0xE9 */
1136     {    1,    0, nullptr },                                       /* 0xEA */
1137     {    1,    0, nullptr },                                       /* 0xEB */
1138     {    1,    0, nullptr },                                       /* 0xEC */
1139     {    1,    0, nullptr },                                       /* 0xED */
1140     {    1,    0, nullptr },                                       /* 0xEE */
1141     {    1,    0, nullptr },                                       /* 0xEF */
1142     {    1,    0, nullptr },                                       /* 0xF0 */
1143     {    1,    0, nullptr },                                       /* 0xF1 */
1144     {    1,    0, nullptr },                                       /* 0xF2 */
1145     {    1,    0, nullptr },                                       /* 0xF3 */
1146     {    1,    0, nullptr },                                       /* 0xF4 */
1147     {    1,    0, nullptr },                                       /* 0xF5 */
1148     {    1,    0, nullptr },                                       /* 0xF6 */
1149     {    1,    0, nullptr },                                       /* 0xF7 */
1150     {    1,    0, nullptr },                                       /* 0xF8 */
1151     {    1,    0, nullptr },                                       /* 0xF9 */
1152     {    1,    0, nullptr },                                       /* 0xFA */
1153     {    1,    0, nullptr },                                       /* 0xFB */
1154     {    1,    0, nullptr },                                       /* 0xFC */
1155     {    1,    0, nullptr },                                       /* 0xFD */
1156     { 0x31, 0x44, aImplUniToDBCSTab_GB_FE },                    /* 0xFE */
1157     { 0x01, 0xE5, aImplUniToDBCSTab_GB_FF }                     /* 0xFF */
1160 /* ----------------------------------------------------------------------- */
1162 static ImplDBCSConvertData const aImplGBT12345DBCSCvtData =
1164     aGBT12345UniLeadTab,
1165     aGBT12345DBCSHighTab,
1166     0x00, 0xFF,
1167     0xA1, 0xFE,
1168     aImplMS936DBCSEUDCTab,
1169     DBCS_EUDC_MS936_COUNT
1172 /* ----------------------------------------------------------------------- */
1174 static ImplTextEncodingData const aImplGBT12345TextEncodingData
1175     = { { &aImplGBT12345DBCSCvtData,
1176           ImplDBCSToUnicode,
1177           ImplUnicodeToDBCS,
1178           nullptr,
1179           nullptr,
1180           nullptr,
1181           nullptr,
1182           nullptr,
1183           nullptr },
1184         1,
1185         2,
1186         2,
1187         134,
1188         "euc-cn",
1189         "cn-gb-12345",
1190         RTL_TEXTENCODING_INFO_ASCII
1191             | RTL_TEXTENCODING_INFO_MULTIBYTE
1192             | RTL_TEXTENCODING_INFO_MIME };
1193     /* SCRIPT_CHINESE_SIMPLIFIED, pc code page 936, mac encoding 25 */
1195 /* ======================================================================= */
1197 /* #100054# In the GBK range FE50--FEA0, added those mappings (in both
1198    directions) taken from GB-18030 that do not map to Unicode PUA (i.e., those
1199    mappings marked with an * below):
1201    FE50 -> U+2E81 *
1202    FE51 -> U+E816
1203    FE52 -> U+E817
1204    FE53 -> U+E818
1205    FE54 -> U+2E84 *
1206    FE55 -> U+3473 *
1207    FE56 -> U+3447 *
1208    FE57 -> U+2E88 *
1209    FE58 -> U+2E8B *
1210    FE59 -> U+E81E
1211    FE5A -> U+359E *
1212    FE5B -> U+361A *
1213    FE5C -> U+360E *
1214    FE5D -> U+2E8C *
1215    FE5E -> U+2E97 *
1216    FE5F -> U+396E *
1217    FE60 -> U+3918 *
1218    FE61 -> U+E826
1219    FE62 -> U+39CF *
1220    FE63 -> U+39DF *
1221    FE64 -> U+3A73 *
1222    FE65 -> U+39D0 *
1223    FE66 -> U+E82B
1224    FE67 -> U+E82C
1225    FE68 -> U+3B4E *
1226    FE69 -> U+3C6E *
1227    FE6A -> U+3CE0 *
1228    FE6B -> U+2EA7 *
1229    FE6C -> U+E831
1230    FE6D -> U+E832
1231    FE6E -> U+2EAA *
1232    FE6F -> U+4056 *
1233    FE70 -> U+415F *
1234    FE71 -> U+2EAE *
1235    FE72 -> U+4337 *
1236    FE73 -> U+2EB3 *
1237    FE74 -> U+2EB6 *
1238    FE75 -> U+2EB7 *
1239    FE76 -> U+E83B
1240    FE77 -> U+43B1 *
1241    FE78 -> U+43AC *
1242    FE79 -> U+2EBB *
1243    FE7A -> U+43DD *
1244    FE7B -> U+44D6 *
1245    FE7C -> U+4661 *
1246    FE7D -> U+464C *
1247    FE7E -> U+E843
1248    FE80 -> U+4723 *
1249    FE81 -> U+4729 *
1250    FE82 -> U+477C *
1251    FE83 -> U+478D *
1252    FE84 -> U+2ECA *
1253    FE85 -> U+4947 *
1254    FE86 -> U+497A *
1255    FE87 -> U+497D *
1256    FE88 -> U+4982 *
1257    FE89 -> U+4983 *
1258    FE8A -> U+4985 *
1259    FE8B -> U+4986 *
1260    FE8C -> U+499F *
1261    FE8D -> U+499B *
1262    FE8E -> U+49B7 *
1263    FE8F -> U+49B6 *
1264    FE90 -> U+E854
1265    FE91 -> U+E855
1266    FE92 -> U+4CA3 *
1267    FE93 -> U+4C9F *
1268    FE94 -> U+4CA0 *
1269    FE95 -> U+4CA1 *
1270    FE96 -> U+4C77 *
1271    FE97 -> U+4CA2 *
1272    FE98 -> U+4D13 *
1273    FE99 -> U+4D14 *
1274    FE9A -> U+4D15 *
1275    FE9B -> U+4D16 *
1276    FE9C -> U+4D17 *
1277    FE9D -> U+4D18 *
1278    FE9E -> U+4D19 *
1279    FE9F -> U+4DAE *
1280    FEA0 -> U+E864
1283 static ImplDBCSToUniLeadTab const aGBKUniLeadTab[256] =
1285     { 0x0000,    0,    0, nullptr },                               /* 0x00 */
1286     { 0x0001,    0,    0, nullptr },                               /* 0x01 */
1287     { 0x0002,    0,    0, nullptr },                               /* 0x02 */
1288     { 0x0003,    0,    0, nullptr },                               /* 0x03 */
1289     { 0x0004,    0,    0, nullptr },                               /* 0x04 */
1290     { 0x0005,    0,    0, nullptr },                               /* 0x05 */
1291     { 0x0006,    0,    0, nullptr },                               /* 0x06 */
1292     { 0x0007,    0,    0, nullptr },                               /* 0x07 */
1293     { 0x0008,    0,    0, nullptr },                               /* 0x08 */
1294     { 0x0009,    0,    0, nullptr },                               /* 0x09 */
1295     { 0x000A,    0,    0, nullptr },                               /* 0x0A */
1296     { 0x000B,    0,    0, nullptr },                               /* 0x0B */
1297     { 0x000C,    0,    0, nullptr },                               /* 0x0C */
1298     { 0x000D,    0,    0, nullptr },                               /* 0x0D */
1299     { 0x000E,    0,    0, nullptr },                               /* 0x0E */
1300     { 0x000F,    0,    0, nullptr },                               /* 0x0F */
1301     { 0x0010,    0,    0, nullptr },                               /* 0x10 */
1302     { 0x0011,    0,    0, nullptr },                               /* 0x11 */
1303     { 0x0012,    0,    0, nullptr },                               /* 0x12 */
1304     { 0x0013,    0,    0, nullptr },                               /* 0x13 */
1305     { 0x0014,    0,    0, nullptr },                               /* 0x14 */
1306     { 0x0015,    0,    0, nullptr },                               /* 0x15 */
1307     { 0x0016,    0,    0, nullptr },                               /* 0x16 */
1308     { 0x0017,    0,    0, nullptr },                               /* 0x17 */
1309     { 0x0018,    0,    0, nullptr },                               /* 0x18 */
1310     { 0x0019,    0,    0, nullptr },                               /* 0x19 */
1311     { 0x001A,    0,    0, nullptr },                               /* 0x1A */
1312     { 0x001B,    0,    0, nullptr },                               /* 0x1B */
1313     { 0x001C,    0,    0, nullptr },                               /* 0x1C */
1314     { 0x001D,    0,    0, nullptr },                               /* 0x1D */
1315     { 0x001E,    0,    0, nullptr },                               /* 0x1E */
1316     { 0x001F,    0,    0, nullptr },                               /* 0x1F */
1317     { 0x0020,    0,    0, nullptr },                               /* 0x20 */
1318     { 0x0021,    0,    0, nullptr },                               /* 0x21 */
1319     { 0x0022,    0,    0, nullptr },                               /* 0x22 */
1320     { 0x0023,    0,    0, nullptr },                               /* 0x23 */
1321     { 0x0024,    0,    0, nullptr },                               /* 0x24 */
1322     { 0x0025,    0,    0, nullptr },                               /* 0x25 */
1323     { 0x0026,    0,    0, nullptr },                               /* 0x26 */
1324     { 0x0027,    0,    0, nullptr },                               /* 0x27 */
1325     { 0x0028,    0,    0, nullptr },                               /* 0x28 */
1326     { 0x0029,    0,    0, nullptr },                               /* 0x29 */
1327     { 0x002A,    0,    0, nullptr },                               /* 0x2A */
1328     { 0x002B,    0,    0, nullptr },                               /* 0x2B */
1329     { 0x002C,    0,    0, nullptr },                               /* 0x2C */
1330     { 0x002D,    0,    0, nullptr },                               /* 0x2D */
1331     { 0x002E,    0,    0, nullptr },                               /* 0x2E */
1332     { 0x002F,    0,    0, nullptr },                               /* 0x2F */
1333     { 0x0030,    0,    0, nullptr },                               /* 0x30 */
1334     { 0x0031,    0,    0, nullptr },                               /* 0x31 */
1335     { 0x0032,    0,    0, nullptr },                               /* 0x32 */
1336     { 0x0033,    0,    0, nullptr },                               /* 0x33 */
1337     { 0x0034,    0,    0, nullptr },                               /* 0x34 */
1338     { 0x0035,    0,    0, nullptr },                               /* 0x35 */
1339     { 0x0036,    0,    0, nullptr },                               /* 0x36 */
1340     { 0x0037,    0,    0, nullptr },                               /* 0x37 */
1341     { 0x0038,    0,    0, nullptr },                               /* 0x38 */
1342     { 0x0039,    0,    0, nullptr },                               /* 0x39 */
1343     { 0x003A,    0,    0, nullptr },                               /* 0x3A */
1344     { 0x003B,    0,    0, nullptr },                               /* 0x3B */
1345     { 0x003C,    0,    0, nullptr },                               /* 0x3C */
1346     { 0x003D,    0,    0, nullptr },                               /* 0x3D */
1347     { 0x003E,    0,    0, nullptr },                               /* 0x3E */
1348     { 0x003F,    0,    0, nullptr },                               /* 0x3F */
1349     { 0x0040,    0,    0, nullptr },                               /* 0x40 */
1350     { 0x0041,    0,    0, nullptr },                               /* 0x41 */
1351     { 0x0042,    0,    0, nullptr },                               /* 0x42 */
1352     { 0x0043,    0,    0, nullptr },                               /* 0x43 */
1353     { 0x0044,    0,    0, nullptr },                               /* 0x44 */
1354     { 0x0045,    0,    0, nullptr },                               /* 0x45 */
1355     { 0x0046,    0,    0, nullptr },                               /* 0x46 */
1356     { 0x0047,    0,    0, nullptr },                               /* 0x47 */
1357     { 0x0048,    0,    0, nullptr },                               /* 0x48 */
1358     { 0x0049,    0,    0, nullptr },                               /* 0x49 */
1359     { 0x004A,    0,    0, nullptr },                               /* 0x4A */
1360     { 0x004B,    0,    0, nullptr },                               /* 0x4B */
1361     { 0x004C,    0,    0, nullptr },                               /* 0x4C */
1362     { 0x004D,    0,    0, nullptr },                               /* 0x4D */
1363     { 0x004E,    0,    0, nullptr },                               /* 0x4E */
1364     { 0x004F,    0,    0, nullptr },                               /* 0x4F */
1365     { 0x0050,    0,    0, nullptr },                               /* 0x50 */
1366     { 0x0051,    0,    0, nullptr },                               /* 0x51 */
1367     { 0x0052,    0,    0, nullptr },                               /* 0x52 */
1368     { 0x0053,    0,    0, nullptr },                               /* 0x53 */
1369     { 0x0054,    0,    0, nullptr },                               /* 0x54 */
1370     { 0x0055,    0,    0, nullptr },                               /* 0x55 */
1371     { 0x0056,    0,    0, nullptr },                               /* 0x56 */
1372     { 0x0057,    0,    0, nullptr },                               /* 0x57 */
1373     { 0x0058,    0,    0, nullptr },                               /* 0x58 */
1374     { 0x0059,    0,    0, nullptr },                               /* 0x59 */
1375     { 0x005A,    0,    0, nullptr },                               /* 0x5A */
1376     { 0x005B,    0,    0, nullptr },                               /* 0x5B */
1377     { 0x005C,    0,    0, nullptr },                               /* 0x5C */
1378     { 0x005D,    0,    0, nullptr },                               /* 0x5D */
1379     { 0x005E,    0,    0, nullptr },                               /* 0x5E */
1380     { 0x005F,    0,    0, nullptr },                               /* 0x5F */
1381     { 0x0060,    0,    0, nullptr },                               /* 0x60 */
1382     { 0x0061,    0,    0, nullptr },                               /* 0x61 */
1383     { 0x0062,    0,    0, nullptr },                               /* 0x62 */
1384     { 0x0063,    0,    0, nullptr },                               /* 0x63 */
1385     { 0x0064,    0,    0, nullptr },                               /* 0x64 */
1386     { 0x0065,    0,    0, nullptr },                               /* 0x65 */
1387     { 0x0066,    0,    0, nullptr },                               /* 0x66 */
1388     { 0x0067,    0,    0, nullptr },                               /* 0x67 */
1389     { 0x0068,    0,    0, nullptr },                               /* 0x68 */
1390     { 0x0069,    0,    0, nullptr },                               /* 0x69 */
1391     { 0x006A,    0,    0, nullptr },                               /* 0x6A */
1392     { 0x006B,    0,    0, nullptr },                               /* 0x6B */
1393     { 0x006C,    0,    0, nullptr },                               /* 0x6C */
1394     { 0x006D,    0,    0, nullptr },                               /* 0x6D */
1395     { 0x006E,    0,    0, nullptr },                               /* 0x6E */
1396     { 0x006F,    0,    0, nullptr },                               /* 0x6F */
1397     { 0x0070,    0,    0, nullptr },                               /* 0x70 */
1398     { 0x0071,    0,    0, nullptr },                               /* 0x71 */
1399     { 0x0072,    0,    0, nullptr },                               /* 0x72 */
1400     { 0x0073,    0,    0, nullptr },                               /* 0x73 */
1401     { 0x0074,    0,    0, nullptr },                               /* 0x74 */
1402     { 0x0075,    0,    0, nullptr },                               /* 0x75 */
1403     { 0x0076,    0,    0, nullptr },                               /* 0x76 */
1404     { 0x0077,    0,    0, nullptr },                               /* 0x77 */
1405     { 0x0078,    0,    0, nullptr },                               /* 0x78 */
1406     { 0x0079,    0,    0, nullptr },                               /* 0x79 */
1407     { 0x007A,    0,    0, nullptr },                               /* 0x7A */
1408     { 0x007B,    0,    0, nullptr },                               /* 0x7B */
1409     { 0x007C,    0,    0, nullptr },                               /* 0x7C */
1410     { 0x007D,    0,    0, nullptr },                               /* 0x7D */
1411     { 0x007E,    0,    0, nullptr },                               /* 0x7E */
1412     { 0x007F,    0,    0, nullptr },                               /* 0x7F */
1413     { 0x20AC,    0,    0, nullptr },                               /* 0x80 */
1414     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_81 },           /* 0x81 */
1415     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_82 },           /* 0x82 */
1416     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_83 },           /* 0x83 */
1417     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_84 },           /* 0x84 */
1418     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_85 },           /* 0x85 */
1419     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_86 },           /* 0x86 */
1420     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_87 },           /* 0x87 */
1421     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_88 },           /* 0x88 */
1422     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_89 },           /* 0x89 */
1423     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8A },           /* 0x8A */
1424     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8B },           /* 0x8B */
1425     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8C },           /* 0x8C */
1426     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8D },           /* 0x8D */
1427     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8E },           /* 0x8E */
1428     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8F },           /* 0x8F */
1429     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_90 },           /* 0x90 */
1430     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_91 },           /* 0x91 */
1431     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_92 },           /* 0x92 */
1432     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_93 },           /* 0x93 */
1433     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_94 },           /* 0x94 */
1434     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_95 },           /* 0x95 */
1435     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_96 },           /* 0x96 */
1436     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_97 },           /* 0x97 */
1437     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_98 },           /* 0x98 */
1438     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_99 },           /* 0x99 */
1439     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9A },           /* 0x9A */
1440     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9B },           /* 0x9B */
1441     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9C },           /* 0x9C */
1442     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9D },           /* 0x9D */
1443     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9E },           /* 0x9E */
1444     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9F },           /* 0x9F */
1445     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_A0 },           /* 0xA0 */
1446     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A1 },            /* 0xA1 */
1447     {      0, 0xA1, 0xFC, aImplDBCSToUniTab_GB_A2 },            /* 0xA2 */
1448     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A3 },            /* 0xA3 */
1449     {      0, 0xA1, 0xF3, aImplDBCSToUniTab_GB_A4 },            /* 0xA4 */
1450     {      0, 0xA1, 0xF6, aImplDBCSToUniTab_GB_A5 },            /* 0xA5 */
1451     {      0, 0xA1, 0xF5, aImplDBCSToUniTab_GB_A6 },            /* 0xA6 */
1452     {      0, 0xA1, 0xF1, aImplDBCSToUniTab_GB_A7 },            /* 0xA7 */
1453     {      0, 0x40, 0xE9, aImplDBCSToUniTab_GBK_A8 },           /* 0xA8 */
1454     {      0, 0x40, 0xEF, aImplDBCSToUniTab_GBK_A9 },           /* 0xA9 */
1455     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AA },           /* 0xAA */
1456     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AB },           /* 0xAB */
1457     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AC },           /* 0xAC */
1458     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AD },           /* 0xAD */
1459     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AE },           /* 0xAE */
1460     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AF },           /* 0xAF */
1461     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B0 },           /* 0xB0 */
1462     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B1 },           /* 0xB1 */
1463     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B2 },           /* 0xB2 */
1464     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B3 },           /* 0xB3 */
1465     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B4 },           /* 0xB4 */
1466     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B5 },           /* 0xB5 */
1467     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B6 },           /* 0xB6 */
1468     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B7 },           /* 0xB7 */
1469     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B8 },           /* 0xB8 */
1470     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B9 },           /* 0xB9 */
1471     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BA },           /* 0xBA */
1472     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BB },           /* 0xBB */
1473     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BC },           /* 0xBC */
1474     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BD },           /* 0xBD */
1475     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BE },           /* 0xBE */
1476     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BF },           /* 0xBF */
1477     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C0 },           /* 0xC0 */
1478     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C1 },           /* 0xC1 */
1479     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C2 },           /* 0xC2 */
1480     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C3 },           /* 0xC3 */
1481     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C4 },           /* 0xC4 */
1482     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C5 },           /* 0xC5 */
1483     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C6 },           /* 0xC6 */
1484     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C7 },           /* 0xC7 */
1485     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C8 },           /* 0xC8 */
1486     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C9 },           /* 0xC9 */
1487     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CA },           /* 0xCA */
1488     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CB },           /* 0xCB */
1489     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CC },           /* 0xCC */
1490     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CD },           /* 0xCD */
1491     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CE },           /* 0xCE */
1492     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CF },           /* 0xCF */
1493     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D0 },           /* 0xD0 */
1494     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D1 },           /* 0xD1 */
1495     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D2 },           /* 0xD2 */
1496     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D3 },           /* 0xD3 */
1497     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D4 },           /* 0xD4 */
1498     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D5 },           /* 0xD5 */
1499     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D6 },           /* 0xD6 */
1500     {      0, 0x40, 0xF9, aImplDBCSToUniTab_GBK_D7 },           /* 0xD7 */
1501     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D8 },           /* 0xD8 */
1502     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D9 },           /* 0xD9 */
1503     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DA },           /* 0xDA */
1504     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DB },           /* 0xDB */
1505     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DC },           /* 0xDC */
1506     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DD },           /* 0xDD */
1507     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DE },           /* 0xDE */
1508     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DF },           /* 0xDF */
1509     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E0 },           /* 0xE0 */
1510     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E1 },           /* 0xE1 */
1511     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E2 },           /* 0xE2 */
1512     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E3 },           /* 0xE3 */
1513     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E4 },           /* 0xE4 */
1514     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E5 },           /* 0xE5 */
1515     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E6 },           /* 0xE6 */
1516     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E7 },           /* 0xE7 */
1517     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E8 },           /* 0xE8 */
1518     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E9 },           /* 0xE9 */
1519     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EA },           /* 0xEA */
1520     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EB },           /* 0xEB */
1521     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EC },           /* 0xEC */
1522     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_ED },           /* 0xED */
1523     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EE },           /* 0xEE */
1524     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EF },           /* 0xEF */
1525     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F0 },           /* 0xF0 */
1526     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F1 },           /* 0xF1 */
1527     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F2 },           /* 0xF2 */
1528     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F3 },           /* 0xF3 */
1529     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F4 },           /* 0xF4 */
1530     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F5 },           /* 0xF5 */
1531     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F6 },           /* 0xF6 */
1532     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F7 },           /* 0xF7 */
1533     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_F8 },           /* 0xF8 */
1534     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_F9 },           /* 0xF9 */
1535     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FA },           /* 0xFA */
1536     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FB },           /* 0xFB */
1537     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FC },           /* 0xFC */
1538     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FD },           /* 0xFD */
1539     {      0, 0x40, 0x9F, aImplDBCSToUniTab_GBK_FE },           /* 0xFE */
1540     {      0,    1,    0, nullptr }                                /* 0xFF */
1543 /* ----------------------------------------------------------------------- */
1545 static ImplUniToDBCSHighTab const aGBKDBCSHighTab[256] =
1547     { 0x00, 0xFC, aImplUniToDBCSTab_GB_00 },                    /* 0x00 */
1548     { 0x01, 0xDC, aImplUniToDBCSTab_GB_01 },                    /* 0x01 */
1549     { 0x51, 0xD9, aImplUniToDBCSTab_GBK_02 },                   /* 0x02 */
1550     { 0x91, 0xC9, aImplUniToDBCSTab_GB_03 },                    /* 0x03 */
1551     { 0x01, 0x51, aImplUniToDBCSTab_GB_04 },                    /* 0x04 */
1552     {    1,    0, nullptr },                                       /* 0x05 */
1553     {    1,    0, nullptr },                                       /* 0x06 */
1554     {    1,    0, nullptr },                                       /* 0x07 */
1555     {    1,    0, nullptr },                                       /* 0x08 */
1556     {    1,    0, nullptr },                                       /* 0x09 */
1557     {    1,    0, nullptr },                                       /* 0x0A */
1558     {    1,    0, nullptr },                                       /* 0x0B */
1559     {    1,    0, nullptr },                                       /* 0x0C */
1560     {    1,    0, nullptr },                                       /* 0x0D */
1561     {    1,    0, nullptr },                                       /* 0x0E */
1562     {    1,    0, nullptr },                                       /* 0x0F */
1563     {    1,    0, nullptr },                                       /* 0x10 */
1564     {    1,    0, nullptr },                                       /* 0x11 */
1565     {    1,    0, nullptr },                                       /* 0x12 */
1566     {    1,    0, nullptr },                                       /* 0x13 */
1567     {    1,    0, nullptr },                                       /* 0x14 */
1568     {    1,    0, nullptr },                                       /* 0x15 */
1569     {    1,    0, nullptr },                                       /* 0x16 */
1570     {    1,    0, nullptr },                                       /* 0x17 */
1571     {    1,    0, nullptr },                                       /* 0x18 */
1572     {    1,    0, nullptr },                                       /* 0x19 */
1573     {    1,    0, nullptr },                                       /* 0x1A */
1574     {    1,    0, nullptr },                                       /* 0x1B */
1575     {    1,    0, nullptr },                                       /* 0x1C */
1576     {    1,    0, nullptr },                                       /* 0x1D */
1577     { 0x3F, 0x3F, aImplUniToDBCSTab_APPLECHINSIMP_1E },         /* 0x1E */ /* we convert this char also to unicode */
1578     {    1,    0, nullptr },                                       /* 0x1F */
1579     { 0x10, 0xAC, aImplUniToDBCSTab_GBK_20 },                   /* 0x20 */
1580     { 0x03, 0x99, aImplUniToDBCSTab_GBK_21 },                   /* 0x21 */
1581     { 0x08, 0xEF, aImplUniToDBCSTab_GBK_22 },                   /* 0x22 */
1582     { 0x12, 0x12, aImplUniToDBCSTab_GB_23 },                    /* 0x23 */
1583     { 0x60, 0x9B, aImplUniToDBCSTab_GB_24 },                    /* 0x24 */
1584     { 0x00, 0xE5, aImplUniToDBCSTab_GBK_25 },                   /* 0x25 */
1585     { 0x05, 0x42, aImplUniToDBCSTab_GBK_26 },                   /* 0x26 */
1586     {    1,    0, nullptr },                                       /* 0x27 */
1587     {    1,    0, nullptr },                                       /* 0x28 */
1588     {    1,    0, nullptr },                                       /* 0x29 */
1589     {    1,    0, nullptr },                                       /* 0x2A */
1590     {    1,    0, nullptr },                                       /* 0x2B */
1591     {    1,    0, nullptr },                                       /* 0x2C */
1592     {    1,    0, nullptr },                                       /* 0x2D */
1593     { 0x81, 0xCA, aImplUniToDBCSTab_GBK_2E },                   /* 0x2E */
1594     {    1,    0, nullptr },                                       /* 0x2F */
1595     { 0x00, 0xFE, aImplUniToDBCSTab_GBK_30 },                   /* 0x30 */
1596     { 0x05, 0x29, aImplUniToDBCSTab_GB_31 },                    /* 0x31 */
1597     { 0x20, 0xA3, aImplUniToDBCSTab_GBK_32 },                   /* 0x32 */
1598     { 0x8E, 0xD5, aImplUniToDBCSTab_GBK_33 },                   /* 0x33 */
1599     { 0x47, 0x73, aImplUniToDBCSTab_GBK_34 },                   /* 0x34 */
1600     { 0x9E, 0x9E, aImplUniToDBCSTab_GBK_35 },                   /* 0x35 */
1601     { 0x0E, 0x1A, aImplUniToDBCSTab_GBK_36 },                   /* 0x36 */
1602     {    1,    0, nullptr },                                       /* 0x37 */
1603     {    1,    0, nullptr },                                       /* 0x38 */
1604     { 0x18, 0xDF, aImplUniToDBCSTab_GBK_39 },                   /* 0x39 */
1605     { 0x73, 0x73, aImplUniToDBCSTab_GBK_3A },                   /* 0x3A */
1606     { 0x4E, 0x4E, aImplUniToDBCSTab_GBK_3B },                   /* 0x3B */
1607     { 0x6E, 0xE0, aImplUniToDBCSTab_GBK_3C },                   /* 0x3C */
1608     {    1,    0, nullptr },                                       /* 0x3D */
1609     {    1,    0, nullptr },                                       /* 0x3E */
1610     {    1,    0, nullptr },                                       /* 0x3F */
1611     { 0x56, 0x56, aImplUniToDBCSTab_GBK_40 },                   /* 0x40 */
1612     { 0x5F, 0x5F, aImplUniToDBCSTab_GBK_41 },                   /* 0x41 */
1613     {    1,    0, nullptr },                                       /* 0x42 */
1614     { 0x37, 0xDD, aImplUniToDBCSTab_GBK_43 },                   /* 0x43 */
1615     { 0xD6, 0xD6, aImplUniToDBCSTab_GBK_44 },                   /* 0x44 */
1616     {    1,    0, nullptr },                                       /* 0x45 */
1617     { 0x4C, 0x61, aImplUniToDBCSTab_GBK_46 },                   /* 0x46 */
1618     { 0x23, 0x8D, aImplUniToDBCSTab_GBK_47 },                   /* 0x47 */
1619     {    1,    0, nullptr },                                       /* 0x48 */
1620     { 0x47, 0xB7, aImplUniToDBCSTab_GBK_49 },                   /* 0x49 */
1621     {    1,    0, nullptr },                                       /* 0x4A */
1622     {    1,    0, nullptr },                                       /* 0x4B */
1623     { 0x77, 0xA3, aImplUniToDBCSTab_GBK_4C },                   /* 0x4C */
1624     { 0x13, 0xAE, aImplUniToDBCSTab_GBK_4D },                   /* 0x4D */
1625     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_4E },                   /* 0x4E */
1626     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_4F },                   /* 0x4F */
1627     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_50 },                   /* 0x50 */
1628     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_51 },                   /* 0x51 */
1629     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_52 },                   /* 0x52 */
1630     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_53 },                   /* 0x53 */
1631     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_54 },                   /* 0x54 */
1632     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_55 },                   /* 0x55 */
1633     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_56 },                   /* 0x56 */
1634     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_57 },                   /* 0x57 */
1635     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_58 },                   /* 0x58 */
1636     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_59 },                   /* 0x59 */
1637     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5A },                   /* 0x5A */
1638     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5B },                   /* 0x5B */
1639     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5C },                   /* 0x5C */
1640     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5D },                   /* 0x5D */
1641     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5E },                   /* 0x5E */
1642     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5F },                   /* 0x5F */
1643     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_60 },                   /* 0x60 */
1644     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_61 },                   /* 0x61 */
1645     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_62 },                   /* 0x62 */
1646     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_63 },                   /* 0x63 */
1647     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_64 },                   /* 0x64 */
1648     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_65 },                   /* 0x65 */
1649     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_66 },                   /* 0x66 */
1650     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_67 },                   /* 0x67 */
1651     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_68 },                   /* 0x68 */
1652     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_69 },                   /* 0x69 */
1653     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6A },                   /* 0x6A */
1654     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6B },                   /* 0x6B */
1655     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6C },                   /* 0x6C */
1656     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6D },                   /* 0x6D */
1657     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6E },                   /* 0x6E */
1658     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6F },                   /* 0x6F */
1659     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_70 },                   /* 0x70 */
1660     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_71 },                   /* 0x71 */
1661     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_72 },                   /* 0x72 */
1662     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_73 },                   /* 0x73 */
1663     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_74 },                   /* 0x74 */
1664     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_75 },                   /* 0x75 */
1665     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_76 },                   /* 0x76 */
1666     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_77 },                   /* 0x77 */
1667     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_78 },                   /* 0x78 */
1668     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_79 },                   /* 0x79 */
1669     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7A },                   /* 0x7A */
1670     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7B },                   /* 0x7B */
1671     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7C },                   /* 0x7C */
1672     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7D },                   /* 0x7D */
1673     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7E },                   /* 0x7E */
1674     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7F },                   /* 0x7F */
1675     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_80 },                   /* 0x80 */
1676     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_81 },                   /* 0x81 */
1677     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_82 },                   /* 0x82 */
1678     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_83 },                   /* 0x83 */
1679     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_84 },                   /* 0x84 */
1680     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_85 },                   /* 0x85 */
1681     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_86 },                   /* 0x86 */
1682     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_87 },                   /* 0x87 */
1683     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_88 },                   /* 0x88 */
1684     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_89 },                   /* 0x89 */
1685     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8A },                   /* 0x8A */
1686     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8B },                   /* 0x8B */
1687     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8C },                   /* 0x8C */
1688     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8D },                   /* 0x8D */
1689     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8E },                   /* 0x8E */
1690     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8F },                   /* 0x8F */
1691     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_90 },                   /* 0x90 */
1692     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_91 },                   /* 0x91 */
1693     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_92 },                   /* 0x92 */
1694     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_93 },                   /* 0x93 */
1695     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_94 },                   /* 0x94 */
1696     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_95 },                   /* 0x95 */
1697     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_96 },                   /* 0x96 */
1698     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_97 },                   /* 0x97 */
1699     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_98 },                   /* 0x98 */
1700     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_99 },                   /* 0x99 */
1701     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9A },                   /* 0x9A */
1702     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9B },                   /* 0x9B */
1703     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9C },                   /* 0x9C */
1704     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9D },                   /* 0x9D */
1705     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9E },                   /* 0x9E */
1706     { 0x00, 0xA5, aImplUniToDBCSTab_GBK_9F },                   /* 0x9F */
1707     {    1,    0, nullptr },                                       /* 0xA0 */
1708     {    1,    0, nullptr },                                       /* 0xA1 */
1709     {    1,    0, nullptr },                                       /* 0xA2 */
1710     {    1,    0, nullptr },                                       /* 0xA3 */
1711     {    1,    0, nullptr },                                       /* 0xA4 */
1712     {    1,    0, nullptr },                                       /* 0xA5 */
1713     {    1,    0, nullptr },                                       /* 0xA6 */
1714     {    1,    0, nullptr },                                       /* 0xA7 */
1715     {    1,    0, nullptr },                                       /* 0xA8 */
1716     {    1,    0, nullptr },                                       /* 0xA9 */
1717     {    1,    0, nullptr },                                       /* 0xAA */
1718     {    1,    0, nullptr },                                       /* 0xAB */
1719     {    1,    0, nullptr },                                       /* 0xAC */
1720     {    1,    0, nullptr },                                       /* 0xAD */
1721     {    1,    0, nullptr },                                       /* 0xAE */
1722     {    1,    0, nullptr },                                       /* 0xAF */
1723     {    1,    0, nullptr },                                       /* 0xB0 */
1724     {    1,    0, nullptr },                                       /* 0xB1 */
1725     {    1,    0, nullptr },                                       /* 0xB2 */
1726     {    1,    0, nullptr },                                       /* 0xB3 */
1727     {    1,    0, nullptr },                                       /* 0xB4 */
1728     {    1,    0, nullptr },                                       /* 0xB5 */
1729     {    1,    0, nullptr },                                       /* 0xB6 */
1730     {    1,    0, nullptr },                                       /* 0xB7 */
1731     {    1,    0, nullptr },                                       /* 0xB8 */
1732     {    1,    0, nullptr },                                       /* 0xB9 */
1733     {    1,    0, nullptr },                                       /* 0xBA */
1734     {    1,    0, nullptr },                                       /* 0xBB */
1735     {    1,    0, nullptr },                                       /* 0xBC */
1736     {    1,    0, nullptr },                                       /* 0xBD */
1737     {    1,    0, nullptr },                                       /* 0xBE */
1738     {    1,    0, nullptr },                                       /* 0xBF */
1739     {    1,    0, nullptr },                                       /* 0xC0 */
1740     {    1,    0, nullptr },                                       /* 0xC1 */
1741     {    1,    0, nullptr },                                       /* 0xC2 */
1742     {    1,    0, nullptr },                                       /* 0xC3 */
1743     {    1,    0, nullptr },                                       /* 0xC4 */
1744     {    1,    0, nullptr },                                       /* 0xC5 */
1745     {    1,    0, nullptr },                                       /* 0xC6 */
1746     {    1,    0, nullptr },                                       /* 0xC7 */
1747     {    1,    0, nullptr },                                       /* 0xC8 */
1748     {    1,    0, nullptr },                                       /* 0xC9 */
1749     {    1,    0, nullptr },                                       /* 0xCA */
1750     {    1,    0, nullptr },                                       /* 0xCB */
1751     {    1,    0, nullptr },                                       /* 0xCC */
1752     {    1,    0, nullptr },                                       /* 0xCD */
1753     {    1,    0, nullptr },                                       /* 0xCE */
1754     {    1,    0, nullptr },                                       /* 0xCF */
1755     {    1,    0, nullptr },                                       /* 0xD0 */
1756     {    1,    0, nullptr },                                       /* 0xD1 */
1757     {    1,    0, nullptr },                                       /* 0xD2 */
1758     {    1,    0, nullptr },                                       /* 0xD3 */
1759     {    1,    0, nullptr },                                       /* 0xD4 */
1760     {    1,    0, nullptr },                                       /* 0xD5 */
1761     {    1,    0, nullptr },                                       /* 0xD6 */
1762     {    1,    0, nullptr },                                       /* 0xD7 */
1763     {    1,    0, nullptr },                                       /* 0xD8 */
1764     {    1,    0, nullptr },                                       /* 0xD9 */
1765     {    1,    0, nullptr },                                       /* 0xDA */
1766     {    1,    0, nullptr },                                       /* 0xDB */
1767     {    1,    0, nullptr },                                       /* 0xDC */
1768     {    1,    0, nullptr },                                       /* 0xDD */
1769     {    1,    0, nullptr },                                       /* 0xDE */
1770     {    1,    0, nullptr },                                       /* 0xDF */
1771     {    1,    0, nullptr },                                       /* 0xE0 */
1772     {    1,    0, nullptr },                                       /* 0xE1 */
1773     {    1,    0, nullptr },                                       /* 0xE2 */
1774     {    1,    0, nullptr },                                       /* 0xE3 */
1775     {    1,    0, nullptr },                                       /* 0xE4 */
1776     {    1,    0, nullptr },                                       /* 0xE5 */
1777     {    1,    0, nullptr },                                       /* 0xE6 */
1778     {    1,    0, nullptr },                                       /* 0xE7 */
1779     {    1,    0, nullptr },                                       /* 0xE8 */
1780     {    1,    0, nullptr },                                       /* 0xE9 */
1781     {    1,    0, nullptr },                                       /* 0xEA */
1782     {    1,    0, nullptr },                                       /* 0xEB */
1783     {    1,    0, nullptr },                                       /* 0xEC */
1784     {    1,    0, nullptr },                                       /* 0xED */
1785     {    1,    0, nullptr },                                       /* 0xEE */
1786     {    1,    0, nullptr },                                       /* 0xEF */
1787     {    1,    0, nullptr },                                       /* 0xF0 */
1788     {    1,    0, nullptr },                                       /* 0xF1 */
1789     {    1,    0, nullptr },                                       /* 0xF2 */
1790     {    1,    0, nullptr },                                       /* 0xF3 */
1791     {    1,    0, nullptr },                                       /* 0xF4 */
1792     {    1,    0, nullptr },                                       /* 0xF5 */
1793     {    1,    0, nullptr },                                       /* 0xF6 */
1794     {    1,    0, nullptr },                                       /* 0xF7 */
1795     {    1,    0, nullptr },                                       /* 0xF8 */
1796     { 0x2C, 0xF1, aImplUniToDBCSTab_GBK_F9 },                   /* 0xF9 */
1797     { 0x0C, 0x29, aImplUniToDBCSTab_GBK_FA },                   /* 0xFA */
1798     {    1,    0, nullptr },                                       /* 0xFB */
1799     {    1,    0, nullptr },                                       /* 0xFC */
1800     {    1,    0, nullptr },                                       /* 0xFD */
1801     { 0x30, 0x6B, aImplUniToDBCSTab_GBK_FE },                   /* 0xFE */
1802     { 0x01, 0xE5, aImplUniToDBCSTab_GBK_FF }                    /* 0xFF */
1805 /* ----------------------------------------------------------------------- */
1807 static ImplDBCSConvertData const aImplGBKDBCSCvtData =
1809     aGBKUniLeadTab,
1810     aGBKDBCSHighTab,
1811     0x00, 0xFF,
1812     0x40, 0xFE,
1813     aImplMS936DBCSEUDCTab,
1814     DBCS_EUDC_MS936_COUNT
1817 /* ----------------------------------------------------------------------- */
1819 static ImplTextEncodingData const aImplGBKTextEncodingData
1820     = { { &aImplGBKDBCSCvtData,
1821           ImplDBCSToUnicode,
1822           ImplUnicodeToDBCS,
1823           nullptr,
1824           nullptr,
1825           nullptr,
1826           nullptr,
1827           nullptr,
1828           nullptr },
1829         1,
1830         2,
1831         2,
1832         134,
1833         "euc-cn",
1834         "GBK",
1835         RTL_TEXTENCODING_INFO_MULTIBYTE | RTL_TEXTENCODING_INFO_MIME };
1836     /* SCRIPT_CHINESE_SIMPLIFIED, pc code page 936, mac encoding 25 */
1838 /* ======================================================================= */
1840 static ImplDBCSToUniLeadTab const aMS936UniLeadTab[256] =
1842     { 0x0000,    0,    0, nullptr },                               /* 0x00 */
1843     { 0x0001,    0,    0, nullptr },                               /* 0x01 */
1844     { 0x0002,    0,    0, nullptr },                               /* 0x02 */
1845     { 0x0003,    0,    0, nullptr },                               /* 0x03 */
1846     { 0x0004,    0,    0, nullptr },                               /* 0x04 */
1847     { 0x0005,    0,    0, nullptr },                               /* 0x05 */
1848     { 0x0006,    0,    0, nullptr },                               /* 0x06 */
1849     { 0x0007,    0,    0, nullptr },                               /* 0x07 */
1850     { 0x0008,    0,    0, nullptr },                               /* 0x08 */
1851     { 0x0009,    0,    0, nullptr },                               /* 0x09 */
1852     { 0x000A,    0,    0, nullptr },                               /* 0x0A */
1853     { 0x000B,    0,    0, nullptr },                               /* 0x0B */
1854     { 0x000C,    0,    0, nullptr },                               /* 0x0C */
1855     { 0x000D,    0,    0, nullptr },                               /* 0x0D */
1856     { 0x000E,    0,    0, nullptr },                               /* 0x0E */
1857     { 0x000F,    0,    0, nullptr },                               /* 0x0F */
1858     { 0x0010,    0,    0, nullptr },                               /* 0x10 */
1859     { 0x0011,    0,    0, nullptr },                               /* 0x11 */
1860     { 0x0012,    0,    0, nullptr },                               /* 0x12 */
1861     { 0x0013,    0,    0, nullptr },                               /* 0x13 */
1862     { 0x0014,    0,    0, nullptr },                               /* 0x14 */
1863     { 0x0015,    0,    0, nullptr },                               /* 0x15 */
1864     { 0x0016,    0,    0, nullptr },                               /* 0x16 */
1865     { 0x0017,    0,    0, nullptr },                               /* 0x17 */
1866     { 0x0018,    0,    0, nullptr },                               /* 0x18 */
1867     { 0x0019,    0,    0, nullptr },                               /* 0x19 */
1868     { 0x001A,    0,    0, nullptr },                               /* 0x1A */
1869     { 0x001B,    0,    0, nullptr },                               /* 0x1B */
1870     { 0x001C,    0,    0, nullptr },                               /* 0x1C */
1871     { 0x001D,    0,    0, nullptr },                               /* 0x1D */
1872     { 0x001E,    0,    0, nullptr },                               /* 0x1E */
1873     { 0x001F,    0,    0, nullptr },                               /* 0x1F */
1874     { 0x0020,    0,    0, nullptr },                               /* 0x20 */
1875     { 0x0021,    0,    0, nullptr },                               /* 0x21 */
1876     { 0x0022,    0,    0, nullptr },                               /* 0x22 */
1877     { 0x0023,    0,    0, nullptr },                               /* 0x23 */
1878     { 0x0024,    0,    0, nullptr },                               /* 0x24 */
1879     { 0x0025,    0,    0, nullptr },                               /* 0x25 */
1880     { 0x0026,    0,    0, nullptr },                               /* 0x26 */
1881     { 0x0027,    0,    0, nullptr },                               /* 0x27 */
1882     { 0x0028,    0,    0, nullptr },                               /* 0x28 */
1883     { 0x0029,    0,    0, nullptr },                               /* 0x29 */
1884     { 0x002A,    0,    0, nullptr },                               /* 0x2A */
1885     { 0x002B,    0,    0, nullptr },                               /* 0x2B */
1886     { 0x002C,    0,    0, nullptr },                               /* 0x2C */
1887     { 0x002D,    0,    0, nullptr },                               /* 0x2D */
1888     { 0x002E,    0,    0, nullptr },                               /* 0x2E */
1889     { 0x002F,    0,    0, nullptr },                               /* 0x2F */
1890     { 0x0030,    0,    0, nullptr },                               /* 0x30 */
1891     { 0x0031,    0,    0, nullptr },                               /* 0x31 */
1892     { 0x0032,    0,    0, nullptr },                               /* 0x32 */
1893     { 0x0033,    0,    0, nullptr },                               /* 0x33 */
1894     { 0x0034,    0,    0, nullptr },                               /* 0x34 */
1895     { 0x0035,    0,    0, nullptr },                               /* 0x35 */
1896     { 0x0036,    0,    0, nullptr },                               /* 0x36 */
1897     { 0x0037,    0,    0, nullptr },                               /* 0x37 */
1898     { 0x0038,    0,    0, nullptr },                               /* 0x38 */
1899     { 0x0039,    0,    0, nullptr },                               /* 0x39 */
1900     { 0x003A,    0,    0, nullptr },                               /* 0x3A */
1901     { 0x003B,    0,    0, nullptr },                               /* 0x3B */
1902     { 0x003C,    0,    0, nullptr },                               /* 0x3C */
1903     { 0x003D,    0,    0, nullptr },                               /* 0x3D */
1904     { 0x003E,    0,    0, nullptr },                               /* 0x3E */
1905     { 0x003F,    0,    0, nullptr },                               /* 0x3F */
1906     { 0x0040,    0,    0, nullptr },                               /* 0x40 */
1907     { 0x0041,    0,    0, nullptr },                               /* 0x41 */
1908     { 0x0042,    0,    0, nullptr },                               /* 0x42 */
1909     { 0x0043,    0,    0, nullptr },                               /* 0x43 */
1910     { 0x0044,    0,    0, nullptr },                               /* 0x44 */
1911     { 0x0045,    0,    0, nullptr },                               /* 0x45 */
1912     { 0x0046,    0,    0, nullptr },                               /* 0x46 */
1913     { 0x0047,    0,    0, nullptr },                               /* 0x47 */
1914     { 0x0048,    0,    0, nullptr },                               /* 0x48 */
1915     { 0x0049,    0,    0, nullptr },                               /* 0x49 */
1916     { 0x004A,    0,    0, nullptr },                               /* 0x4A */
1917     { 0x004B,    0,    0, nullptr },                               /* 0x4B */
1918     { 0x004C,    0,    0, nullptr },                               /* 0x4C */
1919     { 0x004D,    0,    0, nullptr },                               /* 0x4D */
1920     { 0x004E,    0,    0, nullptr },                               /* 0x4E */
1921     { 0x004F,    0,    0, nullptr },                               /* 0x4F */
1922     { 0x0050,    0,    0, nullptr },                               /* 0x50 */
1923     { 0x0051,    0,    0, nullptr },                               /* 0x51 */
1924     { 0x0052,    0,    0, nullptr },                               /* 0x52 */
1925     { 0x0053,    0,    0, nullptr },                               /* 0x53 */
1926     { 0x0054,    0,    0, nullptr },                               /* 0x54 */
1927     { 0x0055,    0,    0, nullptr },                               /* 0x55 */
1928     { 0x0056,    0,    0, nullptr },                               /* 0x56 */
1929     { 0x0057,    0,    0, nullptr },                               /* 0x57 */
1930     { 0x0058,    0,    0, nullptr },                               /* 0x58 */
1931     { 0x0059,    0,    0, nullptr },                               /* 0x59 */
1932     { 0x005A,    0,    0, nullptr },                               /* 0x5A */
1933     { 0x005B,    0,    0, nullptr },                               /* 0x5B */
1934     { 0x005C,    0,    0, nullptr },                               /* 0x5C */
1935     { 0x005D,    0,    0, nullptr },                               /* 0x5D */
1936     { 0x005E,    0,    0, nullptr },                               /* 0x5E */
1937     { 0x005F,    0,    0, nullptr },                               /* 0x5F */
1938     { 0x0060,    0,    0, nullptr },                               /* 0x60 */
1939     { 0x0061,    0,    0, nullptr },                               /* 0x61 */
1940     { 0x0062,    0,    0, nullptr },                               /* 0x62 */
1941     { 0x0063,    0,    0, nullptr },                               /* 0x63 */
1942     { 0x0064,    0,    0, nullptr },                               /* 0x64 */
1943     { 0x0065,    0,    0, nullptr },                               /* 0x65 */
1944     { 0x0066,    0,    0, nullptr },                               /* 0x66 */
1945     { 0x0067,    0,    0, nullptr },                               /* 0x67 */
1946     { 0x0068,    0,    0, nullptr },                               /* 0x68 */
1947     { 0x0069,    0,    0, nullptr },                               /* 0x69 */
1948     { 0x006A,    0,    0, nullptr },                               /* 0x6A */
1949     { 0x006B,    0,    0, nullptr },                               /* 0x6B */
1950     { 0x006C,    0,    0, nullptr },                               /* 0x6C */
1951     { 0x006D,    0,    0, nullptr },                               /* 0x6D */
1952     { 0x006E,    0,    0, nullptr },                               /* 0x6E */
1953     { 0x006F,    0,    0, nullptr },                               /* 0x6F */
1954     { 0x0070,    0,    0, nullptr },                               /* 0x70 */
1955     { 0x0071,    0,    0, nullptr },                               /* 0x71 */
1956     { 0x0072,    0,    0, nullptr },                               /* 0x72 */
1957     { 0x0073,    0,    0, nullptr },                               /* 0x73 */
1958     { 0x0074,    0,    0, nullptr },                               /* 0x74 */
1959     { 0x0075,    0,    0, nullptr },                               /* 0x75 */
1960     { 0x0076,    0,    0, nullptr },                               /* 0x76 */
1961     { 0x0077,    0,    0, nullptr },                               /* 0x77 */
1962     { 0x0078,    0,    0, nullptr },                               /* 0x78 */
1963     { 0x0079,    0,    0, nullptr },                               /* 0x79 */
1964     { 0x007A,    0,    0, nullptr },                               /* 0x7A */
1965     { 0x007B,    0,    0, nullptr },                               /* 0x7B */
1966     { 0x007C,    0,    0, nullptr },                               /* 0x7C */
1967     { 0x007D,    0,    0, nullptr },                               /* 0x7D */
1968     { 0x007E,    0,    0, nullptr },                               /* 0x7E */
1969     { 0x007F,    0,    0, nullptr },                               /* 0x7F */
1970     { 0x20AC,    0,    0, nullptr },                               /* 0x80 */
1971     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_81 },           /* 0x81 */
1972     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_82 },           /* 0x82 */
1973     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_83 },           /* 0x83 */
1974     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_84 },           /* 0x84 */
1975     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_85 },           /* 0x85 */
1976     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_86 },           /* 0x86 */
1977     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_87 },           /* 0x87 */
1978     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_88 },           /* 0x88 */
1979     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_89 },           /* 0x89 */
1980     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8A },           /* 0x8A */
1981     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8B },           /* 0x8B */
1982     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8C },           /* 0x8C */
1983     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8D },           /* 0x8D */
1984     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8E },           /* 0x8E */
1985     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_8F },           /* 0x8F */
1986     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_90 },           /* 0x90 */
1987     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_91 },           /* 0x91 */
1988     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_92 },           /* 0x92 */
1989     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_93 },           /* 0x93 */
1990     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_94 },           /* 0x94 */
1991     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_95 },           /* 0x95 */
1992     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_96 },           /* 0x96 */
1993     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_97 },           /* 0x97 */
1994     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_98 },           /* 0x98 */
1995     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_99 },           /* 0x99 */
1996     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9A },           /* 0x9A */
1997     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9B },           /* 0x9B */
1998     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9C },           /* 0x9C */
1999     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9D },           /* 0x9D */
2000     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9E },           /* 0x9E */
2001     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_9F },           /* 0x9F */
2002     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_A0 },           /* 0xA0 */
2003     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A1 },            /* 0xA1 */
2004     {      0, 0xA1, 0xFC, aImplDBCSToUniTab_GB_A2 },            /* 0xA2 */
2005     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A3 },            /* 0xA3 */
2006     {      0, 0xA1, 0xF3, aImplDBCSToUniTab_GB_A4 },            /* 0xA4 */
2007     {      0, 0xA1, 0xF6, aImplDBCSToUniTab_GB_A5 },            /* 0xA5 */
2008     {      0, 0xA1, 0xF5, aImplDBCSToUniTab_GB_A6 },            /* 0xA6 */
2009     {      0, 0xA1, 0xF1, aImplDBCSToUniTab_GB_A7 },            /* 0xA7 */
2010     {      0, 0x40, 0xE9, aImplDBCSToUniTab_GBK_A8 },           /* 0xA8 */
2011     {      0, 0x40, 0xEF, aImplDBCSToUniTab_GBK_A9 },           /* 0xA9 */
2012     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AA },           /* 0xAA */
2013     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AB },           /* 0xAB */
2014     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AC },           /* 0xAC */
2015     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AD },           /* 0xAD */
2016     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AE },           /* 0xAE */
2017     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_AF },           /* 0xAF */
2018     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B0 },           /* 0xB0 */
2019     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B1 },           /* 0xB1 */
2020     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B2 },           /* 0xB2 */
2021     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B3 },           /* 0xB3 */
2022     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B4 },           /* 0xB4 */
2023     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B5 },           /* 0xB5 */
2024     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B6 },           /* 0xB6 */
2025     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B7 },           /* 0xB7 */
2026     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B8 },           /* 0xB8 */
2027     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_B9 },           /* 0xB9 */
2028     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BA },           /* 0xBA */
2029     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BB },           /* 0xBB */
2030     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BC },           /* 0xBC */
2031     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BD },           /* 0xBD */
2032     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BE },           /* 0xBE */
2033     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_BF },           /* 0xBF */
2034     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C0 },           /* 0xC0 */
2035     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C1 },           /* 0xC1 */
2036     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C2 },           /* 0xC2 */
2037     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C3 },           /* 0xC3 */
2038     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C4 },           /* 0xC4 */
2039     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C5 },           /* 0xC5 */
2040     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C6 },           /* 0xC6 */
2041     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C7 },           /* 0xC7 */
2042     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C8 },           /* 0xC8 */
2043     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_C9 },           /* 0xC9 */
2044     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CA },           /* 0xCA */
2045     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CB },           /* 0xCB */
2046     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CC },           /* 0xCC */
2047     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CD },           /* 0xCD */
2048     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CE },           /* 0xCE */
2049     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_CF },           /* 0xCF */
2050     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D0 },           /* 0xD0 */
2051     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D1 },           /* 0xD1 */
2052     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D2 },           /* 0xD2 */
2053     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D3 },           /* 0xD3 */
2054     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D4 },           /* 0xD4 */
2055     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D5 },           /* 0xD5 */
2056     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D6 },           /* 0xD6 */
2057     {      0, 0x40, 0xF9, aImplDBCSToUniTab_GBK_D7 },           /* 0xD7 */
2058     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D8 },           /* 0xD8 */
2059     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_D9 },           /* 0xD9 */
2060     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DA },           /* 0xDA */
2061     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DB },           /* 0xDB */
2062     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DC },           /* 0xDC */
2063     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DD },           /* 0xDD */
2064     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DE },           /* 0xDE */
2065     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_DF },           /* 0xDF */
2066     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E0 },           /* 0xE0 */
2067     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E1 },           /* 0xE1 */
2068     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E2 },           /* 0xE2 */
2069     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E3 },           /* 0xE3 */
2070     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E4 },           /* 0xE4 */
2071     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E5 },           /* 0xE5 */
2072     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E6 },           /* 0xE6 */
2073     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E7 },           /* 0xE7 */
2074     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E8 },           /* 0xE8 */
2075     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_E9 },           /* 0xE9 */
2076     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EA },           /* 0xEA */
2077     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EB },           /* 0xEB */
2078     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EC },           /* 0xEC */
2079     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_ED },           /* 0xED */
2080     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EE },           /* 0xEE */
2081     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_EF },           /* 0xEF */
2082     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F0 },           /* 0xF0 */
2083     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F1 },           /* 0xF1 */
2084     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F2 },           /* 0xF2 */
2085     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F3 },           /* 0xF3 */
2086     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F4 },           /* 0xF4 */
2087     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F5 },           /* 0xF5 */
2088     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F6 },           /* 0xF6 */
2089     {      0, 0x40, 0xFE, aImplDBCSToUniTab_GBK_F7 },           /* 0xF7 */
2090     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_F8 },           /* 0xF8 */
2091     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_F9 },           /* 0xF9 */
2092     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FA },           /* 0xFA */
2093     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FB },           /* 0xFB */
2094     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FC },           /* 0xFC */
2095     {      0, 0x40, 0xA0, aImplDBCSToUniTab_GBK_FD },           /* 0xFD */
2096     {      0, 0x40, 0x4F, aImplDBCSToUniTab_GBK_FE },           /* 0xFE */
2097     {      0,    1,    0, nullptr }                                /* 0xFF */
2100 /* ----------------------------------------------------------------------- */
2102 static ImplUniToDBCSHighTab const aMS936DBCSHighTab[256] =
2104     { 0x00, 0xFC, aImplUniToDBCSTab_GB_00 },                    /* 0x00 */
2105     { 0x01, 0xDC, aImplUniToDBCSTab_GB_01 },                    /* 0x01 */
2106     { 0x51, 0xD9, aImplUniToDBCSTab_GBK_02 },                   /* 0x02 */
2107     { 0x91, 0xC9, aImplUniToDBCSTab_GB_03 },                    /* 0x03 */
2108     { 0x01, 0x51, aImplUniToDBCSTab_GB_04 },                    /* 0x04 */
2109     {    1,    0, nullptr },                                       /* 0x05 */
2110     {    1,    0, nullptr },                                       /* 0x06 */
2111     {    1,    0, nullptr },                                       /* 0x07 */
2112     {    1,    0, nullptr },                                       /* 0x08 */
2113     {    1,    0, nullptr },                                       /* 0x09 */
2114     {    1,    0, nullptr },                                       /* 0x0A */
2115     {    1,    0, nullptr },                                       /* 0x0B */
2116     {    1,    0, nullptr },                                       /* 0x0C */
2117     {    1,    0, nullptr },                                       /* 0x0D */
2118     {    1,    0, nullptr },                                       /* 0x0E */
2119     {    1,    0, nullptr },                                       /* 0x0F */
2120     {    1,    0, nullptr },                                       /* 0x10 */
2121     {    1,    0, nullptr },                                       /* 0x11 */
2122     {    1,    0, nullptr },                                       /* 0x12 */
2123     {    1,    0, nullptr },                                       /* 0x13 */
2124     {    1,    0, nullptr },                                       /* 0x14 */
2125     {    1,    0, nullptr },                                       /* 0x15 */
2126     {    1,    0, nullptr },                                       /* 0x16 */
2127     {    1,    0, nullptr },                                       /* 0x17 */
2128     {    1,    0, nullptr },                                       /* 0x18 */
2129     {    1,    0, nullptr },                                       /* 0x19 */
2130     {    1,    0, nullptr },                                       /* 0x1A */
2131     {    1,    0, nullptr },                                       /* 0x1B */
2132     {    1,    0, nullptr },                                       /* 0x1C */
2133     {    1,    0, nullptr },                                       /* 0x1D */
2134     { 0x3F, 0x3F, aImplUniToDBCSTab_APPLECHINSIMP_1E },         /* 0x1E */ /* we convert this char also to unicode */
2135     {    1,    0, nullptr },                                       /* 0x1F */
2136     { 0x10, 0xAC, aImplUniToDBCSTab_GBK_20 },                   /* 0x20 */
2137     { 0x03, 0x99, aImplUniToDBCSTab_GBK_21 },                   /* 0x21 */
2138     { 0x08, 0xEF, aImplUniToDBCSTab_GBK_22 },                   /* 0x22 */
2139     { 0x12, 0x12, aImplUniToDBCSTab_GB_23 },                    /* 0x23 */
2140     { 0x60, 0x9B, aImplUniToDBCSTab_GB_24 },                    /* 0x24 */
2141     { 0x00, 0xE5, aImplUniToDBCSTab_GBK_25 },                   /* 0x25 */
2142     { 0x05, 0x42, aImplUniToDBCSTab_GBK_26 },                   /* 0x26 */
2143     {    1,    0, nullptr },                                       /* 0x27 */
2144     {    1,    0, nullptr },                                       /* 0x28 */
2145     {    1,    0, nullptr },                                       /* 0x29 */
2146     {    1,    0, nullptr },                                       /* 0x2A */
2147     {    1,    0, nullptr },                                       /* 0x2B */
2148     {    1,    0, nullptr },                                       /* 0x2C */
2149     {    1,    0, nullptr },                                       /* 0x2D */
2150     {    1,    0, nullptr },                                       /* 0x2E */
2151     {    1,    0, nullptr },                                       /* 0x2F */
2152     { 0x00, 0xFE, aImplUniToDBCSTab_GBK_30 },                   /* 0x30 */
2153     { 0x05, 0x29, aImplUniToDBCSTab_GB_31 },                    /* 0x31 */
2154     { 0x20, 0xA3, aImplUniToDBCSTab_GBK_32 },                   /* 0x32 */
2155     { 0x8E, 0xD5, aImplUniToDBCSTab_GBK_33 },                   /* 0x33 */
2156     {    1,    0, nullptr },                                       /* 0x34 */
2157     {    1,    0, nullptr },                                       /* 0x35 */
2158     {    1,    0, nullptr },                                       /* 0x36 */
2159     {    1,    0, nullptr },                                       /* 0x37 */
2160     {    1,    0, nullptr },                                       /* 0x38 */
2161     {    1,    0, nullptr },                                       /* 0x39 */
2162     {    1,    0, nullptr },                                       /* 0x3A */
2163     {    1,    0, nullptr },                                       /* 0x3B */
2164     {    1,    0, nullptr },                                       /* 0x3C */
2165     {    1,    0, nullptr },                                       /* 0x3D */
2166     {    1,    0, nullptr },                                       /* 0x3E */
2167     {    1,    0, nullptr },                                       /* 0x3F */
2168     {    1,    0, nullptr },                                       /* 0x40 */
2169     {    1,    0, nullptr },                                       /* 0x41 */
2170     {    1,    0, nullptr },                                       /* 0x42 */
2171     {    1,    0, nullptr },                                       /* 0x43 */
2172     {    1,    0, nullptr },                                       /* 0x44 */
2173     {    1,    0, nullptr },                                       /* 0x45 */
2174     {    1,    0, nullptr },                                       /* 0x46 */
2175     {    1,    0, nullptr },                                       /* 0x47 */
2176     {    1,    0, nullptr },                                       /* 0x48 */
2177     {    1,    0, nullptr },                                       /* 0x49 */
2178     {    1,    0, nullptr },                                       /* 0x4A */
2179     {    1,    0, nullptr },                                       /* 0x4B */
2180     {    1,    0, nullptr },                                       /* 0x4C */
2181     {    1,    0, nullptr },                                       /* 0x4D */
2182     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_4E },                   /* 0x4E */
2183     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_4F },                   /* 0x4F */
2184     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_50 },                   /* 0x50 */
2185     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_51 },                   /* 0x51 */
2186     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_52 },                   /* 0x52 */
2187     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_53 },                   /* 0x53 */
2188     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_54 },                   /* 0x54 */
2189     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_55 },                   /* 0x55 */
2190     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_56 },                   /* 0x56 */
2191     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_57 },                   /* 0x57 */
2192     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_58 },                   /* 0x58 */
2193     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_59 },                   /* 0x59 */
2194     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5A },                   /* 0x5A */
2195     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5B },                   /* 0x5B */
2196     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5C },                   /* 0x5C */
2197     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5D },                   /* 0x5D */
2198     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5E },                   /* 0x5E */
2199     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_5F },                   /* 0x5F */
2200     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_60 },                   /* 0x60 */
2201     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_61 },                   /* 0x61 */
2202     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_62 },                   /* 0x62 */
2203     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_63 },                   /* 0x63 */
2204     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_64 },                   /* 0x64 */
2205     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_65 },                   /* 0x65 */
2206     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_66 },                   /* 0x66 */
2207     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_67 },                   /* 0x67 */
2208     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_68 },                   /* 0x68 */
2209     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_69 },                   /* 0x69 */
2210     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6A },                   /* 0x6A */
2211     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6B },                   /* 0x6B */
2212     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6C },                   /* 0x6C */
2213     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6D },                   /* 0x6D */
2214     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6E },                   /* 0x6E */
2215     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_6F },                   /* 0x6F */
2216     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_70 },                   /* 0x70 */
2217     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_71 },                   /* 0x71 */
2218     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_72 },                   /* 0x72 */
2219     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_73 },                   /* 0x73 */
2220     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_74 },                   /* 0x74 */
2221     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_75 },                   /* 0x75 */
2222     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_76 },                   /* 0x76 */
2223     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_77 },                   /* 0x77 */
2224     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_78 },                   /* 0x78 */
2225     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_79 },                   /* 0x79 */
2226     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7A },                   /* 0x7A */
2227     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7B },                   /* 0x7B */
2228     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7C },                   /* 0x7C */
2229     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7D },                   /* 0x7D */
2230     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7E },                   /* 0x7E */
2231     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_7F },                   /* 0x7F */
2232     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_80 },                   /* 0x80 */
2233     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_81 },                   /* 0x81 */
2234     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_82 },                   /* 0x82 */
2235     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_83 },                   /* 0x83 */
2236     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_84 },                   /* 0x84 */
2237     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_85 },                   /* 0x85 */
2238     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_86 },                   /* 0x86 */
2239     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_87 },                   /* 0x87 */
2240     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_88 },                   /* 0x88 */
2241     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_89 },                   /* 0x89 */
2242     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8A },                   /* 0x8A */
2243     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8B },                   /* 0x8B */
2244     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8C },                   /* 0x8C */
2245     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8D },                   /* 0x8D */
2246     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8E },                   /* 0x8E */
2247     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_8F },                   /* 0x8F */
2248     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_90 },                   /* 0x90 */
2249     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_91 },                   /* 0x91 */
2250     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_92 },                   /* 0x92 */
2251     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_93 },                   /* 0x93 */
2252     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_94 },                   /* 0x94 */
2253     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_95 },                   /* 0x95 */
2254     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_96 },                   /* 0x96 */
2255     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_97 },                   /* 0x97 */
2256     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_98 },                   /* 0x98 */
2257     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_99 },                   /* 0x99 */
2258     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9A },                   /* 0x9A */
2259     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9B },                   /* 0x9B */
2260     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9C },                   /* 0x9C */
2261     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9D },                   /* 0x9D */
2262     { 0x00, 0xFF, aImplUniToDBCSTab_GBK_9E },                   /* 0x9E */
2263     { 0x00, 0xA5, aImplUniToDBCSTab_GBK_9F },                   /* 0x9F */
2264     {    1,    0, nullptr },                                       /* 0xA0 */
2265     {    1,    0, nullptr },                                       /* 0xA1 */
2266     {    1,    0, nullptr },                                       /* 0xA2 */
2267     {    1,    0, nullptr },                                       /* 0xA3 */
2268     {    1,    0, nullptr },                                       /* 0xA4 */
2269     {    1,    0, nullptr },                                       /* 0xA5 */
2270     {    1,    0, nullptr },                                       /* 0xA6 */
2271     {    1,    0, nullptr },                                       /* 0xA7 */
2272     {    1,    0, nullptr },                                       /* 0xA8 */
2273     {    1,    0, nullptr },                                       /* 0xA9 */
2274     {    1,    0, nullptr },                                       /* 0xAA */
2275     {    1,    0, nullptr },                                       /* 0xAB */
2276     {    1,    0, nullptr },                                       /* 0xAC */
2277     {    1,    0, nullptr },                                       /* 0xAD */
2278     {    1,    0, nullptr },                                       /* 0xAE */
2279     {    1,    0, nullptr },                                       /* 0xAF */
2280     {    1,    0, nullptr },                                       /* 0xB0 */
2281     {    1,    0, nullptr },                                       /* 0xB1 */
2282     {    1,    0, nullptr },                                       /* 0xB2 */
2283     {    1,    0, nullptr },                                       /* 0xB3 */
2284     {    1,    0, nullptr },                                       /* 0xB4 */
2285     {    1,    0, nullptr },                                       /* 0xB5 */
2286     {    1,    0, nullptr },                                       /* 0xB6 */
2287     {    1,    0, nullptr },                                       /* 0xB7 */
2288     {    1,    0, nullptr },                                       /* 0xB8 */
2289     {    1,    0, nullptr },                                       /* 0xB9 */
2290     {    1,    0, nullptr },                                       /* 0xBA */
2291     {    1,    0, nullptr },                                       /* 0xBB */
2292     {    1,    0, nullptr },                                       /* 0xBC */
2293     {    1,    0, nullptr },                                       /* 0xBD */
2294     {    1,    0, nullptr },                                       /* 0xBE */
2295     {    1,    0, nullptr },                                       /* 0xBF */
2296     {    1,    0, nullptr },                                       /* 0xC0 */
2297     {    1,    0, nullptr },                                       /* 0xC1 */
2298     {    1,    0, nullptr },                                       /* 0xC2 */
2299     {    1,    0, nullptr },                                       /* 0xC3 */
2300     {    1,    0, nullptr },                                       /* 0xC4 */
2301     {    1,    0, nullptr },                                       /* 0xC5 */
2302     {    1,    0, nullptr },                                       /* 0xC6 */
2303     {    1,    0, nullptr },                                       /* 0xC7 */
2304     {    1,    0, nullptr },                                       /* 0xC8 */
2305     {    1,    0, nullptr },                                       /* 0xC9 */
2306     {    1,    0, nullptr },                                       /* 0xCA */
2307     {    1,    0, nullptr },                                       /* 0xCB */
2308     {    1,    0, nullptr },                                       /* 0xCC */
2309     {    1,    0, nullptr },                                       /* 0xCD */
2310     {    1,    0, nullptr },                                       /* 0xCE */
2311     {    1,    0, nullptr },                                       /* 0xCF */
2312     {    1,    0, nullptr },                                       /* 0xD0 */
2313     {    1,    0, nullptr },                                       /* 0xD1 */
2314     {    1,    0, nullptr },                                       /* 0xD2 */
2315     {    1,    0, nullptr },                                       /* 0xD3 */
2316     {    1,    0, nullptr },                                       /* 0xD4 */
2317     {    1,    0, nullptr },                                       /* 0xD5 */
2318     {    1,    0, nullptr },                                       /* 0xD6 */
2319     {    1,    0, nullptr },                                       /* 0xD7 */
2320     {    1,    0, nullptr },                                       /* 0xD8 */
2321     {    1,    0, nullptr },                                       /* 0xD9 */
2322     {    1,    0, nullptr },                                       /* 0xDA */
2323     {    1,    0, nullptr },                                       /* 0xDB */
2324     {    1,    0, nullptr },                                       /* 0xDC */
2325     {    1,    0, nullptr },                                       /* 0xDD */
2326     {    1,    0, nullptr },                                       /* 0xDE */
2327     {    1,    0, nullptr },                                       /* 0xDF */
2328     {    1,    0, nullptr },                                       /* 0xE0 */
2329     {    1,    0, nullptr },                                       /* 0xE1 */
2330     {    1,    0, nullptr },                                       /* 0xE2 */
2331     {    1,    0, nullptr },                                       /* 0xE3 */
2332     {    1,    0, nullptr },                                       /* 0xE4 */
2333     {    1,    0, nullptr },                                       /* 0xE5 */
2334     {    1,    0, nullptr },                                       /* 0xE6 */
2335     {    1,    0, nullptr },                                       /* 0xE7 */
2336     {    1,    0, nullptr },                                       /* 0xE8 */
2337     {    1,    0, nullptr },                                       /* 0xE9 */
2338     {    1,    0, nullptr },                                       /* 0xEA */
2339     {    1,    0, nullptr },                                       /* 0xEB */
2340     {    1,    0, nullptr },                                       /* 0xEC */
2341     {    1,    0, nullptr },                                       /* 0xED */
2342     {    1,    0, nullptr },                                       /* 0xEE */
2343     {    1,    0, nullptr },                                       /* 0xEF */
2344     {    1,    0, nullptr },                                       /* 0xF0 */
2345     {    1,    0, nullptr },                                       /* 0xF1 */
2346     {    1,    0, nullptr },                                       /* 0xF2 */
2347     {    1,    0, nullptr },                                       /* 0xF3 */
2348     {    1,    0, nullptr },                                       /* 0xF4 */
2349     {    1,    0, nullptr },                                       /* 0xF5 */
2350     {    1,    0, nullptr },                                       /* 0xF6 */
2351     {    1,    0, nullptr },                                       /* 0xF7 */
2352     {    1,    0, nullptr },                                       /* 0xF8 */
2353     { 0x2C, 0xF1, aImplUniToDBCSTab_GBK_F9 },                   /* 0xF9 */
2354     { 0x0C, 0x29, aImplUniToDBCSTab_GBK_FA },                   /* 0xFA */
2355     {    1,    0, nullptr },                                       /* 0xFB */
2356     {    1,    0, nullptr },                                       /* 0xFC */
2357     {    1,    0, nullptr },                                       /* 0xFD */
2358     { 0x30, 0x6B, aImplUniToDBCSTab_GBK_FE },                   /* 0xFE */
2359     { 0x01, 0xE5, aImplUniToDBCSTab_GBK_FF }                    /* 0xFF */
2362 /* ----------------------------------------------------------------------- */
2364 static ImplDBCSConvertData const aImplMS936DBCSCvtData =
2366     aMS936UniLeadTab,
2367     aMS936DBCSHighTab,
2368     0x00, 0xFF,
2369     0x40, 0xFE,
2370     aImplMS936DBCSEUDCTab,
2371     DBCS_EUDC_MS936_COUNT
2374 /* ----------------------------------------------------------------------- */
2376 static ImplTextEncodingData const aImplMS936TextEncodingData
2377     = { { &aImplMS936DBCSCvtData,
2378           ImplDBCSToUnicode,
2379           ImplUnicodeToDBCS,
2380           nullptr,
2381           nullptr,
2382           nullptr,
2383           nullptr,
2384           nullptr,
2385           nullptr },
2386         1,
2387         2,
2388         2,
2389         134,
2390         "euc-cn",
2391         "gb2312",
2392         RTL_TEXTENCODING_INFO_MULTIBYTE };
2393     /* WIN/DOS/OS2, SCRIPT_CHINESE_SIMPLIFIED, pc code page 936, mac encoding
2394        25 */
2396 /* ======================================================================= */
2398 static ImplDBCSToUniLeadTab const aAPPLECHINSIMPUniLeadTab[256] =
2400     { 0x0000,    0,    0, nullptr },                               /* 0x00 */
2401     { 0x0001,    0,    0, nullptr },                               /* 0x01 */
2402     { 0x0002,    0,    0, nullptr },                               /* 0x02 */
2403     { 0x0003,    0,    0, nullptr },                               /* 0x03 */
2404     { 0x0004,    0,    0, nullptr },                               /* 0x04 */
2405     { 0x0005,    0,    0, nullptr },                               /* 0x05 */
2406     { 0x0006,    0,    0, nullptr },                               /* 0x06 */
2407     { 0x0007,    0,    0, nullptr },                               /* 0x07 */
2408     { 0x0008,    0,    0, nullptr },                               /* 0x08 */
2409     { 0x0009,    0,    0, nullptr },                               /* 0x09 */
2410     { 0x000A,    0,    0, nullptr },                               /* 0x0A */
2411     { 0x000B,    0,    0, nullptr },                               /* 0x0B */
2412     { 0x000C,    0,    0, nullptr },                               /* 0x0C */
2413     { 0x000D,    0,    0, nullptr },                               /* 0x0D */
2414     { 0x000E,    0,    0, nullptr },                               /* 0x0E */
2415     { 0x000F,    0,    0, nullptr },                               /* 0x0F */
2416     { 0x0010,    0,    0, nullptr },                               /* 0x10 */
2417     { 0x0011,    0,    0, nullptr },                               /* 0x11 */
2418     { 0x0012,    0,    0, nullptr },                               /* 0x12 */
2419     { 0x0013,    0,    0, nullptr },                               /* 0x13 */
2420     { 0x0014,    0,    0, nullptr },                               /* 0x14 */
2421     { 0x0015,    0,    0, nullptr },                               /* 0x15 */
2422     { 0x0016,    0,    0, nullptr },                               /* 0x16 */
2423     { 0x0017,    0,    0, nullptr },                               /* 0x17 */
2424     { 0x0018,    0,    0, nullptr },                               /* 0x18 */
2425     { 0x0019,    0,    0, nullptr },                               /* 0x19 */
2426     { 0x001A,    0,    0, nullptr },                               /* 0x1A */
2427     { 0x001B,    0,    0, nullptr },                               /* 0x1B */
2428     { 0x001C,    0,    0, nullptr },                               /* 0x1C */
2429     { 0x001D,    0,    0, nullptr },                               /* 0x1D */
2430     { 0x001E,    0,    0, nullptr },                               /* 0x1E */
2431     { 0x001F,    0,    0, nullptr },                               /* 0x1F */
2432     { 0x0020,    0,    0, nullptr },                               /* 0x20 */
2433     { 0x0021,    0,    0, nullptr },                               /* 0x21 */
2434     { 0x0022,    0,    0, nullptr },                               /* 0x22 */
2435     { 0x0023,    0,    0, nullptr },                               /* 0x23 */
2436     { 0x0024,    0,    0, nullptr },                               /* 0x24 */
2437     { 0x0025,    0,    0, nullptr },                               /* 0x25 */
2438     { 0x0026,    0,    0, nullptr },                               /* 0x26 */
2439     { 0x0027,    0,    0, nullptr },                               /* 0x27 */
2440     { 0x0028,    0,    0, nullptr },                               /* 0x28 */
2441     { 0x0029,    0,    0, nullptr },                               /* 0x29 */
2442     { 0x002A,    0,    0, nullptr },                               /* 0x2A */
2443     { 0x002B,    0,    0, nullptr },                               /* 0x2B */
2444     { 0x002C,    0,    0, nullptr },                               /* 0x2C */
2445     { 0x002D,    0,    0, nullptr },                               /* 0x2D */
2446     { 0x002E,    0,    0, nullptr },                               /* 0x2E */
2447     { 0x002F,    0,    0, nullptr },                               /* 0x2F */
2448     { 0x0030,    0,    0, nullptr },                               /* 0x30 */
2449     { 0x0031,    0,    0, nullptr },                               /* 0x31 */
2450     { 0x0032,    0,    0, nullptr },                               /* 0x32 */
2451     { 0x0033,    0,    0, nullptr },                               /* 0x33 */
2452     { 0x0034,    0,    0, nullptr },                               /* 0x34 */
2453     { 0x0035,    0,    0, nullptr },                               /* 0x35 */
2454     { 0x0036,    0,    0, nullptr },                               /* 0x36 */
2455     { 0x0037,    0,    0, nullptr },                               /* 0x37 */
2456     { 0x0038,    0,    0, nullptr },                               /* 0x38 */
2457     { 0x0039,    0,    0, nullptr },                               /* 0x39 */
2458     { 0x003A,    0,    0, nullptr },                               /* 0x3A */
2459     { 0x003B,    0,    0, nullptr },                               /* 0x3B */
2460     { 0x003C,    0,    0, nullptr },                               /* 0x3C */
2461     { 0x003D,    0,    0, nullptr },                               /* 0x3D */
2462     { 0x003E,    0,    0, nullptr },                               /* 0x3E */
2463     { 0x003F,    0,    0, nullptr },                               /* 0x3F */
2464     { 0x0040,    0,    0, nullptr },                               /* 0x40 */
2465     { 0x0041,    0,    0, nullptr },                               /* 0x41 */
2466     { 0x0042,    0,    0, nullptr },                               /* 0x42 */
2467     { 0x0043,    0,    0, nullptr },                               /* 0x43 */
2468     { 0x0044,    0,    0, nullptr },                               /* 0x44 */
2469     { 0x0045,    0,    0, nullptr },                               /* 0x45 */
2470     { 0x0046,    0,    0, nullptr },                               /* 0x46 */
2471     { 0x0047,    0,    0, nullptr },                               /* 0x47 */
2472     { 0x0048,    0,    0, nullptr },                               /* 0x48 */
2473     { 0x0049,    0,    0, nullptr },                               /* 0x49 */
2474     { 0x004A,    0,    0, nullptr },                               /* 0x4A */
2475     { 0x004B,    0,    0, nullptr },                               /* 0x4B */
2476     { 0x004C,    0,    0, nullptr },                               /* 0x4C */
2477     { 0x004D,    0,    0, nullptr },                               /* 0x4D */
2478     { 0x004E,    0,    0, nullptr },                               /* 0x4E */
2479     { 0x004F,    0,    0, nullptr },                               /* 0x4F */
2480     { 0x0050,    0,    0, nullptr },                               /* 0x50 */
2481     { 0x0051,    0,    0, nullptr },                               /* 0x51 */
2482     { 0x0052,    0,    0, nullptr },                               /* 0x52 */
2483     { 0x0053,    0,    0, nullptr },                               /* 0x53 */
2484     { 0x0054,    0,    0, nullptr },                               /* 0x54 */
2485     { 0x0055,    0,    0, nullptr },                               /* 0x55 */
2486     { 0x0056,    0,    0, nullptr },                               /* 0x56 */
2487     { 0x0057,    0,    0, nullptr },                               /* 0x57 */
2488     { 0x0058,    0,    0, nullptr },                               /* 0x58 */
2489     { 0x0059,    0,    0, nullptr },                               /* 0x59 */
2490     { 0x005A,    0,    0, nullptr },                               /* 0x5A */
2491     { 0x005B,    0,    0, nullptr },                               /* 0x5B */
2492     { 0x005C,    0,    0, nullptr },                               /* 0x5C */
2493     { 0x005D,    0,    0, nullptr },                               /* 0x5D */
2494     { 0x005E,    0,    0, nullptr },                               /* 0x5E */
2495     { 0x005F,    0,    0, nullptr },                               /* 0x5F */
2496     { 0x0060,    0,    0, nullptr },                               /* 0x60 */
2497     { 0x0061,    0,    0, nullptr },                               /* 0x61 */
2498     { 0x0062,    0,    0, nullptr },                               /* 0x62 */
2499     { 0x0063,    0,    0, nullptr },                               /* 0x63 */
2500     { 0x0064,    0,    0, nullptr },                               /* 0x64 */
2501     { 0x0065,    0,    0, nullptr },                               /* 0x65 */
2502     { 0x0066,    0,    0, nullptr },                               /* 0x66 */
2503     { 0x0067,    0,    0, nullptr },                               /* 0x67 */
2504     { 0x0068,    0,    0, nullptr },                               /* 0x68 */
2505     { 0x0069,    0,    0, nullptr },                               /* 0x69 */
2506     { 0x006A,    0,    0, nullptr },                               /* 0x6A */
2507     { 0x006B,    0,    0, nullptr },                               /* 0x6B */
2508     { 0x006C,    0,    0, nullptr },                               /* 0x6C */
2509     { 0x006D,    0,    0, nullptr },                               /* 0x6D */
2510     { 0x006E,    0,    0, nullptr },                               /* 0x6E */
2511     { 0x006F,    0,    0, nullptr },                               /* 0x6F */
2512     { 0x0070,    0,    0, nullptr },                               /* 0x70 */
2513     { 0x0071,    0,    0, nullptr },                               /* 0x71 */
2514     { 0x0072,    0,    0, nullptr },                               /* 0x72 */
2515     { 0x0073,    0,    0, nullptr },                               /* 0x73 */
2516     { 0x0074,    0,    0, nullptr },                               /* 0x74 */
2517     { 0x0075,    0,    0, nullptr },                               /* 0x75 */
2518     { 0x0076,    0,    0, nullptr },                               /* 0x76 */
2519     { 0x0077,    0,    0, nullptr },                               /* 0x77 */
2520     { 0x0078,    0,    0, nullptr },                               /* 0x78 */
2521     { 0x0079,    0,    0, nullptr },                               /* 0x79 */
2522     { 0x007A,    0,    0, nullptr },                               /* 0x7A */
2523     { 0x007B,    0,    0, nullptr },                               /* 0x7B */
2524     { 0x007C,    0,    0, nullptr },                               /* 0x7C */
2525     { 0x007D,    0,    0, nullptr },                               /* 0x7D */
2526     { 0x007E,    0,    0, nullptr },                               /* 0x7E */
2527     { 0x007F,    0,    0, nullptr },                               /* 0x7F */
2528     {      0,    1,    0, nullptr },                               /* 0x80 */
2529     { 0xF880,    0,    0, nullptr },                               /* 0x81 */
2530     { 0xF881,    0,    0, nullptr },                               /* 0x82 */
2531     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x83 */ /* We convert this as double byte */
2532     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x84 */ /* We convert this as double byte */
2533     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x85 */ /* We convert this as double byte */
2534     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x86 */ /* We convert this as double byte */
2535     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x87 */ /* We convert this as double byte */
2536     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x88 */ /* We convert this as double byte */
2537     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x89 */ /* We convert this as double byte */
2538     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x8A */ /* We convert this as double byte */
2539     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x8B */ /* We convert this as double byte */
2540     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x8C */ /* We convert this as double byte */
2541     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x8D */ /* We convert this as double byte */
2542     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x8E */ /* We convert this as double byte */
2543     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x8F */ /* We convert this as double byte */
2544     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x90 */ /* We convert this as double byte */
2545     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x91 */ /* We convert this as double byte */
2546     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x92 */ /* We convert this as double byte */
2547     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x93 */ /* We convert this as double byte */
2548     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x94 */ /* We convert this as double byte */
2549     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x95 */ /* We convert this as double byte */
2550     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x96 */ /* We convert this as double byte */
2551     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x97 */ /* We convert this as double byte */
2552     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x98 */ /* We convert this as double byte */
2553     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x99 */ /* We convert this as double byte */
2554     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x9A */ /* We convert this as double byte */
2555     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x9B */ /* We convert this as double byte */
2556     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x9C */ /* We convert this as double byte */
2557     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x9D */ /* We convert this as double byte */
2558     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x9E */ /* We convert this as double byte */
2559     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x9F */ /* We convert this as double byte */
2560     { 0x00A0,    0,    0, nullptr },                               /* 0xA0 */
2561     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A1 },            /* 0xA1 */
2562     {      0, 0xA1, 0xFC, aImplDBCSToUniTab_GB_A2 },            /* 0xA2 */
2563     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GB_A3 },            /* 0xA3 */
2564     {      0, 0xA1, 0xF3, aImplDBCSToUniTab_GB_A4 },            /* 0xA4 */
2565     {      0, 0xA1, 0xF6, aImplDBCSToUniTab_GB_A5 },            /* 0xA5 */
2566     {      0, 0xA1, 0xF5, aImplDBCSToUniTab_GB_A6 },            /* 0xA6 */
2567     {      0, 0xA1, 0xF1, aImplDBCSToUniTab_GB_A7 },            /* 0xA7 */
2568     {      0, 0xA1, 0xE9, aImplDBCSToUniTab_GBK_A8+GBKOFF },    /* 0xA8 */
2569     {      0, 0xA1, 0xEF, aImplDBCSToUniTab_GBK_A9+GBKOFF },    /* 0xA9 */
2570     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xAA */ /* We convert this as double byte */
2571     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xAB */ /* We convert this as double byte */
2572     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xAC */ /* We convert this as double byte */
2573     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xAD */ /* We convert this as double byte */
2574     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xAE */ /* We convert this as double byte */
2575     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xAF */ /* We convert this as double byte */
2576     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B0+GBKOFF },    /* 0xB0 */
2577     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B1+GBKOFF },    /* 0xB1 */
2578     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B2+GBKOFF },    /* 0xB2 */
2579     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B3+GBKOFF },    /* 0xB3 */
2580     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B4+GBKOFF },    /* 0xB4 */
2581     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B5+GBKOFF },    /* 0xB5 */
2582     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B6+GBKOFF },    /* 0xB6 */
2583     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B7+GBKOFF },    /* 0xB7 */
2584     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B8+GBKOFF },    /* 0xB8 */
2585     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_B9+GBKOFF },    /* 0xB9 */
2586     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BA+GBKOFF },    /* 0xBA */
2587     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BB+GBKOFF },    /* 0xBB */
2588     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BC+GBKOFF },    /* 0xBC */
2589     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BD+GBKOFF },    /* 0xBD */
2590     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BE+GBKOFF },    /* 0xBE */
2591     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_BF+GBKOFF },    /* 0xBF */
2592     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C0+GBKOFF },    /* 0xC0 */
2593     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C1+GBKOFF },    /* 0xC1 */
2594     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C2+GBKOFF },    /* 0xC2 */
2595     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C3+GBKOFF },    /* 0xC3 */
2596     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C4+GBKOFF },    /* 0xC4 */
2597     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C5+GBKOFF },    /* 0xC5 */
2598     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C6+GBKOFF },    /* 0xC6 */
2599     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C7+GBKOFF },    /* 0xC7 */
2600     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C8+GBKOFF },    /* 0xC8 */
2601     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_C9+GBKOFF },    /* 0xC9 */
2602     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CA+GBKOFF },    /* 0xCA */
2603     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CB+GBKOFF },    /* 0xCB */
2604     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CC+GBKOFF },    /* 0xCC */
2605     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CD+GBKOFF },    /* 0xCD */
2606     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CE+GBKOFF },    /* 0xCE */
2607     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_CF+GBKOFF },    /* 0xCF */
2608     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D0+GBKOFF },    /* 0xD0 */
2609     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D1+GBKOFF },    /* 0xD1 */
2610     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D2+GBKOFF },    /* 0xD2 */
2611     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D3+GBKOFF },    /* 0xD3 */
2612     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D4+GBKOFF },    /* 0xD4 */
2613     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D5+GBKOFF },    /* 0xD5 */
2614     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D6+GBKOFF },    /* 0xD6 */
2615     {      0, 0xA1, 0xF9, aImplDBCSToUniTab_GBK_D7+GBKOFF },    /* 0xD7 */
2616     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D8+GBKOFF },    /* 0xD8 */
2617     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_D9+GBKOFF },    /* 0xD9 */
2618     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DA+GBKOFF },    /* 0xDA */
2619     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DB+GBKOFF },    /* 0xDB */
2620     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DC+GBKOFF },    /* 0xDC */
2621     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DD+GBKOFF },    /* 0xDD */
2622     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DE+GBKOFF },    /* 0xDE */
2623     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_DF+GBKOFF },    /* 0xDF */
2624     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E0+GBKOFF },    /* 0xE0 */
2625     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E1+GBKOFF },    /* 0xE1 */
2626     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E2+GBKOFF },    /* 0xE2 */
2627     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E3+GBKOFF },    /* 0xE3 */
2628     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E4+GBKOFF },    /* 0xE4 */
2629     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E5+GBKOFF },    /* 0xE5 */
2630     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E6+GBKOFF },    /* 0xE6 */
2631     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E7+GBKOFF },    /* 0xE7 */
2632     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E8+GBKOFF },    /* 0xE8 */
2633     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_E9+GBKOFF },    /* 0xE9 */
2634     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EA+GBKOFF },    /* 0xEA */
2635     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EB+GBKOFF },    /* 0xEB */
2636     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EC+GBKOFF },    /* 0xEC */
2637     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_ED+GBKOFF },    /* 0xED */
2638     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EE+GBKOFF },    /* 0xEE */
2639     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_EF+GBKOFF },    /* 0xEF */
2640     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F0+GBKOFF },    /* 0xF0 */
2641     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F1+GBKOFF },    /* 0xF1 */
2642     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F2+GBKOFF },    /* 0xF2 */
2643     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F3+GBKOFF },    /* 0xF3 */
2644     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F4+GBKOFF },    /* 0xF4 */
2645     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F5+GBKOFF },    /* 0xF5 */
2646     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F6+GBKOFF },    /* 0xF6 */
2647     {      0, 0xA1, 0xFE, aImplDBCSToUniTab_GBK_F7+GBKOFF },    /* 0xF7 */
2648     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF8 */ /* We convert this as double byte */
2649     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF9 */ /* We convert this as double byte */
2650     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xFA */ /* We convert this as double byte */
2651     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xFB */ /* We convert this as double byte */
2652     {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xFC */ /* We convert this as double byte */
2653     { 0x00A9,    0,    0, nullptr },                               /* 0xFD */
2654     { 0x2122,    0,    0, nullptr },                               /* 0xFE */
2655     { 0x2026,    0,    0, nullptr }                                /* 0xFF */
2658 /* ----------------------------------------------------------------------- */
2660 static ImplUniToDBCSHighTab const aAPPLECHINSIMPDBCSHighTab[256] =
2662     { 0x00, 0xFC, aImplUniToDBCSTab_APPLECHINSIMP_00 },         /* 0x00 */
2663     { 0x01, 0xDC, aImplUniToDBCSTab_GB_01 },                    /* 0x01 */
2664     { 0x51, 0xC9, aImplUniToDBCSTab_GB_02 },                    /* 0x02 */
2665     { 0x91, 0xC9, aImplUniToDBCSTab_GB_03 },                    /* 0x03 */
2666     { 0x01, 0x51, aImplUniToDBCSTab_GB_04 },                    /* 0x04 */
2667     {    1,    0, nullptr },                                       /* 0x05 */
2668     {    1,    0, nullptr },                                       /* 0x06 */
2669     {    1,    0, nullptr },                                       /* 0x07 */
2670     {    1,    0, nullptr },                                       /* 0x08 */
2671     {    1,    0, nullptr },                                       /* 0x09 */
2672     {    1,    0, nullptr },                                       /* 0x0A */
2673     {    1,    0, nullptr },                                       /* 0x0B */
2674     {    1,    0, nullptr },                                       /* 0x0C */
2675     {    1,    0, nullptr },                                       /* 0x0D */
2676     {    1,    0, nullptr },                                       /* 0x0E */
2677     {    1,    0, nullptr },                                       /* 0x0F */
2678     {    1,    0, nullptr },                                       /* 0x10 */
2679     {    1,    0, nullptr },                                       /* 0x11 */
2680     {    1,    0, nullptr },                                       /* 0x12 */
2681     {    1,    0, nullptr },                                       /* 0x13 */
2682     {    1,    0, nullptr },                                       /* 0x14 */
2683     {    1,    0, nullptr },                                       /* 0x15 */
2684     {    1,    0, nullptr },                                       /* 0x16 */
2685     {    1,    0, nullptr },                                       /* 0x17 */
2686     {    1,    0, nullptr },                                       /* 0x18 */
2687     {    1,    0, nullptr },                                       /* 0x19 */
2688     {    1,    0, nullptr },                                       /* 0x1A */
2689     {    1,    0, nullptr },                                       /* 0x1B */
2690     {    1,    0, nullptr },                                       /* 0x1C */
2691     {    1,    0, nullptr },                                       /* 0x1D */
2692     { 0x3F, 0x3F, aImplUniToDBCSTab_APPLECHINSIMP_1E },         /* 0x1E */
2693     {    1,    0, nullptr },                                       /* 0x1F */
2694     { 0x14, 0x3E, aImplUniToDBCSTab_GB_20 },                    /* 0x20 */
2695     { 0x03, 0x93, aImplUniToDBCSTab_APPLECHINSIMP_21 },         /* 0x21 */
2696     { 0x08, 0xEF, aImplUniToDBCSTab_GB_22 },                    /* 0x22 */
2697     { 0x12, 0x12, aImplUniToDBCSTab_GB_23 },                    /* 0x23 */
2698     { 0x60, 0x9B, aImplUniToDBCSTab_GB_24 },                    /* 0x24 */
2699     { 0x00, 0xCF, aImplUniToDBCSTab_GB_25 },                    /* 0x25 */
2700     { 0x05, 0x42, aImplUniToDBCSTab_GB_26 },                    /* 0x26 */
2701     {    1,    0, nullptr },                                       /* 0x27 */
2702     {    1,    0, nullptr },                                       /* 0x28 */
2703     {    1,    0, nullptr },                                       /* 0x29 */
2704     {    1,    0, nullptr },                                       /* 0x2A */
2705     {    1,    0, nullptr },                                       /* 0x2B */
2706     {    1,    0, nullptr },                                       /* 0x2C */
2707     {    1,    0, nullptr },                                       /* 0x2D */
2708     {    1,    0, nullptr },                                       /* 0x2E */
2709     {    1,    0, nullptr },                                       /* 0x2F */
2710     { 0x00, 0xFB, aImplUniToDBCSTab_GB_30 },                    /* 0x30 */
2711     { 0x05, 0x29, aImplUniToDBCSTab_GB_31 },                    /* 0x31 */
2712     { 0x20, 0x29, aImplUniToDBCSTab_GBK_32 },                   /* 0x32 */
2713     {    1,    0, nullptr },                                       /* 0x33 */
2714     {    1,    0, nullptr },                                       /* 0x34 */
2715     {    1,    0, nullptr },                                       /* 0x35 */
2716     {    1,    0, nullptr },                                       /* 0x36 */
2717     {    1,    0, nullptr },                                       /* 0x37 */
2718     {    1,    0, nullptr },                                       /* 0x38 */
2719     {    1,    0, nullptr },                                       /* 0x39 */
2720     {    1,    0, nullptr },                                       /* 0x3A */
2721     {    1,    0, nullptr },                                       /* 0x3B */
2722     {    1,    0, nullptr },                                       /* 0x3C */
2723     {    1,    0, nullptr },                                       /* 0x3D */
2724     {    1,    0, nullptr },                                       /* 0x3E */
2725     {    1,    0, nullptr },                                       /* 0x3F */
2726     {    1,    0, nullptr },                                       /* 0x40 */
2727     {    1,    0, nullptr },                                       /* 0x41 */
2728     {    1,    0, nullptr },                                       /* 0x42 */
2729     {    1,    0, nullptr },                                       /* 0x43 */
2730     {    1,    0, nullptr },                                       /* 0x44 */
2731     {    1,    0, nullptr },                                       /* 0x45 */
2732     {    1,    0, nullptr },                                       /* 0x46 */
2733     {    1,    0, nullptr },                                       /* 0x47 */
2734     {    1,    0, nullptr },                                       /* 0x48 */
2735     {    1,    0, nullptr },                                       /* 0x49 */
2736     {    1,    0, nullptr },                                       /* 0x4A */
2737     {    1,    0, nullptr },                                       /* 0x4B */
2738     {    1,    0, nullptr },                                       /* 0x4C */
2739     {    1,    0, nullptr },                                       /* 0x4D */
2740     { 0x00, 0xFF, aImplUniToDBCSTab_GB_4E },                    /* 0x4E */
2741     { 0x01, 0xFE, aImplUniToDBCSTab_GB_4F },                    /* 0x4F */
2742     { 0x0C, 0xFB, aImplUniToDBCSTab_GB_50 },                    /* 0x50 */
2743     { 0x06, 0xFF, aImplUniToDBCSTab_GB_51 },                    /* 0x51 */
2744     { 0x00, 0xFF, aImplUniToDBCSTab_GB_52 },                    /* 0x52 */
2745     { 0x00, 0xFD, aImplUniToDBCSTab_GB_53 },                    /* 0x53 */
2746     { 0x01, 0xFF, aImplUniToDBCSTab_GB_54 },                    /* 0x54 */
2747     { 0x01, 0xFE, aImplUniToDBCSTab_GB_55 },                    /* 0x55 */
2748     { 0x00, 0xFF, aImplUniToDBCSTab_GB_56 },                    /* 0x56 */
2749     { 0x03, 0xFD, aImplUniToDBCSTab_GB_57 },                    /* 0x57 */
2750     { 0x00, 0xF9, aImplUniToDBCSTab_GB_58 },                    /* 0x58 */
2751     { 0x02, 0xFF, aImplUniToDBCSTab_GB_59 },                    /* 0x59 */
2752     { 0x01, 0xF1, aImplUniToDBCSTab_GB_5A },                    /* 0x5A */
2753     { 0x09, 0xFF, aImplUniToDBCSTab_GB_5B },                    /* 0x5B */
2754     { 0x01, 0xFB, aImplUniToDBCSTab_GB_5C },                    /* 0x5C */
2755     { 0x02, 0xFE, aImplUniToDBCSTab_GB_5D },                    /* 0x5D */
2756     { 0x01, 0xFF, aImplUniToDBCSTab_GB_5E },                    /* 0x5E */
2757     { 0x00, 0xFF, aImplUniToDBCSTab_GB_5F },                    /* 0x5F */
2758     { 0x00, 0xFA, aImplUniToDBCSTab_GB_60 },                    /* 0x60 */
2759     { 0x00, 0xFF, aImplUniToDBCSTab_GB_61 },                    /* 0x61 */
2760     { 0x06, 0xFF, aImplUniToDBCSTab_GB_62 },                    /* 0x62 */
2761     { 0x01, 0xFF, aImplUniToDBCSTab_GB_63 },                    /* 0x63 */
2762     { 0x00, 0xE6, aImplUniToDBCSTab_GB_64 },                    /* 0x64 */
2763     { 0x00, 0xFA, aImplUniToDBCSTab_GB_65 },                    /* 0x65 */
2764     { 0x00, 0xFF, aImplUniToDBCSTab_GB_66 },                    /* 0x66 */
2765     { 0x00, 0xFF, aImplUniToDBCSTab_GB_67 },                    /* 0x67 */
2766     { 0x00, 0xFC, aImplUniToDBCSTab_GB_68 },                    /* 0x68 */
2767     { 0x01, 0xFF, aImplUniToDBCSTab_GB_69 },                    /* 0x69 */
2768     { 0x0A, 0xAC, aImplUniToDBCSTab_GB_6A },                    /* 0x6A */
2769     { 0x20, 0xFD, aImplUniToDBCSTab_GB_6B },                    /* 0x6B */
2770     { 0x05, 0xFE, aImplUniToDBCSTab_GB_6C },                    /* 0x6C */
2771     { 0x01, 0xFC, aImplUniToDBCSTab_GB_6D },                    /* 0x6D */
2772     { 0x05, 0xF9, aImplUniToDBCSTab_GB_6E },                    /* 0x6E */
2773     { 0x02, 0xEF, aImplUniToDBCSTab_GB_6F },                    /* 0x6F */
2774     { 0x11, 0xFD, aImplUniToDBCSTab_GB_70 },                    /* 0x70 */
2775     { 0x09, 0xF9, aImplUniToDBCSTab_GB_71 },                    /* 0x71 */
2776     { 0x06, 0xFC, aImplUniToDBCSTab_GB_72 },                    /* 0x72 */
2777     { 0x01, 0xF2, aImplUniToDBCSTab_GB_73 },                    /* 0x73 */
2778     { 0x03, 0xFF, aImplUniToDBCSTab_GB_74 },                    /* 0x74 */
2779     { 0x04, 0xFF, aImplUniToDBCSTab_GB_75 },                    /* 0x75 */
2780     { 0x00, 0xFE, aImplUniToDBCSTab_GB_76 },                    /* 0x76 */
2781     { 0x01, 0xFF, aImplUniToDBCSTab_GB_77 },                    /* 0x77 */
2782     { 0x00, 0xFA, aImplUniToDBCSTab_GB_78 },                    /* 0x78 */
2783     { 0x01, 0xFD, aImplUniToDBCSTab_GB_79 },                    /* 0x79 */
2784     { 0x00, 0xFF, aImplUniToDBCSTab_GB_7A },                    /* 0x7A */
2785     { 0x03, 0xFE, aImplUniToDBCSTab_GB_7B },                    /* 0x7B */
2786     { 0x07, 0xFB, aImplUniToDBCSTab_GB_7C },                    /* 0x7C */
2787     { 0x0A, 0xAE, aImplUniToDBCSTab_GB_7D },                    /* 0x7D */
2788     { 0x3B, 0xFF, aImplUniToDBCSTab_GB_7E },                    /* 0x7E */
2789     { 0x00, 0xFC, aImplUniToDBCSTab_GB_7F },                    /* 0x7F */
2790     { 0x00, 0xFD, aImplUniToDBCSTab_GB_80 },                    /* 0x80 */
2791     { 0x02, 0xFE, aImplUniToDBCSTab_GB_81 },                    /* 0x81 */
2792     { 0x00, 0xFB, aImplUniToDBCSTab_GB_82 },                    /* 0x82 */
2793     { 0x01, 0xFD, aImplUniToDBCSTab_GB_83 },                    /* 0x83 */
2794     { 0x01, 0xFF, aImplUniToDBCSTab_GB_84 },                    /* 0x84 */
2795     { 0x0C, 0xFF, aImplUniToDBCSTab_GB_85 },                    /* 0x85 */
2796     { 0x05, 0xFE, aImplUniToDBCSTab_GB_86 },                    /* 0x86 */
2797     { 0x00, 0xFE, aImplUniToDBCSTab_GB_87 },                    /* 0x87 */
2798     { 0x03, 0xFE, aImplUniToDBCSTab_GB_88 },                    /* 0x88 */
2799     { 0x02, 0xF3, aImplUniToDBCSTab_GB_89 },                    /* 0x89 */
2800     { 0x00, 0x93, aImplUniToDBCSTab_GB_8A },                    /* 0x8A */
2801     { 0x07, 0xFF, aImplUniToDBCSTab_GB_8B },                    /* 0x8B */
2802     { 0x00, 0x98, aImplUniToDBCSTab_GB_8C },                    /* 0x8C */
2803     { 0x1D, 0xFD, aImplUniToDBCSTab_GB_8D },                    /* 0x8D */
2804     { 0x05, 0xCE, aImplUniToDBCSTab_GB_8E },                    /* 0x8E */
2805     { 0x66, 0xFD, aImplUniToDBCSTab_GB_8F },                    /* 0x8F */
2806     { 0x00, 0xFE, aImplUniToDBCSTab_GB_90 },                    /* 0x90 */
2807     { 0x02, 0xDC, aImplUniToDBCSTab_GB_91 },                    /* 0x91 */
2808     { 0x74, 0xC8, aImplUniToDBCSTab_GB_92 },                    /* 0x92 */
2809     { 0x3E, 0xD6, aImplUniToDBCSTab_GB_93 },                    /* 0x93 */
2810     { 0x3E, 0xFF, aImplUniToDBCSTab_GB_94 },                    /* 0x94 */
2811     { 0x00, 0xFE, aImplUniToDBCSTab_GB_95 },                    /* 0x95 */
2812     { 0x00, 0xFE, aImplUniToDBCSTab_GB_96 },                    /* 0x96 */
2813     { 0x00, 0xF6, aImplUniToDBCSTab_GB_97 },                    /* 0x97 */
2814     { 0x75, 0xE9, aImplUniToDBCSTab_GB_98 },                    /* 0x98 */
2815     { 0x0D, 0xA8, aImplUniToDBCSTab_GB_99 },                    /* 0x99 */
2816     { 0x6C, 0xFB, aImplUniToDBCSTab_GB_9A },                    /* 0x9A */
2817     { 0x03, 0x54, aImplUniToDBCSTab_GB_9B },                    /* 0x9B */
2818     { 0x7C, 0xE2, aImplUniToDBCSTab_GB_9C },                    /* 0x9C */
2819     {    1,    0, nullptr },                                       /* 0x9D */
2820     { 0x1F, 0xFE, aImplUniToDBCSTab_GB_9E },                    /* 0x9E */
2821     { 0x0B, 0xA0, aImplUniToDBCSTab_GB_9F },                    /* 0x9F */
2822     {    1,    0, nullptr },                                       /* 0xA0 */
2823     {    1,    0, nullptr },                                       /* 0xA1 */
2824     {    1,    0, nullptr },                                       /* 0xA2 */
2825     {    1,    0, nullptr },                                       /* 0xA3 */
2826     {    1,    0, nullptr },                                       /* 0xA4 */
2827     {    1,    0, nullptr },                                       /* 0xA5 */
2828     {    1,    0, nullptr },                                       /* 0xA6 */
2829     {    1,    0, nullptr },                                       /* 0xA7 */
2830     {    1,    0, nullptr },                                       /* 0xA8 */
2831     {    1,    0, nullptr },                                       /* 0xA9 */
2832     {    1,    0, nullptr },                                       /* 0xAA */
2833     {    1,    0, nullptr },                                       /* 0xAB */
2834     {    1,    0, nullptr },                                       /* 0xAC */
2835     {    1,    0, nullptr },                                       /* 0xAD */
2836     {    1,    0, nullptr },                                       /* 0xAE */
2837     {    1,    0, nullptr },                                       /* 0xAF */
2838     {    1,    0, nullptr },                                       /* 0xB0 */
2839     {    1,    0, nullptr },                                       /* 0xB1 */
2840     {    1,    0, nullptr },                                       /* 0xB2 */
2841     {    1,    0, nullptr },                                       /* 0xB3 */
2842     {    1,    0, nullptr },                                       /* 0xB4 */
2843     {    1,    0, nullptr },                                       /* 0xB5 */
2844     {    1,    0, nullptr },                                       /* 0xB6 */
2845     {    1,    0, nullptr },                                       /* 0xB7 */
2846     {    1,    0, nullptr },                                       /* 0xB8 */
2847     {    1,    0, nullptr },                                       /* 0xB9 */
2848     {    1,    0, nullptr },                                       /* 0xBA */
2849     {    1,    0, nullptr },                                       /* 0xBB */
2850     {    1,    0, nullptr },                                       /* 0xBC */
2851     {    1,    0, nullptr },                                       /* 0xBD */
2852     {    1,    0, nullptr },                                       /* 0xBE */
2853     {    1,    0, nullptr },                                       /* 0xBF */
2854     {    1,    0, nullptr },                                       /* 0xC0 */
2855     {    1,    0, nullptr },                                       /* 0xC1 */
2856     {    1,    0, nullptr },                                       /* 0xC2 */
2857     {    1,    0, nullptr },                                       /* 0xC3 */
2858     {    1,    0, nullptr },                                       /* 0xC4 */
2859     {    1,    0, nullptr },                                       /* 0xC5 */
2860     {    1,    0, nullptr },                                       /* 0xC6 */
2861     {    1,    0, nullptr },                                       /* 0xC7 */
2862     {    1,    0, nullptr },                                       /* 0xC8 */
2863     {    1,    0, nullptr },                                       /* 0xC9 */
2864     {    1,    0, nullptr },                                       /* 0xCA */
2865     {    1,    0, nullptr },                                       /* 0xCB */
2866     {    1,    0, nullptr },                                       /* 0xCC */
2867     {    1,    0, nullptr },                                       /* 0xCD */
2868     {    1,    0, nullptr },                                       /* 0xCE */
2869     {    1,    0, nullptr },                                       /* 0xCF */
2870     {    1,    0, nullptr },                                       /* 0xD0 */
2871     {    1,    0, nullptr },                                       /* 0xD1 */
2872     {    1,    0, nullptr },                                       /* 0xD2 */
2873     {    1,    0, nullptr },                                       /* 0xD3 */
2874     {    1,    0, nullptr },                                       /* 0xD4 */
2875     {    1,    0, nullptr },                                       /* 0xD5 */
2876     {    1,    0, nullptr },                                       /* 0xD6 */
2877     {    1,    0, nullptr },                                       /* 0xD7 */
2878     {    1,    0, nullptr },                                       /* 0xD8 */
2879     {    1,    0, nullptr },                                       /* 0xD9 */
2880     {    1,    0, nullptr },                                       /* 0xDA */
2881     {    1,    0, nullptr },                                       /* 0xDB */
2882     {    1,    0, nullptr },                                       /* 0xDC */
2883     {    1,    0, nullptr },                                       /* 0xDD */
2884     {    1,    0, nullptr },                                       /* 0xDE */
2885     {    1,    0, nullptr },                                       /* 0xDF */
2886     {    1,    0, nullptr },                                       /* 0xE0 */
2887     {    1,    0, nullptr },                                       /* 0xE1 */
2888     {    1,    0, nullptr },                                       /* 0xE2 */
2889     {    1,    0, nullptr },                                       /* 0xE3 */
2890     {    1,    0, nullptr },                                       /* 0xE4 */
2891     {    1,    0, nullptr },                                       /* 0xE5 */
2892     {    1,    0, nullptr },                                       /* 0xE6 */
2893     {    1,    0, nullptr },                                       /* 0xE7 */
2894     {    1,    0, nullptr },                                       /* 0xE8 */
2895     {    1,    0, nullptr },                                       /* 0xE9 */
2896     {    1,    0, nullptr },                                       /* 0xEA */
2897     {    1,    0, nullptr },                                       /* 0xEB */
2898     {    1,    0, nullptr },                                       /* 0xEC */
2899     {    1,    0, nullptr },                                       /* 0xED */
2900     {    1,    0, nullptr },                                       /* 0xEE */
2901     {    1,    0, nullptr },                                       /* 0xEF */
2902     {    1,    0, nullptr },                                       /* 0xF0 */
2903     {    1,    0, nullptr },                                       /* 0xF1 */
2904     {    1,    0, nullptr },                                       /* 0xF2 */
2905     {    1,    0, nullptr },                                       /* 0xF3 */
2906     {    1,    0, nullptr },                                       /* 0xF4 */
2907     {    1,    0, nullptr },                                       /* 0xF5 */
2908     {    1,    0, nullptr },                                       /* 0xF6 */
2909     {    1,    0, nullptr },                                       /* 0xF7 */
2910     { 0x80, 0x81, aImplUniToDBCSTab_APPLECHINSIMP_F8 },         /* 0xF8 */
2911     {    1,    0, nullptr },                                       /* 0xF9 */
2912     {    1,    0, nullptr },                                       /* 0xFA */
2913     {    1,    0, nullptr },                                       /* 0xFB */
2914     {    1,    0, nullptr },                                       /* 0xFC */
2915     {    1,    0, nullptr },                                       /* 0xFD */
2916     { 0x31, 0x44, aImplUniToDBCSTab_GB_FE },                    /* 0xFE */
2917     { 0x01, 0xE5, aImplUniToDBCSTab_GB_FF }                     /* 0xFF */
2920 /* ----------------------------------------------------------------------- */
2922 static ImplDBCSConvertData const aImplAPPLECHINSIMPDBCSCvtData =
2924     aAPPLECHINSIMPUniLeadTab,
2925     aAPPLECHINSIMPDBCSHighTab,
2926     0x00, 0xFF,
2927     0xA1, 0xFE,
2928     nullptr,
2929     0
2932 /* ----------------------------------------------------------------------- */
2934 static ImplTextEncodingData const aImplAPPLECHINSIMPTextEncodingData
2935     = { { &aImplAPPLECHINSIMPDBCSCvtData,
2936           ImplDBCSToUnicode,
2937           ImplUnicodeToDBCS,
2938           nullptr,
2939           nullptr,
2940           nullptr,
2941           nullptr,
2942           nullptr,
2943           nullptr },
2944         1,
2945         2,
2946         2,
2947         134,
2948         "euc-cn",
2949         "gb2312",
2950         RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MULTIBYTE };
2951     /* MAC, SCRIPT_CHINESE_SIMPLIFIED, pc code page 936, mac encoding 25 */