]> gitweb.factorcode.org Git - factor.git/blob - basis/xmode/modes/swift.xml
ad9d77a1d5c9c7a2b17f573779c44976c592f2a4
[factor.git] / basis / xmode / modes / swift.xml
1 <?xml version="1.0"?>
2 <!-- Transplanted from Scala mode by Daniel Spiewak, see https://github.com/djspiewak/jedit-modes/blob/master/scala.xml -->
3 <!-- By Wayne Zhang, wayne.zhang.au@gmail.com -->
4
5 <!-- Please put the following line in catalog ${JEditInstallDir}/modes -->
6 <!-- 
7         <MODE NAME="swift" FILE="swift.xml"     FILE_NAME_GLOB="*.swift"/>      
8 -->
9
10 <!DOCTYPE MODE SYSTEM "xmode.dtd">
11
12 <MODE>
13   <PROPS>
14     <PROPERTY NAME="indentOpenBrackets" VALUE="{" />
15     <PROPERTY NAME="indentCloseBrackets" VALUE="}" />
16     <PROPERTY NAME="lineUpClosingBracket" VALUE="true" />
17         <PROPERTY NAME="indentNextLine"
18                 VALUE="(.*((if|while|else\s+if|for)\s*\().*\)|\s*else|\s*case.*:|.*(let|var|typealias).*=)\s*$"/>
19     <!-- set this to 'true' if you want to use GNU coding style -->
20     <PROPERTY NAME="doubleBracketIndent" VALUE="false" />
21     <PROPERTY NAME="commentStart" VALUE="/*" />
22     <PROPERTY NAME="commentEnd" VALUE="*/" />
23     <PROPERTY NAME="lineComment" VALUE="//" />
24     <PROPERTY NAME="noTabs" VALUE="true" />
25     <PROPERTY NAME="tabSize" VALUE="4" />
26     <PROPERTY NAME="indentSize" VALUE="4" />
27     <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />
28   </PROPS>
29
30   <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE"
31       DIGIT_RE="(0[lL]?|[1-9]\d{0,9}(\d{0,9}[lL])?|0[xX]\p{XDigit}{1,8}(\p{XDigit}{0,8}[lL])?|0[0-7]{1,11}([0-7]{0,11}[lL])?|([0-9]+\.[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?[fFdD]?|[0-9]+([eE][+-]?[0-9]+[fFdD]?|([eE][+-]?[0-9]+)?[fFdD]))">
32
33         <MARK_FOLLOWING TYPE="LABEL">@</MARK_FOLLOWING>
34
35         <IMPORT DELEGATE="PRIMARY"/>
36   </RULES>
37
38   <RULES SET="PRIMARY">
39     <!-- Silly comment -->
40     <SEQ TYPE="COMMENT1">/**/</SEQ>
41
42     <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>
43
44     <!-- Scaladoc comment -->
45     <SPAN TYPE="COMMENT3" DELEGATE="SCALADOC">
46       <BEGIN>/**</BEGIN>
47       <END>*/</END>
48     </SPAN>
49
50     <!-- Scala comment (Java style) -->
51     <SPAN TYPE="COMMENT1" DELEGATE="COMMENT_BLOCK">
52       <BEGIN>/*</BEGIN>
53       <END>*/</END>
54     </SPAN>
55
56     <SPAN MATCH_TYPE="NULL" DELEGATE="MAIN">
57       <BEGIN>{</BEGIN>
58       <END>}</END>
59     </SPAN>
60
61     <!-- string and character literals -->
62     <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" ESCAPE="\" DELEGATE="EXP_IN_STRING">
63       <BEGIN>"</BEGIN>
64       <END>"</END>
65     </SPAN>
66
67     <SPAN MATCH_TYPE="LITERAL3" DELEGATE="TYPE_PARAMS" NO_LINE_BREAK="TRUE">
68           <BEGIN>&lt;</BEGIN>
69           <END>&gt;</END>
70         </SPAN>
71
72         <SEQ TYPE="OPERATOR">~</SEQ>
73         <SEQ TYPE="OPERATOR">!</SEQ>
74         <SEQ TYPE="OPERATOR">%</SEQ>
75         <SEQ TYPE="OPERATOR">^</SEQ>
76         <SEQ TYPE="OPERATOR">*</SEQ>
77         <SEQ TYPE="OPERATOR">-</SEQ>
78         <SEQ TYPE="OPERATOR">+</SEQ>
79         <SEQ TYPE="OPERATOR">=</SEQ>
80         <SEQ TYPE="OPERATOR">|</SEQ>
81         <SEQ TYPE="OPERATOR">/</SEQ>
82         <SEQ TYPE="OPERATOR">.</SEQ>
83         <SEQ TYPE="OPERATOR">??</SEQ>
84         <SEQ TYPE="OPERATOR">&amp;</SEQ>
85         <SEQ TYPE="OPERATOR">&gt;</SEQ>
86         <SEQ TYPE="OPERATOR">&lt;</SEQ>
87
88     <!-- Function calls -->
89     <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>
90
91     <EOL_SPAN MATCH_TYPE="KEYWORD1" DELEGATE="TYPE">import </EOL_SPAN>
92
93         <!-- Function declarations (overloaded for different spacing styles)-->
94         <MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">func       </MARK_FOLLOWING>
95         <MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">func      </MARK_FOLLOWING>
96         <MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">func     </MARK_FOLLOWING>
97         <MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">func    </MARK_FOLLOWING>
98         <MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">func   </MARK_FOLLOWING>
99         <MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">func  </MARK_FOLLOWING>
100         <MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">func </MARK_FOLLOWING>
101
102         <!-- class declarations (overloaded for different spacing styles)-->
103         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">class       </MARK_FOLLOWING>
104         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">class      </MARK_FOLLOWING>
105         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">class     </MARK_FOLLOWING>
106         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">class    </MARK_FOLLOWING>
107         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">class   </MARK_FOLLOWING>
108         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">class  </MARK_FOLLOWING>
109         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">class </MARK_FOLLOWING>
110
111         <!-- struct declarations (overloaded for different spacing styles)-->
112         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">struct       </MARK_FOLLOWING>
113         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">struct      </MARK_FOLLOWING>
114         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">struct     </MARK_FOLLOWING>
115         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">struct    </MARK_FOLLOWING>
116         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">struct   </MARK_FOLLOWING>
117         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">struct  </MARK_FOLLOWING>
118         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">struct </MARK_FOLLOWING>
119         
120         <!-- enum declarations (overloaded for different spacing styles)-->
121         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">enum       </MARK_FOLLOWING>
122         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">enum      </MARK_FOLLOWING>
123         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">enum     </MARK_FOLLOWING>
124         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">enum    </MARK_FOLLOWING>
125         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">enum   </MARK_FOLLOWING>
126         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">enum  </MARK_FOLLOWING>
127         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">enum </MARK_FOLLOWING>       
128         
129         <!-- protocol declarations (overloaded for different spacing styles)-->
130         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">protocol       </MARK_FOLLOWING>
131         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">protocol      </MARK_FOLLOWING>
132         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">protocol     </MARK_FOLLOWING>
133         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">protocol    </MARK_FOLLOWING>
134         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">protocol   </MARK_FOLLOWING>
135         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">protocol  </MARK_FOLLOWING>
136         <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">protocol </MARK_FOLLOWING>           
137
138         <!-- extends (overloaded for different spacing styles)-->
139         <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="FALSE">:       </MARK_FOLLOWING>
140         <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="FALSE">:      </MARK_FOLLOWING>
141         <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="FALSE">:     </MARK_FOLLOWING>
142         <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="FALSE">:    </MARK_FOLLOWING>
143         <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="FALSE">:   </MARK_FOLLOWING>
144         <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="FALSE">:  </MARK_FOLLOWING>
145         <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="FALSE">: </MARK_FOLLOWING>
146
147
148         <SPAN DELEGATE="PATTERN" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE" NO_LINE_BREAK="FALSE">
149                 <BEGIN>case </BEGIN>
150                 <END>:</END>
151         </SPAN>
152
153         <SPAN DELEGATE="PATTERN" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE" NO_LINE_BREAK="TRUE">
154                 <BEGIN>let </BEGIN>
155                 <END>=</END>
156         </SPAN>
157         
158         <!-- collections -->
159         <SPAN DELEGATE="PATTERN" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE" NO_LINE_BREAK="FALSE">
160                 <BEGIN>[</BEGIN>
161                 <END>]</END>
162         </SPAN>
163                 
164         <!-- variables and function parameters types -->
165         <SPAN_REGEXP HASH_CHAR=":" TYPE="LABEL" NO_LINE_BREAK="TRUE">
166                 <BEGIN>:\s+</BEGIN>
167                 <END>\b</END>
168         </SPAN_REGEXP>  
169         
170     <KEYWORDS>
171       <KEYWORD1>associatedtype</KEYWORD1>
172       <KEYWORD1>atexit</KEYWORD1>
173       <KEYWORD1>break</KEYWORD1>
174       <KEYWORD1>case</KEYWORD1>
175       <KEYWORD1>catch</KEYWORD1>
176       <KEYWORD1>class</KEYWORD1>
177       <KEYWORD1>continue</KEYWORD1>
178       <KEYWORD1>convenience</KEYWORD1>
179       <KEYWORD1>default</KEYWORD1>
180       <KEYWORD1>defer</KEYWORD1>
181       <KEYWORD1>deinit</KEYWORD1>
182       <KEYWORD1>didSet</KEYWORD1>
183       <KEYWORD1>do</KEYWORD1>
184       <KEYWORD1>dynamic</KEYWORD1>
185       <KEYWORD1>else</KEYWORD1>
186       <KEYWORD1>enum</KEYWORD1>
187       <KEYWORD1>extension</KEYWORD1>
188       <KEYWORD1>fallthrough</KEYWORD1>
189       <KEYWORD1>final</KEYWORD1>
190       <KEYWORD1>for</KEYWORD1>
191       <KEYWORD1>func</KEYWORD1>
192       <KEYWORD1>get</KEYWORD1>
193       <KEYWORD1>guard</KEYWORD1>
194       <KEYWORD1>if</KEYWORD1>
195       <KEYWORD1>import</KEYWORD1>
196       <KEYWORD1>in</KEYWORD1>
197       <KEYWORD1>infix</KEYWORD1>
198       <KEYWORD1>init</KEYWORD1>
199       <KEYWORD1>inout</KEYWORD1>
200       <KEYWORD1>internal</KEYWORD1>
201       <KEYWORD1>lazy</KEYWORD1>
202       <KEYWORD1>let</KEYWORD1>
203       <KEYWORD1>mutating</KEYWORD1>
204       <KEYWORD1>nil</KEYWORD1>
205       <KEYWORD1>nonmutating</KEYWORD1>
206       <KEYWORD1>operator</KEYWORD1>
207       <KEYWORD1>optional</KEYWORD1>
208       <KEYWORD1>override</KEYWORD1>
209       <KEYWORD1>postfix</KEYWORD1>
210       <KEYWORD1>prefix</KEYWORD1>
211       <KEYWORD1>private</KEYWORD1>
212       <KEYWORD1>protocol</KEYWORD1>
213       <KEYWORD1>public</KEYWORD1>
214       <KEYWORD1>repeat</KEYWORD1>
215       <KEYWORD1>required</KEYWORD1>
216       <KEYWORD1>rethrows</KEYWORD1>
217       <KEYWORD1>return</KEYWORD1>
218       <KEYWORD1>self</KEYWORD1>
219       <KEYWORD1>set</KEYWORD1>
220       <KEYWORD1>static</KEYWORD1>
221       <KEYWORD1>struct</KEYWORD1>
222       <KEYWORD1>subscript</KEYWORD1>
223       <KEYWORD1>super</KEYWORD1>
224       <KEYWORD1>switch</KEYWORD1>
225       <KEYWORD1>throw</KEYWORD1>
226       <KEYWORD1>throws</KEYWORD1>
227       <KEYWORD1>try</KEYWORD1>
228       <KEYWORD1>typealias</KEYWORD1>
229       <KEYWORD1>unowned</KEYWORD1>
230       <KEYWORD1>var</KEYWORD1>
231       <KEYWORD1>weak</KEYWORD1>
232       <KEYWORD1>where</KEYWORD1>
233       <KEYWORD1>while</KEYWORD1>
234       <KEYWORD1>willSet</KEYWORD1>
235
236       <KEYWORD2>Character</KEYWORD2>
237       <KEYWORD2>String</KEYWORD2>
238       <KEYWORD2>Bool</KEYWORD2>
239       <KEYWORD2>Double</KEYWORD2>
240       <KEYWORD2>Float</KEYWORD2>
241       <KEYWORD2>Int</KEYWORD2>
242
243       <KEYWORD3>Arry</KEYWORD3>
244       <KEYWORD3>Set</KEYWORD3>
245       <KEYWORD3>Dictionary</KEYWORD3>
246
247           <LITERAL2>false</LITERAL2>
248           <LITERAL2>nil</LITERAL2>
249           <LITERAL2>super</LITERAL2>
250           <LITERAL2>self</LITERAL2>
251           <LITERAL2>true</LITERAL2>
252     </KEYWORDS>
253   </RULES>
254
255   <RULES SET="TYPE_PARAMS" DEFAULT="LITERAL3">
256     <SPAN MATCH_TYPE="LITERAL3" DELEGATE="TYPE_PARAMS">
257       <BEGIN>&lt;</BEGIN>
258       <END>&gt;</END>
259     </SPAN>
260   </RULES>
261
262   <RULES SET="PATTERN" DEFAULT="NULL" IGNORE_CASE="FALSE"
263     DIGIT_RE="(0[lL]?|[1-9]\d{0,9}(\d{0,9}[lL])?|0[xX]\p{XDigit}{1,8}(\p{XDigit}{0,8}[lL])?|0[0-7]{1,11}([0-7]{0,11}[lL])?|([0-9]+\.[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?[fFdD]?|[0-9]+([eE][+-]?[0-9]+[fFdD]?|([eE][+-]?[0-9]+)?[fFdD]))">
264
265     <IMPORT DELEGATE="PRIMARY"/>
266
267     <SEQ TYPE="OPERATOR">@</SEQ>
268
269     <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="KEYWORD4">[A-Z][^(\s:@)&lt;&gt;]*</SEQ_REGEXP>
270   </RULES>
271
272   <RULES SET="COMMENT_BLOCK" DEFAULT="COMMENT1">
273     <SPAN TYPE="COMMENT1" DELEGATE="COMMENT_BLOCK">
274       <BEGIN>/*</BEGIN>
275       <END>*/</END>
276     </SPAN>
277   </RULES>
278
279   <RULES SET="TYPE" DEFAULT="KEYWORD4">
280     <IMPORT DELEGATE="MAIN"/>
281   </RULES>
282   
283   <RULES SET="EXP_IN_STRING" DEFAULT="LITERAL1">
284         <SPAN TYPE="LABEL" MATCH_TYPE="KEYWORD4">
285       <BEGIN>\(</BEGIN>
286       <END>)</END>
287     </SPAN>  
288   </RULES>
289 </MODE>