1 <?xml version="1.0"?>
\r
3 <!DOCTYPE MODE SYSTEM "xmode.dtd">
\r
5 <!-- This is based on ISO C++ Standard, 2003 and ISO C Standard, 1999.
\r
6 The C++ keywords have been removed from this mode file, though. -->
\r
9 <PROPERTY NAME="commentStart" VALUE="/*" />
\r
10 <PROPERTY NAME="commentEnd" VALUE="*/" />
\r
11 <PROPERTY NAME="lineComment" VALUE="//" />
\r
12 <PROPERTY NAME="wordBreakChars" VALUE=",+-=<>/?^&*" />
\r
14 <!-- Auto indent -->
\r
15 <PROPERTY NAME="indentOpenBrackets" VALUE="{" />
\r
16 <PROPERTY NAME="indentCloseBrackets" VALUE="}" />
\r
17 <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />
\r
18 <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />
\r
19 <PROPERTY NAME="indentNextLine"
\r
20 VALUE="(?!^\s*(#|//)).*(\b(if|while|for)\s*\(.*\)|\b(else|do)\b)[^{;]*$" />
\r
21 <PROPERTY NAME="unindentThisLine"
\r
22 VALUE="^\s*((case\b.*|[\p{Alpha}_][\p{Alnum}_]*)\s*:(?!:)).*$" />
\r
23 <PROPERTY NAME="electricKeys" VALUE=":" />
\r
27 ESCAPE="\" IGNORE_CASE="FALSE"
\r
28 HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
\r
29 <EOL_SPAN TYPE="KEYWORD2" AT_WHITESPACE_END="TRUE" DELEGATE="CPP">#</EOL_SPAN>
\r
31 <IMPORT DELEGATE="LEX"/>
\r
32 <IMPORT DELEGATE="CORE"/>
\r
35 <!-- Comments, Trigraph, Alternate-Tokens -->
\r
37 ESCAPE="\" IGNORE_CASE="FALSE"
\r
38 HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
\r
40 <!-- Doxygen comment, Javadoc style -->
\r
41 <SEQ TYPE="COMMENT1">/**/</SEQ>
\r
42 <SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">
\r
43 <BEGIN>/**<</BEGIN>
\r
46 <SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">
\r
50 <EOL_SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">///<</EOL_SPAN>
\r
51 <EOL_SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">///</EOL_SPAN>
\r
53 <!-- Doxygen comment, Qt style -->
\r
54 <SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">
\r
55 <BEGIN>/*!<</BEGIN>
\r
58 <SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">
\r
62 <EOL_SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">//!<</EOL_SPAN>
\r
63 <EOL_SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">//!</EOL_SPAN>
\r
65 <!-- C style comment -->
\r
66 <SPAN TYPE="COMMENT1">
\r
70 <EOL_SPAN TYPE="COMMENT1">//</EOL_SPAN>
\r
72 <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
\r
76 <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
\r
80 <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
\r
84 <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
\r
90 <SEQ TYPE="LITERAL4">??(</SEQ>
\r
91 <SEQ TYPE="LITERAL4">??/</SEQ>
\r
92 <SEQ TYPE="LITERAL4">??)</SEQ>
\r
93 <SEQ TYPE="LITERAL4">??'</SEQ>
\r
94 <SEQ TYPE="LITERAL4">??<</SEQ>
\r
95 <SEQ TYPE="LITERAL4">??!</SEQ>
\r
96 <SEQ TYPE="LITERAL4">??></SEQ>
\r
97 <SEQ TYPE="LITERAL4">??-</SEQ>
\r
98 <SEQ TYPE="LITERAL4">??=</SEQ>
\r
100 <!-- Alternate tokens -->
\r
101 <SEQ TYPE="LITERAL4"><:</SEQ>
\r
102 <SEQ TYPE="LITERAL4">:></SEQ>
\r
103 <SEQ TYPE="LITERAL4"><%</SEQ>
\r
104 <SEQ TYPE="LITERAL4">%></SEQ>
\r
105 <SEQ TYPE="LITERAL4">%:</SEQ>
\r
108 This is a part of core language syntax, but must be here
\r
109 because it can't work after SEQ for ':'. -->
\r
110 <MARK_PREVIOUS AT_WHITESPACE_END="TRUE"
\r
111 MATCH_TYPE="OPERATOR"
\r
112 TYPE="LABEL">:</MARK_PREVIOUS>
\r
114 <!-- Function-like macro or function calls.
\r
115 This can't work after SEQ for '('. -->
\r
118 MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>
\r
120 <SEQ TYPE="OPERATOR">=</SEQ>
\r
121 <SEQ TYPE="OPERATOR">!</SEQ>
\r
122 <SEQ TYPE="OPERATOR">+</SEQ>
\r
123 <SEQ TYPE="OPERATOR">-</SEQ>
\r
124 <SEQ TYPE="OPERATOR">/</SEQ>
\r
125 <SEQ TYPE="OPERATOR">*</SEQ>
\r
126 <SEQ TYPE="OPERATOR">></SEQ>
\r
127 <SEQ TYPE="OPERATOR"><</SEQ>
\r
128 <SEQ TYPE="OPERATOR">%</SEQ>
\r
129 <SEQ TYPE="OPERATOR">&</SEQ>
\r
130 <SEQ TYPE="OPERATOR">|</SEQ>
\r
131 <SEQ TYPE="OPERATOR">^</SEQ>
\r
132 <SEQ TYPE="OPERATOR">~</SEQ>
\r
133 <SEQ TYPE="OPERATOR">?</SEQ>
\r
134 <SEQ TYPE="OPERATOR">:</SEQ>
\r
135 <SEQ TYPE="OPERATOR">.</SEQ>
\r
136 <SEQ TYPE="OPERATOR">,</SEQ>
\r
137 <SEQ TYPE="OPERATOR">[</SEQ>
\r
138 <SEQ TYPE="OPERATOR">]</SEQ>
\r
139 <SEQ TYPE="OPERATOR">)</SEQ>
\r
140 <SEQ TYPE="OPERATOR">}</SEQ>
\r
141 <SEQ TYPE="OPERATOR">{</SEQ>
\r
142 <SEQ TYPE="OPERATOR">;</SEQ>
\r
145 <!-- Predefined macro names from ISO C++ Standard 2003 -->
\r
146 <LITERAL2>__DATE__</LITERAL2>
\r
147 <LITERAL2>__FILE__</LITERAL2>
\r
148 <LITERAL2>__LINE__</LITERAL2>
\r
149 <LITERAL2>__STDC_HOSTED__</LITERAL2>
\r
150 <LITERAL2>__STDC_ISO_10646__</LITERAL2>
\r
151 <LITERAL2>__STDC_VERSION__</LITERAL2>
\r
152 <LITERAL2>__STDC__</LITERAL2>
\r
153 <LITERAL2>__TIME__</LITERAL2>
\r
154 <LITERAL2>__cplusplus</LITERAL2>
\r
155 <!-- Standard library macro names from ISO C++ Standard 2003 -->
\r
156 <!-- Hilight these to indicate accidental use of them
\r
157 in user source. They may be valid, but should cause
\r
158 future conflicts. -->
\r
159 <LITERAL2>BUFSIZ</LITERAL2>
\r
160 <LITERAL2>CLOCKS_PER_SEC</LITERAL2>
\r
161 <LITERAL2>EDOM</LITERAL2>
\r
162 <LITERAL2>EILSEQ</LITERAL2>
\r
163 <LITERAL2>EOF</LITERAL2>
\r
164 <LITERAL2>ERANGE</LITERAL2>
\r
165 <LITERAL2>EXIT_FAILURE</LITERAL2>
\r
166 <LITERAL2>EXIT_SUCCESS</LITERAL2>
\r
167 <LITERAL2>FILENAME_MAX</LITERAL2>
\r
168 <LITERAL2>FOPEN_MAX</LITERAL2>
\r
169 <LITERAL2>HUGE_VAL</LITERAL2>
\r
170 <LITERAL2>LC_ALL</LITERAL2>
\r
171 <LITERAL2>LC_COLLATE</LITERAL2>
\r
172 <LITERAL2>LC_CTYPE</LITERAL2>
\r
173 <LITERAL2>LC_MONETARY</LITERAL2>
\r
174 <LITERAL2>LC_NUMERIC</LITERAL2>
\r
175 <LITERAL2>LC_TIME</LITERAL2>
\r
176 <LITERAL2>L_tmpnam</LITERAL2>
\r
177 <LITERAL2>MB_CUR_MAX</LITERAL2>
\r
178 <LITERAL2>NULL</LITERAL2>
\r
179 <LITERAL2>RAND_MAX</LITERAL2>
\r
180 <LITERAL2>SEEK_CUR</LITERAL2>
\r
181 <LITERAL2>SEEK_END</LITERAL2>
\r
182 <LITERAL2>SEEK_SET</LITERAL2>
\r
183 <LITERAL2>SIGABRT</LITERAL2>
\r
184 <LITERAL2>SIGFPE</LITERAL2>
\r
185 <LITERAL2>SIGILL</LITERAL2>
\r
186 <LITERAL2>SIGINT</LITERAL2>
\r
187 <LITERAL2>SIGSEGV</LITERAL2>
\r
188 <LITERAL2>SIGTERM</LITERAL2>
\r
189 <LITERAL2>SIG_DFL</LITERAL2>
\r
190 <LITERAL2>SIG_ERR</LITERAL2>
\r
191 <LITERAL2>SIG_IGN</LITERAL2>
\r
192 <LITERAL2>TMP_MAX</LITERAL2>
\r
193 <LITERAL2>WCHAR_MAX</LITERAL2>
\r
194 <LITERAL2>WCHAR_MIN</LITERAL2>
\r
195 <LITERAL2>WEOF</LITERAL2>
\r
196 <LITERAL2>_IOFBF</LITERAL2>
\r
197 <LITERAL2>_IOLBF</LITERAL2>
\r
198 <LITERAL2>_IONBF</LITERAL2>
\r
199 <LITERAL2>assert</LITERAL2>
\r
200 <LITERAL2>errno</LITERAL2>
\r
201 <LITERAL2>offsetof</LITERAL2>
\r
202 <LITERAL2>setjmp</LITERAL2>
\r
203 <LITERAL2>stderr</LITERAL2>
\r
204 <LITERAL2>stdin</LITERAL2>
\r
205 <LITERAL2>stdout</LITERAL2>
\r
206 <LITERAL2>va_arg</LITERAL2>
\r
207 <LITERAL2>va_end</LITERAL2>
\r
208 <LITERAL2>va_start</LITERAL2>
\r
209 <!-- Standard C library values from ISO C++ Standard 2003 -->
\r
210 <!-- These are not explicitly defined as macro. But they like
\r
211 to be due to compatibility with C library implementation.
\r
212 So, treat them like standard library macro names. -->
\r
213 <LITERAL2>CHAR_BIT</LITERAL2>
\r
214 <LITERAL2>CHAR_MAX</LITERAL2>
\r
215 <LITERAL2>CHAR_MIN</LITERAL2>
\r
216 <LITERAL2>DBL_DIG</LITERAL2>
\r
217 <LITERAL2>DBL_EPSILON</LITERAL2>
\r
218 <LITERAL2>DBL_MANT_DIG</LITERAL2>
\r
219 <LITERAL2>DBL_MAX</LITERAL2>
\r
220 <LITERAL2>DBL_MAX_10_EXP</LITERAL2>
\r
221 <LITERAL2>DBL_MAX_EXP</LITERAL2>
\r
222 <LITERAL2>DBL_MIN</LITERAL2>
\r
223 <LITERAL2>DBL_MIN_10_EXP</LITERAL2>
\r
224 <LITERAL2>DBL_MIN_EXP</LITERAL2>
\r
225 <LITERAL2>FLT_DIG</LITERAL2>
\r
226 <LITERAL2>FLT_EPSILON</LITERAL2>
\r
227 <LITERAL2>FLT_MANT_DIG</LITERAL2>
\r
228 <LITERAL2>FLT_MAX</LITERAL2>
\r
229 <LITERAL2>FLT_MAX_10_EXP</LITERAL2>
\r
230 <LITERAL2>FLT_MAX_EXP</LITERAL2>
\r
231 <LITERAL2>FLT_MIN</LITERAL2>
\r
232 <LITERAL2>FLT_MIN_10_EXP</LITERAL2>
\r
233 <LITERAL2>FLT_MIN_EXP</LITERAL2>
\r
234 <LITERAL2>FLT_RADIX</LITERAL2>
\r
235 <LITERAL2>FLT_ROUNDS</LITERAL2>
\r
236 <LITERAL2>INT_MAX</LITERAL2>
\r
237 <LITERAL2>INT_MIN</LITERAL2>
\r
238 <LITERAL2>LDBL_DIG</LITERAL2>
\r
239 <LITERAL2>LDBL_EPSILON</LITERAL2>
\r
240 <LITERAL2>LDBL_MANT_DIG</LITERAL2>
\r
241 <LITERAL2>LDBL_MAX</LITERAL2>
\r
242 <LITERAL2>LDBL_MAX_10_EXP</LITERAL2>
\r
243 <LITERAL2>LDBL_MAX_EXP</LITERAL2>
\r
244 <LITERAL2>LDBL_MIN</LITERAL2>
\r
245 <LITERAL2>LDBL_MIN_10_EXP</LITERAL2>
\r
246 <LITERAL2>LDBL_MIN_EXP</LITERAL2>
\r
247 <LITERAL2>LONG_MAX</LITERAL2>
\r
248 <LITERAL2>LONG_MIN</LITERAL2>
\r
249 <LITERAL2>MB_LEN_MAX</LITERAL2>
\r
250 <LITERAL2>SCHAR_MAX</LITERAL2>
\r
251 <LITERAL2>SCHAR_MIN</LITERAL2>
\r
252 <LITERAL2>SHRT_MAX</LITERAL2>
\r
253 <LITERAL2>SHRT_MIN</LITERAL2>
\r
254 <LITERAL2>UCHAR_MAX</LITERAL2>
\r
255 <LITERAL2>UINT_MAX</LITERAL2>
\r
256 <LITERAL2>ULONG_MAX</LITERAL2>
\r
257 <LITERAL2>USRT_MAX</LITERAL2>
\r
258 <!-- Alternative representations of some operators
\r
259 from ISO C++ Standard 2003 -->
\r
260 <!-- These are separated from CORE because they are
\r
261 available in the constant expressions after
\r
262 #if and #elif preprocessor directives. -->
\r
263 <KEYWORD3>and</KEYWORD3>
\r
264 <KEYWORD3>and_eq</KEYWORD3>
\r
265 <KEYWORD3>bitand</KEYWORD3>
\r
266 <KEYWORD3>bitor</KEYWORD3>
\r
267 <KEYWORD3>compl</KEYWORD3>
\r
268 <KEYWORD3>not</KEYWORD3>
\r
269 <KEYWORD3>not_eq</KEYWORD3>
\r
270 <KEYWORD3>or</KEYWORD3>
\r
271 <KEYWORD3>or_eq</KEYWORD3>
\r
272 <KEYWORD3>xor</KEYWORD3>
\r
273 <KEYWORD3>xor_eq</KEYWORD3>
\r
277 <!-- Core language -->
\r
279 ESCAPE="\" IGNORE_CASE="FALSE"
\r
280 HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
\r
283 <KEYWORD3>bool</KEYWORD3>
\r
284 <KEYWORD3>char</KEYWORD3>
\r
285 <KEYWORD3>double</KEYWORD3>
\r
286 <KEYWORD3>enum</KEYWORD3>
\r
287 <KEYWORD3>float</KEYWORD3>
\r
288 <KEYWORD3>int</KEYWORD3>
\r
289 <KEYWORD3>long</KEYWORD3>
\r
290 <KEYWORD3>short</KEYWORD3>
\r
291 <KEYWORD3>signed</KEYWORD3>
\r
292 <KEYWORD3>struct</KEYWORD3>
\r
293 <KEYWORD3>union</KEYWORD3>
\r
294 <KEYWORD3>unsigned</KEYWORD3>
\r
295 <!-- Keywords from ISO C++ Standard 2003 -->
\r
296 <KEYWORD2>asm</KEYWORD2>
\r
297 <KEYWORD1>auto</KEYWORD1>
\r
298 <KEYWORD1>break</KEYWORD1>
\r
299 <KEYWORD1>case</KEYWORD1>
\r
300 <KEYWORD1>const</KEYWORD1>
\r
301 <KEYWORD1>continue</KEYWORD1>
\r
302 <KEYWORD1>default</KEYWORD1>
\r
303 <KEYWORD1>do</KEYWORD1>
\r
304 <KEYWORD1>else</KEYWORD1>
\r
305 <KEYWORD2>extern</KEYWORD2>
\r
306 <LITERAL2>false</LITERAL2>
\r
307 <KEYWORD1>for</KEYWORD1>
\r
308 <KEYWORD1>goto</KEYWORD1>
\r
309 <KEYWORD1>if</KEYWORD1>
\r
310 <KEYWORD1>inline</KEYWORD1>
\r
311 <KEYWORD1>register</KEYWORD1>
\r
312 <KEYWORD1>return</KEYWORD1>
\r
313 <KEYWORD1>sizeof</KEYWORD1>
\r
314 <KEYWORD1>static</KEYWORD1>
\r
315 <KEYWORD1>switch</KEYWORD1>
\r
316 <LITERAL2>true</LITERAL2>
\r
317 <KEYWORD3>typedef</KEYWORD3>
\r
318 <KEYWORD1>void</KEYWORD1>
\r
319 <KEYWORD1>volatile</KEYWORD1>
\r
320 <KEYWORD1>while</KEYWORD1>
\r
321 <!-- Additional keywords from ISO C Standard(C99) -->
\r
322 <KEYWORD3>restrict</KEYWORD3>
\r
323 <KEYWORD3>_Bool</KEYWORD3>
\r
324 <KEYWORD3>_Complex</KEYWORD3>
\r
325 <KEYWORD3>_Pragma</KEYWORD3>
\r
326 <KEYWORD3>_Imaginary</KEYWORD3>
\r
330 <!-- Preprocessor specific rules -->
\r
332 ESCAPE="\" IGNORE_CASE="FALSE"
\r
333 HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
\r
335 <EOL_SPAN_REGEXP HASH_CHAR="include" TYPE="MARKUP" DELEGATE="INCLUDE">include\b</EOL_SPAN_REGEXP>
\r
336 <EOL_SPAN_REGEXP HASH_CHAR="define" TYPE="MARKUP" DELEGATE="DEFINE">define\b</EOL_SPAN_REGEXP>
\r
337 <EOL_SPAN_REGEXP HASH_CHAR="endif" TYPE="MARKUP" DELEGATE="LEX">endif\b</EOL_SPAN_REGEXP>
\r
338 <EOL_SPAN_REGEXP HASH_CHAR="elif" TYPE="MARKUP" DELEGATE="CONDITION">elif\b</EOL_SPAN_REGEXP>
\r
339 <EOL_SPAN_REGEXP HASH_CHAR="if" TYPE="MARKUP" DELEGATE="CONDITION">if\b</EOL_SPAN_REGEXP>
\r
341 <IMPORT DELEGATE="LEX"/>
\r
343 <!-- Directives -->
\r
345 <MARKUP>ifdef</MARKUP>
\r
346 <MARKUP>ifndef</MARKUP>
\r
347 <MARKUP>else</MARKUP>
\r
348 <MARKUP>error</MARKUP>
\r
349 <MARKUP>line</MARKUP>
\r
350 <MARKUP>pragma</MARKUP>
\r
351 <MARKUP>undef</MARKUP>
\r
352 <MARKUP>warning</MARKUP>
\r
356 <!-- After #include directive -->
\r
357 <!-- "\"s are not escaped. -->
\r
358 <RULES SET="INCLUDE"
\r
359 IGNORE_CASE="FALSE"
\r
360 HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
\r
361 <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
\r
362 <BEGIN><</BEGIN>
\r
365 <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
\r
369 <IMPORT DELEGATE="LEX"/>
\r
372 <!-- After #define directive -->
\r
373 <!-- Almost same as the normal code,
\r
374 except two additional operators # and ##. -->
\r
375 <RULES SET="DEFINE"
\r
376 ESCAPE="\" IGNORE_CASE="FALSE"
\r
377 HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
\r
378 <SEQ TYPE="OPERATOR">#</SEQ>
\r
379 <IMPORT DELEGATE="LEX"/>
\r
380 <IMPORT DELEGATE="CORE"/>
\r
383 <!-- After #if or #elif directive -->
\r
384 <!-- All constant expressions and a special operator
\r
385 'defined' is available. But the core language elements
\r
386 (such as operator 'sizeof', type casting, etc...) are not. -->
\r
387 <RULES SET="CONDITION"
\r
388 ESCAPE="\" IGNORE_CASE="FALSE"
\r
389 HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
\r
390 <IMPORT DELEGATE="LEX"/>
\r
392 <KEYWORD2>defined</KEYWORD2>
\r
393 <!-- Both true and false are specially permitted by
\r
394 ISO C++ Standard 2003 16.1p4 -->
\r
395 <KEYWORD2>true</KEYWORD2>
\r
396 <KEYWORD2>false</KEYWORD2>
\r