X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Flisp%2Fwriter.cpp;h=4126b7fad277059470093aa5b25f11f5e82708a5;hb=3da5eb5cc8f63053aaebb48cb2fffbed66f30d47;hp=8b5bc186e0db4f57e4d318c8d692f36a1984b706;hpb=67690e081c28b818e94796be284206326bc8a6b9;p=supertux.git diff --git a/src/lisp/writer.cpp b/src/lisp/writer.cpp index 8b5bc186e..4126b7fad 100644 --- a/src/lisp/writer.cpp +++ b/src/lisp/writer.cpp @@ -1,7 +1,7 @@ // $Id$ // -// SuperTux - A Jump'n Run -// Copyright (C) 2004 Matthias Braun // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -23,7 +23,7 @@ #include "writer.hpp" #include "physfs/physfs_stream.hpp" -#include "msg.hpp" +#include "log.hpp" namespace lisp { @@ -45,7 +45,7 @@ Writer::Writer(std::ostream* newout) 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; @@ -58,10 +58,15 @@ Writer::write_comment(const std::string& comment) } void -Writer::start_list(const std::string& listname) +Writer::start_list(const std::string& listname, bool string) { indent(); - *out << '(' << listname << '\n'; + *out << '('; + if(string) + write_escaped_string(listname); + else + *out << listname; + *out << '\n'; indent_depth += 2; lists.push_back(listname); @@ -71,11 +76,11 @@ 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(); @@ -106,9 +111,13 @@ Writer::write_string(const std::string& name, const std::string& value, indent(); *out << '(' << name; if(translatable) { - *out << " (_ \"" << value << "\"))\n"; + *out << " (_ "; + write_escaped_string(value); + *out << "))\n"; } else { - *out << " \"" << value << "\")\n"; + *out << " "; + write_escaped_string(value); + *out << ")\n"; } } @@ -153,6 +162,21 @@ Writer::write_float_vector(const std::string& name, } void +Writer::write_escaped_string(const std::string& str) +{ + *out << '"'; + for(const char* c = str.c_str(); *c != 0; ++c) { + if(*c == '\"') + *out << "\\\""; + else if(*c == '\\') + *out << "\\\\"; + else + *out << *c; + } + *out << '"'; +} + +void Writer::indent() { for(int i = 0; i