1 /*
   2  * Copyright (c) 2002, 2005, 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 /*
  27  */
  28 
  29 
  30 import java.nio.charset.Charset;
  31 import java.nio.charset.CharsetDecoder;
  32 import java.nio.charset.CharsetEncoder;
  33 
  34 public class JIS_X_0201_OLD
  35     extends Charset
  36 {
  37 
  38     public JIS_X_0201_OLD() {
  39         super("JIS_X0201_OLD", null);
  40     }
  41 
  42     public boolean contains(Charset cs) {
  43         return ((cs.name().equals("US-ASCII"))
  44                 || (cs instanceof JIS_X_0201_OLD));
  45     }
  46 
  47     public CharsetDecoder newDecoder() {
  48         return new Decoder(this);
  49     }
  50 
  51     public CharsetEncoder newEncoder() {
  52         return new Encoder(this);
  53     }
  54 
  55     public static class Decoder extends SingleByteDecoder {
  56 
  57         public Decoder(Charset cs) {
  58             super(cs, byteToCharTable);
  59         }
  60 
  61         private final static String byteToCharTable =
  62 
  63         "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0x80 - 0x87
  64         "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0x88 - 0x8F
  65         "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0x90 - 0x97
  66         "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0x98 - 0x9F
  67         "\uFFFD\uFF61\uFF62\uFF63\uFF64\uFF65\uFF66\uFF67" +    // 0xA0 - 0xA7
  68         "\uFF68\uFF69\uFF6A\uFF6B\uFF6C\uFF6D\uFF6E\uFF6F" +    // 0xA8 - 0xAF
  69         "\uFF70\uFF71\uFF72\uFF73\uFF74\uFF75\uFF76\uFF77" +    // 0xB0 - 0xB7
  70         "\uFF78\uFF79\uFF7A\uFF7B\uFF7C\uFF7D\uFF7E\uFF7F" +    // 0xB8 - 0xBF
  71         "\uFF80\uFF81\uFF82\uFF83\uFF84\uFF85\uFF86\uFF87" +    // 0xC0 - 0xC7
  72         "\uFF88\uFF89\uFF8A\uFF8B\uFF8C\uFF8D\uFF8E\uFF8F" +    // 0xC8 - 0xCF
  73         "\uFF90\uFF91\uFF92\uFF93\uFF94\uFF95\uFF96\uFF97" +    // 0xD0 - 0xD7
  74         "\uFF98\uFF99\uFF9A\uFF9B\uFF9C\uFF9D\uFF9E\uFF9F" +    // 0xD8 - 0xDF
  75         "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0xE0 - 0xE7
  76         "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0xE8 - 0xEF
  77         "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0xF0 - 0xF7
  78         "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0xF8 - 0xFF
  79         "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007" +    // 0x00 - 0x07
  80         "\b\t\n\u000B\f\r\u000E\u000F" +        // 0x08 - 0x0F
  81         "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017" +    // 0x10 - 0x17
  82         "\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" +    // 0x18 - 0x1F
  83         "\u0020\u0021\"\u0023\u0024\u0025\u0026\'" +    // 0x20 - 0x27
  84         "\u0028\u0029\u002A\u002B\u002C\u002D\u002E\u002F" +    // 0x28 - 0x2F
  85         "\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037" +    // 0x30 - 0x37
  86         "\u0038\u0039\u003A\u003B\u003C\u003D\u003E\u003F" +    // 0x38 - 0x3F
  87         "\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047" +    // 0x40 - 0x47
  88         "\u0048\u0049\u004A\u004B\u004C\u004D\u004E\u004F" +    // 0x48 - 0x4F
  89         "\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057" +    // 0x50 - 0x57
  90         "\u0058\u0059\u005A\u005B\\\u005D\u005E\u005F" +        // 0x58 - 0x5F
  91         "\u0060\u0061\u0062\u0063\u0064\u0065\u0066\u0067" +    // 0x60 - 0x67
  92         "\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F" +    // 0x68 - 0x6F
  93         "\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077" +    // 0x70 - 0x77
  94         "\u0078\u0079\u007A\u007B\u007C\u007D\u007E\u007F";     // 0x78 - 0x7F
  95     }
  96 
  97     public static class Encoder extends SingleByteEncoder {
  98 
  99         public Encoder(Charset cs) {
 100             super(cs, index1, index2, 0xFF00, 0x00FF, 8);
 101         }
 102 
 103         private final static String index2 =
 104 
 105             "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007" +
 106             "\b\t\n\u000B\f\r\u000E\u000F" +
 107             "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017" +
 108             "\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" +
 109             "\u0020\u0021\"\u0023\u0024\u0025\u0026\'" +
 110             "\u0028\u0029\u002A\u002B\u002C\u002D\u002E\u002F" +
 111             "\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037" +
 112             "\u0038\u0039\u003A\u003B\u003C\u003D\u003E\u003F" +
 113             "\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047" +
 114             "\u0048\u0049\u004A\u004B\u004C\u004D\u004E\u004F" +
 115             "\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057" +
 116             "\u0058\u0059\u005A\u005B\\\u005D\u005E\u005F" +
 117             "\u0060\u0061\u0062\u0063\u0064\u0065\u0066\u0067" +
 118             "\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F" +
 119             "\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077" +
 120             "\u0078\u0079\u007A\u007B\u007C\u007D\u007E\u007F" +
 121             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 122             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 123             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 124             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 125             "\u0000\u0000\u0000\u0000\u0000\\\u0000\u0000" +
 126             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 127             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 128             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 129             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 130             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 131             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 132             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 133             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 134             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 135             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 136             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 137             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 138             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 139             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 140             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 141             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 142             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 143             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 144             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 145             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 146             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 147             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 148             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 149             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 150             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 151             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 152             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 153             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 154             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 155             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 156             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 157             "\u0000\u0000\u0000\u0000\u0000\u0000\u007E\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             "\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8" +
 183             "\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0" +
 184             "\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8" +
 185             "\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0" +
 186             "\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8" +
 187             "\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0" +
 188             "\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8" +
 189             "\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u0000" +
 190             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 191             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 192             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 193             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 194             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 195             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 196             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 197             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 198             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 199             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 200             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
 201             "\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
 202 
 203         private final static short index1[] = {
 204             0, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
 205             166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
 206             360, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
 207             166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
 208             166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
 209             166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
 210             166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
 211             166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
 212             166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
 213             166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
 214             166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
 215             166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
 216             166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
 217             166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
 218             166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
 219             166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 519,
 220         };
 221     }
 222 
 223 }