[Unicode]   Common Locale Data Repository : Bug Tracking Home | Site Map | Search
 

Changeset 11612


Ignore:
Timestamp:
05/06/15 09:34:36 (4 years ago)
Author:
mdavis
Message:

cldrbug 7368: fix attribute checking for one item

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/common/supplemental/supplementalMetadata.xml

    r11611 r11612  
    721721                stand-alone variant list secondary email www short narrow accounting arab arabext armn armnlow bali beng cham deva ethi fullwide geor grek greklow gujr guru hans hansfin hant hantfin hebr java jpan jpanfin kali knda khmr lana lanatham laoo latn lepc limb mlym mong mtei mymr mymrshan new nkoo olck orya roman romanlow saur sund talu taml telu thai tibt vaii 
    722722            </variable> 
     723                        <variable id="$unit" type="choice"> 
     724                                acceleration-g-force acceleration-meter-per-second-squared 
     725                                angle-arc-minute angle-arc-second angle-degree angle-radian angle-revolution 
     726                                area-acre area-hectare area-square-centimeter area-square-foot area-square-inch area-square-kilometer 
     727                                area-square-meter area-square-mile area-square-yard 
     728                                consumption-liter-per-100kilometers consumption-liter-per-kilometer consumption-mile-per-gallon 
     729                                digital-bit digital-byte digital-gigabit digital-gigabyte digital-kilobit digital-kilobyte digital-megabit 
     730                                digital-megabyte digital-terabit digital-terabyte 
     731                                duration-century duration-day duration-day-person duration-hour duration-microsecond duration-millisecond 
     732                                duration-minute duration-month duration-month-person duration-nanosecond duration-second 
     733                                duration-week duration-week-person duration-year duration-year-person 
     734                                electric-ampere electric-milliampere electric-ohm electric-volt 
     735                                energy-calorie energy-foodcalorie energy-joule energy-kilocalorie energy-kilojoule energy-kilowatt-hour 
     736                                frequency-gigahertz frequency-hertz frequency-kilohertz frequency-megahertz 
     737                                length-astronomical-unit length-centimeter length-decimeter length-fathom length-foot 
     738                                length-furlong length-inch length-kilometer length-light-year length-meter length-micrometer 
     739                                length-mile length-mile-nautical length-mile-scandinavian length-millimeter length-nanometer 
     740                                length-nautical-mile length-parsec length-picometer length-yard 
     741                                light-lux 
     742                                mass-carat mass-gram mass-kilogram mass-metric-ton mass-microgram mass-milligram mass-ounce 
     743                                mass-ounce-troy mass-pound mass-stone mass-ton 
     744                                power-gigawatt power-horsepower power-kilowatt power-megawatt power-milliwatt power-watt 
     745                                pressure-hectopascal pressure-inch-hg pressure-millibar pressure-millimeter-of-mercury 
     746                                pressure-pound-per-square-inch 
     747                                proportion-karat 
     748                                speed-kilometer-per-hour speed-knot speed-meter-per-second speed-mile-per-hour 
     749                                temperature-celsius temperature-fahrenheit temperature-generic temperature-kelvin 
     750                                volume-acre-foot volume-bushel volume-centiliter volume-cubic-centimeter volume-cubic-foot volume-cubic-inch 
     751                                volume-cubic-kilometer volume-cubic-meter volume-cubic-mile volume-cubic-yard volume-cup 
     752                                volume-cup-metric volume-deciliter volume-fluid-ounce volume-gallon volume-hectoliter 
     753                                volume-liter volume-megaliter volume-milliliter volume-pint volume-pint-metric volume-quart 
     754                                volume-tablespoon volume-teaspoon volume-teaspoon-au 
     755                        </variable> 
    723756            <!-- specialized lists and types --> 
    724757            <variable id="$tzidList" type="list">$tzid</variable> 
     
    824857            <attributeValues elements="type" attributes="key" type="bcp47">key</attributeValues> 
    825858            <!-- there is special code for this case <attributeValues elements="type" attributes="type" type="bcp47">use-key</attributeValues>  --> 
    826             <attributeValues elements="unit" attributes="type" type="regex">duration-century|speed-knot|length-mile-nautical|temperature-generic|duration-day-person|duration-month-person|duration-week-person|duration-year-person|length-mile-scandinavian|volume-cup-metric|volume-pint-metric|volume-teaspoon-au|angle-revolution|consumption-liter-per-100kilometers|(acceleration-(g-force|meter-per-second-squared)|angle-(degree|arc-minute|arc-second|radian)|area-(acre|square-(centimeter|inch|foot|kilometer|meter|mile|yard)|hectare)|consumption-(liter-per-kilometer|mile-per-gallon)|digital-(kilo|mega|giga|tera)?(bit|byte)|duration-(nanosecond|microsecond|millisecond|(day|hour|minute|month|second|week|year))|electric-(milli)?(ampere|ohm|volt)|energy-(kilocalorie|calorie|foodcalorie|joule|kilojoule|kilowatt-hour)|frequency-(kilo|mega|giga)?hertz|length-(astronomical-unit|(pico|nano|micro|milli|centi|deci|kilo)?meter|fathom|foot|furlong|inch|light-year|mile|nautical-mile|parsec|yard)|light-lux|mass-(carat|(kilo|milli|micro)?gram|ounce|ounce-troy|pound|metric-ton|stone|ton)|power-(horsepower|(kilo|milli|mega|giga)?watt)|pressure-(hectopascal|inch-hg|millibar|millimeter-of-mercury|pound-per-square-inch)|proportion-karat|speed-((mile|kilometer)-per-hour|meter-per-second)|temperature-(celsius|fahrenheit|kelvin)|volume-(acre-foot|bushel|cup|fluid-ounce|(milli|deci|centi|hecto|mega)?liter|gallon|pint|quart|cubic-(centimeter|kilometer|meter|mile|inch|foot|yard)|tablespoon|teaspoon))</attributeValues> 
     859            <attributeValues elements="unit" attributes="type" type="choice">$unit</attributeValues> 
    827860            <attributeValues elements="variable" attributes="id">$variableID</attributeValues> 
    828861            <attributeValues elements="variant" attributes="type">$variant</attributeValues> 
  • trunk/tools/java/org/unicode/cldr/test/CheckExemplars.java

    r11358 r11612  
    55 
    66import org.unicode.cldr.test.CheckCLDR.CheckStatus.Subtype; 
     7import org.unicode.cldr.util.CLDRConfig; 
    78import org.unicode.cldr.util.CLDRFile; 
    89import org.unicode.cldr.util.Factory; 
     10import org.unicode.cldr.util.Pair; 
     11import org.unicode.cldr.util.SupplementalDataInfo; 
    912import org.unicode.cldr.util.XPathParts; 
    1013 
     
    2629        "quotationStart", "quotationEnd", 
    2730        "alternateQuotationStart", "alternateQuotationEnd" }; 
    28  
     31    static final SupplementalDataInfo SUP = CLDRConfig.getInstance().getSupplementalDataInfo(); 
     32     
    2933    Collator col; 
    3034    Collator spaceCol; 
     
    139143        return this; 
    140144    } 
     145 
    141146 
    142147    public CheckCLDR handleCheck(String path, String fullPath, String value, Options options, 
  • trunk/tools/java/org/unicode/cldr/tool/ListUnits.java

    r11588 r11612  
    33import java.util.HashMap; 
    44import java.util.HashSet; 
     5import java.util.Iterator; 
    56import java.util.LinkedHashSet; 
    67import java.util.Map; 
     
    1415import org.unicode.cldr.util.CLDRConfig; 
    1516import org.unicode.cldr.util.CLDRFile; 
     17import org.unicode.cldr.util.CldrUtility; 
    1618import org.unicode.cldr.util.Factory; 
     19import org.unicode.cldr.util.Pair; 
     20import org.unicode.cldr.util.SupplementalDataInfo; 
    1721import org.unicode.cldr.util.Timer; 
    1822import org.unicode.cldr.util.XPathParts; 
    1923 
    2024import com.google.common.base.Splitter; 
     25import com.ibm.icu.text.UnicodeSet; 
    2126 
    2227 
    2328public class ListUnits { 
     29    private static final UnicodeSet BIDI_CONTROL = new UnicodeSet("[:bidi_control:]").freeze(); 
    2430    private static final CLDRConfig CONFIG = CLDRConfig.getInstance(); 
    25     private static final boolean SHOW_DECIMALS = false; 
     31    private static final SupplementalDataInfo SUPP = CONFIG.getSupplementalDataInfo(); 
     32    private static final Task TASK = Task.listSimpleUnits; 
     33 
     34    private enum Task { 
     35        listUnits, listSimpleUnits, showDecimals, getDigits,  
     36    } 
    2637 
    2738    enum Type { 
     
    3647    public static void main(String[] args) { 
    3748        Factory cldrFactory = CONFIG.getCldrFactory(); 
    38         Set<String> defaultContent = CONFIG.getSupplementalDataInfo().getDefaultContentLocales(); 
     49        Set<String> defaultContent = SUPP.getDefaultContentLocales(); 
    3950        Set<String> seen = new HashSet<>(); 
    4051 
     
    5162        Splitter SEMI = Splitter.on(";").trimResults(); 
    5263        Matcher currencyMatcher = Pattern.compile("([^0#]*).*[0#]([^0#]*)").matcher(""); 
    53          
     64 
    5465        for (String locale : items) { 
    5566            Type type = Type.fromString(locale); 
     
    5869            } 
    5970            CLDRFile cldrFile = cldrFactory.make(locale, true); 
    60             String compactPathPrefix = "//ldml/numbers/decimalFormats[@numberSystem=\"latn\"]/decimalFormatLength[@type=\"short\"]"; 
    61             String currencyPattern = cldrFile.getStringValue("//ldml/numbers/currencyFormats[@numberSystem=\"latn\"]/currencyFormatLength/currencyFormat[@type=\"standard\"]/pattern[@type=\"standard\"]"); 
    62             String firstPart = SEMI.split(currencyPattern).iterator().next(); 
    63             if (!currencyMatcher.reset(firstPart).matches()) { 
    64                 throw new IllegalArgumentException("bad matcher"); 
    65             } 
    66             String prefix = currencyMatcher.group(1); 
    67             String suffix = currencyMatcher.group(2); 
    6871//            DecimalFormat format = new DecimalFormat(currencyPattern); 
    6972//            String prefix = format.getPositivePrefix(); 
     
    7477//            String prefix = format.getPositivePrefix().replace("XXX", "\u00a4"); 
    7578//            String suffix = format.getPositiveSuffix().replace("XXX", "\u00a4"); 
    76             if (SHOW_DECIMALS) { 
     79            switch (TASK) { 
     80            case showDecimals:{ 
     81                String compactPathPrefix = "//ldml/numbers/decimalFormats[@numberSystem=\"latn\"]/decimalFormatLength[@type=\"short\"]"; 
     82                String currencyPattern = cldrFile.getStringValue("//ldml/numbers/currencyFormats[@numberSystem=\"latn\"]/currencyFormatLength/currencyFormat[@type=\"standard\"]/pattern[@type=\"standard\"]"); 
     83                String firstPart = SEMI.split(currencyPattern).iterator().next(); 
     84                if (!currencyMatcher.reset(firstPart).matches()) { 
     85                    throw new IllegalArgumentException("bad matcher"); 
     86                } 
     87                String prefix = currencyMatcher.group(1); 
     88                String suffix = currencyMatcher.group(2); 
    7789                System.out.println("\n#" + locale + "\t«" + prefix + "»\t«" + suffix + "»\t«" + currencyPattern + "»"); 
    7890                TreeMap<String,String> data = new TreeMap<>(); 
     
    95107                } 
    96108                data.clear(); 
    97             } else { 
    98                 Set<String> units = getUnits(cldrFile, type == Type.root ? rootMap : type == Type.en ? enMap : null); 
     109                break; 
     110            } 
     111            case listUnits: case listSimpleUnits: { 
     112                Set<String> units = getUnits(cldrFile, TASK, type == Type.root ? rootMap : type == Type.en ? enMap : null); 
    99113                if (type == Type.en) { 
    100114                    TreeSet<String> missing = new TreeSet<>(seen); 
     
    108122                    } 
    109123                } 
     124                Splitter HYPHEN = Splitter.on('-'); 
     125                String oldBase = ""; 
    110126                for (String unit : units) { 
    111127                    if (!seen.contains(unit)) { 
    112                         System.out.println("\t" + unit.replace("/", "\t") 
    113                             .replaceFirst("-", "\t") + "\t" + locale); 
     128                        switch (TASK) { 
     129                        case listSimpleUnits: 
     130                            String base = HYPHEN.split(unit).iterator().next(); 
     131                            if (!base.equals(oldBase)) { 
     132                                oldBase = base; 
     133                                System.out.println(); 
     134                            } else { 
     135                                System.out.print(' '); 
     136                            } 
     137                            System.out.print(unit); 
     138                            break; 
     139                        case listUnits: 
     140                            System.out.println("\t" + unit.replace("/", "\t") 
     141                                .replaceFirst("-", "\t") + "\t" + locale); 
     142                            break; 
     143                        } 
    114144                        seen.add(unit); 
    115145                    } 
    116146                } 
    117             } 
    118         } 
     147                break; 
     148            } 
     149            case getDigits: { 
     150                getDigits(cldrFile); 
     151                break; 
     152            } 
     153            } 
     154        } 
     155        System.out.println(); 
    119156        System.out.println("#Done: " + count + ", " + timer); 
     157    } 
     158 
     159    static void getDigits(CLDRFile cldrFile) { 
     160        System.out.println(cldrFile.getLocaleID()); 
     161        String numberSystem = cldrFile.getWinningValue("//ldml/numbers/defaultNumberingSystem"); 
     162        Set<String> seen = new HashSet<>(); 
     163        seen.add(numberSystem); 
     164        Pair<UnicodeSet, UnicodeSet> main = getCharacters(cldrFile, numberSystem); 
     165        System.out.println("\tdefault: " + numberSystem + ", " + main.getFirst().toPattern(false) + ", " +  main.getSecond().toPattern(false)); 
     166        for (Iterator<String> it = cldrFile.iterator("//ldml/numbers/otherNumberingSystems"); it.hasNext();) { 
     167            String path = it.next(); 
     168            String otherNumberingSystem = cldrFile.getWinningValue(path); 
     169            if (seen.contains(otherNumberingSystem)) { 
     170                continue; 
     171            } 
     172            seen.add(otherNumberingSystem); 
     173            main = getCharacters(cldrFile, otherNumberingSystem); 
     174            System.out.println("\tother: " + otherNumberingSystem  
     175                + ", " + main.getFirst().toPattern(false) + "\t" +  main.getSecond().toPattern(false)); 
     176        } 
     177    } 
     178 
     179    private static Pair<UnicodeSet, UnicodeSet> getCharacters(CLDRFile cldrFileToCheck, String numberSystem) { 
     180        String digitString = SUPP.getDigits(numberSystem); 
     181        UnicodeSet digits = digitString == null ? UnicodeSet.EMPTY : new UnicodeSet().addAll(digitString); 
     182 
     183        UnicodeSet punctuation = new UnicodeSet(); 
     184        Set<String> errors = new LinkedHashSet<>(); 
     185        add(cldrFileToCheck, "decimal", numberSystem, punctuation, errors); 
     186        //add(cldrFileToCheck, "exponential", numberSystem, punctuation, errors); 
     187        add(cldrFileToCheck, "group", numberSystem, punctuation, errors); 
     188        //add(cldrFileToCheck, "infinity", numberSystem, punctuation, errors); 
     189        add(cldrFileToCheck, "minusSign", numberSystem, punctuation, errors); 
     190        //add(cldrFileToCheck, "nan", numberSystem, punctuation, errors); 
     191        add(cldrFileToCheck, "list", numberSystem, punctuation, errors); 
     192        add(cldrFileToCheck, "percentSign", numberSystem, punctuation, errors); 
     193        add(cldrFileToCheck, "perMille", numberSystem, punctuation, errors); 
     194        add(cldrFileToCheck, "plusSign", numberSystem, punctuation, errors); 
     195        // symbols.setZeroDigit(getSymbolString(cldrFileToCheck, "nativeZeroDigit", numberSystem)); 
     196        if (!errors.isEmpty() && digitString != null) { 
     197            System.out.println("Missing: " + numberSystem + "\t" + errors);  
     198        } 
     199        punctuation.removeAll(BIDI_CONTROL); 
     200        return Pair.of(digits, punctuation); 
     201    } 
     202 
     203    private static void add(CLDRFile cldrFileToCheck, String subtype, String numberSystem, UnicodeSet punctuation, Set<String> errors) { 
     204        final String result = getSymbolString(cldrFileToCheck, subtype, numberSystem); 
     205        if (result == null) { 
     206            errors.add(subtype); 
     207        } else { 
     208            punctuation.addAll(result); 
     209        } 
     210    } 
     211 
     212    private static String getSymbolString(CLDRFile cldrFile, String key, String numsys) { 
     213        return cldrFile.getWinningValue("//ldml/numbers/symbols[@numberSystem=\"" + numsys + "\"]/" + key); 
    120214    } 
    121215 
     
    135229    } 
    136230 
    137     private static Set<String> getUnits(CLDRFile cldrFile, Map<String,Data> extra) { 
     231    private static Set<String> getUnits(CLDRFile cldrFile, Task task, Map<String,Data> extra) { 
    138232        Set<String> seen = new TreeSet<String>(); 
    139233        for (String path : cldrFile){ 
     
    146240                continue; 
    147241            } 
    148             String length = parts.findAttributeValue("unitLength", "type"); 
    149             String per = "perUnitPattern".equals(parts.getElement(-1)) ? "per" : ""; 
    150             String key = unit + "/" + length + "/" + per; 
     242            String key = unit; 
     243            if (task == Task.listUnits) { 
     244                String length = parts.findAttributeValue("unitLength", "type"); 
     245                String per = "perUnitPattern".equals(parts.getElement(-1)) ? "per" : ""; 
     246                key = unit + "/" + length + "/" + per; 
     247            } 
    151248            seen.add(key); 
    152249            if (extra != null && !path.endsWith("/alias")) { 
Note: See TracChangeset for help on using the changeset viewer.