Mercurial > hg > RemoteEditor > vim7
comparison runtime/syntax/ada.vim @ 0:76efa0be13f1
Initial revision
author | atsuki |
---|---|
date | Sat, 10 Nov 2007 15:07:22 +0900 |
parents | |
children | 6a13985590e6 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:76efa0be13f1 |
---|---|
1 "---------------------------------------------------------------------------- | |
2 " Description: Vim Ada syntax file | |
3 " Language: Ada (2005) | |
4 " $Id$ | |
5 " Copyright: Copyright (C) 2006 Martin Krischik | |
6 " Maintainer: Martin Krischik | |
7 " David A. Wheeler <dwheeler@dwheeler.com> | |
8 " Simon Bradley <simon.bradley@pitechnology.com> | |
9 " Contributors: Preben Randhol. | |
10 " $Author$ | |
11 " $Date$ | |
12 " Version: 4.2 | |
13 " $Revision$ | |
14 " $HeadURL: https://svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/syntax/ada.vim $ | |
15 " http://www.dwheeler.com/vim | |
16 " History: 24.05.2006 MK Unified Headers | |
17 " 26.05.2006 MK ' should not be in iskeyword. | |
18 " 16.07.2006 MK Ada-Mode as vim-ball | |
19 " 02.10.2006 MK Better folding. | |
20 " 15.10.2006 MK Bram's suggestion for runtime integration | |
21 " 05.11.2006 MK Spell check for comments and strings only | |
22 " 05.11.2006 MK Bram suggested to save on spaces | |
23 " Help Page: help ft-ada-syntax | |
24 "------------------------------------------------------------------------------ | |
25 " The formal spec of Ada 2005 (ARM) is the "Ada 2005 Reference Manual". | |
26 " For more Ada 2005 info, see http://www.gnuada.org and http://www.adapower.com. | |
27 " | |
28 " This vim syntax file works on vim 7.0 only and makes use of most of Voim 7.0 | |
29 " advanced features. | |
30 "------------------------------------------------------------------------------ | |
31 | |
32 if exists("b:current_syntax") || version < 700 | |
33 finish | |
34 endif | |
35 | |
36 let b:current_syntax = "ada" | |
37 | |
38 " Section: Ada is entirely case-insensitive. {{{1 | |
39 " | |
40 syntax case ignore | |
41 setlocal nosmartcase | |
42 setlocal ignorecase | |
43 | |
44 " Section: Highlighting commands {{{1 | |
45 " | |
46 " There are 72 reserved words in total in Ada2005. Some keywords are | |
47 " used in more than one way. For example: | |
48 " 1. "end" is a general keyword, but "end if" ends a Conditional. | |
49 " 2. "then" is a conditional, but "and then" is an operator. | |
50 " | |
51 for b:Item in g:ada#Keywords | |
52 " Standard Exceptions (including I/O). | |
53 " We'll highlight the standard exceptions, similar to vim's Python mode. | |
54 " It's possible to redefine the standard exceptions as something else, | |
55 " but doing so is very bad practice, so simply highlighting them makes sense. | |
56 if b:Item['kind'] == "x" | |
57 execute "syntax keyword adaException " . b:Item['word'] | |
58 endif | |
59 if b:Item['kind'] == "a" | |
60 execute 'syntax match adaAttribute "\V' . b:Item['word'] . '"' | |
61 endif | |
62 " We don't normally highlight types in package Standard | |
63 " (Integer, Character, Float, etc.). I don't think it looks good | |
64 " with the other type keywords, and many Ada programs define | |
65 " so many of their own types that it looks inconsistent. | |
66 " However, if you want this highlighting, turn on "ada_standard_types". | |
67 " For package Standard's definition, see ARM section A.1. | |
68 if b:Item['kind'] == "t" && exists ("g:ada_standard_types") | |
69 execute "syntax keyword adaBuiltinType " . b:Item['word'] | |
70 endif | |
71 endfor | |
72 | |
73 " Section: others {{{1 | |
74 " | |
75 syntax keyword adaLabel others | |
76 | |
77 " Section: Operatoren {{{1 | |
78 " | |
79 syntax keyword adaOperator abs mod not rem xor | |
80 syntax match adaOperator "\<and\>" | |
81 syntax match adaOperator "\<and\s\+then\>" | |
82 syntax match adaOperator "\<or\>" | |
83 syntax match adaOperator "\<or\s\+else\>" | |
84 syntax match adaOperator "[-+*/<>&]" | |
85 syntax keyword adaOperator ** | |
86 syntax match adaOperator "[/<>]=" | |
87 syntax keyword adaOperator => | |
88 syntax match adaOperator "\.\." | |
89 syntax match adaOperator "=" | |
90 | |
91 " Section: <> {{{1 | |
92 " | |
93 " Handle the box, <>, specially: | |
94 " | |
95 syntax keyword adaSpecial <> | |
96 | |
97 " Section: rainbow color {{{1 | |
98 " | |
99 if exists("g:ada_rainbow_color") | |
100 syntax match adaSpecial "[:;.,]" | |
101 runtime plugin/Rainbow_Parenthsis.vim | |
102 else | |
103 syntax match adaSpecial "[:;().,]" | |
104 endif | |
105 | |
106 " Section: := {{{1 | |
107 " | |
108 " We won't map "adaAssignment" by default, but we need to map ":=" to | |
109 " something or the "=" inside it will be mislabelled as an operator. | |
110 " Note that in Ada, assignment (:=) is not considered an operator. | |
111 " | |
112 syntax match adaAssignment ":=" | |
113 | |
114 " Section: Numbers, including floating point, exponents, and alternate bases. {{{1 | |
115 " | |
116 syntax match adaNumber "\<\d[0-9_]*\(\.\d[0-9_]*\)\=\([Ee][+-]\=\d[0-9_]*\)\=\>" | |
117 syntax match adaNumber "\<\d\d\=#\x[0-9A-Fa-f_]*\(\.\x[0-9A-Fa-f_]*\)\=#\([Ee][+-]\=\d[0-9_]*\)\=" | |
118 | |
119 " Section: Identify leading numeric signs {{{1 | |
120 " | |
121 " In "A-5" the "-" is an operator, " but in "A:=-5" the "-" is a sign. This | |
122 " handles "A3+-5" (etc.) correctly. " This assumes that if you put a | |
123 " don't put a space after +/- when it's used " as an operator, you won't | |
124 " put a space before it either -- which is true " in code I've seen. | |
125 " | |
126 syntax match adaSign "[[:space:]<>=(,|:;&*/+-][+-]\d"lc=1,hs=s+1,he=e-1,me=e-1 | |
127 | |
128 " Section: Labels for the goto statement. {{{1 | |
129 " | |
130 syntax region adaLabel start="<<" end=">>" | |
131 | |
132 " Section: Boolean Constants {{{1 | |
133 " Boolean Constants. | |
134 syntax keyword adaBoolean true false | |
135 | |
136 " Section: Warn C/C++ {{{1 | |
137 " | |
138 " Warn people who try to use C/C++ notation erroneously: | |
139 " | |
140 syntax match adaError "//" | |
141 syntax match adaError "/\*" | |
142 syntax match adaError "==" | |
143 | |
144 | |
145 " Section: Space Errors {{{1 | |
146 " | |
147 if exists("g:ada_space_errors") | |
148 if !exists("g:ada_no_trail_space_error") | |
149 syntax match adaSpaceError excludenl "\s\+$" | |
150 endif | |
151 if !exists("g:ada_no_tab_space_error") | |
152 syntax match adaSpaceError " \+\t"me=e-1 | |
153 endif | |
154 if !exists("g:ada_all_tab_usage") | |
155 syntax match adaSpecial "\t" | |
156 endif | |
157 endif | |
158 | |
159 " Section: end {{{1 | |
160 " Unless special ("end loop", "end if", etc.), "end" marks the end of a | |
161 " begin, package, task etc. Assiging it to adaEnd. | |
162 syntax match adaEnd "\<end\>" | |
163 | |
164 syntax keyword adaPreproc pragma | |
165 | |
166 syntax keyword adaRepeat exit for loop reverse while | |
167 syntax match adaRepeat "\<end\s\+loop\>" | |
168 | |
169 syntax keyword adaStatement accept delay goto raise requeue return | |
170 syntax keyword adaStatement terminate | |
171 syntax match adaStatement "\<abort\>" | |
172 | |
173 " Section: Handle Ada's record keywords. {{{1 | |
174 " | |
175 " 'record' usually starts a structure, but "with null record;" does not, | |
176 " and 'end record;' ends a structure. The ordering here is critical - | |
177 " 'record;' matches a "with null record", so make it a keyword (this can | |
178 " match when the 'with' or 'null' is on a previous line). | |
179 " We see the "end" in "end record" before the word record, so we match that | |
180 " pattern as adaStructure (and it won't match the "record;" pattern). | |
181 " | |
182 syntax match adaStructure "\<record\>" contains=adaRecord | |
183 syntax match adaStructure "\<end\s\+record\>" contains=adaRecord | |
184 syntax match adaKeyword "\<record;"me=e-1 | |
185 | |
186 " Section: type classes {{{1 | |
187 " | |
188 syntax keyword adaStorageClass abstract access aliased array at constant delta | |
189 syntax keyword adaStorageClass digits limited of private range tagged | |
190 syntax keyword adaStorageClass interface synchronized | |
191 syntax keyword adaTypedef subtype type | |
192 | |
193 " Section: Conditionals {{{1 | |
194 " | |
195 " "abort" after "then" is a conditional of its own. | |
196 " | |
197 syntax match adaConditional "\<then\>" | |
198 syntax match adaConditional "\<then\s\+abort\>" | |
199 syntax match adaConditional "\<else\>" | |
200 syntax match adaConditional "\<end\s\+if\>" | |
201 syntax match adaConditional "\<end\s\+case\>" | |
202 syntax match adaConditional "\<end\s\+select\>" | |
203 syntax keyword adaConditional if case select | |
204 syntax keyword adaConditional elsif when | |
205 | |
206 " Section: other keywords {{{1 | |
207 syntax match adaKeyword "\<is\>" contains=adaRecord | |
208 syntax keyword adaKeyword all do exception in new null out | |
209 syntax keyword adaKeyword separate until overriding | |
210 | |
211 " Section: begin keywords {{{1 | |
212 " | |
213 " These keywords begin various constructs, and you _might_ want to | |
214 " highlight them differently. | |
215 " | |
216 syntax keyword adaBegin begin body declare entry generic | |
217 syntax keyword adaBegin protected renames task | |
218 | |
219 syntax match adaBegin "\<function\>" contains=adaFunction | |
220 syntax match adaBegin "\<procedure\>" contains=adaProcedure | |
221 syntax match adaBegin "\<package\>" contains=adaPackage | |
222 | |
223 if exists("ada_with_gnat_project_files") | |
224 syntax keyword adaBegin project | |
225 endif | |
226 | |
227 " Section: with, use {{{1 | |
228 " | |
229 if exists("ada_withuse_ordinary") | |
230 " Don't be fancy. Display "with" and "use" as ordinary keywords in all cases. | |
231 syntax keyword adaKeyword with use | |
232 else | |
233 " Highlight "with" and "use" clauses like C's "#include" when they're used | |
234 " to reference other compilation units; otherwise they're ordinary keywords. | |
235 " If we have vim 6.0 or later, we'll use its advanced pattern-matching | |
236 " capabilities so that we won't match leading spaces. | |
237 syntax match adaKeyword "\<with\>" | |
238 syntax match adaKeyword "\<use\>" | |
239 syntax match adaBeginWith "^\s*\zs\(\(with\(\s\+type\)\=\)\|\(use\)\)\>" contains=adaInc | |
240 syntax match adaSemiWith ";\s*\zs\(\(with\(\s\+type\)\=\)\|\(use\)\)\>" contains=adaInc | |
241 syntax match adaInc "\<with\>" contained contains=NONE | |
242 syntax match adaInc "\<with\s\+type\>" contained contains=NONE | |
243 syntax match adaInc "\<use\>" contained contains=NONE | |
244 " Recognize "with null record" as a keyword (even the "record"). | |
245 syntax match adaKeyword "\<with\s\+null\s\+record\>" | |
246 " Consider generic formal parameters of subprograms and packages as keywords. | |
247 syntax match adaKeyword ";\s*\zswith\s\+\(function\|procedure\|package\)\>" | |
248 syntax match adaKeyword "^\s*\zswith\s\+\(function\|procedure\|package\)\>" | |
249 endif | |
250 | |
251 " Section: String and character constants. {{{1 | |
252 " | |
253 syntax region adaString contains=@Spell start=+"+ skip=+""+ end=+"+ | |
254 syntax match adaCharacter "'.'" | |
255 | |
256 " Section: Todo (only highlighted in comments) {{{1 | |
257 " | |
258 syntax keyword adaTodo contained TODO FIXME XXX NOTE | |
259 | |
260 " Section: Comments. {{{1 | |
261 " | |
262 syntax region adaComment | |
263 \ oneline | |
264 \ contains=adaTodo,adaLineError,@Spell | |
265 \ start="--" | |
266 \ end="$" | |
267 | |
268 " Section: line errors {{{1 | |
269 " | |
270 " Note: Line errors have become quite slow with Vim 7.0 | |
271 " | |
272 if exists("g:ada_line_errors") | |
273 syntax match adaLineError "\(^.\{79}\)\@<=." contains=ALL containedin=ALL | |
274 endif | |
275 | |
276 " Section: syntax folding {{{1 | |
277 " | |
278 " Syntax folding is very tricky - for now I still suggest to use | |
279 " indent folding | |
280 " | |
281 if exists("g:ada_folding") && g:ada_folding[0] == 's' | |
282 if stridx (g:ada_folding, 'p') >= 0 | |
283 syntax region adaPackage | |
284 \ start="\(\<package\s\+body\>\|\<package\>\)\s*\z(\k*\)" | |
285 \ end="end\s\+\z1\s*;" | |
286 \ keepend extend transparent fold contains=ALL | |
287 endif | |
288 if stridx (g:ada_folding, 'f') >= 0 | |
289 syntax region adaProcedure | |
290 \ start="\<procedure\>\s*\z(\k*\)" | |
291 \ end="\<end\>\s\+\z1\s*;" | |
292 \ keepend extend transparent fold contains=ALL | |
293 syntax region adaFunction | |
294 \ start="\<procedure\>\s*\z(\k*\)" | |
295 \ end="end\s\+\z1\s*;" | |
296 \ keepend extend transparent fold contains=ALL | |
297 endif | |
298 if stridx (g:ada_folding, 'f') >= 0 | |
299 syntax region adaRecord | |
300 \ start="\<is\s\+record\>" | |
301 \ end="\<end\s\+record\>" | |
302 \ keepend extend transparent fold contains=ALL | |
303 endif | |
304 endif | |
305 | |
306 " Section: The default methods for highlighting. Can be overridden later. {{{1 | |
307 " | |
308 highlight def link adaCharacter Character | |
309 highlight def link adaComment Comment | |
310 highlight def link adaConditional Conditional | |
311 highlight def link adaKeyword Keyword | |
312 highlight def link adaLabel Label | |
313 highlight def link adaNumber Number | |
314 highlight def link adaSign Number | |
315 highlight def link adaOperator Operator | |
316 highlight def link adaPreproc PreProc | |
317 highlight def link adaRepeat Repeat | |
318 highlight def link adaSpecial Special | |
319 highlight def link adaStatement Statement | |
320 highlight def link adaString String | |
321 highlight def link adaStructure Structure | |
322 highlight def link adaTodo Todo | |
323 highlight def link adaType Type | |
324 highlight def link adaTypedef Typedef | |
325 highlight def link adaStorageClass StorageClass | |
326 highlight def link adaBoolean Boolean | |
327 highlight def link adaException Exception | |
328 highlight def link adaAttribute Tag | |
329 highlight def link adaInc Include | |
330 highlight def link adaError Error | |
331 highlight def link adaSpaceError Error | |
332 highlight def link adaLineError Error | |
333 highlight def link adaBuiltinType Type | |
334 highlight def link adaAssignment Special | |
335 | |
336 " Subsection: Begin, End {{{2 | |
337 " | |
338 if exists ("ada_begin_preproc") | |
339 " This is the old default display: | |
340 highlight def link adaBegin PreProc | |
341 highlight def link adaEnd PreProc | |
342 else | |
343 " This is the new default display: | |
344 highlight def link adaBegin Keyword | |
345 highlight def link adaEnd Keyword | |
346 endif | |
347 | |
348 | |
349 " Section: formatoptions {{{1 | |
350 " | |
351 setlocal formatoptions+=ron | |
352 | |
353 " Section: sync {{{1 | |
354 " | |
355 " We don't need to look backwards to highlight correctly; | |
356 " this speeds things up greatly. | |
357 syntax sync minlines=1 maxlines=1 | |
358 | |
359 finish " 1}}} | |
360 | |
361 "------------------------------------------------------------------------------ | |
362 " Copyright (C) 2006 Martin Krischik | |
363 " | |
364 " Vim is Charityware - see ":help license" or uganda.txt for licence details. | |
365 "------------------------------------------------------------------------------ | |
366 "vim: textwidth=78 nowrap tabstop=8 shiftwidth=3 softtabstop=3 noexpandtab | |
367 "vim: foldmethod=marker |