-/* $Id$
-
-This file is part of libmspdatafile
-Copyright © 2006 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-#include <cctype>
-#include <sstream>
+#include <msp/strings/format.h>
#include "binaryparser.h"
#include "parser.h"
#include "statement.h"
namespace Msp {
namespace DataFile {
-Parser::Parser(istream &i, const string &s):
+Parser::Parser(IO::Base &i, const string &s):
in(i),
+ main_src(s),
src(s),
good(true),
mode(new TextParser(in, src))
{
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<string>();
+ if(s.empty())
+ src = main_src;
+ else
+ src = format("%s[%s]", main_src, s);
}
else
return st;
}
catch(const Exception &e)
{
- good=false;
+ good = false;
throw;
}
}