//=======================================================================
//================ Lex class support ====================================
//=======================================================================
// 		lexClass:
//		+	name		= c_CPPString
//		+	parent:file = <*.h|*.cpp|*.c>		
//		+	parent		= c_CPP
//		+	parent:dyn	= c_CPP
//
//		+	children		= 0
//		+	children		= class1, class2, ...
//
//			previous:class			=	
//			previous:tag			=	
//			previous:tag:separators	=	
//
//			start:class		= 
//			start:Tag		= '"'
//
//			skip:Tag		= '\"'
//
//			end:class		= //
//			end:class:Parent = this	
//			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
/////////////////////////////////////////////////////////////////////////

//=======================================================================
//================ 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_LEX_CLASS		
	parent:file		= <*.schclass>	
	caseSensitive	= 0
	//txt:colorBK	= 0xfff7ff
//:lexClass

lexClass:	
	name		= c_LexCommentSL	
	parent:dyn	= c_LEX_CLASS
	children	= 0
	start:tag	='//'	
	end:tag		= @eol
	txt:colorFG	= 0x00A000
//:lexClass
	
lexClass:	
	name					= c_LexClass_section_header			
	parent					= c_LEX_CLASS, c_LexClass_section
	children				= 0
	Token:tag				= 'lexClass:'
	Token:start:separators	= @eol, ' ', '\t'
	Token:end:separators	= @eol, ' ', '\t'
	
	txt:colorFG	= 0x0000FF
	txt:colorBK	= 0xAAAAAA
	txt:Bold	= 1
//:lexClass

lexClass:	        
	name			= c_LexClass_section
	parent			= c_LEX_CLASS, c_LexClass_section
	start:class		= c_LexClass_section_header
	//end:separators	= 'lexClass:'
	end:class	=  c_LexClass_section_end
	txt:colorFG		= 0xFF0000		
	Collapsable	= 1
//:lexClass
		
lexClass:	
	name			= c_LexClass_section_end
	parent			= c_LexClass_section
	previous:tag			= @eol
	previous:tag:separators	= ' ', '\t'
	start:tag		= '//:lexClass'
	end:tag			= @EOL
	txt:colorFG		= 0x00A000		
	txt:colorBK		= 0xE0E0E0		
	//txt:bold		= 1		
//:lexClass

lexClass:	
	name		= c_LexClass_CommaSeparator
	ParseOnScreen = 0
	parent:dyn	= c_LexClass_section
	children	= 0
	token:tag	= ','		
	txt:colorFG	= 0x808080
	txt:Bold	= 0
//:lexClass

lexClass:	
	name		= c_LexClass_Tag_str
	ParseOnScreen = 0
	parent:dyn	= c_LexClass_section
	children	= c_LexClass_Tag_str_specs
	start:tag	= '\''		
	end:tag		= '\'', @eol 
	txt:colorFG	= 0xA00000	
//:lexClass

lexClass:	
	name		= c_LexClass_Tag_str_specs
	ParseOnScreen = 0
	parent		= c_LexClass_Tag_str
	children	= 0		
	Token:tag		= '\\\\'
	Token:tag		= '\\t', '\\n', '\\r', '\\a', '\\b', '\\v', '\\f', '\\\'' 
	txt:colorFG	= 0xC00000	
	txt:bold	= 1
//:lexClass
		
lexClass:	
	name		= c_LexClass_Tag_var
	ParseOnScreen = 0
	parent:dyn	= c_LexClass_section
	children	= 0	
	
	token:tag = '@alpha:not', '@digit:not', '@HexDigit:not', '@specs:not', '@EOL:not'
	token:tag = '@alpha', '@digit', '@HexDdigit', '@specs', '@EOL'	
	Token:start:separators	= '=', ' ', '\t', ','
	Token:end:separators	= ' ', '\t', ',', @EOL
	
	txt:colorFG	= 0x00A000
	txt:Bold		= 1	
//:lexClass

lexClass:	
	name		= c_LexClass_color
	ParseOnScreen = 0
	parent:dyn	= c_LexClass_section
	children	= 0	
	start:tag	= '0x'
	end:tag		= @HexDigit:not
	txt:colorFG	= 0x8000FF
//:lexClass
	
lexClass:	
	name		= c_LexClass_number
	ParseOnScreen = 0
	parent:dyn	= c_LexClass_section
	children	= 0	
	start:tag	= @digit
	end:tag		= @digit:not
	txt:colorFG	= 0x000080	
//:lexClass
		
//-- NAME -------------------------------------------------
lexClass:	
	name			= c_LexClass_Prop_Name_name_part
	ParseOnScreen = 0
	parent			= c_LexClass_section	
	children		= 0		
	token:tag		= 'name'

	txt:colorFG	= 0x505050	
	txt:colorBK	= 0xEEEEEE
	txt:Bold		= 1
//:lexClass

lexClass:	
	name			= c_LexClass_Prop_Name
	ParseOnScreen = 0
	parent			= c_LexClass_section	
	children		= c_LexClass_Prop_EQ, c_LexClass_Prop_Name_value_part 
	children		= c_LexCommentSL
	start:class		= c_LexClass_Prop_Name_name_part
	end:tag			= @eol
	txt:colorBK	= 0xEEEEEE
//:lexClass
		
lexClass:	
	name			= c_LexClass_Prop_Name_value_part
	ParseOnScreen	= 0
	parent			= c_LexClass_Prop_Name
	children		= c_LexClass_ClassName
	
	start:class		= c_LexClass_Prop_EQ
	end:class		= c_LexClass_ClassName		
	
	txt:bold		= 1
//:lexClass

//-- PARENT:file -------------------------------------------------	
lexClass:	
	name			= c_LexClass_Prop_ParentFile_name_part
	ParseOnScreen	= 0
	parent			= c_LexClass_section	
	children		= 0 
	token:tag		= 'parent:file' 
	
	txt:colorFG	= 0x505050	
	txt:colorBK = 0xDDDDDD
	
	txt:Underline	= 1
	txt:Bold		= 1
//:lexClass
	
lexClass:	
	name			= c_LexClass_Prop_Parent_file
	ParseOnScreen	= 0
	parent			= c_LexClass_section	
	
	children		= c_LexClass_Prop_EQ 
	children		= c_LexClass_Prop_Parent2_value_part 
	
	start:class		= c_LexClass_Prop_ParentFile_name_part
	end:tag			= @eol
//:lexClass

lexClass:
	name			= c_LexClass_Prop_Parent2_value_part
	ParseOnScreen	= 0
	parent			= c_LexClass_Prop_Parent_file
	
	children		= c_LexClass_file_ext_list
	children		= c_LexCommentSL			

	start:class			= c_LexClass_Prop_EQ
	end:separators		= @eol
//:lexClass
			
lexClass:
	name			= c_LexClass_file_ext_list
	ParseOnScreen	= 0
	parent			= c_LexClass_Prop_Parent2_value_part
	
	children		= c_LexClass_file_ext1, c_LexClass_file_ext2
	
	previous:tag	= '='
	previous:tag:separators = ' ', '\t'
		
	start:tag	= '<'
	end:tag		= '>'
	
	txt:colorFG = 0x0000F0
//:lexClass
								
lexClass:
	name			= c_LexClass_file_ext1
	ParseOnScreen	= 0
	parent			= c_LexClass_file_ext_list
	
	children		= 0
	previous:tag	= '<'
	previous:tag:separators = ' ', '\t'
	start:tag		= '*.'					
	end:separators	= '|', '>', ' ', '\t'
	
	txt:colorFG = 0x800040
//:lexClass

lexClass:
	name			= c_LexClass_file_ext2
	ParseOnScreen	= 0
	parent			= c_LexClass_file_ext_list
	
	children		= 0
	previous:tag	= '|'
	previous:tag:separators = ' ', '\t'
	start:tag		= '*.'					
	end:separators	= '|', '>', ' ', '\t'
	
	txt:colorFG = 0x800040	
//:lexClass
				
//-- PARENT (+dyn) -------------------------------------------------	
lexClass:	
	name			= c_LexClass_Prop_Parent_name_part
	ParseOnScreen	= 0
	parent			= c_LexClass_section	
	children		= 0 
	token:tag		= 'parent:dyn', 'parent'
	
	txt:colorFG	= 0x505050	
	txt:Underline	= 1
//:lexClass
	
lexClass:	
	name			= c_LexClass_Prop_Parent
	ParseOnScreen	= 0
	parent			= c_LexClass_section	
	
	children		= c_LexClass_Prop_EQ 
	children		= c_LexClass_ClassName_List
			
	start:class		= c_LexClass_Prop_Parent_name_part
	end:tag			= @eol
//:lexClass

//-- CHILDREN -------------------------------------------------	
lexClass:	
	name			= c_LexClass_Prop_Children_name_part
	ParseOnScreen	= 0	
	parent			= c_LexClass_section	
	children		= 0 
	token:tag		= 'children' 
	
	txt:colorFG	= 0x505050	
//:lexClass
			
lexClass:	
	name			= c_LexClass_Prop_Children
	ParseOnScreen	= 0
	parent			= c_LexClass_section	
	
	children		= c_LexClass_Prop_EQ 		
	children		= c_LexClass_Prop_Children_value1_part
	children		= c_LexClass_ClassName_List		
			
	start:class		= c_LexClass_Prop_Children_name_part
	end:separators	= @eol
//:lexClass
		
lexClass:	
	name			= c_LexClass_Prop_Children_value1_part
	ParseOnScreen	= 0
	parent			= c_LexClass_Prop_Children	
	children		= c_LexClass_Prop_Children_value1_error 
	//children				= c_LexCommentSL			
	previous:tag			= '='
	previous:tag:separators = ' ', '\t'
	
	start:tag		= '0'						
	end:separators	= @eol
	
	txt:colorFG		= 0x000090
	txt:bold = 1
//:lexClass
			
lexClass:	
	name			= c_LexClass_Prop_Children_value1_error
	ParseOnScreen	= 0
	parent			= c_LexClass_Prop_Children_value1_part	
	children		= c_LexCommentSL			
	previous:class	= c_LexClass_Prop_Children_value1_part
									
	end:separators	= @eol

	txt:colorFG		= 0xFF0000
	txt:bold = 0
//:lexClass

//////////////////////////////////////////////////////////////////////////////
lexClass:	
	name		= c_LexClass_Prop_EQ
	ParseOnScreen	= 0
	parent:dyn	= c_LexClass_section
	children	= 0
	token:tag	= '='		
	txt:colorFG	= 0x0000B0
	txt:Bold	= 0
//:lexClass

lexClass:	
	name		= c_LexClass_ClassName
	ParseOnScreen	= 0
	//parent:dyn	= c_LexClass_section
	parent	= c_LexClass_Prop_Name_value_part //, c_LexClass_ClassName_List, 
	
	children	= 0
	previous:tag = '='
	previous:tag:separators = ' ', '\t'
	start:tag				= @alpha, '_'
	skip:Tag				= @alpha, @digit, '_'
	end:separators			= @alpha:not, @digit:not
	
	txt:colorFG	= 0x0000EE
//:lexClass

lexClass: 
	name = c_LexClass_ClassName_List	
	ParseOnScreen	= 0
	parent:dyn				= c_LexClass_section
		
	children				= c_LexClass_ClassName_List1 
	children				= c_LexClass_ClassName_List2
	children				= c_LexClass_CommaSeparator
	children				= c_LexCommentSL			
	
	previous:tag			= '='
	previous:tag:separators = ' ', '\t'
		
	start:tag				= @alpha, '_'
	end:separators			= @eol
//:lexClass

lexClass: name = c_LexClass_ClassName_List1
		ParseOnScreen	= 0
		parent	= c_LexClass_ClassName_List
		
		children	= 0 

		start:class				= c_LexClass_ClassName_List
		//previous:class				= c_LexClass_ClassName_List
		skip:Tag				= @alpha, @digit, '_'
		end:separators			= @alpha:not, @digit:not
		
		txt:colorFG	= 0x5000EE
//:lexClass
		
lexClass: name = c_LexClass_ClassName_List2
		ParseOnScreen	= 0
		parent	= c_LexClass_ClassName_List
		
		children	= 0 
		previous:tag			= ','
		previous:tag:separators = ' ', '\t'
		
		start:tag				= @alpha, '_'
		skip:Tag				= @alpha, @digit, '_'
		end:separators			= @alpha:not, @digit:not
		
		txt:colorFG	= 0x5000EE
//:lexClass
	
//////////////////////////////////////////////////////////////////////////////		

lexClass:	
	name		= c_LexClass_Prop_ParseOnScreen
	ParseOnScreen	= 0
	parent		= c_LexClass_section
	children	= 0	
	token:tag	= 'ParseOnScreen'

	txt:colorFG	= 0x60AF60	
	txt:colorBK	= 0xDFCFFF
	//txt:Bold	= 1	
	txt:Italic	= 0 
//:lexClass

lexClass:	
	name		= c_LexClass_Prop_DisplayName
	ParseOnScreen	= 0
	parent		= c_LexClass_section
	children	= 0	
	token:tag	= 'DisplayName'

	txt:colorFG	= 0x202080	
	txt:colorBK	= 0xF0FFFF
	//txt:Bold	= 1	
	txt:Italic	= 0 
//:lexClass

lexClass:	
	name		= c_LexClass_AttributeName
	ParseOnScreen	= 0
	parent		= c_LexClass_section
	children	= 0	
	token:tag	= 'previous:class', 'previous:tag:separators', 'previous:tag'
	token:tag	= 'start:class', 'start:Tag'
	token:tag	= 'skip:Tag'  
	token:tag	= 'end:class', 'end:class:parent', 'end:Tag', 'end:separators'
	token:tag	= 'Token:tag', 'Token:start:separators', 'Token:end:separators'
	
	token:tag	= 'caseSensitive', 'Collapsable', 'CollapsedText', 'ParseOnScreen'
	token:tag	= 'RecurrenceDepth'

	token:tag	= 'txt:colorFG', 'txt:colorBK', 'txt:colorSelFG', 'txt:colorSelBK'
	token:tag	= 'txt:Bold', 'txt:Italic', 'txt:Underline'
	
	txt:colorFG	= 0x505050	
	//txt:Bold	= 1	
	txt:Italic	= 1 
//:lexClass

lexClass:	
	name		= c_LexClass_GlobalAttributeName
	ParseOnScreen	= 0
	parent		= c_LexClass_section
	children	= 0	
	txt:Bold	= 1	
	txt:colorFG	= 0x0091E0	

	token:tag	= 'global:FirstParseInSeparateThread'
	token:tag	= 'global:EditReparceInSeparateThread'
	token:tag	= 'global:EditReparceTimeout_ms'
	token:tag	= 'global:MaxBackParseOffset'
	token:tag	= 'global:OnScreenSchCacheLifeTime_sec'
	token:tag	= 'global:ParserThreadIdleLifeTime_sec'
//:lexClass