]> gitweb.factorcode.org Git - factor.git/blob - basis/xmode/modes/c.xml
a4a94694a0a1d3260c95eb6b1c20c9ea1d9be9d9
[factor.git] / basis / xmode / modes / c.xml
1 <?xml version="1.0"?>\r
2 \r
3 <!DOCTYPE MODE SYSTEM "xmode.dtd">\r
4 \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
7 <MODE>\r
8     <PROPS>\r
9         <PROPERTY NAME="commentStart" VALUE="/*" />\r
10         <PROPERTY NAME="commentEnd" VALUE="*/" />\r
11         <PROPERTY NAME="lineComment" VALUE="//" />\r
12         <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
13 \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
24     </PROPS>\r
25 \r
26     <RULES\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
30 \r
31         <IMPORT DELEGATE="LEX"/>\r
32         <IMPORT DELEGATE="CORE"/>\r
33     </RULES>\r
34 \r
35     <!-- Comments, Trigraph, Alternate-Tokens -->\r
36     <RULES SET="LEX"\r
37         ESCAPE="\" IGNORE_CASE="FALSE"\r
38         HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
39 \r
40         <!-- Doxygen comment, Javadoc style -->\r
41         <SEQ TYPE="COMMENT1">/**/</SEQ>\r
42         <SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">\r
43             <BEGIN>/**&lt;</BEGIN>\r
44             <END>*/</END>\r
45         </SPAN>\r
46         <SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">\r
47             <BEGIN>/**</BEGIN>\r
48             <END>*/</END>\r
49         </SPAN>\r
50         <EOL_SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">///&lt;</EOL_SPAN>\r
51         <EOL_SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">///</EOL_SPAN>\r
52 \r
53         <!-- Doxygen comment, Qt style -->\r
54         <SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">\r
55             <BEGIN>/*!&lt;</BEGIN>\r
56             <END>*/</END>\r
57         </SPAN>\r
58         <SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">\r
59             <BEGIN>/*!</BEGIN>\r
60             <END>*/</END>\r
61         </SPAN>\r
62         <EOL_SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">//!&lt;</EOL_SPAN>\r
63         <EOL_SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">//!</EOL_SPAN>\r
64 \r
65         <!-- C style comment -->\r
66         <SPAN TYPE="COMMENT1">\r
67             <BEGIN>/*</BEGIN>\r
68             <END>*/</END>\r
69         </SPAN>\r
70         <EOL_SPAN TYPE="COMMENT1">//</EOL_SPAN>\r
71 \r
72         <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
73             <BEGIN>L"</BEGIN>\r
74             <END>"</END>\r
75         </SPAN>\r
76         <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
77             <BEGIN>"</BEGIN>\r
78             <END>"</END>\r
79         </SPAN>\r
80         <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
81             <BEGIN>L'</BEGIN>\r
82             <END>'</END>\r
83         </SPAN>\r
84         <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
85             <BEGIN>'</BEGIN>\r
86             <END>'</END>\r
87         </SPAN>\r
88 \r
89         <!-- Trigraphs -->\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">??&lt;</SEQ>\r
95         <SEQ TYPE="LITERAL4">??!</SEQ>\r
96         <SEQ TYPE="LITERAL4">??&gt;</SEQ>\r
97         <SEQ TYPE="LITERAL4">??-</SEQ>\r
98         <SEQ TYPE="LITERAL4">??=</SEQ>\r
99 \r
100         <!-- Alternate tokens -->\r
101         <SEQ TYPE="LITERAL4">&lt;:</SEQ>\r
102         <SEQ TYPE="LITERAL4">:&gt;</SEQ>\r
103         <SEQ TYPE="LITERAL4">&lt;%</SEQ>\r
104         <SEQ TYPE="LITERAL4">%&gt;</SEQ>\r
105         <SEQ TYPE="LITERAL4">%:</SEQ>\r
106 \r
107         <!-- Labels.\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
113 \r
114         <!-- Function-like macro or function calls.\r
115             This can't work after SEQ for '('. -->\r
116         <MARK_PREVIOUS\r
117             TYPE="FUNCTION"\r
118             MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
119 \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">&gt;</SEQ>\r
127         <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
128         <SEQ TYPE="OPERATOR">%</SEQ>\r
129         <SEQ TYPE="OPERATOR">&amp;</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
143 \r
144         <KEYWORDS>\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
274         </KEYWORDS>\r
275     </RULES>\r
276 \r
277     <!-- Core language -->\r
278     <RULES SET="CORE"\r
279         ESCAPE="\" IGNORE_CASE="FALSE"\r
280         HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
281         <KEYWORDS>\r
282             <!-- Types -->\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
327         </KEYWORDS>\r
328     </RULES>\r
329 \r
330     <!-- Preprocessor specific rules -->\r
331     <RULES SET="CPP"\r
332         ESCAPE="\" IGNORE_CASE="FALSE"\r
333         HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">\r
334 \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
340 \r
341         <IMPORT DELEGATE="LEX"/>\r
342 \r
343         <!-- Directives -->\r
344         <KEYWORDS>\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
353         </KEYWORDS>\r
354     </RULES>\r
355 \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>&lt;</BEGIN>\r
363             <END>&gt;</END>\r
364         </SPAN>\r
365         <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
366             <BEGIN>"</BEGIN>\r
367             <END>"</END>\r
368         </SPAN>\r
369         <IMPORT DELEGATE="LEX"/>\r
370     </RULES>\r
371 \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
381     </RULES>\r
382 \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
391         <KEYWORDS>\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
397         </KEYWORDS>\r
398     </RULES>\r
399 \r
400 </MODE>\r
401 \r