kinman 2002/11/07 19:03:01 Modified: jasper2/src/share/org/apache/jasper/compiler JspDocumentParser.java PageDataImpl.java Log: - Parse EL expressions in JSP page(in XML syntax). - Output EL expressions in XML view. Revision Changes Path 1.26 +63 -6 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspDocumentParser.java Index: JspDocumentParser.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspDocumentParser.java,v retrieving revision 1.25 retrieving revision 1.26 diff -u -r1.25 -r1.26 --- JspDocumentParser.java 7 Nov 2002 23:52:07 -0000 1.25 +++ JspDocumentParser.java 8 Nov 2002 03:03:01 -0000 1.26 @@ -359,9 +359,66 @@ if ((current instanceof Node.JspText) || !isAllSpace) { Mark start = new Mark(path, locator.getLineNumber(), locator.getColumnNumber()); - char[] bufCopy = new char[len]; - System.arraycopy(buf, offset, bufCopy, 0, len); - new Node.TemplateText(bufCopy, start, current); + + CharArrayWriter ttext = new CharArrayWriter(); + int limit = offset + len; + int lastCh = 0; + for (int i = offset; i < limit; i++) { + int ch = buf[i]; + if (lastCh == '$' && ch == '{') { + char[] bufCopy = ttext.toCharArray(); + if (bufCopy.length > 0) { + new Node.TemplateText(bufCopy, start, current); + ttext = new CharArrayWriter(); + } + // following "${" to first unquoted "}" + i++; + boolean singleQ = false; + boolean doubleQ = false; + lastCh = 0; + for (; ; i++) { + if (i >= limit) { + throw new SAXParseException( + err.getString("jsp.error.unterminated", "${"), + locator); + + } + ch = buf[i]; + if (lastCh == '\\' && (singleQ || doubleQ)) { + ttext.write(ch); + lastCh = 0; + continue; + } + if (ch == '}') { + new Node.ELExpression(ttext.toCharArray(), start, current); + ttext = new CharArrayWriter(); + break; + } + if (ch == '"') + doubleQ = !doubleQ; + else if (ch == '\'') + singleQ = !singleQ; + + ttext.write(ch); + lastCh = ch; + } + } else { + if( (lastCh == '$') && (ch != '{') ) { + ttext.write( '$' ); + } + if( ch != '$' ) { + ttext.write( ch ); + } + } + lastCh = ch; + } + if (lastCh == '$') { + ttext.write('$'); + } + char[] bufCopy = ttext.toCharArray(); + if (bufCopy.length > 0) { + new Node.TemplateText(bufCopy, start, current); + } } } 1.18 +18 -3 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/PageDataImpl.java Index: PageDataImpl.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/PageDataImpl.java,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- PageDataImpl.java 7 Nov 2002 18:34:19 -0000 1.17 +++ PageDataImpl.java 8 Nov 2002 03:03:01 -0000 1.18 @@ -306,6 +306,21 @@ appendTag(JSP_SCRIPTLET, n.getAttributes(), null, n.getText()); } + public void visit(Node.ELExpression n) throws JasperException { + if (!n.isXmlSyntax()) { + buf.append("<").append(JSP_TEXT); + buf.append(" jsp:id=\""); + buf.append(jspId++).append("\">"); + } + buf.append("${"); + buf.append(n.getText()); + buf.append("}"); + if (!n.isXmlSyntax()) { + buf.append(JSP_TEXT_END); + } + buf.append("\n"); + } + public void visit(Node.IncludeAction n) throws JasperException { appendTag(JSP_INCLUDE, n.getAttributes(), n.getBody(), null); }
-- To unsubscribe, e-mail: <mailto:tomcat-dev-unsubscribe@;jakarta.apache.org> For additional commands, e-mail: <mailto:tomcat-dev-help@;jakarta.apache.org>