⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lexhtml.cxx

📁 wxGTK 是 wxWidgets 的 linux GTK+ (>2.2.3)版本。wxWidgets 是一个跨平台的 GUI 框架
💻 CXX
📖 第 1 页 / 共 5 页
字号:
			} else if (ch == '/' && chNext == '*') {				i++;				state = SCE_HPHP_COMMENT;			} else if (ch == '/' && chNext == '/') {				i++;				state = SCE_HPHP_COMMENTLINE;			} else if (ch == '#') {				state = SCE_HPHP_COMMENTLINE;			} else if (ch == '\"') {				state = SCE_HPHP_HSTRING;				strcpy(phpStringDelimiter, "\"");			} else if (styler.Match(i, "<<<")) {				state = SCE_HPHP_HSTRING;				i = FindPhpStringDelimiter(phpStringDelimiter, sizeof(phpStringDelimiter), i + 3, lengthDoc, styler);			} else if (ch == '\'') {				state = SCE_HPHP_SIMPLESTRING;			} else if (ch == '$' && IsPhpWordStart(chNext)) {				state = SCE_HPHP_VARIABLE;			} else if (isoperator(ch)) {				state = SCE_HPHP_OPERATOR;			} else if ((state == SCE_HPHP_OPERATOR) && (isspacechar(ch))) {				state = SCE_HPHP_DEFAULT;			}			break;			///////////// end - PHP state handling		}		// Some of the above terminated their lexeme but since the same character starts		// the same class again, only reenter if non empty segment.		bool nonEmptySegment = i >= static_cast<int>(styler.GetStartSegment());		if (state == SCE_HB_DEFAULT) {    // One of the above succeeded			if ((ch == '\"') && (nonEmptySegment)) {				state = SCE_HB_STRING;			} else if (ch == '\'') {				state = SCE_HB_COMMENTLINE;			} else if (iswordstart(ch)) {				state = SCE_HB_WORD;			} else if (isoperator(ch)) {				styler.ColourTo(i, SCE_HB_DEFAULT);			}		} else if (state == SCE_HBA_DEFAULT) {    // One of the above succeeded			if ((ch == '\"') && (nonEmptySegment)) {				state = SCE_HBA_STRING;			} else if (ch == '\'') {				state = SCE_HBA_COMMENTLINE;			} else if (iswordstart(ch)) {				state = SCE_HBA_WORD;			} else if (isoperator(ch)) {				styler.ColourTo(i, SCE_HBA_DEFAULT);			}		} else if (state == SCE_HJ_DEFAULT) {    // One of the above succeeded			if (ch == '/' && chNext == '*') {				if (styler.SafeGetCharAt(i + 2) == '*')					state = SCE_HJ_COMMENTDOC;				else					state = SCE_HJ_COMMENT;			} else if (ch == '/' && chNext == '/') {				state = SCE_HJ_COMMENTLINE;			} else if ((ch == '\"') && (nonEmptySegment)) {				state = SCE_HJ_DOUBLESTRING;			} else if ((ch == '\'') && (nonEmptySegment)) {				state = SCE_HJ_SINGLESTRING;			} else if (iswordstart(ch)) {				state = SCE_HJ_WORD;			} else if (isoperator(ch)) {				styler.ColourTo(i, statePrintForState(SCE_HJ_SYMBOLS, inScriptType));			}		}	}	StateToPrint = statePrintForState(state, inScriptType);		styler.ColourTo(lengthDoc - 1, StateToPrint);	// Fill in the real level of the next line, keeping the current flags as they will be filled in later	if (fold) {		int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;		styler.SetLevel(lineCurrent, levelPrev | flagsNext);	}}static bool isASPScript(int state) {	return		(state >= SCE_HJA_START && state <= SCE_HJA_REGEX) ||		(state >= SCE_HBA_START && state <= SCE_HBA_STRINGEOL) ||		(state >= SCE_HPA_DEFAULT && state <= SCE_HPA_IDENTIFIER);}static void ColouriseHBAPiece(StyleContext &sc, WordList *keywordlists[]) {	WordList &keywordsVBS = *keywordlists[2];	if (sc.state == SCE_HBA_WORD) {		if (!IsAWordChar(sc.ch)) {			char s[100];			sc.GetCurrentLowered(s, sizeof(s));			if (keywordsVBS.InList(s)) {				if (strcmp(s, "rem") == 0) {					sc.ChangeState(SCE_HBA_COMMENTLINE);					if (sc.atLineEnd) {						sc.SetState(SCE_HBA_DEFAULT);					}				} else {					sc.SetState(SCE_HBA_DEFAULT);				}			} else {				sc.ChangeState(SCE_HBA_IDENTIFIER);				sc.SetState(SCE_HBA_DEFAULT);			}		}	} else if (sc.state == SCE_HBA_NUMBER) {		if (!IsAWordChar(sc.ch)) {			sc.SetState(SCE_HBA_DEFAULT);		}	} else if (sc.state == SCE_HBA_STRING) {		if (sc.ch == '\"') {			sc.ForwardSetState(SCE_HBA_DEFAULT);		} else if (sc.ch == '\r' || sc.ch == '\n') {			sc.ChangeState(SCE_HBA_STRINGEOL);			sc.ForwardSetState(SCE_HBA_DEFAULT);		}	} else if (sc.state == SCE_HBA_COMMENTLINE) {		if (sc.ch == '\r' || sc.ch == '\n') {			sc.SetState(SCE_HBA_DEFAULT);		}	}	if (sc.state == SCE_HBA_DEFAULT) {		if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {			sc.SetState(SCE_HBA_NUMBER);		} else if (IsAWordStart(sc.ch)) {			sc.SetState(SCE_HBA_WORD);		} else if (sc.ch == '\'') {			sc.SetState(SCE_HBA_COMMENTLINE);		} else if (sc.ch == '\"') {			sc.SetState(SCE_HBA_STRING);		}	}}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.ch != '.' && sc.ch != '-' && sc.ch != '_' && sc.ch != ':') { // valid in XML			sc.ChangeState(SCE_H_TAGUNKNOWN);			sc.SetState(SCE_H_DEFAULT);		}	} else if (sc.state == SCE_H_TAGUNKNOWN) {		if (!ishtmlwordchar(static_cast<char>(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(static_cast<char>(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.chPrev == '=') {			sc.SetState(SCE_H_VALUE);		}	} 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("<!--"))				sc.SetState(SCE_H_COMMENT);			else				sc.SetState(SCE_H_TAGUNKNOWN);		} else if (sc.ch == '&') {			sc.SetState(SCE_H_ENTITY);		}	} else if ((sc.state == SCE_H_OTHER) || (sc.state == SCE_H_VALUE)) {		if (sc.ch == '\"' && sc.chPrev == '=') {			sc.SetState(SCE_H_DOUBLESTRING);		} else if (sc.ch == '\'' && sc.chPrev == '=') {			sc.SetState(SCE_H_SINGLESTRING);		} else if (IsADigit(sc.ch)) {			sc.SetState(SCE_H_NUMBER);		} else if (sc.ch == '>') {			sc.SetState(SCE_H_TAG);			sc.ForwardSetState(SCE_H_DEFAULT);		} else if (ishtmlwordchar(static_cast<char>(sc.ch))) {			sc.SetState(SCE_H_ATTRIBUTE);		}	}}static void ColouriseASPPiece(StyleContext &sc, WordList *keywordlists[]) {	// Possibly exit current state to either SCE_H_DEFAULT or SCE_HBA_DEFAULT	if ((sc.state == SCE_H_ASPAT || isASPScript(sc.state)) && sc.Match('%', '>')) {		sc.SetState(SCE_H_ASP);		sc.Forward();		sc.ForwardSetState(SCE_H_DEFAULT);	}	// Handle some ASP script	if (sc.state >= SCE_HBA_START && sc.state <= SCE_HBA_STRINGEOL) {		ColouriseHBAPiece(sc, keywordlists);	} else if (sc.state >= SCE_H_DEFAULT && sc.state <= SCE_H_SGML_BLOCK_DEFAULT) {		ColouriseHTMLPiece(sc, keywordlists);	}	// Enter new sc.state	if ((sc.state == SCE_H_DEFAULT) || (sc.state == SCE_H_TAGUNKNOWN)) {		if (sc.Match('<', '%')) {			if (sc.state == SCE_H_TAGUNKNOWN)				sc.ChangeState(SCE_H_ASP);			else				sc.SetState(SCE_H_ASP);			sc.Forward();			sc.Forward();			if (sc.ch == '@') {				sc.ForwardSetState(SCE_H_ASPAT);			} else {				if (sc.ch == '=') {					sc.Forward();				}				sc.SetState(SCE_HBA_DEFAULT);			}		}	}}static void ColouriseASPDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],                                  Accessor &styler) {	// Lexer for HTML requires more lexical states (7 bits worth) than most lexers	StyleContext sc(startPos, length, initStyle, styler, 0x7f);	for (; sc.More(); sc.Forward()) {		ColouriseASPPiece(sc, keywordlists);	}	sc.Complete();}static void ColourisePHPPiece(StyleContext &sc, WordList *keywordlists[]) {	// Possibly exit current state to either SCE_H_DEFAULT or SCE_HBA_DEFAULT	if (sc.state >= SCE_HPHP_DEFAULT && sc.state <= SCE_HPHP_OPERATOR) {		if (!isPHPStringState(sc.state) &&			(sc.state != SCE_HPHP_COMMENT) &&			(sc.Match('?', '>'))) {			sc.SetState(SCE_H_QUESTION);			sc.Forward();			sc.ForwardSetState(SCE_H_DEFAULT);		}	}	if (sc.state >= SCE_H_DEFAULT && sc.state <= SCE_H_SGML_BLOCK_DEFAULT) {		ColouriseHTMLPiece(sc, keywordlists);	}	// Handle some PHP script	if (sc.state == SCE_HPHP_WORD) {		if (!IsPhpWordChar(static_cast<char>(sc.ch))) {			sc.SetState(SCE_HPHP_DEFAULT);		}	} else if (sc.state == SCE_HPHP_COMMENTLINE) {		if (sc.ch == '\r' || sc.ch == '\n') {			sc.SetState(SCE_HPHP_DEFAULT);		}	} else if (sc.state == SCE_HPHP_COMMENT) {		if (sc.Match('*', '/')) {			sc.Forward();			sc.Forward();			sc.SetState(SCE_HPHP_DEFAULT);		}	} else if (sc.state == SCE_HPHP_HSTRING) {		if (sc.ch == '\"') {			sc.ForwardSetState(SCE_HPHP_DEFAULT);		}	} else if (sc.state == SCE_HPHP_SIMPLESTRING) {		if (sc.ch == '\'') {			sc.ForwardSetState(SCE_HPHP_DEFAULT);		}	} else if (sc.state == SCE_HPHP_VARIABLE) {		if (!IsPhpWordChar(static_cast<char>(sc.ch))) {			sc.SetState(SCE_HPHP_DEFAULT);		}	} else if (sc.state == SCE_HPHP_OPERATOR) {		sc.SetState(SCE_HPHP_DEFAULT);	}	// Enter new sc.state	if ((sc.state == SCE_H_DEFAULT) || (sc.state == SCE_H_TAGUNKNOWN)) {		if (sc.Match("<?php")) {			sc.SetState(SCE_H_QUESTION);			sc.Forward();			sc.Forward();			sc.Forward();			sc.Forward();			sc.Forward();			sc.SetState(SCE_HPHP_DEFAULT);		}	}	if (sc.state == SCE_HPHP_DEFAULT) {		if (IsPhpWordStart(static_cast<char>(sc.ch))) {			sc.SetState(SCE_HPHP_WORD);		} else if (sc.ch == '#') {			sc.SetState(SCE_HPHP_COMMENTLINE);		} else if (sc.Match("<!--")) {			sc.SetState(SCE_HPHP_COMMENTLINE);		} else if (sc.Match('/', '/')) {			sc.SetState(SCE_HPHP_COMMENTLINE);		} else if (sc.Match('/', '*')) {			sc.SetState(SCE_HPHP_COMMENT);		} else if (sc.ch == '\"') {			sc.SetState(SCE_HPHP_HSTRING);		} else if (sc.ch == '\'') {			sc.SetState(SCE_HPHP_SIMPLESTRING);		} else if (sc.ch == '$' && IsPhpWordStart(static_cast<char>(sc.chNext))) {			sc.SetState(SCE_HPHP_VARIABLE);		} else if (isoperator(static_cast<char>(sc.ch))) {			sc.SetState(SCE_HPHP_OPERATOR);		}	}}static void ColourisePHPDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],                                  Accessor &styler) {	// Lexer for HTML requires more lexical states (7 bits worth) than most lexers	StyleContext sc(startPos, length, initStyle, styler, 0x7f);	for (; sc.More(); sc.Forward()) {		ColourisePHPPiece(sc, keywordlists);	}	sc.Complete();}static void ColourisePHPScriptDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],                                               Accessor &styler) {	if(startPos == 0) initStyle = SCE_HPHP_DEFAULT;		ColouriseHyperTextDoc(startPos,length,initStyle,keywordlists,styler);}static const char * const htmlWordListDesc[] = {	"HTML elements and attributes",	"JavaScript keywords",	"VBScript keywords",	"Python keywords",	"PHP keywords",	"SGML and DTD keywords",	0,};static const char * const phpscriptWordListDesc[] = {	"", //Unused	"", //Unused	"", //Unused	"", //Unused	"PHP keywords",	"", //Unused	0,};LexerModule lmHTML(SCLEX_HTML, ColouriseHyperTextDoc, "hypertext", 0, htmlWordListDesc, 7);LexerModule lmXML(SCLEX_XML, ColouriseHyperTextDoc, "xml", 0, htmlWordListDesc, 7);// SCLEX_ASP and SCLEX_PHP should not be used in new code: use SCLEX_HTML instead.LexerModule lmASP(SCLEX_ASP, ColouriseASPDoc, "asp", 0, htmlWordListDesc, 7);LexerModule lmPHP(SCLEX_PHP, ColourisePHPDoc, "php", 0, htmlWordListDesc, 7);LexerModule lmPHPSCRIPT(SCLEX_PHPSCRIPT, ColourisePHPScriptDoc, "phpscript", 0, phpscriptWordListDesc, 7);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -