aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorkudah <kudahkukarek@gmail.com>2013-04-17 15:08:07 +0300
committerkudah <kudahkukarek@gmail.com>2013-04-17 15:08:07 +0300
commitf8c4e47342ff6837f2832fe0afee300d585a84a7 (patch)
treeb81d9d4b2c7b8a8db359fe33440393255d0748a6
parentbb1291876a4f6c720f34e89816a64d72ea662086 (diff)
downloadscintilla-mirror-f8c4e47342ff6837f2832fe0afee300d585a84a7.tar.gz
Fixed import folding interfering with indentation folding
-rw-r--r--lexers/LexHaskell.cxx16
1 files changed, 14 insertions, 2 deletions
diff --git a/lexers/LexHaskell.cxx b/lexers/LexHaskell.cxx
index 5f674becb..570e79b46 100644
--- a/lexers/LexHaskell.cxx
+++ b/lexers/LexHaskell.cxx
@@ -54,6 +54,8 @@ using namespace Scintilla;
#define HA_MODE_FFI 5
#define HA_MODE_TYPE 6
+#define INDENT_OFFSET 1
+
static inline bool IsAWordStart(const int ch) {
return (IsLowerCase(ch) || IsUpperCase(ch) || ch == '_');
}
@@ -642,6 +644,11 @@ void SCI_METHOD LexerHaskell::Fold(unsigned int startPos, int length, int // ini
}
int indentCurrentLevel = indentCurrent & SC_FOLDLEVELNUMBERMASK;
+ int indentCurrentMask = indentCurrent & ~SC_FOLDLEVELNUMBERMASK;
+
+ if (indentCurrentLevel != (SC_FOLDLEVELBASE & SC_FOLDLEVELNUMBERMASK)) {
+ indentCurrent = (indentCurrentLevel + INDENT_OFFSET) | indentCurrentMask;
+ }
if (lineCurrent <= firstImportLine) {
firstImportLine = -1; // readjust first import position
@@ -653,7 +660,7 @@ void SCI_METHOD LexerHaskell::Fold(unsigned int startPos, int length, int // ini
}
if (firstImportLine != lineCurrent) {
indentCurrentLevel++;
- indentCurrent = indentCurrentLevel | (indentCurrent & ~SC_FOLDLEVELNUMBERMASK);
+ indentCurrent = indentCurrentLevel | indentCurrentMask;
}
}
@@ -688,6 +695,11 @@ void SCI_METHOD LexerHaskell::Fold(unsigned int startPos, int length, int // ini
}
int indentNextLevel = indentNext & SC_FOLDLEVELNUMBERMASK;
+ int indentNextMask = indentNext & ~SC_FOLDLEVELNUMBERMASK;
+
+ if (indentNextLevel != (SC_FOLDLEVELBASE & SC_FOLDLEVELNUMBERMASK)) {
+ indentNext = (indentNextLevel + INDENT_OFFSET) | indentNextMask;
+ }
if (importHere) {
if (firstImportLine == -1) {
@@ -695,7 +707,7 @@ void SCI_METHOD LexerHaskell::Fold(unsigned int startPos, int length, int // ini
}
if (firstImportLine != lineNext) {
indentNextLevel++;
- indentNext = indentNextLevel | (indentNext & ~SC_FOLDLEVELNUMBERMASK);
+ indentNext = indentNextLevel | indentNextMask;
}
}