aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--doc/ScintillaHistory.html4
-rw-r--r--lexers/LexBash.cxx15
2 files changed, 19 insertions, 0 deletions
diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html
index 055828d30..d2cd99ab6 100644
--- a/doc/ScintillaHistory.html
+++ b/doc/ScintillaHistory.html
@@ -561,6 +561,10 @@
<a href="https://sourceforge.net/p/scintilla/feature-requests/1185/">Feature #1185.</a>
</li>
<li>
+ Shell folder folds "if", "do", and "case".
+ <a href="https://sourceforge.net/p/scintilla/feature-requests/1144/">Feature #1144.</a>
+ </li>
+ <li>
SciTE's menukey feature implemented on Windows.
</li>
<li>
diff --git a/lexers/LexBash.cxx b/lexers/LexBash.cxx
index 931d1bf47..5bbd563d5 100644
--- a/lexers/LexBash.cxx
+++ b/lexers/LexBash.cxx
@@ -824,6 +824,8 @@ static void FoldBashDoc(Sci_PositionU startPos, Sci_Position length, int, WordLi
int levelCurrent = levelPrev;
char chNext = styler[startPos];
int styleNext = styler.StyleAt(startPos);
+ char word[8] = { '\0' }; // we're not interested in long words anyway
+ unsigned int wordlen = 0;
for (Sci_PositionU i = startPos; i < endPos; i++) {
char ch = chNext;
chNext = styler.SafeGetCharAt(i + 1);
@@ -840,6 +842,19 @@ static void FoldBashDoc(Sci_PositionU startPos, Sci_Position length, int, WordLi
&& !IsCommentLine(lineCurrent + 1, styler))
levelCurrent--;
}
+ if (style == SCE_SH_WORD) {
+ if ((wordlen + 1) < sizeof(word))
+ word[wordlen++] = ch;
+ if (styleNext != style) {
+ word[wordlen] = '\0';
+ wordlen = 0;
+ if (strcmp(word, "if") == 0 || strcmp(word, "case") == 0 || strcmp(word, "do") == 0) {
+ levelCurrent++;
+ } else if (strcmp(word, "fi") == 0 || strcmp(word, "esac") == 0 || strcmp(word, "done") == 0) {
+ levelCurrent--;
+ }
+ }
+ }
if (style == SCE_SH_OPERATOR) {
if (ch == '{') {
levelCurrent++;