1" Vim syntax file
2" Language:	Vera
3" Maintainer:	Dave Eggum (opine at bluebottle dOt com)
4" Last Change:	2005 Dec 19
5
6" NOTE: extra white space at the end of the line will be highlighted if you
7" add this line to your colorscheme:
8
9" highlight SpaceError    guibg=#204050
10
11" (change the value for guibg to any color you like)
12
13" quit when a syntax file was already loaded
14if exists("b:current_syntax")
15  finish
16endif
17
18" A bunch of useful Vera keywords
19syn keyword	veraStatement	break return continue fork join terminate
20syn keyword	veraStatement	breakpoint proceed
21
22syn keyword	veraLabel	bad_state bad_trans bind constraint coverage_group
23syn keyword	veraLabel	class CLOCK default function interface m_bad_state
24syn keyword	veraLabel	m_bad_trans m_state m_trans program randseq state
25syn keyword	veraLabel	task trans
26
27syn keyword	veraConditional	if else case casex casez randcase
28syn keyword 	veraRepeat      repeat while for do foreach
29syn keyword 	veraModifier	after all any around assoc_size async
30syn keyword 	veraModifier	before big_endian bit_normal bit_reverse export
31syn keyword 	veraModifier	extends extern little_endian local hdl_node hdl_task
32syn keyword 	veraModifier	negedge none packed protected posedge public rules
33syn keyword 	veraModifier	shadow soft static super this typedef unpacked var
34syn keyword 	veraModifier	vca virtual virtuals wildcard with
35
36syn keyword 	veraType	reg string enum event bit
37syn keyword 	veraType	rand randc integer port prod
38
39syn keyword     veraDeprecated	call_func call_task close_conn get_bind get_bind_id
40syn keyword     veraDeprecated	get_conn_err mailbox_receive mailbox_send make_client
41syn keyword     veraDeprecated	make_server simwave_plot up_connections
42
43" predefined tasks and functions
44syn keyword 	veraTask	alloc assoc_index cast_assign cm_coverage
45syn keyword 	veraTask	cm_get_coverage cm_get_limit delay error error_mode
46syn keyword 	veraTask	exit fclose feof ferror fflush flag fopen fprintf
47syn keyword 	veraTask	freadb freadh freadstr get_cycle get_env get_memsize
48syn keyword 	veraTask	get_plus_arg getstate get_systime get_time get_time_unit
49syn keyword 	veraTask	initstate lock_file mailbox_get mailbox_put os_command
50syn keyword 	veraTask	printf prodget prodset psprintf query query_str query_x
51syn keyword 	veraTask	rand48 random region_enter region_exit rewind
52syn keyword 	veraTask	semaphore_get semaphore_put setstate signal_connect
53syn keyword 	veraTask	sprintf srandom sscanf stop suspend_thread sync
54syn keyword 	veraTask	timeout trace trigger unit_delay unlock_file urand48
55syn keyword 	veraTask	urandom urandom_range vera_bit_reverse vera_crc
56syn keyword 	veraTask	vera_pack vera_pack_big_endian vera_plot
57syn keyword 	veraTask	vera_report_profile vera_unpack vera_unpack_big_endian
58syn keyword 	veraTask	vsv_call_func vsv_call_task vsv_get_conn_err
59syn keyword 	veraTask	vsv_make_client vsv_make_server vsv_up_connections
60syn keyword 	veraTask	vsv_wait_for_done vsv_wait_for_input wait_child wait_var
61
62syn cluster	veraOperGroup	contains=veraOperator,veraOperParen,veraNumber,veraString,veraOperOk,veraType
63" syn match	veraOperator	"++\|--\|&\|\~&\||\|\~|\|^\|\~^\|\~\|><"
64" syn match	veraOperator	"*\|/\|%\|+\|-\|<<\|>>\|<\|<=\|>\|>=\|!in"
65" syn match	veraOperator	"=?=\|!?=\|==\|!=\|===\|!==\|&\~\|^\~\||\~"
66" syn match	veraOperator	"&&\|||\|=\|+=\|-=\|*=\|/=\|%=\|<<=\|>>=\|&="
67" syn match	veraOperator	"|=\|^=\|\~&=\|\~|=\|\~^="
68
69syn match	veraOperator	"[&|\~><!*@+/=,.\^\-]"
70syn keyword	veraOperator	or in dist not
71
72" open vera class methods
73syn keyword	veraMethods	atobin atohex atoi atooct backref bittostr capacity
74syn keyword	veraMethods	compare Configure constraint_mode delete DisableTrigger
75syn keyword	veraMethods	DoAction empty EnableCount EnableTrigger Event find
76syn keyword	veraMethods	find_index first first_index GetAssert get_at_least
77syn keyword	veraMethods	get_auto_bin getc GetCount get_coverage_goal get_cov_weight
78syn keyword	veraMethods	get_cross_bin_max GetFirstAssert GetName GetNextAssert
79syn keyword	veraMethods	get_status get_status_msg hide hash icompare insert
80syn keyword	veraMethods	inst_get_at_least inst_get_auto_bin_max inst_get_collect
81syn keyword	veraMethods	inst_get_coverage_goal inst_get_cov_weight inst_getcross_bin_max
82syn keyword	veraMethods	inst_query inst_set_at_least inst_set_auto_bin_max
83syn keyword	veraMethods	inst_set_bin_activiation inst_set_collect inst_set_coverage_goal
84syn keyword	veraMethods	inst_set_cov_weight inst_set_cross_bin_max itoa last last_index
85syn keyword	veraMethods	len load match max max_index min min_index new object_compare
86syn keyword	veraMethods	object_compare object_copy object_print pack pick_index
87syn keyword	veraMethods	pop_back pop_front post_boundary postmatch post_pack post_pack
88syn keyword	veraMethods	post_randomize post_randomize post_unpack post_unpack
89syn keyword	veraMethods	pre_boundary prematch pre_pack pre_pack pre_randomize
90syn keyword	veraMethods	pre-randomize pre_unpack push_back push_front putc query
91syn keyword	veraMethods	query_str rand_mode randomize reserve reverse rsort search
92syn keyword	veraMethods	set_at_least set_auto_bin_max set_bin_activiation
93syn keyword	veraMethods	set_coverage_goal set_cov_weight set_cross_bin_max set_name
94syn keyword	veraMethods	size sort substr sum thismatch tolower toupper unique_index
95syn keyword	veraMethods	unpack Wait
96
97" interface keywords
98syn keyword	veraInterface	ASYNC CLOCK gnr gr0 gr1 grx grz NHOLD nr NR0 NR1
99syn keyword	veraInterface	NRZ NRZ NSAMPLE PHOLD PR0 PR1 PRX PRZ r0 r1 rx snr
100syn keyword	veraInterface	sr0 sr1 srx srz depth inout input output
101syn match       veraInterface   "\$\w\+"
102
103
104syn keyword	veraTodo	contained TODO FIXME XXX FINISH
105
106" veraCommentGroup allows adding matches for special things in comments
107syn cluster	veraCommentGroup	contains=veraTodo
108
109" String and Character constants
110" Highlight special characters (those which have a backslash) differently
111syn match	veraSpecial	display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
112syn match	veraFormat	display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([bdiuoxXDOUfeEgGcCsSpnm]\|\[\^\=.[^]]*\]\)" contained
113syn match	veraFormat	display "%%" contained
114syn region	veraString	start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=veraSpecial,veraFormat,@Spell
115syn region	veraConcat	contained transparent oneline start='{' end='}'
116
117" veraCppString: same as veraString, but ends at end of line
118syn region	veraCppString	start=+"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=veraSpecial,veraFormat,@Spell
119
120syn match	veraCharacter	"'[^\\]'"
121syn match	veraCharacter	"L'[^']*'" contains=veraSpecial
122syn match	veraSpecialError	"'\\[^'\"?\\abefnrtv]'"
123syn match	veraSpecialCharacter	"'\\['\"?\\abefnrtv]'"
124syn match	veraSpecialCharacter	display	"'\\\o\{1,3}'"
125syn match	veraSpecialCharacter	display	"'\\x\x\{1,2}'"
126syn match	veraSpecialCharacter	display	"L'\\x\x\+'"
127
128" highlight trailing white space
129syn match	veraSpaceError	display	excludenl "\s\+$"
130syn match	veraSpaceError	display	" \+\t"me=e-1
131
132"catch errors caused by wrong parenthesis and brackets
133syn cluster	veraParenGroup	contains=veraParenError,veraIncluded,veraSpecial,veraCommentSkip,veraCommentString,veraComment2String,@veraCommentGroup,veraCommentStartError,veraUserCont,veraUserLabel,veraBitField,veraCommentSkip,veraOctalZero,veraCppOut,veraCppOut2,veraCppSkip,veraFormat,veraNumber,veraFloat,veraOctal,veraOctalError,veraNumbersCom
134
135syn region	veraParen	transparent start='(' end=')' contains=ALLBUT,@veraParenGroup,veraCppParen,veraErrInBracket,veraCppBracket,veraCppString,@Spell
136" veraCppParen: same as veraParen but ends at end-of-line; used in veraDefine
137syn region	veraCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@veraParenGroup,veraErrInBracket,veraParen,veraBracket,veraString,@Spell
138syn match	veraParenError	display "[\])]"
139" syn match	veraErrInParen	display contained "[\]{}]"
140syn match	veraErrInParen	display contained "[\]]"
141syn region	veraBracket	transparent start='\[' end=']' contains=ALLBUT,@veraParenGroup,veraErrInParen,veraCppParen,veraCppBracket,veraCppString,@Spell
142
143" veraCppBracket: same as veraParen but ends at end-of-line; used in veraDefine
144syn region	veraCppBracket	transparent start='\[' skip='\\$' excludenl end=']' end='$' contained contains=ALLBUT,@veraParenGroup,veraErrInParen,veraParen,veraBracket,veraString,@Spell
145syn match	veraErrInBracket	display contained "[);{}]"
146
147"integer number, or floating point number without a dot and with "f".
148syn case ignore
149syn match	veraNumbers	display transparent "\<\d\|\.\d" contains=veraNumber,veraFloat,veraOctalError,veraOctal
150" Same, but without octal error (for comments)
151syn match	veraNumbersCom	display contained transparent "\<\d\|\.\d" contains=veraNumber,veraFloat,veraOctal
152" syn match	veraNumber	display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
153" "hex number
154" syn match	veraNumber	display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
155" syn match   veraNumber "\(\<[0-9]\+\|\)'[bdoh][0-9a-fxzA-FXZ_]\+\>"
156syn match	veraNumber "\<\(\<[0-9]\+\)\?\('[bdoh]\)\?[0-9a-fxz_]\+\>"
157" syn match   veraNumber "\<[+-]\=[0-9]\+\>"
158" Flag the first zero of an octal number as something special
159syn match	veraOctal	display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=veraOctalZero
160syn match	veraOctalZero	display contained "\<0"
161syn match	veraFloat	display contained "\d\+f"
162"floating point number, with dot, optional exponent
163syn match	veraFloat	display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
164"floating point number, starting with a dot, optional exponent
165syn match	veraFloat	display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
166"floating point number, without dot, with exponent
167syn match	veraFloat	display contained "\d\+e[-+]\=\d\+[fl]\=\>"
168"hexadecimal floating point number, optional leading digits, with dot, with exponent
169syn match	veraFloat	display contained "0x\x*\.\x\+p[-+]\=\d\+[fl]\=\>"
170"hexadecimal floating point number, with leading digits, optional dot, with exponent
171syn match	veraFloat	display contained "0x\x\+\.\=p[-+]\=\d\+[fl]\=\>"
172
173" flag an octal number with wrong digits
174syn match	veraOctalError	display contained "0\o*[89]\d*"
175syn case match
176
177let vera_comment_strings = 1
178
179if exists("vera_comment_strings")
180  " A comment can contain veraString, veraCharacter and veraNumber.
181  " But a "*/" inside a veraString in a veraComment DOES end the comment!  So we
182  " need to use a special type of veraString: veraCommentString, which also ends on
183  " "*/", and sees a "*" at the start of the line as comment again.
184  " Unfortunately this doesn't work very well for // type of comments :-(
185  syntax match	veraCommentSkip	contained "^\s*\*\($\|\s\+\)"
186  syntax region veraCommentString	contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=veraSpecial,veraCommentSkip
187  syntax region veraComment2String	contained start=+\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=veraSpecial
188  syntax region  veraCommentL	start="//" skip="\\$" end="$" keepend contains=@veraCommentGroup,veraComment2String,veraCharacter,veraNumbersCom,veraSpaceError,@Spell
189  if exists("vera_no_comment_fold")
190    syntax region veraComment	matchgroup=veraCommentStart start="/\*" end="\*/" contains=@veraCommentGroup,veraCommentStartError,veraCommentString,veraCharacter,veraNumbersCom,veraSpaceError,@Spell
191  else
192    syntax region veraComment	matchgroup=veraCommentStart start="/\*" end="\*/" contains=@veraCommentGroup,veraCommentStartError,veraCommentString,veraCharacter,veraNumbersCom,veraSpaceError,@Spell fold
193  endif
194else
195  syn region	veraCommentL	start="//" skip="\\$" end="$" keepend contains=@veraCommentGroup,veraSpaceError,@Spell
196  if exists("vera_no_comment_fold")
197    syn region	veraComment	matchgroup=veraCommentStart start="/\*" end="\*/" contains=@veraCommentGroup,veraCommentStartError,veraSpaceError,@Spell
198  else
199    syn region	veraComment	matchgroup=veraCommentStart start="/\*" end="\*/" contains=@veraCommentGroup,veraCommentStartError,veraSpaceError,@Spell fold
200  endif
201endif
202" keep a // comment separately, it terminates a preproc. conditional
203syntax match	veraCommentError	display "\*/"
204syntax match	veraCommentStartError display "/\*"me=e-1 contained
205
206syntax region	veraBlock		start="{" end="}" transparent fold
207
208" open vera pre-defined constants
209syn keyword veraConstant	ALL ANY BAD_STATE BAD_TRANS CALL CHECK CHGEDGE
210syn keyword veraConstant	CLEAR COPY_NO_WAIT COPY_WAIT CROSS CROSS_TRANS
211syn keyword veraConstant	DEBUG DELETE EC_ARRAYX EC_CODE_END EC_CONFLICT
212syn keyword veraConstant	EC_EVNTIMOUT EC_EXPECT EC_FULLEXPECT EC_MBXTMOUT
213syn keyword veraConstant	EC_NEXPECT EC_RETURN EC_RGNTMOUT EC_SCONFLICT
214syn keyword veraConstant	EC_SEMTMOUT EC_SEXPECT EC_SFULLEXPECT EC_SNEXTPECT
215syn keyword veraConstant	EC_USERSET EQ EVENT FAIL FIRST FORK GE GOAL GT
216syn keyword veraConstant	HAND_SHAKE HI HIGH HNUM LE LIC_EXIT LIC_PRERR
217syn keyword veraConstant	LIC_PRWARN LIC_WAIT LO LOAD LOW LT MAILBOX MAX_COM
218syn keyword veraConstant	NAME NE NEGEDGE NEXT NO_OVERLAP NO_OVERLAP_STATE
219syn keyword veraConstant	NO_OVERLAP_TRANS NO_VARS NO_WAIT NUM NUM_BIN
220syn keyword veraConstant	NUM_DET null OFF OK OK_LAST ON ONE_BLAST ONE_SHOT ORDER
221syn keyword veraConstant	PAST_IT PERCENT POSEDGE PROGRAM RAWIN REGION REPORT
222syn keyword veraConstant	SAMPLE SAVE SEMAPHORE SET SILENT STATE stderr
223syn keyword veraConstant	stdin stdout STR STR_ERR_OUT_OF_RANGE
224syn keyword veraConstant	STR_ERR_REGEXP_SYNTAX SUM TRANS VERBOSE void WAIT
225syn keyword veraConstant	__LINE__ __FILE__ __DATE__ __TIME__ __VERA__
226syn keyword veraConstant	__VERSION__ __VERA_VERSION__ __VERA_MINOR__
227syn keyword veraConstant	__VERA_PATCH__ __VERA_VMC__ __VERA_VMC_MINOR__
228
229syn match   veraUserConstant "\<[A-Z][A-Z0-9_]\+\>"
230
231syn match veraClass "\zs\w\+\ze::"
232syn match veraClass "\zs\w\+\ze\s\+\w\+\s*[=;,)\[]" contains=veraConstant,veraUserConstant
233syn match veraClass "\zs\w\+\ze\s\+\w\+\s*$" contains=veraConstant,veraUserConstant
234syn match veraUserMethod "\zs\w\+\ze\s*(" contains=veraConstant,veraUserConstant
235syn match veraObject "\zs\w\+\ze\.\w"
236syn match veraObject "\zs\w\+\ze\.\$\w"
237
238" Accept ` for # (Verilog)
239syn region	veraPreCondit	start="^\s*\(`\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=veraComment,veraCppString,veraCharacter,veraCppParen,veraParenError,veraNumbers,veraCommentError,veraSpaceError
240syn match	veraPreCondit	display "^\s*\(`\|#\)\s*\(else\|endif\)\>"
241if !exists("vera_no_if0")
242  syn region	veraCppOut		start="^\s*\(`\|#\)\s*if\s\+0\+\>" end=".\@=\|$" contains=veraCppOut2
243  syn region	veraCppOut2	contained start="0" end="^\s*\(`\|#\)\s*\(endif\>\|else\>\|elif\>\)" contains=veraSpaceError,veraCppSkip
244  syn region	veraCppSkip	contained start="^\s*\(`\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(`\|#\)\s*endif\>" contains=veraSpaceError,veraCppSkip
245endif
246syn region	veraIncluded	display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
247syn match	veraIncluded	display contained "<[^>]*>"
248syn match	veraInclude	display "^\s*\(`\|#\)\s*include\>\s*["<]" contains=veraIncluded
249"syn match veraLineSkip	"\\$"
250syn cluster	veraPreProcGroup	contains=veraPreCondit,veraIncluded,veraInclude,veraDefine,veraErrInParen,veraErrInBracket,veraUserLabel,veraSpecial,veraOctalZero,veraCppOut,veraCppOut2,veraCppSkip,veraFormat,veraNumber,veraFloat,veraOctal,veraOctalError,veraNumbersCom,veraString,veraCommentSkip,veraCommentString,veraComment2String,@veraCommentGroup,veraCommentStartError,veraParen,veraBracket,veraMulti
251syn region	veraDefine		start="^\s*\(`\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@veraPreProcGroup,@Spell
252syn region	veraPreProc	start="^\s*\(`\|#\)\s*\(pragma\>\|line\>\|warning\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@veraPreProcGroup,@Spell
253
254" Highlight User Labels
255syn cluster	veraMultiGroup	contains=veraIncluded,veraSpecial,veraCommentSkip,veraCommentString,veraComment2String,@veraCommentGroup,veraCommentStartError,veraUserCont,veraUserLabel,veraBitField,veraOctalZero,veraCppOut,veraCppOut2,veraCppSkip,veraFormat,veraNumber,veraFloat,veraOctal,veraOctalError,veraNumbersCom,veraCppParen,veraCppBracket,veraCppString
256syn region	veraMulti		transparent start='?' skip='::' end=':' contains=ALLBUT,@veraMultiGroup,@Spell
257" syn region	veraMulti		transparent start='?' skip='::' end=':' contains=ALL
258" The above causes veraCppOut2 to catch on:
259"    i = (isTrue) ? 0 : 1;
260" which ends up commenting the rest of the file
261
262" Avoid matching foo::bar() by requiring that the next char is not ':'
263syn cluster	veraLabelGroup	contains=veraUserLabel
264syn match	veraUserCont	display "^\s*\I\i*\s*:$" contains=@veraLabelGroup
265syn match	veraUserCont	display ";\s*\I\i*\s*:$" contains=@veraLabelGroup
266syn match	veraUserCont	display "^\s*\I\i*\s*:[^:]"me=e-1 contains=@veraLabelGroup
267syn match	veraUserCont	display ";\s*\I\i*\s*:[^:]"me=e-1 contains=@veraLabelGroup
268
269syn match	veraUserLabel	display "\I\i*" contained
270
271" Avoid recognizing most bitfields as labels
272syn match	veraBitField	display "^\s*\I\i*\s*:\s*[1-9]"me=e-1
273syn match	veraBitField	display ";\s*\I\i*\s*:\s*[1-9]"me=e-1
274
275if exists("vera_minlines")
276  let b:vera_minlines = vera_minlines
277else
278  if !exists("vera_no_if0")
279    let b:vera_minlines = 50	" #if 0 constructs can be long
280  else
281    let b:vera_minlines = 15	" mostly for () constructs
282  endif
283endif
284exec "syn sync ccomment veraComment minlines=" . b:vera_minlines
285
286" Define the default highlighting.
287" Only when an item doesn't have highlighting yet
288
289hi def link veraClass		Identifier
290hi def link veraObject		Identifier
291hi def link veraUserMethod		Function
292hi def link veraTask		Keyword
293hi def link veraModifier		Tag
294hi def link veraDeprecated		veraError
295hi def link veraMethods		Statement
296" hi def link veraInterface		Label
297hi def link veraInterface		Function
298
299hi def link veraFormat		veraSpecial
300hi def link veraCppString		veraString
301hi def link veraCommentL		veraComment
302hi def link veraCommentStart		veraComment
303hi def link veraLabel			Label
304hi def link veraUserLabel		Label
305hi def link veraConditional		Conditional
306hi def link veraRepeat		Repeat
307hi def link veraCharacter		Character
308hi def link veraSpecialCharacter	veraSpecial
309hi def link veraNumber		Number
310hi def link veraOctal			Number
311hi def link veraOctalZero		PreProc	 " link this to Error if you want
312hi def link veraFloat			Float
313hi def link veraOctalError		veraError
314hi def link veraParenError		veraError
315hi def link veraErrInParen		veraError
316hi def link veraErrInBracket		veraError
317hi def link veraCommentError		veraError
318hi def link veraCommentStartError	veraError
319hi def link veraSpaceError         SpaceError
320hi def link veraSpecialError		veraError
321hi def link veraOperator		Operator
322hi def link veraStructure		Structure
323hi def link veraInclude		Include
324hi def link veraPreProc		PreProc
325hi def link veraDefine		Macro
326hi def link veraIncluded		veraString
327hi def link veraError			Error
328hi def link veraStatement		Statement
329hi def link veraPreCondit		PreCondit
330hi def link veraType			Type
331" hi def link veraConstant		Constant
332hi def link veraConstant		Keyword
333hi def link veraUserConstant		Constant
334hi def link veraCommentString		veraString
335hi def link veraComment2String	veraString
336hi def link veraCommentSkip		veraComment
337hi def link veraString		String
338hi def link veraComment		Comment
339hi def link veraSpecial		SpecialChar
340hi def link veraTodo			Todo
341hi def link veraCppSkip		veraCppOut
342hi def link veraCppOut2		veraCppOut
343hi def link veraCppOut		Comment
344
345
346let b:current_syntax = "vera"
347
348" vim: ts=8
349