diff -r d22ae2e9efc2 -r 1bb2363eba47 .vim/bundle/vim-asciidoc-folding/after/ftplugin/asciidoc/folding.vim --- a/.vim/bundle/vim-asciidoc-folding/after/ftplugin/asciidoc/folding.vim Thu Oct 29 23:41:47 2015 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,121 +0,0 @@ -" Fold expression for asciidoc files -" -" NOTE: only supports Atx-style, not Setext style sections. See -" http://asciidoctor.org/docs/asciidoc-recommended-practices/ for more info. -" -" Script's originally based on https://github.com/nelstrom/vim-markdown-folding -" -" vim:set fdm=marker: - -" Fold expressions {{{1 -function! StackedMarkdownFolds() - if HeadingDepth(v:lnum) > 0 - return ">1" - else - return "=" - endif -endfunction - -function! NestedMarkdownFolds() - let depth = HeadingDepth(v:lnum) - if depth > 0 - return ">".depth - else - return "=" - endif -endfunction - -" Helpers {{{1 -function! s:SID() - return matchstr(expand(''), '\d\+_') -endfunction - -function! HeadingDepth(lnum) - " 5 ='s is deepest section level, according to `asciidoc --help syntax`. - " Only 1 = is the document header, which isn't really worth folding, so we - " ignore it and subtract one off the count to get the fold level. - let level=0 - let thisline = getline(a:lnum) - let hashCount = len(matchstr(thisline, '^=\{2,5}')) - " Ignore lines with too many ='s (usually block deliminators) - if hashCount > 1 && hashCount < 5 - let level = hashCount - 1 - endif - - if level > 0 && LineIsFenced(a:lnum) - " Ignore ='s if they appear within fenced code blocks - let level = 0 - endif - - return level -endfunction - -function! LineIsFenced(lnum) - if exists("b:current_syntax") && b:current_syntax ==# 'asciidoc' - " It's cheap to check if the current line has 'markdownCode' syntax group - return s:HasSyntaxGroup(a:lnum, 'markdownCode') - endif -endfunction - -function! s:HasSyntaxGroup(lnum, targetGroup) - let syntaxGroup = map(synstack(a:lnum, 1), 'synIDattr(v:val, "name")') - for value in syntaxGroup - " Likely dependant on the asciidoc syntax file, so will need to be - " updated accordingly - if value =~ '\vasciidocListingBlock' - return 1 - endif - endfor -endfunction - - -function! s:FoldText() - let level = HeadingDepth(v:foldstart) - let indent = repeat('=', level) - let title = substitute(getline(v:foldstart), '^=\+\s*', '', '') - let foldsize = (v:foldend - v:foldstart) - let linecount = '['.foldsize.' line'.(foldsize>1?'s':'').']' - return indent.' '.title.' '.linecount -endfunction - -" API {{{1 -function! ToggleMarkdownFoldexpr() - if &l:foldexpr ==# 'StackedMarkdownFolds()' - setlocal foldexpr=NestedMarkdownFolds() - else - setlocal foldexpr=StackedMarkdownFolds() - endif -endfunction -command! -buffer FoldToggle call ToggleMarkdownFoldexpr() - -" Setup {{{1 -if !exists('g:markdown_fold_style') - let g:markdown_fold_style = 'stacked' -endif - -if !exists('g:markdown_fold_override_foldtext') - let g:markdown_fold_override_foldtext = 1 -endif - -setlocal foldmethod=expr - -if g:markdown_fold_override_foldtext - let &l:foldtext = s:SID() . 'FoldText()' -endif - -let &l:foldexpr = - \ g:markdown_fold_style ==# 'nested' - \ ? 'NestedMarkdownFolds()' - \ : 'StackedMarkdownFolds()' - -" Teardown {{{1 -" To avoid errors when undo_ftplugin not defined yet -if !exists('b:undo_ftplugin') - let b:undo_ftplugin = '' -endif - -let b:undo_ftplugin .= ' - \ | setlocal foldmethod< foldtext< foldexpr< - \ | delcommand FoldToggle - \ ' -