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) %{
|
2017-11-03 08:34:41 +01:00
|
|
|
set-option buffer filetype latex
|
2016-02-09 10:52:18 +01:00
|
|
|
}
|
|
|
|
|
2019-04-10 05:54:19 +02: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 }
|
2019-10-16 11:19:43 +02:00
|
|
|
hook window ModeChange pop:insert:.* -group latex-indent %{ latex-trim-indent }
|
2021-09-12 22:31:12 +02:00
|
|
|
hook -once -always window WinSetOption filetype=.* %{ remove-hooks window latex-indent }
|
2020-09-05 15:49:50 +02:00
|
|
|
hook window InsertChar \n -group latex-insert latex-insert-on-new-line
|
2019-05-31 17:27:36 +02:00
|
|
|
)
|
2019-03-13 22:00:59 +01:00
|
|
|
|
2019-04-10 05:54:19 +02: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
|
|
|
|
# ‾‾‾‾‾‾‾‾‾‾‾‾
|
|
|
|
|
2018-07-01 11:53:35 +02:00
|
|
|
add-highlighter shared/latex regions
|
|
|
|
add-highlighter shared/latex/content default-region group
|
2018-07-02 12:59:12 +02:00
|
|
|
add-highlighter shared/latex/comment region '(?<!\\)%' '\n' fill comment
|
2016-02-09 10:52:18 +01:00
|
|
|
|
|
|
|
# Scopes, starting with a backslash
|
2018-07-01 11:53:35 +02:00
|
|
|
add-highlighter shared/latex/content/ regex '\\(?!_)\w+\b' 0:keyword
|
2016-02-09 10:52:18 +01:00
|
|
|
# Options passed to scopes, between brackets
|
2018-07-01 11:53:35 +02:00
|
|
|
add-highlighter shared/latex/content/ regex '\\(?!_)\w+\b\[([^\]]+)\]' 1:value
|
2016-02-09 10:52:18 +01:00
|
|
|
# Content between dollar signs/pairs
|
2020-05-29 23:40:25 +02:00
|
|
|
add-highlighter shared/latex/content/ regex '((?<!\\)\$(\\\$|[^$])+\$)|((?<!\\)\$\$(\\\$|[^$])+\$\$)|((?<!\\)\\\[.*?\\\])|(\\\(.*?\\\))' 0:meta
|
2016-02-09 10:52:18 +01:00
|
|
|
# Emphasized text
|
2018-07-01 11:53:35 +02:00
|
|
|
add-highlighter shared/latex/content/ regex '\\(emph|textit)\{([^}]+)\}' 2:default+i
|
2016-02-09 10:52:18 +01:00
|
|
|
# Bold text
|
2018-07-01 11:53:35 +02:00
|
|
|
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> )
|
2020-07-28 05:43:07 +02:00
|
|
|
# deindent closing brace(s) when after cursor
|
2020-07-29 17:40:58 +02:00
|
|
|
try %( execute-keys -draft <a-x> <a-k> ^\h*\} <ret> gh / \} <ret> m <a-S> 1<a-&> )
|
2019-05-31 17:27:36 +02:00
|
|
|
# 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-&>
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
2020-09-05 15:49:50 +02:00
|
|
|
define-command -hidden latex-insert-on-new-line %(
|
|
|
|
evaluate-commands -no-hooks -draft -itersel %(
|
|
|
|
# Wisely add "\end{...}".
|
|
|
|
evaluate-commands -save-regs xz %(
|
|
|
|
# Save previous line indent in register x.
|
|
|
|
try %( execute-keys -draft k<a-x>s^\h+<ret>"xy ) catch %( reg x '' )
|
|
|
|
# Save item of begin in register z.
|
|
|
|
try %( execute-keys -draft k<a-x>s\{.*\}<ret>"zy ) catch %( reg z '' )
|
|
|
|
try %(
|
|
|
|
# Validate previous line and that it is not closed yet.
|
|
|
|
execute-keys -draft k<a-x> <a-k>^<c-r>x\h*\\begin\{.*\}<ret> J}iJ<a-x> <a-K>^<c-r>x(\\end\<c-r>z<backspace>\})<ret>
|
|
|
|
# Auto insert "\end{...}".
|
|
|
|
execute-keys -draft o<c-r>x\end<c-r>z<esc>
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
2019-05-31 17:27:36 +02:00
|
|
|
~
|