]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/parser.cpp
Style update: add spaces around assignments
[libs/datafile.git] / source / parser.cpp
index 06e5a8c33745e78e3855a32f4148e939e93e390f..1d225cb21d243c670dec03b29e5a4724cc47bd00 100644 (file)
@@ -4,8 +4,7 @@ This file is part of libmspdatafile
 Copyright © 2006  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
-#include <cctype>
-#include <sstream>
+#include <msp/strings/formatter.h>
 #include "binaryparser.h"
 #include "parser.h"
 #include "statement.h"
@@ -18,6 +17,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 +37,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<string>();
+                               if(s.empty())
+                                       src = main_src;
+                               else
+                                       src = format("%s[%s]", main_src, s);
                        }
                        else
                                return st;
@@ -54,7 +62,7 @@ Statement Parser::parse()
        }
        catch(const Exception &e)
        {
-               good=false;
+               good = false;
                throw;
        }
 }