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 -->
5 <!-- Please put the following line in catalog ${JEditInstallDir}/modes -->
7 <MODE NAME="swift" FILE="swift.xml" FILE_NAME_GLOB="*.swift"/>
10 <!DOCTYPE MODE SYSTEM "xmode.dtd">
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=",+-=<>/?^&*" />
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]))">
33 <MARK_FOLLOWING TYPE="LABEL">@</MARK_FOLLOWING>
35 <IMPORT DELEGATE="PRIMARY"/>
39 <!-- Silly comment -->
40 <SEQ TYPE="COMMENT1">/**/</SEQ>
42 <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>
44 <!-- Scaladoc comment -->
45 <SPAN TYPE="COMMENT3" DELEGATE="COMMENT_BLOCK">
50 <!-- Scala comment (Java style) -->
51 <SPAN TYPE="COMMENT1" DELEGATE="COMMENT_BLOCK">
56 <SPAN MATCH_TYPE="NULL" DELEGATE="MAIN">
61 <!-- string and character literals -->
62 <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" ESCAPE="\" DELEGATE="EXP_IN_STRING">
67 <SPAN MATCH_TYPE="LITERAL3" DELEGATE="TYPE_PARAMS" NO_LINE_BREAK="TRUE">
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">&</SEQ>
85 <SEQ TYPE="OPERATOR">></SEQ>
86 <SEQ TYPE="OPERATOR"><</SEQ>
88 <!-- Function calls -->
89 <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>
91 <EOL_SPAN MATCH_TYPE="KEYWORD1" DELEGATE="TYPE">import </EOL_SPAN>
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>
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>
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>
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>
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>
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>
148 <SPAN DELEGATE="PATTERN" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE" NO_LINE_BREAK="FALSE">
153 <SPAN DELEGATE="PATTERN" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE" NO_LINE_BREAK="TRUE">
159 <SPAN DELEGATE="PATTERN" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE" NO_LINE_BREAK="FALSE">
164 <!-- variables and function parameters types -->
165 <SPAN_REGEXP HASH_CHAR=":" TYPE="LABEL" NO_LINE_BREAK="TRUE">
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>
236 <KEYWORD2>Character</KEYWORD2>
237 <KEYWORD2>String</KEYWORD2>
238 <KEYWORD2>Bool</KEYWORD2>
239 <KEYWORD2>Double</KEYWORD2>
240 <KEYWORD2>Float</KEYWORD2>
241 <KEYWORD2>Int</KEYWORD2>
243 <KEYWORD3>Arry</KEYWORD3>
244 <KEYWORD3>Set</KEYWORD3>
245 <KEYWORD3>Dictionary</KEYWORD3>
247 <LITERAL2>false</LITERAL2>
248 <LITERAL2>nil</LITERAL2>
249 <LITERAL2>super</LITERAL2>
250 <LITERAL2>self</LITERAL2>
251 <LITERAL2>true</LITERAL2>
255 <RULES SET="TYPE_PARAMS" DEFAULT="LITERAL3">
256 <SPAN MATCH_TYPE="LITERAL3" DELEGATE="TYPE_PARAMS">
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]))">
265 <IMPORT DELEGATE="PRIMARY"/>
267 <SEQ TYPE="OPERATOR">@</SEQ>
269 <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="KEYWORD4">[A-Z][^(\s:@)<>]*</SEQ_REGEXP>
272 <RULES SET="COMMENT_BLOCK" DEFAULT="COMMENT1">
273 <SPAN TYPE="COMMENT1" DELEGATE="COMMENT_BLOCK">
279 <RULES SET="TYPE" DEFAULT="KEYWORD4">
280 <IMPORT DELEGATE="MAIN"/>
283 <RULES SET="EXP_IN_STRING" DEFAULT="LITERAL1">
284 <SPAN TYPE="LABEL" MATCH_TYPE="KEYWORD4">