1<lexer>
2 <config>
3 <name>Twig</name>
4 <alias>twig</alias>
5 <filename>*.twig</filename>
6 <mime_type>application/x-twig</mime_type>
7 <dot_all>true</dot_all>
8 </config>
9 <rules>
10 <state name="var">
11 <rule pattern="\s+">
12 <token type="Text"/>
13 </rule>
14 <rule pattern="(-?)(\}\})">
15 <bygroups>
16 <token type="Text"/>
17 <token type="CommentPreproc"/>
18 </bygroups>
19 <pop depth="1"/>
20 </rule>
21 <rule>
22 <include state="varnames"/>
23 </rule>
24 </state>
25 <state name="tag">
26 <rule pattern="\s+">
27 <token type="Text"/>
28 </rule>
29 <rule pattern="(-?)(%\})">
30 <bygroups>
31 <token type="Text"/>
32 <token type="CommentPreproc"/>
33 </bygroups>
34 <pop depth="1"/>
35 </rule>
36 <rule>
37 <include state="varnames"/>
38 </rule>
39 <rule pattern=".">
40 <token type="Punctuation"/>
41 </rule>
42 </state>
43 <state name="root">
44 <rule pattern="[^{]+">
45 <token type="Other"/>
46 </rule>
47 <rule pattern="\{\{">
48 <token type="CommentPreproc"/>
49 <push state="var"/>
50 </rule>
51 <rule pattern="\{\#.*?\#\}">
52 <token type="Comment"/>
53 </rule>
54 <rule pattern="(\{%)(-?\s*)(raw)(\s*-?)(%\})(.*?)(\{%)(-?\s*)(endraw)(\s*-?)(%\})">
55 <bygroups>
56 <token type="CommentPreproc"/>
57 <token type="Text"/>
58 <token type="Keyword"/>
59 <token type="Text"/>
60 <token type="CommentPreproc"/>
61 <token type="Other"/>
62 <token type="CommentPreproc"/>
63 <token type="Text"/>
64 <token type="Keyword"/>
65 <token type="Text"/>
66 <token type="CommentPreproc"/>
67 </bygroups>
68 </rule>
69 <rule pattern="(\{%)(-?\s*)(verbatim)(\s*-?)(%\})(.*?)(\{%)(-?\s*)(endverbatim)(\s*-?)(%\})">
70 <bygroups>
71 <token type="CommentPreproc"/>
72 <token type="Text"/>
73 <token type="Keyword"/>
74 <token type="Text"/>
75 <token type="CommentPreproc"/>
76 <token type="Other"/>
77 <token type="CommentPreproc"/>
78 <token type="Text"/>
79 <token type="Keyword"/>
80 <token type="Text"/>
81 <token type="CommentPreproc"/>
82 </bygroups>
83 </rule>
84 <rule pattern="(\{%)(-?\s*)(filter)(\s+)((?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w-]|[^\x00-\x7f])*)">
85 <bygroups>
86 <token type="CommentPreproc"/>
87 <token type="Text"/>
88 <token type="Keyword"/>
89 <token type="Text"/>
90 <token type="NameFunction"/>
91 </bygroups>
92 <push state="tag"/>
93 </rule>
94 <rule pattern="(\{%)(-?\s*)([a-zA-Z_]\w*)">
95 <bygroups>
96 <token type="CommentPreproc"/>
97 <token type="Text"/>
98 <token type="Keyword"/>
99 </bygroups>
100 <push state="tag"/>
101 </rule>
102 <rule pattern="\{">
103 <token type="Other"/>
104 </rule>
105 </state>
106 <state name="varnames">
107 <rule pattern="(\|)(\s*)((?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w-]|[^\x00-\x7f])*)">
108 <bygroups>
109 <token type="Operator"/>
110 <token type="Text"/>
111 <token type="NameFunction"/>
112 </bygroups>
113 </rule>
114 <rule pattern="(is)(\s+)(not)?(\s*)((?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w-]|[^\x00-\x7f])*)">
115 <bygroups>
116 <token type="Keyword"/>
117 <token type="Text"/>
118 <token type="Keyword"/>
119 <token type="Text"/>
120 <token type="NameFunction"/>
121 </bygroups>
122 </rule>
123 <rule pattern="(?i)(true|false|none|null)\b">
124 <token type="KeywordPseudo"/>
125 </rule>
126 <rule pattern="(in|not|and|b-and|or|b-or|b-xor|isif|elseif|else|importconstant|defined|divisibleby|empty|even|iterable|odd|sameasmatches|starts\s+with|ends\s+with)\b">
127 <token type="Keyword"/>
128 </rule>
129 <rule pattern="(loop|block|parent)\b">
130 <token type="NameBuiltin"/>
131 </rule>
132 <rule pattern="(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w-]|[^\x00-\x7f])*">
133 <token type="NameVariable"/>
134 </rule>
135 <rule pattern="\.(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w-]|[^\x00-\x7f])*">
136 <token type="NameVariable"/>
137 </rule>
138 <rule pattern="\.[0-9]+">
139 <token type="LiteralNumber"/>
140 </rule>
141 <rule pattern=":?"(\\\\|\\"|[^"])*"">
142 <token type="LiteralStringDouble"/>
143 </rule>
144 <rule pattern=":?'(\\\\|\\'|[^'])*'">
145 <token type="LiteralStringSingle"/>
146 </rule>
147 <rule pattern="([{}()\[\]+\-*/,:~%]|\.\.|\?|:|\*\*|\/\/|!=|[><=]=?)">
148 <token type="Operator"/>
149 </rule>
150 <rule pattern="[0-9](\.[0-9]*)?(eE[+-][0-9])?[flFLdD]?|0[xX][0-9a-fA-F]+[Ll]?">
151 <token type="LiteralNumber"/>
152 </rule>
153 </state>
154 </rules>
155</lexer>