1" Vim syntax file
2" Language:	SDL
3" Maintainer:	Michael Piefel <piefel@informatik.hu-berlin.de>
4" Last Change:	2 May 2001
5
6" For version 5.x: Clear all syntax items
7" For version 6.x: Quit when a syntax file was already loaded
8if version < 600
9    syntax clear
10elseif exists("b:current_syntax")
11    finish
12endif
13
14if !exists("sdl_2000")
15    syntax case ignore
16endif
17
18" A bunch of useful SDL keywords
19syn keyword sdlStatement	task else nextstate
20syn keyword sdlStatement	in out with from interface
21syn keyword sdlStatement	to via env and use
22syn keyword sdlStatement	process procedure block system service type
23syn keyword sdlStatement	endprocess endprocedure endblock endsystem
24syn keyword sdlStatement	package endpackage connection endconnection
25syn keyword sdlStatement	channel endchannel connect
26syn keyword sdlStatement	synonym dcl signal gate timer signallist signalset
27syn keyword sdlStatement	create output set reset call
28syn keyword sdlStatement	operators literals
29syn keyword sdlStatement	active alternative any as atleast constants
30syn keyword sdlStatement	default endalternative endmacro endoperator
31syn keyword sdlStatement	endselect endsubstructure external
32syn keyword sdlStatement	if then fi for import macro macrodefinition
33syn keyword sdlStatement	macroid mod nameclass nodelay not operator or
34syn keyword sdlStatement	parent provided referenced rem
35syn keyword sdlStatement	select spelling substructure xor
36syn keyword sdlNewState		state endstate
37syn keyword sdlInput		input start stop return none save priority
38syn keyword sdlConditional	decision enddecision join
39syn keyword sdlVirtual		virtual redefined finalized adding inherits
40syn keyword sdlExported		remote exported export
41
42if !exists("sdl_no_96")
43    syn keyword sdlStatement	all axioms constant endgenerator endrefinement endservice
44    syn keyword sdlStatement	error fpar generator literal map noequality ordering
45    syn keyword sdlStatement	refinement returns revealed reverse service signalroute
46    syn keyword sdlStatement	view viewed
47    syn keyword sdlExported	imported
48endif
49
50if exists("sdl_2000")
51    syn keyword sdlStatement	abstract aggregation association break choice composition
52    syn keyword sdlStatement	continue endmethod handle method
53    syn keyword sdlStatement	ordered private protected public
54    syn keyword sdlException	exceptionhandler endexceptionhandler onexception
55    syn keyword sdlException	catch new raise
56    " The same in uppercase
57    syn keyword sdlStatement	TASK ELSE NEXTSTATE
58    syn keyword sdlStatement	IN OUT WITH FROM INTERFACE
59    syn keyword sdlStatement	TO VIA ENV AND USE
60    syn keyword sdlStatement	PROCESS PROCEDURE BLOCK SYSTEM SERVICE TYPE
61    syn keyword sdlStatement	ENDPROCESS ENDPROCEDURE ENDBLOCK ENDSYSTEM
62    syn keyword sdlStatement	PACKAGE ENDPACKAGE CONNECTION ENDCONNECTION
63    syn keyword sdlStatement	CHANNEL ENDCHANNEL CONNECT
64    syn keyword sdlStatement	SYNONYM DCL SIGNAL GATE TIMER SIGNALLIST SIGNALSET
65    syn keyword sdlStatement	CREATE OUTPUT SET RESET CALL
66    syn keyword sdlStatement	OPERATORS LITERALS
67    syn keyword sdlStatement	ACTIVE ALTERNATIVE ANY AS ATLEAST CONSTANTS
68    syn keyword sdlStatement	DEFAULT ENDALTERNATIVE ENDMACRO ENDOPERATOR
69    syn keyword sdlStatement	ENDSELECT ENDSUBSTRUCTURE EXTERNAL
70    syn keyword sdlStatement	IF THEN FI FOR IMPORT MACRO MACRODEFINITION
71    syn keyword sdlStatement	MACROID MOD NAMECLASS NODELAY NOT OPERATOR OR
72    syn keyword sdlStatement	PARENT PROVIDED REFERENCED REM
73    syn keyword sdlStatement	SELECT SPELLING SUBSTRUCTURE XOR
74    syn keyword sdlNewState	STATE ENDSTATE
75    syn keyword sdlInput	INPUT START STOP RETURN NONE SAVE PRIORITY
76    syn keyword sdlConditional	DECISION ENDDECISION JOIN
77    syn keyword sdlVirtual	VIRTUAL REDEFINED FINALIZED ADDING INHERITS
78    syn keyword sdlExported	REMOTE EXPORTED EXPORT
79
80    syn keyword sdlStatement	ABSTRACT AGGREGATION ASSOCIATION BREAK CHOICE COMPOSITION
81    syn keyword sdlStatement	CONTINUE ENDMETHOD ENDOBJECT ENDVALUE HANDLE METHOD OBJECT
82    syn keyword sdlStatement	ORDERED PRIVATE PROTECTED PUBLIC
83    syn keyword sdlException	EXCEPTIONHANDLER ENDEXCEPTIONHANDLER ONEXCEPTION
84    syn keyword sdlException	CATCH NEW RAISE
85endif
86
87" String and Character contstants
88" Highlight special characters (those which have a backslash) differently
89syn match   sdlSpecial		contained "\\\d\d\d\|\\."
90syn region  sdlString		start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=cSpecial
91syn region  sdlString		start=+'+  skip=+''+  end=+'+
92
93" No, this doesn't happen, I just wanted to scare you. SDL really allows all
94" these characters for identifiers; fortunately, keywords manage without them.
95" set iskeyword=@,48-57,_,192-214,216-246,248-255,-
96
97syn region sdlComment		start="/\*"  end="\*/"
98syn region sdlComment		start="comment"  end=";"
99syn region sdlComment		start="--" end="--\|$"
100syn match  sdlCommentError	"\*/"
101
102syn keyword sdlOperator		present
103syn keyword sdlType		integer real natural duration pid boolean time
104syn keyword sdlType		character charstring ia5string
105syn keyword sdlType		self now sender offspring
106syn keyword sdlStructure	asntype endasntype syntype endsyntype struct
107
108if !exists("sdl_no_96")
109    syn keyword sdlStructure	newtype endnewtype
110endif
111
112if exists("sdl_2000")
113    syn keyword sdlStructure	object endobject value endvalue
114    " The same in uppercase
115    syn keyword sdlStructure	OBJECT ENDOBJECT VALUE ENDVALUE
116    syn keyword sdlOperator	PRESENT
117    syn keyword sdlType		INTEGER NATURAL DURATION PID BOOLEAN TIME
118    syn keyword sdlType		CHARSTRING IA5STRING
119    syn keyword sdlType		SELF NOW SENDER OFFSPRING
120    syn keyword sdlStructure	ASNTYPE ENDASNTYPE SYNTYPE ENDSYNTYPE STRUCT
121endif
122
123" ASN.1 in SDL
124syn case match
125syn keyword sdlType		SET OF BOOLEAN INTEGER REAL BIT OCTET
126syn keyword sdlType		SEQUENCE CHOICE
127syn keyword sdlType		STRING OBJECT IDENTIFIER NULL
128
129syn sync ccomment sdlComment
130
131" Define the default highlighting.
132" For version 5.7 and earlier: only when not done already
133" For version 5.8 and later: only when an item doesn't have highlighting yet
134if version >= 508 || !exists("did_sdl_syn_inits")
135    if version < 508
136	let did_sdl_syn_inits = 1
137	command -nargs=+ HiLink hi link <args>
138	command -nargs=+ Hi     hi <args>
139    else
140	command -nargs=+ HiLink hi def link <args>
141	command -nargs=+ Hi     hi def <args>
142    endif
143
144    HiLink  sdlException	Label
145    HiLink  sdlConditional	sdlStatement
146    HiLink  sdlVirtual		sdlStatement
147    HiLink  sdlExported		sdlFlag
148    HiLink  sdlCommentError	sdlError
149    HiLink  sdlOperator		Operator
150    HiLink  sdlStructure	sdlType
151    Hi	    sdlStatement	term=bold ctermfg=4 guifg=Blue
152    Hi	    sdlFlag		term=bold ctermfg=4 guifg=Blue gui=italic
153    Hi	    sdlNewState		term=italic ctermfg=2 guifg=Magenta gui=underline
154    Hi	    sdlInput		term=bold guifg=Red
155    HiLink  sdlType		Type
156    HiLink  sdlString		String
157    HiLink  sdlComment		Comment
158    HiLink  sdlSpecial		Special
159    HiLink  sdlError		Error
160
161    delcommand HiLink
162    delcommand Hi
163endif
164
165let b:current_syntax = "sdl"
166
167" vim: ts=8
168