aboutsummaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorrxi <rxi@users.noreply.github.com>2020-05-18 19:03:17 +0100
committerGitHub <noreply@github.com>2020-05-18 19:03:17 +0100
commitc44458a1d0c868c92f2301ac56fa8436734f6ea9 (patch)
tree0e5f14295d7f5d87a21b92002e3eb3706a26341c /plugins
parentf2e5821e22b5f813fae1b6d3087b3d75c82f438b (diff)
parentd18469455b3969cb74a41b541745e6184cc61f15 (diff)
downloadlite-xl-plugins-c44458a1d0c868c92f2301ac56fa8436734f6ea9.tar.gz
lite-xl-plugins-c44458a1d0c868c92f2301ac56fa8436734f6ea9.zip
Merge pull request #35 from liqube/master
Batch File Language Plugin
Diffstat (limited to 'plugins')
-rw-r--r--plugins/language_batch.lua61
1 files changed, 61 insertions, 0 deletions
diff --git a/plugins/language_batch.lua b/plugins/language_batch.lua
new file mode 100644
index 0000000..8caad59
--- /dev/null
+++ b/plugins/language_batch.lua
@@ -0,0 +1,61 @@
+local syntax = require "core.syntax"
+
+-- batch syntax for lite <liqube>
+
+-- windows batch files use caseless matching for symbols
+local symtable = {
+ ["keyword"] = {
+ "if", "else", "elsif", "not", "for", "do", "in",
+ "equ", "neq", "lss", "leq", "gtr", "geq", -- == != < <= > >=
+ "nul", "con", "prn", "prn", "lpt1", "com1", "com2", "com3", "com4",
+ "exist", "defined",
+ "errorlevel", "cmdextversion",
+ "goto", "call", "verify",
+ },
+ ["function"] = {
+ "set", "setlocal", "endlocal", "enabledelayedexpansion",
+ "echo", "type",
+ "cd", "chdir",
+ "md", "mkdir",
+ "pause", "choice", "exit",
+ "del", "rd", "rmdir",
+ "copy", "xcopy",
+ "move", "ren",
+ "find", "findstr",
+ "sort", "shift", "attrib",
+ "cmd", "command",
+ "forfiles",
+ },
+}
+-- prepare a mixed symbol list
+local function prepare_symbols(symtable)
+ local symbols = { }
+ for symtype, symlist in pairs(symtable) do
+ for _, symname in ipairs(symlist) do
+ symbols[symname:lower()] = symtype
+ symbols[symname:upper()] = symtype
+ end
+ end
+ return symbols
+end
+
+syntax.add {
+ files = { "%.bat$", "%.cmd$" },
+ comment = "rem",
+ patterns = {
+ { pattern = "@echo off\n", type = "keyword" },
+ { pattern = "@echo on\n", type = "keyword" },
+ { pattern = "rem.-\n", type = "comment" }, -- rem comment line, rem, rem.
+ { pattern = "REM.-\n", type = "comment" },
+ { pattern = "%s*:[%w%-]+", type = "symbol" }, -- :labels
+ { pattern = "%:%:.-\n", type = "comment" }, -- :: comment line
+ { pattern = "%%%w+%%", type = "symbol" }, -- %variable%
+ { pattern = "%%%%?~?[%w:]+", type = "symbol" }, -- %1, %~dpn1, %~1:2, %%i, %%~i
+ { pattern = "[!=()%>&%^/\\@]", type = "operator" }, -- operators
+ { pattern = "-?%.?%d+f?", type = "number" }, -- integer numbers
+ { pattern = { '"', '"', '\\' }, type = "string" }, -- "strings"
+ { pattern = "[%a_][%w_]*", type = "normal" },
+ { pattern = ":eof", type = "keyword" }, -- not quite as intended, but ok for now
+ },
+ symbols = prepare_symbols(symtable),
+}