/**
  * for MCS-51 family assembly language
  * add by wentao  http://blog.liuwentao.net
  * date: 2007.4.22
  * last modify: 2007.4.22
**/

dp.sh.Brushes.Asm51 = function()
{
  var keywords =	'mov movc movx push pop xch xchd swap add addc subb inc dec mul div da ' +
  	                'anl orl xrl clr cpl rl rlc rr rrc acall lcall ret reti ajmp ljmp sjmp jmp jz jnz cjne djnz nop ' +
  	                'setb jc jnc jb jnb jbc ' +
  	                'org end db dw equ ' +
                    'MOV MOVC MOVX PUSH POP XCH XCHD SWAP ADD ADDC SUBB INC DEC MUL DIV DA ' +
  	                'ANL ORL XRL CLR CPL RL RLC RR RRC ACALL LCALL RET RETI AJMP LJMP SJMP JMP JZ JNZ CJNE DJNZ NOP ' +
  	                'SETB JC JNC JB JNB JBC ' +
  	                'ORG END DB DW EQU';

  var sfr =	'b a ab acc psw ip p3 ie p2 sbuf scon p1 th1 th0 tl1 tl0 tmod tcon pcon dph dpl sp p0 dptr ' +
  	        'r0 r1 r2 r3 r4 r5 r6 r7 ' +
  	        'cy c ac f0 rs1 rs0 ov p tf1 tr1 tf0 tr0 ie1 it1 ie0 it0 ti ri ea es et1 ex1 et0 ex0 ps pt1 px1 pt0 px0 ' +
            'B A AB ACC PSW IP P3 IE P2 SBUF SCON P1 TH1 TH0 TL1 TL0 TMOD TCON PCON DPH DPL SP P0 DPTR ' +
            'R0 R1 R2 R3 R4 R5 R6 R7 ' +
            'CY C AC F0 RS1 RS0 OV P TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TI RI EA ES ET1 EX1 ET0 EX0 PS PT1 PX1 PT0 PX0';

	this.regexList = [
		{ regex: new RegExp(';.*$', 'gm'),           			css: 'comment' },	// one line comments
		{ regex: dp.sh.RegexLib.DoubleQuotedString,				css: 'string' },	// double quoted strings
		{ regex: dp.sh.RegexLib.SingleQuotedString,				css: 'string' },	// single quoted strings
		{ regex: new RegExp('[A-Za-z][A-Za-z0-9_]*:', 'g'),		css: 'symbol' },	// symbols
		{ regex: new RegExp('\\#[a-zA-Z0-9_]{1,9}', 'g'),		css: 'number' },	// immediate data
		{ regex: new RegExp('(0x|0X)[0-9a-fA-F]*', 'g'),		css: 'address' },	// data begin with '0x'
		{ regex: new RegExp('[a-fA-F0-9]{2,4}[hH]', 'g'),		css: 'address' },	// data end with 'h'
		{ regex: new RegExp('(@)((a|A)(\\+)(dptr|DPTR|pc|PC)|(r0|R0|r1|R1))', 'g'),	css: 'indirect' },	// indirect
		{ regex: new RegExp(this.GetKeywords(keywords), 'gm'),	css: 'keyword' },	// keywords
		{ regex: new RegExp(this.GetKeywords(sfr), 'gm'),	    css: 'sfr' }	    // sfr
		];

	this.CssClass = 'dp-asm51';
}

dp.sh.Brushes.Asm51.prototype	= new dp.sh.Highlighter();
dp.sh.Brushes.Asm51.Aliases	= ['asm51'];
