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

📄 lexau3.cxx

📁 robocup rcssserver 运行防真机器人足球比赛所用的服务器端
💻 CXX
📖 第 1 页 / 共 2 页
字号:
				if (sc.chPrev == '}' && sc.ch != '}') 				{					// set color to SENDKEY when valid sendkey .. else set back to regular string					char sk[100];					// split {111 222} and return {111} and check if 222 is valid.					// if return code = 1 then invalid 222 so must be string					if (GetSendKey(s,sk))   					{						sc.ChangeState(SCE_AU3_STRING);					}					// if single char between {?} then its ok as sendkey for a single character					else if (strlen(sk) == 3)  					{						sc.ChangeState(SCE_AU3_SENT);					}					// if sendkey {111} is in table then ok as sendkey					else if (keywords4.InList(sk)) 					{						sc.ChangeState(SCE_AU3_SENT);					}					else					{						sc.ChangeState(SCE_AU3_STRING);					}					sc.SetState(SCE_AU3_STRING);				}				else				{					// check if the start is a valid SendKey start					int		nPos	= 0;					int		nState	= 1;					char	cTemp;					while (!(nState == 2) && ((cTemp = s[nPos]) != '\0')) 					{						if (cTemp == '{' && nState == 1) 						{							nState = 2;						}						if (nState == 1 && !(cTemp == '+' || cTemp == '!' || cTemp == '^' || cTemp == '#' ))						{							nState = 0;						}						nPos++;					}					//Verify characters infront of { ... if not assume  regular string					if (nState == 1 && (!(sc.ch == '{' || sc.ch == '+' || sc.ch == '!' || sc.ch == '^' || sc.ch == '#' ))) {						sc.ChangeState(SCE_AU3_STRING);						sc.SetState(SCE_AU3_STRING);					}					// If invalid character found then assume its a regular string						if (nState == 0) {						sc.ChangeState(SCE_AU3_STRING);						sc.SetState(SCE_AU3_STRING);					}				}				// check if next portion is again a sendkey				if (sc.atLineEnd) 				{					sc.ChangeState(SCE_AU3_STRING);					sc.SetState(SCE_AU3_DEFAULT);					si = 0;  // reset string indicator				}				//* check in next characters following a sentkey are again a sent key				// Need this test incase of 2 sentkeys like {F1}{ENTER} but not detect {{}				if (sc.state == SCE_AU3_STRING && (sc.ch == '{' || sc.ch == '+' || sc.ch == '!' || sc.ch == '^' || sc.ch == '#' )) {					sc.SetState(SCE_AU3_SENT);}				// check to see if the string ended...				// Sendkey string isn't complete but the string ended....				if ((si == 1 && sc.ch == '\"') || (si == 2 && sc.ch == '\''))				{					sc.ChangeState(SCE_AU3_STRING);					sc.ForwardSetState(SCE_AU3_DEFAULT);				}				break;            }        }  //switch (sc.state)        // Determine if a new state should be entered:		if (sc.state == SCE_AU3_DEFAULT)        {            if (sc.ch == ';') {sc.SetState(SCE_AU3_COMMENT);}            else if (sc.ch == '#') {sc.SetState(SCE_AU3_KEYWORD);}            else if (sc.ch == '$') {sc.SetState(SCE_AU3_VARIABLE);}            else if (sc.ch == '.' && !IsADigit(sc.chNext)) {sc.SetState(SCE_AU3_OPERATOR);}            else if (sc.ch == '@') {sc.SetState(SCE_AU3_KEYWORD);}            //else if (sc.ch == '_') {sc.SetState(SCE_AU3_KEYWORD);}            else if (sc.ch == '<' && si==3) {sc.SetState(SCE_AU3_STRING);}  // string after #include             else if (sc.ch == '\"') {				sc.SetState(SCE_AU3_STRING);				si = 1;	}            else if (sc.ch == '\'') {				sc.SetState(SCE_AU3_STRING);				si = 2;	}            else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) 			{				sc.SetState(SCE_AU3_NUMBER);				ni = 0;			}            else if (IsAWordStart(sc.ch)) {sc.SetState(SCE_AU3_KEYWORD);}            else if (IsAOperator(static_cast<char>(sc.ch))) {sc.SetState(SCE_AU3_OPERATOR);}			else if (sc.atLineEnd) {sc.SetState(SCE_AU3_DEFAULT);}        }    }      //for (; sc.More(); sc.Forward())	//*************************************	// Colourize the last word correctly 	//*************************************	if (sc.state == SCE_AU3_KEYWORD)		{		if (strcmp(s_save, "#cs")== 0 || strcmp(s_save, "#comments-start")== 0 )		{			sc.ChangeState(SCE_AU3_COMMENTBLOCK);			sc.SetState(SCE_AU3_COMMENTBLOCK);		}		else if (keywords.InList(s_save)) {			sc.ChangeState(SCE_AU3_KEYWORD);			sc.SetState(SCE_AU3_KEYWORD);		}		else if (keywords2.InList(s_save)) {			sc.ChangeState(SCE_AU3_FUNCTION);			sc.SetState(SCE_AU3_FUNCTION);		}		else if (keywords3.InList(s_save)) {			sc.ChangeState(SCE_AU3_MACRO);			sc.SetState(SCE_AU3_MACRO);		}		else if (keywords5.InList(s_save)) {			sc.ChangeState(SCE_AU3_PREPROCESSOR);			sc.SetState(SCE_AU3_PREPROCESSOR);		}		else if (keywords6.InList(s_save)) {			sc.ChangeState(SCE_AU3_SPECIAL);			sc.SetState(SCE_AU3_SPECIAL);		}		else if (keywords7.InList(s_save) && sc.atLineEnd) {			sc.ChangeState(SCE_AU3_EXPAND);			sc.SetState(SCE_AU3_EXPAND);		}		else if (keywords8.InList(s_save)) {			sc.ChangeState(SCE_AU3_UDF);			sc.SetState(SCE_AU3_UDF);		}		else {			sc.ChangeState(SCE_AU3_DEFAULT);			sc.SetState(SCE_AU3_DEFAULT);		}	}	if (sc.state == SCE_AU3_SENT)    {		// Send key string ended 		if (sc.chPrev == '}' && sc.ch != '}') 		{			// set color to SENDKEY when valid sendkey .. else set back to regular string			char sk[100];			// split {111 222} and return {111} and check if 222 is valid.			// if return code = 1 then invalid 222 so must be string			if (GetSendKey(s_save,sk))   			{				sc.ChangeState(SCE_AU3_STRING);			}			// if single char between {?} then its ok as sendkey for a single character			else if (strlen(sk) == 3)  			{				sc.ChangeState(SCE_AU3_SENT);			}			// if sendkey {111} is in table then ok as sendkey			else if (keywords4.InList(sk)) 			{				sc.ChangeState(SCE_AU3_SENT);			}			else			{				sc.ChangeState(SCE_AU3_STRING);			}			sc.SetState(SCE_AU3_STRING);		}		// check if next portion is again a sendkey		if (sc.atLineEnd) 		{			sc.ChangeState(SCE_AU3_STRING);			sc.SetState(SCE_AU3_DEFAULT);		}    }	//*************************************	sc.Complete();}//static bool IsStreamCommentStyle(int style) {	return style == SCE_AU3_COMMENT || style == SCE_AU3_COMMENTBLOCK;}//// Routine to find first none space on the current line and return its Style// needed for comment lines not starting on pos 1 static int GetStyleFirstWord(unsigned int szLine, Accessor &styler){	int nsPos = styler.LineStart(szLine);	int nePos = styler.LineStart(szLine+1) - 1;	while (isspacechar(styler.SafeGetCharAt(nsPos)) && nsPos < nePos)	{		nsPos++; // skip to next char	} // End While	return styler.StyleAt(nsPos);} // GetStyleFirstWord()//static void FoldAU3Doc(unsigned int startPos, int length, int, WordList *[], Accessor &styler){	int endPos = startPos + length;	// get settings from the config files for folding comments and preprocessor lines	bool foldComment = styler.GetPropertyInt("fold.comment") != 0;	bool foldInComment = styler.GetPropertyInt("fold.comment") == 2;	bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;	bool foldpreprocessor = styler.GetPropertyInt("fold.preprocessor") != 0;	// Backtrack to previous line in case need to fix its fold status	int lineCurrent = styler.GetLine(startPos);	if (startPos > 0) {		if (lineCurrent > 0) {			lineCurrent--;			startPos = styler.LineStart(lineCurrent);		}	}	// vars for style of previous/current/next lines 	int style = GetStyleFirstWord(lineCurrent,styler);	int stylePrev = 0;	// find the first previous line without continuation character at the end	while ((lineCurrent > 0 && IsContinuationLine(lineCurrent,styler)) ||	       (lineCurrent > 1 && IsContinuationLine(lineCurrent-1,styler))) {		lineCurrent--;		startPos = styler.LineStart(lineCurrent);	}	if (lineCurrent > 0) {		stylePrev = GetStyleFirstWord(lineCurrent-1,styler);	}	// vars for getting first word to check for keywords	bool FirstWordStart = false;	bool FirstWordEnd = false;	char szKeyword[10]="";	int	 szKeywordlen = 0;	char szThen[5]="";	int	 szThenlen = 0;	bool ThenFoundLast = false;	// var for indentlevel	int levelCurrent = SC_FOLDLEVELBASE;	if (lineCurrent > 0)		levelCurrent = styler.LevelAt(lineCurrent-1) >> 16;	int levelNext = levelCurrent;	//  	int	visibleChars = 0;	char chNext = styler.SafeGetCharAt(startPos);	char chPrev = ' ';	//	for (int i = startPos; i < endPos; i++) {		char ch = chNext;		chNext = styler.SafeGetCharAt(i + 1);		if (IsAWordChar(ch)) {			visibleChars++;		}		// get the syle for the current character neede to check in comment		int stylech = styler.StyleAt(i);		// get first word for the line for indent check max 9 characters		if (FirstWordStart && (!(FirstWordEnd))) {			if (!IsAWordChar(ch)) {				FirstWordEnd = true;				szKeyword[szKeywordlen] = '\0';			}			else {				if (szKeywordlen < 10) {				szKeyword[szKeywordlen++] = static_cast<char>(tolower(ch));				}			}		}		// start the capture of the first word 		if (!(FirstWordStart)) {			if (IsAWordChar(ch) || IsAWordStart(ch) || ch == ';') {				FirstWordStart = true;				szKeyword[szKeywordlen++] = static_cast<char>(tolower(ch));			}		}		// only process this logic when not in comment section		if (!(stylech == SCE_AU3_COMMENT)) {			if (ThenFoundLast) {				if (IsAWordChar(ch)) {					ThenFoundLast = false;				}					}			// find out if the word "then" is the last on a "if" line			if (FirstWordEnd && strcmp(szKeyword,"if") == 0) {				if (szThenlen == 4) {					szThen[0] = szThen[1];					szThen[1] = szThen[2];					szThen[2] = szThen[3];					szThen[3] = static_cast<char>(tolower(ch));					if (strcmp(szThen,"then") == 0 ) {						ThenFoundLast = true;					}				}				else {					szThen[szThenlen++] = static_cast<char>(tolower(ch));					if (szThenlen == 5) {						szThen[4] = '\0';					}				}			}		}		// End of Line found so process the information 		if ((ch == '\r' && chNext != '\n') || (ch == '\n') || (i == endPos)) {			// **************************			// Folding logic for Keywords			// **************************			// if a keyword is found on the current line and the line doesn't end with _ (continuation)			//    and we are not inside a commentblock.			if (szKeywordlen > 0 && (!(chPrev == '_')) && 				((!(IsStreamCommentStyle(style)) || foldInComment)) ) {				szKeyword[szKeywordlen] = '\0';				// only fold "if" last keyword is "then"  (else its a one line if)				if (strcmp(szKeyword,"if") == 0  && ThenFoundLast) {						levelNext++;				}				// create new fold for these words 				if (strcmp(szKeyword,"do") == 0   || strcmp(szKeyword,"for") == 0 ||					strcmp(szKeyword,"func") == 0 || strcmp(szKeyword,"while") == 0||					strcmp(szKeyword,"with") == 0 || strcmp(szKeyword,"#region") == 0 ) {						levelNext++;				}				// create double Fold for select&switch because Case will subtract one of the current level				if (strcmp(szKeyword,"select") == 0 || strcmp(szKeyword,"switch") == 0) {						levelNext++;						levelNext++;				}				// end the fold for these words before the current line				if (strcmp(szKeyword,"endfunc") == 0 || strcmp(szKeyword,"endif") == 0 ||					strcmp(szKeyword,"next") == 0    || strcmp(szKeyword,"until") == 0 || 					strcmp(szKeyword,"endwith") == 0 ||strcmp(szKeyword,"wend") == 0){						levelNext--;						levelCurrent--;				}				// end the fold for these words before the current line and Start new fold 				if (strcmp(szKeyword,"case") == 0      || strcmp(szKeyword,"else") == 0 ||					strcmp(szKeyword,"elseif") == 0 ) {						levelCurrent--;				}				// end the double fold for this word before the current line				if (strcmp(szKeyword,"endselect") == 0 || strcmp(szKeyword,"endswitch") == 0 ) {						levelNext--;						levelNext--;						levelCurrent--;						levelCurrent--;				}				// end the fold for these words on the current line				if (strcmp(szKeyword,"#endregion") == 0 ) {						levelNext--;				}			}			// Preprocessor and Comment folding			int styleNext = GetStyleFirstWord(lineCurrent + 1,styler);			// *************************************			// Folding logic for preprocessor blocks			// *************************************			// process preprosessor line			if (foldpreprocessor && style == SCE_AU3_PREPROCESSOR) {				if (!(stylePrev == SCE_AU3_PREPROCESSOR) && (styleNext == SCE_AU3_PREPROCESSOR)) {				    levelNext++;				}				// fold till the last line for normal comment lines				else if (stylePrev == SCE_AU3_PREPROCESSOR && !(styleNext == SCE_AU3_PREPROCESSOR)) {					levelNext--;				}			}			// *********************************			// Folding logic for Comment blocks			// *********************************			if (foldComment && IsStreamCommentStyle(style)) {				// Start of a comment block				if (!(stylePrev==style) && IsStreamCommentStyle(styleNext) && styleNext==style) {				    levelNext++;				} 				// fold till the last line for normal comment lines				else if (IsStreamCommentStyle(stylePrev) 						&& !(styleNext == SCE_AU3_COMMENT)						&& stylePrev == SCE_AU3_COMMENT 						&& style == SCE_AU3_COMMENT) {					levelNext--;				}				// fold till the one but last line for Blockcomment lines				else if (IsStreamCommentStyle(stylePrev) 						&& !(styleNext == SCE_AU3_COMMENTBLOCK)						&& style == SCE_AU3_COMMENTBLOCK) {					levelNext--;					levelCurrent--;				}			}			int levelUse = levelCurrent;			int lev = levelUse | levelNext << 16;			if (visibleChars == 0 && foldCompact)				lev |= SC_FOLDLEVELWHITEFLAG;			if (levelUse < levelNext) {				lev |= SC_FOLDLEVELHEADERFLAG;			}			if (lev != styler.LevelAt(lineCurrent)) {				styler.SetLevel(lineCurrent, lev);			}			// reset values for the next line			lineCurrent++;			stylePrev = style;			style = styleNext;			levelCurrent = levelNext;			visibleChars = 0;			// if the last character is an Underscore then don't reset since the line continues on the next line.			if (!(chPrev == '_')) {				szKeywordlen = 0;				szThenlen = 0;				FirstWordStart = false;				FirstWordEnd = false;				ThenFoundLast = false;			}		}		// save the last processed character		if (!isspacechar(ch)) {			chPrev = ch;			visibleChars++;		}	}}//static const char * const AU3WordLists[] = {    "#autoit keywords",    "#autoit functions",    "#autoit macros",    "#autoit Sent keys",    "#autoit Pre-processors",    "#autoit Special",    "#autoit Expand",    "#autoit UDF",    0};LexerModule lmAU3(SCLEX_AU3, ColouriseAU3Doc, "au3", FoldAU3Doc , AU3WordLists);

⌨️ 快捷键说明

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