From a0fd51c1e2db17ab21e2a2c907b232d05dfffc88 Mon Sep 17 00:00:00 2001 From: Christian Clason Date: Mon, 15 Jul 2024 20:02:22 +0200 Subject: vim-patch:1cc4cae: runtime(typst): Add typst runtime files closes: vim/vim#15234 https://github.com/vim/vim/commit/1cc4cae961a7b49608ef7bd56837cc723d49db4d Co-authored-by: Gregory Anders --- runtime/autoload/typst.vim | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 runtime/autoload/typst.vim (limited to 'runtime/autoload') diff --git a/runtime/autoload/typst.vim b/runtime/autoload/typst.vim new file mode 100644 index 0000000000..55edd23928 --- /dev/null +++ b/runtime/autoload/typst.vim @@ -0,0 +1,50 @@ +" Language: Typst +" Maintainer: Gregory Anders +" Last Change: 2024-07-14 +" Based on: https://github.com/kaarmu/typst.vim + +function! typst#indentexpr() abort + let l:lnum = v:lnum + let s:sw = shiftwidth() + + let [l:plnum, l:pline] = s:get_prev_nonblank(l:lnum - 1) + if l:plnum == 0 | return 0 | endif + + let l:line = getline(l:lnum) + let l:ind = indent(l:plnum) + + let l:synname = synIDattr(synID(l:lnum, 1, 1), 'name') + + " Use last indent for block comments + if l:synname == 'typstCommentBlock' + return l:ind + endif + + if l:pline =~ '\v[{[(]\s*$' + let l:ind += s:sw + endif + + if l:line =~ '\v^\s*[}\])]' + let l:ind -= s:sw + endif + + return l:ind +endfunction + +" Gets the previous non-blank line that is not a comment. +function! s:get_prev_nonblank(lnum) abort + let l:lnum = prevnonblank(a:lnum) + let l:line = getline(l:lnum) + + while l:lnum > 0 && l:line =~ '^\s*//' + let l:lnum = prevnonblank(l:lnum - 1) + let l:line = getline(l:lnum) + endwhile + + return [l:lnum, s:remove_comments(l:line)] +endfunction + +" Removes comments from the given line. +function! s:remove_comments(line) abort + return substitute(a:line, '\s*//.*', '', '') +endfunction -- cgit