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/02/06 15:17:04 UTC
cvs commit: xml-batik/sources/org/apache/batik/transcoder/svg2svg PrettyPrinter.java SVGTranscoder.java
hillion 01/02/06 06:17:04
Modified: sources/org/apache/batik/apps/svgpp Main.java
sources/org/apache/batik/dom/util DOMUtilities.java
sources/org/apache/batik/transcoder/svg2svg
PrettyPrinter.java SVGTranscoder.java
Log:
The SVG transcoder can now be used for DOM serialization.
Revision Changes Path
1.3 +2 -1 xml-batik/sources/org/apache/batik/apps/svgpp/Main.java
Index: Main.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/apps/svgpp/Main.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Main.java 2001/01/23 09:30:31 1.2
+++ Main.java 2001/02/06 14:17:03 1.3
@@ -25,7 +25,7 @@
* svgpp is a pretty-printer for SVG source files.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: Main.java,v 1.2 2001/01/23 09:30:31 hillion Exp $
+ * @version $Id: Main.java,v 1.3 2001/02/06 14:17:03 hillion Exp $
*/
public class Main {
@@ -112,6 +112,7 @@
}
transcoder.transcode(in, out);
} catch (Exception e) {
+ e.printStackTrace();
printUsage();
}
}
1.4 +118 -2 xml-batik/sources/org/apache/batik/dom/util/DOMUtilities.java
Index: DOMUtilities.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/util/DOMUtilities.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- DOMUtilities.java 2001/01/02 07:02:31 1.3
+++ DOMUtilities.java 2001/02/06 14:17:03 1.4
@@ -8,7 +8,11 @@
package org.apache.batik.dom.util;
+import java.io.IOException;
+import java.io.Writer;
+
import org.apache.batik.util.XMLUtilities;
+
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.DOMException;
@@ -21,7 +25,7 @@
* A collection of utility functions for the DOM.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: DOMUtilities.java,v 1.3 2001/01/02 07:02:31 hillion Exp $
+ * @version $Id: DOMUtilities.java,v 1.4 2001/02/06 14:17:03 hillion Exp $
*/
public class DOMUtilities extends XMLUtilities {
/**
@@ -31,6 +35,118 @@
}
/**
+ * Writes the given document using the given writer.
+ */
+ public static void writeDocument(Document doc, Writer w) throws IOException {
+ for (Node n = doc.getFirstChild();
+ n != null;
+ n = n.getNextSibling()) {
+ writeNode(n, w);
+ }
+ }
+
+ /**
+ * Writes a node using the given writer.
+ */
+ public static void writeNode(Node n, Writer w) throws IOException {
+ switch (n.getNodeType()) {
+ case Node.ELEMENT_NODE:
+ w.write("<");
+ w.write(n.getNodeName());
+
+ if (n.hasAttributes()) {
+ NamedNodeMap attr = n.getAttributes();
+ int len = attr.getLength();
+ for (int i = 0; i < len; i++) {
+ Attr a = (Attr)attr.item(i);
+ w.write(" ");
+ w.write(a.getNodeName());
+ w.write("=\"");
+ w.write(contentToString(a.getNodeValue()));
+ w.write("\"");
+ }
+ }
+
+ Node c = n.getFirstChild();
+ if (c != null) {
+ w.write(">");
+ for (; c != null;
+ c = c.getNextSibling()) {
+ writeNode(c, w);
+ }
+ w.write("</");
+ w.write(n.getNodeName());
+ w.write(">");
+ } else {
+ w.write("/>");
+ }
+ break;
+ case Node.TEXT_NODE:
+ w.write(contentToString(n.getNodeValue()));
+ break;
+ case Node.CDATA_SECTION_NODE:
+ w.write("<![CDATA[");
+ w.write(n.getNodeValue());
+ w.write("]]>");
+ break;
+ case Node.ENTITY_REFERENCE_NODE:
+ w.write("&");
+ w.write(n.getNodeName());
+ w.write(";");
+ break;
+ case Node.PROCESSING_INSTRUCTION_NODE:
+ w.write("<?");
+ w.write(n.getNodeName());
+ w.write(n.getNodeValue());
+ w.write("?>");
+ break;
+ case Node.COMMENT_NODE:
+ w.write("<!--");
+ w.write(n.getNodeValue());
+ w.write("-->");
+ break;
+ case Node.DOCUMENT_TYPE_NODE:
+ break;
+ default:
+ throw new Error("Internal error (" + n.getNodeType() + ")");
+ }
+ }
+
+ /**
+ * Returns the given content value transformed to replace invalid
+ * characters with entities.
+ */
+ public static String contentToString(String s) {
+ StringBuffer result = new StringBuffer();
+
+ for (int i = 0; i < s.length(); i++) {
+ char c = s.charAt(i);
+
+ switch (c) {
+ case '<':
+ result.append("<");
+ break;
+ case '>':
+ result.append(">");
+ break;
+ case '&':
+ result.append("&");
+ break;
+ case '"':
+ result.append(""");
+ break;
+ case '\'':
+ result.append("'");
+ break;
+ default:
+ result.append(c);
+ }
+ }
+
+ return result.toString();
+ }
+
+ /**
* Deep clones a document using the given DOM implementation.
*/
public static Document deepCloneDocument(Document doc, DOMImplementation impl) {
@@ -99,7 +215,7 @@
case Node.COMMENT_NODE:
return doc.createComment(n.getNodeValue());
default:
- throw new Error("Internal error (" + n.getNodeType() + ")");
+ throw new Error("Internal error (" + n.getNodeType() + ")");
}
}
1.2 +3 -2 xml-batik/sources/org/apache/batik/transcoder/svg2svg/PrettyPrinter.java
Index: PrettyPrinter.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/transcoder/svg2svg/PrettyPrinter.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- PrettyPrinter.java 2001/01/23 09:30:32 1.1
+++ PrettyPrinter.java 2001/02/06 14:17:04 1.2
@@ -28,7 +28,7 @@
* This class represents an SVG source files pretty-printer.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: PrettyPrinter.java,v 1.1 2001/01/23 09:30:32 hillion Exp $
+ * @version $Id: PrettyPrinter.java,v 1.2 2001/02/06 14:17:04 hillion Exp $
*/
public class PrettyPrinter {
@@ -596,6 +596,7 @@
if (t != LexicalUnits.END_CHAR) {
throw fatalError("end", null);
}
+ scanner.next();
output.printDoctypeEnd(endSpace);
} else {
if (doctypeOption == DOCTYPE_CHANGE) {
@@ -704,8 +705,8 @@
throw fatalError("end", null);
}
}
+ scanner.next();
}
- scanner.next();
}
/**
1.2 +23 -6 xml-batik/sources/org/apache/batik/transcoder/svg2svg/SVGTranscoder.java
Index: SVGTranscoder.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/transcoder/svg2svg/SVGTranscoder.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SVGTranscoder.java 2001/01/23 09:30:32 1.1
+++ SVGTranscoder.java 2001/02/06 14:17:04 1.2
@@ -9,9 +9,12 @@
package org.apache.batik.transcoder.svg2svg;
import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
import java.io.Reader;
import java.io.Writer;
+import org.apache.batik.dom.util.DOMUtilities;
import org.apache.batik.transcoder.AbstractTranscoder;
import org.apache.batik.transcoder.ErrorHandler;
import org.apache.batik.transcoder.TranscoderException;
@@ -21,11 +24,13 @@
import org.apache.batik.xml.scanner.LexicalException;
+import org.w3c.dom.Document;
+
/**
* This class is a trancoder from SVG to SVG.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: SVGTranscoder.java,v 1.1 2001/01/23 09:30:32 hillion Exp $
+ * @version $Id: SVGTranscoder.java,v 1.2 2001/02/06 14:17:04 hillion Exp $
*/
public class SVGTranscoder extends AbstractTranscoder {
@@ -137,14 +142,26 @@
*/
public void transcode(TranscoderInput input, TranscoderOutput output)
throws TranscoderException {
- // !!! TODO: other cases.
- if (input.getReader() == null) {
- throw new Error("Reader expected");
+ Reader r = input.getReader();
+ Writer w = output.getWriter();
+
+ if (r == null) {
+ Document d = input.getDocument();
+ if (d == null) {
+ throw new Error("Reader or Document expected");
+ }
+ StringWriter sw = new StringWriter();
+ try {
+ DOMUtilities.writeDocument(d, sw);
+ } catch (IOException e) {
+ throw new Error("IO");
+ }
+ r = new StringReader(sw.toString());
}
- if (output.getWriter() == null) {
+ if (w == null) {
throw new Error("Writer expected");
}
- prettyPrint(input.getReader(), output.getWriter());
+ prettyPrint(r, w);
}