1. <lexer>
    
  2.   <config>
    
  3.     <name>Mason</name>
    
  4.     <alias>mason</alias>
    
  5.     <filename>*.m</filename>
    
  6.     <filename>*.mhtml</filename>
    
  7.     <filename>*.mc</filename>
    
  8.     <filename>*.mi</filename>
    
  9.     <filename>autohandler</filename>
    
  10.     <filename>dhandler</filename>
    
  11.     <mime_type>application/x-mason</mime_type>
    
  12.     <priority>0.1</priority>
    
  13.   </config>
    
  14.   <rules>
    
  15.     <state name="root">
    
  16.       <rule pattern="\s+">
    
  17.         <token type="Text"/>
    
  18.       </rule>
    
  19.       <rule pattern="(&lt;%doc&gt;)(.*?)(&lt;/%doc&gt;)(?s)">
    
  20.         <bygroups>
    
  21.           <token type="NameTag"/>
    
  22.           <token type="CommentMultiline"/>
    
  23.           <token type="NameTag"/>
    
  24.         </bygroups>
    
  25.       </rule>
    
  26.       <rule pattern="(&lt;%(?:def|method))(\s*)(.*?)(&gt;)(.*?)(&lt;/%\2\s*&gt;)(?s)">
    
  27.         <bygroups>
    
  28.           <token type="NameTag"/>
    
  29.           <token type="Text"/>
    
  30.           <token type="NameFunction"/>
    
  31.           <token type="NameTag"/>
    
  32.           <usingself state="root"/>
    
  33.           <token type="NameTag"/>
    
  34.         </bygroups>
    
  35.       </rule>
    
  36.       <rule pattern="(&lt;%\w+)(.*?)(&gt;)(.*?)(&lt;/%\2\s*&gt;)(?s)">
    
  37.         <bygroups>
    
  38.           <token type="NameTag"/>
    
  39.           <token type="NameFunction"/>
    
  40.           <token type="NameTag"/>
    
  41.           <using lexer="Perl"/>
    
  42.           <token type="NameTag"/>
    
  43.         </bygroups>
    
  44.       </rule>
    
  45.       <rule pattern="(&lt;&amp;[^|])(.*?)(,.*?)?(&amp;&gt;)(?s)">
    
  46.         <bygroups>
    
  47.           <token type="NameTag"/>
    
  48.           <token type="NameFunction"/>
    
  49.           <using lexer="Perl"/>
    
  50.           <token type="NameTag"/>
    
  51.         </bygroups>
    
  52.       </rule>
    
  53.       <rule pattern="(&lt;&amp;\|)(.*?)(,.*?)?(&amp;&gt;)(?s)">
    
  54.         <bygroups>
    
  55.           <token type="NameTag"/>
    
  56.           <token type="NameFunction"/>
    
  57.           <using lexer="Perl"/>
    
  58.           <token type="NameTag"/>
    
  59.         </bygroups>
    
  60.       </rule>
    
  61.       <rule pattern="&lt;/&amp;&gt;">
    
  62.         <token type="NameTag"/>
    
  63.       </rule>
    
  64.       <rule pattern="(&lt;%!?)(.*?)(%&gt;)(?s)">
    
  65.         <bygroups>
    
  66.           <token type="NameTag"/>
    
  67.           <using lexer="Perl"/>
    
  68.           <token type="NameTag"/>
    
  69.         </bygroups>
    
  70.       </rule>
    
  71.       <rule pattern="(?&lt;=^)#[^\n]*(\n|\Z)">
    
  72.         <token type="Comment"/>
    
  73.       </rule>
    
  74.       <rule pattern="(?&lt;=^)(%)([^\n]*)(\n|\Z)">
    
  75.         <bygroups>
    
  76.           <token type="NameTag"/>
    
  77.           <using lexer="Perl"/>
    
  78.           <token type="Other"/>
    
  79.         </bygroups>
    
  80.       </rule>
    
  81.       <rule pattern="(?sx)&#xA;                 (.+?)               # anything, followed by:&#xA;                 (?:&#xA;                  (?&lt;=\n)(?=[%#]) |  # an eval or comment line&#xA;                  (?=&lt;/?[%&amp;]) |      # a substitution or block or&#xA;                                     # call start or end&#xA;                                     # - don&#39;t consume&#xA;                  (\\\n) |           # an escaped newline&#xA;                  \Z                 # end of string&#xA;                 )">
    
  82.         <bygroups>
    
  83.           <using lexer="HTML"/>
    
  84.           <token type="Operator"/>
    
  85.         </bygroups>
    
  86.       </rule>
    
  87.     </state>
    
  88.   </rules>
    
  89. </lexer>