class PushPopHelper;
/** A helper structure to describe a keyword for the Lexer.
- Usually used bundled in C style arrays and passed to the
+ Usually used bundled in C style arrays and passed to the
Lexer using a LexerKeywordTable object.
*/
struct LexerKeyword
{
public:
/// initialize Lexer with no special keywords.
- Lexer();
+ Lexer();
/// initialize Lexer with a bunch of keywords
template<int N> Lexer(LexerKeyword (&table)[N])
- : pimpl_(0) { init(table, N); }
+ : pimpl_(0), lastReadOk_(false) { init(table, N); }
///
~Lexer();
/// returns a lex code
int lex();
- /// Read the next string, as delimited by double quotes or
- /// whitespace. If esc is true, then we remember that some chars
+ /// Read the next string, as delimited by double quotes or
+ /// whitespace. If esc is true, then we remember that some chars
/// might be escaped: \" at least.
bool next(bool esc = false);
/// split a word if it contains a backslash.
bool nextToken();
- /// Puts the rest of the line in the buffer, where it will
+ /// Puts the rest of the line in the buffer, where it will
/// be available via getString() or getDocString().
bool eatLine();
///
double getFloat() const;
///
- std::string const getString() const;
+ std::string const getString(bool trim = false) const;
///
- docstring const getDocString() const;
+ docstring const getDocString(bool trim = false) const;
/** Get a long string, ended by the tag `endtag'.
This string can span several lines. The first line
serves as a template for how many spaces the lines
each following line. This mechanism does not work
perfectly if you use tabs.
*/
- std::string const getLongString(std::string const & endtag);
+ docstring getLongString(docstring const & endtag);
/// Pushes a token list on a stack and replaces it with a new one.
template<int N> void pushTable(LexerKeyword (&table)[N])