diff options
| author | nyamatongwe <unknown> | 2009-02-15 00:39:16 +0000 | 
|---|---|---|
| committer | nyamatongwe <unknown> | 2009-02-15 00:39:16 +0000 | 
| commit | e8b2835c129ed63fa37e5588382195a6c794f426 (patch) | |
| tree | ceccadd1fff3b71942180ad36a9c954d0168f583 /src/LexHTML.cxx | |
| parent | 462ea92449cb49fbbe1c6eaa7dfe3d109eaf88d1 (diff) | |
| download | scintilla-mirror-e8b2835c129ed63fa37e5588382195a6c794f426.tar.gz | |
Bug #1843242 partial fix from Kai Liu prevents script state when script tag
is self closed.
Diffstat (limited to 'src/LexHTML.cxx')
| -rw-r--r-- | src/LexHTML.cxx | 19 | 
1 files changed, 16 insertions, 3 deletions
diff --git a/src/LexHTML.cxx b/src/LexHTML.cxx index 6d16c53f9..c324a1437 100644 --- a/src/LexHTML.cxx +++ b/src/LexHTML.cxx @@ -274,17 +274,30 @@ static int classifyTagHTML(unsigned int start, unsigned int end,  	s[i] = '\0';  	// No keywords -> all are known -	// Name of a closing tag starts at s + 1  	char chAttr = SCE_H_TAGUNKNOWN;  	if (s[0] == '!') {  		chAttr = SCE_H_SGML_DEFAULT; -	} else if (!keywords || keywords.InList(s[0] == '/' ? s + 1 : s)) { +	} else if (!keywords || keywords.InList(s)) {  		chAttr = SCE_H_TAG;  	}  	styler.ColourTo(end, chAttr);  	if (chAttr == SCE_H_TAG) {  		if (allowScripts && 0 == strcmp(s, "script")) { -			chAttr = SCE_H_SCRIPT; +			// check to see if this is a self-closing tag by sniffing ahead +			bool isSelfClose = false; +			for (unsigned int cPos = end; cPos <= end + 100; cPos++) { +				char ch = styler.SafeGetCharAt(cPos, '\0'); +				if (ch == '\0' || ch == '>') +					break; +				else if (ch == '/' && styler.SafeGetCharAt(cPos + 1, '\0') == '>') { +					isSelfClose = true; +					break; +				} +			} + +			// do not enter a script state if the tag self-closed +			if (!isSelfClose) +				chAttr = SCE_H_SCRIPT;  		} else if (!isXml && 0 == strcmp(s, "comment")) {  			chAttr = SCE_H_COMMENT;  		}  | 
