blob: d4ebd0e930d22790190770fa108a932d839e5bfb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
|
/**
* @module cscriptparser
* @author Guenther Neuwirth (0626638), Manuel Mausz (0728348)
* @brief class for parsing simple scriptfiles
* @date 17.04.2009
*/
#ifndef CSCRIPTPARSER_H
#define CSCRIPTPARSER_H
#include <stdexcept>
#include <string>
#include <list>
#include <set>
#include "cfile.h"
/**
* @class CScriptparser
*
* Parses a simple line based scriptfile with some limitations:
* first function (starting a block) must be a read-command,
* last must be a write-command (ending this block).
*
* read- and write-commands have hard coded parameters, number#1 being a filetype.
* Classes handling certain filetypes must be of type CFile.
* Custom functions will be passed to CFile::callFunc().
*
* On error ParserError will be thrown.
*/
class CScriptparser
{
public:
/**
* @class ParserError
* @brief Exception thrown by CScriptparser
*/
class ParserError : public std::invalid_argument {
public:
/**
* @method ParserError
* @brief Default exception ctor
* @param what message to pass along
* @return -
* @globalvars none
* @exception none
* @conditions none
*/
ParserError(const std::string& what)
: std::invalid_argument(what), m_line("")
{}
/**
* @method ParserError
* @brief Custom exception ctor
* @param what message to pass along
* @param line scriptline which is currently being parsed
* @return -
* @globalvars none
* @exception none
* @conditions none
*/
ParserError(const std::string& what, const std::string& line)
: std::invalid_argument(what), m_line(line)
{}
/**
* @method ~ParserError
* @brief Default dtor
* @param -
* @return -
* @globalvars none
* @exception not allowed
* @conditions none
*/
~ParserError() throw()
{}
/**
* @method getLine
* @brief returns reference to currently parsed scriptline (if set)
* @return reference to currently parsed scriptline (maybe empty string)
* @globalvars none
* @exception none
* @conditions none
*/
const std::string &getLine()
{
return m_line;
}
private:
/* members*/
std::string m_line;
};
/**
* @method CScriptparser
* @brief Default ctor
* @param scriptfile filename of script to parse
* @return -
* @globalvars none
* @exception bad_alloc
* @conditions none
*/
CScriptparser(const std::string& scriptfile);
/**
* @method ~CScriptparser
* @brief Default dtor
* @param -
* @return -
* @globalvars none
* @exception none
* @conditions none
*/
~CScriptparser();
/**
* @method parse
* @brief Start parsing the scriptfile
* @param -
* @return -
* @globalvars none
* @exception ParserError
* @conditions none
*/
void parse();
protected:
/**
* @method callFunc
* @brief Delegates the function and its parameters to the correct
* method (internal or handler)
* @param func function name
* @param funcparams function parameters as list
* @return -
* @globalvars none
* @exception ParserError
* @conditions none
*/
void callFunc(const std::string& func, const std::list<std::string>& funcparams);
/**
* @method read
* @brief Handles/wrappes read-command. according to the filetype the
* read-method of the corresponding handler will be called inside.
* @param funcparams function parameters as list
* @return -
* @globalvars none
* @exception ParserError
* @conditions none
*
* Scriptfile syntax: read(<FILETYPE>, <FILENAME>)
*/
void read(std::list<std::string> funcparams);
/**
* @method write
* @brief Handles/wrappes write-command. according to the filetype the
* write-method of the corresponding handler will be called inside.
* @param funcparams function parameters as list
* @return -
* @globalvars none
* @exception ParserError
* @conditions none
*
* Scriptfile syntax: write(<FILETYPE>, <FILENAME>)
*/
void write(std::list<std::string> funcparams);
private:
/* members */
std::set<CFile *> m_handlers;
std::string m_scriptfile;
std::string m_curline;
CFile *m_handler;
};
#endif
/* vim: set et sw=2 ts=2: */
|