diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/python/Pygments/py3/pygments/lexers/maxima.py | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'contrib/python/Pygments/py3/pygments/lexers/maxima.py')
-rw-r--r-- | contrib/python/Pygments/py3/pygments/lexers/maxima.py | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/contrib/python/Pygments/py3/pygments/lexers/maxima.py b/contrib/python/Pygments/py3/pygments/lexers/maxima.py new file mode 100644 index 00000000000..73b9eea15b9 --- /dev/null +++ b/contrib/python/Pygments/py3/pygments/lexers/maxima.py @@ -0,0 +1,84 @@ +""" + pygments.lexers.maxima + ~~~~~~~~~~~~~~~~~~~~~~ + + Lexer for the computer algebra system Maxima. + + Derived from pygments/lexers/algebra.py. + + :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import re + +from pygments.lexer import RegexLexer, bygroups, words +from pygments.token import Text, Comment, Operator, Keyword, Name, String, \ + Number, Punctuation + +__all__ = ['MaximaLexer'] + +class MaximaLexer(RegexLexer): + """ + A `Maxima <http://maxima.sourceforge.net>`_ lexer. + Derived from pygments.lexers.MuPADLexer. + + .. versionadded:: 2.11 + """ + name = 'Maxima' + aliases = ['maxima', 'macsyma'] + filenames = ['*.mac', '*.max'] + + keywords = ('if', 'then', 'else', 'elseif', + 'do', 'while', 'repeat', 'until', + 'for', 'from', 'to', 'downto', 'step', 'thru') + + constants = ('%pi', '%e', '%phi', '%gamma', '%i', + 'und', 'ind', 'infinity', 'inf', 'minf', + 'true', 'false', 'unknown', 'done') + + operators = (r'.', r':', r'=', r'#', + r'+', r'-', r'*', r'/', r'^', + r'@', r'>', r'<', r'|', r'!', r"'") + + operator_words = ('and', 'or', 'not') + + tokens = { + 'root': [ + (r'/\*', Comment.Multiline, 'comment'), + (r'"(?:[^"\\]|\\.)*"', String), + (r'\(|\)|\[|\]|\{|\}', Punctuation), + (r'[,;$]', Punctuation), + (words (constants), Name.Constant), + (words (keywords), Keyword), + (words (operators), Operator), + (words (operator_words), Operator.Word), + (r'''(?x) + ((?:[a-zA-Z_#][\w#]*|`[^`]*`) + (?:::[a-zA-Z_#][\w#]*|`[^`]*`)*)(\s*)([(])''', + bygroups(Name.Function, Text.Whitespace, Punctuation)), + (r'''(?x) + (?:[a-zA-Z_#%][\w#%]*|`[^`]*`) + (?:::[a-zA-Z_#%][\w#%]*|`[^`]*`)*''', Name.Variable), + (r'[-+]?(\d*\.\d+([bdefls][-+]?\d+)?|\d+(\.\d*)?[bdefls][-+]?\d+)', Number.Float), + (r'[-+]?\d+', Number.Integer), + (r'\s+', Text.Whitespace), + (r'.', Text) + ], + 'comment': [ + (r'[^*/]+', Comment.Multiline), + (r'/\*', Comment.Multiline, '#push'), + (r'\*/', Comment.Multiline, '#pop'), + (r'[*/]', Comment.Multiline) + ] + } + + def analyse_text (text): + strength = 0.0 + # Input expression terminator. + if re.search (r'\$\s*$', text, re.MULTILINE): + strength += 0.05 + # Function definition operator. + if ':=' in text: + strength += 0.02 + return strength |