// $Id: writer.cpp 2575 2005-06-07 15:59:27Z matzebraun $ // // SuperTux - A Jump'n Run // Copyright (C) 2004 Matthias Braun #include #include "writer.hpp" #include "physfs/physfs_stream.hpp" namespace lisp { Writer::Writer(const std::string& filename) { out = new OFileStream(filename); out_owned = true; indent_depth = 0; } Writer::Writer(std::ostream* newout) { out = newout; out_owned = false; indent_depth = 0; } Writer::~Writer() { if(lists.size() > 0) { std::cerr << "Warning: Not all sections closed in lispwriter!\n"; } if(out_owned) delete out; } void Writer::write_comment(const std::string& comment) { *out << "; " << comment << "\n"; } void Writer::start_list(const std::string& listname) { indent(); *out << '(' << listname << '\n'; indent_depth += 2; lists.push_back(listname); } void Writer::end_list(const std::string& listname) { if(lists.size() == 0) { std::cerr << "Trying to close list '" << listname << "', which is not open.\n"; return; } if(lists.back() != listname) { std::cerr << "Warning: trying to close list '" << listname << "' while list '" << lists.back() << "' is open.\n"; return; } lists.pop_back(); indent_depth -= 2; indent(); *out << ")\n"; } void Writer::write_int(const std::string& name, int value) { indent(); *out << '(' << name << ' ' << value << ")\n"; } void Writer::write_float(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) { indent(); *out << '(' << name; if(translatable) { *out << " (_ \"" << value << "\"))\n"; } else { *out << " \"" << value << "\")\n"; } } void Writer::write_bool(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) { indent(); *out << '(' << name; for(std::vector::const_iterator i = value.begin(); i != value.end(); ++i) *out << " " << *i; *out << ")\n"; } void Writer::write_int_vector(const std::string& name, const std::vector& value) { indent(); *out << '(' << name; for(std::vector::const_iterator i = value.begin(); i != value.end(); ++i) *out << " " << *i; *out << ")\n"; } void Writer::indent() { for(int i = 0; i