aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org/apache/fop/fo
diff options
context:
space:
mode:
authorWilliam Victor Mote <vmote@apache.org>2003-08-28 19:49:45 +0000
committerWilliam Victor Mote <vmote@apache.org>2003-08-28 19:49:45 +0000
commit7739f19793d00e5a20d9d3958fbc19f3c040ab24 (patch)
treee31769bcf87881ca8053c67264f1f7e3dc1b2883 /src/java/org/apache/fop/fo
parent99d6c358578ef29ecdc64ba53777a33c3822448f (diff)
downloadxmlgraphics-fop-7739f19793d00e5a20d9d3958fbc19f3c040ab24.tar.gz
xmlgraphics-fop-7739f19793d00e5a20d9d3958fbc19f3c040ab24.zip
move svg classes related to the FO Tree building from svg to fo/extensions/svg
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@196871 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java/org/apache/fop/fo')
-rw-r--r--src/java/org/apache/fop/fo/FOTreeBuilder.java2
-rw-r--r--src/java/org/apache/fop/fo/FOTreeVisitor.java4
-rw-r--r--src/java/org/apache/fop/fo/extensions/svg/SVGElement.java322
-rw-r--r--src/java/org/apache/fop/fo/extensions/svg/SVGElementMapping.java107
-rw-r--r--src/java/org/apache/fop/fo/extensions/svg/SVGObj.java84
-rw-r--r--src/java/org/apache/fop/fo/extensions/svg/SVGUserAgent.java190
6 files changed, 706 insertions, 3 deletions
diff --git a/src/java/org/apache/fop/fo/FOTreeBuilder.java b/src/java/org/apache/fop/fo/FOTreeBuilder.java
index 2237bf3e6..f87bd8b6b 100644
--- a/src/java/org/apache/fop/fo/FOTreeBuilder.java
+++ b/src/java/org/apache/fop/fo/FOTreeBuilder.java
@@ -162,7 +162,7 @@ public class FOTreeBuilder extends DefaultHandler {
*/
private void setupDefaultMappings() {
addElementMapping("org.apache.fop.fo.FOElementMapping");
- addElementMapping("org.apache.fop.svg.SVGElementMapping");
+ addElementMapping("org.apache.fop.fo.extensions.svg.SVGElementMapping");
addElementMapping("org.apache.fop.fo.extensions.ExtensionElementMapping");
// add mappings from available services
diff --git a/src/java/org/apache/fop/fo/FOTreeVisitor.java b/src/java/org/apache/fop/fo/FOTreeVisitor.java
index 8df70f75b..112a2753a 100644
--- a/src/java/org/apache/fop/fo/FOTreeVisitor.java
+++ b/src/java/org/apache/fop/fo/FOTreeVisitor.java
@@ -115,8 +115,8 @@ import org.apache.fop.fo.flow.MultiSwitch;
import org.apache.fop.fo.flow.MultiToggle;
import org.apache.fop.fo.flow.TableAndCaption;
import org.apache.fop.fo.flow.TableCaption;
-import org.apache.fop.svg.SVGObj;
-import org.apache.fop.svg.SVGElement;
+import org.apache.fop.fo.extensions.svg.SVGObj;
+import org.apache.fop.fo.extensions.svg.SVGElement;
/**
* <p>Implements the GoF Visitor design pattern to allow access to the FOTree
diff --git a/src/java/org/apache/fop/fo/extensions/svg/SVGElement.java b/src/java/org/apache/fop/fo/extensions/svg/SVGElement.java
new file mode 100644
index 000000000..893a72041
--- /dev/null
+++ b/src/java/org/apache/fop/fo/extensions/svg/SVGElement.java
@@ -0,0 +1,322 @@
+/*
+ * $Id$
+ * ============================================================================
+ * The Apache Software License, Version 1.1
+ * ============================================================================
+ *
+ * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modifica-
+ * tion, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if any, must
+ * include the following acknowledgment: "This product includes software
+ * developed by the Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself, if
+ * and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "FOP" and "Apache Software Foundation" must not be used to
+ * endorse or promote products derived from this software without prior
+ * written permission. For written permission, please contact
+ * apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache", nor may
+ * "Apache" appear in their name, without prior written permission of the
+ * Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ============================================================================
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * on behalf of the Apache Software Foundation and was originally created by
+ * James Tauber <jtauber@jtauber.com>. For more information on the Apache
+ * Software Foundation, please see <http://www.apache.org/>.
+ */
+package org.apache.fop.fo.extensions.svg;
+
+// FOP
+import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.FOTreeVisitor;
+import org.apache.fop.apps.FOPException;
+
+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.apache.batik.bridge.UnitProcessor;
+import org.apache.batik.util.SVGConstants;
+
+import org.w3c.dom.DOMImplementation;
+
+import org.apache.batik.dom.svg.SVGDOMImplementation;
+
+import java.net.URL;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import org.apache.fop.apps.*;
+import org.apache.fop.svg.*;
+
+/**
+ * class representing the SVG root element
+ * for constructing an svg document.
+ */
+public class SVGElement extends SVGObj {
+
+ /**
+ * Constructs an SVG object
+ *
+ * @param parent the parent formatting object
+ */
+ public SVGElement(FONode parent) {
+ super(parent);
+ }
+
+ /**
+ * Handle the xml attributes from SAX.
+ * @param attlist the attribute list
+ * @throws FOPException not thrown from here
+ */
+ public void handleAttrs(Attributes attlist) throws FOPException {
+ super.handleAttrs(attlist);
+ init();
+ }
+
+ /**
+ * Get the dimensions of this XML document.
+ * @param view the viewport dimensions
+ * @return the dimensions of this SVG document
+ */
+ public Point2D getDimension(final Point2D view) {
+
+ // TODO - change so doesn't hold onto fo,area tree
+ Element svgRoot = element;
+ /* create an SVG area */
+ /* if width and height are zero, get the bounds of the content. */
+
+ try {
+ String baseDir = userAgent.getBaseURL();
+ if (baseDir != null) {
+ ((SVGOMDocument)doc).setURLObject(new URL(baseDir));
+ }
+ } catch (Exception e) {
+ getLogger().error("Could not set base URL for svg", e);
+ }
+
+ Element e = ((SVGDocument)doc).getRootElement();
+ final float ptmm = userAgent.getPixelUnitToMillimeter();
+ // temporary svg context
+ SVGContext dc = new SVGContext() {
+ public float getPixelToMM() {
+ return ptmm;
+ }
+ public float getPixelUnitToMillimeter() {
+ return ptmm;
+ }
+
+ public Rectangle2D getBBox() {
+ return new Rectangle2D.Double(0, 0, view.getX(), view.getY());
+ }
+
+ /**
+ * Returns the transform from the global transform space to pixels.
+ */
+ public AffineTransform getScreenTransform() {
+ throw new UnsupportedOperationException("NYI");
+ }
+
+ /**
+ * Sets the transform to be used from the global transform space
+ * to pixels.
+ */
+ public void setScreenTransform(AffineTransform at) {
+ throw new UnsupportedOperationException("NYI");
+ }
+
+ public AffineTransform getCTM() {
+ return new AffineTransform();
+ }
+
+ public AffineTransform getGlobalTransform() {
+ return new AffineTransform();
+ }
+
+ public float getViewportWidth() {
+ return (float)view.getX();
+ }
+
+ public float getViewportHeight() {
+ return (float)view.getY();
+ }
+
+ public float getFontSize() {
+ return 12;
+ }
+ };
+ ((SVGOMElement)e).setSVGContext(dc);
+
+ //if (!e.hasAttributeNS(XMLSupport.XMLNS_NAMESPACE_URI, "xmlns")) {
+ e.setAttributeNS(XMLSupport.XMLNS_NAMESPACE_URI, "xmlns",
+ SVGDOMImplementation.SVG_NAMESPACE_URI);
+ //}
+ int fontSize = 12;
+ Point2D p2d = getSize(fontSize, svgRoot, userAgent.getPixelUnitToMillimeter());
+ ((SVGOMElement)e).setSVGContext(null);
+
+ 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
+ * @param svgRoot the svg root element
+ * @param ptmm the pixel to millimeter conversion factor
+ * @return the size of the SVG document
+ */
+ public static Point2D getSize(int size, Element svgRoot, float ptmm) {
+ String str;
+ UnitProcessor.Context ctx;
+ ctx = new PDFUnitContext(size, svgRoot, ptmm);
+ str = svgRoot.getAttributeNS(null, SVGConstants.SVG_WIDTH_ATTRIBUTE);
+ if (str.length() == 0) {
+ str = "100%";
+ }
+ float width = UnitProcessor.svgHorizontalLengthToUserSpace
+ (str, SVGConstants.SVG_WIDTH_ATTRIBUTE, ctx);
+
+ str = svgRoot.getAttributeNS(null, SVGConstants.SVG_HEIGHT_ATTRIBUTE);
+ if (str.length() == 0) {
+ str = "100%";
+ }
+ float height = UnitProcessor.svgVerticalLengthToUserSpace
+ (str, SVGConstants.SVG_HEIGHT_ATTRIBUTE, ctx);
+ return new Point2D.Float(width, height);
+ }
+
+ /**
+ * This class is the default context for a particular
+ * element. Informations not available on the element are get from
+ * the bridge context (such as the viewport or the pixel to
+ * millimeter factor.
+ */
+ public static class PDFUnitContext implements UnitProcessor.Context {
+
+ /** The element. */
+ private Element e;
+ private int fontSize;
+ private float pixeltoMM;
+
+ /**
+ * Create a PDF unit context.
+ * @param size the font size.
+ * @param e the svg element
+ * @param ptmm the pixel to millimeter factor
+ */
+ public PDFUnitContext(int size, Element e, float ptmm) {
+ this.e = e;
+ this.fontSize = size;
+ this.pixeltoMM = ptmm;
+ }
+
+ /**
+ * Returns the element.
+ * @return the element
+ */
+ public Element getElement() {
+ return e;
+ }
+
+ /**
+ * Returns the context of the parent element of this context.
+ * Since this is always for the root SVG element there never
+ * should be one...
+ * @return null
+ */
+ public UnitProcessor.Context getParentElementContext() {
+ return null;
+ }
+
+ /**
+ * Returns the pixel to mm factor. (this is deprecated)
+ * @return the pixel to millimeter factor
+ */
+ public float getPixelToMM() {
+ return pixeltoMM;
+ }
+
+ /**
+ * Returns the pixel to mm factor.
+ * @return the pixel to millimeter factor
+ */
+ public float getPixelUnitToMillimeter() {
+ return pixeltoMM;
+ }
+
+ /**
+ * Returns the font-size value.
+ * @return the default font size
+ */
+ public float getFontSize() {
+ return fontSize;
+ }
+
+ /**
+ * Returns the x-height value.
+ * @return the x-height value
+ */
+ public float getXHeight() {
+ return 0.5f;
+ }
+
+ /**
+ * Returns the viewport width used to compute units.
+ * @return the default viewport width of 100
+ */
+ public float getViewportWidth() {
+ return 100;
+ }
+
+ /**
+ * Returns the viewport height used to compute units.
+ * @return the default viewport height of 100
+ */
+ public float getViewportHeight() {
+ return 100;
+ }
+ }
+
+ public void acceptVisitor(FOTreeVisitor fotv) {
+ fotv.serveVisitor(this);
+ }
+
+}
+
diff --git a/src/java/org/apache/fop/fo/extensions/svg/SVGElementMapping.java b/src/java/org/apache/fop/fo/extensions/svg/SVGElementMapping.java
new file mode 100644
index 000000000..b4a1ce3e0
--- /dev/null
+++ b/src/java/org/apache/fop/fo/extensions/svg/SVGElementMapping.java
@@ -0,0 +1,107 @@
+/*
+ * $Id$
+ * ============================================================================
+ * The Apache Software License, Version 1.1
+ * ============================================================================
+ *
+ * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modifica-
+ * tion, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if any, must
+ * include the following acknowledgment: "This product includes software
+ * developed by the Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself, if
+ * and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "FOP" and "Apache Software Foundation" must not be used to
+ * endorse or promote products derived from this software without prior
+ * written permission. For written permission, please contact
+ * apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache", nor may
+ * "Apache" appear in their name, without prior written permission of the
+ * Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ============================================================================
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * on behalf of the Apache Software Foundation and was originally created by
+ * James Tauber <jtauber@jtauber.com>. For more information on the Apache
+ * Software Foundation, please see <http://www.apache.org/>.
+ */
+package org.apache.fop.fo.extensions.svg;
+
+import java.util.HashMap;
+
+import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.ElementMapping;
+import org.apache.fop.apps.FOFileHandler;
+
+import org.apache.batik.util.XMLResourceDescriptor;
+import org.apache.batik.dom.svg.SVGDOMImplementation;
+
+import org.apache.fop.svg.*;
+
+/**
+ * Setup the SVG element mapping.
+ * This adds the svg element mappings used to create the objects
+ * that create the SVG Document.
+ */
+public class SVGElementMapping extends ElementMapping {
+ private boolean batik = true;
+
+ public SVGElementMapping() {
+ namespaceURI = SVGDOMImplementation.SVG_NAMESPACE_URI;
+ }
+
+ protected void initialize() {
+ if (foObjs == null && batik == true) {
+ // this sets the parser that will be used
+ // by default (SVGBrokenLinkProvider)
+ // normally the user agent value is used
+ try {
+ XMLResourceDescriptor.setXMLParserClassName(
+ FOFileHandler.getParserClassName());
+
+ foObjs = new HashMap();
+ foObjs.put("svg", new SE());
+ foObjs.put(DEFAULT, new SVGMaker());
+ } catch (Throwable t) {
+ // if the classes are not available
+ // the DISPLAY is not checked
+ batik = false;
+ }
+ }
+ }
+
+ static class SVGMaker extends ElementMapping.Maker {
+ public FONode make(FONode parent) {
+ return new SVGObj(parent);
+ }
+ }
+
+ static class SE extends ElementMapping.Maker {
+ public FONode make(FONode parent) {
+ return new SVGElement(parent);
+ }
+ }
+}
diff --git a/src/java/org/apache/fop/fo/extensions/svg/SVGObj.java b/src/java/org/apache/fop/fo/extensions/svg/SVGObj.java
new file mode 100644
index 000000000..8ec55fd2b
--- /dev/null
+++ b/src/java/org/apache/fop/fo/extensions/svg/SVGObj.java
@@ -0,0 +1,84 @@
+/*
+ * $Id$
+ * ============================================================================
+ * The Apache Software License, Version 1.1
+ * ============================================================================
+ *
+ * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modifica-
+ * tion, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if any, must
+ * include the following acknowledgment: "This product includes software
+ * developed by the Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself, if
+ * and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "FOP" and "Apache Software Foundation" must not be used to
+ * endorse or promote products derived from this software without prior
+ * written permission. For written permission, please contact
+ * apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache", nor may
+ * "Apache" appear in their name, without prior written permission of the
+ * Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ============================================================================
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * on behalf of the Apache Software Foundation and was originally created by
+ * James Tauber <jtauber@jtauber.com>. For more information on the Apache
+ * Software Foundation, please see <http://www.apache.org/>.
+ */
+package org.apache.fop.fo.extensions.svg;
+
+import org.apache.fop.fo.FONode;
+import org.apache.fop.fo.XMLObj;
+import org.apache.fop.fo.FOTreeVisitor;
+
+/**
+ * Class for SVG element objects.
+ * This aids in the construction of the SVG Document.
+ */
+public class SVGObj extends XMLObj {
+ /**
+ * constructs an svg object (called by Maker).
+ *
+ * @param parent the parent formatting object
+ */
+ public SVGObj(FONode parent) {
+ super(parent);
+ }
+
+ /**
+ * Get the namespace for svg.
+ * @return the svg namespace
+ */
+ public String getNameSpace() {
+ return "http://www.w3.org/2000/svg";
+ }
+
+ public void acceptVisitor(FOTreeVisitor fotv) {
+ fotv.serveVisitor(this);
+ }
+
+}
+
diff --git a/src/java/org/apache/fop/fo/extensions/svg/SVGUserAgent.java b/src/java/org/apache/fop/fo/extensions/svg/SVGUserAgent.java
new file mode 100644
index 000000000..9fc07bd53
--- /dev/null
+++ b/src/java/org/apache/fop/fo/extensions/svg/SVGUserAgent.java
@@ -0,0 +1,190 @@
+/*
+ * $Id$
+ * ============================================================================
+ * The Apache Software License, Version 1.1
+ * ============================================================================
+ *
+ * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modifica-
+ * tion, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if any, must
+ * include the following acknowledgment: "This product includes software
+ * developed by the Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself, if
+ * and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "FOP" and "Apache Software Foundation" must not be used to
+ * endorse or promote products derived from this software without prior
+ * written permission. For written permission, please contact
+ * apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache", nor may
+ * "Apache" appear in their name, without prior written permission of the
+ * Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ============================================================================
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * on behalf of the Apache Software Foundation and was originally created by
+ * James Tauber <jtauber@jtauber.com>. For more information on the Apache
+ * Software Foundation, please see <http://www.apache.org/>.
+ */
+package org.apache.fop.fo.extensions.svg;
+
+import org.apache.fop.apps.FOUserAgent;
+
+import org.apache.batik.bridge.UserAgentAdapter;
+
+import org.apache.avalon.framework.logger.Logger;
+
+// Java
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Dimension2D;
+import java.awt.Dimension;
+
+/**
+ * The SVG user agent.
+ * This is an implementation of the batik svg user agent
+ * for handling errors and getting user agent values.
+ */
+public class SVGUserAgent extends UserAgentAdapter {
+ private AffineTransform currentTransform = null;
+ private FOUserAgent userAgent;
+
+ /**
+ * Creates a new SVGUserAgent.
+ * @param ua the FO user agent
+ * @param at the current transform
+ */
+ public SVGUserAgent(FOUserAgent ua, AffineTransform at) {
+ currentTransform = at;
+ userAgent = ua;
+ }
+
+ /**
+ * Returns the logger associated with this user agent.
+ * @return Logger the logger
+ */
+ protected final Logger getLogger() {
+ return this.userAgent.getLogger();
+ }
+
+ /**
+ * Displays an error message.
+ * @param message the message to display
+ */
+ public void displayError(String message) {
+ getLogger().error(message);
+ }
+
+ /**
+ * Displays an error resulting from the specified Exception.
+ * @param ex the exception to display
+ */
+ public void displayError(Exception ex) {
+ getLogger().error("SVG Error" + ex.getMessage(), ex);
+ }
+
+ /**
+ * Displays a message in the User Agent interface.
+ * The given message is typically displayed in a status bar.
+ * @param message the message to display
+ */
+ public void displayMessage(String message) {
+ getLogger().info(message);
+ }
+
+ /**
+ * Shows an alert dialog box.
+ * @param message the message to display
+ */
+ public void showAlert(String message) {
+ getLogger().warn(message);
+ }
+
+ /**
+ * Returns a customized the pixel to mm factor.
+ * @return the pixel unit to millimeter conversion factor
+ */
+ public float getPixelUnitToMillimeter() {
+ return userAgent.getPixelUnitToMillimeter();
+ }
+
+ /**
+ * Returns the language settings.
+ * @return the languages supported
+ */
+ public String getLanguages() {
+ return "en"; // userLanguages;
+ }
+
+ /**
+ * Returns the media type for this rendering.
+ * @return the media for fo documents is "print"
+ */
+ public String getMedia() {
+ return "print";
+ }
+
+ /**
+ * Returns the user stylesheet uri.
+ * @return null if no user style sheet was specified.
+ */
+ public String getUserStyleSheetURI() {
+ return null; // userStyleSheetURI;
+ }
+
+ /**
+ * Returns the class name of the XML parser.
+ * @return the XML parser class name
+ */
+ public String getXMLParserClassName() {
+ return org.apache.fop.apps.FOFileHandler.getParserClassName();
+ }
+
+ /**
+ * Is the XML parser validating.
+ * @return true if the xml parser is validating
+ */
+ public boolean isXMLParserValidating() {
+ return false;
+ }
+
+ /**
+ * Get the transform of the svg document.
+ * @return the transform
+ */
+ public AffineTransform getTransform() {
+ return currentTransform;
+ }
+
+ /**
+ * Get the default viewport size for an svg document.
+ * This returns a default value of 100x100.
+ * @return the default viewport size
+ */
+ public Dimension2D getViewportSize() {
+ return new Dimension(100, 100);
+ }
+
+}
+