You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by pi...@apache.org on 2004/04/27 20:35:22 UTC
cvs commit: cocoon-2.1/src/blocks/serializers/java/org/apache/cocoon/components/serializers/encoding HTMLEncoder.java XHTMLEncoder.java XMLEncoder.java
pier 2004/04/27 11:35:21
Modified: src/blocks/serializers/java/org/apache/cocoon/components/serializers
HTMLSerializer.java XHTMLSerializer.java
XMLSerializer.java
src/blocks/serializers/java/org/apache/cocoon/components/serializers/encoding
XMLEncoder.java
Added: src/blocks/serializers/java/org/apache/cocoon/components/serializers/encoding
HTMLEncoder.java XHTMLEncoder.java
Log:
Added XHTMLEncoder to encode HTML character references and HTMLEncoder to
handle the small (but vital) ' difference from XML documents.
Fixed XML/XHTML/HTMLSerializer(s) to handle the different encodings.
Revision Changes Path
1.2 +5 -2 cocoon-2.1/src/blocks/serializers/java/org/apache/cocoon/components/serializers/HTMLSerializer.java
Index: HTMLSerializer.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/serializers/java/org/apache/cocoon/components/serializers/HTMLSerializer.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- HTMLSerializer.java 21 Apr 2004 09:33:22 -0000 1.1
+++ HTMLSerializer.java 27 Apr 2004 18:35:21 -0000 1.2
@@ -15,6 +15,7 @@
*/
package org.apache.cocoon.components.serializers;
+import org.apache.cocoon.components.serializers.encoding.HTMLEncoder;
import org.apache.cocoon.components.serializers.util.DocType;
import org.xml.sax.SAXException;
@@ -44,11 +45,13 @@
/* ====================================================================== */
+ private static final HTMLEncoder HTML_ENCODER = new HTMLEncoder();
+
/**
* Create a new instance of this <code>HTMLSerializer</code>
*/
public HTMLSerializer() {
- super();
+ super(HTML_ENCODER);
}
/* ====================================================================== */
1.2 +12 -2 cocoon-2.1/src/blocks/serializers/java/org/apache/cocoon/components/serializers/XHTMLSerializer.java
Index: XHTMLSerializer.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/serializers/java/org/apache/cocoon/components/serializers/XHTMLSerializer.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- XHTMLSerializer.java 21 Apr 2004 09:33:22 -0000 1.1
+++ XHTMLSerializer.java 27 Apr 2004 18:35:21 -0000 1.2
@@ -15,6 +15,7 @@
*/
package org.apache.cocoon.components.serializers;
+import org.apache.cocoon.components.serializers.encoding.XHTMLEncoder;
import org.apache.cocoon.components.serializers.util.DocType;
import org.xml.sax.SAXException;
@@ -48,13 +49,22 @@
/* ====================================================================== */
+ private static final XHTMLEncoder XHTML_ENCODER = new XHTMLEncoder();
+
/**
* Create a new instance of this <code>XHTMLSerializer</code>
*/
public XHTMLSerializer() {
- super();
+ super(XHTML_ENCODER);
}
+ /**
+ * Create a new instance of this <code>XHTMLSerializer</code>
+ */
+ protected XHTMLSerializer(XHTMLEncoder encoder) {
+ super(encoder);
+ }
+
/**
* Return the MIME Content-Type produced by this serializer.
*/
1.2 +8 -1 cocoon-2.1/src/blocks/serializers/java/org/apache/cocoon/components/serializers/XMLSerializer.java
Index: XMLSerializer.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/serializers/java/org/apache/cocoon/components/serializers/XMLSerializer.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- XMLSerializer.java 21 Apr 2004 09:33:22 -0000 1.1
+++ XMLSerializer.java 27 Apr 2004 18:35:21 -0000 1.2
@@ -97,6 +97,13 @@
}
/**
+ * Create a new instance of this <code>XMLSerializer</code>
+ */
+ protected XMLSerializer(XMLEncoder encoder) {
+ super(encoder);
+ }
+
+ /**
* Reset this <code>XMLSerializer</code>.
*/
public void recycle() {
1.2 +11 -1 cocoon-2.1/src/blocks/serializers/java/org/apache/cocoon/components/serializers/encoding/XMLEncoder.java
Index: XMLEncoder.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/serializers/java/org/apache/cocoon/components/serializers/encoding/XMLEncoder.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- XMLEncoder.java 21 Apr 2004 09:33:22 -0000 1.1
+++ XMLEncoder.java 27 Apr 2004 18:35:21 -0000 1.2
@@ -38,6 +38,16 @@
}
/**
+ * Create a new instance of this <code>XMLEncoder</code>.
+ *
+ * @param name A name for this <code>Encoding</code>.
+ * @throws NullPointerException If one of the arguments is <b>null</b>.
+ */
+ protected XMLEncoder(String name) {
+ super(name);
+ }
+
+ /**
* Return true or false wether this encoding can encode the specified
* character or not.
* <p>
1.1 cocoon-2.1/src/blocks/serializers/java/org/apache/cocoon/components/serializers/encoding/HTMLEncoder.java
Index: HTMLEncoder.java
===================================================================
/*
* Copyright 1999-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.cocoon.components.serializers.encoding;
/**
*
*
* @author <a href="mailto:pier@apache.org">Pier Fumagalli</a>, February 2003
* @version CVS $Id: HTMLEncoder.java,v 1.1 2004/04/27 18:35:21 pier Exp $
*/
public class HTMLEncoder extends XHTMLEncoder {
private char APOSTROPHE[] = { '\'' };
/**
* Create a new instance of this <code>HTMLEncoder</code>.
*/
public HTMLEncoder() {
super("X-W3C-HTML");
}
/**
* Create a new instance of this <code>HTMLEncoder</code>.
*
* @param name A name for this <code>Encoding</code>.
* @throws NullPointerException If one of the arguments is <b>null</b>.
*/
protected HTMLEncoder(String name) {
super(name);
}
/**
* Return true or false wether this encoding can encode the specified
* character or not.
*/
protected boolean compile(char c) {
if (c == '\'') return(true);
return(super.compile(c));
}
/**
* Return an array of characters representing the encoding for the
* specified character.
*/
public char[] encode(char c) {
if (c == '\'') return(APOSTROPHE);
return (super.encode(c));
}
}
1.1 cocoon-2.1/src/blocks/serializers/java/org/apache/cocoon/components/serializers/encoding/XHTMLEncoder.java
Index: XHTMLEncoder.java
===================================================================
/*
* Copyright 1999-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.cocoon.components.serializers.encoding;
/**
*
*
* @author <a href="mailto:pier@apache.org">Pier Fumagalli</a>, February 2003
* @version CVS $Id: XHTMLEncoder.java,v 1.1 2004/04/27 18:35:21 pier Exp $
*/
public class XHTMLEncoder extends XMLEncoder {
/**
* Create a new instance of this <code>XHTMLEncoder</code>.
*/
public XHTMLEncoder() {
super("X-W3C-XHTML");
}
/**
* Create a new instance of this <code>XHTMLEncoder</code>.
*
* @param name A name for this <code>Encoding</code>.
* @throws NullPointerException If one of the arguments is <b>null</b>.
*/
protected XHTMLEncoder(String name) {
super(name);
}
/**
* Return true or false wether this encoding can encode the specified
* character or not.
* <p>
* This method will return true for the following character range:
* <br />
* <code>
* <nobr>#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD]</nobr>
* </code>
* </p>
*
* @see <a href="http://www.w3.org/TR/REC-xml#charsets">W3C XML 1.0</a>
*/
protected boolean compile(char c) {
for (int x = 0; x < ENCODINGS.length; x++) {
if (ENCODINGS[x][0][0] == c) return(false);
}
return(super.compile(c));
}
/**
* Return an array of characters representing the encoding for the
* specified character.
*/
public char[] encode(char c) {
for (int x = 0; x < ENCODINGS.length; x++) {
if (ENCODINGS[x][0][0] == c) return(ENCODINGS[x][1]);
}
return(super.encode(c));
}
/**
* The table of all configured HTML/4.0 character encodings.
*/
private static final char ENCODINGS[][][] = {
{ { 160 } , " ".toCharArray() },
{ { 161 } , "¡".toCharArray() },
{ { 162 } , "¢".toCharArray() },
{ { 163 } , "£".toCharArray() },
{ { 164 } , "¤".toCharArray() },
{ { 165 } , "¥".toCharArray() },
{ { 166 } , "¦".toCharArray() },
{ { 167 } , "§".toCharArray() },
{ { 168 } , "¨".toCharArray() },
{ { 169 } , "©".toCharArray() },
{ { 170 } , "ª".toCharArray() },
{ { 171 } , "«".toCharArray() },
{ { 172 } , "¬".toCharArray() },
{ { 173 } , "­".toCharArray() },
{ { 174 } , "®".toCharArray() },
{ { 175 } , "¯".toCharArray() },
{ { 176 } , "°".toCharArray() },
{ { 177 } , "±".toCharArray() },
{ { 178 } , "²".toCharArray() },
{ { 179 } , "³".toCharArray() },
{ { 180 } , "´".toCharArray() },
{ { 181 } , "µ".toCharArray() },
{ { 182 } , "¶".toCharArray() },
{ { 183 } , "·".toCharArray() },
{ { 184 } , "¸".toCharArray() },
{ { 185 } , "¹".toCharArray() },
{ { 186 } , "º".toCharArray() },
{ { 187 } , "»".toCharArray() },
{ { 188 } , "¼".toCharArray() },
{ { 189 } , "½".toCharArray() },
{ { 190 } , "¾".toCharArray() },
{ { 191 } , "¿".toCharArray() },
{ { 192 } , "À".toCharArray() },
{ { 193 } , "Á".toCharArray() },
{ { 194 } , "Â".toCharArray() },
{ { 195 } , "Ã".toCharArray() },
{ { 196 } , "Ä".toCharArray() },
{ { 197 } , "Å".toCharArray() },
{ { 198 } , "Æ".toCharArray() },
{ { 199 } , "Ç".toCharArray() },
{ { 200 } , "È".toCharArray() },
{ { 201 } , "É".toCharArray() },
{ { 202 } , "Ê".toCharArray() },
{ { 203 } , "Ë".toCharArray() },
{ { 204 } , "Ì".toCharArray() },
{ { 205 } , "Í".toCharArray() },
{ { 206 } , "Î".toCharArray() },
{ { 207 } , "Ï".toCharArray() },
{ { 208 } , "Ð".toCharArray() },
{ { 209 } , "Ñ".toCharArray() },
{ { 210 } , "Ò".toCharArray() },
{ { 211 } , "Ó".toCharArray() },
{ { 212 } , "Ô".toCharArray() },
{ { 213 } , "Õ".toCharArray() },
{ { 214 } , "Ö".toCharArray() },
{ { 215 } , "×".toCharArray() },
{ { 216 } , "Ø".toCharArray() },
{ { 217 } , "Ù".toCharArray() },
{ { 218 } , "Ú".toCharArray() },
{ { 219 } , "Û".toCharArray() },
{ { 220 } , "Ü".toCharArray() },
{ { 221 } , "Ý".toCharArray() },
{ { 222 } , "Þ".toCharArray() },
{ { 223 } , "ß".toCharArray() },
{ { 224 } , "à".toCharArray() },
{ { 225 } , "á".toCharArray() },
{ { 226 } , "â".toCharArray() },
{ { 227 } , "ã".toCharArray() },
{ { 228 } , "ä".toCharArray() },
{ { 229 } , "å".toCharArray() },
{ { 230 } , "æ".toCharArray() },
{ { 231 } , "ç".toCharArray() },
{ { 232 } , "è".toCharArray() },
{ { 233 } , "é".toCharArray() },
{ { 234 } , "ê".toCharArray() },
{ { 235 } , "ë".toCharArray() },
{ { 236 } , "ì".toCharArray() },
{ { 237 } , "í".toCharArray() },
{ { 238 } , "î".toCharArray() },
{ { 239 } , "ï".toCharArray() },
{ { 240 } , "ð".toCharArray() },
{ { 241 } , "ñ".toCharArray() },
{ { 242 } , "ò".toCharArray() },
{ { 243 } , "ó".toCharArray() },
{ { 244 } , "ô".toCharArray() },
{ { 245 } , "õ".toCharArray() },
{ { 246 } , "ö".toCharArray() },
{ { 247 } , "÷".toCharArray() },
{ { 248 } , "ø".toCharArray() },
{ { 249 } , "ù".toCharArray() },
{ { 250 } , "ú".toCharArray() },
{ { 251 } , "û".toCharArray() },
{ { 252 } , "ü".toCharArray() },
{ { 253 } , "ý".toCharArray() },
{ { 254 } , "þ".toCharArray() },
{ { 255 } , "ÿ".toCharArray() },
{ { 338 } , "Œ".toCharArray() },
{ { 339 } , "œ".toCharArray() },
{ { 352 } , "Š".toCharArray() },
{ { 353 } , "š".toCharArray() },
{ { 376 } , "Ÿ".toCharArray() },
{ { 402 } , "ƒ".toCharArray() },
{ { 710 } , "ˆ".toCharArray() },
{ { 732 } , "˜".toCharArray() },
{ { 913 } , "Α".toCharArray() },
{ { 914 } , "Β".toCharArray() },
{ { 915 } , "Γ".toCharArray() },
{ { 916 } , "Δ".toCharArray() },
{ { 917 } , "Ε".toCharArray() },
{ { 918 } , "Ζ".toCharArray() },
{ { 919 } , "Η".toCharArray() },
{ { 920 } , "Θ".toCharArray() },
{ { 921 } , "Ι".toCharArray() },
{ { 922 } , "Κ".toCharArray() },
{ { 923 } , "Λ".toCharArray() },
{ { 924 } , "Μ".toCharArray() },
{ { 925 } , "Ν".toCharArray() },
{ { 926 } , "Ξ".toCharArray() },
{ { 927 } , "Ο".toCharArray() },
{ { 928 } , "Π".toCharArray() },
{ { 929 } , "Ρ".toCharArray() },
{ { 931 } , "Σ".toCharArray() },
{ { 932 } , "Τ".toCharArray() },
{ { 933 } , "Υ".toCharArray() },
{ { 934 } , "Φ".toCharArray() },
{ { 935 } , "Χ".toCharArray() },
{ { 936 } , "Ψ".toCharArray() },
{ { 937 } , "Ω".toCharArray() },
{ { 945 } , "α".toCharArray() },
{ { 946 } , "β".toCharArray() },
{ { 947 } , "γ".toCharArray() },
{ { 948 } , "δ".toCharArray() },
{ { 949 } , "ε".toCharArray() },
{ { 950 } , "ζ".toCharArray() },
{ { 951 } , "η".toCharArray() },
{ { 952 } , "θ".toCharArray() },
{ { 953 } , "ι".toCharArray() },
{ { 954 } , "κ".toCharArray() },
{ { 955 } , "λ".toCharArray() },
{ { 956 } , "μ".toCharArray() },
{ { 957 } , "ν".toCharArray() },
{ { 958 } , "ξ".toCharArray() },
{ { 959 } , "ο".toCharArray() },
{ { 960 } , "π".toCharArray() },
{ { 961 } , "ρ".toCharArray() },
{ { 962 } , "ς".toCharArray() },
{ { 963 } , "σ".toCharArray() },
{ { 964 } , "τ".toCharArray() },
{ { 965 } , "υ".toCharArray() },
{ { 966 } , "φ".toCharArray() },
{ { 967 } , "χ".toCharArray() },
{ { 968 } , "ψ".toCharArray() },
{ { 969 } , "ω".toCharArray() },
{ { 977 } , "ϑ".toCharArray() },
{ { 978 } , "ϒ".toCharArray() },
{ { 982 } , "ϖ".toCharArray() },
{ { 8194 } , " ".toCharArray() },
{ { 8195 } , " ".toCharArray() },
{ { 8201 } , " ".toCharArray() },
{ { 8204 } , "‌".toCharArray() },
{ { 8205 } , "‍".toCharArray() },
{ { 8206 } , "‎".toCharArray() },
{ { 8207 } , "‏".toCharArray() },
{ { 8211 } , "–".toCharArray() },
{ { 8212 } , "—".toCharArray() },
{ { 8216 } , "‘".toCharArray() },
{ { 8217 } , "’".toCharArray() },
{ { 8218 } , "‚".toCharArray() },
{ { 8220 } , "“".toCharArray() },
{ { 8221 } , "”".toCharArray() },
{ { 8222 } , "„".toCharArray() },
{ { 8224 } , "†".toCharArray() },
{ { 8225 } , "‡".toCharArray() },
{ { 8226 } , "•".toCharArray() },
{ { 8230 } , "…".toCharArray() },
{ { 8240 } , "‰".toCharArray() },
{ { 8242 } , "′".toCharArray() },
{ { 8243 } , "″".toCharArray() },
{ { 8249 } , "‹".toCharArray() },
{ { 8250 } , "›".toCharArray() },
{ { 8254 } , "‾".toCharArray() },
{ { 8260 } , "⁄".toCharArray() },
{ { 8364 } , "€".toCharArray() },
{ { 8465 } , "ℑ".toCharArray() },
{ { 8472 } , "℘".toCharArray() },
{ { 8476 } , "ℜ".toCharArray() },
{ { 8482 } , "™".toCharArray() },
{ { 8501 } , "ℵ".toCharArray() },
{ { 8592 } , "←".toCharArray() },
{ { 8593 } , "↑".toCharArray() },
{ { 8594 } , "→".toCharArray() },
{ { 8595 } , "↓".toCharArray() },
{ { 8596 } , "↔".toCharArray() },
{ { 8629 } , "↵".toCharArray() },
{ { 8656 } , "⇐".toCharArray() },
{ { 8657 } , "⇑".toCharArray() },
{ { 8658 } , "⇒".toCharArray() },
{ { 8659 } , "⇓".toCharArray() },
{ { 8660 } , "⇔".toCharArray() },
{ { 8704 } , "∀".toCharArray() },
{ { 8706 } , "∂".toCharArray() },
{ { 8707 } , "∃".toCharArray() },
{ { 8709 } , "∅".toCharArray() },
{ { 8711 } , "∇".toCharArray() },
{ { 8712 } , "∈".toCharArray() },
{ { 8713 } , "∉".toCharArray() },
{ { 8715 } , "∋".toCharArray() },
{ { 8719 } , "∏".toCharArray() },
{ { 8721 } , "∑".toCharArray() },
{ { 8722 } , "−".toCharArray() },
{ { 8727 } , "∗".toCharArray() },
{ { 8730 } , "√".toCharArray() },
{ { 8733 } , "∝".toCharArray() },
{ { 8734 } , "∞".toCharArray() },
{ { 8736 } , "∠".toCharArray() },
{ { 8743 } , "∧".toCharArray() },
{ { 8744 } , "∨".toCharArray() },
{ { 8745 } , "∩".toCharArray() },
{ { 8746 } , "∪".toCharArray() },
{ { 8747 } , "∫".toCharArray() },
{ { 8756 } , "∴".toCharArray() },
{ { 8764 } , "∼".toCharArray() },
{ { 8773 } , "≅".toCharArray() },
{ { 8776 } , "≈".toCharArray() },
{ { 8800 } , "≠".toCharArray() },
{ { 8801 } , "≡".toCharArray() },
{ { 8804 } , "≤".toCharArray() },
{ { 8805 } , "≥".toCharArray() },
{ { 8834 } , "⊂".toCharArray() },
{ { 8835 } , "⊃".toCharArray() },
{ { 8836 } , "⊄".toCharArray() },
{ { 8838 } , "⊆".toCharArray() },
{ { 8839 } , "⊇".toCharArray() },
{ { 8853 } , "⊕".toCharArray() },
{ { 8855 } , "⊗".toCharArray() },
{ { 8869 } , "⊥".toCharArray() },
{ { 8901 } , "⋅".toCharArray() },
{ { 8968 } , "⌈".toCharArray() },
{ { 8969 } , "⌉".toCharArray() },
{ { 8970 } , "⌊".toCharArray() },
{ { 8971 } , "⌋".toCharArray() },
{ { 9001 } , "⟨".toCharArray() },
{ { 9002 } , "⟩".toCharArray() },
{ { 9674 } , "◊".toCharArray() },
{ { 9824 } , "♠".toCharArray() },
{ { 9827 } , "♣".toCharArray() },
{ { 9829 } , "♥".toCharArray() },
{ { 9830 } , "♦".toCharArray() },
};
}