1<lexer>
 2  <config>
 3    <name>Smarty</name>
 4    <alias>smarty</alias>
 5    <filename>*.tpl</filename>
 6    <mime_type>application/x-smarty</mime_type>
 7    <dot_all>true</dot_all>
 8  </config>
 9  <rules>
10    <state name="root">
11      <rule pattern="[^{]+">
12        <token type="Other"/>
13      </rule>
14      <rule pattern="(\{)(\*.*?\*)(\})">
15        <bygroups>
16          <token type="CommentPreproc"/>
17          <token type="Comment"/>
18          <token type="CommentPreproc"/>
19        </bygroups>
20      </rule>
21      <rule pattern="(\{php\})(.*?)(\{/php\})">
22        <bygroups>
23          <token type="CommentPreproc"/>
24          <using lexer="PHP"/>
25          <token type="CommentPreproc"/>
26        </bygroups>
27      </rule>
28      <rule pattern="(\{)(/?[a-zA-Z_]\w*)(\s*)">
29        <bygroups>
30          <token type="CommentPreproc"/>
31          <token type="NameFunction"/>
32          <token type="Text"/>
33        </bygroups>
34        <push state="smarty"/>
35      </rule>
36      <rule pattern="\{">
37        <token type="CommentPreproc"/>
38        <push state="smarty"/>
39      </rule>
40    </state>
41    <state name="smarty">
42      <rule pattern="\s+">
43        <token type="Text"/>
44      </rule>
45      <rule pattern="\{">
46        <token type="CommentPreproc"/>
47        <push/>
48      </rule>
49      <rule pattern="\}">
50        <token type="CommentPreproc"/>
51        <pop depth="1"/>
52      </rule>
53      <rule pattern="#[a-zA-Z_]\w*#">
54        <token type="NameVariable"/>
55      </rule>
56      <rule pattern="\$[a-zA-Z_]\w*(\.\w+)*">
57        <token type="NameVariable"/>
58      </rule>
59      <rule pattern="[~!%^&*()+=|\[\]:;,.<>/?@-]">
60        <token type="Operator"/>
61      </rule>
62      <rule pattern="(true|false|null)\b">
63        <token type="KeywordConstant"/>
64      </rule>
65      <rule pattern="[0-9](\.[0-9]*)?(eE[+-][0-9])?[flFLdD]?|0[xX][0-9a-fA-F]+[Ll]?">
66        <token type="LiteralNumber"/>
67      </rule>
68      <rule pattern=""(\\\\|\\"|[^"])*"">
69        <token type="LiteralStringDouble"/>
70      </rule>
71      <rule pattern="'(\\\\|\\'|[^'])*'">
72        <token type="LiteralStringSingle"/>
73      </rule>
74      <rule pattern="[a-zA-Z_]\w*">
75        <token type="NameAttribute"/>
76      </rule>
77    </state>
78  </rules>
79</lexer>