<lexer>
  <config>
    <name>Docker</name>
    <alias>docker</alias>
    <alias>dockerfile</alias>
    <filename>Dockerfile</filename>
    <filename>Dockerfile.*</filename>
    <filename>*.Dockerfile</filename>
    <filename>*.docker</filename>
    <mime_type>text/x-dockerfile-config</mime_type>
    <case_insensitive>true</case_insensitive>
  </config>
  <rules>
    <state name="root">
      <rule pattern="#.*">
        <token type="Comment"/>
      </rule>
      <rule pattern="(ONBUILD)((?:\s*\\?\s*))">
        <bygroups>
          <token type="Keyword"/>
          <using lexer="Bash"/>
        </bygroups>
      </rule>
      <rule pattern="(HEALTHCHECK)(((?:\s*\\?\s*)--\w+=\w+(?:\s*\\?\s*))*)">
        <bygroups>
          <token type="Keyword"/>
          <using lexer="Bash"/>
        </bygroups>
      </rule>
      <rule pattern="(VOLUME|ENTRYPOINT|CMD|SHELL)((?:\s*\\?\s*))(\[.*?\])">
        <bygroups>
          <token type="Keyword"/>
          <using lexer="Bash"/>
          <using lexer="JSON"/>
        </bygroups>
      </rule>
      <rule pattern="(LABEL|ENV|ARG)((?:(?:\s*\\?\s*)\w+=\w+(?:\s*\\?\s*))*)">
        <bygroups>
          <token type="Keyword"/>
          <using lexer="Bash"/>
        </bygroups>
      </rule>
      <rule pattern="((?:FROM|MAINTAINER|EXPOSE|WORKDIR|USER|STOPSIGNAL)|VOLUME)\b(.*)">
        <bygroups>
          <token type="Keyword"/>
          <token type="LiteralString"/>
        </bygroups>
      </rule>
      <rule pattern="((?:RUN|CMD|ENTRYPOINT|ENV|ARG|LABEL|ADD|COPY))">
        <token type="Keyword"/>
      </rule>
      <rule pattern="(.*\\\n)*.+">
        <using lexer="Bash"/>
      </rule>
    </state>
  </rules>
</lexer>