Runtime files update
[MacVim.git] / runtime / syntax / ada.vim
blobaede506e3c123f9d8d08c7adb149898a6b42d341
1 "----------------------------------------------------------------------------
2 "  Description: Vim Ada syntax file
3 "     Language: Ada (2005)
4 "          $Id: ada.vim,v 1.2 2007/05/05 18:22:26 vimboss Exp $
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: vimboss $
11 "        $Date: 2007/05/05 18:22:26 $
12 "      Version: 4.2
13 "    $Revision: 1.2 $
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.
28 " This vim syntax file works on vim 7.0 only and makes use of most of Voim 7.0 
29 " advanced features.
30 "------------------------------------------------------------------------------
32 if exists("b:current_syntax") || version < 700
33     finish
34 endif
36 let b:current_syntax = "ada"
38 " Section: Ada is entirely case-insensitive. {{{1
40 syntax   case ignore
41 setlocal nosmartcase
42 setlocal ignorecase
44 " Section: Highlighting commands {{{1
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.
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
73 " Section: others {{{1
75 syntax keyword  adaLabel        others
77 " Section: Operatoren {{{1
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 "="
91 " Section: <> {{{1
93 " Handle the box, <>, specially:
95 syntax keyword  adaSpecial          <>
97 " Section: rainbow color {{{1
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
106 " Section: := {{{1
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.
112 syntax match adaAssignment              ":="
114 " Section: Numbers, including floating point, exponents, and alternate bases. {{{1
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_]*\)\="
119 " Section: Identify leading numeric signs {{{1
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.
126 syntax match adaSign "[[:space:]<>=(,|:;&*/+-][+-]\d"lc=1,hs=s+1,he=e-1,me=e-1
128 " Section: Labels for the goto statement. {{{1
130 syntax region  adaLabel         start="<<"  end=">>"
132 " Section: Boolean Constants {{{1
133 " Boolean Constants.
134 syntax keyword adaBoolean       true false
136 " Section: Warn C/C++ {{{1
138 " Warn people who try to use C/C++ notation erroneously:
140 syntax match adaError "//"
141 syntax match adaError "/\*"
142 syntax match adaError "=="
145 " Section: Space Errors {{{1
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
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\>"
164 syntax keyword  adaPreproc               pragma
166 syntax keyword  adaRepeat        exit for loop reverse while
167 syntax match    adaRepeat                  "\<end\s\+loop\>"
169 syntax keyword  adaStatement accept delay goto raise requeue return
170 syntax keyword  adaStatement terminate
171 syntax match    adaStatement  "\<abort\>"
173 " Section: Handle Ada's record keywords. {{{1
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).
182 syntax match adaStructure   "\<record\>"        contains=adaRecord
183 syntax match adaStructure   "\<end\s\+record\>" contains=adaRecord
184 syntax match adaKeyword     "\<record;"me=e-1
186 " Section: type classes {{{1
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
193 " Section: Conditionals {{{1
195 " "abort" after "then" is a conditional of its own.
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
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
211 " Section: begin keywords {{{1
213 " These keywords begin various constructs, and you _might_ want to
214 " highlight them differently.
216 syntax keyword  adaBegin        begin body declare entry generic
217 syntax keyword  adaBegin        protected renames task
219 syntax match    adaBegin        "\<function\>" contains=adaFunction
220 syntax match    adaBegin        "\<procedure\>" contains=adaProcedure
221 syntax match    adaBegin        "\<package\>" contains=adaPackage
223 if exists("ada_with_gnat_project_files")
224    syntax keyword adaBegin      project
225 endif
227 " Section: with, use {{{1
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
251 " Section: String and character constants. {{{1
253 syntax region  adaString        contains=@Spell start=+"+ skip=+""+ end=+"+ 
254 syntax match   adaCharacter "'.'"
256 " Section: Todo (only highlighted in comments) {{{1
258 syntax keyword adaTodo contained TODO FIXME XXX NOTE
260 " Section: Comments. {{{1
262 syntax region  adaComment 
263     \ oneline 
264     \ contains=adaTodo,adaLineError,@Spell
265     \ start="--" 
266     \ end="$"
268 " Section: line errors {{{1
270 " Note: Line errors have become quite slow with Vim 7.0
272 if exists("g:ada_line_errors")
273     syntax match adaLineError "\(^.\{79}\)\@<=."  contains=ALL containedin=ALL
274 endif
276 " Section: syntax folding {{{1
278 "       Syntax folding is very tricky - for now I still suggest to use
279 "       indent folding
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
306 " Section: The default methods for highlighting. Can be overridden later. {{{1
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
336 " Subsection: Begin, End {{{2
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
349 " Section: formatoptions {{{1
351 setlocal formatoptions+=ron
353 " Section: sync {{{1
355 " We don't need to look backwards to highlight correctly;
356 " this speeds things up greatly.
357 syntax sync minlines=1 maxlines=1
359 finish " 1}}}
361 "------------------------------------------------------------------------------
362 "   Copyright (C) 2006  Martin Krischik
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