Version 2.0.stu
This release is partly incompatible with 1.2. You should delete previous version of vimwiki before install. = Summary = * Quick page-link creation. * Redesign of link syntaxes (!) * No more CamelCase links. Check the ways to convert them http://goo.gl/15ctX * No more [[link][desc]] links. * No more [http://link description] links. * No more plain image links. Use transclusions. * No more image links identified by extension. Use transclusions. * Interwiki links. * Link schemes. * Transclusions. * Normalize link command. * Improved diary organization and generation. * List manipulation. * Markdown support. * Mathjax support. * Improved handling of special characters and punctuation in filenames and urls. * Back links command: list links referring to the current page. * Highlighting nonexisted links are off by default. * Table syntax change. Row separator uses | instead of +. * Fold multilined list items. * Custom wiki to HTML converters. * Conceal long weblinks. * Option to disable table mappings. For detailed information see issues list on http://code.google.com/p/vimwiki/issues/list
This commit is contained in:
parent
84297c9051
commit
d5a6d097da
39
README
39
README
@ -5,8 +5,6 @@ A Personal Wiki For Vim Plugin
|
|||||||
Screenshots are available on http://code.google.com/p/vimwiki/
|
Screenshots are available on http://code.google.com/p/vimwiki/
|
||||||
There are also zipped vimwiki files there in case you do not like vimball archives.
|
There are also zipped vimwiki files there in case you do not like vimball archives.
|
||||||
|
|
||||||
Vimwiki quick reference card http://vimwiki.googlecode.com/hg/misc/Vimwiki1.1.1QR.pdf.
|
|
||||||
|
|
||||||
|
|
||||||
Prerequisites
|
Prerequisites
|
||||||
==============================================================================
|
==============================================================================
|
||||||
@ -24,31 +22,35 @@ Intro
|
|||||||
Vimwiki is a personal wiki for Vim -- a number of linked text files that have
|
Vimwiki is a personal wiki for Vim -- a number of linked text files that have
|
||||||
their own syntax highlighting.
|
their own syntax highlighting.
|
||||||
|
|
||||||
With vimwiki you can
|
With vimwiki you can:
|
||||||
- organize notes and ideas
|
- organize notes and ideas;
|
||||||
- manage todo-lists
|
- manage todo-lists;
|
||||||
- write documentation
|
- write documentation.
|
||||||
|
|
||||||
To do a quick start press <Leader>ww (this is usually \ww) to go to your index
|
To do a quick start press <Leader>ww (this is usually \ww) to go to your index
|
||||||
wiki file. By default it is located in:
|
wiki file. By default it is located in:
|
||||||
~/vimwiki/index.wiki
|
~/vimwiki/index.wiki
|
||||||
|
|
||||||
Feed it with the following example:
|
Feed it with the following example:
|
||||||
|
|
||||||
= My knowledge base =
|
= My knowledge base =
|
||||||
* MyUrgentTasks -- things to be done _yesterday_!!!
|
* Tasks -- things to be done _yesterday_!!!
|
||||||
* ProjectGutenberg -- good books are power.
|
* Project Gutenberg -- good books are power.
|
||||||
* ScratchPad -- various temporary stuff.
|
* Scratchpad -- various temporary stuff.
|
||||||
|
|
||||||
|
Place your cursor on 'Tasks' and press Enter to create a link. Once pressed,
|
||||||
|
'Tasks' will become '[[Tasks]]' -- a vimwiki link. Press Enter again to
|
||||||
|
open it. Edit the file, save it, and then press Backspace to jump back to your
|
||||||
|
index.
|
||||||
|
|
||||||
Notice that !ProjectGutenberg, !MyUrgentTasks and !ScratchPad curly underlined.
|
A vimwiki link can be constructed from more than one word. Just visually
|
||||||
These are links in CamelCase form that do not exists yet. (CamelCase
|
select the words to be linked and press Enter. Try it with 'Project
|
||||||
form -- capitalized word connected with other capitalized words)
|
Gutenberg'. The result should look something like:
|
||||||
|
|
||||||
Place cursor on ProjectGutenberg and press <Enter>. Now you are in
|
= My knowledge base =
|
||||||
ProjectGutenberg. Edit and save it, then press Backspace to return to parent
|
* [[Tasks]] -- things to be done _yesterday_!!!
|
||||||
wiki page. You should see the difference now -- ProjectGutenberg is
|
* [[Project Gutenberg]] -- good books are power.
|
||||||
highlighted as a link.
|
* Scratchpad -- various temporary stuff.
|
||||||
|
|
||||||
|
|
||||||
For the various options see :h vimwiki-options.
|
For the various options see :h vimwiki-options.
|
||||||
@ -60,9 +62,8 @@ see :h vimwiki-syntax
|
|||||||
|
|
||||||
*bold* -- bold
|
*bold* -- bold
|
||||||
_italic_ -- italic
|
_italic_ -- italic
|
||||||
WikiWord -- link to WikiWord
|
|
||||||
[[wiki link]] -- link with spaces
|
[[wiki link]] -- link with spaces
|
||||||
[[wiki link][description]] -- link with description
|
|
||||||
[[wiki link|description]] -- link with description
|
[[wiki link|description]] -- link with description
|
||||||
|
|
||||||
Lists:
|
Lists:
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -11,6 +11,9 @@ endif
|
|||||||
let g:loaded_vimwiki_diary_auto = 1
|
let g:loaded_vimwiki_diary_auto = 1
|
||||||
"}}}
|
"}}}
|
||||||
|
|
||||||
|
let s:vimwiki_max_scan_for_caption = 5
|
||||||
|
|
||||||
|
" Helpers {{{
|
||||||
function! s:prefix_zero(num) "{{{
|
function! s:prefix_zero(num) "{{{
|
||||||
if a:num < 10
|
if a:num < 10
|
||||||
return '0'.a:num
|
return '0'.a:num
|
||||||
@ -18,10 +21,6 @@ function! s:prefix_zero(num) "{{{
|
|||||||
return a:num
|
return a:num
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:desc(d1, d2) "{{{
|
|
||||||
return a:d1 == a:d2 ? 0 : a:d1 < a:d2 ? 1 : -1
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:get_date_link(fmt) "{{{
|
function! s:get_date_link(fmt) "{{{
|
||||||
return strftime(a:fmt)
|
return strftime(a:fmt)
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
@ -37,76 +36,26 @@ function! s:link_exists(lines, link) "{{{
|
|||||||
return link_exists
|
return link_exists
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:diary_path() "{{{
|
function! s:diary_path(...) "{{{
|
||||||
return VimwikiGet('path').VimwikiGet('diary_rel_path')
|
let idx = a:0 == 0 ? g:vimwiki_current_idx : a:1
|
||||||
|
return VimwikiGet('path', idx).VimwikiGet('diary_rel_path', idx)
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:diary_index() "{{{
|
function! s:diary_index(...) "{{{
|
||||||
return s:diary_path().VimwikiGet('diary_index').VimwikiGet('ext')
|
let idx = a:0 == 0 ? g:vimwiki_current_idx : a:1
|
||||||
|
return s:diary_path(idx).VimwikiGet('diary_index', idx).VimwikiGet('ext', idx)
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:get_diary_range(lines, header) "{{{
|
function! s:diary_date_link(...) "{{{
|
||||||
let rx = '\[\[\d\{4}-\d\d-\d\d\]\]'
|
let idx = a:0 == 0 ? g:vimwiki_current_idx : a:1
|
||||||
let idx = 0
|
return s:get_date_link(VimwikiGet('diary_link_fmt', idx))
|
||||||
let ln_start = -1
|
|
||||||
let ln_end = -1
|
|
||||||
for line in a:lines
|
|
||||||
if ln_start != -1
|
|
||||||
if line =~ '^\s*\(=\)\+.*\1\s*$' || (line !~ rx && line !~ '^\s*$')
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
if line =~ '^\s*\(=\)\+\s*'.a:header.'\s*\1\s*$'
|
|
||||||
let ln_start = idx + 1
|
|
||||||
endif
|
|
||||||
let idx += 1
|
|
||||||
endfor
|
|
||||||
|
|
||||||
let ln_end = idx
|
|
||||||
return [ln_start, ln_end]
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:diary_date_link() "{{{
|
|
||||||
return s:get_date_link(VimwikiGet('diary_link_fmt'))
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:get_file_contents(file_name) "{{{
|
|
||||||
let lines = []
|
|
||||||
let bufnr = bufnr(expand(a:file_name))
|
|
||||||
if bufnr != -1
|
|
||||||
let lines = getbufline(bufnr, 1, '$')
|
|
||||||
else
|
|
||||||
try
|
|
||||||
let lines = readfile(expand(a:file_name))
|
|
||||||
catch
|
|
||||||
endtry
|
|
||||||
endif
|
|
||||||
return [lines, bufnr]
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:get_links() "{{{
|
|
||||||
let rx = '\d\{4}-\d\d-\d\d'
|
|
||||||
let s_links = glob(VimwikiGet('path').VimwikiGet('diary_rel_path').
|
|
||||||
\ '*'.VimwikiGet('ext'))
|
|
||||||
|
|
||||||
let s_links = substitute(s_links, '\'.VimwikiGet('ext'), "", "g")
|
|
||||||
let links = split(s_links, '\n')
|
|
||||||
|
|
||||||
" remove backup files (.wiki~)
|
|
||||||
call filter(links, 'v:val !~ ''.*\~$''')
|
|
||||||
|
|
||||||
" remove paths
|
|
||||||
call map(links, 'fnamemodify(v:val, ":t")')
|
|
||||||
|
|
||||||
call filter(links, 'v:val =~ "'.escape(rx, '\').'"')
|
|
||||||
return links
|
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:get_position_links(link) "{{{
|
function! s:get_position_links(link) "{{{
|
||||||
let idx = -1
|
let idx = -1
|
||||||
let links = []
|
let links = []
|
||||||
if a:link =~ '\d\{4}-\d\d-\d\d'
|
if a:link =~ '^\d\{4}-\d\d-\d\d'
|
||||||
let links = s:get_links()
|
let links = keys(s:get_diary_links())
|
||||||
" include 'today' into links
|
" include 'today' into links
|
||||||
if index(links, s:diary_date_link()) == -1
|
if index(links, s:diary_date_link()) == -1
|
||||||
call add(links, s:diary_date_link())
|
call add(links, s:diary_date_link())
|
||||||
@ -117,103 +66,263 @@ function! s:get_position_links(link) "{{{
|
|||||||
return [idx, links]
|
return [idx, links]
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:format_links(links) "{{{
|
fun! s:get_month_name(month) "{{{
|
||||||
let lines = []
|
return g:vimwiki_diary_months[str2nr(a:month)]
|
||||||
let line = '| '
|
endfun "}}}
|
||||||
let idx = 0
|
|
||||||
let trigger = 0
|
|
||||||
while idx < len(a:links)
|
|
||||||
if idx/VimwikiGet('diary_link_count') > trigger
|
|
||||||
let trigger = idx/VimwikiGet('diary_link_count')
|
|
||||||
call add(lines, substitute(line, '\s\+$', '', ''))
|
|
||||||
let line = '| '
|
|
||||||
endif
|
|
||||||
let line .= a:links[idx].' | '
|
|
||||||
let idx += 1
|
|
||||||
endwhile
|
|
||||||
call add(lines, substitute(line, '\s\+$', '', ''))
|
|
||||||
call extend(lines, [''])
|
|
||||||
|
|
||||||
return lines
|
" Helpers }}}
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:add_link(page, header, link) "{{{
|
" Diary index stuff {{{
|
||||||
let [lines, bufnr] = s:get_file_contents(a:page)
|
fun! s:read_captions(files) "{{{
|
||||||
|
let result = {}
|
||||||
|
for fl in a:files
|
||||||
|
" remove paths and extensions
|
||||||
|
let fl_key = fnamemodify(fl, ':t:r')
|
||||||
|
|
||||||
let [ln_start, ln_end] = s:get_diary_range(lines, a:header)
|
if filereadable(fl)
|
||||||
|
for line in readfile(fl, '', s:vimwiki_max_scan_for_caption)
|
||||||
let link = '[['.a:link.']]'
|
if line =~ g:vimwiki_rxHeader && !has_key(result, fl_key)
|
||||||
|
let result[fl_key] = vimwiki#u#trim(matchstr(line, g:vimwiki_rxHeader))
|
||||||
let link_exists = s:link_exists(lines[ln_start : ln_end], link)
|
endif
|
||||||
|
endfor
|
||||||
if !link_exists
|
|
||||||
|
|
||||||
if ln_start == -1
|
|
||||||
call insert(lines, '= '.a:header.' =')
|
|
||||||
let ln_start = 1
|
|
||||||
let ln_end = 1
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" removing 'old' links
|
if !has_key(result, fl_key)
|
||||||
let idx = ln_end - ln_start
|
let result[fl_key] = ''
|
||||||
while idx > 0
|
|
||||||
call remove(lines, ln_start)
|
|
||||||
let idx -= 1
|
|
||||||
endwhile
|
|
||||||
|
|
||||||
" get all diary links from filesystem
|
|
||||||
let links = s:get_links()
|
|
||||||
call map(links, '"[[".v:val."]]"')
|
|
||||||
|
|
||||||
" add current link
|
|
||||||
if index(links, link) == -1
|
|
||||||
call add(links, link)
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let links = sort(links, 's:desc')
|
endfor
|
||||||
call extend(lines, s:format_links(links), ln_start)
|
return result
|
||||||
|
endfun "}}}
|
||||||
|
|
||||||
if bufnr != -1
|
fun! s:get_diary_links(...) "{{{
|
||||||
exe 'buffer '.bufnr
|
let rx = '^\d\{4}-\d\d-\d\d'
|
||||||
if !&readonly
|
let s_files = glob(VimwikiGet('path').VimwikiGet('diary_rel_path').'*'.VimwikiGet('ext'))
|
||||||
1,$delete _
|
let files = split(s_files, '\n')
|
||||||
call append(1, lines)
|
call filter(files, 'fnamemodify(v:val, ":t") =~ "'.escape(rx, '\').'"')
|
||||||
1,1delete _
|
|
||||||
endif
|
" remove backup files (.wiki~)
|
||||||
|
call filter(files, 'v:val !~ ''.*\~$''')
|
||||||
|
|
||||||
|
if a:0
|
||||||
|
call add(files, a:1)
|
||||||
|
endif
|
||||||
|
let links_with_captions = s:read_captions(files)
|
||||||
|
|
||||||
|
return links_with_captions
|
||||||
|
endfun "}}}
|
||||||
|
|
||||||
|
fun! s:group_links(links) "{{{
|
||||||
|
let result = {}
|
||||||
|
let p_year = 0
|
||||||
|
let p_month = 0
|
||||||
|
for fl in sort(keys(a:links))
|
||||||
|
let year = strpart(fl, 0, 4)
|
||||||
|
let month = strpart(fl, 5, 2)
|
||||||
|
if p_year != year
|
||||||
|
let result[year] = {}
|
||||||
|
let p_month = 0
|
||||||
|
endif
|
||||||
|
if p_month != month
|
||||||
|
let result[year][month] = {}
|
||||||
|
endif
|
||||||
|
let result[year][month][fl] = a:links[fl]
|
||||||
|
let p_year = year
|
||||||
|
let p_month = month
|
||||||
|
endfor
|
||||||
|
return result
|
||||||
|
endfun "}}}
|
||||||
|
|
||||||
|
fun! s:sort(lst) "{{{
|
||||||
|
if VimwikiGet("diary_sort") == 'desc'
|
||||||
|
return reverse(sort(a:lst))
|
||||||
|
else
|
||||||
|
return sort(a:lst)
|
||||||
|
endif
|
||||||
|
endfun "}}}
|
||||||
|
|
||||||
|
fun! s:format_diary(...) "{{{
|
||||||
|
let result = []
|
||||||
|
|
||||||
|
call add(result, substitute(g:vimwiki_rxH1_Template, '__Header__', VimwikiGet('diary_header'), ''))
|
||||||
|
|
||||||
|
if a:0
|
||||||
|
let g_files = s:group_links(s:get_diary_links(a:1))
|
||||||
|
else
|
||||||
|
let g_files = s:group_links(s:get_diary_links())
|
||||||
|
endif
|
||||||
|
|
||||||
|
" for year in s:rev(sort(keys(g_files)))
|
||||||
|
for year in s:sort(keys(g_files))
|
||||||
|
call add(result, '')
|
||||||
|
call add(result, substitute(g:vimwiki_rxH2_Template, '__Header__', year , ''))
|
||||||
|
|
||||||
|
" for month in s:rev(sort(keys(g_files[year])))
|
||||||
|
for month in s:sort(keys(g_files[year]))
|
||||||
|
call add(result, '')
|
||||||
|
call add(result, substitute(g:vimwiki_rxH3_Template, '__Header__', s:get_month_name(month), ''))
|
||||||
|
|
||||||
|
" for [fl, cap] in s:rev(sort(items(g_files[year][month])))
|
||||||
|
for [fl, cap] in s:sort(items(g_files[year][month]))
|
||||||
|
if empty(cap)
|
||||||
|
let entry = substitute(g:vimwiki_WikiLinkTemplate1, '__LinkUrl__', fl, '')
|
||||||
|
let entry = substitute(entry, '__LinkDescription__', cap, '')
|
||||||
|
call add(result, repeat(' ', &sw).'* '.entry)
|
||||||
|
else
|
||||||
|
let entry = substitute(g:vimwiki_WikiLinkTemplate2, '__LinkUrl__', fl, '')
|
||||||
|
let entry = substitute(entry, '__LinkDescription__', cap, '')
|
||||||
|
call add(result, repeat(' ', &sw).'* '.entry)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
endfor
|
||||||
|
endfor
|
||||||
|
call add(result, '')
|
||||||
|
|
||||||
|
return result
|
||||||
|
endfun "}}}
|
||||||
|
|
||||||
|
function! s:delete_diary_section() "{{{
|
||||||
|
" remove diary section
|
||||||
|
let old_pos = getpos('.')
|
||||||
|
let ln_start = -1
|
||||||
|
let ln_end = -1
|
||||||
|
call cursor(1, 1)
|
||||||
|
if search(substitute(g:vimwiki_rxH1_Template, '__Header__', VimwikiGet('diary_header'), ''), 'Wc')
|
||||||
|
let ln_start = line('.')
|
||||||
|
if search(g:vimwiki_rxH1, 'W')
|
||||||
|
let ln_end = line('.') - 1
|
||||||
else
|
else
|
||||||
call writefile(lines, expand(a:page))
|
let ln_end = line('$')
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
if ln_start < 0 || ln_end < 0
|
||||||
|
call setpos('.', old_pos)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !&readonly
|
||||||
|
exe ln_start.",".ln_end."delete _"
|
||||||
|
endif
|
||||||
|
|
||||||
|
call setpos('.', old_pos)
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:insert_diary_section() "{{{
|
||||||
|
if !&readonly
|
||||||
|
let ln = line('.')
|
||||||
|
call append(ln, s:format_diary())
|
||||||
|
if ln == 1 && getline(ln) == ''
|
||||||
|
1,1delete
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:make_date_link(...) "{{{
|
" Diary index stuff }}}
|
||||||
if a:0
|
|
||||||
let link = a:1
|
function! vimwiki#diary#make_note(wnum, ...) "{{{
|
||||||
else
|
if a:wnum > len(g:vimwiki_list)
|
||||||
let link = s:diary_date_link()
|
echom "vimwiki: Wiki ".a:wnum." is not registered in g:vimwiki_list!"
|
||||||
|
return
|
||||||
endif
|
endif
|
||||||
let header = VimwikiGet('diary_header')
|
|
||||||
call s:add_link(s:diary_index(), header, link)
|
|
||||||
return VimwikiGet('diary_rel_path').link
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! vimwiki#diary#make_note(index, ...) "{{{
|
" TODO: refactor it. base#goto_index uses the same
|
||||||
call vimwiki#base#select(a:index)
|
if a:wnum > 0
|
||||||
call vimwiki#base#mkdir(VimwikiGet('path').VimwikiGet('diary_rel_path'))
|
let idx = a:wnum - 1
|
||||||
if a:0
|
|
||||||
let link = s:make_date_link(a:1)
|
|
||||||
else
|
else
|
||||||
let link = s:make_date_link()
|
let idx = 0
|
||||||
endif
|
endif
|
||||||
call vimwiki#base#open_link(':e ', link, s:diary_index())
|
|
||||||
|
call vimwiki#base#validate_wiki_options(idx)
|
||||||
|
call vimwiki#base#mkdir(VimwikiGet('path', idx).VimwikiGet('diary_rel_path', idx))
|
||||||
|
|
||||||
|
if a:0
|
||||||
|
let cmd = 'tabedit'
|
||||||
|
else
|
||||||
|
let cmd = 'edit'
|
||||||
|
endif
|
||||||
|
if len(a:0)>1
|
||||||
|
let link = 'diary:'.a:2
|
||||||
|
else
|
||||||
|
let link = 'diary:'.s:diary_date_link(idx)
|
||||||
|
endif
|
||||||
|
|
||||||
|
call vimwiki#base#open_link(cmd, link, s:diary_index(idx))
|
||||||
|
call vimwiki#base#setup_buffer_state(idx)
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! vimwiki#diary#goto_index(index) "{{{
|
function! vimwiki#diary#goto_diary_index(wnum) "{{{
|
||||||
call vimwiki#base#select(a:index)
|
if a:wnum > len(g:vimwiki_list)
|
||||||
call vimwiki#base#edit_file(':e', s:diary_index())
|
echom "vimwiki: Wiki ".a:wnum." is not registered in g:vimwiki_list!"
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
" TODO: refactor it. base#goto_index uses the same
|
||||||
|
if a:wnum > 0
|
||||||
|
let idx = a:wnum - 1
|
||||||
|
else
|
||||||
|
let idx = 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
call vimwiki#base#validate_wiki_options(idx)
|
||||||
|
call vimwiki#base#edit_file('e', s:diary_index(idx))
|
||||||
|
call vimwiki#base#setup_buffer_state(idx)
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
" Calendar.vim callback function.
|
function! vimwiki#diary#goto_next_day() "{{{
|
||||||
|
let link = ''
|
||||||
|
let [idx, links] = s:get_position_links(expand('%:t:r'))
|
||||||
|
|
||||||
|
if idx == (len(links) - 1)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if idx != -1 && idx < len(links) - 1
|
||||||
|
let link = 'diary:'.links[idx+1]
|
||||||
|
else
|
||||||
|
" goto today
|
||||||
|
let link = 'diary:'.s:diary_date_link()
|
||||||
|
endif
|
||||||
|
|
||||||
|
if len(link)
|
||||||
|
call vimwiki#base#open_link(':e ', link)
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#diary#goto_prev_day() "{{{
|
||||||
|
let link = ''
|
||||||
|
let [idx, links] = s:get_position_links(expand('%:t:r'))
|
||||||
|
|
||||||
|
if idx == 0
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if idx > 0
|
||||||
|
let link = 'diary:'.links[idx-1]
|
||||||
|
else
|
||||||
|
" goto today
|
||||||
|
let link = 'diary:'.s:diary_date_link()
|
||||||
|
endif
|
||||||
|
|
||||||
|
if len(link)
|
||||||
|
call vimwiki#base#open_link(':e ', link)
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#diary#generate_diary_section() "{{{
|
||||||
|
let current_file = vimwiki#u#path_norm(expand("%:p"))
|
||||||
|
let diary_file = vimwiki#u#path_norm(s:diary_index())
|
||||||
|
if current_file == diary_file
|
||||||
|
call s:delete_diary_section()
|
||||||
|
call s:insert_diary_section()
|
||||||
|
else
|
||||||
|
echom "vimwiki: You can generate diary links only in a diary index page!"
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
" Calendar.vim {{{
|
||||||
|
" Callback function.
|
||||||
function! vimwiki#diary#calendar_action(day, month, year, week, dir) "{{{
|
function! vimwiki#diary#calendar_action(day, month, year, week, dir) "{{{
|
||||||
let day = s:prefix_zero(a:day)
|
let day = s:prefix_zero(a:day)
|
||||||
let month = s:prefix_zero(a:month)
|
let month = s:prefix_zero(a:month)
|
||||||
@ -233,10 +342,10 @@ function! vimwiki#diary#calendar_action(day, month, year, week, dir) "{{{
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
" Create diary note for a selected date in default wiki.
|
" Create diary note for a selected date in default wiki.
|
||||||
call vimwiki#diary#make_note(1, link)
|
call vimwiki#diary#make_note(1, 0, link)
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
" Calendar.vim sign function.
|
" Sign function.
|
||||||
function vimwiki#diary#calendar_sign(day, month, year) "{{{
|
function vimwiki#diary#calendar_sign(day, month, year) "{{{
|
||||||
let day = s:prefix_zero(a:day)
|
let day = s:prefix_zero(a:day)
|
||||||
let month = s:prefix_zero(a:month)
|
let month = s:prefix_zero(a:month)
|
||||||
@ -245,42 +354,5 @@ function vimwiki#diary#calendar_sign(day, month, year) "{{{
|
|||||||
return filereadable(expand(sfile))
|
return filereadable(expand(sfile))
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! vimwiki#diary#goto_next_day() "{{{
|
" Calendar.vim }}}
|
||||||
let link = ''
|
|
||||||
let [idx, links] = s:get_position_links(expand('%:t:r'))
|
|
||||||
|
|
||||||
if idx == (len(links) - 1)
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
if idx != -1 && idx < len(links) - 1
|
|
||||||
let link = VimwikiGet('diary_rel_path').links[idx+1]
|
|
||||||
else
|
|
||||||
" goto today
|
|
||||||
let link = VimwikiGet('diary_rel_path').s:diary_date_link()
|
|
||||||
endif
|
|
||||||
|
|
||||||
if len(link)
|
|
||||||
call vimwiki#base#open_link(':e ', link)
|
|
||||||
endif
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! vimwiki#diary#goto_prev_day() "{{{
|
|
||||||
let link = ''
|
|
||||||
let [idx, links] = s:get_position_links(expand('%:t:r'))
|
|
||||||
|
|
||||||
if idx == 0
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
if idx > 0
|
|
||||||
let link = VimwikiGet('diary_rel_path').links[idx-1]
|
|
||||||
else
|
|
||||||
" goto today
|
|
||||||
let link = VimwikiGet('diary_rel_path').s:diary_date_link()
|
|
||||||
endif
|
|
||||||
|
|
||||||
if len(link)
|
|
||||||
call vimwiki#base#open_link(':e ', link)
|
|
||||||
endif
|
|
||||||
endfunction "}}}
|
|
||||||
|
@ -14,6 +14,15 @@ let g:loaded_vimwiki_html_auto = 1
|
|||||||
"}}}
|
"}}}
|
||||||
|
|
||||||
" UTILITY "{{{
|
" 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) "{{{
|
function! s:root_path(subdir) "{{{
|
||||||
return repeat('../', len(split(a:subdir, '[/\\]')))
|
return repeat('../', len(split(a:subdir, '[/\\]')))
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
@ -36,7 +45,7 @@ function! s:is_web_link(lnk) "{{{
|
|||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:is_img_link(lnk) "{{{
|
function! s:is_img_link(lnk) "{{{
|
||||||
if a:lnk =~ '\.\%(png\|jpg\|gif\|jpeg\)$'
|
if tolower(a:lnk) =~ '\.\%(png\|jpg\|gif\|jpeg\)$'
|
||||||
return 1
|
return 1
|
||||||
endif
|
endif
|
||||||
return 0
|
return 0
|
||||||
@ -59,9 +68,14 @@ function! s:find_autoload_file(name) " {{{
|
|||||||
return ''
|
return ''
|
||||||
endfunction " }}}
|
endfunction " }}}
|
||||||
|
|
||||||
function! s:create_default_CSS(path) " {{{
|
function! s:default_CSS_full_name(path) " {{{
|
||||||
let path = expand(a:path)
|
let path = expand(a:path)
|
||||||
let css_full_name = path.VimwikiGet('css_name')
|
let css_full_name = path.VimwikiGet('css_name')
|
||||||
|
return css_full_name
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:create_default_CSS(path) " {{{
|
||||||
|
let css_full_name = s:default_CSS_full_name(a:path)
|
||||||
if glob(css_full_name) == ""
|
if glob(css_full_name) == ""
|
||||||
call vimwiki#base#mkdir(fnamemodify(css_full_name, ':p:h'))
|
call vimwiki#base#mkdir(fnamemodify(css_full_name, ':p:h'))
|
||||||
let default_css = s:find_autoload_file('style.css')
|
let default_css = s:find_autoload_file('style.css')
|
||||||
@ -81,8 +95,7 @@ function! s:template_full_name(name) "{{{
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
let fname = expand(VimwikiGet('template_path').
|
let fname = expand(VimwikiGet('template_path').
|
||||||
\name.
|
\ name.VimwikiGet('template_ext'))
|
||||||
\VimwikiGet('template_ext'))
|
|
||||||
|
|
||||||
if filereadable(fname)
|
if filereadable(fname)
|
||||||
return fname
|
return fname
|
||||||
@ -95,8 +108,8 @@ function! s:get_html_template(wikifile, template) "{{{
|
|||||||
" TODO: refactor it!!!
|
" TODO: refactor it!!!
|
||||||
let lines=[]
|
let lines=[]
|
||||||
|
|
||||||
let template_name = s:template_full_name(a:template)
|
if a:template != ''
|
||||||
if template_name != ''
|
let template_name = s:template_full_name(a:template)
|
||||||
try
|
try
|
||||||
let lines = readfile(template_name)
|
let lines = readfile(template_name)
|
||||||
return lines
|
return lines
|
||||||
@ -106,27 +119,40 @@ function! s:get_html_template(wikifile, template) "{{{
|
|||||||
endtry
|
endtry
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" if no VimwikiGet('html_template') set up or error while reading template
|
let default_tpl = s:template_full_name('')
|
||||||
" file -- use default one.
|
|
||||||
let default_tpl = s:find_autoload_file('default.tpl')
|
if default_tpl == ''
|
||||||
if default_tpl != ''
|
let default_tpl = s:find_autoload_file('default.tpl')
|
||||||
let lines = readfile(default_tpl)
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
let lines = readfile(default_tpl)
|
||||||
return lines
|
return lines
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:safe_html_tags(line) "{{{
|
||||||
|
let line = substitute(a:line,'<','\<', 'g')
|
||||||
|
let line = substitute(line,'>','\>', 'g')
|
||||||
|
return line
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:safe_html(line) "{{{
|
function! s:safe_html(line) "{{{
|
||||||
|
" escape & < > when producing HTML text
|
||||||
|
" uses variables s:lt_pattern, s:gt_pattern that are
|
||||||
|
" set in vimwiki#html#Wiki2HTML() according to g:vimwiki_valid_html_tags
|
||||||
"" htmlize symbols: < > &
|
"" htmlize symbols: < > &
|
||||||
|
|
||||||
let line = substitute(a:line, '&', '\&', 'g')
|
let line = substitute(a:line, '&', '\&', 'g')
|
||||||
|
" the following depends on g:vimwiki_valid_html_tags
|
||||||
|
let line = substitute(line,s:lt_pattern,'\<', 'g')
|
||||||
|
let line = substitute(line,s:gt_pattern,'\>', 'g')
|
||||||
|
|
||||||
let tags = join(split(g:vimwiki_valid_html_tags, '\s*,\s*'), '\|')
|
"let tags = join(split(g:vimwiki_valid_html_tags, '\s*,\s*'), '\|')
|
||||||
let line = substitute(line,'<\%(/\?\%('
|
"let line = substitute(line,'<\%(/\?\%('
|
||||||
\.tags.'\)\%(\s\{-1}\S\{-}\)\{-}/\?>\)\@!',
|
" \.tags.'\)\%(\s\{-1}\S\{-}\)\{-}/\?>\)\@!',
|
||||||
\'\<', 'g')
|
" \'\<', 'g')
|
||||||
let line = substitute(line,'\%(</\?\%('
|
"let line = substitute(line,'\%(</\?\%('
|
||||||
\.tags.'\)\%(\s\{-1}\S\{-}\)\{-}/\?\)\@<!>',
|
" \.tags.'\)\%(\s\{-1}\S\{-}\)\{-}/\?\)\@<!>',
|
||||||
\'\>', 'g')
|
" \'\>', 'g')
|
||||||
return line
|
return line
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
@ -140,8 +166,8 @@ function! s:delete_html_files(path) "{{{
|
|||||||
|
|
||||||
" delete if there is no corresponding wiki file
|
" delete if there is no corresponding wiki file
|
||||||
let subdir = vimwiki#base#subdir(VimwikiGet('path_html'), fname)
|
let subdir = vimwiki#base#subdir(VimwikiGet('path_html'), fname)
|
||||||
let wikifile = VimwikiGet("path").subdir.
|
let wikifile = VimwikiGet('path').subdir.
|
||||||
\fnamemodify(fname, ":t:r").VimwikiGet("ext")
|
\fnamemodify(fname, ":t:r").VimwikiGet('ext')
|
||||||
if filereadable(wikifile)
|
if filereadable(wikifile)
|
||||||
continue
|
continue
|
||||||
endif
|
endif
|
||||||
@ -182,12 +208,6 @@ function! s:save_vimwiki_buffer() "{{{
|
|||||||
endif
|
endif
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:trim(string) "{{{
|
|
||||||
let res = substitute(a:string, '^\s\+', '', '')
|
|
||||||
let res = substitute(res, '\s\+$', '', '')
|
|
||||||
return res
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:get_html_toc(toc_list) "{{{
|
function! s:get_html_toc(toc_list) "{{{
|
||||||
" toc_list is list of [level, header_text, header_id]
|
" toc_list is list of [level, header_text, header_id]
|
||||||
" ex: [[1, "Header", "toc1"], [2, "Header2", "toc2"], ...]
|
" ex: [[1, "Header", "toc1"], [2, "Header2", "toc2"], ...]
|
||||||
@ -265,8 +285,7 @@ function! s:is_html_uptodate(wikifile) "{{{
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
let wikifile = fnamemodify(a:wikifile, ":p")
|
let wikifile = fnamemodify(a:wikifile, ":p")
|
||||||
let subdir = vimwiki#base#subdir(VimwikiGet('path'), wikifile)
|
let htmlfile = expand(VimwikiGet('path_html').VimwikiGet('subdir').
|
||||||
let htmlfile = expand(VimwikiGet('path_html').subdir.
|
|
||||||
\fnamemodify(wikifile, ":t:r").".html")
|
\fnamemodify(wikifile, ":t:r").".html")
|
||||||
|
|
||||||
if getftime(wikifile) <= getftime(htmlfile) && tpl_time <= getftime(htmlfile)
|
if getftime(wikifile) <= getftime(htmlfile) && tpl_time <= getftime(htmlfile)
|
||||||
@ -299,6 +318,11 @@ endfunction "}}}
|
|||||||
"}}}
|
"}}}
|
||||||
|
|
||||||
" INLINE TAGS "{{{
|
" INLINE TAGS "{{{
|
||||||
|
function! s:tag_eqin(value) "{{{
|
||||||
|
" mathJAX wants \( \) for inline maths
|
||||||
|
return '\('.s:mid(a:value, 1).'\)'
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:tag_em(value) "{{{
|
function! s:tag_em(value) "{{{
|
||||||
return '<em>'.s:mid(a:value, 1).'</em>'
|
return '<em>'.s:mid(a:value, 1).'</em>'
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
@ -324,141 +348,113 @@ function! s:tag_sub(value) "{{{
|
|||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:tag_code(value) "{{{
|
function! s:tag_code(value) "{{{
|
||||||
return '<code>'.s:mid(a:value, 1).'</code>'
|
return '<code>'.s:safe_html_tags(s:mid(a:value, 1)).'</code>'
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:tag_pre(value) "{{{
|
"function! s:tag_pre(value) "{{{
|
||||||
return '<code>'.s:mid(a:value, 3).'</code>'
|
" return '<code>'.s:mid(a:value, 3).'</code>'
|
||||||
|
"endfunction "}}}
|
||||||
|
|
||||||
|
"FIXME dead code?
|
||||||
|
"function! s:tag_math(value) "{{{
|
||||||
|
" return '\['.s:mid(a:value, 3).'\]'
|
||||||
|
"endfunction "}}}
|
||||||
|
|
||||||
|
|
||||||
|
"{{{ v2.0 links
|
||||||
|
" match n-th ARG within {{URL[|ARG1|ARG2|...]}} " {{{
|
||||||
|
" *c,d,e),...
|
||||||
|
function! vimwiki#html#incl_match_arg(nn_index)
|
||||||
|
let rx = g:vimwiki_rxWikiInclPrefix. g:vimwiki_rxWikiInclUrl
|
||||||
|
let rx = rx. repeat(g:vimwiki_rxWikiInclSeparator. g:vimwiki_rxWikiInclArg, a:nn_index-1)
|
||||||
|
if a:nn_index > 0
|
||||||
|
let rx = rx. g:vimwiki_rxWikiInclSeparator. '\zs'. g:vimwiki_rxWikiInclArg. '\ze'
|
||||||
|
endif
|
||||||
|
let rx = rx. g:vimwiki_rxWikiInclArgs. g:vimwiki_rxWikiInclSuffix
|
||||||
|
return rx
|
||||||
|
endfunction
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
function! vimwiki#html#linkify_link(src, descr) "{{{
|
||||||
|
let src_str = ' href="'.a:src.'"'
|
||||||
|
let descr = substitute(a:descr,'^\s*\(.*\)\s*$','\1','')
|
||||||
|
let descr = (descr == "" ? a:src : descr)
|
||||||
|
let descr_str = (descr =~ g:vimwiki_rxWikiIncl
|
||||||
|
\ ? s:tag_wikiincl(descr)
|
||||||
|
\ : descr)
|
||||||
|
return '<a'.src_str.'>'.descr_str.'</a>'
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:tag_internal_link(value) "{{{
|
function! vimwiki#html#linkify_image(src, descr, verbatim_str) "{{{
|
||||||
" Make <a href="This is a link">This is a link</a>
|
let src_str = ' src="'.a:src.'"'
|
||||||
" from [[This is a link]]
|
let descr_str = (a:descr != '' ? ' alt="'.a:descr.'"' : '')
|
||||||
" Make <a href="link">This is a link</a>
|
let verbatim_str = (a:verbatim_str != '' ? ' '.a:verbatim_str : '')
|
||||||
" from [[link|This is a link]]
|
return '<img'.src_str.descr_str.verbatim_str.' />'
|
||||||
" Make <a href="link">This is a link</a>
|
endfunction "}}}
|
||||||
" from [[link][This is a link]]
|
|
||||||
" TODO: rename function -- it makes not only internal links.
|
|
||||||
" TODO: refactor it.
|
|
||||||
|
|
||||||
function! s:linkify(src, caption, style) "{{{
|
function! s:tag_weblink(value) "{{{
|
||||||
if a:style == ''
|
" Weblink Template -> <a href="url">descr</a>
|
||||||
let style_str = ''
|
let str = a:value
|
||||||
else
|
let url = matchstr(str, g:vimwiki_rxWeblinkMatchUrl)
|
||||||
let style_str = ' style="'.a:style.'"'
|
let descr = matchstr(str, g:vimwiki_rxWeblinkMatchDescr)
|
||||||
endif
|
let line = vimwiki#html#linkify_link(url, descr)
|
||||||
|
|
||||||
if s:is_img_link(a:caption)
|
|
||||||
let link = '<a href="'.a:src.'"><img src="'.a:caption.'"'.style_str.' />'.
|
|
||||||
\ '</a>'
|
|
||||||
elseif vimwiki#base#is_non_wiki_link(a:src)
|
|
||||||
let link = '<a href="'.a:src.'">'.a:caption.'</a>'
|
|
||||||
elseif s:is_img_link(a:src)
|
|
||||||
let link = '<img src="'.a:src.'" alt="'.a:caption.'"'. style_str.' />'
|
|
||||||
elseif vimwiki#base#is_link_to_dir(a:src)
|
|
||||||
if g:vimwiki_dir_link == ''
|
|
||||||
let link = '<a href="'.vimwiki#base#safe_link(a:src).'">'.a:caption.'</a>'
|
|
||||||
else
|
|
||||||
let link = '<a href="'.vimwiki#base#safe_link(a:src).
|
|
||||||
\ g:vimwiki_dir_link.'.html">'.a:caption.'</a>'
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
let link = '<a href="'.vimwiki#base#safe_link(a:src).
|
|
||||||
\ '.html">'.a:caption.'</a>'
|
|
||||||
endif
|
|
||||||
|
|
||||||
return link
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
let value = s:mid(a:value, 2)
|
|
||||||
|
|
||||||
let line = ''
|
|
||||||
if value =~ '|'
|
|
||||||
let link_parts = split(value, "|", 1)
|
|
||||||
else
|
|
||||||
let link_parts = split(value, "][", 1)
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
if len(link_parts) > 1
|
|
||||||
if len(link_parts) < 3
|
|
||||||
let style = ""
|
|
||||||
else
|
|
||||||
let style = link_parts[2]
|
|
||||||
endif
|
|
||||||
|
|
||||||
let line = s:linkify(link_parts[0], link_parts[1], style)
|
|
||||||
|
|
||||||
else
|
|
||||||
let line = s:linkify(value, value, '')
|
|
||||||
endif
|
|
||||||
return line
|
return line
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:tag_external_link(value) "{{{
|
function! s:tag_wikiincl(value) "{{{
|
||||||
"" Make <a href="link">link desc</a>
|
" {{imgurl|arg1|arg2}} -> ???
|
||||||
"" from [link link desc]
|
" {{imgurl}} -> <img src="imgurl"/>
|
||||||
|
" {{imgurl|descr|style="A"}} -> <img src="imgurl" alt="descr" style="A" />
|
||||||
let value = s:mid(a:value, 1)
|
" {{imgurl|descr|class="B"}} -> <img src="imgurl" alt="descr" class="B" />
|
||||||
|
let str = a:value
|
||||||
let line = ''
|
" custom transclusions
|
||||||
if s:is_web_link(value)
|
let line = VimwikiWikiIncludeHandler(str)
|
||||||
let lnkElements = split(value)
|
" otherwise, assume image transclusion
|
||||||
let head = lnkElements[0]
|
if line == ''
|
||||||
let rest = join(lnkElements[1:])
|
let url_0 = matchstr(str, g:vimwiki_rxWikiInclMatchUrl)
|
||||||
if rest==""
|
let descr = matchstr(str, vimwiki#html#incl_match_arg(1))
|
||||||
let rest=head
|
let verbatim_str = matchstr(str, vimwiki#html#incl_match_arg(2))
|
||||||
|
" resolve url
|
||||||
|
let [idx, scheme, path, subdir, lnk, ext, url] =
|
||||||
|
\ vimwiki#base#resolve_scheme(url_0, 1)
|
||||||
|
" generate html output
|
||||||
|
" TODO: migrate non-essential debugging messages into g:VimwikiLog
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echom '{{idx='.idx.', scheme='.scheme.', path='.path.', subdir='.subdir.', lnk='.lnk.', ext='.ext.'}}'
|
||||||
endif
|
endif
|
||||||
if s:is_img_link(rest)
|
let url = escape(url, '#')
|
||||||
if rest!=head
|
let line = vimwiki#html#linkify_image(url, descr, verbatim_str)
|
||||||
let line = '<a href="'.head.'"><img src="'.rest.'" /></a>'
|
|
||||||
else
|
|
||||||
let line = '<img src="'.rest.'" />'
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
let line = '<a href="'.head.'">'.rest.'</a>'
|
|
||||||
endif
|
|
||||||
elseif s:is_img_link(value)
|
|
||||||
let line = '<img src="'.value.'" />'
|
|
||||||
else
|
|
||||||
" [alskfj sfsf] shouldn't be a link. So return it as it was --
|
|
||||||
" enclosed in [...]
|
|
||||||
let line = '['.value.']'
|
|
||||||
endif
|
|
||||||
return line
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:tag_wikiword_link(value) "{{{
|
|
||||||
" Make <a href="WikiWord">WikiWord</a> from WikiWord
|
|
||||||
if a:value[0] == '!'
|
|
||||||
return a:value[1:]
|
|
||||||
elseif g:vimwiki_camel_case
|
|
||||||
let line = '<a href="'.a:value.'.html">'.a:value.'</a>'
|
|
||||||
return line
|
return line
|
||||||
else
|
|
||||||
return a:value
|
|
||||||
endif
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:tag_barebone_link(value) "{{{
|
|
||||||
"" Make <a href="http://habamax.ru">http://habamax.ru</a>
|
|
||||||
"" from http://habamax.ru
|
|
||||||
|
|
||||||
if s:is_img_link(a:value)
|
|
||||||
let line = '<img src="'.a:value.'" />'
|
|
||||||
else
|
|
||||||
let line = '<a href="'.a:value.'">'.a:value.'</a>'
|
|
||||||
endif
|
endif
|
||||||
return line
|
return line
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:tag_no_wikiword_link(value) "{{{
|
function! s:tag_wikilink(value) "{{{
|
||||||
if a:value[0] == '!'
|
" [[url]] -> <a href="url.html">url</a>
|
||||||
return a:value[1:]
|
" [[url|descr]] -> <a href="url.html">descr</a>
|
||||||
else
|
" [[url|{{...}}]] -> <a href="url.html"> ... </a>
|
||||||
return a:value
|
" [[fileurl.ext|descr]] -> <a href="fileurl.ext">descr</a>
|
||||||
|
" [[dirurl/|descr]] -> <a href="dirurl/index.html">descr</a>
|
||||||
|
let str = a:value
|
||||||
|
let url = matchstr(str, g:vimwiki_rxWikiLinkMatchUrl)
|
||||||
|
let descr = matchstr(str, g:vimwiki_rxWikiLinkMatchDescr)
|
||||||
|
let descr = (substitute(descr,'^\s*\(.*\)\s*$','\1','') != '' ? descr : url)
|
||||||
|
|
||||||
|
" resolve url
|
||||||
|
let [idx, scheme, path, subdir, lnk, ext, url] =
|
||||||
|
\ vimwiki#base#resolve_scheme(url, 1)
|
||||||
|
|
||||||
|
" generate html output
|
||||||
|
" TODO: migrate non-essential debugging messages into g:VimwikiLog
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echom '[[idx='.idx.', scheme='.scheme.', path='.path.', subdir='.subdir.', lnk='.lnk.', ext='.ext.']]'
|
||||||
endif
|
endif
|
||||||
|
let url = escape(url, '#')
|
||||||
|
let line = vimwiki#html#linkify_link(url, descr)
|
||||||
|
return line
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
"}}} v1.3 links
|
||||||
|
|
||||||
|
|
||||||
function! s:tag_remove_internal_link(value) "{{{
|
function! s:tag_remove_internal_link(value) "{{{
|
||||||
let value = s:mid(a:value, 2)
|
let value = s:mid(a:value, 2)
|
||||||
@ -508,10 +504,16 @@ endfunction "}}}
|
|||||||
function! s:make_tag(line, regexp, func) "{{{
|
function! s:make_tag(line, regexp, func) "{{{
|
||||||
" Make tags for a given matched regexp.
|
" Make tags for a given matched regexp.
|
||||||
" Exclude preformatted text and href links.
|
" Exclude preformatted text and href links.
|
||||||
|
" FIXME
|
||||||
|
let patt_splitter = '\(`[^`]\+`\)\|'.
|
||||||
|
\ '\('.g:vimwiki_rxPreStart.'.\+'.g:vimwiki_rxPreEnd.'\)\|'.
|
||||||
|
\ '\(<a href.\{-}</a>\)\|'.
|
||||||
|
\ '\(<img src.\{-}/>\)\|'.
|
||||||
|
\ '\('.g:vimwiki_rxEqIn.'\)'
|
||||||
|
|
||||||
let patt_splitter = '\(`[^`]\+`\)\|\({{{.\+}}}\)\|'.
|
"FIXME FIXME !!! these can easily occur on the same line!
|
||||||
\ '\(<a href.\{-}</a>\)\|\(<img src.\{-}/>\)'
|
"XXX {{{ }}} ??? obsolete
|
||||||
if '`[^`]\+`' == a:regexp || '{{{.\+}}}' == a:regexp
|
if '`[^`]\+`' == a:regexp || '{{{.\+}}}' == a:regexp || g:vimwiki_rxEqIn == a:regexp
|
||||||
let res_line = s:subst_func(a:line, a:regexp, a:func)
|
let res_line = s:subst_func(a:line, a:regexp, a:func)
|
||||||
else
|
else
|
||||||
let pos = 0
|
let pos = 0
|
||||||
@ -541,7 +543,6 @@ endfunction " }}}
|
|||||||
|
|
||||||
function! s:process_tags_typefaces(line) "{{{
|
function! s:process_tags_typefaces(line) "{{{
|
||||||
let line = a:line
|
let line = a:line
|
||||||
let line = s:make_tag(line, g:vimwiki_rxNoWikiWord, 's:tag_no_wikiword_link')
|
|
||||||
let line = s:make_tag(line, g:vimwiki_rxItalic, 's:tag_em')
|
let line = s:make_tag(line, g:vimwiki_rxItalic, 's:tag_em')
|
||||||
let line = s:make_tag(line, g:vimwiki_rxBold, 's:tag_strong')
|
let line = s:make_tag(line, g:vimwiki_rxBold, 's:tag_strong')
|
||||||
let line = s:make_tag(line, g:vimwiki_rxTodo, 's:tag_todo')
|
let line = s:make_tag(line, g:vimwiki_rxTodo, 's:tag_todo')
|
||||||
@ -549,15 +550,15 @@ function! s:process_tags_typefaces(line) "{{{
|
|||||||
let line = s:make_tag(line, g:vimwiki_rxSuperScript, 's:tag_super')
|
let line = s:make_tag(line, g:vimwiki_rxSuperScript, 's:tag_super')
|
||||||
let line = s:make_tag(line, g:vimwiki_rxSubScript, 's:tag_sub')
|
let line = s:make_tag(line, g:vimwiki_rxSubScript, 's:tag_sub')
|
||||||
let line = s:make_tag(line, g:vimwiki_rxCode, 's:tag_code')
|
let line = s:make_tag(line, g:vimwiki_rxCode, 's:tag_code')
|
||||||
|
let line = s:make_tag(line, g:vimwiki_rxEqIn, 's:tag_eqin')
|
||||||
return line
|
return line
|
||||||
endfunction " }}}
|
endfunction " }}}
|
||||||
|
|
||||||
function! s:process_tags_links(line) " {{{
|
function! s:process_tags_links(line) " {{{
|
||||||
let line = a:line
|
let line = a:line
|
||||||
let line = s:make_tag(line, '\[\[.\{-}\]\]', 's:tag_internal_link')
|
let line = s:make_tag(line, g:vimwiki_rxWikiLink, 's:tag_wikilink')
|
||||||
let line = s:make_tag(line, '\[.\{-}\]', 's:tag_external_link')
|
let line = s:make_tag(line, g:vimwiki_rxWikiIncl, 's:tag_wikiincl')
|
||||||
let line = s:make_tag(line, g:vimwiki_rxWeblink, 's:tag_barebone_link')
|
let line = s:make_tag(line, g:vimwiki_rxWeblink, 's:tag_weblink')
|
||||||
let line = s:make_tag(line, g:vimwiki_rxWikiWord, 's:tag_wikiword_link')
|
|
||||||
return line
|
return line
|
||||||
endfunction " }}}
|
endfunction " }}}
|
||||||
|
|
||||||
@ -577,6 +578,14 @@ function! s:close_tag_pre(pre, ldest) "{{{
|
|||||||
return a:pre
|
return a:pre
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:close_tag_math(math, ldest) "{{{
|
||||||
|
if a:math[0]
|
||||||
|
call insert(a:ldest, "\\\]")
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
return a:math
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:close_tag_quote(quote, ldest) "{{{
|
function! s:close_tag_quote(quote, ldest) "{{{
|
||||||
if a:quote
|
if a:quote
|
||||||
call insert(a:ldest, "</blockquote>")
|
call insert(a:ldest, "</blockquote>")
|
||||||
@ -745,11 +754,15 @@ endfunction! "}}}
|
|||||||
|
|
||||||
function! s:process_tag_pre(line, pre) "{{{
|
function! s:process_tag_pre(line, pre) "{{{
|
||||||
" pre is the list of [is_in_pre, indent_of_pre]
|
" pre is the list of [is_in_pre, indent_of_pre]
|
||||||
|
"XXX always outputs a single line or empty list!
|
||||||
let lines = []
|
let lines = []
|
||||||
let pre = a:pre
|
let pre = a:pre
|
||||||
let processed = 0
|
let processed = 0
|
||||||
if !pre[0] && a:line =~ '^\s*{{{[^\(}}}\)]*\s*$'
|
"XXX huh?
|
||||||
|
"if !pre[0] && a:line =~ '^\s*{{{[^\(}}}\)]*\s*$'
|
||||||
|
if !pre[0] && a:line =~ '^\s*{{{'
|
||||||
let class = matchstr(a:line, '{{{\zs.*$')
|
let class = matchstr(a:line, '{{{\zs.*$')
|
||||||
|
"FIXME class cannot contain arbitrary strings
|
||||||
let class = substitute(class, '\s\+$', '', 'g')
|
let class = substitute(class, '\s\+$', '', 'g')
|
||||||
if class != ""
|
if class != ""
|
||||||
call add(lines, "<pre ".class.">")
|
call add(lines, "<pre ".class.">")
|
||||||
@ -764,11 +777,48 @@ function! s:process_tag_pre(line, pre) "{{{
|
|||||||
let processed = 1
|
let processed = 1
|
||||||
elseif pre[0]
|
elseif pre[0]
|
||||||
let processed = 1
|
let processed = 1
|
||||||
call add(lines, substitute(a:line, '^\s\{'.pre[1].'}', '', ''))
|
"XXX destroys indent in general!
|
||||||
|
"call add(lines, substitute(a:line, '^\s\{'.pre[1].'}', '', ''))
|
||||||
|
call add(lines, s:safe_html_tags(a:line))
|
||||||
endif
|
endif
|
||||||
return [processed, lines, pre]
|
return [processed, lines, pre]
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:process_tag_math(line, math) "{{{
|
||||||
|
" math is the list of [is_in_math, indent_of_math]
|
||||||
|
let lines = []
|
||||||
|
let math = a:math
|
||||||
|
let processed = 0
|
||||||
|
if !math[0] && a:line =~ '^\s*{{\$[^\(}}$\)]*\s*$'
|
||||||
|
let class = matchstr(a:line, '{{$\zs.*$')
|
||||||
|
"FIXME class cannot be any string!
|
||||||
|
let class = substitute(class, '\s\+$', '', 'g')
|
||||||
|
" Check the math placeholder (default: displaymath)
|
||||||
|
let b:vimwiki_mathEnv = matchstr(class, '^%\zs\S\+\ze%')
|
||||||
|
if b:vimwiki_mathEnv != ""
|
||||||
|
call add(lines, substitute(class, '^%\(\S\+\)%','\\begin{\1}', ''))
|
||||||
|
elseif class != ""
|
||||||
|
call add(lines, "\\\[".class)
|
||||||
|
else
|
||||||
|
call add(lines, "\\\[")
|
||||||
|
endif
|
||||||
|
let math = [1, len(matchstr(a:line, '^\s*\ze{{\$'))]
|
||||||
|
let processed = 1
|
||||||
|
elseif math[0] && a:line =~ '^\s*}}\$\s*$'
|
||||||
|
let math = [0, 0]
|
||||||
|
if b:vimwiki_mathEnv != ""
|
||||||
|
call add(lines, "\\end{".b:vimwiki_mathEnv."}")
|
||||||
|
else
|
||||||
|
call add(lines, "\\\]")
|
||||||
|
endif
|
||||||
|
let processed = 1
|
||||||
|
elseif math[0]
|
||||||
|
let processed = 1
|
||||||
|
call add(lines, substitute(a:line, '^\s\{'.math[1].'}', '', ''))
|
||||||
|
endif
|
||||||
|
return [processed, lines, math]
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:process_tag_quote(line, quote) "{{{
|
function! s:process_tag_quote(line, quote) "{{{
|
||||||
let lines = []
|
let lines = []
|
||||||
let quote = a:quote
|
let quote = a:quote
|
||||||
@ -800,7 +850,8 @@ function! s:process_tag_list(line, lists) "{{{
|
|||||||
if chk[1] =~ '[.*\\^$~]'
|
if chk[1] =~ '[.*\\^$~]'
|
||||||
let chk[1] ='\'.chk[1]
|
let chk[1] ='\'.chk[1]
|
||||||
endif
|
endif
|
||||||
let completion = match(g:vimwiki_listsyms, '\C' . chk[1])
|
" let completion = match(g:vimwiki_listsyms, '\C' . chk[1])
|
||||||
|
let completion = s:get_completion_index(chk[1])
|
||||||
if completion >= 0 && completion <=4
|
if completion >= 0 && completion <=4
|
||||||
let st_tag = '<li class="done'.completion.'">'
|
let st_tag = '<li class="done'.completion.'">'
|
||||||
endif
|
endif
|
||||||
@ -935,18 +986,9 @@ function! s:process_tag_h(line, id) "{{{
|
|||||||
let h_level = 0
|
let h_level = 0
|
||||||
let h_text = ''
|
let h_text = ''
|
||||||
let h_id = ''
|
let h_id = ''
|
||||||
if a:line =~ g:vimwiki_rxH6
|
|
||||||
let h_level = 6
|
if a:line =~ g:vimwiki_rxHeader
|
||||||
elseif a:line =~ g:vimwiki_rxH5
|
let h_level = vimwiki#u#count_first_sym(a:line)
|
||||||
let h_level = 5
|
|
||||||
elseif a:line =~ g:vimwiki_rxH4
|
|
||||||
let h_level = 4
|
|
||||||
elseif a:line =~ g:vimwiki_rxH3
|
|
||||||
let h_level = 3
|
|
||||||
elseif a:line =~ g:vimwiki_rxH2
|
|
||||||
let h_level = 2
|
|
||||||
elseif a:line =~ g:vimwiki_rxH1
|
|
||||||
let h_level = 1
|
|
||||||
endif
|
endif
|
||||||
if h_level > 0
|
if h_level > 0
|
||||||
let a:id[h_level] += 1
|
let a:id[h_level] += 1
|
||||||
@ -960,8 +1002,6 @@ function! s:process_tag_h(line, id) "{{{
|
|||||||
let centered = 1
|
let centered = 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let line = s:trim(line)
|
|
||||||
|
|
||||||
let h_number = ''
|
let h_number = ''
|
||||||
for l in range(1, h_level-1)
|
for l in range(1, h_level-1)
|
||||||
let h_number .= a:id[l].'.'
|
let h_number .= a:id[l].'.'
|
||||||
@ -978,7 +1018,8 @@ function! s:process_tag_h(line, id) "{{{
|
|||||||
let h_part .= '>'
|
let h_part .= '>'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let h_text = s:trim(strpart(line, h_level, len(line) - h_level * 2))
|
let h_text = vimwiki#u#trim(matchstr(line, g:vimwiki_rxHeader))
|
||||||
|
|
||||||
if g:vimwiki_html_header_numbering
|
if g:vimwiki_html_header_numbering
|
||||||
let num = matchstr(h_number,
|
let num = matchstr(h_number,
|
||||||
\ '^\(\d.\)\{'.(g:vimwiki_html_header_numbering-1).'}\zs.*')
|
\ '^\(\d.\)\{'.(g:vimwiki_html_header_numbering-1).'}\zs.*')
|
||||||
@ -1046,14 +1087,15 @@ function! s:process_tag_table(line, table) "{{{
|
|||||||
let lines = []
|
let lines = []
|
||||||
let processed = 0
|
let processed = 0
|
||||||
|
|
||||||
if a:line =~ '^\s*|[-+]\+|\s*$'
|
if vimwiki#tbl#is_separator(a:line)
|
||||||
call extend(table, s:table_add_row(a:table, a:line))
|
call extend(table, s:table_add_row(a:table, a:line))
|
||||||
let processed = 1
|
let processed = 1
|
||||||
elseif a:line =~ '^\s*|.\+|\s*$'
|
elseif vimwiki#tbl#is_table(a:line)
|
||||||
call extend(table, s:table_add_row(a:table, a:line))
|
call extend(table, s:table_add_row(a:table, a:line))
|
||||||
|
|
||||||
let processed = 1
|
let processed = 1
|
||||||
let cells = split(a:line, '\s*|\s*', 1)[1: -2]
|
" let cells = split(a:line, vimwiki#tbl#cell_splitter(), 1)[1: -2]
|
||||||
|
let cells = vimwiki#tbl#get_cells(a:line)
|
||||||
call map(cells, 's:table_empty_cell(v:val)')
|
call map(cells, 's:table_empty_cell(v:val)')
|
||||||
call extend(table[-1], cells)
|
call extend(table[-1], cells)
|
||||||
else
|
else
|
||||||
@ -1072,6 +1114,7 @@ function! s:parse_line(line, state) " {{{
|
|||||||
let state.para = a:state.para
|
let state.para = a:state.para
|
||||||
let state.quote = a:state.quote
|
let state.quote = a:state.quote
|
||||||
let state.pre = a:state.pre[:]
|
let state.pre = a:state.pre[:]
|
||||||
|
let state.math = a:state.math[:]
|
||||||
let state.table = a:state.table[:]
|
let state.table = a:state.table[:]
|
||||||
let state.lists = a:state.lists[:]
|
let state.lists = a:state.lists[:]
|
||||||
let state.deflist = a:state.deflist
|
let state.deflist = a:state.deflist
|
||||||
@ -1135,6 +1178,9 @@ function! s:parse_line(line, state) " {{{
|
|||||||
" if processed && len(state.lists)
|
" if processed && len(state.lists)
|
||||||
" call s:close_tag_list(state.lists, lines)
|
" call s:close_tag_list(state.lists, lines)
|
||||||
" endif
|
" endif
|
||||||
|
if !processed
|
||||||
|
let [processed, lines, state.math] = s:process_tag_math(line, state.math)
|
||||||
|
endif
|
||||||
if processed && len(state.table)
|
if processed && len(state.table)
|
||||||
let state.table = s:close_tag_table(state.table, lines)
|
let state.table = s:close_tag_table(state.table, lines)
|
||||||
endif
|
endif
|
||||||
@ -1160,6 +1206,9 @@ function! s:parse_line(line, state) " {{{
|
|||||||
if processed && state.pre[0]
|
if processed && state.pre[0]
|
||||||
let state.pre = s:close_tag_pre(state.pre, lines)
|
let state.pre = s:close_tag_pre(state.pre, lines)
|
||||||
endif
|
endif
|
||||||
|
if processed && state.math[0]
|
||||||
|
let state.math = s:close_tag_math(state.math, lines)
|
||||||
|
endif
|
||||||
if processed && len(state.table)
|
if processed && len(state.table)
|
||||||
let state.table = s:close_tag_table(state.table, lines)
|
let state.table = s:close_tag_table(state.table, lines)
|
||||||
endif
|
endif
|
||||||
@ -1183,6 +1232,7 @@ function! s:parse_line(line, state) " {{{
|
|||||||
call s:close_tag_list(state.lists, res_lines)
|
call s:close_tag_list(state.lists, res_lines)
|
||||||
let state.table = s:close_tag_table(state.table, res_lines)
|
let state.table = s:close_tag_table(state.table, res_lines)
|
||||||
let state.pre = s:close_tag_pre(state.pre, res_lines)
|
let state.pre = s:close_tag_pre(state.pre, res_lines)
|
||||||
|
let state.math = s:close_tag_math(state.math, res_lines)
|
||||||
let state.quote = s:close_tag_quote(state.quote, res_lines)
|
let state.quote = s:close_tag_quote(state.quote, res_lines)
|
||||||
let state.para = s:close_tag_para(state.para, res_lines)
|
let state.para = s:close_tag_para(state.para, res_lines)
|
||||||
|
|
||||||
@ -1218,6 +1268,9 @@ function! s:parse_line(line, state) " {{{
|
|||||||
if processed && state.pre[0]
|
if processed && state.pre[0]
|
||||||
let state.pre = s:close_tag_pre(state.pre, lines)
|
let state.pre = s:close_tag_pre(state.pre, lines)
|
||||||
endif
|
endif
|
||||||
|
if processed && state.math[0]
|
||||||
|
let state.math = s:close_tag_math(state.math, lines)
|
||||||
|
endif
|
||||||
if processed && state.para
|
if processed && state.para
|
||||||
let state.para = s:close_tag_para(state.para, lines)
|
let state.para = s:close_tag_para(state.para, lines)
|
||||||
endif
|
endif
|
||||||
@ -1235,6 +1288,7 @@ function! s:parse_line(line, state) " {{{
|
|||||||
call s:close_tag_list(state.lists, res_lines)
|
call s:close_tag_list(state.lists, res_lines)
|
||||||
let state.table = s:close_tag_table(state.table, res_lines)
|
let state.table = s:close_tag_table(state.table, res_lines)
|
||||||
let state.pre = s:close_tag_pre(state.pre, res_lines)
|
let state.pre = s:close_tag_pre(state.pre, res_lines)
|
||||||
|
let state.math = s:close_tag_math(state.math, res_lines)
|
||||||
call add(res_lines, line)
|
call add(res_lines, line)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
@ -1262,6 +1316,9 @@ function! s:parse_line(line, state) " {{{
|
|||||||
if processed && state.pre[0]
|
if processed && state.pre[0]
|
||||||
let state.pre = s:close_tag_pre(state.pre, res_lines)
|
let state.pre = s:close_tag_pre(state.pre, res_lines)
|
||||||
endif
|
endif
|
||||||
|
if processed && state.math[0]
|
||||||
|
let state.math = s:close_tag_math(state.math, res_lines)
|
||||||
|
endif
|
||||||
if processed && len(state.table)
|
if processed && len(state.table)
|
||||||
let state.table = s:close_tag_table(state.table, res_lines)
|
let state.table = s:close_tag_table(state.table, res_lines)
|
||||||
endif
|
endif
|
||||||
@ -1281,128 +1338,174 @@ function! s:parse_line(line, state) " {{{
|
|||||||
|
|
||||||
endfunction " }}}
|
endfunction " }}}
|
||||||
|
|
||||||
function! vimwiki#html#Wiki2HTML(path, wikifile) "{{{
|
function! s:use_custom_wiki2html() "{{{
|
||||||
|
let custom_wiki2html = VimwikiGet('custom_wiki2html')
|
||||||
|
return !empty(custom_wiki2html) && s:file_exists(custom_wiki2html)
|
||||||
|
endfunction " }}}
|
||||||
|
|
||||||
|
function! vimwiki#html#CustomWiki2HTML(path, wikifile, force) "{{{
|
||||||
|
call vimwiki#base#mkdir(a:path)
|
||||||
|
execute '!'.VimwikiGet('custom_wiki2html'). ' '
|
||||||
|
\ a:force. ' '.
|
||||||
|
\ VimwikiGet('syntax'). ' '.
|
||||||
|
\ strpart(VimwikiGet('ext'), 1). ' '.
|
||||||
|
\ a:path. ' '.
|
||||||
|
\ a:wikifile. ' '.
|
||||||
|
\ s:default_CSS_full_name(a:path)
|
||||||
|
endfunction " }}}
|
||||||
|
|
||||||
|
function! vimwiki#html#Wiki2HTML(path_html, wikifile) "{{{
|
||||||
|
|
||||||
let starttime = reltime() " start the clock
|
let starttime = reltime() " start the clock
|
||||||
echo 'Generating HTML ... '
|
|
||||||
if !s:syntax_supported()
|
let done = 0
|
||||||
echomsg 'vimwiki: Only vimwiki_default syntax supported!!!'
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
let wikifile = fnamemodify(a:wikifile, ":p")
|
let wikifile = fnamemodify(a:wikifile, ":p")
|
||||||
let subdir = vimwiki#base#subdir(VimwikiGet('path'), wikifile)
|
|
||||||
|
|
||||||
let path = expand(a:path).subdir
|
let path_html = expand(a:path_html).VimwikiGet('subdir')
|
||||||
let htmlfile = fnamemodify(wikifile, ":t:r").'.html'
|
let htmlfile = fnamemodify(wikifile, ":t:r").'.html'
|
||||||
|
|
||||||
let lsource = readfile(wikifile)
|
if s:use_custom_wiki2html()
|
||||||
let ldest = []
|
let force = 1
|
||||||
|
call vimwiki#html#CustomWiki2HTML(path_html, wikifile, force)
|
||||||
|
let done = 1
|
||||||
|
endif
|
||||||
|
|
||||||
call vimwiki#base#mkdir(path)
|
if s:syntax_supported() && done == 0
|
||||||
|
let lsource = readfile(wikifile)
|
||||||
|
let ldest = []
|
||||||
|
|
||||||
" nohtml placeholder -- to skip html generation.
|
"if g:vimwiki_debug
|
||||||
let nohtml = 0
|
" echo 'Generating HTML ... '
|
||||||
|
"endif
|
||||||
|
|
||||||
" template placeholder
|
call vimwiki#base#mkdir(path_html)
|
||||||
let template_name = ''
|
|
||||||
|
|
||||||
" for table of contents placeholders.
|
" nohtml placeholder -- to skip html generation.
|
||||||
let placeholders = []
|
let nohtml = 0
|
||||||
|
|
||||||
" current state of converter
|
" template placeholder
|
||||||
let state = {}
|
let template_name = ''
|
||||||
let state.para = 0
|
|
||||||
let state.quote = 0
|
|
||||||
let state.pre = [0, 0] " [in_pre, indent_pre]
|
|
||||||
let state.table = []
|
|
||||||
let state.deflist = 0
|
|
||||||
let state.lists = []
|
|
||||||
let state.placeholder = []
|
|
||||||
let state.toc = []
|
|
||||||
let state.toc_id = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0 }
|
|
||||||
|
|
||||||
for line in lsource
|
" for table of contents placeholders.
|
||||||
let oldquote = state.quote
|
let placeholders = []
|
||||||
let [lines, state] = s:parse_line(line, state)
|
|
||||||
|
|
||||||
" Hack: There could be a lot of empty strings before s:process_tag_quote
|
" current state of converter
|
||||||
" find out `quote` is over. So we should delete them all. Think of the way
|
let state = {}
|
||||||
" to refactor it out.
|
let state.para = 0
|
||||||
if oldquote != state.quote
|
let state.quote = 0
|
||||||
call s:remove_blank_lines(ldest)
|
let state.pre = [0, 0] " [in_pre, indent_pre]
|
||||||
|
let state.math = [0, 0] " [in_math, indent_math]
|
||||||
|
let state.table = []
|
||||||
|
let state.deflist = 0
|
||||||
|
let state.lists = []
|
||||||
|
let state.placeholder = []
|
||||||
|
let state.toc = []
|
||||||
|
let state.toc_id = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0 }
|
||||||
|
|
||||||
|
" prepare constants for s:safe_html()
|
||||||
|
let s:lt_pattern = '<'
|
||||||
|
let s:gt_pattern = '>'
|
||||||
|
if g:vimwiki_valid_html_tags != ''
|
||||||
|
let tags = join(split(g:vimwiki_valid_html_tags, '\s*,\s*'), '\|')
|
||||||
|
let s:lt_pattern = '<\%(/\?\%('.tags.'\)\%(\s\{-1}\S\{-}\)\{-}/\?>\)\@!'
|
||||||
|
let s:gt_pattern = '\%(</\?\%('.tags.'\)\%(\s\{-1}\S\{-}\)\{-}/\?\)\@<!>'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if !empty(state.placeholder)
|
for line in lsource
|
||||||
if state.placeholder[0] == 'nohtml'
|
let oldquote = state.quote
|
||||||
let nohtml = 1
|
let [lines, state] = s:parse_line(line, state)
|
||||||
break
|
|
||||||
elseif state.placeholder[0] == 'template'
|
" Hack: There could be a lot of empty strings before s:process_tag_quote
|
||||||
let template_name = state.placeholder[1]
|
" find out `quote` is over. So we should delete them all. Think of the way
|
||||||
else
|
" to refactor it out.
|
||||||
call add(placeholders, [state.placeholder, len(ldest), len(placeholders)])
|
if oldquote != state.quote
|
||||||
|
call s:remove_blank_lines(ldest)
|
||||||
endif
|
endif
|
||||||
let state.placeholder = []
|
|
||||||
|
if !empty(state.placeholder)
|
||||||
|
if state.placeholder[0] == 'nohtml'
|
||||||
|
let nohtml = 1
|
||||||
|
break
|
||||||
|
elseif state.placeholder[0] == 'template'
|
||||||
|
let template_name = state.placeholder[1]
|
||||||
|
else
|
||||||
|
call add(placeholders, [state.placeholder, len(ldest), len(placeholders)])
|
||||||
|
endif
|
||||||
|
let state.placeholder = []
|
||||||
|
endif
|
||||||
|
|
||||||
|
call extend(ldest, lines)
|
||||||
|
endfor
|
||||||
|
|
||||||
|
|
||||||
|
if nohtml
|
||||||
|
echon "\r"."%nohtml placeholder found"
|
||||||
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
let toc = s:get_html_toc(state.toc)
|
||||||
|
call s:process_toc(ldest, placeholders, toc)
|
||||||
|
call s:remove_blank_lines(ldest)
|
||||||
|
|
||||||
|
"" process end of file
|
||||||
|
"" close opened tags if any
|
||||||
|
let lines = []
|
||||||
|
call s:close_tag_quote(state.quote, lines)
|
||||||
|
call s:close_tag_para(state.para, lines)
|
||||||
|
call s:close_tag_pre(state.pre, lines)
|
||||||
|
call s:close_tag_math(state.math, lines)
|
||||||
|
call s:close_tag_list(state.lists, lines)
|
||||||
|
call s:close_tag_def_list(state.deflist, lines)
|
||||||
|
call s:close_tag_table(state.table, lines)
|
||||||
call extend(ldest, lines)
|
call extend(ldest, lines)
|
||||||
endfor
|
|
||||||
|
|
||||||
|
let title = s:process_title(placeholders, fnamemodify(a:wikifile, ":t:r"))
|
||||||
|
|
||||||
if nohtml
|
let html_lines = s:get_html_template(a:wikifile, template_name)
|
||||||
echon "\r"."%nohtml placeholder found"
|
|
||||||
|
" processing template variables (refactor to a function)
|
||||||
|
call map(html_lines, 'substitute(v:val, "%title%", "'. title .'", "g")')
|
||||||
|
call map(html_lines, 'substitute(v:val, "%root_path%", "'.
|
||||||
|
\ s:root_path(VimwikiGet('subdir')) .'", "g")')
|
||||||
|
|
||||||
|
let css_name = expand(VimwikiGet('css_name'))
|
||||||
|
let css_name = substitute(css_name, '\', '/', 'g')
|
||||||
|
call map(html_lines, 'substitute(v:val, "%css%", "'. css_name .'", "g")')
|
||||||
|
|
||||||
|
let enc = &fileencoding
|
||||||
|
if enc == ''
|
||||||
|
let enc = &encoding
|
||||||
|
endif
|
||||||
|
call map(html_lines, 'substitute(v:val, "%encoding%", "'. enc .'", "g")')
|
||||||
|
|
||||||
|
let html_lines = s:html_insert_contents(html_lines, ldest) " %contents%
|
||||||
|
|
||||||
|
"" make html file.
|
||||||
|
call writefile(html_lines, path_html.htmlfile)
|
||||||
|
let done = 1
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
if done == 0
|
||||||
|
echomsg 'vimwiki: conversion to HTML is not supported for this syntax!!!'
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let toc = s:get_html_toc(state.toc)
|
" measure the elapsed time
|
||||||
call s:process_toc(ldest, placeholders, toc)
|
let time1 = vimwiki#u#time(starttime) "XXX
|
||||||
call s:remove_blank_lines(ldest)
|
call VimwikiLog_extend('html',[htmlfile,time1])
|
||||||
|
"if g:vimwiki_debug
|
||||||
|
" echon "\r".htmlfile.' written (time: '.time1.'s)'
|
||||||
|
"endif
|
||||||
|
|
||||||
"" process end of file
|
return path_html.htmlfile
|
||||||
"" close opened tags if any
|
|
||||||
let lines = []
|
|
||||||
call s:close_tag_quote(state.quote, lines)
|
|
||||||
call s:close_tag_para(state.para, lines)
|
|
||||||
call s:close_tag_pre(state.pre, lines)
|
|
||||||
call s:close_tag_list(state.lists, lines)
|
|
||||||
call s:close_tag_def_list(state.deflist, lines)
|
|
||||||
call s:close_tag_table(state.table, lines)
|
|
||||||
call extend(ldest, lines)
|
|
||||||
|
|
||||||
let title = s:process_title(placeholders, fnamemodify(a:wikifile, ":t:r"))
|
|
||||||
|
|
||||||
let html_lines = s:get_html_template(a:wikifile, template_name)
|
|
||||||
|
|
||||||
" processing template variables (refactor to a function)
|
|
||||||
call map(html_lines, 'substitute(v:val, "%title%", "'. title .'", "g")')
|
|
||||||
call map(html_lines, 'substitute(v:val, "%root_path%", "'.
|
|
||||||
\ s:root_path(subdir) .'", "g")')
|
|
||||||
|
|
||||||
let css_name = expand(VimwikiGet('css_name'))
|
|
||||||
let css_name = substitute(css_name, '\', '/', 'g')
|
|
||||||
call map(html_lines, 'substitute(v:val, "%css%", "'. css_name .'", "g")')
|
|
||||||
|
|
||||||
let enc = &fileencoding
|
|
||||||
if enc == ''
|
|
||||||
let enc = &encoding
|
|
||||||
endif
|
|
||||||
call map(html_lines, 'substitute(v:val, "%encoding%", "'. enc .'", "g")')
|
|
||||||
|
|
||||||
let html_lines = s:html_insert_contents(html_lines, ldest) " %contents%
|
|
||||||
|
|
||||||
"" make html file.
|
|
||||||
call writefile(html_lines, path.htmlfile)
|
|
||||||
|
|
||||||
" measure the elapsed time and cut away miliseconds and smaller
|
|
||||||
let elapsedtimestr = matchstr(reltimestr(reltime(starttime)),'\d\+\(\.\d\d\)\=')
|
|
||||||
echon "\r".htmlfile.' written (time: '.elapsedtimestr.'s)'
|
|
||||||
return path.htmlfile
|
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
|
|
||||||
function! vimwiki#html#WikiAll2HTML(path) "{{{
|
function! vimwiki#html#WikiAll2HTML(path_html) "{{{
|
||||||
if !s:syntax_supported()
|
if !s:syntax_supported() && !s:use_custom_wiki2html()
|
||||||
echomsg 'vimwiki: Only vimwiki_default syntax supported!!!'
|
echomsg 'vimwiki: conversion to HTML is not supported for this syntax!!!'
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -1414,28 +1517,63 @@ function! vimwiki#html#WikiAll2HTML(path) "{{{
|
|||||||
exe 'buffer '.cur_buf
|
exe 'buffer '.cur_buf
|
||||||
let &eventignore = save_eventignore
|
let &eventignore = save_eventignore
|
||||||
|
|
||||||
let path = expand(a:path)
|
let path_html = expand(a:path_html)
|
||||||
call vimwiki#base#mkdir(path)
|
call vimwiki#base#mkdir(path_html)
|
||||||
|
|
||||||
echomsg 'Deleting non-wiki html files...'
|
echomsg 'Deleting non-wiki html files...'
|
||||||
call s:delete_html_files(path)
|
call s:delete_html_files(path_html)
|
||||||
|
|
||||||
echomsg 'Converting wiki to html files...'
|
echomsg 'Converting wiki to html files...'
|
||||||
let setting_more = &more
|
let setting_more = &more
|
||||||
setlocal nomore
|
setlocal nomore
|
||||||
|
|
||||||
|
" temporarily adjust current_subdir global state variable
|
||||||
|
let current_subdir = VimwikiGet('subdir')
|
||||||
|
let current_invsubdir = VimwikiGet('invsubdir')
|
||||||
|
|
||||||
let wikifiles = split(glob(VimwikiGet('path').'**/*'.VimwikiGet('ext')), '\n')
|
let wikifiles = split(glob(VimwikiGet('path').'**/*'.VimwikiGet('ext')), '\n')
|
||||||
for wikifile in wikifiles
|
for wikifile in wikifiles
|
||||||
|
let wikifile = fnamemodify(wikifile, ":p")
|
||||||
|
|
||||||
|
" temporarily adjust 'subdir' and 'invsubdir' state variables
|
||||||
|
let subdir = vimwiki#base#subdir(VimwikiGet('path'), wikifile)
|
||||||
|
call VimwikiSet('subdir', subdir)
|
||||||
|
call VimwikiSet('invsubdir', vimwiki#base#invsubdir(subdir))
|
||||||
|
|
||||||
if !s:is_html_uptodate(wikifile)
|
if !s:is_html_uptodate(wikifile)
|
||||||
echomsg 'Processing '.wikifile
|
echomsg 'Processing '.wikifile
|
||||||
call vimwiki#html#Wiki2HTML(path, wikifile)
|
|
||||||
|
call vimwiki#html#Wiki2HTML(path_html, wikifile)
|
||||||
else
|
else
|
||||||
echomsg 'Skipping '.wikifile
|
echomsg 'Skipping '.wikifile
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
call s:create_default_CSS(path)
|
" reset 'subdir' state variable
|
||||||
|
call VimwikiSet('subdir', current_subdir)
|
||||||
|
call VimwikiSet('invsubdir', current_invsubdir)
|
||||||
|
|
||||||
|
call s:create_default_CSS(path_html)
|
||||||
echomsg 'Done!'
|
echomsg 'Done!'
|
||||||
|
|
||||||
let &more = setting_more
|
let &more = setting_more
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:file_exists(fname) "{{{
|
||||||
|
return !empty(getftype(a:fname))
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
" uses VimwikiGet('path')
|
||||||
|
function! vimwiki#html#get_wikifile_url(wikifile) "{{{
|
||||||
|
return VimwikiGet('path_html').
|
||||||
|
\ vimwiki#base#subdir(VimwikiGet('path'), a:wikifile).
|
||||||
|
\ fnamemodify(a:wikifile, ":t:r").'.html'
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#html#PasteUrl(wikifile) "{{{
|
||||||
|
execute 'r !echo file://'.vimwiki#html#get_wikifile_url(a:wikifile)
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#html#CatUrl(wikifile) "{{{
|
||||||
|
execute '!echo file://'.vimwiki#html#get_wikifile_url(a:wikifile)
|
||||||
|
endfunction "}}}
|
||||||
"}}}
|
"}}}
|
||||||
|
@ -15,24 +15,36 @@ let s:rx_li_box = '\[.\?\]'
|
|||||||
|
|
||||||
" Script functions {{{
|
" Script functions {{{
|
||||||
|
|
||||||
|
" Get unicode string symbol at index
|
||||||
|
function! s:str_idx(str, idx) "{{{
|
||||||
|
" Unfortunatly vimscript cannot get symbol at index in unicode string such as
|
||||||
|
" '✗○◐●✓'
|
||||||
|
return matchstr(a:str, '\%'.a:idx.'v.')
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
" Get checkbox regexp
|
" Get checkbox regexp
|
||||||
function! s:rx_li_symbol(rate) "{{{
|
function! s:rx_li_symbol(rate) "{{{
|
||||||
let result = ''
|
let result = ''
|
||||||
if a:rate == 100
|
if a:rate == 100
|
||||||
let result = g:vimwiki_listsyms[4]
|
let result = s:str_idx(g:vimwiki_listsyms, 5)
|
||||||
elseif a:rate == 0
|
elseif a:rate == 0
|
||||||
let result = g:vimwiki_listsyms[0]
|
let result = s:str_idx(g:vimwiki_listsyms, 1)
|
||||||
elseif a:rate >= 67
|
elseif a:rate >= 67
|
||||||
let result = g:vimwiki_listsyms[3]
|
let result = s:str_idx(g:vimwiki_listsyms, 4)
|
||||||
elseif a:rate >= 34
|
elseif a:rate >= 34
|
||||||
let result = g:vimwiki_listsyms[2]
|
let result = s:str_idx(g:vimwiki_listsyms, 3)
|
||||||
else
|
else
|
||||||
let result = g:vimwiki_listsyms[1]
|
let result = s:str_idx(g:vimwiki_listsyms, 2)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return '\['.result.'\]'
|
return '\['.result.'\]'
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
|
" Get blank checkbox
|
||||||
|
function! s:blank_checkbox() "{{{
|
||||||
|
return '['.s:str_idx(g:vimwiki_listsyms, 1).'] '
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
" Get regexp of the list item.
|
" Get regexp of the list item.
|
||||||
function! s:rx_list_item() "{{{
|
function! s:rx_list_item() "{{{
|
||||||
return '\('.g:vimwiki_rxListBullet.'\|'.g:vimwiki_rxListNumber.'\)'
|
return '\('.g:vimwiki_rxListBullet.'\|'.g:vimwiki_rxListNumber.'\)'
|
||||||
@ -46,7 +58,7 @@ endfunction "}}}
|
|||||||
" Get level of the list item.
|
" Get level of the list item.
|
||||||
function! s:get_level(lnum) "{{{
|
function! s:get_level(lnum) "{{{
|
||||||
if VimwikiGet('syntax') == 'media'
|
if VimwikiGet('syntax') == 'media'
|
||||||
let level = vimwiki#base#count_first_sym(getline(a:lnum))
|
let level = vimwiki#u#count_first_sym(getline(a:lnum))
|
||||||
else
|
else
|
||||||
let level = indent(a:lnum)
|
let level = indent(a:lnum)
|
||||||
endif
|
endif
|
||||||
@ -222,7 +234,7 @@ function! s:create_cb_list_item(lnum) "{{{
|
|||||||
let m = matchstr(line, s:rx_list_item())
|
let m = matchstr(line, s:rx_list_item())
|
||||||
if m != ''
|
if m != ''
|
||||||
let li_content = substitute(strpart(line, len(m)), '^\s*', '', '')
|
let li_content = substitute(strpart(line, len(m)), '^\s*', '', '')
|
||||||
let line = substitute(m, '\s*$', ' ', '').'[ ] '.li_content
|
let line = substitute(m, '\s*$', ' ', '').s:blank_checkbox().li_content
|
||||||
call setline(a:lnum, line)
|
call setline(a:lnum, line)
|
||||||
endif
|
endif
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
@ -320,7 +332,7 @@ function! vimwiki#lst#kbd_cr() "{{{
|
|||||||
" This function is heavily relies on proper 'set comments' option.
|
" This function is heavily relies on proper 'set comments' option.
|
||||||
let cr = "\<CR>"
|
let cr = "\<CR>"
|
||||||
if getline('.') =~ s:rx_cb_list_item()
|
if getline('.') =~ s:rx_cb_list_item()
|
||||||
let cr .= '[ ] '
|
let cr .= s:blank_checkbox()
|
||||||
endif
|
endif
|
||||||
return cr
|
return cr
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
@ -341,11 +353,10 @@ function! vimwiki#lst#kbd_oO(cmd) "{{{
|
|||||||
let lnum = line('.')
|
let lnum = line('.')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" let line = substitute(m, '\s*$', ' ', '').'[ ] '.li_content
|
|
||||||
let m = matchstr(line, s:rx_list_item())
|
let m = matchstr(line, s:rx_list_item())
|
||||||
let res = ''
|
let res = ''
|
||||||
if line =~ s:rx_cb_list_item()
|
if line =~ s:rx_cb_list_item()
|
||||||
let res = substitute(m, '\s*$', ' ', '').'[ ] '
|
let res = substitute(m, '\s*$', ' ', '').s:blank_checkbox()
|
||||||
elseif line =~ s:rx_list_item()
|
elseif line =~ s:rx_list_item()
|
||||||
let res = substitute(m, '\s*$', ' ', '')
|
let res = substitute(m, '\s*$', ' ', '')
|
||||||
elseif &autoindent || &smartindent
|
elseif &autoindent || &smartindent
|
||||||
@ -367,3 +378,178 @@ function! vimwiki#lst#kbd_oO(cmd) "{{{
|
|||||||
|
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#lst#default_symbol() "{{{
|
||||||
|
" TODO: initialize default symbol from syntax/vimwiki_xxx.vim
|
||||||
|
if VimwikiGet('syntax') == 'default'
|
||||||
|
return '-'
|
||||||
|
else
|
||||||
|
return '*'
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function vimwiki#lst#get_list_margin() "{{{
|
||||||
|
if VimwikiGet('list_margin') < 0
|
||||||
|
return &sw
|
||||||
|
else
|
||||||
|
return VimwikiGet('list_margin')
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function s:get_list_sw() "{{{
|
||||||
|
if VimwikiGet('syntax') == 'media'
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
return &sw
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function s:get_list_nesting_level(lnum) "{{{
|
||||||
|
if VimwikiGet('syntax') == 'media'
|
||||||
|
if getline(a:lnum) !~ s:rx_list_item()
|
||||||
|
let level = 0
|
||||||
|
else
|
||||||
|
let level = vimwiki#u#count_first_sym(getline(a:lnum)) - 1
|
||||||
|
let level = level < 0 ? 0 : level
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let level = indent(a:lnum)
|
||||||
|
endif
|
||||||
|
return level
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function s:get_list_indent(lnum) "{{{
|
||||||
|
if VimwikiGet('syntax') == 'media'
|
||||||
|
return indent(a:lnum)
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:compose_list_item(n_indent, n_nesting, sym_nest, sym_bullet, li_content, ...) "{{{
|
||||||
|
if a:0
|
||||||
|
let sep = a:1
|
||||||
|
else
|
||||||
|
let sep = ''
|
||||||
|
endif
|
||||||
|
let li_indent = repeat(' ', max([0,a:n_indent])).sep
|
||||||
|
let li_nesting = repeat(a:sym_nest, max([0,a:n_nesting])).sep
|
||||||
|
if len(a:sym_bullet) > 0
|
||||||
|
let li_bullet = a:sym_bullet.' '.sep
|
||||||
|
else
|
||||||
|
let li_bullet = ''.sep
|
||||||
|
endif
|
||||||
|
return li_indent.li_nesting.li_bullet.a:li_content
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function s:compose_cb_bullet(prev_cb_bullet, sym) "{{{
|
||||||
|
return a:sym.matchstr(a:prev_cb_bullet, '\S*\zs\s\+.*')
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#lst#change_level(...) "{{{
|
||||||
|
let default_sym = vimwiki#lst#default_symbol()
|
||||||
|
let cmd = '>>'
|
||||||
|
let sym = default_sym
|
||||||
|
|
||||||
|
" parse argument
|
||||||
|
if a:0
|
||||||
|
if a:1 != '<<' && a:1 != '>>'
|
||||||
|
let cmd = '--'
|
||||||
|
let sym = a:1
|
||||||
|
else
|
||||||
|
let cmd = a:1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
" is symbol valid
|
||||||
|
if sym.' ' !~ s:rx_cb_list_item() && sym.' ' !~ s:rx_list_item()
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
" parsing setup
|
||||||
|
let lnum = line('.')
|
||||||
|
let line = getline('.')
|
||||||
|
|
||||||
|
let list_margin = vimwiki#lst#get_list_margin()
|
||||||
|
let list_sw = s:get_list_sw()
|
||||||
|
let n_nesting = s:get_list_nesting_level(lnum)
|
||||||
|
let n_indent = s:get_list_indent(lnum)
|
||||||
|
|
||||||
|
" remove indent and nesting
|
||||||
|
let li_bullet_and_content = strpart(line, n_nesting + n_indent)
|
||||||
|
|
||||||
|
" list bullet and checkbox
|
||||||
|
let cb_bullet = matchstr(li_bullet_and_content, s:rx_list_item()).
|
||||||
|
\ matchstr(li_bullet_and_content, s:rx_cb_list_item())
|
||||||
|
|
||||||
|
" XXX: it could be not unicode proof --> if checkboxes are set up with unicode syms
|
||||||
|
" content
|
||||||
|
let li_content = strpart(li_bullet_and_content, len(cb_bullet))
|
||||||
|
|
||||||
|
" trim
|
||||||
|
let cb_bullet = vimwiki#u#trim(cb_bullet)
|
||||||
|
let li_content = vimwiki#u#trim(li_content)
|
||||||
|
|
||||||
|
" nesting symbol
|
||||||
|
if VimwikiGet('syntax') == 'media'
|
||||||
|
if len(cb_bullet) > 0
|
||||||
|
let sym_nest = cb_bullet[0]
|
||||||
|
else
|
||||||
|
let sym_nest = sym
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let sym_nest = ' '
|
||||||
|
endif
|
||||||
|
|
||||||
|
if g:vimwiki_debug
|
||||||
|
echomsg "PARSE: Sw [".list_sw."]"
|
||||||
|
echomsg s:compose_list_item(n_indent, n_nesting, sym_nest, cb_bullet, li_content, '|')
|
||||||
|
endif
|
||||||
|
|
||||||
|
" change level
|
||||||
|
if cmd == '--'
|
||||||
|
let cb_bullet = s:compose_cb_bullet(cb_bullet, sym)
|
||||||
|
if VimwikiGet('syntax') == 'media'
|
||||||
|
let sym_nest = sym
|
||||||
|
endif
|
||||||
|
elseif cmd == '>>'
|
||||||
|
if cb_bullet == ''
|
||||||
|
let cb_bullet = sym
|
||||||
|
else
|
||||||
|
let n_nesting = n_nesting + list_sw
|
||||||
|
endif
|
||||||
|
elseif cmd == '<<'
|
||||||
|
let n_nesting = n_nesting - list_sw
|
||||||
|
if VimwikiGet('syntax') == 'media'
|
||||||
|
if n_nesting < 0
|
||||||
|
let cb_bullet = ''
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
if n_nesting < list_margin
|
||||||
|
let cb_bullet = ''
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
let n_nesting = max([0, n_nesting])
|
||||||
|
|
||||||
|
if g:vimwiki_debug
|
||||||
|
echomsg "SHIFT:"
|
||||||
|
echomsg s:compose_list_item(n_indent, n_nesting, sym_nest, cb_bullet, li_content, '|')
|
||||||
|
endif
|
||||||
|
|
||||||
|
" XXX: this is the code that adds the initial indent
|
||||||
|
let add_nesting = VimwikiGet('syntax') != 'media'
|
||||||
|
if n_indent + n_nesting*(add_nesting) < list_margin
|
||||||
|
let n_indent = list_margin - n_nesting*(add_nesting)
|
||||||
|
endif
|
||||||
|
|
||||||
|
if g:vimwiki_debug
|
||||||
|
echomsg "INDENT:"
|
||||||
|
echomsg s:compose_list_item(n_indent, n_nesting, sym_nest, cb_bullet, li_content, '|')
|
||||||
|
endif
|
||||||
|
|
||||||
|
let line = s:compose_list_item(n_indent, n_nesting, sym_nest, cb_bullet, li_content)
|
||||||
|
|
||||||
|
" replace
|
||||||
|
call setline(lnum, line)
|
||||||
|
call cursor(lnum, match(line, '\S') + 1)
|
||||||
|
endfunction "}}}
|
||||||
|
111
autoload/vimwiki/markdown_base.vim
Normal file
111
autoload/vimwiki/markdown_base.vim
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79
|
||||||
|
" Vimwiki autoload plugin file
|
||||||
|
" Desc: Link functions for markdown syntax
|
||||||
|
" Author: Maxim Kim <habamax@gmail.com>
|
||||||
|
" Home: http://code.google.com/p/vimwiki/
|
||||||
|
|
||||||
|
|
||||||
|
function! s:normalize_link_syntax_n() " {{{
|
||||||
|
let lnum = line('.')
|
||||||
|
|
||||||
|
" try WikiIncl
|
||||||
|
let lnk = vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWikiIncl)
|
||||||
|
if !empty(lnk)
|
||||||
|
" NO-OP !!
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echomsg "WikiIncl: ".lnk." Sub: ".lnk
|
||||||
|
endif
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
" try WikiLink0: replace with WikiLink1
|
||||||
|
let lnk = vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWikiLink0)
|
||||||
|
if !empty(lnk)
|
||||||
|
let sub = vimwiki#base#normalize_link_helper(lnk,
|
||||||
|
\ g:vimwiki_rxWikiLinkMatchUrl, g:vimwiki_rxWikiLinkMatchDescr,
|
||||||
|
\ g:vimwiki_WikiLink1Template2)
|
||||||
|
call vimwiki#base#replacestr_at_cursor(g:vimwiki_rxWikiLink0, sub)
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echomsg "WikiLink: ".lnk." Sub: ".sub
|
||||||
|
endif
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
" try WikiLink1: replace with WikiLink0
|
||||||
|
let lnk = vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWikiLink1)
|
||||||
|
if !empty(lnk)
|
||||||
|
let sub = vimwiki#base#normalize_link_helper(lnk,
|
||||||
|
\ g:vimwiki_rxWikiLinkMatchUrl, g:vimwiki_rxWikiLinkMatchDescr,
|
||||||
|
\ g:vimwiki_WikiLinkTemplate2)
|
||||||
|
call vimwiki#base#replacestr_at_cursor(g:vimwiki_rxWikiLink1, sub)
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echomsg "WikiLink: ".lnk." Sub: ".sub
|
||||||
|
endif
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
" try Weblink
|
||||||
|
let lnk = vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWeblink)
|
||||||
|
if !empty(lnk)
|
||||||
|
let sub = vimwiki#base#normalize_link_helper(lnk,
|
||||||
|
\ g:vimwiki_rxWeblinkMatchUrl, g:vimwiki_rxWeblinkMatchDescr,
|
||||||
|
\ g:vimwiki_Weblink1Template)
|
||||||
|
call vimwiki#base#replacestr_at_cursor(g:vimwiki_rxWeblink, sub)
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echomsg "WebLink: ".lnk." Sub: ".sub
|
||||||
|
endif
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
" try Word (any characters except separators)
|
||||||
|
" rxWord is less permissive than rxWikiLinkUrl which is used in
|
||||||
|
" normalize_link_syntax_v
|
||||||
|
let lnk = vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWord)
|
||||||
|
if !empty(lnk)
|
||||||
|
let sub = vimwiki#base#normalize_link_helper(lnk,
|
||||||
|
\ g:vimwiki_rxWord, '',
|
||||||
|
\ g:vimwiki_WikiLinkTemplate1)
|
||||||
|
call vimwiki#base#replacestr_at_cursor('\V'.lnk, sub)
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echomsg "Word: ".lnk." Sub: ".sub
|
||||||
|
endif
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
endfunction " }}}
|
||||||
|
|
||||||
|
function! s:normalize_link_syntax_v() " {{{
|
||||||
|
let lnum = line('.')
|
||||||
|
let sel_save = &selection
|
||||||
|
let &selection = "old"
|
||||||
|
let rv = @"
|
||||||
|
let rt = getregtype('"')
|
||||||
|
let done = 0
|
||||||
|
|
||||||
|
try
|
||||||
|
norm! gvy
|
||||||
|
let visual_selection = @"
|
||||||
|
let visual_selection = substitute(g:vimwiki_WikiLinkTemplate1, '__LinkUrl__', '\='."'".visual_selection."'", '')
|
||||||
|
|
||||||
|
call setreg('"', visual_selection, 'v')
|
||||||
|
|
||||||
|
" paste result
|
||||||
|
norm! `>pgvd
|
||||||
|
|
||||||
|
finally
|
||||||
|
call setreg('"', rv, rt)
|
||||||
|
let &selection = sel_save
|
||||||
|
endtry
|
||||||
|
|
||||||
|
endfunction " }}}
|
||||||
|
|
||||||
|
" normalize_link
|
||||||
|
function! vimwiki#markdown_base#normalize_link(is_visual_mode) "{{{
|
||||||
|
if !a:is_visual_mode
|
||||||
|
call s:normalize_link_syntax_n()
|
||||||
|
elseif visualmode() ==# 'v' && line("'<") == line("'>")
|
||||||
|
" action undefined for 'line-wise' or 'multi-line' visual mode selections
|
||||||
|
call s:normalize_link_syntax_v()
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
@ -24,16 +24,56 @@ del {text-decoration: line-through; color: #777777;}
|
|||||||
.justright {text-align: right;}
|
.justright {text-align: right;}
|
||||||
.justcenter {text-align: center;}
|
.justcenter {text-align: center;}
|
||||||
.center {margin-left: auto; margin-right: auto;}
|
.center {margin-left: auto; margin-right: auto;}
|
||||||
|
|
||||||
/* classes for items of todo lists */
|
/* classes for items of todo lists */
|
||||||
.done0:before {content: "\2592\2592\2592\2592"; color: SkyBlue;}
|
.done0 {
|
||||||
.done1:before {content: "\2588\2592\2592\2592"; color: SkyBlue;}
|
/* list-style: none; */
|
||||||
.done2:before {content: "\2588\2588\2592\2592"; color: SkyBlue;}
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAA7SURBVCiR7dMxEgAgCANBI3yVRzF5KxNbW6wsuH7LQ2YKQK1mkswBVERYF5Os3UV3gwd/jF2SkXy66gAZkxS6BniubAAAAABJRU5ErkJggg==);
|
||||||
.done3:before {content: "\2588\2588\2588\2592"; color: SkyBlue;}
|
background-repeat: no-repeat;
|
||||||
.done4:before {content: "\2588\2588\2588\2588"; color: SkyBlue;}
|
background-position: 0 .2em;
|
||||||
/* comment the next four or five lines out *
|
margin-left: -2em;
|
||||||
* if you do not want color-coded todo lists */
|
padding-left: 1.5em;
|
||||||
.done0 {color: #c00000;}
|
}
|
||||||
.done1 {color: #c08000;}
|
.done1 {
|
||||||
.done2 {color: #80a000;}
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABtSURBVCiR1ZO7DYAwDER9BDmTeZQMFXmUbGYpOjrEryA0wOvO8itOslFrJYAug5BMM4BeSkmjsrv3aVTa8p48Xw1JSkSsWVUFwD05IqS1tmYzk5zzae9jnVVVzGyXb8sALjse+euRkEzu/uirFomVIdDGOLjuAAAAAElFTkSuQmCC);
|
||||||
.done3 {color: #00c000;}
|
background-repeat: no-repeat;
|
||||||
.done4 {color: #7f7f7f; text-decoration: line-through;}
|
background-position: 0 .15em;
|
||||||
|
margin-left: -2em;
|
||||||
|
padding-left: 1.5em;
|
||||||
|
}
|
||||||
|
.done2 {
|
||||||
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAB1SURBVCiRzdO5DcAgDAVQGxjAYgTvxlDIu1FTIRYAp8qlFISkSH7l5kk+ZIwxKiI2mIyqWoeILYRgZ7GINDOLjnmF3VqklKCUMgTee2DmM661Qs55iI3Zm/1u5h9sm4ig9z4ERHTFzLyd4G4+nFlVrYg8+qoF/c0kdpeMsmcAAAAASUVORK5CYII=);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: 0 .15em;
|
||||||
|
margin-left: -2em;
|
||||||
|
padding-left: 1.5em;
|
||||||
|
}
|
||||||
|
.done3 {
|
||||||
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABoSURBVCiR7dOxDcAgDATA/0DtUdiKoZC3YhLkHjkVKF3idJHiztKfvrHZWnOSE8Fx95RJzlprimJVnXktvXeY2S0SEZRSAAAbmxnGGKH2I5T+8VfxPhIReQSuuY3XyYWa3T2p6quvOgGrvSFGlewuUAAAAABJRU5ErkJggg==);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: 0 .15em;
|
||||||
|
margin-left: -2em;
|
||||||
|
padding-left: 1.5em;
|
||||||
|
}
|
||||||
|
.done4 {
|
||||||
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAQCAYAAAAbBi9cAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAzgAAAM4BlP6ToAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIISURBVDiNnZQ9SFtRFMd/773kpTaGJoQk1im4VDpWQcTNODhkFBcVTCNCF0NWyeDiIIiCm82QoIMIUkHUxcFBg1SEQoZszSat6cdTn1qNue92CMbEr9Sey+XC/Z/zu+f8h6ukUil3sVg0+M+4cFxk42/jH2wAqqqKSCSiPQdwcHHAnDHH9s/tN1h8V28ETdP+eU8fT9Nt62ancYdIPvJNtsu87bmjrJlrTDVM4RROJs1JrHPrD4Bar7A6cpc54iKOaTdJXCUI2UMVrQZ0Js7YPN18ECKkYNQcJe/OE/4dZsw7VqNXQMvHy3QZXQypQ6ycrtwDjf8aJ+PNEDSCzLpn7+m2pD8ZKHlKarYhy6XjEoCYGcN95qansQeA3fNdki+SaJZGTMQIOoL3W/Z89rxv+tokubNajlvk/vm+LFpF2XnUKZHI0I+QrI7Dw0OZTqdzUkpsM7mZTyfy5OPGyw1tK7AFSvmB/Ks8w8YwbUYbe6/3QEKv0vugfxWPnMLJun+d/kI/WLdizpNjMbAIKrhMF4OuwadBALqqs+RfInwUvuNi+fBd+wjogfogAFVRmffO02q01mZZ0HHdgXIzdz0QQLPezIQygX6llxNKKgOFARYCC49CqhoHIUTlss/Vx2phlYwjw8j1CAlfAiwQiJpiy7o1VHnsG5FISkoJu7Q/2YmmaV+i0ei7v38L2CBguSi5AAAAAElFTkSuQmCC);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: 0 .15em;
|
||||||
|
margin-left: -2em;
|
||||||
|
padding-left: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
font-family: Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace;
|
||||||
|
-webkit-border-radius: 1px;
|
||||||
|
-moz-border-radius: 1px;
|
||||||
|
border-radius: 1px;
|
||||||
|
-moz-background-clip: padding;
|
||||||
|
-webkit-background-clip: padding-box;
|
||||||
|
background-clip: padding-box;
|
||||||
|
padding: 0px 3px;
|
||||||
|
display: inline-block;
|
||||||
|
color: #52595d;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
" Vimwiki autoload plugin file
|
" Vimwiki autoload plugin file
|
||||||
" Desc: Tables
|
" Desc: Tables
|
||||||
" | Easily | manageable | text | tables | ! |
|
" | Easily | manageable | text | tables | ! |
|
||||||
" |--------+------------+-------+--------+---------|
|
" |--------|------------|-------|--------|---------|
|
||||||
" | Have | fun! | Drink | tea | Period. |
|
" | Have | fun! | Drink | tea | Period. |
|
||||||
"
|
"
|
||||||
" Author: Maxim Kim <habamax@gmail.com>
|
" Author: Maxim Kim <habamax@gmail.com>
|
||||||
@ -16,6 +16,8 @@ let g:loaded_vimwiki_tbl_auto = 1
|
|||||||
"}}}
|
"}}}
|
||||||
|
|
||||||
let s:textwidth = &tw
|
let s:textwidth = &tw
|
||||||
|
let s:rxSep = g:vimwiki_rxTableSep
|
||||||
|
|
||||||
|
|
||||||
" Misc functions {{{
|
" Misc functions {{{
|
||||||
function! s:wide_len(str) "{{{
|
function! s:wide_len(str) "{{{
|
||||||
@ -40,21 +42,37 @@ function! s:wide_len(str) "{{{
|
|||||||
return ret
|
return ret
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:cell_splitter() "{{{
|
||||||
|
return '\s*'.s:rxSep.'\s*'
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:sep_splitter() "{{{
|
||||||
|
return '-'.s:rxSep.'-'
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:is_table(line) "{{{
|
function! s:is_table(line) "{{{
|
||||||
return a:line =~ '^\s*\%(|[^|]\+\)\+|\s*$' || s:is_separator(a:line)
|
return s:is_separator(a:line) || (a:line !~ s:rxSep.s:rxSep && a:line =~ '^\s*'.s:rxSep.'.\+'.s:rxSep.'\s*$')
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:is_separator(line) "{{{
|
function! s:is_separator(line) "{{{
|
||||||
return a:line =~ '^\s*[|+]\s*--[-|+]\+'
|
return a:line =~ '^\s*'.s:rxSep.'\(--\+'.s:rxSep.'\)\+\s*$'
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:is_separator_tail(line) "{{{
|
||||||
|
return a:line =~ '^\{-1}\%(\s*\|-*\)\%('.s:rxSep.'-\+\)\+'.s:rxSep.'\s*$'
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:is_last_column(lnum, cnum) "{{{
|
function! s:is_last_column(lnum, cnum) "{{{
|
||||||
return strpart(getline(a:lnum), a:cnum - 1) =~ '^[^|]*|\s*$'
|
let line = strpart(getline(a:lnum), a:cnum - 1)
|
||||||
|
"echomsg "DEBUG is_last_column> ".(line =~ s:rxSep.'\s*$' && line !~ s:rxSep.'.*'.s:rxSep.'\s*$')
|
||||||
|
return line =~ s:rxSep.'\s*$' && line !~ s:rxSep.'.*'.s:rxSep.'\s*$'
|
||||||
|
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:is_first_column(lnum, cnum) "{{{
|
function! s:is_first_column(lnum, cnum) "{{{
|
||||||
let line = strpart(getline(a:lnum), 0, a:cnum - 1)
|
let line = strpart(getline(a:lnum), 0, a:cnum - 1)
|
||||||
return line =~ '^\s*|[^|]*$' || line =~ '^\s*$'
|
"echomsg "DEBUG is_first_column> ".(line =~ '^\s*'.s:rxSep && line !~ '^\s*'.s:rxSep.'.*'.s:rxSep)
|
||||||
|
return line =~ '^\s*$' || (line =~ '^\s*'.s:rxSep && line !~ '^\s*'.s:rxSep.'.*'.s:rxSep)
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:count_separators_up(lnum) "{{{
|
function! s:count_separators_up(lnum) "{{{
|
||||||
@ -82,11 +100,10 @@ function! s:count_separators_down(lnum) "{{{
|
|||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:create_empty_row(cols) "{{{
|
function! s:create_empty_row(cols) "{{{
|
||||||
let first_cell = "| |"
|
let row = s:rxSep
|
||||||
let cell = " |"
|
let cell = " ".s:rxSep
|
||||||
let row = first_cell
|
|
||||||
|
|
||||||
for c in range(a:cols - 1)
|
for c in range(a:cols)
|
||||||
let row .= cell
|
let row .= cell
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
@ -94,36 +111,71 @@ function! s:create_empty_row(cols) "{{{
|
|||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:create_row_sep(cols) "{{{
|
function! s:create_row_sep(cols) "{{{
|
||||||
let first_cell = "|---+"
|
let row = s:rxSep
|
||||||
let cell = "---+"
|
let cell = "---".s:rxSep
|
||||||
let last_cell = "---|"
|
|
||||||
|
|
||||||
if a:cols < 2
|
for c in range(a:cols)
|
||||||
return "|---|"
|
|
||||||
endif
|
|
||||||
|
|
||||||
let row = first_cell
|
|
||||||
|
|
||||||
for c in range(a:cols - 2)
|
|
||||||
let row .= cell
|
let row .= cell
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
let row .= last_cell
|
|
||||||
|
|
||||||
return row
|
return row
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:get_values(line) "{{{
|
function! vimwiki#tbl#get_cells(line) "{{{
|
||||||
return split(a:line, '\s*|\s*', 1)[1:-2]
|
let result = []
|
||||||
|
let cell = ''
|
||||||
|
let quote = ''
|
||||||
|
let state = 'NONE'
|
||||||
|
|
||||||
|
" 'Simple' FSM
|
||||||
|
for idx in range(strlen(a:line))
|
||||||
|
" The only way I know Vim can do Unicode...
|
||||||
|
let ch = a:line[idx]
|
||||||
|
if state == 'NONE'
|
||||||
|
if ch == '|'
|
||||||
|
let state = 'CELL'
|
||||||
|
endif
|
||||||
|
elseif state == 'CELL'
|
||||||
|
if ch == '[' || ch == '{'
|
||||||
|
let state = 'BEFORE_QUOTE_START'
|
||||||
|
let quote = ch
|
||||||
|
elseif ch == '|'
|
||||||
|
call add(result, vimwiki#u#trim(cell))
|
||||||
|
let cell = ""
|
||||||
|
else
|
||||||
|
let cell .= ch
|
||||||
|
endif
|
||||||
|
elseif state == 'BEFORE_QUOTE_START'
|
||||||
|
if ch == '[' || ch == '{'
|
||||||
|
let state = 'QUOTE'
|
||||||
|
let quote .= ch
|
||||||
|
else
|
||||||
|
let state = 'CELL'
|
||||||
|
let cell .= quote.ch
|
||||||
|
let quote = ''
|
||||||
|
endif
|
||||||
|
elseif state == 'QUOTE'
|
||||||
|
if ch == ']' || ch == '}'
|
||||||
|
let state = 'BEFORE_QUOTE_END'
|
||||||
|
endif
|
||||||
|
let quote .= ch
|
||||||
|
elseif state == 'BEFORE_QUOTE_END'
|
||||||
|
if ch == ']' || ch == '}'
|
||||||
|
let state = 'CELL'
|
||||||
|
endif
|
||||||
|
let cell .= quote.ch
|
||||||
|
let quote = ''
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
if cell.quote != ''
|
||||||
|
call add(result, vimwiki#u#trim(cell.quote, '|'))
|
||||||
|
endif
|
||||||
|
return result
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:col_count(lnum) "{{{
|
function! s:col_count(lnum) "{{{
|
||||||
let line = getline(a:lnum)
|
return len(vimwiki#tbl#get_cells(getline(a:lnum)))
|
||||||
if !s:is_separator(line)
|
|
||||||
return len(split(line, '\s*|\s*', 1)[1:-2])
|
|
||||||
else
|
|
||||||
return len(split(line, '-+-', 1))
|
|
||||||
endif
|
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:get_indent(lnum) "{{{
|
function! s:get_indent(lnum) "{{{
|
||||||
@ -155,7 +207,7 @@ function! s:get_rows(lnum) "{{{
|
|||||||
let lower_rows = []
|
let lower_rows = []
|
||||||
|
|
||||||
let lnum = a:lnum - 1
|
let lnum = a:lnum - 1
|
||||||
while lnum > 1
|
while lnum >= 1
|
||||||
let line = getline(lnum)
|
let line = getline(lnum)
|
||||||
if s:is_table(line)
|
if s:is_table(line)
|
||||||
call add(upper_rows, [lnum, line])
|
call add(upper_rows, [lnum, line])
|
||||||
@ -186,7 +238,7 @@ function! s:get_cell_max_lens(lnum) "{{{
|
|||||||
if s:is_separator(row)
|
if s:is_separator(row)
|
||||||
continue
|
continue
|
||||||
endif
|
endif
|
||||||
let cells = s:get_values(row)
|
let cells = vimwiki#tbl#get_cells(row)
|
||||||
for idx in range(len(cells))
|
for idx in range(len(cells))
|
||||||
let value = cells[idx]
|
let value = cells[idx]
|
||||||
if has_key(max_lens, idx)
|
if has_key(max_lens, idx)
|
||||||
@ -219,17 +271,13 @@ function! s:cur_column() "{{{
|
|||||||
if !s:is_table(line)
|
if !s:is_table(line)
|
||||||
return -1
|
return -1
|
||||||
endif
|
endif
|
||||||
if s:is_separator(line)
|
" TODO: do we need conditional: if s:is_separator(line)
|
||||||
let sep = '[+|]'
|
|
||||||
else
|
|
||||||
let sep = '|'
|
|
||||||
endif
|
|
||||||
|
|
||||||
let curs_pos = col('.')
|
let curs_pos = col('.')
|
||||||
let mpos = match(line, '|', 0)
|
let mpos = match(line, s:rxSep, 0)
|
||||||
let col = -1
|
let col = -1
|
||||||
while mpos < curs_pos && mpos != -1
|
while mpos < curs_pos && mpos != -1
|
||||||
let mpos = match(line, sep, mpos+1)
|
let mpos = match(line, s:rxSep, mpos+1)
|
||||||
if mpos != -1
|
if mpos != -1
|
||||||
let col += 1
|
let col += 1
|
||||||
endif
|
endif
|
||||||
@ -253,8 +301,8 @@ function! s:fmt_cell(cell, max_len) "{{{
|
|||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:fmt_row(line, max_lens, col1, col2) "{{{
|
function! s:fmt_row(line, max_lens, col1, col2) "{{{
|
||||||
let new_line = '|'
|
let new_line = s:rxSep
|
||||||
let cells = s:get_values(a:line)
|
let cells = vimwiki#tbl#get_cells(a:line)
|
||||||
for idx in range(len(cells))
|
for idx in range(len(cells))
|
||||||
if idx == a:col1
|
if idx == a:col1
|
||||||
let idx = a:col2
|
let idx = a:col2
|
||||||
@ -262,12 +310,12 @@ function! s:fmt_row(line, max_lens, col1, col2) "{{{
|
|||||||
let idx = a:col1
|
let idx = a:col1
|
||||||
endif
|
endif
|
||||||
let value = cells[idx]
|
let value = cells[idx]
|
||||||
let new_line .= s:fmt_cell(value, a:max_lens[idx]).'|'
|
let new_line .= s:fmt_cell(value, a:max_lens[idx]).s:rxSep
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
let idx = len(cells)
|
let idx = len(cells)
|
||||||
while idx < len(a:max_lens)
|
while idx < len(a:max_lens)
|
||||||
let new_line .= s:fmt_cell('', a:max_lens[idx]).'|'
|
let new_line .= s:fmt_cell('', a:max_lens[idx]).s:rxSep
|
||||||
let idx += 1
|
let idx += 1
|
||||||
endwhile
|
endwhile
|
||||||
return new_line
|
return new_line
|
||||||
@ -282,17 +330,16 @@ function! s:fmt_cell_sep(max_len) "{{{
|
|||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:fmt_sep(max_lens, col1, col2) "{{{
|
function! s:fmt_sep(max_lens, col1, col2) "{{{
|
||||||
let sep = '|'
|
let new_line = s:rxSep
|
||||||
for idx in range(len(a:max_lens))
|
for idx in range(len(a:max_lens))
|
||||||
if idx == a:col1
|
if idx == a:col1
|
||||||
let idx = a:col2
|
let idx = a:col2
|
||||||
elseif idx == a:col2
|
elseif idx == a:col2
|
||||||
let idx = a:col1
|
let idx = a:col1
|
||||||
endif
|
endif
|
||||||
let sep .= s:fmt_cell_sep(a:max_lens[idx]).'+'
|
let new_line .= s:fmt_cell_sep(a:max_lens[idx]).s:rxSep
|
||||||
endfor
|
endfor
|
||||||
let sep = substitute(sep, '+$', '|', '')
|
return new_line
|
||||||
return sep
|
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
"}}}
|
"}}}
|
||||||
|
|
||||||
@ -300,41 +347,94 @@ endfunction "}}}
|
|||||||
function! s:kbd_create_new_row(cols, goto_first) "{{{
|
function! s:kbd_create_new_row(cols, goto_first) "{{{
|
||||||
let cmd = "\<ESC>o".s:create_empty_row(a:cols)
|
let cmd = "\<ESC>o".s:create_empty_row(a:cols)
|
||||||
let cmd .= "\<ESC>:call vimwiki#tbl#format(line('.'))\<CR>"
|
let cmd .= "\<ESC>:call vimwiki#tbl#format(line('.'))\<CR>"
|
||||||
|
let cmd .= "\<ESC>0"
|
||||||
if a:goto_first
|
if a:goto_first
|
||||||
let cmd .= "\<ESC>0:call search('|', 'c', line('.'))\<CR>la"
|
let cmd .= ":call search('\\(".s:rxSep."\\)\\zs', 'c', line('.'))\<CR>"
|
||||||
else
|
else
|
||||||
let cmd .= "0".(col('.')-1)."lT|a"
|
let cmd .= (col('.')-1)."l"
|
||||||
|
let cmd .= ":call search('\\(".s:rxSep."\\)\\zs', 'bc', line('.'))\<CR>"
|
||||||
endif
|
endif
|
||||||
|
let cmd .= "a"
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:kbd_goto_next_row() "{{{
|
function! s:kbd_goto_next_row() "{{{
|
||||||
let cmd = "\<ESC>jt|T|a"
|
let cmd = "\<ESC>j"
|
||||||
|
let cmd .= ":call search('.\\(".s:rxSep."\\)', 'c', line('.'))\<CR>"
|
||||||
|
let cmd .= ":call search('\\(".s:rxSep."\\)\\zs', 'bc', line('.'))\<CR>"
|
||||||
|
let cmd .= "a"
|
||||||
return cmd
|
return cmd
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:kbd_goto_prev_row() "{{{
|
function! s:kbd_goto_prev_row() "{{{
|
||||||
let cmd = "\<ESC>jt|T|a"
|
let cmd = "\<ESC>k"
|
||||||
|
let cmd .= ":call search('.\\(".s:rxSep."\\)', 'c', line('.'))\<CR>"
|
||||||
|
let cmd .= ":call search('\\(".s:rxSep."\\)\\zs', 'bc', line('.'))\<CR>"
|
||||||
|
let cmd .= "a"
|
||||||
return cmd
|
return cmd
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:kbd_goto_next_col(last) "{{{
|
" Used in s:kbd_goto_next_col
|
||||||
if a:last
|
function! vimwiki#tbl#goto_next_col() "{{{
|
||||||
|
let curcol = virtcol('.')
|
||||||
|
let lnum = line('.')
|
||||||
|
let newcol = s:get_indent(lnum)
|
||||||
|
let max_lens = s:get_cell_max_lens(lnum)
|
||||||
|
for cell_len in values(max_lens)
|
||||||
|
if newcol >= curcol-1
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
let newcol += cell_len + 3 " +3 == 2 spaces + 1 separator |<space>...<space>
|
||||||
|
endfor
|
||||||
|
let newcol += 2 " +2 == 1 separator + 1 space |<space
|
||||||
|
call vimwiki#u#cursor(lnum, newcol)
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:kbd_goto_next_col(jumpdown) "{{{
|
||||||
|
let cmd = "\<ESC>"
|
||||||
|
if a:jumpdown
|
||||||
let seps = s:count_separators_down(line('.'))
|
let seps = s:count_separators_down(line('.'))
|
||||||
let cmd = "\<ESC>".seps."j0:call search('|', 'c', line('.'))\<CR>la"
|
let cmd .= seps."j0"
|
||||||
else
|
|
||||||
let cmd = "\<ESC>:call search('|', 'c', line('.'))\<CR>la"
|
|
||||||
endif
|
endif
|
||||||
|
let cmd .= ":call vimwiki#tbl#goto_next_col()\<CR>a"
|
||||||
return cmd
|
return cmd
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:kbd_goto_prev_col(first) "{{{
|
" Used in s:kbd_goto_prev_col
|
||||||
if a:first
|
function! vimwiki#tbl#goto_prev_col() "{{{
|
||||||
|
let curcol = virtcol('.')
|
||||||
|
let lnum = line('.')
|
||||||
|
let newcol = s:get_indent(lnum)
|
||||||
|
let max_lens = s:get_cell_max_lens(lnum)
|
||||||
|
let prev_cell_len = 0
|
||||||
|
echom string(max_lens)
|
||||||
|
for cell_len in values(max_lens)
|
||||||
|
let delta = cell_len + 3 " +3 == 2 spaces + 1 separator |<space>...<space>
|
||||||
|
if newcol + delta > curcol-1
|
||||||
|
let newcol -= (prev_cell_len + 3) " +3 == 2 spaces + 1 separator |<space>...<space>
|
||||||
|
break
|
||||||
|
elseif newcol + delta == curcol-1
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
let prev_cell_len = cell_len
|
||||||
|
let newcol += delta
|
||||||
|
endfor
|
||||||
|
let newcol += 2 " +2 == 1 separator + 1 space |<space
|
||||||
|
call vimwiki#u#cursor(lnum, newcol)
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:kbd_goto_prev_col(jumpup) "{{{
|
||||||
|
let cmd = "\<ESC>"
|
||||||
|
if a:jumpup
|
||||||
let seps = s:count_separators_up(line('.'))
|
let seps = s:count_separators_up(line('.'))
|
||||||
let cmd = "\<ESC>".seps."k$:call search('|', 'b', line('.'))\<CR>la"
|
let cmd .= seps."k"
|
||||||
else
|
let cmd .= "$"
|
||||||
let cmd = "\<ESC>2F|la"
|
|
||||||
endif
|
endif
|
||||||
|
let cmd .= ":call vimwiki#tbl#goto_prev_col()\<CR>a"
|
||||||
|
" let cmd .= ":call search('\\(".s:rxSep."\\)\\zs', 'b', line('.'))\<CR>"
|
||||||
|
" let cmd .= "a"
|
||||||
|
"echomsg "DEBUG kbd_goto_prev_col> ".cmd
|
||||||
return cmd
|
return cmd
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
@ -348,7 +448,7 @@ function! vimwiki#tbl#kbd_cr() "{{{
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if s:is_separator(getline(lnum+1)) || !s:is_table(getline(lnum+1))
|
if s:is_separator(getline(lnum+1)) || !s:is_table(getline(lnum+1))
|
||||||
let cols = len(s:get_values(getline(lnum)))
|
let cols = len(vimwiki#tbl#get_cells(getline(lnum)))
|
||||||
return s:kbd_create_new_row(cols, 0)
|
return s:kbd_create_new_row(cols, 0)
|
||||||
else
|
else
|
||||||
return s:kbd_goto_next_row()
|
return s:kbd_goto_next_row()
|
||||||
@ -362,11 +462,13 @@ function! vimwiki#tbl#kbd_tab() "{{{
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
let last = s:is_last_column(lnum, col('.'))
|
let last = s:is_last_column(lnum, col('.'))
|
||||||
if last && !s:is_table(getline(lnum+1))
|
let is_sep = s:is_separator_tail(getline(lnum))
|
||||||
let cols = len(s:get_values(getline(lnum)))
|
"echomsg "DEBUG kbd_tab> last=".last.", is_sep=".is_sep
|
||||||
|
if (is_sep || last) && !s:is_table(getline(lnum+1))
|
||||||
|
let cols = len(vimwiki#tbl#get_cells(getline(lnum)))
|
||||||
return s:kbd_create_new_row(cols, 1)
|
return s:kbd_create_new_row(cols, 1)
|
||||||
endif
|
endif
|
||||||
return s:kbd_goto_next_col(last)
|
return s:kbd_goto_next_col(is_sep || last)
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! vimwiki#tbl#kbd_shift_tab() "{{{
|
function! vimwiki#tbl#kbd_shift_tab() "{{{
|
||||||
@ -376,10 +478,12 @@ function! vimwiki#tbl#kbd_shift_tab() "{{{
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
let first = s:is_first_column(lnum, col('.'))
|
let first = s:is_first_column(lnum, col('.'))
|
||||||
if first && !s:is_table(getline(lnum-1))
|
let is_sep = s:is_separator_tail(getline(lnum))
|
||||||
|
"echomsg "DEBUG kbd_tab> ".first
|
||||||
|
if (is_sep || first) && !s:is_table(getline(lnum-1))
|
||||||
return ""
|
return ""
|
||||||
endif
|
endif
|
||||||
return s:kbd_goto_prev_col(first)
|
return s:kbd_goto_prev_col(is_sep || first)
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! vimwiki#tbl#format(lnum, ...) "{{{
|
function! vimwiki#tbl#format(lnum, ...) "{{{
|
||||||
@ -462,7 +566,12 @@ endfunction "}}}
|
|||||||
" TODO: move_column_left and move_column_right are good candidates to be
|
" TODO: move_column_left and move_column_right are good candidates to be
|
||||||
" refactored.
|
" refactored.
|
||||||
function! vimwiki#tbl#move_column_left() "{{{
|
function! vimwiki#tbl#move_column_left() "{{{
|
||||||
if !s:is_table(getline('.'))
|
|
||||||
|
"echomsg "DEBUG move_column_left: "
|
||||||
|
|
||||||
|
let line = getline('.')
|
||||||
|
|
||||||
|
if !s:is_table(line)
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -474,16 +583,28 @@ function! vimwiki#tbl#move_column_left() "{{{
|
|||||||
if cur_col > 0
|
if cur_col > 0
|
||||||
call vimwiki#tbl#format(line('.'), cur_col-1, cur_col)
|
call vimwiki#tbl#format(line('.'), cur_col-1, cur_col)
|
||||||
call cursor(line('.'), 1)
|
call cursor(line('.'), 1)
|
||||||
if !s:is_separator(getline('.'))
|
|
||||||
call search('\%(|[^|]\+\)\{'.(cur_col-1).'}| .', 'eW')
|
let sep = '\('.s:rxSep.'\).\zs'
|
||||||
else
|
let mpos = -1
|
||||||
call search('|\%([^+]\++\)\{'.(cur_col-1).'}--', 'eW')
|
let col = -1
|
||||||
endif
|
while col < cur_col-1
|
||||||
|
let mpos = match(line, sep, mpos+1)
|
||||||
|
if mpos != -1
|
||||||
|
let col += 1
|
||||||
|
else
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
endwhile
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! vimwiki#tbl#move_column_right() "{{{
|
function! vimwiki#tbl#move_column_right() "{{{
|
||||||
if !s:is_table(getline('.'))
|
|
||||||
|
let line = getline('.')
|
||||||
|
|
||||||
|
if !s:is_table(line)
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -495,16 +616,41 @@ function! vimwiki#tbl#move_column_right() "{{{
|
|||||||
if cur_col < s:col_count(line('.'))-1
|
if cur_col < s:col_count(line('.'))-1
|
||||||
call vimwiki#tbl#format(line('.'), cur_col, cur_col+1)
|
call vimwiki#tbl#format(line('.'), cur_col, cur_col+1)
|
||||||
call cursor(line('.'), 1)
|
call cursor(line('.'), 1)
|
||||||
if !s:is_separator(getline('.'))
|
|
||||||
call search('\%(|[^|]\+\)\{'.(cur_col+1).'}| .', 'eW')
|
let sep = '\('.s:rxSep.'\).\zs'
|
||||||
else
|
let mpos = -1
|
||||||
call search('|\%([^+]\++\)\{'.(cur_col+1).'}--', 'eW')
|
let col = -1
|
||||||
endif
|
while col < cur_col+1
|
||||||
|
let mpos = match(line, sep, mpos+1)
|
||||||
|
if mpos != -1
|
||||||
|
let col += 1
|
||||||
|
else
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
endwhile
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! vimwiki#tbl#get_rows(lnum) "{{{
|
function! vimwiki#tbl#get_rows(lnum) "{{{
|
||||||
return s:get_rows(a:lnum)
|
return s:get_rows(a:lnum)
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#tbl#is_table(line) "{{{
|
||||||
|
return s:is_table(a:line)
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#tbl#is_separator(line) "{{{
|
||||||
|
return s:is_separator(a:line)
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#tbl#cell_splitter() "{{{
|
||||||
|
return s:cell_splitter()
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#tbl#sep_splitter() "{{{
|
||||||
|
return s:sep_splitter()
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
"}}}
|
"}}}
|
||||||
|
77
autoload/vimwiki/u.vim
Normal file
77
autoload/vimwiki/u.vim
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79
|
||||||
|
" Vimwiki autoload plugin file
|
||||||
|
" Utility functions
|
||||||
|
" Author: Maxim Kim <habamax@gmail.com>
|
||||||
|
" Home: http://code.google.com/p/vimwiki/
|
||||||
|
|
||||||
|
function! vimwiki#u#trim(string, ...) "{{{
|
||||||
|
let chars = ''
|
||||||
|
if a:0 > 0
|
||||||
|
let chars = a:1
|
||||||
|
endif
|
||||||
|
let res = substitute(a:string, '^[[:space:]'.chars.']\+', '', '')
|
||||||
|
let res = substitute(res, '[[:space:]'.chars.']\+$', '', '')
|
||||||
|
return res
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
|
||||||
|
" Builtin cursor doesn't work right with unicode characters.
|
||||||
|
function! vimwiki#u#cursor(lnum, cnum) "{{{
|
||||||
|
exe a:lnum
|
||||||
|
exe 'normal! 0'.a:cnum.'|'
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#u#is_windows() "{{{
|
||||||
|
return has("win32") || has("win64") || has("win95") || has("win16")
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#u#chomp_slash(str) "{{{
|
||||||
|
return substitute(a:str, '[/\\]\+$', '', '')
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#u#time(starttime) "{{{
|
||||||
|
" measure the elapsed time and cut away miliseconds and smaller
|
||||||
|
return matchstr(reltimestr(reltime(a:starttime)),'\d\+\(\.\d\d\)\=')
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#u#path_norm(path) "{{{
|
||||||
|
" /-slashes
|
||||||
|
let path = substitute(a:path, '\', '/', 'g')
|
||||||
|
" treat multiple consecutive slashes as one path separator
|
||||||
|
let path = substitute(path, '/\+', '/', 'g')
|
||||||
|
" ensure that we are not fooled by a symbolic link
|
||||||
|
return resolve(path)
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#u#is_link_to_dir(link) "{{{
|
||||||
|
" Check if link is to a directory.
|
||||||
|
" It should be ended with \ or /.
|
||||||
|
if a:link =~ '.\+[/\\]$'
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
return 0
|
||||||
|
endfunction " }}}
|
||||||
|
|
||||||
|
function! vimwiki#u#count_first_sym(line) "{{{
|
||||||
|
let first_sym = matchstr(a:line, '\S')
|
||||||
|
return len(matchstr(a:line, first_sym.'\+'))
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
" return longest common path prefix of 2 given paths.
|
||||||
|
" '~/home/usrname/wiki', '~/home/usrname/wiki/shmiki' => '~/home/usrname/wiki'
|
||||||
|
function! vimwiki#u#path_common_pfx(path1, path2) "{{{
|
||||||
|
let p1 = split(a:path1, '[/\\]', 1)
|
||||||
|
let p2 = split(a:path2, '[/\\]', 1)
|
||||||
|
|
||||||
|
let idx = 0
|
||||||
|
let minlen = min([len(p1), len(p2)])
|
||||||
|
while (idx < minlen) && (p1[idx] ==? p2[idx])
|
||||||
|
let idx = idx + 1
|
||||||
|
endwhile
|
||||||
|
if idx == 0
|
||||||
|
return ''
|
||||||
|
else
|
||||||
|
return join(p1[: idx-1], '/')
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
1458
doc/vimwiki.txt
1458
doc/vimwiki.txt
File diff suppressed because it is too large
Load Diff
@ -35,13 +35,17 @@ setlocal isfname-=[,]
|
|||||||
|
|
||||||
" Autocreate list items {{{
|
" Autocreate list items {{{
|
||||||
" for list items, and list items with checkboxes
|
" for list items, and list items with checkboxes
|
||||||
|
setlocal formatoptions+=tnro
|
||||||
|
setlocal formatoptions-=cq
|
||||||
if VimwikiGet('syntax') == 'default'
|
if VimwikiGet('syntax') == 'default'
|
||||||
setl comments=b:*,b:#,b:-
|
setl comments=b:*,b:#,b:-
|
||||||
setl formatlistpat=^\\s*[*#-]\\s*
|
setl formatlistpat=^\\s*[*#-]\\s*
|
||||||
|
elseif VimwikiGet('syntax') == 'markdown'
|
||||||
|
setlocal comments=fb:*,fb:-,fb:+,nb:> commentstring=\ >\ %s
|
||||||
|
setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^[-*+]\\s\\+j
|
||||||
else
|
else
|
||||||
setl comments=n:*,n:#
|
setl comments=n:*,n:#
|
||||||
endif
|
endif
|
||||||
setlocal formatoptions=tnro
|
|
||||||
|
|
||||||
if !empty(&langmap)
|
if !empty(&langmap)
|
||||||
" Valid only if langmap is a comma separated pairs of chars
|
" Valid only if langmap is a comma separated pairs of chars
|
||||||
@ -64,23 +68,15 @@ function! VimwikiFoldLevel(lnum) "{{{
|
|||||||
|
|
||||||
" Header folding...
|
" Header folding...
|
||||||
if line =~ g:vimwiki_rxHeader
|
if line =~ g:vimwiki_rxHeader
|
||||||
let n = vimwiki#base#count_first_sym(line)
|
let n = vimwiki#u#count_first_sym(line)
|
||||||
return '>'.n
|
return '>'.n
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if g:vimwiki_fold_trailing_empty_lines == 0 && line =~ '^\s*$'
|
let base_level = s:get_base_level(a:lnum)
|
||||||
let nnline = getline(nextnonblank(a:lnum + 1))
|
|
||||||
else
|
|
||||||
let nnline = getline(a:lnum + 1)
|
|
||||||
endif
|
|
||||||
if nnline =~ g:vimwiki_rxHeader
|
|
||||||
let n = vimwiki#base#count_first_sym(nnline)
|
|
||||||
return '<'.n
|
|
||||||
endif
|
|
||||||
|
|
||||||
" List item folding...
|
" List item folding...
|
||||||
if g:vimwiki_fold_lists
|
if g:vimwiki_fold_lists
|
||||||
let base_level = s:get_base_level(a:lnum)
|
let nnline = getline(a:lnum + 1)
|
||||||
|
|
||||||
let rx_list_item = '\('.
|
let rx_list_item = '\('.
|
||||||
\ g:vimwiki_rxListBullet.'\|'.g:vimwiki_rxListNumber.
|
\ g:vimwiki_rxListBullet.'\|'.g:vimwiki_rxListNumber.
|
||||||
@ -95,6 +91,10 @@ function! VimwikiFoldLevel(lnum) "{{{
|
|||||||
|
|
||||||
if leveln > level
|
if leveln > level
|
||||||
return ">".(base_level+leveln-adj)
|
return ">".(base_level+leveln-adj)
|
||||||
|
" check if multilined list item
|
||||||
|
elseif (nnum-a:lnum) > 1
|
||||||
|
\ && nline =~ rx_list_item && nnline !~ '^\s*$'
|
||||||
|
return ">".(base_level+level+1-adj)
|
||||||
else
|
else
|
||||||
return (base_level+level-adj)
|
return (base_level+level-adj)
|
||||||
endif
|
endif
|
||||||
@ -102,34 +102,23 @@ function! VimwikiFoldLevel(lnum) "{{{
|
|||||||
" process multilined list items
|
" process multilined list items
|
||||||
let [pnum, pline] = s:find_backward(rx_list_item, a:lnum)
|
let [pnum, pline] = s:find_backward(rx_list_item, a:lnum)
|
||||||
if pline =~ rx_list_item
|
if pline =~ rx_list_item
|
||||||
if indent(a:lnum) > indent(pnum)
|
if indent(a:lnum) >= indent(pnum) && line !~ '^\s*$'
|
||||||
let level = s:get_li_level(pnum)
|
let level = s:get_li_level(pnum)
|
||||||
let adj = s:get_li_level(s:get_start_list(rx_list_item, pnum))
|
let adj = s:get_li_level(s:get_start_list(rx_list_item, pnum))
|
||||||
|
return (base_level+level+1-adj)
|
||||||
let [nnum, nline] = s:find_forward(rx_list_item, a:lnum)
|
|
||||||
if nline =~ rx_list_item
|
|
||||||
let leveln = s:get_li_level(nnum)
|
|
||||||
if leveln > level
|
|
||||||
return (base_level+leveln-adj)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
return (base_level+level-adj)
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return base_level
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return -1
|
return base_level
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:get_base_level(lnum) "{{{
|
function! s:get_base_level(lnum) "{{{
|
||||||
let lnum = a:lnum - 1
|
let lnum = a:lnum - 1
|
||||||
while lnum > 0
|
while lnum > 0
|
||||||
if getline(lnum) =~ g:vimwiki_rxHeader
|
if getline(lnum) =~ g:vimwiki_rxHeader
|
||||||
return vimwiki#base#count_first_sym(getline(lnum))
|
return vimwiki#u#count_first_sym(getline(lnum))
|
||||||
endif
|
endif
|
||||||
let lnum -= 1
|
let lnum -= 1
|
||||||
endwhile
|
endwhile
|
||||||
@ -169,7 +158,7 @@ endfunction "}}}
|
|||||||
|
|
||||||
function! s:get_li_level(lnum) "{{{
|
function! s:get_li_level(lnum) "{{{
|
||||||
if VimwikiGet('syntax') == 'media'
|
if VimwikiGet('syntax') == 'media'
|
||||||
let level = vimwiki#base#count_first_sym(getline(a:lnum))
|
let level = vimwiki#u#count_first_sym(getline(a:lnum))
|
||||||
else
|
else
|
||||||
let level = (indent(a:lnum) / &sw)
|
let level = (indent(a:lnum) / &sw)
|
||||||
endif
|
endif
|
||||||
@ -198,12 +187,16 @@ endfunction "}}}
|
|||||||
|
|
||||||
" COMMANDS {{{
|
" COMMANDS {{{
|
||||||
command! -buffer Vimwiki2HTML
|
command! -buffer Vimwiki2HTML
|
||||||
\ w <bar> call vimwiki#html#Wiki2HTML(expand(VimwikiGet('path_html')),
|
\ silent w <bar>
|
||||||
|
\ let res = vimwiki#html#Wiki2HTML(expand(VimwikiGet('path_html')),
|
||||||
\ expand('%'))
|
\ expand('%'))
|
||||||
|
\<bar>
|
||||||
|
\ if res != '' | echo 'Vimwiki: HTML conversion is done.' | endif
|
||||||
command! -buffer Vimwiki2HTMLBrowse
|
command! -buffer Vimwiki2HTMLBrowse
|
||||||
\ w <bar> call VimwikiWeblinkHandler(
|
\ silent w <bar>
|
||||||
\ vimwiki#html#Wiki2HTML(expand(VimwikiGet('path_html')),
|
\ call vimwiki#base#system_open_link(vimwiki#html#Wiki2HTML(
|
||||||
\ expand('%')))
|
\ expand(VimwikiGet('path_html')),
|
||||||
|
\ expand('%')))
|
||||||
command! -buffer VimwikiAll2HTML
|
command! -buffer VimwikiAll2HTML
|
||||||
\ call vimwiki#html#WikiAll2HTML(expand(VimwikiGet('path_html')))
|
\ call vimwiki#html#WikiAll2HTML(expand(VimwikiGet('path_html')))
|
||||||
|
|
||||||
@ -216,12 +209,17 @@ command! -buffer VimwikiGoBackLink call vimwiki#base#go_back_link()
|
|||||||
command! -buffer VimwikiSplitLink call vimwiki#base#follow_link('split')
|
command! -buffer VimwikiSplitLink call vimwiki#base#follow_link('split')
|
||||||
command! -buffer VimwikiVSplitLink call vimwiki#base#follow_link('vsplit')
|
command! -buffer VimwikiVSplitLink call vimwiki#base#follow_link('vsplit')
|
||||||
|
|
||||||
|
command! -buffer -nargs=? VimwikiNormalizeLink call vimwiki#base#normalize_link(<f-args>)
|
||||||
|
|
||||||
command! -buffer VimwikiTabnewLink call vimwiki#base#follow_link('tabnew')
|
command! -buffer VimwikiTabnewLink call vimwiki#base#follow_link('tabnew')
|
||||||
|
|
||||||
command! -buffer -range VimwikiToggleListItem call vimwiki#lst#ToggleListItem(<line1>, <line2>)
|
command! -buffer -range VimwikiToggleListItem call vimwiki#lst#ToggleListItem(<line1>, <line2>)
|
||||||
|
|
||||||
command! -buffer VimwikiGenerateLinks call vimwiki#base#generate_links()
|
command! -buffer VimwikiGenerateLinks call vimwiki#base#generate_links()
|
||||||
|
|
||||||
|
command! -buffer -nargs=0 VimwikiBacklinks call vimwiki#base#backlinks()
|
||||||
|
command! -buffer -nargs=0 VWB call vimwiki#base#backlinks()
|
||||||
|
|
||||||
exe 'command! -buffer -nargs=* VimwikiSearch lvimgrep <args> '.
|
exe 'command! -buffer -nargs=* VimwikiSearch lvimgrep <args> '.
|
||||||
\ escape(VimwikiGet('path').'**/*'.VimwikiGet('ext'), ' ')
|
\ escape(VimwikiGet('path').'**/*'.VimwikiGet('ext'), ' ')
|
||||||
|
|
||||||
@ -230,6 +228,10 @@ exe 'command! -buffer -nargs=* VWS lvimgrep <args> '.
|
|||||||
|
|
||||||
command! -buffer -nargs=1 VimwikiGoto call vimwiki#base#goto("<args>")
|
command! -buffer -nargs=1 VimwikiGoto call vimwiki#base#goto("<args>")
|
||||||
|
|
||||||
|
|
||||||
|
" list commands
|
||||||
|
command! -buffer -nargs=* VimwikiListChangeLevel call vimwiki#lst#change_level(<f-args>)
|
||||||
|
|
||||||
" table commands
|
" table commands
|
||||||
command! -buffer -nargs=* VimwikiTable call vimwiki#tbl#create(<f-args>)
|
command! -buffer -nargs=* VimwikiTable call vimwiki#tbl#create(<f-args>)
|
||||||
command! -buffer VimwikiTableAlignQ call vimwiki#tbl#align_or_cmd('gqq')
|
command! -buffer VimwikiTableAlignQ call vimwiki#tbl#align_or_cmd('gqq')
|
||||||
@ -247,7 +249,7 @@ command! -buffer VimwikiDiaryPrevDay call vimwiki#diary#goto_prev_day()
|
|||||||
if g:vimwiki_use_mouse
|
if g:vimwiki_use_mouse
|
||||||
nmap <buffer> <S-LeftMouse> <NOP>
|
nmap <buffer> <S-LeftMouse> <NOP>
|
||||||
nmap <buffer> <C-LeftMouse> <NOP>
|
nmap <buffer> <C-LeftMouse> <NOP>
|
||||||
nnoremap <silent><buffer> <2-LeftMouse> :VimwikiFollowLink<CR>
|
nnoremap <silent><buffer> <2-LeftMouse> :call vimwiki#base#follow_link("nosplit", "\<lt>2-LeftMouse>")<CR>
|
||||||
nnoremap <silent><buffer> <S-2-LeftMouse> <LeftMouse>:VimwikiSplitLink<CR>
|
nnoremap <silent><buffer> <S-2-LeftMouse> <LeftMouse>:VimwikiSplitLink<CR>
|
||||||
nnoremap <silent><buffer> <C-2-LeftMouse> <LeftMouse>:VimwikiVSplitLink<CR>
|
nnoremap <silent><buffer> <C-2-LeftMouse> <LeftMouse>:VimwikiVSplitLink<CR>
|
||||||
nnoremap <silent><buffer> <RightMouse><LeftMouse> :VimwikiGoBackLink<CR>
|
nnoremap <silent><buffer> <RightMouse><LeftMouse> :VimwikiGoBackLink<CR>
|
||||||
@ -284,6 +286,24 @@ endif
|
|||||||
nnoremap <silent><script><buffer>
|
nnoremap <silent><script><buffer>
|
||||||
\ <Plug>VimwikiVSplitLink :VimwikiVSplitLink<CR>
|
\ <Plug>VimwikiVSplitLink :VimwikiVSplitLink<CR>
|
||||||
|
|
||||||
|
if !hasmapto('<Plug>VimwikiNormalizeLink')
|
||||||
|
nmap <silent><buffer> + <Plug>VimwikiNormalizeLink
|
||||||
|
endif
|
||||||
|
nnoremap <silent><script><buffer>
|
||||||
|
\ <Plug>VimwikiNormalizeLink :VimwikiNormalizeLink 0<CR>
|
||||||
|
|
||||||
|
if !hasmapto('<Plug>VimwikiNormalizeLinkVisual')
|
||||||
|
vmap <silent><buffer> + <Plug>VimwikiNormalizeLinkVisual
|
||||||
|
endif
|
||||||
|
vnoremap <silent><script><buffer>
|
||||||
|
\ <Plug>VimwikiNormalizeLinkVisual :<C-U>VimwikiNormalizeLink 1<CR>
|
||||||
|
|
||||||
|
if !hasmapto('<Plug>VimwikiNormalizeLinkVisualCR')
|
||||||
|
vmap <silent><buffer> <CR> <Plug>VimwikiNormalizeLinkVisualCR
|
||||||
|
endif
|
||||||
|
vnoremap <silent><script><buffer>
|
||||||
|
\ <Plug>VimwikiNormalizeLinkVisualCR :<C-U>VimwikiNormalizeLink 1<CR>
|
||||||
|
|
||||||
if !hasmapto('<Plug>VimwikiTabnewLink')
|
if !hasmapto('<Plug>VimwikiTabnewLink')
|
||||||
nmap <silent><buffer> <D-CR> <Plug>VimwikiTabnewLink
|
nmap <silent><buffer> <D-CR> <Plug>VimwikiTabnewLink
|
||||||
nmap <silent><buffer> <C-S-CR> <Plug>VimwikiTabnewLink
|
nmap <silent><buffer> <C-S-CR> <Plug>VimwikiTabnewLink
|
||||||
@ -345,7 +365,7 @@ nnoremap <silent><script><buffer>
|
|||||||
|
|
||||||
function! s:CR() "{{{
|
function! s:CR() "{{{
|
||||||
let res = vimwiki#lst#kbd_cr()
|
let res = vimwiki#lst#kbd_cr()
|
||||||
if res == "\<CR>" && g:vimwiki_table_auto_fmt
|
if res == "\<CR>" && g:vimwiki_table_mappings
|
||||||
let res = vimwiki#tbl#kbd_cr()
|
let res = vimwiki#tbl#kbd_cr()
|
||||||
endif
|
endif
|
||||||
return res
|
return res
|
||||||
@ -357,9 +377,25 @@ inoremap <buffer> <expr> <CR> <SID>CR()
|
|||||||
" List mappings
|
" List mappings
|
||||||
nnoremap <buffer> o :<C-U>call vimwiki#lst#kbd_oO('o')<CR>
|
nnoremap <buffer> o :<C-U>call vimwiki#lst#kbd_oO('o')<CR>
|
||||||
nnoremap <buffer> O :<C-U>call vimwiki#lst#kbd_oO('O')<CR>
|
nnoremap <buffer> O :<C-U>call vimwiki#lst#kbd_oO('O')<CR>
|
||||||
|
nnoremap <buffer> gll :VimwikiListChangeLevel <<<CR>
|
||||||
|
nnoremap <buffer> glm :VimwikiListChangeLevel >><CR>
|
||||||
|
nnoremap <buffer> gl* :VimwikiListChangeLevel *<CR>
|
||||||
|
nnoremap <buffer> gl8 :VimwikiListChangeLevel *<CR>
|
||||||
|
if VimwikiGet('syntax') == 'default'
|
||||||
|
nnoremap <buffer> gl- :VimwikiListChangeLevel -<CR>
|
||||||
|
nnoremap <buffer> gl# :VimwikiListChangeLevel #<CR>
|
||||||
|
nnoremap <buffer> gl3 :VimwikiListChangeLevel #<CR>
|
||||||
|
elseif VimwikiGet('syntax') == 'markdown'
|
||||||
|
nnoremap <buffer> gl- :VimwikiListChangeLevel -<CR>
|
||||||
|
nnoremap <buffer> gl1 :VimwikiListChangeLevel 1.<CR>
|
||||||
|
elseif VimwikiGet('syntax') == 'media'
|
||||||
|
nnoremap <buffer> gl# :VimwikiListChangeLevel #<CR>
|
||||||
|
nnoremap <buffer> gl3 :VimwikiListChangeLevel #<CR>
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
" Table mappings
|
" Table mappings
|
||||||
if g:vimwiki_table_auto_fmt
|
if g:vimwiki_table_mappings
|
||||||
inoremap <expr> <buffer> <Tab> vimwiki#tbl#kbd_tab()
|
inoremap <expr> <buffer> <Tab> vimwiki#tbl#kbd_tab()
|
||||||
inoremap <expr> <buffer> <S-Tab> vimwiki#tbl#kbd_shift_tab()
|
inoremap <expr> <buffer> <S-Tab> vimwiki#tbl#kbd_shift_tab()
|
||||||
endif
|
endif
|
||||||
@ -377,8 +413,6 @@ endif
|
|||||||
nnoremap <silent><script><buffer>
|
nnoremap <silent><script><buffer>
|
||||||
\ <Plug>VimwikiTableMoveColumnRight :VimwikiTableMoveColumnRight<CR>
|
\ <Plug>VimwikiTableMoveColumnRight :VimwikiTableMoveColumnRight<CR>
|
||||||
|
|
||||||
" Misc mappings
|
|
||||||
inoremap <buffer> <S-CR> <br /><CR>
|
|
||||||
|
|
||||||
|
|
||||||
" Text objects {{{
|
" Text objects {{{
|
||||||
@ -400,8 +434,18 @@ vnoremap <silent><buffer> ac :<C-U>call vimwiki#base#TO_table_col(0, 1)<CR>
|
|||||||
onoremap <silent><buffer> ic :<C-U>call vimwiki#base#TO_table_col(1, 0)<CR>
|
onoremap <silent><buffer> ic :<C-U>call vimwiki#base#TO_table_col(1, 0)<CR>
|
||||||
vnoremap <silent><buffer> ic :<C-U>call vimwiki#base#TO_table_col(1, 1)<CR>
|
vnoremap <silent><buffer> ic :<C-U>call vimwiki#base#TO_table_col(1, 1)<CR>
|
||||||
|
|
||||||
nnoremap <silent><buffer> = :call vimwiki#base#AddHeaderLevel()<CR>
|
if !hasmapto('<Plug>VimwikiAddHeaderLevel')
|
||||||
nnoremap <silent><buffer> - :call vimwiki#base#RemoveHeaderLevel()<CR>
|
nmap <silent><buffer> = <Plug>VimwikiAddHeaderLevel
|
||||||
|
endif
|
||||||
|
nnoremap <silent><buffer> <Plug>VimwikiAddHeaderLevel :
|
||||||
|
\<C-U>call vimwiki#base#AddHeaderLevel()<CR>
|
||||||
|
|
||||||
|
if !hasmapto('<Plug>VimwikiRemoveHeaderLevel')
|
||||||
|
nmap <silent><buffer> - <Plug>VimwikiRemoveHeaderLevel
|
||||||
|
endif
|
||||||
|
nnoremap <silent><buffer> <Plug>VimwikiRemoveHeaderLevel :
|
||||||
|
\<C-U>call vimwiki#base#RemoveHeaderLevel()<CR>
|
||||||
|
|
||||||
|
|
||||||
" }}}
|
" }}}
|
||||||
|
|
||||||
@ -411,8 +455,21 @@ nnoremap <silent><buffer> - :call vimwiki#base#RemoveHeaderLevel()<CR>
|
|||||||
if VimwikiGet('auto_export')
|
if VimwikiGet('auto_export')
|
||||||
" Automatically generate HTML on page write.
|
" Automatically generate HTML on page write.
|
||||||
augroup vimwiki
|
augroup vimwiki
|
||||||
au BufWritePost <buffer> Vimwiki2HTML
|
au BufWritePost <buffer>
|
||||||
|
\ call vimwiki#html#Wiki2HTML(expand(VimwikiGet('path_html')),
|
||||||
|
\ expand('%'))
|
||||||
augroup END
|
augroup END
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" AUTOCOMMANDS }}}
|
" AUTOCOMMANDS }}}
|
||||||
|
|
||||||
|
" PASTE, CAT URL {{{
|
||||||
|
" html commands
|
||||||
|
command! -buffer VimwikiPasteUrl call vimwiki#html#PasteUrl(expand('%:p'))
|
||||||
|
command! -buffer VimwikiCatUrl call vimwiki#html#CatUrl(expand('%:p'))
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" DEBUGGING {{{
|
||||||
|
command! VimwikiPrintWikiState call vimwiki#base#print_wiki_state()
|
||||||
|
command! VimwikiReadLocalOptions call vimwiki#base#read_wiki_options(1)
|
||||||
|
" }}}
|
||||||
|
@ -12,6 +12,19 @@ let loaded_vimwiki = 1
|
|||||||
let s:old_cpo = &cpo
|
let s:old_cpo = &cpo
|
||||||
set cpo&vim
|
set cpo&vim
|
||||||
|
|
||||||
|
" Logging and performance instrumentation "{{{
|
||||||
|
let g:VimwikiLog = {}
|
||||||
|
let g:VimwikiLog.path = 0 " # of calls to VimwikiGet with path or path_html
|
||||||
|
let g:VimwikiLog.path_html = 0 " # of calls to path_html()
|
||||||
|
let g:VimwikiLog.normalize_path = 0 " # of calls to normalize_path()
|
||||||
|
let g:VimwikiLog.subdir = 0 " # of calls to vimwiki#base#subdir()
|
||||||
|
let g:VimwikiLog.timing = [] " various timing measurements
|
||||||
|
let g:VimwikiLog.html = [] " html conversion timing
|
||||||
|
function! VimwikiLog_extend(what,...) "{{{
|
||||||
|
call extend(g:VimwikiLog[a:what],a:000)
|
||||||
|
endfunction "}}}
|
||||||
|
"}}}
|
||||||
|
|
||||||
" HELPER functions {{{
|
" HELPER functions {{{
|
||||||
function! s:default(varname, value) "{{{
|
function! s:default(varname, value) "{{{
|
||||||
if !exists('g:vimwiki_'.a:varname)
|
if !exists('g:vimwiki_'.a:varname)
|
||||||
@ -19,87 +32,141 @@ function! s:default(varname, value) "{{{
|
|||||||
endif
|
endif
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
" return longest common path prefix of 2 given paths.
|
|
||||||
" '~/home/usrname/wiki', '~/home/usrname/wiki/shmiki' => '~/home/usrname/wiki'
|
|
||||||
function! s:path_common_pfx(path1, path2) "{{{
|
|
||||||
let p1 = split(a:path1, '[/\\]', 1)
|
|
||||||
let p2 = split(a:path2, '[/\\]', 1)
|
|
||||||
|
|
||||||
let idx = 0
|
|
||||||
let minlen = min([len(p1), len(p2)])
|
|
||||||
while (idx < minlen) && (p1[idx] ==? p2[idx])
|
|
||||||
let idx = idx + 1
|
|
||||||
endwhile
|
|
||||||
if idx == 0
|
|
||||||
return ''
|
|
||||||
else
|
|
||||||
return join(p1[: idx-1], '/')
|
|
||||||
endif
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:find_wiki(path) "{{{
|
function! s:find_wiki(path) "{{{
|
||||||
|
" XXX: find_wiki() does not (yet) take into consideration the ext
|
||||||
|
let path = vimwiki#u#path_norm(vimwiki#u#chomp_slash(a:path))
|
||||||
let idx = 0
|
let idx = 0
|
||||||
while idx < len(g:vimwiki_list)
|
while idx < len(g:vimwiki_list)
|
||||||
let path = vimwiki#base#chomp_slash(expand(VimwikiGet('path', idx)))
|
let idx_path = expand(VimwikiGet('path', idx))
|
||||||
let path = vimwiki#base#path_norm(path)
|
let idx_path = vimwiki#u#path_norm(vimwiki#u#chomp_slash(idx_path))
|
||||||
if s:path_common_pfx(path, a:path) == path
|
if vimwiki#u#path_common_pfx(idx_path, path) == idx_path
|
||||||
return idx
|
return idx
|
||||||
endif
|
endif
|
||||||
let idx += 1
|
let idx += 1
|
||||||
endwhile
|
endwhile
|
||||||
return -1
|
return -1
|
||||||
|
" an orphan page has been detected
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:setup_buffer_leave()"{{{
|
|
||||||
if &filetype == 'vimwiki' && !exists("b:vimwiki_idx")
|
function! s:vimwiki_idx() " {{{
|
||||||
let b:vimwiki_idx = g:vimwiki_current_idx
|
if exists('b:vimwiki_idx')
|
||||||
|
return b:vimwiki_idx
|
||||||
|
else
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
endfunction " }}}
|
||||||
|
|
||||||
|
function! s:setup_buffer_leave() "{{{
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom "Setup_buffer_leave g:curr_idx=".g:vimwiki_current_idx." b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
if &filetype == 'vimwiki'
|
||||||
|
" cache global vars of current state XXX: SLOW!?
|
||||||
|
call vimwiki#base#cache_buffer_state()
|
||||||
|
endif
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom " Setup_buffer_leave g:curr_idx=".g:vimwiki_current_idx." b:curr_idx=".s:vimwiki_idx().""
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Set up menu
|
" Set up menu
|
||||||
if g:vimwiki_menu != ""
|
if g:vimwiki_menu != ""
|
||||||
exe 'nmenu disable '.g:vimwiki_menu.'.Table'
|
exe 'nmenu disable '.g:vimwiki_menu.'.Table'
|
||||||
endif
|
endif
|
||||||
endfunction"}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:setup_filetype() "{{{
|
function! s:setup_filetype() "{{{
|
||||||
" Find what wiki current buffer belongs to.
|
if g:vimwiki_debug ==3
|
||||||
let path = expand('%:p:h')
|
echom "Setup_filetype g:curr_idx=".g:vimwiki_current_idx." b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
let time0 = reltime() " start the clock "XXX
|
||||||
|
" Find what wiki current buffer belongs to.
|
||||||
|
let path = expand('%:p:h')
|
||||||
|
" XXX: find_wiki() does not (yet) take into consideration the ext
|
||||||
|
let idx = s:find_wiki(path)
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom " Setup_filetype g:curr_idx=".g:vimwiki_current_idx." find_idx=".idx." b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
|
||||||
|
if idx == -1 && g:vimwiki_global_ext == 0
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
"XXX when idx = -1? (an orphan page has been detected)
|
||||||
|
|
||||||
|
"TODO: refactor (same code in setup_buffer_enter)
|
||||||
|
" The buffer's file is not in the path and user *does* want his wiki
|
||||||
|
" extension(s) to be global -- Add new wiki.
|
||||||
|
if idx == -1
|
||||||
let ext = '.'.expand('%:e')
|
let ext = '.'.expand('%:e')
|
||||||
let idx = s:find_wiki(path)
|
" lookup syntax using g:vimwiki_ext2syntax
|
||||||
|
if has_key(g:vimwiki_ext2syntax, ext)
|
||||||
if idx == -1 && g:vimwiki_global_ext == 0
|
let syn = g:vimwiki_ext2syntax[ext]
|
||||||
return
|
else
|
||||||
|
let syn = s:vimwiki_defaults.syntax
|
||||||
endif
|
endif
|
||||||
|
call add(g:vimwiki_list, {'path': path, 'ext': ext, 'syntax': syn, 'temp': 1})
|
||||||
|
let idx = len(g:vimwiki_list) - 1
|
||||||
|
endif
|
||||||
|
call vimwiki#base#validate_wiki_options(idx)
|
||||||
|
" initialize and cache global vars of current state
|
||||||
|
call vimwiki#base#setup_buffer_state(idx)
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom " Setup_filetype g:curr_idx=".g:vimwiki_current_idx." (reset_wiki_state) b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
|
||||||
|
unlet! b:vimwiki_fs_rescan
|
||||||
set filetype=vimwiki
|
set filetype=vimwiki
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom " Setup_filetype g:curr_idx=".g:vimwiki_current_idx." (set ft=vimwiki) b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
let time1 = vimwiki#u#time(time0) "XXX
|
||||||
|
call VimwikiLog_extend('timing',['plugin:setup_filetype:time1',time1])
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:setup_buffer_enter() "{{{
|
function! s:setup_buffer_enter() "{{{
|
||||||
if exists("b:vimwiki_idx")
|
if g:vimwiki_debug ==3
|
||||||
let g:vimwiki_current_idx = b:vimwiki_idx
|
echom "Setup_buffer_enter g:curr_idx=".g:vimwiki_current_idx." b:curr_idx=".s:vimwiki_idx().""
|
||||||
else
|
endif
|
||||||
|
let time0 = reltime() " start the clock "XXX
|
||||||
|
if !vimwiki#base#recall_buffer_state()
|
||||||
" Find what wiki current buffer belongs to.
|
" Find what wiki current buffer belongs to.
|
||||||
" If wiki does not exist in g:vimwiki_list -- add new wiki there with
|
" If wiki does not exist in g:vimwiki_list -- add new wiki there with
|
||||||
" buffer's path and ext.
|
" buffer's path and ext.
|
||||||
" Else set g:vimwiki_current_idx to that wiki index.
|
" Else set g:vimwiki_current_idx to that wiki index.
|
||||||
let path = expand('%:p:h')
|
let path = expand('%:p:h')
|
||||||
let ext = '.'.expand('%:e')
|
" XXX: find_wiki() does not (yet) take into consideration the ext
|
||||||
let idx = s:find_wiki(path)
|
let idx = s:find_wiki(path)
|
||||||
|
|
||||||
" The buffer's file is not in the path and user do not want his wiki
|
if g:vimwiki_debug ==3
|
||||||
" extension to be global -- do not add new wiki.
|
echom " Setup_buffer_enter g:curr_idx=".g:vimwiki_current_idx." find_idx=".idx." b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
" The buffer's file is not in the path and user *does NOT* want his wiki
|
||||||
|
" extension to be global -- Do not add new wiki.
|
||||||
if idx == -1 && g:vimwiki_global_ext == 0
|
if idx == -1 && g:vimwiki_global_ext == 0
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
"TODO: refactor (same code in setup_filetype)
|
||||||
|
" The buffer's file is not in the path and user *does* want his wiki
|
||||||
|
" extension(s) to be global -- Add new wiki.
|
||||||
if idx == -1
|
if idx == -1
|
||||||
call add(g:vimwiki_list, {'path': path, 'ext': ext, 'temp': 1})
|
let ext = '.'.expand('%:e')
|
||||||
let g:vimwiki_current_idx = len(g:vimwiki_list) - 1
|
" lookup syntax using g:vimwiki_ext2syntax
|
||||||
else
|
if has_key(g:vimwiki_ext2syntax, ext)
|
||||||
let g:vimwiki_current_idx = idx
|
let syn = g:vimwiki_ext2syntax[ext]
|
||||||
|
else
|
||||||
|
let syn = s:vimwiki_defaults.syntax
|
||||||
|
endif
|
||||||
|
call add(g:vimwiki_list, {'path': path, 'ext': ext, 'syntax': syn, 'temp': 1})
|
||||||
|
let idx = len(g:vimwiki_list) - 1
|
||||||
|
endif
|
||||||
|
call vimwiki#base#validate_wiki_options(idx)
|
||||||
|
" initialize and cache global vars of current state
|
||||||
|
call vimwiki#base#setup_buffer_state(idx)
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom " Setup_buffer_enter g:curr_idx=".g:vimwiki_current_idx." (reset_wiki_state) b:curr_idx=".s:vimwiki_idx().""
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let b:vimwiki_idx = g:vimwiki_current_idx
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" If you have
|
" If you have
|
||||||
@ -108,10 +175,22 @@ function! s:setup_buffer_enter() "{{{
|
|||||||
" au GUIEnter * nested VimwikiIndex
|
" au GUIEnter * nested VimwikiIndex
|
||||||
if &filetype == ''
|
if &filetype == ''
|
||||||
set filetype=vimwiki
|
set filetype=vimwiki
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom " Setup_buffer_enter g:curr_idx=".g:vimwiki_current_idx." (set ft vimwiki) b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
elseif &syntax == 'vimwiki'
|
||||||
|
" to force a rescan of the filesystem which may have changed
|
||||||
|
" and update VimwikiLinks syntax group that depends on it;
|
||||||
|
" b:vimwiki_fs_rescan indicates that setup_filetype() has not been run
|
||||||
|
if exists("b:vimwiki_fs_rescan") && VimwikiGet('maxhi')
|
||||||
|
set syntax=vimwiki
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom " Setup_buffer_enter g:curr_idx=".g:vimwiki_current_idx." (set syntax=vimwiki) b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
let b:vimwiki_fs_rescan = 1
|
||||||
endif
|
endif
|
||||||
|
let time1 = vimwiki#u#time(time0) "XXX
|
||||||
" Update existed/non-existed links highlighting.
|
|
||||||
call vimwiki#base#highlight_links()
|
|
||||||
|
|
||||||
" Settings foldmethod, foldexpr and foldtext are local to window. Thus in a
|
" Settings foldmethod, foldexpr and foldtext are local to window. Thus in a
|
||||||
" new tab with the same buffer folding is reset to vim defaults. So we
|
" new tab with the same buffer folding is reset to vim defaults. So we
|
||||||
@ -131,86 +210,125 @@ function! s:setup_buffer_enter() "{{{
|
|||||||
if g:vimwiki_menu != ""
|
if g:vimwiki_menu != ""
|
||||||
exe 'nmenu enable '.g:vimwiki_menu.'.Table'
|
exe 'nmenu enable '.g:vimwiki_menu.'.Table'
|
||||||
endif
|
endif
|
||||||
|
"let time2 = vimwiki#u#time(time0) "XXX
|
||||||
|
call VimwikiLog_extend('timing',['plugin:setup_buffer_enter:time1',time1])
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:setup_buffer_reenter() "{{{
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom "Setup_buffer_reenter g:curr_idx=".g:vimwiki_current_idx." b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
if !vimwiki#base#recall_buffer_state()
|
||||||
|
" Do not repeat work of s:setup_buffer_enter() and s:setup_filetype()
|
||||||
|
" Once should be enough ...
|
||||||
|
endif
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom " Setup_buffer_reenter g:curr_idx=".g:vimwiki_current_idx." b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:setup_cleared_syntax() "{{{ highlight groups that get cleared
|
||||||
|
" on colorscheme change because they are not linked to Vim-predefined groups
|
||||||
|
hi def VimwikiBold term=bold cterm=bold gui=bold
|
||||||
|
hi def VimwikiItalic term=italic cterm=italic gui=italic
|
||||||
|
hi def VimwikiBoldItalic term=bold cterm=bold gui=bold,italic
|
||||||
|
hi def VimwikiUnderline gui=underline
|
||||||
|
if g:vimwiki_hl_headers == 1
|
||||||
|
for i in range(1,6)
|
||||||
|
execute 'hi def VimwikiHeader'.i.' guibg=bg guifg='.g:vimwiki_hcolor_guifg_{&bg}[i-1].' gui=bold ctermfg='.g:vimwiki_hcolor_ctermfg_{&bg}[i-1].' term=bold cterm=bold'
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
" OPTION get/set functions {{{
|
" OPTION get/set functions {{{
|
||||||
" return value of option for current wiki or if second parameter exists for
|
" return complete list of options
|
||||||
" wiki with a given index.
|
function! VimwikiGetOptionNames() "{{{
|
||||||
|
return keys(s:vimwiki_defaults)
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! VimwikiGetOptions(...) "{{{
|
||||||
|
let idx = a:0 == 0 ? g:vimwiki_current_idx : a:1
|
||||||
|
let option_dict = {}
|
||||||
|
for kk in keys(s:vimwiki_defaults)
|
||||||
|
let option_dict[kk] = VimwikiGet(kk, idx)
|
||||||
|
endfor
|
||||||
|
return option_dict
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
" Return value of option for current wiki or if second parameter exists for
|
||||||
|
" wiki with a given index.
|
||||||
|
" If the option is not found, it is assumed to have been previously cached in a
|
||||||
|
" buffer local dictionary, that acts as a cache.
|
||||||
|
" If the option is not found in the buffer local dictionary, an error is thrown
|
||||||
function! VimwikiGet(option, ...) "{{{
|
function! VimwikiGet(option, ...) "{{{
|
||||||
if a:0 == 0
|
let idx = a:0 == 0 ? g:vimwiki_current_idx : a:1
|
||||||
let idx = g:vimwiki_current_idx
|
|
||||||
|
if has_key(g:vimwiki_list[idx], a:option)
|
||||||
|
let val = g:vimwiki_list[idx][a:option]
|
||||||
|
elseif has_key(s:vimwiki_defaults, a:option)
|
||||||
|
let val = s:vimwiki_defaults[a:option]
|
||||||
|
let g:vimwiki_list[idx][a:option] = val
|
||||||
else
|
else
|
||||||
let idx = a:1
|
let val = b:vimwiki_list[a:option]
|
||||||
endif
|
|
||||||
if !has_key(g:vimwiki_list[idx], a:option) &&
|
|
||||||
\ has_key(s:vimwiki_defaults, a:option)
|
|
||||||
if a:option == 'path_html'
|
|
||||||
let g:vimwiki_list[idx][a:option] =
|
|
||||||
\VimwikiGet('path', idx)[:-2].'_html/'
|
|
||||||
else
|
|
||||||
let g:vimwiki_list[idx][a:option] =
|
|
||||||
\s:vimwiki_defaults[a:option]
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" if path's ending is not a / or \
|
" XXX no call to vimwiki#base here or else the whole autoload/base gets loaded!
|
||||||
" then add it
|
return val
|
||||||
if a:option == 'path' || a:option == 'path_html'
|
|
||||||
let p = g:vimwiki_list[idx][a:option]
|
|
||||||
" resolve doesn't work quite right with symlinks ended with / or \
|
|
||||||
let p = substitute(p, '[/\\]\+$', '', '')
|
|
||||||
let p = resolve(expand(p))
|
|
||||||
let g:vimwiki_list[idx][a:option] = p.'/'
|
|
||||||
endif
|
|
||||||
|
|
||||||
return g:vimwiki_list[idx][a:option]
|
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
" set option for current wiki or if third parameter exists for
|
" Set option for current wiki or if third parameter exists for
|
||||||
" wiki with a given index.
|
" wiki with a given index.
|
||||||
|
" If the option is not found or recognized (i.e. does not exist in
|
||||||
|
" s:vimwiki_defaults), it is saved in a buffer local dictionary, that acts
|
||||||
|
" as a cache.
|
||||||
|
" If the option is not found in the buffer local dictionary, an error is thrown
|
||||||
function! VimwikiSet(option, value, ...) "{{{
|
function! VimwikiSet(option, value, ...) "{{{
|
||||||
if a:0 == 0
|
let idx = a:0 == 0 ? g:vimwiki_current_idx : a:1
|
||||||
let idx = g:vimwiki_current_idx
|
|
||||||
|
if has_key(s:vimwiki_defaults, a:option) ||
|
||||||
|
\ has_key(g:vimwiki_list[idx], a:option)
|
||||||
|
let g:vimwiki_list[idx][a:option] = a:value
|
||||||
|
elseif exists('b:vimwiki_list')
|
||||||
|
let b:vimwiki_list[a:option] = a:value
|
||||||
else
|
else
|
||||||
let idx = a:1
|
let b:vimwiki_list = {}
|
||||||
|
let b:vimwiki_list[a:option] = a:value
|
||||||
endif
|
endif
|
||||||
let g:vimwiki_list[idx][a:option] = a:value
|
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
" }}}
|
" }}}
|
||||||
|
|
||||||
" }}}
|
" }}}
|
||||||
|
|
||||||
" CALLBACK function "{{{
|
" CALLBACK functions "{{{
|
||||||
" User can redefine it.
|
" User can redefine it.
|
||||||
if !exists("*VimwikiWeblinkHandler") "{{{
|
if !exists("*VimwikiLinkHandler") "{{{
|
||||||
function VimwikiWeblinkHandler(weblink)
|
function VimwikiLinkHandler(url)
|
||||||
for browser in g:vimwiki_browsers
|
return 0
|
||||||
if executable(browser)
|
|
||||||
if has("win32")
|
|
||||||
execute '!start "'.browser.'" "' . a:weblink . '"'
|
|
||||||
else
|
|
||||||
execute '!'.browser.' "' . a:weblink . '"'
|
|
||||||
endif
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
endfunction
|
endfunction
|
||||||
endif "}}}
|
endif "}}}
|
||||||
|
|
||||||
|
if !exists("*VimwikiWikiIncludeHandler") "{{{
|
||||||
|
function! VimwikiWikiIncludeHandler(value) "{{{
|
||||||
|
" Return the empty string when unable to process link
|
||||||
|
return ''
|
||||||
|
endfunction "}}}
|
||||||
|
endif "}}}
|
||||||
" CALLBACK }}}
|
" CALLBACK }}}
|
||||||
|
|
||||||
" DEFAULT wiki {{{
|
" DEFAULT wiki {{{
|
||||||
let s:vimwiki_defaults = {}
|
let s:vimwiki_defaults = {}
|
||||||
let s:vimwiki_defaults.path = '~/vimwiki/'
|
let s:vimwiki_defaults.path = '~/vimwiki/'
|
||||||
let s:vimwiki_defaults.path_html = '~/vimwiki_html/'
|
let s:vimwiki_defaults.path_html = '' " '' is replaced by derived path.'_html/'
|
||||||
let s:vimwiki_defaults.css_name = 'style.css'
|
let s:vimwiki_defaults.css_name = 'style.css'
|
||||||
let s:vimwiki_defaults.index = 'index'
|
let s:vimwiki_defaults.index = 'index'
|
||||||
let s:vimwiki_defaults.ext = '.wiki'
|
let s:vimwiki_defaults.ext = '.wiki'
|
||||||
let s:vimwiki_defaults.maxhi = 1
|
let s:vimwiki_defaults.maxhi = 0
|
||||||
let s:vimwiki_defaults.syntax = 'default'
|
let s:vimwiki_defaults.syntax = 'default'
|
||||||
|
|
||||||
let s:vimwiki_defaults.template_path = '~/vimwiki/templates/'
|
let s:vimwiki_defaults.template_path = ''
|
||||||
let s:vimwiki_defaults.template_default = 'default'
|
let s:vimwiki_defaults.template_default = ''
|
||||||
let s:vimwiki_defaults.template_ext = '.html'
|
let s:vimwiki_defaults.template_ext = ''
|
||||||
|
|
||||||
let s:vimwiki_defaults.nested_syntaxes = {}
|
let s:vimwiki_defaults.nested_syntaxes = {}
|
||||||
let s:vimwiki_defaults.auto_export = 0
|
let s:vimwiki_defaults.auto_export = 0
|
||||||
@ -222,26 +340,20 @@ let s:vimwiki_defaults.temp = 0
|
|||||||
let s:vimwiki_defaults.diary_rel_path = 'diary/'
|
let s:vimwiki_defaults.diary_rel_path = 'diary/'
|
||||||
let s:vimwiki_defaults.diary_index = 'diary'
|
let s:vimwiki_defaults.diary_index = 'diary'
|
||||||
let s:vimwiki_defaults.diary_header = 'Diary'
|
let s:vimwiki_defaults.diary_header = 'Diary'
|
||||||
|
let s:vimwiki_defaults.diary_sort = 'desc'
|
||||||
|
|
||||||
" Do not change this! Will wait till vim become more datetime awareable.
|
" Do not change this! Will wait till vim become more datetime awareable.
|
||||||
let s:vimwiki_defaults.diary_link_fmt = '%Y-%m-%d'
|
let s:vimwiki_defaults.diary_link_fmt = '%Y-%m-%d'
|
||||||
|
|
||||||
let s:vimwiki_defaults.diary_link_count = 4
|
" NEW! in v2.0
|
||||||
|
" custom_wiki2html
|
||||||
|
let s:vimwiki_defaults.custom_wiki2html = ''
|
||||||
|
"
|
||||||
|
let s:vimwiki_defaults.list_margin = -1
|
||||||
"}}}
|
"}}}
|
||||||
|
|
||||||
" DEFAULT options {{{
|
" DEFAULT options {{{
|
||||||
call s:default('list', [s:vimwiki_defaults])
|
call s:default('list', [s:vimwiki_defaults])
|
||||||
if &encoding == 'utf-8'
|
|
||||||
call s:default('upper', 'A-Z\u0410-\u042f')
|
|
||||||
call s:default('lower', 'a-z\u0430-\u044f')
|
|
||||||
else
|
|
||||||
call s:default('upper', 'A-Z')
|
|
||||||
call s:default('lower', 'a-z')
|
|
||||||
endif
|
|
||||||
call s:default('other', '0-9')
|
|
||||||
call s:default('stripsym', '_')
|
|
||||||
call s:default('badsyms', '')
|
|
||||||
call s:default('auto_checkbox', 1)
|
call s:default('auto_checkbox', 1)
|
||||||
call s:default('use_mouse', 0)
|
call s:default('use_mouse', 0)
|
||||||
call s:default('folding', 0)
|
call s:default('folding', 0)
|
||||||
@ -249,77 +361,61 @@ call s:default('fold_trailing_empty_lines', 0)
|
|||||||
call s:default('fold_lists', 0)
|
call s:default('fold_lists', 0)
|
||||||
call s:default('menu', 'Vimwiki')
|
call s:default('menu', 'Vimwiki')
|
||||||
call s:default('global_ext', 1)
|
call s:default('global_ext', 1)
|
||||||
|
call s:default('ext2syntax', {'.md': 'markdown'}) " syntax map keyed on extension
|
||||||
call s:default('hl_headers', 0)
|
call s:default('hl_headers', 0)
|
||||||
call s:default('hl_cb_checked', 0)
|
call s:default('hl_cb_checked', 0)
|
||||||
call s:default('camel_case', 1)
|
|
||||||
call s:default('list_ignore_newline', 1)
|
call s:default('list_ignore_newline', 1)
|
||||||
call s:default('listsyms', ' .oOX')
|
call s:default('listsyms', ' .oOX')
|
||||||
if has("win32")
|
|
||||||
call s:default('browsers',
|
|
||||||
\ [
|
|
||||||
\ expand('~').'\Local Settings\Application Data\Google\Chrome\Application\chrome.exe',
|
|
||||||
\ 'C:\Program Files\Opera\opera.exe',
|
|
||||||
\ 'C:\Program Files\Mozilla Firefox\firefox.exe',
|
|
||||||
\ 'C:\Program Files\Internet Explorer\iexplore.exe',
|
|
||||||
\ ])
|
|
||||||
else
|
|
||||||
call s:default('browsers',
|
|
||||||
\ [
|
|
||||||
\ 'chromium-browser',
|
|
||||||
\ 'opera',
|
|
||||||
\ 'firefox',
|
|
||||||
\ 'konqueror',
|
|
||||||
\ ])
|
|
||||||
endif
|
|
||||||
|
|
||||||
call s:default('use_calendar', 1)
|
call s:default('use_calendar', 1)
|
||||||
|
call s:default('table_mappings', 1)
|
||||||
call s:default('table_auto_fmt', 1)
|
call s:default('table_auto_fmt', 1)
|
||||||
call s:default('w32_dir_enc', '')
|
call s:default('w32_dir_enc', '')
|
||||||
call s:default('CJK_length', 0)
|
call s:default('CJK_length', 0)
|
||||||
call s:default('dir_link', '')
|
call s:default('dir_link', '')
|
||||||
call s:default('file_exts', 'pdf,txt,doc,rtf,xls,php,zip,rar,7z,html,gz')
|
|
||||||
call s:default('valid_html_tags', 'b,i,s,u,sub,sup,kbd,br,hr,div,center,strong,em')
|
call s:default('valid_html_tags', 'b,i,s,u,sub,sup,kbd,br,hr,div,center,strong,em')
|
||||||
call s:default('user_htmls', '')
|
call s:default('user_htmls', '')
|
||||||
|
|
||||||
call s:default('html_header_numbering', 0)
|
call s:default('html_header_numbering', 0)
|
||||||
call s:default('html_header_numbering_sym', '')
|
call s:default('html_header_numbering_sym', '')
|
||||||
call s:default('conceallevel', 3)
|
call s:default('conceallevel', 2)
|
||||||
|
call s:default('url_mingain', 12)
|
||||||
|
call s:default('url_maxsave', 15)
|
||||||
|
call s:default('debug', 0)
|
||||||
|
|
||||||
|
call s:default('diary_months',
|
||||||
|
\ {
|
||||||
|
\ 1: 'January', 2: 'February', 3: 'March',
|
||||||
|
\ 4: 'April', 5: 'May', 6: 'June',
|
||||||
|
\ 7: 'July', 8: 'August', 9: 'September',
|
||||||
|
\ 10: 'October', 11: 'November', 12: 'December'
|
||||||
|
\ })
|
||||||
|
|
||||||
|
|
||||||
call s:default('current_idx', 0)
|
call s:default('current_idx', 0)
|
||||||
|
|
||||||
let upp = g:vimwiki_upper
|
" Scheme regexes should be defined even if syntax file is not loaded yet
|
||||||
let low = g:vimwiki_lower
|
" cause users should be able to <leader>w<leader>w without opening any
|
||||||
let oth = g:vimwiki_other
|
" vimwiki file first
|
||||||
let nup = low.oth
|
" Scheme regexes {{{
|
||||||
let nlo = upp.oth
|
call s:default('schemes', 'wiki\d\+,diary,local')
|
||||||
let any = upp.nup
|
call s:default('web_schemes1', 'http,https,file,ftp,gopher,telnet,nntp,ldap,'.
|
||||||
|
\ 'rsync,imap,pop,irc,ircs,cvs,svn,svn+ssh,git,ssh,fish,sftp')
|
||||||
|
call s:default('web_schemes2', 'mailto,news,xmpp,sip,sips,doi,urn,tel')
|
||||||
|
|
||||||
let wword = '\C\<['.upp.']['.nlo.']*['.low.']['.nup.']*['.upp.']['.any.']*\>'
|
let rxSchemes = '\%('.
|
||||||
let g:vimwiki_rxWikiWord = '!\@<!'.wword
|
\ join(split(g:vimwiki_schemes, '\s*,\s*'), '\|').'\|'.
|
||||||
let g:vimwiki_rxNoWikiWord = '!'.wword
|
\ join(split(g:vimwiki_web_schemes1, '\s*,\s*'), '\|').'\|'.
|
||||||
|
\ join(split(g:vimwiki_web_schemes2, '\s*,\s*'), '\|').
|
||||||
|
\ '\)'
|
||||||
|
|
||||||
let g:vimwiki_rxWikiLink1 = '\[\[[^\]]\+\]\]'
|
call s:default('rxSchemeUrl', rxSchemes.':.*')
|
||||||
let g:vimwiki_rxWikiLink2 = '\[\[[^\]]\+\]\[[^\]]\+\]\]'
|
call s:default('rxSchemeUrlMatchScheme', '\zs'.rxSchemes.'\ze:.*')
|
||||||
if g:vimwiki_camel_case
|
call s:default('rxSchemeUrlMatchUrl', rxSchemes.':\zs.*\ze')
|
||||||
let g:vimwiki_rxWikiLink = g:vimwiki_rxWikiWord.'\|'.
|
" scheme regexes }}}
|
||||||
\ g:vimwiki_rxWikiLink1.'\|'.g:vimwiki_rxWikiLink2
|
|
||||||
else
|
|
||||||
let g:vimwiki_rxWikiLink = g:vimwiki_rxWikiLink1.'\|'.g:vimwiki_rxWikiLink2
|
|
||||||
endif
|
|
||||||
let g:vimwiki_rxWeblink = '\%("[^"(]\+\((\([^)]\+\))\)\?":\)\?'.
|
|
||||||
\'\%('.
|
|
||||||
\'\%('.
|
|
||||||
\'\%(https\?\|ftp\|gopher\|telnet\|file\|notes\|ms-help\):'.
|
|
||||||
\'\%(\%(//\)\|\%(\\\\\)\)'.
|
|
||||||
\'\)'.
|
|
||||||
\'\|\%(mailto:\)'.
|
|
||||||
\'\)'.
|
|
||||||
\'\+\S\+'.
|
|
||||||
\'[().,?\]]\@<!'
|
|
||||||
"}}}
|
"}}}
|
||||||
|
|
||||||
" AUTOCOMMANDS for all known wiki extensions {{{
|
" AUTOCOMMANDS for all known wiki extensions {{{
|
||||||
" Getting all extensions that different wikies could have
|
" Getting all extensions that different wikis could have
|
||||||
let extensions = {}
|
let extensions = {}
|
||||||
for wiki in g:vimwiki_list
|
for wiki in g:vimwiki_list
|
||||||
if has_key(wiki, 'ext')
|
if has_key(wiki, 'ext')
|
||||||
@ -328,6 +424,10 @@ for wiki in g:vimwiki_list
|
|||||||
let extensions['.wiki'] = 1
|
let extensions['.wiki'] = 1
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
|
" append map g:vimwiki_ext2syntax
|
||||||
|
for ext in keys(g:vimwiki_ext2syntax)
|
||||||
|
let extensions[ext] = 1
|
||||||
|
endfor
|
||||||
|
|
||||||
augroup filetypedetect
|
augroup filetypedetect
|
||||||
" clear FlexWiki's stuff
|
" clear FlexWiki's stuff
|
||||||
@ -337,16 +437,11 @@ augroup end
|
|||||||
augroup vimwiki
|
augroup vimwiki
|
||||||
autocmd!
|
autocmd!
|
||||||
for ext in keys(extensions)
|
for ext in keys(extensions)
|
||||||
|
exe 'autocmd BufEnter *'.ext.' call s:setup_buffer_reenter()'
|
||||||
exe 'autocmd BufWinEnter *'.ext.' call s:setup_buffer_enter()'
|
exe 'autocmd BufWinEnter *'.ext.' call s:setup_buffer_enter()'
|
||||||
exe 'autocmd BufLeave,BufHidden *'.ext.' call s:setup_buffer_leave()'
|
exe 'autocmd BufLeave,BufHidden *'.ext.' call s:setup_buffer_leave()'
|
||||||
exe 'autocmd BufNewFile,BufRead, *'.ext.' call s:setup_filetype()'
|
exe 'autocmd BufNewFile,BufRead, *'.ext.' call s:setup_filetype()'
|
||||||
|
exe 'autocmd ColorScheme *'.ext.' call s:setup_cleared_syntax()'
|
||||||
" ColorScheme could have or could have not a
|
|
||||||
" VimwikiHeader1..VimwikiHeader6 highlight groups. We need to refresh
|
|
||||||
" syntax after colorscheme change.
|
|
||||||
exe 'autocmd ColorScheme *'.ext.' syntax enable'.
|
|
||||||
\ ' | call vimwiki#base#highlight_links()'
|
|
||||||
|
|
||||||
" Format tables when exit from insert mode. Do not use textwidth to
|
" Format tables when exit from insert mode. Do not use textwidth to
|
||||||
" autowrap tables.
|
" autowrap tables.
|
||||||
if g:vimwiki_table_auto_fmt
|
if g:vimwiki_table_auto_fmt
|
||||||
@ -359,17 +454,22 @@ augroup END
|
|||||||
|
|
||||||
" COMMANDS {{{
|
" COMMANDS {{{
|
||||||
command! VimwikiUISelect call vimwiki#base#ui_select()
|
command! VimwikiUISelect call vimwiki#base#ui_select()
|
||||||
command! -count VimwikiIndex
|
" XXX: why not using <count> instead of v:count1?
|
||||||
\ call vimwiki#base#goto_index(v:count1)
|
" See Issue 324.
|
||||||
command! -count VimwikiTabIndex tabedit <bar>
|
command! -count=1 VimwikiIndex
|
||||||
\ call vimwiki#base#goto_index(v:count1)
|
\ call vimwiki#base#goto_index(v:count1)
|
||||||
|
command! -count=1 VimwikiTabIndex
|
||||||
|
\ call vimwiki#base#goto_index(v:count1, 1)
|
||||||
|
|
||||||
command! -count VimwikiDiaryIndex
|
command! -count=1 VimwikiDiaryIndex
|
||||||
\ call vimwiki#diary#goto_index(v:count1)
|
\ call vimwiki#diary#goto_diary_index(v:count1)
|
||||||
command! -count VimwikiMakeDiaryNote
|
command! -count=1 VimwikiMakeDiaryNote
|
||||||
\ call vimwiki#diary#make_note(v:count1)
|
|
||||||
command! -count VimwikiTabMakeDiaryNote tabedit <bar>
|
|
||||||
\ call vimwiki#diary#make_note(v:count1)
|
\ call vimwiki#diary#make_note(v:count1)
|
||||||
|
command! -count=1 VimwikiTabMakeDiaryNote
|
||||||
|
\ call vimwiki#diary#make_note(v:count1, 1)
|
||||||
|
|
||||||
|
command! VimwikiDiaryGenerateLinks
|
||||||
|
\ call vimwiki#diary#generate_diary_section()
|
||||||
"}}}
|
"}}}
|
||||||
|
|
||||||
" MAPPINGS {{{
|
" MAPPINGS {{{
|
||||||
@ -393,6 +493,11 @@ if !hasmapto('<Plug>VimwikiDiaryIndex')
|
|||||||
endif
|
endif
|
||||||
nnoremap <unique><script> <Plug>VimwikiDiaryIndex :VimwikiDiaryIndex<CR>
|
nnoremap <unique><script> <Plug>VimwikiDiaryIndex :VimwikiDiaryIndex<CR>
|
||||||
|
|
||||||
|
if !hasmapto('<Plug>VimwikiDiaryGenerateLinks')
|
||||||
|
nmap <silent><unique> <Leader>w<Leader>i <Plug>VimwikiDiaryGenerateLinks
|
||||||
|
endif
|
||||||
|
nnoremap <unique><script> <Plug>VimwikiDiaryGenerateLinks :VimwikiDiaryGenerateLinks<CR>
|
||||||
|
|
||||||
if !hasmapto('<Plug>VimwikiMakeDiaryNote')
|
if !hasmapto('<Plug>VimwikiMakeDiaryNote')
|
||||||
nmap <silent><unique> <Leader>w<Leader>w <Plug>VimwikiMakeDiaryNote
|
nmap <silent><unique> <Leader>w<Leader>w <Plug>VimwikiMakeDiaryNote
|
||||||
endif
|
endif
|
||||||
@ -429,6 +534,7 @@ function! s:build_table_menu(topmenu)
|
|||||||
exe 'nmenu disable '.a:topmenu.'.Table'
|
exe 'nmenu disable '.a:topmenu.'.Table'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
"XXX make sure anything below does not cause autoload/base to be loaded
|
||||||
if !empty(g:vimwiki_menu)
|
if !empty(g:vimwiki_menu)
|
||||||
call s:build_menu(g:vimwiki_menu)
|
call s:build_menu(g:vimwiki_menu)
|
||||||
call s:build_table_menu(g:vimwiki_menu)
|
call s:build_table_menu(g:vimwiki_menu)
|
||||||
@ -442,4 +548,5 @@ if g:vimwiki_use_calendar
|
|||||||
endif
|
endif
|
||||||
"}}}
|
"}}}
|
||||||
|
|
||||||
|
|
||||||
let &cpo = s:old_cpo
|
let &cpo = s:old_cpo
|
||||||
|
@ -9,30 +9,331 @@ if version < 600
|
|||||||
elseif exists("b:current_syntax")
|
elseif exists("b:current_syntax")
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
"TODO do nothing if ...? (?)
|
||||||
|
let starttime = reltime() " start the clock
|
||||||
|
if VimwikiGet('maxhi')
|
||||||
|
let b:existing_wikifiles = vimwiki#base#get_links('*'.VimwikiGet('ext'))
|
||||||
|
let b:existing_wikidirs = vimwiki#base#get_links('*/')
|
||||||
|
endif
|
||||||
|
let timescans = vimwiki#u#time(starttime) "XXX
|
||||||
|
"let b:xxx = 1
|
||||||
|
"TODO ? update wikilink syntax group here if really needed (?) for :e and such
|
||||||
|
"if VimwikiGet('maxhi')
|
||||||
|
" ...
|
||||||
|
"endif
|
||||||
|
|
||||||
" Links highlighting is controlled by vimwiki#base#highlight_links() function.
|
" LINKS: assume this is common to all syntaxes "{{{
|
||||||
" It is called from setup_buffer_enter() function in the BufEnter autocommand.
|
|
||||||
|
|
||||||
" Load concrete Wiki syntax
|
" LINKS: WebLinks {{{
|
||||||
|
" match URL for common protocols;
|
||||||
|
" see http://en.wikipedia.org/wiki/URI_scheme http://tools.ietf.org/html/rfc3986
|
||||||
|
let g:vimwiki_rxWebProtocols = ''.
|
||||||
|
\ '\%('.
|
||||||
|
\ '\%('.
|
||||||
|
\ '\%('.join(split(g:vimwiki_web_schemes1, '\s*,\s*'), '\|').'\):'.
|
||||||
|
\ '\%(//\)'.
|
||||||
|
\ '\)'.
|
||||||
|
\ '\|'.
|
||||||
|
\ '\%('.join(split(g:vimwiki_web_schemes2, '\s*,\s*'), '\|').'\):'.
|
||||||
|
\ '\)'
|
||||||
|
"
|
||||||
|
let g:vimwiki_rxWeblinkUrl = g:vimwiki_rxWebProtocols .
|
||||||
|
\ '\S\{-1,}'. '\%(([^ \t()]*)\)\='
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" -------------------------------------------------------------------------
|
||||||
|
" Load concrete Wiki syntax: sets regexes and templates for headers and links
|
||||||
execute 'runtime! syntax/vimwiki_'.VimwikiGet('syntax').'.vim'
|
execute 'runtime! syntax/vimwiki_'.VimwikiGet('syntax').'.vim'
|
||||||
|
" -------------------------------------------------------------------------
|
||||||
|
let time0 = vimwiki#u#time(starttime) "XXX
|
||||||
|
|
||||||
" Concealed chars
|
|
||||||
|
" LINKS: setup of larger regexes {{{
|
||||||
|
|
||||||
|
" LINKS: setup wikilink regexps {{{
|
||||||
|
let g:vimwiki_rxWikiLinkPrefix = '[['
|
||||||
|
let g:vimwiki_rxWikiLinkSuffix = ']]'
|
||||||
|
let g:vimwiki_rxWikiLinkSeparator = '|'
|
||||||
|
" [[URL]]
|
||||||
|
let g:vimwiki_WikiLinkTemplate1 = g:vimwiki_rxWikiLinkPrefix . '__LinkUrl__'.
|
||||||
|
\ g:vimwiki_rxWikiLinkSuffix
|
||||||
|
" [[URL|DESCRIPTION]]
|
||||||
|
let g:vimwiki_WikiLinkTemplate2 = g:vimwiki_rxWikiLinkPrefix . '__LinkUrl__'.
|
||||||
|
\ g:vimwiki_rxWikiLinkSeparator. '__LinkDescription__'.
|
||||||
|
\ g:vimwiki_rxWikiLinkSuffix
|
||||||
|
"
|
||||||
|
let magic_chars = '.*[]\^$'
|
||||||
|
let valid_chars = '[^\\]'
|
||||||
|
|
||||||
|
let g:vimwiki_rxWikiLinkPrefix = escape(g:vimwiki_rxWikiLinkPrefix, magic_chars)
|
||||||
|
let g:vimwiki_rxWikiLinkSuffix = escape(g:vimwiki_rxWikiLinkSuffix, magic_chars)
|
||||||
|
let g:vimwiki_rxWikiLinkSeparator = escape(g:vimwiki_rxWikiLinkSeparator, magic_chars)
|
||||||
|
let g:vimwiki_rxWikiLinkUrl = valid_chars.'\{-}'
|
||||||
|
let g:vimwiki_rxWikiLinkDescr = valid_chars.'\{-}'
|
||||||
|
|
||||||
|
let g:vimwiki_rxWord = '[^[:blank:]()\\]\+'
|
||||||
|
|
||||||
|
"
|
||||||
|
" [[URL]], or [[URL|DESCRIPTION]]
|
||||||
|
" a) match [[URL|DESCRIPTION]]
|
||||||
|
let g:vimwiki_rxWikiLink = g:vimwiki_rxWikiLinkPrefix.
|
||||||
|
\ g:vimwiki_rxWikiLinkUrl.'\%('.g:vimwiki_rxWikiLinkSeparator.
|
||||||
|
\ g:vimwiki_rxWikiLinkDescr.'\)\?'.g:vimwiki_rxWikiLinkSuffix
|
||||||
|
" b) match URL within [[URL|DESCRIPTION]]
|
||||||
|
let g:vimwiki_rxWikiLinkMatchUrl = g:vimwiki_rxWikiLinkPrefix.
|
||||||
|
\ '\zs'. g:vimwiki_rxWikiLinkUrl.'\ze\%('. g:vimwiki_rxWikiLinkSeparator.
|
||||||
|
\ g:vimwiki_rxWikiLinkDescr.'\)\?'.g:vimwiki_rxWikiLinkSuffix
|
||||||
|
" c) match DESCRIPTION within [[URL|DESCRIPTION]]
|
||||||
|
let g:vimwiki_rxWikiLinkMatchDescr = g:vimwiki_rxWikiLinkPrefix.
|
||||||
|
\ g:vimwiki_rxWikiLinkUrl.g:vimwiki_rxWikiLinkSeparator.'\%('.
|
||||||
|
\ '\zs'. g:vimwiki_rxWikiLinkDescr. '\ze\)\?'. g:vimwiki_rxWikiLinkSuffix
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" LINKS: Syntax helper {{{
|
||||||
|
let g:vimwiki_rxWikiLinkPrefix1 = g:vimwiki_rxWikiLinkPrefix.
|
||||||
|
\ g:vimwiki_rxWikiLinkUrl.g:vimwiki_rxWikiLinkSeparator
|
||||||
|
let g:vimwiki_rxWikiLinkSuffix1 = g:vimwiki_rxWikiLinkSuffix
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
|
||||||
|
" LINKS: setup of wikiincl regexps {{{
|
||||||
|
let g:vimwiki_rxWikiInclPrefix = '{{'
|
||||||
|
let g:vimwiki_rxWikiInclSuffix = '}}'
|
||||||
|
let g:vimwiki_rxWikiInclSeparator = '|'
|
||||||
|
"
|
||||||
|
" '{{__LinkUrl__}}'
|
||||||
|
let g:vimwiki_WikiInclTemplate1 = g:vimwiki_rxWikiInclPrefix . '__LinkUrl__'.
|
||||||
|
\ g:vimwiki_rxWikiInclSuffix
|
||||||
|
" '{{__LinkUrl____LinkDescription__}}'
|
||||||
|
let g:vimwiki_WikiInclTemplate2 = g:vimwiki_rxWikiInclPrefix . '__LinkUrl__'.
|
||||||
|
\ '__LinkDescription__'.
|
||||||
|
\ g:vimwiki_rxWikiInclSuffix
|
||||||
|
|
||||||
|
let g:vimwiki_rxWikiInclPrefix = escape(g:vimwiki_rxWikiInclPrefix, magic_chars)
|
||||||
|
let g:vimwiki_rxWikiInclSuffix = escape(g:vimwiki_rxWikiInclSuffix, magic_chars)
|
||||||
|
let g:vimwiki_rxWikiInclSeparator = escape(g:vimwiki_rxWikiInclSeparator, magic_chars)
|
||||||
|
let g:vimwiki_rxWikiInclUrl = valid_chars.'\{-}'
|
||||||
|
let g:vimwiki_rxWikiInclArg = valid_chars.'\{-}'
|
||||||
|
let g:vimwiki_rxWikiInclArgs = '\%('. g:vimwiki_rxWikiInclSeparator. g:vimwiki_rxWikiInclArg. '\)'.'\{-}'
|
||||||
|
"
|
||||||
|
"
|
||||||
|
" *. {{URL}[{...}]} - i.e. {{URL}}, {{URL|ARG1}}, {{URL|ARG1|ARG2}}, etc.
|
||||||
|
" *a) match {{URL}[{...}]}
|
||||||
|
let g:vimwiki_rxWikiIncl = g:vimwiki_rxWikiInclPrefix.
|
||||||
|
\ g:vimwiki_rxWikiInclUrl.
|
||||||
|
\ g:vimwiki_rxWikiInclArgs. g:vimwiki_rxWikiInclSuffix
|
||||||
|
" *b) match URL within {{URL}[{...}]}
|
||||||
|
let g:vimwiki_rxWikiInclMatchUrl = g:vimwiki_rxWikiInclPrefix.
|
||||||
|
\ '\zs'. g:vimwiki_rxWikiInclUrl. '\ze'.
|
||||||
|
\ g:vimwiki_rxWikiInclArgs. g:vimwiki_rxWikiInclSuffix
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" LINKS: Syntax helper {{{
|
||||||
|
let g:vimwiki_rxWikiInclPrefix1 = g:vimwiki_rxWikiInclPrefix.
|
||||||
|
\ g:vimwiki_rxWikiInclUrl.g:vimwiki_rxWikiInclSeparator
|
||||||
|
let g:vimwiki_rxWikiInclSuffix1 = g:vimwiki_rxWikiInclArgs.
|
||||||
|
\ g:vimwiki_rxWikiInclSuffix
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" LINKS: Setup weblink regexps {{{
|
||||||
|
" 0. URL : free-standing links: keep URL UR(L) strip trailing punct: URL; URL) UR(L))
|
||||||
|
" let g:vimwiki_rxWeblink = '[\["(|]\@<!'. g:vimwiki_rxWeblinkUrl .
|
||||||
|
" \ '\%([),:;.!?]\=\%([ \t]\|$\)\)\@='
|
||||||
|
" Maxim:
|
||||||
|
" Simplify free-standing links: URL starts with non(letter|digit)scheme till
|
||||||
|
" the whitespace.
|
||||||
|
" Stuart, could you check it with markdown templated links? [](http://...), as
|
||||||
|
" the last bracket is the part of URL now?
|
||||||
|
let g:vimwiki_rxWeblink = '[[:alnum:]]\@<!'. g:vimwiki_rxWeblinkUrl . '\S*'
|
||||||
|
" 0a) match URL within URL
|
||||||
|
let g:vimwiki_rxWeblinkMatchUrl = g:vimwiki_rxWeblink
|
||||||
|
" 0b) match DESCRIPTION within URL
|
||||||
|
let g:vimwiki_rxWeblinkMatchDescr = ''
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
|
||||||
|
" LINKS: Setup anylink regexps {{{
|
||||||
|
let g:vimwiki_rxAnyLink = g:vimwiki_rxWikiLink.'\|'.
|
||||||
|
\ g:vimwiki_rxWikiIncl.'\|'.g:vimwiki_rxWeblink
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
|
||||||
|
" }}} end of Links
|
||||||
|
|
||||||
|
" LINKS: highlighting is complicated due to "nonexistent" links feature {{{
|
||||||
|
function! s:add_target_syntax_ON(target, type) " {{{
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echom '[vimwiki_debug] syntax target > '.a:target
|
||||||
|
endif
|
||||||
|
let prefix0 = 'syntax match '.a:type.' `'
|
||||||
|
let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,'.a:type.'Char'
|
||||||
|
let prefix1 = 'syntax match '.a:type.'T `'
|
||||||
|
let suffix1 = '` display contained'
|
||||||
|
execute prefix0. a:target. suffix0
|
||||||
|
execute prefix1. a:target. suffix1
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:add_target_syntax_OFF(target) " {{{
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echom '[vimwiki_debug] syntax target > '.a:target
|
||||||
|
endif
|
||||||
|
let prefix0 = 'syntax match VimwikiNoExistsLink `'
|
||||||
|
let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,VimwikiLinkChar'
|
||||||
|
let prefix1 = 'syntax match VimwikiNoExistsLinkT `'
|
||||||
|
let suffix1 = '` display contained'
|
||||||
|
execute prefix0. a:target. suffix0
|
||||||
|
execute prefix1. a:target. suffix1
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:highlight_existing_links() "{{{
|
||||||
|
" Wikilink
|
||||||
|
" Conditional highlighting that depends on the existence of a wiki file or
|
||||||
|
" directory is only available for *schemeless* wiki links
|
||||||
|
" Links are set up upon BufEnter (see plugin/...)
|
||||||
|
let safe_links = vimwiki#base#file_pattern(b:existing_wikifiles)
|
||||||
|
" Wikilink Dirs set up upon BufEnter (see plugin/...)
|
||||||
|
let safe_dirs = vimwiki#base#file_pattern(b:existing_wikidirs)
|
||||||
|
|
||||||
|
" match [[URL]]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLinkTemplate1,
|
||||||
|
\ safe_links, g:vimwiki_rxWikiLinkDescr, '')
|
||||||
|
call s:add_target_syntax_ON(target, 'VimwikiLink')
|
||||||
|
" match [[URL|DESCRIPTION]]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLinkTemplate2,
|
||||||
|
\ safe_links, g:vimwiki_rxWikiLinkDescr, '')
|
||||||
|
call s:add_target_syntax_ON(target, 'VimwikiLink')
|
||||||
|
|
||||||
|
" match {{URL}}
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiInclTemplate1,
|
||||||
|
\ safe_links, g:vimwiki_rxWikiInclArgs, '')
|
||||||
|
call s:add_target_syntax_ON(target, 'VimwikiLink')
|
||||||
|
" match {{URL|...}}
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiInclTemplate2,
|
||||||
|
\ safe_links, g:vimwiki_rxWikiInclArgs, '')
|
||||||
|
call s:add_target_syntax_ON(target, 'VimwikiLink')
|
||||||
|
" match [[DIRURL]]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLinkTemplate1,
|
||||||
|
\ safe_dirs, g:vimwiki_rxWikiLinkDescr, '')
|
||||||
|
call s:add_target_syntax_ON(target, 'VimwikiLink')
|
||||||
|
" match [[DIRURL|DESCRIPTION]]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLinkTemplate2,
|
||||||
|
\ safe_dirs, g:vimwiki_rxWikiLinkDescr, '')
|
||||||
|
call s:add_target_syntax_ON(target, 'VimwikiLink')
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
|
||||||
|
" use max highlighting - could be quite slow if there are too many wikifiles
|
||||||
|
if VimwikiGet('maxhi')
|
||||||
|
" WikiLink
|
||||||
|
call s:add_target_syntax_OFF(g:vimwiki_rxWikiLink)
|
||||||
|
" WikiIncl
|
||||||
|
call s:add_target_syntax_OFF(g:vimwiki_rxWikiIncl)
|
||||||
|
|
||||||
|
" Subsequently, links verified on vimwiki's path are highlighted as existing
|
||||||
|
let time01 = vimwiki#u#time(starttime) "XXX
|
||||||
|
call s:highlight_existing_links()
|
||||||
|
let time02 = vimwiki#u#time(starttime) "XXX
|
||||||
|
else
|
||||||
|
let time01 = vimwiki#u#time(starttime) "XXX
|
||||||
|
" Wikilink
|
||||||
|
call s:add_target_syntax_ON(g:vimwiki_rxWikiLink, 'VimwikiLink')
|
||||||
|
" WikiIncl
|
||||||
|
call s:add_target_syntax_ON(g:vimwiki_rxWikiIncl, 'VimwikiLink')
|
||||||
|
let time02 = vimwiki#u#time(starttime) "XXX
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Weblink
|
||||||
|
call s:add_target_syntax_ON(g:vimwiki_rxWeblink, 'VimwikiLink')
|
||||||
|
|
||||||
|
" WikiLink
|
||||||
|
" All remaining schemes are highlighted automatically
|
||||||
|
let rxSchemes = '\%('.
|
||||||
|
\ join(split(g:vimwiki_schemes, '\s*,\s*'), '\|').'\|'.
|
||||||
|
\ join(split(g:vimwiki_web_schemes1, '\s*,\s*'), '\|').
|
||||||
|
\ '\):'
|
||||||
|
|
||||||
|
" a) match [[nonwiki-scheme-URL]]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLinkTemplate1,
|
||||||
|
\ rxSchemes.g:vimwiki_rxWikiLinkUrl, g:vimwiki_rxWikiLinkDescr, '')
|
||||||
|
call s:add_target_syntax_ON(target, 'VimwikiLink')
|
||||||
|
" b) match [[nonwiki-scheme-URL|DESCRIPTION]]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLinkTemplate2,
|
||||||
|
\ rxSchemes.g:vimwiki_rxWikiLinkUrl, g:vimwiki_rxWikiLinkDescr, '')
|
||||||
|
call s:add_target_syntax_ON(target, 'VimwikiLink')
|
||||||
|
|
||||||
|
" a) match {{nonwiki-scheme-URL}}
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiInclTemplate1,
|
||||||
|
\ rxSchemes.g:vimwiki_rxWikiInclUrl, g:vimwiki_rxWikiInclArgs, '')
|
||||||
|
call s:add_target_syntax_ON(target, 'VimwikiLink')
|
||||||
|
" b) match {{nonwiki-scheme-URL}[{...}]}
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiInclTemplate2,
|
||||||
|
\ rxSchemes.g:vimwiki_rxWikiInclUrl, g:vimwiki_rxWikiInclArgs, '')
|
||||||
|
call s:add_target_syntax_ON(target, 'VimwikiLink')
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
|
||||||
|
" generic headers "{{{
|
||||||
|
if g:vimwiki_symH
|
||||||
|
"" symmetric
|
||||||
|
for i in range(1,6)
|
||||||
|
let g:vimwiki_rxH{i}_Template = repeat(g:vimwiki_rxH, i).' __Header__ '.repeat(g:vimwiki_rxH, i)
|
||||||
|
let g:vimwiki_rxH{i} = '^\s*'.g:vimwiki_rxH.'\{'.i.'}[^'.g:vimwiki_rxH.'].*[^'.g:vimwiki_rxH.']'.g:vimwiki_rxH.'\{'.i.'}\s*$'
|
||||||
|
endfor
|
||||||
|
let g:vimwiki_rxHeader = '^\s*\('.g:vimwiki_rxH.'\{1,6}\)\zs[^'.g:vimwiki_rxH.'].*[^'.g:vimwiki_rxH.']\ze\1\s*$'
|
||||||
|
else
|
||||||
|
" asymmetric
|
||||||
|
for i in range(1,6)
|
||||||
|
let g:vimwiki_rxH{i}_Template = repeat(g:vimwiki_rxH, i).' __Header__'
|
||||||
|
let g:vimwiki_rxH{i} = '^\s*'.g:vimwiki_rxH.'\{'.i.'}[^'.g:vimwiki_rxH.'].*$'
|
||||||
|
endfor
|
||||||
|
let g:vimwiki_rxHeader = '^\s*\('.g:vimwiki_rxH.'\{1,6}\)\zs[^'.g:vimwiki_rxH.'].*\ze$'
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Header levels, 1-6
|
||||||
|
for i in range(1,6)
|
||||||
|
execute 'syntax match VimwikiHeader'.i.' /'.g:vimwiki_rxH{i}.'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiCode,VimwikiLink,@Spell'
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" concealed chars " {{{
|
||||||
if exists("+conceallevel")
|
if exists("+conceallevel")
|
||||||
syntax conceal on
|
syntax conceal on
|
||||||
endif
|
endif
|
||||||
|
|
||||||
syntax spell toplevel
|
syntax spell toplevel
|
||||||
|
|
||||||
syn match VimwikiLinkChar contained /\[\[/
|
if g:vimwiki_debug > 1
|
||||||
syn match VimwikiLinkChar contained /\]\]/
|
echom 'WikiLink Prefix: '.g:vimwiki_rxWikiLinkPrefix1
|
||||||
syn match VimwikiLinkChar contained /\[\[[^\[\]\|]\{-}|\ze.\{-}]]/
|
echom 'WikiLink Suffix: '.g:vimwiki_rxWikiLinkSuffix1
|
||||||
syn match VimwikiLinkChar contained /\[\[[^\[\]\|]\{-}]\[\ze.\{-}]]/
|
echom 'WikiIncl Prefix: '.g:vimwiki_rxWikiInclPrefix1
|
||||||
|
echom 'WikiIncl Suffix: '.g:vimwiki_rxWikiInclSuffix1
|
||||||
|
endif
|
||||||
|
|
||||||
syn match VimwikiNoLinkChar contained /\[\[/
|
" VimwikiLinkChar is for syntax markers (and also URL when a description
|
||||||
syn match VimwikiNoLinkChar contained /\]\]/
|
" is present) and may be concealed
|
||||||
syn match VimwikiNoLinkChar contained /\[\[[^\[\]\|]\{-}|\ze.*]]/
|
let options = ' contained transparent contains=NONE'
|
||||||
syn match VimwikiNoLinkChar contained /\[\[[^\[\]\|]\{-}]\[\ze.*]]/
|
" conceal wikilinks
|
||||||
|
execute 'syn match VimwikiLinkChar /'.g:vimwiki_rxWikiLinkPrefix.'/'.options
|
||||||
|
execute 'syn match VimwikiLinkChar /'.g:vimwiki_rxWikiLinkSuffix.'/'.options
|
||||||
|
execute 'syn match VimwikiLinkChar /'.g:vimwiki_rxWikiLinkPrefix1.'/'.options
|
||||||
|
execute 'syn match VimwikiLinkChar /'.g:vimwiki_rxWikiLinkSuffix1.'/'.options
|
||||||
|
|
||||||
|
" conceal wikiincls
|
||||||
|
execute 'syn match VimwikiLinkChar /'.g:vimwiki_rxWikiInclPrefix.'/'.options
|
||||||
|
execute 'syn match VimwikiLinkChar /'.g:vimwiki_rxWikiInclSuffix.'/'.options
|
||||||
|
execute 'syn match VimwikiLinkChar /'.g:vimwiki_rxWikiInclPrefix1.'/'.options
|
||||||
|
execute 'syn match VimwikiLinkChar /'.g:vimwiki_rxWikiInclSuffix1.'/'.options
|
||||||
|
|
||||||
|
" A shortener for long URLs: LinkRest (a middle part of the URL) is concealed
|
||||||
|
execute 'syn match VimwikiLinkRest contained `\%(///\=[^/ \t]\+/\)\zs\S\{'
|
||||||
|
\.g:vimwiki_url_mingain.',}\ze\%([/#?]\w\|\S\{'
|
||||||
|
\.g:vimwiki_url_maxsave.'}\)` cchar=~ '.options
|
||||||
|
|
||||||
|
execute 'syn match VimwikiEqInChar contained /'.g:vimwiki_char_eqin.'/'
|
||||||
execute 'syn match VimwikiBoldChar contained /'.g:vimwiki_char_bold.'/'
|
execute 'syn match VimwikiBoldChar contained /'.g:vimwiki_char_bold.'/'
|
||||||
execute 'syn match VimwikiItalicChar contained /'.g:vimwiki_char_italic.'/'
|
execute 'syn match VimwikiItalicChar contained /'.g:vimwiki_char_italic.'/'
|
||||||
execute 'syn match VimwikiBoldItalicChar contained /'.g:vimwiki_char_bolditalic.'/'
|
execute 'syn match VimwikiBoldItalicChar contained /'.g:vimwiki_char_bolditalic.'/'
|
||||||
@ -44,9 +345,11 @@ execute 'syn match VimwikiSubScript contained /'.g:vimwiki_char_subscript.'/'
|
|||||||
if exists("+conceallevel")
|
if exists("+conceallevel")
|
||||||
syntax conceal off
|
syntax conceal off
|
||||||
endif
|
endif
|
||||||
|
" }}}
|
||||||
|
|
||||||
" Non concealed chars
|
" non concealed chars " {{{
|
||||||
syn match VimwikiHeaderChar contained /\%(^\s*=\+\)\|\%(=\+\s*$\)/
|
execute 'syn match VimwikiHeaderChar contained /\%(^\s*'.g:vimwiki_rxH.'\+\)\|\%('.g:vimwiki_rxH.'\+\s*$\)/'
|
||||||
|
execute 'syn match VimwikiEqInCharT contained /'.g:vimwiki_char_eqin.'/'
|
||||||
execute 'syn match VimwikiBoldCharT contained /'.g:vimwiki_char_bold.'/'
|
execute 'syn match VimwikiBoldCharT contained /'.g:vimwiki_char_bold.'/'
|
||||||
execute 'syn match VimwikiItalicCharT contained /'.g:vimwiki_char_italic.'/'
|
execute 'syn match VimwikiItalicCharT contained /'.g:vimwiki_char_italic.'/'
|
||||||
execute 'syn match VimwikiBoldItalicCharT contained /'.g:vimwiki_char_bolditalic.'/'
|
execute 'syn match VimwikiBoldItalicCharT contained /'.g:vimwiki_char_bolditalic.'/'
|
||||||
@ -56,21 +359,32 @@ execute 'syn match VimwikiDelTextCharT contained /'.g:vimwiki_char_deltext.'/'
|
|||||||
execute 'syn match VimwikiSuperScriptT contained /'.g:vimwiki_char_superscript.'/'
|
execute 'syn match VimwikiSuperScriptT contained /'.g:vimwiki_char_superscript.'/'
|
||||||
execute 'syn match VimwikiSubScriptT contained /'.g:vimwiki_char_subscript.'/'
|
execute 'syn match VimwikiSubScriptT contained /'.g:vimwiki_char_subscript.'/'
|
||||||
|
|
||||||
|
|
||||||
" Emoticons
|
" Emoticons
|
||||||
syntax match VimwikiEmoticons /\%((.)\|:[()|$@]\|:-[DOPS()\]|$@]\|;)\|:'(\)/
|
"syntax match VimwikiEmoticons /\%((.)\|:[()|$@]\|:-[DOPS()\]|$@]\|;)\|:'(\)/
|
||||||
|
|
||||||
let g:vimwiki_rxTodo = '\C\%(TODO:\|DONE:\|STARTED:\|FIXME:\|FIXED:\|XXX:\)'
|
let g:vimwiki_rxTodo = '\C\%(TODO:\|DONE:\|STARTED:\|FIXME:\|FIXED:\|XXX:\)'
|
||||||
execute 'syntax match VimwikiTodo /'. g:vimwiki_rxTodo .'/'
|
execute 'syntax match VimwikiTodo /'. g:vimwiki_rxTodo .'/'
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" main syntax groups {{{
|
||||||
|
|
||||||
" Tables
|
" Tables
|
||||||
syntax match VimwikiTableRow /^\s*|.\+|\s*$/
|
syntax match VimwikiTableRow /^\s*|.\+|\s*$/
|
||||||
\ transparent contains=VimwikiCellSeparator,VimwikiLinkT,
|
\ transparent contains=VimwikiCellSeparator,
|
||||||
\ VimwikiNoExistsLinkT,VimwikiEmoticons,VimwikiTodo,
|
\ VimwikiLinkT,
|
||||||
\ VimwikiBoldT,VimwikiItalicT,VimwikiBoldItalicT,VimwikiItalicBoldT,
|
\ VimwikiNoExistsLinkT,
|
||||||
\ VimwikiDelTextT,VimwikiSuperScriptT,VimwikiSubScriptT,VimwikiCodeT,
|
\ VimwikiEmoticons,
|
||||||
\ @Spell
|
\ VimwikiTodo,
|
||||||
|
\ VimwikiBoldT,
|
||||||
|
\ VimwikiItalicT,
|
||||||
|
\ VimwikiBoldItalicT,
|
||||||
|
\ VimwikiItalicBoldT,
|
||||||
|
\ VimwikiDelTextT,
|
||||||
|
\ VimwikiSuperScriptT,
|
||||||
|
\ VimwikiSubScriptT,
|
||||||
|
\ VimwikiCodeT,
|
||||||
|
\ VimwikiEqInT,
|
||||||
|
\ @Spell
|
||||||
syntax match VimwikiCellSeparator
|
syntax match VimwikiCellSeparator
|
||||||
\ /\%(|\)\|\%(-\@<=+\-\@=\)\|\%([|+]\@<=-\+\)/ contained
|
\ /\%(|\)\|\%(-\@<=+\-\@=\)\|\%([|+]\@<=-\+\)/ contained
|
||||||
|
|
||||||
@ -78,6 +392,23 @@ syntax match VimwikiCellSeparator
|
|||||||
execute 'syntax match VimwikiList /'.g:vimwiki_rxListBullet.'/'
|
execute 'syntax match VimwikiList /'.g:vimwiki_rxListBullet.'/'
|
||||||
execute 'syntax match VimwikiList /'.g:vimwiki_rxListNumber.'/'
|
execute 'syntax match VimwikiList /'.g:vimwiki_rxListNumber.'/'
|
||||||
execute 'syntax match VimwikiList /'.g:vimwiki_rxListDefine.'/'
|
execute 'syntax match VimwikiList /'.g:vimwiki_rxListDefine.'/'
|
||||||
|
" List item checkbox
|
||||||
|
"syntax match VimwikiCheckBox /\[.\?\]/
|
||||||
|
let g:vimwiki_rxCheckBox = '\s*\[['.g:vimwiki_listsyms.']\?\]\s'
|
||||||
|
" Todo lists have a checkbox
|
||||||
|
execute 'syntax match VimwikiListTodo /'.g:vimwiki_rxListBullet.g:vimwiki_rxCheckBox.'/'
|
||||||
|
execute 'syntax match VimwikiListTodo /'.g:vimwiki_rxListNumber.g:vimwiki_rxCheckBox.'/'
|
||||||
|
if g:vimwiki_hl_cb_checked
|
||||||
|
execute 'syntax match VimwikiCheckBoxDone /'.
|
||||||
|
\ g:vimwiki_rxListBullet.'\s*\['.g:vimwiki_listsyms[4].'\]\s.*$/'.
|
||||||
|
\ ' contains=VimwikiNoExistsLink,VimwikiLink'
|
||||||
|
execute 'syntax match VimwikiCheckBoxDone /'.
|
||||||
|
\ g:vimwiki_rxListNumber.'\s*\['.g:vimwiki_listsyms[4].'\]\s.*$/'.
|
||||||
|
\ ' contains=VimwikiNoExistsLink,VimwikiLink'
|
||||||
|
endif
|
||||||
|
|
||||||
|
execute 'syntax match VimwikiEqIn /'.g:vimwiki_rxEqIn.'/ contains=VimwikiEqInChar'
|
||||||
|
execute 'syntax match VimwikiEqInT /'.g:vimwiki_rxEqIn.'/ contained contains=VimwikiEqInCharT'
|
||||||
|
|
||||||
execute 'syntax match VimwikiBold /'.g:vimwiki_rxBold.'/ contains=VimwikiBoldChar,@Spell'
|
execute 'syntax match VimwikiBold /'.g:vimwiki_rxBold.'/ contains=VimwikiBoldChar,@Spell'
|
||||||
execute 'syntax match VimwikiBoldT /'.g:vimwiki_rxBold.'/ contained contains=VimwikiBoldCharT,@Spell'
|
execute 'syntax match VimwikiBoldT /'.g:vimwiki_rxBold.'/ contained contains=VimwikiBoldCharT,@Spell'
|
||||||
@ -103,23 +434,15 @@ execute 'syntax match VimwikiSubScriptT /'.g:vimwiki_rxSubScript.'/ contained co
|
|||||||
execute 'syntax match VimwikiCode /'.g:vimwiki_rxCode.'/ contains=VimwikiCodeChar'
|
execute 'syntax match VimwikiCode /'.g:vimwiki_rxCode.'/ contains=VimwikiCodeChar'
|
||||||
execute 'syntax match VimwikiCodeT /'.g:vimwiki_rxCode.'/ contained contains=VimwikiCodeCharT'
|
execute 'syntax match VimwikiCodeT /'.g:vimwiki_rxCode.'/ contained contains=VimwikiCodeCharT'
|
||||||
|
|
||||||
|
|
||||||
" <hr> horizontal rule
|
" <hr> horizontal rule
|
||||||
execute 'syntax match VimwikiHR /'.g:vimwiki_rxHR.'/'
|
execute 'syntax match VimwikiHR /'.g:vimwiki_rxHR.'/'
|
||||||
|
|
||||||
execute 'syntax region VimwikiPre start=/^\s*'.g:vimwiki_rxPreStart.
|
execute 'syntax region VimwikiPre start=/^\s*'.g:vimwiki_rxPreStart.
|
||||||
\ '/ end=/^\s*'.g:vimwiki_rxPreEnd.'\s*$/ contains=@Spell'
|
\ '/ end=/^\s*'.g:vimwiki_rxPreEnd.'\s*$/ contains=@Spell'
|
||||||
|
|
||||||
" List item checkbox
|
execute 'syntax region VimwikiMath start=/^\s*'.g:vimwiki_rxMathStart.
|
||||||
syntax match VimwikiCheckBox /\[.\?\]/
|
\ '/ end=/^\s*'.g:vimwiki_rxMathEnd.'\s*$/ contains=@Spell'
|
||||||
if g:vimwiki_hl_cb_checked
|
|
||||||
execute 'syntax match VimwikiCheckBoxDone /'.
|
|
||||||
\ g:vimwiki_rxListBullet.'\s*\['.g:vimwiki_listsyms[4].'\].*$/'.
|
|
||||||
\ ' contains=VimwikiNoExistsLink,VimwikiLink'
|
|
||||||
execute 'syntax match VimwikiCheckBoxDone /'.
|
|
||||||
\ g:vimwiki_rxListNumber.'\s*\['.g:vimwiki_listsyms[4].'\].*$/'.
|
|
||||||
\ ' contains=VimwikiNoExistsLink,VimwikiLink'
|
|
||||||
endif
|
|
||||||
|
|
||||||
" placeholders
|
" placeholders
|
||||||
syntax match VimwikiPlaceholder /^\s*%toc\%(\s.*\)\?$/ contains=VimwikiPlaceholderParam
|
syntax match VimwikiPlaceholder /^\s*%toc\%(\s.*\)\?$/ contains=VimwikiPlaceholderParam
|
||||||
@ -129,51 +452,48 @@ syntax match VimwikiPlaceholder /^\s*%template\%(\s.*\)\?$/ contains=VimwikiPlac
|
|||||||
syntax match VimwikiPlaceholderParam /\s.*/ contained
|
syntax match VimwikiPlaceholderParam /\s.*/ contained
|
||||||
|
|
||||||
" html tags
|
" html tags
|
||||||
let html_tags = join(split(g:vimwiki_valid_html_tags, '\s*,\s*'), '\|')
|
if g:vimwiki_valid_html_tags != ''
|
||||||
exe 'syntax match VimwikiHTMLtag #\c</\?\%('.html_tags.'\)\%(\s\{-1}\S\{-}\)\{-}\s*/\?>#'
|
let html_tags = join(split(g:vimwiki_valid_html_tags, '\s*,\s*'), '\|')
|
||||||
execute 'syntax match VimwikiBold #\c<b>.\{-}</b># contains=VimwikiHTMLTag'
|
exe 'syntax match VimwikiHTMLtag #\c</\?\%('.html_tags.'\)\%(\s\{-1}\S\{-}\)\{-}\s*/\?>#'
|
||||||
execute 'syntax match VimwikiItalic #\c<i>.\{-}</i># contains=VimwikiHTMLTag'
|
execute 'syntax match VimwikiBold #\c<b>.\{-}</b># contains=VimwikiHTMLTag'
|
||||||
execute 'syntax match VimwikiUnderline #\c<u>.\{-}</u># contains=VimwikiHTMLTag'
|
execute 'syntax match VimwikiItalic #\c<i>.\{-}</i># contains=VimwikiHTMLTag'
|
||||||
|
execute 'syntax match VimwikiUnderline #\c<u>.\{-}</u># contains=VimwikiHTMLTag'
|
||||||
|
|
||||||
execute 'syntax match VimwikiComment /'.g:vimwiki_rxComment.'/ contains=@Spell'
|
execute 'syntax match VimwikiComment /'.g:vimwiki_rxComment.'/ contains=@Spell'
|
||||||
|
endif
|
||||||
|
" }}}
|
||||||
|
|
||||||
" Header levels, 1-6
|
" header groups highlighting "{{{
|
||||||
execute 'syntax match VimwikiHeader1 /'.g:vimwiki_rxH1.'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiLink,@Spell'
|
|
||||||
execute 'syntax match VimwikiHeader2 /'.g:vimwiki_rxH2.'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiLink,@Spell'
|
|
||||||
execute 'syntax match VimwikiHeader3 /'.g:vimwiki_rxH3.'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiLink,@Spell'
|
|
||||||
execute 'syntax match VimwikiHeader4 /'.g:vimwiki_rxH4.'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiLink,@Spell'
|
|
||||||
execute 'syntax match VimwikiHeader5 /'.g:vimwiki_rxH5.'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiLink,@Spell'
|
|
||||||
execute 'syntax match VimwikiHeader6 /'.g:vimwiki_rxH6.'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiLink,@Spell'
|
|
||||||
|
|
||||||
" group names "{{{
|
|
||||||
|
|
||||||
if g:vimwiki_hl_headers == 0
|
if g:vimwiki_hl_headers == 0
|
||||||
hi link VimwikiHeader1 Title
|
" Strangely in default colorscheme Title group is not set to bold for cterm...
|
||||||
hi link VimwikiHeader2 Title
|
if !exists("g:colors_name")
|
||||||
hi link VimwikiHeader3 Title
|
hi Title cterm=bold
|
||||||
hi link VimwikiHeader4 Title
|
|
||||||
hi link VimwikiHeader5 Title
|
|
||||||
hi link VimwikiHeader6 Title
|
|
||||||
else
|
|
||||||
if &background == 'light'
|
|
||||||
hi def VimwikiHeader1 guibg=bg guifg=#aa5858 gui=bold ctermfg=DarkRed term=bold cterm=bold
|
|
||||||
hi def VimwikiHeader2 guibg=bg guifg=#507030 gui=bold ctermfg=DarkGreen term=bold cterm=bold
|
|
||||||
hi def VimwikiHeader3 guibg=bg guifg=#1030a0 gui=bold ctermfg=DarkBlue term=bold cterm=bold
|
|
||||||
hi def VimwikiHeader4 guibg=bg guifg=#103040 gui=bold ctermfg=Black term=bold cterm=bold
|
|
||||||
hi def VimwikiHeader5 guibg=bg guifg=#505050 gui=bold ctermfg=Black term=bold cterm=bold
|
|
||||||
hi def VimwikiHeader6 guibg=bg guifg=#636363 gui=bold ctermfg=Black term=bold cterm=bold
|
|
||||||
else
|
|
||||||
hi def VimwikiHeader1 guibg=bg guifg=#e08090 gui=bold ctermfg=Red term=bold cterm=bold
|
|
||||||
hi def VimwikiHeader2 guibg=bg guifg=#80e090 gui=bold ctermfg=Green term=bold cterm=bold
|
|
||||||
hi def VimwikiHeader3 guibg=bg guifg=#6090e0 gui=bold ctermfg=Blue term=bold cterm=bold
|
|
||||||
hi def VimwikiHeader4 guibg=bg guifg=#c0c0f0 gui=bold ctermfg=White term=bold cterm=bold
|
|
||||||
hi def VimwikiHeader5 guibg=bg guifg=#e0e0f0 gui=bold ctermfg=White term=bold cterm=bold
|
|
||||||
hi def VimwikiHeader6 guibg=bg guifg=#f0f0f0 gui=bold ctermfg=White term=bold cterm=bold
|
|
||||||
endif
|
endif
|
||||||
|
for i in range(1,6)
|
||||||
|
execute 'hi def link VimwikiHeader'.i.' Title'
|
||||||
|
endfor
|
||||||
|
else
|
||||||
|
" default colors when headers of different levels are highlighted differently
|
||||||
|
" not making it yet another option; needed by ColorScheme autocommand
|
||||||
|
let g:vimwiki_hcolor_guifg_light = ['#aa5858','#507030','#1030a0','#103040','#505050','#636363']
|
||||||
|
let g:vimwiki_hcolor_ctermfg_light = ['DarkRed','DarkGreen','DarkBlue','Black','Black','Black']
|
||||||
|
let g:vimwiki_hcolor_guifg_dark = ['#e08090','#80e090','#6090e0','#c0c0f0','#e0e0f0','#f0f0f0']
|
||||||
|
let g:vimwiki_hcolor_ctermfg_dark = ['Red','Green','Blue','White','White','White']
|
||||||
|
for i in range(1,6)
|
||||||
|
execute 'hi def VimwikiHeader'.i.' guibg=bg guifg='.g:vimwiki_hcolor_guifg_{&bg}[i-1].' gui=bold ctermfg='.g:vimwiki_hcolor_ctermfg_{&bg}[i-1].' term=bold cterm=bold'
|
||||||
|
endfor
|
||||||
endif
|
endif
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
|
||||||
|
" syntax group highlighting "{{{
|
||||||
|
|
||||||
hi def link VimwikiMarkers Normal
|
hi def link VimwikiMarkers Normal
|
||||||
|
|
||||||
|
hi def link VimwikiEqIn Number
|
||||||
|
hi def link VimwikiEqInT VimwikiEqIn
|
||||||
|
|
||||||
hi def VimwikiBold term=bold cterm=bold gui=bold
|
hi def VimwikiBold term=bold cterm=bold gui=bold
|
||||||
hi def link VimwikiBoldT VimwikiBold
|
hi def link VimwikiBoldT VimwikiBold
|
||||||
|
|
||||||
@ -193,6 +513,9 @@ hi def link VimwikiCodeT VimwikiCode
|
|||||||
hi def link VimwikiPre PreProc
|
hi def link VimwikiPre PreProc
|
||||||
hi def link VimwikiPreT VimwikiPre
|
hi def link VimwikiPreT VimwikiPre
|
||||||
|
|
||||||
|
hi def link VimwikiMath Number
|
||||||
|
hi def link VimwikiMathT VimwikiMath
|
||||||
|
|
||||||
hi def link VimwikiNoExistsLink SpellBad
|
hi def link VimwikiNoExistsLink SpellBad
|
||||||
hi def link VimwikiNoExistsLinkT VimwikiNoExistsLink
|
hi def link VimwikiNoExistsLinkT VimwikiNoExistsLink
|
||||||
|
|
||||||
@ -200,9 +523,11 @@ hi def link VimwikiLink Underlined
|
|||||||
hi def link VimwikiLinkT VimwikiLink
|
hi def link VimwikiLinkT VimwikiLink
|
||||||
|
|
||||||
hi def link VimwikiList Identifier
|
hi def link VimwikiList Identifier
|
||||||
hi def link VimwikiCheckBox VimwikiList
|
hi def link VimwikiListTodo VimwikiList
|
||||||
|
"hi def link VimwikiCheckBox VimwikiList
|
||||||
hi def link VimwikiCheckBoxDone Comment
|
hi def link VimwikiCheckBoxDone Comment
|
||||||
hi def link VimwikiEmoticons Character
|
hi def link VimwikiEmoticons Character
|
||||||
|
hi def link VimwikiHR Identifier
|
||||||
|
|
||||||
hi def link VimwikiDelText Constant
|
hi def link VimwikiDelText Constant
|
||||||
hi def link VimwikiDelTextT VimwikiDelText
|
hi def link VimwikiDelTextT VimwikiDelText
|
||||||
@ -220,6 +545,7 @@ hi def link VimwikiPlaceholder SpecialKey
|
|||||||
hi def link VimwikiPlaceholderParam String
|
hi def link VimwikiPlaceholderParam String
|
||||||
hi def link VimwikiHTMLtag SpecialKey
|
hi def link VimwikiHTMLtag SpecialKey
|
||||||
|
|
||||||
|
hi def link VimwikiEqInChar VimwikiMarkers
|
||||||
hi def link VimwikiCellSeparator VimwikiMarkers
|
hi def link VimwikiCellSeparator VimwikiMarkers
|
||||||
hi def link VimwikiBoldChar VimwikiMarkers
|
hi def link VimwikiBoldChar VimwikiMarkers
|
||||||
hi def link VimwikiItalicChar VimwikiMarkers
|
hi def link VimwikiItalicChar VimwikiMarkers
|
||||||
@ -230,9 +556,8 @@ hi def link VimwikiSuperScriptChar VimwikiMarkers
|
|||||||
hi def link VimwikiSubScriptChar VimwikiMarkers
|
hi def link VimwikiSubScriptChar VimwikiMarkers
|
||||||
hi def link VimwikiCodeChar VimwikiMarkers
|
hi def link VimwikiCodeChar VimwikiMarkers
|
||||||
hi def link VimwikiHeaderChar VimwikiMarkers
|
hi def link VimwikiHeaderChar VimwikiMarkers
|
||||||
hi def link VimwikiLinkChar VimwikiLink
|
|
||||||
hi def link VimwikiNoLinkChar VimwikiNoExistsLink
|
|
||||||
|
|
||||||
|
hi def link VimwikiEqInCharT VimwikiMarkers
|
||||||
hi def link VimwikiBoldCharT VimwikiMarkers
|
hi def link VimwikiBoldCharT VimwikiMarkers
|
||||||
hi def link VimwikiItalicCharT VimwikiMarkers
|
hi def link VimwikiItalicCharT VimwikiMarkers
|
||||||
hi def link VimwikiBoldItalicCharT VimwikiMarkers
|
hi def link VimwikiBoldItalicCharT VimwikiMarkers
|
||||||
@ -243,9 +568,14 @@ hi def link VimwikiSubScriptCharT VimwikiMarkers
|
|||||||
hi def link VimwikiCodeCharT VimwikiMarkers
|
hi def link VimwikiCodeCharT VimwikiMarkers
|
||||||
hi def link VimwikiHeaderCharT VimwikiMarkers
|
hi def link VimwikiHeaderCharT VimwikiMarkers
|
||||||
hi def link VimwikiLinkCharT VimwikiLinkT
|
hi def link VimwikiLinkCharT VimwikiLinkT
|
||||||
hi def link VimwikiNoLinkCharT VimwikiNoExistsLinkT
|
hi def link VimwikiNoExistsLinkCharT VimwikiNoExistsLinkT
|
||||||
"}}}
|
"}}}
|
||||||
|
|
||||||
|
" -------------------------------------------------------------------------
|
||||||
|
" Load syntax-specific functionality
|
||||||
|
execute 'runtime! syntax/vimwiki_'.VimwikiGet('syntax').'_custom.vim'
|
||||||
|
" -------------------------------------------------------------------------
|
||||||
|
|
||||||
let b:current_syntax="vimwiki"
|
let b:current_syntax="vimwiki"
|
||||||
|
|
||||||
" EMBEDDED syntax setup "{{{
|
" EMBEDDED syntax setup "{{{
|
||||||
@ -253,9 +583,16 @@ let nested = VimwikiGet('nested_syntaxes')
|
|||||||
if !empty(nested)
|
if !empty(nested)
|
||||||
for [hl_syntax, vim_syntax] in items(nested)
|
for [hl_syntax, vim_syntax] in items(nested)
|
||||||
call vimwiki#base#nested_syntax(vim_syntax,
|
call vimwiki#base#nested_syntax(vim_syntax,
|
||||||
\ '^\s*{{{\%(.*[[:blank:][:punct:]]\)\?'.
|
\ '^\s*'.g:vimwiki_rxPreStart.'\%(.*[[:blank:][:punct:]]\)\?'.
|
||||||
\ hl_syntax.'\%([[:blank:][:punct:]].*\)\?',
|
\ hl_syntax.'\%([[:blank:][:punct:]].*\)\?',
|
||||||
\ '^\s*}}}', 'VimwikiPre')
|
\ '^\s*'.g:vimwiki_rxPreEnd, 'VimwikiPre')
|
||||||
|
" call vimwiki#base#nested_syntax(vim_syntax,
|
||||||
|
" \ '^\s*{{\$\%(.*[[:blank:][:punct:]]\)\?'.
|
||||||
|
" \ hl_syntax.'\%([[:blank:][:punct:]].*\)\?',
|
||||||
|
" \ '^\s*}}\$', 'VimwikiMath')
|
||||||
endfor
|
endfor
|
||||||
endif
|
endif
|
||||||
"}}}
|
"}}}
|
||||||
|
|
||||||
|
let timeend = vimwiki#u#time(starttime) "XXX
|
||||||
|
call VimwikiLog_extend('timing',['syntax:scans',timescans],['syntax:regexloaded',time0],['syntax:beforeHLexisting',time01],['syntax:afterHLexisting',time02],['syntax:end',timeend])
|
||||||
|
@ -4,6 +4,13 @@
|
|||||||
" Author: Maxim Kim <habamax@gmail.com>
|
" Author: Maxim Kim <habamax@gmail.com>
|
||||||
" Home: http://code.google.com/p/vimwiki/
|
" Home: http://code.google.com/p/vimwiki/
|
||||||
|
|
||||||
|
" placeholder for math environments
|
||||||
|
let b:vimwiki_mathEnv = ""
|
||||||
|
|
||||||
|
" text: $ equation_inline $
|
||||||
|
let g:vimwiki_rxEqIn = '\$[^$`]\+\$'
|
||||||
|
let g:vimwiki_char_eqin = '\$'
|
||||||
|
|
||||||
" text: *strong*
|
" text: *strong*
|
||||||
" let g:vimwiki_rxBold = '\*[^*]\+\*'
|
" let g:vimwiki_rxBold = '\*[^*]\+\*'
|
||||||
let g:vimwiki_rxBold = '\%(^\|\s\|[[:punct:]]\)\@<='.
|
let g:vimwiki_rxBold = '\%(^\|\s\|[[:punct:]]\)\@<='.
|
||||||
@ -53,27 +60,20 @@ let g:vimwiki_char_superscript = '^'
|
|||||||
let g:vimwiki_rxSubScript = ',,[^,`]\+,,'
|
let g:vimwiki_rxSubScript = ',,[^,`]\+,,'
|
||||||
let g:vimwiki_char_subscript = ',,'
|
let g:vimwiki_char_subscript = ',,'
|
||||||
|
|
||||||
" Header levels, 1-6
|
" generic headers
|
||||||
let g:vimwiki_rxH1 = '^\s*=\{1}[^=]\+.*[^=]\+=\{1}\s*$'
|
let g:vimwiki_rxH = '='
|
||||||
let g:vimwiki_rxH2 = '^\s*=\{2}[^=]\+.*[^=]\+=\{2}\s*$'
|
let g:vimwiki_symH = 1
|
||||||
let g:vimwiki_rxH3 = '^\s*=\{3}[^=]\+.*[^=]\+=\{3}\s*$'
|
|
||||||
let g:vimwiki_rxH4 = '^\s*=\{4}[^=]\+.*[^=]\+=\{4}\s*$'
|
|
||||||
let g:vimwiki_rxH5 = '^\s*=\{5}[^=]\+.*[^=]\+=\{5}\s*$'
|
|
||||||
let g:vimwiki_rxH6 = '^\s*=\{6}[^=]\+.*[^=]\+=\{6}\s*$'
|
|
||||||
let g:vimwiki_rxHeader = '\%('.g:vimwiki_rxH1.'\)\|'.
|
|
||||||
\ '\%('.g:vimwiki_rxH2.'\)\|'.
|
|
||||||
\ '\%('.g:vimwiki_rxH3.'\)\|'.
|
|
||||||
\ '\%('.g:vimwiki_rxH4.'\)\|'.
|
|
||||||
\ '\%('.g:vimwiki_rxH5.'\)\|'.
|
|
||||||
\ '\%('.g:vimwiki_rxH6.'\)'
|
|
||||||
|
|
||||||
let g:vimwiki_char_header = '\%(^\s*=\+\)\|\%(=\+\s*$\)'
|
|
||||||
|
|
||||||
" <hr>, horizontal rule
|
" <hr>, horizontal rule
|
||||||
let g:vimwiki_rxHR = '^----.*$'
|
let g:vimwiki_rxHR = '^-----*$'
|
||||||
|
|
||||||
|
" Tables. Each line starts and ends with '|'; each cell is separated by '|'
|
||||||
|
let g:vimwiki_rxTableSep = '|'
|
||||||
|
|
||||||
" List items start with optional whitespace(s) then '* ' or '# '
|
" List items start with optional whitespace(s) then '* ' or '# '
|
||||||
let g:vimwiki_rxListBullet = '^\s*\%(\*\|-\)\s'
|
let g:vimwiki_rxListBullet = '^\s*[*-]\s'
|
||||||
let g:vimwiki_rxListNumber = '^\s*#\s'
|
let g:vimwiki_rxListNumber = '^\s*#\s'
|
||||||
|
|
||||||
let g:vimwiki_rxListDefine = '::\(\s\|$\)'
|
let g:vimwiki_rxListDefine = '::\(\s\|$\)'
|
||||||
@ -82,4 +82,8 @@ let g:vimwiki_rxListDefine = '::\(\s\|$\)'
|
|||||||
let g:vimwiki_rxPreStart = '{{{'
|
let g:vimwiki_rxPreStart = '{{{'
|
||||||
let g:vimwiki_rxPreEnd = '}}}'
|
let g:vimwiki_rxPreEnd = '}}}'
|
||||||
|
|
||||||
|
" Math block
|
||||||
|
let g:vimwiki_rxMathStart = '{{\$'
|
||||||
|
let g:vimwiki_rxMathEnd = '}}\$'
|
||||||
|
|
||||||
let g:vimwiki_rxComment = '^\s*%%.*$'
|
let g:vimwiki_rxComment = '^\s*%%.*$'
|
||||||
|
89
syntax/vimwiki_markdown.vim
Normal file
89
syntax/vimwiki_markdown.vim
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79
|
||||||
|
" Vimwiki syntax file
|
||||||
|
" Default syntax
|
||||||
|
" Author: Maxim Kim <habamax@gmail.com>
|
||||||
|
" Home: http://code.google.com/p/vimwiki/
|
||||||
|
|
||||||
|
" placeholder for math environments
|
||||||
|
let b:vimwiki_mathEnv = ""
|
||||||
|
|
||||||
|
" text: $ equation_inline $
|
||||||
|
let g:vimwiki_rxEqIn = '\$[^$`]\+\$'
|
||||||
|
let g:vimwiki_char_eqin = '\$'
|
||||||
|
|
||||||
|
" text: *strong*
|
||||||
|
" let g:vimwiki_rxBold = '\*[^*]\+\*'
|
||||||
|
let g:vimwiki_rxBold = '\%(^\|\s\|[[:punct:]]\)\@<='.
|
||||||
|
\'\*'.
|
||||||
|
\'\%([^*`[:space:]][^*`]*[^*`[:space:]]\|[^*`[:space:]]\)'.
|
||||||
|
\'\*'.
|
||||||
|
\'\%([[:punct:]]\|\s\|$\)\@='
|
||||||
|
let g:vimwiki_char_bold = '*'
|
||||||
|
|
||||||
|
" text: _emphasis_
|
||||||
|
" let g:vimwiki_rxItalic = '_[^_]\+_'
|
||||||
|
let g:vimwiki_rxItalic = '\%(^\|\s\|[[:punct:]]\)\@<='.
|
||||||
|
\'_'.
|
||||||
|
\'\%([^_`[:space:]][^_`]*[^_`[:space:]]\|[^_`[:space:]]\)'.
|
||||||
|
\'_'.
|
||||||
|
\'\%([[:punct:]]\|\s\|$\)\@='
|
||||||
|
let g:vimwiki_char_italic = '_'
|
||||||
|
|
||||||
|
" text: *_bold italic_* or _*italic bold*_
|
||||||
|
let g:vimwiki_rxBoldItalic = '\%(^\|\s\|[[:punct:]]\)\@<='.
|
||||||
|
\'\*_'.
|
||||||
|
\'\%([^*_`[:space:]][^*_`]*[^*_`[:space:]]\|[^*_`[:space:]]\)'.
|
||||||
|
\'_\*'.
|
||||||
|
\'\%([[:punct:]]\|\s\|$\)\@='
|
||||||
|
let g:vimwiki_char_bolditalic = '\*_'
|
||||||
|
|
||||||
|
let g:vimwiki_rxItalicBold = '\%(^\|\s\|[[:punct:]]\)\@<='.
|
||||||
|
\'_\*'.
|
||||||
|
\'\%([^*_`[:space:]][^*_`]*[^*_`[:space:]]\|[^*_`[:space:]]\)'.
|
||||||
|
\'\*_'.
|
||||||
|
\'\%([[:punct:]]\|\s\|$\)\@='
|
||||||
|
let g:vimwiki_char_italicbold = '_\*'
|
||||||
|
|
||||||
|
" text: `code`
|
||||||
|
let g:vimwiki_rxCode = '`[^`]\+`'
|
||||||
|
let g:vimwiki_char_code = '`'
|
||||||
|
|
||||||
|
" text: ~~deleted text~~
|
||||||
|
let g:vimwiki_rxDelText = '\~\~[^~`]\+\~\~'
|
||||||
|
let g:vimwiki_char_deltext = '\~\~'
|
||||||
|
|
||||||
|
" text: ^superscript^
|
||||||
|
let g:vimwiki_rxSuperScript = '\^[^^`]\+\^'
|
||||||
|
let g:vimwiki_char_superscript = '^'
|
||||||
|
|
||||||
|
" text: ,,subscript,,
|
||||||
|
let g:vimwiki_rxSubScript = ',,[^,`]\+,,'
|
||||||
|
let g:vimwiki_char_subscript = ',,'
|
||||||
|
|
||||||
|
" generic headers
|
||||||
|
let g:vimwiki_rxH = '#'
|
||||||
|
let g:vimwiki_symH = 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
" <hr>, horizontal rule
|
||||||
|
let g:vimwiki_rxHR = '^-----*$'
|
||||||
|
|
||||||
|
" Tables. Each line starts and ends with '|'; each cell is separated by '|'
|
||||||
|
let g:vimwiki_rxTableSep = '|'
|
||||||
|
|
||||||
|
" List items start with optional whitespace(s) then '* ' or '1. ', '2. ', etc.
|
||||||
|
let g:vimwiki_rxListBullet = '^\s*[*+-]\s'
|
||||||
|
let g:vimwiki_rxListNumber = '^\s*[0-9]\+\.\s'
|
||||||
|
|
||||||
|
let g:vimwiki_rxListDefine = '::\%(\s\|$\)'
|
||||||
|
|
||||||
|
" Preformatted text
|
||||||
|
let g:vimwiki_rxPreStart = '```'
|
||||||
|
let g:vimwiki_rxPreEnd = '```'
|
||||||
|
|
||||||
|
" Math block
|
||||||
|
let g:vimwiki_rxMathStart = '{{\$'
|
||||||
|
let g:vimwiki_rxMathEnd = '}}\$'
|
||||||
|
|
||||||
|
let g:vimwiki_rxComment = '^\s*%%.*$'
|
367
syntax/vimwiki_markdown_custom.vim
Normal file
367
syntax/vimwiki_markdown_custom.vim
Normal file
@ -0,0 +1,367 @@
|
|||||||
|
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79
|
||||||
|
" Vimwiki syntax file
|
||||||
|
" Author: Stuart Andrews <stu.andrews@gmail.com>
|
||||||
|
" Home: http://code.google.com/p/vimwiki/
|
||||||
|
|
||||||
|
" LINKS: assume this is common to all syntaxes "{{{
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" -------------------------------------------------------------------------
|
||||||
|
" Load concrete Wiki syntax: sets regexes and templates for headers and links
|
||||||
|
|
||||||
|
" -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
" LINKS: setup of larger regexes {{{
|
||||||
|
|
||||||
|
" LINKS: setup wikilink0 regexps {{{
|
||||||
|
" 0. [[URL]], or [[URL|DESCRIPTION]]
|
||||||
|
|
||||||
|
" 0a) match [[URL|DESCRIPTION]]
|
||||||
|
let g:vimwiki_rxWikiLink0 = g:vimwiki_rxWikiLink
|
||||||
|
" 0b) match URL within [[URL|DESCRIPTION]]
|
||||||
|
let g:vimwiki_rxWikiLink0MatchUrl = g:vimwiki_rxWikiLinkMatchUrl
|
||||||
|
" 0c) match DESCRIPTION within [[URL|DESCRIPTION]]
|
||||||
|
let g:vimwiki_rxWikiLink0MatchDescr = g:vimwiki_rxWikiLinkMatchDescr
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" LINKS: setup wikilink1 regexps {{{
|
||||||
|
" 1. [URL][], or [DESCRIPTION][URL]
|
||||||
|
|
||||||
|
let g:vimwiki_rxWikiLink1Prefix = '['
|
||||||
|
let g:vimwiki_rxWikiLink1Suffix = ']'
|
||||||
|
let g:vimwiki_rxWikiLink1Separator = ']['
|
||||||
|
|
||||||
|
" [URL][]
|
||||||
|
let g:vimwiki_WikiLink1Template1 = g:vimwiki_rxWikiLink1Prefix . '__LinkUrl__'.
|
||||||
|
\ g:vimwiki_rxWikiLink1Separator. g:vimwiki_rxWikiLink1Suffix
|
||||||
|
" [DESCRIPTION][URL]
|
||||||
|
let g:vimwiki_WikiLink1Template2 = g:vimwiki_rxWikiLink1Prefix . '__LinkDescription__'.
|
||||||
|
\ g:vimwiki_rxWikiLink1Separator. '__LinkUrl__'.
|
||||||
|
\ g:vimwiki_rxWikiLink1Suffix
|
||||||
|
"
|
||||||
|
let magic_chars = '.*[]\^$'
|
||||||
|
let valid_chars = '[^\\\[\]]'
|
||||||
|
|
||||||
|
let g:vimwiki_rxWikiLink1Prefix = escape(g:vimwiki_rxWikiLink1Prefix, magic_chars)
|
||||||
|
let g:vimwiki_rxWikiLink1Suffix = escape(g:vimwiki_rxWikiLink1Suffix, magic_chars)
|
||||||
|
let g:vimwiki_rxWikiLink1Separator = escape(g:vimwiki_rxWikiLink1Separator, magic_chars)
|
||||||
|
let g:vimwiki_rxWikiLink1Url = valid_chars.'\{-}'
|
||||||
|
let g:vimwiki_rxWikiLink1Descr = valid_chars.'\{-}'
|
||||||
|
|
||||||
|
let g:vimwiki_rxWikiLink1InvalidPrefix = '[\]\[]\@<!'
|
||||||
|
let g:vimwiki_rxWikiLink1InvalidSuffix = '[\]\[]\@!'
|
||||||
|
let g:vimwiki_rxWikiLink1Prefix = g:vimwiki_rxWikiLink1InvalidPrefix.
|
||||||
|
\ g:vimwiki_rxWikiLink1Prefix
|
||||||
|
let g:vimwiki_rxWikiLink1Suffix = g:vimwiki_rxWikiLink1Suffix.
|
||||||
|
\ g:vimwiki_rxWikiLink1InvalidSuffix
|
||||||
|
|
||||||
|
"
|
||||||
|
" 1. [URL][], [DESCRIPTION][URL]
|
||||||
|
" 1a) match [URL][], [DESCRIPTION][URL]
|
||||||
|
let g:vimwiki_rxWikiLink1 = g:vimwiki_rxWikiLink1Prefix.
|
||||||
|
\ g:vimwiki_rxWikiLink1Url. g:vimwiki_rxWikiLink1Separator.
|
||||||
|
\ g:vimwiki_rxWikiLink1Suffix.
|
||||||
|
\ '\|'. g:vimwiki_rxWikiLink1Prefix.
|
||||||
|
\ g:vimwiki_rxWikiLink1Descr.g:vimwiki_rxWikiLink1Separator.
|
||||||
|
\ g:vimwiki_rxWikiLink1Url.g:vimwiki_rxWikiLink1Suffix
|
||||||
|
" 1b) match URL within [URL][], [DESCRIPTION][URL]
|
||||||
|
let g:vimwiki_rxWikiLink1MatchUrl = g:vimwiki_rxWikiLink1Prefix.
|
||||||
|
\ '\zs'. g:vimwiki_rxWikiLink1Url. '\ze'. g:vimwiki_rxWikiLink1Separator.
|
||||||
|
\ g:vimwiki_rxWikiLink1Suffix.
|
||||||
|
\ '\|'. g:vimwiki_rxWikiLink1Prefix.
|
||||||
|
\ g:vimwiki_rxWikiLink1Descr. g:vimwiki_rxWikiLink1Separator.
|
||||||
|
\ '\zs'. g:vimwiki_rxWikiLink1Url. '\ze'. g:vimwiki_rxWikiLink1Suffix
|
||||||
|
" 1c) match DESCRIPTION within [DESCRIPTION][URL]
|
||||||
|
let g:vimwiki_rxWikiLink1MatchDescr = g:vimwiki_rxWikiLink1Prefix.
|
||||||
|
\ '\zs'. g:vimwiki_rxWikiLink1Descr.'\ze'. g:vimwiki_rxWikiLink1Separator.
|
||||||
|
\ g:vimwiki_rxWikiLink1Url.g:vimwiki_rxWikiLink1Suffix
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" LINKS: Syntax helper {{{
|
||||||
|
let g:vimwiki_rxWikiLink1Prefix1 = g:vimwiki_rxWikiLink1Prefix
|
||||||
|
let g:vimwiki_rxWikiLink1Suffix1 = g:vimwiki_rxWikiLink1Separator.
|
||||||
|
\ g:vimwiki_rxWikiLink1Url.g:vimwiki_rxWikiLink1Suffix
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" *. ANY wikilink {{{
|
||||||
|
" *a) match ANY wikilink
|
||||||
|
let g:vimwiki_rxWikiLink = ''.
|
||||||
|
\ g:vimwiki_rxWikiLink0.'\|'.
|
||||||
|
\ g:vimwiki_rxWikiLink1
|
||||||
|
" *b) match URL within ANY wikilink
|
||||||
|
let g:vimwiki_rxWikiLinkMatchUrl = ''.
|
||||||
|
\ g:vimwiki_rxWikiLink0MatchUrl.'\|'.
|
||||||
|
\ g:vimwiki_rxWikiLink1MatchUrl
|
||||||
|
" *c) match DESCRIPTION within ANY wikilink
|
||||||
|
let g:vimwiki_rxWikiLinkMatchDescr = ''.
|
||||||
|
\ g:vimwiki_rxWikiLink0MatchDescr.'\|'.
|
||||||
|
\ g:vimwiki_rxWikiLink1MatchDescr
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
|
||||||
|
" LINKS: setup of wikiincl regexps {{{
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" LINKS: Syntax helper {{{
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" LINKS: Setup weblink0 regexps {{{
|
||||||
|
" 0. URL : free-standing links: keep URL UR(L) strip trailing punct: URL; URL) UR(L))
|
||||||
|
let g:vimwiki_rxWeblink0 = g:vimwiki_rxWeblink
|
||||||
|
" 0a) match URL within URL
|
||||||
|
let g:vimwiki_rxWeblinkMatchUrl0 = g:vimwiki_rxWeblinkMatchUrl
|
||||||
|
" 0b) match DESCRIPTION within URL
|
||||||
|
let g:vimwiki_rxWeblinkMatchDescr0 = g:vimwiki_rxWeblinkMatchDescr
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" LINKS: Setup weblink1 regexps {{{
|
||||||
|
let g:vimwiki_rxWeblink1Prefix = '['
|
||||||
|
let g:vimwiki_rxWeblink1Suffix = ')'
|
||||||
|
let g:vimwiki_rxWeblink1Separator = ']('
|
||||||
|
" [DESCRIPTION](URL)
|
||||||
|
let g:vimwiki_Weblink1Template = g:vimwiki_rxWeblink1Prefix . '__LinkDescription__'.
|
||||||
|
\ g:vimwiki_rxWeblink1Separator. '__LinkUrl__'.
|
||||||
|
\ g:vimwiki_rxWeblink1Suffix
|
||||||
|
|
||||||
|
let magic_chars = '.*[]\^$'
|
||||||
|
let valid_chars = '[^\\]'
|
||||||
|
|
||||||
|
let g:vimwiki_rxWeblink1Prefix = escape(g:vimwiki_rxWeblink1Prefix, magic_chars)
|
||||||
|
let g:vimwiki_rxWeblink1Suffix = escape(g:vimwiki_rxWeblink1Suffix, magic_chars)
|
||||||
|
let g:vimwiki_rxWeblink1Separator = escape(g:vimwiki_rxWeblink1Separator, magic_chars)
|
||||||
|
let g:vimwiki_rxWeblink1Url = valid_chars.'\{-}'
|
||||||
|
let g:vimwiki_rxWeblink1Descr = valid_chars.'\{-}'
|
||||||
|
|
||||||
|
"
|
||||||
|
" " 2012-02-04 TODO not starting with [[ or ][ ? ... prefix = '[\[\]]\@<!\['
|
||||||
|
" 1. [DESCRIPTION](URL)
|
||||||
|
" 1a) match [DESCRIPTION](URL)
|
||||||
|
let g:vimwiki_rxWeblink1 = g:vimwiki_rxWeblink1Prefix.
|
||||||
|
\ g:vimwiki_rxWeblink1Url.g:vimwiki_rxWeblink1Separator.
|
||||||
|
\ g:vimwiki_rxWeblink1Descr.g:vimwiki_rxWeblink1Suffix
|
||||||
|
" 1b) match URL within [DESCRIPTION](URL)
|
||||||
|
let g:vimwiki_rxWeblink1MatchUrl = g:vimwiki_rxWeblink1Prefix.
|
||||||
|
\ g:vimwiki_rxWeblink1Descr. g:vimwiki_rxWeblink1Separator.
|
||||||
|
\ '\zs'.g:vimwiki_rxWeblink1Url.'\ze'. g:vimwiki_rxWeblink1Suffix
|
||||||
|
" 1c) match DESCRIPTION within [DESCRIPTION](URL)
|
||||||
|
let g:vimwiki_rxWeblink1MatchDescr = g:vimwiki_rxWeblink1Prefix.
|
||||||
|
\ '\zs'.g:vimwiki_rxWeblink1Descr.'\ze'. g:vimwiki_rxWeblink1Separator.
|
||||||
|
\ g:vimwiki_rxWeblink1Url. g:vimwiki_rxWeblink1Suffix
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" Syntax helper {{{
|
||||||
|
" TODO: image links too !!
|
||||||
|
" let g:vimwiki_rxWeblink1Prefix1 = '!\?'. g:vimwiki_rxWeblink1Prefix
|
||||||
|
let g:vimwiki_rxWeblink1Prefix1 = g:vimwiki_rxWeblink1Prefix
|
||||||
|
let g:vimwiki_rxWeblink1Suffix1 = g:vimwiki_rxWeblink1Separator.
|
||||||
|
\ g:vimwiki_rxWeblink1Url.g:vimwiki_rxWeblink1Suffix
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" *. ANY weblink {{{
|
||||||
|
" *a) match ANY weblink
|
||||||
|
let g:vimwiki_rxWeblink = ''.
|
||||||
|
\ g:vimwiki_rxWeblink1.'\|'.
|
||||||
|
\ g:vimwiki_rxWeblink0
|
||||||
|
" *b) match URL within ANY weblink
|
||||||
|
let g:vimwiki_rxWeblinkMatchUrl = ''.
|
||||||
|
\ g:vimwiki_rxWeblink1MatchUrl.'\|'.
|
||||||
|
\ g:vimwiki_rxWeblinkMatchUrl0
|
||||||
|
" *c) match DESCRIPTION within ANY weblink
|
||||||
|
let g:vimwiki_rxWeblinkMatchDescr = ''.
|
||||||
|
\ g:vimwiki_rxWeblink1MatchDescr.'\|'.
|
||||||
|
\ g:vimwiki_rxWeblinkMatchDescr0
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
|
||||||
|
" LINKS: Setup anylink regexps {{{
|
||||||
|
let g:vimwiki_rxAnyLink = g:vimwiki_rxWikiLink.'\|'.
|
||||||
|
\ g:vimwiki_rxWikiIncl.'\|'.g:vimwiki_rxWeblink
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
|
||||||
|
" }}} end of Links
|
||||||
|
|
||||||
|
" LINKS: highlighting is complicated due to "nonexistent" links feature {{{
|
||||||
|
function! s:add_target_syntax_ON(target, type) " {{{
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echom '[vimwiki_debug] syntax target > '.a:target
|
||||||
|
endif
|
||||||
|
let prefix0 = 'syntax match '.a:type.' `'
|
||||||
|
let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,'.a:type.'Char'
|
||||||
|
let prefix1 = 'syntax match '.a:type.'T `'
|
||||||
|
let suffix1 = '` display contained'
|
||||||
|
execute prefix0. a:target. suffix0
|
||||||
|
execute prefix1. a:target. suffix1
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:add_target_syntax_OFF(target, type) " {{{
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echom '[vimwiki_debug] syntax target > '.a:target
|
||||||
|
endif
|
||||||
|
let prefix0 = 'syntax match VimwikiNoExistsLink `'
|
||||||
|
let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,'.a:type.'Char'
|
||||||
|
let prefix1 = 'syntax match VimwikiNoExistsLinkT `'
|
||||||
|
let suffix1 = '` display contained'
|
||||||
|
execute prefix0. a:target. suffix0
|
||||||
|
execute prefix1. a:target. suffix1
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:wrap_wikilink1_rx(target) "{{{
|
||||||
|
return g:vimwiki_rxWikiLink1InvalidPrefix.a:target.
|
||||||
|
\ g:vimwiki_rxWikiLink1InvalidSuffix
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:highlight_existing_links() "{{{
|
||||||
|
" Wikilink1
|
||||||
|
" Conditional highlighting that depends on the existence of a wiki file or
|
||||||
|
" directory is only available for *schemeless* wiki links
|
||||||
|
" Links are set up upon BufEnter (see plugin/...)
|
||||||
|
let safe_links = vimwiki#base#file_pattern(b:existing_wikifiles)
|
||||||
|
" Wikilink1 Dirs set up upon BufEnter (see plugin/...)
|
||||||
|
let safe_dirs = vimwiki#base#file_pattern(b:existing_wikidirs)
|
||||||
|
|
||||||
|
" match [URL]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLink1Template1,
|
||||||
|
\ safe_links, g:vimwiki_rxWikiLink1Descr, '')
|
||||||
|
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1')
|
||||||
|
" match [DESCRIPTION][URL]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLink1Template2,
|
||||||
|
\ safe_links, g:vimwiki_rxWikiLink1Descr, '')
|
||||||
|
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1')
|
||||||
|
|
||||||
|
" match [DIRURL]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLink1Template1,
|
||||||
|
\ safe_dirs, g:vimwiki_rxWikiLink1Descr, '')
|
||||||
|
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1')
|
||||||
|
" match [DESCRIPTION][DIRURL]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLink1Template2,
|
||||||
|
\ safe_dirs, g:vimwiki_rxWikiLink1Descr, '')
|
||||||
|
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1')
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
|
||||||
|
" use max highlighting - could be quite slow if there are too many wikifiles
|
||||||
|
if VimwikiGet('maxhi')
|
||||||
|
" WikiLink
|
||||||
|
call s:add_target_syntax_OFF(g:vimwiki_rxWikiLink1, 'VimwikiWikiLink1')
|
||||||
|
|
||||||
|
" Subsequently, links verified on vimwiki's path are highlighted as existing
|
||||||
|
let time01 = vimwiki#u#time(starttime) "XXX
|
||||||
|
call s:highlight_existing_links()
|
||||||
|
let time02 = vimwiki#u#time(starttime) "XXX
|
||||||
|
else
|
||||||
|
let time01 = vimwiki#u#time(starttime) "XXX
|
||||||
|
" Wikilink
|
||||||
|
call s:add_target_syntax_ON(g:vimwiki_rxWikiLink1, 'VimwikiWikiLink1')
|
||||||
|
let time02 = vimwiki#u#time(starttime) "XXX
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Weblink
|
||||||
|
call s:add_target_syntax_ON(g:vimwiki_rxWeblink1, 'VimwikiWeblink1')
|
||||||
|
|
||||||
|
" WikiLink
|
||||||
|
" All remaining schemes are highlighted automatically
|
||||||
|
let rxSchemes = '\%('.
|
||||||
|
\ join(split(g:vimwiki_schemes, '\s*,\s*'), '\|').'\|'.
|
||||||
|
\ join(split(g:vimwiki_web_schemes1, '\s*,\s*'), '\|').
|
||||||
|
\ '\):'
|
||||||
|
|
||||||
|
" a) match [nonwiki-scheme-URL]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLink1Template1,
|
||||||
|
\ rxSchemes.g:vimwiki_rxWikiLink1Url, g:vimwiki_rxWikiLink1Descr, '')
|
||||||
|
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1')
|
||||||
|
" b) match [DESCRIPTION][nonwiki-scheme-URL]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLink1Template2,
|
||||||
|
\ rxSchemes.g:vimwiki_rxWikiLink1Url, g:vimwiki_rxWikiLink1Descr, '')
|
||||||
|
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1')
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
|
||||||
|
" generic headers "{{{
|
||||||
|
|
||||||
|
" Header levels, 1-6
|
||||||
|
for i in range(1,6)
|
||||||
|
execute 'syntax match VimwikiHeader'.i.' /'.g:vimwiki_rxH{i}.'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiCode,VimwikiLink,VimwikiWeblink1,VimwikiWikiLink1,@Spell'
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" concealed chars " {{{
|
||||||
|
if exists("+conceallevel")
|
||||||
|
syntax conceal on
|
||||||
|
endif
|
||||||
|
|
||||||
|
syntax spell toplevel
|
||||||
|
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echom 'WikiLink1 Prefix: '.g:vimwiki_rxWikiLink1Prefix1
|
||||||
|
echom 'WikiLink1 Suffix: '.g:vimwiki_rxWikiLink1Suffix1
|
||||||
|
echom 'Weblink1 Prefix: '.g:vimwiki_rxWeblink1Prefix1
|
||||||
|
echom 'Weblink1 Suffix: '.g:vimwiki_rxWeblink1Suffix1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" VimwikiWikiLink1Char is for syntax markers (and also URL when a description
|
||||||
|
" is present) and may be concealed
|
||||||
|
let options = ' contained transparent contains=NONE'
|
||||||
|
" conceal wikilink1
|
||||||
|
execute 'syn match VimwikiWikiLink1Char /'.g:vimwiki_rxWikiLink1Prefix.'/'.options
|
||||||
|
execute 'syn match VimwikiWikiLink1Char /'.g:vimwiki_rxWikiLink1Suffix.'/'.options
|
||||||
|
execute 'syn match VimwikiWikiLink1Char /'.g:vimwiki_rxWikiLink1Prefix1.'/'.options
|
||||||
|
execute 'syn match VimwikiWikiLink1Char /'.g:vimwiki_rxWikiLink1Suffix1.'/'.options
|
||||||
|
|
||||||
|
" conceal weblink1
|
||||||
|
execute 'syn match VimwikiWeblink1Char "'.g:vimwiki_rxWeblink1Prefix1.'"'.options
|
||||||
|
execute 'syn match VimwikiWeblink1Char "'.g:vimwiki_rxWeblink1Suffix1.'"'.options
|
||||||
|
|
||||||
|
if exists("+conceallevel")
|
||||||
|
syntax conceal off
|
||||||
|
endif
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" non concealed chars " {{{
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" main syntax groups {{{
|
||||||
|
|
||||||
|
" Tables
|
||||||
|
syntax match VimwikiTableRow /^\s*|.\+|\s*$/
|
||||||
|
\ transparent contains=VimwikiCellSeparator,
|
||||||
|
\ VimwikiLinkT,
|
||||||
|
\ VimwikiWeblink1T,
|
||||||
|
\ VimwikiWikiLink1T,
|
||||||
|
\ VimwikiNoExistsLinkT,
|
||||||
|
\ VimwikiEmoticons,
|
||||||
|
\ VimwikiTodo,
|
||||||
|
\ VimwikiBoldT,
|
||||||
|
\ VimwikiItalicT,
|
||||||
|
\ VimwikiBoldItalicT,
|
||||||
|
\ VimwikiItalicBoldT,
|
||||||
|
\ VimwikiDelTextT,
|
||||||
|
\ VimwikiSuperScriptT,
|
||||||
|
\ VimwikiSubScriptT,
|
||||||
|
\ VimwikiCodeT,
|
||||||
|
\ VimwikiEqInT,
|
||||||
|
\ @Spell
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" header groups highlighting "{{{
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
|
||||||
|
" syntax group highlighting "{{{
|
||||||
|
hi def link VimwikiWeblink1 VimwikiLink
|
||||||
|
hi def link VimwikiWeblink1T VimwikiLink
|
||||||
|
|
||||||
|
hi def link VimwikiWikiLink1 VimwikiLink
|
||||||
|
hi def link VimwikiWikiLink1T VimwikiLink
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
" EMBEDDED syntax setup "{{{
|
||||||
|
"}}}
|
||||||
|
"
|
@ -4,6 +4,13 @@
|
|||||||
" Author: Maxim Kim <habamax@gmail.com>
|
" Author: Maxim Kim <habamax@gmail.com>
|
||||||
" Home: http://code.google.com/p/vimwiki/
|
" Home: http://code.google.com/p/vimwiki/
|
||||||
|
|
||||||
|
" placeholder for math environments
|
||||||
|
let b:vimwiki_mathEnv = ""
|
||||||
|
|
||||||
|
" text: $ equation_inline $
|
||||||
|
let g:vimwiki_rxEqIn = '\$[^$`]\+\$'
|
||||||
|
let g:vimwiki_char_eqin = '\$'
|
||||||
|
|
||||||
" text: '''strong'''
|
" text: '''strong'''
|
||||||
let g:vimwiki_rxBold = "'''[^']\\+'''"
|
let g:vimwiki_rxBold = "'''[^']\\+'''"
|
||||||
let g:vimwiki_char_bold = "'''"
|
let g:vimwiki_char_bold = "'''"
|
||||||
@ -34,31 +41,22 @@ let g:vimwiki_char_superscript = '^'
|
|||||||
let g:vimwiki_rxSubScript = ',,[^,]\+,,'
|
let g:vimwiki_rxSubScript = ',,[^,]\+,,'
|
||||||
let g:vimwiki_char_subscript = ',,'
|
let g:vimwiki_char_subscript = ',,'
|
||||||
|
|
||||||
" Header levels, 1-6
|
" generic headers
|
||||||
let g:vimwiki_rxH1 = '^\s*=\{1}[^=]\+.*[^=]\+=\{1}\s*$'
|
let g:vimwiki_rxH = '='
|
||||||
let g:vimwiki_rxH2 = '^\s*=\{2}[^=]\+.*[^=]\+=\{2}\s*$'
|
let g:vimwiki_symH = 1
|
||||||
let g:vimwiki_rxH3 = '^\s*=\{3}[^=]\+.*[^=]\+=\{3}\s*$'
|
|
||||||
let g:vimwiki_rxH4 = '^\s*=\{4}[^=]\+.*[^=]\+=\{4}\s*$'
|
|
||||||
let g:vimwiki_rxH5 = '^\s*=\{5}[^=]\+.*[^=]\+=\{5}\s*$'
|
|
||||||
let g:vimwiki_rxH6 = '^\s*=\{6}[^=]\+.*[^=]\+=\{6}\s*$'
|
|
||||||
let g:vimwiki_rxHeader = '\%('.g:vimwiki_rxH1.'\)\|'.
|
|
||||||
\ '\%('.g:vimwiki_rxH2.'\)\|'.
|
|
||||||
\ '\%('.g:vimwiki_rxH3.'\)\|'.
|
|
||||||
\ '\%('.g:vimwiki_rxH4.'\)\|'.
|
|
||||||
\ '\%('.g:vimwiki_rxH5.'\)\|'.
|
|
||||||
\ '\%('.g:vimwiki_rxH6.'\)'
|
|
||||||
let g:vimwiki_char_header = '\%(^\s*=\+\)\|\%(=\+\s*$\)'
|
|
||||||
|
|
||||||
" <hr>, horizontal rule
|
" <hr>, horizontal rule
|
||||||
let g:vimwiki_rxHR = '^----.*$'
|
let g:vimwiki_rxHR = '^-----*$'
|
||||||
|
|
||||||
" Tables. Each line starts and ends with '||'; each cell is separated by '||'
|
" Tables. Each line starts and ends with '|'; each cell is separated by '|'
|
||||||
let g:vimwiki_rxTable = '||'
|
let g:vimwiki_rxTableSep = '|'
|
||||||
|
|
||||||
" Bulleted list items start with whitespace(s), then '*'
|
" Bulleted list items start with whitespace(s), then '*'
|
||||||
" highlight only bullets and digits.
|
" highlight only bullets and digits.
|
||||||
let g:vimwiki_rxListBullet = '^\s*\*\+\([^*]*$\)\@='
|
let g:vimwiki_rxListBullet = '^\s*\*\+\s\%([^*]*$\)\@='
|
||||||
let g:vimwiki_rxListNumber = '^\s*#\+'
|
let g:vimwiki_rxListNumber = '^\s*#\+\s'
|
||||||
|
|
||||||
let g:vimwiki_rxListDefine = '^\%(;\|:\)\s'
|
let g:vimwiki_rxListDefine = '^\%(;\|:\)\s'
|
||||||
|
|
||||||
@ -66,4 +64,8 @@ let g:vimwiki_rxListDefine = '^\%(;\|:\)\s'
|
|||||||
let g:vimwiki_rxPreStart = '<pre>'
|
let g:vimwiki_rxPreStart = '<pre>'
|
||||||
let g:vimwiki_rxPreEnd = '<\/pre>'
|
let g:vimwiki_rxPreEnd = '<\/pre>'
|
||||||
|
|
||||||
|
" Math block
|
||||||
|
let g:vimwiki_rxMathStart = '{{\$'
|
||||||
|
let g:vimwiki_rxMathEnd = '}}\$'
|
||||||
|
|
||||||
let g:vimwiki_rxComment = '^\s*%%.*$'
|
let g:vimwiki_rxComment = '^\s*%%.*$'
|
||||||
|
Loading…
Reference in New Issue
Block a user