~ubuntu-branches/ubuntu/natty/moin/natty-updates

« back to all changes in this revision

Viewing changes to MoinMoin/support/pygments/lexers/other.py

  • Committer: Bazaar Package Importer
  • Author(s): Jonas Smedegaard
  • Date: 2008-06-22 21:17:13 UTC
  • mto: This revision was merged to the branch mainline in revision 18.
  • Revision ID: james.westby@ubuntu.com-20080622211713-inlv5k4eifxckelr
Import upstream version 1.7.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# -*- coding: utf-8 -*-
2
 
"""
3
 
    pygments.lexers.other
4
 
    ~~~~~~~~~~~~~~~~~~~~~
5
 
 
6
 
    Lexers for other languages.
7
 
 
8
 
    :copyright: Copyright 2006-2010 by the Pygments team, see AUTHORS.
9
 
    :license: BSD, see LICENSE for details.
10
 
"""
11
 
 
12
 
import re
13
 
 
14
 
from pygments.lexer import Lexer, RegexLexer, include, bygroups, using, \
15
 
     this, do_insertions
16
 
from pygments.token import Error, Punctuation, \
17
 
     Text, Comment, Operator, Keyword, Name, String, Number, Generic
18
 
from pygments.util import shebang_matches
19
 
from pygments.lexers.web import HtmlLexer
20
 
 
21
 
 
22
 
__all__ = ['SqlLexer', 'MySqlLexer', 'SqliteConsoleLexer', 'BrainfuckLexer',
23
 
           'BashLexer', 'BatchLexer', 'BefungeLexer', 'RedcodeLexer',
24
 
           'MOOCodeLexer', 'SmalltalkLexer', 'TcshLexer', 'LogtalkLexer',
25
 
           'GnuplotLexer', 'PovrayLexer', 'AppleScriptLexer',
26
 
           'BashSessionLexer', 'ModelicaLexer', 'RebolLexer', 'ABAPLexer',
27
 
           'NewspeakLexer', 'GherkinLexer', 'AsymptoteLexer']
28
 
 
29
 
line_re  = re.compile('.*?\n')
30
 
 
31
 
 
32
 
class SqlLexer(RegexLexer):
33
 
    """
34
 
    Lexer for Structured Query Language. Currently, this lexer does
35
 
    not recognize any special syntax except ANSI SQL.
36
 
    """
37
 
 
38
 
    name = 'SQL'
39
 
    aliases = ['sql']
40
 
    filenames = ['*.sql']
41
 
    mimetypes = ['text/x-sql']
42
 
 
43
 
    flags = re.IGNORECASE
44
 
    tokens = {
45
 
        'root': [
46
 
            (r'\s+', Text),
47
 
            (r'--.*?\n', Comment.Single),
48
 
            (r'/\*', Comment.Multiline, 'multiline-comments'),
49
 
            (r'(ABORT|ABS|ABSOLUTE|ACCESS|ADA|ADD|ADMIN|AFTER|AGGREGATE|'
50
 
             r'ALIAS|ALL|ALLOCATE|ALTER|ANALYSE|ANALYZE|AND|ANY|ARE|AS|'
51
 
             r'ASC|ASENSITIVE|ASSERTION|ASSIGNMENT|ASYMMETRIC|AT|ATOMIC|'
52
 
             r'AUTHORIZATION|AVG|BACKWARD|BEFORE|BEGIN|BETWEEN|BITVAR|'
53
 
             r'BIT_LENGTH|BOTH|BREADTH|BY|C|CACHE|CALL|CALLED|CARDINALITY|'
54
 
             r'CASCADE|CASCADED|CASE|CAST|CATALOG|CATALOG_NAME|CHAIN|'
55
 
             r'CHARACTERISTICS|CHARACTER_LENGTH|CHARACTER_SET_CATALOG|'
56
 
             r'CHARACTER_SET_NAME|CHARACTER_SET_SCHEMA|CHAR_LENGTH|CHECK|'
57
 
             r'CHECKED|CHECKPOINT|CLASS|CLASS_ORIGIN|CLOB|CLOSE|CLUSTER|'
58
 
             r'COALSECE|COBOL|COLLATE|COLLATION|COLLATION_CATALOG|'
59
 
             r'COLLATION_NAME|COLLATION_SCHEMA|COLUMN|COLUMN_NAME|'
60
 
             r'COMMAND_FUNCTION|COMMAND_FUNCTION_CODE|COMMENT|COMMIT|'
61
 
             r'COMMITTED|COMPLETION|CONDITION_NUMBER|CONNECT|CONNECTION|'
62
 
             r'CONNECTION_NAME|CONSTRAINT|CONSTRAINTS|CONSTRAINT_CATALOG|'
63
 
             r'CONSTRAINT_NAME|CONSTRAINT_SCHEMA|CONSTRUCTOR|CONTAINS|'
64
 
             r'CONTINUE|CONVERSION|CONVERT|COPY|CORRESPONTING|COUNT|'
65
 
             r'CREATE|CREATEDB|CREATEUSER|CROSS|CUBE|CURRENT|CURRENT_DATE|'
66
 
             r'CURRENT_PATH|CURRENT_ROLE|CURRENT_TIME|CURRENT_TIMESTAMP|'
67
 
             r'CURRENT_USER|CURSOR|CURSOR_NAME|CYCLE|DATA|DATABASE|'
68
 
             r'DATETIME_INTERVAL_CODE|DATETIME_INTERVAL_PRECISION|DAY|'
69
 
             r'DEALLOCATE|DECLARE|DEFAULT|DEFAULTS|DEFERRABLE|DEFERRED|'
70
 
             r'DEFINED|DEFINER|DELETE|DELIMITER|DELIMITERS|DEREF|DESC|'
71
 
             r'DESCRIBE|DESCRIPTOR|DESTROY|DESTRUCTOR|DETERMINISTIC|'
72
 
             r'DIAGNOSTICS|DICTIONARY|DISCONNECT|DISPATCH|DISTINCT|DO|'
73
 
             r'DOMAIN|DROP|DYNAMIC|DYNAMIC_FUNCTION|DYNAMIC_FUNCTION_CODE|'
74
 
             r'EACH|ELSE|ENCODING|ENCRYPTED|END|END-EXEC|EQUALS|ESCAPE|EVERY|'
75
 
             r'EXCEPT|ESCEPTION|EXCLUDING|EXCLUSIVE|EXEC|EXECUTE|EXISTING|'
76
 
             r'EXISTS|EXPLAIN|EXTERNAL|EXTRACT|FALSE|FETCH|FINAL|FIRST|FOR|'
77
 
             r'FORCE|FOREIGN|FORTRAN|FORWARD|FOUND|FREE|FREEZE|FROM|FULL|'
78
 
             r'FUNCTION|G|GENERAL|GENERATED|GET|GLOBAL|GO|GOTO|GRANT|GRANTED|'
79
 
             r'GROUP|GROUPING|HANDLER|HAVING|HIERARCHY|HOLD|HOST|IDENTITY|'
80
 
             r'IGNORE|ILIKE|IMMEDIATE|IMMUTABLE|IMPLEMENTATION|IMPLICIT|IN|'
81
 
             r'INCLUDING|INCREMENT|INDEX|INDITCATOR|INFIX|INHERITS|INITIALIZE|'
82
 
             r'INITIALLY|INNER|INOUT|INPUT|INSENSITIVE|INSERT|INSTANTIABLE|'
83
 
             r'INSTEAD|INTERSECT|INTO|INVOKER|IS|ISNULL|ISOLATION|ITERATE|JOIN|'
84
 
             r'KEY|KEY_MEMBER|KEY_TYPE|LANCOMPILER|LANGUAGE|LARGE|LAST|'
85
 
             r'LATERAL|LEADING|LEFT|LENGTH|LESS|LEVEL|LIKE|LIMIT|LISTEN|LOAD|'
86
 
             r'LOCAL|LOCALTIME|LOCALTIMESTAMP|LOCATION|LOCATOR|LOCK|LOWER|'
87
 
             r'MAP|MATCH|MAX|MAXVALUE|MESSAGE_LENGTH|MESSAGE_OCTET_LENGTH|'
88
 
             r'MESSAGE_TEXT|METHOD|MIN|MINUTE|MINVALUE|MOD|MODE|MODIFIES|'
89
 
             r'MODIFY|MONTH|MORE|MOVE|MUMPS|NAMES|NATIONAL|NATURAL|NCHAR|'
90
 
             r'NCLOB|NEW|NEXT|NO|NOCREATEDB|NOCREATEUSER|NONE|NOT|NOTHING|'
91
 
             r'NOTIFY|NOTNULL|NULL|NULLABLE|NULLIF|OBJECT|OCTET_LENGTH|OF|OFF|'
92
 
             r'OFFSET|OIDS|OLD|ON|ONLY|OPEN|OPERATION|OPERATOR|OPTION|OPTIONS|'
93
 
             r'OR|ORDER|ORDINALITY|OUT|OUTER|OUTPUT|OVERLAPS|OVERLAY|OVERRIDING|'
94
 
             r'OWNER|PAD|PARAMETER|PARAMETERS|PARAMETER_MODE|PARAMATER_NAME|'
95
 
             r'PARAMATER_ORDINAL_POSITION|PARAMETER_SPECIFIC_CATALOG|'
96
 
             r'PARAMETER_SPECIFIC_NAME|PARAMATER_SPECIFIC_SCHEMA|PARTIAL|'
97
 
             r'PASCAL|PENDANT|PLACING|PLI|POSITION|POSTFIX|PRECISION|PREFIX|'
98
 
             r'PREORDER|PREPARE|PRESERVE|PRIMARY|PRIOR|PRIVILEGES|PROCEDURAL|'
99
 
             r'PROCEDURE|PUBLIC|READ|READS|RECHECK|RECURSIVE|REF|REFERENCES|'
100
 
             r'REFERENCING|REINDEX|RELATIVE|RENAME|REPEATABLE|REPLACE|RESET|'
101
 
             r'RESTART|RESTRICT|RESULT|RETURN|RETURNED_LENGTH|'
102
 
             r'RETURNED_OCTET_LENGTH|RETURNED_SQLSTATE|RETURNS|REVOKE|RIGHT|'
103
 
             r'ROLE|ROLLBACK|ROLLUP|ROUTINE|ROUTINE_CATALOG|ROUTINE_NAME|'
104
 
             r'ROUTINE_SCHEMA|ROW|ROWS|ROW_COUNT|RULE|SAVE_POINT|SCALE|SCHEMA|'
105
 
             r'SCHEMA_NAME|SCOPE|SCROLL|SEARCH|SECOND|SECURITY|SELECT|SELF|'
106
 
             r'SENSITIVE|SERIALIZABLE|SERVER_NAME|SESSION|SESSION_USER|SET|'
107
 
             r'SETOF|SETS|SHARE|SHOW|SIMILAR|SIMPLE|SIZE|SOME|SOURCE|SPACE|'
108
 
             r'SPECIFIC|SPECIFICTYPE|SPECIFIC_NAME|SQL|SQLCODE|SQLERROR|'
109
 
             r'SQLEXCEPTION|SQLSTATE|SQLWARNINIG|STABLE|START|STATE|STATEMENT|'
110
 
             r'STATIC|STATISTICS|STDIN|STDOUT|STORAGE|STRICT|STRUCTURE|STYPE|'
111
 
             r'SUBCLASS_ORIGIN|SUBLIST|SUBSTRING|SUM|SYMMETRIC|SYSID|SYSTEM|'
112
 
             r'SYSTEM_USER|TABLE|TABLE_NAME| TEMP|TEMPLATE|TEMPORARY|TERMINATE|'
113
 
             r'THAN|THEN|TIMESTAMP|TIMEZONE_HOUR|TIMEZONE_MINUTE|TO|TOAST|'
114
 
             r'TRAILING|TRANSATION|TRANSACTIONS_COMMITTED|'
115
 
             r'TRANSACTIONS_ROLLED_BACK|TRANSATION_ACTIVE|TRANSFORM|'
116
 
             r'TRANSFORMS|TRANSLATE|TRANSLATION|TREAT|TRIGGER|TRIGGER_CATALOG|'
117
 
             r'TRIGGER_NAME|TRIGGER_SCHEMA|TRIM|TRUE|TRUNCATE|TRUSTED|TYPE|'
118
 
             r'UNCOMMITTED|UNDER|UNENCRYPTED|UNION|UNIQUE|UNKNOWN|UNLISTEN|'
119
 
             r'UNNAMED|UNNEST|UNTIL|UPDATE|UPPER|USAGE|USER|'
120
 
             r'USER_DEFINED_TYPE_CATALOG|USER_DEFINED_TYPE_NAME|'
121
 
             r'USER_DEFINED_TYPE_SCHEMA|USING|VACUUM|VALID|VALIDATOR|VALUES|'
122
 
             r'VARIABLE|VERBOSE|VERSION|VIEW|VOLATILE|WHEN|WHENEVER|WHERE|'
123
 
             r'WITH|WITHOUT|WORK|WRITE|YEAR|ZONE)\b', Keyword),
124
 
            (r'(ARRAY|BIGINT|BINARY|BIT|BLOB|BOOLEAN|CHAR|CHARACTER|DATE|'
125
 
             r'DEC|DECIMAL|FLOAT|INT|INTEGER|INTERVAL|NUMBER|NUMERIC|REAL|'
126
 
             r'SERIAL|SMALLINT|VARCHAR|VARYING|INT8|SERIAL8|TEXT)\b',
127
 
             Name.Builtin),
128
 
            (r'[+*/<>=~!@#%^&|`?^-]', Operator),
129
 
            (r'[0-9]+', Number.Integer),
130
 
            # TODO: Backslash escapes?
131
 
            (r"'(''|[^'])*'", String.Single),
132
 
            (r'"(""|[^"])*"', String.Symbol), # not a real string literal in ANSI SQL
133
 
            (r'[a-zA-Z_][a-zA-Z0-9_]*', Name),
134
 
            (r'[;:()\[\],\.]', Punctuation)
135
 
        ],
136
 
        'multiline-comments': [
137
 
            (r'/\*', Comment.Multiline, 'multiline-comments'),
138
 
            (r'\*/', Comment.Multiline, '#pop'),
139
 
            (r'[^/\*]+', Comment.Multiline),
140
 
            (r'[/*]', Comment.Multiline)
141
 
        ]
142
 
    }
143
 
 
144
 
 
145
 
class MySqlLexer(RegexLexer):
146
 
    """
147
 
    Special lexer for MySQL.
148
 
    """
149
 
 
150
 
    name = 'MySQL'
151
 
    aliases = ['mysql']
152
 
    mimetypes = ['text/x-mysql']
153
 
 
154
 
    flags = re.IGNORECASE
155
 
    tokens = {
156
 
        'root': [
157
 
            (r'\s+', Text),
158
 
            (r'(#|--\s+).*?\n', Comment.Single),
159
 
            (r'/\*', Comment.Multiline, 'multiline-comments'),
160
 
            (r'[0-9]+', Number.Integer),
161
 
            (r'[0-9]*\.[0-9]+(e[+-][0-9]+)', Number.Float),
162
 
            # TODO: add backslash escapes
163
 
            (r"'(''|[^'])*'", String.Single),
164
 
            (r'"(""|[^"])*"', String.Double),
165
 
            (r"`(``|[^`])*`", String.Symbol),
166
 
            (r'[+*/<>=~!@#%^&|`?^-]', Operator),
167
 
            (r'\b(tinyint|smallint|mediumint|int|integer|bigint|date|'
168
 
             r'datetime|time|bit|bool|tinytext|mediumtext|longtext|text|'
169
 
             r'tinyblob|mediumblob|longblob|blob|float|double|double\s+'
170
 
             r'precision|real|numeric|dec|decimal|timestamp|year|char|'
171
 
             r'varchar|varbinary|varcharacter|enum|set)(\b\s*)(\()?',
172
 
             bygroups(Keyword.Type, Text, Punctuation)),
173
 
            (r'\b(add|all|alter|analyze|and|as|asc|asensitive|before|between|'
174
 
             r'bigint|binary|blob|both|by|call|cascade|case|change|char|'
175
 
             r'character|check|collate|column|condition|constraint|continue|'
176
 
             r'convert|create|cross|current_date|current_time|'
177
 
             r'current_timestamp|current_user|cursor|database|databases|'
178
 
             r'day_hour|day_microsecond|day_minute|day_second|dec|decimal|'
179
 
             r'declare|default|delayed|delete|desc|describe|deterministic|'
180
 
             r'distinct|distinctrow|div|double|drop|dual|each|else|elseif|'
181
 
             r'enclosed|escaped|exists|exit|explain|fetch|float|float4|float8'
182
 
             r'|for|force|foreign|from|fulltext|grant|group|having|'
183
 
             r'high_priority|hour_microsecond|hour_minute|hour_second|if|'
184
 
             r'ignore|in|index|infile|inner|inout|insensitive|insert|int|'
185
 
             r'int1|int2|int3|int4|int8|integer|interval|into|is|iterate|'
186
 
             r'join|key|keys|kill|leading|leave|left|like|limit|lines|load|'
187
 
             r'localtime|localtimestamp|lock|long|loop|low_priority|match|'
188
 
             r'minute_microsecond|minute_second|mod|modifies|natural|'
189
 
             r'no_write_to_binlog|not|numeric|on|optimize|option|optionally|'
190
 
             r'or|order|out|outer|outfile|precision|primary|procedure|purge|'
191
 
             r'raid0|read|reads|real|references|regexp|release|rename|repeat|'
192
 
             r'replace|require|restrict|return|revoke|right|rlike|schema|'
193
 
             r'schemas|second_microsecond|select|sensitive|separator|set|'
194
 
             r'show|smallint|soname|spatial|specific|sql|sql_big_result|'
195
 
             r'sql_calc_found_rows|sql_small_result|sqlexception|sqlstate|'
196
 
             r'sqlwarning|ssl|starting|straight_join|table|terminated|then|'
197
 
             r'to|trailing|trigger|undo|union|unique|unlock|unsigned|update|'
198
 
             r'usage|use|using|utc_date|utc_time|utc_timestamp|values|'
199
 
             r'varying|when|where|while|with|write|x509|xor|year_month|'
200
 
             r'zerofill)\b', Keyword),
201
 
            # TODO: this list is not complete
202
 
            (r'\b(auto_increment|engine|charset|tables)\b', Keyword.Pseudo),
203
 
            (r'(true|false|null)', Name.Constant),
204
 
            (r'([a-zA-Z_][a-zA-Z0-9_]*)(\s*)(\()',
205
 
             bygroups(Name.Function, Text, Punctuation)),
206
 
            (r'[a-zA-Z_][a-zA-Z0-9_]*', Name),
207
 
            (r'@[A-Za-z0-9]*[._]*[A-Za-z0-9]*', Name.Variable),
208
 
            (r'[;:()\[\],\.]', Punctuation)
209
 
        ],
210
 
        'multiline-comments': [
211
 
            (r'/\*', Comment.Multiline, 'multiline-comments'),
212
 
            (r'\*/', Comment.Multiline, '#pop'),
213
 
            (r'[^/\*]+', Comment.Multiline),
214
 
            (r'[/*]', Comment.Multiline)
215
 
        ]
216
 
    }
217
 
 
218
 
 
219
 
class SqliteConsoleLexer(Lexer):
220
 
    """
221
 
    Lexer for example sessions using sqlite3.
222
 
 
223
 
    *New in Pygments 0.11.*
224
 
    """
225
 
 
226
 
    name = 'sqlite3con'
227
 
    aliases = ['sqlite3']
228
 
    filenames = ['*.sqlite3-console']
229
 
    mimetypes = ['text/x-sqlite3-console']
230
 
 
231
 
    def get_tokens_unprocessed(self, data):
232
 
        sql = SqlLexer(**self.options)
233
 
 
234
 
        curcode = ''
235
 
        insertions = []
236
 
        for match in line_re.finditer(data):
237
 
            line = match.group()
238
 
            if line.startswith('sqlite> ') or line.startswith('   ...> '):
239
 
                insertions.append((len(curcode),
240
 
                                   [(0, Generic.Prompt, line[:8])]))
241
 
                curcode += line[8:]
242
 
            else:
243
 
                if curcode:
244
 
                    for item in do_insertions(insertions,
245
 
                                              sql.get_tokens_unprocessed(curcode)):
246
 
                        yield item
247
 
                    curcode = ''
248
 
                    insertions = []
249
 
                if line.startswith('SQL error: '):
250
 
                    yield (match.start(), Generic.Traceback, line)
251
 
                else:
252
 
                    yield (match.start(), Generic.Output, line)
253
 
        if curcode:
254
 
            for item in do_insertions(insertions,
255
 
                                      sql.get_tokens_unprocessed(curcode)):
256
 
                yield item
257
 
 
258
 
 
259
 
class BrainfuckLexer(RegexLexer):
260
 
    """
261
 
    Lexer for the esoteric `BrainFuck <http://www.muppetlabs.com/~breadbox/bf/>`_
262
 
    language.
263
 
    """
264
 
 
265
 
    name = 'Brainfuck'
266
 
    aliases = ['brainfuck', 'bf']
267
 
    filenames = ['*.bf', '*.b']
268
 
    mimetypes = ['application/x-brainfuck']
269
 
 
270
 
    tokens = {
271
 
        'common': [
272
 
            # use different colors for different instruction types
273
 
            (r'[.,]+', Name.Tag),
274
 
            (r'[+-]+', Name.Builtin),
275
 
            (r'[<>]+', Name.Variable),
276
 
            (r'[^.,+\-<>\[\]]+', Comment),
277
 
        ],
278
 
        'root': [
279
 
            (r'\[', Keyword, 'loop'),
280
 
            (r'\]', Error),
281
 
            include('common'),
282
 
        ],
283
 
        'loop': [
284
 
            (r'\[', Keyword, '#push'),
285
 
            (r'\]', Keyword, '#pop'),
286
 
            include('common'),
287
 
        ]
288
 
    }
289
 
 
290
 
 
291
 
class BefungeLexer(RegexLexer):
292
 
    """
293
 
    Lexer for the esoteric `Befunge <http://en.wikipedia.org/wiki/Befunge>`_
294
 
    language.
295
 
 
296
 
    *New in Pygments 0.7.*
297
 
    """
298
 
    name = 'Befunge'
299
 
    aliases = ['befunge']
300
 
    filenames = ['*.befunge']
301
 
    mimetypes = ['application/x-befunge']
302
 
 
303
 
    tokens = {
304
 
        'root': [
305
 
            (r'[0-9a-f]', Number),
306
 
            (r'[\+\*/%!`-]', Operator), # Traditional math
307
 
            (r'[<>^v?\[\]rxjk]', Name.Variable), # Move, imperatives
308
 
            (r'[:\\$.,n]', Name.Builtin), # Stack ops, imperatives
309
 
            (r'[|_mw]', Keyword),
310
 
            (r'[{}]', Name.Tag), # Befunge-98 stack ops
311
 
            (r'".*?"', String.Double), # Strings don't appear to allow escapes
312
 
            (r'\'.', String.Single), # Single character
313
 
            (r'[#;]', Comment), # Trampoline... depends on direction hit
314
 
            (r'[pg&~=@iotsy]', Keyword), # Misc
315
 
            (r'[()A-Z]', Comment), # Fingerprints
316
 
            (r'\s+', Text), # Whitespace doesn't matter
317
 
        ],
318
 
    }
319
 
 
320
 
 
321
 
 
322
 
class BashLexer(RegexLexer):
323
 
    """
324
 
    Lexer for (ba|k|)sh shell scripts.
325
 
 
326
 
    *New in Pygments 0.6.*
327
 
    """
328
 
 
329
 
    name = 'Bash'
330
 
    aliases = ['bash', 'sh', 'ksh']
331
 
    filenames = ['*.sh', '*.ksh', '*.bash', '*.ebuild', '*.eclass']
332
 
    mimetypes = ['application/x-sh', 'application/x-shellscript']
333
 
 
334
 
    tokens = {
335
 
        'root': [
336
 
            include('basic'),
337
 
            (r'\$\(\(', Keyword, 'math'),
338
 
            (r'\$\(', Keyword, 'paren'),
339
 
            (r'\${#?', Keyword, 'curly'),
340
 
            (r'`', String.Backtick, 'backticks'),
341
 
            include('data'),
342
 
        ],
343
 
        'basic': [
344
 
            (r'\b(if|fi|else|while|do|done|for|then|return|function|case|'
345
 
             r'select|continue|until|esac|elif)\s*\b',
346
 
             Keyword),
347
 
            (r'\b(alias|bg|bind|break|builtin|caller|cd|command|compgen|'
348
 
             r'complete|declare|dirs|disown|echo|enable|eval|exec|exit|'
349
 
             r'export|false|fc|fg|getopts|hash|help|history|jobs|kill|let|'
350
 
             r'local|logout|popd|printf|pushd|pwd|read|readonly|set|shift|'
351
 
             r'shopt|source|suspend|test|time|times|trap|true|type|typeset|'
352
 
             r'ulimit|umask|unalias|unset|wait)\s*\b(?!\.)',
353
 
             Name.Builtin),
354
 
            (r'#.*\n', Comment),
355
 
            (r'\\[\w\W]', String.Escape),
356
 
            (r'(\b\w+)(\s*)(=)', bygroups(Name.Variable, Text, Operator)),
357
 
            (r'[\[\]{}()=]', Operator),
358
 
            (r'<<\s*(\'?)\\?(\w+)[\w\W]+?\2', String),
359
 
            (r'&&|\|\|', Operator),
360
 
        ],
361
 
        'data': [
362
 
            (r'(?s)\$?"(\\\\|\\[0-7]+|\\.|[^"\\])*"', String.Double),
363
 
            (r"(?s)\$?'(\\\\|\\[0-7]+|\\.|[^'\\])*'", String.Single),
364
 
            (r';', Text),
365
 
            (r'\s+', Text),
366
 
            (r'[^=\s\n\[\]{}()$"\'`\\<]+', Text),
367
 
            (r'\d+(?= |\Z)', Number),
368
 
            (r'\$#?(\w+|.)', Name.Variable),
369
 
            (r'<', Text),
370
 
        ],
371
 
        'curly': [
372
 
            (r'}', Keyword, '#pop'),
373
 
            (r':-', Keyword),
374
 
            (r'[a-zA-Z0-9_]+', Name.Variable),
375
 
            (r'[^}:"\'`$]+', Punctuation),
376
 
            (r':', Punctuation),
377
 
            include('root'),
378
 
        ],
379
 
        'paren': [
380
 
            (r'\)', Keyword, '#pop'),
381
 
            include('root'),
382
 
        ],
383
 
        'math': [
384
 
            (r'\)\)', Keyword, '#pop'),
385
 
            (r'[-+*/%^|&]|\*\*|\|\|', Operator),
386
 
            (r'\d+', Number),
387
 
            include('root'),
388
 
        ],
389
 
        'backticks': [
390
 
            (r'`', String.Backtick, '#pop'),
391
 
            include('root'),
392
 
        ],
393
 
    }
394
 
 
395
 
    def analyse_text(text):
396
 
        return shebang_matches(text, r'(ba|z|)sh')
397
 
 
398
 
 
399
 
class BashSessionLexer(Lexer):
400
 
    """
401
 
    Lexer for simplistic shell sessions.
402
 
 
403
 
    *New in Pygments 1.1.*
404
 
    """
405
 
 
406
 
    name = 'Bash Session'
407
 
    aliases = ['console']
408
 
    filenames = ['*.sh-session']
409
 
    mimetypes = ['application/x-shell-session']
410
 
 
411
 
    def get_tokens_unprocessed(self, text):
412
 
        bashlexer = BashLexer(**self.options)
413
 
 
414
 
        pos = 0
415
 
        curcode = ''
416
 
        insertions = []
417
 
 
418
 
        for match in line_re.finditer(text):
419
 
            line = match.group()
420
 
            m = re.match(r'^((?:|sh\S*?|\w+\S+[@:]\S+(?:\s+\S+)?|\[\S+[@:]'
421
 
                         r'[^\n]+\].+)[$#%])(.*\n?)', line)
422
 
            if m:
423
 
                # To support output lexers (say diff output), the output
424
 
                # needs to be broken by prompts whenever the output lexer
425
 
                # changes.
426
 
                if not insertions:
427
 
                    pos = match.start()
428
 
 
429
 
                insertions.append((len(curcode),
430
 
                                   [(0, Generic.Prompt, m.group(1))]))
431
 
                curcode += m.group(2)
432
 
            elif line.startswith('>'):
433
 
                insertions.append((len(curcode),
434
 
                                   [(0, Generic.Prompt, line[:1])]))
435
 
                curcode += line[1:]
436
 
            else:
437
 
                if insertions:
438
 
                    toks = bashlexer.get_tokens_unprocessed(curcode)
439
 
                    for i, t, v in do_insertions(insertions, toks):
440
 
                        yield pos+i, t, v
441
 
                yield match.start(), Generic.Output, line
442
 
                insertions = []
443
 
                curcode = ''
444
 
        if insertions:
445
 
            for i, t, v in do_insertions(insertions,
446
 
                                         bashlexer.get_tokens_unprocessed(curcode)):
447
 
                yield pos+i, t, v
448
 
 
449
 
 
450
 
class BatchLexer(RegexLexer):
451
 
    """
452
 
    Lexer for the DOS/Windows Batch file format.
453
 
 
454
 
    *New in Pygments 0.7.*
455
 
    """
456
 
    name = 'Batchfile'
457
 
    aliases = ['bat']
458
 
    filenames = ['*.bat', '*.cmd']
459
 
    mimetypes = ['application/x-dos-batch']
460
 
 
461
 
    flags = re.MULTILINE | re.IGNORECASE
462
 
 
463
 
    tokens = {
464
 
        'root': [
465
 
            # Lines can start with @ to prevent echo
466
 
            (r'^\s*@', Punctuation),
467
 
            (r'^(\s*)(rem\s.*)$', bygroups(Text, Comment)),
468
 
            (r'".*?"', String.Double),
469
 
            (r"'.*?'", String.Single),
470
 
            # If made more specific, make sure you still allow expansions
471
 
            # like %~$VAR:zlt
472
 
            (r'%%?[~$:\w]+%?', Name.Variable),
473
 
            (r'::.*', Comment), # Technically :: only works at BOL
474
 
            (r'(set)(\s+)(\w+)', bygroups(Keyword, Text, Name.Variable)),
475
 
            (r'(call)(\s+)(:\w+)', bygroups(Keyword, Text, Name.Label)),
476
 
            (r'(goto)(\s+)(\w+)', bygroups(Keyword, Text, Name.Label)),
477
 
            (r'\b(set|call|echo|on|off|endlocal|for|do|goto|if|pause|'
478
 
             r'setlocal|shift|errorlevel|exist|defined|cmdextversion|'
479
 
             r'errorlevel|else|cd|md|del|deltree|cls|choice)\b', Keyword),
480
 
            (r'\b(equ|neq|lss|leq|gtr|geq)\b', Operator),
481
 
            include('basic'),
482
 
            (r'.', Text),
483
 
        ],
484
 
        'echo': [
485
 
            # Escapes only valid within echo args?
486
 
            (r'\^\^|\^<|\^>|\^\|', String.Escape),
487
 
            (r'\n', Text, '#pop'),
488
 
            include('basic'),
489
 
            (r'[^\'"^]+', Text),
490
 
        ],
491
 
        'basic': [
492
 
            (r'".*?"', String.Double),
493
 
            (r"'.*?'", String.Single),
494
 
            (r'`.*?`', String.Backtick),
495
 
            (r'-?\d+', Number),
496
 
            (r',', Punctuation),
497
 
            (r'=', Operator),
498
 
            (r'/\S+', Name),
499
 
            (r':\w+', Name.Label),
500
 
            (r'\w:\w+', Text),
501
 
            (r'([<>|])(\s*)(\w+)', bygroups(Punctuation, Text, Name)),
502
 
        ],
503
 
    }
504
 
 
505
 
 
506
 
class RedcodeLexer(RegexLexer):
507
 
    """
508
 
    A simple Redcode lexer based on ICWS'94.
509
 
    Contributed by Adam Blinkinsop <blinks@acm.org>.
510
 
 
511
 
    *New in Pygments 0.8.*
512
 
    """
513
 
    name = 'Redcode'
514
 
    aliases = ['redcode']
515
 
    filenames = ['*.cw']
516
 
 
517
 
    opcodes = ['DAT','MOV','ADD','SUB','MUL','DIV','MOD',
518
 
               'JMP','JMZ','JMN','DJN','CMP','SLT','SPL',
519
 
               'ORG','EQU','END']
520
 
    modifiers = ['A','B','AB','BA','F','X','I']
521
 
 
522
 
    tokens = {
523
 
        'root': [
524
 
            # Whitespace:
525
 
            (r'\s+', Text),
526
 
            (r';.*$', Comment.Single),
527
 
            # Lexemes:
528
 
            #  Identifiers
529
 
            (r'\b(%s)\b' % '|'.join(opcodes), Name.Function),
530
 
            (r'\b(%s)\b' % '|'.join(modifiers), Name.Decorator),
531
 
            (r'[A-Za-z_][A-Za-z_0-9]+', Name),
532
 
            #  Operators
533
 
            (r'[-+*/%]', Operator),
534
 
            (r'[#$@<>]', Operator), # mode
535
 
            (r'[.,]', Punctuation), # mode
536
 
            #  Numbers
537
 
            (r'[-+]?\d+', Number.Integer),
538
 
        ],
539
 
    }
540
 
 
541
 
 
542
 
class MOOCodeLexer(RegexLexer):
543
 
    """
544
 
    For `MOOCode <http://www.moo.mud.org/>`_ (the MOO scripting
545
 
    language).
546
 
 
547
 
    *New in Pygments 0.9.*
548
 
    """
549
 
    name = 'MOOCode'
550
 
    filenames = ['*.moo']
551
 
    aliases = ['moocode']
552
 
    mimetypes = ['text/x-moocode']
553
 
 
554
 
    tokens = {
555
 
        'root' : [
556
 
            # Numbers
557
 
            (r'(0|[1-9][0-9_]*)', Number.Integer),
558
 
            # Strings
559
 
            (r'"(\\\\|\\"|[^"])*"', String),
560
 
            # exceptions
561
 
            (r'(E_PERM|E_DIV)', Name.Exception),
562
 
            # db-refs
563
 
            (r'((#[-0-9]+)|(\$[a-z_A-Z0-9]+))', Name.Entity),
564
 
            # Keywords
565
 
            (r'\b(if|else|elseif|endif|for|endfor|fork|endfork|while'
566
 
             r'|endwhile|break|continue|return|try'
567
 
             r'|except|endtry|finally|in)\b', Keyword),
568
 
            # builtins
569
 
            (r'(random|length)', Name.Builtin),
570
 
            # special variables
571
 
            (r'(player|caller|this|args)', Name.Variable.Instance),
572
 
            # skip whitespace
573
 
            (r'\s+', Text),
574
 
            (r'\n', Text),
575
 
            # other operators
576
 
            (r'([!;=,{}&\|:\.\[\]@\(\)\<\>\?]+)', Operator),
577
 
            # function call
578
 
            (r'([a-z_A-Z0-9]+)(\()', bygroups(Name.Function, Operator)),
579
 
            # variables
580
 
            (r'([a-zA-Z_0-9]+)', Text),
581
 
        ]
582
 
    }
583
 
 
584
 
 
585
 
class SmalltalkLexer(RegexLexer):
586
 
    """
587
 
    For `Smalltalk <http://www.smalltalk.org/>`_ syntax.
588
 
    Contributed by Stefan Matthias Aust.
589
 
    Rewritten by Nils Winter.
590
 
 
591
 
    *New in Pygments 0.10.*
592
 
    """
593
 
    name = 'Smalltalk'
594
 
    filenames = ['*.st']
595
 
    aliases = ['smalltalk', 'squeak']
596
 
    mimetypes = ['text/x-smalltalk']
597
 
 
598
 
    tokens = {
599
 
        'root' : [
600
 
            (r'(<)(\w+:)(.*?)(>)', bygroups(Text, Keyword, Text, Text)),
601
 
            include('squeak fileout'),
602
 
            include('whitespaces'),
603
 
            include('method definition'),
604
 
            (r'(\|)([\w\s]*)(\|)', bygroups(Operator, Name.Variable, Operator)),
605
 
            include('objects'),
606
 
            (r'\^|\:=|\_', Operator),
607
 
            # temporaries
608
 
            (r'[\]({}.;!]', Text),
609
 
 
610
 
        ],
611
 
        'method definition' : [
612
 
            # Not perfect can't allow whitespaces at the beginning and the
613
 
            # without breaking everything
614
 
            (r'([a-zA-Z]+\w*:)(\s*)(\w+)',
615
 
             bygroups(Name.Function, Text, Name.Variable)),
616
 
            (r'^(\b[a-zA-Z]+\w*\b)(\s*)$', bygroups(Name.Function, Text)),
617
 
            (r'^([-+*/\\~<>=|&!?,@%]+)(\s*)(\w+)(\s*)$',
618
 
             bygroups(Name.Function, Text, Name.Variable, Text)),
619
 
        ],
620
 
        'blockvariables' : [
621
 
            include('whitespaces'),
622
 
            (r'(:)(\s*)([A-Za-z\w]+)',
623
 
             bygroups(Operator, Text, Name.Variable)),
624
 
            (r'\|', Operator, '#pop'),
625
 
            (r'', Text, '#pop'), # else pop
626
 
        ],
627
 
        'literals' : [
628
 
            (r'\'[^\']*\'', String, 'afterobject'),
629
 
            (r'\$.', String.Char, 'afterobject'),
630
 
            (r'#\(', String.Symbol, 'parenth'),
631
 
            (r'\)', Text, 'afterobject'),
632
 
            (r'(\d+r)?-?\d+(\.\d+)?(e-?\d+)?', Number, 'afterobject'),
633
 
        ],
634
 
        '_parenth_helper' : [
635
 
            include('whitespaces'),
636
 
            (r'(\d+r)?-?\d+(\.\d+)?(e-?\d+)?', Number),
637
 
            (r'[-+*/\\~<>=|&#!?,@%\w+:]+', String.Symbol),
638
 
            # literals
639
 
            (r'\'[^\']*\'', String),
640
 
            (r'\$.', String.Char),
641
 
            (r'#*\(', String.Symbol, 'inner_parenth'),
642
 
        ],
643
 
        'parenth' : [
644
 
            # This state is a bit tricky since
645
 
            # we can't just pop this state
646
 
            (r'\)', String.Symbol, ('root','afterobject')),
647
 
            include('_parenth_helper'),
648
 
        ],
649
 
        'inner_parenth': [
650
 
            (r'\)', String.Symbol, '#pop'),
651
 
            include('_parenth_helper'),
652
 
        ],
653
 
        'whitespaces' : [
654
 
            # skip whitespace and comments
655
 
            (r'\s+', Text),
656
 
            (r'"[^"]*"', Comment),
657
 
        ],
658
 
        'objects' : [
659
 
            (r'\[', Text, 'blockvariables'),
660
 
            (r'\]', Text, 'afterobject'),
661
 
            (r'\b(self|super|true|false|nil|thisContext)\b',
662
 
             Name.Builtin.Pseudo, 'afterobject'),
663
 
            (r'\b[A-Z]\w*(?!:)\b', Name.Class, 'afterobject'),
664
 
            (r'\b[a-z]\w*(?!:)\b', Name.Variable, 'afterobject'),
665
 
            (r'#("[^"]*"|[-+*/\\~<>=|&!?,@%]+|[\w:]+)',
666
 
             String.Symbol, 'afterobject'),
667
 
            include('literals'),
668
 
        ],
669
 
        'afterobject' : [
670
 
            (r'! !$', Keyword , '#pop'), # squeak chunk delimeter
671
 
            include('whitespaces'),
672
 
            (r'\b(ifTrue:|ifFalse:|whileTrue:|whileFalse:|timesRepeat:)',
673
 
             Name.Builtin, '#pop'),
674
 
            (r'\b(new\b(?!:))', Name.Builtin),
675
 
            (r'\:=|\_', Operator, '#pop'),
676
 
            (r'\b[a-zA-Z]+\w*:', Name.Function, '#pop'),
677
 
            (r'\b[a-zA-Z]+\w*', Name.Function),
678
 
            (r'\w+:?|[-+*/\\~<>=|&!?,@%]+', Name.Function, '#pop'),
679
 
            (r'\.', Punctuation, '#pop'),
680
 
            (r';', Punctuation),
681
 
            (r'[\])}]', Text),
682
 
            (r'[\[({]', Text, '#pop'),
683
 
        ],
684
 
        'squeak fileout' : [
685
 
            # Squeak fileout format (optional)
686
 
            (r'^"[^"]*"!', Keyword),
687
 
            (r"^'[^']*'!", Keyword),
688
 
            (r'^(!)(\w+)( commentStamp: )(.*?)( prior: .*?!\n)(.*?)(!)',
689
 
                bygroups(Keyword, Name.Class, Keyword, String, Keyword, Text, Keyword)),
690
 
            (r'^(!)(\w+(?: class)?)( methodsFor: )(\'[^\']*\')(.*?!)',
691
 
                bygroups(Keyword, Name.Class, Keyword, String, Keyword)),
692
 
            (r'^(\w+)( subclass: )(#\w+)'
693
 
             r'(\s+instanceVariableNames: )(.*?)'
694
 
             r'(\s+classVariableNames: )(.*?)'
695
 
             r'(\s+poolDictionaries: )(.*?)'
696
 
             r'(\s+category: )(.*?)(!)',
697
 
                bygroups(Name.Class, Keyword, String.Symbol, Keyword, String, Keyword,
698
 
                         String, Keyword, String, Keyword, String, Keyword)),
699
 
            (r'^(\w+(?: class)?)(\s+instanceVariableNames: )(.*?)(!)',
700
 
                bygroups(Name.Class, Keyword, String, Keyword)),
701
 
            (r'(!\n)(\].*)(! !)$', bygroups(Keyword, Text, Keyword)),
702
 
            (r'! !$', Keyword),
703
 
        ],
704
 
    }
705
 
 
706
 
 
707
 
class TcshLexer(RegexLexer):
708
 
    """
709
 
    Lexer for tcsh scripts.
710
 
 
711
 
    *New in Pygments 0.10.*
712
 
    """
713
 
 
714
 
    name = 'Tcsh'
715
 
    aliases = ['tcsh', 'csh']
716
 
    filenames = ['*.tcsh', '*.csh']
717
 
    mimetypes = ['application/x-csh']
718
 
 
719
 
    tokens = {
720
 
        'root': [
721
 
            include('basic'),
722
 
            (r'\$\(', Keyword, 'paren'),
723
 
            (r'\${#?', Keyword, 'curly'),
724
 
            (r'`', String.Backtick, 'backticks'),
725
 
            include('data'),
726
 
        ],
727
 
        'basic': [
728
 
            (r'\b(if|endif|else|while|then|foreach|case|default|'
729
 
             r'continue|goto|breaksw|end|switch|endsw)\s*\b',
730
 
             Keyword),
731
 
            (r'\b(alias|alloc|bg|bindkey|break|builtins|bye|caller|cd|chdir|'
732
 
             r'complete|dirs|echo|echotc|eval|exec|exit|'
733
 
             r'fg|filetest|getxvers|glob|getspath|hashstat|history|hup|inlib|jobs|kill|'
734
 
             r'limit|log|login|logout|ls-F|migrate|newgrp|nice|nohup|notify|'
735
 
             r'onintr|popd|printenv|pushd|rehash|repeat|rootnode|popd|pushd|set|shift|'
736
 
             r'sched|setenv|setpath|settc|setty|setxvers|shift|source|stop|suspend|'
737
 
             r'source|suspend|telltc|time|'
738
 
             r'umask|unalias|uncomplete|unhash|universe|unlimit|unset|unsetenv|'
739
 
             r'ver|wait|warp|watchlog|where|which)\s*\b',
740
 
             Name.Builtin),
741
 
            (r'#.*\n', Comment),
742
 
            (r'\\[\w\W]', String.Escape),
743
 
            (r'(\b\w+)(\s*)(=)', bygroups(Name.Variable, Text, Operator)),
744
 
            (r'[\[\]{}()=]+', Operator),
745
 
            (r'<<\s*(\'?)\\?(\w+)[\w\W]+?\2', String),
746
 
        ],
747
 
        'data': [
748
 
            (r'(?s)"(\\\\|\\[0-7]+|\\.|[^"\\])*"', String.Double),
749
 
            (r"(?s)'(\\\\|\\[0-7]+|\\.|[^'\\])*'", String.Single),
750
 
            (r'\s+', Text),
751
 
            (r'[^=\s\n\[\]{}()$"\'`\\]+', Text),
752
 
            (r'\d+(?= |\Z)', Number),
753
 
            (r'\$#?(\w+|.)', Name.Variable),
754
 
        ],
755
 
        'curly': [
756
 
            (r'}', Keyword, '#pop'),
757
 
            (r':-', Keyword),
758
 
            (r'[a-zA-Z0-9_]+', Name.Variable),
759
 
            (r'[^}:"\'`$]+', Punctuation),
760
 
            (r':', Punctuation),
761
 
            include('root'),
762
 
        ],
763
 
        'paren': [
764
 
            (r'\)', Keyword, '#pop'),
765
 
            include('root'),
766
 
        ],
767
 
        'backticks': [
768
 
            (r'`', String.Backtick, '#pop'),
769
 
            include('root'),
770
 
        ],
771
 
    }
772
 
 
773
 
 
774
 
class LogtalkLexer(RegexLexer):
775
 
    """
776
 
    For `Logtalk <http://logtalk.org/>`_ source code.
777
 
 
778
 
    *New in Pygments 0.10.*
779
 
    """
780
 
 
781
 
    name = 'Logtalk'
782
 
    aliases = ['logtalk']
783
 
    filenames = ['*.lgt']
784
 
    mimetypes = ['text/x-logtalk']
785
 
 
786
 
    tokens = {
787
 
        'root': [
788
 
            # Directives
789
 
            (r'^\s*:-\s',Punctuation,'directive'),
790
 
            # Comments
791
 
            (r'%.*?\n', Comment),
792
 
            (r'/\*(.|\n)*?\*/',Comment),
793
 
            # Whitespace
794
 
            (r'\n', Text),
795
 
            (r'\s+', Text),
796
 
            # Numbers
797
 
            (r"0'.", Number),
798
 
            (r'0b[01]+', Number),
799
 
            (r'0o[0-7]+', Number),
800
 
            (r'0x[0-9a-fA-F]+', Number),
801
 
            (r'\d+\.?\d*((e|E)(\+|-)?\d+)?', Number),
802
 
            # Variables
803
 
            (r'([A-Z_][a-zA-Z0-9_]*)', Name.Variable),
804
 
            # Event handlers
805
 
            (r'(after|before)(?=[(])', Keyword),
806
 
            # Execution-context methods
807
 
            (r'(parameter|this|se(lf|nder))(?=[(])', Keyword),
808
 
            # Reflection
809
 
            (r'(current_predicate|predicate_property)(?=[(])', Keyword),
810
 
            # DCGs and term expansion
811
 
            (r'(expand_(goal|term)|(goal|term)_expansion|phrase)(?=[(])',
812
 
             Keyword),
813
 
            # Entity
814
 
            (r'(abolish|c(reate|urrent))_(object|protocol|category)(?=[(])',
815
 
             Keyword),
816
 
            (r'(object|protocol|category)_property(?=[(])', Keyword),
817
 
            # Entity relations
818
 
            (r'complements_object(?=[(])', Keyword),
819
 
            (r'extends_(object|protocol|category)(?=[(])', Keyword),
820
 
            (r'imp(lements_protocol|orts_category)(?=[(])', Keyword),
821
 
            (r'(instantiat|specializ)es_class(?=[(])', Keyword),
822
 
            # Events
823
 
            (r'(current_event|(abolish|define)_events)(?=[(])', Keyword),
824
 
            # Flags
825
 
            (r'(current|set)_logtalk_flag(?=[(])', Keyword),
826
 
            # Compiling, loading, and library paths
827
 
            (r'logtalk_(compile|l(ibrary_path|oad))(?=[(])', Keyword),
828
 
            # Database
829
 
            (r'(clause|retract(all)?)(?=[(])', Keyword),
830
 
            (r'a(bolish|ssert(a|z))(?=[(])', Keyword),
831
 
            # Control
832
 
            (r'(ca(ll|tch)|throw)(?=[(])', Keyword),
833
 
            (r'(fail|true)\b', Keyword),
834
 
            # All solutions
835
 
            (r'((bag|set)of|f(ind|or)all)(?=[(])', Keyword),
836
 
            # Multi-threading meta-predicates
837
 
            (r'threaded(_(call|once|ignore|exit|peek|wait|notify))?(?=[(])',
838
 
             Keyword),
839
 
            # Term unification
840
 
            (r'unify_with_occurs_check(?=[(])', Keyword),
841
 
            # Term creation and decomposition
842
 
            (r'(functor|arg|copy_term)(?=[(])', Keyword),
843
 
            # Evaluable functors
844
 
            (r'(rem|mod|abs|sign)(?=[(])', Keyword),
845
 
            (r'float(_(integer|fractional)_part)?(?=[(])', Keyword),
846
 
            (r'(floor|truncate|round|ceiling)(?=[(])', Keyword),
847
 
            # Other arithmetic functors
848
 
            (r'(cos|atan|exp|log|s(in|qrt))(?=[(])', Keyword),
849
 
            # Term testing
850
 
            (r'(var|atom(ic)?|integer|float|compound|n(onvar|umber))(?=[(])',
851
 
             Keyword),
852
 
            # Stream selection and control
853
 
            (r'(curren|se)t_(in|out)put(?=[(])', Keyword),
854
 
            (r'(open|close)(?=[(])', Keyword),
855
 
            (r'flush_output(?=[(])', Keyword),
856
 
            (r'(at_end_of_stream|flush_output)\b', Keyword),
857
 
            (r'(stream_property|at_end_of_stream|set_stream_position)(?=[(])',
858
 
             Keyword),
859
 
            # Character and byte input/output
860
 
            (r'(nl|(get|peek|put)_(byte|c(har|ode)))(?=[(])', Keyword),
861
 
            (r'\bnl\b', Keyword),
862
 
            # Term input/output
863
 
            (r'read(_term)?(?=[(])', Keyword),
864
 
            (r'write(q|_(canonical|term))?(?=[(])', Keyword),
865
 
            (r'(current_)?op(?=[(])', Keyword),
866
 
            (r'(current_)?char_conversion(?=[(])', Keyword),
867
 
            # Atomic term processing
868
 
            (r'atom_(length|c(hars|o(ncat|des)))(?=[(])', Keyword),
869
 
            (r'(char_code|sub_atom)(?=[(])', Keyword),
870
 
            (r'number_c(har|ode)s(?=[(])', Keyword),
871
 
            # Implementation defined hooks functions
872
 
            (r'(se|curren)t_prolog_flag(?=[(])', Keyword),
873
 
            (r'\bhalt\b', Keyword),
874
 
            (r'halt(?=[(])', Keyword),
875
 
            # Message sending operators
876
 
            (r'(::|:|\^\^)', Operator),
877
 
            # External call
878
 
            (r'[{}]', Keyword),
879
 
            # Logic and control
880
 
            (r'\bonce(?=[(])', Keyword),
881
 
            (r'\brepeat\b', Keyword),
882
 
            # Bitwise functors
883
 
            (r'(>>|<<|/\\|\\\\|\\)', Operator),
884
 
            # Arithemtic evaluation
885
 
            (r'\bis\b', Keyword),
886
 
            # Arithemtic comparison
887
 
            (r'(=:=|=\\=|<|=<|>=|>)', Operator),
888
 
            # Term creation and decomposition
889
 
            (r'=\.\.', Operator),
890
 
            # Term unification
891
 
            (r'(=|\\=)', Operator),
892
 
            # Term comparison
893
 
            (r'(==|\\==|@=<|@<|@>=|@>)', Operator),
894
 
            # Evaluable functors
895
 
            (r'(//|[-+*/])', Operator),
896
 
            (r'\b(mod|rem)\b', Operator),
897
 
            # Other arithemtic functors
898
 
            (r'\b\*\*\b', Operator),
899
 
            # DCG rules
900
 
            (r'-->', Operator),
901
 
            # Control constructs
902
 
            (r'([!;]|->)', Operator),
903
 
            # Logic and control
904
 
            (r'\\+', Operator),
905
 
            # Mode operators
906
 
            (r'[?@]', Operator),
907
 
            # Strings
908
 
            (r'"(\\\\|\\"|[^"])*"', String),
909
 
            # Ponctuation
910
 
            (r'[()\[\],.|]', Text),
911
 
            # Atoms
912
 
            (r"[a-z][a-zA-Z0-9_]*", Text),
913
 
            (r"[']", String, 'quoted_atom'),
914
 
        ],
915
 
 
916
 
        'quoted_atom': [
917
 
            (r"['][']", String),
918
 
            (r"[']", String, '#pop'),
919
 
            (r'\\([\\abfnrtv"\']|(x[a-fA-F0-9]+|[0-7]+)\\)', String.Escape),
920
 
            (r"[^\\'\n]+", String),
921
 
            (r'\\', String),
922
 
        ],
923
 
 
924
 
        'directive': [
925
 
            # Conditional compilation directives
926
 
            (r'(el)?if(?=[(])', Keyword, 'root'),
927
 
            (r'(e(lse|ndif))[.]', Keyword, 'root'),
928
 
            # Entity directives
929
 
            (r'(category|object|protocol)(?=[(])', Keyword, 'entityrelations'),
930
 
            (r'(end_(category|object|protocol))[.]',Keyword, 'root'),
931
 
            # Predicate scope directives
932
 
            (r'(public|protected|private)(?=[(])', Keyword, 'root'),
933
 
            # Other directives
934
 
            (r'e(n(coding|sure_loaded)|xport)(?=[(])', Keyword, 'root'),
935
 
            (r'in(fo|itialization)(?=[(])', Keyword, 'root'),
936
 
            (r'(dynamic|synchronized|threaded)[.]', Keyword, 'root'),
937
 
            (r'(alias|d(ynamic|iscontiguous)|m(eta_predicate|ode|ultifile)|'
938
 
             r's(et_(logtalk|prolog)_flag|ynchronized))(?=[(])', Keyword, 'root'),
939
 
            (r'op(?=[(])', Keyword, 'root'),
940
 
            (r'(calls|reexport|use(s|_module))(?=[(])', Keyword, 'root'),
941
 
            (r'[a-z][a-zA-Z0-9_]*(?=[(])', Text, 'root'),
942
 
            (r'[a-z][a-zA-Z0-9_]*[.]', Text, 'root'),
943
 
        ],
944
 
 
945
 
        'entityrelations': [
946
 
            (r'(extends|i(nstantiates|mp(lements|orts))|specializes)(?=[(])',
947
 
             Keyword),
948
 
            # Numbers
949
 
            (r"0'.", Number),
950
 
            (r'0b[01]+', Number),
951
 
            (r'0o[0-7]+', Number),
952
 
            (r'0x[0-9a-fA-F]+', Number),
953
 
            (r'\d+\.?\d*((e|E)(\+|-)?\d+)?', Number),
954
 
            # Variables
955
 
            (r'([A-Z_][a-zA-Z0-9_]*)', Name.Variable),
956
 
            # Atoms
957
 
            (r"[a-z][a-zA-Z0-9_]*", Text),
958
 
            (r"[']", String, 'quoted_atom'),
959
 
            # Strings
960
 
            (r'"(\\\\|\\"|[^"])*"', String),
961
 
            # End of entity-opening directive
962
 
            (r'([)]\.)', Text, 'root'),
963
 
            # Scope operator
964
 
            (r'(::)', Operator),
965
 
            # Ponctuation
966
 
            (r'[()\[\],.|]', Text),
967
 
            # Comments
968
 
            (r'%.*?\n', Comment),
969
 
            (r'/\*(.|\n)*?\*/',Comment),
970
 
            # Whitespace
971
 
            (r'\n', Text),
972
 
            (r'\s+', Text),
973
 
        ]
974
 
    }
975
 
 
976
 
    def analyse_text(text):
977
 
        if ':- object(' in text:
978
 
            return True
979
 
        if ':- protocol(' in text:
980
 
            return True
981
 
        if ':- category(' in text:
982
 
            return True
983
 
        return False
984
 
 
985
 
 
986
 
def _shortened(word):
987
 
    dpos = word.find('$')
988
 
    return '|'.join([word[:dpos] + word[dpos+1:i] + r'\b'
989
 
                     for i in range(len(word), dpos, -1)])
990
 
def _shortened_many(*words):
991
 
    return '|'.join(map(_shortened, words))
992
 
 
993
 
class GnuplotLexer(RegexLexer):
994
 
    """
995
 
    For `Gnuplot <http://gnuplot.info/>`_ plotting scripts.
996
 
 
997
 
    *New in Pygments 0.11.*
998
 
    """
999
 
 
1000
 
    name = 'Gnuplot'
1001
 
    aliases = ['gnuplot']
1002
 
    filenames = ['*.plot', '*.plt']
1003
 
    mimetypes = ['text/x-gnuplot']
1004
 
 
1005
 
    tokens = {
1006
 
        'root': [
1007
 
            include('whitespace'),
1008
 
            (_shortened('bi$nd'), Keyword, 'bind'),
1009
 
            (_shortened_many('ex$it', 'q$uit'), Keyword, 'quit'),
1010
 
            (_shortened('f$it'), Keyword, 'fit'),
1011
 
            (r'(if)(\s*)(\()', bygroups(Keyword, Text, Punctuation), 'if'),
1012
 
            (r'else\b', Keyword),
1013
 
            (_shortened('pa$use'), Keyword, 'pause'),
1014
 
            (_shortened_many('p$lot', 'rep$lot', 'sp$lot'), Keyword, 'plot'),
1015
 
            (_shortened('sa$ve'), Keyword, 'save'),
1016
 
            (_shortened('se$t'), Keyword, ('genericargs', 'optionarg')),
1017
 
            (_shortened_many('sh$ow', 'uns$et'),
1018
 
             Keyword, ('noargs', 'optionarg')),
1019
 
            (_shortened_many('low$er', 'ra$ise', 'ca$ll', 'cd$', 'cl$ear',
1020
 
                             'h$elp', '\\?$', 'hi$story', 'l$oad', 'pr$int',
1021
 
                             'pwd$', 're$read', 'res$et', 'scr$eendump',
1022
 
                             'she$ll', 'sy$stem', 'up$date'),
1023
 
             Keyword, 'genericargs'),
1024
 
            (_shortened_many('pwd$', 're$read', 'res$et', 'scr$eendump',
1025
 
                             'she$ll', 'test$'),
1026
 
             Keyword, 'noargs'),
1027
 
            ('([a-zA-Z_][a-zA-Z0-9_]*)(\s*)(=)',
1028
 
             bygroups(Name.Variable, Text, Operator), 'genericargs'),
1029
 
            ('([a-zA-Z_][a-zA-Z0-9_]*)(\s*\(.*?\)\s*)(=)',
1030
 
             bygroups(Name.Function, Text, Operator), 'genericargs'),
1031
 
            (r'@[a-zA-Z_][a-zA-Z0-9_]*', Name.Constant), # macros
1032
 
            (r';', Keyword),
1033
 
        ],
1034
 
        'comment': [
1035
 
            (r'[^\\\n]', Comment),
1036
 
            (r'\\\n', Comment),
1037
 
            (r'\\', Comment),
1038
 
            # don't add the newline to the Comment token
1039
 
            ('', Comment, '#pop'),
1040
 
        ],
1041
 
        'whitespace': [
1042
 
            ('#', Comment, 'comment'),
1043
 
            (r'[ \t\v\f]+', Text),
1044
 
        ],
1045
 
        'noargs': [
1046
 
            include('whitespace'),
1047
 
            # semicolon and newline end the argument list
1048
 
            (r';', Punctuation, '#pop'),
1049
 
            (r'\n', Text, '#pop'),
1050
 
        ],
1051
 
        'dqstring': [
1052
 
            (r'"', String, '#pop'),
1053
 
            (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})', String.Escape),
1054
 
            (r'[^\\"\n]+', String), # all other characters
1055
 
            (r'\\\n', String), # line continuation
1056
 
            (r'\\', String), # stray backslash
1057
 
            (r'\n', String, '#pop'), # newline ends the string too
1058
 
        ],
1059
 
        'sqstring': [
1060
 
            (r"''", String), # escaped single quote
1061
 
            (r"'", String, '#pop'),
1062
 
            (r"[^\\'\n]+", String), # all other characters
1063
 
            (r'\\\n', String), # line continuation
1064
 
            (r'\\', String), # normal backslash
1065
 
            (r'\n', String, '#pop'), # newline ends the string too
1066
 
        ],
1067
 
        'genericargs': [
1068
 
            include('noargs'),
1069
 
            (r'"', String, 'dqstring'),
1070
 
            (r"'", String, 'sqstring'),
1071
 
            (r'(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+', Number.Float),
1072
 
            (r'(\d+\.\d*|\.\d+)', Number.Float),
1073
 
            (r'-?\d+', Number.Integer),
1074
 
            ('[,.~!%^&*+=|?:<>/-]', Operator),
1075
 
            ('[{}()\[\]]', Punctuation),
1076
 
            (r'(eq|ne)\b', Operator.Word),
1077
 
            (r'([a-zA-Z_][a-zA-Z0-9_]*)(\s*)(\()',
1078
 
             bygroups(Name.Function, Text, Punctuation)),
1079
 
            (r'[a-zA-Z_][a-zA-Z0-9_]*', Name),
1080
 
            (r'@[a-zA-Z_][a-zA-Z0-9_]*', Name.Constant), # macros
1081
 
            (r'\\\n', Text),
1082
 
        ],
1083
 
        'optionarg': [
1084
 
            include('whitespace'),
1085
 
            (_shortened_many(
1086
 
                "a$ll","an$gles","ar$row","au$toscale","b$ars","bor$der",
1087
 
                "box$width","cl$abel","c$lip","cn$trparam","co$ntour","da$ta",
1088
 
                "data$file","dg$rid3d","du$mmy","enc$oding","dec$imalsign",
1089
 
                "fit$","font$path","fo$rmat","fu$nction","fu$nctions","g$rid",
1090
 
                "hid$den3d","his$torysize","is$osamples","k$ey","keyt$itle",
1091
 
                "la$bel","li$nestyle","ls$","loa$dpath","loc$ale","log$scale",
1092
 
                "mac$ros","map$ping","map$ping3d","mar$gin","lmar$gin",
1093
 
                "rmar$gin","tmar$gin","bmar$gin","mo$use","multi$plot",
1094
 
                "mxt$ics","nomxt$ics","mx2t$ics","nomx2t$ics","myt$ics",
1095
 
                "nomyt$ics","my2t$ics","nomy2t$ics","mzt$ics","nomzt$ics",
1096
 
                "mcbt$ics","nomcbt$ics","of$fsets","or$igin","o$utput",
1097
 
                "pa$rametric","pm$3d","pal$ette","colorb$ox","p$lot",
1098
 
                "poi$ntsize","pol$ar","pr$int","obj$ect","sa$mples","si$ze",
1099
 
                "st$yle","su$rface","table$","t$erminal","termo$ptions","ti$cs",
1100
 
                "ticsc$ale","ticsl$evel","timef$mt","tim$estamp","tit$le",
1101
 
                "v$ariables","ve$rsion","vi$ew","xyp$lane","xda$ta","x2da$ta",
1102
 
                "yda$ta","y2da$ta","zda$ta","cbda$ta","xl$abel","x2l$abel",
1103
 
                "yl$abel","y2l$abel","zl$abel","cbl$abel","xti$cs","noxti$cs",
1104
 
                "x2ti$cs","nox2ti$cs","yti$cs","noyti$cs","y2ti$cs","noy2ti$cs",
1105
 
                "zti$cs","nozti$cs","cbti$cs","nocbti$cs","xdti$cs","noxdti$cs",
1106
 
                "x2dti$cs","nox2dti$cs","ydti$cs","noydti$cs","y2dti$cs",
1107
 
                "noy2dti$cs","zdti$cs","nozdti$cs","cbdti$cs","nocbdti$cs",
1108
 
                "xmti$cs","noxmti$cs","x2mti$cs","nox2mti$cs","ymti$cs",
1109
 
                "noymti$cs","y2mti$cs","noy2mti$cs","zmti$cs","nozmti$cs",
1110
 
                "cbmti$cs","nocbmti$cs","xr$ange","x2r$ange","yr$ange",
1111
 
                "y2r$ange","zr$ange","cbr$ange","rr$ange","tr$ange","ur$ange",
1112
 
                "vr$ange","xzeroa$xis","x2zeroa$xis","yzeroa$xis","y2zeroa$xis",
1113
 
                "zzeroa$xis","zeroa$xis","z$ero"), Name.Builtin, '#pop'),
1114
 
        ],
1115
 
        'bind': [
1116
 
            ('!', Keyword, '#pop'),
1117
 
            (_shortened('all$windows'), Name.Builtin),
1118
 
            include('genericargs'),
1119
 
        ],
1120
 
        'quit': [
1121
 
            (r'gnuplot\b', Keyword),
1122
 
            include('noargs'),
1123
 
        ],
1124
 
        'fit': [
1125
 
            (r'via\b', Name.Builtin),
1126
 
            include('plot'),
1127
 
        ],
1128
 
        'if': [
1129
 
            (r'\)', Punctuation, '#pop'),
1130
 
            include('genericargs'),
1131
 
        ],
1132
 
        'pause': [
1133
 
            (r'(mouse|any|button1|button2|button3)\b', Name.Builtin),
1134
 
            (_shortened('key$press'), Name.Builtin),
1135
 
            include('genericargs'),
1136
 
        ],
1137
 
        'plot': [
1138
 
            (_shortened_many('ax$es', 'axi$s', 'bin$ary', 'ev$ery', 'i$ndex',
1139
 
                             'mat$rix', 's$mooth', 'thru$', 't$itle',
1140
 
                             'not$itle', 'u$sing', 'w$ith'),
1141
 
             Name.Builtin),
1142
 
            include('genericargs'),
1143
 
        ],
1144
 
        'save': [
1145
 
            (_shortened_many('f$unctions', 's$et', 't$erminal', 'v$ariables'),
1146
 
             Name.Builtin),
1147
 
            include('genericargs'),
1148
 
        ],
1149
 
    }
1150
 
 
1151
 
 
1152
 
class PovrayLexer(RegexLexer):
1153
 
    """
1154
 
    For `Persistence of Vision Raytracer <http://www.povray.org/>`_ files.
1155
 
 
1156
 
    *New in Pygments 0.11.*
1157
 
    """
1158
 
    name = 'POVRay'
1159
 
    aliases = ['pov']
1160
 
    filenames = ['*.pov', '*.inc']
1161
 
    mimetypes = ['text/x-povray']
1162
 
 
1163
 
    tokens = {
1164
 
        'root': [
1165
 
            (r'/\*[\w\W]*?\*/', Comment.Multiline),
1166
 
            (r'//.*\n', Comment.Single),
1167
 
            (r'(?s)"(?:\\.|[^"\\])+"', String.Double),
1168
 
            (r'#(debug|default|else|end|error|fclose|fopen|if|ifdef|ifndef|'
1169
 
             r'include|range|read|render|statistics|switch|undef|version|'
1170
 
             r'warning|while|write|define|macro|local|declare)',
1171
 
             Comment.Preproc),
1172
 
            (r'\b(aa_level|aa_threshold|abs|acos|acosh|adaptive|adc_bailout|'
1173
 
             r'agate|agate_turb|all|alpha|ambient|ambient_light|angle|'
1174
 
             r'aperture|arc_angle|area_light|asc|asin|asinh|assumed_gamma|'
1175
 
             r'atan|atan2|atanh|atmosphere|atmospheric_attenuation|'
1176
 
             r'attenuating|average|background|black_hole|blue|blur_samples|'
1177
 
             r'bounded_by|box_mapping|bozo|break|brick|brick_size|'
1178
 
             r'brightness|brilliance|bumps|bumpy1|bumpy2|bumpy3|bump_map|'
1179
 
             r'bump_size|case|caustics|ceil|checker|chr|clipped_by|clock|'
1180
 
             r'color|color_map|colour|colour_map|component|composite|concat|'
1181
 
             r'confidence|conic_sweep|constant|control0|control1|cos|cosh|'
1182
 
             r'count|crackle|crand|cube|cubic_spline|cylindrical_mapping|'
1183
 
             r'debug|declare|default|degrees|dents|diffuse|direction|'
1184
 
             r'distance|distance_maximum|div|dust|dust_type|eccentricity|'
1185
 
             r'else|emitting|end|error|error_bound|exp|exponent|'
1186
 
             r'fade_distance|fade_power|falloff|falloff_angle|false|'
1187
 
             r'file_exists|filter|finish|fisheye|flatness|flip|floor|'
1188
 
             r'focal_point|fog|fog_alt|fog_offset|fog_type|frequency|gif|'
1189
 
             r'global_settings|glowing|gradient|granite|gray_threshold|'
1190
 
             r'green|halo|hexagon|hf_gray_16|hierarchy|hollow|hypercomplex|'
1191
 
             r'if|ifdef|iff|image_map|incidence|include|int|interpolate|'
1192
 
             r'inverse|ior|irid|irid_wavelength|jitter|lambda|leopard|'
1193
 
             r'linear|linear_spline|linear_sweep|location|log|looks_like|'
1194
 
             r'look_at|low_error_factor|mandel|map_type|marble|material_map|'
1195
 
             r'matrix|max|max_intersections|max_iteration|max_trace_level|'
1196
 
             r'max_value|metallic|min|minimum_reuse|mod|mortar|'
1197
 
             r'nearest_count|no|normal|normal_map|no_shadow|number_of_waves|'
1198
 
             r'octaves|off|offset|omega|omnimax|on|once|onion|open|'
1199
 
             r'orthographic|panoramic|pattern1|pattern2|pattern3|'
1200
 
             r'perspective|pgm|phase|phong|phong_size|pi|pigment|'
1201
 
             r'pigment_map|planar_mapping|png|point_at|pot|pow|ppm|'
1202
 
             r'precision|pwr|quadratic_spline|quaternion|quick_color|'
1203
 
             r'quick_colour|quilted|radial|radians|radiosity|radius|rainbow|'
1204
 
             r'ramp_wave|rand|range|reciprocal|recursion_limit|red|'
1205
 
             r'reflection|refraction|render|repeat|rgb|rgbf|rgbft|rgbt|'
1206
 
             r'right|ripples|rotate|roughness|samples|scale|scallop_wave|'
1207
 
             r'scattering|seed|shadowless|sin|sine_wave|sinh|sky|sky_sphere|'
1208
 
             r'slice|slope_map|smooth|specular|spherical_mapping|spiral|'
1209
 
             r'spiral1|spiral2|spotlight|spotted|sqr|sqrt|statistics|str|'
1210
 
             r'strcmp|strength|strlen|strlwr|strupr|sturm|substr|switch|sys|'
1211
 
             r't|tan|tanh|test_camera_1|test_camera_2|test_camera_3|'
1212
 
             r'test_camera_4|texture|texture_map|tga|thickness|threshold|'
1213
 
             r'tightness|tile2|tiles|track|transform|translate|transmit|'
1214
 
             r'triangle_wave|true|ttf|turbulence|turb_depth|type|'
1215
 
             r'ultra_wide_angle|up|use_color|use_colour|use_index|u_steps|'
1216
 
             r'val|variance|vaxis_rotate|vcross|vdot|version|vlength|'
1217
 
             r'vnormalize|volume_object|volume_rendered|vol_with_light|'
1218
 
             r'vrotate|v_steps|warning|warp|water_level|waves|while|width|'
1219
 
             r'wood|wrinkles|yes)\b', Keyword),
1220
 
            (r'bicubic_patch|blob|box|camera|cone|cubic|cylinder|difference|'
1221
 
             r'disc|height_field|intersection|julia_fractal|lathe|'
1222
 
             r'light_source|merge|mesh|object|plane|poly|polygon|prism|'
1223
 
             r'quadric|quartic|smooth_triangle|sor|sphere|superellipsoid|'
1224
 
             r'text|torus|triangle|union', Name.Builtin),
1225
 
            # TODO: <=, etc
1226
 
            (r'[\[\](){}<>;,]', Punctuation),
1227
 
            (r'[-+*/=]', Operator),
1228
 
            (r'\b(x|y|z|u|v)\b', Name.Builtin.Pseudo),
1229
 
            (r'[a-zA-Z_][a-zA-Z_0-9]*', Name),
1230
 
            (r'[0-9]+\.[0-9]*', Number.Float),
1231
 
            (r'\.[0-9]+', Number.Float),
1232
 
            (r'[0-9]+', Number.Integer),
1233
 
            (r'\s+', Text),
1234
 
        ]
1235
 
    }
1236
 
 
1237
 
 
1238
 
class AppleScriptLexer(RegexLexer):
1239
 
    """
1240
 
    For `AppleScript source code
1241
 
    <http://developer.apple.com/documentation/AppleScript/
1242
 
    Conceptual/AppleScriptLangGuide>`_,
1243
 
    including `AppleScript Studio
1244
 
    <http://developer.apple.com/documentation/AppleScript/
1245
 
    Reference/StudioReference>`_.
1246
 
    Contributed by Andreas Amann <aamann@mac.com>.
1247
 
    """
1248
 
 
1249
 
    name = 'AppleScript'
1250
 
    aliases = ['applescript']
1251
 
    filenames = ['*.applescript']
1252
 
 
1253
 
    flags = re.MULTILINE | re.DOTALL
1254
 
 
1255
 
    Identifiers = r'[a-zA-Z]\w*'
1256
 
    Literals = ['AppleScript', 'current application', 'false', 'linefeed',
1257
 
                'missing value', 'pi','quote', 'result', 'return', 'space',
1258
 
                'tab', 'text item delimiters', 'true', 'version']
1259
 
    Classes = ['alias ', 'application ', 'boolean ', 'class ', 'constant ',
1260
 
               'date ', 'file ', 'integer ', 'list ', 'number ', 'POSIX file ',
1261
 
               'real ', 'record ', 'reference ', 'RGB color ', 'script ',
1262
 
               'text ', 'unit types', '(Unicode )?text', 'string']
1263
 
    BuiltIn = ['attachment', 'attribute run', 'character', 'day', 'month',
1264
 
               'paragraph', 'word', 'year']
1265
 
    HandlerParams = ['about', 'above', 'against', 'apart from', 'around',
1266
 
                     'aside from', 'at', 'below', 'beneath', 'beside',
1267
 
                     'between', 'for', 'given', 'instead of', 'on', 'onto',
1268
 
                     'out of', 'over', 'since']
1269
 
    Commands = ['ASCII (character|number)', 'activate', 'beep', 'choose URL',
1270
 
                'choose application', 'choose color', 'choose file( name)?',
1271
 
                'choose folder', 'choose from list',
1272
 
                'choose remote application', 'clipboard info',
1273
 
                'close( access)?', 'copy', 'count', 'current date', 'delay',
1274
 
                'delete', 'display (alert|dialog)', 'do shell script',
1275
 
                'duplicate', 'exists', 'get eof', 'get volume settings',
1276
 
                'info for', 'launch', 'list (disks|folder)', 'load script',
1277
 
                'log', 'make', 'mount volume', 'new', 'offset',
1278
 
                'open( (for access|location))?', 'path to', 'print', 'quit',
1279
 
                'random number', 'read', 'round', 'run( script)?',
1280
 
                'say', 'scripting components',
1281
 
                'set (eof|the clipboard to|volume)', 'store script',
1282
 
                'summarize', 'system attribute', 'system info',
1283
 
                'the clipboard', 'time to GMT', 'write', 'quoted form']
1284
 
    References = ['(in )?back of', '(in )?front of', '[0-9]+(st|nd|rd|th)',
1285
 
                  'first', 'second', 'third', 'fourth', 'fifth', 'sixth',
1286
 
                  'seventh', 'eighth', 'ninth', 'tenth', 'after', 'back',
1287
 
                  'before', 'behind', 'every', 'front', 'index', 'last',
1288
 
                  'middle', 'some', 'that', 'through', 'thru', 'where', 'whose']
1289
 
    Operators = ["and", "or", "is equal", "equals", "(is )?equal to", "is not",
1290
 
                 "isn't", "isn't equal( to)?", "is not equal( to)?",
1291
 
                 "doesn't equal", "does not equal", "(is )?greater than",
1292
 
                 "comes after", "is not less than or equal( to)?",
1293
 
                 "isn't less than or equal( to)?", "(is )?less than",
1294
 
                 "comes before", "is not greater than or equal( to)?",
1295
 
                 "isn't greater than or equal( to)?",
1296
 
                 "(is  )?greater than or equal( to)?", "is not less than",
1297
 
                 "isn't less than", "does not come before",
1298
 
                 "doesn't come before", "(is )?less than or equal( to)?",
1299
 
                 "is not greater than", "isn't greater than",
1300
 
                 "does not come after", "doesn't come after", "starts? with",
1301
 
                 "begins? with", "ends? with", "contains?", "does not contain",
1302
 
                 "doesn't contain", "is in", "is contained by", "is not in",
1303
 
                 "is not contained by", "isn't contained by", "div", "mod",
1304
 
                 "not", "(a  )?(ref( to)?|reference to)", "is", "does"]
1305
 
    Control = ['considering', 'else', 'error', 'exit', 'from', 'if',
1306
 
               'ignoring', 'in', 'repeat', 'tell', 'then', 'times', 'to',
1307
 
               'try', 'until', 'using terms from', 'while', 'whith',
1308
 
               'with timeout( of)?', 'with transaction', 'by', 'continue',
1309
 
               'end', 'its?', 'me', 'my', 'return', 'of' , 'as']
1310
 
    Declarations = ['global', 'local', 'prop(erty)?', 'set', 'get']
1311
 
    Reserved = ['but', 'put', 'returning', 'the']
1312
 
    StudioClasses = ['action cell', 'alert reply', 'application', 'box',
1313
 
                     'browser( cell)?', 'bundle', 'button( cell)?', 'cell',
1314
 
                     'clip view', 'color well', 'color-panel',
1315
 
                     'combo box( item)?', 'control',
1316
 
                     'data( (cell|column|item|row|source))?', 'default entry',
1317
 
                     'dialog reply', 'document', 'drag info', 'drawer',
1318
 
                     'event', 'font(-panel)?', 'formatter',
1319
 
                     'image( (cell|view))?', 'matrix', 'menu( item)?', 'item',
1320
 
                     'movie( view)?', 'open-panel', 'outline view', 'panel',
1321
 
                     'pasteboard', 'plugin', 'popup button',
1322
 
                     'progress indicator', 'responder', 'save-panel',
1323
 
                     'scroll view', 'secure text field( cell)?', 'slider',
1324
 
                     'sound', 'split view', 'stepper', 'tab view( item)?',
1325
 
                     'table( (column|header cell|header view|view))',
1326
 
                     'text( (field( cell)?|view))?', 'toolbar( item)?',
1327
 
                     'user-defaults', 'view', 'window']
1328
 
    StudioEvents = ['accept outline drop', 'accept table drop', 'action',
1329
 
                    'activated', 'alert ended', 'awake from nib', 'became key',
1330
 
                    'became main', 'begin editing', 'bounds changed',
1331
 
                    'cell value', 'cell value changed', 'change cell value',
1332
 
                    'change item value', 'changed', 'child of item',
1333
 
                    'choose menu item', 'clicked', 'clicked toolbar item',
1334
 
                    'closed', 'column clicked', 'column moved',
1335
 
                    'column resized', 'conclude drop', 'data representation',
1336
 
                    'deminiaturized', 'dialog ended', 'document nib name',
1337
 
                    'double clicked', 'drag( (entered|exited|updated))?',
1338
 
                    'drop', 'end editing', 'exposed', 'idle', 'item expandable',
1339
 
                    'item value', 'item value changed', 'items changed',
1340
 
                    'keyboard down', 'keyboard up', 'launched',
1341
 
                    'load data representation', 'miniaturized', 'mouse down',
1342
 
                    'mouse dragged', 'mouse entered', 'mouse exited',
1343
 
                    'mouse moved', 'mouse up', 'moved',
1344
 
                    'number of browser rows', 'number of items',
1345
 
                    'number of rows', 'open untitled', 'opened', 'panel ended',
1346
 
                    'parameters updated', 'plugin loaded', 'prepare drop',
1347
 
                    'prepare outline drag', 'prepare outline drop',
1348
 
                    'prepare table drag', 'prepare table drop',
1349
 
                    'read from file', 'resigned active', 'resigned key',
1350
 
                    'resigned main', 'resized( sub views)?',
1351
 
                    'right mouse down', 'right mouse dragged',
1352
 
                    'right mouse up', 'rows changed', 'scroll wheel',
1353
 
                    'selected tab view item', 'selection changed',
1354
 
                    'selection changing', 'should begin editing',
1355
 
                    'should close', 'should collapse item',
1356
 
                    'should end editing', 'should expand item',
1357
 
                    'should open( untitled)?',
1358
 
                    'should quit( after last window closed)?',
1359
 
                    'should select column', 'should select item',
1360
 
                    'should select row', 'should select tab view item',
1361
 
                    'should selection change', 'should zoom', 'shown',
1362
 
                    'update menu item', 'update parameters',
1363
 
                    'update toolbar item', 'was hidden', 'was miniaturized',
1364
 
                    'will become active', 'will close', 'will dismiss',
1365
 
                    'will display browser cell', 'will display cell',
1366
 
                    'will display item cell', 'will display outline cell',
1367
 
                    'will finish launching', 'will hide', 'will miniaturize',
1368
 
                    'will move', 'will open', 'will pop up', 'will quit',
1369
 
                    'will resign active', 'will resize( sub views)?',
1370
 
                    'will select tab view item', 'will show', 'will zoom',
1371
 
                    'write to file', 'zoomed']
1372
 
    StudioCommands = ['animate', 'append', 'call method', 'center',
1373
 
                      'close drawer', 'close panel', 'display',
1374
 
                      'display alert', 'display dialog', 'display panel', 'go',
1375
 
                      'hide', 'highlight', 'increment', 'item for',
1376
 
                      'load image', 'load movie', 'load nib', 'load panel',
1377
 
                      'load sound', 'localized string', 'lock focus', 'log',
1378
 
                      'open drawer', 'path for', 'pause', 'perform action',
1379
 
                      'play', 'register', 'resume', 'scroll', 'select( all)?',
1380
 
                      'show', 'size to fit', 'start', 'step back',
1381
 
                      'step forward', 'stop', 'synchronize', 'unlock focus',
1382
 
                      'update']
1383
 
    StudioProperties = ['accepts arrow key', 'action method', 'active',
1384
 
                        'alignment', 'allowed identifiers',
1385
 
                        'allows branch selection', 'allows column reordering',
1386
 
                        'allows column resizing', 'allows column selection',
1387
 
                        'allows customization',
1388
 
                        'allows editing text attributes',
1389
 
                        'allows empty selection', 'allows mixed state',
1390
 
                        'allows multiple selection', 'allows reordering',
1391
 
                        'allows undo', 'alpha( value)?', 'alternate image',
1392
 
                        'alternate increment value', 'alternate title',
1393
 
                        'animation delay', 'associated file name',
1394
 
                        'associated object', 'auto completes', 'auto display',
1395
 
                        'auto enables items', 'auto repeat',
1396
 
                        'auto resizes( outline column)?',
1397
 
                        'auto save expanded items', 'auto save name',
1398
 
                        'auto save table columns', 'auto saves configuration',
1399
 
                        'auto scroll', 'auto sizes all columns to fit',
1400
 
                        'auto sizes cells', 'background color', 'bezel state',
1401
 
                        'bezel style', 'bezeled', 'border rect', 'border type',
1402
 
                        'bordered', 'bounds( rotation)?', 'box type',
1403
 
                        'button returned', 'button type',
1404
 
                        'can choose directories', 'can choose files',
1405
 
                        'can draw', 'can hide',
1406
 
                        'cell( (background color|size|type))?', 'characters',
1407
 
                        'class', 'click count', 'clicked( data)? column',
1408
 
                        'clicked data item', 'clicked( data)? row',
1409
 
                        'closeable', 'collating', 'color( (mode|panel))',
1410
 
                        'command key down', 'configuration',
1411
 
                        'content(s| (size|view( margins)?))?', 'context',
1412
 
                        'continuous', 'control key down', 'control size',
1413
 
                        'control tint', 'control view',
1414
 
                        'controller visible', 'coordinate system',
1415
 
                        'copies( on scroll)?', 'corner view', 'current cell',
1416
 
                        'current column', 'current( field)?  editor',
1417
 
                        'current( menu)? item', 'current row',
1418
 
                        'current tab view item', 'data source',
1419
 
                        'default identifiers', 'delta (x|y|z)',
1420
 
                        'destination window', 'directory', 'display mode',
1421
 
                        'displayed cell', 'document( (edited|rect|view))?',
1422
 
                        'double value', 'dragged column', 'dragged distance',
1423
 
                        'dragged items', 'draws( cell)? background',
1424
 
                        'draws grid', 'dynamically scrolls', 'echos bullets',
1425
 
                        'edge', 'editable', 'edited( data)? column',
1426
 
                        'edited data item', 'edited( data)? row', 'enabled',
1427
 
                        'enclosing scroll view', 'ending page',
1428
 
                        'error handling', 'event number', 'event type',
1429
 
                        'excluded from windows menu', 'executable path',
1430
 
                        'expanded', 'fax number', 'field editor', 'file kind',
1431
 
                        'file name', 'file type', 'first responder',
1432
 
                        'first visible column', 'flipped', 'floating',
1433
 
                        'font( panel)?', 'formatter', 'frameworks path',
1434
 
                        'frontmost', 'gave up', 'grid color', 'has data items',
1435
 
                        'has horizontal ruler', 'has horizontal scroller',
1436
 
                        'has parent data item', 'has resize indicator',
1437
 
                        'has shadow', 'has sub menu', 'has vertical ruler',
1438
 
                        'has vertical scroller', 'header cell', 'header view',
1439
 
                        'hidden', 'hides when deactivated', 'highlights by',
1440
 
                        'horizontal line scroll', 'horizontal page scroll',
1441
 
                        'horizontal ruler view', 'horizontally resizable',
1442
 
                        'icon image', 'id', 'identifier',
1443
 
                        'ignores multiple clicks',
1444
 
                        'image( (alignment|dims when disabled|frame style|'
1445
 
                            'scaling))?',
1446
 
                        'imports graphics', 'increment value',
1447
 
                        'indentation per level', 'indeterminate', 'index',
1448
 
                        'integer value', 'intercell spacing', 'item height',
1449
 
                        'key( (code|equivalent( modifier)?|window))?',
1450
 
                        'knob thickness', 'label', 'last( visible)? column',
1451
 
                        'leading offset', 'leaf', 'level', 'line scroll',
1452
 
                        'loaded', 'localized sort', 'location', 'loop mode',
1453
 
                        'main( (bunde|menu|window))?', 'marker follows cell',
1454
 
                        'matrix mode', 'maximum( content)? size',
1455
 
                        'maximum visible columns',
1456
 
                        'menu( form representation)?', 'miniaturizable',
1457
 
                        'miniaturized', 'minimized image', 'minimized title',
1458
 
                        'minimum column width', 'minimum( content)? size',
1459
 
                        'modal', 'modified', 'mouse down state',
1460
 
                        'movie( (controller|file|rect))?', 'muted', 'name',
1461
 
                        'needs display', 'next state', 'next text',
1462
 
                        'number of tick marks', 'only tick mark values',
1463
 
                        'opaque', 'open panel', 'option key down',
1464
 
                        'outline table column', 'page scroll', 'pages across',
1465
 
                        'pages down', 'palette label', 'pane splitter',
1466
 
                        'parent data item', 'parent window', 'pasteboard',
1467
 
                        'path( (names|separator))?', 'playing',
1468
 
                        'plays every frame', 'plays selection only', 'position',
1469
 
                        'preferred edge', 'preferred type', 'pressure',
1470
 
                        'previous text', 'prompt', 'properties',
1471
 
                        'prototype cell', 'pulls down', 'rate',
1472
 
                        'released when closed', 'repeated',
1473
 
                        'requested print time', 'required file type',
1474
 
                        'resizable', 'resized column', 'resource path',
1475
 
                        'returns records', 'reuses columns', 'rich text',
1476
 
                        'roll over', 'row height', 'rulers visible',
1477
 
                        'save panel', 'scripts path', 'scrollable',
1478
 
                        'selectable( identifiers)?', 'selected cell',
1479
 
                        'selected( data)? columns?', 'selected data items?',
1480
 
                        'selected( data)? rows?', 'selected item identifier',
1481
 
                        'selection by rect', 'send action on arrow key',
1482
 
                        'sends action when done editing', 'separates columns',
1483
 
                        'separator item', 'sequence number', 'services menu',
1484
 
                        'shared frameworks path', 'shared support path',
1485
 
                        'sheet', 'shift key down', 'shows alpha',
1486
 
                        'shows state by', 'size( mode)?',
1487
 
                        'smart insert delete enabled', 'sort case sensitivity',
1488
 
                        'sort column', 'sort order', 'sort type',
1489
 
                        'sorted( data rows)?', 'sound', 'source( mask)?',
1490
 
                        'spell checking enabled', 'starting page', 'state',
1491
 
                        'string value', 'sub menu', 'super menu', 'super view',
1492
 
                        'tab key traverses cells', 'tab state', 'tab type',
1493
 
                        'tab view', 'table view', 'tag', 'target( printer)?',
1494
 
                        'text color', 'text container insert',
1495
 
                        'text container origin', 'text returned',
1496
 
                        'tick mark position', 'time stamp',
1497
 
                        'title(d| (cell|font|height|position|rect))?',
1498
 
                        'tool tip', 'toolbar', 'trailing offset', 'transparent',
1499
 
                        'treat packages as directories', 'truncated labels',
1500
 
                        'types', 'unmodified characters', 'update views',
1501
 
                        'use sort indicator', 'user defaults',
1502
 
                        'uses data source', 'uses ruler',
1503
 
                        'uses threaded animation',
1504
 
                        'uses title from previous column', 'value wraps',
1505
 
                        'version',
1506
 
                        'vertical( (line scroll|page scroll|ruler view))?',
1507
 
                        'vertically resizable', 'view',
1508
 
                        'visible( document rect)?', 'volume', 'width', 'window',
1509
 
                        'windows menu', 'wraps', 'zoomable', 'zoomed']
1510
 
 
1511
 
    tokens = {
1512
 
        'root': [
1513
 
            (r'\s+', Text),
1514
 
            (ur'¬\n', String.Escape),
1515
 
            (r"'s\s+", Text), # This is a possessive, consider moving
1516
 
            (r'(--|#).*?$', Comment),
1517
 
            (r'\(\*', Comment.Multiline, 'comment'),
1518
 
            (r'[\(\){}!,.:]', Punctuation),
1519
 
            (ur'(«)([^»]+)(»)',
1520
 
             bygroups(Text, Name.Builtin, Text)),
1521
 
            (r'\b((?:considering|ignoring)\s*)'
1522
 
             r'(application responses|case|diacriticals|hyphens|'
1523
 
             r'numeric strings|punctuation|white space)',
1524
 
             bygroups(Keyword, Name.Builtin)),
1525
 
            (ur'(-|\*|\+|&|≠|>=?|<=?|=|≥|≤|/|÷|\^)', Operator),
1526
 
            (r"\b(%s)\b" % '|'.join(Operators), Operator.Word),
1527
 
            (r'^(\s*(?:on|end)\s+)'
1528
 
             r'(%s)' % '|'.join(StudioEvents),
1529
 
             bygroups(Keyword, Name.Function)),
1530
 
            (r'^(\s*)(in|on|script|to)(\s+)', bygroups(Text, Keyword, Text)),
1531
 
            (r'\b(as )(%s)\b' % '|'.join(Classes),
1532
 
             bygroups(Keyword, Name.Class)),
1533
 
            (r'\b(%s)\b' % '|'.join(Literals), Name.Constant),
1534
 
            (r'\b(%s)\b' % '|'.join(Commands), Name.Builtin),
1535
 
            (r'\b(%s)\b' % '|'.join(Control), Keyword),
1536
 
            (r'\b(%s)\b' % '|'.join(Declarations), Keyword),
1537
 
            (r'\b(%s)\b' % '|'.join(Reserved), Name.Builtin),
1538
 
            (r'\b(%s)s?\b' % '|'.join(BuiltIn), Name.Builtin),
1539
 
            (r'\b(%s)\b' % '|'.join(HandlerParams), Name.Builtin),
1540
 
            (r'\b(%s)\b' % '|'.join(StudioProperties), Name.Attribute),
1541
 
            (r'\b(%s)s?\b' % '|'.join(StudioClasses), Name.Builtin),
1542
 
            (r'\b(%s)\b' % '|'.join(StudioCommands), Name.Builtin),
1543
 
            (r'\b(%s)\b' % '|'.join(References), Name.Builtin),
1544
 
            (r'"(\\\\|\\"|[^"])*"', String.Double),
1545
 
            (r'\b(%s)\b' % Identifiers, Name.Variable),
1546
 
            (r'[-+]?(\d+\.\d*|\d*\.\d+)(E[-+][0-9]+)?', Number.Float),
1547
 
            (r'[-+]?\d+', Number.Integer),
1548
 
        ],
1549
 
        'comment': [
1550
 
            ('\(\*', Comment.Multiline, '#push'),
1551
 
            ('\*\)', Comment.Multiline, '#pop'),
1552
 
            ('[^*(]+', Comment.Multiline),
1553
 
            ('[*(]', Comment.Multiline),
1554
 
        ],
1555
 
    }
1556
 
 
1557
 
 
1558
 
class ModelicaLexer(RegexLexer):
1559
 
    """
1560
 
    For `Modelica <http://www.modelica.org/>`_ source code.
1561
 
 
1562
 
    *New in Pygments 1.1.*
1563
 
    """
1564
 
    name = 'Modelica'
1565
 
    aliases = ['modelica']
1566
 
    filenames = ['*.mo']
1567
 
    mimetypes = ['text/x-modelica']
1568
 
 
1569
 
    flags = re.IGNORECASE | re.DOTALL
1570
 
 
1571
 
    tokens = {
1572
 
        'whitespace': [
1573
 
            (r'\n', Text),
1574
 
            (r'\s+', Text),
1575
 
            (r'\\\n', Text), # line continuation
1576
 
            (r'//(\n|(.|\n)*?[^\\]\n)', Comment),
1577
 
            (r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment),
1578
 
        ],
1579
 
        'statements': [
1580
 
            (r'"', String, 'string'),
1581
 
            (r'(\d+\.\d*|\.\d+|\d+|\d.)[eE][+-]?\d+[lL]?', Number.Float),
1582
 
            (r'(\d+\.\d*|\.\d+)', Number.Float),
1583
 
            (r'\d+[Ll]?', Number.Integer),
1584
 
            (r'[~!%^&*+=|?:<>/-]', Operator),
1585
 
            (r'[()\[\]{},.;]', Punctuation),
1586
 
            (r'(true|false|NULL|Real|Integer|Boolean)\b', Name.Builtin),
1587
 
            (r"([a-zA-Z_][\w]*|'[a-zA-Z_\+\-\*\/\^][\w]*')"
1588
 
             r"(\.([a-zA-Z_][\w]*|'[a-zA-Z_\+\-\*\/\^][\w]*'))+", Name.Class),
1589
 
            (r"('[\w\+\-\*\/\^]+'|\w+)", Name)        ],
1590
 
        'root': [
1591
 
            include('whitespace'),
1592
 
            include('keywords'),
1593
 
            include('functions'),
1594
 
            include('operators'),
1595
 
            include('classes'),
1596
 
            (r'("<html>|<html>)', Name.Tag, 'html-content'),
1597
 
            include('statements')
1598
 
        ],
1599
 
        'keywords': [
1600
 
            (r'(algorithm|annotation|break|connect|constant|constrainedby|'
1601
 
            r'discrete|each|else|elseif|elsewhen|encapsulated|enumeration|'
1602
 
            r'end|equation|exit|expandable|extends|'
1603
 
            r'external|false|final|flow|for|if|import|in|inner|input|'
1604
 
            r'loop|nondiscrete|outer|output|parameter|partial|'
1605
 
            r'protected|public|redeclare|replaceable|stream|time|then|true|'
1606
 
            r'when|while|within)\b', Keyword)
1607
 
        ],
1608
 
        'functions': [
1609
 
            (r'(abs|acos|acosh|asin|asinh|atan|atan2|atan3|ceil|cos|cosh|'
1610
 
             r'cross|div|exp|floor|log|log10|mod|rem|sign|sin|sinh|size|'
1611
 
             r'sqrt|tan|tanh|zeros)\b', Name.Function)
1612
 
        ],
1613
 
        'operators': [
1614
 
            (r'(and|assert|cardinality|change|delay|der|edge|initial|'
1615
 
             r'noEvent|not|or|pre|reinit|return|sample|smooth|'
1616
 
             r'terminal|terminate)\b', Name.Builtin)
1617
 
        ],
1618
 
        'classes': [
1619
 
            (r'(block|class|connector|function|model|package|'
1620
 
             r'record|type)\b', Name.Class)
1621
 
        ],
1622
 
        'string': [
1623
 
            (r'"', String, '#pop'),
1624
 
            (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})',
1625
 
             String.Escape),
1626
 
            (r'[^\\"\n]+', String), # all other characters
1627
 
            (r'\\\n', String), # line continuation
1628
 
            (r'\\', String) # stray backslash
1629
 
        ],
1630
 
        'html-content': [
1631
 
            (r'<\s*/\s*html\s*>', Name.Tag, '#pop'),
1632
 
            (r'.+?(?=<\s*/\s*html\s*>)', using(HtmlLexer)),
1633
 
        ]
1634
 
    }
1635
 
 
1636
 
 
1637
 
class RebolLexer(RegexLexer):
1638
 
    """
1639
 
    A `REBOL <http://www.rebol.com/>`_ lexer.
1640
 
 
1641
 
    *New in Pygments 1.1.*
1642
 
    """
1643
 
    name = 'REBOL'
1644
 
    aliases = ['rebol']
1645
 
    filenames = ['*.r', '*.r3']
1646
 
    mimetypes = ['text/x-rebol']
1647
 
 
1648
 
    flags = re.IGNORECASE | re.MULTILINE
1649
 
 
1650
 
    re.IGNORECASE
1651
 
 
1652
 
    escape_re = r'(?:\^\([0-9a-fA-F]{1,4}\)*)'
1653
 
 
1654
 
    def word_callback(lexer, match):
1655
 
        word = match.group()
1656
 
 
1657
 
        if re.match(".*:$", word):
1658
 
            yield match.start(), Generic.Subheading, word
1659
 
        elif re.match(
1660
 
            r'(native|alias|all|any|as-string|as-binary|bind|bound\?|case|'
1661
 
            r'catch|checksum|comment|debase|dehex|exclude|difference|disarm|'
1662
 
            r'either|else|enbase|foreach|remove-each|form|free|get|get-env|if|'
1663
 
            r'in|intersect|loop|minimum-of|maximum-of|mold|new-line|'
1664
 
            r'new-line\?|not|now|prin|print|reduce|compose|construct|repeat|'
1665
 
            r'reverse|save|script\?|set|shift|switch|throw|to-hex|trace|try|'
1666
 
            r'type\?|union|unique|unless|unprotect|unset|until|use|value\?|'
1667
 
            r'while|compress|decompress|secure|open|close|read|read-io|'
1668
 
            r'write-io|write|update|query|wait|input\?|exp|log-10|log-2|'
1669
 
            r'log-e|square-root|cosine|sine|tangent|arccosine|arcsine|'
1670
 
            r'arctangent|protect|lowercase|uppercase|entab|detab|connected\?|'
1671
 
            r'browse|launch|stats|get-modes|set-modes|to-local-file|'
1672
 
            r'to-rebol-file|encloak|decloak|create-link|do-browser|bind\?|'
1673
 
            r'hide|draw|show|size-text|textinfo|offset-to-caret|'
1674
 
            r'caret-to-offset|local-request-file|rgb-to-hsv|hsv-to-rgb|'
1675
 
            r'crypt-strength\?|dh-make-key|dh-generate-key|dh-compute-key|'
1676
 
            r'dsa-make-key|dsa-generate-key|dsa-make-signature|'
1677
 
            r'dsa-verify-signature|rsa-make-key|rsa-generate-key|'
1678
 
            r'rsa-encrypt)$', word):
1679
 
            yield match.start(), Name.Builtin, word
1680
 
        elif re.match(
1681
 
            r'(add|subtract|multiply|divide|remainder|power|and~|or~|xor~|'
1682
 
            r'minimum|maximum|negate|complement|absolute|random|head|tail|'
1683
 
            r'next|back|skip|at|pick|first|second|third|fourth|fifth|sixth|'
1684
 
            r'seventh|eighth|ninth|tenth|last|path|find|select|make|to|copy\*|'
1685
 
            r'insert|remove|change|poke|clear|trim|sort|min|max|abs|cp|'
1686
 
            r'copy)$', word):
1687
 
            yield match.start(), Name.Function, word
1688
 
        elif re.match(
1689
 
            r'(error|source|input|license|help|install|echo|Usage|with|func|'
1690
 
            r'throw-on-error|function|does|has|context|probe|\?\?|as-pair|'
1691
 
            r'mod|modulo|round|repend|about|set-net|append|join|rejoin|reform|'
1692
 
            r'remold|charset|array|replace|move|extract|forskip|forall|alter|'
1693
 
            r'first+|also|take|for|forever|dispatch|attempt|what-dir|'
1694
 
            r'change-dir|clean-path|list-dir|dirize|rename|split-path|delete|'
1695
 
            r'make-dir|delete-dir|in-dir|confirm|dump-obj|upgrade|what|'
1696
 
            r'build-tag|process-source|build-markup|decode-cgi|read-cgi|'
1697
 
            r'write-user|save-user|set-user-name|protect-system|parse-xml|'
1698
 
            r'cvs-date|cvs-version|do-boot|get-net-info|desktop|layout|'
1699
 
            r'scroll-para|get-face|alert|set-face|uninstall|unfocus|'
1700
 
            r'request-dir|center-face|do-events|net-error|decode-url|'
1701
 
            r'parse-header|parse-header-date|parse-email-addrs|import-email|'
1702
 
            r'send|build-attach-body|resend|show-popup|hide-popup|open-events|'
1703
 
            r'find-key-face|do-face|viewtop|confine|find-window|'
1704
 
            r'insert-event-func|remove-event-func|inform|dump-pane|dump-face|'
1705
 
            r'flag-face|deflag-face|clear-fields|read-net|vbug|path-thru|'
1706
 
            r'read-thru|load-thru|do-thru|launch-thru|load-image|'
1707
 
            r'request-download|do-face-alt|set-font|set-para|get-style|'
1708
 
            r'set-style|make-face|stylize|choose|hilight-text|hilight-all|'
1709
 
            r'unlight-text|focus|scroll-drag|clear-face|reset-face|scroll-face|'
1710
 
            r'resize-face|load-stock|load-stock-block|notify|request|flash|'
1711
 
            r'request-color|request-pass|request-text|request-list|'
1712
 
            r'request-date|request-file|dbug|editor|link-relative-path|'
1713
 
            r'emailer|parse-error)$', word):
1714
 
            yield match.start(), Keyword.Namespace, word
1715
 
        elif re.match(
1716
 
            r'(halt|quit|do|load|q|recycle|call|run|ask|parse|view|unview|'
1717
 
            r'return|exit|break)$', word):
1718
 
            yield match.start(), Name.Exception, word
1719
 
        elif re.match('REBOL$', word):
1720
 
            yield match.start(), Generic.Heading, word
1721
 
        elif re.match("to-.*", word):
1722
 
            yield match.start(), Keyword, word
1723
 
        elif re.match('(\+|-|\*|/|//|\*\*|and|or|xor|=\?|=|==|<>|<|>|<=|>=)$',
1724
 
                      word):
1725
 
            yield match.start(), Operator, word
1726
 
        elif re.match(".*\?$", word):
1727
 
            yield match.start(), Keyword, word
1728
 
        elif re.match(".*\!$", word):
1729
 
            yield match.start(), Keyword.Type, word
1730
 
        elif re.match("'.*", word):
1731
 
            yield match.start(), Name.Variable.Instance, word # lit-word
1732
 
        elif re.match("#.*", word):
1733
 
            yield match.start(), Name.Label, word # issue
1734
 
        elif re.match("%.*", word):
1735
 
            yield match.start(), Name.Decorator, word # file
1736
 
        else:
1737
 
            yield match.start(), Name.Variable, word
1738
 
 
1739
 
    tokens = {
1740
 
        'root': [
1741
 
            (r'\s+', Text),
1742
 
            (r'#"', String.Char, 'char'),
1743
 
            (r'#{[0-9a-fA-F]*}', Number.Hex),
1744
 
            (r'2#{', Number.Hex, 'bin2'),
1745
 
            (r'64#{[0-9a-zA-Z+/=\s]*}', Number.Hex),
1746
 
            (r'"', String, 'string'),
1747
 
            (r'{', String, 'string2'),
1748
 
            (r';#+.*\n', Comment.Special),
1749
 
            (r';\*+.*\n', Comment.Preproc),
1750
 
            (r';.*\n', Comment),
1751
 
            (r'%"', Name.Decorator, 'stringFile'),
1752
 
            (r'%[^(\^{^")\s\[\]]+', Name.Decorator),
1753
 
            (r'<[a-zA-Z0-9:._-]*>', Name.Tag),
1754
 
            (r'<[^(<>\s")]+', Name.Tag, 'tag'),
1755
 
            (r'[+-]?([a-zA-Z]{1,3})?\$\d+(\.\d+)?', Number.Float), # money
1756
 
            (r'[+-]?\d+\:\d+(\:\d+)?(\.\d+)?', String.Other), # time
1757
 
            (r'\d+\-[0-9a-zA-Z]+\-\d+(\/\d+\:\d+(\:\d+)?'
1758
 
             r'([\.\d+]?([+-]?\d+:\d+)?)?)?', String.Other), # date
1759
 
            (r'\d+(\.\d+)+\.\d+', Keyword.Constant), # tuple
1760
 
            (r'\d+[xX]\d+', Keyword.Constant), # pair
1761
 
            (r'[+-]?\d+(\'\d+)?([\.,]\d*)?[eE][+-]?\d+', Number.Float),
1762
 
            (r'[+-]?\d+(\'\d+)?[\.,]\d*', Number.Float),
1763
 
            (r'[+-]?\d+(\'\d+)?', Number),
1764
 
            (r'[\[\]\(\)]', Generic.Strong),
1765
 
            (r'[a-zA-Z]+[^(\^{"\s:)]*://[^(\^{"\s)]*', Name.Decorator), # url
1766
 
            (r'mailto:[^(\^{"@\s)]+@[^(\^{"@\s)]+', Name.Decorator), # url
1767
 
            (r'[^(\^{"@\s)]+@[^(\^{"@\s)]+', Name.Decorator), # email
1768
 
            (r'comment\s', Comment, 'comment'),
1769
 
            (r'/[^(\^{^")\s/[\]]*', Name.Attribute),
1770
 
            (r'([^(\^{^")\s/[\]]+)(?=[:({"\s/\[\]])', word_callback),
1771
 
            (r'([^(\^{^")\s]+)', Text),
1772
 
        ],
1773
 
        'string': [
1774
 
            (r'[^(\^")]+', String),
1775
 
            (escape_re, String.Escape),
1776
 
            (r'[\(|\)]+', String),
1777
 
            (r'\^.', String.Escape),
1778
 
            (r'"', String, '#pop'),
1779
 
        ],
1780
 
        'string2': [
1781
 
            (r'[^(\^{^})]+', String),
1782
 
            (escape_re, String.Escape),
1783
 
            (r'[\(|\)]+', String),
1784
 
            (r'\^.', String.Escape),
1785
 
            (r'{', String, '#push'),
1786
 
            (r'}', String, '#pop'),
1787
 
        ],
1788
 
        'stringFile': [
1789
 
            (r'[^(\^")]+', Name.Decorator),
1790
 
            (escape_re, Name.Decorator),
1791
 
            (r'\^.', Name.Decorator),
1792
 
            (r'"', Name.Decorator, '#pop'),
1793
 
        ],
1794
 
        'char': [
1795
 
            (escape_re + '"', String.Char, '#pop'),
1796
 
            (r'\^."', String.Char, '#pop'),
1797
 
            (r'."', String.Char, '#pop'),
1798
 
        ],
1799
 
        'tag': [
1800
 
            (escape_re, Name.Tag),
1801
 
            (r'"', Name.Tag, 'tagString'),
1802
 
            (r'[^(<>\r\n")]+', Name.Tag),
1803
 
            (r'>', Name.Tag, '#pop'),
1804
 
        ],
1805
 
        'tagString': [
1806
 
            (r'[^(\^")]+', Name.Tag),
1807
 
            (escape_re, Name.Tag),
1808
 
            (r'[\(|\)]+', Name.Tag),
1809
 
            (r'\^.', Name.Tag),
1810
 
            (r'"', Name.Tag, '#pop'),
1811
 
        ],
1812
 
        'tuple': [
1813
 
            (r'(\d+\.)+', Keyword.Constant),
1814
 
            (r'\d+', Keyword.Constant, '#pop'),
1815
 
        ],
1816
 
        'bin2': [
1817
 
            (r'\s+', Number.Hex),
1818
 
            (r'([0-1]\s*){8}', Number.Hex),
1819
 
            (r'}', Number.Hex, '#pop'),
1820
 
        ],
1821
 
        'comment': [
1822
 
            (r'"', Comment, 'commentString1'),
1823
 
            (r'{', Comment, 'commentString2'),
1824
 
            (r'\[', Comment, 'commentBlock'),
1825
 
            (r'[^(\s{\"\[]+', Comment, '#pop'),
1826
 
        ],
1827
 
        'commentString1': [
1828
 
            (r'[^(\^")]+', Comment),
1829
 
            (escape_re, Comment),
1830
 
            (r'[\(|\)]+', Comment),
1831
 
            (r'\^.', Comment),
1832
 
            (r'"', Comment, '#pop'),
1833
 
        ],
1834
 
        'commentString2': [
1835
 
            (r'[^(\^{^})]+', Comment),
1836
 
            (escape_re, Comment),
1837
 
            (r'[\(|\)]+', Comment),
1838
 
            (r'\^.', Comment),
1839
 
            (r'{', Comment, '#push'),
1840
 
            (r'}', Comment, '#pop'),
1841
 
        ],
1842
 
        'commentBlock': [
1843
 
            (r'\[',Comment, '#push'),
1844
 
            (r'\]',Comment, '#pop'),
1845
 
            (r'[^(\[\])]*', Comment),
1846
 
        ],
1847
 
    }
1848
 
 
1849
 
 
1850
 
class ABAPLexer(RegexLexer):
1851
 
    """
1852
 
    Lexer for ABAP, SAP's integrated language.
1853
 
 
1854
 
    *New in Pygments 1.1.*
1855
 
    """
1856
 
    name = 'ABAP'
1857
 
    aliases = ['abap']
1858
 
    filenames = ['*.abap']
1859
 
    mimetypes = ['text/x-abap']
1860
 
 
1861
 
    flags = re.IGNORECASE | re.MULTILINE
1862
 
 
1863
 
    tokens = {
1864
 
        'common': [
1865
 
            (r'\s+', Text),
1866
 
            (r'^\*.*$', Comment.Single),
1867
 
            (r'\".*?\n', Comment.Single),
1868
 
            ],
1869
 
        'variable-names': [
1870
 
            (r'<[\S_]+>', Name.Variable),
1871
 
            (r'[\w][\w_~]*(?:(\[\])|->\*)?', Name.Variable),
1872
 
            ],
1873
 
        'root': [
1874
 
            include('common'),
1875
 
            #function calls
1876
 
            (r'(CALL\s+(?:BADI|CUSTOMER-FUNCTION|FUNCTION))(\s+)(\'?\S+\'?)',
1877
 
                bygroups(Keyword, Text, Name.Function)),
1878
 
            (r'(CALL\s+(?:DIALOG|SCREEN|SUBSCREEN|SELECTION-SCREEN|'
1879
 
             r'TRANSACTION|TRANSFORMATION))\b',
1880
 
                Keyword),
1881
 
            (r'(FORM|PERFORM)(\s+)([\w_]+)',
1882
 
                bygroups(Keyword, Text, Name.Function)),
1883
 
            (r'(PERFORM)(\s+)(\()([\w_]+)(\))',
1884
 
                bygroups(Keyword, Text, Punctuation, Name.Variable, Punctuation )),
1885
 
            (r'(MODULE)(\s+)(\S+)(\s+)(INPUT|OUTPUT)',
1886
 
                bygroups(Keyword, Text, Name.Function, Text, Keyword)),
1887
 
 
1888
 
            # method implementation
1889
 
            (r'(METHOD)(\s+)([\w_~]+)',
1890
 
                bygroups(Keyword, Text, Name.Function)),
1891
 
            # method calls
1892
 
            (r'(\s+)([\w_\-]+)([=\-]>)([\w_\-~]+)',
1893
 
                bygroups(Text, Name.Variable, Operator, Name.Function)),
1894
 
            # call methodnames returning style
1895
 
            (r'(?<=(=|-)>)([\w_\-~]+)(?=\()', Name.Function),
1896
 
 
1897
 
            # keywords with dashes in them.
1898
 
            # these need to be first, because for instance the -ID part
1899
 
            # of MESSAGE-ID wouldn't get highlighted if MESSAGE was
1900
 
            # first in the list of keywords.
1901
 
            (r'(ADD-CORRESPONDING|AUTHORITY-CHECK|'
1902
 
             r'CLASS-DATA|CLASS-EVENTS|CLASS-METHODS|CLASS-POOL|'
1903
 
             r'DELETE-ADJACENT|DIVIDE-CORRESPONDING|'
1904
 
             r'EDITOR-CALL|ENHANCEMENT-POINT|ENHANCEMENT-SECTION|EXIT-COMMAND|'
1905
 
             r'FIELD-GROUPS|FIELD-SYMBOLS|FUNCTION-POOL|'
1906
 
             r'INTERFACE-POOL|INVERTED-DATE|'
1907
 
             r'LOAD-OF-PROGRAM|LOG-POINT|'
1908
 
             r'MESSAGE-ID|MOVE-CORRESPONDING|MULTIPLY-CORRESPONDING|'
1909
 
             r'NEW-LINE|NEW-PAGE|NEW-SECTION|NO-EXTENSION|'
1910
 
             r'OUTPUT-LENGTH|PRINT-CONTROL|'
1911
 
             r'SELECT-OPTIONS|START-OF-SELECTION|SUBTRACT-CORRESPONDING|'
1912
 
             r'SYNTAX-CHECK|SYSTEM-EXCEPTIONS|'
1913
 
             r'TYPE-POOL|TYPE-POOLS'
1914
 
             r')\b', Keyword),
1915
 
 
1916
 
             # keyword kombinations
1917
 
            (r'CREATE\s+(PUBLIC|PRIVATE|DATA|OBJECT)|'
1918
 
             r'((PUBLIC|PRIVATE|PROTECTED)\s+SECTION|'
1919
 
             r'(TYPE|LIKE)(\s+(LINE\s+OF|REF\s+TO|'
1920
 
             r'(SORTED|STANDARD|HASHED)\s+TABLE\s+OF))?|'
1921
 
             r'FROM\s+(DATABASE|MEMORY)|CALL\s+METHOD|'
1922
 
             r'(GROUP|ORDER) BY|HAVING|SEPARATED BY|'
1923
 
             r'GET\s+(BADI|BIT|CURSOR|DATASET|LOCALE|PARAMETER|'
1924
 
                      r'PF-STATUS|(PROPERTY|REFERENCE)\s+OF|'
1925
 
                      r'RUN\s+TIME|TIME\s+(STAMP)?)?|'
1926
 
             r'SET\s+(BIT|BLANK\s+LINES|COUNTRY|CURSOR|DATASET|EXTENDED\s+CHECK|'
1927
 
                      r'HANDLER|HOLD\s+DATA|LANGUAGE|LEFT\s+SCROLL-BOUNDARY|'
1928
 
                      r'LOCALE|MARGIN|PARAMETER|PF-STATUS|PROPERTY\s+OF|'
1929
 
                      r'RUN\s+TIME\s+(ANALYZER|CLOCK\s+RESOLUTION)|SCREEN|'
1930
 
                      r'TITLEBAR|UPADTE\s+TASK\s+LOCAL|USER-COMMAND)|'
1931
 
             r'CONVERT\s+((INVERTED-)?DATE|TIME|TIME\s+STAMP|TEXT)|'
1932
 
             r'(CLOSE|OPEN)\s+(DATASET|CURSOR)|'
1933
 
             r'(TO|FROM)\s+(DATA BUFFER|INTERNAL TABLE|MEMORY ID|'
1934
 
                            r'DATABASE|SHARED\s+(MEMORY|BUFFER))|'
1935
 
             r'DESCRIBE\s+(DISTANCE\s+BETWEEN|FIELD|LIST|TABLE)|'
1936
 
             r'FREE\s(MEMORY|OBJECT)?|'
1937
 
             r'PROCESS\s+(BEFORE\s+OUTPUT|AFTER\s+INPUT|'
1938
 
                          r'ON\s+(VALUE-REQUEST|HELP-REQUEST))|'
1939
 
             r'AT\s+(LINE-SELECTION|USER-COMMAND|END\s+OF|NEW)|'
1940
 
             r'AT\s+SELECTION-SCREEN(\s+(ON(\s+(BLOCK|(HELP|VALUE)-REQUEST\s+FOR|'
1941
 
                                     r'END\s+OF|RADIOBUTTON\s+GROUP))?|OUTPUT))?|'
1942
 
             r'SELECTION-SCREEN:?\s+((BEGIN|END)\s+OF\s+((TABBED\s+)?BLOCK|LINE|'
1943
 
                                     r'SCREEN)|COMMENT|FUNCTION\s+KEY|'
1944
 
                                     r'INCLUDE\s+BLOCKS|POSITION|PUSHBUTTON|'
1945
 
                                     r'SKIP|ULINE)|'
1946
 
             r'LEAVE\s+(LIST-PROCESSING|PROGRAM|SCREEN|'
1947
 
                        r'TO LIST-PROCESSING|TO TRANSACTION)'
1948
 
             r'(ENDING|STARTING)\s+AT|'
1949
 
             r'FORMAT\s+(COLOR|INTENSIFIED|INVERSE|HOTSPOT|INPUT|FRAMES|RESET)|'
1950
 
             r'AS\s+(CHECKBOX|SUBSCREEN|WINDOW)|'
1951
 
             r'WITH\s+(((NON-)?UNIQUE)?\s+KEY|FRAME)|'
1952
 
             r'(BEGIN|END)\s+OF|'
1953
 
             r'DELETE(\s+ADJACENT\s+DUPLICATES\sFROM)?|'
1954
 
             r'COMPARING(\s+ALL\s+FIELDS)?|'
1955
 
             r'INSERT(\s+INITIAL\s+LINE\s+INTO|\s+LINES\s+OF)?|'
1956
 
             r'IN\s+((BYTE|CHARACTER)\s+MODE|PROGRAM)|'
1957
 
             r'END-OF-(DEFINITION|PAGE|SELECTION)|'
1958
 
             r'WITH\s+FRAME(\s+TITLE)|'
1959
 
 
1960
 
             # simple kombinations
1961
 
             r'AND\s+(MARK|RETURN)|CLIENT\s+SPECIFIED|CORRESPONDING\s+FIELDS\s+OF|'
1962
 
             r'IF\s+FOUND|FOR\s+EVENT|INHERITING\s+FROM|LEAVE\s+TO\s+SCREEN|'
1963
 
             r'LOOP\s+AT\s+(SCREEN)?|LOWER\s+CASE|MATCHCODE\s+OBJECT|MODIF\s+ID|'
1964
 
             r'MODIFY\s+SCREEN|NESTING\s+LEVEL|NO\s+INTERVALS|OF\s+STRUCTURE|'
1965
 
             r'RADIOBUTTON\s+GROUP|RANGE\s+OF|REF\s+TO|SUPPRESS DIALOG|'
1966
 
             r'TABLE\s+OF|UPPER\s+CASE|TRANSPORTING\s+NO\s+FIELDS|'
1967
 
             r'VALUE\s+CHECK|VISIBLE\s+LENGTH|HEADER\s+LINE)\b', Keyword),
1968
 
 
1969
 
            # single word keywords.
1970
 
            (r'(^|(?<=(\s|\.)))(ABBREVIATED|ADD|ALIASES|APPEND|ASSERT|'
1971
 
             r'ASSIGN(ING)?|AT(\s+FIRST)?|'
1972
 
             r'BACK|BLOCK|BREAK-POINT|'
1973
 
             r'CASE|CATCH|CHANGING|CHECK|CLASS|CLEAR|COLLECT|COLOR|COMMIT|'
1974
 
             r'CREATE|COMMUNICATION|COMPONENTS?|COMPUTE|CONCATENATE|CONDENSE|'
1975
 
             r'CONSTANTS|CONTEXTS|CONTINUE|CONTROLS|'
1976
 
             r'DATA|DECIMALS|DEFAULT|DEFINE|DEFINITION|DEFERRED|DEMAND|'
1977
 
             r'DETAIL|DIRECTORY|DIVIDE|DO|'
1978
 
             r'ELSE(IF)?|ENDAT|ENDCASE|ENDCLASS|ENDDO|ENDFORM|ENDFUNCTION|'
1979
 
             r'ENDIF|ENDLOOP|ENDMETHOD|ENDMODULE|ENDSELECT|ENDTRY|'
1980
 
             r'ENHANCEMENT|EVENTS|EXCEPTIONS|EXIT|EXPORT|EXPORTING|EXTRACT|'
1981
 
             r'FETCH|FIELDS?|FIND|FOR|FORM|FORMAT|FREE|FROM|'
1982
 
             r'HIDE|'
1983
 
             r'ID|IF|IMPORT|IMPLEMENTATION|IMPORTING|IN|INCLUDE|INCLUDING|'
1984
 
             r'INDEX|INFOTYPES|INITIALIZATION|INTERFACE|INTERFACES|INTO|'
1985
 
             r'LENGTH|LINES|LOAD|LOCAL|'
1986
 
             r'JOIN|'
1987
 
             r'KEY|'
1988
 
             r'MAXIMUM|MESSAGE|METHOD[S]?|MINIMUM|MODULE|MODIFY|MOVE|MULTIPLY|'
1989
 
             r'NODES|'
1990
 
             r'OBLIGATORY|OF|OFF|ON|OVERLAY|'
1991
 
             r'PACK|PARAMETERS|PERCENTAGE|POSITION|PROGRAM|PROVIDE|PUBLIC|PUT|'
1992
 
             r'RAISE|RAISING|RANGES|READ|RECEIVE|REFRESH|REJECT|REPORT|RESERVE|'
1993
 
             r'RESUME|RETRY|RETURN|RETURNING|RIGHT|ROLLBACK|'
1994
 
             r'SCROLL|SEARCH|SELECT|SHIFT|SINGLE|SKIP|SORT|SPLIT|STATICS|STOP|'
1995
 
             r'SUBMIT|SUBTRACT|SUM|SUMMARY|SUMMING|SUPPLY|'
1996
 
             r'TABLE|TABLES|TIMES|TITLE|TO|TOP-OF-PAGE|TRANSFER|TRANSLATE|TRY|TYPES|'
1997
 
             r'ULINE|UNDER|UNPACK|UPDATE|USING|'
1998
 
             r'VALUE|VALUES|VIA|'
1999
 
             r'WAIT|WHEN|WHERE|WHILE|WITH|WINDOW|WRITE)\b', Keyword),
2000
 
 
2001
 
             # builtins
2002
 
            (r'(abs|acos|asin|atan|'
2003
 
             r'boolc|boolx|bit_set|'
2004
 
             r'char_off|charlen|ceil|cmax|cmin|condense|contains|'
2005
 
             r'contains_any_of|contains_any_not_of|concat_lines_of|cos|cosh|'
2006
 
             r'count|count_any_of|count_any_not_of|'
2007
 
             r'dbmaxlen|distance|'
2008
 
             r'escape|exp|'
2009
 
             r'find|find_end|find_any_of|find_any_not_of|floor|frac|from_mixed|'
2010
 
             r'insert|'
2011
 
             r'lines|log|log10|'
2012
 
             r'match|matches|'
2013
 
             r'nmax|nmin|numofchar|'
2014
 
             r'repeat|replace|rescale|reverse|round|'
2015
 
             r'segment|shift_left|shift_right|sign|sin|sinh|sqrt|strlen|'
2016
 
             r'substring|substring_after|substring_from|substring_before|substring_to|'
2017
 
             r'tan|tanh|to_upper|to_lower|to_mixed|translate|trunc|'
2018
 
             r'xstrlen)(\()\b', bygroups(Name.Builtin, Punctuation)),
2019
 
 
2020
 
            (r'&[0-9]', Name),
2021
 
            (r'[0-9]+', Number.Integer),
2022
 
 
2023
 
            # operators which look like variable names before
2024
 
            # parsing variable names.
2025
 
            (r'(?<=(\s|.))(AND|EQ|NE|GT|LT|GE|LE|CO|CN|CA|NA|CS|NOT|NS|CP|NP|'
2026
 
             r'BYTE-CO|BYTE-CN|BYTE-CA|BYTE-NA|BYTE-CS|BYTE-NS|'
2027
 
             r'IS\s+(NOT\s+)?(INITIAL|ASSIGNED|REQUESTED|BOUND))\b', Operator),
2028
 
 
2029
 
            include('variable-names'),
2030
 
 
2031
 
            # standard oparators after variable names,
2032
 
            # because < and > are part of field symbols.
2033
 
            (r'[?*<>=\-+]', Operator),
2034
 
            (r"'(''|[^'])*'", String.Single),
2035
 
            (r'[/;:()\[\],\.]', Punctuation)
2036
 
        ],
2037
 
    }
2038
 
 
2039
 
 
2040
 
class NewspeakLexer(RegexLexer):
2041
 
    """
2042
 
    For `Newspeak <http://newspeaklanguage.org/>` syntax.
2043
 
    """
2044
 
    name = 'Newspeak'
2045
 
    filenames = ['*.ns2']
2046
 
    aliases = ['newspeak', ]
2047
 
    mimetypes = ['text/x-newspeak']
2048
 
 
2049
 
    tokens = {
2050
 
       'root' : [
2051
 
           (r'\b(Newsqueak2)\b',Keyword.Declaration),
2052
 
           (r"'[^']*'",String),
2053
 
           (r'\b(class)(\s+)([a-zA-Z0-9_]+)(\s*)',
2054
 
            bygroups(Keyword.Declaration,Text,Name.Class,Text)),
2055
 
           (r'\b(mixin|self|super|private|public|protected|nil|true|false)\b',
2056
 
            Keyword),
2057
 
           (r'([a-zA-Z0-9_]+\:)(\s*)([a-zA-Z_]\w+)',
2058
 
            bygroups(Name.Function,Text,Name.Variable)),
2059
 
           (r'([a-zA-Z0-9_]+)(\s*)(=)',
2060
 
            bygroups(Name.Attribute,Text,Operator)),
2061
 
           (r'<[a-zA-Z0-9_]+>', Comment.Special),
2062
 
           include('expressionstat'),
2063
 
           include('whitespace')
2064
 
        ],
2065
 
 
2066
 
       'expressionstat': [
2067
 
          (r'(\d+\.\d*|\.\d+|\d+[fF])[fF]?', Number.Float),
2068
 
          (r'\d+', Number.Integer),
2069
 
          (r':\w+',Name.Variable),
2070
 
          (r'(\w+)(::)', bygroups(Name.Variable, Operator)),
2071
 
          (r'\w+:', Name.Function),
2072
 
          (r'\w+', Name.Variable),
2073
 
          (r'\(|\)', Punctuation),
2074
 
          (r'\[|\]', Punctuation),
2075
 
          (r'\{|\}', Punctuation),
2076
 
 
2077
 
          (r'(\^|\+|\/|~|\*|<|>|=|@|%|\||&|\?|!|,|-|:)', Operator),
2078
 
          (r'\.|;', Punctuation),
2079
 
          include('whitespace'),
2080
 
          include('literals'),
2081
 
       ],
2082
 
       'literals': [
2083
 
         (r'\$.', String),
2084
 
         (r"'[^']*'", String),
2085
 
         (r"#'[^']*'", String.Symbol),
2086
 
         (r"#\w+:?", String.Symbol),
2087
 
         (r"#(\+|\/|~|\*|<|>|=|@|%|\||&|\?|!|,|-)+", String.Symbol)
2088
 
 
2089
 
       ],
2090
 
       'whitespace' : [
2091
 
         (r'\s+', Text),
2092
 
         (r'"[^"]*"', Comment)
2093
 
       ]
2094
 
    }
2095
 
 
2096
 
class GherkinLexer(RegexLexer):
2097
 
    """
2098
 
    For `Gherkin <http://cukes.info/>` syntax.
2099
 
 
2100
 
    *New in Pygments 1.2.*
2101
 
    """
2102
 
    name = 'Gherkin'
2103
 
    aliases = ['Cucumber', 'cucumber', 'Gherkin', 'gherkin']
2104
 
    filenames = ['*.feature']
2105
 
    mimetypes = ['text/x-gherkin']
2106
 
 
2107
 
    feature_keywords_regexp  = ur'^(기능|機能|功能|フィーチャ|خاصية|תכונה|Функционалност|Функционал|Особина|Могућност|Özellik|Właściwość|Tính năng|Savybė|Požiadavka|Požadavek|Osobina|Ominaisuus|Omadus|OH HAI|Mogućnost|Mogucnost|Jellemző|Fīča|Funzionalità|Funktionalität|Funkcionalnost|Funkcionalitāte|Funcționalitate|Functionaliteit|Functionalitate|Funcionalidade|Fonctionnalité|Fitur|Feature|Egenskap|Egenskab|Crikey|Característica|Arwedd)(:)(.*)$'
2108
 
    scenario_keywords_regexp = ur'^(\s*)(시나리오 개요|시나리오|배경|背景|場景大綱|場景|场景大纲|场景|劇本大綱|劇本|テンプレ|シナリオテンプレート|シナリオテンプレ|シナリオアウトライン|シナリオ|سيناريو مخطط|سيناريو|الخلفية|תרחיש|תבנית תרחיש|רקע|Тарих|Сценарио|Сценарий структураси|Сценарий|Структура сценарија|Структура сценария|Скица|Рамка на сценарий|Пример|Предыстория|Предистория|Позадина|Основа|Концепт|Контекст|Założenia|Tình huống|Tausta|Taust|Tapausaihio|Tapaus|Szenariogrundriss|Szenario|Szablon scenariusza|Stsenaarium|Struktura scenarija|Skica|Skenario konsep|Skenario|Situācija|Senaryo taslağı|Senaryo|Scénář|Scénario|Schema dello scenario|Scenārijs pēc parauga|Scenārijs|Scenár|Scenariusz|Scenariul de şablon|Scenariul de sablon|Scenariu|Scenario Outline|Scenario Amlinellol|Scenario|Scenarijus|Scenarijaus šablonas|Scenarij|Scenarie|Rerefons|Raamstsenaarium|Primer|Pozadí|Pozadina|Pozadie|Plan du scénario|Plan du Scénario|Osnova scénáře|Osnova|Náčrt Scénáře|Náčrt Scenáru|Mate|MISHUN SRSLY|MISHUN|Kịch bản|Kontext|Konteksts|Kontekstas|Kontekst|Koncept|Khung tình huống|Khung kịch bản|Háttér|Grundlage|Geçmiş|Forgatókönyv vázlat|Forgatókönyv|Esquema do Cenário|Esquema do Cenario|Esquema del escenario|Esquema de l\'escenari|Escenario|Escenari|Dasar|Contexto|Contexte|Contesto|Condiţii|Conditii|Cenário|Cenario|Cefndir|Bối cảnh|Blokes|Bakgrunn|Bakgrund|Baggrund|Background|B4|Antecedents|Antecedentes|All y\'all|Achtergrond|Abstrakt Scenario|Abstract Scenario)(:)(.*)$'
2109
 
    examples_regexp          = ur'^(\s*)(예|例子|例|サンプル|امثلة|דוגמאות|Сценарији|Примери|Мисоллар|Значения|Örnekler|Voorbeelden|Variantai|Tapaukset|Scenarios|Scenariji|Scenarijai|Příklady|Példák|Príklady|Przykłady|Primjeri|Primeri|Piemēri|Pavyzdžiai|Paraugs|Juhtumid|Exemplos|Exemples|Exemplele|Exempel|Examples|Esempi|Enghreifftiau|Eksempler|Ejemplos|EXAMPLZ|Dữ liệu|Contoh|Cobber|Beispiele)(:)(.*)$'
2110
 
    step_keywords_regexp     = ur'^(\s*)(하지만|조건|만일|그리고|그러면|那麼|那么|而且|當|当|前提|假設|假如|但是|但し|並且|もし|ならば|ただし|しかし|かつ|و |متى |لكن |عندما |ثم |بفرض |اذاً |כאשר |וגם |בהינתן |אזי |אז |אבל |Унда |То |Онда |Но |Лекин |Когато |Када |Кад |К тому же |И |Задато |Задати |Задате |Если |Допустим |Дадено |Ва |Бирок |Аммо |Али |Агар |А |Și |És |anrhegedig a |Zatati |Zakładając |Zadato |Zadate |Zadano |Zadani |Zadan |Yna |Ya know how |Ya gotta |Y |Wtedy |When y\'all |When |Wenn |WEN |Và |Ve |Und |Un |Thì |Then y\'all |Then |Tapi |Tak |Tada |Tad |Så |Stel |Soit |Siis |Si |Quando |Quand |Quan |Pryd |Pokud |Pokiaľ |Però |Pero |Pak |Oraz |Onda |Ond |Oletetaan |Og |Och |O zaman |Når |När |Niin |Nhưng |N |Mutta |Men |Mas |Maka |Majd |Mais |Maar |Ma |Lorsque |Lorsqu\'|Kun |Kuid |Kui |Khi |Keď |Ketika |Když |Kai |Kada |Kad |Jeżeli |Ja |Ir |I CAN HAZ |I |Ha |Givet |Given y\'all |Given |Gitt |Gegeven |Gegeben sei |Fakat |Eğer ki |Etant donné |Et |Então |Entonces |Entao |En |Eeldades |E |Duota |Donat |Donada |Diyelim ki |Dengan |De |Dato |Dar |Dann |Dan |Dado |Dacă |Daca |DEN |Când |Cuando |Cho |Cept |Cand |But y\'all |But |Biết |Bet |BUT |Atunci |And y\'all |And |Ama |Als |Alors |Allora |Ali |Aleshores |Ale |Akkor |Aber |AN |A také |A |\* )'
2111
 
 
2112
 
    tokens = {
2113
 
        'comments': [
2114
 
            (r'#.*$', Comment)
2115
 
          ],
2116
 
        'multiline_descriptions' : [
2117
 
            (step_keywords_regexp, Keyword, "#pop"),
2118
 
            include('comments'),
2119
 
            (r"(\s|.)", Name.Constant)
2120
 
          ],
2121
 
        'multiline_descriptions_on_stack' : [
2122
 
            (step_keywords_regexp, Keyword, "#pop:2"),
2123
 
            include('comments'),
2124
 
            (r"(\s|.)", Name.Constant)
2125
 
          ],
2126
 
        'scenario_table_description': [
2127
 
            (r"\s+\|", Text, 'scenario_table_header'),
2128
 
            include('comments'),
2129
 
            (r"(\s|.)", Name.Constant)
2130
 
          ],
2131
 
        'scenario_table_header': [
2132
 
            (r"\s+\|\s*$", Text, "#pop:2"),
2133
 
            (r"(\s+\|\s*)(#.*)$", bygroups(Text, Comment), "#pop:2"),
2134
 
            include('comments'),
2135
 
            (r"\s+\|", Text),
2136
 
            (r"[^\|]", Name.Variable)
2137
 
          ],
2138
 
        'scenario_sections_on_stack': [
2139
 
            (scenario_keywords_regexp,
2140
 
             bygroups(Text, Name.Class, Name.Class, Name.Constant),
2141
 
             "multiline_descriptions_on_stack")
2142
 
            ],
2143
 
        'narrative': [
2144
 
            include('scenario_sections_on_stack'),
2145
 
            (r"(\s|.)", Name.Builtin)
2146
 
          ],
2147
 
        'table_vars': [
2148
 
            (r'(<[^>]*>)', bygroups(Name.Variable))
2149
 
          ],
2150
 
        'string': [
2151
 
            include('table_vars'),
2152
 
            (r'(\s|.)', String),
2153
 
          ],
2154
 
        'py_string': [
2155
 
            (r'"""', String, "#pop"),
2156
 
            include('string'),
2157
 
          ],
2158
 
        'double_string': [
2159
 
            (r'"', String, "#pop"),
2160
 
            include('string'),
2161
 
          ],
2162
 
        'root': [
2163
 
            (r'\n', Text),
2164
 
            include('comments'),
2165
 
            (r'"""', String, "py_string"),
2166
 
            (r'"', String, "double_string"),
2167
 
            include('table_vars'),
2168
 
            (r'@[^@\s]+', Name.Namespace),
2169
 
            (step_keywords_regexp, bygroups(Text, Keyword)),
2170
 
            (feature_keywords_regexp,
2171
 
             bygroups(Name.Class, Name.Class, Name.Constant), 'narrative'),
2172
 
            (scenario_keywords_regexp,
2173
 
             bygroups(Text, Name.Class, Name.Class, Name.Constant),
2174
 
             "multiline_descriptions"),
2175
 
            (examples_regexp,
2176
 
             bygroups(Text, Name.Class, Name.Class, Name.Constant),
2177
 
             "scenario_table_description"),
2178
 
            (r'(\s|.)', Text)
2179
 
        ]
2180
 
    }
2181
 
 
2182
 
 
2183
 
class AsymptoteLexer(RegexLexer):
2184
 
    """
2185
 
    For `Asymptote <http://asymptote.sf.net/>`_ source code.
2186
 
 
2187
 
    *New in Pygments 1.2.*
2188
 
    """
2189
 
    name = 'Asymptote'
2190
 
    aliases = ['asy', 'asymptote']
2191
 
    filenames = ['*.asy']
2192
 
    mimetypes = ['text/x-asymptote']
2193
 
 
2194
 
    #: optional Comment or Whitespace
2195
 
    _ws = r'(?:\s|//.*?\n|/[*].*?[*]/)+'
2196
 
 
2197
 
    tokens = {
2198
 
        'whitespace': [
2199
 
            (r'\n', Text),
2200
 
            (r'\s+', Text),
2201
 
            (r'\\\n', Text), # line continuation
2202
 
            (r'//(\n|(.|\n)*?[^\\]\n)', Comment),
2203
 
            (r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment),
2204
 
        ],
2205
 
        'statements': [
2206
 
            # simple string (TeX friendly)
2207
 
            (r'"(\\\\|\\"|[^"])*"', String),
2208
 
            # C style string (with character escapes)
2209
 
            (r"'", String, 'string'),
2210
 
            (r'(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[lL]?', Number.Float),
2211
 
            (r'(\d+\.\d*|\.\d+|\d+[fF])[fF]?', Number.Float),
2212
 
            (r'0x[0-9a-fA-F]+[Ll]?', Number.Hex),
2213
 
            (r'0[0-7]+[Ll]?', Number.Oct),
2214
 
            (r'\d+[Ll]?', Number.Integer),
2215
 
            (r'[~!%^&*+=|?:<>/-]', Operator),
2216
 
            (r'[()\[\],.]', Punctuation),
2217
 
            (r'\b(case)(.+?)(:)', bygroups(Keyword, using(this), Text)),
2218
 
            (r'(and|controls|tension|atleast|curl|if|else|while|for|do|'
2219
 
             r'return|break|continue|struct|typedef|new|access|import|'
2220
 
             r'unravel|from|include|quote|static|public|private|restricted|'
2221
 
             r'this|explicit|true|false|null|cycle|newframe|operator)\b', Keyword),
2222
 
            # Since an asy-type-name can be also an asy-function-name,
2223
 
            # in the following we test if the string "  [a-zA-Z]" follows
2224
 
            # the Keyword.Type.
2225
 
            # Of course it is not perfect !
2226
 
            (r'(Braid|FitResult|Label|Legend|TreeNode|abscissa|arc|arrowhead|'
2227
 
             r'binarytree|binarytreeNode|block|bool|bool3|bounds|bqe|circle|'
2228
 
             r'conic|coord|coordsys|cputime|ellipse|file|filltype|frame|grid3|'
2229
 
             r'guide|horner|hsv|hyperbola|indexedTransform|int|inversion|key|'
2230
 
             r'light|line|linefit|marginT|marker|mass|object|pair|parabola|path|'
2231
 
             r'path3|pen|picture|point|position|projection|real|revolution|'
2232
 
             r'scaleT|scientific|segment|side|slice|splitface|string|surface|'
2233
 
             r'tensionSpecifier|ticklocate|ticksgridT|tickvalues|transform|'
2234
 
             r'transformation|tree|triangle|trilinear|triple|vector|'
2235
 
             r'vertex|void)(?=([ ]{1,}[a-zA-Z]))', Keyword.Type),
2236
 
            # Now the asy-type-name which are not asy-function-name
2237
 
            # except yours !
2238
 
            # Perhaps useless
2239
 
            (r'(Braid|FitResult|TreeNode|abscissa|arrowhead|block|bool|bool3|'
2240
 
             r'bounds|coord|frame|guide|horner|int|linefit|marginT|pair|pen|'
2241
 
             r'picture|position|real|revolution|slice|splitface|ticksgridT|'
2242
 
             r'tickvalues|tree|triple|vertex|void)\b', Keyword.Type),
2243
 
            ('[a-zA-Z_][a-zA-Z0-9_]*:(?!:)', Name.Label),
2244
 
            ('[a-zA-Z_][a-zA-Z0-9_]*', Name),
2245
 
            ],
2246
 
        'root': [
2247
 
            include('whitespace'),
2248
 
            # functions
2249
 
            (r'((?:[a-zA-Z0-9_*\s])+?(?:\s|[*]))'    # return arguments
2250
 
             r'([a-zA-Z_][a-zA-Z0-9_]*)'             # method name
2251
 
             r'(\s*\([^;]*?\))'                      # signature
2252
 
             r'(' + _ws + r')({)',
2253
 
             bygroups(using(this), Name.Function, using(this), using(this),
2254
 
                      Punctuation),
2255
 
             'function'),
2256
 
            # function declarations
2257
 
            (r'((?:[a-zA-Z0-9_*\s])+?(?:\s|[*]))'    # return arguments
2258
 
             r'([a-zA-Z_][a-zA-Z0-9_]*)'             # method name
2259
 
             r'(\s*\([^;]*?\))'                      # signature
2260
 
             r'(' + _ws + r')(;)',
2261
 
             bygroups(using(this), Name.Function, using(this), using(this),
2262
 
                      Punctuation)),
2263
 
            ('', Text, 'statement'),
2264
 
        ],
2265
 
        'statement' : [
2266
 
            include('whitespace'),
2267
 
            include('statements'),
2268
 
            ('[{}]', Punctuation),
2269
 
            (';', Punctuation, '#pop'),
2270
 
        ],
2271
 
        'function': [
2272
 
            include('whitespace'),
2273
 
            include('statements'),
2274
 
            (';', Punctuation),
2275
 
            ('{', Punctuation, '#push'),
2276
 
            ('}', Punctuation, '#pop'),
2277
 
        ],
2278
 
        'string': [
2279
 
            (r"'", String, '#pop'),
2280
 
            (r'\\([\\abfnrtv"\'?]|x[a-fA-F0-9]{2,4}|[0-7]{1,3})', String.Escape),
2281
 
            (r'\n', String),
2282
 
            (r"[^\\'\n]+", String), # all other characters
2283
 
            (r'\\\n', String),
2284
 
            (r'\\n', String), # line continuation
2285
 
            (r'\\', String), # stray backslash
2286
 
            ]
2287
 
        }
2288
 
 
2289
 
    def get_tokens_unprocessed(self, text):
2290
 
        from pygments.lexers._asybuiltins import ASYFUNCNAME, ASYVARNAME
2291
 
        for index, token, value in \
2292
 
               RegexLexer.get_tokens_unprocessed(self, text):
2293
 
           if token is Name and value in ASYFUNCNAME:
2294
 
               token = Name.Function
2295
 
           elif token is Name and value in ASYVARNAME:
2296
 
               token = Name.Variable
2297
 
           yield index, token, value