Folding issues related to the Scintilla JSON lexer

Applied patch from:
https://sourceforge.net/p/scintilla/code/merge-requests/19/

See this thread for info:
https://groups.google.com/forum/#!topic/scintilla-interest/w4sW3sM6Cek

This is merged into Scintilla, so it might come fixed in a future
release.

This should solve the folding issue reported in #1173
This commit is contained in:
mgrojo
2017-11-24 19:31:47 +01:00
parent 189f19695a
commit ce06845b36
2 changed files with 28 additions and 2 deletions

24
libs/DB4S_PATCH_04 Normal file
View File

@@ -0,0 +1,24 @@
diff --git a/libs/qscintilla/lexers/LexJSON.cpp b/libs/qscintilla/lexers/LexJSON.cpp
index 9c044e5..6c06061 100644
--- a/libs/qscintilla/lexers/LexJSON.cpp
+++ b/libs/qscintilla/lexers/LexJSON.cpp
@@ -457,7 +457,9 @@ void SCI_METHOD LexerJSON::Fold(Sci_PositionU startPos,
LexAccessor styler(pAccess);
Sci_PositionU currLine = styler.GetLine(startPos);
Sci_PositionU endPos = startPos + length;
- int currLevel = styler.LevelAt(currLine) & SC_FOLDLEVELNUMBERMASK;
+ int currLevel = SC_FOLDLEVELBASE;
+ if (currLine > 0)
+ currLevel = styler.LevelAt(currLine - 1) >> 16;
int nextLevel = currLevel;
int visibleChars = 0;
for (Sci_PositionU i = startPos; i < endPos; i++) {
@@ -472,7 +474,7 @@ void SCI_METHOD LexerJSON::Fold(Sci_PositionU startPos,
}
}
if (atEOL || i == (endPos-1)) {
- int level = currLevel;
+ int level = currLevel | nextLevel << 16;
if (!visibleChars && options.foldCompact) {
level |= SC_FOLDLEVELWHITEFLAG;
} else if (nextLevel > currLevel) {

View File

@@ -457,7 +457,9 @@ void SCI_METHOD LexerJSON::Fold(Sci_PositionU startPos,
LexAccessor styler(pAccess);
Sci_PositionU currLine = styler.GetLine(startPos);
Sci_PositionU endPos = startPos + length;
int currLevel = styler.LevelAt(currLine) & SC_FOLDLEVELNUMBERMASK;
int currLevel = SC_FOLDLEVELBASE;
if (currLine > 0)
currLevel = styler.LevelAt(currLine - 1) >> 16;
int nextLevel = currLevel;
int visibleChars = 0;
for (Sci_PositionU i = startPos; i < endPos; i++) {
@@ -472,7 +474,7 @@ void SCI_METHOD LexerJSON::Fold(Sci_PositionU startPos,
}
}
if (atEOL || i == (endPos-1)) {
int level = currLevel;
int level = currLevel | nextLevel << 16;
if (!visibleChars && options.foldCompact) {
level |= SC_FOLDLEVELWHITEFLAG;
} else if (nextLevel > currLevel) {