You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by an...@apache.org on 2009/01/23 11:31:55 UTC
svn commit: r736988 - in
/cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers:
HTMLSerializer.java XHTMLSerializer.java
Author: andreas
Date: Fri Jan 23 02:31:55 2009
New Revision: 736988
URL: http://svn.apache.org/viewvc?rev=736988&view=rev
Log:
XHTMLSerializer: Don't encode characters in <script> and <style> elements to avoid JavaScript parsing errors. This behaviour has been pulled up from the HTMLSerializer. Fixes https://issues.apache.org/jira/browse/COCOON-2249.
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/HTMLSerializer.java
cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/XHTMLSerializer.java
Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/HTMLSerializer.java
URL: http://svn.apache.org/viewvc/cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/HTMLSerializer.java?rev=736988&r1=736987&r2=736988&view=diff
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/HTMLSerializer.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/HTMLSerializer.java Fri Jan 23 02:31:55 2009
@@ -74,8 +74,6 @@
private static final HTMLEncoder HTML_ENCODER = new HTMLEncoder();
- protected boolean encodeCharacters = true;
-
/**
* Create a new instance of this <code>HTMLSerializer</code>
*/
@@ -196,10 +194,6 @@
length++;
}
- // script and style are CDATA sections by default, so no encoding
- if ( "SCRIPT".equals(name) || "STYLE".equals(name) ) {
- this.encodeCharacters = false;
- }
super.startElementImpl(XHTML1_NAMESPACE, name, name, NAMESPACES, at);
}
@@ -231,22 +225,7 @@
if (name.equals("META")) return;
if (name.equals("PARAM")) return;
- // script and style are CDATA sections by default, so no encoding
- if ( "SCRIPT".equals(name) || "STYLE".equals(name) ) {
- this.encodeCharacters = true;
- }
super.endElementImpl(XHTML1_NAMESPACE, name, name);
}
- /**
- * Encode and write a specific part of an array of characters.
- */
- protected void encode(char data[], int start, int length)
- throws SAXException {
- if ( !this.encodeCharacters ) {
- this.write(data, start, length);
- return;
- }
- super.encode(data, start, length);
- }
}
Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/XHTMLSerializer.java
URL: http://svn.apache.org/viewvc/cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/XHTMLSerializer.java?rev=736988&r1=736987&r2=736988&view=diff
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/XHTMLSerializer.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/XHTMLSerializer.java Fri Jan 23 02:31:55 2009
@@ -78,6 +78,8 @@
private static final XHTMLEncoder XHTML_ENCODER = new XHTMLEncoder();
+ protected boolean encodeCharacters = true;
+
/* ====================================================================== */
/** The <code>DocType</code> instance representing the document. */
@@ -181,6 +183,11 @@
String namespaces[][], String attributes[][])
throws SAXException {
if (uri.length() == 0) uri = XHTML1_NAMESPACE;
+
+ if (isCdataElement(local)) {
+ this.encodeCharacters = false;
+ }
+
super.startElementImpl(uri, local, qual, namespaces, attributes);
}
@@ -202,7 +209,7 @@
this.closeElement(false);
} else if (local.equalsIgnoreCase("head")) {
String loc = "meta";
- String qua = namespaces.qualify(XHTML1_NAMESPACE, loc, "meta");
+ String qua = this.namespaces.qualify(XHTML1_NAMESPACE, loc, "meta");
String nsp[][] = new String[0][0];
String att[][] = new String[2][ATTRIBUTE_LENGTH];
@@ -217,7 +224,33 @@
this.endElementImpl(XHTML1_NAMESPACE, loc, qua);
}
}
+
+ if (isCdataElement(local)) {
+ this.encodeCharacters = true;
+ }
+
super.endElementImpl(uri, local, qual);
}
+ /**
+ * script and style are CDATA sections by default, so no encoding
+ * @param localName The local name of the element.
+ * @return If the element should be serialized without encoding.
+ */
+ protected boolean isCdataElement(String localName) {
+ String upperCase = localName.toUpperCase();
+ return "SCRIPT".equals(upperCase) || "STYLE".equals(upperCase);
+ }
+
+ /**
+ * Encode and write a specific part of an array of characters.
+ */
+ protected void encode(char data[], int start, int length)
+ throws SAXException {
+ if (this.encodeCharacters) {
+ super.encode(data, start, length);
+ } else {
+ this.write(data, start, length);
+ }
+ }
}