]> gitweb.factorcode.org Git - factor.git/blob - basis/xmode/modes/python.xml
xmode.modes: updating with recent xmode files
[factor.git] / basis / xmode / modes / python.xml
1 <?xml version="1.0"?>
2
3 <!DOCTYPE MODE SYSTEM "xmode.dtd">
4
5 <!-- Python mode, by Slava Pestov. Based on PythonTokenMarker by -->
6 <!-- Jonathan Revusky -->
7
8 <!-- Modified 19-Jul-00 by Ivan Frohne to: -->
9 <!--  (a) implement 'indentOnEnter'; -->
10 <!--  (b) indent next line automatically after control structures followed -->
11 <!--      by ':'; -->
12 <!--  (c) make """ or ''' multiline quotes TYPE LITERAL2; -->
13 <!--  (d) add TYPE FUNCTION identified by a following '(' -->
14 <!--  (e) eliminate the '?' SEQ TYPE ('?' has no meaning in Python); -->
15 <!--  (f) change the TYPE of 'and', 'or', and 'not' to KEYWORD1; and -->
16 <!--  (g) add all builtin functions, builtin exceptions, -->
17 <!--      builtin type methods, File object methods, and special type -->
18 <!--      attributes as TYPE KEYWORD3. -->
19
20 <MODE>
21         <PROPS>
22                 <PROPERTY NAME="indentNextLines" VALUE="\s*[^#]{3,}:\s*(#.*)?" />
23                 <PROPERTY NAME="indentOpenBrackets" VALUE="{[" />
24                 <PROPERTY NAME="indentCloseBrackets" VALUE="}]" />
25                 <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />
26                 <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />
27                 <PROPERTY NAME="unindentNextLines" VALUE="^\s*(pass|else\s*:|elif\s.*:|except(\s.*)?:|finally\s*:)\s*(#.*)?$" />
28                 <PROPERTY NAME="unindentThisLine" VALUE="^\s*(else|elif\s.*|except(\s.*)?|finally)\s*:\s*(#.*)?" />
29                 <PROPERTY NAME="lineComment" VALUE="#" />
30                 <PROPERTY NAME="electricKeys" VALUE=":" />
31                 <PROPERTY NAME="ignoreWhitespace" VALUE="false" />
32         </PROPS>
33         <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">
34                 <!-- Comment -->
35                 <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>
36
37                 <!-- decorator -->
38                 <SPAN_REGEXP HASH_CHAR="@" MATCH_TYPE="KEYWORD4" DELEGATE="python::MAIN">
39                         <BEGIN>@\w+(?:\.\w+)*\(</BEGIN>
40                         <END>\)</END>
41                 </SPAN_REGEXP>
42                 <MARK_FOLLOWING TYPE="KEYWORD4">@</MARK_FOLLOWING>
43
44                 <!-- Triple-quotes -->
45                 <SPAN TYPE="LITERAL2" DELEGATE="LITERAL_TWO">
46                         <BEGIN>"""</BEGIN>
47                         <END>"""</END>
48                 </SPAN>
49
50                 <SPAN TYPE="LITERAL2" DELEGATE="LITERAL_TWO">
51                         <BEGIN>'''</BEGIN>
52                         <END>'''</END>
53                 </SPAN>
54
55                 <!-- Standard literals -->
56                 <SPAN TYPE="LITERAL1" DELEGATE="LITERAL_ONE">
57                         <BEGIN>"</BEGIN>
58                         <END>"</END>
59                 </SPAN>
60                 <SPAN TYPE="LITERAL1" DELEGATE="LITERAL_ONE">
61                         <BEGIN>'</BEGIN>
62                         <END>'</END>
63                 </SPAN>
64
65                 <SEQ TYPE="OPERATOR">=</SEQ>
66                 <SEQ TYPE="OPERATOR">!</SEQ>
67                 <SEQ TYPE="OPERATOR">&gt;=</SEQ>
68                 <SEQ TYPE="OPERATOR">&lt;=</SEQ>
69                 <SEQ TYPE="OPERATOR">+</SEQ>
70                 <SEQ TYPE="OPERATOR">-</SEQ>
71                 <SEQ TYPE="OPERATOR">/</SEQ>
72                 <SEQ TYPE="OPERATOR">*</SEQ>
73                 <SEQ TYPE="OPERATOR">&gt;</SEQ>
74                 <SEQ TYPE="OPERATOR">&lt;</SEQ>
75                 <SEQ TYPE="OPERATOR">%</SEQ>
76                 <SEQ TYPE="OPERATOR">&amp;</SEQ>
77                 <SEQ TYPE="OPERATOR">|</SEQ>
78                 <SEQ TYPE="OPERATOR">^</SEQ>
79                 <SEQ TYPE="OPERATOR">~</SEQ>
80                 <SEQ TYPE="KEYWORD1">:</SEQ>
81
82                 <MARK_PREVIOUS TYPE="FUNCTION"
83                         MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>
84                 <SEQ TYPE="OPERATOR">)</SEQ>
85
86                 <KEYWORDS>
87                         <!--  Reserved Words  -->
88                         <KEYWORD1>and</KEYWORD1>
89                         <KEYWORD1>as</KEYWORD1>
90                         <KEYWORD1>assert</KEYWORD1>
91                         <KEYWORD1>break</KEYWORD1>
92                         <KEYWORD1>class</KEYWORD1>
93                         <KEYWORD1>continue</KEYWORD1>
94                         <KEYWORD1>def</KEYWORD1>
95                         <KEYWORD1>del</KEYWORD1>
96                         <KEYWORD1>elif</KEYWORD1>
97                         <KEYWORD1>else</KEYWORD1>
98                         <KEYWORD1>except</KEYWORD1>
99                         <KEYWORD1>exec</KEYWORD1>
100                         <KEYWORD1>finally</KEYWORD1>
101                         <KEYWORD1>for</KEYWORD1>
102                         <KEYWORD1>from</KEYWORD1>
103                         <KEYWORD1>global</KEYWORD1>
104                         <KEYWORD1>if</KEYWORD1>
105                         <KEYWORD1>import</KEYWORD1>
106                         <KEYWORD1>in</KEYWORD1>
107                         <KEYWORD1>is</KEYWORD1>
108                         <KEYWORD1>lambda</KEYWORD1>
109                         <KEYWORD1>not</KEYWORD1>
110                         <KEYWORD1>or</KEYWORD1>
111                         <KEYWORD1>pass</KEYWORD1>
112                         <KEYWORD1>print</KEYWORD1>
113                         <KEYWORD1>raise</KEYWORD1>
114                         <KEYWORD1>return</KEYWORD1>
115                         <KEYWORD1>reversed</KEYWORD1>
116                         <KEYWORD1>sorted</KEYWORD1>
117                         <KEYWORD1>try</KEYWORD1>
118                         <KEYWORD1>while</KEYWORD1>
119                         <KEYWORD1>with</KEYWORD1>
120                         <KEYWORD1>yield</KEYWORD1>
121                         <KEYWORD1>self</KEYWORD1>
122
123                         <!-- builtins -->
124                         <KEYWORD2>abs</KEYWORD2>
125                         <KEYWORD2>all</KEYWORD2>
126                         <KEYWORD2>any</KEYWORD2>
127                         <KEYWORD2>apply</KEYWORD2>
128                         <KEYWORD2>bool</KEYWORD2>
129                         <KEYWORD2>buffer</KEYWORD2>
130                         <KEYWORD2>callable</KEYWORD2>
131                         <KEYWORD2>chr</KEYWORD2>
132                         <KEYWORD2>classmethod</KEYWORD2>
133                         <KEYWORD2>cmp</KEYWORD2>
134                         <KEYWORD2>coerce</KEYWORD2>
135                         <KEYWORD2>compile</KEYWORD2>
136                         <KEYWORD2>complex</KEYWORD2>
137                         <KEYWORD2>delattr</KEYWORD2>
138                         <KEYWORD2>dict</KEYWORD2>
139                         <KEYWORD2>dir</KEYWORD2>
140                         <KEYWORD2>divmod</KEYWORD2>
141                         <KEYWORD2>enumerate</KEYWORD2>
142                         <KEYWORD2>eval</KEYWORD2>
143                         <KEYWORD2>execfile</KEYWORD2>
144                         <KEYWORD2>file</KEYWORD2>
145                         <KEYWORD2>filter</KEYWORD2>
146                         <KEYWORD2>float</KEYWORD2>
147                         <KEYWORD2>frozenset</KEYWORD2>
148                         <KEYWORD2>getattr</KEYWORD2>
149                         <KEYWORD2>globals</KEYWORD2>
150                         <KEYWORD2>hasattr</KEYWORD2>
151                         <KEYWORD2>hash</KEYWORD2>
152                         <KEYWORD2>hex</KEYWORD2>
153                         <KEYWORD2>id</KEYWORD2>
154                         <KEYWORD2>input</KEYWORD2>
155                         <KEYWORD2>int</KEYWORD2>
156                         <KEYWORD2>intern</KEYWORD2>
157                         <KEYWORD2>isinstance</KEYWORD2>
158                         <KEYWORD2>issubclass</KEYWORD2>
159                         <KEYWORD2>iter</KEYWORD2>
160                         <KEYWORD2>len</KEYWORD2>
161                         <KEYWORD2>list</KEYWORD2>
162                         <KEYWORD2>locals</KEYWORD2>
163                         <KEYWORD2>long</KEYWORD2>
164                         <KEYWORD2>map</KEYWORD2>
165                         <KEYWORD2>max</KEYWORD2>
166                         <KEYWORD2>min</KEYWORD2>
167                         <KEYWORD2>object</KEYWORD2>
168                         <KEYWORD2>oct</KEYWORD2>
169                         <KEYWORD2>open</KEYWORD2>
170                         <KEYWORD2>ord</KEYWORD2>
171                         <KEYWORD2>pow</KEYWORD2>
172                         <KEYWORD2>property</KEYWORD2>
173                         <KEYWORD2>range</KEYWORD2>
174                         <KEYWORD2>raw_input</KEYWORD2>
175                         <KEYWORD2>reduce</KEYWORD2>
176                         <KEYWORD2>reload</KEYWORD2>
177                         <KEYWORD2>repr</KEYWORD2>
178                         <KEYWORD2>round</KEYWORD2>
179                         <KEYWORD2>set</KEYWORD2>
180                         <KEYWORD2>setattr</KEYWORD2>
181                         <KEYWORD2>slice</KEYWORD2>
182                         <KEYWORD2>staticmethod</KEYWORD2>
183                         <KEYWORD2>str</KEYWORD2>
184                         <KEYWORD2>sum</KEYWORD2>
185                         <KEYWORD2>super</KEYWORD2>
186                         <KEYWORD2>tuple</KEYWORD2>
187                         <KEYWORD2>type</KEYWORD2>
188                         <KEYWORD2>unichr</KEYWORD2>
189                         <KEYWORD2>unicode</KEYWORD2>
190                         <KEYWORD2>vars</KEYWORD2>
191                         <KEYWORD2>xrange</KEYWORD2>
192                         <KEYWORD2>zip</KEYWORD2>
193
194                         <!-- exceptions -->
195                         <KEYWORD3>ArithmeticError</KEYWORD3>
196                         <KEYWORD3>AssertionError</KEYWORD3>
197                         <KEYWORD3>AttributeError</KEYWORD3>
198                         <KEYWORD3>DeprecationWarning</KEYWORD3>
199                         <KEYWORD3>EOFError</KEYWORD3>
200                         <KEYWORD3>EnvironmentError</KEYWORD3>
201                         <KEYWORD3>Exception</KEYWORD3>
202                         <KEYWORD3>FloatingPointError</KEYWORD3>
203                         <KEYWORD3>IOError</KEYWORD3>
204                         <KEYWORD3>ImportError</KEYWORD3>
205                         <KEYWORD3>IndentationError</KEYWORD3>
206                         <KEYWORD3>IndexError</KEYWORD3>
207                         <KEYWORD3>KeyError</KEYWORD3>
208                         <KEYWORD3>KeyboardInterrupt</KEYWORD3>
209                         <KEYWORD3>LookupError</KEYWORD3>
210                         <KEYWORD3>MemoryError</KEYWORD3>
211                         <KEYWORD3>NameError</KEYWORD3>
212                         <KEYWORD3>NotImplemented</KEYWORD3>
213                         <KEYWORD3>NotImplementedError</KEYWORD3>
214                         <KEYWORD3>OSError</KEYWORD3>
215                         <KEYWORD3>OverflowError</KEYWORD3>
216                         <KEYWORD3>OverflowWarning</KEYWORD3>
217                         <KEYWORD3>ReferenceError</KEYWORD3>
218                         <KEYWORD3>RuntimeError</KEYWORD3>
219                         <KEYWORD3>RuntimeWarning</KEYWORD3>
220                         <KEYWORD3>StandardError</KEYWORD3>
221                         <KEYWORD3>StopIteration</KEYWORD3>
222                         <KEYWORD3>SyntaxError</KEYWORD3>
223                         <KEYWORD3>SyntaxWarning</KEYWORD3>
224                         <KEYWORD3>SystemError</KEYWORD3>
225                         <KEYWORD3>SystemExit</KEYWORD3>
226                         <KEYWORD3>TabError</KEYWORD3>
227                         <KEYWORD3>TypeError</KEYWORD3>
228                         <KEYWORD3>UnboundLocalError</KEYWORD3>
229                         <KEYWORD3>UnicodeError</KEYWORD3>
230                         <KEYWORD3>UserWarning</KEYWORD3>
231                         <KEYWORD3>ValueError</KEYWORD3>
232                         <KEYWORD3>Warning</KEYWORD3>
233                         <KEYWORD3>WindowsError</KEYWORD3>
234                         <KEYWORD3>ZeroDivisionError</KEYWORD3>
235
236                         <!-- types (from types module) -->
237                         <KEYWORD3>BufferType</KEYWORD3>
238                         <KEYWORD3>BuiltinFunctionType</KEYWORD3>
239                         <KEYWORD3>BuiltinMethodType</KEYWORD3>
240                         <KEYWORD3>ClassType</KEYWORD3>
241                         <KEYWORD3>CodeType</KEYWORD3>
242                         <KEYWORD3>ComplexType</KEYWORD3>
243                         <KEYWORD3>DictProxyType</KEYWORD3>
244                         <KEYWORD3>DictType</KEYWORD3>
245                         <KEYWORD3>DictionaryType</KEYWORD3>
246                         <KEYWORD3>EllipsisType</KEYWORD3>
247                         <KEYWORD3>FileType</KEYWORD3>
248                         <KEYWORD3>FloatType</KEYWORD3>
249                         <KEYWORD3>FrameType</KEYWORD3>
250                         <KEYWORD3>FunctionType</KEYWORD3>
251                         <KEYWORD3>GeneratorType</KEYWORD3>
252                         <KEYWORD3>InstanceType</KEYWORD3>
253                         <KEYWORD3>IntType</KEYWORD3>
254                         <KEYWORD3>LambdaType</KEYWORD3>
255                         <KEYWORD3>ListType</KEYWORD3>
256                         <KEYWORD3>LongType</KEYWORD3>
257                         <KEYWORD3>MethodType</KEYWORD3>
258                         <KEYWORD3>ModuleType</KEYWORD3>
259                         <KEYWORD3>NoneType</KEYWORD3>
260                         <KEYWORD3>ObjectType</KEYWORD3>
261                         <KEYWORD3>SliceType</KEYWORD3>
262                         <KEYWORD3>StringType</KEYWORD3>
263                         <KEYWORD3>StringTypes</KEYWORD3>
264                         <KEYWORD3>TracebackType</KEYWORD3>
265                         <KEYWORD3>TupleType</KEYWORD3>
266                         <KEYWORD3>TypeType</KEYWORD3>
267                         <KEYWORD3>UnboundMethodType</KEYWORD3>
268                         <KEYWORD3>UnicodeType</KEYWORD3>
269                         <KEYWORD3>XRangeType</KEYWORD3>
270
271                         <KEYWORD3>False</KEYWORD3>
272                         <KEYWORD3>None</KEYWORD3>
273                         <KEYWORD3>True</KEYWORD3>
274
275                         <KEYWORD3>__abs__</KEYWORD3>
276                         <KEYWORD3>__add__</KEYWORD3>
277                         <KEYWORD3>__all__</KEYWORD3>
278                         <KEYWORD3>__author__</KEYWORD3>
279                         <KEYWORD3>__bases__</KEYWORD3>
280                         <KEYWORD3>__builtins__</KEYWORD3>
281                         <KEYWORD3>__call__</KEYWORD3>
282                         <KEYWORD3>__class__</KEYWORD3>
283                         <KEYWORD3>__cmp__</KEYWORD3>
284                         <KEYWORD3>__coerce__</KEYWORD3>
285                         <KEYWORD3>__contains__</KEYWORD3>
286                         <KEYWORD3>__debug__</KEYWORD3>
287                         <KEYWORD3>__del__</KEYWORD3>
288                         <KEYWORD3>__delattr__</KEYWORD3>
289                         <KEYWORD3>__delitem__</KEYWORD3>
290                         <KEYWORD3>__delslice__</KEYWORD3>
291                         <KEYWORD3>__dict__</KEYWORD3>
292                         <KEYWORD3>__div__</KEYWORD3>
293                         <KEYWORD3>__divmod__</KEYWORD3>
294                         <KEYWORD3>__doc__</KEYWORD3>
295                         <KEYWORD3>__docformat__</KEYWORD3>
296                         <KEYWORD3>__eq__</KEYWORD3>
297                         <KEYWORD3>__file__</KEYWORD3>
298                         <KEYWORD3>__float__</KEYWORD3>
299                         <KEYWORD3>__floordiv__</KEYWORD3>
300                         <KEYWORD3>__future__</KEYWORD3>
301                         <KEYWORD3>__ge__</KEYWORD3>
302                         <KEYWORD3>__getattr__</KEYWORD3>
303                         <KEYWORD3>__getattribute__</KEYWORD3>
304                         <KEYWORD3>__getitem__</KEYWORD3>
305                         <KEYWORD3>__getslice__</KEYWORD3>
306                         <KEYWORD3>__gt__</KEYWORD3>
307                         <KEYWORD3>__hash__</KEYWORD3>
308                         <KEYWORD3>__hex__</KEYWORD3>
309                         <KEYWORD3>__iadd__</KEYWORD3>
310                         <KEYWORD3>__import__</KEYWORD3>
311                         <KEYWORD3>__imul__</KEYWORD3>
312                         <KEYWORD3>__init__</KEYWORD3>
313                         <KEYWORD3>__int__</KEYWORD3>
314                         <KEYWORD3>__invert__</KEYWORD3>
315                         <KEYWORD3>__iter__</KEYWORD3>
316                         <KEYWORD3>__le__</KEYWORD3>
317                         <KEYWORD3>__len__</KEYWORD3>
318                         <KEYWORD3>__long__</KEYWORD3>
319                         <KEYWORD3>__lshift__</KEYWORD3>
320                         <KEYWORD3>__lt__</KEYWORD3>
321                         <KEYWORD3>__members__</KEYWORD3>
322                         <KEYWORD3>__metaclass__</KEYWORD3>
323                         <KEYWORD3>__mod__</KEYWORD3>
324                         <KEYWORD3>__mro__</KEYWORD3>
325                         <KEYWORD3>__mul__</KEYWORD3>
326                         <KEYWORD3>__name__</KEYWORD3>
327                         <KEYWORD3>__ne__</KEYWORD3>
328                         <KEYWORD3>__neg__</KEYWORD3>
329                         <KEYWORD3>__new__</KEYWORD3>
330                         <KEYWORD3>__nonzero__</KEYWORD3>
331                         <KEYWORD3>__oct__</KEYWORD3>
332                         <KEYWORD3>__or__</KEYWORD3>
333                         <KEYWORD3>__path__</KEYWORD3>
334                         <KEYWORD3>__pos__</KEYWORD3>
335                         <KEYWORD3>__pow__</KEYWORD3>
336                         <KEYWORD3>__radd__</KEYWORD3>
337                         <KEYWORD3>__rdiv__</KEYWORD3>
338                         <KEYWORD3>__rdivmod__</KEYWORD3>
339                         <KEYWORD3>__reduce__</KEYWORD3>
340                         <KEYWORD3>__repr__</KEYWORD3>
341                         <KEYWORD3>__rfloordiv__</KEYWORD3>
342                         <KEYWORD3>__rlshift__</KEYWORD3>
343                         <KEYWORD3>__rmod__</KEYWORD3>
344                         <KEYWORD3>__rmul__</KEYWORD3>
345                         <KEYWORD3>__ror__</KEYWORD3>
346                         <KEYWORD3>__rpow__</KEYWORD3>
347                         <KEYWORD3>__rrshift__</KEYWORD3>
348                         <KEYWORD3>__rsub__</KEYWORD3>
349                         <KEYWORD3>__rtruediv__</KEYWORD3>
350                         <KEYWORD3>__rxor__</KEYWORD3>
351                         <KEYWORD3>__setattr__</KEYWORD3>
352                         <KEYWORD3>__setitem__</KEYWORD3>
353                         <KEYWORD3>__setslice__</KEYWORD3>
354                         <KEYWORD3>__self__</KEYWORD3>
355                         <KEYWORD3>__slots__</KEYWORD3>
356                         <KEYWORD3>__str__</KEYWORD3>
357                         <KEYWORD3>__sub__</KEYWORD3>
358                         <KEYWORD3>__truediv__</KEYWORD3>
359                         <KEYWORD3>__version__</KEYWORD3>
360                         <KEYWORD3>__xor__</KEYWORD3>
361                 </KEYWORDS>
362         </RULES>
363
364         <!-- rulesets to syntax highlight string interpolation sequences -->
365         <RULES SET="LITERAL_ONE" DEFAULT="LITERAL1" ESCAPE="\">
366                 <SEQ_REGEXP HASH_CHAR="%" TYPE="LITERAL4">%[.]?\d*[diouxXeEfFgGcrs]</SEQ_REGEXP>
367                 <SEQ_REGEXP HASH_CHAR="%(" TYPE="LITERAL4">%\([^)]+\)[+ -]?\d*[diouxXeEfFgGcrs]</SEQ_REGEXP>
368         </RULES>
369         <!-- triple-quoted strings has its own, since it's LITERAL2 by default -->
370         <RULES SET="LITERAL_TWO" DEFAULT="LITERAL2" ESCAPE="\">
371                 <SEQ_REGEXP HASH_CHAR="%" TYPE="LITERAL4">%\d*[diouxXeEfFgGcrs]</SEQ_REGEXP>
372                 <SEQ_REGEXP HASH_CHAR="%(" TYPE="LITERAL4">%\([^)]+\)[+ -]?\d*[diouxXeEfFgGcrs]</SEQ_REGEXP>
373                 <SPAN TYPE="LITERAL3">
374                         <BEGIN>B{</BEGIN>
375                         <END>}</END>
376                 </SPAN>
377                 <SPAN TYPE="LITERAL3">
378                         <BEGIN>C{</BEGIN>
379                         <END>}</END>
380                 </SPAN>
381                 <SPAN TYPE="LITERAL3">
382                         <BEGIN>E{</BEGIN>
383                         <END>}</END>
384                 </SPAN>
385                 <SPAN TYPE="LITERAL3">
386                         <BEGIN>I{</BEGIN>
387                         <END>}</END>
388                 </SPAN>
389                 <SPAN TYPE="LITERAL3">
390                         <BEGIN>L{</BEGIN>
391                         <END>}</END>
392                 </SPAN>
393                 <!--
394                 <EOL_SPAN AT_WHITESPACE_END="TRUE" DELEGATE="python::MAIN" TYPE="LITERAL3">&gt;&gt;&gt;</EOL_SPAN>
395                 <EOL_SPAN AT_WHITESPACE_END="TRUE" DELEGATE="python::MAIN" TYPE="LITERAL3">...</EOL_SPAN>
396                 -->
397                 <EOL_SPAN AT_WHITESPACE_END="TRUE" TYPE="LITERAL3">&gt;&gt;&gt;</EOL_SPAN>
398                 <EOL_SPAN AT_WHITESPACE_END="TRUE" TYPE="LITERAL3">...</EOL_SPAN>
399                 <MARK_FOLLOWING TYPE="LITERAL3" AT_WHITESPACE_END="TRUE">@</MARK_FOLLOWING>
400         </RULES>
401 </MODE>
402