X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Ftextwriter.cpp;h=08909a1c6ed952b190754063d628f4e0e3dbe3dc;hb=a582163d380833b1370ba067a1fd0ad5c2984723;hp=def744c33b06ff945c4cfccbe28025bb43402872;hpb=2f79370bffe0bac865dc97c5114dc87c1936fbb4;p=libs%2Fdatafile.git diff --git a/source/textwriter.cpp b/source/textwriter.cpp index def744c..08909a1 100644 --- a/source/textwriter.cpp +++ b/source/textwriter.cpp @@ -1,10 +1,11 @@ /* $Id$ This file is part of libmspdatafile -Copyright © 2006 Mikko Rasa, Mikkosoft Productions +Copyright © 2007-2008, 2010 Mikko Rasa, Mikkosoft Productions Distributed under the LGPL */ +#include #include #include "statement.h" #include "textwriter.h" @@ -14,7 +15,7 @@ using namespace std; namespace Msp { namespace DataFile { -TextWriter::TextWriter(ostream &o): +TextWriter::TextWriter(IO::Base &o): WriterMode(o) { } @@ -27,25 +28,29 @@ void TextWriter::write_(const Statement &st, unsigned level) { string indent(level, '\t'); - out<get_type()==STRING) - out<<'\"'<get_raw(), false)<<'\"'; - else if(i->get_type()==BOOLEAN) - out<<(i->get() ? "true" : "false"); - else - out<get_raw(); + out.put(' '); + if(i->get_signature()==StringType::signature) + IO::print(out, "\"%s\"", c_escape(i->get(), false)); + else if(i->get_signature()==BoolType::signature) + out.write(i->get() ? "true" : "false"); + else if(i->get_signature()==IntType::signature) + out.write(lexical_cast(i->get())); + else if(i->get_signature()==FloatType::signature) + out.write(format("%15g", (i->get()))); + else if(i->get_signature()==SymbolType::signature) + out.write(i->get().name); } if(!st.sub.empty()) { - out<<'\n'<::const_iterator i=st.sub.begin(); i!=st.sub.end(); ++i) + IO::print(out, "\n%s{\n", indent); + for(list::const_iterator i = st.sub.begin(); i!=st.sub.end(); ++i) write_(*i, level+1); - out<