summaryrefslogtreecommitdiff
path: root/autoload/filetype/prolog.kak
diff options
context:
space:
mode:
authorthing1 <thing1@seacrossedlovers.xyz>2025-01-28 09:14:32 +0000
committerthing1 <thing1@seacrossedlovers.xyz>2025-01-28 09:14:32 +0000
commit904cec3c4a329cf89fc3219d359239910d61f3f6 (patch)
tree8d113899921dfbaca0e77c49ab5fc827362d1091 /autoload/filetype/prolog.kak
init commitHEADmaster
Diffstat (limited to 'autoload/filetype/prolog.kak')
-rw-r--r--autoload/filetype/prolog.kak49
1 files changed, 49 insertions, 0 deletions
diff --git a/autoload/filetype/prolog.kak b/autoload/filetype/prolog.kak
new file mode 100644
index 0000000..fa183c1
--- /dev/null
+++ b/autoload/filetype/prolog.kak
@@ -0,0 +1,49 @@
+# Prolog
+# ----------------------
+
+# Adapted from rc/filetype/erlang.kak
+
+# Detection
+# ‾‾‾‾‾‾‾‾‾
+hook global BufCreate .*[.](pl|P) %{
+ set-option buffer filetype prolog
+}
+
+# Initialization
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+hook global WinSetOption filetype=prolog %{
+ require-module prolog
+
+ hook -once -always window WinSetOption filetype=.* %{ remove-hooks window prolog-.+ }
+}
+
+hook -group prolog-highlight global WinSetOption filetype=prolog %{
+ add-highlighter window/prolog ref prolog
+ hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/prolog }
+}
+
+provide-module prolog %[
+
+# Highlighters
+# ‾‾‾‾‾‾‾‾‾‾‾‾
+
+add-highlighter shared/prolog regions
+add-highlighter shared/prolog/default default-region group
+
+add-highlighter shared/prolog/comment region '(?<!)%' '$' fill comment
+add-highlighter shared/prolog/attribute_atom_single_quoted region %{-'} %{(?<!\\)(?:\\\\)*'(?=[\( \.])} fill builtin
+add-highlighter shared/prolog/attribute region '\b-[a-z][\w@]*(?=[\( \.])' '\K' fill builtin
+add-highlighter shared/prolog/atom_single_quoted region %{'} %{(?<!\\)(?:\\\\)*'} fill type
+add-highlighter shared/prolog/char_list region %{"} %{(?<!\\)(?:\\\\)*"} fill string
+
+# default-region regex highlighters
+add-highlighter shared/prolog/default/atom regex '\b[a-z]\w*\b' 0:type
+add-highlighter shared/prolog/default/pred_call regex '\b[a-z]\w*(?=\()' 0:function
+add-highlighter shared/prolog/default/keywords regex '\b(div|rem|is)\b' 0:keyword
+add-highlighter shared/prolog/default/variable_name regex '\b(?<!\?)[A-Z_][\w]*\b' 0:variable
+
+add-highlighter shared/prolog/default/base_number regex '\b(\d[_\d]*(?<!_)#[a-zA-Z0-9][a-z_A-Z0-9]*(?<!_)(?!\{))\b' 1:value
+add-highlighter shared/prolog/default/float regex '\b(?<![\.])(\d[\d_]*(?<!_)\.\d[\d_]*(?<!_)(?:e[+-]?\d[\d_]*(?<!_))?)\b' 1:value
+add-highlighter shared/prolog/default/integer regex '\b(?<!/)(\d[\d_]*)(?<!_)\b' 1:value
+
+]