summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/pygments/lexers/maxima.py
diff options
context:
space:
mode:
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.py85
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