1
2<lexer>
3 <config>
4 <name>Jsonnet</name>
5 <alias>jsonnet</alias>
6 <filename>*.jsonnet</filename>
7 <filename>*.libsonnet</filename>
8 </config>
9 <rules>
10 <state name="_comments">
11 <rule pattern="(//|#).*\n"><token type="CommentSingle"/></rule>
12 <rule pattern="/\*\*([^/]|/(?!\*))*\*/"><token type="LiteralStringDoc"/></rule>
13 <rule pattern="/\*([^/]|/(?!\*))*\*/"><token type="Comment"/></rule>
14 </state>
15 <state name="root">
16 <rule><include state="_comments"/></rule>
17 <rule pattern="@'.*'"><token type="LiteralString"/></rule>
18 <rule pattern="@".*""><token type="LiteralString"/></rule>
19 <rule pattern="'"><token type="LiteralString"/><push state="singlestring"/></rule>
20 <rule pattern="""><token type="LiteralString"/><push state="doublestring"/></rule>
21 <rule pattern="\|\|\|(.|\n)*\|\|\|"><token type="LiteralString"/></rule>
22 <rule pattern="[+-]?[0-9]+(.[0-9])?"><token type="LiteralNumberFloat"/></rule>
23 <rule pattern="[!$~+\-&|^=<>*/%]"><token type="Operator"/></rule>
24 <rule pattern="\{"><token type="Punctuation"/><push state="object"/></rule>
25 <rule pattern="\["><token type="Punctuation"/><push state="array"/></rule>
26 <rule pattern="local\b"><token type="Keyword"/><push state="local_name"/></rule>
27 <rule pattern="assert\b"><token type="Keyword"/><push state="assert"/></rule>
28 <rule pattern="(assert|else|error|false|for|if|import|importstr|in|null|tailstrict|then|self|super|true)\b"><token type="Keyword"/></rule>
29 <rule pattern="\s+"><token type="TextWhitespace"/></rule>
30 <rule pattern="function(?=\()"><token type="Keyword"/><push state="function_params"/></rule>
31 <rule pattern="std\.[^\W\d]\w*(?=\()"><token type="NameBuiltin"/><push state="function_args"/></rule>
32 <rule pattern="[^\W\d]\w*(?=\()"><token type="NameFunction"/><push state="function_args"/></rule>
33 <rule pattern="[^\W\d]\w*"><token type="NameVariable"/></rule>
34 <rule pattern="[\.()]"><token type="Punctuation"/></rule>
35 </state>
36 <state name="singlestring">
37 <rule pattern="[^'\\]"><token type="LiteralString"/></rule>
38 <rule pattern="\\."><token type="LiteralStringEscape"/></rule>
39 <rule pattern="'"><token type="LiteralString"/><pop depth="1"/></rule>
40 </state>
41 <state name="doublestring">
42 <rule pattern="[^"\\]"><token type="LiteralString"/></rule>
43 <rule pattern="\\."><token type="LiteralStringEscape"/></rule>
44 <rule pattern="""><token type="LiteralString"/><pop depth="1"/></rule>
45 </state>
46 <state name="array">
47 <rule pattern=","><token type="Punctuation"/></rule>
48 <rule pattern="\]"><token type="Punctuation"/><pop depth="1"/></rule>
49 <rule><include state="root"/></rule>
50 </state>
51 <state name="local_name">
52 <rule pattern="[^\W\d]\w*(?=\()"><token type="NameFunction"/><push state="function_params"/></rule>
53 <rule pattern="[^\W\d]\w*"><token type="NameVariable"/></rule>
54 <rule pattern="\s+"><token type="TextWhitespace"/></rule>
55 <rule pattern="(?==)"><token type="TextWhitespace"/><push state="#pop" state="local_value"/></rule>
56 </state>
57 <state name="local_value">
58 <rule pattern="="><token type="Operator"/></rule>
59 <rule pattern=";"><token type="Punctuation"/><pop depth="1"/></rule>
60 <rule><include state="root"/></rule>
61 </state>
62 <state name="assert">
63 <rule pattern=":"><token type="Punctuation"/></rule>
64 <rule pattern=";"><token type="Punctuation"/><pop depth="1"/></rule>
65 <rule><include state="root"/></rule>
66 </state>
67 <state name="function_params">
68 <rule pattern="[^\W\d]\w*"><token type="NameVariable"/></rule>
69 <rule pattern="\("><token type="Punctuation"/></rule>
70 <rule pattern="\)"><token type="Punctuation"/><pop depth="1"/></rule>
71 <rule pattern=","><token type="Punctuation"/></rule>
72 <rule pattern="\s+"><token type="TextWhitespace"/></rule>
73 <rule pattern="="><token type="Operator"/><push state="function_param_default"/></rule>
74 </state>
75 <state name="function_args">
76 <rule pattern="\("><token type="Punctuation"/></rule>
77 <rule pattern="\)"><token type="Punctuation"/><pop depth="1"/></rule>
78 <rule pattern=","><token type="Punctuation"/></rule>
79 <rule pattern="\s+"><token type="TextWhitespace"/></rule>
80 <rule><include state="root"/></rule>
81 </state>
82 <state name="object">
83 <rule pattern="\s+"><token type="TextWhitespace"/></rule>
84 <rule pattern="local\b"><token type="Keyword"/><push state="object_local_name"/></rule>
85 <rule pattern="assert\b"><token type="Keyword"/><push state="object_assert"/></rule>
86 <rule pattern="\["><token type="Operator"/><push state="field_name_expr"/></rule>
87 <rule pattern="(?=[^\W\d]\w*)"><token type="Text"/><push state="field_name"/></rule>
88 <rule pattern="\}"><token type="Punctuation"/><pop depth="1"/></rule>
89 <rule pattern="""><token type="NameVariable"/><push state="double_field_name"/></rule>
90 <rule pattern="'"><token type="NameVariable"/><push state="single_field_name"/></rule>
91 <rule><include state="_comments"/></rule>
92 </state>
93 <state name="field_name">
94 <rule pattern="[^\W\d]\w*(?=\()"><token type="NameFunction"/><push state="field_separator" state="function_params"/></rule>
95 <rule pattern="[^\W\d]\w*"><token type="NameVariable"/><push state="field_separator"/></rule>
96 </state>
97 <state name="double_field_name">
98 <rule pattern="([^"\\]|\\.)*""><token type="NameVariable"/><push state="field_separator"/></rule>
99 </state>
100 <state name="single_field_name">
101 <rule pattern="([^'\\]|\\.)*'"><token type="NameVariable"/><push state="field_separator"/></rule>
102 </state>
103 <state name="field_name_expr">
104 <rule pattern="\]"><token type="Operator"/><push state="field_separator"/></rule>
105 <rule><include state="root"/></rule>
106 </state>
107 <state name="function_param_default">
108 <rule pattern="(?=[,\)])"><token type="TextWhitespace"/><pop depth="1"/></rule>
109 <rule><include state="root"/></rule>
110 </state>
111 <state name="field_separator">
112 <rule pattern="\s+"><token type="TextWhitespace"/></rule>
113 <rule pattern="\+?::?:?"><token type="Punctuation"/><push state="#pop" state="#pop" state="field_value"/></rule>
114 <rule><include state="_comments"/></rule>
115 </state>
116 <state name="field_value">
117 <rule pattern=","><token type="Punctuation"/><pop depth="1"/></rule>
118 <rule pattern="\}"><token type="Punctuation"/><pop depth="2"/></rule>
119 <rule><include state="root"/></rule>
120 </state>
121 <state name="object_assert">
122 <rule pattern=":"><token type="Punctuation"/></rule>
123 <rule pattern=","><token type="Punctuation"/><pop depth="1"/></rule>
124 <rule><include state="root"/></rule>
125 </state>
126 <state name="object_local_name">
127 <rule pattern="[^\W\d]\w*"><token type="NameVariable"/><push state="#pop" state="object_local_value"/></rule>
128 <rule pattern="\s+"><token type="TextWhitespace"/></rule>
129 </state>
130 <state name="object_local_value">
131 <rule pattern="="><token type="Operator"/></rule>
132 <rule pattern=","><token type="Punctuation"/><pop depth="1"/></rule>
133 <rule pattern="\}"><token type="Punctuation"/><pop depth="2"/></rule>
134 <rule><include state="root"/></rule>
135 </state>
136 </rules>
137</lexer>
138