diff options
| -rw-r--r-- | src/LexBasic.cxx | 47 | 
1 files changed, 43 insertions, 4 deletions
| diff --git a/src/LexBasic.cxx b/src/LexBasic.cxx index 713ded614..4a1843aa0 100644 --- a/src/LexBasic.cxx +++ b/src/LexBasic.cxx @@ -83,7 +83,7 @@ static int LowerCase(int c)  }  static void ColouriseBasicDoc(unsigned int startPos, int length, int initStyle, -                           WordList *keywordlists[], Accessor &styler) { +                           WordList *keywordlists[], Accessor &styler, char comment_char) {  	bool wasfirst = true, isfirst = true; // true if first token in a line  	styler.StartAt(startPos); @@ -159,7 +159,10 @@ static void ColouriseBasicDoc(unsigned int startPos, int length, int initStyle,  		if (sc.state == SCE_B_DEFAULT || sc.state == SCE_B_ERROR) {  			if (isfirst && sc.Match('.')) {  				sc.SetState(SCE_B_LABEL); -			} else if (sc.Match(';')) { +			} else if (isfirst && sc.Match('#')) { +				wasfirst = isfirst; +				sc.SetState(SCE_B_IDENTIFIER); +			} else if (sc.Match(comment_char)) {  				sc.SetState(SCE_B_COMMENT);  			} else if (sc.Match('"')) {  				sc.SetState(SCE_B_STRING); @@ -220,6 +223,21 @@ static int CheckPureFoldPoint(char const *token, int &level) {  	return 0;  } +static int CheckFreeFoldPoint(char const *token, int &level) { +	if (!strcmp(token, "function") || +		!strcmp(token, "sub") || +		!strcmp(token, "type")) { +		level |= SC_FOLDLEVELHEADERFLAG; +		return 1; +	} +	if (!strcmp(token, "end function") || +		!strcmp(token, "end sub") || +		!strcmp(token, "end type")) { +		return -1; +	} +	return 0; +} +  static void FoldBasicDoc(unsigned int startPos, int length,  	Accessor &styler, int (*CheckFoldPoint)(char const *, int &)) {  	int line = styler.GetLine(startPos); @@ -283,12 +301,17 @@ static void FoldBasicDoc(unsigned int startPos, int length,  static void ColouriseBlitzBasicDoc(unsigned int startPos, int length, int initStyle,                             WordList *keywordlists[], Accessor &styler) { -	ColouriseBasicDoc(startPos, length, initStyle, keywordlists, styler); +	ColouriseBasicDoc(startPos, length, initStyle, keywordlists, styler, ';');  }  static void ColourisePureBasicDoc(unsigned int startPos, int length, int initStyle,                             WordList *keywordlists[], Accessor &styler) { -	ColouriseBasicDoc(startPos, length, initStyle, keywordlists, styler); +	ColouriseBasicDoc(startPos, length, initStyle, keywordlists, styler, ';'); +} + +static void ColouriseFreeBasicDoc(unsigned int startPos, int length, int initStyle, +                           WordList *keywordlists[], Accessor &styler) { +	ColouriseBasicDoc(startPos, length, initStyle, keywordlists, styler, '\'');  }  static void FoldBlitzBasicDoc(unsigned int startPos, int length, int, @@ -301,6 +324,11 @@ static void FoldPureBasicDoc(unsigned int startPos, int length, int,  	FoldBasicDoc(startPos, length, styler, CheckPureFoldPoint);  } +static void FoldFreeBasicDoc(unsigned int startPos, int length, int, +	WordList *[], Accessor &styler) { +	FoldBasicDoc(startPos, length, styler, CheckFreeFoldPoint); +} +  static const char * const blitzbasicWordListDesc[] = {  	"BlitzBasic Keywords",  	"user1", @@ -317,9 +345,20 @@ static const char * const purebasicWordListDesc[] = {  	0  }; +static const char * const freebasicWordListDesc[] = { +	"FreeBasic Keywords", +	"FreeBasic PreProcessor Keywords", +	"user defined 1", +	"user defined 2", +	0 +}; +  LexerModule lmBlitzBasic(SCLEX_BLITZBASIC, ColouriseBlitzBasicDoc, "blitzbasic",  	FoldBlitzBasicDoc, blitzbasicWordListDesc);  LexerModule lmPureBasic(SCLEX_PUREBASIC, ColourisePureBasicDoc, "purebasic",  	FoldPureBasicDoc, purebasicWordListDesc); +LexerModule lmFreeBasic(SCLEX_FREEBASIC, ColouriseFreeBasicDoc, "freebasic", +	FoldFreeBasicDoc, freebasicWordListDesc); + | 
