1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- Syntax highlighting for the under-development Mozilla Rust language -->
5 <language id="rust" _name="Rust" version="2.0" _section="Sources">
7 <property name="mimetypes">text/x-rust</property>
8 <property name="globs">*.rs</property>
9 <property name="line-comment-start">//</property>
10 <property name="block-comment-start">/*</property>
11 <property name="block-comment-end">*/</property>
15 <style id="comment" _name="Comment" map-to="def:comment"/>
16 <style id="string" _name="String" map-to="def:string"/>
17 <style id="char" _name="Character" map-to="def:character"/>
18 <style id="keyword" _name="Keyword" map-to="def:keyword"/>
19 <style id="type" _name="Data Type" map-to="def:type"/>
20 <style id="constant" _name="Constant" map-to="def:constant"/>
21 <style id="identifier" _name="Identifier" map-to="def:identifier"/>
22 <style id="number" _name="Number" map-to="def:number"/>
23 <style id="scope" _name="Scope" map-to="def:preprocessor"/>
24 <style id="attribute" _name="Attribute" map-to="def:preprocessor"/>
29 <context id="function" style-ref="keyword">
33 <context id="type" style-ref="keyword">
34 <keyword>type</keyword>
37 <context id="keywords" style-ref="keyword">
39 <keyword>assert</keyword>
40 <keyword>break</keyword>
41 <keyword>box</keyword>
42 <keyword>const</keyword>
43 <keyword>continue</keyword>
44 <keyword>crate</keyword>
46 <keyword>drop</keyword>
47 <keyword>else</keyword>
48 <keyword>enum</keyword>
49 <keyword>export</keyword>
50 <keyword>extern</keyword>
51 <keyword>fail</keyword>
52 <keyword>for</keyword>
54 <keyword>impl</keyword>
56 <keyword>let</keyword>
57 <keyword>log</keyword>
58 <keyword>loop</keyword>
59 <keyword>match</keyword>
60 <keyword>mod</keyword>
61 <keyword>move</keyword>
62 <keyword>mut</keyword>
63 <keyword>priv</keyword>
64 <keyword>pub</keyword>
65 <keyword>pure</keyword>
66 <keyword>ref</keyword>
67 <keyword>return</keyword>
68 <keyword>static</keyword>
69 <keyword>struct</keyword>
70 <keyword>trait</keyword>
71 <keyword>unsafe</keyword>
72 <keyword>use</keyword>
73 <keyword>while</keyword>
76 <context id="types" style-ref="type">
77 <keyword>bool</keyword>
78 <keyword>int</keyword>
79 <keyword>uint</keyword>
81 <keyword>i16</keyword>
82 <keyword>i32</keyword>
83 <keyword>i64</keyword>
85 <keyword>u16</keyword>
86 <keyword>u32</keyword>
87 <keyword>u64</keyword>
88 <keyword>f32</keyword>
89 <keyword>f64</keyword>
90 <keyword>char</keyword>
91 <keyword>str</keyword>
92 <keyword>Option</keyword>
93 <keyword>Result</keyword>
96 <context id="ctypes" style-ref="type">
97 <keyword>c_float</keyword>
98 <keyword>c_double</keyword>
99 <keyword>c_void</keyword>
100 <keyword>FILE</keyword>
101 <keyword>fpos_t</keyword>
102 <keyword>DIR</keyword>
103 <keyword>dirent</keyword>
104 <keyword>c_char</keyword>
105 <keyword>c_schar</keyword>
106 <keyword>c_uchar</keyword>
107 <keyword>c_short</keyword>
108 <keyword>c_ushort</keyword>
109 <keyword>c_int</keyword>
110 <keyword>c_uint</keyword>
111 <keyword>c_long</keyword>
112 <keyword>c_ulong</keyword>
113 <keyword>size_t</keyword>
114 <keyword>ptrdiff_t</keyword>
115 <keyword>clock_t</keyword>
116 <keyword>time_t</keyword>
117 <keyword>c_longlong</keyword>
118 <keyword>c_ulonglong</keyword>
119 <keyword>intptr_t</keyword>
120 <keyword>uintptr_t</keyword>
121 <keyword>off_t</keyword>
122 <keyword>dev_t</keyword>
123 <keyword>ino_t</keyword>
124 <keyword>pid_t</keyword>
125 <keyword>mode_t</keyword>
126 <keyword>ssize_t</keyword>
129 <context id="self" style-ref="identifier">
130 <keyword>self</keyword>
133 <context id="constants" style-ref="constant">
134 <keyword>true</keyword>
135 <keyword>false</keyword>
136 <keyword>Some</keyword>
137 <keyword>None</keyword>
138 <keyword>Ok</keyword>
139 <keyword>Err</keyword>
140 <keyword>Success</keyword>
141 <keyword>Failure</keyword>
142 <keyword>Cons</keyword>
143 <keyword>Nil</keyword>
146 <context id="cconstants" style-ref="constant">
147 <keyword>EXIT_FAILURE</keyword>
148 <keyword>EXIT_SUCCESS</keyword>
149 <keyword>RAND_MAX</keyword>
150 <keyword>EOF</keyword>
151 <keyword>SEEK_SET</keyword>
152 <keyword>SEEK_CUR</keyword>
153 <keyword>SEEK_END</keyword>
154 <keyword>_IOFBF</keyword>
155 <keyword>_IONBF</keyword>
156 <keyword>_IOLBF</keyword>
157 <keyword>BUFSIZ</keyword>
158 <keyword>FOPEN_MAX</keyword>
159 <keyword>FILENAME_MAX</keyword>
160 <keyword>L_tmpnam</keyword>
161 <keyword>TMP_MAX</keyword>
162 <keyword>O_RDONLY</keyword>
163 <keyword>O_WRONLY</keyword>
164 <keyword>O_RDWR</keyword>
165 <keyword>O_APPEND</keyword>
166 <keyword>O_CREAT</keyword>
167 <keyword>O_EXCL</keyword>
168 <keyword>O_TRUNC</keyword>
169 <keyword>S_IFIFO</keyword>
170 <keyword>S_IFCHR</keyword>
171 <keyword>S_IFBLK</keyword>
172 <keyword>S_IFDIR</keyword>
173 <keyword>S_IFREG</keyword>
174 <keyword>S_IFMT</keyword>
175 <keyword>S_IEXEC</keyword>
176 <keyword>S_IWRITE</keyword>
177 <keyword>S_IREAD</keyword>
178 <keyword>S_IRWXU</keyword>
179 <keyword>S_IXUSR</keyword>
180 <keyword>S_IWUSR</keyword>
181 <keyword>S_IRUSR</keyword>
182 <keyword>F_OK</keyword>
183 <keyword>R_OK</keyword>
184 <keyword>W_OK</keyword>
185 <keyword>X_OK</keyword>
186 <keyword>STDIN_FILENO</keyword>
187 <keyword>STDOUT_FILENO</keyword>
188 <keyword>STDERR_FILENO</keyword>
191 <context id="line-comment" style-ref="comment" end-at-line-end="true" class="comment" class-disabled="no-spell-check">
194 <context ref="def:in-line-comment"/>
198 <context id="block-comment" style-ref="comment" class="comment" class-disabled="no-spell-check">
202 <context ref="def:in-comment"/>
206 <define-regex id="int_suffix" extended="true">
207 (i8|i16|i32|i64|i|u8|u16|u32|u64|u)
210 <define-regex id="exponent" extended="true">
214 <define-regex id="float_suffix" extended="true">
215 (\%{exponent}?(f32|f64)?)|(\.[0-9][0-9_]*\%{exponent}?)?(f32|f64)?|\.
218 <define-regex id="num_suffix" extended="true">
219 \%{int_suffix}|\%{float_suffix}
222 <define-regex id="hex_digit" extended="true">
226 <define-regex id="oct_digit" extended="true">
230 <context id="number" style-ref="number">
231 <match extended="true">
232 ((?<=\.\.)|(?<![\w\.]))
234 [1-9][0-9_]*\%{num_suffix}?|
235 0[0-9_]*\%{num_suffix}?|
236 0b[01_]+\%{int_suffix}?|
237 0o(\%{oct_digit}|_)+\%{int_suffix}?|
238 0x(\%{hex_digit}|_)+\%{int_suffix}?
240 ((?![\w\.].)|(?=\.\.))
244 <define-regex id="ident" extended="true">
245 ([^[:cntrl:][:space:][:punct:][:digit:]]|_)([^[:cntrl:][:punct:][:space:]]|_)*
248 <context id="scope" style-ref="scope">
249 <match extended="true">
254 <context id="lifetime" style-ref="keyword">
255 <match extended="true">
260 <define-regex id="common_escape" extended="true">
268 <context id="string_escape" style-ref="def:special-char">
269 <match>\\\%{common_escape}</match>
272 <context id="string" style-ref="string" class="string" class-disabled="no-spell-check">
276 <context ref="string_escape"/>
277 <context ref="def:line-continue"/>
281 <context id="char" style-ref="char">
282 <match extended="true">'([^\\']|\\\%{common_escape})'</match>
285 <context id="attribute" style-ref="attribute" class="attribute">
286 <start extended="true">\#!?\[</start>
289 <context ref="def:in-comment"/>
293 <context id="rust" class="no-spell-check">
295 <context ref="function"/>
296 <context ref="type"/>
297 <context ref="keywords"/>
298 <context ref="types"/>
299 <context ref="ctypes"/>
300 <context ref="self"/>
301 <context ref="constants"/>
302 <context ref="cconstants"/>
303 <context ref="line-comment"/>
304 <context ref="block-comment"/>
305 <context ref="number"/>
306 <context ref="scope"/>
307 <context ref="string"/>
308 <context ref="char"/>
309 <context ref="lifetime"/>
310 <context ref="attribute"/>