From 705a06dea7d4d77ef9239ea61185f823a451977f Mon Sep 17 00:00:00 2001 From: kitfox Date: Thu, 12 Apr 2007 16:21:34 +0000 Subject: Pseudocode for main rendering logic. git-svn-id: https://svn.java.net/svn/svgsalamander~svn/trunk/svg-core@9 7dc7fa77-23fb-e6ad-8e2e-c86bd48ed22b --- .../com/kitfox/salamander/parser/SVGParser.java | 42 ++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) (limited to 'src') 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); } -- cgit v1.2.3-55-g7522