From 71e569cde5c06acd3d0dfbced02555f21774f31a Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Tue, 11 Jun 2019 20:48:43 +0200 Subject: [PATCH] + rm: remove (old) AHK Lexer in favourite of modern AHK_L Lexer --- sciXlexers/SciXLexer.h | 25 +- sciXlexers/{ => orig}/LexAHK.cxx | 0 sciXlexers/orig/LexAHKL.cxx | 771 ++++++++++++++++++ .../orig}/styleLexAHK.c | 0 scintilla/Scintilla.vcxproj.filters | 3 - scintilla/src/Catalogue.cxx | 1 - src/Notepad3.c | 7 +- src/Notepad3.vcxproj | 1 - src/Notepad3.vcxproj.filters | 3 - src/StyleLexers/EditLexer.h | 1 - src/Styles.c | 1 - src/Styles.h | 2 +- 12 files changed, 777 insertions(+), 38 deletions(-) rename sciXlexers/{ => orig}/LexAHK.cxx (100%) create mode 100644 sciXlexers/orig/LexAHKL.cxx rename {src/StyleLexers => sciXlexers/orig}/styleLexAHK.c (100%) diff --git a/sciXlexers/SciXLexer.h b/sciXlexers/SciXLexer.h index e5b6739b5..bff6efa92 100644 --- a/sciXlexers/SciXLexer.h +++ b/sciXlexers/SciXLexer.h @@ -1,35 +1,12 @@ #ifndef SCIXLEXER_H #define SCIXLEXER_H -#define SCLEX_AHK 200 -#define SCLEX_AHKL 201 +#define SCLEX_AHKL 200 // ----------------------------------------------------------------------------- // !!!!! ADD Lexer Linkage in: Notepad3\scintilla\src\Catalogue.cxx !!!!! // ----------------------------------------------------------------------------- -#define SCE_AHK_DEFAULT 0 -#define SCE_AHK_COMMENTLINE 1 -#define SCE_AHK_COMMENTBLOCK 2 -#define SCE_AHK_ESCAPE 3 -#define SCE_AHK_SYNOPERATOR 4 -#define SCE_AHK_EXPOPERATOR 5 -#define SCE_AHK_STRING 6 -#define SCE_AHK_NUMBER 7 -#define SCE_AHK_IDENTIFIER 8 -#define SCE_AHK_VARREF 9 -#define SCE_AHK_LABEL 10 -#define SCE_AHK_WORD_CF 11 -#define SCE_AHK_WORD_CMD 12 -#define SCE_AHK_WORD_FN 13 -#define SCE_AHK_WORD_DIR 14 -#define SCE_AHK_WORD_KB 15 -#define SCE_AHK_WORD_VAR 16 -#define SCE_AHK_WORD_SP 17 -#define SCE_AHK_WORD_UD 18 -#define SCE_AHK_VARREFKW 19 -#define SCE_AHK_ERROR 20 - #define SCE_AHKL_NEUTRAL 0 #define SCE_AHKL_IDENTIFIER 1 #define SCE_AHKL_COMMENTDOC 2 diff --git a/sciXlexers/LexAHK.cxx b/sciXlexers/orig/LexAHK.cxx similarity index 100% rename from sciXlexers/LexAHK.cxx rename to sciXlexers/orig/LexAHK.cxx diff --git a/sciXlexers/orig/LexAHKL.cxx b/sciXlexers/orig/LexAHKL.cxx new file mode 100644 index 000000000..dbd33ddde --- /dev/null +++ b/sciXlexers/orig/LexAHKL.cxx @@ -0,0 +1,771 @@ +// Scintilla source code edit control +/** @file LexAHKL.cxx + ** Lexer AutoHotkey L + ** Created by Isaias "RaptorX" Baez (graptorx@gmail.com) + **/ +// Copyright ©2013 Isaias "RaptorX" Baez - [GPLv3] +// The License.txt file describes the conditions under which this software may be distributed. + +#include +#include +#include +#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" +#include + +#ifdef SCI_NAMESPACE +using namespace Scintilla; +#endif + +static const char *const ahklWordLists[] = { + "Directives", + "Commands", + "Command Parameters", + "Control Flow", + "Built-in Functions", + "Built-in Variables", + "Keyboard & Mouse Keys", + "User Defined 1", + "User Defined 2", + 0}; + +class LexerAHKL : public ILexer { + + CharacterSet valLabel; + CharacterSet valHotkeyMod; + CharacterSet valIdentifier; + CharacterSet valHotstringOpt; + CharacterSet valDocComment; + + WordList directives; + WordList commands; + WordList parameters; + WordList flow; + WordList functions; + WordList variables; + WordList keys; + WordList user1; + WordList user2; + + CharacterSet ExpOperator; + CharacterSet SynOperator; + CharacterSet EscSequence; + +public: + LexerAHKL() : + valLabel(CharacterSet::setAlphaNum, "@#$_~!^&*()+[]\';./\\<>?|{}-=\""), + valHotkeyMod(CharacterSet::setDigits, "#!^+&<>*~$"), + valIdentifier(CharacterSet::setAlphaNum, "@#$_"), + valHotstringOpt(CharacterSet::setDigits, "*?BbCcEeIiKkOoPpRrSsZz"), + valDocComment(CharacterSet::setNone, "'`\""), + ExpOperator(CharacterSet::setNone, "+-*/!~&|^<>.:"), + SynOperator(CharacterSet::setNone, "+-*/!~&|^<>.:()[]?,{}"), + EscSequence(CharacterSet::setNone, ",%`;nrbtvaf") { + } + + virtual ~LexerAHKL() { + } + void SCI_METHOD Release() { + delete this; + } + int SCI_METHOD Version() const { + return lvOriginal; + } + const char * SCI_METHOD PropertyNames() { + return ""; + } + int SCI_METHOD PropertyType(const char *name) { + return 0; + } + const char * SCI_METHOD DescribeProperty(const char *name) { + return ""; + } + int SCI_METHOD PropertySet(const char *key, const char *val) { + return 0; + } + const char * SCI_METHOD DescribeWordListSets() { + return 0; + } + void * SCI_METHOD PrivateCall(int, void *) { + return 0; + } + static ILexer *LexerFactory() { + return new LexerAHKL(); + } + + int SCI_METHOD WordListSet(int n, const char *wl); + void SCI_METHOD Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess); + void SCI_METHOD Fold(unsigned int startPos, int length, int initStyle, IDocument *pAccess); +}; + +int SCI_METHOD LexerAHKL::WordListSet(int n, const char *wl) +{ + WordList *wordListN = 0; + switch (n) { + + case 0: + wordListN = &directives; + break; + + case 1: + wordListN = &commands; + break; + + case 2: + wordListN = ¶meters; + break; + + case 3: + wordListN = &flow; + break; + + case 4: + wordListN = &functions; + break; + + case 5: + wordListN = &variables; + break; + + case 6: + wordListN = &keys; + break; + + case 7: + wordListN = &user1; + break; + + case 8: + wordListN = &user2; + break; + + } + + int firstModification = -1; + if (wordListN) { + WordList wlNew; + wlNew.Set(wl); + if (*wordListN != wlNew) { + wordListN->Set(wl); + firstModification = 0; + } + } + return firstModification; +} + +void SCI_METHOD LexerAHKL::Lex(unsigned int startPos, int length, int initStyle, IDocument *pAccess) +{ + LexAccessor styler(pAccess); + StyleContext sc(startPos, length, initStyle, styler); + + // non-lexical states + int expLevel = 0; + int mainState = SCE_AHKL_NEUTRAL; // Used on some special cases like objects where SCE_AHKL_NEUTRAL is set but + // we basically come from SCE_AHKL_OBJECT and we need to be aware of it + bool OnlySpaces; + bool validLabel; + bool validFunction; + + bool inKey; + bool inString; + bool inCommand; + bool inHotstring; + bool inExpString; + bool inDocComment; + bool inExpression; + + bool inStringBlk = (sc.state == SCE_AHKL_STRINGOPTS || sc.state == SCE_AHKL_STRINGBLOCK || sc.state == SCE_AHKL_STRINGCOMMENT); + bool inCommentBlk = (sc.state == SCE_AHKL_COMMENTDOC || sc.state == SCE_AHKL_COMMENTBLOCK); + + for (; sc.More(); sc.Forward()) { + + + // AutoHotkey usually resets lexical state in a per line base except in Comment and String Blocks + if (sc.atLineStart) { + + expLevel = 0; + mainState = SCE_AHKL_NEUTRAL; + + OnlySpaces = true, validLabel = true, validFunction = true, inKey = false, inString = false; + inDocComment = false, inCommand = false, inHotstring = false, inExpression = false, inExpString = false; + + if (!inStringBlk && !inCommentBlk) + sc.SetState(SCE_AHKL_NEUTRAL); + + } + + // Comments are allowed almost everywhere + if (!inStringBlk && !inCommentBlk && (OnlySpaces || isspace(sc.chPrev)) && sc.ch == ';') + sc.SetState(SCE_AHKL_COMMENTLINE); + + // Exit Current State + switch (sc.state) { + + case SCE_AHKL_IDENTIFIER: { + if (sc.atLineEnd || !valIdentifier.Contains(sc.ch)) { // Check for match after typing whole words or punctuation signs + + char identifier[256]; + sc.GetCurrentLowered(identifier, sizeof(identifier)); + + if (!sc.Match('(')) + validFunction = false; + + if (directives.InList(identifier)) { + + sc.ChangeState(SCE_AHKL_DIRECTIVE); + + } else if (!inExpression && !inCommand && !inKey && sc.ch != '(' && commands.InList(identifier)) { + + inCommand = true; + sc.ChangeState(SCE_AHKL_COMMAND); + + } else if (inCommand && parameters.InList(identifier)) { + + sc.ChangeState(SCE_AHKL_PARAM); + + } else if (!inKey && flow.InList(identifier)) { // avoid conflicts with key identifiers (e.g. pause) + + sc.ChangeState(SCE_AHKL_CONTROLFLOW); + + } else if (sc.ch == '(' && functions.InList(identifier)) { + + inCommand = true; + sc.ChangeState(SCE_AHKL_BUILTINFUNCTION); + + } else if (variables.InList(identifier)) { + + sc.ChangeState(SCE_AHKL_BUILTINVAR); + + } else if (inKey && keys.InList(identifier)) { + + sc.ChangeState(SCE_AHKL_KEY); + + } else if (user1.InList(identifier)) { + + sc.ChangeState(SCE_AHKL_USERDEFINED1); + + } else if (user2.InList(identifier)) { + + sc.ChangeState(SCE_AHKL_USERDEFINED2); + + } else if (sc.ch == '{') { + + inKey = true; inCommand = false; + + } else if (inExpression && !(sc.ch == '(' || sc.ch == '[' || sc.ch == '.')) { // Dont lex as a variable if it is a function or an array + + sc.ChangeState(SCE_AHKL_VAR); + + } else if (!inExpression && !ExpOperator.Contains(sc.chPrev) && sc.ch == '=') { + + inString = true; + sc.ForwardSetState(SCE_AHKL_STRING); + + continue; + + } else if (!inCommand && ExpOperator.Contains(sc.ch) && sc.chNext == '=') { + + sc.SetState(SCE_AHKL_ERROR); + + } else if (validFunction && sc.ch == '(') { + + sc.ChangeState(SCE_AHKL_USERFUNCTION); + sc.SetState(SCE_AHKL_NEUTRAL); + + } else if (valLabel.Contains(sc.ch) && !(sc.ch == '(' || sc.ch == '[' || sc.ch == '.')) { + + continue; + + } else if (!inCommand && (sc.ch == '[' || sc.ch == '.')) { + + if (sc.ch == '.' && valIdentifier.Contains(sc.chNext)) { + + mainState = SCE_AHKL_OBJECT; + + sc.ChangeState(SCE_AHKL_OBJECT); + sc.SetState(SCE_AHKL_NEUTRAL); + + } else if (sc.ch == '.' && !valIdentifier.Contains(sc.chNext)) { + + sc.ChangeState(SCE_AHKL_ERROR); + sc.SetState(SCE_AHKL_ERROR); + + break; + + } else if (sc.ch == '[') { + + sc.ChangeState(SCE_AHKL_OBJECT); + sc.SetState(SCE_AHKL_NEUTRAL); + + } + + } else if (mainState == SCE_AHKL_OBJECT) { // Special object case + + mainState == SCE_AHKL_NEUTRAL; + + if (sc.ch == '(') { + + sc.ChangeState(SCE_AHKL_USERFUNCTION); + sc.SetState(SCE_AHKL_NEUTRAL); + + } else { + + sc.ChangeState(SCE_AHKL_VAR); + sc.SetState(SCE_AHKL_NEUTRAL); + + } + + } else if (!validLabel && sc.ch == ':') { + + sc.ChangeState(SCE_AHKL_IDENTIFIER); + + } else if (sc.ch == ':' && sc.chNext != ':' && sc.chNext != '/' && sc.chNext != '\\') { + + sc.ChangeState(SCE_AHKL_LABEL); + sc.ForwardSetState(SCE_AHKL_ERROR); + + break; + + } else if (!inHotstring && sc.ch == ':' && sc.chNext == ':') { + + sc.ChangeState(SCE_AHKL_HOTKEY); + sc.Forward(2); + sc.SetState(SCE_AHKL_NEUTRAL); + + break; + + } + + validLabel = false; + sc.SetState(SCE_AHKL_NEUTRAL); + + } else if ((sc.chPrev == 'x' || sc.chPrev == 'y'|| sc.chPrev == 'w'|| sc.chPrev == 'h') + && inCommand && isdigit(sc.ch) ) { // Special number cases when entering sizes + + sc.SetState(SCE_AHKL_DECNUMBER); + + } + + break; + } + + case SCE_AHKL_COMMENTDOC: { + if (OnlySpaces && sc.Match('*','/')) { + + inCommentBlk = false; + sc.Forward(2); + sc.SetState(SCE_AHKL_NEUTRAL); + + } else if ((OnlySpaces || isspace(sc.chPrev)) && + ((sc.ch == '@' && isalnum(sc.chNext)) || valDocComment.Contains(sc.ch))) { + + if (valDocComment.Contains(sc.ch)) + inDocComment = true; + + sc.SetState(SCE_AHKL_COMMENTKEYWORD); + + } + break; + } + + case SCE_AHKL_COMMENTKEYWORD: { + if (sc.atLineStart || (!inDocComment && sc.ch == ':') + || (inDocComment && valDocComment.Contains(sc.ch))) + sc.ForwardSetState(SCE_AHKL_COMMENTDOC); + break; + } + + case SCE_AHKL_COMMENTBLOCK: { + if (OnlySpaces && sc.Match('*','/')) { + + inCommentBlk = false; + sc.Forward(2); + sc.SetState(SCE_AHKL_NEUTRAL); + + } + break; + } + + case SCE_AHKL_HEXNUMBER: { + if (isspace(sc.ch) || SynOperator.Contains(sc.ch)) + sc.SetState(SCE_AHKL_NEUTRAL); + + else if (!isxdigit(sc.ch)) + sc.ChangeState(SCE_AHKL_IDENTIFIER); + break; + } + + case SCE_AHKL_DECNUMBER: { + if (!isdigit(sc.ch)) { + + if (sc.ch == 'x' || sc.ch == 'X') + sc.ChangeState(SCE_AHKL_HEXNUMBER); + + else if (isalpha(sc.ch)) + sc.ChangeState(SCE_AHKL_IDENTIFIER); + + else + sc.SetState(SCE_AHKL_NEUTRAL); + + } + break; + } + + case SCE_AHKL_STRING: { + if (inExpression && sc.atLineEnd) { + + sc.ChangeState(SCE_AHKL_ERROR); + + } else if (inExpression && sc.ch == '"') { + + if (sc.chNext == '"') { // In expression string, double quotes are doubled to escape them so skip it + + sc.Forward(); + + } else { + + inExpString = false; + sc.ForwardSetState(SCE_AHKL_NEUTRAL); + + } + + } else if (!inExpression && sc.ch == '%' && valIdentifier.Contains(sc.chNext)) { + + sc.SetState(SCE_AHKL_NEUTRAL); + sc.ForwardSetState(SCE_AHKL_VAR); + + } + break; + } + + case SCE_AHKL_STRINGOPTS: { + if (sc.atLineStart) + sc.SetState(SCE_AHKL_STRINGBLOCK); + break; + } + + case SCE_AHKL_STRINGBLOCK: { + if (OnlySpaces && sc.ch == ')') { + + inStringBlk = false; + sc.SetState(SCE_AHKL_NEUTRAL); + + if (sc.chNext != ',') + sc.ForwardSetState(SCE_AHKL_ERROR); + else + inCommand = true; + } + + // if ((OnlySpaces || isspace(sc.chPrev)) && sc.Match(';')) { + + // sc.SetState(SCE_AHKL_STRINGCOMMENT); + + // } + break; + } + + case SCE_AHKL_ESCAPESEQ: { + sc.ForwardSetState(SCE_AHKL_NEUTRAL); + break; + } + + case SCE_AHKL_VAR: { + if (!valIdentifier.Contains(sc.ch) && sc.ch != '%') { + + sc.ChangeState(SCE_AHKL_ERROR); + + } else if (sc.ch == '%') { + + sc.SetState(SCE_AHKL_NEUTRAL); + sc.ForwardSetState(SCE_AHKL_NEUTRAL); + + if (inString ) + sc.ForwardSetState(SCE_AHKL_STRING); + + } + break; + } + + case SCE_AHKL_VARREF: { + if (!valIdentifier.Contains(sc.ch) && sc.ch != '%') { + + sc.ChangeState(SCE_AHKL_ERROR); + + } else if (sc.ch == '%') { + + sc.SetState(SCE_AHKL_NEUTRAL); + continue; + + } + + break; + } + + case SCE_AHKL_HOTSTRINGOPT: { + if (sc.ch == ':') { + + sc.ForwardSetState(SCE_AHKL_HOTSTRING); + + } else if (!valHotstringOpt.Contains(sc.ch)) { + + sc.SetState(SCE_AHKL_ERROR); + + } + break; + } + + case SCE_AHKL_HOTSTRING: { + if (sc.Match(':',':')) { + + sc.SetState(SCE_AHKL_HOTSTRINGOPT); + sc.Forward(2); + sc.SetState(SCE_AHKL_STRING); + + } + break; + } + + case SCE_AHKL_ERROR: { + if (inExpression && inExpString && sc.ch == '"') { + + sc.ChangeState(SCE_AHKL_STRING); + + } else if (sc.ch == '%') { + + sc.SetState(SCE_AHKL_NEUTRAL); + + } else if (inHotstring && valHotstringOpt.Contains(sc.ch)) { + + sc.SetState(SCE_AHKL_HOTSTRINGOPT); + + } else if (inHotstring && sc.ch == ':') { + + sc.SetState(SCE_AHKL_HOTSTRINGOPT); + sc.ForwardSetState(SCE_AHKL_HOTSTRING); + + } + break; + } + + } + + // Enter New State + if (sc.state == SCE_AHKL_NEUTRAL) { + + // Handle Expressions + if ((OnlySpaces && sc.ch == '.') || sc.Match(" % ") || (sc.ch == '(') + || ((valIdentifier.Contains(sc.chPrev) || isspace(sc.chPrev)) && sc.ch == '?') + || ((valIdentifier.Contains(sc.chPrev) || isspace(sc.chPrev)) && ExpOperator.Contains(sc.ch) && sc.chNext == '=') + || (valIdentifier.Contains(sc.chPrev) && sc.ch == '[')) { + + expLevel += 1; + inExpression = true; + + if (sc.Match(" % ")) + inCommand = false; + + } else if (sc.ch == ']' || sc.ch == ')') { + + expLevel -= 1, inCommand = false; + + if (expLevel == 0) + inExpression = false; + + } + + // Handle Command continuation section + if ((OnlySpaces && sc.ch == ',') || (OnlySpaces && sc.Match(')', ','))) + inCommand = true; + + if ((!sc.atLineEnd && valIdentifier.Contains(sc.ch)) + || (!inExpression && valHotkeyMod.Contains(sc.ch) && sc.chNext != '=')) { + + if (valIdentifier.Contains(sc.ch)) + validFunction = true; + + if (isdigit(sc.ch)) + sc.SetState(SCE_AHKL_DECNUMBER); + + else if (inCommand && sc.ch == '+') + continue; + + else + sc.SetState(SCE_AHKL_IDENTIFIER); + + } else if (OnlySpaces && sc.Match('/', '*')) { + + inCommentBlk = true; + sc.ChangeState(SCE_AHKL_COMMENTBLOCK); + + if (sc.Match("/**") && !sc.Match("/***")) + sc.ChangeState(SCE_AHKL_COMMENTDOC); + + } else if (sc.ch == ']') { + + mainState == SCE_AHKL_NEUTRAL; // Reset object state + + } else if (sc.ch == ')') { + + // inCommand = false; + + } else if (sc.ch == '{') { + + inKey = true; inCommand = false; + + } else if (sc.ch == '}') { + + inKey = false; + + } else if (sc.ch == '`' && EscSequence.Contains(sc.chNext)) { + + sc.SetState(SCE_AHKL_ESCAPESEQ); + + } else if (inExpression && sc.ch == '"') { + + inExpString = true; inString = false; + sc.SetState(SCE_AHKL_STRING); + + } else if (!inExpression && !ExpOperator.Contains(sc.chPrev) && sc.ch == '=') { + + inString = true; + sc.ForwardSetState(SCE_AHKL_STRING); + + } else if (OnlySpaces && sc.ch == '(') { + + inStringBlk = true; + sc.ForwardSetState(SCE_AHKL_STRINGOPTS); + + } else if (!inExpression && sc.ch == '%' && valIdentifier.Contains(sc.chNext)) { + + sc.ForwardSetState(SCE_AHKL_VAR); + + } else if (inExpression && sc.ch == '%' && valIdentifier.Contains(sc.chNext)) { + + sc.ForwardSetState(SCE_AHKL_VARREF); + + } else if (OnlySpaces && sc.ch == ':') { + + inHotstring = true; + sc.SetState(SCE_AHKL_HOTSTRINGOPT); + + } + + } + + if (!isspace(sc.ch)) + OnlySpaces = false; + + } + + sc.Complete(); +} + +void SCI_METHOD LexerAHKL::Fold(unsigned int startPos, int length, int initStyle, IDocument *pAccess) +{ + LexAccessor styler(pAccess); + + int visibleChars = 0; + int lineCurrent = styler.GetLine(startPos); + int levelCurrent = SC_FOLDLEVELBASE; + int styleNext = styler.StyleAt(startPos); + int style = initStyle; + unsigned int endPos = startPos + length; + + char chNext = styler[startPos]; + + bool OnlySpaces = true; + + if (lineCurrent > 0) + levelCurrent = styler.LevelAt(lineCurrent-1) >> 16; + unsigned int lineStartNext = styler.LineStart(lineCurrent+1); + int levelMinCurrent = levelCurrent; + int levelNext = levelCurrent; + + for (unsigned int i = startPos; i < endPos; i++) { + int stylePrev = style; + + char ch = chNext; + + bool atEOL = i == (lineStartNext-2); + + style = styleNext; + chNext = styler.SafeGetCharAt(i + 1); + styleNext = styler.StyleAt(i + 1); + + if ((OnlySpaces && ch == '/' && chNext == '*')) + levelNext++; + + else if ((OnlySpaces && ch == '*' && chNext == '/')) + levelNext--; + + if (style == SCE_AHKL_NEUTRAL) { + + if ((OnlySpaces && ch == '(') || ch == '{') { + + // Measure the minimum before a '{' to allow + // folding on "} else {" + if (levelMinCurrent > levelNext) + levelMinCurrent = levelNext; + + levelNext++; + + } else if ((OnlySpaces && ch == ')') || ch == '}') { + + levelNext--; + + } + + } + + if (!isspace(ch)) + visibleChars++; + + if (atEOL || (i == endPos-1)) { + + int levelUse = levelCurrent; + int lev = levelUse | levelNext << 16; + + if (levelUse < levelNext) + lev |= SC_FOLDLEVELHEADERFLAG; + + if (lev != styler.LevelAt(lineCurrent)) + styler.SetLevel(lineCurrent, lev); + + lineCurrent++; + lineStartNext = styler.LineStart(lineCurrent+1); + levelCurrent = levelNext; + levelMinCurrent = levelCurrent; + + if (atEOL && (i == static_cast(styler.Length()-1))) // There is an empty line at end of file so give it same level and empty + styler.SetLevel(lineCurrent, (levelCurrent | levelCurrent << 16) | SC_FOLDLEVELWHITEFLAG); + + visibleChars = 0; + OnlySpaces = true; + + } + + if (!isspace(ch)) + OnlySpaces = false; + + + } + +} + +LexerModule lmAHKL(SCLEX_AHKL, LexerAHKL::LexerFactory, "ahkl", ahklWordLists); \ No newline at end of file diff --git a/src/StyleLexers/styleLexAHK.c b/sciXlexers/orig/styleLexAHK.c similarity index 100% rename from src/StyleLexers/styleLexAHK.c rename to sciXlexers/orig/styleLexAHK.c diff --git a/scintilla/Scintilla.vcxproj.filters b/scintilla/Scintilla.vcxproj.filters index bebcfa9f1..5cb955f0e 100644 --- a/scintilla/Scintilla.vcxproj.filters +++ b/scintilla/Scintilla.vcxproj.filters @@ -267,9 +267,6 @@ lexers - - sciXlexers - sciXlexers diff --git a/scintilla/src/Catalogue.cxx b/scintilla/src/Catalogue.cxx index 24c5f1bf7..1980b11bb 100644 --- a/scintilla/src/Catalogue.cxx +++ b/scintilla/src/Catalogue.cxx @@ -75,7 +75,6 @@ int Scintilla_LinkLexers() { //LINK_LEXER(lmA68k); //LINK_LEXER(lmAbaqus); //LINK_LEXER(lmAda); - LINK_LEXER(lmAHK); LINK_LEXER(lmAHKL); //LINK_LEXER(lmAPDL); //LINK_LEXER(lmAs); diff --git a/src/Notepad3.c b/src/Notepad3.c index bc7f86949..750f0fd02 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -3153,11 +3153,12 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam) EnableCmd(hmenu,IDM_EDIT_LINECOMMENT, !(i == SCLEX_NULL || i == SCLEX_CSS || i == SCLEX_DIFF || i == SCLEX_MARKDOWN || i == SCLEX_JSON) && !ro); + EnableCmd(hmenu,IDM_EDIT_STREAMCOMMENT, !(i == SCLEX_NULL || i == SCLEX_VBSCRIPT || i == SCLEX_MAKEFILE || i == SCLEX_VB || i == SCLEX_ASM || i == SCLEX_SQL || i == SCLEX_PERL || i == SCLEX_PYTHON || i == SCLEX_PROPERTIES ||i == SCLEX_CONF || i == SCLEX_POWERSHELL || i == SCLEX_BATCH || i == SCLEX_DIFF || i == SCLEX_BASH || i == SCLEX_TCL || - i == SCLEX_AU3 || i == SCLEX_LATEX || i == SCLEX_AHK || i == SCLEX_RUBY || i == SCLEX_CMAKE || i == SCLEX_MARKDOWN || + i == SCLEX_AU3 || i == SCLEX_LATEX || i == SCLEX_AHKL || i == SCLEX_RUBY || i == SCLEX_CMAKE || i == SCLEX_MARKDOWN || i == SCLEX_YAML || i == SCLEX_REGISTRY || i == SCLEX_NIMROD) && !ro); EnableCmd(hmenu, CMD_CTRLENTER, !ro); @@ -4573,7 +4574,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case SCLEX_ASM: case SCLEX_PROPERTIES: case SCLEX_AU3: - case SCLEX_AHK: + case SCLEX_AHKL: case SCLEX_NSIS: // # could also be used instead case SCLEX_INNOSETUP: case SCLEX_REGISTRY: @@ -4623,7 +4624,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case SCLEX_TCL: case SCLEX_AU3: case SCLEX_LATEX: - case SCLEX_AHK: + case SCLEX_AHKL: case SCLEX_RUBY: case SCLEX_CMAKE: case SCLEX_MARKDOWN: diff --git a/src/Notepad3.vcxproj b/src/Notepad3.vcxproj index b2688b251..50a6b36fd 100644 --- a/src/Notepad3.vcxproj +++ b/src/Notepad3.vcxproj @@ -441,7 +441,6 @@ - diff --git a/src/Notepad3.vcxproj.filters b/src/Notepad3.vcxproj.filters index 0212c1ce9..1004719f0 100644 --- a/src/Notepad3.vcxproj.filters +++ b/src/Notepad3.vcxproj.filters @@ -93,9 +93,6 @@ Source Files\ChooseFont - - Source Files\StyleLexers - Source Files\StyleLexers diff --git a/src/StyleLexers/EditLexer.h b/src/StyleLexers/EditLexer.h index e7472cd18..c78ff1887 100644 --- a/src/StyleLexers/EditLexer.h +++ b/src/StyleLexers/EditLexer.h @@ -96,7 +96,6 @@ extern EDITLEXER lexTEXT; // Pure Text Files extern EDITLEXER lexANSI; // ANSI Files extern EDITLEXER lexCONF; // Apache Config Files extern EDITLEXER lexASM; // Assembly Script -extern EDITLEXER lexAHK; // AutoHotkey Script extern EDITLEXER lexAHKL; // AutoHotkey L Script extern EDITLEXER lexAU3; // AutoIt3 Script extern EDITLEXER lexAVS; // AviSynth Script diff --git a/src/Styles.c b/src/Styles.c index fd28617ce..982d068aa 100644 --- a/src/Styles.c +++ b/src/Styles.c @@ -55,7 +55,6 @@ static PEDITLEXER g_pLexArray[NUMLEXERS] = &lexANSI, // ANSI Files &lexCONF, // Apache Config Files &lexASM, // Assembly Script - &lexAHK, // AutoHotkey Script &lexAHKL, // AutoHotkey L Script &lexAU3, // AutoIt3 Script &lexAVS, // AviSynth Script diff --git a/src/Styles.h b/src/Styles.h index ed70ecf1b..e204cadc2 100644 --- a/src/Styles.h +++ b/src/Styles.h @@ -26,7 +26,7 @@ #define MARGIN_SCI_FOLDING 2 // Number of Lexers in pLexArray -#define NUMLEXERS 50 +#define NUMLEXERS 49 #define AVG_NUM_OF_STYLES_PER_LEXER 20 void Style_Load();