tkormann 01/11/13 07:20:59 Modified: sources/org/apache/batik/bridge AbstractGraphicsNodeBridge.java SVGGElementBridge.java SVGImageElementBridge.java SVGSVGElementBridge.java SVGShapeElementBridge.java SVGTextElementBridge.java SVGUseElementBridge.java Added: samples/tests/spec/structure requiredFeatures.svg requiredFeaturesCombo.svg Log: add support for requiredFeatures on graphical elements. 2 new tests added. Other elements need clarifications from the WG. Revision Changes Path 1.1 xml-batik/samples/tests/spec/structure/requiredFeatures.svg Index: requiredFeatures.svg =================================================================== <?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> <!-- ========================================================================= --> <!-- Copyright (C) The Apache Software Foundation. All rights reserved. --> <!-- --> <!-- This software is published under the terms of the Apache Software License --> <!-- version 1.1, a copy of which has been included with this distribution in --> <!-- the LICENSE file. --> <!-- ========================================================================= --> <!-- ========================================================================= --> <!-- Test the 'requiredFeatures' attribute --> <!-- --> <!-- @author [EMAIL PROTECTED] --> <!-- @version $Id: requiredFeatures.svg,v 1.1 2001/11/13 15:20:58 tkormann Exp $ --> <!-- ========================================================================= --> <?xml-stylesheet type="text/css" href="../../resources/style/test.css" ?> <svg width="450" height="500" viewBox="0 0 450 500"> <title>Test the 'requiredFeatures' attribute</title> <!-- ============================================================= --> <!-- Test content --> <!-- ============================================================= --> <g id="testContent"> <text x="225" y="50" class="title">Test the 'requiredFeatures' attribute</text> <g style="fill:#eee; stroke:black"> <rect x="50" y="80" width="360" height="20" /> <rect x="30" y="100" width="20" height="85" /> <rect x="30" y="185" width="20" height="85" /> <rect x="30" y="270" width="20" height="85" /> <rect x="30" y="355" width="20" height="85" /> </g> <g style="fill:none; stroke:black"> <rect x="50" y="80" width="360" height="360" /> <line x1="170" y1="80" x2="170" y2="440" /> <line x1="290" y1="80" x2="290" y2="440" /> <line x1="50" y1="185" x2="410" y2="185" /> <line x1="50" y1="270" x2="410" y2="270" /> <line x1="50" y1="355" x2="410" y2="355" /> </g> <g style="fill:black; text-anchor:middle;"> <text x="110" y="94">default</text> <text x="230" y="94">org.w3c.svg.static</text> <text x="350" y="94">invalid</text> <text x="0" y="0" transform="translate(44, 145) rotate(-90)">Graphic Obj.</text> <text x="0" y="0" transform="translate(44, 230) rotate(-90)"><svg></text> <text x="0" y="0" transform="translate(44, 315) rotate(-90)"><g></text> <text x="0" y="0" transform="translate(44, 400) rotate(-90)"><use></text> </g> <defs> </defs> <!-- ####################################################################################### --> <g transform="translate(60, 110)"> <g> <rect x="0" y="0" width="30" height="20" style="fill:crimson" /> <circle cx="50" cy="10" r="10" style="fill:orange" /> <ellipse cx="85" cy="10" rx="15" ry="10" style="fill:gold" /> </g> <g style="stroke-width:3; fill:none"> <line x1="0" y1="25" x2="30" y2="45" style="stroke:crimson" /> <polyline points="35 25 45 42 55 25 65 42" style="stroke:orange" /> <polygon points="70 25 80 42 90 25 100 42" style="fill: gold" /> </g> <g style="stroke-width:3; fill:none"> <path d="M0 60C5 55 10 55 15 60C20 65 25 65 30 60" style="stroke:gold" /> <image xlink:href="../../resources/images/tde.jpg" x="35" y="50" width="30" height="20" /> <text x="85" y="65" style="fill:black; stroke:none; text-anchor:middle">text</text> </g> </g> <g transform="translate(180, 110)"> <g> <rect x="0" y="0" width="30" height="20" style="fill:crimson" requiredFeatures="org.w3c.svg.static" /> <circle cx="50" cy="10" r="10" style="fill:orange" requiredFeatures="org.w3c.svg.static"/> <ellipse cx="85" cy="10" rx="15" ry="10" style="fill:gold" requiredFeatures="org.w3c.svg.static"/> </g> <g style="stroke-width:3; fill:none"> <line x1="0" y1="25" x2="30" y2="45" style="stroke:crimson" requiredFeatures="org.w3c.svg.static"/> <polyline points="35 25 45 42 55 25 65 42" style="stroke:orange" requiredFeatures="org.w3c.svg.static"/> <polygon points="70 25 80 42 90 25 100 42" style="fill: gold" requiredFeatures="org.w3c.svg.static"/> </g> <g style="stroke-width:3; fill:none"> <path d="M0 60C5 55 10 55 15 60C20 65 25 65 30 60" style="stroke:gold" requiredFeatures="org.w3c.svg.static"/> <image xlink:href="../../resources/images/tde.jpg" x="35" y="50" width="30" height="20" requiredFeatures="org.w3c.svg.static"/> <text x="85" y="65" style="fill:black; stroke:none; text-anchor:middle" requiredFeatures="org.w3c.svg.static">text</text> </g> </g> <g transform="translate(300, 110)"> <g> <rect x="0" y="0" width="30" height="20" style="fill:crimson" requiredFeatures="invalid"/> <circle cx="50" cy="10" r="10" style="fill:orange" requiredFeatures="invalid"/> <ellipse cx="85" cy="10" rx="15" ry="10" style="fill:gold" requiredFeatures="invalid"/> </g> <g style="stroke-width:3; fill:none"> <line x1="0" y1="25" x2="30" y2="45" style="stroke:crimson" requiredFeatures="invalid"/> <polyline points="35 25 45 42 55 25 65 42" style="stroke:orange" requiredFeatures="invalid"/> <polygon points="70 25 80 42 90 25 100 42" style="fill: gold" requiredFeatures="invalid"/> </g> <g style="stroke-width:3; fill:none"> <path d="M0 60C5 55 10 55 15 60C20 65 25 65 30 60" style="stroke:gold" requiredFeatures="invalid"/> <image xlink:href="../../resources/images/tde.jpg" x="35" y="50" width="30" height="20" requiredFeatures="invalid"/> <text x="85" y="65" style="fill:black; stroke:none; text-anchor:middle" requiredFeatures="invalid">text</text> </g> </g> <!-- ####################################################################################### --> <g style="fill:crimson"> <svg x="52" y="187" width="116" height="81"> <rect x="0" y="0" width="100%" height="100%" /> </svg> <svg x="172" y="187" width="116" height="81" requiredFeatures="org.w3c.svg.static"> <rect x="0" y="0" width="100%" height="100%" /> </svg> <svg x="292" y="187" width="116" height="81" requiredFeatures="invalid"> <rect x="0" y="0" width="100%" height="100%" /> </svg> </g> <!-- ####################################################################################### --> <g style="fill:crimson" transform="translate(0 85)"> <g> <rect x="52" y="187" width="116" height="81" /> </g> <g> <rect x="172" y="187" width="116" height="81" requiredFeatures="org.w3c.svg.static" /> </g> <g> <rect x="292" y="187" width="116" height="81" requiredFeatures="invalid" /> </g> </g> <!-- ####################################################################################### --> <defs> <rect id="use" x="0" y="0" width="116" height="81" style="fill:crimson"/> </defs> <g> <use xlink:href="#use" x="52" y="357" /> <use xlink:href="#use" x="172" y="357" requiredFeatures="org.w3c.svg.static" /> <use xlink:href="#use" x="292" y="357" requiredFeatures="invalid" /> </g> </g> <!-- ============================================================= --> <!-- Batik sample mark --> <!-- ============================================================= --> <use xlink:href="../../../batikLogo.svg#Batik_Tag_Box" /> </svg> 1.1 xml-batik/samples/tests/spec/structure/requiredFeaturesCombo.svg Index: requiredFeaturesCombo.svg =================================================================== <?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> <!-- ========================================================================= --> <!-- Copyright (C) The Apache Software Foundation. All rights reserved. --> <!-- --> <!-- This software is published under the terms of the Apache Software License --> <!-- version 1.1, a copy of which has been included with this distribution in --> <!-- the LICENSE file. --> <!-- ========================================================================= --> <!-- ========================================================================= --> <!-- Test the 'requiredFeatures' attribtue combo --> <!-- --> <!-- @author [EMAIL PROTECTED] --> <!-- @version $Id: requiredFeaturesCombo.svg,v 1.1 2001/11/13 15:20:58 tkormann Exp $ --> <!-- ========================================================================= --> <?xml-stylesheet type="text/css" href="../../resources/style/test.css" ?> <svg width="450" height="500" viewBox="0 0 450 500"> <title>Test the 'requiredFeatures' attribute combo</title> <!-- ============================================================= --> <!-- Test content --> <!-- ============================================================= --> <g id="testContent"> <text x="225" y="50" class="title">Test the 'requiredFeatures' attribute combo</text> <g style="stroke:black; fill:#eee"> <rect x="45" y="80" width="120" height="20" /> <rect x="165" y="80" width="120" height="20" /> <rect x="285" y="80" width="120" height="20" /> <rect x="25" y="100" width="20" height="120" /> <rect x="25" y="220" width="20" height="120" /> <rect x="25" y="340" width="20" height="120" /> </g> <g style="stroke:black; fill:none"> <rect x="45" y="100" width="360" height="360" /> <line x1="165" y1="100" x2="165" y2="460" /> <line x1="285" y1="100" x2="285" y2="460" /> <line x1="45" y1="220" x2="405" y2="220" /> <line x1="45" y1="340" x2="405" y2="340" /> </g> <g style="stroke:none; fill:black; text-anchor:middle"> <text x="105" y="94">org.w3c.svg</text> <text x="225" y="94">org.w3c.svg.static</text> <text x="345" y="94">invalid</text> <text x="0" y="0" transform="translate(40 160) rotate(-90)">org.w3c.svg</text> <text x="0" y="0" transform="translate(40 280) rotate(-90)">org.w3c.svg.static</text> <text x="0" y="0" transform="translate(40 400) rotate(-90)">invalid</text> </g> <rect x="65" y="120" width="80" height="80" style="fill:crimson" requiredFeatures="org.w3c.svg" /> <rect x="65" y="120" width="80" height="80" style="fill:crimson" requiredFeatures="org.w3c.svg org.w3c.svg.static" transform="translate(120 0)" /> <rect x="65" y="120" width="80" height="80" style="fill:crimson" requiredFeatures="org.w3c.svg invalid" transform="translate(240 0)" /> <g transform="translate(0 120)"> <rect x="65" y="120" width="80" height="80" style="fill:crimson" requiredFeatures="org.w3c.svg.static org.w3c.svg" /> <rect x="65" y="120" width="80" height="80" style="fill:crimson" requiredFeatures="org.w3c.svg.static" transform="translate(120 0)" /> <rect x="65" y="120" width="80" height="80" style="fill:crimson" requiredFeatures="org.w3c.svg.static invalid" transform="translate(240 0)" /> </g> <g transform="translate(0 240)"> <rect x="65" y="120" width="80" height="80" style="fill:crimson" requiredFeatures="invalid org.w3c.svg"/> <rect x="65" y="120" width="80" height="80" style="fill:crimson" requiredFeatures="invalid org.w3c.svg.static" transform="translate(120 0)" /> <rect x="65" y="120" width="80" height="80" style="fill:crimson" requiredFeatures="invalid" transform="translate(240 0)" /> </g> </g> <!-- ============================================================= --> <!-- Batik sample mark --> <!-- ============================================================= --> <use xlink:href="../../../batikLogo.svg#Batik_Tag_Box" /> </svg> 1.5 +6 -1 xml-batik/sources/org/apache/batik/bridge/AbstractGraphicsNodeBridge.java Index: AbstractGraphicsNodeBridge.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/AbstractGraphicsNodeBridge.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- AbstractGraphicsNodeBridge.java 2001/08/03 16:33:42 1.4 +++ AbstractGraphicsNodeBridge.java 2001/11/13 15:20:58 1.5 @@ -35,7 +35,7 @@ * </ul> * * @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a> - * @version $Id: AbstractGraphicsNodeBridge.java,v 1.4 2001/08/03 16:33:42 vhardy Exp $ + * @version $Id: AbstractGraphicsNodeBridge.java,v 1.5 2001/11/13 15:20:58 tkormann Exp $ */ public abstract class AbstractGraphicsNodeBridge extends AbstractSVGBridge implements GraphicsNodeBridge, ErrorConstants { @@ -53,6 +53,11 @@ * @return a graphics node that represents the specified element */ public GraphicsNode createGraphicsNode(BridgeContext ctx, Element e) { + // 'requiredFeatures', 'requiredExtensions' and 'systemLanguage' + if (!SVGUtilities.matchUserAgent(e, ctx.getUserAgent())) { + return null; + } + GraphicsNode node = instantiateGraphicsNode(); // 'transform' String s = e.getAttributeNS(null, SVG_TRANSFORM_ATTRIBUTE); 1.11 +6 -1 xml-batik/sources/org/apache/batik/bridge/SVGGElementBridge.java Index: SVGGElementBridge.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGGElementBridge.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- SVGGElementBridge.java 2001/05/02 14:34:01 1.10 +++ SVGGElementBridge.java 2001/11/13 15:20:58 1.11 @@ -21,7 +21,7 @@ * Bridge class for the <g> element. * * @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a> - * @version $Id: SVGGElementBridge.java,v 1.10 2001/05/02 14:34:01 tkormann Exp $ + * @version $Id: SVGGElementBridge.java,v 1.11 2001/11/13 15:20:58 tkormann Exp $ */ public class SVGGElementBridge extends AbstractGraphicsNodeBridge { @@ -45,6 +45,11 @@ * @return a graphics node that represents the specified element */ public GraphicsNode createGraphicsNode(BridgeContext ctx, Element e) { + // 'requiredFeatures', 'requiredExtensions' and 'systemLanguage' + if (!SVGUtilities.matchUserAgent(e, ctx.getUserAgent())) { + return null; + } + CompositeGraphicsNode gn = (CompositeGraphicsNode)super.createGraphicsNode(ctx, e); 1.30 +5 -1 xml-batik/sources/org/apache/batik/bridge/SVGImageElementBridge.java Index: SVGImageElementBridge.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGImageElementBridge.java,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- SVGImageElementBridge.java 2001/10/09 22:17:10 1.29 +++ SVGImageElementBridge.java 2001/11/13 15:20:58 1.30 @@ -45,7 +45,7 @@ * Bridge class for the <image> element. * * @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a> - * @version $Id: SVGImageElementBridge.java,v 1.29 2001/10/09 22:17:10 deweese Exp $ + * @version $Id: SVGImageElementBridge.java,v 1.30 2001/11/13 15:20:58 tkormann Exp $ */ public class SVGImageElementBridge extends AbstractGraphicsNodeBridge { @@ -70,6 +70,10 @@ * @return a graphics node that represents the specified element */ public GraphicsNode createGraphicsNode(BridgeContext ctx, Element e) { + // 'requiredFeatures', 'requiredExtensions' and 'systemLanguage' + if (!SVGUtilities.matchUserAgent(e, ctx.getUserAgent())) { + return null; + } ImageNode imageNode = (ImageNode)super.createGraphicsNode(ctx, e); 1.18 +6 -1 xml-batik/sources/org/apache/batik/bridge/SVGSVGElementBridge.java Index: SVGSVGElementBridge.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGSVGElementBridge.java,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- SVGSVGElementBridge.java 2001/09/18 21:18:59 1.17 +++ SVGSVGElementBridge.java 2001/11/13 15:20:58 1.18 @@ -29,7 +29,7 @@ * Bridge class for the <svg> element. * * @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a> - * @version $Id: SVGSVGElementBridge.java,v 1.17 2001/09/18 21:18:59 deweese Exp $ + * @version $Id: SVGSVGElementBridge.java,v 1.18 2001/11/13 15:20:58 tkormann Exp $ */ public class SVGSVGElementBridge extends AbstractSVGBridge implements GraphicsNodeBridge, ErrorConstants { @@ -54,6 +54,11 @@ * @return a graphics node that represents the specified element */ public GraphicsNode createGraphicsNode(BridgeContext ctx, Element e) { + // 'requiredFeatures', 'requiredExtensions' and 'systemLanguage' + if (!SVGUtilities.matchUserAgent(e, ctx.getUserAgent())) { + return null; + } + CanvasGraphicsNode gn = new CanvasGraphicsNode(); UnitProcessor.Context uctx = UnitProcessor.createContext(ctx, e); 1.12 +4 -1 xml-batik/sources/org/apache/batik/bridge/SVGShapeElementBridge.java Index: SVGShapeElementBridge.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGShapeElementBridge.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- SVGShapeElementBridge.java 2001/09/18 09:23:39 1.11 +++ SVGShapeElementBridge.java 2001/11/13 15:20:58 1.12 @@ -21,7 +21,7 @@ * The base bridge class for shapes. Subclasses bridge <tt>ShapeNode</tt>. * * @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a> - * @version $Id: SVGShapeElementBridge.java,v 1.11 2001/09/18 09:23:39 tkormann Exp $ + * @version $Id: SVGShapeElementBridge.java,v 1.12 2001/11/13 15:20:58 tkormann Exp $ */ public abstract class SVGShapeElementBridge extends AbstractGraphicsNodeBridge { @@ -40,6 +40,9 @@ */ public GraphicsNode createGraphicsNode(BridgeContext ctx, Element e) { ShapeNode shapeNode = (ShapeNode)super.createGraphicsNode(ctx, e); + if (shapeNode == null) { + return null; + } // delegates to subclasses the shape construction buildShape(ctx, e, shapeNode); if (shapeNode.getShape() == null) { 1.40 +5 -1 xml-batik/sources/org/apache/batik/bridge/SVGTextElementBridge.java Index: SVGTextElementBridge.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGTextElementBridge.java,v retrieving revision 1.39 retrieving revision 1.40 diff -u -r1.39 -r1.40 --- SVGTextElementBridge.java 2001/11/13 10:35:24 1.39 +++ SVGTextElementBridge.java 2001/11/13 15:20:58 1.40 @@ -56,7 +56,7 @@ * Bridge class for the <text> element. * * @author <a href="[EMAIL PROTECTED]>Bill Haneman</a> - * @version $Id: SVGTextElementBridge.java,v 1.39 2001/11/13 10:35:24 tkormann Exp $ + * @version $Id: SVGTextElementBridge.java,v 1.40 2001/11/13 15:20:58 tkormann Exp $ */ public class SVGTextElementBridge extends AbstractSVGBridge implements GraphicsNodeBridge, ErrorConstants { @@ -82,6 +82,10 @@ * @return a graphics node that represents the specified element */ public GraphicsNode createGraphicsNode(BridgeContext ctx, Element e) { + // 'requiredFeatures', 'requiredExtensions' and 'systemLanguage' + if (!SVGUtilities.matchUserAgent(e, ctx.getUserAgent())) { + return null; + } TextNode node = new TextNode(); // specify the text painter to use if one has been provided in the 1.13 +5 -1 xml-batik/sources/org/apache/batik/bridge/SVGUseElementBridge.java Index: SVGUseElementBridge.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGUseElementBridge.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- SVGUseElementBridge.java 2001/10/09 22:17:10 1.12 +++ SVGUseElementBridge.java 2001/11/13 15:20:58 1.13 @@ -33,7 +33,7 @@ * Bridge class for the <use> element. * * @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a> - * @version $Id: SVGUseElementBridge.java,v 1.12 2001/10/09 22:17:10 deweese Exp $ + * @version $Id: SVGUseElementBridge.java,v 1.13 2001/11/13 15:20:58 tkormann Exp $ */ public class SVGUseElementBridge extends AbstractSVGBridge implements GraphicsNodeBridge, ErrorConstants { @@ -58,6 +58,10 @@ * @return a graphics node that represents the specified element */ public GraphicsNode createGraphicsNode(BridgeContext ctx, Element e) { + // 'requiredFeatures', 'requiredExtensions' and 'systemLanguage' + if (!SVGUtilities.matchUserAgent(e, ctx.getUserAgent())) { + return null; + } // get the referenced element String uri = XLinkSupport.getXLinkHref(e);
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]