diff options
author | nyamatongwe <devnull@localhost> | 2000-06-06 14:38:23 +0000 |
---|---|---|
committer | nyamatongwe <devnull@localhost> | 2000-06-06 14:38:23 +0000 |
commit | 152d797ce374a8da9b41f6631f0449802b1761e1 (patch) | |
tree | 0e0ca1435cd17ac63f7b1dd0def24754be718cfd /src | |
parent | daeda27f379ee9cf5f1e7b882273ac51078e790a (diff) | |
download | scintilla-mirror-152d797ce374a8da9b41f6631f0449802b1761e1.tar.gz |
Handle CDATA sections in XML.
Diffstat (limited to 'src')
-rw-r--r-- | src/LexHTML.cxx | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/LexHTML.cxx b/src/LexHTML.cxx index 9a9377292..678398742 100644 --- a/src/LexHTML.cxx +++ b/src/LexHTML.cxx @@ -71,9 +71,12 @@ static int classifyTagHTML(unsigned int start, unsigned int end, s[i++] = static_cast<char>(tolower(ch)); } s[i] = '\0'; +Platform::DebugPrintf("Classify =%s=\n", s); char chAttr = SCE_H_TAGUNKNOWN; if (s[0] == '!' && s[1] == '-' && s[2] == '-') { //Comment chAttr = SCE_H_COMMENT; + } else if (strcmp(s, "![cdata[") == 0) { // In lower case because already converted + chAttr = SCE_H_CDATA; } else if (s[0] == '/') { // Closing tag if (keywords.InList(s + 1)) chAttr = SCE_H_TAG; @@ -354,6 +357,11 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty styler.ColourTo(i, state); state = SCE_H_DEFAULT; } + } else if (state == SCE_H_CDATA) { + if ((ch == '>') && (chPrev == ']') && (chPrev2 == ']')) { + styler.ColourTo(i, state); + state = SCE_H_DEFAULT; + } } else if (state == SCE_H_ENTITY) { if (ch == ';') { styler.ColourTo(i, state); @@ -364,7 +372,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty state = SCE_H_DEFAULT; } } else if (state == SCE_H_TAGUNKNOWN) { - if (!ishtmlwordchar(ch) && ch != '/' && ch != '-') { + if (!ishtmlwordchar(ch) && ch != '/' && ch != '-' && ch != '[') { int eClass = classifyTagHTML(styler.GetStartSegment(), i - 1, keywords, styler); lastTagWasScript = eClass == SCE_H_SCRIPT; if (lastTagWasScript) { @@ -386,6 +394,8 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty } else { if (eClass == SCE_H_COMMENT) { state = SCE_H_COMMENT; + } else if (eClass == SCE_H_CDATA) { + state = SCE_H_CDATA; } else { state = SCE_H_OTHER; } |