Skip to content

Commit

Permalink
Add standalone lexer for HaXe, update it to HaXe 4.1.
Browse files Browse the repository at this point in the history
  • Loading branch information
zufuliu committed Feb 7, 2021
1 parent 085ae2d commit 20466a4
Show file tree
Hide file tree
Showing 17 changed files with 764 additions and 77 deletions.
1 change: 1 addition & 0 deletions build/CodeLite/Notepad2.project
Expand Up @@ -31,6 +31,7 @@
<File Name="../../scintilla/lexers/LexGN.cxx"/>
<File Name="../../scintilla/lexers/LexGo.cxx"/>
<File Name="../../scintilla/lexers/LexGraphViz.cxx"/>
<File Name="../../scintilla/lexers/LexHaXe.cxx"/>
<File Name="../../scintilla/lexers/LexHTML.cxx"/>
<File Name="../../scintilla/lexers/LexInno.cxx"/>
<File Name="../../scintilla/lexers/LexJava.cxx"/>
Expand Down
1 change: 1 addition & 0 deletions build/VS2017/Notepad2.vcxproj
Expand Up @@ -978,6 +978,7 @@
<ClCompile Include="..\..\scintilla\lexers\LexGN.cxx" />
<ClCompile Include="..\..\scintilla\lexers\LexGo.cxx" />
<ClCompile Include="..\..\scintilla\lexers\LexGraphViz.cxx" />
<ClCompile Include="..\..\scintilla\lexers\LexHaXe.cxx" />
<ClCompile Include="..\..\scintilla\lexers\LexHTML.cxx" />
<ClCompile Include="..\..\scintilla\lexers\LexInno.cxx" />
<ClCompile Include="..\..\scintilla\lexers\LexJava.cxx" />
Expand Down
3 changes: 3 additions & 0 deletions build/VS2017/Notepad2.vcxproj.filters
Expand Up @@ -90,6 +90,9 @@
<ClCompile Include="..\..\scintilla\lexers\LexGraphViz.cxx">
<Filter>Scintilla\lexers</Filter>
</ClCompile>
<ClCompile Include="..\..\scintilla\lexers\LexHaXe.cxx">
<Filter>Scintilla\lexers</Filter>
</ClCompile>
<ClCompile Include="..\..\scintilla\lexers\LexHTML.cxx">
<Filter>Scintilla\lexers</Filter>
</ClCompile>
Expand Down
2 changes: 1 addition & 1 deletion readme.md
Expand Up @@ -68,7 +68,7 @@ Latest development builds (artifacts in Release configuration for each compiler
* GraphViz Dot, [Screenshots](https://github.com/zufuliu/notepad2/wiki/Screenshots#graphviz)
* blockdiag, seqdiag, actdiag and nwdiag
* Groovy
* Haxe
* [Haxe](../master/tools/lang/Haxe.hx), up to Haxe 4.1
* [HTML](../master/tools/lang/html.html), up to [WHATWG](https://html.spec.whatwg.org/multipage/) 2020-02-12. [Screenshots](https://github.com/zufuliu/notepad2/wiki/Screenshots#html)
* ASP
* ASP.NET
Expand Down
28 changes: 28 additions & 0 deletions scintilla/include/SciLexer.h
Expand Up @@ -77,6 +77,7 @@
#define SCLEX_GO 216
#define SCLEX_DART 217
#define SCLEX_SWIFT 218
#define SCLEX_HAXE 219
#define SCLEX_AUTOMATIC 1000
#define SCE_PY_DEFAULT 0
#define SCE_PY_COMMENTLINE 1
Expand Down Expand Up @@ -1242,4 +1243,31 @@
#define SCE_JAVA_FUNCTION 25
#define SCE_JAVA_CONSTANT 26
#define SCE_JAVA_LABEL 27
#define SCE_HAXE_DEFAULT 0
#define SCE_HAXE_COMMENTLINE 1
#define SCE_HAXE_COMMENTLINEDOC 2
#define SCE_HAXE_COMMENTBLOCK 3
#define SCE_HAXE_COMMENTBLOCKDOC 4
#define SCE_HAXE_COMMENTTAGAT 5
#define SCE_HAXE_TASKMARKER 6
#define SCE_HAXE_NUMBER 7
#define SCE_HAXE_OPERATOR 8
#define SCE_HAXE_OPERATOR2 9
#define SCE_HAXE_STRINGDQ 10
#define SCE_HAXE_STRINGSQ 11
#define SCE_HAXE_ESCAPECHAR 12
#define SCE_HAXE_STRING_BEGIN 15
#define SCE_HAXE_STRING_END 16
#define SCE_HAXE_REGEX 17
#define SCE_HAXE_MATADATA 18
#define SCE_HAXE_IDENTIFIER 19
#define SCE_HAXE_VARIABLE 20
#define SCE_HAXE_PREPROCESSOR 21
#define SCE_HAXE_WORD 22
#define SCE_HAXE_CLASS 23
#define SCE_HAXE_INTERFACE 24
#define SCE_HAXE_ENUM 25
#define SCE_HAXE_CONSTANT 26
#define SCE_HAXE_FUNCTION_DEFINE 27
#define SCE_HAXE_FUNCTION 28
/* --Autogenerated -- end of section automatically generated from SciLexer.iface */
30 changes: 30 additions & 0 deletions scintilla/include/SciLexer.iface
Expand Up @@ -161,6 +161,7 @@ val SCLEX_GN=215
val SCLEX_GO=216
val SCLEX_DART=217
val SCLEX_SWIFT=218
val SCLEX_HAXE=219

# When a lexer specifies its language as SCLEX_AUTOMATIC it receives a
# value assigned in sequence from SCLEX_AUTOMATIC+1.
Expand Down Expand Up @@ -2767,3 +2768,32 @@ val SCE_JAVA_ENUM=24
val SCE_JAVA_FUNCTION=25
val SCE_JAVA_CONSTANT=26
val SCE_JAVA_LABEL=27
# Lexical states for SCLEX_HAXE
lex HaXe=SCLEX_HAXE SCE_HAXE_
val SCE_HAXE_DEFAULT=0
val SCE_HAXE_COMMENTLINE=1
val SCE_HAXE_COMMENTLINEDOC=2
val SCE_HAXE_COMMENTBLOCK=3
val SCE_HAXE_COMMENTBLOCKDOC=4
val SCE_HAXE_COMMENTTAGAT=5
val SCE_HAXE_TASKMARKER=6
val SCE_HAXE_NUMBER=7
val SCE_HAXE_OPERATOR=8
val SCE_HAXE_OPERATOR2=9
val SCE_HAXE_STRINGDQ=10
val SCE_HAXE_STRINGSQ=11
val SCE_HAXE_ESCAPECHAR=12
val SCE_HAXE_STRING_BEGIN=15
val SCE_HAXE_STRING_END=16
val SCE_HAXE_REGEX=17
val SCE_HAXE_MATADATA=18
val SCE_HAXE_IDENTIFIER=19
val SCE_HAXE_VARIABLE=20
val SCE_HAXE_PREPROCESSOR=21
val SCE_HAXE_WORD=22
val SCE_HAXE_CLASS=23
val SCE_HAXE_INTERFACE=24
val SCE_HAXE_ENUM=25
val SCE_HAXE_CONSTANT=26
val SCE_HAXE_FUNCTION_DEFINE=27
val SCE_HAXE_FUNCTION=28
15 changes: 7 additions & 8 deletions scintilla/lexers/LexCPP.cxx
@@ -1,7 +1,7 @@
// This file is part of Notepad2.
// See License.txt for details about distribution and modification.
//! Lexer for C, C++, C#, Rescouce Script, Asymptote, D, Objective C/C++, PHP
//! haXe, Groovy, Scala, Jamfile, AWK, IDL/ODL
//! Groovy, Scala, Jamfile, AWK, IDL/ODL

#include <cassert>
#include <cstring>
Expand All @@ -26,7 +26,6 @@ using namespace Scintilla;
#define LEX_D 7 // D
#define LEX_ASY 8 // Asymptote
#define LEX_OBJC 10 // Objective C/C++
#define LEX_HX 12 // haXe
#define LEX_GROOVY 13 // Groovy Script
#define LEX_SCALA 14 // Scala Script
#define LEX_PHP 29
Expand All @@ -40,7 +39,7 @@ static constexpr bool HasAnotation(int lex) noexcept { // @anotation
return lex == LEX_GROOVY || lex == LEX_SCALA;
}
static constexpr bool HasRegex(int lex) noexcept { // Javascript /regex/
return lex == LEX_GROOVY || lex == LEX_HX || lex == LEX_AWK;
return lex == LEX_GROOVY || lex == LEX_AWK;
}
static constexpr bool HasTripleVerbatim(int lex) noexcept {
return lex == LEX_GROOVY || lex == LEX_SCALA;
Expand All @@ -52,7 +51,7 @@ static constexpr bool HasXML(int lex) noexcept {
return lex == LEX_SCALA;
}
static constexpr bool SquareBraceAfterType(int lex) noexcept {
return lex == LEX_CS || lex == LEX_HX || lex == LEX_GROOVY || lex == LEX_SCALA;
return lex == LEX_CS || lex == LEX_GROOVY || lex == LEX_SCALA;
}
static constexpr bool IsDStrFix(int ch) noexcept {
return ch == 'c' || ch == 'w' || ch == 'd';
Expand Down Expand Up @@ -569,7 +568,7 @@ static void ColouriseCppDoc(Sci_PositionU startPos, Sci_Position length, int ini
break;
case SCE_C_STRING:
if (sc.atLineEnd) {
if (lexType == LEX_HX || lexType == LEX_ASY || lexType == LEX_JAM || lexType == LEX_PHP) {
if (lexType == LEX_ASY || lexType == LEX_JAM || lexType == LEX_PHP) {
continue;
}
sc.ChangeState(SCE_C_STRINGEOL);
Expand Down Expand Up @@ -958,13 +957,13 @@ static void ColouriseCppDoc(Sci_PositionU startPos, Sci_Position length, int ini
sc.SetState(SCE_C_IDENTIFIER);
}
}
} else if (sc.ch == '$' && (lexType == LEX_HX || lexType == LEX_AWK || lexType == LEX_PHP)) {
} else if (sc.ch == '$' && (lexType == LEX_AWK || lexType == LEX_PHP)) {
if (lexType == LEX_PHP && !iswordstart(sc.chNext))
sc.SetState(SCE_C_OPERATOR);
else
sc.SetState(SCE_C_VARIABLE);
} else if (iswordstart(sc.ch) || (iswordstart(sc.chNext) && (lexType != LEX_PHP) && (sc.ch == '@' ||
(sc.ch == '#' && (lexType == LEX_D || lexType == LEX_HX || lexType == LEX_JAM))))) {
(sc.ch == '#' && (lexType == LEX_D || lexType == LEX_JAM))))) {
sc.SetState(SCE_C_IDENTIFIER);
} else if (sc.ch == '.') {
sc.SetState(SCE_C_OPERATOR);
Expand Down Expand Up @@ -1279,7 +1278,7 @@ static void FoldCppDoc(Sci_PositionU startPos, Sci_Position length, int initStyl
levelNext++;
}

if ((hasPreprocessor || lexType == LEX_HX) && (ch == '#') && style == SCE_C_PREPROCESSOR) {
if (hasPreprocessor && ch == '#' && style == SCE_C_PREPROCESSOR) {
Sci_Position pos = LexSkipSpaceTab(i + 1, endPos, styler);
if (styler.Match(pos, "if") || styler.Match(pos, "region")) {
levelNext++;
Expand Down

0 comments on commit 20466a4

Please sign in to comment.