Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/classes/sun/nio/cs/ext/JISAutoDetect.java
38919 views
1
/*
2
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
package sun.nio.cs.ext;
27
28
import java.nio.ByteBuffer;
29
import java.nio.CharBuffer;
30
import java.nio.charset.Charset;
31
import java.nio.charset.CharsetDecoder;
32
import java.nio.charset.CharsetEncoder;
33
import java.nio.charset.CoderResult;
34
import java.nio.charset.CharacterCodingException;
35
import java.nio.charset.MalformedInputException;
36
import sun.nio.cs.HistoricallyNamedCharset;
37
import java.security.AccessController;
38
import sun.security.action.GetPropertyAction;
39
import static java.lang.Character.UnicodeBlock;
40
41
42
public class JISAutoDetect
43
extends Charset
44
implements HistoricallyNamedCharset
45
{
46
47
private final static int EUCJP_MASK = 0x01;
48
private final static int SJIS2B_MASK = 0x02;
49
private final static int SJIS1B_MASK = 0x04;
50
private final static int EUCJP_KANA1_MASK = 0x08;
51
private final static int EUCJP_KANA2_MASK = 0x10;
52
53
public JISAutoDetect() {
54
super("x-JISAutoDetect", ExtendedCharsets.aliasesFor("x-JISAutoDetect"));
55
}
56
57
public boolean contains(Charset cs) {
58
return ((cs.name().equals("US-ASCII"))
59
|| (cs instanceof SJIS)
60
|| (cs instanceof EUC_JP)
61
|| (cs instanceof ISO2022_JP));
62
}
63
64
public boolean canEncode() {
65
return false;
66
}
67
68
public CharsetDecoder newDecoder() {
69
return new Decoder(this);
70
}
71
72
public String historicalName() {
73
return "JISAutoDetect";
74
}
75
76
public CharsetEncoder newEncoder() {
77
throw new UnsupportedOperationException();
78
}
79
80
/**
81
* accessor methods used to share byte masking tables
82
* with the sun.io JISAutoDetect implementation
83
*/
84
85
public static byte[] getByteMask1() {
86
return Decoder.maskTable1;
87
}
88
89
public static byte[] getByteMask2() {
90
return Decoder.maskTable2;
91
}
92
93
public final static boolean canBeSJIS1B(int mask) {
94
return (mask & SJIS1B_MASK) != 0;
95
}
96
97
public final static boolean canBeEUCJP(int mask) {
98
return (mask & EUCJP_MASK) != 0;
99
}
100
101
public final static boolean canBeEUCKana(int mask1, int mask2) {
102
return ((mask1 & EUCJP_KANA1_MASK) != 0)
103
&& ((mask2 & EUCJP_KANA2_MASK) != 0);
104
}
105
106
// A heuristic algorithm for guessing if EUC-decoded text really
107
// might be Japanese text. Better heuristics are possible...
108
private static boolean looksLikeJapanese(CharBuffer cb) {
109
int hiragana = 0; // Fullwidth Hiragana
110
int katakana = 0; // Halfwidth Katakana
111
while (cb.hasRemaining()) {
112
char c = cb.get();
113
if (0x3040 <= c && c <= 0x309f && ++hiragana > 1) return true;
114
if (0xff65 <= c && c <= 0xff9f && ++katakana > 1) return true;
115
}
116
return false;
117
}
118
119
private static class Decoder extends CharsetDecoder {
120
121
private final static String SJISName = getSJISName();
122
private final static String EUCJPName = getEUCJPName();
123
private DelegatableDecoder detectedDecoder = null;
124
125
public Decoder(Charset cs) {
126
super(cs, 0.5f, 1.0f);
127
}
128
129
private static boolean isPlainASCII(byte b) {
130
return b >= 0 && b != 0x1b;
131
}
132
133
private static void copyLeadingASCII(ByteBuffer src, CharBuffer dst) {
134
int start = src.position();
135
int limit = start + Math.min(src.remaining(), dst.remaining());
136
int p;
137
byte b;
138
for (p = start; p < limit && isPlainASCII(b = src.get(p)); p++)
139
dst.put((char)(b & 0xff));
140
src.position(p);
141
}
142
143
private CoderResult decodeLoop(Charset cs,
144
ByteBuffer src, CharBuffer dst) {
145
detectedDecoder = (DelegatableDecoder) cs.newDecoder();
146
return detectedDecoder.decodeLoop(src, dst);
147
}
148
149
protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
150
if (detectedDecoder == null) {
151
copyLeadingASCII(src, dst);
152
153
// All ASCII?
154
if (! src.hasRemaining())
155
return CoderResult.UNDERFLOW;
156
if (! dst.hasRemaining())
157
return CoderResult.OVERFLOW;
158
159
// We need to perform double, not float, arithmetic; otherwise
160
// we lose low order bits when src is larger than 2**24.
161
int cbufsiz = (int)(src.limit() * (double)maxCharsPerByte());
162
CharBuffer sandbox = CharBuffer.allocate(cbufsiz);
163
164
// First try ISO-2022-JP, since there is no ambiguity
165
Charset cs2022 = Charset.forName("ISO-2022-JP");
166
DelegatableDecoder dd2022
167
= (DelegatableDecoder) cs2022.newDecoder();
168
ByteBuffer src2022 = src.asReadOnlyBuffer();
169
CoderResult res2022 = dd2022.decodeLoop(src2022, sandbox);
170
if (! res2022.isError())
171
return decodeLoop(cs2022, src, dst);
172
173
// We must choose between EUC and SJIS
174
Charset csEUCJ = Charset.forName(EUCJPName);
175
Charset csSJIS = Charset.forName(SJISName);
176
177
DelegatableDecoder ddEUCJ
178
= (DelegatableDecoder) csEUCJ.newDecoder();
179
ByteBuffer srcEUCJ = src.asReadOnlyBuffer();
180
sandbox.clear();
181
CoderResult resEUCJ = ddEUCJ.decodeLoop(srcEUCJ, sandbox);
182
// If EUC decoding fails, must be SJIS
183
if (resEUCJ.isError())
184
return decodeLoop(csSJIS, src, dst);
185
186
DelegatableDecoder ddSJIS
187
= (DelegatableDecoder) csSJIS.newDecoder();
188
ByteBuffer srcSJIS = src.asReadOnlyBuffer();
189
CharBuffer sandboxSJIS = CharBuffer.allocate(cbufsiz);
190
CoderResult resSJIS = ddSJIS.decodeLoop(srcSJIS, sandboxSJIS);
191
// If SJIS decoding fails, must be EUC
192
if (resSJIS.isError())
193
return decodeLoop(csEUCJ, src, dst);
194
195
// From here on, we have some ambiguity, and must guess.
196
197
// We prefer input that does not appear to end mid-character.
198
if (srcEUCJ.position() > srcSJIS.position())
199
return decodeLoop(csEUCJ, src, dst);
200
201
if (srcEUCJ.position() < srcSJIS.position())
202
return decodeLoop(csSJIS, src, dst);
203
204
// end-of-input is after the first byte of the first char?
205
if (src.position() == srcEUCJ.position())
206
return CoderResult.UNDERFLOW;
207
208
// Use heuristic knowledge of typical Japanese text
209
sandbox.flip();
210
Charset guess = looksLikeJapanese(sandbox) ? csEUCJ : csSJIS;
211
return decodeLoop(guess, src, dst);
212
}
213
214
return detectedDecoder.decodeLoop(src, dst);
215
}
216
217
protected void implReset() {
218
detectedDecoder = null;
219
}
220
221
protected CoderResult implFlush(CharBuffer out) {
222
if (detectedDecoder != null)
223
return detectedDecoder.implFlush(out);
224
else
225
return super.implFlush(out);
226
}
227
228
public boolean isAutoDetecting() {
229
return true;
230
}
231
232
public boolean isCharsetDetected() {
233
return detectedDecoder != null;
234
}
235
236
public Charset detectedCharset() {
237
if (detectedDecoder == null)
238
throw new IllegalStateException("charset not yet detected");
239
return ((CharsetDecoder) detectedDecoder).charset();
240
}
241
242
/**
243
* Returned Shift_JIS Charset name is OS dependent
244
*/
245
private static String getSJISName() {
246
String osName = AccessController.doPrivileged(
247
new GetPropertyAction("os.name"));
248
if (osName.equals("Solaris") || osName.equals("SunOS"))
249
return("PCK");
250
else if (osName.startsWith("Windows"))
251
return("windows-31J");
252
else
253
return("Shift_JIS");
254
}
255
256
/**
257
* Returned EUC-JP Charset name is OS dependent
258
*/
259
260
private static String getEUCJPName() {
261
String osName = AccessController.doPrivileged(
262
new GetPropertyAction("os.name"));
263
if (osName.equals("Solaris") || osName.equals("SunOS"))
264
return("x-eucjp-open");
265
else
266
return("EUC_JP");
267
}
268
269
// Mask tables - each entry indicates possibility of first or
270
// second byte being SJIS or EUC_JP
271
private static final byte maskTable1[] = {
272
0, 0, 0, 0, // 0x00 - 0x03
273
0, 0, 0, 0, // 0x04 - 0x07
274
0, 0, 0, 0, // 0x08 - 0x0b
275
0, 0, 0, 0, // 0x0c - 0x0f
276
0, 0, 0, 0, // 0x10 - 0x13
277
0, 0, 0, 0, // 0x14 - 0x17
278
0, 0, 0, 0, // 0x18 - 0x1b
279
0, 0, 0, 0, // 0x1c - 0x1f
280
0, 0, 0, 0, // 0x20 - 0x23
281
0, 0, 0, 0, // 0x24 - 0x27
282
0, 0, 0, 0, // 0x28 - 0x2b
283
0, 0, 0, 0, // 0x2c - 0x2f
284
0, 0, 0, 0, // 0x30 - 0x33
285
0, 0, 0, 0, // 0x34 - 0x37
286
0, 0, 0, 0, // 0x38 - 0x3b
287
0, 0, 0, 0, // 0x3c - 0x3f
288
0, 0, 0, 0, // 0x40 - 0x43
289
0, 0, 0, 0, // 0x44 - 0x47
290
0, 0, 0, 0, // 0x48 - 0x4b
291
0, 0, 0, 0, // 0x4c - 0x4f
292
0, 0, 0, 0, // 0x50 - 0x53
293
0, 0, 0, 0, // 0x54 - 0x57
294
0, 0, 0, 0, // 0x58 - 0x5b
295
0, 0, 0, 0, // 0x5c - 0x5f
296
0, 0, 0, 0, // 0x60 - 0x63
297
0, 0, 0, 0, // 0x64 - 0x67
298
0, 0, 0, 0, // 0x68 - 0x6b
299
0, 0, 0, 0, // 0x6c - 0x6f
300
0, 0, 0, 0, // 0x70 - 0x73
301
0, 0, 0, 0, // 0x74 - 0x77
302
0, 0, 0, 0, // 0x78 - 0x7b
303
0, 0, 0, 0, // 0x7c - 0x7f
304
0, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x80 - 0x83
305
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x84 - 0x87
306
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x88 - 0x8b
307
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, // 0x8c - 0x8f
308
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x90 - 0x93
309
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x94 - 0x97
310
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x98 - 0x9b
311
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x9c - 0x9f
312
0, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, // 0xa0 - 0xa3
313
SJIS1B_MASK|EUCJP_MASK|EUCJP_KANA1_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, // 0xa4 - 0xa7
314
SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, // 0xa8 - 0xab
315
SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, // 0xac - 0xaf
316
SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, // 0xb0 - 0xb3
317
SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, // 0xb4 - 0xb7
318
SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, // 0xb8 - 0xbb
319
SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, // 0xbc - 0xbf
320
SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, // 0xc0 - 0xc3
321
SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, // 0xc4 - 0xc7
322
SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, // 0xc8 - 0xcb
323
SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, // 0xcc - 0xcf
324
SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, // 0xd0 - 0xd3
325
SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, // 0xd4 - 0xd7
326
SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, // 0xd8 - 0xdb
327
SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, // 0xdc - 0xdf
328
SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, // 0xe0 - 0xe3
329
SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, // 0xe4 - 0xe7
330
SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, // 0xe8 - 0xeb
331
SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, // 0xec - 0xef
332
SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, // 0xf0 - 0xf3
333
SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, // 0xf4 - 0xf7
334
SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, // 0xf8 - 0xfb
335
SJIS2B_MASK|EUCJP_MASK, EUCJP_MASK, EUCJP_MASK, 0 // 0xfc - 0xff
336
};
337
338
private static final byte maskTable2[] = {
339
0, 0, 0, 0, // 0x00 - 0x03
340
0, 0, 0, 0, // 0x04 - 0x07
341
0, 0, 0, 0, // 0x08 - 0x0b
342
0, 0, 0, 0, // 0x0c - 0x0f
343
0, 0, 0, 0, // 0x10 - 0x13
344
0, 0, 0, 0, // 0x14 - 0x17
345
0, 0, 0, 0, // 0x18 - 0x1b
346
0, 0, 0, 0, // 0x1c - 0x1f
347
0, 0, 0, 0, // 0x20 - 0x23
348
0, 0, 0, 0, // 0x24 - 0x27
349
0, 0, 0, 0, // 0x28 - 0x2b
350
0, 0, 0, 0, // 0x2c - 0x2f
351
0, 0, 0, 0, // 0x30 - 0x33
352
0, 0, 0, 0, // 0x34 - 0x37
353
0, 0, 0, 0, // 0x38 - 0x3b
354
0, 0, 0, 0, // 0x3c - 0x3f
355
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x40 - 0x43
356
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x44 - 0x47
357
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x48 - 0x4b
358
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x4c - 0x4f
359
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x50 - 0x53
360
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x54 - 0x57
361
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x58 - 0x5b
362
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x5c - 0x5f
363
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x60 - 0x63
364
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x64 - 0x67
365
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x68 - 0x6b
366
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x6c - 0x6f
367
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x70 - 0x73
368
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x74 - 0x77
369
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x78 - 0x7b
370
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, 0, // 0x7c - 0x7f
371
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x80 - 0x83
372
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x84 - 0x87
373
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x88 - 0x8b
374
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x8c - 0x8f
375
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x90 - 0x93
376
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x94 - 0x97
377
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x98 - 0x9b
378
SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x9c - 0x9f
379
SJIS2B_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xa0 - 0xa3
380
SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xa4 - 0xa7
381
SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xa8 - 0xab
382
SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xac - 0xaf
383
SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xb0 - 0xb3
384
SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xb4 - 0xb7
385
SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xb8 - 0xbb
386
SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xbc - 0xbf
387
SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xc0 - 0xc3
388
SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xc4 - 0xc7
389
SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xc8 - 0xcb
390
SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xcc - 0xcf
391
SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xd0 - 0xd3
392
SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xd4 - 0xd7
393
SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xd8 - 0xdb
394
SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xdc - 0xdf
395
SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xe0 - 0xe3
396
SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xe4 - 0xe7
397
SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xe8 - 0xeb
398
SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xec - 0xef
399
SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xf0 - 0xf3
400
SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, // 0xf4 - 0xf7
401
SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, // 0xf8 - 0xfb
402
SJIS2B_MASK|EUCJP_MASK, EUCJP_MASK, EUCJP_MASK, 0 // 0xfc - 0xff
403
};
404
}
405
}
406
407