qscripthighlighter.cpp
来自「奇趣公司比较新的qt/emd版本」· C++ 代码 · 共 460 行 · 第 1/2 页
CPP
460 行
/******************************************************************************** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.**** This file is part of the Qt Designer of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file. Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "qscripthighlighter_p.h"#include <QtCore/QSet>static const QSet<QString> &qscriptKeywords() { static QSet<QString> keywords; if (keywords.empty()) { keywords.insert(QLatin1String("Infinity")); keywords.insert(QLatin1String("NaN")); keywords.insert(QLatin1String("abstract")); keywords.insert(QLatin1String("boolean")); keywords.insert(QLatin1String("break")); keywords.insert(QLatin1String("byte")); keywords.insert(QLatin1String("case")); keywords.insert(QLatin1String("catch")); keywords.insert(QLatin1String("char")); keywords.insert(QLatin1String("class")); keywords.insert(QLatin1String("const")); keywords.insert(QLatin1String("constructor")); keywords.insert(QLatin1String("continue")); keywords.insert(QLatin1String("debugger")); keywords.insert(QLatin1String("default")); keywords.insert(QLatin1String("delete")); keywords.insert(QLatin1String("do")); keywords.insert(QLatin1String("double")); keywords.insert(QLatin1String("else")); keywords.insert(QLatin1String("enum")); keywords.insert(QLatin1String("export")); keywords.insert(QLatin1String("extends")); keywords.insert(QLatin1String("false")); keywords.insert(QLatin1String("final")); keywords.insert(QLatin1String("finally")); keywords.insert(QLatin1String("float")); keywords.insert(QLatin1String("for")); keywords.insert(QLatin1String("function")); keywords.insert(QLatin1String("goto")); keywords.insert(QLatin1String("if")); keywords.insert(QLatin1String("implements")); keywords.insert(QLatin1String("import")); keywords.insert(QLatin1String("in")); keywords.insert(QLatin1String("instanceof")); keywords.insert(QLatin1String("int")); keywords.insert(QLatin1String("interface")); keywords.insert(QLatin1String("long")); keywords.insert(QLatin1String("native")); keywords.insert(QLatin1String("new")); keywords.insert(QLatin1String("package")); keywords.insert(QLatin1String("private")); keywords.insert(QLatin1String("protected")); keywords.insert(QLatin1String("public")); keywords.insert(QLatin1String("return")); keywords.insert(QLatin1String("short")); keywords.insert(QLatin1String("static")); keywords.insert(QLatin1String("super")); keywords.insert(QLatin1String("switch")); keywords.insert(QLatin1String("synchronized")); keywords.insert(QLatin1String("this")); keywords.insert(QLatin1String("throw")); keywords.insert(QLatin1String("throws")); keywords.insert(QLatin1String("transient")); keywords.insert(QLatin1String("true")); keywords.insert(QLatin1String("try")); keywords.insert(QLatin1String("typeof")); keywords.insert(QLatin1String("undefined")); keywords.insert(QLatin1String("var")); keywords.insert(QLatin1String("void")); keywords.insert(QLatin1String("volatile")); keywords.insert(QLatin1String("while")); keywords.insert(QLatin1String("with")); // end } return keywords;}static QSet<QChar> alphaChars() { QSet<QChar> rc; const QString alpha = QLatin1String("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"); foreach (QChar chr, alpha) rc.insert(chr); return rc;}namespace qdesigner_internal {QScriptHighlighter::QScriptHighlighter(QTextDocument *parent) : QSyntaxHighlighter(parent){ m_numberFormat.setForeground(Qt::blue); m_stringFormat.setForeground(Qt::darkGreen); m_typeFormat.setForeground(Qt::darkMagenta); m_keywordFormat.setForeground(Qt::darkYellow); m_labelFormat.setForeground(Qt::darkRed); m_commentFormat.setForeground(Qt::red); //m_commentFormat.setFontFamily("times"); m_commentFormat.setFontItalic(true); m_preProcessorFormat.setForeground(Qt::darkBlue);}void QScriptHighlighter::highlightBlock(const QString &text){ // states enum { StateStandard, StateCommentStart1, StateCCommentStart2, StateCppCommentStart2, StateCComment, StateCppComment, StateCCommentEnd1, StateCCommentEnd2, StateStringStart, StateString, StateStringEnd, StateString2Start, StateString2, StateString2End, StateNumber, StatePreProcessor, NumStates }; // tokens enum { InputAlpha, InputNumber, InputAsterix, InputSlash, InputParen, InputSpace, InputHash, InputQuotation, InputApostrophe, InputSep, NumInputs }; static const uchar table[NumStates][NumInputs] = { { StateStandard, StateNumber, StateStandard, StateCommentStart1, StateStandard, StateStandard, StatePreProcessor, StateStringStart, StateString2Start, StateStandard }, // StateStandard { StateStandard, StateNumber, StateCCommentStart2, StateCppCommentStart2, StateStandard, StateStandard, StatePreProcessor, StateStringStart, StateString2Start, StateStandard }, // StateCommentStart1 { StateCComment, StateCComment, StateCCommentEnd1, StateCComment, StateCComment, StateCComment, StateCComment, StateCComment, StateCComment, StateCComment }, // StateCCommentStart2 { StateCppComment, StateCppComment, StateCppComment, StateCppComment, StateCppComment, StateCppComment, StateCppComment, StateCppComment, StateCppComment, StateCppComment }, // CppCommentStart2 { StateCComment, StateCComment, StateCCommentEnd1, StateCComment, StateCComment, StateCComment, StateCComment, StateCComment, StateCComment, StateCComment }, // StateCComment { StateCppComment, StateCppComment, StateCppComment, StateCppComment, StateCppComment, StateCppComment, StateCppComment, StateCppComment, StateCppComment, StateCppComment }, // StateCppComment { StateCComment, StateCComment, StateCCommentEnd1, StateCCommentEnd2, StateCComment, StateCComment, StateCComment, StateCComment, StateCComment, StateCComment }, // StateCCommentEnd1 { StateStandard, StateNumber, StateStandard, StateCommentStart1, StateStandard, StateStandard, StatePreProcessor, StateStringStart, StateString2Start, StateStandard }, // StateCCommentEnd2 { StateString, StateString, StateString, StateString, StateString, StateString, StateString, StateStringEnd, StateString, StateString }, // StateStringStart { StateString, StateString, StateString, StateString, StateString, StateString, StateString, StateStringEnd, StateString, StateString }, // StateString { StateStandard, StateStandard, StateStandard, StateCommentStart1, StateStandard, StateStandard, StatePreProcessor, StateStringStart, StateString2Start, StateStandard }, // StateStringEnd { StateString2, StateString2, StateString2, StateString2, StateString2, StateString2, StateString2, StateString2, StateString2End, StateString2 }, // StateString2Start { StateString2, StateString2, StateString2, StateString2, StateString2, StateString2, StateString2, StateString2, StateString2End, StateString2 }, // StateString2 { StateStandard, StateStandard, StateStandard, StateCommentStart1, StateStandard, StateStandard, StatePreProcessor, StateStringStart, StateString2Start, StateStandard }, // StateString2End { StateNumber, StateNumber, StateStandard, StateCommentStart1, StateStandard, StateStandard, StatePreProcessor, StateStringStart, StateString2Start, StateStandard }, // StateNumber { StatePreProcessor, StateStandard, StateStandard, StateCommentStart1, StateStandard, StateStandard, StatePreProcessor, StateStringStart, StateString2Start, StateStandard } // StatePreProcessor }; QString buffer; buffer.reserve(text.length()); QTextCharFormat emptyFormat; int state = StateStandard; const int previousState = previousBlockState(); if (previousState != -1) state = previousState; if (text.isEmpty()) { setCurrentBlockState(previousState); return; } int input = -1; int i = 0; bool lastWasBackSlash = false; bool makeLastStandard = false; static const QSet<QChar> alphabeth = alphaChars(); static const QString mathChars = QString::fromLatin1("xXeE"); static const QString numbers = QString::fromLatin1("0123456789"); bool questionMark = false; QChar lastChar; QString firstWord; forever { const QChar c = text.at(i); if (lastWasBackSlash) { input = InputSep; } else { switch (c.toLatin1()) { case '*': input = InputAsterix; break; case '/': input = InputSlash; break; case '(': case '[': case '{': input = InputParen; if (state == StateStandard
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?