Home | History | Annotate | Download | only in tool
      1 /*
      2  * Created on May 19, 2005
      3  * Copyright (C) 2004-2005, Unicode, Inc., International Business Machines Corporation, and others.
      4  * For terms of use, see http://www.unicode.org/terms_of_use.html
      5  */
      6 package org.unicode.cldr.tool;
      7 
      8 import java.util.HashMap;
      9 import java.util.Iterator;
     10 import java.util.Map;
     11 import java.util.Set;
     12 import java.util.TreeMap;
     13 import java.util.TreeSet;
     14 
     15 import org.unicode.cldr.util.CLDRFile;
     16 import org.unicode.cldr.util.Factory;
     17 import org.unicode.cldr.util.ICUServiceBuilder;
     18 import org.unicode.cldr.util.Log;
     19 
     20 import com.ibm.icu.text.UnicodeSet;
     21 import com.ibm.icu.util.ULocale;
     22 
     23 class GenerateCldrDateTimeTests {
     24     Map<ULocale, UnicodeSet> ulocale_exemplars = new TreeMap<ULocale, UnicodeSet>(GenerateCldrTests.ULocaleComparator);
     25     Map<UnicodeSet, UnicodeSet> uniqueExemplars = new HashMap<UnicodeSet, UnicodeSet>();
     26     Set<ULocale> locales = new TreeSet<ULocale>(GenerateCldrTests.ULocaleComparator);
     27 
     28     UnicodeSet getExemplarSet(ULocale locale) {
     29         return ulocale_exemplars.get(locale);
     30     }
     31 
     32     void show() {
     33         Log.logln("Showing Locales");
     34         Log.logln("Unique Exemplars: " + uniqueExemplars.size());
     35         for (Iterator<ULocale> it2 = ulocale_exemplars.keySet().iterator(); it2.hasNext();) {
     36             ULocale locale = it2.next();
     37             UnicodeSet us = getExemplarSet(locale);
     38             Log.logln("\t" + locale + ", " + us);
     39         }
     40     }
     41 
     42     static final ULocale ROOT = new ULocale("root"); // since CLDR has different root.
     43     private Factory cldrFactory;
     44     ICUServiceBuilder icuServiceBuilder;
     45 
     46     GenerateCldrDateTimeTests(String sourceDir, String localeRegex, boolean doResolved) {
     47         this.cldrFactory = Factory.make(sourceDir, ".*");
     48         icuServiceBuilder = new ICUServiceBuilder();
     49         Set<String> s = GenerateCldrTests.getMatchingXMLFiles(sourceDir, localeRegex);
     50         for (Iterator<String> it = s.iterator(); it.hasNext();) {
     51             getInfo(it.next(), doResolved);
     52         }
     53         // now do inheritance manually
     54         for (Iterator<ULocale> it = locales.iterator(); it.hasNext();) {
     55             ULocale locale = it.next();
     56             UnicodeSet ex = (UnicodeSet) ulocale_exemplars.get(locale);
     57             if (ex != null) continue;
     58             for (ULocale parent = locale.getFallback(); parent != null; parent = parent.getFallback()) {
     59                 ULocale fixedParent = parent.getLanguage().length() == 0 ? ROOT : parent;
     60                 ex = (UnicodeSet) ulocale_exemplars.get(fixedParent);
     61                 if (ex == null) continue;
     62                 ulocale_exemplars.put(locale, ex);
     63                 break;
     64             }
     65         }
     66 
     67     }
     68 
     69     void getInfo(String locale, boolean doResolved) {
     70         System.out.println("Getting info for: " + locale);
     71         locales.add(new ULocale(locale));
     72         CLDRFile cldrFile = cldrFactory.make(locale, doResolved);
     73         // Node node = LDMLUtilities.getNode(doc, "//ldml/characters/exemplarCharacters");
     74         String cpath = "//ldml/characters/exemplarCharacters";
     75         String path = cldrFile.getFullXPath(cpath);
     76         if (path == null) return;
     77         // if (path.indexOf("[@draft=") >= 0) System.out.println("Skipping draft: " + locale + ",\t" + path);
     78         String exemplars = cldrFile.getStringValue(cpath);
     79         UnicodeSet exemplarSet = new UnicodeSet(exemplars);
     80         UnicodeSet fixed = (UnicodeSet) uniqueExemplars.get(exemplarSet);
     81         if (fixed == null) {
     82             uniqueExemplars.put(exemplarSet, exemplarSet);
     83             fixed = exemplarSet;
     84         }
     85         ulocale_exemplars.put(new ULocale(locale), fixed);
     86     }
     87 
     88     // ========== DATES ==========
     89 
     90     /*
     91      * Equator DateEquator = new Equator() {
     92      *//**
     93        * Must both be ULocales
     94        */
     95     /*
     96      * public boolean equals(Object o1, Object o2) {
     97      * ULocale loc1 = (ULocale) o1;
     98      * ULocale loc2 = (ULocale) o2;
     99      * for (int i = 0; i < ICUServiceBuilder.LIMIT_DATE_FORMAT_INDEX; ++i) {
    100      * for (int j = 0; j < ICUServiceBuilder.LIMIT_DATE_FORMAT_INDEX; ++j) {
    101      * if (i == 0 && j == 0) continue; // skip null case
    102      * DateFormat df1 = icuServiceBuilder.getDateFormat(loc1.toString(), i, j);
    103      * NumberFormat nf = df1.getNumberFormat();
    104      * nf.setCurrency(ICUServiceBuilder.NO_CURRENCY);
    105      * df1.setNumberFormat(nf);
    106      * DateFormat df2 = icuServiceBuilder.getDateFormat(loc2.toString(), i, j);
    107      * nf = df2.getNumberFormat();
    108      * nf.setCurrency(ICUServiceBuilder.NO_CURRENCY);
    109      * df2.setNumberFormat(nf);
    110      * if (!df1.equals(df2)) {
    111      * df1.equals(df2);
    112      * return false;
    113      * }
    114      * }
    115      * }
    116      * return true;
    117      * }
    118      * };
    119      */
    120 
    121     /*
    122      * Equator ZoneEquator = new Equator() {
    123      *
    124      * public boolean equals(Object o1, Object o2) {
    125      * ULocale loc1 = (ULocale) o1;
    126      * ULocale loc2 = (ULocale) o2;
    127      * // locales are equivalent they have the same zone resources.
    128      * CLDRFile cldrFile1 = cldrFactory.make(loc1.toString(),true);
    129      * CLDRFile cldrFile2 = cldrFactory.make(loc1.toString(),true);
    130      * for (int i = 0; i < ICUServiceBuilder.LIMIT_DATE_FORMAT_INDEX; ++i) {
    131      * for (int j = 0; j < ICUServiceBuilder.LIMIT_DATE_FORMAT_INDEX; ++j) {
    132      * if (i == 0 && j == 0) continue; // skip null case
    133      * DateFormat df1 = icuServiceBuilder.getDateFormat(loc1.toString(), i, j);
    134      * NumberFormat nf = df1.getNumberFormat();
    135      * nf.setCurrency(ICUServiceBuilder.NO_CURRENCY);
    136      * df1.setNumberFormat(nf);
    137      * DateFormat df2 = icuServiceBuilder.getDateFormat(loc2.toString(), i, j);
    138      * nf = df2.getNumberFormat();
    139      * nf.setCurrency(ICUServiceBuilder.NO_CURRENCY);
    140      * df2.setNumberFormat(nf);
    141      * if (!df1.equals(df2)) {
    142      * df1.equals(df2);
    143      * return false;
    144      * }
    145      * }
    146      * }
    147      * return false;
    148      * }
    149      * };
    150      */
    151     // ========== NUMBERS ==========
    152 
    153     /*
    154      * <numbers>
    155      * -
    156      * <symbols>
    157      * <decimal>.</decimal>
    158      * <group>,</group>
    159      * <list>;</list>
    160      * <percentSign>%</percentSign>
    161      * <nativeZeroDigit>0</nativeZeroDigit>
    162      * <patternDigit>#</patternDigit>
    163      * <plusSign>+</plusSign>
    164      * <minusSign>-</minusSign>
    165      * <exponential>E</exponential>
    166      * <perMille>\u2030</perMille>
    167      * <infinity>\u221E</infinity>
    168      * <nan>NaN</nan>
    169      * </symbols>
    170      * -
    171      * <decimalFormats>
    172      * -
    173      * <decimalFormatLength>
    174      * -
    175      * <decimalFormat>
    176      * <pattern>#,##0.###</pattern>
    177      */
    178 
    179     /*
    180      * Equator NumberEquator = new Equator() {
    181      *//**
    182        * Must both be ULocales
    183        */
    184     /*
    185      * public boolean equals(Object o1, Object o2) {
    186      * ULocale loc1 = (ULocale) o1;
    187      * ULocale loc2 = (ULocale) o2;
    188      * for (int i = 0; i < ICUServiceBuilder.LIMIT_NUMBER_INDEX; ++i) {
    189      * NumberFormat nf1 = icuServiceBuilder.getNumberFormat(loc1.toString(), i);
    190      * NumberFormat nf2 = icuServiceBuilder.getNumberFormat(loc2.toString(), i);
    191      * boolean result = nf1.equals(nf2);
    192      * if (!result) {
    193      * return false;
    194      * }
    195      * }
    196      * return true;
    197      * }
    198      * };
    199      */
    200 
    201     /**
    202      *
    203      */
    204     public ICUServiceBuilder getICUServiceBuilder() {
    205         return icuServiceBuilder;
    206     }
    207 }