diff options
author | kudah <kudahkukarek@gmail.com> | 2013-04-17 15:08:07 +0300 |
---|---|---|
committer | kudah <kudahkukarek@gmail.com> | 2013-04-17 15:08:07 +0300 |
commit | f8c4e47342ff6837f2832fe0afee300d585a84a7 (patch) | |
tree | b81d9d4b2c7b8a8db359fe33440393255d0748a6 | |
parent | bb1291876a4f6c720f34e89816a64d72ea662086 (diff) | |
download | scintilla-mirror-f8c4e47342ff6837f2832fe0afee300d585a84a7.tar.gz |
Fixed import folding interfering with indentation folding
-rw-r--r-- | lexers/LexHaskell.cxx | 16 |
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; } } |