"(&lt;!ENTITY)(\s+)(\S+)">
        <bygroups>
          <token type="Keyword"/>
          <token type="Text"/>
          <token type="NameEntity"/>
        </bygroups>
        <push state="entity"/>
      </rule>
      <rule pattern="(&lt;!NOTATION)(\s+)(\S+)">
        <bygroups>
          <token type="Keyword"/>
          <token type="Text"/>
          <token type="NameTag"/>
        </bygroups>
        <push state="notation"/>
      </rule>
      <rule pattern="(&lt;!\[)([^\[\s]+)(\s*)(\[)">
        <bygroups>
          <token type="Keyword"/>
          <token type="NameEntity"/>
          <token type="Text"/>
          <token type="Keyword"/>
        </bygroups>
      </rule>
      <rule pattern="(&lt;!DOCTYPE)(\s+)([^&gt;\s]+)">
        <bygroups>
          <token type="Keyword"/>
          <token type="Text"/>
          <token type="NameTag"/>
        </bygroups>
      </rule>
      <rule pattern="PUBLIC|SYSTEM">
        <token type="KeywordConstant"/>
      </rule>
      <rule pattern="[\[\]&gt;]">
        <token type="Keyword"/>
      </rule>
    </state>
  </rules>
</lexer>