#pragma once #include "KUIWnd.h" #include "KTokenParser.h" class KUIWndParseObject; class KStream; class KUIParser : public KTokenHandler { public: KUIParser(); virtual ~KUIParser(); void Clear(); bool DoParsing(KStream& stream); DWORD GetParseObjCount(); KUIWndParseObject* GetParseObject(DWORD dwIndex); protected: /// Called when Parser cannot find Token-match function. virtual K_TOKEN_CALL void _OnNoTokenFound(DWORD dwStringPointer, DWORD dwLineCount,DWORD dwReserve1); /// Called when Parser find special character. (dwCharType-> (KTOKEN_COMMAN, KTOKEN_ASSIGN, KTOKEN_OBRACKET, KTOKEN_CBRACKET) ) virtual K_TOKEN_CALL void _OnCharTokenFound(DWORD dwCharType, DWORD dwLineCount, DWORD dwReserve1); /// Callend when Parser encounter end of stream. virtual K_TOKEN_CALL void _OnTokenEnd(); virtual void _InitializeTokenMap(); K_TOKEN_CALL void _OnBeginToken(DWORD dwTokenID, DWORD dwLineCount,DWORD dwReserve1); K_TOKEN_CALL void _OnEndToken(DWORD dwTokenID, DWORD dwLineCount,DWORD dwReserve1); K_TOKEN_CALL void _OnPropetyToken(DWORD dwTokenID, DWORD dwLineCount,DWORD dwReserve1); K_TOKEN_CALL void _OnGenWndCreate(DWORD dwTokenID, DWORD dwLineCount,DWORD dwReserve1); void _DoAssign(LPCSTR lpszToken, DWORD dwLineCount); void _CheckStageError(int nStage, DWORD dwLineNumber); void _ErrMsgBox(LPCSTR lpszString, ...); protected: enum KSTAGE { KSTAGE_CONTROL_START = 0, KSTAGE_CONTROL_CREATE = 1, KSTAGE_CONTROL_PROPERTY = 2, KSTAGE_CONTROL_ASSIGN = 3, }; bool m_bErrorFound; int m_nStage, m_nSubStage; KUIWndParseObject* m_pParentObj; KUIWND_CREATE_ARG m_CurrentArg; std::vector m_vtParseObj; }; /// Parse Object class KUIWndParseObject { public: KUIWndParseObject(); virtual ~KUIWndParseObject(); DWORD GetChildCount(); KUIWndParseObject* GetChildParseObj(DWORD dwIndex); KUIWndParseObject* AddChildObj(const KUIWND_CREATE_ARG& arg); const KUIWND_CREATE_ARG& GetCreateArg() const; KUIWND_CREATE_ARG& GetCreateArg(); void SetCreateArg(const KUIWND_CREATE_ARG& arg); protected: KUIWND_CREATE_ARG m_CreateArg; std::vector m_vtChildParseObj; };