" Language:     ampl (A Mathematical Programming Language)
" Maintainer:   Krief David <david.krief@etu.enseeiht.fr> or <david_krief@hotmail.com>
" Last Change:  2002 January 26


if version < 600
 syntax clear
elseif exists("b:current_syntax")
 finish
endif




"--
syn match   amplEntityKeyword     "\(subject to\)\|\(subj to\)\|\(s\.t\.\)"
syn keyword amplEntityKeyword     minimize   maximize  objective        

syn keyword amplEntityKeyword     coeff      coef      cover        obj       default
syn keyword amplEntityKeyword     from       to        to_come      net_in    net_out  
syn keyword amplEntityKeyword     dimen      dimension 



"--
syn keyword amplType              integer    binary    set          param     var
syn keyword amplType              node       ordered   circular     reversed  symbolic
syn keyword amplType              arc        



"--
syn keyword amplStatement         check      close     \display     drop      include
syn keyword amplStatement         print      printf    quit         reset     restore
syn keyword amplStatement         solve      update    write        shell     model
syn keyword amplStatement         data       option    let          solution  fix
syn keyword amplStatement         unfix      end       function     pipe      format



"--
syn keyword amplConditional       if         then      else         and       or 
syn keyword amplConditional       exists     forall    in           not       within      



"--
syn keyword amplRepeat            while      repeat    for          



"-- 
syn keyword amplOperators         union      diff      difference   symdiff   sum
syn keyword amplOperators         inter      intersect intersection cross     setof
syn keyword amplOperators         by         less      mod          div       product
"syn keyword amplOperators         min        max   
"conflict between functions max, min and operators max, min

syn match   amplBasicOperators    "||\|<=\|==\|\^\|<\|=\|!\|-\|\.\.\|:="
syn match   amplBasicOperators    "&&\|>=\|!=\|\*\|>\|:\|/\|+\|\*\*"




"--
syn match   amplComment           "\#.*"
syn region  amplComment           start=+\/\*+	            end=+\*\/+

syn region  amplStrings           start=+\'+    skip=+\\'+  end=+\'+
syn region  amplStrings           start=+\"+    skip=+\\"+  end=+\"+

syn match   amplNumerics          "[+-]\=\<\d\+\(\.\d\+\)\=\([dDeE][-+]\=\d\+\)\=\>" 
syn match   amplNumerics          "[+-]\=Infinity" 


"-- 
syn keyword amplSetFunction       card       next     nextw       prev      prevw
syn keyword amplSetFunction       first      last     member      ord       ord0

syn keyword amplBuiltInFunction   abs        acos     acosh       alias     asin
syn keyword amplBuiltInFunction   asinh      atan     atan2       atanh     ceil
syn keyword amplBuiltInFunction   cos        exp      floor       log       log10
syn keyword amplBuiltInFunction   max        min      precision   round     sin
syn keyword amplBuiltInFunction   sinh       sqrt     tan         tanh      trunc 

syn keyword amplRandomGenerator   Beta       Cauchy   Exponential Gamma     Irand224
syn keyword amplRandomGenerator   Normal     Poisson  Uniform     Uniform01



"-- to highlight the 'dot-suffixes'
syn match   amplDotSuffix         "\h\w*\.\(lb\|ub\)"hs=e-2
syn match   amplDotSuffix         "\h\w*\.\(lb0\|lb1\|lb2\|lrc\|ub0\)"hs=e-3
syn match   amplDotSuffix         "\h\w*\.\(ub1\|ub2\|urc\|val\|lbs\|ubs\)"hs=e-3
syn match   amplDotSuffix         "\h\w*\.\(init\|body\|dinit\|dual\)"hs=e-4
syn match   amplDotSuffix         "\h\w*\.\(init0\|ldual\|slack\|udual\)"hs=e-5
syn match   amplDotSuffix         "\h\w*\.\(lslack\|uslack\|dinit0\)"hs=e-6



"--
syn match   amplPiecewise         "<<\|>>"



"-- Todo.
syn keyword amplTodo contained	 TODO FIXME XXX










if version >= 508 || !exists("did_ampl_syntax_inits")
  if version < 508
    let did_ampl_syntax_inits = 1
    command -nargs=+ HiLink hi link <args>
  else
    command -nargs=+ HiLink hi def link <args>
  endif

  " The default methods for highlighting. Can be overridden later.
  HiLink amplEntityKeyword      Keyword
  HiLink amplType               Type
  HiLink amplStatement          Statement
  HiLink amplOperators          Operator
  HiLink amplBasicOperators     Operator
  HiLink amplConditional        Conditional
  HiLink amplRepeat             Repeat
  HiLink amplStrings            String
  HiLink amplNumerics           Number
  HiLink amplSetFunction        Function
  HiLink amplBuiltInFunction    Function
  HiLink amplRandomGenerator    Function
  HiLink amplComment            Comment
  HiLink amplDotSuffix          Special
  HiLink amplPiecewise          Special

  delcommand HiLink
endif 

let b:current_syntax = "ampl"

" vim: ts=8


