1" Vim syntax file 2" Language: Markdown 3" Maintainer: Tim Pope <[email protected]> 4" Filenames: *.markdown 5" Last Change: 2010 May 21 6 7if exists("b:current_syntax") 8 finish 9endif 10 11runtime! syntax/html.vim 12unlet! b:current_syntax 13 14syn sync minlines=10 15syn case ignore 16 17syn match markdownValid '[<>]\S\@!' 18syn match markdownValid '&\%(#\=\w*;\)\@!' 19 20syn match markdownLineStart "^[<@]\@!" nextgroup=@markdownBlock 21 22syn cluster markdownBlock contains=markdownH1,markdownH2,markdownH3,markdownH4,markdownH5,markdownH6,markdownBlockquote,markdownListMarker,markdownOrderedListMarker,markdownCodeBlock,markdownRule 23syn cluster markdownInline contains=markdownLineBreak,markdownLinkText,markdownItalic,markdownBold,markdownCode,markdownEscape,@htmlTop 24 25syn match markdownH1 ".\+\n=\+$" contained contains=@markdownInline,markdownHeadingRule 26syn match markdownH2 ".\+\n-\+$" contained contains=@markdownInline,markdownHeadingRule 27 28syn match markdownHeadingRule "^[=-]\+$" contained 29 30syn region markdownH1 matchgroup=markdownHeadingDelimiter start="##\@!" end="#*\s*$" keepend oneline contains=@markdownInline contained 31syn region markdownH2 matchgroup=markdownHeadingDelimiter start="###\@!" end="#*\s*$" keepend oneline contains=@markdownInline contained 32syn region markdownH3 matchgroup=markdownHeadingDelimiter start="####\@!" end="#*\s*$" keepend oneline contains=@markdownInline contained 33syn region markdownH4 matchgroup=markdownHeadingDelimiter start="#####\@!" end="#*\s*$" keepend oneline contains=@markdownInline contained 34syn region markdownH5 matchgroup=markdownHeadingDelimiter start="######\@!" end="#*\s*$" keepend oneline contains=@markdownInline contained 35syn region markdownH6 matchgroup=markdownHeadingDelimiter start="#######\@!" end="#*\s*$" keepend oneline contains=@markdownInline contained 36 37syn match markdownBlockquote ">\s" contained nextgroup=@markdownBlock 38 39syn region markdownCodeBlock start=" \|\t" end="$" contained 40 41" TODO: real nesting 42syn match markdownListMarker " \{0,4\}[-*+]\%(\s\+\S\)\@=" contained 43syn match markdownOrderedListMarker " \{0,4}\<\d\+\.\%(\s*\S\)\@=" contained 44 45syn match markdownRule "\* *\* *\*[ *]*$" contained 46syn match markdownRule "- *- *-[ -]*$" contained 47 48syn match markdownLineBreak "\s\{2,\}$" 49 50syn region markdownIdDeclaration matchgroup=markdownLinkDelimiter start="^ \{0,3\}!\=\[" end="\]:" oneline keepend nextgroup=markdownUrl skipwhite 51syn match markdownUrl "\S\+" nextgroup=markdownUrlTitle skipwhite contained 52syn region markdownUrl matchgroup=markdownUrlDelimiter start="<" end=">" oneline keepend nextgroup=markdownUrlTitle skipwhite contained 53syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+"+ end=+"+ keepend contained 54syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+'+ end=+'+ keepend contained 55syn region markdownUrlTitle matchgroup=markdownUrlTitleDelimiter start=+(+ end=+)+ keepend contained 56 57syn region markdownLinkText matchgroup=markdownLinkTextDelimiter start="!\=\[\%(\_[^]]*]\%( \=[[(]\)\)\@=" end="\]\%( \=[[(]\)\@=" keepend nextgroup=markdownLink,markdownId skipwhite contains=@markdownInline,markdownLineStart 58syn region markdownLink matchgroup=markdownLinkDelimiter start="(" end=")" contains=markdownUrl keepend contained 59syn region markdownId matchgroup=markdownIdDelimiter start="\[" end="\]" keepend contained 60syn region markdownAutomaticLink matchgroup=markdownUrlDelimiter start="<\%(\w\+:\|[[:alnum:]_+-]\+@\)\@=" end=">" keepend oneline 61 62syn region markdownItalic start="\S\@<=\*\|\*\S\@=" end="\S\@<=\*\|\*\S\@=" keepend contains=markdownLineStart 63syn region markdownItalic start="\S\@<=_\|_\S\@=" end="\S\@<=_\|_\S\@=" keepend contains=markdownLineStart 64syn region markdownBold start="\S\@<=\*\*\|\*\*\S\@=" end="\S\@<=\*\*\|\*\*\S\@=" keepend contains=markdownLineStart 65syn region markdownBold start="\S\@<=__\|__\S\@=" end="\S\@<=__\|__\S\@=" keepend contains=markdownLineStart 66syn region markdownBoldItalic start="\S\@<=\*\*\*\|\*\*\*\S\@=" end="\S\@<=\*\*\*\|\*\*\*\S\@=" keepend contains=markdownLineStart 67syn region markdownBoldItalic start="\S\@<=___\|___\S\@=" end="\S\@<=___\|___\S\@=" keepend contains=markdownLineStart 68syn region markdownCode matchgroup=markdownCodeDelimiter start="`" end="`" transparent keepend contains=markdownLineStart 69syn region markdownCode matchgroup=markdownCodeDelimiter start="`` \=" end=" \=``" keepend contains=markdownLineStart 70 71syn match markdownEscape "\\[][\\`*_{}()#+.!-]" 72 73hi def link markdownH1 htmlH1 74hi def link markdownH2 htmlH2 75hi def link markdownH3 htmlH3 76hi def link markdownH4 htmlH4 77hi def link markdownH5 htmlH5 78hi def link markdownH6 htmlH6 79hi def link markdownHeadingRule markdownRule 80hi def link markdownHeadingDelimiter Delimiter 81hi def link markdownOrderedListMarker markdownListMarker 82hi def link markdownListMarker htmlTagName 83hi def link markdownBlockquote Comment 84hi def link markdownRule PreProc 85 86hi def link markdownLinkText htmlLink 87hi def link markdownIdDeclaration Typedef 88hi def link markdownId Type 89hi def link markdownAutomaticLink markdownUrl 90hi def link markdownUrl Float 91hi def link markdownUrlTitle String 92hi def link markdownIdDelimiter markdownLinkDelimiter 93hi def link markdownUrlDelimiter htmlTag 94hi def link markdownUrlTitleDelimiter Delimiter 95 96hi def link markdownItalic htmlItalic 97hi def link markdownBold htmlBold 98hi def link markdownBoldItalic htmlBoldItalic 99hi def link markdownCodeDelimiter Delimiter 100 101hi def link markdownEscape Special 102 103let b:current_syntax = "markdown" 104 105" vim:set sw=2: 106