1 #include <msp/io/print.h>
2 #include <msp/strings/utils.h>
5 #include "textwriter.h"
12 TextWriter::TextWriter(Output &o):
17 void TextWriter::set_float_precision(unsigned fp)
19 float_format = format("%%#.%dg", fp/4-1);
22 void TextWriter::write(const Statement &st)
27 void TextWriter::write_(const Statement &st, unsigned level)
29 string indent(level, '\t');
31 out.write(format("%s%s", indent, st.keyword));
32 for(ValueArray::const_iterator i = st.args.begin(); i!=st.args.end(); ++i)
35 if(i->get_signature()==StringType::signature)
36 out.write(format("\"%s\"", c_escape(i->get<StringType::Store>(), false)));
37 else if(i->get_signature()==BoolType::signature)
38 out.write(i->get<BoolType::Store>() ? "true" : "false");
39 else if(i->get_signature()==IntType::signature)
40 out.write(lexical_cast<string>(i->get<IntType::Store>()));
41 else if(i->get_signature()==FloatType::signature)
42 out.write(format(float_format, i->get<FloatType::Store>()));
43 else if(i->get_signature()==SymbolType::signature)
45 string name = i->get<SymbolType::Store>().name;
54 out.write(format("\n%s{\n", indent));
55 for(list<Statement>::const_iterator i = st.sub.begin(); i!=st.sub.end(); ++i)
57 out.write(format("%s}", indent));
62 } // namespace DataFile