//=======================================================================
//================ Lex class support ====================================
//=======================================================================
// 	lexClass:
//		name		= c_PYString
//		parent		= c_PY
//		parent:dyn	= c_PY
//		parent:file = <*.py|*.pyw|*.pys>	
//
//		children		= 0
//		children		= class1, class2, ...
//
//		previous:class			=	
//		previous:tag			=	
//		previous:tag:separators	=	
//
//		start:class		= 
//		start:Tag		= '"'
//
//		skip:Tag		= '\"'
//
//		end:class		= //
//		end:Tag			= '"'
//		end:separators	= ' '
//
//		Token:tag		= 'if', 'for', 'while', 'do'
//		Token:start:separators	= 
//		Token:end:separators	= 
//-----------------------------------------------------------------------
//---------------- Attributes -------------------------------------------
//-----------------------------------------------------------------------
//	txt:colorFG	= 0xffc0c0 // color value in hex format. default: black	
//	txt:colorBK	= 0xffc0c0 // color value in hex format. default: white		
//
//	txt:colorSelFG	= 0xffc0c0 // color value in hex format. default: white
//	txt:colorSelBK	= 0xffc0c0 // color value in hex format. default: black
//
//	txt:Bold	= 1 // {1,0} default: 0
//	txt:Italic	= 1 // {1,0} default: 0
//	txt:Underline	= 1 // {1,0} default: 0
//
//	caseSensitive	= 1 // {1,0} default: 0
//
//	Collapsable	= 1 // {1,0} default: 0
//	CollapsedText	= '/*...*/' // quoted string value. default: '[..]'	
//
//	ParseOnScreen	= 1 // {1,0} default: 0
// 	
//-----------------------------------------------------------------------
//* Global attributes ***************************************************
//-----------------------------------------------------------------------
// 	global:FirstParseInSeparateThread	= 1		// {0,1} default=1
// 	global:EditReparceInSeparateThread	= 1		// {0,1} default=1
// 	global:ConfigChangedReparceInSeparateThread= 1 // {0,1} default=1
// 	global:EditReparceTimeout_ms	= 500		// default= 500 ms; time out for start reparse after last key was pressed.
// 	global:MaxBackParseOffset		= 100		// default= 100 chars; maximum back buffer size. Some times parser look back for the text from current position.
// 	global:OnScreenSchCacheLifeTime_sec = 180	// default= 180 sec; -1 and 0 means infinite; time out for on screen parsed pices of text. for memory using optimization.
// 	global:ParserThreadIdleLifeTime_sec = 60	// default=60 sec; -1 and 0 means infinite; time out for existing of parser thread when parser idle (no parse requests).
	
/////////////////////////////////////////////////////////////////////////

//=======================================================================
//================ Variables support ====================================
//=======================================================================
// NON operation - example:   @alpha:not
//
// @alpha	= a-z, A-Z
// @digit	= 0-9
// @HexDdigit	= 0-9, a-f, A-F
// @specs	= "~`!@#$%^&*()_-+=\\|{}[];:'\",.<>/?"
// @EOL		= End Of Line
//---------------------------------------------
// special tags:  '\\', '\'', '\t', '\r', '\n'
/////////////////////////////////////////////////////////////////////////

lexClass: 
	name			= c_PY	
	parent:file		= <*.py|*.pyw|*.pys>	
	caseSensitive		= 1
	DisplayName       = 'Normal Text'

	//global:FirstParseInSeparateThread	= 0
	global:EditReparceInSeparateThread	= 1

	//global:EditReparceTimeout_ms	= 250
	//global:MaxBackParseOffset		= 100
	//global:OnScreenSchCacheLifeTime_sec = 60
	//global:ParserThreadIdleLifeTime_sec = -1

lexClass:
	name		= c_PYCommentML1	
	parent		= c_PY 
    children	= c_URL		

	//children	= c_PascalCodeBlock_End		
	start:Tag	= '"""'	
	end:Tag 	= '"""'
	Collapsable	= 1 
	CollapsedText	= '###'
    txt:colorFG	= 0x00CF00
	DisplayName		= 'Comment (Multi-Line)'

lexClass:
	name		= c_PYCommentML2	
	parent		= c_PY 
    children	= c_URL		

	//children	= c_PascalCodeBlock_End		
	start:Tag	= '\'\'\''	
	end:Tag 	= '\'\'\''
	Collapsable	= 1 
	CollapsedText	= '###'
    txt:colorFG	= 0x00CF00
	DisplayName		= 'Comment (Multi-Line)'

lexClass: 	
	name		= c_URL	
	ParseOnScreen	= 0
	parent:dyn	= c_PY
	caseSensitive	= 0
	children		= 0
	previous:tag	= @specs, ' ', '\t', @eol
	start:Tag		= 'http:'
	end:separators	= ' ', '\t', '*', '"', @eol
	txt:colorBK	= 0xC0FFC0
	txt:Underline	= 1
	DisplayName		= 'URL'

lexClass: 	
	name			= c_String	
	parent:dyn		= c_PY
	children		= c_URL
	start:Tag		= '"'
//	skip:Tag		= '\\"', '\\\r\n', '\\\n\r', '\\\n', '\\\r'	
	end:Tag			= '"', @eol
	txt:colorFG		= 0xE00000
	DisplayName		= 'String (Double Quotes)'

lexClass: 	
	name			= c_String_char	
	parent:dyn		= c_PY
	children		= 0
	start:Tag		= '\''
	//skip:Tag		= '\\"', '\\\r\n', '\\\n\r', '\\\n', '\\\r'	
	end:Tag			= '\'', @eol
	txt:colorFG		= 0xE00000
	DisplayName		= 'String (Single Quotes)'


lexClass:	
	name		= c_PYCommentSL
//	ParseOnScreen	= 0
	parent		= c_PY
	children	= c_URL		
	start:tag	='#'
//	skip:Tag	= '\\\r\n', '\\\n\r', '\\\n', '\\\r'	
	end:tag		= @eol
	txt:colorFG	= 0x00A000
	DisplayName		= 'Comment (Single-Line)'
	
lexClass:	
	name		= c_PYKeywords
	ParseOnScreen	= 0
	parent:Dyn	= c_PY
	children	= 0
	DisplayName		= 'Keyword'

    token:tag	= 'and'
    token:tag	= 'assert'
    token:tag	= 'break'
    token:tag	= 'continue'
    token:tag	= 'del'
    token:tag	= 'elif'
    token:tag	= 'else'
    token:tag	= 'except'
    token:tag	= 'exec'
    token:tag	= 'finally'
    token:tag	= 'for'
    token:tag	= 'from'
    token:tag	= 'global'
    token:tag	= 'if'
    token:tag	= 'return'
    token:tag	= 'try'
    token:tag	= 'import'
    token:tag	= 'in'
    token:tag	= 'is'
    token:tag	= 'not'
    token:tag	= 'or'
    token:tag	= 'pass'
    token:tag	= 'print'
    token:tag	= 'raise'
    token:tag	= 'while'
    token:tag	= 'def'
    token:tag	= 'class'
    token:tag	= 'yield'
	token:start:separators	= @specs, ' ', @eol
	token:end:separators	= @specs, ' ', @eol

	txt:colorFG	= 0x0000FF


lexClass:	
	name		= c_PYExceptions
	ParseOnScreen	= 0
	parent:Dyn	= c_PY
	children	= 0
	DisplayName		= 'Exception'

    token:tag	= 'ArithmeticError'
    token:tag	= 'AssertionError'
    token:tag	= 'AttributeError'
    token:tag	= 'EOFError'
    token:tag	= 'EnvironmentError'
    token:tag	= 'Exception'
    token:tag	= 'FloatingPointError'
    token:tag	= 'IOError'
    token:tag	= 'ImportError'
    token:tag	= 'IndexError'
    token:tag	= 'KeyError'
    token:tag	= 'KeyboardInterrupt'
    token:tag	= 'LookupError'
    token:tag	= 'MemoryError'
    token:tag	= 'NameError'
    token:tag	= 'NotImplementeError'
    token:tag	= 'OSError'
    token:tag	= 'OverflowError'
    token:tag	= 'RuntimeError'
    token:tag	= 'StandarError'
    token:tag	= 'StopIteration'
    token:tag	= 'SyntaxError'
    token:tag	= 'SystemError'
    token:tag	= 'SystemExit'
    token:tag	= 'TypeError'
    token:tag	= 'ValueError'
    token:tag	= 'ZeroDivisionError'
	token:start:separators	= @specs, ' ',  @eol
	token:end:separators	= @specs, ' ',  @eol

	txt:colorFG	= 0x0000FF

lexClass:	
	name		= c_PYBuiltins
	ParseOnScreen	= 0
	parent:Dyn	= c_PY
	children	= 0
	DisplayName		= 'Builtins'

            token:tag	= 'Ellipsis'
            token:tag	= 'False'
            token:tag	= 'None'
            token:tag	= 'True'
            token:tag	= 'lambda'
            token:tag	= '__debug__'
            token:tag	= '__doc__'
            token:tag	= '__import__'
            token:tag	= '__name__'
            token:tag	= '__class__'
            token:tag	= '__future__'
            token:tag	= '__init__'
            token:tag	= '__del__'
            token:tag	= '__call__'
            token:tag	= '__iter__'
            token:tag	= '__getattr__'
            token:tag	= '__setattr__'
            token:tag	= '__delattr__'
            token:tag	= '__getitem__'
            token:tag	= '__setitem__'
            token:tag	= '__delitem__'
            token:tag	= '__getslice__'
            token:tag	= '__setslice__'
            token:tag	= '__delslice__'
            token:tag	= '__get__'
            token:tag	= '__set__'
            token:tag	= '__delete__'
            token:tag	= '__str__'
            token:tag	= '__repr__'
            token:tag	= '__cmp__'
            token:tag	= '__rcmp__'
            token:tag	= '__nonzero__'
            token:tag	= '__len__'
            token:tag	= '__lt__'
            token:tag	= '__le__'
            token:tag	= '__gt__'
            token:tag	= '__ge__'
            token:tag	= '__eq__'
            token:tag	= '__ne__'
            token:tag	= '__add__'
            token:tag	= '__sub__'
            token:tag	= '__mul__'
            token:tag	= '__mod__'
            token:tag	= '__div__'
            token:tag	= '__floordiv__'
            token:tag	= '__truediv__'
            token:tag	= '__divmod__'
            token:tag	= '__pow__'
            token:tag	= '__lshift__'
            token:tag	= '__rshift__'
            token:tag	= '__and__'
            token:tag	= '__or__'
            token:tag	= '__xor__'
            token:tag	= '__radd__'
            token:tag	= '__rsub__'
            token:tag	= '__rmul__'
            token:tag	= '__rdiv__'
            token:tag	= '__rmod__'
            token:tag	= '__rdivmod__'
            token:tag	= '__rpow__'
            token:tag	= '__rlshift__'
            token:tag	= '__rrshift__'
            token:tag	= '__rand__'
            token:tag	= '__ror__'
            token:tag	= '__rxor__'
            token:tag	= '__iadd__'
            token:tag	= '__isub__'
            token:tag	= '__imul__'
            token:tag	= '__idiv__'
            token:tag	= '__imod__'
            token:tag	= '__ipow__'
            token:tag	= '__ilshift__'
            token:tag	= '__irshift__'
            token:tag	= '__iand__'
            token:tag	= '__ior__'
            token:tag	= '__ixor__'
            token:tag	= '__neg__'
            token:tag	= '__pos__'
            token:tag	= '__abs__'
            token:tag	= '__invert__'
            token:tag	= '__int__'
            token:tag	= '__long__'
            token:tag	= '__float__'
            token:tag	= '__complex__'
            token:tag	= '__oct__'
            token:tag	= '__hex__'
            token:tag	= '__coerce__'
            token:tag	= '__contains__'
            token:tag	= '__hash__'
            token:tag	= '__slots__'
            token:tag	= '__iter__'
            token:tag	= '__next__'
            token:tag	= 'abs'
            token:tag	= 'apply'
            token:tag	= 'buffer'
            token:tag	= 'callable'
            token:tag	= 'chr'
            token:tag	= 'classmethod'
            token:tag	= 'cmp'
            token:tag	= 'coerce'
            token:tag	= 'compile'
            token:tag	= 'complex'
            token:tag	= 'delattr'
            token:tag	= 'dir'
            token:tag	= 'divmod'
            token:tag	= 'eval'
            token:tag	= 'execfile'
            token:tag	= 'exit'
            token:tag	= 'filter'
            token:tag	= 'float'
            token:tag	= 'getattr'
            token:tag	= 'getattribute'
            token:tag	= 'globals'
            token:tag	= 'hasattr'
            token:tag	= 'hash'
            token:tag	= 'hex'
            token:tag	= 'id'
            token:tag	= 'input'
            token:tag	= 'int'
            token:tag	= 'intern'
            token:tag	= 'isinstance'
            token:tag	= 'issubclass'
            token:tag	= 'iter'
            token:tag	= 'len'
            token:tag	= 'list'
            token:tag	= 'locals'
            token:tag	= 'long'
            token:tag	= 'map'
            token:tag	= 'max'
            token:tag	= 'min'
            token:tag	= 'oct'
            token:tag	= 'open'
            token:tag	= 'ord'
            token:tag	= 'pow'
            token:tag	= 'property'
            token:tag	= 'quit'
            token:tag	= 'range'
            token:tag	= 'raw_input'
            token:tag	= 'reduce'
            token:tag	= 'reload'
            token:tag	= 'repr'
            token:tag	= 'round'
            token:tag	= 'setattr'
            token:tag	= 'slice'
            token:tag	= 'str'
            token:tag	= 'string'
            token:tag	= 'super'
            token:tag	= 'tuple'
            token:tag	= 'type'
            token:tag	= 'vars'
            token:tag	= 'xrange'
            token:tag	= 'file'
            token:tag	= 'dict'
            token:tag	= 'classmethod'
            token:tag	= 'staticmethod'
	token:start:separators	= @specs, ' ',  @eol
	token:end:separators	= @specs, ' ',  @eol

	txt:colorFG	= 0x990099
lexClass:	
	name		= c_PYSpecs
	ParseOnScreen	= 0
	parent:Dyn	= c_PY
	children	= 0
	DisplayName		= 'Specs'

            token:tag	= @specs

	txt:colorFG	= 0x0000FF

lexClass:	
	name		= c_PYDigit
	ParseOnScreen	= 0
	parent:Dyn	= c_PY
	children	= 0
	DisplayName		= 'Digit'

            token:tag	= @digit

	txt:colorFG	= 0x8000FF