-" Completely stolen from vim-notes - http://peterodding.com/code/vim/notes/
+" Heavily based on 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
+ let ft = matchstr(line, '```\zs\w*\>')
+ if !empty(ft) && 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
+ if !exists('b:mkd_known_filetypes')
+ let b:mkd_known_filetypes = {}
+ endif
+ if !a:force && (b:mkd_known_filetypes == filetypes || empty(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 startgroup = 'mkdCodeStart'
+ let endgroup = 'mkdCodeEnd'
+ for ft in keys(filetypes)
+ if a:force || !has_key(b:mkd_known_filetypes, ft)
+
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'
+ let command = 'syntax region %s matchgroup=%s start="^\s*```%s$" matchgroup=%s end="\s*```$" 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
+
+ let b:mkd_known_filetypes[ft] = 1
+ endif
+ endfor
endfunction
function! s:syntax_include(filetype)
endfunction
-function! s:Markdown_refresh_syntax()
- if &filetype == 'mkd' && line('$') > 1
- call s:Markdown_highlight_sources(0)
+function! s:Markdown_refresh_syntax(force)
+ if &filetype == 'markdown' && line('$') > 1
+ call s:Markdown_highlight_sources(a:force)
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()
+ au BufReadPost * call s:Markdown_refresh_syntax(1)
+ au BufWritePost * call s:Markdown_refresh_syntax(0)
+ au InsertEnter,InsertLeave * call s:Markdown_refresh_syntax(0)
+ au CursorHold,CursorHoldI * call s:Markdown_refresh_syntax(0)
augroup END
-