tcurdt 2003/10/07 08:13:20
Modified: src/java/org/apache/cocoon/components/language/markup/xsp
XSLTExtension.java
src/java/org/apache/cocoon/components/language/markup/xsp/java
xsp.xsl
src/java/org/apache/cocoon/components/language/programming/java
JavaLanguage.java
src/java/org/apache/cocoon/components/language/programming/javascript
JavascriptLanguage.java
Log:
always encode to UTF-8 but only sometimes quote as Java String,
fixes bug #18900
Revision Changes Path
1.2 +48 -15
cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/xsp/XSLTExtension.java
Index: XSLTExtension.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/xsp/XSLTExtension.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- XSLTExtension.java 9 Mar 2003 00:08:54 -0000 1.1
+++ XSLTExtension.java 7 Oct 2003 15:13:20 -0000 1.2
@@ -61,14 +61,15 @@
/**
* Escapes '"' and '\' characters in a String (add a '\' before them) so
that it can
- * be inserted in java source.
+ * be inserted in java source + quote special characters as utf-8
*/
- public static String escapeString(String string) {
+ public static String escapeJavaString(String string) {
char chr[] = string.toCharArray();
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < chr.length; i++) {
- switch (chr[i]) {
+ char c = chr[i];
+ switch (c) {
case '\t':
buffer.append("\\t");
break;
@@ -87,23 +88,49 @@
case '"':
case '\\':
buffer.append('\\');
- buffer.append(chr[i]);
+ buffer.append(c);
break;
default:
- if (' ' <= chr[i] && chr[i] <= 127) {
- buffer.append(chr[i]);
+ if (' ' <= c && c <= 127) {
+ buffer.append(c);
} else {
buffer.append("\\u");
- buffer.append(int2digit(chr[i] >> 12));
- buffer.append(int2digit(chr[i] >> 8));
- buffer.append(int2digit(chr[i] >> 4));
- buffer.append(int2digit(chr[i]));
+ buffer.append(int2digit(c >> 12));
+ buffer.append(int2digit(c >> 8));
+ buffer.append(int2digit(c >> 4));
+ buffer.append(int2digit(c));
}
break;
}
}
- return buffer.toString();
+ final String encoded = buffer.toString();
+ return encoded;
+ }
+
+ /**
+ * quote special characters as utf-8
+ * TC: it's code doublication but that way we don't
+ * have to iterate through the StringBuffer twice
+ */
+ public static String escapeString(String string) {
+ char chr[] = string.toCharArray();
+ StringBuffer buffer = new StringBuffer();
+ for (int i = 0; i < chr.length; i++) {
+ char c = chr[i];
+ if (c <= 127) {
+ buffer.append(c);
+ } else {
+ buffer.append("\\u");
+ buffer.append(int2digit(c >> 12));
+ buffer.append(int2digit(c >> 8));
+ buffer.append(int2digit(c >> 4));
+ buffer.append(int2digit(c));
+ }
+ }
+
+ final String encoded = buffer.toString();
+ return encoded;
}
private static char int2digit(int x) {
@@ -120,11 +147,15 @@
return escapeString(string);
}
+ public String escapeJava(String string) {
+ return escapeJavaString(string);
+ }
+
+
/**
* Counts amount of spaces in the input line from the beginning
* to the first new line symbol and returns a string with this
* amount of spaces.
- */
public String prefix(String string) {
char chr[] = string.toCharArray();
int i;
@@ -154,12 +185,12 @@
}
return buffer.toString();
}
+ */
/**
* Counts amount of spaces in the input line from the end
* to the last new line symbol and returns a string with this
* amount of spaces.
- */
public String suffix(String string) {
char chr[] = string.toCharArray();
@@ -179,4 +210,6 @@
}
return buffer.toString();
}
-}
+ */
+
+ }
1.4 +4 -4
cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/xsp/java/xsp.xsl
Index: xsp.xsl
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/xsp/java/xsp.xsl,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- xsp.xsl 13 Jul 2003 17:16:54 -0000 1.3
+++ xsp.xsl 7 Oct 2003 15:13:20 -0000 1.4
@@ -516,10 +516,10 @@
<xsl:template match="text()">
<xsl:choose>
<xsl:when test="namespace-uri(..) = $xsp-uri and (local-name(..) =
'logic' or local-name(..) = 'expr')">
- <xsl:value-of select="."/>
+ <xsl:value-of select="XSLTExtension:escape($extension, .)"/>
</xsl:when>
<xsl:otherwise>
- this.characters("<xsl:value-of
select="XSLTExtension:escape($extension, .)"/>");
+ this.characters("<xsl:value-of
select="XSLTExtension:escapeJava($extension, .)"/>");
</xsl:otherwise>
</xsl:choose>
</xsl:template>
1.3 +2 -2
cocoon-2.1/src/java/org/apache/cocoon/components/language/programming/java/JavaLanguage.java
Index: JavaLanguage.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/programming/java/JavaLanguage.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- JavaLanguage.java 20 Mar 2003 04:12:49 -0000 1.2
+++ JavaLanguage.java 7 Oct 2003 15:13:20 -0000 1.3
@@ -268,7 +268,7 @@
* @return The escaped string
*/
public String quoteString(String constant) {
- return XSLTExtension.escapeString(constant);
+ return XSLTExtension.escapeJavaString(constant);
}
/**
1.2 +2 -2
cocoon-2.1/src/java/org/apache/cocoon/components/language/programming/javascript/JavascriptLanguage.java
Index: JavascriptLanguage.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/programming/javascript/JavascriptLanguage.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- JavascriptLanguage.java 9 Mar 2003 00:09:01 -0000 1.1
+++ JavascriptLanguage.java 7 Oct 2003 15:13:20 -0000 1.2
@@ -159,7 +159,7 @@
}
public String quoteString(String constant) {
- return XSLTExtension.escapeString(constant);
+ return XSLTExtension.escapeJavaString(constant);
}
/**