]> gitweb.factorcode.org Git - factor.git/blob - basis/xmode/catalog/modes/rust.xml
basis/xmode: refactor to be deploy friendly.
[factor.git] / basis / xmode / catalog / modes / rust.xml
1 <?xml version="1.0"?>
2 <!--
3  * :tabSize=8:indentSize=8:noTabs=false:
4  * :folding=explicit:collapseFolds=1:
5 -->
6 <!DOCTYPE MODE SYSTEM "xmode.dtd">
7
8 <!-- updated for Rust 1.0 -->
9 <MODE>
10         <PROPS>
11                 <PROPERTY NAME="commentStart" VALUE="/*" />
12                 <PROPERTY NAME="commentEnd" VALUE="*/" />
13                 <PROPERTY NAME="lineComment" VALUE="//" />
14                 <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />
15
16                 <!-- Auto indent -->
17                 <PROPERTY NAME="indentOpenBrackets" VALUE="{" />
18                 <PROPERTY NAME="indentCloseBrackets" VALUE="}" />
19                 <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />
20                 <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />
21         </PROPS>
22         <RULES IGNORE_CASE="FALSE"
23                 HIGHLIGHT_DIGITS="TRUE"
24                 DIGIT_RE="(0b[01_]+|0o[0-8_]+|0x[0-9a-fA-F_]+|[0-9_]+)([iu](8|16|32|64)|isize|usize)?|[0-9_]+([eE][0-9_]*)?(f32|f64)?">
25
26                 <!-- Silly comment -->
27                 <SEQ TYPE="COMMENT1">/**/</SEQ>
28
29                 <!-- Doc comment -->
30                 <SPAN TYPE="COMMENT3" DELEGATE="NESTED_DOC_COMMENT">
31                         <BEGIN>/**</BEGIN>
32                         <END>*/</END>
33                 </SPAN>
34
35                 <!-- Range comment -->
36                 <SPAN TYPE="COMMENT1" DELEGATE="NESTED_COMMENT">
37                         <BEGIN>/*</BEGIN>
38                         <END>*/</END>
39                 </SPAN>
40
41                 <EOL_SPAN TYPE="COMMENT3">///</EOL_SPAN>
42
43                 <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>
44
45                 <SPAN_REGEXP TYPE="LITERAL1" HASH_CHAR="br">
46                         <BEGIN>br(#*)"</BEGIN>
47                         <END>"$1</END>
48                 </SPAN_REGEXP>
49                 <SPAN TYPE="LITERAL1" DELEGATE="DOUBLEQUOTE_LITERAL" NO_LINE_BREAK="FALSE">
50                         <BEGIN>b"</BEGIN>
51                         <END>"</END>
52                 </SPAN>
53                 <SPAN_REGEXP TYPE="LITERAL1" HASH_CHAR="r">
54                         <BEGIN>r(#*)"</BEGIN>
55                         <END>"$1</END>
56                 </SPAN_REGEXP>
57                 <SPAN TYPE="LITERAL1" DELEGATE="DOUBLEQUOTE_LITERAL" NO_LINE_BREAK="FALSE">
58                         <BEGIN>"</BEGIN>
59                         <END>"</END>
60                 </SPAN>
61                 <SEQ_REGEXP TYPE="LITERAL3" HASH_CHARS="b'">b?'(.|\\([\\'nrt0]|x[a-fA-F\d]{2}|u\{[a-fA-F\d]{1,6}\}))'</SEQ_REGEXP>
62
63                 <!-- Lifetimes -->
64                 <!-- I tried to use MARK_FOLLOWING here, but it breaks the char
65                 literal _above_ -->
66                 <SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="'">'\w+</SEQ_REGEXP>
67
68                 <!-- Attributes -->
69                 <SPAN TYPE="KEYWORD4" DELEGATE="ATTRIBUTE" NO_LINE_BREAK="FALSE">
70                         <BEGIN>#[</BEGIN>
71                         <END>]</END>
72                 </SPAN>
73                 <SPAN TYPE="KEYWORD4" DELEGATE="ATTRIBUTE" NO_LINE_BREAK="FALSE">
74                         <BEGIN>#![</BEGIN>
75                         <END>]</END>
76                 </SPAN>
77
78                 <SEQ TYPE="OPERATOR">=</SEQ>
79                 <SEQ TYPE="OPERATOR">!</SEQ>
80                 <SEQ TYPE="OPERATOR">&gt;=</SEQ>
81                 <SEQ TYPE="OPERATOR">&lt;=</SEQ>
82                 <SEQ TYPE="OPERATOR">+</SEQ>
83                 <SEQ TYPE="OPERATOR">-</SEQ>
84                 <SEQ TYPE="OPERATOR">/</SEQ>
85
86                 <!-- workaround to stop "*" from being colorized
87                      in use statements. -->
88                 <SEQ TYPE="NULL">::*</SEQ>
89
90                 <SEQ TYPE="OPERATOR">*</SEQ>
91                 <SEQ TYPE="OPERATOR">&gt;</SEQ>
92                 <SEQ TYPE="OPERATOR">&lt;</SEQ>
93                 <SEQ TYPE="OPERATOR">%</SEQ>
94                 <SEQ TYPE="OPERATOR">&amp;</SEQ>
95                 <SEQ TYPE="OPERATOR">|</SEQ>
96                 <SEQ TYPE="OPERATOR">^</SEQ>
97                 <SEQ TYPE="OPERATOR">}</SEQ>
98                 <SEQ TYPE="OPERATOR">{</SEQ>
99
100                 <!-- Function calls -->
101                 <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>
102                 <SEQ TYPE="OPERATOR">)</SEQ>
103
104                 <SEQ TYPE="OPERATOR">=</SEQ>
105                 <SEQ TYPE="OPERATOR">(</SEQ>
106                 <SEQ TYPE="OPERATOR">)</SEQ>
107                 <SEQ TYPE="OPERATOR">,</SEQ>
108
109                 <KEYWORDS>
110                         <!--{{{ stmts and exprs -->
111                         <KEYWORD1>as</KEYWORD1>
112                         <KEYWORD1>box</KEYWORD1>
113                         <KEYWORD1>break</KEYWORD1>
114                         <KEYWORD1>const</KEYWORD1>
115                         <KEYWORD1>continue</KEYWORD1>
116                         <KEYWORD1>else</KEYWORD1>
117                         <KEYWORD1>for</KEYWORD1>
118                         <KEYWORD1>if</KEYWORD1>
119                         <KEYWORD1>in</KEYWORD1>
120                         <KEYWORD1>let</KEYWORD1>
121                         <KEYWORD1>loop</KEYWORD1>
122                         <KEYWORD1>match</KEYWORD1>
123                         <KEYWORD1>move</KEYWORD1>
124                         <KEYWORD1>mut</KEYWORD1>
125                         <KEYWORD1>ref</KEYWORD1>
126                         <KEYWORD1>return</KEYWORD1>
127                         <KEYWORD1>unsafe</KEYWORD1>
128                         <KEYWORD1>while</KEYWORD1>
129                         <!--}}}-->
130
131                         <!--{{{ view item keywords -->
132                         <KEYWORD2>extern</KEYWORD2>
133                         <KEYWORD2>crate</KEYWORD2>
134                         <KEYWORD2>mod</KEYWORD2>
135                         <KEYWORD2>fn</KEYWORD2>
136                         <KEYWORD2>type</KEYWORD2>
137                         <KEYWORD2>struct</KEYWORD2>
138                         <KEYWORD2>enum</KEYWORD2>
139                         <KEYWORD2>static</KEYWORD2>
140                         <KEYWORD2>trait</KEYWORD2>
141                         <KEYWORD2>impl</KEYWORD2>
142                         <KEYWORD2>use</KEYWORD2>
143                         <KEYWORD2>super</KEYWORD2>
144                         <KEYWORD2>priv</KEYWORD2>
145                         <KEYWORD2>pub</KEYWORD2>
146                         <KEYWORD2>where</KEYWORD2>
147                         <!--}}}-->
148
149                         <!--{{{ literals -->
150                         <LITERAL2>false</LITERAL2>
151                         <LITERAL2>true</LITERAL2>
152                         <LITERAL2>self</LITERAL2>
153                         <!--}}}-->
154
155                         <!--{{{ primitive types from libcore -->
156                         <KEYWORD3>bool</KEYWORD3>
157                         <KEYWORD3>char</KEYWORD3>
158                         <KEYWORD3>f32</KEYWORD3>
159                         <KEYWORD3>f64</KEYWORD3>
160                         <KEYWORD3>i16</KEYWORD3>
161                         <KEYWORD3>i32</KEYWORD3>
162                         <KEYWORD3>i64</KEYWORD3>
163                         <KEYWORD3>i8</KEYWORD3>
164                         <KEYWORD3>isize</KEYWORD3>
165                         <KEYWORD3>str</KEYWORD3>
166                         <KEYWORD3>u16</KEYWORD3>
167                         <KEYWORD3>u32</KEYWORD3>
168                         <KEYWORD3>u64</KEYWORD3>
169                         <KEYWORD3>u8</KEYWORD3>
170                         <KEYWORD3>usize</KEYWORD3>
171
172                         <KEYWORD4>Copy</KEYWORD4>
173                         <KEYWORD4>Send</KEYWORD4>
174                         <KEYWORD4>Sized</KEYWORD4>
175                         <KEYWORD4>Sync</KEYWORD4>
176                         <KEYWORD4>Drop</KEYWORD4>
177                         <KEYWORD4>Fn</KEYWORD4>
178                         <KEYWORD4>FnMut</KEYWORD4>
179                         <KEYWORD4>FnOnce</KEYWORD4>
180                         <KEYWORD4>drop</KEYWORD4>
181                         <KEYWORD4>Box</KEYWORD4>
182                         <KEYWORD4>Clone</KEYWORD4>
183                         <KEYWORD4>PartialEq</KEYWORD4>
184                         <KEYWORD4>PartialOrd</KEYWORD4>
185                         <KEYWORD4>Eq</KEYWORD4>
186                         <KEYWORD4>Ord</KEYWORD4>
187                         <KEYWORD4>AsRef</KEYWORD4>
188                         <KEYWORD4>AsMut</KEYWORD4>
189                         <KEYWORD4>Into</KEYWORD4>
190                         <KEYWORD4>From</KEYWORD4>
191                         <KEYWORD4>DoubleEndedIterator</KEYWORD4>
192                         <KEYWORD4>ExactSizeIterator</KEYWORD4>
193                         <KEYWORD4>Iterator</KEYWORD4>
194                         <KEYWORD4>Extend</KEYWORD4>
195                         <KEYWORD4>Option</KEYWORD4>
196                         <KEYWORD4>Some</KEYWORD4>
197                         <KEYWORD4>None</KEYWORD4>
198                         <KEYWORD4>Result</KEYWORD4>
199                         <KEYWORD4>Ok</KEYWORD4>
200                         <KEYWORD4>Err</KEYWORD4>
201                         <KEYWORD4>String</KEYWORD4>
202                         <KEYWORD4>ToString</KEYWORD4>
203                         <KEYWORD4>Vec</KEYWORD4>
204                         <!--}}}-->
205                 </KEYWORDS>
206         </RULES>
207
208         <!--{{{ DOUBLEQUOTE_LITERAL rule -->
209         <RULES SET="DOUBLEQUOTE_LITERAL" DEFAULT="LITERAL1" IGNORE_CASE="TRUE">
210                 <SEQ TYPE="LITERAL4">\"</SEQ>
211                 <SEQ TYPE="LITERAL4">\\</SEQ>
212                 <SEQ TYPE="LITERAL4">\n</SEQ>
213                 <SEQ TYPE="LITERAL4">\r</SEQ>
214                 <SEQ TYPE="LITERAL4">\t</SEQ>
215                 <SEQ TYPE="LITERAL4">\0</SEQ>
216                 <SEQ_REGEXP HASH_CHAR="\x" TYPE="LITERAL4">\\x[a-f\d]{2}</SEQ_REGEXP>
217                 <SEQ_REGEXP HASH_CHAR="\u" TYPE="LITERAL4">\\u\{[a-f\d]{1,6}\}</SEQ_REGEXP>
218         </RULES> <!--}}}-->
219
220         <!--{{{ ATTRIBUTE rule -->
221         <RULES SET="ATTRIBUTE" DEFAULT="KEYWORD4" IGNORE_CASE="FALSE">
222         <KEYWORDS>
223                 <!-- Crate-only attributes -->
224                 <KEYWORD2>crate_name</KEYWORD2>
225                 <KEYWORD2>crate_type</KEYWORD2>
226                 <KEYWORD2>feature</KEYWORD2>
227                 <KEYWORD2>no_builtins</KEYWORD2>
228                 <KEYWORD2>no_main</KEYWORD2>
229                 <KEYWORD2>no_start</KEYWORD2>
230                 <KEYWORD2>no_std</KEYWORD2>
231                 <KEYWORD2>plugin</KEYWORD2>
232
233                 <!-- Module-only attributes -->
234                 <KEYWORD2>no_implicit_prelude</KEYWORD2>
235                 <KEYWORD2>path</KEYWORD2>
236
237                 <!-- Function-only attributes -->
238                 <KEYWORD2>main</KEYWORD2>
239                 <KEYWORD2>plugin_registrar</KEYWORD2>
240                 <KEYWORD2>start</KEYWORD2>
241                 <KEYWORD2>test</KEYWORD2>
242                 <KEYWORD2>should_panic</KEYWORD2>
243                 <KEYWORD2>cold</KEYWORD2>
244
245                 <!-- Static-only attributes -->
246                 <KEYWORD2>thread_local</KEYWORD2>
247
248                 <!-- FFI attributes -->
249                 <KEYWORD2>link_args</KEYWORD2>
250                 <KEYWORD2>link</KEYWORD2>
251                 <KEYWORD2>link_name</KEYWORD2>
252                 <KEYWORD2>linkage</KEYWORD2>
253                 <KEYWORD2>repr</KEYWORD2>
254
255                 <!-- Macro-related attributes -->
256                 <KEYWORD2>macro_use</KEYWORD2>
257                 <KEYWORD2>macro_reexport</KEYWORD2>
258                 <KEYWORD2>macro_export</KEYWORD2>
259                 <KEYWORD2>no_link</KEYWORD2>
260
261                 <!-- Miscellaneous attributes -->
262                 <KEYWORD2>export_name</KEYWORD2>
263                 <KEYWORD2>link_section</KEYWORD2>
264                 <KEYWORD2>no_mangle</KEYWORD2>
265                 <KEYWORD2>packed</KEYWORD2>
266                 <KEYWORD2>simd</KEYWORD2>
267                 <KEYWORD2>static_assert</KEYWORD2>
268                 <KEYWORD2>unsafe_destructor</KEYWORD2>
269                 <KEYWORD2>unsafe_no_drop_flag</KEYWORD2>
270                 <KEYWORD2>doc</KEYWORD2>
271                 <KEYWORD2>rustc_on_unimplemented</KEYWORD2>
272
273                 <KEYWORD2>cfg</KEYWORD2>
274
275                 <KEYWORD2>allow</KEYWORD2>
276                 <KEYWORD2>deny</KEYWORD2>
277                 <KEYWORD2>forbid</KEYWORD2>
278                 <KEYWORD2>warn</KEYWORD2>
279
280                 <KEYWORD2>lang</KEYWORD2>
281
282                 <KEYWORD2>inline</KEYWORD2>
283
284                 <KEYWORD2>derive</KEYWORD2>
285         </KEYWORDS>
286         </RULES> <!--}}}-->
287
288         <!--{{{ NESTED_DOC_COMMENT rule -->
289         <RULES SET="NESTED_DOC_COMMENT" DEFAULT="COMMENT3">
290                 <!-- mark everything in doc comment as doc comment -->
291                 <SPAN TYPE="COMMENT3" DELEGATE="NESTED_DOC_COMMENT">
292                         <BEGIN>/*</BEGIN>
293                         <END>*/</END>
294                 </SPAN>
295         </RULES> <!--}}}-->
296
297         <!--{{{ NESTED_COMMENT rule -->
298         <RULES SET="NESTED_COMMENT" DEFAULT="COMMENT1">
299                 <SPAN TYPE="COMMENT1" DELEGATE="NESTED_COMMENT">
300                         <BEGIN>/*</BEGIN>
301                         <END>*/</END>
302                 </SPAN>
303         </RULES> <!--}}}-->
304
305 </MODE>