]> git.xonotic.org Git - xonotic/gmqcc.git/blob - syntax/jedit/qc.xml
94b2d666a3ed10b8c756ce42643e932c01d0bb24
[xonotic/gmqcc.git] / syntax / jedit / qc.xml
1 <?xml version="1.0"?>
2
3 <!DOCTYPE MODE SYSTEM "xmode.dtd">
4
5 <MODE>
6     <PROPS>
7         <PROPERTY NAME="commentStart" VALUE="/*" />
8         <PROPERTY NAME="commentEnd" VALUE="*/" />
9         <PROPERTY NAME="lineComment" VALUE="//" />
10         <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />
11
12         <!-- Auto indent -->
13         <PROPERTY NAME="indentOpenBrackets" VALUE="{" />
14         <PROPERTY NAME="indentCloseBrackets" VALUE="}" />
15         <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />
16         <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />
17         <PROPERTY NAME="indentNextLine"
18             VALUE="(?!^\s*(#|//)).*(\b(if|while|for)\s*\(.*\)|\b(else|do)\b)[^{;]*$" />
19         <PROPERTY NAME="unindentThisLine"
20             VALUE="^\s*((case\b.*|[\p{Alpha}_][\p{Alnum}_]*)\s*:(?!:)).*$" />
21         <PROPERTY NAME="electricKeys" VALUE=":" />
22     </PROPS>
23
24     <RULES
25         IGNORE_CASE="FALSE"
26         HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
27         <EOL_SPAN TYPE="KEYWORD2" AT_WHITESPACE_END="TRUE" DELEGATE="CPP">#</EOL_SPAN>
28
29         <IMPORT DELEGATE="LEX"/>
30         <IMPORT DELEGATE="CORE"/>
31     </RULES>
32
33     <RULES SET="LEX" IGNORE_CASE="FALSE">
34         <IMPORT DELEGATE="COMMENTS" />
35         <IMPORT DELEGATE="C_LEXER" />
36     </RULES>
37
38     <!-- Comments, Trigraph, Alternate-Tokens -->
39     <RULES SET="C_LEXER"
40         IGNORE_CASE="FALSE"
41         HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
42
43         <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" ESCAPE="\">
44             <BEGIN>L"</BEGIN>
45             <END>"</END>
46         </SPAN>
47         <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" ESCAPE="\">
48             <BEGIN>"</BEGIN>
49             <END>"</END>
50         </SPAN>
51         <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" ESCAPE="\">
52             <BEGIN>L'</BEGIN>
53             <END>'</END>
54         </SPAN>
55         <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" ESCAPE="\">
56             <BEGIN>'</BEGIN>
57             <END>'</END>
58         </SPAN>
59
60         <!-- Trigraphs -->
61         <SEQ TYPE="LITERAL4">??(</SEQ>
62         <SEQ TYPE="LITERAL4">??/</SEQ>
63         <SEQ TYPE="LITERAL4">??)</SEQ>
64         <SEQ TYPE="LITERAL4">??'</SEQ>
65         <SEQ TYPE="LITERAL4">??&lt;</SEQ>
66         <SEQ TYPE="LITERAL4">??!</SEQ>
67         <SEQ TYPE="LITERAL4">??&gt;</SEQ>
68         <SEQ TYPE="LITERAL4">??-</SEQ>
69         <SEQ TYPE="LITERAL4">??=</SEQ>
70
71         <!-- Alternate tokens -->
72         <SEQ TYPE="LITERAL4">&lt;:</SEQ>
73         <SEQ TYPE="LITERAL4">:&gt;</SEQ>
74         <SEQ TYPE="LITERAL4">&lt;%</SEQ>
75         <SEQ TYPE="LITERAL4">%&gt;</SEQ>
76         <SEQ TYPE="LITERAL4">%:</SEQ>
77
78         <!-- Labels.
79             This is a part of core language syntax, but must be here
80             because it can't work after SEQ for ':'. -->
81         <MARK_PREVIOUS AT_WHITESPACE_END="TRUE"
82             MATCH_TYPE="OPERATOR"
83             TYPE="LABEL">:</MARK_PREVIOUS>
84
85         <!-- Function-like macro or function calls.
86             This can't work after SEQ for '('. -->
87         <MARK_PREVIOUS
88             TYPE="FUNCTION"
89             MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>
90
91         <SEQ TYPE="OPERATOR">=</SEQ>
92         <SEQ TYPE="OPERATOR">!</SEQ>
93         <SEQ TYPE="OPERATOR">+</SEQ>
94         <SEQ TYPE="OPERATOR">-</SEQ>
95         <SEQ TYPE="OPERATOR">/</SEQ>
96         <SEQ TYPE="OPERATOR">*</SEQ>
97         <SEQ TYPE="OPERATOR">&gt;</SEQ>
98         <SEQ TYPE="OPERATOR">&lt;</SEQ>
99         <SEQ TYPE="OPERATOR">%</SEQ>
100         <SEQ TYPE="OPERATOR">&amp;</SEQ>
101         <SEQ TYPE="OPERATOR">|</SEQ>
102         <SEQ TYPE="OPERATOR">^</SEQ>
103         <SEQ TYPE="OPERATOR">~</SEQ>
104         <SEQ TYPE="OPERATOR">?</SEQ>
105         <SEQ TYPE="OPERATOR">:</SEQ>
106         <SEQ TYPE="OPERATOR">.</SEQ>
107         <SEQ TYPE="OPERATOR">,</SEQ>
108         <SEQ TYPE="OPERATOR">[</SEQ>
109         <SEQ TYPE="OPERATOR">]</SEQ>
110         <SEQ TYPE="OPERATOR">)</SEQ>
111         <SEQ TYPE="OPERATOR">}</SEQ>
112         <SEQ TYPE="OPERATOR">{</SEQ>
113         <SEQ TYPE="OPERATOR">;</SEQ>
114
115         <KEYWORDS>
116             <LITERAL2>__FILE__</LITERAL2>
117             <LITERAL2>__LINE__</LITERAL2>
118             <LITERAL2>__DATE__</LITERAL2>
119             <LITERAL2>__RANDOM__</LITERAL2>
120             <LITERAL2>__RANDOM_LAST</LITERAL2>
121             <LITERAL2>__COUNT__</LITERAL2>
122             <LITERAL2>__COUNT_LAST</LITERAL2>
123         </KEYWORDS>
124     </RULES>
125
126     <!-- Core language -->
127     <RULES SET="CORE"
128         IGNORE_CASE="FALSE"
129         HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
130         <KEYWORDS>
131             <!-- Types -->
132             <KEYWORD3>float</KEYWORD3>
133             <KEYWORD3>vector</KEYWORD3>
134             <KEYWORD3>string</KEYWORD3>
135             <KEYWORD3>entity</KEYWORD3>
136             <KEYWORD3>enum</KEYWORD3>
137             <KEYWORD3>.float</KEYWORD3>
138             <KEYWORD3>.int</KEYWORD3>
139             <KEYWORD3>.vector</KEYWORD3>
140             <KEYWORD3>.string</KEYWORD3>
141             <KEYWORD3>.entity</KEYWORD3>
142             <KEYWORD3>.void</KEYWORD3>
143             <KEYWORD3>typedef</KEYWORD3>
144
145             <KEYWORD1>break</KEYWORD1>
146             <KEYWORD1>case</KEYWORD1>
147             <KEYWORD1>continue</KEYWORD1>
148             <KEYWORD1>default</KEYWORD1>
149             <KEYWORD1>do</KEYWORD1>
150             <KEYWORD1>else</KEYWORD1>
151             <KEYWORD1>for</KEYWORD1>
152             <KEYWORD1>goto</KEYWORD1>
153             <KEYWORD1>if</KEYWORD1>
154             <KEYWORD1>return</KEYWORD1>
155             <KEYWORD1>switch</KEYWORD1>
156             <KEYWORD1>void</KEYWORD1>
157             <KEYWORD1>while</KEYWORD1>
158             <KEYWORD1>nil</KEYWORD1>
159
160             <LITERAL2>FALSE</LITERAL2>
161             <LITERAL2>TRUE</LITERAL2>
162             <LITERAL2>...</LITERAL2>
163         </KEYWORDS>
164     </RULES>
165
166     <!-- Different comment styles. -->
167     <RULES SET="COMMENTS">
168         <!-- Doxygen comment, Javadoc style -->
169         <SEQ TYPE="COMMENT1">/**/</SEQ>
170         <SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">
171             <BEGIN>/**&lt;</BEGIN>
172             <END>*/</END>
173         </SPAN>
174         <SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">
175             <BEGIN>/**</BEGIN>
176             <END>*/</END>
177         </SPAN>
178         <EOL_SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">///&lt;</EOL_SPAN>
179         <EOL_SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">///</EOL_SPAN>
180
181         <!-- Doxygen comment, Qt style -->
182         <SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">
183             <BEGIN>/*!&lt;</BEGIN>
184             <END>*/</END>
185         </SPAN>
186         <SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">
187             <BEGIN>/*!</BEGIN>
188             <END>*/</END>
189         </SPAN>
190         <EOL_SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">//!&lt;</EOL_SPAN>
191         <EOL_SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">//!</EOL_SPAN>
192
193         <!-- C style comment -->
194         <SPAN TYPE="COMMENT1">
195             <BEGIN>/*</BEGIN>
196             <END>*/</END>
197         </SPAN>
198         <EOL_SPAN TYPE="COMMENT1">//</EOL_SPAN>
199     </RULES>
200
201     <!-- Preprocessor specific rules -->
202     <RULES SET="CPP"
203         IGNORE_CASE="FALSE"
204         HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
205
206         <EOL_SPAN_REGEXP HASH_CHAR="include" TYPE="MARKUP" DELEGATE="INCLUDE">include\b</EOL_SPAN_REGEXP>
207         <EOL_SPAN_REGEXP HASH_CHAR="define" TYPE="MARKUP" DELEGATE="DEFINE">define\b</EOL_SPAN_REGEXP>
208         <EOL_SPAN_REGEXP HASH_CHAR="endif" TYPE="MARKUP" DELEGATE="LEX">endif\b</EOL_SPAN_REGEXP>
209         <EOL_SPAN_REGEXP HASH_CHAR="elif" TYPE="MARKUP" DELEGATE="CONDITION">elif\b</EOL_SPAN_REGEXP>
210         <EOL_SPAN_REGEXP HASH_CHAR="if" TYPE="MARKUP" DELEGATE="CONDITION">if\b</EOL_SPAN_REGEXP>
211
212         <IMPORT DELEGATE="LEX"/>
213
214         <!-- Directives -->
215         <KEYWORDS>
216             <MARKUP>undef</MARKUP>
217             <MARKUP>ifdef</MARKUP>
218             <MARKUP>ifndef</MARKUP>
219             <MARKUP>else</MARKUP>
220             <MARKUP>error</MARKUP>
221             <MARKUP>warning</MARKUP>
222             <MARKUP>pragma</MARKUP>
223             <MARKUP>$frame</MARKUP>
224             <MARKUP>$model</MARKUP>
225         </KEYWORDS>
226     </RULES>
227
228     <!-- After #include directive -->
229     <!-- "\"s are not escaped. -->
230     <RULES SET="INCLUDE"
231         IGNORE_CASE="FALSE"
232         HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
233         <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
234             <BEGIN>&lt;</BEGIN>
235             <END>&gt;</END>
236         </SPAN>
237         <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
238             <BEGIN>"</BEGIN>
239             <END>"</END>
240         </SPAN>
241         <IMPORT DELEGATE="LEX"/>
242     </RULES>
243
244     <!-- After #define directive -->
245     <!-- Almost same as the normal code,
246         except two additional operators # and ##. -->
247     <RULES SET="DEFINE"
248         IGNORE_CASE="FALSE"
249         HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
250         <SEQ TYPE="OPERATOR">#</SEQ>
251         <IMPORT DELEGATE="LEX"/>
252         <IMPORT DELEGATE="CORE"/>
253     </RULES>
254
255     <!-- After #if or #elif directive -->
256     <!-- All constant expressions and a special operator
257         'defined' is available. But the core language elements
258         (such as operator 'sizeof', type casting, etc...) are not. -->
259     <RULES SET="CONDITION"
260         IGNORE_CASE="FALSE"
261         HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
262         <IMPORT DELEGATE="LEX"/>
263         <KEYWORDS>
264             <KEYWORD2>defined</KEYWORD2>
265             <KEYWORD2>TRUE</KEYWORD2>
266             <KEYWORD2>FALSE</KEYWORD2>
267             <KEYWORD2>true</KEYWORD2>
268             <KEYWORD2>false</KEYWORD2>
269         </KEYWORDS>
270     </RULES>
271 </MODE>