" Vim syntax file
" Language: Slige
" Maintainer: SFJ
" Latest Revision: 1 January 1984

if exists("b:current_syntax")
  finish
endif


syn keyword Keyword break return let fn loop if else struct import or and not while for in mod pub
syn keyword Special null
syn keyword Type int string bool
syn keyword Boolean true false

syn match Operator '+'
syn match Operator '-'
syn match Operator '\*'
syn match Operator '/'
syn match Operator '='
syn match Operator '+='
syn match Operator '-='
syn match Operator '=='
syn match Operator '!='
syn match Operator '<'
syn match Operator '>'
syn match Operator '<='
syn match Operator '>='
syn match Operator '\.'
syn match Operator ':'
syn match Operator '->'
syn match Operator '::'
syn match Operator '::<'

syn match Number '0'
syn match Number '[1-9][0-9]*'
syn match Number '0[0-7]\+'
syn match Number '0x[0-9a-fA-F]\+'
syn match Number '0b[01]\+'

syn match Character "'[^\\]'"
syn match Character "'\\.'"

syn region String   start=+"+  skip=+\\"+  end=+"+

syn keyword Todo contained TODO FIXME XXX NOTE
syn match Comment "//.*$" contains=Todo

syn region Comment start=+/\*+ end=+\*/+ contains=Todo


syn match Identifier '[a-z_]\w*'
syn match Type '[A-Z]\w*'


syn match Function '[a-zA-Z_]\w*\ze\s\{-}(.\{-})'

syn match sligePath '[a-zA-Z_]\w*\ze\s\{-}::'
syn match Function '[a-zA-Z_]\w*\ze\s\{-}::<.\{-}>'

syn match Function ' \zs[a-zA-Z_]\w*\ze\s\{-}<.\{-}>\s\{-}(.\{-})'

syn region sligeBlock start="{" end="}" transparent fold

syn region sligeAnno start="#!\?\[" end="]" contains=Identifier,Type

hi def link sligeAnno PreProc
hi def link sligePath Include

let b:current_syntax = "slige"