diff options
| author | nyamatongwe <devnull@localhost> | 2010-06-14 00:49:30 +0000 | 
|---|---|---|
| committer | nyamatongwe <devnull@localhost> | 2010-06-14 00:49:30 +0000 | 
| commit | 494623a37db2a4e869335a48e560f63e5a415d05 (patch) | |
| tree | 67db47bec44c9a816db72be845172cbe5587c19b | |
| parent | 1174d9265b591002dfe97357b3a6797b79cbe4d6 (diff) | |
| download | scintilla-mirror-494623a37db2a4e869335a48e560f63e5a415d05.tar.gz | |
Improved PowerShell by Friedrich Vedder. Feature #3015176.
| -rw-r--r-- | include/SciLexer.h | 3 | ||||
| -rw-r--r-- | include/Scintilla.iface | 3 | ||||
| -rw-r--r-- | src/LexPowerShell.cxx | 27 | 
3 files changed, 31 insertions, 2 deletions
| diff --git a/include/SciLexer.h b/include/SciLexer.h index 12700b67b..f3b3ef838 100644 --- a/include/SciLexer.h +++ b/include/SciLexer.h @@ -1275,6 +1275,9 @@  #define SCE_POWERSHELL_KEYWORD 8  #define SCE_POWERSHELL_CMDLET 9  #define SCE_POWERSHELL_ALIAS 10 +#define SCE_POWERSHELL_FUNCTION 11 +#define SCE_POWERSHELL_USER1 12 +#define SCE_POWERSHELL_COMMENTSTREAM 13  #define SCE_MYSQL_DEFAULT 0  #define SCE_MYSQL_COMMENT 1  #define SCE_MYSQL_COMMENTLINE 2 diff --git a/include/Scintilla.iface b/include/Scintilla.iface index 7d64f2d48..d7c850840 100644 --- a/include/Scintilla.iface +++ b/include/Scintilla.iface @@ -3628,6 +3628,9 @@ val SCE_POWERSHELL_IDENTIFIER=7  val SCE_POWERSHELL_KEYWORD=8  val SCE_POWERSHELL_CMDLET=9  val SCE_POWERSHELL_ALIAS=10 +val SCE_POWERSHELL_FUNCTION=11 +val SCE_POWERSHELL_USER1=12 +val SCE_POWERSHELL_COMMENTSTREAM=13  # Lexical state for SCLEX_MYSQL  lex MySQL=SCLEX_MYSQL SCE_MYSQL_  val SCE_MYSQL_DEFAULT=0 diff --git a/src/LexPowerShell.cxx b/src/LexPowerShell.cxx index d16ba9842..f2014ca8d 100644 --- a/src/LexPowerShell.cxx +++ b/src/LexPowerShell.cxx @@ -35,6 +35,8 @@ static void ColourisePowerShellDoc(unsigned int startPos, int length, int initSt  	WordList &keywords = *keywordlists[0];  	WordList &keywords2 = *keywordlists[1];  	WordList &keywords3 = *keywordlists[2]; +	WordList &keywords4 = *keywordlists[3]; +	WordList &keywords5 = *keywordlists[4];  	styler.StartAt(startPos); @@ -46,6 +48,10 @@ static void ColourisePowerShellDoc(unsigned int startPos, int length, int initSt  			if (sc.atLineEnd) {  				sc.SetState(SCE_POWERSHELL_DEFAULT);  			} +		} else if (sc.state == SCE_POWERSHELL_COMMENTSTREAM) { +			if (sc.ch == '>' && sc.chPrev == '#') { +				sc.ForwardSetState(SCE_POWERSHELL_DEFAULT); +			}  		} else if (sc.state == SCE_POWERSHELL_STRING) {  			// This is a doubles quotes string  			if (sc.ch == '\"') { @@ -79,6 +85,10 @@ static void ColourisePowerShellDoc(unsigned int startPos, int length, int initSt  					sc.ChangeState(SCE_POWERSHELL_CMDLET);  				} else if (keywords3.InList(s)) {  					sc.ChangeState(SCE_POWERSHELL_ALIAS); +				} else if (keywords4.InList(s)) { +					sc.ChangeState(SCE_POWERSHELL_FUNCTION); +				} else if (keywords5.InList(s)) { +					sc.ChangeState(SCE_POWERSHELL_USER1);  				}  				sc.SetState(SCE_POWERSHELL_DEFAULT);  			} @@ -88,6 +98,8 @@ static void ColourisePowerShellDoc(unsigned int startPos, int length, int initSt  		if (sc.state == SCE_POWERSHELL_DEFAULT) {  			if (sc.ch == '#') {  				sc.SetState(SCE_POWERSHELL_COMMENT); +			} else if (sc.ch == '<' && sc.chNext == '#') { +				sc.SetState(SCE_POWERSHELL_COMMENTSTREAM);  			} else if (sc.ch == '\"') {  				sc.SetState(SCE_POWERSHELL_STRING);  			} else if (sc.ch == '\'') { @@ -109,8 +121,9 @@ static void ColourisePowerShellDoc(unsigned int startPos, int length, int initSt  // Store both the current line's fold level and the next lines in the  // level store to make it easy to pick up with each increment  // and to make it possible to fiddle the current level for "} else {". -static void FoldPowerShellDoc(unsigned int startPos, int length, int, +static void FoldPowerShellDoc(unsigned int startPos, int length, int initStyle,                             WordList *[], Accessor &styler) { +	bool foldComment = styler.GetPropertyInt("fold.comment") != 0;  	bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;  	bool foldAtElse = styler.GetPropertyInt("fold.at.else", 0) != 0;  	unsigned int endPos = startPos + length; @@ -123,10 +136,12 @@ static void FoldPowerShellDoc(unsigned int startPos, int length, int,  	int levelNext = levelCurrent;  	char chNext = styler[startPos];  	int styleNext = styler.StyleAt(startPos); +	int style = initStyle;  	for (unsigned int i = startPos; i < endPos; i++) {  		char ch = chNext;  		chNext = styler.SafeGetCharAt(i + 1); -		int style = styleNext; +		int stylePrev = style; +		style = styleNext;  		styleNext = styler.StyleAt(i + 1);  		bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');  		if (style == SCE_POWERSHELL_OPERATOR) { @@ -140,6 +155,12 @@ static void FoldPowerShellDoc(unsigned int startPos, int length, int,  			} else if (ch == '}') {  				levelNext--;  			} +		} else if (foldComment && style == SCE_POWERSHELL_COMMENTSTREAM) { +			if (stylePrev != SCE_POWERSHELL_COMMENTSTREAM) { +				levelNext++; +			} else if (styleNext != SCE_POWERSHELL_COMMENTSTREAM) { +				levelNext--; +			}  		}  		if (!IsASpace(ch))  			visibleChars++; @@ -168,6 +189,8 @@ static const char * const powershellWordLists[] = {  	"Commands",  	"Cmdlets",  	"Aliases", +	"Functions", +	"User1",  	0  }; | 
