/*
 * Copyright 2002-2007 Sun Microsystems, Inc.  All Rights Reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Sun designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Sun in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
 * CA 95054 USA or visit www.sun.com if you need additional information or
 * have any questions.
 */

/*
 */

package sun.nio.cs.ext;

import java.lang.ref.SoftReference;
import java.nio.charset.Charset;
import java.nio.charset.spi.CharsetProvider;
import sun.nio.cs.AbstractCharsetProvider;
import java.security.AccessController;
import sun.security.action.GetPropertyAction;


/**
 * Provider for extended charsets.
 */

public class ExtendedCharsets
    extends AbstractCharsetProvider
{

    static volatile ExtendedCharsets instance = null;

    public ExtendedCharsets() {

        super("sun.nio.cs.ext");  // identify provider pkg name.

        // Traditional Chinese

        charset("Big5", "Big5",
                new String[] {
                    // IANA aliases
                    "csBig5"
                });

        charset("x-MS950-HKSCS", "MS950_HKSCS",
                new String[] {
                    // IANA aliases
                    "MS950_HKSCS"  // JDK historical;
                });

        charset("x-windows-950", "MS950",
                new String[] {
                    "ms950",    // JDK historical
                    "windows-950"
                });

        charset("x-windows-874", "MS874",
                new String[] {
                    "ms874",  // JDK historical
                    "ms-874",
                    "windows-874" });

        charset("x-EUC-TW", "EUC_TW",
                new String[] {
                    "euc_tw", // JDK historical
                    "euctw",
                    "cns11643",
                    "EUC-TW"
                });

        charset("Big5-HKSCS", "Big5_HKSCS",
                new String[] {
                    "Big5_HKSCS", // JDK historical
                    "big5hk",
                    "big5-hkscs",
                    "big5-hkscs:unicode3.0",
                    "big5hkscs" // Linux alias
                });

        charset("x-Big5-Solaris", "Big5_Solaris",
                new String[] {
                    "Big5_Solaris", // JDK historical
                });

        // Simplified Chinese
        charset("GBK", "GBK",
                new String[] {
                    "windows-936",
                    "CP936"
                });

        charset("GB18030", "GB18030",
                new String[] {
                    "gb18030-2000"
                });

        charset("GB2312", "EUC_CN",
                new String[] {
                    // IANA aliases
                    "gb2312",
                    "gb2312-80",
                    "gb2312-1980",
                    "euc-cn",
                    "euccn",
                    "x-EUC-CN", // 1.4 compatability
                    "EUC_CN" //JDK historical
                });

        charset("x-mswin-936", "MS936",
                new String[] {
                    "ms936", // historical
                    // IANA aliases
                    "ms_936"
                });

        // The definition of this charset may be overridden by the init method,
        // below, if the sun.nio.cs.map property is defined.
        //
        charset("Shift_JIS", "SJIS",
                new String[] {
                    // IANA aliases
                    "sjis", // historical
                    "shift_jis",
                    "shift-jis",
                    "ms_kanji",
                    "x-sjis",
                    "csShiftJIS"
                });

        // The definition of this charset may be overridden by the init method,
        // below, if the sun.nio.cs.map property is defined.
        //
        charset("windows-31j", "MS932",
                new String[] {
                    "MS932", // JDK historical
                    "windows-932",
                    "csWindows31J"
                });

        charset("JIS_X0201", "JIS_X_0201",
                new String[] {
                    "JIS0201", // JDK historical
                    // IANA aliases
                    "JIS_X0201",
                    "X0201",
                    "csHalfWidthKatakana"
                });

        charset("x-JIS0208", "JIS_X_0208",
                new String[] {
                    "JIS0208", // JDK historical
                    // IANA aliases
                    "JIS_C6226-1983",
                    "iso-ir-87",
                    "x0208",
                    "JIS_X0208-1983",
                    "csISO87JISX0208"
                });

        charset("JIS_X0212-1990", "JIS_X_0212",
                new String[] {
                    "JIS0212", // JDK historical
                    // IANA aliases
                    "jis_x0212-1990",
                    "x0212",
                    "iso-ir-159",
                    "csISO159JISX02121990"
                });

        charset("EUC-JP", "EUC_JP",
                new String[] {
                    "euc_jp", // JDK historical
                    // IANA aliases
                    "eucjis",
                    "eucjp",
                    "Extended_UNIX_Code_Packed_Format_for_Japanese",
                    "csEUCPkdFmtjapanese",
                    "x-euc-jp",
                    "x-eucjp"
                });

        charset("x-euc-jp-linux", "EUC_JP_LINUX",
                new String[] {
                    "euc_jp_linux", // JDK historical
                    "euc-jp-linux"
                });

        charset("x-eucjp-open", "EUC_JP_Open",
                new String[] {
                    "EUC_JP_Solaris",   // JDK historical
                    "eucJP-open"
                });

        charset("x-PCK", "PCK",
                new String[] {
                    // IANA aliases
                    "pck" // historical
                });

        charset("ISO-2022-JP", "ISO2022_JP",
            new String[] {
            // IANA aliases
            "iso2022jp", // historical
            "jis",
            "csISO2022JP",
            "jis_encoding",
            "csjisencoding"
        });

        charset("ISO-2022-JP-2", "ISO2022_JP_2",
            new String[] {
            // IANA aliases
            "csISO2022JP2",
            "iso2022jp2"
        });

        charset("x-windows-50221", "MS50221",
            new String[] {
            "ms50221", // historical
            "cp50221",
        });

        charset("x-windows-50220", "MS50220",
            new String[] {
            "ms50220", // historical
            "cp50220",
        });

        charset("x-windows-iso2022jp", "MSISO2022JP",
            new String[] {
            "windows-iso2022jp", // historical
        });

        charset("x-JISAutoDetect", "JISAutoDetect",
                new String[] {
                    "JISAutoDetect" // historical
                });

        // Korean
        charset("EUC-KR", "EUC_KR",
                new String[] {
                    "euc_kr", // JDK historical
                    // IANA aliases
                    "ksc5601",
                    "euckr",
                    "ks_c_5601-1987",
                    "ksc5601-1987",
                    "ksc5601_1987",
                    "ksc_5601",
                    "csEUCKR",
                    "5601"
                });

        charset("x-windows-949", "MS949",
                new String[] {
                    "ms949",    // JDK historical
                    "windows949",
                    "windows-949",
                    // IANA aliases
                    "ms_949"
                });

        charset("x-Johab", "Johab",
                new String[] {
                        "ksc5601-1992",
                        "ksc5601_1992",
                        "ms1361",
                        "johab" // JDK historical
                });

        charset("ISO-2022-KR", "ISO2022_KR",
                new String[] {
                        "ISO2022KR", // JDK historical
                        "csISO2022KR"
                });

        charset("ISO-2022-CN", "ISO2022_CN",
                new String[] {
                        "ISO2022CN", // JDK historical
                        "csISO2022CN"
                });

        charset("x-ISO-2022-CN-CNS", "ISO2022_CN_CNS",
                new String[] {
                        "ISO2022CN_CNS", // JDK historical
                        "ISO-2022-CN-CNS"
                });

        charset("x-ISO-2022-CN-GB", "ISO2022_CN_GB",
                new String[] {
                        "ISO2022CN_GB", // JDK historical
                        "ISO-2022-CN-GB"
                });

        charset("x-ISCII91", "ISCII91",
                new String[] {
                        "iscii",
                        "ST_SEV_358-88",
                        "iso-ir-153",
                        "csISO153GOST1976874",
                        "ISCII91" // JDK historical
                });

        charset("ISO-8859-3", "ISO_8859_3",
                new String[] {
                    "iso8859_3", // JDK historical
                    "8859_3",
                    "ISO_8859-3:1988",
                    "iso-ir-109",
                    "ISO_8859-3",
                    "ISO8859-3",
                    "latin3",
                    "l3",
                    "ibm913",
                    "ibm-913",
                    "cp913",
                    "913",
                    "csISOLatin3"
                });

        charset("ISO-8859-6", "ISO_8859_6",
                new String[] {
                    "iso8859_6", // JDK historical
                    "8859_6",
                    "iso-ir-127",
                    "ISO_8859-6",
                    "ISO_8859-6:1987",
                    "ISO8859-6",
                    "ECMA-114",
                    "ASMO-708",
                    "arabic",
                    "ibm1089",
                    "ibm-1089",
                    "cp1089",
                    "1089",
                    "csISOLatinArabic"
                });

        charset("ISO-8859-8", "ISO_8859_8",
                new String[] {
                    "iso8859_8", // JDK historical
                    "8859_8",
                    "iso-ir-138",
                    "ISO_8859-8",
                    "ISO_8859-8:1988",
                    "ISO8859-8",
                    "cp916",
                    "916",
                    "ibm916",
                    "ibm-916",
                    "hebrew",
                    "csISOLatinHebrew"
                });

        charset("x-ISO-8859-11", "ISO_8859_11",
                new String[] {
                    "iso-8859-11",
                    "iso8859_11"
                });

        charset("TIS-620", "TIS_620",
                new String[] {
                    "tis620", // JDK historical
                    "tis620.2533"
                });

        // Various Microsoft Windows international codepages

        charset("windows-1255", "MS1255",
                new String[] {
                    "cp1255" // JDK historical
                });

        charset("windows-1256", "MS1256",
                new String[] {
                    "cp1256" // JDK historical
                });

        charset("windows-1258", "MS1258",
                new String[] {
                    "cp1258" // JDK historical
                });

        // IBM & PC/MSDOS encodings

        charset("x-IBM942", "IBM942",
                new String[] {
                    "cp942", // JDK historical
                    "ibm942",
                    "ibm-942",
                    "942"
                });

        charset("x-IBM942C", "IBM942C",
                new String[] {
                    "cp942C", // JDK historical
                    "ibm942C",
                    "ibm-942C",
                    "942C"
                });

        charset("x-IBM943", "IBM943",
                new String[] {
                    "cp943", // JDK historical
                    "ibm943",
                    "ibm-943",
                    "943"
                });

        charset("x-IBM943C", "IBM943C",
                new String[] {
                    "cp943C", // JDK historical
                    "ibm943C",
                    "ibm-943C",
                    "943C"
                });

        charset("x-IBM948", "IBM948",
                new String[] {
                    "cp948", // JDK historical
                    "ibm948",
                    "ibm-948",
                    "948"
                });

        charset("x-IBM950", "IBM950",
                new String[] {
                    "cp950", // JDK historical
                    "ibm950",
                    "ibm-950",
                    "950"
                });

        charset("x-IBM930", "IBM930",
                new String[] {
                    "cp930", // JDK historical
                    "ibm930",
                    "ibm-930",
                    "930"
                });

        charset("x-IBM935", "IBM935",
                new String[] {
                    "cp935", // JDK historical
                    "ibm935",
                    "ibm-935",
                    "935"
                });

        charset("x-IBM937", "IBM937",
                new String[] {
                    "cp937", // JDK historical
                    "ibm937",
                    "ibm-937",
                    "937"
                });

        charset("x-IBM856", "IBM856",
                new String[] {
                    "cp856", // JDK historical
                    "ibm-856",
                    "ibm856",
                    "856"
                });

        charset("IBM860", "IBM860",
                new String[] {
                    "cp860", // JDK historical
                    "ibm860",
                    "ibm-860",
                    "860",
                    "csIBM860"
                });
        charset("IBM861", "IBM861",
                new String[] {
                    "cp861", // JDK historical
                    "ibm861",
                    "ibm-861",
                    "861",
                    "csIBM861",
                    "cp-is"
                });

        charset("IBM863", "IBM863",
                new String[] {
                    "cp863", // JDK historical
                    "ibm863",
                    "ibm-863",
                    "863",
                    "csIBM863"
                });

        charset("IBM864", "IBM864",
                new String[] {
                    "cp864", // JDK historical
                    "ibm864",
                    "ibm-864",
                    "864",
                    "csIBM864"
                });

        charset("IBM865", "IBM865",
                new String[] {
                    "cp865", // JDK historical
                    "ibm865",
                    "ibm-865",
                    "865",
                    "csIBM865"
                });

        charset("IBM868", "IBM868",
                new String[] {
                    "cp868", // JDK historical
                    "ibm868",
                    "ibm-868",
                    "868",
                    "cp-ar",
                    "csIBM868"
                });

        charset("IBM869", "IBM869",
                new String[] {
                    "cp869", // JDK historical
                    "ibm869",
                    "ibm-869",
                    "869",
                    "cp-gr",
                    "csIBM869"
                });

        charset("x-IBM921", "IBM921",
                new String[] {
                    "cp921", // JDK historical
                    "ibm921",
                    "ibm-921",
                    "921"
                });

        charset("x-IBM1006", "IBM1006",
                new String[] {
                    "cp1006", // JDK historical
                    "ibm1006",
                    "ibm-1006",
                    "1006"
                });

        charset("x-IBM1046", "IBM1046",
                new String[] {
                    "cp1046", // JDK historical
                    "ibm1046",
                    "ibm-1046",
                    "1046"
                });

        charset("IBM1047", "IBM1047",
                new String[] {
                    "cp1047", // JDK historical
                    "ibm-1047",
                    "1047"
                });

        charset("x-IBM1098", "IBM1098",
                new String[] {
                    "cp1098", // JDK historical
                    "ibm1098",
                    "ibm-1098",
                    "1098",
                });

        charset("IBM037", "IBM037",
                new String[] {
                    "cp037", // JDK historical
                    "ibm037",
                    "ebcdic-cp-us",
                    "ebcdic-cp-ca",
                    "ebcdic-cp-wt",
                    "ebcdic-cp-nl",
                    "csIBM037",
                    "cs-ebcdic-cp-us",
                    "cs-ebcdic-cp-ca",
                    "cs-ebcdic-cp-wt",
                    "cs-ebcdic-cp-nl",
                    "ibm-037",
                    "ibm-37",
                    "cpibm37",
                    "037"
                });

        charset("x-IBM1025", "IBM1025",
                new String[] {
                    "cp1025", // JDK historical
                    "ibm1025",
                    "ibm-1025",
                    "1025"
                });

        charset("IBM1026", "IBM1026",
                new String[] {
                    "cp1026", // JDK historical
                    "ibm1026",
                    "ibm-1026",
                    "1026"
                });

        charset("x-IBM1112", "IBM1112",
                new String[] {
                    "cp1112", // JDK historical
                    "ibm1112",
                    "ibm-1112",
                    "1112"
                });

        charset("x-IBM1122", "IBM1122",
                new String[] {
                    "cp1122", // JDK historical
                    "ibm1122",
                    "ibm-1122",
                    "1122"
                });

        charset("x-IBM1123", "IBM1123",
                new String[] {
                    "cp1123", // JDK historical
                    "ibm1123",
                    "ibm-1123",
                    "1123"
                });

        charset("x-IBM1124", "IBM1124",
                new String[] {
                    "cp1124", // JDK historical
                    "ibm1124",
                    "ibm-1124",
                    "1124"
                });

        charset("IBM273", "IBM273",
                new String[] {
                    "cp273", // JDK historical
                    "ibm273",
                    "ibm-273",
                    "273"
                });

        charset("IBM277", "IBM277",
                new String[] {
                    "cp277", // JDK historical
                    "ibm277",
                    "ibm-277",
                    "277"
                });

        charset("IBM278", "IBM278",
                new String[] {
                    "cp278", // JDK historical
                    "ibm278",
                    "ibm-278",
                    "278",
                    "ebcdic-sv",
                    "ebcdic-cp-se",
                    "csIBM278"
                });

        charset("IBM280", "IBM280",
                new String[] {
                    "cp280", // JDK historical
                    "ibm280",
                    "ibm-280",
                    "280"
                });

        charset("IBM284", "IBM284",
                new String[] {
                    "cp284", // JDK historical
                    "ibm284",
                    "ibm-284",
                    "284",
                    "csIBM284",
                    "cpibm284"
                });

        charset("IBM285", "IBM285",
                new String[] {
                    "cp285", // JDK historical
                    "ibm285",
                    "ibm-285",
                    "285",
                    "ebcdic-cp-gb",
                    "ebcdic-gb",
                    "csIBM285",
                    "cpibm285"
                });

        charset("IBM297", "IBM297",
                new String[] {
                    "cp297", // JDK historical
                    "ibm297",
                    "ibm-297",
                    "297",
                    "ebcdic-cp-fr",
                    "cpibm297",
                    "csIBM297",
                });

        charset("IBM420", "IBM420",
                new String[] {
                    "cp420", // JDK historical
                    "ibm420",
                    "ibm-420",
                    "ebcdic-cp-ar1",
                    "420",
                    "csIBM420"
                });

        charset("IBM424", "IBM424",
                new String[] {
                    "cp424", // JDK historical
                    "ibm424",
                    "ibm-424",
                    "424",
                    "ebcdic-cp-he",
                    "csIBM424"
                });

        charset("IBM500", "IBM500",
                new String[] {
                    "cp500", // JDK historical
                    "ibm500",
                    "ibm-500",
                    "500",
                    "ebcdic-cp-ch",
                    "ebcdic-cp-bh",
                    "csIBM500"
                });

        //EBCDIC DBCS-only Korean
        charset("x-IBM834", "IBM834",
                new String[] {
                    "cp834",
                    "ibm834",
                    "ibm-834"
        });


        charset("IBM-Thai", "IBM838",
                new String[] {
                    "cp838", // JDK historical
                    "ibm838",
                    "ibm-838",
                    "838"
                });

        charset("IBM870", "IBM870",
                new String[] {
                    "cp870", // JDK historical
                    "ibm870",
                    "ibm-870",
                    "870",
                    "ebcdic-cp-roece",
                    "ebcdic-cp-yu",
                    "csIBM870"
                });

        charset("IBM871", "IBM871",
                new String[] {
                    "cp871", // JDK historical
                    "ibm871",
                    "ibm-871",
                    "871",
                    "ebcdic-cp-is",
                    "csIBM871"
                });

        charset("x-IBM875", "IBM875",
                new String[] {
                    "cp875", // JDK historical
                    "ibm875",
                    "ibm-875",
                    "875"
                });

        charset("IBM918", "IBM918",
                new String[] {
                    "cp918", // JDK historical
                    "ibm-918",
                    "918",
                    "ebcdic-cp-ar2"
                });

        charset("x-IBM922", "IBM922",
                new String[] {
                    "cp922", // JDK historical
                    "ibm922",
                    "ibm-922",
                    "922"
                });

        charset("x-IBM1097", "IBM1097",
                new String[] {
                    "cp1097", // JDK historical
                    "ibm1097",
                    "ibm-1097",
                    "1097"
                });

        charset("x-IBM949", "IBM949",
                new String[] {
                    "cp949", // JDK historical
                    "ibm949",
                    "ibm-949",
                    "949"
                });

        charset("x-IBM949C", "IBM949C",
                new String[] {
                    "cp949C", // JDK historical
                    "ibm949C",
                    "ibm-949C",
                    "949C"
                });

        charset("x-IBM939", "IBM939",
                new String[] {
                    "cp939", // JDK historical
                    "ibm939",
                    "ibm-939",
                    "939"
                });

        charset("x-IBM933", "IBM933",
                new String[] {
                    "cp933", // JDK historical
                    "ibm933",
                    "ibm-933",
                    "933"
                });

        charset("x-IBM1381", "IBM1381",
                new String[] {
                    "cp1381", // JDK historical
                    "ibm1381",
                    "ibm-1381",
                    "1381"
                });

        charset("x-IBM1383", "IBM1383",
                new String[] {
                    "cp1383", // JDK historical
                    "ibm1383",
                    "ibm-1383",
                    "1383"
                });

        charset("x-IBM970", "IBM970",
                new String[] {
                    "cp970", // JDK historical
                    "ibm970",
                    "ibm-970",
                    "ibm-eucKR",
                    "970"
                });

        charset("x-IBM964", "IBM964",
                new String[] {
                    "cp964", // JDK historical
                    "ibm964",
                    "ibm-964",
                    "964"
                });

        charset("x-IBM33722", "IBM33722",
                new String[] {
                    "cp33722", // JDK historical
                    "ibm33722",
                    "ibm-33722",
                    "ibm-5050", // from IBM alias list
                    "ibm-33722_vascii_vpua", // from IBM alias list
                    "33722"
                });

        charset("IBM01140", "IBM1140",
                new String[] {
                    "cp1140", // JDK historical
                    "ccsid01140",
                    "cp01140",
                    "1140",
                    // "ebcdic-us-037+euro"
                });

        charset("IBM01141", "IBM1141",
                new String[] {
                    "cp1141", // JDK historical
                    "ccsid01141",
                    "cp01141",
                    "1141",
                    // "ebcdic-de-273+euro"
                });

        charset("IBM01142", "IBM1142",
                new String[] {
                    "cp1142", // JDK historical
                    "ccsid01142",
                    "cp01142",
                    "1142",
                    // "ebcdic-no-277+euro",
                    // "ebcdic-dk-277+euro"
                });

        charset("IBM01143", "IBM1143",
                new String[] {
                    "cp1143", // JDK historical
                    "ccsid01143",
                    "cp01143",
                    "1143",
                    // "ebcdic-fi-278+euro",
                    // "ebcdic-se-278+euro"
                });

        charset("IBM01144", "IBM1144",
                new String[] {
                    "cp1144", // JDK historical
                    "ccsid01144",
                    "cp01144",
                    "1144",
                    // "ebcdic-it-280+euro"
                });

        charset("IBM01145", "IBM1145",
                new String[] {
                    "cp1145", // JDK historical
                    "ccsid01145",
                    "cp01145",
                    "1145",
                    // "ebcdic-es-284+euro"
                });

        charset("IBM01146", "IBM1146",
                new String[] {
                    "cp1146", // JDK historical
                    "ccsid01146",
                    "cp01146",
                    "1146",
                    // "ebcdic-gb-285+euro"
                });

        charset("IBM01147", "IBM1147",
                new String[] {
                    "cp1147", // JDK historical
                    "ccsid01147",
                    "cp01147",
                    "1147",
                    // "ebcdic-fr-277+euro"
                });

        charset("IBM01148", "IBM1148",
                new String[] {
                    "cp1148", // JDK historical
                    "ccsid01148",
                    "cp01148",
                    "1148",
                    // "ebcdic-international-500+euro"
                });

        charset("IBM01149", "IBM1149",
                new String[] {
                    "cp1149", // JDK historical
                    "ccsid01149",
                    "cp01149",
                    "1149",
                    // "ebcdic-s-871+euro"
                });

        // Macintosh MacOS/Apple char encodingd


        charset("x-MacRoman", "MacRoman",
                new String[] {
                    "MacRoman" // JDK historical
                });

        charset("x-MacCentralEurope", "MacCentralEurope",
                new String[] {
                    "MacCentralEurope" // JDK historical
                });

        charset("x-MacCroatian", "MacCroatian",
                new String[] {
                    "MacCroatian" // JDK historical
                });


        charset("x-MacGreek", "MacGreek",
                new String[] {
                    "MacGreek" // JDK historical
                });

        charset("x-MacCyrillic", "MacCyrillic",
                new String[] {
                    "MacCyrillic" // JDK historical
                });

        charset("x-MacUkraine", "MacUkraine",
                new String[] {
                    "MacUkraine" // JDK historical
                });

        charset("x-MacTurkish", "MacTurkish",
                new String[] {
                    "MacTurkish" // JDK historical
                });

        charset("x-MacArabic", "MacArabic",
                new String[] {
                    "MacArabic" // JDK historical
                });

        charset("x-MacHebrew", "MacHebrew",
                new String[] {
                    "MacHebrew" // JDK historical
                });

        charset("x-MacIceland", "MacIceland",
                new String[] {
                    "MacIceland" // JDK historical
                });

        charset("x-MacRomania", "MacRomania",
                new String[] {
                    "MacRomania" // JDK historical
                });

        charset("x-MacThai", "MacThai",
                new String[] {
                    "MacThai" // JDK historical
                });

        charset("x-MacSymbol", "MacSymbol",
                new String[] {
                    "MacSymbol" // JDK historical
                });

        charset("x-MacDingbat", "MacDingbat",
                new String[] {
                    "MacDingbat" // JDK historical
                });

        instance = this;

    }

    private boolean initialized = false;

    // If the sun.nio.cs.map property is defined on the command line we won't
    // see it in the system-properties table until after the charset subsystem
    // has been initialized.  We therefore delay the effect of this property
    // until after the JRE has completely booted.
    //
    // At the moment following values for this property are supported, property
    // value string is case insensitive.
    //
    // (1)"Windows-31J/Shift_JIS"
    // In 1.4.1 we added a correct implementation of the Shift_JIS charset
    // but in previous releases this charset name had been treated as an alias
    // for Windows-31J, aka MS932. Users who have existing code that depends
    // upon this alias can restore the previous behavior by defining this
    // property to have this value.
    //
    // (2)"x-windows-50221/ISO-2022-JP"
    //    "x-windows-50220/ISO-2022-JP"
    //    "x-windows-iso2022jp/ISO-2022-JP"
    // The charset ISO-2022-JP is a "standard based" implementation by default,
    // which supports ASCII, JIS_X_0201 and JIS_X_0208 mappings based encoding
    // and decoding only.
    // There are three Microsoft iso-2022-jp variants, namely x-windows-50220,
    // x-windows-50221 and x-windows-iso2022jp which behaves "slightly" differently
    // compared to the "standard based" implementation. See ISO2022_JP.java for
    // detailed description. Users who prefer the behavior of MS iso-2022-jp
    // variants should use these names explicitly instead of using "ISO-2022-JP"
    // and its aliases. However for those who need the ISO-2022-JP charset behaves
    // exactly the same as MS variants do, above properties can be defined to
    // switch.
    //
    // If we need to define other charset-alias mappings in the future then
    // this property could be further extended, the general idea being that its
    // value should be of the form
    //
    //     new-charset-1/old-charset-1,new-charset-2/old-charset-2,...
    //
    // where each charset named to the left of a slash is intended to replace
    // (most) uses of the charset named to the right of the slash.
    //
    protected void init() {
        if (initialized)
            return;
        if (!sun.misc.VM.isBooted())
            return;

        String map = AccessController.doPrivileged(
            new GetPropertyAction("sun.nio.cs.map"));
        boolean sjisIsMS932 = false;
        boolean iso2022jpIsMS50221 = false;
        boolean iso2022jpIsMS50220 = false;
        boolean iso2022jpIsMSISO2022JP = false;
        if (map != null) {
            String[] maps = map.split(",");
            for (int i = 0; i < maps.length; i++) {
                if (maps[i].equalsIgnoreCase("Windows-31J/Shift_JIS")) {
                    sjisIsMS932 = true;
                } else if (maps[i].equalsIgnoreCase("x-windows-50221/ISO-2022-JP")) {
                    iso2022jpIsMS50221 = true;
                } else if (maps[i].equalsIgnoreCase("x-windows-50220/ISO-2022-JP")) {
                    iso2022jpIsMS50220 = true;
                } else if (maps[i].equalsIgnoreCase("x-windows-iso2022jp/ISO-2022-JP")) {
                    iso2022jpIsMSISO2022JP = true;
                }
            }
        }
        if (sjisIsMS932) {
            deleteCharset("Shift_JIS",
                          new String[] {
                              // IANA aliases
                              "sjis", // historical
                              "shift_jis",
                              "shift-jis",
                              "ms_kanji",
                              "x-sjis",
                              "csShiftJIS"
                          });
            deleteCharset("windows-31j",
                          new String[] {
                              "MS932", // JDK historical
                              "windows-932",
                              "csWindows31J"
                          });
            charset("Shift_JIS", "SJIS",
                    new String[] {
                        // IANA aliases
                        "sjis"          // JDK historical
                    });
            charset("windows-31j", "MS932",
                    new String[] {
                        "MS932",        // JDK historical
                        "windows-932",
                        "csWindows31J",
                        "shift-jis",
                        "ms_kanji",
                        "x-sjis",
                        "csShiftJIS",
                        // This alias takes precedence over the actual
                        // Shift_JIS charset itself since aliases are always
                        // resolved first, before looking up canonical names.
                        "shift_jis"
                    });
        }
        if (iso2022jpIsMS50221 ||
            iso2022jpIsMS50220 ||
            iso2022jpIsMSISO2022JP) {
            deleteCharset("ISO-2022-JP",
                          new String[] {
                              "iso2022jp",
                                "jis",
                                "csISO2022JP",
                                "jis_encoding",
                                "csjisencoding"
                          });
            if (iso2022jpIsMS50221) {
                deleteCharset("x-windows-50221",
                              new String[] {
                                  "cp50221",
                                  "ms50221"
                              });
                charset("x-windows-50221", "MS50221",
                        new String[] {
                            "cp50221",
                            "ms50221",
                            "iso-2022-jp",
                            "iso2022jp",
                            "jis",
                            "csISO2022JP",
                            "jis_encoding",
                            "csjisencoding"
                        });
            } else if (iso2022jpIsMS50220) {
                deleteCharset("x-windows-50220",
                              new String[] {
                                  "cp50220",
                                  "ms50220"
                              });
                charset("x-windows-50220", "MS50220",
                        new String[] {
                            "cp50220",
                            "ms50220",
                            "iso-2022-jp",
                            "iso2022jp",
                            "jis",
                            "csISO2022JP",
                            "jis_encoding",
                            "csjisencoding"
                        });
            } else {
                deleteCharset("x-windows-iso2022jp",
                              new String[] {
                                  "windows-iso2022jp"
                              });
                charset("x-windows-iso2022jp", "MSISO2022JP",
                        new String[] {
                            "windows-iso2022jp",
                            "iso-2022-jp",
                            "iso2022jp",
                            "jis",
                            "csISO2022JP",
                            "jis_encoding",
                            "csjisencoding"
                        });


            }
        }
        String osName = AccessController.doPrivileged(
            new GetPropertyAction("os.name"));
        if ("SunOS".equals(osName) || "Linux".equals(osName)) {
            charset("x-COMPOUND_TEXT", "COMPOUND_TEXT",
                    new String[] {
                        "COMPOUND_TEXT",        // JDK historical
                        "x11-compound_text",
                        "x-compound-text"
                    });
        }
        initialized = true;
    }

    public static String[] aliasesFor(String charsetName) {
        if (instance == null)
            return null;
        return instance.aliases(charsetName);
    }
}
