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