jsonnet.xml

  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="@&#x27;.*&#x27;"><token type="LiteralString"/></rule>
 18      <rule pattern="@&quot;.*&quot;"><token type="LiteralString"/></rule>
 19      <rule pattern="&#x27;"><token type="LiteralString"/><push state="singlestring"/></rule>
 20      <rule pattern="&quot;"><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="[!$~+\-&amp;|^=&lt;&gt;*/%]"><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="[^&#x27;\\]"><token type="LiteralString"/></rule>
 38      <rule pattern="\\."><token type="LiteralStringEscape"/></rule>
 39      <rule pattern="&#x27;"><token type="LiteralString"/><pop depth="1"/></rule>
 40    </state>
 41    <state name="doublestring">
 42      <rule pattern="[^&quot;\\]"><token type="LiteralString"/></rule>
 43      <rule pattern="\\."><token type="LiteralStringEscape"/></rule>
 44      <rule pattern="&quot;"><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="&quot;"><token type="NameVariable"/><push state="double_field_name"/></rule>
 90      <rule pattern="&#x27;"><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="([^&quot;\\]|\\.)*&quot;"><token type="NameVariable"/><push state="field_separator"/></rule>
 99    </state>
100    <state name="single_field_name">
101      <rule pattern="([^&#x27;\\]|\\.)*&#x27;"><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