/* * Copyright (c) JForum Team * 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) Neither the name of "Rafael Steil" nor * the names of its contributors may be used to endorse * or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY * EXPRESS 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 * THE COPYRIGHT OWNER OR 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 * * This file creation date: 03/08/2003 / 05:28:03 * The JForum Project * http://www.jforum.net */ package net.jforum.formatters; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import net.jforum.core.exceptions.ForumException; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import org.xml.sax.helpers.DefaultHandler; /** * Parses the bb_config.xml file * @author Rafael Steil */ public class BBCodeConfigParser extends DefaultHandler { private BBConfigFormatter formatter; private String tagName = ""; private StringBuffer sb; private BBCode bb; /** * @param configFile bb_config.xml itself * @param formatter the formatter that will handle the file contents */ public BBCodeConfigParser(BBConfigFormatter formatter) { this.formatter = formatter; } public void parse() { try { SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); parser.parse(getClass().getResourceAsStream("/bb_config.xml"), this); } catch (Exception e) { throw new ForumException(e); } } /** * @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes) */ @Override public void startElement(String uri, String localName, String tag, Attributes attrs) { if (tag.equals("tag")) { this.sb = new StringBuffer(); this.bb = new BBCode(); String tagName = attrs.getValue("name"); if (tagName != null) { this.bb.setTagName(tagName); } if ("true".equals(attrs.getValue("alwaysProcess"))) { this.bb.enableAlwaysProcess(); } } this.tagName = tag; } /** * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, java.lang.String, java.lang.String) */ @Override public void endElement(String uri, String localName, String tag) { if (tag.equals("tag")) { this.formatter.addBb(this.bb); } else if (this.tagName.equals("replace")) { this.bb.setReplace(this.sb.toString().trim()); this.sb.delete(0, this.sb.length()); } else if (this.tagName.equals("regex")) { this.bb.setRegex(this.sb.toString().trim()); this.sb.delete(0, this.sb.length()); } this.tagName = ""; } /** * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int) */ @Override public void characters(char ch[], int start, int length) { if (this.tagName.equals("replace") || this.tagName.equals("regex")) { this.sb.append(ch, start, length); } } /** * @see org.xml.sax.helpers.DefaultHandler#error(org.xml.sax.SAXParseException) */ @Override public void error(SAXParseException exception) throws SAXException { throw exception; } }