448 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			448 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Python
		
	
	
	
"""
 | 
						|
    pygments.lexers.mosel
 | 
						|
    ~~~~~~~~~~~~~~~~~~~~~
 | 
						|
 | 
						|
    Lexers for the mosel language.
 | 
						|
    http://www.fico.com/en/products/fico-xpress-optimization
 | 
						|
 | 
						|
    :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS.
 | 
						|
    :license: BSD, see LICENSE for details.
 | 
						|
"""
 | 
						|
 | 
						|
from pygments.lexer import RegexLexer, words
 | 
						|
from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
 | 
						|
    Number, Punctuation
 | 
						|
 | 
						|
__all__ = ['MoselLexer']
 | 
						|
 | 
						|
FUNCTIONS = (
 | 
						|
    # core functions
 | 
						|
    '_',
 | 
						|
    'abs',
 | 
						|
    'arctan',
 | 
						|
    'asproc',
 | 
						|
    'assert',
 | 
						|
    'bitflip',
 | 
						|
    'bitneg',
 | 
						|
    'bitset',
 | 
						|
    'bitshift',
 | 
						|
    'bittest',
 | 
						|
    'bitval',
 | 
						|
    'ceil',
 | 
						|
    'cos',
 | 
						|
    'create',
 | 
						|
    'currentdate',
 | 
						|
    'currenttime',
 | 
						|
    'cutelt',
 | 
						|
    'cutfirst',
 | 
						|
    'cuthead',
 | 
						|
    'cutlast',
 | 
						|
    'cuttail',
 | 
						|
    'datablock',
 | 
						|
    'delcell',
 | 
						|
    'exists',
 | 
						|
    'exit',
 | 
						|
    'exp',
 | 
						|
    'exportprob',
 | 
						|
    'fclose',
 | 
						|
    'fflush',
 | 
						|
    'finalize',
 | 
						|
    'findfirst',
 | 
						|
    'findlast',
 | 
						|
    'floor',
 | 
						|
    'fopen',
 | 
						|
    'fselect',
 | 
						|
    'fskipline',
 | 
						|
    'fwrite',
 | 
						|
    'fwrite_',
 | 
						|
    'fwriteln',
 | 
						|
    'fwriteln_',
 | 
						|
    'getact',
 | 
						|
    'getcoeff',
 | 
						|
    'getcoeffs',
 | 
						|
    'getdual',
 | 
						|
    'getelt',
 | 
						|
    'getfid',
 | 
						|
    'getfirst',
 | 
						|
    'getfname',
 | 
						|
    'gethead',
 | 
						|
    'getlast',
 | 
						|
    'getobjval',
 | 
						|
    'getparam',
 | 
						|
    'getrcost',
 | 
						|
    'getreadcnt',
 | 
						|
    'getreverse',
 | 
						|
    'getsize',
 | 
						|
    'getslack',
 | 
						|
    'getsol',
 | 
						|
    'gettail',
 | 
						|
    'gettype',
 | 
						|
    'getvars',
 | 
						|
    'isdynamic',
 | 
						|
    'iseof',
 | 
						|
    'isfinite',
 | 
						|
    'ishidden',
 | 
						|
    'isinf',
 | 
						|
    'isnan',
 | 
						|
    'isodd',
 | 
						|
    'ln',
 | 
						|
    'localsetparam',
 | 
						|
    'log',
 | 
						|
    'makesos1',
 | 
						|
    'makesos2',
 | 
						|
    'maxlist',
 | 
						|
    'memoryuse',
 | 
						|
    'minlist',
 | 
						|
    'newmuid',
 | 
						|
    'publish',
 | 
						|
    'random',
 | 
						|
    'read',
 | 
						|
    'readln',
 | 
						|
    'reset',
 | 
						|
    'restoreparam',
 | 
						|
    'reverse',
 | 
						|
    'round',
 | 
						|
    'setcoeff',
 | 
						|
    'sethidden',
 | 
						|
    'setioerr',
 | 
						|
    'setmatherr',
 | 
						|
    'setname',
 | 
						|
    'setparam',
 | 
						|
    'setrandseed',
 | 
						|
    'setrange',
 | 
						|
    'settype',
 | 
						|
    'sin',
 | 
						|
    'splithead',
 | 
						|
    'splittail',
 | 
						|
    'sqrt',
 | 
						|
    'strfmt',
 | 
						|
    'substr',
 | 
						|
    'timestamp',
 | 
						|
    'unpublish',
 | 
						|
    'versionnum',
 | 
						|
    'versionstr',
 | 
						|
    'write',
 | 
						|
    'write_',
 | 
						|
    'writeln',
 | 
						|
    'writeln_',
 | 
						|
 | 
						|
    # mosel exam mmxprs | sed -n -e "s/ [pf][a-z]* \([a-zA-Z0-9_]*\).*/'\1',/p" | sort -u
 | 
						|
    'addcut',
 | 
						|
    'addcuts',
 | 
						|
    'addmipsol',
 | 
						|
    'basisstability',
 | 
						|
    'calcsolinfo',
 | 
						|
    'clearmipdir',
 | 
						|
    'clearmodcut',
 | 
						|
    'command',
 | 
						|
    'copysoltoinit',
 | 
						|
    'crossoverlpsol',
 | 
						|
    'defdelayedrows',
 | 
						|
    'defsecurevecs',
 | 
						|
    'delcuts',
 | 
						|
    'dropcuts',
 | 
						|
    'estimatemarginals',
 | 
						|
    'fixglobal',
 | 
						|
    'flushmsgq',
 | 
						|
    'getbstat',
 | 
						|
    'getcnlist',
 | 
						|
    'getcplist',
 | 
						|
    'getdualray',
 | 
						|
    'getiis',
 | 
						|
    'getiissense',
 | 
						|
    'getiistype',
 | 
						|
    'getinfcause',
 | 
						|
    'getinfeas',
 | 
						|
    'getlb',
 | 
						|
    'getlct',
 | 
						|
    'getleft',
 | 
						|
    'getloadedlinctrs',
 | 
						|
    'getloadedmpvars',
 | 
						|
    'getname',
 | 
						|
    'getprimalray',
 | 
						|
    'getprobstat',
 | 
						|
    'getrange',
 | 
						|
    'getright',
 | 
						|
    'getsensrng',
 | 
						|
    'getsize',
 | 
						|
    'getsol',
 | 
						|
    'gettype',
 | 
						|
    'getub',
 | 
						|
    'getvars',
 | 
						|
    'gety',
 | 
						|
    'hasfeature',
 | 
						|
    'implies',
 | 
						|
    'indicator',
 | 
						|
    'initglobal',
 | 
						|
    'ishidden',
 | 
						|
    'isiisvalid',
 | 
						|
    'isintegral',
 | 
						|
    'loadbasis',
 | 
						|
    'loadcuts',
 | 
						|
    'loadlpsol',
 | 
						|
    'loadmipsol',
 | 
						|
    'loadprob',
 | 
						|
    'maximise',
 | 
						|
    'maximize',
 | 
						|
    'minimise',
 | 
						|
    'minimize',
 | 
						|
    'postsolve',
 | 
						|
    'readbasis',
 | 
						|
    'readdirs',
 | 
						|
    'readsol',
 | 
						|
    'refinemipsol',
 | 
						|
    'rejectintsol',
 | 
						|
    'repairinfeas',
 | 
						|
    'repairinfeas_deprec',
 | 
						|
    'resetbasis',
 | 
						|
    'resetiis',
 | 
						|
    'resetsol',
 | 
						|
    'savebasis',
 | 
						|
    'savemipsol',
 | 
						|
    'savesol',
 | 
						|
    'savestate',
 | 
						|
    'selectsol',
 | 
						|
    'setarchconsistency',
 | 
						|
    'setbstat',
 | 
						|
    'setcallback',
 | 
						|
    'setcbcutoff',
 | 
						|
    'setgndata',
 | 
						|
    'sethidden',
 | 
						|
    'setlb',
 | 
						|
    'setmipdir',
 | 
						|
    'setmodcut',
 | 
						|
    'setsol',
 | 
						|
    'setub',
 | 
						|
    'setucbdata',
 | 
						|
    'stopoptimise',
 | 
						|
    'stopoptimize',
 | 
						|
    'storecut',
 | 
						|
    'storecuts',
 | 
						|
    'unloadprob',
 | 
						|
    'uselastbarsol',
 | 
						|
    'writebasis',
 | 
						|
    'writedirs',
 | 
						|
    'writeprob',
 | 
						|
    'writesol',
 | 
						|
    'xor',
 | 
						|
    'xprs_addctr',
 | 
						|
    'xprs_addindic',
 | 
						|
 | 
						|
    # mosel exam mmsystem | sed -n -e "s/ [pf][a-z]* \([a-zA-Z0-9_]*\).*/'\1',/p" | sort -u
 | 
						|
    'addmonths',
 | 
						|
    'copytext',
 | 
						|
    'cuttext',
 | 
						|
    'deltext',
 | 
						|
    'endswith',
 | 
						|
    'erase',
 | 
						|
    'expandpath',
 | 
						|
    'fcopy',
 | 
						|
    'fdelete',
 | 
						|
    'findfiles',
 | 
						|
    'findtext',
 | 
						|
    'fmove',
 | 
						|
    'formattext',
 | 
						|
    'getasnumber',
 | 
						|
    'getchar',
 | 
						|
    'getcwd',
 | 
						|
    'getdate',
 | 
						|
    'getday',
 | 
						|
    'getdaynum',
 | 
						|
    'getdays',
 | 
						|
    'getdirsep',
 | 
						|
    'getdsoparam',
 | 
						|
    'getendparse',
 | 
						|
    'getenv',
 | 
						|
    'getfsize',
 | 
						|
    'getfstat',
 | 
						|
    'getftime',
 | 
						|
    'gethour',
 | 
						|
    'getminute',
 | 
						|
    'getmonth',
 | 
						|
    'getmsec',
 | 
						|
    'getoserrmsg',
 | 
						|
    'getoserror',
 | 
						|
    'getpathsep',
 | 
						|
    'getqtype',
 | 
						|
    'getsecond',
 | 
						|
    'getsepchar',
 | 
						|
    'getsize',
 | 
						|
    'getstart',
 | 
						|
    'getsucc',
 | 
						|
    'getsysinfo',
 | 
						|
    'getsysstat',
 | 
						|
    'gettime',
 | 
						|
    'gettmpdir',
 | 
						|
    'gettrim',
 | 
						|
    'getweekday',
 | 
						|
    'getyear',
 | 
						|
    'inserttext',
 | 
						|
    'isvalid',
 | 
						|
    'jointext',
 | 
						|
    'makedir',
 | 
						|
    'makepath',
 | 
						|
    'newtar',
 | 
						|
    'newzip',
 | 
						|
    'nextfield',
 | 
						|
    'openpipe',
 | 
						|
    'parseextn',
 | 
						|
    'parseint',
 | 
						|
    'parsereal',
 | 
						|
    'parsetext',
 | 
						|
    'pastetext',
 | 
						|
    'pathmatch',
 | 
						|
    'pathsplit',
 | 
						|
    'qsort',
 | 
						|
    'quote',
 | 
						|
    'readtextline',
 | 
						|
    'regmatch',
 | 
						|
    'regreplace',
 | 
						|
    'removedir',
 | 
						|
    'removefiles',
 | 
						|
    'setchar',
 | 
						|
    'setdate',
 | 
						|
    'setday',
 | 
						|
    'setdsoparam',
 | 
						|
    'setendparse',
 | 
						|
    'setenv',
 | 
						|
    'sethour',
 | 
						|
    'setminute',
 | 
						|
    'setmonth',
 | 
						|
    'setmsec',
 | 
						|
    'setoserror',
 | 
						|
    'setqtype',
 | 
						|
    'setsecond',
 | 
						|
    'setsepchar',
 | 
						|
    'setstart',
 | 
						|
    'setsucc',
 | 
						|
    'settime',
 | 
						|
    'settrim',
 | 
						|
    'setyear',
 | 
						|
    'sleep',
 | 
						|
    'splittext',
 | 
						|
    'startswith',
 | 
						|
    'system',
 | 
						|
    'tarlist',
 | 
						|
    'textfmt',
 | 
						|
    'tolower',
 | 
						|
    'toupper',
 | 
						|
    'trim',
 | 
						|
    'untar',
 | 
						|
    'unzip',
 | 
						|
    'ziplist',
 | 
						|
 | 
						|
    # mosel exam mmjobs | sed -n -e "s/ [pf][a-z]* \([a-zA-Z0-9_]*\).*/'\1',/p" | sort -u
 | 
						|
    'canceltimer',
 | 
						|
    'clearaliases',
 | 
						|
    'compile',
 | 
						|
    'connect',
 | 
						|
    'detach',
 | 
						|
    'disconnect',
 | 
						|
    'dropnextevent',
 | 
						|
    'findxsrvs',
 | 
						|
    'getaliases',
 | 
						|
    'getannidents',
 | 
						|
    'getannotations',
 | 
						|
    'getbanner',
 | 
						|
    'getclass',
 | 
						|
    'getdsoprop',
 | 
						|
    'getdsopropnum',
 | 
						|
    'getexitcode',
 | 
						|
    'getfromgid',
 | 
						|
    'getfromid',
 | 
						|
    'getfromuid',
 | 
						|
    'getgid',
 | 
						|
    'gethostalias',
 | 
						|
    'getid',
 | 
						|
    'getmodprop',
 | 
						|
    'getmodpropnum',
 | 
						|
    'getnextevent',
 | 
						|
    'getnode',
 | 
						|
    'getrmtid',
 | 
						|
    'getstatus',
 | 
						|
    'getsysinfo',
 | 
						|
    'gettimer',
 | 
						|
    'getuid',
 | 
						|
    'getvalue',
 | 
						|
    'isqueueempty',
 | 
						|
    'load',
 | 
						|
    'nullevent',
 | 
						|
    'peeknextevent',
 | 
						|
    'resetmodpar',
 | 
						|
    'run',
 | 
						|
    'send',
 | 
						|
    'setcontrol',
 | 
						|
    'setdefstream',
 | 
						|
    'setgid',
 | 
						|
    'sethostalias',
 | 
						|
    'setmodpar',
 | 
						|
    'settimer',
 | 
						|
    'setuid',
 | 
						|
    'setworkdir',
 | 
						|
    'stop',
 | 
						|
    'unload',
 | 
						|
    'wait',
 | 
						|
    'waitexpired',
 | 
						|
    'waitfor',
 | 
						|
    'waitforend',
 | 
						|
)
 | 
						|
 | 
						|
 | 
						|
class MoselLexer(RegexLexer):
 | 
						|
    """
 | 
						|
    For the Mosel optimization language.
 | 
						|
    """
 | 
						|
    name = 'Mosel'
 | 
						|
    aliases = ['mosel']
 | 
						|
    filenames = ['*.mos']
 | 
						|
    url = 'https://www.fico.com/fico-xpress-optimization/docs/latest/mosel/mosel_lang/dhtml/moselreflang.html'
 | 
						|
    version_added = '2.6'
 | 
						|
 | 
						|
    tokens = {
 | 
						|
        'root': [
 | 
						|
            (r'\n', Text),
 | 
						|
            (r'\s+', Text.Whitespace),
 | 
						|
            (r'!.*?\n', Comment.Single),
 | 
						|
            (r'\(!(.|\n)*?!\)', Comment.Multiline),
 | 
						|
            (words((
 | 
						|
                'and', 'as', 'break', 'case', 'count', 'declarations', 'do',
 | 
						|
                'dynamic', 'elif', 'else', 'end-', 'end', 'evaluation', 'false',
 | 
						|
                'forall', 'forward', 'from', 'function', 'hashmap', 'if',
 | 
						|
                'imports', 'include', 'initialisations', 'initializations', 'inter',
 | 
						|
                'max', 'min', 'model', 'namespace', 'next', 'not', 'nsgroup',
 | 
						|
                'nssearch', 'of', 'options', 'or', 'package', 'parameters',
 | 
						|
                'procedure', 'public', 'prod', 'record', 'repeat', 'requirements',
 | 
						|
                'return', 'sum', 'then', 'to', 'true', 'union', 'until', 'uses',
 | 
						|
                'version', 'while', 'with'), prefix=r'\b', suffix=r'\b'),
 | 
						|
             Keyword.Builtin),
 | 
						|
            (words((
 | 
						|
                'range', 'array', 'set', 'list', 'mpvar', 'mpproblem', 'linctr',
 | 
						|
                'nlctr', 'integer', 'string', 'real', 'boolean', 'text', 'time',
 | 
						|
                'date', 'datetime', 'returned', 'Model', 'Mosel', 'counter',
 | 
						|
                'xmldoc', 'is_sos1', 'is_sos2', 'is_integer', 'is_binary',
 | 
						|
                'is_continuous', 'is_free', 'is_semcont', 'is_semint',
 | 
						|
                'is_partint'), prefix=r'\b', suffix=r'\b'),
 | 
						|
             Keyword.Type),
 | 
						|
            (r'(\+|\-|\*|/|=|<=|>=|\||\^|<|>|<>|\.\.|\.|:=|::|:|in|mod|div)',
 | 
						|
             Operator),
 | 
						|
            (r'[()\[\]{},;]+', Punctuation),
 | 
						|
            (words(FUNCTIONS,  prefix=r'\b', suffix=r'\b'), Name.Function),
 | 
						|
            (r'(\d+\.(?!\.)\d*|\.(?!.)\d+)([eE][+-]?\d+)?', Number.Float),
 | 
						|
            (r'\d+([eE][+-]?\d+)?', Number.Integer),
 | 
						|
            (r'[+-]?Infinity', Number.Integer),
 | 
						|
            (r'0[xX][0-9a-fA-F]+', Number),
 | 
						|
            (r'"', String.Double, 'double_quote'),
 | 
						|
            (r'\'', String.Single, 'single_quote'),
 | 
						|
            (r'(\w+|(\.(?!\.)))', Text),
 | 
						|
        ],
 | 
						|
        'single_quote': [
 | 
						|
            (r'\'', String.Single, '#pop'),
 | 
						|
            (r'[^\']+', String.Single),
 | 
						|
        ],
 | 
						|
        'double_quote': [
 | 
						|
            (r'(\\"|\\[0-7]{1,3}\D|\\[abfnrtv]|\\\\)', String.Escape),
 | 
						|
            (r'\"', String.Double, '#pop'),
 | 
						|
            (r'[^"\\]+', String.Double),
 | 
						|
        ],
 | 
						|
    }
 |