aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJad Altahan <xviyy@aol.com>2019-01-30 11:35:01 +1100
committerJad Altahan <xviyy@aol.com>2019-01-30 11:35:01 +1100
commit86900d9f6c64e0598e5b217a1d393e55cb53602b (patch)
tree8ff373d973fcc7025b02bf24d0aee94aa387cac0
parent850cfb235e8e92c5b180c94f81d599f88e8cef01 (diff)
downloadscintilla-mirror-86900d9f6c64e0598e5b217a1d393e55cb53602b.tar.gz
Feature [feature-requests:#1261]. Enhance the styling of backticks in Nim
-rw-r--r--doc/ScintillaHistory.html4
-rw-r--r--lexers/LexNim.cxx23
-rw-r--r--test/examples/x.nim6
-rw-r--r--test/examples/x.nim.styled6
-rw-r--r--test/lexTests.py2
5 files changed, 36 insertions, 5 deletions
diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html
index 419dcb5c6..11b388ce6 100644
--- a/doc/ScintillaHistory.html
+++ b/doc/ScintillaHistory.html
@@ -577,6 +577,10 @@
<a href="https://sourceforge.net/p/scintilla/feature-requests/1260/">Feature #1260</a>.
</li>
<li>
+ Enhance the styling of backticks in Nim.
+ <a href="https://sourceforge.net/p/scintilla/feature-requests/1261/">Feature #1261</a>.
+ </li>
+ <li>
Fix fold behaviour with comments in nim.
<a href="https://sourceforge.net/p/scintilla/feature-requests/1254/">Feature #1254</a>.
</li>
diff --git a/lexers/LexNim.cxx b/lexers/LexNim.cxx
index 228666b32..fec9159ef 100644
--- a/lexers/LexNim.cxx
+++ b/lexers/LexNim.cxx
@@ -454,6 +454,18 @@ void SCI_METHOD LexerNim::Lex(Sci_PositionU startPos, Sci_Position length,
sc.ForwardSetState(SCE_NIM_DEFAULT);
}
break;
+ case SCE_NIM_FUNCNAME:
+ if (sc.ch == '`') {
+ funcNameExists = false;
+ sc.ForwardSetState(SCE_NIM_DEFAULT);
+ } else if (sc.atLineEnd) {
+ // Prevent leaking the style to the next line if not closed
+ funcNameExists = false;
+
+ sc.ChangeState(SCE_NIM_STRINGEOL);
+ sc.ForwardSetState(SCE_NIM_DEFAULT);
+ }
+ break;
case SCE_NIM_COMMENT:
if (sc.Match(']', '#')) {
if (commentNestLevel > 0) {
@@ -527,7 +539,10 @@ void SCI_METHOD LexerNim::Lex(Sci_PositionU startPos, Sci_Position length,
}
break;
case SCE_NIM_BACKTICKS:
- if (sc.ch == '`' || sc.atLineEnd) {
+ if (sc.ch == '`' ) {
+ sc.ForwardSetState(SCE_NIM_DEFAULT);
+ } else if (sc.atLineEnd) {
+ sc.ChangeState(SCE_NIM_STRINGEOL);
sc.ForwardSetState(SCE_NIM_DEFAULT);
}
break;
@@ -631,10 +646,10 @@ void SCI_METHOD LexerNim::Lex(Sci_PositionU startPos, Sci_Position length,
}
// Operator definition
else if (sc.ch == '`') {
- sc.SetState(SCE_NIM_BACKTICKS);
-
if (funcNameExists) {
- funcNameExists = false;
+ sc.SetState(SCE_NIM_FUNCNAME);
+ } else {
+ sc.SetState(SCE_NIM_BACKTICKS);
}
}
// Keyword
diff --git a/test/examples/x.nim b/test/examples/x.nim
index 07c9d216f..4bf0de737 100644
--- a/test/examples/x.nim
+++ b/test/examples/x.nim
@@ -4,3 +4,9 @@ let s = "foobar"
# Feature #1260
{.ident.}
stdin.readLine.split.map(parseInt).max.`$`.echo(" is the maximum!")
+
+# Feature #1261
+# IsFuncName("proc") so style ticks as SCE_NIM_FUNCNAME:
+proc `$` (x: myDataType): string = ...
+# Style ticks as SCE_NIM_BACKTICKS:
+if `==`( `+`(3,4),7): echo "True"
diff --git a/test/examples/x.nim.styled b/test/examples/x.nim.styled
index fc1532e60..18ae529e6 100644
--- a/test/examples/x.nim.styled
+++ b/test/examples/x.nim.styled
@@ -4,3 +4,9 @@
{3}# Feature #1260
{15}{.{16}ident{15}.}{0}
{16}stdin{15}.{16}readLine{15}.{16}split{15}.{16}map{15}({16}parseInt{15}).{16}max{15}.{11}`$`{15}.{16}echo{15}({6}" is the maximum!"{15}){0}
+
+{3}# Feature #1261
+# IsFuncName("proc") so style ticks as SCE_NIM_FUNCNAME:
+{8}proc{0} {12}`$`{0} {15}({16}x{15}:{0} {16}myDataType{15}):{0} {16}string{0} {15}={0} {15}...{0}
+{3}# Style ticks as SCE_NIM_BACKTICKS:
+{8}if{0} {11}`==`{15}({0} {11}`+`{15}({5}3{15},{5}4{15}),{5}7{15}):{0} {16}echo{0} {6}"True"{0}
diff --git a/test/lexTests.py b/test/lexTests.py
index eb38b7af7..46e4eb4fb 100644
--- a/test/lexTests.py
+++ b/test/lexTests.py
@@ -157,7 +157,7 @@ class TestLexers(unittest.TestCase):
self.LexExample("x.lua", b"lua", [b"function end"])
def testNim(self):
- self.LexExample("x.nim", b"nim", [b"else end if let"])
+ self.LexExample("x.nim", b"nim", [b"else end if let proc"])
def testRuby(self):
self.LexExample("x.rb", b"ruby", [b"class def end"])