aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/texteditor/highlighter.cpp21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/plugins/texteditor/highlighter.cpp b/src/plugins/texteditor/highlighter.cpp
index 07ec2fcf96..ee958795ae 100644
--- a/src/plugins/texteditor/highlighter.cpp
+++ b/src/plugins/texteditor/highlighter.cpp
@@ -274,9 +274,9 @@ void Highlighter::highlightBlock(const QString &text)
{
if (!definition().isValid())
return;
- const QTextBlock block = currentBlock();
+ QTextBlock block = currentBlock();
KSyntaxHighlighting::State state;
- setCurrentBlockState(qMax(0, previousBlockState()));
+ TextDocumentLayout::setBraceDepth(block, TextDocumentLayout::braceDepth(block.previous()));
if (TextBlockUserData *data = TextDocumentLayout::testUserData(block)) {
state = data->syntaxState();
data->setFoldingStartIncluded(false);
@@ -298,8 +298,11 @@ void Highlighter::highlightBlock(const QString &text)
if (nextBlock.isValid()) {
TextBlockUserData *data = TextDocumentLayout::userData(nextBlock);
- data->setSyntaxState(state);
- data->setFoldingIndent(currentBlockState());
+ if (data->syntaxState() != state) {
+ data->setSyntaxState(state);
+ setCurrentBlockState(currentBlockState() ^ 1); // force rehighlight of next block
+ }
+ data->setFoldingIndent(TextDocumentLayout::braceDepth(block));
}
formatSpaces(text);
@@ -316,24 +319,24 @@ void Highlighter::applyFolding(int offset,
{
if (!region.isValid())
return;
- const QTextBlock &block = currentBlock();
+ QTextBlock block = currentBlock();
const QString &text = block.text();
TextBlockUserData *data = TextDocumentLayout::userData(currentBlock());
const bool fromStart = TabSettings::firstNonSpace(text) == offset;
const bool toEnd = (offset + length) == (text.length() - TabSettings::trailingWhitespaces(text));
if (region.type() == KSyntaxHighlighting::FoldingRegion::Begin) {
- setCurrentBlockState(currentBlockState() + 1);
+ TextDocumentLayout::changeBraceDepth(block, 1);
// if there is only a folding begin in the line move the current block into the fold
if (fromStart && toEnd) {
- data->setFoldingIndent(currentBlockState());
+ data->setFoldingIndent(TextDocumentLayout::braceDepth(block));
data->setFoldingStartIncluded(true);
}
} else if (region.type() == KSyntaxHighlighting::FoldingRegion::End) {
- setCurrentBlockState(qMax(0, currentBlockState() - 1));
+ TextDocumentLayout::changeBraceDepth(block, -1);
// if the folding end is at the end of the line move the current block into the fold
if (toEnd)
data->setFoldingEndIncluded(true);
else
- data->setFoldingIndent(currentBlockState());
+ data->setFoldingIndent(TextDocumentLayout::braceDepth(block));
}
}