qscripthighlighter.cpp

来自「奇趣公司比较新的qt/emd版本」· C++ 代码 · 共 460 行 · 第 1/2 页

CPP
460
字号
                        || state == StateNumber                        || state == StatePreProcessor                        || state == StateCCommentEnd2                        || state == StateCCommentEnd1                        || state == StateString2End                        || state == StateStringEnd                       )                        //blockData->parentheses << Parenthesis(Parenthesis::Open, c, i);                    break;                case ')': case ']': case '}':                    input = InputParen;                    if (state == StateStandard                        || state == StateNumber                        || state == StatePreProcessor                        || state == StateCCommentEnd2                        || state == StateCCommentEnd1                        || state == StateString2End                        || state == StateStringEnd                       ) {                        //blockData->parentheses << Parenthesis(Parenthesis::Closed, c, i);                    }                    break;                case '#':                    input = InputHash;                    break;                case '"':                    input = InputQuotation;                    break;                case '\'':                    input = InputApostrophe;                    break;                case ' ':                    input = InputSpace;                    break;                case '1': case '2': case '3': case '4': case '5':                case '6': case '7': case '8': case '9': case '0':                    if (alphabeth.contains(lastChar)                        && (!mathChars.contains(lastChar) || !numbers.contains(text.at(i - 1)))) {                        input = InputAlpha;                    } else {                        if (input == InputAlpha && numbers.contains(lastChar))                            input = InputAlpha;                        else                            input = InputNumber;                    }                    break;                case ':': {                              input = InputAlpha;                              QChar nextChar = ' ';                              if (i < text.length() - 1)                                  nextChar = text.at(i + 1);                              if (state == StateStandard && !questionMark &&                                  lastChar != ':' && nextChar != ':') {                                  for (int j = 0; j < i; ++j) {                                      if (format(j) == emptyFormat)                                          setFormat(j, 1, m_labelFormat);                                  }                              }                              break;                          }                default: {                             if (!questionMark && c == QLatin1Char('?'))                                 questionMark = true;                             if (c.isLetter() || c == QLatin1Char('_'))                                 input = InputAlpha;                             else                                 input = InputSep;                         } break;            }        }        lastWasBackSlash = !lastWasBackSlash && c == QLatin1Char('\\');        if (input == InputAlpha)            buffer.inline_append(c);        state = table[state][input];        switch (state) {            case StateStandard: {                                    setFormat(i, 1, emptyFormat);                                    if (makeLastStandard)                                        setFormat(i - 1, 1, emptyFormat);                                    makeLastStandard = false;                                    if (!buffer.isEmpty() && input != InputAlpha ) {                                        highlightKeyword(i, buffer);                                        buffer.clear();                                    }                                } break;            case StateCommentStart1:                                if (makeLastStandard)                                    setFormat(i - 1, 1, emptyFormat);                                makeLastStandard = true;                                buffer.resize(0);                                break;            case StateCCommentStart2:                                setFormat(i - 1, 2, m_commentFormat);                                makeLastStandard = false;                                buffer.resize(0);                                break;            case StateCppCommentStart2:                                setFormat(i - 1, 2, m_commentFormat);                                makeLastStandard = false;                                buffer.resize(0);                                break;            case StateCComment:                                if (makeLastStandard)                                    setFormat(i - 1, 1, emptyFormat);                                makeLastStandard = false;                                setFormat(i, 1, m_commentFormat);                                buffer.resize(0);                                break;            case StateCppComment:                                if (makeLastStandard)                                    setFormat(i - 1, 1, emptyFormat);                                makeLastStandard = false;                                setFormat(i, 1, m_commentFormat);                                buffer.resize(0);                                break;            case StateCCommentEnd1:                                if (makeLastStandard)                                    setFormat(i - 1, 1, emptyFormat);                                makeLastStandard = false;                                setFormat(i, 1, m_commentFormat);                                buffer.resize(0);                                break;            case StateCCommentEnd2:                                if (makeLastStandard)                                    setFormat(i - 1, 1, emptyFormat);                                makeLastStandard = false;                                setFormat(i, 1, m_commentFormat);                                buffer.resize(0);                                break;            case StateStringStart:                                if (makeLastStandard)                                    setFormat(i - 1, 1, emptyFormat);                                makeLastStandard = false;                                setFormat(i, 1, emptyFormat);                                buffer.resize(0);                                break;            case StateString:                                if (makeLastStandard)                                    setFormat(i - 1, 1, emptyFormat);                                makeLastStandard = false;                                setFormat(i, 1, m_stringFormat);                                buffer.resize(0);                                break;            case StateStringEnd:                                if (makeLastStandard)                                    setFormat(i - 1, 1, emptyFormat);                                makeLastStandard = false;                                setFormat(i, 1, emptyFormat);                                buffer.resize(0);                                break;            case StateString2Start:                                if (makeLastStandard)                                    setFormat(i - 1, 1, emptyFormat);                                makeLastStandard = false;                                setFormat(i, 1, emptyFormat);                                buffer.resize(0);                                break;            case StateString2:                                if (makeLastStandard)                                    setFormat(i - 1, 1, emptyFormat);                                makeLastStandard = false;                                setFormat(i, 1, m_stringFormat);                                buffer.resize(0);                                break;            case StateString2End:                                if (makeLastStandard)                                    setFormat(i - 1, 1, emptyFormat);                                makeLastStandard = false;                                setFormat(i, 1, emptyFormat);                                buffer.resize(0);                                break;            case StateNumber:                                if (makeLastStandard)                                    setFormat(i - 1, 1, emptyFormat);                                makeLastStandard = false;                                setFormat( i, 1, m_numberFormat);                                buffer.resize(0);                                break;            case StatePreProcessor:                                if (makeLastStandard)                                    setFormat(i - 1, 1, emptyFormat);                                makeLastStandard = false;                                setFormat(i, 1, m_preProcessorFormat);                                buffer.resize(0);                                break;        }        lastChar = c;        i++;        if (i >= text.length())            break;    }    highlightKeyword(text.length(), buffer);    if (state == StateCComment        || state == StateCCommentEnd1        || state == StateCCommentStart2       ) {        state = StateCComment;    } else if (state == StateString) {        state = StateString;    } else if (state == StateString2) {        state =  StateString2;    } else {        state = StateStandard;    }    setCurrentBlockState(state);}void QScriptHighlighter::highlightKeyword(int currentPos, const QString &buffer){    if (buffer.isEmpty())        return;    if (buffer.at(0) == QLatin1Char('Q')) {        setFormat(currentPos - buffer.length(), buffer.length(), m_typeFormat);    } else {        if (qscriptKeywords().contains(buffer)) {            setFormat(currentPos - buffer.length(), buffer.length(), m_keywordFormat);        }    }}}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?