Author: vgritsenko
Date: Thu Oct  7 07:03:05 2004
New Revision: 53970

Modified:
   
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/xml/EmbeddedXMLPipe.java
Log:
Ignore startDTD, endDTD, comments in DTD - same as IncludeXMLConsumer does.


Modified: 
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/xml/EmbeddedXMLPipe.java
==============================================================================
--- 
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/xml/EmbeddedXMLPipe.java
    (original)
+++ 
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/xml/EmbeddedXMLPipe.java
    Thu Oct  7 07:03:05 2004
@@ -17,24 +17,46 @@
 
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
+import org.xml.sax.ext.LexicalHandler;
 
 /**
  * This class implements a ContentHandler for embedding a full SAX
  * event stream into an existing stream of SAX events. An instance of
  * this class will pass unmodified all the SAX events to the linked
- * ContentHandler, but will ignore the startDocument and endDocument
- * events.
+ * ContentHandler, but it will ignore the startDocument/endDocument
+ * and startDTD/endDTD events, as well as all comment events within
+ * the DTD.
  *
  * @author <a href="mailto:[EMAIL PROTECTED]">Ovidiu Predescu</a>
  * @version CVS $Id$
  */
 public class EmbeddedXMLPipe extends AbstractXMLPipe {
 
+    private boolean inDTD;
+
+    /**
+     * Creates an EmbeddedXMLPipe that writes into the given XMLConsumer.
+     */
+    public EmbeddedXMLPipe(XMLConsumer consumer) {
+        setConsumer(consumer);
+    }
+
     /**
      * Creates an EmbeddedXMLPipe that writes into the given ContentHandler.
      */
     public EmbeddedXMLPipe(ContentHandler handler) {
         setContentHandler(handler);
+        if (handler instanceof LexicalHandler) {
+            setLexicalHandler((LexicalHandler) handler);
+        }
+    }
+
+    /**
+     * Creates an EmbeddedXMLPipe that writes into the given ContentHandler.
+     */
+    public EmbeddedXMLPipe(ContentHandler contentHandler, LexicalHandler 
lexicalHandler) {
+        setContentHandler(contentHandler);
+        setLexicalHandler(lexicalHandler);
     }
 
     /**
@@ -51,5 +73,39 @@
      * @exception SAXException if an error occurs
      */
     public void endDocument() throws SAXException {
+    }
+
+    /**
+     * Ignore the <code>startDTD</code> event: this method does nothing.
+     *
+     * @exception SAXException if an error occurs
+     */
+    public void startDTD(String name, String publicId, String systemId)
+    throws SAXException {
+        // Ignored
+        this.inDTD = true;
+    }
+
+    /**
+     * Ignore the <code>endDTD</code> event: this method does nothing.
+     *
+     * @exception SAXException if an error occurs
+     */
+    public void endDTD() throws SAXException {
+        // Ignored
+        this.inDTD = false;
+    }
+
+    /**
+     * Ignore all <code>comment</code> events if between
+     * startDTD/endDTD events.
+     *
+     * @exception SAXException if an error occurs
+     */
+    public void comment(char ch[], int start, int len)
+    throws SAXException {
+        if (!inDTD) {
+            super.comment(ch, start, len);
+        }
     }
 }

Reply via email to