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 /lexers/LexHaskell.cxx | |
| parent | bb1291876a4f6c720f34e89816a64d72ea662086 (diff) | |
| download | scintilla-mirror-f8c4e47342ff6837f2832fe0afee300d585a84a7.tar.gz | |
Fixed import folding interfering with indentation folding
Diffstat (limited to 'lexers/LexHaskell.cxx')
| -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;           }        } | 
