[claw-cvs] r20 - trunk/main/claw-core/generators

achiumenti at common-lisp.net achiumenti at common-lisp.net
Tue Mar 25 10:55:14 UTC 2008


Author: achiumenti
Date: Tue Mar 25 05:55:14 2008
New Revision: 20

Added:
   trunk/main/claw-core/generators/
   trunk/main/claw-core/generators/GenerateLocales.java
Log:
continuning on l13n

Added: trunk/main/claw-core/generators/GenerateLocales.java
==============================================================================
--- (empty file)
+++ trunk/main/claw-core/generators/GenerateLocales.java	Tue Mar 25 05:55:14 2008
@@ -0,0 +1,192 @@
+/*
+ * Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the following
+ *     disclaimer in the documentation and/or other materials
+ *     provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import java.io.IOException;
+import java.text.DateFormatSymbols;
+import java.text.DecimalFormatSymbols;
+import java.util.Calendar;
+import java.util.Locale;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.StringWriter;
+
+/**
+ *
+ * @author Andrea Chiumenti
+ */
+public class GenerateLocales {
+
+    private StringWriter sw;
+    private String fileName;
+
+    public GenerateLocales() {
+        fileName = "locales.lisp";
+    }
+
+    public void generateFile(String fileName) throws IOException {
+        sw = new StringWriter();
+        //sw.append("(defvar *locales* (make-hash-table :test 'equal))\n");
+        sw.append(";;; -*- Mode: LISP; Syntax: COMMON-LISP; Package: CL-USER; Base: 10 -*-\n").
+                append(";;; $Header: src/locales.lisp $\n").
+                append("\n").
+                append(";;; Copyright (c) 2008, Andrea Chiumenti.  All rights reserved.\n").
+                append("\n").
+                append(";;; Redistribution and use in source and binary forms, with or without\n").
+                append(";;; modification, are permitted provided that the following conditions\n").
+                append(";;; are met:\n").
+                append("\n").
+                append(";;;   * Redistributions of source code must retain the above copyright\n").
+                append(";;;     notice, this list of conditions and the following disclaimer.\n").
+                append("\n").
+                append(";;;   * Redistributions in binary form must reproduce the above\n").
+                append(";;;     copyright notice, this list of conditions and the following\n").
+                append(";;;     disclaimer in the documentation and/or other materials\n").
+                append(";;;     provided with the distribution.\n").
+                append("\n").
+                append(";;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED\n").
+                append(";;; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n").
+                append(";;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n").
+                append(";;; ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n").
+                append(";;; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n").
+                append(";;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n").
+                append(";;; GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n").
+                append(";;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n").
+                append(";;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n").
+                append(";;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n").
+                append(";;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n").
+                append(";;; --*-- AUTOMATICALLY GENERATED - DO NOT EDIT !!!!! --*--\n\n").
+                append("(in-package :claw)\n\n");
+        File f = new File(fileName);
+        if (f.exists()) {
+            f.delete();
+        }
+        FileWriter fw = null;
+        try {
+            fw = new FileWriter(f);
+
+            Locale[] locales = Locale.getAvailableLocales();
+
+            for (int i = 0; i < locales.length; i++) {
+
+                DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(new Locale(locales[i].getLanguage(), locales[i].getCountry()));
+                DateFormatSymbols datefs = DateFormatSymbols.getInstance(new Locale(locales[i].getLanguage(), locales[i].getCountry()));
+                Calendar cal = Calendar.getInstance(new Locale(locales[i].getLanguage(), locales[i].getCountry()));
+
+                String locale;
+                if (locales[i].getCountry().equals("")) {
+                    locale = locales[i].getLanguage();
+                } else {
+                    locale = locales[i].getLanguage() + "_" + locales[i].getCountry().toUpperCase();
+
+                }
+                sw.append("(setf (gethash \"" + locale +
+                        "\" *locales*)" +
+                        "\n      (list ");
+                sw.append("\n        :NUMBER-FORMAT " +
+                        "(list :GROUPING-SEPARATOR #\\" + dfs.getGroupingSeparator() +
+                        " :DECIMAL-SEPARATOR #\\" + dfs.getDecimalSeparator() +
+                        " \"" + dfs.getInternationalCurrencySymbol() + "\"" + ")");
+
+                sw.append("\n        :DATE-FORMAT (list");
+                printDateSymbols("ampm", datefs.getAmPmStrings());
+                printDateSymbols("months", datefs.getMonths());
+                printDateSymbols("short-months", datefs.getShortMonths());
+                printDateSymbols("first-day-of-the-week", cal.getFirstDayOfWeek());
+                printDateSymbols("weekdays", datefs.getWeekdays());
+                printDateSymbols("short-weekdays", datefs.getShortWeekdays());
+                printDateSymbols("eras", datefs.getEras());
+
+                sw.append(")))\n\n");
+
+            }
+            fw.write(sw.toString());
+        } finally {
+            if (fw != null) {
+                fw.close();
+            }
+        }
+        System.out.println(fileName + " successfully generated.");
+    }
+
+    /**
+     * @param args the command line arguments
+     */
+    public static void main(String[] args) throws IOException {
+
+
+        GenerateLocales app = new GenerateLocales();
+
+        if (args.length > 0) {
+            String arg0 = args[0];
+            if (arg0.equals("--help")) {
+                app.printUsage();
+                return;
+            }
+        }
+
+        app.generateFile(app.fileName);
+    }
+
+    private void printUsage() {
+        System.out.println("Usage:");
+        System.out.println("  java " + GenerateLocales.class.getSimpleName() +
+                " --help (prints usage)");
+        System.out.println("  java " + GenerateLocales.class.getSimpleName() +
+                " (generates output file)");
+    }
+
+    private void printDateSymbols(String symbol, String[] vals) {
+        sw.append("\n                       :" +
+                symbol.toUpperCase() +
+                " '(");
+        int i = 0;
+        for (int x = 0; x < vals.length; x++) {
+            if (!vals[x].equals("")) {
+                if (i > 0) {
+                    sw.append(" ");
+                }
+                sw.append("\"" +
+                        vals[x] +
+                        "\"");
+                i++;
+            }
+        }
+        sw.append(")");
+    }
+    
+    private void printDateSymbols(String symbol, Number val) {
+        sw.append("\n                       :" +
+                symbol.toUpperCase() +
+                " " + val);
+        
+    }
+
+    public String getFileName() {
+        return fileName;
+    }
+}



More information about the Claw-cvs mailing list