2012-06-07 02:00:00 +02:00
" LINKS: highlighting is complicated due to "nonexistent" links feature {{{
function ! s :add_target_syntax_ON ( target , type ) " {{{
let prefix0 = 'syntax match ' .a :type .' `'
let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,' .a :type .'Char'
let prefix1 = 'syntax match ' .a :type .'T `'
let suffix1 = '` display contained'
execute prefix0 . a :target . suffix0
execute prefix1 . a :target . suffix1
endfunction "}}}
function ! s :add_target_syntax_OFF ( target , type ) " {{{
let prefix0 = 'syntax match VimwikiNoExistsLink `'
let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,' .a :type .'Char'
let prefix1 = 'syntax match VimwikiNoExistsLinkT `'
let suffix1 = '` display contained'
execute prefix0 . a :target . suffix0
execute prefix1 . a :target . suffix1
endfunction "}}}
function ! s :wrap_wikilink1_rx ( target ) "{{{
2017-01-12 21:45:09 +01:00
return vimwiki #vars #get_syntaxlocal ( 'rxWikiLink1InvalidPrefix' ) . a :target .
\ vimwiki #vars #get_syntaxlocal ( 'rxWikiLink1InvalidSuffix' )
2012-06-07 02:00:00 +02:00
endfunction "}}}
2012-07-07 02:00:00 +02:00
function ! s :existing_mkd_refs ( ) "{{{
2017-01-16 22:09:49 +01:00
return keys ( vimwiki #markdown_base #scan_reflinks ( ) )
2012-07-07 02:00:00 +02:00
endfunction "}}}
2012-06-07 02:00:00 +02:00
function ! s :highlight_existing_links ( ) "{{{
" Wikilink1
" Conditional highlighting that depends on the existence of a wiki file or
" directory is only available for *schemeless* wiki links
" Links are set up upon BufEnter (see plugin/...)
2017-01-12 21:45:09 +01:00
let safe_links = '\%(' .vimwiki #base #file_pattern ( vimwiki #vars #get_bufferlocal ( 'existing_wikifiles' ) ) .
2014-06-22 17:43:26 +02:00
\ '\%(#[^|]*\)\?\|#[^|]*\)'
2012-06-07 02:00:00 +02:00
" Wikilink1 Dirs set up upon BufEnter (see plugin/...)
2017-01-12 21:45:09 +01:00
let safe_dirs = vimwiki #base #file_pattern ( vimwiki #vars #get_bufferlocal ( 'existing_wikidirs' ) )
2012-07-07 02:00:00 +02:00
" Ref links are cached
let safe_reflinks = vimwiki #base #file_pattern ( s :existing_mkd_refs ( ) )
2012-06-07 02:00:00 +02:00
2012-07-07 02:00:00 +02:00
" match [URL][]
2014-06-22 16:26:40 +02:00
let target = vimwiki #base #apply_template (
2017-01-12 21:45:09 +01:00
\ vimwiki #u #escape ( vimwiki #vars #get_syntaxlocal ( 'WikiLink1Template1' ) ) ,
\ safe_links , vimwiki #vars #get_syntaxlocal ( 'rxWikiLink1Descr' ) , '' )
2012-06-07 02:00:00 +02:00
call s :add_target_syntax_ON ( s :wrap_wikilink1_rx ( target ) , 'VimwikiWikiLink1' )
" match [DESCRIPTION][URL]
2014-06-22 16:26:40 +02:00
let target = vimwiki #base #apply_template (
2017-01-12 21:45:09 +01:00
\ vimwiki #u #escape ( vimwiki #vars #get_syntaxlocal ( 'WikiLink1Template2' ) ) ,
\ safe_links , vimwiki #vars #get_syntaxlocal ( 'rxWikiLink1Descr' ) , '' )
2012-06-07 02:00:00 +02:00
call s :add_target_syntax_ON ( s :wrap_wikilink1_rx ( target ) , 'VimwikiWikiLink1' )
2012-07-07 02:00:00 +02:00
" match [DIRURL][]
2014-06-22 16:26:40 +02:00
let target = vimwiki #base #apply_template (
2017-01-12 21:45:09 +01:00
\ vimwiki #u #escape ( vimwiki #vars #get_syntaxlocal ( 'WikiLink1Template1' ) ) ,
\ safe_dirs , vimwiki #vars #get_syntaxlocal ( 'rxWikiLink1Descr' ) , '' )
2012-06-07 02:00:00 +02:00
call s :add_target_syntax_ON ( s :wrap_wikilink1_rx ( target ) , 'VimwikiWikiLink1' )
" match [DESCRIPTION][DIRURL]
2014-06-22 16:26:40 +02:00
let target = vimwiki #base #apply_template (
2017-01-12 21:45:09 +01:00
\ vimwiki #u #escape ( vimwiki #vars #get_syntaxlocal ( 'WikiLink1Template2' ) ) ,
\ safe_dirs , vimwiki #vars #get_syntaxlocal ( 'rxWikiLink1Descr' ) , '' )
2012-06-07 02:00:00 +02:00
call s :add_target_syntax_ON ( s :wrap_wikilink1_rx ( target ) , 'VimwikiWikiLink1' )
2012-07-07 02:00:00 +02:00
" match [MKDREF][]
2014-06-22 16:26:40 +02:00
let target = vimwiki #base #apply_template (
2017-01-12 21:45:09 +01:00
\ vimwiki #u #escape ( vimwiki #vars #get_syntaxlocal ( 'WikiLink1Template1' ) ) ,
\ safe_reflinks , vimwiki #vars #get_syntaxlocal ( 'rxWikiLink1Descr' ) , '' )
2012-07-07 02:00:00 +02:00
call s :add_target_syntax_ON ( s :wrap_wikilink1_rx ( target ) , 'VimwikiWikiLink1' )
" match [DESCRIPTION][MKDREF]
2014-06-22 16:26:40 +02:00
let target = vimwiki #base #apply_template (
2017-01-12 21:45:09 +01:00
\ vimwiki #u #escape ( vimwiki #vars #get_syntaxlocal ( 'WikiLink1Template2' ) ) ,
\ safe_reflinks , vimwiki #vars #get_syntaxlocal ( 'rxWikiLink1Descr' ) , '' )
2012-07-07 02:00:00 +02:00
call s :add_target_syntax_ON ( s :wrap_wikilink1_rx ( target ) , 'VimwikiWikiLink1' )
2012-06-07 02:00:00 +02:00
endfunction "}}}
" use max highlighting - could be quite slow if there are too many wikifiles
2016-12-22 19:55:20 +01:00
if vimwiki #vars #get_wikilocal ( 'maxhi' )
2012-06-07 02:00:00 +02:00
" WikiLink
2017-01-12 21:45:09 +01:00
call s :add_target_syntax_OFF ( vimwiki #vars #get_syntaxlocal ( 'rxWikiLink1' ) , 'VimwikiWikiLink1' )
2012-06-07 02:00:00 +02:00
" Subsequently, links verified on vimwiki's path are highlighted as existing
call s :highlight_existing_links ( )
else
" Wikilink
2017-01-12 21:45:09 +01:00
call s :add_target_syntax_ON ( vimwiki #vars #get_syntaxlocal ( 'rxWikiLink1' ) , 'VimwikiWikiLink1' )
2012-06-07 02:00:00 +02:00
endif
" Weblink
2017-01-12 21:45:09 +01:00
call s :add_target_syntax_ON ( vimwiki #vars #get_syntaxlocal ( 'rxWeblink1' ) , 'VimwikiWeblink1' )
2012-06-07 02:00:00 +02:00
" WikiLink
" All remaining schemes are highlighted automatically
2014-02-24 12:16:23 +01:00
let s :rxSchemes = '\%(' .
2016-12-21 22:11:44 +01:00
\ join ( split ( vimwiki #vars #get_global ( 'schemes' ) , '\s*,\s*' ) , '\|' ) .'\|' .
\ join ( split ( vimwiki #vars #get_global ( 'web_schemes1' ) , '\s*,\s*' ) , '\|' ) .
2012-06-07 02:00:00 +02:00
\ '\):'
" a) match [nonwiki-scheme-URL]
2014-06-22 16:26:40 +02:00
let s :target = vimwiki #base #apply_template (
2017-01-12 21:45:09 +01:00
\ vimwiki #u #escape ( vimwiki #vars #get_syntaxlocal ( 'WikiLink1Template1' ) ) ,
\ s :rxSchemes . vimwiki #vars #get_syntaxlocal ( 'rxWikiLink1Url' ) , vimwiki #vars #get_syntaxlocal ( 'rxWikiLink1Descr' ) , '' )
2014-02-24 12:16:23 +01:00
call s :add_target_syntax_ON ( s :wrap_wikilink1_rx ( s :target ) , 'VimwikiWikiLink1' )
2012-06-07 02:00:00 +02:00
" b) match [DESCRIPTION][nonwiki-scheme-URL]
2014-06-22 16:26:40 +02:00
let s :target = vimwiki #base #apply_template (
2017-01-12 21:45:09 +01:00
\ vimwiki #u #escape ( vimwiki #vars #get_syntaxlocal ( 'WikiLink1Template2' ) ) ,
\ s :rxSchemes . vimwiki #vars #get_syntaxlocal ( 'rxWikiLink1Url' ) , vimwiki #vars #get_syntaxlocal ( 'rxWikiLink1Descr' ) , '' )
2014-02-24 12:16:23 +01:00
call s :add_target_syntax_ON ( s :wrap_wikilink1_rx ( s :target ) , 'VimwikiWikiLink1' )
2012-06-07 02:00:00 +02:00
" }}}
" generic headers "{{{
" Header levels, 1-6
2014-02-24 12:16:23 +01:00
for s :i in range ( 1 , 6 )
2017-01-16 22:09:49 +01:00
execute 'syntax match VimwikiHeader' .s :i .' /' .vimwiki #vars #get_syntaxlocal ( 'rxH' .s :i ) .'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiCode,VimwikiLink,VimwikiWeblink1,VimwikiWikiLink1,@Spell'
2012-06-07 02:00:00 +02:00
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
2014-02-24 12:16:23 +01:00
let s :options = ' contained transparent contains=NONE'
2012-06-07 02:00:00 +02:00
" conceal wikilink1
2017-01-12 21:45:09 +01:00
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
2017-01-11 22:12:33 +01:00
execute 'syn match VimwikiWikiLink1Char /' .vimwiki #vars #get_syntaxlocal ( 'rxWikiLink1Prefix1' ) .'/' .s :options
execute 'syn match VimwikiWikiLink1Char /' .vimwiki #vars #get_syntaxlocal ( 'rxWikiLink1Suffix1' ) .'/' .s :options
2012-06-07 02:00:00 +02:00
" conceal weblink1
2017-01-11 22:12:33 +01:00
execute 'syn match VimwikiWeblink1Char "' .vimwiki #vars #get_syntaxlocal ( 'rxWeblink1Prefix1' ) .'"' .s :options
execute 'syn match VimwikiWeblink1Char "' .vimwiki #vars #get_syntaxlocal ( 'rxWeblink1Suffix1' ) .'"' .s :options
2012-06-07 02:00:00 +02:00
if exists ( "+conceallevel" )
syntax conceal off
endif
" }}}
" non concealed chars " {{{
" }}}
" main syntax groups {{{
" Tables
2013-04-19 05:46:58 +02:00
syntax match VimwikiTableRow /^\s*|.\+|\s*$/
2012-06-07 02:00:00 +02:00
\ transparent contains = VimwikiCellSeparator ,
\ VimwikiLinkT ,
\ VimwikiWeblink1T ,
\ VimwikiWikiLink1T ,
\ VimwikiNoExistsLinkT ,
\ VimwikiEmoticons ,
\ VimwikiTodo ,
\ VimwikiBoldT ,
\ VimwikiItalicT ,
\ VimwikiBoldItalicT ,
\ VimwikiItalicBoldT ,
\ VimwikiDelTextT ,
\ VimwikiSuperScriptT ,
\ VimwikiSubScriptT ,
\ VimwikiCodeT ,
\ VimwikiEqInT ,
\ @Spell
" }}}
" header groups highlighting "{{{
"}}}
2013-04-19 05:46:58 +02:00
" syntax group highlighting "{{{
2012-06-07 02:00:00 +02:00
hi def link VimwikiWeblink1 VimwikiLink
hi def link VimwikiWeblink1T VimwikiLink
hi def link VimwikiWikiLink1 VimwikiLink
hi def link VimwikiWikiLink1T VimwikiLink
"}}}
" EMBEDDED syntax setup "{{{
"}}}
"