Issue 4: List folding doesn't work

Using new list functions to determine list fold level.
As a regression there is no folds for multilined list item's text.

1. item 1
2. item 2
   multilined
	 that is not
	 folded now
3. item 3

Previous method was able to fold item 2. I am not sure if we should fix
it or not.
This commit is contained in:
Maxim Kim
2013-07-24 11:09:41 +04:00
parent b26591437b
commit e30aa56722
2 changed files with 28 additions and 59 deletions

View File

@ -115,7 +115,8 @@ function! s:get_li_level(lnum) "{{{
if VimwikiGet('syntax') == 'media'
let level = vimwiki#u#count_first_sym(getline(a:lnum))
else
let level = (indent(a:lnum) / &sw)
" let level = (indent(a:lnum) / &sw)
let level = indent(a:lnum)
endif
return level
endfunction "}}}
@ -133,53 +134,7 @@ function! s:get_start_list(rx_item, lnum) "{{{
endfunction "}}}
function! VimwikiFoldListLevel(lnum) "{{{
let line = getline(a:lnum)
"" XXX Disabled: Header/section folding...
"if line =~ g:vimwiki_rxHeader
" return '>'.vimwiki#u#count_first_sym(line)
"endif
"let nnline = getline(a:lnum+1)
"" Unnecessary?
"if nnline =~ g:vimwiki_rxHeader
" return '<'.vimwiki#u#count_first_sym(nnline)
"endif
"" Very slow when called on every single line!
"let base_level = s:get_base_level(a:lnum)
"FIXME does not work correctly
let base_level = 0
if line =~ g:vimwiki_rxListItem
let [nnum, nline] = s:find_forward(g:vimwiki_rxListItem, a:lnum)
let level = s:get_li_level(a:lnum)
let leveln = s:get_li_level(nnum)
let adj = s:get_li_level(s:get_start_list(g:vimwiki_rxListItem, a:lnum))
if leveln > level
return ">".(base_level+leveln-adj)
" check if multilined list item
elseif (nnum-a:lnum) > 1
\ && (nline =~ g:vimwiki_rxListItem || nnline !~ '^\s*$')
return ">".(base_level+level+1-adj)
else
return (base_level+level-adj)
endif
else
" process multilined list items
let [pnum, pline] = s:find_backward(g:vimwiki_rxListItem, a:lnum)
if pline =~ g:vimwiki_rxListItem
if indent(a:lnum) >= indent(pnum) && line !~ '^\s*$'
let level = s:get_li_level(pnum)
let adj = s:get_li_level(s:get_start_list(g:vimwiki_rxListItem, pnum))
return (base_level+level+1-adj)
endif
endif
endif
return base_level
return vimwiki#lst#fold_level(a:lnum)
endfunction "}}}
" Folding list items }}}