runtime(typst): add folding to typst ftplugin
Commit:
https://github.com/vim/vim/commit/421ed14b8a0f50e0d2d9247dda49feb69352bd0d
Author: Luca Saccarola <[email protected]>
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 <[email protected]>
Signed-off-by: Luca Saccarola <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/E1t2ynw-00FYXT-G4%40256bit.org.