cheetah.xml

 1<lexer>
 2  <config>
 3    <name>Cheetah</name>
 4    <alias>cheetah</alias>
 5    <alias>spitfire</alias>
 6    <filename>*.tmpl</filename>
 7    <filename>*.spt</filename>
 8    <mime_type>application/x-cheetah</mime_type>
 9    <mime_type>application/x-spitfire</mime_type>
10  </config>
11  <rules>
12    <state name="root">
13      <rule pattern="(##[^\n]*)$">
14        <bygroups>
15          <token type="Comment"/>
16        </bygroups>
17      </rule>
18      <rule pattern="#[*](.|\n)*?[*]#">
19        <token type="Comment"/>
20      </rule>
21      <rule pattern="#end[^#\n]*(?:#|$)">
22        <token type="CommentPreproc"/>
23      </rule>
24      <rule pattern="#slurp$">
25        <token type="CommentPreproc"/>
26      </rule>
27      <rule pattern="(#[a-zA-Z]+)([^#\n]*)(#|$)">
28        <bygroups>
29          <token type="CommentPreproc"/>
30          <using lexer="Python"/>
31          <token type="CommentPreproc"/>
32        </bygroups>
33      </rule>
34      <rule pattern="(\$)([a-zA-Z_][\w.]*\w)">
35        <bygroups>
36          <token type="CommentPreproc"/>
37          <using lexer="Python"/>
38        </bygroups>
39      </rule>
40      <rule pattern="(\$\{!?)(.*?)(\})(?s)">
41        <bygroups>
42          <token type="CommentPreproc"/>
43          <using lexer="Python"/>
44          <token type="CommentPreproc"/>
45        </bygroups>
46      </rule>
47      <rule pattern="(?sx)&#xA;                (.+?)               # anything, followed by:&#xA;                (?:&#xA;                 (?=\#[#a-zA-Z]*) | # an eval comment&#xA;                 (?=\$[a-zA-Z_{]) | # a substitution&#xA;                 \Z                 # end of string&#xA;                )&#xA;            ">
48        <token type="Other"/>
49      </rule>
50      <rule pattern="\s+">
51        <token type="Text"/>
52      </rule>
53    </state>
54  </rules>
55</lexer>