diff --git a/autoload/vimwiki/lst.vim b/autoload/vimwiki/lst.vim index 4e38517..8a01c41 100644 --- a/autoload/vimwiki/lst.vim +++ b/autoload/vimwiki/lst.vim @@ -992,6 +992,14 @@ function! s:adjust_mrkr(item) "{{{ let new_mrkr = neighbor_item.mrkr endif + "if possible, set e.g. *** if parent has ** as marker + if neighbor_item.type == 0 && a:item.type == 1 && has_key(g:vimwiki_bullet_points, s:first_char(a:item.mrkr)) && g:vimwiki_bullet_points[s:first_char(a:item.mrkr)] == 1 + let parent_item = s:get_parent(a:item) + if parent_item.type == 1 && s:first_char(parent_item.mrkr) == s:first_char(a:item.mrkr) + let new_mrkr = repeat(s:first_char(parent_item.mrkr), s:string_length(parent_item.mrkr)+1) + endif + endif + call s:substitute_string_in_line(a:item.lnum, a:item.mrkr, new_mrkr) call s:adjust_numbered_list(a:item, 0, 1) endfunction "}}} diff --git a/ftplugin/vimwiki.vim b/ftplugin/vimwiki.vim index 37ab7c3..71d8822 100644 --- a/ftplugin/vimwiki.vim +++ b/ftplugin/vimwiki.vim @@ -44,47 +44,11 @@ setlocal formatoptions-=2 setlocal formatoptions+=n -if VimwikiGet('syntax') == 'default' - "1 means multiple bullets, like * ** *** - let g:vimwiki_bullet_points = { '-':0, '*':1, '#':1 , '◆':1} - let g:vimwiki_bullet_numbers = ['1iIaA', '.)]'] - "this should contain at least one element - "it is used for i_ among other things - let g:vimwiki_list_markers = ['-', '#', '◆', '1.', 'i)', 'a)'] -elseif VimwikiGet('syntax') == 'markdown' - let g:vimwiki_bullet_points = { '-':0, '*':0, '+':0 } - let g:vimwiki_bullet_numbers = ['1', '.'] - let g:vimwiki_list_markers = ['-', '*', '+', '1.'] -else "media - "better leave this as it is, because media syntax is special - let g:vimwiki_bullet_points = { '*':1, '#':1 } - let g:vimwiki_bullet_numbers = ['', ''] - let g:vimwiki_list_markers = ['*', '#'] -endif - -let g:vimwiki_rxListBullet = join( map(keys(g:vimwiki_bullet_points), 'vimwiki#u#escape(v:val) . repeat("\\+", g:vimwiki_bullet_points[v:val])') , '\|') - -"create regex for numbered list -if g:vimwiki_bullet_numbers[0] == '' - "regex that matches nothing - let g:vimwiki_rxListNumber = '$^' -else - let s:char_to_rx = {'1': '\d\+', 'i': '[ivxlcdm]\+', 'I': '[IVXLCDM]\+', 'a': '\l\{1,3}', 'A': '\u\{1,3}'} - let g:vimwiki_rxListNumber = '\C\%(' . join( map(split(g:vimwiki_bullet_numbers[0], '.\zs'), "s:char_to_rx[v:val]"), '\|').'\)' - let g:vimwiki_rxListNumber .= '['.vimwiki#u#escape(g:vimwiki_bullet_numbers[1]).']' -endif - -if VimwikiGet('syntax') == 'default' || VimwikiGet('syntax') == 'markdown' - let g:vimwiki_rxListItemAndChildren = '^\(\s*\)\%('.g:vimwiki_rxListBullet.'\|'.g:vimwiki_rxListNumber.'\)\s\+\['.g:vimwiki_listsyms[4].'\]\s.*\%(\n\%(\1\s.*\|^$\)\)*' -else - let g:vimwiki_rxListItemAndChildren = '^\('.g:vimwiki_rxListBullet.'\)\s\+\['.g:vimwiki_listsyms[4].'\]\s.*\%(\n\%(\1\%('.g:vimwiki_rxListBullet.'\).*\|^$\|^\s.*\)\)*' -endif "Create 'formatlistpat' let &formatlistpat = vimwiki#lst#get_list_item_rx(1) - if !empty(&langmap) " Valid only if langmap is a comma separated pairs of chars let l_o = matchstr(&langmap, '\C,\zs.\zeo,') diff --git a/syntax/vimwiki.vim b/syntax/vimwiki.vim index a982298..d7a5f4b 100644 --- a/syntax/vimwiki.vim +++ b/syntax/vimwiki.vim @@ -49,7 +49,6 @@ execute 'runtime! syntax/vimwiki_'.VimwikiGet('syntax').'.vim' " ------------------------------------------------------------------------- let time0 = vimwiki#u#time(starttime) "XXX - " LINKS: setup of larger regexes {{{ " LINKS: setup wikilink regexps {{{ @@ -275,7 +274,6 @@ call s:add_target_syntax_ON(target, 'VimwikiLink') " }}} - " generic headers "{{{ if g:vimwiki_symH "" symmetric @@ -379,6 +377,28 @@ let g:vimwiki_rxTodo = '\C\%(TODO:\|DONE:\|STARTED:\|FIXME:\|FIXED:\|XXX:\)' execute 'syntax match VimwikiTodo /'. g:vimwiki_rxTodo .'/' " }}} +" Lists "{{{ +let g:vimwiki_rxListBullet = join( map(keys(g:vimwiki_bullet_points), 'vimwiki#u#escape(v:val) . repeat("\\+", g:vimwiki_bullet_points[v:val])') , '\|') + +"create regex for numbered list +if g:vimwiki_bullet_numbers[0] == '' + "regex that matches nothing + let g:vimwiki_rxListNumber = '$^' +else + let s:char_to_rx = {'1': '\d\+', 'i': '[ivxlcdm]\+', 'I': '[IVXLCDM]\+', 'a': '\l\{1,3}', 'A': '\u\{1,3}'} + let g:vimwiki_rxListNumber = '\C\%(' . join( map(split(g:vimwiki_bullet_numbers[0], '.\zs'), "s:char_to_rx[v:val]"), '\|').'\)' + let g:vimwiki_rxListNumber .= '['.vimwiki#u#escape(g:vimwiki_bullet_numbers[1]).']' +endif + +" XXX: Should this be in corresponding syntax file? +if VimwikiGet('syntax') == 'default' || VimwikiGet('syntax') == 'markdown' + let g:vimwiki_rxListItemAndChildren = '^\(\s*\)\%('.g:vimwiki_rxListBullet.'\|'.g:vimwiki_rxListNumber.'\)\s\+\['.g:vimwiki_listsyms[4].'\]\s.*\%(\n\%(\1\s.*\|^$\)\)*' +else + let g:vimwiki_rxListItemAndChildren = '^\('.g:vimwiki_rxListBullet.'\)\s\+\['.g:vimwiki_listsyms[4].'\]\s.*\%(\n\%(\1\%('.g:vimwiki_rxListBullet.'\).*\|^$\|^\s.*\)\)*' +endif + +"}}} + " main syntax groups {{{ " Tables @@ -494,8 +514,6 @@ else endif "}}} - - " syntax group highlighting "{{{ hi def link VimwikiMarkers Normal diff --git a/syntax/vimwiki_default.vim b/syntax/vimwiki_default.vim index e9fc188..037e519 100644 --- a/syntax/vimwiki_default.vim +++ b/syntax/vimwiki_default.vim @@ -72,6 +72,13 @@ let g:vimwiki_rxHR = '^-----*$' " Tables. Each line starts and ends with '|'; each cell is separated by '|' let g:vimwiki_rxTableSep = '|' +" Lists +"1 means multiple bullets, like * ** *** +let g:vimwiki_bullet_points = { '-':0, '*':0, '#':0 , '◆':0} +let g:vimwiki_bullet_numbers = ['1iIaA', '.)]'] +"this should contain at least one element +"it is used for i_ among other things +let g:vimwiki_list_markers = ['-', '#', '◆', '1.', 'i)', 'a)'] let g:vimwiki_rxListDefine = '::\(\s\|$\)' " Preformatted text diff --git a/syntax/vimwiki_markdown.vim b/syntax/vimwiki_markdown.vim index 33fd989..fd4722c 100644 --- a/syntax/vimwiki_markdown.vim +++ b/syntax/vimwiki_markdown.vim @@ -72,6 +72,10 @@ let g:vimwiki_rxHR = '^-----*$' " Tables. Each line starts and ends with '|'; each cell is separated by '|' let g:vimwiki_rxTableSep = '|' +" Lists +let g:vimwiki_bullet_points = { '-':0, '*':0, '+':0 } +let g:vimwiki_bullet_numbers = ['1', '.'] +let g:vimwiki_list_markers = ['-', '*', '+', '1.'] let g:vimwiki_rxListDefine = '::\%(\s\|$\)' " Preformatted text diff --git a/syntax/vimwiki_media.vim b/syntax/vimwiki_media.vim index 9d84a1f..a392f47 100644 --- a/syntax/vimwiki_media.vim +++ b/syntax/vimwiki_media.vim @@ -53,6 +53,10 @@ let g:vimwiki_rxHR = '^-----*$' " Tables. Each line starts and ends with '|'; each cell is separated by '|' let g:vimwiki_rxTableSep = '|' +" Lists +let g:vimwiki_bullet_points = { '*':1, '#':1 } +let g:vimwiki_bullet_numbers = ['', ''] +let g:vimwiki_list_markers = ['*', '#'] let g:vimwiki_rxListDefine = '^\%(;\|:\)\s' " Preformatted text