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        <token type="CommentSingle" />
 11      </rule>
 12      <rule pattern="((\b(0(b|B|o|O|x|X)[a-fA-F0-9]+)\b)|(\b(0|[1-9][0-9]*)\b))">
 13        <token type="LiteralNumber" />
 14      </rule>
 15      <rule pattern="((\b(true|false)\b))">
 16        <token type="NameBuiltin" />
 17      </rule>
 18      <rule pattern="(\bstring\b|\bint\b|\bbool\b|\bfs\b|\boption\b)">
 19        <token type="KeywordType" />
 20      </rule>
 21      <rule pattern="(\b[a-zA-Z_][a-zA-Z0-9]*\b)(\()">
 22        <bygroups>
 23          <token type="NameFunction" />
 24          <token type="Punctuation" />
 25        </bygroups>
 26        <push state="params" />
 27      </rule>
 28      <rule pattern="(\{)">
 29        <token type="Punctuation" />
 30        <push state="block" />
 31      </rule>
 32      <rule pattern="(\n|\r|\r\n)">
 33        <token type="Text" />
 34      </rule>
 35      <rule pattern=".">
 36        <token type="Text" />
 37      </rule>
 38    </state>
 39    <state name="string">
 40      <rule pattern="&#34;">
 41        <token type="LiteralString" />
 42        <pop depth="1" />
 43      </rule>
 44      <rule pattern="\\&#34;">
 45        <token type="LiteralString" />
 46      </rule>
 47      <rule pattern="[^\\&#34;]+">
 48        <token type="LiteralString" />
 49      </rule>
 50    </state>
 51    <state name="block">
 52      <rule pattern="(\})">
 53        <token type="Punctuation" />
 54        <pop depth="1" />
 55      </rule>
 56      <rule pattern="(#.*)">
 57        <token type="CommentSingle" />
 58      </rule>
 59      <rule pattern="((\b(0(b|B|o|O|x|X)[a-fA-F0-9]+)\b)|(\b(0|[1-9][0-9]*)\b))">
 60        <token type="LiteralNumber" />
 61      </rule>
 62      <rule pattern="((\b(true|false)\b))">
 63        <token type="KeywordConstant" />
 64      </rule>
 65      <rule pattern="&#34;">
 66        <token type="LiteralString" />
 67        <push state="string" />
 68      </rule>
 69      <rule pattern="(with)">
 70        <token type="KeywordReserved" />
 71      </rule>
 72      <rule pattern="(as)([\t ]+)(\b[a-zA-Z_][a-zA-Z0-9]*\b)">
 73        <bygroups>
 74          <token type="KeywordReserved" />
 75          <token type="Text" />
 76          <token type="NameFunction" />
 77        </bygroups>
 78      </rule>
 79      <rule pattern="(\bstring\b|\bint\b|\bbool\b|\bfs\b|\boption\b)([\t ]+)(\{)">
 80        <bygroups>
 81          <token type="KeywordType" />
 82          <token type="Text" />
 83          <token type="Punctuation" />
 84        </bygroups>
 85        <push state="block" />
 86      </rule>
 87      <rule
 88        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)"
 89      >
 90        <bygroups>
 91          <token type="NameOther" />
 92        </bygroups>
 93      </rule>
 94      <rule pattern="(\n|\r|\r\n)">
 95        <token type="Text" />
 96      </rule>
 97      <rule pattern=".">
 98        <token type="Text" />
 99      </rule>
100    </state>
101    <state name="params">
102      <rule pattern="(\))">
103        <bygroups>
104          <token type="Punctuation" />
105        </bygroups>
106        <pop depth="1" />
107      </rule>
108      <rule pattern="(variadic)">
109        <bygroups>
110          <token type="Keyword" />
111        </bygroups>
112      </rule>
113      <rule pattern="(\bstring\b|\bint\b|\bbool\b|\bfs\b|\boption\b)">
114        <bygroups>
115          <token type="KeywordType" />
116        </bygroups>
117      </rule>
118      <rule pattern="(\b[a-zA-Z_][a-zA-Z0-9]*\b)">
119        <bygroups>
120          <token type="NameOther" />
121        </bygroups>
122      </rule>
123      <rule pattern="(\n|\r|\r\n)">
124        <token type="Text" />
125      </rule>
126      <rule pattern=".">
127        <token type="Text" />
128      </rule>
129    </state>
130  </rules>
131</lexer>