]> git.draconx.ca Git - vimconf.git/blob - syntax/glsl330.vim
Add editing rules for awk.
[vimconf.git] / syntax / glsl330.vim
1 " Vim syntax file the OpenGL Shading Language
2 " Language:     GLSL 400
3 " Author:       Kamil Patelczyk <patelczyk@gmail.com>
4 " Date:         July 17, 2010
5 " File Types:   .glsl
6 " Version:      1
7 " Notes:        Adapted from c.vim - Bram Moolenaar <bram.vim.org>
8 "               Adapted from cg.vim - Kevin Bjorke <kbjorke@nvidia.com>
9 "               Adapted from glsl.vim - Nathan Cournia <nathan@cournia.com>
10
11 " For version 5.x: Clear all syntax items
12 " For version 6.x: Quit when a syntax file was already loaded
13 if version < 600
14   syntax clear
15 elseif exists("b:current_syntax")
16   finish
17 endif
18
19 " glslCommentGroup allows adding matches for special things in comments
20 syn cluster         glslCommentGroup    contains=glslTodo
21
22 "catch errors caused by wrong parenthesis and brackets
23 syn cluster         glslParenGroup      contains=glslParenError,glslIncluded,glslSpecial,glslCommentSkip,glslCommentString,glslComment2String,@glslCommentGroup,glslCommentStartError,glslUserCont,glslUserLabel,glslBitField,glslCommentSkip,glslOctalZero,glslCppOut,glslCppOut2,glslCppSkip,glslFormat,glslNumber,glslFloat,glslOctal,glslOctalError,glslNumbersCom,glslLayoutQual
24 if exists("c_no_bracket_error")
25   syn region        glslParen           transparent start='(' end=')' contains=ALLBUT,@glslParenGroup,glslCppParen,glslCppString
26   " glslCppParen: same as glslParen but ends at end-of-line; used in glslDefine
27   syn region        glslCppParen        transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@glslParenGroup,glslParen,glslString
28   syn match         glslParenError      display ")"
29   syn match         glslErrInParen      display contained "[{}]"
30 else
31   syn region        glslParen           transparent start='(' end=')' contains=ALLBUT,@glslParenGroup,glslCppParen,glslErrInBracket,glslCppBracket,glslCppString
32   " glslCppParen: same as glslParen but ends at end-of-line; used in glslDefine
33   syn region        glslCppParen        transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@glslParenGroup,glslErrInBracket,glslParen,glslBracket,glslString
34   syn match         glslParenError      display "[\])]"
35   syn match         glslErrInParen      display contained "[\]{}]"
36   syn region        glslBracket         transparent start='\[' end=']' contains=ALLBUT,@glslParenGroup,glslErrInParen,glslCppParen,glslCppBracket,glslCppString
37   " glslCppBracket: same as glslParen but ends at end-of-line; used in glslDefine
38   syn region        glslCppBracket      transparent start='\[' skip='\\$' excludenl end=']' end='$' contained contains=ALLBUT,@glslParenGroup,glslErrInParen,glslParen,glslBracket,glslString
39   syn match         glslErrInBracket    display contained "[);{}]"
40 endif
41
42 "integer number, or floating point number without a dot and with "f".
43 syn case ignore
44 syn match           glslNumbers         display transparent "\<\d\|\.\d" contains=glslNumber,glslFloat,glslOctalError,glslOctal
45 " Same, but without octal error (for comments)
46 syn match           glslNumbersCom      display contained transparent "\<\d\|\.\d" contains=glslNumber,glslFloat,glslOctal
47 syn match           glslNumber          display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
48 "hex number
49 syn match           glslNumber          display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
50 " Flag the first zero of an octal number as something special
51 syn match           glslOctal           display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=glslOctalZero
52 syn match           glslOctalZero       display contained "\<0"
53 syn match           glslFloat           display contained "\d\+f"
54 "floating point number, with dot, optional exponent
55 syn match           glslFloat           display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
56 "floating point number, starting with a dot, optional exponent
57 syn match           glslFloat           display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
58 "floating point number, without dot, with exponent
59 syn match           glslFloat           display contained "\d\+e[-+]\=\d\+[fl]\=\>"
60 " flag an octal number with wrong digits
61 syn match           glslOctalError      display contained "0\o*[89]\d*"
62 syn case match
63
64 if exists("c_comment_strings")
65   " A comment can contain glslString, glslCharacter and glslNumber.
66   " But a "*/" inside a glslString in a glslComment DOES end the comment!  So we
67   " need to use a special type of glslString: glslCommentString, which also ends on
68   " "*/", and sees a "*" at the start of the line as glslomment again.
69   " Unfortunately this doesn't very well work for // type of comments :-(
70   syntax match      glslCommentSkip         contained "^\s*\*\($\|\s\+\)"
71   syntax region     glslCommentString       contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=glslSpecial,glslCommentSkip
72   syntax region     glslComment2String      contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=glslSpecial
73   syntax region     glslCommentL            start="//" skip="\\$" end="$" keepend contains=@glslCommentGroup,glslComment2String,glslCharacter,glslNumbersCom,glslSpaceError
74   syntax region     glslComment             matchgroup=glslCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@glslCommentGroup,glslCommentStartError,glslCommentString,glslCharacter,glslNumbersCom,glslSpaceError
75 else                                        
76   syn region        glslCommentL            start="//" skip="\\$" end="$" keepend contains=@glslCommentGroup,glslSpaceError
77   syn region        glslComment             matchgroup=glslCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@glslCommentGroup,glslCommentStartError,glslSpaceError
78 endif
79 " keep a // comment separately, it terminates a preproc. conditional
80 syntax match        glslCommentError        display "\*/"
81 syntax match        glslCommentStartError   display "/\*"me=e-1 contained
82
83 syn region          glslPreCondit           start="^\s*#\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=glslComment,glslCppString,glslCharacter,glslCppParen,glslParenError,glslNumbers,glslCommentError,glslSpaceError
84 syn match           glslPreCondit           display "^\s*#\s*\(else\|endif\)\>"
85 syn region          glslCppOut              start="^\s*#\s*if\s\+0\+\>" end=".\|$" contains=glslCppOut2
86 syn region          glslCppOut2             contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=glslSpaceError,glslCppSkip
87 syn region          glslCppSkip             contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=glslSpaceError,glslCppSkip
88 "syn match glslLineSkip        "\\$"
89 syn cluster         glslPreProglslGroup     contains=glslPreCondit,glslIncluded,glslInclude,glslDefine,glslErrInParen,glslErrInBracket,glslUserLabel,glslSpecial,glslOctalZero,glslCppOut,glslCppOut2,glslCppSkip,glslFormat,glslNumber,glslFloat,glslOctal,glslOctalError,glslNumbersCom,glslString,glslCommentSkip,glslCommentString,glslComment2String,@glslCommentGroup,glslCommentStartError,glslParen,glslBracket,glslMulti
90 syn region          glslDefine              start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@glslPreProglslGroup
91 syn region          glslPreProc             start="^\s*#\s*\(pragma\>\|line\>\|error\>\|version\>\|extension\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@glslPreProglslGroup
92
93 " Highlight User Labels
94 syn cluster         glslMultiGroup          contains=glslIncluded,glslSpecial,glslCommentSkip,glslCommentString,glslComment2String,@glslCommentGroup,glslCommentStartError,glslUserCont,glslUserLabel,glslBitField,glslOctalZero,glslCppOut,glslCppOut2,glslCppSkip,glslFormat,glslNumber,glslFloat,glslOctal,glslOctalError,glslNumbersCom,glslCppParen,glslCppBracket,glslCppString
95 syn region          glslMulti               transparent start='?' skip='::' end=':' contains=ALLBUT,@glslMultiGroup
96 " Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
97 syn cluster         glslLabelGroup          contains=glslUserLabel
98 syn match           glslUserCont            display "^\s*\I\i*\s*:$" contains=@glslLabelGroup
99 syn match           glslUserCont            display ";\s*\I\i*\s*:$" contains=@glslLabelGroup
100 syn match           glslUserCont            display "^\s*\I\i*\s*:[^:]"me=e-1 contains=@glslLabelGroup
101 syn match           glslUserCont            display ";\s*\I\i*\s*:[^:]"me=e-1 contains=@glslLabelGroup
102
103 syn match           glslUserLabel           display "\I\i*" contained
104
105 " Avoid recognizing most bitfields as labels
106 syn match           glslBitField            display "^\s*\I\i*\s*:\s*[1-9]"me=e-1
107 syn match           glslBitField            display ";\s*\I\i*\s*:\s*[1-9]"me=e-1
108
109
110 " Keywords and simple stuff 
111 syn keyword         glslTodo                contained TODO FIXME XXX
112
113 syn keyword         glslStorageClass        const uniform
114 syn keyword         glslStorageClass        in out inout
115 syn keyword         glslStorageClass        centroid flat smooth noperspective
116 syn keyword         glslStorageClass        lowp mediump highp precision
117 syn keyword         glslStorageClass        invariant
118
119 syn match           glslLayout              /\<layout\s*(\_.\{-})/hs=s,he=s+6 contains=glslLayoutQual,glslNumber
120                                             
121 syn keyword         glslStorageClassDeprec  attribute varying
122
123 syn keyword         glslLayoutQual          contained shared packed std140 row_major column_major 
124 syn keyword         glslLayoutQual          contained index line_strip lines lines_adjacency location
125 syn keyword         glslLayoutQual          contained max_vertices origin_upper_left pixel_center_integer points
126 syn keyword         glslLayoutQual          contained triangle_strip triangles triangles_adjacency
127
128 syn keyword         glslStatement           break continue discard return
129 syn keyword         glslRepeat              while for do
130 syn keyword         glslConditional         if else switch
131 syn keyword         glslLabel               case default
132                                             
133 syn keyword         glslConstant            true false
134 syn keyword         glslConstant            __LINE__ __FILE__ __VERSION__
135                                             
136 syn keyword         glslType                uint uvec2 uvec3 uvec4
137 syn keyword         glslType                float int void bool
138 syn keyword         glslType                mat2 mat3 mat4
139 syn keyword         glslType                mat2x2 mat2x3 mat2x4
140 syn keyword         glslType                mat3x2 mat3x3 mat3x4
141 syn keyword         glslType                mat4x2 mat4x3 mat4x4
142 syn keyword         glslType                vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4
143 syn keyword         glslType                sampler1D sampler2D sampler3D samplerCube 
144 syn keyword         glslType                sampler1DShadow sampler2DShadow samplerCubeShadow
145 syn keyword         glslType                sampler1DArray sampler2DArray
146 syn keyword         glslType                sampler1DArrayShadow sampler2DArrayShadow
147 syn keyword         glslType                isampler1D isampler2D isampler3D isamplerCube
148 syn keyword         glslType                isampler1DArray isampler2DArray
149 syn keyword         glslType                usampler1D usampler2D usampler3D usamplerCube
150 syn keyword         glslType                usampler1DArray usampler2DArray
151 syn keyword         glslType                sampler2DRect sampler2DRectShadow isampler2DRect usampler2DRect
152 syn keyword         glslType                samplerBuffer isamplerBuffer usamplerBuffer
153 syn keyword         glslType                sampler2DMS isampler2DMS usampler2DMS
154 syn keyword         glslType                sampler2DMSArray isampler2DMSArray usampler2DMSArray
155                                             
156 syn keyword         glslStructure           struct
157                                             
158 " Swizzling                                  
159 syn match           glslSwizzle             /\.[xyzw]\{1,4\}\>/
160 syn match           glslSwizzle             /\.[rgba]\{1,4\}\>/
161 syn match           glslSwizzle             /\.[stpq]\{1,4\}\>/
162                                             
163 " Builtin variables
164 syn keyword         glslState               gl_FragCoord gl_FrontFacing gl_PointCoord gl_FragDepth
165 syn keyword         glslState               gl_VertexID gl_InstanceID gl_Position gl_PointSize
166 syn keyword         glslState               gl_PrimitiveIDIn gl_PrimitiveID gl_Layer
167 syn keyword         glslState               gl_ClipDistance gl_in
168
169 syn keyword         glslStateDeprec         gl_FragColor gl_FragData gl_TexCoord
170 syn keyword         glslStateDeprec         gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_FogFragCoord
171 syn keyword         glslStateDeprec         gl_Color gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2
172 syn keyword         glslStateDeprec         gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord
173
174 " Uniforms variables
175 syn keyword         glslUniform             gl_DepthRange
176
177 syn keyword         glslUniformDeprec       gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_NormalMatrix gl_NormalScale
178 syn keyword         glslUniformDeprec       gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse
179 syn keyword         glslUniformDeprec       gl_ModelViewMatrixTranspose gl_ProjectionMatrixTranspose gl_ModelViewProjectionMatrixTranspose
180 syn keyword         glslUniformDeprec       gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose 
181 syn keyword         glslUniformDeprec       gl_Point gl_FrontMaterial gl_BackMaterial gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_Fog
182 syn keyword         glslUniformDeprec       gl_BackLightProduct gl_ClipPlane gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT
183 syn keyword         glslUniformDeprec       gl_FrontLightProduct gl_LightSource gl_ObjectPlaneQ gl_ObjectPlaneR gl_ObjectPlaneS
184 syn keyword         glslUniformDeprec       gl_ObjectPlaneT gl_TextureEnvColor gl_TextureMatrixInverseTranspose gl_TextureMatrixInverse
185 syn keyword         glslUniformDeprec       gl_TextureMatrixTranspose gl_TextureMatrix
186
187 " Builtin constants
188 syn keyword         glslConstant            gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVertexOutputComponents gl_MaxGeometryInputComponents
189 syn keyword         glslConstant            gl_MaxGeometryOutputComponents gl_MaxFragmentInputComponents gl_MaxVertexTextureImageUnits
190 syn keyword         glslConstant            gl_MaxCombinedTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxDrawBuffers
191 syn keyword         glslConstant            gl_MaxClipDistances gl_MaxGeometryTextureImageUnits gl_MaxGeometryOutputVertices gl_MaxGeometryTotalOutputComponents
192 syn keyword         glslConstant            gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents
193
194 syn keyword         glslConstantDeprec      gl_MaxVaryingFloats gl_MaxVaryingComponents
195 syn keyword         glslConstantDeprec      gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxClipPlanes
196
197 " Built in functions                         
198 syn keyword         glslFunc                abs acos acosh asin asinh atan atanh ceil cos cosh degrees exp exp2 floor fract inversesqrt log
199 syn keyword         glslFunc                log2 max min mod modf pow radians round roundEven sign sin sinh sqrt tan tanh trunc
200 syn keyword         glslFunc                clamp cross distance dot floatBitsToInt floatBitsToUint intBitsToFloat isinf isnan
201 syn keyword         glslFunc                length mix normalize smoothstep step
202 syn keyword         glslFunc                all any determinant equal faceforward
203 syn keyword         glslFunc                greaterThan greaterThanEqual imulExtended inverse lessThan lessThanEqual matrixCompMult 
204 syn keyword         glslFunc                not notEqual outerProduct reflect refract transpose 
205 syn keyword         glslFunc                textureSize texture textureProj textureLod textureOffset texelFetch texelFetchOffset
206 syn keyword         glslFunc                textureProjOffset textureLodOffset textureProjLod textureProjLodOffset textureGrad textureGradOffset
207 syn keyword         glslFunc                textureProjGrad textureProjGradOffset 
208 syn keyword         glslFunc                dFdx dFdy fwidth
209 syn keyword         glslFunc                noise1 noise2 noise3 noise4
210 syn keyword         glslFunc                EmitVertex EndPrimitive
211
212 syn keyword         glslFuncDeprec          ftransform
213 syn keyword         glslFuncDeprec          texture1D texture1DProj texture1DProj texture1DLod texture1DProjLod texture1DProjLod texture2D 
214 syn keyword         glslFuncDeprec          texture2DProj texture2DProj texture2DLod texture2DProjLod texture2DProjLod texture3D texture3DProj 
215 syn keyword         glslFuncDeprec          texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj 
216 syn keyword         glslFuncDeprec          shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod
217
218
219 " Highlight unsupported keywords             
220 syn keyword         glslUnsupported         asm
221 syn keyword         glslUnsupported         class union enum typedef template this packed 
222 syn keyword         glslUnsupported         common partition active
223 syn keyword         glslUnsupported         filter 
224 syn keyword         glslUnsupported         goto 
225 syn keyword         glslUnsupported         hvec2 hvec3 hvec4 fvec2 fvec3 fvec4
226 syn keyword         glslUnsupported         iimage1D iimage2D iimage3D iimageCube 
227 syn keyword         glslUnsupported         iimage1DArray iimage2DArray uimage1DArray uimage2DArray
228 syn keyword         glslUnsupported         image1D image2D image3D imageCube 
229 syn keyword         glslUnsupported         image1DArray image2DArray 
230 syn keyword         glslUnsupported         image1DArrayShadow image2DArrayShadow
231 syn keyword         glslUnsupported         image1DShadow image2DShadow
232 syn keyword         glslUnsupported         imageBuffer iimageBuffer uimageBuffer
233 syn keyword         glslUnsupported         inline noinline volatile public static extern external interface
234 syn keyword         glslUnsupported         input output
235 syn keyword         glslUnsupported         long short half fixed unsigned superp
236 syn keyword         glslUnsupported         namespace using
237 syn keyword         glslUnsupported         sampler3DRect 
238 syn keyword         glslUnsupported         sizeof cast
239 syn keyword         glslUnsupported         uimage1D uimage2D uimage3D uimageCube 
240 syn keyword         glslUnsupported         double dvec2 dvec3 dvec4
241
242 " Define the default highlighting.
243 " For version 5.7 and earlier: only when not done already
244 " For version 5.8 and later: only when an item doesn't have highlighting yet
245 if version >= 508 || !exists("did_glsl_syn_inits")
246   if version < 508
247     let did_glsl_syn_inits = 1
248     command -nargs=+ HiLink hi link <args>
249   else
250     command -nargs=+ HiLink hi def link <args>
251   endif
252
253   HiLink glslCharacter                Character
254   HiLink glslComment                  Comment
255   HiLink glslComment2String           glslString
256   HiLink glslCommentError             glslError
257   HiLink glslCommentL                 glslComment
258   HiLink glslCommentSkip              glslComment
259   HiLink glslCommentStart             glslComment
260   HiLink glslCommentStartError        glslError
261   HiLink glslCommentString            glslString
262   HiLink glslCppOut                   Comment
263   HiLink glslCppOut2                  glslCppOut
264   HiLink glslCppSkip                  glslCppOut
265   HiLink glslCppString                glslString
266   HiLink glslDefine                   Macro
267   HiLink glslErrInBracket             glslError
268   HiLink glslErrInParen               glslError
269   HiLink glslError                    Error
270   HiLink glslFloat                    Float
271   HiLink glslFormat                   glslSpecial
272   HiLink glslInclude                  Include
273   HiLink glslIncluded                 glslString
274   HiLink glslNumber                   Number
275   HiLink glslOctal                    Number
276   HiLink glslOctalError               glslError
277   HiLink glslOctalZero                PreProc
278   HiLink glslOperator                 Operator
279   HiLink glslParenError               glslError
280   HiLink glslPreCondit                PreCondit
281   HiLink glslPreProc                  PreProc
282   HiLink glslSpaceError               glslError
283   HiLink glslSpecial                  SpecialChar
284   HiLink glslSpecialCharacter         glslSpecial
285   HiLink glslSpecialError             glslError
286   HiLink glslString                   String
287
288   HiLink glslConditional              Conditional
289   HiLink glslConstant                 Constant
290   HiLink glslFunc                     glslStatement
291   HiLink glslFuncDeprec               WarningMsg
292   HiLink glslLabel                    Label
293   HiLink glslLayoutQual               glslFunc
294   HiLink glslRepeat                   Repeat
295   HiLink glslState                    glslType
296   HiLink glslStateDeprec              WarningMsg
297   HiLink glslStatement                Statement
298   HiLink glslStorageClass             StorageClass
299   HiLink glslLayout                   StorageClass
300   HiLink glslStorageClassDeprec       WarningMsg
301   HiLink glslStructure                Structure
302   HiLink glslSwizzle                  SpecialChar
303   HiLink glslTodo                     Todo
304   HiLink glslType                     Type
305   HiLink glslUniform                  glslType
306   HiLink glslUniformDeprec            WarningMsg
307   HiLink glslUnsupported              glslError
308   HiLink glslUserLabel                Label
309
310   delcommand HiLink
311 endif
312
313 let b:current_syntax = "glsl330"