1. <lexer>
    
  2.   <config>
    
  3.     <name>DTD</name>
    
  4.     <alias>dtd</alias>
    
  5.     <filename>*.dtd</filename>
    
  6.     <mime_type>application/xml-dtd</mime_type>
    
  7.     <dot_all>true</dot_all>
    
  8.   </config>
    
  9.   <rules>
    
  10.     <state name="common">
    
  11.       <rule pattern="\s+">
    
  12.         <token type="Text"/>
    
  13.       </rule>
    
  14.       <rule pattern="(%|&amp;)[^;]*;">
    
  15.         <token type="NameEntity"/>
    
  16.       </rule>
    
  17.       <rule pattern="&lt;!--">
    
  18.         <token type="Comment"/>
    
  19.         <push state="comment"/>
    
  20.       </rule>
    
  21.       <rule pattern="[(|)*,?+]">
    
  22.         <token type="Operator"/>
    
  23.       </rule>
    
  24.       <rule pattern="&#34;[^&#34;]*&#34;">
    
  25.         <token type="LiteralStringDouble"/>
    
  26.       </rule>
    
  27.       <rule pattern="\&#39;[^\&#39;]*\&#39;">
    
  28.         <token type="LiteralStringSingle"/>
    
  29.       </rule>
    
  30.     </state>
    
  31.     <state name="comment">
    
  32.       <rule pattern="[^-]+">
    
  33.         <token type="Comment"/>
    
  34.       </rule>
    
  35.       <rule pattern="--&gt;">
    
  36.         <token type="Comment"/>
    
  37.         <pop depth="1"/>
    
  38.       </rule>
    
  39.       <rule pattern="-">
    
  40.         <token type="Comment"/>
    
  41.       </rule>
    
  42.     </state>
    
  43.     <state name="element">
    
  44.       <rule>
    
  45.         <include state="common"/>
    
  46.       </rule>
    
  47.       <rule pattern="EMPTY|ANY|#PCDATA">
    
  48.         <token type="KeywordConstant"/>
    
  49.       </rule>
    
  50.       <rule pattern="[^&gt;\s|()?+*,]+">
    
  51.         <token type="NameTag"/>
    
  52.       </rule>
    
  53.       <rule pattern="&gt;">
    
  54.         <token type="Keyword"/>
    
  55.         <pop depth="1"/>
    
  56.       </rule>
    
  57.     </state>
    
  58.     <state name="attlist">
    
  59.       <rule>
    
  60.         <include state="common"/>
    
  61.       </rule>
    
  62.       <rule pattern="CDATA|IDREFS|IDREF|ID|NMTOKENS|NMTOKEN|ENTITIES|ENTITY|NOTATION">
    
  63.         <token type="KeywordConstant"/>
    
  64.       </rule>
    
  65.       <rule pattern="#REQUIRED|#IMPLIED|#FIXED">
    
  66.         <token type="KeywordConstant"/>
    
  67.       </rule>
    
  68.       <rule pattern="xml:space|xml:lang">
    
  69.         <token type="KeywordReserved"/>
    
  70.       </rule>
    
  71.       <rule pattern="[^&gt;\s|()?+*,]+">
    
  72.         <token type="NameAttribute"/>
    
  73.       </rule>
    
  74.       <rule pattern="&gt;">
    
  75.         <token type="Keyword"/>
    
  76.         <pop depth="1"/>
    
  77.       </rule>
    
  78.     </state>
    
  79.     <state name="entity">
    
  80.       <rule>
    
  81.         <include state="common"/>
    
  82.       </rule>
    
  83.       <rule pattern="SYSTEM|PUBLIC|NDATA">
    
  84.         <token type="KeywordConstant"/>
    
  85.       </rule>
    
  86.       <rule pattern="[^&gt;\s|()?+*,]+">
    
  87.         <token type="NameEntity"/>
    
  88.       </rule>
    
  89.       <rule pattern="&gt;">
    
  90.         <token type="Keyword"/>
    
  91.         <pop depth="1"/>
    
  92.       </rule>
    
  93.     </state>
    
  94.     <state name="notation">
    
  95.       <rule>
    
  96.         <include state="common"/>
    
  97.       </rule>
    
  98.       <rule pattern="SYSTEM|PUBLIC">
    
  99.         <token type="KeywordConstant"/>
    
  100.       </rule>
    
  101.       <rule pattern="[^&gt;\s|()?+*,]+">
    
  102.         <token type="NameAttribute"/>
    
  103.       </rule>
    
  104.       <rule pattern="&gt;">
    
  105.         <token type="Keyword"/>
    
  106.         <pop depth="1"/>
    
  107.       </rule>
    
  108.     </state>
    
  109.     <state name="root">
    
  110.       <rule>
    
  111.         <include state="common"/>
    
  112.       </rule>
    
  113.       <rule pattern="(&lt;!ELEMENT)(\s+)(\S+)">
    
  114.         <bygroups>
    
  115.           <token type="Keyword"/>
    
  116.           <token type="Text"/>
    
  117.           <token type="NameTag"/>
    
  118.         </bygroups>
    
  119.         <push state="element"/>
    
  120.       </rule>
    
  121.       <rule pattern="(&lt;!ATTLIST)(\s+)(\S+)">
    
  122.         <bygroups>
    
  123.           <token type="Keyword"/>
    
  124.           <token type="Text"/>
    
  125.           <token type="NameTag"/>
    
  126.         </bygroups>
    
  127.         <push state="attlist"/>
    
  128.       </rule>
    
  129.       <rule pattern="(&lt;!ENTITY)(\s+)(\S+)">
    
  130.         <bygroups>
    
  131.           <token type="Keyword"/>
    
  132.           <token type="Text"/>
    
  133.           <token type="NameEntity"/>
    
  134.         </bygroups>
    
  135.         <push state="entity"/>
    
  136.       </rule>
    
  137.       <rule pattern="(&lt;!NOTATION)(\s+)(\S+)">
    
  138.         <bygroups>
    
  139.           <token type="Keyword"/>
    
  140.           <token type="Text"/>
    
  141.           <token type="NameTag"/>
    
  142.         </bygroups>
    
  143.         <push state="notation"/>
    
  144.       </rule>
    
  145.       <rule pattern="(&lt;!\[)([^\[\s]+)(\s*)(\[)">
    
  146.         <bygroups>
    
  147.           <token type="Keyword"/>
    
  148.           <token type="NameEntity"/>
    
  149.           <token type="Text"/>
    
  150.           <token type="Keyword"/>
    
  151.         </bygroups>
    
  152.       </rule>
    
  153.       <rule pattern="(&lt;!DOCTYPE)(\s+)([^&gt;\s]+)">
    
  154.         <bygroups>
    
  155.           <token type="Keyword"/>
    
  156.           <token type="Text"/>
    
  157.           <token type="NameTag"/>
    
  158.         </bygroups>
    
  159.       </rule>
    
  160.       <rule pattern="PUBLIC|SYSTEM">
    
  161.         <token type="KeywordConstant"/>
    
  162.       </rule>
    
  163.       <rule pattern="[\[\]&gt;]">
    
  164.         <token type="Keyword"/>
    
  165.       </rule>
    
  166.     </state>
    
  167.   </rules>
    
  168. </lexer>