You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-dev@xmlgraphics.apache.org by de...@apache.org on 2003/08/10 20:03:16 UTC

cvs commit: xml-batik/xdocs faq.xml

deweese     2003/08/10 11:03:16

  Modified:    .        .classpath build.xml
               samples/tests/spec/scripting security2.jar
               sources/org/apache/batik/css/engine CSSEngine.java
               sources/org/apache/batik/dom/svg SVGStylableElement.java
               sources/org/apache/batik/swing/svg JSVGComponent.java
               xdocs    faq.xml
  Added:       lib      LICENSE.xerces_2_5_0.txt xerces_2_5_0.jar
  Removed:     lib      LICENSE.xerces_2_3_0.txt xerces_2_3_0.jar
  Log:
  1) Switch to Xerces 2.5.0 to resove performance issue with attributes
     with large value fields (think data protocol images in xlink:href).
  2) Few minor improvements to the handling of URL's in CSS.
  3) Some documentation improvements/additions.
  
  Revision  Changes    Path
  1.2       +1 -1      xml-batik/.classpath
  
  Index: .classpath
  ===================================================================
  RCS file: /home/cvs/xml-batik/.classpath,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- .classpath	9 Aug 2003 16:58:44 -0000	1.1
  +++ .classpath	10 Aug 2003 18:03:15 -0000	1.2
  @@ -7,7 +7,7 @@
       <classpathentry kind="src" path="test-sources"/>
       <classpathentry kind="lib" path="lib/js.jar"/>
       <classpathentry kind="lib" path="lib/pdf-transcoder.jar"/>
  -    <classpathentry kind="lib" path="lib/xerces_2_3_0.jar"/>
  +    <classpathentry kind="lib" path="lib/xerces_2_5_0.jar"/>
       <classpathentry kind="lib" path="lib/xml-apis.jar"/>
       <classpathentry kind="src" path="resources"/>
       <classpathentry kind="src" path="test-resources"/>
  
  
  
  1.139     +2 -2      xml-batik/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/xml-batik/build.xml,v
  retrieving revision 1.138
  retrieving revision 1.139
  diff -u -r1.138 -r1.139
  --- build.xml	16 Jul 2003 00:46:49 -0000	1.138
  +++ build.xml	10 Aug 2003 18:03:15 -0000	1.139
  @@ -456,7 +456,7 @@
          including the XML parser -->
     <target name="bean" depends="compile, prepare-build">
       <mkdir dir="${build}/tmp"/>
  -    <unjar src="lib/xerces_2_3_0.jar" dest="${build}/tmp"/>
  +    <unjar src="lib/xerces_2_5_0.jar" dest="${build}/tmp"/>
       <jar jarfile="${build}/lib/${project}-bean.jar"
            manifest="${src}/${project}-bean.mf">
         <manifest>
  
  
  
  1.1                  xml-batik/lib/LICENSE.xerces_2_5_0.txt
  
  Index: LICENSE.xerces_2_5_0.txt
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, 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 "Xerces" 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 (INCLUDING, 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 based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.ibm.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  
  
  1.1                  xml-batik/lib/xerces_2_5_0.jar
  
  	<<Binary file>>
  
  
  1.5       +39 -29    xml-batik/samples/tests/spec/scripting/security2.jar
  
  	<<Binary file>>
  
  
  1.30      +100 -87   xml-batik/sources/org/apache/batik/css/engine/CSSEngine.java
  
  Index: CSSEngine.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/css/engine/CSSEngine.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- CSSEngine.java	9 Aug 2003 16:58:41 -0000	1.29
  +++ CSSEngine.java	10 Aug 2003 18:03:16 -0000	1.30
  @@ -707,84 +707,87 @@
           }
   
           element = elt;
  -
  +        try {
           // Apply the non-CSS presentational hints to the result.
  -        if (nonCSSPresentationalHints != null) {
  -            NamedNodeMap attrs = elt.getAttributes();
  -            int len = attrs.getLength();
  -            for (int i = 0; i < len; i++) {
  -                Node attr = attrs.item(i);
  -                String an = attr.getNodeName();
  -                if (nonCSSPresentationalHints.contains(an)) {
  +            if (nonCSSPresentationalHints != null) {
  +                NamedNodeMap attrs = elt.getAttributes();
  +                int len = attrs.getLength();
  +                for (int i = 0; i < len; i++) {
  +                    Node attr = attrs.item(i);
  +                    String an = attr.getNodeName();
  +                    if (nonCSSPresentationalHints.contains(an)) {
  +                        try {
  +                            LexicalUnit lu;
  +                            int idx = getPropertyIndex(an);
  +                            lu = parser.parsePropertyValue
  +                                (attr.getNodeValue());
  +                            ValueManager vm = valueManagers[idx];
  +                            Value v = vm.createValue(lu, this);
  +                            putAuthorProperty(result, idx, v, false,
  +                                              StyleMap.NON_CSS_ORIGIN);
  +                        } catch (Exception e) {
  +                            String m = e.getMessage();
  +                            if (m == null) m = "";
  +                            String u = ((documentURI == null)?"<unknown>":
  +                                        documentURI.toString());
  +                            String s = Messages.formatMessage
  +                                ("property.syntax.error.at",
  +                                 new Object[] { u, an, attr.getNodeValue(),m});
  +                            throw new DOMException(DOMException.SYNTAX_ERR, s);
  +                        }
  +                    }
  +                }
  +            }
  +
  +            // Apply the document style-sheets to the result.
  +            List snodes = getStyleSheetNodes();
  +            int slen = snodes.size();
  +            if (slen > 0) {
  +                List rules = new ArrayList();
  +                for (int i = 0; i < slen; i++) {
  +                    CSSStyleSheetNode ssn = (CSSStyleSheetNode)snodes.get(i);
  +                    StyleSheet ss = ssn.getCSSStyleSheet();
  +                    if (ss != null &&
  +                        (!ss.isAlternate() ||
  +                         ss.getTitle() == null ||
  +                         ss.getTitle().equals(alternateStyleSheet)) &&
  +                        mediaMatch(ss.getMedia())) {
  +                        addMatchingRules(rules, ss, elt, pseudo);
  +                    }
  +                }
  +                addRules(elt, pseudo, result, rules, StyleMap.AUTHOR_ORIGIN);
  +            }
  +
  +            // Apply the inline style to the result.
  +            if (styleLocalName != null) {
  +                String style = elt.getAttributeNS(styleNamespaceURI,
  +                                                  styleLocalName);
  +                if (style.length() > 0) {
                       try {
  -                        LexicalUnit lu;
  -                        int idx = getPropertyIndex(an);
  -                        lu = parser.parsePropertyValue(attr.getNodeValue());
  -                        ValueManager vm = valueManagers[idx];
  -                        Value v = vm.createValue(lu, this);
  -                        putAuthorProperty(result, idx, v, false,
  -                                          StyleMap.NON_CSS_ORIGIN);
  +                        parser.setSelectorFactory(CSSSelectorFactory.INSTANCE);
  +                        parser.setConditionFactory(cssConditionFactory);
  +                        styleDeclarationDocumentHandler.styleMap = result;
  +                        parser.setDocumentHandler
  +                            (styleDeclarationDocumentHandler);
  +                        parser.parseStyleDeclaration(style);
  +                        styleDeclarationDocumentHandler.styleMap = null;
                       } catch (Exception e) {
                           String m = e.getMessage();
                           if (m == null) m = "";
                           String u = ((documentURI == null)?"<unknown>":
                                       documentURI.toString());
                           String s = Messages.formatMessage
  -                            ("property.syntax.error.at",
  -                             new Object[] { u, an, attr.getNodeValue(),m});
  +                            ("style.syntax.error.at",
  +                             new Object[] { u, styleLocalName, style, m});
                           throw new DOMException(DOMException.SYNTAX_ERR, s);
                       }
                   }
               }
  +        } finally {
  +            element = null;
  +            cssBaseURI = null;
           }
   
  -        // Apply the document style-sheets to the result.
  -        List snodes = getStyleSheetNodes();
  -        int slen = snodes.size();
  -        if (slen > 0) {
  -            List rules = new ArrayList();
  -            for (int i = 0; i < slen; i++) {
  -                CSSStyleSheetNode ssn = (CSSStyleSheetNode)snodes.get(i);
  -                StyleSheet ss = ssn.getCSSStyleSheet();
  -                if (ss != null &&
  -                    (!ss.isAlternate() ||
  -                     ss.getTitle() == null ||
  -                     ss.getTitle().equals(alternateStyleSheet)) &&
  -                    mediaMatch(ss.getMedia())) {
  -                    addMatchingRules(rules, ss, elt, pseudo);
  -                }
  -            }
  -            addRules(elt, pseudo, result, rules, StyleMap.AUTHOR_ORIGIN);
  -        }
  -
  -        // Apply the inline style to the result.
  -        if (styleLocalName != null) {
  -            String style = elt.getAttributeNS(styleNamespaceURI,
  -                                              styleLocalName);
  -            if (style.length() > 0) {
  -                try {
  -                    parser.setSelectorFactory(CSSSelectorFactory.INSTANCE);
  -                    parser.setConditionFactory(cssConditionFactory);
  -                    styleDeclarationDocumentHandler.styleMap = result;
  -                    parser.setDocumentHandler(styleDeclarationDocumentHandler);
  -                    parser.parseStyleDeclaration(style);
  -                    styleDeclarationDocumentHandler.styleMap = null;
  -                } catch (Exception e) {
  -                    String m = e.getMessage();
  -                    if (m == null) m = "";
  -                    String u = ((documentURI == null)?"<unknown>":
  -                                documentURI.toString());
  -                    String s = Messages.formatMessage
  -                        ("style.syntax.error.at",
  -                         new Object[] { u, styleLocalName, style, m});
  -                    throw new DOMException(DOMException.SYNTAX_ERR, s);
  -                }
  -            }
  -        }
  -        
  -        element = null;
  -        cssBaseURI = null;
  -
           return result;
       }
   
  @@ -905,7 +908,8 @@
       }
   
       /**
  -     * Parses and creates a property value.
  +     * Parses and creates a property value from elt.
  +     * @param elt  The element property is from.
        * @param prop The property name.
        * @param value The property value.
        */
  @@ -929,6 +933,7 @@
               throw new DOMException(DOMException.SYNTAX_ERR, s);
           } finally {
               element = null;
  +            cssBaseURI = null;
           }
   
       }
  @@ -937,15 +942,15 @@
        * Parses and creates a style declaration.
        * @param value The style declaration text.
        */
  -    public StyleDeclaration parseStyleDeclaration(String value) {
  +    public StyleDeclaration parseStyleDeclaration(CSSStylableElement elt,
  +                                                  String value) {
           try {
               parser.setSelectorFactory(CSSSelectorFactory.INSTANCE);
               parser.setConditionFactory(cssConditionFactory);
  -            cssBaseURI = documentURI;
  +            element = elt;
               styleDeclarationBuilder.styleDeclaration = new StyleDeclaration();
               parser.setDocumentHandler(styleDeclarationBuilder);
               parser.parseStyleDeclaration(value);
  -            cssBaseURI = null;
               return styleDeclarationBuilder.styleDeclaration;
           } catch (Exception e) {
               String m = e.getMessage();
  @@ -955,6 +960,9 @@
               String s = Messages.formatMessage
                   ("syntax.error.at", new Object[] { u, m });
               throw new DOMException(DOMException.SYNTAX_ERR, s);
  +        } finally {
  +            element = null;
  +            cssBaseURI = null;
           }
       }
   
  @@ -1093,22 +1101,25 @@
           throws IOException {
           parser.setSelectorFactory(CSSSelectorFactory.INSTANCE);
           parser.setConditionFactory(cssConditionFactory);
  -        cssBaseURI = uri;
  -        styleSheetDocumentHandler.styleSheet = ss;
  -        parser.setDocumentHandler(styleSheetDocumentHandler);
  -        parser.parseStyleSheet(is);
  -        cssBaseURI = null;
  +        try {
  +            cssBaseURI = uri;
  +            styleSheetDocumentHandler.styleSheet = ss;
  +            parser.setDocumentHandler(styleSheetDocumentHandler);
  +            parser.parseStyleSheet(is);
   
  -        // Load the imported sheets.
  -        int len = ss.getSize();
  -        for (int i = 0; i < len; i++) {
  -            Rule r = ss.getRule(i);
  -            if (r.getType() != ImportRule.TYPE) {
  -                // @import rules must be the first rules.
  -                break;
  +            // Load the imported sheets.
  +            int len = ss.getSize();
  +            for (int i = 0; i < len; i++) {
  +                Rule r = ss.getRule(i);
  +                if (r.getType() != ImportRule.TYPE) {
  +                    // @import rules must be the first rules.
  +                    break;
  +                }
  +                ImportRule ir = (ImportRule)r;
  +                parseStyleSheet(ir, ir.getURI());
               }
  -            ImportRule ir = (ImportRule)r;
  -            parseStyleSheet(ir, ir.getURI());
  +        } finally {
  +            cssBaseURI = null;
           }
       }
   
  @@ -1715,9 +1726,10 @@
                           ("style.syntax.error.at",
                            new Object[] { u, styleLocalName, decl, m });
                       throw new DOMException(DOMException.SYNTAX_ERR, s);
  +                } finally {
  +                    element = null;
  +                    cssBaseURI = null;
                   }
  -                element = null;
  -                cssBaseURI = null;
               }
   
               // Fall through
  @@ -2040,9 +2052,10 @@
                       ("property.syntax.error.at",
                        new Object[] { u, property, evt.getNewValue(), m });
                   throw new DOMException(DOMException.SYNTAX_ERR, s);
  +            } finally {
  +                element = null;
  +                cssBaseURI = null;
               }
  -            element = null;
  -            cssBaseURI = null;
               break;
   
           case MutationEvent.REMOVAL:
  
  
  
  1.10      +20 -19    xml-batik/sources/org/apache/batik/dom/svg/SVGStylableElement.java
  
  Index: SVGStylableElement.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/svg/SVGStylableElement.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- SVGStylableElement.java	8 Aug 2003 11:39:00 -0000	1.9
  +++ SVGStylableElement.java	10 Aug 2003 18:03:16 -0000	1.10
  @@ -562,7 +562,8 @@
               setModificationHandler(this);
   
               declaration = cssEngine.parseStyleDeclaration
  -                (getAttributeNS(null, SVG_STYLE_ATTRIBUTE));
  +                (SVGStylableElement.this,
  +                 getAttributeNS(null, SVG_STYLE_ATTRIBUTE));
           }
   
           // ValueProvider ////////////////////////////////////////
  @@ -621,7 +622,8 @@
            */
           public void attrAdded(Attr node, String newv) {
               if (!mutate) {
  -                declaration = cssEngine.parseStyleDeclaration(newv);
  +                declaration = cssEngine.parseStyleDeclaration
  +                    (SVGStylableElement.this, newv);
               }
           }
   
  @@ -630,7 +632,8 @@
            */
           public void attrModified(Attr node, String oldv, String newv) {
               if (!mutate) {
  -                declaration = cssEngine.parseStyleDeclaration(newv);
  +                declaration = cssEngine.parseStyleDeclaration
  +                    (SVGStylableElement.this, newv);
               }
           }
   
  @@ -650,7 +653,8 @@
            * Called when the value text has changed.
            */
           public void textChanged(String text) throws DOMException {
  -            declaration = cssEngine.parseStyleDeclaration(text);
  +            declaration = cssEngine.parseStyleDeclaration
  +                (SVGStylableElement.this, text);
               mutate = true;
               setAttributeNS(null, SVG_STYLE_ATTRIBUTE, text);
               mutate = false;
  @@ -678,22 +682,19 @@
            */
           public void propertyChanged(String name, String value, String prio)
               throws DOMException {
  -            int idx = cssEngine.getPropertyIndex(name);
  -            for (int i = 0; i < declaration.size(); i++) {
  -                if (idx == declaration.getIndex(i)) {
  -                    Value v = cssEngine.parsePropertyValue
  -                        (SVGStylableElement.this, name, value);
  -                    declaration.put(i, v, idx, prio.length() > 0);
  -                    mutate = true;
  -                    setAttributeNS(null, SVG_STYLE_ATTRIBUTE,
  -                                   declaration.toString(cssEngine));
  -                    mutate = false;
  -                    return;
  -                }
  -            }
               Value v = cssEngine.parsePropertyValue
                   (SVGStylableElement.this, name, value);
  -            declaration.append(v, idx, prio.length() > 0);
  +
  +            int i = 0;
  +            int idx = cssEngine.getPropertyIndex(name);
  +            for (; i < declaration.size(); i++) {
  +                if (idx == declaration.getIndex(i))
  +                    break;
  +            }
  +            if (i < declaration.size()) 
  +                declaration.put(i, v, idx, prio.length() > 0);
  +            else
  +                declaration.append(v, idx, prio.length() > 0);
               mutate = true;
               setAttributeNS(null, SVG_STYLE_ATTRIBUTE,
                              declaration.toString(cssEngine));
  
  
  
  1.79      +13 -2     xml-batik/sources/org/apache/batik/swing/svg/JSVGComponent.java
  
  Index: JSVGComponent.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/swing/svg/JSVGComponent.java,v
  retrieving revision 1.78
  retrieving revision 1.79
  diff -u -r1.78 -r1.79
  --- JSVGComponent.java	9 Aug 2003 16:58:45 -0000	1.78
  +++ JSVGComponent.java	10 Aug 2003 18:03:16 -0000	1.79
  @@ -403,7 +403,9 @@
   
       /**
        * Sets the document state. The given value must be one of
  -     * AUTODETECT, ALWAYS_DYNAMIC or ALWAYS_STATIC.
  +     * AUTODETECT, ALWAYS_DYNAMIC or ALWAYS_STATIC.  This only
  +     * effects the loading of subsequent documents, it has no
  +     * effect on the currently loaded document.
        */
       public void setDocumentState(int state) {
           documentState = state;
  @@ -415,6 +417,15 @@
        * notifed when the rendering completes by registering a
        * GVTTreeRendererListener with the component and waiting for the
        * <tt>gvtRenderingCompleted</tt> event.
  +     *
  +     * An UpdateManager is only created for Dynamic documents.  By
  +     * default the Canvas attempts to autodetect dynamic documents by
  +     * looking for script elements and/or event attributes in the
  +     * document, if it does not find these it assumes the document is
  +     * static.  Callers of this method will almost certainly want to
  +     * call setDocumentState(ALWAYS_DYNAMIC) before loading the document 
  +     * (with setURI, setDocument, setSVGDocument etc.) so that an 
  +     * UpdateManager is always created (even for apparently static documents).
        */
       public UpdateManager getUpdateManager() {
           if (svgLoadEventDispatcher != null) {
  
  
  
  1.37      +46 -29    xml-batik/xdocs/faq.xml
  
  Index: faq.xml
  ===================================================================
  RCS file: /home/cvs/xml-batik/xdocs/faq.xml,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- faq.xml	10 Jul 2003 08:28:30 -0000	1.36
  +++ faq.xml	10 Aug 2003 18:03:16 -0000	1.37
  @@ -563,9 +563,9 @@
       Batik detects this by looking for script elements but when you
       modify the document from Java it can't tell.  So call
       JSVGCanvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC) before
  -    loading the document.</p>
  +    loading the document (with setURI, setDocument, setSVGDocument etc.).</p>
       <p>The second common reason is that the changes aren't made in
  -    The UpdateManager's thread.  You can run code in the UpdateManager's
  +    the UpdateManager's thread.  You can run code in the UpdateManager's
       thread with the following:
       </p>
       <code>UpdateManager um = JSVGCanvas.getUpdateManager();</code>
  @@ -577,41 +577,58 @@
       </p>
       </answer>
   </faq>
  -
  +  <faq>
  +    <question>When I change the document in Java it only updates if I
  +              move the mouse over the canvas?</question>
  +    <answer>
  +      <p>The most common causes for this, is that the changes are not made in
  +      the UpdateManager's thread.  See previous FAQ for example code to
  +      run code in the Update Manager's thread.  Moving the mouse works
  +      because it delivers the mouse move events in the update thread,
  +      and after a runnable completes in the Update Manager's thread it
  +      checks if the canvas needs repainting.</p>
  +    </answer>
  +  </faq>
   <faq>
  -    <question>When I modify create new SVG elements or modify some 
  +    <question>When I create new SVG elements or modify some 
       SVG attributes through the DOM API, from ECMA Script,
  -    nothing happens, changes are not rendered? What is going on?</question>
  +    nothing happens, the changes are not rendered, why not?</question>
   
       <answer>
       <p>A common problem is that script contain the wrong DOM calls
       to create elements or modify attributes. </p>
   
       <p>SVG elements need to be 
  -    created in the SVG namespace. For example, to create a <code>&lt;rect&gt;</code>
  -    element, you should use <code>document.createElementNS(svgNS, "rect")</code>,
  -    (where <code>svgNS</code> is equals to <code>"http://www.w3.org/2000/svg"</code>),
  +    created in the SVG namespace. For example, to create a 
  +    <code>&lt;rect&gt;</code> element, you should use 
  +    <code>document.createElementNS(svgNS, "rect")</code>, (where 
  +    <code>svgNS</code> is equals to <code>"http://www.w3.org/2000/svg"</code>),
       which appropriately creates the <code>&lt;rect&gt;</code> element in the
  -    SVG namespace. A call to <code>document.createElement("rect")</code> creates
  -    an element with the tag <code>rect</code> but which does not belong to the 
  -    SVG namespace. As such, it is ignored by Batik.</p>
  -    <p>Most SVG attributes belong to what is called the 'per element type partition
  -    namespace' (see the <link href="http://www.w3.org/TR/REC-xml-names">Namespaces in
  +    SVG namespace. A call to <code>document.createElement("rect")</code> 
  +    creates an element with the tag <code>rect</code> but which does not 
  +    belong to the  SVG namespace. As such, it is ignored by Batik.</p>
  +    <p>Most SVG attributes belong to what is called the 'per element type 
  +    partition namespace' (see the 
  +    <link href="http://www.w3.org/TR/REC-xml-names">Namespaces in
       XML</link> specification). The appropriate way to set attributes on
       an SVG element is a call to <code>setAttributeNS</code> with a namespace
  -    value of <code>null</code>, for example: <code>elt.setAttributeNS(null, "width", "40")</code>.
  -    In the Batik SVG DOM implementation, you can also use a call to <code>setAttribute</code> and
  -    you can write <code>elt.setAttribute("width", "40")</code>. However, it is important
  -    to know that some implementations make a difference between <code>setAttribute(x, y)</code>
  -    and <code>setAttributeNS(null, x, y)</code>, so it is a better practice to use 
  -    <code>setAttributeNS</code> which is the only guaranteed interoperable way of 
  -    setting attributes in a namespace aware DOM implementation.</p>
  +    value of <code>null</code>, for example: <code>elt.setAttributeNS(null, 
  +    "width", "40")</code>.  In the Batik SVG DOM implementation, you can 
  +    also use a call to <code>setAttribute</code> and you can write 
  +    <code>elt.setAttribute("width", "40")</code>. However, it is important
  +    to know that some implementations make a difference between 
  +    <code>setAttribute(x, y)</code> and 
  +    <code>setAttributeNS(null, x, y)</code>, so it is a better practice to use 
  +    <code>setAttributeNS</code> which is the only guaranteed interoperable 
  +    way of setting attributes in a namespace aware DOM implementation.</p>
       <p>Finally, for attributes which belong to a specific namespace, like the 
       the href attribute on the <code>&lt;image&gt;</code> element, you have to 
  -    use the <code>setAttributeNS</code> method with the XLink namespace. For example,
  -    assuming <code>img</code> references an <code>&lt;image&gt;</code> DOM <code>Element</code>,
  -    you can modify the href as follows: <code>img.setAttributeNS(xlinkNS, "xlink:href", "myImage.jpg")</code>
  -    where <code>xlinkNS</code> is equal to <code>"http://www.w3.org/1999/xlink"</code></p>
  +    use the <code>setAttributeNS</code> method with the XLink namespace. 
  +    For example, assuming <code>img</code> references an 
  +    <code>&lt;image&gt;</code> DOM <code>Element</code>, you can modify the 
  +    href as follows: <code>img.setAttributeNS(xlinkNS, "xlink:href", 
  +    "myImage.jpg")</code> where <code>xlinkNS</code> is equal to 
  +    <code>"http://www.w3.org/1999/xlink"</code></p>
       </answer>
   </faq>
   
  @@ -620,10 +637,10 @@
       it is null, why?</question>
       <answer>
       <p>The JSVGCanvs is highly asynchronous so when you call
  -    setURI or setDocument they return essentially immediately.
  -    Behind the scenes the Canvas sets up the rendering tree and
  -    does a first rendering after running 'onload' scripts. Only
  -    after this first rendering does the UpdateManger become
  +    setURI, setDocument or setSVGDocument they return essentially 
  +    immediately. Behind the scenes the Canvas creates the rendering 
  +    tree and does a first rendering after running 'onload' scripts. 
  +    Only after this first rendering does the UpdateManger become
       available.
       </p>
       </answer>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-dev-help@xml.apache.org