--- /dev/null
+" Completely stolen from vim-notes - http://peterodding.com/code/vim/notes/
+function! s:Markdown_highlight_sources(force)
+ " Syntax highlight source code embedded in notes.
+ " Look for code blocks in the current file
+ let filetypes = {}
+ for line in getline(1, '$')
+ let ft = matchstr(line, '```\zs\w\+\>')
+ if ft !~ '^\d*$' | let filetypes[ft] = 1 | endif
+ endfor
+ " Don't refresh the highlighting if nothing has changed.
+ if !a:force && exists('b:mkd_previous_sources') && b:mkd_previous_sources == filetypes
+ return
+ else
+ let b:mkd_previous_sources = filetypes
+ endif
+ " Now we're ready to actually highlight the code blocks.
+ if !empty(filetypes)
+ let startgroup = 'mkdCodeStart'
+ let endgroup = 'mkdCodeEnd'
+ for ft in keys(filetypes)
+ let group = 'mkdSnippet' . toupper(ft)
+ let include = s:syntax_include(ft)
+ let command = 'syntax region %s matchgroup=%s start="^```%s$" matchgroup=%s end="^```$" keepend contains=%s%s'
+ execute printf(command, group, startgroup, ft, endgroup, include, has('conceal') ? ' concealends' : '')
+ execute printf('syntax cluster mkdNonListItem add=%s', group)
+ endfor
+ endif
+endfunction
+
+function! s:syntax_include(filetype)
+ " Include the syntax highlighting of another {filetype}.
+ let grouplistname = '@' . toupper(a:filetype)
+ " Unset the name of the current syntax while including the other syntax
+ " because some syntax scripts do nothing when "b:current_syntax" is set
+ if exists('b:current_syntax')
+ let syntax_save = b:current_syntax
+ unlet b:current_syntax
+ endif
+ try
+ execute 'syntax include' grouplistname 'syntax/' . a:filetype . '.vim'
+ execute 'syntax include' grouplistname 'after/syntax/' . a:filetype . '.vim'
+ catch /E484/
+ " Ignore missing scripts
+ endtry
+ " Restore the name of the current syntax
+ if exists('syntax_save')
+ let b:current_syntax = syntax_save
+ elseif exists('b:current_syntax')
+ unlet b:current_syntax
+ endif
+ return grouplistname
+endfunction
+
+
+function! s:Markdown_refresh_syntax()
+ if &filetype == 'mkd' && line('$') > 1
+ call s:Markdown_highlight_sources(0)
+ endif
+endfunction
+
+augroup Mkd
+ autocmd!
+ au BufReadPost * call s:Markdown_refresh_syntax()
+ au BufReadPost,BufWritePost * call s:Markdown_refresh_syntax()
+ au InsertEnter,InsertLeave * call s:Markdown_refresh_syntax()
+ au CursorHold,CursorHoldI * call s:Markdown_refresh_syntax()
+augroup END
+
syn region mkdCode start=/^\s*```\s*[0-9A-Za-z_+-]*\s*$/ end=/^\s*```\s*$/
syn region mkdCode start=/\s*\~\~[^\~]*/ end=/[^\~]*\~\~\s*/
syn region mkdCode start=/^\s*\~\~\~\s*[0-9A-Za-z_+-]*\s*$/ end=/^\s*\~\~\~\s*$/
+syn match mkdCodeStart /^```\w*$/
+syn match mkdCodeEnd /^```$/
syn region mkdCode start="<pre[^>]*>" end="</pre>"
syn region mkdCode start="<code[^>]*>" end="</code>"
syn region mkdFootnote start="\[^" end="\]"
syn region mkdMath matchgroup=mkdDelimiter start="\\\@<!\$\$" end="\$\$" contains=@tex
endif
-syn cluster mkdNonListItem contains=@htmlTop,htmlItalic,htmlBold,htmlBoldItalic,mkdFootnotes,mkdInlineURL,mkdLink,mkdLinkDef,mkdLineBreak,mkdBlockquote,mkdCode,mkdListItem,mkdRule,htmlH1,htmlH2,htmlH3,htmlH4,htmlH5,htmlH6,mkdMath
+syn cluster mkdNonListItem contains=@htmlTop,htmlItalic,htmlBold,htmlBoldItalic,mkdFootnotes,mkdInlineURL,mkdLink,mkdLinkDef,mkdLineBreak,mkdBlockquote,mkdCode,mkdListItem,mkdRule,htmlH1,htmlH2,htmlH3,htmlH4,htmlH5,htmlH6,mkdMath,mkdCodeStart,mkdCodeEnd
"highlighting for Markdown groups
HtmlHiLink mkdString String