<lexer>
  <config>
    <name>HLB</name>
    <alias>hlb</alias>
    <filename>*.hlb</filename>
  </config>
  <rules>
    <state name="root">
      <rule pattern="(#.*)">
        <token type="CommentSingle" />
      </rule>
      <rule pattern="((\b(0(b|B|o|O|x|X)[a-fA-F0-9]+)\b)|(\b(0|[1-9][0-9]*)\b))">
        <token type="LiteralNumber" />
      </rule>
      <rule pattern="((\b(true|false)\b))">
        <token type="NameBuiltin" />
      </rule>
      <rule pattern="(\bstring\b|\bint\b|\bbool\b|\bfs\b|\boption\b)">
        <token type="KeywordType" />
      </rule>
      <rule pattern="(\b[a-zA-Z_][a-zA-Z0-9]*\b)(\()">
        <bygroups>
          <token type="NameFunction" />
          <token type="Punctuation" />
        </bygroups>
        <push state="params" />
      </rule>
      <rule pattern="(\{)">
        <token type="Punctuation" />
        <push state="block" />
      </rule>
      <rule pattern="(\n|\r|\r\n)">
        <token type="Text" />
      </rule>
      <rule pattern=".">
        <token type="Text" />
      </rule>
    </state>
    <state name="string">
      <rule pattern="&#34;">
        <token type="LiteralString" />
        <pop depth="1" />
      </rule>
      <rule pattern="\\&#34;">
        <token type="LiteralString" />
      </rule>
      <rule pattern="[^\\&#34;]+">
        <token type="LiteralString" />
      </rule>
    </state>
    <state name="block">
      <rule pattern="(\})">
        <token type="Punctuation" />
        <pop depth="1" />
      </rule>
      <rule pattern="(#.*)">
        <token type="CommentSingle" />
      </rule>
      <rule pattern="((\b(0(b|B|o|O|x|X)[a-fA-F0-9]+)\b)|(\b(0|[1-9][0-9]*)\b))">
        <token type="LiteralNumber" />
      </rule>
      <rule pattern="((\b(true|false)\b))">
        <token type="KeywordConstant" />
      </rule>
      <rule pattern="&#34;">
        <token type="LiteralString" />
        <push state="string" />
      </rule>
      <rule pattern="(with)">
        <token type="KeywordReserved" />
      </rule>
      <rule pattern="(as)([\t ]+)(\b[a-zA-Z_][a-zA-Z0-9]*\b)">
        <bygroups>
          <token type="KeywordReserved" />
          <token type="Text" />
          <token type="NameFunction" />
        </bygroups>
      </rule>
      <rule pattern="(\bstring\b|\bint\b|\bbool\b|\bfs\b|\boption\b)([\t ]+)(\{)">
        <bygroups>
          <token type="KeywordType" />
          <token type="Text" />
          <token type="Punctuation" />
        </bygroups>
        <push state="block" />
      </rule>
      <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)"
      >
        <bygroups>
          <token type="NameOther" />
        </bygroups>
      </rule>
      <rule pattern="(\n|\r|\r\n)">
        <token type="Text" />
      </rule>
      <rule pattern=".">
        <token type="Text" />
      </rule>
    </state>
    <state name="params">
      <rule pattern="(\))">
        <bygroups>
          <token type="Punctuation" />
        </bygroups>
        <pop depth="1" />
      </rule>
      <rule pattern="(variadic)">
        <bygroups>
          <token type="Keyword" />
        </bygroups>
      </rule>
      <rule pattern="(\bstring\b|\bint\b|\bbool\b|\bfs\b|\boption\b)">
        <bygroups>
          <token type="KeywordType" />
        </bygroups>
      </rule>
      <rule pattern="(\b[a-zA-Z_][a-zA-Z0-9]*\b)">
        <bygroups>
          <token type="NameOther" />
        </bygroups>
      </rule>
      <rule pattern="(\n|\r|\r\n)">
        <token type="Text" />
      </rule>
      <rule pattern=".">
        <token type="Text" />
      </rule>
    </state>
  </rules>
</lexer>
