aboutsummaryrefslogtreecommitdiff
path: root/plugins/language_typst.lua
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/language_typst.lua')
-rw-r--r--plugins/language_typst.lua156
1 files changed, 156 insertions, 0 deletions
diff --git a/plugins/language_typst.lua b/plugins/language_typst.lua
new file mode 100644
index 0000000..c5bd943
--- /dev/null
+++ b/plugins/language_typst.lua
@@ -0,0 +1,156 @@
+-- mod-version:3
+local syntax = require "core.syntax"
+
+
+local typst_math = {
+
+ patterns = {
+
+ { pattern = { "/%*", "%*/" }, type = "comment" },
+ { pattern = "//.*", type = "comment" },
+
+ { pattern = { '"', '"', '\\' }, type = "string" },
+
+ { pattern = "[%a_][%w_%-]*%f[(]", type = "function" },
+ { pattern = "%a%a+", type = "function"},
+
+
+ { pattern = "0x[%dabcdef]+", type = "number" },
+ { pattern = "0b[01]+", type = "number" },
+ { pattern = "0o[01234567]+", type = "number" },
+ { pattern = "%d+[.e]%d+", type = "number" },
+ { pattern = "%d", type = "number" },
+
+ {pattern = "&", type = "literal"},
+ { pattern = "[%+%-=/%*%^%%<>~|#_^\\]", type = "operator" },
+
+ },
+
+ symbols = {
+ ["alpha"] = "keyword2",
+ ["beta"] = "keyword2",
+ ["gamma"] = "keyword2",
+ ["delta"] = "keyword2",
+ ["epsilon"] = "keyword2",
+ ["zeta"] = "keyword2",
+ ["eta"] = "keyword2",
+ ["theta"] = "keyword2",
+ ["iota"] = "keyword2",
+ ["kappa"] = "keyword2",
+ ["lambda"] = "keyword2",
+ ["mu"] = "keyword2",
+ ["nu"] = "keyword2",
+ ["xi"] = "keyword2",
+ ["omicron"] = "keyword2",
+ ["pi"] = "keyword2",
+ ["rho"] = "keyword2",
+ ["sigma"] = "keyword2",
+ ["tau"] = "keyword2",
+ ["upsilon"] = "keyword2",
+ ["phi"] = "keyword2",
+ ["chi"] = "keyword2",
+ ["psi"] = "keyword2",
+ ["omega"] = "keyword2",
+
+ ["Alpha"] = "keyword2",
+ ["Beta"] = "keyword2",
+ ["Gamma"] = "keyword2",
+ ["Delta"] = "keyword2",
+ ["Epsilon"] = "keyword2",
+ ["Zeta"] = "keyword2",
+ ["Eta"] = "keyword2",
+ ["Theta"] = "keyword2",
+ ["Iota"] = "keyword2",
+ ["Kappa"] = "keyword2",
+ ["Lambda"] = "keyword2",
+ ["Mu"] = "keyword2",
+ ["Nu"] = "keyword2",
+ ["Xi"] = "keyword2",
+ ["Omicron"] = "keyword2",
+ ["Pi"] = "keyword2",
+ ["Rho"] = "keyword2",
+ ["Sigma"] = "keyword2",
+ ["Tau"] = "keyword2",
+ ["Upsilon"] = "keyword2",
+ ["Phi"] = "keyword2",
+ ["Chi"] = "keyword2",
+ ["Psi"] = "keyword2",
+ ["Omega"] = "keyword2",
+ }
+}
+
+
+local typst_script = {
+
+ patterns = {
+
+ { pattern = { "/%*", "%*/" }, type = "comment" },
+ { pattern = "//.*", type = "comment" },
+
+ { pattern = { '"', '"', '\\' }, type = "string" },
+ { pattern = {"%[", "%]"}, type = "normal", syntax = ".typ" },
+
+ { pattern = "[%a_][%w_%-]*%f[(]", type = "function" },
+
+ { pattern = "0x[%dabcdef]+", type = "number" },
+ { pattern = "0b[01]+", type = "number" },
+ { pattern = "0o[01234567]+", type = "number" },
+ { pattern = "%d+[.e]%d+()[%a%%]+", type = {"number", "keyword2"}},
+ { pattern = "%d+[.e]%d+", type = "number" },
+ { pattern = "%d+()[%a%%]+", type = {"number", "keyword2"}},
+ { pattern = "%d", type = "number" },
+
+
+ { pattern = "[%+%-=/%*%^%%<>~|&#_^\\]", type = "operator" },
+
+ },
+
+
+ symbols = {
+ ["set"] = "keyword",
+ ["let"] = "keyword",
+ ["include"] = "keyword",
+ }
+}
+
+
+syntax.add {
+ name = "Typst",
+ files = { "%.typ$" },
+ comment = "//",
+ block_comment = { "/*", "*/" },
+
+ patterns = {
+
+
+ { pattern = {"%$", "%$", "\\"}, type = "literal", syntax = typst_math },
+ { pattern = {"```js", "```", "\\"}, type = "literal", syntax = ".js" },
+ { pattern = {"#", "[^,%(%[{]\n"}, type = "literal", syntax = typst_script },
+ { pattern = {"`", "`", "\\"}, type = "normal"},
+
+ { pattern = { '"', '"', '\\' }, type = "string" },
+
+
+ { pattern = "//.*", type = "comment" },
+ { pattern = { "/%*", "%*/" }, type = "comment" },
+
+ -- { pattern = {"link"}, type = "typst_underline"}, -- add underline text later
+
+ { pattern = "^%s*=+ ().+%f[\n]", type ={"operator", "literal"}}, -- Supposed to be bold
+
+ -- Finish later
+ { pattern = {"%*_", "_%*[%s,%.]"}, type = "keyword2"}, -- Bold Italic
+ { pattern = {"_%*", "%*_[%s,%.]"}, type = "keyword2"}, -- Bold Italic
+ { pattern = {"_", "_[%s,%.]"}, type = "keyword"}, -- Italic
+ { pattern = {"%*[^%/]", "%*[%s,%.]"}, type = "literal"}, -- Bold
+
+ { pattern = "[%+%-\\]", type = "operator" },
+
+ },
+
+
+
+ symbols = {
+
+ }
+}