00001
00032 #ifndef LL_LLKEYWORDS_H
00033 #define LL_LLKEYWORDS_H
00034
00035
00036 #include "llstring.h"
00037 #include "v3color.h"
00038 #include <map>
00039 #include <list>
00040 #include <deque>
00041
00042 class LLTextSegment;
00043
00044
00045 class LLKeywordToken
00046 {
00047 public:
00048 enum TOKEN_TYPE { WORD, LINE, TWO_SIDED_DELIMITER, ONE_SIDED_DELIMITER };
00049
00050 LLKeywordToken( TOKEN_TYPE type, const LLColor3& color, const LLWString& token, const LLWString& tool_tip )
00051 :
00052 mType( type ),
00053 mToken( token ),
00054 mColor( color ),
00055 mToolTip( tool_tip )
00056 {
00057 }
00058
00059 S32 getLength() { return mToken.size(); }
00060 BOOL isHead(const llwchar* s);
00061 const LLColor3& getColor() { return mColor; }
00062 TOKEN_TYPE getType() { return mType; }
00063 const LLWString& getToolTip() { return mToolTip; }
00064
00065 #ifdef _DEBUG
00066 void dump();
00067 #endif
00068
00069 private:
00070 TOKEN_TYPE mType;
00071 public:
00072 LLWString mToken;
00073 LLColor3 mColor;
00074 private:
00075 LLWString mToolTip;
00076 };
00077
00078 class LLKeywords
00079 {
00080 public:
00081 LLKeywords();
00082 ~LLKeywords();
00083
00084 BOOL loadFromFile(const LLString& filename);
00085 BOOL isLoaded() { return mLoaded; }
00086
00087 void findSegments(std::vector<LLTextSegment *> *seg_list, const LLWString& text );
00088
00089 #ifdef _DEBUG
00090 void dump();
00091 #endif
00092
00093
00094 void addToken(LLKeywordToken::TOKEN_TYPE type,
00095 const LLString& key,
00096 const LLColor3& color,
00097 const LLString& tool_tip = LLString::null);
00098
00099 private:
00100 LLColor3 readColor(const LLString& s);
00101 void insertSegment(std::vector<LLTextSegment *> *seg_list, LLTextSegment* new_segment, S32 text_len);
00102
00103 private:
00104 BOOL mLoaded;
00105 public:
00106 typedef std::map<LLWString, LLKeywordToken*> word_token_map_t;
00107 word_token_map_t mWordTokenMap;
00108 private:
00109 typedef std::deque<LLKeywordToken*> token_list_t;
00110 token_list_t mLineTokenList;
00111 token_list_t mDelimiterTokenList;
00112 };
00113
00114 #endif // LL_LLKEYWORDS_H