]>
git.madduck.net Git - etc/vim.git/blobdiff - plugin/mkd.vim
madduck's git repository
Every one of the projects in this repository is available at the canonical
URL git://git.madduck.net/madduck/pub/<projectpath> — see
each project's metadata for the exact URL.
All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@ git. madduck. net .
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
SSH access, as well as push access can be individually
arranged .
If you use my repositories frequently, consider adding the following
snippet to ~/.gitconfig and using the third clone URL listed for each
project:
[url "git://git.madduck.net/madduck/"]
insteadOf = madduck:
-" Completely stolen from vim-notes - http://peterodding.com/code/vim/notes/
-function! s:Markdown_highlight_sources(force )
+" Heavily based on vim-notes - http://peterodding.com/code/vim/notes/
+function! s:Markdown_highlight_sources()
" Syntax highlight source code embedded in notes.
" Look for code blocks in the current file
let filetypes = {}
for line in getline(1, '$')
" 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
- " 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 b:mkd_known_filetypes == filetypes || empty(filetypes)
- else
- let b:mkd_previous_sources = filetypes
" Now we're ready to actually highlight the code blocks.
" 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 !has_key(b:mkd_known_filetypes, ft)
+
let group = 'mkdSnippet' . toupper(ft)
let include = s:syntax_include(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)
execute printf(command, group, startgroup, ft, endgroup, include, has('conceal') ? ' concealends' : '')
execute printf('syntax cluster mkdNonListItem add=%s', group)
+
+ let b:mkd_known_filetypes[ft] = 1
+ endif
+ endfor
endfunction
function! s:syntax_include(filetype)
endfunction
function! s:syntax_include(filetype)
function! s:Markdown_refresh_syntax()
if &filetype == 'mkd' && line('$') > 1
function! s:Markdown_refresh_syntax()
if &filetype == 'mkd' && line('$') > 1
- call s:Markdown_highlight_sources(0 )
+ call s:Markdown_highlight_sources()
au InsertEnter,InsertLeave * call s:Markdown_refresh_syntax()
au CursorHold,CursorHoldI * call s:Markdown_refresh_syntax()
augroup END
au InsertEnter,InsertLeave * call s:Markdown_refresh_syntax()
au CursorHold,CursorHoldI * call s:Markdown_refresh_syntax()
augroup END