tkormann    02/03/06 09:14:45

  Modified:    sources/org/apache/batik/bridge ScriptingEnvironment.java
                        UpdateManager.java
               sources/org/apache/batik/transcoder/image
                        ImageTranscoder.java
  Added:       sources/org/apache/batik/bridge
                        BaseScriptingEnvironment.java
  Log:
  ImageTranscoder can now fire an SVG onload event on demand if the document
  is dynamic
  
  Revision  Changes    Path
  1.11      +11 -316   
xml-batik/sources/org/apache/batik/bridge/ScriptingEnvironment.java
  
  Index: ScriptingEnvironment.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/bridge/ScriptingEnvironment.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- ScriptingEnvironment.java 25 Feb 2002 15:14:24 -0000      1.10
  +++ ScriptingEnvironment.java 6 Mar 2002 17:14:44 -0000       1.11
  @@ -8,161 +8,31 @@
   
   package org.apache.batik.bridge;
   
  -import java.io.IOException;
  -import java.io.InputStreamReader;
  -import java.io.Reader;
  -import java.io.StringReader;
  -
  -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.Timer;
   import java.util.TimerTask;
   
  -import org.apache.batik.dom.svg.SVGOMDocument;
  -
  -import org.apache.batik.dom.util.XLinkSupport;
  -
   import org.apache.batik.script.Interpreter;
   import org.apache.batik.script.InterpreterException;
  -import org.apache.batik.script.InterpreterPool;
   
   import org.apache.batik.util.RunnableQueue;
  -import org.apache.batik.util.SVGConstants;
   
   import org.w3c.dom.Document;
  -import org.w3c.dom.Element;
  -import org.w3c.dom.Node;
  -import org.w3c.dom.NodeList;
   
  -import org.w3c.dom.events.DocumentEvent;
   import org.w3c.dom.events.Event;
   import org.w3c.dom.events.EventListener;
  -import org.w3c.dom.events.EventTarget;
  -
  -import org.w3c.dom.svg.SVGSVGElement;
   
   /**
    * This class contains the informations needed by the SVG scripting.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: ScriptingEnvironment.java,v 1.10 2002/02/25 15:14:24 hillion Exp $
  + * @version $Id: ScriptingEnvironment.java,v 1.11 2002/03/06 17:14:44 tkormann Exp $
    */
  -public class ScriptingEnvironment {
  -
  -    /**
  -     * Tells whether the given SVG document is dynamic.
  -     */
  -    public static boolean isDynamicDocument(Document doc) {
  -        Element elt = doc.getDocumentElement();
  -        if (elt.getNamespaceURI().equals(SVGConstants.SVG_NAMESPACE_URI)) {
  -            if (elt.getAttributeNS
  -                (null, SVGConstants.SVG_ONABORT_ATTRIBUTE).length() > 0) {
  -                return true;
  -            }
  -            if (elt.getAttributeNS
  -                (null, SVGConstants.SVG_ONERROR_ATTRIBUTE).length() > 0) {
  -                return true;
  -            }
  -            if (elt.getAttributeNS
  -                (null, SVGConstants.SVG_ONRESIZE_ATTRIBUTE).length() > 0) {
  -                return true;
  -            }
  -            if (elt.getAttributeNS
  -                (null, SVGConstants.SVG_ONUNLOAD_ATTRIBUTE).length() > 0) {
  -                return true;
  -            }
  -            if (elt.getAttributeNS
  -                (null, SVGConstants.SVG_ONSCROLL_ATTRIBUTE).length() > 0) {
  -                return true;
  -            }
  -            if (elt.getAttributeNS
  -                (null, SVGConstants.SVG_ONZOOM_ATTRIBUTE).length() > 0) {
  -                return true;
  -            }
  -            return isDynamicElement(doc.getDocumentElement());
  -        }
  -        return false;
  -    }
  -    
  -    /**
  -     * Tells whether the given SVG element is dynamic.
  -     */
  -    public static boolean isDynamicElement(Element elt) {
  -        if (elt.getNamespaceURI().equals(SVGConstants.SVG_NAMESPACE_URI)) {
  -            String name = elt.getLocalName();
  -            if (name.equals(SVGConstants.SVG_SCRIPT_TAG)) {
  -                return true;
  -            }
  -            if (name.startsWith("animate") || name.equals("set")) {
  -                return true;
  -            }
  -            if (elt.getAttributeNS
  -                (null, SVGConstants.SVG_ONERROR_ATTRIBUTE).length() > 0) {
  -                return true;
  -            }
  -            if (elt.getAttributeNS
  -                (null, SVGConstants.SVG_ONACTIVATE_ATTRIBUTE).length() > 0) {
  -                return true;
  -            }
  -            if (elt.getAttributeNS
  -                (null, SVGConstants.SVG_ONCLICK_ATTRIBUTE).length() > 0) {
  -                return true;
  -            }
  -            if (elt.getAttributeNS
  -                (null, SVGConstants.SVG_ONFOCUSIN_ATTRIBUTE).length() > 0) {
  -                return true;
  -            }
  -            if (elt.getAttributeNS
  -                (null, SVGConstants.SVG_ONFOCUSOUT_ATTRIBUTE).length() > 0) {
  -                return true;
  -            }
  -            if (elt.getAttributeNS
  -                (null, SVGConstants.SVG_ONMOUSEDOWN_ATTRIBUTE).length() > 0) {
  -                return true;
  -            }
  -            if (elt.getAttributeNS
  -                (null, SVGConstants.SVG_ONMOUSEMOVE_ATTRIBUTE).length() > 0) {
  -                return true;
  -            }
  -            if (elt.getAttributeNS
  -                (null, SVGConstants.SVG_ONMOUSEOUT_ATTRIBUTE).length() > 0) {
  -                return true;
  -            }
  -            if (elt.getAttributeNS
  -                (null, SVGConstants.SVG_ONMOUSEOVER_ATTRIBUTE).length() > 0) {
  -                return true;
  -            }
  -            if (elt.getAttributeNS
  -                (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;
  -                    }
  -                }
  -            }
  -        }
  -        return false;
  -    }
  -    
  -
  -    private final static String EVENT_NAME = "event";
  -    private final static String ALTERNATE_EVENT_NAME = "evt";
  +public class ScriptingEnvironment extends BaseScriptingEnvironment {
   
       /**
        * The timer for periodic or delayed tasks.
        */
  -    Timer timer = new Timer(true);
  +    protected Timer timer = new Timer(true);
   
       /**
        * The update manager.
  @@ -170,64 +40,29 @@
       protected UpdateManager updateManager;
   
       /**
  -     * The repaint manager.
  -     */
  -    protected RepaintManager repaintManager;
  -
  -    /**
        * The update runnable queue.
        */
       protected RunnableQueue updateRunnableQueue;
   
       /**
  -     * The bridge context.
  -     */
  -    protected BridgeContext bridgeContext;
  -
  -    /**
  -     * The user-agent.
  -     */
  -    protected UserAgent userAgent;
  -    
  -    /**
  -     * The document to manage.
  -     */
  -    protected Document document;
  -
  -    /**
        * Creates a new ScriptingEnvironment.
  -     * @param um The update manager.
  +     * @param ctx the bridge context
        */
  -    public ScriptingEnvironment(UpdateManager um) {
  -        updateManager = um;
  -        bridgeContext = updateManager.getBridgeContext();
  -        userAgent     = bridgeContext.getUserAgent();
  -        document      = updateManager.getDocument();
  -        updateRunnableQueue = um.getUpdateRunnableQueue();
  +    public ScriptingEnvironment(BridgeContext ctx) {
  +        super(ctx);
  +        updateManager = ctx.getUpdateManager();
  +        updateRunnableQueue = updateManager.getUpdateRunnableQueue();
       }
   
       /**
        * Creates a new Window object.
        */
  -    public Window createWindow(Interpreter interp, String lang) {
  +    public org.apache.batik.script.Window createWindow
  +        (Interpreter interp, String lang) {
           return new Window(interp, lang);
       }
   
       /**
  -     * Creates a new Window object.
  -     */
  -    public Window createWindow() {
  -        return new Window(null, null);
  -    }
  -
  -    /**
  -     * Initializes the environment of the given interpreter.
  -     */
  -    public void initializeEnvironment(Interpreter interp, String lang) {
  -        interp.bindObject("window", new Window(interp, lang));
  -    }
  -
  -    /**
        * Runs an event handler.
        */
       public void runEventHandler(String script, Event evt, String lang) {
  @@ -258,146 +93,6 @@
       }
   
       /**
  -     * Loads the scripts contained in the <script> elements.
  -     */
  -    public void loadScripts() {
  -        NodeList scripts = document.getElementsByTagNameNS
  -            (SVGConstants.SVG_NAMESPACE_URI, SVGConstants.SVG_SCRIPT_TAG);
  -        int len = scripts.getLength();
  -
  -        if (len == 0) {
  -            return;
  -        }
  -
  -        Set languages = new HashSet();
  -
  -        for (int i = 0; i < len; i++) {
  -            Element script = (Element)scripts.item(i);
  -            String type = script.getAttributeNS
  -                (null, SVGConstants.SVG_TYPE_ATTRIBUTE);
  -            Interpreter interpreter = bridgeContext.getInterpreter(type);
  -
  -            if (interpreter == null) {
  -                UserAgent ua = bridgeContext.getUserAgent();
  -                if (ua != null) {
  -                    ua.displayError(new Exception("Unknown language: "+type));
  -                }
  -                return;
  -            }
  -
  -            if (!languages.contains(type)) {
  -                languages.add(type);
  -                initializeEnvironment(interpreter, type);
  -            }
  -
  -            try {
  -                String href = XLinkSupport.getXLinkHref(script);
  -                Reader reader;
  -                if (href.length() > 0) {
  -                    // External script.
  -                    URL url = new URL(((SVGOMDocument)document).getURLObject(),
  -                                      href);
  -                    reader = new InputStreamReader(url.openStream());
  -                } else {
  -                    // Inline script.
  -                    Node n = script.getFirstChild();
  -                    if (n != null) {
  -                        StringBuffer sb = new StringBuffer();
  -                        while (n != null) {
  -                            sb.append(n.getNodeValue());
  -                            n = n.getNextSibling();
  -                        }
  -                        reader = new StringReader(sb.toString());
  -                    } else {
  -                        continue;
  -                    }
  -                }
  -
  -                interpreter.evaluate(reader);
  -
  -            } catch (IOException e) {
  -                if (userAgent != null) {
  -                    userAgent.displayError(e);
  -                }
  -                return;
  -            } catch (InterpreterException e) {
  -                handleInterpreterException(e);
  -                return;
  -            }
  -        }
  -    }
  -
  -    /**
  -     * Recursively dispatch the SVG 'onload' event.
  -     */
  -    public void dispatchSVGLoadEvent() {
  -        SVGSVGElement root =
  -            (SVGSVGElement)document.getDocumentElement();
  -        String lang = root.getContentScriptType();
  -        Interpreter interp = bridgeContext.getInterpreter(lang);
  -        if (interp == null) {
  -            UserAgent ua = bridgeContext.getUserAgent();
  -            if (ua != null) {
  -                ua.displayError(new Exception("Unknown language: " + lang));
  -            }
  -            return;
  -        }
  -        dispatchSVGLoad(root, interp);
  -    }
  -
  -    /**
  -     * Auxiliary method for dispatchSVGLoad.
  -     */
  -    protected void dispatchSVGLoad(Element elt, final Interpreter interp) {
  -        for (Node n = elt.getFirstChild();
  -             n != null;
  -             n = n.getNextSibling()) {
  -            if (n.getNodeType() == n.ELEMENT_NODE) {
  -                dispatchSVGLoad((Element)n, interp);
  -            }
  -        }
  -
  -        Event ev;
  -        DocumentEvent de = (DocumentEvent)elt.getOwnerDocument();
  -        ev = de.createEvent("SVGEvents");
  -        ev.initEvent("SVGLoad", false, false);
  -        EventTarget t = (EventTarget)elt;
  -
  -        final String s =
  -            elt.getAttributeNS(null, SVGConstants.SVG_ONLOAD_ATTRIBUTE);
  -        EventListener l = null;
  -        if (s.length() > 0) {
  -            l = new EventListener() {
  -                    public void handleEvent(Event evt) {
  -                        try {
  -                            interp.bindObject(EVENT_NAME, evt);
  -                            interp.bindObject(ALTERNATE_EVENT_NAME, evt);
  -                            interp.evaluate(new StringReader(s));
  -                        } catch (IOException io) {
  -                        } catch (InterpreterException e) {
  -                            handleInterpreterException(e);
  -                        }
  -                    }
  -                };
  -            t.addEventListener("SVGLoad", l, false);
  -        }
  -        t.dispatchEvent(ev);
  -        if (s.length() > 0) {
  -            t.removeEventListener("SVGLoad", l, false);
  -        }
  -    }
  -
  -    /**
  -     * Handles the given exception.
  -     */
  -    protected void handleInterpreterException(InterpreterException ie) {
  -        if (userAgent != null) {
  -            Exception ex = ie.getException();
  -            userAgent.displayError((ex == null) ? ie : ex);
  -        }
  -    }
  -
  -    /**
        * To wrap an event listener.
        */
       protected class EventListenerWrapper implements EventListener {
  @@ -493,7 +188,7 @@
       /**
        * Represents the window object of this environment.
        */
  -    public class Window implements org.apache.batik.script.Window {
  +    protected class Window implements org.apache.batik.script.Window {
   
           /**
            * The associated interpreter.
  
  
  
  1.15      +3 -3      xml-batik/sources/org/apache/batik/bridge/UpdateManager.java
  
  Index: UpdateManager.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/UpdateManager.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- UpdateManager.java        6 Mar 2002 13:56:25 -0000       1.14
  +++ UpdateManager.java        6 Mar 2002 17:14:44 -0000       1.15
  @@ -41,7 +41,7 @@
    * This class provides features to manage the update of an SVG document.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: UpdateManager.java,v 1.14 2002/03/06 13:56:25 hillion Exp $
  + * @version $Id: UpdateManager.java,v 1.15 2002/03/06 17:14:44 tkormann Exp $
    */
   public class UpdateManager implements RunnableQueue.RunHandler {
   
  @@ -49,7 +49,7 @@
        * Tells whether the given SVG document is dynamic.
        */
       public static boolean isDynamicDocument(Document doc) {
  -        return ScriptingEnvironment.isDynamicDocument(doc);
  +        return BaseScriptingEnvironment.isDynamicDocument(doc);
       }
       
       /**
  @@ -126,7 +126,7 @@
   
           graphicsNode = gn;
   
  -        scriptingEnvironment = new ScriptingEnvironment(this);
  +        scriptingEnvironment = new ScriptingEnvironment(ctx);
       }
   
       /**
  
  
  
  1.1                  
xml-batik/sources/org/apache/batik/bridge/BaseScriptingEnvironment.java
  
  Index: BaseScriptingEnvironment.java
  ===================================================================
  /*****************************************************************************
   * 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.                                                         *
   *****************************************************************************/
  
  package org.apache.batik.bridge;
  
  import java.io.IOException;
  import java.io.InputStreamReader;
  import java.io.Reader;
  import java.io.StringReader;
  
  import java.net.URL;
  
  import java.util.HashSet;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Set;
  
  import org.apache.batik.dom.svg.SVGOMDocument;
  
  import org.apache.batik.dom.util.XLinkSupport;
  
  import org.apache.batik.script.Interpreter;
  import org.apache.batik.script.InterpreterException;
  
  import org.apache.batik.util.SVGConstants;
  
  import org.w3c.dom.Document;
  import org.w3c.dom.Element;
  import org.w3c.dom.Node;
  import org.w3c.dom.NodeList;
  
  import org.w3c.dom.events.DocumentEvent;
  import org.w3c.dom.events.Event;
  import org.w3c.dom.events.EventListener;
  import org.w3c.dom.events.EventTarget;
  
  import org.w3c.dom.svg.SVGSVGElement;
  
  /**
   * This class is the base class for SVG scripting.
   *
   * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
   * @version $Id: BaseScriptingEnvironment.java,v 1.1 2002/03/06 17:14:44 tkormann 
Exp $
   */
  public class BaseScriptingEnvironment {
  
      /**
       * Tells whether the given SVG document is dynamic.
       */
      public static boolean isDynamicDocument(Document doc) {
          Element elt = doc.getDocumentElement();
          if (elt.getNamespaceURI().equals(SVGConstants.SVG_NAMESPACE_URI)) {
              if (elt.getAttributeNS
                  (null, SVGConstants.SVG_ONABORT_ATTRIBUTE).length() > 0) {
                  return true;
              }
              if (elt.getAttributeNS
                  (null, SVGConstants.SVG_ONERROR_ATTRIBUTE).length() > 0) {
                  return true;
              }
              if (elt.getAttributeNS
                  (null, SVGConstants.SVG_ONRESIZE_ATTRIBUTE).length() > 0) {
                  return true;
              }
              if (elt.getAttributeNS
                  (null, SVGConstants.SVG_ONUNLOAD_ATTRIBUTE).length() > 0) {
                  return true;
              }
              if (elt.getAttributeNS
                  (null, SVGConstants.SVG_ONSCROLL_ATTRIBUTE).length() > 0) {
                  return true;
              }
              if (elt.getAttributeNS
                  (null, SVGConstants.SVG_ONZOOM_ATTRIBUTE).length() > 0) {
                  return true;
              }
              return isDynamicElement(doc.getDocumentElement());
          }
          return false;
      }
      
      /**
       * Tells whether the given SVG element is dynamic.
       */
      public static boolean isDynamicElement(Element elt) {
          if (elt.getNamespaceURI().equals(SVGConstants.SVG_NAMESPACE_URI)) {
              String name = elt.getLocalName();
              if (name.equals(SVGConstants.SVG_SCRIPT_TAG)) {
                  return true;
              }
              if (name.startsWith("animate") || name.equals("set")) {
                  return true;
              }
              if (elt.getAttributeNS
                  (null, SVGConstants.SVG_ONERROR_ATTRIBUTE).length() > 0) {
                  return true;
              }
              if (elt.getAttributeNS
                  (null, SVGConstants.SVG_ONACTIVATE_ATTRIBUTE).length() > 0) {
                  return true;
              }
              if (elt.getAttributeNS
                  (null, SVGConstants.SVG_ONCLICK_ATTRIBUTE).length() > 0) {
                  return true;
              }
              if (elt.getAttributeNS
                  (null, SVGConstants.SVG_ONFOCUSIN_ATTRIBUTE).length() > 0) {
                  return true;
              }
              if (elt.getAttributeNS
                  (null, SVGConstants.SVG_ONFOCUSOUT_ATTRIBUTE).length() > 0) {
                  return true;
              }
              if (elt.getAttributeNS
                  (null, SVGConstants.SVG_ONMOUSEDOWN_ATTRIBUTE).length() > 0) {
                  return true;
              }
              if (elt.getAttributeNS
                  (null, SVGConstants.SVG_ONMOUSEMOVE_ATTRIBUTE).length() > 0) {
                  return true;
              }
              if (elt.getAttributeNS
                  (null, SVGConstants.SVG_ONMOUSEOUT_ATTRIBUTE).length() > 0) {
                  return true;
              }
              if (elt.getAttributeNS
                  (null, SVGConstants.SVG_ONMOUSEOVER_ATTRIBUTE).length() > 0) {
                  return true;
              }
              if (elt.getAttributeNS
                  (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;
                      }
                  }
              }
          }
          return false;
      }
      
  
      protected final static String EVENT_NAME = "event";
      protected final static String ALTERNATE_EVENT_NAME = "evt";
  
      /**
       * The bridge context.
       */
      protected BridgeContext bridgeContext;
  
      /**
       * The user-agent.
       */
      protected UserAgent userAgent;
      
      /**
       * The document to manage.
       */
      protected Document document;
  
      /**
       * Creates a new BaseScriptingEnvironment.
       * @param ctx the bridge context
       */
      public BaseScriptingEnvironment(BridgeContext ctx) {
          bridgeContext = ctx;
          document = ctx.getDocument();
          userAgent     = bridgeContext.getUserAgent();
      }
  
      /**
       * Creates a new Window object.
       */
      public org.apache.batik.script.Window createWindow
          (Interpreter interp, String lang) {
          return new Window(interp, lang);
      }
  
      /**
       * Creates a new Window object.
       */
      public org.apache.batik.script.Window createWindow() {
          return createWindow(null, null);
      }
  
      /**
       * Initializes the environment of the given interpreter.
       */
      public void initializeEnvironment(Interpreter interp, String lang) {
          interp.bindObject("window", createWindow(interp, lang));
      }
  
      /**
       * Loads the scripts contained in the <script> elements.
       */
      public void loadScripts() {
          NodeList scripts = document.getElementsByTagNameNS
              (SVGConstants.SVG_NAMESPACE_URI, SVGConstants.SVG_SCRIPT_TAG);
          int len = scripts.getLength();
  
          if (len == 0) {
              return;
          }
  
          Set languages = new HashSet();
  
          for (int i = 0; i < len; i++) {
              Element script = (Element)scripts.item(i);
              String type = script.getAttributeNS
                  (null, SVGConstants.SVG_TYPE_ATTRIBUTE);
              Interpreter interpreter = bridgeContext.getInterpreter(type);
  
              if (interpreter == null) {
                  UserAgent ua = bridgeContext.getUserAgent();
                  if (ua != null) {
                      ua.displayError(new Exception("Unknown language: "+type));
                  }
                  return;
              }
  
              if (!languages.contains(type)) {
                  languages.add(type);
                  initializeEnvironment(interpreter, type);
              }
  
              try {
                  String href = XLinkSupport.getXLinkHref(script);
                  Reader reader;
                  if (href.length() > 0) {
                      // External script.
                      URL url = new URL(((SVGOMDocument)document).getURLObject(),
                                        href);
                      reader = new InputStreamReader(url.openStream());
                  } else {
                      // Inline script.
                      Node n = script.getFirstChild();
                      if (n != null) {
                          StringBuffer sb = new StringBuffer();
                          while (n != null) {
                              sb.append(n.getNodeValue());
                              n = n.getNextSibling();
                          }
                          reader = new StringReader(sb.toString());
                      } else {
                          continue;
                      }
                  }
  
                  interpreter.evaluate(reader);
  
              } catch (IOException e) {
                  if (userAgent != null) {
                      userAgent.displayError(e);
                  }
                  return;
              } catch (InterpreterException e) {
                  handleInterpreterException(e);
                  return;
              }
          }
      }
  
      /**
       * Recursively dispatch the SVG 'onload' event.
       */
      public void dispatchSVGLoadEvent() {
          SVGSVGElement root =
              (SVGSVGElement)document.getDocumentElement();
          String lang = root.getContentScriptType();
          Interpreter interp = bridgeContext.getInterpreter(lang);
          if (interp == null) {
              UserAgent ua = bridgeContext.getUserAgent();
              if (ua != null) {
                  ua.displayError(new Exception("Unknown language: " + lang));
              }
              return;
          }
          dispatchSVGLoad(root, interp);
      }
  
      /**
       * Auxiliary method for dispatchSVGLoad.
       */
      protected void dispatchSVGLoad(Element elt, final Interpreter interp) {
          for (Node n = elt.getFirstChild();
               n != null;
               n = n.getNextSibling()) {
              if (n.getNodeType() == n.ELEMENT_NODE) {
                  dispatchSVGLoad((Element)n, interp);
              }
          }
  
          Event ev;
          DocumentEvent de = (DocumentEvent)elt.getOwnerDocument();
          ev = de.createEvent("SVGEvents");
          ev.initEvent("SVGLoad", false, false);
          EventTarget t = (EventTarget)elt;
  
          final String s =
              elt.getAttributeNS(null, SVGConstants.SVG_ONLOAD_ATTRIBUTE);
          EventListener l = null;
          if (s.length() > 0) {
              l = new EventListener() {
                      public void handleEvent(Event evt) {
                          try {
                              interp.bindObject(EVENT_NAME, evt);
                              interp.bindObject(ALTERNATE_EVENT_NAME, evt);
                              interp.evaluate(new StringReader(s));
                          } catch (IOException io) {
                          } catch (InterpreterException e) {
                              handleInterpreterException(e);
                          }
                      }
                  };
              t.addEventListener("SVGLoad", l, false);
          }
          t.dispatchEvent(ev);
          if (s.length() > 0) {
              t.removeEventListener("SVGLoad", l, false);
          }
      }
  
      /**
       * Handles the given exception.
       */
      protected void handleInterpreterException(InterpreterException ie) {
          if (userAgent != null) {
              Exception ex = ie.getException();
              userAgent.displayError((ex == null) ? ie : ex);
          }
      }
  
      /**
       * Represents the window object of this environment.
       */
      protected class Window implements org.apache.batik.script.Window {
  
          /**
           * The associated interpreter.
           */
          protected Interpreter interpreter;
  
          /**
           * The associated language.
           */
          protected String language;
  
          /**
           * Creates a new Window.
           */
          public Window(Interpreter interp, String lang) {
              interpreter = interp;
              language = lang;
          }
  
          /**
           * Implements {@link
           * org.apache.batik.script.Window#setInterval(String,long)}.
           */
          public Object setInterval(final String script, long interval) {
              return null;
          }
  
          /**
           * Implements {@link
           * org.apache.batik.script.Window#setInterval(Runnable,long)}.
           */
          public Object setInterval(final Runnable r, long interval) {
              return null;
          }
  
          /**
           * Implements {@link
           * org.apache.batik.script.Window#clearInterval(Object)}.
           */
          public void clearInterval(Object interval) {
          }
  
          /**
           * Implements {@link
           * org.apache.batik.script.Window#setTimeout(String,long)}.
           */
          public Object setTimeout(final String script, long timeout) {
              return null;
          }
  
          /**
           * Implements {@link
           * org.apache.batik.script.Window#setTimeout(Runnable,long)}.
           */
          public Object setTimeout(final Runnable r, long timeout) {
              return null;
          }
  
          /**
           * Implements {@link
           * org.apache.batik.script.Window#clearTimeout(Object)}.
           */
          public void clearTimeout(Object timeout) {
          }
  
          /**
           * Displays an alert dialog box.
           */
          public void alert(String message) {
          }
  
          /**
           * Displays a confirm dialog box.
           */
          public boolean confirm(String message) {
              return false;
          }
  
          /**
           * Displays an input dialog box.
           */
          public String prompt(String message) {
              return null;
          }
  
          /**
           * Displays an input dialog box, given the default value.
           */
          public String prompt(String message, String defVal) {
              return null;
          }
  
          /**
           * Returns the associated interpreter.
           */
          public Interpreter getInterpreter() {
              return interpreter;
          }
  
      }
  }
  
  
  
  1.36      +41 -1     
xml-batik/sources/org/apache/batik/transcoder/image/ImageTranscoder.java
  
  Index: ImageTranscoder.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/transcoder/image/ImageTranscoder.java,v
  retrieving revision 1.35
  retrieving revision 1.36
  diff -u -r1.35 -r1.36
  --- ImageTranscoder.java      4 Mar 2002 08:38:43 -0000       1.35
  +++ ImageTranscoder.java      6 Mar 2002 17:14:45 -0000       1.36
  @@ -29,6 +29,7 @@
   import java.util.Iterator;
   import java.util.Set;
   
  +import org.apache.batik.bridge.BaseScriptingEnvironment;
   import org.apache.batik.bridge.BridgeContext;
   import org.apache.batik.bridge.BridgeException;
   import org.apache.batik.bridge.BridgeExtension;
  @@ -100,7 +101,7 @@
    * millimeter conversion factor.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: ImageTranscoder.java,v 1.35 2002/03/04 08:38:43 tkormann Exp $
  + * @version $Id: ImageTranscoder.java,v 1.36 2002/03/06 17:14:45 tkormann Exp $
    */
   public abstract class ImageTranscoder extends XMLAbstractTranscoder {
   
  @@ -119,6 +120,8 @@
                     ExtensibleSVGDOMImplementation.getDOMImplementation());
           hints.put(KEY_MEDIA,
                     "screen");
  +        hints.put(KEY_EXECUTE_ONLOAD, 
  +                  Boolean.FALSE);
       }
   
       /**
  @@ -156,9 +159,22 @@
           GVTBuilder builder = new GVTBuilder();
           ImageRendererFactory rendFactory = new ConcreteImageRendererFactory();
           BridgeContext ctx = new BridgeContext(userAgent);
  +        // flag that indicates if the document is dynamic
  +        boolean isDynamic = 
  +            (hints.containsKey(KEY_EXECUTE_ONLOAD) &&
  +             ((Boolean)hints.get(KEY_EXECUTE_ONLOAD)).booleanValue() &&
  +             BaseScriptingEnvironment.isDynamicDocument(svgDoc));
  +        ctx.setDynamic(isDynamic);
  +
           GraphicsNode gvtRoot;
           try {
               gvtRoot = builder.build(ctx, svgDoc);
  +            // dispatch an 'onload' event if needed
  +            if (ctx.isDynamic()) {
  +                BaseScriptingEnvironment se = new BaseScriptingEnvironment(ctx);
  +                se.loadScripts();
  +                se.dispatchSVGLoadEvent();
  +            }
           } catch (BridgeException ex) {
               throw new TranscoderException(ex);
           }
  @@ -497,6 +513,30 @@
       // --------------------------------------------------------------------
       // Keys definition
       // --------------------------------------------------------------------
  +
  +    /**
  +     * The 'onload' execution key.
  +     * <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="1">
  +     * <TR>
  +     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Key: </TH>
  +     * <TD VALIGN="TOP">KEY_EXECUTE_ONLOAD</TD></TR>
  +     * <TR>
  +     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Value: </TH>
  +     * <TD VALIGN="TOP">Boolean</TD></TR>
  +     * <TR>
  +     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Default: </TH>
  +     * <TD VALIGN="TOP">false</TD></TR>
  +     * <TR>
  +     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Required: </TH>
  +     * <TD VALIGN="TOP">No</TD></TR>
  +     * <TR>
  +     * <TH VALIGN="TOP" ALIGN="RIGHT"><P ALIGN="RIGHT">Description: </TH>
  +     * <TD VALIGN="TOP">Specify if scripts added on the 'onload' event 
  +     * attribute must be invoked.</TD></TR>
  +     * </TABLE> 
  +     */
  +    public static final TranscodingHints.Key KEY_EXECUTE_ONLOAD
  +        = new BooleanKey();
   
       /**
        * The image width key.
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to