diff options
| author | Andrés González <gonzalez.af@gmail.com> | 2022-03-16 21:55:44 -0500 |
|---|---|---|
| committer | Andrés González <gonzalez.af@gmail.com> | 2022-03-16 21:55:44 -0500 |
| commit | 9ac6669e5081e095ee7532210bf3379f553de4ea (patch) | |
| tree | 41b83e39f5188cd5481165208f83ef06ce103fed /rc/filetype/twig.kak | |
| parent | eaea1d20f31f964c893a27a1ab6eaa5d2be3b8a8 (diff) | |
basic support for twig
Diffstat (limited to 'rc/filetype/twig.kak')
| -rw-r--r-- | rc/filetype/twig.kak | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/rc/filetype/twig.kak b/rc/filetype/twig.kak new file mode 100644 index 00000000..21f8cebc --- /dev/null +++ b/rc/filetype/twig.kak @@ -0,0 +1,95 @@ +# https://twig.symfony.com/doc/3.x/templates.html +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +# Detection +# ‾‾‾‾‾‾‾‾‾ + +hook global BufCreate .*[.](twig) %{ + set-option buffer filetype twig +} + +# Initialization +# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾ + +hook global WinSetOption filetype=twig %[ + require-module twig + + hook window ModeChange pop:insert:.* -group twig-trim-indent twig-trim-indent + hook window InsertChar \n -group twig-insert twig-insert-on-new-line + hook window InsertChar \n -group twig-indent twig-indent-on-new-line + hook window InsertChar '>' -group twig-indent twig-indent-on-grater-than + hook window InsertChar '#' -group twig-auto-close twig-auto-close-delim + hook window InsertChar '%' -group twig-auto-close twig-auto-close-delim + set-option buffer extra_word_chars '_' '-' + + hook -once -always window WinSetOption filetype=.* %{ remove-hooks window twig-.+ } +] + +hook -group twig-highlight global WinSetOption filetype=twig %{ + add-highlighter window/twig ref twig + hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/twig } +} + + +provide-module twig %[ + +require-module html + +# Highlighters +# ‾‾‾‾‾‾‾‾‾‾‾‾ + +add-highlighter shared/twig regions +add-highlighter shared/twig/core default-region group +add-highlighter shared/twig/comment region \{# [#]\} fill comment +add-highlighter shared/twig/delim region \{([%]-?|\{) (-?[%]|\})\} regions + +add-highlighter shared/twig/core/ ref html + +add-highlighter shared/twig/delim/base default-region group +add-highlighter shared/twig/delim/double_string region '"' (?<!\\)(\\\\)*" fill string +add-highlighter shared/twig/delim/single_string region "'" (?<!\\)(\\\\)*' fill string +add-highlighter shared/twig/delim/base/ regex (\w+)\h= 1:variable + +# functions +add-highlighter shared/twig/delim/base/ regex \b(\w+)\( 1:function + +# filters +add-highlighter shared/twig/delim/base/ regex \b(abs|batch|capitalize|column|convert_encoding|country_name|currency_name|currency_symbol|data_uri|date|date_modify|default|e|escape|filter|first|format|format_currency|format_date|format_datetime|format_number|format_time|html_to_markdown|inline_css|inky_to_html|join|json_encode|keys|language_name|last|length|locale_name|lower|map|markdown_to_html|merge|nl2br|number_format|raw|reduce|replace|reverse|round|slice|slug|sort|spaceless|split|striptags|timezone_name|title|trim|u|upper|url_encode)(\()?\b 1:operator + +# tags +add-highlighter shared/twig/delim/base/ regex \b((extends|deprecated|do|flush|import|from|elseif|else|include|set|use)|(end)?(apply|autoescape|block|cache|embed|for|if|macro|sandbox|set|verbatim|with))\b 0:keyword 0:+i + +# logic +# and or not in is matches + +# delimiters +add-highlighter shared/twig/delim/base/ regex (\{[%]|[%]\}) 0:function +add-highlighter shared/twig/delim/base/ regex (\{\{|\}\}) 0:operator + +# Commands +# ‾‾‾‾‾‾‾‾ + +define-command -hidden twig-trim-indent html-trim-indent +define-command -hidden twig-indent-on-new-line html-indent-on-new-line +define-command -hidden twig-indent-on-grater-than html-indent-on-greater-than + +define-command -hidden twig-auto-close-delim %[ + evaluate-commands -itersel %[ + try %[ + execute-keys -draft <semicolon>hH<a-k>\h*\{<ret>lyp + execute-keys <esc>hi<space><esc>hi<space> + ] + ] +] + +define-command -hidden twig-insert-on-new-line %[ + evaluate-commands -draft -itersel %/ + execute-keys <semicolon> + try %[ + execute-keys -draft k<a-x><a-k>^\h*\{\[%#\{\]\h+$<ret> + execute-keys -draft jghd + ] + / +] + +] |
