blob: a16822bd733b9736bc026eb00a25c6a4005f41e5 [file] [log] [blame]
// CodeMirror likes mode definitions as maps to bools, but a string of space
// separated words is easier to edit, so we convert our strings into a map here.
function words(str: string) {
const obj: Record<string, boolean> = {};
str.split(' ').forEach((word: string) => { obj[word] = true; });
return obj;
}
// See the design doc for the list of keywords. http://go/shaders.skia.org
export const keywords = words(
'const attribute uniform varying break continue '
+ 'discard return for while do if else struct in out inout uniform layout');
export const blockKeywords = words('case do else for if switch while struct enum union');
export const defKeywords = words('struct enum union');
export const atoms = words('sk_FragCoord true false');
export const builtins = words(
'radians degrees '
+ 'sin cos tan asin acos atan '
+ 'pow exp log exp2 log2 '
+ 'sqrt inversesqrt '
+ 'abs sign floor ceil fract mod '
+ 'min max clamp saturate '
+ 'mix step smoothstep '
+ 'length distance dot cross normalize '
+ 'faceforward reflect refract '
+ 'matrixCompMult inverse '
+ 'lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual '
+ 'any all not '
+ 'sample unpremul');
export const types = words(
'int long char short double float unsigned '
+ 'signed void bool float float2 float3 float4 '
+ 'float2x2 float3x3 float4x4 '
+ 'half half2 half3 half4 '
+ 'half2x2 half3x3 half4x4 '
+ 'bool bool2 bool3 bool4 '
+ 'int int2 int3 int4 '
+ 'fragmentProcessor shader '
+ 'vec2 vec3 vec4 '
+ 'ivec2 ivec3 ivec4 '
+ 'bvec2 bvec3 bvec4 '
+ 'mat2 mat3 mat4');