aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org/apache/fop
diff options
context:
space:
mode:
authorJeremias Maerki <jeremias@apache.org>2008-11-21 16:07:58 +0000
committerJeremias Maerki <jeremias@apache.org>2008-11-21 16:07:58 +0000
commitd62f5f811c40bc3f0b20f0ae8d75cfb240be9c67 (patch)
tree745eb3d765ab3f325733591b71197304013ec8d0 /src/java/org/apache/fop
parentf15eca494468c55454bbc20dee20bb874f39c5ab (diff)
downloadxmlgraphics-fop-d62f5f811c40bc3f0b20f0ae8d75cfb240be9c67.tar.gz
xmlgraphics-fop-d62f5f811c40bc3f0b20f0ae8d75cfb240be9c67.zip
Added support for SVG 1.2 inside fo:instream-foreign-object. The code just used the basic SVGDOMImplementation for SVG 1.1. Now it delegates the DOM building to Batik code instead of to a normal DOM builder.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@719616 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java/org/apache/fop')
-rw-r--r--src/java/org/apache/fop/fo/XMLObj.java1
-rw-r--r--src/java/org/apache/fop/fo/extensions/svg/SVGDOMContentHandlerFactory.java82
-rw-r--r--src/java/org/apache/fop/fo/extensions/svg/SVGElement.java61
-rw-r--r--src/java/org/apache/fop/svg/FOPSAXSVGDocumentFactory.java11
4 files changed, 110 insertions, 45 deletions
diff --git a/src/java/org/apache/fop/fo/XMLObj.java b/src/java/org/apache/fop/fo/XMLObj.java
index 3330f41a5..e1eb47b46 100644
--- a/src/java/org/apache/fop/fo/XMLObj.java
+++ b/src/java/org/apache/fop/fo/XMLObj.java
@@ -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
index 000000000..c5064da3f
--- /dev/null
+++ b/src/java/org/apache/fop/fo/extensions/svg/SVGDOMContentHandlerFactory.java
@@ -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());
+ }
+ }
+
+ }
+
+}
diff --git a/src/java/org/apache/fop/fo/extensions/svg/SVGElement.java b/src/java/org/apache/fop/fo/extensions/svg/SVGElement.java
index a40b80190..917e8c0d8 100644
--- a/src/java/org/apache/fop/fo/extensions/svg/SVGElement.java
+++ b/src/java/org/apache/fop/fo/extensions/svg/SVGElement.java
@@ -20,35 +20,28 @@
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
diff --git a/src/java/org/apache/fop/svg/FOPSAXSVGDocumentFactory.java b/src/java/org/apache/fop/svg/FOPSAXSVGDocumentFactory.java
index 720795cb2..fce6ed2b6 100644
--- a/src/java/org/apache/fop/svg/FOPSAXSVGDocumentFactory.java
+++ b/src/java/org/apache/fop/svg/FOPSAXSVGDocumentFactory.java
@@ -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;
+ }
+
}