You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-dev@xmlgraphics.apache.org by hi...@apache.org on 2001/03/28 11:24:13 UTC

cvs commit: xml-batik/sources/org/apache/batik/util/gui MemoryMonitor.java

hillion     01/03/28 01:24:13

  Modified:    resources/org/apache/batik/util/gui/resources
                        MemoryMonitorMessages.properties
               sources/org/apache/batik/apps/svgbrowser
                        JSVGViewerFrame.java
               sources/org/apache/batik/parser
                        FragmentIdentifierParser.java
                        TransformListParser.java
               sources/org/apache/batik/util XMLUtilities.java
               sources/org/apache/batik/util/gui MemoryMonitor.java
  Log:
  - Added a 'createXMLDocumentReader(InputStream)' nethod to XMLUtilities,
  - Updated TransformListParser to support the new transform attribute syntax,
  - Added a 'Collect' button to the memory monitor.
  
  Revision  Changes    Path
  1.3       +6 -1      xml-batik/resources/org/apache/batik/util/gui/resources/MemoryMonitorMessages.properties
  
  Index: MemoryMonitorMessages.properties
  ===================================================================
  RCS file: /home/cvs/xml-batik/resources/org/apache/batik/util/gui/resources/MemoryMonitorMessages.properties,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MemoryMonitorMessages.properties	2000/10/23 09:44:15	1.2
  +++ MemoryMonitorMessages.properties	2001/03/28 09:24:12	1.3
  @@ -9,11 +9,16 @@
   # The resources for the memory monitor components.
   #
   # stephane@hillion.org
  -# $Id: MemoryMonitorMessages.properties,v 1.2 2000/10/23 09:44:15 hillion Exp $
  +# $Id: MemoryMonitorMessages.properties,v 1.3 2001/03/28 09:24:12 hillion Exp $
   #
   
   Frame.title = Memory Monitor
   Frame.border_title = Memory Usage & History
  +
  +CollectButton.text     = Collect
  +CollectButton.mnemonic = l
  +CollectButton.tooltip  = Collect the unused memory
  +CollectButton.action   = CollectButtonAction
   
   CloseButton.text     = Close
   CloseButton.mnemonic = C
  
  
  
  1.14      +8 -18     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.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- JSVGViewerFrame.java	2001/03/27 15:11:44	1.13
  +++ JSVGViewerFrame.java	2001/03/28 09:24:12	1.14
  @@ -102,6 +102,8 @@
   
   import org.apache.batik.transcoder.print.PrintTranscoder;
   
  +import org.apache.batik.util.XMLUtilities;
  +
   import org.apache.batik.util.gui.DOMViewer;
   import org.apache.batik.util.gui.LanguageDialog;
   import org.apache.batik.util.gui.LocationBar;
  @@ -125,7 +127,7 @@
    * This class represents a SVG viewer swing frame.
    *
    * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
  - * @version $Id: JSVGViewerFrame.java,v 1.13 2001/03/27 15:11:44 hillion Exp $
  + * @version $Id: JSVGViewerFrame.java,v 1.14 2001/03/28 09:24:12 hillion Exp $
    */
   public class JSVGViewerFrame
       extends    JFrame
  @@ -887,24 +889,12 @@
                               is.close();
                               is = u.openStream();
                           }
  -                        try {
  -                            Reader in = new InputStreamReader(is, "Unicode");
  -                            int nch;
  -                            while ((nch = in.read(buffer, 0, buffer.length)) != -1) {
  -                                doc.insertString(doc.getLength(),
  -                                                 new String(buffer, 0, nch), null);
  -                            }
  -                        } catch (java.io.CharConversionException ioce) {
  -                            // try default encoding...
  -                            doc = new PlainDocument();
  -                            is = u.openStream();
   
  -                            Reader in = new InputStreamReader(is);
  -                            int nch;
  -                            while ((nch = in.read(buffer, 0, buffer.length))!=-1){
  -                                doc.insertString(doc.getLength(),
  -                                                 new String(buffer, 0, nch), null);
  -                            }
  +                        Reader in = XMLUtilities.createXMLDocumentReader(is);
  +                        int len;
  +                        while ((len = in.read(buffer, 0, buffer.length)) != -1) {
  +                            doc.insertString(doc.getLength(),
  +                                             new String(buffer, 0, len), null);
                           }
   
                           ta.setDocument(doc);
  
  
  
  1.4       +1 -2      xml-batik/sources/org/apache/batik/parser/FragmentIdentifierParser.java
  
  Index: FragmentIdentifierParser.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/parser/FragmentIdentifierParser.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- FragmentIdentifierParser.java	2001/03/26 08:53:29	1.3
  +++ FragmentIdentifierParser.java	2001/03/28 09:24:12	1.4
  @@ -17,7 +17,7 @@
    * fragment identifiers.
    *
    * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
  - * @version $Id: FragmentIdentifierParser.java,v 1.3 2001/03/26 08:53:29 hillion Exp $
  + * @version $Id: FragmentIdentifierParser.java,v 1.4 2001/03/28 09:24:12 hillion Exp $
    */
   public class FragmentIdentifierParser extends AbstractParser {
       
  @@ -661,7 +661,6 @@
                   tloop: for (;;) {
                       read();
                       switch (current) {
  -                    case ';':
                       case ',':
                           break;
                       case 'm':
  
  
  
  1.3       +2 -1      xml-batik/sources/org/apache/batik/parser/TransformListParser.java
  
  Index: TransformListParser.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/parser/TransformListParser.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TransformListParser.java	2001/01/03 14:17:39	1.2
  +++ TransformListParser.java	2001/03/28 09:24:13	1.3
  @@ -15,7 +15,7 @@
    * attribute values.
    *
    * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
  - * @version $Id: TransformListParser.java,v 1.2 2001/01/03 14:17:39 hillion Exp $
  + * @version $Id: TransformListParser.java,v 1.3 2001/03/28 09:24:13 hillion Exp $
    */
   public class TransformListParser extends NumberParser {
   
  @@ -68,6 +68,7 @@
   	    case 0xA:
   	    case 0x20:
   	    case 0x9:
  +            case ',':
   		break;
   	    case 'm':
   		parseMatrix();
  
  
  
  1.2       +290 -1    xml-batik/sources/org/apache/batik/util/XMLUtilities.java
  
  Index: XMLUtilities.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/util/XMLUtilities.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XMLUtilities.java	2000/10/10 18:41:54	1.1
  +++ XMLUtilities.java	2001/03/28 09:24:13	1.2
  @@ -8,13 +8,24 @@
   
   package org.apache.batik.util;
   
  +import java.io.ByteArrayInputStream;
  +import java.io.InputStream;
  +import java.io.InputStreamReader;
  +import java.io.IOException;
  +import java.io.PushbackInputStream;
  +import java.io.Reader;
  +
  +import java.util.HashMap;
  +import java.util.Map;
  +
   /**
    * A collection of utility functions for XML.
    *
    * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
  - * @version $Id: XMLUtilities.java,v 1.1 2000/10/10 18:41:54 hillion Exp $
  + * @version $Id: XMLUtilities.java,v 1.2 2001/03/28 09:24:13 hillion Exp $
    */
   public class XMLUtilities extends XMLCharacters {
  +
       /**
        * This class does not need to be instantiated.
        */
  @@ -79,4 +90,282 @@
               (ALPHABETIC_CHARACTER[c / 32] & (1 << (c % 32))) != 0;
       }
   
  +    /**
  +     * Creates a Reader initialized to scan the characters in the given
  +     * XML document's InputStream.
  +     * @param is The input stream positionned at the beginning of an
  +     *        XML document.
  +     * @return a Reader positionned at the beginning of the XML document
  +     *         It is created from an encoding figured out from the first
  +     *         few bytes of the document. As a consequence the given
  +     *         input stream is not positionned anymore at the beginning
  +     *         of the document when this method returns.
  +     */
  +    public static Reader createXMLDocumentReader(InputStream is)
  +        throws IOException {
  +        PushbackInputStream pbis = new PushbackInputStream(is, 128);
  +        byte[] buf = new byte[4];
  +
  +        int len = pbis.read(buf);
  +        if (len > 0) {
  +            pbis.unread(buf, 0, len);
  +        }
  +
  +        if (len == 4) {
  +            switch (buf[0] & 0x00FF) {
  +            case 0:
  +                if (buf[1] == 0x003c && buf[2] == 0x0000 && buf[3] == 0x003f) {
  +                    return new InputStreamReader(pbis, "UnicodeBig");
  +                }
  +                break;
  +
  +            case '<':
  +                switch (buf[1] & 0x00FF) {
  +                case 0:
  +                    if (buf[2] == 0x003f && buf[3] == 0x0000) {
  +                        return new InputStreamReader(pbis, "UnicodeLittle");
  +                    }
  +                    break;
  +
  +                case '?':
  +                    if (buf[2] == 'x' && buf[3] == 'm') {
  +                        Reader r = createXMLDeclarationReader(pbis, "UTF8");
  +                        String enc = getXMLDeclarationEncoding(r, "UTF8");
  +                        return new InputStreamReader(pbis, enc);
  +                    }
  +                }
  +                break;
  +
  +            case 0x004C:
  +                if (buf[1] == 0x006f &&
  +                    (buf[2] & 0x00FF) == 0x00a7 &&
  +                    (buf[3] & 0x00FF) == 0x0094) {
  +                    Reader r = createXMLDeclarationReader(pbis, "CP037");
  +                    String enc = getXMLDeclarationEncoding(r, "CP037");
  +                    return new InputStreamReader(pbis, enc);
  +                }
  +                break;
  +
  +            case 0x00FE:
  +                if ((buf[1] & 0x00FF) == 0x00FF) {
  +                    return new InputStreamReader(pbis, "Unicode");
  +                }
  +                break;
  +
  +            case 0x00FF:
  +                if ((buf[1] & 0x00FF) == 0x00FE) {
  +                    return new InputStreamReader(pbis, "Unicode");
  +                }
  +            }
  +        }
  +
  +        return new InputStreamReader(pbis, "UTF8");
  +    }
  +
  +    /**
  +     * Creates a reader from the given input stream and encoding.
  +     * This method assumes the input stream working buffer is at least
  +     * 128 byte long. The input stream is restored before this method
  +     * returns. The 4 first bytes are skipped before creating the reader.
  +     */
  +    protected static Reader createXMLDeclarationReader(PushbackInputStream pbis,
  +                                                       String enc)
  +        throws IOException {
  +        byte[] buf = new byte[128];
  +        int len = pbis.read(buf);
  +
  +        if (len > 0) {
  +            pbis.unread(buf, 0, len);
  +        }
  +
  +        return new InputStreamReader(new ByteArrayInputStream(buf, 4, len), enc);
  +    }
  +
  +    /**
  +     * Reads an XML declaration to get the encoding declaration value.
  +     * @param r a reader positionned just after '<?xm'.
  +     * @param e the encoding to return by default or on error.
  +     */
  +    protected static String getXMLDeclarationEncoding(Reader r, String e)
  +        throws IOException {
  +        int c;
  +
  +        if ((c = r.read()) != 'l') {
  +            return e;
  +        }
  +
  +        if (!isXMLSpace((char)(c = r.read()))) {
  +            return e;
  +        }
  +
  +        while (isXMLSpace((char)(c = r.read())));
  +            
  +        if (c != 'v') {
  +            return e;
  +        }
  +        if ((c = r.read()) != 'e') {
  +            return e;
  +        }
  +        if ((c = r.read()) != 'r') {
  +            return e;
  +        }
  +        if ((c = r.read()) != 's') {
  +            return e;
  +        }
  +        if ((c = r.read()) != 'i') {
  +            return e;
  +        }
  +        if ((c = r.read()) != 'o') {
  +            return e;
  +        }
  +        if ((c = r.read()) != 'n') {
  +            return e;
  +        }
  +             
  +        c = r.read();
  +        while (isXMLSpace((char)c)) {
  +            c = r.read();
  +        }
  +
  +        if (c != '=') {
  +            return e;
  +        }
  +
  +        while (isXMLSpace((char)(c = r.read())));
  +            
  +        if (c != '"' && c != '\'') {
  +            return e;
  +        }
  +        char sc = (char)c;
  +
  +        for (;;) {
  +            c = r.read();
  +            if (!isXMLVersionCharacter((char)c)) {
  +                return e;
  +            }
  +            if (c == sc) {
  +                break;
  +            }
  +        }
  +
  +        if (!isXMLSpace((char)(c = r.read()))) {
  +            return e;
  +        }
  +        while (isXMLSpace((char)(c = r.read())));
  +
  +        if (c != 'e') {
  +            return e;
  +        }
  +        if ((c = r.read()) != 'n') {
  +            return e;
  +        }
  +        if ((c = r.read()) != 'c') {
  +            return e;
  +        }
  +        if ((c = r.read()) != 'o') {
  +            return e;
  +        }
  +        if ((c = r.read()) != 'd') {
  +            return e;
  +        }
  +        if ((c = r.read()) != 'i') {
  +            return e;
  +        }
  +        if ((c = r.read()) != 'n') {
  +            return e;
  +        }
  +        if ((c = r.read()) != 'g') {
  +            return e;
  +        }
  +
  +        c = r.read();
  +        while (isXMLSpace((char)c)) {
  +            c = r.read();
  +        }
  +
  +        if (c != '=') {
  +            return e;
  +        }
  +
  +        while (isXMLSpace((char)(c = r.read())));
  +            
  +        if (c != '"' && c != '\'') {
  +            return e;
  +        }
  +        sc = (char)c;
  +
  +        StringBuffer enc = new StringBuffer();
  +        for (;;) {
  +            if (c == -1) {
  +                return e;
  +            }
  +            if (c == sc) {
  +                return encodingToJavaEncoding(enc.toString(), e);
  +            }
  +            enc.append((char)c);
  +        }
  +    }
  +
  +    /**
  +     * Converts the given standard encoding representation to the
  +     * corresponding Java encoding string.
  +     * @param e the encoding string to convert.
  +     * @param de the encoding string if no corresponding encoding was found.
  +     */
  +    public static String encodingToJavaEncoding(String e, String de) {
  +        String result = (String)ENCODINGS.get(e.toUpperCase());
  +        return (result == null) ? de : result;
  +    }
  +
  +    /**
  +     * The table used to convert the encoding names.
  +     */
  +    protected static Map ENCODINGS = new HashMap();
  +    static {
  +        ENCODINGS.put("UTF-8",           "UTF8");
  +        ENCODINGS.put("UTF-16",          "Unicode");
  +        ENCODINGS.put("US-ASCII",        "ASCII");
  +
  +        ENCODINGS.put("ISO-8859-1",      "8859_1");
  +        ENCODINGS.put("ISO-8859-2",      "8859_2");
  +        ENCODINGS.put("ISO-8859-3",      "8859_3");
  +        ENCODINGS.put("ISO-8859-4",      "8859_4");
  +        ENCODINGS.put("ISO-8859-5",      "8859_5");
  +        ENCODINGS.put("ISO-8859-6",      "8859_6");
  +        ENCODINGS.put("ISO-8859-7",      "8859_7");
  +        ENCODINGS.put("ISO-8859-8",      "8859_8");
  +        ENCODINGS.put("ISO-8859-9",      "8859_9");
  +        ENCODINGS.put("ISO-2022-JP",     "JIS");
  +
  +        ENCODINGS.put("WINDOWS-31J",     "MS932");
  +        ENCODINGS.put("EUC-JP",          "EUCJIS");
  +        ENCODINGS.put("GB2312",          "GB2312");
  +        ENCODINGS.put("BIG5",            "Big5");
  +        ENCODINGS.put("EUC-KR",          "KSC5601");
  +        ENCODINGS.put("ISO-2022-KR",     "ISO2022KR");
  +        ENCODINGS.put("KOI8-R",          "KOI8_R");
  +
  +        ENCODINGS.put("EBCDIC-CP-US",    "CP037");
  +        ENCODINGS.put("EBCDIC-CP-CA",    "CP037");
  +        ENCODINGS.put("EBCDIC-CP-NL",    "CP037");
  +	ENCODINGS.put("EBCDIC-CP-WT",    "CP037");
  +        ENCODINGS.put("EBCDIC-CP-DK",    "CP277");
  +        ENCODINGS.put("EBCDIC-CP-NO",    "CP277");
  +        ENCODINGS.put("EBCDIC-CP-FI",    "CP278");
  +        ENCODINGS.put("EBCDIC-CP-SE",    "CP278");
  +        ENCODINGS.put("EBCDIC-CP-IT",    "CP280");
  +        ENCODINGS.put("EBCDIC-CP-ES",    "CP284");
  +        ENCODINGS.put("EBCDIC-CP-GB",    "CP285");
  +        ENCODINGS.put("EBCDIC-CP-FR",    "CP297");
  +        ENCODINGS.put("EBCDIC-CP-AR1",   "CP420");
  +        ENCODINGS.put("EBCDIC-CP-HE",    "CP424");
  +        ENCODINGS.put("EBCDIC-CP-BE",    "CP500");
  +        ENCODINGS.put("EBCDIC-CP-CH",    "CP500");
  +        ENCODINGS.put("EBCDIC-CP-ROECE", "CP870");
  +        ENCODINGS.put("EBCDIC-CP-YU",    "CP870");
  +        ENCODINGS.put("EBCDIC-CP-IS",    "CP871");
  +        ENCODINGS.put("EBCDIC-CP-AR2",   "CP918");
  +
  +        ENCODINGS.put("CP1252",          "CP1252");
  +    }
   }
  
  
  
  1.3       +12 -1     xml-batik/sources/org/apache/batik/util/gui/MemoryMonitor.java
  
  Index: MemoryMonitor.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/util/gui/MemoryMonitor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MemoryMonitor.java	2000/11/05 16:03:23	1.2
  +++ MemoryMonitor.java	2001/03/28 09:24:13	1.3
  @@ -24,7 +24,7 @@
    * track and display the memory usage.
    *
    * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
  - * @version $Id: MemoryMonitor.java,v 1.2 2000/11/05 16:03:23 hillion Exp $
  + * @version $Id: MemoryMonitor.java,v 1.3 2001/03/28 09:24:13 hillion Exp $
    */
   public class MemoryMonitor extends JFrame implements ActionMap {
       /**
  @@ -72,6 +72,7 @@
        */
       public MemoryMonitor(long time) {
   	super(resources.getString("Frame.title"));
  +        listeners.put("CollectButtonAction", new CollectButtonAction());
           listeners.put("CloseButtonAction", new CloseButtonAction());
   	
   	panel = new Panel(time);
  @@ -83,6 +84,7 @@
   
   	JPanel p = new JPanel(new FlowLayout(FlowLayout.RIGHT));
   	ButtonFactory bf = new ButtonFactory(bundle, this);
  +	p.add(bf.createJButton("CollectButton"));
   	p.add(bf.createJButton("CloseButton"));
   	getContentPane().add("South", p);
   		
  @@ -119,6 +121,15 @@
        */
       public Action getAction(String key) throws MissingListenerException {
   	return (Action)listeners.get(key);
  +    }
  +
  +    /**
  +     * The action associated with the 'Collect' button of the memory monitor.
  +     */
  +    protected class CollectButtonAction extends AbstractAction {
  +        public void actionPerformed(ActionEvent e) {
  +            System.gc();
  +        }
       }
   
       /**
  
  
  

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