Package org.rendersnake.generator

Source Code of org.rendersnake.generator.AttributesMethodsGenerator$Attribute

package org.rendersnake.generator;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.rendersnake.StringResource;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class AttributesMethodsGenerator extends DefaultHandler {

    class Attribute {
        public String name;
        public String arg;
        public String selector;
        public String description;
        public String since = "@since HTML4.01";

        public void since5(){
            since = "@since HTML5";
        }
       
        public boolean takesScript() {
          return name.startsWith("on");
        }
    }

    protected Map<String, Attribute> attributesMap = new HashMap<String, Attribute>();

    protected boolean isFactory = false;
    protected boolean isTest = false;
   
    public static void main(String[] args) throws Exception {
        AttributesMethodsGenerator gen = new AttributesMethodsGenerator();
        gen.parse("../html-codegen/html4-doc.xml");
        if (args.length > 0) {
            gen.isFactory = args[0].equals("f");
            gen.isTest = args[1].equals("t");
        }
        gen.exportMethods();
    }
   
    protected void parse(String inputFilename) throws Exception {
        SAXParser p = SAXParserFactory.newInstance().newSAXParser();
        p.parse(new File(inputFilename), this);
    }

    @Override
    public void startElement(String uri, String localName, String qname, Attributes attrs) throws SAXException {
        if (!"attribute".equals(qname))
            return;
        Attribute attribute = new Attribute();
        attribute.name = attrs.getValue("name");
        attribute.selector = this.selectorFor(attribute.name);
        attribute.arg = attribute.selector;
        attribute.description = attrs.getValue("description");
        attributesMap.put(attribute.name, attribute);
    }

    protected void exportMethods() {
        for (Attribute each : attributesMap.values())
            this.exportMethodFor(each);
    }
   
    protected String selectorFor(String name) {
        // apply exceptions because of reserved words in the Java language
        if ("class".equals(name)) {
            return "class_";
        } else if ("for".equals(name)) {
            return "for_";
        } else if ("char".equals(name)) {
            return "char_";
        } else if (name.indexOf("-") > 0) {
            return name.replace("-", "_");
        } else if (name.indexOf(":") > 0) {
            return name.replace(":", "_");
        } else if (name.startsWith("on")) {
            // capitalize char after on
            return "on" + (Character.toUpperCase(name.charAt(2))) + name.substring(3);
        }
        // use as is
        return name;
    }

    protected void exportMethodFor(Attribute attribute) {
        String template = "content/AttributeMethod.txt";
        if (isFactory) {
            template = "content/AttributeFactoryMethod.txt";
            if (isTest) {
                template = "content/AttributeFactoryTestMethod.txt";
            }
        } else {
            if (isTest) template = "content/AttributeTestMethod.txt";
        }
        if (attribute.arg == null) attribute.arg = attribute.name;
        System.out.print(String.format(StringResource.get(template)
                ,attribute.name
                ,attribute.selector
                ,attribute.description
                ,attribute.arg
                ,attribute.since
                ,attribute.takesScript() ? "addScript" : "add"));
    }
}
TOP

Related Classes of org.rendersnake.generator.AttributesMethodsGenerator$Attribute

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.