From: <dal...@us...> - 2010-05-19 16:02:51
|
Revision: 17853 http://jedit.svn.sourceforge.net/jedit/?rev=17853&view=rev Author: daleanson Date: 2010-05-19 16:02:40 +0000 (Wed, 19 May 2010) Log Message: ----------- Work on jsp beautification. This works very well now: html and jsp tags are indented properly, jsp scriptlet code is untouched (as is javascript and css code). Adjusted the java parser so it can handle code fragments, like those found in jsp scriptlets. My intent is to have the html beautifier delegate to the java beautifier for jsp scriptlet code, to a css beautifier for style blocks, and to a javascript beautifier for script blocks. Modified Paths: -------------- plugins/Beauty/trunk/src/beauty/parsers/html/HtmlCollector.java plugins/Beauty/trunk/src/beauty/parsers/html/HtmlDocument.java plugins/Beauty/trunk/src/beauty/parsers/html/HtmlFormatter.java plugins/Beauty/trunk/src/beauty/parsers/html/HtmlParser.java plugins/Beauty/trunk/src/beauty/parsers/html/HtmlParser.jj plugins/Beauty/trunk/src/beauty/parsers/html/HtmlParserConstants.java plugins/Beauty/trunk/src/beauty/parsers/html/HtmlParserTokenManager.java plugins/Beauty/trunk/src/beauty/parsers/html/HtmlScrubber.java plugins/Beauty/trunk/src/beauty/parsers/java/Java1.5.jj plugins/Beauty/trunk/src/beauty/parsers/java/JavaParser.java plugins/Beauty/trunk/src/beauty/parsers/java/JavaParserConstants.java plugins/Beauty/trunk/src/beauty/parsers/java/JavaParserTokenManager.java plugins/Beauty/trunk/src/beauty/parsers/javacc/JavaCCParser.java plugins/Beauty/trunk/src/beauty/parsers/javacc/JavaCCParserConstants.java plugins/Beauty/trunk/src/beauty/parsers/javacc/JavaCCParserTokenManager.java Modified: plugins/Beauty/trunk/src/beauty/parsers/html/HtmlCollector.java =================================================================== --- plugins/Beauty/trunk/src/beauty/parsers/html/HtmlCollector.java 2010-05-18 21:50:29 UTC (rev 17852) +++ plugins/Beauty/trunk/src/beauty/parsers/html/HtmlCollector.java 2010-05-19 16:02:40 UTC (rev 17853) @@ -92,8 +92,8 @@ ts.tagName = t.tagName; ts.index = index; tagStack.addElement(ts); - }; - }; + } + } public void visit(HtmlDocument.EndTag t) { int i; @@ -113,6 +113,7 @@ tag = (HtmlDocument.Tag) elements.elementAt(ts.index); block = new HtmlDocument.TagBlock(tag.tagName, tag.attributeList, blockElements); + block.startTag.setIsJspTag(tag.isJspTag); // Pop the elements off the stack, push the new block elements.popN(elements.size() - ts.index); @@ -123,8 +124,8 @@ collected = true; break; - }; - }; + } + } // If we didn't find a match, just push the end tag if (i < 0) @@ -162,7 +163,7 @@ document.accept(new HtmlDumper(System.out)); } finally { r.close(); - }; - }; + } + } } Modified: plugins/Beauty/trunk/src/beauty/parsers/html/HtmlDocument.java =================================================================== --- plugins/Beauty/trunk/src/beauty/parsers/html/HtmlDocument.java 2010-05-18 21:50:29 UTC (rev 17852) +++ plugins/Beauty/trunk/src/beauty/parsers/html/HtmlDocument.java 2010-05-19 16:02:40 UTC (rev 17853) @@ -85,12 +85,17 @@ public Tag(String name, AttributeList a) { tagName = name; + if (a == null) + a = new AttributeList(); attributeList = a; } public Tag(String tagStart, String name, AttributeList a, String tagEnd) { - this.tagStart = tagStart; + if (tagStart != null) + this.tagStart = tagStart; tagName = name; + if (a == null) + a = new AttributeList(); attributeList = a; this.tagEnd = tagEnd; } @@ -192,7 +197,45 @@ return startTag.toString(); } } + + public static class JspScriptletBlock extends TagBlock { + public JspScriptletBlock(ElementSequence b) { + super(null, null, b); + startTag = new JspScriptletStartTag(); + endTag = new JspScriptletEndTag(); + } + } + public static class JspScriptletStartTag extends Tag { + public JspScriptletStartTag() { + super(null, null); + tagStart = "<"; + tagEnd = "%"; + } + + public int getLength() { + return 2; + } + + public String toString() { + return "<%"; + } + } + + public static class JspScriptletEndTag extends EndTag { + public JspScriptletEndTag() { + super(null); + } + + public int getLength() { + return 2; + } + + public String toString() { + return "%>"; + } + } + /** * HTML comments. */ Modified: plugins/Beauty/trunk/src/beauty/parsers/html/HtmlFormatter.java =================================================================== --- plugins/Beauty/trunk/src/beauty/parsers/html/HtmlFormatter.java 2010-05-18 21:50:29 UTC (rev 17852) +++ plugins/Beauty/trunk/src/beauty/parsers/html/HtmlFormatter.java 2010-05-19 16:02:40 UTC (rev 17853) @@ -1,17 +1,17 @@ /* -* HtmlFormatter.java -- HTML document pretty-printer -* Copyright (C) 1999 Quiotix Corporation. -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License, version 2, as -* published by the Free Software Foundation. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License (http://www.gnu.org/copyleft/gpl.txt) -* for more details. -*/ + * HtmlFormatter.java -- HTML document pretty-printer + * Copyright (C) 1999 Quiotix Corporation. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2, as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License (http://www.gnu.org/copyleft/gpl.txt) + * for more details. + */ package beauty.parsers.html; @@ -52,7 +52,7 @@ protected MarginWriter out; protected int rightMargin = 80; protected int indentSize = 2; - protected String lineSeparator = System.getProperty( "line.separator" ); + protected String lineSeparator = System.getProperty("line.separator"); protected static Set tagsIndentBlock = new HashSet(); protected static Set tagsNewlineBefore = new HashSet(); @@ -60,203 +60,226 @@ protected static Set tagsTryMatch = new HashSet(); // these tags _should_ be block tags, so indent the block - protected static final String[] tagsIndentStrings - = {"TABLE", "TR", "TD", "TH", "FORM", "HTML", "HEAD", "BODY", "SELECT", "OL", "UL", "LI", "DIV"}; + + protected static final String []tagsIndentStrings = {"TABLE" ,"TR" ,"TD" ,"TH" ,"FORM" ,"HTML" ,"HEAD" ,"BODY" ,"SELECT" ,"OL" ,"UL" ,"LI" , + "DIV" ,"SPAN"} + ; + // always start these tags on a new line - protected static final String[] tagsNewlineBeforeStrings - = {"P", "H1", "H2", "H3", "H4", "H5", "H6", "BR", "HR", "taglib", "OL", "UL", "LI", "LINK"}; + + protected static final String []tagsNewlineBeforeStrings = {"P" ,"H1" ,"H2" ,"H3" ,"H4" ,"H5" ,"H6" ,"BR" ,"HR" ,"taglib" ,"OL" ,"UL" ,"LI" ,"LINK"} + ; // don't format inside these tags - protected static final String[] tagsPreformattedStrings - = {"PRE", "SCRIPT", "STYLE"}; + + protected static final String []tagsPreformattedStrings = {"PRE" ,"SCRIPT" ,"STYLE" ,"%"} + ; // these are often missing the closing tag, attempt to match - protected static final String[] tagsTryMatchStrings + //= {"A", "TD", "TH", "TR", "I", "B", "EM", "FONT", "TT", "UL"}; - = {"A", "I", "B", "EM", "FONT", "TT"}; + protected static final String []tagsTryMatchStrings = {"A" ,"I" ,"B" ,"EM" ,"FONT" ,"TT"} + ; static { - for ( int i = 0; i < tagsIndentStrings.length; i++ ) - tagsIndentBlock.add( tagsIndentStrings[ i ] ); - for ( int i = 0; i < tagsNewlineBeforeStrings.length; i++ ) - tagsNewlineBefore.add( tagsNewlineBeforeStrings[ i ] ); - for ( int i = 0; i < tagsPreformattedStrings.length; i++ ) - tagsPreformatted.add( tagsPreformattedStrings[ i ] ); - for ( int i = 0; i < tagsTryMatchStrings.length; i++ ) - tagsTryMatch.add( tagsTryMatchStrings[ i ] ); - }; + for (int i = 0; i < tagsIndentStrings.length; i++) { + tagsIndentBlock.add(tagsIndentStrings[i]); + } + + for (int i = 0; i < tagsNewlineBeforeStrings.length; i++) { + tagsNewlineBefore.add(tagsNewlineBeforeStrings[i]); + } + + for (int i = 0; i < tagsPreformattedStrings.length; i++) { + tagsPreformatted.add(tagsPreformattedStrings[i]); + } + + for (int i = 0; i < tagsTryMatchStrings.length; i++) { + tagsTryMatch.add(tagsTryMatchStrings[i]); + } + + } ; protected TagBlockRenderer blockRenderer = new TagBlockRenderer(); protected HtmlDocument.HtmlElement previousElement; protected boolean inPreBlock; public HtmlFormatter() throws Exception { out = new MarginWriter(); - out.setRightMargin( rightMargin ); - out.setLineSeparator( lineSeparator ); + out.setRightMargin(rightMargin); + out.setLineSeparator(lineSeparator); } public String toString() { return out.toString(); } - public void setRightMargin( int margin ) { + public void setRightMargin(int margin) { rightMargin = margin; - out.setRightMargin( rightMargin ); + out.setRightMargin(rightMargin); } - public void setIndent( int indent ) { + public void setIndent(int indent) { indentSize = indent; } - public void setLineSeparator( String ls ) { + public void setLineSeparator(String ls) { lineSeparator = ls; - out.setLineSeparator( lineSeparator ); + out.setLineSeparator(lineSeparator); } - public void visit( HtmlDocument.TagBlock block ) { + public void visit(HtmlDocument.TagBlock block) { boolean indent; boolean preformat; int wasMargin = 0; + System.out.println("+++++ block jsp startTag: " + block.startTag); + System.out.println("+++++ is jsp tag? " + block.startTag.isJspTag); - preformat = tagsPreformatted.contains( block.startTag.tagName.toUpperCase() ); + preformat = block.startTag.tagName == null || tagsPreformatted.contains(block.startTag.tagName.toUpperCase()); - if ( tagsTryMatch.contains( block.startTag.tagName.toUpperCase() ) ) { + if (block.startTag.tagName != null && tagsTryMatch.contains(block.startTag.tagName.toUpperCase())) { blockRenderer.start(); - blockRenderer.setTargetWidth( out.getRightMargin() - out.getLeftMargin() ); - blockRenderer.visit( block ); + blockRenderer.setTargetWidth(out.getRightMargin() - out.getLeftMargin()); + blockRenderer.visit(block); blockRenderer.finish(); - if ( !blockRenderer.hasBlownTarget() ) { - if ( preformat ) - out.print( blockRenderer.getString() ); - else - out.printAutoWrap( blockRenderer.getString() ); + if (! blockRenderer.hasBlownTarget()) { + if (preformat) { + out.print(blockRenderer.getString()); + } else { + out.printAutoWrap(blockRenderer.getString()); + } + previousElement = block.endTag; return ; } } - // Only will get here if we've failed the try-block test - indent = tagsIndentBlock.contains( block.startTag.tagName.toUpperCase() ) || block.startTag.tagEnd.equals(">"); - if ( preformat ) { + // will get here only if we've failed the try-block test + indent = (block.startTag.tagName != null && tagsIndentBlock.contains(block.startTag.tagName.toUpperCase())) || (block.startTag.isJspTag && block.startTag.tagEnd.equals(">")); + + if (preformat) { wasMargin = out.getLeftMargin(); - visit( block.startTag ); - out.setLeftMargin( 0 ); + visit(block.startTag); + out.setLeftMargin(0); inPreBlock = true; - visit( block.body ); + visit(block.body); inPreBlock = false; - out.setLeftMargin( wasMargin ); - visit( block.endTag ); + out.setLeftMargin(wasMargin); + visit(block.endTag); + } else { + if (indent) { + out.printlnSoft(); + visit(block.startTag); + out.printlnSoft(); + out.setLeftMargin(out.getLeftMargin() + indentSize); + visit(block.body); + out.setLeftMargin(out.getLeftMargin() - indentSize); + out.printlnSoft(); + visit(block.endTag); + out.printlnSoft(); + inPreBlock = false; + } else { + visit(block.startTag); + visit(block.body); + visit(block.endTag); + } } - else if ( indent ) { - out.printlnSoft(); - visit( block.startTag ); - out.printlnSoft(); - out.setLeftMargin( out.getLeftMargin() + indentSize ); - visit( block.body ); - out.setLeftMargin( out.getLeftMargin() - indentSize ); - out.printlnSoft(); - visit( block.endTag ); - out.printlnSoft(); - inPreBlock = false; - } - else { - visit( block.startTag ); - visit( block.body ); - visit( block.endTag ); - } + } - public void visit( HtmlDocument.Tag t ) { + public void visit(HtmlDocument.Tag t) { String s = t.toString(); int hanging; - if ( tagsNewlineBefore.contains( t.tagName.toUpperCase() ) - || out.getCurPosition() + s.length() > out.getRightMargin() ) + if ((t.tagName != null && tagsNewlineBefore.contains(t.tagName.toUpperCase())) || out.getCurPosition() + s.length() > out.getRightMargin()) { out.printlnSoft(); + } - out.print( t.tagStart + t.tagName ); - hanging = t.tagName.length() + 1; + out.print(t.tagStart + (t.tagName == null ? "" : t.tagName)); + hanging = t.tagName == null ? 0 : t.tagName.length() + 1; ///boolean splitAttrs = jEdit.getBooleanProperty( "xmlindenter.splitAttributes", false ); boolean splitAttrs = false; - if ( splitAttrs ) { - out.setLeftMargin( out.getLeftMargin() + indentSize ); - out.print( lineSeparator ); + if (splitAttrs) { + out.setLeftMargin(out.getLeftMargin() + indentSize); + out.print(lineSeparator); } - for ( Iterator it = t.attributeList.attributes.iterator(); it.hasNext(); ) { - HtmlDocument.Attribute a = ( HtmlDocument.Attribute ) it.next(); - if ( splitAttrs ) { - out.printAttr( a.toString() ); - if ( it.hasNext() ) { - out.print( lineSeparator ); + for (Iterator it = t.attributeList.attributes.iterator(); it.hasNext();) { + HtmlDocument.Attribute a = (HtmlDocument.Attribute) it.next(); + if (splitAttrs) { + out.printAttr(a.toString()); + if (it.hasNext()) { + out.print(lineSeparator); } + } else { + out.printAutoWrap(" " + a.toString(), hanging); } - else { - out.printAutoWrap( " " + a.toString(), hanging ); - } } - if ( splitAttrs ) { - out.setLeftMargin( out.getLeftMargin() - indentSize ); + if (splitAttrs) { + out.setLeftMargin(out.getLeftMargin() - indentSize); } - if ( t.isJspTag ) { - out.print( " " ); // got a jsp tag + + // TODO: this should be a setting for the user. Not everyone likes having + // an extra space separating the end of their tags + if (t.isJspTag) { + out.print(" "); // got a jsp tag } - out.print( t.tagEnd ); - if (t.tagEnd.endsWith("%>")){ - out.println(); + out.print(t.tagEnd); + if (t.tagEnd.endsWith("%>")) { + out.println(); } previousElement = t; } - public void visit( HtmlDocument.EndTag t ) { - out.printAutoWrap( t.toString() ); - if ( tagsNewlineBefore.contains( t.tagName.toUpperCase() ) ) { + public void visit(HtmlDocument.EndTag t) { + out.printAutoWrap(t.toString()); + if (t.tagName != null && tagsNewlineBefore.contains(t.tagName.toUpperCase())) { out.printlnSoft(); - ///out.print(lineSeparator); + } else { + out.print(" "); } - else { - out.print( " " ); - } previousElement = t; } - public void visit( HtmlDocument.Comment c ) { - out.print( c.toString() ); + public void visit(HtmlDocument.Comment c) { + out.print(c.toString()); previousElement = c; } - public void visit( HtmlDocument.Text t ) { - if ( inPreBlock ) - out.print( t.text ); - else { - t.text = t.text.replaceAll( "[ ]+", " " ); + public void visit(HtmlDocument.Text t) { + if (inPreBlock) { + out.print(t.text); + } else { + // TODO: this should be a user setting + // collapse multiple spaces to a single space + t.text = t.text.replaceAll("[ ]+", " "); int start = 0; - //int old_rm = out.getRightMargin(); - //out.setRightMargin( old_rm < 120 ? old_rm : 120 ); - while ( start < t.text.length() ) { - int index = t.text.indexOf( ' ', start ) + 1; - if ( index == 0 ) + while (start < t.text.length()) { + int index = t.text.indexOf(' ', start) + 1; + if (index == 0) { index = t.text.length(); - out.printAutoWrap( t.text.substring( start, index ) ); + } + + out.printAutoWrap(t.text.substring(start, index)); start = index; } - //out.setRightMargin( old_rm ); } previousElement = t; } - public void visit( HtmlDocument.Newline n ) { - if ( inPreBlock ) { - out.print( lineSeparator ); + public void visit(HtmlDocument.Newline n) { + if (inPreBlock) { + out.print(lineSeparator); + } else { + if (previousElement instanceof HtmlDocument.Tag + || previousElement instanceof HtmlDocument.EndTag + || previousElement instanceof HtmlDocument.Comment + || previousElement instanceof HtmlDocument.Newline) { + out.printlnSoft(); + } else { + if (previousElement instanceof HtmlDocument.Text) { + out.print(" "); + } + } } - else if ( previousElement instanceof HtmlDocument.Tag - || previousElement instanceof HtmlDocument.EndTag - || previousElement instanceof HtmlDocument.Comment - || previousElement instanceof HtmlDocument.Newline ) { - out.printlnSoft(); - } - else if ( previousElement instanceof HtmlDocument.Text ) { - out.print( " " ); - } previousElement = n; } @@ -265,7 +288,7 @@ inPreBlock = false; } - public void finish() {} + public void finish() { } } @@ -280,60 +303,80 @@ protected int leftMargin; protected int rightMargin; StringBuffer sb = null; - protected char[] spaces = new char[ 256 ]; - protected String lineSeparator = System.getProperty( "line.separator" ); + protected char []spaces = new char [256 ]; + protected String lineSeparator = System.getProperty("line.separator"); public MarginWriter() { sb = new StringBuffer(); - for ( int i = 0; i < spaces.length; i++ ) - spaces[ i ] = ' '; + for (int i = 0; i < spaces.length; i++) { + spaces[i] = ' '; + } + } public String toString() { return sb.toString(); } - public void print( String s ) { - if ( curPosition == 0 && leftMargin > 0 ) { - sb.append( spaces, 0, leftMargin ); + public void print(String s) { + if (s == null) { + s = ""; + } + + if (curPosition == 0 && leftMargin > 0) { + sb.append(spaces, 0, leftMargin); curPosition = leftMargin; } - sb.append( s ); + sb.append(s); curPosition += s.length(); } - public void printAutoWrap( String s ) { - if ( curPosition > leftMargin && curPosition + s.length() > rightMargin ) { + public void printAutoWrap(String s) { + if (s == null) { + s = ""; + } + + if (curPosition > leftMargin && curPosition + s.length() > rightMargin) { println(); } - print( s ); + print(s); } - public void printAutoWrap( String s, int hanging ) { - if ( curPosition > leftMargin && curPosition + s.length() > rightMargin ) { + public void printAutoWrap(String s, int hanging) { + if (s == null) { + s = ""; + } + + if (curPosition > leftMargin && curPosition + s.length() > rightMargin) { println(); - sb.append( spaces, 0, hanging + leftMargin ); + sb.append(spaces, 0, hanging + leftMargin); curPosition = leftMargin + hanging; } - print( s ); + print(s); } public void println() { curPosition = 0; - sb.append( lineSeparator ); + sb.append(lineSeparator); } - public void printAttr( String s ) { - sb.append( spaces, 0, leftMargin ); - print( s ); + public void printAttr(String s) { + if (s == null) { + s = ""; + } + + sb.append(spaces, 0, leftMargin); + print(s); } public void printlnSoft() { - if ( curPosition > 0 ) + if (curPosition > 0) { println(); + } + } - public void setLeftMargin( int leftMargin ) { + public void setLeftMargin(int leftMargin) { this.leftMargin = leftMargin; } @@ -341,7 +384,7 @@ return leftMargin; } - public void setRightMargin( int rightMargin ) { + public void setRightMargin(int rightMargin) { this.rightMargin = rightMargin; } @@ -350,14 +393,14 @@ } public int getCurPosition() { - return ( curPosition == 0 ? leftMargin : curPosition ); + return (curPosition == 0 ? leftMargin : curPosition); } - public void setCurPosition( int p ) { + public void setCurPosition(int p) { curPosition = p >= 0 ? p : 0; } - public void setLineSeparator( String ls ) { + public void setLineSeparator(String ls) { this.lineSeparator = ls; } } @@ -382,9 +425,9 @@ blownTarget = false; } - public void finish() {} + public void finish() { } - public void setTargetWidth( int w ) { + public void setTargetWidth(int w) { targetWidth = w; } @@ -400,35 +443,43 @@ return blownTarget; } - public void visit( HtmlDocument.Tag t ) { - if ( s.length() < targetWidth ) + public void visit(HtmlDocument.Tag t) { + if (s.length() < targetWidth) { s += t.toString(); - else + } else { blownTarget = true; + } + } - public void visit( HtmlDocument.EndTag t ) { - if ( s.length() < targetWidth ) + public void visit(HtmlDocument.EndTag t) { + if (s.length() < targetWidth) { s += t.toString(); - else + } else { blownTarget = true; + } + } - public void visit( HtmlDocument.Comment c ) { - if ( s.length() < targetWidth ) + public void visit(HtmlDocument.Comment c) { + if (s.length() < targetWidth) { s += c.toString(); - else + } else { blownTarget = true; + } + } - public void visit( HtmlDocument.Text t ) { - if ( s.length() < targetWidth ) + public void visit(HtmlDocument.Text t) { + if (s.length() < targetWidth) { s += t.toString(); - else + } else { blownTarget = true; + } + } - public void visit( HtmlDocument.Newline n ) { + public void visit(HtmlDocument.Newline n) { multiLine = true; s += " "; } Modified: plugins/Beauty/trunk/src/beauty/parsers/html/HtmlParser.java =================================================================== --- plugins/Beauty/trunk/src/beauty/parsers/html/HtmlParser.java 2010-05-18 21:50:29 UTC (rev 17852) +++ plugins/Beauty/trunk/src/beauty/parsers/html/HtmlParser.java 2010-05-19 16:02:40 UTC (rev 17853) @@ -32,12 +32,12 @@ HtmlDocument document = parser.HtmlDocument(); //doc.accept(new HtmlDumper(System.out)); - document.setLineSeparator("\n"); + document.setLineSeparator("\u005cn"); document.accept(new HtmlCollector()); document.accept(new HtmlScrubber(HtmlScrubber.DEFAULT_OPTIONS | HtmlScrubber.TRIM_SPACES)); HtmlFormatter formatter = new HtmlFormatter(); formatter.setRightMargin(1024); - formatter.setLineSeparator("\n"); + formatter.setLineSeparator("\u005cn"); formatter.setIndent(3); document.accept(formatter); System.out.println(formatter.toString()); @@ -64,6 +64,7 @@ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case EOL: case TAG_START: + case SCRIPTLET_TAG: case ENDTAG_START: case COMMENT_START: case DECL_START: @@ -86,42 +87,45 @@ Token text; if (jj_2_1(2)) { e = Tag(); - {if (true) return e;} + {if (true) return e;} } else { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ENDTAG_START: e = EndTag(); - {if (true) return e;} + {if (true) return e;} break; case COMMENT_START: e = CommentTag(); - {if (true) return e;} + {if (true) return e;} break; case DECL_START: e = DeclTag(); - {if (true) return e;} + {if (true) return e;} break; default: jj_la1[1] = jj_gen; - if (jj_2_2(2)) { + if (jj_2_2(3)) { + e = ScriptletBlock(); + {if (true) return e;} + } else if (jj_2_3(2)) { e = ScriptBlock(); - {if (true) return e;} - } else if (jj_2_3(2)) { + {if (true) return e;} + } else if (jj_2_4(2)) { e = StyleBlock(); - {if (true) return e;} - } else if (jj_2_4(2)) { + {if (true) return e;} + } else if (jj_2_5(2)) { jj_consume_token(TAG_START); text = jj_consume_token(LST_ERROR); - {if (true) return new HtmlDocument.Text("<" + text.image);} + {if (true) return new HtmlDocument.Text("<" + text.image);} } else { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case PCDATA: text = jj_consume_token(PCDATA); - {if (true) return new HtmlDocument.Text(text.image);} + {if (true) return new HtmlDocument.Text(text.image);} break; case EOL: jj_consume_token(EOL); - {if (true) return new HtmlDocument.Newline();} + {if (true) return new HtmlDocument.Newline();} break; default: jj_la1[2] = jj_gen; @@ -277,15 +281,15 @@ final public Token QuoteIndependentAttributeValueContent() throws ParseException { Token t; try { - if (jj_2_5(2)) { + if (jj_2_6(2)) { t = jj_consume_token(EL_EXPRESSION_IN_ATTRIBUTE); - } else if (jj_2_6(2)) { + } else if (jj_2_7(2)) { t = jj_consume_token(VALUE_BINDING_IN_ATTRIBUTE); - } else if (jj_2_7(2)) { + } else if (jj_2_8(2)) { t = jj_consume_token(JSP_EXPRESSION_IN_ATTRIBUTE); - } else if (jj_2_8(2)) { + } else if (jj_2_9(2)) { t = jj_consume_token(JSP_TAG_IN_ATTRIBUTE); - } else if (jj_2_9(2)) { + } else if (jj_2_10(2)) { t = jj_consume_token(UNPARSED_TEXT_NO_DOUBLE_QUOTES); } else { jj_consume_token(-1); @@ -531,162 +535,217 @@ throw new Error("Missing return statement in function"); } - final private boolean jj_2_1(int xla) { + final public HtmlDocument.HtmlElement ScriptletBlock() throws ParseException { + HtmlDocument.ElementSequence e; + Token firstToken = getToken(1); + try { + jj_consume_token(SCRIPTLET_TAG); + String block = getScriptletBlock(); + e = new HtmlDocument.ElementSequence(); + e.addElement(new HtmlDocument.Text(block)); + token_source.SwitchTo(DEFAULT); + {if (true) return new HtmlDocument.JspScriptletBlock(e);} + } catch (ParseException ex) { + // ex.printStackTrace(); + token_source.SwitchTo(DEFAULT); + String s = getTokenText(firstToken, getNextToken()); + {if (true) return new HtmlDocument.Text(s);} + } + throw new Error("Missing return statement in function"); + } + + String getScriptletBlock() throws ParseException { + StringBuilder sb = new StringBuilder(); + try { + while (true) { + sb.append(jj_input_stream.readChar()); + if (sb.length() > 2 && sb.substring(sb.length() - 2).equals("%>")) { + return sb.substring(0, sb.length() - 2); + } + } + } + catch(Exception e) { + } + return sb.toString(); + } + + private boolean jj_2_1(int xla) { jj_la = xla; jj_lastpos = jj_scanpos = token; try { return !jj_3_1(); } catch(LookaheadSuccess ls) { return true; } finally { jj_save(0, xla); } } - final private boolean jj_2_2(int xla) { + private boolean jj_2_2(int xla) { jj_la = xla; jj_lastpos = jj_scanpos = token; try { return !jj_3_2(); } catch(LookaheadSuccess ls) { return true; } finally { jj_save(1, xla); } } - final private boolean jj_2_3(int xla) { + private boolean jj_2_3(int xla) { jj_la = xla; jj_lastpos = jj_scanpos = token; try { return !jj_3_3(); } catch(LookaheadSuccess ls) { return true; } finally { jj_save(2, xla); } } - final private boolean jj_2_4(int xla) { + private boolean jj_2_4(int xla) { jj_la = xla; jj_lastpos = jj_scanpos = token; try { return !jj_3_4(); } catch(LookaheadSuccess ls) { return true; } finally { jj_save(3, xla); } } - final private boolean jj_2_5(int xla) { + private boolean jj_2_5(int xla) { jj_la = xla; jj_lastpos = jj_scanpos = token; try { return !jj_3_5(); } catch(LookaheadSuccess ls) { return true; } finally { jj_save(4, xla); } } - final private boolean jj_2_6(int xla) { + private boolean jj_2_6(int xla) { jj_la = xla; jj_lastpos = jj_scanpos = token; try { return !jj_3_6(); } catch(LookaheadSuccess ls) { return true; } finally { jj_save(5, xla); } } - final private boolean jj_2_7(int xla) { + private boolean jj_2_7(int xla) { jj_la = xla; jj_lastpos = jj_scanpos = token; try { return !jj_3_7(); } catch(LookaheadSuccess ls) { return true; } finally { jj_save(6, xla); } } - final private boolean jj_2_8(int xla) { + private boolean jj_2_8(int xla) { jj_la = xla; jj_lastpos = jj_scanpos = token; try { return !jj_3_8(); } catch(LookaheadSuccess ls) { return true; } finally { jj_save(7, xla); } } - final private boolean jj_2_9(int xla) { + private boolean jj_2_9(int xla) { jj_la = xla; jj_lastpos = jj_scanpos = token; try { return !jj_3_9(); } catch(LookaheadSuccess ls) { return true; } finally { jj_save(8, xla); } } - final private boolean jj_3_7() { - if (jj_scan_token(JSP_EXPRESSION_IN_ATTRIBUTE)) return true; - return false; + private boolean jj_2_10(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_10(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(9, xla); } } - final private boolean jj_3_6() { - if (jj_scan_token(VALUE_BINDING_IN_ATTRIBUTE)) return true; - return false; - } - - final private boolean jj_3_9() { - if (jj_scan_token(UNPARSED_TEXT_NO_DOUBLE_QUOTES)) return true; - return false; - } - - final private boolean jj_3R_7() { + private boolean jj_3R_7() { if (jj_scan_token(TAG_START)) return true; if (jj_scan_token(TAG_NAME)) return true; return false; } - final private boolean jj_3_8() { + private boolean jj_3_9() { if (jj_scan_token(JSP_TAG_IN_ATTRIBUTE)) return true; return false; } - final private boolean jj_3_4() { + private boolean jj_3_5() { if (jj_scan_token(TAG_START)) return true; if (jj_scan_token(LST_ERROR)) return true; return false; } - final private boolean jj_3_5() { + private boolean jj_3_6() { if (jj_scan_token(EL_EXPRESSION_IN_ATTRIBUTE)) return true; return false; } - final private boolean jj_3_3() { - if (jj_3R_9()) return true; + private boolean jj_3_4() { + if (jj_3R_10()) return true; return false; } - final private boolean jj_3_2() { - if (jj_3R_8()) return true; + private boolean jj_3R_8() { + if (jj_scan_token(SCRIPTLET_TAG)) return true; return false; } - final private boolean jj_3R_9() { + private boolean jj_3_3() { + if (jj_3R_9()) return true; + return false; + } + + private boolean jj_3R_10() { if (jj_scan_token(TAG_START)) return true; if (jj_scan_token(TAG_STYLE)) return true; return false; } - final private boolean jj_3R_8() { + private boolean jj_3_2() { + if (jj_3R_8()) return true; + return false; + } + + private boolean jj_3R_9() { if (jj_scan_token(TAG_START)) return true; if (jj_scan_token(TAG_SCRIPT)) return true; return false; } - final private boolean jj_3_1() { + private boolean jj_3_1() { if (jj_3R_7()) return true; return false; } + private boolean jj_3_8() { + if (jj_scan_token(JSP_EXPRESSION_IN_ATTRIBUTE)) return true; + return false; + } + + private boolean jj_3_7() { + if (jj_scan_token(VALUE_BINDING_IN_ATTRIBUTE)) return true; + return false; + } + + private boolean jj_3_10() { + if (jj_scan_token(UNPARSED_TEXT_NO_DOUBLE_QUOTES)) return true; + return false; + } + + /** Generated Token Manager. */ public HtmlParserTokenManager token_source; SimpleCharStream jj_input_stream; - public Token token, jj_nt; + /** Current token. */ + public Token token; + /** Next token. */ + public Token jj_nt; private int jj_ntk; private Token jj_scanpos, jj_lastpos; private int jj_la; - public boolean lookingAhead = false; - private boolean jj_semLA; private int jj_gen; final private int[] jj_la1 = new int[18]; static private int[] jj_la1_0; static private int[] jj_la1_1; static { - jj_la1_0(); - jj_la1_1(); + jj_la1_init_0(); + jj_la1_init_1(); } - private static void jj_la1_0() { - jj_la1_0 = new int[] {0x1f8000,0xe0000,0x108000,0x40000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x38000000,0x0,0x0,0x0,0x0,0x1,}; + private static void jj_la1_init_0() { + jj_la1_0 = new int[] {0x3f8000,0x1c0000,0x208000,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000000,0x70000000,0x0,0x0,0x0,0x0,0x1,}; } - private static void jj_la1_1() { - jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x3d00,0x280,0x4000,0x3d20,0x3d20,0x50,0x6,0x0,0x0,0x3800000,0x3800000,0x70000,0x70000,0x8000,}; + private static void jj_la1_init_1() { + jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x7a00,0x500,0x8000,0x7a40,0x7a40,0xa0,0xc,0x0,0x0,0xe000000,0xe000000,0xe0000,0xe0000,0x10000,}; } - final private JJCalls[] jj_2_rtns = new JJCalls[9]; + final private JJCalls[] jj_2_rtns = new JJCalls[10]; private boolean jj_rescan = false; private int jj_gc = 0; + /** Constructor with InputStream. */ public HtmlParser(java.io.InputStream stream) { this(stream, null); } + /** Constructor with InputStream and supplied encoding */ public HtmlParser(java.io.InputStream stream, String encoding) { try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } token_source = new HtmlParserTokenManager(jj_input_stream); @@ -697,9 +756,11 @@ for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } + /** Reinitialise. */ public void ReInit(java.io.InputStream stream) { ReInit(stream, null); } + /** Reinitialise. */ public void ReInit(java.io.InputStream stream, String encoding) { try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } token_source.ReInit(jj_input_stream); @@ -710,6 +771,7 @@ for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } + /** Constructor. */ public HtmlParser(java.io.Reader stream) { jj_input_stream = new SimpleCharStream(stream, 1, 1); token_source = new HtmlParserTokenManager(jj_input_stream); @@ -720,6 +782,7 @@ for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } + /** Reinitialise. */ public void ReInit(java.io.Reader stream) { jj_input_stream.ReInit(stream, 1, 1); token_source.ReInit(jj_input_stream); @@ -730,6 +793,7 @@ for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } + /** Constructor with generated Token Manager. */ public HtmlParser(HtmlParserTokenManager tm) { token_source = tm; token = new Token(); @@ -739,6 +803,7 @@ for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } + /** Reinitialise. */ public void ReInit(HtmlParserTokenManager tm) { token_source = tm; token = new Token(); @@ -748,7 +813,7 @@ for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } - final private Token jj_consume_token(int kind) throws ParseException { + private Token jj_consume_token(int kind) throws ParseException { Token oldToken; if ((oldToken = token).next != null) token = token.next; else token = token.next = token_source.getNextToken(); @@ -774,7 +839,7 @@ static private final class LookaheadSuccess extends java.lang.Error { } final private LookaheadSuccess jj_ls = new LookaheadSuccess(); - final private boolean jj_scan_token(int kind) { + private boolean jj_scan_token(int kind) { if (jj_scanpos == jj_lastpos) { jj_la--; if (jj_scanpos.next == null) { @@ -795,6 +860,8 @@ return false; } + +/** Get the next Token. */ final public Token getNextToken() { if (token.next != null) token = token.next; else token = token.next = token_source.getNextToken(); @@ -803,8 +870,9 @@ return token; } +/** Get the specific Token. */ final public Token getToken(int index) { - Token t = lookingAhead ? jj_scanpos : token; + Token t = token; for (int i = 0; i < index; i++) { if (t.next != null) t = t.next; else t = t.next = token_source.getNextToken(); @@ -812,14 +880,14 @@ return t; } - final private int jj_ntk() { + private int jj_ntk() { if ((jj_nt=token.next) == null) return (jj_ntk = (token.next=token_source.getNextToken()).kind); else return (jj_ntk = jj_nt.kind); } - private java.util.Vector jj_expentries = new java.util.Vector(); + private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>(); private int[] jj_expentry; private int jj_kind = -1; private int[] jj_lasttokens = new int[100]; @@ -834,31 +902,26 @@ for (int i = 0; i < jj_endpos; i++) { jj_expentry[i] = jj_lasttokens[i]; } - boolean exists = false; - for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements();) { - int[] oldentry = (int[])(e.nextElement()); + jj_entries_loop: for (java.util.Iterator<?> it = jj_expentries.iterator(); it.hasNext();) { + int[] oldentry = (int[])(it.next()); if (oldentry.length == jj_expentry.length) { - exists = true; for (int i = 0; i < jj_expentry.length; i++) { if (oldentry[i] != jj_expentry[i]) { - exists = false; - break; + continue jj_entries_loop; } } - if (exists) break; + jj_expentries.add(jj_expentry); + break jj_entries_loop; } } - if (!exists) jj_expentries.addElement(jj_expentry); if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind; } } + /** Generate ParseException. */ public ParseException generateParseException() { - jj_expentries.removeAllElements(); - boolean[] la1tokens = new boolean[58]; - for (int i = 0; i < 58; i++) { - la1tokens[i] = false; - } + jj_expentries.clear(); + boolean[] la1tokens = new boolean[60]; if (jj_kind >= 0) { la1tokens[jj_kind] = true; jj_kind = -1; @@ -875,11 +938,11 @@ } } } - for (int i = 0; i < 58; i++) { + for (int i = 0; i < 60; i++) { if (la1tokens[i]) { jj_expentry = new int[1]; jj_expentry[0] = i; - jj_expentries.addElement(jj_expentry); + jj_expentries.add(jj_expentry); } } jj_endpos = 0; @@ -887,20 +950,22 @@ jj_add_error_token(0, 0); int[][] exptokseq = new int[jj_expentries.size()][]; for (int i = 0; i < jj_expentries.size(); i++) { - exptokseq[i] = (int[])jj_expentries.elementAt(i); + exptokseq[i] = jj_expentries.get(i); } return new ParseException(token, exptokseq, tokenImage); } + /** Enable tracing. */ final public void enable_tracing() { } + /** Disable tracing. */ final public void disable_tracing() { } - final private void jj_rescan_token() { + private void jj_rescan_token() { jj_rescan = true; - for (int i = 0; i < 9; i++) { + for (int i = 0; i < 10; i++) { try { JJCalls p = jj_2_rtns[i]; do { @@ -916,6 +981,7 @@ case 6: jj_3_7(); break; case 7: jj_3_8(); break; case 8: jj_3_9(); break; + case 9: jj_3_10(); break; } } p = p.next; @@ -925,7 +991,7 @@ jj_rescan = false; } - final private void jj_save(int index, int xla) { + private void jj_save(int index, int xla) { JJCalls p = jj_2_rtns[index]; while (p.gen > jj_gen) { if (p.next == null) { p = p.next = new JJCalls(); break; } Modified: plugins/Beauty/trunk/src/beauty/parsers/html/HtmlParser.jj =================================================================== --- plugins/Beauty/trunk/src/beauty/parsers/html/HtmlParser.jj 2010-05-18 21:50:29 UTC (rev 17852) +++ plugins/Beauty/trunk/src/beauty/parsers/html/HtmlParser.jj 2010-05-19 16:02:40 UTC (rev 17853) @@ -43,7 +43,11 @@ * htm...@qu.... If you like it/hate it/use it, please let us know! */ -options { IGNORE_CASE = true; STATIC = false; /*DEBUG_PARSER = true;*/ } +options { + IGNORE_CASE = true; + STATIC = false; + //DEBUG_PARSER = true; +} PARSER_BEGIN(HtmlParser) @@ -101,7 +105,6 @@ PARSER_END(HtmlParser) - <*> TOKEN : { <#ALPHA_CHAR: ["a"-"z", "A"-"Z"] > @@ -124,7 +127,8 @@ <DEFAULT> TOKEN : { <EOL: ( " " | "\t" )* <NEWLINE> > -| <TAG_START: "<" (<WHITESPACE>)* | "<%" (<WHITESPACE>)* | "<%@" (<WHITESPACE>)* > : LexStartTag +| <TAG_START: "<" (<WHITESPACE>)* | "<%@" (<WHITESPACE>)* > : LexStartTag +| <SCRIPTLET_TAG: "<%" > : LexScriptlet | <ENDTAG_START: "</" > : LexStartTag | <COMMENT_START: "<!--" | "<%--" > : LexComment | <DECL_START: "<!" > : LexDecl @@ -219,6 +223,11 @@ | <QUOTE> ) > } +<LexScriptlet> TOKEN : +{ + <SCRIPTLET_END: (<WHITESPACE>)* "%>" > : DEFAULT +} + <LexDecl> TOKEN : { <DECL_ANY: ( <QUOTED_STRING_NB> | <QUOTE> | ~[ ">" ] )+ > @@ -233,13 +242,13 @@ <STYLE_END: ("</STYLE>" | "</style>") > : DEFAULT } -<LexScript, LexStyle> TOKEN : +<LexScript, LexStyle, LexScriptlet> TOKEN : { <BLOCK_EOL: <NEWLINE> > | <BLOCK_LBR: "<" > | <BLOCK_WORD: ( <QUOTED_STRING_NB> | <QUOTE> - | (~[ "\n", "\r", "'", "\"", "<"])+ ) > + | (~[ "\n", "\r", "'", "\"", "<", "%"])+ ) > } HtmlDocument HtmlDocument() : @@ -269,19 +278,21 @@ { ( LOOKAHEAD(2) - e = Tag() { return e; } - | e = EndTag() { return e; } - | e = CommentTag() { return e; } - | e = DeclTag() { return e; } + e = Tag() { return e; } + | e = EndTag() { return e; } + | e = CommentTag() { return e; } + | e = DeclTag() { return e; } + | LOOKAHEAD(3) + e = ScriptletBlock() { return e; } | LOOKAHEAD(2) - e = ScriptBlock() { return e; } + e = ScriptBlock() { return e; } | LOOKAHEAD(2) - e = StyleBlock() { return e; } + e = StyleBlock() { return e; } | LOOKAHEAD(2) <TAG_START> text=<LST_ERROR> - { return new HtmlDocument.Text("<" + text.image); } - | text = <PCDATA> { return new HtmlDocument.Text(text.image); } - | <EOL> { return new HtmlDocument.Newline(); } + { return new HtmlDocument.Text("<" + text.image); } + | text = <PCDATA> { return new HtmlDocument.Text(text.image); } + | <EOL> { return new HtmlDocument.Newline(); } ) } @@ -544,3 +555,51 @@ return new HtmlDocument.Comment(t.image); } } + +HtmlDocument.HtmlElement ScriptletBlock() : +{ + HtmlDocument.ElementSequence e; + Token firstToken = getToken(1); +} +{ + try { + <SCRIPTLET_TAG> + { + String block = getScriptletBlock(); + e = new HtmlDocument.ElementSequence(); + e.addElement(new HtmlDocument.Text(block)); + token_source.SwitchTo(DEFAULT); + return new HtmlDocument.JspScriptletBlock(e); + } + } + catch (ParseException ex) { + // ex.printStackTrace(); + token_source.SwitchTo(DEFAULT); + String s = getTokenText(firstToken, getNextToken()); + return new HtmlDocument.Text(s); + } +} + +/* + Originally I tried to use BlockContents to get the contents of a jsp scriptlet, + but the matching rules for a word trump the matching rules for the %> end tag. + This works well anyway, since I really don't care about tokenizing the contents + of a jsp scriptlet. I just want the contents verbatim. + + This returns the contents of the jsp scriptlet block without the <% or %>. +*/ +JAVACODE +String getScriptletBlock() { + StringBuilder sb = new StringBuilder(); + try { + while (true) { + sb.append(jj_input_stream.readChar()); + if (sb.length() > 2 && sb.substring(sb.length() - 2).equals("%>")) { + return sb.substring(0, sb.length() - 2); + } + } + } + catch(Exception e) { + } + return sb.toString(); +} Modified: plugins/Beauty/trunk/src/beauty/parsers/html/HtmlParserConstants.java =================================================================== --- plugins/Beauty/trunk/src/beauty/parsers/html/HtmlParserConstants.java 2010-05-18 21:50:29 UTC (rev 17852) +++ plugins/Beauty/trunk/src/beauty/parsers/html/HtmlParserConstants.java 2010-05-19 16:02:40 UTC (rev 17853) @@ -1,77 +1,156 @@ /* Generated By:JavaCC: Do not edit this line. HtmlParserConstants.java */ package beauty.parsers.html; + +/** + * Token literal values and constants. + * Generated by org.javacc.parser.OtherFilesGen#start() + */ public interface HtmlParserConstants { + /** End of File. */ int EOF = 0; + /** RegularExpression Id. */ int ALPHA_CHAR = 1; + /** RegularExpression Id. */ int NUM_CHAR = 2; + /** RegularExpression Id. */ int ALPHANUM_CHAR = 3; + /** RegularExpression Id. */ int IDENTIFIER_CHAR = 4; + /** RegularExpression Id. */ int IDENTIFIER = 5; + /** RegularExpression Id. */ int QUOTED_STRING_NB = 6; + /** RegularExpression Id. */ int QUOTED_STRING = 7; + /** RegularExpression Id. */ int WHITESPACE = 8; + /** RegularExpression Id. */ int NEWLINE = 9; + /** RegularExpression Id. */ int QUOTE = 10; + /** RegularExpression Id. */ int EL_ESCAPE = 11; + /** RegularExpression Id. */ int TEXT_IN_EL = 12; + /** RegularExpression Id. */ int NO_JSP_TAG_END = 13; + /** RegularExpression Id. */ int NO_TAG_END = 14; + /** RegularExpression Id. */ int EOL = 15; + /** RegularExpression Id. */ int TAG_START = 16; - int ENDTAG_START = 17; - int COMMENT_START = 18; - int DECL_START = 19; - int PCDATA = 20; - int TAG_SCRIPT = 21; - int TAG_STYLE = 22; - int TAG_NAME = 23; - int LST_ERROR = 24; - int ATTR_NAME = 26; - int TAG_END = 27; - int TAG_PERCENTEND = 28; - int TAG_SLASHEND = 29; - int ATTR_EQ = 30; - int IMPLICIT_TAG_END = 31; - int LIT_ERROR = 32; - int SINGLE_QUOTE = 33; - int DOUBLE_QUOTE = 34; - int ENDING_SINGLE_QUOTE = 36; - int UNPARSED_TEXT_NO_SINGLE_QUOTES = 37; - int DOLLAR_OR_HASH_SINGLE_QUOTE = 38; - int ENDING_DOUBLE_QUOTE = 39; - int UNPARSED_TEXT_NO_DOUBLE_QUOTES = 40; - int DOLLAR_OR_HASH_DOUBLE_QUOTE = 41; - int EL_EXPRESSION_IN_ATTRIBUTE = 42; - int VALUE_BINDING_IN_ATTRIBUTE = 43; - int JSP_EXPRESSION_IN_ATTRIBUTE = 44; - int JSP_TAG_IN_ATTRIBUTE = 45; - int ATTR_VAL = 46; - int COMMENT_END = 47; - int DASH = 48; - int COMMENT_EOL = 49; - int COMMENT_WORD = 50; - int DECL_ANY = 51; - int DECL_END = 52; - int SCRIPT_END = 53; - int STYLE_END = 54; - int BLOCK_EOL = 55; - int BLOCK_LBR = 56; - int BLOCK_WORD = 57; + /** RegularExpression Id. */ + int SCRIPTLET_TAG = 17; + /** RegularExpression Id. */ + int ENDTAG_START = 18; + /** RegularExpression Id. */ + int COMMENT_START = 19; + /** RegularExpression Id. */ + int DECL_START = 20; + /** RegularExpression Id. */ + int PCDATA = 21; + /** RegularExpression Id. */ + int TAG_SCRIPT = 22; + /** RegularExpression Id. */ + int TAG_STYLE = 23; + /** RegularExpression Id. */ + int TAG_NAME = 24; + /** RegularExpression Id. */ + int LST_ERROR = 25; + /** RegularExpression Id. */ + int ATTR_NAME = 27; + /** RegularExpression Id. */ + int TAG_END = 28; + /** RegularExpression Id. */ + int TAG_PERCENTEND = 29; + /** RegularExpression Id. */ + int TAG_SLASHEND = 30; + /** RegularExpression Id. */ + int ATTR_EQ = 31; + /** RegularExpression Id. */ + int IMPLICIT_TAG_END = 32; + /** RegularExpression Id. */ + int LIT_ERROR = 33; + /** RegularExpression Id. */ + int SINGLE_QUOTE = 34; + /** RegularExpression Id. */ + int DOUBLE_QUOTE = 35; + /** RegularExpression Id. */ + int ENDING_SINGLE_QUOTE = 37; + /** RegularExpression Id. */ + int UNPARSED_TEXT_NO_SINGLE_QUOTES = 38; + /** RegularExpression Id. */ + int DOLLAR_OR_HASH_SINGLE_QUOTE = 39; + /** RegularExpression Id. */ + int ENDING_DOUBLE_QUOTE = 40; + /** RegularExpression Id. */ + int UNPARSED_TEXT_NO_DOUBLE_QUOTES = 41; + /** RegularExpression Id. */ + int DOLLAR_OR_HASH_DOUBLE_QUOTE = 42; + /** RegularExpression Id. */ + int EL_EXPRESSION_IN_ATTRIBUTE = 43; + /** RegularExpression Id. */ + int VALUE_BINDING_IN_ATTRIBUTE = 44; + /** RegularExpression Id. */ + int JSP_EXPRESSION_IN_ATTRIBUTE = 45; + /** RegularExpression Id. */ + int JSP_TAG_IN_ATTRIBUTE = 46; + /** RegularExpression Id. */ + int ATTR_VAL = 47; + /** RegularExpression Id. */ + int COMMENT_END = 48; + /** RegularExpression Id. */ + int DASH = 49; + /** RegularExpression Id. */ + int COMMENT_EOL = 50; + /** RegularExpression Id. */ + int COMMENT_WORD = 51; + /** RegularExpression Id. */ + int SCRIPTLET_END = 52; + /** RegularExpression Id. */ + int DECL_ANY = 53; + /** RegularExpression Id. */ + int DECL_END = 54; + /** RegularExpression Id. */ + int SCRIPT_END = 55; + /** RegularExpression Id. */ + int STYLE_END = 56; + /** RegularExpression Id. */ + int BLOCK_EOL = 57; + /** RegularExpression Id. */ + int BLOCK_LBR = 58; + /** RegularExpression Id. */ + int BLOCK_WORD = 59; + /** Lexical state. */ int LexStyle = 0; + /** Lexical state. */ int LexScript = 1; + /** Lexical state. */ int LexDecl = 2; - int LexComment = 3; - int LexInAttrVal = 4; - int AttrValueBetweenDoubleQuotesState = 5; - int AttrValueBetweenSingleQuotesState = 6; - int LexAttrVal = 7; - int LexInTag = 8; - int LexStartTag = 9; - int DEFAULT = 10; + /** Lexical state. */ + int LexScriptlet = 3; + /** Lexical state. */ + int LexComment = 4; + /** Lexical state. */ + int LexInAttrVal = 5; + /** Lexical state. */ + int AttrValueBetweenDoubleQuotesState = 6; + /** Lexical state. */ + int AttrValueBetweenSingleQuotesState = 7; + /** Lexical state. */ + int LexAttrVal = 8; + /** Lexical state. */ + int LexInTag = 9; + /** Lexical state. */ + int LexStartTag = 10; + /** Lexical state. */ + int DEFAULT = 11; + /** Literal token values. */ String[] tokenImage = { "<EOF>", "<ALPHA_CHAR>", @@ -90,6 +169,7 @@ "<NO_TAG_END>", "<EOL>", "<TAG_START>", + "\"<%\"", "\"</\"", "<COMMENT_START>", "\"<!\"", @@ -98,7 +178,7 @@ "<TAG_STYLE>", "<TAG_NAME>", "<LST_ERROR>", - "<token of kind 25>", + "<token of kind 26>", "<ATTR_NAME>", "\">\"", "\"%>\"", @@ -108,7 +188,7 @@ "<LIT_ERROR>", "\"\\\'\"", "\"\\\"\"", - "<token of kind 35>", + "<token of kind 36>", "\"\\\'\"", "<UNPARSED_TEXT_NO_SINGLE_QUOTES>", "<DOLLAR_OR_HASH_SINGLE_QUOTE>", @@ -124,6 +204,7 @@ "\"-\"", "<COMMENT_EOL>", "<COMMENT_WORD>", + "<SCRIPTLET_END>", "<DECL_ANY>", "\">\"", "<SCRIPT_END>", Modified: plugins/Beauty/trunk/src/beauty/parsers/html/HtmlParserTokenManager.java =================================================================== --- plugins/Beauty/trunk/src/beauty/parsers/html/HtmlParserTokenManager.java 2010-05-18 21:50:29 UTC (rev 17852) +++ plugins/Beauty/trunk/src/beauty/parsers/html/HtmlParserTokenManager.java 2010-05-19 16:02:40 UTC (rev 17853) @@ -1,52 +1,25 @@ /* Generated By:JavaCC: Do not edit this line. HtmlParserTokenManager.java */ package beauty.parsers.html; +/** Token Manager. */ public class HtmlParserTokenManager implements HtmlParserConstants { + + /** Debug output. */ public java.io.PrintStream debugStream = System.out; + /** Set debug output. */ public void setDebugStream(java.io.PrintStream ds) { debugStream = ds; } -private final int jjMoveStringLiteralDfa0_9() +private int jjMoveStringLiteralDfa0_10() { - return jjMoveNfa_9(0, 0); + return jjMoveNfa_10(0, 0); } -private final void jjCheckNAdd(int state) +private int jjMoveNfa_10(int startState, int curPos) { - if (jjrounds[state] != jjround) - { - jjstateSet[jjnewStateCnt++] = state; - jjrounds[state] = jjround; - } -} -private final void jjAddStates(int start, int end) -{ - do { - jjstateSet[jjnewStateCnt++] = jjnextStates[start]; - } while (start++ != end); -} -private final void jjCheckNAddTwoStates(int state1, int state2) -{ - jjCheckNAdd(state1); - jjCheckNAdd(state2); -} -private final void jjCheckNAddStates(int start, int end) -{ - do { - jjCheckNAdd(jjnextStates[start]); - } while (start++ != end); -} -private final void jjCheckNAddStates(int start) -{ - jjCheckNAdd(jjnextStates[start]); - jjCheckNAdd(jjnextStates[start + 1]); -} -private final int jjMoveNfa_9(int startState, int curPos) -{ - int[] nextStates; int startsAt = 0; jjnewStateCnt = 19; int i = 1; jjstateSet[0] = startState; - int j, kind = 0x7fffffff; + int kind = 0x7fffffff; for (;;) { if (++jjround == 0x7fffffff) @@ -54,14 +27,14 @@ if (curChar < 64) { long l = 1L << curChar; - MatchLoop: do + do { switch(jjstateSet[--i]) { case 1: if ((0x7ff600000000000L & l) == 0L) break; - kind = 23; + kind = 24; jjstateSet[jjnewStateCnt++] = 1; break; default : break; @@ -71,15 +44,15 @@ else if (curChar < 128) { long l = 1L << (curChar & 077); - MatchLoop: do + do { switch(jjstateSet[--i]) { case 0: if ((0x7fffffe07fffffeL & l) != 0L) { - if (kind > 23) - kind = 23; + if (kind > 24) + kind = 24; jjCheckNAdd(1); } if ((0x8000000080000L & l) != 0L) @@ -88,8 +61,8 @@ case 1: if ((0x7fffffe87fffffeL & l) == 0L) break; - if (kind > 23) - kind = 23; + if (kind > 24) + kind = 24; jjCheckNAdd(1); break; case 2: @@ -97,8 +70,8 @@ jjAddStates(0, 3); break; case 3: - if ((0x10000000100000L & l) != 0L && kind > 21) - kind = 21; + if ((0x10000000100000L & l) != 0L && kind > 22) + kind = 22; break; case 4: case 8: @@ -130,8 +103,8 @@ jjstateSet[jjnewStateCnt++] = 10; break; case 12: - if ((0x2000000020L & l) != 0L && kind > 22) - kind = 22; + if ((0x2000000020L & l) != 0L && kind > 23) + kind = 23; break; case 13: case 16: @@ -162,7 +135,7 @@ { int i2 = (curChar & 0xff) >> 6; long l2 = 1L << (curChar & 077); - MatchLoop: do + do { switch(jjstateSet[--i]) { @@ -183,7 +156,7 @@ catch(java.io.IOException e) { return curPos; } } } -private final int jjStopStringLiteralDfa_8(int pos, long active0) +private final int jjStopStringLiteralDfa_9(int pos, long active0) { switch ... [truncated message content] |