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

📄 lexnsis.cxx

📁 robocup rcssserver 运行防真机器人足球比赛所用的服务器端
💻 CXX
📖 第 1 页 / 共 2 页
字号:
// Scintilla source code edit control/** @file LexNsis.cxx ** Lexer for NSIS **/// Copyright 2003 - 2005 by Angelo Mandato <angelo [at] spaceblue [dot] com>// Last Updated: 03/13/2005// The License.txt file describes the conditions under which this software may be distributed.#include <stdlib.h>#include <string.h>#include <ctype.h>#include <stdio.h>#include <stdarg.h>#include "Platform.h"#include "PropSet.h"#include "Accessor.h"#include "KeyWords.h"#include "Scintilla.h"#include "SciLexer.h"/*// located in SciLexer.h#define SCLEX_NSIS 43#define SCE_NSIS_DEFAULT 0#define SCE_NSIS_COMMENT 1#define SCE_NSIS_STRINGDQ 2#define SCE_NSIS_STRINGLQ 3#define SCE_NSIS_STRINGRQ 4#define SCE_NSIS_FUNCTION 5#define SCE_NSIS_VARIABLE 6#define SCE_NSIS_LABEL 7#define SCE_NSIS_USERDEFINED 8#define SCE_NSIS_SECTIONDEF 9#define SCE_NSIS_SUBSECTIONDEF 10#define SCE_NSIS_IFDEFINEDEF 11#define SCE_NSIS_MACRODEF 12#define SCE_NSIS_STRINGVAR 13#define SCE_NSIS_NUMBER 14// ADDED for Scintilla v1.63#define SCE_NSIS_SECTIONGROUP 15#define SCE_NSIS_PAGEEX 16#define SCE_NSIS_FUNCTIONDEF 17#define SCE_NSIS_COMMENTBOX 18*/static bool isNsisNumber(char ch){  return (ch >= '0' && ch <= '9');}static bool isNsisChar(char ch){  return (ch == '.' ) || (ch == '_' ) || isNsisNumber(ch) || (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z');}static bool isNsisLetter(char ch){  return (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z');}static bool NsisNextLineHasElse(unsigned int start, unsigned int end, Accessor &styler){  int nNextLine = -1;  for( unsigned int i = start; i < end; i++ )  {    char cNext = styler.SafeGetCharAt( i );    if( cNext == '\n' )    {      nNextLine = i+1;      break;    }  }  if( nNextLine == -1 ) // We never foudn the next line...    return false;  for( unsigned int firstChar = nNextLine; firstChar < end; firstChar++ )  {    char cNext = styler.SafeGetCharAt( firstChar );    if( cNext == ' ' )      continue;    if( cNext == '\t' )      continue;    if( cNext == '!' )    {      if( styler.Match(firstChar, "!else") )        return true;    }    break;  }  return false;}static int NsisCmp( char *s1, char *s2, bool bIgnoreCase ){  if( bIgnoreCase )     return CompareCaseInsensitive( s1, s2);  return strcmp( s1, s2 );}static int calculateFoldNsis(unsigned int start, unsigned int end, int foldlevel, Accessor &styler, bool bElse, bool foldUtilityCmd ){  int style = styler.StyleAt(end);  // If the word is too long, it is not what we are looking for  if( end - start > 20 )    return foldlevel;  if( foldUtilityCmd )  {    // Check the style at this point, if it is not valid, then return zero    if( style != SCE_NSIS_FUNCTIONDEF && style != SCE_NSIS_SECTIONDEF &&        style != SCE_NSIS_SUBSECTIONDEF && style != SCE_NSIS_IFDEFINEDEF &&        style != SCE_NSIS_MACRODEF && style != SCE_NSIS_SECTIONGROUP &&        style != SCE_NSIS_PAGEEX )          return foldlevel;  }  else  {     if( style != SCE_NSIS_FUNCTIONDEF && style != SCE_NSIS_SECTIONDEF &&        style != SCE_NSIS_SUBSECTIONDEF && style != SCE_NSIS_SECTIONGROUP &&        style != SCE_NSIS_PAGEEX )          return foldlevel;  }  int newFoldlevel = foldlevel;  bool bIgnoreCase = false;  if( styler.GetPropertyInt("nsis.ignorecase") == 1 )    bIgnoreCase = true;  char s[20]; // The key word we are looking for has atmost 13 characters  for (unsigned int i = 0; i < end - start + 1 && i < 19; i++)	{		s[i] = static_cast<char>( styler[ start + i ] );		s[i + 1] = '\0';	}  if( s[0] == '!' )  {    if( NsisCmp(s, "!ifndef", bIgnoreCase) == 0 || NsisCmp(s, "!ifdef", bIgnoreCase ) == 0 || NsisCmp(s, "!macro", bIgnoreCase ) == 0 )      newFoldlevel++;    else if( NsisCmp(s, "!endif", bIgnoreCase) == 0 || NsisCmp(s, "!macroend", bIgnoreCase ) == 0 )      newFoldlevel--;    else if( bElse && NsisCmp(s, "!else", bIgnoreCase) == 0 )      newFoldlevel++;  }  else  {    if( NsisCmp(s, "Section", bIgnoreCase ) == 0 || NsisCmp(s, "SectionGroup", bIgnoreCase ) == 0 || NsisCmp(s, "Function", bIgnoreCase) == 0 || NsisCmp(s, "SubSection", bIgnoreCase ) == 0 || NsisCmp(s, "PageEx", bIgnoreCase ) == 0 )      newFoldlevel++;    else if( NsisCmp(s, "SectionGroupEnd", bIgnoreCase ) == 0 || NsisCmp(s, "SubSectionEnd", bIgnoreCase ) == 0 || NsisCmp(s, "FunctionEnd", bIgnoreCase) == 0 || NsisCmp(s, "SectionEnd", bIgnoreCase ) == 0 || NsisCmp(s, "PageExEnd", bIgnoreCase ) == 0 )      newFoldlevel--;  }    return newFoldlevel;}static int classifyWordNsis(unsigned int start, unsigned int end, WordList *keywordLists[], Accessor &styler ){  bool bIgnoreCase = false;  if( styler.GetPropertyInt("nsis.ignorecase") == 1 )    bIgnoreCase = true;  bool bUserVars = false;  if( styler.GetPropertyInt("nsis.uservars") == 1 )    bUserVars = true;	char s[100];	WordList &Functions = *keywordLists[0];	WordList &Variables = *keywordLists[1];	WordList &Lables = *keywordLists[2];	WordList &UserDefined = *keywordLists[3];	for (unsigned int i = 0; i < end - start + 1 && i < 99; i++)	{    if( bIgnoreCase )      s[i] = static_cast<char>( tolower(styler[ start + i ] ) );    else		  s[i] = static_cast<char>( styler[ start + i ] );		s[i + 1] = '\0';	}	// Check for special words...	if( NsisCmp(s, "!macro", bIgnoreCase ) == 0 || NsisCmp(s, "!macroend", bIgnoreCase) == 0 ) // Covers !micro and !microend		return SCE_NSIS_MACRODEF;	if( NsisCmp(s, "!ifdef", bIgnoreCase ) == 0 ||  NsisCmp(s, "!ifndef", bIgnoreCase) == 0 ||  NsisCmp(s, "!endif", bIgnoreCase) == 0 )		return SCE_NSIS_IFDEFINEDEF;  if( NsisCmp(s, "!else", bIgnoreCase ) == 0 ) // ||  NsisCmp(s, "!ifndef", bIgnoreCase) == 0 ||  NsisCmp(s, "!endif", bIgnoreCase) == 0 )		return SCE_NSIS_IFDEFINEDEF;  if( NsisCmp(s, "SectionGroup", bIgnoreCase) == 0 || NsisCmp(s, "SectionGroupEnd", bIgnoreCase) == 0 ) // Covers SectionGroup and SectionGroupEnd    return SCE_NSIS_SECTIONGROUP;	if( NsisCmp(s, "Section", bIgnoreCase ) == 0 || NsisCmp(s, "SectionEnd", bIgnoreCase) == 0 ) // Covers Section and SectionEnd		return SCE_NSIS_SECTIONDEF;	if( NsisCmp(s, "SubSection", bIgnoreCase) == 0 || NsisCmp(s, "SubSectionEnd", bIgnoreCase) == 0 ) // Covers SubSection and SubSectionEnd		return SCE_NSIS_SUBSECTIONDEF;  if( NsisCmp(s, "PageEx", bIgnoreCase) == 0 || NsisCmp(s, "PageExEnd", bIgnoreCase) == 0 ) // Covers PageEx and PageExEnd    return SCE_NSIS_PAGEEX;	if( NsisCmp(s, "Function", bIgnoreCase) == 0 || NsisCmp(s, "FunctionEnd", bIgnoreCase) == 0 ) // Covers Function and FunctionEnd		return SCE_NSIS_FUNCTIONDEF;	if ( Functions.InList(s) )		return SCE_NSIS_FUNCTION;	if ( Variables.InList(s) )		return SCE_NSIS_VARIABLE;	if ( Lables.InList(s) )		return SCE_NSIS_LABEL;	if( UserDefined.InList(s) )		return SCE_NSIS_USERDEFINED;	if( strlen(s) > 3 )	{		if( s[1] == '{' && s[strlen(s)-1] == '}' )			return SCE_NSIS_VARIABLE;	}  // See if the variable is a user defined variable  if( s[0] == '$' && bUserVars )  {    bool bHasSimpleNsisChars = true;    for (unsigned int j = 1; j < end - start + 1 && j < 99; j++)	  {      if( !isNsisChar( s[j] ) )      {        bHasSimpleNsisChars = false;        break;      }	  }    if( bHasSimpleNsisChars )      return SCE_NSIS_VARIABLE;  }  // To check for numbers  if( isNsisNumber( s[0] ) )  {    bool bHasSimpleNsisNumber = true;    for (unsigned int j = 1; j < end - start + 1 && j < 99; j++)	  {      if( !isNsisNumber( s[j] ) )      {        bHasSimpleNsisNumber = false;        break;      }	  }    if( bHasSimpleNsisNumber )      return SCE_NSIS_NUMBER;  }	return SCE_NSIS_DEFAULT;}static void ColouriseNsisDoc(unsigned int startPos, int length, int, WordList *keywordLists[], Accessor &styler){	int state = SCE_NSIS_DEFAULT;  if( startPos > 0 )    state = styler.StyleAt(startPos-1); // Use the style from the previous line, usually default, but could be commentbox	styler.StartAt( startPos );	styler.GetLine( startPos );	unsigned int nLengthDoc = startPos + length;	styler.StartSegment( startPos );	char cCurrChar;	bool bVarInString = false;  bool bClassicVarInString = false;	unsigned int i;	for( i = startPos; i < nLengthDoc; i++ )	{		cCurrChar = styler.SafeGetCharAt( i );		char cNextChar = styler.SafeGetCharAt(i+1);		switch(state)		{			case SCE_NSIS_DEFAULT:				if( cCurrChar == ';' || cCurrChar == '#' ) // we have a comment line				{					styler.ColourTo(i-1, state );					state = SCE_NSIS_COMMENT;					break;				}				if( cCurrChar == '"' )				{					styler.ColourTo(i-1, state );					state = SCE_NSIS_STRINGDQ;					bVarInString = false;          bClassicVarInString = false;					break;				}				if( cCurrChar == '\'' )				{					styler.ColourTo(i-1, state );					state = SCE_NSIS_STRINGRQ;					bVarInString = false;          bClassicVarInString = false;					break;				}				if( cCurrChar == '`' )				{					styler.ColourTo(i-1, state );					state = SCE_NSIS_STRINGLQ;					bVarInString = false;          bClassicVarInString = false;					break;				}				// NSIS KeyWord,Function, Variable, UserDefined:

⌨️ 快捷键说明

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