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 --- manifest.mf | 2 +- nbproject/project.xml | 109 ++++++++++++++++++++- .../com/kitfox/salamander/parser/SVGParser.java | 42 +++++++- 3 files changed, 147 insertions(+), 6 deletions(-) diff --git a/manifest.mf b/manifest.mf index b8c9199..10cc22d 100755 --- a/manifest.mf +++ b/manifest.mf @@ -9,6 +9,6 @@ Specification-Title: SVG Salamander Specification-Version: 1 Specification-Vendor: Kitfox Implementation-Title: svg-salamander-core -Implementation-Version: Version 1, Date April 11 2007 +Implementation-Version: Version 1, Date April 12 2007 Implementation-Vendor: Mark McKay, mark@kitfox.com diff --git a/nbproject/project.xml b/nbproject/project.xml index 5a6fefc..5b57d8a 100755 --- a/nbproject/project.xml +++ b/nbproject/project.xml @@ -5,7 +5,10 @@ svg-salamander-core - + + C:/dev/svn.dev.java.net/svgsalamander/trunk/svg-core/src/main/java + C:/dev/svn.dev.java.net/svgsalamander/trunk/svg-core/src/test/java + @@ -48,6 +51,105 @@ clean build + + debug + + + compile-selected-files + + files + ${src.main.dir} + \.java$ + relative-path + + , + + + + + compile-selected-files-test + + files + ${src.test.dir} + \.java$ + relative-path + + , + + + + + run-selected-files + + classname + ${src.main.dir} + \.java$ + java-name + + + + + + + run-selected-files-test + + classname + ${src.test.dir} + \.java$ + java-name + + + + + + + debug-selected-files + + classname + ${src.main.dir} + \.java$ + java-name + + + + + + + debug-selected-files-test + + classname + ${src.test.dir} + \.java$ + java-name + + + + + + + debug-fix + + fix.file + ${src.main.dir} + \.java$ + relative-path-noext + + + + + + + test-selected-files + + classname + ${src.main.dir} + \.java$ + java-name + + + + + jar @@ -81,6 +183,7 @@ + @@ -90,7 +193,7 @@ src/main/java - lib/library/ant.jar;lib/library/javacc.jar;lib/library/junit.jar + lib/library/javacc.jar;lib/library/junit.jar;../../../../svn.apache.org/ant-core/lib/ant.jar build/jar/svg-salamander-core.jar 1.5 @@ -101,7 +204,7 @@ src/test/java - lib/library/ant.jar;lib/library/javacc.jar;lib/library/junit.jar;build/jar/svg-salamander-core.jar + lib/library/javacc.jar;lib/library/junit.jar;build/jar/svg-salamander-core.jar;../../../../svn.apache.org/ant-core/lib/ant.jar 1.5 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