1/*
2 * Copyright (c) 2002, 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
26package sun.nio.cs.ext;
27
28import java.nio.charset.Charset;
29import java.nio.charset.CharsetDecoder;
30import java.nio.charset.CharsetEncoder;
31import sun.nio.cs.DoubleByte;
32import sun.nio.cs.HistoricallyNamedCharset;
33import sun.nio.cs.*;
34
35public class Big5_HKSCS_2001 extends Charset
36{
37    public Big5_HKSCS_2001() {
38        super("x-Big5-HKSCS-2001", ExtendedCharsets.aliasesFor("x-Big5-HKSCS-2001"));
39    }
40
41    public boolean contains(Charset cs) {
42        return ((cs.name().equals("US-ASCII"))
43                || (cs instanceof Big5)
44                || (cs instanceof Big5_HKSCS_2001));
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    private static class Decoder extends HKSCS.Decoder {
56        private static DoubleByte.Decoder big5 =
57            (DoubleByte.Decoder)new Big5().newDecoder();
58
59        private static char[][] b2cBmp = new char[0x100][];
60        private static char[][] b2cSupp = new char[0x100][];
61        static {
62            initb2c(b2cBmp, HKSCS2001Mapping.b2cBmpStr);
63            initb2c(b2cSupp, HKSCS2001Mapping.b2cSuppStr);
64        }
65
66        private Decoder(Charset cs) {
67            super(cs, big5, b2cBmp, b2cSupp);
68        }
69    }
70
71    private static class Encoder extends HKSCS.Encoder {
72        private static DoubleByte.Encoder big5 =
73            (DoubleByte.Encoder)new Big5().newEncoder();
74
75        static char[][] c2bBmp = new char[0x100][];
76        static char[][] c2bSupp = new char[0x100][];
77        static {
78            initc2b(c2bBmp, HKSCS2001Mapping.b2cBmpStr,
79                    HKSCS2001Mapping.pua);
80            initc2b(c2bSupp, HKSCS2001Mapping.b2cSuppStr, null);
81        }
82
83        private Encoder(Charset cs) {
84            super(cs, big5, c2bBmp, c2bSupp);
85        }
86    }
87}
88