summaryrefslogtreecommitdiffstats
path: root/autoload/vimtex/fold/markers.vim
diff options
context:
space:
mode:
Diffstat (limited to 'autoload/vimtex/fold/markers.vim')
-rw-r--r--autoload/vimtex/fold/markers.vim60
1 files changed, 60 insertions, 0 deletions
diff --git a/autoload/vimtex/fold/markers.vim b/autoload/vimtex/fold/markers.vim
new file mode 100644
index 00000000..00aa1fce
--- /dev/null
+++ b/autoload/vimtex/fold/markers.vim
@@ -0,0 +1,60 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1
+
+" vimtex - LaTeX plugin for Vim
+"
+" Maintainer: Karl Yngve LervÄg
+" Email: karl.yngve@gmail.com
+"
+
+function! vimtex#fold#markers#new(config) abort " {{{1
+ return extend(deepcopy(s:folder), a:config).init()
+endfunction
+
+" }}}1
+
+
+let s:folder = {
+ \ 'name' : 'markers',
+ \ 'open' : '{{{',
+ \ 'close' : '}}}',
+ \ 're' : {},
+ \ 'opened' : 0,
+ \}
+function! s:folder.init() abort dict " {{{1
+ let self.re.start = '%.*' . self.open
+ let self.re.end = '%.*' . self.close
+ let self.re.text = [
+ \ [self.re.start . '\d\?\s*\zs.*', '% ' . self.open . ' '],
+ \ ['%\s*\zs.*\ze' . self.open, '% ' . self.open . ' '],
+ \ ['^.*\ze\s*%', ''],
+ \]
+
+ let self.re.fold_re = escape(self.open . '|' . self.close, '{}%+*.')
+
+ return self
+endfunction
+
+" }}}1
+function! s:folder.level(line, lnum) abort dict " {{{1
+ if a:line =~# self.re.start
+ let s:self.opened = 1
+ return 'a1'
+ elseif a:line =~# self.re.end
+ let s:self.opened = 0
+ return 's1'
+ endif
+endfunction
+
+" }}}1
+function! s:folder.text(line, level) abort dict " {{{1
+ for [l:re, l:pre] in self.re.text
+ let l:text = matchstr(a:line, l:re)
+ if !empty(l:text) | return l:pre . l:text | endif
+ endfor
+
+ return '% ' . self.open . ' ' . getline(v:foldstart + 1)
+endfunction
+
+" }}}1
+
+endif