diff --git a/lib/cldr/export.rb b/lib/cldr/export.rb index 3942c887..9f14bf7a 100644 --- a/lib/cldr/export.rb +++ b/lib/cldr/export.rb @@ -191,9 +191,7 @@ def shared_component?(component) end def should_merge_root?(component) - return false if [:Rbnf, :Fields].include?(component) - - true + ![:Fields].include?(component) end end end diff --git a/lib/cldr/export/data/rbnf.rb b/lib/cldr/export/data/rbnf.rb index dc214186..a678d5ae 100644 --- a/lib/cldr/export/data/rbnf.rb +++ b/lib/cldr/export/data/rbnf.rb @@ -17,31 +17,39 @@ def rule_groups return {} if grouping_nodes.empty? grouping_nodes.map do |grouping_node| - { - type: grouping_node.attribute("type").value, - ruleset: (grouping_node / "ruleset").map do |ruleset_node| - rule_set(ruleset_node) - end, - } - end + type = grouping_node.attribute("type").value.underscore + next if type == "numbering_system_rules" && !is_a?(RbnfRoot) + + [ + type, + (grouping_node / "ruleset").map do |ruleset_node| + [ + ruleset_node.attribute("type").value, + rule_set(ruleset_node), + ] + end.to_h, + ] + end.compact.to_h end def rule_set(ruleset_node) attrs = { - type: ruleset_node.attribute("type").value, rules: (ruleset_node / "rbnfrule").map do |rule_node| radix = if (radix_attr = rule_node.attribute("radix")) cast_value(radix_attr.value) end attrs = { - value: cast_value(rule_node.attribute("value").value), rule: fix_rule(rule_node.text), } attrs[:radix] = radix if radix - attrs - end, + + [ + cast_value(rule_node.attribute("value").value).to_s, + attrs, + ] + end.to_h, } access = ruleset_node.attribute("access") diff --git a/lib/cldr/export/deep_validate_keys.rb b/lib/cldr/export/deep_validate_keys.rb index a763d250..e1eae7d4 100644 --- a/lib/cldr/export/deep_validate_keys.rb +++ b/lib/cldr/export/deep_validate_keys.rb @@ -33,6 +33,20 @@ def validate(hash, component, key_path = []) ], RegionCurrencies: [["region_currencies", "."]], ParentLocales: [["."]], + Rbnf: [ + ["rbnf", "grouping", "ordinal_rules", "."], + ["rbnf", "grouping", "ordinal_rules", ".", "rules", "."], + ["rbnf", "grouping", "spellout_rules", "."], + ["rbnf", "grouping", "spellout_rules", ".", "rules", "."], + ], + RbnfRoot: [ + ["rbnf", "grouping", "ordinal_rules", "."], + ["rbnf", "grouping", "ordinal_rules", ".", "rules", "."], + ["rbnf", "grouping", "numbering_system_rules", "."], + ["rbnf", "grouping", "numbering_system_rules", ".", "rules", "."], + ["rbnf", "grouping", "spellout_rules", "."], + ["rbnf", "grouping", "spellout_rules", ".", "rules", "."], + ], Subdivisions: [["subdivisions", "."]], Territories: [["territories", "."]], TerritoriesContainment: [["territories", "."]], diff --git a/lib/cldr/export/yaml.rb b/lib/cldr/export/yaml.rb index 0ae1bde8..3e920115 100644 --- a/lib/cldr/export/yaml.rb +++ b/lib/cldr/export/yaml.rb @@ -18,7 +18,7 @@ def export(locale, component, options = {}) private - UNSORTED_COMPONENTS = [:Calendars, :Delimiters, :Lists].freeze + UNSORTED_COMPONENTS = [:Calendars, :Delimiters, :Lists, :Rbnf, :RbnfRoot].freeze def format(data, locale, component) data.deep_prune!