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 hi...@apache.org on 2001/09/27 11:57:13 UTC

cvs commit: xml-batik/sources/org/apache/batik/transcoder/svg2svg PrettyPrinter.java

hillion     01/09/27 02:57:13

  Modified:    sources/org/apache/batik/dom AbstractAttr.java
                        AbstractElement.java
               sources/org/apache/batik/dom/svg AbstractElement.java
                        LiveAttributeValue.java
               sources/org/apache/batik/transcoder/svg2svg
                        PrettyPrinter.java
  Log:
  - Attr events fixes,
  - pretty-printer fix.
  
  Revision  Changes    Path
  1.4       +15 -3     xml-batik/sources/org/apache/batik/dom/AbstractAttr.java
  
  Index: AbstractAttr.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/AbstractAttr.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- AbstractAttr.java	2000/12/28 09:37:17	1.3
  +++ AbstractAttr.java	2001/09/27 09:57:13	1.4
  @@ -14,11 +14,13 @@
   import org.w3c.dom.Element;
   import org.w3c.dom.Node;
   
  +import org.w3c.dom.events.MutationEvent;
  +
   /**
    * This class implements the {@link org.w3c.dom.Attr} interface.
    *
    * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
  - * @version $Id: AbstractAttr.java,v 1.3 2000/12/28 09:37:17 hillion Exp $
  + * @version $Id: AbstractAttr.java,v 1.4 2001/09/27 09:57:13 hillion Exp $
    */
   public abstract class AbstractAttr extends AbstractParentNode implements Attr {
       /**
  @@ -34,7 +36,7 @@
       /**
        * The owner element.
        */
  -    protected transient Element ownerElement;
  +    protected transient AbstractElement ownerElement;
   
       /**
        * Creates a new Attr object.
  @@ -114,6 +116,8 @@
   						    getNodeName() });
   	}
   
  +        String s = getNodeValue();
  +
   	// Remove all the children
   	Node n;
   	while ((n = getFirstChild()) != null) {
  @@ -125,6 +129,14 @@
                                                 ? ""
                                                 : nodeValue);
   	appendChild(n);
  +
  +        if (ownerElement != null) {
  +            ownerElement.fireDOMAttrModifiedEvent(nodeName,
  +                                                  this,
  +                                                  s,
  +                                                  nodeValue,
  +                                                  MutationEvent.MODIFICATION);
  +        }
       }
   
       /**
  @@ -168,7 +180,7 @@
       /**
        * Sets the owner element.
        */
  -    public void setOwnerElement(Element v) {
  +    public void setOwnerElement(AbstractElement v) {
   	ownerElement = v;
       }
       
  
  
  
  1.11      +75 -23    xml-batik/sources/org/apache/batik/dom/AbstractElement.java
  
  Index: AbstractElement.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/AbstractElement.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- AbstractElement.java	2001/09/12 08:54:33	1.10
  +++ AbstractElement.java	2001/09/27 09:57:13	1.11
  @@ -29,7 +29,7 @@
    * This class implements the {@link org.w3c.dom.Element} interface.
    *
    * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
  - * @version $Id: AbstractElement.java,v 1.10 2001/09/12 08:54:33 hillion Exp $
  + * @version $Id: AbstractElement.java,v 1.11 2001/09/27 09:57:13 hillion Exp $
    */
   public abstract class AbstractElement
       extends    AbstractParentChildNode
  @@ -120,9 +120,14 @@
   	if (attributes == null) {
   	    attributes = createAttributes();
   	}
  -	Attr attr = getOwnerDocument().createAttribute(name);
  -	attr.setValue(value);
  -	attributes.setNamedItem(attr);
  +        Attr attr = getAttributeNode(name);
  +        if (attr == null) {
  +            attr = getOwnerDocument().createAttribute(name);
  +            attr.setValue(value);
  +            attributes.setNamedItem(attr);
  +        } else {
  +            attr.setValue(value);
  +        }
       }
   
       /**
  @@ -223,10 +228,21 @@
   	if (attributes == null) {
   	    attributes = createAttributes();
   	}
  -	Attr attr = getOwnerDocument().createAttributeNS(namespaceURI,
  -                                                         qualifiedName);
  -	attr.setValue(value);
  -	attributes.setNamedItemNS(attr);
  +        Attr attr = getAttributeNodeNS(namespaceURI, qualifiedName);
  +        if (attr == null) {
  +            attr = getOwnerDocument().createAttributeNS(namespaceURI,
  +                                                        qualifiedName);
  +            attr.setValue(value);
  +            attributes.setNamedItemNS(attr);
  +        } else {
  +            String s = attr.getValue();
  +            attr.setValue(value);
  +            fireDOMAttrModifiedEvent(qualifiedName,
  +                                     attr,
  +                                     s,
  +                                     value,
  +                                     MutationEvent.MODIFICATION);
  +        }
       }
   
       /**
  @@ -446,29 +462,61 @@
        * <!> WARNING: public accessor because of compilation problems
        *     on Solaris. Do not change.
        *
  -     * @param name The attribute name.
  +     * @param name The attribute's name.
  +     * @param node The attribute's node.
        * @param oldv The old value of the attribute.
        * @param newv The new value of the attribute.
  +     * @param change The modification type.
        */
  -    public void fireDOMAttrModifiedEvent(String name, String oldv,
  -                                            String newv) {
  +    public void fireDOMAttrModifiedEvent(String name, Attr node, String oldv,
  +                                         String newv, short change) {
  +        switch (change) {
  +        case MutationEvent.ADDITION:
  +            attrAdded(node, newv);
  +            break;
  +
  +        case MutationEvent.MODIFICATION:
  +            attrModified(node, oldv, newv);
  +            break;
  +
  +        default: // MutationEvent.REMOVAL:
  +            attrRemoved(node, oldv);
  +        }
   	AbstractDocument doc = getCurrentDocument();
   	if (doc.getEventsEnabled() && !oldv.equals(newv)) {
   	    DocumentEvent de = (DocumentEvent)doc;
   	    MutationEvent ev = (MutationEvent)de.createEvent("MutationEvents");
   	    ev.initMutationEvent("DOMAttrModified",
  -				 true,  // canBubbleArg
  -				 false, // cancelableArg
  -				 null,  // relatedNodeArg
  -				 oldv,  // prevValueArg
  -				 newv,  // newValueArg
  -				 name,  // attrNameArg
  -                                 ev.MODIFICATION);
  +				 true,    // canBubbleArg
  +				 false,   // cancelableArg
  +				 node,    // relatedNodeArg
  +				 oldv,    // prevValueArg
  +				 newv,    // newValueArg
  +				 name,    // attrNameArg
  +                                 change); // attrChange
   	    dispatchEvent(ev);
   	}
       }
   
       /**
  +     * Called when an attribute has been added.
  +     */
  +    protected void attrAdded(Attr node, String newv) {
  +    }
  +
  +    /**
  +     * Called when an attribute has been modified.
  +     */
  +    protected void attrModified(Attr node, String oldv, String newv) {
  +    }
  +
  +    /**
  +     * Called when an attribute has been removed.
  +     */
  +    protected void attrRemoved(Attr node, String oldv) {
  +    }
  +
  +    /**
        * An implementation of the {@link org.w3c.dom.NamedNodeMap}.
        */
       public class NamedNodeHashMap implements NamedNodeMap, Serializable {
  @@ -606,7 +654,8 @@
   	    n.setOwnerElement(null);
   	    
   	    // Mutation event
  -	    fireDOMAttrModifiedEvent(n.getNodeName(), n.getNodeValue(), "");
  +	    fireDOMAttrModifiedEvent(n.getNodeName(), n, n.getNodeValue(), "",
  +                                     MutationEvent.REMOVAL);
   	    return n;
   	}
   
  @@ -620,13 +669,16 @@
   	    if (result != null) {
   		result.setOwnerElement(null);
   		fireDOMAttrModifiedEvent(name,
  +                                         result,
   					 result.getNodeValue(),
  -					 arg.getNodeValue());
  -	    } else {
  -		fireDOMAttrModifiedEvent(name,
   					 "",
  -					 arg.getNodeValue());
  +                                         MutationEvent.REMOVAL);
   	    }
  +            fireDOMAttrModifiedEvent(name,
  +                                     (Attr)arg,
  +                                     "",
  +                                     arg.getNodeValue(),
  +                                     MutationEvent.ADDITION);
   	    return result;
   	}
   
  
  
  
  1.4       +45 -16    xml-batik/sources/org/apache/batik/dom/svg/AbstractElement.java
  
  Index: AbstractElement.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/svg/AbstractElement.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- AbstractElement.java	2001/09/13 14:01:11	1.3
  +++ AbstractElement.java	2001/09/27 09:57:13	1.4
  @@ -26,12 +26,14 @@
   import org.w3c.dom.NamedNodeMap;
   import org.w3c.dom.Node;
   
  +import org.w3c.dom.events.MutationEvent;
  +
   /**
    * This class provides a superclass to implement an SVG element, or
    * an element interoperable with the SVG elements.
    *
    * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
  - * @version $Id: AbstractElement.java,v 1.3 2001/09/13 14:01:11 hillion Exp $
  + * @version $Id: AbstractElement.java,v 1.4 2001/09/27 09:57:13 hillion Exp $
    */
   public abstract class AbstractElement
       extends org.apache.batik.dom.AbstractElement
  @@ -209,6 +211,46 @@
       }
   
       /**
  +     * Called when an attribute has been added.
  +     */
  +    protected void attrAdded(Attr node, String newv) {
  +        LiveAttributeValue lav = getLiveAttributeValue(node);
  +        if (lav != null) {
  +            lav.attrAdded(node, newv);
  +        }
  +    }
  +
  +    /**
  +     * Called when an attribute has been modified.
  +     */
  +    protected void attrModified(Attr node, String oldv, String newv) {
  +        LiveAttributeValue lav = getLiveAttributeValue(node);
  +        if (lav != null) {
  +            lav.attrModified(node, oldv, newv);
  +        }
  +    }
  +
  +    /**
  +     * Called when an attribute has been removed.
  +     */
  +    protected void attrRemoved(Attr node, String oldv) {
  +        LiveAttributeValue lav = getLiveAttributeValue(node);
  +        if (lav != null) {
  +            lav.attrRemoved(node, oldv);
  +        }
  +    }
  +
  +    /**
  +     * Gets Returns the live attribute value associated with given attribute, if any.
  +     */
  +    private LiveAttributeValue getLiveAttributeValue(Attr node) {
  +        String ns = node.getNamespaceURI();
  +        return getLiveAttributeValue(ns, (ns == null)
  +                                     ? node.getNodeName()
  +                                     : node.getLocalName());
  +    }
  +
  +    /**
        * An implementation of the {@link NamedNodeMap}.
        */
       protected class ExtendedNamedNodeHashMap extends NamedNodeHashMap {
  @@ -219,20 +261,6 @@
           public ExtendedNamedNodeHashMap() {
           }
   
  -        /**
  -         * Adds a node to the map.
  -         */
  -        public Node setNamedItem(String ns, String name, Node arg)  throws DOMException {
  -            Attr result = (Attr)super.setNamedItem(ns, name, arg);
  -
  -            LiveAttributeValue lav = getLiveAttributeValue(ns, name);
  -            if (lav != null) {
  -                lav.valueChanged(result, (Attr)arg);
  -            }
  -
  -            return result;
  -        }
  -
   	/**
   	 * Adds an unspecified attribute to the map.
            * @param nsURI The attribute namespace URI.
  @@ -274,7 +302,8 @@
               // Reset the attribute to its default value
               if (!resetAttribute(namespaceURI, prefix, localName)) {
                   // Mutation event
  -                fireDOMAttrModifiedEvent(n.getNodeName(), n.getNodeValue(), "");
  +                fireDOMAttrModifiedEvent(n.getNodeName(), n, n.getNodeValue(), "",
  +                                         MutationEvent.REMOVAL);
               }
               return n;
   	}
  
  
  
  1.4       +13 -5     xml-batik/sources/org/apache/batik/dom/svg/LiveAttributeValue.java
  
  Index: LiveAttributeValue.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/svg/LiveAttributeValue.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- LiveAttributeValue.java	2001/09/13 14:01:11	1.3
  +++ LiveAttributeValue.java	2001/09/27 09:57:13	1.4
  @@ -15,13 +15,21 @@
    * objects that must be updated when the attribute node is modified.
    *
    * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
  - * @version $Id: LiveAttributeValue.java,v 1.3 2001/09/13 14:01:11 hillion Exp $
  + * @version $Id: LiveAttributeValue.java,v 1.4 2001/09/27 09:57:13 hillion Exp $
    */
   public interface LiveAttributeValue {
       /**
  -     * Called when the string representation of the value as been modified.
  -     * @param oldValue The old Attr node.
  -     * @param newValue The new Attr node.
  +     * Called when an Attr node has been added.
        */
  -    void valueChanged(Attr oldValue, Attr newValue);
  +    void attrAdded(Attr node, String newv);
  +
  +    /**
  +     * Called when an Attr node has been modified.
  +     */
  +    void attrModified(Attr node, String oldv, String newv);
  +
  +    /**
  +     * Called when an Attr node has been removed.
  +     */
  +    void attrRemoved(Attr node, String oldv);
   }
  
  
  
  1.4       +5 -6      xml-batik/sources/org/apache/batik/transcoder/svg2svg/PrettyPrinter.java
  
  Index: PrettyPrinter.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/transcoder/svg2svg/PrettyPrinter.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- PrettyPrinter.java	2001/02/15 15:57:52	1.3
  +++ PrettyPrinter.java	2001/09/27 09:57:13	1.4
  @@ -28,7 +28,7 @@
    * This class represents an SVG source files pretty-printer.
    *
    * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
  - * @version $Id: PrettyPrinter.java,v 1.3 2001/02/15 15:57:52 hillion Exp $
  + * @version $Id: PrettyPrinter.java,v 1.4 2001/09/27 09:57:13 hillion Exp $
    */
   public class PrettyPrinter {
   
  @@ -494,12 +494,11 @@
           char[] target = scanner.currentValue();
   
           int t = scanner.next();
  -        if (t != LexicalUnits.S) {
  -            throw fatalError("space", null);
  +        char[] space = {};
  +        if (t == LexicalUnits.S) {
  +            space = scanner.currentValue();
  +            t = scanner.next();
           }
  -        char[] space = scanner.currentValue();
  -        t = scanner.next();
  -
           if (t != LexicalUnits.PI_DATA) {
               throw fatalError("pi.data", null);
           }
  
  
  

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