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