<"
" syn match veraOperator "*\|/\|%\|+\|-\|<<\|>>\|<\|<=\|>\|>=\|!in"
" syn match veraOperator "=?=\|!?=\|==\|!=\|===\|!==\|&\~\|^\~\||\~"
" syn match veraOperator "&&\|||\|=\|+=\|-=\|*=\|/=\|%=\|<<=\|>>=\|&="
" syn match veraOperator "|=\|^=\|\~&=\|\~|=\|\~^="
syn match veraOperator "[&|\~>"
" "hex number
" syn match veraNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
" syn match veraNumber "\(\<[0-9]\+\|\)'[bdoh][0-9a-fxzA-FXZ_]\+\>"
syn match veraNumber "\<\(\<[0-9]\+\)\?\('[bdoh]\)\?[0-9a-fxz_]\+\>"
" syn match veraNumber "\<[+-]\=[0-9]\+\>"
" Flag the first zero of an octal number as something special
syn match veraOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=veraOctalZero
syn match veraOctalZero display contained "\<0"
syn match veraFloat display contained "\d\+f"
"floating point number, with dot, optional exponent
syn match veraFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
"floating point number, starting with a dot, optional exponent
syn match veraFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
"floating point number, without dot, with exponent
syn match veraFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>"
"hexadecimal floating point number, optional leading digits, with dot, with exponent
syn match veraFloat display contained "0x\x*\.\x\+p[-+]\=\d\+[fl]\=\>"
"hexadecimal floating point number, with leading digits, optional dot, with exponent
syn match veraFloat display contained "0x\x\+\.\=p[-+]\=\d\+[fl]\=\>"
" flag an octal number with wrong digits
syn match veraOctalError display contained "0\o*[89]\d*"
syn case match
let vera_comment_strings = 1
if exists("vera_comment_strings")
" A comment can contain veraString, veraCharacter and veraNumber.
" But a "*/" inside a veraString in a veraComment DOES end the comment! So we
" need to use a special type of veraString: veraCommentString, which also ends on
" "*/", and sees a "*" at the start of the line as comment again.
" Unfortunately this doesn't work very well for // type of comments :-(
syntax match veraCommentSkip contained "^\s*\*\($\|\s\+\)"
syntax region veraCommentString contained start=+L\=\\\@"
syn match veraClass "\zs\w\+\ze::"
syn match veraClass "\zs\w\+\ze\s\+\w\+\s*[=;,)\[]" contains=veraConstant,veraUserConstant
syn match veraClass "\zs\w\+\ze\s\+\w\+\s*$" contains=veraConstant,veraUserConstant
syn match veraUserMethod "\zs\w\+\ze\s*(" contains=veraConstant,veraUserConstant
syn match veraObject "\zs\w\+\ze\.\w"
syn match veraObject "\zs\w\+\ze\.\$\w"
" Accept ` for # (Verilog)
syn region veraPreCondit start="^\s*\(`\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=veraComment,veraCppString,veraCharacter,veraCppParen,veraParenError,veraNumbers,veraCommentError,veraSpaceError
syn match veraPreCondit display "^\s*\(`\|#\)\s*\(else\|endif\)\>"
if !exists("vera_no_if0")
syn region veraCppOut start="^\s*\(`\|#\)\s*if\s\+0\+\>" end=".\@=\|$" contains=veraCppOut2
syn region veraCppOut2 contained start="0" end="^\s*\(`\|#\)\s*\(endif\>\|else\>\|elif\>\)" contains=veraSpaceError,veraCppSkip
syn region veraCppSkip contained start="^\s*\(`\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(`\|#\)\s*endif\>" contains=veraSpaceError,veraCppSkip
endif
syn region veraIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
syn match veraIncluded display contained "<[^>]*>"
syn match veraInclude display "^\s*\(`\|#\)\s*include\>\s*["<]" contains=veraIncluded
"syn match veraLineSkip "\\$"
syn 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
syn region veraDefine start="^\s*\(`\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@veraPreProcGroup,@Spell
syn region veraPreProc start="^\s*\(`\|#\)\s*\(pragma\>\|line\>\|warning\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@veraPreProcGroup,@Spell
" Highlight User Labels
syn 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
syn region veraMulti transparent start='?' skip='::' end=':' contains=ALLBUT,@veraMultiGroup,@Spell
" syn region veraMulti transparent start='?' skip='::' end=':' contains=ALL
" The above causes veraCppOut2 to catch on:
" i = (isTrue) ? 0 : 1;
" which ends up commenting the rest of the file
" Avoid matching foo::bar() by requiring that the next char is not ':'
syn cluster veraLabelGroup contains=veraUserLabel
syn match veraUserCont display "^\s*\I\i*\s*:$" contains=@veraLabelGroup
syn match veraUserCont display ";\s*\I\i*\s*:$" contains=@veraLabelGroup
syn match veraUserCont display "^\s*\I\i*\s*:[^:]"me=e-1 contains=@veraLabelGroup
syn match veraUserCont display ";\s*\I\i*\s*:[^:]"me=e-1 contains=@veraLabelGroup
syn match veraUserLabel display "\I\i*" contained
" Avoid recognizing most bitfields as labels
syn match veraBitField display "^\s*\I\i*\s*:\s*[1-9]"me=e-1
syn match veraBitField display ";\s*\I\i*\s*:\s*[1-9]"me=e-1
if exists("vera_minlines")
let b:vera_minlines = vera_minlines
else
if !exists("vera_no_if0")
let b:vera_minlines = 50 " #if 0 constructs can be long
else
let b:vera_minlines = 15 " mostly for () constructs
endif
endif
exec "syn sync ccomment veraComment minlines=" . b:vera_minlines
" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_vera_syn_inits")
if version < 508
let did_vera_syn_inits = 1
command -nargs=+ HiLink hi link
else
command -nargs=+ HiLink hi def link
endif
HiLink veraClass Identifier
HiLink veraObject Identifier
HiLink veraUserMethod Function
HiLink veraTask Keyword
HiLink veraModifier Tag
HiLink veraDeprecated veraError
HiLink veraMethods Statement
" HiLink veraInterface Label
HiLink veraInterface Function
HiLink veraFormat veraSpecial
HiLink veraCppString veraString
HiLink veraCommentL veraComment
HiLink veraCommentStart veraComment
HiLink veraLabel Label
HiLink veraUserLabel Label
HiLink veraConditional Conditional
HiLink veraRepeat Repeat
HiLink veraCharacter Character
HiLink veraSpecialCharacter veraSpecial
HiLink veraNumber Number
HiLink veraOctal Number
HiLink veraOctalZero PreProc " link this to Error if you want
HiLink veraFloat Float
HiLink veraOctalError veraError
HiLink veraParenError veraError
HiLink veraErrInParen veraError
HiLink veraErrInBracket veraError
HiLink veraCommentError veraError
HiLink veraCommentStartError veraError
HiLink veraSpaceError SpaceError
HiLink veraSpecialError veraError
HiLink veraOperator Operator
HiLink veraStructure Structure
HiLink veraInclude Include
HiLink veraPreProc PreProc
HiLink veraDefine Macro
HiLink veraIncluded veraString
HiLink veraError Error
HiLink veraStatement Statement
HiLink veraPreCondit PreCondit
HiLink veraType Type
" HiLink veraConstant Constant
HiLink veraConstant Keyword
HiLink veraUserConstant Constant
HiLink veraCommentString veraString
HiLink veraComment2String veraString
HiLink veraCommentSkip veraComment
HiLink veraString String
HiLink veraComment Comment
HiLink veraSpecial SpecialChar
HiLink veraTodo Todo
HiLink veraCppSkip veraCppOut
HiLink veraCppOut2 veraCppOut
HiLink veraCppOut Comment
delcommand HiLink
endif
let b:current_syntax = "vera"
" vim: ts=8