aboutsummaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/language_ring.lua92
1 files changed, 92 insertions, 0 deletions
diff --git a/plugins/language_ring.lua b/plugins/language_ring.lua
new file mode 100644
index 0000000..ca9123b
--- /dev/null
+++ b/plugins/language_ring.lua
@@ -0,0 +1,92 @@
+-- mod-version:3
+-- Refrence: https://ring-lang.github.io/doc1.21.2/syntaxflexibility.html
+
+local syntax = require "core.syntax"
+
+-- Keywords
+local keywords = {
+ "enablehashcomments", "disablehashcomments", "call", "class", "from", "get", "give",
+ "import", "load", "new", "package", "private", "changeringkeyword", "changeringoperator",
+ "loadsyntax", "endclass", "endpackage", "if", "but", "else", "elseif", "ok", "for",
+ "foreach", "to", "next", "catch", "step", "endfor", "while", "other", "end", "do",
+ "endwhile", "endswitch", "endtry", "try", "break", "bye", "continue", "default",
+ "endfunc", "endfunction", "return", "switch", "case", "on", "off", "again", "exit",
+ "loop", "done", "in", "func", "def", "nl"
+}
+
+-- Types using ring type hints library
+local types = {
+ "char", "unsigned", "signed", "int", "short", "long", "float", "double", "void",
+ "byte", "boolean", "string", "list", "number", "object", "public", "static",
+ "abstract", "protected", "override"
+}
+
+-- Special values
+local literals = {
+ "true", "false", "null"
+}
+
+-- Built-in functions
+local builtin_functions = {
+ "see", "put", "print"
+}
+
+local symbols = {}
+
+for _, keyword in ipairs(keywords) do
+ symbols[keyword:upper()] = "keyword"
+ symbols[keyword:gsub("^%l", string.upper)] = "keyword"
+ symbols[keyword] = "keyword"
+end
+
+for _, type in ipairs(types) do
+ symbols[type:upper()] = "keyword2"
+ symbols[type:gsub("^%l", string.upper)] = "keyword2"
+ symbols[type] = "keyword2"
+end
+
+for _, literal in ipairs(literals) do
+ symbols[literal:upper()] = "literal"
+ symbols[literal:gsub("^%l", string.upper)] = "literal"
+ symbols[literal] = "literal"
+end
+
+for _, func in ipairs(builtin_functions) do
+ symbols[func:upper()] = "function"
+ symbols[func:gsub("^%l", string.upper)] = "function"
+ symbols[func] = "function"
+end
+
+local string_syntax = {
+ patterns = {
+ { pattern = {"%#{", "}", "\\"}, type="keyword", syntax = ".ring" },
+ { pattern = "[^#\"`']+", type = "string"},
+ { pattern = "[#\"`']", type = "string"}
+ },
+ symbols = {}
+}
+
+syntax.add {
+ name = "Ring",
+ files = { "%.ring$", "%.rh$", "%.rform$" },
+ comment = "//",
+ patterns = {
+ { pattern = "#.*", type = "comment" },
+ { pattern = "//.*", type = "comment" },
+ { pattern = { "/%*", "%*/" }, type = "comment" },
+ { pattern = { '"', '"', '\\' }, type = "string", syntax = string_syntax },
+ { pattern = { "'", "'", '\\' }, type = "string", syntax = string_syntax },
+ { pattern = { "`", "`", '\\' }, type = "string", syntax = string_syntax },
+ { pattern = "-?%d+[%d%.]*f?", type = "number" },
+ { pattern = "-?0x%x+", type = "number" },
+ { pattern = "[%+%-=/%*%^%%<>!~|&]", type = "operator" },
+ { pattern = "[%a_][%w_]*%f[(]", type = "function" },
+ { pattern = "[Dd][Ee][Ff]()%s+()[%a_][%w_]*", type = { "keyword", "normal", "function" } },
+ { pattern = "[Ff][Uu][Nn][Cc]()%s+()[%a_][%w_]*", type = { "keyword", "normal", "function" } },
+ { pattern = "[Cc][Ll][Aa][Ss][Ss]()%s+()[%a_][%w_]*", type = { "keyword", "normal", "function" } },
+ { pattern = "[%a_][%w_]*", type = "symbol" },
+ { pattern = "%?", type = "keyword" },
+ { pattern = ":[%a_][%w_]*", type = "literal" },
+ },
+ symbols = symbols
+}