blob: 7952c94290ae556c209e5f6cce31a523b0e0dd1d [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
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020013" quit when a syntax file was already loaded
14if exists("b:current_syntax")
Bram Moolenaarc1e37902006-04-18 21:55:01 +000015 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.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200287" Only when an item doesn't have highlighting yet
288command -nargs=+ HiLink hi def link <args>
Bram Moolenaarc1e37902006-04-18 21:55:01 +0000289
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200290HiLink veraClass Identifier
291HiLink veraObject Identifier
292HiLink veraUserMethod Function
293HiLink veraTask Keyword
294HiLink veraModifier Tag
295HiLink veraDeprecated veraError
296HiLink veraMethods Statement
297" HiLink veraInterface Label
298HiLink veraInterface Function
Bram Moolenaarc1e37902006-04-18 21:55:01 +0000299
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200300HiLink veraFormat veraSpecial
301HiLink veraCppString veraString
302HiLink veraCommentL veraComment
303HiLink veraCommentStart veraComment
304HiLink veraLabel Label
305HiLink veraUserLabel Label
306HiLink veraConditional Conditional
307HiLink veraRepeat Repeat
308HiLink veraCharacter Character
309HiLink veraSpecialCharacter veraSpecial
310HiLink veraNumber Number
311HiLink veraOctal Number
312HiLink veraOctalZero PreProc " link this to Error if you want
313HiLink veraFloat Float
314HiLink veraOctalError veraError
315HiLink veraParenError veraError
316HiLink veraErrInParen veraError
317HiLink veraErrInBracket veraError
318HiLink veraCommentError veraError
319HiLink veraCommentStartError veraError
320HiLink veraSpaceError SpaceError
321HiLink veraSpecialError veraError
322HiLink veraOperator Operator
323HiLink veraStructure Structure
324HiLink veraInclude Include
325HiLink veraPreProc PreProc
326HiLink veraDefine Macro
327HiLink veraIncluded veraString
328HiLink veraError Error
329HiLink veraStatement Statement
330HiLink veraPreCondit PreCondit
331HiLink veraType Type
332" HiLink veraConstant Constant
333HiLink veraConstant Keyword
334HiLink veraUserConstant Constant
335HiLink veraCommentString veraString
336HiLink veraComment2String veraString
337HiLink veraCommentSkip veraComment
338HiLink veraString String
339HiLink veraComment Comment
340HiLink veraSpecial SpecialChar
341HiLink veraTodo Todo
342HiLink veraCppSkip veraCppOut
343HiLink veraCppOut2 veraCppOut
344HiLink veraCppOut Comment
Bram Moolenaarc1e37902006-04-18 21:55:01 +0000345
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200346delcommand HiLink
Bram Moolenaarc1e37902006-04-18 21:55:01 +0000347
348let b:current_syntax = "vera"
349
350" vim: ts=8