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