From a5b86a91dae865a58b5df7f8153a5842c8eaedea Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Wed, 18 Apr 2018 16:28:45 +0200 Subject: [PATCH] + fix: missing files for Scintilla Lib v404 --- scintilla/lexers/LexMaxima.cxx | 222 +++++++++++++++++++++++++++++++ scintilla/version.txt | 2 +- scintilla/win32/SciTE.properties | 21 +++ scintilla/win32/ScintillaDLL.cxx | 35 +++++ scintilla/win32/ScintillaWin.h | 15 +++ src/VersionEx.h | 6 +- 6 files changed, 297 insertions(+), 4 deletions(-) create mode 100644 scintilla/lexers/LexMaxima.cxx create mode 100644 scintilla/win32/SciTE.properties create mode 100644 scintilla/win32/ScintillaDLL.cxx create mode 100644 scintilla/win32/ScintillaWin.h diff --git a/scintilla/lexers/LexMaxima.cxx b/scintilla/lexers/LexMaxima.cxx new file mode 100644 index 000000000..4897c995e --- /dev/null +++ b/scintilla/lexers/LexMaxima.cxx @@ -0,0 +1,222 @@ +// Scintilla source code edit control +/** @file LexMaxima.cxx + ** Lexer for Maxima (http://maxima.sourceforge.net). + ** Written by Gunter Königsmann based on the lisp lexer by Alexey Yutkin and Neil Hodgson . + **/ +// Copyright 2018 by Gunter Königsmann +// The License.txt file describes the conditions under which this software may be distributed. + +#include +#include +#include +#include +#include +#include + +#include "ILexer.h" +#include "Scintilla.h" +#include "SciLexer.h" + +#include "WordList.h" +#include "LexAccessor.h" +#include "Accessor.h" +#include "StyleContext.h" +#include "CharacterSet.h" +#include "LexerModule.h" +using namespace Scintilla; + +static inline bool isMaximaoperator(char ch) { + return (ch == '\'' || ch == '`' || ch == '(' || + ch == ')' || ch == '[' || ch == ']' || + ch == '{' || ch == '}' || ch == '!' || + ch == '*' || ch == '/' || ch == '^' || + ch == ',' || ch == ':' || ch == '+' || + ch == '-'); +} + +static void ColouriseMaximaDoc(Sci_PositionU startPos, Sci_Position length, int lastStyle, + WordList *[], + Accessor &styler) { + + styler.StartAt(startPos); + + Sci_PositionU lengthDoc = startPos + length; + styler.StartSegment(startPos); + + Sci_PositionU i = startPos; + + // If we are in the middle of a comment we go back to its start before highlighting + if(lastStyle == SCE_MAXIMA_COMMENT) + { + while((i>0) && + !((styler.SafeGetCharAt(i+1) == '*') && (styler.SafeGetCharAt(i) == '/'))) + i--; + } + + for (; i < lengthDoc; i++) { + char ch = styler.SafeGetCharAt(i); + char chNext = styler.SafeGetCharAt(i + 1); + + if (styler.IsLeadByte(ch)) + continue; + + // Handle comments. + // Comments start with /* and end with */ + if((ch == '/') && (chNext == '*')) + { + i++;i++; + + chNext = styler.SafeGetCharAt(i); + for (; i < lengthDoc; i++) + { + ch = chNext; + chNext = styler.SafeGetCharAt(i + 1); + if((ch == '*') && (chNext == '/')) + { + i++; + i++; + break; + } + } + if(i > lengthDoc) + i = lengthDoc; + i--; + styler.ColourTo(i, SCE_MAXIMA_COMMENT); + continue; + } + + // Handle Operators + if(isMaximaoperator(ch)) + { + styler.ColourTo(i, SCE_MAXIMA_OPERATOR); + continue; + } + + // Handle command endings. + if((ch == '$') || (ch == ';')) + { + styler.ColourTo(i, SCE_MAXIMA_COMMANDENDING); + continue; + } + + // Handle numbers. Numbers always begin with a digit. + if(IsASCII(ch) && isdigit(ch)) + { + i++; + for (; i < lengthDoc; i++) + { + ch = chNext; + chNext = styler.SafeGetCharAt(i + 1); + + if(ch == '.') + continue; + + // A "e" or similar can be followed by a "+" or a "-" + if(((ch == 'e') || (ch == 'b') || (ch == 'g') || (ch == 'f')) && + ((chNext == '+') || (chNext == '-'))) + { + i++; + chNext = styler.SafeGetCharAt(i + 1); + continue; + } + + if(!IsASCII(ch) || !(isdigit(ch) || islower(ch) || isupper(ch))) + { + i--; + break; + } + } + styler.ColourTo(i, SCE_MAXIMA_NUMBER); + continue; + } + + // Handle strings + if(ch == '\"') + { + i++; + for (; i < lengthDoc; i++) + { + ch = chNext; + chNext = styler.SafeGetCharAt(i + 1); + if(ch == '\\') + i++; + else + { + if(ch == '\"') + break; + } + } + styler.ColourTo(i, SCE_MAXIMA_STRING); + continue; + } + + // Handle keywords. Maxima treats Non-ASCII chars as ordinary letters. + if(((!IsASCII(ch))) || isalpha(ch) || (ch == '_')) + { + char cmd[100]; + int cmdidx = 0; + memset(cmd,0,100); + cmd[cmdidx++] = ch; + i++; + for (; i < lengthDoc; i++) + { + ch = chNext; + chNext = styler.SafeGetCharAt(i + 1); + if(ch == '\\') + { + if(cmdidx < 99) + cmd[cmdidx++] = ch; + i++; + if(cmdidx < 99) + cmd[cmdidx++] = ch; + continue; + } + if(isMaximaoperator(ch) || ((IsASCII(ch) && !isalpha(ch) && !isdigit(ch) && (ch != '_')))) + { + i--; + break; + } + if(cmdidx < 99) + cmd[cmdidx++] = ch; + } + + // A few known keywords + if( + (strncmp(cmd,"if",99) == 0) || + (strncmp(cmd,"then",99) == 0) || + (strncmp(cmd,"else",99) == 0) || + (strncmp(cmd,"thru",99) == 0) || + (strncmp(cmd,"for",99) == 0) || + (strncmp(cmd,"while",99) == 0) || + (strncmp(cmd,"do",99) == 0) + ) + { + styler.ColourTo(i, SCE_MAXIMA_COMMAND); + continue; + } + + // All other keywords are functions if they are followed + // by an opening parenthesis + char nextNonwhitespace = ' '; + for (Sci_PositionU o = i + 1; o < lengthDoc; o++) + { + nextNonwhitespace = styler.SafeGetCharAt(o); + if(!IsASCII(nextNonwhitespace) || !isspacechar(nextNonwhitespace)) + break; + } + if(nextNonwhitespace == '(') + { + styler.ColourTo(i, SCE_MAXIMA_COMMAND); + } + else + { + styler.ColourTo(i, SCE_MAXIMA_VARIABLE); + } + continue; + } + + styler.ColourTo(i-1, SCE_MAXIMA_UNKNOWN); + } +} + +LexerModule lmMaxima(SCLEX_MAXIMA, ColouriseMaximaDoc, "maxima", 0, 0); diff --git a/scintilla/version.txt b/scintilla/version.txt index ec8785ec9..f1b1cb3af 100644 --- a/scintilla/version.txt +++ b/scintilla/version.txt @@ -1 +1 @@ -405 +404 diff --git a/scintilla/win32/SciTE.properties b/scintilla/win32/SciTE.properties new file mode 100644 index 000000000..5856b8de1 --- /dev/null +++ b/scintilla/win32/SciTE.properties @@ -0,0 +1,21 @@ +command.build.SConstruct=scons.bat . +command.name.1.SConstruct=scons clean +command.1.SConstruct=scons.bat --clean . + +command.build.*.mak=nmake -f $(FileNameExt) DEBUG=1 QUIET=1 +command.name.1.*.mak=nmake clean +command.1.*.mak=nmake -f $(FileNameExt) clean +command.name.2.*.mak=Borland Make +command.2.*.mak=make -f $(FileNameExt) +command.subsystem.2.*.mak=0 +command.name.3.*.mak=make clean +command.3.*.mak=make -f $(FileNameExt) clean +command.name.4.*.mak=make debug +command.4.*.mak=make DEBUG=1 -f $(FileNameExt) +command.name.5.*.mak=nmake debug +command.5.*.mak=nmake DEBUG=1 -f $(FileNameExt) +# SciTE.properties is the per directory local options file and can be used to override +# settings made in SciTEGlobal.properties +command.build.*.cxx=nmake -f scintilla.mak DEBUG=1 QUIET=1 +command.build.*.h=nmake -f scintilla.mak DEBUG=1 QUIET=1 +command.build.*.rc=nmake -f scintilla.mak DEBUG=1 QUIET=1 diff --git a/scintilla/win32/ScintillaDLL.cxx b/scintilla/win32/ScintillaDLL.cxx new file mode 100644 index 000000000..1ecf1c16e --- /dev/null +++ b/scintilla/win32/ScintillaDLL.cxx @@ -0,0 +1,35 @@ +// Scintilla source code edit control +/** @file ScintillaDLL.cxx + ** DLL entry point for Scintilla. + **/ +// Copyright 1998-2018 by Neil Hodgson +// The License.txt file describes the conditions under which this software may be distributed. + +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x0500 +#undef WINVER +#define WINVER 0x0500 +#include + +#include "Scintilla.h" +#include "ScintillaWin.h" + +extern "C" +__declspec(dllexport) +sptr_t __stdcall Scintilla_DirectFunction( + ScintillaWin *sci, UINT iMessage, uptr_t wParam, sptr_t lParam) { + return Scintilla::DirectFunction(sci, iMessage, wParam, lParam); +} + +extern "C" int APIENTRY DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpvReserved) { + //Platform::DebugPrintf("Scintilla::DllMain %d %d\n", hInstance, dwReason); + if (dwReason == DLL_PROCESS_ATTACH) { + if (!Scintilla_RegisterClasses(hInstance)) + return FALSE; + } else if (dwReason == DLL_PROCESS_DETACH) { + if (lpvReserved == NULL) { + Scintilla::ResourcesRelease(true); + } + } + return TRUE; +} diff --git a/scintilla/win32/ScintillaWin.h b/scintilla/win32/ScintillaWin.h new file mode 100644 index 000000000..6d4d2ce26 --- /dev/null +++ b/scintilla/win32/ScintillaWin.h @@ -0,0 +1,15 @@ +// Scintilla source code edit control +/** @file ScintillaWin.h + ** Define functions from ScintillaWin.cxx that can be called from ScintillaDLL.cxx. + **/ +// Copyright 1998-2018 by Neil Hodgson +// The License.txt file describes the conditions under which this software may be distributed. + +class ScintillaWin; + +namespace Scintilla { + +int ResourcesRelease(bool fromDllMain); +sptr_t DirectFunction(ScintillaWin *sci, UINT iMessage, uptr_t wParam, sptr_t lParam); + +} diff --git a/src/VersionEx.h b/src/VersionEx.h index 4d35455d9..eaa49d527 100644 --- a/src/VersionEx.h +++ b/src/VersionEx.h @@ -5,9 +5,9 @@ // ////////////////////////////////////////////////////////// #define VERSION_MAJOR 3 #define VERSION_MINOR 18 -#define VERSION_REV 329 -#define VERSION_BUILD 960 -#define SCINTILLA_VER 403 +#define VERSION_REV 418 +#define VERSION_BUILD 978 +#define SCINTILLA_VER 404 #define ONIGMO_REGEX_VER 6.1.3 #define VERSION_PATCH L" develop" #define VERSIONA_PATCH " develop"