PageRenderTime 44ms CodeModel.GetById 3ms RepoModel.GetById 0ms app.codeStats 0ms

/eric4-4.4.19/eric/ThirdParty/Pygments/pygments/lexers/other.py

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