'-- transform.moon' Comment.Single
'\n'          Text.Whitespace

'-- Leaf Corcoran (leafot@gmail.com) 2011' Comment.Single
'\n'          Text.Whitespace

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

'-- This is part of the MoonScript compiler. See <http://moonscript.org>' Comment.Single
'\n'          Text.Whitespace

'-- MoonScript is licensed under the MIT License' Comment.Single
'\n'          Text.Whitespace

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

'\n'          Text.Whitespace

'module'      Name
' '           Text
'"'           Literal.String.Double
'moonscript.transform' Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'package'     Name
'.'           Operator
'seeall'      Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'types'       Name
' '           Text
'='           Operator
' '           Text
'require'     Name.Builtin
' '           Text
'"'           Literal.String.Double
'moonscript.types' Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'util'        Name
' '           Text
'='           Operator
' '           Text
'require'     Name.Builtin
' '           Text
'"'           Literal.String.Double
'moonscript.util' Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'data'        Name
' '           Text
'='           Operator
' '           Text
'require'     Name.Builtin
' '           Text
'"'           Literal.String.Double
'moonscript.data' Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'import'      Keyword
' '           Text
'reversed'    Name
' '           Text
'from'        Keyword
' '           Text
'util'        Name
'\n'          Text.Whitespace

'import'      Keyword
' '           Text
'ntype'       Name
','           Punctuation
' '           Text
'build'       Name
','           Punctuation
' '           Text
'smart_node'  Name
','           Punctuation
' '           Text
'is_slice'    Name
' '           Text
'from'        Keyword
' '           Text
'types'       Name
'\n'          Text.Whitespace

'import'      Keyword
' '           Text
'insert'      Name
' '           Text
'from'        Keyword
' '           Text
'table'       Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'export'      Keyword
' '           Text
'Statement'   Name.Class
','           Punctuation
' '           Text
'Value'       Name.Class
','           Punctuation
' '           Text
'NameProxy'   Name.Class
','           Punctuation
' '           Text
'LocalName'   Name.Class
','           Punctuation
' '           Text
'Run'         Name.Class
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'-- always declares as local' Comment.Single
'\n'          Text.Whitespace

'class'       Keyword
' '           Text
'LocalName'   Name.Class
'\n'          Text.Whitespace

'  '          Text
'new:'        Name.Variable
' '           Text
'('           Keyword.Type
'@name'       Name.Variable.Class
')'           Keyword.Type
' '           Text
'=>'          Name.Function
' '           Text
'self'        Name.Builtin.Pseudo
'['           Keyword.Type
'1'           Literal.Number.Integer
']'           Keyword.Type
' '           Text
'='           Operator
' '           Text
'"'           Literal.String.Double
'temp_name'   Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'  '          Text
'get_name:'   Name.Variable
' '           Text
'=>'          Name.Function
' '           Text
'@name'       Name.Variable.Class
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'class'       Keyword
' '           Text
'NameProxy'   Name.Class
'\n'          Text.Whitespace

'  '          Text
'new:'        Name.Variable
' '           Text
'('           Keyword.Type
'@prefix'     Name.Variable.Class
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'self'        Name.Builtin.Pseudo
'['           Keyword.Type
'1'           Literal.Number.Integer
']'           Keyword.Type
' '           Text
'='           Operator
' '           Text
'"'           Literal.String.Double
'temp_name'   Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'get_name:'   Name.Variable
' '           Text
'('           Keyword.Type
'scope'       Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'if'          Keyword
' '           Text
'not'         Keyword
' '           Text
'@name'       Name.Variable.Class
'\n'          Text.Whitespace

'      '      Text
'@name'       Name.Variable.Class
' '           Text
'='           Operator
' '           Text
'scope'       Name
'\\'          Operator
'free_name'   Name
' '           Text
'@prefix'     Name.Variable.Class
','           Punctuation
' '           Text
'true'        Keyword.Constant
'\n'          Text.Whitespace

'    '        Text
'@name'       Name.Variable.Class
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'chain:'      Name.Variable
' '           Text
'('           Keyword.Type
'...'         Operator
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'items'       Name
' '           Text
'='           Operator
' '           Text
'{'           Keyword.Type
'...'         Operator
'}'           Keyword.Type
' '           Text
'-- todo: fix ... propagation' Comment.Single
'\n'          Text.Whitespace

'    '        Text
'items'       Name
' '           Text
'='           Operator
' '           Text
'for'         Keyword
' '           Text
'i'           Name
' '           Text
'in'          Keyword
' '           Text
'*'           Operator
'items'       Name
'\n'          Text.Whitespace

'      '      Text
'if'          Keyword
' '           Text
'type'        Name.Builtin
'('           Keyword.Type
'i'           Name
')'           Keyword.Type
' '           Text
'=='          Operator
' '           Text
'"'           Literal.String.Double
'string'      Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'        '    Text
'{'           Keyword.Type
'"'           Literal.String.Double
'dot'         Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'i'           Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'else'        Keyword
'\n'          Text.Whitespace

'        '    Text
'i'           Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'build'       Name
'.'           Operator
'chain'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'base:'       Name.Variable
' '           Text
'self'        Name.Builtin.Pseudo
'\n'          Text.Whitespace

'      '      Text
'unpack'      Name
' '           Text
'items'       Name
'\n'          Text.Whitespace

'    '        Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'index:'      Name.Variable
' '           Text
'('           Keyword.Type
'key'         Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'build'       Name
'.'           Operator
'chain'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'base:'       Name.Variable
' '           Text
'self'        Name.Builtin.Pseudo
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'index'       Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'key'         Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'__tostring:' Name.Variable
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'if'          Keyword
' '           Text
'@name'       Name.Variable.Class
'\n'          Text.Whitespace

'      '      Text
'('           Keyword.Type
'"'           Literal.String.Double
'name<%s>'    Literal.String
'"'           Literal.String.Double
')'           Keyword.Type
'\\'          Operator
'format'      Name
' '           Text
'@name'       Name.Variable.Class
'\n'          Text.Whitespace

'    '        Text
'else'        Keyword
'\n'          Text.Whitespace

'      '      Text
'('           Keyword.Type
'"'           Literal.String.Double
'name<prefix(%s)>' Literal.String
'"'           Literal.String.Double
')'           Keyword.Type
'\\'          Operator
'format'      Name
' '           Text
'@prefix'     Name.Variable.Class
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'class'       Keyword
' '           Text
'Run'         Name.Class
'\n'          Text.Whitespace

'  '          Text
'new:'        Name.Variable
' '           Text
'('           Keyword.Type
'@fn'         Name.Variable.Class
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'self'        Name.Builtin.Pseudo
'['           Keyword.Type
'1'           Literal.Number.Integer
']'           Keyword.Type
' '           Text
'='           Operator
' '           Text
'"'           Literal.String.Double
'run'         Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'call:'       Name.Variable
' '           Text
'('           Keyword.Type
'state'       Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'self'        Name.Builtin.Pseudo
'.'           Operator
'fn'          Name
' '           Text
'state'       Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'-- transform the last stm is a list of stms' Comment.Single
'\n'          Text.Whitespace

'-- will puke on group' Comment.Single
'\n'          Text.Whitespace

'apply_to_last' Name
' '           Text
'='           Operator
' '           Text
'('           Keyword.Type
'stms'        Name
','           Punctuation
' '           Text
'fn'          Name
')'           Keyword.Type
' '           Text
'->'          Name.Function
'\n'          Text.Whitespace

'  '          Text
'-- find last (real) exp' Comment.Single
'\n'          Text.Whitespace

'  '          Text
'last_exp_id' Name
' '           Text
'='           Operator
' '           Text
'0'           Literal.Number.Integer
'\n'          Text.Whitespace

'  '          Text
'for'         Keyword
' '           Text
'i'           Name
' '           Text
'='           Operator
' '           Text
'#'           Operator
'stms'        Name
','           Punctuation
' '           Text
'1'           Literal.Number.Integer
','           Punctuation
' '           Text
'-'           Operator
'1'           Literal.Number.Integer
'\n'          Text.Whitespace

'    '        Text
'stm'         Name
' '           Text
'='           Operator
' '           Text
'stms'        Name
'['           Keyword.Type
'i'           Name
']'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'if'          Keyword
' '           Text
'stm'         Name
' '           Text
'and'         Keyword
' '           Text
'util'        Name
'.'           Operator
'moon'        Name
'.'           Operator
'type'        Name.Builtin
'('           Keyword.Type
'stm'         Name
')'           Keyword.Type
' '           Text
'!='          Operator
' '           Text
'Run'         Name.Class
'\n'          Text.Whitespace

'      '      Text
'last_exp_id' Name
' '           Text
'='           Operator
' '           Text
'i'           Name
'\n'          Text.Whitespace

'      '      Text
'break'       Keyword
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'return'      Keyword
' '           Text
'for'         Keyword
' '           Text
'i'           Name
','           Punctuation
' '           Text
'stm'         Name
' '           Text
'in'          Keyword
' '           Text
'ipairs'      Name.Builtin
' '           Text
'stms'        Name
'\n'          Text.Whitespace

'    '        Text
'if'          Keyword
' '           Text
'i'           Name
' '           Text
'=='          Operator
' '           Text
'last_exp_id' Name
'\n'          Text.Whitespace

'      '      Text
'fn'          Name
' '           Text
'stm'         Name
'\n'          Text.Whitespace

'    '        Text
'else'        Keyword
'\n'          Text.Whitespace

'      '      Text
'stm'         Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'-- is a body a sindle expression/statement' Comment.Single
'\n'          Text.Whitespace

'is_singular' Name
' '           Text
'='           Operator
' '           Text
'('           Keyword.Type
'body'        Name
')'           Keyword.Type
' '           Text
'->'          Name.Function
'\n'          Text.Whitespace

'  '          Text
'return'      Keyword
' '           Text
'false'       Keyword.Constant
' '           Text
'if'          Keyword
' '           Text
'#'           Operator
'body'        Name
' '           Text
'!='          Operator
' '           Text
'1'           Literal.Number.Integer
'\n'          Text.Whitespace

'  '          Text
'if'          Keyword
' '           Text
'"'           Literal.String.Double
'group'       Literal.String
'"'           Literal.String.Double
' '           Text
'=='          Operator
' '           Text
'ntype'       Name
' '           Text
'body'        Name
'\n'          Text.Whitespace

'    '        Text
'is_singular' Name
' '           Text
'body'        Name
'['           Keyword.Type
'2'           Literal.Number.Integer
']'           Keyword.Type
'\n'          Text.Whitespace

'  '          Text
'else'        Keyword
'\n'          Text.Whitespace

'    '        Text
'true'        Keyword.Constant
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'constructor_name' Name
' '           Text
'='           Operator
' '           Text
'"'           Literal.String.Double
'new'         Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'class'       Keyword
' '           Text
'Transformer' Name.Class
'\n'          Text.Whitespace

'  '          Text
'new:'        Name.Variable
' '           Text
'('           Keyword.Type
'@transformers' Name.Variable.Class
','           Punctuation
' '           Text
'@scope'      Name.Variable.Class
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'@seen_nodes' Name.Variable.Class
' '           Text
'='           Operator
' '           Text
'{'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'transform:'  Name.Variable
' '           Text
'('           Keyword.Type
'scope'       Name
','           Punctuation
' '           Text
'node'        Name
','           Punctuation
' '           Text
'...'         Operator
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'-- print scope, node, ...' Comment.Single
'\n'          Text.Whitespace

'    '        Text
'return'      Keyword
' '           Text
'node'        Name
' '           Text
'if'          Keyword
' '           Text
'@seen_nodes' Name.Variable.Class
'['           Keyword.Type
'node'        Name
']'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'@seen_nodes' Name.Variable.Class
'['           Keyword.Type
'node'        Name
']'           Keyword.Type
' '           Text
'='           Operator
' '           Text
'true'        Keyword.Constant
'\n'          Text.Whitespace

'    '        Text
'while'       Keyword
' '           Text
'true'        Keyword.Constant
'\n'          Text.Whitespace

'      '      Text
'transformer' Name
' '           Text
'='           Operator
' '           Text
'@transformers' Name.Variable.Class
'['           Keyword.Type
'ntype'       Name
' '           Text
'node'        Name
']'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'res'         Name
' '           Text
'='           Operator
' '           Text
'if'          Keyword
' '           Text
'transformer' Name
'\n'          Text.Whitespace

'        '    Text
'transformer' Name
'('           Keyword.Type
'scope'       Name
','           Punctuation
' '           Text
'node'        Name
','           Punctuation
' '           Text
'...'         Operator
')'           Keyword.Type
' '           Text
'or'          Keyword
' '           Text
'node'        Name
'\n'          Text.Whitespace

'      '      Text
'else'        Keyword
'\n'          Text.Whitespace

'        '    Text
'node'        Name
'\n'          Text.Whitespace

'      '      Text
'return'      Keyword
' '           Text
'node'        Name
' '           Text
'if'          Keyword
' '           Text
'res'         Name
' '           Text
'=='          Operator
' '           Text
'node'        Name
'\n'          Text.Whitespace

'      '      Text
'node'        Name
' '           Text
'='           Operator
' '           Text
'res'         Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'__call:'     Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
','           Punctuation
' '           Text
'...'         Operator
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'@transform'  Name.Variable.Class
' '           Text
'@scope'      Name.Variable.Class
','           Punctuation
' '           Text
'node'        Name
','           Punctuation
' '           Text
'...'         Operator
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'instance:'   Name.Variable
' '           Text
'('           Keyword.Type
'scope'       Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'Transformer' Name.Class
' '           Text
'@transformers' Name.Variable.Class
','           Punctuation
' '           Text
'scope'       Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'can_transform:' Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'@transformers' Name.Variable.Class
'['           Keyword.Type
'ntype'       Name
' '           Text
'node'        Name
']'           Keyword.Type
' '           Text
'!='          Operator
' '           Text
'nil'         Keyword.Constant
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'construct_comprehension' Name
' '           Text
'='           Operator
' '           Text
'('           Keyword.Type
'inner'       Name
','           Punctuation
' '           Text
'clauses'     Name
')'           Keyword.Type
' '           Text
'->'          Name.Function
'\n'          Text.Whitespace

'  '          Text
'current_stms' Name
' '           Text
'='           Operator
' '           Text
'inner'       Name
'\n'          Text.Whitespace

'  '          Text
'for'         Keyword
' '           Text
'_'           Name
','           Punctuation
' '           Text
'clause'      Name
' '           Text
'in'          Keyword
' '           Text
'reversed'    Name
' '           Text
'clauses'     Name
'\n'          Text.Whitespace

'    '        Text
't'           Name
' '           Text
'='           Operator
' '           Text
'clause'      Name
'['           Keyword.Type
'1'           Literal.Number.Integer
']'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'current_stms' Name
' '           Text
'='           Operator
' '           Text
'if'          Keyword
' '           Text
't'           Name
' '           Text
'=='          Operator
' '           Text
'"'           Literal.String.Double
'for'         Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'      '      Text
'_'           Name
','           Punctuation
' '           Text
'names'       Name
','           Punctuation
' '           Text
'iter'        Name
' '           Text
'='           Operator
' '           Text
'unpack'      Name
' '           Text
'clause'      Name
'\n'          Text.Whitespace

'      '      Text
'{'           Keyword.Type
'"'           Literal.String.Double
'foreach'     Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'names'       Name
','           Punctuation
' '           Text
'iter'        Name
','           Punctuation
' '           Text
'current_stms' Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'elseif'      Keyword
' '           Text
't'           Name
' '           Text
'=='          Operator
' '           Text
'"'           Literal.String.Double
'when'        Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'      '      Text
'_'           Name
','           Punctuation
' '           Text
'cond'        Name
' '           Text
'='           Operator
' '           Text
'unpack'      Name
' '           Text
'clause'      Name
'\n'          Text.Whitespace

'      '      Text
'{'           Keyword.Type
'"'           Literal.String.Double
'if'          Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'cond'        Name
','           Punctuation
' '           Text
'current_stms' Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'else'        Keyword
'\n'          Text.Whitespace

'      '      Text
'error'       Name.Builtin
' '           Text
'"'           Literal.String.Double
'Unknown comprehension clause: ' Literal.String
'"'           Literal.String.Double
'..'          Operator
't'           Name
'\n'          Text.Whitespace

'    '        Text
'current_stms' Name
' '           Text
'='           Operator
' '           Text
'{'           Keyword.Type
'current_stms' Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'current_stms' Name
'['           Keyword.Type
'1'           Literal.Number.Integer
']'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'Statement'   Name.Class
' '           Text
'='           Operator
' '           Text
'Transformer' Name.Class
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'  '          Text
'assign:'     Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'_'           Name
','           Punctuation
' '           Text
'names'       Name
','           Punctuation
' '           Text
'values'      Name
' '           Text
'='           Operator
' '           Text
'unpack'      Name
' '           Text
'node'        Name
'\n'          Text.Whitespace

'    '        Text
'-- bubble cascading assigns' Comment.Single
'\n'          Text.Whitespace

'    '        Text
'if'          Keyword
' '           Text
'#'           Operator
'values'      Name
' '           Text
'=='          Operator
' '           Text
'1'           Literal.Number.Integer
' '           Text
'and'         Keyword
' '           Text
'types'       Name
'.'           Operator
'cascading'   Name
'['           Keyword.Type
'ntype'       Name
' '           Text
'values'      Name
'['           Keyword.Type
'1'           Literal.Number.Integer
']'           Keyword.Type
']'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'values'      Name
'['           Keyword.Type
'1'           Literal.Number.Integer
']'           Keyword.Type
' '           Text
'='           Operator
' '           Text
'@transform'  Name.Variable.Class
'.'           Operator
'statement'   Name
' '           Text
'values'      Name
'['           Keyword.Type
'1'           Literal.Number.Integer
']'           Keyword.Type
','           Punctuation
' '           Text
'('           Keyword.Type
'stm'         Name
')'           Keyword.Type
' '           Text
'->'          Name.Function
'\n'          Text.Whitespace

'        '    Text
't'           Name
' '           Text
'='           Operator
' '           Text
'ntype'       Name
' '           Text
'stm'         Name
'\n'          Text.Whitespace

'        '    Text
'if'          Keyword
' '           Text
'types'       Name
'.'           Operator
'is_value'    Name
' '           Text
'stm'         Name
'\n'          Text.Whitespace

'          '  Text
'{'           Keyword.Type
'"'           Literal.String.Double
'assign'      Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'names'       Name
','           Punctuation
' '           Text
'{'           Keyword.Type
'stm'         Name
'}'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'else'        Keyword
'\n'          Text.Whitespace

'          '  Text
'stm'         Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'      '      Text
'build'       Name
'.'           Operator
'group'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'{'           Keyword.Type
'"'           Literal.String.Double
'declare'     Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'names'       Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'values'      Name
'['           Keyword.Type
'1'           Literal.Number.Integer
']'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'else'        Keyword
'\n'          Text.Whitespace

'      '      Text
'node'        Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'export:'     Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'-- assign values if they are included' Comment.Single
'\n'          Text.Whitespace

'    '        Text
'if'          Keyword
' '           Text
'#'           Operator
'node'        Name
' '           Text
'>'           Operator
' '           Text
'2'           Literal.Number.Integer
'\n'          Text.Whitespace

'      '      Text
'if'          Keyword
' '           Text
'node'        Name
'['           Keyword.Type
'2'           Literal.Number.Integer
']'           Keyword.Type
' '           Text
'=='          Operator
' '           Text
'"'           Literal.String.Double
'class'       Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'        '    Text
'cls'         Name
' '           Text
'='           Operator
' '           Text
'smart_node'  Name
' '           Text
'node'        Name
'['           Keyword.Type
'3'           Literal.Number.Integer
']'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'build'       Name
'.'           Operator
'group'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'{'           Keyword.Type
'"'           Literal.String.Double
'export'      Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'{'           Keyword.Type
'cls'         Name
'.'           Operator
'name'        Name
'}'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'cls'         Name
'\n'          Text.Whitespace

'        '    Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'else'        Keyword
'\n'          Text.Whitespace

'        '    Text
'build'       Name
'.'           Operator
'group'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'node'        Name
'\n'          Text.Whitespace

'          '  Text
'build'       Name
'.'           Operator
'assign'      Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'            ' Text
'names:'      Name.Variable
' '           Text
'node'        Name
'['           Keyword.Type
'2'           Literal.Number.Integer
']'           Keyword.Type
'\n'          Text.Whitespace

'            ' Text
'values:'     Name.Variable
' '           Text
'node'        Name
'['           Keyword.Type
'3'           Literal.Number.Integer
']'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'else'        Keyword
'\n'          Text.Whitespace

'      '      Text
'nil'         Keyword.Constant
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'update:'     Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'_'           Name
','           Punctuation
' '           Text
'name'        Name
','           Punctuation
' '           Text
'op'          Name
','           Punctuation
' '           Text
'exp'         Name
' '           Text
'='           Operator
' '           Text
'unpack'      Name
' '           Text
'node'        Name
'\n'          Text.Whitespace

'    '        Text
'op_final'    Name
' '           Text
'='           Operator
' '           Text
'op'          Name
'\\'          Operator
'match'       Name
' '           Text
'"'           Literal.String.Double
'^(.+)=$'     Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'    '        Text
'error'       Name.Builtin
' '           Text
'"'           Literal.String.Double
'Unknown op: ' Literal.String
'"'           Literal.String.Double
'..'          Operator
'op'          Name
' '           Text
'if'          Keyword
' '           Text
'not'         Keyword
' '           Text
'op_final'    Name
'\n'          Text.Whitespace

'    '        Text
'build'       Name
'.'           Operator
'assign_one'  Name
' '           Text
'name'        Name
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'exp'         Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'name'        Name
','           Punctuation
' '           Text
'op_final'    Name
','           Punctuation
' '           Text
'exp'         Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'import:'     Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'_'           Name
','           Punctuation
' '           Text
'names'       Name
','           Punctuation
' '           Text
'source'      Name
' '           Text
'='           Operator
' '           Text
'unpack'      Name
' '           Text
'node'        Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'stubs'       Name
' '           Text
'='           Operator
' '           Text
'for'         Keyword
' '           Text
'name'        Name
' '           Text
'in'          Keyword
' '           Text
'*'           Operator
'names'       Name
'\n'          Text.Whitespace

'      '      Text
'if'          Keyword
' '           Text
'type'        Name.Builtin
'('           Keyword.Type
'name'        Name
')'           Keyword.Type
' '           Text
'=='          Operator
' '           Text
'"'           Literal.String.Double
'table'       Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'        '    Text
'name'        Name
'\n'          Text.Whitespace

'      '      Text
'else'        Keyword
'\n'          Text.Whitespace

'        '    Text
'{'           Keyword.Type
'"'           Literal.String.Double
'dot'         Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'name'        Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'real_names'  Name
' '           Text
'='           Operator
' '           Text
'for'         Keyword
' '           Text
'name'        Name
' '           Text
'in'          Keyword
' '           Text
'*'           Operator
'names'       Name
'\n'          Text.Whitespace

'      '      Text
'type'        Name.Builtin
'('           Keyword.Type
'name'        Name
')'           Keyword.Type
' '           Text
'=='          Operator
' '           Text
'"'           Literal.String.Double
'table'       Literal.String
'"'           Literal.String.Double
' '           Text
'and'         Keyword
' '           Text
'name'        Name
'['           Keyword.Type
'2'           Literal.Number.Integer
']'           Keyword.Type
' '           Text
'or'          Keyword
' '           Text
'name'        Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'if'          Keyword
' '           Text
'type'        Name.Builtin
'('           Keyword.Type
'source'      Name
')'           Keyword.Type
' '           Text
'=='          Operator
' '           Text
'"'           Literal.String.Double
'string'      Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'      '      Text
'build'       Name
'.'           Operator
'assign'      Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'names:'      Name.Variable
' '           Text
'real_names'  Name
'\n'          Text.Whitespace

'        '    Text
'values:'     Name.Variable
' '           Text
'['           Keyword.Type
'build'       Name
'.'           Operator
'chain'       Name
' '           Text
'{'           Keyword.Type
' '           Text
'base:'       Name.Variable
' '           Text
'source'      Name
','           Punctuation
' '           Text
'stub'        Name
'}'           Keyword.Type
' '           Text
'for'         Keyword
' '           Text
'stub'        Name
' '           Text
'in'          Keyword
' '           Text
'*'           Operator
'stubs'       Name
']'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'else'        Keyword
'\n'          Text.Whitespace

'      '      Text
'source_name' Name
' '           Text
'='           Operator
' '           Text
'NameProxy'   Name.Class
' '           Text
'"'           Literal.String.Double
'table'       Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'      '      Text
'build'       Name
'.'           Operator
'group'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'{'           Keyword.Type
'"'           Literal.String.Double
'declare'     Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'real_names'  Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'build'       Name
'['           Keyword.Type
'"'           Literal.String.Double
'do'          Literal.String
'"'           Literal.String.Double
']'           Keyword.Type
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'build'       Name
'.'           Operator
'assign_one'  Name
' '           Text
'source_name' Name
','           Punctuation
' '           Text
'source'      Name
'\n'          Text.Whitespace

'          '  Text
'build'       Name
'.'           Operator
'assign'      Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'            ' Text
'names:'      Name.Variable
' '           Text
'real_names'  Name
'\n'          Text.Whitespace

'            ' Text
'values:'     Name.Variable
' '           Text
'['           Keyword.Type
'build'       Name
'.'           Operator
'chain'       Name
' '           Text
'{'           Keyword.Type
' '           Text
'base:'       Name.Variable
' '           Text
'source_name' Name
','           Punctuation
' '           Text
'stub'        Name
'}'           Keyword.Type
' '           Text
'for'         Keyword
' '           Text
'stub'        Name
' '           Text
'in'          Keyword
' '           Text
'*'           Operator
'stubs'       Name
']'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'comprehension:' Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
','           Punctuation
' '           Text
'action'      Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'_'           Name
','           Punctuation
' '           Text
'exp'         Name
','           Punctuation
' '           Text
'clauses'     Name
' '           Text
'='           Operator
' '           Text
'unpack'      Name
' '           Text
'node'        Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'action'      Name
' '           Text
'='           Operator
' '           Text
'action'      Name
' '           Text
'or'          Keyword
' '           Text
'('           Keyword.Type
'exp'         Name
')'           Keyword.Type
' '           Text
'->'          Name.Function
' '           Text
'{'           Keyword.Type
'exp'         Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'construct_comprehension' Name
' '           Text
'action'      Name
'('           Keyword.Type
'exp'         Name
')'           Keyword.Type
','           Punctuation
' '           Text
'clauses'     Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'-- handle cascading return decorator' Comment.Single
'\n'          Text.Whitespace

'  '          Text
'if:'         Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
','           Punctuation
' '           Text
'ret'         Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'if'          Keyword
' '           Text
'ret'         Name
'\n'          Text.Whitespace

'      '      Text
'smart_node'  Name
' '           Text
'node'        Name
'\n'          Text.Whitespace

'      '      Text
'-- mutate all the bodies' Comment.Single
'\n'          Text.Whitespace

'      '      Text
'node'        Name
'['           Keyword.Type
"'"           Literal.String.Single
'then'        Literal.String
"'"           Literal.String.Single
']'           Keyword.Type
' '           Text
'='           Operator
' '           Text
'apply_to_last' Name
' '           Text
'node'        Name
'['           Keyword.Type
"'"           Literal.String.Single
'then'        Literal.String
"'"           Literal.String.Single
']'           Keyword.Type
','           Punctuation
' '           Text
'ret'         Name
'\n'          Text.Whitespace

'      '      Text
'for'         Keyword
' '           Text
'i'           Name
' '           Text
'='           Operator
' '           Text
'4'           Literal.Number.Integer
','           Punctuation
' '           Text
'#'           Operator
'node'        Name
'\n'          Text.Whitespace

'        '    Text
'case'        Name
' '           Text
'='           Operator
' '           Text
'node'        Name
'['           Keyword.Type
'i'           Name
']'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'body_idx'    Name
' '           Text
'='           Operator
' '           Text
'#'           Operator
'node'        Name
'['           Keyword.Type
'i'           Name
']'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'case'        Name
'['           Keyword.Type
'body_idx'    Name
']'           Keyword.Type
' '           Text
'='           Operator
' '           Text
'apply_to_last' Name
' '           Text
'case'        Name
'['           Keyword.Type
'body_idx'    Name
']'           Keyword.Type
','           Punctuation
' '           Text
'ret'         Name
'\n'          Text.Whitespace

'    '        Text
'node'        Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'with:'       Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
','           Punctuation
' '           Text
'ret'         Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'_'           Name
','           Punctuation
' '           Text
'exp'         Name
','           Punctuation
' '           Text
'block'       Name
' '           Text
'='           Operator
' '           Text
'unpack'      Name
' '           Text
'node'        Name
'\n'          Text.Whitespace

'    '        Text
'scope_name'  Name
' '           Text
'='           Operator
' '           Text
'NameProxy'   Name.Class
' '           Text
'"'           Literal.String.Double
'with'        Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'    '        Text
'build'       Name
'['           Keyword.Type
'"'           Literal.String.Double
'do'          Literal.String
'"'           Literal.String.Double
']'           Keyword.Type
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'build'       Name
'.'           Operator
'assign_one'  Name
' '           Text
'scope_name'  Name
','           Punctuation
' '           Text
'exp'         Name
'\n'          Text.Whitespace

'      '      Text
'Run'         Name.Class
' '           Text
'=>'          Name.Function
' '           Text
'@set'        Name.Variable.Class
' '           Text
'"'           Literal.String.Double
'scope_var'   Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'scope_name'  Name
'\n'          Text.Whitespace

'      '      Text
'build'       Name
'.'           Operator
'group'       Name
' '           Text
'block'       Name
'\n'          Text.Whitespace

'      '      Text
'if'          Keyword
' '           Text
'ret'         Name
'\n'          Text.Whitespace

'        '    Text
'ret'         Name
' '           Text
'scope_name'  Name
'\n'          Text.Whitespace

'    '        Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'foreach:'    Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'smart_node'  Name
' '           Text
'node'        Name
'\n'          Text.Whitespace

'    '        Text
'if'          Keyword
' '           Text
'ntype'       Name
'('           Keyword.Type
'node'        Name
'.'           Operator
'iter'        Name
')'           Keyword.Type
' '           Text
'=='          Operator
' '           Text
'"'           Literal.String.Double
'unpack'      Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'      '      Text
'list'        Name
' '           Text
'='           Operator
' '           Text
'node'        Name
'.'           Operator
'iter'        Name
'['           Keyword.Type
'2'           Literal.Number.Integer
']'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'      '      Text
'index_name'  Name
' '           Text
'='           Operator
' '           Text
'NameProxy'   Name.Class
' '           Text
'"'           Literal.String.Double
'index'       Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'      '      Text
'list_name'   Name
' '           Text
'='           Operator
' '           Text
'NameProxy'   Name.Class
' '           Text
'"'           Literal.String.Double
'list'        Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'      '      Text
'slice_var'   Name
' '           Text
'='           Operator
' '           Text
'nil'         Keyword.Constant
'\n'          Text.Whitespace

'      '      Text
'bounds'      Name
' '           Text
'='           Operator
' '           Text
'if'          Keyword
' '           Text
'is_slice'    Name
' '           Text
'list'        Name
'\n'          Text.Whitespace

'        '    Text
'slice'       Name
' '           Text
'='           Operator
' '           Text
'list'        Name
'['           Keyword.Type
'#'           Operator
'list'        Name
']'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'table.remove' Name.Builtin
' '           Text
'list'        Name
'\n'          Text.Whitespace

'        '    Text
'table.remove' Name.Builtin
' '           Text
'slice'       Name
','           Punctuation
' '           Text
'1'           Literal.Number.Integer
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'        '    Text
'slice'       Name
'['           Keyword.Type
'2'           Literal.Number.Integer
']'           Keyword.Type
' '           Text
'='           Operator
' '           Text
'if'          Keyword
' '           Text
'slice'       Name
'['           Keyword.Type
'2'           Literal.Number.Integer
']'           Keyword.Type
' '           Text
'and'         Keyword
' '           Text
'slice'       Name
'['           Keyword.Type
'2'           Literal.Number.Integer
']'           Keyword.Type
' '           Text
'!='          Operator
' '           Text
'"'           Literal.String.Double
'"'           Literal.String.Double
'\n'          Text.Whitespace

'          '  Text
'max_tmp_name' Name
' '           Text
'='           Operator
' '           Text
'NameProxy'   Name.Class
' '           Text
'"'           Literal.String.Double
'max'         Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'          '  Text
'slice_var'   Name
' '           Text
'='           Operator
' '           Text
'build'       Name
'.'           Operator
'assign_one'  Name
' '           Text
'max_tmp_name' Name
','           Punctuation
' '           Text
'slice'       Name
'['           Keyword.Type
'2'           Literal.Number.Integer
']'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'{'           Keyword.Type
'"'           Literal.String.Double
'exp'         Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'max_tmp_name' Name
','           Punctuation
' '           Text
'"'           Literal.String.Double
'<'           Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'0'           Literal.Number.Integer
'\n'          Text.Whitespace

'            ' Text
'"'           Literal.String.Double
'and'         Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'length'      Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'list_name'   Name
'}'           Keyword.Type
','           Punctuation
' '           Text
'"'           Literal.String.Double
'+'           Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'max_tmp_name' Name
'\n'          Text.Whitespace

'            ' Text
'"'           Literal.String.Double
'or'          Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'max_tmp_name' Name
' '           Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'else'        Keyword
'\n'          Text.Whitespace

'          '  Text
'{'           Keyword.Type
'"'           Literal.String.Double
'length'      Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'list_name'   Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'        '    Text
'slice'       Name
'\n'          Text.Whitespace

'      '      Text
'else'        Keyword
'\n'          Text.Whitespace

'        '    Text
'{'           Keyword.Type
'1'           Literal.Number.Integer
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'length'      Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'list_name'   Name
'}'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'      '      Text
'build'       Name
'.'           Operator
'group'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'build'       Name
'.'           Operator
'assign_one'  Name
' '           Text
'list_name'   Name
','           Punctuation
' '           Text
'list'        Name
'\n'          Text.Whitespace

'        '    Text
'slice_var'   Name
'\n'          Text.Whitespace

'        '    Text
'build'       Name
'['           Keyword.Type
'"'           Literal.String.Double
'for'         Literal.String
'"'           Literal.String.Double
']'           Keyword.Type
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'name:'       Name.Variable
' '           Text
'index_name'  Name
'\n'          Text.Whitespace

'          '  Text
'bounds:'     Name.Variable
' '           Text
'bounds'      Name
'\n'          Text.Whitespace

'          '  Text
'body:'       Name.Variable
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'            ' Text
'{'           Keyword.Type
'"'           Literal.String.Double
'assign'      Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'node'        Name
'.'           Operator
'names'       Name
','           Punctuation
' '           Text
'{'           Keyword.Type
'list_name'   Name
'\\'          Operator
'index'       Name
' '           Text
'index_name'  Name
'}'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'            ' Text
'build'       Name
'.'           Operator
'group'       Name
' '           Text
'node'        Name
'.'           Operator
'body'        Name
'\n'          Text.Whitespace

'          '  Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'switch:'     Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
','           Punctuation
' '           Text
'ret'         Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'_'           Name
','           Punctuation
' '           Text
'exp'         Name
','           Punctuation
' '           Text
'conds'       Name
' '           Text
'='           Operator
' '           Text
'unpack'      Name
' '           Text
'node'        Name
'\n'          Text.Whitespace

'    '        Text
'exp_name'    Name
' '           Text
'='           Operator
' '           Text
'NameProxy'   Name.Class
' '           Text
'"'           Literal.String.Double
'exp'         Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'-- convert switch conds into if statment conds' Comment.Single
'\n'          Text.Whitespace

'    '        Text
'convert_cond' Name
' '           Text
'='           Operator
' '           Text
'('           Keyword.Type
'cond'        Name
')'           Keyword.Type
' '           Text
'->'          Name.Function
'\n'          Text.Whitespace

'      '      Text
't'           Name
','           Punctuation
' '           Text
'case_exp'    Name
','           Punctuation
' '           Text
'body'        Name
' '           Text
'='           Operator
' '           Text
'unpack'      Name
' '           Text
'cond'        Name
'\n'          Text.Whitespace

'      '      Text
'out'         Name
' '           Text
'='           Operator
' '           Text
'{'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'insert'      Name
' '           Text
'out'         Name
','           Punctuation
' '           Text
't'           Name
' '           Text
'=='          Operator
' '           Text
'"'           Literal.String.Double
'case'        Literal.String
'"'           Literal.String.Double
' '           Text
'and'         Keyword
' '           Text
'"'           Literal.String.Double
'elseif'      Literal.String
'"'           Literal.String.Double
' '           Text
'or'          Keyword
' '           Text
'"'           Literal.String.Double
'else'        Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'      '      Text
'if'          Keyword
'  '          Text
't'           Name
' '           Text
'!='          Operator
' '           Text
'"'           Literal.String.Double
'else'        Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'        '    Text
'insert'      Name
' '           Text
'out'         Name
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'exp'         Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'case_exp'    Name
','           Punctuation
' '           Text
'"'           Literal.String.Double
'=='          Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'exp_name'    Name
'}'           Keyword.Type
' '           Text
'if'          Keyword
' '           Text
't'           Name
' '           Text
'!='          Operator
' '           Text
'"'           Literal.String.Double
'else'        Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'      '      Text
'else'        Keyword
'\n'          Text.Whitespace

'        '    Text
'body'        Name
' '           Text
'='           Operator
' '           Text
'case_exp'    Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'      '      Text
'if'          Keyword
' '           Text
'ret'         Name
'\n'          Text.Whitespace

'        '    Text
'body'        Name
' '           Text
'='           Operator
' '           Text
'apply_to_last' Name
' '           Text
'body'        Name
','           Punctuation
' '           Text
'ret'         Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'      '      Text
'insert'      Name
' '           Text
'out'         Name
','           Punctuation
' '           Text
'body'        Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'      '      Text
'out'         Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'first'       Name
' '           Text
'='           Operator
' '           Text
'true'        Keyword.Constant
'\n'          Text.Whitespace

'    '        Text
'if_stm'      Name
' '           Text
'='           Operator
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'if'          Literal.String
'"'           Literal.String.Double
'}'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'for'         Keyword
' '           Text
'cond'        Name
' '           Text
'in'          Keyword
' '           Text
'*'           Operator
'conds'       Name
'\n'          Text.Whitespace

'      '      Text
'if_cond'     Name
' '           Text
'='           Operator
' '           Text
'convert_cond' Name
' '           Text
'cond'        Name
'\n'          Text.Whitespace

'      '      Text
'if'          Keyword
' '           Text
'first'       Name
'\n'          Text.Whitespace

'        '    Text
'first'       Name
' '           Text
'='           Operator
' '           Text
'false'       Keyword.Constant
'\n'          Text.Whitespace

'        '    Text
'insert'      Name
' '           Text
'if_stm'      Name
','           Punctuation
' '           Text
'if_cond'     Name
'['           Keyword.Type
'2'           Literal.Number.Integer
']'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'insert'      Name
' '           Text
'if_stm'      Name
','           Punctuation
' '           Text
'if_cond'     Name
'['           Keyword.Type
'3'           Literal.Number.Integer
']'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'else'        Keyword
'\n'          Text.Whitespace

'        '    Text
'insert'      Name
' '           Text
'if_stm'      Name
','           Punctuation
' '           Text
'if_cond'     Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'build'       Name
'.'           Operator
'group'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'build'       Name
'.'           Operator
'assign_one'  Name
' '           Text
'exp_name'    Name
','           Punctuation
' '           Text
'exp'         Name
'\n'          Text.Whitespace

'      '      Text
'if_stm'      Name
'\n'          Text.Whitespace

'    '        Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'class:'      Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'_'           Name
','           Punctuation
' '           Text
'name'        Name
','           Punctuation
' '           Text
'parent_val'  Name
','           Punctuation
' '           Text
'body'        Name
' '           Text
'='           Operator
' '           Text
'unpack'      Name
' '           Text
'node'        Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'-- split apart properties and statements' Comment.Single
'\n'          Text.Whitespace

'    '        Text
'statements'  Name
' '           Text
'='           Operator
' '           Text
'{'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'properties'  Name
' '           Text
'='           Operator
' '           Text
'{'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'for'         Keyword
' '           Text
'item'        Name
' '           Text
'in'          Keyword
' '           Text
'*'           Operator
'body'        Name
'\n'          Text.Whitespace

'      '      Text
'switch'      Keyword
' '           Text
'item'        Name
'['           Keyword.Type
'1'           Literal.Number.Integer
']'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'when'        Keyword
' '           Text
'"'           Literal.String.Double
'stm'         Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'          '  Text
'insert'      Name
' '           Text
'statements'  Name
','           Punctuation
' '           Text
'item'        Name
'['           Keyword.Type
'2'           Literal.Number.Integer
']'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'when'        Keyword
' '           Text
'"'           Literal.String.Double
'props'       Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'          '  Text
'for'         Keyword
' '           Text
'tuple'       Name
' '           Text
'in'          Keyword
' '           Text
'*'           Operator
'item'        Name
'['           Keyword.Type
'2'           Literal.Number.Integer
','           Punctuation
']'           Keyword.Type
'\n'          Text.Whitespace

'            ' Text
'insert'      Name
' '           Text
'properties'  Name
','           Punctuation
' '           Text
'tuple'       Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'-- find constructor' Comment.Single
'\n'          Text.Whitespace

'    '        Text
'constructor' Name
' '           Text
'='           Operator
' '           Text
'nil'         Keyword.Constant
'\n'          Text.Whitespace

'    '        Text
'properties'  Name
' '           Text
'='           Operator
' '           Text
'for'         Keyword
' '           Text
'tuple'       Name
' '           Text
'in'          Keyword
' '           Text
'*'           Operator
'properties'  Name
'\n'          Text.Whitespace

'      '      Text
'if'          Keyword
' '           Text
'tuple'       Name
'['           Keyword.Type
'1'           Literal.Number.Integer
']'           Keyword.Type
' '           Text
'=='          Operator
' '           Text
'constructor_name' Name
'\n'          Text.Whitespace

'        '    Text
'constructor' Name
' '           Text
'='           Operator
' '           Text
'tuple'       Name
'['           Keyword.Type
'2'           Literal.Number.Integer
']'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'nil'         Keyword.Constant
'\n'          Text.Whitespace

'      '      Text
'else'        Keyword
'\n'          Text.Whitespace

'        '    Text
'tuple'       Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'parent_cls_name' Name
' '           Text
'='           Operator
' '           Text
'NameProxy'   Name.Class
' '           Text
'"'           Literal.String.Double
'parent'      Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'    '        Text
'base_name'   Name
' '           Text
'='           Operator
' '           Text
'NameProxy'   Name.Class
' '           Text
'"'           Literal.String.Double
'base'        Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'    '        Text
'self_name'   Name
' '           Text
'='           Operator
' '           Text
'NameProxy'   Name.Class
' '           Text
'"'           Literal.String.Double
'self'        Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'    '        Text
'cls_name'    Name
' '           Text
'='           Operator
' '           Text
'NameProxy'   Name.Class
' '           Text
'"'           Literal.String.Double
'class'       Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'if'          Keyword
' '           Text
'not'         Keyword
' '           Text
'constructor' Name
'\n'          Text.Whitespace

'      '      Text
'constructor' Name
' '           Text
'='           Operator
' '           Text
'build'       Name
'.'           Operator
'fndef'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'args:'       Name.Variable
' '           Text
'{'           Keyword.Type
'{'           Keyword.Type
'"'           Literal.String.Double
'...'         Literal.String
'"'           Literal.String.Double
'}'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'arrow:'      Name.Variable
' '           Text
'"'           Literal.String.Double
'fat'         Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'        '    Text
'body:'       Name.Variable
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'build'       Name
'['           Keyword.Type
'"'           Literal.String.Double
'if'          Literal.String
'"'           Literal.String.Double
']'           Keyword.Type
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'            ' Text
'cond:'       Name.Variable
' '           Text
'parent_cls_name' Name
'\n'          Text.Whitespace

'            ' Text
'then:'       Name.Variable
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'              ' Text
'build'       Name
'.'           Operator
'chain'       Name
' '           Text
'{'           Keyword.Type
' '           Text
'base:'       Name.Variable
' '           Text
'"'           Literal.String.Double
'super'       Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'call'        Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'...'         Literal.String
'"'           Literal.String.Double
'}'           Keyword.Type
'}'           Keyword.Type
' '           Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'            ' Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'else'        Keyword
'\n'          Text.Whitespace

'      '      Text
'smart_node'  Name
' '           Text
'constructor' Name
'\n'          Text.Whitespace

'      '      Text
'constructor' Name
'.'           Operator
'arrow'       Name
' '           Text
'='           Operator
' '           Text
'"'           Literal.String.Double
'fat'         Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'cls'         Name
' '           Text
'='           Operator
' '           Text
'build'       Name
'.'           Operator
'table'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'{'           Keyword.Type
'"'           Literal.String.Double
'__init'      Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'constructor' Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'{'           Keyword.Type
'"'           Literal.String.Double
'__base'      Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'base_name'   Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'{'           Keyword.Type
'"'           Literal.String.Double
'__name'      Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'string'      Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
"'"           Literal.String.Single
'"'           Literal.String
"'"           Literal.String.Single
','           Punctuation
' '           Text
'name'        Name
'}'           Keyword.Type
'}'           Keyword.Type
' '           Text
'-- "quote the string"' Comment.Single
'\n'          Text.Whitespace

'      '      Text
'{'           Keyword.Type
'"'           Literal.String.Double
'__parent'    Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'parent_cls_name' Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'-- look up a name in the class object' Comment.Single
'\n'          Text.Whitespace

'    '        Text
'class_lookup' Name
' '           Text
'='           Operator
' '           Text
'build'       Name
'['           Keyword.Type
'"'           Literal.String.Double
'if'          Literal.String
'"'           Literal.String.Double
']'           Keyword.Type
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'cond:'       Name.Variable
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'exp'         Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'"'           Literal.String.Double
'val'         Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'"'           Literal.String.Double
'=='          Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'"'           Literal.String.Double
'nil'         Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'"'           Literal.String.Double
'and'         Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'parent_cls_name' Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'then:'       Name.Variable
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'parent_cls_name' Name
'\\'          Operator
'index'       Name
'"'           Literal.String.Double
'name'        Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'      '      Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'insert'      Name
' '           Text
'class_lookup' Name
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'else'        Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'val'         Literal.String
'"'           Literal.String.Double
'}'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'cls_mt'      Name
' '           Text
'='           Operator
' '           Text
'build'       Name
'.'           Operator
'table'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'{'           Keyword.Type
'"'           Literal.String.Double
'__index'     Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'build'       Name
'.'           Operator
'fndef'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'args:'       Name.Variable
' '           Text
'{'           Keyword.Type
'{'           Keyword.Type
'"'           Literal.String.Double
'cls'         Literal.String
'"'           Literal.String.Double
'}'           Keyword.Type
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'name'        Literal.String
'"'           Literal.String.Double
'}'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'body:'       Name.Variable
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'build'       Name
'.'           Operator
'assign_one'  Name
' '           Text
'LocalName'   Name.Class
'"'           Literal.String.Double
'val'         Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'build'       Name
'.'           Operator
'chain'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'            ' Text
'base:'       Name.Variable
' '           Text
'"'           Literal.String.Double
'rawget'      Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'call'        Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'{'           Keyword.Type
'base_name'   Name
','           Punctuation
' '           Text
'"'           Literal.String.Double
'name'        Literal.String
'"'           Literal.String.Double
'}'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'class_lookup' Name
'\n'          Text.Whitespace

'        '    Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'}'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'{'           Keyword.Type
'"'           Literal.String.Double
'__call'      Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'build'       Name
'.'           Operator
'fndef'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'args:'       Name.Variable
' '           Text
'{'           Keyword.Type
'{'           Keyword.Type
'"'           Literal.String.Double
'cls'         Literal.String
'"'           Literal.String.Double
'}'           Keyword.Type
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'...'         Literal.String
'"'           Literal.String.Double
'}'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'body:'       Name.Variable
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'build'       Name
'.'           Operator
'assign_one'  Name
' '           Text
'self_name'   Name
','           Punctuation
' '           Text
'build'       Name
'.'           Operator
'chain'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'            ' Text
'base:'       Name.Variable
' '           Text
'"'           Literal.String.Double
'setmetatable' Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'            ' Text
'{'           Keyword.Type
'"'           Literal.String.Double
'call'        Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'{}'          Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'base_name'   Name
'}'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'build'       Name
'.'           Operator
'chain'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'            ' Text
'base:'       Name.Variable
' '           Text
'"'           Literal.String.Double
'cls.__init'  Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'            ' Text
'{'           Keyword.Type
'"'           Literal.String.Double
'call'        Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'{'           Keyword.Type
'self_name'   Name
','           Punctuation
' '           Text
'"'           Literal.String.Double
'...'         Literal.String
'"'           Literal.String.Double
'}'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'self_name'   Name
'\n'          Text.Whitespace

'        '    Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'}'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'cls'         Name
' '           Text
'='           Operator
' '           Text
'build'       Name
'.'           Operator
'chain'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'base:'       Name.Variable
' '           Text
'"'           Literal.String.Double
'setmetatable' Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'      '      Text
'{'           Keyword.Type
'"'           Literal.String.Double
'call'        Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'{'           Keyword.Type
'cls'         Name
','           Punctuation
' '           Text
'cls_mt'      Name
'}'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'value'       Name
' '           Text
'='           Operator
' '           Text
'nil'         Keyword.Constant
'\n'          Text.Whitespace

'    '        Text
'with'        Keyword
' '           Text
'build'       Name
'\n'          Text.Whitespace

'      '      Text
'value'       Name
' '           Text
'='           Operator
' '           Text
'.'           Operator
'block_exp'   Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'Run'         Name.Class
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'          '  Text
'@set'        Name.Variable.Class
' '           Text
'"'           Literal.String.Double
'super'       Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'('           Keyword.Type
'block'       Name
','           Punctuation
' '           Text
'chain'       Name
')'           Keyword.Type
' '           Text
'->'          Name.Function
'\n'          Text.Whitespace

'            ' Text
'if'          Keyword
' '           Text
'chain'       Name
'\n'          Text.Whitespace

'              ' Text
'slice'       Name
' '           Text
'='           Operator
' '           Text
'['           Keyword.Type
'item'        Name
' '           Text
'for'         Keyword
' '           Text
'item'        Name
' '           Text
'in'          Keyword
' '           Text
'*'           Operator
'chain'       Name
'['           Keyword.Type
'3'           Literal.Number.Integer
','           Punctuation
']'           Keyword.Type
']'           Keyword.Type
'\n'          Text.Whitespace

'              ' Text
'new_chain'   Name
' '           Text
'='           Operator
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'chain'       Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'parent_cls_name' Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'              ' Text
'head'        Name
' '           Text
'='           Operator
' '           Text
'slice'       Name
'['           Keyword.Type
'1'           Literal.Number.Integer
']'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'              ' Text
'if'          Keyword
' '           Text
'head'        Name
' '           Text
'=='          Operator
' '           Text
'nil'         Keyword.Constant
'\n'          Text.Whitespace

'                ' Text
'return'      Keyword
' '           Text
'parent_cls_name' Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'              ' Text
'switch'      Keyword
' '           Text
'head'        Name
'['           Keyword.Type
'1'           Literal.Number.Integer
']'           Keyword.Type
'\n'          Text.Whitespace

'                ' Text
'-- calling super, inject calling name and self into chain' Comment.Single
'\n'          Text.Whitespace

'                ' Text
'when'        Keyword
' '           Text
'"'           Literal.String.Double
'call'        Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'                  ' Text
'calling_name' Name
' '           Text
'='           Operator
' '           Text
'block'       Name
'\\'          Operator
'get'         Name
'"'           Literal.String.Double
'current_block' Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'                  ' Text
'slice'       Name
'['           Keyword.Type
'1'           Literal.Number.Integer
']'           Keyword.Type
' '           Text
'='           Operator
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'call'        Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'self'        Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'unpack'      Name
' '           Text
'head'        Name
'['           Keyword.Type
'2'           Literal.Number.Integer
']'           Keyword.Type
'}'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'                  ' Text
'act'         Name
' '           Text
'='           Operator
' '           Text
'if'          Keyword
' '           Text
'ntype'       Name
'('           Keyword.Type
'calling_name' Name
')'           Keyword.Type
' '           Text
'!='          Operator
' '           Text
'"'           Literal.String.Double
'value'       Literal.String
'"'           Literal.String.Double
' '           Text
'then'        Keyword
' '           Text
'"'           Literal.String.Double
'index'       Literal.String
'"'           Literal.String.Double
' '           Text
'else'        Keyword
' '           Text
'"'           Literal.String.Double
'dot'         Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'                  ' Text
'insert'      Name
' '           Text
'new_chain'   Name
','           Punctuation
' '           Text
'{'           Keyword.Type
'act'         Name
','           Punctuation
' '           Text
'calling_name' Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'                ' Text
'-- colon call on super, replace class with self as first arg' Comment.Single
'\n'          Text.Whitespace

'                ' Text
'when'        Keyword
' '           Text
'"'           Literal.String.Double
'colon'       Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'                  ' Text
'call'        Name
' '           Text
'='           Operator
' '           Text
'head'        Name
'['           Keyword.Type
'3'           Literal.Number.Integer
']'           Keyword.Type
'\n'          Text.Whitespace

'                  ' Text
'insert'      Name
' '           Text
'new_chain'   Name
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'dot'         Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'head'        Name
'['           Keyword.Type
'2'           Literal.Number.Integer
']'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'                  ' Text
'slice'       Name
'['           Keyword.Type
'1'           Literal.Number.Integer
']'           Keyword.Type
' '           Text
'='           Operator
' '           Text
'{'           Keyword.Type
' '           Text
'"'           Literal.String.Double
'call'        Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'{'           Keyword.Type
' '           Text
'"'           Literal.String.Double
'self'        Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'unpack'      Name
' '           Text
'call'        Name
'['           Keyword.Type
'2'           Literal.Number.Integer
']'           Keyword.Type
' '           Text
'}'           Keyword.Type
' '           Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'              ' Text
'insert'      Name
' '           Text
'new_chain'   Name
','           Punctuation
' '           Text
'item'        Name
' '           Text
'for'         Keyword
' '           Text
'item'        Name
' '           Text
'in'          Keyword
' '           Text
'*'           Operator
'slice'       Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'              ' Text
'new_chain'   Name
'\n'          Text.Whitespace

'            ' Text
'else'        Keyword
'\n'          Text.Whitespace

'              ' Text
'parent_cls_name' Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'        '    Text
'.'           Operator
'assign_one'  Name
' '           Text
'parent_cls_name' Name
','           Punctuation
' '           Text
'parent_val'  Name
' '           Text
'=='          Operator
' '           Text
'"'           Literal.String.Double
'"'           Literal.String.Double
' '           Text
'and'         Keyword
' '           Text
'"'           Literal.String.Double
'nil'         Literal.String
'"'           Literal.String.Double
' '           Text
'or'          Keyword
' '           Text
'parent_val'  Name
'\n'          Text.Whitespace

'        '    Text
'.'           Operator
'assign_one'  Name
' '           Text
'base_name'   Name
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'table'       Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'properties'  Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'.'           Operator
'assign_one'  Name
' '           Text
'base_name'   Name
'\\'          Operator
'chain'       Name
'"'           Literal.String.Double
'__index'     Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'base_name'   Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'        '    Text
'build'       Name
'['           Keyword.Type
'"'           Literal.String.Double
'if'          Literal.String
'"'           Literal.String.Double
']'           Keyword.Type
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'cond:'       Name.Variable
' '           Text
'parent_cls_name' Name
'\n'          Text.Whitespace

'          '  Text
'then:'       Name.Variable
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'            ' Text
'.'           Operator
'chain'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'              ' Text
'base:'       Name.Variable
' '           Text
'"'           Literal.String.Double
'setmetatable' Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'              ' Text
'{'           Keyword.Type
'"'           Literal.String.Double
'call'        Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'                ' Text
'base_name'   Name
','           Punctuation
'\n'          Text.Whitespace

'                ' Text
'.'           Operator
'chain'       Name
' '           Text
'{'           Keyword.Type
' '           Text
'base:'       Name.Variable
' '           Text
'parent_cls_name' Name
','           Punctuation
'  '          Text
'{'           Keyword.Type
'"'           Literal.String.Double
'dot'         Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'"'           Literal.String.Double
'__base'      Literal.String
'"'           Literal.String.Double
'}'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'              ' Text
'}'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'            ' Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'        '    Text
'.'           Operator
'assign_one'  Name
' '           Text
'cls_name'    Name
','           Punctuation
' '           Text
'cls'         Name
'\n'          Text.Whitespace

'        '    Text
'.'           Operator
'assign_one'  Name
' '           Text
'base_name'   Name
'\\'          Operator
'chain'       Name
'"'           Literal.String.Double
'__class'     Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'cls_name'    Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'        '    Text
'.'           Operator
'group'       Name
' '           Text
'if'          Keyword
' '           Text
'#'           Operator
'statements'  Name
' '           Text
'>'           Operator
' '           Text
'0'           Literal.Number.Integer
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'.'           Operator
'assign_one'  Name
' '           Text
'LocalName'   Name.Class
'"'           Literal.String.Double
'self'        Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'cls_name'    Name
'\n'          Text.Whitespace

'          '  Text
'.'           Operator
'group'       Name
' '           Text
'statements'  Name
'\n'          Text.Whitespace

'        '    Text
'}'           Keyword.Type
' '           Text
'else'        Keyword
' '           Text
'{'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'        '    Text
'cls_name'    Name
'\n'          Text.Whitespace

'      '      Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'      '      Text
'value'       Name
' '           Text
'='           Operator
' '           Text
'.'           Operator
'group'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'.'           Operator
'declare'     Name
' '           Text
'names:'      Name.Variable
' '           Text
'{'           Keyword.Type
'name'        Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'.'           Operator
'assign'      Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'names:'      Name.Variable
' '           Text
'{'           Keyword.Type
'name'        Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'values:'     Name.Variable
' '           Text
'{'           Keyword.Type
'value'       Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'value'       Name
'\n'          Text.Whitespace

'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'class'       Keyword
' '           Text
'Accumulator' Name.Class
'\n'          Text.Whitespace

'  '          Text
'body_idx:'   Name.Variable
' '           Text
'{'           Keyword.Type
' '           Text
'for:'        Name.Variable
' '           Text
'4'           Literal.Number.Integer
','           Punctuation
' '           Text
'while:'      Name.Variable
' '           Text
'3'           Literal.Number.Integer
','           Punctuation
' '           Text
'foreach:'    Name.Variable
' '           Text
'4'           Literal.Number.Integer
' '           Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'new:'        Name.Variable
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'@accum_name' Name.Variable.Class
' '           Text
'='           Operator
' '           Text
'NameProxy'   Name.Class
' '           Text
'"'           Literal.String.Double
'accum'       Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'    '        Text
'@value_name' Name.Variable.Class
' '           Text
'='           Operator
' '           Text
'NameProxy'   Name.Class
' '           Text
'"'           Literal.String.Double
'value'       Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'    '        Text
'@len_name'   Name.Variable.Class
' '           Text
'='           Operator
' '           Text
'NameProxy'   Name.Class
' '           Text
'"'           Literal.String.Double
'len'         Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'-- wraps node and mutates body' Comment.Single
'\n'          Text.Whitespace

'  '          Text
'convert:'    Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'index'       Name
' '           Text
'='           Operator
' '           Text
'@body_idx'   Name.Variable.Class
'['           Keyword.Type
'ntype'       Name
' '           Text
'node'        Name
']'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'node'        Name
'['           Keyword.Type
'index'       Name
']'           Keyword.Type
' '           Text
'='           Operator
' '           Text
'@mutate_body' Name.Variable.Class
' '           Text
'node'        Name
'['           Keyword.Type
'index'       Name
']'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'@wrap'       Name.Variable.Class
' '           Text
'node'        Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'-- wrap the node into a block_exp' Comment.Single
'\n'          Text.Whitespace

'  '          Text
'wrap:'       Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'build'       Name
'.'           Operator
'block_exp'   Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'build'       Name
'.'           Operator
'assign_one'  Name
' '           Text
'@accum_name' Name.Variable.Class
','           Punctuation
' '           Text
'build'       Name
'.'           Operator
'table'       Name
'!'           Operator
'\n'          Text.Whitespace

'      '      Text
'build'       Name
'.'           Operator
'assign_one'  Name
' '           Text
'@len_name'   Name.Variable.Class
','           Punctuation
' '           Text
'0'           Literal.Number.Integer
'\n'          Text.Whitespace

'      '      Text
'node'        Name
'\n'          Text.Whitespace

'      '      Text
'@accum_name' Name.Variable.Class
'\n'          Text.Whitespace

'    '        Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'-- mutates the body of a loop construct to save last value into accumulator' Comment.Single
'\n'          Text.Whitespace

'  '          Text
'-- can optionally skip nil results' Comment.Single
'\n'          Text.Whitespace

'  '          Text
'mutate_body:' Name.Variable
' '           Text
'('           Keyword.Type
'body'        Name
','           Punctuation
' '           Text
'skip_nil'    Name
'='           Operator
'true'        Keyword.Constant
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'val'         Name
' '           Text
'='           Operator
' '           Text
'if'          Keyword
' '           Text
'not'         Keyword
' '           Text
'skip_nil'    Name
' '           Text
'and'         Keyword
' '           Text
'is_singular' Name
' '           Text
'body'        Name
'\n'          Text.Whitespace

'      '      Text
'with'        Keyword
' '           Text
'body'        Name
'['           Keyword.Type
'1'           Literal.Number.Integer
']'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'body'        Name
' '           Text
'='           Operator
' '           Text
'{'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'else'        Keyword
'\n'          Text.Whitespace

'      '      Text
'body'        Name
' '           Text
'='           Operator
' '           Text
'apply_to_last' Name
' '           Text
'body'        Name
','           Punctuation
' '           Text
'('           Keyword.Type
'n'           Name
')'           Keyword.Type
' '           Text
'->'          Name.Function
'\n'          Text.Whitespace

'        '    Text
'build'       Name
'.'           Operator
'assign_one'  Name
' '           Text
'@value_name' Name.Variable.Class
','           Punctuation
' '           Text
'n'           Name
'\n'          Text.Whitespace

'      '      Text
'@value_name' Name.Variable.Class
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'update'      Name
' '           Text
'='           Operator
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'{'           Keyword.Type
'"'           Literal.String.Double
'update'      Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'@len_name'   Name.Variable.Class
','           Punctuation
' '           Text
'"'           Literal.String.Double
'+='          Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'1'           Literal.Number.Integer
'}'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'build'       Name
'.'           Operator
'assign_one'  Name
' '           Text
'@accum_name' Name.Variable.Class
'\\'          Operator
'index'       Name
'('           Keyword.Type
'@len_name'   Name.Variable.Class
')'           Keyword.Type
','           Punctuation
' '           Text
'val'         Name
'\n'          Text.Whitespace

'    '        Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'if'          Keyword
' '           Text
'skip_nil'    Name
'\n'          Text.Whitespace

'      '      Text
'table.insert' Name.Builtin
' '           Text
'body'        Name
','           Punctuation
' '           Text
'build'       Name
'['           Keyword.Type
'"'           Literal.String.Double
'if'          Literal.String
'"'           Literal.String.Double
']'           Keyword.Type
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'cond:'       Name.Variable
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'exp'         Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'@value_name' Name.Variable.Class
','           Punctuation
' '           Text
'"'           Literal.String.Double
'!='          Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'"'           Literal.String.Double
'nil'         Literal.String
'"'           Literal.String.Double
'}'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'then:'       Name.Variable
' '           Text
'update'      Name
'\n'          Text.Whitespace

'      '      Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'else'        Keyword
'\n'          Text.Whitespace

'      '      Text
'table.insert' Name.Builtin
' '           Text
'body'        Name
','           Punctuation
' '           Text
'build'       Name
'.'           Operator
'group'       Name
' '           Text
'update'      Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'body'        Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'default_accumulator' Name
' '           Text
'='           Operator
' '           Text
'('           Keyword.Type
'node'        Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'  '          Text
'Accumulator' Name.Class
'!'           Operator
'\\'          Operator
'convert'     Name
' '           Text
'node'        Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'\n'          Text.Whitespace

'implicitly_return' Name
' '           Text
'='           Operator
' '           Text
'('           Keyword.Type
'scope'       Name
')'           Keyword.Type
' '           Text
'->'          Name.Function
'\n'          Text.Whitespace

'  '          Text
'fn'          Name
' '           Text
'='           Operator
' '           Text
'('           Keyword.Type
'stm'         Name
')'           Keyword.Type
' '           Text
'->'          Name.Function
'\n'          Text.Whitespace

'    '        Text
't'           Name
' '           Text
'='           Operator
' '           Text
'ntype'       Name
' '           Text
'stm'         Name
'\n'          Text.Whitespace

'    '        Text
'if'          Keyword
' '           Text
'types'       Name
'.'           Operator
'manual_return' Name
'['           Keyword.Type
't'           Name
']'           Keyword.Type
' '           Text
'or'          Keyword
' '           Text
'not'         Keyword
' '           Text
'types'       Name
'.'           Operator
'is_value'    Name
' '           Text
'stm'         Name
'\n'          Text.Whitespace

'      '      Text
'stm'         Name
'\n'          Text.Whitespace

'    '        Text
'elseif'      Keyword
' '           Text
'types'       Name
'.'           Operator
'cascading'   Name
'['           Keyword.Type
't'           Name
']'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'scope'       Name
'.'           Operator
'transform'   Name
'.'           Operator
'statement'   Name
' '           Text
'stm'         Name
','           Punctuation
' '           Text
'fn'          Name
'\n'          Text.Whitespace

'    '        Text
'else'        Keyword
'\n'          Text.Whitespace

'      '      Text
'if'          Keyword
' '           Text
't'           Name
' '           Text
'=='          Operator
' '           Text
'"'           Literal.String.Double
'comprehension' Literal.String
'"'           Literal.String.Double
' '           Text
'and'         Keyword
' '           Text
'not'         Keyword
' '           Text
'types'       Name
'.'           Operator
'comprehension_has_value' Name
' '           Text
'stm'         Name
'\n'          Text.Whitespace

'        '    Text
'stm'         Name
'\n'          Text.Whitespace

'      '      Text
'else'        Keyword
'\n'          Text.Whitespace

'        '    Text
'{'           Keyword.Type
'"'           Literal.String.Double
'return'      Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'stm'         Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'fn'          Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'Value'       Name.Class
' '           Text
'='           Operator
' '           Text
'Transformer' Name.Class
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'  '          Text
'for:'        Name.Variable
' '           Text
'default_accumulator' Name
'\n'          Text.Whitespace

'  '          Text
'while:'      Name.Variable
' '           Text
'default_accumulator' Name
'\n'          Text.Whitespace

'  '          Text
'foreach:'    Name.Variable
' '           Text
'default_accumulator' Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'comprehension:' Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'a'           Name
' '           Text
'='           Operator
' '           Text
'Accumulator' Name.Class
'!'           Operator
'\n'          Text.Whitespace

'    '        Text
'node'        Name
' '           Text
'='           Operator
' '           Text
'@transform'  Name.Variable.Class
'.'           Operator
'statement'   Name
' '           Text
'node'        Name
','           Punctuation
' '           Text
'('           Keyword.Type
'exp'         Name
')'           Keyword.Type
' '           Text
'->'          Name.Function
'\n'          Text.Whitespace

'      '      Text
'a'           Name
'\\'          Operator
'mutate_body' Name
' '           Text
'{'           Keyword.Type
'exp'         Name
'}'           Keyword.Type
','           Punctuation
' '           Text
'false'       Keyword.Constant
'\n'          Text.Whitespace

'    '        Text
'a'           Name
'\\'          Operator
'wrap'        Name
' '           Text
'node'        Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'tblcomprehension:' Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'_'           Name
','           Punctuation
' '           Text
'key_exp'     Name
','           Punctuation
' '           Text
'value_exp'   Name
','           Punctuation
' '           Text
'clauses'     Name
' '           Text
'='           Operator
' '           Text
'unpack'      Name
' '           Text
'node'        Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'accum'       Name
' '           Text
'='           Operator
' '           Text
'NameProxy'   Name.Class
' '           Text
'"'           Literal.String.Double
'tbl'         Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'    '        Text
'dest'        Name
' '           Text
'='           Operator
' '           Text
'build'       Name
'.'           Operator
'chain'       Name
' '           Text
'{'           Keyword.Type
' '           Text
'base:'       Name.Variable
' '           Text
'accum'       Name
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'index'       Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'key_exp'     Name
'}'           Keyword.Type
' '           Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'inner'       Name
' '           Text
'='           Operator
' '           Text
'build'       Name
'.'           Operator
'assign_one'  Name
' '           Text
'dest'        Name
','           Punctuation
' '           Text
'value_exp'   Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'build'       Name
'.'           Operator
'block_exp'   Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'build'       Name
'.'           Operator
'assign_one'  Name
' '           Text
'accum'       Name
','           Punctuation
' '           Text
'build'       Name
'.'           Operator
'table'       Name
'!'           Operator
'\n'          Text.Whitespace

'      '      Text
'construct_comprehension' Name
' '           Text
'{'           Keyword.Type
'inner'       Name
'}'           Keyword.Type
','           Punctuation
' '           Text
'clauses'     Name
'\n'          Text.Whitespace

'      '      Text
'accum'       Name
'\n'          Text.Whitespace

'    '        Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'fndef:'      Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'smart_node'  Name
' '           Text
'node'        Name
'\n'          Text.Whitespace

'    '        Text
'node'        Name
'.'           Operator
'body'        Name
' '           Text
'='           Operator
' '           Text
'apply_to_last' Name
' '           Text
'node'        Name
'.'           Operator
'body'        Name
','           Punctuation
' '           Text
'implicitly_return' Name
' '           Text
'self'        Name.Builtin.Pseudo
'\n'          Text.Whitespace

'    '        Text
'node'        Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'if:'         Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
' '           Text
'build'       Name
'.'           Operator
'block_exp'   Name
' '           Text
'{'           Keyword.Type
' '           Text
'node'        Name
' '           Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'  '          Text
'with:'       Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
' '           Text
'build'       Name
'.'           Operator
'block_exp'   Name
' '           Text
'{'           Keyword.Type
' '           Text
'node'        Name
' '           Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'  '          Text
'switch:'     Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'build'       Name
'.'           Operator
'block_exp'   Name
' '           Text
'{'           Keyword.Type
' '           Text
'node'        Name
' '           Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'-- pull out colon chain' Comment.Single
'\n'          Text.Whitespace

'  '          Text
'chain:'      Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'stub'        Name
' '           Text
'='           Operator
' '           Text
'node'        Name
'['           Keyword.Type
'#'           Operator
'node'        Name
']'           Keyword.Type
'\n'          Text.Whitespace

'    '        Text
'if'          Keyword
' '           Text
'type'        Name.Builtin
'('           Keyword.Type
'stub'        Name
')'           Keyword.Type
' '           Text
'=='          Operator
' '           Text
'"'           Literal.String.Double
'table'       Literal.String
'"'           Literal.String.Double
' '           Text
'and'         Keyword
' '           Text
'stub'        Name
'['           Keyword.Type
'1'           Literal.Number.Integer
']'           Keyword.Type
' '           Text
'=='          Operator
' '           Text
'"'           Literal.String.Double
'colon_stub'  Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'      '      Text
'table.remove' Name.Builtin
' '           Text
'node'        Name
','           Punctuation
' '           Text
'#'           Operator
'node'        Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'      '      Text
'base_name'   Name
' '           Text
'='           Operator
' '           Text
'NameProxy'   Name.Class
' '           Text
'"'           Literal.String.Double
'base'        Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'      '      Text
'fn_name'     Name
' '           Text
'='           Operator
' '           Text
'NameProxy'   Name.Class
' '           Text
'"'           Literal.String.Double
'fn'          Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'      '      Text
'is_super'    Name
' '           Text
'='           Operator
' '           Text
'node'        Name
'['           Keyword.Type
'2'           Literal.Number.Integer
']'           Keyword.Type
' '           Text
'=='          Operator
' '           Text
'"'           Literal.String.Double
'super'       Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'      '      Text
'@transform'  Name.Variable.Class
'.'           Operator
'value'       Name
' '           Text
'build'       Name
'.'           Operator
'block_exp'   Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'build'       Name
'.'           Operator
'assign'      Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'names:'      Name.Variable
' '           Text
'{'           Keyword.Type
'base_name'   Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'values:'     Name.Variable
' '           Text
'{'           Keyword.Type
'node'        Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'        '    Text
'build'       Name
'.'           Operator
'assign'      Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'names:'      Name.Variable
' '           Text
'{'           Keyword.Type
'fn_name'     Name
'}'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'values:'     Name.Variable
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'            ' Text
'build'       Name
'.'           Operator
'chain'       Name
' '           Text
'{'           Keyword.Type
' '           Text
'base:'       Name.Variable
' '           Text
'base_name'   Name
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'dot'         Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'stub'        Name
'['           Keyword.Type
'2'           Literal.Number.Integer
']'           Keyword.Type
'}'           Keyword.Type
' '           Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'        '    Text
'build'       Name
'.'           Operator
'fndef'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'args:'       Name.Variable
' '           Text
'{'           Keyword.Type
'{'           Keyword.Type
'"'           Literal.String.Double
'...'         Literal.String
'"'           Literal.String.Double
'}'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'body:'       Name.Variable
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'            ' Text
'build'       Name
'.'           Operator
'chain'       Name
' '           Text
'{'           Keyword.Type
'\n'          Text.Whitespace

'              ' Text
'base:'       Name.Variable
' '           Text
'fn_name'     Name
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'call'        Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'{'           Keyword.Type
'is_super'    Name
' '           Text
'and'         Keyword
' '           Text
'"'           Literal.String.Double
'self'        Literal.String
'"'           Literal.String.Double
' '           Text
'or'          Keyword
' '           Text
'base_name'   Name
','           Punctuation
' '           Text
'"'           Literal.String.Double
'...'         Literal.String
'"'           Literal.String.Double
'}'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'            ' Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'          '  Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'        '    Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'      '      Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'  '          Text
'block_exp:'  Name.Variable
' '           Text
'('           Keyword.Type
'node'        Name
')'           Keyword.Type
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'    '        Text
'_'           Name
','           Punctuation
' '           Text
'body'        Name
' '           Text
'='           Operator
' '           Text
'unpack'      Name
' '           Text
'node'        Name
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'fn'          Name
' '           Text
'='           Operator
' '           Text
'nil'         Keyword.Constant
'\n'          Text.Whitespace

'    '        Text
'arg_list'    Name
' '           Text
'='           Operator
' '           Text
'{'           Keyword.Type
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'insert'      Name
' '           Text
'body'        Name
','           Punctuation
' '           Text
'Run'         Name.Class
' '           Text
'=>'          Name.Function
'\n'          Text.Whitespace

'      '      Text
'if'          Keyword
' '           Text
'@has_varargs' Name.Variable.Class
'\n'          Text.Whitespace

'        '    Text
'insert'      Name
' '           Text
'arg_list'    Name
','           Punctuation
' '           Text
'"'           Literal.String.Double
'...'         Literal.String
'"'           Literal.String.Double
'\n'          Text.Whitespace

'        '    Text
'insert'      Name
' '           Text
'fn'          Name
'.'           Operator
'args'        Name
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'...'         Literal.String
'"'           Literal.String.Double
'}'           Keyword.Type
'\n'          Text.Whitespace

'\n'          Text.Whitespace

'    '        Text
'fn'          Name
' '           Text
'='           Operator
' '           Text
'smart_node'  Name
' '           Text
'build'       Name
'.'           Operator
'fndef'       Name
' '           Text
'body:'       Name.Variable
' '           Text
'body'        Name
'\n'          Text.Whitespace

'    '        Text
'build'       Name
'.'           Operator
'chain'       Name
' '           Text
'{'           Keyword.Type
' '           Text
'base:'       Name.Variable
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'parens'      Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'fn'          Name
'}'           Keyword.Type
','           Punctuation
' '           Text
'{'           Keyword.Type
'"'           Literal.String.Double
'call'        Literal.String
'"'           Literal.String.Double
','           Punctuation
' '           Text
'arg_list'    Name
'}'           Keyword.Type
' '           Text
'}'           Keyword.Type
'\n'          Text.Whitespace

'}'           Keyword.Type
'\n'          Text.Whitespace
