options { /* DEBUG_PARSER = true; DEBUG_LOOKAHEAD = true; DEBUG_TOKEN_MANAGER = true; */ STATIC = false; USER_CHAR_STREAM=true; } PARSER_BEGIN( TemplateParser ) /* * @(#)template.jj 1.0 00/04/20 * */ /* ====================================================================== The Bodington System Software License, Version 1.0 Copyright (c) 2001 The University of Leeds. 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 acknowledgement: "This product includes software developed by the University of Leeds (http://www.bodington.org/)." Alternately, this acknowledgement may appear in the software itself, if and wherever such third-party acknowledgements normally appear. 4. The names "Bodington", "Nathan Bodington", "Bodington System", "Bodington Open Source Project", and "The University of Leeds" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact d.gardner@leeds.ac.uk. 5. The name "Bodington" may not appear in the name of products derived from this software without prior written permission of the University of Leeds. THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, TITLE, THE IMPLIED WARRANTIES OF QUALITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OF LEEDS 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. ========================================================= This software was originally created by the University of Leeds and may contain voluntary contributions from others. For more information on the Bodington Open Source Project, please see http://bodington.org/ ====================================================================== */ package org.bodington.servlet.template; /** * * @version 1.0 00/04/20 * @author Jon Maber */ import java.net.*; import java.io.*; class TemplateParser { } PARSER_END(TemplateParser) // ================================================================ // in default state a token is either a start tag, an end tag or text to output // switch to tag state or stay in default state to reading whitespace and data alternately TOKEN : { : TAG | | | " | "<" | " ") (~["<"])+ > } // in tag state various tokens follow and switch to BUILDINGATTLIST state, // SCRIPTATTLIST state or ATTLIST state // for script tag get into script state // only types of tag of interest are BUILDING and SCRIPT at present TOKEN [IGNORE_CASE] : { : BUILDINGATTLIST | : BIMGATTLIST | : BODYATTLIST | : SCRIPTATTLIST | : ATTLIST } SKIP : { < (" " | "\t" | "\n" | "\r")+ > } SKIP : { < (" " | "\t" | "\n" | "\r")+ > } SKIP : { < (" " | "\t" | "\n" | "\r")+ > } // in BUILDINGATTLIST state either drop back to default state because end // of tag was reached, get ready to read attribute value in BUILDINGATTRVAL // state, read in attribute name and stay in state, cancel state and get into // TAG state for another TOKEN : { " > : DEFAULT | ", "<", "=", " ", "\t", "\r", "\n"])+ > | : TAG | : TAG } TOKEN : { " > : DEFAULT | ", "<", "=", " ", "\t", "\r", "\n"])+ > | : TAG | : TAG } TOKEN : { " > : DEFAULT | ", "<", "=", " ", "\t", "\r", "\n"])+ > | : TAG | : TAG } // skip over white space when waiting for attribute value SKIP : { < (" " | "\t" | "\n" | "\r")+ > } SKIP : { < (" " | "\t" | "\n" | "\r")+ > } SKIP : { < (" " | "\t" | "\n" | "\r")+ > } // when read in attribute value drop back into BUILDINGATTLIST state to look for more // attributes TOKEN : { ", "\"", "'", " ", "\t", "\n", "\r"] )+ > : BUILDINGATTLIST } TOKEN : { ", "\"", "'", " ", "\t", "\n", "\r"] )+ > : BIMGATTLIST } TOKEN : { ", "\"", "'", " ", "\t", "\n", "\r"] )+ > : BODYATTLIST } // in SCRIPTATTLIST state either get into script state because end // of tag was reached, cancel state and get into TAG state for another // or just stay in state to read crap inside the tag TOKEN : { " > : SCRIPT | : TAG | : TAG | "])+ > } // get out of script state when end script tag appears