[Jreepad-CVS] jreepad/src/jreepad/io TreepadWriter.java, NONE, 1.1 JreepadWriter.java, NONE, 1.1 Jr
Brought to you by:
danstowell
From: PeWu <pe...@us...> - 2007-01-18 09:37:30
|
Update of /cvsroot/jreepad/jreepad/src/jreepad/io In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv22523/src/jreepad/io Added Files: TreepadWriter.java JreepadWriter.java JreepadReader.java XmlWriter.java Log Message: refactoring: started new reader/writer framework and moved two writers out from JreepadNode --- NEW FILE: JreepadWriter.java --- package jreepad.io; import java.io.IOException; import java.io.OutputStream; import jreepad.JreepadNode; /** * Interface for classes that export Jreepad trees. * * @author <a href="mailto:pe...@lo...">Przemek WiÄch</a> * @version $Id$ */ public interface JreepadWriter { public void write(OutputStream out, JreepadNode node) throws IOException; } --- NEW FILE: JreepadReader.java --- package jreepad.io; import java.io.IOException; import java.io.Reader; import jreepad.JreepadNode; /** * Interface for classes that read Jreepad trees. * * @author <a href="mailto:pe...@lo...">Przemek WiÄch</a> * @version $Id$ */ public interface JreepadReader { public JreepadNode read(Reader in) throws IOException; } --- NEW FILE: TreepadWriter.java --- package jreepad.io; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.Enumeration; import jreepad.JreepadNode; /** * Writes the Jreepad tree as a Treepad file. * * @version $Id$ */ public class TreepadWriter implements JreepadWriter { private String encoding; public TreepadWriter(String encoding) { this.encoding = encoding; } public void write(OutputStream out, JreepadNode node) throws IOException { Writer writer = new OutputStreamWriter(out, encoding); writer.write("<Treepad version 2.7>\n"); writeNode(writer, node, 0); writer.close(); } private void writeNode(Writer writer, JreepadNode node, int depth) throws IOException { writer.write("dt=Text\n<node>\n"); writer.write(node.getTitle()); writer.write("\n"); writer.write(depth + "\n"); writer.write(node.getContent()); writer.write("\n"); writer.write("<end node> 5P9i0s8y19Z\n"); Enumeration kids = node.children(); while (kids.hasMoreElements()) writeNode(writer, (JreepadNode)kids.nextElement(), depth + 1); } } --- NEW FILE: XmlWriter.java --- package jreepad.io; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.Enumeration; import jreepad.JreepadNode; /** * Writes the Jreepad tree as XML. * * @version $Id$ */ public class XmlWriter implements JreepadWriter { private String encoding; public XmlWriter(String encoding) { this.encoding = encoding; } public void write(OutputStream out, JreepadNode node) throws IOException { Writer writer = new OutputStreamWriter(out, encoding); writer.write("<?xml version=\"1.0\" encoding=\"" + encoding + "\"?>\n"); writeNode(writer, node, 0, true); out.close(); } private void writeNode(Writer writer, JreepadNode node, int depth, boolean includeChildren) throws IOException { writer.write("<node "); if (depth == 0) writer.write("xmlns=\"http://jreepad.sourceforge.net/formats\" "); writer.write("title=\"" + xmlEscapeChars(node.getTitle()) + "\" type=\""); switch (node.getArticleMode()) { case JreepadNode.ARTICLEMODE_HTML: writer.write("text/html"); break; case JreepadNode.ARTICLEMODE_TEXTILEHTML: writer.write("text/textile"); break; case JreepadNode.ARTICLEMODE_CSV: writer.write("text/csv"); break; default: writer.write("text/plain"); break; } writer.write("\">"); writer.write(xmlEscapeChars(node.getContent())); if (includeChildren) { Enumeration kids = node.children(); while (kids.hasMoreElements()) writeNode(writer, (JreepadNode)kids.nextElement(), depth + 1, includeChildren); } writer.write("</node>\n"); } public String getEncoding() { return encoding; } public void setEncoding(String encoding) { this.encoding = encoding; } private static String xmlEscapeChars(String in) { char[] c = in.toCharArray(); StringBuffer ret = new StringBuffer(); for (int i = 0; i < c.length; i++) if (c[i] == '<') ret.append("<"); else if (c[i] == '>') ret.append(">"); else if (c[i] == '&') ret.append("&"); else if (c[i] == '"') ret.append("""); else ret.append(c[i]); return ret.toString(); } } |