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) |