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