aboutsummaryrefslogtreecommitdiff
path: root/dot_vim/ftplugin/latex-suite/folding.vim
diff options
context:
space:
mode:
Diffstat (limited to 'dot_vim/ftplugin/latex-suite/folding.vim')
-rw-r--r--dot_vim/ftplugin/latex-suite/folding.vim393
1 files changed, 0 insertions, 393 deletions
diff --git a/dot_vim/ftplugin/latex-suite/folding.vim b/dot_vim/ftplugin/latex-suite/folding.vim
deleted file mode 100644
index dfaa450..0000000
--- a/dot_vim/ftplugin/latex-suite/folding.vim
+++ /dev/null
@@ -1,393 +0,0 @@
-"=============================================================================
-" File: folding.vim
-" Author: Srinath Avadhanula
-" modifications/additions by Zhang Linbo
-" CVS: $Id: folding.vim 997 2006-03-20 09:45:45Z srinathava $
-" Created: Tue Apr 23 05:00 PM 2002 PST
-"
-" Description: functions to interact with Syntaxfolds.vim
-"=============================================================================
-
-nnoremap <unique> <Plug>Tex_RefreshFolds :call MakeTexFolds(1)<cr>
-
-augroup LatexSuite
- au LatexSuite User LatexSuiteFileType
- \ call Tex_Debug('folding.vim: catching LatexSuiteFileType', 'fold') |
- \ call Tex_SetFoldOptions()
-augroup END
-
-" Tex_SetFoldOptions: sets maps for every buffer {{{
-" Description:
-function! Tex_SetFoldOptions()
- if exists('b:doneSetFoldOptions')
- return
- endif
- let b:doneSetFoldOptions = 1
-
- setlocal foldtext=TexFoldTextFunction()
-
- if g:Tex_Folding && g:Tex_AutoFolding
- call MakeTexFolds(0)
- endif
-
- let s:ml = exists('g:mapleader') ? g:mapleader : "\\"
-
- call Tex_MakeMap(s:ml."rf", "<Plug>Tex_RefreshFolds", 'n', '<silent> <buffer>')
-
-endfunction " }}}
-" Tex_FoldSections: creates section folds {{{
-" Author: Zhang Linbo
-" Description:
-" This function takes a comma seperated list of "sections" and creates fold
-" definitions for them. The first item is supposed to be the "shallowest" field
-" and the last is the "deepest". See g:Tex_FoldedSections for the default
-" definition of the lst input argument.
-"
-" **works recursively**
-function! Tex_FoldSections(lst, endpat)
- let i = match(a:lst, ',')
- if i > 0
- let s = strpart(a:lst, 0, i)
- else
- let s = a:lst
- endif
- if s =~ '%%fakesection'
- let s = '^\s*' . s
- else
- let s = '^\s*\\' . s . '\W'
- endif
- let endpat = s . '\|' . a:endpat
- if i > 0
- call Tex_FoldSections(strpart(a:lst,i+1), endpat)
- endif
- let endpat = '^\s*\\appendix\W\|' . endpat
- call AddSyntaxFoldItem(s, endpat, 0, -1)
-endfunction
-" }}}
-" MakeTexFolds: function to create fold items for latex. {{{
-"
-" used in conjunction with MakeSyntaxFolds().
-" see ../plugin/syntaxFolds.vim for documentation
-function! MakeTexFolds(force)
- if exists('g:Tex_Folding') && !g:Tex_Folding
- return
- endif
- if &ft != 'tex'
- return
- end
-
- " Setup folded items lists g:Tex_Foldedxxxx
- " 1. Use default value if g:Tex_Foldedxxxxxx is not defined
- " 2. prepend default value to g:Tex_Foldedxxxxxx if it starts with ','
- " 3. append default value to g:Tex_Foldedxxxxxx if it ends with ','
-
- " Folding items which are not caught in any of the standard commands,
- " environments or sections.
- let s = 'item,slide,preamble,<<<'
- if !exists('g:Tex_FoldedMisc')
- let g:Tex_FoldedMisc = s
- elseif g:Tex_FoldedMisc[0] == ','
- let g:Tex_FoldedMisc = s . g:Tex_FoldedMisc
- elseif g:Tex_FoldedMisc =~ ',$'
- let g:Tex_FoldedMisc = g:Tex_FoldedMisc . s
- endif
-
- " By default do not fold any commands. It looks like trying to fold
- " commands is a difficult problem since commands can be arbitrarily nested
- " and the end patterns are not unique unlike the case of environments.
- " For this to work well, we need a regexp which will match a line only if
- " a command begins on that line but does not end on that line. This
- " requires a regexp which will match unbalanced curly braces and that is
- " apparently not doable with regexps.
- let s = ''
- if !exists('g:Tex_FoldedCommands')
- let g:Tex_FoldedCommands = s
- elseif g:Tex_FoldedCommands[0] == ','
- let g:Tex_FoldedCommands = s . g:Tex_FoldedCommands
- elseif g:Tex_FoldedCommands =~ ',$'
- let g:Tex_FoldedCommands = g:Tex_FoldedCommands . s
- endif
-
- let s = 'verbatim,comment,eq,gather,align,figure,table,thebibliography,'
- \. 'keywords,abstract,titlepage'
- if !exists('g:Tex_FoldedEnvironments')
- let g:Tex_FoldedEnvironments = s
- elseif g:Tex_FoldedEnvironments[0] == ','
- let g:Tex_FoldedEnvironments = s . g:Tex_FoldedEnvironments
- elseif g:Tex_FoldedEnvironments =~ ',$'
- let g:Tex_FoldedEnvironments = g:Tex_FoldedEnvironments . s
- endif
-
- if !exists('g:Tex_FoldedSections')
- let g:Tex_FoldedSections = 'part,chapter,section,%%fakesection,'
- \. 'subsection,subsubsection,paragraph'
- endif
-
- " the order in which these calls are made decides the nestedness. in
- " latex, a table environment will always be embedded in either an item or
- " a section etc. not the other way around. so we first fold up all the
- " tables. and then proceed with the other regions.
-
- let b:numFoldItems = 0
-
- " ========================================================================
- " How to add new folding items {{{
- " ========================================================================
- "
- " Each of the following function calls defines a syntax fold region. Each
- " definition consists of a call to the AddSyntaxFoldItem() function.
- "
- " The order in which the folds are defined is important. Juggling the
- " order of the function calls will create havoc with folding. The
- " "deepest" folding item needs to be called first. For example, if
- " the \begin{table} environment is a subset (or lies within) the \section
- " environment, then add the definition for the \table first.
- "
- " The AddSyntaxFoldItem() function takes either 4 or 6 arguments. When it
- " is called with 4 arguments, it is equivalent to calling it with 6
- " arguments with the last two left blank (i.e as empty strings)
- "
- " The explanation for each argument is as follows:
- " startpat: a line matching this pattern defines the beginning of a fold.
- " endpat : a line matching this pattern defines the end of a fold.
- " startoff: this is the offset from the starting line at which folding will
- " actually start
- " endoff : like startoff, but gives the offset of the actual fold end from
- " the line satisfying endpat.
- " startoff and endoff are necessary when the folding region does
- " not have a specific end pattern corresponding to a start
- " pattern. for example in latex,
- " \begin{section}
- " defines the beginning of a section, but its not necessary to
- " have a corresponding
- " \end{section}
- " the section is assumed to end 1 line _before_ another section
- " starts.
- " startskip: a pattern which defines the beginning of a "skipped" region.
- "
- " For example, suppose we define a \itemize fold as follows:
- " startpat = '^\s*\\item',
- " endpat = '^\s*\\item\|^\s*\\end{\(enumerate\|itemize\|description\)}',
- " startoff = 0,
- " endoff = -1
- "
- " This defines a fold which starts with a line beginning with an
- " \item and ending one line before a line beginning with an
- " \item or \end{enumerate} etc.
- "
- " Then, as long as \item's are not nested things are fine.
- " However, once items begin to nest, the fold started by one
- " \item can end because of an \item in an \itemize
- " environment within this \item. i.e, the following can happen:
- "
- " \begin{itemize}
- " \item Some text <------- fold will start here
- " This item will contain a nested item
- " \begin{itemize} <----- fold will end here because next line contains \item...
- " \item Hello
- " \end{itemize} <----- ... instead of here.
- " \item Next item of the parent itemize
- " \end{itemize}
- "
- " Therefore, in order to completely define a folding item which
- " allows nesting, we need to also define a "skip" pattern.
- " startskip and end skip do that.
- " Leave '' when there is no nesting.
- " endskip: the pattern which defines the end of the "skip" pattern for
- " nested folds.
- "
- " Example:
- " 1. A syntax fold region for a latex section is
- " startpat = "\\section{"
- " endpat = "\\section{"
- " startoff = 0
- " endoff = -1
- " startskip = ''
- " endskip = ''
- " Note that the start and end patterns are thus the same and endoff has a
- " negative value to capture the effect of a section ending one line before
- " the next starts.
- " 2. A syntax fold region for the \itemize environment is:
- " startpat = '^\s*\\item',
- " endpat = '^\s*\\item\|^\s*\\end{\(enumerate\|itemize\|description\)}',
- " startoff = 0,
- " endoff = -1,
- " startskip = '^\s*\\begin{\(enumerate\|itemize\|description\)}',
- " endskip = '^\s*\\end{\(enumerate\|itemize\|description\)}'
- " Note the use of startskip and endskip to allow nesting.
- "
- "
- " }}}
- " ========================================================================
-
- " {{{ comment lines
- if g:Tex_FoldedMisc =~ '\<comments\>'
- call AddSyntaxFoldItem (
- \ '^%\([^%]\|[^f]\|[^a]\|[^k]\|[^e]\)',
- \ '^[^%]',
- \ 0,
- \ -1
- \ )
- endif
- " }}}
-
- " {{{ items
- if g:Tex_FoldedMisc =~ '\<item\>'
- call AddSyntaxFoldItem (
- \ '^\s*\\item',
- \ '^\s*\\item\|^\s*\\end{\(enumerate\|itemize\|description\)}',
- \ 0,
- \ -1,
- \ '^\s*\\begin{\(enumerate\|itemize\|description\)}',
- \ '^\s*\\end{\(enumerate\|itemize\|description\)}'
- \ )
- endif
- " }}}
-
- " {{{ title
- if g:Tex_FoldedMisc =~ '\<title\>'
- call AddSyntaxFoldItem (
- \ '^\s*\\title\W',
- \ '^\s*\\maketitle',
- \ 0,
- \ 0
- \ )
- endif
- " }}}
-
- " Commands and Environments {{{
- " Fold the commands and environments in 2 passes.
- let pass = 0
- while pass < 2
- if pass == 0
- let lst = g:Tex_FoldedCommands
- else
- let lst = g:Tex_FoldedEnvironments
- endif
- while lst != ''
- let i = match(lst, ',')
- if i > 0
- let s = strpart(lst, 0, i)
- let lst = strpart(lst, i+1)
- else
- let s = lst
- let lst = ''
- endif
- if s != ''
- if pass == 0
- " NOTE: This pattern ensures that a command which is
- " terminated on the same line will not start a fold.
- " However, it will also refuse to fold certain commands
- " which have not terminated. eg:
- " \commandname{something \bf{text} and
- " will _not_ start a fold.
- " In other words, the pattern is safe, but not exact.
- call AddSyntaxFoldItem('^\s*\\'.s.'{[^{}]*$','^[^}]*}',0,0)
- else
- call AddSyntaxFoldItem('^\s*\\begin{'.s,'^\s*\\end{'.s,0,0)
- endif
- endif
- endwhile
- let pass = pass + 1
- endwhile
- " }}}
-
- " Sections {{{
- if g:Tex_FoldedSections != ''
- call Tex_FoldSections(g:Tex_FoldedSections,
- \ '^\s*\\frontmatter\|^\s*\\mainmatter\|^\s*\\backmatter\|'
- \. '^\s*\\begin{thebibliography\|>>>\|^\s*\\endinput\|'
- \. '^\s*\\begin{slide\|^\s*\\end{document')
- endif
- " }}}
-
- " {{{ slide
- if g:Tex_FoldedMisc =~ '\<slide\>'
- call AddSyntaxFoldItem (
- \ '^\s*\\begin{slide',
- \ '^\s*\\appendix\W\|^\s*\\chapter\W\|^\s*\\end{slide\|^\s*\\end{document',
- \ 0,
- \ 0
- \ )
- endif
- " }}}
-
- " {{{ preamble
- if g:Tex_FoldedMisc =~ '\<preamble\>'
- call AddSyntaxFoldItem (
- \ '^\s*\\document\(class\|style\).*{',
- \ '^\s*\\begin{document}',
- \ 0,
- \ -1
- \ )
- endif
- " }}}
-
- " Manually folded regions {{{
- if g:Tex_FoldedMisc =~ '\(^\|,\)<<<\(,\|$\)'
- call AddSyntaxFoldItem (
- \ '<<<',
- \ '>>>',
- \ 0,
- \ 0
- \ )
- endif
- " }}}
-
- call MakeSyntaxFolds(a:force)
- normal! zv
-endfunction
-
-" }}}
-" TexFoldTextFunction: create fold text for folds {{{
-function! TexFoldTextFunction()
- let leadingSpace = matchstr(' ', ' \{,'.indent(v:foldstart).'}')
- if getline(v:foldstart) =~ '^\s*\\begin{'
- let header = matchstr(getline(v:foldstart),
- \ '^\s*\\begin{\zs\([:alpha:]*\)[^}]*\ze}')
- let caption = ''
- let label = ''
- let i = v:foldstart
- while i <= v:foldend
- if getline(i) =~ '\\caption'
- " distinguish between
- " \caption{fulldesc} - fulldesc will be displayed
- " \caption[shortdesc]{fulldesc} - shortdesc will be displayed
- if getline(i) =~ '\\caption\['
- let caption = matchstr(getline(i), '\\caption\[\zs[^\]]*')
- let caption = substitute(caption, '\zs\]{.*}[^}]*$', '', '')
- else
- let caption = matchstr(getline(i), '\\caption{\zs.*')
- let caption = substitute(caption, '\zs}[^}]*$', '', '')
- end
- elseif getline(i) =~ '\\label'
- let label = matchstr(getline(i), '\\label{\zs.*')
- let label = substitute(label, '\zs}[^}]*$', '', '')
- end
-
- let i = i + 1
- endwhile
-
- let ftxto = foldtext()
- " if no caption found, then use the second line.
- if caption == ''
- let caption = getline(v:foldstart + 1)
- end
-
- let retText = matchstr(ftxto, '^[^:]*').': '.header.
- \ ' ('.label.') : '.caption
- return leadingSpace.retText
-
- elseif getline(v:foldstart) =~ '^%' && getline(v:foldstart) !~ '^%%fake'
- let ftxto = foldtext()
- return leadingSpace.substitute(ftxto, ':', ': % ', '')
- elseif getline(v:foldstart) =~ '^\s*\\document\(class\|style\).*{'
- let ftxto = leadingSpace.foldtext()
- return substitute(ftxto, ':', ': Preamble: ', '')
- else
- return leadingSpace.foldtext()
- end
-endfunction
-" }}}
-
-" vim:fdm=marker:ff=unix:noet:ts=4:sw=4