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>

Reply via email to