Choreonoid  1.5
EasyScanner.h
Go to the documentation of this file.
1 
7 #ifndef CNOID_UTIL_EASYSCANNER_H_INCLUDED
8 #define CNOID_UTIL_EASYSCANNER_H_INCLUDED
9 
10 #include <map>
11 #include <string>
12 #include <vector>
13 #include <boost/shared_ptr.hpp>
14 #include "exportdecl.h"
15 
16 namespace cnoid {
17 
22 
23 public:
24 
25  class Endl {
26  //int dummy;
27  };
28 
30 public:
31  std::string message;
32  std::string filename;
34  std::string getFullMessage() const;
35  };
36 
37  enum TokenType {
38  T_NONE = 0, T_SPACE, T_ALPHABET, T_INTEGER, T_DOUBLE, T_WORD,
39  T_STRING, T_SIGLUM, T_LF, T_EOF
40  };
41 
42  typedef std::map<std::string, int> SymbolMap;
43  typedef std::pair<std::string, int> SymbolPair;
44  typedef boost::shared_ptr<SymbolMap> SymbolMapPtr;
45 
47 
48  EasyScanner();
49  EasyScanner(std::string filename);
50  EasyScanner(const EasyScanner& scanner, bool copy_text = false);
51  virtual ~EasyScanner();
52 
53  void putSymbols();
54 
55  inline void registerSymbol(int id, const std::string& symbol) {
56  symbols->insert(SymbolPair(symbol, id));
57  }
58 
59  inline int getSymbolID(const std::string& symbol) {
60  SymbolMap::iterator p = symbols->find(symbol);
61  return (p != symbols->end()) ? p->second : 0;
62  }
63 
65  void setCommentChar(char cc);
66 
67  void setLineOriented(bool on);
68  void setQuoteChar(char qc);
69  void setWhiteSpaceChar(char ws);
70 
71  void loadFile(const std::string& filename);
72 
73  void setText(const char* text, int len);
74 
75  void setLineNumberOffset(int offset);
76 
77  void setDefaultErrorMessage(const std::string& message){
78  defaultErrorMessage = message;
79  }
80 
81  void moveToHead();
82 
83  int readToken();
84 
85  void toLower();
86 
87  bool readFloat();
88  bool readDouble();
89  bool readInt();
90  bool readChar();
91  bool readChar(int chara);
92  int peekChar();
93 
98  inline bool readWord() {
99  skipSpace();
100  return readWord0();
101  }
102 
107  inline bool readString(const int delimiterChar = ',') {
108  skipSpace();
109  return readString0(delimiterChar);
110  }
111 
112  bool readString(const char* str);
113 
114  inline bool readString(const std::string& str) {
115  return readString(str.c_str());
116  }
117 
118  bool readQuotedString(bool allowNoQuotedWord = false);
119 
120  bool readUnquotedTextBlock();
121 
122  bool readSymbol();
123  bool readSymbol(int id);
124 
125  inline bool isEOF(){
126  skipSpace();
127  return (*text == '\0');
128  }
129 
131  inline bool readLF() {
132  skipSpace();
133  return readLF0();
134  }
135 
136  inline bool readLFEOF() {
137  skipSpace();
138  return readLF0() ? true : (*text == '\0');
139  }
140 
141  bool checkLF();
142 
143  bool readLine();
144  bool skipLine();
145  bool skipBlankLines();
146  void skipToLineEnd();
147 
148  void skipSpace();
149 
150  void throwException(const char* message);
151  void throwException(const std::string& message);
152 
157  inline int readIntEx(const char* message = 0) {
158  if(!readInt()) throwException(message);
159  return intValue;
160  }
165  inline double readDoubleEx(const char* message = 0) {
166  if(!readDouble()) throwException(message);
167  return doubleValue;
168  }
173  inline float readFloatEx(const char* message = 0) {
174  if(!readFloat()) throwException(message);
175  return floatValue;
176  }
181  inline int readCharEx(const char* message = 0) {
182  if(!readChar())
183  throwException(message);
184  return charValue;
185  }
189  inline void readCharEx(int chara, const char* message = 0) {
190  if(!readChar(chara)) throwException(message);
191  }
196  inline const std::string& readWordEx(const char* message = 0) {
197  if(!readWord()) throwException(message);
198  return stringValue;
199  }
200 
201  inline void checkStringEx(const char* str, const char* message = 0){
202  if(!readString(str)) throwException(message);
203  }
204 
209  inline const std::string& readStringEx(const char* message = 0) {
210  if(!readString()) throwException(message);
211  return stringValue;
212  }
213 
214  inline const std::string& readQuotedStringEx(const char* message = 0) {
215  if(!readQuotedString()) throwException(message);
216  return stringValue;
217  }
222  inline int readSymbolEx(const char* message = 0) {
223  if(!readSymbol()) throwException(message);
224  return symbolValue;
225  }
229  inline void readLFex(const char* message = 0) {
230  if(!readLF()) throwException(message);
231  }
232 
233  inline void readLFEOFex(const char* message = 0) {
234  if(!readLFEOF()) throwException(message);
235  }
236 
237  int intValue;
238  double doubleValue;
239  float floatValue;
240  std::string stringValue;
241  char charValue;
243 
244  std::string defaultErrorMessage;
246 
247  char* text;
248 
249  std::string filename;
250 
251 private:
252  void init();
253  bool extractQuotedString();
254 
255  bool readLF0();
256  bool readWord0();
257  bool readString0(const int delimiterChar);
258 
259  char* textBuf;
260  int size;
261  char* textBufEnd;
262  int lineNumberOffset;
263  int commentChar;
264  int quoteChar;
265  bool isLineOriented;
266 
267  std::vector<int> whiteSpaceChars;
268 
269  SymbolMapPtr symbols;
270 
271  friend CNOID_EXPORT EasyScanner& operator>>(EasyScanner& scanner, double& value);
272  friend CNOID_EXPORT EasyScanner& operator>>(EasyScanner& scanner, int& value);
273  friend CNOID_EXPORT EasyScanner& operator>>(EasyScanner& scanner, const char* matchString);
274  friend CNOID_EXPORT EasyScanner& operator>>(EasyScanner& scanner, char matchChar);
275  friend CNOID_EXPORT EasyScanner& operator>>(EasyScanner& scanner, std::string& str);
277 
278 };
279 
280 
281 CNOID_EXPORT EasyScanner& operator>>(EasyScanner& scanner, double& value);
282 CNOID_EXPORT EasyScanner& operator>>(EasyScanner& scanner, int& value);
283 CNOID_EXPORT EasyScanner& operator>>(EasyScanner& scanner, const char* matchString);
284 CNOID_EXPORT EasyScanner& operator>>(EasyScanner& scanner, char matchChar);
285 CNOID_EXPORT EasyScanner& operator>>(EasyScanner& scanner, std::string& str);
287 }
288 
289 #endif
void registerSymbol(int id, const std::string &symbol)
Definition: EasyScanner.h:55
bool readWord()
Definition: EasyScanner.h:98
bool readLF()
reading a line feed
Definition: EasyScanner.h:131
const std::string & readQuotedStringEx(const char *message=0)
Definition: EasyScanner.h:214
Endl endl
Definition: EasyScanner.h:46
void setDefaultErrorMessage(const std::string &message)
Definition: EasyScanner.h:77
void readCharEx(int chara, const char *message=0)
Definition: EasyScanner.h:189
std::pair< std::string, int > SymbolPair
Definition: EasyScanner.h:43
CNOID_EXPORT EasyScanner & operator>>(EasyScanner &scanner, double &value)
Definition: EasyScanner.cpp:758
int intValue
Definition: EasyScanner.h:237
char charValue
Definition: EasyScanner.h:241
std::map< std::string, int > SymbolMap
Definition: EasyScanner.h:42
double doubleValue
Definition: EasyScanner.h:238
int readCharEx(const char *message=0)
Definition: EasyScanner.h:181
int symbolValue
Definition: EasyScanner.h:242
void readLFEOFex(const char *message=0)
Definition: EasyScanner.h:233
bool isEOF()
Definition: EasyScanner.h:125
boost::shared_ptr< SymbolMap > SymbolMapPtr
Definition: EasyScanner.h:44
std::string filename
Definition: EasyScanner.h:249
Definition: EasyScanner.h:38
const std::string & readStringEx(const char *message=0)
Definition: EasyScanner.h:209
std::string defaultErrorMessage
Definition: EasyScanner.h:244
int lineNumber
Definition: EasyScanner.h:245
std::string message
Definition: EasyScanner.h:31
std::string str(const Vector3 &v)
Definition: EigenUtil.cpp:90
float floatValue
Definition: EasyScanner.h:239
const std::string & readWordEx(const char *message=0)
Definition: EasyScanner.h:196
std::string stringValue
Definition: EasyScanner.h:240
int readSymbolEx(const char *message=0)
Definition: EasyScanner.h:222
Definition: EasyScanner.h:25
Definition: EasyScanner.h:29
double readDoubleEx(const char *message=0)
Definition: EasyScanner.h:165
Defines the minimum processing for performing pasing file for STL.
Definition: AbstractSceneLoader.h:9
int getSymbolID(const std::string &symbol)
Definition: EasyScanner.h:59
bool readString(const int delimiterChar= ',')
Definition: EasyScanner.h:107
float readFloatEx(const char *message=0)
Definition: EasyScanner.h:173
bool readString(const std::string &str)
Definition: EasyScanner.h:114
bool readLFEOF()
Definition: EasyScanner.h:136
Definition: EasyScanner.h:39
#define CNOID_EXPORT
Definition: Util/exportdecl.h:37
std::string filename
Definition: EasyScanner.h:32
TokenType
Definition: EasyScanner.h:37
int readIntEx(const char *message=0)
Definition: EasyScanner.h:157
char * text
Definition: EasyScanner.h:247
Definition: EasyScanner.h:21
void readLFex(const char *message=0)
Definition: EasyScanner.h:229
void checkStringEx(const char *str, const char *message=0)
Definition: EasyScanner.h:201
int lineNumber
Definition: EasyScanner.h:33