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

📄 lexothers.cxx

📁 wxGTK 是 wxWidgets 的 linux GTK+ (>2.2.3)版本。wxWidgets 是一个跨平台的 GUI 框架
💻 CXX
📖 第 1 页 / 共 3 页
字号:
				// Colorize Local Variable				styler.ColourTo(startLine + offset - 1 - (wbl - 3), SCE_BAT_IDENTIFIER);				// Reset Offset to re-process remainder of word				offset -= (wbl - 3);			}		// Check for Operator		} else if (IsBOperator(wordBuffer[0])) {			// Colorize Default Text			styler.ColourTo(startLine + offset - 1 - wbl, SCE_BAT_DEFAULT);			// Check for Comparison Operator			if ((wordBuffer[0] == '=') && (wordBuffer[1] == '=')) {				// Identify External Command / Program Location for IF				cmdLoc = offset;				// Skip next spaces				while ((cmdLoc < lengthLine) &&					(isspacechar(lineBuffer[cmdLoc]))) {					cmdLoc++;				}				// Colorize Comparison Operator				styler.ColourTo(startLine + offset - 1 - (wbl - 2), SCE_BAT_OPERATOR);				// Reset Offset to re-process remainder of word				offset -= (wbl - 2);			// Check for Pipe Operator			} else if (wordBuffer[0] == '|') {				// Reset External Command / Program Location				cmdLoc = offset - wbl + 1;				// Skip next spaces				while ((cmdLoc < lengthLine) &&					(isspacechar(lineBuffer[cmdLoc]))) {					cmdLoc++;				}				// Colorize Pipe Operator				styler.ColourTo(startLine + offset - 1 - (wbl - 1), SCE_BAT_OPERATOR);				// Reset Offset to re-process remainder of word				offset -= (wbl - 1);			// Check for Other Operator			} else {				// Check for > Operator				if (wordBuffer[0] == '>') {					// Turn Keyword and External Command / Program checking back on					continueProcessing = true;				}				// Colorize Other Operator				styler.ColourTo(startLine + offset - 1 - (wbl - 1), SCE_BAT_OPERATOR);				// Reset Offset to re-process remainder of word				offset -= (wbl - 1);			}		// Check for Default Text		} else {			// Read up to %, Operator or Separator			while ((wbo < wbl) &&				(wordBuffer[wbo] != '%') &&				(!IsBOperator(wordBuffer[wbo])) &&				(!IsBSeparator(wordBuffer[wbo]))) {				wbo++;			}			// Colorize Default Text			styler.ColourTo(startLine + offset - 1 - (wbl - wbo), SCE_BAT_DEFAULT);			// Reset Offset to re-process remainder of word			offset -= (wbl - wbo);		}		// Skip next spaces - nothing happens if Offset was Reset		while ((offset < lengthLine) && (isspacechar(lineBuffer[offset]))) {			offset++;		}	}	// Colorize Default Text for remainder of line - currently not lexed	styler.ColourTo(endPos, SCE_BAT_DEFAULT);}static void ColouriseBatchDoc(    unsigned int startPos,    int length,    int /*initStyle*/,    WordList *keywordlists[],    Accessor &styler) {	char lineBuffer[1024];	styler.StartAt(startPos);	styler.StartSegment(startPos);	unsigned int linePos = 0;	unsigned int startLine = startPos;	for (unsigned int i = startPos; i < startPos + length; i++) {		lineBuffer[linePos++] = styler[i];		if (AtEOL(styler, i) || (linePos >= sizeof(lineBuffer) - 1)) {			// End of line (or of line buffer) met, colourise it			lineBuffer[linePos] = '\0';			ColouriseBatchLine(lineBuffer, linePos, startLine, i, keywordlists, styler);			linePos = 0;			startLine = i + 1;		}	}	if (linePos > 0) {	// Last line does not have ending characters		ColouriseBatchLine(lineBuffer, linePos, startLine, startPos + length - 1,		                   keywordlists, styler);	}}static void ColouriseDiffLine(char *lineBuffer, int endLine, Accessor &styler) {	// It is needed to remember the current state to recognize starting	// comment lines before the first "diff " or "--- ". If a real	// difference starts then each line starting with ' ' is a whitespace	// otherwise it is considered a comment (Only in..., Binary file...)	if (0 == strncmp(lineBuffer, "diff ", 5)) {		styler.ColourTo(endLine, SCE_DIFF_COMMAND);	} else if (0 == strncmp(lineBuffer, "--- ", 4)) {		// In a context diff, --- appears in both the header and the position markers		if (atoi(lineBuffer+4) && !strchr(lineBuffer, '/'))			styler.ColourTo(endLine, SCE_DIFF_POSITION);		else			styler.ColourTo(endLine, SCE_DIFF_HEADER);	} else if (0 == strncmp(lineBuffer, "+++ ", 4)) {		// I don't know of any diff where "+++ " is a position marker, but for		// consistency, do the same as with "--- " and "*** ".		if (atoi(lineBuffer+4) && !strchr(lineBuffer, '/'))			styler.ColourTo(endLine, SCE_DIFF_POSITION);		else			styler.ColourTo(endLine, SCE_DIFF_HEADER);	} else if (0 == strncmp(lineBuffer, "====", 4)) {  // For p4's diff		styler.ColourTo(endLine, SCE_DIFF_HEADER);	} else if (0 == strncmp(lineBuffer, "***", 3)) {		// In a context diff, *** appears in both the header and the position markers.		// Also ******** is a chunk header, but here it's treated as part of the		// position marker since there is no separate style for a chunk header.		if (lineBuffer[3] == ' ' && atoi(lineBuffer+4) && !strchr(lineBuffer, '/'))			styler.ColourTo(endLine, SCE_DIFF_POSITION);		else if (lineBuffer[3] == '*')			styler.ColourTo(endLine, SCE_DIFF_POSITION);		else			styler.ColourTo(endLine, SCE_DIFF_HEADER);	} else if (0 == strncmp(lineBuffer, "? ", 2)) {    // For difflib		styler.ColourTo(endLine, SCE_DIFF_HEADER);	} else if (lineBuffer[0] == '@') {		styler.ColourTo(endLine, SCE_DIFF_POSITION);	} else if (lineBuffer[0] >= '0' && lineBuffer[0] <= '9') {		styler.ColourTo(endLine, SCE_DIFF_POSITION);	} else if (lineBuffer[0] == '-' || lineBuffer[0] == '<') {		styler.ColourTo(endLine, SCE_DIFF_DELETED);	} else if (lineBuffer[0] == '+' || lineBuffer[0] == '>') {		styler.ColourTo(endLine, SCE_DIFF_ADDED);	} else if (lineBuffer[0] != ' ') {		styler.ColourTo(endLine, SCE_DIFF_COMMENT);	} else {		styler.ColourTo(endLine, SCE_DIFF_DEFAULT);	}}static void ColouriseDiffDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {	char lineBuffer[1024];	styler.StartAt(startPos);	styler.StartSegment(startPos);	unsigned int linePos = 0;	for (unsigned int i = startPos; i < startPos + length; i++) {		lineBuffer[linePos++] = styler[i];		if (AtEOL(styler, i) || (linePos >= sizeof(lineBuffer) - 1)) {			// End of line (or of line buffer) met, colourise it			lineBuffer[linePos] = '\0';			ColouriseDiffLine(lineBuffer, i, styler);			linePos = 0;		}	}	if (linePos > 0) {	// Last line does not have ending characters		ColouriseDiffLine(lineBuffer, startPos + length - 1, styler);	}}static void FoldDiffDoc(unsigned int startPos, int length, int, WordList*[], Accessor &styler) {	int curLine = styler.GetLine(startPos);	int prevLevel = SC_FOLDLEVELBASE;	if (curLine > 0)		prevLevel = styler.LevelAt(curLine-1);	int curLineStart = styler.LineStart(curLine);	do {		int nextLevel = prevLevel;		if (prevLevel & SC_FOLDLEVELHEADERFLAG)			nextLevel = (prevLevel & SC_FOLDLEVELNUMBERMASK) + 1;		int lineType = styler.StyleAt(curLineStart);		if (lineType == SCE_DIFF_COMMAND)			nextLevel = (SC_FOLDLEVELBASE + 1) | SC_FOLDLEVELHEADERFLAG;		else if (lineType == SCE_DIFF_HEADER) {			nextLevel = (SC_FOLDLEVELBASE + 2) | SC_FOLDLEVELHEADERFLAG;		} else if (lineType == SCE_DIFF_POSITION)			nextLevel = (SC_FOLDLEVELBASE + 3) | SC_FOLDLEVELHEADERFLAG;		if ((nextLevel & SC_FOLDLEVELHEADERFLAG) && (nextLevel == prevLevel))			styler.SetLevel(curLine-1, prevLevel & ~SC_FOLDLEVELHEADERFLAG);		styler.SetLevel(curLine, nextLevel);		prevLevel = nextLevel;		curLineStart = styler.LineStart(++curLine);	} while (static_cast<int>(startPos) + length > curLineStart);}static void ColourisePropsLine(    char *lineBuffer,    unsigned int lengthLine,    unsigned int startLine,    unsigned int endPos,    Accessor &styler) {	unsigned int i = 0;	while ((i < lengthLine) && isspacechar(lineBuffer[i]))	// Skip initial spaces		i++;	if (i < lengthLine) {		if (lineBuffer[i] == '#' || lineBuffer[i] == '!' || lineBuffer[i] == ';') {			styler.ColourTo(endPos, SCE_PROPS_COMMENT);		} else if (lineBuffer[i] == '[') {			styler.ColourTo(endPos, SCE_PROPS_SECTION);		} else if (lineBuffer[i] == '@') {			styler.ColourTo(startLine + i, SCE_PROPS_DEFVAL);			if (lineBuffer[++i] == '=')				styler.ColourTo(startLine + i, SCE_PROPS_ASSIGNMENT);			styler.ColourTo(endPos, SCE_PROPS_DEFAULT);		} else {			// Search for the '=' character			while ((i < lengthLine) && (lineBuffer[i] != '='))				i++;			if ((i < lengthLine) && (lineBuffer[i] == '=')) {				styler.ColourTo(startLine + i - 1, SCE_PROPS_KEY);				styler.ColourTo(startLine + i, SCE_PROPS_ASSIGNMENT);				styler.ColourTo(endPos, SCE_PROPS_DEFAULT);			} else {				styler.ColourTo(endPos, SCE_PROPS_DEFAULT);			}		}	} else {		styler.ColourTo(endPos, SCE_PROPS_DEFAULT);	}}static void ColourisePropsDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {	char lineBuffer[1024];	styler.StartAt(startPos);	styler.StartSegment(startPos);	unsigned int linePos = 0;	unsigned int startLine = startPos;	for (unsigned int i = startPos; i < startPos + length; i++) {		lineBuffer[linePos++] = styler[i];		if (AtEOL(styler, i) || (linePos >= sizeof(lineBuffer) - 1)) {			// End of line (or of line buffer) met, colourise it			lineBuffer[linePos] = '\0';			ColourisePropsLine(lineBuffer, linePos, startLine, i, styler);			linePos = 0;			startLine = i + 1;		}	}	if (linePos > 0) {	// Last line does not have ending characters		ColourisePropsLine(lineBuffer, linePos, startLine, startPos + length - 1, styler);	}}// adaption by ksc, using the "} else {" trick of 1.53// 030721static void FoldPropsDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {	bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;	unsigned int endPos = startPos + length;	int visibleChars = 0;	int lineCurrent = styler.GetLine(startPos);	char chNext = styler[startPos];	int styleNext = styler.StyleAt(startPos);	bool headerPoint = false;	int lev;	for (unsigned int i = startPos; i < endPos; i++) {		char ch = chNext;		chNext = styler[i+1];		int style = styleNext;		styleNext = styler.StyleAt(i + 1);		bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');		if (style == SCE_PROPS_SECTION) {			headerPoint = true;		}		if (atEOL) {			lev = SC_FOLDLEVELBASE;			if (lineCurrent > 0) {				int levelPrevious = styler.LevelAt(lineCurrent - 1);				if (levelPrevious & SC_FOLDLEVELHEADERFLAG) {					lev = SC_FOLDLEVELBASE + 1;				} else {					lev = levelPrevious & SC_FOLDLEVELNUMBERMASK;				}			}			if (headerPoint) {				lev = SC_FOLDLEVELBASE;			}			if (visibleChars == 0 && foldCompact)				lev |= SC_FOLDLEVELWHITEFLAG;			if (headerPoint) {				lev |= SC_FOLDLEVELHEADERFLAG;			}			if (lev != styler.LevelAt(lineCurrent)) {				styler.SetLevel(lineCurrent, lev);			}			lineCurrent++;			visibleChars = 0;			headerPoint = false;		}		if (!isspacechar(ch))			visibleChars++;	}	if (lineCurrent > 0) {		int levelPrevious = styler.LevelAt(lineCurrent - 1);		if (levelPrevious & SC_FOLDLEVELHEADERFLAG) {			lev = SC_FOLDLEVELBASE + 1;		} else {			lev = levelPrevious & SC_FOLDLEVELNUMBERMASK;		}	} else {		lev = SC_FOLDLEVELBASE;	}	int flagsNext = styler.LevelAt(lineCurrent);	styler.SetLevel(lineCurrent, lev | flagsNext & ~SC_FOLDLEVELNUMBERMASK);}static void ColouriseMakeLine(    char *lineBuffer,    unsigned int lengthLine,    unsigned int startLine,    unsigned int endPos,    Accessor &styler) {	unsigned int i = 0;	int lastNonSpace = -1;	unsigned int state = SCE_MAKE_DEFAULT;	bool bSpecial = false;	// Skip initial spaces	while ((i < lengthLine) && isspacechar(lineBuffer[i])) {		i++;	}	if (lineBuffer[i] == '#') {	// Comment		styler.ColourTo(endPos, SCE_MAKE_COMMENT);		return;	}	if (lineBuffer[i] == '!') {	// Special directive		styler.ColourTo(endPos, SCE_MAKE_PREPROCESSOR);		return;	}	while (i < lengthLine) {		if (lineBuffer[i] == '$' && lineBuffer[i + 1] == '(') {			styler.ColourTo(startLine + i - 1, state);			state = SCE_MAKE_IDENTIFIER;		} else if (state == SCE_MAKE_IDENTIFIER && lineBuffer[i] == ')') {			styler.ColourTo(startLine + i, state);			state = SCE_MAKE_DEFAULT;		}		if (!bSpecial) {			if (lineBuffer[i] == ':') {				// We should check that no colouring was made since the beginning of the line,				// to avoid colouring stuff like /OUT:file				if (lastNonSpace >= 0)					styler.ColourTo(startLine + lastNonSpace, SCE_MAKE_TARGET);				styler.ColourTo(startLine + i - 1, SCE_MAKE_DEFAULT);				styler.ColourTo(startLine + i, SCE_MAKE_OPERATOR);				bSpecial = true;	// Only react to the first ':' of the line				state = SCE_MAKE_DEFAULT;			} else if (lineBuffer[i] == '=') {				if (lastNonSpace >= 0)					styler.ColourTo(startLine + lastNonSpace, SCE_MAKE_IDENTIFIER);				styler.ColourTo(startLine + i - 1, SCE_MAKE_DEFAULT);				styler.ColourTo(startLine + i, SCE_MAKE_OPERATOR);				bSpecial = true;	// Only react to the first '=' of the line				state = SCE_MAKE_DEFAULT;			}		}		if (!isspacechar(lineBuffer[i])) {

⌨️ 快捷键说明

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