You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by Mark Roth <ma...@sun.com> on 2002/08/20 17:58:04 UTC

Re: cvs commit: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/resources messages.properties

Thans, Kin-Man!

- Mark

On Tue, 2002-08-20 at 11:50, kinman@apache.org wrote:
> kinman      2002/08/20 08:50:23
> 
>   Modified:    jasper2/src/share/org/apache/jasper JspC.java
>                jasper2/src/share/org/apache/jasper/compiler Generator.java
>                         ImplicitTagLibraryInfo.java Parser.java
>                         ParserController.java TagFileProcessor.java
>                jasper2/src/share/org/apache/jasper/resources
>                         messages.properties
>   Log:
>   - Submitted by Mark Roth:
>   
>       - Implemented the value attribute of jsp:doBody for classic
>         tag handlers.
>       - Stubbed out JspC with getJspConfig() so it compiles.
>       - Added null check for addInclude() to handle the case where there
>         are no preludes or codas.
>       - Now accepts /WEB-INF/tags as well as /WEB-INF/tags/ for tag file
>         default directory.
>       - ParserController now uses path name to determine if the given
>         element is a tag file instead of searching for tag directive.
>       - In a tag file, an attribute directive with a fragment attribute
>         must not allow a rtexprvalue attribute, and must fix its value
>         to "true".  Fixed implementation to comply with spec.
>       - Fixed preamble and postamble generator for Tag Files.  Was not
>         generating declarations, tag handler pools, methods buffer,
>         helper fragment, etc.  Generator now shares code between servlet
>         and tag handler pre and post ambles.
>       - Even though spec is not clear that they're required,
>         added implicit objects to doTag() so they are available in
>         tag files.
>   
>   Revision  Changes    Path
>   1.13      +13 -3     jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspC.java
>   
>   Index: JspC.java
>   ===================================================================
>   RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspC.java,v
>   retrieving revision 1.12
>   retrieving revision 1.13
>   diff -u -r1.12 -r1.13
>   --- JspC.java	26 Jun 2002 16:50:38 -0000	1.12
>   +++ JspC.java	20 Aug 2002 15:50:22 -0000	1.13
>   @@ -75,6 +75,7 @@
>    
>    import org.apache.jasper.logging.Logger;
>    import org.apache.jasper.logging.JasperLogger;
>   +import org.apache.jasper.compiler.JspConfig;
>    
>    /**
>     * Shell for the jspc compiler.  Handles all options associated with the 
>   @@ -912,6 +913,15 @@
>            
>            Constants.jasperLog.setVerbosityLevel(verbosityLevel);
>        }
>   +    
>   +    /** 
>   +     * Obtain JSP configuration informantion specified in web.xml.
>   +     */
>   +    public JspConfig getJspConfig() {
>   +        // XXX - Stubbed out so Jasper compiles.
>   +        initServletContext();
>   +        return new JspConfig( context );
>   +    }    
>    
>    }
>    
>   
>   
>   
>   1.72      +240 -97   jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java
>   
>   Index: Generator.java
>   ===================================================================
>   RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
>   retrieving revision 1.71
>   retrieving revision 1.72
>   diff -u -r1.71 -r1.72
>   --- Generator.java	20 Aug 2002 01:42:38 -0000	1.71
>   +++ Generator.java	20 Aug 2002 15:50:22 -0000	1.72
>   @@ -170,6 +170,7 @@
>    
>    	out.println();
>    	page.visit(new DeclarationVisitor());
>   +	out.println();
>        }
>    
>        /**
>   @@ -329,23 +330,25 @@
>        }
>    
>        /**
>   -     * Generates the beginning of the static portion of the servelet.
>   +     * Generate preamble package name
>   +     * (shared by servlet and tag handler preamble generation)
>         */
>   -    private void generatePreamble(Node.Nodes page) throws JasperException {
>   -
>   -	String servletPackageName = ctxt.getServletPackageName();
>   -	String servletClassName = ctxt.getServletClassName();
>   -	String serviceMethodName = Constants.SERVICE_METHOD_NAME;
>   -
>   -	// First the package name:
>   -
>   -	if (! "".equals(servletPackageName) && servletPackageName != null) {
>   -	    out.printil("package " + servletPackageName + ";");
>   +    private void genPreamblePackage( String packageName ) 
>   +        throws JasperException
>   +    {
>   +	if (! "".equals(packageName) && packageName != null) {
>   +	    out.printil("package " + packageName + ";");
>    	    out.println();
>            }
>   -
>   -	// Generate imports
>   -
>   +    }
>   +    
>   +    /**
>   +     * Generate preamble imports
>   +     * (shared by servlet and tag handler preamble generation)
>   +     */
>   +    private void genPreambleImports() 
>   +        throws JasperException
>   +    {
>    	Iterator iter = pageInfo.getImports().iterator();
>    	while (iter.hasNext()) {
>    	    out.printin("import ");
>   @@ -353,31 +356,21 @@
>    	    out.println(";");
>    	}
>    	out.println();
>   +    }
>    
>   -	// Generate class declaration
>   -
>   -	out.printin("public class ");
>   -	out.print  (servletClassName);
>   -	out.print  (" extends ");
>   -	out.print  (pageInfo.getExtends());
>   -	if (!pageInfo.isThreadSafe()) {
>   -	    out.print("implements SingleThreadModel");
>   -	}
>   -	out.println(" {");
>   -	out.pushIndent();
>   -
>   -	// Class body begins here
>   -
>   -	generateDeclarations(page);
>   -	out.println();
>   -
>   -	// Static initializations here
>   -
>   +    /**
>   +     * Generation of static initializers in preamble.
>   +     * For example, include list, el function map, prefix map.
>   +     * (shared by servlet and tag handler preamble generation)
>   +     */
>   +    private void genPreambleStaticInitializers() 
>   +        throws JasperException
>   +    {
>            // Static data for getIncludes()
>            out.printil("private static java.util.Vector _jspx_includes;");
>            out.println();
>            List includes = pageInfo.getIncludes();
>   -        iter = includes.iterator();
>   +        Iterator iter = includes.iterator();
>            if( !includes.isEmpty() ) {
>                out.printil("static {");
>                out.pushIndent();
>   @@ -397,13 +390,16 @@
>            // Static data for EL function and prefix maps:
>            generateELFunctionMap();
>    	generatePrefixMap();
>   +    }
>    
>   - 	// Class variable declarations
>   -     	
>   -	/*
>   -	 * Declare tag handler pools (tags of the same type and with the same
>   -	 * attribute set share the same tag handler pool)
>   -	 */
>   +    /**
>   +     * Declare tag handler pools (tags of the same type and with the same
>   +     * attribute set share the same tag handler pool)
>   +     * (shared by servlet and tag handler preamble generation)
>   +     */
>   +    private void genPreambleClassVariableDeclarations( String className ) 
>   +        throws JasperException
>   +    {
>    	if (ctxt.getOptions().isPoolingEnabled()
>    	        && !tagHandlerPoolNames.isEmpty()) {
>    	    for (int i=0; i<tagHandlerPoolNames.size(); i++) {
>   @@ -416,11 +412,17 @@
>    	// Constructor
>    	if (ctxt.getOptions().isPoolingEnabled()
>    	        && !tagHandlerPoolNames.isEmpty()) {
>   -	    generateServletConstructor(servletClassName);
>   +	    generateConstructor(className);
>    	}
>   - 
>   -	// Methods here
>   +    }
>    
>   +    /**
>   +     * Declare general-purpose methods
>   +     * (shared by servlet and tag handler preamble generation)
>   +     */
>   +    private void genPreambleMethods() 
>   +        throws JasperException
>   +    {
>    	// Method used to get compile time include file dependencies
>            out.printil("public java.util.List getIncludes() {");
>            out.pushIndent();
>   @@ -433,6 +435,45 @@
>    	        && !tagHandlerPoolNames.isEmpty()) {
>    	    generateDestroy();
>    	}
>   +    }
>   +    
>   +    /**
>   +     * Generates the beginning of the static portion of the servelet.
>   +     */
>   +    private void generatePreamble(Node.Nodes page) throws JasperException {
>   +
>   +	String servletPackageName = ctxt.getServletPackageName();
>   +	String servletClassName = ctxt.getServletClassName();
>   +	String serviceMethodName = Constants.SERVICE_METHOD_NAME;
>   +
>   +	// First the package name:
>   +        genPreamblePackage( servletPackageName );
>   +
>   +	// Generate imports
>   +        genPreambleImports();
>   +
>   +	// Generate class declaration
>   +	out.printin("public class ");
>   +	out.print  (servletClassName);
>   +	out.print  (" extends ");
>   +	out.print  (pageInfo.getExtends());
>   +	if (!pageInfo.isThreadSafe()) {
>   +	    out.print("implements SingleThreadModel");
>   +	}
>   +	out.println(" {");
>   +	out.pushIndent();
>   +
>   +	// Class body begins here
>   +	generateDeclarations(page);
>   +
>   +	// Static initializations here
>   +        genPreambleStaticInitializers();
>   +
>   + 	// Class variable declarations
>   +        genPreambleClassVariableDeclarations( servletClassName );
>   + 
>   +	// Methods here
>   +        genPreambleMethods();
>     
>    	// Now the service method
>    	out.printin("public void ");
>   @@ -668,10 +709,11 @@
>        }
>    
>        /*
>   -     * Generates the servlet constructor.
>   +     * Generates the constructor.
>   +     * (shared by servlet and tag handler preamble generation)
>         */
>   -    private void generateServletConstructor(String servletClassName) {
>   -	out.printil("public " + servletClassName + "() {");
>   +    private void generateConstructor(String className) {
>   +	out.printil("public " + className + "() {");
>    	out.pushIndent();
>    	for (int i=0; i<tagHandlerPoolNames.size(); i++) {
>    	    out.printin((String) tagHandlerPoolNames.elementAt(i));
>   @@ -1699,11 +1741,11 @@
>    	}
>    
>    	public void visit(Node.JspBody n) throws JasperException {
>   +            Node.JspAttribute value = n.getValue();
>    	    if (isSimpleTagHandler) {
>    		out.printin(simpleTagHandlerVar);
>    		out.print(".setJspBody(");
>    
>   -		Node.JspAttribute value = n.getValue();
>    		if (value != null) {
>    		    out.print(attributeValue(value, false, JspFragment.class,
>                            "null" ));
>   @@ -1712,7 +1754,63 @@
>    		}
>    		out.println(");");
>    	    } else {
>   -		visitBody(n);
>   +                Node parent = n.getParent();
>   +                if( (parent instanceof Node.CustomTag) && (value != null) ) {
>   +                    Node.CustomTag customTag = (Node.CustomTag)parent;
>   +                    
>   +                    // Classic tag handler invoked with <jsp:body value="...">
>   +                    // Generate a tag body that evaluates the given
>   +                    // fragment.
>   +                    
>   +                    // First, generate a Map with all the AT_BEGIN and 
>   +                    // NESTED variables so the body can access them.
>   +                    VariableInfo[] varInfos = customTag.getVariableInfos();
>   +                    TagVariableInfo[] tagVarInfos = 
>   +                        customTag.getTagVariableInfos();
>   +                    
>   +                    String var = JspUtil.nextTemporaryVariableName();
>   +                    out.printil( "java.util.HashMap " + var + 
>   +                        " = new java.util.HashMap();" );
>   +                    
>   +                    if( varInfos != null ) {
>   +                        for( int i = 0; i < varInfos.length; i++ ) {
>   +                            if( (varInfos[i].getScope() == 
>   +                                    VariableInfo.AT_BEGIN) ||
>   +                                (varInfos[i].getScope() == 
>   +                                    VariableInfo.NESTED) ) 
>   +                            {
>   +                                out.printil( var + ".put( \"" + 
>   +                                    varInfos[i].getVarName() + "\", " +
>   +                                    varInfos[i].getVarName() + " );" );
>   +                            }
>   +                        }
>   +                    }
>   +
>   +                    if( tagVarInfos != null ) {
>   +                        for( int i = 0; i < tagVarInfos.length; i++ ) {
>   +                            if( (tagVarInfos[i].getScope() == 
>   +                                    VariableInfo.AT_BEGIN) || 
>   +                                (tagVarInfos[i].getScope() ==
>   +                                    VariableInfo.NESTED) )
>   +                            {
>   +                                out.printin( var + ".put( \"" );
>   +                                String name = tagVarInfos[i].getNameGiven();
>   +                                if( name == null ) {
>   +                                    name = customTag.getTagData().
>   +                                        getAttributeString(
>   +                                        tagVarInfos[i].getNameFromAttribute());
>   +                                }
>   +                                out.println( name + "\", " + name + " );" );
>   +                            }
>   +                        }
>   +                    }
>   +                    
>   +                    out.printil("(" + 
>   +                        attributeValue(value, false, JspFragment.class,
>   +                        "null" ) + ").invoke( out, " + var + " );" );
>   +		} else {
>   +                    visitBody(n);
>   +		}
>    	    }
>    	}
>    
>   @@ -2675,6 +2773,29 @@
>        }
>        
>        /**
>   +     * Common part of postamble, shared by both servlets and tag files.
>   +     */
>   +    private void genCommonPostamble() {
>   +	// Append any methods that were generated
>   +	out.print(methodsBuffer.toString());
>   +        
>   +        // Append the helper class
>   +        if( fragmentHelperClass.isUsed() ) {
>   +            fragmentHelperClass.generatePostamble();
>   +            out.printMultiLn(fragmentHelperClass.toString());
>   +        }
>   +
>   +	// generate class definition for JspxState
>   +        if (maxTagNesting > 0) {
>   +	    generateJspState();
>   +	}
>   +
>   +        // Close the class definition
>   +        out.popIndent();
>   +        out.printil("}");
>   +    }
>   +        
>   +    /**
>         * Generates the ending part of the static portion of the servlet.
>         */
>        private void generatePostamble(Node.Nodes page) {
>   @@ -2703,23 +2824,8 @@
>            out.popIndent();
>            out.printil("}");
>    
>   -	// Append any methods that were generated
>   -	out.print(methodsBuffer.toString());
>   -        
>   -        // Append the helper class
>   -        if( fragmentHelperClass.isUsed() ) {
>   -            fragmentHelperClass.generatePostamble();
>   -            out.printMultiLn(fragmentHelperClass.toString());
>   -        }
>   -
>   -	// generate class definition for JspxState
>   -        if (maxTagNesting > 0) {
>   -	    generateJspState();
>   -	}
>   -
>   -        // Close the class definition
>   -        out.popIndent();
>   -        out.printil("}");
>   +        // Generated methods, helper classes, etc.
>   +        genCommonPostamble();
>        }
>    
>        /**
>   @@ -2751,17 +2857,17 @@
>    
>    	Generator gen = new Generator(out, compiler);
>    
>   +        if (gen.ctxt.getOptions().isPoolingEnabled()) {
>   +            gen.compileTagHandlerPoolList(page);
>   +        }
>    	if (gen.ctxt.isTagFile()) {
>    	    TagInfo tagInfo = gen.ctxt.getTagInfo();
>   -	    gen.generateTagHandlerPreamble(tagInfo);
>   +	    gen.generateTagHandlerPreamble(tagInfo, page);
>    	    page.visit(gen.new GenerateVisitor(gen.ctxt.isTagFile(), out,
>    					       gen.methodsBuffer, null,
>    					       tagInfo));
>    	    gen.generateTagHandlerPostamble();
>    	} else {
>   -	    if (gen.ctxt.getOptions().isPoolingEnabled()) {
>   -		gen.compileTagHandlerPoolList(page);
>   -	    }
>    	    gen.generatePreamble(page);
>    	    gen.fragmentHelperClass.generatePreamble();
>    	    page.visit(gen.new GenerateVisitor(gen.ctxt.isTagFile(), out,
>   @@ -2774,28 +2880,20 @@
>        /*
>         * XXX
>         */
>   -    private void generateTagHandlerPreamble(TagInfo tagInfo)
>   -	    throws JasperException {
>   +    private void generateTagHandlerPreamble(TagInfo tagInfo, Node.Nodes tag )
>   +        throws JasperException 
>   +    {
>    
>    	// Generate package declaration
>    	String className = tagInfo.getTagClassName();
>    	if (className.indexOf('.') != -1) {
>    	    String pkgName
>    		= className.substring(0, className.lastIndexOf("."));
>   -	    out.printin("package ");
>   -	    out.print(pkgName);
>   -	    out.println(";");
>   -	    out.println();
>   +            genPreamblePackage( pkgName );
>    	}
>    
>    	// Generate imports
>   -	Iterator iter = pageInfo.getImports().iterator();
>   -	while (iter.hasNext()) {
>   -	    out.printin("import ");
>   -	    out.print  ((String)iter.next());
>   -	    out.println(";");
>   -	}
>   -	out.println();
>   +        genPreambleImports();
>    
>    	// Generate class declaration
>    	out.printin("public class ");
>   @@ -2808,19 +2906,45 @@
>    	out.pushIndent();
>    	
>    	// Class body begins here
>   +	generateDeclarations(tag);
>    
>   -        // Static data for EL function and prefix maps:
>   -        generateELFunctionMap();
>   -	generatePrefixMap();
>   +	// Static initializations here
>   +        genPreambleStaticInitializers();
>    
>   + 	// Class variable declarations
>   +        genPreambleClassVariableDeclarations( tagInfo.getTagName() );
>   +        
>   +        // Tag-handler specific declarations:
>    	generateTagHandlerDeclarations(tagInfo);
>    
>    	if (tagInfo.hasDynamicAttributes())
>    	    generateSetDynamicAttribute();
>    
>   +	// Methods here
>   +        genPreambleMethods();
>   +        
>   +        // Now the doTag() method
>    	out.printil("public void doTag() throws javax.servlet.jsp.JspException {");
>    	out.pushIndent();
>    	out.printil("PageContext pageContext = new JspContextWrapper(getJspContext());");
>   +        
>   +        // Declare implicit objects.  
>   +        // XXX - Note that the current JSP 2.0 PFD 
>   +        // spec is unclear about whether these are required
>   +        // XXX - Optimization: Check scriptlets and expressions for the
>   +        // use of any of these.  They're not likely to be used.  If they're
>   +        // not used, get rid of them.
>   +        out.printil( "javax.servlet.ServletRequest request = " +
>   +            "pageContext.getRequest();" );
>   +        out.printil( "javax.servlet.ServletResponse response = " +
>   +            "pageContext.getResponse();" );
>   +        out.printil( "javax.servlet.http.HttpSession session = " +
>   +            "pageContext.getSession();" );
>   +        out.printil( "javax.servlet.ServletContext application = " +
>   +            "pageContext.getServletContext();" );
>   +	out.printil("javax.servlet.ServletConfig config = " +
>   +            "pageContext.getServletConfig();");
>   +        
>    	// Declare parameter map for fragment/body invocation
>    	out.printil("java.util.Map _jspx_params = null;");
>    
>   @@ -2830,21 +2954,40 @@
>    
>    	out.printil("javax.servlet.jsp.JspWriter out = pageContext.getOut();");
>    	generatePageScopedVariables(tagInfo);
>   +        
>   +     	// Number of tag object that need to be popped
>   +	// XXX TODO: use a better criteria
>   +	maxTagNesting = pageInfo.getMaxTagNesting();
>   +        
>   +	declareTemporaryScriptingVars(tag);
>   +	out.println();
>   +        
>    	out.printil("try {");
>    	out.pushIndent();
>        }
>    
>        private void generateTagHandlerPostamble() {
>            out.popIndent();
>   -        out.printil("} catch (java.io.IOException ioe) {");
>   -	out.pushIndent();
>   -	out.printil("throw new javax.servlet.jsp.JspException(ioe);");
>   -	out.popIndent();
>   -	out.printil("}");
>   -	out.popIndent();
>   -	out.printil("}");
>   -	out.popIndent();
>   -	out.printil("}");
>   +        //out.printil("} catch (java.io.IOException ioe) {");
>   +	//out.pushIndent();
>   +	//out.printil("throw new javax.servlet.jsp.JspException(ioe);");
>   +	//out.popIndent();
>   +	//out.printil("}");
>   +        
>   +        // Have to catch Throwable because a classic tag handler
>   +        // helper method is declared to throw Throwable.
>   +        out.printil( "} catch( Throwable t ) {" );
>   +        out.pushIndent();
>   +        out.printil("throw new javax.servlet.jsp.JspException(t);" );
>   +        out.popIndent();
>   +        out.printil( "}" );
>   +        
>   +        // Close the doTag method
>   +        out.popIndent();
>   +        out.printil("}");
>   +
>   +        // Generated methods, helper classes, etc.
>   +        genCommonPostamble();
>        }
>    
>        /**
>   
>   
>   
>   1.7       +7 -5      jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java
>   
>   Index: ImplicitTagLibraryInfo.java
>   ===================================================================
>   RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java,v
>   retrieving revision 1.6
>   retrieving revision 1.7
>   diff -u -r1.6 -r1.7
>   --- ImplicitTagLibraryInfo.java	19 Aug 2002 23:06:01 -0000	1.6
>   +++ ImplicitTagLibraryInfo.java	20 Aug 2002 15:50:22 -0000	1.7
>   @@ -76,7 +76,7 @@
>     */
>    public class ImplicitTagLibraryInfo extends TagLibraryInfo {
>    
>   -    private static final String WEB_INF_TAGS = "/WEB-INF/tags/";
>   +    private static final String WEB_INF_TAGS = "/WEB-INF/tags";
>        private static final String TAG_FILE_SUFFIX = ".tag";
>        private static final String TAGS_SHORTNAME = "tags";
>        private static final String TLIB_VERSION = "1.0";
>   @@ -101,7 +101,9 @@
>    	
>    	// Determine the value of the <short-name> subelement of the
>    	// "imaginary" <taglib> element
>   -	if (tagdir.equals(WEB_INF_TAGS)) {
>   +	if (tagdir.equals(WEB_INF_TAGS) || 
>   +            tagdir.equals( WEB_INF_TAGS + "/" ) ) 
>   +        {
>    	    shortname = TAGS_SHORTNAME;
>    	} else {
>    	    shortname = tagdir.substring(WEB_INF_TAGS.length());
>   
>   
>   
>   1.23      +16 -14    jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Parser.java
>   
>   Index: Parser.java
>   ===================================================================
>   RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Parser.java,v
>   retrieving revision 1.22
>   retrieving revision 1.23
>   diff -u -r1.22 -r1.23
>   --- Parser.java	20 Aug 2002 03:52:18 -0000	1.22
>   +++ Parser.java	20 Aug 2002 15:50:22 -0000	1.23
>   @@ -372,17 +372,19 @@
>         * and include-coda of jsp-config element in web.xml
>         */
>        private void addInclude(Node parent, List files) throws JasperException {
>   -	Iterator iter = files.iterator();
>   -	while (iter.hasNext()) {
>   -	    String file = (String) iter.next();
>   -	    AttributesImpl attrs = new AttributesImpl();
>   -	    attrs.addAttribute("", "file", "file", "CDATA", file);
>   +        if( files != null ) {
>   +            Iterator iter = files.iterator();
>   +            while (iter.hasNext()) {
>   +                String file = (String) iter.next();
>   +                AttributesImpl attrs = new AttributesImpl();
>   +                attrs.addAttribute("", "file", "file", "CDATA", file);
>    
>   -	    // Create a dummy Include directive node
>   -	    Node includeNode = new Node.IncludeDirective(attrs, reader.mark(),
>   -							 parent);
>   -	    processIncludeDirective(file, includeNode);
>   -	}
>   +                // Create a dummy Include directive node
>   +                Node includeNode = new Node.IncludeDirective(attrs, 
>   +                    reader.mark(), parent);
>   +                processIncludeDirective(file, includeNode);
>   +            }
>   +        }
>        }
>    
>        /*
>   
>   
>   
>   1.12      +8 -5      jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ParserController.java
>   
>   Index: ParserController.java
>   ===================================================================
>   RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ParserController.java,v
>   retrieving revision 1.11
>   retrieving revision 1.12
>   diff -u -r1.11 -r1.12
>   --- ParserController.java	20 Aug 2002 03:52:18 -0000	1.11
>   +++ ParserController.java	20 Aug 2002 15:50:22 -0000	1.12
>   @@ -278,12 +278,15 @@
>    	// FIXME: We assume xml parser will take care of
>            // encoding for page in XML syntax. Correct?
>    	if (!isXml) {
>   -            jspReader.reset(startMark);
>   -            while (jspReader.skipUntil("<%@") != null) {
>   +            // Note: this currently assumes there is no XML syntax for tag 
>   +            // files (as of PFD of the JSP 2.0 spec there is an XML view, 
>   +            // but no XML syntax).
>   +            isTagFile = file.startsWith( "/WEB-INF/tags" ) ||
>   +                file.startsWith( "/META-INF/tags" );
>   +	    jspReader.reset(startMark);
>   +	    while (jspReader.skipUntil("<%@") != null) {
>    		jspReader.skipSpaces();
>   -		boolean tIsTagFile = jspReader.matches("tag ");
>   -		if (tIsTagFile || jspReader.matches("page")) {
>   -		    isTagFile = tIsTagFile;
>   +		if (jspReader.matches( "tag " ) || jspReader.matches("page")) {
>    		    jspReader.skipSpaces();
>    		    Attributes attrs = Parser.parseAttributes(this, jspReader);
>    		    String attribute = "pageEncoding";
>   
>   
>   
>   1.14      +12 -4     jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagFileProcessor.java
>   
>   Index: TagFileProcessor.java
>   ===================================================================
>   RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagFileProcessor.java,v
>   retrieving revision 1.13
>   retrieving revision 1.14
>   diff -u -r1.13 -r1.14
>   --- TagFileProcessor.java	19 Aug 2002 23:06:01 -0000	1.13
>   +++ TagFileProcessor.java	20 Aug 2002 15:50:22 -0000	1.14
>   @@ -181,15 +181,23 @@
>                String attrName = n.getAttributeValue("name");
>                boolean required = JspUtil.booleanValue(
>    					n.getAttributeValue("required"));
>   -            boolean rtexprvalue = JspUtil.booleanValue(
>   -					n.getAttributeValue("rtexprvalue"));
>   +            String rtexprvalueString = n.getAttributeValue("rtexprvalue");
>   +            boolean rtexprvalue = JspUtil.booleanValue( rtexprvalueString );
>                boolean fragment = JspUtil.booleanValue(
>    					n.getAttributeValue("fragment"));
>    	    String type = n.getAttributeValue("type");
>                if (fragment) {
>                    fragmentAttributesMap.put(attrName, n);
>   +                // type is fixed to "JspFragment" and a translation error
>   +                // must occur if specified.
>                    if (type != null) {
>                        err.jspError("jsp.error.fragmentwithtype");
>   +                }
>   +                // rtexprvalue is fixed to "true" and a translation error
>   +                // must occur if specified.
>   +                rtexprvalue = true;
>   +                if( rtexprvalueString != null ) {
>   +                    err.jspError("jsp.error.frgmentwithrtexprvalue" );
>                    }
>                } else {
>                    if (type == null)
>   
>   
>   
>   1.25      +3 -2      jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/resources/messages.properties
>   
>   Index: messages.properties
>   ===================================================================
>   RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/resources/messages.properties,v
>   retrieving revision 1.24
>   retrieving revision 1.25
>   diff -u -r1.24 -r1.25
>   --- messages.properties	20 Aug 2002 03:52:18 -0000	1.24
>   +++ messages.properties	20 Aug 2002 15:50:23 -0000	1.25
>   @@ -281,6 +281,7 @@
>    jsp.error.attribute.noquote=quote symbol expected
>    jsp.error.attribute.unterminated=attribute for {0} is not properly terminated
>    jsp.error.missing.tagInfo=TagInfo object for {0} is missing from TLD
>   -jsp.error.fragmentwithtype=Both 'fragment' and 'type' attributes specified in tag directive
>   +jsp.error.fragmentwithtype=Cannot specify both 'fragment' and 'type' attributes.  If 'fragment' is present, 'type' is fixed as 'javax.servlet.jsp.tagext.JspFragment'
>   +jsp.error.fragmentwithrtexprvalue=Cannot specify both 'fragment' and 'rtexprvalue' attributes.  If 'fragment' is present, 'rtexprvalue' is fixed as 'true'
>    jsp.error.fragmentWithDeclareOrScope=Both 'fragment' and 'declare' or 'scope' attributes specified in variable directive
>    jsp.warning.bad.urlpattern.propertygroup=Bad value {0} in the url-pattern subelement in web.xml
>   
>   
>   
> 
> --
> To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
> For additional commands, e-mail: <ma...@jakarta.apache.org>
> 



--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>