diff options
author | rxi <rxi@users.noreply.github.com> | 2020-05-18 19:03:17 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-18 19:03:17 +0100 |
commit | c44458a1d0c868c92f2301ac56fa8436734f6ea9 (patch) | |
tree | 0e5f14295d7f5d87a21b92002e3eb3706a26341c /plugins | |
parent | f2e5821e22b5f813fae1b6d3087b3d75c82f438b (diff) | |
parent | d18469455b3969cb74a41b541745e6184cc61f15 (diff) | |
download | lite-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.lua | 61 |
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), +} |