// 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) 


// 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');

{
  const obj: Record<string, boolean> = {};
  str.split(' ').forEach((word: string) => { obj[word] = true; });
  return obj;
}