diff options
| author | Kein-Hong Man <unknown> | 2015-12-28 10:50:34 +1100 | 
|---|---|---|
| committer | Kein-Hong Man <unknown> | 2015-12-28 10:50:34 +1100 | 
| commit | 27e2cb45a058817845e98465d41d63d15a1d45c3 (patch) | |
| tree | 79bb100d385fcfba50b109c2318228ba7c97db19 /lexers/LexBash.cxx | |
| parent | f427177902cb8adcaf896f9b56bfaaff3c17b126 (diff) | |
| download | scintilla-mirror-27e2cb45a058817845e98465d41d63d15a1d45c3.tar.gz | |
Bug [#1778]. Recognize more characters as here-doc delimiters.
Diffstat (limited to 'lexers/LexBash.cxx')
| -rw-r--r-- | lexers/LexBash.cxx | 15 | 
1 files changed, 8 insertions, 7 deletions
| diff --git a/lexers/LexBash.cxx b/lexers/LexBash.cxx index 21a756120..af8507d7d 100644 --- a/lexers/LexBash.cxx +++ b/lexers/LexBash.cxx @@ -126,9 +126,9 @@ static void ColouriseBashDoc(Sci_PositionU startPos, Sci_Position length, int in  	CharacterSet setBashOperator(CharacterSet::setNone, "^&%()-+=|{}[]:;>,*/<?!.~@");  	CharacterSet setSingleCharOp(CharacterSet::setNone, "rwxoRWXOezsfdlpSbctugkTBMACahGLNn");  	CharacterSet setParam(CharacterSet::setAlphaNum, "$_"); -	CharacterSet setHereDoc(CharacterSet::setAlpha, "_\\-+!"); -	CharacterSet setHereDoc2(CharacterSet::setAlphaNum, "_-+!"); -	CharacterSet setLeftShift(CharacterSet::setDigits, "=$"); +	CharacterSet setHereDoc(CharacterSet::setAlpha, "_\\-+!%*,./:?@[]^`{}~"); +	CharacterSet setHereDoc2(CharacterSet::setAlphaNum, "_-+!%*,./:=?@[]^`{}~"); +	CharacterSet setLeftShift(CharacterSet::setDigits, "$");  	class HereDocCls {	// Class to manage HERE document elements  	public: @@ -426,17 +426,18 @@ static void ColouriseBashDoc(Sci_PositionU startPos, Sci_Position length, int in  						sc.Forward();  						HereDoc.Quoted = true;  						HereDoc.State = 1; -					} else if (setHereDoc.Contains(sc.chNext)) { +					} else if (setHereDoc.Contains(sc.chNext) || +					           (sc.chNext == '=' && cmdState != BASH_CMD_ARITH)) {  						// an unquoted here-doc delimiter, no special handling -						// TODO check what exactly bash considers part of the delim  						HereDoc.State = 1;  					} else if (sc.chNext == '<') {	// HERE string <<<  						sc.Forward();  						sc.ForwardSetState(SCE_SH_DEFAULT);  					} else if (IsASpace(sc.chNext)) {  						// eat whitespace -					} else if (setLeftShift.Contains(sc.chNext)) { -						// left shift << or <<= operator cases +					} else if (setLeftShift.Contains(sc.chNext) || +					           (sc.chNext == '=' && cmdState == BASH_CMD_ARITH)) { +						// left shift <<$var or <<= cases  						sc.ChangeState(SCE_SH_OPERATOR);  						sc.ForwardSetState(SCE_SH_DEFAULT);  					} else { | 
