vimwiki

Personal wiki for vim
git clone https://github.com/vimwiki/vimwiki.git
Log | Files | Refs | README | LICENSE

commit 391cbd827df95c2e50d2da78b26a6e95836f8dc6
parent 3eaaf12b2dd456ba66b254a6a80b478c9f2e454f
Author: EinfachToll <istjanichtzufassen@googlemail.de>
Date:   Wed, 16 Oct 2013 12:18:50 +0200

Refactor ugly functions

to more ugly ones ;)

Diffstat:
Mautoload/vimwiki/lst.vim | 70++++++++++++++++++++++++++++++++++++++++++++++------------------------
1 file changed, 46 insertions(+), 24 deletions(-)

diff --git a/autoload/vimwiki/lst.vim b/autoload/vimwiki/lst.vim @@ -162,38 +162,68 @@ endfunction "}}} "Returns: the list item after a:item in its list or empty item "If a:all is 1, the markers can differ function! s:get_next_list_item(item, all) "{{{ - return s:get_next_or_prev_list_item(a:item, +1, line('$')+1, a:all) + let org_lvl = s:get_level(a:item.lnum) + if !a:all + let org_regex = s:regexp_of_marker(a:item) + endif + + let cur_ln = s:get_next_line(a:item.lnum) + while cur_ln <= line('$') + let cur_lvl = s:get_level(cur_ln) + if cur_lvl <= org_lvl + if a:all + return s:get_any_item_of_level(cur_ln, cur_lvl, org_lvl) + else + return s:get_item_of_level(cur_ln, cur_lvl, org_lvl, org_regex) + endif + endif + let cur_ln = s:get_next_line(cur_ln) + endwhile + return s:empty_item() endfunction "}}} "Returns: the list item before a:item in its list or empty item "If a:all is 1, the markers can differ function! s:get_prev_list_item(item, all) "{{{ - return s:get_next_or_prev_list_item(a:item, -1, 0, a:all) -endfunction "}}} - -function! s:get_next_or_prev_list_item(item, direction, until, all) "{{{ let org_lvl = s:get_level(a:item.lnum) if !a:all let org_regex = s:regexp_of_marker(a:item) endif - let cur_ln = s:get_next_prev_line(a:item.lnum, a:direction) - while cur_ln != a:until + + let cur_ln = s:get_prev_line(a:item.lnum) + while cur_ln >= 1 let cur_lvl = s:get_level(cur_ln) - let cur_linecontent = getline(cur_ln) + if cur_lvl <= org_lvl + if a:all + return s:get_any_item_of_level(cur_ln, cur_lvl, org_lvl) + else + return s:get_item_of_level(cur_ln, cur_lvl, org_lvl, org_regex) + endif + endif + let cur_ln = s:get_prev_line(cur_ln) + endwhile + return s:empty_item() +endfunction "}}} - if cur_lvl == org_lvl - if a:all || cur_linecontent =~# '^\s*'.org_regex.'\s' - return s:get_item(cur_ln) +function! s:get_item_of_level(cur_ln, cur_lvl, org_lvl, org_regex) "{{{ + let cur_linecontent = getline(a:cur_ln) + if a:cur_lvl == a:org_lvl + if cur_linecontent =~# '^\s*'.a:org_regex.'\s' + return s:get_item(a:cur_ln) else return s:empty_item() endif - elseif cur_lvl < org_lvl + elseif a:cur_lvl < a:org_lvl + return s:empty_item() + endif +endfunction "}}} + +function! s:get_any_item_of_level(cur_ln, cur_lvl, org_lvl) "{{{ + if a:cur_lvl == a:org_lvl + return s:get_item(a:cur_ln) + elseif a:cur_lvl < a:org_lvl return s:empty_item() - else - let cur_ln = s:get_next_prev_line(cur_ln, a:direction) endif - endwhile - return s:empty_item() endfunction "}}} function! s:first_char(string) "{{{ @@ -337,14 +367,6 @@ function! s:get_prev_line(lnum) "{{{ return prev_line endfunction "}}} -function! s:get_next_prev_line(lnum, dir) "{{{ - if a:dir == 1 - return s:get_next_line(a:lnum) - else - return s:get_prev_line(a:lnum) - endif -endfunction "}}} - function! s:get_first_child(item) "{{{ if a:item.lnum >= line('$') return s:empty_item()