X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Flisp%2Fwriter.cpp;h=66728fb1bfc815daf06c79b4940007c84188738b;hb=27b03ae38a4bdc995d41500ce8d3f4bb1b23a76b;hp=1ba15203b4604a9a7c0d7cb1e3266cb4f73e2467;hpb=ba598f2a1c377a42c76088cc7e234917ab25e693;p=supertux.git diff --git a/src/lisp/writer.cpp b/src/lisp/writer.cpp index 1ba15203b..66728fb1b 100644 --- a/src/lisp/writer.cpp +++ b/src/lisp/writer.cpp @@ -1,12 +1,10 @@ -// $Id$ +// SuperTux +// Copyright (C) 2006 Matthias Braun // -// SuperTux - A Jump'n Run -// Copyright (C) 2004 Matthias Braun +// along with this program. If not, see . -#include +#include "lisp/writer.hpp" -#include "writer.hpp" -#include "physfs/physfs_stream.hpp" -#include "msg.hpp" +#include "physfs/buffered_ofile_stream.hpp" +#include "util/log.hpp" -namespace lisp -{ +namespace lisp { -Writer::Writer(const std::string& filename) +Writer::Writer(const std::string& filename) : + out(), + out_owned(), + indent_depth(), + lists() { - out = new OFileStream(filename); + BufferedOFileStream* filestream = new BufferedOFileStream(filename); + out = filestream->get_stream(); out_owned = true; indent_depth = 0; + out->precision(10); } - -Writer::Writer(std::ostream* newout) + +Writer::Writer(std::ostream* newout) : + out(), + out_owned(), + indent_depth(), + lists() { out = newout; out_owned = false; indent_depth = 0; + out->precision(10); } Writer::~Writer() { if(lists.size() > 0) { - msg_warning << "Not all sections closed in lispwriter" << std::endl; + log_warning << "Not all sections closed in lispwriter" << std::endl; } if(out_owned) delete out; @@ -76,37 +80,37 @@ void Writer::end_list(const std::string& listname) { if(lists.size() == 0) { - msg_warning << "Trying to close list '" << listname << "', which is not open" << std::endl; + log_warning << "Trying to close list '" << listname << "', which is not open" << std::endl; return; } if(lists.back() != listname) { - msg_warning << "trying to close list '" << listname << "' while list '" << lists.back() << "' is open" << std::endl; + log_warning << "trying to close list '" << listname << "' while list '" << lists.back() << "' is open" << std::endl; return; } lists.pop_back(); - + indent_depth -= 2; indent(); *out << ")\n"; } void -Writer::write_int(const std::string& name, int value) +Writer::write(const std::string& name, int value) { indent(); *out << '(' << name << ' ' << value << ")\n"; } void -Writer::write_float(const std::string& name, float value) +Writer::write(const std::string& name, float value) { indent(); *out << '(' << name << ' ' << value << ")\n"; } void -Writer::write_string(const std::string& name, const std::string& value, - bool translatable) +Writer::write(const std::string& name, const std::string& value, + bool translatable) { indent(); *out << '(' << name; @@ -122,15 +126,15 @@ Writer::write_string(const std::string& name, const std::string& value, } void -Writer::write_bool(const std::string& name, bool value) +Writer::write(const std::string& name, bool value) { indent(); *out << '(' << name << ' ' << (value ? "#t" : "#f") << ")\n"; } void -Writer::write_int_vector(const std::string& name, - const std::vector& value) +Writer::write(const std::string& name, + const std::vector& value) { indent(); *out << '(' << name; @@ -140,8 +144,8 @@ Writer::write_int_vector(const std::string& name, } void -Writer::write_int_vector(const std::string& name, - const std::vector& value) +Writer::write(const std::string& name, + const std::vector& value) { indent(); *out << '(' << name; @@ -151,8 +155,8 @@ Writer::write_int_vector(const std::string& name, } void -Writer::write_float_vector(const std::string& name, - const std::vector& value) +Writer::write(const std::string& name, + const std::vector& value) { indent(); *out << '(' << name; @@ -162,6 +166,19 @@ Writer::write_float_vector(const std::string& name, } void +Writer::write(const std::string& name, + const std::vector& value) +{ + indent(); + *out << '(' << name; + for(std::vector::const_iterator i = value.begin(); i != value.end(); ++i) { + *out << " "; + write_escaped_string(*i); + } + *out << ")\n"; +} + +void Writer::write_escaped_string(const std::string& str) { *out << '"'; @@ -184,3 +201,5 @@ Writer::indent() } } // end of namespace lisp + +/* EOF */