xref: /aoo41x/main/sal/textenc/tcvtjp6.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 japanese charsets: */
31/* SJIS, MS932, APPLE_JAPANESE, EUC_JP, JIS-X-201, JIS-X-208, JIS-X-212 */
32
33/* ======================================================================= */
34
35static ImplDBCSToUniLeadTab const aSJISUniLeadTab[256] =
36{
37    { 0x0000,    0,    0, NULL },                               /* 0x00 */
38    { 0x0001,    0,    0, NULL },                               /* 0x01 */
39    { 0x0002,    0,    0, NULL },                               /* 0x02 */
40    { 0x0003,    0,    0, NULL },                               /* 0x03 */
41    { 0x0004,    0,    0, NULL },                               /* 0x04 */
42    { 0x0005,    0,    0, NULL },                               /* 0x05 */
43    { 0x0006,    0,    0, NULL },                               /* 0x06 */
44    { 0x0007,    0,    0, NULL },                               /* 0x07 */
45    { 0x0008,    0,    0, NULL },                               /* 0x08 */
46    { 0x0009,    0,    0, NULL },                               /* 0x09 */
47    { 0x000A,    0,    0, NULL },                               /* 0x0A */
48    { 0x000B,    0,    0, NULL },                               /* 0x0B */
49    { 0x000C,    0,    0, NULL },                               /* 0x0C */
50    { 0x000D,    0,    0, NULL },                               /* 0x0D */
51    { 0x000E,    0,    0, NULL },                               /* 0x0E */
52    { 0x000F,    0,    0, NULL },                               /* 0x0F */
53    { 0x0010,    0,    0, NULL },                               /* 0x10 */
54    { 0x0011,    0,    0, NULL },                               /* 0x11 */
55    { 0x0012,    0,    0, NULL },                               /* 0x12 */
56    { 0x0013,    0,    0, NULL },                               /* 0x13 */
57    { 0x0014,    0,    0, NULL },                               /* 0x14 */
58    { 0x0015,    0,    0, NULL },                               /* 0x15 */
59    { 0x0016,    0,    0, NULL },                               /* 0x16 */
60    { 0x0017,    0,    0, NULL },                               /* 0x17 */
61    { 0x0018,    0,    0, NULL },                               /* 0x18 */
62    { 0x0019,    0,    0, NULL },                               /* 0x19 */
63    { 0x001A,    0,    0, NULL },                               /* 0x1A */
64    { 0x001B,    0,    0, NULL },                               /* 0x1B */
65    { 0x001C,    0,    0, NULL },                               /* 0x1C */
66    { 0x001D,    0,    0, NULL },                               /* 0x1D */
67    { 0x001E,    0,    0, NULL },                               /* 0x1E */
68    { 0x001F,    0,    0, NULL },                               /* 0x1F */
69    { 0x0020,    0,    0, NULL },                               /* 0x20 */
70    { 0x0021,    0,    0, NULL },                               /* 0x21 */
71    { 0x0022,    0,    0, NULL },                               /* 0x22 */
72    { 0x0023,    0,    0, NULL },                               /* 0x23 */
73    { 0x0024,    0,    0, NULL },                               /* 0x24 */
74    { 0x0025,    0,    0, NULL },                               /* 0x25 */
75    { 0x0026,    0,    0, NULL },                               /* 0x26 */
76    { 0x0027,    0,    0, NULL },                               /* 0x27 */
77    { 0x0028,    0,    0, NULL },                               /* 0x28 */
78    { 0x0029,    0,    0, NULL },                               /* 0x29 */
79    { 0x002A,    0,    0, NULL },                               /* 0x2A */
80    { 0x002B,    0,    0, NULL },                               /* 0x2B */
81    { 0x002C,    0,    0, NULL },                               /* 0x2C */
82    { 0x002D,    0,    0, NULL },                               /* 0x2D */
83    { 0x002E,    0,    0, NULL },                               /* 0x2E */
84    { 0x002F,    0,    0, NULL },                               /* 0x2F */
85    { 0x0030,    0,    0, NULL },                               /* 0x30 */
86    { 0x0031,    0,    0, NULL },                               /* 0x31 */
87    { 0x0032,    0,    0, NULL },                               /* 0x32 */
88    { 0x0033,    0,    0, NULL },                               /* 0x33 */
89    { 0x0034,    0,    0, NULL },                               /* 0x34 */
90    { 0x0035,    0,    0, NULL },                               /* 0x35 */
91    { 0x0036,    0,    0, NULL },                               /* 0x36 */
92    { 0x0037,    0,    0, NULL },                               /* 0x37 */
93    { 0x0038,    0,    0, NULL },                               /* 0x38 */
94    { 0x0039,    0,    0, NULL },                               /* 0x39 */
95    { 0x003A,    0,    0, NULL },                               /* 0x3A */
96    { 0x003B,    0,    0, NULL },                               /* 0x3B */
97    { 0x003C,    0,    0, NULL },                               /* 0x3C */
98    { 0x003D,    0,    0, NULL },                               /* 0x3D */
99    { 0x003E,    0,    0, NULL },                               /* 0x3E */
100    { 0x003F,    0,    0, NULL },                               /* 0x3F */
101    { 0x0040,    0,    0, NULL },                               /* 0x40 */
102    { 0x0041,    0,    0, NULL },                               /* 0x41 */
103    { 0x0042,    0,    0, NULL },                               /* 0x42 */
104    { 0x0043,    0,    0, NULL },                               /* 0x43 */
105    { 0x0044,    0,    0, NULL },                               /* 0x44 */
106    { 0x0045,    0,    0, NULL },                               /* 0x45 */
107    { 0x0046,    0,    0, NULL },                               /* 0x46 */
108    { 0x0047,    0,    0, NULL },                               /* 0x47 */
109    { 0x0048,    0,    0, NULL },                               /* 0x48 */
110    { 0x0049,    0,    0, NULL },                               /* 0x49 */
111    { 0x004A,    0,    0, NULL },                               /* 0x4A */
112    { 0x004B,    0,    0, NULL },                               /* 0x4B */
113    { 0x004C,    0,    0, NULL },                               /* 0x4C */
114    { 0x004D,    0,    0, NULL },                               /* 0x4D */
115    { 0x004E,    0,    0, NULL },                               /* 0x4E */
116    { 0x004F,    0,    0, NULL },                               /* 0x4F */
117    { 0x0050,    0,    0, NULL },                               /* 0x50 */
118    { 0x0051,    0,    0, NULL },                               /* 0x51 */
119    { 0x0052,    0,    0, NULL },                               /* 0x52 */
120    { 0x0053,    0,    0, NULL },                               /* 0x53 */
121    { 0x0054,    0,    0, NULL },                               /* 0x54 */
122    { 0x0055,    0,    0, NULL },                               /* 0x55 */
123    { 0x0056,    0,    0, NULL },                               /* 0x56 */
124    { 0x0057,    0,    0, NULL },                               /* 0x57 */
125    { 0x0058,    0,    0, NULL },                               /* 0x58 */
126    { 0x0059,    0,    0, NULL },                               /* 0x59 */
127    { 0x005A,    0,    0, NULL },                               /* 0x5A */
128    { 0x005B,    0,    0, NULL },                               /* 0x5B */
129    { 0x005C,    0,    0, NULL },                               /* 0x5C */ /* is A5 (YEN SIGN), but for compatibiliy with ascii, we use 0x5C (SLASH) like MS CP392 */
130    { 0x005D,    0,    0, NULL },                               /* 0x5D */
131    { 0x005E,    0,    0, NULL },                               /* 0x5E */
132    { 0x005F,    0,    0, NULL },                               /* 0x5F */
133    { 0x0060,    0,    0, NULL },                               /* 0x60 */
134    { 0x0061,    0,    0, NULL },                               /* 0x61 */
135    { 0x0062,    0,    0, NULL },                               /* 0x62 */
136    { 0x0063,    0,    0, NULL },                               /* 0x63 */
137    { 0x0064,    0,    0, NULL },                               /* 0x64 */
138    { 0x0065,    0,    0, NULL },                               /* 0x65 */
139    { 0x0066,    0,    0, NULL },                               /* 0x66 */
140    { 0x0067,    0,    0, NULL },                               /* 0x67 */
141    { 0x0068,    0,    0, NULL },                               /* 0x68 */
142    { 0x0069,    0,    0, NULL },                               /* 0x69 */
143    { 0x006A,    0,    0, NULL },                               /* 0x6A */
144    { 0x006B,    0,    0, NULL },                               /* 0x6B */
145    { 0x006C,    0,    0, NULL },                               /* 0x6C */
146    { 0x006D,    0,    0, NULL },                               /* 0x6D */
147    { 0x006E,    0,    0, NULL },                               /* 0x6E */
148    { 0x006F,    0,    0, NULL },                               /* 0x6F */
149    { 0x0070,    0,    0, NULL },                               /* 0x70 */
150    { 0x0071,    0,    0, NULL },                               /* 0x71 */
151    { 0x0072,    0,    0, NULL },                               /* 0x72 */
152    { 0x0073,    0,    0, NULL },                               /* 0x73 */
153    { 0x0074,    0,    0, NULL },                               /* 0x74 */
154    { 0x0075,    0,    0, NULL },                               /* 0x75 */
155    { 0x0076,    0,    0, NULL },                               /* 0x76 */
156    { 0x0077,    0,    0, NULL },                               /* 0x77 */
157    { 0x0078,    0,    0, NULL },                               /* 0x78 */
158    { 0x0079,    0,    0, NULL },                               /* 0x79 */
159    { 0x007A,    0,    0, NULL },                               /* 0x7A */
160    { 0x007B,    0,    0, NULL },                               /* 0x7B */
161    { 0x007C,    0,    0, NULL },                               /* 0x7C */
162    { 0x007D,    0,    0, NULL },                               /* 0x7D */
163    { 0x007E,    0,    0, NULL },                               /* 0x7E */ /* is 0x0203E (SPACING OVERSCORE), but for compatibiliy with ascii, we use 0x7E (TILDE) like MS CP392 */
164    { 0x007F,    0,    0, NULL },                               /* 0x7F */
165    { 0x005C,    0,    0, NULL },                               /* 0x80 */ /* APPLE additons over SJIS, we convert this like apple, because I think, this gives better result, than we take a replacement char */
166    {      0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_81 },         /* 0x81 */
167    {      0, 0x4F, 0xF1, aImplDBCSToUniTab_SJIS_82 },          /* 0x82 */
168    {      0, 0x40, 0xD6, aImplDBCSToUniTab_SJIS_83 },          /* 0x83 */
169    {      0, 0x40, 0xBF, aImplDBCSToUniTab_SJIS_84 },          /* 0x84 */
170    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x85 */ /* We convert this as double byte */
171    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x86 */ /* We convert this as double byte */
172    {      0, 0x40, 0x9C, aImplDBCSToUniTab_MS932_87 },         /* 0x87 */ /* We use the MS table for better MS compatibility */
173    {      0, 0x9F, 0xFC, aImplDBCSToUniTab_SJIS_88 },          /* 0x88 */
174    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_89 },          /* 0x89 */
175    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8A },          /* 0x8A */
176    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8B },          /* 0x8B */
177    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8C },          /* 0x8C */
178    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8D },          /* 0x8D */
179    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8E },          /* 0x8E */
180    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8F },          /* 0x8F */
181    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_90 },          /* 0x90 */
182    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_91 },          /* 0x91 */
183    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_92 },          /* 0x92 */
184    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_93 },          /* 0x93 */
185    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_94 },          /* 0x94 */
186    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_95 },          /* 0x95 */
187    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_96 },          /* 0x96 */
188    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_97 },          /* 0x97 */
189    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_98 },          /* 0x98 */
190    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_99 },          /* 0x99 */
191    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9A },          /* 0x9A */
192    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9B },          /* 0x9B */
193    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9C },          /* 0x9C */
194    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9D },          /* 0x9D */
195    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9E },          /* 0x9E */
196    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9F },          /* 0x9F */
197    { 0x00A0,    0,    0, NULL },                               /* 0xA0 */ /* APPLE additons over SJIS, we convert this like apple, because I think, this gives better result, than we take a replacement char */
198    { 0xFF61,    0,    0, NULL },                               /* 0xA1 */
199    { 0xFF62,    0,    0, NULL },                               /* 0xA2 */
200    { 0xFF63,    0,    0, NULL },                               /* 0xA3 */
201    { 0xFF64,    0,    0, NULL },                               /* 0xA4 */
202    { 0xFF65,    0,    0, NULL },                               /* 0xA5 */
203    { 0xFF66,    0,    0, NULL },                               /* 0xA6 */
204    { 0xFF67,    0,    0, NULL },                               /* 0xA7 */
205    { 0xFF68,    0,    0, NULL },                               /* 0xA8 */
206    { 0xFF69,    0,    0, NULL },                               /* 0xA9 */
207    { 0xFF6A,    0,    0, NULL },                               /* 0xAA */
208    { 0xFF6B,    0,    0, NULL },                               /* 0xAB */
209    { 0xFF6C,    0,    0, NULL },                               /* 0xAC */
210    { 0xFF6D,    0,    0, NULL },                               /* 0xAD */
211    { 0xFF6E,    0,    0, NULL },                               /* 0xAE */
212    { 0xFF6F,    0,    0, NULL },                               /* 0xAF */
213    { 0xFF70,    0,    0, NULL },                               /* 0xB0 */
214    { 0xFF71,    0,    0, NULL },                               /* 0xB1 */
215    { 0xFF72,    0,    0, NULL },                               /* 0xB2 */
216    { 0xFF73,    0,    0, NULL },                               /* 0xB3 */
217    { 0xFF74,    0,    0, NULL },                               /* 0xB4 */
218    { 0xFF75,    0,    0, NULL },                               /* 0xB5 */
219    { 0xFF76,    0,    0, NULL },                               /* 0xB6 */
220    { 0xFF77,    0,    0, NULL },                               /* 0xB7 */
221    { 0xFF78,    0,    0, NULL },                               /* 0xB8 */
222    { 0xFF79,    0,    0, NULL },                               /* 0xB9 */
223    { 0xFF7A,    0,    0, NULL },                               /* 0xBA */
224    { 0xFF7B,    0,    0, NULL },                               /* 0xBB */
225    { 0xFF7C,    0,    0, NULL },                               /* 0xBC */
226    { 0xFF7D,    0,    0, NULL },                               /* 0xBD */
227    { 0xFF7E,    0,    0, NULL },                               /* 0xBE */
228    { 0xFF7F,    0,    0, NULL },                               /* 0xBF */
229    { 0xFF80,    0,    0, NULL },                               /* 0xC0 */
230    { 0xFF81,    0,    0, NULL },                               /* 0xC1 */
231    { 0xFF82,    0,    0, NULL },                               /* 0xC2 */
232    { 0xFF83,    0,    0, NULL },                               /* 0xC3 */
233    { 0xFF84,    0,    0, NULL },                               /* 0xC4 */
234    { 0xFF85,    0,    0, NULL },                               /* 0xC5 */
235    { 0xFF86,    0,    0, NULL },                               /* 0xC6 */
236    { 0xFF87,    0,    0, NULL },                               /* 0xC7 */
237    { 0xFF88,    0,    0, NULL },                               /* 0xC8 */
238    { 0xFF89,    0,    0, NULL },                               /* 0xC9 */
239    { 0xFF8A,    0,    0, NULL },                               /* 0xCA */
240    { 0xFF8B,    0,    0, NULL },                               /* 0xCB */
241    { 0xFF8C,    0,    0, NULL },                               /* 0xCC */
242    { 0xFF8D,    0,    0, NULL },                               /* 0xCD */
243    { 0xFF8E,    0,    0, NULL },                               /* 0xCE */
244    { 0xFF8F,    0,    0, NULL },                               /* 0xCF */
245    { 0xFF90,    0,    0, NULL },                               /* 0xD0 */
246    { 0xFF91,    0,    0, NULL },                               /* 0xD1 */
247    { 0xFF92,    0,    0, NULL },                               /* 0xD2 */
248    { 0xFF93,    0,    0, NULL },                               /* 0xD3 */
249    { 0xFF94,    0,    0, NULL },                               /* 0xD4 */
250    { 0xFF95,    0,    0, NULL },                               /* 0xD5 */
251    { 0xFF96,    0,    0, NULL },                               /* 0xD6 */
252    { 0xFF97,    0,    0, NULL },                               /* 0xD7 */
253    { 0xFF98,    0,    0, NULL },                               /* 0xD8 */
254    { 0xFF99,    0,    0, NULL },                               /* 0xD9 */
255    { 0xFF9A,    0,    0, NULL },                               /* 0xDA */
256    { 0xFF9B,    0,    0, NULL },                               /* 0xDB */
257    { 0xFF9C,    0,    0, NULL },                               /* 0xDC */
258    { 0xFF9D,    0,    0, NULL },                               /* 0xDD */
259    { 0xFF9E,    0,    0, NULL },                               /* 0xDE */
260    { 0xFF9F,    0,    0, NULL },                               /* 0xDF */
261    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E0 },          /* 0xE0 */
262    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E1 },          /* 0xE1 */
263    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E2 },          /* 0xE2 */
264    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E3 },          /* 0xE3 */
265    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E4 },          /* 0xE4 */
266    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E5 },          /* 0xE5 */
267    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E6 },          /* 0xE6 */
268    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E7 },          /* 0xE7 */
269    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E8 },          /* 0xE8 */
270    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E9 },          /* 0xE9 */
271    {      0, 0x40, 0xA4, aImplDBCSToUniTab_SJIS_EA },          /* 0xEA */
272    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xEB */ /* We convert this as double byte */
273    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xEC */ /* We convert this as double byte */
274    {      0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_ED },         /* 0xED */ /* We use the MS table for better MS compatibility */
275    {      0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_EE },         /* 0xEE */ /* We use the MS table for better MS compatibility */
276    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xEF */ /* We convert this as double byte */
277    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF0 */ /* EUDC Range */
278    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF1 */ /* EUDC Range */
279    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF2 */ /* EUDC Range */
280    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF3 */ /* EUDC Range */
281    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF4 */ /* EUDC Range */
282    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF5 */ /* EUDC Range */
283    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF6 */ /* EUDC Range */
284    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF7 */ /* EUDC Range */
285    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF8 */ /* EUDC Range */
286    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF9 */ /* EUDC Range */
287    {      0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_FA },         /* 0xFA */ /* We use the MS table for better MS compatibility */
288    {      0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_FB },         /* 0xFB */ /* We use the MS table for better MS compatibility */
289    {      0, 0x40, 0x4B, aImplDBCSToUniTab_MS932_FC },         /* 0xFC */ /* We use the MS table for better MS compatibility */
290    { 0x00A9,    0,    0, NULL },                               /* 0xFD */ /* APPLE additons over SJIS, we convert this like apple, because I think, this gives better result, than we take a replacement char */
291    { 0x2122,    0,    0, NULL },                               /* 0xFE */ /* APPLE additons over SJIS, we convert this like apple, because I think, this gives better result, than we take a replacement char */
292    { 0x2026,    0,    0, NULL }                                /* 0xFF */ /* APPLE additons over SJIS, we convert this like apple, because I think, this gives better result, than we take a replacement char */
293};
294
295/* ----------------------------------------------------------------------- */
296
297/* MS932-Tables are used for better microsoft compatibility */
298
299static ImplUniToDBCSHighTab const aSJISDBCSHighTab[256] =
300{
301    { 0x00, 0xF7, aImplUniToDBCSTab_SJIS_00 },                  /* 0x00 */
302    {    1,    0, NULL },                                       /* 0x01 */
303    {    1,    0, NULL },                                       /* 0x02 */
304    { 0x91, 0xC9, aImplUniToDBCSTab_SJIS_03 },                  /* 0x03 */
305    { 0x01, 0x51, aImplUniToDBCSTab_SJIS_04 },                  /* 0x04 */
306    {    1,    0, NULL },                                       /* 0x05 */
307    {    1,    0, NULL },                                       /* 0x06 */
308    {    1,    0, NULL },                                       /* 0x07 */
309    {    1,    0, NULL },                                       /* 0x08 */
310    {    1,    0, NULL },                                       /* 0x09 */
311    {    1,    0, NULL },                                       /* 0x0A */
312    {    1,    0, NULL },                                       /* 0x0B */
313    {    1,    0, NULL },                                       /* 0x0C */
314    {    1,    0, NULL },                                       /* 0x0D */
315    {    1,    0, NULL },                                       /* 0x0E */
316    {    1,    0, NULL },                                       /* 0x0F */
317    {    1,    0, NULL },                                       /* 0x10 */
318    {    1,    0, NULL },                                       /* 0x11 */
319    {    1,    0, NULL },                                       /* 0x12 */
320    {    1,    0, NULL },                                       /* 0x13 */
321    {    1,    0, NULL },                                       /* 0x14 */
322    {    1,    0, NULL },                                       /* 0x15 */
323    {    1,    0, NULL },                                       /* 0x16 */
324    {    1,    0, NULL },                                       /* 0x17 */
325    {    1,    0, NULL },                                       /* 0x18 */
326    {    1,    0, NULL },                                       /* 0x19 */
327    {    1,    0, NULL },                                       /* 0x1A */
328    {    1,    0, NULL },                                       /* 0x1B */
329    {    1,    0, NULL },                                       /* 0x1C */
330    {    1,    0, NULL },                                       /* 0x1D */
331    {    1,    0, NULL },                                       /* 0x1E */
332    {    1,    0, NULL },                                       /* 0x1F */
333    { 0x10, 0x3E, aImplUniToDBCSTab_SJIS_20 },                  /* 0x20 */
334    { 0x03, 0xD4, aImplUniToDBCSTab_MS932_21 },                 /* 0x21 */
335    { 0x00, 0xBF, aImplUniToDBCSTab_MS932_22 },                 /* 0x22 */
336    { 0x12, 0x12, aImplUniToDBCSTab_SJIS_23 },                  /* 0x23 */
337    { 0x60, 0x73, aImplUniToDBCSTab_MS932_24 },                 /* 0x24 */
338    { 0x00, 0xEF, aImplUniToDBCSTab_SJIS_25 },                  /* 0x25 */
339    { 0x05, 0x6F, aImplUniToDBCSTab_SJIS_26 },                  /* 0x26 */
340    {    1,    0, NULL },                                       /* 0x27 */
341    {    1,    0, NULL },                                       /* 0x28 */
342    {    1,    0, NULL },                                       /* 0x29 */
343    {    1,    0, NULL },                                       /* 0x2A */
344    {    1,    0, NULL },                                       /* 0x2B */
345    {    1,    0, NULL },                                       /* 0x2C */
346    {    1,    0, NULL },                                       /* 0x2D */
347    {    1,    0, NULL },                                       /* 0x2E */
348    {    1,    0, NULL },                                       /* 0x2F */
349    { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_30 },                  /* 0x30 */
350    {    1,    0, NULL },                                       /* 0x31 */
351    { 0x31, 0xA8, aImplUniToDBCSTab_MS932_32 },                 /* 0x32 */
352    { 0x03, 0xCD, aImplUniToDBCSTab_MS932_33 },                 /* 0x33 */
353    {    1,    0, NULL },                                       /* 0x34 */
354    {    1,    0, NULL },                                       /* 0x35 */
355    {    1,    0, NULL },                                       /* 0x36 */
356    {    1,    0, NULL },                                       /* 0x37 */
357    {    1,    0, NULL },                                       /* 0x38 */
358    {    1,    0, NULL },                                       /* 0x39 */
359    {    1,    0, NULL },                                       /* 0x3A */
360    {    1,    0, NULL },                                       /* 0x3B */
361    {    1,    0, NULL },                                       /* 0x3C */
362    {    1,    0, NULL },                                       /* 0x3D */
363    {    1,    0, NULL },                                       /* 0x3E */
364    {    1,    0, NULL },                                       /* 0x3F */
365    {    1,    0, NULL },                                       /* 0x40 */
366    {    1,    0, NULL },                                       /* 0x41 */
367    {    1,    0, NULL },                                       /* 0x42 */
368    {    1,    0, NULL },                                       /* 0x43 */
369    {    1,    0, NULL },                                       /* 0x44 */
370    {    1,    0, NULL },                                       /* 0x45 */
371    {    1,    0, NULL },                                       /* 0x46 */
372    {    1,    0, NULL },                                       /* 0x47 */
373    {    1,    0, NULL },                                       /* 0x48 */
374    {    1,    0, NULL },                                       /* 0x49 */
375    {    1,    0, NULL },                                       /* 0x4A */
376    {    1,    0, NULL },                                       /* 0x4B */
377    {    1,    0, NULL },                                       /* 0x4C */
378    {    1,    0, NULL },                                       /* 0x4D */
379    { 0x00, 0xFC, aImplUniToDBCSTab_SJIS_4E },                  /* 0x4E */
380    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_4F },                  /* 0x4F */
381    { 0x05, 0xFB, aImplUniToDBCSTab_SJIS_50 },                  /* 0x50 */
382    { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_51 },                  /* 0x51 */
383    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_52 },                  /* 0x52 */
384    { 0x00, 0xFA, aImplUniToDBCSTab_SJIS_53 },                  /* 0x53 */
385    { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_54 },                  /* 0x54 */
386    { 0x04, 0xFE, aImplUniToDBCSTab_SJIS_55 },                  /* 0x55 */
387    { 0x06, 0xFF, aImplUniToDBCSTab_SJIS_56 },                  /* 0x56 */
388    { 0x00, 0xFC, aImplUniToDBCSTab_SJIS_57 },                  /* 0x57 */
389    { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_58 },                  /* 0x58 */
390    { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_59 },                  /* 0x59 */
391    { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_5A },                  /* 0x5A */
392    { 0x09, 0xFF, aImplUniToDBCSTab_SJIS_5B },                  /* 0x5B */
393    { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_5C },                  /* 0x5C */
394    { 0x07, 0xFE, aImplUniToDBCSTab_SJIS_5D },                  /* 0x5D */
395    { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_5E },                  /* 0x5E */
396    { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_5F },                  /* 0x5F */
397    { 0x0E, 0xFB, aImplUniToDBCSTab_SJIS_60 },                  /* 0x60 */
398    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_61 },                  /* 0x61 */
399    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_62 },                  /* 0x62 */
400    { 0x01, 0xFA, aImplUniToDBCSTab_SJIS_63 },                  /* 0x63 */
401    { 0x06, 0xFE, aImplUniToDBCSTab_SJIS_64 },                  /* 0x64 */
402    { 0x00, 0xFB, aImplUniToDBCSTab_SJIS_65 },                  /* 0x65 */
403    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_66 },                  /* 0x66 */
404    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_67 },                  /* 0x67 */
405    { 0x01, 0xFA, aImplUniToDBCSTab_SJIS_68 },                  /* 0x68 */
406    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_69 },                  /* 0x69 */
407    { 0x02, 0xFB, aImplUniToDBCSTab_SJIS_6A },                  /* 0x6A */
408    { 0x04, 0xF3, aImplUniToDBCSTab_SJIS_6B },                  /* 0x6B */
409    { 0x08, 0xF3, aImplUniToDBCSTab_SJIS_6C },                  /* 0x6C */
410    { 0x04, 0xFC, aImplUniToDBCSTab_SJIS_6D },                  /* 0x6D */
411    { 0x05, 0xFF, aImplUniToDBCSTab_SJIS_6E },                  /* 0x6E */
412    { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_6F },                  /* 0x6F */
413    { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_70 },                  /* 0x70 */
414    { 0x04, 0xFF, aImplUniToDBCSTab_SJIS_71 },                  /* 0x71 */
415    { 0x06, 0xFD, aImplUniToDBCSTab_SJIS_72 },                  /* 0x72 */
416    { 0x0A, 0xFE, aImplUniToDBCSTab_SJIS_73 },                  /* 0x73 */
417    { 0x03, 0xF8, aImplUniToDBCSTab_SJIS_74 },                  /* 0x74 */
418    { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_75 },                  /* 0x75 */
419    { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_76 },                  /* 0x76 */
420    { 0x01, 0xFC, aImplUniToDBCSTab_SJIS_77 },                  /* 0x77 */
421    { 0x02, 0xFD, aImplUniToDBCSTab_SJIS_78 },                  /* 0x78 */
422    { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_79 },                  /* 0x79 */
423    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_7A },                  /* 0x7A */
424    { 0x02, 0xF7, aImplUniToDBCSTab_SJIS_7B },                  /* 0x7B */
425    { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_7C },                  /* 0x7C */
426    { 0x00, 0xFB, aImplUniToDBCSTab_SJIS_7D },                  /* 0x7D */
427    { 0x01, 0x9C, aImplUniToDBCSTab_SJIS_7E },                  /* 0x7E */
428    { 0x36, 0xFC, aImplUniToDBCSTab_SJIS_7F },                  /* 0x7F */
429    { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_80 },                  /* 0x80 */
430    { 0x02, 0xFE, aImplUniToDBCSTab_SJIS_81 },                  /* 0x81 */
431    { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_82 },                  /* 0x82 */
432    { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_83 },                  /* 0x83 */
433    { 0x03, 0xFF, aImplUniToDBCSTab_SJIS_84 },                  /* 0x84 */
434    { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_85 },                  /* 0x85 */
435    { 0x02, 0xFE, aImplUniToDBCSTab_SJIS_86 },                  /* 0x86 */
436    { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_87 },                  /* 0x87 */
437    { 0x05, 0xFE, aImplUniToDBCSTab_SJIS_88 },                  /* 0x88 */
438    { 0x02, 0xF8, aImplUniToDBCSTab_SJIS_89 },                  /* 0x89 */
439    { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_8A },                  /* 0x8A */
440    { 0x00, 0x9A, aImplUniToDBCSTab_SJIS_8B },                  /* 0x8B */
441    { 0x37, 0xFD, aImplUniToDBCSTab_SJIS_8C },                  /* 0x8C */
442    { 0x04, 0xFF, aImplUniToDBCSTab_SJIS_8D },                  /* 0x8D */
443    { 0x08, 0xFE, aImplUniToDBCSTab_SJIS_8E },                  /* 0x8E */
444    { 0x03, 0xFD, aImplUniToDBCSTab_SJIS_8F },                  /* 0x8F */
445    { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_90 },                  /* 0x90 */
446    { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_91 },                  /* 0x91 */
447    { 0x06, 0xFF, aImplUniToDBCSTab_SJIS_92 },                  /* 0x92 */
448    { 0x02, 0xF8, aImplUniToDBCSTab_SJIS_93 },                  /* 0x93 */
449    { 0x03, 0x81, aImplUniToDBCSTab_SJIS_94 },                  /* 0x94 */
450    { 0x77, 0xE5, aImplUniToDBCSTab_SJIS_95 },                  /* 0x95 */
451    { 0x1C, 0xFB, aImplUniToDBCSTab_SJIS_96 },                  /* 0x96 */
452    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_97 },                  /* 0x97 */
453    { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_98 },                  /* 0x98 */
454    { 0x03, 0xFF, aImplUniToDBCSTab_SJIS_99 },                  /* 0x99 */
455    { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_9A },                  /* 0x9A */
456    { 0x06, 0xF5, aImplUniToDBCSTab_SJIS_9B },                  /* 0x9B */
457    { 0x00, 0xF6, aImplUniToDBCSTab_SJIS_9C },                  /* 0x9C */
458    { 0x03, 0xFD, aImplUniToDBCSTab_SJIS_9D },                  /* 0x9D */
459    { 0x19, 0xFD, aImplUniToDBCSTab_SJIS_9E },                  /* 0x9E */
460    { 0x07, 0xA0, aImplUniToDBCSTab_SJIS_9F },                  /* 0x9F */
461    {    1,    0, NULL },                                       /* 0xA0 */
462    {    1,    0, NULL },                                       /* 0xA1 */
463    {    1,    0, NULL },                                       /* 0xA2 */
464    {    1,    0, NULL },                                       /* 0xA3 */
465    {    1,    0, NULL },                                       /* 0xA4 */
466    {    1,    0, NULL },                                       /* 0xA5 */
467    {    1,    0, NULL },                                       /* 0xA6 */
468    {    1,    0, NULL },                                       /* 0xA7 */
469    {    1,    0, NULL },                                       /* 0xA8 */
470    {    1,    0, NULL },                                       /* 0xA9 */
471    {    1,    0, NULL },                                       /* 0xAA */
472    {    1,    0, NULL },                                       /* 0xAB */
473    {    1,    0, NULL },                                       /* 0xAC */
474    {    1,    0, NULL },                                       /* 0xAD */
475    {    1,    0, NULL },                                       /* 0xAE */
476    {    1,    0, NULL },                                       /* 0xAF */
477    {    1,    0, NULL },                                       /* 0xB0 */
478    {    1,    0, NULL },                                       /* 0xB1 */
479    {    1,    0, NULL },                                       /* 0xB2 */
480    {    1,    0, NULL },                                       /* 0xB3 */
481    {    1,    0, NULL },                                       /* 0xB4 */
482    {    1,    0, NULL },                                       /* 0xB5 */
483    {    1,    0, NULL },                                       /* 0xB6 */
484    {    1,    0, NULL },                                       /* 0xB7 */
485    {    1,    0, NULL },                                       /* 0xB8 */
486    {    1,    0, NULL },                                       /* 0xB9 */
487    {    1,    0, NULL },                                       /* 0xBA */
488    {    1,    0, NULL },                                       /* 0xBB */
489    {    1,    0, NULL },                                       /* 0xBC */
490    {    1,    0, NULL },                                       /* 0xBD */
491    {    1,    0, NULL },                                       /* 0xBE */
492    {    1,    0, NULL },                                       /* 0xBF */
493    {    1,    0, NULL },                                       /* 0xC0 */
494    {    1,    0, NULL },                                       /* 0xC1 */
495    {    1,    0, NULL },                                       /* 0xC2 */
496    {    1,    0, NULL },                                       /* 0xC3 */
497    {    1,    0, NULL },                                       /* 0xC4 */
498    {    1,    0, NULL },                                       /* 0xC5 */
499    {    1,    0, NULL },                                       /* 0xC6 */
500    {    1,    0, NULL },                                       /* 0xC7 */
501    {    1,    0, NULL },                                       /* 0xC8 */
502    {    1,    0, NULL },                                       /* 0xC9 */
503    {    1,    0, NULL },                                       /* 0xCA */
504    {    1,    0, NULL },                                       /* 0xCB */
505    {    1,    0, NULL },                                       /* 0xCC */
506    {    1,    0, NULL },                                       /* 0xCD */
507    {    1,    0, NULL },                                       /* 0xCE */
508    {    1,    0, NULL },                                       /* 0xCF */
509    {    1,    0, NULL },                                       /* 0xD0 */
510    {    1,    0, NULL },                                       /* 0xD1 */
511    {    1,    0, NULL },                                       /* 0xD2 */
512    {    1,    0, NULL },                                       /* 0xD3 */
513    {    1,    0, NULL },                                       /* 0xD4 */
514    {    1,    0, NULL },                                       /* 0xD5 */
515    {    1,    0, NULL },                                       /* 0xD6 */
516    {    1,    0, NULL },                                       /* 0xD7 */
517    {    1,    0, NULL },                                       /* 0xD8 */
518    {    1,    0, NULL },                                       /* 0xD9 */
519    {    1,    0, NULL },                                       /* 0xDA */
520    {    1,    0, NULL },                                       /* 0xDB */
521    {    1,    0, NULL },                                       /* 0xDC */
522    {    1,    0, NULL },                                       /* 0xDD */
523    {    1,    0, NULL },                                       /* 0xDE */
524    {    1,    0, NULL },                                       /* 0xDF */
525    {    1,    0, NULL },                                       /* 0xE0 */
526    {    1,    0, NULL },                                       /* 0xE1 */
527    {    1,    0, NULL },                                       /* 0xE2 */
528    {    1,    0, NULL },                                       /* 0xE3 */
529    {    1,    0, NULL },                                       /* 0xE4 */
530    {    1,    0, NULL },                                       /* 0xE5 */
531    {    1,    0, NULL },                                       /* 0xE6 */
532    {    1,    0, NULL },                                       /* 0xE7 */
533    {    1,    0, NULL },                                       /* 0xE8 */
534    {    1,    0, NULL },                                       /* 0xE9 */
535    {    1,    0, NULL },                                       /* 0xEA */
536    {    1,    0, NULL },                                       /* 0xEB */
537    {    1,    0, NULL },                                       /* 0xEC */
538    {    1,    0, NULL },                                       /* 0xED */
539    {    1,    0, NULL },                                       /* 0xEE */
540    {    1,    0, NULL },                                       /* 0xEF */
541    {    1,    0, NULL },                                       /* 0xF0 */
542    {    1,    0, NULL },                                       /* 0xF1 */
543    {    1,    0, NULL },                                       /* 0xF2 */
544    {    1,    0, NULL },                                       /* 0xF3 */
545    {    1,    0, NULL },                                       /* 0xF4 */
546    {    1,    0, NULL },                                       /* 0xF5 */
547    {    1,    0, NULL },                                       /* 0xF6 */
548    {    1,    0, NULL },                                       /* 0xF7 */
549    {    1,    0, NULL },                                       /* 0xF8 */
550    { 0x29, 0xDC, aImplUniToDBCSTab_MS932_F9 },                 /* 0xF9 */
551    { 0x0E, 0x2D, aImplUniToDBCSTab_MS932_FA },                 /* 0xFA */
552    {    1,    0, NULL },                                       /* 0xFB */
553    {    1,    0, NULL },                                       /* 0xFC */
554    {    1,    0, NULL },                                       /* 0xFD */
555    {    1,    0, NULL },                                       /* 0xFE */
556    { 0x01, 0xE5, aImplUniToDBCSTab_SJIS_FF }                   /* 0xFF */
557};
558
559/* ----------------------------------------------------------------------- */
560
561/* F040-F9FC    --> E000-E757 */
562
563#define DBCS_EUDC_SJIS_COUNT        1
564static ImplDBCSEUDCData const aImplSJISDBCSEUDCTab[DBCS_EUDC_SJIS_COUNT] =
565{
566    /* EUDC-Range */
567    /* Lead:    F0-F9 */
568    /* Trail:   40-7E, 80-FC */
569    { 0xF0, 0xF9, 0x40, 0x7E, 0x80, 0xFC, 0, 0, 2, 0xBC, 0xE000, 0xE757 }
570};
571
572/* ----------------------------------------------------------------------- */
573
574static ImplDBCSConvertData const aImplSJISDBCSCvtData =
575{
576    aSJISUniLeadTab,
577    aSJISDBCSHighTab,
578    0x00, 0xFF,
579    0x40, 0xFC,
580    aImplSJISDBCSEUDCTab,
581    DBCS_EUDC_SJIS_COUNT
582};
583
584/* ----------------------------------------------------------------------- */
585
586static ImplTextEncodingData const aImplSJISTextEncodingData
587    = { { &aImplSJISDBCSCvtData,
588          ImplDBCSToUnicode,
589          ImplUnicodeToDBCS,
590          NULL,
591          NULL,
592          NULL,
593          NULL,
594          NULL,
595          NULL },
596        1,
597        2,
598        2,
599        128,
600        "euc-jp",
601        "shift_jis",
602        RTL_TEXTENCODING_INFO_MULTIBYTE | RTL_TEXTENCODING_INFO_MIME };
603    /* SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */
604
605/* ======================================================================= */
606
607static ImplDBCSToUniLeadTab const aMS932UniLeadTab[256] =
608{
609    { 0x0000,    0,    0, NULL },                               /* 0x00 */
610    { 0x0001,    0,    0, NULL },                               /* 0x01 */
611    { 0x0002,    0,    0, NULL },                               /* 0x02 */
612    { 0x0003,    0,    0, NULL },                               /* 0x03 */
613    { 0x0004,    0,    0, NULL },                               /* 0x04 */
614    { 0x0005,    0,    0, NULL },                               /* 0x05 */
615    { 0x0006,    0,    0, NULL },                               /* 0x06 */
616    { 0x0007,    0,    0, NULL },                               /* 0x07 */
617    { 0x0008,    0,    0, NULL },                               /* 0x08 */
618    { 0x0009,    0,    0, NULL },                               /* 0x09 */
619    { 0x000A,    0,    0, NULL },                               /* 0x0A */
620    { 0x000B,    0,    0, NULL },                               /* 0x0B */
621    { 0x000C,    0,    0, NULL },                               /* 0x0C */
622    { 0x000D,    0,    0, NULL },                               /* 0x0D */
623    { 0x000E,    0,    0, NULL },                               /* 0x0E */
624    { 0x000F,    0,    0, NULL },                               /* 0x0F */
625    { 0x0010,    0,    0, NULL },                               /* 0x10 */
626    { 0x0011,    0,    0, NULL },                               /* 0x11 */
627    { 0x0012,    0,    0, NULL },                               /* 0x12 */
628    { 0x0013,    0,    0, NULL },                               /* 0x13 */
629    { 0x0014,    0,    0, NULL },                               /* 0x14 */
630    { 0x0015,    0,    0, NULL },                               /* 0x15 */
631    { 0x0016,    0,    0, NULL },                               /* 0x16 */
632    { 0x0017,    0,    0, NULL },                               /* 0x17 */
633    { 0x0018,    0,    0, NULL },                               /* 0x18 */
634    { 0x0019,    0,    0, NULL },                               /* 0x19 */
635    { 0x001A,    0,    0, NULL },                               /* 0x1A */
636    { 0x001B,    0,    0, NULL },                               /* 0x1B */
637    { 0x001C,    0,    0, NULL },                               /* 0x1C */
638    { 0x001D,    0,    0, NULL },                               /* 0x1D */
639    { 0x001E,    0,    0, NULL },                               /* 0x1E */
640    { 0x001F,    0,    0, NULL },                               /* 0x1F */
641    { 0x0020,    0,    0, NULL },                               /* 0x20 */
642    { 0x0021,    0,    0, NULL },                               /* 0x21 */
643    { 0x0022,    0,    0, NULL },                               /* 0x22 */
644    { 0x0023,    0,    0, NULL },                               /* 0x23 */
645    { 0x0024,    0,    0, NULL },                               /* 0x24 */
646    { 0x0025,    0,    0, NULL },                               /* 0x25 */
647    { 0x0026,    0,    0, NULL },                               /* 0x26 */
648    { 0x0027,    0,    0, NULL },                               /* 0x27 */
649    { 0x0028,    0,    0, NULL },                               /* 0x28 */
650    { 0x0029,    0,    0, NULL },                               /* 0x29 */
651    { 0x002A,    0,    0, NULL },                               /* 0x2A */
652    { 0x002B,    0,    0, NULL },                               /* 0x2B */
653    { 0x002C,    0,    0, NULL },                               /* 0x2C */
654    { 0x002D,    0,    0, NULL },                               /* 0x2D */
655    { 0x002E,    0,    0, NULL },                               /* 0x2E */
656    { 0x002F,    0,    0, NULL },                               /* 0x2F */
657    { 0x0030,    0,    0, NULL },                               /* 0x30 */
658    { 0x0031,    0,    0, NULL },                               /* 0x31 */
659    { 0x0032,    0,    0, NULL },                               /* 0x32 */
660    { 0x0033,    0,    0, NULL },                               /* 0x33 */
661    { 0x0034,    0,    0, NULL },                               /* 0x34 */
662    { 0x0035,    0,    0, NULL },                               /* 0x35 */
663    { 0x0036,    0,    0, NULL },                               /* 0x36 */
664    { 0x0037,    0,    0, NULL },                               /* 0x37 */
665    { 0x0038,    0,    0, NULL },                               /* 0x38 */
666    { 0x0039,    0,    0, NULL },                               /* 0x39 */
667    { 0x003A,    0,    0, NULL },                               /* 0x3A */
668    { 0x003B,    0,    0, NULL },                               /* 0x3B */
669    { 0x003C,    0,    0, NULL },                               /* 0x3C */
670    { 0x003D,    0,    0, NULL },                               /* 0x3D */
671    { 0x003E,    0,    0, NULL },                               /* 0x3E */
672    { 0x003F,    0,    0, NULL },                               /* 0x3F */
673    { 0x0040,    0,    0, NULL },                               /* 0x40 */
674    { 0x0041,    0,    0, NULL },                               /* 0x41 */
675    { 0x0042,    0,    0, NULL },                               /* 0x42 */
676    { 0x0043,    0,    0, NULL },                               /* 0x43 */
677    { 0x0044,    0,    0, NULL },                               /* 0x44 */
678    { 0x0045,    0,    0, NULL },                               /* 0x45 */
679    { 0x0046,    0,    0, NULL },                               /* 0x46 */
680    { 0x0047,    0,    0, NULL },                               /* 0x47 */
681    { 0x0048,    0,    0, NULL },                               /* 0x48 */
682    { 0x0049,    0,    0, NULL },                               /* 0x49 */
683    { 0x004A,    0,    0, NULL },                               /* 0x4A */
684    { 0x004B,    0,    0, NULL },                               /* 0x4B */
685    { 0x004C,    0,    0, NULL },                               /* 0x4C */
686    { 0x004D,    0,    0, NULL },                               /* 0x4D */
687    { 0x004E,    0,    0, NULL },                               /* 0x4E */
688    { 0x004F,    0,    0, NULL },                               /* 0x4F */
689    { 0x0050,    0,    0, NULL },                               /* 0x50 */
690    { 0x0051,    0,    0, NULL },                               /* 0x51 */
691    { 0x0052,    0,    0, NULL },                               /* 0x52 */
692    { 0x0053,    0,    0, NULL },                               /* 0x53 */
693    { 0x0054,    0,    0, NULL },                               /* 0x54 */
694    { 0x0055,    0,    0, NULL },                               /* 0x55 */
695    { 0x0056,    0,    0, NULL },                               /* 0x56 */
696    { 0x0057,    0,    0, NULL },                               /* 0x57 */
697    { 0x0058,    0,    0, NULL },                               /* 0x58 */
698    { 0x0059,    0,    0, NULL },                               /* 0x59 */
699    { 0x005A,    0,    0, NULL },                               /* 0x5A */
700    { 0x005B,    0,    0, NULL },                               /* 0x5B */
701    { 0x005C,    0,    0, NULL },                               /* 0x5C */ /* in SJIS this is A5 (YEN SIGN), but for compatibiliy with ascii, we use 0x5C like MS CP392 */
702    { 0x005D,    0,    0, NULL },                               /* 0x5D */
703    { 0x005E,    0,    0, NULL },                               /* 0x5E */
704    { 0x005F,    0,    0, NULL },                               /* 0x5F */
705    { 0x0060,    0,    0, NULL },                               /* 0x60 */
706    { 0x0061,    0,    0, NULL },                               /* 0x61 */
707    { 0x0062,    0,    0, NULL },                               /* 0x62 */
708    { 0x0063,    0,    0, NULL },                               /* 0x63 */
709    { 0x0064,    0,    0, NULL },                               /* 0x64 */
710    { 0x0065,    0,    0, NULL },                               /* 0x65 */
711    { 0x0066,    0,    0, NULL },                               /* 0x66 */
712    { 0x0067,    0,    0, NULL },                               /* 0x67 */
713    { 0x0068,    0,    0, NULL },                               /* 0x68 */
714    { 0x0069,    0,    0, NULL },                               /* 0x69 */
715    { 0x006A,    0,    0, NULL },                               /* 0x6A */
716    { 0x006B,    0,    0, NULL },                               /* 0x6B */
717    { 0x006C,    0,    0, NULL },                               /* 0x6C */
718    { 0x006D,    0,    0, NULL },                               /* 0x6D */
719    { 0x006E,    0,    0, NULL },                               /* 0x6E */
720    { 0x006F,    0,    0, NULL },                               /* 0x6F */
721    { 0x0070,    0,    0, NULL },                               /* 0x70 */
722    { 0x0071,    0,    0, NULL },                               /* 0x71 */
723    { 0x0072,    0,    0, NULL },                               /* 0x72 */
724    { 0x0073,    0,    0, NULL },                               /* 0x73 */
725    { 0x0074,    0,    0, NULL },                               /* 0x74 */
726    { 0x0075,    0,    0, NULL },                               /* 0x75 */
727    { 0x0076,    0,    0, NULL },                               /* 0x76 */
728    { 0x0077,    0,    0, NULL },                               /* 0x77 */
729    { 0x0078,    0,    0, NULL },                               /* 0x78 */
730    { 0x0079,    0,    0, NULL },                               /* 0x79 */
731    { 0x007A,    0,    0, NULL },                               /* 0x7A */
732    { 0x007B,    0,    0, NULL },                               /* 0x7B */
733    { 0x007C,    0,    0, NULL },                               /* 0x7C */
734    { 0x007D,    0,    0, NULL },                               /* 0x7D */
735    { 0x007E,    0,    0, NULL },                               /* 0x7E */ /* in SJIS this is 0x0203E (SPACING OVERSCORE), but for compatibiliy with ascii, we use 0x7E (TILDE) like MS CP392 */
736    { 0x007F,    0,    0, NULL },                               /* 0x7F */
737    { 0x005C,    0,    0, NULL },                               /* 0x80 */ /* APPLE additons over SJIS, we convert this like apple, because I think, this gives better result, than we take a replacement char */
738    {      0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_81 },         /* 0x81 */
739    {      0, 0x4F, 0xF1, aImplDBCSToUniTab_SJIS_82 },          /* 0x82 */
740    {      0, 0x40, 0xD6, aImplDBCSToUniTab_SJIS_83 },          /* 0x83 */
741    {      0, 0x40, 0xBF, aImplDBCSToUniTab_SJIS_84 },          /* 0x84 */
742    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x85 */ /* We convert this as double byte */
743    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x86 */ /* We convert this as double byte */
744    {      0, 0x40, 0x9C, aImplDBCSToUniTab_MS932_87 },         /* 0x87 */
745    {      0, 0x9F, 0xFC, aImplDBCSToUniTab_SJIS_88 },          /* 0x88 */
746    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_89 },          /* 0x89 */
747    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8A },          /* 0x8A */
748    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8B },          /* 0x8B */
749    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8C },          /* 0x8C */
750    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8D },          /* 0x8D */
751    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8E },          /* 0x8E */
752    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8F },          /* 0x8F */
753    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_90 },          /* 0x90 */
754    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_91 },          /* 0x91 */
755    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_92 },          /* 0x92 */
756    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_93 },          /* 0x93 */
757    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_94 },          /* 0x94 */
758    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_95 },          /* 0x95 */
759    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_96 },          /* 0x96 */
760    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_97 },          /* 0x97 */
761    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_98 },          /* 0x98 */
762    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_99 },          /* 0x99 */
763    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9A },          /* 0x9A */
764    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9B },          /* 0x9B */
765    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9C },          /* 0x9C */
766    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9D },          /* 0x9D */
767    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9E },          /* 0x9E */
768    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9F },          /* 0x9F */
769    { 0x00A0,    0,    0, NULL },                               /* 0xA0 */ /* APPLE additons over SJIS, we convert this like apple, because I think, this gives better result, than we take a replacement char */
770    { 0xFF61,    0,    0, NULL },                               /* 0xA1 */
771    { 0xFF62,    0,    0, NULL },                               /* 0xA2 */
772    { 0xFF63,    0,    0, NULL },                               /* 0xA3 */
773    { 0xFF64,    0,    0, NULL },                               /* 0xA4 */
774    { 0xFF65,    0,    0, NULL },                               /* 0xA5 */
775    { 0xFF66,    0,    0, NULL },                               /* 0xA6 */
776    { 0xFF67,    0,    0, NULL },                               /* 0xA7 */
777    { 0xFF68,    0,    0, NULL },                               /* 0xA8 */
778    { 0xFF69,    0,    0, NULL },                               /* 0xA9 */
779    { 0xFF6A,    0,    0, NULL },                               /* 0xAA */
780    { 0xFF6B,    0,    0, NULL },                               /* 0xAB */
781    { 0xFF6C,    0,    0, NULL },                               /* 0xAC */
782    { 0xFF6D,    0,    0, NULL },                               /* 0xAD */
783    { 0xFF6E,    0,    0, NULL },                               /* 0xAE */
784    { 0xFF6F,    0,    0, NULL },                               /* 0xAF */
785    { 0xFF70,    0,    0, NULL },                               /* 0xB0 */
786    { 0xFF71,    0,    0, NULL },                               /* 0xB1 */
787    { 0xFF72,    0,    0, NULL },                               /* 0xB2 */
788    { 0xFF73,    0,    0, NULL },                               /* 0xB3 */
789    { 0xFF74,    0,    0, NULL },                               /* 0xB4 */
790    { 0xFF75,    0,    0, NULL },                               /* 0xB5 */
791    { 0xFF76,    0,    0, NULL },                               /* 0xB6 */
792    { 0xFF77,    0,    0, NULL },                               /* 0xB7 */
793    { 0xFF78,    0,    0, NULL },                               /* 0xB8 */
794    { 0xFF79,    0,    0, NULL },                               /* 0xB9 */
795    { 0xFF7A,    0,    0, NULL },                               /* 0xBA */
796    { 0xFF7B,    0,    0, NULL },                               /* 0xBB */
797    { 0xFF7C,    0,    0, NULL },                               /* 0xBC */
798    { 0xFF7D,    0,    0, NULL },                               /* 0xBD */
799    { 0xFF7E,    0,    0, NULL },                               /* 0xBE */
800    { 0xFF7F,    0,    0, NULL },                               /* 0xBF */
801    { 0xFF80,    0,    0, NULL },                               /* 0xC0 */
802    { 0xFF81,    0,    0, NULL },                               /* 0xC1 */
803    { 0xFF82,    0,    0, NULL },                               /* 0xC2 */
804    { 0xFF83,    0,    0, NULL },                               /* 0xC3 */
805    { 0xFF84,    0,    0, NULL },                               /* 0xC4 */
806    { 0xFF85,    0,    0, NULL },                               /* 0xC5 */
807    { 0xFF86,    0,    0, NULL },                               /* 0xC6 */
808    { 0xFF87,    0,    0, NULL },                               /* 0xC7 */
809    { 0xFF88,    0,    0, NULL },                               /* 0xC8 */
810    { 0xFF89,    0,    0, NULL },                               /* 0xC9 */
811    { 0xFF8A,    0,    0, NULL },                               /* 0xCA */
812    { 0xFF8B,    0,    0, NULL },                               /* 0xCB */
813    { 0xFF8C,    0,    0, NULL },                               /* 0xCC */
814    { 0xFF8D,    0,    0, NULL },                               /* 0xCD */
815    { 0xFF8E,    0,    0, NULL },                               /* 0xCE */
816    { 0xFF8F,    0,    0, NULL },                               /* 0xCF */
817    { 0xFF90,    0,    0, NULL },                               /* 0xD0 */
818    { 0xFF91,    0,    0, NULL },                               /* 0xD1 */
819    { 0xFF92,    0,    0, NULL },                               /* 0xD2 */
820    { 0xFF93,    0,    0, NULL },                               /* 0xD3 */
821    { 0xFF94,    0,    0, NULL },                               /* 0xD4 */
822    { 0xFF95,    0,    0, NULL },                               /* 0xD5 */
823    { 0xFF96,    0,    0, NULL },                               /* 0xD6 */
824    { 0xFF97,    0,    0, NULL },                               /* 0xD7 */
825    { 0xFF98,    0,    0, NULL },                               /* 0xD8 */
826    { 0xFF99,    0,    0, NULL },                               /* 0xD9 */
827    { 0xFF9A,    0,    0, NULL },                               /* 0xDA */
828    { 0xFF9B,    0,    0, NULL },                               /* 0xDB */
829    { 0xFF9C,    0,    0, NULL },                               /* 0xDC */
830    { 0xFF9D,    0,    0, NULL },                               /* 0xDD */
831    { 0xFF9E,    0,    0, NULL },                               /* 0xDE */
832    { 0xFF9F,    0,    0, NULL },                               /* 0xDF */
833    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E0 },          /* 0xE0 */
834    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E1 },          /* 0xE1 */
835    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E2 },          /* 0xE2 */
836    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E3 },          /* 0xE3 */
837    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E4 },          /* 0xE4 */
838    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E5 },          /* 0xE5 */
839    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E6 },          /* 0xE6 */
840    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E7 },          /* 0xE7 */
841    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E8 },          /* 0xE8 */
842    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E9 },          /* 0xE9 */
843    {      0, 0x40, 0xA4, aImplDBCSToUniTab_SJIS_EA },          /* 0xEA */
844    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xEB */ /* We convert this as double byte */
845    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xEC */ /* We convert this as double byte */
846    {      0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_ED },         /* 0xED */
847    {      0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_EE },         /* 0xEE */
848    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xEF */ /* We convert this as double byte */
849    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF0 */ /* EUDC Range */
850    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF1 */ /* EUDC Range */
851    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF2 */ /* EUDC Range */
852    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF3 */ /* EUDC Range */
853    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF4 */ /* EUDC Range */
854    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF5 */ /* EUDC Range */
855    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF6 */ /* EUDC Range */
856    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF7 */ /* EUDC Range */
857    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF8 */ /* EUDC Range */
858    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF9 */ /* EUDC Range */
859    {      0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_FA },         /* 0xFA */
860    {      0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_FB },         /* 0xFB */
861    {      0, 0x40, 0x4B, aImplDBCSToUniTab_MS932_FC },         /* 0xFC */
862    { 0x00A9,    0,    0, NULL },                               /* 0xFD */ /* APPLE additons over SJIS, we convert this like apple, because I think, this gives better result, than we take a replacement char */
863    { 0x2122,    0,    0, NULL },                               /* 0xFE */ /* APPLE additons over SJIS, we convert this like apple, because I think, this gives better result, than we take a replacement char */
864    { 0x2026,    0,    0, NULL }                                /* 0xFF */ /* APPLE additons over SJIS, we convert this like apple, because I think, this gives better result, than we take a replacement char */
865};
866
867/* ----------------------------------------------------------------------- */
868
869static ImplUniToDBCSHighTab const aMS932DBCSHighTab[256] =
870{
871    { 0x00, 0xF7, aImplUniToDBCSTab_SJIS_00 },                  /* 0x00 */
872    {    1,    0, NULL },                                       /* 0x01 */
873    {    1,    0, NULL },                                       /* 0x02 */
874    { 0x91, 0xC9, aImplUniToDBCSTab_SJIS_03 },                  /* 0x03 */
875    { 0x01, 0x51, aImplUniToDBCSTab_SJIS_04 },                  /* 0x04 */
876    {    1,    0, NULL },                                       /* 0x05 */
877    {    1,    0, NULL },                                       /* 0x06 */
878    {    1,    0, NULL },                                       /* 0x07 */
879    {    1,    0, NULL },                                       /* 0x08 */
880    {    1,    0, NULL },                                       /* 0x09 */
881    {    1,    0, NULL },                                       /* 0x0A */
882    {    1,    0, NULL },                                       /* 0x0B */
883    {    1,    0, NULL },                                       /* 0x0C */
884    {    1,    0, NULL },                                       /* 0x0D */
885    {    1,    0, NULL },                                       /* 0x0E */
886    {    1,    0, NULL },                                       /* 0x0F */
887    {    1,    0, NULL },                                       /* 0x10 */
888    {    1,    0, NULL },                                       /* 0x11 */
889    {    1,    0, NULL },                                       /* 0x12 */
890    {    1,    0, NULL },                                       /* 0x13 */
891    {    1,    0, NULL },                                       /* 0x14 */
892    {    1,    0, NULL },                                       /* 0x15 */
893    {    1,    0, NULL },                                       /* 0x16 */
894    {    1,    0, NULL },                                       /* 0x17 */
895    {    1,    0, NULL },                                       /* 0x18 */
896    {    1,    0, NULL },                                       /* 0x19 */
897    {    1,    0, NULL },                                       /* 0x1A */
898    {    1,    0, NULL },                                       /* 0x1B */
899    {    1,    0, NULL },                                       /* 0x1C */
900    {    1,    0, NULL },                                       /* 0x1D */
901    {    1,    0, NULL },                                       /* 0x1E */
902    {    1,    0, NULL },                                       /* 0x1F */
903    { 0x10, 0x3E, aImplUniToDBCSTab_SJIS_20 },                  /* 0x20 */
904    { 0x03, 0xD4, aImplUniToDBCSTab_MS932_21 },                 /* 0x21 */
905    { 0x00, 0xBF, aImplUniToDBCSTab_MS932_22 },                 /* 0x22 */
906    { 0x12, 0x12, aImplUniToDBCSTab_SJIS_23 },                  /* 0x23 */
907    { 0x60, 0x73, aImplUniToDBCSTab_MS932_24 },                 /* 0x24 */
908    { 0x00, 0xEF, aImplUniToDBCSTab_SJIS_25 },                  /* 0x25 */
909    { 0x05, 0x6F, aImplUniToDBCSTab_SJIS_26 },                  /* 0x26 */
910    {    1,    0, NULL },                                       /* 0x27 */
911    {    1,    0, NULL },                                       /* 0x28 */
912    {    1,    0, NULL },                                       /* 0x29 */
913    {    1,    0, NULL },                                       /* 0x2A */
914    {    1,    0, NULL },                                       /* 0x2B */
915    {    1,    0, NULL },                                       /* 0x2C */
916    {    1,    0, NULL },                                       /* 0x2D */
917    {    1,    0, NULL },                                       /* 0x2E */
918    {    1,    0, NULL },                                       /* 0x2F */
919    { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_30 },                  /* 0x30 */
920    {    1,    0, NULL },                                       /* 0x31 */
921    { 0x31, 0xA8, aImplUniToDBCSTab_MS932_32 },                 /* 0x32 */
922    { 0x03, 0xCD, aImplUniToDBCSTab_MS932_33 },                 /* 0x33 */
923    {    1,    0, NULL },                                       /* 0x34 */
924    {    1,    0, NULL },                                       /* 0x35 */
925    {    1,    0, NULL },                                       /* 0x36 */
926    {    1,    0, NULL },                                       /* 0x37 */
927    {    1,    0, NULL },                                       /* 0x38 */
928    {    1,    0, NULL },                                       /* 0x39 */
929    {    1,    0, NULL },                                       /* 0x3A */
930    {    1,    0, NULL },                                       /* 0x3B */
931    {    1,    0, NULL },                                       /* 0x3C */
932    {    1,    0, NULL },                                       /* 0x3D */
933    {    1,    0, NULL },                                       /* 0x3E */
934    {    1,    0, NULL },                                       /* 0x3F */
935    {    1,    0, NULL },                                       /* 0x40 */
936    {    1,    0, NULL },                                       /* 0x41 */
937    {    1,    0, NULL },                                       /* 0x42 */
938    {    1,    0, NULL },                                       /* 0x43 */
939    {    1,    0, NULL },                                       /* 0x44 */
940    {    1,    0, NULL },                                       /* 0x45 */
941    {    1,    0, NULL },                                       /* 0x46 */
942    {    1,    0, NULL },                                       /* 0x47 */
943    {    1,    0, NULL },                                       /* 0x48 */
944    {    1,    0, NULL },                                       /* 0x49 */
945    {    1,    0, NULL },                                       /* 0x4A */
946    {    1,    0, NULL },                                       /* 0x4B */
947    {    1,    0, NULL },                                       /* 0x4C */
948    {    1,    0, NULL },                                       /* 0x4D */
949    { 0x00, 0xFC, aImplUniToDBCSTab_SJIS_4E },                  /* 0x4E */
950    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_4F },                  /* 0x4F */
951    { 0x05, 0xFB, aImplUniToDBCSTab_SJIS_50 },                  /* 0x50 */
952    { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_51 },                  /* 0x51 */
953    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_52 },                  /* 0x52 */
954    { 0x00, 0xFA, aImplUniToDBCSTab_SJIS_53 },                  /* 0x53 */
955    { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_54 },                  /* 0x54 */
956    { 0x04, 0xFE, aImplUniToDBCSTab_SJIS_55 },                  /* 0x55 */
957    { 0x06, 0xFF, aImplUniToDBCSTab_SJIS_56 },                  /* 0x56 */
958    { 0x00, 0xFC, aImplUniToDBCSTab_SJIS_57 },                  /* 0x57 */
959    { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_58 },                  /* 0x58 */
960    { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_59 },                  /* 0x59 */
961    { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_5A },                  /* 0x5A */
962    { 0x09, 0xFF, aImplUniToDBCSTab_SJIS_5B },                  /* 0x5B */
963    { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_5C },                  /* 0x5C */
964    { 0x07, 0xFE, aImplUniToDBCSTab_SJIS_5D },                  /* 0x5D */
965    { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_5E },                  /* 0x5E */
966    { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_5F },                  /* 0x5F */
967    { 0x0E, 0xFB, aImplUniToDBCSTab_SJIS_60 },                  /* 0x60 */
968    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_61 },                  /* 0x61 */
969    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_62 },                  /* 0x62 */
970    { 0x01, 0xFA, aImplUniToDBCSTab_SJIS_63 },                  /* 0x63 */
971    { 0x06, 0xFE, aImplUniToDBCSTab_SJIS_64 },                  /* 0x64 */
972    { 0x00, 0xFB, aImplUniToDBCSTab_SJIS_65 },                  /* 0x65 */
973    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_66 },                  /* 0x66 */
974    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_67 },                  /* 0x67 */
975    { 0x01, 0xFA, aImplUniToDBCSTab_SJIS_68 },                  /* 0x68 */
976    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_69 },                  /* 0x69 */
977    { 0x02, 0xFB, aImplUniToDBCSTab_SJIS_6A },                  /* 0x6A */
978    { 0x04, 0xF3, aImplUniToDBCSTab_SJIS_6B },                  /* 0x6B */
979    { 0x08, 0xF3, aImplUniToDBCSTab_SJIS_6C },                  /* 0x6C */
980    { 0x04, 0xFC, aImplUniToDBCSTab_SJIS_6D },                  /* 0x6D */
981    { 0x05, 0xFF, aImplUniToDBCSTab_SJIS_6E },                  /* 0x6E */
982    { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_6F },                  /* 0x6F */
983    { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_70 },                  /* 0x70 */
984    { 0x04, 0xFF, aImplUniToDBCSTab_SJIS_71 },                  /* 0x71 */
985    { 0x06, 0xFD, aImplUniToDBCSTab_SJIS_72 },                  /* 0x72 */
986    { 0x0A, 0xFE, aImplUniToDBCSTab_SJIS_73 },                  /* 0x73 */
987    { 0x03, 0xF8, aImplUniToDBCSTab_SJIS_74 },                  /* 0x74 */
988    { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_75 },                  /* 0x75 */
989    { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_76 },                  /* 0x76 */
990    { 0x01, 0xFC, aImplUniToDBCSTab_SJIS_77 },                  /* 0x77 */
991    { 0x02, 0xFD, aImplUniToDBCSTab_SJIS_78 },                  /* 0x78 */
992    { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_79 },                  /* 0x79 */
993    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_7A },                  /* 0x7A */
994    { 0x02, 0xF7, aImplUniToDBCSTab_SJIS_7B },                  /* 0x7B */
995    { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_7C },                  /* 0x7C */
996    { 0x00, 0xFB, aImplUniToDBCSTab_SJIS_7D },                  /* 0x7D */
997    { 0x01, 0x9C, aImplUniToDBCSTab_SJIS_7E },                  /* 0x7E */
998    { 0x36, 0xFC, aImplUniToDBCSTab_SJIS_7F },                  /* 0x7F */
999    { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_80 },                  /* 0x80 */
1000    { 0x02, 0xFE, aImplUniToDBCSTab_SJIS_81 },                  /* 0x81 */
1001    { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_82 },                  /* 0x82 */
1002    { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_83 },                  /* 0x83 */
1003    { 0x03, 0xFF, aImplUniToDBCSTab_SJIS_84 },                  /* 0x84 */
1004    { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_85 },                  /* 0x85 */
1005    { 0x02, 0xFE, aImplUniToDBCSTab_SJIS_86 },                  /* 0x86 */
1006    { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_87 },                  /* 0x87 */
1007    { 0x05, 0xFE, aImplUniToDBCSTab_SJIS_88 },                  /* 0x88 */
1008    { 0x02, 0xF8, aImplUniToDBCSTab_SJIS_89 },                  /* 0x89 */
1009    { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_8A },                  /* 0x8A */
1010    { 0x00, 0x9A, aImplUniToDBCSTab_SJIS_8B },                  /* 0x8B */
1011    { 0x37, 0xFD, aImplUniToDBCSTab_SJIS_8C },                  /* 0x8C */
1012    { 0x04, 0xFF, aImplUniToDBCSTab_SJIS_8D },                  /* 0x8D */
1013    { 0x08, 0xFE, aImplUniToDBCSTab_SJIS_8E },                  /* 0x8E */
1014    { 0x03, 0xFD, aImplUniToDBCSTab_SJIS_8F },                  /* 0x8F */
1015    { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_90 },                  /* 0x90 */
1016    { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_91 },                  /* 0x91 */
1017    { 0x06, 0xFF, aImplUniToDBCSTab_SJIS_92 },                  /* 0x92 */
1018    { 0x02, 0xF8, aImplUniToDBCSTab_SJIS_93 },                  /* 0x93 */
1019    { 0x03, 0x81, aImplUniToDBCSTab_SJIS_94 },                  /* 0x94 */
1020    { 0x77, 0xE5, aImplUniToDBCSTab_SJIS_95 },                  /* 0x95 */
1021    { 0x1C, 0xFB, aImplUniToDBCSTab_SJIS_96 },                  /* 0x96 */
1022    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_97 },                  /* 0x97 */
1023    { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_98 },                  /* 0x98 */
1024    { 0x03, 0xFF, aImplUniToDBCSTab_SJIS_99 },                  /* 0x99 */
1025    { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_9A },                  /* 0x9A */
1026    { 0x06, 0xF5, aImplUniToDBCSTab_SJIS_9B },                  /* 0x9B */
1027    { 0x00, 0xF6, aImplUniToDBCSTab_SJIS_9C },                  /* 0x9C */
1028    { 0x03, 0xFD, aImplUniToDBCSTab_SJIS_9D },                  /* 0x9D */
1029    { 0x19, 0xFD, aImplUniToDBCSTab_SJIS_9E },                  /* 0x9E */
1030    { 0x07, 0xA0, aImplUniToDBCSTab_SJIS_9F },                  /* 0x9F */
1031    {    1,    0, NULL },                                       /* 0xA0 */
1032    {    1,    0, NULL },                                       /* 0xA1 */
1033    {    1,    0, NULL },                                       /* 0xA2 */
1034    {    1,    0, NULL },                                       /* 0xA3 */
1035    {    1,    0, NULL },                                       /* 0xA4 */
1036    {    1,    0, NULL },                                       /* 0xA5 */
1037    {    1,    0, NULL },                                       /* 0xA6 */
1038    {    1,    0, NULL },                                       /* 0xA7 */
1039    {    1,    0, NULL },                                       /* 0xA8 */
1040    {    1,    0, NULL },                                       /* 0xA9 */
1041    {    1,    0, NULL },                                       /* 0xAA */
1042    {    1,    0, NULL },                                       /* 0xAB */
1043    {    1,    0, NULL },                                       /* 0xAC */
1044    {    1,    0, NULL },                                       /* 0xAD */
1045    {    1,    0, NULL },                                       /* 0xAE */
1046    {    1,    0, NULL },                                       /* 0xAF */
1047    {    1,    0, NULL },                                       /* 0xB0 */
1048    {    1,    0, NULL },                                       /* 0xB1 */
1049    {    1,    0, NULL },                                       /* 0xB2 */
1050    {    1,    0, NULL },                                       /* 0xB3 */
1051    {    1,    0, NULL },                                       /* 0xB4 */
1052    {    1,    0, NULL },                                       /* 0xB5 */
1053    {    1,    0, NULL },                                       /* 0xB6 */
1054    {    1,    0, NULL },                                       /* 0xB7 */
1055    {    1,    0, NULL },                                       /* 0xB8 */
1056    {    1,    0, NULL },                                       /* 0xB9 */
1057    {    1,    0, NULL },                                       /* 0xBA */
1058    {    1,    0, NULL },                                       /* 0xBB */
1059    {    1,    0, NULL },                                       /* 0xBC */
1060    {    1,    0, NULL },                                       /* 0xBD */
1061    {    1,    0, NULL },                                       /* 0xBE */
1062    {    1,    0, NULL },                                       /* 0xBF */
1063    {    1,    0, NULL },                                       /* 0xC0 */
1064    {    1,    0, NULL },                                       /* 0xC1 */
1065    {    1,    0, NULL },                                       /* 0xC2 */
1066    {    1,    0, NULL },                                       /* 0xC3 */
1067    {    1,    0, NULL },                                       /* 0xC4 */
1068    {    1,    0, NULL },                                       /* 0xC5 */
1069    {    1,    0, NULL },                                       /* 0xC6 */
1070    {    1,    0, NULL },                                       /* 0xC7 */
1071    {    1,    0, NULL },                                       /* 0xC8 */
1072    {    1,    0, NULL },                                       /* 0xC9 */
1073    {    1,    0, NULL },                                       /* 0xCA */
1074    {    1,    0, NULL },                                       /* 0xCB */
1075    {    1,    0, NULL },                                       /* 0xCC */
1076    {    1,    0, NULL },                                       /* 0xCD */
1077    {    1,    0, NULL },                                       /* 0xCE */
1078    {    1,    0, NULL },                                       /* 0xCF */
1079    {    1,    0, NULL },                                       /* 0xD0 */
1080    {    1,    0, NULL },                                       /* 0xD1 */
1081    {    1,    0, NULL },                                       /* 0xD2 */
1082    {    1,    0, NULL },                                       /* 0xD3 */
1083    {    1,    0, NULL },                                       /* 0xD4 */
1084    {    1,    0, NULL },                                       /* 0xD5 */
1085    {    1,    0, NULL },                                       /* 0xD6 */
1086    {    1,    0, NULL },                                       /* 0xD7 */
1087    {    1,    0, NULL },                                       /* 0xD8 */
1088    {    1,    0, NULL },                                       /* 0xD9 */
1089    {    1,    0, NULL },                                       /* 0xDA */
1090    {    1,    0, NULL },                                       /* 0xDB */
1091    {    1,    0, NULL },                                       /* 0xDC */
1092    {    1,    0, NULL },                                       /* 0xDD */
1093    {    1,    0, NULL },                                       /* 0xDE */
1094    {    1,    0, NULL },                                       /* 0xDF */
1095    {    1,    0, NULL },                                       /* 0xE0 */
1096    {    1,    0, NULL },                                       /* 0xE1 */
1097    {    1,    0, NULL },                                       /* 0xE2 */
1098    {    1,    0, NULL },                                       /* 0xE3 */
1099    {    1,    0, NULL },                                       /* 0xE4 */
1100    {    1,    0, NULL },                                       /* 0xE5 */
1101    {    1,    0, NULL },                                       /* 0xE6 */
1102    {    1,    0, NULL },                                       /* 0xE7 */
1103    {    1,    0, NULL },                                       /* 0xE8 */
1104    {    1,    0, NULL },                                       /* 0xE9 */
1105    {    1,    0, NULL },                                       /* 0xEA */
1106    {    1,    0, NULL },                                       /* 0xEB */
1107    {    1,    0, NULL },                                       /* 0xEC */
1108    {    1,    0, NULL },                                       /* 0xED */
1109    {    1,    0, NULL },                                       /* 0xEE */
1110    {    1,    0, NULL },                                       /* 0xEF */
1111    {    1,    0, NULL },                                       /* 0xF0 */
1112    {    1,    0, NULL },                                       /* 0xF1 */
1113    {    1,    0, NULL },                                       /* 0xF2 */
1114    {    1,    0, NULL },                                       /* 0xF3 */
1115    {    1,    0, NULL },                                       /* 0xF4 */
1116    {    1,    0, NULL },                                       /* 0xF5 */
1117    {    1,    0, NULL },                                       /* 0xF6 */
1118    {    1,    0, NULL },                                       /* 0xF7 */
1119    {    1,    0, NULL },                                       /* 0xF8 */
1120    { 0x29, 0xDC, aImplUniToDBCSTab_MS932_F9 },                 /* 0xF9 */
1121    { 0x0E, 0x2D, aImplUniToDBCSTab_MS932_FA },                 /* 0xFA */
1122    {    1,    0, NULL },                                       /* 0xFB */
1123    {    1,    0, NULL },                                       /* 0xFC */
1124    {    1,    0, NULL },                                       /* 0xFD */
1125    {    1,    0, NULL },                                       /* 0xFE */
1126    { 0x01, 0xE5, aImplUniToDBCSTab_SJIS_FF }                   /* 0xFF */
1127};
1128
1129/* ----------------------------------------------------------------------- */
1130
1131static ImplDBCSConvertData const aImplMS932DBCSCvtData =
1132{
1133    aMS932UniLeadTab,
1134    aMS932DBCSHighTab,
1135    0x00, 0xFF,
1136    0x40, 0xFC,
1137    aImplSJISDBCSEUDCTab,
1138    DBCS_EUDC_SJIS_COUNT
1139};
1140
1141/* ----------------------------------------------------------------------- */
1142
1143static ImplTextEncodingData const aImplMS932TextEncodingData
1144    = { { &aImplMS932DBCSCvtData,
1145          ImplDBCSToUnicode,
1146          ImplUnicodeToDBCS,
1147          NULL,
1148          NULL,
1149          NULL,
1150          NULL,
1151          NULL,
1152          NULL },
1153        1,
1154        2,
1155        2,
1156        128,
1157        "euc-jp",
1158        "shift_jis",
1159        RTL_TEXTENCODING_INFO_MULTIBYTE };
1160    /* WIN/DOS/OS2, SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */
1161
1162/* ======================================================================= */
1163
1164static ImplDBCSToUniLeadTab const aAPPLEJAPANESEUniLeadTab[256] =
1165{
1166    { 0x0000,    0,    0, NULL },                               /* 0x00 */
1167    { 0x0001,    0,    0, NULL },                               /* 0x01 */
1168    { 0x0002,    0,    0, NULL },                               /* 0x02 */
1169    { 0x0003,    0,    0, NULL },                               /* 0x03 */
1170    { 0x0004,    0,    0, NULL },                               /* 0x04 */
1171    { 0x0005,    0,    0, NULL },                               /* 0x05 */
1172    { 0x0006,    0,    0, NULL },                               /* 0x06 */
1173    { 0x0007,    0,    0, NULL },                               /* 0x07 */
1174    { 0x0008,    0,    0, NULL },                               /* 0x08 */
1175    { 0x0009,    0,    0, NULL },                               /* 0x09 */
1176    { 0x000A,    0,    0, NULL },                               /* 0x0A */
1177    { 0x000B,    0,    0, NULL },                               /* 0x0B */
1178    { 0x000C,    0,    0, NULL },                               /* 0x0C */
1179    { 0x000D,    0,    0, NULL },                               /* 0x0D */
1180    { 0x000E,    0,    0, NULL },                               /* 0x0E */
1181    { 0x000F,    0,    0, NULL },                               /* 0x0F */
1182    { 0x0010,    0,    0, NULL },                               /* 0x10 */
1183    { 0x0011,    0,    0, NULL },                               /* 0x11 */
1184    { 0x0012,    0,    0, NULL },                               /* 0x12 */
1185    { 0x0013,    0,    0, NULL },                               /* 0x13 */
1186    { 0x0014,    0,    0, NULL },                               /* 0x14 */
1187    { 0x0015,    0,    0, NULL },                               /* 0x15 */
1188    { 0x0016,    0,    0, NULL },                               /* 0x16 */
1189    { 0x0017,    0,    0, NULL },                               /* 0x17 */
1190    { 0x0018,    0,    0, NULL },                               /* 0x18 */
1191    { 0x0019,    0,    0, NULL },                               /* 0x19 */
1192    { 0x001A,    0,    0, NULL },                               /* 0x1A */
1193    { 0x001B,    0,    0, NULL },                               /* 0x1B */
1194    { 0x001C,    0,    0, NULL },                               /* 0x1C */
1195    { 0x001D,    0,    0, NULL },                               /* 0x1D */
1196    { 0x001E,    0,    0, NULL },                               /* 0x1E */
1197    { 0x001F,    0,    0, NULL },                               /* 0x1F */
1198    { 0x0020,    0,    0, NULL },                               /* 0x20 */
1199    { 0x0021,    0,    0, NULL },                               /* 0x21 */
1200    { 0x0022,    0,    0, NULL },                               /* 0x22 */
1201    { 0x0023,    0,    0, NULL },                               /* 0x23 */
1202    { 0x0024,    0,    0, NULL },                               /* 0x24 */
1203    { 0x0025,    0,    0, NULL },                               /* 0x25 */
1204    { 0x0026,    0,    0, NULL },                               /* 0x26 */
1205    { 0x0027,    0,    0, NULL },                               /* 0x27 */
1206    { 0x0028,    0,    0, NULL },                               /* 0x28 */
1207    { 0x0029,    0,    0, NULL },                               /* 0x29 */
1208    { 0x002A,    0,    0, NULL },                               /* 0x2A */
1209    { 0x002B,    0,    0, NULL },                               /* 0x2B */
1210    { 0x002C,    0,    0, NULL },                               /* 0x2C */
1211    { 0x002D,    0,    0, NULL },                               /* 0x2D */
1212    { 0x002E,    0,    0, NULL },                               /* 0x2E */
1213    { 0x002F,    0,    0, NULL },                               /* 0x2F */
1214    { 0x0030,    0,    0, NULL },                               /* 0x30 */
1215    { 0x0031,    0,    0, NULL },                               /* 0x31 */
1216    { 0x0032,    0,    0, NULL },                               /* 0x32 */
1217    { 0x0033,    0,    0, NULL },                               /* 0x33 */
1218    { 0x0034,    0,    0, NULL },                               /* 0x34 */
1219    { 0x0035,    0,    0, NULL },                               /* 0x35 */
1220    { 0x0036,    0,    0, NULL },                               /* 0x36 */
1221    { 0x0037,    0,    0, NULL },                               /* 0x37 */
1222    { 0x0038,    0,    0, NULL },                               /* 0x38 */
1223    { 0x0039,    0,    0, NULL },                               /* 0x39 */
1224    { 0x003A,    0,    0, NULL },                               /* 0x3A */
1225    { 0x003B,    0,    0, NULL },                               /* 0x3B */
1226    { 0x003C,    0,    0, NULL },                               /* 0x3C */
1227    { 0x003D,    0,    0, NULL },                               /* 0x3D */
1228    { 0x003E,    0,    0, NULL },                               /* 0x3E */
1229    { 0x003F,    0,    0, NULL },                               /* 0x3F */
1230    { 0x0040,    0,    0, NULL },                               /* 0x40 */
1231    { 0x0041,    0,    0, NULL },                               /* 0x41 */
1232    { 0x0042,    0,    0, NULL },                               /* 0x42 */
1233    { 0x0043,    0,    0, NULL },                               /* 0x43 */
1234    { 0x0044,    0,    0, NULL },                               /* 0x44 */
1235    { 0x0045,    0,    0, NULL },                               /* 0x45 */
1236    { 0x0046,    0,    0, NULL },                               /* 0x46 */
1237    { 0x0047,    0,    0, NULL },                               /* 0x47 */
1238    { 0x0048,    0,    0, NULL },                               /* 0x48 */
1239    { 0x0049,    0,    0, NULL },                               /* 0x49 */
1240    { 0x004A,    0,    0, NULL },                               /* 0x4A */
1241    { 0x004B,    0,    0, NULL },                               /* 0x4B */
1242    { 0x004C,    0,    0, NULL },                               /* 0x4C */
1243    { 0x004D,    0,    0, NULL },                               /* 0x4D */
1244    { 0x004E,    0,    0, NULL },                               /* 0x4E */
1245    { 0x004F,    0,    0, NULL },                               /* 0x4F */
1246    { 0x0050,    0,    0, NULL },                               /* 0x50 */
1247    { 0x0051,    0,    0, NULL },                               /* 0x51 */
1248    { 0x0052,    0,    0, NULL },                               /* 0x52 */
1249    { 0x0053,    0,    0, NULL },                               /* 0x53 */
1250    { 0x0054,    0,    0, NULL },                               /* 0x54 */
1251    { 0x0055,    0,    0, NULL },                               /* 0x55 */
1252    { 0x0056,    0,    0, NULL },                               /* 0x56 */
1253    { 0x0057,    0,    0, NULL },                               /* 0x57 */
1254    { 0x0058,    0,    0, NULL },                               /* 0x58 */
1255    { 0x0059,    0,    0, NULL },                               /* 0x59 */
1256    { 0x005A,    0,    0, NULL },                               /* 0x5A */
1257    { 0x005B,    0,    0, NULL },                               /* 0x5B */
1258    { 0x005C,    0,    0, NULL },                               /* 0x5C */ /* is A5 (YEN SIGN), but for compatibiliy with ascii, we use 0x5C like MS CP392 */
1259    { 0x005D,    0,    0, NULL },                               /* 0x5D */
1260    { 0x005E,    0,    0, NULL },                               /* 0x5E */
1261    { 0x005F,    0,    0, NULL },                               /* 0x5F */
1262    { 0x0060,    0,    0, NULL },                               /* 0x60 */
1263    { 0x0061,    0,    0, NULL },                               /* 0x61 */
1264    { 0x0062,    0,    0, NULL },                               /* 0x62 */
1265    { 0x0063,    0,    0, NULL },                               /* 0x63 */
1266    { 0x0064,    0,    0, NULL },                               /* 0x64 */
1267    { 0x0065,    0,    0, NULL },                               /* 0x65 */
1268    { 0x0066,    0,    0, NULL },                               /* 0x66 */
1269    { 0x0067,    0,    0, NULL },                               /* 0x67 */
1270    { 0x0068,    0,    0, NULL },                               /* 0x68 */
1271    { 0x0069,    0,    0, NULL },                               /* 0x69 */
1272    { 0x006A,    0,    0, NULL },                               /* 0x6A */
1273    { 0x006B,    0,    0, NULL },                               /* 0x6B */
1274    { 0x006C,    0,    0, NULL },                               /* 0x6C */
1275    { 0x006D,    0,    0, NULL },                               /* 0x6D */
1276    { 0x006E,    0,    0, NULL },                               /* 0x6E */
1277    { 0x006F,    0,    0, NULL },                               /* 0x6F */
1278    { 0x0070,    0,    0, NULL },                               /* 0x70 */
1279    { 0x0071,    0,    0, NULL },                               /* 0x71 */
1280    { 0x0072,    0,    0, NULL },                               /* 0x72 */
1281    { 0x0073,    0,    0, NULL },                               /* 0x73 */
1282    { 0x0074,    0,    0, NULL },                               /* 0x74 */
1283    { 0x0075,    0,    0, NULL },                               /* 0x75 */
1284    { 0x0076,    0,    0, NULL },                               /* 0x76 */
1285    { 0x0077,    0,    0, NULL },                               /* 0x77 */
1286    { 0x0078,    0,    0, NULL },                               /* 0x78 */
1287    { 0x0079,    0,    0, NULL },                               /* 0x79 */
1288    { 0x007A,    0,    0, NULL },                               /* 0x7A */
1289    { 0x007B,    0,    0, NULL },                               /* 0x7B */
1290    { 0x007C,    0,    0, NULL },                               /* 0x7C */
1291    { 0x007D,    0,    0, NULL },                               /* 0x7D */
1292    { 0x007E,    0,    0, NULL },                               /* 0x7E */ /* in SJIS this is 0x0203E (SPACING OVERSCORE), but for compatibiliy with ascii, we use 0x7E (TILDE) like MS CP392 */
1293    { 0x007F,    0,    0, NULL },                               /* 0x7F */
1294    { 0x005C,    0,    0, NULL },                               /* 0x80 */ /* APPLE additons over SJIS */
1295    {      0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_81 },         /* 0x81 */
1296    {      0, 0x4F, 0xF1, aImplDBCSToUniTab_SJIS_82 },          /* 0x82 */
1297    {      0, 0x40, 0xD6, aImplDBCSToUniTab_SJIS_83 },          /* 0x83 */
1298    {      0, 0x40, 0xBF, aImplDBCSToUniTab_SJIS_84 },          /* 0x84 */
1299    {      0, 0x40, 0xF4, aImplDBCSToUniTab_APPLEJAPANESE_85 }, /* 0x85 */
1300    {      0, 0x40, 0xD2, aImplDBCSToUniTab_APPLEJAPANESE_86 }, /* 0x86 */
1301    {      0, 0x40, 0xFA, aImplDBCSToUniTab_APPLEJAPANESE_87 }, /* 0x87 */
1302    {      0, 0x40, 0xFC, aImplDBCSToUniTab_APPLEJAPANESE_88 }, /* 0x88 */
1303    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_89 },          /* 0x89 */
1304    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8A },          /* 0x8A */
1305    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8B },          /* 0x8B */
1306    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8C },          /* 0x8C */
1307    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8D },          /* 0x8D */
1308    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8E },          /* 0x8E */
1309    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_8F },          /* 0x8F */
1310    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_90 },          /* 0x90 */
1311    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_91 },          /* 0x91 */
1312    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_92 },          /* 0x92 */
1313    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_93 },          /* 0x93 */
1314    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_94 },          /* 0x94 */
1315    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_95 },          /* 0x95 */
1316    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_96 },          /* 0x96 */
1317    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_97 },          /* 0x97 */
1318    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_98 },          /* 0x98 */
1319    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_99 },          /* 0x99 */
1320    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9A },          /* 0x9A */
1321    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9B },          /* 0x9B */
1322    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9C },          /* 0x9C */
1323    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9D },          /* 0x9D */
1324    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9E },          /* 0x9E */
1325    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_9F },          /* 0x9F */
1326    { 0x00A0,    0,    0, NULL },                               /* 0xA0 */ /* APPLE additons over SJIS */
1327    { 0xFF61,    0,    0, NULL },                               /* 0xA1 */
1328    { 0xFF62,    0,    0, NULL },                               /* 0xA2 */
1329    { 0xFF63,    0,    0, NULL },                               /* 0xA3 */
1330    { 0xFF64,    0,    0, NULL },                               /* 0xA4 */
1331    { 0xFF65,    0,    0, NULL },                               /* 0xA5 */
1332    { 0xFF66,    0,    0, NULL },                               /* 0xA6 */
1333    { 0xFF67,    0,    0, NULL },                               /* 0xA7 */
1334    { 0xFF68,    0,    0, NULL },                               /* 0xA8 */
1335    { 0xFF69,    0,    0, NULL },                               /* 0xA9 */
1336    { 0xFF6A,    0,    0, NULL },                               /* 0xAA */
1337    { 0xFF6B,    0,    0, NULL },                               /* 0xAB */
1338    { 0xFF6C,    0,    0, NULL },                               /* 0xAC */
1339    { 0xFF6D,    0,    0, NULL },                               /* 0xAD */
1340    { 0xFF6E,    0,    0, NULL },                               /* 0xAE */
1341    { 0xFF6F,    0,    0, NULL },                               /* 0xAF */
1342    { 0xFF70,    0,    0, NULL },                               /* 0xB0 */
1343    { 0xFF71,    0,    0, NULL },                               /* 0xB1 */
1344    { 0xFF72,    0,    0, NULL },                               /* 0xB2 */
1345    { 0xFF73,    0,    0, NULL },                               /* 0xB3 */
1346    { 0xFF74,    0,    0, NULL },                               /* 0xB4 */
1347    { 0xFF75,    0,    0, NULL },                               /* 0xB5 */
1348    { 0xFF76,    0,    0, NULL },                               /* 0xB6 */
1349    { 0xFF77,    0,    0, NULL },                               /* 0xB7 */
1350    { 0xFF78,    0,    0, NULL },                               /* 0xB8 */
1351    { 0xFF79,    0,    0, NULL },                               /* 0xB9 */
1352    { 0xFF7A,    0,    0, NULL },                               /* 0xBA */
1353    { 0xFF7B,    0,    0, NULL },                               /* 0xBB */
1354    { 0xFF7C,    0,    0, NULL },                               /* 0xBC */
1355    { 0xFF7D,    0,    0, NULL },                               /* 0xBD */
1356    { 0xFF7E,    0,    0, NULL },                               /* 0xBE */
1357    { 0xFF7F,    0,    0, NULL },                               /* 0xBF */
1358    { 0xFF80,    0,    0, NULL },                               /* 0xC0 */
1359    { 0xFF81,    0,    0, NULL },                               /* 0xC1 */
1360    { 0xFF82,    0,    0, NULL },                               /* 0xC2 */
1361    { 0xFF83,    0,    0, NULL },                               /* 0xC3 */
1362    { 0xFF84,    0,    0, NULL },                               /* 0xC4 */
1363    { 0xFF85,    0,    0, NULL },                               /* 0xC5 */
1364    { 0xFF86,    0,    0, NULL },                               /* 0xC6 */
1365    { 0xFF87,    0,    0, NULL },                               /* 0xC7 */
1366    { 0xFF88,    0,    0, NULL },                               /* 0xC8 */
1367    { 0xFF89,    0,    0, NULL },                               /* 0xC9 */
1368    { 0xFF8A,    0,    0, NULL },                               /* 0xCA */
1369    { 0xFF8B,    0,    0, NULL },                               /* 0xCB */
1370    { 0xFF8C,    0,    0, NULL },                               /* 0xCC */
1371    { 0xFF8D,    0,    0, NULL },                               /* 0xCD */
1372    { 0xFF8E,    0,    0, NULL },                               /* 0xCE */
1373    { 0xFF8F,    0,    0, NULL },                               /* 0xCF */
1374    { 0xFF90,    0,    0, NULL },                               /* 0xD0 */
1375    { 0xFF91,    0,    0, NULL },                               /* 0xD1 */
1376    { 0xFF92,    0,    0, NULL },                               /* 0xD2 */
1377    { 0xFF93,    0,    0, NULL },                               /* 0xD3 */
1378    { 0xFF94,    0,    0, NULL },                               /* 0xD4 */
1379    { 0xFF95,    0,    0, NULL },                               /* 0xD5 */
1380    { 0xFF96,    0,    0, NULL },                               /* 0xD6 */
1381    { 0xFF97,    0,    0, NULL },                               /* 0xD7 */
1382    { 0xFF98,    0,    0, NULL },                               /* 0xD8 */
1383    { 0xFF99,    0,    0, NULL },                               /* 0xD9 */
1384    { 0xFF9A,    0,    0, NULL },                               /* 0xDA */
1385    { 0xFF9B,    0,    0, NULL },                               /* 0xDB */
1386    { 0xFF9C,    0,    0, NULL },                               /* 0xDC */
1387    { 0xFF9D,    0,    0, NULL },                               /* 0xDD */
1388    { 0xFF9E,    0,    0, NULL },                               /* 0xDE */
1389    { 0xFF9F,    0,    0, NULL },                               /* 0xDF */
1390    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E0 },          /* 0xE0 */
1391    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E1 },          /* 0xE1 */
1392    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E2 },          /* 0xE2 */
1393    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E3 },          /* 0xE3 */
1394    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E4 },          /* 0xE4 */
1395    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E5 },          /* 0xE5 */
1396    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E6 },          /* 0xE6 */
1397    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E7 },          /* 0xE7 */
1398    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E8 },          /* 0xE8 */
1399    {      0, 0x40, 0xFC, aImplDBCSToUniTab_SJIS_E9 },          /* 0xE9 */
1400    {      0, 0x40, 0xA4, aImplDBCSToUniTab_SJIS_EA },          /* 0xEA */
1401    {      0, 0x51, 0x7A, aImplDBCSToUniTab_APPLEJAPANESE_EB }, /* 0xEB */
1402    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xEC */ /* We convert this as double byte */
1403    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xED */ /* We convert this as double byte */
1404    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xEE */ /* We convert this as double byte */
1405    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xEF */ /* We convert this as double byte */
1406    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF0 */ /* EUDC Range */
1407    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF1 */ /* EUDC Range */
1408    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF2 */ /* EUDC Range */
1409    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF3 */ /* EUDC Range */
1410    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF4 */ /* EUDC Range */
1411    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF5 */ /* EUDC Range */
1412    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF6 */ /* EUDC Range */
1413    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF7 */ /* EUDC Range */
1414    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF8 */ /* EUDC Range */
1415    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0xF9 */ /* EUDC Range */
1416    {      0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_FA },         /* 0xFA */ /* We use the MS table for better MS compatibility */
1417    {      0, 0x40, 0xFC, aImplDBCSToUniTab_MS932_FB },         /* 0xFB */ /* We use the MS table for better MS compatibility */
1418    {      0, 0x40, 0x4B, aImplDBCSToUniTab_MS932_FC },         /* 0xFC */ /* We use the MS table for better MS compatibility */
1419    { 0x00A9,    0,    0, NULL },                               /* 0xFD */ /* APPLE additons over SJIS */
1420    { 0x2122,    0,    0, NULL },                               /* 0xFE */ /* APPLE additons over SJIS */
1421    { 0x2026,    0,    0, NULL }                                /* 0xFF */ /* APPLE additons over SJIS */
1422};
1423
1424/* ----------------------------------------------------------------------- */
1425
1426static ImplUniToDBCSHighTab const aAPPLEJAPANESEDBCSHighTab[256] =
1427{
1428    { 0x00, 0xF7, aImplUniToDBCSTab_APPLEJAPANESE_00 },         /* 0x00 */
1429    {    1,    0, NULL },                                       /* 0x01 */
1430    {    1,    0, NULL },                                       /* 0x02 */
1431    { 0x91, 0xC9, aImplUniToDBCSTab_SJIS_03 },                  /* 0x03 */
1432    { 0x01, 0x51, aImplUniToDBCSTab_SJIS_04 },                  /* 0x04 */
1433    {    1,    0, NULL },                                       /* 0x05 */
1434    {    1,    0, NULL },                                       /* 0x06 */
1435    {    1,    0, NULL },                                       /* 0x07 */
1436    {    1,    0, NULL },                                       /* 0x08 */
1437    {    1,    0, NULL },                                       /* 0x09 */
1438    {    1,    0, NULL },                                       /* 0x0A */
1439    {    1,    0, NULL },                                       /* 0x0B */
1440    {    1,    0, NULL },                                       /* 0x0C */
1441    {    1,    0, NULL },                                       /* 0x0D */
1442    {    1,    0, NULL },                                       /* 0x0E */
1443    {    1,    0, NULL },                                       /* 0x0F */
1444    {    1,    0, NULL },                                       /* 0x10 */
1445    {    1,    0, NULL },                                       /* 0x11 */
1446    {    1,    0, NULL },                                       /* 0x12 */
1447    {    1,    0, NULL },                                       /* 0x13 */
1448    {    1,    0, NULL },                                       /* 0x14 */
1449    {    1,    0, NULL },                                       /* 0x15 */
1450    {    1,    0, NULL },                                       /* 0x16 */
1451    {    1,    0, NULL },                                       /* 0x17 */
1452    {    1,    0, NULL },                                       /* 0x18 */
1453    {    1,    0, NULL },                                       /* 0x19 */
1454    {    1,    0, NULL },                                       /* 0x1A */
1455    {    1,    0, NULL },                                       /* 0x1B */
1456    {    1,    0, NULL },                                       /* 0x1C */
1457    {    1,    0, NULL },                                       /* 0x1D */
1458    {    1,    0, NULL },                                       /* 0x1E */
1459    {    1,    0, NULL },                                       /* 0x1F */
1460    { 0x10, 0x3E, aImplUniToDBCSTab_SJIS_20 },                  /* 0x20 */
1461    { 0x03, 0xE9, aImplUniToDBCSTab_APPLEJAPANESE_21 },         /* 0x21 */
1462    { 0x00, 0xEF, aImplUniToDBCSTab_APPLEJAPANESE_22 },         /* 0x22 */
1463    { 0x12, 0x12, aImplUniToDBCSTab_SJIS_23 },                  /* 0x23 */
1464    { 0x60, 0xB5, aImplUniToDBCSTab_APPLEJAPANESE_24 },         /* 0x24 */
1465    { 0x00, 0xEF, aImplUniToDBCSTab_SJIS_25 },                  /* 0x25 */
1466    { 0x05, 0x6F, aImplUniToDBCSTab_APPLEJAPANESE_26 },         /* 0x26 */
1467    { 0x76, 0x7E, aImplUniToDBCSTab_APPLEJAPANESE_27 },         /* 0x27 */
1468    {    1,    0, NULL },                                       /* 0x28 */
1469    {    1,    0, NULL },                                       /* 0x29 */
1470    {    1,    0, NULL },                                       /* 0x2A */
1471    {    1,    0, NULL },                                       /* 0x2B */
1472    {    1,    0, NULL },                                       /* 0x2C */
1473    {    1,    0, NULL },                                       /* 0x2D */
1474    {    1,    0, NULL },                                       /* 0x2E */
1475    {    1,    0, NULL },                                       /* 0x2F */
1476    { 0x00, 0xFE, aImplUniToDBCSTab_APPLEJAPANESE_30 },         /* 0x30 */
1477    {    1,    0, NULL },                                       /* 0x31 */
1478    { 0x2A, 0xA9, aImplUniToDBCSTab_APPLEJAPANESE_32 },         /* 0x32 */
1479    { 0x00, 0xD4, aImplUniToDBCSTab_APPLEJAPANESE_33 },         /* 0x33 */
1480    {    1,    0, NULL },                                       /* 0x34 */
1481    {    1,    0, NULL },                                       /* 0x35 */
1482    {    1,    0, NULL },                                       /* 0x36 */
1483    {    1,    0, NULL },                                       /* 0x37 */
1484    {    1,    0, NULL },                                       /* 0x38 */
1485    {    1,    0, NULL },                                       /* 0x39 */
1486    {    1,    0, NULL },                                       /* 0x3A */
1487    {    1,    0, NULL },                                       /* 0x3B */
1488    {    1,    0, NULL },                                       /* 0x3C */
1489    {    1,    0, NULL },                                       /* 0x3D */
1490    {    1,    0, NULL },                                       /* 0x3E */
1491    {    1,    0, NULL },                                       /* 0x3F */
1492    {    1,    0, NULL },                                       /* 0x40 */
1493    {    1,    0, NULL },                                       /* 0x41 */
1494    {    1,    0, NULL },                                       /* 0x42 */
1495    {    1,    0, NULL },                                       /* 0x43 */
1496    {    1,    0, NULL },                                       /* 0x44 */
1497    {    1,    0, NULL },                                       /* 0x45 */
1498    {    1,    0, NULL },                                       /* 0x46 */
1499    {    1,    0, NULL },                                       /* 0x47 */
1500    {    1,    0, NULL },                                       /* 0x48 */
1501    {    1,    0, NULL },                                       /* 0x49 */
1502    {    1,    0, NULL },                                       /* 0x4A */
1503    {    1,    0, NULL },                                       /* 0x4B */
1504    {    1,    0, NULL },                                       /* 0x4C */
1505    {    1,    0, NULL },                                       /* 0x4D */
1506    { 0x00, 0xFC, aImplUniToDBCSTab_SJIS_4E },                  /* 0x4E */
1507    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_4F },                  /* 0x4F */
1508    { 0x05, 0xFB, aImplUniToDBCSTab_SJIS_50 },                  /* 0x50 */
1509    { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_51 },                  /* 0x51 */
1510    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_52 },                  /* 0x52 */
1511    { 0x00, 0xFA, aImplUniToDBCSTab_SJIS_53 },                  /* 0x53 */
1512    { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_54 },                  /* 0x54 */
1513    { 0x04, 0xFE, aImplUniToDBCSTab_SJIS_55 },                  /* 0x55 */
1514    { 0x06, 0xFF, aImplUniToDBCSTab_SJIS_56 },                  /* 0x56 */
1515    { 0x00, 0xFC, aImplUniToDBCSTab_SJIS_57 },                  /* 0x57 */
1516    { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_58 },                  /* 0x58 */
1517    { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_59 },                  /* 0x59 */
1518    { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_5A },                  /* 0x5A */
1519    { 0x09, 0xFF, aImplUniToDBCSTab_SJIS_5B },                  /* 0x5B */
1520    { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_5C },                  /* 0x5C */
1521    { 0x07, 0xFE, aImplUniToDBCSTab_SJIS_5D },                  /* 0x5D */
1522    { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_5E },                  /* 0x5E */
1523    { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_5F },                  /* 0x5F */
1524    { 0x0E, 0xFB, aImplUniToDBCSTab_SJIS_60 },                  /* 0x60 */
1525    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_61 },                  /* 0x61 */
1526    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_62 },                  /* 0x62 */
1527    { 0x01, 0xFA, aImplUniToDBCSTab_SJIS_63 },                  /* 0x63 */
1528    { 0x06, 0xFE, aImplUniToDBCSTab_SJIS_64 },                  /* 0x64 */
1529    { 0x00, 0xFB, aImplUniToDBCSTab_SJIS_65 },                  /* 0x65 */
1530    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_66 },                  /* 0x66 */
1531    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_67 },                  /* 0x67 */
1532    { 0x01, 0xFA, aImplUniToDBCSTab_SJIS_68 },                  /* 0x68 */
1533    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_69 },                  /* 0x69 */
1534    { 0x02, 0xFB, aImplUniToDBCSTab_SJIS_6A },                  /* 0x6A */
1535    { 0x04, 0xF3, aImplUniToDBCSTab_SJIS_6B },                  /* 0x6B */
1536    { 0x08, 0xF3, aImplUniToDBCSTab_SJIS_6C },                  /* 0x6C */
1537    { 0x04, 0xFC, aImplUniToDBCSTab_SJIS_6D },                  /* 0x6D */
1538    { 0x05, 0xFF, aImplUniToDBCSTab_SJIS_6E },                  /* 0x6E */
1539    { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_6F },                  /* 0x6F */
1540    { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_70 },                  /* 0x70 */
1541    { 0x04, 0xFF, aImplUniToDBCSTab_SJIS_71 },                  /* 0x71 */
1542    { 0x06, 0xFD, aImplUniToDBCSTab_SJIS_72 },                  /* 0x72 */
1543    { 0x0A, 0xFE, aImplUniToDBCSTab_SJIS_73 },                  /* 0x73 */
1544    { 0x03, 0xF8, aImplUniToDBCSTab_SJIS_74 },                  /* 0x74 */
1545    { 0x01, 0xFF, aImplUniToDBCSTab_SJIS_75 },                  /* 0x75 */
1546    { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_76 },                  /* 0x76 */
1547    { 0x01, 0xFC, aImplUniToDBCSTab_SJIS_77 },                  /* 0x77 */
1548    { 0x02, 0xFD, aImplUniToDBCSTab_SJIS_78 },                  /* 0x78 */
1549    { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_79 },                  /* 0x79 */
1550    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_7A },                  /* 0x7A */
1551    { 0x02, 0xF7, aImplUniToDBCSTab_SJIS_7B },                  /* 0x7B */
1552    { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_7C },                  /* 0x7C */
1553    { 0x00, 0xFB, aImplUniToDBCSTab_SJIS_7D },                  /* 0x7D */
1554    { 0x01, 0x9C, aImplUniToDBCSTab_SJIS_7E },                  /* 0x7E */
1555    { 0x36, 0xFC, aImplUniToDBCSTab_SJIS_7F },                  /* 0x7F */
1556    { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_80 },                  /* 0x80 */
1557    { 0x02, 0xFE, aImplUniToDBCSTab_SJIS_81 },                  /* 0x81 */
1558    { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_82 },                  /* 0x82 */
1559    { 0x01, 0xFD, aImplUniToDBCSTab_SJIS_83 },                  /* 0x83 */
1560    { 0x03, 0xFF, aImplUniToDBCSTab_SJIS_84 },                  /* 0x84 */
1561    { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_85 },                  /* 0x85 */
1562    { 0x02, 0xFE, aImplUniToDBCSTab_SJIS_86 },                  /* 0x86 */
1563    { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_87 },                  /* 0x87 */
1564    { 0x05, 0xFE, aImplUniToDBCSTab_SJIS_88 },                  /* 0x88 */
1565    { 0x02, 0xF8, aImplUniToDBCSTab_SJIS_89 },                  /* 0x89 */
1566    { 0x00, 0xFE, aImplUniToDBCSTab_SJIS_8A },                  /* 0x8A */
1567    { 0x00, 0x9A, aImplUniToDBCSTab_SJIS_8B },                  /* 0x8B */
1568    { 0x37, 0xFD, aImplUniToDBCSTab_SJIS_8C },                  /* 0x8C */
1569    { 0x04, 0xFF, aImplUniToDBCSTab_SJIS_8D },                  /* 0x8D */
1570    { 0x08, 0xFE, aImplUniToDBCSTab_SJIS_8E },                  /* 0x8E */
1571    { 0x03, 0xFD, aImplUniToDBCSTab_SJIS_8F },                  /* 0x8F */
1572    { 0x00, 0xFD, aImplUniToDBCSTab_SJIS_90 },                  /* 0x90 */
1573    { 0x02, 0xFF, aImplUniToDBCSTab_SJIS_91 },                  /* 0x91 */
1574    { 0x06, 0xFF, aImplUniToDBCSTab_SJIS_92 },                  /* 0x92 */
1575    { 0x02, 0xF8, aImplUniToDBCSTab_SJIS_93 },                  /* 0x93 */
1576    { 0x03, 0x81, aImplUniToDBCSTab_SJIS_94 },                  /* 0x94 */
1577    { 0x77, 0xE5, aImplUniToDBCSTab_SJIS_95 },                  /* 0x95 */
1578    { 0x1C, 0xFB, aImplUniToDBCSTab_SJIS_96 },                  /* 0x96 */
1579    { 0x00, 0xFF, aImplUniToDBCSTab_SJIS_97 },                  /* 0x97 */
1580    { 0x01, 0xFE, aImplUniToDBCSTab_SJIS_98 },                  /* 0x98 */
1581    { 0x03, 0xFF, aImplUniToDBCSTab_SJIS_99 },                  /* 0x99 */
1582    { 0x01, 0xFB, aImplUniToDBCSTab_SJIS_9A },                  /* 0x9A */
1583    { 0x06, 0xF5, aImplUniToDBCSTab_SJIS_9B },                  /* 0x9B */
1584    { 0x00, 0xF6, aImplUniToDBCSTab_SJIS_9C },                  /* 0x9C */
1585    { 0x03, 0xFD, aImplUniToDBCSTab_SJIS_9D },                  /* 0x9D */
1586    { 0x19, 0xFD, aImplUniToDBCSTab_SJIS_9E },                  /* 0x9E */
1587    { 0x07, 0xA0, aImplUniToDBCSTab_SJIS_9F },                  /* 0x9F */
1588    {    1,    0, NULL },                                       /* 0xA0 */
1589    {    1,    0, NULL },                                       /* 0xA1 */
1590    {    1,    0, NULL },                                       /* 0xA2 */
1591    {    1,    0, NULL },                                       /* 0xA3 */
1592    {    1,    0, NULL },                                       /* 0xA4 */
1593    {    1,    0, NULL },                                       /* 0xA5 */
1594    {    1,    0, NULL },                                       /* 0xA6 */
1595    {    1,    0, NULL },                                       /* 0xA7 */
1596    {    1,    0, NULL },                                       /* 0xA8 */
1597    {    1,    0, NULL },                                       /* 0xA9 */
1598    {    1,    0, NULL },                                       /* 0xAA */
1599    {    1,    0, NULL },                                       /* 0xAB */
1600    {    1,    0, NULL },                                       /* 0xAC */
1601    {    1,    0, NULL },                                       /* 0xAD */
1602    {    1,    0, NULL },                                       /* 0xAE */
1603    {    1,    0, NULL },                                       /* 0xAF */
1604    {    1,    0, NULL },                                       /* 0xB0 */
1605    {    1,    0, NULL },                                       /* 0xB1 */
1606    {    1,    0, NULL },                                       /* 0xB2 */
1607    {    1,    0, NULL },                                       /* 0xB3 */
1608    {    1,    0, NULL },                                       /* 0xB4 */
1609    {    1,    0, NULL },                                       /* 0xB5 */
1610    {    1,    0, NULL },                                       /* 0xB6 */
1611    {    1,    0, NULL },                                       /* 0xB7 */
1612    {    1,    0, NULL },                                       /* 0xB8 */
1613    {    1,    0, NULL },                                       /* 0xB9 */
1614    {    1,    0, NULL },                                       /* 0xBA */
1615    {    1,    0, NULL },                                       /* 0xBB */
1616    {    1,    0, NULL },                                       /* 0xBC */
1617    {    1,    0, NULL },                                       /* 0xBD */
1618    {    1,    0, NULL },                                       /* 0xBE */
1619    {    1,    0, NULL },                                       /* 0xBF */
1620    {    1,    0, NULL },                                       /* 0xC0 */
1621    {    1,    0, NULL },                                       /* 0xC1 */
1622    {    1,    0, NULL },                                       /* 0xC2 */
1623    {    1,    0, NULL },                                       /* 0xC3 */
1624    {    1,    0, NULL },                                       /* 0xC4 */
1625    {    1,    0, NULL },                                       /* 0xC5 */
1626    {    1,    0, NULL },                                       /* 0xC6 */
1627    {    1,    0, NULL },                                       /* 0xC7 */
1628    {    1,    0, NULL },                                       /* 0xC8 */
1629    {    1,    0, NULL },                                       /* 0xC9 */
1630    {    1,    0, NULL },                                       /* 0xCA */
1631    {    1,    0, NULL },                                       /* 0xCB */
1632    {    1,    0, NULL },                                       /* 0xCC */
1633    {    1,    0, NULL },                                       /* 0xCD */
1634    {    1,    0, NULL },                                       /* 0xCE */
1635    {    1,    0, NULL },                                       /* 0xCF */
1636    {    1,    0, NULL },                                       /* 0xD0 */
1637    {    1,    0, NULL },                                       /* 0xD1 */
1638    {    1,    0, NULL },                                       /* 0xD2 */
1639    {    1,    0, NULL },                                       /* 0xD3 */
1640    {    1,    0, NULL },                                       /* 0xD4 */
1641    {    1,    0, NULL },                                       /* 0xD5 */
1642    {    1,    0, NULL },                                       /* 0xD6 */
1643    {    1,    0, NULL },                                       /* 0xD7 */
1644    {    1,    0, NULL },                                       /* 0xD8 */
1645    {    1,    0, NULL },                                       /* 0xD9 */
1646    {    1,    0, NULL },                                       /* 0xDA */
1647    {    1,    0, NULL },                                       /* 0xDB */
1648    {    1,    0, NULL },                                       /* 0xDC */
1649    {    1,    0, NULL },                                       /* 0xDD */
1650    {    1,    0, NULL },                                       /* 0xDE */
1651    {    1,    0, NULL },                                       /* 0xDF */
1652    {    1,    0, NULL },                                       /* 0xE0 */
1653    {    1,    0, NULL },                                       /* 0xE1 */
1654    {    1,    0, NULL },                                       /* 0xE2 */
1655    {    1,    0, NULL },                                       /* 0xE3 */
1656    {    1,    0, NULL },                                       /* 0xE4 */
1657    {    1,    0, NULL },                                       /* 0xE5 */
1658    {    1,    0, NULL },                                       /* 0xE6 */
1659    {    1,    0, NULL },                                       /* 0xE7 */
1660    {    1,    0, NULL },                                       /* 0xE8 */
1661    {    1,    0, NULL },                                       /* 0xE9 */
1662    {    1,    0, NULL },                                       /* 0xEA */
1663    {    1,    0, NULL },                                       /* 0xEB */
1664    {    1,    0, NULL },                                       /* 0xEC */
1665    {    1,    0, NULL },                                       /* 0xED */
1666    {    1,    0, NULL },                                       /* 0xEE */
1667    {    1,    0, NULL },                                       /* 0xEF */
1668    {    1,    0, NULL },                                       /* 0xF0 */
1669    {    1,    0, NULL },                                       /* 0xF1 */
1670    {    1,    0, NULL },                                       /* 0xF2 */
1671    {    1,    0, NULL },                                       /* 0xF3 */
1672    {    1,    0, NULL },                                       /* 0xF4 */
1673    {    1,    0, NULL },                                       /* 0xF5 */
1674    {    1,    0, NULL },                                       /* 0xF6 */
1675    {    1,    0, NULL },                                       /* 0xF7 */
1676    {    1,    0, NULL },                                       /* 0xF8 */
1677    { 0x29, 0xDC, aImplUniToDBCSTab_MS932_F9 },                 /* 0xF9 */
1678    { 0x0E, 0x2D, aImplUniToDBCSTab_MS932_FA },                 /* 0xFA */
1679    {    1,    0, NULL },                                       /* 0xFB */
1680    {    1,    0, NULL },                                       /* 0xFC */
1681    {    1,    0, NULL },                                       /* 0xFD */
1682    { 0x30, 0x44, aImplUniToDBCSTab_APPLEJAPANESE_FE },         /* 0xFE */
1683    { 0x01, 0xE5, aImplUniToDBCSTab_SJIS_FF }                   /* 0xFF */
1684};
1685
1686/* ----------------------------------------------------------------------- */
1687
1688static ImplDBCSConvertData const aImplAPPLEJAPANESEDBCSCvtData =
1689{
1690    aAPPLEJAPANESEUniLeadTab,
1691    aAPPLEJAPANESEDBCSHighTab,
1692    0x00, 0xFF,
1693    0x40, 0xFC,
1694    aImplSJISDBCSEUDCTab,
1695    DBCS_EUDC_SJIS_COUNT
1696};
1697
1698/* ----------------------------------------------------------------------- */
1699
1700static ImplTextEncodingData const aImplAPPLEJAPANESETextEncodingData
1701    = { { &aImplAPPLEJAPANESEDBCSCvtData,
1702          ImplDBCSToUnicode,
1703          ImplUnicodeToDBCS,
1704          NULL,
1705          NULL,
1706          NULL,
1707          NULL,
1708          NULL,
1709          NULL },
1710        1,
1711        2,
1712        2,
1713        128,
1714        "euc-jp",
1715        "shift_jis",
1716        RTL_TEXTENCODING_INFO_MULTIBYTE };
1717    /* MAC, SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */
1718
1719/* ======================================================================= */
1720
1721static ImplDBCSToUniLeadTab const aJIS0208UniLeadTab[128] =
1722{
1723    {      0,    1,    0, NULL },                               /* 0x00 */
1724    {      0,    1,    0, NULL },                               /* 0x01 */
1725    {      0,    1,    0, NULL },                               /* 0x02 */
1726    {      0,    1,    0, NULL },                               /* 0x03 */
1727    {      0,    1,    0, NULL },                               /* 0x04 */
1728    {      0,    1,    0, NULL },                               /* 0x05 */
1729    {      0,    1,    0, NULL },                               /* 0x06 */
1730    {      0,    1,    0, NULL },                               /* 0x07 */
1731    {      0,    1,    0, NULL },                               /* 0x08 */
1732    {      0,    1,    0, NULL },                               /* 0x09 */
1733    {      0,    1,    0, NULL },                               /* 0x0A */
1734    {      0,    1,    0, NULL },                               /* 0x0B */
1735    {      0,    1,    0, NULL },                               /* 0x0C */
1736    {      0,    1,    0, NULL },                               /* 0x0D */
1737    {      0,    1,    0, NULL },                               /* 0x0E */
1738    {      0,    1,    0, NULL },                               /* 0x0F */
1739    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x10 */ /* We convert this as double byte */
1740    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x11 */ /* We convert this as double byte */
1741    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x12 */ /* We convert this as double byte */
1742    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x13 */ /* We convert this as double byte */
1743    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x14 */ /* We convert this as double byte */
1744    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x15 */ /* We convert this as double byte */
1745    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x16 */ /* We convert this as double byte */
1746    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x17 */ /* We convert this as double byte */
1747    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x18 */ /* We convert this as double byte */
1748    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x19 */ /* We convert this as double byte */
1749    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x1A */ /* We convert this as double byte */
1750    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x1B */ /* We convert this as double byte */
1751    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x1C */ /* We convert this as double byte */
1752    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x1D */ /* We convert this as double byte */
1753    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x1E */ /* We convert this as double byte */
1754    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x1F */ /* We convert this as double byte */
1755    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x20 */ /* We convert this as double byte */
1756    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_21 },       /* 0x21 */
1757    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_22 },       /* 0x22 */
1758    {      0, 0x30, 0x7A, aImplDBCSToUniTab_JIS0208_23 },       /* 0x23 */
1759    {      0, 0x21, 0x73, aImplDBCSToUniTab_JIS0208_24 },       /* 0x24 */
1760    {      0, 0x21, 0x76, aImplDBCSToUniTab_JIS0208_25 },       /* 0x25 */
1761    {      0, 0x21, 0x58, aImplDBCSToUniTab_JIS0208_26 },       /* 0x26 */
1762    {      0, 0x21, 0x71, aImplDBCSToUniTab_JIS0208_27 },       /* 0x27 */
1763    {      0, 0x21, 0x40, aImplDBCSToUniTab_JIS0208_28 },       /* 0x28 */
1764    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x29 */ /* We convert this as double byte */
1765    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x2A */ /* We convert this as double byte */
1766    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x2B */ /* We convert this as double byte */
1767    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x2C */ /* We convert this as double byte */
1768    {      0, 0x21, 0x7C, aImplDBCSToUniTab_JIS0208_2D },       /* 0x2D */
1769    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x2E */ /* We convert this as double byte */
1770    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x2F */ /* We convert this as double byte */
1771    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_30 },       /* 0x30 */
1772    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_31 },       /* 0x31 */
1773    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_32 },       /* 0x32 */
1774    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_33 },       /* 0x33 */
1775    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_34 },       /* 0x34 */
1776    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_35 },       /* 0x35 */
1777    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_36 },       /* 0x36 */
1778    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_37 },       /* 0x37 */
1779    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_38 },       /* 0x38 */
1780    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_39 },       /* 0x39 */
1781    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_3A },       /* 0x3A */
1782    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_3B },       /* 0x3B */
1783    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_3C },       /* 0x3C */
1784    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_3D },       /* 0x3D */
1785    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_3E },       /* 0x3E */
1786    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_3F },       /* 0x3F */
1787    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_40 },       /* 0x40 */
1788    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_41 },       /* 0x41 */
1789    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_42 },       /* 0x42 */
1790    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_43 },       /* 0x43 */
1791    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_44 },       /* 0x44 */
1792    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_45 },       /* 0x45 */
1793    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_46 },       /* 0x46 */
1794    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_47 },       /* 0x47 */
1795    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_48 },       /* 0x48 */
1796    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_49 },       /* 0x49 */
1797    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_4A },       /* 0x4A */
1798    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_4B },       /* 0x4B */
1799    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_4C },       /* 0x4C */
1800    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_4D },       /* 0x4D */
1801    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_4E },       /* 0x4E */
1802    {      0, 0x21, 0x53, aImplDBCSToUniTab_JIS0208_4F },       /* 0x4F */
1803    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_50 },       /* 0x50 */
1804    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_51 },       /* 0x51 */
1805    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_52 },       /* 0x52 */
1806    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_53 },       /* 0x53 */
1807    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_54 },       /* 0x54 */
1808    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_55 },       /* 0x55 */
1809    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_56 },       /* 0x56 */
1810    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_57 },       /* 0x57 */
1811    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_58 },       /* 0x58 */
1812    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_59 },       /* 0x59 */
1813    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_5A },       /* 0x5A */
1814    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_5B },       /* 0x5B */
1815    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_5C },       /* 0x5C */
1816    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_5D },       /* 0x5D */
1817    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_5E },       /* 0x5E */
1818    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_5F },       /* 0x5F */
1819    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_60 },       /* 0x60 */
1820    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_61 },       /* 0x61 */
1821    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_62 },       /* 0x62 */
1822    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_63 },       /* 0x63 */
1823    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_64 },       /* 0x64 */
1824    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_65 },       /* 0x65 */
1825    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_66 },       /* 0x66 */
1826    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_67 },       /* 0x67 */
1827    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_68 },       /* 0x68 */
1828    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_69 },       /* 0x69 */
1829    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_6A },       /* 0x6A */
1830    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_6B },       /* 0x6B */
1831    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_6C },       /* 0x6C */
1832    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_6D },       /* 0x6D */
1833    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_6E },       /* 0x6E */
1834    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_6F },       /* 0x6F */
1835    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_70 },       /* 0x70 */
1836    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_71 },       /* 0x71 */
1837    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_72 },       /* 0x72 */
1838    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0208_73 },       /* 0x73 */
1839    {      0, 0x21, 0x26, aImplDBCSToUniTab_JIS0208_74 },       /* 0x74 */
1840    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x75 */ /* We convert this as double byte */
1841    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x76 */ /* We convert this as double byte */
1842    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x77 */ /* We convert this as double byte */
1843    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x78 */ /* We convert this as double byte */
1844    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x79 */ /* We convert this as double byte */
1845    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x7A */ /* We convert this as double byte */
1846    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x7B */ /* We convert this as double byte */
1847    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x7C */ /* We convert this as double byte */
1848    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x7D */ /* We convert this as double byte */
1849    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x7E */ /* We convert this as double byte */
1850    {      0,    1,    0, NULL }                                /* 0x7F */
1851};
1852
1853/* ----------------------------------------------------------------------- */
1854
1855static ImplUniToDBCSHighTab const aJIS0208DBCSHighTab[256] =
1856{
1857    { 0xA2, 0xF7, aImplUniToDBCSTab_JIS0208_00 },               /* 0x00 */
1858    {    1,    0, NULL },                                       /* 0x01 */
1859    {    1,    0, NULL },                                       /* 0x02 */
1860    { 0x91, 0xC9, aImplUniToDBCSTab_JIS0208_03 },               /* 0x03 */
1861    { 0x01, 0x51, aImplUniToDBCSTab_JIS0208_04 },               /* 0x04 */
1862    {    1,    0, NULL },                                       /* 0x05 */
1863    {    1,    0, NULL },                                       /* 0x06 */
1864    {    1,    0, NULL },                                       /* 0x07 */
1865    {    1,    0, NULL },                                       /* 0x08 */
1866    {    1,    0, NULL },                                       /* 0x09 */
1867    {    1,    0, NULL },                                       /* 0x0A */
1868    {    1,    0, NULL },                                       /* 0x0B */
1869    {    1,    0, NULL },                                       /* 0x0C */
1870    {    1,    0, NULL },                                       /* 0x0D */
1871    {    1,    0, NULL },                                       /* 0x0E */
1872    {    1,    0, NULL },                                       /* 0x0F */
1873    {    1,    0, NULL },                                       /* 0x10 */
1874    {    1,    0, NULL },                                       /* 0x11 */
1875    {    1,    0, NULL },                                       /* 0x12 */
1876    {    1,    0, NULL },                                       /* 0x13 */
1877    {    1,    0, NULL },                                       /* 0x14 */
1878    {    1,    0, NULL },                                       /* 0x15 */
1879    {    1,    0, NULL },                                       /* 0x16 */
1880    {    1,    0, NULL },                                       /* 0x17 */
1881    {    1,    0, NULL },                                       /* 0x18 */
1882    {    1,    0, NULL },                                       /* 0x19 */
1883    {    1,    0, NULL },                                       /* 0x1A */
1884    {    1,    0, NULL },                                       /* 0x1B */
1885    {    1,    0, NULL },                                       /* 0x1C */
1886    {    1,    0, NULL },                                       /* 0x1D */
1887    {    1,    0, NULL },                                       /* 0x1E */
1888    {    1,    0, NULL },                                       /* 0x1F */
1889    { 0x10, 0x3B, aImplUniToDBCSTab_JIS0208_20 },               /* 0x20 */
1890    { 0x03, 0xD4, aImplUniToDBCSTab_JIS0208_21 },               /* 0x21 */
1891    { 0x00, 0xBF, aImplUniToDBCSTab_JIS0208_22 },               /* 0x22 */
1892    { 0x12, 0x12, aImplUniToDBCSTab_JIS0208_23 },               /* 0x23 */
1893    { 0x60, 0x73, aImplUniToDBCSTab_JIS0208_24 },               /* 0x24 */
1894    { 0x00, 0xEF, aImplUniToDBCSTab_JIS0208_25 },               /* 0x25 */
1895    { 0x05, 0x6F, aImplUniToDBCSTab_JIS0208_26 },               /* 0x26 */
1896    {    1,    0, NULL },                                       /* 0x27 */
1897    {    1,    0, NULL },                                       /* 0x28 */
1898    {    1,    0, NULL },                                       /* 0x29 */
1899    {    1,    0, NULL },                                       /* 0x2A */
1900    {    1,    0, NULL },                                       /* 0x2B */
1901    {    1,    0, NULL },                                       /* 0x2C */
1902    {    1,    0, NULL },                                       /* 0x2D */
1903    {    1,    0, NULL },                                       /* 0x2E */
1904    {    1,    0, NULL },                                       /* 0x2F */
1905    { 0x00, 0xFE, aImplUniToDBCSTab_JIS0208_30 },               /* 0x30 */
1906    {    1,    0, NULL },                                       /* 0x31 */
1907    { 0x31, 0xA8, aImplUniToDBCSTab_JIS0208_32 },               /* 0x32 */
1908    { 0x03, 0xCD, aImplUniToDBCSTab_JIS0208_33 },               /* 0x33 */
1909    {    1,    0, NULL },                                       /* 0x34 */
1910    {    1,    0, NULL },                                       /* 0x35 */
1911    {    1,    0, NULL },                                       /* 0x36 */
1912    {    1,    0, NULL },                                       /* 0x37 */
1913    {    1,    0, NULL },                                       /* 0x38 */
1914    {    1,    0, NULL },                                       /* 0x39 */
1915    {    1,    0, NULL },                                       /* 0x3A */
1916    {    1,    0, NULL },                                       /* 0x3B */
1917    {    1,    0, NULL },                                       /* 0x3C */
1918    {    1,    0, NULL },                                       /* 0x3D */
1919    {    1,    0, NULL },                                       /* 0x3E */
1920    {    1,    0, NULL },                                       /* 0x3F */
1921    {    1,    0, NULL },                                       /* 0x40 */
1922    {    1,    0, NULL },                                       /* 0x41 */
1923    {    1,    0, NULL },                                       /* 0x42 */
1924    {    1,    0, NULL },                                       /* 0x43 */
1925    {    1,    0, NULL },                                       /* 0x44 */
1926    {    1,    0, NULL },                                       /* 0x45 */
1927    {    1,    0, NULL },                                       /* 0x46 */
1928    {    1,    0, NULL },                                       /* 0x47 */
1929    {    1,    0, NULL },                                       /* 0x48 */
1930    {    1,    0, NULL },                                       /* 0x49 */
1931    {    1,    0, NULL },                                       /* 0x4A */
1932    {    1,    0, NULL },                                       /* 0x4B */
1933    {    1,    0, NULL },                                       /* 0x4C */
1934    {    1,    0, NULL },                                       /* 0x4D */
1935    { 0x00, 0xFB, aImplUniToDBCSTab_JIS0208_4E },               /* 0x4E */
1936    { 0x01, 0xFE, aImplUniToDBCSTab_JIS0208_4F },               /* 0x4F */
1937    { 0x05, 0xFB, aImplUniToDBCSTab_JIS0208_50 },               /* 0x50 */
1938    { 0x00, 0xFE, aImplUniToDBCSTab_JIS0208_51 },               /* 0x51 */
1939    { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_52 },               /* 0x52 */
1940    { 0x01, 0xFA, aImplUniToDBCSTab_JIS0208_53 },               /* 0x53 */
1941    { 0x01, 0xFD, aImplUniToDBCSTab_JIS0208_54 },               /* 0x54 */
1942    { 0x04, 0xFE, aImplUniToDBCSTab_JIS0208_55 },               /* 0x55 */
1943    { 0x06, 0xFF, aImplUniToDBCSTab_JIS0208_56 },               /* 0x56 */
1944    { 0x00, 0xFC, aImplUniToDBCSTab_JIS0208_57 },               /* 0x57 */
1945    { 0x00, 0xFD, aImplUniToDBCSTab_JIS0208_58 },               /* 0x58 */
1946    { 0x02, 0xFF, aImplUniToDBCSTab_JIS0208_59 },               /* 0x59 */
1947    { 0x01, 0xFB, aImplUniToDBCSTab_JIS0208_5A },               /* 0x5A */
1948    { 0x09, 0xFF, aImplUniToDBCSTab_JIS0208_5B },               /* 0x5B */
1949    { 0x01, 0xFD, aImplUniToDBCSTab_JIS0208_5C },               /* 0x5C */
1950    { 0x07, 0xFE, aImplUniToDBCSTab_JIS0208_5D },               /* 0x5D */
1951    { 0x02, 0xFF, aImplUniToDBCSTab_JIS0208_5E },               /* 0x5E */
1952    { 0x01, 0xFF, aImplUniToDBCSTab_JIS0208_5F },               /* 0x5F */
1953    { 0x0E, 0xFB, aImplUniToDBCSTab_JIS0208_60 },               /* 0x60 */
1954    { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_61 },               /* 0x61 */
1955    { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_62 },               /* 0x62 */
1956    { 0x01, 0xFA, aImplUniToDBCSTab_JIS0208_63 },               /* 0x63 */
1957    { 0x06, 0xFE, aImplUniToDBCSTab_JIS0208_64 },               /* 0x64 */
1958    { 0x00, 0xFB, aImplUniToDBCSTab_JIS0208_65 },               /* 0x65 */
1959    { 0x02, 0xFF, aImplUniToDBCSTab_JIS0208_66 },               /* 0x66 */
1960    { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_67 },               /* 0x67 */
1961    { 0x02, 0xFA, aImplUniToDBCSTab_JIS0208_68 },               /* 0x68 */
1962    { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_69 },               /* 0x69 */
1963    { 0x02, 0xFB, aImplUniToDBCSTab_JIS0208_6A },               /* 0x6A */
1964    { 0x04, 0xF3, aImplUniToDBCSTab_JIS0208_6B },               /* 0x6B */
1965    { 0x08, 0xF3, aImplUniToDBCSTab_JIS0208_6C },               /* 0x6C */
1966    { 0x0B, 0xFB, aImplUniToDBCSTab_JIS0208_6D },               /* 0x6D */
1967    { 0x05, 0xFF, aImplUniToDBCSTab_JIS0208_6E },               /* 0x6E */
1968    { 0x01, 0xFE, aImplUniToDBCSTab_JIS0208_6F },               /* 0x6F */
1969    { 0x01, 0xFD, aImplUniToDBCSTab_JIS0208_70 },               /* 0x70 */
1970    { 0x09, 0xFF, aImplUniToDBCSTab_JIS0208_71 },               /* 0x71 */
1971    { 0x06, 0xFD, aImplUniToDBCSTab_JIS0208_72 },               /* 0x72 */
1972    { 0x0A, 0xFE, aImplUniToDBCSTab_JIS0208_73 },               /* 0x73 */
1973    { 0x03, 0xF8, aImplUniToDBCSTab_JIS0208_74 },               /* 0x74 */
1974    { 0x03, 0xFF, aImplUniToDBCSTab_JIS0208_75 },               /* 0x75 */
1975    { 0x01, 0xFE, aImplUniToDBCSTab_JIS0208_76 },               /* 0x76 */
1976    { 0x01, 0xFC, aImplUniToDBCSTab_JIS0208_77 },               /* 0x77 */
1977    { 0x02, 0xFD, aImplUniToDBCSTab_JIS0208_78 },               /* 0x78 */
1978    { 0x01, 0xFB, aImplUniToDBCSTab_JIS0208_79 },               /* 0x79 */
1979    { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_7A },               /* 0x7A */
1980    { 0x02, 0xF7, aImplUniToDBCSTab_JIS0208_7B },               /* 0x7B */
1981    { 0x00, 0xFE, aImplUniToDBCSTab_JIS0208_7C },               /* 0x7C */
1982    { 0x00, 0xFB, aImplUniToDBCSTab_JIS0208_7D },               /* 0x7D */
1983    { 0x01, 0x9C, aImplUniToDBCSTab_JIS0208_7E },               /* 0x7E */
1984    { 0x36, 0xFC, aImplUniToDBCSTab_JIS0208_7F },               /* 0x7F */
1985    { 0x00, 0xFD, aImplUniToDBCSTab_JIS0208_80 },               /* 0x80 */
1986    { 0x02, 0xFE, aImplUniToDBCSTab_JIS0208_81 },               /* 0x81 */
1987    { 0x01, 0xFB, aImplUniToDBCSTab_JIS0208_82 },               /* 0x82 */
1988    { 0x02, 0xFD, aImplUniToDBCSTab_JIS0208_83 },               /* 0x83 */
1989    { 0x03, 0xFF, aImplUniToDBCSTab_JIS0208_84 },               /* 0x84 */
1990    { 0x00, 0xFE, aImplUniToDBCSTab_JIS0208_85 },               /* 0x85 */
1991    { 0x02, 0xFE, aImplUniToDBCSTab_JIS0208_86 },               /* 0x86 */
1992    { 0x00, 0xFE, aImplUniToDBCSTab_JIS0208_87 },               /* 0x87 */
1993    { 0x05, 0xFE, aImplUniToDBCSTab_JIS0208_88 },               /* 0x88 */
1994    { 0x02, 0xF8, aImplUniToDBCSTab_JIS0208_89 },               /* 0x89 */
1995    { 0x00, 0xFE, aImplUniToDBCSTab_JIS0208_8A },               /* 0x8A */
1996    { 0x00, 0x9A, aImplUniToDBCSTab_JIS0208_8B },               /* 0x8B */
1997    { 0x37, 0xFD, aImplUniToDBCSTab_JIS0208_8C },               /* 0x8C */
1998    { 0x04, 0xFF, aImplUniToDBCSTab_JIS0208_8D },               /* 0x8D */
1999    { 0x08, 0xFE, aImplUniToDBCSTab_JIS0208_8E },               /* 0x8E */
2000    { 0x03, 0xFD, aImplUniToDBCSTab_JIS0208_8F },               /* 0x8F */
2001    { 0x00, 0xFD, aImplUniToDBCSTab_JIS0208_90 },               /* 0x90 */
2002    { 0x02, 0xFF, aImplUniToDBCSTab_JIS0208_91 },               /* 0x91 */
2003    { 0x0D, 0xFC, aImplUniToDBCSTab_JIS0208_92 },               /* 0x92 */
2004    { 0x06, 0xE8, aImplUniToDBCSTab_JIS0208_93 },               /* 0x93 */
2005    { 0x03, 0x81, aImplUniToDBCSTab_JIS0208_94 },               /* 0x94 */
2006    { 0x77, 0xE5, aImplUniToDBCSTab_JIS0208_95 },               /* 0x95 */
2007    { 0x1C, 0xFB, aImplUniToDBCSTab_JIS0208_96 },               /* 0x96 */
2008    { 0x00, 0xFF, aImplUniToDBCSTab_JIS0208_97 },               /* 0x97 */
2009    { 0x01, 0xFE, aImplUniToDBCSTab_JIS0208_98 },               /* 0x98 */
2010    { 0x03, 0xFF, aImplUniToDBCSTab_JIS0208_99 },               /* 0x99 */
2011    { 0x01, 0xFB, aImplUniToDBCSTab_JIS0208_9A },               /* 0x9A */
2012    { 0x06, 0xF5, aImplUniToDBCSTab_JIS0208_9B },               /* 0x9B */
2013    { 0x04, 0xF6, aImplUniToDBCSTab_JIS0208_9C },               /* 0x9C */
2014    { 0x03, 0xFD, aImplUniToDBCSTab_JIS0208_9D },               /* 0x9D */
2015    { 0x1A, 0xFD, aImplUniToDBCSTab_JIS0208_9E },               /* 0x9E */
2016    { 0x07, 0xA0, aImplUniToDBCSTab_JIS0208_9F },               /* 0x9F */
2017    {    1,    0, NULL },                                       /* 0xA0 */
2018    {    1,    0, NULL },                                       /* 0xA1 */
2019    {    1,    0, NULL },                                       /* 0xA2 */
2020    {    1,    0, NULL },                                       /* 0xA3 */
2021    {    1,    0, NULL },                                       /* 0xA4 */
2022    {    1,    0, NULL },                                       /* 0xA5 */
2023    {    1,    0, NULL },                                       /* 0xA6 */
2024    {    1,    0, NULL },                                       /* 0xA7 */
2025    {    1,    0, NULL },                                       /* 0xA8 */
2026    {    1,    0, NULL },                                       /* 0xA9 */
2027    {    1,    0, NULL },                                       /* 0xAA */
2028    {    1,    0, NULL },                                       /* 0xAB */
2029    {    1,    0, NULL },                                       /* 0xAC */
2030    {    1,    0, NULL },                                       /* 0xAD */
2031    {    1,    0, NULL },                                       /* 0xAE */
2032    {    1,    0, NULL },                                       /* 0xAF */
2033    {    1,    0, NULL },                                       /* 0xB0 */
2034    {    1,    0, NULL },                                       /* 0xB1 */
2035    {    1,    0, NULL },                                       /* 0xB2 */
2036    {    1,    0, NULL },                                       /* 0xB3 */
2037    {    1,    0, NULL },                                       /* 0xB4 */
2038    {    1,    0, NULL },                                       /* 0xB5 */
2039    {    1,    0, NULL },                                       /* 0xB6 */
2040    {    1,    0, NULL },                                       /* 0xB7 */
2041    {    1,    0, NULL },                                       /* 0xB8 */
2042    {    1,    0, NULL },                                       /* 0xB9 */
2043    {    1,    0, NULL },                                       /* 0xBA */
2044    {    1,    0, NULL },                                       /* 0xBB */
2045    {    1,    0, NULL },                                       /* 0xBC */
2046    {    1,    0, NULL },                                       /* 0xBD */
2047    {    1,    0, NULL },                                       /* 0xBE */
2048    {    1,    0, NULL },                                       /* 0xBF */
2049    {    1,    0, NULL },                                       /* 0xC0 */
2050    {    1,    0, NULL },                                       /* 0xC1 */
2051    {    1,    0, NULL },                                       /* 0xC2 */
2052    {    1,    0, NULL },                                       /* 0xC3 */
2053    {    1,    0, NULL },                                       /* 0xC4 */
2054    {    1,    0, NULL },                                       /* 0xC5 */
2055    {    1,    0, NULL },                                       /* 0xC6 */
2056    {    1,    0, NULL },                                       /* 0xC7 */
2057    {    1,    0, NULL },                                       /* 0xC8 */
2058    {    1,    0, NULL },                                       /* 0xC9 */
2059    {    1,    0, NULL },                                       /* 0xCA */
2060    {    1,    0, NULL },                                       /* 0xCB */
2061    {    1,    0, NULL },                                       /* 0xCC */
2062    {    1,    0, NULL },                                       /* 0xCD */
2063    {    1,    0, NULL },                                       /* 0xCE */
2064    {    1,    0, NULL },                                       /* 0xCF */
2065    {    1,    0, NULL },                                       /* 0xD0 */
2066    {    1,    0, NULL },                                       /* 0xD1 */
2067    {    1,    0, NULL },                                       /* 0xD2 */
2068    {    1,    0, NULL },                                       /* 0xD3 */
2069    {    1,    0, NULL },                                       /* 0xD4 */
2070    {    1,    0, NULL },                                       /* 0xD5 */
2071    {    1,    0, NULL },                                       /* 0xD6 */
2072    {    1,    0, NULL },                                       /* 0xD7 */
2073    {    1,    0, NULL },                                       /* 0xD8 */
2074    {    1,    0, NULL },                                       /* 0xD9 */
2075    {    1,    0, NULL },                                       /* 0xDA */
2076    {    1,    0, NULL },                                       /* 0xDB */
2077    {    1,    0, NULL },                                       /* 0xDC */
2078    {    1,    0, NULL },                                       /* 0xDD */
2079    {    1,    0, NULL },                                       /* 0xDE */
2080    {    1,    0, NULL },                                       /* 0xDF */
2081    {    1,    0, NULL },                                       /* 0xE0 */
2082    {    1,    0, NULL },                                       /* 0xE1 */
2083    {    1,    0, NULL },                                       /* 0xE2 */
2084    {    1,    0, NULL },                                       /* 0xE3 */
2085    {    1,    0, NULL },                                       /* 0xE4 */
2086    {    1,    0, NULL },                                       /* 0xE5 */
2087    {    1,    0, NULL },                                       /* 0xE6 */
2088    {    1,    0, NULL },                                       /* 0xE7 */
2089    {    1,    0, NULL },                                       /* 0xE8 */
2090    {    1,    0, NULL },                                       /* 0xE9 */
2091    {    1,    0, NULL },                                       /* 0xEA */
2092    {    1,    0, NULL },                                       /* 0xEB */
2093    {    1,    0, NULL },                                       /* 0xEC */
2094    {    1,    0, NULL },                                       /* 0xED */
2095    {    1,    0, NULL },                                       /* 0xEE */
2096    {    1,    0, NULL },                                       /* 0xEF */
2097    {    1,    0, NULL },                                       /* 0xF0 */
2098    {    1,    0, NULL },                                       /* 0xF1 */
2099    {    1,    0, NULL },                                       /* 0xF2 */
2100    {    1,    0, NULL },                                       /* 0xF3 */
2101    {    1,    0, NULL },                                       /* 0xF4 */
2102    {    1,    0, NULL },                                       /* 0xF5 */
2103    {    1,    0, NULL },                                       /* 0xF6 */
2104    {    1,    0, NULL },                                       /* 0xF7 */
2105    {    1,    0, NULL },                                       /* 0xF8 */
2106    {    1,    0, NULL },                                       /* 0xF9 */
2107    {    1,    0, NULL },                                       /* 0xFA */
2108    {    1,    0, NULL },                                       /* 0xFB */
2109    {    1,    0, NULL },                                       /* 0xFC */
2110    {    1,    0, NULL },                                       /* 0xFD */
2111    {    1,    0, NULL },                                       /* 0xFE */
2112    { 0x01, 0xE5, aImplUniToDBCSTab_JIS0208_FF }                /* 0xFF */
2113};
2114
2115/* ----------------------------------------------------------------------- */
2116
2117static ImplDBCSToUniLeadTab const aJIS0212UniLeadTab[128] =
2118{
2119    {      0,    1,    0, NULL },                               /* 0x00 */
2120    {      0,    1,    0, NULL },                               /* 0x01 */
2121    {      0,    1,    0, NULL },                               /* 0x02 */
2122    {      0,    1,    0, NULL },                               /* 0x03 */
2123    {      0,    1,    0, NULL },                               /* 0x04 */
2124    {      0,    1,    0, NULL },                               /* 0x05 */
2125    {      0,    1,    0, NULL },                               /* 0x06 */
2126    {      0,    1,    0, NULL },                               /* 0x07 */
2127    {      0,    1,    0, NULL },                               /* 0x08 */
2128    {      0,    1,    0, NULL },                               /* 0x09 */
2129    {      0,    1,    0, NULL },                               /* 0x0A */
2130    {      0,    1,    0, NULL },                               /* 0x0B */
2131    {      0,    1,    0, NULL },                               /* 0x0C */
2132    {      0,    1,    0, NULL },                               /* 0x0D */
2133    {      0,    1,    0, NULL },                               /* 0x0E */
2134    {      0,    1,    0, NULL },                               /* 0x0F */
2135    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x10 */ /* We convert this as double byte */
2136    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x11 */ /* We convert this as double byte */
2137    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x12 */ /* We convert this as double byte */
2138    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x13 */ /* We convert this as double byte */
2139    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x14 */ /* We convert this as double byte */
2140    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x15 */ /* We convert this as double byte */
2141    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x16 */ /* We convert this as double byte */
2142    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x17 */ /* We convert this as double byte */
2143    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x18 */ /* We convert this as double byte */
2144    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x19 */ /* We convert this as double byte */
2145    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x1A */ /* We convert this as double byte */
2146    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x1B */ /* We convert this as double byte */
2147    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x1C */ /* We convert this as double byte */
2148    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x1D */ /* We convert this as double byte */
2149    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x1E */ /* We convert this as double byte */
2150    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x1F */ /* We convert this as double byte */
2151    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x20 */ /* We convert this as double byte */
2152    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x21 */ /* We convert this as double byte */
2153    {      0, 0x2F, 0x71, aImplDBCSToUniTab_JIS0212_22 },       /* 0x22 */
2154    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x23 */ /* We convert this as double byte */
2155    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x24 */ /* We convert this as double byte */
2156    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x25 */ /* We convert this as double byte */
2157    {      0, 0x61, 0x7C, aImplDBCSToUniTab_JIS0212_26 },       /* 0x26 */
2158    {      0, 0x42, 0x7E, aImplDBCSToUniTab_JIS0212_27 },       /* 0x27 */
2159    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x28 */ /* We convert this as double byte */
2160    {      0, 0x21, 0x50, aImplDBCSToUniTab_JIS0212_29 },       /* 0x29 */
2161    {      0, 0x21, 0x77, aImplDBCSToUniTab_JIS0212_2A },       /* 0x2A */
2162    {      0, 0x21, 0x77, aImplDBCSToUniTab_JIS0212_2B },       /* 0x2B */
2163    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x2C */ /* We convert this as double byte */
2164    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x2D */ /* We convert this as double byte */
2165    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x2E */ /* We convert this as double byte */
2166    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x2F */ /* We convert this as double byte */
2167    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_30 },       /* 0x30 */
2168    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_31 },       /* 0x31 */
2169    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_32 },       /* 0x32 */
2170    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_33 },       /* 0x33 */
2171    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_34 },       /* 0x34 */
2172    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_35 },       /* 0x35 */
2173    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_36 },       /* 0x36 */
2174    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_37 },       /* 0x37 */
2175    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_38 },       /* 0x38 */
2176    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_39 },       /* 0x39 */
2177    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_3A },       /* 0x3A */
2178    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_3B },       /* 0x3B */
2179    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_3C },       /* 0x3C */
2180    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_3D },       /* 0x3D */
2181    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_3E },       /* 0x3E */
2182    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_3F },       /* 0x3F */
2183    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_40 },       /* 0x40 */
2184    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_41 },       /* 0x41 */
2185    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_42 },       /* 0x42 */
2186    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_43 },       /* 0x43 */
2187    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_44 },       /* 0x44 */
2188    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_45 },       /* 0x45 */
2189    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_46 },       /* 0x46 */
2190    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_47 },       /* 0x47 */
2191    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_48 },       /* 0x48 */
2192    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_49 },       /* 0x49 */
2193    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_4A },       /* 0x4A */
2194    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_4B },       /* 0x4B */
2195    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_4C },       /* 0x4C */
2196    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_4D },       /* 0x4D */
2197    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_4E },       /* 0x4E */
2198    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_4F },       /* 0x4F */
2199    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_50 },       /* 0x50 */
2200    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_51 },       /* 0x51 */
2201    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_52 },       /* 0x52 */
2202    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_53 },       /* 0x53 */
2203    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_54 },       /* 0x54 */
2204    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_55 },       /* 0x55 */
2205    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_56 },       /* 0x56 */
2206    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_57 },       /* 0x57 */
2207    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_58 },       /* 0x58 */
2208    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_59 },       /* 0x59 */
2209    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_5A },       /* 0x5A */
2210    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_5B },       /* 0x5B */
2211    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_5C },       /* 0x5C */
2212    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_5D },       /* 0x5D */
2213    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_5E },       /* 0x5E */
2214    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_5F },       /* 0x5F */
2215    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_60 },       /* 0x60 */
2216    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_61 },       /* 0x61 */
2217    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_62 },       /* 0x62 */
2218    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_63 },       /* 0x63 */
2219    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_64 },       /* 0x64 */
2220    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_65 },       /* 0x65 */
2221    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_66 },       /* 0x66 */
2222    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_67 },       /* 0x67 */
2223    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_68 },       /* 0x68 */
2224    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_69 },       /* 0x69 */
2225    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_6A },       /* 0x6A */
2226    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_6B },       /* 0x6B */
2227    {      0, 0x21, 0x7E, aImplDBCSToUniTab_JIS0212_6C },       /* 0x6C */
2228    {      0, 0x21, 0x63, aImplDBCSToUniTab_JIS0212_6D },       /* 0x6D */
2229    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x6E */ /* We convert this as double byte */
2230    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x6F */ /* We convert this as double byte */
2231    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x70 */ /* We convert this as double byte */
2232    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x71 */ /* We convert this as double byte */
2233    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x72 */ /* We convert this as double byte */
2234    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x73 */ /* We convert this as double byte */
2235    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x74 */ /* We convert this as double byte */
2236    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x75 */ /* We convert this as double byte */
2237    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x76 */ /* We convert this as double byte */
2238    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x77 */ /* We convert this as double byte */
2239    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x78 */ /* We convert this as double byte */
2240    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x79 */ /* We convert this as double byte */
2241    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x7A */ /* We convert this as double byte */
2242    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x7B */ /* We convert this as double byte */
2243    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x7C */ /* We convert this as double byte */
2244    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x7D */ /* We convert this as double byte */
2245    {      0,    1,    0, aImplDoubleByteIdentifierTab },       /* 0x7E */ /* We convert this as double byte */
2246    {      0,    1,    0, NULL }                                /* 0x7F */
2247};
2248
2249/* ----------------------------------------------------------------------- */
2250
2251static ImplUniToDBCSHighTab const aJIS0212DBCSHighTab[256] =
2252{
2253    { 0xA1, 0xFF, aImplUniToDBCSTab_JIS0212_00 },               /* 0x00 */
2254    { 0x00, 0xF5, aImplUniToDBCSTab_JIS0212_01 },               /* 0x01 */
2255    { 0xC7, 0xDD, aImplUniToDBCSTab_JIS0212_02 },               /* 0x02 */
2256    { 0x84, 0xCE, aImplUniToDBCSTab_JIS0212_03 },               /* 0x03 */
2257    { 0x02, 0x5F, aImplUniToDBCSTab_JIS0212_04 },               /* 0x04 */
2258    {    1,    0, NULL },                                       /* 0x05 */
2259    {    1,    0, NULL },                                       /* 0x06 */
2260    {    1,    0, NULL },                                       /* 0x07 */
2261    {    1,    0, NULL },                                       /* 0x08 */
2262    {    1,    0, NULL },                                       /* 0x09 */
2263    {    1,    0, NULL },                                       /* 0x0A */
2264    {    1,    0, NULL },                                       /* 0x0B */
2265    {    1,    0, NULL },                                       /* 0x0C */
2266    {    1,    0, NULL },                                       /* 0x0D */
2267    {    1,    0, NULL },                                       /* 0x0E */
2268    {    1,    0, NULL },                                       /* 0x0F */
2269    {    1,    0, NULL },                                       /* 0x10 */
2270    {    1,    0, NULL },                                       /* 0x11 */
2271    {    1,    0, NULL },                                       /* 0x12 */
2272    {    1,    0, NULL },                                       /* 0x13 */
2273    {    1,    0, NULL },                                       /* 0x14 */
2274    {    1,    0, NULL },                                       /* 0x15 */
2275    {    1,    0, NULL },                                       /* 0x16 */
2276    {    1,    0, NULL },                                       /* 0x17 */
2277    {    1,    0, NULL },                                       /* 0x18 */
2278    {    1,    0, NULL },                                       /* 0x19 */
2279    {    1,    0, NULL },                                       /* 0x1A */
2280    {    1,    0, NULL },                                       /* 0x1B */
2281    {    1,    0, NULL },                                       /* 0x1C */
2282    {    1,    0, NULL },                                       /* 0x1D */
2283    {    1,    0, NULL },                                       /* 0x1E */
2284    {    1,    0, NULL },                                       /* 0x1F */
2285    {    1,    0, NULL },                                       /* 0x20 */
2286    { 0x16, 0x22, aImplUniToDBCSTab_JIS0212_21 },               /* 0x21 */
2287    {    1,    0, NULL },                                       /* 0x22 */
2288    {    1,    0, NULL },                                       /* 0x23 */
2289    {    1,    0, NULL },                                       /* 0x24 */
2290    {    1,    0, NULL },                                       /* 0x25 */
2291    {    1,    0, NULL },                                       /* 0x26 */
2292    {    1,    0, NULL },                                       /* 0x27 */
2293    {    1,    0, NULL },                                       /* 0x28 */
2294    {    1,    0, NULL },                                       /* 0x29 */
2295    {    1,    0, NULL },                                       /* 0x2A */
2296    {    1,    0, NULL },                                       /* 0x2B */
2297    {    1,    0, NULL },                                       /* 0x2C */
2298    {    1,    0, NULL },                                       /* 0x2D */
2299    {    1,    0, NULL },                                       /* 0x2E */
2300    {    1,    0, NULL },                                       /* 0x2F */
2301    {    1,    0, NULL },                                       /* 0x30 */
2302    {    1,    0, NULL },                                       /* 0x31 */
2303    {    1,    0, NULL },                                       /* 0x32 */
2304    {    1,    0, NULL },                                       /* 0x33 */
2305    {    1,    0, NULL },                                       /* 0x34 */
2306    {    1,    0, NULL },                                       /* 0x35 */
2307    {    1,    0, NULL },                                       /* 0x36 */
2308    {    1,    0, NULL },                                       /* 0x37 */
2309    {    1,    0, NULL },                                       /* 0x38 */
2310    {    1,    0, NULL },                                       /* 0x39 */
2311    {    1,    0, NULL },                                       /* 0x3A */
2312    {    1,    0, NULL },                                       /* 0x3B */
2313    {    1,    0, NULL },                                       /* 0x3C */
2314    {    1,    0, NULL },                                       /* 0x3D */
2315    {    1,    0, NULL },                                       /* 0x3E */
2316    {    1,    0, NULL },                                       /* 0x3F */
2317    {    1,    0, NULL },                                       /* 0x40 */
2318    {    1,    0, NULL },                                       /* 0x41 */
2319    {    1,    0, NULL },                                       /* 0x42 */
2320    {    1,    0, NULL },                                       /* 0x43 */
2321    {    1,    0, NULL },                                       /* 0x44 */
2322    {    1,    0, NULL },                                       /* 0x45 */
2323    {    1,    0, NULL },                                       /* 0x46 */
2324    {    1,    0, NULL },                                       /* 0x47 */
2325    {    1,    0, NULL },                                       /* 0x48 */
2326    {    1,    0, NULL },                                       /* 0x49 */
2327    {    1,    0, NULL },                                       /* 0x4A */
2328    {    1,    0, NULL },                                       /* 0x4B */
2329    {    1,    0, NULL },                                       /* 0x4C */
2330    {    1,    0, NULL },                                       /* 0x4D */
2331    { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_4E },               /* 0x4E */
2332    { 0x00, 0xFF, aImplUniToDBCSTab_JIS0212_4F },               /* 0x4F */
2333    { 0x00, 0xFE, aImplUniToDBCSTab_JIS0212_50 },               /* 0x50 */
2334    { 0x03, 0xF7, aImplUniToDBCSTab_JIS0212_51 },               /* 0x51 */
2335    { 0x01, 0xF7, aImplUniToDBCSTab_JIS0212_52 },               /* 0x52 */
2336    { 0x00, 0xF5, aImplUniToDBCSTab_JIS0212_53 },               /* 0x53 */
2337    { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_54 },               /* 0x54 */
2338    { 0x00, 0xFF, aImplUniToDBCSTab_JIS0212_55 },               /* 0x55 */
2339    { 0x05, 0xF7, aImplUniToDBCSTab_JIS0212_56 },               /* 0x56 */
2340    { 0x01, 0xFF, aImplUniToDBCSTab_JIS0212_57 },               /* 0x57 */
2341    { 0x03, 0xF3, aImplUniToDBCSTab_JIS0212_58 },               /* 0x58 */
2342    { 0x05, 0xF7, aImplUniToDBCSTab_JIS0212_59 },               /* 0x59 */
2343    { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_5A },               /* 0x5A */
2344    { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_5B },               /* 0x5B */
2345    { 0x0C, 0xF4, aImplUniToDBCSTab_JIS0212_5C },               /* 0x5C */
2346    { 0x01, 0xF9, aImplUniToDBCSTab_JIS0212_5D },               /* 0x5D */
2347    { 0x00, 0xEB, aImplUniToDBCSTab_JIS0212_5E },               /* 0x5E */
2348    { 0x02, 0xFC, aImplUniToDBCSTab_JIS0212_5F },               /* 0x5F */
2349    { 0x07, 0xFD, aImplUniToDBCSTab_JIS0212_60 },               /* 0x60 */
2350    { 0x02, 0xEF, aImplUniToDBCSTab_JIS0212_61 },               /* 0x61 */
2351    { 0x01, 0xFD, aImplUniToDBCSTab_JIS0212_62 },               /* 0x62 */
2352    { 0x03, 0xF9, aImplUniToDBCSTab_JIS0212_63 },               /* 0x63 */
2353    { 0x09, 0xFF, aImplUniToDBCSTab_JIS0212_64 },               /* 0x64 */
2354    { 0x01, 0xFF, aImplUniToDBCSTab_JIS0212_65 },               /* 0x65 */
2355    { 0x00, 0xFB, aImplUniToDBCSTab_JIS0212_66 },               /* 0x66 */
2356    { 0x05, 0xF9, aImplUniToDBCSTab_JIS0212_67 },               /* 0x67 */
2357    { 0x04, 0xFD, aImplUniToDBCSTab_JIS0212_68 },               /* 0x68 */
2358    { 0x06, 0xFE, aImplUniToDBCSTab_JIS0212_69 },               /* 0x69 */
2359    { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_6A },               /* 0x6A */
2360    { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_6B },               /* 0x6B */
2361    { 0x02, 0xF4, aImplUniToDBCSTab_JIS0212_6C },               /* 0x6C */
2362    { 0x04, 0xFC, aImplUniToDBCSTab_JIS0212_6D },               /* 0x6D */
2363    { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_6E },               /* 0x6E */
2364    { 0x04, 0xFD, aImplUniToDBCSTab_JIS0212_6F },               /* 0x6F */
2365    { 0x00, 0xFA, aImplUniToDBCSTab_JIS0212_70 },               /* 0x70 */
2366    { 0x03, 0xFE, aImplUniToDBCSTab_JIS0212_71 },               /* 0x71 */
2367    { 0x00, 0xFE, aImplUniToDBCSTab_JIS0212_72 },               /* 0x72 */
2368    { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_73 },               /* 0x73 */
2369    { 0x00, 0xFF, aImplUniToDBCSTab_JIS0212_74 },               /* 0x74 */
2370    { 0x06, 0xF9, aImplUniToDBCSTab_JIS0212_75 },               /* 0x75 */
2371    { 0x00, 0xFC, aImplUniToDBCSTab_JIS0212_76 },               /* 0x76 */
2372    { 0x00, 0xFB, aImplUniToDBCSTab_JIS0212_77 },               /* 0x77 */
2373    { 0x05, 0xFF, aImplUniToDBCSTab_JIS0212_78 },               /* 0x78 */
2374    { 0x00, 0xFC, aImplUniToDBCSTab_JIS0212_79 },               /* 0x79 */
2375    { 0x02, 0xFE, aImplUniToDBCSTab_JIS0212_7A },               /* 0x7A */
2376    { 0x07, 0xFE, aImplUniToDBCSTab_JIS0212_7B },               /* 0x7B */
2377    { 0x01, 0xF5, aImplUniToDBCSTab_JIS0212_7C },               /* 0x7C */
2378    { 0x03, 0xFA, aImplUniToDBCSTab_JIS0212_7D },               /* 0x7D */
2379    { 0x00, 0x9E, aImplUniToDBCSTab_JIS0212_7E },               /* 0x7E */
2380    { 0x3B, 0xFF, aImplUniToDBCSTab_JIS0212_7F },               /* 0x7F */
2381    { 0x07, 0xFE, aImplUniToDBCSTab_JIS0212_80 },               /* 0x80 */
2382    { 0x03, 0xFF, aImplUniToDBCSTab_JIS0212_81 },               /* 0x81 */
2383    { 0x00, 0xFE, aImplUniToDBCSTab_JIS0212_82 },               /* 0x82 */
2384    { 0x00, 0xFC, aImplUniToDBCSTab_JIS0212_83 },               /* 0x83 */
2385    { 0x01, 0xFD, aImplUniToDBCSTab_JIS0212_84 },               /* 0x84 */
2386    { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_85 },               /* 0x85 */
2387    { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_86 },               /* 0x86 */
2388    { 0x04, 0xFF, aImplUniToDBCSTab_JIS0212_87 },               /* 0x87 */
2389    { 0x01, 0xF7, aImplUniToDBCSTab_JIS0212_88 },               /* 0x88 */
2390    { 0x01, 0xFF, aImplUniToDBCSTab_JIS0212_89 },               /* 0x89 */
2391    { 0x04, 0xFF, aImplUniToDBCSTab_JIS0212_8A },               /* 0x8A */
2392    { 0x05, 0x9F, aImplUniToDBCSTab_JIS0212_8B },               /* 0x8B */
2393    { 0x38, 0xFF, aImplUniToDBCSTab_JIS0212_8C },               /* 0x8C */
2394    { 0x01, 0xFD, aImplUniToDBCSTab_JIS0212_8D },               /* 0x8D */
2395    { 0x01, 0xFA, aImplUniToDBCSTab_JIS0212_8E },               /* 0x8E */
2396    { 0x00, 0xFE, aImplUniToDBCSTab_JIS0212_8F },               /* 0x8F */
2397    { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_90 },               /* 0x90 */
2398    { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_91 },               /* 0x91 */
2399    { 0x00, 0xFF, aImplUniToDBCSTab_JIS0212_92 },               /* 0x92 */
2400    { 0x00, 0xFD, aImplUniToDBCSTab_JIS0212_93 },               /* 0x93 */
2401    { 0x01, 0x84, aImplUniToDBCSTab_JIS0212_94 },               /* 0x94 */
2402    { 0x78, 0xE6, aImplUniToDBCSTab_JIS0212_95 },               /* 0x95 */
2403    { 0x1D, 0xFA, aImplUniToDBCSTab_JIS0212_96 },               /* 0x96 */
2404    { 0x02, 0xFA, aImplUniToDBCSTab_JIS0212_97 },               /* 0x97 */
2405    { 0x07, 0xF6, aImplUniToDBCSTab_JIS0212_98 },               /* 0x98 */
2406    { 0x02, 0xFE, aImplUniToDBCSTab_JIS0212_99 },               /* 0x99 */
2407    { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_9A },               /* 0x9A */
2408    { 0x00, 0xFF, aImplUniToDBCSTab_JIS0212_9B },               /* 0x9B */
2409    { 0x00, 0xF9, aImplUniToDBCSTab_JIS0212_9C },               /* 0x9C */
2410    { 0x02, 0xFE, aImplUniToDBCSTab_JIS0212_9D },               /* 0x9D */
2411    { 0x02, 0xFF, aImplUniToDBCSTab_JIS0212_9E },               /* 0x9E */
2412    { 0x02, 0xA5, aImplUniToDBCSTab_JIS0212_9F },               /* 0x9F */
2413    {    1,    0, NULL },                                       /* 0xA0 */
2414    {    1,    0, NULL },                                       /* 0xA1 */
2415    {    1,    0, NULL },                                       /* 0xA2 */
2416    {    1,    0, NULL },                                       /* 0xA3 */
2417    {    1,    0, NULL },                                       /* 0xA4 */
2418    {    1,    0, NULL },                                       /* 0xA5 */
2419    {    1,    0, NULL },                                       /* 0xA6 */
2420    {    1,    0, NULL },                                       /* 0xA7 */
2421    {    1,    0, NULL },                                       /* 0xA8 */
2422    {    1,    0, NULL },                                       /* 0xA9 */
2423    {    1,    0, NULL },                                       /* 0xAA */
2424    {    1,    0, NULL },                                       /* 0xAB */
2425    {    1,    0, NULL },                                       /* 0xAC */
2426    {    1,    0, NULL },                                       /* 0xAD */
2427    {    1,    0, NULL },                                       /* 0xAE */
2428    {    1,    0, NULL },                                       /* 0xAF */
2429    {    1,    0, NULL },                                       /* 0xB0 */
2430    {    1,    0, NULL },                                       /* 0xB1 */
2431    {    1,    0, NULL },                                       /* 0xB2 */
2432    {    1,    0, NULL },                                       /* 0xB3 */
2433    {    1,    0, NULL },                                       /* 0xB4 */
2434    {    1,    0, NULL },                                       /* 0xB5 */
2435    {    1,    0, NULL },                                       /* 0xB6 */
2436    {    1,    0, NULL },                                       /* 0xB7 */
2437    {    1,    0, NULL },                                       /* 0xB8 */
2438    {    1,    0, NULL },                                       /* 0xB9 */
2439    {    1,    0, NULL },                                       /* 0xBA */
2440    {    1,    0, NULL },                                       /* 0xBB */
2441    {    1,    0, NULL },                                       /* 0xBC */
2442    {    1,    0, NULL },                                       /* 0xBD */
2443    {    1,    0, NULL },                                       /* 0xBE */
2444    {    1,    0, NULL },                                       /* 0xBF */
2445    {    1,    0, NULL },                                       /* 0xC0 */
2446    {    1,    0, NULL },                                       /* 0xC1 */
2447    {    1,    0, NULL },                                       /* 0xC2 */
2448    {    1,    0, NULL },                                       /* 0xC3 */
2449    {    1,    0, NULL },                                       /* 0xC4 */
2450    {    1,    0, NULL },                                       /* 0xC5 */
2451    {    1,    0, NULL },                                       /* 0xC6 */
2452    {    1,    0, NULL },                                       /* 0xC7 */
2453    {    1,    0, NULL },                                       /* 0xC8 */
2454    {    1,    0, NULL },                                       /* 0xC9 */
2455    {    1,    0, NULL },                                       /* 0xCA */
2456    {    1,    0, NULL },                                       /* 0xCB */
2457    {    1,    0, NULL },                                       /* 0xCC */
2458    {    1,    0, NULL },                                       /* 0xCD */
2459    {    1,    0, NULL },                                       /* 0xCE */
2460    {    1,    0, NULL },                                       /* 0xCF */
2461    {    1,    0, NULL },                                       /* 0xD0 */
2462    {    1,    0, NULL },                                       /* 0xD1 */
2463    {    1,    0, NULL },                                       /* 0xD2 */
2464    {    1,    0, NULL },                                       /* 0xD3 */
2465    {    1,    0, NULL },                                       /* 0xD4 */
2466    {    1,    0, NULL },                                       /* 0xD5 */
2467    {    1,    0, NULL },                                       /* 0xD6 */
2468    {    1,    0, NULL },                                       /* 0xD7 */
2469    {    1,    0, NULL },                                       /* 0xD8 */
2470    {    1,    0, NULL },                                       /* 0xD9 */
2471    {    1,    0, NULL },                                       /* 0xDA */
2472    {    1,    0, NULL },                                       /* 0xDB */
2473    {    1,    0, NULL },                                       /* 0xDC */
2474    {    1,    0, NULL },                                       /* 0xDD */
2475    {    1,    0, NULL },                                       /* 0xDE */
2476    {    1,    0, NULL },                                       /* 0xDF */
2477    {    1,    0, NULL },                                       /* 0xE0 */
2478    {    1,    0, NULL },                                       /* 0xE1 */
2479    {    1,    0, NULL },                                       /* 0xE2 */
2480    {    1,    0, NULL },                                       /* 0xE3 */
2481    {    1,    0, NULL },                                       /* 0xE4 */
2482    {    1,    0, NULL },                                       /* 0xE5 */
2483    {    1,    0, NULL },                                       /* 0xE6 */
2484    {    1,    0, NULL },                                       /* 0xE7 */
2485    {    1,    0, NULL },                                       /* 0xE8 */
2486    {    1,    0, NULL },                                       /* 0xE9 */
2487    {    1,    0, NULL },                                       /* 0xEA */
2488    {    1,    0, NULL },                                       /* 0xEB */
2489    {    1,    0, NULL },                                       /* 0xEC */
2490    {    1,    0, NULL },                                       /* 0xED */
2491    {    1,    0, NULL },                                       /* 0xEE */
2492    {    1,    0, NULL },                                       /* 0xEF */
2493    {    1,    0, NULL },                                       /* 0xF0 */
2494    {    1,    0, NULL },                                       /* 0xF1 */
2495    {    1,    0, NULL },                                       /* 0xF2 */
2496    {    1,    0, NULL },                                       /* 0xF3 */
2497    {    1,    0, NULL },                                       /* 0xF4 */
2498    {    1,    0, NULL },                                       /* 0xF5 */
2499    {    1,    0, NULL },                                       /* 0xF6 */
2500    {    1,    0, NULL },                                       /* 0xF7 */
2501    {    1,    0, NULL },                                       /* 0xF8 */
2502    {    1,    0, NULL },                                       /* 0xF9 */
2503    {    1,    0, NULL },                                       /* 0xFA */
2504    {    1,    0, NULL },                                       /* 0xFB */
2505    {    1,    0, NULL },                                       /* 0xFC */
2506    {    1,    0, NULL },                                       /* 0xFD */
2507    {    1,    0, NULL },                                       /* 0xFE */
2508    {    1,    0, NULL }                                        /* 0xFF */
2509};
2510
2511/* ----------------------------------------------------------------------- */
2512
2513static ImplEUCJPConvertData const aImplEUCJPCvtData =
2514{
2515    aJIS0208UniLeadTab,
2516    aJIS0212UniLeadTab,
2517    aJIS0208DBCSHighTab,
2518    aJIS0212DBCSHighTab
2519};
2520
2521/* ----------------------------------------------------------------------- */
2522
2523static ImplTextEncodingData const aImplEUCJPTextEncodingData
2524    = { { &aImplEUCJPCvtData,
2525          ImplEUCJPToUnicode,
2526          ImplUnicodeToEUCJP,
2527          NULL,
2528          NULL,
2529          NULL,
2530          NULL,
2531          NULL,
2532          NULL },
2533        1,
2534        3,
2535        2,
2536        128,
2537        "euc-jp",
2538        "euc-jp",
2539        RTL_TEXTENCODING_INFO_ASCII
2540            | RTL_TEXTENCODING_INFO_MULTIBYTE
2541            | RTL_TEXTENCODING_INFO_MIME };
2542    /* SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */
2543
2544/* ======================================================================= */
2545
2546/* !!! JIS - X Encodings not complete !!! */
2547
2548#define HALFWIDTHKANA_START 0xFF61
2549#define HALFWIDTHKANA_END   0xFF9F
2550
2551static sal_uChar const aImplJISX0201Tab[HALFWIDTHKANA_END - HALFWIDTHKANA_START + 1] =
2552{
2553          0xA1, 0xA2, 0xA3, 0xA4, 0x5A, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
2554    0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
2555    0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
2556    0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
2557};
2558
2559/* ----------------------------------------------------------------------- */
2560
2561static ImplByteConvertData const aImplJISX0201ByteCvtData =
2562{
2563    NULL,
2564    NULL,
2565    0, 0,
2566    0, 0,
2567    aImplJISX0201Tab,
2568    NULL,
2569    NULL,
2570    HALFWIDTHKANA_START, HALFWIDTHKANA_END,
2571    0, 0,
2572    0
2573};
2574
2575/* ----------------------------------------------------------------------- */
2576
2577static ImplTextEncodingData const aImplJISX0201TextEncodingData
2578    = { { &aImplJISX0201ByteCvtData,
2579          NULL,
2580          ImplUnicodeToChar,
2581          NULL,
2582          NULL,
2583          NULL,
2584          NULL,
2585          NULL,
2586          NULL },
2587        1,
2588        1,
2589        1,
2590        128,
2591        "euc-jp",
2592        "euc-jp",
2593        RTL_TEXTENCODING_INFO_MULTIBYTE };
2594    /* SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */
2595
2596/* ======================================================================= */
2597
2598static ImplDBCSConvertData const aImplJISX0208DBCSCvtData =
2599{
2600    NULL,
2601    aJIS0208DBCSHighTab,
2602    0x00, 0xFF,
2603    0x21, 0x7E,
2604    NULL,
2605    0
2606};
2607
2608/* ----------------------------------------------------------------------- */
2609
2610static ImplTextEncodingData const aImplJISX0208TextEncodingData
2611    = { { &aImplJISX0208DBCSCvtData,
2612          NULL,
2613          ImplUnicodeToDBCS,
2614          NULL,
2615          NULL,
2616          NULL,
2617          NULL,
2618          NULL,
2619          NULL },
2620        2,
2621        2,
2622        2,
2623        128,
2624        "euc-jp",
2625        "euc-jp",
2626        RTL_TEXTENCODING_INFO_MULTIBYTE };
2627    /* SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */
2628
2629/* ======================================================================= */
2630
2631static ImplDBCSConvertData const aImplJISX0212DBCSCvtData =
2632{
2633    NULL,
2634    aJIS0212DBCSHighTab,
2635    0x00, 0xFF,
2636    0x21, 0x7E,
2637    NULL,
2638    0
2639};
2640
2641/* ----------------------------------------------------------------------- */
2642
2643static ImplTextEncodingData const aImplJISX0212TextEncodingData
2644    = { { &aImplJISX0212DBCSCvtData,
2645          NULL,
2646          ImplUnicodeToDBCS,
2647          NULL,
2648          NULL,
2649          NULL,
2650          NULL,
2651          NULL,
2652          NULL },
2653        2,
2654        2,
2655        2,
2656        128,
2657        "euc-jp",
2658        "euc-jp",
2659        RTL_TEXTENCODING_INFO_MULTIBYTE };
2660    /* SCRIPT_JAPANESE, pc code page 932, mac encoding 1 */
2661