hillion 01/10/17 07:47:26 Modified: sources/org/apache/batik/bridge CSSUtilities.java sources/org/apache/batik/css AbstractViewCSS.java CSSOMReadOnlyStyleDeclaration.java ExtendedElementCSSInlineStyle.java HiddenChildElement.java HiddenChildElementSupport.java PropertyMap.java sources/org/apache/batik/dom AbstractAttr.java AbstractDocument.java sources/org/apache/batik/dom/svg AbstractElement.java sources/org/apache/batik/extension ExtensionElement.java Added: sources/org/apache/batik/css ElementWithBaseURI.java Removed: sources/org/apache/batik/dom/util SoftDoublyIndexedTable.java Log: few CSS engine cleanups. Revision Changes Path 1.33 +10 -6 xml-batik/sources/org/apache/batik/bridge/CSSUtilities.java Index: CSSUtilities.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/CSSUtilities.java,v retrieving revision 1.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- CSSUtilities.java 2001/10/12 07:33:09 1.32 +++ CSSUtilities.java 2001/10/17 14:47:25 1.33 @@ -25,6 +25,7 @@ import org.apache.batik.css.AbstractViewCSS; import org.apache.batik.css.CSSOMReadOnlyStyleDeclaration; import org.apache.batik.css.CSSOMReadOnlyValue; +import org.apache.batik.css.HiddenChildElementSupport; import org.apache.batik.css.value.ImmutableString; import org.apache.batik.dom.svg.SVGOMDocument; @@ -66,7 +67,7 @@ * concrete objects regarding to CSS properties. * * @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a> - * @version $Id: CSSUtilities.java,v 1.32 2001/10/12 07:33:09 hillion Exp $ + * @version $Id: CSSUtilities.java,v 1.33 2001/10/17 14:47:25 hillion Exp $ */ public abstract class CSSUtilities implements CSSConstants, ErrorConstants, XMLConstants { @@ -837,14 +838,17 @@ SVGOMDocument document = (SVGOMDocument)localRefElement.getOwnerDocument(); - ViewCSS view = (ViewCSS)document.getDefaultView(); + AbstractViewCSS view = (AbstractViewCSS)document.getDefaultView(); + SVGOMDocument refDocument = (SVGOMDocument)refElement.getOwnerDocument(); - ViewCSS refView = (ViewCSS)refDocument.getDefaultView(); - - computeStyle(refElement, refView, - localRefElement, view); + AbstractViewCSS refView = (AbstractViewCSS)refDocument.getDefaultView(); + + HiddenChildElementSupport.setStyle(localRefElement, + view, + refElement, + refView); } /** 1.19 +32 -256 xml-batik/sources/org/apache/batik/css/AbstractViewCSS.java Index: AbstractViewCSS.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/css/AbstractViewCSS.java,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- AbstractViewCSS.java 2001/10/11 18:37:33 1.18 +++ AbstractViewCSS.java 2001/10/17 14:47:26 1.19 @@ -18,6 +18,7 @@ import org.apache.batik.css.sac.ExtendedSelector; import org.apache.batik.css.value.ImmutableInherit; import org.apache.batik.css.value.RelativeValueResolver; +import org.apache.batik.util.SoftDoublyIndexedTable; import org.w3c.css.sac.SelectorList; import org.w3c.dom.DOMException; @@ -44,7 +45,7 @@ * {@link org.w3c.dom.css.ViewCSS} interface. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: AbstractViewCSS.java,v 1.18 2001/10/11 18:37:33 hillion Exp $ + * @version $Id: AbstractViewCSS.java,v 1.19 2001/10/17 14:47:26 hillion Exp $ */ public abstract class AbstractViewCSS implements ViewCSS { @@ -56,7 +57,7 @@ /** * The cached computed styles. */ - protected ComputedStyleCache styles = new ComputedStyleCache(); + protected SoftDoublyIndexedTable styles = new SoftDoublyIndexedTable(); /** * The media to use for cascading. @@ -109,7 +110,8 @@ public CSSOMReadOnlyStyleDeclaration getComputedStyleInternal(Element elt, String pseudoElt) { pseudoElt = (pseudoElt == null) ? "" : pseudoElt; - CSSOMReadOnlyStyleDeclaration result = styles.get(elt, pseudoElt); + CSSOMReadOnlyStyleDeclaration result; + result = (CSSOMReadOnlyStyleDeclaration)styles.get(elt, pseudoElt); if (result == null) { result = computeStyle(elt, pseudoElt); @@ -126,14 +128,14 @@ CSSOMReadOnlyStyleDeclaration sd) { pseudoElt = (pseudoElt == null) ? "" : pseudoElt; sd.setContext(this, elt); - styles.putPermanent(elt, pseudoElt, sd); + styles.put(elt, pseudoElt, sd); } /** - * Disposes the style declarations explicitly setted in the cache. + * Clears the caches. */ public void dispose() { - styles.dispose(); + styles.clear(); } /** @@ -171,10 +173,15 @@ public CSSOMReadOnlyStyleDeclaration computeStyle(Element elt, String pseudoElt) { CSSOMReadOnlyStyleDeclaration result; - result = getCascadedStyle(elt, pseudoElt); + if (elt instanceof HiddenChildElement) { + result = ((HiddenChildElement)elt).getCascadedStyle(); + if (result != null) { + return new CSSOMReadOnlyStyleDeclaration(result); + } + } + result = getCascadedStyle(elt, pseudoElt); computeRelativeValues(elt, pseudoElt, result); - return result; } @@ -186,12 +193,12 @@ CSSOMReadOnlyStyleDeclaration result; result = new CSSOMReadOnlyStyleDeclaration(this, elt); - addUserAgentProperties(elt, pseudoElt, result); - addUserProperties(elt, pseudoElt, result); - addNonCSSPresentationalHints(elt, pseudoElt, result); - addAuthorStyleSheetProperties(elt, pseudoElt, result); - addInlineStyleProperties(elt, pseudoElt, result); - addOverrideStyleProperties(elt, pseudoElt, result); + addUserAgentProperties(elt, pseudoElt, result); + addUserProperties(elt, pseudoElt, result); + addNonCSSPresentationalHints(elt, pseudoElt, result); + addAuthorStyleSheetProperties(elt, pseudoElt, result); + addInlineStyleProperties(elt, pseudoElt, result); + addOverrideStyleProperties(elt, pseudoElt, result); return result; } @@ -457,6 +464,17 @@ if (dval == null || dorg != CSSOMReadOnlyStyleDeclaration.USER_ORIGIN || dprio.length() == 0) { + /* + if (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE) { + if (value.getPrimitiveType() == CSSPrimitiveValue.CSS_URI) { + value.setImmutableValue + (new ImmutableString + (CSSPrimitiveValue.CSS_URI, + new ParsedURL(basePURL, + value.getStringValue()).toString())); + } + } + */ dest.setPropertyCSSValue(name, value, prio, @@ -565,247 +583,5 @@ } } return false; - } - - /** - * To cache the computed styles. - */ - protected static class ComputedStyleCache { - - /** - * The table used to store the style. - */ - protected Entry[] table; - - /** - * The number of entries - */ - protected int count; - - /** - * Creates a new ComputedStyleCache. - */ - public ComputedStyleCache() { - table = new Entry[11]; - } - - /** - * Caches the given computed style. - */ - public void put(Element elt, String pe, CSSOMReadOnlyStyleDeclaration sd) { - int hash = hashCode(elt, pe) & 0x7FFFFFFF; - int index = hash % table.length; - - for (Entry e = table[index]; e != null; e = e.next) { - if ((e.hash == hash) && e.match(elt, pe)) { - e.computedStyleReference = new SoftReference(sd); - return; - } - } - - // The key is not in the hash table - int len = table.length; - if (count++ >= (len * 3) >>> 2) { - rehash(); - index = hash % table.length; - } - - Entry e = new Entry(hash, elt, pe, new SoftReference(sd), table[index]); - table[index] = e; - } - - /** - * Caches the given computed style without possibility of collection. - */ - public void putPermanent(Element elt, String pe, - CSSOMReadOnlyStyleDeclaration sd) { - int hash = hashCode(elt, pe) & 0x7FFFFFFF; - int index = hash % table.length; - - for (Entry e = table[index]; e != null; e = e.next) { - if ((e.hash == hash) && e.match(elt, pe)) { - e.computedStyleReference = new StrongReference(sd); - return; - } - } - - // The key is not in the hash table - int len = table.length; - if (count++ >= (len * 3) >>> 2) { - rehash(); - index = hash % table.length; - } - - Entry e = new Entry(hash, elt, pe, new StrongReference(sd), table[index]); - table[index] = e; - } - - /** - * Returns the computed style mapped with the given element - * and pseudo-element, if any. - */ - public CSSOMReadOnlyStyleDeclaration get(Element elt, String pe) { - int hash = hashCode(elt, pe) & 0x7FFFFFFF; - int index = hash % table.length; - - for (Entry e = table[index]; e != null; e = e.next) { - if ((e.hash == hash) && e.match(elt, pe)) { - return (CSSOMReadOnlyStyleDeclaration)e.computedStyleReference.get(); - } - } - return null; - } - - /** - * Rehash the table - */ - protected void rehash () { - Entry[] oldTable = table; - - table = new Entry[oldTable.length * 2 + 1]; - - for (int i = oldTable.length-1; i >= 0; i--) { - for (Entry old = oldTable[i]; old != null;) { - Entry e = old; - old = old.next; - - int index = e.hash % table.length; - e.next = table[index]; - table[index] = e; - } - } - } - - /** - * Updates the table. - */ - protected void update() { - for (int i = table.length - 1; i >= 0; --i) { - Entry e = table[i]; - Entry p = null; - if (e != null) { - if (e.computedStyleReference.get() == null) { - table[i] = e.next; - count--; - } - p = e; - e = e.next; - } - while (e != null) { - if (e.computedStyleReference.get() == null) { - p.next = e.next; - count--; - } - p = e; - e = e.next; - } - } - } - - /** - * Removes the permanently cached style declarations. - */ - public void dispose() { - for (int i = table.length - 1; i >= 0; --i) { - Entry e = table[i]; - Entry p = null; - if (e != null) { - if (e.computedStyleReference instanceof StrongReference) { - table[i] = e.next; - count--; - } - p = e; - e = e.next; - } - while (e != null) { - if (e.computedStyleReference instanceof StrongReference) { - p.next = e.next; - count--; - } - p = e; - e = e.next; - } - } - } - - /** - * Computes a hash code for the given element and pseudo-element. - */ - protected int hashCode(Element e, String pe) { - return e.hashCode() ^ pe.hashCode(); - } - - /** - * To store computed style with a strong reference. - */ - protected static class StrongReference extends SoftReference { - - /** - * A strong reference. - */ - protected Object reference; - - /** - * Creates a new strong reference. - */ - public StrongReference(Object o) { - super(o); - reference = o; - } - } - - /** - * To manage collisions in the table. - */ - protected static class Entry { - - /** - * The hash code - */ - public int hash; - - /** - * The element. - */ - public Element element; - - /** - * The pseudo-element. - */ - public String pseudoElement; - - /** - * The computed style. - */ - public SoftReference computedStyleReference; - - /** - * The next entry. - */ - public Entry next; - - /** - * Creates a new entry. - */ - public Entry(int h, Element e, String pe, SoftReference sd, Entry n) { - hash = h; - element = e; - pseudoElement = pe; - computedStyleReference = sd; - next = n; - } - - /** - * Whether this entry match the given keys. - */ - public boolean match(Element e, String pe) { - if (e == element) { - if (pe.equals(pseudoElement)) { - return true; - } - } - return false; - } - } } } 1.11 +38 -2 xml-batik/sources/org/apache/batik/css/CSSOMReadOnlyStyleDeclaration.java Index: CSSOMReadOnlyStyleDeclaration.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/css/CSSOMReadOnlyStyleDeclaration.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- CSSOMReadOnlyStyleDeclaration.java 2001/03/18 16:29:22 1.10 +++ CSSOMReadOnlyStyleDeclaration.java 2001/10/17 14:47:26 1.11 @@ -29,7 +29,7 @@ * interface. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: CSSOMReadOnlyStyleDeclaration.java,v 1.10 2001/03/18 16:29:22 hillion Exp $ + * @version $Id: CSSOMReadOnlyStyleDeclaration.java,v 1.11 2001/10/17 14:47:26 hillion Exp $ */ public class CSSOMReadOnlyStyleDeclaration implements CSSStyleDeclaration { /** @@ -70,6 +70,15 @@ } /** + * Creates a new CSSOMReadOnlyStyleDeclaration object. + */ + public CSSOMReadOnlyStyleDeclaration(CSSOMReadOnlyStyleDeclaration sd) { + properties = new PropertyMap(sd.properties); + viewCSS = sd.viewCSS; + parentElement = sd.parentElement; + } + + /** * Sets the declaration context. */ public void setContext(AbstractViewCSS v, Element elt) { @@ -560,6 +569,33 @@ } /** + * Creates a copy of the given PropertyMap object. + * @param t The table to copy. + */ + public PropertyMap(PropertyMap t) { + count = t.count; + table = new ValueEntry[t.table.length]; + for (int i = 0; i < table.length; i++) { + ValueEntry e = t.table[i]; + ValueEntry n = null; + if (e != null) { + n = createValueEntry(e.value, e.getPriority(), + e.getOrigin()); + n.initialize(e.hash, e.key, null); + table[i] = n; + e = e.next; + while (e != null) { + n.next = createValueEntry(e.value, e.getPriority(), + e.getOrigin()); + n = n.next; + n.initialize(e.hash, e.key, null); + e = e.next; + } + } + } + } + + /** * Returns the size of this table. */ public int size() { @@ -715,7 +751,7 @@ protected void rehash () { ValueEntry[] oldTable = table; - table = new ValueEntry[oldTable.length * 2 + 1]; + table = new ValueEntry[oldTable.length * 2 + 1]; for (int i = oldTable.length-1; i >= 0; i--) { for (ValueEntry old = oldTable[i]; old != null;) { 1.2 +2 -1 xml-batik/sources/org/apache/batik/css/ExtendedElementCSSInlineStyle.java Index: ExtendedElementCSSInlineStyle.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/css/ExtendedElementCSSInlineStyle.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ExtendedElementCSSInlineStyle.java 2000/10/10 18:37:18 1.1 +++ ExtendedElementCSSInlineStyle.java 2001/10/17 14:47:26 1.2 @@ -14,9 +14,10 @@ * This interface extends the {@link org.w3c.dom.css.ElementCSSInlineStyle}. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: ExtendedElementCSSInlineStyle.java,v 1.1 2000/10/10 18:37:18 hillion Exp $ + * @version $Id: ExtendedElementCSSInlineStyle.java,v 1.2 2001/10/17 14:47:26 hillion Exp $ */ public interface ExtendedElementCSSInlineStyle extends ElementCSSInlineStyle { + /** * Whether the element that implements this interface has a specified * style attribute. 1.3 +11 -1 xml-batik/sources/org/apache/batik/css/HiddenChildElement.java Index: HiddenChildElement.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/css/HiddenChildElement.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- HiddenChildElement.java 2000/10/23 09:44:25 1.2 +++ HiddenChildElement.java 2001/10/17 14:47:26 1.3 @@ -15,7 +15,7 @@ * of another element without being added to the DOM tree. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: HiddenChildElement.java,v 1.2 2000/10/23 09:44:25 hillion Exp $ + * @version $Id: HiddenChildElement.java,v 1.3 2001/10/17 14:47:26 hillion Exp $ */ public interface HiddenChildElement { /** @@ -27,4 +27,14 @@ * Sets the parent element of this element. */ void setParentElement(Element elt); + + /** + * Sets the cascaded style of this element. + */ + CSSOMReadOnlyStyleDeclaration getCascadedStyle(); + + /** + * Sets the cascaded style of this element. + */ + void setCascadedStyle(CSSOMReadOnlyStyleDeclaration sd); } 1.2 +23 -2 xml-batik/sources/org/apache/batik/css/HiddenChildElementSupport.java Index: HiddenChildElementSupport.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/css/HiddenChildElementSupport.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- HiddenChildElementSupport.java 2000/10/24 11:41:50 1.1 +++ HiddenChildElementSupport.java 2001/10/17 14:47:26 1.2 @@ -15,7 +15,7 @@ * This class provides utility methods for HiddenChildElement support. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: HiddenChildElementSupport.java,v 1.1 2000/10/24 11:41:50 hillion Exp $ + * @version $Id: HiddenChildElementSupport.java,v 1.2 2001/10/17 14:47:26 hillion Exp $ */ public class HiddenChildElementSupport { /** @@ -27,7 +27,7 @@ /** * Returns the parent element. */ - public final static Element getParentElement(Element e) { + public static Element getParentElement(Element e) { Node n = e.getParentNode(); if (n == null) { if (e instanceof HiddenChildElement) { @@ -42,5 +42,26 @@ n = n.getParentNode(); } while (n != null); return null; + } + + /** + * Recursively imports the style from the 'src' element. + */ + public static void setStyle(Element e, + AbstractViewCSS ev, + Element src, + AbstractViewCSS srcv) { + CSSOMReadOnlyStyleDeclaration sd; + sd = (CSSOMReadOnlyStyleDeclaration)srcv.computeStyle(src, null); + ((HiddenChildElement)e).setCascadedStyle(sd); + sd.setContext(ev, e); + + for (Node en = e.getFirstChild(), sn = src.getFirstChild(); + en != null; + en = en.getNextSibling(), sn = sn.getNextSibling()) { + if (en.getNodeType() == Node.ELEMENT_NODE) { + setStyle((Element)en, ev, (Element)sn, srcv); + } + } } } 1.2 +7 -15 xml-batik/sources/org/apache/batik/css/PropertyMap.java Index: PropertyMap.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/css/PropertyMap.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- PropertyMap.java 2000/10/10 18:37:18 1.1 +++ PropertyMap.java 2001/10/17 14:47:26 1.2 @@ -13,7 +13,7 @@ * equality test made with '=='. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: PropertyMap.java,v 1.1 2000/10/10 18:37:18 hillion Exp $ + * @version $Id: PropertyMap.java,v 1.2 2001/10/17 14:47:26 hillion Exp $ */ public class PropertyMap { /** @@ -37,16 +37,10 @@ protected int count; /** - * The resizing threshold - */ - protected int threshold; - - /** * Creates a new table. */ public PropertyMap() { - table = new Entry[INITIAL_CAPACITY]; - threshold = (int)(INITIAL_CAPACITY * LOAD_FACTOR); + table = new Entry[INITIAL_CAPACITY]; } /** @@ -54,7 +48,6 @@ * @param t The table to copy. */ public PropertyMap(PropertyMap t) { - threshold = t.threshold; count = t.count; table = new Entry[t.table.length]; for (int i = 0; i < table.length; i++) { @@ -113,7 +106,8 @@ } // The key is not in the hash table - if (count++ >= threshold) { + int len = table.length; + if (count++ >= (len * 3) >>> 2) { rehash(); index = hash % table.length; } @@ -198,9 +192,8 @@ * Clears the map. */ public void clear() { - table = new Entry[INITIAL_CAPACITY]; - threshold = (int)(INITIAL_CAPACITY * LOAD_FACTOR); - count = 0; + table = new Entry[INITIAL_CAPACITY]; + count = 0; } /** @@ -209,8 +202,7 @@ protected void rehash () { Entry[] oldTable = table; - table = new Entry[oldTable.length * 2 + 1]; - threshold = (int)(table.length * LOAD_FACTOR); + table = new Entry[oldTable.length * 2 + 1]; for (int i = oldTable.length-1; i >= 0; i--) { for (Entry old = oldTable[i]; old != null;) { 1.1 xml-batik/sources/org/apache/batik/css/ElementWithBaseURI.java Index: ElementWithBaseURI.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.css; /** * This interface represents elements which are able to compute their * base URI. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> * @version $Id: ElementWithBaseURI.java,v 1.1 2001/10/17 14:47:26 hillion Exp $ */ public interface ElementWithBaseURI { /** * Returns this element's base URI. Must be absolute. */ String getBaseURI(); } 1.7 +3 -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.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- AbstractAttr.java 2001/10/17 12:02:07 1.6 +++ AbstractAttr.java 2001/10/17 14:47:26 1.7 @@ -20,7 +20,7 @@ * This class implements the {@link org.w3c.dom.Attr} interface. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: AbstractAttr.java,v 1.6 2001/10/17 12:02:07 tkormann Exp $ + * @version $Id: AbstractAttr.java,v 1.7 2001/10/17 14:47:26 hillion Exp $ */ public abstract class AbstractAttr extends AbstractParentNode implements Attr { /** @@ -195,14 +195,14 @@ * Called when a child node has been added. */ protected void nodeAdded(Node n) { - setSpecified(true); + setSpecified(true); } /** * Called when a child node is going to be removed. */ protected void nodeToBeRemoved(Node n) { - setSpecified(true); + setSpecified(true); } /** 1.10 +3 -2 xml-batik/sources/org/apache/batik/dom/AbstractDocument.java Index: AbstractDocument.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/AbstractDocument.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- AbstractDocument.java 2001/09/12 08:54:33 1.9 +++ AbstractDocument.java 2001/10/17 14:47:26 1.10 @@ -20,10 +20,11 @@ import org.apache.batik.dom.events.DocumentEventSupport; import org.apache.batik.dom.traversal.TraversalSupport; -import org.apache.batik.dom.util.SoftDoublyIndexedTable; import org.apache.batik.i18n.Localizable; import org.apache.batik.i18n.LocalizableSupport; +import org.apache.batik.util.SoftDoublyIndexedTable; + import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; @@ -44,7 +45,7 @@ * This class implements the {@link org.w3c.dom.Document} interface. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: AbstractDocument.java,v 1.9 2001/09/12 08:54:33 hillion Exp $ + * @version $Id: AbstractDocument.java,v 1.10 2001/10/17 14:47:26 hillion Exp $ */ public abstract class AbstractDocument extends AbstractParentNode 1.5 +39 -3 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.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- AbstractElement.java 2001/09/27 09:57:13 1.4 +++ AbstractElement.java 2001/10/17 14:47:26 1.5 @@ -8,6 +8,8 @@ package org.apache.batik.dom.svg; +import org.apache.batik.css.CSSOMReadOnlyStyleDeclaration; +import org.apache.batik.css.ElementWithBaseURI; import org.apache.batik.css.ElementWithID; import org.apache.batik.css.ElementWithPseudoClass; import org.apache.batik.css.HiddenChildElement; @@ -18,7 +20,7 @@ import org.apache.batik.dom.events.NodeEventTarget; -import org.apache.batik.dom.util.SoftDoublyIndexedTable; +import org.apache.batik.util.SoftDoublyIndexedTable; import org.w3c.dom.Attr; import org.w3c.dom.DOMException; @@ -33,11 +35,12 @@ * an element interoperable with the SVG elements. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: AbstractElement.java,v 1.4 2001/09/27 09:57:13 hillion Exp $ + * @version $Id: AbstractElement.java,v 1.5 2001/10/17 14:47:26 hillion Exp $ */ public abstract class AbstractElement extends org.apache.batik.dom.AbstractElement - implements ElementWithID, + implements ElementWithBaseURI, + ElementWithID, ElementWithPseudoClass, HiddenChildElement { @@ -52,6 +55,11 @@ protected transient SoftDoublyIndexedTable liveAttributeValues; /** + * The cascaded style, if any. + */ + protected transient CSSOMReadOnlyStyleDeclaration cascadedStyle; + + /** * Creates a new Element object. */ protected AbstractElement() { @@ -68,6 +76,20 @@ initializeAttributes(); } + // ElementWithBaseURI //////////////////////////////////////////// + + /** + * Returns this element's base URI. + */ + public String getBaseURI() { + try { + return new java.net.URL(((SVGOMDocument)ownerDocument).getURLObject(), + XMLBaseSupport.getXMLBase(this)).toString(); + } catch (java.net.MalformedURLException e) { + throw new RuntimeException(e.getMessage()); + } + } + // ElementWithID ///////////////////////////////////////////////// /** @@ -122,6 +144,20 @@ */ public void setParentElement(Element elt) { parentElement = elt; + } + + /** + * Sets the cascaded style of this element. + */ + public CSSOMReadOnlyStyleDeclaration getCascadedStyle() { + return cascadedStyle; + } + + /** + * Sets the cascaded style of this element. + */ + public void setCascadedStyle(CSSOMReadOnlyStyleDeclaration sd) { + cascadedStyle = sd; } /** 1.2 +3 -85 xml-batik/sources/org/apache/batik/extension/ExtensionElement.java Index: ExtensionElement.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/extension/ExtensionElement.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ExtensionElement.java 2001/05/10 13:36:06 1.1 +++ ExtensionElement.java 2001/10/17 14:47:26 1.2 @@ -8,42 +8,19 @@ package org.apache.batik.extension; -import org.apache.batik.css.ElementWithID; -import org.apache.batik.css.ElementWithPseudoClass; -import org.apache.batik.css.HiddenChildElement; -import org.apache.batik.css.HiddenChildElementSupport; - import org.apache.batik.dom.AbstractDocument; -import org.apache.batik.dom.AbstractElement; - -import org.w3c.dom.DOMException; -import org.w3c.dom.Element; -import org.w3c.dom.Node; +import org.apache.batik.dom.svg.AbstractElement; /** * This class implements the basic features an element must have in order * to be usable as a foreign element within an SVGOMDocument. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: ExtensionElement.java,v 1.1 2001/05/10 13:36:06 hillion Exp $ + * @version $Id: ExtensionElement.java,v 1.2 2001/10/17 14:47:26 hillion Exp $ */ -public abstract class ExtensionElement - extends AbstractElement - implements ElementWithID, - ElementWithPseudoClass, - HiddenChildElement { - - /** - * The element ID attribute name. - */ - protected final static String ID_NAME = "id"; +public abstract class ExtensionElement extends AbstractElement { /** - * The parent element. - */ - protected transient Element parentElement; - - /** * Creates a new Element object. */ protected ExtensionElement() { @@ -57,24 +34,6 @@ protected ExtensionElement(String name, AbstractDocument owner) { super(name, owner); } - - // HiddenChildElement ////////////////////////////////////////////////// - - /** - * The parent element of this element. - */ - public Element getParentElement() { - return parentElement; - } - - /** - * Sets the parent element. - */ - public void setParentElement(Element elt) { - parentElement = elt; - } - - // ExtendedNode ////////////////////////////////////////////////// /** * Tests whether this node is readonly. @@ -88,45 +47,4 @@ */ public void setReadonly(boolean v) { } - - // ElementWithID ///////////////////////////////////////////////// - - /** - * Sets the element ID attribute name. - * @param uri The namespace uri. - * @param s The attribute local name. - */ - public void setIDName(String uri, String s) { - if (uri != null || s == null || !s.equals(ID_NAME)) { - throw createDOMException - (DOMException.NO_MODIFICATION_ALLOWED_ERR, - "id.name", - new Object[] { s }); - } - } - - /** - * Returns the ID of this element or the empty string. - */ - public String getID() { - return getAttribute(ID_NAME); - } - - // ElementWithPseudoClass //////////////////////////////////////// - - /** - * Whether this element matches the given pseudo-class. - * This methods supports the :first-child pseudo class. - */ - public boolean matchPseudoClass(String pseudoClass) { - if (pseudoClass.equals("first-child")) { - Node n = getPreviousSibling(); - while (n != null && n.getNodeType() != ELEMENT_NODE) { - n = n.getPreviousSibling(); - } - return n == null; - } - return false; - } - }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]