aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/language_diff.lua72
1 files changed, 72 insertions, 0 deletions
diff --git a/plugins/language_diff.lua b/plugins/language_diff.lua
new file mode 100644
index 0000000..46a6af4
--- /dev/null
+++ b/plugins/language_diff.lua
@@ -0,0 +1,72 @@
+-- mod-version:2 -- lite-xl 2.0
+local syntax = require "core.syntax"
+local style = require "core.style"
+local common = require "core.common"
+
+-- we need these symbol types to have uniform colors
+style.syntax["diff_add"] = { common.color "#72b886" }
+style.syntax["diff_del"] = { common.color "#F36161" }
+
+syntax.add {
+ name = "Diff",
+ files = { "%.diff$", "%.patch$", "%.rej$" },
+ headers = "^diff ",
+ patterns = {
+ -- Method the patch was generated with and source/target files
+ { regex = "^diff .+\n$", type = "function" },
+ -- Seen for changing the file permissions
+ { regex = "^new .+\n$", type = "comment" },
+ -- Usually holds starting and ending commit
+ { regex = "^index .+\n$", type = "comment" },
+ -- Position to patch
+ {
+ pattern = "@@.-@@ ().+\n", --with heading
+ type = { "number", "string" }
+ },
+ {
+ regex = "^@@ [\\d,\\-\\+ ]+ @@\n$", --wihtout heading
+ type = "number"
+ },
+ -- Other position to patch formats
+ {
+ regex = "^\\-{3} [\\d]+,[\\d]+ \\-{4}\n$",
+ type = "number"
+ },
+ {
+ regex = "^\\*{3} [\\d]+,[\\d]+ \\*{4}\n$",
+ type = "number"
+ },
+ -- Source and target file
+ { regex = "^-{3} .+\n$", type = "keyword" },
+ { regex = "^\\+{3} .+\n$", type = "keyword" },
+ -- Rarely used source file indicator
+ { regex = "^\\*{3} .+\n$", type = "keyword" },
+ -- git patches seem to add 3 dashes to separate message from changed files
+ { regex = "^\\-{3}\n$", type = "normal" },
+ -- Addition and deletion of lines
+ { regex = "^\\-.*\n$", type = "diff_del" },
+ { regex = "^\\+.*\n$", type = "diff_add" },
+ { regex = "^<.*\n$", type = "diff_del" },
+ { regex = "^>.*\n$", type = "diff_add" },
+ -- Change between two lines
+ { regex = "^!.*\n$", type = "number" },
+ -- Stuff usually found on a authored patch heading
+ {
+ pattern = "From ()[a-fA-F0-9]+ ().+\n",
+ type = { "keyword", "number", "string" }
+ },
+ { regex = "^[a-zA-Z\\-]+: ", type = "keyword" },
+ -- Diff stats
+ { regex = "^ [\\d]+ files? changed", type = "function" },
+ { regex = "[\\d]+ insertions?\\(\\+\\)", type = "diff_add" },
+ { regex = "[\\d]+ deletions?\\(\\-\\)", type = "diff_del" },
+ -- Match e-mail
+ {
+ regex = "<[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+>\n",
+ type = "keyword2"
+ },
+ -- Everything else is normal text
+ { pattern = "[%a_][%w_]*", type = "normal" },
+ },
+ symbols = {}
+}