diff --git a/README.md b/README.md index 502e1edf..b46e7d69 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,7 @@ Plugin | Description [`language_ksy`](https://raw.githubusercontent.com/whiteh0le/lite-plugins/main/plugins/language_ksy.lua?raw=1) | Syntax for [Kaitai](http://kaitai.io/) struct files [`language_make`](plugins/language_make.lua?raw=1) | Syntax for the Make build system language [`language_meson`](plugins/language_meson.lua?raw=1) | Syntax for the [Meson](https://mesonbuild.com) build system language +[`language_nim`](plugins/language_nim.lua?raw=1) | Syntax for the [Nim](https://nim-lang.org) programming language [`language_odin`](plugins/language_odin.lua?raw=1) | Syntax for the [Odin](https://github.com/odin-lang/Odin) programming language [`language_php`](plugins/language_php.lua?raw=1) | Syntax for the [PHP](https://php.net) programming language [`language_pico8`](plugins/language_pico8.lua?raw=1) | Syntax for [Pico-8](https://www.lexaloffle.com/pico-8.php) cartridge files diff --git a/plugins/language_nim.lua b/plugins/language_nim.lua new file mode 100644 index 00000000..5b76aefe --- /dev/null +++ b/plugins/language_nim.lua @@ -0,0 +1,92 @@ +local syntax = require "core.syntax" + +syntax.add { + files = "%.nim$", + headers = "^#!.*[ /]nim", + comment = "#", + patterns = { + -- Multiline comment dont support nesting + { pattern = { "#%[", "%]#" }, type = "comment" }, + { pattern = { "#", "\n" }, type = "comment" }, + { pattern = { '[rR]?"""', '"""' }, type = "string" }, + { pattern = { '[rR]?"', '"', '\\' }, type = "string" }, + { pattern = "'\\?.'", type = "string" }, + { pattern = "{%..*%.}", type = "keyword" }, + { pattern = "0[xX][%d_a-fA-F]+", type = "number" }, + { pattern = "0[bB][01_]+", type = "number" }, + { pattern = "0o[01234567_]+", type = "number" }, + { pattern = "-?[%d_]+[%d_%.eE]*", type = "number" }, + { pattern = "[%a_][%w_]*%f[(]", type = "function" }, + { pattern = "`[%+%-=/%*%^%%<>!~|&@%$%?.:\\]+`", type = "function" }, + { pattern = "[%+%-=/%*%^%%<>!~|&@%$%?.:\\]+", type = "operator" }, + { pattern = "[%a_][%w_]*", type = "symbol" }, + }, + symbols = { + ["addr"] = "keyword", + ["and"] = "operator", + ["as"] = "operator", + ["asm"] = "keyword", + ["bind"] = "keyword", + ["block"] = "keyword2", + ["break"] = "keyword2", + ["case"] = "keyword2", + ["cast"] = "keyword", + ["concept"] = "keyword", + ["const"] = "keyword", + ["continue"] = "keyword2", + ["converter"] = "keyword", + ["defer"] = "keyword", + ["discard"] = "keyword", + ["distinct"] = "keyword", + ["div"] = "operator", + ["do"] = "keyword2", + ["elif"] = "keyword2", + ["else"] = "keyword2", + ["end"] = "keyword2", + ["enum"] = "keyword", + ["except"] = "keyword2", + ["export"] = "keyword", + ["finally"] = "keyword2", + ["for"] = "keyword2", + ["from"] = "operator", + ["func"] = "keyword", + ["if"] = "keyword2", + ["import"] = "keyword", + ["in"] = "operator", + ["include"] = "keyword", + ["interface"] = "keyword", + ["is"] = "operator", + ["isnot"] = "keyword", + ["iterator"] = "keyword", + ["let"] = "keyword", + ["macro"] = "keyword", + ["method"] = "keyword", + ["mixin"] = "keyword", + ["mod"] = "operator", + ["nil"] = "keyword", + ["not"] = "operator", + ["notin"] = "operator", + ["object"] = "keyword", + ["of"] = "operator", + ["or"] = "operator", + ["out"] = "keyword", + ["proc"] = "keyword", + ["ptr"] = "keyword", + ["raise"] = "keyword2", + ["ref"] = "keyword", + ["return"] = "keyword2", + ["shl"] = "operator", + ["shr"] = "operator", + ["static"] = "keyword", + ["template"] = "keyword", + ["try"] = "keyword2", + ["tuple"] = "keyword", + ["type"] = "keyword", + ["using"] = "keyword", + ["var"] = "keyword", + ["when"] = "keyword2", + ["while"] = "keyword2", + ["xor"] = "operator", + ["yield"] = "keyword2", + } +}