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