00001
00002
00003 #include <fstream>
00004
00005 #include "cheprep/IndentPrintWriter.h"
00006
00007 using namespace std;
00008
00013 namespace cheprep {
00014
00015 IndentPrintWriter::IndentPrintWriter(ostream* outstream, int level)
00016 : out(outstream),
00017 closed(false),
00018 indentLevel(level),
00019 indented(false),
00020 indentString(" ") {
00021 }
00022
00023 IndentPrintWriter::~IndentPrintWriter() {
00024 }
00025
00026 void IndentPrintWriter::close() {
00027 if (!closed) {
00028 out->flush();
00029 closed = true;
00030 }
00031 }
00032
00033 IndentPrintWriter& IndentPrintWriter::operator<< (const std::string & s) {
00034 if (!indented) doIndent();
00035 *out << s;
00036 return *this;
00037 }
00038
00039 IndentPrintWriter& IndentPrintWriter::operator<< (ostream& (*)(ostream&)) {
00040 *out << endl;
00041 indented = false;
00042 return *this;
00043 }
00044
00045 void IndentPrintWriter::println(const string & s) {
00046 *this << s << endl;
00047 }
00048
00049 void IndentPrintWriter::print(const string & s) {
00050 *this << s;
00051 }
00052
00053 void IndentPrintWriter::println() {
00054 *out << endl;
00055 indented = false;
00056 }
00057
00058 void IndentPrintWriter::doIndent() {
00059 for (int i=0; i<indentLevel; i++) {
00060 *out << indentString;
00061 }
00062 indented = true;
00063 }
00064
00065 void IndentPrintWriter::indent() {
00066 indentLevel++;
00067 }
00068
00069 void IndentPrintWriter::outdent() {
00070 indentLevel--;
00071 }
00072
00073 int IndentPrintWriter::getIndent() const {
00074 return indentLevel;
00075 }
00076
00077 void IndentPrintWriter::setIndent(const int level) {
00078 indentLevel = level;
00079 }
00080
00081 string IndentPrintWriter::getIndentString() const {
00082 return indentString;
00083 }
00084
00085 void IndentPrintWriter::setIndentString(const string & anIndent) {
00086 indentString = anIndent;
00087 }
00088
00089 }