From 904cec3c4a329cf89fc3219d359239910d61f3f6 Mon Sep 17 00:00:00 2001 From: thing1 Date: Tue, 28 Jan 2025 09:14:32 +0000 Subject: init commit --- autoload/filetype/cucumber.kak | 102 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 autoload/filetype/cucumber.kak (limited to 'autoload/filetype/cucumber.kak') diff --git a/autoload/filetype/cucumber.kak b/autoload/filetype/cucumber.kak new file mode 100644 index 0000000..f8f5415 --- /dev/null +++ b/autoload/filetype/cucumber.kak @@ -0,0 +1,102 @@ +# http://cukes.info +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +# Detection +# ‾‾‾‾‾‾‾‾‾ + +hook global BufCreate .*[.](feature|story) %{ + set-option buffer filetype cucumber +} + +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=cucumber %{ + require-module cucumber + + hook window ModeChange pop:insert:.* -group cucumber-trim-indent cucumber-trim-indent + hook window InsertChar \n -group cucumber-insert cucumber-insert-on-new-line + hook window InsertChar \n -group cucumber-indent cucumber-indent-on-new-line + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window cucumber-.+ } +} + +hook -group cucumber-highlight global WinSetOption filetype=cucumber %{ + add-highlighter window/cucumber ref cucumber + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/cucumber } +} + + +provide-module cucumber %{ + +# Highlighters +# ‾‾‾‾‾‾‾‾‾‾‾‾ + +add-highlighter shared/cucumber regions +add-highlighter shared/cucumber/code default-region group +add-highlighter shared/cucumber/language region ^\h*#\h*language: $ group +add-highlighter shared/cucumber/comment region ^\h*# $ fill comment + +add-highlighter shared/cucumber/language/ fill meta +add-highlighter shared/cucumber/language/ regex \S+$ 0:value + +# Spoken languages +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ +# https://github.com/cucumber/cucumber/wiki/Spoken-languages +# +# curl --location https://github.com/cucumber/gherkin/raw/master/lib/gherkin/i18n.json +# +# { +# "en": { +# "name": "English", +# "native": "English", +# "feature": "Feature|Business Need|Ability", +# "background": "Background", +# "scenario": "Scenario", +# "scenario_outline": "Scenario Outline|Scenario Template", +# "examples": "Examples|Scenarios", +# "given": "*|Given", +# "when": "*|When", +# "then": "*|Then", +# "and": "*|And", +# "but": "*|But" +# }, +# … +# } +# +# jq 'with_entries({ key: .key, value: .value | del(.name) | del(.native) | join("|") })' +# +# { +# "en": "Feature|Business Need|Ability|Background|Scenario|Scenario Outline|Scenario Template|Examples|Scenarios|*|Given|*|When|*|Then|*|And|*|But", +# … +# } + +add-highlighter shared/cucumber/code/ regex \b(Feature|Business\h+Need|Ability|Background|Scenario|Scenario\h+Outline|Scenario\h+Template|Examples|Scenarios|Given|When|Then|And|But)\b 0:keyword + +# Commands +# ‾‾‾‾‾‾‾‾ + +define-command -hidden cucumber-trim-indent %{ + # remove trailing white spaces + try %{ execute-keys -draft -itersel x s \h+$ d } +} + +define-command -hidden cucumber-insert-on-new-line %{ + evaluate-commands -draft -itersel %{ + # copy '#' comment prefix and following white spaces + try %{ execute-keys -draft k x s ^\h*\K#\h* y gh j P } + } +} + +define-command -hidden cucumber-indent-on-new-line %{ + evaluate-commands -draft -itersel %{ + # preserve previous line indent + try %{ execute-keys -draft K } + # filter previous line + try %{ execute-keys -draft k : cucumber-trim-indent } + # indent after lines containing : + try %{ execute-keys -draft , k x : j } + } +} + +} -- cgit v1.2.3