From 8625978e9955c43a8135751a21da262b0e0d8af4 Mon Sep 17 00:00:00 2001 From: Hugues Hiegel Date: Tue, 23 Dec 2014 17:00:28 +0100 Subject: [plugins] VimWiki + Todo Power --- syntax/vimwiki_markdown_custom.vim | 392 +++++++++++++++++++++++++++++++++++++ 1 file changed, 392 insertions(+) create mode 100644 syntax/vimwiki_markdown_custom.vim (limited to 'syntax/vimwiki_markdown_custom.vim') diff --git a/syntax/vimwiki_markdown_custom.vim b/syntax/vimwiki_markdown_custom.vim new file mode 100644 index 0000000..94ab358 --- /dev/null +++ b/syntax/vimwiki_markdown_custom.vim @@ -0,0 +1,392 @@ +" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79 +" Vimwiki syntax file +" Author: Stuart Andrews +" Home: http://code.google.com/p/vimwiki/ + +" LINKS: assume this is common to all syntaxes "{{{ + +" }}} + +" ------------------------------------------------------------------------- +" Load concrete Wiki syntax: sets regexes and templates for headers and links + +" ------------------------------------------------------------------------- + + + +" LINKS: setup of larger regexes {{{ + +" LINKS: setup wikilink0 regexps {{{ +" 0. [[URL]], or [[URL|DESCRIPTION]] + +" 0a) match [[URL|DESCRIPTION]] +let g:vimwiki_rxWikiLink0 = g:vimwiki_rxWikiLink +" 0b) match URL within [[URL|DESCRIPTION]] +let g:vimwiki_rxWikiLink0MatchUrl = g:vimwiki_rxWikiLinkMatchUrl +" 0c) match DESCRIPTION within [[URL|DESCRIPTION]] +let g:vimwiki_rxWikiLink0MatchDescr = g:vimwiki_rxWikiLinkMatchDescr +" }}} + +" LINKS: setup wikilink1 regexps {{{ +" 1. [URL][], or [DESCRIPTION][URL] + +let g:vimwiki_rxWikiLink1Prefix = '[' +let g:vimwiki_rxWikiLink1Suffix = ']' +let g:vimwiki_rxWikiLink1Separator = '][' + +" [URL][] +let g:vimwiki_WikiLink1Template1 = g:vimwiki_rxWikiLink1Prefix . '__LinkUrl__'. + \ g:vimwiki_rxWikiLink1Separator. g:vimwiki_rxWikiLink1Suffix +" [DESCRIPTION][URL] +let g:vimwiki_WikiLink1Template2 = g:vimwiki_rxWikiLink1Prefix . '__LinkDescription__'. + \ g:vimwiki_rxWikiLink1Separator. '__LinkUrl__'. + \ g:vimwiki_rxWikiLink1Suffix +" +let magic_chars = '.*[]\^$' +let valid_chars = '[^\\\[\]]' + +let g:vimwiki_rxWikiLink1Prefix = escape(g:vimwiki_rxWikiLink1Prefix, magic_chars) +let g:vimwiki_rxWikiLink1Suffix = escape(g:vimwiki_rxWikiLink1Suffix, magic_chars) +let g:vimwiki_rxWikiLink1Separator = escape(g:vimwiki_rxWikiLink1Separator, magic_chars) +let g:vimwiki_rxWikiLink1Url = valid_chars.'\{-}' +let g:vimwiki_rxWikiLink1Descr = valid_chars.'\{-}' + +let g:vimwiki_rxWikiLink1InvalidPrefix = '[\]\[]\@ 1 + echom '[vimwiki_debug] syntax target > '.a:target + endif + 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) " {{{ + if g:vimwiki_debug > 1 + echom '[vimwiki_debug] syntax target > '.a:target + endif + 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) "{{{ + return g:vimwiki_rxWikiLink1InvalidPrefix.a:target. + \ g:vimwiki_rxWikiLink1InvalidSuffix +endfunction "}}} + +function! s:existing_mkd_refs() "{{{ + call vimwiki#markdown_base#reset_mkd_refs() + return "\n".join(keys(vimwiki#markdown_base#get_reflinks()), "\n")."\n" +endfunction "}}} + +function! s:highlight_existing_links() "{{{ + " Wikilink1 + " Conditional highlighting that depends on the existence of a wiki file or + " directory is only available for *schemeless* wiki links + " Links are set up upon BufEnter (see plugin/...) + let safe_links = vimwiki#base#file_pattern(b:existing_wikifiles) + " Wikilink1 Dirs set up upon BufEnter (see plugin/...) + let safe_dirs = vimwiki#base#file_pattern(b: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(g:vimwiki_WikiLink1Template1, + \ safe_links, g:vimwiki_rxWikiLink1Descr, '') + call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1') + " match [DESCRIPTION][URL] + let target = vimwiki#base#apply_template(g:vimwiki_WikiLink1Template2, + \ safe_links, g:vimwiki_rxWikiLink1Descr, '') + call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1') + + " match [DIRURL][] + let target = vimwiki#base#apply_template(g:vimwiki_WikiLink1Template1, + \ safe_dirs, g:vimwiki_rxWikiLink1Descr, '') + call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1') + " match [DESCRIPTION][DIRURL] + let target = vimwiki#base#apply_template(g:vimwiki_WikiLink1Template2, + \ safe_dirs, g:vimwiki_rxWikiLink1Descr, '') + call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1') + + " match [MKDREF][] + let target = vimwiki#base#apply_template(g:vimwiki_WikiLink1Template1, + \ safe_reflinks, g:vimwiki_rxWikiLink1Descr, '') + call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1') + " match [DESCRIPTION][MKDREF] + let target = vimwiki#base#apply_template(g:vimwiki_WikiLink1Template2, + \ safe_reflinks, g:vimwiki_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 VimwikiGet('maxhi') + " WikiLink + call s:add_target_syntax_OFF(g:vimwiki_rxWikiLink1, 'VimwikiWikiLink1') + + " Subsequently, links verified on vimwiki's path are highlighted as existing + let time01 = vimwiki#u#time(starttime) "XXX + call s:highlight_existing_links() + let time02 = vimwiki#u#time(starttime) "XXX +else + let time01 = vimwiki#u#time(starttime) "XXX + " Wikilink + call s:add_target_syntax_ON(g:vimwiki_rxWikiLink1, 'VimwikiWikiLink1') + let time02 = vimwiki#u#time(starttime) "XXX +endif + +" Weblink +call s:add_target_syntax_ON(g:vimwiki_rxWeblink1, 'VimwikiWeblink1') + +" WikiLink +" All remaining schemes are highlighted automatically +let rxSchemes = '\%('. + \ join(split(g:vimwiki_schemes, '\s*,\s*'), '\|').'\|'. + \ join(split(g:vimwiki_web_schemes1, '\s*,\s*'), '\|'). + \ '\):' + +" a) match [nonwiki-scheme-URL] +let target = vimwiki#base#apply_template(g:vimwiki_WikiLink1Template1, + \ rxSchemes.g:vimwiki_rxWikiLink1Url, g:vimwiki_rxWikiLink1Descr, '') +call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1') +" b) match [DESCRIPTION][nonwiki-scheme-URL] +let target = vimwiki#base#apply_template(g:vimwiki_WikiLink1Template2, + \ rxSchemes.g:vimwiki_rxWikiLink1Url, g:vimwiki_rxWikiLink1Descr, '') +call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1') +" }}} + + +" generic headers "{{{ + +" Header levels, 1-6 +for i in range(1,6) + execute 'syntax match VimwikiHeader'.i.' /'.g:vimwiki_rxH{i}.'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiCode,VimwikiLink,VimwikiWeblink1,VimwikiWikiLink1,@Spell' +endfor + +" }}} + +" concealed chars " {{{ +if exists("+conceallevel") + syntax conceal on +endif + +syntax spell toplevel + +if g:vimwiki_debug > 1 + echom 'WikiLink1 Prefix: '.g:vimwiki_rxWikiLink1Prefix1 + echom 'WikiLink1 Suffix: '.g:vimwiki_rxWikiLink1Suffix1 + echom 'Weblink1 Prefix: '.g:vimwiki_rxWeblink1Prefix1 + echom 'Weblink1 Suffix: '.g:vimwiki_rxWeblink1Suffix1 +endif + +" VimwikiWikiLink1Char is for syntax markers (and also URL when a description +" is present) and may be concealed +let options = ' contained transparent contains=NONE' +" conceal wikilink1 +execute 'syn match VimwikiWikiLink1Char /'.g:vimwiki_rxWikiLink1Prefix.'/'.options +execute 'syn match VimwikiWikiLink1Char /'.g:vimwiki_rxWikiLink1Suffix.'/'.options +execute 'syn match VimwikiWikiLink1Char /'.g:vimwiki_rxWikiLink1Prefix1.'/'.options +execute 'syn match VimwikiWikiLink1Char /'.g:vimwiki_rxWikiLink1Suffix1.'/'.options + +" conceal weblink1 +execute 'syn match VimwikiWeblink1Char "'.g:vimwiki_rxWeblink1Prefix1.'"'.options +execute 'syn match VimwikiWeblink1Char "'.g:vimwiki_rxWeblink1Suffix1.'"'.options + +if exists("+conceallevel") + syntax conceal off +endif +" }}} + +" non concealed chars " {{{ +" }}} + +" main syntax groups {{{ + +" Tables +syntax match VimwikiTableRow /^\s*|.\+|\s*$/ + \ transparent contains=VimwikiCellSeparator, + \ VimwikiLinkT, + \ VimwikiWeblink1T, + \ VimwikiWikiLink1T, + \ VimwikiNoExistsLinkT, + \ VimwikiEmoticons, + \ VimwikiTodo, + \ VimwikiBoldT, + \ VimwikiItalicT, + \ VimwikiBoldItalicT, + \ VimwikiItalicBoldT, + \ VimwikiDelTextT, + \ VimwikiSuperScriptT, + \ VimwikiSubScriptT, + \ VimwikiCodeT, + \ VimwikiEqInT, + \ @Spell + +" }}} + +" header groups highlighting "{{{ +"}}} + + +" syntax group highlighting "{{{ +hi def link VimwikiWeblink1 VimwikiLink +hi def link VimwikiWeblink1T VimwikiLink + +hi def link VimwikiWikiLink1 VimwikiLink +hi def link VimwikiWikiLink1T VimwikiLink +"}}} + + + +" EMBEDDED syntax setup "{{{ +"}}} +" -- cgit v1.2.3