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