'import '     Keyword.Namespace
'Math.Vector3' Name.Class
' '           Text
'(..)'        Name.Function
'\n'          Text

'import '     Keyword.Namespace
'Math.Matrix4' Name.Class
' '           Text
'(..)'        Name.Function
'\n'          Text

'import '     Keyword.Namespace
'Graphics.WebGL' Name.Class
' '           Text
'(..)'        Name.Function
'\n\n'        Text

'-- Create a mesh with two triangles' Comment.Single
'\n\n'        Text

'type'        Keyword.Reserved
' '           Text
'Vertex'      Keyword.Type
' '           Text
'='           Name.Function
' '           Text
'{'           Punctuation
' '           Text
'position'    Name.Variable
':'           Name.Function
'Vec3'        Keyword.Type
','           Punctuation
' '           Text
'color'       Name.Variable
':'           Name.Function
'Vec3'        Keyword.Type
' '           Text
'}'           Punctuation
'\n\n'        Text

'mesh'        Name.Variable
' '           Text
':'           Name.Function
' '           Text
'['           Punctuation
'Triangle'    Keyword.Type
' '           Text
'Vertex'      Keyword.Type
']'           Punctuation
'\n'          Text

'mesh'        Name.Variable
' '           Text
'='           Name.Function
' '           Text
'['           Punctuation
' '           Text
'('           Punctuation
' '           Text
'Vertex'      Keyword.Type
' '           Text
'('           Punctuation
'vec3'        Name.Variable
' '           Text
'0'           Literal.Number.Integer
'  '          Text
'0'           Literal.Number.Integer
' '           Text
'0'           Literal.Number.Integer
')'           Punctuation
' '           Text
'('           Punctuation
'vec3'        Name.Variable
' '           Text
'1'           Literal.Number.Integer
' '           Text
'0'           Literal.Number.Integer
' '           Text
'0'           Literal.Number.Integer
')'           Punctuation
'\n         ' Text
','           Punctuation
' '           Text
'Vertex'      Keyword.Type
' '           Text
'('           Punctuation
'vec3'        Name.Variable
' '           Text
'1'           Literal.Number.Integer
'  '          Text
'1'           Literal.Number.Integer
' '           Text
'0'           Literal.Number.Integer
')'           Punctuation
' '           Text
'('           Punctuation
'vec3'        Name.Variable
' '           Text
'0'           Literal.Number.Integer
' '           Text
'1'           Literal.Number.Integer
' '           Text
'0'           Literal.Number.Integer
')'           Punctuation
'\n         ' Text
','           Punctuation
' '           Text
'Vertex'      Keyword.Type
' '           Text
'('           Punctuation
'vec3'        Name.Variable
' '           Text
'1'           Literal.Number.Integer
' '           Text
'-'           Name.Function
'1'           Literal.Number.Integer
' '           Text
'0'           Literal.Number.Integer
')'           Punctuation
' '           Text
'('           Punctuation
'vec3'        Name.Variable
' '           Text
'0'           Literal.Number.Integer
' '           Text
'0'           Literal.Number.Integer
' '           Text
'1'           Literal.Number.Integer
')'           Punctuation
'\n         ' Text
')'           Punctuation
'\n       '   Text
']'           Punctuation
'\n\n'        Text

'-- Create the scene' Comment.Single
'\n\n'        Text

'main '       Keyword.Reserved
':'           Name.Function
' '           Text
'Signal'      Keyword.Type
' '           Text
'Element'     Keyword.Type
'\n'          Text

'main '       Keyword.Reserved
'='           Name.Function
' '           Text
'scene'       Name.Variable
' '           Text
'<~'          Name.Function
' '           Text
'foldp'       Name.Variable
' '           Text
'(+)'         Name.Function
' '           Text
'0'           Literal.Number.Integer
' '           Text
'('           Punctuation
'fps'         Name.Variable
' '           Text
'30'          Literal.Number.Integer
')'           Punctuation
'\n\n'        Text

'scene'       Name.Variable
' '           Text
':'           Name.Function
' '           Text
'Float'       Keyword.Type
' '           Text
'->'          Name.Function
' '           Text
'Element'     Keyword.Type
'\n'          Text

'scene'       Name.Variable
' '           Text
't'           Name.Variable
' '           Text
'='           Name.Function
'\n    '      Text
'webgl'       Name.Variable
' '           Text
'('           Punctuation
'400'         Literal.Number.Integer
','           Punctuation
'400'         Literal.Number.Integer
')'           Punctuation
'\n    '      Text
'['           Punctuation
' '           Text
'entity'      Name.Variable
' '           Text
'vertexShader' Name.Variable
' '           Text
'fragmentShader' Name.Variable
' '           Text
'mesh'        Name.Variable
' '           Text
'{'           Punctuation
' '           Text
'view'        Name.Variable
' '           Text
'='           Name.Function
' '           Text
'view'        Name.Variable
' '           Text
'('           Punctuation
't'           Name.Variable
' '           Text
'/'           Name.Function
' '           Text
'1000'        Literal.Number.Integer
')'           Punctuation
' '           Text
'}'           Punctuation
' '           Text
']'           Punctuation
'\n\n'        Text

'view'        Name.Variable
' '           Text
':'           Name.Function
' '           Text
'Float'       Keyword.Type
' '           Text
'->'          Name.Function
' '           Text
'Mat4'        Keyword.Type
'\n'          Text

'view'        Name.Variable
' '           Text
't'           Name.Variable
' '           Text
'='           Name.Function
'\n    '      Text
'mul'         Name.Variable
' '           Text
'('           Punctuation
'makePerspective' Name.Variable
' '           Text
'45'          Literal.Number.Integer
' '           Text
'1'           Literal.Number.Integer
' '           Text
'0.'          Literal.Number.Float
'01'          Literal.Number.Integer
' '           Text
'100'         Literal.Number.Integer
')'           Punctuation
'\n        '  Text
'('           Punctuation
'makeLookAt'  Name.Variable
' '           Text
'('           Punctuation
'vec3'        Name.Variable
' '           Text
'('           Punctuation
'4'           Literal.Number.Integer
' '           Text
'*'           Name.Function
' '           Text
'cos'         Name.Variable
' '           Text
't'           Name.Variable
')'           Punctuation
' '           Text
'0'           Literal.Number.Integer
' '           Text
'('           Punctuation
'4'           Literal.Number.Integer
' '           Text
'*'           Name.Function
' '           Text
'sin'         Name.Variable
' '           Text
't'           Name.Variable
')'           Punctuation
')'           Punctuation
' '           Text
'('           Punctuation
'vec3'        Name.Variable
' '           Text
'0'           Literal.Number.Integer
' '           Text
'0'           Literal.Number.Integer
' '           Text
'0'           Literal.Number.Integer
')'           Punctuation
' '           Text
'('           Punctuation
'vec3'        Name.Variable
' '           Text
'0'           Literal.Number.Integer
' '           Text
'1'           Literal.Number.Integer
' '           Text
'0'           Literal.Number.Integer
')'           Punctuation
')'           Punctuation
'\n\n'        Text

'-- Shaders'  Comment.Single
'\n\n'        Text

'vertexShader' Name.Variable
' '           Text
':'           Name.Function
' '           Text
'Shader'      Keyword.Type
' '           Text
'{'           Punctuation
' '           Text
'attr'        Name.Variable
' '           Text
'|'           Name.Function
' '           Text
'position'    Name.Variable
':'           Name.Function
'Vec3'        Keyword.Type
','           Punctuation
' '           Text
'color'       Name.Variable
':'           Name.Function
'Vec3'        Keyword.Type
' '           Text
'}'           Punctuation
' '           Text
'{'           Punctuation
' '           Text
'unif'        Name.Variable
' '           Text
'|'           Name.Function
' '           Text
'view'        Name.Variable
':'           Name.Function
'Mat4'        Keyword.Type
' '           Text
'}'           Punctuation
' '           Text
'{'           Punctuation
' '           Text
'vcolor'      Name.Variable
':'           Name.Function
'Vec3'        Keyword.Type
' '           Text
'}'           Punctuation
'\n'          Text

'vertexShader' Name.Variable
' '           Text
'='           Name.Function
' '           Text
'[glsl|'      Name.Entity
'\n'          Name.Entity

'\n'          Name.Entity

'attribute vec3 position;\n' Name.Entity

'attribute vec3 color;\n' Name.Entity

'uniform mat4 view;\n' Name.Entity

'varying vec3 vcolor;\n' Name.Entity

'\n'          Name.Entity

'void main () {\n' Name.Entity

'    gl_Position = view * vec4(position, 1.0);\n' Name.Entity

'    vcolor = color;\n' Name.Entity

'}\n'         Name.Entity

'\n'          Name.Entity

'|]'          Name.Entity
'\n\n'        Text

'fragmentShader' Name.Variable
' '           Text
':'           Name.Function
' '           Text
'Shader'      Keyword.Type
' '           Text
'{'           Punctuation
'}'           Punctuation
' '           Text
'u'           Name.Variable
' '           Text
'{'           Punctuation
' '           Text
'vcolor'      Name.Variable
':'           Name.Function
'Vec3'        Keyword.Type
' '           Text
'}'           Punctuation
'\n'          Text

'fragmentShader' Name.Variable
' '           Text
'='           Name.Function
' '           Text
'[glsl|'      Name.Entity
'\n'          Name.Entity

'\n'          Name.Entity

'precision mediump float;\n' Name.Entity

'varying vec3 vcolor;\n' Name.Entity

'\n'          Name.Entity

'void main () {\n' Name.Entity

'    gl_FragColor = vec4(vcolor, 1.0);\n' Name.Entity

'}\n'         Name.Entity

'\n'          Name.Entity

'|]'          Name.Entity
'\n'          Text
