| /* IconvMetaData.java -- |
| Copyright (C) 2005 Free Software Foundation, Inc. |
| |
| This file is part of GNU Classpath. |
| |
| GNU Classpath is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2, or (at your option) |
| any later version. |
| |
| GNU Classpath 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 for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with GNU Classpath; see the file COPYING. If not, write to the |
| Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
| 02110-1301 USA. |
| |
| Linking this library statically or dynamically with other modules is |
| making a combined work based on this library. Thus, the terms and |
| conditions of the GNU General Public License cover the whole |
| combination. |
| |
| As a special exception, the copyright holders of this library give you |
| permission to link this library with independent modules to produce an |
| executable, regardless of the license terms of these independent |
| modules, and to copy and distribute the resulting executable under |
| terms of your choice, provided that you also meet, for each linked |
| independent module, the terms and conditions of the license of that |
| module. An independent module is a module which is not derived from |
| or based on this library. If you modify this library, you may extend |
| this exception to your version of the library, but you are not |
| obligated to do so. If you do not wish to do so, delete this |
| exception statement from your version. */ |
| |
| |
| package gnu.java.nio.charset.iconv; |
| |
| import java.util.HashMap; |
| import java.util.Vector; |
| |
| /** |
| * This is ugly glue. iconv doesn't have character metadata, |
| * so we include it here. |
| * |
| * TODO: Add more charsets which GNU iconv and the JDK support which aren't |
| * included here. |
| * |
| * @author Sven de Marothy |
| */ |
| final class IconvMetaData |
| { |
| /** |
| * Map of names (and aliases) to metadata instances |
| */ |
| private static HashMap names; |
| |
| /** |
| * Vector of MetaData instances |
| */ |
| private static Vector charsets; |
| |
| /** |
| * Name to use with iconv (may differ from the nio canonical. |
| */ |
| private String iconvName; |
| |
| /** |
| * Average number of bytes per char. |
| */ |
| private float averageBperC; |
| |
| /** |
| * Maximum number of bytes per char. |
| */ |
| private float maxBperC; |
| |
| /** |
| * Average number of chars per byte. |
| */ |
| private float averageCperB; |
| |
| /** |
| * Maximum number of chars per byte. |
| */ |
| private float maxCperB; |
| |
| /** |
| * NIO canonical name. |
| */ |
| private String nioCanonical; |
| |
| /** |
| * Charset aliases. |
| */ |
| private String[] aliases; |
| |
| IconvMetaData(String nioCanonical, float averageBperC, float maxBperC, |
| float averageCperB, float maxCperB, String[] aliases, |
| String iconvName) |
| { |
| this.nioCanonical = nioCanonical; |
| this.iconvName = iconvName; |
| |
| this.averageBperC = averageBperC; |
| this.maxBperC = maxBperC; |
| this.averageCperB = averageCperB; |
| this.maxCperB = maxCperB; |
| this.aliases = aliases; |
| |
| names.put(nioCanonical, this); |
| names.put(iconvName, this); |
| for (int i = 0; i < aliases.length; i++) |
| names.put(aliases[i], this); |
| charsets.add(this); |
| } |
| |
| static Vector charsets() |
| { |
| return charsets; |
| } |
| |
| String[] aliases() |
| { |
| return aliases; |
| } |
| |
| String nioCanonical() |
| { |
| return nioCanonical; |
| } |
| |
| String iconvName() |
| { |
| return iconvName; |
| } |
| |
| float maxBytesPerChar() |
| { |
| return maxBperC; |
| } |
| |
| float maxCharsPerByte() |
| { |
| return maxCperB; |
| } |
| |
| float averageBytesPerChar() |
| { |
| return averageBperC; |
| } |
| |
| float averageCharsPerByte() |
| { |
| return averageCperB; |
| } |
| |
| static IconvMetaData get(String s) |
| { |
| return (IconvMetaData) names.get(s); |
| } |
| |
| static void setup() |
| { |
| names = new HashMap(); |
| charsets = new Vector(); |
| new IconvMetaData("Big5", 2.0f, 2.0f, 0.5f, 1.0f, |
| new String[] { "big-5", "csBig5" }, "Big5"); |
| |
| new IconvMetaData("Big5-HKSCS", 2.0f, 2.0f, 0.5f, 1.0f, |
| new String[] { "big5-hkscs", "Big5_HKSCS", "big5hkscs" }, |
| "Big5-HKSCS"); |
| |
| new IconvMetaData("EUC-CN", 2.0f, 2.0f, 0.5f, 1.0f, new String[] { }, |
| "EUC-CN"); |
| |
| new IconvMetaData("EUC-JP", 3.0f, 3.0f, 0.5f, 1.0f, |
| new String[] |
| { |
| "eucjis", "x-eucjp", "csEUCPkdFmtjapanese", "eucjp", |
| "Extended_UNIX_Code_Packed_Format_for_Japanese", |
| "x-euc-jp", "euc_jp" |
| }, "EUC-JP"); |
| |
| new IconvMetaData("EUC-KR", 2.0f, 2.0f, 0.5f, 1.0f, |
| new String[] |
| { |
| "ksc5601", "5601", "ksc5601_1987", "ksc_5601", |
| "ksc5601-1987", "euc_kr", "ks_c_5601-1987", "euckr", |
| "csEUCKR" |
| }, "EUC-KR"); |
| |
| new IconvMetaData("EUC-TW", 4.0f, 4.0f, 2.0f, 2.0f, |
| new String[] { "cns11643", "euc_tw", "euctw", }, "EUC-TW"); |
| |
| new IconvMetaData("GB18030", 4.0f, 4.0f, 1.0f, 2.0f, |
| new String[] { "gb18030-2000", }, "GB18030"); |
| |
| new IconvMetaData("GBK", 2.0f, 2.0f, 0.5f, 1.0f, new String[] { "GBK" }, |
| "GBK"); |
| |
| new IconvMetaData("ISO-2022-CN-CNS", 4.0f, 4.0f, 2.0f, 2.0f, |
| new String[] { "ISO2022CN_CNS" }, "ISO-2022-CN"); // will this work? |
| |
| new IconvMetaData("ISO-2022-CN-GB", 4.0f, 4.0f, 2.0f, 2.0f, |
| new String[] { "ISO2022CN_GB" }, "ISO-2022-CN"); // same here? |
| |
| new IconvMetaData("ISO-2022-KR", 4.0f, 4.0f, 1.0f, 1.0f, |
| new String[] { "ISO2022KR", "csISO2022KR" }, |
| "ISO-2022-KR"); |
| |
| new IconvMetaData("ISO-8859-1", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "iso-ir-100", "ISO_8859-1", "latin1", "l1", "IBM819", |
| "CP819", "csISOLatin1", "8859_1", "ISO8859_1", |
| "ISO_8859_1", "ibm-819", "ISO_8859-1:1987", "819" |
| }, "ISO-8859-1"); |
| |
| new IconvMetaData("ISO-8859-13", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "ISO8859_13", "8859_13", "ibm-921_P100-1995", "ibm-921", |
| "iso_8859_13", "iso8859_13", "iso-8859-13", "8859_13", |
| "cp921", "921" |
| }, "ISO-8859-13"); |
| |
| new IconvMetaData("ISO-8859-15", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "8859_15", "csISOlatin9", "IBM923", "cp923", "923", |
| "LATIN0", "csISOlatin0", "ISO8859_15_FDIS", "L9", |
| "IBM-923", "ISO8859-15", "LATIN9", "ISO_8859-15", |
| "ISO-8859-15", |
| }, "ISO-8859-15"); |
| |
| new IconvMetaData("ISO-8859-2", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "ISO8859_2", "8859_2", "ibm-912_P100-1995", "ibm-912", |
| "iso_8859_2", "iso8859_2", "iso-8859-2", |
| "ISO_8859-2:1987", "latin2", "csISOLatin2", |
| "iso-ir-101", "l2", "cp912", "912", "windows-28592" |
| }, "ISO-8859-2"); |
| |
| new IconvMetaData("ISO-8859-3", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "ISO8859_3", "8859_3", "ibm-913_P100-2000", "ibm-913", |
| "iso_8859_3", "iso8859_3", "iso-8859-3", |
| "ISO_8859-3:1988", "latin3", "csISOLatin3", |
| "iso-ir-109", "l3", "cp913", "913", "windows-28593" |
| }, "ISO-8859-3"); |
| |
| new IconvMetaData("ISO-8859-4", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "ISO8859_4", "8859_4", "ibm-914_P100-1995", "ibm-914", |
| "iso_8859_4", "iso8859_4", "iso-8859-4", "latin4", |
| "csISOLatin4", "iso-ir-110", "ISO_8859-4:1988", "l4", |
| "cp914", "914", "windows-28594" |
| }, "ISO-8859-4"); |
| |
| new IconvMetaData("ISO-8859-5", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "ISO8859_5", "8859_5", "ibm-915_P100-1995", "ibm-915", |
| "iso_8859_5", "iso8859_5", "iso-8859-5", "cyrillic", |
| "csISOLatinCyrillic", "iso-ir-144", "ISO_8859-5:1988", |
| "cp915", "915", "windows-28595" |
| }, "ISO-8859-5"); |
| |
| new IconvMetaData("ISO-8859-6", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "8859_6", "ibm-1089_P100-1995", "ibm-1089", |
| "iso_8859_6", "iso8859_6", "iso-8859-6", "arabic", |
| "csISOLatinArabic", "iso-ir-127", "ISO_8859-6:1987", |
| "ECMA-114", "ASMO-708", "8859_6", "cp1089", "1089", |
| "windows-28596", "ISO-8859-6-I", "ISO-8859-6-E" |
| }, "ISO-8859-6"); |
| |
| new IconvMetaData("ISO-8859-7", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "ISO8859_7", "8859_7", "ibm-813_P100-1995", "ibm-813", |
| "iso_8859_7", "iso8859_7", "iso-8859-7", "greek", |
| "greek8", "ELOT_928", "ECMA-118", "csISOLatinGreek", |
| "iso-ir-126", "ISO_8859-7:1987", "cp813", "813", |
| "windows-28597" |
| }, "ISO-8859-7"); |
| |
| new IconvMetaData("ISO-8859-8", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "ISO8859_8", "8859_8", "ibm-916_P100-1995", "ibm-916", |
| "iso_8859_8", "iso8859_8", "iso-8859-8", "hebrew", |
| "csISOLatinHebrew", "iso-ir-138", "ISO_8859-8:1988", |
| "ISO-8859-8-I", "ISO-8859-8-E", "cp916", "916", |
| "windows-28598" |
| }, "ISO-8859-8"); |
| |
| new IconvMetaData("ISO-8859-9", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "ISO8859_9", "8859_9", "ibm-920_P100-1995", "ibm-920", |
| "iso8859_9", "iso-8859-9", "iso_8859_9", "latin5", |
| "csISOLatin5", "iso-ir-148", "ISO_8859-9:1989", "l5", |
| "cp920", "920", "windows-28599", "ECMA-128" |
| }, "ISO-8859-9"); |
| |
| new IconvMetaData("Johab", 2.0f, 2.0f, 0.5f, 1.0f, |
| new String[] { "ms1361", "ksc5601_1992", "ksc5601-1992", }, |
| "Johab"); |
| |
| new IconvMetaData("KOI8-R", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "KOI8_R", "KOI8", "KOI-8", "KOI_8", "koi8-r", "koi8r", |
| "koi-8-r", "koi" |
| }, "KOI8-R"); |
| |
| new IconvMetaData("Shift_JIS", 2.0f, 2.0f, 0.5f, 1.0f, |
| new String[] |
| { |
| "shift-jis", "x-sjis", "ms_kanji", "shift_jis", |
| "csShiftJIS", "sjis", "pck", |
| }, "Shift_JIS"); |
| |
| new IconvMetaData("TIS-620", 1.0f, 1.0f, 1.0f, 1.0f, new String[] { }, |
| "TIS-620"); |
| |
| new IconvMetaData("US-ASCII", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "IBM367", "ISO646-US", "ANSI_X3.4-1986", "cp367", |
| "ASCII", "iso_646.irv:1983", "646", "us", "iso-ir-6", |
| "csASCII", "ANSI_X3.4-1968", "ISO_646.irv:1991", |
| }, "US-ASCII"); |
| |
| new IconvMetaData("UTF-16", 2.0f, 4.0f, 0.5f, 1.0f, |
| new String[] |
| { |
| "UTF_16", "UTF16", "ISO-10646-UCS-2", "unicode", |
| "csUnicode", "ucs-2", "UnicodeBig" |
| }, "UTF-16"); |
| |
| new IconvMetaData("UTF-16BE", 2.0f, 2.0f, 0.5f, 1.0f, |
| new String[] |
| { |
| "X-UTF-16BE", "UTF_16BE", "UTF16BE", "ISO-10646-UCS-2", |
| "x-utf-16be", "ibm-1200", "ibm-1201", "ibm-5297", |
| "ibm-13488", "ibm-17584", "windows-1201", "cp1200", |
| "cp1201", "UnicodeBigUnmarked" |
| }, "UTF-16BE"); |
| |
| new IconvMetaData("UTF-16LE", 2.0f, 2.0f, 0.5f, 1.0f, |
| new String[] |
| { |
| "UTF_16LE", "UTF16LE", "X-UTF-16LE", "ibm-1202", |
| "ibm-13490", "ibm-17586", "UTF16_LittleEndian", |
| "UnicodeLittleUnmarked" |
| }, "UTF-16LE"); |
| |
| new IconvMetaData("UTF-8", 1.1f, 4.0f, 1.0f, 2.0f, |
| new String[] |
| { |
| "UTF8", "ibm-1208", "ibm-1209", "ibm-5304", "ibm-5305", |
| "windows-65001", "cp1208" |
| }, "UTF-8"); |
| |
| new IconvMetaData("windows-1250", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "Windows1250", "ibm-5346_P100-1998", "ibm-5346", |
| "cp1250", "cp-1250", "cp_1250", "windows1250", |
| "windows_1250" |
| }, "windows-1250"); |
| |
| new IconvMetaData("windows-1251", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "Windows1251", "cp1251", "cp-1251", "cp_1251", |
| "windows1251", "windows_1251" |
| }, "windows-1251"); |
| |
| new IconvMetaData("windows-1252", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "Windows1252", "ibm-5348_P100-1997", "ibm-5348", |
| "windows-1252", "cp1252", "cp-1252" |
| }, "windows-1252"); |
| |
| new IconvMetaData("windows-1253", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "Windows1253", "cp1253", "cp-1253", "cp_1253", |
| "windows1253", "windows_1253" |
| }, "windows-1253"); |
| |
| new IconvMetaData("windows-1254", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "Windows1254", "cp1254", "cp-1254", "cp_1254", |
| "windows1254", "windows_1254" |
| }, "windows-1254"); |
| |
| new IconvMetaData("windows-1255", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "Windows1255", "cp1255", "cp-1255", "cp_1255", |
| "windows1255", "windows_1255" |
| }, "windows-1255"); |
| |
| new IconvMetaData("windows-1256", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "Windows1255", "cp1256", "cp-1256", "cp_1256", |
| "windows1256", "windows_1256" |
| }, "windows-1256"); |
| |
| new IconvMetaData("windows-1257", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "Windows1255", "cp1257", "cp-1257", "cp_1257", |
| "windows1257", "windows_1257" |
| }, "windows-1257"); |
| |
| new IconvMetaData("windows-1258", 1.0f, 1.0f, 1.0f, 1.0f, |
| new String[] |
| { |
| "Windows1255", "cp1258", "cp-1258", "cp_1258", |
| "windows1258", "windows_1258" |
| }, "windows-1258"); |
| |
| new IconvMetaData("windows-936", 2.0f, 2.0f, 0.5f, 1.0f, |
| new String[] { "cp936", "ms-936", "ms936", "ms_936" }, |
| "windows-936"); |
| |
| new IconvMetaData("windows-949", 2.0f, 2.0f, 0.5f, 1.0f, |
| new String[] { "cp949", "ms-949", "ms_949", "ms949" }, |
| "cp949"); |
| |
| new IconvMetaData("windows-950", 2.0f, 2.0f, 0.5f, 1.0f, |
| new String[] { "cp950", "ms_950", "ms-950", "ms950", }, |
| "cp950"); |
| } |
| } |