]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Added support for SVG 1.2 inside fo:instream-foreign-object. The code just used the...
authorJeremias Maerki <jeremias@apache.org>
Fri, 21 Nov 2008 16:07:58 +0000 (16:07 +0000)
committerJeremias Maerki <jeremias@apache.org>
Fri, 21 Nov 2008 16:07:58 +0000 (16:07 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@719616 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/fo/XMLObj.java
src/java/org/apache/fop/fo/extensions/svg/SVGDOMContentHandlerFactory.java [new file with mode: 0644]
src/java/org/apache/fop/fo/extensions/svg/SVGElement.java
src/java/org/apache/fop/svg/FOPSAXSVGDocumentFactory.java
status.xml

index 3330f41a5ef877a33a992ad35bc2b55f8ddd57c5..e1eb47b460d107b57c0716cc7210a7b22fd73df6 100644 (file)
@@ -217,6 +217,7 @@ public abstract class XMLObj extends FONode implements ObjectBuiltListener {
     /** {@inheritDoc} */
     public void notifyObjectBuilt(Object obj) {
         this.doc = (Document)obj;
+        this.element = this.doc.getDocumentElement();
     }
 
 }
diff --git a/src/java/org/apache/fop/fo/extensions/svg/SVGDOMContentHandlerFactory.java b/src/java/org/apache/fop/fo/extensions/svg/SVGDOMContentHandlerFactory.java
new file mode 100644 (file)
index 0000000..c5064da
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.fo.extensions.svg;
+
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+
+import org.apache.batik.dom.svg.SVGDOMImplementation;
+import org.apache.batik.util.XMLResourceDescriptor;
+
+import org.apache.fop.svg.FOPSAXSVGDocumentFactory;
+import org.apache.fop.util.ContentHandlerFactory;
+
+/**
+ * ContentHandlerFactory which constructs ContentHandlers that build SVG DOM Documents.
+ */
+public class SVGDOMContentHandlerFactory implements ContentHandlerFactory {
+
+    /**
+     * Default Constructor.
+     */
+    public SVGDOMContentHandlerFactory() {
+        //nop
+    }
+
+    /** {@inheritDoc} */
+    public String[] getSupportedNamespaces() {
+        return new String[] {SVGDOMImplementation.SVG_NAMESPACE_URI};
+    }
+
+    /** {@inheritDoc} */
+    public ContentHandler createContentHandler() throws SAXException {
+        return new Handler();
+    }
+
+    private static class Handler extends FOPSAXSVGDocumentFactory
+                implements ContentHandlerFactory.ObjectSource {
+
+        private ObjectBuiltListener obListener;
+
+        public Handler() throws SAXException {
+            super(XMLResourceDescriptor.getXMLParserClassName());
+        }
+
+        /** {@inheritDoc} */
+        public Object getObject() {
+            return getDocument();
+        }
+
+        /** {@inheritDoc} */
+        public void setObjectBuiltListener(ObjectBuiltListener listener) {
+            this.obListener = listener;
+        }
+
+        /** {@inheritDoc} */
+        public void endDocument() throws SAXException {
+            super.endDocument();
+            if (obListener != null) {
+                obListener.notifyObjectBuilt(getObject());
+            }
+        }
+
+    }
+
+}
index a40b80190fa32291da9e37300d403186f8a060a6..917e8c0d8bf4e6e0f269d7639a8203e5be99a9e6 100644 (file)
 package org.apache.fop.fo.extensions.svg;
 
 // FOP
-import org.apache.fop.apps.FOPException;
-import org.apache.fop.fo.FONode;
-import org.apache.fop.fo.PropertyList;
-import org.apache.fop.util.ContentHandlerFactory;
-import org.apache.fop.util.DOMBuilderContentHandlerFactory;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.net.URL;
 
-import org.apache.batik.dom.svg.SVGOMDocument;
-import org.apache.batik.dom.svg.SVGOMElement;
-import org.apache.batik.dom.svg.SVGContext;
-import org.apache.batik.dom.util.XMLSupport;
 import org.w3c.dom.Element;
 import org.w3c.dom.svg.SVGDocument;
-import org.xml.sax.Attributes;
-import org.xml.sax.Locator;
-import org.apache.batik.bridge.UnitProcessor;
-import org.apache.batik.util.SVGConstants;
-
-import org.w3c.dom.DOMImplementation;
 
+import org.apache.batik.bridge.UnitProcessor;
+import org.apache.batik.dom.svg.SVGContext;
 import org.apache.batik.dom.svg.SVGDOMImplementation;
+import org.apache.batik.dom.svg.SVGOMDocument;
+import org.apache.batik.dom.svg.SVGOMElement;
+import org.apache.batik.dom.util.XMLSupport;
+import org.apache.batik.util.SVGConstants;
 
-import java.net.URL;
-import java.awt.geom.AffineTransform;
-import java.awt.geom.Point2D;
-import java.awt.geom.Rectangle2D;
+import org.apache.fop.fo.FONode;
+import org.apache.fop.util.ContentHandlerFactory;
 
 /**
- * class representing the SVG root element
- * for constructing an svg document.
+ * Class representing the SVG root element
+ * for constructing an SVG document.
  */
 public class SVGElement extends SVGObj {
 
@@ -61,21 +54,9 @@ public class SVGElement extends SVGObj {
         super(parent);
     }
 
-    /**
-     * {@inheritDoc}
-     */
+    /** {@inheritDoc} */
     public ContentHandlerFactory getContentHandlerFactory() {
-        return new DOMBuilderContentHandlerFactory(getNamespaceURI(),
-                SVGDOMImplementation.getDOMImplementation());
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void processNode(String elementName, Locator locator,
-                            Attributes attlist, PropertyList propertyList) throws FOPException {
-        super.processNode(elementName, locator, attlist, propertyList);
-        init();
+        return new SVGDOMContentHandlerFactory();
     }
 
     /**
@@ -170,16 +151,6 @@ public class SVGElement extends SVGObj {
         return p2d;
     }
 
-    private void init() {
-        DOMImplementation impl = SVGDOMImplementation.getDOMImplementation();
-        String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
-        doc = impl.createDocument(svgNS, "svg", null);
-
-        element = doc.getDocumentElement();
-
-        buildTopLevel(doc, element);
-    }
-
     /**
      * Get the size of the SVG root element.
      * @param size the font size
index 720795cb22bb38f1634f07e10ca4d38aab345636..fce6ed2b6e6307c2a72d06486f99cadd19e38cf7 100644 (file)
@@ -21,6 +21,8 @@ package org.apache.fop.svg;
 
 import java.io.IOException;
 
+import org.w3c.dom.Document;
+
 import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -71,4 +73,13 @@ public class FOPSAXSVGDocumentFactory extends SAXSVGDocumentFactory {
         return super.resolveEntity(publicId, systemId);
     }
 
+    /**
+     * Returns the document built up by handling the incoming SAX events. This method will not
+     * return any instance for the first SAX events have been received.
+     * @return the DOM document
+     */
+    public Document getDocument() {
+        return this.document;
+    }
+
 }
index 2a951cb422deb901711844f5233a3d6e20436f1c..1ea87e4c9aee4c34e14167579f0e6a3a1a21d37d 100644 (file)
@@ -53,6 +53,9 @@
 
   <changes>
     <release version="FOP Trunk" date="TBD">
+      <action context="Images" dev="JM" type="add">
+        Added support for SVG 1.2 functionality inside fo:instream-foreign-object.
+      </action>
       <action context="Layout" dev="AD" type="fix" fixes-bug="46240">
         Fixed a bug when combining break-before with a span change.
       </action>