Doc: Indent Docstring inside function

This commit is contained in:
Tinmarino
2021-01-03 20:07:18 -03:00
parent ffc4e41208
commit 29fa4b028b
15 changed files with 518 additions and 508 deletions
+162 -161
View File
@@ -15,15 +15,15 @@ let g:loaded_vimwiki_auto = 1
let g:vimwiki_max_scan_for_caption = 5
" Substitute regexp but do not interpret replace
function! s:safesubstitute(text, search, replace, mode) abort
" Substitute regexp but do not interpret replace
let escaped = escape(a:replace, '\&')
return substitute(a:text, a:search, escaped, a:mode)
endfunction
" Get all vimwiki known syntaxes
function! s:vimwiki_get_known_syntaxes() abort
" Get all vimwiki known syntaxes
" Getting all syntaxes that different wikis could have
let syntaxes = {}
let syntaxes['default'] = 1
@@ -39,8 +39,8 @@ function! s:vimwiki_get_known_syntaxes() abort
endfunction
" Get search regex from glob()
function! vimwiki#base#file_pattern(files) abort
" 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, ...).
@@ -50,9 +50,9 @@ function! vimwiki#base#file_pattern(files) abort
endfunction
" TODO move in path
" FIXME TODO slow and faulty
function! vimwiki#base#subdir(path, filename) abort
" TODO move in path
" FIXME TODO slow and faulty
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?
@@ -76,22 +76,22 @@ function! vimwiki#base#subdir(path, filename) abort
endfunction
" TODO move in path
function! vimwiki#base#current_subdir() abort
" TODO move in path
return vimwiki#base#subdir(vimwiki#vars#get_wikilocal('path'), expand('%:p'))
endfunction
" TODO move in path
function! vimwiki#base#invsubdir(subdir) abort
" TODO move in path
return substitute(a:subdir, '[^/\.]\+/', '../', 'g')
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) abort
" 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
let bestmatch = -1
let bestlen = 0
let path = vimwiki#path#path_norm(vimwiki#path#chomp_slash(a:path))
@@ -111,18 +111,18 @@ function! vimwiki#base#find_wiki(path) abort
endfunction
" Check if a link is a well formed wiki link (Helper)
function! s:is_wiki_link(link_infos) abort
" Check if a link is a well formed wiki link (Helper)
return a:link_infos.scheme =~# '\mwiki\d\+' || a:link_infos.scheme ==# 'diary'
endfunction
" Extract infos about the target from a link.
" THE central function of Vimwiki.
" 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, ...) abort
" Extract infos about the target from a link.
" THE central function of Vimwiki.
" 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.
if a:0
let source_wiki = vimwiki#base#find_wiki(a:1)
let source_file = a:1
@@ -278,8 +278,8 @@ function! vimwiki#base#resolve_link(link_text, ...) abort
endfunction
" Open Link with OS handler (like gx)
function! vimwiki#base#system_open_link(url) abort
" Open Link with OS handler (like gx)
" handlers
function! s:win32_handler(url) abort
"Disable shellslash for cmd and command.com, but enable for all other shells
@@ -332,8 +332,8 @@ function! vimwiki#base#system_open_link(url) abort
endfunction
" Open link with Vim (like :e)
function! vimwiki#base#open_link(cmd, link, ...) abort
" Open link with Vim (like :e)
let link_infos = {}
if a:0
let link_infos = vimwiki#base#resolve_link(a:link, a:1)
@@ -375,9 +375,9 @@ function! vimwiki#base#open_link(cmd, link, ...) abort
endfunction
" Escape global link
" Called by command completion
function! vimwiki#base#get_globlinks_escaped(...) abort
" Escape global link
" Called by command completion
let s_arg_lead = a:0 > 0 ? a:1 : ''
" only get links from the current dir
" change to the directory of the current file
@@ -402,11 +402,11 @@ function! vimwiki#base#get_globlinks_escaped(...) abort
endfunction
" Generate wikilinks in current file
" Called: by command VimwikiGenerateLinks (Exported)
" Param: create: <Bool> Create links or not
" Param: Optional pattern <String>
function! vimwiki#base#generate_links(create, ...) abort
" Generate: wikilinks in current file
" Called: by command VimwikiGenerateLinks (Exported)
" Param: create: <Bool> Create links or not
" Param: Optional pattern <String>
" Get pattern if present
" Globlal to script to be passed to closure
if a:0
@@ -464,9 +464,9 @@ function! vimwiki#base#generate_links(create, ...) abort
endfunction
" Jump to other wikifile, specified on command mode
" Called: by command VimwikiGoto (Exported)
function! vimwiki#base#goto(...) abort
" Jump: to other wikifile, specified on command mode
" Called: by command VimwikiGoto (Exported)
let key = a:0 > 0 ? a:1 : input('Enter name: ', '',
\ 'customlist,vimwiki#base#complete_links_escaped')
@@ -483,9 +483,9 @@ function! vimwiki#base#goto(...) abort
endfunction
" Jump to previous file (backspace key)
" Called: by VimwikiBacklinks (Exported)
function! vimwiki#base#backlinks() abort
" Jump: to previous file (backspace key)
" Called: by VimwikiBacklinks (Exported)
let current_filename = expand('%:p')
let locations = []
for idx in range(vimwiki#vars#number_of_wikis())
@@ -517,11 +517,11 @@ function! vimwiki#base#backlinks() abort
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
" If the second argument is not zero, only directories are found
" If third argument: pattern to search for
function! vimwiki#base#find_files(wiki_nr, directories_only, ...) abort
" 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
" If the second argument is not zero, only directories are found
" If third argument: pattern to search for
let wiki_nr = a:wiki_nr
if wiki_nr >= 0
let root_directory = vimwiki#vars#get_wikilocal('path', wiki_nr)
@@ -558,12 +558,12 @@ function! vimwiki#base#find_files(wiki_nr, directories_only, ...) abort
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.
" If also_absolute_links is nonzero, also return links of the form /file
" If pattern is not '', only filepaths matching pattern will be considered
function! vimwiki#base#get_wikilinks(wiki_nr, also_absolute_links, pattern) abort
" 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.
" If also_absolute_links is nonzero, also return links of the form /file
" If pattern is not '', only filepaths matching pattern will be considered
let files = vimwiki#base#find_files(a:wiki_nr, 0, a:pattern)
if a:wiki_nr == vimwiki#vars#get_bufferlocal('wiki_nr')
let cwd = vimwiki#path#wikify_path(expand('%:p:h'))
@@ -594,8 +594,8 @@ function! vimwiki#base#get_wikilinks(wiki_nr, also_absolute_links, pattern) abor
endfunction
" Returns: a list containing the links to all directories from the current file
function! vimwiki#base#get_wiki_directories(wiki_nr) abort
" Returns: a list containing the links to all directories from the current file
let dirs = vimwiki#base#find_files(a:wiki_nr, 1)
if a:wiki_nr == vimwiki#vars#get_bufferlocal('wiki_nr')
let cwd = vimwiki#path#wikify_path(expand('%:p:h'))
@@ -616,9 +616,9 @@ function! vimwiki#base#get_wiki_directories(wiki_nr) abort
endfunction
" Parse file. Returns list of all anchors
" Called: vimwiki#base#check_links() for all wiki files
function! vimwiki#base#get_anchors(filename, syntax) abort
" Parse file. Returns list of all anchors
" Called: vimwiki#base#check_links() for all wiki files
" Clause: if not readable
if !filereadable(a:filename)
return []
@@ -697,12 +697,12 @@ function! vimwiki#base#get_anchors(filename, syntax) abort
endfunction
" :param: anchor <string> <= Heading line
" :param: (1) previous_anchors <dic[IN/OUT]> of previous normalized anchor
" -- to know if must append -2, updated on the fly
" Return: anchor <string> => link in TOC
" Called: vimwiki#base#table_of_contents
function! vimwiki#base#normalize_anchor(anchor, ...) abort
" Convert: anchor <string> => link in TOC
" Called: vimwiki#base#table_of_contents
" :param: anchor <string> <= Heading line
" :param: (1) previous_anchors <dic[IN/OUT]> of previous normalized anchor
" -- to know if must append -2, updated on the fly
" A Trim space
let anchor = vimwiki#u#trim(a:anchor)
@@ -744,12 +744,12 @@ function! vimwiki#base#normalize_anchor(anchor, ...) abort
endfunction
" :param: anchor <string> <= link
" Return: [anchor_re <regex>, anchor_nb <number>, suffix_re <regex>] to look for
" -- with or without suffix
" -- Ex: ['toto", 2] => search for the second occurrence of toto
" Called: jump_to_anchor
function! vimwiki#base#unnormalize_anchor(anchor) abort
" Convert: s_anchor_toc [anchor_re <regex>, anchor_nb <number>, suffix_re <regex>] to look for
" Called: jump_to_anchor
" :param: anchor <string> <= link
" -- with or without suffix
" -- Ex: ['toto", 2] => search for the second occurrence of toto
" Note:
" -- Pandoc keep the '_' in anchor
" -- Done after: Add spaces leading and trailing => Later with the template
@@ -821,9 +821,9 @@ function! vimwiki#base#unnormalize_anchor(anchor) abort
endfunction
" Jump to anchor, doing the oposite of normalize_anchor
" Called: edit_file
function! s:jump_to_anchor(anchor) abort
" Jump: to anchor, doing the oposite of normalize_anchor
" Called: edit_file
" Get segments <= anchor
let anchor = vimwiki#u#escape(a:anchor)
let segments = split(anchor, '#', 0)
@@ -844,8 +844,8 @@ function! s:jump_to_anchor(anchor) abort
endfunction
" Called: jump_to_anchor with suffix and withtou suffix
function! s:jump_to_segment(segment, segment_norm_re, segment_nb) abort
" Called: jump_to_anchor with suffix and withtou suffix
" Save cursor %% Initialize at top of line
let oldpos = getpos('.')
call cursor(1, 1)
@@ -914,11 +914,11 @@ function! s:jump_to_segment(segment, segment_norm_re, segment_nb) abort
endfunction
" Returns: a list of all links inside the wiki file
" Params: full path to a wiki file and its wiki number
" 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) abort
" Get: a list of all links inside the wiki file
" Params: full path to a wiki file and its wiki number
" Every list item has the form
" [target file, anchor, line number of the link in source file, column number]
if !filereadable(a:wikifile)
return []
endif
@@ -955,8 +955,8 @@ function! s:get_links(wikifile, idx) abort
endfunction
" Check if all wikilinks are reachable. Answer in quickfix
function! vimwiki#base#check_links(range, line1, line2) abort
" Check: if all wikilinks are reachable. Answer in quickfix
if a:range == 0
let wiki_list = [vimwiki#vars#get_bufferlocal('wiki_nr')]
elseif a:range == 1
@@ -1068,13 +1068,13 @@ function! vimwiki#base#check_links(range, line1, line2) abort
endfunction
" Open file (like :e)
" :param: command <string>: ':e'
" :param: filename <strign> vimwiki#vars#get_wikilocal('path') . key . vimwiki#vars#get_wikilocal('ext')
" :param: anchor
" :param: (1) vimwiki_prev_link
" :param: (2) vimwiki#u#ft_is_vw()
function! vimwiki#base#edit_file(command, filename, anchor, ...) abort
" Edit File: (like :e)
" :param: command <string>: ':e'
" :param: filename <strign> vimwiki#vars#get_wikilocal('path') . key . vimwiki#vars#get_wikilocal('ext')
" :param: anchor
" :param: (1) vimwiki_prev_link
" :param: (2) vimwiki#u#ft_is_vw()
let fname = escape(a:filename, '% *|#`')
let dir = fnamemodify(a:filename, ':p:h')
@@ -1120,9 +1120,9 @@ function! vimwiki#base#edit_file(command, filename, anchor, ...) abort
endfunction
" Search for a 1. Pattern (usually a link) with 2. flags
" Called by find_prev_link
function! vimwiki#base#search_word(wikiRX, flags) abort
" Search for a 1. Pattern (usually a link) with 2. flags
" Called by find_prev_link
let match_line = search(a:wikiRX, 's'.a:flags)
if match_line == 0
call vimwiki#u#echo('Wiki link not found')
@@ -1130,8 +1130,8 @@ function! vimwiki#base#search_word(wikiRX, flags) abort
endfunction
" Return: part of the line that matches wikiRX at cursor
function! vimwiki#base#matchstr_at_cursor(wikiRX) abort
" Return: part of the line that matches wikiRX at cursor
let col = col('.') - 1
let line = getline('.')
let ebeg = -1
@@ -1154,8 +1154,8 @@ function! vimwiki#base#matchstr_at_cursor(wikiRX) abort
endfunction
" Replace next 1. wikiRX by 2. sub
function! vimwiki#base#replacestr_at_cursor(wikiRX, sub) abort
" Replace next 1. wikiRX by 2. sub
" Gather: cursor info
let col = col('.') - 1
let line = getline('.')
@@ -1183,9 +1183,9 @@ function! vimwiki#base#replacestr_at_cursor(wikiRX, sub) abort
endfunction
" Print list of global wiki to user
" Called: by ui_select
function! s:print_wiki_list() abort
" Print list of global wiki to user
" Called: by ui_select
" Find the max name length for prettier formatting
let max_len = 0
for idx in range(vimwiki#vars#number_of_wikis())
@@ -1219,11 +1219,11 @@ function! s:print_wiki_list() abort
endfunction
" Update link in fname.ext
" Param: fname: the source file where to change links
" Param: old: url regex of old path relative to wiki root
" Param: new: url string of new path
function! s:update_wiki_link(fname, old, new) abort
" Update link in fname.ext
" Param: fname: the source file where to change links
" Param: old: url regex of old path relative to wiki root
" Param: new: url string of new path
call vimwiki#u#echo('Updating links in '.a:fname)
let has_updates = 0
let dest = []
@@ -1243,11 +1243,11 @@ function! s:update_wiki_link(fname, old, new) abort
endfunction
" Update link for all files in dir
" Param: old_url, new_url: path of the old, new url relative to ...
" Param: dir: directory of the files, relative to wiki_root
" Called: rename_link
function! s:update_wiki_links(wiki_nr, dir, old_url, new_url) abort
" Update link for all files in dir
" Param: old_url, new_url: path of the old, new url relative to ...
" Param: dir: directory of the files, relative to wiki_root
" Called: rename_link
" Get list of wiki files
let wiki_root = vimwiki#vars#get_wikilocal('path', a:wiki_nr)
let fsources = vimwiki#base#find_files(a:wiki_nr, 0)
@@ -1312,9 +1312,9 @@ function! s:update_wiki_links(wiki_nr, dir, old_url, new_url) abort
endfunction
" Get tail of filename
" TODO move me in path.vim
function! s:tail_name(fname) abort
" Get tail of filename
" TODO move me in path.vim
let result = substitute(a:fname, ':', '__colon__', 'g')
let result = fnamemodify(result, ':t:r')
let result = substitute(result, '__colon__', ':', 'g')
@@ -1322,9 +1322,9 @@ function! s:tail_name(fname) abort
endfunction
" Get list of currently open buffer that are wiki files
" Called: by rename_link
function! s:get_wiki_buffers() abort
" Get list of currently open buffer that are wiki files
" Called: by rename_link
let blist = []
let bcount = 1
while bcount<=bufnr('$')
@@ -1343,9 +1343,9 @@ function! s:get_wiki_buffers() abort
endfunction
" Edit wiki file.
" Called: by rename_link: Usefull for buffer commands
function! s:open_wiki_buffer(item) abort
" Edit wiki file.
" Called: by rename_link: Usefull for buffer commands
call vimwiki#base#edit_file(':e', a:item[0], '')
if !empty(a:item[1])
call vimwiki#vars#set_bufferlocal('prev_links', a:item[1], a:item[0])
@@ -1353,10 +1353,10 @@ function! s:open_wiki_buffer(item) abort
endfunction
" Helper nested syntax
" Called: by syntax/vimwiki (exported)
" TODO move me out of base
function! vimwiki#base#nested_syntax(filetype, start, end, textSnipHl) abort
" Helper nested syntax
" Called: by syntax/vimwiki (exported)
" TODO move me out of base
" From http://vim.wikia.com/wiki/VimTip857
let ft=toupper(a:filetype)
let group='textGroup'.ft
@@ -1420,17 +1420,18 @@ function! vimwiki#base#nested_syntax(filetype, start, end, textSnipHl) abort
endfunction
" Create or update auto-generated listings in a wiki file, like TOC, diary
" links, tags list etc.
" - the listing consists of a header and a list of strings provided by a funcref
" - a:content_regex is used to determine how long a potentially existing list is
" - a:default_lnum is the line number where the new listing should be placed if
" it's not already present
" - if a:create is true, it will be created if it doesn't exist, otherwise it
" will only be updated if it already exists
" Called: by functions adding listing to buffer (this is an util function)
function! vimwiki#base#update_listing_in_buffer(Generator, start_header,
\ content_regex, default_lnum, header_level, create) abort
" Create: or update auto-generated listings in a wiki file, like TOC, diary
" links, tags list etc.
" - the listing consists of a header and a list of strings provided by a funcref
" - a:content_regex is used to determine how long a potentially existing list is
" - a:default_lnum is the line number where the new listing should be placed if
" it's not already present
" - if a:create is true, it will be created if it doesn't exist, otherwise it
" will only be updated if it already exists
" Called: by functions adding listing to buffer (this is an util function)
" Clause: Vim behaves strangely when files change while in diff mode
if &diff || &readonly
return
@@ -1545,22 +1546,22 @@ function! vimwiki#base#update_listing_in_buffer(Generator, start_header,
endfunction
" Find next task (Exported)
function! vimwiki#base#find_next_task() abort
" Find next task (Exported)
let taskRegex = vimwiki#vars#get_wikilocal('rxListItemWithoutCB')
\ . '\+\(\[ \]\s\+\)\zs'
call vimwiki#base#search_word(taskRegex, '')
endfunction
" Find next link (Exported)
function! vimwiki#base#find_next_link() abort
" Find next link (Exported)
call vimwiki#base#search_word(vimwiki#vars#get_syntaxlocal('rxAnyLink'), '')
endfunction
" Find previous link (Exported)
function! vimwiki#base#find_prev_link() abort
" Find previous link (Exported)
"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.*'
@@ -1570,8 +1571,8 @@ function! vimwiki#base#find_prev_link() abort
endfunction
" Jump to link target (Enter press, Exported)
function! vimwiki#base#follow_link(split, ...) abort
" Jump to link target (Enter press, Exported)
let reuse_other_split_window = a:0 >= 1 ? a:1 : 0
let move_cursor_to_new_window = a:0 >= 2 ? a:2 : 1
@@ -1661,8 +1662,8 @@ function! vimwiki#base#follow_link(split, ...) abort
endfunction
" Jump to previous link (Backspace press, Exported)
function! vimwiki#base#go_back_link() abort
" Jump to previous link (Backspace press, Exported)
" Try pop previous link from buffer list
let prev_links = vimwiki#vars#get_bufferlocal('prev_links')
if !empty(prev_links)
@@ -1684,8 +1685,8 @@ function! vimwiki#base#go_back_link() abort
endfunction
" Goto index file of wiki specified by index
function! vimwiki#base#goto_index(wnum, ...) abort
" Goto index file of wiki specified by index
" if wnum = 0 the current wiki is used
if a:wnum == 0
let idx = vimwiki#vars#get_bufferlocal('wiki_nr')
@@ -1721,8 +1722,8 @@ function! vimwiki#base#goto_index(wnum, ...) abort
endfunction
" Delete current wiki file
function! vimwiki#base#delete_link() abort
" Delete current wiki file
" Delete wiki file you are in from filesystem
let val = input('Delete "'.expand('%').'" [y]es/[N]o? ')
if val !~? '^y'
@@ -1746,10 +1747,10 @@ function! vimwiki#base#delete_link() abort
endfunction
" Ask user for a new filepath
" Returns: '' if fails
" Called: rename_link
function! s:input_rename_link() abort
" Ask user for a new filepath
" Returns: '' if fails
" Called: rename_link
" Ask confirmation
let val = input('Rename "'.expand('%:t:r').'" [y]es/[N]o? ')
if val !~? '^y'
@@ -1779,10 +1780,10 @@ function! s:input_rename_link() abort
endfunction
" Rename current file, update all links to it
" Param: [new_filepath <string>]
" Exported: VimwikiRenameFile
function! vimwiki#base#rename_link(...) abort
" Rename current file, update all links to it
" Param: [new_filepath <string>]
" Exported: VimwikiRenameFile
" Get filename and dir relative to wiki root
let subdir = vimwiki#vars#get_bufferlocal('subdir')
" Get old file directory relative to current path
@@ -1902,9 +1903,9 @@ function! vimwiki#base#rename_link(...) abort
endfunction
" Spawn User Interface to select wiki project
" Called by VimwikiUISelect (Globally Exported)
function! vimwiki#base#ui_select() abort
" Spawn User Interface to select wiki project
" Called by VimwikiUISelect (Globally Exported)
call s:print_wiki_list()
let idx = input('Select Wiki by number and press <Enter> (empty cancels): ')
if idx ==# ''
@@ -1918,8 +1919,8 @@ function! vimwiki#base#ui_select() abort
endfunction
" Jump to next header (Exported for text object)
function! vimwiki#base#TO_header(inner, including_subheaders, count) abort
" Jump to next header (Exported for text object)
let headers = s:collect_headers()
if empty(headers)
return
@@ -1972,8 +1973,8 @@ function! vimwiki#base#TO_header(inner, including_subheaders, count) abort
endfunction
" Jump to next table cell (Exported for text object)
function! vimwiki#base#TO_table_cell(inner, visual) abort
" Jump to next table cell (Exported for text object)
if col('.') == col('$')-1
return
endif
@@ -2038,8 +2039,8 @@ function! vimwiki#base#TO_table_cell(inner, visual) abort
endfunction
" Jump to next table col (Exported for text object)
function! vimwiki#base#TO_table_col(inner, visual) abort
" Jump to next table col (Exported for text object)
let t_rows = vimwiki#tbl#get_rows(line('.'))
if empty(t_rows)
return
@@ -2154,8 +2155,8 @@ function! vimwiki#base#TO_table_col(inner, visual) abort
endfunction
" Increase header level (Exported)
function! vimwiki#base#AddHeaderLevel(...) abort
" Increase header level (Exported)
" Clause, argument must be <= 1
" Actually argument is not used :-)
if a:1 > 1
@@ -2188,8 +2189,8 @@ function! vimwiki#base#AddHeaderLevel(...) abort
endfunction
" Decrease header level (Exported)
function! vimwiki#base#RemoveHeaderLevel(...) abort
" Decrease header level (Exported)
" Clause, argument must be <= 1
" Actually argument is not used :-)
if a:1 > 1
@@ -2227,9 +2228,9 @@ function! vimwiki#base#RemoveHeaderLevel(...) abort
endfunction
" Returns: all the headers in the current buffer as a list of the form
" [[line_number, header_level, header_text], [...], [...], ...]
function! s:collect_headers() abort
" Returns: all the headers in the current buffer as a list of the form
" [[line_number, header_level, header_text], [...], [...], ...]
" Init loop variables
let is_inside_pre_or_math = 0 " 1: inside pre, 2: inside math, 0: outside
let headers = []
@@ -2286,9 +2287,9 @@ function! s:collect_headers() abort
endfunction
" Returns: header index at cursor position
" Called: by header cursor movements
function! s:current_header(headers, line_number) abort
" Returns: header index at cursor position
" Called: by header cursor movements
if empty(a:headers)
return -1
endif
@@ -2305,9 +2306,9 @@ function! s:current_header(headers, line_number) abort
endfunction
" Returns: heading with link urls
" Called: table_of_content
function! s:clean_header_text(h_text) abort
" Returns: heading with link urls
" Called: table_of_content
" Note: I hardcode, who cares ?
let h_text = a:h_text
@@ -2321,9 +2322,9 @@ function! s:clean_header_text(h_text) abort
endfunction
" Returns: index of neighbor header
" Called: by header cursor movements
function! s:get_another_header(headers, current_index, direction, operation) abort
" Returns: index of neighbor header
" Called: by header cursor movements
if empty(a:headers) || a:current_index < 0
return -1
endif
@@ -2342,8 +2343,8 @@ function! s:get_another_header(headers, current_index, direction, operation) abo
endfunction
" Jump to parent header
function! vimwiki#base#goto_parent_header() abort
" Jump to parent header
let headers = s:collect_headers()
let current_header_index = s:current_header(headers, line('.'))
let parent_header = s:get_another_header(headers, current_header_index, -1, '<')
@@ -2355,8 +2356,8 @@ function! vimwiki#base#goto_parent_header() abort
endfunction
" Jump to next header
function! vimwiki#base#goto_next_header() abort
" Jump to next header
let headers = s:collect_headers()
let current_header_index = s:current_header(headers, line('.'))
if current_header_index >= 0 && current_header_index < len(headers) - 1
@@ -2369,8 +2370,8 @@ function! vimwiki#base#goto_next_header() abort
endfunction
" Jump to previous header
function! vimwiki#base#goto_prev_header() abort
" Jump to previous header
let headers = s:collect_headers()
let current_header_index = s:current_header(headers, line('.'))
" if the cursor already was on a header, jump to the previous one
@@ -2385,8 +2386,8 @@ function! vimwiki#base#goto_prev_header() abort
endfunction
" Jump to sibling header, next or previous (with same level)
function! vimwiki#base#goto_sibling(direction) abort
" Jump to sibling header, next or previous (with same level)
let headers = s:collect_headers()
let current_header_index = s:current_header(headers, line('.'))
let next_potential_sibling =
@@ -2400,10 +2401,10 @@ function! vimwiki#base#goto_sibling(direction) abort
endfunction
" Create buffer TOC (Exported)
" a:create == 1: creates or updates TOC in current file
" a:create == 0: update if TOC exists
function! vimwiki#base#table_of_contents(create) abort
" Create buffer TOC (Exported)
" a:create == 1: creates or updates TOC in current file
" a:create == 0: update if TOC exists
" Gather heading
let headers = s:collect_headers()
let toc_header_text = vimwiki#vars#get_wikilocal('toc_header')
@@ -2508,13 +2509,13 @@ function! vimwiki#base#table_of_contents(create) abort
endfunction
" Construct a regular expression matching from template (with special
" characters properly escaped), by substituting rxUrl for __LinkUrl__, rxDesc
" for __LinkDescription__, rxStyle for __LinkStyle__ and rxExtension for
" __FileExtension__. The four arguments rxUrl, rxDesc, rxStyle and
" rxExtension are copied verbatim, without any special character escapes or
" substitutions.
function! vimwiki#base#apply_template(template, rxUrl, rxDesc, rxStyle, rxExtension) abort
" Construct a regular expression matching from template (with special
" characters properly escaped), by substituting rxUrl for __LinkUrl__, rxDesc
" for __LinkDescription__, rxStyle for __LinkStyle__ and rxExtension for
" __FileExtension__. The four arguments rxUrl, rxDesc, rxStyle and
" rxExtension are copied verbatim, without any special character escapes or
" substitutions.
let lnk = a:template
if a:rxUrl !=? ''
let lnk = s:safesubstitute(lnk, '__LinkUrl__', a:rxUrl, 'g')
@@ -2532,8 +2533,8 @@ function! vimwiki#base#apply_template(template, rxUrl, rxDesc, rxStyle, rxExtens
endfunction
" Helper: Clean url string
function! s:clean_url(url) abort
" Helper: Clean url string
" don't use an extension as part of the description
let url = substitute(a:url, '\'.vimwiki#vars#get_wikilocal('ext').'$', '', '')
" remove protocol and tld
@@ -2562,10 +2563,10 @@ function! s:clean_url(url) abort
endfunction
" Check if 1.filename is a diary file
" An optional second argument allows you to pass in a list of diary files rather
" than generating a list on each call to the function.
function! vimwiki#base#is_diary_file(filename, ...) abort
" Check if 1.filename is a diary file
" An optional second argument allows you to pass in a list of diary files rather
" than generating a list on each call to the function.
let l:diary_file_paths = a:0 > 0 ? a:1 : vimwiki#diary#get_diary_files()
let l:normalised_file_paths =
\ map(l:diary_file_paths, 'vimwiki#path#normalize(v:val)')
@@ -2577,9 +2578,9 @@ function! vimwiki#base#is_diary_file(filename, ...) abort
endfunction
" Treat link string towards normalization
" [__LinkDescription__](__LinkUrl__.__FileExtension__)
function! vimwiki#base#normalize_link_helper(str, rxUrl, rxDesc, template) abort
" Treat link string towards normalization
" [__LinkDescription__](__LinkUrl__.__FileExtension__)
let url = matchstr(a:str, a:rxUrl)
if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown' && vimwiki#vars#get_wikilocal('markdown_link_ext')
" Strip the extension if it exists so it doesn't get added multiple times
@@ -2600,8 +2601,8 @@ function! vimwiki#base#normalize_link_helper(str, rxUrl, rxDesc, template) abort
endfunction
" Treat imagelink string towards normalization
function! vimwiki#base#normalize_imagelink_helper(str, rxUrl, rxDesc, rxStyle, template) abort
" Treat imagelink string towards normalization
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, '')
@@ -2609,9 +2610,9 @@ function! vimwiki#base#normalize_imagelink_helper(str, rxUrl, rxDesc, rxStyle, t
endfunction
" Normalize link in a diary file
" Refactor: in diary
function! vimwiki#base#normalize_link_in_diary(lnk) abort
" Normalize link in a diary file
" Refactor: in diary
let sc = vimwiki#vars#get_wikilocal('links_space_char')
let link = a:lnk . vimwiki#vars#get_wikilocal('ext')
let link_wiki = substitute(vimwiki#vars#get_wikilocal('path') . '/' . link, '\s', sc, 'g')
@@ -2647,8 +2648,8 @@ function! vimwiki#base#normalize_link_in_diary(lnk) abort
endfunction
" Normalize link in normal mode Enter keypress
function! s:normalize_link_syntax_n() abort
" Normalize link in normal mode Enter keypress
" try WikiLink
let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink'))
if !empty(lnk)
@@ -2696,9 +2697,9 @@ function! s:normalize_link_syntax_n() abort
endfunction
" TODO mutualize most code with syntax_n
" Normalize link in visual mode Enter keypress
function! s:normalize_link_syntax_v() abort
" TODO mutualize most code with syntax_n
" Normalize link in visual mode Enter keypress
" Get selection content
let visual_selection = vimwiki#u#get_selection()
@@ -2728,8 +2729,8 @@ function! s:normalize_link_syntax_v() abort
endfunction
" Normalize link (Implemented as a switch function)
function! vimwiki#base#normalize_link(is_visual_mode) abort
" Normalize link (Implemented as a switch function)
" If visual mode
if a:is_visual_mode
return s:normalize_link_syntax_v()
@@ -2745,9 +2746,9 @@ function! vimwiki#base#normalize_link(is_visual_mode) abort
endfunction
" Get nested syntax are present
" Return: dictionary of syntaxes
function! vimwiki#base#detect_nested_syntax() abort
" Get nested syntax are present
" Return: dictionary of syntaxes
let last_word = '\v.*<(\w+)\s*$'
let lines = map(filter(getline(1, '$'), 'v:val =~# "\\%({{{\\|`\\{3,\}\\|\\~\\{3,\}\\)" && v:val =~# last_word'),
\ 'substitute(v:val, last_word, "\\=submatch(1)", "")')
@@ -2759,15 +2760,15 @@ function! vimwiki#base#detect_nested_syntax() abort
endfunction
" Complete escaping globlinks
function! vimwiki#base#complete_links_escaped(ArgLead, CmdLine, CursorPos) abort
" Complete escaping globlinks
return vimwiki#base#get_globlinks_escaped(a:ArgLead)
endfunction
" Complete filename relatie to current file
" Called: rename_link
function! vimwiki#base#complete_file(ArgLead, CmdLine, CursorPos) abort
" Complete filename relatie to current file
" Called: rename_link
" Start from current file
let base_path = expand('%:h')
@@ -2782,9 +2783,9 @@ function! vimwiki#base#complete_file(ArgLead, CmdLine, CursorPos) abort
endfunction
" Read caption
" Called: by generate_links
function! vimwiki#base#read_caption(file) abort
" Read caption
" Called: by generate_links
let rx_header = vimwiki#vars#get_syntaxlocal('rxHeader')
if filereadable(a:file)
@@ -2799,9 +2800,9 @@ function! vimwiki#base#read_caption(file) abort
endfunction
" Search for 1.pattern
" Called by commands VimwikiSearch and VWS
function! vimwiki#base#search(search_pattern) abort
" Search for 1.pattern
" Called by commands VimwikiSearch and VWS
if empty(a:search_pattern)
call vimwiki#u#error('No search pattern given.')
return
@@ -2828,8 +2829,8 @@ function! vimwiki#base#search(search_pattern) abort
endtry
endfunction
" used by function linkify to extract web page <title>
function! s:get_title(match) abort
" used by function linkify to extract web page <title>
" Do not overwrite if g:page_title is already set
" when there are multiple <title> tags, only use the first one
" this is a side effect of the substitute's 'n' flag (count number of
@@ -2853,8 +2854,8 @@ function! s:get_title(match) abort
let g:page_title = l:title
endfunction
" transform the url under the cursor to a wiki link
function! vimwiki#base#linkify() abort
" Transform: the url under the cursor to a wiki link
let g:page_title = ''
" save existing value of @u and delete url under the cursor into @u
+8 -9
View File
@@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
#
# This script converts markdown into html, to be used with vimwiki's
@@ -26,10 +26,10 @@
# internal wiki2html converter.
#
MARKDOWN=markdown
MKD2HTML=mkd2html
# shellcheck disable=SC2034 # FORCE appears unused
FORCE="$1"
SYNTAX="$2"
EXTENSION="$3"
@@ -37,14 +37,16 @@ OUTPUTDIR="$4"
INPUT="$5"
CSSFILE="$6"
FORCEFLAG=
[ $FORCE -eq 0 ] || { FORCEFLAG="-f"; };
[ $SYNTAX = "markdown" ] || { echo "Error: Unsupported syntax"; exit -2; };
[[ "$SYNTAX" == "markdown" ]] || { echo "Error: Unsupported syntax"; exit 2; };
OUTPUT="$OUTPUTDIR"/$(basename "$INPUT" .$EXTENSION).html
OUTPUT="$OUTPUTDIR/$(basename "$INPUT" . "$EXTENSION").html"
# # Method 1:
# FORCEFLAG=
# (( "$FORCE" == 0 )) || { FORCEFLAG="-f"; };
# MARKDOWN=markdown
#
# # markdown [-d] [-T] [-V] [-b url-base] [-C prefix] [-F bitmap] [-f flags] [-o file] [-s text] [-t text] [textfile]
#
# URLBASE=http://example.com
@@ -57,6 +59,3 @@ OUTPUT="$OUTPUTDIR"/$(basename "$INPUT" .$EXTENSION).html
$MKD2HTML -css "$CSSFILE" "$INPUT"
OUTPUTTMP=$(dirname "$INPUT")/$(basename "$INPUT" ."$EXTENSION").html
mv -f "$OUTPUTTMP" "$OUTPUT"
+26 -26
View File
@@ -11,8 +11,8 @@ endif
let g:loaded_vimwiki_diary_auto = 1
" Add zero prefix to a number
function! s:prefix_zero(num) abort
" Add zero prefix to a number
if a:num < 10
return '0'.a:num
endif
@@ -20,23 +20,23 @@ function! s:prefix_zero(num) abort
endfunction
" Return: diary directory path <String>
function! s:diary_path(...) abort
" Return: diary directory path <String>
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
" Return: diary index file path <String>
function! s:diary_index(...) abort
" Return: diary index file path <String>
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: <String> date
function! vimwiki#diary#diary_date_link(...) abort
" Return: <String> date
if a:0
let l:timestamp = a:1
else
@@ -91,8 +91,8 @@ function! vimwiki#diary#diary_date_link(...) abort
endfunction
" Return: <int:index, list:links>
function! s:get_position_links(link) abort
" Return: <int:index, list:links>
let idx = -1
let links = []
if a:link =~# '^\d\{4}-\d\d-\d\d'
@@ -108,14 +108,14 @@ function! s:get_position_links(link) abort
endfunction
" Convert month: number -> name
function! s:get_month_name(month) abort
" Convert month: number -> name
return vimwiki#vars#get_global('diary_months')[str2nr(a:month)]
endfunction
" Get the first header in the file within the first s:vimwiki_max_scan_for_caption lines.
function! s:get_first_header(fl) abort
" Get the first header in the file within the first s:vimwiki_max_scan_for_caption lines.
let header_rx = vimwiki#vars#get_syntaxlocal('rxHeader')
for line in readfile(a:fl, '', g:vimwiki_max_scan_for_caption)
@@ -127,9 +127,9 @@ function! s:get_first_header(fl) abort
endfunction
" Get a list of all headers in a file up to a given level.
" Return: list whose elements are pairs [level, title]
function! s:get_all_headers(fl, maxlevel) abort
" Get a list of all headers in a file up to a given level.
" Return: list whose elements are pairs [level, title]
let headers_rx = {}
for i in range(1, a:maxlevel)
let headers_rx[i] = vimwiki#vars#get_syntaxlocal('rxH'.i.'_Text')
@@ -147,8 +147,8 @@ function! s:get_all_headers(fl, maxlevel) abort
return headers
endfunction
" Count headers with level <= maxlevel in a list of [level, title] pairs.
function! s:count_headers_level_less_equal(headers, maxlevel) abort
" Count headers with level <= maxlevel in a list of [level, title] pairs.
let l:count = 0
for [header_level, _] in a:headers
if header_level <= a:maxlevel
@@ -159,8 +159,8 @@ function! s:count_headers_level_less_equal(headers, maxlevel) abort
endfunction
" Get the minimum level of any header in a list of [level, title] pairs.
function! s:get_min_header_level(headers) abort
" Get the minimum level of any header in a list of [level, title] pairs.
if len(a:headers) == 0
return 0
endif
@@ -172,9 +172,9 @@ function! s:get_min_header_level(headers) abort
endfunction
" Read all cpation in 1. <List>files
" Return: <Dic>: key -> caption
function! s:read_captions(files) abort
" Read all cpation in 1. <List>files
" Return: <Dic>: key -> caption
let result = {}
let caption_level = vimwiki#vars#get_wikilocal('diary_caption_level')
@@ -215,8 +215,8 @@ function! s:read_captions(files) abort
endfunction
" Return: <list> diary file names
function! vimwiki#diary#get_diary_files() abort
" Return: <list> diary file names
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'))
@@ -230,8 +230,8 @@ function! vimwiki#diary#get_diary_files() abort
endfunction
" Return: <dic> nested -> links
function! s:group_links(links) abort
" Return: <dic> nested -> links
let result = {}
let p_year = 0
let p_month = 0
@@ -253,8 +253,8 @@ function! s:group_links(links) abort
endfunction
" Sort list
function! s:sort(lst) abort
" Sort list
if vimwiki#vars#get_wikilocal('diary_sort') ==? 'desc'
return reverse(sort(a:lst))
else
@@ -266,11 +266,11 @@ function! vimwiki#diary#diary_sort(lst) abort
return s:sort(a:lst)
endfunction
" Create note
" The given wiki number a:wnum is 1 for the first wiki, 2 for the second and so on. This is in
" contrast to most other places, where counting starts with 0. When a:wnum is 0, the current wiki
" is used.
function! vimwiki#diary#make_note(wnum, ...) abort
" Create note
" The given wiki number a:wnum is 1 for the first wiki, 2 for the second and so on. This is in
" contrast to most other places, where counting starts with 0. When a:wnum is 0, the current wiki
" is used.
if a:wnum == 0
let wiki_nr = vimwiki#vars#get_bufferlocal('wiki_nr')
if wiki_nr < 0 " this happens when e.g. VimwikiMakeDiaryNote was called outside a wiki buffer
@@ -308,8 +308,8 @@ function! vimwiki#diary#make_note(wnum, ...) abort
endfunction
" Jump to diary index of 1. <Int> wikinumber
function! vimwiki#diary#goto_diary_index(wnum) abort
" Jump to diary index of 1. <Int> wikinumber
" if wnum = 0 the current wiki is used
if a:wnum == 0
let idx = vimwiki#vars#get_bufferlocal('wiki_nr')
@@ -334,8 +334,8 @@ function! vimwiki#diary#goto_diary_index(wnum) abort
endfunction
" Jump to next day
function! vimwiki#diary#goto_next_day() abort
" Jump to next day
let link = ''
let [idx, links] = s:get_position_links(expand('%:t:r'))
@@ -356,8 +356,8 @@ function! vimwiki#diary#goto_next_day() abort
endfunction
" Jump to previous day
function! vimwiki#diary#goto_prev_day() abort
" Jump to previous day
let link = ''
let [idx, links] = s:get_position_links(expand('%:t:r'))
@@ -378,8 +378,8 @@ function! vimwiki#diary#goto_prev_day() abort
endfunction
" Create diary index content
function! vimwiki#diary#generate_diary_section() abort
" Create diary index content
let GeneratorDiary = copy(l:)
function! GeneratorDiary.f() abort
let lines = []
@@ -476,8 +476,8 @@ function! vimwiki#diary#generate_diary_section() abort
endfunction
" Callback function for Calendar.vim
function! vimwiki#diary#calendar_action(day, month, year, week, dir) abort
" Callback function for Calendar.vim
let day = s:prefix_zero(a:day)
let month = s:prefix_zero(a:month)
@@ -499,8 +499,8 @@ function! vimwiki#diary#calendar_action(day, month, year, week, dir) abort
endfunction
" Callback function for Calendar.vim
function! vimwiki#diary#calendar_sign(day, month, year) abort
" Callback function for Calendar.vim
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').
+4 -3
View File
@@ -1759,6 +1759,7 @@ let s:emoji_dic = {}
function! vimwiki#emoji#get_dic() abort
" Get Dic:
if s:emoji_dic == {}
call extend(s:emoji_dic, s:emoji_multiple)
call extend(s:emoji_dic, s:emoji_single)
@@ -1766,17 +1767,17 @@ function! vimwiki#emoji#get_dic() abort
return s:emoji_dic
endfunction
" Conceal
function! vimwiki#emoji#apply_conceal() abort
" Apply Conceal:
for [name, emoji] in items(s:emoji_single)
exe 'syn keyword VimwikiEmoji :' . name . ': conceal cchar=' . emoji
endfor
endfunction
" Junegunn fuzzy hack
let s:max_score = 1000
function! s:score(haystack, needle) abort
" Get Score: Junegunn fuzzy hack
let idx = stridx(a:haystack, a:needle)
if idx < 0 | return idx | endif
if idx == 0 | return s:max_score * 2 | endif
@@ -1785,8 +1786,8 @@ function! s:score(haystack, needle) abort
endfunction
" Complete
function! vimwiki#emoji#complete(findstart, base) abort
" Complete:
" Init full list if must
if s:emojis == []
let s:emojis = map(sort(keys(vimwiki#emoji#get_dic())),
+2 -2
View File
@@ -417,9 +417,9 @@ function! s:tag_code(value) abort
endfunction
" match n-th ARG within {{URL[|ARG1|ARG2|...]}}
" *c,d,e),...
function! s:incl_match_arg(nn_index) abort
" match n-th ARG within {{URL[|ARG1|ARG2|...]}}
" *c,d,e),...
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)
+93 -98
View File
@@ -134,17 +134,17 @@ function! vimwiki#lst#get_list_margin() abort
endfunction
"Returns: the column where the text of a line starts (possible list item
"markers and checkboxes are skipped)
function! s:text_begin(lnum) abort
" Returns: the column where the text of a line starts (possible list item
" markers and checkboxes are skipped)
return s:string_length(matchstr(getline(a:lnum), vimwiki#vars#get_wikilocal('rxListItem')))
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) abort
" 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)
if getline(a:lnum) =~# vimwiki#vars#get_wikilocal('rxListItem').'\s*$'
return 1
elseif getline(a:lnum) =~# vimwiki#vars#get_wikilocal('rxListItem').'\s*\S'
@@ -155,8 +155,8 @@ function! s:line_has_marker(lnum) abort
endfunction
" Remove a list item and it's children (recursive)
function! s:remove_including_children(item) abort
" Remove a list item and it's children (recursive)
let num_removed_lines = 1
let child = s:get_first_child(a:item)
while child.type != 0
@@ -177,13 +177,13 @@ endfunction
" 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
"lnum - the line number of the list item
"type - 1 for bulleted item, 2 for numbered item, 0 for a regular line (default)
"mrkr - the concrete marker, e.g. '**' or 'b)' (default '')
"cb - the char in the checkbox or '' if there is no checkbox
function! s:get_item(lnum) abort
" Returns: the mainly used data structure in this file
" An item represents a single list item and is a dictionary with the keys
" lnum - the line number of the list item
" type - 1 for bulleted item, 2 for numbered item, 0 for a regular line (default)
" mrkr - the concrete marker, e.g. '**' or 'b)' (default '')
" cb - the char in the checkbox or '' if there is no checkbox
" Init default
let item = {'lnum': a:lnum}
let item.type = 0
@@ -220,13 +220,14 @@ endfunction
function! s:empty_item() abort
" Craft: empty item
return {'type': 0}
endfunction
"Returns: level of the line
"0 is the 'highest' level
function! s:get_level(lnum) abort
" Returns: level of the line
" 0 is the 'highest' level
if getline(a:lnum) =~# '^\s*$'
return 0
endif
@@ -243,10 +244,10 @@ function! s:get_level(lnum) abort
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) abort
" Returns: 1, a, i, A, I or ''
" If in doubt if alphanumeric character or romanian
" numeral, peek in the previous line
if a:item.type != 2 | return '' | endif
let number_chars = a:item.mrkr[:-2]
let divisor = a:item.mrkr[-1:]
@@ -324,8 +325,8 @@ function! s:regexp_of_marker(item) abort
endfunction
" Returns: Whether or not the checkbox of a list item is [X] or [-]
function! s:is_closed(item) abort
" Returns: Whether or not the checkbox of a list item is [X] or [-]
let state = a:item.cb
return state ==# vimwiki#vars#get_wikilocal('listsyms_list')[-1]
\ || state ==# vimwiki#vars#get_global('listsym_rejected')
@@ -335,9 +336,9 @@ endfunction
" 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) abort
" Returns: the list item after a:item or an empty item
" If a:ignore_kind is 1, the markers can differ
let org_lvl = s:get_level(a:item.lnum)
if !a:ignore_kind
let org_regex = s:regexp_of_marker(a:item)
@@ -359,9 +360,9 @@ function! s:get_next_list_item(item, ignore_kind) abort
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) abort
" Returns: the list item before a:item or an empty item
" If a:ignore_kind is 1, the markers can differ
let org_lvl = s:get_level(a:item.lnum)
if !a:ignore_kind
let org_regex = s:regexp_of_marker(a:item)
@@ -434,11 +435,11 @@ function! s:get_last_item_in_list(item, ignore_kind) abort
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, ...) abort
" 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
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')
@@ -464,9 +465,9 @@ function! s:get_next_line(lnum, ...) abort
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) abort
" 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
let cur_ln = a:lnum - 1
if getline(cur_ln) =~# vimwiki#vars#get_syntaxlocal('rxPreEnd')
@@ -507,10 +508,10 @@ function! s:get_first_child(item) abort
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) abort
" 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
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)
@@ -556,8 +557,8 @@ function! s:get_parent(item) abort
endfunction
"Returns: the item above or the item below or an empty item
function! s:get_a_neighbor_item(item) abort
" Returns: the item above or the item below or an empty item
let prev_item = s:get_prev_list_item(a:item, 1)
if prev_item.type != 0
return prev_item
@@ -583,9 +584,9 @@ function! s:get_a_neighbor_item_in_column(lnum, column) abort
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) abort
" Returns: the item if there is one in a:lnum
" else the multiline item a:lnum belongs to
let item = s:get_item(a:lnum)
if item.type != 0
return item
@@ -607,8 +608,8 @@ function! s:get_corresponding_item(lnum) abort
endfunction
"Returns: the last line of a (possibly multiline) item, including all children
function! s:get_last_line_of_item_incl_children(item) abort
" Returns: the last line of a (possibly multiline) item, including all children
let cur_ln = a:item.lnum
let org_lvl = s:get_level(a:item.lnum)
while 1
@@ -621,9 +622,9 @@ function! s:get_last_line_of_item_incl_children(item) abort
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) abort
" Returns: the last line of a (possibly multiline) item
" Note: there can be other list items between the first and last line
if a:item.type == 0 | return 0 | endif
let org_lvl = s:get_level(a:item.lnum)
let last_corresponding_line = a:item.lnum
@@ -650,9 +651,9 @@ endfunction
" 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) abort
" Renumbers the current list from a:item on downwards
" Returns: the last item that was adjusted
if !(a:item.type == 2 || (a:item.type == 1 && a:recursive))
return a:item
endif
@@ -702,11 +703,11 @@ function! s:adjust_items_recursively(parent) abort
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) abort
" 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
if !(a:item.type == 2 || (a:item.type == 1 && (a:ignore_kind || a:recursive)))
return s:empty_item()
end
@@ -731,9 +732,9 @@ function! s:adjust_numbered_list(item, ignore_kind, recursive) abort
endfunction
"Renumbers the list the cursor is in
"also update its parents checkbox state
function! vimwiki#lst#adjust_numbered_list() abort
" Renumbers the list the cursor is in
" also update its parents checkbox state
let cur_item = s:get_corresponding_item(line('.'))
if cur_item.type == 0 | return | endif
call s:adjust_numbered_list(cur_item, 1, 0)
@@ -741,9 +742,9 @@ function! vimwiki#lst#adjust_numbered_list() abort
endfunction
"Renumbers all lists of the buffer
"of course, this might take some seconds
function! vimwiki#lst#adjust_whole_buffer() abort
" Renumbers all lists of the buffer
" of course, this might take some seconds
let cur_ln = 1
while 1
let cur_item = s:get_item(cur_ln)
@@ -762,8 +763,8 @@ endfunction
" checkbox stuff
" ---------------------------------------------------------
"Returns: the rate of checkboxed list item in percent
function! s:get_rate(item) abort
" Returns: the rate of checkboxed list item in percent
if a:item.type == 0 || a:item.cb ==? ''
return -1
endif
@@ -776,9 +777,9 @@ function! s:get_rate(item) abort
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) abort
" Set state of the list item to [ ] or [o] or whatever
" Returns: 1 if the state changed, 0 otherwise
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
@@ -790,10 +791,10 @@ function! s:set_state(item, new_rate) abort
endfunction
" Sets the state of the list item to [ ] or [o] or whatever. Updates the states of its child items.
" If the new state should be [X] or [-], the state of the current list item is changed to this
" state, but if a child item already has [X] or [-] it is left alone.
function! s:set_state_plus_children(item, new_rate, ...) abort
" Sets the state of the list item to [ ] or [o] or whatever. Updates the states of its child items.
" If the new state should be [X] or [-], the state of the current list item is changed to this
" state, but if a child item already has [X] or [-] it is left alone.
let retain_state_if_closed = a:0 > 0 && a:1 > 0
if !(retain_state_if_closed && (a:new_rate == 100 || a:new_rate == -1) && s:is_closed(a:item))
@@ -849,8 +850,8 @@ function! s:set_state_plus_children(item, new_rate, ...) abort
endfunction
"Returns: the appropriate symbol for a given percent rate
function! s:rate_to_state(rate) abort
" Returns: the appropriate symbol for a given percent rate
let listsyms_list = vimwiki#vars#get_wikilocal('listsyms_list')
let state = ''
let n = len(listsyms_list)
@@ -868,9 +869,8 @@ function! s:rate_to_state(rate) abort
endfunction
"updates the symbol of a checkboxed item according to the symbols of its
"children
function! s:update_state(item) abort
" Updates the symbol of a checkboxed item according to the symbols of its children
if a:item.type == 0 || a:item.cb ==? '' || vimwiki#vars#get_wikilocal('listsyms_propagate') == 0
return
endif
@@ -923,9 +923,9 @@ function! s:set_state_recursively(item, new_rate) abort
endfunction
"Creates checkbox in a list item.
"Returns: 1 if successful
function! s:create_cb(item, start_rate) abort
" Creates checkbox in a list item.
" Returns: 1 if successful
if a:item.type == 0 || a:item.cb !=? ''
return 0
endif
@@ -950,8 +950,8 @@ function! s:remove_cb(item) abort
endfunction
" Change state of the checkboxes in the lines of the given range
function! s:change_cb(from_line, to_line, new_rate) abort
" Change state of the checkboxes in the lines of the given range
let from_item = s:get_corresponding_item(a:from_line)
if from_item.type == 0
return
@@ -973,13 +973,12 @@ function! s:change_cb(from_line, to_line, new_rate) abort
for parent_item in parent_items_of_lines
call s:update_state(parent_item)
endfor
endfunction
" Toggles checkbox between two states in the lines of the given range, creates checkboxes (with
" a:start_rate as state) if there aren't any.
function! s:toggle_create_cb(from_line, to_line, state1, state2, start_rate) abort
" Toggles checkbox between two states in the lines of the given range, creates checkboxes (with
" a:start_rate as state) if there aren't any.
let from_item = s:get_corresponding_item(a:from_line)
if from_item.type == 0
return
@@ -1014,13 +1013,12 @@ function! s:toggle_create_cb(from_line, to_line, state1, state2, start_rate) abo
call s:change_cb(a:from_line, a:to_line, new_rate)
endif
endfunction
"Decrement checkbox between [ ] and [X]
"in the lines of the given range
function! vimwiki#lst#decrement_cb(from_line, to_line) abort
" Decrement checkbox between [ ] and [X]
" in the lines of the given range
let from_item = s:get_corresponding_item(a:from_line)
if from_item.type == 0
return
@@ -1032,13 +1030,12 @@ function! vimwiki#lst#decrement_cb(from_line, to_line) abort
let new_rate = max([rate_first_line - 100/(n-1)-1, 0])
call s:change_cb(a:from_line, a:to_line, new_rate)
endfunction
"Increment checkbox between [ ] and [X]
"in the lines of the given range
function! vimwiki#lst#increment_cb(from_line, to_line) abort
" Increment checkbox between [ ] and [X]
" in the lines of the given range
let from_item = s:get_corresponding_item(a:from_line)
if from_item.type == 0
return
@@ -1050,20 +1047,19 @@ function! vimwiki#lst#increment_cb(from_line, to_line) abort
let new_rate = min([rate_first_line + 100/(n-1)+1, 100])
call s:change_cb(a:from_line, a:to_line, new_rate)
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) abort
" Toggles checkbox between [ ] and [X] or creates one
" in the lines of the given range
return s:toggle_create_cb(a:from_line, a:to_line, 100, 0, 0)
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) abort
" Toggles checkbox between [ ] and [-] or creates one
" in the lines of the given range
return s:toggle_create_cb(a:from_line, a:to_line, -1, 0, -1)
endfunction
@@ -1114,9 +1110,9 @@ function! vimwiki#lst#remove_cb_in_list() abort
endfunction
" Iterate over given todo list and remove all task that are done
" If recursive is true, child items will be checked too
function! s:remove_done_in_list(item, recursive) abort
" Iterate over given todo list and remove all task that are done
" If recursive is true, child items will be checked too
" Clause non-null item type
if a:item.type == 0
return
@@ -1151,17 +1147,17 @@ function! s:remove_done_in_list(item, recursive) abort
endfunction
" Iterate over the list that the cursor is positioned in
" and remove all lines of task that are done.
" If recursive is true, child items will be checked too
function! vimwiki#lst#remove_done_in_current_list(recursive) abort
" Iterate over the list that the cursor is positioned in
" and remove all lines of task that are done.
" If recursive is true, child items will be checked too
let item = s:get_corresponding_item(line('.'))
call s:remove_done_in_list(item, a:recursive)
endfunction
" Remove selected lines if they contain a task that is done
function! vimwiki#lst#remove_done_in_range(first_line, last_line) abort
" Remove selected lines if they contain a task that is done
let first_item = s:get_corresponding_item(a:first_line)
let last_item = s:get_corresponding_item(a:last_line)
@@ -1195,12 +1191,12 @@ function! vimwiki#lst#remove_done_in_range(first_line, last_line) abort
endfunction
" wrapper function to distinguish between function used with a range or not
" vim 8.0.1089 and newer and corresponding neovim versions allow to use <range> to distinguish if
" the function has been called with a range. For older versions we use remove_done_in_range if
" first and last line are identical, which means there was either no range or the range was within
" one line.
function! vimwiki#lst#remove_done(recursive, range, first_line, last_line) abort
" wrapper function to distinguish between function used with a range or not
" vim 8.0.1089 and newer and corresponding neovim versions allow to use <range> to distinguish if
" the function has been called with a range. For older versions we use remove_done_in_range if
" first and last line are identical, which means there was either no range or the range was within
" one line.
if a:range ==# '<range>'
let range = a:first_line != a:last_line
else
@@ -1269,11 +1265,11 @@ function! s:increase_level(item, by) abort
endfunction
" Cycle through the bullet list markers set in
" `bullet_types` based on the indentation level
" TODO there is potential to merge this with the change_marker* funcs further
" up if we can make them operate on arbitrary lists of characters
function! s:indent_cycle_bullets(item, indent_by) abort
" Cycle through the bullet list markers set in
" `bullet_types` based on the indentation level
" TODO there is potential to merge this with the change_marker* funcs further
" up if we can make them operate on arbitrary lists of characters
" Clause: Check if should work
if !vimwiki#vars#get_syntaxlocal('cycle_bullets') || a:item.type != 1
return
@@ -1287,9 +1283,9 @@ function! s:indent_cycle_bullets(item, indent_by) abort
endfunction
" Add a:indent_by to the current indent
"a:indent_by can be negative
function! s:indent_line_by(lnum, indent_by) abort
" Add a:indent_by to the current indent
"a:indent_by can be negative
let item = s:get_item(a:lnum)
if a:indent_by > 0
call s:increase_level(item, a:indent_by)
@@ -1300,8 +1296,8 @@ function! s:indent_line_by(lnum, indent_by) abort
endfunction
" Change lvl of lines in selection
function! s:change_level(from_line, to_line, direction, plus_children) abort
" Change lvl of lines in selection
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))
@@ -1385,8 +1381,8 @@ function! vimwiki#lst#change_level(from_line, to_line, direction, plus_children)
endfunction
"indent line a:lnum to be the continuation of a:prev_item
function! s:indent_multiline(prev_item, lnum) abort
" Indent line a:lnum to be the continuation of a:prev_item
if a:prev_item.type != 0
call s:set_indent(a:lnum, s:text_begin(a:prev_item.lnum))
endif
@@ -1397,8 +1393,8 @@ endfunction
" change markers of list items
" ---------------------------------------------------------
"Returns: the position of a marker in g:vimwiki_list_markers
function! s:get_idx_list_markers(item) abort
" Returns: the position of a marker in g:vimwiki_list_markers
if a:item.type == 1
let m = s:first_char(a:item.mrkr)
else
@@ -1408,8 +1404,8 @@ function! s:get_idx_list_markers(item) abort
endfunction
"changes the marker of the given item to the next in g:vimwiki_list_markers
function! s:get_next_mrkr(item) abort
" Changes the marker of the given item to the next in g:vimwiki_list_markers
let markers = vimwiki#vars#get_syntaxlocal('list_markers')
if a:item.type == 0
let new_mrkr = markers[0]
@@ -1421,8 +1417,8 @@ function! s:get_next_mrkr(item) abort
endfunction
"changes the marker of the given item to the previous in g:vimwiki_list_markers
function! s:get_prev_mrkr(item) abort
" Changes the marker of the given item to the previous in g:vimwiki_list_markers
let markers = vimwiki#vars#get_syntaxlocal('list_markers')
if a:item.type == 0
return markers[-1]
@@ -1519,8 +1515,8 @@ function! vimwiki#lst#change_marker_in_list(new_mrkr) abort
endfunction
"sets kind of the item depending on neighbor items and the parent item
function! s:adjust_mrkr(item) abort
" Sets kind of the item depending on neighbor items and the parent item
if a:item.type == 0 || vimwiki#vars#get_syntaxlocal('recurring_bullets')
return
endif
@@ -1771,12 +1767,11 @@ function! vimwiki#lst#kbd_cr(normal, just_mrkr) abort
else
startinsert
endif
endfunction
"creates a list item in the current line or removes it
function! vimwiki#lst#toggle_list_item() abort
" Creates a list item in the current line or removes it
let cur_col_from_eol = col('$') - col("'^")
let cur_item = s:get_item(line('.'))
+1 -2
View File
@@ -34,8 +34,8 @@ function! vimwiki#markdown_base#scan_reflinks() abort
endfunction
" try markdown reference links
function! vimwiki#markdown_base#open_reflink(link) abort
" try markdown reference links
let link = a:link
let mkd_refs = vimwiki#vars#get_bufferlocal('markdown_refs')
if has_key(mkd_refs, link)
@@ -106,7 +106,6 @@ function! s:normalize_link_syntax_n() abort
call vimwiki#base#replacestr_at_cursor('\V'.lnk, sub)
return
endif
endfunction
+24 -24
View File
@@ -5,19 +5,19 @@
" Unixify path
function! s:unixify(path) abort
return substitute(a:path, '\', '/', 'g')
" Unixify Path:
return substitute(a:path, '\', '/', 'g')
endfunction
" Windowsify path
function! s:windowsify(path) abort
return substitute(a:path, '/', '\', 'g')
" Windowsify Path:
return substitute(a:path, '/', '\', 'g')
endfunction
" Define os specific path convertion
" Define: os specific path convertion
if vimwiki#u#is_windows()
function! s:osxify(path) abort
return s:windowsify(a:path)
@@ -29,8 +29,8 @@ else
endif
" Remove last path delimitator (slash or backslash)
function! vimwiki#path#chomp_slash(str) abort
" Remove Delimiter: of last path (slash or backslash)
return substitute(a:str, '[/\\]\+$', '', '')
endfunction
@@ -47,8 +47,8 @@ else
endif
" Collapse sections like /a/b/../c to /a/c and /a/b/./c to /a/b/c
function! vimwiki#path#normalize(path) abort
" Collapse Sections: like /a/b/../c to /a/c and /a/b/./c to /a/b/c
let path = a:path
while 1
let intermediateResult = substitute(path, '/[^/]\+/\.\.', '', '')
@@ -62,8 +62,8 @@ function! vimwiki#path#normalize(path) abort
endfunction
" Normalize path: \ -> / && /// -> / && resolve(symlinks)
function! vimwiki#path#path_norm(path) abort
" Normalize Path: \ -> / && /// -> / && resolve(symlinks)
" return if scp
if a:path =~# '^scp:' | return a:path | endif
" convert backslash to slash
@@ -75,22 +75,22 @@ function! vimwiki#path#path_norm(path) abort
endfunction
" Check if link is to a directory
function! vimwiki#path#is_link_to_dir(link) abort
" Check: if link is to a directory
" It should be ended with \ or /.
return a:link =~# '\m[/\\]$'
endfunction
" Get absolute path <- path relative to current file
function! vimwiki#path#abs_path_of_link(link) abort
" Get: absolute path <- path relative to current file
return vimwiki#path#normalize(expand('%:p:h').'/'.a:link)
endfunction
" Returns: longest common path prefix of 2 given paths.
" Ex: '~/home/usrname/wiki', '~/home/usrname/wiki/shmiki' => '~/home/usrname/wiki'
function! vimwiki#path#path_common_pfx(path1, path2) abort
" Returns: longest common path prefix of 2 given paths.
" Ex: '~/home/usrname/wiki', '~/home/usrname/wiki/shmiki' => '~/home/usrname/wiki'
let p1 = split(a:path1, '[/\\]', 1)
let p2 = split(a:path2, '[/\\]', 1)
@@ -107,8 +107,8 @@ function! vimwiki#path#path_common_pfx(path1, path2) abort
endfunction
" Convert path -> full resolved slashed path
function! vimwiki#path#wikify_path(path) abort
" Convert: path -> full resolved slashed path
let result = resolve(fnamemodify(a:path, ':p'))
if vimwiki#u#is_windows()
let result = substitute(result, '\\', '/', 'g')
@@ -118,14 +118,14 @@ function! vimwiki#path#wikify_path(path) abort
endfunction
" Return: Current file path relative
function! vimwiki#path#current_wiki_file() abort
" Return: Current file path relative
return vimwiki#path#wikify_path(expand('%:p'))
endfunction
" Return: the relative path from a:dir to a:file
function! vimwiki#path#relpath(dir, file) abort
" Return: the relative path from a:dir to a:file
" Check if dir here ('.') -> return file
if empty(a:dir) || a:dir =~# '^\.[/\\]\?$'
return a:file
@@ -168,11 +168,11 @@ function! vimwiki#path#relpath(dir, file) abort
endfunction
" Mkdir:
" If the optional argument provided and nonzero,
" it will ask before creating a directory
" Returns: 1 iff directory exists or successfully created
function! vimwiki#path#mkdir(path, ...) abort
" Mkdir:
" if the optional argument provided and nonzero,
" it will ask before creating a directory
" returns: 1 iff directory exists or successfully created
let path = expand(a:path)
if path =~# '^scp:'
@@ -202,8 +202,8 @@ function! vimwiki#path#mkdir(path, ...) abort
endfunction
" Check: if path is absolute
function! vimwiki#path#is_absolute(path) abort
" Check: if path is absolute
if vimwiki#u#is_windows()
return a:path =~? '\m^\a:'
else
@@ -212,11 +212,11 @@ function! vimwiki#path#is_absolute(path) abort
endfunction
" Combine: a directory and a file into one path, doesn't generate duplicate
" path separator in case the directory is also having an ending / or \. This
" is because on windows ~\vimwiki//.tags is invalid but ~\vimwiki/.tags is a
" valid path.
if vimwiki#u#is_windows()
" Combine: a directory and a file into one path, doesn't generate duplicate
" path separator in case the directory is also having an ending / or \. This
" is because on windows ~\vimwiki//.tags is invalid but ~\vimwiki/.tags is a
" valid path.
function! vimwiki#path#join_path(directory, file) abort
let directory = vimwiki#path#chomp_slash(a:directory)
let file = substitute(a:file, '\m^[\\/]\+', '', '')
+28 -28
View File
@@ -22,11 +22,11 @@
let s:TAGS_METADATA_FILE_NAME = '.vimwiki_tags'
" Update tags metadata.
" Param: a:full_rebuild == 1: re-scan entire wiki
" Param: 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) abort
" Update tags metadata.
" Param: a:full_rebuild == 1: re-scan entire wiki
" Param: a:full_rebuild == 0: only re-scan current page
" a:all_files == '': only if the file is newer than .tags
let all_files = a:all_files !=? ''
if !a:full_rebuild
" Updating for one page (current)
@@ -60,16 +60,16 @@ function! vimwiki#tags#update_tags(full_rebuild, all_files) abort
endfunction
" Substitute regexp but do not interpret replace
" TODO mutualize with same function in base
function! s:safesubstitute(text, search, replace, mode) abort
" Substitute regexp but do not interpret replace
" TODO mutualize with same function in base
let escaped = escape(a:replace, '\&')
return substitute(a:text, a:search, escaped, a:mode)
endfunction
" Scan the list of text lines (argument) and produces tags metadata as a list of tag entries.
function! s:scan_tags(lines, page_name) abort
" Scan the list of text lines (argument) and produces tags metadata as a list of tag entries.
" Code wireframe to scan for headers -- borrowed from
" vimwiki#base#get_anchors(), with minor modifications.
@@ -155,15 +155,15 @@ function! s:scan_tags(lines, page_name) abort
endfunction
" Return: tags metadata file path
function! vimwiki#tags#metadata_file_path() abort
" Return: tags metadata file path
return fnamemodify(vimwiki#path#join_path(vimwiki#vars#get_wikilocal('path'),
\ s:TAGS_METADATA_FILE_NAME), ':p')
endfunction
" Load tags metadata from file, returns a dictionary
function! s:load_tags_metadata() abort
" Load tags metadata from file, returns a dictionary
let metadata_path = vimwiki#tags#metadata_file_path()
if !filereadable(metadata_path)
return {}
@@ -213,9 +213,9 @@ function! s:load_tags_metadata() abort
endfunction
" Remove all entries for given page from metadata in-place. Returns updated
" metadata (just in case).
function! s:remove_page_from_tags(metadata, page_name) abort
" Remove all entries for given page from metadata in-place. Returns updated
" metadata (just in case).
if has_key(a:metadata, a:page_name)
call remove(a:metadata, a:page_name)
return a:metadata
@@ -225,24 +225,24 @@ function! s:remove_page_from_tags(metadata, page_name) abort
endfunction
" Merge metadata of one file into a:metadata
function! s:merge_tags(metadata, pagename, file_metadata) abort
" Merge metadata of one file into a:metadata
let metadata = a:metadata
let metadata[a:pagename] = a:file_metadata
return metadata
endfunction
" Compare 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
" file lines.
"
" This function is needed for tags sorting, since plain sort() compares line
" 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) abort
" Compare 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
" file lines.
"
" This function is needed for tags sorting, since plain sort() compares line
" 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".)
let items = []
for orig_item in [a:i1, a:i2]
let fields = split(orig_item, "\t")
@@ -265,8 +265,8 @@ function! s:tags_entry_cmp(i1, i2) abort
endfunction
" Save metadata object into a file. Throws exceptions in case of problems.
function! s:write_tags_metadata(metadata) abort
" Save metadata object into a file. Throws exceptions in case of problems.
let metadata_path = vimwiki#tags#metadata_file_path()
let tags = []
for pagename in keys(a:metadata)
@@ -302,8 +302,8 @@ function! s:write_tags_metadata(metadata) abort
endfunction
" Return: list of unique tags found in the .tags file
function! vimwiki#tags#get_tags() abort
" Return: list of unique tags found in the .tags file
let metadata = s:load_tags_metadata()
let tags = {}
for entries in values(metadata)
@@ -315,11 +315,11 @@ function! vimwiki#tags#get_tags() abort
endfunction
" Generate tags in current buffer
" 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(create, ...) abort
" Generate tags in current buffer
" 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.
let specific_tags = a:000
let header_level = vimwiki#vars#get_global('tags_header_level')
@@ -408,8 +408,8 @@ function! vimwiki#tags#generate_tags(create, ...) abort
endfunction
" Complete tags
function! vimwiki#tags#complete_tags(ArgLead, CmdLine, CursorPos) abort
" Complete tags
" 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()
+6 -7
View File
@@ -8,7 +8,6 @@
" Home: https://github.com/vimwiki/vimwiki/
" Clause: Load only once
if exists('g:loaded_vimwiki_tbl_auto') || &compatible
finish
@@ -54,15 +53,15 @@ function! s:sep_splitter() abort
endfunction
" Check if param:line is in a table
function! s:is_table(line) abort
" Check if param:line is in a table
return s:is_separator(a:line) ||
\ (a:line !~# s:rxSep().s:rxSep() && a:line =~# '^\s*'.s:rxSep().'.\+'.s:rxSep().'\s*$')
endfunction
" Check if param:line is a separator (ex: | --- | --- |)
function! s:is_separator(line) abort
" Check if param:line is a separator (ex: | --- | --- |)
return a:line =~# '^\s*'.s:rxSep().'\(:\=--\+:\='.s:rxSep().'\)\+\s*$'
endfunction
@@ -417,8 +416,8 @@ function! s:get_aligned_rows(lnum, col1, col2, depth) abort
endfunction
" Number of the current column. Starts from 0.
function! s:cur_column() abort
" Number of the current column. Starts from 0.
let line = getline('.')
if !s:is_table(line)
return -1
@@ -542,8 +541,8 @@ function! s:kbd_goto_prev_row() abort
endfunction
" Used in s:kbd_goto_next_col
function! vimwiki#tbl#goto_next_col() abort
" Used in s:kbd_goto_next_col
let curcol = virtcol('.')
let lnum = line('.')
let depth = 2
@@ -577,8 +576,8 @@ function! s:kbd_goto_next_col(jumpdown) abort
endfunction
" Used in s:kbd_goto_prev_col
function! vimwiki#tbl#goto_prev_col() abort
" Used in s:kbd_goto_prev_col
let curcol = virtcol('.')
let lnum = line('.')
let depth = 2
@@ -757,8 +756,8 @@ function! vimwiki#tbl#align_or_cmd(cmd, ...) abort
endfunction
" TODO: move_column_left and move_column_right are good candidates to be refactored.
function! vimwiki#tbl#move_column_left() abort
" TODO: move_column_left and move_column_right are good candidates to be refactored.
" Clause in
let line = getline('.')
if !s:is_table(line)
+65 -64
View File
@@ -3,11 +3,11 @@
" Description: Utility functions
" Home: https://github.com/vimwiki/vimwiki/
" Echo: msg
" :param: (1) <string> highlighting group
" :param: (2) <string> echo suffix (ex: 'n', 'm')
" :param: (3) <string> message prefix, default Vimwiki
function! vimwiki#u#echo(msg, ...) abort
" Echo: msg
" :param: (1) <string> highlighting group
" :param: (2) <string> echo suffix (ex: 'n', 'm')
" :param: (3) <string> message prefix, default Vimwiki
let hl_group = a:0 > 0 ? a:1 : ''
let echo_suffix = a:0 > 1 ? a:2 : ''
let msg_prefix = a:0 > 2 ? a:3 : 'Vimwiki: '
@@ -27,34 +27,34 @@ function! vimwiki#u#echo(msg, ...) abort
endif
endfunction
" Debug: msg
" let b:vimwiki_debug to trigger
function! vimwiki#u#debug(msg) abort
" Debug: msg
" let b:vimwiki_debug to trigger
if !exists('b:vimwiki_debug') || b:vimwiki_debug == 0
return
endif
echomsg 'DEBUG: ' . a:msg
endfunction
" Warn: msg
function! vimwiki#u#warn(msg) abort
" Warn: msg
call vimwiki#u#echo('Warning: ' . a:msg, 'WarningMsg', '')
endfunction
" Error: msg
function! vimwiki#u#error(msg) abort
" Error: msg
call vimwiki#u#echo('Error: ' . a:msg, 'Error', 'msg')
endfunction
" Warn: deprecated feature: old -> new
function! vimwiki#u#deprecate(old, new) abort
" Warn: deprecated feature: old -> new
call vimwiki#u#warn('Deprecated: ' . a:old . ' is deprecated and '
\ . 'will be removed in future versions. Use ' . a:new . ' instead.')
endfunction
" Get visual selection text content, optionaly replace its content
" :param: Text to replace selection
function! vimwiki#u#get_selection(...) abort
" Get visual selection text content, optionaly replace its content
" :param: Text to replace selection
" Copyed from DarkWiiPlayer at stackoverflow
" https://stackoverflow.com/a/47051271/2544873
" Get selection extremity position,
@@ -101,11 +101,12 @@ function! vimwiki#u#get_selection(...) abort
endfunction
" Execute: string v:count times
function! vimwiki#u#count_exe(cmd) abort
for i in range( max([1, v:count]) )
exe a:cmd
endfor
" Execute: string v:count times
" Called: prefixable mapping
for i in range( max([1, v:count]) )
exe a:cmd
endfor
endfunction
@@ -119,10 +120,10 @@ function! vimwiki#u#sort_len(list) abort
endfunction
" Trim spaces: leading and trailing
" :param: string in
" :param: (1) <string> optional list of character to trim
function! vimwiki#u#trim(string, ...) abort
" Trim spaces: leading and trailing
" :param: string in
" :param: (1) <string> optional list of character to trim
let chars = ''
if a:0 > 0
let chars = a:1
@@ -133,15 +134,15 @@ function! vimwiki#u#trim(string, ...) abort
endfunction
" Builtin cursor doesn't work right with unicode characters.
function! vimwiki#u#cursor(lnum, cnum) abort
" Builtin cursor doesn't work right with unicode characters.
exe a:lnum
exe 'normal! 0'.a:cnum.'|'
endfunction
" Returns: OS name, human readable
function! vimwiki#u#os_name() abort
" Returns: OS name, human readable
if vimwiki#u#is_windows()
return 'Windows'
elseif vimwiki#u#is_macos()
@@ -152,14 +153,14 @@ function! vimwiki#u#os_name() abort
endfunction
" Check if OS is windows
function! vimwiki#u#is_windows() abort
" Check if OS is windows
return has('win32') || has('win64') || has('win95') || has('win16')
endfunction
" Check if OS is mac
function! vimwiki#u#is_macos() abort
" Check if OS is mac
if has('mac') || has('macunix') || has('gui_mac')
return 1
endif
@@ -175,26 +176,26 @@ function! vimwiki#u#count_first_sym(line) abort
endfunction
" Escape string for literal magic regex match
function! vimwiki#u#escape(string) abort
" Escape string for literal magic regex match
return escape(a:string, '~.*[]\^$')
endfunction
" Load concrete Wiki syntax: sets regexes and templates for headers and links
function! vimwiki#u#reload_regexes() abort
" Load concrete Wiki syntax: sets regexes and templates for headers and links
execute 'runtime! syntax/vimwiki_'.vimwiki#vars#get_wikilocal('syntax').'.vim'
endfunction
" Load syntax-specific functionality
function! vimwiki#u#reload_regexes_custom() abort
" Load syntax-specific functionality
execute 'runtime! syntax/vimwiki_'.vimwiki#vars#get_wikilocal('syntax').'_custom.vim'
endfunction
" Backward compatible version of the built-in function shiftwidth()
function! vimwiki#u#sw() abort
" Backward compatible version of the built-in function shiftwidth()
if exists('*shiftwidth')
return shiftwidth()
else
@@ -202,14 +203,14 @@ function! vimwiki#u#sw() abort
endif
endfunc
" a:mode single character indicating the mode as defined by :h maparg
" a:key the key sequence to map
" a:plug the plug command the key sequence should be mapped to
" a:1 optional argument with the following functionality:
" if a:1==1 then the hasmapto(<Plug>) check is skipped.
" this can be used to map different keys to the same <Plug> definition
" if a:1==2 then the mapping is not <buffer> specific i.e. it is global
function! vimwiki#u#map_key(mode, key, plug, ...) abort
" a:mode single character indicating the mode as defined by :h maparg
" a:key the key sequence to map
" a:plug the plug command the key sequence should be mapped to
" a:1 optional argument with the following functionality:
" if a:1==1 then the hasmapto(<Plug>) check is skipped.
" this can be used to map different keys to the same <Plug> definition
" if a:1==2 then the mapping is not <buffer> specific i.e. it is global
if a:0 && a:1 == 2
" global mappings
if !hasmapto(a:plug, a:mode) && maparg(a:key, a:mode) ==# ''
@@ -227,11 +228,11 @@ function! vimwiki#u#map_key(mode, key, plug, ...) abort
endfunction
" Returns: 1 if line is a code block or math block
"
" The last two conditions are needed for this to correctly
" detect nested syntaxes within code blocks
function! vimwiki#u#is_codeblock(lnum) abort
" Returns: 1 if line is a code block or math block
"
" The last two conditions are needed for this to correctly
" detect nested syntaxes within code blocks
let syn_g = synIDattr(synID(a:lnum,1,1),'name')
if syn_g =~# 'Vimwiki\(Pre.*\|IndentedCodeBlock\|Math.*\)'
\ || (syn_g !~# 'Vimwiki.*' && syn_g !=? '')
@@ -241,10 +242,10 @@ function! vimwiki#u#is_codeblock(lnum) abort
endif
endfunction
" Sets the filetype to vimwiki
" If g:vimwiki_filetypes variable is set
" the filetype will be vimwiki.<ft1>.<ft2> etc.
function! vimwiki#u#ft_set() abort
" Sets the filetype to vimwiki
" If g:vimwiki_filetypes variable is set
" the filetype will be vimwiki.<ft1>.<ft2> etc.
let ftypelist = vimwiki#vars#get_global('filetypes')
let ftype = 'vimwiki'
for ftypeadd in ftypelist
@@ -253,11 +254,11 @@ function! vimwiki#u#ft_set() abort
let &filetype = ftype
endfunction
" Returns: 1 if filetype is vimwiki, 0 else
" If multiple fileytpes are in use 1 is returned only if the
" first ft is vimwiki which should always be the case unless
" the user manually changes it to something else
function! vimwiki#u#ft_is_vw() abort
" Returns: 1 if filetype is vimwiki, 0 else
" If multiple fileytpes are in use 1 is returned only if the
" first ft is vimwiki which should always be the case unless
" the user manually changes it to something else
" Clause: is filetype defined
if &filetype ==# '' | return 0 | endif
if split(&filetype, '\.')[0] ==? 'vimwiki'
@@ -268,17 +269,17 @@ function! vimwiki#u#ft_is_vw() abort
endfunction
" Helper: Getter
" :param: syntax <string> to retrive, default to current
function! vimwiki#u#get_syntax_dic(...) abort
" Helper: Getter
" :param: syntax <string> to retrive, default to current
let syntax = a:0 ? a:1 : vimwiki#vars#get_wikilocal('syntax')
return g:vimwiki_syntaxlocal_vars[syntax]
endfunction
" Helper to mutualize
" Called: normalize and unnormalize anchor
function! vimwiki#u#get_punctuation_regex() abort
" Helper: to mutualize
" Called: normalize and unnormalize anchor
" From: https://gist.github.com/asabaylus/3071099#gistcomment-2563127
" Faster
" Unused now
@@ -291,19 +292,19 @@ function! vimwiki#u#get_punctuation_regex() abort
endfunction
" Faster
function! vimwiki#u#get_punctuation_string() abort
" Faster
" See: https://github.github.com/gfm/#ascii-punctuation-character
return '!"#$%&''()*+,-./:;<=>?@\[\\\]^`{}|~'
endfunction
" Helper: Expand regex from reduced typeface delimiters
" :param: list<list,delimiters>> with reduced regex
" Return: list with extended regex delimiters (not inside a word)
" -- [['\*_', '_\*']] -> [['\*_\S\@=', '\S\@<=_\*\%(\s\|$\)\@=']]
" See: https://github.github.com/gfm/#left-flanking-delimiter-run
function! vimwiki#u#hi_expand_regex(lst) abort
" Helper: Expand regex from reduced typeface delimiters
" :param: list<list,delimiters>> with reduced regex
" Return: list with extended regex delimiters (not inside a word)
" -- [['\*_', '_\*']] -> [['\*_\S\@=', '\S\@<=_\*\%(\s\|$\)\@=']]
" See: https://github.github.com/gfm/#left-flanking-delimiter-run
let res = []
let p = vimwiki#u#get_punctuation_string()
for delimiters in a:lst
@@ -315,13 +316,13 @@ function! vimwiki#u#hi_expand_regex(lst) abort
endfunction
" Helper: Create highlight region between two tags
" :param: tag <string> example '<b>'
" :param: syntax_group <string> example: VimwikiBold
" :param: contains <string> coma separated and prefixed, default VimwikiHTMLTag
" :param: (1) <boolean> is contained
" :param: (2) <string> more param ex:oneline
function! vimwiki#u#hi_tag(tag_pre, tag_post, syntax_group, contains, ...) abort
" Helper: Create highlight region between two tags
" :param: tag <string> example '<b>'
" :param: syntax_group <string> example: VimwikiBold
" :param: contains <string> coma separated and prefixed, default VimwikiHTMLTag
" :param: (1) <boolean> is contained
" :param: (2) <string> more param ex:oneline
let opt_is_contained = a:0 > 0 && a:1 > 0 ? 'contained ' : ''
let opt_more = a:0 > 1 ? ' ' . a:2 : ''
let opt_contains = ''
@@ -340,11 +341,11 @@ function! vimwiki#u#hi_tag(tag_pre, tag_post, syntax_group, contains, ...) abort
endfunction
" Highight typeface: see $VIMRUNTIME/syntax/html.vim
" -- Basically allow nesting with multiple definition contained
" :param: dic <dic:list:list> must contain: bold, italic and underline, even if underline is often void,
" -- see here for underline not defined: https://stackoverflow.com/questions/3003476
function! vimwiki#u#hi_typeface(dic) abort
" Highight typeface: see $VIMRUNTIME/syntax/html.vim
" -- Basically allow nesting with multiple definition contained
" :param: dic <dic:list:list> must contain: bold, italic and underline, even if underline is often void,
" -- see here for underline not defined: https://stackoverflow.com/questions/3003476
" Italic must go before, otherwise single * takes precedence over ** and ** is considered as
" -- a void italic.
" Note:
+64 -68
View File
@@ -3,8 +3,6 @@
" Description: Vimwiki variable definition and manipulation
" Home: https://github.com/vimwiki/vimwiki/
" ------------------------------------------------------------------------------------------------
" This file provides functions to manage the various state variables which are needed during a
" Vimwiki session.
@@ -30,8 +28,8 @@
let s:margin_set_by_user = 0
" Init global and local variables
function! vimwiki#vars#init() abort
" Init global and local variables
" Init && Populate: global variable container
let g:vimwiki_global_vars = {}
call s:populate_global_variables()
@@ -42,13 +40,13 @@ function! vimwiki#vars#init() abort
endfunction
" Helper: Check user setting
" warn user with message if not good type
" Param: 1: key <string>: varaible name
" Param: 2: vimwiki_key <obj>: user value
" Param: 3: value_infod <dict>: type and default value
" Param: 4: coming from a global variable <bool>
function! s:check_users_value(key, users_value, value_infos, comes_from_global_variable) abort
" Helper: Check user setting
" warn user with message if not good type
" Param: 1: key <string>: varaible name
" Param: 2: vimwiki_key <obj>: user value
" Param: 3: value_infod <dict>: type and default value
" Param: 4: coming from a global variable <bool>
let type_code_to_name = {
\ type(0): 'number',
\ type(''): 'string',
@@ -106,8 +104,8 @@ function! s:check_users_value(key, users_value, value_infos, comes_from_global_v
endfunction
" Helper: Treat special variables
function! s:update_key(output_dic, key, old, new) abort
" Helper: Treat special variables
" Set list margin
if a:key ==# 'list_margin'
let s:margin_set_by_user = 1
@@ -125,15 +123,13 @@ function! s:update_key(output_dic, key, old, new) abort
endif
endfunction
" ----------------------------------------------------------
" 1. Global {{{1
" ----------------------------------------------------------
" Get default wikilocal values
" Please: keep alphabetical sort
function! s:get_default_global() abort
" Get default wikilocal values
" Please: keep alphabetical sort
return {
\ 'CJK_length': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
\ 'auto_chdir': {'type': type(0), 'default': 0, 'min': 0, 'max': 1},
@@ -192,17 +188,17 @@ function! s:get_default_global() abort
endfunction
" Populate global variable <- user & default
" Called: s:vimwiki#vars#init
function! s:populate_global_variables() abort
" Populate global variable <- user & default
" Called: s:vimwiki#vars#init
call s:read_global_settings_from_user()
call s:normalize_global_settings()
call s:internal_global_settings()
endfunction
" Read nromalized settings and create some more usefull variables to use internally
function! s:internal_global_settings() abort
" Read nromalized settings and create some more usefull variables to use internally
" non-configurable global variables:
" Scheme regexes must be defined even if syntax file is not loaded yet cause users should be
@@ -308,8 +304,8 @@ function! s:internal_global_settings() abort
endfunction
" Extend global dictionary <- default <- user
function! s:extend_global(output_dic, default_dic) abort
" Extend global dictionary <- default <- user
" Note: user_dic is unused here because it comes from g:vimwiki_* vars
" Copy the user's settings from variables of the form g:vimwiki_<option> into the dict
" g:vimwiki_global_vars (or set a default value)
@@ -331,9 +327,9 @@ function! s:extend_global(output_dic, default_dic) abort
endfunction
" Read user global settings
" Called: s:populate_global_variables
function! s:read_global_settings_from_user() abort
" Read user global settings
" Called: s:populate_global_variables
let default_dic = s:get_default_global()
" Update batch
@@ -363,9 +359,9 @@ function! s:read_global_settings_from_user() abort
endfunction
" Normalize user global settings
" Called: s:populate_global_variables
function! s:normalize_global_settings() abort
" Normalize user global settings
" Called: s:populate_global_variables
let keys = keys(g:vimwiki_global_vars.ext2syntax)
for ext in keys
" for convenience, we also allow the term 'mediawiki'
@@ -450,9 +446,9 @@ endfunction
" 3. Wiki local {{{1
" ----------------------------------------------------------
" Get default wikilocal values
" Please: keep alphabetical sort
function! s:get_default_wikilocal() abort
" Get default wikilocal values
" Please: keep alphabetical sort
" Build color_tag_template regular expression
" Must be coherent with VimwikiColorize
let fg = 'color\s*:\s*__COLORFG__\s*;\s*'
@@ -539,8 +535,8 @@ function! s:get_default_wikilocal() abort
\ }
endfunction
" Extend syntaxlocal dictionary <- global <- user (default for type check)
function! s:extend_local(output_dic, default_dic, global_dic, user_dic) abort
" Extend syntaxlocal dictionary <- global <- user (default for type check)
" IDEA: can work lazily and not on all wikis at first call
" IDEA: have a special variable for wikitmp
for key in keys(a:default_dic)
@@ -556,9 +552,9 @@ function! s:extend_local(output_dic, default_dic, global_dic, user_dic) abort
endfunction
" Populate local variable <- user & default
" Called: s:vimwiki#vars#init
function! s:populate_wikilocal_options() abort
" Populate local variable <- user & default
" Called: s:vimwiki#vars#init
" Retrieve default
let default_dic = s:get_default_wikilocal()
@@ -589,8 +585,8 @@ function! s:populate_wikilocal_options() abort
endfunction
" Normalize local settings
function! s:normalize_wikilocal_settings() abort
" Normalize local settings
for wiki_settings in g:vimwiki_wikilocal_vars
" Check some values individually
""""""""""""""""""""""""""""""""
@@ -644,9 +640,9 @@ function! s:normalize_wikilocal_settings() abort
endfunction
" Helper path
" TODO move to path: Conflict with: vimwiki#path#path_norm && vimwiki#path#normalize
function! s:normalize_path(path) abort
" Helper path
" TODO move to path: Conflict with: vimwiki#path#path_norm && vimwiki#path#normalize
" trim trailing / and \ because otherwise resolve() doesn't work quite right
let path = substitute(a:path, '[/\\]\+$', '', '')
if path !~# '^scp:'
@@ -661,8 +657,8 @@ endfunction
" 2. Syntax specific {{{1
" ----------------------------------------------------------
" Get default syntaxlocal variable dictionary
function! s:get_default_syntaxlocal() abort
" Get default syntaxlocal variable dictionary
" type, default, min, max, possible_values, min_length
return extend(s:get_common_syntaxlocal(), {
\ 'bold_match': {'type': type(''), 'default': '\%(^\|\s\|[[:punct:]]\)\@<=\*__Text__\*\%([[:punct:]]\|\s\|$\)\@='},
@@ -814,9 +810,9 @@ function! s:get_common_syntaxlocal() abort
endfunction
" Populate syntax variable
" Exported: syntax/vimwiki.vim
function! vimwiki#vars#populate_syntax_vars(syntax) abort
" Populate syntax variable
" Exported: syntax/vimwiki.vim
" TODO refactor <= too big function
" TODO permit user conf in some var like g:vimwiki_syntaxlocal_vars
" TODO internalize match and search (header and bold)
@@ -1036,10 +1032,10 @@ function! vimwiki#vars#populate_syntax_vars(syntax) abort
endfunction
" Populate list variable
" or how to search and treat list (ex: *,-, 1.)
" TODO this should be syntax_local
function! s:populate_list_vars(wiki) abort
" Populate list variable
" or how to search and treat list (ex: *,-, 1.)
" TODO this should be syntax_local
let syntax = a:wiki.syntax
let a:wiki.rx_bullet_char = '['.escape(join(a:wiki.bullet_types, ''), ']^-\').']'
@@ -1097,8 +1093,8 @@ function! s:populate_list_vars(wiki) abort
endfunction
" Populate markdown specific syntax variables
function! s:populate_extra_markdown_vars() abort
" Populate markdown specific syntax variables
let mkd_syntax = g:vimwiki_syntaxlocal_vars['markdown']
" 0a) match [[URL|DESCRIPTION]]
@@ -1269,10 +1265,10 @@ function! s:populate_extra_markdown_vars() abort
endfunction
" Normalize syntax setting
" so that we dont have to branch for the syntax at each operation
" Called: populate_syntax_vars
function! s:normalize_syntax_settings(syntax) abort
" Normalize syntax setting
" so that we dont have to branch for the syntax at each operation
" Called: populate_syntax_vars
let syntax_dic = g:vimwiki_syntaxlocal_vars[a:syntax]
" Link1: used when:
@@ -1291,12 +1287,12 @@ endfunction
" ----------------------------------------------------------
" Get variable anywhere
" Returns: [value, location] where loc=global|wikilocal|syntaxlocal|bufferlocal|none
" Called: cmd <- VimwikiVar
" TODO get more performant approach when this file has been well refactored:
" -- calls only the necessary functions and not syntaxlocal anytime
function! s:get_anywhere(key, ...) abort
" Get variable anywhere
" Returns: [value, location] where loc=global|wikilocal|syntaxlocal|bufferlocal|none
" Called: cmd <- VimwikiVar
" TODO get more performant approach when this file has been well refactored:
" -- calls only the necessary functions and not syntaxlocal anytime
" Alias common info
let s:syntax = vimwiki#vars#get_wikilocal('syntax')
let s:wiki_nr = vimwiki#vars#get_bufferlocal('wiki_nr')
@@ -1392,11 +1388,11 @@ function! s:get_anywhere(key, ...) abort
endfunction
" Set or Get a vimwiki variable
" :param: (1) key <string> [space] value <string>
" -- name of the variable [space] value to evaluate and set the variable
" Called: VimwikiVar
function! vimwiki#vars#cmd(arg) abort
" Set or Get a vimwiki variable
" :param: (1) key <string> [space] value <string>
" -- name of the variable [space] value to evaluate and set the variable
" Called: VimwikiVar
" Get key and value
let sep1 = stridx(a:arg, ' ')
let sep2 = sep1
@@ -1528,10 +1524,10 @@ endfunction
" 4. Getter, Setter (exported) {{{1
" ----------------------------------------------------------
" Get syntax variable
" Param: 1: key (<string>)
" Param: (2): syntax name (<string> ex:'markdown')
function! vimwiki#vars#get_syntaxlocal(key, ...) abort
" Get syntax variable
" Param: 1: key (<string>)
" Param: (2): syntax name (<string> ex:'markdown')
" Retrieve desired syntax name
if a:0
let syntax = a:1
@@ -1549,10 +1545,10 @@ function! vimwiki#vars#get_syntaxlocal(key, ...) abort
endfunction
" Return: buffer local variable
" for the buffer we are currently in or for the given buffer (number or name).
" Populate the variable, if it doesn't exist.
function! vimwiki#vars#get_bufferlocal(key, ...) abort
" Return: buffer local variable
" for the buffer we are currently in or for the given buffer (number or name).
" Populate the variable, if it doesn't exist.
let buffer = a:0 ? a:1 : '%'
" 'get(getbufvar(...' handles vim < v7.3.831 that didn't allow a default value for getbufvar
@@ -1584,31 +1580,31 @@ function! vimwiki#vars#get_bufferlocal(key, ...) abort
endfunction
" Set buffer local variable
function! vimwiki#vars#set_bufferlocal(key, value, ...) abort
" Set buffer local variable
let buffer = a:0 ? a:1 : '%'
call setbufvar(buffer, 'vimwiki_' . a:key, a:value)
endfunction
" Return: wiki global variable
function! vimwiki#vars#get_global(key) abort
" Return: wiki global variable
return g:vimwiki_global_vars[a:key]
endfunction
" Set global variable
function! vimwiki#vars#set_global(key, value) abort
" Set global variable
let g:vimwiki_global_vars[a:key] = a:value
return g:vimwiki_global_vars[a:key]
endfunction
" Return: wiki local named variable
" Param: (1): variable name (alias key, <string>)
" Param: (2): wiki number (<int>). When absent, the wiki of the currently active buffer is
" used
function! vimwiki#vars#get_wikilocal(key, ...) abort
" Return: wiki local named variable
" Param: (1): variable name (alias key, <string>)
" Param: (2): wiki number (<int>). When absent, the wiki of the currently active buffer is
" used
if a:0
return g:vimwiki_wikilocal_vars[a:1][a:key]
else
@@ -1617,16 +1613,16 @@ function! vimwiki#vars#get_wikilocal(key, ...) abort
endfunction
" Return: wiki local variable (of default wiki [index -1])
function! vimwiki#vars#get_wikilocal_default(key) abort
" Return: wiki local variable (of default wiki [index -1])
return g:vimwiki_wikilocal_vars[-1][a:key]
endfunction
" Set local variable
" Param: (2): wiki number (<int>). When absent, the wiki of the currently active buffer is
" used
function! vimwiki#vars#set_wikilocal(key, value, ...) abort
" Set local variable
" Param: (2): wiki number (<int>). When absent, the wiki of the currently active buffer is
" used
if a:0
let wiki_nr = a:1
else
@@ -1639,8 +1635,8 @@ function! vimwiki#vars#set_wikilocal(key, value, ...) abort
endfunction
" Append new wiki to wiki list
function! vimwiki#vars#add_temporary_wiki(settings) abort
" Append new wiki to wiki list
let new_temp_wiki_settings = copy(g:vimwiki_wikilocal_vars[-1])
for [key, value] in items(a:settings)
let new_temp_wiki_settings[key] = value
@@ -1652,7 +1648,7 @@ function! vimwiki#vars#add_temporary_wiki(settings) abort
endfunction
" Return: number of registered wikis + temporary
function! vimwiki#vars#number_of_wikis() abort
" Return: number of registered wikis + temporary
return len(g:vimwiki_wikilocal_vars) - 1
endfunction
+15
View File
@@ -4,6 +4,7 @@ This file is meant to document design decisions and algorithms inside Vimwiki
which are too large for code comments, and not necessarily interesting to
users. Please create a new section to document each behavior.
## Formatting tables
In Vimwiki, formatting tables occurs dynamically, when navigating between cells
@@ -235,4 +236,18 @@ reasons for such a complex system is:
holes"
## Syntax and Highlight
* [Vimwiki syntax specification](./specification.wiki)
* [Syntax region](../syntax/vimwiki.vim)
TODO currently the typeface delmiters are customized that way:
```vim
" Typeface: -> u.vim
let s:typeface_dic = vimwiki#vars#get_syntaxlocal('typeface')
call vimwiki#u#hi_typeface(s:typeface_dic)
```
<!-- vim: set tw=80: -->
+5 -1
View File
@@ -985,7 +985,11 @@ Vimwiki has evolved its own syntax that closely resembles Google's wiki
markup. This syntax is described in detail below.
Vimwiki also supports alternative syntaxes, like Markdown and MediaWiki, to
varying degrees; see |vimwiki-option-syntax|. Static elements like headers,
varying degrees; see |vimwiki-option-syntax|.
The Markdown specification Vimwiki is trying to stick to can be found at:
https://github.github.com/gfm
Static elements like headers,
quotations, and lists are customized in syntax/vimwiki_xxx.vim, where xxx
stands for the chosen syntax.
+15 -15
View File
@@ -3,7 +3,7 @@
" Home: https://github.com/vimwiki/vimwiki/
" Cause: load only onces per buffer
" Clause: load only onces per buffer
if exists('b:did_ftplugin')
finish
endif
@@ -20,7 +20,7 @@ setlocal isfname-=[,]
exe 'setlocal tags+=' . escape(vimwiki#tags#metadata_file_path(), ' \|"')
" Help for omnicompletion
" Helper: for omnicompletion
function! Complete_wikifiles(findstart, base) abort
" s:line_context = link | tag | ''
if a:findstart == 1
@@ -121,7 +121,7 @@ function! Complete_wikifiles(findstart, base) abort
endif
endfunction
" Set completion
" Set Completion:
setlocal omnifunc=Complete_wikifiles
if and(vimwiki#vars#get_global('emoji_enable'), 2) != 0
\ && &completefunc ==# ''
@@ -129,13 +129,13 @@ if and(vimwiki#vars#get_global('emoji_enable'), 2) != 0
endif
" Declare settings necessary for the automatic formatting of lists
" Declare Settings: necessary for the automatic formatting of lists
" ------------------------------------------------
setlocal autoindent
setlocal nosmartindent
setlocal nocindent
" Set comments: to insert and format 'comments' or cheat
" Set Comments: to insert and format 'comments' or cheat
" Used to break blockquote prepending one on each new line (see: #915)
" B like blank character follow
" blockquotes
@@ -151,7 +151,7 @@ for bullet in vimwiki#vars#get_syntaxlocal('bullet_types')
endfor
let &l:comments = comments
" Set format options (:h fo-table)
" Set Format Options: (:h fo-table)
" Disable autocomment because, vimwiki does it better
setlocal formatoptions-=r
setlocal formatoptions-=o
@@ -200,7 +200,7 @@ function! VimwikiFoldLevel(lnum) abort
endfunction
" Declare constants used by VimwikiFoldText
" Declare Constants: used by VimwikiFoldText
" use \u2026 and \u21b2 (or \u2424) if enc=utf-8 to save screen space
let s:ellipsis = (&encoding ==? 'utf-8') ? "\u2026" : '...'
let s:ell_len = strlen(s:ellipsis)
@@ -215,7 +215,7 @@ function! s:shorten_text_simple(text, len) abort
endfunction
" Shorten text
" Shorten Text:
" Called: by VimwikiFoldText
" 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"
@@ -238,7 +238,7 @@ function! s:shorten_text(text, len) abort
endfunction
" Fold text chapter
" Fold: text chapter
function! VimwikiFoldText() abort
let line = getline(v:foldstart)
let main_text = substitute(line, '^\s*', repeat(' ',indent(v:foldstart)), '')
@@ -431,7 +431,7 @@ nnoremap <silent><script><buffer> <Plug>VimwikiDiaryNextDay
nnoremap <silent><script><buffer> <Plug>VimwikiDiaryPrevDay
\ :VimwikiDiaryPrevDay<CR>
" default links key mappings
" Declare Map: default links key mappings
if str2nr(vimwiki#vars#get_global('key_mappings').links)
call vimwiki#u#map_key('n', '<CR>', '<Plug>VimwikiFollowLink')
call vimwiki#u#map_key('n', '<S-CR>', '<Plug>VimwikiSplitLink')
@@ -451,7 +451,7 @@ if str2nr(vimwiki#vars#get_global('key_mappings').links)
call vimwiki#u#map_key('n', '<C-Up>', '<Plug>VimwikiDiaryPrevDay')
endif
" <Plug> lists definitions
" Map: <Plug> lists definitions
nnoremap <silent><script><buffer> <Plug>VimwikiNextTask
\ :VimwikiNextTask<CR>
nnoremap <silent><script><buffer> <Plug>VimwikiToggleListItem
@@ -501,7 +501,7 @@ nnoremap <silent><buffer> <Plug>VimwikiListo
nnoremap <silent><buffer> <Plug>VimwikiListO
\ :<C-U>call vimwiki#u#count_exe('call vimwiki#lst#kbd_O()')<CR>
" default lists key mappings
" Declare Map: default lists key mappings (again)
if str2nr(vimwiki#vars#get_global('key_mappings').lists)
call vimwiki#u#map_key('n', 'gnt', '<Plug>VimwikiNextTask')
call vimwiki#u#map_key('n', '<C-Space>', '<Plug>VimwikiToggleListItem')
@@ -673,7 +673,7 @@ onoremap <silent><buffer> <Plug>VimwikiTextObjListSingle
vnoremap <silent><buffer> <Plug>VimwikiTextObjListSingleV
\ :<C-U>call vimwiki#lst#TO_list_item(1, 1)<CR>
" default text object key mappings
" Declare Map: default text object key mappings
if str2nr(vimwiki#vars#get_global('key_mappings').text_objs)
call vimwiki#u#map_key('o', 'ah', '<Plug>VimwikiTextObjHeader')
call vimwiki#u#map_key('v', 'ah', '<Plug>VimwikiTextObjHeaderV')
@@ -697,7 +697,7 @@ if str2nr(vimwiki#vars#get_global('key_mappings').text_objs)
call vimwiki#u#map_key('v', 'il', '<Plug>VimwikiTextObjListSingleV')
endif
" <Plug> header definitions
" Map: <Plug> header definitions
nnoremap <silent><buffer> <Plug>VimwikiAddHeaderLevel
\ :<C-U>call vimwiki#base#AddHeaderLevel(v:count)<CR>
nnoremap <silent><buffer> <Plug>VimwikiRemoveHeaderLevel
@@ -713,7 +713,7 @@ nnoremap <silent><buffer> <Plug>VimwikiGoToNextSiblingHeader
nnoremap <silent><buffer> <Plug>VimwikiGoToPrevSiblingHeader
\ :<C-u>call vimwiki#base#goto_sibling(-1)<CR>
" default header key mappings
" Declare Map Header: default header key mappings
if str2nr(vimwiki#vars#get_global('key_mappings').headers)
call vimwiki#u#map_key('n', '=', '<Plug>VimwikiAddHeaderLevel')
call vimwiki#u#map_key('n', '-', '<Plug>VimwikiRemoveHeaderLevel')