322 lines
22 KiB
VimL
322 lines
22 KiB
VimL
" Vim syntax file the OpenGL Shading Language
|
|
" Language: Doom GLSL Shader
|
|
" Author: PROPHESSOR <xenteze@gmail.com>
|
|
" File Types: .glsl
|
|
" Version: 1
|
|
" Notes: Adapted from c.vim - Bram Moolenaar <bram.vim.org>
|
|
" Adapted from cg.vim - Kevin Bjorke <kbjorke@nvidia.com>
|
|
" Adapted from glsl.vim - Nathan Cournia <nathan@cournia.com>
|
|
" Adapted from glsl330.vim - Kamil Patelczyk <patelczyk@gmail.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
|
|
|
|
" 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,@Spell
|
|
" 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,@Spell
|
|
syn match glslParenError display ")"
|
|
syn match glslErrInParen display contained "[{}]"
|
|
else
|
|
syn region glslParen transparent start='(' end=')' contains=ALLBUT,@glslParenGroup,glslCppParen,glslErrInBracket,glslCppBracket,glslCppString,@Spell
|
|
" 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,@Spell
|
|
syn match glslParenError display "[\])]"
|
|
syn match glslErrInParen display contained "[\]{}]"
|
|
syn region glslBracket transparent start='\[' end=']' contains=ALLBUT,@glslParenGroup,glslErrInParen,glslCppParen,glslCppBracket,glslCppString,@Spell
|
|
" 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,@Spell
|
|
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,@Spell
|
|
syntax region glslComment matchgroup=glslCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@glslCommentGroup,glslCommentStartError,glslCommentString,glslCharacter,glslNumbersCom,glslSpaceError,@Spell
|
|
else
|
|
syn region glslCommentL start="//" skip="\\$" end="$" keepend contains=@glslCommentGroup,glslSpaceError,@Spell
|
|
syn region glslComment matchgroup=glslCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@glslCommentGroup,glslCommentStartError,glslSpaceError,@Spell
|
|
endif
|
|
" keep a // comment separately, it terminates a preproc. conditional
|
|
syntax match glslCommentError display "\*/"
|
|
syntax match glslCommentStartError display "/\*"me=e-1 contained
|
|
|
|
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,@Spell
|
|
syn region glslPreProc start="^\s*#\s*\(pragma\>\|line\>\|error\>\|version\>\|extension\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@glslPreProglslGroup,@Spell
|
|
|
|
" 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,@Spell
|
|
" 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 keyword glslDoomPredefined InputTexture FragColor TexCoord
|
|
|
|
syn match glslLayout /\<layout\s*(\_.\{-})/hs=s,he=s+6 contains=glslLayoutQual,glslNumber
|
|
|
|
syn keyword glslStorageClassDeprec attribute varying
|
|
|
|
syn keyword glslLayoutQual contained shared packed std140 row_major column_major
|
|
syn keyword glslLayoutQual contained index line_strip lines lines_adjacency location
|
|
syn keyword glslLayoutQual contained max_vertices origin_upper_left pixel_center_integer points
|
|
syn keyword glslLayoutQual contained triangle_strip triangles triangles_adjacency
|
|
|
|
syn keyword glslStatement break continue discard return
|
|
syn keyword glslRepeat while for do
|
|
syn keyword glslConditional if else switch
|
|
syn keyword glslLabel case default
|
|
|
|
syn keyword glslConstant true false
|
|
syn keyword glslConstant __LINE__ __FILE__ __VERSION__
|
|
|
|
syn keyword glslType uint uvec2 uvec3 uvec4
|
|
syn keyword glslType float int void bool
|
|
syn keyword glslType mat2 mat3 mat4
|
|
syn keyword glslType mat2x2 mat2x3 mat2x4
|
|
syn keyword glslType mat3x2 mat3x3 mat3x4
|
|
syn keyword glslType mat4x2 mat4x3 mat4x4
|
|
syn keyword glslType vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4
|
|
syn keyword glslType sampler1D sampler2D sampler3D samplerCube
|
|
syn keyword glslType sampler1DShadow sampler2DShadow samplerCubeShadow
|
|
syn keyword glslType sampler1DArray sampler2DArray
|
|
syn keyword glslType sampler1DArrayShadow sampler2DArrayShadow
|
|
syn keyword glslType isampler1D isampler2D isampler3D isamplerCube
|
|
syn keyword glslType isampler1DArray isampler2DArray
|
|
syn keyword glslType usampler1D usampler2D usampler3D usamplerCube
|
|
syn keyword glslType usampler1DArray usampler2DArray
|
|
syn keyword glslType sampler2DRect sampler2DRectShadow isampler2DRect usampler2DRect
|
|
syn keyword glslType samplerBuffer isamplerBuffer usamplerBuffer
|
|
syn keyword glslType sampler2DMS isampler2DMS usampler2DMS
|
|
syn keyword glslType sampler2DMSArray isampler2DMSArray usampler2DMSArray
|
|
|
|
syn keyword glslStructure struct
|
|
|
|
" Swizzling
|
|
syn match glslSwizzle /\.[xyzw]\{1,4\}\>/
|
|
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 gl_ViewportIndex
|
|
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 <args>
|
|
else
|
|
command -nargs=+ HiLink hi def link <args>
|
|
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
|
|
|
|
HiLink glslDoomPredefined Identifier
|
|
|
|
delcommand HiLink
|
|
endif
|
|
|
|
let b:current_syntax = "doomshader"
|
|
|
|
" Default file associations
|
|
au BufRead,BufNewFile *.fp set filetype=doomshader
|
|
au BufRead,BufNewFile *.vp set filetype=doomshader
|