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>