aboutsummaryrefslogtreecommitdiffstats
path: root/src/org/apache/fop/svg/SVG.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/apache/fop/svg/SVG.java')
-rw-r--r--src/org/apache/fop/svg/SVG.java369
1 files changed, 185 insertions, 184 deletions
diff --git a/src/org/apache/fop/svg/SVG.java b/src/org/apache/fop/svg/SVG.java
index b67b8c04e..1d52fed3b 100644
--- a/src/org/apache/fop/svg/SVG.java
+++ b/src/org/apache/fop/svg/SVG.java
@@ -1,35 +1,35 @@
/*-- $Id$ --
============================================================================
- The Apache Software License, Version 1.1
+ The Apache Software License, Version 1.1
============================================================================
- Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+ Copyright (C) 1999 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.
+ 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.
+ 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.
+ 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.
+ 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.
+ "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
@@ -69,174 +69,175 @@ import org.apache.fop.dom.svg.SVGArea;
*/
public class SVG extends FObj implements GraphicsCreator {
- /**
- * inner class for making SVG objects.
- */
- public static class Maker extends FObj.Maker {
-
- /**
- * make an SVG object.
- *
- * @param parent the parent formatting object
- * @param propertyList the explicit properties of this object
- *
- * @return the SVG object
- */
- public FObj make(FObj parent,
- PropertyList propertyList) throws FOPException {
- return new SVG(parent, propertyList);
- }
- }
-
- /**
- * returns the maker for this object.
- *
- * @return the maker for SVG objects
- */
- public static FObj.Maker maker() {
- return new SVG.Maker();
- }
-
- FontState fs;
- float width;
- float height;
-
- /**
- * constructs an SVG object (called by Maker).
- *
- * @param parent the parent formatting object
- * @param propertyList the explicit properties of this object
- */
- public SVG(FObj parent, PropertyList propertyList) {
- super(parent, propertyList);
- this.name = "svg:svg";
- }
-
- public SVGElement createGraphic() {
- SVGSVGElementImpl svgArea = null;
- SVGLength w = ((SVGLengthProperty) this.properties.get("width")).
- getSVGLength();
- SVGLength h = ((SVGLengthProperty) this.properties.get("height")).
- getSVGLength();
- svgArea = new SVGSVGElementImpl();
- SVGAnimatedLengthImpl sal;
- if (w == null)
- w = new SVGLengthImpl();
- sal = new SVGAnimatedLengthImpl(w);
- sal.setBaseVal(w);
- svgArea.setWidth(sal);
- if (h == null)
- h = new SVGLengthImpl();
- sal = new SVGAnimatedLengthImpl(h);
- sal.setBaseVal(h);
- svgArea.setHeight(sal);
- SVGLength lengthProp =
- ((SVGLengthProperty) this.properties.get("x")).
- getSVGLength();
- SVGLength x = lengthProp == null ? new SVGLengthImpl() : lengthProp;
- sal = new SVGAnimatedLengthImpl(x);
- sal.setBaseVal(x);
- svgArea.setX(sal);
- lengthProp = ((SVGLengthProperty) this.properties.get("y")).
- getSVGLength();
- SVGLength y = lengthProp == null ? new SVGLengthImpl() : lengthProp;
- sal = new SVGAnimatedLengthImpl(y);
- sal.setBaseVal(y);
- svgArea.setY(sal);
-
- svgArea.setStyle(
- ((SVGStyle) this.properties.get("style")).getStyle());
- svgArea.setTransform(
- ((SVGTransform) this.properties.get("transform")).
- getTransform());
- svgArea.setId(this.properties.get("id").getString());
- int numChildren = this.children.size();
- for (int i = 0; i < numChildren; i++) {
- FONode fo = (FONode) children.elementAt(i);
- if (fo instanceof GraphicsCreator) {
- SVGElement impl = ((GraphicsCreator) fo).createGraphic();
- if (impl != null) {
- if (impl instanceof SVGElementImpl)
- ((SVGElementImpl) impl).setClassName(
- new SVGAnimatedStringImpl(
- ((FObj) fo).getProperty(
- "class").getString()));
- svgArea.appendChild((org.w3c.dom.Node) impl);
- }
- // } else if(fo instanceof Defs) {
- // svgArea.addDefs(((Defs)fo).createDefs());
- }
- Status status;
- }
- return svgArea;
- }
-
- /**
- * layout this formatting object.
- *
- * @param area the area to layout the object into
- *
- * @return the status of the layout
- */
- public Status layout(Area area) throws FOPException {
-
- if (!(area instanceof ForeignObjectArea)) {
- // this is an error
- throw new FOPException("SVG not in fo:instream-foreign-object");
- }
-
- if (this.marker == BREAK_AFTER) {
- return new Status(Status.OK);
- }
-
- if (this.marker == START) {
- /* retrieve properties */
- String id = this.properties.get("id").getString();
- String fontFamily =
- this.properties.get("font-family").getString();
- String fontStyle =
- this.properties.get("font-style").getString();
- String fontWeight =
- this.properties.get("font-weight").getString();
- int fontSize =
- this.properties.get("font-size").getLength().mvalue();
-
- this.fs = new FontState(area.getFontInfo(), fontFamily,
- fontStyle, fontWeight, fontSize);
- SVGLength length;
- length = ((SVGLengthProperty) this.properties.get("width")).
- getSVGLength();
- if (length == null)
- length = new SVGLengthImpl();
- this.width = length.getValue();
- length = ((SVGLengthProperty) this.properties.get("height")).
- getSVGLength();
- if (length == null)
- length = new SVGLengthImpl();
- this.height = length.getValue();
-
- this.marker = 0;
- }
-
- /* create an SVG area */
- /* if width and height are zero, may want to get the bounds of the content. */
- SVGArea svg = new SVGArea(fs, width, height);
- SVGDocument doc = new SVGDocumentImpl();
- svg.setSVGDocument(doc);
- svg.start();
-
- /* add the SVG area to the containing area */
- ForeignObjectArea foa = (ForeignObjectArea) area;
- foa.setObject(svg);
- foa.setIntrinsicWidth(svg.getWidth());
- foa.setIntrinsicHeight(svg.getHeight());
-
- doc.appendChild((SVGSVGElement) createGraphic());
-
- /* finish off the SVG area */
- svg.end();
-
- /* return status */
- return new Status(Status.OK);
- }
+ /**
+ * inner class for making SVG objects.
+ */
+ public static class Maker extends FObj.Maker {
+
+ /**
+ * make an SVG object.
+ *
+ * @param parent the parent formatting object
+ * @param propertyList the explicit properties of this object
+ *
+ * @return the SVG object
+ */
+ public FObj make(FObj parent,
+ PropertyList propertyList) throws FOPException {
+ return new SVG(parent, propertyList);
+ }
+ }
+
+ /**
+ * returns the maker for this object.
+ *
+ * @return the maker for SVG objects
+ */
+ public static FObj.Maker maker() {
+ return new SVG.Maker();
+ }
+
+ FontState fs;
+ float width;
+ float height;
+
+ /**
+ * constructs an SVG object (called by Maker).
+ *
+ * @param parent the parent formatting object
+ * @param propertyList the explicit properties of this object
+ */
+ public SVG(FObj parent, PropertyList propertyList) {
+ super(parent, propertyList);
+ this.name = "svg:svg";
+ }
+
+ public SVGElement createGraphic() {
+ SVGSVGElementImpl svgArea = null;
+ SVGLength w = ((SVGLengthProperty) this.properties.get("width")).
+ getSVGLength();
+ SVGLength h = ((SVGLengthProperty) this.properties.get("height")).
+ getSVGLength();
+ svgArea = new SVGSVGElementImpl();
+ SVGAnimatedLengthImpl sal;
+ if (w == null)
+ w = new SVGLengthImpl();
+ sal = new SVGAnimatedLengthImpl(w);
+ sal.setBaseVal(w);
+ svgArea.setWidth(sal);
+ if (h == null)
+ h = new SVGLengthImpl();
+ sal = new SVGAnimatedLengthImpl(h);
+ sal.setBaseVal(h);
+ svgArea.setHeight(sal);
+ SVGLength lengthProp =
+ ((SVGLengthProperty) this.properties.get("x")).
+ getSVGLength();
+ SVGLength x = lengthProp == null ? new SVGLengthImpl() : lengthProp;
+ sal = new SVGAnimatedLengthImpl(x);
+ sal.setBaseVal(x);
+ svgArea.setX(sal);
+ lengthProp = ((SVGLengthProperty) this.properties.get("y")).
+ getSVGLength();
+ SVGLength y = lengthProp == null ? new SVGLengthImpl() : lengthProp;
+ sal = new SVGAnimatedLengthImpl(y);
+ sal.setBaseVal(y);
+ svgArea.setY(sal);
+
+ svgArea.setStyle(
+ ((SVGStyle) this.properties.get("style")).getStyle());
+ svgArea.setTransform(
+ ((SVGTransform) this.properties.get("transform")).
+ getTransform());
+ svgArea.setId(this.properties.get("id").getString());
+ int numChildren = this.children.size();
+ for (int i = 0; i < numChildren; i++) {
+ FONode fo = (FONode) children.elementAt(i);
+ if (fo instanceof GraphicsCreator) {
+ SVGElement impl = ((GraphicsCreator) fo).createGraphic();
+ if (impl != null) {
+ if (impl instanceof SVGElementImpl)
+ ((SVGElementImpl) impl).setClassName(
+ new SVGAnimatedStringImpl(
+ ((FObj) fo).getProperty(
+ "class").getString()));
+ svgArea.appendChild((org.w3c.dom.Node) impl);
+ }
+ // } else if(fo instanceof Defs) {
+ // svgArea.addDefs(((Defs)fo).createDefs());
+ }
+ Status status;
+ }
+ return svgArea;
+ }
+
+ /**
+ * layout this formatting object.
+ *
+ * @param area the area to layout the object into
+ *
+ * @return the status of the layout
+ */
+ public Status layout(Area area) throws FOPException {
+
+ if (!(area instanceof ForeignObjectArea)) {
+ // this is an error
+ throw new FOPException("SVG not in fo:instream-foreign-object");
+ }
+
+ if (this.marker == BREAK_AFTER) {
+ return new Status(Status.OK);
+ }
+
+ if (this.marker == START) {
+ /* retrieve properties */
+ String id = this.properties.get("id").getString();
+ String fontFamily =
+ this.properties.get("font-family").getString();
+ String fontStyle =
+ this.properties.get("font-style").getString();
+ String fontWeight =
+ this.properties.get("font-weight").getString();
+ int fontSize =
+ this.properties.get("font-size").getLength().mvalue();
+
+ // FIX-ME: should get the font-variant property
+ this.fs = new FontState(area.getFontInfo(), fontFamily,
+ fontStyle, fontWeight, fontSize, FontVariant.NORMAL);
+
+ SVGLength length;
+ length = ((SVGLengthProperty) this.properties.get("width")).getSVGLength();
+ if (length == null)
+ length = new SVGLengthImpl();
+ this.width = length.getValue();
+ length = ((SVGLengthProperty) this.properties.get("height")).
+ getSVGLength();
+ if (length == null)
+ length = new SVGLengthImpl();
+ this.height = length.getValue();
+
+ this.marker = 0;
+ }
+
+ /* create an SVG area */
+ /* if width and height are zero, may want to get the bounds of the content. */
+ SVGArea svg = new SVGArea(fs, width, height);
+ SVGDocument doc = new SVGDocumentImpl();
+ svg.setSVGDocument(doc);
+ svg.start();
+
+ /* add the SVG area to the containing area */
+ ForeignObjectArea foa = (ForeignObjectArea) area;
+ foa.setObject(svg);
+ foa.setIntrinsicWidth(svg.getWidth());
+ foa.setIntrinsicHeight(svg.getHeight());
+
+ doc.appendChild((SVGSVGElement) createGraphic());
+
+ /* finish off the SVG area */
+ svg.end();
+
+ /* return status */
+ return new Status(Status.OK);
+ }
}