PARSER_BEGIN(GtkParser) /* ==================================================================== * * Skin Look And Feel 1.1 License. * * Copyright (c) 2000-2001 L2FProd.com. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. 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. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by L2FProd.com * (http://www.L2FProd.com/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "Skin Look And Feel", "SkinLF" and "L2FProd.com" must not * be used to endorse or promote products derived from this software * without prior written permission. For written permission, please * contact info@L2FProd.com. * * 5. Products derived from this software may not be called "SkinLF" * nor may "SkinLF" appear in their names without prior written * permission of L2FProd.com. * * THIS SOFTWARE IS PROVIDED ``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 L2FPROD.COM OR ITS CONTRIBUTORS 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. * ==================================================================== */ package com.l2fprod.gui.plaf.skin.impl.gtk.parser; import java.io.File; import java.io.FileInputStream; import java.net.URL; import java.util.Hashtable; import java.util.Enumeration; import com.l2fprod.gui.plaf.skin.impl.gtk.*; import com.l2fprod.gui.plaf.skin.*; public class GtkParser { Hashtable styleTable, classTable; URL directory; public static void main(String[] args) throws Exception { GtkParser parser = new GtkParser(new FileInputStream(args[0])); // parser.buildStructure(); } public GtkParser(String filename) throws Exception { this(new File(filename)); } public GtkParser(File file) throws Exception { this(SkinUtils.toURL(file)); } public GtkParser(URL url) throws Exception { this(url.openStream()); directory = url; /* String urlpath = url.toString(); int index = urlpath.lastIndexOf("/"); if (index != -1) directory = new URL(urlpath.substring(0, index) + "/"); else directory = new URL(urlpath + "/../"); */ //PENDING(fred): we could use directly the URL given because it could act as an url context... // need testing... } public URL getDirectory() { return directory; } public Hashtable getStyles() { return styleTable; } public Hashtable getClasses() { return classTable; } public GtkStyle getStyle(String name) { return (GtkStyle)getStyles().get(name); } public GtkClass getClass(String name) { return (GtkClass)getClasses().get(name); } } PARSER_END(GtkParser) SKIP: { " " | "\t" | "\n" | "\r" | "\f" } MORE : { "#" : IN_SINGLE_LINE_COMMENT | <"/**" ~["/"]> { input_stream.backup(1); } : IN_FORMAL_COMMENT | "/*" : IN_MULTI_LINE_COMMENT } SPECIAL_TOKEN : { : DEFAULT } SPECIAL_TOKEN : { : DEFAULT } SPECIAL_TOKEN : { : DEFAULT } MORE : { < ~[] > } TOKEN : { < DECIMAL_LITERAL: ((["0"-"9"])+ ("."(["0"-"9"])+)? )> | < STRING_LITERAL: "\"" ( (~["\"","\\","\n","\r"]) | ("\\" ( ["n","t","b","r","f","\\","'","\""] | ["0"-"7"] ( ["0"-"7"] )? | ["0"-"3"] ["0"-"7"] ["0"-"7"] ) ) )* "\"" > } TOKEN: { | | | | | | | | | | | | | | | | | | | | | | | | | | } TOKEN: { | | | | } TOKEN: { | | | | } TOKEN: { | | } void buildStructure(): { styleTable = new Hashtable(); classTable = new Hashtable(); } { (styleDefinition() | classDefinition() | whatever() | widgetClassDefinition() | widgetDefinition())* { for (Enumeration e = getClasses().keys(); e.hasMoreElements(); ) { Object key = e.nextElement(); GtkClass clas = (GtkClass)getClasses().get(key); for (int i = 0, c = clas.styles.size(); i < c; i++) clas.styles.setElementAt( (GtkStyle)getStyles().get(clas.styles.elementAt(i)), i); } } } void whatever(): { } { readString() } void widgetClassDefinition(): { } { readString()