mosel-mode
Mosel is a language for defining LP and IP models, used by Xpress-MP
among other solvers. I couldn’t find an Emacs mode for editing Mosel, so here’s a small contribution which does some syntax highlighting. It also lives at
EmacsWiki .
( define-generic-mode 'mosel-mode
;; comment characters
' ( "!" )
' ( "model" "end-model" "uses" "declarations" "end-declarations" "writeln" "case" "end-case" "else" "in" "array" "of" "getsol" "getsensrng" "getobjval" "is_integer" ) ;; keywords
' (
( "(!.*?\\(\n.*?\\)*?!)" . 'font-lock-comment-face ) ;; the RE is right but it seems to fail for blocks longer than a few lines
( ";" . 'font-lock-builtin-face )
( ":=" . 'font-lock-builtin-face )
( "::" . 'font-lock-builtin-face )
( "\\.\\." . 'font-lock-builtin-face )
( "<=" . 'font-lock-builtin-face )
( ">=" . 'font-lock-builtin-face )
( "=" . 'font-lock-builtin-face )
( ":" . 'font-lock-builtin-face )
( "linctr" . 'font-lock-function-name-face )
( "mpvar" . 'font-lock-function-name-face )
( "real" . 'font-lock-function-name-face )
( "integer" . 'font-lock-function-name-face )
( "string" . 'font-lock-function-name-face )
( "sum" . 'font-lock-function-name-face )
( "forall" . 'font-lock-function-name-face )
( "end-procedure" . 'font-lock-function-name-face )
( "procedure" . 'font-lock-function-name-face )
( "end-function" . 'font-lock-function-name-face )
( "function" . 'font-lock-function-name-face )
( "maximize" . 'font-lock-function-name-face )
( "minimize" . 'font-lock-function-name-face )
( "XPRS_OPT" . 'font-lock-constant-face )
( "XPRS_UNF" . 'font-lock-constant-face )
( "XPRS_INF" . 'font-lock-constant-face )
( "XPRS_UNB" . 'font-lock-constant-face )
( "XPRS_OTH" . 'font-lock-constant-face )
)
' ( "\\.mos\\'" ) ;; filename suffix
nil ;; extra function hooks
"Major mode for Mosel highlighting." )
Installation
Paste it into your .emacs
file and execute it with C-x C-e
. When
you edit a .mos
file, it will automatically go into mosel-mode
.