From: Peter Bernard West Date: Tue, 7 May 2002 14:51:30 +0000 (+0000) Subject: Reader for Country, Language & Script data file. X-Git-Tag: FOP_Alt-Design_Migration~24 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=b9d5c56aaf491da90a9d1dbf842d83bd635d9f4c;p=xmlgraphics-fop.git Reader for Country, Language & Script data file. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/FOP_0-20-0_Alt-Design@194785 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/org/apache/fop/configuration/LanguageFileReader.java b/src/org/apache/fop/configuration/LanguageFileReader.java new file mode 100644 index 000000000..a61f2010a --- /dev/null +++ b/src/org/apache/fop/configuration/LanguageFileReader.java @@ -0,0 +1,177 @@ +/* + * $Id$ + * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. + * For details on use and redistribution please refer to the + * LICENSE file included with these sources. + */ + +package org.apache.fop.configuration; + +// sax +import org.xml.sax.Attributes; +import org.xml.sax.XMLReader; +import org.xml.sax.SAXException; +import org.xml.sax.InputSource; +import org.xml.sax.helpers.DefaultHandler; +import org.xml.sax.helpers.AttributesImpl; + +// fop +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.apps.FOPException; +import org.apache.fop.configuration.ConfigurationReader; + +import java.io.IOException; + +import java.util.HashMap; +import java.util.ArrayList; + +/** + */ +public class LanguageFileReader { + + /** + * inputsource for languageFile file + */ + private InputSource filename; + + /** + * Map of languages keyed on ISO 639 code + */ + private HashMap languages; + + /** + * Map of countries keyed on ISO 3166 code + */ + private HashMap countries; + + /** + * Map of scripts keyed on ISO 15924 code + */ + private HashMap scripts; + + /** + * @return HashMap of language code mappings + */ + public HashMap getLanguagesHashMap() { + return languages; + } + + /** + * @return HashMap of country code mappings + */ + public HashMap getCountriesHashMap() { + return countries; + } + + /** + * @return HashMap of script code mappings + */ + public HashMap getScriptsHashMap() { + return scripts; + } + + /** + * creates a languageFile reader + * @param filename the file which contains the languageFile information + */ + public LanguageFileReader(InputSource filename) { + this.filename = filename; + } + + /** + * intantiates parser and starts parsing of config file + */ + public void start() throws FOPException { + XMLReader parser = ConfigurationReader.createParser(); + + // setting the parser features + try { + parser.setFeature + ("http://xml.org/sax/features/namespace-prefixes", + false); + } catch (SAXException e) { + throw new FOPException + ("You need a parser which supports SAX version 2", + e); + } + LanguageFileParser languageFileParser = new LanguageFileParser(); + parser.setContentHandler(languageFileParser); + + try { + parser.parse(filename); + } catch (SAXException e) { + if (e.getException() instanceof FOPException) { + throw (FOPException)e.getException(); + } else { + throw new FOPException(e); + } + } catch (IOException e) { + throw new FOPException(e); + } + } + /** + * SAX2 Handler which retrieves the configuration information and stores + * them in Configuration. + * Normally this class doesn't need to be accessed directly. + */ + public class LanguageFileParser extends DefaultHandler { + + /** + * Initializes empty languages and countries maps. + */ + public void startDocument() { + languages = new HashMap(140); + countries = new HashMap(240); + scripts = new HashMap(200); + } + + /** + * Check the element type, and for language and + * country + * elements, extract the code and name attribute + * values, and put this pair in the appropriate HashMap. + * + */ + public void startElement(String uri, String localName, String qName, + Attributes attributes) { + String name; + String code; + AttributesImpl attrs = new AttributesImpl(attributes); + if (localName.equals("xml-lang")) { + } else if (localName.equals("languagecodes")) { + } else if (localName.equals("countrycodes")) { + } else if (localName.equals("scriptcodes")) { + } else if (localName.equals("language") + | localName.equals("country") + | localName.equals("script")) { + // A live one + // Extract the attribute values + name = null; + code = null; + for (int i = 0; i < attrs.getLength(); i++) { + String attrLName = attrs.getLocalName(i); + if (attrLName.equals("name")) + name = attrs.getValue(i); + else if (attrLName.equals("code")) + code = attrs.getValue(i); + else MessageHandler.errorln + ("Unknown attribute in " + + localName + " language tag"); + } + if (name != null && code != null) { + if (localName.equals("language")) + languages.put((Object)code, (Object)name); + else if (localName.equals("country")) + countries.put((Object)code, (Object)name); + else if (localName.equals("script")) { + scripts.put((Object)code, (Object)name); + } + } + } else { + // to make sure that user knows about false tag + MessageHandler.errorln("Unknown tag in languages file: " + + localName); + } + } + } +}