diff options
Diffstat (limited to 'venv/lib/python3.11/site-packages/pygments/lexers/maxima.py')
| -rw-r--r-- | venv/lib/python3.11/site-packages/pygments/lexers/maxima.py | 85 | 
1 files changed, 85 insertions, 0 deletions
| diff --git a/venv/lib/python3.11/site-packages/pygments/lexers/maxima.py b/venv/lib/python3.11/site-packages/pygments/lexers/maxima.py new file mode 100644 index 0000000..4c6dc79 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pygments/lexers/maxima.py @@ -0,0 +1,85 @@ +""" +    pygments.lexers.maxima +    ~~~~~~~~~~~~~~~~~~~~~~ + +    Lexer for the computer algebra system Maxima. + +    Derived from pygments/lexers/algebra.py. + +    :copyright: Copyright 2006-2023 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 lexer. +    Derived from pygments.lexers.MuPADLexer. + +    .. versionadded:: 2.11 +    """ +    name = 'Maxima' +    url = 'http://maxima.sourceforge.net' +    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 | 
