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

📄 lexclw.cxx

📁 robocup rcssserver 运行防真机器人足球比赛所用的服务器端
💻 CXX
📖 第 1 页 / 共 2 页
字号:
			}		}		// String State Handling		else if (scDoc.state == SCE_CLW_STRING) {			// If the character is an ' (single quote)			if (scDoc.ch == '\'') {				// Set the state to default and move forward colouring				// the ' (single quote) as default state				// terminating the string state				scDoc.SetState(SCE_CLW_DEFAULT);				scDoc.Forward();			}			// If the next character is an ' (single quote)			if (scDoc.chNext == '\'') {				// Move forward one character and set to default state				// colouring the next ' (single quote) as default state				// terminating the string state				scDoc.ForwardSetState(SCE_CLW_DEFAULT);				scDoc.Forward();			}		}		// Picture String State Handling		else if (scDoc.state == SCE_CLW_PICTURE_STRING) {			// If the character is an ( (open parenthese)			if (scDoc.ch == '(') {				// Increment the parenthese level				iParenthesesLevel++;			}			// Else if the character is a ) (close parenthese) 			else if (scDoc.ch == ')') {				// If the parenthese level is set to zero				// parentheses matched				if (!iParenthesesLevel) {					scDoc.SetState(SCE_CLW_DEFAULT);				} 				// Else parenthese level is greater than zero				// still looking for matching parentheses				else {					// Decrement the parenthese level					iParenthesesLevel--;				}			}		}		// Standard Equate State Handling		else if (scDoc.state == SCE_CLW_STANDARD_EQUATE) {			if (!isalnum(scDoc.ch)) {				scDoc.SetState(SCE_CLW_DEFAULT);			}		}		// Integer Constant State Handling		else if (scDoc.state == SCE_CLW_INTEGER_CONSTANT) {			// If the character is not a digit (0-9)			// or character is not a hexidecimal character (A-F)			// or character is not a . (point)			// or character is not a numberic base character (B,O,H)			if (!(isdigit(scDoc.ch)			|| IsAHexCharacter(scDoc.ch, bCaseSensitive)			|| scDoc.ch == '.'			|| IsANumericBaseCharacter(scDoc.ch, bCaseSensitive))) {				// If the number was a real 				if (SetNumericConstantState(scDoc)) {					// Colour the matched string to the real constant state					scDoc.ChangeState(SCE_CLW_REAL_CONSTANT);				}				// Else the number was an integer				else {					// Colour the matched string to an integer constant state					scDoc.ChangeState(SCE_CLW_INTEGER_CONSTANT);				}				// Terminate the integer constant state and set to default state				scDoc.SetState(SCE_CLW_DEFAULT);			}		}		//		// Determine if a new state should be entered.		//		// Beginning of Line Handling		if (scDoc.atLineStart) {			// Reset the column 1 label flag			iColumn1Label = false;			// If column 1 character is a label start character			if (IsALabelStart(scDoc.ch)) {				// Label character is found in column 1				// so set column 1 label flag and clear last column 1 label				iColumn1Label = true;				// Set the state to label				scDoc.SetState(SCE_CLW_LABEL);			}			// else if character is a space or tab			else if (IsASpace(scDoc.ch)){				// Set to default state				scDoc.SetState(SCE_CLW_DEFAULT);			}			// else if comment start (!) or is an * (asterisk)			else if (IsACommentStart(scDoc.ch) || scDoc.ch == '*' ) {				// then set the state to comment.				scDoc.SetState(SCE_CLW_COMMENT);			}			// else the character is a ? (question mark)			else if (scDoc.ch == '?') {				// Change to the compiler directive state, move forward,				// colouring the ? (question mark), change back to default state.				scDoc.ChangeState(SCE_CLW_COMPILER_DIRECTIVE);				scDoc.Forward();				scDoc.SetState(SCE_CLW_DEFAULT);			}			// else an invalid character in column 1			else {				// Set to error state				scDoc.SetState(SCE_CLW_ERROR);			}		}		// End of Line Handling		else if (scDoc.atLineEnd) {			// Reset to the default state at the end of each line.			scDoc.SetState(SCE_CLW_DEFAULT);		}		// Default Handling		else {			// If in default state 			if (scDoc.state == SCE_CLW_DEFAULT) {				// If is a letter could be a possible statement				if (isalpha(scDoc.ch)) {					// Set the state to Clarion Keyword and verify later					scDoc.SetState(SCE_CLW_KEYWORD);				}				// else is a number				else if (isdigit(scDoc.ch)) {					// Set the state to Integer Constant and verify later					scDoc.SetState(SCE_CLW_INTEGER_CONSTANT);				}				// else if the start of a comment or a | (line continuation)				else if (IsACommentStart(scDoc.ch) || scDoc.ch == '|') {					// then set the state to comment.					scDoc.SetState(SCE_CLW_COMMENT);				}						// else if the character is a ' (single quote)				else if (scDoc.ch == '\'') {					// If the character is also a ' (single quote) 					// Embedded Apostrophe					if (scDoc.chNext == '\'') {						// Move forward colouring it as default state						scDoc.ForwardSetState(SCE_CLW_DEFAULT);					}					else {						// move to the next character and then set the state to comment.						scDoc.ForwardSetState(SCE_CLW_STRING);					}				}						// else the character is an @ (ampersand)				else if (scDoc.ch == '@') {					// Case insensitive.					if (!bCaseSensitive) {						// If character is a valid picture token character						if (strchr("DEKNPSTdeknpst", scDoc.chNext) != NULL) {							// Set to the picture string state							scDoc.SetState(SCE_CLW_PICTURE_STRING);						}					}					// Case sensitive					else {						// If character is a valid picture token character						if (strchr("DEKNPST", scDoc.chNext) != NULL) {							// Set the picture string state							scDoc.SetState(SCE_CLW_PICTURE_STRING);						}					}				}					}		}	}	// lexing complete	scDoc.Complete();}// Clarion Language Case Sensitive Colouring Procedurestatic void ColouriseClarionDocSensitive(unsigned int uiStartPos, int iLength, int iInitStyle, WordList *wlKeywords[], Accessor &accStyler) {	ColouriseClarionDoc(uiStartPos, iLength, iInitStyle, wlKeywords, accStyler, true);}// Clarion Language Case Insensitive Colouring Procedurestatic void ColouriseClarionDocInsensitive(unsigned int uiStartPos, int iLength, int iInitStyle, WordList *wlKeywords[], Accessor &accStyler) {	ColouriseClarionDoc(uiStartPos, iLength, iInitStyle, wlKeywords, accStyler, false);}// Fill Bufferstatic void FillBuffer(unsigned int uiStart, unsigned int uiEnd, Accessor &accStyler, char *szBuffer, unsigned int uiLength) {	unsigned int uiPos = 0;	while ((uiPos < uiEnd - uiStart + 1) && (uiPos < uiLength-1)) {		szBuffer[uiPos] = static_cast<char>(toupper(accStyler[uiStart + uiPos]));		uiPos++;	}	szBuffer[uiPos] = '\0';}// Classify Clarion Fold Pointstatic int ClassifyClarionFoldPoint(int iLevel, const char* szString) {	if (!(isdigit(szString[0]) || (szString[0] == '.'))) {		if (strcmp(szString, "PROCEDURE") == 0) {	//		iLevel = SC_FOLDLEVELBASE + 1;		}		else if (strcmp(szString, "MAP") == 0 ||			strcmp(szString,"ACCEPT") == 0 ||			strcmp(szString,"BEGIN") == 0 ||			strcmp(szString,"CASE") == 0 ||			strcmp(szString,"EXECUTE") == 0 ||			strcmp(szString,"IF") == 0 ||			strcmp(szString,"ITEMIZE") == 0 ||			strcmp(szString,"INTERFACE") == 0 ||			strcmp(szString,"JOIN") == 0 ||			strcmp(szString,"LOOP") == 0 ||			strcmp(szString,"MODULE") == 0 ||			strcmp(szString,"RECORD") == 0) {			iLevel++;		}		else if (strcmp(szString, "APPLICATION") == 0 ||			strcmp(szString, "CLASS") == 0 ||			strcmp(szString, "DETAIL") == 0 ||			strcmp(szString, "FILE") == 0 ||			strcmp(szString, "FOOTER") == 0 ||			strcmp(szString, "FORM") == 0 ||			strcmp(szString, "GROUP") == 0 ||			strcmp(szString, "HEADER") == 0 ||			strcmp(szString, "INTERFACE") == 0 ||			strcmp(szString, "MENU") == 0 ||			strcmp(szString, "MENUBAR") == 0 ||			strcmp(szString, "OLE") == 0 ||			strcmp(szString, "OPTION") == 0 ||			strcmp(szString, "QUEUE") == 0 ||			strcmp(szString, "REPORT") == 0 ||			strcmp(szString, "SHEET") == 0 ||			strcmp(szString, "TAB") == 0 ||			strcmp(szString, "TOOLBAR") == 0 ||			strcmp(szString, "VIEW") == 0 ||			strcmp(szString, "WINDOW") == 0) {			iLevel++;		}		else if (strcmp(szString, "END") == 0 ||			strcmp(szString, "UNTIL") == 0 ||			strcmp(szString, "WHILE") == 0) {			iLevel--;		}	}	return(iLevel);}// Clarion Language Folding Procedurestatic void FoldClarionDoc(unsigned int uiStartPos, int iLength, int iInitStyle, WordList *[], Accessor &accStyler) {	unsigned int uiEndPos = uiStartPos + iLength;	int iLineCurrent = accStyler.GetLine(uiStartPos);	int iLevelPrev = accStyler.LevelAt(iLineCurrent) & SC_FOLDLEVELNUMBERMASK;	int iLevelCurrent = iLevelPrev;	char chNext = accStyler[uiStartPos];	int iStyle = iInitStyle;	int iStyleNext = accStyler.StyleAt(uiStartPos);	int iVisibleChars = 0;	int iLastStart = 0;	for (unsigned int uiPos = uiStartPos; uiPos < uiEndPos; uiPos++) {		char chChar = chNext;		chNext = accStyler.SafeGetCharAt(uiPos + 1);		int iStylePrev = iStyle;		iStyle = iStyleNext;		iStyleNext = accStyler.StyleAt(uiPos + 1);		bool bEOL = (chChar == '\r' && chNext != '\n') || (chChar == '\n');			if (iStylePrev == SCE_CLW_DEFAULT) {			if (iStyle == SCE_CLW_KEYWORD || iStyle == SCE_CLW_STRUCTURE_DATA_TYPE) {				// Store last word start point.				iLastStart = uiPos;			}		}		if (iStylePrev == SCE_CLW_KEYWORD || iStylePrev == SCE_CLW_STRUCTURE_DATA_TYPE) {			if(iswordchar(chChar) && !iswordchar(chNext)) {				char chBuffer[100];				FillBuffer(iLastStart, uiPos, accStyler, chBuffer, sizeof(chBuffer));				iLevelCurrent = ClassifyClarionFoldPoint(iLevelCurrent,chBuffer);			//	if ((iLevelCurrent == SC_FOLDLEVELBASE + 1) && iLineCurrent > 1) {			//		accStyler.SetLevel(iLineCurrent-1,SC_FOLDLEVELBASE);			//		iLevelPrev = SC_FOLDLEVELBASE;			//	}			}		}		if (bEOL) {			int iLevel = iLevelPrev;			if ((iLevelCurrent > iLevelPrev) && (iVisibleChars > 0))				iLevel |= SC_FOLDLEVELHEADERFLAG;			if (iLevel != accStyler.LevelAt(iLineCurrent)) {				accStyler.SetLevel(iLineCurrent,iLevel);			}			iLineCurrent++;			iLevelPrev = iLevelCurrent;			iVisibleChars = 0;		}				if (!isspacechar(chChar))			iVisibleChars++;	}	// Fill in the real level of the next line, keeping the current flags	// as they will be filled in later.	int iFlagsNext = accStyler.LevelAt(iLineCurrent) & ~SC_FOLDLEVELNUMBERMASK;	accStyler.SetLevel(iLineCurrent, iLevelPrev | iFlagsNext);}// Word List Descriptionsstatic const char * const rgWordListDescriptions[] = {	"Clarion Keywords",	"Compiler Directives",	"Built-in Procedures and Functions",	"Runtime Expressions",	"Structure and Data Types",	"Attributes",	"Standard Equates",	"Reserved Words (Labels)",	"Reserved Words (Procedure Labels)",	0,};// Case Sensitive Clarion Language LexerLexerModule lmClw(SCLEX_CLW, ColouriseClarionDocSensitive, "clarion", FoldClarionDoc, rgWordListDescriptions);// Case Insensitive Clarion Language LexerLexerModule lmClwNoCase(SCLEX_CLWNOCASE, ColouriseClarionDocInsensitive, "clarionnocase", FoldClarionDoc, rgWordListDescriptions);

⌨️ 快捷键说明

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