X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fparser.cpp;h=957018f7a35c1e302e659da5f4ac5650f14aeca6;hb=7df5e45c7f414f6a07681dc4ec2abb63b091a309;hp=06e5a8c33745e78e3855a32f4148e939e93e390f;hpb=6dd94a7fe90c6467024685fbac769067ddb74688;p=libs%2Fdatafile.git diff --git a/source/parser.cpp b/source/parser.cpp index 06e5a8c..957018f 100644 --- a/source/parser.cpp +++ b/source/parser.cpp @@ -1,11 +1,4 @@ -/* $Id$ - -This file is part of libmspdatafile -Copyright © 2006 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ -#include -#include +#include #include "binaryparser.h" #include "parser.h" #include "statement.h" @@ -18,6 +11,7 @@ namespace DataFile { Parser::Parser(IO::Base &i, const string &s): in(i), + main_src(s), src(s), good(true), mode(new TextParser(in, src)) @@ -37,16 +31,24 @@ Statement Parser::parse() { while(1) { - Statement st=mode->parse(); + Statement st = mode->parse(); if(st.keyword=="__bin") { delete mode; - mode=new BinaryParser(in, src); + mode = new BinaryParser(in, src); } else if(st.keyword=="__text") { delete mode; - mode=new TextParser(in, src); + mode = new TextParser(in, src); + } + else if(st.keyword=="__src") + { + string s = st.args[0].get(); + if(s.empty()) + src = main_src; + else + src = format("%s[%s]", main_src, s); } else return st; @@ -54,7 +56,7 @@ Statement Parser::parse() } catch(const Exception &e) { - good=false; + good = false; throw; } }