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>
+ * &lt;serializer class="org.apache.cocoon.components.serializers..." ... &gt;
+ *   &lt;encoding&gt;myencoding&lt;/encoding&gt;
+ *   &lt;indent&gt;myindenting&lt;/indent&gt;
+ * &lt;/serializer&gt;
+ * </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>
+ * &lt;serializer class="org.apache.cocoon.components.serializers..." ... &gt;
+ *   &lt;doctype-default&gt;mytype&lt;/doctype-default&gt;
+ * &lt;/serializer&gt;
+ * </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