diff options
| author | nyamatongwe <unknown> | 2005-02-04 12:02:07 +0000 | 
|---|---|---|
| committer | nyamatongwe <unknown> | 2005-02-04 12:02:07 +0000 | 
| commit | 4445dc7dc361470d37cfbe9ef567f37b5ad2bd13 (patch) | |
| tree | 6add782404437f5339958037fd8a1c7fda770ac9 | |
| parent | ec099a9f83f1eb631cee326a02c653b79bdc72a8 (diff) | |
| download | scintilla-mirror-4445dc7dc361470d37cfbe9ef567f37b5ad2bd13.tar.gz | |
Added BlitzBasic lexer and properties file.
| -rw-r--r-- | doc/ScintillaHistory.html | 1 | ||||
| -rw-r--r-- | gtk/makefile | 12 | ||||
| -rw-r--r-- | gtk/scintilla.mak | 3 | ||||
| -rw-r--r-- | include/SciLexer.h | 12 | ||||
| -rw-r--r-- | include/Scintilla.iface | 14 | ||||
| -rw-r--r-- | src/KeyWords.cxx | 1 | ||||
| -rw-r--r-- | src/LexBB.cxx | 178 | ||||
| -rw-r--r-- | win32/makefile | 12 | ||||
| -rw-r--r-- | win32/scintilla.mak | 3 | ||||
| -rw-r--r-- | win32/scintilla_vc6.mak | 3 | 
10 files changed, 227 insertions, 12 deletions
| diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html index 43182863e..d0c93615d 100644 --- a/doc/ScintillaHistory.html +++ b/doc/ScintillaHistory.html @@ -182,6 +182,7 @@  	<li>Iago Rubio</li>  	<li>Régis Vaquette</li>  	<li>Massimo Corŕ</li> +	<li>Elias Pschernig</li>      </ul>      <p>         Images used in GTK+ version diff --git a/gtk/makefile b/gtk/makefile index 774e6730e..f53101d33 100644 --- a/gtk/makefile +++ b/gtk/makefile @@ -64,12 +64,12 @@ endif  #**LEXOBJS=\\\n\(\*.o \)  LEXOBJS=\  LexAda.o LexAPDL.o LexAsm.o LexAsn1.o LexAU3.o LexAVE.o LexBaan.o LexBash.o \ -LexBullant.o LexCLW.o LexConf.o LexCPP.o LexCrontab.o LexCSS.o LexEiffel.o \ -LexErlang.o LexEScript.o LexForth.o LexFortran.o LexGui4Cli.o LexHTML.o \ -LexKix.o LexLisp.o LexLout.o LexLua.o LexMatlab.o LexMetapost.o LexMMIXAL.o \ -LexMPT.o LexMSSQL.o LexNsis.o LexOthers.o LexPascal.o LexPB.o LexPerl.o \ -LexPOV.o LexPS.o LexPython.o LexRuby.o LexScriptol.o LexSpecman.o LexSQL.o \ -LexTeX.o LexVB.o LexVerilog.o LexVHDL.o LexYAML.o +LexBB.o LexBullant.o LexCLW.o LexConf.o LexCPP.o LexCrontab.o LexCSS.o \ +LexEiffel.o LexErlang.o LexEScript.o LexForth.o LexFortran.o LexGui4Cli.o \ +LexHTML.o LexKix.o LexLisp.o LexLout.o LexLua.o LexMatlab.o LexMetapost.o \ +LexMMIXAL.o LexMPT.o LexMSSQL.o LexNsis.o LexOthers.o LexPascal.o LexPB.o \ +LexPerl.o LexPOV.o LexPS.o LexPython.o LexRuby.o LexScriptol.o LexSpecman.o \ +LexSQL.o LexTeX.o LexVB.o LexVerilog.o LexVHDL.o LexYAML.o  #--Autogenerated -- end of automatically generated section  all: $(COMPLIB) diff --git a/gtk/scintilla.mak b/gtk/scintilla.mak index a1a536827..f3860127d 100644 --- a/gtk/scintilla.mak +++ b/gtk/scintilla.mak @@ -147,6 +147,7 @@ LEXOBJS=\  	$(DIR_O)\LexAVE.obj \  	$(DIR_O)\LexBaan.obj \  	$(DIR_O)\LexBash.obj \ +	$(DIR_O)\LexBB.obj \  	$(DIR_O)\LexBullant.obj \  	$(DIR_O)\LexCLW.obj \  	$(DIR_O)\LexConf.obj \ @@ -318,6 +319,8 @@ $(DIR_O)\LexBaan.obj: ..\src\LexBaan.cxx $(LEX_HEADERS)  $(DIR_O)\LexBash.obj: ..\src\LexBash.cxx $(LEX_HEADERS) +$(DIR_O)\LexBB.obj: ..\src\LexBB.cxx $(LEX_HEADERS) +  $(DIR_O)\LexBullant.obj: ..\src\LexBullant.cxx $(LEX_HEADERS)  $(DIR_O)\LexCLW.obj: ..\src\LexCLW.cxx $(LEX_HEADERS) diff --git a/include/SciLexer.h b/include/SciLexer.h index ce50a7fab..095eadeb4 100644 --- a/include/SciLexer.h +++ b/include/SciLexer.h @@ -79,6 +79,7 @@  #define SCLEX_BASH 62  #define SCLEX_ASN1 63  #define SCLEX_VHDL 64 +#define SCLEX_BB 65  #define SCLEX_AUTOMATIC 1000  #define SCE_P_DEFAULT 0  #define SCE_P_COMMENTLINE 1 @@ -784,6 +785,17 @@  #define SCE_VHDL_STDPACKAGE 12  #define SCE_VHDL_STDTYPE 13  #define SCE_VHDL_USERWORD 14 +#define SCE_BB_DEFAULT 0 +#define SCE_BB_COMMENT 1 +#define SCE_BB_NUMBER 2 +#define SCE_BB_STRING 3 +#define SCE_BB_OPERATOR 4 +#define SCE_BB_IDENTIFIER 5 +#define SCE_BB_KEYWORD 6 +#define SCE_BB_KEYWORD2 7 +#define SCE_BB_KEYWORD3 8 +#define SCE_BB_KEYWORD4 9 +#define SCE_BB_ERROR 10  //--Autogenerated -- end of section automatically generated from Scintilla.iface  #endif diff --git a/include/Scintilla.iface b/include/Scintilla.iface index d79f97a64..39d69183b 100644 --- a/include/Scintilla.iface +++ b/include/Scintilla.iface @@ -1751,6 +1751,7 @@ val SCLEX_APDL=61  val SCLEX_BASH=62  val SCLEX_ASN1=63  val SCLEX_VHDL=64 +val SCLEX_BB=65  # When a lexer specifies its language as SCLEX_AUTOMATIC it receives a  # value assigned in sequence from SCLEX_AUTOMATIC+1. @@ -2578,6 +2579,19 @@ val SCE_VHDL_STDFUNCTION=11  val SCE_VHDL_STDPACKAGE=12  val SCE_VHDL_STDTYPE=13  val SCE_VHDL_USERWORD=14 +# Lexical states for SCLEX_BB +lex BB=SCLEX_BB SCE_BB_ +val SCE_BB_DEFAULT=0 +val SCE_BB_COMMENT=1 +val SCE_BB_NUMBER=2 +val SCE_BB_STRING=3 +val SCE_BB_OPERATOR=4 +val SCE_BB_IDENTIFIER=5 +val SCE_BB_KEYWORD=6 +val SCE_BB_KEYWORD2=7 +val SCE_BB_KEYWORD3=8 +val SCE_BB_KEYWORD4=9 +val SCE_BB_ERROR=10  # Events diff --git a/src/KeyWords.cxx b/src/KeyWords.cxx index 66e82094c..1667778b2 100644 --- a/src/KeyWords.cxx +++ b/src/KeyWords.cxx @@ -137,6 +137,7 @@ int Scintilla_LinkLexers() {  	LINK_LEXER(lmAVE);  	LINK_LEXER(lmBaan);  	LINK_LEXER(lmBash); +	LINK_LEXER(lmBB);  	LINK_LEXER(lmBullant);  	LINK_LEXER(lmClw);  	LINK_LEXER(lmClwNoCase); diff --git a/src/LexBB.cxx b/src/LexBB.cxx new file mode 100644 index 000000000..ed1aebd34 --- /dev/null +++ b/src/LexBB.cxx @@ -0,0 +1,178 @@ +// Scintilla source code edit control +/** @file LexBB.cxx + ** Lexer for BlitzBasic. + **/ +// Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org> +// The License.txt file describes the conditions under which this software may be distributed. + +// Currently, this only supports the old (2D only) BlitzBasic. But I believe relatively +// few changes would be needed to support the newer versions (Blitz3D, BlitzPlus, +// BlitzMax, ...) - but I don't have them. Mail me (elias <at> users <dot> sf <dot> net) +// for any bugs. + +// Folding works for Function/End Function and Type/End Type only. + +// The generated styles are: +// val SCE_BB_DEFAULT=0 +// val SCE_BB_COMMENT=1 +// val SCE_BB_NUMBER=2 +// val SCE_BB_STRING=3 +// val SCE_BB_OPERATOR=4 +// val SCE_BB_IDENTIFIER=5 +// val SCE_BB_KEYWORD=6 +// val SCE_BB_KEYWORD2=7 +// val SCE_BB_KEYWORD3=8 +// val SCE_BB_KEYWORD4=9 +// val SCE_BB_ERROR=10 + +#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 "StyleContext.h" +#include "KeyWords.h" +#include "Scintilla.h" +#include "SciLexer.h" + +static bool IsOperator(int c) { +	return isoperator(static_cast<char>(c)) || c == '#' || c == '$' || c == '\\'; +} + +static bool IsIdentifier(int c) { +	return isalnum(c) || c == '_' || c == '.'; +} + +static bool IsDigit(int c) { +	return isdigit(c) || c == '.'; +} + +static void ColouriseBBDoc(unsigned int startPos, int length, int initStyle, +                           WordList *keywordlists[], Accessor &styler) { +	styler.StartAt(startPos); + +	StyleContext sc(startPos, length, initStyle, styler); + +	// Can't use sc.More() here else we miss the last character +	for (; ; sc.Forward()) { +		if (sc.state == SCE_BB_IDENTIFIER) { +			if (!IsIdentifier(sc.ch)) { +				char s[100]; +				sc.GetCurrentLowered(s, sizeof(s)); +				for (int i = 0; i < 4; i++) +				{ +					if (keywordlists[i]->InList(s)) { +						sc.ChangeState(SCE_BB_KEYWORD + i); +						sc.SetState(SCE_BB_IDENTIFIER); +					} +				} +				sc.SetState(SCE_BB_DEFAULT); +			} +		} else if (sc.state == SCE_BB_OPERATOR) { +			if (!IsOperator(sc.ch)) +				sc.SetState(SCE_BB_DEFAULT); +		} else if (sc.state == SCE_BB_NUMBER) { +			if (!IsDigit(sc.ch)) { +				sc.SetState(SCE_BB_DEFAULT); +			} +		} else if (sc.state == SCE_BB_STRING) { +			if (sc.ch == '"') { +				sc.ForwardSetState(SCE_BB_DEFAULT); +			} +			if (sc.atLineEnd) { +				sc.ChangeState(SCE_BB_ERROR); +				sc.SetState(SCE_BB_DEFAULT); +			} +		} else if (sc.state == SCE_BB_COMMENT) { +			if (sc.atLineEnd) { +				sc.SetState(SCE_BB_DEFAULT); +			} +		} + +		if (sc.state == SCE_BB_DEFAULT || sc.state == SCE_BB_ERROR) { +			if (sc.Match(';')) { +				sc.SetState(SCE_BB_COMMENT); +			} else if (sc.Match('"')) { +				sc.SetState(SCE_BB_STRING); +			} else if (IsDigit(sc.ch)) { +				sc.SetState(SCE_BB_NUMBER); +			} else if (IsOperator(sc.ch)) { +				sc.SetState(SCE_BB_OPERATOR); +			} else if (isalnum(sc.ch) || sc.Match('_')) { +				sc.SetState(SCE_BB_IDENTIFIER); +			} else if (!isspace(sc.ch)) { +				sc.SetState(SCE_BB_ERROR); +			} +		} +		if (!sc.More()) +			break; +	} +	sc.Complete(); +} + +static void FoldBBDoc(unsigned int startPos, int length, int, +	WordList *[], Accessor &styler) { +	int line = styler.GetLine(startPos); +	int level = styler.LevelAt(line); +	int go = 0; +	int endPos = startPos + length; +	char word[256]; +	int wordlen = 0; +	int i; +	for (i = startPos; i < endPos; i++) { +		int c = styler.SafeGetCharAt(i); +		if (wordlen) { +			word[wordlen] = static_cast<char>(tolower(c)); +			if (isspace(c)) { +				word[wordlen] = '\0'; +				if (!strcmp(word, "function") || +					!strcmp(word, "type")) { +					level |= SC_FOLDLEVELHEADERFLAG; +					go = 1; +				} +				if (!strcmp(word, "end function") || +					!strcmp(word, "end type")) { +					go = -1; +				} +				// Treat any whitespace as single blank. +				if (!isspace (word[wordlen - 1])) { +					word[wordlen] = ' '; +					wordlen++; +				} +			} else { +				wordlen++; +			} +		} else { +			if (!isspace(c)) +				word[wordlen++] = static_cast<char>(tolower(c)); +		} +		if (c == '\n') { +			if (wordlen == 0) +				level |= SC_FOLDLEVELWHITEFLAG; +			if (level != styler.LevelAt(line)) +				styler.SetLevel(line, level); +			wordlen = 0; +			level &= ~SC_FOLDLEVELHEADERFLAG; +			level &= ~SC_FOLDLEVELWHITEFLAG; +			level += go; +			go = 0; +			line++; +		} +	} +} + +static const char * const bbWordListDesc[] = { +	"Blitzbasic Keywords", +	"user1", +	"user2", +	"user3", +	0 +}; + +LexerModule lmBB(SCLEX_BB, ColouriseBBDoc, "bb", FoldBBDoc, bbWordListDesc); + diff --git a/win32/makefile b/win32/makefile index 473ffe0f2..24873dc79 100644 --- a/win32/makefile +++ b/win32/makefile @@ -52,12 +52,12 @@ deps:  #**LEXOBJS=\\\n\(\*.o \)  LEXOBJS=\  LexAda.o LexAPDL.o LexAsm.o LexAsn1.o LexAU3.o LexAVE.o LexBaan.o LexBash.o \ -LexBullant.o LexCLW.o LexConf.o LexCPP.o LexCrontab.o LexCSS.o LexEiffel.o \ -LexErlang.o LexEScript.o LexForth.o LexFortran.o LexGui4Cli.o LexHTML.o \ -LexKix.o LexLisp.o LexLout.o LexLua.o LexMatlab.o LexMetapost.o LexMMIXAL.o \ -LexMPT.o LexMSSQL.o LexNsis.o LexOthers.o LexPascal.o LexPB.o LexPerl.o \ -LexPOV.o LexPS.o LexPython.o LexRuby.o LexScriptol.o LexSpecman.o LexSQL.o \ -LexTeX.o LexVB.o LexVerilog.o LexVHDL.o LexYAML.o +LexBB.o LexBullant.o LexCLW.o LexConf.o LexCPP.o LexCrontab.o LexCSS.o \ +LexEiffel.o LexErlang.o LexEScript.o LexForth.o LexFortran.o LexGui4Cli.o \ +LexHTML.o LexKix.o LexLisp.o LexLout.o LexLua.o LexMatlab.o LexMetapost.o \ +LexMMIXAL.o LexMPT.o LexMSSQL.o LexNsis.o LexOthers.o LexPascal.o LexPB.o \ +LexPerl.o LexPOV.o LexPS.o LexPython.o LexRuby.o LexScriptol.o LexSpecman.o \ +LexSQL.o LexTeX.o LexVB.o LexVerilog.o LexVHDL.o LexYAML.o  #--Autogenerated -- end of automatically generated section  SOBJS	= ScintillaWin.o ScintillaBase.o Editor.o Document.o \ diff --git a/win32/scintilla.mak b/win32/scintilla.mak index 99d978e8a..6bedadc8b 100644 --- a/win32/scintilla.mak +++ b/win32/scintilla.mak @@ -117,6 +117,7 @@ LEXOBJS=\  	$(DIR_O)\LexAVE.obj \  	$(DIR_O)\LexBaan.obj \  	$(DIR_O)\LexBash.obj \ +	$(DIR_O)\LexBB.obj \  	$(DIR_O)\LexBullant.obj \  	$(DIR_O)\LexCLW.obj \  	$(DIR_O)\LexConf.obj \ @@ -281,6 +282,8 @@ $(DIR_O)\LexBaan.obj: ..\src\LexBaan.cxx $(LEX_HEADERS)  $(DIR_O)\LexBash.obj: ..\src\LexBash.cxx $(LEX_HEADERS) +$(DIR_O)\LexBB.obj: ..\src\LexBB.cxx $(LEX_HEADERS) +  $(DIR_O)\LexBullant.obj: ..\src\LexBullant.cxx $(LEX_HEADERS)  $(DIR_O)\LexCLW.obj: ..\src\LexCLW.cxx $(LEX_HEADERS) diff --git a/win32/scintilla_vc6.mak b/win32/scintilla_vc6.mak index 29d6a493e..e71d1c27c 100644 --- a/win32/scintilla_vc6.mak +++ b/win32/scintilla_vc6.mak @@ -119,6 +119,7 @@ LEXOBJS=\  	$(DIR_O)\LexAVE.obj \  	$(DIR_O)\LexBaan.obj \  	$(DIR_O)\LexBash.obj \ +	$(DIR_O)\LexBB.obj \  	$(DIR_O)\LexBullant.obj \  	$(DIR_O)\LexCLW.obj \  	$(DIR_O)\LexConf.obj \ @@ -283,6 +284,8 @@ $(DIR_O)\LexBaan.obj: ..\src\LexBaan.cxx $(LEX_HEADERS)  $(DIR_O)\LexBash.obj: ..\src\LexBash.cxx $(LEX_HEADERS) +$(DIR_O)\LexBB.obj: ..\src\LexBB.cxx $(LEX_HEADERS) +  $(DIR_O)\LexBullant.obj: ..\src\LexBullant.cxx $(LEX_HEADERS)  $(DIR_O)\LexCLW.obj: ..\src\LexCLW.cxx $(LEX_HEADERS) | 
