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 2002/03/18 11:31:10 UTC

cvs commit: xml-batik/sources/org/apache/batik/css/engine/sac AbstractAttributeCondition.java AbstractCombinatorCondition.java AbstractDescendantSelector.java AbstractElementSelector.java AbstractSiblingSelector.java CSSAndCondition.java CSSAttributeCondition.java CSSBeginHyphenAttributeCondition.java CSSChildSelector.java CSSClassCondition.java CSSConditionFactory.java CSSConditionalSelector.java CSSDescendantSelector.java CSSDirectAdjacentSelector.java CSSElementSelector.java CSSIdCondition.java CSSLangCondition.java CSSOneOfAttributeCondition.java CSSPseudoClassCondition.java CSSPseudoElementSelector.java CSSSelectorFactory.java ExtendedCondition.java ExtendedSelector.java

hillion     02/03/18 02:31:10

  Added:       sources/org/apache/batik/css/engine/sac
                        AbstractAttributeCondition.java
                        AbstractCombinatorCondition.java
                        AbstractDescendantSelector.java
                        AbstractElementSelector.java
                        AbstractSiblingSelector.java CSSAndCondition.java
                        CSSAttributeCondition.java
                        CSSBeginHyphenAttributeCondition.java
                        CSSChildSelector.java CSSClassCondition.java
                        CSSConditionFactory.java
                        CSSConditionalSelector.java
                        CSSDescendantSelector.java
                        CSSDirectAdjacentSelector.java
                        CSSElementSelector.java CSSIdCondition.java
                        CSSLangCondition.java
                        CSSOneOfAttributeCondition.java
                        CSSPseudoClassCondition.java
                        CSSPseudoElementSelector.java
                        CSSSelectorFactory.java ExtendedCondition.java
                        ExtendedSelector.java
  Log:
  - css engine commit 2
  
  Revision  Changes    Path
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/AbstractAttributeCondition.java
  
  Index: AbstractAttributeCondition.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.engine.sac;
  
  import org.w3c.css.sac.AttributeCondition;
  
  /**
   * This class provides an abstract implementation of the {@link
   * org.w3c.css.sac.AttributeCondition} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: AbstractAttributeCondition.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  public abstract class AbstractAttributeCondition
      implements AttributeCondition,
  	       ExtendedCondition {
  
      /**
       * The attribute value.
       */
      protected String value;
  
      /**
       * Creates a new AbstractAttributeCondition object.
       */
      protected AbstractAttributeCondition(String value) {
  	this.value = value;
      }
  
      /**
       * Indicates whether some other object is "equal to" this one.
       * @param obj the reference object with which to compare.
       */
      public boolean equals(Object obj) {
  	if (obj == null || !(obj.getClass() != getClass())) {
  	    return false;
  	}
  	AbstractAttributeCondition c = (AbstractAttributeCondition)obj;
  	return c.value.equals(value);
      }
  
      /**
       * Returns the specificity of this condition.
       */
      public int getSpecificity() {
  	return 1 << 8;
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.AttributeCondition#getValue()}.
       */
      public String getValue() {
  	return value;
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/AbstractCombinatorCondition.java
  
  Index: AbstractCombinatorCondition.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.engine.sac;
  
  import org.w3c.css.sac.CombinatorCondition;
  import org.w3c.css.sac.Condition;
  
  /**
   * This class provides an abstract implementation of the {@link
   * org.w3c.css.sac.CombinatorCondition} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: AbstractCombinatorCondition.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  public abstract class AbstractCombinatorCondition
      implements CombinatorCondition,
                 ExtendedCondition {
  
      /**
       * The first condition.
       */
      protected Condition firstCondition;
  
      /**
       * The second condition.
       */
      protected Condition secondCondition;
  
      /**
       * Creates a new CombinatorCondition object.
       */
      protected AbstractCombinatorCondition(Condition c1, Condition c2) {
  	firstCondition = c1;
  	secondCondition = c2;
      }
  
      /**
       * Indicates whether some other object is "equal to" this one.
       * @param obj the reference object with which to compare.
       */
      public boolean equals(Object obj) {
  	if (obj == null || !(obj.getClass() != getClass())) {
  	    return false;
  	}
  	AbstractCombinatorCondition c = (AbstractCombinatorCondition)obj;
  	return c.firstCondition.equals(firstCondition) &&
  	       c.secondCondition.equals(secondCondition);
      }
  
      /**
       * Returns the specificity of this condition.
       */
      public int getSpecificity() {
  	return ((ExtendedCondition)getFirstCondition()).getSpecificity() +
                 ((ExtendedCondition)getSecondCondition()).getSpecificity();
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.CombinatorCondition#getFirstCondition()}.
       */    
      public Condition getFirstCondition() {
  	return firstCondition;
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.CombinatorCondition#getSecondCondition()}.
       */    
      public Condition getSecondCondition() {
  	return secondCondition;
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/AbstractDescendantSelector.java
  
  Index: AbstractDescendantSelector.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.engine.sac;
  
  import org.w3c.css.sac.DescendantSelector;
  import org.w3c.css.sac.Selector;
  import org.w3c.css.sac.SimpleSelector;
  
  /**
   * This class provides an abstract implementation of the {@link
   * org.w3c.css.sac.DescendantSelector} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: AbstractDescendantSelector.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  public abstract class AbstractDescendantSelector
      implements DescendantSelector,
  	       ExtendedSelector {
  
      /**
       * The ancestor selector.
       */
      protected Selector ancestorSelector;
  
      /**
       * The simple selector.
       */
      protected SimpleSelector simpleSelector;
  
      /**
       * Creates a new DescendantSelector object.
       */
      protected AbstractDescendantSelector(Selector ancestor,
                                           SimpleSelector simple) {
  	ancestorSelector = ancestor;
  	simpleSelector = simple;
      }
  
      /**
       * Indicates whether some other object is "equal to" this one.
       * @param obj the reference object with which to compare.
       */
      public boolean equals(Object obj) {
  	if (obj == null || !(obj.getClass() != getClass())) {
  	    return false;
  	}
  	AbstractDescendantSelector s = (AbstractDescendantSelector)obj;
  	return s.simpleSelector.equals(simpleSelector);
      }
  
      /**
       * Returns the specificity of this selector.
       */
      public int getSpecificity() {
  	return ((ExtendedSelector)ancestorSelector).getSpecificity() +
         	       ((ExtendedSelector)simpleSelector).getSpecificity();
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.DescendantSelector#getAncestorSelector()}.
       */    
      public Selector getAncestorSelector() {
  	return ancestorSelector;
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.DescendantSelector#getSimpleSelector()}.
       */    
      public SimpleSelector getSimpleSelector() {
  	return simpleSelector;
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/AbstractElementSelector.java
  
  Index: AbstractElementSelector.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.engine.sac;
  
  import org.w3c.css.sac.ElementSelector;
  
  /**
   * This class provides an abstract implementation of the ElementSelector
   * interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: AbstractElementSelector.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  public abstract class AbstractElementSelector
      implements ElementSelector,
  	       ExtendedSelector {
  
      /**
       * The namespace URI.
       */
      protected String namespaceURI;
  
      /**
       * The local name.
       */
      protected String localName;
  
      /**
       * Creates a new ElementSelector object.
       */
      protected AbstractElementSelector(String uri, String name) {
  	namespaceURI = uri;
  	localName    = name;
      }
  
      /**
       * Indicates whether some other object is "equal to" this one.
       * @param obj the reference object with which to compare.
       */
      public boolean equals(Object obj) {
  	if (obj == null || !(obj.getClass() != getClass())) {
  	    return false;
  	}
  	AbstractElementSelector s = (AbstractElementSelector)obj;
  	return s.namespaceURI.equals(namespaceURI) &&
  	       s.localName.equals(localName);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.ElementSelector#getNamespaceURI()}.
       */
      public String getNamespaceURI() {
  	return namespaceURI;
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.ElementSelector#getLocalName()}.
       */
      public String getLocalName() {
  	return localName;
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/AbstractSiblingSelector.java
  
  Index: AbstractSiblingSelector.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.engine.sac;
  
  import org.w3c.css.sac.SiblingSelector;
  import org.w3c.css.sac.Selector;
  import org.w3c.css.sac.SimpleSelector;
  
  /**
   * This class provides an abstract implementation of the {@link
   * org.w3c.css.sac.SiblingSelector} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: AbstractSiblingSelector.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  public abstract class AbstractSiblingSelector
      implements SiblingSelector,
  	       ExtendedSelector {
  
      /**
       * The node type.
       */
      protected short nodeType;
  
      /**
       * The selector.
       */
      protected Selector selector;
  
      /**
       * The simple selector.
       */
      protected SimpleSelector simpleSelector;
  
      /**
       * Creates a new SiblingSelector object.
       */
      protected AbstractSiblingSelector(short type,
                                        Selector sel,
                                        SimpleSelector simple) {
          nodeType = type;
  	selector = sel;
  	simpleSelector = simple;
      }
  
      /**
       * Returns the node type.
       */
      public short getNodeType() {
          return nodeType;
      }
  
      /**
       * Indicates whether some other object is "equal to" this one.
       * @param obj the reference object with which to compare.
       */
      public boolean equals(Object obj) {
  	if (obj == null || !(obj.getClass() != getClass())) {
  	    return false;
  	}
  	AbstractSiblingSelector s = (AbstractSiblingSelector)obj;
  	return s.simpleSelector.equals(simpleSelector);
      }
  
      /**
       * Returns the specificity of this selector.
       */
      public int getSpecificity() {
  	return ((ExtendedSelector)selector).getSpecificity() +
         	       ((ExtendedSelector)simpleSelector).getSpecificity();
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.SiblingSelector#getSelector()}.
       */    
      public Selector getSelector() {
  	return selector;
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.SiblingSelector#getSiblingSelector()}.
       */    
      public SimpleSelector getSiblingSelector() {
  	return simpleSelector;
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/CSSAndCondition.java
  
  Index: CSSAndCondition.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.engine.sac;
  
  import org.w3c.css.sac.Condition;
  import org.w3c.dom.Element;
  
  /**
   * This class provides an implementation of the
   * {@link org.w3c.css.sac.CombinatorCondition} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: CSSAndCondition.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  public class CSSAndCondition extends AbstractCombinatorCondition {
      /**
       * Creates a new CombinatorCondition object.
       */
      public CSSAndCondition(Condition c1, Condition c2) {
  	super(c1, c2);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.Condition#getConditionType()}.
       */    
      public short getConditionType() {
  	return SAC_AND_CONDITION;
      }
  
      /**
       * Tests whether this condition matches the given element.
       */
      public boolean match(Element e, String pseudoE) {
  	return ((ExtendedCondition)getFirstCondition()).match(e, pseudoE) &&
                 ((ExtendedCondition)getSecondCondition()).match(e, pseudoE);
      }
  
      /**
       * Returns a text representation of this object.
       */
      public String toString() {
  	return "" + getFirstCondition() + getSecondCondition();
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/CSSAttributeCondition.java
  
  Index: CSSAttributeCondition.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.engine.sac;
  
  import org.w3c.dom.Element;
  
  /**
   * This class provides an implementation of the
   * {@link org.w3c.css.sac.AttributeCondition} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: CSSAttributeCondition.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  public class CSSAttributeCondition extends AbstractAttributeCondition {
      /**
       * The attribute's local name.
       */
      protected String localName;
  
      /**
       * The attribute's namespace URI.
       */
      protected String namespaceURI;
  
      /**
       * Whether this condition applies to specified attributes.
       */
      protected boolean specified;
  
      /**
       * Creates a new CSSAttributeCondition object.
       */
      public CSSAttributeCondition(String localName,
                                   String namespaceURI,
                                   boolean specified,
                                   String value) {
  	super(value);
  	this.localName = localName;
  	this.namespaceURI = namespaceURI;
  	this.specified = specified;
      }
  
      /**
       * Indicates whether some other object is "equal to" this one.
       * @param obj the reference object with which to compare.
       */
      public boolean equals(Object obj) {
  	if (!super.equals(obj)) {
  	    return false;
  	}
  	CSSAttributeCondition c = (CSSAttributeCondition)obj;
  	return c.namespaceURI.equals(namespaceURI) &&
  	       c.localName.equals(localName) &&
  	       c.specified == specified;
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.Condition#getConditionType()}.
       */    
      public short getConditionType() {
  	return SAC_ATTRIBUTE_CONDITION;
      }
      
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.AttributeCondition#getNamespaceURI()}.
       */    
      public String getNamespaceURI() {
  	return namespaceURI;
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.AttributeCondition#getLocalName()}.
       */
      public String getLocalName() {
  	return localName;
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.AttributeCondition#getSpecified()}.
       */
      public boolean getSpecified() {
  	return specified;
      }
  
      /**
       * Tests whether this condition matches the given element.
       */
      public boolean match(Element e, String pseudoE) {
  	String val = getValue();
  	if (val == null) {
  	    return !e.getAttribute(getLocalName()).equals("");
  	}
  	return e.getAttribute(getLocalName()).equals(val);
      }
  
      /**
       * Returns a text representation of this object.
       */
      public String toString() {
  	if (value == null) {
  	    return "[" + localName + "]";
  	}
  	return "[" + localName + "=\"" + value + "\"]";
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/CSSBeginHyphenAttributeCondition.java
  
  Index: CSSBeginHyphenAttributeCondition.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.engine.sac;
  
  import org.w3c.dom.Element;
  
  /**
   * This class provides an implementation of the
   * {@link org.w3c.css.sac.AttributeCondition} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: CSSBeginHyphenAttributeCondition.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  public class CSSBeginHyphenAttributeCondition
      extends CSSAttributeCondition {
  
      /**
       * Creates a new CSSAttributeCondition object.
       */
      public CSSBeginHyphenAttributeCondition(String localName,
  					      String namespaceURI,
  					      boolean specified,
  					      String value) {
  	super(localName, namespaceURI, specified, value);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.Condition#getConditionType()}.
       */    
      public short getConditionType() {
  	return SAC_BEGIN_HYPHEN_ATTRIBUTE_CONDITION;
      }
      
      /**
       * Tests whether this condition matches the given element.
       */
      public boolean match(Element e, String pseudoE) {
  	return e.getAttribute(getLocalName()).startsWith(getValue());
      }
  
      /**
       * Returns a text representation of this object.
       */
      public String toString() {
  	return "[" + getLocalName() + "|=\"" + getValue() + "\"]";
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/CSSChildSelector.java
  
  Index: CSSChildSelector.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.engine.sac;
  
  import org.w3c.css.sac.Selector;
  import org.w3c.css.sac.SimpleSelector;
  import org.w3c.dom.Element;
  import org.w3c.dom.Node;
  
  /**
   * This class provides an implementation of the
   * {@link org.w3c.css.sac.DescendantSelector} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: CSSChildSelector.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  public class CSSChildSelector extends AbstractDescendantSelector {
  
      /**
       * Creates a new CSSChildSelector object.
       */
      public CSSChildSelector(Selector ancestor, SimpleSelector simple) {
  	super(ancestor, simple);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.Selector#getSelectorType()}.
       */
      public short getSelectorType() {
  	return SAC_CHILD_SELECTOR;
      }
  
      /**
       * Tests whether this selector matches the given element.
       */
      public boolean match(Element e, String pseudoE) {
  	Node n = e.getParentNode();
  	if (n != null && n.getNodeType() == Node.ELEMENT_NODE) {
  	    return ((ExtendedSelector)getAncestorSelector()).match((Element)n,
                                                                     null) &&
  		   ((ExtendedSelector)getSimpleSelector()).match(e, pseudoE);
  	}
  	return false;
      }
  
      /**
       * Returns a representation of the selector.
       */
      public String toString() {
  	SimpleSelector s = getSimpleSelector();
  	if (s.getSelectorType() == SAC_PSEUDO_ELEMENT_SELECTOR) {
  	    return "" + getAncestorSelector() + s;
  	}
  	return getAncestorSelector() + " > " + s;
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/CSSClassCondition.java
  
  Index: CSSClassCondition.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.engine.sac;
  
  import org.apache.batik.css.engine.CSSStylableElement;
  
  import org.w3c.dom.Element;
  
  /**
   * This class provides an implementation of the
   * {@link org.w3c.css.sac.AttributeCondition} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: CSSClassCondition.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  public class CSSClassCondition extends CSSAttributeCondition {
  
      /**
       * Creates a new CSSAttributeCondition object.
       */
      public CSSClassCondition(String namespaceURI,
                               String value) {
  	super("class", namespaceURI, true, value);
      }
      
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.Condition#getConditionType()}.
       */    
      public short getConditionType() {
  	return SAC_CLASS_CONDITION;
      }
      
      /**
       * Tests whether this condition matches the given element.
       */
      public boolean match(Element e, String pseudoE) {
  	String attr = ((CSSStylableElement)e).getCSSClass();
  	String val = getValue();
  	int i = attr.indexOf(val);
  	if (i == -1) {
  	    return false;
  	}
  	if (i != 0 && !Character.isSpaceChar(attr.charAt(i - 1))) {
  	    return false;
  	}
  	int j = i + val.length();
  	return (j == attr.length() ||
  		(j < attr.length() && Character.isSpaceChar(attr.charAt(j))));
      }
  
      /**
       * Returns a text representation of this object.
       */
      public String toString() {
  	return "." + getValue();
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/CSSConditionFactory.java
  
  Index: CSSConditionFactory.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.engine.sac;
  
  import org.w3c.css.sac.AttributeCondition;
  import org.w3c.css.sac.CombinatorCondition;
  import org.w3c.css.sac.Condition;
  import org.w3c.css.sac.ConditionFactory;
  import org.w3c.css.sac.ContentCondition;
  import org.w3c.css.sac.CSSException;
  import org.w3c.css.sac.LangCondition;
  import org.w3c.css.sac.NegativeCondition;
  import org.w3c.css.sac.PositionalCondition;
  
  
  /**
   * This class provides an implementation of the
   * {@link org.w3c.css.sac.ConditionFactory} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: CSSConditionFactory.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  public class CSSConditionFactory implements ConditionFactory {
  
      /**
       * The instance of this class.
       */
      public final static ConditionFactory INSTANCE = new CSSConditionFactory();
  
      /**
       * This class does not need to be instantiated.
       */
      protected CSSConditionFactory() {
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * ConditionFactory#createAndCondition(Condition,Condition)}.
       */    
      public CombinatorCondition createAndCondition(Condition first,
                                                    Condition second)
  	throws CSSException {
  	return new CSSAndCondition(first, second);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * ConditionFactory#createOrCondition(Condition,Condition)}.
       */    
      public CombinatorCondition createOrCondition(Condition first,
                                                   Condition second)
  	throws CSSException {
  	throw new CSSException("Not implemented in CSS2");
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.ConditionFactory#createNegativeCondition(Condition)}.
       */    
      public NegativeCondition createNegativeCondition(Condition condition)
  	throws CSSException {
  	throw new CSSException("Not implemented in CSS2");
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * ConditionFactory#createPositionalCondition(int,boolean,boolean)}.
       */    
      public PositionalCondition createPositionalCondition(int position, 
  							 boolean typeNode, 
  							 boolean type)
  	throws CSSException {
  	throw new CSSException("Not implemented in CSS2");
      }
      
      /**
       * <b>SAC</b>: Implements {@link
       *ConditionFactory#createAttributeCondition(String,String,boolean,String)}.
       */    
      public AttributeCondition createAttributeCondition(String localName,
  						       String namespaceURI,
  						       boolean specified,
  						       String value)
  	throws CSSException {
  	return new CSSAttributeCondition(localName, namespaceURI, specified,
                                             value);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.ConditionFactory#createIdCondition(String)}.
       */    
      public AttributeCondition createIdCondition(String value)
          throws CSSException {
  	return new CSSIdCondition(value);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.ConditionFactory#createLangCondition(String)}.
       */    
      public LangCondition createLangCondition(String lang) throws CSSException {
  	return new CSSLangCondition(lang);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
   ConditionFactory#createOneOfAttributeCondition(String,String,boolean,String)}.
       */    
      public AttributeCondition createOneOfAttributeCondition(String localName,
  							    String nsURI,
  							    boolean specified,
  							    String value)
  	throws CSSException {
  	return new CSSOneOfAttributeCondition(localName, nsURI, specified,
                                                  value);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * ConditionFactory#createBeginHyphenAttributeCondition(String,String,boolean,String)}.
       */    
      public AttributeCondition createBeginHyphenAttributeCondition
          (String localName,
           String namespaceURI,
           boolean specified,
           String value)
  	throws CSSException {
  	return new CSSBeginHyphenAttributeCondition
  	    (localName, namespaceURI, specified, value);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.ConditionFactory#createClassCondition(String,String)}.
       */    
      public AttributeCondition createClassCondition(String namespaceURI,
  						   String value)
  	throws CSSException {
  	return new CSSClassCondition(namespaceURI, value);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * ConditionFactory#createPseudoClassCondition(String,String)}.
       */    
      public AttributeCondition createPseudoClassCondition(String namespaceURI,
  							 String value)
  	throws CSSException {
  	return new CSSPseudoClassCondition(namespaceURI, value);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.ConditionFactory#createOnlyChildCondition()}.
       */    
      public Condition createOnlyChildCondition() throws CSSException {
  	throw new CSSException("Not implemented in CSS2");
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.ConditionFactory#createOnlyTypeCondition()}.
       */    
      public Condition createOnlyTypeCondition() throws CSSException {
  	throw new CSSException("Not implemented in CSS2");
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.ConditionFactory#createContentCondition(String)}.
       */    
      public ContentCondition createContentCondition(String data)
          throws CSSException {
  	throw new CSSException("Not implemented in CSS2");
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/CSSConditionalSelector.java
  
  Index: CSSConditionalSelector.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.engine.sac;
  
  import org.w3c.css.sac.Condition;
  import org.w3c.css.sac.ConditionalSelector;
  import org.w3c.css.sac.SimpleSelector;
  import org.w3c.dom.Element;
  
  /**
   * This class provides an implementation of the
   * {@link org.w3c.css.sac.ConditionalSelector} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: CSSConditionalSelector.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  public class CSSConditionalSelector
      implements ConditionalSelector,
  	       ExtendedSelector {
  
      /**
       * The simple selector.
       */
      protected SimpleSelector simpleSelector;
  
      /**
       * The condition.
       */
      protected Condition condition;
  
      /**
       * Creates a new ConditionalSelector object.
       */
      public CSSConditionalSelector(SimpleSelector s, Condition c) {
  	simpleSelector = s;
  	condition      = c;
      }
  
      /**
       * Indicates whether some other object is "equal to" this one.
       * @param obj the reference object with which to compare.
       */
      public boolean equals(Object obj) {
  	if (obj == null || !(obj.getClass() != getClass())) {
  	    return false;
  	}
  	CSSConditionalSelector s = (CSSConditionalSelector)obj;
  	return s.simpleSelector.equals(simpleSelector) &&
  	       s.condition.equals(condition);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.Selector#getSelectorType()}.
       */
      public short getSelectorType() {
  	return SAC_CONDITIONAL_SELECTOR;
      }
  
      /**
       * Tests whether this selector matches the given element.
       */
      public boolean match(Element e, String pseudoE) {
  	return ((ExtendedSelector)getSimpleSelector()).match(e, pseudoE) &&
  	       ((ExtendedCondition)getCondition()).match(e, pseudoE);
      }
  
      /**
       * Returns the specificity of this selector.
       */
      public int getSpecificity() {
  	return ((ExtendedSelector)getSimpleSelector()).getSpecificity() +
  	       ((ExtendedCondition)getCondition()).getSpecificity();
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.ConditionalSelector#getSimpleSelector()}.
       */    
      public SimpleSelector getSimpleSelector() {
  	return simpleSelector;
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.ConditionalSelector#getCondition()}.
       */    
      public Condition getCondition() {
  	return condition;
      }
  
      /**
       * Returns a representation of the selector.
       */
      public String toString() {
  	return "" + simpleSelector + condition;
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/CSSDescendantSelector.java
  
  Index: CSSDescendantSelector.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.engine.sac;
  
  import org.w3c.css.sac.Selector;
  import org.w3c.css.sac.SimpleSelector;
  import org.w3c.dom.Element;
  import org.w3c.dom.Node;
  
  /**
   * This class provides an implementation for the
   * {@link org.w3c.css.sac.DescendantSelector} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: CSSDescendantSelector.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  public class CSSDescendantSelector extends AbstractDescendantSelector {
  
      /**
       * Creates a new CSSDescendantSelector object.
       */
      public CSSDescendantSelector(Selector ancestor, SimpleSelector simple) {
  	super(ancestor, simple);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.Selector#getSelectorType()}.
       */
      public short getSelectorType() {
  	return SAC_DESCENDANT_SELECTOR;
      }
  
      /**
       * Tests whether this selector matches the given element.
       */
      public boolean match(Element e, String pseudoE) {
  	ExtendedSelector p = (ExtendedSelector)getAncestorSelector();
  	for (Node n = e.getParentNode(); n != null; n = n.getParentNode()) {
  	    if (n.getNodeType() == Node.ELEMENT_NODE) {
  		if (n.getNodeType() == Node.ELEMENT_NODE &&
  		    p.match((Element)n, null)) {
  		    return
                          ((ExtendedSelector)getSimpleSelector()).match(e,
                                                                        pseudoE);
  		}
  	    }
  	}
  	return false;
      }
  
      /**
       * Returns a representation of the selector.
       */
      public String toString() {
  	return getAncestorSelector() + " " + getSimpleSelector();
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/CSSDirectAdjacentSelector.java
  
  Index: CSSDirectAdjacentSelector.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.engine.sac;
  
  import org.w3c.css.sac.Selector;
  import org.w3c.css.sac.SimpleSelector;
  import org.w3c.dom.Element;
  import org.w3c.dom.Node;
  
  /**
   * This class provides an implementation for the
   * {@link org.w3c.css.sac.DescendantSelector} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: CSSDirectAdjacentSelector.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  
  public class CSSDirectAdjacentSelector extends AbstractSiblingSelector {
  
      /**
       * Creates a new CSSDirectAdjacentSelector object.
       */
      public CSSDirectAdjacentSelector(short type,
                                       Selector parent,
                                       SimpleSelector simple) {
  	super(type, parent, simple);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.Selector#getSelectorType()}.
       */
      public short getSelectorType() {
  	return SAC_DIRECT_ADJACENT_SELECTOR;
      }
  
      /**
       * Tests whether this selector matches the given element.
       */
      public boolean match(Element e, String pseudoE) {
  	Node n = e;
          while ((n = n.getPreviousSibling()) != null &&
                 n.getNodeType() != Node.ELEMENT_NODE);
  	if (n != null) {
  	    return ((ExtendedSelector)getSelector()).match((Element)n,
                                                                   null) &&
  		   ((ExtendedSelector)getSiblingSelector()).match(e, pseudoE);
  	}	
  	return false;
      }
  
      /**
       * Returns a representation of the selector.
       */
      public String toString() {
  	return getSelector() + " + " + getSiblingSelector();
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/CSSElementSelector.java
  
  Index: CSSElementSelector.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.engine.sac;
  
  import org.w3c.dom.Element;
  
  /**
   * This class implements the {@link org.w3c.css.sac.ElementSelector} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: CSSElementSelector.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  public class CSSElementSelector extends AbstractElementSelector {
  
      /**
       * Creates a new ElementSelector object.
       */
      public CSSElementSelector(String uri, String name) {
  	super(uri, name);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.Selector#getSelectorType()}.
       */
      public short getSelectorType() {
  	return SAC_ELEMENT_NODE_SELECTOR;
      }
  
      /**
       * Tests whether this selector matches the given element.
       */
      public boolean match(Element e, String pseudoE) {
  	String name = getLocalName();
  	if (name == null) {
  	    return true;
  	}
  	return (e.getPrefix() == null)
  	    ? e.getNodeName().equalsIgnoreCase(name)
  	    : e.getLocalName().equalsIgnoreCase(name);
      }
  
      /**
       * Returns the specificity of this selector.
       */
      public int getSpecificity() {
  	return (getLocalName() == null) ? 0 : 1;
      }
  
      /**
       * Returns a representation of the selector.
       */
      public String toString() {
  	String name = getLocalName();
  	if (name == null) {
  	    return "*";
  	}
  	return name;
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/CSSIdCondition.java
  
  Index: CSSIdCondition.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.engine.sac;
  
  import org.apache.batik.css.engine.CSSStylableElement;
  import org.w3c.dom.Element;
  
  /**
   * This class provides an implementation of the
   * {@link org.w3c.css.sac.AttributeCondition} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: CSSIdCondition.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  
  public class CSSIdCondition extends AbstractAttributeCondition {
      /**
       * Creates a new CSSAttributeCondition object.
       */
      public CSSIdCondition(String value) {
  	super(value);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.Condition#getConditionType()}.
       */    
      public short getConditionType() {
  	return SAC_ID_CONDITION;
      }
      
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.AttributeCondition#getNamespaceURI()}.
       */    
      public String getNamespaceURI() {
  	return null;
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.AttributeCondition#getLocalName()}.
       */
      public String getLocalName() {
  	return "id";
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.AttributeCondition#getSpecified()}.
       */
      public boolean getSpecified() {
  	return true;
      }
  
      /**
       * Tests whether this condition matches the given element.
       */
      public boolean match(Element e, String pseudoE) {
  	return (e instanceof CSSStylableElement)
  	    ? ((CSSStylableElement)e).getXMLId().equals(getValue())
  	    : false;
      }
  
      /**
       * Returns the specificity of this condition.
       */
      public int getSpecificity() {
  	return 1 << 16;
      }
  
      /**
       * Returns a text representation of this object.
       */
      public String toString() {
  	return "#" + getValue();
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/CSSLangCondition.java
  
  Index: CSSLangCondition.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.engine.sac;
  
  import org.w3c.css.sac.LangCondition;
  import org.w3c.dom.Element;
  
  /**
   * This class provides an implementation of the
   * {@link org.w3c.css.sac.LangCondition} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: CSSLangCondition.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  
  public class CSSLangCondition
      implements LangCondition,
  	       ExtendedCondition {
      /**
       * The language.
       */
      protected String lang;
  
      /**
       * Creates a new LangCondition object.
       */
      public CSSLangCondition(String lang) {
  	this.lang = lang;
      }
  
      /**
       * Indicates whether some other object is "equal to" this one.
       * @param obj the reference object with which to compare.
       */
      public boolean equals(Object obj) {
  	if (obj == null || !(obj.getClass() != getClass())) {
  	    return false;
  	}
  	CSSLangCondition c = (CSSLangCondition)obj;
  	return c.lang.equals(lang);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.Condition#getConditionType()}.
       */    
      public short getConditionType() {
  	return SAC_LANG_CONDITION;
      }
  
      /**
       * <b>SAC</b>: Implements {@link org.w3c.css.sac.LangCondition#getLang()}.
       */
      public String getLang() {
  	return lang;
      }
  
      /**
       * Returns the specificity of this condition.
       */
      public int getSpecificity() {
  	return 1 << 8;
      }
  
      /**
       * Tests whether this condition matches the given element.
       */
      public boolean match(Element e, String pseudoE) {
  	return e.getAttribute("lang").startsWith(getLang());
      }
  
      /**
       * Returns a text representation of this object.
       */
      public String toString() {
  	return ":lang(" + lang + ")";
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/CSSOneOfAttributeCondition.java
  
  Index: CSSOneOfAttributeCondition.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.engine.sac;
  
  import org.w3c.dom.Element;
  
  /**
   * This class provides an implementation of the
   * {@link org.w3c.css.sac.AttributeCondition} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: CSSOneOfAttributeCondition.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  public class CSSOneOfAttributeCondition extends CSSAttributeCondition {
      /**
       * Creates a new CSSAttributeCondition object.
       */
      public CSSOneOfAttributeCondition(String localName,
                                        String namespaceURI,
                                        boolean specified,
                                        String value) {
  	super(localName, namespaceURI, specified, value);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.Condition#getConditionType()}.
       */    
      public short getConditionType() {
  	return SAC_ONE_OF_ATTRIBUTE_CONDITION;
      }
      
      /**
       * Tests whether this condition matches the given element.
       */
      public boolean match(Element e, String pseudoE) {
  	String attr = e.getAttribute(getLocalName());
  	String val = getValue();
  	int i = attr.indexOf(val);
  	if (i == -1) {
  	    return false;
  	}
  	if (i != 0 && !Character.isSpaceChar(attr.charAt(i - 1))) {
  	    return false;
  	}
  	int j = i + val.length();
  	return (j == attr.length() ||
  		(j < attr.length() && Character.isSpaceChar(attr.charAt(j))));
      }
  
      /**
       * Returns a text representation of this object.
       */
      public String toString() {
  	return "[" + getLocalName() + "~=\"" + getValue() + "\"]";
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/CSSPseudoClassCondition.java
  
  Index: CSSPseudoClassCondition.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.engine.sac;
  
  import org.apache.batik.css.engine.CSSStylableElement;
  import org.w3c.dom.Element;
  
  /**
   * This class provides an implementation of the
   * {@link org.w3c.css.sac.AttributeCondition} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: CSSPseudoClassCondition.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  public class CSSPseudoClassCondition extends AbstractAttributeCondition {
      /**
       * The namespaceURI.
       */
      protected String namespaceURI;
  
      /**
       * Creates a new CSSAttributeCondition object.
       */
      public CSSPseudoClassCondition(String namespaceURI, String value) {
  	super(value);
  	this.namespaceURI = namespaceURI;
      }
  
      /**
       * Indicates whether some other object is "equal to" this one.
       * @param obj the reference object with which to compare.
       */
      public boolean equals(Object obj) {
  	if (!super.equals(obj)) {
  	    return false;
  	}
  	CSSPseudoClassCondition c = (CSSPseudoClassCondition)obj;
  	return c.namespaceURI.equals(namespaceURI);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.Condition#getConditionType()}.
       */    
      public short getConditionType() {
  	return SAC_PSEUDO_CLASS_CONDITION;
      }
      
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.AttributeCondition#getNamespaceURI()}.
       */    
      public String getNamespaceURI() {
  	return namespaceURI;
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.AttributeCondition#getLocalName()}.
       */
      public String getLocalName() {
  	return null;
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.AttributeCondition#getSpecified()}.
       */
      public boolean getSpecified() {
  	return false;
      }
  
      /**
       * Tests whether this selector matches the given element.
       */
      public boolean match(Element e, String pseudoE) {
  	return (e instanceof CSSStylableElement)
  	    ? ((CSSStylableElement)e).isPseudoInstanceOf(getValue())
  	    : false;
      }
  
      /**
       * Returns a text representation of this object.
       */
      public String toString() {
  	return ":" + getValue();
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/CSSPseudoElementSelector.java
  
  Index: CSSPseudoElementSelector.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.engine.sac;
  
  import org.w3c.dom.Element;
  
  /**
   * This class implements the {@link org.w3c.css.sac.ElementSelector} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: CSSPseudoElementSelector.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  public class CSSPseudoElementSelector extends AbstractElementSelector {
  
      /**
       * Creates a new CSSPseudoElementSelector object.
       */
      public CSSPseudoElementSelector(String uri, String name) {
  	super(uri, name);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.Selector#getSelectorType()}.
       */
      public short getSelectorType() {
  	return SAC_PSEUDO_ELEMENT_SELECTOR;
      }
  
      /**
       * Tests whether this selector matches the given element.
       */
      public boolean match(Element e, String pseudoE) {
  	return getLocalName().equalsIgnoreCase(pseudoE);
      }
  
      /**
       * Returns the specificity of this selector.
       */
      public int getSpecificity() {
  	return 0;
      }
  
      /**
       * Returns a representation of the selector.
       */
      public String toString() {
  	return ":" + getLocalName();
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/CSSSelectorFactory.java
  
  Index: CSSSelectorFactory.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.engine.sac;
  
  import org.w3c.css.sac.CSSException;
  import org.w3c.css.sac.CharacterDataSelector;
  import org.w3c.css.sac.Condition;
  import org.w3c.css.sac.ConditionalSelector;
  import org.w3c.css.sac.DescendantSelector;
  import org.w3c.css.sac.ElementSelector;
  import org.w3c.css.sac.NegativeSelector;
  import org.w3c.css.sac.ProcessingInstructionSelector;
  import org.w3c.css.sac.Selector;
  import org.w3c.css.sac.SelectorFactory;
  import org.w3c.css.sac.SiblingSelector;
  import org.w3c.css.sac.SimpleSelector;
  
  /**
   * This class implements the {@link org.w3c.css.sac.SelectorFactory} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: CSSSelectorFactory.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  public class CSSSelectorFactory implements SelectorFactory {
  
      /**
       * The instance of this class.
       */
      public final static SelectorFactory INSTANCE = new CSSSelectorFactory();
  
      /**
       * This class does not need to be instantiated.
       */
      protected CSSSelectorFactory() {
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * SelectorFactory#createConditionalSelector(SimpleSelector,Condition)}.
       */    
      public ConditionalSelector createConditionalSelector
          (SimpleSelector selector,
           Condition condition) 
  	throws CSSException {
  	return new CSSConditionalSelector(selector, condition);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.SelectorFactory#createAnyNodeSelector()}.
       */    
      public SimpleSelector createAnyNodeSelector() throws CSSException {
  	throw new CSSException("Not implemented in CSS2");
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.SelectorFactory#createRootNodeSelector()}.
       */    
      public SimpleSelector createRootNodeSelector() throws CSSException {
  	throw new CSSException("Not implemented in CSS2");
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.SelectorFactory#createNegativeSelector(SimpleSelector)}.
       */    
      public NegativeSelector createNegativeSelector(SimpleSelector selector) 
  	throws CSSException {
  	throw new CSSException("Not implemented in CSS2");
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.SelectorFactory#createElementSelector(String,String)}.
       */    
      public ElementSelector createElementSelector(String namespaceURI,
                                                   String tagName)
  	throws CSSException {
  	return new CSSElementSelector(namespaceURI, tagName);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.SelectorFactory#createTextNodeSelector(String)}.
       */    
      public CharacterDataSelector createTextNodeSelector(String data)
  	throws CSSException {
  	throw new CSSException("Not implemented in CSS2");
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.SelectorFactory#createCDataSectionSelector(String)}.
       */    
      public CharacterDataSelector createCDataSectionSelector(String data)
  	throws CSSException {
  	throw new CSSException("Not implemented in CSS2");
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * SelectorFactory#createProcessingInstructionSelector(String,String)}.
       */    
      public ProcessingInstructionSelector createProcessingInstructionSelector
  	(String target,
  	 String data) throws CSSException {
  	throw new CSSException("Not implemented in CSS2");
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * org.w3c.css.sac.SelectorFactory#createCommentSelector(String)}.
       */    
      public CharacterDataSelector createCommentSelector(String data)
  	throws CSSException {
  	throw new CSSException("Not implemented in CSS2");
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * SelectorFactory#createPseudoElementSelector(String,String)}.
       */    
      public ElementSelector createPseudoElementSelector(String namespaceURI, 
  						       String pseudoName) 
  	throws CSSException {
  	return new CSSPseudoElementSelector(namespaceURI, pseudoName);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * SelectorFactory#createDescendantSelector(Selector,SimpleSelector)}.
       */    
      public DescendantSelector createDescendantSelector
          (Selector parent,
           SimpleSelector descendant)
  	throws CSSException {
  	return new CSSDescendantSelector(parent, descendant);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * SelectorFactory#createChildSelector(Selector,SimpleSelector)}.
       */    
      public DescendantSelector createChildSelector(Selector parent,
  						  SimpleSelector child)
  	throws CSSException {
  	return new CSSChildSelector(parent, child);
      }
  
      /**
       * <b>SAC</b>: Implements {@link
       * SelectorFactory#createDirectAdjacentSelector(short,Selector,SimpleSelector)}.
       */
      public SiblingSelector createDirectAdjacentSelector
          (short          nodeType,
           Selector       child,
           SimpleSelector directAdjacent)
  	throws CSSException {
  	return new CSSDirectAdjacentSelector(nodeType, child,
                                                 directAdjacent);
      }
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/ExtendedCondition.java
  
  Index: ExtendedCondition.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.engine.sac;
  
  import org.w3c.css.sac.Condition;
  import org.w3c.dom.Element;
  
  /**
   * This interface provides additional features to the
   * {@link org.w3c.css.sac.Condition} interface.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: ExtendedCondition.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  public interface ExtendedCondition extends Condition {
  
      /**
       * Tests whether this condition matches the given element.
       */
      boolean match(Element e, String pseudoE);
  
      /**
       * Returns the specificity of this condition.
       */
      int getSpecificity();
  }
  
  
  
  1.1                  xml-batik/sources/org/apache/batik/css/engine/sac/ExtendedSelector.java
  
  Index: ExtendedSelector.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.engine.sac;
  
  import org.w3c.css.sac.Selector;
  import org.w3c.dom.Element;
  
  /**
   * This interface extends the {@link org.w3c.css.sac.Selector}.
   *
   * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
   * @version $Id: ExtendedSelector.java,v 1.1 2002/03/18 10:31:09 hillion Exp $
   */
  public interface ExtendedSelector extends Selector {
  
      /**
       * Tests whether this selector matches the given element.
       */
      boolean match(Element e, String pseudoE);
  
      /**
       * Returns the specificity of this selector.
       */
      int getSpecificity();
  }
  
  
  

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