summaryrefslogtreecommitdiff
path: root/syntax/vimwiki_markdown_custom.vim
diff options
context:
space:
mode:
Diffstat (limited to 'syntax/vimwiki_markdown_custom.vim')
-rw-r--r--syntax/vimwiki_markdown_custom.vim392
1 files changed, 392 insertions, 0 deletions
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 <stu.andrews@gmail.com>
+" 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 = '[\]\[]\@<!'
+let g:vimwiki_rxWikiLink1InvalidSuffix = '[\]\[]\@!'
+let g:vimwiki_rxWikiLink1Prefix = g:vimwiki_rxWikiLink1InvalidPrefix.
+ \ g:vimwiki_rxWikiLink1Prefix
+let g:vimwiki_rxWikiLink1Suffix = g:vimwiki_rxWikiLink1Suffix.
+ \ g:vimwiki_rxWikiLink1InvalidSuffix
+
+"
+" 1. [URL][], [DESCRIPTION][URL]
+" 1a) match [URL][], [DESCRIPTION][URL]
+let g:vimwiki_rxWikiLink1 = g:vimwiki_rxWikiLink1Prefix.
+ \ g:vimwiki_rxWikiLink1Url. g:vimwiki_rxWikiLink1Separator.
+ \ g:vimwiki_rxWikiLink1Suffix.
+ \ '\|'. g:vimwiki_rxWikiLink1Prefix.
+ \ g:vimwiki_rxWikiLink1Descr.g:vimwiki_rxWikiLink1Separator.
+ \ g:vimwiki_rxWikiLink1Url.g:vimwiki_rxWikiLink1Suffix
+" 1b) match URL within [URL][], [DESCRIPTION][URL]
+let g:vimwiki_rxWikiLink1MatchUrl = g:vimwiki_rxWikiLink1Prefix.
+ \ '\zs'. g:vimwiki_rxWikiLink1Url. '\ze'. g:vimwiki_rxWikiLink1Separator.
+ \ g:vimwiki_rxWikiLink1Suffix.
+ \ '\|'. g:vimwiki_rxWikiLink1Prefix.
+ \ g:vimwiki_rxWikiLink1Descr. g:vimwiki_rxWikiLink1Separator.
+ \ '\zs'. g:vimwiki_rxWikiLink1Url. '\ze'. g:vimwiki_rxWikiLink1Suffix
+" 1c) match DESCRIPTION within [DESCRIPTION][URL]
+let g:vimwiki_rxWikiLink1MatchDescr = g:vimwiki_rxWikiLink1Prefix.
+ \ '\zs'. g:vimwiki_rxWikiLink1Descr.'\ze'. g:vimwiki_rxWikiLink1Separator.
+ \ g:vimwiki_rxWikiLink1Url.g:vimwiki_rxWikiLink1Suffix
+" }}}
+
+" LINKS: Syntax helper {{{
+let g:vimwiki_rxWikiLink1Prefix1 = g:vimwiki_rxWikiLink1Prefix
+let g:vimwiki_rxWikiLink1Suffix1 = g:vimwiki_rxWikiLink1Separator.
+ \ g:vimwiki_rxWikiLink1Url.g:vimwiki_rxWikiLink1Suffix
+" }}}
+
+" *. ANY wikilink {{{
+" *a) match ANY wikilink
+let g:vimwiki_rxWikiLink = ''.
+ \ g:vimwiki_rxWikiLink0.'\|'.
+ \ g:vimwiki_rxWikiLink1
+" *b) match URL within ANY wikilink
+let g:vimwiki_rxWikiLinkMatchUrl = ''.
+ \ g:vimwiki_rxWikiLink0MatchUrl.'\|'.
+ \ g:vimwiki_rxWikiLink1MatchUrl
+" *c) match DESCRIPTION within ANY wikilink
+let g:vimwiki_rxWikiLinkMatchDescr = ''.
+ \ g:vimwiki_rxWikiLink0MatchDescr.'\|'.
+ \ g:vimwiki_rxWikiLink1MatchDescr
+" }}}
+
+" LINKS: setup of wikiincl regexps {{{
+" }}}
+
+" LINKS: Syntax helper {{{
+" }}}
+
+" LINKS: Setup weblink0 regexps {{{
+" 0. URL : free-standing links: keep URL UR(L) strip trailing punct: URL; URL) UR(L))
+let g:vimwiki_rxWeblink0 = g:vimwiki_rxWeblink
+" 0a) match URL within URL
+let g:vimwiki_rxWeblinkMatchUrl0 = g:vimwiki_rxWeblinkMatchUrl
+" 0b) match DESCRIPTION within URL
+let g:vimwiki_rxWeblinkMatchDescr0 = g:vimwiki_rxWeblinkMatchDescr
+" }}}
+
+" LINKS: Setup weblink1 regexps {{{
+let g:vimwiki_rxWeblink1Prefix = '['
+let g:vimwiki_rxWeblink1Suffix = ')'
+let g:vimwiki_rxWeblink1Separator = ']('
+" [DESCRIPTION](URL)
+let g:vimwiki_Weblink1Template = g:vimwiki_rxWeblink1Prefix . '__LinkDescription__'.
+ \ g:vimwiki_rxWeblink1Separator. '__LinkUrl__'.
+ \ g:vimwiki_rxWeblink1Suffix
+
+let magic_chars = '.*[]\^$'
+let valid_chars = '[^\\]'
+
+let g:vimwiki_rxWeblink1Prefix = escape(g:vimwiki_rxWeblink1Prefix, magic_chars)
+let g:vimwiki_rxWeblink1Suffix = escape(g:vimwiki_rxWeblink1Suffix, magic_chars)
+let g:vimwiki_rxWeblink1Separator = escape(g:vimwiki_rxWeblink1Separator, magic_chars)
+let g:vimwiki_rxWeblink1Url = valid_chars.'\{-}'
+let g:vimwiki_rxWeblink1Descr = valid_chars.'\{-}'
+
+"
+" " 2012-02-04 TODO not starting with [[ or ][ ? ... prefix = '[\[\]]\@<!\['
+" 1. [DESCRIPTION](URL)
+" 1a) match [DESCRIPTION](URL)
+let g:vimwiki_rxWeblink1 = g:vimwiki_rxWeblink1Prefix.
+ \ g:vimwiki_rxWeblink1Url.g:vimwiki_rxWeblink1Separator.
+ \ g:vimwiki_rxWeblink1Descr.g:vimwiki_rxWeblink1Suffix
+" 1b) match URL within [DESCRIPTION](URL)
+let g:vimwiki_rxWeblink1MatchUrl = g:vimwiki_rxWeblink1Prefix.
+ \ g:vimwiki_rxWeblink1Descr. g:vimwiki_rxWeblink1Separator.
+ \ '\zs'.g:vimwiki_rxWeblink1Url.'\ze'. g:vimwiki_rxWeblink1Suffix
+" 1c) match DESCRIPTION within [DESCRIPTION](URL)
+let g:vimwiki_rxWeblink1MatchDescr = g:vimwiki_rxWeblink1Prefix.
+ \ '\zs'.g:vimwiki_rxWeblink1Descr.'\ze'. g:vimwiki_rxWeblink1Separator.
+ \ g:vimwiki_rxWeblink1Url. g:vimwiki_rxWeblink1Suffix
+" }}}
+
+" Syntax helper {{{
+" TODO: image links too !!
+" let g:vimwiki_rxWeblink1Prefix1 = '!\?'. g:vimwiki_rxWeblink1Prefix
+let g:vimwiki_rxWeblink1Prefix1 = g:vimwiki_rxWeblink1Prefix
+let g:vimwiki_rxWeblink1Suffix1 = g:vimwiki_rxWeblink1Separator.
+ \ g:vimwiki_rxWeblink1Url.g:vimwiki_rxWeblink1Suffix
+" }}}
+
+" *. ANY weblink {{{
+" *a) match ANY weblink
+let g:vimwiki_rxWeblink = ''.
+ \ g:vimwiki_rxWeblink1.'\|'.
+ \ g:vimwiki_rxWeblink0
+" *b) match URL within ANY weblink
+let g:vimwiki_rxWeblinkMatchUrl = ''.
+ \ g:vimwiki_rxWeblink1MatchUrl.'\|'.
+ \ g:vimwiki_rxWeblinkMatchUrl0
+" *c) match DESCRIPTION within ANY weblink
+let g:vimwiki_rxWeblinkMatchDescr = ''.
+ \ g:vimwiki_rxWeblink1MatchDescr.'\|'.
+ \ g:vimwiki_rxWeblinkMatchDescr0
+" }}}
+
+
+" LINKS: Setup anylink regexps {{{
+let g:vimwiki_rxAnyLink = g:vimwiki_rxWikiLink.'\|'.
+ \ g:vimwiki_rxWikiIncl.'\|'.g:vimwiki_rxWeblink
+" }}}
+
+
+" LINKS: setup wikilink1 reference link definitions {{{
+let g:vimwiki_rxMkdRef = '\['.g:vimwiki_rxWikiLinkDescr.']:\%(\s\+\|\n\)'.
+ \ g:vimwiki_rxWeblink0
+let g:vimwiki_rxMkdRefMatchDescr = '\[\zs'.g:vimwiki_rxWikiLinkDescr.'\ze]:\%(\s\+\|\n\)'.
+ \ g:vimwiki_rxWeblink0
+let g:vimwiki_rxMkdRefMatchUrl = '\['.g:vimwiki_rxWikiLinkDescr.']:\%(\s\+\|\n\)\zs'.
+ \ g:vimwiki_rxWeblink0.'\ze'
+" }}}
+
+" }}} end of Links
+
+" LINKS: highlighting is complicated due to "nonexistent" links feature {{{
+function! s:add_target_syntax_ON(target, type) " {{{
+ if g:vimwiki_debug > 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 "{{{
+"}}}
+"