1" Vim syntax file
2" Language:			ESTEREL
3" Maintainer:		Maurizio Tranchero <maurizio.tranchero@polito.it> - <maurizio.tranchero@gmail.com>
4" Credits:			Luca Necchi	<luca.necchi@polito.it>, Nikos Andrikos <nick.andrik@gmail.com>
5" First Release:	Tue May 17 23:49:39 CEST 2005
6" Last Change:		Tue May  6 13:29:56 CEST 2008
7" Version:			0.8
8
9" For version 5.x: Clear all syntax items
10" For version 6.x: Quit when a syntax file was already loaded
11if version < 600
12  syntax clear
13elseif exists("b:current_syntax")
14  finish
15endif
16
17" case is significant
18syn case ignore
19" Esterel Regions
20syn region esterelModule					start=/module/		end=/end module/	contains=ALLBUT,esterelModule
21syn region esterelLoop						start=/loop/		end=/end loop/		contains=ALLBUT,esterelModule
22syn region esterelAbort						start=/abort/		end=/when/			contains=ALLBUT,esterelModule
23syn region esterelAbort						start=/weak abort/	end=/when/			contains=ALLBUT,esterelModule
24syn region esterelEvery						start=/every/		end=/end every/		contains=ALLBUT,esterelModule
25syn region esterelIf						start=/if/			end=/end if/		contains=ALLBUT,esterelModule
26syn region esterelConcurrent	transparent start=/\[/			end=/\]/			contains=ALLBUT,esterelModule
27syn region esterelIfThen					start=/if/			end=/then/			oneline
28" Esterel Keywords
29syn keyword esterelIO			input output inputoutput constant
30syn keyword esterelBoolean		and or not xor xnor nor nand
31syn keyword esterelExpressions	mod pre
32syn keyword esterelStatement	nothing halt
33syn keyword esterelStatement	module signal sensor end
34syn keyword esterelStatement	every do loop abort weak
35syn keyword esterelStatement	emit present await
36syn keyword esterelStatement	pause when immediate
37syn keyword esterelStatement	if then else case
38syn keyword esterelStatement	var in  run  suspend
39syn keyword esterelStatement	repeat times combine with
40syn keyword esterelStatement	assert sustain
41" check what it is the following
42syn keyword esterelStatement	relation						
43syn keyword esterelFunctions	function procedure task
44syn keyword esterelSysCall		call trap exit exec
45" Esterel Types
46syn keyword esterelType 		integer float bolean
47" Esterel Comment
48syn match esterelComment		"%.*$"
49" Operators and special characters
50syn match esterelSpecial		":"
51syn match esterelSpecial		"<="
52syn match esterelSpecial		">="
53syn match esterelSpecial		"+"
54syn match esterelSpecial		"-"
55syn match esterelSpecial		"="
56syn match esterelSpecial		";"
57syn match esterelSpecial		"/"
58syn match esterelSpecial		"?"
59syn match esterelOperator		"\["
60syn match esterelOperator		"\]"
61syn match esterelOperator		":="
62syn match esterelOperator		"||"
63syn match esterelStatement		"\<\(if\|else\)\>"
64syn match esterelNone			"\<else\s\+if\>$"
65syn match esterelNone			"\<else\s\+if\>\s"
66
67" Class Linking
68if version >= 508 || !exists("did_esterel_syntax_inits")
69  if version < 508
70    let did_esterel_syntax_inits = 1
71    command -nargs=+ HiLink hi link <args>
72  else
73    command -nargs=+ HiLink hi def link <args>
74  endif
75
76	HiLink esterelStatement		Statement
77	HiLink esterelType			Type
78	HiLink esterelComment		Comment
79	HiLink esterelBoolean		Number
80	HiLink esterelExpressions	Number
81	HiLink esterelIO			String
82	HiLink esterelOperator		Type
83	HiLink esterelSysCall		Type
84	HiLink esterelFunctions		Type
85	HiLink esterelSpecial		Special
86
87  delcommand HiLink
88endif
89
90let b:current_syntax = "esterel"
91