2018-04-20 07:03:53 +02:00
|
|
|
" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
|
2012-06-07 02:00:00 +02:00
|
|
|
" Vimwiki autoload plugin file
|
2018-04-20 07:03:53 +02:00
|
|
|
" Description: Link functions for markdown syntax
|
2015-02-23 12:10:42 +01:00
|
|
|
" Home: https://github.com/vimwiki/vimwiki/
|
2012-06-07 02:00:00 +02:00
|
|
|
|
|
|
|
|
2019-12-21 04:41:03 +01:00
|
|
|
function! s:safesubstitute(text, search, replace, mode) abort
|
2018-02-19 07:44:19 +01:00
|
|
|
" Substitute regexp but do not interpret replace
|
|
|
|
let escaped = escape(a:replace, '\&')
|
|
|
|
return substitute(a:text, a:search, escaped, a:mode)
|
2018-04-20 07:03:53 +02:00
|
|
|
endfunction
|
|
|
|
|
2018-02-19 07:44:19 +01:00
|
|
|
|
2019-12-21 04:41:03 +01:00
|
|
|
function! vimwiki#markdown_base#scan_reflinks() abort
|
2012-07-07 02:00:00 +02:00
|
|
|
let mkd_refs = {}
|
|
|
|
" construct list of references using vimgrep
|
|
|
|
try
|
2015-03-23 13:25:39 +01:00
|
|
|
" Why noautocmd? Because https://github.com/vimwiki/vimwiki/issues/121
|
2017-01-07 21:51:15 +01:00
|
|
|
noautocmd execute 'vimgrep #'.vimwiki#vars#get_syntaxlocal('rxMkdRef').'#j %'
|
2012-07-07 02:00:00 +02:00
|
|
|
catch /^Vim\%((\a\+)\)\=:E480/ " No Match
|
|
|
|
"Ignore it, and move on to the next file
|
|
|
|
endtry
|
2018-04-20 07:03:53 +02:00
|
|
|
|
2012-07-07 02:00:00 +02:00
|
|
|
for d in getqflist()
|
|
|
|
let matchline = join(getline(d.lnum, min([d.lnum+1, line('$')])), ' ')
|
2017-01-07 21:51:15 +01:00
|
|
|
let descr = matchstr(matchline, vimwiki#vars#get_syntaxlocal('rxMkdRefMatchDescr'))
|
|
|
|
let url = matchstr(matchline, vimwiki#vars#get_syntaxlocal('rxMkdRefMatchUrl'))
|
2019-12-21 04:41:03 +01:00
|
|
|
if descr !=? '' && url !=? ''
|
2012-07-07 02:00:00 +02:00
|
|
|
let mkd_refs[descr] = url
|
|
|
|
endif
|
|
|
|
endfor
|
2017-01-07 21:51:15 +01:00
|
|
|
call vimwiki#vars#set_bufferlocal('markdown_refs', mkd_refs)
|
2012-07-07 02:00:00 +02:00
|
|
|
return mkd_refs
|
2018-04-20 07:03:53 +02:00
|
|
|
endfunction
|
2012-07-07 02:00:00 +02:00
|
|
|
|
|
|
|
|
|
|
|
" try markdown reference links
|
2019-12-21 04:41:03 +01:00
|
|
|
function! vimwiki#markdown_base#open_reflink(link) abort
|
2012-07-07 02:00:00 +02:00
|
|
|
" echom "vimwiki#markdown_base#open_reflink"
|
|
|
|
let link = a:link
|
2017-01-16 22:09:49 +01:00
|
|
|
let mkd_refs = vimwiki#vars#get_bufferlocal('markdown_refs')
|
2012-07-07 02:00:00 +02:00
|
|
|
if has_key(mkd_refs, link)
|
|
|
|
let url = mkd_refs[link]
|
|
|
|
call vimwiki#base#system_open_link(url)
|
|
|
|
return 1
|
|
|
|
else
|
|
|
|
return 0
|
|
|
|
endif
|
2018-04-20 07:03:53 +02:00
|
|
|
endfunction
|
2012-07-07 02:00:00 +02:00
|
|
|
|
|
|
|
|
2019-12-21 04:41:03 +01:00
|
|
|
function! s:normalize_link_syntax_n() abort
|
2012-06-07 02:00:00 +02:00
|
|
|
let lnum = line('.')
|
|
|
|
|
|
|
|
" try WikiIncl
|
2017-01-07 21:51:15 +01:00
|
|
|
let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWikiIncl'))
|
2012-06-07 02:00:00 +02:00
|
|
|
if !empty(lnk)
|
|
|
|
" NO-OP !!
|
|
|
|
return
|
|
|
|
endif
|
|
|
|
|
|
|
|
" try WikiLink0: replace with WikiLink1
|
2017-01-07 21:51:15 +01:00
|
|
|
let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink0'))
|
2012-06-07 02:00:00 +02:00
|
|
|
if !empty(lnk)
|
|
|
|
let sub = vimwiki#base#normalize_link_helper(lnk,
|
2018-04-20 07:03:53 +02:00
|
|
|
\ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'),
|
|
|
|
\ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'),
|
2017-01-07 21:51:15 +01:00
|
|
|
\ vimwiki#vars#get_syntaxlocal('WikiLink1Template2'))
|
|
|
|
call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink0'), sub)
|
2012-06-07 02:00:00 +02:00
|
|
|
return
|
|
|
|
endif
|
2018-04-20 07:03:53 +02:00
|
|
|
|
2012-06-07 02:00:00 +02:00
|
|
|
" try WikiLink1: replace with WikiLink0
|
2017-01-07 21:51:15 +01:00
|
|
|
let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink1'))
|
2012-06-07 02:00:00 +02:00
|
|
|
if !empty(lnk)
|
|
|
|
let sub = vimwiki#base#normalize_link_helper(lnk,
|
2018-04-20 07:03:53 +02:00
|
|
|
\ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'),
|
|
|
|
\ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'),
|
2017-01-07 21:51:15 +01:00
|
|
|
\ vimwiki#vars#get_global('WikiLinkTemplate2'))
|
|
|
|
call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink1'), sub)
|
2012-06-07 02:00:00 +02:00
|
|
|
return
|
|
|
|
endif
|
2018-04-20 07:03:53 +02:00
|
|
|
|
2012-06-07 02:00:00 +02:00
|
|
|
" try Weblink
|
2017-01-12 21:45:09 +01:00
|
|
|
let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink'))
|
2012-06-07 02:00:00 +02:00
|
|
|
if !empty(lnk)
|
|
|
|
let sub = vimwiki#base#normalize_link_helper(lnk,
|
2018-04-20 07:03:53 +02:00
|
|
|
\ vimwiki#vars#get_syntaxlocal('rxWeblinkMatchUrl'),
|
|
|
|
\ vimwiki#vars#get_syntaxlocal('rxWeblinkMatchDescr'),
|
2017-01-07 21:51:15 +01:00
|
|
|
\ vimwiki#vars#get_syntaxlocal('Weblink1Template'))
|
2017-01-12 21:45:09 +01:00
|
|
|
call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink'), sub)
|
2012-06-07 02:00:00 +02:00
|
|
|
return
|
|
|
|
endif
|
|
|
|
|
|
|
|
" try Word (any characters except separators)
|
|
|
|
" rxWord is less permissive than rxWikiLinkUrl which is used in
|
|
|
|
" normalize_link_syntax_v
|
2017-01-07 21:51:15 +01:00
|
|
|
let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWord'))
|
2012-06-07 02:00:00 +02:00
|
|
|
if !empty(lnk)
|
2019-12-21 04:41:03 +01:00
|
|
|
if vimwiki#base#is_diary_file(expand('%:p'))
|
2019-07-11 05:06:33 +02:00
|
|
|
let sub = vimwiki#base#normalize_link_in_diary(lnk)
|
|
|
|
else
|
|
|
|
let sub = vimwiki#base#normalize_link_helper(lnk,
|
|
|
|
\ vimwiki#vars#get_global('rxWord'), '',
|
2020-07-27 04:14:00 +02:00
|
|
|
\ vimwiki#vars#get_syntaxlocal('Link1'))
|
2019-07-11 05:06:33 +02:00
|
|
|
endif
|
2012-06-07 02:00:00 +02:00
|
|
|
call vimwiki#base#replacestr_at_cursor('\V'.lnk, sub)
|
|
|
|
return
|
|
|
|
endif
|
|
|
|
|
2018-04-20 07:03:53 +02:00
|
|
|
endfunction
|
|
|
|
|
2012-06-07 02:00:00 +02:00
|
|
|
|
2020-07-24 23:59:54 +02:00
|
|
|
function! vimwiki#markdown_base#normalize_link() abort
|
|
|
|
" TODO mutualize with base
|
|
|
|
call s:normalize_link_syntax_n()
|
2018-04-20 07:03:53 +02:00
|
|
|
endfunction
|