Before: unlet! b:mkd_known_filetypes unlet! b:mkd_included_filetypes unlet! g:vim_markdown_math Given markdown; a **b** c Execute (bold): AssertNotEqual SyntaxOf('a'), 'htmlBold' AssertEqual SyntaxOf('b'), 'htmlBold' AssertNotEqual SyntaxOf('c'), 'htmlBold' Given markdown; a __b__ c Execute (bold): AssertNotEqual SyntaxOf('a'), 'htmlBold' AssertEqual SyntaxOf('b'), 'htmlBold' AssertNotEqual SyntaxOf('c'), 'htmlBold' Given markdown; a *b* c Execute (italic): AssertNotEqual SyntaxOf('a'), 'htmlItalic' AssertEqual SyntaxOf('b'), 'htmlItalic' AssertNotEqual SyntaxOf('c'), 'htmlItalic' Given markdown; a _b_ c Execute (italic): AssertNotEqual SyntaxOf('a'), 'htmlItalic' AssertEqual SyntaxOf('b'), 'htmlItalic' AssertNotEqual SyntaxOf('c'), 'htmlItalic' Given markdown; _a_b_ Execute (italic text has underscores): AssertEqual SyntaxOf('a'), 'htmlItalic' AssertEqual SyntaxOf('b'), 'htmlItalic' Given markdown; a \*b\* c Execute (not italic with escaped asterisks): AssertNotEqual SyntaxOf('a'), 'htmlItalic' AssertNotEqual SyntaxOf('b'), 'htmlItalic' AssertNotEqual SyntaxOf('c'), 'htmlItalic' Given markdown; a \_b\_ c Execute (not italic with escaped underscores): AssertNotEqual SyntaxOf('a'), 'htmlItalic' AssertNotEqual SyntaxOf('b'), 'htmlItalic' AssertNotEqual SyntaxOf('c'), 'htmlItalic' Given markdown; a _b\_c_ d Execute (italic with escaped underscores): AssertNotEqual SyntaxOf('a'), 'htmlItalic' AssertEqual SyntaxOf('b'), 'htmlItalic' AssertEqual SyntaxOf('c'), 'htmlItalic' AssertNotEqual SyntaxOf('d'), 'htmlItalic' Given markdown; a_b_c Execute (not italic underscores within text): AssertNotEqual SyntaxOf('a'), 'htmlItalic' AssertNotEqual SyntaxOf('b'), 'htmlItalic' AssertNotEqual SyntaxOf('c'), 'htmlItalic' Given markdown; a *b\*c* d Execute (italic with escaped asterisks): AssertNotEqual SyntaxOf('a'), 'htmlItalic' AssertEqual SyntaxOf('b'), 'htmlItalic' AssertEqual SyntaxOf('c'), 'htmlItalic' AssertNotEqual SyntaxOf('d'), 'htmlItalic' Given markdown; a __b\_\_c__ d Execute (bold with escaped underscores): AssertNotEqual SyntaxOf('a'), 'htmlBold' AssertEqual SyntaxOf('b'), 'htmlBold' AssertEqual SyntaxOf('c'), 'htmlBold' AssertNotEqual SyntaxOf('d'), 'htmlBold' Given markdown; _a b c_ d Execute (italic with underscores in multiple lines): AssertEqual SyntaxOf('a'), 'htmlItalic' AssertEqual SyntaxOf('b'), 'htmlItalic' AssertEqual SyntaxOf('c'), 'htmlItalic' AssertNotEqual SyntaxOf('d'), 'htmlItalic' Given markdown; __a b c__ d Execute (bold with underscores in multiple lines): AssertEqual SyntaxOf('a'), 'htmlBold' AssertEqual SyntaxOf('b'), 'htmlBold' AssertEqual SyntaxOf('c'), 'htmlBold' AssertNotEqual SyntaxOf('d'), 'htmlBold' Given markdown; ___a b c___ d Execute (bold italic with underscores in multiple lines): AssertEqual SyntaxOf('a'), 'htmlBoldItalic' AssertEqual SyntaxOf('b'), 'htmlBoldItalic' AssertEqual SyntaxOf('c'), 'htmlBoldItalic' AssertNotEqual SyntaxOf('d'), 'htmlBoldItalic' Given markdown; *a b c* d Execute (italic with asterisks in multiple lines): AssertEqual SyntaxOf('a'), 'htmlItalic' AssertEqual SyntaxOf('b'), 'htmlItalic' AssertEqual SyntaxOf('c'), 'htmlItalic' AssertNotEqual SyntaxOf('d'), 'htmlItalic' Given markdown; **a b c** d Execute (bold with asterisks in multiple lines): AssertEqual SyntaxOf('a'), 'htmlBold' AssertEqual SyntaxOf('b'), 'htmlBold' AssertEqual SyntaxOf('c'), 'htmlBold' AssertNotEqual SyntaxOf('d'), 'htmlBold' Given markdown; ***a b c*** d Execute (bold italic with asterisks in multiple lines): AssertEqual SyntaxOf('a'), 'htmlBoldItalic' AssertEqual SyntaxOf('b'), 'htmlBoldItalic' AssertEqual SyntaxOf('c'), 'htmlBoldItalic' AssertNotEqual SyntaxOf('d'), 'htmlBoldItalic' Given markdown; *a Execute (not italic with an asterisk): AssertNotEqual SyntaxOf('a'), 'htmlItalic' Given markdown; [__](a) b Execute (not bold with double underscores): AssertNotEqual SyntaxOf('_'), 'htmlBold' AssertNotEqual SyntaxOf('a'), 'htmlBold' AssertNotEqual SyntaxOf('b'), 'htmlBold' Given markdown; _a_ Execute (conceal italic): if has('conceal') setlocal conceallevel=2 AssertEqual synconcealed(1, 1)[0], 1 AssertEqual synconcealed(1, 2)[0], 0 AssertEqual synconcealed(1, 3)[0], 1 setlocal conceallevel=0 endif Execute (disable conceal): if has('conceal') let g:vim_markdown_conceal=0 syn off | syn on setlocal conceallevel=2 AssertEqual synconcealed(1, 1)[0], 0 AssertEqual synconcealed(1, 2)[0], 0 AssertEqual synconcealed(1, 3)[0], 0 let g:vim_markdown_conceal=1 syn off | syn on AssertEqual synconcealed(1, 1)[0], 1 AssertEqual synconcealed(1, 2)[0], 0 AssertEqual synconcealed(1, 3)[0], 1 setlocal conceallevel=0 unlet g:vim_markdown_conceal syn off | syn on endif Given markdown; *a* Execute (conceal italic): if has('conceal') setlocal conceallevel=2 AssertEqual synconcealed(1, 1)[0], 1 AssertEqual synconcealed(1, 2)[0], 0 AssertEqual synconcealed(1, 3)[0], 1 setlocal conceallevel=0 endif Execute (disable conceal): if has('conceal') let g:vim_markdown_conceal=0 syn off | syn on setlocal conceallevel=2 AssertEqual synconcealed(1, 1)[0], 0 AssertEqual synconcealed(1, 2)[0], 0 AssertEqual synconcealed(1, 3)[0], 0 let g:vim_markdown_conceal=1 syn off | syn on AssertEqual synconcealed(1, 1)[0], 1 AssertEqual synconcealed(1, 2)[0], 0 AssertEqual synconcealed(1, 3)[0], 1 setlocal conceallevel=0 unlet g:vim_markdown_conceal syn off | syn on endif Given markdown; __a__ Execute (conceal bold): if has('conceal') setlocal conceallevel=2 AssertEqual synconcealed(1, 1)[0], 1 AssertEqual synconcealed(1, 2)[0], 1 AssertEqual synconcealed(1, 3)[0], 0 AssertEqual synconcealed(1, 4)[0], 1 AssertEqual synconcealed(1, 5)[0], 1 setlocal conceallevel=0 endif Execute (disable conceal): if has('conceal') let g:vim_markdown_conceal=0 syn off | syn on setlocal conceallevel=2 AssertEqual synconcealed(1, 1)[0], 0 AssertEqual synconcealed(1, 2)[0], 0 AssertEqual synconcealed(1, 3)[0], 0 AssertEqual synconcealed(1, 4)[0], 0 AssertEqual synconcealed(1, 5)[0], 0 let g:vim_markdown_conceal=1 syn off | syn on AssertEqual synconcealed(1, 1)[0], 1 AssertEqual synconcealed(1, 2)[0], 1 AssertEqual synconcealed(1, 3)[0], 0 AssertEqual synconcealed(1, 4)[0], 1 AssertEqual synconcealed(1, 5)[0], 1 setlocal conceallevel=0 unlet g:vim_markdown_conceal syn off | syn on endif Given markdown; **a** Execute (conceal bold): if has('conceal') setlocal conceallevel=2 AssertEqual synconcealed(1, 1)[0], 1 AssertEqual synconcealed(1, 2)[0], 1 AssertEqual synconcealed(1, 3)[0], 0 AssertEqual synconcealed(1, 4)[0], 1 AssertEqual synconcealed(1, 5)[0], 1 setlocal conceallevel=0 endif Execute (disable conceal): if has('conceal') let g:vim_markdown_conceal=0 syn off | syn on setlocal conceallevel=2 AssertEqual synconcealed(1, 1)[0], 0 AssertEqual synconcealed(1, 2)[0], 0 AssertEqual synconcealed(1, 3)[0], 0 AssertEqual synconcealed(1, 4)[0], 0 AssertEqual synconcealed(1, 5)[0], 0 let g:vim_markdown_conceal=1 syn off | syn on AssertEqual synconcealed(1, 1)[0], 1 AssertEqual synconcealed(1, 2)[0], 1 AssertEqual synconcealed(1, 3)[0], 0 AssertEqual synconcealed(1, 4)[0], 1 AssertEqual synconcealed(1, 5)[0], 1 setlocal conceallevel=0 unlet g:vim_markdown_conceal syn off | syn on endif Given markdown; ___a___ Execute (conceal italic bold): if has('conceal') setlocal conceallevel=2 AssertEqual synconcealed(1, 1)[0], 1 AssertEqual synconcealed(1, 2)[0], 1 AssertEqual synconcealed(1, 3)[0], 1 AssertEqual synconcealed(1, 4)[0], 0 AssertEqual synconcealed(1, 5)[0], 1 AssertEqual synconcealed(1, 6)[0], 1 AssertEqual synconcealed(1, 7)[0], 1 setlocal conceallevel=0 endif Execute (disable conceal): if has('conceal') let g:vim_markdown_conceal=0 syn off | syn on setlocal conceallevel=2 AssertEqual synconcealed(1, 1)[0], 0 AssertEqual synconcealed(1, 2)[0], 0 AssertEqual synconcealed(1, 3)[0], 0 AssertEqual synconcealed(1, 4)[0], 0 AssertEqual synconcealed(1, 5)[0], 0 AssertEqual synconcealed(1, 6)[0], 0 AssertEqual synconcealed(1, 7)[0], 0 let g:vim_markdown_conceal=1 syn off | syn on AssertEqual synconcealed(1, 1)[0], 1 AssertEqual synconcealed(1, 2)[0], 1 AssertEqual synconcealed(1, 3)[0], 1 AssertEqual synconcealed(1, 4)[0], 0 AssertEqual synconcealed(1, 5)[0], 1 AssertEqual synconcealed(1, 6)[0], 1 AssertEqual synconcealed(1, 7)[0], 1 setlocal conceallevel=0 unlet g:vim_markdown_conceal syn off | syn on endif Given markdown; ***a*** Execute (conceal italic bold): if has('conceal') setlocal conceallevel=2 AssertEqual synconcealed(1, 1)[0], 1 AssertEqual synconcealed(1, 2)[0], 1 AssertEqual synconcealed(1, 3)[0], 1 AssertEqual synconcealed(1, 4)[0], 0 AssertEqual synconcealed(1, 5)[0], 1 AssertEqual synconcealed(1, 6)[0], 1 AssertEqual synconcealed(1, 7)[0], 1 setlocal conceallevel=0 endif Execute (disable conceal): if has('conceal') let g:vim_markdown_conceal=0 syn off | syn on setlocal conceallevel=2 AssertEqual synconcealed(1, 1)[0], 0 AssertEqual synconcealed(1, 2)[0], 0 AssertEqual synconcealed(1, 3)[0], 0 AssertEqual synconcealed(1, 4)[0], 0 AssertEqual synconcealed(1, 5)[0], 0 AssertEqual synconcealed(1, 6)[0], 0 AssertEqual synconcealed(1, 7)[0], 0 let g:vim_markdown_conceal=1 syn off | syn on AssertEqual synconcealed(1, 1)[0], 1 AssertEqual synconcealed(1, 2)[0], 1 AssertEqual synconcealed(1, 3)[0], 1 AssertEqual synconcealed(1, 4)[0], 0 AssertEqual synconcealed(1, 5)[0], 1 AssertEqual synconcealed(1, 6)[0], 1 AssertEqual synconcealed(1, 7)[0], 1 setlocal conceallevel=0 unlet g:vim_markdown_conceal syn off | syn on endif # Links Given markdown; [a](b) Execute (link with title): AssertEqual SyntaxOf('a'), 'mkdLink' AssertEqual SyntaxOf('b'), 'mkdURL' Given markdown; [a b](c) Execute (link text with newline): AssertEqual SyntaxOf('a'), 'mkdLink' AssertEqual SyntaxOf('b'), 'mkdLink' AssertEqual SyntaxOf('c'), 'mkdURL' Given markdown; [a] b [c](d) Execute (link text with bracket sections): AssertNotEqual SyntaxOf('a'), 'mkdLink' AssertNotEqual SyntaxOf('b'), 'mkdLink' AssertEqual SyntaxOf('c'), 'mkdLink' AssertEqual SyntaxOf('d'), 'mkdURL' Given markdown; [^a]: b Execute (footnote is not link): AssertNotEqual SyntaxOf('a'), 'mkdLinkDef' Given markdown; (a) (b) Execute (parenthesis not in link): AssertNotEqual SyntaxOf('a'), 'mkdURL' AssertNotEqual SyntaxOf('b'), 'mkdURL' Given markdown; [a](b) c [d](e) Execute (multiple links on a line): AssertNotEqual SyntaxOf('c'), 'mkdLink' AssertNotEqual SyntaxOf('c'), 'mkdURL' Given markdown; [a] (b) Execute (space is not allowed between link text and parenthesis): AssertNotEqual SyntaxOf('a'), 'mkdLink' AssertNotEqual SyntaxOf('b'), 'mkdURL' Given markdown; [a](b) Execute (conceal link): if has('conceal') setlocal conceallevel=2 AssertEqual synconcealed(1, 1)[0], 1 AssertEqual synconcealed(1, 2)[0], 0 AssertEqual synconcealed(1, 3)[0], 1 AssertEqual synconcealed(1, 4)[0], 1 AssertEqual synconcealed(1, 4)[0], 1 AssertEqual synconcealed(1, 5)[0], 1 AssertEqual synconcealed(1, 6)[0], 1 setlocal conceallevel=0 endif Execute (disable conceal): if has('conceal') let g:vim_markdown_conceal=0 syn off | syn on setlocal conceallevel=2 AssertEqual synconcealed(1, 1)[0], 0 AssertEqual synconcealed(1, 2)[0], 0 AssertEqual synconcealed(1, 3)[0], 0 AssertEqual synconcealed(1, 4)[0], 0 AssertEqual synconcealed(1, 4)[0], 0 AssertEqual synconcealed(1, 5)[0], 0 AssertEqual synconcealed(1, 6)[0], 0 let g:vim_markdown_conceal=1 syn off | syn on AssertEqual synconcealed(1, 1)[0], 1 AssertEqual synconcealed(1, 2)[0], 0 AssertEqual synconcealed(1, 3)[0], 1 AssertEqual synconcealed(1, 4)[0], 1 AssertEqual synconcealed(1, 4)[0], 1 AssertEqual synconcealed(1, 5)[0], 1 AssertEqual synconcealed(1, 6)[0], 1 setlocal conceallevel=0 unlet g:vim_markdown_conceal syn off | syn on endif # Autolinks Given markdown; a c Execute (autolink): AssertNotEqual SyntaxOf('a'), 'mkdInlineURL' AssertEqual SyntaxOf('<'), 'mkdDelimiter' AssertEqual SyntaxOf('b'), 'mkdInlineURL' AssertEqual SyntaxOf('>'), 'mkdDelimiter' AssertNotEqual SyntaxOf('c'), 'mkdInlineURL' Given markdown; http://12monkeys.foo Execute (autolink with domain starting with a number): AssertEqual SyntaxOf('12monkeys'), 'mkdInlineURL' Given markdown; Execute (autolink with scheme case is insensitive): AssertEqual SyntaxOf('a'), 'mkdInlineURL' Given markdown; Execute (autolink without scheme is not a link): AssertNotEqual SyntaxOf('a'), 'mkdInlineURL' Given markdown; < http://a > Execute (autolink with space is not a link): AssertNotEqual SyntaxOf('a'), 'mkdInlineURL' AssertNotEqual SyntaxOf('b'), 'mkdInlineURL' AssertNotEqual SyntaxOf('c'), 'mkdInlineURL' AssertNotEqual SyntaxOf('d'), 'mkdInlineURL' AssertNotEqual SyntaxOf('e'), 'mkdInlineURL' Given markdown; \ Execute (autolinks can be backslash escaped): AssertNotEqual SyntaxOf('<'), 'mkdDelimiter' Given markdown; a (http://b.bb) c Execute (autolink in parenthesis): AssertNotEqual SyntaxOf('a'), 'mkdInlineURL' AssertEqual SyntaxOf('('), 'mkdDelimiter' AssertEqual SyntaxOf('b'), 'mkdInlineURL' AssertEqual SyntaxOf(')'), 'mkdDelimiter' AssertNotEqual SyntaxOf('c'), 'mkdInlineURL' Given markdown; [![a](http://b)](http://c) Execute (autolink in link text): AssertEqual SyntaxOf('!'), 'mkdDelimiter' AssertEqual SyntaxOf('a'), 'mkdLink' AssertEqual SyntaxOf('b'), 'mkdURL' AssertEqual SyntaxOf('c'), 'mkdURL' Given markdown; # [h1link](url) ## [h2link](url) ### [h3link](url) #### [h4link](url) ##### [h5link](url) ###### [h6link](url) [h1link_b](url) =============== [h2link_b](url) --------------- Execute (link in headers): AssertEqual SyntaxOf('h1link'), 'mkdLink' AssertEqual SyntaxOf('h2link'), 'mkdLink' AssertEqual SyntaxOf('h3link'), 'mkdLink' AssertEqual SyntaxOf('h4link'), 'mkdLink' AssertEqual SyntaxOf('h5link'), 'mkdLink' AssertEqual SyntaxOf('h6link'), 'mkdLink' AssertEqual SyntaxOf('h1link_b'), 'mkdLink' AssertEqual SyntaxOf('h2link_b'), 'mkdLink' Given markdown; # http://h1link.foo ## http://h2link.foo ### http://h3link.foo #### http://h4link.foo ##### http://h5link.foo ###### http://h6link.foo http://h1link_b.foo =================== http://h2link_b.foo ------------------- Execute (inline url in headers): AssertEqual SyntaxOf('h1link'), 'mkdInlineURL' AssertEqual SyntaxOf('h2link'), 'mkdInlineURL' AssertEqual SyntaxOf('h3link'), 'mkdInlineURL' AssertEqual SyntaxOf('h4link'), 'mkdInlineURL' AssertEqual SyntaxOf('h5link'), 'mkdInlineURL' AssertEqual SyntaxOf('h6link'), 'mkdInlineURL' AssertEqual SyntaxOf('h1link_b'), 'mkdInlineURL' AssertEqual SyntaxOf('h2link_b'), 'mkdInlineURL' Given markdown; > [a](b) > http://foo.bar Execute (link in blockquote): AssertEqual SyntaxOf('a'), 'mkdLink' AssertEqual SyntaxOf('foo'), 'mkdInlineURL' Given markdown; [https://domain.tld](https://domain.com) not_a_link Execute (link with url title): AssertEqual SyntaxOf('https://domain.tld'), 'mkdInlineURL' AssertEqual SyntaxOf('https://domain.com'), 'mkdInlineURL' AssertNotEqual SyntaxOf('not_a_link'), 'mkdInlineURL' # Code Blocks Given markdown; ~~~ code ~~~ Execute (code blocks can be fenced with tildes): AssertEqual SyntaxOf('c'), 'mkdCode' Given markdown; ~~~~ code ~~~~~ Execute (code blocks can be fenced with tildes longer than 3): AssertEqual SyntaxOf('c'), 'mkdCode' Given markdown; ```` code ````` Execute (code blocks can be fenced with backticks longer than 3): AssertEqual SyntaxOf('c'), 'mkdCode' Given markdown; ~~~ruby code ~~~ Execute (code blocks can have a language specifier): AssertEqual SyntaxOf('c'), 'mkdCode' Given markdown; ```c++ code ``` text Execute (code blocks can be fenced with backticks and a language specifier): AssertEqual SyntaxOf('code'), 'mkdCode' AssertNotEqual SyntaxOf('text'), 'mkdCode' # Indent Code Blocks Given markdown; a b c Execute (indent code blocks): AssertNotEqual SyntaxOf('a'), 'mkdCode' AssertEqual SyntaxOf('b'), 'mkdCode' AssertEqual SyntaxOf('c'), 'mkdCode' Given markdown; # a b c Execute (indent code blocks after header): AssertNotEqual SyntaxOf('a'), 'mkdCode' AssertNotEqual SyntaxOf('b'), 'mkdCode' AssertEqual SyntaxOf('c'), 'mkdCode' Given markdown; - a b c Execute (indent code blocks after list): AssertNotEqual SyntaxOf('a'), 'mkdCode' AssertNotEqual SyntaxOf('b'), 'mkdCode' AssertEqual SyntaxOf('c'), 'mkdCode' Given markdown; a b Execute (indent code block at beginning of file): AssertEqual SyntaxOf('a'), 'mkdCode' AssertEqual SyntaxOf('b'), 'mkdCode' Given markdown; ```c++ #include code ``` ```ruby def a end ``` Execute (fenced code block syntax with a language specifier): 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('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 ``` ```viml let g:b = 1 ``` Execute (fenced code block syntax with alias language specifier): let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'MarkdownRefreshSyntax') call b:func(0) AssertEqual SyntaxOf('g:a'), 'vimVar' AssertEqual SyntaxOf('g:b'), 'vimVar' Given markdown; ```csharp var s = "foo"; ``` Execute (fenced code block languages setting): let g:vim_markdown_fenced_languages = ['csharp=cs'] source ../ftplugin/markdown.vim let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'MarkdownRefreshSyntax') call b:func(0) AssertEqual SyntaxOf('foo'), 'csString' unlet g:vim_markdown_fenced_languages Given markdown; ```vim let g:a = 1 ``` Execute (fenced code block includes language syntax with reopening same buffer): let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'MarkdownRefreshSyntax') call b:func(0) split quit edit set filetype=markdown execute "normal! i```vim\let g:a = 1\```" call b:func(1) AssertEqual SyntaxOf('g:a'), 'vimVar' Given markdown; ```a+b- code ``` Execute (fenced code block syntax with an unknown language specifier): let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'MarkdownRefreshSyntax') call b:func(0) AssertEqual SyntaxOf('code'), 'mkdSnippetA_B_' Given markdown; ``` = a - ``` Execute (first = or - in fenced code block is not setex headers): AssertEqual SyntaxOf('='), 'mkdCode' AssertEqual SyntaxOf('-'), 'mkdCode' Given markdown; ``` {style=""} a ``` Execute (fenced code block with extended info strings): AssertEqual SyntaxOf('a'), 'mkdCode' # Code Blocks in pre and code tag Given markdown;
a
Execute (code block in pre tag): AssertEqual SyntaxOf('a'), 'mkdCode' Given markdown; a Execute (code block in code tag): AssertEqual SyntaxOf('a'), 'mkdCode' Given markdown; \ a \ Execute (not code block in escaped pre tag): AssertNotEqual SyntaxOf('a'), 'mkdCode' Given markdown; \ a \ Execute (not code block in escaped code tag): AssertNotEqual SyntaxOf('a'), 'mkdCode' # Math Given markdown; a $x$ b c $$y$$ d \$e\$ \$\$f\$\$ Execute (math): AssertNotEqual SyntaxOf('x')[0:2], 'tex' AssertNotEqual SyntaxOf('y')[0:2], 'tex' let g:vim_markdown_math=1 syn off | syn on AssertNotEqual SyntaxOf('a')[0:2], 'tex' AssertNotEqual SyntaxOf('b')[0:2], 'tex' AssertNotEqual SyntaxOf('c')[0:2], 'tex' AssertNotEqual SyntaxOf('d')[0:2], 'tex' AssertNotEqual SyntaxOf('e')[0:2], 'tex' AssertNotEqual SyntaxOf('f')[0:2], 'tex' AssertEqual SyntaxOf('x')[0:2], 'tex' AssertEqual SyntaxOf('y')[0:2], 'tex' let g:vim_markdown_math=0 syn off | syn on AssertNotEqual SyntaxOf('x')[0:2], 'tex' AssertNotEqual SyntaxOf('y')[0:2], 'tex' Given markdown; a $ b $ c Execute (multiline math): let g:vim_markdown_math=1 syn off | syn on AssertNotEqual SyntaxOf('a')[0:2], 'tex' AssertEqual SyntaxOf('b')[0:2], 'tex' AssertNotEqual SyntaxOf('c')[0:2], 'tex' Given markdown; $ \sqrt{a}{b} $ $$ \frac{a}{b} $$ Execute (math tex highlighting): let g:vim_markdown_math=0 syn off | syn on AssertNotEqual SyntaxOf('sqrt'), 'texStatement' AssertNotEqual SyntaxOf('frac'), 'texStatement' let g:vim_markdown_math=1 syn off | syn on AssertEqual SyntaxOf('sqrt'), 'texStatement' AssertEqual SyntaxOf('frac'), 'texStatement' Given markdown; $a b[$ c Execute (math ends with $): let g:vim_markdown_math=1 syn off | syn on AssertEqual SyntaxOf('a')[0:2], 'tex' AssertEqual SyntaxOf('b')[0:2], 'tex' AssertNotEqual SyntaxOf('c')[0:2], 'tex' Given markdown; $$a b[$$ c Execute (math ends with $$): let g:vim_markdown_math=1 syn off | syn on AssertEqual SyntaxOf('a')[0:2], 'tex' AssertEqual SyntaxOf('b')[0:2], 'tex' AssertNotEqual SyntaxOf('c')[0:2], 'tex' Given markdown; $(0 \le 1)$ Execute (math conceal in $): if has('conceal') setlocal conceallevel=2 let g:vim_markdown_math=1 syn off | syn on AssertEqual synconcealed(1, 1)[0], 1, '$' AssertEqual synconcealed(1, 2)[0], 0 AssertEqual synconcealed(1, 3)[0], 0 AssertEqual synconcealed(1, 4)[0], 0 AssertEqual synconcealed(1, 5)[0], 1, '\le' AssertEqual synconcealed(1, 6)[0], 1 AssertEqual synconcealed(1, 7)[0], 1 AssertEqual synconcealed(1, 8)[0], 0 AssertEqual synconcealed(1, 9)[0], 0 AssertEqual synconcealed(1, 10)[0], 0 AssertEqual synconcealed(1, 11)[0], 1, '$' setlocal conceallevel=0 endif Given markdown; $$ \omega 0 \le 1 $$ Execute (math conceal in $$): if has('conceal') setlocal conceallevel=2 let g:vim_markdown_math=1 syn off | syn on AssertEqual synconcealed(1, 1)[0], 1, '$$' AssertEqual synconcealed(2, 1)[0], 1, '\omega' AssertEqual synconcealed(3, 1)[0], 0, '0' AssertEqual synconcealed(3, 3)[0], 1, '\le' AssertEqual synconcealed(3, 7)[0], 0, '1' AssertEqual synconcealed(4, 1)[0], 1, '$$' setlocal conceallevel=0 endif # YAML frontmatter Given markdown; --- a: b --- Execute (YAML frontmatter is controlled by the option): AssertNotEqual SyntaxOf('a')[0:3], 'yaml' let g:vim_markdown_frontmatter=1 syn off | syn on AssertEqual SyntaxOf('a')[0:3], 'yaml' let g:vim_markdown_frontmatter=0 syn off | syn on AssertNotEqual SyntaxOf('a')[0:3], 'yaml' Given markdown; --- a: b --- Execute (YAML frontmatter only works if it's the first thing in the file): let g:vim_markdown_frontmatter=1 syn off | syn on AssertNotEqual SyntaxOf('a')[0:3], 'yaml' Given markdown; --- a: b --- --- Execute (rules are not mistaken by YAML frontmatter delimiters): let g:vim_markdown_frontmatter=1 syn off | syn on AssertEqual SyntaxAt(5, 1), 'mkdRule' unlet g:vim_markdown_frontmatter # TOML frontmatter Given markdown; +++ a = "b" +++ Execute (TOML frontmatter is controlled by the option): syn off | syn on AssertNotEqual SyntaxOf('b'), 'tomlString' let g:vim_markdown_toml_frontmatter=1 syn off | syn on AssertEqual SyntaxOf('b'), 'tomlString' let g:vim_markdown_toml_frontmatter=0 syn off | syn on AssertNotEqual SyntaxOf('b'), 'tomlString' Given markdown; +++ a = "b" +++ Execute (TOML frontmatter only works if it's the first thing in the file): let g:vim_markdown_toml_frontmatter=1 syn off | syn on AssertNotEqual SyntaxOf('b'), 'tomlString' unlet g:vim_markdown_toml_frontmatter # JSON frontmatter Given markdown; { "a": "b" } Execute (JSON frontmatter is controlled by the option): syn off | syn on AssertNotEqual SyntaxOf('a'), 'jsonKeyword' let g:vim_markdown_json_frontmatter=1 syn off | syn on AssertEqual SyntaxOf('a'), 'jsonKeyword' let g:vim_markdown_json_frontmatter=0 syn off | syn on AssertNotEqual SyntaxOf('a'), 'jsonKeyword' Given markdown; { "a": "b" } Execute (JSON frontmatter only works if it's the first thing in the file): let g:vim_markdown_json_frontmatter=1 syn off | syn on AssertNotEqual SyntaxOf('a'), 'jsonKeyword' unlet g:vim_markdown_json_frontmatter # Header Given markdown; # #a ccc ## #b ddd Execute (header title starts with #): AssertEqual SyntaxOf('a'), 'htmlH1' AssertEqual SyntaxOf('b'), 'htmlH2' Given markdown; # h1 space #h1 nospace # h1 2 spaces # h1 trailing hash # ## h2 space ##h2 nospace ## h2 trailing hash ## ### h3 space ###h3 nospace ### h3 trailing hash ### #### h4 ##### h5 ###### h6 Execute (atx headers): AssertEqual SyntaxOf('# h1 space'), 'htmlH1' AssertEqual SyntaxOf('#h1 nospace'), 'htmlH1' AssertEqual SyntaxOf('# h1 2 spaces'), 'htmlH1' AssertEqual SyntaxOf('# h1 trailing hash #'), 'htmlH1' AssertEqual SyntaxOf('## h2 space'), 'htmlH2' AssertEqual SyntaxOf('##h2 nospace'), 'htmlH2' AssertEqual SyntaxOf('## h2 trailing hash ##'), 'htmlH2' AssertEqual SyntaxOf('### h3 space'), 'htmlH3' AssertEqual SyntaxOf('###h3 nospace'), 'htmlH3' AssertEqual SyntaxOf('### h3 trailing hash ###'), 'htmlH3' AssertEqual SyntaxOf('#### h4'), 'htmlH4' AssertEqual SyntaxOf('##### h5'), 'htmlH5' AssertEqual SyntaxOf('###### h6'), 'htmlH6' Given markdown; # h1 before h2 ## h2 between h1s # h1 after h2 Execute (atx headers relative positions): AssertEqual SyntaxOf('# h1 before h2'), 'htmlH1' AssertEqual SyntaxOf('## h2 between h1s'), 'htmlH2' AssertEqual SyntaxOf('# h1 after h2'), 'htmlH1' Given markdown; setex h1 ======== setex h2 -------- setex h1 single punctuation = setex h1 punctuation longer than header ================================ Execute (setex headers): AssertEqual SyntaxOf('setex h1'), 'htmlH1' AssertEqual SyntaxOf('^========$'), 'htmlH1' AssertEqual SyntaxOf('setex h2'), 'htmlH2' AssertEqual SyntaxOf('--------'), 'htmlH2' AssertEqual SyntaxOf('setex h1 single punctuation'), 'htmlH1' AssertEqual SyntaxOf('^=$'), 'htmlH1' AssertEqual SyntaxOf('setex h1 punctuation longer than header'), 'htmlH1' AssertEqual SyntaxOf('^================================$'), 'htmlH1' Given markdown; - not Setex - because list Execute (prevent list vs Setex confusion): AssertNotEqual SyntaxOf('- not Setex'), 'htmlH2' AssertNotEqual SyntaxOf('- becuase list'), 'htmlH2' Given markdown; setex h1 before atx =================== ## atx h2 ### atx h3 # atx h1 setex h2 ------------------ ### atx h3 2 Execute (mixed atx and setex headers): AssertEqual SyntaxOf('setex h1 before atx'), 'htmlH1' AssertEqual SyntaxOf('==================='), 'htmlH1' AssertEqual SyntaxOf('## atx h2'), 'htmlH2' AssertEqual SyntaxOf('### atx h3'), 'htmlH3' AssertEqual SyntaxOf('# atx h1'), 'htmlH1' AssertEqual SyntaxOf('setex h2'), 'htmlH2' AssertEqual SyntaxOf('------------------'), 'htmlH2' # List Given markdown; - a & b 1. c > d Execute (& and > are not marked as htmlError in lists): AssertEqual SyntaxOf('-'), 'mkdListItem' AssertEqual SyntaxOf('1.'), 'mkdListItem' AssertNotEqual SyntaxOf('&'), 'htmlError' AssertNotEqual SyntaxOf('>'), 'htmlError' Given markdown; 1. a 2. b Execute (list after line break): AssertEqual SyntaxOf('1'), 'mkdListItem' AssertEqual SyntaxOf('2'), 'mkdListItem' # HTML Given markdown; a

b

- c Execute (HTML tag in text): AssertEqual SyntaxOf('p'), 'htmlTagName' AssertEqual SyntaxOf('

'), 'htmlTag' AssertEqual SyntaxOf('

'), 'htmlEndTag' AssertEqual SyntaxOf('span'), 'htmlTagName' AssertEqual SyntaxOf(''), 'htmlTag' AssertEqual SyntaxOf(''), 'htmlEndTag'