blob: 7da28c9836d479891605a40f703b4f1a829be6ca [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'
);