Testing_pikesquares/.venv/lib/python3.12/site-packages/pygments/lexers/maple.py
2025-02-02 00:02:31 -05:00

291 lines
7.8 KiB
Python

"""
pygments.lexers.maple
~~~~~~~~~~~~~~~~~~~~~
Lexers for Maple.
:copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
from pygments.lexer import words, bygroups, ExtendedRegexLexer
from pygments.token import Comment, Name, String, Whitespace, Operator, Punctuation, Number, Keyword
__all__ = ['MapleLexer']
class MapleLexer(ExtendedRegexLexer):
"""
Lexer for Maple.
"""
name = 'Maple'
aliases = ['maple']
filenames = ['*.mpl', '*.mi', '*.mm']
mimetypes = ['text/x-maple']
url = 'https://www.maplesoft.com/products/Maple/'
version_added = '2.19'
keywords = ('and',
'assuming',
'break',
'by',
'catch',
'description',
'do',
'done',
'elif',
'else',
'end',
'error',
'export',
'fi',
'finally',
'for',
'from',
'global',
'if',
'implies',
'in',
'intersect',
'local',
'minus',
'mod',
'module',
'next',
'not',
'od',
'option',
'options',
'or',
'proc',
'quit',
'read',
'return',
'save',
'stop',
'subset',
'then',
'to',
'try',
'union',
'use',
'uses',
'while',
'xor')
builtins = ('abs',
'add',
'addressof',
'anames',
'and',
'andmap',
'andseq',
'appendto',
'Array',
'array',
'ArrayOptions',
'assemble',
'ASSERT',
'assign',
'assigned',
'attributes',
'cat',
'ceil',
'coeff',
'coeffs',
'conjugate',
'convert',
'CopySign',
'DEBUG',
'debugopts',
'Default0',
'DefaultOverflow',
'DefaultUnderflow',
'degree',
'denom',
'diff',
'disassemble',
'divide',
'done',
'entries',
'EqualEntries',
'eval',
'evalb',
'evalf',
'evalhf',
'evalindets',
'evaln',
'expand',
'exports',
'factorial',
'floor',
'frac',
'frem',
'FromInert',
'frontend',
'gc',
'genpoly',
'has',
'hastype',
'hfarray',
'icontent',
'igcd',
'ilcm',
'ilog10',
'Im',
'implies',
'indets',
'indices',
'intersect',
'iolib',
'iquo',
'irem',
'iroot',
'iroot',
'isqrt',
'kernelopts',
'lcoeff',
'ldegree',
'length',
'lexorder',
'lhs',
'lowerbound',
'lprint',
'macro',
'map',
'max',
'maxnorm',
'member',
'membertype',
'min',
'minus',
'mod',
'modp',
'modp1',
'modp2',
'mods',
'mul',
'NextAfter',
'nops',
'normal',
'not',
'numboccur',
'numelems',
'numer',
'NumericClass',
'NumericEvent',
'NumericEventHandler',
'NumericStatus',
'op',
'or',
'order',
'OrderedNE',
'ormap',
'orseq',
'parse',
'piecewise',
'pointto',
'print',
'quit',
'Re',
'readlib',
'Record',
'remove',
'rhs',
'round',
'rtable',
'rtable_elems',
'rtable_eval',
'rtable_indfns',
'rtable_num_elems',
'rtable_options',
'rtable_redim',
'rtable_scanblock',
'rtable_set_indfn',
'rtable_split_unit',
'savelib',
'Scale10',
'Scale2',
'SDMPolynom',
'searchtext',
'SearchText',
'select',
'selectremove',
'seq',
'series',
'setattribute',
'SFloatExponent',
'SFloatMantissa',
'sign',
'sort',
'ssystem',
'stop',
'String',
'subs',
'subset',
'subsindets',
'subsop',
'substring',
'system',
'table',
'taylor',
'tcoeff',
'time',
'timelimit',
'ToInert',
'traperror',
'trunc',
'type',
'typematch',
'unames',
'unassign',
'union',
'Unordered',
'upperbound',
'userinfo',
'writeto',
'xor',
'xormap',
'xorseq')
def delayed_callback(self, match, ctx):
yield match.start(1), Punctuation, match.group(1) # quote
ctx.pos = match.start(2)
orig_end = ctx.end
ctx.end = match.end(2)
yield from self.get_tokens_unprocessed(context=ctx)
yield match.end(2), Punctuation, match.group(1) # quote
ctx.pos = match.end()
ctx.end = orig_end
tokens = {
'root': [
(r'#.*\n', Comment.Single),
(r'\(\*', Comment.Multiline, 'comment'),
(r'"(\\.|.|\s)*?"', String),
(r"('+)((.|\n)*?)\1", delayed_callback),
(r'`(\\`|.)*?`', Name),
(words(keywords, prefix=r'\b', suffix=r'\b'), Keyword),
(words(builtins, prefix=r'\b', suffix=r'\b'), Name.Builtin),
(r'[a-zA-Z_][a-zA-Z0-9_]*', Name),
(r'(:=|\*\*|@@|<=|>=|<>|->|::|\.\.|&\+|[\+\-\*\.\^\$/@&,:=<>%~])', Operator),
(r'[;^!@$\(\)\[\]{}|_\\#?]+', Punctuation),
(r'(\d+)(\.\.)', bygroups(Number.Integer, Punctuation)),
(r'(\d*\.\d+|\d+\.\d*)([eE][+-]?\d+)?', Number.Float),
(r'\d+', Number.Integer),
(r'\s+', Whitespace),
],
'comment': [
(r'.*\(\*', Comment.Multiline, '#push'),
(r'.*\*\)', Comment.Multiline, '#pop'),
(r'.*\n', Comment.Multiline),
]
}
def analyse_text(text):
if ':=' in text:
return 0.1