" Vim syntax file
" Language:	SiCAD (procedure language)
" Maintainer:	Zsolt Branyiczky <zbranyiczky@lmark.mgx.hu>
" Last Change:	2001 May 10
" URL:		http://lmark.mgx.hu:81/download/vim/sicad.vim

" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
if version < 600
  syntax clear
elseif exists("b:current_syntax")
  finish
endif

" used syntax highlighting in a sql command
syn include @SQL <sfile>:p:h/sql.vim

" spaces are used in (auto)indents since sicad hates tabulator characters
if version >= 600
  setlocal expandtab
else
  set expandtab
endif

" ignore case
syn case ignore

" most important commands - not listed by ausku
syn keyword sicadStatement	define
syn keyword sicadStatement	dialog
syn keyword sicadStatement	do
syn keyword sicadStatement	dop contained
syn keyword sicadStatement	end
syn keyword sicadStatement	enddo
syn keyword sicadStatement	endp
syn keyword sicadStatement	erroff
syn keyword sicadStatement	erron
syn keyword sicadStatement	exitp
syn keyword sicadGoto		goto contained
syn keyword sicadStatement	hh
syn keyword sicadStatement	if
syn keyword sicadStatement	in
syn keyword sicadStatement	msgsup
syn keyword sicadStatement	out
syn keyword sicadStatement	padd
syn keyword sicadStatement	parbeg
syn keyword sicadStatement	parend
syn keyword sicadStatement	pdoc
syn keyword sicadStatement	pprot
syn keyword sicadStatement	procd
syn keyword sicadStatement	procn
syn keyword sicadStatement	psav
syn keyword sicadStatement	psel
syn keyword sicadStatement	psymb
syn keyword sicadStatement	ptrace
syn keyword sicadStatement	ptstat
syn keyword sicadStatement	set
syn keyword sicadstatement      sql contained
syn keyword sicadStatement	step
syn keyword sicadStatement	sys
syn keyword sicadStatement	ww

" functions
syn match sicadStatement	"\<atan("me=e-1
syn match sicadStatement	"\<atan2("me=e-1
syn match sicadStatement	"\<cos("me=e-1
syn match sicadStatement	"\<dist("me=e-1
syn match sicadStatement	"\<exp("me=e-1
syn match sicadStatement	"\<log("me=e-1
syn match sicadStatement	"\<log10("me=e-1
syn match sicadStatement	"\<sin("me=e-1
syn match sicadStatement	"\<sqrt("me=e-1
syn match sicadStatement	"\<tanh("me=e-1
syn match sicadStatement	"\<x("me=e-1
syn match sicadStatement	"\<y("me=e-1
syn match sicadStatement	"\<v("me=e-1
syn match sicadStatement	"\<x%g\=p[0-9]\{1,2}\>"me=s+1
syn match sicadStatement	"\<y%g\=p[0-9]\{1,2}\>"me=s+1

" logical operators
syn match sicadOperator	"\.and\."
syn match sicadOperator	"\.ne\."
syn match sicadOperator	"\.not\."
syn match sicadOperator	"\.eq\."
syn match sicadOperator	"\.ge\."
syn match sicadOperator	"\.gt\."
syn match sicadOperator	"\.le\."
syn match sicadOperator	"\.lt\."
syn match sicadOperator	"\.or\."
syn match sicadOperator	"\.eqv\."
syn match sicadOperator	"\.neqv\."

" variable name
syn match sicadIdentifier	"%g\=[irpt][0-9]\{1,2}\>"
syn match sicadIdentifier	"%g\=l[0-9]\>"
syn match sicadIdentifier	"%g\=[irptl]("me=e-1
syn match sicadIdentifier	"%error\>"
syn match sicadIdentifier	"%nsel\>"
syn match sicadIdentifier	"%nvar\>"
syn match sicadIdentifier	"%scl\>"
syn match sicadIdentifier	"%wd\>"
syn match sicadIdentifier	"\$[irt][0-9]\{1,2}\>" contained  " in sql statements

" label
syn match sicadLabel1	"^ *\.[a-z][a-z0-9]\{0,7} \+[^ ]"me=e-1
syn match sicadLabel1	"^ *\.[a-z][a-z0-9]\{0,7}\*"me=e-1
syn match sicadLabel2	"\<goto \.\=[a-z][a-z0-9]\{0,7}\>" contains=sicadGoto
syn match sicadLabel2	"\<goto\.[a-z][a-z0-9]\{0,7}\>" contains=sicadGoto

" boolean
syn match sicadBoolean	"\.[ft]\."
" integer without sign
syn match sicadNumber	"\<[0-9]\+\>"
" floating point number, with dot, optional exponent
syn match sicadFloat	"\<[0-9]\+\.[0-9]*\(e[-+]\=[0-9]\+\)\=\>"
" floating point number, starting with a dot, optional exponent
syn match sicadFloat	"\.[0-9]\+\(e[-+]\=[0-9]\+\)\=\>"
" floating point number, without dot, with exponent
syn match sicadFloat	"\<[0-9]\+e[-+]\=[0-9]\+\>"

" without this extraString definition a ' ;  ' could stop the comment
syn region sicadString_ transparent start=+'+ end=+'+ oneline contained
" string
syn region sicadString start=+'+ end=+'+ oneline

" comments - nasty ones in sicad

" - ' *  blabla' or ' *  blabla;'
syn region sicadComment	start="^ *\*" skip='\\ *$' end=";"me=e-1 end="$" contains=sicadString_
" - ' .LABEL03 *  blabla' or ' .LABEL03 *  blabla;'
syn region sicadComment start="^ *\.[a-z][a-z0-9]\{0,7} *\*" skip='\\ *$' end=";"me=e-1 end="$" contains=sicadLabel1,sicadString_
" - '; * blabla' or '; * blabla;'
syn region sicadComment start="; *\*"ms=s+1 skip='\\ *$' end=";"me=e-1 end="$" contains=sicadString_
" - comments between docbeg and docend
syn region sicadComment	matchgroup=sicadStatement start="\<docbeg\>" end="\<docend\>"

" catch \ at the end of line
syn match sicadLineCont "\\ *$"

" parameters in dop block - for the time being it is not used
"syn match sicadParameter " [a-z][a-z0-9]*[=:]"me=e-1 contained
" dop block - for the time being it is not used
syn region sicadDopBlock transparent matchgroup=sicadStatement start='\<dop\>' skip='\\ *$' end=';'me=e-1 end='$' contains=ALL

" sql block - new highlighting mode is used (see syn include)
syn region sicadSqlBlock transparent matchgroup=sicadStatement start='\<sql\>' skip='\\ *$' end=';'me=e-1 end='$' contains=@SQL,sicadIdentifier,sicadLineCont

" synchronizing
syn sync clear  " clear sync used in sql.vim
syn sync match sicadSyncComment groupthere NONE "\<docend\>"
syn sync match sicadSyncComment grouphere sicadComment "\<docbeg\>"
" next line must be examined too
syn sync linecont "\\ *$"

" catch error caused by tabulator key
syn match sicadError "\t"
" catch errors caused by wrong parenthesis
"syn region sicadParen transparent start='(' end=')' contains=ALLBUT,sicadParenError
syn region sicadParen transparent start='(' skip='\\ *$' end=')' end='$' contains=ALLBUT,sicadParenError
syn match sicadParenError ')'
"syn region sicadApostrophe transparent start=+'+ end=+'+ contains=ALLBUT,sicadApostropheError
"syn match sicadApostropheError +'+
" not closed apostrophe
"syn region sicadError start=+'+ end=+$+ contains=ALLBUT,sicadApostropheError
"syn match sicadApostropheError +'[^']*$+me=s+1 contained

" SICAD keywords
syn keyword sicadStatement  abst add addsim adrin aib
syn keyword sicadStatement  aibzsn aidump aifgeo aisbrk alknam
syn keyword sicadStatement  alknr alksav alksel alktrc alopen
syn keyword sicadStatement  ansbo aractiv ararea arareao ararsfs
syn keyword sicadStatement  arbuffer archeck arcomv arcont arconv
syn keyword sicadStatement  arcopy arcopyo arcorr arcreate arerror
syn keyword sicadStatement  areval arflfm arflop arfrast argbkey
syn keyword sicadStatement  argenf argraph argrapho arinters arkompfl
syn keyword sicadStatement  arlasso arlcopy arlgraph arline arlining
syn keyword sicadStatement  arlisly armakea armemo arnext aroverl
syn keyword sicadStatement  arovers arparkmd arpars arrefp arselect
syn keyword sicadStatement  arset arstruct arunify arupdate arvector
syn keyword sicadStatement  arveinfl arvflfl arvoroni ausku basis
syn keyword sicadStatement  basisaus basisdar basisnr bebos befl
syn keyword sicadStatement  befla befli befls beo beorta
syn keyword sicadStatement  beortn bep bepan bepap bepola
syn keyword sicadStatement  bepoln bepsn bepsp ber berili
syn keyword sicadStatement  berk bewz bkl bli bma
syn keyword sicadStatement  bmakt bmakts bmbm bmerk bmerw
syn keyword sicadStatement  bmerws bminit bmk bmorth bmos
syn keyword sicadStatement  bmoss bmpar bmsl bmsum bmsums
syn keyword sicadStatement  bmver bmvero bmw bo bta
syn keyword sicadStatement  buffer bvl bw bza bzap
syn keyword sicadStatement  bzd bzgera bzorth cat catel
syn keyword sicadStatement  cdbdiff ce cgmparam close closesim
syn keyword sicadStatement  comgener comp comp conclose conclose coninfo
syn keyword sicadStatement  conopen conread contour conwrite cop
syn keyword sicadStatement  copar coparp coparp2 copel cr
syn keyword sicadStatement  cs cstat cursor d da
syn keyword sicadStatement  dal dasp dasps dataout dcol
syn keyword sicadStatement  dd defsr del delel deskrdef
syn keyword sicadStatement  df dfn dfns dfpos dfr
syn keyword sicadStatement  dgd dgm dgp dgr dh
syn keyword sicadStatement  diag diaus dir disbsd dkl
syn keyword sicadStatement  dktx dkur dlgfix dlgfre dma
syn keyword sicadStatement  dprio dr druse dsel dskinfo
syn keyword sicadStatement  dsr dv dve eba ebd
syn keyword sicadStatement  ebdmod ebs edbsdbin edbssnin edbsvtin
syn keyword sicadStatement  edt egaus egdef egdefs eglist
syn keyword sicadStatement  egloe egloenp egloes egxx eib
syn keyword sicadStatement  ekur ekuradd elel elpos epg
syn keyword sicadStatement  esau esauadd esek eta etap
syn keyword sicadStatement  etav feparam ficonv filse fl
syn keyword sicadStatement  fli flin flini flinit flins
syn keyword sicadStatement  flkor fln flnli flop flout
syn keyword sicadStatement  flowert flparam flraster flsy flsyd
syn keyword sicadStatement  flsym flsyms flsymt fmtatt fmtdia
syn keyword sicadStatement  fmtlib fpg gbadddb gbaim gbanrs
syn keyword sicadStatement  gbatw gbau gbaudit gbclosp gbcredic
syn keyword sicadStatement  gbcreem gbcreld gbcresdb gbcretd gbde
syn keyword sicadStatement  gbdeldb gbdeldic gbdelem gbdelld gbdelref
syn keyword sicadStatement  gbdeltd gbdisdb gbdisem gbdisld gbdistd
syn keyword sicadStatement  gbebn gbemau gbepsv gbgetdet gbgetes
syn keyword sicadStatement  gbgetmas gbgqel gbgqelr gbgqsa gbgrant
syn keyword sicadStatement  gbimpdic gbler gblerb gblerf gbles
syn keyword sicadStatement  gblocdic gbmgmg gbmntdb gbmoddb gbnam
syn keyword sicadStatement  gbneu gbopenp gbpoly gbpos gbpruef
syn keyword sicadStatement  gbpruefg gbps gbqgel gbqgsa gbrefdic
syn keyword sicadStatement  gbreftab gbreldic gbresem gbrevoke gbsav
syn keyword sicadStatement  gbsbef gbsddk gbsicu gbsrt gbss
syn keyword sicadStatement  gbstat gbsysp gbszau gbubp gbueb
syn keyword sicadStatement  gbunmdb gbuseem gbw gbweg gbwieh
syn keyword sicadStatement  gbzt gelp gera getvar hgw
syn keyword sicadStatement  hpg hr0 hra hrar icclchan
syn keyword sicadStatement  iccrecon icdescon icfree icgetcon icgtresp
syn keyword sicadStatement  icopchan icputcon icreacon icreqd icreqnw
syn keyword sicadStatement  icreqw icrespd icresrve icwricon imsget
syn keyword sicadStatement  imsgqel imsmget imsplot imsprint inchk
syn keyword sicadStatement  inf infd inst kbml kbmls
syn keyword sicadStatement  kbmm kbmms kbmt kbmtdps kbmts
syn keyword sicadStatement  khboe khbol khdob khe khetap
syn keyword sicadStatement  khfrw khktk khlang khld khmfrp
syn keyword sicadStatement  khmks khms khpd khpfeil khpl
syn keyword sicadStatement  khprofil khrand khsa khsabs khsaph
syn keyword sicadStatement  khsd khsdl khse khskbz khsna
syn keyword sicadStatement  khsnum khsob khspos khsvph khtrn
syn keyword sicadStatement  khver khzpe khzpl kib kldat
syn keyword sicadStatement  klleg klsch klsym klvert kmpg
syn keyword sicadStatement  kmtlage kmtp kmtps kodef kodefp
syn keyword sicadStatement  kodefs kok kokp kolae kom
syn keyword sicadStatement  kontly kopar koparp kopg kosy
syn keyword sicadStatement  kp kr krsek krtclose krtopen
syn keyword sicadStatement  ktk lad lae laesel language
syn keyword sicadStatement  lasso lbdes lcs ldesk ldesks
syn keyword sicadStatement  le leak leattdes leba lebas
syn keyword sicadStatement  lebaznp lebd lebm lebv lebvaus
syn keyword sicadStatement  lebvlist lede ledel ledepo ledepol
syn keyword sicadStatement  ledepos leder ledist ledm lee
syn keyword sicadStatement  leeins lees lege lekr lekrend
syn keyword sicadStatement  lekwa lekwas lel lelh lell
syn keyword sicadStatement  lelp lem lena lend lenm
syn keyword sicadStatement  lep lepe lepee lepko lepl
syn keyword sicadStatement  lepmko lepmkop lepos leposm leqs
syn keyword sicadStatement  leqsl leqssp leqsv leqsvov les
syn keyword sicadStatement  lesch lesr less lestd let
syn keyword sicadStatement  letaum letl lev levm levtm
syn keyword sicadStatement  levtp levtr lew lewm lexx
syn keyword sicadStatement  lfs li lining lldes lmode
syn keyword sicadStatement  loedk loepkt lop lose loses
syn keyword sicadStatement  lp lppg lppruef lr ls
syn keyword sicadStatement  lsop lsta lstat ly lyaus
syn keyword sicadStatement  lz lza lzae lzbz lze
syn keyword sicadStatement  lznr lzo lzpos ma ma0
syn keyword sicadStatement  ma1 mad map mapoly mcarp
syn keyword sicadStatement  mccfr mccgr mcclr mccrf mcdf
syn keyword sicadStatement  mcdma mcdr mcdrp mcdve mcebd
syn keyword sicadStatement  mcgse mcinfo mcldrp md me
syn keyword sicadStatement  mefd mefds minmax mipg ml
syn keyword sicadStatement  mmcmdme mmdbf mmdellb mmdir mmdome
syn keyword sicadStatement  mmfsb mminfolb mmlapp mmlbf mmlistlb
syn keyword sicadStatement  mmloadcm mmmsg mmreadlb mmsetlb mmshowcm
syn keyword sicadStatement  mmstatme mnp mpo mr mra
syn keyword sicadStatement  ms msav msgout msgsnd msp
syn keyword sicadStatement  mspf mtd nasel ncomp new
syn keyword sicadStatement  nlist nlistlt nlistly nlistnp nlistpo
syn keyword sicadStatement  np npa npdes npe npem
syn keyword sicadStatement  npinfa npruef npsat npss npssa
syn keyword sicadStatement  ntz oa oan odel odf
syn keyword sicadStatement  odfx oj oja ojaddsk ojaed
syn keyword sicadStatement  ojaeds ojaef ojaefs ojaen ojak
syn keyword sicadStatement  ojaks ojakt ojakz ojalm ojatkis
syn keyword sicadStatement  ojatt ojatw ojbsel ojcasel ojckon
syn keyword sicadStatement  ojde ojdtl ojeb ojebd ojel
syn keyword sicadStatement  ojelpas ojesb ojesbd ojex ojezge
syn keyword sicadStatement  ojko ojlb ojloe ojlsb ojmerk
syn keyword sicadStatement  ojmos ojnam ojpda ojpoly ojprae
syn keyword sicadStatement  ojs ojsak ojsort ojstrukt ojsub
syn keyword sicadStatement  ojtdef ojvek ojx old oldd
syn keyword sicadStatement  op opa opa1 open opensim
syn keyword sicadStatement  opnbsd orth osanz ot otp
syn keyword sicadStatement  otrefp param paranf pas passw
syn keyword sicadStatement  pcatchf pda pdadd pg pg0
syn keyword sicadStatement  pgauf pgaufsel pgb pgko pgm
syn keyword sicadStatement  pgr pgvs pily pkpg plot
syn keyword sicadStatement  plotf plotfr pmap pmdata pmdi
syn keyword sicadStatement  pmdp pmeb pmep pminfo pmlb
syn keyword sicadStatement  pmli pmlp pmmod pnrver poa
syn keyword sicadStatement  pos posa posaus post printfr
syn keyword sicadStatement  protect prs prssy prsym ps
syn keyword sicadStatement  psadd psclose psopen psparam psprw
syn keyword sicadStatement  psres psstat psw pswr qualif
syn keyword sicadStatement  rahmen raster rasterd rbbackup rbchang2
syn keyword sicadStatement  rbchange rbcmd rbcoldst rbcolor rbcopy
syn keyword sicadStatement  rbcut rbcut2 rbdbcl rbdbload rbdbop
syn keyword sicadStatement  rbdbwin rbdefs rbedit rbfdel rbfill
syn keyword sicadStatement  rbfill2 rbfload rbfload2 rbfnew rbfnew2
syn keyword sicadStatement  rbfpar rbfree rbg rbgetcol rbgetdst
syn keyword sicadStatement  rbinfo rbpaste rbpixel rbrstore rbsnap
syn keyword sicadStatement  rbsta rbtile rbtrpix rbvtor rcol
syn keyword sicadStatement  rd rdchange re reb rebmod
syn keyword sicadStatement  refunc ren renel rk rkpos
syn keyword sicadStatement  rohr rohrpos rpr rr rr0
syn keyword sicadStatement  rra rrar rs samtosdb sav
syn keyword sicadStatement  savd savesim savx scol scopy
syn keyword sicadStatement  scopye sdbtosam sddk sdwr se
syn keyword sicadStatement  selaus selpos seman semi sesch
syn keyword sicadStatement  setscl setvar sfclntpf sfconn sffetchf
syn keyword sicadStatement  sffpropi sfftypi sfqugeoc sfquwhcl sfself
syn keyword sicadStatement  sfstat sftest sge sid sie
syn keyword sicadStatement  sig sigp skk skks sn
syn keyword sicadStatement  sn21 snpa snpar snparp snparps
syn keyword sicadStatement  snpars snpas snpd snpi snpkor
syn keyword sicadStatement  snpl snpm sob sob0 sobloe
syn keyword sicadStatement  sobs sof sop split spr
syn keyword sicadStatement  sqdadd sqdlad sqdold sqdsav sql
syn keyword sicadStatement  sr sres srt sset stat
syn keyword sicadStatement  stdtxt string strukt strupru suinfl
syn keyword sicadStatement  suinflk suinfls supo supo1 sva
syn keyword sicadStatement  svr sy sya syly sysout
syn keyword sicadStatement  syu syux taa tabeg tabl
syn keyword sicadStatement  tabm tam tanr tapg tapos
syn keyword sicadStatement  tarkd tas tase tb tbadd
syn keyword sicadStatement  tbd tbext tbget tbint tbout
syn keyword sicadStatement  tbput tbsat tbsel tbstr tcaux
syn keyword sicadStatement  tccable tcchkrep tccomm tccond tcdbg
syn keyword sicadStatement  tcgbnr tcgrpos tcinit tclconv tcmodel
syn keyword sicadStatement  tcnwe tcpairs tcpath tcrect tcrmdli
syn keyword sicadStatement  tcscheme tcschmap tcse tcselc tcstar
syn keyword sicadStatement  tcstrman tcsubnet tcsymbol tctable tcthrcab
syn keyword sicadStatement  tctrans tctst tdb tdbdel tdbget
syn keyword sicadStatement  tdblist tdbput tgmod titel tmoff
syn keyword sicadStatement  tmon tp tpa tps tpta
syn keyword sicadStatement  tra trans transkdo transopt transpro
syn keyword sicadStatement  triangle trm trpg trrkd trs
syn keyword sicadStatement  ts tsa tx txa txchk
syn keyword sicadStatement  txcng txju txl txp txpv
syn keyword sicadStatement  txtcmp txv txz uckon uiinfo
syn keyword sicadStatement  uistatus umdk umdk1 umdka umge
syn keyword sicadStatement  umges umr verbo verflli verif
syn keyword sicadStatement  verly versinfo vfg vpactive vpcenter
syn keyword sicadStatement  vpcreate vpdelete vpinfo vpmodify vpscroll
syn keyword sicadStatement  vpsta wabsym wzmerk zdrhf zdrhfn
syn keyword sicadStatement  zdrhfw zdrhfwn zefp zfl zflaus
syn keyword sicadStatement  zka zlel zlels zortf zortfn
syn keyword sicadStatement  zortfw zortfwn zortp zortpn zparb
syn keyword sicadStatement  zparbn zparf zparfn zparfw zparfwn
syn keyword sicadStatement  zparp zparpn zwinkp zwinkpn

" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_sicad_syntax_inits")

  if version < 508
    let did_sicad_syntax_inits = 1
    command -nargs=+ HiLink hi link <args>
  else
    command -nargs=+ HiLink hi def link <args>
  endif

  HiLink sicadLabel PreProc
  HiLink sicadLabel1 sicadLabel
  HiLink sicadLabel2 sicadLabel
  HiLink sicadConditional Conditional
  HiLink sicadBoolean Boolean
  HiLink sicadNumber Number
  HiLink sicadFloat Float
  HiLink sicadOperator Operator
  HiLink sicadStatement Statement
  HiLink sicadParameter sicadStatement
  HiLink sicadGoto sicadStatement
  HiLink sicadLineCont sicadStatement
  HiLink sicadString String
  HiLink sicadComment Comment
  HiLink sicadSpecial Special
  HiLink sicadIdentifier Type
"  HiLink sicadIdentifier Identifier
  HiLink sicadError Error
  HiLink sicadParenError sicadError
  HiLink sicadApostropheError sicadError
  HiLink sicadStringError sicadError
  HiLink sicadCommentError sicadError
  HiLink sqlStatement Special  " modified highlight group in sql.vim

  delcommand HiLink

endif

let b:current_syntax = "sicad"

" vim: ts=8 sw=2
