summaryrefslogtreecommitdiffstats
path: root/ftplugin/latex-box/folding.vim
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2014-07-29 13:03:49 +0200
committerAdam Stankiewicz <sheerun@sher.pl>2014-07-29 13:03:49 +0200
commit5f1223fbc5285689db812236c9100329740a805b (patch)
tree58bc6f11540011afb25826c96f65fa35f5687291 /ftplugin/latex-box/folding.vim
parenta59f644d49ee029df48586a6c3c358858f1e6739 (diff)
downloadvim-polyglot-1.9.2.tar.gz
vim-polyglot-1.9.2.zip
Major updatev1.9.2
Diffstat (limited to 'ftplugin/latex-box/folding.vim')
-rw-r--r--ftplugin/latex-box/folding.vim115
1 files changed, 75 insertions, 40 deletions
diff --git a/ftplugin/latex-box/folding.vim b/ftplugin/latex-box/folding.vim
index badfc137..4fe13bc8 100644
--- a/ftplugin/latex-box/folding.vim
+++ b/ftplugin/latex-box/folding.vim
@@ -1,29 +1,22 @@
" Folding support for LaTeX
+
"
" Options
-" g:LatexBox_Folding - Turn on/off folding
-" g:LatexBox_fold_preamble - Turn on/off folding of preamble
-" g:LatexBox_fold_parts - Define parts (eq. appendix, frontmatter) to fold
-" g:LatexBox_fold_sections - Define section levels to fold
-" g:LatexBox_fold_envs - Turn on/off folding of environments
+" g:LatexBox_Folding - Turn on/off folding
+" g:LatexBox_fold_text - Turn on/off LatexBox fold text function
+" g:LatexBox_fold_preamble - Turn on/off folding of preamble
+" g:LatexBox_fold_parts - Define parts (eq. appendix, frontmatter) to fold
+" g:LatexBox_fold_sections - Define section levels to fold
+" g:LatexBox_fold_envs - Turn on/off folding of environments
+" g:LatexBox_fold_toc - Turn on/off folding of TOC
+" g:LatexBox_fold_toc_levels - Set max TOC fold level
"
-
-" {{{1 Set options
-if exists('g:LatexBox_Folding') && g:LatexBox_Folding == 1
- setl foldmethod=expr
- setl foldexpr=LatexBox_FoldLevel(v:lnum)
- setl foldtext=LatexBox_FoldText()
- "
- " The foldexpr function returns "=" for most lines, which means it can become
- " slow for large files. The following is a hack that is based on this reply to
- " a discussion on the Vim Developer list:
- " http://permalink.gmane.org/gmane.editors.vim.devel/14100
- "
- augroup FastFold
- autocmd!
- autocmd InsertEnter *.tex setlocal foldmethod=manual
- autocmd InsertLeave *.tex setlocal foldmethod=expr
- augroup end
+" {{{1 Initialize options to default values.
+if !exists('g:LatexBox_Folding')
+ let g:LatexBox_Folding=0
+endif
+if !exists('g:LatexBox_fold_text')
+ let g:LatexBox_fold_text=1
endif
if !exists('g:LatexBox_fold_preamble')
let g:LatexBox_fold_preamble=1
@@ -57,7 +50,45 @@ endif
if !exists('g:LatexBox_fold_toc_levels')
let g:LatexBox_fold_toc_levels=1
endif
+if !exists('g:LatexBox_fold_automatic')
+ let g:LatexBox_fold_automatic=1
+endif
+" }}}1
+if g:LatexBox_Folding == 0
+ finish
+endif
+
+" {{{1 Set folding options for vim
+setl foldexpr=LatexBox_FoldLevel(v:lnum)
+if g:LatexBox_fold_text == 1
+ setl foldtext=LatexBox_FoldText()
+endif
+if g:LatexBox_fold_automatic == 1
+ setl foldmethod=expr
+
+ "
+ " The foldexpr function returns "=" for most lines, which means it can become
+ " slow for large files. The following is a hack that is based on this reply to
+ " a discussion on the Vim Developer list:
+ " http://permalink.gmane.org/gmane.editors.vim.devel/14100
+ "
+ augroup FastFold
+ autocmd!
+ autocmd InsertEnter *.tex setlocal foldmethod=manual
+ autocmd InsertLeave *.tex setlocal foldmethod=expr
+ augroup end
+else
+ setl foldmethod=manual
+endif
+
+function! LatexBox_FoldOnDemand()
+ setl foldmethod=expr
+ normal! zx
+ setl foldmethod=manual
+endfunction
+
+command! LatexFold call LatexBox_FoldOnDemand()
" {{{1 LatexBox_FoldLevel help functions
@@ -137,9 +168,9 @@ function! LatexBox_FoldLevel(lnum)
" Fold preamble
if g:LatexBox_fold_preamble == 1
- if line =~# '\s*\\documentclass'
+ if line =~# s:notcomment . s:notbslash . '\s*\\documentclass'
return ">1"
- elseif line =~# '^\s*\\begin\s*{\s*document\s*}'
+ elseif line =~# s:notcomment . s:notbslash . '\s*\\begin\s*{\s*document\s*}'
return "0"
endif
endif
@@ -247,24 +278,13 @@ function! s:CaptionFrame(line)
endif
endfunction
-" {{{1 LatexBox_FoldText
-function! LatexBox_FoldText()
- " Initialize
+function! LatexBox_FoldText_title()
let line = getline(v:foldstart)
- let nlines = v:foldend - v:foldstart + 1
- let level = ''
let title = 'Not defined'
- " Fold level
- let level = strpart(repeat('-', v:foldlevel-1) . '*',0,3)
- if v:foldlevel > 3
- let level = strpart(level, 1) . v:foldlevel
- endif
- let level = printf('%-3s', level)
-
" Preamble
if line =~ '\s*\\documentclass'
- let title = "Preamble"
+ return "Preamble"
endif
" Parts, sections and fakesections
@@ -280,11 +300,11 @@ function! LatexBox_FoldText()
elseif line =~ '\\appendix'
let title = "Appendix"
elseif line =~ secpat1 . '.*}'
- let title = matchstr(line, secpat1 . '\zs.*\ze}')
+ let title = matchstr(line, secpat1 . '\zs.\{-}\ze}')
elseif line =~ secpat1
let title = matchstr(line, secpat1 . '\zs.*')
elseif line =~ secpat2 . '.*\]'
- let title = matchstr(line, secpat2 . '\zs.*\ze\]')
+ let title = matchstr(line, secpat2 . '\zs.\{-}\ze\]')
elseif line =~ secpat2
let title = matchstr(line, secpat2 . '\zs.*')
elseif line =~ 'Fake' . sections . ':'
@@ -330,7 +350,22 @@ function! LatexBox_FoldText()
endif
endif
- let title = strpart(title, 0, 68)
+ return title
+endfunction
+
+" {{{1 LatexBox_FoldText
+function! LatexBox_FoldText()
+ let nlines = v:foldend - v:foldstart + 1
+ let title = strpart(LatexBox_FoldText_title(), 0, 68)
+ let level = ''
+
+ " Fold level
+ let level = strpart(repeat('-', v:foldlevel-1) . '*',0,3)
+ if v:foldlevel > 3
+ let level = strpart(level, 1) . v:foldlevel
+ endif
+ let level = printf('%-3s', level)
+
return printf('%-3s %-68s #%5d', level, title, nlines)
endfunction