Hi Thomas. I have a patch here for your consideration that adds a function to the BridgeExtension interface that returns a true/false if a given element is dynamic. This is so that the BaseScriptingEnvironment.isDynamicDocument method can return true if an extension element's presence should cause a document to be dynamic.
This is useful for my project, as it would let me not modify BaseScriptingEnvironment and keep all my code as an extension. Thanks, Cameron -- Cameron McCormack | Web: http://mcc.id.au/ | ICQ: 26955922
Index: sources/org/apache/batik/bridge/BaseScriptingEnvironment.java =================================================================== RCS file: /home/cvspublic/xml-batik/sources/org/apache/batik/bridge/BaseScriptingEnvironment.java,v retrieving revision 1.27 diff -u -r1.27 BaseScriptingEnvironment.java --- sources/org/apache/batik/bridge/BaseScriptingEnvironment.java 9 Aug 2003 16:58:37 -0000 1.27 +++ sources/org/apache/batik/bridge/BaseScriptingEnvironment.java 10 Feb 2004 02:28:40 -0000 @@ -57,6 +57,8 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.HashSet; +import java.util.Iterator; +import java.util.List; import java.util.Set; import java.util.jar.Manifest; @@ -144,14 +146,15 @@ * Tells whether the given SVG element is dynamic. */ public static boolean isDynamicElement(Element elt) { - if (SVGConstants.SVG_NAMESPACE_URI.equals(elt.getNamespaceURI())) { - String name = elt.getLocalName(); - if (name.equals(SVGConstants.SVG_SCRIPT_TAG)) { - return true; - } - if (name.startsWith("animate") || name.equals("set")) { + List bridgeExtensions = BridgeContext.getBridgeExtensions(); + Iterator i = bridgeExtensions.iterator(); + while (i.hasNext()) { + BridgeExtension bridgeExtension = (BridgeExtension) i.next(); + if (bridgeExtension.isDynamicElement(elt)) { return true; } + } + if (SVGConstants.SVG_NAMESPACE_URI.equals(elt.getNamespaceURI())) { if (elt.getAttributeNS (null, SVGConstants.SVG_ONKEYUP_ATTRIBUTE).length() > 0) { return true; @@ -208,14 +211,14 @@ (null, SVGConstants.SVG_ONMOUSEUP_ATTRIBUTE).length() > 0) { return true; } + } - for (Node n = elt.getFirstChild(); - n != null; - n = n.getNextSibling()) { - if (n.getNodeType() == Node.ELEMENT_NODE) { - if (isDynamicElement((Element)n)) { - return true; - } + for (Node n = elt.getFirstChild(); + n != null; + n = n.getNextSibling()) { + if (n.getNodeType() == Node.ELEMENT_NODE) { + if (isDynamicElement((Element)n)) { + return true; } } } Index: sources/org/apache/batik/bridge/BridgeExtension.java =================================================================== RCS file: /home/cvspublic/xml-batik/sources/org/apache/batik/bridge/BridgeExtension.java,v retrieving revision 1.3 diff -u -r1.3 BridgeExtension.java --- sources/org/apache/batik/bridge/BridgeExtension.java 8 Aug 2003 11:38:50 -0000 1.3 +++ sources/org/apache/batik/bridge/BridgeExtension.java 10 Feb 2004 02:28:40 -0000 @@ -52,6 +52,8 @@ import java.util.Iterator; +import org.w3c.dom.Element; + /** * This is a Service interface for classes that want to extend the * functionality of the Bridge, to support new tags in the rendering tree. @@ -109,4 +111,13 @@ * @param ctx The BridgeContext instance to be updated */ public void registerTags(BridgeContext ctx); + + /** + * Whether the presence of the specified element should cause + * the document to be dynamic. If this element isn't handled + * by this BridgeExtension, just return false. + * + * @param e The element to check. + */ + public boolean isDynamicElement(Element e); } Index: sources/org/apache/batik/bridge/SVGBridgeExtension.java =================================================================== RCS file: /home/cvspublic/xml-batik/sources/org/apache/batik/bridge/SVGBridgeExtension.java,v retrieving revision 1.8 diff -u -r1.8 SVGBridgeExtension.java --- sources/org/apache/batik/bridge/SVGBridgeExtension.java 8 Aug 2003 11:38:51 -0000 1.8 +++ sources/org/apache/batik/bridge/SVGBridgeExtension.java 10 Feb 2004 02:28:40 -0000 @@ -53,6 +53,9 @@ import java.util.Collections; import java.util.Iterator; +import org.apache.batik.util.SVGConstants; +import org.w3c.dom.Element; + /** * This is a Service interface for classes that want to extend the * functionality of the Bridge, to support new tags in the rendering tree. @@ -191,5 +194,26 @@ ctx.putBridge(new SVGUseElementBridge()); ctx.putBridge(new SVGVKernElementBridge()); + } + + /** + * Whether the presence of the specified element should cause + * the document to be dynamic. If this element isn't handled + * by this BridgeExtension, just return false. + * + * @param e The element to check. + */ + public boolean isDynamicElement(Element e) { + String ns = e.getNamespaceURI(); + if (!SVGConstants.SVG_NAMESPACE_URI.equals(ns)) { + return false; + } + String ln = e.getLocalName(); + if (ln.equals(SVGConstants.SVG_SCRIPT_TAG) + || ln.startsWith("animate") + || ln.equals("set")) { + return true; + } + return false; } } Index: sources/org/apache/batik/extension/svg/BatikBridgeExtension.java =================================================================== RCS file: /home/cvspublic/xml-batik/sources/org/apache/batik/extension/svg/BatikBridgeExtension.java,v retrieving revision 1.7 diff -u -r1.7 BatikBridgeExtension.java --- sources/org/apache/batik/extension/svg/BatikBridgeExtension.java 8 Aug 2003 11:39:10 -0000 1.7 +++ sources/org/apache/batik/extension/svg/BatikBridgeExtension.java 10 Feb 2004 02:28:40 -0000 @@ -56,6 +56,7 @@ import org.apache.batik.bridge.BridgeContext; import org.apache.batik.bridge.BridgeExtension; +import org.w3c.dom.Element; /** * This is a Service interface for classes that want to extend the @@ -142,5 +143,16 @@ ctx.putBridge(new SolidColorBridge()); ctx.putBridge(new ColorSwitchBridge()); ctx.putBridge(new SVGFlowTextElementBridge()); + } + + /** + * Whether the presence of the specified element should cause + * the document to be dynamic. If this element isn't handled + * by this BridgeExtension, just return false. + * + * @param e The element to check. + */ + public boolean isDynamicElement(Element e) { + return false; } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]