/**
* Copyright (c) 2012-2016 André Bargull
* Alle Rechte vorbehalten / All Rights Reserved. Use is subject to license terms.
*
* <https://github.com/anba/es6draft>
*/
package com.github.anba.es6draft.runtime.objects.intl;
import java.util.HashMap;
/**
* Supplemental data for canonicalization of language tags.
* <p>
* Data generated from: language-subtag-registry, 2015-08-04
*
* @see <a href="http://www.iana.org/assignments/language-subtag-registry">language-subtag-registry</a>
*/
final class LanguageSubtagRegistryData {
private LanguageSubtagRegistryData() {
}
static String grandfathered(String languageTag) {
String v = grandfatheredData.get(languageTag);
if (v != null) {
return v;
}
return null;
}
/**
* Does not return input on mismatch.
*
* @param languageTag
* the language tag
* @return the canonicalized language tag or {@code null} if not applicable
*/
static String redundant(String languageTag) {
String v = redundantData.get(languageTag);
if (v != null) {
return v;
}
return null;
}
/**
* Returns input on mismatch.
*
* @param language
* the language
* @return the canonicalized language or the input if not applicable
*/
static String language(String language) {
String v = languageData.get(language);
if (v != null) {
return v;
}
return language;
}
/**
* Does not return input on mismatch.
*
* @param prefix
* the prefix string
* @param extlang
* the extended language
* @return the canonicalized extended language or {@code null} if not applicable
*/
static String extlang(String prefix, String extlang) {
String v = extlangData.get(extlang);
if (v != null && v.equals(prefix)) {
return extlang;
}
return null;
}
/**
* Returns input on mismatch.
*
* @param region
* the region
* @return the canonicalized region or the input if not applicable
*/
static String region(String region) {
String v = regionData.get(region);
if (v != null) {
return v;
}
return region;
}
/**
* Does not return input on mismatch.
*
* @param prefix
* the prefix string
* @param variant
* the variant
* @return the canonicalized variant or {@code null} if not applicable
*/
static String variant(StringBuilder prefix, String variant) {
// handle this replacement manually
if ("heploc".equals(variant) && "ja-Latn-hepburn".equals(prefix.toString())) {
// apparently this should replace the complete tag...?
return "ja-Latn-alalc97";
}
return null;
}
private static final HashMap<String, String> grandfatheredData;
static {
// preferred-values for grandfathered language tags
HashMap<String, String> map = new HashMap<>();
map.put("art-lojban", "jbo");
map.put("cel-gaulish", "cel-gaulish");
map.put("en-gb-oed", "en-GB-oxendict");
map.put("i-ami", "ami");
map.put("i-bnn", "bnn");
map.put("i-default", "i-default");
map.put("i-enochian", "i-enochian");
map.put("i-hak", "hak");
map.put("i-klingon", "tlh");
map.put("i-lux", "lb");
map.put("i-mingo", "i-mingo");
map.put("i-navajo", "nv");
map.put("i-pwn", "pwn");
map.put("i-tao", "tao");
map.put("i-tay", "tay");
map.put("i-tsu", "tsu");
map.put("no-bok", "nb");
map.put("no-nyn", "nn");
map.put("sgn-be-fr", "sfb");
map.put("sgn-be-nl", "vgt");
map.put("sgn-ch-de", "sgg");
map.put("zh-guoyu", "cmn");
map.put("zh-hakka", "hak");
map.put("zh-min", "zh-min");
map.put("zh-min-nan", "nan");
map.put("zh-xiang", "hsn");
grandfatheredData = map;
}
private static final HashMap<String, String> redundantData;
static {
// preferred-values for redundant language tags
HashMap<String, String> map = new HashMap<>();
map.put("sgn-br", "bzs");
map.put("sgn-co", "csn");
map.put("sgn-de", "gsg");
map.put("sgn-dk", "dsl");
map.put("sgn-es", "ssp");
map.put("sgn-fr", "fsl");
map.put("sgn-gb", "bfi");
map.put("sgn-gr", "gss");
map.put("sgn-ie", "isg");
map.put("sgn-it", "ise");
map.put("sgn-jp", "jsl");
map.put("sgn-mx", "mfs");
map.put("sgn-ni", "ncs");
map.put("sgn-nl", "dse");
map.put("sgn-no", "nsl");
map.put("sgn-pt", "psr");
map.put("sgn-se", "swl");
map.put("sgn-us", "ase");
map.put("sgn-za", "sfs");
map.put("zh-cmn", "cmn");
map.put("zh-cmn-hans", "cmn-Hans");
map.put("zh-cmn-hant", "cmn-Hant");
map.put("zh-gan", "gan");
map.put("zh-wuu", "wuu");
map.put("zh-yue", "yue");
redundantData = map;
}
private static final HashMap<String, String> languageData;
static {
// preferred-values for language subtag
HashMap<String, String> map = new HashMap<>();
map.put("in", "id");
map.put("iw", "he");
map.put("ji", "yi");
map.put("jw", "jv");
map.put("mo", "ro");
map.put("aam", "aas");
map.put("adp", "dz");
map.put("aue", "ktz");
map.put("ayx", "nun");
map.put("bjd", "drl");
map.put("ccq", "rki");
map.put("cjr", "mom");
map.put("cka", "cmr");
map.put("cmk", "xch");
map.put("drh", "khk");
map.put("drw", "prs");
map.put("gav", "dev");
map.put("gfx", "vaj");
map.put("gti", "nyc");
map.put("hrr", "jal");
map.put("ibi", "opa");
map.put("ilw", "gal");
map.put("kgh", "kml");
map.put("koj", "kwv");
map.put("kwq", "yam");
map.put("kxe", "tvd");
map.put("lii", "raq");
map.put("lmm", "rmx");
map.put("meg", "cir");
map.put("mst", "mry");
map.put("mwj", "vaj");
map.put("myt", "mry");
map.put("nnx", "ngv");
map.put("oun", "vaj");
map.put("pcr", "adx");
map.put("pmu", "phr");
map.put("ppr", "lcq");
map.put("puz", "pub");
map.put("sca", "hle");
map.put("thx", "oyb");
map.put("tie", "ras");
map.put("tkk", "twm");
map.put("tlw", "weo");
map.put("tnf", "prs");
map.put("tsf", "taj");
map.put("uok", "ema");
map.put("xia", "acn");
map.put("xsj", "suj");
map.put("ybd", "rki");
map.put("yma", "lrr");
map.put("ymt", "mtm");
map.put("yos", "zom");
map.put("yuu", "yug");
languageData = map;
}
private static final HashMap<String, String> regionData;
static {
// preferred-values for region subtag
HashMap<String, String> map = new HashMap<>();
map.put("bu", "MM");
map.put("dd", "DE");
map.put("fx", "FR");
map.put("tp", "TL");
map.put("yd", "YE");
map.put("zr", "CD");
regionData = map;
}
private static final HashMap<String, String> extlangData;
static {
// preferred-value is equal to extlang, therefore only store [extlang, prefix] pairs, where
// prefix is the language subtag
HashMap<String, String> map = new HashMap<>();
map.put("aao", "ar");
map.put("abh", "ar");
map.put("abv", "ar");
map.put("acm", "ar");
map.put("acq", "ar");
map.put("acw", "ar");
map.put("acx", "ar");
map.put("acy", "ar");
map.put("adf", "ar");
map.put("ads", "sgn");
map.put("aeb", "ar");
map.put("aec", "ar");
map.put("aed", "sgn");
map.put("aen", "sgn");
map.put("afb", "ar");
map.put("afg", "sgn");
map.put("ajp", "ar");
map.put("apc", "ar");
map.put("apd", "ar");
map.put("arb", "ar");
map.put("arq", "ar");
map.put("ars", "ar");
map.put("ary", "ar");
map.put("arz", "ar");
map.put("ase", "sgn");
map.put("asf", "sgn");
map.put("asp", "sgn");
map.put("asq", "sgn");
map.put("asw", "sgn");
map.put("auz", "ar");
map.put("avl", "ar");
map.put("ayh", "ar");
map.put("ayl", "ar");
map.put("ayn", "ar");
map.put("ayp", "ar");
map.put("bbz", "ar");
map.put("bfi", "sgn");
map.put("bfk", "sgn");
map.put("bjn", "ms");
map.put("bog", "sgn");
map.put("bqn", "sgn");
map.put("bqy", "sgn");
map.put("btj", "ms");
map.put("bve", "ms");
map.put("bvl", "sgn");
map.put("bvu", "ms");
map.put("bzs", "sgn");
map.put("cdo", "zh");
map.put("cds", "sgn");
map.put("cjy", "zh");
map.put("cmn", "zh");
map.put("coa", "ms");
map.put("cpx", "zh");
map.put("csc", "sgn");
map.put("csd", "sgn");
map.put("cse", "sgn");
map.put("csf", "sgn");
map.put("csg", "sgn");
map.put("csl", "sgn");
map.put("csn", "sgn");
map.put("csq", "sgn");
map.put("csr", "sgn");
map.put("czh", "zh");
map.put("czo", "zh");
map.put("doq", "sgn");
map.put("dse", "sgn");
map.put("dsl", "sgn");
map.put("dup", "ms");
map.put("ecs", "sgn");
map.put("esl", "sgn");
map.put("esn", "sgn");
map.put("eso", "sgn");
map.put("eth", "sgn");
map.put("fcs", "sgn");
map.put("fse", "sgn");
map.put("fsl", "sgn");
map.put("fss", "sgn");
map.put("gan", "zh");
map.put("gds", "sgn");
map.put("gom", "kok");
map.put("gse", "sgn");
map.put("gsg", "sgn");
map.put("gsm", "sgn");
map.put("gss", "sgn");
map.put("gus", "sgn");
map.put("hab", "sgn");
map.put("haf", "sgn");
map.put("hak", "zh");
map.put("hds", "sgn");
map.put("hji", "ms");
map.put("hks", "sgn");
map.put("hos", "sgn");
map.put("hps", "sgn");
map.put("hsh", "sgn");
map.put("hsl", "sgn");
map.put("hsn", "zh");
map.put("icl", "sgn");
map.put("iks", "sgn");
map.put("ils", "sgn");
map.put("inl", "sgn");
map.put("ins", "sgn");
map.put("ise", "sgn");
map.put("isg", "sgn");
map.put("isr", "sgn");
map.put("jak", "ms");
map.put("jax", "ms");
map.put("jcs", "sgn");
map.put("jhs", "sgn");
map.put("jls", "sgn");
map.put("jos", "sgn");
map.put("jsl", "sgn");
map.put("jus", "sgn");
map.put("kgi", "sgn");
map.put("knn", "kok");
map.put("kvb", "ms");
map.put("kvk", "sgn");
map.put("kvr", "ms");
map.put("kxd", "ms");
map.put("lbs", "sgn");
map.put("lce", "ms");
map.put("lcf", "ms");
map.put("liw", "ms");
map.put("lls", "sgn");
map.put("lsg", "sgn");
map.put("lsl", "sgn");
map.put("lso", "sgn");
map.put("lsp", "sgn");
map.put("lst", "sgn");
map.put("lsy", "sgn");
map.put("ltg", "lv");
map.put("lvs", "lv");
map.put("lzh", "zh");
map.put("max", "ms");
map.put("mdl", "sgn");
map.put("meo", "ms");
map.put("mfa", "ms");
map.put("mfb", "ms");
map.put("mfs", "sgn");
map.put("min", "ms");
map.put("mnp", "zh");
map.put("mqg", "ms");
map.put("mre", "sgn");
map.put("msd", "sgn");
map.put("msi", "ms");
map.put("msr", "sgn");
map.put("mui", "ms");
map.put("mzc", "sgn");
map.put("mzg", "sgn");
map.put("mzy", "sgn");
map.put("nan", "zh");
map.put("nbs", "sgn");
map.put("ncs", "sgn");
map.put("nsi", "sgn");
map.put("nsl", "sgn");
map.put("nsp", "sgn");
map.put("nsr", "sgn");
map.put("nzs", "sgn");
map.put("okl", "sgn");
map.put("orn", "ms");
map.put("ors", "ms");
map.put("pel", "ms");
map.put("pga", "ar");
map.put("pks", "sgn");
map.put("prl", "sgn");
map.put("prz", "sgn");
map.put("psc", "sgn");
map.put("psd", "sgn");
map.put("pse", "ms");
map.put("psg", "sgn");
map.put("psl", "sgn");
map.put("pso", "sgn");
map.put("psp", "sgn");
map.put("psr", "sgn");
map.put("pys", "sgn");
map.put("rms", "sgn");
map.put("rsi", "sgn");
map.put("rsl", "sgn");
map.put("sdl", "sgn");
map.put("sfb", "sgn");
map.put("sfs", "sgn");
map.put("sgg", "sgn");
map.put("sgx", "sgn");
map.put("shu", "ar");
map.put("slf", "sgn");
map.put("sls", "sgn");
map.put("sqk", "sgn");
map.put("sqs", "sgn");
map.put("ssh", "ar");
map.put("ssp", "sgn");
map.put("ssr", "sgn");
map.put("svk", "sgn");
map.put("swc", "sw");
map.put("swh", "sw");
map.put("swl", "sgn");
map.put("syy", "sgn");
map.put("tmw", "ms");
map.put("tse", "sgn");
map.put("tsm", "sgn");
map.put("tsq", "sgn");
map.put("tss", "sgn");
map.put("tsy", "sgn");
map.put("tza", "sgn");
map.put("ugn", "sgn");
map.put("ugy", "sgn");
map.put("ukl", "sgn");
map.put("uks", "sgn");
map.put("urk", "ms");
map.put("uzn", "uz");
map.put("uzs", "uz");
map.put("vgt", "sgn");
map.put("vkk", "ms");
map.put("vkt", "ms");
map.put("vsi", "sgn");
map.put("vsl", "sgn");
map.put("vsv", "sgn");
map.put("wuu", "zh");
map.put("xki", "sgn");
map.put("xml", "sgn");
map.put("xmm", "ms");
map.put("xms", "sgn");
map.put("ygs", "sgn");
map.put("yhs", "sgn");
map.put("ysl", "sgn");
map.put("yue", "zh");
map.put("zib", "sgn");
map.put("zlm", "ms");
map.put("zmi", "ms");
map.put("zsl", "sgn");
map.put("zsm", "ms");
extlangData = map;
}
}