From 348b96e6d79cebaccd0215b16977d29d7ddfb39d Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Fri, 24 Jul 2020 20:18:08 -0400 Subject: Add syntax highlighting and indenting for Kakoune --- editors/kak/autoload/filetype/bqn.kak | 78 +++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 editors/kak/autoload/filetype/bqn.kak diff --git a/editors/kak/autoload/filetype/bqn.kak b/editors/kak/autoload/filetype/bqn.kak new file mode 100644 index 00000000..7c64cef6 --- /dev/null +++ b/editors/kak/autoload/filetype/bqn.kak @@ -0,0 +1,78 @@ +# Detection +# ‾‾‾‾‾‾‾‾‾ + +hook global BufCreate .*\.bqn %{ + set-option buffer filetype bqn +} + +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=bqn %` + require-module bqn + + hook window InsertChar \n -group bqn-indent bqn-indent-on-new-line + hook window InsertChar [}⟩\]] -group bqn-indent bqn-indent-on-closing + set-option buffer matching_pairs ( ) { } [ ] ⟨ ⟩ + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window bqn-.+ } +` + +hook -group bqn-highlight global WinSetOption filetype=bqn %{ + add-highlighter window/bqn ref bqn + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/bqn } +} + + +provide-module bqn %~ + +# Highlighters & Completion +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +add-highlighter shared/bqn regions +add-highlighter shared/bqn/code default-region group +add-highlighter shared/bqn/comment region "#" "$" fill comment +add-highlighter shared/bqn/string region '"' '"' fill string +add-highlighter shared/bqn/char region "'.'" "()" fill string + +add-highlighter shared/bqn/code/ regex "[{}]" 0:meta +add-highlighter shared/bqn/code/ regex "[⋄,]" 0:meta +add-highlighter shared/bqn/code/ regex "[⟨⟩\[\]‿]" 0:magenta +add-highlighter shared/bqn/code/ regex "[()]" 0:bright-black +add-highlighter shared/bqn/code/ regex "[:;]" 0:bright-black +add-highlighter shared/bqn/code/ regex "[←↩→]" 0:normal +add-highlighter shared/bqn/code/ regex "·" 0:value +add-highlighter shared/bqn/code/ regex "¯?\b((\d+\.)?\d+(e¯?\d+)?|π|∞)(i¯?((\d+\.)?\d+(e¯?\d+)?|π|∞))?" 0:value +add-highlighter shared/bqn/code/ regex "[𝕗𝕘𝕨𝕩𝕤]" 0:normal +add-highlighter shared/bqn/code/ regex "•|•?\b[a-z][A-Z_a-z0-9]*|𝕣" 0:normal +add-highlighter shared/bqn/code/ regex "[𝔽𝔾𝕎𝕏𝕊+\-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!⍕⍎]" 0:green +add-highlighter shared/bqn/code/ regex "•?\b[A-Z][A-Z_a-z0-9]*" 0:green +add-highlighter shared/bqn/code/ regex "[˜˘¨⌜⁼´˝`]" 0:magenta +add-highlighter shared/bqn/code/ regex "•?\b_[A-Za-z][A-Z_a-z0-9]*|_𝕣" 0:magenta +add-highlighter shared/bqn/code/ regex "[∘○⊸⟜⌾⊘◶⎉⚇⍟⎊]" 0:yellow +add-highlighter shared/bqn/code/ regex "•?\b_[A-Za-z][A-Z_a-z0-9]*_|_𝕣_" 0:yellow + +# Commands +# ‾‾‾‾‾‾‾‾ + +define-command -hidden bqn-indent-on-new-line %` + evaluate-commands -draft -itersel %_ + # preserve previous line indent + try %{ execute-keys -draft K } + # copy # comments prefix + try %{ execute-keys -draft k s ^\h*\K#+\h* yP } + # indent after lines ending with { ⟨ [ + try %( execute-keys -draft k [{⟨\[]\h*$ j ) + # cleanup trailing white spaces on the previous line + try %{ execute-keys -draft k s \h+$ d } + _ +` + +define-command -hidden bqn-indent-on-closing %` + evaluate-commands -draft -itersel %_ + # align to opening bracket + try %( execute-keys -draft ^\h*[}⟩\]]$ h m 1 ) + _ +` + +~ -- cgit v1.2.3