syn keyword povCommands background camera global_settings light_source
syn keyword povObjects atmosphere bicubic_patch blob box cone cylinder difference height_field intersection lathe merge mesh object plane polygon prism sor sphere superellipsoid text torus triangle union
syn keyword povTypes x y z hf_gray_16
syn keyword povModifiers rotate scale translate
syn keyword povDescriptors adaptive ambient ambient_settings angle aperture area_light assumed_gamma blue blur_samples brick checker color color_map conic_sweep cubic_spline diffuse fade_distance fade_power falloff finish focal_point frequency green hexagon linear_spline linear_sweep location look_at looks_like max_trace_level metallic no_shadow normal open orthographic phong pigment quadratic_spline radius red reflection rgb roughness shadowless specular spotlight texture tga threshold tightness ttf turbulence u_step v_step wrinkles
syn keyword povConditional if ifdef else switch
syn keyword povTodo contained TODO FIXME XXX
" comments
syn region povComment start="/\*" end="\*/" contains=povTodo
syn match povComment "//.*" contains=povTodo
syn match povCommentError "\*/"
syn sync ccomment povComment
" include statements
syn region povIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+
syn match povIncluded contained "<[^>]*>"
syn match povInclude "^#[ ]*include\>[ ]*["<]" contains=povIncluded
syn keyword povLabel case default
syn keyword povRepeat while for do
" String and Character constants
" Highlight special characters (those which have a backslash) differently
syn match povSpecial contained "\\\d\d\d\|\\."
syn region povString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=povSpecial
syn match povCharacter "'[^\\]'"
syn match povSpecialCharacter "'\\.'"
"catch errors caused by wrong parenthesis
syn region povParen transparent start='(' end=')' contains=ALLBUT,povParenError,povIncluded,povSpecial,povTodo,povUserLabel
syn match povParenError ")"
syn match povInParen contained "[{}]"
hi link povParenError povError
hi link povInParen povError
"integer number, or floating point number without a dot and with "f".
syn case ignore
syn match povNumber "\<\d\+\(u\=l\=\|lu\|f\)\>"
"floating point number, with dot, optional exponent
syn match povFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>"
"floating point number, starting with a dot, optional exponent
syn match povFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
"floating point number, without dot, with exponent
syn match povFloat "\<\d\+e[-+]\=\d\+[fl]\=\>"
"hex number
syn match povNumber "0x[0-9a-f]\+\(u\=l\=\|lu\)\>"
"syn match cIdentifier "\<[a-z_][a-z0-9_]*\>"
syn case match
syn keyword povType int long short char void size_t
syn keyword povType signed unsigned float double
syn keyword povStructure struct union enum typedef
syn keyword povStorageClass static register auto volatile extern const
syn region povPreCondit start="^[ \t]*#[ \t]*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=povComment,povString,povCharacter,povNumber,povCommentError
"syn match cLineSkip "\\$"
syn region povDefine start="^[ \t]*#[ \t]*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,povPreCondit,povIncluded,povInclude,povDefine,povInParen
syn region povPreProc start="^[ \t]*#[ \t]*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,povPreCondit,povIncluded,povInclude,povDefine,povInParen
" Highlight User Labels
syn region povMulti transparent start='?' end=':' contains=ALLBUT,povIncluded,povSpecial,povTodo,povUserLabel
" Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
syn match povUserLabel "^[ \t]*[a-zA-Z0-9_]\+[ \t]*:$"
syn match povUserLabel ";[ \t]*[a-zA-Z0-9_]\+[ \t]*:$"
syn match povUserLabel "^[ \t]*[a-zA-Z0-9_]\+[ \t]*:[^:]"me=e-1
syn match povUserLabel ";[ \t]*[a-zA-Z0-9_]\+[ \t]*:[^:]"me=e-1
syn sync ccomment povComment minlines=10
if !exists("did_pov_syntax_inits")
let did_pov_syntax_inits = 1
" The default methods for highlighting. Can be overridden later