runtime(typst): add folding to typst ftplugin Commit: https://github.com/vim/vim/commit/421ed14b8a0f50e0d2d9247dda49feb69352bd0d Author: Luca Saccarola <github.e4...@aleeas.com> Date: Mon Oct 21 22:01:10 2024 +0200
runtime(typst): add folding to typst ftplugin closes: https://github.com/vim/vim/issues/15897 Signed-off-by: Gregory Anders <g...@gpanders.com> Signed-off-by: Luca Saccarola <github.e4...@aleeas.com> Signed-off-by: Christian Brabandt <c...@256bit.org> diff --git a/runtime/autoload/typst.vim b/runtime/autoload/typst.vim index 55edd2392..baf765a30 100644 --- a/runtime/autoload/typst.vim +++ b/runtime/autoload/typst.vim @@ -1,6 +1,6 @@ " Language: Typst " Maintainer: Gregory Anders -" Last Change: 2024-07-14 +" Last Change: 2024 Oct 21 " Based on: https://github.com/kaarmu/typst.vim function! typst#indentexpr() abort @@ -31,6 +31,31 @@ function! typst#indentexpr() abort return l:ind endfunction +function typst#foldexpr() + let line = getline(v:lnum) + + " Whenever the user wants to fold nested headers under the parent + let nested = get(g:, "typst_foldnested", 1) + + " Regular headers + let depth = match(line, '\(^=\+\)\@<=\( .*$\)\@=') + + " Do not fold nested regular headers + if depth > 1 && !nested + let depth = 1 + endif + + if depth > 0 + " check syntax, it should be typstMarkupHeading + let syncode = synstack(v:lnum, 1) + if len(syncode) > 0 && synIDattr(syncode[0], 'name') ==# 'typstMarkupHeading' + return ">" . depth + endif + endif + + return "=" +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) diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt index 252551c35..be3ba021d 100644 --- a/runtime/doc/filetype.txt +++ b/runtime/doc/filetype.txt @@ -1,4 +1,4 @@ -*filetype.txt* For Vim version 9.1. Last change: 2024 Oct 05 +*filetype.txt* For Vim version 9.1. Last change: 2024 Oct 21 VIM REFERENCE MANUAL by Bram Moolenaar @@ -939,6 +939,19 @@ TYPST *ft-typst-plugin* *g:typst_conceal* When |TRUE| the Typst filetype plugin will set the 'conceallevel' option to 2. + *g:typst_folding* +When |TRUE| the Typst filetype plugin will fold headings. (default: |FALSE|) + +To enable: > + let g:typst_folding = 1 +< + *g:typst_foldnested* +When |TRUE| the Typst filetype plugin will fold nested heading under their parents +(default: |TRUE|) + +To disable: > + let g:typst_foldnested = 0 +< VIM *ft-vim-plugin* The Vim filetype plugin defines mappings to move to the start and end of diff --git a/runtime/doc/tags b/runtime/doc/tags index 06e15d4b6..f8359ac11 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -7747,6 +7747,8 @@ g:typescript_host_keyword syntax.txt /*g:typescript_host_keyword* g:typst_cmd quickfix.txt /*g:typst_cmd* g:typst_conceal filetype.txt /*g:typst_conceal* g:typst_embedded_languages syntax.txt /*g:typst_embedded_languages* +g:typst_folding filetype.txt /*g:typst_folding* +g:typst_foldnested filetype.txt /*g:typst_foldnested* g:var eval.txt /*g:var* g:vim_indent indent.txt /*g:vim_indent* g:vim_indent_cont indent.txt /*g:vim_indent_cont* diff --git a/runtime/ftplugin/typst.vim b/runtime/ftplugin/typst.vim index 895fc688d..3841e427f 100644 --- a/runtime/ftplugin/typst.vim +++ b/runtime/ftplugin/typst.vim @@ -1,7 +1,7 @@ " Vim filetype plugin file " Language: Typst " Maintainer: Gregory Anders -" Last Change: 2024 Oct 04 +" Last Change: 2024 Oct 21 " Based on: https://github.com/kaarmu/typst.vim if exists('b:did_ftplugin') @@ -21,6 +21,12 @@ if get(g:, 'typst_conceal', 0) let b:undo_ftplugin .= ' cole<' endif +if has("folding") && get(g:, 'typst_folding', 0) + setlocal foldexpr=typst#foldexpr() + setlocal foldmethod=expr + let b:undo_ftplugin .= "|setl foldexpr< foldmethod<" +endif + if !exists('current_compiler') compiler typst let b:undo_ftplugin ..= "| compiler make" -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/vim_dev/E1t2ynw-00FYXT-G4%40256bit.org.