]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/parser.h
Restructure control statement processing
[libs/datafile.git] / source / parser.h
index 5bec123ae74f7aeee3485dbbeeb226d0bad928b7..0989bd9d2d1fe378920c469c845f71435d799b28 100644 (file)
@@ -1,14 +1,6 @@
-/* $Id$
-
-This file is part of libmspdatafile
-Copyright © 2006-2007  Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
 #ifndef MSP_DATAFILE_PARSER_H_
 #define MSP_DATAFILE_PARSER_H_
 
-#include <istream>
 #include <string>
 #include "input.h"
 
@@ -17,21 +9,38 @@ namespace DataFile {
 
 class ParserMode;
 class Statement;
-struct Token;
 
+/**
+Frontend for loading datafiles.  Handles switching between text and binary
+formats.  A Parser evaluates into a boolean value indicating whether more
+statements may be read.
+*/
 class Parser
 {
+private:
+       Input in;
+       std::string main_src;
+       std::string src;
+       bool good;
+       ParserMode *mode;
+
 public:
-       Parser(std::istream &, const std::string &);
+       Parser(IO::Base &i, const std::string &s);
        ~Parser();
 
-       Statement parse();
-       operator bool() const { return in; }
+       /**
+       Reads a statement from the input.  If the end of input was reached, an empty
+       invalid statement will be returned.  If an error occurs, the parser will be
+       marked as bad and no more statements may be read, even if the exception was
+       caught.
+       */
+       Statement parse(bool raw = false);
+
 private:
-       Input       in;
-       std::string src;
-       bool        good;
-       ParserMode  *mode;
+       void process_control_statement(const Statement &);
+
+public:
+       operator bool() const { return good && in; }
 };
 
 } // namespace DataFile