blob: b41c0a6cbf1c597167364e1574c8854bc1dfe3c9 [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
Bram Moolenaarc1e37902006-04-18 21:55:01 +0000288
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200289hi 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
Bram Moolenaarc1e37902006-04-18 21:55:01 +0000298
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200299hi 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
Bram Moolenaarc1e37902006-04-18 21:55:01 +0000344
Bram Moolenaarc1e37902006-04-18 21:55:01 +0000345
346let b:current_syntax = "vera"
347
348" vim: ts=8