diff options
| -rw-r--r-- | include/SciLexer.h | 1 | ||||
| -rw-r--r-- | include/Scintilla.iface | 1 | ||||
| -rw-r--r-- | src/LexCSS.cxx | 23 | 
3 files changed, 19 insertions, 6 deletions
diff --git a/include/SciLexer.h b/include/SciLexer.h index 23d2b2161..666ad09fe 100644 --- a/include/SciLexer.h +++ b/include/SciLexer.h @@ -500,6 +500,7 @@  #define SCE_CSS_DIRECTIVE 12  #define SCE_CSS_DOUBLESTRING 13  #define SCE_CSS_SINGLESTRING 14 +#define SCE_CSS_IDENTIFIER2 15  #define SCE_POV_DEFAULT 0  #define SCE_POV_COMMENT 1  #define SCE_POV_COMMENTLINE 2 diff --git a/include/Scintilla.iface b/include/Scintilla.iface index ee50968df..a31148270 100644 --- a/include/Scintilla.iface +++ b/include/Scintilla.iface @@ -2250,6 +2250,7 @@ val SCE_CSS_IMPORTANT=11  val SCE_CSS_DIRECTIVE=12  val SCE_CSS_DOUBLESTRING=13  val SCE_CSS_SINGLESTRING=14 +val SCE_CSS_IDENTIFIER2=15  # Lexical states for SCLEX_POV  lex POV=SCLEX_POV SCE_POV_  val SCE_POV_DEFAULT=0 diff --git a/src/LexCSS.cxx b/src/LexCSS.cxx index 73d5b07d9..f45ce1cda 100644 --- a/src/LexCSS.cxx +++ b/src/LexCSS.cxx @@ -2,6 +2,7 @@  /** @file LexCSS.cxx   ** Lexer for Cascading Style Sheets   ** Written by Jakub Vrána + ** Improved by Philippe Lhoste (CSS2)   **/  // Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>  // The License.txt file describes the conditions under which this software may be distributed. @@ -113,14 +114,15 @@ static void ColouriseCssDoc(unsigned int startPos, int length, int initStyle, Wo  					sc.SetState(SCE_CSS_IDENTIFIER);  				break;  			case '}': -				if (lastState == SCE_CSS_DEFAULT || lastState == SCE_CSS_VALUE || lastState == SCE_CSS_IMPORTANT || lastState == SCE_CSS_IDENTIFIER) +				if (lastState == SCE_CSS_DEFAULT || lastState == SCE_CSS_VALUE || lastState == SCE_CSS_IMPORTANT || +					lastState == SCE_CSS_IDENTIFIER || lastState == SCE_CSS_IDENTIFIER2)  					sc.SetState(SCE_CSS_DEFAULT);  				break;  			case ':':  				if (lastState == SCE_CSS_TAG || lastState == SCE_CSS_PSEUDOCLASS || lastState == SCE_CSS_DEFAULT ||  					lastState == SCE_CSS_CLASS || lastState == SCE_CSS_ID || lastState == SCE_CSS_UNKNOWN_PSEUDOCLASS)  					sc.SetState(SCE_CSS_PSEUDOCLASS); -				else if (lastState == SCE_CSS_IDENTIFIER || lastState == SCE_CSS_UNKNOWN_IDENTIFIER) +				else if (lastState == SCE_CSS_IDENTIFIER || lastState == SCE_CSS_IDENTIFIER2 || lastState == SCE_CSS_UNKNOWN_IDENTIFIER)  					sc.SetState(SCE_CSS_VALUE);  				break;  			case '.': @@ -155,7 +157,8 @@ static void ColouriseCssDoc(unsigned int startPos, int length, int initStyle, Wo  		}  		if (IsAWordChar(sc.chPrev) && ( -			sc.state == SCE_CSS_IDENTIFIER || sc.state == SCE_CSS_UNKNOWN_IDENTIFIER +			sc.state == SCE_CSS_IDENTIFIER || sc.state == SCE_CSS_IDENTIFIER2 +			|| sc.state == SCE_CSS_UNKNOWN_IDENTIFIER  			|| sc.state == SCE_CSS_PSEUDOCLASS || sc.state == SCE_CSS_UNKNOWN_PSEUDOCLASS  			|| sc.state == SCE_CSS_IMPORTANT  		)) { @@ -166,12 +169,19 @@ static void ColouriseCssDoc(unsigned int startPos, int length, int initStyle, Wo  				s2++;  			switch (sc.state) {  			case SCE_CSS_IDENTIFIER: -				if (!keywords.InList(s2) && !keywords2.InList(s2)) -					sc.ChangeState(SCE_CSS_UNKNOWN_IDENTIFIER); +				if (!keywords.InList(s2)) { +					if (keywords2.InList(s2)) { +						sc.ChangeState(SCE_CSS_IDENTIFIER2); +					} else { +						sc.ChangeState(SCE_CSS_UNKNOWN_IDENTIFIER); +					} +				}  				break;  			case SCE_CSS_UNKNOWN_IDENTIFIER:  				if (keywords.InList(s2))  					sc.ChangeState(SCE_CSS_IDENTIFIER); +				else if (keywords2.InList(s2)) +					sc.ChangeState(SCE_CSS_IDENTIFIER2);  				break;  			case SCE_CSS_PSEUDOCLASS:  				if (!pseudoClasses.InList(s2)) @@ -262,8 +272,9 @@ static void FoldCSSDoc(unsigned int startPos, int length, int, WordList *[], Acc  }  static const char * const cssWordListDesc[] = { -	"Keywords", +	"CSS1 Keywords",  	"Pseudo classes", +	"CSS2 Keywords",  	0  };  | 
