---input---
/**
 * This is not really a valid Haxe file, but just an demo...
 */

package;
package net.onthewings;

import net.onthewings.Test;
import net.onthewings.*;

using Lambda;
using net.onthewings.Test;

#if flash8
// Haxe code specific for flash player 8
#elseif flash
// Haxe code specific for flash platform (any version)
#elseif js
// Haxe code specific for javascript plaform
#elseif neko
// Haxe code specific for neko plaform
#else 
// do something else
    #error  // will display an error "Not implemented on this platform"
    #error "Custom error message" // will display an error "Custom error message"
#end

0; // Int
-134; // Int
0xFF00; // Int

123.0; // Float
.14179; // Float
13e50; // Float
-1e-99; // Float

"hello"; // String
"hello \"world\" !"; // String
'hello "world" !'; // String

true; // Bool
false; // Bool

null; // Unknown<0>

~/[a-z]+/i; // EReg : regular expression

var point = { "x" : 1, "y" : -5 };

{
    var x;
    var y = 3;
    var z : String;
    var w : String = "";
    var a, b : Bool, c : Int = 0;
}

//haxe3 pattern matching
switch(e.expr) {
	case EConst(CString(s)) if (StringTools.startsWith(s, "foo")):
		"1";
	case EConst(CString(s)) if (StringTools.startsWith(s, "bar")):
		"2";
	case EConst(CInt(i)) if (switch(Std.parseInt(i) * 2) { case 4: true; case _: false; }):
		"3";
	case EConst(_):
		"4";
	case _:
		"5";
}

switch [true, 1, "foo"] {
	case [true, 1, "foo"]: "0";
	case [true, 1, _]: "1";
	case _: "_";
}


class Test <T:Void->Void> {
	private function new():Void {
		inline function innerFun(a:Int, b:Int):Int {
			return readOnlyField = a + b;
		}
		
		_innerFun(1, 2.3);
	}
	
	static public var instance(get,null):Test;
	static function get_instance():Test {
		return instance != null ? instance : instance = new Test();
	}
}

@:native("Test") private class Test2 {}

extern class Ext {}

@:macro class M {
	@:macro static function test(e:Array<Expr>):ExprOf<String> {
		return macro "ok";
	}
}

enum Color {
    Red;
    Green;
    Blue;
    Grey( v : Int );
    Rgb( r : Int, g : Int, b : Int );
    Alpha( a : Int, col : Color );
}

class Colors {
    static function toInt( c : Color ) : Int {
        return switch( c ) {
            case Red: 0xFF0000;
            case Green: 0x00FF00;
            case Blue: 0x0000FF;
            case Grey(v): (v << 16) | (v << 8) | v;
            case Rgb(r,g,b): (r << 16) | (g << 8) | b;
            case Alpha(a,c): (a << 24) | (toInt(c) & 0xFFFFFF);
        }
    }
}

class EvtQueue<T : (Event, EventDispatcher)> {
    var evt : T;
}

typedef DS = Dynamic<String>;
typedef Pt = {
	var x:Float;
	var y:Float;
	@:optional var z:Float; /* optional z */
	function add(pt:Pt):Void;
}
typedef Pt2 = {
	x:Float,
	y:Float,
	?z:Float, //optional z
	add : Point -> Void,
}


//top-level class members
public function test();
private var attr(get, set) = 1;


//pre-proc number
public static inline function indexOf<T>(arr:Array<T>, v:T) : Int
{
	#if (haxe_ver >= 3.1) 
	return arr.indexOf(v);
	#else
		#if (flash || js)
		return untyped arr.indexOf(v);
		#else
		return std.Lambda.indexOf(arr, v);
		#end
	#end
}

//macro reification
var e = macro var $myVar = 0;
var e = macro ${v}.toLowerCase();
var e = macro o.$myField;
var e = macro { $myField : 0 };
var e = macro $i{varName}++;
var e = macro $v{myStr};
var args = [macro "sub", macro 3];
var e = macro "Hello".toLowerCase($a{args});
(macro $i{tmp}.addAtom($v{name}, $atom)).finalize(op.pos);

var c = macro class MyClass {
    public function new() { }
    public function $funcName() {
        trace($v{funcName} + " was called");
    }
}

var c = macro interface IClass {};

//macro class could have no name...
var def = macro class {
	private inline function new(loader) this = loader;
	private var loader(get,never) : $loaderType;
	inline private function get_loader() : $loaderType return this;
};

//ECheckType
var f = (123:Float);

---tokens---
'/**\n * This is not really a valid Haxe file, but just an demo...\n */' Comment.Multiline
'\n\n'        Text

'package'     Keyword.Namespace
';'           Punctuation
'\n'          Text

'package'     Keyword.Namespace
' '           Text
'net'         Name.Namespace
'.'           Punctuation
'onthewings'  Name.Namespace
';'           Punctuation
'\n\n'        Text

'import'      Keyword.Namespace
' '           Text
'net'         Name.Namespace
'.'           Punctuation
'onthewings'  Name.Namespace
'.'           Punctuation
'Test'        Name.Namespace
';'           Punctuation
'\n'          Text

'import'      Keyword.Namespace
' '           Text
'net'         Name.Namespace
'.'           Punctuation
'onthewings'  Name.Namespace
'.'           Punctuation
'*'           Keyword
';'           Punctuation
'\n\n'        Text

'using'       Keyword.Namespace
' '           Text
'Lambda'      Name.Namespace
';'           Punctuation
'\n'          Text

'using'       Keyword.Namespace
' '           Text
'net'         Name.Namespace
'.'           Punctuation
'onthewings'  Name.Namespace
'.'           Punctuation
'Test'        Name.Namespace
';'           Punctuation
'\n\n'        Text

'#if'         Comment.Preproc
' '           Comment.Preproc
'flash8'      Comment.Preproc
'\n'          Text

'// Haxe code specific for flash player 8' Comment.Single
'\n'          Text

'#elseif'     Comment.Preproc
' '           Comment.Preproc
'flash'       Comment.Preproc
'\n'          Text

'// Haxe code specific for flash platform (any version)' Comment.Single
'\n'          Text

'#elseif'     Comment.Preproc
' '           Comment.Preproc
'js'          Comment.Preproc
'\n'          Text

'// Haxe code specific for javascript plaform' Comment.Single
'\n'          Text

'#elseif'     Comment.Preproc
' '           Comment.Preproc
'neko'        Comment.Preproc
'\n'          Text

'// Haxe code specific for neko plaform' Comment.Single
'\n'          Text

'#else'       Comment.Preproc
' \n'         Text

'// do something else' Comment.Single
'\n    '      Text
'#error'      Comment.Preproc
'  '          Comment.Preproc
'// will display an error "Not implemented on this platform"' Comment.Single
'\n    '      Text
'#error'      Comment.Preproc
' '           Comment.Preproc
'"'           Literal.String.Double
'C'           Literal.String.Double
'u'           Literal.String.Double
's'           Literal.String.Double
't'           Literal.String.Double
'o'           Literal.String.Double
'm'           Literal.String.Double
' '           Literal.String.Double
'e'           Literal.String.Double
'r'           Literal.String.Double
'r'           Literal.String.Double
'o'           Literal.String.Double
'r'           Literal.String.Double
' '           Literal.String.Double
'm'           Literal.String.Double
'e'           Literal.String.Double
's'           Literal.String.Double
's'           Literal.String.Double
'a'           Literal.String.Double
'g'           Literal.String.Double
'e'           Literal.String.Double
'"'           Literal.String.Double
' '           Text
'// will display an error "Custom error message"' Comment.Single
'\n'          Text

'#end'        Comment.Preproc
'\n\n'        Text

''            Text
'0'           Literal.Number.Integer
';'           Punctuation
' '           Text
'// Int'      Comment.Single
'\n'          Text

''            Text
'-'           Operator
'134'         Literal.Number.Integer
';'           Punctuation
' '           Text
'// Int'      Comment.Single
'\n'          Text

''            Text
'0xFF00'      Literal.Number.Hex
';'           Punctuation
' '           Text
'// Int'      Comment.Single
'\n\n'        Text

''            Text
'123.0'       Literal.Number.Float
';'           Punctuation
' '           Text
'// Float'    Comment.Single
'\n'          Text

''            Text
'.14179'      Literal.Number.Float
';'           Punctuation
' '           Text
'// Float'    Comment.Single
'\n'          Text

''            Text
'13e50'       Literal.Number.Float
';'           Punctuation
' '           Text
'// Float'    Comment.Single
'\n'          Text

''            Text
'-'           Operator
'1e-99'       Literal.Number.Float
';'           Punctuation
' '           Text
'// Float'    Comment.Single
'\n\n'        Text

''            Text
'"'           Literal.String.Double
'h'           Literal.String.Double
'e'           Literal.String.Double
'l'           Literal.String.Double
'l'           Literal.String.Double
'o'           Literal.String.Double
'"'           Literal.String.Double
';'           Punctuation
' '           Text
'// String'   Comment.Single
'\n'          Text

''            Text
'"'           Literal.String.Double
'h'           Literal.String.Double
'e'           Literal.String.Double
'l'           Literal.String.Double
'l'           Literal.String.Double
'o'           Literal.String.Double
' '           Literal.String.Double
'\\"'         Literal.String.Escape
'w'           Literal.String.Double
'o'           Literal.String.Double
'r'           Literal.String.Double
'l'           Literal.String.Double
'd'           Literal.String.Double
'\\"'         Literal.String.Escape
' '           Literal.String.Double
'!'           Literal.String.Double
'"'           Literal.String.Double
';'           Punctuation
' '           Text
'// String'   Comment.Single
'\n'          Text

''            Text
"'"           Literal.String.Single
'h'           Literal.String.Single
'e'           Literal.String.Single
'l'           Literal.String.Single
'l'           Literal.String.Single
'o'           Literal.String.Single
' '           Literal.String.Single
'"'           Literal.String.Single
'w'           Literal.String.Single
'o'           Literal.String.Single
'r'           Literal.String.Single
'l'           Literal.String.Single
'd'           Literal.String.Single
'"'           Literal.String.Single
' '           Literal.String.Single
'!'           Literal.String.Single
"'"           Literal.String.Single
';'           Punctuation
' '           Text
'// String'   Comment.Single
'\n\n'        Text

''            Text
'true'        Keyword.Constant
';'           Punctuation
' '           Text
'// Bool'     Comment.Single
'\n'          Text

''            Text
'false'       Keyword.Constant
';'           Punctuation
' '           Text
'// Bool'     Comment.Single
'\n\n'        Text

''            Text
'null'        Keyword.Constant
';'           Punctuation
' '           Text
'// Unknown<0>' Comment.Single
'\n\n'        Text

''            Text
'~/[a-z]+/i'  Literal.String.Regex
';'           Punctuation
' '           Text
'// EReg : regular expression' Comment.Single
'\n\n'        Text

''            Text
'var'         Keyword.Declaration
' '           Text
'point'       Text
' '           Text
'='           Operator
' '           Text
'{'           Punctuation
' '           Text
'"'           Literal.String.Double
'x'           Literal.String.Double
'"'           Literal.String.Double
' '           Text
':'           Punctuation
' '           Text
'1'           Literal.Number.Integer
','           Punctuation
' '           Text
'"'           Literal.String.Double
'y'           Literal.String.Double
'"'           Literal.String.Double
' '           Text
':'           Punctuation
' '           Text
'-'           Operator
'5'           Literal.Number.Integer
' '           Text
'}'           Punctuation
';'           Punctuation
'\n\n'        Text

''            Text
'{'           Punctuation
'\n    '      Text
'var'         Keyword.Declaration
' '           Text
'x'           Text
';'           Punctuation
'\n    '      Text
'var'         Keyword.Declaration
' '           Text
'y'           Text
' '           Text
'='           Operator
' '           Text
'3'           Literal.Number.Integer
';'           Punctuation
'\n    '      Text
'var'         Keyword.Declaration
' '           Text
'z'           Text
' '           Text
':'           Punctuation
' '           Text
'String'      Name
';'           Punctuation
'\n    '      Text
'var'         Keyword.Declaration
' '           Text
'w'           Text
' '           Text
':'           Punctuation
' '           Text
'String'      Name
' '           Text
'='           Operator
' '           Text
'"'           Literal.String.Double
'"'           Literal.String.Double
';'           Punctuation
'\n    '      Text
'var'         Keyword.Declaration
' '           Text
'a'           Text
','           Punctuation
' '           Text
'b'           Text
' '           Text
':'           Punctuation
' '           Text
'Bool'        Name
','           Punctuation
' '           Text
'c'           Text
' '           Text
':'           Punctuation
' '           Text
'Int'         Name
' '           Text
'='           Operator
' '           Text
'0'           Literal.Number.Integer
';'           Punctuation
'\n'          Text

'}'           Punctuation
'\n\n'        Text

'//haxe3 pattern matching' Comment.Single
'\n'          Text

''            Text
'switch'      Keyword
'('           Punctuation
'e'           Name
'.'           Punctuation
'expr'        Name
')'           Punctuation
' '           Text
'{'           Punctuation
'\n\t'        Text
'case'        Keyword
' '           Text
'EConst'      Name
'('           Punctuation
'CString'     Name
'('           Punctuation
's'           Name
')'           Punctuation
')'           Punctuation
' '           Text
'if'          Keyword
' '           Text
'('           Punctuation
'StringTools' Name
'.'           Punctuation
'startsWith'  Name
'('           Punctuation
's'           Name
','           Punctuation
' '           Text
'"'           Literal.String.Double
'f'           Literal.String.Double
'o'           Literal.String.Double
'o'           Literal.String.Double
'"'           Literal.String.Double
')'           Punctuation
')'           Punctuation
':'           Punctuation
'\n\t\t'      Text
''            Keyword
'"'           Literal.String.Double
'1'           Literal.String.Double
'"'           Literal.String.Double
';'           Punctuation
'\n\t'        Text
'case'        Keyword
' '           Text
'EConst'      Name
'('           Punctuation
'CString'     Name
'('           Punctuation
's'           Name
')'           Punctuation
')'           Punctuation
' '           Text
'if'          Keyword
' '           Text
'('           Punctuation
'StringTools' Name
'.'           Punctuation
'startsWith'  Name
'('           Punctuation
's'           Name
','           Punctuation
' '           Text
'"'           Literal.String.Double
'b'           Literal.String.Double
'a'           Literal.String.Double
'r'           Literal.String.Double
'"'           Literal.String.Double
')'           Punctuation
')'           Punctuation
':'           Punctuation
'\n\t\t'      Text
''            Keyword
'"'           Literal.String.Double
'2'           Literal.String.Double
'"'           Literal.String.Double
';'           Punctuation
'\n\t'        Text
'case'        Keyword
' '           Text
'EConst'      Name
'('           Punctuation
'CInt'        Name
'('           Punctuation
'i'           Name
')'           Punctuation
')'           Punctuation
' '           Text
'if'          Keyword
' '           Text
'('           Punctuation
'switch'      Keyword
'('           Punctuation
'Std'         Name
'.'           Punctuation
'parseInt'    Name
'('           Punctuation
'i'           Name
')'           Punctuation
' '           Text
'*'           Operator
' '           Text
'2'           Literal.Number.Integer
')'           Punctuation
' '           Text
'{'           Punctuation
' '           Text
'case'        Keyword
' '           Text
'4'           Literal.Number.Integer
':'           Punctuation
' '           Text
''            Keyword
'true'        Keyword.Constant
';'           Punctuation
' '           Text
'case'        Keyword
' '           Text
'_'           Name
':'           Punctuation
' '           Text
''            Keyword
'false'       Keyword.Constant
';'           Punctuation
' '           Text
'}'           Punctuation
')'           Punctuation
':'           Punctuation
'\n\t\t'      Text
''            Keyword
'"'           Literal.String.Double
'3'           Literal.String.Double
'"'           Literal.String.Double
';'           Punctuation
'\n\t'        Text
'case'        Keyword
' '           Text
'EConst'      Name
'('           Punctuation
'_'           Name
')'           Punctuation
':'           Punctuation
'\n\t\t'      Text
''            Keyword
'"'           Literal.String.Double
'4'           Literal.String.Double
'"'           Literal.String.Double
';'           Punctuation
'\n\t'        Text
'case'        Keyword
' '           Text
'_'           Name
':'           Punctuation
'\n\t\t'      Text
''            Keyword
'"'           Literal.String.Double
'5'           Literal.String.Double
'"'           Literal.String.Double
';'           Punctuation
'\n'          Text

'}'           Punctuation
'\n\n'        Text

''            Text
'switch'      Keyword
' '           Text
'['           Punctuation
'true'        Keyword.Constant
','           Punctuation
' '           Text
'1'           Literal.Number.Integer
','           Punctuation
' '           Text
'"'           Literal.String.Double
'f'           Literal.String.Double
'o'           Literal.String.Double
'o'           Literal.String.Double
'"'           Literal.String.Double
']'           Punctuation
' '           Text
'{'           Punctuation
'\n\t'        Text
'case'        Keyword
' '           Text
'['           Punctuation
'true'        Keyword.Constant
','           Punctuation
' '           Text
'1'           Literal.Number.Integer
','           Punctuation
' '           Text
'"'           Literal.String.Double
'f'           Literal.String.Double
'o'           Literal.String.Double
'o'           Literal.String.Double
'"'           Literal.String.Double
']'           Punctuation
':'           Punctuation
' '           Text
''            Keyword
'"'           Literal.String.Double
'0'           Literal.String.Double
'"'           Literal.String.Double
';'           Punctuation
'\n\t'        Text
'case'        Keyword
' '           Text
'['           Punctuation
'true'        Keyword.Constant
','           Punctuation
' '           Text
'1'           Literal.Number.Integer
','           Punctuation
' '           Text
'_'           Name
']'           Punctuation
':'           Punctuation
' '           Text
''            Keyword
'"'           Literal.String.Double
'1'           Literal.String.Double
'"'           Literal.String.Double
';'           Punctuation
'\n\t'        Text
'case'        Keyword
' '           Text
'_'           Name
':'           Punctuation
' '           Text
''            Keyword
'"'           Literal.String.Double
'_'           Literal.String.Double
'"'           Literal.String.Double
';'           Punctuation
'\n'          Text

'}'           Punctuation
'\n\n\n'      Text

'class'       Keyword.Declaration
' '           Text
'Test'        Name
' '           Text
'<'           Punctuation
'T'           Name
':'           Punctuation
'Void'        Name
'->'          Punctuation
'Void'        Name
'>'           Punctuation
' '           Text
'{'           Punctuation
'\n\t'        Text
'private'     Keyword.Declaration
' '           Text
'function'    Keyword.Declaration
' '           Text
'new'         Name.Function
'('           Punctuation
')'           Punctuation
':'           Punctuation
'Void'        Name
' '           Text
'{'           Punctuation
'\n\t\t'      Text
'inline'      Keyword.Declaration
' '           Text
'function'    Keyword.Declaration
' '           Text
'innerFun'    Name.Function
'('           Punctuation
'a'           Name
':'           Punctuation
'Int'         Name
','           Punctuation
' '           Text
'b'           Name
':'           Punctuation
'Int'         Name
')'           Punctuation
':'           Punctuation
'Int'         Name
' '           Text
'{'           Punctuation
'\n\t\t\t'    Text
'return'      Keyword
' '           Text
'readOnlyField' Name
' '           Text
'='           Operator
' '           Text
'a'           Name
' '           Text
'+'           Operator
' '           Text
'b'           Name
';'           Punctuation
'\n\t\t'      Text
'}'           Punctuation
'\n\t\t\n\t\t' Text
'_innerFun'   Name
'('           Punctuation
'1'           Literal.Number.Integer
','           Punctuation
' '           Text
'2.3'         Literal.Number.Float
')'           Punctuation
';'           Punctuation
'\n\t'        Text
'}'           Punctuation
'\n\t\n\t'    Text
'static'      Keyword.Declaration
' '           Text
'public'      Keyword.Declaration
' '           Text
'var'         Keyword.Declaration
' '           Text
'instance'    Text
'('           Punctuation
'get'         Keyword
','           Punctuation
'null'        Keyword
')'           Punctuation
':'           Punctuation
'Test'        Name
';'           Punctuation
'\n\t'        Text
'static'      Keyword.Declaration
' '           Text
'function'    Keyword.Declaration
' '           Text
'get_instance' Name.Function
'('           Punctuation
')'           Punctuation
':'           Punctuation
'Test'        Name
' '           Text
'{'           Punctuation
'\n\t\t'      Text
'return'      Keyword
' '           Text
'instance'    Name
' '           Text
'!='          Operator
' '           Text
'null'        Keyword.Constant
' '           Text
'?'           Operator
' '           Text
'instance'    Name
' '           Text
':'           Operator
' '           Text
'instance'    Name
' '           Text
'='           Operator
' '           Text
'new'         Keyword
' '           Text
'Test'        Name
'('           Punctuation
')'           Punctuation
';'           Punctuation
'\n\t'        Text
'}'           Punctuation
'\n'          Text

'}'           Punctuation
'\n\n'        Text

'@'           Name.Decorator
':'           Name.Decorator
'native'      Name.Decorator
'('           Name.Decorator
'"'           Literal.String.Double
'T'           Literal.String.Double
'e'           Literal.String.Double
's'           Literal.String.Double
't'           Literal.String.Double
'"'           Literal.String.Double
')'           Name.Decorator
' '           Text
'private'     Keyword.Declaration
' '           Text
'class'       Keyword.Declaration
' '           Text
'Test2'       Name
' '           Text
'{'           Punctuation
'}'           Punctuation
'\n\n'        Text

'extern'      Keyword.Declaration
' '           Text
'class'       Keyword.Declaration
' '           Text
'Ext'         Name
' '           Text
'{'           Punctuation
'}'           Punctuation
'\n\n'        Text

'@'           Name.Decorator
':'           Name.Decorator
'macro'       Name.Decorator
' '           Text
'class'       Keyword.Declaration
' '           Text
'M'           Name
' '           Text
'{'           Punctuation
'\n\t'        Text
'@'           Name.Decorator
':'           Name.Decorator
'macro'       Name.Decorator
' '           Text
'static'      Keyword.Declaration
' '           Text
'function'    Keyword.Declaration
' '           Text
'test'        Name.Function
'('           Punctuation
'e'           Name
':'           Punctuation
'Array'       Name
'<'           Punctuation
'Expr'        Name
'>'           Punctuation
')'           Punctuation
':'           Punctuation
'ExprOf'      Name
'<'           Punctuation
'String'      Name
'>'           Punctuation
' '           Text
'{'           Punctuation
'\n\t\t'      Text
'return'      Keyword
' '           Text
'macro'       Keyword
' '           Text
'"'           Literal.String.Double
'o'           Literal.String.Double
'k'           Literal.String.Double
'"'           Literal.String.Double
';'           Punctuation
'\n\t'        Text
'}'           Punctuation
'\n'          Text

'}'           Punctuation
'\n\n'        Text

'enum'        Keyword.Declaration
' '           Text
'Color'       Name
' '           Text
'{'           Punctuation
'\n    '      Text
'Red'         Name
';'           Punctuation
'\n    '      Text
'Green'       Name
';'           Punctuation
'\n    '      Text
'Blue'        Name
';'           Punctuation
'\n    '      Text
'Grey'        Name
'('           Punctuation
' '           Text
'v'           Name
' '           Text
':'           Punctuation
' '           Text
'Int'         Name
' '           Text
')'           Punctuation
';'           Punctuation
'\n    '      Text
'Rgb'         Name
'('           Punctuation
' '           Text
'r'           Name
' '           Text
':'           Punctuation
' '           Text
'Int'         Name
','           Punctuation
' '           Text
'g'           Name
' '           Text
':'           Punctuation
' '           Text
'Int'         Name
','           Punctuation
' '           Text
'b'           Name
' '           Text
':'           Punctuation
' '           Text
'Int'         Name
' '           Text
')'           Punctuation
';'           Punctuation
'\n    '      Text
'Alpha'       Name
'('           Punctuation
' '           Text
'a'           Name
' '           Text
':'           Punctuation
' '           Text
'Int'         Name
','           Punctuation
' '           Text
'col'         Name
' '           Text
':'           Punctuation
' '           Text
'Color'       Name
' '           Text
')'           Punctuation
';'           Punctuation
'\n'          Text

'}'           Punctuation
'\n\n'        Text

'class'       Keyword.Declaration
' '           Text
'Colors'      Name
' '           Text
'{'           Punctuation
'\n    '      Text
'static'      Keyword.Declaration
' '           Text
'function'    Keyword.Declaration
' '           Text
'toInt'       Name.Function
'('           Punctuation
' '           Text
'c'           Name
' '           Text
':'           Punctuation
' '           Text
'Color'       Name
' '           Text
')'           Punctuation
' '           Text
':'           Punctuation
' '           Text
'Int'         Name
' '           Text
'{'           Punctuation
'\n        '  Text
'return'      Keyword
' '           Text
'switch'      Keyword
'('           Punctuation
' '           Text
'c'           Name
' '           Text
')'           Punctuation
' '           Text
'{'           Punctuation
'\n            ' Text
'case'        Keyword
' '           Text
'Red'         Name
':'           Punctuation
' '           Text
''            Keyword
'0xFF0000'    Literal.Number.Hex
';'           Punctuation
'\n            ' Text
'case'        Keyword
' '           Text
'Green'       Name
':'           Punctuation
' '           Text
''            Keyword
'0x00FF00'    Literal.Number.Hex
';'           Punctuation
'\n            ' Text
'case'        Keyword
' '           Text
'Blue'        Name
':'           Punctuation
' '           Text
''            Keyword
'0x0000FF'    Literal.Number.Hex
';'           Punctuation
'\n            ' Text
'case'        Keyword
' '           Text
'Grey'        Name
'('           Punctuation
'v'           Name
')'           Punctuation
':'           Punctuation
' '           Text
''            Keyword
'('           Punctuation
'v'           Name
' '           Text
'<<'          Operator
' '           Text
'16'          Literal.Number.Integer
')'           Punctuation
' '           Text
'|'           Operator
' '           Text
'('           Punctuation
'v'           Name
' '           Text
'<<'          Operator
' '           Text
'8'           Literal.Number.Integer
')'           Punctuation
' '           Text
'|'           Operator
' '           Text
'v'           Name
';'           Punctuation
'\n            ' Text
'case'        Keyword
' '           Text
'Rgb'         Name
'('           Punctuation
'r'           Name
','           Punctuation
'g'           Name
','           Punctuation
'b'           Name
')'           Punctuation
':'           Punctuation
' '           Text
''            Keyword
'('           Punctuation
'r'           Name
' '           Text
'<<'          Operator
' '           Text
'16'          Literal.Number.Integer
')'           Punctuation
' '           Text
'|'           Operator
' '           Text
'('           Punctuation
'g'           Name
' '           Text
'<<'          Operator
' '           Text
'8'           Literal.Number.Integer
')'           Punctuation
' '           Text
'|'           Operator
' '           Text
'b'           Name
';'           Punctuation
'\n            ' Text
'case'        Keyword
' '           Text
'Alpha'       Name
'('           Punctuation
'a'           Name
','           Punctuation
'c'           Name
')'           Punctuation
':'           Punctuation
' '           Text
''            Keyword
'('           Punctuation
'a'           Name
' '           Text
'<<'          Operator
' '           Text
'24'          Literal.Number.Integer
')'           Punctuation
' '           Text
'|'           Operator
' '           Text
'('           Punctuation
'toInt'       Name
'('           Punctuation
'c'           Name
')'           Punctuation
' '           Text
'&'           Operator
' '           Text
'0xFFFFFF'    Literal.Number.Hex
')'           Punctuation
';'           Punctuation
'\n        '  Text
'}'           Punctuation
'\n    '      Text
'}'           Punctuation
'\n'          Text

'}'           Punctuation
'\n\n'        Text

'class'       Keyword.Declaration
' '           Text
'EvtQueue'    Name
'<'           Punctuation
'T'           Name
' '           Text
':'           Punctuation
' '           Text
'('           Punctuation
'Event'       Name
','           Punctuation
' '           Text
'EventDispatcher' Name
')'           Punctuation
'>'           Punctuation
' '           Text
'{'           Punctuation
'\n    '      Text
'var'         Keyword.Declaration
' '           Text
'evt'         Text
' '           Text
':'           Punctuation
' '           Text
'T'           Name
';'           Punctuation
'\n'          Text

'}'           Punctuation
'\n\n'        Text

'typedef'     Keyword.Declaration
' '           Text
'DS'          Name
' '           Text
'='           Operator
' '           Text
'Dynamic'     Name
'<'           Punctuation
'String'      Name
'>'           Punctuation
';'           Punctuation
'\n'          Text

'typedef'     Keyword.Declaration
' '           Text
'Pt'          Name
' '           Text
'='           Operator
' '           Text
'{'           Punctuation
'\n\t'        Text
'var'         Keyword.Declaration
' '           Text
'x'           Text
':'           Punctuation
'Float'       Name
';'           Punctuation
'\n\t'        Text
'var'         Keyword.Declaration
' '           Text
'y'           Text
':'           Punctuation
'Float'       Name
';'           Punctuation
'\n\t'        Text
'@'           Name.Decorator
':'           Name.Decorator
'optional'    Name.Decorator
' '           Text
'var'         Keyword.Declaration
' '           Text
'z'           Text
':'           Punctuation
'Float'       Name
';'           Punctuation
' '           Text
'/* optional z */' Comment.Multiline
'\n\t'        Text
'function'    Keyword.Declaration
' '           Text
'add'         Name.Function
'('           Punctuation
'pt'          Name
':'           Punctuation
'Pt'          Name
')'           Punctuation
':'           Punctuation
'Void'        Name
';'           Punctuation
'\n'          Text

'}'           Punctuation
'\n'          Text

'typedef'     Keyword.Declaration
' '           Text
'Pt2'         Name
' '           Text
'='           Operator
' '           Text
'{'           Punctuation
'\n\t'        Text
'x'           Name
':'           Punctuation
'Float'       Name
','           Punctuation
'\n\t'        Text
'y'           Name
':'           Punctuation
'Float'       Name
','           Punctuation
'\n\t'        Text
'?'           Punctuation
'z'           Name
':'           Punctuation
'Float'       Name
','           Punctuation
' '           Text
'//optional z' Comment.Single
'\n\t'        Text
'add'         Name
' '           Text
':'           Punctuation
' '           Text
'Point'       Name
' '           Text
'->'          Punctuation
' '           Text
'Void'        Name
','           Punctuation
'\n'          Text

'}'           Punctuation
'\n\n\n'      Text

'//top-level class members' Comment.Single
'\n'          Text

''            Text
'public'      Keyword.Declaration
' '           Text
'function'    Keyword.Declaration
' '           Text
'test'        Name.Function
'('           Punctuation
')'           Punctuation
';'           Punctuation
'\n'          Text

'private'     Keyword.Declaration
' '           Text
''            Text
'var'         Keyword.Declaration
' '           Text
'attr'        Text
'('           Punctuation
'get'         Keyword
','           Punctuation
' '           Text
'set'         Keyword
')'           Punctuation
' '           Text
'='           Operator
' '           Text
'1'           Literal.Number.Integer
';'           Punctuation
'\n\n\n'      Text

'//pre-proc number' Comment.Single
'\n'          Text

''            Text
'public'      Keyword.Declaration
' '           Text
'static'      Keyword.Declaration
' '           Text
'inline'      Keyword.Declaration
' '           Text
'function'    Keyword.Declaration
' '           Text
'indexOf'     Name.Function
'<'           Punctuation
'T'           Name
'>'           Punctuation
'('           Punctuation
'arr'         Name
':'           Punctuation
'Array'       Name
'<'           Punctuation
'T'           Name
'>'           Punctuation
','           Punctuation
' '           Text
'v'           Name
':'           Punctuation
'T'           Name
')'           Punctuation
' '           Text
':'           Punctuation
' '           Text
'Int'         Name
'\n'          Text

'{'           Punctuation
'\n\t'        Text
'#if'         Comment.Preproc
' '           Comment.Preproc
'('           Comment.Preproc
'haxe_ver'    Comment.Preproc
' '           Comment.Preproc
'>='          Comment.Preproc
' '           Comment.Preproc
'3.1'         Literal.Number.Float
')'           Comment.Preproc
' \n\t'       Text
'return'      Keyword
' '           Text
'arr'         Name
'.'           Punctuation
'indexOf'     Name
'('           Punctuation
'v'           Name
')'           Punctuation
';'           Punctuation
'\n\t'        Text
'#else'       Comment.Preproc
'\n\t\t'      Text
'#if'         Comment.Preproc
' '           Comment.Preproc
'('           Comment.Preproc
'flash'       Comment.Preproc
' '           Comment.Preproc
'||'          Comment.Preproc
' '           Comment.Preproc
'js'          Comment.Preproc
')'           Comment.Preproc
'\n\t\t'      Text
'return'      Keyword
' '           Text
'untyped'     Keyword
' '           Text
'arr'         Name
'.'           Punctuation
'indexOf'     Name
'('           Punctuation
'v'           Name
')'           Punctuation
';'           Punctuation
'\n\t\t'      Text
'#else'       Comment.Preproc
'\n\t\t'      Text
'return'      Keyword
' '           Text
'std'         Name
'.'           Punctuation
'Lambda'      Name
'.'           Punctuation
'indexOf'     Name
'('           Punctuation
'arr'         Name
','           Punctuation
' '           Text
'v'           Name
')'           Punctuation
';'           Punctuation
'\n\t\t'      Text
'#end'        Comment.Preproc
'\n\t'        Text
'#end'        Comment.Preproc
'\n'          Text

'}'           Punctuation
'\n\n'        Text

'//macro reification' Comment.Single
'\n'          Text

''            Text
'var'         Keyword.Declaration
' '           Text
'e'           Text
' '           Text
'='           Operator
' '           Text
'macro'       Keyword
' '           Text
'var'         Keyword.Declaration
' '           Text
'$myVar'      Text
' '           Text
'='           Operator
' '           Text
'0'           Literal.Number.Integer
';'           Punctuation
'\n'          Text

''            Text
'var'         Keyword.Declaration
' '           Text
'e'           Text
' '           Text
'='           Operator
' '           Text
'macro'       Keyword
' '           Text
'$'           Name
'{'           Punctuation
'v'           Name
'}'           Punctuation
'.'           Punctuation
'toLowerCase' Name
'('           Punctuation
')'           Punctuation
';'           Punctuation
'\n'          Text

''            Text
'var'         Keyword.Declaration
' '           Text
'e'           Text
' '           Text
'='           Operator
' '           Text
'macro'       Keyword
' '           Text
'o'           Name
'.'           Punctuation
'$myField'    Name
';'           Punctuation
'\n'          Text

''            Text
'var'         Keyword.Declaration
' '           Text
'e'           Text
' '           Text
'='           Operator
' '           Text
'macro'       Keyword
' '           Text
'{'           Punctuation
' '           Text
'$myField'    Name
' '           Text
':'           Punctuation
' '           Text
'0'           Literal.Number.Integer
' '           Text
'}'           Punctuation
';'           Punctuation
'\n'          Text

''            Text
'var'         Keyword.Declaration
' '           Text
'e'           Text
' '           Text
'='           Operator
' '           Text
'macro'       Keyword
' '           Text
'$i'          Name
'{'           Punctuation
'varName'     Name
'}'           Punctuation
'++'          Operator
';'           Punctuation
'\n'          Text

''            Text
'var'         Keyword.Declaration
' '           Text
'e'           Text
' '           Text
'='           Operator
' '           Text
'macro'       Keyword
' '           Text
'$v'          Name
'{'           Punctuation
'myStr'       Name
'}'           Punctuation
';'           Punctuation
'\n'          Text

''            Text
'var'         Keyword.Declaration
' '           Text
'args'        Text
' '           Text
'='           Operator
' '           Text
'['           Punctuation
'macro'       Keyword
' '           Text
'"'           Literal.String.Double
's'           Literal.String.Double
'u'           Literal.String.Double
'b'           Literal.String.Double
'"'           Literal.String.Double
','           Punctuation
' '           Text
'macro'       Keyword
' '           Text
'3'           Literal.Number.Integer
']'           Punctuation
';'           Punctuation
'\n'          Text

''            Text
'var'         Keyword.Declaration
' '           Text
'e'           Text
' '           Text
'='           Operator
' '           Text
'macro'       Keyword
' '           Text
'"'           Literal.String.Double
'H'           Literal.String.Double
'e'           Literal.String.Double
'l'           Literal.String.Double
'l'           Literal.String.Double
'o'           Literal.String.Double
'"'           Literal.String.Double
'.'           Punctuation
'toLowerCase' Name
'('           Punctuation
'$a'          Name
'{'           Punctuation
'args'        Name
'}'           Punctuation
')'           Punctuation
';'           Punctuation
'\n'          Text

''            Text
'('           Punctuation
'macro'       Keyword
' '           Text
'$i'          Name
'{'           Punctuation
'tmp'         Name
'}'           Punctuation
'.'           Punctuation
'addAtom'     Name
'('           Punctuation
'$v'          Name
'{'           Punctuation
'name'        Name
'}'           Punctuation
','           Punctuation
' '           Text
'$atom'       Name
')'           Punctuation
')'           Punctuation
'.'           Punctuation
'finalize'    Name
'('           Punctuation
'op'          Name
'.'           Punctuation
'pos'         Name
')'           Punctuation
';'           Punctuation
'\n\n'        Text

''            Text
'var'         Keyword.Declaration
' '           Text
'c'           Text
' '           Text
'='           Operator
' '           Text
'macro'       Keyword
' '           Text
'class'       Keyword.Declaration
' '           Text
'MyClass'     Name
' '           Text
'{'           Punctuation
'\n    '      Text
'public'      Keyword.Declaration
' '           Text
'function'    Keyword.Declaration
' '           Text
'new'         Name.Function
'('           Punctuation
')'           Punctuation
' '           Text
'{'           Punctuation
' '           Text
'}'           Punctuation
'\n    '      Text
'public'      Keyword.Declaration
' '           Text
'function'    Keyword.Declaration
' '           Text
'$funcName'   Name.Function
'('           Punctuation
')'           Punctuation
' '           Text
'{'           Punctuation
'\n        '  Text
'trace'       Name
'('           Punctuation
'$v'          Name
'{'           Punctuation
'funcName'    Name
'}'           Punctuation
' '           Text
'+'           Operator
' '           Text
'"'           Literal.String.Double
' '           Literal.String.Double
'w'           Literal.String.Double
'a'           Literal.String.Double
's'           Literal.String.Double
' '           Literal.String.Double
'c'           Literal.String.Double
'a'           Literal.String.Double
'l'           Literal.String.Double
'l'           Literal.String.Double
'e'           Literal.String.Double
'd'           Literal.String.Double
'"'           Literal.String.Double
')'           Punctuation
';'           Punctuation
'\n    '      Text
'}'           Punctuation
'\n'          Text

'}'           Punctuation
'\n\n'        Text

''            Text
'var'         Keyword.Declaration
' '           Text
'c'           Text
' '           Text
'='           Operator
' '           Text
'macro'       Keyword
' '           Text
'interface'   Keyword.Declaration
' '           Text
'IClass'      Name
' '           Text
'{'           Punctuation
'}'           Punctuation
';'           Punctuation
'\n\n'        Text

'//macro class could have no name...' Comment.Single
'\n'          Text

''            Text
'var'         Keyword.Declaration
' '           Text
'def'         Text
' '           Text
'='           Operator
' '           Text
'macro'       Keyword
' '           Text
'class'       Keyword.Declaration
' '           Text
'{'           Punctuation
'\n\t'        Text
'private'     Keyword.Declaration
' '           Text
'inline'      Keyword.Declaration
' '           Text
'function'    Keyword.Declaration
' '           Text
'new'         Name.Function
'('           Punctuation
'loader'      Name
')'           Punctuation
' '           Text
'this'        Keyword
' '           Text
'='           Operator
' '           Text
'loader'      Name
';'           Punctuation
'\n\t'        Text
'private'     Keyword.Declaration
' '           Text
'var'         Keyword.Declaration
' '           Text
'loader'      Text
'('           Punctuation
'get'         Keyword
','           Punctuation
'never'       Keyword
')'           Punctuation
' '           Text
':'           Punctuation
' '           Text
'$loaderType' Name
';'           Punctuation
'\n\t'        Text
'inline'      Keyword.Declaration
' '           Text
'private'     Keyword.Declaration
' '           Text
'function'    Keyword.Declaration
' '           Text
'get_loader'  Name.Function
'('           Punctuation
')'           Punctuation
' '           Text
':'           Punctuation
' '           Text
'$loaderType' Name
' '           Text
'return'      Keyword
' '           Text
'this'        Keyword
';'           Punctuation
'\n'          Text

'}'           Punctuation
';'           Punctuation
'\n\n'        Text

'//ECheckType' Comment.Single
'\n'          Text

''            Text
'var'         Keyword.Declaration
' '           Text
'f'           Text
' '           Text
'='           Operator
' '           Text
'('           Punctuation
'123'         Literal.Number.Integer
':'           Punctuation
'Float'       Name
')'           Punctuation
';'           Punctuation
'\n'          Text
