hillion     01/10/11 11:37:33

  Modified:    sources/org/apache/batik/apps/svgbrowser
                        JSVGViewerFrame.java Main.java
               sources/org/apache/batik/css AbstractViewCSS.java
                        DOMMediaList.java
               sources/org/apache/batik/dom StyleSheetFactory.java
                        StyleSheetProcessingInstruction.java
               sources/org/apache/batik/dom/svg SVGDOMImplementation.java
                        SVGOMDocument.java
               test-sources/org/apache/batik/test/svg
                        SVGRenderingAccuracyTest.java
  Log:
  Fixed bugs with:
   - CSS media,
   - alternate stylesheets.
  
  Revision  Changes    Path
  1.55      +27 -41    
xml-batik/sources/org/apache/batik/apps/svgbrowser/JSVGViewerFrame.java
  
  Index: JSVGViewerFrame.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/apps/svgbrowser/JSVGViewerFrame.java,v
  retrieving revision 1.54
  retrieving revision 1.55
  diff -u -r1.54 -r1.55
  --- JSVGViewerFrame.java      2001/10/10 13:42:37     1.54
  +++ JSVGViewerFrame.java      2001/10/11 18:37:33     1.55
  @@ -143,6 +143,10 @@
   import org.w3c.dom.stylesheets.DocumentStyle;
   import org.w3c.dom.stylesheets.StyleSheetList;
    
  +import org.w3c.dom.traversal.DocumentTraversal;
  +import org.w3c.dom.traversal.NodeFilter;
  +import org.w3c.dom.traversal.TreeWalker;
  +
   import org.w3c.dom.css.CSSStyleSheet;
   
   import org.w3c.dom.css.ViewCSS;
  @@ -153,7 +157,7 @@
    * This class represents a SVG viewer swing frame.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: JSVGViewerFrame.java,v 1.54 2001/10/10 13:42:37 tkormann Exp $
  + * @version $Id: JSVGViewerFrame.java,v 1.55 2001/10/11 18:37:33 hillion Exp $
    */
   public class JSVGViewerFrame
       extends    JFrame
  @@ -1184,56 +1188,38 @@
   
           protected void update() {
               Iterator it = components.iterator();
  -            if (it.hasNext()) {
  -
  +            SVGDocument doc = svgCanvas.getSVGDocument();
  +            while (it.hasNext()) {
                   JComponent stylesheetMenu = (JComponent)it.next();
                   stylesheetMenu.removeAll();
                   stylesheetMenu.setEnabled(false);
   
  -                SVGDocument doc = svgCanvas.getSVGDocument();
  -                NodeList children = doc.getChildNodes();
                   ButtonGroup buttonGroup = new ButtonGroup();
  -                HashTable stylesheetTitles = new HashTable();
  -
  -                // !!! The traversal should be recursive
  -                for (int ix=0; ix < children.getLength(); ix++) {
  -                    Node n = children.item(ix);
  -                    if (n.getNodeType() == Node.PROCESSING_INSTRUCTION_NODE &&
  -                        n instanceof StyleSheetProcessingInstruction) {
  -
  -                        String data = ((ProcessingInstruction)n).getData();
  -
  -                        HashTable attrs = new HashTable();
  -                        attrs.put("alternate", "no");
  -
  -                        DOMUtilities.parseStyleSheetPIData(data, attrs);
  +                TreeWalker tw;
  +                tw = ((DocumentTraversal)doc).createTreeWalker
  +                    (doc,
  +                     NodeFilter.SHOW_PROCESSING_INSTRUCTION,
  +                     null,
  +                     true);
  +
  +                for (Node n = tw.nextNode(); n != null; n = tw.nextNode()) {
  +                    if (n instanceof StyleSheetProcessingInstruction) {
  +                        StyleSheetProcessingInstruction sspi;
  +                        sspi = (StyleSheetProcessingInstruction)n;
  +                        HashTable attrs = sspi.getPseudoAttributes();
                           final String title = (String)attrs.get("title");
  -
  -                        // If no title is specified, then the stylesheet should
  -                        // always be applied
  -                        
  -                        // If the title has already been found, then it is part
  -                        // of a group, and no new menu option is needed
  -                        if (title != null && stylesheetTitles.get(title) == null)  {
  -                            stylesheetTitles.put(title, title);
  -
  +                        String alt = (String)attrs.get("alternate");
  +                        if (title != null && "yes".equals(alt)) {
                               JRadioButtonMenuItem button;
                               button = new JRadioButtonMenuItem(title);
  -                            if (((String)attrs.get("alternate")).equals("no")) {
  -                                button.setSelected(true);
  -                            }
  +                            
                               button.addActionListener
                                   (new java.awt.event.ActionListener() {
  -                                    public void actionPerformed (ActionEvent e) {
  -                                        SVGDocument doc = 
svgCanvas.getSVGDocument();
  -                                        StyleSheetList l;
  -                                        l = ((DocumentStyle)doc).getStyleSheets();
  -                                        for (int i = 0; i < l.getLength(); i++) {
  -                                            CSSStyleSheet ss;
  -                                            ss = (CSSStyleSheet)l.item(i);
  -                                            
ss.setDisabled(!title.equals(ss.getTitle()));
  -                                        }
  -                                        ((SVGOMDocument)doc).clearViewCSS();
  +                                    public void actionPerformed(ActionEvent e) {
  +                                        SVGOMDocument doc;
  +                                        doc = 
(SVGOMDocument)svgCanvas.getSVGDocument();
  +                                        doc.enableAlternateStyleSheet(title);
  +                                        doc.clearViewCSS();
                                           svgCanvas.setSVGDocument(doc);
                                       }
                                   });
  
  
  
  1.17      +8 -13     xml-batik/sources/org/apache/batik/apps/svgbrowser/Main.java
  
  Index: Main.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/apps/svgbrowser/Main.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- Main.java 2001/10/10 13:42:37     1.16
  +++ Main.java 2001/10/11 18:37:33     1.17
  @@ -45,7 +45,7 @@
    * This class contains the main method of an SVG viewer.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: Main.java,v 1.16 2001/10/10 13:42:37 tkormann Exp $
  + * @version $Id: Main.java,v 1.17 2001/10/11 18:37:33 hillion Exp $
    */
   public class Main implements Application {
   
  @@ -411,11 +411,11 @@
        * Returns the user languages.
        */
       public String getLanguages() {
  -        if (preferenceDialog == null) {
  -            return Locale.getDefault().getLanguage();
  -        }
  -        return preferenceDialog.getPreferenceManager().getString
  +        String s = preferenceManager.getString
               (PreferenceDialog.PREFERENCE_KEY_LANGUAGES);
  +        return (s == null)
  +            ? Locale.getDefault().getLanguage()
  +            : s;
       }
   
       /**
  @@ -423,10 +423,7 @@
        * @return null if no user style sheet was specified.
        */
       public String getUserStyleSheetURI() {
  -        if (preferenceDialog == null) {
  -            return null;
  -        }
  -        return preferenceDialog.getPreferenceManager().getString
  +        return preferenceManager.getString
               (PreferenceDialog.PREFERENCE_KEY_USER_STYLESHEET);
       }
   
  @@ -435,10 +432,8 @@
        * @return empty string if no CSS media was specified.
        */
       public String getMedia() {
  -        if (preferenceDialog == null) {
  -            return "";
  -        }
  -        return preferenceDialog.getPreferenceManager().getString
  +        String s = preferenceManager.getString
               (PreferenceDialog.PREFERENCE_KEY_CSS_MEDIA);
  +        return (s == null) ? "screen" : s;
       }
   }
  
  
  
  1.18      +3 -2      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.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- AbstractViewCSS.java      2001/10/09 12:29:47     1.17
  +++ AbstractViewCSS.java      2001/10/11 18:37:33     1.18
  @@ -44,7 +44,7 @@
    * {@link org.w3c.dom.css.ViewCSS} interface.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: AbstractViewCSS.java,v 1.17 2001/10/09 12:29:47 hillion Exp $
  + * @version $Id: AbstractViewCSS.java,v 1.18 2001/10/11 18:37:33 hillion Exp $
    */
   public abstract class AbstractViewCSS implements ViewCSS {
   
  @@ -558,7 +558,8 @@
        }
        for (int i = 0; i < ml.getLength(); i++) {
            for (int j = 0; j < media.getLength(); j++) {
  -             if (ml.item(i).equalsIgnoreCase(media.item(j))) {
  +             if (media.item(j).equalsIgnoreCase("all") ||
  +                    ml.item(i).equalsIgnoreCase(media.item(j))) {
                    return true;
                }
            }
  
  
  
  1.2       +5 -2      xml-batik/sources/org/apache/batik/css/DOMMediaList.java
  
  Index: DOMMediaList.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/css/DOMMediaList.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DOMMediaList.java 2000/10/10 18:37:15     1.1
  +++ DOMMediaList.java 2001/10/11 18:37:33     1.2
  @@ -20,7 +20,7 @@
    * interface.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: DOMMediaList.java,v 1.1 2000/10/10 18:37:15 hillion Exp $
  + * @version $Id: DOMMediaList.java,v 1.2 2001/10/11 18:37:33 hillion Exp $
    */
   public class DOMMediaList implements MediaList {
       /**
  @@ -63,8 +63,9 @@
        * org.w3c.dom.stylesheets.MediaList#setMediaText(String)}.
        */
       public void setMediaText(String mediaText) throws DOMException {
  +        mediaText = mediaText.toLowerCase();
           list.clear();
  -        if (!"all".equals(mediaText)) {
  +        if (!"all".equalsIgnoreCase(mediaText)) {
               StringTokenizer st = new StringTokenizer(mediaText, " ,");
               while (st.hasMoreTokens()) {
                   list.add(st.nextToken());
  @@ -96,6 +97,7 @@
        * org.w3c.dom.stylesheets.MediaList#deleteMedium(String)}.
        */
       public void deleteMedium(String oldMedium) throws DOMException {
  +        oldMedium = oldMedium.toLowerCase();
           if (!list.remove(oldMedium)) {
            throw CSSDOMExceptionFactory.createDOMException
                (DOMException.INVALID_ACCESS_ERR,
  @@ -109,6 +111,7 @@
        * org.w3c.dom.stylesheets.MediaList#appendMedium(String)}.
        */
       public void appendMedium(String newMedium) throws DOMException {
  +        newMedium = newMedium.toLowerCase();
        list.remove(newMedium);
           list.add(newMedium);
       }
  
  
  
  1.2       +3 -2      xml-batik/sources/org/apache/batik/dom/StyleSheetFactory.java
  
  Index: StyleSheetFactory.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/StyleSheetFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- StyleSheetFactory.java    2000/10/10 18:39:00     1.1
  +++ StyleSheetFactory.java    2001/10/11 18:37:33     1.2
  @@ -8,6 +8,7 @@
   
   package org.apache.batik.dom;
   
  +import org.apache.batik.dom.util.HashTable;
   import org.w3c.dom.Node;
   import org.w3c.dom.stylesheets.StyleSheet;
   
  @@ -15,7 +16,7 @@
    * This interface represents a StyleSheet factory.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: StyleSheetFactory.java,v 1.1 2000/10/10 18:39:00 hillion Exp $
  + * @version $Id: StyleSheetFactory.java,v 1.2 2001/10/11 18:37:33 hillion Exp $
    */
   public interface StyleSheetFactory {
       /**
  @@ -23,5 +24,5 @@
        * processing instruction or return null when it is not possible
        * to create the given stylesheet.
        */
  -    StyleSheet createStyleSheet(Node node, String data);
  +    StyleSheet createStyleSheet(Node node, HashTable pseudoAttrs);
   }
  
  
  
  1.4       +23 -3     
xml-batik/sources/org/apache/batik/dom/StyleSheetProcessingInstruction.java
  
  Index: StyleSheetProcessingInstruction.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/dom/StyleSheetProcessingInstruction.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- StyleSheetProcessingInstruction.java      2000/12/06 21:22:00     1.3
  +++ StyleSheetProcessingInstruction.java      2001/10/11 18:37:33     1.4
  @@ -8,7 +8,9 @@
   
   package org.apache.batik.dom;
   
  +import org.apache.batik.dom.util.DOMUtilities;
   import org.apache.batik.dom.util.HashTable;
  +
   import org.w3c.dom.DOMException;
   import org.w3c.dom.Node;
   import org.w3c.dom.stylesheets.LinkStyle;
  @@ -19,9 +21,8 @@
    * instructions.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: StyleSheetProcessingInstruction.java,v 1.3 2000/12/06 21:22:00 
hillion Exp $
  + * @version $Id: StyleSheetProcessingInstruction.java,v 1.4 2001/10/11 18:37:33 
hillion Exp $
    */
  -
   public class StyleSheetProcessingInstruction
       extends AbstractProcessingInstruction
       implements LinkStyle {
  @@ -42,6 +43,11 @@
       protected StyleSheetFactory factory;
   
       /**
  +     * The pseudo attributes.
  +     */
  +    protected transient HashTable pseudoAttributes;
  +
  +    /**
        * Creates a new ProcessingInstruction object.
        */
       protected StyleSheetProcessingInstruction() {
  @@ -92,18 +98,32 @@
        */
       public StyleSheet getSheet() {
        if (sheet == null) {
  -         sheet = factory.createStyleSheet(this, getData());
  +         sheet = factory.createStyleSheet(this, getPseudoAttributes());
        }
        return sheet;
       }
   
       /**
  +     * Returns the pseudo attributes in a table.
  +     */
  +    public HashTable getPseudoAttributes() {
  +        if (pseudoAttributes == null) {
  +            pseudoAttributes = new HashTable();
  +            pseudoAttributes.put("alternate", "no");
  +            pseudoAttributes.put("media",     "all");
  +            DOMUtilities.parseStyleSheetPIData(data, pseudoAttributes);
  +        }
  +        return pseudoAttributes;
  +    }
  +
  +    /**
        * <b>DOM</b>: Implements {@link
        * org.w3c.dom.ProcessingInstruction#setData(String)}.
        */
       public void setData(String data) throws DOMException {
        super.setData(data);
        sheet = null;
  +        pseudoAttributes = null;
       }
   
       /**
  
  
  
  1.16      +3 -12     
xml-batik/sources/org/apache/batik/dom/svg/SVGDOMImplementation.java
  
  Index: SVGDOMImplementation.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/dom/svg/SVGDOMImplementation.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- SVGDOMImplementation.java 2001/09/28 15:40:08     1.15
  +++ SVGDOMImplementation.java 2001/10/11 18:37:33     1.16
  @@ -54,7 +54,7 @@
    * It provides support the SVG 1.0 documents.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: SVGDOMImplementation.java,v 1.15 2001/09/28 15:40:08 hillion Exp $
  + * @version $Id: SVGDOMImplementation.java,v 1.16 2001/10/11 18:37:33 hillion Exp $
    */
   public class SVGDOMImplementation
       extends    AbstractDOMImplementation
  @@ -203,12 +203,7 @@
        * Creates a stylesheet from the data of an xml-stylesheet
        * processing instruction or return null.
        */
  -    public StyleSheet createStyleSheet(Node n, String data) {
  -        HashTable attrs = new HashTable();
  -        attrs.put("alternate", "no");
  -        attrs.put("media", "all");
  -        DOMUtilities.parseStyleSheetPIData(data, attrs);
  -
  +    public StyleSheet createStyleSheet(Node n, HashTable attrs) {
           String type = (String)attrs.get("type");
   
           if ("text/css".equals(type)) {
  @@ -232,11 +227,7 @@
                        CSSDocumentHandler.createParser());
   
                   CSSDocumentHandler.parseStyleSheet(ss, url.toString());
  -                if (title == null || alternate.equals("no")) {
  -                   ss.setDisabled (false);
  -                } else {
  -                   ss.setDisabled (true);
  -                }
  +                ss.setDisabled(title != null && "yes".equals(alternate));
                   return ss;
               } catch (Exception e) {
               }
  
  
  
  1.40      +19 -1     xml-batik/sources/org/apache/batik/dom/svg/SVGOMDocument.java
  
  Index: SVGOMDocument.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/svg/SVGOMDocument.java,v
  retrieving revision 1.39
  retrieving revision 1.40
  diff -u -r1.39 -r1.40
  --- SVGOMDocument.java        2001/09/28 15:40:08     1.39
  +++ SVGOMDocument.java        2001/10/11 18:37:33     1.40
  @@ -69,7 +69,7 @@
    * This class implements {@link SVGDocument}.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
  - * @version $Id: SVGOMDocument.java,v 1.39 2001/09/28 15:40:08 hillion Exp $
  + * @version $Id: SVGOMDocument.java,v 1.40 2001/10/11 18:37:33 hillion Exp $
    */
   public class SVGOMDocument
       extends    AbstractDocument
  @@ -422,6 +422,24 @@
           }
           for (Node c = n.getFirstChild(); c != null; c = c.getNextSibling()) {
               getStyleSheets(c, l);
  +        }
  +    }
  +
  +    /**
  +     * Enables the alternate stylesheet with the given title.
  +     */
  +    public void enableAlternateStyleSheet(String title) {
  +        getStyleSheets();
  +        for (int i = 0; i < styleSheets.getLength(); i++) {
  +            StyleSheet ss = (StyleSheet)styleSheets.item(i);
  +            Node on = ss.getOwnerNode();
  +            if (on instanceof StyleSheetProcessingInstruction) {
  +                StyleSheetProcessingInstruction sspi;
  +                sspi = (StyleSheetProcessingInstruction)on;
  +                if ("yes".equals(sspi.getPseudoAttributes().get("alternate"))) {
  +                    ss.setDisabled(!title.equals(ss.getTitle()));
  +                }
  +            }
           }
       }
   
  
  
  
  1.14      +2 -2      
xml-batik/test-sources/org/apache/batik/test/svg/SVGRenderingAccuracyTest.java
  
  Index: SVGRenderingAccuracyTest.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/test-sources/org/apache/batik/test/svg/SVGRenderingAccuracyTest.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- SVGRenderingAccuracyTest.java     2001/10/08 14:51:35     1.13
  +++ SVGRenderingAccuracyTest.java     2001/10/11 18:37:33     1.14
  @@ -64,7 +64,7 @@
    * all pixel values are the same).
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Vincent Hardy</a>
  - * @version $Id: SVGRenderingAccuracyTest.java,v 1.13 2001/10/08 14:51:35 vhardy 
Exp $
  + * @version $Id: SVGRenderingAccuracyTest.java,v 1.14 2001/10/11 18:37:33 hillion 
Exp $
    */
   public class SVGRenderingAccuracyTest extends AbstractTest {
       /**
  @@ -355,7 +355,7 @@
        * the accuracy test. For example, this can be useful to 
        * test the alternate stylesheet support.
        */
  -    private final Document manipulateSVGDocument(Document doc) {
  +    protected Document manipulateSVGDocument(Document doc) {
           return doc;
       }
   
  
  
  

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

Reply via email to