vimwiki

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

commit c1dbf90c2973b2a0f244005a4d17d4af6835b07d
parent 90dc1e58717bd25798bb16d3badab8908b619912
Author: EinfachToll <istjanichtzufassen@googlemail.com>
Date:   Fri, 20 Apr 2018 07:03:53 +0200

Remove foldmarkers; general reformatting

Diffstat:
Mautoload/vimwiki/base.vim | 424++++++++++++++++++++++++++++++++++++++-----------------------------------------
Mautoload/vimwiki/diary.vim | 128++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
Mautoload/vimwiki/html.vim | 528++++++++++++++++++++++++++++++++++++++++++-------------------------------------
Mautoload/vimwiki/lst.vim | 545+++++++++++++++++++++++++++++++++++++++++++++----------------------------------
Mautoload/vimwiki/markdown_base.vim | 64++++++++++++++++++++++++++--------------------------------------
Mautoload/vimwiki/path.vim | 62+++++++++++++++++++++++++++++++++++---------------------------
Mautoload/vimwiki/tags.vim | 90++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mautoload/vimwiki/tbl.vim | 264++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
Mautoload/vimwiki/u.vim | 45+++++++++++++++++++++++++++------------------
Mautoload/vimwiki/vars.vim | 8++++++--
Mftplugin/vimwiki.vim | 194+++++++++++++++++++++++++++++++++----------------------------------------------
Mplugin/vimwiki.vim | 77+++++++++++++++++++++++++++++++++++++++++------------------------------------
Msyntax/vimwiki.vim | 216+++++++++++++++++++++++++++++++++++++++++++++++++------------------------------
Msyntax/vimwiki_default.vim | 16+++++++++++-----
Msyntax/vimwiki_markdown.vim | 17+++++++++++------
Msyntax/vimwiki_markdown_custom.vim | 81+++++++++++++++++++++++++++++++++++++++----------------------------------------
Msyntax/vimwiki_media.vim | 11+++++++----
17 files changed, 1479 insertions(+), 1291 deletions(-)

diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim @@ -1,4 +1,4 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=99 +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 " Vimwiki autoload plugin file " Desc: Basic functionality " Home: https://github.com/vimwiki/vimwiki/ @@ -8,15 +8,15 @@ if exists("g:loaded_vimwiki_auto") || &cp endif let g:loaded_vimwiki_auto = 1 -" s:safesubstitute -function! s:safesubstitute(text, search, replace, mode) "{{{ + +function! s:safesubstitute(text, search, replace, mode) " Substitute regexp but do not interpret replace let escaped = escape(a:replace, '\&') return substitute(a:text, a:search, escaped, a:mode) -endfunction " }}} +endfunction -" s:vimwiki_get_known_syntaxes -function! s:vimwiki_get_known_syntaxes() " {{{ + +function! s:vimwiki_get_known_syntaxes() " Getting all syntaxes that different wikis could have let syntaxes = {} let syntaxes['default'] = 1 @@ -29,21 +29,22 @@ function! s:vimwiki_get_known_syntaxes() " {{{ let syntaxes[syn] = 1 endfor return keys(syntaxes) -endfunction " }}} +endfunction -" vimwiki#base#file_pattern -function! vimwiki#base#file_pattern(files) "{{{ Get search regex from glob() + +function! vimwiki#base#file_pattern(files) + " Get search regex from glob() " string. Aim to support *all* special characters, forcing the user to choose " names that are compatible with any external restrictions that they " encounter (e.g. filesystem, wiki conventions, other syntaxes, ...). " See: https://github.com/vimwiki-backup/vimwiki/issues/316 - " Change / to [/\\] to allow "Windows paths" + " Change / to [/\\] to allow "Windows paths" return '\V\%('.join(a:files, '\|').'\)\m' -endfunction "}}} +endfunction + -" vimwiki#base#subdir "FIXME TODO slow and faulty -function! vimwiki#base#subdir(path, filename) "{{{ +function! vimwiki#base#subdir(path, filename) let path = a:path " ensure that we are not fooled by a symbolic link "FIXME if we are not "fooled", we end up in a completely different wiki? @@ -64,29 +65,28 @@ function! vimwiki#base#subdir(path, filename) "{{{ let res = res.'/' endif return res -endfunction "}}} +endfunction + -" vimwiki#base#current_subdir -function! vimwiki#base#current_subdir()"{{{ +function! vimwiki#base#current_subdir() return vimwiki#base#subdir(vimwiki#vars#get_wikilocal('path'), expand('%:p')) -endfunction"}}} +endfunction + -" vimwiki#base#invsubdir -function! vimwiki#base#invsubdir(subdir) " {{{ +function! vimwiki#base#invsubdir(subdir) return substitute(a:subdir, '[^/\.]\+/', '../', 'g') -endfunction " }}} +endfunction " Returns: the number of the wiki a file belongs to or -1 if it doesn't belong " to any registered wiki. " The path can be the full path or just the directory of the file -function! vimwiki#base#find_wiki(path) "{{{ +function! vimwiki#base#find_wiki(path) let path = vimwiki#path#path_norm(vimwiki#path#chomp_slash(a:path)) for idx in range(vimwiki#vars#number_of_wikis()) let idx_path = expand(vimwiki#vars#get_wikilocal('path', idx)) let idx_path = vimwiki#path#path_norm(vimwiki#path#chomp_slash(idx_path)) - if vimwiki#path#is_equal( - \ vimwiki#path#path_common_pfx(idx_path, path), idx_path) + if vimwiki#path#is_equal(vimwiki#path#path_common_pfx(idx_path, path), idx_path) return idx endif let idx += 1 @@ -94,14 +94,14 @@ function! vimwiki#base#find_wiki(path) "{{{ " an orphan page has been detected return -1 -endfunction "}}} +endfunction " THE central function of Vimwiki. Extract infos about the target from a link. " If the second parameter is present, which should be an absolute file path, it " is assumed that the link appears in that file. Without it, the current file " is used. -function! vimwiki#base#resolve_link(link_text, ...) "{{{ +function! vimwiki#base#resolve_link(link_text, ...) if a:0 let source_wiki = vimwiki#base#find_wiki(a:1) let source_file = a:1 @@ -138,8 +138,7 @@ function! vimwiki#base#resolve_link(link_text, ...) "{{{ endif let link_text = matchstr(link_text, vimwiki#vars#get_global('rxSchemeUrlMatchUrl')) - let is_wiki_link = link_infos.scheme =~# '\mwiki\d\+' || - \ link_infos.scheme ==# 'diary' + let is_wiki_link = link_infos.scheme =~# '\mwiki\d\+' || link_infos.scheme ==# 'diary' " extract anchor if is_wiki_link @@ -198,8 +197,7 @@ function! vimwiki#base#resolve_link(link_text, ...) "{{{ \ vimwiki#vars#get_wikilocal('diary_rel_path', link_infos.index) . \ link_text . \ vimwiki#vars#get_wikilocal('ext', link_infos.index) - elseif (link_infos.scheme ==# 'file' || link_infos.scheme ==# 'local') - \ && is_relative + elseif (link_infos.scheme ==# 'file' || link_infos.scheme ==# 'local') && is_relative let link_infos.filename = simplify(root_dir . link_text) else " absolute file link " collapse repeated leading "/"'s within a link @@ -211,11 +209,10 @@ function! vimwiki#base#resolve_link(link_text, ...) "{{{ let link_infos.filename = vimwiki#path#normalize(link_infos.filename) return link_infos -endfunction "}}} +endfunction -" vimwiki#base#system_open_link -function! vimwiki#base#system_open_link(url) "{{{ +function! vimwiki#base#system_open_link(url) " handlers function! s:win32_handler(url) "http://vim.wikia.com/wiki/Opening_current_Vim_file_in_your_Windows_browser @@ -255,10 +252,10 @@ function! vimwiki#base#system_open_link(url) "{{{ endif endtry echomsg 'Vimwiki Error: Default Vimwiki link handler was unable to open the HTML file!' -endfunction "}}} +endfunction + -" vimwiki#base#open_link -function! vimwiki#base#open_link(cmd, link, ...) "{{{ +function! vimwiki#base#open_link(cmd, link, ...) let link_infos = {} if a:0 let link_infos = vimwiki#base#resolve_link(a:link, a:1) @@ -271,8 +268,7 @@ function! vimwiki#base#open_link(cmd, link, ...) "{{{ return endif - let is_wiki_link = link_infos.scheme =~# '\mwiki\d\+' - \ || link_infos.scheme =~# 'diary' + let is_wiki_link = link_infos.scheme =~# '\mwiki\d\+' || link_infos.scheme =~# 'diary' let update_prev_link = is_wiki_link && \ !vimwiki#path#is_equal(link_infos.filename, vimwiki#path#current_wiki_file()) @@ -294,14 +290,15 @@ function! vimwiki#base#open_link(cmd, link, ...) "{{{ else call vimwiki#base#system_open_link(link_infos.filename) endif -endfunction " }}} +endfunction + -" vimwiki#base#get_globlinks_escaped -function! vimwiki#base#get_globlinks_escaped() abort "{{{only get links from the current dir +function! vimwiki#base#get_globlinks_escaped() abort + " only get links from the current dir " change to the directory of the current file let orig_pwd = getcwd() lcd! %:h - " all path are relative to the current file's location + " all path are relative to the current file's location let globlinks = glob('*'.vimwiki#vars#get_wikilocal('ext'), 1)."\n" " remove extensions let globlinks = substitute(globlinks, '\'.vimwiki#vars#get_wikilocal('ext').'\ze\n', '', 'g') @@ -315,17 +312,16 @@ function! vimwiki#base#get_globlinks_escaped() abort "{{{only get links from the let globlinks = join(lst, "\n") " return all escaped links as a single newline-separated string return globlinks -endfunction " }}} +endfunction + -" vimwiki#base#generate_links -function! vimwiki#base#generate_links() "{{{ +function! vimwiki#base#generate_links() let lines = [] let links = vimwiki#base#get_wikilinks(vimwiki#vars#get_bufferlocal('wiki_nr'), 0) call sort(links) - let bullet = repeat(' ', vimwiki#lst#get_list_margin()). - \ vimwiki#lst#default_symbol().' ' + let bullet = repeat(' ', vimwiki#lst#get_list_margin()) . vimwiki#lst#default_symbol().' ' for link in links let abs_filepath = vimwiki#path#abs_path_of_link(link) if !s:is_diary_file(abs_filepath) @@ -337,22 +333,21 @@ function! vimwiki#base#generate_links() "{{{ let links_rx = '\m^\s*'.vimwiki#u#escape(vimwiki#lst#default_symbol()).' ' - call vimwiki#base#update_listing_in_buffer(lines, 'Generated Links', links_rx, - \ line('$')+1, 1) -endfunction " }}} + call vimwiki#base#update_listing_in_buffer(lines, 'Generated Links', links_rx, line('$')+1, 1) +endfunction + -" vimwiki#base#goto -function! vimwiki#base#goto(...) "{{{ +function! vimwiki#base#goto(...) let key = a:1 let anchor = a:0 > 1 ? a:2 : '' call vimwiki#base#edit_file(':e', \ vimwiki#vars#get_wikilocal('path') . key . vimwiki#vars#get_wikilocal('ext'), \ anchor) -endfunction "}}} +endfunction -" vimwiki#base#backlinks -function! vimwiki#base#backlinks() "{{{ + +function! vimwiki#base#backlinks() let current_filename = expand("%:p") let locations = [] for idx in range(vimwiki#vars#number_of_wikis()) @@ -376,7 +371,8 @@ function! vimwiki#base#backlinks() "{{{ call setloclist(0, locations, 'r') lopen endif -endfunction "}}} +endfunction + " Returns: a list containing all files of the given wiki as absolute file path. " If the given wiki number is negative, the diary of the current wiki is used @@ -386,7 +382,8 @@ function! vimwiki#base#find_files(wiki_nr, directories_only) if wiki_nr >= 0 let root_directory = vimwiki#vars#get_wikilocal('path', wiki_nr) else - let root_directory = vimwiki#vars#get_wikilocal('path') . vimwiki#vars#get_wikilocal('diary_rel_path') + let root_directory = vimwiki#vars#get_wikilocal('path') . + \ vimwiki#vars#get_wikilocal('diary_rel_path') let wiki_nr = vimwiki#vars#get_bufferlocal('wiki_nr') endif if a:directories_only @@ -405,6 +402,7 @@ function! vimwiki#base#find_files(wiki_nr, directories_only) return split(globpath(root_directory, pattern), '\n') endfunction + " Returns: a list containing the links to get from the current file to all wiki " files in the given wiki. " If the given wiki number is negative, the diary of the current wiki is used. @@ -439,6 +437,7 @@ function! vimwiki#base#get_wikilinks(wiki_nr, also_absolute_links) return result endfunction + " Returns: a list containing the links to all directories from the current file function! vimwiki#base#get_wiki_directories(wiki_nr) let dirs = vimwiki#base#find_files(a:wiki_nr, 1) @@ -460,7 +459,8 @@ function! vimwiki#base#get_wiki_directories(wiki_nr) return result endfunction -function! vimwiki#base#get_anchors(filename, syntax) "{{{ + +function! vimwiki#base#get_anchors(filename, syntax) if !filereadable(a:filename) return [] endif @@ -531,10 +531,10 @@ function! vimwiki#base#get_anchors(filename, syntax) "{{{ endfor return anchors -endfunction "}}} +endfunction -" s:jump_to_anchor -function! s:jump_to_anchor(anchor) "{{{ + +function! s:jump_to_anchor(anchor) let oldpos = getpos('.') call cursor(1, 1) @@ -554,21 +554,20 @@ function! s:jump_to_anchor(anchor) "{{{ \ vimwiki#vars#get_syntaxlocal('tag_match'), \ '__Tag__', segment, '') - if !search(anchor_tag, 'Wc') - \ && !search(anchor_header, 'Wc') - \ && !search(anchor_bold, 'Wc') + if !search(anchor_tag, 'Wc') && !search(anchor_header, 'Wc') && !search(anchor_bold, 'Wc') call setpos('.', oldpos) break endif let oldpos = getpos('.') endfor -endfunction "}}} +endfunction + " Params: full path to a wiki file and its wiki number " Returns: a list of all links inside the wiki file " Every list item has the form " [target file, anchor, line number of the link in source file, column number] -function! s:get_links(wikifile, idx) "{{{ +function! s:get_links(wikifile, idx) if !filereadable(a:wikifile) return [] endif @@ -590,17 +589,17 @@ function! s:get_links(wikifile, idx) "{{{ endif let link_count += 1 let target = vimwiki#base#resolve_link(link_text, a:wikifile) - if target.filename != '' && - \ target.scheme =~# '\mwiki\d\+\|diary\|file\|local' + if target.filename != '' && target.scheme =~# '\mwiki\d\+\|diary\|file\|local' call add(links, [target.filename, target.anchor, lnum, col]) endif endwhile endfor return links -endfunction "}}} +endfunction + -function! vimwiki#base#check_links() "{{{ +function! vimwiki#base#check_links() let anchors_of_files = {} let links_of_files = {} let errors = [] @@ -659,8 +658,8 @@ function! vimwiki#base#check_links() "{{{ " mark every index file as reachable for idx in range(vimwiki#vars#number_of_wikis()) - let index_file = vimwiki#vars#get_wikilocal('path', idx) . vimwiki#vars#get_wikilocal('index', idx) . - \ vimwiki#vars#get_wikilocal('ext', idx) + let index_file = vimwiki#vars#get_wikilocal('path', idx) . + \ vimwiki#vars#get_wikilocal('index', idx) . vimwiki#vars#get_wikilocal('ext', idx) if filereadable(index_file) let reachable_wikifiles[index_file] = 1 endif @@ -697,10 +696,10 @@ function! vimwiki#base#check_links() "{{{ call setqflist(errors, 'r') copen endif -endfunction "}}} +endfunction + -" vimwiki#base#edit_file -function! vimwiki#base#edit_file(command, filename, anchor, ...) "{{{ +function! vimwiki#base#edit_file(command, filename, anchor, ...) let fname = escape(a:filename, '% *|#`') let dir = fnamemodify(a:filename, ":p:h") @@ -751,19 +750,19 @@ function! vimwiki#base#edit_file(command, filename, anchor, ...) "{{{ if a:0 && a:2 && len(a:1) > 0 call vimwiki#vars#set_bufferlocal('prev_link', a:1) endif -endfunction " }}} +endfunction + -" vimwiki#base#search_word -function! vimwiki#base#search_word(wikiRx, cmd) "{{{ +function! vimwiki#base#search_word(wikiRx, cmd) let match_line = search(a:wikiRx, 's'.a:cmd) if match_line == 0 echomsg 'Vimwiki: Wiki link not found' endif -endfunction " }}} +endfunction + -" vimwiki#base#matchstr_at_cursor " Returns part of the line that matches wikiRX at cursor -function! vimwiki#base#matchstr_at_cursor(wikiRX) "{{{ +function! vimwiki#base#matchstr_at_cursor(wikiRX) let col = col('.') - 1 let line = getline('.') let ebeg = -1 @@ -783,10 +782,10 @@ function! vimwiki#base#matchstr_at_cursor(wikiRX) "{{{ else return "" endif -endf "}}} +endfunction -" vimwiki#base#replacestr_at_cursor -function! vimwiki#base#replacestr_at_cursor(wikiRX, sub) "{{{ + +function! vimwiki#base#replacestr_at_cursor(wikiRX, sub) let col = col('.') - 1 let line = getline('.') let ebeg = -1 @@ -806,10 +805,10 @@ function! vimwiki#base#replacestr_at_cursor(wikiRX, sub) "{{{ let newline = strpart(line, 0, ebeg).a:sub.strpart(line, ebeg+elen) call setline(line('.'), newline) endif -endf "}}} +endfunction -" s:print_wiki_list -function! s:print_wiki_list() "{{{ + +function! s:print_wiki_list() let idx = 0 while idx < vimwiki#vars#number_of_wikis() if idx == vimwiki#vars#get_bufferlocal('wiki_nr') @@ -823,10 +822,10 @@ function! s:print_wiki_list() "{{{ let idx += 1 endwhile echohl None -endfunction " }}} +endfunction -" s:update_wiki_link -function! s:update_wiki_link(fname, old, new) " {{{ + +function! s:update_wiki_link(fname, old, new) echo "Updating links in ".a:fname let has_updates = 0 let dest = [] @@ -843,32 +842,33 @@ function! s:update_wiki_link(fname, old, new) " {{{ call writefile(dest, a:fname) call delete(a:fname.'#vimwiki_upd#') endif -endfunction " }}} +endfunction + -" s:update_wiki_links_dir -function! s:update_wiki_links_dir(dir, old_fname, new_fname) " {{{ +function! s:update_wiki_links_dir(dir, old_fname, new_fname) let old_fname = substitute(a:old_fname, '[/\\]', '[/\\\\]', 'g') let new_fname = a:new_fname let old_fname_r = vimwiki#base#apply_template( \ vimwiki#vars#get_syntaxlocal('WikiLinkMatchUrlTemplate'), old_fname, '', '') - let files = split(glob(vimwiki#vars#get_wikilocal('path').a:dir.'*'.vimwiki#vars#get_wikilocal('ext')), '\n') + let files = split(glob(vimwiki#vars#get_wikilocal('path').a:dir.'*'. + \ vimwiki#vars#get_wikilocal('ext')), '\n') for fname in files call s:update_wiki_link(fname, old_fname_r, new_fname) endfor -endfunction " }}} +endfunction + -" s:tail_name -function! s:tail_name(fname) "{{{ +function! s:tail_name(fname) let result = substitute(a:fname, ":", "__colon__", "g") let result = fnamemodify(result, ":t:r") let result = substitute(result, "__colon__", ":", "g") return result -endfunction "}}} +endfunction + -" s:update_wiki_links -function! s:update_wiki_links(old_fname, new_fname) " {{{ +function! s:update_wiki_links(old_fname, new_fname) let old_fname = a:old_fname let new_fname = a:new_fname @@ -894,14 +894,13 @@ function! s:update_wiki_links(old_fname, new_fname) " {{{ while idx < len(dirs_keys) let dir = dirs_keys[idx] let new_dir = dirs_vals[idx] - call s:update_wiki_links_dir(dir, - \ new_dir.old_fname, new_dir.new_fname) + call s:update_wiki_links_dir(dir, new_dir.old_fname, new_dir.new_fname) let idx = idx + 1 endwhile -endfunction " }}} +endfunction + -" s:get_wiki_buffers -function! s:get_wiki_buffers() "{{{ +function! s:get_wiki_buffers() let blist = [] let bcount = 1 while bcount<=bufnr("$") @@ -917,18 +916,18 @@ function! s:get_wiki_buffers() "{{{ let bcount = bcount + 1 endwhile return blist -endfunction " }}} +endfunction -" s:open_wiki_buffer -function! s:open_wiki_buffer(item) "{{{ + +function! s:open_wiki_buffer(item) call vimwiki#base#edit_file(':e', a:item[0], '') if !empty(a:item[1]) call vimwiki#vars#set_bufferlocal('prev_link', a:item[1], a:item[0]) endif -endfunction " }}} +endfunction -" vimwiki#base#nested_syntax -function! vimwiki#base#nested_syntax(filetype, start, end, textSnipHl) abort "{{{ + +function! vimwiki#base#nested_syntax(filetype, start, end, textSnipHl) abort " From http://vim.wikia.com/wiki/VimTip857 let ft=toupper(a:filetype) let group='textGroup'.ft @@ -975,14 +974,15 @@ function! vimwiki#base#nested_syntax(filetype, start, end, textSnipHl) abort "{{ " regular one. " Perl syntax file has perlFunctionName which is usually has no effect due to " 'contained' flag. Now we have 'syntax include' that makes all the groups - " included as 'contained' into specific group. + " included as 'contained' into specific group. " Here perlFunctionName (with quite an angry regexp "\h\w*[^:]") clashes with " the rest syntax rules as now it has effect being really 'contained'. " Clear it! if ft =~? 'perl' - syntax clear perlFunctionName + syntax clear perlFunctionName endif -endfunction "}}} +endfunction + " creates or updates auto-generated listings in a wiki file, like TOC, diary " links, tags list etc. @@ -993,7 +993,7 @@ endfunction "}}} " - if a:create is true, it will be created if it doesn't exist, otherwise it " will only be updated if it already exists function! vimwiki#base#update_listing_in_buffer(strings, start_header, - \ content_regex, default_lnum, create) "{{{ + \ content_regex, default_lnum, create) " apparently, Vim behaves strange when files change while in diff mode if &diff || &readonly return @@ -1002,9 +1002,8 @@ function! vimwiki#base#update_listing_in_buffer(strings, start_header, " check if the listing is already there let already_there = 0 - let header_rx = '\m^\s*'. - \ substitute(vimwiki#vars#get_syntaxlocal('rxH1_Template'), '__Header__', a:start_header, '') - \ .'\s*$' + let header_rx = '\m^\s*'.substitute(vimwiki#vars#get_syntaxlocal('rxH1_Template'), + \ '__Header__', a:start_header, '') .'\s*$' let start_lnum = 1 while start_lnum <= line('$') @@ -1080,27 +1079,26 @@ function! vimwiki#base#update_listing_in_buffer(strings, start_header, let winview_save.lnum += lines_diff endif call winrestview(winview_save) -endfunction "}}} +endfunction + -" WIKI link following functions {{{ -" vimwiki#base#find_next_link -function! vimwiki#base#find_next_link() "{{{ +function! vimwiki#base#find_next_link() call vimwiki#base#search_word(vimwiki#vars#get_syntaxlocal('rxAnyLink'), '') -endfunction " }}} +endfunction + -" vimwiki#base#find_prev_link -function! vimwiki#base#find_prev_link() "{{{ +function! vimwiki#base#find_prev_link() "Jump 2 times if the cursor is in the middle of a link if synIDattr(synID(line('.'), col('.'), 0), "name") =~# "VimwikiLink.*" && \ synIDattr(synID(line('.'), col('.')-1, 0), "name") =~# "VimwikiLink.*" call vimwiki#base#search_word(vimwiki#vars#get_syntaxlocal('rxAnyLink'), 'b') endif call vimwiki#base#search_word(vimwiki#vars#get_syntaxlocal('rxAnyLink'), 'b') -endfunction " }}} +endfunction + -" vimwiki#base#follow_link " This is an API function, that is, remappable by the user. Don't change the signature. -function! vimwiki#base#follow_link(split, reuse, move_cursor, ...) "{{{ +function! vimwiki#base#follow_link(split, reuse, move_cursor, ...) " Parse link at cursor and pass to VimwikiLinkHandler, or failing that, the " default open_link handler @@ -1171,14 +1169,14 @@ function! vimwiki#base#follow_link(split, reuse, move_cursor, ...) "{{{ else if a:0 > 0 execute "normal! ".a:1 - else + else call vimwiki#base#normalize_link(0) endif endif -endfunction " }}} +endfunction + -" vimwiki#base#go_back_link -function! vimwiki#base#go_back_link() "{{{ +function! vimwiki#base#go_back_link() let prev_link = vimwiki#vars#get_bufferlocal('prev_link') if !empty(prev_link) " go back to saved wiki link @@ -1188,10 +1186,10 @@ function! vimwiki#base#go_back_link() "{{{ " maybe we came here by jumping to a tag -> pop from the tag stack silent! pop! endif -endfunction " }}} +endfunction + -" vimwiki#base#goto_index -function! vimwiki#base#goto_index(wnum, ...) "{{{ +function! vimwiki#base#goto_index(wnum, ...) if a:wnum > vimwiki#vars#number_of_wikis() echomsg 'Vimwiki Error: Wiki '.a:wnum.' is not registered in your Vimwiki settings!' return @@ -1222,12 +1220,11 @@ function! vimwiki#base#goto_index(wnum, ...) "{{{ \ vimwiki#vars#get_wikilocal('ext', idx) call vimwiki#base#edit_file(cmd, index_file, '') -endfunction "}}} +endfunction + -" vimwiki#base#delete_link -function! vimwiki#base#delete_link() "{{{ - "" file system funcs - "" Delete wiki link you are in from filesystem +function! vimwiki#base#delete_link() + " Delete wiki file you are in from filesystem let val = input('Delete "'.expand('%').'" [y]es/[N]o? ') if val !~? '^y' return @@ -1247,11 +1244,11 @@ function! vimwiki#base#delete_link() "{{{ if expand('%:p') != "" execute "e" endif -endfunction "}}} +endfunction + -" vimwiki#base#rename_link " Rename current file, update all links to it -function! vimwiki#base#rename_link() "{{{ +function! vimwiki#base#rename_link() let subdir = vimwiki#vars#get_bufferlocal('subdir') let old_fname = subdir.expand('%:t') @@ -1285,15 +1282,14 @@ function! vimwiki#base#rename_link() "{{{ if url != '' let new_link = url endif - + let new_link = subdir.new_link let new_fname = vimwiki#vars#get_wikilocal('path') . new_link . vimwiki#vars#get_wikilocal('ext') " do not rename if file with such name exists let fname = glob(new_fname) if fname != '' - echomsg 'Vimwiki Error: Cannot rename to "'.new_fname. - \ '". File with that name exist!' + echomsg 'Vimwiki Error: Cannot rename to "'.new_fname.'". File with that name exist!' return endif " rename wiki link file @@ -1310,8 +1306,7 @@ function! vimwiki#base#rename_link() "{{{ let &buftype="nofile" - let cur_buffer = [expand('%:p'), - \ vimwiki#vars#get_bufferlocal('prev_link')] + let cur_buffer = [expand('%:p'), vimwiki#vars#get_bufferlocal('prev_link')] let blist = s:get_wiki_buffers() @@ -1341,27 +1336,24 @@ function! vimwiki#base#rename_link() "{{{ endif endfor - call s:open_wiki_buffer([new_fname, - \ cur_buffer[1]]) + call s:open_wiki_buffer([new_fname, cur_buffer[1]]) " execute 'bwipeout '.escape(cur_buffer[0], ' ') echomsg 'Vimwiki: '.old_fname.' is renamed to '.new_fname let &more = setting_more -endfunction " }}} +endfunction + -" vimwiki#base#ui_select -function! vimwiki#base#ui_select() "{{{ +function! vimwiki#base#ui_select() call s:print_wiki_list() let idx = input("Select Wiki (specify number): ") if idx == "" return endif call vimwiki#base#goto_index(idx) -endfunction "}}} -" }}} +endfunction -" TEXT OBJECTS functions {{{ function! vimwiki#base#TO_header(inner, including_subheaders, count) let headers = s:collect_headers() @@ -1416,8 +1408,7 @@ function! vimwiki#base#TO_header(inner, including_subheaders, count) endfunction -" vimwiki#base#TO_table_cell -function! vimwiki#base#TO_table_cell(inner, visual) "{{{ +function! vimwiki#base#TO_table_cell(inner, visual) if col('.') == col('$')-1 return endif @@ -1461,7 +1452,7 @@ function! vimwiki#base#TO_table_cell(inner, visual) "{{{ " XXX: WORKAROUND. " if blockwise selection is ended at | character then pressing j to extend - " selection furhter fails. But if we shake the cursor left and right then + " selection further fails. But if we shake the cursor left and right then " it works. normal! hl else @@ -1479,10 +1470,10 @@ function! vimwiki#base#TO_table_cell(inner, visual) "{{{ normal! 2h endif endif -endfunction "}}} +endfunction -" vimwiki#base#TO_table_col -function! vimwiki#base#TO_table_col(inner, visual) "{{{ + +function! vimwiki#base#TO_table_col(inner, visual) let t_rows = vimwiki#tbl#get_rows(line('.')) if empty(t_rows) return @@ -1594,12 +1585,10 @@ function! vimwiki#base#TO_table_col(inner, visual) "{{{ " expand selection to the bottom line of the table call vimwiki#u#cursor(t_rows[-1][0], virtcol('.')) endif -endfunction "}}} -" }}} +endfunction + -" HEADER functions {{{ -" vimwiki#base#AddHeaderLevel -function! vimwiki#base#AddHeaderLevel() "{{{ +function! vimwiki#base#AddHeaderLevel() let lnum = line('.') let line = getline(lnum) let rxHdr = vimwiki#vars#get_syntaxlocal('rxH') @@ -1618,16 +1607,16 @@ function! vimwiki#base#AddHeaderLevel() "{{{ call setline(lnum, line) endif else - let line = substitute(line, '^\s*', '&'.rxHdr.' ', '') + let line = substitute(line, '^\s*', '&'.rxHdr.' ', '') if vimwiki#vars#get_syntaxlocal('symH') let line = substitute(line, '\s*$', ' '.rxHdr.'&', '') endif call setline(lnum, line) endif -endfunction "}}} +endfunction + -" vimwiki#base#RemoveHeaderLevel -function! vimwiki#base#RemoveHeaderLevel() "{{{ +function! vimwiki#base#RemoveHeaderLevel() let lnum = line('.') let line = getline(lnum) let rxHdr = vimwiki#vars#get_syntaxlocal('rxH') @@ -1657,7 +1646,8 @@ function! vimwiki#base#RemoveHeaderLevel() "{{{ call setline(lnum, line) endif -endfunction " }}} +endfunction + " Returns all the headers in the current buffer as a list of the form @@ -1687,7 +1677,8 @@ function! s:collect_headers() continue endif let header_level = vimwiki#u#count_first_sym(line_content) - let header_text = vimwiki#u#trim(matchstr(line_content, vimwiki#vars#get_syntaxlocal('rxHeader'))) + let header_text = + \ vimwiki#u#trim(matchstr(line_content, vimwiki#vars#get_syntaxlocal('rxHeader'))) call add(headers, [lnum, header_level, header_text]) endfor @@ -1774,7 +1765,8 @@ endfunction function! vimwiki#base#goto_sibling(direction) let headers = s:collect_headers() let current_header_index = s:current_header(headers, line('.')) - let next_potential_sibling = s:get_another_header(headers, current_header_index, a:direction, '<=') + let next_potential_sibling = + \ s:get_another_header(headers, current_header_index, a:direction, '<=') if next_potential_sibling >= 0 && headers[next_potential_sibling][1] == \ headers[current_header_index][1] call cursor(headers[next_potential_sibling][0], 1) @@ -1832,19 +1824,17 @@ function! vimwiki#base#table_of_contents(create) let links_rx = '\m^\s*'.vimwiki#u#escape(vimwiki#lst#default_symbol()).' ' - call vimwiki#base#update_listing_in_buffer(lines, vimwiki#vars#get_global('toc_header'), links_rx, - \ 1, a:create) + call vimwiki#base#update_listing_in_buffer(lines, + \ vimwiki#vars#get_global('toc_header'), links_rx, 1, a:create) endfunction -"}}} -" LINK functions {{{ -" vimwiki#base#apply_template + " Construct a regular expression matching from template (with special " characters properly escaped), by substituting rxUrl for __LinkUrl__, rxDesc " for __LinkDescription__, and rxStyle for __LinkStyle__. The three " arguments rxUrl, rxDesc, and rxStyle are copied verbatim, without any " special character escapes or substitutions. -function! vimwiki#base#apply_template(template, rxUrl, rxDesc, rxStyle) "{{{ +function! vimwiki#base#apply_template(template, rxUrl, rxDesc, rxStyle) let lnk = a:template if a:rxUrl != "" let lnk = s:safesubstitute(lnk, '__LinkUrl__', a:rxUrl, 'g') @@ -1856,10 +1846,10 @@ function! vimwiki#base#apply_template(template, rxUrl, rxDesc, rxStyle) "{{{ let lnk = s:safesubstitute(lnk, '__LinkStyle__', a:rxStyle, 'g') endif return lnk -endfunction " }}} +endfunction + -" s:clean_url -function! s:clean_url(url) " {{{ +function! s:clean_url(url) let url = split(a:url, '/\|=\|-\|&\|?\|\.') let url = filter(url, 'v:val !=# ""') let url = filter(url, 'v:val !=# "www"') @@ -1872,19 +1862,18 @@ function! s:clean_url(url) " {{{ let url = filter(url, 'v:val !=# "file\:"') let url = filter(url, 'v:val !=# "xml\:"') return join(url, " ") -endfunction " }}} +endfunction + -" s:is_diary_file -function! s:is_diary_file(filename) " {{{ +function! s:is_diary_file(filename) let file_path = vimwiki#path#path_norm(a:filename) let rel_path = vimwiki#vars#get_wikilocal('diary_rel_path') let diary_path = vimwiki#path#path_norm(vimwiki#vars#get_wikilocal('path') . rel_path) - return rel_path != '' - \ && file_path =~# '^'.vimwiki#u#escape(diary_path) -endfunction " }}} + return rel_path != '' && file_path =~# '^'.vimwiki#u#escape(diary_path) +endfunction + -" vimwiki#base#normalize_link_helper -function! vimwiki#base#normalize_link_helper(str, rxUrl, rxDesc, template) " {{{ +function! vimwiki#base#normalize_link_helper(str, rxUrl, rxDesc, template) let url = matchstr(a:str, a:rxUrl) let descr = matchstr(a:str, a:rxDesc) if descr == "" @@ -1893,18 +1882,18 @@ function! vimwiki#base#normalize_link_helper(str, rxUrl, rxDesc, template) " {{{ let lnk = s:safesubstitute(a:template, '__LinkDescription__', descr, '') let lnk = s:safesubstitute(lnk, '__LinkUrl__', url, '') return lnk -endfunction " }}} +endfunction + -" vimwiki#base#normalize_imagelink_helper -function! vimwiki#base#normalize_imagelink_helper(str, rxUrl, rxDesc, rxStyle, template) "{{{ +function! vimwiki#base#normalize_imagelink_helper(str, rxUrl, rxDesc, rxStyle, template) let lnk = vimwiki#base#normalize_link_helper(a:str, a:rxUrl, a:rxDesc, a:template) let style = matchstr(a:str, a:rxStyle) let lnk = s:safesubstitute(lnk, '__LinkStyle__', style, '') return lnk -endfunction " }}} +endfunction -" s:normalize_link_in_diary -function! s:normalize_link_in_diary(lnk) " {{{ + +function! s:normalize_link_in_diary(lnk) let link = a:lnk . vimwiki#vars#get_wikilocal('ext') let link_wiki = vimwiki#vars#get_wikilocal('path') . '/' . link let link_diary = vimwiki#vars#get_wikilocal('path') . '/' @@ -1927,21 +1916,22 @@ function! s:normalize_link_in_diary(lnk) " {{{ endif return vimwiki#base#normalize_link_helper(str, rxUrl, rxDesc, template) -endfunction " }}} +endfunction -" s:normalize_link_syntax_n -function! s:normalize_link_syntax_n() " {{{ + +function! s:normalize_link_syntax_n() " try WikiLink let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink')) if !empty(lnk) let sub = vimwiki#base#normalize_link_helper(lnk, - \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'), vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'), + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'), + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'), \ vimwiki#vars#get_global('WikiLinkTemplate2')) call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink'), sub) return endif - + " try WikiIncl let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWikiIncl')) if !empty(lnk) @@ -1974,10 +1964,10 @@ function! s:normalize_link_syntax_n() " {{{ return endif -endfunction " }}} +endfunction + -" s:normalize_link_syntax_v -function! s:normalize_link_syntax_v() " {{{ +function! s:normalize_link_syntax_v() let sel_save = &selection let &selection = "old" let default_register_save = @" @@ -2002,10 +1992,10 @@ function! s:normalize_link_syntax_v() " {{{ call setreg('"', default_register_save, registertype_save) let &selection = sel_save endtry -endfunction " }}} +endfunction -" vimwiki#base#normalize_link -function! vimwiki#base#normalize_link(is_visual_mode) "{{{ + +function! vimwiki#base#normalize_link(is_visual_mode) if exists('*vimwiki#'.vimwiki#vars#get_wikilocal('syntax').'_base#normalize_link') " Syntax-specific links call vimwiki#{vimwiki#vars#get_wikilocal('syntax')}_base#normalize_link(a:is_visual_mode) @@ -2017,10 +2007,10 @@ function! vimwiki#base#normalize_link(is_visual_mode) "{{{ call s:normalize_link_syntax_v() endif endif -endfunction "}}} +endfunction -" vimwiki#base#detect_nested_syntax -function! vimwiki#base#detect_nested_syntax() "{{{ + +function! vimwiki#base#detect_nested_syntax() let last_word = '\v.*<(\w+)\s*$' let lines = map(filter(getline(1, "$"), 'v:val =~ "\\%({{{\\|```\\)" && v:val =~ last_word'), \ 'substitute(v:val, last_word, "\\=submatch(1)", "")') @@ -2029,26 +2019,20 @@ function! vimwiki#base#detect_nested_syntax() "{{{ let dict[elem] = elem endfor return dict -endfunction "}}} - -" }}} +endfunction -" Command completion functions {{{ -" vimwiki#base#complete_links_escaped -function! vimwiki#base#complete_links_escaped(ArgLead, CmdLine, CursorPos) abort " {{{ +function! vimwiki#base#complete_links_escaped(ArgLead, CmdLine, CursorPos) abort " We can safely ignore args if we use -custom=complete option, Vim engine " will do the job of filtering. return vimwiki#base#get_globlinks_escaped() -endfunction " }}} +endfunction -"}}} " ------------------------------------------------------------------------- " Load syntax-specific Wiki functionality for s:syn in s:vimwiki_get_known_syntaxes() execute 'runtime! autoload/vimwiki/'.s:syn.'_base.vim' -endfor +endfor " ------------------------------------------------------------------------- - diff --git a/autoload/vimwiki/diary.vim b/autoload/vimwiki/diary.vim @@ -1,44 +1,49 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=99 +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 " Vimwiki autoload plugin file -" Desc: Handle diary notes +" Description: Handle diary notes " Home: https://github.com/vimwiki/vimwiki/ -" Load only once {{{ + if exists("g:loaded_vimwiki_diary_auto") || &cp finish endif 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 return '0'.a:num endif return a:num -endfunction "}}} +endfunction -function! s:diary_path(...) "{{{ + +function! s:diary_path(...) let idx = a:0 == 0 ? vimwiki#vars#get_bufferlocal('wiki_nr') : a:1 return vimwiki#vars#get_wikilocal('path', idx).vimwiki#vars#get_wikilocal('diary_rel_path', idx) -endfunction "}}} +endfunction + -function! s:diary_index(...) "{{{ +function! s:diary_index(...) let idx = a:0 == 0 ? vimwiki#vars#get_bufferlocal('wiki_nr') : a:1 - return s:diary_path(idx).vimwiki#vars#get_wikilocal('diary_index', idx).vimwiki#vars#get_wikilocal('ext', idx) -endfunction "}}} + return s:diary_path(idx).vimwiki#vars#get_wikilocal('diary_index', idx). + \ vimwiki#vars#get_wikilocal('ext', idx) +endfunction -function! vimwiki#diary#diary_date_link(...) "{{{ + +function! vimwiki#diary#diary_date_link(...) if a:0 return strftime('%Y-%m-%d', a:1) else return strftime('%Y-%m-%d') endif -endfunction "}}} +endfunction + -function! s:get_position_links(link) "{{{ +function! s:get_position_links(link) let idx = -1 let links = [] if a:link =~# '^\d\{4}-\d\d-\d\d' @@ -51,16 +56,15 @@ function! s:get_position_links(link) "{{{ let idx = index(links, a:link) endif return [idx, links] -endfunction "}}} +endfunction + -fun! s:get_month_name(month) "{{{ +function! s:get_month_name(month) return vimwiki#vars#get_global('diary_months')[str2nr(a:month)] -endfun "}}} +endfunction -" Helpers }}} -" Diary index stuff {{{ -fun! s:read_captions(files) "{{{ +function! s:read_captions(files) let result = {} let rx_header = vimwiki#vars#get_syntaxlocal('rxHeader') for fl in a:files @@ -81,11 +85,13 @@ fun! s:read_captions(files) "{{{ endfor return result -endfun "}}} +endfunction -fun! s:get_diary_files() "{{{ + +function! s:get_diary_files() let rx = '^\d\{4}-\d\d-\d\d' - let s_files = glob(vimwiki#vars#get_wikilocal('path').vimwiki#vars#get_wikilocal('diary_rel_path').'*'.vimwiki#vars#get_wikilocal('ext')) + let s_files = glob(vimwiki#vars#get_wikilocal('path'). + \ vimwiki#vars#get_wikilocal('diary_rel_path').'*'.vimwiki#vars#get_wikilocal('ext')) let files = split(s_files, '\n') call filter(files, 'fnamemodify(v:val, ":t") =~# "'.escape(rx, '\').'"') @@ -93,9 +99,10 @@ fun! s:get_diary_files() "{{{ call filter(files, 'v:val !~# ''.*\~$''') return files -endfun "}}} +endfunction + -fun! s:group_links(links) "{{{ +function! s:group_links(links) let result = {} let p_year = 0 let p_month = 0 @@ -114,38 +121,43 @@ fun! s:group_links(links) "{{{ let p_month = month endfor return result -endfun "}}} +endfunction -function! s:sort(lst) "{{{ + +function! s:sort(lst) if vimwiki#vars#get_wikilocal('diary_sort') ==? 'desc' return reverse(sort(a:lst)) else return sort(a:lst) endif -endfunction "}}} +endfunction -function! s:format_diary() "{{{ - let result = [] +function! s:format_diary() + let result = [] let links_with_captions = s:read_captions(s:get_diary_files()) let g_files = s:group_links(links_with_captions) for year in s:sort(keys(g_files)) call add(result, '') - call add(result, substitute(vimwiki#vars#get_syntaxlocal('rxH2_Template'), '__Header__', year , '')) + call add(result, + \ substitute(vimwiki#vars#get_syntaxlocal('rxH2_Template'), '__Header__', year , '')) for month in s:sort(keys(g_files[year])) call add(result, '') - call add(result, substitute(vimwiki#vars#get_syntaxlocal('rxH3_Template'), '__Header__', s:get_month_name(month), '')) + call add(result, substitute(vimwiki#vars#get_syntaxlocal('rxH3_Template'), + \ '__Header__', s:get_month_name(month), '')) for [fl, cap] in s:sort(items(g_files[year][month])) if empty(cap) - let entry = substitute(vimwiki#vars#get_global('WikiLinkTemplate1'), '__LinkUrl__', fl, '') + let entry = substitute(vimwiki#vars#get_global('WikiLinkTemplate1'), + \ '__LinkUrl__', fl, '') let entry = substitute(entry, '__LinkDescription__', cap, '') call add(result, repeat(' ', vimwiki#lst#get_list_margin()).'* '.entry) else - let entry = substitute(vimwiki#vars#get_global('WikiLinkTemplate2'), '__LinkUrl__', fl, '') + let entry = substitute(vimwiki#vars#get_global('WikiLinkTemplate2'), + \ '__LinkUrl__', fl, '') let entry = substitute(entry, '__LinkDescription__', cap, '') call add(result, repeat(' ', vimwiki#lst#get_list_margin()).'* '.entry) endif @@ -155,11 +167,10 @@ function! s:format_diary() "{{{ endfor return result -endfunction "}}} +endfunction -" Diary index stuff }}} -function! vimwiki#diary#make_note(wnum, ...) "{{{ +function! vimwiki#diary#make_note(wnum, ...) if a:wnum > vimwiki#vars#number_of_wikis() echomsg 'Vimwiki Error: Wiki '.a:wnum.' is not registered in g:vimwiki_list!' return @@ -172,7 +183,8 @@ function! vimwiki#diary#make_note(wnum, ...) "{{{ let idx = 0 endif - call vimwiki#path#mkdir(vimwiki#vars#get_wikilocal('path', idx).vimwiki#vars#get_wikilocal('diary_rel_path', idx)) + call vimwiki#path#mkdir(vimwiki#vars#get_wikilocal('path', idx). + \ vimwiki#vars#get_wikilocal('diary_rel_path', idx)) let cmd = 'edit' if a:0 @@ -191,9 +203,10 @@ function! vimwiki#diary#make_note(wnum, ...) "{{{ endif call vimwiki#base#open_link(cmd, link, s:diary_index(idx)) -endfunction "}}} +endfunction -function! vimwiki#diary#goto_diary_index(wnum) "{{{ + +function! vimwiki#diary#goto_diary_index(wnum) if a:wnum > vimwiki#vars#number_of_wikis() echomsg 'Vimwiki Error: Wiki '.a:wnum.' is not registered in g:vimwiki_list!' return @@ -207,9 +220,10 @@ function! vimwiki#diary#goto_diary_index(wnum) "{{{ endif call vimwiki#base#edit_file('e', s:diary_index(idx), '') -endfunction "}}} +endfunction + -function! vimwiki#diary#goto_next_day() "{{{ +function! vimwiki#diary#goto_next_day() let link = '' let [idx, links] = s:get_position_links(expand('%:t:r')) @@ -227,9 +241,10 @@ function! vimwiki#diary#goto_next_day() "{{{ if len(link) call vimwiki#base#open_link(':e ', link) endif -endfunction "}}} +endfunction -function! vimwiki#diary#goto_prev_day() "{{{ + +function! vimwiki#diary#goto_prev_day() let link = '' let [idx, links] = s:get_position_links(expand('%:t:r')) @@ -247,9 +262,10 @@ function! vimwiki#diary#goto_prev_day() "{{{ if len(link) call vimwiki#base#open_link(':e ', link) endif -endfunction "}}} +endfunction + -function! vimwiki#diary#generate_diary_section() "{{{ +function! vimwiki#diary#generate_diary_section() let current_file = vimwiki#path#path_norm(expand("%:p")) let diary_file = vimwiki#path#path_norm(s:diary_index()) if vimwiki#path#is_equal(current_file, diary_file) @@ -259,11 +275,11 @@ function! vimwiki#diary#generate_diary_section() "{{{ else echomsg 'Vimwiki Error: You can generate diary links only in a diary index page!' endif -endfunction "}}} +endfunction + -" Calendar.vim {{{ -" Callback function. -function! vimwiki#diary#calendar_action(day, month, year, week, dir) "{{{ +" Callback function for Calendar.vim +function! vimwiki#diary#calendar_action(day, month, year, week, dir) let day = s:prefix_zero(a:day) let month = s:prefix_zero(a:month) @@ -283,16 +299,14 @@ function! vimwiki#diary#calendar_action(day, month, year, week, dir) "{{{ " XXX: Well, +1 is for inconsistent index basing... call vimwiki#diary#make_note(vimwiki#vars#get_bufferlocal('wiki_nr')+1, 0, link) -endfunction "}}} +endfunction -" 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 month = s:prefix_zero(a:month) let sfile = vimwiki#vars#get_wikilocal('path').vimwiki#vars#get_wikilocal('diary_rel_path'). \ a:year.'-'.month.'-'.day.vimwiki#vars#get_wikilocal('ext') return filereadable(expand(sfile)) -endfunction "}}} - -" Calendar.vim }}} +endfunction diff --git a/autoload/vimwiki/html.vim b/autoload/vimwiki/html.vim @@ -1,62 +1,57 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=99 +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 " Vimwiki autoload plugin file -" Desc: Export to HTML +" Description: HTML export " Home: https://github.com/vimwiki/vimwiki/ -" TODO: We need vimwiki abstract syntax tree. If properly designed it wourld -" greatly symplify different syntax to HTML generation. -" -" vimwiki -- --> PDF -" \ / -" markdown -----> AST -----> HTML -" / \ -" mediawiki -- --> Latex -" - -" Load only once {{{ + if exists("g:loaded_vimwiki_html_auto") || &cp finish endif let g:loaded_vimwiki_html_auto = 1 -"}}} -" UTILITY "{{{ -function! s:root_path(subdir) "{{{ + +function! s:root_path(subdir) return repeat('../', len(split(a:subdir, '[/\\]'))) -endfunction "}}} +endfunction -function! s:syntax_supported() " {{{ + +function! s:syntax_supported() return vimwiki#vars#get_wikilocal('syntax') ==? "default" -endfunction " }}} +endfunction -function! s:remove_blank_lines(lines) " {{{ + +function! s:remove_blank_lines(lines) while !empty(a:lines) && a:lines[-1] =~# '^\s*$' call remove(a:lines, -1) endwhile -endfunction "}}} +endfunction + -function! s:is_web_link(lnk) "{{{ +function! s:is_web_link(lnk) if a:lnk =~# '^\%(https://\|http://\|www.\|ftp://\|file://\|mailto:\)' return 1 endif return 0 -endfunction "}}} +endfunction + -function! s:is_img_link(lnk) "{{{ +function! s:is_img_link(lnk) if tolower(a:lnk) =~# '\.\%(png\|jpg\|gif\|jpeg\)$' return 1 endif return 0 -endfunction "}}} +endfunction + -function! s:has_abs_path(fname) "{{{ +function! s:has_abs_path(fname) if a:fname =~# '\(^.:\)\|\(^/\)' return 1 endif return 0 -endfunction "}}} +endfunction -function! s:find_autoload_file(name) " {{{ + +function! s:find_autoload_file(name) for path in split(&runtimepath, ',') let fname = path.'/autoload/vimwiki/'.a:name if glob(fname) != '' @@ -64,15 +59,17 @@ function! s:find_autoload_file(name) " {{{ endif endfor return '' -endfunction " }}} +endfunction -function! s:default_CSS_full_name(path) " {{{ + +function! s:default_CSS_full_name(path) let path = expand(a:path) let css_full_name = path . vimwiki#vars#get_wikilocal('css_name') return css_full_name -endfunction "}}} +endfunction + -function! s:create_default_CSS(path) " {{{ +function! s:create_default_CSS(path) let css_full_name = s:default_CSS_full_name(a:path) if glob(css_full_name) == "" call vimwiki#path#mkdir(fnamemodify(css_full_name, ':p:h')) @@ -84,9 +81,10 @@ function! s:create_default_CSS(path) " {{{ endif endif return 0 -endfunction "}}} +endfunction + -function! s:template_full_name(name) "{{{ +function! s:template_full_name(name) if a:name == '' let name = vimwiki#vars#get_wikilocal('template_default') else @@ -101,9 +99,10 @@ function! s:template_full_name(name) "{{{ else return '' endif -endfunction "}}} +endfunction + -function! s:get_html_template(template) "{{{ +function! s:get_html_template(template) " TODO: refactor it!!! let lines=[] @@ -113,8 +112,7 @@ function! s:get_html_template(template) "{{{ let lines = readfile(template_name) return lines catch /E484/ - echomsg 'Vimwiki: HTML template '.template_name. - \ ' does not exist!' + echomsg 'Vimwiki: HTML template '.template_name. ' does not exist!' endtry endif @@ -126,13 +124,14 @@ function! s:get_html_template(template) "{{{ let lines = readfile(default_tpl) return lines -endfunction "}}} +endfunction -function! s:safe_html_preformatted(line) "{{{ + +function! s:safe_html_preformatted(line) let line = substitute(a:line,'<','\&lt;', 'g') let line = substitute(line,'>','\&gt;', 'g') return line -endfunction "}}} +endfunction function! s:escape_html_attribute(string) @@ -140,7 +139,7 @@ function! s:escape_html_attribute(string) endfunction -function! s:safe_html_line(line) "{{{ +function! s:safe_html_line(line) " escape & < > when producing HTML text " s:lt_pattern, s:gt_pattern depend on g:vimwiki_valid_html_tags " and are set in vimwiki#html#Wiki2HTML() @@ -149,9 +148,10 @@ function! s:safe_html_line(line) "{{{ let line = substitute(line,s:gt_pattern,'\&gt;', 'g') return line -endfunction "}}} +endfunction + -function! s:delete_html_files(path) "{{{ +function! s:delete_html_files(path) let htmlfiles = split(glob(a:path.'**/*.html'), '\n') for fname in htmlfiles " ignore user html files, e.g. search.html,404.html @@ -173,13 +173,15 @@ function! s:delete_html_files(path) "{{{ echomsg 'Vimwiki Error: Cannot delete '.fname endtry endfor -endfunction "}}} +endfunction -function! s:mid(value, cnt) "{{{ + +function! s:mid(value, cnt) return strpart(a:value, a:cnt, len(a:value) - 2 * a:cnt) -endfunction "}}} +endfunction -function! s:subst_func(line, regexp, func, ...) " {{{ + +function! s:subst_func(line, regexp, func, ...) " Substitute text found by regexp with result of " func(matched) function. @@ -199,16 +201,17 @@ function! s:subst_func(line, regexp, func, ...) " {{{ let pos = matchend(a:line, a:regexp, pos) endfor return res_line -endfunction " }}} +endfunction + -function! s:save_vimwiki_buffer() "{{{ +function! s:save_vimwiki_buffer() if &filetype ==? 'vimwiki' && filewritable(expand('%')) silent update endif -endfunction "}}} +endfunction + -" get date. -function! s:process_date(placeholders, default_date) "{{{ +function! s:process_date(placeholders, default_date) if !empty(a:placeholders) for [placeholder, row, idx] in a:placeholders let [type, param] = placeholder @@ -218,10 +221,10 @@ function! s:process_date(placeholders, default_date) "{{{ endfor endif return a:default_date -endfunction "}}} +endfunction + -" get title. -function! s:process_title(placeholders, default_title) "{{{ +function! s:process_title(placeholders, default_title) if !empty(a:placeholders) for [placeholder, row, idx] in a:placeholders let [type, param] = placeholder @@ -231,9 +234,10 @@ function! s:process_title(placeholders, default_title) "{{{ endfor endif return a:default_title -endfunction "}}} +endfunction + -function! s:is_html_uptodate(wikifile) "{{{ +function! s:is_html_uptodate(wikifile) let tpl_time = -1 let tpl_file = s:template_full_name('') @@ -242,16 +246,17 @@ function! s:is_html_uptodate(wikifile) "{{{ endif let wikifile = fnamemodify(a:wikifile, ":p") - let htmlfile = expand(vimwiki#vars#get_wikilocal('path_html') . vimwiki#vars#get_bufferlocal('subdir') . - \fnamemodify(wikifile, ":t:r").".html") + let htmlfile = expand(vimwiki#vars#get_wikilocal('path_html') . + \ vimwiki#vars#get_bufferlocal('subdir') . fnamemodify(wikifile, ":t:r").".html") if getftime(wikifile) <= getftime(htmlfile) && tpl_time <= getftime(htmlfile) return 1 endif return 0 -endfunction "}}} +endfunction + -function! s:html_insert_contents(html_lines, content) "{{{ +function! s:html_insert_contents(html_lines, content) let lines = [] for line in a:html_lines if line =~# '%content%' @@ -271,20 +276,21 @@ function! s:html_insert_contents(html_lines, content) "{{{ endif endfor return lines -endfunction "}}} -"}}} +endfunction -" INLINE TAGS "{{{ -function! s:tag_eqin(value) "{{{ + +function! s:tag_eqin(value) " mathJAX wants \( \) for inline maths return '\('.s:mid(a:value, 1).'\)' -endfunction "}}} +endfunction -function! s:tag_em(value) "{{{ + +function! s:tag_em(value) return '<em>'.s:mid(a:value, 1).'</em>' -endfunction "}}} +endfunction + -function! s:tag_strong(value, header_ids) "{{{ +function! s:tag_strong(value, header_ids) let text = s:mid(a:value, 1) let id = s:escape_html_attribute(text) let complete_id = '' @@ -299,9 +305,10 @@ function! s:tag_strong(value, header_ids) "{{{ let complete_id .= '-'.id return '<span id="'.s:escape_html_attribute(complete_id).'"></span><strong id="' \ .id.'">'.text.'</strong>' -endfunction "}}} +endfunction + -function! s:tag_tags(value, header_ids) "{{{ +function! s:tag_tags(value, header_ids) let complete_id = '' for level in range(6) if a:header_ids[level][0] != '' @@ -320,79 +327,80 @@ function! s:tag_tags(value, header_ids) "{{{ \ .id.'">'.tag.'</span>') endfor return join(result) -endfunction "}}} +endfunction + -function! s:tag_todo(value) "{{{ +function! s:tag_todo(value) return '<span class="todo">'.a:value.'</span>' -endfunction "}}} +endfunction -function! s:tag_strike(value) "{{{ + +function! s:tag_strike(value) return '<del>'.s:mid(a:value, 2).'</del>' -endfunction "}}} +endfunction -function! s:tag_super(value) "{{{ + +function! s:tag_super(value) return '<sup><small>'.s:mid(a:value, 1).'</small></sup>' -endfunction "}}} +endfunction -function! s:tag_sub(value) "{{{ - return '<sub><small>'.s:mid(a:value, 2).'</small></sub>' -endfunction "}}} -function! s:tag_code(value) "{{{ - return '<code>'.s:safe_html_preformatted(s:mid(a:value, 1)).'</code>' -endfunction "}}} +function! s:tag_sub(value) + return '<sub><small>'.s:mid(a:value, 2).'</small></sub>' +endfunction -"function! s:tag_pre(value) "{{{ -" return '<code>'.s:mid(a:value, 3).'</code>' -"endfunction "}}} -"FIXME dead code? -"function! s:tag_math(value) "{{{ -" return '\['.s:mid(a:value, 3).'\]' -"endfunction "}}} +function! s:tag_code(value) + return '<code>'.s:safe_html_preformatted(s:mid(a:value, 1)).'</code>' +endfunction -"{{{ v2.0 links -" match n-th ARG within {{URL[|ARG1|ARG2|...]}} " {{{ +" match n-th ARG within {{URL[|ARG1|ARG2|...]}} " *c,d,e),... function! vimwiki#html#incl_match_arg(nn_index) let rx = vimwiki#vars#get_global('rxWikiInclPrefix'). vimwiki#vars#get_global('rxWikiInclUrl') - let rx = rx. repeat(vimwiki#vars#get_global('rxWikiInclSeparator'). vimwiki#vars#get_global('rxWikiInclArg'), a:nn_index-1) + let rx = rx . repeat(vimwiki#vars#get_global('rxWikiInclSeparator') . + \ vimwiki#vars#get_global('rxWikiInclArg'), a:nn_index-1) if a:nn_index > 0 - let rx = rx. vimwiki#vars#get_global('rxWikiInclSeparator'). '\zs'. vimwiki#vars#get_global('rxWikiInclArg'). '\ze' + let rx = rx. vimwiki#vars#get_global('rxWikiInclSeparator'). '\zs' . + \ vimwiki#vars#get_global('rxWikiInclArg') . '\ze' endif - let rx = rx. vimwiki#vars#get_global('rxWikiInclArgs'). vimwiki#vars#get_global('rxWikiInclSuffix') + let rx = rx . vimwiki#vars#get_global('rxWikiInclArgs') . + \ vimwiki#vars#get_global('rxWikiInclSuffix') return rx endfunction -"}}} -function! vimwiki#html#linkify_link(src, descr) "{{{ + +function! vimwiki#html#linkify_link(src, descr) let src_str = ' href="'.s:escape_html_attribute(a:src).'"' let descr = substitute(a:descr,'^\s*\(.*\)\s*$','\1','') let descr = (descr == "" ? a:src : descr) let descr_str = (descr =~# vimwiki#vars#get_global('rxWikiIncl') - \ ? s:tag_wikiincl(descr) + \ ? s:tag_wikiincl(descr) \ : descr) return '<a'.src_str.'>'.descr_str.'</a>' -endfunction "}}} +endfunction + -function! vimwiki#html#linkify_image(src, descr, verbatim_str) "{{{ +function! vimwiki#html#linkify_image(src, descr, verbatim_str) let src_str = ' src="'.a:src.'"' let descr_str = (a:descr != '' ? ' alt="'.a:descr.'"' : '') let verbatim_str = (a:verbatim_str != '' ? ' '.a:verbatim_str : '') return '<img'.src_str.descr_str.verbatim_str.' />' -endfunction "}}} +endfunction -function! s:tag_weblink(value) "{{{ + +function! s:tag_weblink(value) " Weblink Template -> <a href="url">descr</a> let str = a:value let url = matchstr(str, vimwiki#vars#get_syntaxlocal('rxWeblinkMatchUrl')) let descr = matchstr(str, vimwiki#vars#get_syntaxlocal('rxWeblinkMatchDescr')) let line = vimwiki#html#linkify_link(url, descr) return line -endfunction "}}} +endfunction -function! s:tag_wikiincl(value) "{{{ + +function! s:tag_wikiincl(value) " {{imgurl|arg1|arg2}} -> ??? " {{imgurl}} -> <img src="imgurl"/> " {{imgurl|descr|style="A"}} -> <img src="imgurl" alt="descr" style="A" /> @@ -409,8 +417,7 @@ function! s:tag_wikiincl(value) "{{{ let link_infos = vimwiki#base#resolve_link(url_0) if link_infos.scheme =~# '\mlocal\|wiki\d\+\|diary' - let url = vimwiki#path#relpath(fnamemodify(s:current_html_file, ':h'), - \ link_infos.filename) + let url = vimwiki#path#relpath(fnamemodify(s:current_html_file, ':h'), link_infos.filename) " strip the .html extension when we have wiki links, so that the user can " simply write {{image.png}} to include an image from the wiki directory if link_infos.scheme =~# '\mwiki\d\+\|diary' @@ -424,9 +431,10 @@ function! s:tag_wikiincl(value) "{{{ let line = vimwiki#html#linkify_image(url, descr, verbatim_str) endif return line -endfunction "}}} +endfunction -function! s:tag_wikilink(value) "{{{ + +function! s:tag_wikilink(value) " [[url]] -> <a href="url.html">url</a> " [[url|descr]] -> <a href="url.html">descr</a> " [[url|{{...}}]] -> <a href="url.html"> ... </a> @@ -439,8 +447,7 @@ function! s:tag_wikilink(value) "{{{ let descr = matchstr(str, vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr')) let descr = (substitute(descr,'^\s*\(.*\)\s*$','\1','') != '' ? descr : url) - let line = VimwikiLinkConverter(url, s:current_wiki_file, - \ s:current_html_file) + let line = VimwikiLinkConverter(url, s:current_wiki_file, s:current_html_file) if line == '' let link_infos = vimwiki#base#resolve_link(url, s:current_wiki_file) @@ -471,11 +478,10 @@ function! s:tag_wikilink(value) "{{{ let line = vimwiki#html#linkify_link(line, descr) return line -endfunction "}}} -"}}} +endfunction -function! s:tag_remove_internal_link(value) "{{{ +function! s:tag_remove_internal_link(value) let value = s:mid(a:value, 2) let line = '' @@ -496,9 +502,10 @@ function! s:tag_remove_internal_link(value) "{{{ let line = value endif return line -endfunction "}}} +endfunction + -function! s:tag_remove_external_link(value) "{{{ +function! s:tag_remove_external_link(value) let value = s:mid(a:value, 1) let line = '' @@ -518,14 +525,16 @@ function! s:tag_remove_external_link(value) "{{{ let line = '['.value.']' endif return line -endfunction "}}} +endfunction + -function! s:make_tag(line, regexp, func, ...) "{{{ +function! s:make_tag(line, regexp, func, ...) " Make tags for a given matched regexp. " Exclude preformatted text and href links. - " FIXME + " FIXME let patt_splitter = '\(`[^`]\+`\)\|'. - \ '\('.vimwiki#vars#get_syntaxlocal('rxPreStart').'.\+'.vimwiki#vars#get_syntaxlocal('rxPreEnd').'\)\|'. + \ '\('.vimwiki#vars#get_syntaxlocal('rxPreStart').'.\+'. + \ vimwiki#vars#get_syntaxlocal('rxPreEnd').'\)\|'. \ '\(<a href.\{-}</a>\)\|'. \ '\(<img src.\{-}/>\)\|'. \ '\(<pre.\{-}</pre>\)\|'. @@ -557,16 +566,18 @@ function! s:make_tag(line, regexp, func, ...) "{{{ endfor endif return res_line -endfunction "}}} +endfunction + -function! s:process_tags_remove_links(line) " {{{ +function! s:process_tags_remove_links(line) let line = a:line let line = s:make_tag(line, '\[\[.\{-}\]\]', 's:tag_remove_internal_link') let line = s:make_tag(line, '\[.\{-}\]', 's:tag_remove_external_link') return line -endfunction " }}} +endfunction -function! s:process_tags_typefaces(line, header_ids) "{{{ + +function! s:process_tags_typefaces(line, header_ids) let line = a:line let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxItalic'), 's:tag_em') let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxBold'), 's:tag_strong', a:header_ids) @@ -578,71 +589,76 @@ function! s:process_tags_typefaces(line, header_ids) "{{{ let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxEqIn'), 's:tag_eqin') let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxTags'), 's:tag_tags', a:header_ids) return line -endfunction " }}} +endfunction -function! s:process_tags_links(line) " {{{ + +function! s:process_tags_links(line) let line = a:line let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxWikiLink'), 's:tag_wikilink') let line = s:make_tag(line, vimwiki#vars#get_global('rxWikiIncl'), 's:tag_wikiincl') let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxWeblink'), 's:tag_weblink') return line -endfunction " }}} +endfunction + -function! s:process_inline_tags(line, header_ids) "{{{ +function! s:process_inline_tags(line, header_ids) let line = s:process_tags_links(a:line) let line = s:process_tags_typefaces(line, a:header_ids) return line -endfunction " }}} -"}}} +endfunction + -" BLOCK TAGS {{{ -function! s:close_tag_pre(pre, ldest) "{{{ +function! s:close_tag_pre(pre, ldest) if a:pre[0] call insert(a:ldest, "</pre>") return 0 endif return a:pre -endfunction "}}} +endfunction + -function! s:close_tag_math(math, ldest) "{{{ +function! s:close_tag_math(math, ldest) if a:math[0] call insert(a:ldest, "\\\]") return 0 endif return a:math -endfunction "}}} +endfunction -function! s:close_tag_quote(quote, ldest) "{{{ + +function! s:close_tag_quote(quote, ldest) if a:quote call insert(a:ldest, "</blockquote>") return 0 endif return a:quote -endfunction "}}} +endfunction -function! s:close_tag_para(para, ldest) "{{{ + +function! s:close_tag_para(para, ldest) if a:para call insert(a:ldest, "</p>") return 0 endif return a:para -endfunction "}}} +endfunction -function! s:close_tag_table(table, ldest, header_ids) "{{{ + +function! s:close_tag_table(table, ldest, header_ids) " The first element of table list is a string which tells us if table should be centered. " The rest elements are rows which are lists of columns: - " ['center', + " ['center', " [ CELL1, CELL2, CELL3 ], " [ CELL1, CELL2, CELL3 ], " [ CELL1, CELL2, CELL3 ], " ] " And CELLx is: { 'body': 'col_x', 'rowspan': r, 'colspan': c } - function! s:sum_rowspan(table) "{{{ + function! s:sum_rowspan(table) let table = a:table " Get max cells - let max_cells = 0 + let max_cells = 0 for row in table[1:] let n_cells = len(row) if n_cells > max_cells @@ -668,9 +684,9 @@ function! s:close_tag_table(table, ldest, header_ids) "{{{ endif endfor endfor - endfunction "}}} + endfunction - function! s:sum_colspan(table) "{{{ + function! s:sum_colspan(table) for row in a:table[1:] let cols = 1 @@ -683,19 +699,19 @@ function! s:close_tag_table(table, ldest, header_ids) "{{{ endif endfor endfor - endfunction "}}} + endfunction - function! s:close_tag_row(row, header, ldest, header_ids) "{{{ + function! s:close_tag_row(row, header, ldest, header_ids) call add(a:ldest, '<tr>') - " Set tag element of columns + " Set tag element of columns if a:header let tag_name = 'th' else let tag_name = 'td' end - " Close tag of columns + " Close tag of columns for cell in a:row if cell.rowspan == 0 || cell.colspan == 0 continue @@ -718,7 +734,7 @@ function! s:close_tag_table(table, ldest, header_ids) "{{{ endfor call add(a:ldest, '</tr>') - endfunction "}}} + endfunction let table = a:table let ldest = a:ldest @@ -761,24 +777,27 @@ function! s:close_tag_table(table, ldest, header_ids) "{{{ let table = [] endif return table -endfunction "}}} +endfunction -function! s:close_tag_list(lists, ldest) "{{{ + +function! s:close_tag_list(lists, ldest) while len(a:lists) let item = remove(a:lists, 0) call insert(a:ldest, item[0]) endwhile -endfunction "}}} +endfunction + -function! s:close_tag_def_list(deflist, ldest) "{{{ +function! s:close_tag_def_list(deflist, ldest) if a:deflist call insert(a:ldest, "</dl>") return 0 endif return a:deflist -endfunction "}}} +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] "XXX always outputs a single line or empty list! let lines = [] @@ -808,9 +827,10 @@ function! s:process_tag_pre(line, pre) "{{{ call add(lines, s:safe_html_preformatted(a:line)) endif return [processed, lines, pre] -endfunction "}}} +endfunction + -function! s:process_tag_math(line, math) "{{{ +function! s:process_tag_math(line, math) " math is the list of [is_in_math, indent_of_math] let lines = [] let math = a:math @@ -844,9 +864,10 @@ function! s:process_tag_math(line, math) "{{{ call add(lines, substitute(a:line, '^\s\{'.math[1].'}', '', '')) endif return [processed, lines, math] -endfunction "}}} +endfunction -function! s:process_tag_quote(line, quote) "{{{ + +function! s:process_tag_quote(line, quote) let lines = [] let quote = a:quote let processed = 0 @@ -862,11 +883,12 @@ function! s:process_tag_quote(line, quote) "{{{ let quote = 0 endif return [processed, lines, quote] -endfunction "}}} +endfunction -function! s:process_tag_list(line, lists) "{{{ - function! s:add_checkbox(line, rx_list) "{{{ +function! s:process_tag_list(line, lists) + + function! s:add_checkbox(line, rx_list) let st_tag = '<li>' let chk = matchlist(a:line, a:rx_list) if !empty(chk) && len(chk[1]) > 0 @@ -882,7 +904,8 @@ function! s:process_tag_list(line, lists) "{{{ endif endif return [st_tag, ''] - endfunction "}}} + endfunction + let in_list = (len(a:lists) > 0) @@ -946,8 +969,7 @@ function! s:process_tag_list(line, lists) "{{{ call add(a:lists, [en_tag, indent]) call add(lines, st_tag) - call add(lines, - \ substitute(a:line, lstRegExp.'\%('.checkbox.'\)\?', '', '')) + call add(lines, substitute(a:line, lstRegExp.'\%('.checkbox.'\)\?', '', '')) let processed = 1 elseif in_list && a:line =~# '^\s\+\S\+' if vimwiki#vars#get_global('list_ignore_newline') @@ -960,9 +982,10 @@ function! s:process_tag_list(line, lists) "{{{ call s:close_tag_list(a:lists, lines) endif return [processed, lines] -endfunction "}}} +endfunction -function! s:process_tag_def_list(line, deflist) "{{{ + +function! s:process_tag_def_list(line, deflist) let lines = [] let deflist = a:deflist let processed = 0 @@ -984,9 +1007,10 @@ function! s:process_tag_def_list(line, deflist) "{{{ call add(lines, "</dl>") endif return [processed, lines, deflist] -endfunction "}}} +endfunction -function! s:process_tag_para(line, para) "{{{ + +function! s:process_tag_para(line, para) let lines = [] let para = a:para let processed = 0 @@ -1006,9 +1030,10 @@ function! s:process_tag_para(line, para) "{{{ let para = 0 endif return [processed, lines, para] -endfunction "}}} +endfunction -function! s:process_tag_h(line, id) "{{{ + +function! s:process_tag_h(line, id) let line = a:line let processed = 0 let h_level = 0 @@ -1061,7 +1086,6 @@ function! s:process_tag_h(line, id) "{{{ endif - if centered let h_part .= ' class="justcenter">' else @@ -1075,9 +1099,10 @@ function! s:process_tag_h(line, id) "{{{ let processed = 1 endif return [processed, line] -endfunction "}}} +endfunction + -function! s:process_tag_hr(line) "{{{ +function! s:process_tag_hr(line) let line = a:line let processed = 0 if a:line =~# '^-----*$' @@ -1085,10 +1110,11 @@ function! s:process_tag_hr(line) "{{{ let processed = 1 endif return [processed, line] -endfunction "}}} +endfunction -function! s:process_tag_table(line, table, header_ids) "{{{ - function! s:table_empty_cell(value) "{{{ + +function! s:process_tag_table(line, table, header_ids) + function! s:table_empty_cell(value) let cell = {} if a:value =~# '^\s*\\/\s*$' @@ -1110,9 +1136,9 @@ function! s:process_tag_table(line, table, header_ids) "{{{ endif return cell - endfunction "}}} + endfunction - function! s:table_add_row(table, line) "{{{ + function! s:table_add_row(table, line) if empty(a:table) if a:line =~# '^\s\+' let row = ['center', []] @@ -1123,7 +1149,7 @@ function! s:process_tag_table(line, table, header_ids) "{{{ let row = [[]] endif return row - endfunction "}}} + endfunction let table = a:table let lines = [] @@ -1144,14 +1170,10 @@ function! s:process_tag_table(line, table, header_ids) "{{{ let table = s:close_tag_table(table, lines, a:header_ids) endif return [processed, lines, table] -endfunction "}}} - -"}}} +endfunction -" }}} -" WIKI2HTML "{{{ -function! s:parse_line(line, state) " {{{ +function! s:parse_line(line, state) let state = {} let state.para = a:state.para let state.quote = a:state.quote @@ -1169,7 +1191,7 @@ function! s:parse_line(line, state) " {{{ let processed = 0 - " pres "{{{ + " pres if !processed let [processed, lines, state.pre] = s:process_tag_pre(line, state.pre) " pre is just fine to be in the list -- do not close list item here. @@ -1193,7 +1215,7 @@ function! s:parse_line(line, state) " {{{ endif call extend(res_lines, lines) endif - "}}} + if !processed if line =~# vimwiki#vars#get_syntaxlocal('rxComment') @@ -1227,7 +1249,7 @@ function! s:parse_line(line, state) " {{{ endif endif - " html template -- placeholder "{{{ + " html template -- placeholder if !processed if line =~# '\m^\s*%template\%(\s.*\)\?$' let processed = 1 @@ -1235,17 +1257,16 @@ function! s:parse_line(line, state) " {{{ let state.placeholder = ['template', param] endif endif - "}}} - " tables "{{{ + + " tables if !processed - let [processed, lines, state.table] = s:process_tag_table(line, - \ state.table, state.header_ids) + let [processed, lines, state.table] = s:process_tag_table(line, state.table, state.header_ids) call extend(res_lines, lines) endif - "}}} - " lists "{{{ + + " lists if !processed let [processed, lines] = s:process_tag_list(line, state.lists) if processed && state.quote @@ -1271,15 +1292,14 @@ function! s:parse_line(line, state) " {{{ call extend(res_lines, lines) endif - "}}} - " headers "{{{ + + " headers if !processed let [processed, line] = s:process_tag_h(line, state.header_ids) if processed call s:close_tag_list(state.lists, res_lines) - let state.table = s:close_tag_table(state.table, res_lines, - \ state.header_ids) + let state.table = s:close_tag_table(state.table, res_lines, state.header_ids) 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) @@ -1288,9 +1308,9 @@ function! s:parse_line(line, state) " {{{ call add(res_lines, line) endif endif - "}}} - " quotes "{{{ + + " quotes if !processed let [processed, lines, state.quote] = s:process_tag_quote(line, state.quote) if processed && len(state.lists) @@ -1316,23 +1336,22 @@ function! s:parse_line(line, state) " {{{ call extend(res_lines, lines) endif - "}}} - " horizontal rules "{{{ + + " horizontal rules if !processed let [processed, line] = s:process_tag_hr(line) if processed call s:close_tag_list(state.lists, res_lines) - let state.table = s:close_tag_table(state.table, res_lines, - \ state.header_ids) + let state.table = s:close_tag_table(state.table, res_lines, state.header_ids) 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) endif endif - "}}} - " definition lists "{{{ + + " definition lists if !processed let [processed, lines, state.deflist] = s:process_tag_def_list(line, state.deflist) @@ -1340,9 +1359,9 @@ function! s:parse_line(line, state) " {{{ call extend(res_lines, lines) endif - "}}} - "" P "{{{ + + "" P if !processed let [processed, lines, state.para] = s:process_tag_para(line, state.para) if processed && len(state.lists) @@ -1358,15 +1377,14 @@ function! s:parse_line(line, state) " {{{ let state.math = s:close_tag_math(state.math, res_lines) endif if processed && len(state.table) - let state.table = s:close_tag_table(state.table, res_lines, - \ state.header_ids) + let state.table = s:close_tag_table(state.table, res_lines, state.header_ids) endif call map(lines, 's:process_inline_tags(v:val, state.header_ids)') call extend(res_lines, lines) endif - "}}} + "" add the rest if !processed @@ -1375,14 +1393,17 @@ function! s:parse_line(line, state) " {{{ return [res_lines, state] -endfunction " }}} +endfunction + -function! s:use_custom_wiki2html() "{{{ +function! s:use_custom_wiki2html() let custom_wiki2html = vimwiki#vars#get_wikilocal('custom_wiki2html') - return !empty(custom_wiki2html) && (s:file_exists(custom_wiki2html) || s:binary_exists(custom_wiki2html)) -endfunction " }}} + return !empty(custom_wiki2html) && + \ (s:file_exists(custom_wiki2html) || s:binary_exists(custom_wiki2html)) +endfunction + -function! vimwiki#html#CustomWiki2HTML(path, wikifile, force) "{{{ +function! vimwiki#html#CustomWiki2HTML(path, wikifile, force) call vimwiki#path#mkdir(a:path) echomsg system(vimwiki#vars#get_wikilocal('custom_wiki2html'). ' '. \ a:force. ' '. @@ -1391,14 +1412,20 @@ function! vimwiki#html#CustomWiki2HTML(path, wikifile, force) "{{{ \ shellescape(a:path). ' '. \ shellescape(a:wikifile). ' '. \ shellescape(s:default_CSS_full_name(a:path)). ' '. - \ (len(vimwiki#vars#get_wikilocal('template_path')) > 1 ? shellescape(expand(vimwiki#vars#get_wikilocal('template_path'))) : '-'). ' '. - \ (len(vimwiki#vars#get_wikilocal('template_default')) > 0 ? vimwiki#vars#get_wikilocal('template_default') : '-'). ' '. - \ (len(vimwiki#vars#get_wikilocal('template_ext')) > 0 ? vimwiki#vars#get_wikilocal('template_ext') : '-'). ' '. - \ (len(vimwiki#vars#get_bufferlocal('subdir')) > 0 ? shellescape(s:root_path(vimwiki#vars#get_bufferlocal('subdir'))) : '-'). ' '. - \ (len(vimwiki#vars#get_wikilocal('custom_wiki2html_args')) > 0 ? vimwiki#vars#get_wikilocal('custom_wiki2html_args') : '-')) -endfunction " }}} - -function! s:convert_file(path_html, wikifile) "{{{ + \ (len(vimwiki#vars#get_wikilocal('template_path')) > 1 ? + \ shellescape(expand(vimwiki#vars#get_wikilocal('template_path'))) : '-'). ' '. + \ (len(vimwiki#vars#get_wikilocal('template_default')) > 0 ? + \ vimwiki#vars#get_wikilocal('template_default') : '-'). ' '. + \ (len(vimwiki#vars#get_wikilocal('template_ext')) > 0 ? + \ vimwiki#vars#get_wikilocal('template_ext') : '-'). ' '. + \ (len(vimwiki#vars#get_bufferlocal('subdir')) > 0 ? + \ shellescape(s:root_path(vimwiki#vars#get_bufferlocal('subdir'))) : '-'). ' '. + \ (len(vimwiki#vars#get_wikilocal('custom_wiki2html_args')) > 0 ? + \ vimwiki#vars#get_wikilocal('custom_wiki2html_args') : '-')) +endfunction + + +function! s:convert_file(path_html, wikifile) let done = 0 let wikifile = fnamemodify(a:wikifile, ":p") @@ -1450,14 +1477,13 @@ function! s:convert_file(path_html, wikifile) "{{{ let s:gt_pattern = '>' if vimwiki#vars#get_global('valid_html_tags') != '' let tags = join(split(vimwiki#vars#get_global('valid_html_tags'), '\s*,\s*'), '\|') - let s:lt_pattern = '\c<\%(/\?\%('.tags.'\)\%(\s\{-1}\S\{-}\)\{-}/\?>\)\@!' + let s:lt_pattern = '\c<\%(/\?\%('.tags.'\)\%(\s\{-1}\S\{-}\)\{-}/\?>\)\@!' let s:gt_pattern = '\c\%(</\?\%('.tags.'\)\%(\s\{-1}\S\{-}\)\{-}/\?\)\@<!>' endif " prepare regexps for lists let s:bullets = '[*-]' - let s:numbers = - \'\C\%(#\|\d\+)\|\d\+\.\|[ivxlcdm]\+)\|[IVXLCDM]\+)\|\l\{1,2})\|\u\{1,2})\)' + let s:numbers = '\C\%(#\|\d\+)\|\d\+\.\|[ivxlcdm]\+)\|[IVXLCDM]\+)\|\l\{1,2})\|\u\{1,2})\)' for line in lsource let oldquote = state.quote @@ -1539,17 +1565,19 @@ function! s:convert_file(path_html, wikifile) "{{{ endif return path_html.htmlfile -endfunction "}}} +endfunction + -function! vimwiki#html#Wiki2HTML(path_html, wikifile) "{{{ +function! vimwiki#html#Wiki2HTML(path_html, wikifile) let result = s:convert_file(a:path_html, a:wikifile) if result != '' call s:create_default_CSS(a:path_html) endif return result -endfunction "}}} +endfunction + -function! vimwiki#html#WikiAll2HTML(path_html) "{{{ +function! vimwiki#html#WikiAll2HTML(path_html) if !s:syntax_supported() && !s:use_custom_wiki2html() echomsg 'Vimwiki Error: Conversion to HTML is not supported for this syntax' return @@ -1577,7 +1605,8 @@ function! vimwiki#html#WikiAll2HTML(path_html) "{{{ let current_subdir = vimwiki#vars#get_bufferlocal('subdir') let current_invsubdir = vimwiki#vars#get_bufferlocal('invsubdir') - let wikifiles = split(glob(vimwiki#vars#get_wikilocal('path').'**/*'.vimwiki#vars#get_wikilocal('ext')), '\n') + let wikifiles = split(glob(vimwiki#vars#get_wikilocal('path').'**/*'. + \ vimwiki#vars#get_wikilocal('ext')), '\n') for wikifile in wikifiles let wikifile = fnamemodify(wikifile, ":p") @@ -1606,27 +1635,32 @@ function! vimwiki#html#WikiAll2HTML(path_html) "{{{ echomsg 'Vimwiki: Done!' let &more = setting_more -endfunction "}}} +endfunction -function! s:file_exists(fname) "{{{ + +function! s:file_exists(fname) return !empty(getftype(expand(a:fname))) -endfunction "}}} +endfunction -function! s:binary_exists(fname) "{{{ + +function! s:binary_exists(fname) return executable(expand(a:fname)) -endfunction "}}} +endfunction + -function! s:get_wikifile_url(wikifile) "{{{ +function! s:get_wikifile_url(wikifile) return vimwiki#vars#get_wikilocal('path_html') . \ vimwiki#base#subdir(vimwiki#vars#get_wikilocal('path'), a:wikifile). \ fnamemodify(a:wikifile, ":t:r").'.html' -endfunction "}}} +endfunction + -function! vimwiki#html#PasteUrl(wikifile) "{{{ +function! vimwiki#html#PasteUrl(wikifile) execute 'r !echo file://'.s:get_wikifile_url(a:wikifile) -endfunction "}}} +endfunction + -function! vimwiki#html#CatUrl(wikifile) "{{{ +function! vimwiki#html#CatUrl(wikifile) execute '!echo file://'.s:get_wikifile_url(a:wikifile) -endfunction "}}} -"}}} +endfunction + diff --git a/autoload/vimwiki/lst.vim b/autoload/vimwiki/lst.vim @@ -1,20 +1,25 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=99 +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 " Vimwiki autoload plugin file -" Desc: Everything concerning lists and checkboxes +" Description: Everything concerning lists and checkboxes " Home: https://github.com/vimwiki/vimwiki/ + if exists("g:loaded_vimwiki_list_auto") || &cp finish endif let g:loaded_vimwiki_list_auto = 1 -"incrementation functions for the various kinds of numbers {{{ -function! s:increment_1(value) "{{{ +" --------------------------------------------------------- +" incrementation functions for the various kinds of numbers +" --------------------------------------------------------- + +function! s:increment_1(value) return eval(a:value) + 1 -endfunction "}}} +endfunction + -function! s:increment_A(value) "{{{ +function! s:increment_A(value) let list_of_chars = split(a:value, '.\zs') let done = 0 for idx in reverse(range(len(list_of_chars))) @@ -31,9 +36,10 @@ function! s:increment_A(value) "{{{ call insert(list_of_chars, 'A') endif return join(list_of_chars, '') -endfunction "}}} +endfunction -function! s:increment_a(value) "{{{ + +function! s:increment_a(value) let list_of_chars = split(a:value, '.\zs') let done = 0 for idx in reverse(range(len(list_of_chars))) @@ -50,9 +56,10 @@ function! s:increment_a(value) "{{{ call insert(list_of_chars, 'a') endif return join(list_of_chars, '') -endfunction "}}} +endfunction + -function! s:increment_I(value) "{{{ +function! s:increment_I(value) let subst_list = [ ['XLVIII$', 'IL'], ['VIII$', 'IX'], ['III$', 'IV'], \ ['DCCCXCIX$', 'CM'], ['CCCXCIX$', 'CD'], ['LXXXIX$', 'XC'], \ ['XXXIX$', 'XL'], ['\(I\{1,2\}\)$', '\1I'], ['CDXCIX$', 'D'], @@ -64,9 +71,10 @@ function! s:increment_I(value) "{{{ endif endfor return '' -endfunction "}}} +endfunction + -function! s:increment_i(value) "{{{ +function! s:increment_i(value) let subst_list = [ ['xlviii$', 'il'], ['viii$', 'ix'], ['iii$', 'iv'], \ ['dcccxcix$', 'cm'], ['cccxcix$', 'cd'], ['lxxxix$', 'xc'], \ ['xxxix$', 'xl'], ['\(i\{1,2\}\)$', '\1i'], ['cdxcix$', 'd'], @@ -78,27 +86,29 @@ function! s:increment_i(value) "{{{ endif endfor return '' -endfunction "}}} +endfunction -"incrementation functions for the various kinds of numbers }}} -"utility functions {{{ +" --------------------------------------------------------- +" utility functions +" --------------------------------------------------------- -function! s:substitute_rx_in_line(lnum, pattern, new_string) "{{{ - call setline(a:lnum, substitute(getline(a:lnum), a:pattern, a:new_string, - \ '')) -endfunction "}}} +function! s:substitute_rx_in_line(lnum, pattern, new_string) + call setline(a:lnum, substitute(getline(a:lnum), a:pattern, a:new_string, '')) +endfunction -function! s:substitute_string_in_line(lnum, old_string, new_string) "{{{ - call s:substitute_rx_in_line(a:lnum, vimwiki#u#escape(a:old_string), - \ a:new_string) -endfunction "}}} -function! s:first_char(string) "{{{ +function! s:substitute_string_in_line(lnum, old_string, new_string) + call s:substitute_rx_in_line(a:lnum, vimwiki#u#escape(a:old_string), a:new_string) +endfunction + + +function! s:first_char(string) return matchstr(a:string, '^.') -endfunction "}}} +endfunction + -if exists("*strdisplaywidth") "{{{ +if exists("*strdisplaywidth") function! s:string_length(str) return strdisplaywidth(a:str) endfunction @@ -106,31 +116,35 @@ else function! s:string_length(str) return strlen(substitute(a:str, '.', 'x', 'g')) endfunction -endif "}}} +endif + -function! vimwiki#lst#default_symbol() "{{{ +function! vimwiki#lst#default_symbol() return vimwiki#vars#get_syntaxlocal('list_markers')[0] -endfunction "}}} +endfunction -function! vimwiki#lst#get_list_margin() "{{{ + +function! vimwiki#lst#get_list_margin() let list_margin = vimwiki#vars#get_wikilocal('list_margin') if list_margin < 0 return &sw else return list_margin endif -endfunction "}}} +endfunction + "Returns: the column where the text of a line starts (possible list item "markers and checkboxes are skipped) -function! s:text_begin(lnum) "{{{ +function! s:text_begin(lnum) return s:string_length(matchstr(getline(a:lnum), vimwiki#vars#get_syntaxlocal('rxListItem'))) -endfunction "}}} +endfunction + "Returns: 2 if there is a marker and text " 1 for a marker and no text " 0 for no marker at all (empty line or only text) -function! s:line_has_marker(lnum) "{{{ +function! s:line_has_marker(lnum) if getline(a:lnum) =~# vimwiki#vars#get_syntaxlocal('rxListItem').'\s*$' return 1 elseif getline(a:lnum) =~# vimwiki#vars#get_syntaxlocal('rxListItem').'\s*\S' @@ -138,11 +152,12 @@ function! s:line_has_marker(lnum) "{{{ else return 0 endif -endfunction "}}} +endfunction -"utility functions }}} -"get properties of an item {{{ +" --------------------------------------------------------- +" get properties of a list item +" --------------------------------------------------------- "Returns: the mainly used data structure in this file "An item represents a single list item and is a dictionary with the keys @@ -150,7 +165,7 @@ endfunction "}}} "type - 1 for bulleted item, 2 for numbered item, 0 for a regular line "mrkr - the concrete marker, e.g. '**' or 'b)' "cb - the char in the checkbox or '' if there is no checkbox -function! s:get_item(lnum) "{{{ +function! s:get_item(lnum) let item = {'lnum': a:lnum} if a:lnum == 0 || a:lnum > line('$') let item.type = 0 @@ -176,33 +191,37 @@ function! s:get_item(lnum) "{{{ endif return item -endfunction "}}} +endfunction -function! s:empty_item() "{{{ + +function! s:empty_item() return {'type': 0} -endfunction "}}} +endfunction + "Returns: level of the line "0 is the 'highest' level -function! s:get_level(lnum) "{{{ +function! s:get_level(lnum) if getline(a:lnum) =~# '^\s*$' return 0 endif if !vimwiki#vars#get_syntaxlocal('recurring_bullets') let level = indent(a:lnum) else - let level = s:string_length(matchstr(getline(a:lnum), vimwiki#vars#get_syntaxlocal(rx_bullet_chars)))-1 + let level = s:string_length(matchstr(getline(a:lnum), + \ vimwiki#vars#get_syntaxlocal(rx_bullet_chars)))-1 if level < 0 let level = (indent(a:lnum) == 0) ? 0 : 9999 endif endif return level -endfunction "}}} +endfunction + "Returns: 1, a, i, A, I or '' "If in doubt if alphanumeric character or romanian "numeral, peek in the previous line -function! s:guess_kind_of_numbered_item(item) "{{{ +function! s:guess_kind_of_numbered_item(item) if a:item.type != 2 | return '' | endif let number_chars = a:item.mrkr[:-2] let divisor = a:item.mrkr[-1:] @@ -260,9 +279,10 @@ function! s:guess_kind_of_numbered_item(item) "{{{ endif endif -endfunction "}}} +endfunction + -function! s:regexp_of_marker(item) "{{{ +function! s:regexp_of_marker(item) if a:item.type == 1 return vimwiki#u#escape(a:item.mrkr) elseif a:item.type == 2 @@ -276,15 +296,16 @@ function! s:regexp_of_marker(item) "{{{ else return '' endif -endfunction "}}} +endfunction -"get properties of an item }}} -"functions for navigating between items {{{ +" --------------------------------------------------------- +" functions for navigating between items +" --------------------------------------------------------- "Returns: the list item after a:item or an empty item "If a:ignore_kind is 1, the markers can differ -function! s:get_next_list_item(item, ignore_kind) "{{{ +function! s:get_next_list_item(item, ignore_kind) let org_lvl = s:get_level(a:item.lnum) if !a:ignore_kind let org_regex = s:regexp_of_marker(a:item) @@ -303,11 +324,12 @@ function! s:get_next_list_item(item, ignore_kind) "{{{ let cur_ln = s:get_next_line(cur_ln) endwhile return s:empty_item() -endfunction "}}} +endfunction + "Returns: the list item before a:item or an empty item "If a:ignore_kind is 1, the markers can differ -function! s:get_prev_list_item(item, ignore_kind) "{{{ +function! s:get_prev_list_item(item, ignore_kind) let org_lvl = s:get_level(a:item.lnum) if !a:ignore_kind let org_regex = s:regexp_of_marker(a:item) @@ -326,9 +348,10 @@ function! s:get_prev_list_item(item, ignore_kind) "{{{ let cur_ln = s:get_prev_line(cur_ln) endwhile return s:empty_item() -endfunction "}}} +endfunction -function! s:get_item_of_level(cur_ln, cur_lvl, org_lvl, org_regex) "{{{ + +function! s:get_item_of_level(cur_ln, cur_lvl, org_lvl, org_regex) let cur_linecontent = getline(a:cur_ln) if a:cur_lvl == a:org_lvl if cur_linecontent =~# '^\s*'.a:org_regex.'\s' @@ -339,17 +362,19 @@ function! s:get_item_of_level(cur_ln, cur_lvl, org_lvl, org_regex) "{{{ elseif a:cur_lvl < a:org_lvl return s:empty_item() endif -endfunction "}}} +endfunction + -function! s:get_any_item_of_level(cur_ln, cur_lvl, org_lvl) "{{{ +function! s:get_any_item_of_level(cur_ln, cur_lvl, org_lvl) if a:cur_lvl == a:org_lvl return s:get_item(a:cur_ln) elseif a:cur_lvl < a:org_lvl return s:empty_item() endif -endfunction "}}} +endfunction -function! s:get_first_item_in_list(item, ignore_kind) "{{{ + +function! s:get_first_item_in_list(item, ignore_kind) let cur_item = a:item while 1 let prev_item = s:get_prev_list_item(cur_item, a:ignore_kind) @@ -360,9 +385,10 @@ function! s:get_first_item_in_list(item, ignore_kind) "{{{ endif endwhile return cur_item -endfunction "}}} +endfunction + -function! s:get_last_item_in_list(item, ignore_kind) "{{{ +function! s:get_last_item_in_list(item, ignore_kind) let cur_item = a:item while 1 let next_item = s:get_next_list_item(cur_item, a:ignore_kind) @@ -373,17 +399,17 @@ function! s:get_last_item_in_list(item, ignore_kind) "{{{ endif endwhile return cur_item -endfunction "}}} +endfunction + "Returns: lnum+1 in most cases, but skips blank lines and preformatted text, "0 in case of nonvalid line. "If there is no second argument, 0 is returned at a header, otherwise the "header is skipped -function! s:get_next_line(lnum, ...) "{{{ +function! s:get_next_line(lnum, ...) if getline(a:lnum) =~# vimwiki#vars#get_syntaxlocal('rxPreStart') let cur_ln = a:lnum + 1 - while cur_ln <= line('$') && - \ getline(cur_ln) !~# vimwiki#vars#get_syntaxlocal('rxPreEnd') + while cur_ln <= line('$') && getline(cur_ln) !~# vimwiki#vars#get_syntaxlocal('rxPreEnd') let cur_ln += 1 endwhile let next_line = cur_ln @@ -401,11 +427,12 @@ function! s:get_next_line(lnum, ...) "{{{ endif return next_line -endfunction "}}} +endfunction + "Returns: lnum-1 in most cases, but skips blank lines and preformatted text "0 in case of nonvalid line and a header, because a header ends every list -function! s:get_prev_line(lnum) "{{{ +function! s:get_prev_line(lnum) let prev_line = prevnonblank(a:lnum-1) if getline(prev_line) =~# vimwiki#vars#get_syntaxlocal('rxPreEnd') @@ -425,9 +452,10 @@ function! s:get_prev_line(lnum) "{{{ endif return prev_line -endfunction "}}} +endfunction + -function! s:get_first_child(item) "{{{ +function! s:get_first_child(item) if a:item.lnum >= line('$') return s:empty_item() endif @@ -437,19 +465,18 @@ function! s:get_first_child(item) "{{{ if cur_item.type != 0 && s:get_level(cur_item.lnum) > org_lvl return cur_item endif - if cur_item.lnum > line('$') || cur_item.lnum <= 0 || - \ s:get_level(cur_item.lnum) <= org_lvl + if cur_item.lnum > line('$') || cur_item.lnum <= 0 || s:get_level(cur_item.lnum) <= org_lvl return s:empty_item() endif let cur_item = s:get_item(s:get_next_line(cur_item.lnum)) endwhile -endfunction "}}} +endfunction "Returns: the next sibling of a:child, given the parent item "Used for iterating over children "Note: child items do not necessarily have the same indent, i.e. level -function! s:get_next_child_item(parent, child) "{{{ +function! s:get_next_child_item(parent, child) if a:parent.type == 0 | return s:empty_item() | endif let parent_lvl = s:get_level(a:parent.lnum) let cur_ln = s:get_last_line_of_item_incl_children(a:child) @@ -465,9 +492,10 @@ function! s:get_next_child_item(parent, child) "{{{ endif endwhile return s:empty_item() -endfunction "}}} +endfunction -function! s:get_parent(item) "{{{ + +function! s:get_parent(item) let parent_line = 0 let cur_ln = prevnonblank(a:item.lnum) @@ -491,10 +519,11 @@ function! s:get_parent(item) "{{{ endif endwhile return s:get_item(parent_line) -endfunction "}}} +endfunction + "Returns: the item above or the item below or an empty item -function! s:get_a_neighbor_item(item) "{{{ +function! s:get_a_neighbor_item(item) let prev_item = s:get_prev_list_item(a:item, 1) if prev_item.type != 0 return prev_item @@ -505,9 +534,10 @@ function! s:get_a_neighbor_item(item) "{{{ endif endif return s:empty_item() -endfunction "}}} +endfunction + -function! s:get_a_neighbor_item_in_column(lnum, column) "{{{ +function! s:get_a_neighbor_item_in_column(lnum, column) let cur_ln = s:get_prev_line(a:lnum) while cur_ln >= 1 if s:get_level(cur_ln) <= a:column @@ -516,11 +546,12 @@ function! s:get_a_neighbor_item_in_column(lnum, column) "{{{ let cur_ln = s:get_prev_line(cur_ln) endwhile return s:empty_item() -endfunction "}}} +endfunction + "Returns: the item if there is one in a:lnum "else the multiline item a:lnum belongs to -function! s:get_corresponding_item(lnum) "{{{ +function! s:get_corresponding_item(lnum) let item = s:get_item(a:lnum) if item.type != 0 return item @@ -539,10 +570,11 @@ function! s:get_corresponding_item(lnum) "{{{ let cur_ln = s:get_prev_line(cur_ln) endwhile return s:empty_item() -endfunction "}}} +endfunction + "Returns: the last line of a (possibly multiline) item, including all children -function! s:get_last_line_of_item_incl_children(item) "{{{ +function! s:get_last_line_of_item_incl_children(item) let cur_ln = a:item.lnum let org_lvl = s:get_level(a:item.lnum) while 1 @@ -552,11 +584,12 @@ function! s:get_last_line_of_item_incl_children(item) "{{{ endif let cur_ln = next_line endwhile -endfunction "}}} +endfunction + "Returns: the last line of a (possibly multiline) item "Note: there can be other list items between the first and last line -function! s:get_last_line_of_item(item) "{{{ +function! s:get_last_line_of_item(item) if a:item.type == 0 | return 0 | endif let org_lvl = s:get_level(a:item.lnum) let last_corresponding_line = a:item.lnum @@ -571,20 +604,21 @@ function! s:get_last_line_of_item(item) "{{{ let last_corresponding_line = cur_ln let cur_ln = s:get_next_line(cur_ln) else - let cur_ln = s:get_next_line( - \ s:get_last_line_of_item_incl_children(cur_item)) + let cur_ln = s:get_next_line(s:get_last_line_of_item_incl_children(cur_item)) endif endwhile return last_corresponding_line -endfunction "}}} +endfunction + -"functions for navigating between items }}} +" --------------------------------------------------------- +" renumber list items +" --------------------------------------------------------- -"renumber list items {{{ "Renumbers the current list from a:item on downwards "Returns: the last item that was adjusted -function! s:adjust_numbered_list_below(item, recursive) "{{{ +function! s:adjust_numbered_list_below(item, recursive) if !(a:item.type == 2 || (a:item.type == 1 && a:recursive)) return a:item endif @@ -611,9 +645,10 @@ function! s:adjust_numbered_list_below(item, recursive) "{{{ let cur_item = next_item endwhile return cur_item -endfunction "}}} +endfunction + -function! s:adjust_items_recursively(parent) "{{{ +function! s:adjust_items_recursively(parent) if a:parent.type == 0 return s:empty_item() end @@ -630,13 +665,14 @@ function! s:adjust_items_recursively(parent) "{{{ return last_item endif endwhile -endfunction "}}} +endfunction + "Renumbers the list a:item is in. "If a:ignore_kind == 0, only the items which have the same kind of marker as "a:item are considered, otherwise all items. "Returns: the last item that was adjusted -function! s:adjust_numbered_list(item, ignore_kind, recursive) "{{{ +function! s:adjust_numbered_list(item, ignore_kind, recursive) if !(a:item.type == 2 || (a:item.type == 1 && (a:ignore_kind || a:recursive))) return s:empty_item() end @@ -645,10 +681,8 @@ function! s:adjust_numbered_list(item, ignore_kind, recursive) "{{{ while 1 if first_item.type == 2 - let new_mrkr = s:guess_kind_of_numbered_item(first_item) . - \ first_item.mrkr[-1:] - call s:substitute_string_in_line(first_item.lnum, first_item.mrkr, - \ new_mrkr) + let new_mrkr = s:guess_kind_of_numbered_item(first_item) . first_item.mrkr[-1:] + call s:substitute_string_in_line(first_item.lnum, first_item.mrkr, new_mrkr) let first_item.mrkr = new_mrkr endif @@ -660,20 +694,22 @@ function! s:adjust_numbered_list(item, ignore_kind, recursive) "{{{ endif let first_item = next_first_item endwhile -endfunction "}}} +endfunction + "Renumbers the list the cursor is in "also update its parents checkbox state -function! vimwiki#lst#adjust_numbered_list() "{{{ +function! vimwiki#lst#adjust_numbered_list() let cur_item = s:get_corresponding_item(line('.')) if cur_item.type == 0 | return | endif call s:adjust_numbered_list(cur_item, 1, 0) call s:update_state(s:get_parent(cur_item)) -endfunction "}}} +endfunction + "Renumbers all lists of the buffer "of course, this might take some seconds -function! vimwiki#lst#adjust_whole_buffer() "{{{ +function! vimwiki#lst#adjust_whole_buffer() let cur_ln = 1 while 1 let cur_item = s:get_item(cur_ln) @@ -685,14 +721,15 @@ function! vimwiki#lst#adjust_whole_buffer() "{{{ return endif endwhile -endfunction "}}} +endfunction -"renumber list items }}} -"checkbox stuff {{{ +" --------------------------------------------------------- +" checkbox stuff +" --------------------------------------------------------- "Returns: the rate of checkboxed list item in percent -function! s:get_rate(item) "{{{ +function! s:get_rate(item) if a:item.type == 0 || a:item.cb == '' return -1 endif @@ -702,11 +739,12 @@ function! s:get_rate(item) "{{{ endif let n = len(vimwiki#vars#get_syntaxlocal('listsyms_list')) return index(vimwiki#vars#get_syntaxlocal('listsyms_list'), state) * 100/(n-1) -endfunction "}}} +endfunction + "Set state of the list item to [ ] or [o] or whatever "Returns: 1 if the state changed, 0 otherwise -function! s:set_state(item, new_rate) "{{{ +function! s:set_state(item, new_rate) let new_state = s:rate_to_state(a:new_rate) let old_state = s:rate_to_state(s:get_rate(a:item)) if new_state !=# old_state @@ -715,11 +753,12 @@ function! s:set_state(item, new_rate) "{{{ else return 0 endif -endfunction "}}} +endfunction + "Set state of the list item to [ ] or [o] or whatever "Updates the states of its child items -function! s:set_state_plus_children(item, new_rate) "{{{ +function! s:set_state_plus_children(item, new_rate) call s:set_state(a:item, a:new_rate) let child_item = s:get_first_child(a:item) @@ -732,10 +771,11 @@ function! s:set_state_plus_children(item, new_rate) "{{{ endif let child_item = s:get_next_child_item(a:item, child_item) endwhile -endfunction "}}} +endfunction + "Returns: the appropriate symbol for a given percent rate -function! s:rate_to_state(rate) "{{{ +function! s:rate_to_state(rate) let listsyms_list = vimwiki#vars#get_syntaxlocal('listsyms_list') let state = '' let n = len(listsyms_list) @@ -750,11 +790,12 @@ function! s:rate_to_state(rate) "{{{ let state = listsyms_list[index] endif return state -endfunction "}}} +endfunction + "updates the symbol of a checkboxed item according to the symbols of its "children -function! s:update_state(item) "{{{ +function! s:update_state(item) if a:item.type == 0 || a:item.cb == '' return endif @@ -787,18 +828,20 @@ function! s:update_state(item) "{{{ call s:set_state_recursively(a:item, 0) endif endif -endfunction "}}} +endfunction -function! s:set_state_recursively(item, new_rate) "{{{ + +function! s:set_state_recursively(item, new_rate) let state_changed = s:set_state(a:item, a:new_rate) if state_changed call s:update_state(s:get_parent(a:item)) endif -endfunction "}}} +endfunction + "Creates checkbox in a list item. "Returns: 1 if successful -function! s:create_cb(item) "{{{ +function! s:create_cb(item) if a:item.type == 0 || a:item.cb != '' return 0 endif @@ -810,20 +853,22 @@ function! s:create_cb(item) "{{{ call s:update_state(new_item) return 1 -endfunction "}}} +endfunction + -function! s:remove_cb(item) "{{{ +function! s:remove_cb(item) let item = a:item if item.type != 0 && item.cb != '' let item.cb = '' call s:substitute_rx_in_line(item.lnum, '\s\+\[.\]', '') endif return item -endfunction "}}} +endfunction + "Change state of checkbox "in the lines of the given range -function! s:change_cb(from_line, to_line, new_rate) "{{{ +function! s:change_cb(from_line, to_line, new_rate) let from_item = s:get_corresponding_item(a:from_line) if from_item.type == 0 return @@ -846,11 +891,12 @@ function! s:change_cb(from_line, to_line, new_rate) "{{{ call s:update_state(parent_item) endfor -endfunction "}}} +endfunction + "Toggles checkbox between two states in the lines of the given range, "creates chceckboxes if there aren't any. -function! s:toggle_create_cb(from_line, to_line, state1, state2) "{{{ +function! s:toggle_create_cb(from_line, to_line, state1, state2) let from_item = s:get_corresponding_item(a:from_line) if from_item.type == 0 return @@ -886,11 +932,12 @@ function! s:toggle_create_cb(from_line, to_line, state1, state2) "{{{ endif -endfunction "}}} +endfunction + "Decrement checkbox between [ ] and [X] "in the lines of the given range -function! vimwiki#lst#decrement_cb(from_line, to_line) "{{{ +function! vimwiki#lst#decrement_cb(from_line, to_line) let from_item = s:get_corresponding_item(a:from_line) if from_item.type == 0 return @@ -903,11 +950,12 @@ function! vimwiki#lst#decrement_cb(from_line, to_line) "{{{ call s:change_cb(a:from_line, a:to_line, new_rate) -endfunction "}}} +endfunction + "Increment checkbox between [ ] and [X] "in the lines of the given range -function! vimwiki#lst#increment_cb(from_line, to_line) "{{{ +function! vimwiki#lst#increment_cb(from_line, to_line) let from_item = s:get_corresponding_item(a:from_line) if from_item.type == 0 return @@ -920,23 +968,26 @@ function! vimwiki#lst#increment_cb(from_line, to_line) "{{{ call s:change_cb(a:from_line, a:to_line, new_rate) -endfunction "}}} +endfunction + "Toggles checkbox between [ ] and [X] or creates one "in the lines of the given range -function! vimwiki#lst#toggle_cb(from_line, to_line) "{{{ +function! vimwiki#lst#toggle_cb(from_line, to_line) return s:toggle_create_cb(a:from_line, a:to_line, 100, 0) -endfunction "}}} +endfunction + "Toggles checkbox between [ ] and [-] or creates one "in the lines of the given range -function! vimwiki#lst#toggle_rejected_cb(from_line, to_line) "{{{ +function! vimwiki#lst#toggle_rejected_cb(from_line, to_line) return s:toggle_create_cb(a:from_line, a:to_line, -1, 0) -endfunction "}}} +endfunction + "Increment checkbox between [ ] and [X] "in the lines of the given range -function! vimwiki#lst#increment_cb(from_line, to_line) "{{{ +function! vimwiki#lst#increment_cb(from_line, to_line) let from_item = s:get_corresponding_item(a:from_line) if from_item.type == 0 return @@ -949,21 +1000,24 @@ function! vimwiki#lst#increment_cb(from_line, to_line) "{{{ call s:change_cb(a:from_line, a:to_line, new_rate) -endfunction "}}} +endfunction + "Toggles checkbox between [ ] and [X] or creates one "in the lines of the given range -function! vimwiki#lst#toggle_cb(from_line, to_line) "{{{ +function! vimwiki#lst#toggle_cb(from_line, to_line) return s:toggle_create_cb(a:from_line, a:to_line, 100, 0) -endfunction "}}} +endfunction + "Toggles checkbox between [ ] and [-] or creates one "in the lines of the given range -function! vimwiki#lst#toggle_rejected_cb(from_line, to_line) "{{{ +function! vimwiki#lst#toggle_rejected_cb(from_line, to_line) return s:toggle_create_cb(a:from_line, a:to_line, -1, 0) -endfunction "}}} +endfunction + -function! vimwiki#lst#remove_cb(first_line, last_line) "{{{ +function! vimwiki#lst#remove_cb(first_line, last_line) let first_item = s:get_corresponding_item(a:first_line) let last_item = s:get_corresponding_item(a:last_line) @@ -988,11 +1042,11 @@ function! vimwiki#lst#remove_cb(first_line, last_line) "{{{ for parent_item in parent_items_of_lines call s:update_state(parent_item) endfor -endfunction "}}} +endfunction -function! vimwiki#lst#remove_cb_in_list() "{{{ - let first_item = s:get_first_item_in_list( - \ s:get_corresponding_item(line('.')), 0) + +function! vimwiki#lst#remove_cb_in_list() + let first_item = s:get_first_item_in_list(s:get_corresponding_item(line('.')), 0) let cur_item = first_item while 1 @@ -1006,29 +1060,31 @@ function! vimwiki#lst#remove_cb_in_list() "{{{ endwhile call s:update_state(s:get_parent(first_item)) -endfunction "}}} +endfunction + -"checkbox stuff }}} -"change the level of list items {{{ +" --------------------------------------------------------- +" change the level of list items +" --------------------------------------------------------- -function! s:set_indent(lnum, new_indent) "{{{ +function! s:set_indent(lnum, new_indent) if &expandtab let indentstring = repeat(' ', a:new_indent) else - let indentstring = repeat('\t', a:new_indent / &tabstop) . - \ repeat(' ', a:new_indent % &tabstop) + let indentstring = repeat('\t', a:new_indent / &tabstop) . repeat(' ', a:new_indent % &tabstop) endif call s:substitute_rx_in_line(a:lnum, '^\s*', indentstring) -endfunction "}}} +endfunction -function! s:decrease_level(item) "{{{ + +function! s:decrease_level(item) let removed_indent = 0 if vimwiki#vars#get_syntaxlocal('recurring_bullets') && a:item.type == 1 && - \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), s:first_char(a:item.mrkr)) > -1 + \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), + \ s:first_char(a:item.mrkr)) > -1 if s:string_length(a:item.mrkr) >= 2 - call s:substitute_string_in_line(a:item.lnum, - \ s:first_char(a:item.mrkr), '') + call s:substitute_string_in_line(a:item.lnum, s:first_char(a:item.mrkr), '') let removed_indent = -1 endif else @@ -1042,12 +1098,14 @@ function! s:decrease_level(item) "{{{ let removed_indent = new_indent - old_indent endif return removed_indent -endfunction "}}} +endfunction + -function! s:increase_level(item) "{{{ +function! s:increase_level(item) let additional_indent = 0 if vimwiki#vars#get_syntaxlocal('recurring_bullets') && a:item.type == 1 && - \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), s:first_char(a:item.mrkr)) > -1 + \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), + \ s:first_char(a:item.mrkr)) > -1 call s:substitute_string_in_line(a:item.lnum, a:item.mrkr, a:item.mrkr . \ s:first_char(a:item.mrkr)) let additional_indent = 1 @@ -1062,31 +1120,32 @@ function! s:increase_level(item) "{{{ let additional_indent = new_indent - old_indent endif return additional_indent -endfunction "}}} +endfunction + "adds a:indent_by to the current indent "a:indent_by can be negative -function! s:indent_line_by(lnum, indent_by) "{{{ +function! s:indent_line_by(lnum, indent_by) let item = s:get_item(a:lnum) if vimwiki#vars#get_syntaxlocal('recurring_bullets') && item.type == 1 && - \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), s:first_char(item.mrkr)) > -1 + \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), + \ s:first_char(item.mrkr)) > -1 if a:indent_by > 0 - call s:substitute_string_in_line(a:lnum, item.mrkr, - \ item.mrkr . s:first_char(item.mrkr)) + call s:substitute_string_in_line(a:lnum, item.mrkr, item.mrkr . s:first_char(item.mrkr)) elseif a:indent_by < 0 call s:substitute_string_in_line(a:lnum, s:first_char(item.mrkr), '') endif else call s:set_indent(a:lnum, indent(a:lnum) + a:indent_by) endif -endfunction "}}} +endfunction + "changes lvl of lines in selection -function! s:change_level(from_line, to_line, direction, plus_children) "{{{ +function! s:change_level(from_line, to_line, direction, plus_children) let from_item = s:get_corresponding_item(a:from_line) if from_item.type == 0 - if a:direction ==# 'increase' && a:from_line == a:to_line && - \ empty(getline(a:from_line)) + if a:direction ==# 'increase' && a:from_line == a:to_line && empty(getline(a:from_line)) "that's because :> doesn't work on an empty line normal! gi else @@ -1127,8 +1186,7 @@ function! s:change_level(from_line, to_line, direction, plus_children) "{{{ let first_line_level = s:get_level(from_item.lnum) let more_than_one_level_concerned = 0 - let first_line_indented_by = - \ (a:direction ==# 'increase') ? + let first_line_indented_by = (a:direction ==# 'increase') ? \ s:increase_level(from_item) : s:decrease_level(from_item) let cur_ln = s:get_next_line(from_item.lnum) @@ -1158,36 +1216,41 @@ function! s:change_level(from_line, to_line, direction, plus_children) "{{{ call s:adjust_numbered_list(from_item, 0, 0) call s:adjust_numbered_list(to_be_adjusted, 0, 0) endif -endfunction "}}} +endfunction + -function! vimwiki#lst#change_level(from_line, to_line, direction, plus_children) "{{{ +function! vimwiki#lst#change_level(from_line, to_line, direction, plus_children) let cur_col = col('$') - col('.') call s:change_level(a:from_line, a:to_line, a:direction, a:plus_children) call cursor('.', col('$') - cur_col) -endfunction "}}} +endfunction + "indent line a:lnum to be the continuation of a:prev_item -function! s:indent_multiline(prev_item, lnum) "{{{ +function! s:indent_multiline(prev_item, lnum) if a:prev_item.type != 0 call s:set_indent(a:lnum, s:text_begin(a:prev_item.lnum)) endif -endfunction "}}} +endfunction + -"change the level of list items }}} +" --------------------------------------------------------- +" change markers of list items +" --------------------------------------------------------- -"change markers of list items {{{ "Returns: the position of a marker in g:vimwiki_list_markers -function! s:get_idx_list_markers(item) "{{{ +function! s:get_idx_list_markers(item) if a:item.type == 1 let m = s:first_char(a:item.mrkr) else let m = s:guess_kind_of_numbered_item(a:item) . a:item.mrkr[-1:] endif return index(vimwiki#vars#get_syntaxlocal('list_markers'), m) -endfunction "}}} +endfunction + "changes the marker of the given item to the next in g:vimwiki_list_markers -function! s:get_next_mrkr(item) "{{{ +function! s:get_next_mrkr(item) let markers = vimwiki#vars#get_syntaxlocal('list_markers') if a:item.type == 0 let new_mrkr = markers[0] @@ -1196,10 +1259,11 @@ function! s:get_next_mrkr(item) "{{{ let new_mrkr = markers[(idx+1) % len(markers)] endif return new_mrkr -endfunction "}}} +endfunction + "changes the marker of the given item to the previous in g:vimwiki_list_markers -function! s:get_prev_mrkr(item) "{{{ +function! s:get_prev_mrkr(item) let markers = vimwiki#vars#get_syntaxlocal('list_markers') if a:item.type == 0 return markers[-1] @@ -1208,12 +1272,12 @@ function! s:get_prev_mrkr(item) "{{{ if idx == -1 return markers[-1] else - return markers[(idx - 1 + len(markers)) % - \ len(markers)] + return markers[(idx - 1 + len(markers)) % len(markers)] endif -endfunction "}}} +endfunction + -function! s:set_new_mrkr(item, new_mrkr) "{{{ +function! s:set_new_mrkr(item, new_mrkr) if a:item.type == 0 call s:substitute_rx_in_line(a:item.lnum, '^\s*\zs\ze', a:new_mrkr.' ') if indent(a:item.lnum) == 0 && !vimwiki#vars#get_syntaxlocal('recurring_bullets') @@ -1222,9 +1286,10 @@ function! s:set_new_mrkr(item, new_mrkr) "{{{ else call s:substitute_string_in_line(a:item.lnum, a:item.mrkr, a:new_mrkr) endif -endfunction "}}} +endfunction -function! vimwiki#lst#change_marker(from_line, to_line, new_mrkr, mode) "{{{ + +function! vimwiki#lst#change_marker(from_line, to_line, new_mrkr, mode) let cur_col_from_eol = col("$") - (a:mode ==# "i" ? col("'^") : col('.')) let new_mrkr = a:new_mrkr let cur_ln = a:from_line @@ -1241,25 +1306,23 @@ function! vimwiki#lst#change_marker(from_line, to_line, new_mrkr, mode) "{{{ if index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), s:first_char(new_mrkr)) > -1 "use *** if the item above has *** too let item_above = s:get_prev_list_item(cur_item, 1) - if item_above.type == 1 && - \ s:first_char(item_above.mrkr) ==# s:first_char(new_mrkr) + if item_above.type == 1 && s:first_char(item_above.mrkr) ==# s:first_char(new_mrkr) let new_mrkr = item_above.mrkr else "use *** if the item below has *** too let item_below = s:get_next_list_item(cur_item, 1) - if item_below.type == 1 && - \ s:first_char(item_below.mrkr) ==# s:first_char(new_mrkr) + if item_below.type == 1 && s:first_char(item_below.mrkr) ==# s:first_char(new_mrkr) let new_mrkr = item_below.mrkr else "if the old is ### and the new is * use *** if cur_item.type == 1 && - \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), s:first_char(cur_item.mrkr))>-1 + \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), + \ s:first_char(cur_item.mrkr))>-1 let new_mrkr = repeat(new_mrkr, s:string_length(cur_item.mrkr)) else "use *** if the parent item has ** let parent_item = s:get_parent(cur_item) - if parent_item.type == 1 && - \ s:first_char(parent_item.mrkr) ==# s:first_char(new_mrkr) + if parent_item.type == 1 && s:first_char(parent_item.mrkr) ==# s:first_char(new_mrkr) let new_mrkr = repeat(s:first_char(parent_item.mrkr), \ s:string_length(parent_item.mrkr)+1) endif @@ -1277,9 +1340,10 @@ function! vimwiki#lst#change_marker(from_line, to_line, new_mrkr, mode) "{{{ endwhile call cursor('.', col('$') - cur_col_from_eol) -endfunction "}}} +endfunction + -function! vimwiki#lst#change_marker_in_list(new_mrkr) "{{{ +function! vimwiki#lst#change_marker_in_list(new_mrkr) let cur_item = s:get_corresponding_item(line('.')) let first_item = s:get_first_item_in_list(cur_item, 0) let last_item = s:get_last_item_in_list(cur_item, 0) @@ -1293,10 +1357,11 @@ function! vimwiki#lst#change_marker_in_list(new_mrkr) "{{{ endwhile call s:adjust_numbered_list(s:get_item(first_item_line), 0, 0) -endfunction "}}} +endfunction + "sets kind of the item depending on neighbor items and the parent item -function! s:adjust_mrkr(item) "{{{ +function! s:adjust_mrkr(item) if a:item.type == 0 || vimwiki#vars#get_syntaxlocal('recurring_bullets') return endif @@ -1309,20 +1374,20 @@ function! s:adjust_mrkr(item) "{{{ "if possible, set e.g. *** if parent has ** as marker if neighbor_item.type == 0 && a:item.type == 1 && - \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), s:first_char(a:item.mrkr)) > -1 + \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), + \ s:first_char(a:item.mrkr)) > -1 let parent_item = s:get_parent(a:item) - if parent_item.type == 1 && - \ s:first_char(parent_item.mrkr) ==# s:first_char(a:item.mrkr) - let new_mrkr = repeat(s:first_char(parent_item.mrkr), - \ s:string_length(parent_item.mrkr)+1) + if parent_item.type == 1 && s:first_char(parent_item.mrkr) ==# s:first_char(a:item.mrkr) + let new_mrkr = repeat(s:first_char(parent_item.mrkr), s:string_length(parent_item.mrkr)+1) endif endif call s:substitute_string_in_line(a:item.lnum, a:item.mrkr, new_mrkr) call s:adjust_numbered_list(a:item, 0, 1) -endfunction "}}} +endfunction -function! s:clone_marker_from_to(from, to) "{{{ + +function! s:clone_marker_from_to(from, to) let item_from = s:get_item(a:from) if item_from.type == 0 | return | endif let new_mrkr = item_from.mrkr . ' ' @@ -1337,9 +1402,10 @@ function! s:clone_marker_from_to(from, to) "{{{ let adjust_from = ( a:from < a:to ? a:from : a:to ) call s:adjust_numbered_list_below(s:get_item(adjust_from), 0) endif -endfunction "}}} +endfunction + -function! s:remove_mrkr(item) "{{{ +function! s:remove_mrkr(item) let item = a:item if item.cb != '' let item = s:remove_cb(item) @@ -1353,9 +1419,10 @@ function! s:remove_mrkr(item) "{{{ let item.type = 0 call s:update_state(parent_item) return item -endfunction "}}} +endfunction -function! s:create_marker(lnum) "{{{ + +function! s:create_marker(lnum) let new_sibling = s:get_corresponding_item(a:lnum) if new_sibling.type == 0 let new_sibling = s:get_a_neighbor_item_in_column(a:lnum, virtcol('.')) @@ -1367,12 +1434,14 @@ function! s:create_marker(lnum) "{{{ call s:set_new_mrkr(cur_item, vimwiki#vars#get_syntaxlocal('list_markers')[0]) call s:adjust_numbered_list(cur_item, 0, 0) endif -endfunction "}}} +endfunction + -"change markers of list items }}} +" --------------------------------------------------------- +" handle keys +" --------------------------------------------------------- -"handle keys {{{ -function! vimwiki#lst#kbd_o() "{{{ +function! vimwiki#lst#kbd_o() let fold_end = foldclosedend('.') let lnum = (fold_end == -1) ? line('.') : fold_end let cur_item = s:get_item(lnum) @@ -1385,9 +1454,10 @@ function! vimwiki#lst#kbd_o() "{{{ call s:clone_marker_from_to(cur_item.lnum, cur_item.lnum+1) endif startinsert! -endfunction "}}} +endfunction + -function! vimwiki#lst#kbd_O() "{{{ +function! vimwiki#lst#kbd_O() normal! Ox let cur_ln = line('.') if getline(cur_ln+1) !~# '^\s*$' @@ -1396,9 +1466,10 @@ function! vimwiki#lst#kbd_O() "{{{ call s:clone_marker_from_to(cur_ln-1, cur_ln) endif startinsert! -endfunction "}}} +endfunction -function! s:cr_on_empty_list_item(lnum, behavior) "{{{ + +function! s:cr_on_empty_list_item(lnum, behavior) if a:behavior == 1 "just make a new list item normal! gi @@ -1452,18 +1523,20 @@ function! s:cr_on_empty_list_item(lnum, behavior) "{{{ endif return endif -endfunction "}}} +endfunction + -function! s:cr_on_empty_line(lnum, behavior) "{{{ +function! s:cr_on_empty_line(lnum, behavior) "inserting and deleting the x is necessary "because otherwise the indent is lost normal! gix if a:behavior == 2 || a:behavior == 3 call s:create_marker(a:lnum+1) endif -endfunction "}}} +endfunction -function! s:cr_on_list_item(lnum, insert_new_marker, not_at_eol) "{{{ + +function! s:cr_on_list_item(lnum, insert_new_marker, not_at_eol) if a:insert_new_marker "the ultimate feature of this script: make new marker on <CR> normal! gi @@ -1479,9 +1552,10 @@ function! s:cr_on_list_item(lnum, insert_new_marker, not_at_eol) "{{{ let prev_line = s:get_corresponding_item(s:get_prev_line(a:lnum+1)) call s:indent_multiline(prev_line, a:lnum+1) endif -endfunction "}}} +endfunction + -function! vimwiki#lst#kbd_cr(normal, just_mrkr) "{{{ +function! vimwiki#lst#kbd_cr(normal, just_mrkr) let lnum = line('.') let has_bp = s:line_has_marker(lnum) @@ -1527,10 +1601,11 @@ function! vimwiki#lst#kbd_cr(normal, just_mrkr) "{{{ startinsert endif -endfunction "}}} +endfunction + "creates a list item in the current line or removes it -function! vimwiki#lst#toggle_list_item() "{{{ +function! vimwiki#lst#toggle_list_item() let cur_col_from_eol = col("$") - col("'^") let cur_item = s:get_item(line('.')) @@ -1559,12 +1634,14 @@ function! vimwiki#lst#toggle_list_item() "{{{ else startinsert endif -endfunction "}}} +endfunction -"handle keys }}} -"misc stuff {{{ -function! vimwiki#lst#TO_list_item(inner, visual) "{{{ +" --------------------------------------------------------- +" misc stuff +" --------------------------------------------------------- + +function! vimwiki#lst#TO_list_item(inner, visual) let lnum = prevnonblank('.') let item = s:get_corresponding_item(lnum) if item.type == 0 @@ -1580,9 +1657,10 @@ function! vimwiki#lst#TO_list_item(inner, visual) "{{{ call cursor(to_line, 0) normal! o call cursor(from_line, 0) -endfunction "}}} +endfunction + -fun! vimwiki#lst#fold_level(lnum) "{{{ +function! vimwiki#lst#fold_level(lnum) let cur_item = s:get_item(a:lnum) if cur_item.type != 0 let parent_item = s:get_parent(cur_item) @@ -1595,6 +1673,5 @@ fun! vimwiki#lst#fold_level(lnum) "{{{ endif endif return '=' -endf "}}} +endfunction -"misc stuff }}} diff --git a/autoload/vimwiki/markdown_base.vim b/autoload/vimwiki/markdown_base.vim @@ -1,20 +1,17 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=99 +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 " Vimwiki autoload plugin file -" Desc: Link functions for markdown syntax +" Description: Link functions for markdown syntax " Home: https://github.com/vimwiki/vimwiki/ -" MISC helper functions {{{ - -" s:safesubstitute -function! s:safesubstitute(text, search, replace, mode) "{{{ +function! s:safesubstitute(text, search, replace, mode) " Substitute regexp but do not interpret replace let escaped = escape(a:replace, '\&') return substitute(a:text, a:search, escaped, a:mode) -endfunction " }}} +endfunction + -" vimwiki#markdown_base#scan_reflinks -function! vimwiki#markdown_base#scan_reflinks() " {{{ +function! vimwiki#markdown_base#scan_reflinks() let mkd_refs = {} " construct list of references using vimgrep try @@ -23,7 +20,7 @@ function! vimwiki#markdown_base#scan_reflinks() " {{{ catch /^Vim\%((\a\+)\)\=:E480/ " No Match "Ignore it, and move on to the next file endtry - " + for d in getqflist() let matchline = join(getline(d.lnum, min([d.lnum+1, line('$')])), ' ') let descr = matchstr(matchline, vimwiki#vars#get_syntaxlocal('rxMkdRefMatchDescr')) @@ -34,12 +31,11 @@ function! vimwiki#markdown_base#scan_reflinks() " {{{ endfor call vimwiki#vars#set_bufferlocal('markdown_refs', mkd_refs) return mkd_refs -endfunction "}}} +endfunction -" vimwiki#markdown_base#open_reflink " try markdown reference links -function! vimwiki#markdown_base#open_reflink(link) " {{{ +function! vimwiki#markdown_base#open_reflink(link) " echom "vimwiki#markdown_base#open_reflink" let link = a:link let mkd_refs = vimwiki#vars#get_bufferlocal('markdown_refs') @@ -50,15 +46,10 @@ function! vimwiki#markdown_base#open_reflink(link) " {{{ else return 0 endif -endfunction " }}} -" }}} +endfunction -" WIKI link following functions {{{ -" LINK functions {{{ - -" s:normalize_link_syntax_n -function! s:normalize_link_syntax_n() " {{{ +function! s:normalize_link_syntax_n() let lnum = line('.') " try WikiIncl @@ -72,27 +63,30 @@ function! s:normalize_link_syntax_n() " {{{ let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink0')) if !empty(lnk) let sub = vimwiki#base#normalize_link_helper(lnk, - \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'), vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'), + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'), + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'), \ vimwiki#vars#get_syntaxlocal('WikiLink1Template2')) call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink0'), sub) return endif - + " try WikiLink1: replace with WikiLink0 let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink1')) if !empty(lnk) let sub = vimwiki#base#normalize_link_helper(lnk, - \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'), vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'), + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'), + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'), \ vimwiki#vars#get_global('WikiLinkTemplate2')) call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink1'), sub) return endif - + " try Weblink let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink')) if !empty(lnk) let sub = vimwiki#base#normalize_link_helper(lnk, - \ vimwiki#vars#get_syntaxlocal('rxWeblinkMatchUrl'), vimwiki#vars#get_syntaxlocal('rxWeblinkMatchDescr'), + \ vimwiki#vars#get_syntaxlocal('rxWeblinkMatchUrl'), + \ vimwiki#vars#get_syntaxlocal('rxWeblinkMatchDescr'), \ vimwiki#vars#get_syntaxlocal('Weblink1Template')) call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink'), sub) return @@ -110,10 +104,10 @@ function! s:normalize_link_syntax_n() " {{{ return endif -endfunction " }}} +endfunction + -" s:normalize_link_syntax_v -function! s:normalize_link_syntax_v() " {{{ +function! s:normalize_link_syntax_v() let lnum = line('.') let sel_save = &selection let &selection = "old" @@ -138,10 +132,10 @@ function! s:normalize_link_syntax_v() " {{{ let &selection = sel_save endtry -endfunction " }}} +endfunction + -" vimwiki#base#normalize_link -function! vimwiki#markdown_base#normalize_link(is_visual_mode) "{{{ +function! vimwiki#markdown_base#normalize_link(is_visual_mode) if 0 " Syntax-specific links else @@ -152,11 +146,5 @@ function! vimwiki#markdown_base#normalize_link(is_visual_mode) "{{{ call s:normalize_link_syntax_v() endif endif -endfunction "}}} - -" }}} - -" ------------------------------------------------------------------------- -" Load syntax-specific Wiki functionality -" ------------------------------------------------------------------------- +endfunction diff --git a/autoload/vimwiki/path.vim b/autoload/vimwiki/path.vim @@ -1,15 +1,15 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=99 +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 " Vimwiki autoload plugin file -" Desc: Path manipulation functions +" Description: Path manipulation functions " Home: https://github.com/vimwiki/vimwiki/ -function! vimwiki#path#chomp_slash(str) "{{{ +function! vimwiki#path#chomp_slash(str) return substitute(a:str, '[/\\]\+$', '', '') -endfunction "}}} +endfunction + " Define path-compare function, either case-sensitive or not, depending on OS. -"{{{ " function! vimwiki#path#is_equal(p1, p2) if vimwiki#u#is_windows() function! vimwiki#path#is_equal(p1, p2) return a:p1 ==? a:p2 @@ -18,10 +18,11 @@ else function! vimwiki#path#is_equal(p1, p2) return a:p1 ==# a:p2 endfunction -endif "}}} +endif + " collapse sections like /a/b/../c to /a/c -function! vimwiki#path#normalize(path) "{{{ +function! vimwiki#path#normalize(path) let path = a:path while 1 let result = substitute(path, '/[^/]\+/\.\.', '', '') @@ -31,9 +32,10 @@ function! vimwiki#path#normalize(path) "{{{ let path = result endwhile return result -endfunction "}}} +endfunction + -function! vimwiki#path#path_norm(path) "{{{ +function! vimwiki#path#path_norm(path) " /-slashes if a:path !~# '^scp:' let path = substitute(a:path, '\', '/', 'g') @@ -44,21 +46,24 @@ function! vimwiki#path#path_norm(path) "{{{ else return a:path endif -endfunction "}}} +endfunction + -function! vimwiki#path#is_link_to_dir(link) "{{{ +function! vimwiki#path#is_link_to_dir(link) " Check if link is to a directory. " It should be ended with \ or /. return a:link =~# '\m[/\\]$' -endfunction "}}} +endfunction -function! vimwiki#path#abs_path_of_link(link) "{{{ + +function! vimwiki#path#abs_path_of_link(link) return vimwiki#path#normalize(expand("%:p:h").'/'.a:link) -endfunction "}}} +endfunction + " return longest common path prefix of 2 given paths. " '~/home/usrname/wiki', '~/home/usrname/wiki/shmiki' => '~/home/usrname/wiki' -function! vimwiki#path#path_common_pfx(path1, path2) "{{{ +function! vimwiki#path#path_common_pfx(path1, path2) let p1 = split(a:path1, '[/\\]', 1) let p2 = split(a:path2, '[/\\]', 1) @@ -72,16 +77,17 @@ function! vimwiki#path#path_common_pfx(path1, path2) "{{{ else return join(p1[: idx-1], '/') endif -endfunction "}}} +endfunction + -function! vimwiki#path#wikify_path(path) "{{{ +function! vimwiki#path#wikify_path(path) let result = resolve(fnamemodify(a:path, ':p')) if vimwiki#u#is_windows() let result = substitute(result, '\\', '/', 'g') endif let result = vimwiki#path#chomp_slash(result) return result -endfunction "}}} +endfunction function! vimwiki#path#current_wiki_file() @@ -90,7 +96,7 @@ endfunction " Returns: the relative path from a:dir to a:file -function! vimwiki#path#relpath(dir, file) "{{{ +function! vimwiki#path#relpath(dir, file) let result = [] let dir = split(a:dir, '/') let file = split(a:file, '/') @@ -112,12 +118,13 @@ function! vimwiki#path#relpath(dir, file) "{{{ let result_path .= '/' endif return result_path -endfunction "}}} +endfunction + " If the optional argument provided and nonzero, -" it will ask before creating a directory +" it will ask before creating a directory " Returns: 1 iff directory exists or successfully created -function! vimwiki#path#mkdir(path, ...) "{{{ +function! vimwiki#path#mkdir(path, ...) let path = expand(a:path) if path =~# '^scp:' @@ -137,23 +144,23 @@ function! vimwiki#path#mkdir(path, ...) "{{{ let path = iconv(path, &enc, vimwiki#vars#get_global('w32_dir_enc')) endif - if a:0 && a:1 && input("Vimwiki: Make new directory: " - \ .path."\n [y]es/[N]o? ") !~? '^y' + if a:0 && a:1 && input("Vimwiki: Make new directory: ".path."\n [y]es/[N]o? ") !~? '^y' return 0 endif call mkdir(path, "p") return 1 endif -endfunction " }}} +endfunction + -function! vimwiki#path#is_absolute(path) "{{{ +function! vimwiki#path#is_absolute(path) if vimwiki#u#is_windows() return a:path =~? '\m^\a:' else return a:path =~# '\m^/\|\~/' endif -endfunction "}}} +endfunction " Combine a directory and a file into one path, doesn't generate duplicate @@ -173,3 +180,4 @@ else return directory . '/' . file endfunction endif + diff --git a/autoload/vimwiki/tags.vim b/autoload/vimwiki/tags.vim @@ -1,9 +1,11 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=99 +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 " Vimwiki autoload plugin file let s:TAGS_METADATA_FILE_NAME = '.tags' + + " Tags metadata in-memory format: " metadata := { 'pagename': [entries, ...] } " entry := { 'tagname':..., 'lineno':..., 'link':... } @@ -19,12 +21,13 @@ let s:TAGS_METADATA_FILE_NAME = '.tags' " an optional field, "vimwiki:". In this field, we encode tab-separated values " of missing parameters -- "pagename" and "link". -" vimwiki#tags#update_tags + + " Update tags metadata. " a:full_rebuild == 1: re-scan entire wiki " a:full_rebuild == 0: only re-scan current page " a:all_files == '': only if the file is newer than .tags -function! vimwiki#tags#update_tags(full_rebuild, all_files) "{{{ +function! vimwiki#tags#update_tags(full_rebuild, all_files) let all_files = a:all_files != '' if !a:full_rebuild " Updating for one page (current) @@ -42,8 +45,7 @@ function! vimwiki#tags#update_tags(full_rebuild, all_files) "{{{ else " full rebuild let files = vimwiki#base#find_files(vimwiki#vars#get_bufferlocal('wiki_nr'), 0) let wiki_base_dir = vimwiki#vars#get_wikilocal('path') - let tags_file_last_modification = - \ getftime(vimwiki#tags#metadata_file_path()) + let tags_file_last_modification = getftime(vimwiki#tags#metadata_file_path()) let metadata = s:load_tags_metadata() for file in files if all_files || getftime(file) >= tags_file_last_modification @@ -56,12 +58,11 @@ function! vimwiki#tags#update_tags(full_rebuild, all_files) "{{{ endfor call s:write_tags_metadata(metadata) endif -endfunction " }}} +endfunction -" s:scan_tags -" Scans the list of text lines (argument) and produces tags metadata as a -" list of tag entries. -function! s:scan_tags(lines, page_name) "{{{ + +" Scans the list of text lines (argument) and produces tags metadata as a list of tag entries. +function! s:scan_tags(lines, page_name) let entries = [] @@ -136,17 +137,18 @@ function! s:scan_tags(lines, page_name) "{{{ endfor " loop over lines return entries -endfunction " }}} +endfunction + -" vimwiki#tags#metadata_file_path " Returns tags metadata file path -function! vimwiki#tags#metadata_file_path() abort "{{{ - return fnamemodify(vimwiki#path#join_path(vimwiki#vars#get_wikilocal('path'), s:TAGS_METADATA_FILE_NAME), ':p') -endfunction " }}} +function! vimwiki#tags#metadata_file_path() abort + return fnamemodify(vimwiki#path#join_path(vimwiki#vars#get_wikilocal('path'), + \ s:TAGS_METADATA_FILE_NAME), ':p') +endfunction + -" s:load_tags_metadata " Loads tags metadata from file, returns a dictionary -function! s:load_tags_metadata() abort "{{{ +function! s:load_tags_metadata() abort let metadata_path = vimwiki#tags#metadata_file_path() if !filereadable(metadata_path) return {} @@ -193,29 +195,29 @@ function! s:load_tags_metadata() abort "{{{ endif endfor return metadata -endfunction " }}} +endfunction + -" s:remove_page_from_tags " Removes all entries for given page from metadata in-place. Returns updated " metadata (just in case). -function! s:remove_page_from_tags(metadata, page_name) "{{{ +function! s:remove_page_from_tags(metadata, page_name) if has_key(a:metadata, a:page_name) call remove(a:metadata, a:page_name) return a:metadata else return a:metadata endif -endfunction " }}} +endfunction + -" s:merge_tags " Merges metadata of one file into a:metadata -function! s:merge_tags(metadata, pagename, file_metadata) "{{{ +function! s:merge_tags(metadata, pagename, file_metadata) let metadata = a:metadata let metadata[a:pagename] = a:file_metadata return metadata -endfunction " }}} +endfunction + -" s:tags_entry_cmp " Compares two actual lines from tags file. Return value is in strcmp style. " See help on sort() -- that's what this function is going to be used for. " See also s:write_tags_metadata below -- that's where we compose these tags @@ -225,7 +227,7 @@ endfunction " }}} " numbers as strings, not integers, and so, for example, tag at line 14 " preceeds the same tag on the same page at line 9. (Because string "14" is " alphabetically 'less than' string "9".) -function! s:tags_entry_cmp(i1, i2) "{{{ +function! s:tags_entry_cmp(i1, i2) let items = [] for orig_item in [a:i1, a:i2] let fields = split(orig_item, "\t") @@ -245,11 +247,11 @@ function! s:tags_entry_cmp(i1, i2) "{{{ else return 0 endif -endfunction " }}} +endfunction + -" s:write_tags_metadata " Saves metadata object into a file. Throws exceptions in case of problems. -function! s:write_tags_metadata(metadata) "{{{ +function! s:write_tags_metadata(metadata) let metadata_path = vimwiki#tags#metadata_file_path() let tags = [] for pagename in keys(a:metadata) @@ -271,11 +273,11 @@ function! s:write_tags_metadata(metadata) "{{{ call sort(tags, "s:tags_entry_cmp") call insert(tags, "!_TAG_FILE_SORTED\t1\t") call writefile(tags, metadata_path) -endfunction " }}} +endfunction + -" vimwiki#tags#get_tags " Returns list of unique tags found in the .tags file -function! vimwiki#tags#get_tags() "{{{ +function! vimwiki#tags#get_tags() let metadata = s:load_tags_metadata() let tags = {} for entries in values(metadata) @@ -284,13 +286,13 @@ function! vimwiki#tags#get_tags() "{{{ endfor endfor return keys(tags) -endfunction " }}} +endfunction + -" vimwiki#tags#generate_tags " Similar to vimwiki#base#generate_links. In the current buffer, appends " tags and references to all their instances. If no arguments (tags) are " specified, outputs all tags. -function! vimwiki#tags#generate_tags(...) abort "{{{ +function! vimwiki#tags#generate_tags(...) abort let need_all_tags = (a:0 == 0) let specific_tags = a:000 @@ -309,8 +311,7 @@ function! vimwiki#tags#generate_tags(...) abort "{{{ endfor let lines = [] - let bullet = repeat(' ', vimwiki#lst#get_list_margin()). - \ vimwiki#lst#default_symbol().' ' + let bullet = repeat(' ', vimwiki#lst#get_list_margin()).vimwiki#lst#default_symbol().' ' for tagname in sort(keys(tags_entries)) if need_all_tags || index(specific_tags, tagname) != -1 call extend(lines, [ @@ -318,8 +319,8 @@ function! vimwiki#tags#generate_tags(...) abort "{{{ \ substitute(vimwiki#vars#get_syntaxlocal('rxH2_Template'), '__Header__', tagname, ''), \ '' ]) for taglink in sort(tags_entries[tagname]) - call add(lines, bullet . - \ substitute(vimwiki#vars#get_global('WikiLinkTemplate1'), '__LinkUrl__', taglink, '')) + call add(lines, bullet . substitute(vimwiki#vars#get_global('WikiLinkTemplate1'), + \ '__LinkUrl__', taglink, '')) endfor endif endfor @@ -328,15 +329,14 @@ function! vimwiki#tags#generate_tags(...) abort "{{{ \ .vimwiki#u#escape(vimwiki#lst#default_symbol()).' ' \ .vimwiki#vars#get_syntaxlocal('rxWikiLink').'$\)' - call vimwiki#base#update_listing_in_buffer(lines, 'Generated Tags', links_rx, - \ line('$')+1, 1) -endfunction " }}} + call vimwiki#base#update_listing_in_buffer(lines, 'Generated Tags', links_rx, line('$')+1, 1) +endfunction + -" vimwiki#tags#complete_tags -function! vimwiki#tags#complete_tags(ArgLead, CmdLine, CursorPos) abort " {{{ +function! vimwiki#tags#complete_tags(ArgLead, CmdLine, CursorPos) abort " We can safely ignore args if we use -custom=complete option, Vim engine " will do the job of filtering. let taglist = vimwiki#tags#get_tags() return join(taglist, "\n") -endfunction " }}} +endfunction diff --git a/autoload/vimwiki/tbl.vim b/autoload/vimwiki/tbl.vim @@ -1,28 +1,29 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=99 +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 " Vimwiki autoload plugin file -" Desc: Tables +" Description: Tables " | Easily | manageable | text | tables | ! | " |--------|------------|-------|--------|---------| " | Have | fun! | Drink | tea | Period. | " " Home: https://github.com/vimwiki/vimwiki/ -" Load only once {{{ + + if exists("g:loaded_vimwiki_tbl_auto") || &cp finish endif let g:loaded_vimwiki_tbl_auto = 1 -"}}} + let s:textwidth = &tw -" Misc functions {{{ -function! s:rxSep() "{{{ +function! s:rxSep() return vimwiki#vars#get_syntaxlocal('rxTableSep') -endfunction "}}} +endfunction + -function! s:wide_len(str) "{{{ +function! s:wide_len(str) " vim73 has new function that gives correct string width. if exists("*strdisplaywidth") return strdisplaywidth(a:str) @@ -42,42 +43,49 @@ function! s:wide_len(str) "{{{ let &modified = savemodified endif return ret -endfunction "}}} +endfunction -function! s:cell_splitter() "{{{ + +function! s:cell_splitter() return '\s*'.s:rxSep().'\s*' -endfunction "}}} +endfunction + -function! s:sep_splitter() "{{{ +function! s:sep_splitter() return '-'.s:rxSep().'-' -endfunction "}}} +endfunction + -function! s:is_table(line) "{{{ - return s:is_separator(a:line) || (a:line !~# s:rxSep().s:rxSep() && a:line =~# '^\s*'.s:rxSep().'.\+'.s:rxSep().'\s*$') -endfunction "}}} +function! s:is_table(line) + return s:is_separator(a:line) || + \ (a:line !~# s:rxSep().s:rxSep() && a:line =~# '^\s*'.s:rxSep().'.\+'.s:rxSep().'\s*$') +endfunction -function! s:is_separator(line) "{{{ + +function! s:is_separator(line) return a:line =~# '^\s*'.s:rxSep().'\(--\+'.s:rxSep().'\)\+\s*$' -endfunction "}}} +endfunction + -function! s:is_separator_tail(line) "{{{ +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) 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) - "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 "}}} + return line =~# '^\s*$' || + \ (line =~# '^\s*'.s:rxSep() && line !~# '^\s*'.s:rxSep().'.*'.s:rxSep()) +endfunction + -function! s:count_separators_up(lnum) "{{{ +function! s:count_separators_up(lnum) let lnum = a:lnum - 1 while lnum > 1 if !s:is_separator(getline(lnum)) @@ -87,9 +95,10 @@ function! s:count_separators_up(lnum) "{{{ endwhile return (a:lnum-lnum) -endfunction "}}} +endfunction + -function! s:count_separators_down(lnum) "{{{ +function! s:count_separators_down(lnum) let lnum = a:lnum + 1 while lnum < line('$') if !s:is_separator(getline(lnum)) @@ -99,9 +108,10 @@ function! s:count_separators_down(lnum) "{{{ endwhile return (lnum-a:lnum) -endfunction "}}} +endfunction -function! s:create_empty_row(cols) "{{{ + +function! s:create_empty_row(cols) let row = s:rxSep() let cell = " ".s:rxSep() @@ -110,9 +120,10 @@ function! s:create_empty_row(cols) "{{{ endfor return row -endfunction "}}} +endfunction + -function! s:create_row_sep(cols) "{{{ +function! s:create_row_sep(cols) let row = s:rxSep() let cell = "---".s:rxSep() @@ -121,9 +132,10 @@ function! s:create_row_sep(cols) "{{{ endfor return row -endfunction "}}} +endfunction + -function! vimwiki#tbl#get_cells(line) "{{{ +function! vimwiki#tbl#get_cells(line) let result = [] let cell = '' let quote = '' @@ -174,13 +186,15 @@ function! vimwiki#tbl#get_cells(line) "{{{ call add(result, vimwiki#u#trim(cell.quote, '|')) endif return result -endfunction "}}} +endfunction -function! s:col_count(lnum) "{{{ + +function! s:col_count(lnum) return len(vimwiki#tbl#get_cells(getline(a:lnum))) -endfunction "}}} +endfunction + -function! s:get_indent(lnum) "{{{ +function! s:get_indent(lnum) if !s:is_table(getline(a:lnum)) return endif @@ -198,9 +212,10 @@ function! s:get_indent(lnum) "{{{ endwhile return indent -endfunction " }}} +endfunction + -function! s:get_rows(lnum) "{{{ +function! s:get_rows(lnum) if !s:is_table(getline(a:lnum)) return endif @@ -232,9 +247,10 @@ function! s:get_rows(lnum) "{{{ endwhile return upper_rows + lower_rows -endfunction "}}} +endfunction -function! s:get_cell_max_lens(lnum, ...) "{{{ + +function! s:get_cell_max_lens(lnum, ...) let max_lens = {} for [lnum, row] in s:get_rows(a:lnum) if s:is_separator(row) @@ -251,9 +267,10 @@ function! s:get_cell_max_lens(lnum, ...) "{{{ endfor endfor return max_lens -endfunction "}}} +endfunction + -function! s:get_aligned_rows(lnum, col1, col2) "{{{ +function! s:get_aligned_rows(lnum, col1, col2) let rows = s:get_rows(a:lnum) let startlnum = rows[0][0] let cells = [] @@ -271,10 +288,11 @@ function! s:get_aligned_rows(lnum, col1, col2) "{{{ call add(result, [lnum, new_row]) endfor return result -endfunction "}}} +endfunction + " Number of the current column. Starts from 0. -function! s:cur_column() "{{{ +function! s:cur_column() let line = getline('.') if !s:is_table(line) return -1 @@ -291,12 +309,10 @@ function! s:cur_column() "{{{ endif endwhile return col -endfunction "}}} +endfunction -" }}} -" Format functions {{{ -function! s:fmt_cell(cell, max_len) "{{{ +function! s:fmt_cell(cell, max_len) let cell = ' '.a:cell.' ' let diff = a:max_len - s:wide_len(a:cell) @@ -306,9 +322,10 @@ function! s:fmt_cell(cell, max_len) "{{{ let cell .= repeat(' ', diff) return cell -endfunction "}}} +endfunction -function! s:fmt_row(cells, max_lens, col1, col2) "{{{ + +function! s:fmt_row(cells, max_lens, col1, col2) let new_line = s:rxSep() for idx in range(len(a:cells)) if idx == a:col1 @@ -326,17 +343,19 @@ function! s:fmt_row(cells, max_lens, col1, col2) "{{{ let idx += 1 endwhile return new_line -endfunction "}}} +endfunction + -function! s:fmt_cell_sep(max_len) "{{{ +function! s:fmt_cell_sep(max_len) if a:max_len == 0 return repeat('-', 3) else return repeat('-', a:max_len+2) endif -endfunction "}}} +endfunction + -function! s:fmt_sep(max_lens, col1, col2) "{{{ +function! s:fmt_sep(max_lens, col1, col2) let new_line = s:rxSep() for idx in range(len(a:max_lens)) if idx == a:col1 @@ -347,11 +366,10 @@ function! s:fmt_sep(max_lens, col1, col2) "{{{ let new_line .= s:fmt_cell_sep(a:max_lens[idx]).s:rxSep() endfor return new_line -endfunction "}}} -"}}} +endfunction -" Keyboard functions "{{{ -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>:call vimwiki#tbl#format(line('.'))\<CR>" let cmd .= "\<ESC>0" @@ -364,26 +382,29 @@ function! s:kbd_create_new_row(cols, goto_first) "{{{ let cmd .= "a" return cmd -endfunction "}}} +endfunction + -function! s:kbd_goto_next_row() "{{{ +function! s:kbd_goto_next_row() 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 -endfunction "}}} +endfunction + -function! s:kbd_goto_prev_row() "{{{ +function! s:kbd_goto_prev_row() 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 -endfunction "}}} +endfunction + " Used in s:kbd_goto_next_col -function! vimwiki#tbl#goto_next_col() "{{{ +function! vimwiki#tbl#goto_next_col() let curcol = virtcol('.') let lnum = line('.') let newcol = s:get_indent(lnum) @@ -396,9 +417,10 @@ function! vimwiki#tbl#goto_next_col() "{{{ endfor let newcol += 2 " +2 == 1 separator + 1 space |<space call vimwiki#u#cursor(lnum, newcol) -endfunction "}}} +endfunction + -function! s:kbd_goto_next_col(jumpdown) "{{{ +function! s:kbd_goto_next_col(jumpdown) let cmd = "\<ESC>" if a:jumpdown let seps = s:count_separators_down(line('.')) @@ -406,10 +428,11 @@ function! s:kbd_goto_next_col(jumpdown) "{{{ endif let cmd .= ":call vimwiki#tbl#goto_next_col()\<CR>a" return cmd -endfunction "}}} +endfunction + " Used in s:kbd_goto_prev_col -function! vimwiki#tbl#goto_prev_col() "{{{ +function! vimwiki#tbl#goto_prev_col() let curcol = virtcol('.') let lnum = line('.') let newcol = s:get_indent(lnum) @@ -428,9 +451,10 @@ function! vimwiki#tbl#goto_prev_col() "{{{ endfor let newcol += 2 " +2 == 1 separator + 1 space |<space call vimwiki#u#cursor(lnum, newcol) -endfunction "}}} +endfunction -function! s:kbd_goto_prev_col(jumpup) "{{{ + +function! s:kbd_goto_prev_col(jumpup) let cmd = "\<ESC>" if a:jumpup let seps = s:count_separators_up(line('.')) @@ -442,12 +466,10 @@ function! s:kbd_goto_prev_col(jumpup) "{{{ " let cmd .= "a" "echomsg "DEBUG kbd_goto_prev_col> ".cmd return cmd -endfunction "}}} +endfunction -"}}} -" Global functions {{{ -function! vimwiki#tbl#kbd_cr() "{{{ +function! vimwiki#tbl#kbd_cr() let lnum = line('.') if !s:is_table(getline(lnum)) return "" @@ -459,9 +481,10 @@ function! vimwiki#tbl#kbd_cr() "{{{ else return s:kbd_goto_next_row() endif -endfunction "}}} +endfunction + -function! vimwiki#tbl#kbd_tab() "{{{ +function! vimwiki#tbl#kbd_tab() let lnum = line('.') if !s:is_table(getline(lnum)) return "\<Tab>" @@ -475,9 +498,10 @@ function! vimwiki#tbl#kbd_tab() "{{{ return s:kbd_create_new_row(cols, 1) endif return s:kbd_goto_next_col(is_sep || last) -endfunction "}}} +endfunction + -function! vimwiki#tbl#kbd_shift_tab() "{{{ +function! vimwiki#tbl#kbd_shift_tab() let lnum = line('.') if !s:is_table(getline(lnum)) return "\<S-Tab>" @@ -490,9 +514,10 @@ function! vimwiki#tbl#kbd_shift_tab() "{{{ return "" endif return s:kbd_goto_prev_col(is_sep || first) -endfunction "}}} +endfunction -function! vimwiki#tbl#format(lnum, ...) "{{{ + +function! vimwiki#tbl#format(lnum, ...) if !(&filetype ==? 'vimwiki') return endif @@ -520,11 +545,12 @@ function! vimwiki#tbl#format(lnum, ...) "{{{ let row = indentstring.row call setline(lnum, row) endfor - + let &tw = s:textwidth -endfunction "}}} +endfunction + -function! vimwiki#tbl#create(...) "{{{ +function! vimwiki#tbl#create(...) if a:0 > 1 let cols = a:1 let rows = a:2 @@ -555,19 +581,21 @@ function! vimwiki#tbl#create(...) "{{{ for r in range(rows - 1) call add(lines, row) endfor - + call append(line('.'), lines) -endfunction "}}} +endfunction + -function! vimwiki#tbl#align_or_cmd(cmd) "{{{ +function! vimwiki#tbl#align_or_cmd(cmd) if s:is_table(getline('.')) call vimwiki#tbl#format(line('.')) else exe 'normal! '.a:cmd endif -endfunction "}}} +endfunction + -function! vimwiki#tbl#reset_tw(lnum) "{{{ +function! vimwiki#tbl#reset_tw(lnum) if !(&filetype ==? 'vimwiki') return endif @@ -575,14 +603,14 @@ function! vimwiki#tbl#reset_tw(lnum) "{{{ if !s:is_table(line) return endif - + let s:textwidth = &tw let &tw = 0 -endfunction "}}} +endfunction + -" TODO: move_column_left and move_column_right are good candidates to be -" refactored. -function! vimwiki#tbl#move_column_left() "{{{ +" TODO: move_column_left and move_column_right are good candidates to be refactored. +function! vimwiki#tbl#move_column_left() "echomsg "DEBUG move_column_left: " @@ -598,7 +626,7 @@ function! vimwiki#tbl#move_column_left() "{{{ endif 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) let sep = '\('.s:rxSep().'\).\zs' @@ -608,16 +636,16 @@ function! vimwiki#tbl#move_column_left() "{{{ let mpos = match(line, sep, mpos+1) if mpos != -1 let col += 1 - else + else break endif endwhile endif +endfunction -endfunction "}}} -function! vimwiki#tbl#move_column_right() "{{{ +function! vimwiki#tbl#move_column_right() let line = getline('.') @@ -631,7 +659,7 @@ function! vimwiki#tbl#move_column_right() "{{{ endif 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) let sep = '\('.s:rxSep().'\).\zs' @@ -641,33 +669,35 @@ function! vimwiki#tbl#move_column_right() "{{{ let mpos = match(line, sep, mpos+1) if mpos != -1 let col += 1 - else + else break endif endwhile - endif +endfunction -endfunction "}}} -function! vimwiki#tbl#get_rows(lnum) "{{{ +function! vimwiki#tbl#get_rows(lnum) return s:get_rows(a:lnum) -endfunction "}}} +endfunction + -function! vimwiki#tbl#is_table(line) "{{{ +function! vimwiki#tbl#is_table(line) return s:is_table(a:line) -endfunction "}}} +endfunction -function! vimwiki#tbl#is_separator(line) "{{{ + +function! vimwiki#tbl#is_separator(line) return s:is_separator(a:line) -endfunction "}}} +endfunction + -function! vimwiki#tbl#cell_splitter() "{{{ +function! vimwiki#tbl#cell_splitter() return s:cell_splitter() -endfunction "}}} +endfunction + -function! vimwiki#tbl#sep_splitter() "{{{ +function! vimwiki#tbl#sep_splitter() return s:sep_splitter() -endfunction "}}} +endfunction -"}}} diff --git a/autoload/vimwiki/u.vim b/autoload/vimwiki/u.vim @@ -1,9 +1,9 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=99 +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 " Vimwiki autoload plugin file -" Desc: Utility functions +" Description: Utility functions " Home: https://github.com/vimwiki/vimwiki/ -function! vimwiki#u#trim(string, ...) "{{{ +function! vimwiki#u#trim(string, ...) let chars = '' if a:0 > 0 let chars = a:1 @@ -11,17 +11,20 @@ function! vimwiki#u#trim(string, ...) "{{{ let res = substitute(a:string, '^[[:space:]'.chars.']\+', '', '') let res = substitute(res, '[[:space:]'.chars.']\+$', '', '') return res -endfunction "}}} +endfunction + " Builtin cursor doesn't work right with unicode characters. -function! vimwiki#u#cursor(lnum, cnum) "{{{ +function! vimwiki#u#cursor(lnum, cnum) exe a:lnum exe 'normal! 0'.a:cnum.'|' -endfunction "}}} +endfunction + -function! vimwiki#u#is_windows() "{{{ +function! vimwiki#u#is_windows() return has("win32") || has("win64") || has("win95") || has("win16") -endfunction "}}} +endfunction + function! vimwiki#u#is_macos() if has("mac") || has("macunix") || has("gui_mac") @@ -32,27 +35,32 @@ function! vimwiki#u#is_macos() return os == 'Darwin' || os == 'Mac' endfunction -function! vimwiki#u#count_first_sym(line) "{{{ + +function! vimwiki#u#count_first_sym(line) let first_sym = matchstr(a:line, '\S') return len(matchstr(a:line, first_sym.'\+')) -endfunction "}}} +endfunction -function! vimwiki#u#escape(string) "{{{ + +function! vimwiki#u#escape(string) return escape(a:string, '~.*[]\^$') -endfunction "}}} +endfunction + " Load concrete Wiki syntax: sets regexes and templates for headers and links -function vimwiki#u#reload_regexes() "{{{ +function vimwiki#u#reload_regexes() execute 'runtime! syntax/vimwiki_'.vimwiki#vars#get_wikilocal('syntax').'.vim' -endfunction "}}} +endfunction + " Load syntax-specific functionality -function vimwiki#u#reload_regexes_custom() "{{{ +function vimwiki#u#reload_regexes_custom() execute 'runtime! syntax/vimwiki_'.vimwiki#vars#get_wikilocal('syntax').'_custom.vim' -endfunction "}}} +endfunction + " Backward compatible version of the built-in function shiftwidth() -if exists('*shiftwidth') "{{{ +if exists('*shiftwidth') func vimwiki#u#sw() return shiftwidth() endfunc @@ -60,4 +68,5 @@ else func vimwiki#u#sw() return &sw endfunc -endif "}}} +endif + diff --git a/autoload/vimwiki/vars.vim b/autoload/vimwiki/vars.vim @@ -2,6 +2,8 @@ " Vimwiki autoload plugin file " Home: https://github.com/vimwiki/vimwiki/ + + " ------------------------------------------------------------------------------------------------ " This file provides functions to manage the various state variables which are needed during a " Vimwiki session. @@ -268,7 +270,7 @@ function! s:validate_settings() endfunction -function! s:normalize_path(path) "{{{ +function! s:normalize_path(path) " trim trailing / and \ because otherwise resolve() doesn't work quite right let path = substitute(a:path, '[/\\]\+$', '', '') if path !~# '^scp:' @@ -276,7 +278,7 @@ function! s:normalize_path(path) "{{{ else return path.'/' endif -endfunction "}}} +endfunction function! vimwiki#vars#populate_syntax_vars(syntax) @@ -703,7 +705,9 @@ function! vimwiki#vars#add_temporary_wiki(settings) call s:validate_settings() endfunction + " number of registered wikis + temporary function! vimwiki#vars#number_of_wikis() return len(g:vimwiki_wikilocal_vars) - 1 endfunction + diff --git a/ftplugin/vimwiki.vim b/ftplugin/vimwiki.vim @@ -1,4 +1,4 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=99 +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 " Vimwiki filetype plugin file " Home: https://github.com/vimwiki/vimwiki/ @@ -8,7 +8,6 @@ endif let b:did_ftplugin = 1 " Don't load another plugin for this buffer -" MISC STUFF {{{ setlocal commentstring=%%%s @@ -16,16 +15,14 @@ if vimwiki#vars#get_global('conceallevel') && exists("+conceallevel") let &l:conceallevel = vimwiki#vars#get_global('conceallevel') endif -" GOTO FILE: gf {{{ +" This is for GOTO FILE: gf execute 'setlocal suffixesadd='.vimwiki#vars#get_wikilocal('ext') setlocal isfname-=[,] -" gf}}} exe "setlocal tags+=" . escape(vimwiki#tags#metadata_file_path(), ' \|"') -" MISC }}} -" COMPLETION {{{ + function! Complete_wikifiles(findstart, base) if a:findstart == 1 let column = col('.')-2 @@ -116,9 +113,9 @@ function! Complete_wikifiles(findstart, base) endfunction setlocal omnifunc=Complete_wikifiles -" COMPLETION }}} -" LIST STUFF {{{ + + " settings necessary for the automatic formatting of lists setlocal autoindent setlocal nosmartindent @@ -130,7 +127,6 @@ setlocal formatoptions-=o setlocal formatoptions-=2 setlocal formatoptions+=n -"Create 'formatlistpat' let &formatlistpat = vimwiki#vars#get_syntaxlocal('rxListItem') if !empty(&langmap) @@ -146,17 +142,18 @@ if !empty(&langmap) endif endif -" LIST STUFF }}} -" FOLDING {{{ -" Folding list items {{{ -function! VimwikiFoldListLevel(lnum) "{{{ + +" ------------------------------------------------ +" Folding stuff +" ------------------------------------------------ + +function! VimwikiFoldListLevel(lnum) return vimwiki#lst#fold_level(a:lnum) -endfunction "}}} -" Folding list items }}} +endfunction + -" Folding sections and code blocks {{{ -function! VimwikiFoldLevel(lnum) "{{{ +function! VimwikiFoldLevel(lnum) let line = getline(a:lnum) " Header/section folding... @@ -170,26 +167,29 @@ function! VimwikiFoldLevel(lnum) "{{{ else return "=" endif +endfunction -endfunction "}}} -" Constants used by VimwikiFoldText {{{ +" Constants used by VimwikiFoldText " use \u2026 and \u21b2 (or \u2424) if enc=utf-8 to save screen space let s:ellipsis = (&enc ==? 'utf-8') ? "\u2026" : "..." let s:ell_len = strlen(s:ellipsis) let s:newline = (&enc ==? 'utf-8') ? "\u21b2 " : " " let s:tolerance = 5 -" }}} -function! s:shorten_text_simple(text, len) "{{{ unused + +" unused +function! s:shorten_text_simple(text, len) let spare_len = a:len - len(a:text) return (spare_len>=0) ? [a:text,spare_len] : [a:text[0:a:len].s:ellipsis, -1] -endfunction "}}} +endfunction + " s:shorten_text(text, len) = [string, spare] with "spare" = len-strlen(string) " for long enough "text", the string's length is within s:tolerance of "len" " (so that -s:tolerance <= spare <= s:tolerance, "string" ends with s:ellipsis) -function! s:shorten_text(text, len) "{{{ returns [string, spare] +function! s:shorten_text(text, len) + " returns [string, spare] " strlen() returns lenght in bytes, not in characters, so we'll have to do a " trick here -- replace all non-spaces with dot, calculate lengths and " indexes on it, then use original string to break at selected index. @@ -202,11 +202,11 @@ function! s:shorten_text(text, len) "{{{ returns [string, spare] let newlen = a:len - s:ell_len let idx = strridx(text_pattern, ' ', newlen + s:tolerance) let break_idx = (idx + s:tolerance >= newlen) ? idx : newlen - return [matchstr(a:text, '\m^.\{'.break_idx.'\}').s:ellipsis, - \ newlen - break_idx] -endfunction "}}} + return [matchstr(a:text, '\m^.\{'.break_idx.'\}').s:ellipsis, newlen - break_idx] +endfunction + -function! VimwikiFoldText() "{{{ +function! VimwikiFoldText() let line = getline(v:foldstart) let main_text = substitute(line, '^\s*', repeat(' ',indent(v:foldstart)), '') let fold_len = v:foldend - v:foldstart + 1 @@ -226,12 +226,14 @@ function! VimwikiFoldText() "{{{ endif return main_text.len_text.content_text endif -endfunction "}}} +endfunction + + -" Folding sections and code blocks }}} -" FOLDING }}} +" ------------------------------------------------ +" Commands +" ------------------------------------------------ -" COMMANDS {{{ command! -buffer Vimwiki2HTML \ if filewritable(expand('%')) | silent noautocmd w | endif \ <bar> @@ -289,7 +291,8 @@ command! -buffer -range -nargs=1 VimwikiListChangeSymbolI command! -buffer -nargs=1 VimwikiChangeSymbolInListTo \ call vimwiki#lst#change_marker_in_list(<f-args>) command! -buffer -range VimwikiToggleListItem call vimwiki#lst#toggle_cb(<line1>, <line2>) -command! -buffer -range VimwikiToggleRejectedListItem call vimwiki#lst#toggle_rejected_cb(<line1>, <line2>) +command! -buffer -range VimwikiToggleRejectedListItem + \ call vimwiki#lst#toggle_rejected_cb(<line1>, <line2>) command! -buffer -range VimwikiIncrementListItem call vimwiki#lst#increment_cb(<line1>, <line2>) command! -buffer -range VimwikiDecrementListItem call vimwiki#lst#decrement_cb(<line1>, <line2>) command! -buffer -range -nargs=+ VimwikiListChangeLvl @@ -312,20 +315,25 @@ command! -buffer VimwikiDiaryNextDay call vimwiki#diary#goto_next_day() command! -buffer VimwikiDiaryPrevDay call vimwiki#diary#goto_prev_day() " tags commands -command! -buffer -bang - \ VimwikiRebuildTags call vimwiki#tags#update_tags(1, '<bang>') +command! -buffer -bang VimwikiRebuildTags call vimwiki#tags#update_tags(1, '<bang>') command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags \ VimwikiSearchTags VimwikiSearch /:<args>:/ command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags \ VimwikiGenerateTags call vimwiki#tags#generate_tags(<f-args>) -" COMMANDS }}} +command! -buffer VimwikiPasteUrl call vimwiki#html#PasteUrl(expand('%:p')) +command! -buffer VimwikiCatUrl call vimwiki#html#CatUrl(expand('%:p')) + + +" ------------------------------------------------ +" Keybindings +" ------------------------------------------------ -" KEYBINDINGS {{{ if vimwiki#vars#get_global('use_mouse') nmap <buffer> <S-LeftMouse> <NOP> nmap <buffer> <C-LeftMouse> <NOP> - nnoremap <silent><buffer> <2-LeftMouse> :call vimwiki#base#follow_link('nosplit', 0, 1, "\<lt>2-LeftMouse>")<CR> + nnoremap <silent><buffer> <2-LeftMouse> + \ :call vimwiki#base#follow_link('nosplit', 0, 1, "\<lt>2-LeftMouse>")<CR> nnoremap <silent><buffer> <S-2-LeftMouse> <LeftMouse>:VimwikiSplitLink<CR> nnoremap <silent><buffer> <C-2-LeftMouse> <LeftMouse>:VimwikiVSplitLink<CR> nnoremap <silent><buffer> <RightMouse><LeftMouse> :VimwikiGoBackLink<CR> @@ -335,44 +343,37 @@ endif if !hasmapto('<Plug>Vimwiki2HTML') exe 'nmap <buffer> '.vimwiki#vars#get_global('map_prefix').'h <Plug>Vimwiki2HTML' endif -nnoremap <script><buffer> - \ <Plug>Vimwiki2HTML :Vimwiki2HTML<CR> +nnoremap <script><buffer> <Plug>Vimwiki2HTML :Vimwiki2HTML<CR> if !hasmapto('<Plug>Vimwiki2HTMLBrowse') exe 'nmap <buffer> '.vimwiki#vars#get_global('map_prefix').'hh <Plug>Vimwiki2HTMLBrowse' endif -nnoremap <script><buffer> - \ <Plug>Vimwiki2HTMLBrowse :Vimwiki2HTMLBrowse<CR> +nnoremap <script><buffer> <Plug>Vimwiki2HTMLBrowse :Vimwiki2HTMLBrowse<CR> if !hasmapto('<Plug>VimwikiFollowLink') nmap <silent><buffer> <CR> <Plug>VimwikiFollowLink endif -nnoremap <silent><script><buffer> - \ <Plug>VimwikiFollowLink :VimwikiFollowLink<CR> +nnoremap <silent><script><buffer> <Plug>VimwikiFollowLink :VimwikiFollowLink<CR> if !hasmapto('<Plug>VimwikiSplitLink') nmap <silent><buffer> <S-CR> <Plug>VimwikiSplitLink endif -nnoremap <silent><script><buffer> - \ <Plug>VimwikiSplitLink :VimwikiSplitLink<CR> +nnoremap <silent><script><buffer> <Plug>VimwikiSplitLink :VimwikiSplitLink<CR> if !hasmapto('<Plug>VimwikiVSplitLink') nmap <silent><buffer> <C-CR> <Plug>VimwikiVSplitLink endif -nnoremap <silent><script><buffer> - \ <Plug>VimwikiVSplitLink :VimwikiVSplitLink<CR> +nnoremap <silent><script><buffer> <Plug>VimwikiVSplitLink :VimwikiVSplitLink<CR> if !hasmapto('<Plug>VimwikiNormalizeLink') nmap <silent><buffer> + <Plug>VimwikiNormalizeLink endif -nnoremap <silent><script><buffer> - \ <Plug>VimwikiNormalizeLink :VimwikiNormalizeLink 0<CR> +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> +vnoremap <silent><script><buffer> <Plug>VimwikiNormalizeLinkVisual :<C-U>VimwikiNormalizeLink 1<CR> if !hasmapto('<Plug>VimwikiNormalizeLinkVisualCR') vmap <silent><buffer> <CR> <Plug>VimwikiNormalizeLinkVisualCR @@ -384,50 +385,42 @@ if !hasmapto('<Plug>VimwikiTabnewLink') nmap <silent><buffer> <D-CR> <Plug>VimwikiTabnewLink nmap <silent><buffer> <C-S-CR> <Plug>VimwikiTabnewLink endif -nnoremap <silent><script><buffer> - \ <Plug>VimwikiTabnewLink :VimwikiTabnewLink<CR> +nnoremap <silent><script><buffer> <Plug>VimwikiTabnewLink :VimwikiTabnewLink<CR> if !hasmapto('<Plug>VimwikiGoBackLink') nmap <silent><buffer> <BS> <Plug>VimwikiGoBackLink endif -nnoremap <silent><script><buffer> - \ <Plug>VimwikiGoBackLink :VimwikiGoBackLink<CR> +nnoremap <silent><script><buffer> <Plug>VimwikiGoBackLink :VimwikiGoBackLink<CR> if !hasmapto('<Plug>VimwikiNextLink') nmap <silent><buffer> <TAB> <Plug>VimwikiNextLink endif -nnoremap <silent><script><buffer> - \ <Plug>VimwikiNextLink :VimwikiNextLink<CR> +nnoremap <silent><script><buffer> <Plug>VimwikiNextLink :VimwikiNextLink<CR> if !hasmapto('<Plug>VimwikiPrevLink') nmap <silent><buffer> <S-TAB> <Plug>VimwikiPrevLink endif -nnoremap <silent><script><buffer> - \ <Plug>VimwikiPrevLink :VimwikiPrevLink<CR> +nnoremap <silent><script><buffer> <Plug>VimwikiPrevLink :VimwikiPrevLink<CR> if !hasmapto('<Plug>VimwikiDeleteLink') exe 'nmap <silent><buffer> '.vimwiki#vars#get_global('map_prefix').'d <Plug>VimwikiDeleteLink' endif -nnoremap <silent><script><buffer> - \ <Plug>VimwikiDeleteLink :VimwikiDeleteLink<CR> +nnoremap <silent><script><buffer> <Plug>VimwikiDeleteLink :VimwikiDeleteLink<CR> if !hasmapto('<Plug>VimwikiRenameLink') exe 'nmap <silent><buffer> '.vimwiki#vars#get_global('map_prefix').'r <Plug>VimwikiRenameLink' endif -nnoremap <silent><script><buffer> - \ <Plug>VimwikiRenameLink :VimwikiRenameLink<CR> +nnoremap <silent><script><buffer> <Plug>VimwikiRenameLink :VimwikiRenameLink<CR> if !hasmapto('<Plug>VimwikiDiaryNextDay') nmap <silent><buffer> <C-Down> <Plug>VimwikiDiaryNextDay endif -nnoremap <silent><script><buffer> - \ <Plug>VimwikiDiaryNextDay :VimwikiDiaryNextDay<CR> +nnoremap <silent><script><buffer> <Plug>VimwikiDiaryNextDay :VimwikiDiaryNextDay<CR> if !hasmapto('<Plug>VimwikiDiaryPrevDay') nmap <silent><buffer> <C-Up> <Plug>VimwikiDiaryPrevDay endif -nnoremap <silent><script><buffer> - \ <Plug>VimwikiDiaryPrevDay :VimwikiDiaryPrevDay<CR> +nnoremap <silent><script><buffer> <Plug>VimwikiDiaryPrevDay :VimwikiDiaryPrevDay<CR> " List mappings if !hasmapto('<Plug>VimwikiToggleListItem') @@ -442,10 +435,8 @@ if !hasmapto('<Plug>VimwikiToggleRejectedListItem') nmap <silent><buffer> glx <Plug>VimwikiToggleRejectedListItem vmap <silent><buffer> glx <Plug>VimwikiToggleRejectedListItem endif -nnoremap <silent><script><buffer> - \ <Plug>VimwikiToggleListItem :VimwikiToggleListItem<CR> -vnoremap <silent><script><buffer> - \ <Plug>VimwikiToggleListItem :VimwikiToggleListItem<CR> +nnoremap <silent><script><buffer> <Plug>VimwikiToggleListItem :VimwikiToggleListItem<CR> +vnoremap <silent><script><buffer> <Plug>VimwikiToggleListItem :VimwikiToggleListItem<CR> nnoremap <silent><script><buffer> \ <Plug>VimwikiToggleRejectedListItem :VimwikiToggleRejectedListItem<CR> vnoremap <silent><script><buffer> @@ -459,39 +450,31 @@ if !hasmapto('<Plug>VimwikiDecrementListItem') nmap <silent><buffer> glp <Plug>VimwikiDecrementListItem vmap <silent><buffer> glp <Plug>VimwikiDecrementListItem endif -nnoremap <silent><script><buffer> - \ <Plug>VimwikiIncrementListItem :VimwikiIncrementListItem<CR> -vnoremap <silent><script><buffer> - \ <Plug>VimwikiIncrementListItem :VimwikiIncrementListItem<CR> -nnoremap <silent><script><buffer> - \ <Plug>VimwikiDecrementListItem :VimwikiDecrementListItem<CR> -vnoremap <silent><script><buffer> - \ <Plug>VimwikiDecrementListItem :VimwikiDecrementListItem<CR> +nnoremap <silent><script><buffer> <Plug>VimwikiIncrementListItem :VimwikiIncrementListItem<CR> +vnoremap <silent><script><buffer> <Plug>VimwikiIncrementListItem :VimwikiIncrementListItem<CR> +nnoremap <silent><script><buffer> <Plug>VimwikiDecrementListItem :VimwikiDecrementListItem<CR> +vnoremap <silent><script><buffer> <Plug>VimwikiDecrementListItem :VimwikiDecrementListItem<CR> if !hasmapto('<Plug>VimwikiDecreaseLvlSingleItem', 'i') - imap <silent><buffer> <C-D> - \ <Plug>VimwikiDecreaseLvlSingleItem + imap <silent><buffer> <C-D> <Plug>VimwikiDecreaseLvlSingleItem endif inoremap <silent><script><buffer> <Plug>VimwikiDecreaseLvlSingleItem \ <C-O>:VimwikiListChangeLvl decrease 0<CR> if !hasmapto('<Plug>VimwikiIncreaseLvlSingleItem', 'i') - imap <silent><buffer> <C-T> - \ <Plug>VimwikiIncreaseLvlSingleItem + imap <silent><buffer> <C-T> <Plug>VimwikiIncreaseLvlSingleItem endif inoremap <silent><script><buffer> <Plug>VimwikiIncreaseLvlSingleItem \ <C-O>:VimwikiListChangeLvl increase 0<CR> if !hasmapto('<Plug>VimwikiListNextSymbol', 'i') - imap <silent><buffer> <C-L><C-J> - \ <Plug>VimwikiListNextSymbol + imap <silent><buffer> <C-L><C-J> <Plug>VimwikiListNextSymbol endif inoremap <silent><script><buffer> <Plug>VimwikiListNextSymbol \ <C-O>:VimwikiListChangeSymbolI next<CR> if !hasmapto('<Plug>VimwikiListPrevSymbol', 'i') - imap <silent><buffer> <C-L><C-K> - \ <Plug>VimwikiListPrevSymbol + imap <silent><buffer> <C-L><C-K> <Plug>VimwikiListPrevSymbol endif inoremap <silent><script><buffer> <Plug>VimwikiListPrevSymbol \ <C-O>:VimwikiListChangeSymbolI prev<CR> @@ -507,15 +490,13 @@ nnoremap <silent> <buffer> O :<C-U>call vimwiki#lst#kbd_O()<CR> if !hasmapto('<Plug>VimwikiRenumberList') nmap <silent><buffer> glr <Plug>VimwikiRenumberList endif -nnoremap <silent><script><buffer> - \ <Plug>VimwikiRenumberList :VimwikiRenumberList<CR> +nnoremap <silent><script><buffer> <Plug>VimwikiRenumberList :VimwikiRenumberList<CR> if !hasmapto('<Plug>VimwikiRenumberAllLists') nmap <silent><buffer> gLr <Plug>VimwikiRenumberAllLists nmap <silent><buffer> gLR <Plug>VimwikiRenumberAllLists endif -nnoremap <silent><script><buffer> - \ <Plug>VimwikiRenumberAllLists :VimwikiRenumberAllLists<CR> +nnoremap <silent><script><buffer> <Plug>VimwikiRenumberAllLists :VimwikiRenumberAllLists<CR> if !hasmapto('<Plug>VimwikiDecreaseLvlSingleItem') map <silent><buffer> glh <Plug>VimwikiDecreaseLvlSingleItem @@ -546,14 +527,12 @@ noremap <silent><script><buffer> if !hasmapto('<Plug>VimwikiRemoveSingleCB') map <silent><buffer> gl<Space> <Plug>VimwikiRemoveSingleCB endif -noremap <silent><script><buffer> - \ <Plug>VimwikiRemoveSingleCB :VimwikiRemoveSingleCB<CR> +noremap <silent><script><buffer> <Plug>VimwikiRemoveSingleCB :VimwikiRemoveSingleCB<CR> if !hasmapto('<Plug>VimwikiRemoveCBInList') map <silent><buffer> gL<Space> <Plug>VimwikiRemoveCBInList endif -noremap <silent><script><buffer> - \ <Plug>VimwikiRemoveCBInList :VimwikiRemoveCBInList<CR> +noremap <silent><script><buffer> <Plug>VimwikiRemoveCBInList :VimwikiRemoveCBInList<CR> for s:char in vimwiki#vars#get_syntaxlocal('bullet_types') if !hasmapto(':VimwikiChangeSymbolTo '.s:char.'<CR>') @@ -574,8 +553,7 @@ for s:typ in vimwiki#vars#get_syntaxlocal('number_types') endfor - -function! s:CR(normal, just_mrkr) "{{{ +function! s:CR(normal, just_mrkr) if vimwiki#vars#get_global('table_mappings') let res = vimwiki#tbl#kbd_cr() if res != "" @@ -585,7 +563,7 @@ function! s:CR(normal, just_mrkr) "{{{ endif endif call vimwiki#lst#kbd_cr(a:normal, a:just_mrkr) -endfunction "}}} +endfunction if !hasmapto('VimwikiReturn', 'i') if maparg('<CR>', 'i') !~? '<Esc>:VimwikiReturn' @@ -609,8 +587,7 @@ nnoremap <buffer> gww :VimwikiTableAlignW<CR> if !hasmapto('<Plug>VimwikiTableMoveColumnLeft') nmap <silent><buffer> <A-Left> <Plug>VimwikiTableMoveColumnLeft endif -nnoremap <silent><script><buffer> - \ <Plug>VimwikiTableMoveColumnLeft :VimwikiTableMoveColumnLeft<CR> +nnoremap <silent><script><buffer> <Plug>VimwikiTableMoveColumnLeft :VimwikiTableMoveColumnLeft<CR> if !hasmapto('<Plug>VimwikiTableMoveColumnRight') nmap <silent><buffer> <A-Right> <Plug>VimwikiTableMoveColumnRight endif @@ -619,7 +596,10 @@ nnoremap <silent><script><buffer> -" Text objects {{{ +" ------------------------------------------------ +" Text objects +" ------------------------------------------------ + onoremap <silent><buffer> ah :<C-U>call vimwiki#base#TO_header(0, 0, v:count1)<CR> vnoremap <silent><buffer> ah :<C-U>call vimwiki#base#TO_header(0, 0, v:count1)<CR> @@ -653,8 +633,7 @@ vnoremap <silent><buffer> il :<C-U>call vimwiki#lst#TO_list_item(1, 1)<CR> if !hasmapto('<Plug>VimwikiAddHeaderLevel') nmap <silent><buffer> = <Plug>VimwikiAddHeaderLevel endif -nnoremap <silent><buffer> <Plug>VimwikiAddHeaderLevel : - \<C-U>call vimwiki#base#AddHeaderLevel()<CR> +nnoremap <silent><buffer> <Plug>VimwikiAddHeaderLevel :<C-U>call vimwiki#base#AddHeaderLevel()<CR> if !hasmapto('<Plug>VimwikiRemoveHeaderLevel') nmap <silent><buffer> - <Plug>VimwikiRemoveHeaderLevel @@ -693,11 +672,8 @@ endif nnoremap <silent><buffer> <Plug>VimwikiGoToPrevSiblingHeader : \<C-u>call vimwiki#base#goto_sibling(-1)<CR> -" }}} -" KEYBINDINGS }}} -" AUTOCOMMANDS {{{ if vimwiki#vars#get_wikilocal('auto_export') " Automatically generate HTML on page write. augroup vimwiki @@ -720,10 +696,4 @@ if vimwiki#vars#get_wikilocal('auto_tags') au BufWritePost <buffer> call vimwiki#tags#update_tags(0, '') augroup END endif -" AUTOCOMMANDS }}} -" PASTE, CAT URL {{{ -" html commands -command! -buffer VimwikiPasteUrl call vimwiki#html#PasteUrl(expand('%:p')) -command! -buffer VimwikiCatUrl call vimwiki#html#CatUrl(expand('%:p')) -" }}} diff --git a/plugin/vimwiki.vim b/plugin/vimwiki.vim @@ -1,19 +1,21 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=99 +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 " Vimwiki plugin file " Home: https://github.com/vimwiki/vimwiki/ " GetLatestVimScripts: 2226 1 :AutoInstall: vimwiki + if exists("g:loaded_vimwiki") || &cp finish endif let g:loaded_vimwiki = 1 + let s:old_cpo = &cpo set cpo&vim " this is called when the cursor leaves the buffer -function! s:setup_buffer_leave() "{{{ +function! s:setup_buffer_leave() " don't do anything if it's not managed by Vimwiki (that is, when it's not in " a registered wiki and not a temporary wiki) if vimwiki#vars#get_bufferlocal('wiki_nr') == -1 @@ -25,7 +27,7 @@ function! s:setup_buffer_leave() "{{{ if vimwiki#vars#get_global('menu') != "" exe 'nmenu disable '.vimwiki#vars#get_global('menu').'.Table' endif -endfunction "}}} +endfunction " create a new temporary wiki for the current buffer @@ -52,7 +54,7 @@ endfunction " This function is called when Vim opens a new buffer with a known wiki " extension. Both when the buffer has never been opened in this session and " when it has. -function! s:setup_new_wiki_buffer() "{{{ +function! s:setup_new_wiki_buffer() let wiki_nr = vimwiki#vars#get_bufferlocal('wiki_nr') if wiki_nr == -1 " it's not in a known wiki directory if vimwiki#vars#get_global('global_ext') @@ -73,11 +75,11 @@ function! s:setup_new_wiki_buffer() "{{{ " sourced setfiletype vimwiki -endfunction "}}} +endfunction " this is called when the cursor enters the buffer -function! s:setup_buffer_enter() "{{{ +function! s:setup_buffer_enter() " don't do anything if it's not managed by Vimwiki (that is, when it's not in " a registered wiki and not a temporary wiki) if vimwiki#vars#get_bufferlocal('wiki_nr') == -1 @@ -91,10 +93,11 @@ function! s:setup_buffer_enter() "{{{ call s:set_global_options() call s:set_windowlocal_options() -endfunction "}}} +endfunction -function! s:setup_cleared_syntax() "{{{ highlight groups that get cleared +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 @@ -108,10 +111,10 @@ function! s:setup_cleared_syntax() "{{{ highlight groups that get cleared \ .' term=bold cterm=bold' endfor endif -endfunction "}}} +endfunction -function! s:vimwiki_get_known_extensions() " {{{ +function! s:vimwiki_get_known_extensions() " Getting all extensions that different wikis could have let extensions = {} for idx in range(vimwiki#vars#number_of_wikis()) @@ -123,7 +126,7 @@ function! s:vimwiki_get_known_extensions() " {{{ let extensions[ext] = 1 endfor return keys(extensions) -endfunction " }}} +endfunction " Set settings which are global for Vim, but should only be executed for @@ -171,7 +174,7 @@ function! s:set_windowlocal_options() endif endfunction -" }}} + " Initialization of Vimwiki starts here. Make sure everything below does not @@ -179,30 +182,30 @@ endfunction call vimwiki#vars#init() -" CALLBACK functions "{{{ -" User can redefine it. -if !exists("*VimwikiLinkHandler") "{{{ + +" Define callback functions which the user can redefine +if !exists("*VimwikiLinkHandler") function VimwikiLinkHandler(url) return 0 endfunction -endif "}}} +endif -if !exists("*VimwikiLinkConverter") "{{{ +if !exists("*VimwikiLinkConverter") function VimwikiLinkConverter(url, source, target) " Return the empty string when unable to process link return '' endfunction -endif "}}} +endif -if !exists("*VimwikiWikiIncludeHandler") "{{{ - function! VimwikiWikiIncludeHandler(value) "{{{ +if !exists("*VimwikiWikiIncludeHandler") + function! VimwikiWikiIncludeHandler(value) return '' - endfunction "}}} -endif "}}} -" CALLBACK }}} + endfunction +endif + -" AUTOCOMMANDS for all known wiki extensions {{{ +" Define autocommands for all known wiki extensions let s:known_extensions = s:vimwiki_get_known_extensions() @@ -228,9 +231,9 @@ augroup vimwiki endif endfor augroup END -"}}} -" COMMANDS {{{ + + command! VimwikiUISelect call vimwiki#base#ui_select() " why not using <count> instead of v:count1? " See https://github.com/vimwiki-backup/vimwiki/issues/324 @@ -246,15 +249,17 @@ command! -count=1 VimwikiMakeDiaryNote command! -count=1 VimwikiTabMakeDiaryNote \ call vimwiki#diary#make_note(v:count1, 1) command! -count=1 VimwikiMakeYesterdayDiaryNote - \ call vimwiki#diary#make_note(v:count1, 0, vimwiki#diary#diary_date_link(localtime() - 60*60*24)) + \ call vimwiki#diary#make_note(v:count1, 0, + \ vimwiki#diary#diary_date_link(localtime() - 60*60*24)) command! -count=1 VimwikiMakeTomorrowDiaryNote - \ call vimwiki#diary#make_note(v:count1, 0, vimwiki#diary#diary_date_link(localtime() + 60*60*24)) + \ call vimwiki#diary#make_note(v:count1, 0, + \ vimwiki#diary#diary_date_link(localtime() + 60*60*24)) command! VimwikiDiaryGenerateLinks \ call vimwiki#diary#generate_diary_section() -"}}} -" MAPPINGS {{{ + + let s:map_prefix = vimwiki#vars#get_global('map_prefix') if !hasmapto('<Plug>VimwikiIndex') @@ -305,9 +310,9 @@ endif nnoremap <unique><script> <Plug>VimwikiMakeTomorrowDiaryNote \ :VimwikiMakeTomorrowDiaryNote<CR> -"}}} -" MENU {{{ + + function! s:build_menu(topmenu) for idx in range(vimwiki#vars#number_of_wikis()) let norm_path = fnamemodify(vimwiki#vars#get_wikilocal('path', idx), ':h:t') @@ -324,7 +329,8 @@ function! s:build_table_menu(topmenu) exe 'menu '.a:topmenu.'.Table.Create\ (enter\ cols\ rows) :VimwikiTable ' exe 'nmenu '.a:topmenu.'.Table.Format<tab>gqq gqq' exe 'nmenu '.a:topmenu.'.Table.Move\ column\ left<tab><A-Left> :VimwikiTableMoveColumnLeft<CR>' - exe 'nmenu '.a:topmenu.'.Table.Move\ column\ right<tab><A-Right> :VimwikiTableMoveColumnRight<CR>' + exe 'nmenu '.a:topmenu. + \ '.Table.Move\ column\ right<tab><A-Right> :VimwikiTableMoveColumnRight<CR>' exe 'nmenu disable '.a:topmenu.'.Table' endfunction @@ -333,14 +339,13 @@ if !empty(vimwiki#vars#get_global('menu')) call s:build_menu(vimwiki#vars#get_global('menu')) call s:build_table_menu(vimwiki#vars#get_global('menu')) endif -" }}} -" CALENDAR Hook "{{{ + +" Hook for calendar.vim if vimwiki#vars#get_global('use_calendar') let g:calendar_action = 'vimwiki#diary#calendar_action' let g:calendar_sign = 'vimwiki#diary#calendar_sign' endif -"}}} let &cpo = s:old_cpo diff --git a/syntax/vimwiki.vim b/syntax/vimwiki.vim @@ -1,7 +1,8 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=99 +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 " Vimwiki syntax file " Home: https://github.com/vimwiki/vimwiki/ + " Quit if syntax file is already loaded if v:version < 600 syntax clear @@ -12,35 +13,38 @@ endif let s:current_syntax = vimwiki#vars#get_wikilocal('syntax') + call vimwiki#vars#populate_syntax_vars(s:current_syntax) -" LINKS: highlighting is complicated due to "nonexistent" links feature {{{ -function! s:add_target_syntax_ON(target, type) " {{{ +" LINKS: highlighting is complicated due to "nonexistent" links feature +function! s:add_target_syntax_ON(target, type) 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 "}}} +endfunction + -function! s:add_target_syntax_OFF(target) " {{{ +function! s:add_target_syntax_OFF(target) 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 "}}} +endfunction -function! s:highlight_existing_links() "{{{ + +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(vimwiki#vars#get_bufferlocal('existing_wikifiles')) . - \ '\%(#[^|]*\)\?\|#[^|]*\)' + let safe_links = '\%('.vimwiki#base#file_pattern( + \ vimwiki#vars#get_bufferlocal('existing_wikifiles')) . '\%(#[^|]*\)\?\|#[^|]*\)' " Wikilink Dirs set up upon BufEnter (see plugin/...) let safe_dirs = vimwiki#base#file_pattern(vimwiki#vars#get_bufferlocal('existing_wikidirs')) @@ -75,7 +79,7 @@ function! s:highlight_existing_links() "{{{ \ vimwiki#u#escape(vimwiki#vars#get_global('WikiLinkTemplate2')), \ safe_dirs, vimwiki#vars#get_global('rxWikiLinkDescr'), '') call s:add_target_syntax_ON(target, 'VimwikiLink') -endfunction "}}} +endfunction " use max highlighting - could be quite slow if there are too many wikifiles @@ -94,9 +98,11 @@ else call s:add_target_syntax_ON(vimwiki#vars#get_global('rxWikiIncl'), 'VimwikiLink') endif + " Weblink call s:add_target_syntax_ON(vimwiki#vars#get_syntaxlocal('rxWeblink'), 'VimwikiLink') + " WikiLink " All remaining schemes are highlighted automatically let s:rxSchemes = '\%('. @@ -107,64 +113,73 @@ let s:rxSchemes = '\%('. " a) match [[nonwiki-scheme-URL]] let s:target = vimwiki#base#apply_template( \ vimwiki#u#escape(vimwiki#vars#get_global('WikiLinkTemplate1')), - \ s:rxSchemes.vimwiki#vars#get_global('rxWikiLinkUrl'), vimwiki#vars#get_global('rxWikiLinkDescr'), '') + \ s:rxSchemes.vimwiki#vars#get_global('rxWikiLinkUrl'), + \ vimwiki#vars#get_global('rxWikiLinkDescr'), '') call s:add_target_syntax_ON(s:target, 'VimwikiLink') " b) match [[nonwiki-scheme-URL|DESCRIPTION]] let s:target = vimwiki#base#apply_template( \ vimwiki#u#escape(vimwiki#vars#get_global('WikiLinkTemplate2')), - \ s:rxSchemes.vimwiki#vars#get_global('rxWikiLinkUrl'), vimwiki#vars#get_global('rxWikiLinkDescr'), '') + \ s:rxSchemes.vimwiki#vars#get_global('rxWikiLinkUrl'), + \ vimwiki#vars#get_global('rxWikiLinkDescr'), '') call s:add_target_syntax_ON(s:target, 'VimwikiLink') " a) match {{nonwiki-scheme-URL}} let s:target = vimwiki#base#apply_template( \ vimwiki#u#escape(vimwiki#vars#get_global('WikiInclTemplate1')), - \ s:rxSchemes.vimwiki#vars#get_global('rxWikiInclUrl'), vimwiki#vars#get_global('rxWikiInclArgs'), '') + \ s:rxSchemes.vimwiki#vars#get_global('rxWikiInclUrl'), + \ vimwiki#vars#get_global('rxWikiInclArgs'), '') call s:add_target_syntax_ON(s:target, 'VimwikiLink') " b) match {{nonwiki-scheme-URL}[{...}]} let s:target = vimwiki#base#apply_template( \ vimwiki#u#escape(vimwiki#vars#get_global('WikiInclTemplate2')), - \ s:rxSchemes.vimwiki#vars#get_global('rxWikiInclUrl'), vimwiki#vars#get_global('rxWikiInclArgs'), '') + \ s:rxSchemes.vimwiki#vars#get_global('rxWikiInclUrl'), + \ vimwiki#vars#get_global('rxWikiInclArgs'), '') call s:add_target_syntax_ON(s:target, 'VimwikiLink') -" }}} -" generic headers "{{{ " Header levels, 1-6 for s:i in range(1,6) execute 'syntax match VimwikiHeader'.s:i - \ . ' /'.vimwiki#vars#get_syntaxlocal('rxH'.s:i, s:current_syntax).'/' - \ . ' contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiCode,VimwikiLink,@Spell' - execute 'syntax region VimwikiH'.s:i.'Folding' - \ . ' start=/'.vimwiki#vars#get_syntaxlocal('rxH'.s:i.'_Start', s:current_syntax).'/' - \ . ' end=/'.vimwiki#vars#get_syntaxlocal('rxH'.s:i.'_End', s:current_syntax).'/me=s-1 transparent fold' + \ . ' /'.vimwiki#vars#get_syntaxlocal('rxH'.s:i, s:current_syntax). + \ '/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiCode,'. + \ 'VimwikiLink,@Spell' + execute 'syntax region VimwikiH'.s:i.'Folding start=/'. + \ vimwiki#vars#get_syntaxlocal('rxH'.s:i.'_Start', s:current_syntax).'/ end=/'. + \ vimwiki#vars#get_syntaxlocal('rxH'.s:i.'_End', s:current_syntax). + \ '/me=s-1 transparent fold' endfor -" }}} - -" possibly concealed chars " {{{ +" possibly concealed chars let s:conceal = exists("+conceallevel") ? ' conceal' : '' -execute 'syn match VimwikiEqInChar contained /'.vimwiki#vars#get_syntaxlocal('char_eqin').'/'.s:conceal -execute 'syn match VimwikiBoldChar contained /'.vimwiki#vars#get_syntaxlocal('char_bold').'/'.s:conceal -execute 'syn match VimwikiItalicChar contained /'.vimwiki#vars#get_syntaxlocal('char_italic').'/'.s:conceal -execute 'syn match VimwikiBoldItalicChar contained /'.vimwiki#vars#get_syntaxlocal('char_bolditalic').'/'.s:conceal -execute 'syn match VimwikiItalicBoldChar contained /'.vimwiki#vars#get_syntaxlocal('char_italicbold').'/'.s:conceal -execute 'syn match VimwikiCodeChar contained /'.vimwiki#vars#get_syntaxlocal('char_code').'/'.s:conceal -execute 'syn match VimwikiDelTextChar contained /'.vimwiki#vars#get_syntaxlocal('char_deltext').'/'.s:conceal -execute 'syn match VimwikiSuperScript contained /'.vimwiki#vars#get_syntaxlocal('char_superscript').'/'.s:conceal -execute 'syn match VimwikiSubScript contained /'.vimwiki#vars#get_syntaxlocal('char_subscript').'/'.s:conceal -" }}} +execute 'syn match VimwikiEqInChar contained /'. + \ vimwiki#vars#get_syntaxlocal('char_eqin').'/'.s:conceal +execute 'syn match VimwikiBoldChar contained /'. + \ vimwiki#vars#get_syntaxlocal('char_bold').'/'.s:conceal +execute 'syn match VimwikiItalicChar contained /'. + \ vimwiki#vars#get_syntaxlocal('char_italic').'/'.s:conceal +execute 'syn match VimwikiBoldItalicChar contained /'. + \ vimwiki#vars#get_syntaxlocal('char_bolditalic').'/'.s:conceal +execute 'syn match VimwikiItalicBoldChar contained /'. + \ vimwiki#vars#get_syntaxlocal('char_italicbold').'/'.s:conceal +execute 'syn match VimwikiCodeChar contained /'. + \ vimwiki#vars#get_syntaxlocal('char_code').'/'.s:conceal +execute 'syn match VimwikiDelTextChar contained /'. + \ vimwiki#vars#get_syntaxlocal('char_deltext').'/'.s:conceal +execute 'syn match VimwikiSuperScript contained /'. + \ vimwiki#vars#get_syntaxlocal('char_superscript').'/'.s:conceal +execute 'syn match VimwikiSubScript contained /'. + \ vimwiki#vars#get_syntaxlocal('char_subscript').'/'.s:conceal + + -" concealed link parts " {{{ -" define the conceal attribute for links only if Vim is new enough to handle it -" and the user has g:vimwiki_url_maxsave > 0 let s:options = ' contained transparent contains=NONE' -" + " A shortener for long URLs: LinkRest (a middle part of the URL) is concealed " VimwikiLinkRest group is left undefined if link shortening is not desired if exists("+conceallevel") && vimwiki#vars#get_global('url_maxsave') > 0 @@ -187,27 +202,37 @@ execute 'syn match VimwikiLinkChar /'.vimwiki#vars#get_global('rxWikiInclPrefix' execute 'syn match VimwikiLinkChar /'.vimwiki#vars#get_global('rxWikiInclSuffix').'/'.s:options execute 'syn match VimwikiLinkChar /'.vimwiki#vars#get_global('rxWikiInclPrefix1').'/'.s:options execute 'syn match VimwikiLinkChar /'.vimwiki#vars#get_global('rxWikiInclSuffix1').'/'.s:options -" }}} - -" non concealed chars " {{{ -execute 'syn match VimwikiHeaderChar contained /\%(^\s*'.vimwiki#vars#get_syntaxlocal('rxH').'\+\)\|\%('.vimwiki#vars#get_syntaxlocal('rxH').'\+\s*$\)/' -execute 'syn match VimwikiEqInCharT contained /'.vimwiki#vars#get_syntaxlocal('char_eqin').'/' -execute 'syn match VimwikiBoldCharT contained /'.vimwiki#vars#get_syntaxlocal('char_bold').'/' -execute 'syn match VimwikiItalicCharT contained /'.vimwiki#vars#get_syntaxlocal('char_italic').'/' -execute 'syn match VimwikiBoldItalicCharT contained /'.vimwiki#vars#get_syntaxlocal('char_bolditalic').'/' -execute 'syn match VimwikiItalicBoldCharT contained /'.vimwiki#vars#get_syntaxlocal('char_italicbold').'/' -execute 'syn match VimwikiCodeCharT contained /'.vimwiki#vars#get_syntaxlocal('char_code').'/' -execute 'syn match VimwikiDelTextCharT contained /'.vimwiki#vars#get_syntaxlocal('char_deltext').'/' -execute 'syn match VimwikiSuperScriptT contained /'.vimwiki#vars#get_syntaxlocal('char_superscript').'/' -execute 'syn match VimwikiSubScriptT contained /'.vimwiki#vars#get_syntaxlocal('char_subscript').'/' + + +" non concealed chars +execute 'syn match VimwikiHeaderChar contained /\%(^\s*'. + \ vimwiki#vars#get_syntaxlocal('rxH').'\+\)\|\%('.vimwiki#vars#get_syntaxlocal('rxH'). + \ '\+\s*$\)/' +execute 'syn match VimwikiEqInCharT contained /' + \ .vimwiki#vars#get_syntaxlocal('char_eqin').'/' +execute 'syn match VimwikiBoldCharT contained /' + \ .vimwiki#vars#get_syntaxlocal('char_bold').'/' +execute 'syn match VimwikiItalicCharT contained /' + \ .vimwiki#vars#get_syntaxlocal('char_italic').'/' +execute 'syn match VimwikiBoldItalicCharT contained /' + \ .vimwiki#vars#get_syntaxlocal('char_bolditalic').'/' +execute 'syn match VimwikiItalicBoldCharT contained /' + \ .vimwiki#vars#get_syntaxlocal('char_italicbold').'/' +execute 'syn match VimwikiCodeCharT contained /' + \ .vimwiki#vars#get_syntaxlocal('char_code').'/' +execute 'syn match VimwikiDelTextCharT contained /' + \ .vimwiki#vars#get_syntaxlocal('char_deltext').'/' +execute 'syn match VimwikiSuperScriptT contained /' + \ .vimwiki#vars#get_syntaxlocal('char_superscript').'/' +execute 'syn match VimwikiSubScriptT contained /' + \ .vimwiki#vars#get_syntaxlocal('char_subscript').'/' " Emoticons "syntax match VimwikiEmoticons /\%((.)\|:[()|$@]\|:-[DOPS()\]|$@]\|;)\|:'(\)/ execute 'syntax match VimwikiTodo /'. vimwiki#vars#get_global('rxTodo') .'/' -" }}} -" main syntax groups {{{ + " Tables syntax match VimwikiTableRow /^\s*|.\+|\s*$/ @@ -229,6 +254,7 @@ syntax match VimwikiTableRow /^\s*|.\+|\s*$/ syntax match VimwikiCellSeparator \ /\%(|\)\|\%(-\@<=+\-\@=\)\|\%([|+]\@<=-\+\)/ contained + " Lists execute 'syntax match VimwikiList /'.vimwiki#vars#get_syntaxlocal('rxListItemWithoutCB').'/' execute 'syntax match VimwikiList /'.vimwiki#vars#get_syntaxlocal('rxListDefine').'/' @@ -246,32 +272,51 @@ elseif vimwiki#vars#get_global('hl_cb_checked') == 2 endif -execute 'syntax match VimwikiEqIn /'.vimwiki#vars#get_syntaxlocal('rxEqIn').'/ contains=VimwikiEqInChar' -execute 'syntax match VimwikiEqInT /'.vimwiki#vars#get_syntaxlocal('rxEqIn').'/ contained contains=VimwikiEqInCharT' +execute 'syntax match VimwikiEqIn /'.vimwiki#vars#get_syntaxlocal('rxEqIn'). + \ '/ contains=VimwikiEqInChar' +execute 'syntax match VimwikiEqInT /'.vimwiki#vars#get_syntaxlocal('rxEqIn'). + \ '/ contained contains=VimwikiEqInCharT' + +execute 'syntax match VimwikiBold /'.vimwiki#vars#get_syntaxlocal('rxBold'). + \ '/ contains=VimwikiBoldChar,@Spell' +execute 'syntax match VimwikiBoldT /'.vimwiki#vars#get_syntaxlocal('rxBold'). + \ '/ contained contains=VimwikiBoldCharT,@Spell' -execute 'syntax match VimwikiBold /'.vimwiki#vars#get_syntaxlocal('rxBold').'/ contains=VimwikiBoldChar,@Spell' -execute 'syntax match VimwikiBoldT /'.vimwiki#vars#get_syntaxlocal('rxBold').'/ contained contains=VimwikiBoldCharT,@Spell' +execute 'syntax match VimwikiItalic /'.vimwiki#vars#get_syntaxlocal('rxItalic'). + \ '/ contains=VimwikiItalicChar,@Spell' +execute 'syntax match VimwikiItalicT /'.vimwiki#vars#get_syntaxlocal('rxItalic'). + \ '/ contained contains=VimwikiItalicCharT,@Spell' -execute 'syntax match VimwikiItalic /'.vimwiki#vars#get_syntaxlocal('rxItalic').'/ contains=VimwikiItalicChar,@Spell' -execute 'syntax match VimwikiItalicT /'.vimwiki#vars#get_syntaxlocal('rxItalic').'/ contained contains=VimwikiItalicCharT,@Spell' +execute 'syntax match VimwikiBoldItalic /'.vimwiki#vars#get_syntaxlocal('rxBoldItalic'). + \ '/ contains=VimwikiBoldItalicChar,VimwikiItalicBoldChar,@Spell' +execute 'syntax match VimwikiBoldItalicT /'.vimwiki#vars#get_syntaxlocal('rxBoldItalic'). + \ '/ contained contains=VimwikiBoldItalicChatT,VimwikiItalicBoldCharT,@Spell' -execute 'syntax match VimwikiBoldItalic /'.vimwiki#vars#get_syntaxlocal('rxBoldItalic').'/ contains=VimwikiBoldItalicChar,VimwikiItalicBoldChar,@Spell' -execute 'syntax match VimwikiBoldItalicT /'.vimwiki#vars#get_syntaxlocal('rxBoldItalic').'/ contained contains=VimwikiBoldItalicChatT,VimwikiItalicBoldCharT,@Spell' +execute 'syntax match VimwikiItalicBold /'.vimwiki#vars#get_syntaxlocal('rxItalicBold'). + \ '/ contains=VimwikiBoldItalicChar,VimwikiItalicBoldChar,@Spell' +execute 'syntax match VimwikiItalicBoldT /'.vimwiki#vars#get_syntaxlocal('rxItalicBold'). + \ '/ contained contains=VimwikiBoldItalicCharT,VimsikiItalicBoldCharT,@Spell' -execute 'syntax match VimwikiItalicBold /'.vimwiki#vars#get_syntaxlocal('rxItalicBold').'/ contains=VimwikiBoldItalicChar,VimwikiItalicBoldChar,@Spell' -execute 'syntax match VimwikiItalicBoldT /'.vimwiki#vars#get_syntaxlocal('rxItalicBold').'/ contained contains=VimwikiBoldItalicCharT,VimsikiItalicBoldCharT,@Spell' +execute 'syntax match VimwikiDelText /'.vimwiki#vars#get_syntaxlocal('rxDelText'). + \ '/ contains=VimwikiDelTextChar,@Spell' +execute 'syntax match VimwikiDelTextT /'.vimwiki#vars#get_syntaxlocal('rxDelText'). + \ '/ contained contains=VimwikiDelTextChar,@Spell' -execute 'syntax match VimwikiDelText /'.vimwiki#vars#get_syntaxlocal('rxDelText').'/ contains=VimwikiDelTextChar,@Spell' -execute 'syntax match VimwikiDelTextT /'.vimwiki#vars#get_syntaxlocal('rxDelText').'/ contained contains=VimwikiDelTextChar,@Spell' +execute 'syntax match VimwikiSuperScript /'.vimwiki#vars#get_syntaxlocal('rxSuperScript'). + \ '/ contains=VimwikiSuperScriptChar,@Spell' +execute 'syntax match VimwikiSuperScriptT /'.vimwiki#vars#get_syntaxlocal('rxSuperScript'). + \ '/ contained contains=VimwikiSuperScriptCharT,@Spell' -execute 'syntax match VimwikiSuperScript /'.vimwiki#vars#get_syntaxlocal('rxSuperScript').'/ contains=VimwikiSuperScriptChar,@Spell' -execute 'syntax match VimwikiSuperScriptT /'.vimwiki#vars#get_syntaxlocal('rxSuperScript').'/ contained contains=VimwikiSuperScriptCharT,@Spell' +execute 'syntax match VimwikiSubScript /'.vimwiki#vars#get_syntaxlocal('rxSubScript'). + \ '/ contains=VimwikiSubScriptChar,@Spell' +execute 'syntax match VimwikiSubScriptT /'.vimwiki#vars#get_syntaxlocal('rxSubScript'). + \ '/ contained contains=VimwikiSubScriptCharT,@Spell' -execute 'syntax match VimwikiSubScript /'.vimwiki#vars#get_syntaxlocal('rxSubScript').'/ contains=VimwikiSubScriptChar,@Spell' -execute 'syntax match VimwikiSubScriptT /'.vimwiki#vars#get_syntaxlocal('rxSubScript').'/ contained contains=VimwikiSubScriptCharT,@Spell' +execute 'syntax match VimwikiCode /'.vimwiki#vars#get_syntaxlocal('rxCode'). + \ '/ contains=VimwikiCodeChar' +execute 'syntax match VimwikiCodeT /'.vimwiki#vars#get_syntaxlocal('rxCode'). + \ '/ contained contains=VimwikiCodeCharT' -execute 'syntax match VimwikiCode /'.vimwiki#vars#get_syntaxlocal('rxCode').'/ contains=VimwikiCodeChar' -execute 'syntax match VimwikiCodeT /'.vimwiki#vars#get_syntaxlocal('rxCode').'/ contained contains=VimwikiCodeCharT' " <hr> horizontal rule execute 'syntax match VimwikiHR /'.vimwiki#vars#get_syntaxlocal('rxHR').'/' @@ -285,11 +330,15 @@ execute 'syntax region VimwikiMath start=/'.vimwiki#vars#get_syntaxlocal('rxMath " placeholders syntax match VimwikiPlaceholder /^\s*%nohtml\s*$/ -syntax match VimwikiPlaceholder /^\s*%title\ze\%(\s.*\)\?$/ nextgroup=VimwikiPlaceholderParam skipwhite -syntax match VimwikiPlaceholder /^\s*%date\ze\%(\s.*\)\?$/ nextgroup=VimwikiPlaceholderParam skipwhite -syntax match VimwikiPlaceholder /^\s*%template\ze\%(\s.*\)\?$/ nextgroup=VimwikiPlaceholderParam skipwhite +syntax match VimwikiPlaceholder + \ /^\s*%title\ze\%(\s.*\)\?$/ nextgroup=VimwikiPlaceholderParam skipwhite +syntax match VimwikiPlaceholder + \ /^\s*%date\ze\%(\s.*\)\?$/ nextgroup=VimwikiPlaceholderParam skipwhite +syntax match VimwikiPlaceholder + \ /^\s*%template\ze\%(\s.*\)\?$/ nextgroup=VimwikiPlaceholderParam skipwhite syntax match VimwikiPlaceholderParam /.*/ contained + " html tags if vimwiki#vars#get_global('valid_html_tags') != '' let s:html_tags = join(split(vimwiki#vars#get_global('valid_html_tags'), '\s*,\s*'), '\|') @@ -298,16 +347,16 @@ if vimwiki#vars#get_global('valid_html_tags') != '' execute 'syntax match VimwikiItalic #\c<i>.\{-}</i># contains=VimwikiHTMLTag' execute 'syntax match VimwikiUnderline #\c<u>.\{-}</u># contains=VimwikiHTMLTag' - execute 'syntax match VimwikiComment /'.vimwiki#vars#get_syntaxlocal('rxComment').'/ contains=@Spell,VimwikiTodo' + execute 'syntax match VimwikiComment /'.vimwiki#vars#get_syntaxlocal('rxComment'). + \ '/ contains=@Spell,VimwikiTodo' endif " tags execute 'syntax match VimwikiTag /'.vimwiki#vars#get_syntaxlocal('rxTags').'/' -" }}} -" header groups highlighting "{{{ +" header groups highlighting if vimwiki#vars#get_global('hl_headers') == 0 " Strangely in default colorscheme Title group is not set to bold for cterm... if !exists("g:colors_name") @@ -323,9 +372,8 @@ else \ .vimwiki#vars#get_global('hcolor_ctermfg_'.&bg)[s:i-1].' term=bold cterm=bold' endfor endif -"}}} -" syntax group highlighting "{{{ + hi def link VimwikiMarkers Normal @@ -407,15 +455,17 @@ hi def link VimwikiCodeCharT VimwikiMarkers hi def link VimwikiHeaderCharT VimwikiMarkers hi def link VimwikiLinkCharT VimwikiLinkT hi def link VimwikiNoExistsLinkCharT VimwikiNoExistsLinkT -"}}} + " Load syntax-specific functionality call vimwiki#u#reload_regexes_custom() + " FIXME it now does not make sense to pretend there is a single syntax "vimwiki" let b:current_syntax="vimwiki" -" EMBEDDED syntax setup "{{{ + +" EMBEDDED syntax setup let s:nested = vimwiki#vars#get_wikilocal('nested_syntaxes') if vimwiki#vars#get_wikilocal('automatic_nested_syntaxes') let s:nested = extend(s:nested, vimwiki#base#detect_nested_syntax(), "keep") @@ -428,12 +478,14 @@ if !empty(s:nested) \ vimwiki#vars#get_syntaxlocal('rxPreEnd'), 'VimwikiPre') endfor endif + + " LaTeX call vimwiki#base#nested_syntax('tex', \ vimwiki#vars#get_syntaxlocal('rxMathStart').'\%(.*[[:blank:][:punct:]]\)\?'. \ '\%([[:blank:][:punct:]].*\)\?', \ vimwiki#vars#get_syntaxlocal('rxMathEnd'), 'VimwikiMath') -"}}} syntax spell toplevel + diff --git a/syntax/vimwiki_default.vim b/syntax/vimwiki_default.vim @@ -1,13 +1,16 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=99 +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 " Vimwiki syntax file -" Desc: Defines default syntax +" Description: Defines default syntax " Home: https://github.com/vimwiki/vimwiki/ + " s:default_syntax is kind of a reference to the dict in " g:vimwiki_syntax_variables['default']. It is used here simply as an " abbreviation for the latter. let s:default_syntax = g:vimwiki_syntax_variables['default'] + + " text: $ equation_inline $ let s:default_syntax.rxEqIn = '\$[^$`]\+\$' let s:default_syntax.char_eqin = '\$' @@ -97,8 +100,11 @@ let s:default_syntax.rxTags = '\%(^\|\s\)\@<=:\%([^:''[:space:]]\+:\)\+\%(\s\|$\ let s:default_syntax.header_search = '^\s*\(=\{1,6}\)\([^=].*[^=]\)\1\s*$' let s:default_syntax.header_match = '^\s*\(=\{1,6}\)=\@!\s*__Header__\s*\1=\@!\s*$' -let s:default_syntax.bold_search = '\%(^\|\s\|[[:punct:]]\)\@<=\*\zs\%([^*`[:space:]][^*`]*[^*`[:space:]]\|[^*`[:space:]]\)\ze\*\%([[:punct:]]\|\s\|$\)\@=' -let s:default_syntax.bold_match = '\%(^\|\s\|[[:punct:]]\)\@<=\*__Text__\*\%([[:punct:]]\|\s\|$\)\@=' +let s:default_syntax.bold_search = '\%(^\|\s\|[[:punct:]]\)\@<=\*\zs\%([^*`[:space:]][^*`]*'. + \ '[^*`[:space:]]\|[^*`[:space:]]\)\ze\*\%([[:punct:]]\|\s\|$\)\@=' +let s:default_syntax.bold_match = '\%(^\|\s\|[[:punct:]]\)\@<=\*__Text__\*'. + \ '\%([[:punct:]]\|\s\|$\)\@=' let s:default_syntax.wikilink = '\[\[\zs[^\\\]|]\+\ze\%(|[^\\\]]\+\)\?\]\]' let s:default_syntax.tag_search = '\(^\|\s\)\zs:\([^:''[:space:]]\+:\)\+\ze\(\s\|$\)' -let s:default_syntax.tag_match = '\(^\|\s\):\([^:''[:space:]]\+:\)*__Tag__:\([^:[:space:]]\+:\)*\(\s\|$\)' +let s:default_syntax.tag_match = '\(^\|\s\):\([^:''[:space:]]\+:\)*__Tag__:'. + \ '\([^:[:space:]]\+:\)*\(\s\|$\)' diff --git a/syntax/vimwiki_markdown.vim b/syntax/vimwiki_markdown.vim @@ -1,10 +1,12 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=99 +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 " Vimwiki syntax file -" Desc: Defines markdown syntax +" Description: Defines markdown syntax " Home: https://github.com/vimwiki/vimwiki/ + " see the comments in vimwiki_default.vim for some info about this file + let s:markdown_syntax = g:vimwiki_syntax_variables['markdown'] " text: $ equation_inline $ @@ -92,8 +94,11 @@ let s:markdown_syntax.rxTags = '\%(^\|\s\)\@<=:\%([^:[:space:]]\+:\)\+\%(\s\|$\) let s:markdown_syntax.header_search = '^\s*\(#\{1,6}\)\([^#].*\)$' let s:markdown_syntax.header_match = '^\s*\(#\{1,6}\)#\@!\s*__Header__\s*$' -let s:markdown_syntax.bold_search = '\%(^\|\s\|[[:punct:]]\)\@<=\*\zs\%([^*`[:space:]][^*`]*[^*`[:space:]]\|[^*`[:space:]]\)\ze\*\%([[:punct:]]\|\s\|$\)\@=' -let s:markdown_syntax.bold_match = '\%(^\|\s\|[[:punct:]]\)\@<=\*__Text__\*\%([[:punct:]]\|\s\|$\)\@=' -let s:markdown_syntax.wikilink = '\[\[\zs[^\\\]|]\+\ze\%(|[^\\\]]\+\)\?\]\]' "XXX plus markdown-style links +let s:markdown_syntax.bold_search = '\%(^\|\s\|[[:punct:]]\)\@<=\*\zs'. + \ '\%([^*`[:space:]][^*`]*[^*`[:space:]]\|[^*`[:space:]]\)\ze\*\%([[:punct:]]\|\s\|$\)\@=' +let s:markdown_syntax.bold_match = '\%(^\|\s\|[[:punct:]]\)\@<=\*__Text__\*'. + \ '\%([[:punct:]]\|\s\|$\)\@=' +let s:markdown_syntax.wikilink = '\[\[\zs[^\\\]|]\+\ze\%(|[^\\\]]\+\)\?\]\]' let s:markdown_syntax.tag_search = '\(^\|\s\)\zs:\([^:''[:space:]]\+:\)\+\ze\(\s\|$\)' -let s:markdown_syntax.tag_match = '\(^\|\s\):\([^:''[:space:]]\+:\)*__Tag__:\([^:[:space:]]\+:\)*\(\s\|$\)' +let s:markdown_syntax.tag_match = '\(^\|\s\):\([^:''[:space:]]\+:\)*__Tag__:'. + \ '\([^:[:space:]]\+:\)*\(\s\|$\)' diff --git a/syntax/vimwiki_markdown_custom.vim b/syntax/vimwiki_markdown_custom.vim @@ -4,41 +4,44 @@ - -" LINKS: highlighting is complicated due to "nonexistent" links feature {{{ -function! s:add_target_syntax_ON(target, type) " {{{ +function! s:add_target_syntax_ON(target, type) 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 "}}} +endfunction + -function! s:add_target_syntax_OFF(target, type) " {{{ +function! s:add_target_syntax_OFF(target, type) 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 "}}} +endfunction + -function! s:wrap_wikilink1_rx(target) "{{{ +function! s:wrap_wikilink1_rx(target) return vimwiki#vars#get_syntaxlocal('rxWikiLink1InvalidPrefix') . a:target. \ vimwiki#vars#get_syntaxlocal('rxWikiLink1InvalidSuffix') -endfunction "}}} +endfunction -function! s:existing_mkd_refs() "{{{ + +function! s:existing_mkd_refs() return keys(vimwiki#markdown_base#scan_reflinks()) -endfunction "}}} +endfunction + -function! s:highlight_existing_links() "{{{ +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(vimwiki#vars#get_bufferlocal('existing_wikifiles')) . + let safe_links = '\%('. + \ vimwiki#base#file_pattern(vimwiki#vars#get_bufferlocal('existing_wikifiles')) . \ '\%(#[^|]*\)\?\|#[^|]*\)' " Wikilink1 Dirs set up upon BufEnter (see plugin/...) let safe_dirs = vimwiki#base#file_pattern(vimwiki#vars#get_bufferlocal('existing_wikidirs')) @@ -78,7 +81,7 @@ function! s:highlight_existing_links() "{{{ \ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template2')), \ safe_reflinks, vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '') call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1') -endfunction "}}} +endfunction " use max highlighting - could be quite slow if there are too many wikifiles @@ -93,9 +96,11 @@ else call s:add_target_syntax_ON(vimwiki#vars#get_syntaxlocal('rxWikiLink1'), 'VimwikiWikiLink1') endif + " Weblink call s:add_target_syntax_ON(vimwiki#vars#get_syntaxlocal('rxWeblink1'), 'VimwikiWeblink1') + " WikiLink " All remaining schemes are highlighted automatically let s:rxSchemes = '\%('. @@ -106,26 +111,28 @@ let s:rxSchemes = '\%('. " a) match [nonwiki-scheme-URL] let s:target = vimwiki#base#apply_template( \ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template1')), - \ s:rxSchemes . vimwiki#vars#get_syntaxlocal('rxWikiLink1Url'), vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '') + \ s:rxSchemes . vimwiki#vars#get_syntaxlocal('rxWikiLink1Url'), + \ vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '') call s:add_target_syntax_ON(s:wrap_wikilink1_rx(s:target), 'VimwikiWikiLink1') " b) match [DESCRIPTION][nonwiki-scheme-URL] let s:target = vimwiki#base#apply_template( \ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template2')), - \ s:rxSchemes . vimwiki#vars#get_syntaxlocal('rxWikiLink1Url'), vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '') + \ s:rxSchemes . vimwiki#vars#get_syntaxlocal('rxWikiLink1Url'), + \ vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '') call s:add_target_syntax_ON(s:wrap_wikilink1_rx(s:target), 'VimwikiWikiLink1') -" }}} -" generic headers "{{{ " Header levels, 1-6 for s:i in range(1,6) - execute 'syntax match VimwikiHeader'.s:i.' /'.vimwiki#vars#get_syntaxlocal('rxH'.s:i).'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiCode,VimwikiLink,VimwikiWeblink1,VimwikiWikiLink1,@Spell' + execute 'syntax match VimwikiHeader'.s:i.' /'.vimwiki#vars#get_syntaxlocal('rxH'.s:i). + \ '/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiCode,'. + \ 'VimwikiLink,VimwikiWeblink1,VimwikiWikiLink1,@Spell' endfor -" }}} -" concealed chars " {{{ + +" concealed chars if exists("+conceallevel") syntax conceal on endif @@ -136,24 +143,26 @@ syntax spell toplevel " is present) and may be concealed let s:options = ' contained transparent contains=NONE' " conceal wikilink1 -execute 'syn match VimwikiWikiLink1Char /'.vimwiki#vars#get_syntaxlocal('rx_wikilink_md_prefix').'/'.s:options -execute 'syn match VimwikiWikiLink1Char /'.vimwiki#vars#get_syntaxlocal('rx_wikilink_md_suffix').'/'.s:options -execute 'syn match VimwikiWikiLink1Char /'.vimwiki#vars#get_syntaxlocal('rxWikiLink1Prefix1').'/'.s:options -execute 'syn match VimwikiWikiLink1Char /'.vimwiki#vars#get_syntaxlocal('rxWikiLink1Suffix1').'/'.s:options +execute 'syn match VimwikiWikiLink1Char /'. + \ vimwiki#vars#get_syntaxlocal('rx_wikilink_md_prefix').'/'.s:options +execute 'syn match VimwikiWikiLink1Char /'. + \ vimwiki#vars#get_syntaxlocal('rx_wikilink_md_suffix').'/'.s:options +execute 'syn match VimwikiWikiLink1Char /'. + \ vimwiki#vars#get_syntaxlocal('rxWikiLink1Prefix1').'/'.s:options +execute 'syn match VimwikiWikiLink1Char /'. + \ vimwiki#vars#get_syntaxlocal('rxWikiLink1Suffix1').'/'.s:options " conceal weblink1 -execute 'syn match VimwikiWeblink1Char "'.vimwiki#vars#get_syntaxlocal('rxWeblink1Prefix1').'"'.s:options -execute 'syn match VimwikiWeblink1Char "'.vimwiki#vars#get_syntaxlocal('rxWeblink1Suffix1').'"'.s:options +execute 'syn match VimwikiWeblink1Char "'. + \ vimwiki#vars#get_syntaxlocal('rxWeblink1Prefix1').'"'.s:options +execute 'syn match VimwikiWeblink1Char "'. + \ vimwiki#vars#get_syntaxlocal('rxWeblink1Suffix1').'"'.s:options if exists("+conceallevel") syntax conceal off endif -" }}} -" non concealed chars " {{{ -" }}} -" main syntax groups {{{ " Tables syntax match VimwikiTableRow /^\s*|.\+|\s*$/ @@ -175,22 +184,12 @@ syntax match VimwikiTableRow /^\s*|.\+|\s*$/ \ VimwikiEqInT, \ @Spell -" }}} - -" header groups highlighting "{{{ -"}}} -" syntax group 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 "{{{ -"}}} -" diff --git a/syntax/vimwiki_media.vim b/syntax/vimwiki_media.vim @@ -1,10 +1,12 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=99 +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 " Vimwiki syntax file -" Desc: Defines mediaWiki syntax +" Description: Defines mediaWiki syntax " Home: https://github.com/vimwiki/vimwiki/ + " see the comments in vimwiki_default.vim for some info about this file + let s:media_syntax = g:vimwiki_syntax_variables['media'] " text: $ equation_inline $ @@ -78,5 +80,6 @@ let s:media_syntax.bold_match = '''''''__Text__''''''' " ^- this strange looking thing is equivalent to "'''__Text__'''" but since we later " want to call escape() on this string, we must keep it in single quotes let s:media_syntax.wikilink = '\[\[\zs[^\\\]|]\+\ze\%(|[^\\\]]\+\)\?\]\]' -let s:media_syntax.tag_search = '\(^\|\s\)\zs:\([^:''[:space:]]\+:\)\+\ze\(\s\|$\)' " XXX rework to mediawiki categories format? -let s:media_syntax.tag_match = '\(^\|\s\):\([^:''[:space:]]\+:\)*__Tag__:\([^:[:space:]]\+:\)*\(\s\|$\)' " XXX rework to mediawiki categories format? +let s:media_syntax.tag_search = '\(^\|\s\)\zs:\([^:''[:space:]]\+:\)\+\ze\(\s\|$\)' +let s:media_syntax.tag_match = '\(^\|\s\):\([^:''[:space:]]\+:\)*__Tag__:'. + \ '\([^:[:space:]]\+:\)*\(\s\|$\)'