Author: markt Date: Tue Nov 5 22:51:30 2013 New Revision: 1539176 URL: http://svn.apache.org/r1539176 Log: Fix various bugs in Jasper's simplified EL parser and add the test case that found them. This is a precursor to fixing BZ55198 / BZ55735 since that is going to require separating an attribute value into EL and non-EL components
Added: tomcat/tc7.0.x/trunk/test/org/apache/jasper/compiler/TestELParser.java - copied unchanged from r1539157, tomcat/trunk/test/org/apache/jasper/compiler/TestELParser.java Modified: tomcat/tc7.0.x/trunk/ (props changed) tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/ELParser.java Propchange: tomcat/tc7.0.x/trunk/ ------------------------------------------------------------------------------ Merged /tomcat/trunk:r1539157 Modified: tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/ELParser.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/ELParser.java?rev=1539176&r1=1539175&r2=1539176&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/ELParser.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/ELParser.java Tue Nov 5 22:51:30 2013 @@ -17,6 +17,12 @@ package org.apache.jasper.compiler; +import org.apache.jasper.JasperException; +import org.apache.jasper.compiler.ELNode.ELText; +import org.apache.jasper.compiler.ELNode.Function; +import org.apache.jasper.compiler.ELNode.Root; +import org.apache.jasper.compiler.ELNode.Text; + /** * This class implements a parser for EL expressions. * @@ -108,6 +114,7 @@ public class ELParser { // Output whatever is in buffer if (buf.length() > 0) { ELexpr.add(new ELNode.ELText(buf.toString())); + buf = new StringBuilder(); } if (!parseFunction()) { ELexpr.add(new ELNode.ELText(curToken.toString())); @@ -133,8 +140,8 @@ public class ELParser { } String s1 = null; // Function prefix String s2 = curToken.toString(); // Function name - int mark = getIndex(); if (hasNext()) { + int mark = getIndex(); curToken = nextToken(); if (curToken.toChar() == ':') { if (hasNext()) { @@ -152,8 +159,9 @@ public class ELParser { ELexpr.add(new ELNode.Function(s1, s2)); return true; } + curToken = prevToken; + setIndex(mark); } - setIndex(mark); return false; } @@ -398,4 +406,42 @@ public class ELParser { public char getType() { return type; } + + + protected static class TextBuilder extends ELNode.Visitor { + + protected StringBuilder output = new StringBuilder(); + + public String getText() { + return output.toString(); + } + + @Override + public void visit(Root n) throws JasperException { + output.append(n.getType()); + output.append('{'); + n.getExpression().visit(this); + output.append('}'); + } + + @Override + public void visit(Function n) throws JasperException { + if (n.getPrefix() != null) { + output.append(n.getPrefix()); + output.append(':'); + } + output.append(n.getName()); + output.append('('); + } + + @Override + public void visit(Text n) throws JasperException { + output.append(n.getText()); + } + + @Override + public void visit(ELText n) throws JasperException { + output.append(n.getText()); + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org