if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'gmpl') == -1 " Vim syntax file " Language: GMPL " Maintainer: Mark Mba Wright " Latest Revision: 9 July 2012 if exists("b:current_syntax") finish endif syn sync fromstart syn match gmplArithmeticSetOperator "\.\." " Integer with - + or nothing in front syn match gmplNumber '\d\+' syn match gmplNumber '[-+]\d\+' " Floating point gmplNumber with decimal no E or e (+,-) syn match gmplNumber '\d*\.\d\+' syn match gmplNumber '[-+]\d*\.\d\+' " Floating point like gmplNumber with E and no decimal point (+,-) syn match gmplNumber '[-+]\=\d[[:digit:]]*[eE][\-+]\=\d\+' syn match gmplNumber '\d[[:digit:]]*[eE][\-+]\=\d\+' " Floating point like gmplNumber with E and decimal point (+,-) syn match gmplNumber '[-+]\=\d[[:digit:]]*\.\d*[eE][\-+]\=\d\+' syn match gmplNumber '\d[[:digit:]]*\.\d*[eE][\-+]\=\d\+' syn match gmplIndex /\<\%(in\>\)\@!\w*/ contained contains=gmplKeyword,gmplNumber syn match gmplLabel '[a-zA-Z][a-zA-Z0-9_]*' syn match gmplArithmeticOperator "[-+]" syn match gmplArithmeticOperator "\.\=[*/\\^]" syn match gmplRelationalOperator "[=~]=" syn match gmplRelationalOperator "[<>]=\=" " syn match gmplLogicalOperator "[&|~] " match indeces " comments syn match gmplComment /\/\*.\{-}\*\// syn region gmplComment start="/\*" end="\*/" syn match gmplComment '#.\{-}$' " strings syn region gmplString start="\"" end="\"" syn region gmplString start="\'" end="\'" contains=gmplStringToken syn match gmplStringToken '\%[a-z]' contained " Keywords syn keyword gmplKeyword and else by if cross in diff inter div less mod union not within or symdiff then syn keyword gmplKeyword minimize maximize solve syn keyword gmplType set var param nextgroup=gmplLabel skipwhite " Regions syn region gmplIndexExpression start="{" end="}" transparent contains=gmplIndex,gmplIndexExpression syn region gmplIndexGroup start="\[" end="\]" transparent contains=gmplIndex " syn region gmplParen start="(" end=")" "" catch errors caused by wrong parenthesis syn match gmplParensError ")\|}\|\]" syn match gmplParensErrA contained "\]" syn match gmplParensErrC contained "}" hi level1c ctermfg=brown guifg=brown hi level2c ctermfg=darkgreen guifg=darkgreen gui=bold hi level3c ctermfg=Darkblue guifg=Darkblue hi level4c ctermfg=darkmagenta guifg=darkmagenta gui=bold hi level5c ctermfg=darkcyan guifg=darkcyan hi level6c ctermfg=white guifg=white gui=bold hi level7c ctermfg=darkred guifg=darkred hi level8c ctermfg=blue guifg=blue gui=bold hi level9c ctermfg=darkgray guifg=darkgray hi level10c ctermfg=brown guifg=brown gui=bold hi level11c ctermfg=darkgreen guifg=darkgreen hi level12c ctermfg=Darkblue guifg=Darkblue gui=bold hi level13c ctermfg=darkmagenta guifg=darkmagenta hi level14c ctermfg=darkcyan guifg=darkcyan gui=bold hi level15c ctermfg=gray guifg=gray " These are the regions for each pair. " This could be improved, perhaps, by makeing them match [ and { also, " but I'm not going to take the time to figure out haw to make the " end pattern match only the proper type. syn region level1 matchgroup=level1c start=/(/ end=/)/ contains=TOP,level1,level2,level3,level4,level5,level6,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens syn region level2 matchgroup=level2c start=/(/ end=/)/ contains=TOP,level2,level3,level4,level5,level6,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens syn region level3 matchgroup=level3c start=/(/ end=/)/ contains=TOP,level3,level4,level5,level6,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens syn region level4 matchgroup=level4c start=/(/ end=/)/ contains=TOP,level4,level5,level6,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens syn region level5 matchgroup=level5c start=/(/ end=/)/ contains=TOP,level5,level6,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens syn region level6 matchgroup=level6c start=/(/ end=/)/ contains=TOP,level6,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens syn region level7 matchgroup=level7c start=/(/ end=/)/ contains=TOP,level7,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens syn region level8 matchgroup=level8c start=/(/ end=/)/ contains=TOP,level8,level9,level10,level11,level12,level13,level14,level15, NoInParens syn region level9 matchgroup=level9c start=/(/ end=/)/ contains=TOP,level9,level10,level11,level12,level13,level14,level15, NoInParens syn region level10 matchgroup=level10c start=/(/ end=/)/ contains=TOP,level10,level11,level12,level13,level14,level15, NoInParens syn region level11 matchgroup=level11c start=/(/ end=/)/ contains=TOP,level11,level12,level13,level14,level15, NoInParens syn region level12 matchgroup=level12c start=/(/ end=/)/ contains=TOP,level12,level13,level14,level15, NoInParens syn region level13 matchgroup=level13c start=/(/ end=/)/ contains=TOP,level13,level14,level15, NoInParens syn region level14 matchgroup=level14c start=/(/ end=/)/ contains=TOP,level14,level15, NoInParens syn region level15 matchgroup=level15c start=/(/ end=/)/ contains=TOP,level15, NoInParens let b:current_syntax = "gmpl" hi def link gmplKeyword Keyword hi def link gmplParensError Error hi def link gmplParensErrA Error hi def link gmplParensErrB Error hi def link gmplParensErrC Error " hi def link gmplIndexExpression Label " hi def link gmplParen Label " hi def link gmplIndexGroup Label hi def link gmplIndex Identifier hi def link gmplNumber Number hi def link gmplComment Comment hi def link gmplType Type hi def link gmplLabel Keyword hi def link gmplString String hi def link gmplStringToken Special endif