| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- " Vim syntax file the OpenGL Shading Language
- " Language: GLSL
- " Author: Nathan Cournia <nathan@cournia.com>
- " Date: June 30, 2004
- " File Types: .frag .vert .glsl .fp .vp
- " Version: 1.10.00
- " Notes: Adapted from c.vim - Bram Moolenaar <bram.vim.org>
- " Adapted from cg.vim - Kevin Bjorke <kbjorke@nvidia.com>
- " 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=glslSpecial,glslCommentSkip
- syntax region glslComment2String contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=glslSpecial
- syntax region glslCommentL start="//" skip="\\$" end="$" keepend contains=@glslCommentGroup,glslComment2String,glslCharacter,glslNumbersCom,glslSpaceError
- syntax region glslComment matchgroup=glslCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@glslCommentGroup,glslCommentStartError,glslCommentString,glslCharacter,glslNumbersCom,glslSpaceError
- else
- syn region glslCommentL start="//" skip="\\$" end="$" keepend contains=@glslCommentGroup,glslSpaceError
- syn region glslComment matchgroup=glslCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@glslCommentGroup,glslCommentStartError,glslSpaceError
- endif
- " keep a // comment separately, it terminates a preproc. conditional
- syntax match glslCommentError display "\*/"
- syntax match glslCommentStartError display "/\*"me=e-1 contained
- syn keyword glslType void
- syn keyword glslType bool bvec2 bvec3 bvec4
- syn keyword glslType int ivec2 ivec3 ivec4
- syn keyword glslType float vec2 vec3 vec4
- syn keyword glslType mat2 mat3 mat4
- syn keyword glslType sampler1D sampler2D sampler3D samplerCUBE sampler1DShadow sampler2DShadow
- syn keyword glslStructure struct
- syn keyword glslStorageClass const attribute varying uniform
- syn keyword glslStorageClass in out inout
- syn keyword glslConstant __LINE__ __FILE__ __VERSION__
- syn keyword glslConstant true false
- 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
- 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 <args>
- else
- command -nargs=+ HiLink hi def link <args>
- 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
|