You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by G�bor Lipt�k <ga...@usa.net> on 2000/04/02 08:02:50 UTC

cvs diff proposed fix for bugs 13 and 104

This implements recursive parser invocation needed to resolve the above.

Index: src/share/org/apache/jasper/compiler/BaseJspListener.java
===================================================================
RCS file:
/home/cvspublic/jakarta-tomcat/src/share/org/apache/jasper/compiler/BaseJspListener.java,v
retrieving revision 1.5
diff -u -r1.5 BaseJspListener.java
--- src/share/org/apache/jasper/compiler/BaseJspListener.java	2000/02/25
19:45:37	1.5
+++ src/share/org/apache/jasper/compiler/BaseJspListener.java	2000/04/03
00:00:00
@@ -92,6 +92,9 @@
     public void endPageProcessing() throws JasperException {
     }
     
+    public void generateAll(Class phase) throws JasperException {
+    }
+
     public void handleComment(Mark start, Mark stop) throws JasperException
{
 	throw new
JasperException(Constants.getString("jsp.error.not.impl.comments"));
     }
Index: src/share/org/apache/jasper/compiler/DelegatingListener.java
===================================================================
RCS file:
/home/cvspublic/jakarta-tomcat/src/share/org/apache/jasper/compiler/DelegatingListener.java,v
retrieving revision 1.5
diff -u -r1.5 DelegatingListener.java
--- src/share/org/apache/jasper/compiler/DelegatingListener.java	2000/02/25
19:45:38	1.5
+++ src/share/org/apache/jasper/compiler/DelegatingListener.java	2000/04/03
00:00:00
@@ -104,6 +104,10 @@
         delegate.endPageProcessing();
     }
     
+    public void generateAll(Class phase) throws JasperException {
+      delegate.generateAll(phase);
+    }
+
     public void handleComment(Mark start, Mark stop) throws JasperException
{
         doAction(this.tmplStart, this.tmplStop);
         delegate.handleComment(start, stop);
Index: src/share/org/apache/jasper/compiler/JspParseEventListener.java
===================================================================
RCS file:
/home/cvspublic/jakarta-tomcat/src/share/org/apache/jasper/compiler/JspParseEventListener.java,v
retrieving revision 1.13
diff -u -r1.13 JspParseEventListener.java
--- src/share/org/apache/jasper/compiler/JspParseEventListener.java	2000/03/31
19:43:52	1.13
+++ src/share/org/apache/jasper/compiler/JspParseEventListener.java	2000/04/03
00:00:00
@@ -192,7 +192,7 @@
         ctxt.setContentType(servletContentType);
     }
 
-    private void generateAll(Class phase) throws JasperException {
+    public void generateAll(Class phase) throws JasperException {
 	
 	for(int i = 0; i < generators.size(); i++) {
             Generator gen = (Generator) generators.elementAt(i);
Index: src/share/org/apache/jasper/compiler/JspReader.java
===================================================================
RCS file:
/home/cvspublic/jakarta-tomcat/src/share/org/apache/jasper/compiler/JspReader.java,v
retrieving revision 1.13
diff -u -r1.13 JspReader.java
--- src/share/org/apache/jasper/compiler/JspReader.java	2000/03/28 04:29:48
1.13
+++ src/share/org/apache/jasper/compiler/JspReader.java	2000/04/03 00:00:00
@@ -219,10 +219,24 @@
 	pushFile(file, encoding);
     }
 
+    protected JspReader(char[] buffer, JspCompilationContext ctx, String
encoding) 
+	throws ParseException, FileNotFoundException
+    {
+        this.context = ctx;
+	int fileid=registerSourceFile(".inline");
+        current = new Mark(this, buffer, fileid, ".inline", encoding);
+    }
+
     public static JspReader createJspReader(String file,
JspCompilationContext ctx, String encoding) 
 	throws ParseException, FileNotFoundException
     {
 	return new JspReader(file, ctx, encoding);
+    }
+
+    public static JspReader createJspReader(char[] buffer,
JspCompilationContext ctx, String encoding) 
+	throws ParseException, FileNotFoundException
+    {
+	return new JspReader(buffer, ctx, encoding);
     }
 
     public boolean hasMoreInput() {
Index: src/share/org/apache/jasper/compiler/ParseEventListener.java
===================================================================
RCS file:
/home/cvspublic/jakarta-tomcat/src/share/org/apache/jasper/compiler/ParseEventListener.java,v
retrieving revision 1.5
diff -u -r1.5 ParseEventListener.java
--- src/share/org/apache/jasper/compiler/ParseEventListener.java	2000/02/25
19:45:38	1.5
+++ src/share/org/apache/jasper/compiler/ParseEventListener.java	2000/04/03
00:00:00
@@ -120,4 +120,5 @@
 	throws JasperException;
 
     void endPageProcessing() throws JasperException;
+    void generateAll(Class phase) throws JasperException;
 }
Index: src/share/org/apache/jasper/compiler/PluginGenerator.java
===================================================================
RCS file:
/home/cvspublic/jakarta-tomcat/src/share/org/apache/jasper/compiler/PluginGenerator.java,v
retrieving revision 1.3
diff -u -r1.3 PluginGenerator.java
--- src/share/org/apache/jasper/compiler/PluginGenerator.java	2000/01/24
05:54:51	1.3
+++ src/share/org/apache/jasper/compiler/PluginGenerator.java	2000/04/03
00:00:00
@@ -63,6 +63,7 @@
 
 import java.util.Hashtable;
 import java.util.Enumeration;
+import java.io.FileNotFoundException;
 
 import org.apache.jasper.JasperException;
 import org.apache.jasper.Constants;
@@ -82,8 +83,8 @@
     String fallback;
 
     String ieClassId;
+    JspCompilationContext ctxt;
     
-    
     public PluginGenerator(Hashtable attrs, Hashtable param, String fallback)
{
     	this.attrs = attrs;
 	this.param = param;
@@ -91,6 +92,7 @@
     }
 
     public void init(JspCompilationContext ctxt) throws JasperException {
+        this.ctxt=ctxt;
         ieClassId = ctxt.getOptions().getIeClassId();
     }
     
@@ -184,7 +186,7 @@
 	        key = (String) e.nextElement ();
 	        value = (String[]) param.get (key);
 	        writer.indent ();
-	        writer.print ("out.println (\"<PARAM name=\\\"");
+	        writer.print ("out.print(\"<PARAM name=\\\"");
 		if (key.equalsIgnoreCase ("object"))
 		    writer.print ("java_object");
 		else if (key.equalsIgnoreCase ("type"))
@@ -193,9 +195,15 @@
 	            writer.print (key);
 	        writer.print ("\\\"");
 	        writer.print (" value=\\\"");
-	        writer.print (value[0]);
+		if (value[0].indexOf("<")==-1){
+		  writer.print (value[0]);
+                } else {
+                  writer.println("\");");
+                  parseBuffer(writer, value[0].toCharArray());
+                  writer.print("out.print(\"");
+		}
 	        writer.print ("\\\"");
-	        writer.print (">\");");
+	        writer.print (">\"); out.println();");
 	        writer.println ();
 	    }
 	}
@@ -249,7 +257,13 @@
 		else 
 	            writer.print (key);
 	        writer.print ("=\\\"");
-	        writer.print (value[0]);
+		if (value[0].indexOf("<")==-1){
+		  writer.print (value[0]);
+                } else {
+                  writer.println("\");");
+                  parseBuffer(writer, value[0].toCharArray());
+                  writer.print("out.println(\"");
+		}
 	        writer.print ("\\\"");
 	        writer.print (" ");
 	    }
@@ -271,6 +285,26 @@
 	writer.println ("out.println (\"</NOEMBED></EMBED>\");");
 	writer.println ("out.println (\"</OBJECT>\");");
 	writer.pushIndent ();
+    }
+
+    protected void parseBuffer(ServletWriter writer, char[] buffer)
+            throws JasperException{
+        JspReader reader=null;
+        try {
+           reader = JspReader.createJspReader(
+              buffer,
+              ctxt,
+              ctxt.getContentType()
+           );
+        } catch(FileNotFoundException e) { 
+            /* no file is involved, safe to ignore */ 
+        }
+        ParseEventListener listener = new JspParseEventListener(ctxt);
+        
+        Parser p = new Parser(reader, listener);
+        listener.beginPageProcessing();
+        p.parse();
+	listener.generateAll(ServiceMethodPhase.class);
     }
 
     public void generateCommon (ServletWriter writer) {


____________________________________________________________________
Get free email and a permanent address at http://www.amexmail.com/?A=1