//=======================================================================
//================ Lex class support ====================================
//=======================================================================
// 		lexClass:
//			name		= c_PascalString
//		+	parent		= c_Pascal
//		+	parent:dyn	= c_Pascal
//
//		+	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
/////////////////////////////////////////////////////////////////////////

//=======================================================================
//================ 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_Pascal
	parent:file		= <*.pas|*.dpr|*.dpk|*.inc|*.int>	
	caseSensitive		= 0

lexClass:
	name		= c_PascalCodeBlock_Start		
	parent		= c_Pascal, c_PascalCodeBlock	
	children	= 0	
	previous:tag	= ';', ' ', '\t', @eol
	start:Tag	= 'begin'
	end:Tag		= '\t', ' ', @eol
	end:Separators	= '\t', ' ', @eol
	txt:colorFG	= 0x0000FF
    txt:bold    = 1
	
lexClass:
	name		= c_PascalCodeBlock_End		
	parent		= c_Pascal, c_PascalCodeBlock, c_PascalCodeBlock	
	children	= 0	
	previous:tag	= @specs, ' ', '\t', @eol
	start:Tag	= 'end'	
	end:Separators	= @specs, @eol
	txt:colorFG	= 0x0000FF
    txt:bold    = 1

lexClass:
	name		= c_PascalCodeBlock	
	parent		= c_Pascal, c_PascalCodeBlock
	children	= c_PascalCodeBlock_End		
	start:CLASS	= c_PascalCodeBlock_Start	
	end:CLASS	= c_PascalCodeBlock_End	
	Collapsable	= 1 
	CollapsedText	= '...'

lexClass: 	
	name			= c_String	
	parent:dyn		= c_Pascal, c_PascalCodeBlock
	children		= 0
	start:Tag		= '"'
	skip:Tag		= '\\"', '\\\r\n', '\\\n\r', '\\\n', '\\\r'	
	end:Tag			= '"', @eol
	txt:colorFG		= 0xE00000

lexClass: 	
	name			= c_String_char	
	parent:dyn		= c_Pascal, c_PascalCodeBlock
	children		= 0
	start:Tag		= '\''
	//skip:Tag		= '\\"', '\\\r\n', '\\\n\r', '\\\n', '\\\r'	
	end:Tag			= '\'', @eol
	txt:colorFG		= 0xE00000

lexClass:	
	name		= c_PascalCommentSL
	parent		= c_Pascal, c_PascalCodeBlock
	children	= 0		
	start:tag	='//'
	skip:Tag	= '\\\r\n', '\\\n\r', '\\\n', '\\\r'	
	end:tag		= @eol
	txt:colorFG	= 0x00A000

lexClass:
	name		= c_PascalCommentML1	
	parent:dyn	= c_Pascal, c_PascalCodeBlock
	children	= 0
	start:Tag	='{'
	end:Tag		='}'
	Collapsable	= 1 
	CollapsedText	= '{...}' 	
	txt:colorFG	= 0x00CF00

lexClass:
	name		= c_PascalCommentML2
	parent:dyn	= c_Pascal, c_PascalCodeBlock
	children	= 0
	start:Tag	='(*'
	end:Tag		='*)'
	Collapsable	= 1 
	CollapsedText	= '(*...*)' 	
	txt:colorFG	= 0x00CF00

lexClass:	
	name		= c_KeywordsWord
	ParseOnScreen	= 1
	parent:Dyn	= c_Pascal, c_PascalCodeBlock
	children	= 0	
	token:tag	= 'and', 'array', 'as', 'const', 'div', 'file', 'in', 'is'
	token:tag	= 'mod', 'not', 'of', 'or', 'out', 'shl', 'shr', 'threadvar', 'var', 'xor'
	token:start:separators	= @specs, @eol
	token:end:separators	= @specs, @eol
	txt:colorFG	= 0xAA33BB
	txt:bold = 1

lexClass:	
	name		= c_KeywordsConst
	ParseOnScreen	= 1
	parent:Dyn	= c_Pascal, c_PascalCodeBlock
	children	= 0	
	token:tag	= 'False', 'True', 'nil', 'null'
	token:start:separators	= @specs, @eol
	token:end:separators	= @specs, @eol
	txt:colorFG	= 0xAA33BB
	txt:bold = 1

lexClass:	
	name		= c_KeywordsType
	ParseOnScreen	= 1
	parent:Dyn	= c_Pascal, c_PascalCodeBlock
	children	= 0	
    // Types
	token:tag	= 'AnsiChar', 'AnsiString', 'Boolean', 'Byte', 'ByteBool'
	token:tag	= 'Cardinal', 'Comp', 'Currency', 'DWord', 'Integer'
	token:tag	= 'LongBool', 'LongInt', 'LongWord', 'OleVariant', 'OpenString'
	token:tag	= 'PAnsiChar', 'PWideChar', 'ShortInt', 'ShortString', 'SmallInt'
	token:tag	= 'TDateTime', 'TextFile', 'Variant', 'WideChar', 'WideString'
	token:tag	= 'Word', 'WordBool'
    // Smalls
	token:tag	= 'byte', 'char', 'double', 'extended', 'int64'
	token:tag	= 'real', 'single', 'string', 'text', 'UINT'
    // .NET
	token:tag	= 'PChar', 'Pointer', 'real48'
	token:start:separators	= @specs, @eol
	token:end:separators	= @specs, @eol
	txt:colorFG	= 0xAA33BB
	txt:bold = 1

lexClass:	
	name		= c_KeywordsPropWord
	ParseOnScreen	= 1
	parent:Dyn	= c_PascalProperty
	children	= 0	
	token:tag	= 'default', 'implements', 'index', 'nodefault'
	token:tag	= 'read', 'readonly', 'stored', 'write', 'writeonly'
	token:start:separators	= @specs, @eol
	token:end:separators	= @specs, @eol
	txt:colorFG	= 0xAA33BB
	txt:bold = 1

lexClass:	
	name		= c_KeywordsExport
	ParseOnScreen	= 1
	parent:Dyn	= c_PascalExport
	children	= 0	
	token:tag	= 'external', 'name', 'index'
	token:start:separators	= @specs, @eol
	token:end:separators	= @specs, @eol
	txt:colorFG	= 0xAA33BB
	txt:bold = 1

lexClass:	
	name		= c_KeywordsClass
	ParseOnScreen	= 1
	parent:Dyn	= c_PascalClass
	children	= 0	
	token:tag	= 'private', 'protected', 'public', 'published'
	token:tag	= 'dynamic', 'override', 'reintroduce', 'virtual'
	token:tag	= 'default', 'message'
	// .NET
	token:tag	= 'strict', 'helper', 'sealed', 'final', 'static'
	token:start:separators	= @specs, @eol
	token:end:separators	= @specs, @eol
	txt:colorFG	= 0xAA33BB
	txt:bold = 1

lexClass:	
	name		= c_KeywordsInternal
	ParseOnScreen	= 1
	parent:Dyn	= c_PascalClass
	children	= 0	
	token:tag	= 'abstract', 'asm', 'assembler', 'automated'
	token:tag	= 'begin', 'break', 'case', 'cdecl', 'class', 'constructor', 'contains', 'continue'
	token:tag	= 'deprecated', 'destructor', 'dispid', 'dispinterface', 'do', 'downto'
	token:tag	= 'else', 'end', 'except', 'exit', 'experimental', 'export', 'exports', 'external'
	token:tag	= 'far', 'finalization', 'finally', 'for', 'forward', 'function'
	token:tag	= 'goto', 'if', 'implementation', 'inherited', 'initialization', 'inline', 'interface', 'interrupt'
	token:tag	= 'label', 'library', 'near', 'object', 'on', 'operator', 'overload'
	token:tag	= 'package', 'packed', 'pascal', 'platform', 'procedure', 'program'
	token:tag	= 'raise', 'record', 'repeat', 'requires', 'resident', 'result', 'resourcestring'
	token:tag	= 'safecall', 'set', 'self', 'stdcall', 'register'
	token:tag	= 'then', 'to', 'try', 'type'
	token:tag	= 'unit', 'until', 'uses', 'while', 'with'
	// .NET unsafe
	token:tag	= 'absolute'
	//token:tag	= '', '', '', '', '', '', ''
	token:start:separators	= @specs, @eol
	token:end:separators	= @specs, @eol
	txt:colorFG	= 0xAA33BB
	txt:bold = 1