< prev index next >
make/jdk/src/classes/build/tools/cldrconverter/SupplementalMetadataParseHandler.java
Print this page
@@ -25,10 +25,12 @@
package build.tools.cldrconverter;
import java.io.File;
import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
import java.util.stream.Stream;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -36,10 +38,16 @@
* Handles parsing of files in Locale Data Markup Language for
* SupplementalMetadata.xml
*/
class SupplementalMetadataParseHandler extends AbstractLDMLHandler<Object> {
+ private final Map<String, String> languageAliasMap;
+
+ SupplementalMetadataParseHandler() {
+ languageAliasMap = new HashMap<>();
+ }
+
@Override
public InputSource resolveEntity(String publicID, String systemID) throws IOException, SAXException {
// avoid HTTP traffic to unicode.org
if (systemID.startsWith(CLDRConverter.SPPL_LDML_DTD_SYSTEM_ID)) {
return new InputSource((new File(CLDRConverter.LOCAL_SPPL_LDML_DTD)).toURI().toString());
@@ -55,10 +63,21 @@
if ("deprecated".equals(reason)) {
put(attributes.getValue("type"), attributes.getValue("replacement"));
}
pushIgnoredContainer(qName);
break;
+ case "languageAlias":
+ String aliasReason = attributes.getValue("reason");
+ if ("deprecated".equals(aliasReason) || "legacy".equals(aliasReason)) {
+ String tag = attributes.getValue("type");
+ if (!checkLegacyLocales(tag)) {
+ languageAliasMap.put(tag.replaceAll("_", "-"),
+ attributes.getValue("replacement").replaceAll("_", "-"));
+ }
+ }
+ pushIgnoredContainer(qName);
+ break;
default:
// treat anything else as a container
pushContainer(qName, attributes);
break;
}
@@ -67,6 +86,15 @@
public Stream<String> deprecatedMap() {
return keySet().stream()
.map(k -> String.format(" \"%s\", \"%s\",", k, get(k)))
.sorted();
}
+ Map<String, String> getLanguageAliasData() {
+ return languageAliasMap;
+ }
+
+ // skip language aliases for JDK legacy locales for ISO compatibility
+ private boolean checkLegacyLocales(String tag) {
+ return (tag.startsWith("no") || tag.startsWith("in")
+ || tag.startsWith("iw") || tag.startsWith("ji"));
+ }
}
< prev index next >