1" Vim syntax file
2" Language:	occam
3" Copyright:	Fred Barnes <frmb2@kent.ac.uk>, Mario Schweigler <ms44@kent.ac.uk>
4" Maintainer:	Mario Schweigler <ms44@kent.ac.uk>
5" Last Change:	24 May 2003
6
7if version < 600
8  syntax clear
9elseif exists("b:current_syntax")
10  finish
11endif
12
13"{{{  Settings
14" Set shift width for indent
15setlocal shiftwidth=2
16" Set the tab key size to two spaces
17setlocal softtabstop=2
18" Let tab keys always be expanded to spaces
19setlocal expandtab
20
21" Dots are valid in occam identifiers
22setlocal iskeyword+=.
23"}}}
24
25syn case match
26
27syn keyword occamType		BYTE BOOL INT INT16 INT32 INT64 REAL32 REAL64 ANY
28syn keyword occamType		CHAN DATA OF TYPE TIMER INITIAL VAL PORT MOBILE PLACED
29syn keyword occamType		PROCESSOR PACKED RECORD PROTOCOL SHARED ROUND TRUNC
30
31syn keyword occamStructure	SEQ PAR IF ALT PRI FORKING PLACE AT
32
33syn keyword occamKeyword	PROC IS TRUE FALSE SIZE RECURSIVE REC
34syn keyword occamKeyword	RETYPES RESHAPES STEP FROM FOR RESCHEDULE STOP SKIP FORK
35syn keyword occamKeyword	FUNCTION VALOF RESULT ELSE CLONE CLAIM
36syn keyword occamBoolean	TRUE FALSE
37syn keyword occamRepeat		WHILE
38syn keyword occamConditional	CASE
39syn keyword occamConstant	MOSTNEG MOSTPOS
40
41syn match occamBrackets		/\[\|\]/
42syn match occamParantheses	/(\|)/
43
44syn keyword occamOperator	AFTER TIMES MINUS PLUS INITIAL REM AND OR XOR NOT
45syn keyword occamOperator	BITAND BITOR BITNOT BYTESIN OFFSETOF
46
47syn match occamOperator		/::\|:=\|?\|!/
48syn match occamOperator		/<\|>\|+\|-\|\*\|\/\|\\\|=\|\~/
49syn match occamOperator		/@\|\$\$\|%\|&&\|<&\|&>\|<\]\|\[>\|\^/
50
51syn match occamSpecialChar	/\M**\|*'\|*"\|*#\(\[0-9A-F\]\+\)/ contained
52syn match occamChar		/\M\L\='\[^*\]'/
53syn match occamChar		/L'[^']*'/ contains=occamSpecialChar
54
55syn case ignore
56syn match occamTodo		/\<todo\>:\=/ contained
57syn match occamNote		/\<note\>:\=/ contained
58syn case match
59syn keyword occamNote		NOT contained
60
61syn match occamComment		/--.*/ contains=occamCommentTitle,occamTodo,occamNote
62syn match occamCommentTitle	/--\s*\u\a*\(\s\+\u\a*\)*:/hs=s+2 contained contains=occamTodo,occamNote
63syn match occamCommentTitle	/--\s*KROC-LIBRARY\(\.so\|\.a\)\=\s*$/hs=s+2 contained
64syn match occamCommentTitle	/--\s*\(KROC-OPTIONS:\|RUN-PARAMETERS:\)/hs=s+2 contained
65
66syn match occamIdentifier	/\<[A-Z.][A-Z.0-9]*\>/
67syn match occamFunction		/\<[A-Za-z.][A-Za-z0-9.]*\>/ contained
68
69syn match occamPPIdentifier	/##.\{-}\>/
70
71syn region occamString		start=/"/ skip=/\M*"/ end=/"/ contains=occamSpecialChar
72syn region occamCharString	start=/'/ end=/'/ contains=occamSpecialChar
73
74syn match occamNumber		/\<\d\+\(\.\d\+\(E\(+\|-\)\d\+\)\=\)\=/
75syn match occamNumber		/-\d\+\(\.\d\+\(E\(+\|-\)\d\+\)\=\)\=/
76syn match occamNumber		/#\(\d\|[A-F]\)\+/
77syn match occamNumber		/-#\(\d\|[A-F]\)\+/
78
79syn keyword occamCDString	SHARED EXTERNAL DEFINED NOALIAS NOUSAGE NOT contained
80syn keyword occamCDString	FILE LINE PROCESS.PRIORITY OCCAM2.5 contained
81syn keyword occamCDString	USER.DEFINED.OPERATORS INITIAL.DECL MOBILES contained
82syn keyword occamCDString	BLOCKING.SYSCALLS VERSION NEED.QUAD.ALIGNMENT contained
83syn keyword occamCDString	TARGET.CANONICAL TARGET.CPU TARGET.OS TARGET.VENDOR contained
84syn keyword occamCDString	TRUE FALSE AND OR contained
85syn match occamCDString		/<\|>\|=\|(\|)/ contained
86
87syn region occamCDirective	start=/#\(USE\|INCLUDE\|PRAGMA\|DEFINE\|UNDEFINE\|UNDEF\|IF\|ELIF\|ELSE\|ENDIF\|WARNING\|ERROR\|RELAX\)\>/ end=/$/ contains=occamString,occamComment,occamCDString
88
89if version >= 508 || !exists("did_occam_syn_inits")
90  if version < 508
91    let did_occam_syntax_inits = 1
92    command -nargs=+ HiLink hi link <args>
93  else
94    command -nargs=+ HiLink hi def link <args>
95  endif
96
97  HiLink occamType Type
98  HiLink occamKeyword Keyword
99  HiLink occamComment Comment
100  HiLink occamCommentTitle PreProc
101  HiLink occamTodo Todo
102  HiLink occamNote Todo
103  HiLink occamString String
104  HiLink occamCharString String
105  HiLink occamNumber Number
106  HiLink occamCDirective PreProc
107  HiLink occamCDString String
108  HiLink occamPPIdentifier PreProc
109  HiLink occamBoolean Boolean
110  HiLink occamSpecialChar SpecialChar
111  HiLink occamChar Character
112  HiLink occamStructure Structure
113  HiLink occamIdentifier Identifier
114  HiLink occamConstant Constant
115  HiLink occamOperator Operator
116  HiLink occamFunction Ignore
117  HiLink occamRepeat Repeat
118  HiLink occamConditional Conditional
119  HiLink occamBrackets Type
120  HiLink occamParantheses Delimiter
121
122  delcommand HiLink
123endif
124
125let b:current_syntax = "occam"
126
127