1<lexer>
2 <config>
3 <name>Mako</name>
4 <alias>mako</alias>
5 <filename>*.mao</filename>
6 <mime_type>application/x-mako</mime_type>
7 </config>
8 <rules>
9 <state name="root">
10 <rule pattern="(\s*)(%)(\s*end(?:\w+))(\n|\Z)">
11 <bygroups>
12 <token type="Text"/>
13 <token type="CommentPreproc"/>
14 <token type="Keyword"/>
15 <token type="Other"/>
16 </bygroups>
17 </rule>
18 <rule pattern="(\s*)(%)([^\n]*)(\n|\Z)">
19 <bygroups>
20 <token type="Text"/>
21 <token type="CommentPreproc"/>
22 <using lexer="Python"/>
23 <token type="Other"/>
24 </bygroups>
25 </rule>
26 <rule pattern="(\s*)(##[^\n]*)(\n|\Z)">
27 <bygroups>
28 <token type="Text"/>
29 <token type="CommentPreproc"/>
30 <token type="Other"/>
31 </bygroups>
32 </rule>
33 <rule pattern="(?s)<%doc>.*?</%doc>">
34 <token type="CommentPreproc"/>
35 </rule>
36 <rule pattern="(<%)([\w.:]+)">
37 <bygroups>
38 <token type="CommentPreproc"/>
39 <token type="NameBuiltin"/>
40 </bygroups>
41 <push state="tag"/>
42 </rule>
43 <rule pattern="(</%)([\w.:]+)(>)">
44 <bygroups>
45 <token type="CommentPreproc"/>
46 <token type="NameBuiltin"/>
47 <token type="CommentPreproc"/>
48 </bygroups>
49 </rule>
50 <rule pattern="<%(?=([\w.:]+))">
51 <token type="CommentPreproc"/>
52 <push state="ondeftags"/>
53 </rule>
54 <rule pattern="(<%(?:!?))(.*?)(%>)(?s)">
55 <bygroups>
56 <token type="CommentPreproc"/>
57 <using lexer="Python"/>
58 <token type="CommentPreproc"/>
59 </bygroups>
60 </rule>
61 <rule pattern="(\$\{)(.*?)(\})">
62 <bygroups>
63 <token type="CommentPreproc"/>
64 <using lexer="Python"/>
65 <token type="CommentPreproc"/>
66 </bygroups>
67 </rule>
68 <rule pattern="(?sx)
 (.+?) # anything, followed by:
 (?:
 (?<=\n)(?=%|\#\#) | # an eval or comment line
 (?=\#\*) | # multiline comment
 (?=</?%) | # a python block
 # call start or end
 (?=\$\{) | # a substitution
 (?<=\n)(?=\s*%) |
 # - don't consume
 (\\\n) | # an escaped newline
 \Z # end of string
 )
 ">
69 <bygroups>
70 <token type="Other"/>
71 <token type="Operator"/>
72 </bygroups>
73 </rule>
74 <rule pattern="\s+">
75 <token type="Text"/>
76 </rule>
77 </state>
78 <state name="ondeftags">
79 <rule pattern="<%">
80 <token type="CommentPreproc"/>
81 </rule>
82 <rule pattern="(?<=<%)(include|inherit|namespace|page)">
83 <token type="NameBuiltin"/>
84 </rule>
85 <rule>
86 <include state="tag"/>
87 </rule>
88 </state>
89 <state name="tag">
90 <rule pattern="((?:\w+)\s*=)(\s*)(".*?")">
91 <bygroups>
92 <token type="NameAttribute"/>
93 <token type="Text"/>
94 <token type="LiteralString"/>
95 </bygroups>
96 </rule>
97 <rule pattern="/?\s*>">
98 <token type="CommentPreproc"/>
99 <pop depth="1"/>
100 </rule>
101 <rule pattern="\s+">
102 <token type="Text"/>
103 </rule>
104 </state>
105 <state name="attr">
106 <rule pattern="".*?"">
107 <token type="LiteralString"/>
108 <pop depth="1"/>
109 </rule>
110 <rule pattern="'.*?'">
111 <token type="LiteralString"/>
112 <pop depth="1"/>
113 </rule>
114 <rule pattern="[^\s>]+">
115 <token type="LiteralString"/>
116 <pop depth="1"/>
117 </rule>
118 </state>
119 </rules>
120</lexer>