blob: 4ec5dd544824d73209c572a6cf3395fba0370246 [file] [log] [blame]
Bram Moolenaar7a329912010-05-21 12:05:36 +02001" Vim syntax file
2" Language: Markdown
3" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
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: