You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by pi...@locus.apache.org on 2000/11/30 22:48:29 UTC

cvs commit: jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler BeanGenerator.java DelegatingListener.java ForwardGenerator.java IncludeGenerator.java JspParseEventListener.java JspUtil.java ParseEventListener.java ParserXJspSaxHandler.java PluginGenerator.java SetPropertyGenerator.java TagBeginGenerator.java BaseJspListener.java DumbParseEventListener.java

pierred     00/11/30 13:48:26

  Modified:    jasper/src/share/org/apache/jasper/compiler
                        BeanGenerator.java DelegatingListener.java
                        ForwardGenerator.java IncludeGenerator.java
                        JspParseEventListener.java JspUtil.java
                        ParseEventListener.java ParserXJspSaxHandler.java
                        PluginGenerator.java SetPropertyGenerator.java
                        TagBeginGenerator.java
  Removed:     jasper/src/share/org/apache/jasper/compiler
                        BaseJspListener.java DumbParseEventListener.java
  Log:
  Let generators that process request-time expressions know for
  which syntax they were created. This is necessary since the way
  an rtexpr is specified is different depending on the syntax
  (<%...%> for JSP, and %=...% for XML)]. This affects the
  following generators:
    SetPropertyGenerator
    BeanGenerator
    Includegenerator
    ForwardGenerator
    PluginGenerator (via <jsp:param>)
    TagBeginGenerator
  
  JspUtil:
  - isExpression() and getExpr() now take isXml argument to tell
    in which syntax the runtime expression must be processed.
  
  Generators mentioned above:
  - Added isXml argument to the constructor.
  - Now calls the JspUtil isExpression() and getExpr() methods with the
    isXml argument.
  
  JspParseEventListener
  DelegatingListener
  ParseEventListener
  - new handler routines for the above generators that takes an extra
    boolean argument, isXml, which is passed to the generator's constructor.
    (already existing handler routine simply calls this new one with a
     'false' value for isXml).
  - now implements ParseEventListener instead of extending BaseJspListener
    (see below).
  
  ParserXJspSaxHandler
  - calls the JspParseEventListener handler routines for the above jsp
    actions with the isXml boolean argument.
  
  removed:
  BaseJspListener.java
  DumbParseEventListener.java
  - These classes added no real value and are always a pain to update
    whenever the ParseEventListener interface is updated.
  
  Revision  Changes    Path
  1.3       +8 -6      jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/BeanGenerator.java
  
  Index: BeanGenerator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/BeanGenerator.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- BeanGenerator.java	2000/10/11 19:35:10	1.2
  +++ BeanGenerator.java	2000/11/30 21:47:47	1.3
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/BeanGenerator.java,v 1.2 2000/10/11 19:35:10 shemnon Exp $
  - * $Revision: 1.2 $
  - * $Date: 2000/10/11 19:35:10 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/BeanGenerator.java,v 1.3 2000/11/30 21:47:47 pierred Exp $
  + * $Revision: 1.3 $
  + * $Date: 2000/11/30 21:47:47 $
    * The Apache Software License, Version 1.1
    *
    * Copyright (c) 1999 The Apache Software Foundation.  All rights 
  @@ -82,13 +82,15 @@
   	boolean genSession;
   	boolean beanRT = false;
   	Mark start;
  +        boolean isXml;
     
       public BeanGenerator (Mark start, Attributes attrs, BeanRepository beanInfo,
  -			  boolean genSession) {
  +			  boolean genSession, boolean isXml) {
   	this.attrs = attrs;
   	this.beanInfo = beanInfo;
   	this.genSession = genSession;
   	this.start = start;
  +        this.isXml = isXml;
       }
   	
       public void generate (ServletWriter writer, Class phase)
  @@ -171,8 +173,8 @@
   	    if (type == null) type = clsname;
   
   	    // See if beanName is a request-time expression.
  -	    if (beanName != null && JspUtil.isExpression (beanName)) {
  -		beanName = JspUtil.getExpr (beanName);
  +	    if (beanName != null && JspUtil.isExpression (beanName, isXml)) {
  +		beanName = JspUtil.getExpr (beanName, isXml);
   		beanRT = true;
   	    }
   	    
  
  
  
  1.5       +39 -10    jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/DelegatingListener.java
  
  Index: DelegatingListener.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/DelegatingListener.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- DelegatingListener.java	2000/10/11 19:35:11	1.4
  +++ DelegatingListener.java	2000/11/30 21:47:48	1.5
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/DelegatingListener.java,v 1.4 2000/10/11 19:35:11 shemnon Exp $
  - * $Revision: 1.4 $
  - * $Date: 2000/10/11 19:35:11 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/DelegatingListener.java,v 1.5 2000/11/30 21:47:48 pierred Exp $
  + * $Revision: 1.5 $
  + * $Date: 2000/11/30 21:47:48 $
    *
    * ====================================================================
    * 
  @@ -138,10 +138,15 @@
   
       public void handleBean(Mark start,Mark stop,Attributes attrs) throws JasperException
       {
  +        handleBean(start, stop, attrs, false);
  +    }
  +
  +    public void handleBean(Mark start,Mark stop,Attributes attrs, boolean isXml) throws JasperException
  +    {
           doAction(this.tmplStart, this.tmplStop);
  -        delegate.handleBean(start, stop, attrs);
  +        delegate.handleBean(start, stop, attrs, isXml);
       }
  -    
  +
       public void handleBeanEnd(Mark start,Mark stop,Attributes attrs) throws JasperException 
       {
           doAction(this.tmplStart, this.tmplStop);
  @@ -156,14 +161,24 @@
       
       public void handleSetProperty(Mark start,Mark stop,Attributes attrs) throws JasperException 
       {
  +        handleSetProperty(start, stop, attrs, false);
  +    }
  +
  +    public void handleSetProperty(Mark start,Mark stop,Attributes attrs,boolean isXml) throws JasperException 
  +    {
           doAction(this.tmplStart, this.tmplStop);
  -        delegate.handleSetProperty(start, stop, attrs);
  +        delegate.handleSetProperty(start, stop, attrs, isXml);
       }
       
       public void handlePlugin(Mark start,Mark stop,Attributes attrs,Hashtable param,String fallback) throws JasperException 
       {
  +        handlePlugin(start, stop, attrs, param, fallback, false);
  +    }
  +
  +    public void handlePlugin(Mark start,Mark stop,Attributes attrs,Hashtable param,String fallback, boolean isXml) throws JasperException 
  +    {
           doAction(this.tmplStart, this.tmplStop);
  -        delegate.handlePlugin(start, stop, attrs, param, fallback);
  +        delegate.handlePlugin(start, stop, attrs, param, fallback, isXml);
       }
       
       public void handleCharData(Mark start, Mark stop, char[] chars) throws JasperException {
  @@ -172,20 +187,34 @@
   
       public void handleForward(Mark start,Mark stop,Attributes attrs,Hashtable param) throws JasperException 
       {
  +        handleForward(start, stop, attrs, param, false);
  +    }
  +
  +    public void handleForward(Mark start,Mark stop,Attributes attrs,Hashtable param, boolean isXml) throws JasperException 
  +    {
           doAction(this.tmplStart, this.tmplStop);
  -        delegate.handleForward(start, stop, attrs, param);
  +        delegate.handleForward(start, stop, attrs, param, isXml);
       }
   
       public void handleInclude(Mark start,Mark stop,Attributes attrs,Hashtable param) throws JasperException 
       {
  +        handleInclude(start, stop, attrs, param, false);
  +    }
  +
  +    public void handleInclude(Mark start,Mark stop,Attributes attrs,Hashtable param, boolean isXml) throws JasperException 
  +    {
           doAction(this.tmplStart, this.tmplStop);
  -        delegate.handleInclude(start, stop, attrs, param);
  +        delegate.handleInclude(start, stop, attrs, param, isXml);
       }
   
       public void handleTagBegin(Mark start,Mark stop,Attributes attrs,String prefix,String shortTagName,TagLibraryInfo tli,TagInfo ti) throws JasperException
       {
  +        handleTagBegin(start, stop, attrs, prefix, shortTagName, tli, ti, false);
  +    }
  +    public void handleTagBegin(Mark start,Mark stop,Attributes attrs,String prefix,String shortTagName,TagLibraryInfo tli,TagInfo ti, boolean isXml) throws JasperException
  +    {
           doAction(this.tmplStart, this.tmplStop);
  -        delegate.handleTagBegin(start, stop, attrs, prefix, shortTagName, tli, ti);
  +        delegate.handleTagBegin(start, stop, attrs, prefix, shortTagName, tli, ti, isXml);
       }
       
       public void handleTagEnd(Mark start,Mark stop,String prefix,String shortTagName,Attributes attrs,TagLibraryInfo tli,TagInfo ti) throws JasperException
  
  
  
  1.4       +13 -10    jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ForwardGenerator.java
  
  Index: ForwardGenerator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ForwardGenerator.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ForwardGenerator.java	2000/10/24 00:37:57	1.3
  +++ ForwardGenerator.java	2000/11/30 21:47:52	1.4
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ForwardGenerator.java,v 1.3 2000/10/24 00:37:57 pierred Exp $
  - * $Revision: 1.3 $
  - * $Date: 2000/10/24 00:37:57 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ForwardGenerator.java,v 1.4 2000/11/30 21:47:52 pierred Exp $
  + * $Revision: 1.4 $
  + * $Date: 2000/11/30 21:47:52 $
    *
    * ====================================================================
    * 
  @@ -82,8 +82,10 @@
       String page;
       boolean isExpression = false;
       Hashtable params;
  +    boolean isXml;
       
  -    public ForwardGenerator(Mark start, Attributes attrs, Hashtable param)
  +    public ForwardGenerator(Mark start, Attributes attrs, Hashtable param,
  +                            boolean isXml)
   	throws JasperException {
   	    if (attrs.getLength() != 1)
   		throw new JasperException(Constants.getString("jsp.error.invalid.forward"));
  @@ -94,7 +96,8 @@
   					   Constants.getString("jsp.error.invalid.forward"));
   	    
   	    this.params = param;
  -	    isExpression = JspUtil.isExpression (page);
  +            this.isXml = isXml;
  +	    isExpression = JspUtil.isExpression (page, isXml);
       }
       
       public void generate(ServletWriter writer, Class phase) {
  @@ -115,21 +118,21 @@
   		    initial = false;
   		} else sep = "&";
   		
  -		if (value.length == 1 && JspUtil.isExpression(value[0]))
  +		if (value.length == 1 && JspUtil.isExpression(value[0], isXml))
   		    writer.println("_jspx_qfStr = _jspx_qfStr + \"" + sep +
  -				   key + "=\" + " + JspUtil.getExpr(value[0]) + ";");
  +				   key + "=\" + " + JspUtil.getExpr(value[0], isXml) + ";");
   		else {
   		    if (value.length == 1)
   			writer.println("_jspx_qfStr = _jspx_qfStr + \"" + sep +
   				       key + "=\" + \"" + value[0] + "\";");			
   		    else {
   			for (int i = 0; i < value.length; i++) {
  -			    if (!JspUtil.isExpression(value[i]))
  +			    if (!JspUtil.isExpression(value[i], isXml))
   				writer.println("_jspx_qfStr = _jspx_qfStr + \"" + sep +
   					       key + "=\" + \"" + value[i] + "\";");
   			    else
   				writer.println("_jspx_qfStr = _jspx_qfStr + \"" + sep +
  -					       key + "=\" +" + JspUtil.getExpr(value[i])+ ";");
  +					       key + "=\" +" + JspUtil.getExpr(value[i], isXml)+ ";");
   			    if (sep.equals("?")) sep = "&";			    
   			}
   		    }
  @@ -141,7 +144,7 @@
   			   writer.quoteString(page) + " +  _jspx_qfStr);");
   	else
               writer.println("pageContext.forward(" +
  -			   JspUtil.getExpr (page) +  " +  _jspx_qfStr);");
  +			   JspUtil.getExpr (page, isXml) +  " +  _jspx_qfStr);");
   	
           writer.println("return;");
           writer.popIndent();
  
  
  
  1.6       +13 -10    jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/IncludeGenerator.java
  
  Index: IncludeGenerator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/IncludeGenerator.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- IncludeGenerator.java	2000/10/24 00:37:58	1.5
  +++ IncludeGenerator.java	2000/11/30 21:47:53	1.6
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/IncludeGenerator.java,v 1.5 2000/10/24 00:37:58 pierred Exp $
  - * $Revision: 1.5 $
  - * $Date: 2000/10/24 00:37:58 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/IncludeGenerator.java,v 1.6 2000/11/30 21:47:53 pierred Exp $
  + * $Revision: 1.6 $
  + * $Date: 2000/11/30 21:47:53 $
    *
    * ====================================================================
    * 
  @@ -86,8 +86,10 @@
       boolean isExpression = false;
       boolean flush;
       Hashtable params;
  +    boolean isXml;
       
  -    public IncludeGenerator(Mark start, Attributes attrs, Hashtable param) 
  +    public IncludeGenerator(Mark start, Attributes attrs, Hashtable param,
  +                            boolean isXml) 
           throws JasperException 
       {
   	if (attrs.getLength() > 2) {
  @@ -120,7 +122,8 @@
   				   new Object[]{flushString}));
           }
   	this.params = param;
  -	isExpression = JspUtil.isExpression (page);
  +	this.isXml = isXml;
  +	isExpression = JspUtil.isExpression (page, isXml);
       }
       
       public void generate(ServletWriter writer, Class phase) {
  @@ -142,9 +145,9 @@
   		    initial = false;
   		} else sep = "&";
   		
  -		if (value.length == 1 && JspUtil.isExpression(value[0])) {
  +		if (value.length == 1 && JspUtil.isExpression(value[0], isXml)) {
   		    writer.println("_jspx_qStr = _jspx_qStr + \"" + sep +
  -				   key + "=\" + " + JspUtil.getExpr(value[0]) + ";");
  +				   key + "=\" + " + JspUtil.getExpr(value[0], isXml) + ";");
   		} else {
   		    if (value.length == 1) {
   			writer.println("_jspx_qStr = _jspx_qStr + \"" + sep +
  @@ -152,12 +155,12 @@
   		    } else {
   			writer.println("String [] _tmpS = new String[" + value.length +"];");
   			for (int i = 0; i < value.length; i++) {
  -			    if (!JspUtil.isExpression(value[i]))
  +			    if (!JspUtil.isExpression(value[i], isXml))
   				writer.println("_jspx_qStr = _jspx_qStr + \"" + sep +
   					       key + "=\" + \"" + value[i] + "\";");
   			    else
   				writer.println("_jspx_qStr = _jspx_qStr + \"" + sep +
  -					       key + "=\" +" + JspUtil.getExpr(value[i])+ ";");
  +					       key + "=\" +" + JspUtil.getExpr(value[i], isXml)+ ";");
   			    if (sep.equals("?")) sep = "&";
   			    
   			}
  @@ -170,7 +173,7 @@
   			   writer.quoteString(page) + " + _jspx_qStr);");
   	else
   	    writer.println ("pageContext.include(" + 
  -			    JspUtil.getExpr(page) + " + _jspx_qStr);");
  +			    JspUtil.getExpr(page, isXml) + " + _jspx_qStr);");
   
   	writer.popIndent();
   	writer.println("}");
  
  
  
  1.13      +94 -37    jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspParseEventListener.java
  
  Index: JspParseEventListener.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspParseEventListener.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- JspParseEventListener.java	2000/11/26 16:17:34	1.12
  +++ JspParseEventListener.java	2000/11/30 21:47:54	1.13
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspParseEventListener.java,v 1.12 2000/11/26 16:17:34 pierred Exp $
  - * $Revision: 1.12 $
  - * $Date: 2000/11/26 16:17:34 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspParseEventListener.java,v 1.13 2000/11/30 21:47:54 pierred Exp $
  + * $Revision: 1.13 $
  + * $Date: 2000/11/30 21:47:54 $
    *
    * ====================================================================
    *
  @@ -92,10 +92,13 @@
    * @author Pierre Delisle
    * @author Danno Ferrin
    */
  -public class JspParseEventListener extends BaseJspListener {
  +public class JspParseEventListener implements ParseEventListener {
   
       private static CommentGenerator commentGenerator = new JakartaCommentGenerator();
   
  +    protected JspReader reader;
  +    protected ServletWriter writer;
  +
       JspCompilationContext ctxt;
       ParserController parserCtl;
   
  @@ -156,13 +159,21 @@
   	commentGenerator = generator;
       }
   
  +    public void setReader(JspReader reader) {
  +	this.reader = reader;
  +    }
  +
  +    public void setTemplateInfo(Mark start, Mark stop) {
  +    }
  +
       /*
        * Package private since I want everyone to come in through
        * org.apache.jasper.compiler.Main.
        */
       JspParseEventListener(JspCompilationContext ctxt,
   			  ParserController parserCtl) {
  -	super(ctxt.getReader(), ctxt.getWriter());
  +	this.reader = ctxt.getReader();
  +	this.writer = ctxt.getWriter();
           this.ctxt = ctxt;
           this.parserCtl = parserCtl;
   	this.beanInfo = new BeanRepository(ctxt.getClassLoader());
  @@ -855,15 +866,22 @@
       }
   
       public void handleBean(Mark start, Mark stop, Attributes attrs)
  -	throws JasperException
  +        throws JasperException
       {
  -        Generator gen
  -            = new GeneratorWrapper(new BeanGenerator(start, attrs, beanInfo,
  -                                                     genSessionVariable),
  -                                   start, stop);
  +        handleBean(start, stop, attrs, false);
  +    }
   
  -	addGenerator(gen);
  -	xo.append("jsp:useBean", attrs);
  +    public void handleBean(Mark start, Mark stop, Attributes attrs,
  +                           boolean isXml)
  +        throws JasperException
  +    {
  +        Generator gen =
  +            new GeneratorWrapper(
  +                new BeanGenerator(start, attrs, beanInfo,
  +                                  genSessionVariable, isXml),
  +                start, stop);
  +        addGenerator(gen);
  +        xo.append("jsp:useBean", attrs);
       }
   
       public void handleBeanEnd(Mark start, Mark stop, Attributes attrs)
  @@ -889,53 +907,80 @@
       }
   
       public void handleSetProperty(Mark start, Mark stop, Attributes attrs)
  -	throws JasperException
  +        throws JasperException
       {
  -        Generator gen
  -            = new GeneratorWrapper(new SetPropertyGenerator(start, stop, attrs,
  -	    			   beanInfo), start, stop);
  +        handleSetProperty(start, stop, attrs, false);
  +    }
   
  -	addGenerator(gen);
  -	xo.append("jsp:setProperty", attrs);
  +    public void handleSetProperty(Mark start, Mark stop, Attributes attrs, 
  +                                  boolean isXml)
  +        throws JasperException
  +    {
  +        Generator gen = 
  +            new GeneratorWrapper(
  +                new SetPropertyGenerator(start, stop, attrs, beanInfo, isXml),
  +                start, stop);
  +        addGenerator(gen);
  +        xo.append("jsp:setProperty", attrs);
       }
   
       public void handlePlugin(Mark start, Mark stop, Attributes attrs,
  -    				Hashtable param, String fallback)
  +    			     Hashtable param, String fallback)
   	throws JasperException
       {
  -        Constants.message("jsp.message.handling_plugin",
  -                          new Object[] { attrs },
  -                          Logger.DEBUG);
  +	handlePlugin(start, stop, attrs, param, fallback, false);
  +    }
   
  -	Generator gen = new GeneratorWrapper (new PluginGenerator (start, attrs,
  -					      param, fallback), start, stop);
  +    public void handlePlugin(Mark start, Mark stop, Attributes attrs,
  +    			     Hashtable param, String fallback, boolean isXml)
  +	throws JasperException
  +    {
  +	Generator gen = 
  +            new GeneratorWrapper(
  +                new PluginGenerator(start, attrs, param, fallback, isXml), 
  +                start, stop);
   	addGenerator (gen);
   	//@@@ xo
       }
   
  -    public void handleForward(Mark start, Mark stop, Attributes attrs, Hashtable param)
  +    public void handleForward(Mark start, Mark stop, Attributes attrs, 
  +                              Hashtable param)
   	throws JasperException
       {
  -        Generator gen
  -            = new GeneratorWrapper(new ForwardGenerator(start, attrs, param),
  -                                   start, stop);
  +	handleForward(start, stop, attrs, param, false);
  +    }
   
  +    public void handleForward(Mark start, Mark stop, Attributes attrs, 
  +                              Hashtable param, boolean isXml)
  +	throws JasperException
  +    {
  +        Generator gen = 
  +            new GeneratorWrapper(
  +                new ForwardGenerator(start, attrs, param, isXml),
  +                start, stop);
   	addGenerator(gen);
   	//@@@ xo
       }
   
  -    public void handleInclude(Mark start, Mark stop, Attributes attrs, Hashtable param)
  +    public void handleInclude(Mark start, Mark stop, Attributes attrs, 
  +                              Hashtable param)
   	throws JasperException
       {
  -        Generator gen
  -            = new GeneratorWrapper(new IncludeGenerator(start, attrs, param),
  -                                   start, stop);
  +	handleInclude(start, stop, attrs, param, false);
  +    }
   
  +    public void handleInclude(Mark start, Mark stop, Attributes attrs, 
  +                              Hashtable param, boolean isXml)
  +	throws JasperException
  +    {
  +        Generator gen = 
  +            new GeneratorWrapper(
  +                new IncludeGenerator(start, attrs, param, isXml),
  +                start, stop);
   	addGenerator(gen);
   	//@@@ xo
       }
   
  -
       public void handleCharData(Mark start, Mark stop, char[] chars) throws JasperException {
           GeneratorBase cdg;
   
  @@ -955,15 +1000,27 @@
           xo.append(chars);
       }
   
  -    public void handleTagBegin(Mark start, Mark stop, Attributes attrs, String prefix,
  +    public void handleTagBegin(Mark start, Mark stop, 
  +                               Attributes attrs, String prefix,
   			       String shortTagName, TagLibraryInfo tli,
   			       TagInfo ti)
   	throws JasperException
       {
  -        TagBeginGenerator tbg = new TagBeginGenerator(start, prefix, shortTagName, attrs,
  -	    tli, ti, libraries, getTagHandlerStack(), getTagVarNumbers());
  -        Generator gen = new GeneratorWrapper(tbg, start, stop);
  +	handleTagBegin(start, stop, attrs, prefix, shortTagName, tli, ti, 
  +                       false);
  +    }
   
  +    public void handleTagBegin(Mark start, Mark stop, 
  +                               Attributes attrs, String prefix,
  +			       String shortTagName, TagLibraryInfo tli,
  +			       TagInfo ti, boolean isXml)
  +	throws JasperException
  +    {
  +        TagBeginGenerator tbg = 
  +            new TagBeginGenerator(start, prefix, shortTagName, attrs,
  +	                          tli, ti, libraries, getTagHandlerStack(), 
  +                                  getTagVarNumbers(), isXml);
  +        Generator gen = new GeneratorWrapper(tbg, start, stop);
   	addGenerator(gen);
           xo.append(prefix+":"+shortTagName, attrs);
       }
  
  
  
  1.7       +48 -16    jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspUtil.java
  
  Index: JspUtil.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspUtil.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- JspUtil.java	2000/11/18 22:36:48	1.6
  +++ JspUtil.java	2000/11/30 21:47:55	1.7
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspUtil.java,v 1.6 2000/11/18 22:36:48 pierred Exp $
  - * $Revision: 1.6 $
  - * $Date: 2000/11/18 22:36:48 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspUtil.java,v 1.7 2000/11/30 21:47:55 pierred Exp $
  + * $Revision: 1.7 $
  + * $Date: 2000/11/30 21:47:55 $
    *
    * ====================================================================
    * 
  @@ -93,11 +93,15 @@
    * @author Mandar Raje.
    * @author Rajiv Mordani.
    * @author Danno Ferrin
  + * @author Pierre Delisle
    */
   public class JspUtil {
   
  +    // Delimiters for request-time expressions (JSP and XML syntax)
       private static final String OPEN_EXPR  = "<%=";
       private static final String CLOSE_EXPR = "%>";
  +    private static final String OPEN_EXPR_XML  = "%=";
  +    private static final String CLOSE_EXPR_XML = "%";
   
       private static ErrorHandler errorHandler = new MyErrorHandler();
       private static EntityResolver entityResolver = new MyEntityResolver();
  @@ -116,27 +120,55 @@
   	return caw.toCharArray();
       }
   
  -    // Checks if the token is a runtime expression.
  -    public static boolean isExpression (String token) {
  -	
  -	if (token.startsWith(OPEN_EXPR) && token.endsWith(CLOSE_EXPR)) {
  +    /**
  +     * Checks if the token is a runtime expression.
  +     * In standard JSP syntax, a runtime expression starts with '<%' and
  +     * ends with '%>'. When the JSP document is in XML syntax, a runtime
  +     * expression starts with '%=' and ends with '%'.
  +     *
  +     * @param token The token to be checked
  +     * return whether the token is a runtime expression or not.
  +     */
  +    public static boolean isExpression(String token, boolean isXml) {
  +	String openExpr;
  +	String closeExpr;
  +	if (isXml) {
  +	    openExpr = OPEN_EXPR_XML;
  +	    closeExpr = CLOSE_EXPR_XML;
  +	} else {
  +	    openExpr = OPEN_EXPR;
  +	    closeExpr = CLOSE_EXPR;
  +	}
  +	if (token.startsWith(openExpr) && token.endsWith(closeExpr)) {
   	    return true;
  +	} else {
  +	    return false;
   	}
  -
  -	return false;
       }
   
  -    // Returns the "expression" part -- takin <%= and %> out.
  -    public static String getExpr (String expression) {
  +    /**
  +     * @return the "expression" part of a runtime expression, 
  +     * taking the delimiters out.
  +     */
  +    public static String getExpr (String expression, boolean isXml) {
   	String returnString;
  +	String openExpr;
  +	String closeExpr;
  +	if (isXml) {
  +	    openExpr = OPEN_EXPR_XML;
  +	    closeExpr = CLOSE_EXPR_XML;
  +	} else {
  +	    openExpr = OPEN_EXPR;
  +	    closeExpr = CLOSE_EXPR;
  +	}
   	int length = expression.length();
  -	
  -	if (expression.startsWith(OPEN_EXPR) && expression.endsWith(CLOSE_EXPR)) {
  -	    returnString = expression.substring (OPEN_EXPR.length(), length - CLOSE_EXPR.length());
  +	if (expression.startsWith(openExpr) && 
  +                expression.endsWith(closeExpr)) {
  +	    returnString = expression.substring(
  +                               openExpr.length(), length - closeExpr.length());
   	} else {
   	    returnString = "";
   	}
  -
   	return returnString;
       }
   
  @@ -148,7 +180,7 @@
           int length = expression.length();
   
           if (expression.startsWith(OPEN_EXPR) 
  -         && expression.endsWith(CLOSE_EXPR)) {
  +                && expression.endsWith(CLOSE_EXPR)) {
               returnString = expression.substring (1, length - 1);
           } else {
               returnString = expression;
  
  
  
  1.5       +15 -3     jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ParseEventListener.java
  
  Index: ParseEventListener.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ParseEventListener.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ParseEventListener.java	2000/10/11 19:35:15	1.4
  +++ ParseEventListener.java	2000/11/30 21:47:56	1.5
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ParseEventListener.java,v 1.4 2000/10/11 19:35:15 shemnon Exp $
  - * $Revision: 1.4 $
  - * $Date: 2000/10/11 19:35:15 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ParseEventListener.java,v 1.5 2000/11/30 21:47:56 pierred Exp $
  + * $Revision: 1.5 $
  + * $Date: 2000/11/30 21:47:56 $
    *
    * ====================================================================
    * 
  @@ -99,12 +99,17 @@
       void handleExpression(Mark start, Mark stop, Attributes attrs, char[] text) throws JasperException;
       void handleBean(Mark start, Mark stop, Attributes attrs) 
   	throws JasperException;
  +    void handleBean(Mark start, Mark stop, Attributes attrs, boolean isXml) 
  +	throws JasperException;
       void handleBeanEnd (Mark start, Mark stop, Attributes attrs)
   	throws JasperException;
       void handleGetProperty(Mark start, Mark stop, Attributes attrs) throws JasperException;
       void handleSetProperty(Mark start, Mark stop, Attributes attrs) throws JasperException;
  +    void handleSetProperty(Mark start, Mark stop, Attributes attrs, boolean isXml) throws JasperException;
       void handlePlugin(Mark start, Mark stop, Attributes attrs, Hashtable param, 
       			String fallback) throws JasperException;
  +    void handlePlugin(Mark start, Mark stop, Attributes attrs, Hashtable param, 
  +    			String fallback, boolean isXml) throws JasperException;
       void handleCharData(Mark start, Mark stop, char[] chars) throws JasperException;
   
   
  @@ -121,6 +126,9 @@
       void handleTagBegin(Mark start, Mark stop, Attributes attrs, String prefix, String shortTagName,
   			TagLibraryInfo tli, TagInfo ti) 
   	throws JasperException;
  +    void handleTagBegin(Mark start, Mark stop, Attributes attrs, String prefix, String shortTagName,
  +			TagLibraryInfo tli, TagInfo ti, boolean isXml) 
  +	throws JasperException;
   
       void handleTagEnd(Mark start, Mark stop, String prefix, String shortTagName,
   		      Attributes attrs, TagLibraryInfo tli, TagInfo ti)
  @@ -128,7 +136,11 @@
   
       void handleForward(Mark start, Mark stop, Attributes attrs, Hashtable param)
   	throws JasperException;
  +    void handleForward(Mark start, Mark stop, Attributes attrs, Hashtable param, boolean isXml)
  +	throws JasperException;
       void handleInclude(Mark start, Mark stop, Attributes attrs, Hashtable param)
  +	throws JasperException;
  +    void handleInclude(Mark start, Mark stop, Attributes attrs, Hashtable param, boolean isXml)
   	throws JasperException;
   
       void endPageProcessing() throws JasperException;
  
  
  
  1.4       +6 -6      jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ParserXJspSaxHandler.java
  
  Index: ParserXJspSaxHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ParserXJspSaxHandler.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ParserXJspSaxHandler.java	2000/10/11 19:35:16	1.3
  +++ ParserXJspSaxHandler.java	2000/11/30 21:47:57	1.4
  @@ -257,7 +257,7 @@
   	    if (name.equals("jsp:root")) {
   		jspHandler.handleRootBegin(node.attrs);
   	    } else if (name.equals("jsp:useBean")) {
  -		jspHandler.handleBean(node.start, node.start, node.attrs);
  +		jspHandler.handleBean(node.start, node.start, node.attrs, true);
   	    } else if (name.length()<4 || 
   		       !name.substring(0,4).equals("jsp:")) {
   		// custom tag or 'uninterpreted' tag
  @@ -347,7 +347,7 @@
   		    node = (Node)stack.pop();
   		}
   		node.validate(true, true); //@@@
  -		jspHandler.handleInclude(node.start, stop, node.attrs, params);
  +		jspHandler.handleInclude(node.start, stop, node.attrs, params, true);
   	    } else if (name.equals("jsp:forward")) {
   		Hashtable params = null;
   		if (!node.rawName.equals("jsp:forward")) {
  @@ -357,7 +357,7 @@
   		    node = (Node)stack.pop();
   		}
   		node.validate(true, true);
  -		jspHandler.handleForward(node.start, stop, node.attrs, params);
  +		jspHandler.handleForward(node.start, stop, node.attrs, params, true);
   	    } else if (name.equals("jsp:useBean")) {
   		node.validate(true, true); // @@@
   		jspHandler.handleBeanEnd(node.start, stop, node.attrs);
  @@ -366,7 +366,7 @@
   		jspHandler.handleGetProperty(node.start, stop, node.attrs);
   	    } else if (name.equals("jsp:setProperty")) {
   		node.validate(true, true); // @@@
  -		jspHandler.handleSetProperty(node.start, stop, node.attrs);
  +		jspHandler.handleSetProperty(node.start, stop, node.attrs, true);
   	    } else if (name.equals("jsp:plugin")) {
   		//@@@ test jsp parser to see if fallback can come first?
   		Hashtable params = null;
  @@ -385,7 +385,7 @@
   		node.validate(true, true);
   		//p(node);
   		jspHandler.handlePlugin(node.start, stop, node.attrs, params, 
  -                        fallback);
  +                        fallback, true);
   	    } else {
   		if (node.isUninterpretedTag()) {
   		    // this is an 'uninterpreted' tag
  @@ -421,7 +421,7 @@
   	node = new NodeTag(node, prefix, shortTagName, tli, ti);
   	stack.push(node);
   	jspHandler.handleTagBegin(node.start, node.start, node.attrs, 
  -				  prefix, shortTagName, tli, ti);
  +				  prefix, shortTagName, tli, ti, true);
       }
       
       private void processCustomTagEnd(NodeTag node, Mark stop) 
  
  
  
  1.3       +11 -9     jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/PluginGenerator.java
  
  Index: PluginGenerator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/PluginGenerator.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PluginGenerator.java	2000/10/11 19:35:16	1.2
  +++ PluginGenerator.java	2000/11/30 21:47:57	1.3
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/PluginGenerator.java,v 1.2 2000/10/11 19:35:16 shemnon Exp $
  - * $Revision: 1.2 $
  - * $Date: 2000/10/11 19:35:16 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/PluginGenerator.java,v 1.3 2000/11/30 21:47:57 pierred Exp $
  + * $Revision: 1.3 $
  + * $Date: 2000/11/30 21:47:57 $
    *
    * ====================================================================
    * 
  @@ -86,14 +86,16 @@
   
       String ieClassId;
       Mark start;
  +    boolean isXml;
       
       
       public PluginGenerator(Mark start, Attributes attrs, Hashtable param,
  -			   String fallback) {
  +			   String fallback, boolean isXml) {
       	this.attrs = attrs;
   	this.param = param;
   	this.fallback = fallback;
   	this.start = start;
  +        this.isXml = isXml;
       }
   
       public void init(JspCompilationContext ctxt) throws JasperException {
  @@ -202,9 +204,9 @@
   	 	//Check to see if the param is an expression, if so
   		//evaluate that and put the value.
   		String temp = null;
  -		if (JspUtil.isExpression (value[0])) {
  -		    temp = JspUtil.getExpr (value[0]);
  -		    //value[0] = JspUtil.getExpr(value[0]);
  +		if (JspUtil.isExpression (value[0], isXml)) {
  +		    temp = JspUtil.getExpr (value[0], isXml);
  +		    //value[0] = JspUtil.getExpr(value[0], isXml);
   		    writer.print ("_jspxString =" + temp + ";");
   		} else {
   		    writer.print ("_jspxString = \"" + value[0] + "\";");
  @@ -259,8 +261,8 @@
   		writer.indent ();
   
   	        //value = (String[]) param.get (key);
  -		if (JspUtil.isExpression (value[0])) {
  -		    value[0] = JspUtil.getExpr(value[0]);
  +		if (JspUtil.isExpression(value[0], isXml)) {
  +		    value[0] = JspUtil.getExpr(value[0], isXml);
   		    writer.print ("_jspxNSString[i][1] =" + value[0] + ";");
   		} else {
   		    writer.print ("_jspxNSString[i][1] = \"" + value[0] + 
  
  
  
  1.3       +8 -6      jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/SetPropertyGenerator.java
  
  Index: SetPropertyGenerator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/SetPropertyGenerator.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- SetPropertyGenerator.java	2000/10/11 19:35:17	1.2
  +++ SetPropertyGenerator.java	2000/11/30 21:47:58	1.3
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/SetPropertyGenerator.java,v 1.2 2000/10/11 19:35:17 shemnon Exp $
  - * $Revision: 1.2 $
  - * $Date: 2000/10/11 19:35:17 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/SetPropertyGenerator.java,v 1.3 2000/11/30 21:47:58 pierred Exp $
  + * $Revision: 1.3 $
  + * $Date: 2000/11/30 21:47:58 $
    *
    * ====================================================================
    * 
  @@ -83,12 +83,14 @@
       Attributes attrs;
       BeanRepository beanInfo;
       Mark start;
  +    boolean isXml;
       
       public SetPropertyGenerator (Mark start, Mark stop, Attributes attrs,
  -				 BeanRepository beanInfo) {
  +				 BeanRepository beanInfo, boolean isXml) {
   	this.attrs = attrs;
   	this.beanInfo = beanInfo;
   	this.start = start;
  +        this.isXml = isXml;
       }
       
       public void generate (ServletWriter writer, Class phase) 
  @@ -123,7 +125,7 @@
   		} else {
   		    
   		    // value is a constant.
  -		    if (!JspUtil.isExpression (value)) {
  +		    if (!JspUtil.isExpression (value, isXml)) {
   			writer.println("JspRuntimeLibrary.introspecthelper(pageContext." +
   				       "findAttribute(\"" + name + "\"), \"" + property +
   				       "\",\"" + JspUtil.escapeQueryString(value) +
  @@ -134,7 +136,7 @@
   			// int, boolean, ... are not Object(s).
   			writer.println("JspRuntimeLibrary.handleSetProperty(pageContext." +
   				       "findAttribute(\"" + name + "\"), \"" + property +
  -				       "\"," + JspUtil.getExpr(value) + ");");
  +				       "\"," + JspUtil.getExpr(value, isXml) + ");");
   		    }
   		}
   	    }
  
  
  
  1.7       +7 -4      jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagBeginGenerator.java
  
  Index: TagBeginGenerator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagBeginGenerator.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- TagBeginGenerator.java	2000/11/01 20:25:07	1.6
  +++ TagBeginGenerator.java	2000/11/30 21:47:59	1.7
  @@ -99,11 +99,13 @@
       TagData tagData;
       Mark start;
       TagLibraries libraries;
  +    boolean isXml;
   
   
       public TagBeginGenerator(Mark start, String prefix, String shortTagName, Attributes attrs,
   			     TagLibraryInfo tli, TagInfo ti, TagLibraries libraries,
  -                             Stack tagHandlerStack, Hashtable tagVarNumbers)
  +                             Stack tagHandlerStack, Hashtable tagVarNumbers,
  +                             boolean isXml)
           throws JasperException
       {
           setTagHandlerStack(tagHandlerStack);
  @@ -118,6 +120,7 @@
   	this.thVarName = "_jspx_th_"+baseVarName;
   	this.start = start;
   	this.libraries = libraries;
  +	this.isXml = isXml;
       }
   
       public void init(JspCompilationContext ctxt) throws JasperException {
  @@ -167,7 +170,7 @@
                   if (attr.equals(attributes[i].getName())) {
                       found = true;
                       if (attributes[i].canBeRequestTime() &&
  -			JspUtil.isExpression((String)attribs.get(attr)))
  +			JspUtil.isExpression((String)attribs.get(attr), isXml))
                           attribs.put(attr, TagData.REQUEST_TIME_VALUE);
   		}
   
  @@ -215,8 +218,8 @@
                   // assert(c.length > 0)
   
                   if (attributes[i].canBeRequestTime() && 
  -                        JspUtil.isExpression(attrValue)) {
  -                    attrValue = JspUtil.getExpr(attrValue);
  +                        JspUtil.isExpression(attrValue, isXml)) {
  +                    attrValue = JspUtil.getExpr(attrValue, isXml);
                   } else {
                       attrValue = convertString(c[0], attrValue, writer, attrName,
                                                 tc.getPropertyEditorClass(attrName));