X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Flisp%2Fparser.cpp;h=2a09de80f3a101564c753523a3a80261f385f1e4;hb=f2d761ff31e00ea72783878b7e1586a357e15d5a;hp=8bc9005ece2a41d0589a15b6beed6d847c453036;hpb=3ac835b0dc9517e534829c8ffdec12b580d1927a;p=supertux.git diff --git a/src/lisp/parser.cpp b/src/lisp/parser.cpp index 8bc9005ec..2a09de80f 100644 --- a/src/lisp/parser.cpp +++ b/src/lisp/parser.cpp @@ -21,6 +21,7 @@ #include "lisp/lisp.hpp" #include "lisp/parser.hpp" +#include "util/gettext.hpp" #include "util/obstackpp.hpp" #include "physfs/ifile_stream.hpp" #include "physfs/ifile_streambuf.hpp" @@ -31,19 +32,26 @@ namespace lisp { Parser::Parser(bool translate) : - lexer(0), + lexer(0), filename(), - dictionary_manager(0), + dictionary_manager(0), dictionary(0), token(), - obst(), - searchpath() + searchpath(), + obst() { if(translate) { dictionary_manager = new tinygettext::DictionaryManager(); dictionary_manager->set_charset("UTF-8"); - if (g_config && (g_config->locale != "")) - dictionary_manager->set_language(tinygettext::Language::from_name(g_config->locale)); + if (g_config) { + if (g_config->locale != "") { + dictionary_manager->set_language(tinygettext::Language::from_name(g_config->locale)); + } + else if(g_dictionary_manager && g_dictionary_manager->get_language()) { + // Language set to auto-detect? + dictionary_manager->set_language(g_dictionary_manager->get_language()); + } + } } obstack_init(&obst); @@ -55,7 +63,7 @@ Parser::~Parser() obstack_free(&obst, NULL); delete lexer; delete dictionary_manager; - delete searchpath; + PHYSFS_freeList(searchpath); } static std::string dirname(const std::string& filename) @@ -68,19 +76,19 @@ static std::string dirname(const std::string& filename) } const Lisp* -Parser::parse(const std::string& filename) +Parser::parse(const std::string& filename_) { - IFileStreambuf ins(filename); + IFileStreambuf ins(filename_); std::istream in(&ins); if(!in.good()) { std::stringstream msg; - msg << "Parser problem: Couldn't open file '" << filename << "'."; + msg << "Parser problem: Couldn't open file '" << filename_ << "'."; throw std::runtime_error(msg.str()); } if(dictionary_manager) { - std::string rel_dir = dirname (filename); + std::string rel_dir = dirname (filename_); for(char** i = searchpath; *i != NULL; i++) { std::string abs_dir = std::string (*i) + PHYSFS_getDirSeparator () + rel_dir; @@ -89,7 +97,7 @@ Parser::parse(const std::string& filename) dictionary = & (dictionary_manager->get_dictionary()); } - return parse(in, filename); + return parse(in, filename_); } const Lisp*