blob: 46c0db6d2a812eabce01f7d527be284f057b29bd [file] [log] [blame]
package org.unicode.cldr.tool;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import org.unicode.cldr.util.CLDRConfig;
import org.unicode.cldr.util.CLDRFile;
import org.unicode.cldr.util.LanguageTagParser;
import org.unicode.cldr.util.StandardCodes;
import org.unicode.cldr.util.StandardCodes.LstrField;
import org.unicode.cldr.util.StandardCodes.LstrType;
import org.unicode.cldr.util.SupplementalDataInfo;
import com.google.common.base.Objects;
import com.ibm.icu.impl.Row.R2;
public class CompareSuppress {
enum Status {
missingSuppress, missingLikely, difference
}
public static void main(String[] args) {
CLDRConfig config = CLDRConfig.getInstance();
config.getStandardCodes();
Map<LstrType, Map<String, Map<LstrField, String>>> lstr = StandardCodes.getEnumLstreg();
Map<String, Map<LstrField, String>> langData = lstr.get(LstrType.language);
LanguageTagParser ltp = new LanguageTagParser();
Map<String, String> langToSuppress = new TreeMap<>();
for (Entry<String, Map<LstrField, String>> entry : langData.entrySet()) {
String lang = entry.getKey();
Map<LstrField, String> value = entry.getValue();
String script = value.get(LstrField.Suppress_Script);
if (script != null) {
langToSuppress.put(lang, script);
}
}
Set<String> langs = new TreeSet(langToSuppress.keySet());
SupplementalDataInfo sdi = config.getSupplementalDataInfo();
Map<String, String> likely = sdi.getLikelySubtags();
for (Entry<String, String> s : likely.entrySet()) {
ltp.set(s.getValue());
langs.add(ltp.getLanguage());
}
LikelySubtags likelyMaker = new LikelySubtags(likely);
CLDRFile english = config.getEnglish();
Map<String, R2<List<String>, String>> langAlias = sdi.getLocaleAliasInfo().get("language");
for (Status status : Status.values()) {
for (String base : langs) {
String suppressScript = langToSuppress.get(base);
String likelyScript = null;
String max = likelyMaker.maximize(base);
if (max != null) {
ltp.set(max);
likelyScript = ltp.getScript();
}
String prefix = langAlias.containsKey(base) ? "(dep) " : "";
if (!Objects.equal(suppressScript, likelyScript)) {
switch (status) {
case difference:
if (likelyScript != null && suppressScript != null) {
System.out.println(prefix + status + "\t"
+ langAndName(english, base)
+ "\tSuppress:\t" + scriptAndName(english, suppressScript)
+ "\tLikely: \t" + scriptAndName(english, likelyScript));
}
break;
case missingLikely:
if (likelyScript == null) {
System.out.println(prefix + status + "\t"
+ langAndName(english, base)
+ "\t" + scriptAndName(english, suppressScript));
}
break;
case missingSuppress:
if (suppressScript == null) {
System.out.println(prefix + status + "\t"
+ langAndName(english, base)
+ "\t" + scriptAndName(english, likelyScript));
break;
}
}
}
}
System.out.println();
}
}
public static String langAndName(CLDRFile english, String base) {
return base + "\t" + english.getName(base);
}
public static String scriptAndName(CLDRFile english, String suppressScript) {
return suppressScript
+ "\t" + english.getName(CLDRFile.SCRIPT_NAME, suppressScript);
}
}