From 3ec27a17c84b85487008b07cb8a49832c35722a1 Mon Sep 17 00:00:00 2001 From: nyamatongwe Date: Sun, 1 Jun 2008 05:40:37 +0000 Subject: Feature request #1978041 adds IE-specific tag. --- src/LexHTML.cxx | 62 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 32 insertions(+), 30 deletions(-) (limited to 'src/LexHTML.cxx') diff --git a/src/LexHTML.cxx b/src/LexHTML.cxx index 22be20d5c..165697746 100644 --- a/src/LexHTML.cxx +++ b/src/LexHTML.cxx @@ -29,7 +29,7 @@ using namespace Scintilla; #define SCE_HA_VBS (SCE_HBA_START - SCE_HB_START) #define SCE_HA_PYTHON (SCE_HPA_START - SCE_HP_START) -enum script_type { eScriptNone = 0, eScriptJS, eScriptVBS, eScriptPython, eScriptPHP, eScriptXML, eScriptSGML, eScriptSGMLblock }; +enum script_type { eScriptNone = 0, eScriptJS, eScriptVBS, eScriptPython, eScriptPHP, eScriptXML, eScriptSGML, eScriptSGMLblock, eScriptComment }; enum script_mode { eHtml = 0, eNonHtmlScript, eNonHtmlPreProc, eNonHtmlScriptPreProc }; static inline bool IsAWordChar(const int ch) { @@ -273,26 +273,23 @@ static int classifyTagHTML(unsigned int start, unsigned int end, //now we can remove the trailing space s[i] = '\0'; - bool isScript = false; + // 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 (s[0] == '/') { // Closing tag - if (keywords.InList(s + 1)) - chAttr = SCE_H_TAG; - } else { - if (keywords.InList(s)) { - chAttr = SCE_H_TAG; - isScript = 0 == strcmp(s, "script"); - } - } - if ((chAttr == SCE_H_TAGUNKNOWN) && !keywords) { - // No keywords -> all are known + } else if (!keywords || keywords.InList(s[0] == '/' ? s + 1 : s)) { chAttr = SCE_H_TAG; - isScript = 0 == strcmp(s, "script"); } styler.ColourTo(end, chAttr); - return allowScripts && isScript ? SCE_H_SCRIPT : chAttr; + if (chAttr == SCE_H_TAG) { + if (allowScripts && 0 == strcmp(s, "script")) { + chAttr = SCE_H_SCRIPT; + } else if (!isXml && 0 == strcmp(s, "comment")) { + chAttr = SCE_H_COMMENT; + } + } + return chAttr; } static void classifyWordHTJS(unsigned int start, unsigned int end, @@ -411,6 +408,9 @@ static int StateForScript(script_type scriptLanguage) { case eScriptSGML: Result = SCE_H_SGML_DEFAULT; break; + case eScriptComment: + Result = SCE_H_COMMENT; + break; default : Result = SCE_HJ_START; break; @@ -536,6 +536,10 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty int beforePreProc = (lineState >> 12) & 0xFF; // 8 bits of state script_type scriptLanguage = ScriptOfState(state); + // If eNonHtmlScript coincides with SCE_H_COMMENT, assume eScriptComment + if (inScriptType == eNonHtmlScript && state == SCE_H_COMMENT) { + scriptLanguage = eScriptComment; + } const bool foldHTML = styler.GetPropertyInt("fold.html", 0) != 0; const bool fold = foldHTML && styler.GetPropertyInt("fold", 0); @@ -690,16 +694,15 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty break; default : // check if the closing tag is a script tag - if (state == SCE_HJ_COMMENTLINE || isXml) { - char tag[7]; // room for the