2 <!DOCTYPE MODE SYSTEM "xmode.dtd">
6 This is a jedit mode file for Ada programming language.
7 Copyright (C) 2012 Peter C. Chapin (pchapin@sf)
9 This program is free software; you can redistribute it and/or
10 modify it under the terms of the GNU General Public License
11 as published by the Free Software Foundation; either version 2
12 of the License, or (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
24 <!-- TODO: Support based literals as numeric literals: 16#FF#
25 Support numeric literals with an exponent: 1.0e2, 1e2. -->
29 <PROPERTY NAME="lineComment" VALUE="--" />
30 <PROPERTY NAME="indentNextLines"
31 VALUE=".*(begin|declare|do|else|elsif|exception|generic|is|loop|private|record|select|tagged|then|with|=>|:=)\s*(--.*)?$"/>
32 <PROPERTY NAME="unindentThisLine"
33 VALUE="^\s*end\b.*;"/>
34 <PROPERTY NAME="unindentNextLines"
35 VALUE="^\s*end\b.*;"/>
36 <PROPERTY NAME="electricKeys" VALUE=";"/>
39 <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">
40 <!-- SPARK annotation comments. -->
41 <EOL_SPAN TYPE="COMMENT2">--#</EOL_SPAN>
42 <!-- Normal comments. -->
43 <EOL_SPAN TYPE="COMMENT1">--</EOL_SPAN>
45 <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
50 <!-- Operators and Related -->
51 <SEQ TYPE="OPERATOR">)</SEQ>
52 <SEQ TYPE="OPERATOR">(</SEQ>
53 <SEQ TYPE="OPERATOR">..</SEQ>
54 <SEQ TYPE="OPERATOR">.all</SEQ>
55 <SEQ TYPE="OPERATOR">:=</SEQ>
56 <SEQ TYPE="OPERATOR">/=</SEQ>
57 <SEQ TYPE="OPERATOR">=></SEQ>
58 <SEQ TYPE="OPERATOR">=</SEQ>
59 <SEQ TYPE="NULL"><></SEQ>
60 <SEQ TYPE="LABEL"><<</SEQ>
61 <SEQ TYPE="LABEL">>></SEQ>
62 <SEQ TYPE="OPERATOR">>=</SEQ>
63 <SEQ TYPE="OPERATOR"><=</SEQ>
64 <SEQ TYPE="OPERATOR">></SEQ>
65 <SEQ TYPE="OPERATOR"><</SEQ>
66 <SEQ TYPE="OPERATOR">&</SEQ>
67 <SEQ TYPE="OPERATOR">+</SEQ>
68 <SEQ TYPE="OPERATOR">-</SEQ>
69 <SEQ TYPE="OPERATOR">/</SEQ>
70 <SEQ TYPE="OPERATOR">**</SEQ>
71 <SEQ TYPE="OPERATOR">*</SEQ>
73 <!-- Predefined Attributes -->
74 <!-- From Section K.2 "Language-Defined Attributes" in the Ada Reference Manual. -->
75 <SEQ TYPE="KEYWORD3">'access</SEQ>
76 <SEQ TYPE="KEYWORD3">'address</SEQ>
77 <SEQ TYPE="KEYWORD3">'adjacent</SEQ>
78 <SEQ TYPE="KEYWORD3">'aft</SEQ>
79 <SEQ TYPE="KEYWORD3">'alignment</SEQ>
80 <SEQ TYPE="KEYWORD3">'base</SEQ>
81 <SEQ TYPE="KEYWORD3">'bit_order</SEQ>
82 <SEQ TYPE="KEYWORD3">'body_version</SEQ>
83 <SEQ TYPE="KEYWORD3">'callable</SEQ>
84 <SEQ TYPE="KEYWORD3">'caller</SEQ>
85 <SEQ TYPE="KEYWORD3">'ceiling</SEQ>
86 <SEQ TYPE="KEYWORD3">'class</SEQ>
87 <SEQ TYPE="KEYWORD3">'component_size</SEQ>
88 <SEQ TYPE="KEYWORD3">'compose</SEQ>
89 <SEQ TYPE="KEYWORD3">'constrained</SEQ>
90 <SEQ TYPE="KEYWORD3">'copy_size</SEQ>
91 <SEQ TYPE="KEYWORD3">'count</SEQ>
92 <SEQ TYPE="KEYWORD3">'definite</SEQ>
93 <SEQ TYPE="KEYWORD3">'delta</SEQ>
94 <SEQ TYPE="KEYWORD3">'denorm</SEQ>
95 <SEQ TYPE="KEYWORD3">'digits</SEQ>
96 <SEQ TYPE="KEYWORD3">'exponent</SEQ>
97 <SEQ TYPE="KEYWORD3">'external_tag</SEQ>
98 <SEQ TYPE="KEYWORD3">'first</SEQ>
99 <SEQ TYPE="KEYWORD3">'first_bit</SEQ>
100 <SEQ TYPE="KEYWORD3">'floor</SEQ>
101 <SEQ TYPE="KEYWORD3">'fore</SEQ>
102 <SEQ TYPE="KEYWORD3">'fraction</SEQ>
103 <SEQ TYPE="KEYWORD3">'has_same_storage</SEQ>
104 <SEQ TYPE="KEYWORD3">'identity</SEQ>
105 <SEQ TYPE="KEYWORD3">'image</SEQ>
106 <SEQ TYPE="KEYWORD3">'class'input</SEQ>
107 <SEQ TYPE="KEYWORD3">'input</SEQ>
108 <SEQ TYPE="KEYWORD3">'last</SEQ>
109 <SEQ TYPE="KEYWORD3">'last_bit</SEQ>
110 <SEQ TYPE="KEYWORD3">'leading_part</SEQ>
111 <SEQ TYPE="KEYWORD3">'length</SEQ>
112 <SEQ TYPE="KEYWORD3">'machine</SEQ>
113 <SEQ TYPE="KEYWORD3">'machine_emax</SEQ>
114 <SEQ TYPE="KEYWORD3">'machine_emin</SEQ>
115 <SEQ TYPE="KEYWORD3">'machine_mantissa</SEQ>
116 <SEQ TYPE="KEYWORD3">'machine_overflows</SEQ>
117 <SEQ TYPE="KEYWORD3">'machine_radix</SEQ>
118 <SEQ TYPE="KEYWORD3">'machine_rounding</SEQ>
119 <SEQ TYPE="KEYWORD3">'machine_rounds</SEQ>
120 <SEQ TYPE="KEYWORD3">'max</SEQ>
121 <SEQ TYPE="KEYWORD3">'max_alignment_for_allocation</SEQ>
122 <SEQ TYPE="KEYWORD3">'max_size_in_storage_elements</SEQ>
123 <SEQ TYPE="KEYWORD3">'min</SEQ>
124 <SEQ TYPE="KEYWORD3">'mod</SEQ>
125 <SEQ TYPE="KEYWORD3">'model</SEQ>
126 <SEQ TYPE="KEYWORD3">'model_emin</SEQ>
127 <SEQ TYPE="KEYWORD3">'model_epsilon</SEQ>
128 <SEQ TYPE="KEYWORD3">'model_mantissa</SEQ>
129 <SEQ TYPE="KEYWORD3">'model_small</SEQ>
130 <SEQ TYPE="KEYWORD3">'modulus</SEQ>
131 <SEQ TYPE="KEYWORD3">'old</SEQ>
132 <SEQ TYPE="KEYWORD3">'class'output</SEQ>
133 <SEQ TYPE="KEYWORD3">'output</SEQ>
134 <SEQ TYPE="KEYWORD3">'overlaps_storage</SEQ>
135 <SEQ TYPE="KEYWORD3">'partition_id</SEQ>
136 <SEQ TYPE="KEYWORD3">'pos</SEQ>
137 <SEQ TYPE="KEYWORD3">'position</SEQ>
138 <SEQ TYPE="KEYWORD3">'pred</SEQ>
139 <SEQ TYPE="KEYWORD3">'priority</SEQ>
140 <SEQ TYPE="KEYWORD3">'range</SEQ>
141 <SEQ TYPE="KEYWORD3">'class'read</SEQ>
142 <SEQ TYPE="KEYWORD3">'read</SEQ>
143 <SEQ TYPE="KEYWORD3">'remainder</SEQ>
144 <SEQ TYPE="KEYWORD3">'result</SEQ>
145 <SEQ TYPE="KEYWORD3">'round</SEQ>
146 <SEQ TYPE="KEYWORD3">'rounding</SEQ>
147 <SEQ TYPE="KEYWORD3">'safe_first</SEQ>
148 <SEQ TYPE="KEYWORD3">'safe_last</SEQ>
149 <SEQ TYPE="KEYWORD3">'scale</SEQ>
150 <SEQ TYPE="KEYWORD3">'scaling</SEQ>
151 <SEQ TYPE="KEYWORD3">'signed_zeros</SEQ>
152 <SEQ TYPE="KEYWORD3">'size</SEQ>
153 <SEQ TYPE="KEYWORD3">'small</SEQ>
154 <SEQ TYPE="KEYWORD3">'storage_pool</SEQ>
155 <SEQ TYPE="KEYWORD3">'storage_size</SEQ>
156 <SEQ TYPE="KEYWORD3">'stream_size</SEQ>
157 <SEQ TYPE="KEYWORD3">'succ</SEQ>
158 <SEQ TYPE="KEYWORD3">'tag</SEQ>
159 <SEQ TYPE="KEYWORD3">'terminated</SEQ>
160 <SEQ TYPE="KEYWORD3">'truncation</SEQ>
161 <SEQ TYPE="KEYWORD3">'unbiased_rounding</SEQ>
162 <SEQ TYPE="KEYWORD3">'unchecked_access</SEQ>
163 <SEQ TYPE="KEYWORD3">'val</SEQ>
164 <SEQ TYPE="KEYWORD3">'valid</SEQ>
165 <SEQ TYPE="KEYWORD3">'value</SEQ>
166 <SEQ TYPE="KEYWORD3">'version</SEQ>
167 <SEQ TYPE="KEYWORD3">'wide_image</SEQ>
168 <SEQ TYPE="KEYWORD3">'wide_value</SEQ>
169 <SEQ TYPE="KEYWORD3">'wide_width</SEQ>
170 <SEQ TYPE="KEYWORD3">'width</SEQ>
171 <SEQ TYPE="KEYWORD3">'wide_wide_image</SEQ>
172 <SEQ TYPE="KEYWORD3">'wide_wide_value</SEQ>
173 <SEQ TYPE="KEYWORD3">'wide_wide_width</SEQ>
174 <SEQ TYPE="KEYWORD3">'class'write</SEQ>
175 <SEQ TYPE="KEYWORD3">'write</SEQ>
177 <!-- Predefined Pragmas -->
178 <!-- From Annex L of the Ada Reference Manual. -->
179 <!-- One problem with this definition is that it requires exactly one
180 space between the pragma keyword and the name of the pragma. -->
181 <SEQ TYPE="KEYWORD3">pragma all_calls_remote</SEQ>
182 <SEQ TYPE="KEYWORD3">pragma assert</SEQ>
183 <SEQ TYPE="KEYWORD3">pragma assertion_policy</SEQ>
184 <SEQ TYPE="KEYWORD3">pragma asynchronous</SEQ>
185 <SEQ TYPE="KEYWORD3">pragma atomic</SEQ>
186 <SEQ TYPE="KEYWORD3">pragma atomic_components</SEQ>
187 <SEQ TYPE="KEYWORD3">pragma attach_handler</SEQ>
188 <SEQ TYPE="KEYWORD3">pragma controlled</SEQ>
189 <SEQ TYPE="KEYWORD3">pragma convention</SEQ>
190 <SEQ TYPE="KEYWORD3">pragma cpu</SEQ>
191 <SEQ TYPE="KEYWORD3">pragma default_storage_pool</SEQ>
192 <SEQ TYPE="KEYWORD3">pragma detect_blocking</SEQ>
193 <SEQ TYPE="KEYWORD3">pragma discard_names</SEQ>
194 <SEQ TYPE="KEYWORD3">pragma dispatching_domain</SEQ>
195 <SEQ TYPE="KEYWORD3">pragma elaborate</SEQ>
196 <SEQ TYPE="KEYWORD3">pragma elaborate_all</SEQ>
197 <SEQ TYPE="KEYWORD3">pragma elaborate_body</SEQ>
198 <SEQ TYPE="KEYWORD3">pragma export</SEQ>
199 <SEQ TYPE="KEYWORD3">pragma import</SEQ>
200 <SEQ TYPE="KEYWORD3">pragma independent</SEQ>
201 <SEQ TYPE="KEYWORD3">pragam independent_components</SEQ>
202 <SEQ TYPE="KEYWORD3">pragma inline</SEQ>
203 <SEQ TYPE="KEYWORD3">pragma inspection_point</SEQ>
204 <SEQ TYPE="KEYWORD3">pragma interrupt_handler</SEQ>
205 <SEQ TYPE="KEYWORD3">pragma interrupt_priority</SEQ>
206 <SEQ TYPE="KEYWORD3">pragma linker_options</SEQ>
207 <SEQ TYPE="KEYWORD3">pragma list</SEQ>
208 <SEQ TYPE="KEYWORD3">pragma locking_policy</SEQ>
209 <SEQ TYPE="KEYWORD3">pragma no_return</SEQ>
210 <SEQ TYPE="KEYWORD3">pragma normalize_scalars</SEQ>
211 <SEQ TYPE="KEYWORD3">pragma optimize</SEQ>
212 <SEQ TYPE="KEYWORD3">pragma pack</SEQ>
213 <SEQ TYPE="KEYWORD3">pragma page</SEQ>
214 <SEQ TYPE="KEYWORD3">pragma partition_elaboration_policy</SEQ>
215 <SEQ TYPE="KEYWORD3">pragma preelaborate_initialization</SEQ>
216 <SEQ TYPE="KEYWORD3">pragma preelaborate</SEQ>
217 <SEQ TYPE="KEYWORD3">pragma priority</SEQ>
218 <SEQ TYPE="KEYWORD3">pragma priority_specific_dispatching</SEQ>
219 <SEQ TYPE="KEYWORD3">pragma profile</SEQ>
220 <SEQ TYPE="KEYWORD3">pragma pure</SEQ>
221 <SEQ TYPE="KEYWORD3">pragma queuing_policy</SEQ>
222 <SEQ TYPE="KEYWORD3">pragma relative_deadline</SEQ>
223 <SEQ TYPE="KEYWORD3">pragma remote_call_interface</SEQ>
224 <SEQ TYPE="KEYWORD3">pragma remote_types</SEQ>
225 <SEQ TYPE="KEYWORD3">pragma restrictions</SEQ>
226 <SEQ TYPE="KEYWORD3">pragma reviewable</SEQ>
227 <SEQ TYPE="KEYWORD3">pragma shared_passive</SEQ>
228 <SEQ TYPE="KEYWORD3">pragma storage_size</SEQ>
229 <SEQ TYPE="KEYWORD3">pragma suppress</SEQ>
230 <SEQ TYPE="KEYWORD3">pragma task_dispatching_policy</SEQ>
231 <SEQ TYPE="KEYWORD3">pragma unchecked_union</SEQ>
232 <SEQ TYPE="KEYWORD3">pragma unsuppress</SEQ>
233 <SEQ TYPE="KEYWORD3">pragma volatile</SEQ>
234 <SEQ TYPE="KEYWORD3">pragma volatile_components</SEQ>
236 <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
242 <!-- Reserved words -->
243 <!-- The first three are special. Coloring them differently makes it
244 easier to locate subprograms in the file. -->
245 <KEYWORD1>entry</KEYWORD1>
246 <KEYWORD1>function</KEYWORD1>
247 <KEYWORD1>procedure</KEYWORD1>
249 <KEYWORD2>abort</KEYWORD2>
250 <KEYWORD2>abs</KEYWORD2>
251 <KEYWORD2>abstract</KEYWORD2>
252 <KEYWORD2>accept</KEYWORD2>
253 <KEYWORD2>access</KEYWORD2>
254 <KEYWORD2>aliased</KEYWORD2>
255 <KEYWORD2>all</KEYWORD2>
256 <KEYWORD2>and</KEYWORD2>
257 <KEYWORD2>array</KEYWORD2>
258 <KEYWORD2>at</KEYWORD2>
259 <KEYWORD2>begin</KEYWORD2>
260 <KEYWORD2>body</KEYWORD2>
261 <KEYWORD2>case</KEYWORD2>
262 <KEYWORD2>constant</KEYWORD2>
263 <KEYWORD2>declare</KEYWORD2>
264 <KEYWORD2>delay</KEYWORD2>
265 <KEYWORD2>delta</KEYWORD2>
266 <KEYWORD2>digits</KEYWORD2>
267 <KEYWORD2>do</KEYWORD2>
268 <KEYWORD2>else</KEYWORD2>
269 <KEYWORD2>elsif</KEYWORD2>
270 <KEYWORD2>end</KEYWORD2>
271 <KEYWORD2>exception</KEYWORD2>
272 <KEYWORD2>exit</KEYWORD2>
273 <KEYWORD2>for</KEYWORD2>
274 <KEYWORD2>generic</KEYWORD2>
275 <KEYWORD2>goto</KEYWORD2>
276 <KEYWORD2>if</KEYWORD2>
277 <KEYWORD2>in</KEYWORD2>
278 <KEYWORD2>interface</KEYWORD2>
279 <KEYWORD2>is</KEYWORD2>
280 <KEYWORD2>limited</KEYWORD2>
281 <KEYWORD2>loop</KEYWORD2>
282 <KEYWORD2>mod</KEYWORD2>
283 <KEYWORD2>new</KEYWORD2>
284 <KEYWORD2>not</KEYWORD2>
285 <KEYWORD2>null</KEYWORD2> <!-- This is also used as an access value. -->
286 <KEYWORD2>of</KEYWORD2>
287 <KEYWORD2>or</KEYWORD2>
288 <KEYWORD2>others</KEYWORD2>
289 <KEYWORD2>out</KEYWORD2>
290 <KEYWORD2>overriding</KEYWORD2>
291 <KEYWORD2>package</KEYWORD2>
292 <KEYWORD3>pragma</KEYWORD3> <!-- Special case -->
293 <KEYWORD2>private</KEYWORD2>
294 <KEYWORD2>protected</KEYWORD2>
295 <KEYWORD2>raise</KEYWORD2>
296 <KEYWORD2>range</KEYWORD2>
297 <KEYWORD2>record</KEYWORD2>
298 <KEYWORD2>rem</KEYWORD2>
299 <KEYWORD2>renames</KEYWORD2>
300 <KEYWORD2>requeue</KEYWORD2>
301 <KEYWORD2>return</KEYWORD2>
302 <KEYWORD2>reverse</KEYWORD2>
303 <KEYWORD2>select</KEYWORD2>
304 <KEYWORD2>separate</KEYWORD2>
305 <KEYWORD2>some</KEYWORD2>
306 <KEYWORD2>subtype</KEYWORD2>
307 <KEYWORD2>synchronized</KEYWORD2>
308 <KEYWORD2>tagged</KEYWORD2>
309 <KEYWORD2>task</KEYWORD2>
310 <KEYWORD2>terminate</KEYWORD2>
311 <KEYWORD2>then</KEYWORD2>
312 <KEYWORD2>type</KEYWORD2>
313 <KEYWORD2>until</KEYWORD2>
314 <KEYWORD2>use</KEYWORD2>
315 <KEYWORD2>when</KEYWORD2>
316 <KEYWORD2>while</KEYWORD2>
317 <KEYWORD2>with</KEYWORD2>
318 <KEYWORD2>xor</KEYWORD2>
321 <LITERAL1>false</LITERAL1>
322 <LITERAL1>true</LITERAL1>
324 <!-- Pre-defined types (in package Standard). -->
325 <LITERAL2>address</LITERAL2>
326 <LITERAL2>boolean</LITERAL2>
327 <LITERAL2>character</LITERAL2>
328 <LITERAL2>duration</LITERAL2>
329 <LITERAL2>float</LITERAL2>
330 <LITERAL2>integer</LITERAL2>
331 <LITERAL2>latin_1</LITERAL2>
332 <LITERAL2>natural</LITERAL2>
333 <LITERAL2>positive</LITERAL2>
334 <LITERAL2>string</LITERAL2>
335 <LITERAL2>time</LITERAL2>
336 <LITERAL2>wide_character</LITERAL2>
337 <LITERAL2>wide_wide_character</LITERAL2>
338 <LITERAL2>wide_string</LITERAL2>
339 <LITERAL2>wide_wide_string</LITERAL2>
341 <!-- Pre-defined exceptions (in package Standard). -->
342 <LITERAL2>constraint_error</LITERAL2>
343 <LITERAL2>program_error</LITERAL2>
344 <LITERAL2>storage_error</LITERAL2>
345 <LITERAL2>tasking_error</LITERAL2>