summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorkitfox2007-04-12 18:21:34 +0200
committerkitfox2007-04-12 18:21:34 +0200
commit705a06dea7d4d77ef9239ea61185f823a451977f (patch)
tree0a5ce839ced97a6ac1c0e335c7786bd1492b9f1b /src
parentAdding NB build file (diff)
downloadsvg-salamander-core-705a06dea7d4d77ef9239ea61185f823a451977f.tar.gz
svg-salamander-core-705a06dea7d4d77ef9239ea61185f823a451977f.tar.xz
svg-salamander-core-705a06dea7d4d77ef9239ea61185f823a451977f.zip
Pseudocode for main rendering logic.
git-svn-id: https://svn.java.net/svn/svgsalamander~svn/trunk/svg-core@9 7dc7fa77-23fb-e6ad-8e2e-c86bd48ed22b
Diffstat (limited to 'src')
-rwxr-xr-xsrc/main/java/com/kitfox/salamander/parser/SVGParser.java42
1 files changed, 40 insertions, 2 deletions
diff --git a/src/main/java/com/kitfox/salamander/parser/SVGParser.java b/src/main/java/com/kitfox/salamander/parser/SVGParser.java
index efdf6b9..d588b08 100755
--- a/src/main/java/com/kitfox/salamander/parser/SVGParser.java
+++ b/src/main/java/com/kitfox/salamander/parser/SVGParser.java
@@ -9,9 +9,15 @@
package com.kitfox.salamander.parser;
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
+import java.io.InputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
@@ -33,7 +39,12 @@ public class SVGParser
{
}
- public static void parse(File source, SVGParserListener listener, boolean skipUpToDateFiles)
+ /**
+ * Parse an SVG document. The document may be either uncompressed XML (.svg)
+ * or a zipped document (.svgz). This routine will automatically detect
+ * zipped documents and unzip them.
+ */
+ public static void parse(File source, SVGParserListener listener)
{
try
{
@@ -42,7 +53,34 @@ public class SVGParser
SVGParserHandler handler = new SVGParserHandler(listener);
parser.setContentHandler(handler);
- InputSource is = new InputSource(new FileInputStream(source));
+ FileInputStream fis = new FileInputStream(source);
+ BufferedInputStream bis = new BufferedInputStream(fis);
+ bis.mark(4);
+ //Check for gzip magic number
+ DataInputStream din = new DataInputStream(bis);
+ long magicNumber = din.readLong();
+ bis.reset();
+
+ InputStream svgStream;
+ if ((int)magicNumber == 0x4b50)
+ {
+ //PK Zip file
+ ZipInputStream zin = new ZipInputStream(bis);
+ ZipEntry entry = zin.getNextEntry();
+ byte[] buf = new byte[(int)entry.getSize()];
+ for (int offset = 0; offset < buf.length; offset += zin.read(buf, offset, buf.length - offset));
+ zin.closeEntry();
+ zin.close();
+
+ svgStream = new ByteArrayInputStream(buf);
+ }
+ else
+ {
+ //Treat input as uncompressed XML
+ svgStream = bis;
+ }
+
+ InputSource is = new InputSource(svgStream);
parser.parse(is);
}