From 7bbd03f5c5531f36da3a5b23e9cc0c5116dcf07e Mon Sep 17 00:00:00 2001 From: Keiron Liddle Date: Mon, 14 Aug 2000 01:37:10 +0000 Subject: [PATCH] support for switch and new namespace git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@193668 13f79535-47bb-0310-9956-ffa450edef68 --- src/org/apache/fop/svg/A.java | 24 +++++- src/org/apache/fop/svg/SVGElementMapping.java | 6 +- .../fop/svg/SVGPropertyListMapping.java | 7 +- src/org/apache/fop/svg/SVGStringList.java | 81 +++++++++++++++++++ src/org/apache/fop/svg/Switch.java | 69 ++++++++++++++-- 5 files changed, 175 insertions(+), 12 deletions(-) create mode 100644 src/org/apache/fop/svg/SVGStringList.java diff --git a/src/org/apache/fop/svg/A.java b/src/org/apache/fop/svg/A.java index 766b627ea..5dc0371a1 100644 --- a/src/org/apache/fop/svg/A.java +++ b/src/org/apache/fop/svg/A.java @@ -63,7 +63,7 @@ import org.apache.fop.dom.svg.*; * class representing svg:a pseudo flow object. * */ -public class A extends FObj { +public class A extends FObj implements GraphicsCreator { /** * inner class for making A objects. @@ -104,6 +104,26 @@ public class A extends FObj { this.name = "svg:a"; } + public GraphicImpl createGraphic() + { + String rf = this.properties.get("xlink:href").getString(); + SVGAElementImpl graphic; + graphic = new SVGAElementImpl(); +// graphic.setTarget(new SVGAnimatedStringImpl(rf)); + + int numChildren = this.children.size(); + for (int i = 0; i < numChildren; i++) { + FONode child = (FONode) children.elementAt(i); + if(child instanceof GraphicsCreator) { + GraphicImpl impl = ((GraphicsCreator)child).createGraphic(); + graphic.appendChild((GraphicElement)impl); + } else if(child instanceof Defs) { + } + } + + return graphic; + } + /** * layout this formatting object. * @@ -116,7 +136,7 @@ public class A extends FObj { /* if the area this is being put into is an SVGArea */ if (area instanceof SVGArea) { /* add a line to the SVGArea */ -// ((SVGArea) area).addGraphic(new AGraphic(x1, y1, x2, y2)); + ((SVGArea) area).addGraphic(createGraphic()); } else { /* otherwise generate a warning */ System.err.println("WARNING: svg:a outside svg:svg"); diff --git a/src/org/apache/fop/svg/SVGElementMapping.java b/src/org/apache/fop/svg/SVGElementMapping.java index 92f8fd4f4..a045a3fec 100644 --- a/src/org/apache/fop/svg/SVGElementMapping.java +++ b/src/org/apache/fop/svg/SVGElementMapping.java @@ -56,7 +56,7 @@ import org.apache.fop.fo.ElementMapping; public class SVGElementMapping implements ElementMapping { public void addToBuilder(FOTreeBuilder builder) { - String uri = "http://www.w3.org/TR/2000/WD-SVG-20000629/DTD/svg-20000629.dtd"; + String uri = "http://www.w3.org/TR/2000/CR-SVG-20000802/DTD/svg-20000802.dtd"; builder.addMapping(uri, "svg", SVG.maker()); builder.addMapping(uri, "rect", Rect.maker()); builder.addMapping(uri, "line", Line.maker()); @@ -83,13 +83,13 @@ public class SVGElementMapping implements ElementMapping { builder.addMapping(uri, "linearGradient", LinearGradient.maker()); builder.addMapping(uri, "radialGradient", RadialGradient.maker()); builder.addMapping(uri, "stop", Stop.maker()); + builder.addMapping(uri, "a", A.maker()); + builder.addMapping(uri, "switch", Switch.maker()); // elements below will not work - builder.addMapping(uri, "a", A.maker()); builder.addMapping(uri, "pattern", Pattern.maker()); builder.addMapping(uri, "marker", Marker.maker()); - builder.addMapping(uri, "switch", Switch.maker()); builder.addMapping(uri, "animate", Animate.maker()); builder.addMapping(uri, "altGlyph", AltGlyph.maker()); builder.addMapping(uri, "font", Font.maker()); diff --git a/src/org/apache/fop/svg/SVGPropertyListMapping.java b/src/org/apache/fop/svg/SVGPropertyListMapping.java index 3006964b5..78a096a1f 100644 --- a/src/org/apache/fop/svg/SVGPropertyListMapping.java +++ b/src/org/apache/fop/svg/SVGPropertyListMapping.java @@ -60,7 +60,7 @@ public class SVGPropertyListMapping implements PropertyListMapping { public void addToBuilder(FOTreeBuilder builder) { - String uri = "http://www.w3.org/TR/2000/WD-SVG-20000629/DTD/svg-20000629.dtd"; + String uri = "http://www.w3.org/TR/2000/CR-SVG-20000802/DTD/svg-20000802.dtd"; Hashtable propertyTable = new Hashtable(); propertyTable.put("height",SVGLengthProperty.maker()); propertyTable.put("width",SVGLengthProperty.maker()); @@ -98,9 +98,12 @@ public class SVGPropertyListMapping implements PropertyListMapping { propertyTable.put("font-style",FontStyle.maker()); propertyTable.put("font-weight",FontWeight.maker()); propertyTable.put("font-size",FontSize.maker()); -// propertyTable.put("id", SVGStringProperty.maker()); + propertyTable.put("requiredFeatures", RequiredFeatures.maker()); + propertyTable.put("requiredExtensions", RequiredExtensions.maker()); + propertyTable.put("systemLanguage", SystemLanguage.maker()); propertyTable.put("id",Id.maker()); // attribute for objects + propertyTable.put("class",ElementClass.maker()); // class for styling builder.addPropertyList(uri, propertyTable); propertyTable = new Hashtable(); diff --git a/src/org/apache/fop/svg/SVGStringList.java b/src/org/apache/fop/svg/SVGStringList.java new file mode 100644 index 000000000..22bbb21fe --- /dev/null +++ b/src/org/apache/fop/svg/SVGStringList.java @@ -0,0 +1,81 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + 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. + + 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 . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +import org.apache.fop.dom.svg.*; + +import java.util.*; + +/** + * + */ +class SVGStringList extends SVGListImpl { + public SVGStringList(String str) + { + parseString(str); + } + + void parseString(String str) + { + StringTokenizer st = new StringTokenizer(str, ", \n\r\t:;"); + while(st.hasMoreTokens()) { + String item = st.nextToken(); + appendItem(item); + } + } + + public Object createItem() + { + return new String(); + } + +} diff --git a/src/org/apache/fop/svg/Switch.java b/src/org/apache/fop/svg/Switch.java index 3d1ff0126..06051a4ce 100644 --- a/src/org/apache/fop/svg/Switch.java +++ b/src/org/apache/fop/svg/Switch.java @@ -59,10 +59,13 @@ import org.apache.fop.apps.FOPException; import org.apache.fop.dom.svg.*; import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.*; + /** * */ -public class Switch extends FObj { +public class Switch extends FObj implements GraphicsCreator { /** * inner class for making Line objects. @@ -103,6 +106,65 @@ public class Switch extends FObj { this.name = "svg:switch"; } + public GraphicImpl createGraphic() + { + /* + * There are two options + * 1) add all children and select the correct one when rendering + * 2) select the correct one now and return it rather than a switch element + * Since renderers may have different ideas, leave it up to the renderer + * to select the correct one. + */ + String rf = this.properties.get("requiredFeatures").getString(); + String re = this.properties.get("requiredExtensions").getString(); + String sl = this.properties.get("systemLanguage").getString(); + SVGList strlist; + GraphicElement graphic; + graphic = new SVGSwitchElementImpl(); + if(!rf.equals("notpresent")) { + strlist = new SVGStringList(rf); + graphic.setRequiredFeatures(strlist); + } + if(!re.equals("notpresent")) { + strlist = new SVGStringList(re); + graphic.setRequiredExtensions(strlist); + } + if(!sl.equals("notpresent")) { + strlist = new SVGStringList(sl); + graphic.setSystemLanguage(strlist); + } + + int numChildren = this.children.size(); + for (int i = 0; i < numChildren; i++) { + FONode child = (FONode) children.elementAt(i); + if(child instanceof GraphicsCreator) { + GraphicImpl impl = ((GraphicsCreator)child).createGraphic(); + if(impl instanceof SVGTests) { + SVGTests testable = (SVGTests)impl; + rf = child.getProperty("requiredFeatures").getString(); + re = child.getProperty("requiredExtensions").getString(); + sl = child.getProperty("systemLanguage").getString(); + if(!rf.equals("notpresent")) { + strlist = new SVGStringList(rf); + testable.setRequiredFeatures(strlist); + } + if(!re.equals("notpresent")) { + strlist = new SVGStringList(re); + testable.setRequiredExtensions(strlist); + } + if(!sl.equals("notpresent")) { + strlist = new SVGStringList(sl); + testable.setSystemLanguage(strlist); + } + graphic.appendChild((GraphicElement)impl); + } + } else if(child instanceof Defs) { + } + } + + return graphic; + } + /** * layout this formatting object. * @@ -113,13 +175,10 @@ public class Switch extends FObj { public Status layout(Area area) throws FOPException { /* retrieve properties */ - String sr = this.properties.get("system-required").getString(); - String sl = this.properties.get("system-language").getString(); - /* if the area this is being put into is an SVGArea */ if (area instanceof SVGArea) { /* add a line to the SVGArea */ - ((SVGArea) area).addGraphic(new SVGSwitchElementImpl(sr, sl)); + ((SVGArea) area).addGraphic(createGraphic()); } else { /* otherwise generate a warning */ System.err.println("WARNING: svg:switch outside svg:svg"); -- 2.39.5