1/*
2 * Copyright (c) 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.HistoricallyNamedCharset;
32import sun.nio.cs.*;
33import static sun.nio.cs.CharsetMapping.*;
34
35public class MS950_HKSCS extends Charset implements HistoricallyNamedCharset
36{
37    public MS950_HKSCS() {
38        super("x-MS950-HKSCS", ExtendedCharsets.aliasesFor("x-MS950-HKSCS"));
39    }
40
41    public String historicalName() {
42        return "MS950_HKSCS";
43    }
44
45    public boolean contains(Charset cs) {
46        return ((cs.name().equals("US-ASCII"))
47                || (cs instanceof MS950)
48                || (cs instanceof MS950_HKSCS));
49    }
50
51    public CharsetDecoder newDecoder() {
52        return new Decoder(this);
53    }
54
55    public CharsetEncoder newEncoder() {
56        return new Encoder(this);
57    }
58
59    static class Decoder extends HKSCS.Decoder {
60        private static DoubleByte.Decoder ms950 =
61            (DoubleByte.Decoder)new MS950().newDecoder();
62
63        private static char[][] b2cBmp = new char[0x100][];
64        private static char[][] b2cSupp = new char[0x100][];
65        static {
66            initb2c(b2cBmp, HKSCSMapping.b2cBmpStr);
67            initb2c(b2cSupp, HKSCSMapping.b2cSuppStr);
68        }
69
70        private Decoder(Charset cs) {
71            super(cs, ms950, b2cBmp, b2cSupp);
72        }
73    }
74
75    private static class Encoder extends HKSCS.Encoder {
76        private static DoubleByte.Encoder ms950 =
77            (DoubleByte.Encoder)new MS950().newEncoder();
78
79        static char[][] c2bBmp = new char[0x100][];
80        static char[][] c2bSupp = new char[0x100][];
81        static {
82            initc2b(c2bBmp, HKSCSMapping.b2cBmpStr, HKSCSMapping.pua);
83            initc2b(c2bSupp, HKSCSMapping.b2cSuppStr, null);
84        }
85
86        private Encoder(Charset cs) {
87            super(cs, ms950, c2bBmp, c2bSupp);
88        }
89    }
90}
91