📄 syntaxhighliter_cpp.cpp
字号:
QChar lastChar; for (;;) { QChar c = string->at( i )->c; if ( lastWasBackSlash ) { input = InputSep; } else { switch ( c ) { case '*': input = InputAsterix; break; case '/': input = InputSlash; break; case '(': case '[': case '{': input = InputParen; if ( state == StateStandard || state == StateNumber || state == StatePreProcessor || state == StateCCommentEnd2 || state == StateCCommentEnd1 || state == StateString2End || state == StateStringEnd ) paragData->parenList << Paren( Paren::Open, c, i ); break; case ')': case ']': case '}': input = InputParen; if ( state == StateStandard || state == StateNumber || state == StatePreProcessor || state == StateCCommentEnd2 || state == StateCCommentEnd1 || state == StateString2End || state == StateStringEnd ) paragData->parenList << Paren( Paren::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.find( lastChar ) != -1 && ( mathChars.find( lastChar ) == -1 || numbers.find( string->at( i - 1 )->c ) == -1 ) ) { input = InputAlpha; } else { if ( input == InputAlpha && numbers.find( lastChar ) != -1 ) input = InputAlpha; else input = InputNumber; } break; case ':': { input = InputAlpha; QChar nextChar = ' '; if ( i < string->length() - 1 ) nextChar = string->at( i + 1 )->c; if ( state == StateStandard && !questionMark && lastChar != ':' && nextChar != ':' ) { for ( int j = 0; j < i; ++j ) { if ( string->at( j )->format() == formatStandard ) string->setFormat( j, 1, formatLabel, FALSE ); } } } break; default: { if ( !questionMark && c == '?' ) questionMark = TRUE; if ( c.isLetter() || c == '_' ) input = InputAlpha; else input = InputSep; } break; } } lastWasBackSlash = !lastWasBackSlash && c == '\\'; if ( input == InputAlpha ) buffer += c; state = table[ state ][ input ]; switch ( state ) { case StateStandard: { int len = buffer.length(); string->setFormat( i, 1, formatStandard, FALSE ); if ( makeLastStandard ) string->setFormat( i - 1, 1, formatStandard, FALSE ); makeLastStandard = FALSE; if ( buffer.length() > 0 && input != InputAlpha ) { if ( buffer[ 0 ] == 'Q' ) { string->setFormat( i - buffer.length(), buffer.length(), formatType, FALSE ); } else { QMap<int, QMap<QString, int > >::Iterator it = wordMap->find( len ); if ( it != wordMap->end() ) { QMap<QString, int >::Iterator it2 = ( *it ).find( buffer ); if ( it2 != ( *it ).end() ) string->setFormat( i - buffer.length(), buffer.length(), format( ( *it2 ) ), FALSE ); } } buffer = QString::null; } } break; case StateCommentStart1: if ( makeLastStandard ) string->setFormat( i - 1, 1, formatStandard, FALSE ); makeLastStandard = TRUE; buffer = QString::null; break; case StateCCommentStart2: string->setFormat( i - 1, 2, formatComment, FALSE ); makeLastStandard = FALSE; buffer = QString::null; break; case StateCppCommentStart2: string->setFormat( i - 1, 2, formatComment, FALSE ); makeLastStandard = FALSE; buffer = QString::null; break; case StateCComment: if ( makeLastStandard ) string->setFormat( i - 1, 1, formatStandard, FALSE ); makeLastStandard = FALSE; string->setFormat( i, 1, formatComment, FALSE ); buffer = QString::null; break; case StateCppComment: if ( makeLastStandard ) string->setFormat( i - 1, 1, formatStandard, FALSE ); makeLastStandard = FALSE; string->setFormat( i, 1, formatComment, FALSE ); buffer = QString::null; break; case StateCCommentEnd1: if ( makeLastStandard ) string->setFormat( i - 1, 1, formatStandard, FALSE ); makeLastStandard = FALSE; string->setFormat( i, 1, formatComment, FALSE ); buffer = QString::null; break; case StateCCommentEnd2: if ( makeLastStandard ) string->setFormat( i - 1, 1, formatStandard, FALSE ); makeLastStandard = FALSE; string->setFormat( i, 1, formatComment, FALSE ); buffer = QString::null; break; case StateStringStart: if ( makeLastStandard ) string->setFormat( i - 1, 1, formatStandard, FALSE ); makeLastStandard = FALSE; string->setFormat( i, 1, formatStandard, FALSE ); buffer = QString::null; break; case StateString: if ( makeLastStandard ) string->setFormat( i - 1, 1, formatStandard, FALSE ); makeLastStandard = FALSE; string->setFormat( i, 1, formatString, FALSE ); buffer = QString::null; break; case StateStringEnd: if ( makeLastStandard ) string->setFormat( i - 1, 1, formatStandard, FALSE ); makeLastStandard = FALSE; string->setFormat( i, 1, formatStandard, FALSE ); buffer = QString::null; break; case StateString2Start: if ( makeLastStandard ) string->setFormat( i - 1, 1, formatStandard, FALSE ); makeLastStandard = FALSE; string->setFormat( i, 1, formatStandard, FALSE ); buffer = QString::null; break; case StateString2: if ( makeLastStandard ) string->setFormat( i - 1, 1, formatStandard, FALSE ); makeLastStandard = FALSE; string->setFormat( i, 1, formatString, FALSE ); buffer = QString::null; break; case StateString2End: if ( makeLastStandard ) string->setFormat( i - 1, 1, formatStandard, FALSE ); makeLastStandard = FALSE; string->setFormat( i, 1, formatStandard, FALSE ); buffer = QString::null; break; case StateNumber: if ( makeLastStandard ) string->setFormat( i - 1, 1, formatStandard, FALSE ); makeLastStandard = FALSE; string->setFormat( i, 1, formatNumber, FALSE ); buffer = QString::null; break; case StatePreProcessor: if ( makeLastStandard ) string->setFormat( i - 1, 1, formatStandard, FALSE ); makeLastStandard = FALSE; string->setFormat( i, 1, formatPreProcessor, FALSE ); buffer = QString::null; break; } lastChar = c; i++; if ( i >= string->length() ) break; } string->setExtraData( paragData ); int oldEndState = string->endState(); if ( state == StateCComment || state == StateCCommentEnd1 ) { string->setEndState( StateCComment ); } else if ( state == StateString ) { string->setEndState( StateString ); } else if ( state == StateString2 ) { string->setEndState( StateString2 ); } else { string->setEndState( StateStandard ); } string->setFirstPreProcess( FALSE ); QTextParagraph *p = string->next(); if ( (!!oldEndState || !!string->endState()) && oldEndState != string->endState() && invalidate && p && !p->firstPreProcess() && p->endState() != -1 ) { while ( p ) { if ( p->endState() == -1 ) return; p->setEndState( -1 ); p = p->next(); } }}QTextFormat *SyntaxHighlighter_CPP::format( int id ){ if ( lastFormatId == id && lastFormat ) return lastFormat; QTextFormat *f = formats[ id ]; lastFormat = f ? f : formats[ 0 ]; lastFormatId = id; return lastFormat;}void SyntaxHighlighter_CPP::addFormat( int id, QTextFormat *f ){ formats.insert( id, f );}void SyntaxHighlighter_CPP::removeFormat( int id ){ formats.remove( id );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -