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="(<%doc>)(.*?)(</%doc>)(?s)">
20        <bygroups>
21          <token type="NameTag"/>
22          <token type="CommentMultiline"/>
23          <token type="NameTag"/>
24        </bygroups>
25      </rule>
26      <rule pattern="(<%(?:def|method))(\s*)(.*?)(>)(.*?)(</%\2\s*>)(?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="(<%\w+)(.*?)(>)(.*?)(</%\2\s*>)(?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="(<&[^|])(.*?)(,.*?)?(&>)(?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="(<&\|)(.*?)(,.*?)?(&>)(?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="</&>">
62        <token type="NameTag"/>
63      </rule>
64      <rule pattern="(<%!?)(.*?)(%>)(?s)">
65        <bygroups>
66          <token type="NameTag"/>
67          <using lexer="Perl"/>
68          <token type="NameTag"/>
69        </bygroups>
70      </rule>
71      <rule pattern="(?<=^)#[^\n]*(\n|\Z)">
72        <token type="Comment"/>
73      </rule>
74      <rule pattern="(?<=^)(%)([^\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)
                 (.+?)               # anything, followed by:
                 (?:
                  (?<=\n)(?=[%#]) |  # an eval or comment line
                  (?=</?[%&]) |      # a substitution or block or
                                     # call start or end
                                     # - don't consume
                  (\\\n) |           # an escaped newline
                  \Z                 # end of string
                 )">
82        <bygroups>
83          <using lexer="HTML"/>
84          <token type="Operator"/>
85        </bygroups>
86      </rule>
87    </state>
88  </rules>
89</lexer>