Skip to content

Commit aec4bfc

Browse files
Add support for Device tree (#1172)
Add support for device tree syntax highlighting with specs from https://github.com/devicetree-org/devicetree-specification
1 parent 8ea696b commit aec4bfc

File tree

3 files changed

+2111
-0
lines changed

3 files changed

+2111
-0
lines changed

lexers/embedded/devicetree.xml

Lines changed: 251 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,251 @@
1+
<lexer>
2+
<config>
3+
<name>Devicetree</name>
4+
<alias>devicetree</alias>
5+
<alias>dts</alias>
6+
<filename>*.dts</filename>
7+
<filename>*.dtsi</filename>
8+
<mime_type>text/x-devicetree</mime_type>
9+
</config>
10+
<rules>
11+
<state name="whitespace">
12+
<rule pattern="\n">
13+
<token type="TextWhitespace" />
14+
</rule>
15+
<rule pattern="\s+">
16+
<token type="TextWhitespace" />
17+
</rule>
18+
<rule pattern="\\\n">
19+
<token type="Text" />
20+
</rule>
21+
<rule pattern="//(\n|[\w\W]*?[^\\]\n)">
22+
<token type="CommentSingle" />
23+
</rule>
24+
<rule pattern="/(\\\n)?[*][\w\W]*?[*](\\\n)?/">
25+
<token type="CommentMultiline" />
26+
</rule>
27+
</state>
28+
29+
<state name="macro">
30+
<rule pattern="(#include)(\s*(?:/[*][^*/]*?[*]/\s*)*)([^\n]+)">
31+
<bygroups>
32+
<token type="CommentPreproc" />
33+
<token type="CommentMultiline" />
34+
<token type="CommentPreprocFile" />
35+
</bygroups>
36+
</rule>
37+
<rule pattern="(#define)(\s*(?:/[*][^*/]*?[*]/\s*)*)([^\n]+)">
38+
<bygroups>
39+
<token type="CommentPreproc" />
40+
<token type="CommentMultiline" />
41+
<token type="CommentPreproc" />
42+
</bygroups>
43+
</rule>
44+
<rule pattern="/dts-v1/">
45+
<token type="CommentPreproc" />
46+
</rule>
47+
<rule pattern="/memreserve/">
48+
<token type="CommentPreproc" />
49+
</rule>
50+
<rule pattern="/delete-node/">
51+
<token type="CommentPreproc" />
52+
</rule>
53+
<rule pattern="/delete-property/">
54+
<token type="CommentPreproc" />
55+
</rule>
56+
<rule pattern="(/include/)(\s*(?:/[*][^*/]*?[*]/\s*)*)(&quot;[^\n]+&quot;)">
57+
<bygroups>
58+
<token type="CommentPreproc" />
59+
<token type="CommentMultiline" />
60+
<token type="CommentPreprocFile" />
61+
</bygroups>
62+
</rule>
63+
</state>
64+
65+
<state name="basic_statements">
66+
<rule pattern="&amp;[a-zA-Z0-9_]+">
67+
<token type="NameLabel" />
68+
</rule>
69+
70+
<rule pattern="[a-zA-Z0-9_]+:">
71+
<token type="NameLabel" />
72+
</rule>
73+
74+
<rule pattern="(L?)(&quot;)">
75+
<bygroups>
76+
<token type="LiteralStringAffix" />
77+
<token type="LiteralString" />
78+
</bygroups>
79+
<push state="string" />
80+
</rule>
81+
<rule pattern="0x[0-9a-fA-F]+">
82+
<token type="LiteralNumberHex" />
83+
</rule>
84+
<rule pattern="\d+">
85+
<token type="LiteralNumberInteger" />
86+
</rule>
87+
88+
<rule pattern="status\b">
89+
<token type="KeywordReserved" />
90+
<push state="status_property" />
91+
</rule>
92+
93+
<rule pattern="([~!%^&amp;*+=|?:&lt;&gt;/#-])">
94+
<token type="Operator" />
95+
</rule>
96+
<rule pattern="[()\[\]{},.]">
97+
<token type="Punctuation" />
98+
</rule>
99+
100+
<rule
101+
pattern="[a-zA-Z_][\w-]*(?=(?:\s*,\s*[a-zA-Z_][\w-]*|(?:\s*(?:/[*][^*/]*?[*]/\s*)*))*\s*[=;])">
102+
<token type="NameAttribute" />
103+
</rule>
104+
<rule pattern="[a-zA-Z_][\w-]*">
105+
<token type="Name" />
106+
</rule>
107+
</state>
108+
109+
<state name="status_property">
110+
<rule>
111+
<include state="whitespace" />
112+
</rule>
113+
<rule pattern="=">
114+
<token type="Operator" />
115+
</rule>
116+
117+
<rule pattern="&quot;okay&quot;">
118+
<token type="LiteralString" />
119+
<pop depth="1" />
120+
</rule>
121+
<rule pattern="&quot;disabled&quot;">
122+
<token type="KeywordType" />
123+
<pop depth="1" />
124+
</rule>
125+
<rule pattern="&quot;reserved&quot;">
126+
<token type="NameDecorator" />
127+
<pop depth="1" />
128+
</rule>
129+
<rule pattern="&quot;fail&quot;">
130+
<token type="GenericError" />
131+
<pop depth="1" />
132+
</rule>
133+
<rule pattern="&quot;fail-[^\&quot;]+&quot;">
134+
<token type="GenericTraceback" />
135+
<pop depth="1" />
136+
</rule>
137+
<rule pattern="&quot;">
138+
<token type="LiteralString" />
139+
<push state="string" />
140+
</rule>
141+
142+
<rule pattern=";">
143+
<pop depth="1" />
144+
</rule>
145+
</state>
146+
147+
<state name="root">
148+
<rule>
149+
<include state="whitespace" />
150+
</rule>
151+
<rule>
152+
<include state="macro" />
153+
</rule>
154+
155+
<rule pattern="([^/*@\s&amp;]+|/)(@?)((?:0x)?[0-9a-fA-F,]*)(\s*(?:/[*][^*/]*?[*]/\s*)*)(\{)">
156+
<bygroups>
157+
<token type="NameFunction" />
158+
<token type="Operator" />
159+
<token type="LiteralNumberInteger" />
160+
<token type="CommentMultiline" />
161+
<token type="Punctuation" />
162+
</bygroups>
163+
<push state="node" />
164+
</rule>
165+
166+
<rule>
167+
<push state="statement" />
168+
</rule>
169+
</state>
170+
171+
<state name="node">
172+
<rule>
173+
<include state="whitespace" />
174+
</rule>
175+
<rule>
176+
<include state="macro" />
177+
</rule>
178+
179+
<rule pattern="([^/*@\s&amp;]+|/)(@?)((?:0x)?[0-9a-fA-F,]*)(\s*(?:/[*][^*/]*?[*]/\s*)*)(\{)">
180+
<bygroups>
181+
<token type="NameFunction" />
182+
<token type="Operator" />
183+
<token type="LiteralNumberInteger" />
184+
<token type="CommentMultiline" />
185+
<token type="Punctuation" />
186+
</bygroups>
187+
<push />
188+
</rule>
189+
190+
<rule pattern="([a-zA-Z0-9_]+)(\s*)(:)">
191+
<bygroups>
192+
<token type="NameLabel" />
193+
<token type="Text" />
194+
<token type="Punctuation" />
195+
</bygroups>
196+
</rule>
197+
198+
<rule pattern="\}">
199+
<token type="Punctuation" />
200+
<pop depth="1" />
201+
</rule>
202+
<rule>
203+
<include state="basic_statements" />
204+
</rule>
205+
<rule pattern=";">
206+
<token type="Punctuation" />
207+
</rule>
208+
</state>
209+
210+
<state name="statement">
211+
<rule>
212+
<include state="whitespace" />
213+
</rule>
214+
<rule pattern="([a-zA-Z0-9_]+)(\s*)(:)">
215+
<bygroups>
216+
<token type="NameLabel" />
217+
<token type="Text" />
218+
<token type="Punctuation" />
219+
</bygroups>
220+
<pop depth="1" />
221+
</rule>
222+
<rule>
223+
<include state="basic_statements" />
224+
</rule>
225+
<rule pattern=";">
226+
<token type="Punctuation" />
227+
<pop depth="1" />
228+
</rule>
229+
</state>
230+
231+
<state name="string">
232+
<rule pattern="&quot;">
233+
<token type="LiteralString" />
234+
<pop depth="1" />
235+
</rule>
236+
<rule
237+
pattern="\\([\\abfnrtv&quot;\&#x27;]|x[a-fA-F0-9]{2,4}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|[0-7]{1,3})">
238+
<token type="LiteralStringEscape" />
239+
</rule>
240+
<rule pattern="[^\\&quot;\n]+">
241+
<token type="LiteralString" />
242+
</rule>
243+
<rule pattern="\\\n">
244+
<token type="LiteralString" />
245+
</rule>
246+
<rule pattern="\\">
247+
<token type="LiteralString" />
248+
</rule>
249+
</state>
250+
</rules>
251+
</lexer>

0 commit comments

Comments
 (0)