aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md1
-rw-r--r--plugins/language_fennel.lua100
2 files changed, 101 insertions, 0 deletions
diff --git a/README.md b/README.md
index 5b4c948..5e5132a 100644
--- a/README.md
+++ b/README.md
@@ -31,6 +31,7 @@ Plugin | Description
[`language_cpp`](plugins/language_cpp.lua?raw=1) | Syntax for the [C++](https://isocpp.org/) programming language
[`language_csharp`](plugins/language_csharp.lua?raw=1) | Syntax for the [C#](http://csharp.net) programming language
[`language_fe`](plugins/language_fe.lua?raw=1) | Syntax for the [fe](https://github.com/rxi/fe) programming language
+[`language_fennel`](plugins/language_fennel.lua?raw=1) | Syntax for the [fennel](https://fennel-lang.org) programming language
[`language_go`](plugins/language_go.lua?raw=1) | Syntax for the [Go](https://golang.org/) programming language
[`language_hs`](plugins/language_hs.lua?raw=1) | Syntax for the [Haskell](https://www.haskell.org/) programming language
[`language_jiyu`](plugins/language_jiyu.lua?raw=1) | Syntax for the [jiyu](https://github.com/machinamentum/jiyu) programming language
diff --git a/plugins/language_fennel.lua b/plugins/language_fennel.lua
new file mode 100644
index 0000000..7320e91
--- /dev/null
+++ b/plugins/language_fennel.lua
@@ -0,0 +1,100 @@
+-- Support for the Fennel programming language: https://fennel-lang.org
+-- Covers all the keywords up to Fennel version 0.4.0
+
+-- Currently only covers highlighting, not indentation, delimiter
+-- matching, or evaluation.
+
+local syntax = require "core.syntax"
+
+syntax.add {
+ files = "%.fnl$",
+ comment = ";",
+ patterns = {
+ { pattern = ";.-\n", type = "comment" },
+ { pattern = { '"', '"', '\\' }, type = "string" },
+ { pattern = "0x[%da-fA-F]+", type = "number" },
+ { pattern = "-?%d+[%d%.]*", type = "number" },
+ { pattern = "-?%.?%d+", type = "number" },
+ { pattern = "%f[^(][^()'%s\"]+", type = "function" },
+ { pattern = "[^()'%s\"]+", type = "symbol" },
+ },
+
+ symbols = {
+ ["eval-compiler"] = "keyword2",
+ ["doc"] = "keyword2",
+ ["lua"] = "keyword2",
+ ["hashfn"] = "keyword2",
+ ["macro"] = "keyword2",
+ ["macros"] = "keyword2",
+ ["import-macros"] = "keyword2",
+ ["do"] = "keyword2",
+ ["values"] = "keyword2",
+ ["if"] = "keyword2",
+ ["when"] = "keyword2",
+ ["each"] = "keyword2",
+ ["for"] = "keyword2",
+ ["fn"] = "keyword2",
+ ["lambda"] = "keyword2",
+ ["λ"] = "keyword2",
+ ["partial"] = "keyword2",
+ ["while"] = "keyword2",
+ ["set"] = "keyword2",
+ ["global"] = "keyword2",
+ ["var"] = "keyword2",
+ ["local"] = "keyword2",
+ ["let"] = "keyword2",
+ ["tset"] = "keyword2",
+ ["set-forcibly!"] = "keyword2",
+ ["doto"] = "keyword2",
+ ["match"] = "keyword2",
+ ["or"] = "keyword2",
+ ["and"] = "keyword2",
+ ["not"] = "keyword2",
+ ["not="] = "keyword2",
+ ["pick-args"] = "keyword2",
+ ["pick-values"] = "keyword2",
+ ["macrodebug"] = "keyword2",
+
+ ["."] = "keyword",
+ ["+"] = "keyword",
+ [".."] = "keyword",
+ ["^"] = "keyword",
+ ["-"] = "keyword",
+ ["*"] = "keyword",
+ ["%"] = "keyword",
+ ["/"] = "keyword",
+ [">"] = "keyword",
+ ["<"] = "keyword",
+ [">="] = "keyword",
+ ["<="] = "keyword",
+ ["="] = "keyword",
+ ["#"] = "keyword",
+ ["..."] = "keyword",
+ [":"] = "keyword",
+ ["->"] = "keyword",
+ ["->>"] = "keyword",
+ ["-?>"] = "keyword",
+ ["-?>>"] = "keyword",
+ ["$"] = "keyword",
+ ["$1"] = "keyword",
+ ["$2"] = "keyword",
+ ["$3"] = "keyword",
+ ["$4"] = "keyword",
+ ["$5"] = "keyword",
+ ["$6"] = "keyword",
+ ["$7"] = "keyword",
+ ["$8"] = "keyword",
+ ["$9"] = "keyword",
+
+ ["lshift"] = "keyword",
+ ["rshift"] = "keyword",
+ ["bor"] = "keyword",
+ ["band"] = "keyword",
+ ["bnot"] = "keyword",
+ ["bxor"] = "keyword",
+
+ ["nil"] = "literal",
+ ["true"] = "literal",
+ ["false"] = "literal",
+ }
+}