1<lexer>
  2  <config>
  3    <name>HLB</name>
  4    <alias>hlb</alias>
  5    <filename>*.hlb</filename>
  6  </config>
  7  <rules>
  8    <state name="root">
  9      <rule pattern="(#.*)">
 10        <bygroups>
 11          <token type="CommentSingle"/>
 12        </bygroups>
 13      </rule>
 14      <rule pattern="((\b(0(b|B|o|O|x|X)[a-fA-F0-9]+)\b)|(\b(0|[1-9][0-9]*)\b))">
 15        <bygroups>
 16          <token type="LiteralNumber"/>
 17        </bygroups>
 18      </rule>
 19      <rule pattern="((\b(true|false)\b))">
 20        <bygroups>
 21          <token type="NameBuiltin"/>
 22        </bygroups>
 23      </rule>
 24      <rule pattern="(\bstring\b|\bint\b|\bbool\b|\bfs\b|\boption\b)">
 25        <bygroups>
 26          <token type="KeywordType"/>
 27        </bygroups>
 28      </rule>
 29      <rule pattern="(\b[a-zA-Z_][a-zA-Z0-9]*\b)(\()">
 30        <bygroups>
 31          <token type="NameFunction"/>
 32          <token type="Punctuation"/>
 33        </bygroups>
 34        <push state="params"/>
 35      </rule>
 36      <rule pattern="(\{)">
 37        <bygroups>
 38          <token type="Punctuation"/>
 39        </bygroups>
 40        <push state="block"/>
 41      </rule>
 42      <rule pattern="(\n|\r|\r\n)">
 43        <token type="Text"/>
 44      </rule>
 45      <rule pattern=".">
 46        <token type="Text"/>
 47      </rule>
 48    </state>
 49    <state name="string">
 50      <rule pattern=""">
 51        <token type="LiteralString"/>
 52        <pop depth="1"/>
 53      </rule>
 54      <rule pattern="\\"">
 55        <token type="LiteralString"/>
 56      </rule>
 57      <rule pattern="[^\\"]+">
 58        <token type="LiteralString"/>
 59      </rule>
 60    </state>
 61    <state name="block">
 62      <rule pattern="(\})">
 63        <bygroups>
 64          <token type="Punctuation"/>
 65        </bygroups>
 66        <pop depth="1"/>
 67      </rule>
 68      <rule pattern="(#.*)">
 69        <bygroups>
 70          <token type="CommentSingle"/>
 71        </bygroups>
 72      </rule>
 73      <rule pattern="((\b(0(b|B|o|O|x|X)[a-fA-F0-9]+)\b)|(\b(0|[1-9][0-9]*)\b))">
 74        <bygroups>
 75          <token type="LiteralNumber"/>
 76        </bygroups>
 77      </rule>
 78      <rule pattern="((\b(true|false)\b))">
 79        <bygroups>
 80          <token type="KeywordConstant"/>
 81        </bygroups>
 82      </rule>
 83      <rule pattern=""">
 84        <token type="LiteralString"/>
 85        <push state="string"/>
 86      </rule>
 87      <rule pattern="(with)">
 88        <bygroups>
 89          <token type="KeywordReserved"/>
 90        </bygroups>
 91      </rule>
 92      <rule pattern="(as)([\t ]+)(\b[a-zA-Z_][a-zA-Z0-9]*\b)">
 93        <bygroups>
 94          <token type="KeywordReserved"/>
 95          <token type="Text"/>
 96          <token type="NameFunction"/>
 97        </bygroups>
 98      </rule>
 99      <rule pattern="(\bstring\b|\bint\b|\bbool\b|\bfs\b|\boption\b)([\t ]+)(\{)">
100        <bygroups>
101          <token type="KeywordType"/>
102          <token type="Text"/>
103          <token type="Punctuation"/>
104        </bygroups>
105        <push state="block"/>
106      </rule>
107      <rule pattern="(?!\b(?:scratch|image|resolve|http|checksum|chmod|filename|git|keepGitDir|local|includePatterns|excludePatterns|followPaths|generate|frontendInput|shell|run|readonlyRootfs|env|dir|user|network|security|host|ssh|secret|mount|target|localPath|uid|gid|mode|readonly|tmpfs|sourcePath|cache|mkdir|createParents|chown|createdTime|mkfile|rm|allowNotFound|allowWildcards|copy|followSymlinks|contentsOnly|unpack|createDestPath)\b)(\b[a-zA-Z_][a-zA-Z0-9]*\b)">
108        <bygroups>
109          <token type="NameOther"/>
110        </bygroups>
111      </rule>
112      <rule pattern="(\n|\r|\r\n)">
113        <token type="Text"/>
114      </rule>
115      <rule pattern=".">
116        <token type="Text"/>
117      </rule>
118    </state>
119    <state name="params">
120      <rule pattern="(\))">
121        <bygroups>
122          <token type="Punctuation"/>
123        </bygroups>
124        <pop depth="1"/>
125      </rule>
126      <rule pattern="(variadic)">
127        <bygroups>
128          <token type="Keyword"/>
129        </bygroups>
130      </rule>
131      <rule pattern="(\bstring\b|\bint\b|\bbool\b|\bfs\b|\boption\b)">
132        <bygroups>
133          <token type="KeywordType"/>
134        </bygroups>
135      </rule>
136      <rule pattern="(\b[a-zA-Z_][a-zA-Z0-9]*\b)">
137        <bygroups>
138          <token type="NameOther"/>
139        </bygroups>
140      </rule>
141      <rule pattern="(\n|\r|\r\n)">
142        <token type="Text"/>
143      </rule>
144      <rule pattern=".">
145        <token type="Text"/>
146      </rule>
147    </state>
148  </rules>
149</lexer>