kakrc.kak: refactor grammar handling

This commit is contained in:
Maxime Coste 2017-10-23 10:56:45 +08:00
parent 6740e3cc0c
commit 6d65d8e778

View File

@ -26,30 +26,31 @@ add-highlighter -group / regions -default code kakrc \
%sh{ %sh{
# Grammar # Grammar
keywords="edit|write|write-all|kill|quit|write-quit|write-all-quit|map|unmap|alias|unalias" keywords="edit write write-all kill quit write-quit write-all-quit map unmap alias unalias
keywords="${keywords}|buffer|buffer-next|buffer-previous|delete-buffer|add-highlighter|remove-highlighter" buffer buffer-next buffer-previous delete-buffer add-highlighter remove-highlighter
keywords="${keywords}|hook|remove-hooks|define-command|echo|debug|source|try|fail" hook remove-hooks define-command echo debug source try fail
keywords="${keywords}|set-option|unset-option|update-option|declare-option|exec|eval|prompt|menu|on-key|info" set-option unset-option update-option declare-option exec eval prompt menu on-key info
keywords="${keywords}|set-face|rename-client|set-register|select|change-directory|rename-session|colorscheme" set-face rename-client set-register select change-directory rename-session colorscheme"
attributes="global|buffer|window|current" attributes="global buffer window current
attributes="${attributes}|normal|insert|menu|prompt|goto|view|user|object" normal insert menu prompt goto view user object
attributes="${attributes}|number_lines|show_matching|show_whitespaces|fill|regex|dynregex|group|flag_lines|ranges|line|column|wrap|ref|regions|replace-ranges" number_lines show_matching show_whitespaces fill regex dynregex group flag_lines
types="int|bool|str|regex|int-list|str-list|completions|line-specs|range-specs" ranges line column wrap ref regions replace-ranges"
values="default|black|red|green|yellow|blue|magenta|cyan|white|" types="int bool str regex int-list str-list completions line-specs range-specs"
values="default black red green yellow blue magenta cyan white"
join() { printf "%s" "$1" | tr -s ' \n' "$2"; }
# Add the language's grammar to the static completion list # Add the language's grammar to the static completion list
printf %s\\n "hook global WinSetOption filetype=kak %{ printf '%s\n' "hook global WinSetOption filetype=kak %{
set window static_words '${keywords}:${attributes}:${types}:${values}' set window static_words '$(join "${keywords}:${attributes}:${types}:${values}" '|')'
set -- window extra_word_chars '-' set -- window extra_word_chars '-'
}" | sed 's,|,:,g' }"
# Highlight keywords (which are always surrounded by whitespace) # Highlight keywords (which are always surrounded by whitespace)
printf %s " printf '%s\n' "add-highlighter -group /kakrc/code regex [\s\A]\K($(join "${keywords}" '|'))(?=[\s\z])\b 0:keyword
add-highlighter -group /kakrc/code regex [\s\A]\K(${keywords})(?=[\s\z])\b 0:keyword add-highlighter -group /kakrc/code regex [\s\A]\K($(join "${attributes}" '|'))(?=[\s\z])\b 0:attribute
add-highlighter -group /kakrc/code regex [\s\A]\K(${attributes})(?=[\s\z])\b 0:attribute add-highlighter -group /kakrc/code regex [\s\A]\K($(join "${types}" '|'))(?=[\s\z])\b 0:type
add-highlighter -group /kakrc/code regex [\s\A]\K(${types})(?=[\s\z])\b 0:type add-highlighter -group /kakrc/code regex [\s\A]\K($(join "${values}" '|'))(?=[\s\z])\b 0:value"
add-highlighter -group /kakrc/code regex [\s\A]\K(${values})(?=[\s\z])\b 0:value
"
} }
add-highlighter -group /kakrc/code regex \brgb:[0-9a-fA-F]{6}\b 0:value add-highlighter -group /kakrc/code regex \brgb:[0-9a-fA-F]{6}\b 0:value