# GLSL syntax file

# Authors:
#    Sergey Sharybin <sergey.vfx@gmail.com>
#
# Based on glsl-mode.el from
#    Xavier.Decoret@imag.fr
#    Jim Hourihan <jimhourihan ~at~ gmail.com>

context default

# Types

    keyword whole float yellow
    keyword whole double yellow
    keyword whole int yellow
    keyword whole void yellow
    keyword whole bool yellow
    keyword whole true yellow
    keyword whole false yellow
    keyword whole mat2 yellow
    keyword whole mat3 yellow
    keyword whole mat4 yellow
    keyword whole dmat2 yellow
    keyword whole dmat3 yellow
    keyword whole dmat4 yellow
    keyword whole mat2x2 yellow
    keyword whole mat2x3 yellow
    keyword whole mat2x4 yellow
    keyword whole dmat2x2 yellow
    keyword whole dmat2x3 yellow
    keyword whole dmat2x4 yellow
    keyword whole mat3x2 yellow
    keyword whole mat3x3 yellow
    keyword whole mat3x4 yellow
    keyword whole dmat3x2 yellow
    keyword whole dmat3x3 yellow
    keyword whole dmat3x4 yellow
    keyword whole mat4x2 yellow
    keyword whole mat4x3 yellow
    keyword whole mat4x4 yellow
    keyword whole dmat4x2 yellow
    keyword whole dmat4x3 yellow
    keyword whole dmat4x4 yellow
    keyword whole vec2 yellow
    keyword whole vec3 yellow
    keyword whole vec4 yellow
    keyword whole ivec2 yellow
    keyword whole ivec3 yellow
    keyword whole ivec4 yellow
    keyword whole bvec2 yellow
    keyword whole bvec3 yellow
    keyword whole bvec4 yellow
    keyword whole dvec2 yellow
    keyword whole dvec3 yellow
    keyword whole dvec4 yellow
    keyword whole uint yellow
    keyword whole uvec2 yellow
    keyword whole uvec3 yellow
    keyword whole uvec4 yellow
    keyword whole sampler1D yellow
    keyword whole sampler2D yellow
    keyword whole sampler3D yellow
    keyword whole samplerCube yellow
    keyword whole sampler1DShadow yellow
    keyword whole sampler2DShadow yellow
    keyword whole samplerCubeShadow yellow
    keyword whole sampler1DArray yellow
    keyword whole sampler2DArray yellow
    keyword whole sampler1DArrayShadow yellow
    keyword whole sampler2DArrayShadow yellow
    keyword whole isampler1D yellow
    keyword whole isampler2D yellow
    keyword whole isampler3D yellow
    keyword whole isamplerCube yellow
    keyword whole isampler1DArray yellow
    keyword whole isampler2DArray yellow
    keyword whole usampler1D yellow
    keyword whole usampler2D yellow
    keyword whole usampler3D yellow
    keyword whole usamplerCube yellow
    keyword whole usampler1DArray yellow
    keyword whole usampler2DArray yellow
    keyword whole sampler2DRect yellow
    keyword whole sampler2DRectShadow yellow
    keyword whole isampler2DRect yellow
    keyword whole usampler2DRect yellow
    keyword whole samplerBuffer yellow
    keyword whole isamplerBuffer yellow
    keyword whole usamplerBuffer yellow
    keyword whole sampler2DMS yellow
    keyword whole isampler2DMS yellow
    keyword whole usampler2DMS yellow
    keyword whole sampler2DMSArray yellow
    keyword whole isampler2DMSArray yellow
    keyword whole usampler2DMSArray yellow
    keyword whole samplerCubeArray yellow
    keyword whole samplerCubeArrayShadow yellow
    keyword whole isamplerCubeArray yellow
    keyword whole usamplerCubeArray yellow
    keyword whole image1D yellow
    keyword whole iimage1D yellow
    keyword whole uimage1D yellow
    keyword whole image2D yellow
    keyword whole iimage2D yellow
    keyword whole uimage2D yellow
    keyword whole image3D yellow
    keyword whole iimage3D yellow
    keyword whole uimage3D yellow
    keyword whole image2DRect yellow
    keyword whole iimage2DRect yellow
    keyword whole uimage2DRect yellow
    keyword whole imageCube yellow
    keyword whole iimageCube yellow
    keyword whole uimageCube yellow
    keyword whole imageBuffer yellow
    keyword whole iimageBuffer yellow
    keyword whole uimageBuffer yellow
    keyword whole image1DArray yellow
    keyword whole iimage1DArray yellow
    keyword whole uimage1DArray yellow
    keyword whole image2DArray yellow
    keyword whole iimage2DArray yellow
    keyword whole uimage2DArray yellow
    keyword whole imageCubeArray yellow
    keyword whole iimageCubeArray yellow
    keyword whole uimageCubeArray yellow
    keyword whole image2DMS yellow
    keyword whole iimage2DMS yellow
    keyword whole uimage2DMS yellow
    keyword whole image2DMSArray yellow
    keyword whole iimage2DMSArray yellow
    keyword whole uimage2DMSArray yellow
    keyword whole long yellow
    keyword whole short yellow
    keyword whole half yellow
    keyword whole fixed yellow
    keyword whole unsigned yellow
    keyword whole hvec2 yellow
    keyword whole hvec3 yellow
    keyword whole hvec4 yellow
    keyword whole fvec2 yellow
    keyword whole fvec3 yellow
    keyword whole fvec4 yellow
    keyword whole sampler3DRect yellow

# Modifiers

    keyword whole attribute yellow
    keyword whole const yellow
    keyword whole uniform yellow
    keyword whole varying yellow
    keyword whole buffer yellow
    keyword whole shared yellow
    keyword whole coherent yellow
    keyword whole volatile yellow
    keyword whole restrict yellow
    keyword whole readonly yellow
    keyword whole writeonly yellow
    keyword whole atomic_uint yellow
    keyword whole layout yellow
    keyword whole centroid yellow
    keyword whole flat yellow
    keyword whole smooth yellow
    keyword whole noperspective yellow
    keyword whole patch yellow
    keyword whole sample yellow
    keyword whole break yellow
    keyword whole continue yellow
    keyword whole do yellow
    keyword whole for yellow
    keyword whole while yellow
    keyword whole switch yellow
    keyword whole case yellow
    keyword whole default yellow
    keyword whole if yellow
    keyword whole else yellow
    keyword whole subroutine yellow
    keyword whole in yellow
    keyword whole out yellow
    keyword whole inout yellow
    keyword whole invariant yellow
    keyword whole discard yellow
    keyword whole return yellow
    keyword whole lowp yellow
    keyword whole mediump yellow
    keyword whole highp yellow
    keyword whole precision yellow
    keyword whole struct yellow
    keyword whole common yellow
    keyword whole partition yellow
    keyword whole active yellow
    keyword whole asm yellow
    keyword whole class yellow
    keyword whole union yellow
    keyword whole enum yellow
    keyword whole typedef yellow
    keyword whole template yellow
    keyword whole this yellow
    keyword whole packed yellow
    keyword whole resource yellow
    keyword whole goto yellow
    keyword whole inline yellow
    keyword whole noinline yellow
    keyword whole public yellow
    keyword whole static yellow
    keyword whole extern yellow
    keyword whole external yellow
    keyword whole interface yellow
    keyword whole superp yellow
    keyword whole input yellow
    keyword whole output yellow
    keyword whole filter yellow
    keyword whole sizeof yellow
    keyword whole cast yellow
    keyword whole namespace yellow
    keyword whole using yellow
    keyword whole row_major yellow
    keyword whole early_fragment_tests yellow

# Deprecated
    keyword whole varying brightred
    keyword whole attribute brightred

# Built-in
    keyword whole abs brightmagenta
    keyword whole acos brightmagenta
    keyword whole acosh brightmagenta
    keyword whole all brightmagenta
    keyword whole any brightmagenta
    keyword whole asin brightmagenta
    keyword whole asinh brightmagenta
    keyword whole atan brightmagenta
    keyword whole atanh brightmagenta
    keyword whole atomicCounter brightmagenta
    keyword whole atomicCounterDecrement brightmagenta
    keyword whole atomicCounterIncrement brightmagenta
    keyword whole barrier brightmagenta
    keyword whole bitCount brightmagenta
    keyword whole bitfieldExtract brightmagenta
    keyword whole bitfieldInsert brightmagenta
    keyword whole bitfieldReverse brightmagenta
    keyword whole ceil brightmagenta
    keyword whole clamp brightmagenta
    keyword whole cos brightmagenta
    keyword whole cosh brightmagenta
    keyword whole cross brightmagenta
    keyword whole degrees brightmagenta
    keyword whole determinant brightmagenta
    keyword whole dFdx brightmagenta
    keyword whole dFdy brightmagenta
    keyword whole dFdyFine brightmagenta
    keyword whole dFdxFine brightmagenta
    keyword whole dFdyCoarse brightmagenta
    keyword whole dFdxCourse brightmagenta
    keyword whole fwidthFine brightmagenta
    keyword whole fwidthCoarse brightmagenta
    keyword whole distance brightmagenta
    keyword whole dot brightmagenta
    keyword whole EmitStreamVertex brightmagenta
    keyword whole EmitVertex brightmagenta
    keyword whole EndPrimitive brightmagenta
    keyword whole EndStreamPrimitive brightmagenta
    keyword whole equal brightmagenta
    keyword whole exp brightmagenta
    keyword whole exp2 brightmagenta
    keyword whole faceforward brightmagenta
    keyword whole findLSB brightmagenta
    keyword whole findMSB brightmagenta
    keyword whole floatBitsToInt brightmagenta
    keyword whole floatBitsToUint brightmagenta
    keyword whole floor brightmagenta
    keyword whole fma brightmagenta
    keyword whole fract brightmagenta
    keyword whole frexp brightmagenta
    keyword whole fwidth brightmagenta
    keyword whole greaterThan brightmagenta
    keyword whole greaterThanEqual brightmagenta
    keyword whole imageAtomicAdd brightmagenta
    keyword whole imageAtomicAnd brightmagenta
    keyword whole imageAtomicCompSwap brightmagenta
    keyword whole imageAtomicExchange brightmagenta
    keyword whole imageAtomicMax brightmagenta
    keyword whole imageAtomicMin brightmagenta
    keyword whole imageAtomicOr brightmagenta
    keyword whole imageAtomicXor brightmagenta
    keyword whole imageLoad brightmagenta
    keyword whole imageSize brightmagenta
    keyword whole imageStore brightmagenta
    keyword whole imulExtended brightmagenta
    keyword whole intBitsToFloat brightmagenta
    keyword whole imageSamples brightmagenta
    keyword whole interpolateAtCentroid brightmagenta
    keyword whole interpolateAtOffset brightmagenta
    keyword whole interpolateAtSample brightmagenta
    keyword whole inverse brightmagenta
    keyword whole inversesqrt brightmagenta
    keyword whole isinf brightmagenta
    keyword whole isnan brightmagenta
    keyword whole ldexp brightmagenta
    keyword whole length brightmagenta
    keyword whole lessThan brightmagenta
    keyword whole lessThanEqual brightmagenta
    keyword whole log brightmagenta
    keyword whole log2 brightmagenta
    keyword whole matrixCompMult brightmagenta
    keyword whole max brightmagenta
    keyword whole memoryBarrier brightmagenta
    keyword whole min brightmagenta
    keyword whole mix brightmagenta
    keyword whole mod brightmagenta
    keyword whole modf brightmagenta
    keyword whole noise brightmagenta
    keyword whole normalize brightmagenta
    keyword whole not brightmagenta
    keyword whole notEqual brightmagenta
    keyword whole outerProduct brightmagenta
    keyword whole packDouble2x32 brightmagenta
    keyword whole packHalf2x16 brightmagenta
    keyword whole packSnorm2x16 brightmagenta
    keyword whole packSnorm4x8 brightmagenta
    keyword whole packUnorm2x16 brightmagenta
    keyword whole packUnorm4x8 brightmagenta
    keyword whole pow brightmagenta
    keyword whole radians brightmagenta
    keyword whole reflect brightmagenta
    keyword whole refract brightmagenta
    keyword whole round brightmagenta
    keyword whole roundEven brightmagenta
    keyword whole sign brightmagenta
    keyword whole sin brightmagenta
    keyword whole sinh brightmagenta
    keyword whole smoothstep brightmagenta
    keyword whole sqrt brightmagenta
    keyword whole step brightmagenta
    keyword whole tan brightmagenta
    keyword whole tanh brightmagenta
    keyword whole texelFetch brightmagenta
    keyword whole texelFetchOffset brightmagenta
    keyword whole texture brightmagenta
    keyword whole textureGather brightmagenta
    keyword whole textureGatherOffset brightmagenta
    keyword whole textureGatherOffsets brightmagenta
    keyword whole textureGrad brightmagenta
    keyword whole textureGradOffset brightmagenta
    keyword whole textureLod brightmagenta
    keyword whole textureLodOffset brightmagenta
    keyword whole textureOffset brightmagenta
    keyword whole textureProj brightmagenta
    keyword whole textureProjGrad brightmagenta
    keyword whole textureProjGradOffset brightmagenta
    keyword whole textureProjLod brightmagenta
    keyword whole textureProjLodOffset brightmagenta
    keyword whole textureProjOffset brightmagenta
    keyword whole textureQueryLevels brightmagenta
    keyword whole textureQueryLod brightmagenta
    keyword whole textureSize brightmagenta
    keyword whole transpose brightmagenta
    keyword whole trunc brightmagenta
    keyword whole uaddCarry brightmagenta
    keyword whole uintBitsToFloat brightmagenta
    keyword whole umulExtended brightmagenta
    keyword whole unpackDouble2x32 brightmagenta
    keyword whole unpackHalf2x16 brightmagenta
    keyword whole unpackSnorm2x16 brightmagenta
    keyword whole unpackSnorm4x8 brightmagenta
    keyword whole unpackUnorm2x16 brightmagenta
    keyword whole unpackUnorm4x8 brightmagenta
    keyword whole usubBorrow brightmagenta

# Deprecated built-in
    keyword whole texture1D magenta
    keyword whole texture1DProj magenta
    keyword whole texture1DLod magenta
    keyword whole texture1DProjLod magenta
    keyword whole texture2D magenta
    keyword whole texture2DProj magenta
    keyword whole texture2DLod magenta
    keyword whole texture2DProjLod magenta
    keyword whole texture2DRect magenta
    keyword whole texture2DRectProj magenta
    keyword whole texture3D magenta
    keyword whole texture3DProj magenta
    keyword whole texture3DLod magenta
    keyword whole texture3DProjLod magenta
    keyword whole shadow1D magenta
    keyword whole shadow1DProj magenta
    keyword whole shadow1DLod magenta
    keyword whole shadow1DProjLod magenta
    keyword whole shadow2D magenta
    keyword whole shadow2DProj magenta
    keyword whole shadow2DLod magenta
    keyword whole shadow2DProjLod magenta
    keyword whole textureCube magenta
    keyword whole textureCubeLod magenta

# Deprecated variables

    keyword whole gl_FragColor red
    keyword whole gl_FragData red
    keyword whole gl_MaxVarying red
    keyword whole gl_MaxVaryingFloats red
    keyword whole gl_MaxVaryingComponents red

# Comments
    keyword /\* brown
    keyword \*/ brown
    keyword // brown

# Preprocessor
    keyword # brightred

# Punctuation
    keyword > white
    keyword < white
    keyword \+ white
    keyword - white
    keyword \* white
    keyword / white
    keyword % white
    keyword = white
    keyword != white
    keyword == white
    keyword & white
    keyword | white
    keyword :: white
    keyword -> white
    keyword { brightcyan
    keyword } brightcyan
    keyword ( brightcyan
    keyword ) brightcyan
    keyword [ brightcyan
    keyword ] brightcyan
    keyword , brightcyan
    keyword : brightcyan
    keyword ; brightmagenta

context exclusive # \n brightred
    keyword \\\n yellow
    keyword /\**\*/ brown
    keyword //*\n brown
    keyword "+" red
    keyword <+> red
context exclusive /\* \*/ brown
    spellcheck
context exclusive // \n brown
    spellcheck

context " " green
    spellcheck
context ' ' brightgreen
    spellcheck
