kakoune/rc/filetype/latex.kak

95 lines
3.2 KiB
Plaintext
Raw Normal View History

2016-02-09 10:52:18 +01:00
# https://www.latex-project.org/
#
# Detection
# ‾‾‾‾‾‾‾‾‾
2019-09-05 10:19:39 +02:00
hook global BufCreate .*\.(tex|cls|sty|dtx) %{
set-option buffer filetype latex
2016-02-09 10:52:18 +01:00
}
# Initialization
# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾
2019-05-31 17:27:36 +02:00
hook global WinSetOption filetype=latex %(
2019-03-13 22:00:59 +01:00
require-module latex
2019-05-31 17:27:36 +02:00
hook window InsertChar \n -group latex-indent %{ latex-indent-newline }
hook window InsertChar \} -group latex-indent %{ latex-indent-closing-brace }
hook window ModeChange pop:insert:.* -group latex-indent %{ latex-trim-indent }
2019-05-31 17:27:36 +02:00
hook -once -always window WinSetOption filetype=.* %{ remove-hooks latex-indent }
)
2019-03-13 22:00:59 +01:00
hook -group latex-highlight global WinSetOption filetype=latex %{
add-highlighter window/latex ref latex
hook -once -always window WinSetOption filetype=.* %{ remove-highlighter window/latex }
}
2019-05-31 17:27:36 +02:00
provide-module latex %~
2019-03-13 22:00:59 +01:00
2016-02-09 10:52:18 +01:00
# Highlighters
# ‾‾‾‾‾‾‾‾‾‾‾‾
add-highlighter shared/latex regions
add-highlighter shared/latex/content default-region group
add-highlighter shared/latex/comment region '(?<!\\)%' '\n' fill comment
2016-02-09 10:52:18 +01:00
# Scopes, starting with a backslash
add-highlighter shared/latex/content/ regex '\\(?!_)\w+\b' 0:keyword
2016-02-09 10:52:18 +01:00
# Options passed to scopes, between brackets
add-highlighter shared/latex/content/ regex '\\(?!_)\w+\b\[([^\]]+)\]' 1:value
2016-02-09 10:52:18 +01:00
# Content between dollar signs/pairs
2018-08-09 11:27:40 +02:00
add-highlighter shared/latex/content/ regex '(\$(\\\$|[^$])+\$)|(\$\$(\\\$|[^$])+\$\$)' 0:meta
2016-02-09 10:52:18 +01:00
# Emphasized text
add-highlighter shared/latex/content/ regex '\\(emph|textit)\{([^}]+)\}' 2:default+i
2016-02-09 10:52:18 +01:00
# Bold text
add-highlighter shared/latex/content/ regex '\\textbf\{([^}]+)\}' 1:default+b
2020-01-14 17:31:35 +01:00
# Section headings
add-highlighter shared/latex/content/ regex '\\(part|section)\*?\{([^}]+)\}' 2:title
add-highlighter shared/latex/content/ regex '\\(chapter|(sub)+section|(sub)*paragraph)\*?\{([^}]+)\}' 4:header
2016-02-09 10:52:18 +01:00
2019-05-31 17:27:36 +02:00
# Indent
# ------
define-command -hidden latex-trim-indent %{
evaluate-commands -no-hooks -draft -itersel %{
try %{ execute-keys <a-x> 1s^(\h+)$<ret> d }
}
}
define-command -hidden latex-indent-newline %(
evaluate-commands -no-hooks -draft -itersel %(
# copy '%' comment prefix and following white spaces
try %{ execute-keys -draft k<a-x> s^\h*%\h*<ret> y jgh P }
# preserve previous line indent
try %{ execute-keys -draft K<a-&> }
# cleanup trailing whitespaces from previous line
try %{ execute-keys -draft k<a-x> s\h+$<ret> d }
# indent after line ending with {
try %( execute-keys -draft k<a-x> <a-k>\{$<ret> j<a-gt> )
# indent after line ending with \begin{...}[...]{...}, with multiple
# sets of arguments possible
try %(
execute-keys -draft \
k<a-x> \
<a-k>\\begin\h*\{[^\}]+\}(\h|\[.*\]|\{.*\})*$<ret> \
j<a-gt>
)
)
2019-03-13 22:00:59 +01:00
)
2019-05-31 17:27:36 +02:00
define-command -hidden latex-indent-closing-brace %(
evaluate-commands -no-hooks -draft -itersel %(
# Align lone } with matching bracket
try %( execute-keys -draft <a-x>_ <a-k>\A\}\z<ret> m<a-S>1<a-&> )
# Align \end{...} with corresponding \begin{...}
try %(
execute-keys -draft h<a-h> 1s\\end\h*\{([^\}]+)\}\z<ret> \
<a-?>\\begin\s*\{<c-r>.\}<ret> <a-S>1<a-&>
)
)
)
~