1
# -*- coding: utf-8 -*-
6
Lexers for other languages.
8
:copyright: Copyright 2006-2010 by the Pygments team, see AUTHORS.
9
:license: BSD, see LICENSE for details.
14
from pygments.lexer import Lexer, RegexLexer, include, bygroups, using, \
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
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']
29
line_re = re.compile('.*?\n')
32
class SqlLexer(RegexLexer):
34
Lexer for Structured Query Language. Currently, this lexer does
35
not recognize any special syntax except ANSI SQL.
41
mimetypes = ['text/x-sql']
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',
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)
136
'multiline-comments': [
137
(r'/\*', Comment.Multiline, 'multiline-comments'),
138
(r'\*/', Comment.Multiline, '#pop'),
139
(r'[^/\*]+', Comment.Multiline),
140
(r'[/*]', Comment.Multiline)
145
class MySqlLexer(RegexLexer):
147
Special lexer for MySQL.
152
mimetypes = ['text/x-mysql']
154
flags = re.IGNORECASE
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)
210
'multiline-comments': [
211
(r'/\*', Comment.Multiline, 'multiline-comments'),
212
(r'\*/', Comment.Multiline, '#pop'),
213
(r'[^/\*]+', Comment.Multiline),
214
(r'[/*]', Comment.Multiline)
219
class SqliteConsoleLexer(Lexer):
221
Lexer for example sessions using sqlite3.
223
*New in Pygments 0.11.*
227
aliases = ['sqlite3']
228
filenames = ['*.sqlite3-console']
229
mimetypes = ['text/x-sqlite3-console']
231
def get_tokens_unprocessed(self, data):
232
sql = SqlLexer(**self.options)
236
for match in line_re.finditer(data):
238
if line.startswith('sqlite> ') or line.startswith(' ...> '):
239
insertions.append((len(curcode),
240
[(0, Generic.Prompt, line[:8])]))
244
for item in do_insertions(insertions,
245
sql.get_tokens_unprocessed(curcode)):
249
if line.startswith('SQL error: '):
250
yield (match.start(), Generic.Traceback, line)
252
yield (match.start(), Generic.Output, line)
254
for item in do_insertions(insertions,
255
sql.get_tokens_unprocessed(curcode)):
259
class BrainfuckLexer(RegexLexer):
261
Lexer for the esoteric `BrainFuck <http://www.muppetlabs.com/~breadbox/bf/>`_
266
aliases = ['brainfuck', 'bf']
267
filenames = ['*.bf', '*.b']
268
mimetypes = ['application/x-brainfuck']
272
# use different colors for different instruction types
273
(r'[.,]+', Name.Tag),
274
(r'[+-]+', Name.Builtin),
275
(r'[<>]+', Name.Variable),
276
(r'[^.,+\-<>\[\]]+', Comment),
279
(r'\[', Keyword, 'loop'),
284
(r'\[', Keyword, '#push'),
285
(r'\]', Keyword, '#pop'),
291
class BefungeLexer(RegexLexer):
293
Lexer for the esoteric `Befunge <http://en.wikipedia.org/wiki/Befunge>`_
296
*New in Pygments 0.7.*
299
aliases = ['befunge']
300
filenames = ['*.befunge']
301
mimetypes = ['application/x-befunge']
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
322
class BashLexer(RegexLexer):
324
Lexer for (ba|k|)sh shell scripts.
326
*New in Pygments 0.6.*
330
aliases = ['bash', 'sh', 'ksh']
331
filenames = ['*.sh', '*.ksh', '*.bash', '*.ebuild', '*.eclass']
332
mimetypes = ['application/x-sh', 'application/x-shellscript']
337
(r'\$\(\(', Keyword, 'math'),
338
(r'\$\(', Keyword, 'paren'),
339
(r'\${#?', Keyword, 'curly'),
340
(r'`', String.Backtick, 'backticks'),
344
(r'\b(if|fi|else|while|do|done|for|then|return|function|case|'
345
r'select|continue|until|esac|elif)\s*\b',
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(?!\.)',
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),
362
(r'(?s)\$?"(\\\\|\\[0-7]+|\\.|[^"\\])*"', String.Double),
363
(r"(?s)\$?'(\\\\|\\[0-7]+|\\.|[^'\\])*'", String.Single),
366
(r'[^=\s\n\[\]{}()$"\'`\\<]+', Text),
367
(r'\d+(?= |\Z)', Number),
368
(r'\$#?(\w+|.)', Name.Variable),
372
(r'}', Keyword, '#pop'),
374
(r'[a-zA-Z0-9_]+', Name.Variable),
375
(r'[^}:"\'`$]+', Punctuation),
380
(r'\)', Keyword, '#pop'),
384
(r'\)\)', Keyword, '#pop'),
385
(r'[-+*/%^|&]|\*\*|\|\|', Operator),
390
(r'`', String.Backtick, '#pop'),
395
def analyse_text(text):
396
return shebang_matches(text, r'(ba|z|)sh')
399
class BashSessionLexer(Lexer):
401
Lexer for simplistic shell sessions.
403
*New in Pygments 1.1.*
406
name = 'Bash Session'
407
aliases = ['console']
408
filenames = ['*.sh-session']
409
mimetypes = ['application/x-shell-session']
411
def get_tokens_unprocessed(self, text):
412
bashlexer = BashLexer(**self.options)
418
for match in line_re.finditer(text):
420
m = re.match(r'^((?:|sh\S*?|\w+\S+[@:]\S+(?:\s+\S+)?|\[\S+[@:]'
421
r'[^\n]+\].+)[$#%])(.*\n?)', line)
423
# To support output lexers (say diff output), the output
424
# needs to be broken by prompts whenever the output lexer
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])]))
438
toks = bashlexer.get_tokens_unprocessed(curcode)
439
for i, t, v in do_insertions(insertions, toks):
441
yield match.start(), Generic.Output, line
445
for i, t, v in do_insertions(insertions,
446
bashlexer.get_tokens_unprocessed(curcode)):
450
class BatchLexer(RegexLexer):
452
Lexer for the DOS/Windows Batch file format.
454
*New in Pygments 0.7.*
458
filenames = ['*.bat', '*.cmd']
459
mimetypes = ['application/x-dos-batch']
461
flags = re.MULTILINE | re.IGNORECASE
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
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),
485
# Escapes only valid within echo args?
486
(r'\^\^|\^<|\^>|\^\|', String.Escape),
487
(r'\n', Text, '#pop'),
492
(r'".*?"', String.Double),
493
(r"'.*?'", String.Single),
494
(r'`.*?`', String.Backtick),
499
(r':\w+', Name.Label),
501
(r'([<>|])(\s*)(\w+)', bygroups(Punctuation, Text, Name)),
506
class RedcodeLexer(RegexLexer):
508
A simple Redcode lexer based on ICWS'94.
509
Contributed by Adam Blinkinsop <blinks@acm.org>.
511
*New in Pygments 0.8.*
514
aliases = ['redcode']
517
opcodes = ['DAT','MOV','ADD','SUB','MUL','DIV','MOD',
518
'JMP','JMZ','JMN','DJN','CMP','SLT','SPL',
520
modifiers = ['A','B','AB','BA','F','X','I']
526
(r';.*$', Comment.Single),
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),
533
(r'[-+*/%]', Operator),
534
(r'[#$@<>]', Operator), # mode
535
(r'[.,]', Punctuation), # mode
537
(r'[-+]?\d+', Number.Integer),
542
class MOOCodeLexer(RegexLexer):
544
For `MOOCode <http://www.moo.mud.org/>`_ (the MOO scripting
547
*New in Pygments 0.9.*
550
filenames = ['*.moo']
551
aliases = ['moocode']
552
mimetypes = ['text/x-moocode']
557
(r'(0|[1-9][0-9_]*)', Number.Integer),
559
(r'"(\\\\|\\"|[^"])*"', String),
561
(r'(E_PERM|E_DIV)', Name.Exception),
563
(r'((#[-0-9]+)|(\$[a-z_A-Z0-9]+))', Name.Entity),
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),
569
(r'(random|length)', Name.Builtin),
571
(r'(player|caller|this|args)', Name.Variable.Instance),
576
(r'([!;=,{}&\|:\.\[\]@\(\)\<\>\?]+)', Operator),
578
(r'([a-z_A-Z0-9]+)(\()', bygroups(Name.Function, Operator)),
580
(r'([a-zA-Z_0-9]+)', Text),
585
class SmalltalkLexer(RegexLexer):
587
For `Smalltalk <http://www.smalltalk.org/>`_ syntax.
588
Contributed by Stefan Matthias Aust.
589
Rewritten by Nils Winter.
591
*New in Pygments 0.10.*
595
aliases = ['smalltalk', 'squeak']
596
mimetypes = ['text/x-smalltalk']
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)),
606
(r'\^|\:=|\_', Operator),
608
(r'[\]({}.;!]', Text),
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)),
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
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'),
634
'_parenth_helper' : [
635
include('whitespaces'),
636
(r'(\d+r)?-?\d+(\.\d+)?(e-?\d+)?', Number),
637
(r'[-+*/\\~<>=|&#!?,@%\w+:]+', String.Symbol),
639
(r'\'[^\']*\'', String),
640
(r'\$.', String.Char),
641
(r'#*\(', String.Symbol, 'inner_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'),
650
(r'\)', String.Symbol, '#pop'),
651
include('_parenth_helper'),
654
# skip whitespace and comments
656
(r'"[^"]*"', Comment),
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'),
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'),
682
(r'[\[({]', Text, '#pop'),
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)),
707
class TcshLexer(RegexLexer):
709
Lexer for tcsh scripts.
711
*New in Pygments 0.10.*
715
aliases = ['tcsh', 'csh']
716
filenames = ['*.tcsh', '*.csh']
717
mimetypes = ['application/x-csh']
722
(r'\$\(', Keyword, 'paren'),
723
(r'\${#?', Keyword, 'curly'),
724
(r'`', String.Backtick, 'backticks'),
728
(r'\b(if|endif|else|while|then|foreach|case|default|'
729
r'continue|goto|breaksw|end|switch|endsw)\s*\b',
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',
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),
748
(r'(?s)"(\\\\|\\[0-7]+|\\.|[^"\\])*"', String.Double),
749
(r"(?s)'(\\\\|\\[0-7]+|\\.|[^'\\])*'", String.Single),
751
(r'[^=\s\n\[\]{}()$"\'`\\]+', Text),
752
(r'\d+(?= |\Z)', Number),
753
(r'\$#?(\w+|.)', Name.Variable),
756
(r'}', Keyword, '#pop'),
758
(r'[a-zA-Z0-9_]+', Name.Variable),
759
(r'[^}:"\'`$]+', Punctuation),
764
(r'\)', Keyword, '#pop'),
768
(r'`', String.Backtick, '#pop'),
774
class LogtalkLexer(RegexLexer):
776
For `Logtalk <http://logtalk.org/>`_ source code.
778
*New in Pygments 0.10.*
782
aliases = ['logtalk']
783
filenames = ['*.lgt']
784
mimetypes = ['text/x-logtalk']
789
(r'^\s*:-\s',Punctuation,'directive'),
791
(r'%.*?\n', Comment),
792
(r'/\*(.|\n)*?\*/',Comment),
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),
803
(r'([A-Z_][a-zA-Z0-9_]*)', Name.Variable),
805
(r'(after|before)(?=[(])', Keyword),
806
# Execution-context methods
807
(r'(parameter|this|se(lf|nder))(?=[(])', Keyword),
809
(r'(current_predicate|predicate_property)(?=[(])', Keyword),
810
# DCGs and term expansion
811
(r'(expand_(goal|term)|(goal|term)_expansion|phrase)(?=[(])',
814
(r'(abolish|c(reate|urrent))_(object|protocol|category)(?=[(])',
816
(r'(object|protocol|category)_property(?=[(])', Keyword),
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),
823
(r'(current_event|(abolish|define)_events)(?=[(])', Keyword),
825
(r'(current|set)_logtalk_flag(?=[(])', Keyword),
826
# Compiling, loading, and library paths
827
(r'logtalk_(compile|l(ibrary_path|oad))(?=[(])', Keyword),
829
(r'(clause|retract(all)?)(?=[(])', Keyword),
830
(r'a(bolish|ssert(a|z))(?=[(])', Keyword),
832
(r'(ca(ll|tch)|throw)(?=[(])', Keyword),
833
(r'(fail|true)\b', Keyword),
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))?(?=[(])',
840
(r'unify_with_occurs_check(?=[(])', Keyword),
841
# Term creation and decomposition
842
(r'(functor|arg|copy_term)(?=[(])', Keyword),
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),
850
(r'(var|atom(ic)?|integer|float|compound|n(onvar|umber))(?=[(])',
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)(?=[(])',
859
# Character and byte input/output
860
(r'(nl|(get|peek|put)_(byte|c(har|ode)))(?=[(])', Keyword),
861
(r'\bnl\b', Keyword),
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),
880
(r'\bonce(?=[(])', Keyword),
881
(r'\brepeat\b', Keyword),
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),
891
(r'(=|\\=)', Operator),
893
(r'(==|\\==|@=<|@<|@>=|@>)', Operator),
895
(r'(//|[-+*/])', Operator),
896
(r'\b(mod|rem)\b', Operator),
897
# Other arithemtic functors
898
(r'\b\*\*\b', Operator),
902
(r'([!;]|->)', Operator),
908
(r'"(\\\\|\\"|[^"])*"', String),
910
(r'[()\[\],.|]', Text),
912
(r"[a-z][a-zA-Z0-9_]*", Text),
913
(r"[']", String, 'quoted_atom'),
918
(r"[']", String, '#pop'),
919
(r'\\([\\abfnrtv"\']|(x[a-fA-F0-9]+|[0-7]+)\\)', String.Escape),
920
(r"[^\\'\n]+", String),
925
# Conditional compilation directives
926
(r'(el)?if(?=[(])', Keyword, 'root'),
927
(r'(e(lse|ndif))[.]', Keyword, 'root'),
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'),
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'),
946
(r'(extends|i(nstantiates|mp(lements|orts))|specializes)(?=[(])',
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),
955
(r'([A-Z_][a-zA-Z0-9_]*)', Name.Variable),
957
(r"[a-z][a-zA-Z0-9_]*", Text),
958
(r"[']", String, 'quoted_atom'),
960
(r'"(\\\\|\\"|[^"])*"', String),
961
# End of entity-opening directive
962
(r'([)]\.)', Text, 'root'),
966
(r'[()\[\],.|]', Text),
968
(r'%.*?\n', Comment),
969
(r'/\*(.|\n)*?\*/',Comment),
976
def analyse_text(text):
977
if ':- object(' in text:
979
if ':- protocol(' in text:
981
if ':- category(' in text:
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))
993
class GnuplotLexer(RegexLexer):
995
For `Gnuplot <http://gnuplot.info/>`_ plotting scripts.
997
*New in Pygments 0.11.*
1001
aliases = ['gnuplot']
1002
filenames = ['*.plot', '*.plt']
1003
mimetypes = ['text/x-gnuplot']
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',
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
1035
(r'[^\\\n]', Comment),
1038
# don't add the newline to the Comment token
1039
('', Comment, '#pop'),
1042
('#', Comment, 'comment'),
1043
(r'[ \t\v\f]+', Text),
1046
include('whitespace'),
1047
# semicolon and newline end the argument list
1048
(r';', Punctuation, '#pop'),
1049
(r'\n', Text, '#pop'),
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
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
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
1084
include('whitespace'),
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'),
1116
('!', Keyword, '#pop'),
1117
(_shortened('all$windows'), Name.Builtin),
1118
include('genericargs'),
1121
(r'gnuplot\b', Keyword),
1125
(r'via\b', Name.Builtin),
1129
(r'\)', Punctuation, '#pop'),
1130
include('genericargs'),
1133
(r'(mouse|any|button1|button2|button3)\b', Name.Builtin),
1134
(_shortened('key$press'), Name.Builtin),
1135
include('genericargs'),
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'),
1142
include('genericargs'),
1145
(_shortened_many('f$unctions', 's$et', 't$erminal', 'v$ariables'),
1147
include('genericargs'),
1152
class PovrayLexer(RegexLexer):
1154
For `Persistence of Vision Raytracer <http://www.povray.org/>`_ files.
1156
*New in Pygments 0.11.*
1160
filenames = ['*.pov', '*.inc']
1161
mimetypes = ['text/x-povray']
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)',
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),
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),
1238
class AppleScriptLexer(RegexLexer):
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>.
1249
name = 'AppleScript'
1250
aliases = ['applescript']
1251
filenames = ['*.applescript']
1253
flags = re.MULTILINE | re.DOTALL
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',
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|'
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',
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']
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),
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),
1550
('\(\*', Comment.Multiline, '#push'),
1551
('\*\)', Comment.Multiline, '#pop'),
1552
('[^*(]+', Comment.Multiline),
1553
('[*(]', Comment.Multiline),
1558
class ModelicaLexer(RegexLexer):
1560
For `Modelica <http://www.modelica.org/>`_ source code.
1562
*New in Pygments 1.1.*
1565
aliases = ['modelica']
1566
filenames = ['*.mo']
1567
mimetypes = ['text/x-modelica']
1569
flags = re.IGNORECASE | re.DOTALL
1575
(r'\\\n', Text), # line continuation
1576
(r'//(\n|(.|\n)*?[^\\]\n)', Comment),
1577
(r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment),
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) ],
1591
include('whitespace'),
1592
include('keywords'),
1593
include('functions'),
1594
include('operators'),
1596
(r'("<html>|<html>)', Name.Tag, 'html-content'),
1597
include('statements')
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)
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)
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)
1619
(r'(block|class|connector|function|model|package|'
1620
r'record|type)\b', Name.Class)
1623
(r'"', String, '#pop'),
1624
(r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})',
1626
(r'[^\\"\n]+', String), # all other characters
1627
(r'\\\n', String), # line continuation
1628
(r'\\', String) # stray backslash
1631
(r'<\s*/\s*html\s*>', Name.Tag, '#pop'),
1632
(r'.+?(?=<\s*/\s*html\s*>)', using(HtmlLexer)),
1637
class RebolLexer(RegexLexer):
1639
A `REBOL <http://www.rebol.com/>`_ lexer.
1641
*New in Pygments 1.1.*
1645
filenames = ['*.r', '*.r3']
1646
mimetypes = ['text/x-rebol']
1648
flags = re.IGNORECASE | re.MULTILINE
1652
escape_re = r'(?:\^\([0-9a-fA-F]{1,4}\)*)'
1654
def word_callback(lexer, match):
1655
word = match.group()
1657
if re.match(".*:$", word):
1658
yield match.start(), Generic.Subheading, word
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
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|'
1687
yield match.start(), Name.Function, word
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
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|=\?|=|==|<>|<|>|<=|>=)$',
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
1737
yield match.start(), Name.Variable, word
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),
1774
(r'[^(\^")]+', String),
1775
(escape_re, String.Escape),
1776
(r'[\(|\)]+', String),
1777
(r'\^.', String.Escape),
1778
(r'"', String, '#pop'),
1781
(r'[^(\^{^})]+', String),
1782
(escape_re, String.Escape),
1783
(r'[\(|\)]+', String),
1784
(r'\^.', String.Escape),
1785
(r'{', String, '#push'),
1786
(r'}', String, '#pop'),
1789
(r'[^(\^")]+', Name.Decorator),
1790
(escape_re, Name.Decorator),
1791
(r'\^.', Name.Decorator),
1792
(r'"', Name.Decorator, '#pop'),
1795
(escape_re + '"', String.Char, '#pop'),
1796
(r'\^."', String.Char, '#pop'),
1797
(r'."', String.Char, '#pop'),
1800
(escape_re, Name.Tag),
1801
(r'"', Name.Tag, 'tagString'),
1802
(r'[^(<>\r\n")]+', Name.Tag),
1803
(r'>', Name.Tag, '#pop'),
1806
(r'[^(\^")]+', Name.Tag),
1807
(escape_re, Name.Tag),
1808
(r'[\(|\)]+', Name.Tag),
1810
(r'"', Name.Tag, '#pop'),
1813
(r'(\d+\.)+', Keyword.Constant),
1814
(r'\d+', Keyword.Constant, '#pop'),
1817
(r'\s+', Number.Hex),
1818
(r'([0-1]\s*){8}', Number.Hex),
1819
(r'}', Number.Hex, '#pop'),
1822
(r'"', Comment, 'commentString1'),
1823
(r'{', Comment, 'commentString2'),
1824
(r'\[', Comment, 'commentBlock'),
1825
(r'[^(\s{\"\[]+', Comment, '#pop'),
1828
(r'[^(\^")]+', Comment),
1829
(escape_re, Comment),
1830
(r'[\(|\)]+', Comment),
1832
(r'"', Comment, '#pop'),
1835
(r'[^(\^{^})]+', Comment),
1836
(escape_re, Comment),
1837
(r'[\(|\)]+', Comment),
1839
(r'{', Comment, '#push'),
1840
(r'}', Comment, '#pop'),
1843
(r'\[',Comment, '#push'),
1844
(r'\]',Comment, '#pop'),
1845
(r'[^(\[\])]*', Comment),
1850
class ABAPLexer(RegexLexer):
1852
Lexer for ABAP, SAP's integrated language.
1854
*New in Pygments 1.1.*
1858
filenames = ['*.abap']
1859
mimetypes = ['text/x-abap']
1861
flags = re.IGNORECASE | re.MULTILINE
1866
(r'^\*.*$', Comment.Single),
1867
(r'\".*?\n', Comment.Single),
1870
(r'<[\S_]+>', Name.Variable),
1871
(r'[\w][\w_~]*(?:(\[\])|->\*)?', Name.Variable),
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',
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)),
1888
# method implementation
1889
(r'(METHOD)(\s+)([\w_~]+)',
1890
bygroups(Keyword, Text, Name.Function)),
1892
(r'(\s+)([\w_\-]+)([=\-]>)([\w_\-~]+)',
1893
bygroups(Text, Name.Variable, Operator, Name.Function)),
1894
# call methodnames returning style
1895
(r'(?<=(=|-)>)([\w_\-~]+)(?=\()', Name.Function),
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'
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|'
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)|'
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),
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|'
1983
r'ID|IF|IMPORT|IMPLEMENTATION|IMPORTING|IN|INCLUDE|INCLUDING|'
1984
r'INDEX|INFOTYPES|INITIALIZATION|INTERFACE|INTERFACES|INTO|'
1985
r'LENGTH|LINES|LOAD|LOCAL|'
1988
r'MAXIMUM|MESSAGE|METHOD[S]?|MINIMUM|MODULE|MODIFY|MOVE|MULTIPLY|'
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),
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|'
2009
r'find|find_end|find_any_of|find_any_not_of|floor|frac|from_mixed|'
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)),
2021
(r'[0-9]+', Number.Integer),
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),
2029
include('variable-names'),
2031
# standard oparators after variable names,
2032
# because < and > are part of field symbols.
2033
(r'[?*<>=\-+]', Operator),
2034
(r"'(''|[^'])*'", String.Single),
2035
(r'[/;:()\[\],\.]', Punctuation)
2040
class NewspeakLexer(RegexLexer):
2042
For `Newspeak <http://newspeaklanguage.org/>` syntax.
2045
filenames = ['*.ns2']
2046
aliases = ['newspeak', ]
2047
mimetypes = ['text/x-newspeak']
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',
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')
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),
2077
(r'(\^|\+|\/|~|\*|<|>|=|@|%|\||&|\?|!|,|-|:)', Operator),
2078
(r'\.|;', Punctuation),
2079
include('whitespace'),
2080
include('literals'),
2084
(r"'[^']*'", String),
2085
(r"#'[^']*'", String.Symbol),
2086
(r"#\w+:?", String.Symbol),
2087
(r"#(\+|\/|~|\*|<|>|=|@|%|\||&|\?|!|,|-)+", String.Symbol)
2092
(r'"[^"]*"', Comment)
2096
class GherkinLexer(RegexLexer):
2098
For `Gherkin <http://cukes.info/>` syntax.
2100
*New in Pygments 1.2.*
2103
aliases = ['Cucumber', 'cucumber', 'Gherkin', 'gherkin']
2104
filenames = ['*.feature']
2105
mimetypes = ['text/x-gherkin']
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 |\* )'
2116
'multiline_descriptions' : [
2117
(step_keywords_regexp, Keyword, "#pop"),
2118
include('comments'),
2119
(r"(\s|.)", Name.Constant)
2121
'multiline_descriptions_on_stack' : [
2122
(step_keywords_regexp, Keyword, "#pop:2"),
2123
include('comments'),
2124
(r"(\s|.)", Name.Constant)
2126
'scenario_table_description': [
2127
(r"\s+\|", Text, 'scenario_table_header'),
2128
include('comments'),
2129
(r"(\s|.)", Name.Constant)
2131
'scenario_table_header': [
2132
(r"\s+\|\s*$", Text, "#pop:2"),
2133
(r"(\s+\|\s*)(#.*)$", bygroups(Text, Comment), "#pop:2"),
2134
include('comments'),
2136
(r"[^\|]", Name.Variable)
2138
'scenario_sections_on_stack': [
2139
(scenario_keywords_regexp,
2140
bygroups(Text, Name.Class, Name.Class, Name.Constant),
2141
"multiline_descriptions_on_stack")
2144
include('scenario_sections_on_stack'),
2145
(r"(\s|.)", Name.Builtin)
2148
(r'(<[^>]*>)', bygroups(Name.Variable))
2151
include('table_vars'),
2152
(r'(\s|.)', String),
2155
(r'"""', String, "#pop"),
2159
(r'"', String, "#pop"),
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"),
2176
bygroups(Text, Name.Class, Name.Class, Name.Constant),
2177
"scenario_table_description"),
2183
class AsymptoteLexer(RegexLexer):
2185
For `Asymptote <http://asymptote.sf.net/>`_ source code.
2187
*New in Pygments 1.2.*
2190
aliases = ['asy', 'asymptote']
2191
filenames = ['*.asy']
2192
mimetypes = ['text/x-asymptote']
2194
#: optional Comment or Whitespace
2195
_ws = r'(?:\s|//.*?\n|/[*].*?[*]/)+'
2201
(r'\\\n', Text), # line continuation
2202
(r'//(\n|(.|\n)*?[^\\]\n)', Comment),
2203
(r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment),
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
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
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),
2247
include('whitespace'),
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),
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),
2263
('', Text, 'statement'),
2266
include('whitespace'),
2267
include('statements'),
2268
('[{}]', Punctuation),
2269
(';', Punctuation, '#pop'),
2272
include('whitespace'),
2273
include('statements'),
2275
('{', Punctuation, '#push'),
2276
('}', Punctuation, '#pop'),
2279
(r"'", String, '#pop'),
2280
(r'\\([\\abfnrtv"\'?]|x[a-fA-F0-9]{2,4}|[0-7]{1,3})', String.Escape),
2282
(r"[^\\'\n]+", String), # all other characters
2284
(r'\\n', String), # line continuation
2285
(r'\\', String), # stray backslash
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