diff options
| -rw-r--r-- | doc/ScintillaHistory.html | 4 | ||||
| -rw-r--r-- | lexers/LexBash.cxx | 15 | 
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++;  | 
