/[classpath]/cp-tools/src/gnu/localegen/JavaGenerator.java
ViewVC logotype

Diff of /cp-tools/src/gnu/localegen/JavaGenerator.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.22 by cbj, Sun Jan 30 01:52:04 2005 UTC revision 1.23 by cbj, Sun Jan 30 02:21:07 2005 UTC
# Line 19  import gnu.ldml.OrderedListElement; Line 19  import gnu.ldml.OrderedListElement;
19  public class JavaGenerator  public class JavaGenerator
20  {  {
21    private static final int JAVA_HEXLENGTH = 4;    private static final int JAVA_HEXLENGTH = 4;
   
22    private final Collection analyzers;    private final Collection analyzers;
23    private final String locale;    private final String locale;
24    private final String inPackage;    private final String inPackage;
25    private ArrayList localeContents = new ArrayList();    private ArrayList localeContents = new ArrayList();
26      private static final String[] classpathDateFormats = { "shortDateFormat",
27    private static final String[] classpathDateFormats =                                                          "mediumDateFormat",
28    {                                                          "longDateFormat",
29      "shortDateFormat", "mediumDateFormat", "longDateFormat", "fullDateFormat"                                                          "fullDateFormat" };
30    };    private static final String[] classpathTimeFormats = { "shortTimeFormat",
31                                                            "mediumTimeFormat",
32    private static final String[] classpathTimeFormats =                                                          "longTimeFormat",
33    {                                                          "fullTimeFormat" };
34      "shortTimeFormat", "mediumTimeFormat", "longTimeFormat", "fullTimeFormat"    private static final String[] classpathZoneOrder = { "zone.short.standard",
35    };                                                        "zone.long.standard",
36                                                          "zone.short.daylight",
37    private static final String[] classpathZoneOrder =                                                        "zone.long.daylight" };
   {  
     "zone.short.standard", "zone.long.standard", "zone.short.daylight", "zone.long.daylight"  
   };  
   
38    private static final String collatorIdentifiers = "<=,;@&!";    private static final String collatorIdentifiers = "<=,;@&!";
39    
40    /*    /*
# Line 48  public class JavaGenerator Line 43  public class JavaGenerator
43    interface JavaContent    interface JavaContent
44    {    {
45      String getName();      String getName();
46    
47      String getData();      String getData();
48    
49      boolean isPackage();      boolean isPackage();
50    
51      void generateContent(PrintWriter o);      void generateContent(PrintWriter o);
52    }    }
53    
# Line 60  public class JavaGenerator Line 58  public class JavaGenerator
58    {    {
59      if (s == null)      if (s == null)
60        return "null";        return "null";
   
61      StringBuffer buf = new StringBuffer();      StringBuffer buf = new StringBuffer();
       
62      for (int i = 0; i < s.length(); i++)      for (int i = 0; i < s.length(); i++)
63        {        {
64          char c = s.charAt(i);          char c = s.charAt(i);
65          // Transform non-ASCII character into an escaped unicode character.          // Transform non-ASCII character into an escaped unicode character.
66          if (c > 127)          if (c > 127)
67            {            {
68              buf.append("\\u");              buf.append("\\u");
69              String hexString = Integer.toHexString((int)c);              String hexString = Integer.toHexString((int) c);
70              for (int j = 0; j < JAVA_HEXLENGTH-hexString.length(); j++)              for (int j = 0; j < JAVA_HEXLENGTH - hexString.length(); j++)
71                buf.append('0');                buf.append('0');
72              buf.append(hexString);              buf.append(hexString);
73            }            }
74          else if (c == '"')          else if (c == '"')
75            {            {
76              buf.append("\\\"");              buf.append("\\\"");
77            }            }
78          else if (c == '\\')          else if (c == '\\')
79            {            {
80              buf.append("\\\\");              buf.append("\\\\");
81            }            }
82          else          else
83            buf.append(c);            buf.append(c);
84        }        }
85      return buf.toString();      return buf.toString();
86    }    }
87    
88    /*    /*
89     * This class implements JavaContent for simple string locale data.     * This class implements JavaContent for simple string locale data. The entry
90     * The entry has the name "name" and contains the data specified by "data".     * has the name "name" and contains the data specified by "data".
91     */     */
92    class StringContent implements JavaContent    class StringContent implements JavaContent
93    {    {
94      private String name;      private String name;
# Line 118  public class JavaGenerator Line 114  public class JavaGenerator
114      {      {
115        return data;        return data;
116      }      }
117        
118      public void generateContent(PrintWriter o)      public void generateContent(PrintWriter o)
119      {      {
120      }      }
121    }    }
122    
123    /*    /*
124     * This class implements JavaContent for big string locale data.     * This class implements JavaContent for big string locale data. The entry has
125     * The entry has the name "name" and contains the data specified by "data".     * the name "name" and contains the data specified by "data".
126     */     */
127    class BigStringContent implements JavaContent    class BigStringContent implements JavaContent
128    {    {
129      private String name;      private String name;
# Line 153  public class JavaGenerator Line 149  public class JavaGenerator
149      {      {
150        return null;        return null;
151      }      }
152        
153      public void generateContent(PrintWriter o)      public void generateContent(PrintWriter o)
154      {      {
155        int pos = 0;        int pos = 0;
156        int charOnLine = 0;        int charOnLine = 0;
   
157        o.println("  private static final String " + name + " = ");        o.println("  private static final String " + name + " = ");
158        o.print("\t\"");        o.print("\t\"");
159        while (pos < data.length())        while (pos < data.length())
160          {          {
161            if (charOnLine >= 60)            if (charOnLine >= 60)
162              {              {
163                o.println("\" +");                o.println("\" +");
164                o.print("\t\"");                o.print("\t\"");
165                charOnLine = 0;                charOnLine = 0;
166              }              }
167            if (data.charAt(pos) == '\\' && charOnLine >= 54)            if (data.charAt(pos) == '\\' && charOnLine >= 54)
168              {              {
169                charOnLine = 60;                charOnLine = 60;
170                continue;                continue;
171              }              }
172                        o.print(data.charAt(pos));
173            o.print(data.charAt(pos));            pos++;
174            pos++;            charOnLine++;
175            charOnLine++;          }
         }  
   
176        o.println("\";");        o.println("\";");
177      }      }
178    }    }
179    
180    /*    /*
181     * This class implements JavaContent for simple ordered list.     * This class implements JavaContent for simple ordered list. The lists are
182     * The lists are ordered according to their index in the array.     * ordered according to their index in the array. The class builds an external
183     * The class builds an external array of Object to store the list     * array of Object to store the list and use the identifier name for both the
184     * and use the identifier name for both the locale id name and the java     * locale id name and the java object name.
    * object name.  
185     */     */
186    class ManualListContent implements JavaContent    class ManualListContent implements JavaContent
187    {    {
# Line 216  public class JavaGenerator Line 208  public class JavaGenerator
208      {      {
209        return null;        return null;
210      }      }
211        
212      public void generateContent(PrintWriter o)      public void generateContent(PrintWriter o)
213      {      {
214        o.println("  private static final String[] " + name + " = {");        o.println("  private static final String[] " + name + " = {");
   
215        for (int i = 0; i < data.length; i++)        for (int i = 0; i < data.length; i++)
216          {          {
217            o.print("    \"" + convertToJavaString(data[i].toString()) + "\"");            o.print("    \"" + convertToJavaString(data[i].toString()) + "\"");
218            o.println(",");            o.println(",");
219          }          }
   
220        o.println("  };");        o.println("  };");
221      }        }
222    }    }
223    
224    /*    /*
225     * This class implements JavaContent for string ordered list.     * This class implements JavaContent for string ordered list. The constructor
226     * The constructor accepts a hashtable and an array of strings to specify     * accepts a hashtable and an array of strings to specify the order. It can
227     * the order. It can also optionally adds some "null" entries at the beginning     * also optionally adds some "null" entries at the beginning of the array with
228     * of the array with addNull.     * addNull.
229     */     */
230    class OrderedListContent implements JavaContent    class OrderedListContent implements JavaContent
231    {    {
# Line 245  public class JavaGenerator Line 235  public class JavaGenerator
235      private int prependNull;      private int prependNull;
236      private int appendNull;      private int appendNull;
237    
238      public OrderedListContent(String name, Hashtable data, String[] order, int prependNull, int appendNull)      public OrderedListContent(String name, Hashtable data, String[] order,
239                                  int prependNull, int appendNull)
240      {      {
241        this.name = name;        this.name = name;
242        this.data = data;        this.data = data;
# Line 268  public class JavaGenerator Line 259  public class JavaGenerator
259      {      {
260        return null;        return null;
261      }      }
262        
263      public void generateContent(PrintWriter o)      public void generateContent(PrintWriter o)
264      {      {
265        o.println("  private static final String[] " + name + " = {");        o.println("  private static final String[] " + name + " = {");
   
266        for (int i = 0; i < prependNull; i++)        for (int i = 0; i < prependNull; i++)
267          o.println("    null,");          o.println("    null,");
   
268        for (int i = 0; i < order.length; i++)        for (int i = 0; i < order.length; i++)
269          {          {
270            Object contentElement = data.get(order[i]);            Object contentElement = data.get(order[i]);
271              if (contentElement == null)
272            if (contentElement == null)              o.print("    null");
273              o.print("    null");            else
274            else              o.print("    \"" + convertToJavaString(contentElement.toString())
275              o.print("    \"" + convertToJavaString(contentElement.toString()) + "\"");                      + "\"");
276            o.println(",");            o.println(",");
277          }          }
   
278        for (int i = 0; i < appendNull; i++)        for (int i = 0; i < appendNull; i++)
279          o.println("    null,");          o.println("    null,");
   
280        o.println("  };");        o.println("  };");
281      }      }
282    }    }
# Line 317  public class JavaGenerator Line 304  public class JavaGenerator
304      {      {
305        return null;        return null;
306      }      }
307        
308      public void generateContent(PrintWriter o)      public void generateContent(PrintWriter o)
309      {      {
310        Enumeration keys = listElt.listData.keys();        Enumeration keys = listElt.listData.keys();
   
311        o.println("  private static final String[][] zoneStrings =");        o.println("  private static final String[][] zoneStrings =");
312        o.println("  {");        o.println("  {");
   
313        while (keys.hasMoreElements())        while (keys.hasMoreElements())
314          {          {
315            String zoneName = (String)keys.nextElement();            String zoneName = (String) keys.nextElement();
316            Hashtable zoneTable;            Hashtable zoneTable;
317            Iterator allValues;            Iterator allValues;
318            DataElement zoneData;            DataElement zoneData;
319              o.print("    { ");
320            o.print("    { ");            zoneTable = listElt.flattenLeaf(zoneName);
321                        for (int j = 0; j < classpathZoneOrder.length; j++)
322            zoneTable = listElt.flattenLeaf(zoneName);              {
323            for (int j = 0; j < classpathZoneOrder.length; j++)                zoneData = (DataElement) zoneTable.get(classpathZoneOrder[j]);
324            {                if (zoneData != null)
325              zoneData = (DataElement)zoneTable.get(classpathZoneOrder[j]);                  o.print("\"" + convertToJavaString(zoneData.data) + "\", ");
326              if (zoneData != null)                else
327                o.print("\"" + convertToJavaString(zoneData.data) + "\", ");                  /* TODO: Emit a warning here "Insufficient data" */
328              else                  o.print("\"\", ");
329                /* TODO: Emit a warning here "Insufficient data" */              }
330                o.print("\"\", ");            o.println(" \"" + zoneName + "\" },");
331            }          }
   
           o.println(" \"" + zoneName + "\" },");  
         }  
332        o.println("  };");        o.println("  };");
333      }      }
334    }    }
# Line 355  public class JavaGenerator Line 337  public class JavaGenerator
337    {    {
338      private String name;      private String name;
339      private Hashtable table;      private Hashtable table;
340        
341      public HashtableContent(String name, Hashtable table)      public HashtableContent(String name, Hashtable table)
342      {      {
343        this.name = name;        this.name = name;
# Line 383  public class JavaGenerator Line 365  public class JavaGenerator
365        Enumeration keys = table.keys();        Enumeration keys = table.keys();
366        boolean more = keys.hasMoreElements();        boolean more = keys.hasMoreElements();
367        while (more)        while (more)
368          {          {
369            String key = (String) keys.nextElement();            String key = (String) keys.nextElement();
370            if (key.indexOf("|") != -1)            if (key.indexOf("|") != -1)
371              {              {
372                System.err.println(name + " key: '" + key + "' contains |");                System.err.println(name + " key: '" + key + "' contains |");
373                System.exit(-1);                System.exit(-1);
374              }              }
375            o.print(key);            o.print(key);
376            more = keys.hasMoreElements();            more = keys.hasMoreElements();
377            if (more)            if (more)
378              o.print('|');              o.print('|');
379          }          }
380        o.println("\";");        o.println("\";");
381        o.println();        o.println();
   
382        o.print("  private static final String " + name + "Values = \"");        o.print("  private static final String " + name + "Values = \"");
383        keys = table.keys();        keys = table.keys();
384        more = keys.hasMoreElements();        more = keys.hasMoreElements();
385        while (more)        while (more)
386          {          {
387            String key = (String) keys.nextElement();            String key = (String) keys.nextElement();
388            String value = (String) table.get(key);            String value = (String) table.get(key);
389            value = convertToJavaString(value);            value = convertToJavaString(value);
390            if (value.indexOf("|") != -1)            if (value.indexOf("|") != -1)
391              {              {
392                System.err.println(name + " value: '" + value + "' contains |");                System.err.println(name + " value: '" + value + "' contains |");
393                System.exit(-1);                System.exit(-1);
394              }              }
395            o.print(value);            o.print(value);
396            more = keys.hasMoreElements();            more = keys.hasMoreElements();
397            if (more)            if (more)
398              o.print('|');              o.print('|');
399          }          }
400        o.println("\";");        o.println("\";");
401        o.println();        o.println();
   
402        o.println("  private static final Hashtable " + name + ";");        o.println("  private static final Hashtable " + name + ";");
403        o.println("  static");        o.println("  static");
404        o.println("  {");        o.println("  {");
405        o.println("    " + name + " = new Hashtable();");        o.println("    " + name + " = new Hashtable();");
406        o.println("    Enumeration keys = new StringTokenizer(" + name        o.println("    Enumeration keys = new StringTokenizer(" + name
407                  + "Keys, \"|\");");                  + "Keys, \"|\");");
408        o.println("    Enumeration values = new StringTokenizer(" + name        o.println("    Enumeration values = new StringTokenizer(" + name
409                  + "Values, \"|\");");                  + "Values, \"|\");");
410        o.println("    while (keys.hasMoreElements())");        o.println("    while (keys.hasMoreElements())");
411        o.println("      {");        o.println("      {");
412        o.println("         String key = (String) keys.nextElement();");        o.println("         String key = (String) keys.nextElement();");
# Line 440  public class JavaGenerator Line 420  public class JavaGenerator
420    /*    /*
421     * Main body of the Java Locale generator.     * Main body of the Java Locale generator.
422     */     */
   
423    public JavaGenerator(String inPackage, Collection analyzers, String locale)    public JavaGenerator(String inPackage, Collection analyzers, String locale)
424    {    {
425      this.analyzers = analyzers;      this.analyzers = analyzers;
# Line 450  public class JavaGenerator Line 429  public class JavaGenerator
429    
430    public void addStringContent(Hashtable tree, String ref, String name)    public void addStringContent(Hashtable tree, String ref, String name)
431    {    {
432      DataElement data_elt = (DataElement)tree.get(ref);      DataElement data_elt = (DataElement) tree.get(ref);
   
433      if (data_elt == null)      if (data_elt == null)
434        return;        return;
   
435      localeContents.add(new StringContent(name, data_elt.data));      localeContents.add(new StringContent(name, data_elt.data));
436    }    }
437    
438    public void addOrderedListContent(Hashtable tree, String ref, String name, String[] order,    public void addOrderedListContent(Hashtable tree, String ref, String name,
439                                      int prependNull, int appendNull)                                      String[] order, int prependNull,
440                                        int appendNull)
441    {    {
442      ListDataElement data_elt = (ListDataElement)tree.get(ref);      ListDataElement data_elt = (ListDataElement) tree.get(ref);
   
443      if (data_elt == null)      if (data_elt == null)
444        return;        return;
445        localeContents.add(new OrderedListContent(name, data_elt.listData, order,
446      localeContents.add(new OrderedListContent(name, data_elt.listData, order, prependNull, appendNull));                                                prependNull, appendNull));
447    }    }
448    
449    private void computeCalendar(Hashtable flattree)    private void computeCalendar(Hashtable flattree)
450    {    {
451      ListDataElement calendarElement;      ListDataElement calendarElement;
452        calendarElement = (ListDataElement) flattree.get("ldml.dates.calendars");
     calendarElement = (ListDataElement)flattree.get("ldml.dates.calendars");  
453      if (calendarElement != null)      if (calendarElement != null)
454        {        {
455          // GNU Classpath only supports gregorian calendar ATM. We will upgrade the code          // GNU Classpath only supports gregorian calendar ATM. We will upgrade
456          // once it has been done in GNU Classpath.          // the code
457          Hashtable calendarLeaf = calendarElement.flattenLeaf("gregorian");          // once it has been done in GNU Classpath.
458          int i = 0;          Hashtable calendarLeaf = calendarElement.flattenLeaf("gregorian");
459            int i = 0;
460          if (calendarLeaf == null)          if (calendarLeaf == null)
461            return;            return;
462                    addOrderedListContent(
463          addOrderedListContent(calendarLeaf,                                calendarLeaf,
464                                "calendar.months.monthContext.monthWidth.abbreviated", "shortMonths",                                "calendar.months.monthContext.monthWidth.abbreviated",
465                                gnu.ldml.Constants.monthsOrder[i], 0, 1);                                "shortMonths", gnu.ldml.Constants.monthsOrder[i],
466          addOrderedListContent(calendarLeaf, "calendar.months.monthContext.monthWidth.wide", "months",                                0, 1);
467                                gnu.ldml.Constants.monthsOrder[i], 0, 1);          addOrderedListContent(calendarLeaf,
468                                          "calendar.months.monthContext.monthWidth.wide",
469          addOrderedListContent(calendarLeaf, "calendar.days.dayContext.dayWidth.abbreviated", "shortWeekdays",                                "months", gnu.ldml.Constants.monthsOrder[i], 0, 1);
470                                gnu.ldml.Constants.daysOrder, 1, 0);          addOrderedListContent(calendarLeaf,
471          addOrderedListContent(calendarLeaf, "calendar.days.dayContext.dayWidth.wide", "weekdays",                                "calendar.days.dayContext.dayWidth.abbreviated",
472                                gnu.ldml.Constants.daysOrder, 1, 0);                                "shortWeekdays", gnu.ldml.Constants.daysOrder, 1,
473                                  0);
474          /* ERAS */          addOrderedListContent(calendarLeaf,
475          ListDataElement eraElement = (ListDataElement)calendarLeaf.get("calendar.eras.eraAbbr");                                "calendar.days.dayContext.dayWidth.wide",
476          if (eraElement != null)                                "weekdays", gnu.ldml.Constants.daysOrder, 1, 0);
477            {          /* ERAS */
478              String ac = (String)eraElement.listData.get("0");          ListDataElement eraElement = (ListDataElement) calendarLeaf
479              String bc = (String)eraElement.listData.get("1");            .get("calendar.eras.eraAbbr");
480            if (eraElement != null)
481              if (ac != null && bc != null)            {
482                localeContents.add(new ManualListContent("eras", new Object[] { ac, bc }));              String ac = (String) eraElement.listData.get("0");
483            }              String bc = (String) eraElement.listData.get("1");
484                        if (ac != null && bc != null)
485          DataElement amElement, pmElement;                localeContents
486                            .add(new ManualListContent("eras", new Object[] { ac, bc }));
487          /* AM-PM */            }
488          amElement = (DataElement)calendarLeaf.get("calendar.am");          DataElement amElement, pmElement;
489          pmElement = (DataElement)calendarLeaf.get("calendar.pm");          /* AM-PM */
490          if (amElement != null && pmElement != null)          amElement = (DataElement) calendarLeaf.get("calendar.am");
491            {          pmElement = (DataElement) calendarLeaf.get("calendar.pm");
492              localeContents.add(new ManualListContent("ampms",          if (amElement != null && pmElement != null)
493                                                       new Object[] {            {
494                                                         amElement.data, pmElement.data              localeContents
495                                                       }));                .add(new ManualListContent("ampms",
496            }                                           new Object[] { amElement.data,
497                                                           pmElement.data }));
498          /* Compute all date formats */            }
499          ListDataElement dateFormats = (ListDataElement)calendarLeaf.get("calendar.dateFormats");          /* Compute all date formats */
500          if (dateFormats != null)          ListDataElement dateFormats = (ListDataElement) calendarLeaf
501            {            .get("calendar.dateFormats");
502              for (int j = 0; j < gnu.ldml.Constants.dateFormats.length; j++)          if (dateFormats != null)
503                {            {
504                  Hashtable dateFormat = dateFormats.flattenLeaf(gnu.ldml.Constants.dateFormats[j]);              for (int j = 0; j < gnu.ldml.Constants.dateFormats.length; j++)
505                  {
506                  if (dateFormat == null)                  Hashtable dateFormat = dateFormats
507                    continue;                    .flattenLeaf(gnu.ldml.Constants.dateFormats[j]);
508                    if (dateFormat == null)
509                  addStringContent(dateFormat, "dateFormatLength.dateFormat.pattern", classpathDateFormats[j]);                    continue;
510                }                  addStringContent(dateFormat,
511            }                                   "dateFormatLength.dateFormat.pattern",
512                                     classpathDateFormats[j]);
513          /* Compute all time formats */                }
514          ListDataElement timeFormats = (ListDataElement)calendarLeaf.get("calendar.timeFormats");            }
515          if (timeFormats != null)          /* Compute all time formats */
516            {          ListDataElement timeFormats = (ListDataElement) calendarLeaf
517              for (int j = 0; j < gnu.ldml.Constants.timeFormats.length; j++)            .get("calendar.timeFormats");
518                {          if (timeFormats != null)
519                  Hashtable timeFormat = timeFormats.flattenLeaf(gnu.ldml.Constants.timeFormats[j]);            {
520                for (int j = 0; j < gnu.ldml.Constants.timeFormats.length; j++)
521                  if (timeFormat == null)                {
522                    continue;                  Hashtable timeFormat = timeFormats
523                      .flattenLeaf(gnu.ldml.Constants.timeFormats[j]);
524                  addStringContent(timeFormat, "timeFormatLength.timeFormat.pattern", classpathTimeFormats[j]);                  if (timeFormat == null)
525                }                    continue;
526            }                  addStringContent(timeFormat,
527                                     "timeFormatLength.timeFormat.pattern",
528                                     classpathTimeFormats[j]);
529                  }
530              }
531        }        }
532    }    }
533    
534    private void computeCollations(Hashtable flattree)    private void computeCollations(Hashtable flattree)
535    {    {
536      ListDataElement collations = (ListDataElement)flattree.get("ldml.collations");      ListDataElement collations = (ListDataElement) flattree
537              .get("ldml.collations");
538      if (collations == null)      if (collations == null)
539        return;        return;
       
540      Hashtable table = collations.flattenLeaf("standard");      Hashtable table = collations.flattenLeaf("standard");
541      if (table == null)      if (table == null)
542        return;        return;
       
543      System.err.println("Found UCA table for collation rules");      System.err.println("Found UCA table for collation rules");
544            OrderedListElement listElt = (OrderedListElement) table
545      OrderedListElement listElt = (OrderedListElement)table.get("collation.rules");        .get("collation.rules");
546      if (listElt == null)      if (listElt == null)
547        return;        return;
       
548      System.err.println("Found rules");      System.err.println("Found rules");
       
549      CollationInterpreter interp = new CollationInterpreter(listElt.listData);      CollationInterpreter interp = new CollationInterpreter(listElt.listData);
       
550      interp.compute();      interp.compute();
551            localeContents.add(new BigStringContent("collation_rules", interp
552      localeContents.add(new BigStringContent("collation_rules", interp.toCollationRule()));        .toCollationRule()));
553    }    }
554    
555    private void computeHashtable(String name, Hashtable table)    private void computeHashtable(String name, Hashtable table)
# Line 584  public class JavaGenerator Line 559  public class JavaGenerator
559    
560    private void computeTimeZones(Hashtable flattree)    private void computeTimeZones(Hashtable flattree)
561    {    {
562      Element elt = (Element)flattree.get("ldml.dates.timeZoneNames");      Element elt = (Element) flattree.get("ldml.dates.timeZoneNames");
       
563      if (elt != null)      if (elt != null)
564        localeContents.add(new TimeZoneContent((ListDataElement)elt));        localeContents.add(new TimeZoneContent((ListDataElement) elt));
565    }    }
566    
567    private void computeLocalNames(Hashtable flattree)    private void computeLocalNames(Hashtable flattree)
568    {    {
569      ListDataElement elt = (ListDataElement)flattree.get("ldml.localeDisplayNames.territories");      ListDataElement elt = (ListDataElement) flattree
570          .get("ldml.localeDisplayNames.territories");
571      if (elt != null)      if (elt != null)
572        localeContents.add(new HashtableContent("territories", elt.listData));        localeContents.add(new HashtableContent("territories", elt.listData));
573        elt = (ListDataElement) flattree.get("ldml.localeDisplayNames.languages");
     elt = (ListDataElement)flattree.get("ldml.localeDisplayNames.languages");  
   
574      if (elt != null)      if (elt != null)
575        localeContents.add(new HashtableContent("languages", elt.listData));        localeContents.add(new HashtableContent("languages", elt.listData));
576        elt = (ListDataElement) flattree.get("ldml.localeDisplayNames.variants");
     elt = (ListDataElement)flattree.get("ldml.localeDisplayNames.variants");  
   
577      if (elt != null)      if (elt != null)
578        localeContents.add(new HashtableContent("variants", elt.listData));        localeContents.add(new HashtableContent("variants", elt.listData));
579    }    }
580    
581    private void computeCurrencies(Hashtable flattree)    private void computeCurrencies(Hashtable flattree)
582    {    {
583      ListDataElement elt = (ListDataElement)flattree.get("ldml.numbers.currencies");      ListDataElement elt = (ListDataElement) flattree
584          .get("ldml.numbers.currencies");
   
585      if (elt == null)      if (elt == null)
586        return;        return;
   
587      Enumeration currencyKeys = elt.listData.keys();      Enumeration currencyKeys = elt.listData.keys();
588      Hashtable currencyName = new Hashtable();      Hashtable currencyName = new Hashtable();
589      Hashtable currencySymbol = new Hashtable();      Hashtable currencySymbol = new Hashtable();
   
590      while (currencyKeys.hasMoreElements())      while (currencyKeys.hasMoreElements())
591      {        {
592           String code = (String)currencyKeys.nextElement();          String code = (String) currencyKeys.nextElement();
593           Hashtable currencyTable = elt.flattenLeaf(code);          Hashtable currencyTable = elt.flattenLeaf(code);
594           DataElement displayName = (DataElement)currencyTable.get("currency.displayName");          DataElement displayName = (DataElement) currencyTable
595           DataElement symbol = (DataElement)currencyTable.get("currency.symbol");            .get("currency.displayName");
596            DataElement symbol = (DataElement) currencyTable.get("currency.symbol");
597           if (displayName != null)          if (displayName != null)
598             currencyName.put(code, displayName.data);            currencyName.put(code, displayName.data);
599            if (symbol != null)
600           if (symbol != null)            currencySymbol.put(code, symbol.data);
601             currencySymbol.put(code, symbol.data);        }
602      }      localeContents.add(new HashtableContent("currenciesDisplayName",
603                                                currencyName));
604      localeContents.add(new HashtableContent("currenciesDisplayName", currencyName));      localeContents
605      localeContents.add(new HashtableContent("currenciesSymbol", currencySymbol));        .add(new HashtableContent("currenciesSymbol", currencySymbol));
606    }    }
607      
608    private void computeContents()    private void computeContents()
609    {    {
610      for (Iterator i = analyzers.iterator(); i.hasNext(); )      for (Iterator i = analyzers.iterator(); i.hasNext();)
611        {        {
612          Analyzer analyzer = (Analyzer) i.next();          Analyzer analyzer = (Analyzer) i.next();
613          Hashtable flattree = analyzer.flattenTree();          Hashtable flattree = analyzer.flattenTree();
614                    addStringContent(flattree, "ldml.numbers.symbols.percentSign",
615          addStringContent(flattree, "ldml.numbers.symbols.percentSign", "percent");                           "percent");
616          addStringContent(flattree, "ldml.numbers.symbols.perMille", "perMill");          addStringContent(flattree, "ldml.numbers.symbols.perMille", "perMill");
617          addStringContent(flattree, "ldml.numbers.symbols.exponential", "exponential");          addStringContent(flattree, "ldml.numbers.symbols.exponential",
618                             "exponential");
619          addStringContent(flattree, "ldml.numbers.symbols.infinity", "infinity");          addStringContent(flattree, "ldml.numbers.symbols.infinity", "infinity");
620          addStringContent(flattree, "ldml.numbers.symbols.nan", "NaN");          addStringContent(flattree, "ldml.numbers.symbols.nan", "NaN");
621          addStringContent(flattree, "ldml.numbers.symbols.minusSign", "minusSign");          addStringContent(flattree, "ldml.numbers.symbols.minusSign",
622          addStringContent(flattree, "ldml.numbers.symbols.nativeZeroDigit", "zeroDigit");                           "minusSign");
623          addStringContent(flattree, "ldml.numbers.symbols.decimal", "decimalSeparator");          addStringContent(flattree, "ldml.numbers.symbols.nativeZeroDigit",
624          addStringContent(flattree, "ldml.numbers.symbols.group", "groupingSeparator");                           "zeroDigit");
625            addStringContent(flattree, "ldml.numbers.symbols.decimal",
626                             "decimalSeparator");
627            addStringContent(flattree, "ldml.numbers.symbols.group",
628                             "groupingSeparator");
629          addStringContent(flattree, "ldml.numbers.symbols.patternDigit", "digit");          addStringContent(flattree, "ldml.numbers.symbols.patternDigit", "digit");
630          addStringContent(flattree, "ldml.numbers.percentFormats.percentFormatLength.percentFormat.pattern", "percentFormat");          addStringContent(
631          addStringContent(flattree, "ldml.numbers.currencyFormats.currencyFormatLength.currencyFormat.pattern", "currencyFormat");                           flattree,
632          addStringContent(flattree, "ldml.dates.localizedPatternChars", "localPatternChars");                           "ldml.numbers.percentFormats.percentFormatLength.percentFormat.pattern",
633                                     "percentFormat");
634          computeCurrencies(flattree);          addStringContent(
635                             flattree,
636                             "ldml.numbers.currencyFormats.currencyFormatLength.currencyFormat.pattern",
637                             "currencyFormat");
638            addStringContent(flattree, "ldml.dates.localizedPatternChars",
639                             "localPatternChars");
640            computeCurrencies(flattree);
641          computeCalendar(flattree);          computeCalendar(flattree);
642          computeCollations(flattree);          computeCollations(flattree);
643          computeTimeZones(flattree);          computeTimeZones(flattree);
# Line 670  public class JavaGenerator Line 648  public class JavaGenerator
648    public void generateJavaHeader(PrintWriter o)    public void generateJavaHeader(PrintWriter o)
649    {    {
650      String suffix = ("root".equals(locale)) ? "" : "_" + locale;      String suffix = ("root".equals(locale)) ? "" : "_" + locale;
       
651      o.println("/* LocaleInformation" + suffix + ".java --");      o.println("/* LocaleInformation" + suffix + ".java --");
652      o.println("   Copyright (C) 2004  Free Software Foundation, Inc.");      o.println("   Copyright (C) 2004  Free Software Foundation, Inc.");
653      o.println();      o.println();
654      o.println("This file is part of GNU Classpath.");      o.println("This file is part of GNU Classpath.");
655      o.println();      o.println();
656      o.println("GNU Classpath is free software; you can redistribute it and/or modify");      o
657      o.println("it under the terms of the GNU General Public License as published by");        .println("GNU Classpath is free software; you can redistribute it and/or modify");
658      o.println("the Free Software Foundation; either version 2, or (at your option)");      o
659          .println("it under the terms of the GNU General Public License as published by");
660        o
661          .println("the Free Software Foundation; either version 2, or (at your option)");
662      o.println("any later version.");      o.println("any later version.");
663      o.println();      o.println();
664      o.println("GNU Classpath is distributed in the hope that it will be useful, but");      o
665          .println("GNU Classpath is distributed in the hope that it will be useful, but");
666      o.println("WITHOUT ANY WARRANTY; without even the implied warranty of");      o.println("WITHOUT ANY WARRANTY; without even the implied warranty of");
667      o.println("MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU");      o
668          .println("MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU");
669      o.println("General Public License for more details.");      o.println("General Public License for more details.");
670      o.println();      o.println();
671      o.println("You should have received a copy of the GNU General Public License");      o
672      o.println("along with GNU Classpath; see the file COPYING.  If not, write to the");        .println("You should have received a copy of the GNU General Public License");
673      o.println("Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA");      o
674          .println("along with GNU Classpath; see the file COPYING.  If not, write to the");
675        o
676          .println("Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA");
677      o.println("02111-1307 USA.");      o.println("02111-1307 USA.");
678      o.println();      o.println();
679      o.println("Linking this library statically or dynamically with other modules is");      o
680      o.println("making a combined work based on this library.  Thus, the terms and");        .println("Linking this library statically or dynamically with other modules is");
681        o
682          .println("making a combined work based on this library.  Thus, the terms and");
683      o.println("conditions of the GNU General Public License cover the whole");      o.println("conditions of the GNU General Public License cover the whole");
684      o.println("combination.");      o.println("combination.");
685      o.println();      o.println();
686      o.println("As a special exception, the copyright holders of this library give you");      o
687      o.println("permission to link this library with independent modules to produce an");        .println("As a special exception, the copyright holders of this library give you");
688      o.println("executable, regardless of the license terms of these independent");      o
689      o.println("modules, and to copy and distribute the resulting executable under");        .println("permission to link this library with independent modules to produce an");
690      o.println("terms of your choice, provided that you also meet, for each linked");      o
691      o.println("independent module, the terms and conditions of the license of that");        .println("executable, regardless of the license terms of these independent");
692      o.println("module.  An independent module is a module which is not derived from");      o
693      o.println("or based on this library.  If you modify this library, you may extend");        .println("modules, and to copy and distribute the resulting executable under");
694        o
695          .println("terms of your choice, provided that you also meet, for each linked");
696        o
697          .println("independent module, the terms and conditions of the license of that");
698        o
699          .println("module.  An independent module is a module which is not derived from");
700        o
701          .println("or based on this library.  If you modify this library, you may extend");
702      o.println("this exception to your version of the library, but you are not");      o.println("this exception to your version of the library, but you are not");
703      o.println("obligated to do so.  If you do not wish to do so, delete this");      o.println("obligated to do so.  If you do not wish to do so, delete this");
704      o.println("exception statement from your version. */");      o.println("exception statement from your version. */");
705      o.println();      o.println();
706      o.println();      o.println();
707      o.println("// This file was automatically generated by gnu.localegen from LDML");      o
708          .println("// This file was automatically generated by gnu.localegen from LDML");
709      o.println();      o.println();
710      o.println("package " + inPackage + ';');      o.println("package " + inPackage + ';');
711      o.println();      o.println();
# Line 724  public class JavaGenerator Line 720  public class JavaGenerator
720    {    {
721      o.println("  private static final Object[][] contents =");      o.println("  private static final Object[][] contents =");
722      o.println("  {");      o.println("  {");
723        for (int i = 0; i < localeContents.size(); i++)
     for (int i=0;i<localeContents.size();i++)  
724        {        {
725          JavaContent content = (JavaContent)localeContents.get(i);          JavaContent content = (JavaContent) localeContents.get(i);
726                    if (content.isPackage())
727          if (content.isPackage())            o.print("    { \"" + content.getName() + "\", " + content.getName()
728            o.print("    { \"" + content.getName() + "\", " + content.getName() + " }");                    + " }");
729          else          else
730            o.print("    { \"" + content.getName() + "\", \"" + convertToJavaString(content.getData()) + "\" }");            o.print("    { \"" + content.getName() + "\", \""
731                      + convertToJavaString(content.getData()) + "\" }");
732          o.println(",");          o.println(",");
733        }        }
   
734      o.println("  };");      o.println("  };");
735      o.println();      o.println();
736      o.println("  public Object[][] getContents() { return contents; }");      o.println("  public Object[][] getContents() { return contents; }");
# Line 745  public class JavaGenerator Line 739  public class JavaGenerator
739    public void generateJavaClass(PrintWriter o)    public void generateJavaClass(PrintWriter o)
740    {    {
741      String suffix = ("root".equals(locale)) ? "" : "_" + locale;      String suffix = ("root".equals(locale)) ? "" : "_" + locale;
742      o.println("public class LocaleInformation" + suffix + " extends ListResourceBundle");      o.println("public class LocaleInformation" + suffix
743                  + " extends ListResourceBundle");
744      o.println("{");      o.println("{");
745        for (int i = 0; i < localeContents.size(); i++)
     for (int i=0;i<localeContents.size();i++)  
746        {        {
747          JavaContent content = (JavaContent)localeContents.get(i);          JavaContent content = (JavaContent) localeContents.get(i);
748                    if (content.isPackage())
749          if (content.isPackage())            {
750            {              content.generateContent(o);
751              content.generateContent(o);              o.println();
752              o.println();            }
           }  
753        }        }
   
754      generateContents(o);      generateContents(o);
   
755      o.println("}");      o.println("}");
   
756    }    }
757    
758    public void generate(String path) throws IOException    public void generate(String path) throws IOException
759    {    {
760      if (path == null)      if (path == null)
761        path = ".";        path = ".";
   
762      String relativePackagePath = inPackage.replace('.', File.separatorChar);      String relativePackagePath = inPackage.replace('.', File.separatorChar);
   
763      File javaDir = new File(path, relativePackagePath);      File javaDir = new File(path, relativePackagePath);
       
764      javaDir.mkdirs();      javaDir.mkdirs();
   
765      String suffix = ("root".equals(locale)) ? "" : "_" + locale;      String suffix = ("root".equals(locale)) ? "" : "_" + locale;
766      File javaFile = new File(javaDir, "LocaleInformation" + suffix + ".java");      File javaFile = new File(javaDir, "LocaleInformation" + suffix + ".java");
   
767      computeContents();      computeContents();
   
768      if (localeContents.size() == 0)      if (localeContents.size() == 0)
769        {        {
770          if (javaFile.exists())          if (javaFile.exists())
771            javaFile.delete();            javaFile.delete();
772          return;          return;
773        }        }
   
774      FileWriter output = new FileWriter(javaFile);      FileWriter output = new FileWriter(javaFile);
775      PrintWriter java_output = new PrintWriter(new BufferedWriter(output), true);      PrintWriter java_output = new PrintWriter(new BufferedWriter(output), true);
       
776      generateJavaHeader(java_output);      generateJavaHeader(java_output);
777      generateJavaClass(java_output);      generateJavaClass(java_output);
778    }    }
779  }  }

Legend:
Removed from v.1.22  
changed lines
  Added in v.1.23

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26