Skip to content

Commit 7e93fb1

Browse files
author
elfmz
authored
Merge pull request #3217 from kuzmeech/feature/swift-syntax-highlighting
Add Swift syntax highlighting for Colorer plugin
2 parents 4fc9fab + f70f32f commit 7e93fb1

2 files changed

Lines changed: 317 additions & 0 deletions

File tree

Lines changed: 313 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,313 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE hrc PUBLIC "-//Cail Lomecb//DTD Colorer HRC take5//EN"
3+
"http://colorer.sf.net/2003/hrc.dtd">
4+
<hrc version="take5" xmlns="http://colorer.sf.net/2003/hrc"
5+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6+
xsi:schemaLocation="http://colorer.sf.net/2003/hrc http://colorer.sf.net/2003/hrc.xsd">
7+
8+
<type name="swift">
9+
<annotation>
10+
<documentation>
11+
Swift syntax description
12+
https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html
13+
</documentation>
14+
<contributors><![CDATA[
15+
Maxim Chernobayev
16+
]]></contributors>
17+
</annotation>
18+
19+
<import type="def"/>
20+
21+
<region name="Character" parent="def:Character"/>
22+
<region name="String" parent="def:String"/>
23+
<region name="StringEscape" parent="def:StringContent"/>
24+
<region name="StringInterpolation" parent="def:Insertion"/>
25+
<region name="LineComment" parent="def:LineComment"/>
26+
<region name="Comment" parent="def:Comment"/>
27+
<region name="Symbol" parent="def:Symbol"/>
28+
<region name="Keyword" parent="def:Keyword"/>
29+
<region name="KeywordModifier" parent="def:Keyword"/>
30+
<region name="KeywordType" parent="def:TypeKeyword"/>
31+
<region name="Attribute" parent="def:Directive"/>
32+
<region name="Directive" parent="def:Directive"/>
33+
<region name="FunctionKeyword" parent="def:FunctionKeyword"/>
34+
35+
<!-- String interpolation scheme -->
36+
<scheme name="StringInterpolation">
37+
<block start="/(\\\()/" end="/(\))/" scheme="Expression"
38+
region="StringInterpolation"
39+
region00="def:InsertionStart" region01="def:PairStart"
40+
region10="def:InsertionEnd" region11="def:PairEnd"/>
41+
</scheme>
42+
43+
<!-- String escapes -->
44+
<scheme name="StringEscapes">
45+
<regexp match="/\\[0\\tnr\x22\x27]/" region="StringEscape"/>
46+
<regexp match="/\\u\{[\da-fA-F]{1,8}\}/" region="StringEscape"/>
47+
<inherit scheme="StringInterpolation"/>
48+
</scheme>
49+
50+
<!-- Regular string "..." -->
51+
<scheme name="StringContent">
52+
<inherit scheme="StringEscapes"/>
53+
</scheme>
54+
55+
<scheme name="String">
56+
<block start="/(?{def:StringEdge}&#34;)/" end="/(?{def:StringEdge}&#34;)|$/"
57+
scheme="StringContent" region="String" inner-region="yes"/>
58+
</scheme>
59+
60+
<!-- Multiline string """...""" -->
61+
<scheme name="MultilineString">
62+
<block start="/(?{def:StringEdge}&#34;&#34;&#34;)/" end="/(?{def:StringEdge}&#34;&#34;&#34;)/"
63+
scheme="StringEscapes" region="String"/>
64+
</scheme>
65+
66+
<!-- Raw string #"..."# and ##"..."## etc -->
67+
<scheme name="RawString">
68+
<block start="/(#+)(&#34;)/" end="/(&#34;)\y1/"
69+
scheme="def:empty" region="String"
70+
region00="def:StringEdge" region10="def:StringEdge"/>
71+
<block start="/(#+)(&#34;&#34;&#34;)/" end="/(&#34;&#34;&#34;)\y1/"
72+
scheme="def:empty" region="String"
73+
region00="def:StringEdge" region10="def:StringEdge"/>
74+
</scheme>
75+
76+
<!-- Character and numbers -->
77+
<scheme name="Character">
78+
<inherit scheme="c:Character"/>
79+
</scheme>
80+
81+
<!-- Comments -->
82+
<scheme name="Comments">
83+
<!-- Doc comments -->
84+
<regexp match="/\/\/\/.*$/" region="def:CommentDoc"/>
85+
<block start="/\/\*\*/" end="/\*\//" scheme="def:Comment" region="def:CommentDoc"
86+
region00="def:PairStart" region10="def:PairEnd"/>
87+
<!-- Regular comments -->
88+
<block start="/\/\//" end="/$/" scheme="def:Comment" region="LineComment"/>
89+
<block start="/\/\*/" end="/\*\//" scheme="def:Comment" region="Comment"
90+
region00="def:PairStart" region10="def:PairEnd"/>
91+
</scheme>
92+
93+
<!-- Attributes @something -->
94+
<scheme name="Attributes">
95+
<regexp match="/@\w+/" region="Attribute"/>
96+
</scheme>
97+
98+
<!-- Compiler directives #if, #available, etc -->
99+
<scheme name="Directives">
100+
<regexp match="/#(if|else|elseif|endif|available|unavailable|sourceLocation|warning|error)\b/" region="Directive"/>
101+
<regexp match="/#(file|fileID|filePath|line|column|function|dsohandle)\b/" region="Directive"/>
102+
<regexp match="/#(selector|keyPath|colorLiteral|fileLiteral|imageLiteral)\b/" region="Directive"/>
103+
</scheme>
104+
105+
<!-- Main expression scheme -->
106+
<scheme name="Expression">
107+
<block start="/(\()/" end="/(\))/" scheme="Expression"
108+
region00="Symbol" region01="def:PairStart" region10="Symbol" region11="def:PairEnd"/>
109+
<block start="/(\[)/" end="/(\])/" scheme="Expression"
110+
region00="Symbol" region01="def:PairStart" region10="Symbol" region11="def:PairEnd"/>
111+
<block start="/(\{)/" end="/(\})/" scheme="Expression"
112+
region00="Symbol" region01="def:PairStart" region10="Symbol" region11="def:PairEnd"/>
113+
114+
<inherit scheme="Comments"/>
115+
<inherit scheme="Attributes"/>
116+
<inherit scheme="Directives"/>
117+
<inherit scheme="RawString"/>
118+
<inherit scheme="MultilineString"/>
119+
<inherit scheme="String"/>
120+
<inherit scheme="Character"/>
121+
122+
<!-- Numbers -->
123+
<inherit scheme="def:Number"/>
124+
<regexp match="/0b[01_]+/" region="def:Number"/>
125+
<regexp match="/0o[0-7_]+/" region="def:Number"/>
126+
<regexp match="/0x[\da-fA-F_]+(\.[\da-fA-F_]+)?([pP][\+\-]?[\d_]+)?/" region="def:Number"/>
127+
<regexp match="/[\d_]+(\.[\d_]+)?([eE][\+\-]?[\d_]+)?/" region="def:Number"/>
128+
129+
<!-- func/init/deinit for outlining -->
130+
<regexp match="/\b(func|init|deinit)\b/" region="FunctionKeyword" region0="def:Outlined"/>
131+
132+
<!-- Declaration keywords -->
133+
<keywords region="Keyword">
134+
<word name="associatedtype"/>
135+
<word name="class"/>
136+
<word name="deinit"/>
137+
<word name="enum"/>
138+
<word name="extension"/>
139+
<word name="fileprivate"/>
140+
<word name="func"/>
141+
<word name="import"/>
142+
<word name="init"/>
143+
<word name="inout"/>
144+
<word name="internal"/>
145+
<word name="let"/>
146+
<word name="open"/>
147+
<word name="operator"/>
148+
<word name="private"/>
149+
<word name="precedencegroup"/>
150+
<word name="protocol"/>
151+
<word name="public"/>
152+
<word name="rethrows"/>
153+
<word name="static"/>
154+
<word name="struct"/>
155+
<word name="subscript"/>
156+
<word name="typealias"/>
157+
<word name="var"/>
158+
</keywords>
159+
160+
<!-- Statement keywords -->
161+
<keywords region="Keyword">
162+
<word name="break"/>
163+
<word name="case"/>
164+
<word name="catch"/>
165+
<word name="continue"/>
166+
<word name="default"/>
167+
<word name="defer"/>
168+
<word name="do"/>
169+
<word name="else"/>
170+
<word name="fallthrough"/>
171+
<word name="for"/>
172+
<word name="guard"/>
173+
<word name="if"/>
174+
<word name="in"/>
175+
<word name="repeat"/>
176+
<word name="return"/>
177+
<word name="switch"/>
178+
<word name="throw"/>
179+
<word name="where"/>
180+
<word name="while"/>
181+
</keywords>
182+
183+
<!-- Expression and type keywords -->
184+
<keywords region="Keyword">
185+
<word name="any"/>
186+
<word name="as"/>
187+
<word name="await"/>
188+
<word name="catch"/>
189+
<word name="false"/>
190+
<word name="is"/>
191+
<word name="nil"/>
192+
<word name="self"/>
193+
<word name="Self"/>
194+
<word name="super"/>
195+
<word name="throw"/>
196+
<word name="throws"/>
197+
<word name="true"/>
198+
<word name="try"/>
199+
</keywords>
200+
201+
<!-- Pattern and context keywords -->
202+
<keywords region="KeywordModifier">
203+
<word name="async"/>
204+
<word name="convenience"/>
205+
<word name="didSet"/>
206+
<word name="dynamic"/>
207+
<word name="final"/>
208+
<word name="get"/>
209+
<word name="indirect"/>
210+
<word name="infix"/>
211+
<word name="isolated"/>
212+
<word name="lazy"/>
213+
<word name="mutating"/>
214+
<word name="nonisolated"/>
215+
<word name="nonmutating"/>
216+
<word name="optional"/>
217+
<word name="override"/>
218+
<word name="postfix"/>
219+
<word name="prefix"/>
220+
<word name="required"/>
221+
<word name="set"/>
222+
<word name="some"/>
223+
<word name="unowned"/>
224+
<word name="weak"/>
225+
<word name="willSet"/>
226+
</keywords>
227+
228+
<!-- Concurrency -->
229+
<keywords region="Keyword">
230+
<word name="actor"/>
231+
<word name="async"/>
232+
<word name="await"/>
233+
<word name="nonisolated"/>
234+
<word name="isolated"/>
235+
</keywords>
236+
237+
<!-- Common types -->
238+
<keywords region="KeywordType">
239+
<word name="Any"/>
240+
<word name="AnyObject"/>
241+
<word name="Array"/>
242+
<word name="Bool"/>
243+
<word name="Character"/>
244+
<word name="Dictionary"/>
245+
<word name="Double"/>
246+
<word name="Float"/>
247+
<word name="Int"/>
248+
<word name="Int8"/>
249+
<word name="Int16"/>
250+
<word name="Int32"/>
251+
<word name="Int64"/>
252+
<word name="Never"/>
253+
<word name="Optional"/>
254+
<word name="Result"/>
255+
<word name="Set"/>
256+
<word name="String"/>
257+
<word name="UInt"/>
258+
<word name="UInt8"/>
259+
<word name="UInt16"/>
260+
<word name="UInt32"/>
261+
<word name="UInt64"/>
262+
<word name="Void"/>
263+
</keywords>
264+
265+
<!-- Symbols -->
266+
<keywords region="Symbol">
267+
<symb name="->"/>
268+
<symb name="=>"/>
269+
<symb name="+"/>
270+
<symb name="-"/>
271+
<symb name="*"/>
272+
<symb name="/"/>
273+
<symb name="%"/>
274+
<symb name="="/>
275+
<symb name="&amp;"/>
276+
<symb name="|"/>
277+
<symb name="^"/>
278+
<symb name="~"/>
279+
<symb name="!"/>
280+
<symb name="&lt;"/>
281+
<symb name="&gt;"/>
282+
<symb name="?"/>
283+
<symb name=":"/>
284+
<symb name=";"/>
285+
<symb name=","/>
286+
<symb name="."/>
287+
<symb name="@"/>
288+
</keywords>
289+
290+
</scheme>
291+
292+
<scheme name="swift">
293+
<inherit scheme="Expression"/>
294+
</scheme>
295+
296+
</type>
297+
</hrc>
298+
<!--
299+
Copyright (C) 2024-2026 Maxim Chernobayev
300+
301+
This library is free software; you can redistribute it and/or
302+
modify it under the terms of the GNU Lesser General Public
303+
License as published by the Free Software Foundation; either
304+
version 2.1 of the License, or (at your option) any later version.
305+
306+
This library is distributed in the hope that it will be useful,
307+
but WITHOUT ANY WARRANTY; without even the implied warranty of
308+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
309+
Lesser General Public License for more details.
310+
311+
You should have received a copy of the GNU Lesser General Public
312+
License along with this library; if not, see <https://www.gnu.org/licenses/>
313+
-->

colorer/configs/base/hrc/proto.hrc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,10 @@
266266
<location link="base/rust.hrc" />
267267
<filename>/\.rs$/i</filename>
268268
</prototype>
269+
<prototype name="swift" group="main" description="Swift">
270+
<location link="base/swift.hrc" />
271+
<filename>/\.swift$/i</filename>
272+
</prototype>
269273

270274
<!-- inet languages -->
271275
<package name="html-entity" description="(x)html entities">

0 commit comments

Comments
 (0)