make/jdk/src/classes/build/tools/cldrconverter/LDMLParseHandler.java
changeset 58058 b553ad95acf0
parent 57679 314e62bbdb16
child 58679 9c3209ff7550
child 58825 c3696c94049d
--- a/make/jdk/src/classes/build/tools/cldrconverter/LDMLParseHandler.java	Mon Sep 09 12:00:36 2019 -0700
+++ b/make/jdk/src/classes/build/tools/cldrconverter/LDMLParseHandler.java	Mon Sep 09 12:42:01 2019 -0700
@@ -508,7 +508,8 @@
             String type = attributes.getValue("type");
             if (null == type) {
                 // format data for decimal number format
-                pushStringEntry(qName, attributes, "NumberPatterns/decimal");
+                pushStringEntry(qName, attributes,
+                    currentNumberingSystem + "NumberPatterns/decimal");
                 currentStyle = type;
             } else {
                 switch (type) {
@@ -586,6 +587,18 @@
                 pushContainer(qName, attributes);
             }
             break;
+        case "currencyFormats":
+        case "decimalFormats":
+        case "percentFormats":
+            {
+                String script = attributes.getValue("numberSystem");
+                if (script != null) {
+                    addNumberingScript(script);
+                    currentNumberingSystem = script + ".";
+                }
+                pushContainer(qName, attributes);
+            }
+            break;
         case "currencyFormatLength":
             if (attributes.getValue("type") == null) {
                 // skipping type="short" data
@@ -601,9 +614,11 @@
                 // copy string for later assembly into NumberPatterns
                 String cfStyle = attributes.getValue("type");
                 if (cfStyle.equals("standard")) {
-                    pushStringEntry(qName, attributes, "NumberPatterns/currency");
+                    pushStringEntry(qName, attributes,
+                        currentNumberingSystem + "NumberPatterns/currency");
                 } else if (cfStyle.equals("accounting")) {
-                    pushStringEntry(qName, attributes, "NumberPatterns/accounting");
+                    pushStringEntry(qName, attributes,
+                        currentNumberingSystem + "NumberPatterns/accounting");
                 } else {
                     pushIgnoredContainer(qName);
                 }
@@ -613,7 +628,8 @@
             // for FormatData
             // copy string for later assembly into NumberPatterns
             if (attributes.getValue("type").equals("standard")) {
-                pushStringEntry(qName, attributes, "NumberPatterns/percent");
+                pushStringEntry(qName, attributes,
+                    currentNumberingSystem + "NumberPatterns/percent");
             } else {
                 pushIgnoredContainer(qName);
             }
@@ -641,13 +657,7 @@
                     break;
                 }
 
-                @SuppressWarnings("unchecked")
-                List<String> numberingScripts = (List<String>) get("numberingScripts");
-                if (numberingScripts == null) {
-                    numberingScripts = new ArrayList<>();
-                    put("numberingScripts", numberingScripts);
-                }
-                numberingScripts.add(script);
+                addNumberingScript(script);
                 put(currentNumberingSystem + "NumberElements/zero", digits.substring(0, 1));
                 pushContainer(qName, attributes);
             }
@@ -1020,6 +1030,13 @@
             compactCount = "";
             putIfEntry();
             break;
+        case "currencyFormats":
+        case "decimalFormats":
+        case "percentFormats":
+        case "symbols":
+            currentNumberingSystem = "";
+            putIfEntry();
+            break;
         default:
             putIfEntry();
         }
@@ -1086,4 +1103,16 @@
                 return key;
         }
     }
+
+    private void addNumberingScript(String script) {
+        @SuppressWarnings("unchecked")
+        List<String> numberingScripts = (List<String>) get("numberingScripts");
+        if (numberingScripts == null) {
+            numberingScripts = new ArrayList<>();
+            put("numberingScripts", numberingScripts);
+        }
+        if (!numberingScripts.contains(script)) {
+            numberingScripts.add(script);
+        }
+    }
 }