From 34f6a152c73a4be9edbb8932d3b368d2eb2de6c4 Mon Sep 17 00:00:00 2001 From: Maxim Kim Date: Thu, 22 Oct 2009 00:00:00 +0000 Subject: [PATCH] Version 0.9.6 * NEW: You can have multiline list items. See |vimwiki-syntax-lists|. * NEW: You can ignore newlines in multiline list items when do export to html. See |g:vimwiki_list_ignore_newline| option. * NEW: Different checkbox symbols [.], [:], [o] are added. See |vimwiki-todo-lists|. * NEW: Now there is no longer syntax of preformatted text that is started by a whitespace. * NEW: Blockquotes. See |vimwiki-syntax-blockquote|. * NEW: Per wiki folding option (vimwiki-option-folding) is removed. Global |g:vimwiki_folding| and |g:vimwiki_fold_lists| are added. * NEW: Due to being quite slow folding of list items is off by default. Use |g:vimwiki_fold_lists| to turn it on. * NEW: If you want replace some symbols in a wikifilename use |g:vimwiki_badsyms| option (Andreas Baldeau). * FIX: Command |:VimwikiToggleListItem| doesn't work for one of the two wikies opened at the same time with different syntaxes. * FIX: Command |:VimwikiToggleListItem| do not switch parent checkboxes if there are non-checkbox list items available. * FIX: Issue 24: Link error in html when write [[one.two.three]]. * FIX: Rename WikiWord to something with a colon (:) does nasty things. * FIX: Command |:VimwikiToggleListItem| do not switch right if there are list items without checkboxes in the list. --- vimwiki_0_9_5.vba => vimwiki_0_9_6.vba | 1230 +++++++++++++++--------- 1 file changed, 749 insertions(+), 481 deletions(-) rename vimwiki_0_9_5.vba => vimwiki_0_9_6.vba (77%) diff --git a/vimwiki_0_9_5.vba b/vimwiki_0_9_6.vba similarity index 77% rename from vimwiki_0_9_5.vba rename to vimwiki_0_9_6.vba index 3000c33..85452fc 100644 --- a/vimwiki_0_9_5.vba +++ b/vimwiki_0_9_6.vba @@ -2,7 +2,7 @@ UseVimball finish syntax\vimwiki.vim [[[1 -139 +127 " Vimwiki syntax file " Author: Maxim Kim " Home: http://code.google.com/p/vimwiki/ @@ -71,18 +71,6 @@ execute 'syntax match wikiList /'.g:vimwiki_rxListBullet.'/' execute 'syntax match wikiList /'.g:vimwiki_rxListNumber.'/' execute 'syntax match wikiList /'.g:vimwiki_rxListDefine.'/' -" XXX: Think of removing this highlighting. -"============================================================================== -" -" Treat all other lines that start with spaces as PRE-formatted text. -execute 'syntax match wikiPre /'.g:vimwiki_rxPre1.'/ contains=wikiComment' -" syntax region wikiPre start=/\%(^\s\+[*#].*$\)\@ @@ -217,14 +205,11 @@ let g:vimwiki_rxListNumber = '^\s\+#' let g:vimwiki_rxListDefine = '::\(\s\|$\)' -" Treat all other lines that start with spaces as PRE-formatted text. -let g:vimwiki_rxPre1 = '^\s\+[^[:blank:]*#].*$' - " Preformatted text let g:vimwiki_rxPreStart = '{{{' let g:vimwiki_rxPreEnd = '}}}' syntax\vimwiki_media.vim [[[1 -61 +58 " Vimwiki syntax file " MediaWiki syntax " Author: Maxim Kim @@ -280,14 +265,11 @@ let g:vimwiki_rxListNumber = '^\s*#\+' let g:vimwiki_rxListDefine = '^\%(;\|:\)\s' -" Treat all other lines that start with spaces as PRE-formatted text. -let g:vimwiki_rxPre1 = '^\s\+[^[:blank:]*#].*$' - " Preformatted text let g:vimwiki_rxPreStart = '
'
 let g:vimwiki_rxPreEnd = '<\/pre>'
 ftplugin\vimwiki.vim	[[[1
-222
+277
 " Vimwiki filetype plugin file
 " Author: Maxim Kim 
 " Home: http://code.google.com/p/vimwiki/
@@ -325,22 +307,23 @@ if VimwikiGet('syntax') == 'default'
   setl comments=b:\ *\ [\ ],b:\ *[\ ],b:\ *\ [],b:\ *[],b:\ *\ [x],b:\ *[x]
   setl comments+=b:\ #\ [\ ],b:\ #[\ ],b:\ #\ [],b:\ #[],b:\ #\ [x],b:\ #[x]
   setl comments+=b:\ *,b:\ #
+  setl formatlistpat=^\\s\\+[*#]\\s*
 else
   setl comments=n:*\ [\ ],n:*[\ ],n:*\ [],n:*[],n:*\ [x],n:*[x]
   setl comments+=n:#\ [\ ],n:#[\ ],n:#\ [],n:#[],n:#\ [x],n:#[x]
   setl comments+=n:*,n:#
 endif
-setlocal formatoptions=ctnqro
+setlocal formatoptions=tnro
 " COMMENTS }}}
 
 " FOLDING for headers and list items using expr fold method. {{{
-if VimwikiGet('folding')
+if g:vimwiki_folding == 1
   setlocal fdm=expr
 endif
 setlocal foldexpr=VimwikiFoldLevel(v:lnum)
+
 function! VimwikiFoldLevel(lnum) "{{{
   let line = getline(a:lnum)
-  let nline = getline(a:lnum + 1)
 
   " Header folding...
   if line =~ g:vimwiki_rxHeader
@@ -357,49 +340,102 @@ function! VimwikiFoldLevel(lnum) "{{{
   endif
 
   " List item folding...
-  let nnum = a:lnum + 1
+  if g:vimwiki_fold_lists
+    let rx_list_item = '\('.
+          \ g:vimwiki_rxListBullet.'\|'.g:vimwiki_rxListNumber.
+          \ '\)'
+
+    if line =~ rx_list_item
+      let [nnum, nline] = s:find_next_item(rx_list_item, a:lnum)
+      if nline =~ rx_list_item
+        let level = s:get_li_level(a:lnum, nnum)
+        if !(level < 0 && (nnum - a:lnum) > 1)
+          return s:fold_marker(level)
+        endif
+      elseif nnum - a:lnum == 1
+        " last single-lined list item in a list
+        let level = s:get_li_level_last(a:lnum)
+        return s:fold_marker(level)
+      endif
+    else
+      let [pnum, pline] = s:find_prev_item(rx_list_item, a:lnum)
+      if pline =~ rx_list_item
+        if getline(a:lnum + 1) =~ rx_list_item
+          let level = s:get_li_level(pnum, a:lnum + 1)
+          if level < 0
+            return s:fold_marker(level)
+          endif
+        endif
+
+        let [nnum, nline] = s:find_next_item(rx_list_item, pnum)
+        if nline !~ rx_list_item && nnum-a:lnum == 1
+          " last multi-lined list item in a list
+          let level = s:get_li_level_last(pnum)
+          return s:fold_marker(level)
+        endif
+
+      endif
+    endif
 
-  let rx_list_item = '\('.
-        \ g:vimwiki_rxListBullet.'\|'.g:vimwiki_rxListNumber.
-        \ '\)'
-  if line =~ rx_list_item && nline =~ rx_list_item
-    return s:get_li_level(a:lnum, nnum)
-  " list is over, remove foldlevel
-  elseif line =~ rx_list_item && nline !~ rx_list_item
-    return s:get_li_level_last(a:lnum)
   endif
 
   return '='
 endfunction "}}}
 
+function! s:fold_marker(level) "{{{
+  if a:level > 0
+    return "a".a:level
+  elseif a:level < 0
+    return "s".abs(a:level)
+  else
+    return "="
+  endif
+endfunction "}}}
+
+function! s:find_next_item(rx_item, lnum) "{{{
+  let lnum = a:lnum + 1
+
+  while lnum <= line('$')
+    if getline(lnum) =~ a:rx_item
+          \ || getline(lnum) =~ '^\S'
+          \ || indent(lnum) <= indent(a:lnum)
+      break
+    endif
+    let lnum += 1
+  endwhile
+
+  return [lnum, getline(lnum)]
+endfunction "}}}
+
+function! s:find_prev_item(rx_item, lnum) "{{{
+  let lnum = a:lnum - 1
+
+  while lnum > 1
+    if getline(lnum) =~ a:rx_item
+          \ || getline(lnum) =~ '^\S'
+      break
+    endif
+    let lnum -= 1
+  endwhile
+
+  return [lnum, getline(lnum)]
+endfunction "}}}
+
 function! s:get_li_level(lnum, nnum) "{{{
   if VimwikiGet('syntax') == 'media'
-    let level = s:count_first_sym(getline(a:nnum)) -
-          \ s:count_first_sym(getline(a:lnum))
-    if level > 0
-      return "a".level
-    elseif level < 0
-      return "s".abs(level)
-    else
-      return "="
-    endif
+    let level = vimwiki#count_first_sym(getline(a:nnum)) -
+          \ vimwiki#count_first_sym(getline(a:lnum))
   else
     let level = ((indent(a:nnum) - indent(a:lnum)) / &sw)
-    if level > 0
-      return "a".level
-    elseif level < 0
-      return "s".abs(level)
-    else
-      return "="
-    endif
   endif
+  return level
 endfunction "}}}
 
 function! s:get_li_level_last(lnum) "{{{
   if VimwikiGet('syntax') == 'media'
-    return "s".(s:count_first_sym(getline(a:lnum)) - 1)
+    return -(vimwiki#count_first_sym(getline(a:lnum)) - 1)
   else
-    return "s".(indent(a:lnum) / &sw - 1)
+    return -(indent(a:lnum) / &sw - 1)
   endif
 endfunction "}}}
 
@@ -497,6 +533,7 @@ endif
 noremap