00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __INPUTPARSER_HPP
00023 #define __INPUTPARSER_HPP
00024
00025 #include <vector>
00026 #include <string>
00027 #include <istream>
00028
00029 #include <xqilla/framework/XQillaExport.hpp>
00030
00031 class XQILLA_API InputParser
00032 {
00033 public:
00034 typedef std::vector<std::string> Args;
00035
00036 int parse(std::istream &input, Args &args);
00037
00038 private:
00039 void reset();
00040 void whitespace(Args &args);
00041 void character();
00042 void escapedCharacter();
00043 bool inQuotes();
00044 void quote(Args &args, char c);
00045 void openCurly();
00046 void closeCurly();
00047 void endOfArg(Args &args);
00048 void addArgument(Args &args, std::string::size_type start, std::string::size_type end);
00049 void nextLine(std::istream &input, Args &args);
00050
00051 std::string line_;
00052 std::string::size_type start_, pos_;
00053 char quoteChar_;
00054 int curlyBraceDepth_;
00055 bool seenNonWS_;
00056 bool stripQuotes_;
00057 };
00058
00059 #endif