diff options
| -rw-r--r-- | include/SciLexer.h | 1 | ||||
| -rw-r--r-- | include/Scintilla.iface | 2 | ||||
| -rw-r--r-- | src/LexHTML.cxx | 19 | 
3 files changed, 19 insertions, 3 deletions
diff --git a/include/SciLexer.h b/include/SciLexer.h index 189869e42..1ec63a5d8 100644 --- a/include/SciLexer.h +++ b/include/SciLexer.h @@ -195,6 +195,7 @@  #define SCE_HP_DEFNAME 100  #define SCE_HP_OPERATOR 101  #define SCE_HP_IDENTIFIER 102 +#define SCE_HPHP_COMPLEX_VARIABLE 104  #define SCE_HPA_START 105  #define SCE_HPA_DEFAULT 106  #define SCE_HPA_COMMENTLINE 107 diff --git a/include/Scintilla.iface b/include/Scintilla.iface index 2346272c3..aa3022173 100644 --- a/include/Scintilla.iface +++ b/include/Scintilla.iface @@ -1845,6 +1845,8 @@ val SCE_HP_CLASSNAME=99  val SCE_HP_DEFNAME=100  val SCE_HP_OPERATOR=101  val SCE_HP_IDENTIFIER=102 +# PHP +val SCE_HPHP_COMPLEX_VARIABLE=104  # ASP Python  val SCE_HPA_START=105  val SCE_HPA_DEFAULT=106 diff --git a/src/LexHTML.cxx b/src/LexHTML.cxx index e442054b3..e84ff6aa6 100644 --- a/src/LexHTML.cxx +++ b/src/LexHTML.cxx @@ -416,7 +416,8 @@ static bool isPHPStringState(int state) {  	return  	    (state == SCE_HPHP_HSTRING) ||  	    (state == SCE_HPHP_SIMPLESTRING) || -	    (state == SCE_HPHP_HSTRING_VARIABLE); +	    (state == SCE_HPHP_HSTRING_VARIABLE) || +	    (state == SCE_HPHP_COMPLEX_VARIABLE);  }  static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], @@ -930,7 +931,8 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty  				styler.ColourTo(i, StateToPrint);  				state = SCE_H_DEFAULT;  			} -			if (ch != '#' && !(isascii(ch) && isalnum(ch))) {	// Should check that '#' follows '&', but it is unlikely anyway... +			if (ch != '#' && !(isascii(ch) && isalnum(ch))	// Should check that '#' follows '&', but it is unlikely anyway... +				&& ch != '.' && ch != '-' && ch != '_' && ch != ':') { // valid in XML  				styler.ColourTo(i, SCE_H_TAGUNKNOWN);  				state = SCE_H_DEFAULT;  			} @@ -1499,6 +1501,10 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty  			if (ch == '\\') {  				// skip the next char  				i++; +			} else if (ch == '$' && ((chPrev == '{' && chPrev2 != '\\' && IsPhpWordStart(chNext)) +				|| (chNext == '{' && IsPhpWordStart(chNext2)))) { +				styler.ColourTo(i - (chNext == '{' ? 1 : 2), StateToPrint); +				state = SCE_HPHP_COMPLEX_VARIABLE;  			} else if (ch == '$' && IsPhpWordStart(chNext)) {  				styler.ColourTo(i - 1, StateToPrint);  				state = SCE_HPHP_HSTRING_VARIABLE; @@ -1523,6 +1529,12 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty  				state = SCE_HPHP_HSTRING;  			}  			break; +		case SCE_HPHP_COMPLEX_VARIABLE: +			if (ch == '}') { +				styler.ColourTo(i, StateToPrint); +				state = SCE_HPHP_HSTRING; +			} +			break;  		case SCE_HPHP_OPERATOR:  		case SCE_HPHP_DEFAULT:  			styler.ColourTo(i - 1, StateToPrint); @@ -1675,7 +1687,8 @@ static void ColouriseHTMLPiece(StyleContext &sc, WordList *keywordlists[]) {  	} else if (sc.state == SCE_H_ENTITY) {  		if (sc.ch == ';') {  			sc.ForwardSetState(SCE_H_DEFAULT); -		} else if (sc.ch != '#' && (sc.ch < 0x80) && !isalnum(sc.ch)) {	// Should check that '#' follows '&', but it is unlikely anyway... +		} else if (sc.ch != '#' && (sc.ch < 0x80) && !isalnum(sc.ch)	// Should check that '#' follows '&', but it is unlikely anyway... +			&& sc.ch != '.' && sc.ch != '-' && sc.ch != '_' && sc.ch != ':') { // valid in XML  			sc.ChangeState(SCE_H_TAGUNKNOWN);  			sc.SetState(SCE_H_DEFAULT);  		}  | 
