2 " Language: Renderman shader language
3 " Maintainer: Dan Piponi <dan@tanelorn.demon.co.uk>
4 " Last Change: 2001 May 09
6 " For version 5.x: Clear all syntax items
7 " For version 6.x: Quit when a syntax file was already loaded
10 elseif exists("b:current_syntax")
14 " A bunch of useful Renderman keywords including special
15 " RenderMan control structures
16 syn keyword slStatement break return continue
17 syn keyword slConditional if else
18 syn keyword slRepeat while for
19 syn keyword slRepeat illuminance illuminate solar
21 syn keyword slTodo contained TODO FIXME XXX
23 " String and Character constants
24 " Highlight special characters (those which have a backslash) differently
25 syn match slSpecial contained "\\[0-9][0-9][0-9]\|\\."
26 syn region slString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=slSpecial
27 syn match slCharacter "'[^\\]'"
28 syn match slSpecialCharacter "'\\.'"
29 syn match slSpecialCharacter "'\\[0-9][0-9]'"
30 syn match slSpecialCharacter "'\\[0-9][0-9][0-9]'"
32 "catch errors caused by wrong parenthesis
33 syn region slParen transparent start='(' end=')' contains=ALLBUT,slParenError,slIncluded,slSpecial,slTodo,slUserLabel
34 syn match slParenError ")"
35 syn match slInParen contained "[{}]"
37 "integer number, or floating point number without a dot and with "f".
39 syn match slNumber "\<[0-9]\+\(u\=l\=\|lu\|f\)\>"
40 "floating point number, with dot, optional exponent
41 syn match slFloat "\<[0-9]\+\.[0-9]*\(e[-+]\=[0-9]\+\)\=[fl]\=\>"
42 "floating point number, starting with a dot, optional exponent
43 syn match slFloat "\.[0-9]\+\(e[-+]\=[0-9]\+\)\=[fl]\=\>"
44 "floating point number, without dot, with exponent
45 syn match slFloat "\<[0-9]\+e[-+]\=[0-9]\+[fl]\=\>"
47 syn match slNumber "\<0x[0-9a-f]\+\(u\=l\=\|lu\)\>"
48 "syn match slIdentifier "\<[a-z_][a-z0-9_]*\>"
51 if exists("sl_comment_strings")
52 " A comment can contain slString, slCharacter and slNumber.
53 " But a "*/" inside a slString in a slComment DOES end the comment! So we
54 " need to use a special type of slString: slCommentString, which also ends on
55 " "*/", and sees a "*" at the start of the line as comment again.
56 " Unfortunately this doesn't very well work for // type of comments :-(
57 syntax match slCommentSkip contained "^\s*\*\($\|\s\+\)"
58 syntax region slCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=slSpecial,slCommentSkip
59 syntax region slComment2String contained start=+"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=slSpecial
60 syntax region slComment start="/\*" end="\*/" contains=slTodo,slCommentString,slCharacter,slNumber
62 syn region slComment start="/\*" end="\*/" contains=slTodo
64 syntax match slCommentError "\*/"
66 syn keyword slOperator sizeof
67 syn keyword slType float point color string vector normal matrix void
68 syn keyword slStorageClass varying uniform extern
69 syn keyword slStorageClass light surface volume displacement transformation imager
70 syn keyword slVariable Cs Os P dPdu dPdv N Ng u v du dv s t
71 syn keyword slVariable L Cl Ol E I ncomps time Ci Oi
72 syn keyword slVariable Ps alpha
73 syn keyword slVariable dtime dPdtime
75 syn sync ccomment slComment minlines=10
77 " Define the default highlighting.
78 " For version 5.7 and earlier: only when not done already
79 " For version 5.8 and later: only when an item doesn't have highlighting yet
80 if version >= 508 || !exists("did_sl_syntax_inits")
82 let did_sl_syntax_inits = 1
83 command -nargs=+ HiLink hi link <args>
85 command -nargs=+ HiLink hi def link <args>
89 HiLink slUserLabel Label
90 HiLink slConditional Conditional
91 HiLink slRepeat Repeat
92 HiLink slCharacter Character
93 HiLink slSpecialCharacter slSpecial
94 HiLink slNumber Number
96 HiLink slParenError slError
97 HiLink slInParen slError
98 HiLink slCommentError slError
99 HiLink slOperator Operator
100 HiLink slStorageClass StorageClass
102 HiLink slStatement Statement
104 HiLink slCommentError slError
105 HiLink slCommentString slString
106 HiLink slComment2String slString
107 HiLink slCommentSkip slComment
108 HiLink slString String
109 HiLink slComment Comment
110 HiLink slSpecial SpecialChar
112 HiLink slVariable Identifier
113 "HiLink slIdentifier Identifier
118 let b:current_syntax = "sl"