/**************************************************************************** ** ** Created using Edyuk IDE 0.6.0 ** ** File : qmakeparser.h ** Date : dim. sept. 17 18:41:23 2006 ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #ifndef _QMAKE_PARSER_H_ #define _QMAKE_PARSER_H_ #include "qmake.h" /*! \file qmakeparser.h \brief Definition of the QMakeParser class. */ #include "qprojectparser.h" #include #include #include #include class QMakeScope; class QMakeProject; struct QParenthesisChar { QParenthesisChar() : escape(0) {} QParenthesisChar(QChar o, QChar c, int e) : open(o), close(c), escape(e) {} QChar open; QChar close; int escape; }; class QMAKE_EXPORT QMakeParser : public QProjectParser { friend class QMakeVariable; public: QMakeParser(QObject *p = 0); virtual ~QMakeParser(); protected: virtual QProjectNode* parse(const QString& s); private: enum LexerFlag { None = 0x00, //nothing special // SingleLine = 0x01, // MultiLine = 0x02, // AntiSlash = 0x04, // Parenthesis = 0x08, // // // Scope = 0x08, // SingleLineScope = SingleLine | Scope, MultiLineScope = MultiLine | Scope, // }; typedef QFlags LexerState; void parse(QStringList::iterator t, int max); void parse(const QChar* l, int max, QStringList& d, bool bRecurse = false); inline bool flag(LexerFlag f) { return (state & f);} inline void flagOn(LexerFlag f) { state |= f; } inline void flagOff(LexerFlag f) { state &= ~f; } inline void setFlag(LexerFlag f, bool s) { if ( s ) flagOn(f); else flagOff(f); } virtual void update(QProjectNode *p, const QString& s); // "temporary" int coms; LexerState state; QStack cMulti; QMakeScope *pScope, *pPrev; // "persistent" int inVar; QStack nest; QStack< QPair > varStack; }; #endif // _QMAKE_PARSER_H_