/** ******************************************************************************* * Copyright (C) 1996-2001, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* * * $Source: /xsrl/Nsvn/icu/unicodetools/com/ibm/text/utility/IndentWriter.java,v $ * $Date: 2001/08/31 00:19:16 $ * $Revision: 1.2 $ * ******************************************************************************* */ package com.ibm.text.utility; import java.io.*; public class IndentWriter extends Writer { public IndentWriter(Writer writer) { this.writer = writer; this.width = 30000; this.separator = " "; } public IndentWriter(OutputStream writer, String encoding) throws UnsupportedEncodingException{ this.writer = new OutputStreamWriter(writer, encoding); this.width = 30000; this.separator = " "; } public void setSeparator(String separator) { this.separator = separator; } public String getSeparator() { return separator; } public void setWidth(int width) { this.width = width; } public int getWidth() { return width; } public void indentBy(int indentDelta) throws IOException { this.indent += indentDelta; flush(); } public void setIndent(int indent) { this.indent = indent; } public int getIndent() { return indent; } /* public void write(String cbuf, int off, int len) throws IOException { if (buffer.length() + len > width) { flushLine(); buffer.append(" ".substring(0,indent)); buffer.append("(" + indent + ") "); } else { buffer.append(separator); } buffer.append(cbuf, off, len); } public void write(String string) throws IOException { write(string,0,string.length()); } */ public void write(int indent, String string) throws IOException { setIndent(indent); write(string,0,string.length()); } public void writeln(int indent, String string) throws IOException { write(indent, string); flushLine(); } public void writeln(String string) throws IOException { write(string); flushLine(); } public void writeln() throws IOException { flushLine(); } public void write(char cbuf[], int off, int len) throws IOException { if (buffer.length() == 0) { bufferIndent = indent; } else if (bufferIndent + buffer.length() + separator.length() + len > width) { flushLine(); } else { buffer.append(separator); } buffer.append(cbuf, off, len); } public void flushLine() throws IOException { if (buffer.length() != 0) { // indent writer.write(" ",0,bufferIndent); writer.write(buffer.toString()); writer.write(EOL); buffer.setLength(0); } } public void flush() throws IOException { flushLine(); writer.flush(); } public void close() throws IOException { flush(); writer.close(); } private Writer writer; private StringBuffer buffer = new StringBuffer(200); private int width; private int indent; private int bufferIndent; private String separator; private static String EOL; static { // gets platform-specific eol StringWriter foo = new StringWriter(); PrintWriter fii = new PrintWriter(foo); fii.println(); fii.flush(); EOL = foo.toString(); } }