1. <lexer>
    
  2.   <config>
    
  3.     <name>HTML</name>
    
  4.     <alias>html</alias>
    
  5.     <filename>*.html</filename>
    
  6.     <filename>*.htm</filename>
    
  7.     <filename>*.xhtml</filename>
    
  8.     <filename>*.xslt</filename>
    
  9.     <mime_type>text/html</mime_type>
    
  10.     <mime_type>application/xhtml+xml</mime_type>
    
  11.     <case_insensitive>true</case_insensitive>
    
  12.     <dot_all>true</dot_all>
    
  13.     <not_multiline>true</not_multiline>
    
  14.   </config>
    
  15.   <rules>
    
  16.     <state name="script-content">
    
  17.       <rule pattern="(&lt;)(\s*)(/)(\s*)(script)(\s*)(&gt;)">
    
  18.         <bygroups>
    
  19.           <token type="Punctuation"/>
    
  20.           <token type="Text"/>
    
  21.           <token type="Punctuation"/>
    
  22.           <token type="Text"/>
    
  23.           <token type="NameTag"/>
    
  24.           <token type="Text"/>
    
  25.           <token type="Punctuation"/>
    
  26.         </bygroups>
    
  27.         <pop depth="1"/>
    
  28.       </rule>
    
  29.       <rule pattern=".+?(?=&lt;\s*/\s*script\s*&gt;)">
    
  30.         <using lexer="Javascript"/>
    
  31.       </rule>
    
  32.     </state>
    
  33.     <state name="style-content">
    
  34.       <rule pattern="(&lt;)(\s*)(/)(\s*)(style)(\s*)(&gt;)">
    
  35.         <bygroups>
    
  36.           <token type="Punctuation"/>
    
  37.           <token type="Text"/>
    
  38.           <token type="Punctuation"/>
    
  39.           <token type="Text"/>
    
  40.           <token type="NameTag"/>
    
  41.           <token type="Text"/>
    
  42.           <token type="Punctuation"/>
    
  43.         </bygroups>
    
  44.         <pop depth="1"/>
    
  45.       </rule>
    
  46.       <rule pattern=".+?(?=&lt;\s*/\s*style\s*&gt;)">
    
  47.         <using lexer="CSS"/>
    
  48.       </rule>
    
  49.     </state>
    
  50.     <state name="attr">
    
  51.       <rule pattern="&#34;.*?&#34;">
    
  52.         <token type="LiteralString"/>
    
  53.         <pop depth="1"/>
    
  54.       </rule>
    
  55.       <rule pattern="&#39;.*?&#39;">
    
  56.         <token type="LiteralString"/>
    
  57.         <pop depth="1"/>
    
  58.       </rule>
    
  59.       <rule pattern="[^\s&gt;]+">
    
  60.         <token type="LiteralString"/>
    
  61.         <pop depth="1"/>
    
  62.       </rule>
    
  63.     </state>
    
  64.     <state name="root">
    
  65.       <rule pattern="[^&lt;&amp;]+">
    
  66.         <token type="Text"/>
    
  67.       </rule>
    
  68.       <rule pattern="&amp;\S*?;">
    
  69.         <token type="NameEntity"/>
    
  70.       </rule>
    
  71.       <rule pattern="\&lt;\!\[CDATA\[.*?\]\]\&gt;">
    
  72.         <token type="CommentPreproc"/>
    
  73.       </rule>
    
  74.       <rule pattern="&lt;!--">
    
  75.         <token type="Comment"/>
    
  76.         <push state="comment"/>
    
  77.       </rule>
    
  78.       <rule pattern="&lt;\?.*?\?&gt;">
    
  79.         <token type="CommentPreproc"/>
    
  80.       </rule>
    
  81.       <rule pattern="&lt;![^&gt;]*&gt;">
    
  82.         <token type="CommentPreproc"/>
    
  83.       </rule>
    
  84.       <rule pattern="(&lt;)(\s*)(script)(\s*)">
    
  85.         <bygroups>
    
  86.           <token type="Punctuation"/>
    
  87.           <token type="Text"/>
    
  88.           <token type="NameTag"/>
    
  89.           <token type="Text"/>
    
  90.         </bygroups>
    
  91.         <push state="script-content" state="tag"/>
    
  92.       </rule>
    
  93.       <rule pattern="(&lt;)(\s*)(style)(\s*)">
    
  94.         <bygroups>
    
  95.           <token type="Punctuation"/>
    
  96.           <token type="Text"/>
    
  97.           <token type="NameTag"/>
    
  98.           <token type="Text"/>
    
  99.         </bygroups>
    
  100.         <push state="style-content" state="tag"/>
    
  101.       </rule>
    
  102.       <rule pattern="(&lt;)(\s*)([\w:.-]+)">
    
  103.         <bygroups>
    
  104.           <token type="Punctuation"/>
    
  105.           <token type="Text"/>
    
  106.           <token type="NameTag"/>
    
  107.         </bygroups>
    
  108.         <push state="tag"/>
    
  109.       </rule>
    
  110.       <rule pattern="(&lt;)(\s*)(/)(\s*)([\w:.-]+)(\s*)(&gt;)">
    
  111.         <bygroups>
    
  112.           <token type="Punctuation"/>
    
  113.           <token type="Text"/>
    
  114.           <token type="Punctuation"/>
    
  115.           <token type="Text"/>
    
  116.           <token type="NameTag"/>
    
  117.           <token type="Text"/>
    
  118.           <token type="Punctuation"/>
    
  119.         </bygroups>
    
  120.       </rule>
    
  121.     </state>
    
  122.     <state name="comment">
    
  123.       <rule pattern="[^-]+">
    
  124.         <token type="Comment"/>
    
  125.       </rule>
    
  126.       <rule pattern="--&gt;">
    
  127.         <token type="Comment"/>
    
  128.         <pop depth="1"/>
    
  129.       </rule>
    
  130.       <rule pattern="-">
    
  131.         <token type="Comment"/>
    
  132.       </rule>
    
  133.     </state>
    
  134.     <state name="tag">
    
  135.       <rule pattern="\s+">
    
  136.         <token type="Text"/>
    
  137.       </rule>
    
  138.       <rule pattern="([\w:-]+\s*)(=)(\s*)">
    
  139.         <bygroups>
    
  140.           <token type="NameAttribute"/>
    
  141.           <token type="Operator"/>
    
  142.           <token type="Text"/>
    
  143.         </bygroups>
    
  144.         <push state="attr"/>
    
  145.       </rule>
    
  146.       <rule pattern="[\w:-]+">
    
  147.         <token type="NameAttribute"/>
    
  148.       </rule>
    
  149.       <rule pattern="(/?)(\s*)(&gt;)">
    
  150.         <bygroups>
    
  151.           <token type="Punctuation"/>
    
  152.           <token type="Text"/>
    
  153.           <token type="Punctuation"/>
    
  154.         </bygroups>
    
  155.         <pop depth="1"/>
    
  156.       </rule>
    
  157.     </state>
    
  158.   </rules>
    
  159. </lexer>