annotate runtime/syntax/rst.vim @ 0:76efa0be13f1

Initial revision
author atsuki
date Sat, 10 Nov 2007 15:07:22 +0900
parents
children c16898406ff2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
1 " Vim syntax file
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
2 " Language: reStructuredText documentation format
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
3 " Maintainer: Nikolai Weibull <now@bitwi.se>
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
4 " Latest Revision: 2006-07-04
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
5
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
6 if exists("b:current_syntax")
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
7 finish
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
8 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
9
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
10 let s:cpo_save = &cpo
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
11 set cpo&vim
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
12
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
13 syn case ignore
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
14
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
15 " FIXME: The problem with these two is that Vim doesn’t seem to like
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
16 " matching across line boundaries.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
17 "
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
18 " syn match rstSections /^.*\n[=`:.'"~^_*+#-]\+$/
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
19
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
20 " syn match rstTransition /^\s*[=`:.'"~^_*+#-]\{4,}\s*$/
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
21
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
22 syn cluster rstCruft contains=rstEmphasis,rstStrongEmphasis,
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
23 \ rstInterpretedText,rstInlineLiteral,rstSubstitutionReference,
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
24 \ rstInlineInternalTargets,rstFootnoteReference,rstHyperlinkReference
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
25
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
26 syn region rstLiteralBlock matchgroup=rstDelimiter
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
27 \ start='::\_s*\n\ze\z(\s\+\)' skip='^$' end='^\z1\@!'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
28 \ contains=@NoSpell
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
29
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
30 syn region rstQuotedLiteralBlock matchgroup=rstDelimiter
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
31 \ start="::\_s*\n\ze\z([!\"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]\)"
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
32 \ end='^\z1\@!' contains=@NoSpell
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
33
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
34 syn region rstDoctestBlock oneline display matchgroup=rstDelimiter
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
35 \ start='^>>>\s' end='^$'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
36
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
37 syn region rstTable transparent start='^\n\s*+[-=+]\+' end='^$'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
38 \ contains=rstTableLines,@rstCruft
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
39 syn match rstTableLines contained display '|\|+\%(=\+\|-\+\)\='
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
40
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
41 syn region rstSimpleTable transparent
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
42 \ start='^\n\%(\s*\)\@>\%(\%(=\+\)\@>\%(\s\+\)\@>\)\%(\%(\%(=\+\)\@>\%(\s*\)\@>\)\+\)\@>$'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
43 \ end='^$'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
44 \ contains=rstSimpleTableLines,@rstCruft
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
45 syn match rstSimpleTableLines contained display
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
46 \ '^\%(\s*\)\@>\%(\%(=\+\)\@>\%(\s\+\)\@>\)\%(\%(\%(=\+\)\@>\%(\s*\)\@>\)\+\)\@>$'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
47 syn match rstSimpleTableLines contained display
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
48 \ '^\%(\s*\)\@>\%(\%(-\+\)\@>\%(\s\+\)\@>\)\%(\%(\%(-\+\)\@>\%(\s*\)\@>\)\+\)\@>$'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
49
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
50 syn cluster rstDirectives contains=rstFootnote,rstCitation,
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
51 \ rstHyperlinkTarget,rstExDirective
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
52
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
53 syn match rstExplicitMarkup '^\.\.\_s'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
54 \ nextgroup=@rstDirectives,rstComment,rstSubstitutionDefinition
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
55
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
56 let s:ReferenceName = '[[:alnum:]]\+\%([_.-][[:alnum:]]\+\)*'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
57
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
58 syn keyword rstTodo contained FIXME TODO XXX NOTE
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
59
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
60 execute 'syn region rstComment contained' .
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
61 \ ' start=/.*/'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
62 \ ' end=/^\s\@!/ contains=rstTodo'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
63
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
64 execute 'syn region rstFootnote contained matchgroup=rstDirective' .
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
65 \ ' start=+\[\%(\d\+\|#\%(' . s:ReferenceName . '\)\=\|\*\)\]\_s+' .
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
66 \ ' skip=+^$+' .
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
67 \ ' end=+^\s\@!+ contains=@rstCruft,@NoSpell'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
68
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
69 execute 'syn region rstCitation contained matchgroup=rstDirective' .
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
70 \ ' start=+\[' . s:ReferenceName . '\]\_s+' .
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
71 \ ' skip=+^$+' .
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
72 \ ' end=+^\s\@!+ contains=@rstCruft,@NoSpell'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
73
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
74 syn region rstHyperlinkTarget contained matchgroup=rstDirective
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
75 \ start='_\%(_\|[^:\\]*\%(\\.[^:\\]*\)*\):\_s' skip=+^$+ end=+^\s\@!+
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
76
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
77 syn region rstHyperlinkTarget contained matchgroup=rstDirective
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
78 \ start='_`[^`\\]*\%(\\.[^`\\]*\)*`:\_s' skip=+^$+ end=+^\s\@!+
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
79
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
80 syn region rstHyperlinkTarget matchgroup=rstDirective
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
81 \ start=+^__\_s+ skip=+^$+ end=+^\s\@!+
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
82
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
83 execute 'syn region rstExDirective contained matchgroup=rstDirective' .
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
84 \ ' start=+' . s:ReferenceName . '::\_s+' .
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
85 \ ' skip=+^$+' .
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
86 \ ' end=+^\s\@!+ contains=@rstCruft'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
87
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
88 execute 'syn match rstSubstitutionDefinition contained' .
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
89 \ ' /|' . s:ReferenceName . '|\_s\+/ nextgroup=@rstDirectives'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
90
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
91 function! s:DefineOneInlineMarkup(name, start, middle, end, char_left, char_right)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
92 execute 'syn region rst' . a:name .
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
93 \ ' start=+' . a:char_left . '\zs' . a:start .
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
94 \ '\ze[^[:space:]' . a:char_right . a:start[strlen(a:start) - 1] . ']+' .
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
95 \ a:middle .
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
96 \ ' end=+\S' . a:end . '\ze\%($\|\s\|[''")\]}>/:.,;!?\\-]\)+'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
97 endfunction
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
98
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
99 function! s:DefineInlineMarkup(name, start, middle, end)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
100 let middle = a:middle != "" ?
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
101 \ (' skip=+\\\\\|\\' . a:middle . '+') :
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
102 \ ""
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
103
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
104 call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, "'", "'")
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
105 call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '"', '"')
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
106 call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '(', ')')
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
107 call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '\[', '\]')
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
108 call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '{', '}')
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
109 call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '<', '>')
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
110
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
111 call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, '\%(^\|\s\|[/:]\)', '')
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
112
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
113 execute 'syn match rst' . a:name .
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
114 \ ' +\%(^\|\s\|[''"([{</:]\)\zs' . a:start .
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
115 \ '[^[:space:]' . a:start[strlen(a:start) - 1] . ']'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
116 \ a:end . '\ze\%($\|\s\|[''")\]}>/:.,;!?\\-]\)+'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
117
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
118 execute 'hi def link rst' . a:name . 'Delimiter' . ' rst' . a:name
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
119 endfunction
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
120
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
121 call s:DefineInlineMarkup('Emphasis', '\*', '\*', '\*')
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
122 call s:DefineInlineMarkup('StrongEmphasis', '\*\*', '\*', '\*\*')
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
123 call s:DefineInlineMarkup('InterpretedTextOrHyperlinkReference', '`', '`', '`_\{0,2}')
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
124 call s:DefineInlineMarkup('InlineLiteral', '``', "", '``')
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
125 call s:DefineInlineMarkup('SubstitutionReference', '|', '|', '|_\{0,2}')
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
126 call s:DefineInlineMarkup('InlineInternalTargets', '_`', '`', '`')
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
127
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
128 " TODO: Can’t remember why these two can’t be defined like the ones above.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
129 execute 'syn match rstFootnoteReference contains=@NoSpell' .
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
130 \ ' +\[\%(\d\+\|#\%(' . s:ReferenceName . '\)\=\|\*\)\]_+'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
131
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
132 execute 'syn match rstCitationReference contains=@NoSpell' .
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
133 \ ' +\[' . s:ReferenceName . '\]_\ze\%($\|\s\|[''")\]}>/:.,;!?\\-]\)+'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
134
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
135 execute 'syn match rstHyperlinkReference' .
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
136 \ ' /\<' . s:ReferenceName . '__\=\ze\%($\|\s\|[''")\]}>/:.,;!?\\-]\)/'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
137
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
138 syn match rstStandaloneHyperlink contains=@NoSpell
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
139 \ "\<\%(\%(\%(https\=\|file\|ftp\|gopher\)://\|\%(mailto\|news\):\)[^[:space:]'\"<>]\+\|www[[:alnum:]_-]*\.[[:alnum:]_-]\+\.[^[:space:]'\"<>]\+\)[[:alnum:]/]"
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
140
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
141 " TODO: Use better syncing. I don’t know the specifics of syncing well enough,
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
142 " though.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
143 syn sync minlines=50
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
144
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
145 hi def link rstTodo Todo
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
146 hi def link rstComment Comment
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
147 "hi def link rstSections Type
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
148 "hi def link rstTransition Type
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
149 hi def link rstLiteralBlock String
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
150 hi def link rstQuotedLiteralBlock String
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
151 hi def link rstDoctestBlock PreProc
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
152 hi def link rstTableLines rstDelimiter
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
153 hi def link rstSimpleTableLines rstTableLines
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
154 hi def link rstExplicitMarkup rstDirective
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
155 hi def link rstDirective Keyword
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
156 hi def link rstFootnote String
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
157 hi def link rstCitation String
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
158 hi def link rstHyperlinkTarget String
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
159 hi def link rstExDirective String
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
160 hi def link rstSubstitutionDefinition rstDirective
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
161 hi def link rstDelimiter Delimiter
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
162 " TODO: I dunno...
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
163 hi def rstEmphasis term=italic cterm=italic gui=italic
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
164 hi def link rstStrongEmphasis Special
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
165 "term=bold cterm=bold gui=bold
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
166 hi def link rstInterpretedTextOrHyperlinkReference Identifier
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
167 hi def link rstInlineLiteral String
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
168 hi def link rstSubstitutionReference PreProc
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
169 hi def link rstInlineInternalTargets Identifier
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
170 hi def link rstFootnoteReference Identifier
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
171 hi def link rstCitationReference Identifier
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
172 hi def link rstHyperLinkReference Identifier
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
173 hi def link rstStandaloneHyperlink Identifier
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
174
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
175 let b:current_syntax = "rst"
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
176
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
177 let &cpo = s:cpo_save
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
178 unlet s:cpo_save