/* * Copyright (C) 2015 Jack Jiang(cngeeker.com) The DroidUIBuilder Project. * All rights reserved. * Project URL:https://github.com/JackJiang2011/DroidUIBuilder * Version 1.0 * * Jack Jiang PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * StringHandler.java at 2015-2-6 16:11:59, original version by Jack Jiang. * You can contact author with [email protected]. */ package org.droiddraw.util; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.io.Writer; import java.util.Hashtable; import javax.xml.parsers.*; import org.xml.sax.*; import org.xml.sax.helpers.DefaultHandler; public class StringHandler extends DefaultHandler { Hashtable<String, String> strings; StringBuffer buff; String name; public StringHandler() { strings = new Hashtable<String, String>(); buff = new StringBuffer(); } @Override public void characters(char arg0[], int arg1, int arg2) { buff.append(arg0, arg1, arg2); } @Override public void startDocument() { strings.clear(); } @Override public void startElement(String ns, String lName, String qName, Attributes atts) { buff.setLength(0); if (qName.equals("string")) name = atts.getValue("name"); } @Override public void endElement(String uri, String localName, String qName) { if (qName.equals("string")) { String str = buff.toString(); while (str.indexOf("\\u") != -1) { int ix = str.indexOf("\\u"); int code = Integer.parseInt(str.substring(ix + 2, ix + 6), 16); str = str.substring(0, ix) + (char) code + str.substring(ix + 6); } while (str.indexOf("\\n") != -1) { str = str.replace("\\n", "\n"); } strings.put(name, str); } } public Hashtable<String, String> getStrings() { return strings; } public static Hashtable<String, String> load(InputStream is) throws SAXException, ParserConfigurationException, IOException { return load(new InputSource(is)); } public static Hashtable<String, String> load(InputSource in) throws SAXException, ParserConfigurationException, IOException { StringHandler sh = new StringHandler(); SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); parser.parse(in, sh); return sh.getStrings(); } public static void dump(Writer w, Hashtable<String, String> strings) throws IOException { PrintWriter pw = new PrintWriter(w); pw.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); pw.println("<resources>"); for (String key : strings.keySet()) { String value = strings.get(key); pw.println("<string name=\"" + key + "\">" + value + "</string>"); } pw.println("</resources>"); pw.flush(); w.flush(); } }