]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
support for switch and new namespace
authorKeiron Liddle <keiron@apache.org>
Mon, 14 Aug 2000 01:37:10 +0000 (01:37 +0000)
committerKeiron Liddle <keiron@apache.org>
Mon, 14 Aug 2000 01:37:10 +0000 (01:37 +0000)
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
src/org/apache/fop/svg/SVGElementMapping.java
src/org/apache/fop/svg/SVGPropertyListMapping.java
src/org/apache/fop/svg/SVGStringList.java [new file with mode: 0644]
src/org/apache/fop/svg/Switch.java

index 766b627eabba8c035513941b6089c9c47b2c6897..5dc0371a1008e850b6c97d85ba4bdd0e714e1eb3 100644 (file)
@@ -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");
index 92f8fd4f485d8f79f5432de29ab29f0e1a20c95b..a045a3fec110e1835a8ddfe01d4baeae016b4891 100644 (file)
@@ -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());
index 3006964b5a1570f576f0d84702f418387a4f7a60..78a096a1f9cfd0e582cc4493f43006829dfc6e4a 100644 (file)
@@ -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 (file)
index 0000000..22bbb21
--- /dev/null
@@ -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 <jtauber@jtauber.com>. For more  information on the Apache 
+ Software Foundation, please see <http://www.apache.org/>.
+ */
+
+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();
+       }
+
+}
index 3d1ff0126cbed09e0c72ab08990ccbf49dedd61b..06051a4cec2d68e8bba23d9107d7f9e9addf774c 100644 (file)
@@ -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");