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 2006/02/09 18:17:48 UTC
svn commit: r376354 - in
/cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers:
EncodingSerializer.java HTMLSerializer.java XHTMLSerializer.java
XMLSerializer.java
Author: pier
Date: Thu Feb 9 09:17:45 2006
New Revision: 376354
URL: http://svn.apache.org/viewcvs?rev=376354&view=rev
Log:
Better handling of DocTypes.
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/EncodingSerializer.java
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
cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/XMLSerializer.java
Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/EncodingSerializer.java
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/EncodingSerializer.java?rev=376354&r1=376353&r2=376354&view=diff
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/EncodingSerializer.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/EncodingSerializer.java Thu Feb 9 09:17:45 2006
@@ -36,9 +36,26 @@
import org.xml.sax.SAXException;
/**
+ * <p>An abstract serializer supporting multiple encodings.</p>
*
+ * <p>This serializer can accept the following configuration whenever it
+ * is declared into a sitemap:</p>
*
- * @author <a href="mailto:pier@apache.org">Pier Fumagalli</a>, February 2003
+ * <pre>
+ * <serializer class="org.apache.cocoon.components.serializers..." ... >
+ * <encoding>myencoding</encoding>
+ * <indent>myindenting</indent>
+ * </serializer>
+ * </pre>
+ *
+ * <p>The value indicated by <i>myencoding</i> must be replaced with a valid
+ * charset encoding (this serializer does not rely on the JVM for character
+ * encoding, you can look into the <code>cocoon-serializers-charsets</code>
+ * JAR file for a list).<p>
+ *
+ * <p>The value indicated by <i>myindenting</i> will control the indenting
+ * level for each element.<p>
+ *
* @version CVS $Id$
*/
public abstract class EncodingSerializer implements Serializer, Locator, Recyclable, Configurable {
Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/HTMLSerializer.java
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/HTMLSerializer.java?rev=376354&r1=376353&r2=376354&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 Thu Feb 9 09:17:45 2006
@@ -15,16 +15,38 @@
*/
package org.apache.cocoon.components.serializers;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.cocoon.components.serializers.encoding.HTMLEncoder;
import org.apache.cocoon.components.serializers.util.DocType;
import org.apache.cocoon.components.serializers.util.SGMLDocType;
import org.xml.sax.SAXException;
-
/**
+ * <p>A serializer converting XHTML into plain old HTML.</p>
+ *
+ * <p>For configuration options of this serializer, please look at the
+ * {@link XHTMLSerializer} and {@link EncodingSerializer}.</p>
+ *
+ * <p>Any of the XHTML document type declared or used will be converted into
+ * its HTML 4.01 counterpart, and in addition to those a "compatible" doctype
+ * can be supported to exploit a couple of shortcuts into MSIE's rendering
+ * engine. The values for the <code>doctype-default</code> can then be:</p>
+ *
+ * <dl>
+ * <dt>"<code>none</code>"</dt>
+ * <dd>Not to emit any dococument type declaration.</dd>
+ * <dt>"<code>compatible</code>"</dt>
+ * <dd>The HTML 4.01 Transitional (exploiting MSIE shortcut).</dd>
+ * <dt>"<code>strict</code>"</dt>
+ * <dd>The HTML 4.01 Strict document type.</dd>
+ * <dt>"<code>loose</code>"</dt>
+ * <dd>The HTML 4.01 Transitional document type.</dd>
+ * <dt>"<code>frameset</code>"</dt>
+ * <dd>The HTML 4.01 Frameset document type.</dd>
+ * </dl>
*
- * @author <a href="mailto:pier@apache.org">Pier Fumagalli</a>, February 2003
- * @version CVS $Id: HTMLSerializer.java,v 1.4 2004/04/30 22:57:22 joerg Exp $
+ * @version CVS $Id$
*/
public class HTMLSerializer extends XHTMLSerializer {
@@ -58,6 +80,30 @@
super(HTML_ENCODER);
}
+ /**
+ * Configure this instance by selecting the default document type to use.
+ */
+ public void configure(Configuration conf)
+ throws ConfigurationException {
+ super.configure(conf);
+
+ String doctype = conf.getChild("doctype-default").getValue(null);
+ if ("none".equalsIgnoreCase(doctype)) {
+ this.doctype_default = null;
+ } else if ("compatible".equalsIgnoreCase(doctype)) {
+ this.doctype_default = HTML401_DOCTYPE_COMPATIBLE;
+ } else if ("strict".equalsIgnoreCase(doctype)) {
+ this.doctype_default = HTML401_DOCTYPE_STRICT;
+ } else if ("loose".equalsIgnoreCase(doctype)) {
+ this.doctype_default = HTML401_DOCTYPE_TRANSITIONAL;
+ } else if ("frameset".equalsIgnoreCase(doctype)) {
+ this.doctype_default = HTML401_DOCTYPE_FRAMESET;
+ } else {
+ /* Default is compatible (MSIE hack) */
+ this.doctype_default = HTML401_DOCTYPE_COMPATIBLE;
+ }
+ }
+
/* ====================================================================== */
/** Empty namespaces declaration. */
@@ -99,22 +145,22 @@
+ this.getLocation());
}
- if (this.doctype == null) {
- this.doctype = HTML401_DOCTYPE_COMPATIBLE;
- } else if (XHTML1_DOCTYPE_STRICT.equals(this.doctype)) {
+ if (this.doctype == null) this.doctype = this.doctype_default;
+
+ if (XHTML1_DOCTYPE_STRICT.equals(this.doctype)) {
this.doctype = HTML401_DOCTYPE_STRICT;
} else if (XHTML1_DOCTYPE_TRANSITIONAL.equals(this.doctype)) {
this.doctype = HTML401_DOCTYPE_TRANSITIONAL;
} else if (XHTML1_DOCTYPE_FRAMESET.equals(this.doctype)) {
this.doctype = HTML401_DOCTYPE_FRAMESET;
} else {
+ /* The root element is uppercase, always!!! */
this.doctype = new DocType(this.doctype.getName().toUpperCase(),
this.doctype.getPublicId(),
this.doctype.getSystemId());
}
super.body(XHTML1_NAMESPACE, name, name);
}
-
/**
* Receive notification of the beginning of an element.
Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/XHTMLSerializer.java
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/XHTMLSerializer.java?rev=376354&r1=376353&r2=376354&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 Thu Feb 9 09:17:45 2006
@@ -19,11 +19,35 @@
import org.apache.cocoon.components.serializers.util.DocType;
import org.xml.sax.SAXException;
-
/**
+ * <p>A pedantinc XHTML serializer encoding all recognized entities with their
+ * proper HTML names.</p>
+ *
+ * <p>For configuration options of this serializer, please look at the
+ * {@link EncodingSerializer}, in addition to those, this serializer also
+ * support the specification of a default doctype. This default will be used
+ * if no document type is received in the SAX events, and can be configured
+ * in the following way:</p>
*
+ * <pre>
+ * <serializer class="org.apache.cocoon.components.serializers..." ... >
+ * <doctype-default>mytype</doctype-default>
+ * </serializer>
+ * </pre>
+ *
+ * <p>The value <i>mytype</i> can be one of:</p>
+ *
+ * <dl>
+ * <dt>"<code>none</code>"</dt>
+ * <dd>Not to emit any dococument type declaration.</dd>
+ * <dt>"<code>strict</code>"</dt>
+ * <dd>The XHTML 1.0 Strict document type.</dd>
+ * <dt>"<code>loose</code>"</dt>
+ * <dd>The XHTML 1.0 Transitional document type.</dd>
+ * <dt>"<code>frameset</code>"</dt>
+ * <dd>The XHTML 1.0 Frameset document type.</dd>
+ * </dl>
*
- * @author <a href="mailto:pier@apache.org">Pier Fumagalli</a>, February 2003
* @version CVS $Id$
*/
public class XHTMLSerializer extends XMLSerializer {
@@ -51,6 +75,13 @@
private static final XHTMLEncoder XHTML_ENCODER = new XHTMLEncoder();
+ /* ====================================================================== */
+
+ /** The <code>DocType</code> instance representing the document. */
+ protected DocType doctype_default = null;
+
+ /* ====================================================================== */
+
/**
* Create a new instance of this <code>XHTMLSerializer</code>
*/
@@ -73,6 +104,28 @@
return("text/html; charset=" + this.charset.getName());
}
+ /**
+ * Configure this instance by selecting the default document type to use.
+ */
+ public void configure(Configuration conf)
+ throws ConfigurationException {
+ super.configure(conf);
+
+ String doctype = conf.getChild("doctype-default").getValue(null);
+ if ("none".equalsIgnoreCase(doctype)) {
+ this.doctype_default = null;
+ } else if ("strict".equalsIgnoreCase(doctype)) {
+ this.doctype_default = XHTML1_DOCTYPE_STRICT;
+ } else if ("loose".equalsIgnoreCase(doctype)) {
+ this.doctype_default = XHTML1_DOCTYPE_TRANSITIONAL;
+ } else if ("frameset".equalsIgnoreCase(doctype)) {
+ this.doctype_default = XHTML1_DOCTYPE_FRAMESET;
+ } else {
+ /* Default is transitional */
+ this.doctype_default = XHTML1_DOCTYPE_TRANSITIONAL;
+ }
+ }
+
/* ====================================================================== */
/**
@@ -84,7 +137,7 @@
*/
public void body(String uri, String local, String qual)
throws SAXException {
- if (this.doctype == null) this.doctype = XHTML1_DOCTYPE_TRANSITIONAL;
+ if (this.doctype == null) this.doctype = this.doctype_default;
if (this.namespaces.getUri("").length() == 0) {
this.namespaces.push("", XHTML1_NAMESPACE);
}
Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/XMLSerializer.java
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/XMLSerializer.java?rev=376354&r1=376353&r2=376354&view=diff
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/XMLSerializer.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/apache/cocoon/components/serializers/XMLSerializer.java Thu Feb 9 09:17:45 2006
@@ -24,8 +24,11 @@
import org.xml.sax.SAXException;
/**
+ * <p>A fancy XML serializer not relying on the JAXP API.</p>
+ *
+ * <p>For configuration options of this serializer, please look at the
+ * {@link EncodingSerializer}.</p>
*
- * @author <a href="mailto:pier@apache.org">Pier Fumagalli</a>, February 2003
* @version CVS $Id$
*/
public class XMLSerializer extends EncodingSerializer {
Backporting patch? (Was: Re: svn commit: r376354)
Posted by Pier Fumagalli <pi...@betaversion.org>.
How do I apply this to TRUNK now? Sorry, completely clueless about
SVN Externals! :-P
Pier
On 9 Feb 2006, at 17:17, pier@apache.org wrote:
> Author: pier
> Date: Thu Feb 9 09:17:45 2006
> New Revision: 376354
>
> URL: http://svn.apache.org/viewcvs?rev=376354&view=rev
> Log:
> Better handling of DocTypes.
>
> Modified:
> cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/
> apache/cocoon/components/serializers/EncodingSerializer.java
> 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
> cocoon/branches/BRANCH_2_1_X/src/blocks/serializers/java/org/
> apache/cocoon/components/serializers/XMLSerializer.java