Created
February 2, 2018 07:50
-
-
Save LukeMathWalker/6a828388fcdfd341a11ec724ef98e8a6 to your computer and use it in GitHub Desktop.
vim-syntax-markdown/syntax/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" Vim syntax file | |
" Language: Markdown | |
" Maintainer: [email protected] | |
" Borrowed from the one by Tim Pope <[email protected]> | |
" Filenames: *.markdown | |
" Last Change: 2015 Sep 21 | |
if exists("b:current_syntax") | |
finish | |
endif | |
if !exists('main_syntax') | |
let main_syntax = 'markdown' | |
endif | |
if !exists('g:markdown_github_flavored') | |
let g:markdown_github_flavored = 1 | |
endif | |
runtime! syntax/html.vim | |
unlet! b:current_syntax | |
if !exists('g:markdown_fenced_languages') | |
let g:markdown_fenced_languages = [] | |
endif | |
for s:type in map(copy(g:markdown_fenced_languages),'matchstr(v:val,"[^=]*$")') | |
if s:type =~ '\.' | |
let b:{matchstr(s:type,'[^.]*')}_subtype = matchstr(s:type,'\.\zs.*') | |
endif | |
exe 'syn include @markdownHighlight'.substitute(s:type,'\.','','g').' syntax/'.matchstr(s:type,'[^.]*').'.vim' | |
unlet! b:current_syntax | |
endfor | |
unlet! s:type | |
syn sync minlines=10 | |
syn case ignore | |
syn match markdownValid '[<>]\c[a-z/$!]\@!' | |
syn match markdownValid '&\%(#\=\w*;\)\@!' | |
syn match markdownLineStart "^[<@]\@!" nextgroup=@markdownBlock,htmlSpecialChar | |
syn cluster markdownBlock contains=markdownH1,markdownH2,markdownH3,markdownH4,markdownH5,markdownH6,markdownBlockquote,markdownListMarker,markdownOrderedListMarker,markdownCodeBlock,markdownRule,markdownGithubAutoLink | |
syn cluster markdownInline contains=markdownLineBreak,markdownLinkText,markdownItalic,markdownBold,markdownCode,markdownEscape,@htmlTop,markdownError,markdownGithubAutoLink,markdownGithubStrikeThrough | |
syn match markdownH1 "^.\+\n=\+$" contained contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink | |
syn match markdownH2 "^.\+\n-\+$" contained contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink | |
syn match markdownHeadingRule "^[=-]\+$" contained | |
syn region markdownH1 matchgroup=markdownHeadingDelimiter start="##\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained | |
syn region markdownH2 matchgroup=markdownHeadingDelimiter start="###\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained | |
syn region markdownH3 matchgroup=markdownHeadingDelimiter start="####\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained | |
syn region markdownH4 matchgroup=markdownHeadingDelimiter start="#####\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained | |
syn region markdownH5 matchgroup=markdownHeadingDelimiter start="######\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained | |
syn region markdownH6 matchgroup=markdownHeadingDelimiter start="#######\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained | |
syn match markdownBlockquote ">\%(\s\|$\)" contained nextgroup=@markdownBlock | |
syn region markdownCodeBlock start=" \|\t" end="$" contained | |
" TODO: real nesting | |
syn match markdownListMarker "\%(\t\| \{0,4\}\)[-*+]\%(\s\+\S\)\@=" contained | |
syn match markdownOrderedListMarker "\%(\t\| \{0,4}\)\<\d\+\.\%(\s\+\S\)\@=" contained | |
syn match markdownRule "\* *\* *\*[ *]*$" contained | |
syn match markdownRule "- *- *-[ -]*$" contained | |
syn match markdownLineBreak " \{2,\}$" | |
syn region markdownIdDeclaration matchgroup=markdownLinkDelimiter start="^ \{0,3\}!\=\[" end="\]:" oneline keepend nextgroup=markdownUrl skipwhite | |
syn match markdownUrl "\S\+" nextgroup=markdownUrlTitle skipwhite contained | |
syn region markdownUrl matchgroup=markdownUrlDelimiter start="<" end=">" oneline keepend nextgroup=markdownUrlTitle skipwhite contained | |
syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+"+ end=+"+ keepend contained | |
syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+'+ end=+'+ keepend contained | |
syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+(+ end=+)+ keepend contained | |
syn region markdownLinkText matchgroup=markdownLinkTextDelimiter start="!\=\[\%(\_[^]]*]\%( \=[[(]\)\)\@=" end="\]\%( \=[[(]\)\@=" keepend nextgroup=markdownLink,markdownId skipwhite contains=@markdownInline,markdownLineStart | |
syn region markdownLink matchgroup=markdownLinkDelimiter start="(" end=")" contains=markdownUrl keepend contained | |
syn region markdownId matchgroup=markdownIdDelimiter start="\[" end="\]" keepend contained | |
syn region markdownAutomaticLink matchgroup=markdownUrlDelimiter start="<\%(\w\+:\|[[:alnum:]_+-]\+@\)\@=" end=">" keepend oneline | |
syn region markdownItalic start="\S\@<=\*\|\*\S\@=" end="\S\@<=\*\|\*\S\@=" keepend contains=markdownLineStart | |
if g:markdown_github_flavored | |
syn match markdownGithubAutoLink '\Vhttps\?://\[^ ]\+' | |
syn region markdownGithubStrikeThrough start="\V\S\@<=~~\|~~\S\@=" end="\V\S\@<=~~\|~~\S\@=" keepend contains=markdownLineStart,markdownItalic | |
else | |
syn region markdownItalic start="\S\@<=_\|_\S\@=" end="\S\@<=_\|_\S\@=" keepend contains=markdownLineStart | |
endif | |
syn region markdownBold start="\S\@<=\*\*\|\*\*\S\@=" end="\S\@<=\*\*\|\*\*\S\@=" keepend contains=markdownLineStart,markdownItalic,markdownGithubStrikeThrough | |
syn region markdownBold start="\S\@<=__\|__\S\@=" end="\S\@<=__\|__\S\@=" keepend contains=markdownLineStart,markdownItalic,markdownGithubStrikeThrough | |
syn region markdownBoldItalic start="\S\@<=\*\*\*\|\*\*\*\S\@=" end="\S\@<=\*\*\*\|\*\*\*\S\@=" keepend contains=markdownLineStart | |
syn region markdownBoldItalic start="\S\@<=___\|___\S\@=" end="\S\@<=___\|___\S\@=" keepend contains=markdownLineStart | |
syn region markdownCode matchgroup=markdownCodeDelimiter start="`" end="`" keepend contains=markdownLineStart | |
syn region markdownCode matchgroup=markdownCodeDelimiter start="`` \=" end=" \=``" keepend contains=markdownLineStart | |
syn region markdownCode matchgroup=markdownCodeDelimiter start="^\s*```.*$" end="^\s*```\ze\s*$" keepend | |
if main_syntax ==# 'markdown' | |
for s:type in g:markdown_fenced_languages | |
exe 'syn region markdownHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\..*','','').' matchgroup=markdownCodeDelimiter start="^\s*```'.matchstr(s:type,'[^=]*').'\>.*$" end="^\s*```\ze\s*$" keepend contains=@markdownHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\.','','g') | |
endfor | |
unlet! s:type | |
endif | |
syn match markdownEscape "\\[][\\`*_{}()#+.!-]" | |
if g:markdown_github_flavored | |
else | |
syn match markdownError "\w\@<=_\w\@=" | |
endif | |
syn include @markdownTex syntax/tex.vim | |
syn region markdownMathJax start="\V`$" end="\V$`" keepend contains=@markdownTex | |
syn region markdownMathJax start="\V`$$" end="\V$$`" keepend contains=@markdownTex | |
syn region markdownMathJax start="\V\\begin{\z(\w\+\)}" end="\V\\end{\z1}" keepend contains=@markdownTex | |
" these two line must come after escaping ('\\') syntax, since last match overrule | |
" earlier one. | |
syn region markdownMathJax start="\\\\\[" end="\\\\\]" keepend contains=@markdownTex | |
syn region markdownMathJax start="\\\\(" end="\\\\)" keepend contains=@markdownTex | |
hi def link markdownH1 htmlH1 | |
hi def link markdownH2 htmlH2 | |
hi def link markdownH3 htmlH3 | |
hi def link markdownH4 htmlH4 | |
hi def link markdownH5 htmlH5 | |
hi def link markdownH6 htmlH6 | |
hi def link markdownHeadingRule markdownRule | |
hi def link markdownHeadingDelimiter Delimiter | |
hi def link markdownOrderedListMarker markdownListMarker | |
hi def link markdownListMarker htmlTagName | |
hi def link markdownBlockquote Comment | |
hi def link markdownRule PreProc | |
hi def link markdownLinkText htmlLink | |
hi def link markdownIdDeclaration Typedef | |
hi def link markdownId Type | |
hi def link markdownAutomaticLink markdownUrl | |
hi def link markdownGithubAutoLink markdownUrl | |
hi def link markdownGithubStrikeThrough NonText | |
hi def link markdownUrl Float | |
hi def link markdownUrlTitle String | |
hi def link markdownIdDelimiter markdownLinkDelimiter | |
hi def link markdownUrlDelimiter htmlTag | |
hi def link markdownUrlTitleDelimiter Delimiter | |
hi def link markdownItalic htmlItalic | |
hi def link markdownBold htmlBold | |
hi def link markdownBoldItalic htmlBoldItalic | |
hi def link markdownCodeDelimiter Delimiter | |
hi def link markdownEscape Special | |
hi def link markdownError Error | |
hi def link markdownMathJax Statement | |
let b:current_syntax = "markdown" | |
if main_syntax ==# 'markdown' | |
unlet main_syntax | |
endif | |
" vim:set sw=2: |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment