From 99445789753a68c5edd17d5471d5a905ce1d7ed5 Mon Sep 17 00:00:00 2001 From: nyamatongwe Date: Wed, 19 Sep 2001 06:40:19 +0000 Subject: Patch from Steve to make CDATA sections include their surrounding SGML "". --- src/LexHTML.cxx | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) (limited to 'src/LexHTML.cxx') diff --git a/src/LexHTML.cxx b/src/LexHTML.cxx index 6502f8989..e6861f77f 100644 --- a/src/LexHTML.cxx +++ b/src/LexHTML.cxx @@ -76,7 +76,7 @@ static int ScriptOfState(int state) { return eScriptJS; } else if ((state >= SCE_HPHP_DEFAULT) && (state <= SCE_HPHP_COMMENTLINE)) { return eScriptPHP; - } else if (((state >= SCE_H_SGML_DEFAULT) && (state <= SCE_H_SGML_BLOCK_DEFAULT)) || (state == SCE_H_CDATA)) { + } else if ((state >= SCE_H_SGML_DEFAULT) && (state <= SCE_H_SGML_BLOCK_DEFAULT)) { return eScriptSGML; } else if (state == SCE_H_SGML_BLOCK_DEFAULT) { return eScriptSGMLblock; @@ -365,6 +365,10 @@ static bool InTagState(int state) { state == SCE_H_DOUBLESTRING || state == SCE_H_SINGLESTRING; } +static bool IsCommentState(const int state) { + return state == SCE_H_COMMENT || state == SCE_H_SGML_COMMENT; +} + static bool isLineEnd(char ch) { return ch == '\r' || ch == '\n'; } @@ -479,14 +483,15 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty } else if ((ch == '\n') && !((chNext == '\r') && (chNext2 == '\n')) && (chNext != '\n')) { // check if the number of tabs is lower than the level int Findlevel = (levelCurrent & ~SC_FOLDLEVELBASE) * 8; - for (int j = 0;Findlevel > 0;j++) { + for (int j = 0; Findlevel > 0; j++) { char chTmp = styler.SafeGetCharAt(i + j + 1); if (chTmp == '\t') { Findlevel -= 8; - } else if (chTmp == ' ') { + } else if (chTmp == ' ') { Findlevel--; - } else - break; + } else { + break; + } } if (Findlevel > 0) { @@ -615,6 +620,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty i++; // place as if it was the next char treated visibleChars++; } + state = StateForScript(aspScript); } scriptLanguage = eScriptVBS; @@ -630,13 +636,16 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty // handle the start of SGML language (DTD) else if (((scriptLanguage == eScriptNone) || (scriptLanguage == eScriptXML)) && (chPrev == '<') && - (ch == '!')) { + (ch == '!') && + (StateToPrint != SCE_H_CDATA) && (!IsCommentState(StateToPrint))) { beforePreProc = state; styler.ColourTo(i - 2, StateToPrint); if ((chNext == '-') && (chNext2 == '-')) { state = SCE_H_COMMENT; // wait for a pending command } - else { + else if (isWordCdata(i + 1, i + 7, styler)) { + state = SCE_H_CDATA; + } else { styler.ColourTo(i, SCE_H_SGML_DEFAULT); // ')) { + styler.ColourTo(i, StateToPrint); + state = SCE_H_DEFAULT; + levelCurrent--; + } + break; case SCE_H_COMMENT: if ((chPrev2 == '-') && (chPrev == '-') && (ch == '>')) { styler.ColourTo(i, StateToPrint); -- cgit v1.2.3