rf-web/vendor/bundle/gems/rouge-3.12.0/lib/rouge/lexers/mosel.rb
2019-10-21 10:18:17 +02:00

233 lines
8.7 KiB
Ruby

# -*- coding: utf-8 -*- #
# frozen_string_literal: true
module Rouge
module Lexers
class Mosel < RegexLexer
tag 'mosel'
filenames '*.mos'
title "Mosel"
desc "An optimization language used by Fico's Xpress."
# http://www.fico.com/en/products/fico-xpress-optimization-suite
filenames '*.mos'
mimetypes 'text/x-mosel'
def self.detect?(text)
return true if text =~ /^\s*(model|package)\s+/
end
id = /[a-zA-Z_][a-zA-Z0-9_]*/
############################################################################################################################
# General language lements
############################################################################################################################
core_keywords = %w(
and array as
boolean break
case count counter
declarations div do dynamic
elif else end evaluation exit
false forall forward from function
if imports in include initialisations initializations integer inter is_binary is_continuous is_free is_integer is_partint is_semcont is_semint is_sos1 is_sos2
linctr list
max min mod model mpvar
next not of options or
package parameters procedure
public prod range real record repeat requirements
set string sum
then to true
union until uses
version
while with
)
core_functions = %w(
abs arctan assert
bitflip bitneg bitset bitshift bittest bitval
ceil cos create currentdate currenttime cuthead cuttail
delcell exists exit exp exportprob
fclose fflush finalize findfirst findlast floor fopen fselect fskipline
getact getcoeff getcoeffs getdual getfid getfirst gethead getfname getlast getobjval getparam getrcost getreadcnt getreverse getsize getslack getsol gettail gettype getvars
iseof ishidden isodd ln log
makesos1 makesos2 maxlist minlist
publish
random read readln reset reverse round
setcoeff sethidden setioerr setname setparam setrandseed settype sin splithead splittail sqrt strfmt substr
timestamp
unpublish
write writeln
)
############################################################################################################################
# mmxprs module elements
############################################################################################################################
mmxprs_functions = %w(
addmipsol
basisstability
calcsolinfo clearmipdir clearmodcut command copysoltoinit
defdelayedrows defsecurevecs
estimatemarginals
fixglobal
getbstat getdualray getiis getiissense getiistype getinfcause getinfeas getlb getloadedlinctrs getloadedmpvars getname getprimalray getprobstat getrange getsensrng getsize getsol getub getvars
implies indicator isiisvalid isintegral loadbasis
loadmipsol loadprob
maximize minimize
postsolve
readbasis readdirs readsol refinemipsol rejectintsol repairinfeas resetbasis resetiis resetsol
savebasis savemipsol savesol savestate selectsol setbstat setcallback setcbcutoff setgndata setlb setmipdir setmodcut setsol setub setucbdata stopoptimize
unloadprob
writebasis writedirs writeprob writesol
xor
)
mmxpres_constants = %w(XPRS_OPT XPRS_UNF XPRS_INF XPRS_UNB XPRS_OTH)
mmxprs_parameters = %w(XPRS_colorder XPRS_enumduplpol XPRS_enummaxsol XPRS_enumsols XPRS_fullversion XPRS_loadnames XPRS_problem XPRS_probname XPRS_verbose)
############################################################################################################################
# mmsystem module elements
############################################################################################################################
mmsystem_functions = %w(
addmonths
copytext cuttext
deltext
endswith expandpath
fcopy fdelete findfiles findtext fmove
getasnumber getchar getcwd getdate getday getdaynum getdays getdirsep
getendparse setendparse
getenv getfsize getfstat getftime gethour getminute getmonth getmsec getpathsep
getqtype setqtype
getsecond
getsepchar setsepchar
getsize
getstart setstart
getsucc setsucc
getsysinfo getsysstat gettime
gettmpdir
gettrim settrim
getweekday getyear
inserttext isvalid
makedir makepath newtar
newzip nextfield
openpipe
parseextn parseint parsereal parsetext pastetext pathmatch pathsplit
qsort quote
readtextline regmatch regreplace removedir removefiles
setchar setdate setday setenv sethour
setminute setmonth setmsec setsecond settime setyear sleep startswith system
tarlist textfmt tolower toupper trim
untar unzip
ziplist
)
mmsystem_parameters = %w(datefmt datetimefmt monthnames sys_endparse sys_fillchar sys_pid sys_qtype sys_regcache sys_sepchar)
############################################################################################################################
# mmjobs module elements
############################################################################################################################
mmjobs_instance_mgmt_functions = %w(
clearaliases connect
disconnect
findxsrvs
getaliases getbanner gethostalias
sethostalias
)
mmjobs_model_mgmt_functions = %w(
compile
detach
getannidents getannotations getexitcode getgid getid getnode getrmtid getstatus getuid
load
reset resetmodpar run
setcontrol setdefstream setmodpar setworkdir stop
unload
)
mmjobs_synchornization_functions = %w(
dropnextevent
getclass getfromgid getfromid getfromuid getnextevent getvalue
isqueueempty
nullevent
peeknextevent
send setgid setuid
wait waitfor
)
mmjobs_functions = mmjobs_instance_mgmt_functions + mmjobs_model_mgmt_functions + mmjobs_synchornization_functions
mmjobs_parameters = %w(conntmpl defaultnode fsrvdelay fsrvnbiter fsrvport jobid keepalive nodenumber parentnumber)
state :whitespace do
# Spaces
rule %r/\s+/m, Text
# ! Comments
rule %r((!).*$\n?), Comment::Single
# (! Comments !)
rule %r(\(!.*?!\))m, Comment::Multiline
end
# From Mosel documentation:
# Constant strings of characters must be quoted with single (') or double quote (") and may extend over several lines. Strings enclosed in double quotes may contain C-like escape sequences introduced by the 'backslash'
# character (\a \b \f \n \r \t \v \xxx with xxx being the character code as an octal number).
# Each sequence is replaced by the corresponding control character (e.g. \n is the `new line' command) or, if no control character exists, by the second character of the sequence itself (e.g. \\ is replaced by '\').
# The escape sequences are not interpreted if they are contained in strings that are enclosed in single quotes.
state :single_quotes do
rule %r/'/, Str::Single, :pop!
rule %r/[^']+/, Str::Single
end
state :double_quotes do
rule %r/"/, Str::Double, :pop!
rule %r/(\\"|\\[0-7]{1,3}\D|\\[abfnrtv]|\\\\)/, Str::Escape
rule %r/[^"]/, Str::Double
end
state :base do
rule %r{"}, Str::Double, :double_quotes
rule %r{'}, Str::Single, :single_quotes
rule %r{((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?}, Num
rule %r{[~!@#\$%\^&\*\(\)\+`\-={}\[\]:;<>\?,\.\/\|\\]}, Punctuation
# rule %r{'([^']|'')*'}, Str
# rule %r/"(\\\\|\\"|[^"])*"/, Str
rule %r/(true|false)\b/i, Name::Builtin
rule %r/\b(#{core_keywords.join('|')})\b/i, Keyword
rule %r/\b(#{core_functions.join('|')})\b/, Name::Builtin
rule %r/\b(#{mmxprs_functions.join('|')})\b/, Name::Function
rule %r/\b(#{mmxpres_constants.join('|')})\b/, Name::Constant
rule %r/\b(#{mmxprs_parameters.join('|')})\b/i, Name::Property
rule %r/\b(#{mmsystem_functions.join('|')})\b/i, Name::Function
rule %r/\b(#{mmsystem_parameters.join('|')})\b/, Name::Property
rule %r/\b(#{mmjobs_functions.join('|')})\b/i, Name::Function
rule %r/\b(#{mmjobs_parameters.join('|')})\b/, Name::Property
rule id, Name
end
state :root do
mixin :whitespace
mixin :base
end
end
end
end