tkormann    01/11/09 09:12:02

  Modified:    sources/org/apache/batik/css CSSOMStyleDeclaration.java
                        CSSOMStyleRule.java
               sources/org/apache/batik/css/parser Parser.java
               sources/org/apache/batik/css/value AbstractValueFactory.java
  Added:       sources/org/apache/batik/css/parser ExtendedParser.java
  Log:
  parse<CSS stuffs> methods now uses java.lang.String instead of
  new InputSource(StringReader()). We also check if the CSS parser is an
  ExtendedParser to still be compliant with SAC (Simple API for CSS).
  
  10%-25% build phase speed improved
  
  Revision  Changes    Path
  1.3       +28 -5     
xml-batik/sources/org/apache/batik/css/CSSOMStyleDeclaration.java
  
  Index: CSSOMStyleDeclaration.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/css/CSSOMStyleDeclaration.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- CSSOMStyleDeclaration.java        2001/02/05 09:55:30     1.2
  +++ CSSOMStyleDeclaration.java        2001/11/09 17:12:02     1.3
  @@ -10,17 +10,24 @@
   
   import java.io.Reader;
   import java.io.StringReader;
  +
   import org.apache.batik.css.event.CSSStyleDeclarationChangeListener;
   import org.apache.batik.css.event.CSSStyleDeclarationChangeSupport;
   import org.apache.batik.css.event.CSSValueChangeListener;
  +
  +import org.apache.batik.css.parser.ExtendedParser;
  +
   import org.apache.batik.css.value.ValueFactory;
   import org.apache.batik.css.value.ValueFactoryMap;
  +
   import org.w3c.css.sac.CSSException;
   import org.w3c.css.sac.DocumentHandler;
   import org.w3c.css.sac.InputSource;
   import org.w3c.css.sac.LexicalUnit;
   import org.w3c.css.sac.Parser;
  +
   import org.w3c.dom.DOMException;
  +
   import org.w3c.dom.css.CSSRule;
   import org.w3c.dom.css.CSSStyleDeclaration;
   import org.w3c.dom.css.CSSValue;
  @@ -30,7 +37,7 @@
    * interface.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: CSSOMStyleDeclaration.java,v 1.2 2001/02/05 09:55:30 hillion Exp $
  + * @version $Id: CSSOMStyleDeclaration.java,v 1.3 2001/11/09 17:12:02 tkormann Exp $
    */
   public class CSSOMStyleDeclaration
       implements CSSStyleDeclaration,
  @@ -78,11 +85,17 @@
       protected CSSStyleDeclarationChangeSupport declarationChangeSupport;
   
       /**
  +     * Indicates whether or not the CSS parser supports methods with String.
  +     */
  +    protected boolean isExtendedParser;
  +
  +    /**
        * Creates a new CSSStyleDeclaration object.
        */
       public CSSOMStyleDeclaration() {
        try {
            parser = CSSDocumentHandler.createParser();
  +         isExtendedParser = (parser instanceof ExtendedParser);
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage());
        }
  @@ -93,6 +106,7 @@
        */
       public CSSOMStyleDeclaration(CSSRule r, Parser p) {
        parser = p;
  +     isExtendedParser = (parser instanceof ExtendedParser);
        parentRule = r;
       }
   
  @@ -208,9 +222,13 @@
           oldProperties = new PropertyMap(properties);
        properties = new PropertyMap();
        try {
  -         Reader r = new StringReader(cssText);
            parser.setDocumentHandler(handler);
  -         parser.parseStyleDeclaration(new InputSource(r));
  +         if (isExtendedParser) {
  +             ((ExtendedParser)parser).parseStyleDeclaration(cssText);
  +         } else {
  +             Reader r = new StringReader(cssText);
  +             parser.parseStyleDeclaration(new InputSource(r));
  +         }
        } catch (DOMException e) {
            properties = pm;
            oldProperties = null;
  @@ -320,8 +338,13 @@
        try {
            ValueFactory f;
               f = factories.get(propertyName.toLowerCase().intern());
  -         InputSource is = new InputSource(new StringReader(value));
  -         LexicalUnit lu = parser.parsePropertyValue(is);
  +         LexicalUnit lu;
  +         if (isExtendedParser) {
  +             lu = ((ExtendedParser)parser).parsePropertyValue(value);
  +         } else {
  +             InputSource is = new InputSource(new StringReader(value));
  +             lu = parser.parsePropertyValue(is);
  +         }
            f.createCSSValue(lu, this, prio);
        } catch (Exception e) {
               e.printStackTrace();
  
  
  
  1.4       +20 -3     xml-batik/sources/org/apache/batik/css/CSSOMStyleRule.java
  
  Index: CSSOMStyleRule.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/css/CSSOMStyleRule.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- CSSOMStyleRule.java       2001/10/18 12:30:22     1.3
  +++ CSSOMStyleRule.java       2001/11/09 17:12:02     1.4
  @@ -12,19 +12,26 @@
   import java.net.URL;
   
   import org.apache.batik.css.value.ValueFactory;
  +
   import org.apache.batik.css.event.CSSStyleDeclarationChangeEvent;
   import org.apache.batik.css.event.CSSStyleDeclarationChangeListener;
   import org.apache.batik.css.event.CSSStyleRuleChangeListener;
   import org.apache.batik.css.event.CSSStyleRuleChangeSupport;
   import org.apache.batik.css.event.CSSPropertyChangeEvent;
  +
  +import org.apache.batik.css.parser.ExtendedParser;
  +
   import org.apache.batik.css.value.ValueFactoryMap;
  +
   import org.w3c.css.sac.CSSException;
   import org.w3c.css.sac.DocumentHandler;
   import org.w3c.css.sac.InputSource;
   import org.w3c.css.sac.LexicalUnit;
   import org.w3c.css.sac.Parser;
   import org.w3c.css.sac.SelectorList;
  +
   import org.w3c.dom.DOMException;
  +
   import org.w3c.dom.css.CSSRule;
   import org.w3c.dom.css.CSSStyleDeclaration;
   import org.w3c.dom.css.CSSStyleRule;
  @@ -34,7 +41,7 @@
    * This class implements the {@link org.w3c.dom.css.CSSStyleRule} interface.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: CSSOMStyleRule.java,v 1.3 2001/10/18 12:30:22 hillion Exp $
  + * @version $Id: CSSOMStyleRule.java,v 1.4 2001/11/09 17:12:02 tkormann Exp $
    */
   public class CSSOMStyleRule
       extends    AbstractCSSRule
  @@ -74,6 +81,11 @@
        * The base URI.
        */
       protected URL baseURI;
  +
  +    /**
  +     * Indicates whether or not the CSS parser supports methods with String.
  +     */
  +    protected boolean isExtendedParser;
       
       /**
        * Creates a new rule set.
  @@ -84,6 +96,7 @@
                          ValueFactoryMap m) {
        super(ss, pr);
        parser = p;
  +     isExtendedParser = (parser instanceof ExtendedParser);
        factories = m;
        style = new CSSOMStyleDeclaration(this, p);
        style.setValueFactoryMap(m);
  @@ -135,11 +148,15 @@
            style.addCSSStyleDeclarationChangeListener(this);
            style.fireCSSStyleDeclarationChangeStart();
   
  -         InputSource is = new InputSource(new StringReader(cssText));
            parser.setSelectorFactory(SELECTOR_FACTORY);
            parser.setConditionFactory(CONDITION_FACTORY);
            parser.setDocumentHandler(ruleHandler);
  -         parser.parseRule(is);
  +         if (isExtendedParser) {
  +             ((ExtendedParser)parser).parseRule(cssText);
  +         } else {
  +             InputSource is = new InputSource(new StringReader(cssText));
  +             parser.parseRule(is);
  +         }
        } catch (DOMException e) {
            style.fireCSSStyleDeclarationChangeCancel();
            fireCSSStyleRuleChangeCancel();
  
  
  
  1.16      +97 -5     xml-batik/sources/org/apache/batik/css/parser/Parser.java
  
  Index: Parser.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/css/parser/Parser.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- Parser.java       2001/11/08 23:02:43     1.15
  +++ Parser.java       2001/11/09 17:12:02     1.16
  @@ -43,11 +43,9 @@
    * This class implements the {@link org.w3c.css.sac.Parser} interface.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: Parser.java,v 1.15 2001/11/08 23:02:43 deweese Exp $
  + * @version $Id: Parser.java,v 1.16 2001/11/09 17:12:02 tkormann Exp $
    */
  -public class Parser
  -    implements org.w3c.css.sac.Parser,
  -               Localizable {
  +public class Parser implements ExtendedParser, Localizable {
   
       /**
        * The CSS to Java encoding table.
  @@ -300,7 +298,16 @@
        */
       public void parseStyleDeclaration(InputSource source) 
           throws CSSException, IOException {
  +
           scanner = new Scanner(characterStream(source, null));
  +     parseStyleDeclarationInternal();
  +    }
  +
  +    /**
  +     * Parses a style declaration using the current scanner.
  +     */
  +    protected void parseStyleDeclarationInternal() 
  +     throws CSSException, IOException {
           nextIgnoreSpaces();
           try {
               parseStyleDeclaration(false);
  @@ -314,8 +321,16 @@
       /**
        * <b>SAC</b>: Implements {@link org.w3c.css.sac.Parser#parseRule(InputSource)}.
        */
  -    public void parseRule(InputSource source) throws CSSException, IOException {
  +    public void parseRule(InputSource source) 
  +     throws CSSException, IOException {
           scanner = new Scanner(characterStream(source, null));
  +     parseRuleInternal();
  +    }
  +
  +    /**
  +     * Parses a rule using the current scanner.
  +     */
  +    protected void parseRuleInternal() throws CSSException, IOException {
           nextIgnoreSpaces();
           parseRule();
           scanner = null;
  @@ -327,6 +342,14 @@
       public SelectorList parseSelectors(InputSource source)
           throws CSSException, IOException {
           scanner = new Scanner(characterStream(source, null));
  +     return parseSelectorsInternal();
  +    }
  +
  +    /**
  +     * Parses selectors using the current scanner.
  +     */
  +    protected SelectorList parseSelectorsInternal() 
  +     throws CSSException, IOException {
           nextIgnoreSpaces();
           SelectorList ret = parseSelectorList();
           scanner = null;
  @@ -340,6 +363,14 @@
       public LexicalUnit parsePropertyValue(InputSource source)
           throws CSSException, IOException {
           scanner = new Scanner(characterStream(source, null));
  +     return parsePropertyValueInternal();
  +    }
  +
  +    /**
  +     * Parses property value using the current scanner.
  +     */
  +    protected LexicalUnit parsePropertyValueInternal() 
  +     throws CSSException, IOException {
           nextIgnoreSpaces();
           
           LexicalUnit exp = null;
  @@ -366,6 +397,14 @@
       public boolean parsePriority(InputSource source)
           throws CSSException, IOException {
           scanner = new Scanner(characterStream(source, null));
  +     return parsePriorityInternal();
  +    }
  +
  +    /**
  +     * Parses the priority using the current scanner.
  +     */
  +    protected boolean parsePriorityInternal()
  +        throws CSSException, IOException {
           nextIgnoreSpaces();
   
           scanner = null;
  @@ -1687,5 +1726,58 @@
                                        documentURI,
                                        scanner.getLine(),
                                        scanner.getColumn());
  +    }
  +
  +    // -----------------------------------------------------------------------
  +    // Extended methods
  +    // -----------------------------------------------------------------------
  +    
  +    /**
  +     * Implements {@link 
  +     * org.apache.batik.css.parser.ExtendedParser#parseStyleDeclaration(String)}.
  +     */
  +    public void parseStyleDeclaration(String source) 
  +     throws CSSException, IOException {
  +        scanner = new Scanner(source);
  +     parseStyleDeclarationInternal();
  +    }
  +
  +    /**
  +     * Implements {@link 
  +     * org.apache.batik.css.parser.ExtendedParser#parseRule(String)}.
  +     */
  +    public void parseRule(String source) throws CSSException, IOException {
  +        scanner = new Scanner(source);
  +     parseRuleInternal();
  +    }
  +    
  +    /**
  +     * Implements {@link 
  +     * org.apache.batik.css.parser.ExtendedParser#parseSelectors(String)}.
  +     */
  +    public SelectorList parseSelectors(String source)
  +        throws CSSException, IOException {
  +        scanner = new Scanner(source);
  +     return parseSelectorsInternal();
  +    }
  +
  +    /**
  +     * Implements {@link 
  +     * org.apache.batik.css.parser.ExtendedParser#parsePropertyValue(String)}.
  +     */
  +    public LexicalUnit parsePropertyValue(String source)
  +        throws CSSException, IOException {
  +        scanner = new Scanner(source);
  +     return parsePropertyValueInternal();
  +    }
  +
  +    /**
  +     * Implements {@link 
  +     * org.apache.batik.css.parser.ExtendedParser#parsePriority(String)}.
  +     */
  +    public boolean parsePriority(String source)
  +        throws CSSException, IOException {
  +        scanner = new Scanner(source);
  +     return parsePriorityInternal();
       }
   }
  
  
  
  1.1                  
xml-batik/sources/org/apache/batik/css/parser/ExtendedParser.java
  
  Index: ExtendedParser.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.parser;
  
  import java.io.IOException;
  
  import org.w3c.css.sac.CSSException;
  import org.w3c.css.sac.LexicalUnit;
  import org.w3c.css.sac.SelectorList;
  
  /**
   * This class implements the {@link org.w3c.css.sac.Parser} interface plus a
   * set of custom methods.
   *
   * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
   * @version $Id: ExtendedParser.java,v 1.1 2001/11/09 17:12:02 tkormann Exp $
   */
  public interface ExtendedParser extends org.w3c.css.sac.Parser {
      
      /**
       * Parse a CSS style declaration (without '{' and '}').
       *
       * @param styleValue The declaration.
       * @exception CSSException Any CSS exception, possibly
       *            wrapping another exception.
       * @exception java.io.IOException An IO exception from the parser,
       *            possibly from a byte stream or character stream
       *            supplied by the application.
       */
      void parseStyleDeclaration(String source) 
        throws CSSException, IOException;
  
  
      /**
       * Parse a CSS rule.
       *
       * @exception CSSException Any CSS exception, possibly
       *            wrapping another exception.
       * @exception java.io.IOException An IO exception from the parser,
       *            possibly from a byte stream or character stream
       *            supplied by the application.
       */
      void parseRule(String source) throws CSSException, IOException;
      
      /**
       * Parse a comma separated list of selectors.
       * 
       * 
       * @exception CSSException Any CSS exception, possibly
       *            wrapping another exception.
       * @exception java.io.IOException An IO exception from the parser,
       *            possibly from a byte stream or character stream
       *            supplied by the application.
       */    
      SelectorList parseSelectors(String source)
          throws CSSException, IOException;
  
  
      /**
       * Parse a CSS property value.
       * 
       * 
       * @exception CSSException Any CSS exception, possibly
       *            wrapping another exception.
       * @exception java.io.IOException An IO exception from the parser,
       *            possibly from a byte stream or character stream
       *            supplied by the application.
       */    
      LexicalUnit parsePropertyValue(String source)
          throws CSSException, IOException;
  
      
      /**
       * Parse a CSS priority value (e.g. "!important").
       * 
       * 
       * @exception CSSException Any CSS exception, possibly
       *            wrapping another exception.
       * @exception java.io.IOException An IO exception from the parser,
       *            possibly from a byte stream or character stream
       *            supplied by the application.
       */    
      boolean parsePriority(String source)
          throws CSSException, IOException;
  
  }
  
  
  
  1.7       +17 -3     
xml-batik/sources/org/apache/batik/css/value/AbstractValueFactory.java
  
  Index: AbstractValueFactory.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/css/value/AbstractValueFactory.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- AbstractValueFactory.java 2001/10/19 06:45:50     1.6
  +++ AbstractValueFactory.java 2001/11/09 17:12:02     1.7
  @@ -15,6 +15,8 @@
   import org.apache.batik.css.CSSOMStyleDeclaration;
   import org.apache.batik.css.CSSOMValue;
   
  +import org.apache.batik.css.parser.ExtendedParser;
  +
   import org.w3c.css.sac.InputSource;
   import org.w3c.css.sac.LexicalUnit;
   import org.w3c.css.sac.Parser;
  @@ -25,7 +27,7 @@
    * This class provides a base implementation for every value factories.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: AbstractValueFactory.java,v 1.6 2001/10/19 06:45:50 hillion Exp $
  + * @version $Id: AbstractValueFactory.java,v 1.7 2001/11/09 17:12:02 tkormann Exp $
    */
   public abstract class AbstractValueFactory
       implements ValueFactory,
  @@ -37,11 +39,17 @@
       protected Parser parser;
   
       /**
  +     * Indicates whether or not the CSS parser supports methods with String.
  +     */
  +    protected boolean isExtendedParser;
  +
  +    /**
        * To creates a new ValueFactory object.
        * @param p The CSS parser used to parse the CSS texts.
        */
       protected AbstractValueFactory(Parser p) {
        parser = p;
  +     isExtendedParser = (parser instanceof ExtendedParser);
       }
   
       /**
  @@ -56,6 +64,7 @@
        */
       public void setParser(Parser p) {
           parser = p;
  +     isExtendedParser = (parser instanceof ExtendedParser);
       }
   
       /**
  @@ -64,8 +73,13 @@
        */
       public ImmutableValue createValue(String text) throws DOMException {
        try {
  -         InputSource is = new InputSource(new StringReader(text));
  -         LexicalUnit lu = parser.parsePropertyValue(is);
  +         LexicalUnit lu;
  +         if (isExtendedParser) {
  +             lu = ((ExtendedParser)parser).parsePropertyValue(text);
  +         } else {
  +             InputSource is = new InputSource(new StringReader(text));
  +             lu = parser.parsePropertyValue(is);
  +         }
            return createValue(lu);
        } catch (IOException e) {
               // Should never happen
  
  
  

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

Reply via email to