aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/texteditor/highlighter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/texteditor/highlighter.cpp')
-rw-r--r--src/plugins/texteditor/highlighter.cpp25
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));
}