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() const { return mToken.size(); }
00060 BOOL isHead(const llwchar* s) const;
00061 const LLWString& getToken() const { return mToken; }
00062 const LLColor3& getColor() const { return mColor; }
00063 TOKEN_TYPE getType() const { return mType; }
00064 const LLWString& getToolTip() const { return mToolTip; }
00065
00066 #ifdef _DEBUG
00067 void dump();
00068 #endif
00069
00070 private:
00071 TOKEN_TYPE mType;
00072 LLWString mToken;
00073 LLColor3 mColor;
00074 LLWString mToolTip;
00075 };
00076
00077 class LLKeywords
00078 {
00079 public:
00080 LLKeywords();
00081 ~LLKeywords();
00082
00083 BOOL loadFromFile(const LLString& filename);
00084 BOOL isLoaded() const { return mLoaded; }
00085
00086 void findSegments(std::vector<LLTextSegment *> *seg_list, const LLWString& text, const LLColor4 &defaultColor );
00087
00088
00089 void addToken(LLKeywordToken::TOKEN_TYPE type,
00090 const LLString& key,
00091 const LLColor3& color,
00092 const LLString& tool_tip = LLString::null);
00093
00094 typedef std::map<LLWString, LLKeywordToken*> word_token_map_t;
00095 typedef word_token_map_t::const_iterator keyword_iterator_t;
00096 keyword_iterator_t begin() const { return mWordTokenMap.begin(); }
00097 keyword_iterator_t end() const { return mWordTokenMap.end(); }
00098
00099 #ifdef _DEBUG
00100 void dump();
00101 #endif
00102
00103 private:
00104 LLColor3 readColor(const LLString& s);
00105 void insertSegment(std::vector<LLTextSegment *> *seg_list, LLTextSegment* new_segment, S32 text_len, const LLColor4 &defaultColor);
00106
00107 BOOL mLoaded;
00108 word_token_map_t mWordTokenMap;
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