/* ========================================================================== * ÀÛ ¼º ÀÚ : À̼ø±Ô * ÀÛ ¼º ÀÏ : 2007.06.08 * ³» ¿ë : ÅØ½ºÆ® ¶óÀÎ, ºÎºÐ Ä÷¯µîÀ» Àû¿ëÇÒ¼ö ÀÕ´Â ÅØ½ºÆ® * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include "Lexer.h" class cUIFuncTextLexer; class cParser; /// UI ±â´É ÅØ½ºÆ® ÅäÅ« ŸÀÔ enum eUIFuncTextNodeType { eTEXTNODE_NULL = 0, eTEXTNODE_STRING, eTEXTNODE_COLOR, eTEXTNODE_VARNAME, eTEXTNODE_NEWLINE, }; /// UI ±â´ÉÅØ½ºÆ® ¹®ÀÚ¿­ ÀÎÀÚ class cUIFuncTextParam { public: cStringT mName; }; /// UI ¹®ÀÚ¿­ ³ëµå #pragma pack( push, 1 ) class cUIFuncTextNode { friend class cUIFuncText; public: cUIFuncTextNode(); ~cUIFuncTextNode(); cUIFuncTextNode* GetNext(); cUIFuncTextNode* Back(); public: eUIFuncTextNodeType mType; TCHAR* mpString; unsigned long mColor; private: cUIFuncTextNode* mpNext; }; #pragma pack( pop ) inline cUIFuncTextNode::cUIFuncTextNode() : mType( eTEXTNODE_NULL ) , mpNext( 0 ) , mpString( 0 ) , mColor( 0 ) { } inline cUIFuncTextNode::~cUIFuncTextNode() { if( mType == eTEXTNODE_STRING ) delete [] mpString; if( mpNext ) delete mpNext; } inline cUIFuncTextNode* cUIFuncTextNode::GetNext() { return mpNext; } inline cUIFuncTextNode* cUIFuncTextNode::Back() { if( mpNext ) return mpNext->Back(); else return this; } /// UI ±â´É ¹®ÀÚ¿­ class cUIFuncText { public: cUIFuncText(); ~cUIFuncText(); void Clear(); /// ·Îµù bool Load( const cString& pathName ); /// ÅØ½ºÆ® ³ëµå cUIFuncTextNode* GetNode( unsigned int id ); private: cUIFuncTextNode* NewNode( unsigned int id ); void PushStringNode( unsigned int id, const cString& str ); void PushColorNode( unsigned int id, unsigned long color ); void PushVarNameNode( unsigned int id ); void PushNewLineNode( unsigned int id ); private: typedef tHashMap cNodeMap; cNodeMap mNodeMap; }; /// UI ¹®ÀÚ¿­ ÅäÅ« ŸÀÔ enum { /// ±ÛÀÚ»ö eTOKEN_TEXT_BLACK = 100, eTOKEN_TEXT_WHITE, eTOKEN_TEXT_GRAY, eTOKEN_TEXT_RED, eTOKEN_TEXT_GREEN, eTOKEN_TEXT_BLUE, eTOKEN_TEXT_YELLOW, eTOKEN_TEXT_BROWN, /// º¯¼ö eTOKEN_TEXT_VARNAME, /// ¶óÀγѱâ±â eTOKEN_TEXT_NEWLINE, }; /// UI ¹®ÀÚ¿­ ¾îÈÖ ºÐ¼®±â class cUIFuncTextLexer : public cLexer { public: cUIFuncTextLexer( const char* buffer, unsigned int size ); };