⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lexcmake.cxx

📁 porting scintilla to qt
💻 CXX
📖 第 1 页 / 共 2 页
字号:
                else {                    styler.ColourTo(i,state);                    state = SCE_CMAKE_DEFAULT;                }            }            break;        case SCE_CMAKE_STRINGDQ:        case SCE_CMAKE_STRINGLQ:        case SCE_CMAKE_STRINGRQ:            if ( styler.SafeGetCharAt(i-1) == '\\' && styler.SafeGetCharAt(i-2) == '$' )                break; // Ignore the next character, even if it is a quote of some sort            if ( cCurrChar == '"' && state == SCE_CMAKE_STRINGDQ ) {                styler.ColourTo(i,state);                state = SCE_CMAKE_DEFAULT;                break;            }            if ( cCurrChar == '`' && state == SCE_CMAKE_STRINGLQ ) {                styler.ColourTo(i,state);                state = SCE_CMAKE_DEFAULT;                break;            }            if ( cCurrChar == '\'' && state == SCE_CMAKE_STRINGRQ ) {                styler.ColourTo(i,state);                state = SCE_CMAKE_DEFAULT;                break;            }            if ( cNextChar == '\r' || cNextChar == '\n' ) {                int nCurLine = styler.GetLine(i+1);                int nBack = i;                // We need to check if the previous line has a \ in it...                bool bNextLine = false;                while ( nBack > 0 ) {                    if ( styler.GetLine(nBack) != nCurLine )                        break;                    char cTemp = styler.SafeGetCharAt(nBack, 'a'); // Letter 'a' is safe here                    if ( cTemp == '\\' ) {                        bNextLine = true;                        break;                    }                    if ( cTemp != '\r' && cTemp != '\n' && cTemp != '\t' && cTemp != ' ' )                        break;                    nBack--;                }                if ( bNextLine ) {                    styler.ColourTo(i+1,state);                }                if ( bNextLine == false ) {                    styler.ColourTo(i,state);                    state = SCE_CMAKE_DEFAULT;                }            }            break;        case SCE_CMAKE_VARIABLE:            // CMake Variable:            if ( cCurrChar == '$' )                state = SCE_CMAKE_DEFAULT;            else if ( cCurrChar == '\\' && (cNextChar == 'n' || cNextChar == 'r' || cNextChar == 't' ) )                state = SCE_CMAKE_DEFAULT;            else if ( (isCmakeChar(cCurrChar) && !isCmakeChar( cNextChar) && cNextChar != '}') || cCurrChar == '}' ) {                state = classifyWordCmake( styler.GetStartSegment(), i, keywordLists, styler );                styler.ColourTo( i, state);                state = SCE_CMAKE_DEFAULT;            }            else if ( !isCmakeChar( cCurrChar ) && cCurrChar != '{' && cCurrChar != '}' ) {                if ( classifyWordCmake( styler.GetStartSegment(), i-1, keywordLists, styler) == SCE_CMAKE_NUMBER )                    styler.ColourTo( i-1, SCE_CMAKE_NUMBER );                state = SCE_CMAKE_DEFAULT;                if ( cCurrChar == '"' ) {                    state = SCE_CMAKE_STRINGDQ;                    bVarInString = false;                    bClassicVarInString = false;                }                else if ( cCurrChar == '`' ) {                    state = SCE_CMAKE_STRINGLQ;                    bVarInString = false;                    bClassicVarInString = false;                }                else if ( cCurrChar == '\'' ) {                    state = SCE_CMAKE_STRINGRQ;                    bVarInString = false;                    bClassicVarInString = false;                }                else if ( cCurrChar == '#' ) {                    state = SCE_CMAKE_COMMENT;                }            }            break;        }        if ( state == SCE_CMAKE_COMMENT) {            styler.ColourTo(i,state);        }        else if ( state == SCE_CMAKE_STRINGDQ || state == SCE_CMAKE_STRINGLQ || state == SCE_CMAKE_STRINGRQ ) {            bool bIngoreNextDollarSign = false;            if ( bVarInString && cCurrChar == '$' ) {                bVarInString = false;                bIngoreNextDollarSign = true;            }            else if ( bVarInString && cCurrChar == '\\' && (cNextChar == 'n' || cNextChar == 'r' || cNextChar == 't' || cNextChar == '"' || cNextChar == '`' || cNextChar == '\'' ) ) {                styler.ColourTo( i+1, SCE_CMAKE_STRINGVAR);                bVarInString = false;                bIngoreNextDollarSign = false;            }            else if ( bVarInString && !isCmakeChar(cNextChar) ) {                int nWordState = classifyWordCmake( styler.GetStartSegment(), i, keywordLists, styler);                if ( nWordState == SCE_CMAKE_VARIABLE )                    styler.ColourTo( i, SCE_CMAKE_STRINGVAR);                bVarInString = false;            }            // Covers "${TEST}..."            else if ( bClassicVarInString && cNextChar == '}' ) {                styler.ColourTo( i+1, SCE_CMAKE_STRINGVAR);                bClassicVarInString = false;            }            // Start of var in string            if ( !bIngoreNextDollarSign && cCurrChar == '$' && cNextChar == '{' ) {                styler.ColourTo( i-1, state);                bClassicVarInString = true;                bVarInString = false;            }            else if ( !bIngoreNextDollarSign && cCurrChar == '$' ) {                styler.ColourTo( i-1, state);                bVarInString = true;                bClassicVarInString = false;            }        }    }    // Colourise remaining document    styler.ColourTo(nLengthDoc-1,state);}static void FoldCmakeDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler){    // No folding enabled, no reason to continue...    if ( styler.GetPropertyInt("fold") == 0 )        return;    bool foldAtElse = styler.GetPropertyInt("fold.at.else", 0) == 1;    int lineCurrent = styler.GetLine(startPos);    unsigned int safeStartPos = styler.LineStart( lineCurrent );    bool bArg1 = true;    int nWordStart = -1;    int levelCurrent = SC_FOLDLEVELBASE;    if (lineCurrent > 0)        levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;    int levelNext = levelCurrent;    for (unsigned int i = safeStartPos; i < startPos + length; i++) {        char chCurr = styler.SafeGetCharAt(i);        if ( bArg1 ) {            if ( nWordStart == -1 && (isCmakeLetter(chCurr)) ) {                nWordStart = i;            }            else if ( isCmakeLetter(chCurr) == false && nWordStart > -1 ) {                int newLevel = calculateFoldCmake( nWordStart, i-1, levelNext, styler, foldAtElse);                if ( newLevel == levelNext ) {                    if ( foldAtElse ) {                        if ( CmakeNextLineHasElse(i, startPos + length, styler) )                            levelNext--;                    }                }                else                    levelNext = newLevel;                bArg1 = false;            }        }        if ( chCurr == '\n' ) {            if ( bArg1 && foldAtElse) {                if ( CmakeNextLineHasElse(i, startPos + length, styler) )                    levelNext--;            }            // If we are on a new line...            int levelUse = levelCurrent;            int lev = levelUse | levelNext << 16;            if (levelUse < levelNext )                lev |= SC_FOLDLEVELHEADERFLAG;            if (lev != styler.LevelAt(lineCurrent))                styler.SetLevel(lineCurrent, lev);            lineCurrent++;            levelCurrent = levelNext;            bArg1 = true; // New line, lets look at first argument again            nWordStart = -1;        }    }    int levelUse = levelCurrent;    int lev = levelUse | levelNext << 16;    if (levelUse < levelNext)        lev |= SC_FOLDLEVELHEADERFLAG;    if (lev != styler.LevelAt(lineCurrent))        styler.SetLevel(lineCurrent, lev);}static const char * const cmakeWordLists[] = {    "Commands",    "Parameters",    "UserDefined",    0,    0,};LexerModule lmCmake(SCLEX_CMAKE, ColouriseCmakeDoc, "cmake", FoldCmakeDoc, cmakeWordLists);

⌨️ 快捷键说明

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