" Vim syntax file
" Language:	Sather/pSather
" Maintainer:	Claudio Fleiner <claudio@fleiner.com>
" URL:		http://www.fleiner.com/vim/syntax/sather.vim
" Last Change:	2001 Apr 25

" Sather is a OO-language developped at the International Computer Science
" Institute (ICSI) in Berkeley, CA. pSather is a parallel extension to Sather.
" Homepage: http://www.icsi.berkeley.edu/~sather
" Sather files use .sa as suffix

" 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

" keyword definitions
syn keyword satherExternal       extern
syn keyword satherBranch         break continue
syn keyword satherLabel          when then
syn keyword satherConditional    if else elsif end case typecase assert with
syn match satherConditional      "near$"
syn match satherConditional      "far$"
syn match satherConditional      "near *[^(]"he=e-1
syn match satherConditional      "far *[^(]"he=e-1
syn keyword satherSynchronize    lock guard sync
syn keyword satherRepeat         loop parloop do
syn match satherRepeat           "while!"
syn match satherRepeat           "break!"
syn match satherRepeat           "until!"
syn keyword satherBoolValue      true false
syn keyword satherValue          self here cluster
syn keyword satherOperator       new "== != & ^ | && ||
syn keyword satherOperator       and or not
syn match satherOperator         "[#!]"
syn match satherOperator         ":-"
syn keyword satherType           void attr where
syn match satherType           "near *("he=e-1
syn match satherType           "far *("he=e-1
syn keyword satherStatement      return
syn keyword satherStorageClass   static const
syn keyword satherExceptions     try raise catch
syn keyword satherMethodDecl     is pre post
syn keyword satherClassDecl      abstract value class include
syn keyword satherScopeDecl      public private readonly


syn match   satherSpecial           contained "\\\d\d\d\|\\."
syn region  satherString            start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=satherSpecial
syn match   satherCharacter         "'[^\\]'"
syn match   satherSpecialCharacter  "'\\.'"
syn match   satherNumber          "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
syn match   satherCommentSkip     contained "^\s*\*\($\|\s\+\)"
syn region  satherComment2String  contained start=+"+  skip=+\\\\\|\\"+  end=+$\|"+  contains=satherSpecial
syn match   satherComment         "--.*" contains=satherComment2String,satherCharacter,satherNumber


syn sync ccomment satherComment

" 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_sather_syn_inits")
  if version < 508
    let did_sather_syn_inits = 1
    command -nargs=+ HiLink hi link <args>
  else
    command -nargs=+ HiLink hi def link <args>
  endif

  HiLink satherBranch	        satherStatement
  HiLink satherLabel	        satherStatement
  HiLink satherConditional      satherStatement
  HiLink satherSynchronize      satherStatement
  HiLink satherRepeat	        satherStatement
  HiLink satherExceptions       satherStatement
  HiLink satherStorageClass     satherDeclarative
  HiLink satherMethodDecl       satherDeclarative
  HiLink satherClassDecl        satherDeclarative
  HiLink satherScopeDecl        satherDeclarative
  HiLink satherBoolValue        satherValue
  HiLink satherSpecial	        satherValue
  HiLink satherString	        satherValue
  HiLink satherCharacter        satherValue
  HiLink satherSpecialCharacter satherValue
  HiLink satherNumber	        satherValue
  HiLink satherStatement	Statement
  HiLink satherOperator	        Statement
  HiLink satherComment	        Comment
  HiLink satherType		Type
  HiLink satherValue		String
  HiLink satherString	        String
  HiLink satherSpecial	        String
  HiLink satherCharacter	String
  HiLink satherDeclarative	Type
  HiLink satherExternal	        PreCondit
  delcommand HiLink
endif

let b:current_syntax = "sather"

" vim: ts=8
