aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--doc/ScintillaHistory.html1
-rw-r--r--gtk/makefile12
-rw-r--r--gtk/scintilla.mak3
-rw-r--r--include/SciLexer.h12
-rw-r--r--include/Scintilla.iface14
-rw-r--r--src/KeyWords.cxx1
-rw-r--r--src/LexBB.cxx178
-rw-r--r--win32/makefile12
-rw-r--r--win32/scintilla.mak3
-rw-r--r--win32/scintilla_vc6.mak3
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)