From a3af6cd9d4a006b30d9dd6cbf0d922aa9776ab7f Mon Sep 17 00:00:00 2001 From: nyamatongwe Date: Sat, 10 Nov 2001 02:48:46 +0000 Subject: The PHP and ASP lexers process some HTML now. --- src/LexHTML.cxx | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 108 insertions(+), 4 deletions(-) (limited to 'src/LexHTML.cxx') diff --git a/src/LexHTML.cxx b/src/LexHTML.cxx index 551e7015a..82bc1d942 100644 --- a/src/LexHTML.cxx +++ b/src/LexHTML.cxx @@ -1607,6 +1607,101 @@ static void ColouriseHBAPiece(StyleContext &sc, WordList *keywordlists[]) { } } +static void ColouriseHTMLPiece(StyleContext &sc, WordList *keywordlists[]) { + WordList &keywordsTags = *keywordlists[0]; + if (sc.state == SCE_H_COMMENT) { + if (sc.Match("-->")) { + sc.Forward(); + sc.Forward(); + sc.ForwardSetState(SCE_H_DEFAULT); + } + } 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... + sc.ChangeState(SCE_H_TAGUNKNOWN); + sc.SetState(SCE_H_DEFAULT); + } + } else if (sc.state == SCE_H_TAGUNKNOWN) { + if (!ishtmlwordchar(sc.ch) && !((sc.ch == '/') && (sc.chPrev == '<')) && sc.ch != '[') { + char s[100]; + sc.GetCurrentLowered(s, sizeof(s)); + if (s[1] == '/') { + if (keywordsTags.InList(s + 2)) { + sc.ChangeState(SCE_H_TAG); + } + } else { + if (keywordsTags.InList(s + 1)) { + sc.ChangeState(SCE_H_TAG); + } + } + if (sc.ch == '>') { + sc.ForwardSetState(SCE_H_DEFAULT); + } else if (sc.Match('/', '>')) { + sc.SetState(SCE_H_TAGEND); + sc.Forward(); + sc.ForwardSetState(SCE_H_DEFAULT); + } else { + sc.SetState(SCE_H_OTHER); + } + } + } else if (sc.state == SCE_H_ATTRIBUTE) { + if (!ishtmlwordchar(sc.ch)) { + char s[100]; + sc.GetCurrentLowered(s, sizeof(s)); + if (!keywordsTags.InList(s)) { + sc.ChangeState(SCE_H_ATTRIBUTEUNKNOWN); + } + sc.SetState(SCE_H_OTHER); + } + } else if (sc.state == SCE_H_OTHER) { + if (sc.ch == '>') { + sc.SetState(SCE_H_TAG); + sc.ForwardSetState(SCE_H_DEFAULT); + } else if (sc.Match('/', '>')) { + sc.SetState(SCE_H_TAG); + sc.Forward(); + sc.ForwardSetState(SCE_H_DEFAULT); + } + } else if (sc.state == SCE_H_DOUBLESTRING) { + if (sc.ch == '\"') { + sc.ForwardSetState(SCE_H_OTHER); + } + } else if (sc.state == SCE_H_SINGLESTRING) { + if (sc.ch == '\'') { + sc.ForwardSetState(SCE_H_OTHER); + } + } else if (sc.state == SCE_H_NUMBER) { + if (!IsADigit(sc.ch)) { + sc.SetState(SCE_H_OTHER); + } + } + + if (sc.state == SCE_H_DEFAULT) { + if (sc.ch == '<') { + if (sc.Match("