package org.freehep.util.io;
import java.io.PrintWriter;
import java.io.Writer;
/**
* A PrintWriter that keeps track of an indentation level and indents the output
* appropriately.
*
* @author Tony Johnson
* @author Mark Donszelmann
* @version $Id: IndentPrintWriter.java,v 1.3 2008-05-04 12:22:13 murkle Exp $
*/
public class IndentPrintWriter extends PrintWriter {
/**
* Creates an Indent PrintWriter.
*
* @param w
* writer to write to
* @param level
* starting indentation level
*/
public IndentPrintWriter(Writer w, int level) {
super(w);
setIndent(level);
}
/**
* Creates an Indent PrintWriter with indentation level 0.
*
* @param w
* writer to write to
*/
public IndentPrintWriter(Writer w) {
this(w, 0);
}
@Override
public void print(boolean s) {
doIndent();
super.print(s);
}
@Override
public void print(char s) {
doIndent();
super.print(s);
}
@Override
public void print(char[] s) {
doIndent();
super.print(s);
}
@Override
public void print(double s) {
doIndent();
super.print(s);
}
@Override
public void print(float s) {
doIndent();
super.print(s);
}
@Override
public void print(int s) {
doIndent();
super.print(s);
}
@Override
public void print(long s) {
doIndent();
super.print(s);
}
@Override
public void print(Object s) {
doIndent();
super.print(s);
}
@Override
public void print(String s) {
doIndent();
super.print(s);
}
@Override
public void println() {
indented = false;
super.println();
}
// all other println's are implemented by the superclass in terms of print's
private void doIndent() {
if (indented) {
return;
}
indented = true;
for (int i = 0; i < indent; i++) {
super.print(indentString);
}
}
/**
* Increase the indentation
*/
public void indent() {
indent++;
}
/**
* Decrease the indentation
*/
public void outdent() {
indent--;
}
/**
* Return the current indent count
*
* @return current indentation level
*/
public int getIndent() {
return indent;
}
/**
* Set the current indent count
*
* @param level
* new level
*/
public void setIndent(int level) {
indent = level;
}
/**
* Return the current indentString
*
* @return indent string
*
* @see #setIndentString(String)
*/
public String getIndentString() {
return indentString;
}
/**
* Set the current indentString. Default is a single tab per indent level.
*
* @param indentString
* The characters to prefix each line with (repeated for each
* indent level)
*/
public void setIndentString(String indentString) {
this.indentString = indentString;
}
private int indent = 0;
private boolean indented = false;
private String indentString = " ";
}