blob: 4c2f9f67c2ed47e974275507bc73390572e6c32f [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001
2/*
3 * Copyright 2003-2004 Sun Microsystems, Inc. All Rights Reserved.
4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 *
6 * This code is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 only, as
8 * published by the Free Software Foundation. Sun designates this
9 * particular file as subject to the "Classpath" exception as provided
10 * by Sun in the LICENSE file that accompanied this code.
11 *
12 * This code is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 * version 2 for more details (a copy is included in the LICENSE file that
16 * accompanied this code).
17 *
18 * You should have received a copy of the GNU General Public License version
19 * 2 along with this work; if not, write to the Free Software Foundation,
20 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
21 *
22 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
23 * CA 95054 USA or visit www.sun.com if you need additional information or
24 * have any questions.
25 */
26
27package sun.nio.cs.ext;
28
29
30import java.nio.charset.Charset;
31import java.nio.charset.CharsetDecoder;
32import java.nio.charset.CharsetEncoder;
33import sun.nio.cs.StandardCharsets;
34import sun.nio.cs.SingleByteDecoder;
35import sun.nio.cs.SingleByteEncoder;
36import sun.nio.cs.HistoricallyNamedCharset;
37
38public class IBM838
39 extends Charset
40 implements HistoricallyNamedCharset
41{
42
43 public IBM838() {
44 super("IBM-Thai", ExtendedCharsets.aliasesFor("IBM-Thai"));
45 }
46
47 public String historicalName() {
48 return "Cp838";
49 }
50
51 public boolean contains(Charset cs) {
52 return (cs instanceof IBM838);
53 }
54
55 public CharsetDecoder newDecoder() {
56 return new Decoder(this);
57 }
58
59 public CharsetEncoder newEncoder() {
60 return new Encoder(this);
61 }
62
63
64 /**
65 * These accessors are temporarily supplied while sun.io
66 * converters co-exist with the sun.nio.cs.{ext} charset coders
67 * These facilitate sharing of conversion tables between the
68 * two co-existing implementations. When sun.io converters
69 * are made extinct these will be unncessary and should be removed
70 */
71
72 public String getDecoderSingleByteMappings() {
73 return Decoder.byteToCharTable;
74
75 }
76
77 public short[] getEncoderIndex1() {
78 return Encoder.index1;
79
80 }
81 public String getEncoderIndex2() {
82 return Encoder.index2;
83
84 }
85
86 private static class Decoder extends SingleByteDecoder {
87 public Decoder(Charset cs) {
88 super(cs, byteToCharTable);
89 }
90
91 private final static String byteToCharTable =
92
93 "\u0E4F\u0061\u0062\u0063\u0064\u0065\u0066\u0067" + // 0x80 - 0x87
94 "\u0068\u0069\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22" + // 0x88 - 0x8F
95 "\u0E5A\u006A\u006B\u006C\u006D\u006E\u006F\u0070" + // 0x90 - 0x97
96 "\u0071\u0072\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28" + // 0x98 - 0x9F
97 "\u0E5B\u007E\u0073\u0074\u0075\u0076\u0077\u0078" + // 0xA0 - 0xA7
98 "\u0079\u007A\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E" + // 0xA8 - 0xAF
99 "\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57" + // 0xB0 - 0xB7
100 "\u0E58\u0E59\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34" + // 0xB8 - 0xBF
101 "\u007B\u0041\u0042\u0043\u0044\u0045\u0046\u0047" + // 0xC0 - 0xC7
102 "\u0048\u0049\u0E49\u0E35\u0E36\u0E37\u0E38\u0E39" + // 0xC8 - 0xCF
103 "\u007D\u004A\u004B\u004C\u004D\u004E\u004F\u0050" + // 0xD0 - 0xD7
104 "\u0051\u0052\u0E3A\u0E40\u0E41\u0E42\u0E43\u0E44" + // 0xD8 - 0xDF
105 "\\\u0E4A\u0053\u0054\u0055\u0056\u0057\u0058" + // 0xE0 - 0xE7
106 "\u0059\u005A\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A" + // 0xE8 - 0xEF
107 "\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037" + // 0xF0 - 0xF7
108 "\u0038\u0039\u0E4B\u0E4C\u0E4D\u0E4B\u0E4C\u009F" + // 0xF8 - 0xFF
109 "\u0000\u0001\u0002\u0003\u009C\t\u0086\u007F" + // 0x00 - 0x07
110 "\u0097\u008D\u008E\u000B\f\r\u000E\u000F" + // 0x08 - 0x0F
111 "\u0010\u0011\u0012\u0013\u009D\n\b\u0087" + // 0x10 - 0x17
112 "\u0018\u0019\u0092\u008F\u001C\u001D\u001E\u001F" + // 0x18 - 0x1F
113 "\u0080\u0081\u0082\u0083\u0084\n\u0017\u001B" + // 0x20 - 0x27
114 "\u0088\u0089\u008A\u008B\u008C\u0005\u0006\u0007" + // 0x28 - 0x2F
115 "\u0090\u0091\u0016\u0093\u0094\u0095\u0096\u0004" + // 0x30 - 0x37
116 "\u0098\u0099\u009A\u009B\u0014\u0015\u009E\u001A" + // 0x38 - 0x3F
117 "\u0020\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06" + // 0x40 - 0x47
118 "\u0E07\u005B\u00A2\u002E\u003C\u0028\u002B\u007C" + // 0x48 - 0x4F
119 "\u0026\u0E48\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D" + // 0x50 - 0x57
120 "\u0E0E\u005D\u0021\u0024\u002A\u0029\u003B\u00AC" + // 0x58 - 0x5F
121 "\u002D\u002F\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14" + // 0x60 - 0x67
122 "\u0E15\u005E\u00A6\u002C\u0025\u005F\u003E\u003F" + // 0x68 - 0x6F
123 "\u0E3F\u0E4E\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B" + // 0x70 - 0x77
124 "\u0E1C\u0060\u003A\u0023\u0040\'\u003D\""; // 0x78 - 0x7F
125
126 }
127
128 private static class Encoder extends SingleByteEncoder {
129 public Encoder(Charset cs) {
130 super(cs, index1, index2, 0xFF00, 0x00FF, 8);
131 }
132
133 private final static String index2 =
134
135
136 "\u0000\u0001\u0002\u0003\u0037\u002D\u002E\u002F" +
137 "\u0016\u0005\u0015\u000B\f\r\u000E\u000F" +
138 "\u0010\u0011\u0012\u0013\u003C\u003D\u0032\u0026" +
139 "\u0018\u0019\u003F\'\u001C\u001D\u001E\u001F" +
140 "\u0040\u005A\u007F\u007B\u005B\u006C\u0050\u007D" +
141 "\u004D\u005D\\\u004E\u006B\u0060\u004B\u0061" +
142 "\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7" +
143 "\u00F8\u00F9\u007A\u005E\u004C\u007E\u006E\u006F" +
144 "\u007C\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7" +
145 "\u00C8\u00C9\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6" +
146 "\u00D7\u00D8\u00D9\u00E2\u00E3\u00E4\u00E5\u00E6" +
147 "\u00E7\u00E8\u00E9\u0049\u00E0\u0059\u0069\u006D" +
148 "\u0079\u0081\u0082\u0083\u0084\u0085\u0086\u0087" +
149 "\u0088\u0089\u0091\u0092\u0093\u0094\u0095\u0096" +
150 "\u0097\u0098\u0099\u00A2\u00A3\u00A4\u00A5\u00A6" +
151 "\u00A7\u00A8\u00A9\u00C0\u004F\u00D0\u00A1\u0007" +
152 "\u0020\u0021\"\u0023\u0024\u0015\u0006\u0017" +
153 "\u0028\u0029\u002A\u002B\u002C\t\n\u001B" +
154 "\u0030\u0031\u001A\u0033\u0034\u0035\u0036\b" +
155 "\u0038\u0039\u003A\u003B\u0004\u0014\u003E\u00FF" +
156 "\u0041\u0000\u004A\u0000\u0000\u0000\u006A\u0000" +
157 "\u0000\u0000\u0000\u0000\u005F\u0000\u0000\u0000" +
158 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
159 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
160 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
161 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
162 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
163 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
164 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
165 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
166 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
167 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
168 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
169 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
170 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
171 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
172 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
173 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
174 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
175 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
176 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
177 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
178 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
179 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
180 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
181 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
182 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
183 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
184 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
185 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
186 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
187 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
188 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
189 "\u0000\u0000\u0000\u0000\u0000\u0042\u0043\u0044" +
190 "\u0045\u0046\u0047\u0048\u0052\u0053\u0054\u0055" +
191 "\u0056\u0057\u0058\u0062\u0063\u0064\u0065\u0066" +
192 "\u0067\u0068\u0072\u0073\u0074\u0075\u0076\u0077" +
193 "\u0078\u008A\u008B\u008C\u008D\u008E\u008F\u009A" +
194 "\u009B\u009C\u009D\u009E\u009F\u00AA\u00AB\u00AC" +
195 "\u00AD\u00AE\u00AF\u00BA\u00BB\u00BC\u00BD\u00BE" +
196 "\u00BF\u00CB\u00CC\u00CD\u00CE\u00CF\u00DA\u0000" +
197 "\u0000\u0000\u0000\u0070\u00DB\u00DC\u00DD\u00DE" +
198 "\u00DF\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00FA" +
199 "\u00FB\u00FC\u0071\u0080\u00B0\u00B1\u00B2\u00B3" +
200 "\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u0090\u00A0" +
201 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
202 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
203 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
204 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
205 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
206 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
207 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
208 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
209 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
210 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
211 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
212 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
213 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
214 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
215 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
216 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
217 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
218 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
219 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
220 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
221 "\u0000\u0000\u0000\u0000";
222
223 private final static short index1[] = {
224 0, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 428, 173,
225 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
226 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
227 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
228 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
229 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
230 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
231 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
232 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
233 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
234 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
235 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
236 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
237 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
238 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
239 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
240
241 };
242 }
243}