X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fparser.cpp;h=a9bbbf22fe8ccb52cf8a60ede5d914f581fdcf04;hb=b39ce68f12c30eedb272b65fe78baec5864d89ca;hp=6166e561a984a0d99878f313199003fac095039b;hpb=29fafaa2c570b0cf92f41eeb534cfb65a841a892;p=libs%2Fdatafile.git diff --git a/source/parser.cpp b/source/parser.cpp index 6166e56..a9bbbf2 100644 --- a/source/parser.cpp +++ b/source/parser.cpp @@ -61,6 +61,9 @@ void Parser::process_control_statement(const Statement &st) { delete mode; mode = new BinaryParser(in, src); + + while(in.peek()=='\n') + in.get(); } else if(st.keyword=="__text") { @@ -83,5 +86,26 @@ void Parser::process_control_statement(const Statement &st) mode->process_control_statement(st); } +const StatementKey *Parser::peek(unsigned level) +{ + while(good) + { + const StatementKey *key = mode->peek(level); + if(key && !key->keyword.compare(0, 2, "__")) + process_control_statement(mode->parse()); + else + return key; + } + + return 0; +} + +bool Parser::parse_and_load(unsigned level, Loader &ldr, const LoaderAction &act) +{ + // Peek first to get any control statements processed + peek(level); + return mode->parse_and_load(level, ldr, act); +} + } // namespace DataFile } // namespace Msp