1<lexer>
2 <config>
3 <name>PHP</name>
4 <alias>php</alias>
5 <alias>php3</alias>
6 <alias>php4</alias>
7 <alias>php5</alias>
8 <filename>*.php</filename>
9 <filename>*.php[345]</filename>
10 <filename>*.inc</filename>
11 <mime_type>text/x-php</mime_type>
12 <case_insensitive>true</case_insensitive>
13 <dot_all>true</dot_all>
14 <ensure_nl>true</ensure_nl>
15 <priority>3</priority>
16 </config>
17 <rules>
18 <state name="magicfuncs">
19 <rule pattern="(__callStatic|__set_state|__construct|__debugInfo|__toString|__destruct|__invoke|__wakeup|__clone|__sleep|__isset|__unset|__call|__get|__set)\b">
20 <token type="NameFunctionMagic"/>
21 </rule>
22 </state>
23 <state name="magicconstants">
24 <rule pattern="(__NAMESPACE__|__FUNCTION__|__METHOD__|__CLASS__|__TRAIT__|__LINE__|__FILE__|__DIR__)\b">
25 <token type="NameConstant"/>
26 </rule>
27 </state>
28 <state name="classname">
29 <rule pattern="(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*">
30 <token type="NameClass"/>
31 <pop depth="1"/>
32 </rule>
33 </state>
34 <state name="functionname">
35 <rule>
36 <include state="magicfuncs"/>
37 </rule>
38 <rule pattern="(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*">
39 <token type="NameFunction"/>
40 <pop depth="1"/>
41 </rule>
42 <rule>
43 <pop depth="1"/>
44 </rule>
45 </state>
46 <state name="string">
47 <rule pattern=""">
48 <token type="LiteralStringDouble"/>
49 <pop depth="1"/>
50 </rule>
51 <rule pattern="[^{$"\\]+">
52 <token type="LiteralStringDouble"/>
53 </rule>
54 <rule pattern="\\([nrt"$\\]|[0-7]{1,3}|x[0-9a-f]{1,2})">
55 <token type="LiteralStringEscape"/>
56 </rule>
57 <rule pattern="\$(?:[_a-z]|[^\x00-\x7f])(?:\w|[^\x00-\x7f])*(\[\S+?\]|->(?:[_a-z]|[^\x00-\x7f])(?:\w|[^\x00-\x7f])*)?">
58 <token type="LiteralStringInterpol"/>
59 </rule>
60 <rule pattern="(\{\$\{)(.*?)(\}\})">
61 <bygroups>
62 <token type="LiteralStringInterpol"/>
63 <usingself state="root"/>
64 <token type="LiteralStringInterpol"/>
65 </bygroups>
66 </rule>
67 <rule pattern="(\{)(\$.*?)(\})">
68 <bygroups>
69 <token type="LiteralStringInterpol"/>
70 <usingself state="root"/>
71 <token type="LiteralStringInterpol"/>
72 </bygroups>
73 </rule>
74 <rule pattern="(\$\{)(\S+)(\})">
75 <bygroups>
76 <token type="LiteralStringInterpol"/>
77 <token type="NameVariable"/>
78 <token type="LiteralStringInterpol"/>
79 </bygroups>
80 </rule>
81 <rule pattern="[${\\]">
82 <token type="LiteralStringDouble"/>
83 </rule>
84 </state>
85 <state name="variablevariable">
86 <rule pattern="\}">
87 <token type="NameVariable"/>
88 <pop depth="1"/>
89 </rule>
90 <rule>
91 <include state="root"/>
92 </rule>
93 </state>
94 <state name="attribute">
95 <rule pattern="\]">
96 <token type="Punctuation"/>
97 <pop depth="1"/>
98 </rule>
99 <rule pattern="\(">
100 <token type="Punctuation"/>
101 <push state="attributeparams"/>
102 </rule>
103 <rule pattern="(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*">
104 <token type="NameDecorator"/>
105 </rule>
106 <rule>
107 <include state="root"/>
108 </rule>
109 </state>
110 <state name="attributeparams">
111 <rule pattern="\)">
112 <token type="Punctuation"/>
113 <pop depth="1"/>
114 </rule>
115 <rule>
116 <include state="root"/>
117 </rule>
118 </state>
119 <state name="root">
120 <rule pattern="\?>">
121 <token type="CommentPreproc"/>
122 <pop depth="1"/>
123 </rule>
124 <rule pattern="(<<<)([\'"]?)((?:[_a-z]|[^\x00-\x7f])(?:\w|[^\x00-\x7f])*)(\2\n.*?\n\s*)(\3)(;?)(\n)">
125 <bygroups>
126 <token type="LiteralString"/>
127 <token type="LiteralString"/>
128 <token type="LiteralStringDelimiter"/>
129 <token type="LiteralString"/>
130 <token type="LiteralStringDelimiter"/>
131 <token type="Punctuation"/>
132 <token type="Text"/>
133 </bygroups>
134 </rule>
135 <rule pattern="\s+">
136 <token type="Text"/>
137 </rule>
138 <rule pattern="#\[">
139 <token type="Punctuation"/>
140 <push state="attribute"/>
141 </rule>
142 <rule pattern="#.*?\n">
143 <token type="CommentSingle"/>
144 </rule>
145 <rule pattern="//.*?\n">
146 <token type="CommentSingle"/>
147 </rule>
148 <rule pattern="/\*\*/">
149 <token type="CommentMultiline"/>
150 </rule>
151 <rule pattern="/\*\*.*?\*/">
152 <token type="LiteralStringDoc"/>
153 </rule>
154 <rule pattern="/\*.*?\*/">
155 <token type="CommentMultiline"/>
156 </rule>
157 <rule pattern="(->|::)(\s*)((?:[_a-z]|[^\x00-\x7f])(?:\w|[^\x00-\x7f])*)">
158 <bygroups>
159 <token type="Operator"/>
160 <token type="Text"/>
161 <token type="NameAttribute"/>
162 </bygroups>
163 </rule>
164 <rule pattern="[~!%^&*+=|:.<>/@-]+">
165 <token type="Operator"/>
166 </rule>
167 <rule pattern="\?">
168 <token type="Operator"/>
169 </rule>
170 <rule pattern="[\[\]{}();,]+">
171 <token type="Punctuation"/>
172 </rule>
173 <rule pattern="(new)(\s+)(class)\b">
174 <bygroups>
175 <token type="Keyword"/>
176 <token type="Text"/>
177 <token type="Keyword"/>
178 </bygroups>
179 </rule>
180 <rule pattern="(class)(\s+)">
181 <bygroups>
182 <token type="Keyword"/>
183 <token type="Text"/>
184 </bygroups>
185 <push state="classname"/>
186 </rule>
187 <rule pattern="(function)(\s*)(?=\()">
188 <bygroups>
189 <token type="Keyword"/>
190 <token type="Text"/>
191 </bygroups>
192 </rule>
193 <rule pattern="(function)(\s+)(&?)(\s*)">
194 <bygroups>
195 <token type="Keyword"/>
196 <token type="Text"/>
197 <token type="Operator"/>
198 <token type="Text"/>
199 </bygroups>
200 <push state="functionname"/>
201 </rule>
202 <rule pattern="(const)(\s+)((?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*)">
203 <bygroups>
204 <token type="Keyword"/>
205 <token type="Text"/>
206 <token type="NameConstant"/>
207 </bygroups>
208 </rule>
209 <rule pattern="(and|E_PARSE|old_function|E_ERROR|or|as|E_WARNING|parent|eval|PHP_OS|break|exit|case|extends|PHP_VERSION|cfunction|FALSE|print|for|require|continue|foreach|require_once|declare|return|default|static|do|switch|die|stdClass|echo|else|TRUE|elseif|var|empty|if|xor|enddeclare|include|virtual|endfor|include_once|while|endforeach|global|endif|list|endswitch|new|endwhile|not|array|E_ALL|NULL|final|php_user_filter|interface|implements|public|private|protected|abstract|clone|try|catch|throw|this|use|namespace|trait|yield|finally|match)\b">
210 <token type="Keyword"/>
211 </rule>
212 <rule pattern="(true|false|null)\b">
213 <token type="KeywordConstant"/>
214 </rule>
215 <rule>
216 <include state="magicconstants"/>
217 </rule>
218 <rule pattern="\$\{">
219 <token type="NameVariable"/>
220 <push state="variablevariable"/>
221 </rule>
222 <rule pattern="\$+(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*">
223 <token type="NameVariable"/>
224 </rule>
225 <rule pattern="(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*">
226 <token type="NameOther"/>
227 </rule>
228 <rule pattern="(\d+\.\d*|\d*\.\d+)(e[+-]?[0-9]+)?">
229 <token type="LiteralNumberFloat"/>
230 </rule>
231 <rule pattern="\d+e[+-]?[0-9]+">
232 <token type="LiteralNumberFloat"/>
233 </rule>
234 <rule pattern="0o?[0-7_]+">
235 <token type="LiteralNumberOct"/>
236 </rule>
237 <rule pattern="0x[a-f0-9_]+">
238 <token type="LiteralNumberHex"/>
239 </rule>
240 <rule pattern="\d[\d_]*">
241 <token type="LiteralNumberInteger"/>
242 </rule>
243 <rule pattern="0b[01_]+">
244 <token type="LiteralNumberBin"/>
245 </rule>
246 <rule pattern="'([^'\\]*(?:\\.[^'\\]*)*)'">
247 <token type="LiteralStringSingle"/>
248 </rule>
249 <rule pattern="`([^`\\]*(?:\\.[^`\\]*)*)`">
250 <token type="LiteralStringBacktick"/>
251 </rule>
252 <rule pattern=""">
253 <token type="LiteralStringDouble"/>
254 <push state="string"/>
255 </rule>
256 </state>
257 </rules>
258</lexer>