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 2003/02/04 00:11:59 UTC
cvs commit: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler JspReader.java Parser.java
kinman 2003/02/03 15:11:59
Modified: jasper2/src/share/org/apache/jasper/compiler JspReader.java
Parser.java
Log:
- Recognize <![CDATA[ text ]]> in jsp:text, jsp:declaration, jsp:expression
and jsp:scriptlet.
Revision Changes Path
1.15 +1 -1 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspReader.java
Index: JspReader.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspReader.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- JspReader.java 22 Jan 2003 21:13:51 -0000 1.14
+++ JspReader.java 3 Feb 2003 23:11:58 -0000 1.15
@@ -250,7 +250,7 @@
/**
* search the stream for a match to a string
* @param string The string to match
- * @return <stront>true</strong> is one is found, the current position
+ * @return <strong>true</strong> is one is found, the current position
* in stream is positioned after the search string, <strong>
* false</strong> otherwise, position in stream unchanged.
*/
1.58 +101 -32 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.57
retrieving revision 1.58
diff -u -r1.57 -r1.58
--- Parser.java 17 Jan 2003 20:02:25 -0000 1.57
+++ Parser.java 3 Feb 2003 23:11:59 -0000 1.58
@@ -668,8 +668,12 @@
/*
* XMLDeclarationBody ::= ( S? '/>' )
- * | ( S? '>' (Char* - (char* '<')) ETag )
+ * | ( S? '>' (Char* - (char* '<')) CDSect?)* ETag
* | <TRANSLATION_ERROR>
+ * CDSect ::= CDStart CData CDEnd
+ * CDStart ::= '<![CDATA['
+ * CData ::= (Char* - (Char* ']]>' Char*))
+ * CDEnd ::= ']]>'
*/
private void parseXMLDeclaration(Node parent) throws JasperException {
reader.skipSpaces();
@@ -678,17 +682,35 @@
err.jspError(start, "jsp.error.unterminated",
"<jsp:declaration>");
}
- start = reader.mark();
- Mark stop = reader.skipUntil("<");
- if ((stop == null) || !reader.matchesETagWithoutLessThan(
- "jsp:declaration" ) )
- {
+ Mark stop;
+ String text;
+ while (true) {
+ start = reader.mark();
+ stop = reader.skipUntil("<");
+ if (stop == null) {
+ err.jspError(start, "jsp.error.unterminated",
+ "<jsp:declaration>");
+ }
+ text = parseScriptText(reader.getText(start, stop));
+ new Node.Declaration(text, start, parent);
+ if (reader.matches("![CDATA[")) {
+ start = reader.mark();
+ stop = reader.skipUntil("]]>");
+ if (stop == null) {
+ err.jspError(start, "jsp.error.unterminated", "CDATA");
+ }
+ text = parseScriptText(reader.getText(start, stop));
+ new Node.Declaration(text, start, parent);
+ }
+ else {
+ break;
+ }
+ }
+
+ if (!reader.matchesETagWithoutLessThan( "jsp:declaration" ) ) {
err.jspError(start, "jsp.error.unterminated",
"<jsp:declaration>");
}
-
- new Node.Declaration(parseScriptText(reader.getText(start, stop)),
- start, parent);
}
}
@@ -708,7 +730,7 @@
/*
* XMLExpressionBody ::= ( S? '/>' )
- * | ( S? '>' (Char* - (char* '<')) ETag )
+ * | ( S? '>' (Char* - (char* '<')) CDSect?)* ETag )
* | <TRANSLATION_ERROR>
*/
private void parseXMLExpression(Node parent) throws JasperException {
@@ -718,17 +740,34 @@
err.jspError(start, "jsp.error.unterminated",
"<jsp:expression>");
}
- start = reader.mark();
- Mark stop = reader.skipUntil("<");
- if ((stop == null) || !reader.matchesETagWithoutLessThan(
- "jsp:expression" ))
- {
+ Mark stop;
+ String text;
+ while (true) {
+ start = reader.mark();
+ stop = reader.skipUntil("<");
+ if (stop == null) {
+ err.jspError(start, "jsp.error.unterminated",
+ "<jsp:expression>");
+ }
+ text = parseScriptText(reader.getText(start, stop));
+ new Node.Expression(text, start, parent);
+ if (reader.matches("![CDATA[")) {
+ start = reader.mark();
+ stop = reader.skipUntil("]]>");
+ if (stop == null) {
+ err.jspError(start, "jsp.error.unterminated", "CDATA");
+ }
+ text = parseScriptText(reader.getText(start, stop));
+ new Node.Expression(text, start, parent);
+ }
+ else {
+ break;
+ }
+ }
+ if (!reader.matchesETagWithoutLessThan( "jsp:expression" )) {
err.jspError(start, "jsp.error.unterminated",
"<jsp:expression>");
}
-
- new Node.Expression(parseScriptText(reader.getText(start, stop)),
- start, parent);
}
}
@@ -779,7 +818,7 @@
/*
* XMLScriptletBody ::= ( S? '/>' )
- * | ( S? '>' (Char* - (char* '<')) ETag )
+ * | ( S? '>' (Char* - (char* '<')) CDSect?)* ETag )
* | <TRANSLATION_ERROR>
*/
private void parseXMLScriptlet(Node parent) throws JasperException {
@@ -789,17 +828,35 @@
err.jspError(start, "jsp.error.unterminated",
"<jsp:scriptlet>");
}
- start = reader.mark();
- Mark stop = reader.skipUntil("<");
- if ((stop == null) || !reader.matchesETagWithoutLessThan(
- "jsp:scriptlet" ))
- {
+ Mark stop;
+ String text;
+ while (true) {
+ start = reader.mark();
+ stop = reader.skipUntil("<");
+ if (stop == null) {
+ err.jspError(start, "jsp.error.unterminated",
+ "<jsp:scriptlet>");
+ }
+ text = parseScriptText(reader.getText(start, stop));
+ new Node.Scriptlet(text, start, parent);
+ if (reader.matches("![CDATA[")) {
+ start = reader.mark();
+ stop = reader.skipUntil("]]>");
+ if (stop == null) {
+ err.jspError(start, "jsp.error.unterminated", "CDATA");
+ }
+ text = parseScriptText(reader.getText(start, stop));
+ new Node.Scriptlet(text, start, parent);
+ }
+ else {
+ break;
+ }
+ }
+
+ if (!reader.matchesETagWithoutLessThan( "jsp:scriptlet" )) {
err.jspError(start, "jsp.error.unterminated",
"<jsp:scriptlet>");
}
-
- new Node.Scriptlet(parseScriptText(reader.getText(start, stop)),
- start, parent );
}
}
@@ -1338,6 +1395,7 @@
* | ( S? '>'
* ( ( Char* - ( Char* ( '<' | '${' ) ) )
* ( '${' ELExpressionBody )?
+ * CDSect?
* )* ETag
* )
* | <TRANSLATION_ERROR>
@@ -1358,8 +1416,19 @@
"<jsp:text>" );
break;
}
- if( ch == '<' ) break;
- if( (lastCh == '$') && (ch == '{') ) {
+ if( ch == '<' ) {
+ // Check for <![CDATA[
+ if (!reader.matches("![CDATA["))
+ break;
+ start = reader.mark();
+ Mark stop = reader.skipUntil("]]>");
+ if (stop == null) {
+ err.jspError(start, "jsp.error.unterminated", "CDATA");
+ }
+ String text = reader.getText(start, stop);
+ ttext.write(text, 0, text.length());
+ }
+ else if( (lastCh == '$') && (ch == '{') ) {
// Create a template text node
new Node.TemplateText( ttext.toString(), start, parent);
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org