• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

E:/sqlmaster/src/highlighter.cpp

Go to the documentation of this file.
00001 #include <QtGui>
00002 
00003 #include "highlighter.h"
00004 Highlighter::Highlighter(QTextDocument *parent)
00005     : QSyntaxHighlighter(parent)
00006 {
00007     HighlightingRule rule;
00008     keywordFormat.setForeground(Qt::blue);
00009     keywordFormat.setFontWeight(QFont::Bold);
00010     QStringList keywordPatterns;
00011     keywordPatterns << "\\bbigint\\b"         << "\\bbinary\\b"          << "\\bbit\\b"
00012             << "\\bblob\\b"           << "\\bbool\\b"            << "\\bboolean\\b"       << "\\bchar\\b"
00013             << "\\bdate\\b"           << "\\bdatetime\\b"        << "\\bdecimal\\b"       << "\\bdouble\\b"
00014             << "\\benum\\b"           << "\\bfloat\\b"           << "\\bint\\b"           << "\\blongblob\\b"
00015             << "\\bfloat\\b"          << "\\bint\\b"             << "\\blongblob\\b"      << "\\blongtext\\b"
00016             << "\\bmediumblob\\b"     << "\\bmediumint\\b"       << "\\bmediumtext\\b"
00017             << "\\bnumeric\\b"        << "\\breal\\b"            << "\\bset\\b"           << "\\bsmallint\\b"
00018             << "\\btext\\b"           << "\\btime\\b"            << "\\btimestamp\\b"     << "\\btinyblob\\b"
00019             << "\\btinyint\\b"        << "\\btinytext\\b"        << "\\bvarbinary\\b"
00020             << "\\bvarchar\\b"        << "\\byear\\b";
00021   //read mysql keywords
00022     QFile file(":/dat/datafiles/keywords.dat");
00023     if (!file.open(QFile::ReadOnly));
00024     while (!file.atEnd()) {
00025         QByteArray line = file.readLine();
00026         if (!line.isEmpty())
00027             keywordPatterns << tr("%1%2%3").arg("\\b", line.trimmed(), "\\b");
00028              keywordPatterns << tr("%1%2%3").arg("\\b", line.trimmed().toUpper(), "\\b");
00029     }
00030     //
00031     foreach (QString pattern, keywordPatterns) {
00032         rule.pattern = QRegExp(pattern);
00033         rule.format = keywordFormat;
00034         rule.format.setFontCapitalization(QFont::AllUppercase);
00035         highlightingRules.append(rule);
00036     }
00037     classFormat.setFontWeight(QFont::Bold);
00038     classFormat.setForeground(Qt::green);
00039     classFormat.setFontCapitalization(QFont::AllUppercase);
00040     rule.pattern = QRegExp("#[^\n]*");
00041     rule.format = classFormat;
00042     highlightingRules.append(rule);
00043 
00044     classFormat.setFontWeight(QFont::Bold);
00045     classFormat.setForeground(Qt::darkBlue);
00046     rule.pattern = QRegExp("$[^\n]");
00047     rule.format = classFormat;
00048     highlightingRules.append(rule);
00049 
00050     braceFormat.setBackground(Qt::lightGray);
00051     rule.pattern = QRegExp("{[A-Za-z]+");
00052     rule.format = braceFormat;
00053     highlightingRules.append(rule);
00054 
00055 
00056     singleLineCommentFormat.setForeground(Qt::darkGreen);
00057     singleLineCommentFormat.setFontWeight(QFont::Bold);
00058     rule.pattern = QRegExp("//[^\n]*");
00059     rule.format = singleLineCommentFormat;
00060     highlightingRules.append(rule);
00061 
00062     multiLineCommentFormat.setForeground(Qt::darkGreen);
00063     multiLineCommentFormat.setFontWeight(QFont::Bold);
00064     braceFormater.setForeground(Qt::magenta);
00065 
00066     quotationFormat.setForeground(Qt::red);
00067     rule.pattern = QRegExp("\".*\"");
00068     rule.format = quotationFormat;
00069     highlightingRules.append(rule);
00070 
00071     singleQuotationFormat.setForeground(Qt::red);
00072     rule.pattern = QRegExp("'.*'");
00073     rule.format = singleQuotationFormat;
00074     highlightingRules.append(rule);
00075 
00076     singleQuotationFormat.setForeground(Qt::magenta);
00077     singleQuotationFormat.setFontWeight(QFont::Bold);
00078     singleQuotationFormat.setFontItalic(true);
00079 
00080 //    rule.pattern = QRegExp("`.*`");
00081 //    rule.format = singleQuotationFormat;
00082 //    highlightingRules.append(rule);
00083 
00084     functionFormat.setFontItalic(true);
00085     functionFormat.setForeground(Qt::blue);
00086     rule.pattern = QRegExp("\\b[A-Za-z0-9_]+(?=\\()");
00087     rule.format = functionFormat;
00088     highlightingRules.append(rule);
00089 
00090     commentStartExpression = QRegExp("/\\*");
00091     commentEndExpression = QRegExp("\\*/");
00092     braceStart = QRegExp("{");
00093     braceEnd = QRegExp("}");
00094 }
00095 //--------------------------------------------------------------------------------
00096 void Highlighter::highlightBlock(const QString &text)
00097 {
00098     foreach (HighlightingRule rule, highlightingRules) {
00099         QRegExp expression(rule.pattern);
00100         int index = text.indexOf(expression);
00101         while (index >= 0) {
00102             int length = expression.matchedLength();
00103             setFormat(index, length, rule.format);
00104             index = text.indexOf(expression, index + length);
00105         }
00106     }
00107     setCurrentBlockState(0);
00108 
00109     int startIndex = 0;
00110 
00111     if (previousBlockState() != 1) {
00112         startIndex = text.indexOf(commentStartExpression); }
00113 
00114     while (startIndex >= 0) {
00115         int endIndex = text.indexOf(commentEndExpression, startIndex);
00116         int commentLength;
00117         if (endIndex == -1) {
00118             setCurrentBlockState(1);
00119             commentLength = text.length() - startIndex;
00120         } else {
00121             commentLength = endIndex - startIndex
00122                             + commentEndExpression.matchedLength();
00123         }
00124         setFormat(startIndex, commentLength, multiLineCommentFormat);
00125         startIndex = text.indexOf(commentStartExpression,
00126                                   startIndex + commentLength);
00127     }
00128 
00129 }
00130 //--------------------------------------------------------------------------------

Generated on Wed Dec 1 2010 08:43:39 for SQL Master by  doxygen 1.7.2