From e6735215ed6d770d2495c47b74dc663ba5038669 Mon Sep 17 00:00:00 2001 From: EinfachToll Date: Mon, 3 Feb 2014 11:41:55 +0100 Subject: [PATCH] Reactivate and fix html.vim to make it work with lists --- autoload/vimwiki/html.vim | 61 +++++++++++++++------------------------ doc/vimwiki.txt | 6 ++-- ftplugin/vimwiki.vim | 6 ++-- 3 files changed, 30 insertions(+), 43 deletions(-) diff --git a/autoload/vimwiki/html.vim b/autoload/vimwiki/html.vim index 8e863f0..31644d1 100644 --- a/autoload/vimwiki/html.vim +++ b/autoload/vimwiki/html.vim @@ -22,15 +22,6 @@ let g:loaded_vimwiki_html_auto = 1 "}}} " UTILITY "{{{ -function s:get_completion_index(sym) "{{{ - for idx in range(1, 5) - if match(g:vimwiki_listsyms, '\C\%'.idx.'v'.a:sym) != -1 - return (idx-1) - endif - endfor - return 0 -endfunction "}}} - function! s:root_path(subdir) "{{{ return repeat('../', len(split(a:subdir, '[/\\]'))) endfunction "}}} @@ -843,34 +834,26 @@ endfunction "}}} function! s:process_tag_list(line, lists) "{{{ - function! s:add_checkbox(line, rx_list, st_tag, en_tag) "{{{ - let st_tag = a:st_tag - let en_tag = a:en_tag - + function! s:add_checkbox(line, rx_list) "{{{ + let st_tag = '
  • ' let chk = matchlist(a:line, a:rx_list) - if len(chk) > 0 - if len(chk[1])>0 - "wildcard characters are difficult to match correctly - if chk[1] =~ '[.*\\^$~]' - let chk[1] ='\'.chk[1] - endif - " let completion = match(g:vimwiki_listsyms, '\C' . chk[1]) - let completion = s:get_completion_index(chk[1]) - if completion >= 0 && completion <=4 - let st_tag = '
  • ' - endif + if !empty(chk) && len(chk[1]) > 0 + let completion = index(g:vimwiki_listsyms_list, chk[1]) + if completion >= 0 && completion <=4 + let st_tag = '
  • ' endif endif - return [st_tag, en_tag] + return [st_tag, ''] endfunction "}}} let in_list = (len(a:lists) > 0) " If it is not list yet then do not process line that starts from *bold* " text. + " XXX necessary? in *bold* text, no space must follow the first * if !in_list - let pos = match(a:line, g:vimwiki_rxBold) - if pos != -1 && strpart(a:line, 0, pos) =~ '^\s*$' + let pos = match(a:line, '^\s*'.g:vimwiki_rxBold) + if pos != -1 return [0, []] endif endif @@ -878,16 +861,16 @@ function! s:process_tag_list(line, lists) "{{{ let lines = [] let processed = 0 - if a:line =~ g:vimwiki_rxListBullet - let lstSym = matchstr(a:line, '[*-]') + if a:line =~ '^\s*'.s:bullets.'\s' + let lstSym = matchstr(a:line, s:bullets) let lstTagOpen = '' - let lstRegExp = g:vimwiki_rxListBullet - elseif a:line =~ g:vimwiki_rxListNumber - let lstSym = '#' + let lstRegExp = '^\s*'.s:bullets.'\s' + elseif a:line =~ '^\s*'.s:numbers.'\s' + let lstSym = matchstr(a:line, s:numbers) let lstTagOpen = '
      ' let lstTagClose = '
    ' - let lstRegExp = g:vimwiki_rxListNumber + let lstRegExp = '^\s*'.s:numbers.'\s' else let lstSym = '' let lstTagOpen = '' @@ -901,9 +884,8 @@ function! s:process_tag_list(line, lists) "{{{ let line = substitute(a:line, '\t', repeat(' ', &tabstop), 'g') let indent = stridx(line, lstSym) - let checkbox = '\s*\[\(.\?\)\]\s*' - let [st_tag, en_tag] = s:add_checkbox(line, - \ lstRegExp.checkbox, '
  • ', '') + let checkbox = '\s*\[\(.\)\]\s*' + let [st_tag, en_tag] = s:add_checkbox(line, lstRegExp.checkbox) if !in_list call add(a:lists, [lstTagClose, indent]) @@ -929,7 +911,7 @@ function! s:process_tag_list(line, lists) "{{{ call add(lines, \ substitute(a:line, lstRegExp.'\%('.checkbox.'\)\?', '', '')) let processed = 1 - elseif in_list > 0 && a:line =~ '^\s\+\S\+' + elseif in_list && a:line =~ '^\s\+\S\+' if g:vimwiki_list_ignore_newline call add(lines, a:line) else @@ -1420,6 +1402,11 @@ function! vimwiki#html#Wiki2HTML(path_html, wikifile) "{{{ let s:gt_pattern = '\c\%(' endif + " prepare regexps for lists + let s:bullets = '[*•-]' + let s:numbers = + \'\C\%(#\|\d\+)\|\d\+\.\|[ivxlcdm]\+)\|[IVXLCDM]\+)\|\l\{1,2})\|\u\{1,2})\)' + for line in lsource let oldquote = state.quote let [lines, state] = s:parse_line(line, state) diff --git a/doc/vimwiki.txt b/doc/vimwiki.txt index 8f7c78d..76d4572 100644 --- a/doc/vimwiki.txt +++ b/doc/vimwiki.txt @@ -847,9 +847,6 @@ or: > or: > * Bulleted list item 1 * Bulleted list item 2 -or: > - # Bulleted list item 1 - # Bulleted list item 2 Ordered lists: > @@ -876,6 +873,9 @@ or: > I) Numbered list item 1 II) Numbered list item 2 III) Numbered list item 3 +or: > + # Bulleted list item 1 ← will be converted to numbers in HTML + # Bulleted list item 2 Note that a space after the list item symbols (-, *, 1. etc.) is essential. diff --git a/ftplugin/vimwiki.vim b/ftplugin/vimwiki.vim index cdc68aa..be7b1b2 100644 --- a/ftplugin/vimwiki.vim +++ b/ftplugin/vimwiki.vim @@ -144,7 +144,7 @@ endfunction "}}} " COMMANDS {{{ command! -buffer Vimwiki2HTML \ silent w - \ let res = vimwiki#vw2html#Wiki2HTML(expand(VimwikiGet('path_html')), + \ let res = vimwiki#html#Wiki2HTML(expand(VimwikiGet('path_html')), \ expand('%')) \ \ if res != '' | echo 'Vimwiki: HTML conversion is done.' | endif @@ -154,7 +154,7 @@ command! -buffer Vimwiki2HTMLBrowse \ expand(VimwikiGet('path_html')), \ expand('%'))) command! -buffer VimwikiAll2HTML - \ call vimwiki#vw2html#WikiAll2HTML(expand(VimwikiGet('path_html'))) + \ call vimwiki#html#WikiAll2HTML(expand(VimwikiGet('path_html'))) command! -buffer VimwikiNextLink call vimwiki#base#find_next_link() command! -buffer VimwikiPrevLink call vimwiki#base#find_prev_link() @@ -530,7 +530,7 @@ if VimwikiGet('auto_export') " Automatically generate HTML on page write. augroup vimwiki au BufWritePost - \ call vimwiki#vw2html#Wiki2HTML(expand(VimwikiGet('path_html')), + \ call vimwiki#html#Wiki2HTML(expand(VimwikiGet('path_html')), \ expand('%')) augroup END endif