ThirdParty/Pygments/pygments/lexers/matlab.py

changeset 4172
4f20dba37ab6
child 4697
c2e9bf425554
equal deleted inserted replaced
4170:8bc578136279 4172:4f20dba37ab6
1 # -*- coding: utf-8 -*-
2 """
3 pygments.lexers.matlab
4 ~~~~~~~~~~~~~~~~~~~~~~
5
6 Lexers for Matlab and related languages.
7
8 :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
9 :license: BSD, see LICENSE for details.
10 """
11
12 import re
13
14 from pygments.lexer import Lexer, RegexLexer, bygroups, words, do_insertions
15 from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
16 Number, Punctuation, Generic, Whitespace
17
18 from pygments.lexers import _scilab_builtins
19
20 __all__ = ['MatlabLexer', 'MatlabSessionLexer', 'OctaveLexer', 'ScilabLexer']
21
22
23 class MatlabLexer(RegexLexer):
24 """
25 For Matlab source code.
26
27 .. versionadded:: 0.10
28 """
29 name = 'Matlab'
30 aliases = ['matlab']
31 filenames = ['*.m']
32 mimetypes = ['text/matlab']
33
34 #
35 # These lists are generated automatically.
36 # Run the following in bash shell:
37 #
38 # for f in elfun specfun elmat; do
39 # echo -n "$f = "
40 # matlab -nojvm -r "help $f;exit;" | perl -ne \
41 # 'push(@c,$1) if /^ (\w+)\s+-/; END {print q{["}.join(q{","},@c).qq{"]\n};}'
42 # done
43 #
44 # elfun: Elementary math functions
45 # specfun: Special Math functions
46 # elmat: Elementary matrices and matrix manipulation
47 #
48 # taken from Matlab version 7.4.0.336 (R2007a)
49 #
50 elfun = ("sin", "sind", "sinh", "asin", "asind", "asinh", "cos", "cosd", "cosh",
51 "acos", "acosd", "acosh", "tan", "tand", "tanh", "atan", "atand", "atan2",
52 "atanh", "sec", "secd", "sech", "asec", "asecd", "asech", "csc", "cscd",
53 "csch", "acsc", "acscd", "acsch", "cot", "cotd", "coth", "acot", "acotd",
54 "acoth", "hypot", "exp", "expm1", "log", "log1p", "log10", "log2", "pow2",
55 "realpow", "reallog", "realsqrt", "sqrt", "nthroot", "nextpow2", "abs",
56 "angle", "complex", "conj", "imag", "real", "unwrap", "isreal", "cplxpair",
57 "fix", "floor", "ceil", "round", "mod", "rem", "sign")
58 specfun = ("airy", "besselj", "bessely", "besselh", "besseli", "besselk", "beta",
59 "betainc", "betaln", "ellipj", "ellipke", "erf", "erfc", "erfcx",
60 "erfinv", "expint", "gamma", "gammainc", "gammaln", "psi", "legendre",
61 "cross", "dot", "factor", "isprime", "primes", "gcd", "lcm", "rat",
62 "rats", "perms", "nchoosek", "factorial", "cart2sph", "cart2pol",
63 "pol2cart", "sph2cart", "hsv2rgb", "rgb2hsv")
64 elmat = ("zeros", "ones", "eye", "repmat", "rand", "randn", "linspace", "logspace",
65 "freqspace", "meshgrid", "accumarray", "size", "length", "ndims", "numel",
66 "disp", "isempty", "isequal", "isequalwithequalnans", "cat", "reshape",
67 "diag", "blkdiag", "tril", "triu", "fliplr", "flipud", "flipdim", "rot90",
68 "find", "end", "sub2ind", "ind2sub", "bsxfun", "ndgrid", "permute",
69 "ipermute", "shiftdim", "circshift", "squeeze", "isscalar", "isvector",
70 "ans", "eps", "realmax", "realmin", "pi", "i", "inf", "nan", "isnan",
71 "isinf", "isfinite", "j", "why", "compan", "gallery", "hadamard", "hankel",
72 "hilb", "invhilb", "magic", "pascal", "rosser", "toeplitz", "vander",
73 "wilkinson")
74
75 tokens = {
76 'root': [
77 # line starting with '!' is sent as a system command. not sure what
78 # label to use...
79 (r'^!.*', String.Other),
80 (r'%\{\s*\n', Comment.Multiline, 'blockcomment'),
81 (r'%.*$', Comment),
82 (r'^\s*function', Keyword, 'deffunc'),
83
84 # from 'iskeyword' on version 7.11 (R2010):
85 (words((
86 'break', 'case', 'catch', 'classdef', 'continue', 'else', 'elseif',
87 'end', 'enumerated', 'events', 'for', 'function', 'global', 'if',
88 'methods', 'otherwise', 'parfor', 'persistent', 'properties',
89 'return', 'spmd', 'switch', 'try', 'while'), suffix=r'\b'),
90 Keyword),
91
92 ("(" + "|".join(elfun + specfun + elmat) + r')\b', Name.Builtin),
93
94 # line continuation with following comment:
95 (r'\.\.\..*$', Comment),
96
97 # operators:
98 (r'-|==|~=|<|>|<=|>=|&&|&|~|\|\|?', Operator),
99 # operators requiring escape for re:
100 (r'\.\*|\*|\+|\.\^|\.\\|\.\/|\/|\\', Operator),
101
102 # punctuation:
103 (r'\[|\]|\(|\)|\{|\}|:|@|\.|,', Punctuation),
104 (r'=|:|;', Punctuation),
105
106 # quote can be transpose, instead of string:
107 # (not great, but handles common cases...)
108 (r'(?<=[\w)\].])\'+', Operator),
109
110 (r'(\d+\.\d*|\d*\.\d+)([eEf][+-]?[0-9]+)?', Number.Float),
111 (r'\d+[eEf][+-]?[0-9]+', Number.Float),
112 (r'\d+', Number.Integer),
113
114 (r'(?<![\w)\].])\'', String, 'string'),
115 (r'[a-zA-Z_]\w*', Name),
116 (r'.', Text),
117 ],
118 'string': [
119 (r'[^\']*\'', String, '#pop')
120 ],
121 'blockcomment': [
122 (r'^\s*%\}', Comment.Multiline, '#pop'),
123 (r'^.*\n', Comment.Multiline),
124 (r'.', Comment.Multiline),
125 ],
126 'deffunc': [
127 (r'(\s*)(?:(.+)(\s*)(=)(\s*))?(.+)(\()(.*)(\))(\s*)',
128 bygroups(Whitespace, Text, Whitespace, Punctuation,
129 Whitespace, Name.Function, Punctuation, Text,
130 Punctuation, Whitespace), '#pop'),
131 # function with no args
132 (r'(\s*)([a-zA-Z_]\w*)', bygroups(Text, Name.Function), '#pop'),
133 ],
134 }
135
136 def analyse_text(text):
137 if re.match('^\s*%', text, re.M): # comment
138 return 0.2
139 elif re.match('^!\w+', text, re.M): # system cmd
140 return 0.2
141
142
143 line_re = re.compile('.*?\n')
144
145
146 class MatlabSessionLexer(Lexer):
147 """
148 For Matlab sessions. Modeled after PythonConsoleLexer.
149 Contributed by Ken Schutte <kschutte@csail.mit.edu>.
150
151 .. versionadded:: 0.10
152 """
153 name = 'Matlab session'
154 aliases = ['matlabsession']
155
156 def get_tokens_unprocessed(self, text):
157 mlexer = MatlabLexer(**self.options)
158
159 curcode = ''
160 insertions = []
161
162 for match in line_re.finditer(text):
163 line = match.group()
164
165 if line.startswith('>> '):
166 insertions.append((len(curcode),
167 [(0, Generic.Prompt, line[:3])]))
168 curcode += line[3:]
169
170 elif line.startswith('>>'):
171 insertions.append((len(curcode),
172 [(0, Generic.Prompt, line[:2])]))
173 curcode += line[2:]
174
175 elif line.startswith('???'):
176
177 idx = len(curcode)
178
179 # without is showing error on same line as before...?
180 # line = "\n" + line
181 token = (0, Generic.Traceback, line)
182 insertions.append((idx, [token]))
183
184 else:
185 if curcode:
186 for item in do_insertions(
187 insertions, mlexer.get_tokens_unprocessed(curcode)):
188 yield item
189 curcode = ''
190 insertions = []
191
192 yield match.start(), Generic.Output, line
193
194 if curcode: # or item:
195 for item in do_insertions(
196 insertions, mlexer.get_tokens_unprocessed(curcode)):
197 yield item
198
199
200 class OctaveLexer(RegexLexer):
201 """
202 For GNU Octave source code.
203
204 .. versionadded:: 1.5
205 """
206 name = 'Octave'
207 aliases = ['octave']
208 filenames = ['*.m']
209 mimetypes = ['text/octave']
210
211 # These lists are generated automatically.
212 # Run the following in bash shell:
213 #
214 # First dump all of the Octave manual into a plain text file:
215 #
216 # $ info octave --subnodes -o octave-manual
217 #
218 # Now grep through it:
219
220 # for i in \
221 # "Built-in Function" "Command" "Function File" \
222 # "Loadable Function" "Mapping Function";
223 # do
224 # perl -e '@name = qw('"$i"');
225 # print lc($name[0]),"_kw = [\n"';
226 #
227 # perl -n -e 'print "\"$1\",\n" if /-- '"$i"': .* (\w*) \(/;' \
228 # octave-manual | sort | uniq ;
229 # echo "]" ;
230 # echo;
231 # done
232
233 # taken from Octave Mercurial changeset 8cc154f45e37 (30-jan-2011)
234
235 builtin_kw = (
236 "addlistener", "addpath", "addproperty", "all",
237 "and", "any", "argnames", "argv", "assignin",
238 "atexit", "autoload",
239 "available_graphics_toolkits", "beep_on_error",
240 "bitand", "bitmax", "bitor", "bitshift", "bitxor",
241 "cat", "cell", "cellstr", "char", "class", "clc",
242 "columns", "command_line_path",
243 "completion_append_char", "completion_matches",
244 "complex", "confirm_recursive_rmdir", "cputime",
245 "crash_dumps_octave_core", "ctranspose", "cumprod",
246 "cumsum", "debug_on_error", "debug_on_interrupt",
247 "debug_on_warning", "default_save_options",
248 "dellistener", "diag", "diff", "disp",
249 "doc_cache_file", "do_string_escapes", "double",
250 "drawnow", "e", "echo_executing_commands", "eps",
251 "eq", "errno", "errno_list", "error", "eval",
252 "evalin", "exec", "exist", "exit", "eye", "false",
253 "fclear", "fclose", "fcntl", "fdisp", "feof",
254 "ferror", "feval", "fflush", "fgetl", "fgets",
255 "fieldnames", "file_in_loadpath", "file_in_path",
256 "filemarker", "filesep", "find_dir_in_path",
257 "fixed_point_format", "fnmatch", "fopen", "fork",
258 "formula", "fprintf", "fputs", "fread", "freport",
259 "frewind", "fscanf", "fseek", "fskipl", "ftell",
260 "functions", "fwrite", "ge", "genpath", "get",
261 "getegid", "getenv", "geteuid", "getgid",
262 "getpgrp", "getpid", "getppid", "getuid", "glob",
263 "gt", "gui_mode", "history_control",
264 "history_file", "history_size",
265 "history_timestamp_format_string", "home",
266 "horzcat", "hypot", "ifelse",
267 "ignore_function_time_stamp", "inferiorto",
268 "info_file", "info_program", "inline", "input",
269 "intmax", "intmin", "ipermute",
270 "is_absolute_filename", "isargout", "isbool",
271 "iscell", "iscellstr", "ischar", "iscomplex",
272 "isempty", "isfield", "isfloat", "isglobal",
273 "ishandle", "isieee", "isindex", "isinteger",
274 "islogical", "ismatrix", "ismethod", "isnull",
275 "isnumeric", "isobject", "isreal",
276 "is_rooted_relative_filename", "issorted",
277 "isstruct", "isvarname", "kbhit", "keyboard",
278 "kill", "lasterr", "lasterror", "lastwarn",
279 "ldivide", "le", "length", "link", "linspace",
280 "logical", "lstat", "lt", "make_absolute_filename",
281 "makeinfo_program", "max_recursion_depth", "merge",
282 "methods", "mfilename", "minus", "mislocked",
283 "mkdir", "mkfifo", "mkstemp", "mldivide", "mlock",
284 "mouse_wheel_zoom", "mpower", "mrdivide", "mtimes",
285 "munlock", "nargin", "nargout",
286 "native_float_format", "ndims", "ne", "nfields",
287 "nnz", "norm", "not", "numel", "nzmax",
288 "octave_config_info", "octave_core_file_limit",
289 "octave_core_file_name",
290 "octave_core_file_options", "ones", "or",
291 "output_max_field_width", "output_precision",
292 "page_output_immediately", "page_screen_output",
293 "path", "pathsep", "pause", "pclose", "permute",
294 "pi", "pipe", "plus", "popen", "power",
295 "print_empty_dimensions", "printf",
296 "print_struct_array_contents", "prod",
297 "program_invocation_name", "program_name",
298 "putenv", "puts", "pwd", "quit", "rats", "rdivide",
299 "readdir", "readlink", "read_readline_init_file",
300 "realmax", "realmin", "rehash", "rename",
301 "repelems", "re_read_readline_init_file", "reset",
302 "reshape", "resize", "restoredefaultpath",
303 "rethrow", "rmdir", "rmfield", "rmpath", "rows",
304 "save_header_format_string", "save_precision",
305 "saving_history", "scanf", "set", "setenv",
306 "shell_cmd", "sighup_dumps_octave_core",
307 "sigterm_dumps_octave_core", "silent_functions",
308 "single", "size", "size_equal", "sizemax",
309 "sizeof", "sleep", "source", "sparse_auto_mutate",
310 "split_long_rows", "sprintf", "squeeze", "sscanf",
311 "stat", "stderr", "stdin", "stdout", "strcmp",
312 "strcmpi", "string_fill_char", "strncmp",
313 "strncmpi", "struct", "struct_levels_to_print",
314 "strvcat", "subsasgn", "subsref", "sum", "sumsq",
315 "superiorto", "suppress_verbose_help_message",
316 "symlink", "system", "tic", "tilde_expand",
317 "times", "tmpfile", "tmpnam", "toc", "toupper",
318 "transpose", "true", "typeinfo", "umask", "uminus",
319 "uname", "undo_string_escapes", "unlink", "uplus",
320 "upper", "usage", "usleep", "vec", "vectorize",
321 "vertcat", "waitpid", "warning", "warranty",
322 "whos_line_format", "yes_or_no", "zeros",
323 "inf", "Inf", "nan", "NaN")
324
325 command_kw = ("close", "load", "who", "whos")
326
327 function_kw = (
328 "accumarray", "accumdim", "acosd", "acotd",
329 "acscd", "addtodate", "allchild", "ancestor",
330 "anova", "arch_fit", "arch_rnd", "arch_test",
331 "area", "arma_rnd", "arrayfun", "ascii", "asctime",
332 "asecd", "asind", "assert", "atand",
333 "autoreg_matrix", "autumn", "axes", "axis", "bar",
334 "barh", "bartlett", "bartlett_test", "beep",
335 "betacdf", "betainv", "betapdf", "betarnd",
336 "bicgstab", "bicubic", "binary", "binocdf",
337 "binoinv", "binopdf", "binornd", "bitcmp",
338 "bitget", "bitset", "blackman", "blanks",
339 "blkdiag", "bone", "box", "brighten", "calendar",
340 "cast", "cauchy_cdf", "cauchy_inv", "cauchy_pdf",
341 "cauchy_rnd", "caxis", "celldisp", "center", "cgs",
342 "chisquare_test_homogeneity",
343 "chisquare_test_independence", "circshift", "cla",
344 "clabel", "clf", "clock", "cloglog", "closereq",
345 "colon", "colorbar", "colormap", "colperm",
346 "comet", "common_size", "commutation_matrix",
347 "compan", "compare_versions", "compass",
348 "computer", "cond", "condest", "contour",
349 "contourc", "contourf", "contrast", "conv",
350 "convhull", "cool", "copper", "copyfile", "cor",
351 "corrcoef", "cor_test", "cosd", "cotd", "cov",
352 "cplxpair", "cross", "cscd", "cstrcat", "csvread",
353 "csvwrite", "ctime", "cumtrapz", "curl", "cut",
354 "cylinder", "date", "datenum", "datestr",
355 "datetick", "datevec", "dblquad", "deal",
356 "deblank", "deconv", "delaunay", "delaunayn",
357 "delete", "demo", "detrend", "diffpara", "diffuse",
358 "dir", "discrete_cdf", "discrete_inv",
359 "discrete_pdf", "discrete_rnd", "display",
360 "divergence", "dlmwrite", "dos", "dsearch",
361 "dsearchn", "duplication_matrix", "durbinlevinson",
362 "ellipsoid", "empirical_cdf", "empirical_inv",
363 "empirical_pdf", "empirical_rnd", "eomday",
364 "errorbar", "etime", "etreeplot", "example",
365 "expcdf", "expinv", "expm", "exppdf", "exprnd",
366 "ezcontour", "ezcontourf", "ezmesh", "ezmeshc",
367 "ezplot", "ezpolar", "ezsurf", "ezsurfc", "factor",
368 "factorial", "fail", "fcdf", "feather", "fftconv",
369 "fftfilt", "fftshift", "figure", "fileattrib",
370 "fileparts", "fill", "findall", "findobj",
371 "findstr", "finv", "flag", "flipdim", "fliplr",
372 "flipud", "fpdf", "fplot", "fractdiff", "freqz",
373 "freqz_plot", "frnd", "fsolve",
374 "f_test_regression", "ftp", "fullfile", "fzero",
375 "gamcdf", "gaminv", "gampdf", "gamrnd", "gca",
376 "gcbf", "gcbo", "gcf", "genvarname", "geocdf",
377 "geoinv", "geopdf", "geornd", "getfield", "ginput",
378 "glpk", "gls", "gplot", "gradient",
379 "graphics_toolkit", "gray", "grid", "griddata",
380 "griddatan", "gtext", "gunzip", "gzip", "hadamard",
381 "hamming", "hankel", "hanning", "hggroup",
382 "hidden", "hilb", "hist", "histc", "hold", "hot",
383 "hotelling_test", "housh", "hsv", "hurst",
384 "hygecdf", "hygeinv", "hygepdf", "hygernd",
385 "idivide", "ifftshift", "image", "imagesc",
386 "imfinfo", "imread", "imshow", "imwrite", "index",
387 "info", "inpolygon", "inputname", "interpft",
388 "interpn", "intersect", "invhilb", "iqr", "isa",
389 "isdefinite", "isdir", "is_duplicate_entry",
390 "isequal", "isequalwithequalnans", "isfigure",
391 "ishermitian", "ishghandle", "is_leap_year",
392 "isletter", "ismac", "ismember", "ispc", "isprime",
393 "isprop", "isscalar", "issquare", "isstrprop",
394 "issymmetric", "isunix", "is_valid_file_id",
395 "isvector", "jet", "kendall",
396 "kolmogorov_smirnov_cdf",
397 "kolmogorov_smirnov_test", "kruskal_wallis_test",
398 "krylov", "kurtosis", "laplace_cdf", "laplace_inv",
399 "laplace_pdf", "laplace_rnd", "legend", "legendre",
400 "license", "line", "linkprop", "list_primes",
401 "loadaudio", "loadobj", "logistic_cdf",
402 "logistic_inv", "logistic_pdf", "logistic_rnd",
403 "logit", "loglog", "loglogerr", "logm", "logncdf",
404 "logninv", "lognpdf", "lognrnd", "logspace",
405 "lookfor", "ls_command", "lsqnonneg", "magic",
406 "mahalanobis", "manova", "matlabroot",
407 "mcnemar_test", "mean", "meansq", "median", "menu",
408 "mesh", "meshc", "meshgrid", "meshz", "mexext",
409 "mget", "mkpp", "mode", "moment", "movefile",
410 "mpoles", "mput", "namelengthmax", "nargchk",
411 "nargoutchk", "nbincdf", "nbininv", "nbinpdf",
412 "nbinrnd", "nchoosek", "ndgrid", "newplot", "news",
413 "nonzeros", "normcdf", "normest", "norminv",
414 "normpdf", "normrnd", "now", "nthroot", "null",
415 "ocean", "ols", "onenormest", "optimget",
416 "optimset", "orderfields", "orient", "orth",
417 "pack", "pareto", "parseparams", "pascal", "patch",
418 "pathdef", "pcg", "pchip", "pcolor", "pcr",
419 "peaks", "periodogram", "perl", "perms", "pie",
420 "pink", "planerot", "playaudio", "plot",
421 "plotmatrix", "plotyy", "poisscdf", "poissinv",
422 "poisspdf", "poissrnd", "polar", "poly",
423 "polyaffine", "polyarea", "polyderiv", "polyfit",
424 "polygcd", "polyint", "polyout", "polyreduce",
425 "polyval", "polyvalm", "postpad", "powerset",
426 "ppder", "ppint", "ppjumps", "ppplot", "ppval",
427 "pqpnonneg", "prepad", "primes", "print",
428 "print_usage", "prism", "probit", "qp", "qqplot",
429 "quadcc", "quadgk", "quadl", "quadv", "quiver",
430 "qzhess", "rainbow", "randi", "range", "rank",
431 "ranks", "rat", "reallog", "realpow", "realsqrt",
432 "record", "rectangle_lw", "rectangle_sw",
433 "rectint", "refresh", "refreshdata",
434 "regexptranslate", "repmat", "residue", "ribbon",
435 "rindex", "roots", "rose", "rosser", "rotdim",
436 "rref", "run", "run_count", "rundemos", "run_test",
437 "runtests", "saveas", "saveaudio", "saveobj",
438 "savepath", "scatter", "secd", "semilogx",
439 "semilogxerr", "semilogy", "semilogyerr",
440 "setaudio", "setdiff", "setfield", "setxor",
441 "shading", "shift", "shiftdim", "sign_test",
442 "sinc", "sind", "sinetone", "sinewave", "skewness",
443 "slice", "sombrero", "sortrows", "spaugment",
444 "spconvert", "spdiags", "spearman", "spectral_adf",
445 "spectral_xdf", "specular", "speed", "spencer",
446 "speye", "spfun", "sphere", "spinmap", "spline",
447 "spones", "sprand", "sprandn", "sprandsym",
448 "spring", "spstats", "spy", "sqp", "stairs",
449 "statistics", "std", "stdnormal_cdf",
450 "stdnormal_inv", "stdnormal_pdf", "stdnormal_rnd",
451 "stem", "stft", "strcat", "strchr", "strjust",
452 "strmatch", "strread", "strsplit", "strtok",
453 "strtrim", "strtrunc", "structfun", "studentize",
454 "subplot", "subsindex", "subspace", "substr",
455 "substruct", "summer", "surf", "surface", "surfc",
456 "surfl", "surfnorm", "svds", "swapbytes",
457 "sylvester_matrix", "symvar", "synthesis", "table",
458 "tand", "tar", "tcdf", "tempdir", "tempname",
459 "test", "text", "textread", "textscan", "tinv",
460 "title", "toeplitz", "tpdf", "trace", "trapz",
461 "treelayout", "treeplot", "triangle_lw",
462 "triangle_sw", "tril", "trimesh", "triplequad",
463 "triplot", "trisurf", "triu", "trnd", "tsearchn",
464 "t_test", "t_test_regression", "type", "unidcdf",
465 "unidinv", "unidpdf", "unidrnd", "unifcdf",
466 "unifinv", "unifpdf", "unifrnd", "union", "unique",
467 "unix", "unmkpp", "unpack", "untabify", "untar",
468 "unwrap", "unzip", "u_test", "validatestring",
469 "vander", "var", "var_test", "vech", "ver",
470 "version", "view", "voronoi", "voronoin",
471 "waitforbuttonpress", "wavread", "wavwrite",
472 "wblcdf", "wblinv", "wblpdf", "wblrnd", "weekday",
473 "welch_test", "what", "white", "whitebg",
474 "wienrnd", "wilcoxon_test", "wilkinson", "winter",
475 "xlabel", "xlim", "ylabel", "yulewalker", "zip",
476 "zlabel", "z_test")
477
478 loadable_kw = (
479 "airy", "amd", "balance", "besselh", "besseli",
480 "besselj", "besselk", "bessely", "bitpack",
481 "bsxfun", "builtin", "ccolamd", "cellfun",
482 "cellslices", "chol", "choldelete", "cholinsert",
483 "cholinv", "cholshift", "cholupdate", "colamd",
484 "colloc", "convhulln", "convn", "csymamd",
485 "cummax", "cummin", "daspk", "daspk_options",
486 "dasrt", "dasrt_options", "dassl", "dassl_options",
487 "dbclear", "dbdown", "dbstack", "dbstatus",
488 "dbstop", "dbtype", "dbup", "dbwhere", "det",
489 "dlmread", "dmperm", "dot", "eig", "eigs",
490 "endgrent", "endpwent", "etree", "fft", "fftn",
491 "fftw", "filter", "find", "full", "gcd",
492 "getgrent", "getgrgid", "getgrnam", "getpwent",
493 "getpwnam", "getpwuid", "getrusage", "givens",
494 "gmtime", "gnuplot_binary", "hess", "ifft",
495 "ifftn", "inv", "isdebugmode", "issparse", "kron",
496 "localtime", "lookup", "lsode", "lsode_options",
497 "lu", "luinc", "luupdate", "matrix_type", "max",
498 "min", "mktime", "pinv", "qr", "qrdelete",
499 "qrinsert", "qrshift", "qrupdate", "quad",
500 "quad_options", "qz", "rand", "rande", "randg",
501 "randn", "randp", "randperm", "rcond", "regexp",
502 "regexpi", "regexprep", "schur", "setgrent",
503 "setpwent", "sort", "spalloc", "sparse", "spparms",
504 "sprank", "sqrtm", "strfind", "strftime",
505 "strptime", "strrep", "svd", "svd_driver", "syl",
506 "symamd", "symbfact", "symrcm", "time", "tsearch",
507 "typecast", "urlread", "urlwrite")
508
509 mapping_kw = (
510 "abs", "acos", "acosh", "acot", "acoth", "acsc",
511 "acsch", "angle", "arg", "asec", "asech", "asin",
512 "asinh", "atan", "atanh", "beta", "betainc",
513 "betaln", "bincoeff", "cbrt", "ceil", "conj", "cos",
514 "cosh", "cot", "coth", "csc", "csch", "erf", "erfc",
515 "erfcx", "erfinv", "exp", "finite", "fix", "floor",
516 "fmod", "gamma", "gammainc", "gammaln", "imag",
517 "isalnum", "isalpha", "isascii", "iscntrl",
518 "isdigit", "isfinite", "isgraph", "isinf",
519 "islower", "isna", "isnan", "isprint", "ispunct",
520 "isspace", "isupper", "isxdigit", "lcm", "lgamma",
521 "log", "lower", "mod", "real", "rem", "round",
522 "roundb", "sec", "sech", "sign", "sin", "sinh",
523 "sqrt", "tan", "tanh", "toascii", "tolower", "xor")
524
525 builtin_consts = (
526 "EDITOR", "EXEC_PATH", "I", "IMAGE_PATH", "NA",
527 "OCTAVE_HOME", "OCTAVE_VERSION", "PAGER",
528 "PAGER_FLAGS", "SEEK_CUR", "SEEK_END", "SEEK_SET",
529 "SIG", "S_ISBLK", "S_ISCHR", "S_ISDIR", "S_ISFIFO",
530 "S_ISLNK", "S_ISREG", "S_ISSOCK", "WCONTINUE",
531 "WCOREDUMP", "WEXITSTATUS", "WIFCONTINUED",
532 "WIFEXITED", "WIFSIGNALED", "WIFSTOPPED", "WNOHANG",
533 "WSTOPSIG", "WTERMSIG", "WUNTRACED")
534
535 tokens = {
536 'root': [
537 # We should look into multiline comments
538 (r'[%#].*$', Comment),
539 (r'^\s*function', Keyword, 'deffunc'),
540
541 # from 'iskeyword' on hg changeset 8cc154f45e37
542 (words((
543 '__FILE__', '__LINE__', 'break', 'case', 'catch', 'classdef', 'continue', 'do', 'else',
544 'elseif', 'end', 'end_try_catch', 'end_unwind_protect', 'endclassdef',
545 'endevents', 'endfor', 'endfunction', 'endif', 'endmethods', 'endproperties',
546 'endswitch', 'endwhile', 'events', 'for', 'function', 'get', 'global', 'if', 'methods',
547 'otherwise', 'persistent', 'properties', 'return', 'set', 'static', 'switch', 'try',
548 'until', 'unwind_protect', 'unwind_protect_cleanup', 'while'), suffix=r'\b'),
549 Keyword),
550
551 (words(builtin_kw + command_kw + function_kw + loadable_kw + mapping_kw,
552 suffix=r'\b'), Name.Builtin),
553
554 (words(builtin_consts, suffix=r'\b'), Name.Constant),
555
556 # operators in Octave but not Matlab:
557 (r'-=|!=|!|/=|--', Operator),
558 # operators:
559 (r'-|==|~=|<|>|<=|>=|&&|&|~|\|\|?', Operator),
560 # operators in Octave but not Matlab requiring escape for re:
561 (r'\*=|\+=|\^=|\/=|\\=|\*\*|\+\+|\.\*\*', Operator),
562 # operators requiring escape for re:
563 (r'\.\*|\*|\+|\.\^|\.\\|\.\/|\/|\\', Operator),
564
565
566 # punctuation:
567 (r'[\[\](){}:@.,]', Punctuation),
568 (r'=|:|;', Punctuation),
569
570 (r'"[^"]*"', String),
571
572 (r'(\d+\.\d*|\d*\.\d+)([eEf][+-]?[0-9]+)?', Number.Float),
573 (r'\d+[eEf][+-]?[0-9]+', Number.Float),
574 (r'\d+', Number.Integer),
575
576 # quote can be transpose, instead of string:
577 # (not great, but handles common cases...)
578 (r'(?<=[\w)\].])\'+', Operator),
579 (r'(?<![\w)\].])\'', String, 'string'),
580
581 (r'[a-zA-Z_]\w*', Name),
582 (r'.', Text),
583 ],
584 'string': [
585 (r"[^']*'", String, '#pop'),
586 ],
587 'deffunc': [
588 (r'(\s*)(?:(.+)(\s*)(=)(\s*))?(.+)(\()(.*)(\))(\s*)',
589 bygroups(Whitespace, Text, Whitespace, Punctuation,
590 Whitespace, Name.Function, Punctuation, Text,
591 Punctuation, Whitespace), '#pop'),
592 # function with no args
593 (r'(\s*)([a-zA-Z_]\w*)', bygroups(Text, Name.Function), '#pop'),
594 ],
595 }
596
597
598 class ScilabLexer(RegexLexer):
599 """
600 For Scilab source code.
601
602 .. versionadded:: 1.5
603 """
604 name = 'Scilab'
605 aliases = ['scilab']
606 filenames = ['*.sci', '*.sce', '*.tst']
607 mimetypes = ['text/scilab']
608
609 tokens = {
610 'root': [
611 (r'//.*?$', Comment.Single),
612 (r'^\s*function', Keyword, 'deffunc'),
613
614 (words((
615 '__FILE__', '__LINE__', 'break', 'case', 'catch', 'classdef', 'continue', 'do', 'else',
616 'elseif', 'end', 'end_try_catch', 'end_unwind_protect', 'endclassdef',
617 'endevents', 'endfor', 'endfunction', 'endif', 'endmethods', 'endproperties',
618 'endswitch', 'endwhile', 'events', 'for', 'function', 'get', 'global', 'if', 'methods',
619 'otherwise', 'persistent', 'properties', 'return', 'set', 'static', 'switch', 'try',
620 'until', 'unwind_protect', 'unwind_protect_cleanup', 'while'), suffix=r'\b'),
621 Keyword),
622
623 (words(_scilab_builtins.functions_kw +
624 _scilab_builtins.commands_kw +
625 _scilab_builtins.macros_kw, suffix=r'\b'), Name.Builtin),
626
627 (words(_scilab_builtins.variables_kw, suffix=r'\b'), Name.Constant),
628
629 # operators:
630 (r'-|==|~=|<|>|<=|>=|&&|&|~|\|\|?', Operator),
631 # operators requiring escape for re:
632 (r'\.\*|\*|\+|\.\^|\.\\|\.\/|\/|\\', Operator),
633
634 # punctuation:
635 (r'[\[\](){}@.,=:;]', Punctuation),
636
637 (r'"[^"]*"', String),
638
639 # quote can be transpose, instead of string:
640 # (not great, but handles common cases...)
641 (r'(?<=[\w)\].])\'+', Operator),
642 (r'(?<![\w)\].])\'', String, 'string'),
643
644 (r'(\d+\.\d*|\d*\.\d+)([eEf][+-]?[0-9]+)?', Number.Float),
645 (r'\d+[eEf][+-]?[0-9]+', Number.Float),
646 (r'\d+', Number.Integer),
647
648 (r'[a-zA-Z_]\w*', Name),
649 (r'.', Text),
650 ],
651 'string': [
652 (r"[^']*'", String, '#pop'),
653 (r'.', String, '#pop'),
654 ],
655 'deffunc': [
656 (r'(\s*)(?:(.+)(\s*)(=)(\s*))?(.+)(\()(.*)(\))(\s*)',
657 bygroups(Whitespace, Text, Whitespace, Punctuation,
658 Whitespace, Name.Function, Punctuation, Text,
659 Punctuation, Whitespace), '#pop'),
660 # function with no args
661 (r'(\s*)([a-zA-Z_]\w*)', bygroups(Text, Name.Function), '#pop'),
662 ],
663 }

eric ide

mercurial