From: Chayoung You Date: Thu, 3 Mar 2016 02:05:02 +0000 (+0900) Subject: Support more general fenced code block X-Git-Url: https://git.madduck.net/etc/vim.git/commitdiff_plain/25878961d0b526615df6ea7beb0d28cf75528205?hp=f9912eed04e13034e7d1da7287bf215446097f71 Support more general fenced code block --- diff --git a/ftplugin/markdown.vim b/ftplugin/markdown.vim index 14c24bc..5db57d8 100644 --- a/ftplugin/markdown.vim +++ b/ftplugin/markdown.vim @@ -640,7 +640,7 @@ function! s:MarkdownHighlightSources(force) " Look for code blocks in the current file let filetypes = {} for line in getline(1, '$') - let ft = matchstr(line, '```\zs[0-9A-Za-z_+-]*') + let ft = matchstr(line, '```\s*\zs[0-9A-Za-z_+-]*') if !empty(ft) && ft !~ '^\d*$' | let filetypes[ft] = 1 | endif endfor if !exists('b:mkd_known_filetypes') @@ -671,7 +671,7 @@ function! s:MarkdownHighlightSources(force) else let include = '@' . toupper(filetype) endif - let command = 'syntax region %s matchgroup=%s start="^\s*```%s$" matchgroup=%s end="\s*```$" keepend contains=%s%s' + let command = 'syntax region %s matchgroup=%s start="^\s*```\s*%s$" matchgroup=%s end="\s*```$" keepend contains=%s%s' execute printf(command, group, startgroup, ft, endgroup, include, has('conceal') && get(g:, 'vim_markdown_conceal', 1) ? ' concealends' : '') execute printf('syntax cluster mkdNonListItem add=%s', group) diff --git a/test/syntax.vader b/test/syntax.vader index e36c835..044a7d1 100644 --- a/test/syntax.vader +++ b/test/syntax.vader @@ -423,6 +423,36 @@ Execute (fenced code block syntax with a language specifier): AssertEqual SyntaxOf('code'), 'mkdSnippetCPP' AssertEqual SyntaxOf('def'), 'rubyDefine' +Given markdown; +``` c++ +#include +code +``` + +``` vim +let g:a = 1 +``` + +``` ruby +def a +end +``` + +``` +ruby +class B +end +``` + +Execute (fenced code block syntax with a language specifier after whitespace): + let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'MarkdownRefreshSyntax') + call b:func(0) + AssertEqual SyntaxOf('include'), 'cInclude' + AssertEqual SyntaxOf('code'), 'mkdSnippetCPP' + AssertEqual SyntaxOf('g:a'), 'vimVar' + AssertEqual SyntaxOf('def'), 'rubyDefine' + AssertNotEqual SyntaxOf('class'), 'rubyClass' + Given markdown; ```vim let g:a = 1