From 3b4da6b830a51d8b3aea3f0ae997f07e69b99e67 Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Tue, 20 Jul 2010 11:31:32 -0400 Subject: [PATCH] Add GLSL syntax highlighting. I'm not particularly fond of these highlighting scripts, but they're better than nothing. --- ftplugin/glsl.vim | 13 ++ syntax/glsl.vim | 265 +++++++++++++++++++++++++++++++++++++ syntax/glsl330.vim | 313 ++++++++++++++++++++++++++++++++++++++++++++ syntax/glsl400.vim | 319 +++++++++++++++++++++++++++++++++++++++++++++ vimrc | 2 + 5 files changed, 912 insertions(+) create mode 100644 ftplugin/glsl.vim create mode 100644 syntax/glsl.vim create mode 100644 syntax/glsl330.vim create mode 100644 syntax/glsl400.vim diff --git a/ftplugin/glsl.vim b/ftplugin/glsl.vim new file mode 100644 index 0000000..04022de --- /dev/null +++ b/ftplugin/glsl.vim @@ -0,0 +1,13 @@ +" TODO: #version appears exactly once in the file, before any non-whitespace +" (i.e. possibly after a length comment). Checking only the first 10 lines +" is an incorrect hack. +for item in getline(1,10) + if item =~ "#version 400" + execute ':set syntax=glsl400' + break + endif + if item =~ "#version 330" + execute ':set syntax=glsl330' + break + endif +endfor diff --git a/syntax/glsl.vim b/syntax/glsl.vim new file mode 100644 index 0000000..bd04b1e --- /dev/null +++ b/syntax/glsl.vim @@ -0,0 +1,265 @@ +" Vim syntax file the OpenGL Shading Language +" Language: GLSL +" Author: Nathan Cournia +" Date: June 30, 2004 +" File Types: .frag .vert .glsl .fp .vp +" Version: 1.10.00 +" Notes: Adapted from c.vim - Bram Moolenaar +" Adapted from cg.vim - Kevin Bjorke + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +" a bunch of useful keywords +syn keyword glslConditional if else +syn keyword glslStatement break return continue discard +syn keyword glslRepeat while for do +syn keyword glslTodo contained TODO FIXME XXX + +" glslCommentGroup allows adding matches for special things in comments +syn cluster glslCommentGroup contains=glslTodo + +"catch errors caused by wrong parenthesis and brackets +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 +if exists("c_no_bracket_error") + syn region glslParen transparent start='(' end=')' contains=ALLBUT,@glslParenGroup,glslCppParen,glslCppString + " glslCppParen: same as glslParen but ends at end-of-line; used in glslDefine + syn region glslCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@glslParenGroup,glslParen,glslString + syn match glslParenError display ")" + syn match glslErrInParen display contained "[{}]" +else + syn region glslParen transparent start='(' end=')' contains=ALLBUT,@glslParenGroup,glslCppParen,glslErrInBracket,glslCppBracket,glslCppString + " glslCppParen: same as glslParen but ends at end-of-line; used in glslDefine + syn region glslCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@glslParenGroup,glslErrInBracket,glslParen,glslBracket,glslString + syn match glslParenError display "[\])]" + syn match glslErrInParen display contained "[\]{}]" + syn region glslBracket transparent start='\[' end=']' contains=ALLBUT,@glslParenGroup,glslErrInParen,glslCppParen,glslCppBracket,glslCppString + " glslCppBracket: same as glslParen but ends at end-of-line; used in glslDefine + syn region glslCppBracket transparent start='\[' skip='\\$' excludenl end=']' end='$' contained contains=ALLBUT,@glslParenGroup,glslErrInParen,glslParen,glslBracket,glslString + syn match glslErrInBracket display contained "[);{}]" +endif + +"integer number, or floating point number without a dot and with "f". +syn case ignore +syn match glslNumbers display transparent "\<\d\|\.\d" contains=glslNumber,glslFloat,glslOctalError,glslOctal +" Same, but without octal error (for comments) +syn match glslNumbersCom display contained transparent "\<\d\|\.\d" contains=glslNumber,glslFloat,glslOctal +syn match glslNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>" +"hex number +syn match glslNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>" +" Flag the first zero of an octal number as something special +syn match glslOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=glslOctalZero +syn match glslOctalZero display contained "\<0" +syn match glslFloat display contained "\d\+f" +"floating point number, with dot, optional exponent +syn match glslFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=" +"floating point number, starting with a dot, optional exponent +syn match glslFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, without dot, with exponent +syn match glslFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>" +" flag an octal number with wrong digits +syn match glslOctalError display contained "0\o*[89]\d*" +syn case match + +if exists("c_comment_strings") + " A comment can contain glslString, glslCharacter and glslNumber. + " But a "*/" inside a glslString in a glslComment DOES end the comment! So we + " need to use a special type of glslString: glslCommentString, which also ends on + " "*/", and sees a "*" at the start of the line as glslomment again. + " Unfortunately this doesn't very well work for // type of comments :-( + syntax match glslCommentSkip contained "^\s*\*\($\|\s\+\)" + syntax region glslCommentString contained start=+L\=\\\@" skip="\\$" end="$" end="//"me=s-1 contains=glslComment,glslCppString,glslCharacter,glslCppParen,glslParenError,glslNumbers,glslCommentError,glslSpaceError +syn match glslPreCondit display "^\s*#\s*\(else\|endif\)\>" +syn region glslCppOut start="^\s*#\s*if\s\+0\+\>" end=".\|$" contains=glslCppOut2 +syn region glslCppOut2 contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=glslSpaceError,glslCppSkip +syn region glslCppSkip contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=glslSpaceError,glslCppSkip +"syn match glslLineSkip "\\$" +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 +syn region glslDefine start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@glslPreProglslGroup +syn region glslPreProc start="^\s*#\s*\(pragma\>\|line\>\|error\>\|version\>\|extension\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@glslPreProglslGroup + +" Highlight User Labels +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 +syn region glslMulti transparent start='?' skip='::' end=':' contains=ALLBUT,@glslMultiGroup +" Avoid matching foo::bar() in C++ by requiring that the next char is not ':' +syn cluster glslLabelGroup contains=glslUserLabel +syn match glslUserCont display "^\s*\I\i*\s*:$" contains=@glslLabelGroup +syn match glslUserCont display ";\s*\I\i*\s*:$" contains=@glslLabelGroup +syn match glslUserCont display "^\s*\I\i*\s*:[^:]"me=e-1 contains=@glslLabelGroup +syn match glslUserCont display ";\s*\I\i*\s*:[^:]"me=e-1 contains=@glslLabelGroup + +syn match glslUserLabel display "\I\i*" contained + +" Avoid recognizing most bitfields as labels +syn match glslBitField display "^\s*\I\i*\s*:\s*[1-9]"me=e-1 +syn match glslBitField display ";\s*\I\i*\s*:\s*[1-9]"me=e-1 + +syn keyword glslState gl_Position gl_PointSize gl_ClipVertex +syn keyword glslState gl_FragCoord gl_FrontFacing gl_FragColor gl_FragData gl_FragDepth + +" vertex attributes +syn keyword glslState gl_Color gl_SecondaryColor gl_Normal gl_Vertex gl_FogCoord +syn match glslState display "gl_MultiTexCoord\d\+" + +" varying variables +syn keyword glslState gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord + +" uniforms +syn keyword glslUniform gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_NormalMatrix gl_TextureMatrix +syn keyword glslUniform gl_NormalScale gl_DepthRange gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial +syn keyword glslUniform gl_LightSource gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct +syn keyword glslUniform gl_FrontLightProduct gl_BackLightProduct glTextureEnvColor +syn keyword glslUniform gl_TextureEnvColor gl_Fog +syn match glslUniform display "gl_EyePlane[STRQ]" +syn match glslUniform display "gl_ObjectPlane[STRQ]" +syn keyword glslUniform gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse +syn keyword glslUniform gl_TextureMatrixInverse gl_ModelViewMatrixTranspose gl_ProjectionMatrixTranspose +syn keyword glslUniform gl_ModelViewProjectionMatrixTranspose gl_TextureMatrixTranspose gl_ModelViewMatrixInverseTranspose +syn keyword glslUniform gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose + +" uniform types +syn keyword glslType gl_DepthRangeParameters gl_PointParameters gl_MaterialParameters +syn keyword glslType gl_LightSourceParameters gl_LightModelParameters gl_LightModelProducts +syn keyword glslType gl_LightProducts gl_FogParameters + +" constants +syn keyword glslConstant gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttribs +syn keyword glslConstant gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits +syn keyword glslConstant gl_MaxCombinedTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents +syn keyword glslConstant gl_MaxDrawBuffers + +" swizzling +syn match glslSwizzle /\.[xyzw]\{1,4\}\>/ +syn match glslSwizzle /\.[rgba]\{1,4\}\>/ +syn match glslSwizzle /\.[stpq]\{1,4\}\>/ + +" built in functions +syn keyword glslFunc radians degrees sin cos tan asin acos atan pow exp2 log2 sqrt inversesqrt +syn keyword glslFunc abs sign floor ceil fract mod min max clamp mix step smoothstep +syn keyword glslFunc length distance dot cross normalize ftransform faceforward reflect +syn keyword glslFunc matrixcompmult lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not +syn keyword glslFunc texture1D texture1DProj texture1DLod texture1DProjLod +syn keyword glslFunc texture2D texture2DProj texture2DLod texture2DProjLod +syn keyword glslFunc texture3D texture3DProj texture3DLod texture3DProjLod +syn keyword glslFunc textureCube textureCubeLod +syn keyword glslFunc shadow1D shadow1DProj shadow1DLod shadow1DProjLod +syn keyword glslFunc shadow2D shadow2DProj shadow2DLod shadow2DProjLod +syn keyword glslFunc dFdx dFdy fwidth noise1 noise2 noise3 noise4 +syn keyword glslFunc refract exp log + +" highlight unsupported keywords +syn keyword glslUnsupported asm +syn keyword glslUnsupported class union enum typedef template this packed +syn keyword glslUnsupported goto switch default +syn keyword glslUnsupported inline noinline volatile public static extern external interface +syn keyword glslUnsupported long short double half fixed unsigned +syn keyword glslUnsupported input output +syn keyword glslUnsupported hvec2 hvec3 hvec4 dvec2 dvec3 dvec4 fvec2 fvec3 fvec4 +syn keyword glslUnsupported sampler2DRect sampler3DRect sampler2DRectShadow +syn keyword glslUnsupported sizeof cast +syn keyword glslUnsupported namespace using + +"wtf? +"let b:c_minlines = 50 " #if 0 constructs can be long +"exec "syn sync ccomment glslComment minlines=" . b:c_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_glsl_syn_inits") + if version < 508 + let did_glsl_syn_inits = 1 + command -nargs=+ HiLink hi link + else + command -nargs=+ HiLink hi def link + endif + + HiLink glslFormat glslSpecial + HiLink glslCppString glslString + HiLink glslCommentL glslComment + HiLink glslCommentStart glslComment + HiLink glslLabel Label + HiLink glslUserLabel Label + HiLink glslConditional Conditional + HiLink glslRepeat Repeat + HiLink glslCharacter Character + HiLink glslSpecialCharacter glslSpecial + HiLink glslNumber Number + HiLink glslOctal Number + HiLink glslOctalZero PreProc " link this to Error if you want + HiLink glslFloat Float + HiLink glslOctalError glslError + HiLink glslParenError glslError + HiLink glslErrInParen glslError + HiLink glslErrInBracket glslError + HiLink glslCommentError glslError + HiLink glslCommentStartError glslError + HiLink glslSpaceError glslError + HiLink glslSpecialError glslError + HiLink glslOperator Operator + HiLink glslStructure Structure + HiLink glslStorageClass StorageClass + HiLink glslInclude Include + HiLink glslPreProc PreProc + HiLink glslDefine Macro + HiLink glslIncluded glslString + HiLink glslError Error + HiLink glslStatement Statement + HiLink glslPreCondit PreCondit + HiLink glslType Type + HiLink glslConstant Constant + HiLink glslCommentString glslString + HiLink glslComment2String glslString + HiLink glslCommentSkip glslComment + HiLink glslString String + HiLink glslComment Comment + HiLink glslSpecial SpecialChar + HiLink glslSwizzle SpecialChar + HiLink glslTodo Todo + HiLink glslCppSkip glslCppOut + HiLink glslCppOut2 glslCppOut + HiLink glslCppOut Comment + HiLink glslUniform glslType + HiLink glslState glslType + HiLink glslFunc glslStatement + HiLink glslUnsupported glslError + + delcommand HiLink +endif + +let b:current_syntax = "glsl" + +" vim: ts=8 diff --git a/syntax/glsl330.vim b/syntax/glsl330.vim new file mode 100644 index 0000000..43dd3b6 --- /dev/null +++ b/syntax/glsl330.vim @@ -0,0 +1,313 @@ +" Vim syntax file the OpenGL Shading Language +" Language: GLSL 400 +" Author: Kamil Patelczyk +" Date: July 17, 2010 +" File Types: .glsl +" Version: 1 +" Notes: Adapted from c.vim - Bram Moolenaar +" Adapted from cg.vim - Kevin Bjorke +" Adapted from glsl.vim - Nathan Cournia + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +" glslCommentGroup allows adding matches for special things in comments +syn cluster glslCommentGroup contains=glslTodo + +"catch errors caused by wrong parenthesis and brackets +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 +if exists("c_no_bracket_error") + syn region glslParen transparent start='(' end=')' contains=ALLBUT,@glslParenGroup,glslCppParen,glslCppString + " glslCppParen: same as glslParen but ends at end-of-line; used in glslDefine + syn region glslCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@glslParenGroup,glslParen,glslString + syn match glslParenError display ")" + syn match glslErrInParen display contained "[{}]" +else + syn region glslParen transparent start='(' end=')' contains=ALLBUT,@glslParenGroup,glslCppParen,glslErrInBracket,glslCppBracket,glslCppString + " glslCppParen: same as glslParen but ends at end-of-line; used in glslDefine + syn region glslCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@glslParenGroup,glslErrInBracket,glslParen,glslBracket,glslString + syn match glslParenError display "[\])]" + syn match glslErrInParen display contained "[\]{}]" + syn region glslBracket transparent start='\[' end=']' contains=ALLBUT,@glslParenGroup,glslErrInParen,glslCppParen,glslCppBracket,glslCppString + " glslCppBracket: same as glslParen but ends at end-of-line; used in glslDefine + syn region glslCppBracket transparent start='\[' skip='\\$' excludenl end=']' end='$' contained contains=ALLBUT,@glslParenGroup,glslErrInParen,glslParen,glslBracket,glslString + syn match glslErrInBracket display contained "[);{}]" +endif + +"integer number, or floating point number without a dot and with "f". +syn case ignore +syn match glslNumbers display transparent "\<\d\|\.\d" contains=glslNumber,glslFloat,glslOctalError,glslOctal +" Same, but without octal error (for comments) +syn match glslNumbersCom display contained transparent "\<\d\|\.\d" contains=glslNumber,glslFloat,glslOctal +syn match glslNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>" +"hex number +syn match glslNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>" +" Flag the first zero of an octal number as something special +syn match glslOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=glslOctalZero +syn match glslOctalZero display contained "\<0" +syn match glslFloat display contained "\d\+f" +"floating point number, with dot, optional exponent +syn match glslFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=" +"floating point number, starting with a dot, optional exponent +syn match glslFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, without dot, with exponent +syn match glslFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>" +" flag an octal number with wrong digits +syn match glslOctalError display contained "0\o*[89]\d*" +syn case match + +if exists("c_comment_strings") + " A comment can contain glslString, glslCharacter and glslNumber. + " But a "*/" inside a glslString in a glslComment DOES end the comment! So we + " need to use a special type of glslString: glslCommentString, which also ends on + " "*/", and sees a "*" at the start of the line as glslomment again. + " Unfortunately this doesn't very well work for // type of comments :-( + syntax match glslCommentSkip contained "^\s*\*\($\|\s\+\)" + syntax region glslCommentString contained start=+L\=\\\@" skip="\\$" end="$" end="//"me=s-1 contains=glslComment,glslCppString,glslCharacter,glslCppParen,glslParenError,glslNumbers,glslCommentError,glslSpaceError +syn match glslPreCondit display "^\s*#\s*\(else\|endif\)\>" +syn region glslCppOut start="^\s*#\s*if\s\+0\+\>" end=".\|$" contains=glslCppOut2 +syn region glslCppOut2 contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=glslSpaceError,glslCppSkip +syn region glslCppSkip contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=glslSpaceError,glslCppSkip +"syn match glslLineSkip "\\$" +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 +syn region glslDefine start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@glslPreProglslGroup +syn region glslPreProc start="^\s*#\s*\(pragma\>\|line\>\|error\>\|version\>\|extension\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@glslPreProglslGroup + +" Highlight User Labels +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 +syn region glslMulti transparent start='?' skip='::' end=':' contains=ALLBUT,@glslMultiGroup +" Avoid matching foo::bar() in C++ by requiring that the next char is not ':' +syn cluster glslLabelGroup contains=glslUserLabel +syn match glslUserCont display "^\s*\I\i*\s*:$" contains=@glslLabelGroup +syn match glslUserCont display ";\s*\I\i*\s*:$" contains=@glslLabelGroup +syn match glslUserCont display "^\s*\I\i*\s*:[^:]"me=e-1 contains=@glslLabelGroup +syn match glslUserCont display ";\s*\I\i*\s*:[^:]"me=e-1 contains=@glslLabelGroup + +syn match glslUserLabel display "\I\i*" contained + +" Avoid recognizing most bitfields as labels +syn match glslBitField display "^\s*\I\i*\s*:\s*[1-9]"me=e-1 +syn match glslBitField display ";\s*\I\i*\s*:\s*[1-9]"me=e-1 + + +" Keywords and simple stuff +syn keyword glslTodo contained TODO FIXME XXX + +syn keyword glslStorageClass const uniform +syn keyword glslStorageClass in out inout +syn keyword glslStorageClass centroid flat smooth noperspective +syn keyword glslStorageClass lowp mediump highp precision +syn keyword glslStorageClass invariant + +syn match glslLayout /\/ +syn match glslSwizzle /\.[rgba]\{1,4\}\>/ +syn match glslSwizzle /\.[stpq]\{1,4\}\>/ + +" Builtin variables +syn keyword glslState gl_FragCoord gl_FrontFacing gl_PointCoord gl_FragDepth +syn keyword glslState gl_VertexID gl_InstanceID gl_Position gl_PointSize +syn keyword glslState gl_PrimitiveIDIn gl_PrimitiveID gl_Layer +syn keyword glslState gl_ClipDistance gl_in + +syn keyword glslStateDeprec gl_FragColor gl_FragData gl_TexCoord +syn keyword glslStateDeprec gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_FogFragCoord +syn keyword glslStateDeprec gl_Color gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 +syn keyword glslStateDeprec gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord + +" Uniforms variables +syn keyword glslUniform gl_DepthRange + +syn keyword glslUniformDeprec gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_NormalMatrix gl_NormalScale +syn keyword glslUniformDeprec gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse +syn keyword glslUniformDeprec gl_ModelViewMatrixTranspose gl_ProjectionMatrixTranspose gl_ModelViewProjectionMatrixTranspose +syn keyword glslUniformDeprec gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose +syn keyword glslUniformDeprec gl_Point gl_FrontMaterial gl_BackMaterial gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_Fog +syn keyword glslUniformDeprec gl_BackLightProduct gl_ClipPlane gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT +syn keyword glslUniformDeprec gl_FrontLightProduct gl_LightSource gl_ObjectPlaneQ gl_ObjectPlaneR gl_ObjectPlaneS +syn keyword glslUniformDeprec gl_ObjectPlaneT gl_TextureEnvColor gl_TextureMatrixInverseTranspose gl_TextureMatrixInverse +syn keyword glslUniformDeprec gl_TextureMatrixTranspose gl_TextureMatrix + +" Builtin constants +syn keyword glslConstant gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVertexOutputComponents gl_MaxGeometryInputComponents +syn keyword glslConstant gl_MaxGeometryOutputComponents gl_MaxFragmentInputComponents gl_MaxVertexTextureImageUnits +syn keyword glslConstant gl_MaxCombinedTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxDrawBuffers +syn keyword glslConstant gl_MaxClipDistances gl_MaxGeometryTextureImageUnits gl_MaxGeometryOutputVertices gl_MaxGeometryTotalOutputComponents +syn keyword glslConstant gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents + +syn keyword glslConstantDeprec gl_MaxVaryingFloats gl_MaxVaryingComponents +syn keyword glslConstantDeprec gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxClipPlanes + +" Built in functions +syn keyword glslFunc abs acos acosh asin asinh atan atanh ceil cos cosh degrees exp exp2 floor fract inversesqrt log +syn keyword glslFunc log2 max min mod modf pow radians round roundEven sign sin sinh sqrt tan tanh trunc +syn keyword glslFunc clamp cross distance dot floatBitsToInt floatBitsToUint intBitsToFloat isinf isnan +syn keyword glslFunc length mix normalize smoothstep step +syn keyword glslFunc all any determinant equal faceforward +syn keyword glslFunc greaterThan greaterThanEqual imulExtended inverse lessThan lessThanEqual matrixCompMult +syn keyword glslFunc not notEqual outerProduct reflect refract transpose +syn keyword glslFunc textureSize texture textureProj textureLod textureOffset texelFetch texelFetchOffset +syn keyword glslFunc textureProjOffset textureLodOffset textureProjLod textureProjLodOffset textureGrad textureGradOffset +syn keyword glslFunc textureProjGrad textureProjGradOffset +syn keyword glslFunc dFdx dFdy fwidth +syn keyword glslFunc noise1 noise2 noise3 noise4 +syn keyword glslFunc EmitVertex EndPrimitive + +syn keyword glslFuncDeprec ftransform +syn keyword glslFuncDeprec texture1D texture1DProj texture1DProj texture1DLod texture1DProjLod texture1DProjLod texture2D +syn keyword glslFuncDeprec texture2DProj texture2DProj texture2DLod texture2DProjLod texture2DProjLod texture3D texture3DProj +syn keyword glslFuncDeprec texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj +syn keyword glslFuncDeprec shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod + + +" Highlight unsupported keywords +syn keyword glslUnsupported asm +syn keyword glslUnsupported class union enum typedef template this packed +syn keyword glslUnsupported common partition active +syn keyword glslUnsupported filter +syn keyword glslUnsupported goto +syn keyword glslUnsupported hvec2 hvec3 hvec4 fvec2 fvec3 fvec4 +syn keyword glslUnsupported iimage1D iimage2D iimage3D iimageCube +syn keyword glslUnsupported iimage1DArray iimage2DArray uimage1DArray uimage2DArray +syn keyword glslUnsupported image1D image2D image3D imageCube +syn keyword glslUnsupported image1DArray image2DArray +syn keyword glslUnsupported image1DArrayShadow image2DArrayShadow +syn keyword glslUnsupported image1DShadow image2DShadow +syn keyword glslUnsupported imageBuffer iimageBuffer uimageBuffer +syn keyword glslUnsupported inline noinline volatile public static extern external interface +syn keyword glslUnsupported input output +syn keyword glslUnsupported long short half fixed unsigned superp +syn keyword glslUnsupported namespace using +syn keyword glslUnsupported sampler3DRect +syn keyword glslUnsupported sizeof cast +syn keyword glslUnsupported uimage1D uimage2D uimage3D uimageCube +syn keyword glslUnsupported double dvec2 dvec3 dvec4 + +" 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_glsl_syn_inits") + if version < 508 + let did_glsl_syn_inits = 1 + command -nargs=+ HiLink hi link + else + command -nargs=+ HiLink hi def link + endif + + HiLink glslCharacter Character + HiLink glslComment Comment + HiLink glslComment2String glslString + HiLink glslCommentError glslError + HiLink glslCommentL glslComment + HiLink glslCommentSkip glslComment + HiLink glslCommentStart glslComment + HiLink glslCommentStartError glslError + HiLink glslCommentString glslString + HiLink glslCppOut Comment + HiLink glslCppOut2 glslCppOut + HiLink glslCppSkip glslCppOut + HiLink glslCppString glslString + HiLink glslDefine Macro + HiLink glslErrInBracket glslError + HiLink glslErrInParen glslError + HiLink glslError Error + HiLink glslFloat Float + HiLink glslFormat glslSpecial + HiLink glslInclude Include + HiLink glslIncluded glslString + HiLink glslNumber Number + HiLink glslOctal Number + HiLink glslOctalError glslError + HiLink glslOctalZero PreProc + HiLink glslOperator Operator + HiLink glslParenError glslError + HiLink glslPreCondit PreCondit + HiLink glslPreProc PreProc + HiLink glslSpaceError glslError + HiLink glslSpecial SpecialChar + HiLink glslSpecialCharacter glslSpecial + HiLink glslSpecialError glslError + HiLink glslString String + + HiLink glslConditional Conditional + HiLink glslConstant Constant + HiLink glslFunc glslStatement + HiLink glslFuncDeprec WarningMsg + HiLink glslLabel Label + HiLink glslLayoutQual glslFunc + HiLink glslRepeat Repeat + HiLink glslState glslType + HiLink glslStateDeprec WarningMsg + HiLink glslStatement Statement + HiLink glslStorageClass StorageClass + HiLink glslLayout StorageClass + HiLink glslStorageClassDeprec WarningMsg + HiLink glslStructure Structure + HiLink glslSwizzle SpecialChar + HiLink glslTodo Todo + HiLink glslType Type + HiLink glslUniform glslType + HiLink glslUniformDeprec WarningMsg + HiLink glslUnsupported glslError + HiLink glslUserLabel Label + + delcommand HiLink +endif + +let b:current_syntax = "glsl330" diff --git a/syntax/glsl400.vim b/syntax/glsl400.vim new file mode 100644 index 0000000..c1bf750 --- /dev/null +++ b/syntax/glsl400.vim @@ -0,0 +1,319 @@ +" Vim syntax file the OpenGL Shading Language +" Language: GLSL 400 +" Author: Kamil Patelczyk +" Date: July 17, 2010 +" File Types: .glsl +" Version: 1 +" Notes: Adapted from c.vim - Bram Moolenaar +" Adapted from cg.vim - Kevin Bjorke +" Adapted from glsl.vim - Nathan Cournia + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +" glslCommentGroup allows adding matches for special things in comments +syn cluster glslCommentGroup contains=glslTodo + +"catch errors caused by wrong parenthesis and brackets +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 +if exists("c_no_bracket_error") + syn region glslParen transparent start='(' end=')' contains=ALLBUT,@glslParenGroup,glslCppParen,glslCppString + " glslCppParen: same as glslParen but ends at end-of-line; used in glslDefine + syn region glslCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@glslParenGroup,glslParen,glslString + syn match glslParenError display ")" + syn match glslErrInParen display contained "[{}]" +else + syn region glslParen transparent start='(' end=')' contains=ALLBUT,@glslParenGroup,glslCppParen,glslErrInBracket,glslCppBracket,glslCppString + " glslCppParen: same as glslParen but ends at end-of-line; used in glslDefine + syn region glslCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@glslParenGroup,glslErrInBracket,glslParen,glslBracket,glslString + syn match glslParenError display "[\])]" + syn match glslErrInParen display contained "[\]{}]" + syn region glslBracket transparent start='\[' end=']' contains=ALLBUT,@glslParenGroup,glslErrInParen,glslCppParen,glslCppBracket,glslCppString + " glslCppBracket: same as glslParen but ends at end-of-line; used in glslDefine + syn region glslCppBracket transparent start='\[' skip='\\$' excludenl end=']' end='$' contained contains=ALLBUT,@glslParenGroup,glslErrInParen,glslParen,glslBracket,glslString + syn match glslErrInBracket display contained "[);{}]" +endif + +"integer number, or floating point number without a dot and with "f". +syn case ignore +syn match glslNumbers display transparent "\<\d\|\.\d" contains=glslNumber,glslFloat,glslOctalError,glslOctal +" Same, but without octal error (for comments) +syn match glslNumbersCom display contained transparent "\<\d\|\.\d" contains=glslNumber,glslFloat,glslOctal +syn match glslNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>" +"hex number +syn match glslNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>" +" Flag the first zero of an octal number as something special +syn match glslOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=glslOctalZero +syn match glslOctalZero display contained "\<0" +syn match glslFloat display contained "\d\+f" +"floating point number, with dot, optional exponent +syn match glslFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=" +"floating point number, starting with a dot, optional exponent +syn match glslFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" +"floating point number, without dot, with exponent +syn match glslFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>" +" flag an octal number with wrong digits +syn match glslOctalError display contained "0\o*[89]\d*" +syn case match + +if exists("c_comment_strings") + " A comment can contain glslString, glslCharacter and glslNumber. + " But a "*/" inside a glslString in a glslComment DOES end the comment! So we + " need to use a special type of glslString: glslCommentString, which also ends on + " "*/", and sees a "*" at the start of the line as glslomment again. + " Unfortunately this doesn't very well work for // type of comments :-( + syntax match glslCommentSkip contained "^\s*\*\($\|\s\+\)" + syntax region glslCommentString contained start=+L\=\\\@" skip="\\$" end="$" end="//"me=s-1 contains=glslComment,glslCppString,glslCharacter,glslCppParen,glslParenError,glslNumbers,glslCommentError,glslSpaceError +syn match glslPreCondit display "^\s*#\s*\(else\|endif\)\>" +syn region glslCppOut start="^\s*#\s*if\s\+0\+\>" end=".\|$" contains=glslCppOut2 +syn region glslCppOut2 contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=glslSpaceError,glslCppSkip +syn region glslCppSkip contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=glslSpaceError,glslCppSkip +"syn match glslLineSkip "\\$" +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 +syn region glslDefine start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@glslPreProglslGroup +syn region glslPreProc start="^\s*#\s*\(pragma\>\|line\>\|error\>\|version\>\|extension\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@glslPreProglslGroup + +" Highlight User Labels +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 +syn region glslMulti transparent start='?' skip='::' end=':' contains=ALLBUT,@glslMultiGroup +" Avoid matching foo::bar() in C++ by requiring that the next char is not ':' +syn cluster glslLabelGroup contains=glslUserLabel +syn match glslUserCont display "^\s*\I\i*\s*:$" contains=@glslLabelGroup +syn match glslUserCont display ";\s*\I\i*\s*:$" contains=@glslLabelGroup +syn match glslUserCont display "^\s*\I\i*\s*:[^:]"me=e-1 contains=@glslLabelGroup +syn match glslUserCont display ";\s*\I\i*\s*:[^:]"me=e-1 contains=@glslLabelGroup + +syn match glslUserLabel display "\I\i*" contained + +" Avoid recognizing most bitfields as labels +syn match glslBitField display "^\s*\I\i*\s*:\s*[1-9]"me=e-1 +syn match glslBitField display ";\s*\I\i*\s*:\s*[1-9]"me=e-1 + + +" Keywords and simple stuff +syn keyword glslTodo contained TODO FIXME XXX + +syn keyword glslStorageClass const uniform +syn keyword glslStorageClass in out inout +syn keyword glslStorageClass patch sample +syn keyword glslStorageClass centroid flat smooth noperspective +syn keyword glslStorageClass lowp mediump highp precision +syn keyword glslStorageClass invariant +syn keyword glslStorageClass subroutine + +syn match glslLayout /\/ +syn match glslSwizzle /\.[rgba]\{1,4\}\>/ +syn match glslSwizzle /\.[stpq]\{1,4\}\>/ + +" Builtin variables +syn keyword glslState gl_FragCoord gl_FrontFacing gl_PointCoord gl_SampleID gl_SamplePosition gl_FragDepth +syn keyword glslState gl_VertexID gl_InstanceID gl_Position gl_PointSize +syn keyword glslState gl_PrimitiveIDIn gl_InvocationID gl_PrimitiveID gl_Layer +syn keyword glslState gl_ClipDistance gl_in gl_SampleMask + +syn keyword glslStateDeprec gl_FragColor gl_FragData gl_TexCoord +syn keyword glslStateDeprec gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_FogFragCoord +syn keyword glslStateDeprec gl_Color gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 +syn keyword glslStateDeprec gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord + +" Uniforms variables +syn keyword glslUniform gl_DepthRange + +syn keyword glslUniformDeprec gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_NormalMatrix gl_NormalScale +syn keyword glslUniformDeprec gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse +syn keyword glslUniformDeprec gl_ModelViewMatrixTranspose gl_ProjectionMatrixTranspose gl_ModelViewProjectionMatrixTranspose +syn keyword glslUniformDeprec gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose +syn keyword glslUniformDeprec gl_Point gl_FrontMaterial gl_BackMaterial gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_Fog +syn keyword glslUniformDeprec gl_BackLightProduct gl_ClipPlane gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT +syn keyword glslUniformDeprec gl_FrontLightProduct gl_LightSource gl_ObjectPlaneQ gl_ObjectPlaneR gl_ObjectPlaneS +syn keyword glslUniformDeprec gl_ObjectPlaneT gl_TextureEnvColor gl_TextureMatrixInverseTranspose gl_TextureMatrixInverse +syn keyword glslUniformDeprec gl_TextureMatrixTranspose gl_TextureMatrix + +" Builtin constants +syn keyword glslConstant gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVertexOutputComponents gl_MaxGeometryInputComponents +syn keyword glslConstant gl_MaxGeometryOutputComponents gl_MaxFragmentInputComponents gl_MaxVertexTextureImageUnits +syn keyword glslConstant gl_MaxCombinedTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxDrawBuffers +syn keyword glslConstant gl_MaxClipDistances gl_MaxGeometryTextureImageUnits gl_MaxGeometryOutputVertices gl_MaxGeometryTotalOutputComponents +syn keyword glslConstant gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents gl_MaxTessControlInputComponents gl_MaxTessControlOutputComponents +syn keyword glslConstant gl_MaxTessControlTextureImageUnits gl_MaxTessControlUniformComponents gl_MaxTessControlTotalOutputComponents +syn keyword glslConstant gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents gl_MaxTessEvaluationTextureImageUnits +syn keyword glslConstant gl_MaxTessEvaluationUniformComponents gl_MaxTessPatchComponents gl_MaxPatchVertices gl_MaxTessGenLevel + +syn keyword glslConstantDeprec gl_MaxVaryingFloats gl_MaxVaryingComponents +syn keyword glslConstantDeprec gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxClipPlanes + +" Built in functions +syn keyword glslFunc abs acos acosh asin asinh atan atanh ceil cos cosh degrees exp exp2 floor fract inversesqrt log +syn keyword glslFunc log2 max min mod modf pow radians round roundEven sign sin sinh sqrt tan tanh trunc +syn keyword glslFunc clamp cross distance dot floatBitsToInt floatBitsToUint fma frexp intBitsToFloat isinf isnan +syn keyword glslFunc ldexp length mix normalize packDouble2x32 packSnorm4x8 packUnorm2x16 packUnorm4x8 smoothstep step +syn keyword glslFunc uintBitsToFloat unpackDouble2x32 unpackSnorm4x8 unpackUnorm2x16 unpackUnorm4x8 +syn keyword glslFunc all any bitCount bitfieldExtract bitfieldInsert bitfieldReverse determinant equal faceforward +syn keyword glslFunc findLSB findMSB greaterThan greaterThanEqual imulExtended inverse lessThan lessThanEqual matrixCompMult +syn keyword glslFunc not notEqual outerProduct reflect refract transpose uaddCarry umulExtended usubBorrow +syn keyword glslFunc textureSize textureQueryLod texture textureProj textureLod textureOffset texelFetch texelFetchOffset +syn keyword glslFunc textureProjOffset textureLodOffset textureProjLod textureProjLodOffset textureGrad textureGradOffset +syn keyword glslFunc textureProjGrad textureProjGradOffset textureGather textureGatherOffset textureGatherOffsets +syn keyword glslFunc dFdx dFdy fwidth interpolateAtCentroid interpolateAtOffset interpolateAtSample +syn keyword glslFunc noise1 noise2 noise3 noise4 +syn keyword glslFunc EmitStreamVertex EndStreamPrimitive EmitVertex EndPrimitive barrier + +syn keyword glslFuncDeprec ftransform +syn keyword glslFuncDeprec texture1D texture1DProj texture1DProj texture1DLod texture1DProjLod texture1DProjLod texture2D +syn keyword glslFuncDeprec texture2DProj texture2DProj texture2DLod texture2DProjLod texture2DProjLod texture3D texture3DProj +syn keyword glslFuncDeprec texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj +syn keyword glslFuncDeprec shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod + + +" Highlight unsupported keywords +syn keyword glslUnsupported asm +syn keyword glslUnsupported class union enum typedef template this packed +syn keyword glslUnsupported common partition active +syn keyword glslUnsupported filter +syn keyword glslUnsupported goto +syn keyword glslUnsupported hvec2 hvec3 hvec4 fvec2 fvec3 fvec4 +syn keyword glslUnsupported iimage1D iimage2D iimage3D iimageCube +syn keyword glslUnsupported iimage1DArray iimage2DArray uimage1DArray uimage2DArray +syn keyword glslUnsupported image1D image2D image3D imageCube +syn keyword glslUnsupported image1DArray image2DArray +syn keyword glslUnsupported image1DArrayShadow image2DArrayShadow +syn keyword glslUnsupported image1DShadow image2DShadow +syn keyword glslUnsupported imageBuffer iimageBuffer uimageBuffer +syn keyword glslUnsupported inline noinline volatile public static extern external interface +syn keyword glslUnsupported input output +syn keyword glslUnsupported long short half fixed unsigned superp +syn keyword glslUnsupported namespace using +syn keyword glslUnsupported sampler3DRect +syn keyword glslUnsupported sizeof cast +syn keyword glslUnsupported uimage1D uimage2D uimage3D uimageCube + +" 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_glsl_syn_inits") + if version < 508 + let did_glsl_syn_inits = 1 + command -nargs=+ HiLink hi link + else + command -nargs=+ HiLink hi def link + endif + + HiLink glslCharacter Character + HiLink glslComment Comment + HiLink glslComment2String glslString + HiLink glslCommentError glslError + HiLink glslCommentL glslComment + HiLink glslCommentSkip glslComment + HiLink glslCommentStart glslComment + HiLink glslCommentStartError glslError + HiLink glslCommentString glslString + HiLink glslCppOut Comment + HiLink glslCppOut2 glslCppOut + HiLink glslCppSkip glslCppOut + HiLink glslCppString glslString + HiLink glslDefine Macro + HiLink glslErrInBracket glslError + HiLink glslErrInParen glslError + HiLink glslError Error + HiLink glslFloat Float + HiLink glslFormat glslSpecial + HiLink glslInclude Include + HiLink glslIncluded glslString + HiLink glslNumber Number + HiLink glslOctal Number + HiLink glslOctalError glslError + HiLink glslOctalZero PreProc + HiLink glslOperator Operator + HiLink glslParenError glslError + HiLink glslPreCondit PreCondit + HiLink glslPreProc PreProc + HiLink glslSpaceError glslError + HiLink glslSpecial SpecialChar + HiLink glslSpecialCharacter glslSpecial + HiLink glslSpecialError glslError + HiLink glslString String + + HiLink glslConditional Conditional + HiLink glslConstant Constant + HiLink glslFunc glslStatement + HiLink glslFuncDeprec WarningMsg + HiLink glslLabel Label + HiLink glslLayoutQual glslFunc + HiLink glslRepeat Repeat + HiLink glslState glslType + HiLink glslStateDeprec WarningMsg + HiLink glslStatement Statement + HiLink glslStorageClass StorageClass + HiLink glslLayout StorageClass + HiLink glslStorageClassDeprec WarningMsg + HiLink glslStructure Structure + HiLink glslSwizzle SpecialChar + HiLink glslTodo Todo + HiLink glslType Type + HiLink glslUniform glslType + HiLink glslUniformDeprec WarningMsg + HiLink glslUnsupported glslError + HiLink glslUserLabel Label + + delcommand HiLink +endif + +let b:current_syntax = "glsl400" diff --git a/vimrc b/vimrc index c7772dc..025928c 100644 --- a/vimrc +++ b/vimrc @@ -17,6 +17,8 @@ au BufNewFile,BufRead Makefile.inc set filetype=automake au BufReadPre .skk-uim-jisyo set fileencodings=euc-jp +au BufNewFile,BufRead *.frag,*.vert,*.fp,*.vp,*.glsl set filetype=glsl + if $TERM == "rxvt-unicode" set t_Co=256 endif -- 2.43.2