You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ki...@apache.org on 2002/11/08 04:03:01 UTC
cvs commit: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler JspDocumentParser.java PageDataImpl.java
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: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>