206 lines
8.2 KiB
VimL
206 lines
8.2 KiB
VimL
" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
|
|
" Vimwiki syntax file
|
|
" Description: Defines markdown custom syntax
|
|
" Home: https://github.com/vimwiki/vimwiki/
|
|
|
|
|
|
function! s:add_target_syntax_ON(target, type) abort
|
|
let prefix0 = 'syntax match '.a:type.' `'
|
|
let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,'.a:type.'Char'
|
|
let prefix1 = 'syntax match '.a:type.'T `'
|
|
let suffix1 = '` display contained'
|
|
execute prefix0. a:target. suffix0
|
|
execute prefix1. a:target. suffix1
|
|
endfunction
|
|
|
|
|
|
function! s:add_target_syntax_OFF(target, type) abort
|
|
let prefix0 = 'syntax match VimwikiNoExistsLink `'
|
|
let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,'.a:type.'Char'
|
|
let prefix1 = 'syntax match VimwikiNoExistsLinkT `'
|
|
let suffix1 = '` display contained'
|
|
execute prefix0. a:target. suffix0
|
|
execute prefix1. a:target. suffix1
|
|
endfunction
|
|
|
|
|
|
function! s:wrap_wikilink1_rx(target) abort
|
|
return vimwiki#vars#get_syntaxlocal('rxWikiLink1InvalidPrefix') . a:target.
|
|
\ vimwiki#vars#get_syntaxlocal('rxWikiLink1InvalidSuffix')
|
|
endfunction
|
|
|
|
|
|
function! s:existing_mkd_refs() abort
|
|
return keys(vimwiki#markdown_base#scan_reflinks())
|
|
endfunction
|
|
|
|
|
|
function! s:highlight_existing_links() abort
|
|
" Wikilink1
|
|
" Conditional highlighting that depends on the existence of a wiki file or
|
|
" directory is only available for *schemeless* wiki links
|
|
" Links are set up upon BufEnter (see plugin/...)
|
|
let safe_links = '\%('.
|
|
\ vimwiki#base#file_pattern(vimwiki#vars#get_bufferlocal('existing_wikifiles')) .
|
|
\ '\%(#[^|]*\)\?\|#[^|]*\)'
|
|
" Wikilink1 Dirs set up upon BufEnter (see plugin/...)
|
|
let safe_dirs = vimwiki#base#file_pattern(vimwiki#vars#get_bufferlocal('existing_wikidirs'))
|
|
" Ref links are cached
|
|
let safe_reflinks = vimwiki#base#file_pattern(s:existing_mkd_refs())
|
|
|
|
|
|
" match [URL][]
|
|
let target = vimwiki#base#apply_template(
|
|
\ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template1')),
|
|
\ safe_links, vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '')
|
|
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1')
|
|
" match [DESCRIPTION][URL]
|
|
let target = vimwiki#base#apply_template(
|
|
\ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template2')),
|
|
\ safe_links, vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '')
|
|
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1')
|
|
|
|
" match [DIRURL][]
|
|
let target = vimwiki#base#apply_template(
|
|
\ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template1')),
|
|
\ safe_dirs, vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '')
|
|
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1')
|
|
" match [DESCRIPTION][DIRURL]
|
|
let target = vimwiki#base#apply_template(
|
|
\ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template2')),
|
|
\ safe_dirs, vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '')
|
|
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1')
|
|
|
|
" match [MKDREF][]
|
|
let target = vimwiki#base#apply_template(
|
|
\ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template1')),
|
|
\ safe_reflinks, vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '')
|
|
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1')
|
|
" match [DESCRIPTION][MKDREF]
|
|
let target = vimwiki#base#apply_template(
|
|
\ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template2')),
|
|
\ safe_reflinks, vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '')
|
|
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1')
|
|
endfunction
|
|
|
|
|
|
" use max highlighting - could be quite slow if there are too many wikifiles
|
|
if vimwiki#vars#get_wikilocal('maxhi')
|
|
" WikiLink
|
|
call s:add_target_syntax_OFF(vimwiki#vars#get_syntaxlocal('rxWikiLink1'), 'VimwikiWikiLink1')
|
|
|
|
" Subsequently, links verified on vimwiki's path are highlighted as existing
|
|
call s:highlight_existing_links()
|
|
else
|
|
" Wikilink
|
|
call s:add_target_syntax_ON(vimwiki#vars#get_syntaxlocal('rxWikiLink1'), 'VimwikiWikiLink1')
|
|
endif
|
|
|
|
|
|
" Weblink
|
|
call s:add_target_syntax_ON(vimwiki#vars#get_syntaxlocal('rxWeblink1'), 'VimwikiWeblink1')
|
|
call s:add_target_syntax_ON(vimwiki#vars#get_syntaxlocal('rxImage'), 'VimwikiImage')
|
|
|
|
|
|
" WikiLink
|
|
" All remaining schemes are highlighted automatically
|
|
let s:rxSchemes = '\%('.
|
|
\ vimwiki#vars#get_global('schemes') . '\|'.
|
|
\ vimwiki#vars#get_global('web_schemes1').
|
|
\ '\):'
|
|
|
|
" a) match [nonwiki-scheme-URL]
|
|
let s:target = vimwiki#base#apply_template(
|
|
\ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template1')),
|
|
\ s:rxSchemes . vimwiki#vars#get_syntaxlocal('rxWikiLink1Url'),
|
|
\ vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '')
|
|
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(s:target), 'VimwikiWikiLink1')
|
|
" b) match [DESCRIPTION][nonwiki-scheme-URL]
|
|
let s:target = vimwiki#base#apply_template(
|
|
\ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template2')),
|
|
\ s:rxSchemes . vimwiki#vars#get_syntaxlocal('rxWikiLink1Url'),
|
|
\ vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '')
|
|
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(s:target), 'VimwikiWikiLink1')
|
|
|
|
|
|
|
|
" Header levels, 1-6
|
|
for s:i in range(1,6)
|
|
execute 'syntax match VimwikiHeader'.s:i.' /'.vimwiki#vars#get_syntaxlocal('rxH'.s:i).
|
|
\ '/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiCode,'.
|
|
\ 'VimwikiLink,VimwikiWeblink1,VimwikiWikiLink1,@Spell'
|
|
endfor
|
|
|
|
|
|
|
|
" concealed chars
|
|
if exists('+conceallevel')
|
|
syntax conceal on
|
|
endif
|
|
|
|
syntax spell toplevel
|
|
|
|
" VimwikiWikiLink1Char is for syntax markers (and also URL when a description
|
|
" is present) and may be concealed
|
|
let s:options = ' contained transparent contains=NONE'
|
|
" conceal wikilink1
|
|
execute 'syn match VimwikiWikiLink1Char /'.
|
|
\ vimwiki#vars#get_syntaxlocal('rx_wikilink_md_prefix').'/'.s:options
|
|
execute 'syn match VimwikiWikiLink1Char /'.
|
|
\ vimwiki#vars#get_syntaxlocal('rx_wikilink_md_suffix').'/'.s:options
|
|
execute 'syn match VimwikiWikiLink1Char /'.
|
|
\ vimwiki#vars#get_syntaxlocal('rxWikiLink1Prefix1').'/'.s:options
|
|
execute 'syn match VimwikiWikiLink1Char /'.
|
|
\ vimwiki#vars#get_syntaxlocal('rxWikiLink1Suffix1').'/'.s:options
|
|
|
|
" conceal weblink1
|
|
execute 'syn match VimwikiWeblink1Char "'.
|
|
\ vimwiki#vars#get_syntaxlocal('rxWeblink1Prefix1').'"'.s:options
|
|
execute 'syn match VimwikiWeblink1Char "'.
|
|
\ vimwiki#vars#get_syntaxlocal('rxWeblink1Suffix1').'"'.s:options
|
|
"image
|
|
execute 'syn match VimwikiImageChar "!"'.s:options
|
|
execute 'syn match VimwikiImageChar "'.
|
|
\ vimwiki#vars#get_syntaxlocal('rxWeblink1Prefix1').'"'.s:options
|
|
execute 'syn match VimwikiImageChar "'.
|
|
\ vimwiki#vars#get_syntaxlocal('rxWeblink1Suffix1').'"'.s:options
|
|
|
|
if exists('+conceallevel')
|
|
syntax conceal off
|
|
endif
|
|
|
|
|
|
|
|
" Tables
|
|
syntax match VimwikiTableRow /^\s*|.\+|\s*$/
|
|
\ transparent contains=VimwikiCellSeparator,
|
|
\ VimwikiLinkT,
|
|
\ VimwikiWeblink1T,
|
|
\ VimwikiWikiLink1T,
|
|
\ VimwikiNoExistsLinkT,
|
|
\ VimwikiTodo,
|
|
\ VimwikiBoldT,
|
|
\ VimwikiItalicT,
|
|
\ VimwikiBoldItalicT,
|
|
\ VimwikiItalicBoldT,
|
|
\ VimwikiDelTextT,
|
|
\ VimwikiSuperScriptT,
|
|
\ VimwikiSubScriptT,
|
|
\ VimwikiCodeT,
|
|
\ VimwikiEqInT,
|
|
\ @Spell
|
|
|
|
" TODO fix behavior within lists https://github.github.com/gfm/#list-items
|
|
" indented code blocks https://github.github.com/gfm/#indented-code-blocks
|
|
" execute 'syntax match VimwikiIndentedCodeBlock /' . vimwiki#vars#get_syntaxlocal('rxIndentedCodeBlock') . '/'
|
|
" hi def link VimwikiIndentedCodeBlock VimwikiPre
|
|
|
|
" syntax group highlighting
|
|
hi def link VimwikiImage VimwikiLink
|
|
hi def link VimwikiImageT VimwikiLink
|
|
hi def link VimwikiWeblink1 VimwikiLink
|
|
hi def link VimwikiWeblink1T VimwikiLink
|
|
|
|
hi def link VimwikiWikiLink1 VimwikiLink
|
|
hi def link VimwikiWikiLink1T VimwikiLink
|
|
|