diff options
Diffstat (limited to 'src/plugins/texteditor/highlighter.cpp')
-rw-r--r-- | src/plugins/texteditor/highlighter.cpp | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/src/plugins/texteditor/highlighter.cpp b/src/plugins/texteditor/highlighter.cpp index a3765c4bf51..4512b71910f 100644 --- a/src/plugins/texteditor/highlighter.cpp +++ b/src/plugins/texteditor/highlighter.cpp @@ -279,15 +279,24 @@ void Highlighter::highlightBlock(const QString &text) return; } QTextBlock block = currentBlock(); - KSyntaxHighlighting::State state; - TextDocumentLayout::setBraceDepth(block, TextDocumentLayout::braceDepth(block.previous())); + const QTextBlock previousBlock = block.previous(); + TextDocumentLayout::setBraceDepth(block, TextDocumentLayout::braceDepth(previousBlock)); + KSyntaxHighlighting::State previousLineState; + if (TextBlockUserData *data = TextDocumentLayout::textUserData(previousBlock)) + previousLineState = data->syntaxState(); + KSyntaxHighlighting::State oldState; if (TextBlockUserData *data = TextDocumentLayout::textUserData(block)) { - state = data->syntaxState(); + oldState = data->syntaxState(); data->setFoldingStartIncluded(false); data->setFoldingEndIncluded(false); } - state = highlightLine(text, state); - const QTextBlock nextBlock = block.next(); + KSyntaxHighlighting::State state = highlightLine(text, previousLineState); + if (oldState != state) { + TextBlockUserData *data = TextDocumentLayout::userData(block); + data->setSyntaxState(state); + // Toggles the LSB of current block's userState. It forces rehighlight of next block. + setCurrentBlockState(currentBlockState() ^ 1); + } Parentheses parentheses; int pos = 0; @@ -300,13 +309,9 @@ void Highlighter::highlightBlock(const QString &text) } TextDocumentLayout::setParentheses(currentBlock(), parentheses); + const QTextBlock nextBlock = block.next(); if (nextBlock.isValid()) { TextBlockUserData *data = TextDocumentLayout::userData(nextBlock); - if (data->syntaxState() != state) { - data->setSyntaxState(state); - // Toggles the LSB of current block's userState. It forces rehighlight of next block. - setCurrentBlockState(currentBlockState() ^ 1); - } data->setFoldingIndent(TextDocumentLayout::braceDepth(block)); } |