X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/e4ba18e1fb1f540307565b0d4a64b4dddd03d561..9893e1c01d0129e063589872128051e91abf4f7e:/plugin/mkd.vim diff --git a/plugin/mkd.vim b/plugin/mkd.vim index 50bf9a7..368485e 100644 --- a/plugin/mkd.vim +++ b/plugin/mkd.vim @@ -1,30 +1,34 @@ -" 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) @@ -52,17 +56,16 @@ 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 -