00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef FF_SYNTAX_HIGHLIGHTER_HPP
00021 #define FF_SYNTAX_HIGHLIGHTER_HPP
00022
00023 #include <FFLexer.hpp>
00024
00025 #include <QtGui/QTextEdit>
00026 #include <QtCore/QString>
00027
00028 #include <SyntaxHighLighter.hpp>
00029
00039 class FFSyntaxHighlighter
00040 : public SyntaxHighLighter
00041 {
00042 private:
00043 QFont __defaultFont;
00044 QFont __keywordFont;
00045 QFont __commentFont;
00046 QFont __stringFont;
00047
00048 QColor __defaultColor;
00049 QColor __keywordColor;
00050 QColor __commentColor;
00051 QColor __stringColor;
00052
00053 public:
00054
00061 FFSyntaxHighlighter(QTextEdit* textEdit)
00062 : __defaultFont(textEdit->currentFont()),
00063 __defaultColor(0,0,0),
00064 __keywordColor(0,0,255),
00065 __commentColor(150,150,150),
00066 __stringColor(50,155,155)
00067 {
00068 QTextCharFormat defaultFormat;
00069 defaultFormat.setFont(__defaultFont);
00070
00071 QTextCharFormat keywordFormat = defaultFormat;
00072 keywordFormat.setFontWeight(QFont::Bold);
00073 keywordFormat.setForeground(__keywordColor);
00074 Lexer::KeyWordList keywordList;
00075 FFLexer::define(keywordList);
00076 QString keywordsRegExp("\\b(");
00077 const size_t numberOfKeyWords = keywordList.size();
00078 size_t n = 0;
00079 for (Lexer::KeyWordList::const_iterator i=keywordList.begin();
00080 i != keywordList.end(); ++i,++n) {
00081 keywordsRegExp.append(i->first);
00082 if (n<numberOfKeyWords-1) keywordsRegExp.append("|");
00083 }
00084 keywordsRegExp.append(")\\b");
00085 this->addMapping(keywordsRegExp, keywordFormat);
00086
00087 QTextCharFormat singleLineCommentFormat = defaultFormat;
00088 singleLineCommentFormat.setForeground(__commentColor);
00089 singleLineCommentFormat.setFontItalic(true);
00090 this->addMapping("//[^\n]*", singleLineCommentFormat);
00091
00092 QTextCharFormat quotationFormat = defaultFormat;
00093 quotationFormat.setForeground(__stringColor);
00094 this->addMapping("\"[^\n]*\"", quotationFormat);
00095
00096 textEdit->setFont(defaultFormat.font());
00097 textEdit->setCurrentFont(defaultFormat.font());
00098 textEdit->document()->setDefaultFont(defaultFormat.font());
00099 this->addToDocument(textEdit->document());
00100 }
00101
00108 virtual ~FFSyntaxHighlighter()
00109 {
00110 ;
00111 }
00112 };
00113
00114
00115 #endif // FF_SYNTAX_HIGHLIGHTER_HPP