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