This renames the currencygen tool to supplementgen to denote its new role as generating all necessary data from supplementaryData.xml.
ChangeLog: 2008-07-07 Andrew John Hughes <[EMAIL PROTECTED]> * Makefile.am: Replace currencygen with supplementgen. * bin/currencygen.in: Renamed to... * bin/supplementgen.in: ...this. * configure.ac: Replace currencygen with supplementgen. * src/gnu/currencygen/Main.java: Renamed to... * src/gnu/supplementgen/Main.java: ...this and updated version/copyright output. -- Andrew :) Support Free Java! Contribute to GNU Classpath and the OpenJDK http://www.gnu.org/software/classpath http://openjdk.java.net PGP Key: 94EFD9D8 (http://subkeys.pgp.net) Fingerprint = F8EF F1EA 401E 2E60 15FA 7927 142C 2591 94EF D9D8
Index: Makefile.am =================================================================== RCS file: /sources/classpath/cp-tools/Makefile.am,v retrieving revision 1.15 diff -u -u -r1.15 Makefile.am --- Makefile.am 3 Jul 2008 21:31:47 -0000 1.15 +++ Makefile.am 7 Jul 2008 00:44:00 -0000 @@ -19,7 +19,7 @@ LTGCJCOMPILE = $(LIBGCJCOMPILE) -MF $(@:.lo=.d) if ENABLE_GCJ_BINARY -bin_PROGRAMS = localegen currencygen +bin_PROGRAMS = localegen supplementgen lib_LTLIBRARIES = libcpgenerators.la if USE_GNUBYTECODE bin_PROGRAMS += gjavap gjavah @@ -28,7 +28,7 @@ nodist_libbytecode_la_SOURCES = $(BYTECODE_JAR) endif else -bin_SCRIPTS = bin/localegen bin/currencygen +bin_SCRIPTS = bin/localegen bin/supplementgen data_JARS = cpgenerators-$(VERSION).jar BUILT_SOURCES = $(data_JARS) if USE_GNUBYTECODE @@ -60,10 +60,10 @@ localegen_LDFLAGS = --main=gnu.localegen.Main \ -Dgnu.gcj.runtime.VMClassLoader.library_control=never -currencygen_SOURCES = -currencygen_LINK = $(GCJLINK) -currencygen_LDADD = libcpgenerators.la -currencygen_LDFLAGS = --main=gnu.currencygen.Main \ +supplementgen_SOURCES = +supplementgen_LINK = $(GCJLINK) +supplementgen_LDADD = libcpgenerators.la +supplementgen_LDFLAGS = --main=gnu.supplementgen.Main \ -Dgnu.gcj.runtime.VMClassLoader.library_control=never else @@ -71,7 +71,7 @@ gjavap: $(srcdir)/bin/gjavap.in gjavah: $(srcdir)/bin/gjavah.in localegen: $(srcdir)/bin/localegen.in -currencygen: $(srcdir)/bin/currencygen.in +supplementgen: $(srcdir)/bin/supplementgen.in endif # if ENABLE_GCJ_BINARY @@ -129,10 +129,10 @@ src/gnu/localegen/JavaGenerator.java \ src/gnu/localegen/Main.java -currencygen_java_files = \ - src/gnu/currencygen/Main.java +supplementgen_java_files = \ + src/gnu/supplementgen/Main.java -cpgenerators_jar_SOURCES = $(localegen_java_files) $(currencygen_java_files) +cpgenerators_jar_SOURCES = $(localegen_java_files) $(supplementgen_java_files) if ENABLE_GCJ_BINARY libcpgenerators_la_SOURCES = $(cpgenerators_jar_SOURCES) @@ -141,7 +141,7 @@ cpgenerators-$(VERSION).jar: createdirectories $(cpgenerators_jar_CLASSES) (cd classes; \ - $(JAR) cf ../$@ gnu/ldml gnu/localegen gnu/currencygen; \ + $(JAR) cf ../$@ gnu/ldml gnu/localegen gnu/supplementgen; \ cd ..) $(cpgenerators_jar_CLASSES): classes/gnu/%.class: $(srcdir)/src/gnu/%.java Index: configure.ac =================================================================== RCS file: /sources/classpath/cp-tools/configure.ac,v retrieving revision 1.8 diff -u -u -r1.8 configure.ac --- configure.ac 29 Jun 2008 17:09:09 -0000 1.8 +++ configure.ac 7 Jul 2008 00:44:00 -0000 @@ -105,9 +105,9 @@ AC_CONFIG_FILES([Makefile]) if test "x${enable_gcj}" = xno; then - AC_CONFIG_FILES([bin/localegen bin/currencygen]) + AC_CONFIG_FILES([bin/localegen bin/supplementgen]) AC_CONFIG_COMMANDS([localegen],[chmod 755 bin/localegen]) - AC_CONFIG_COMMANDS([currencygen],[chmod 755 bin/currencygen]) + AC_CONFIG_COMMANDS([supplementgen],[chmod 755 bin/supplementgen]) if test "x${with_gnubytecode}" = xyes then AC_CONFIG_FILES([bin/gjavap bin/gjavah]) Index: bin/currencygen.in =================================================================== RCS file: bin/currencygen.in diff -N bin/currencygen.in --- bin/currencygen.in 29 Jun 2008 01:07:02 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,48 +0,0 @@ -#!/bin/sh - -## Copyright (C) 2008 Free Software Foundation, Inc. -## -## This file is a part of GNU Classpath. -## -## GNU Classpath is free software; you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 2 of the License, or (at -## your option) any later version. -## -## GNU Classpath is distributed in the hope that it will be useful, but -## WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with GNU Classpath; if not, write to the Free Software -## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 -## USA. -## -## Linking this library statically or dynamically with other modules is -## making a combined work based on this library. Thus, the terms and -## conditions of the GNU General Public License cover the whole -## combination. -## -## As a special exception, the copyright holders of this library give you -## permission to link this library with independent modules to produce an -## executable, regardless of the license terms of these independent -## modules, and to copy and distribute the resulting executable under -## terms of your choice, provided that you also meet, for each linked -## independent module, the terms and conditions of the license of that -## module. An independent module is a module which is not derived from -## or based on this library. If you modify this library, you may extend -## this exception to your version of the library, but you are not -## obligated to do so. If you do not wish to do so, delete this -## exception statement from your version. -## -## -## A simple shell script to launch the GNU Classpath currencygen tool. -## - [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@/@PACKAGE@ -tools_cp=${tools_dir}/cpgenerators.jar - -exec @JAVA@ -classpath "${tools_cp}" gnu.currencygen.Main "$@" Index: bin/supplementgen.in =================================================================== RCS file: bin/supplementgen.in diff -N bin/supplementgen.in --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ bin/supplementgen.in 7 Jul 2008 00:44:00 -0000 @@ -0,0 +1,48 @@ +#!/bin/sh + +## Copyright (C) 2008 Free Software Foundation, Inc. +## +## This file is a part of GNU Classpath. +## +## GNU Classpath is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or (at +## your option) any later version. +## +## GNU Classpath is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with GNU Classpath; if not, write to the Free Software +## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 +## USA. +## +## Linking this library statically or dynamically with other modules is +## making a combined work based on this library. Thus, the terms and +## conditions of the GNU General Public License cover the whole +## combination. +## +## As a special exception, the copyright holders of this library give you +## permission to link this library with independent modules to produce an +## executable, regardless of the license terms of these independent +## modules, and to copy and distribute the resulting executable under +## terms of your choice, provided that you also meet, for each linked +## independent module, the terms and conditions of the license of that +## module. An independent module is a module which is not derived from +## or based on this library. If you modify this library, you may extend +## this exception to your version of the library, but you are not +## obligated to do so. If you do not wish to do so, delete this +## exception statement from your version. +## +## +## A simple shell script to launch the GNU Classpath currencygen tool. +## + [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@/@PACKAGE@ +tools_cp=${tools_dir}/cpgenerators.jar + +exec @JAVA@ -classpath "${tools_cp}" gnu.supplementgen.Main "$@" Index: src/gnu/currencygen/Main.java =================================================================== RCS file: src/gnu/currencygen/Main.java diff -N src/gnu/currencygen/Main.java --- src/gnu/currencygen/Main.java 7 Jul 2008 00:33:53 -0000 1.6 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,301 +0,0 @@ -/* - * gnu.currencygen.Main Copyright (C) 2004 Free Software Foundation, - * Inc. - * - * This file is part of GNU Classpath. - * - * GNU Classpath is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2, or (at your option) any later version. - * - * GNU Classpath is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along with - * GNU Classpath; see the file COPYING. If not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ -package gnu.currencygen; - -import org.xml.sax.Attributes; -import org.xml.sax.helpers.DefaultHandler; -import org.xml.sax.SAXException; -import org.xml.sax.XMLReader; -import org.xml.sax.InputSource; -import org.xml.sax.helpers.XMLReaderFactory; -import java.io.PrintWriter; -import java.io.FileWriter; -import java.io.BufferedWriter; -import java.io.FileInputStream; -import java.util.HashMap; -import java.util.Map; -import java.util.Iterator; - -public class Main -{ - - static public void main(String args[]) throws Exception - { - XMLReader reader; - SupplementalHandler handler; - InputSource source; - printVersion(); - if (args.length != 1) - { - printUsage(); - return; - } - reader = XMLReaderFactory.createXMLReader(); - source = new InputSource(new FileInputStream(args[0])); - FileWriter currencyFile = new FileWriter("iso4217.properties"); - BufferedWriter bWriter = new BufferedWriter(currencyFile); - PrintWriter output = new PrintWriter(bWriter, true); - BufferedWriter weekFile = new BufferedWriter(new FileWriter("weeks.properties")); - PrintWriter wOutput = new PrintWriter(weekFile, true); - handler = new SupplementalHandler(output, wOutput); - reader.setContentHandler(handler); - reader.parse(source); - bWriter.flush(); - weekFile.flush(); - bWriter.close(); - weekFile.close(); - } - - static void printUsage() - { - System.out.println(" Usage: [filename]"); - System.out.println(); - } - static void printVersion() - { - System.out - .println(" This is the LDML to GNU Classpath converter (currency part)"); - System.out.println(" Copyright (C) 2004 The Free Software Foundation."); - System.out.println(); - } -} -class SupplementalHandler extends DefaultHandler -{ - - static class CurrencyInfo - { - int digits; - int rounding; - - CurrencyInfo(int digits, int rounding) - { - this.digits = digits; - this.rounding = rounding; - } - } - static final int STATE_ALTERNATE = 6; - static final int STATE_CURRENCY = 4; - static final int STATE_CURRENCYDATA = 5; - static final int STATE_FRACTIONS = 8; - static final int STATE_IGNORING = 2; - static final int STATE_INFO = 9; - static final int STATE_REGION = 3; - static final int STATE_SEENCURRENCY = 7; - static final int STATE_SUPPLEMENTAL = 1; - static final int STATE_WEEKDATA = 10; - static final int STATE_ZERO = 0; - Map currencyInfo = new HashMap(); - String currentCurrency; - String currentRegion; - int ignoreLevel; - int oldState; - PrintWriter output; - PrintWriter wOutput; - Map weekInfo = new HashMap(); - - int state; - - /** - * - * Constructs a new handler for supplemental data. - * - * @param output the output file for the currency data. - * @param wOutput the output file for the week data. - */ - public SupplementalHandler(PrintWriter output, PrintWriter wOutput) - { - this.output = output; - this.wOutput = wOutput; - } - - void checkMultiState(int[] currentStates, int newState) throws SAXException - { - int i; - for (i = 0; i < currentStates.length; i++) - { - if (currentStates[i] == state) - break; - } - if (i == currentStates.length) - throw new SAXException("Invalid current state " + state); - oldState = state; - state = newState; - } - - void checkState(int currentState, int newState) throws SAXException - { - if (currentState != state) - throw new SAXException("Invalid current state " + currentState - + " (was expecting " + state + ")"); - oldState = state; - state = newState; - } - - public void endElement(String uri, String localName, String qName) - throws SAXException - { - if (ignoreLevel > 0) - { - ignoreLevel--; - return; - } - if (state == STATE_SEENCURRENCY || state == STATE_REGION) - { - output.println(); - CurrencyInfo info = (CurrencyInfo) currencyInfo.get(currentCurrency); - if (info == null) - info = (CurrencyInfo) currencyInfo.get("DEFAULT"); - if (info != null) - { - output.println(currentRegion + ".fractionDigits=" + info.digits); - } - } - if (localName.equals("supplementalData")) - checkState(STATE_SUPPLEMENTAL, STATE_ZERO); - else if (localName.equals("currencyData")) - checkState(STATE_CURRENCYDATA, STATE_SUPPLEMENTAL); - else if (localName.equals("region")) - checkMultiState(new int[] { STATE_SEENCURRENCY, STATE_REGION }, - STATE_CURRENCYDATA); - else if (localName.equals("currency")) - checkState(STATE_CURRENCY, STATE_SEENCURRENCY); - else if (localName.equals("alternate")) - checkState(STATE_ALTERNATE, STATE_CURRENCY); - else if (localName.equals("fractions")) - checkState(STATE_FRACTIONS, STATE_CURRENCYDATA); - else if (localName.equals("info")) - checkState(STATE_INFO, STATE_FRACTIONS); - else if (localName.equals("weekData")) - { - checkState(STATE_WEEKDATA, STATE_SUPPLEMENTAL); - Iterator iter = weekInfo.entrySet().iterator(); - while (iter.hasNext()) - { - Map.Entry entry = (Map.Entry) iter.next(); - wOutput.println(entry.getKey() + "=" + entry.getValue()); - } - } - } - - public void startDocument() - { - output - .println("# This document is automatically generated by gnu.currencygen"); - output.println(); - wOutput - .println("# This document is automatically generated by gnu.currencygen"); - wOutput.println(); - state = STATE_ZERO; - ignoreLevel = 0; - } - - public void startElement(String uri, String localName, String qName, - Attributes atts) throws SAXException - { - if (ignoreLevel > 0) - { - ignoreLevel++; - return; - } - if (localName.equals("supplementalData")) - checkState(STATE_ZERO, STATE_SUPPLEMENTAL); - else if (localName.equals("currencyData")) - checkState(STATE_SUPPLEMENTAL, STATE_CURRENCYDATA); - else if (localName.equals("region")) - checkState(STATE_CURRENCYDATA, STATE_REGION); - else if (localName.equals("currency")) - checkMultiState(new int[] { STATE_SEENCURRENCY, STATE_REGION }, - STATE_CURRENCY); - else if (localName.equals("alternate")) - checkState(STATE_CURRENCY, STATE_ALTERNATE); - else if (localName.equals("fractions")) - checkState(STATE_CURRENCYDATA, STATE_FRACTIONS); - else if (localName.equals("info")) - checkState(STATE_FRACTIONS, STATE_INFO); - else if (localName.equals("weekData")) - checkState(STATE_SUPPLEMENTAL, STATE_WEEKDATA); - else if (localName.equals("minDays") && state == STATE_WEEKDATA) - { - String status = atts.getValue("draft"); - if (status == null || status.equals("false") || status.equals("approved")) - { - int minDays = Integer.parseInt(atts.getValue("count")); - String[] territories = atts.getValue("territories").split(" "); - for (int a = 0; a < territories.length; ++a) - { - if (territories[a].equals("001")) - wOutput.println("DEFAULT=" + minDays); - else - weekInfo.put(territories[a], minDays); - } - } - } - else - { - ignoreLevel++; - return; - } - if (state == STATE_REGION) - { - String tRegion = (String) atts.getValue("iso3166"); - if (tRegion == null) - throw new SAXException("region must have a iso3166 attribute"); - currentRegion = tRegion; - output.print(tRegion + ".currency="); - } - if (state == STATE_INFO) - { - String currencyCode = (String) atts.getValue("iso4217"); - String digits = (String) atts.getValue("digits"); - String rounding = (String) atts.getValue("rounding"); - if (currencyCode == null || digits == null || rounding == null) - throw new SAXException( - "currency info must have an iso4217, a digits and a rounding attribute (here we get " - + currencyCode - + "," - + digits - + "," - + rounding - + ")"); - currencyInfo.put(currencyCode, new CurrencyInfo(Integer - .parseInt(digits), Integer.parseInt(rounding))); - } - if (state == STATE_CURRENCY || state == STATE_ALTERNATE) - { - String tName = (String) atts.getValue("iso4217"); - if (tName == null) - throw new SAXException("currency must have a iso 4217 attribute"); - if (state == STATE_CURRENCY) - currentCurrency = tName; - // We only treat current currencies. - if (atts.getValue("before") == null) - { - if (oldState == STATE_SEENCURRENCY || state == STATE_ALTERNATE) - output.print(','); - output.print(tName); - } - else - { - System.err.println("WARNING: before not supported (value=" - + atts.getValue("before") + ")"); - } - } - } -} Index: src/gnu/supplementgen/Main.java =================================================================== RCS file: src/gnu/supplementgen/Main.java diff -N src/gnu/supplementgen/Main.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/gnu/supplementgen/Main.java 7 Jul 2008 00:44:01 -0000 @@ -0,0 +1,301 @@ +/* + * gnu.supplementgen.Main Copyright (C) 2004 Free Software Foundation, + * Inc. + * + * This file is part of GNU Classpath. + * + * GNU Classpath is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2, or (at your option) any later version. + * + * GNU Classpath is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * GNU Classpath; see the file COPYING. If not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +package gnu.supplementgen; + +import org.xml.sax.Attributes; +import org.xml.sax.helpers.DefaultHandler; +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; +import org.xml.sax.InputSource; +import org.xml.sax.helpers.XMLReaderFactory; +import java.io.PrintWriter; +import java.io.FileWriter; +import java.io.BufferedWriter; +import java.io.FileInputStream; +import java.util.HashMap; +import java.util.Map; +import java.util.Iterator; + +public class Main +{ + + static public void main(String args[]) throws Exception + { + XMLReader reader; + SupplementalHandler handler; + InputSource source; + printVersion(); + if (args.length != 1) + { + printUsage(); + return; + } + reader = XMLReaderFactory.createXMLReader(); + source = new InputSource(new FileInputStream(args[0])); + FileWriter currencyFile = new FileWriter("iso4217.properties"); + BufferedWriter bWriter = new BufferedWriter(currencyFile); + PrintWriter output = new PrintWriter(bWriter, true); + BufferedWriter weekFile = new BufferedWriter(new FileWriter("weeks.properties")); + PrintWriter wOutput = new PrintWriter(weekFile, true); + handler = new SupplementalHandler(output, wOutput); + reader.setContentHandler(handler); + reader.parse(source); + bWriter.flush(); + weekFile.flush(); + bWriter.close(); + weekFile.close(); + } + + static void printUsage() + { + System.out.println(" Usage: [filename]"); + System.out.println(); + } + static void printVersion() + { + System.out + .println(" This is the LDML to GNU Classpath converter (supplementary data part)"); + System.out.println(" Copyright (C) 2004, 2008 The Free Software Foundation."); + System.out.println(); + } +} +class SupplementalHandler extends DefaultHandler +{ + + static class CurrencyInfo + { + int digits; + int rounding; + + CurrencyInfo(int digits, int rounding) + { + this.digits = digits; + this.rounding = rounding; + } + } + static final int STATE_ALTERNATE = 6; + static final int STATE_CURRENCY = 4; + static final int STATE_CURRENCYDATA = 5; + static final int STATE_FRACTIONS = 8; + static final int STATE_IGNORING = 2; + static final int STATE_INFO = 9; + static final int STATE_REGION = 3; + static final int STATE_SEENCURRENCY = 7; + static final int STATE_SUPPLEMENTAL = 1; + static final int STATE_WEEKDATA = 10; + static final int STATE_ZERO = 0; + Map currencyInfo = new HashMap(); + String currentCurrency; + String currentRegion; + int ignoreLevel; + int oldState; + PrintWriter output; + PrintWriter wOutput; + Map weekInfo = new HashMap(); + + int state; + + /** + * + * Constructs a new handler for supplemental data. + * + * @param output the output file for the currency data. + * @param wOutput the output file for the week data. + */ + public SupplementalHandler(PrintWriter output, PrintWriter wOutput) + { + this.output = output; + this.wOutput = wOutput; + } + + void checkMultiState(int[] currentStates, int newState) throws SAXException + { + int i; + for (i = 0; i < currentStates.length; i++) + { + if (currentStates[i] == state) + break; + } + if (i == currentStates.length) + throw new SAXException("Invalid current state " + state); + oldState = state; + state = newState; + } + + void checkState(int currentState, int newState) throws SAXException + { + if (currentState != state) + throw new SAXException("Invalid current state " + currentState + + " (was expecting " + state + ")"); + oldState = state; + state = newState; + } + + public void endElement(String uri, String localName, String qName) + throws SAXException + { + if (ignoreLevel > 0) + { + ignoreLevel--; + return; + } + if (state == STATE_SEENCURRENCY || state == STATE_REGION) + { + output.println(); + CurrencyInfo info = (CurrencyInfo) currencyInfo.get(currentCurrency); + if (info == null) + info = (CurrencyInfo) currencyInfo.get("DEFAULT"); + if (info != null) + { + output.println(currentRegion + ".fractionDigits=" + info.digits); + } + } + if (localName.equals("supplementalData")) + checkState(STATE_SUPPLEMENTAL, STATE_ZERO); + else if (localName.equals("currencyData")) + checkState(STATE_CURRENCYDATA, STATE_SUPPLEMENTAL); + else if (localName.equals("region")) + checkMultiState(new int[] { STATE_SEENCURRENCY, STATE_REGION }, + STATE_CURRENCYDATA); + else if (localName.equals("currency")) + checkState(STATE_CURRENCY, STATE_SEENCURRENCY); + else if (localName.equals("alternate")) + checkState(STATE_ALTERNATE, STATE_CURRENCY); + else if (localName.equals("fractions")) + checkState(STATE_FRACTIONS, STATE_CURRENCYDATA); + else if (localName.equals("info")) + checkState(STATE_INFO, STATE_FRACTIONS); + else if (localName.equals("weekData")) + { + checkState(STATE_WEEKDATA, STATE_SUPPLEMENTAL); + Iterator iter = weekInfo.entrySet().iterator(); + while (iter.hasNext()) + { + Map.Entry entry = (Map.Entry) iter.next(); + wOutput.println(entry.getKey() + "=" + entry.getValue()); + } + } + } + + public void startDocument() + { + output + .println("# This document is automatically generated by gnu.supplementgen"); + output.println(); + wOutput + .println("# This document is automatically generated by gnu.supplementgen"); + wOutput.println(); + state = STATE_ZERO; + ignoreLevel = 0; + } + + public void startElement(String uri, String localName, String qName, + Attributes atts) throws SAXException + { + if (ignoreLevel > 0) + { + ignoreLevel++; + return; + } + if (localName.equals("supplementalData")) + checkState(STATE_ZERO, STATE_SUPPLEMENTAL); + else if (localName.equals("currencyData")) + checkState(STATE_SUPPLEMENTAL, STATE_CURRENCYDATA); + else if (localName.equals("region")) + checkState(STATE_CURRENCYDATA, STATE_REGION); + else if (localName.equals("currency")) + checkMultiState(new int[] { STATE_SEENCURRENCY, STATE_REGION }, + STATE_CURRENCY); + else if (localName.equals("alternate")) + checkState(STATE_CURRENCY, STATE_ALTERNATE); + else if (localName.equals("fractions")) + checkState(STATE_CURRENCYDATA, STATE_FRACTIONS); + else if (localName.equals("info")) + checkState(STATE_FRACTIONS, STATE_INFO); + else if (localName.equals("weekData")) + checkState(STATE_SUPPLEMENTAL, STATE_WEEKDATA); + else if (localName.equals("minDays") && state == STATE_WEEKDATA) + { + String status = atts.getValue("draft"); + if (status == null || status.equals("false") || status.equals("approved")) + { + int minDays = Integer.parseInt(atts.getValue("count")); + String[] territories = atts.getValue("territories").split(" "); + for (int a = 0; a < territories.length; ++a) + { + if (territories[a].equals("001")) + wOutput.println("DEFAULT=" + minDays); + else + weekInfo.put(territories[a], minDays); + } + } + } + else + { + ignoreLevel++; + return; + } + if (state == STATE_REGION) + { + String tRegion = (String) atts.getValue("iso3166"); + if (tRegion == null) + throw new SAXException("region must have a iso3166 attribute"); + currentRegion = tRegion; + output.print(tRegion + ".currency="); + } + if (state == STATE_INFO) + { + String currencyCode = (String) atts.getValue("iso4217"); + String digits = (String) atts.getValue("digits"); + String rounding = (String) atts.getValue("rounding"); + if (currencyCode == null || digits == null || rounding == null) + throw new SAXException( + "currency info must have an iso4217, a digits and a rounding attribute (here we get " + + currencyCode + + "," + + digits + + "," + + rounding + + ")"); + currencyInfo.put(currencyCode, new CurrencyInfo(Integer + .parseInt(digits), Integer.parseInt(rounding))); + } + if (state == STATE_CURRENCY || state == STATE_ALTERNATE) + { + String tName = (String) atts.getValue("iso4217"); + if (tName == null) + throw new SAXException("currency must have a iso 4217 attribute"); + if (state == STATE_CURRENCY) + currentCurrency = tName; + // We only treat current currencies. + if (atts.getValue("before") == null) + { + if (oldState == STATE_SEENCURRENCY || state == STATE_ALTERNATE) + output.print(','); + output.print(tName); + } + else + { + System.err.println("WARNING: before not supported (value=" + + atts.getValue("before") + ")"); + } + } + } +}