Ejemplo n.º 1
0
function geshi_delphi_asm(&$context)
{
    $context->setComplexFlag(GESHI_COMPLEX_TOKENISE);
    $context->addChild('delphi/delphi/preprocessor', 'code');
    $context->addChild('delphi/delphi/single_comment');
    $context->addChild('delphi/delphi/multi_comment');
    //Assembler Directives
    $context->addKeywordGroup(array('db', 'dd', 'dw'), 'keyword');
    // Keyops
    $context->addKeywordGroup(array('high', 'low', 'mod'), 'keyop');
    // Control
    $context->addKeywordGroup(array('byte', 'dmtindex', 'dword', 'large', 'offset', 'ptr', 'qword', 'small', 'tbyte', 'type', 'vmtoffset', 'word'), 'control');
    // Registers
    $context->addKeywordGroup(array('ah', 'al', 'bh', 'bl', 'ch', 'cl', 'dh', 'dl', 'ax', 'bx', 'cx', 'dx', 'sp', 'bp', 'di', 'si', 'eax', 'ebx', 'ecx', 'edx', 'esp', 'ebp', 'edi', 'esi', 'mm0', 'mm1', 'mm2', 'mm3', 'mm4', 'mm5', 'mm6', 'mm7', 'xmm0', 'xmm1', 'xmm2', 'xmm3', 'xmm4', 'xmm5', 'xmm6', 'xmm7', 'st0', 'st1', 'st2', 'st3', 'st4', 'st5', 'st6', 'st7', 'cs', 'ds', 'es', 'fs', 'gs', 'ss', 'cr0', 'cr1', 'cr2', 'cr3', 'cr4', 'dr0', 'dr1', 'dr2', 'dr3', 'dr4', 'dr5', 'dr6', 'dr7'), 'register');
    $context->addRegexGroup(array('/(?=\\b)(st\\([0-7]\\))/im'), 'st', array(1 => array('register', false)));
    // CPU i386 instructions
    $context->addKeywordGroup(array('AAA', 'AAD', 'AAM', 'AAS', 'ADC', 'ADD', 'AND', 'ARPL', 'BOUND', 'BSF', 'BSR', 'BSWAP', 'BT', 'BTC', 'BTR', 'BTS', 'CALL', 'CBW', 'CDQ', 'CLC', 'CLD', 'CLI', 'CLTS', 'CMC', 'cmova', 'cmovae', 'cmovb', 'cmovbe', 'cmovc', 'cmovcxz', 'cmove', 'cmovg', 'cmovge', 'cmovl', 'cmovle', 'cmovna', 'cmovnae', 'cmovnb', 'cmovnbe', 'cmovnc', 'cmovne', 'cmovng', 'cmovnge', 'cmovnl', 'cmovnle', 'cmovno', 'cmovnp', 'cmovns', 'cmovnz', 'cmovo', 'cmovp', 'cmovpe', 'cmovpo', 'cmovs', 'cmovz', 'CMP', 'CMPSB', 'CMPSD', 'CMPSW', 'CMPXCHG', 'CMPXCHG8B', 'CMPXCHG486', 'CPUID', 'CWD', 'CWDE', 'DAA', 'DAS', 'DEC', 'DIV', 'EMMS', 'ENTER', 'HLT', 'IBTS', 'ICEBP', 'IDIV', 'IMUL', 'IN', 'INC', 'INSB', 'INSD', 'INSW', 'INT', 'INT01', 'INT03', 'INT1', 'INT3', 'INTO', 'INVD', 'INVLPG', 'IRET', 'IRETD', 'IRETW', 'ja', 'jae', 'jb', 'jbe', 'jc', 'jcxz', 'JCXZ', 'je', 'JECXZ', 'jg', 'jge', 'jl', 'jle', 'JMP', 'jna', 'jnae', 'jnb', 'jnbe', 'jnc', 'jne', 'jng', 'jnge', 'jnl', 'jnle', 'jno', 'jnp', 'jns', 'jnz', 'jo', 'jp', 'jpe', 'jpo', 'js', 'jz', 'LAHF', 'LAR', 'LCALL', 'LDS', 'LEA', 'LEAVE', 'LES', 'LFS', 'LGDT', 'LGS', 'LIDT', 'LJMP', 'LLDT', 'LMSW', 'LOADALL', 'LOADALL286', 'LOCK', 'LODSB', 'LODSD', 'LODSW', 'LOOP', 'LOOPE', 'LOOPNE', 'LOOPNZ', 'LOOPZ', 'LSL', 'LSS', 'LTR', 'MOV', 'MOVD', 'MOVQ', 'MOVSB', 'MOVSD', 'MOVSW', 'MOVSX', 'MOVZX', 'MUL', 'NEG', 'NOP', 'NOT', 'OR', 'OUT', 'OUTSB', 'OUTSD', 'OUTSW', 'POP', 'POPA', 'POPAD', 'POPAW', 'POPF', 'POPFD', 'POPFW', 'PUSH', 'PUSHA', 'PUSHAD', 'PUSHAW', 'PUSHF', 'PUSHFD', 'PUSHFW', 'RCL', 'RCR', 'RDMSR', 'RDPMC', 'RDSHR', 'RDTSC', 'REP', 'REPE', 'REPNE', 'REPNZ', 'REPZ', 'RET', 'RETF', 'RETN', 'ROL', 'ROR', 'RSDC', 'RSLDT', 'RSM', 'SAHF', 'SAL', 'SALC', 'SAR', 'SBB', 'SCASB', 'SCASD', 'SCASW', 'seta', 'setae', 'setb', 'setbe', 'setc', 'setcxz', 'sete', 'setg', 'setge', 'setl', 'setle', 'setna', 'setnae', 'setnb', 'setnbe', 'setnc', 'setne', 'setng', 'setnge', 'setnl', 'setnle', 'setno', 'setnp', 'setns', 'setnz', 'seto', 'setp', 'setpe', 'setpo', 'sets', 'setz', 'SGDT', 'SHL', 'SHLD', 'SHR', 'SHRD', 'SIDT', 'SLDT', 'SMI', 'SMINT', 'SMINTOLD', 'SMSW', 'STC', 'STD', 'STI', 'STOSB', 'STOSD', 'STOSW', 'STR', 'SUB', 'SVDC', 'SVLDT', 'SVTS', 'SYSCALL', 'SYSENTER', 'SYSEXIT', 'SYSRET', 'TEST', 'UD1', 'UD2', 'UMOV', 'VERR', 'VERW', 'WAIT', 'WBINVD', 'WRMSR', 'WRSHR', 'XADD', 'XBTS', 'XCHG', 'XLAT', 'XLATB', 'XOR'), 'instr/i386');
    // FPU i387 instructions
    $context->addKeywordGroup(array('F2XM1', 'FABS', 'FADD', 'FADDP', 'FBLD', 'FBSTP', 'FCHS', 'FCLEX', 'FCMOVB', 'FCMOVBE', 'FCMOVE', 'FCMOVNB', 'FCMOVNBE', 'FCMOVNE', 'FCMOVNU', 'FCMOVU', 'FCOM', 'FCOMI', 'FCOMIP', 'FCOMP', 'FCOMPP', 'FCOS', 'FDECSTP', 'FDISI', 'FDIV', 'FDIVP', 'FDIVR', 'FDIVRP', 'FEMMS', 'FENI', 'FFREE', 'FIADD', 'FICOM', 'FICOMP', 'FIDIV', 'FIDIVR', 'FILD', 'FIMUL', 'FINCSTP', 'FINIT', 'FIST', 'FISTP', 'FISUB', 'FISUBR', 'FLD', 'FLD1', 'FLDCW', 'FLDENV', 'FLDL2E', 'FLDL2T', 'FLDLG2', 'FLDLN2', 'FLDPI', 'FLDZ', 'FMUL', 'FMULP', 'FNCLEX', 'FNDISI', 'FNENI', 'FNINIT', 'FNOP', 'FNSAVE', 'FNSTCW', 'FNSTENV', 'FNSTSW', 'FPATAN', 'FPREM', 'FPREM1', 'FPTAN', 'FRNDINT', 'FRSTOR', 'FSAVE', 'FSCALE', 'FSETPM', 'FSIN', 'FSINCOS', 'FSQRT', 'FST', 'FSTCW', 'FSTENV', 'FSTP', 'FSTSW', 'FSUB', 'FSUBP', 'FSUBR', 'FSUBRP', 'FTST', 'FUCOM', 'FUCOMI', 'FUCOMIP', 'FUCOMP', 'FUCOMPP', 'FWAIT', 'FXAM', 'FXCH', 'FXTRACT', 'FYL2X', 'FYL2XP1'), 'instr/i387');
    // MMX instruction set
    $context->addKeywordGroup(array('FFREEP', 'FXRSTOR', 'FXSAVE', 'MASKMOVQ', 'MOVNTQ', 'PACKSSDW', 'PACKSSWB', 'PACKUSWB', 'PADDB', 'PADDD', 'PADDSB', 'PADDSIW', 'PADDSW', 'PADDUSB', 'PADDUSW', 'PADDW', 'PAND', 'PANDN', 'PAVEB', 'PAVGB', 'PAVGW', 'PCMPEQB', 'PCMPEQD', 'PCMPEQW', 'PCMPGTB', 'PCMPGTD', 'PCMPGTW', 'PDISTIB', 'PEXTRW', 'PFCMPEQ', 'PFCMPGE', 'PFCMPGT', 'PINSRW', 'PMACHRIW', 'PMADDWD', 'PMAGW', 'PMAXSW', 'PMAXUB', 'PMINSW', 'PMINUB', 'PMOVMSKB', 'PMULHUW', 'PMVGEZB', 'PMVLZB', 'PMVNZB', 'PMVZB', 'POR', 'PREFETCHNTA', 'PREFETCHT0', 'PREFETCHT1', 'PREFETCHT2', 'PSADBW', 'PSHUFW', 'PSLLD', 'PSLLQ', 'PSLLW', 'PSRAD', 'PSRAW', 'PSRLD', 'PSRLQ', 'PSRLW', 'PSUBB', 'PSUBD', 'PSUBSB', 'PSUBSIW', 'PSUBSW', 'PSUBUSB', 'PSUBUSW', 'PSUBW', 'PUNPCKHBW', 'PUNPCKHDQ', 'PUNPCKHWD', 'PUNPCKLBW', 'PUNPCKLDQ', 'PUNPCKLWD', 'PXOR', 'SFENCE'), 'instr/mmx');
    // SSE instruction set
    $context->addKeywordGroup(array('ADDPS', 'ADDSS', 'ANDNPS', 'ANDPS', 'CMPEQPS', 'CMPEQSS', 'CMPLEPS', 'CMPLESS', 'CMPLTPS', 'CMPLTSS', 'CMPNEQPS', 'CMPNEQSS', 'CMPNLEPS', 'CMPNLESS', 'CMPNLTPS', 'CMPNLTSS', 'CMPORDPS', 'CMPORDSS', 'CMPPS', 'CMPSS', 'CMPUNORDPS', 'CMPUNORDSS', 'COMISS', 'CVTPI2PS', 'CVTPS2PI', 'CVTSI2SS', 'CVTSS2SI', 'CVTTPS2PI', 'CVTTSS2SI', 'DIVPS', 'DIVSS', 'LDMXCSR', 'MAXPS', 'MAXSS', 'MINPS', 'MINSS', 'MOVAPS', 'MOVHLPS', 'MOVHPS', 'MOVLHPS', 'MOVLPS', 'MOVMSKPS', 'MOVNTPS', 'MOVSS', 'MOVUPS', 'MULPS', 'MULSS', 'ORPS', 'RCPPS', 'RCPSS', 'RSQRTPS', 'RSQRTSS', 'SHUFPS', 'SQRTPS', 'SQRTSS', 'STMXCSR', 'SUBPS', 'SUBSS', 'UCOMISS', 'UNPCKHPS', 'UNPCKLPS', 'XORPS'), 'instr/sse');
    // 3DNow instruction set
    $context->addKeywordGroup(array('PAVGUSB', 'PF2ID', 'PFACC', 'PFADD', 'PFMAX', 'PFMIN', 'PFMUL', 'PFRCP', 'PFRCPIT1', 'PFRCPIT2', 'PFRSQIT1', 'PFRSQRT', 'PFSUB', 'PFSUBR', 'PI2FD', 'PMULHRIW', 'PMULHRWA', 'PMULHRWC', 'PMULHW', 'PMULLW', 'PREFETCH', 'PREFETCHW'), 'instr/3Dnow');
    // 3DNowExt instruction set
    $context->addKeywordGroup(array('PF2IW', 'PFNACC', 'PFPNACC', 'PI2FW', 'PSWAPD'), 'instr/3Dnow2');
    // @todo Split into the same subgroups like for delphi/delphi
    $context->addSymbolGroup(array(',', ';', '[', ']', '(', ')', '.', '&', '+', '-', '/', '*'), 'symbol');
    $context->addObjectSplitter(array('.'), 'oodynamic', 'symbol');
    $context->addRegexGroup(array('#([@a-zA-Z_][@a-zA-Z0-9_]+:)#'), ':', array(1 => array('label', false)));
    $context->addRegexGroup(array('#(@@[@a-zA-Z0-9_]+)#'), '@@', array(1 => array('label', false)));
    $context->addRegexGroup(array('/(#[0-9]+)/'), '#', array(1 => array('char', false)));
    $context->addRegexGroup(array('/(#\\$[0-9a-fA-F]+)/'), '#', array(1 => array('charhex', false)));
    $context->addRegexGroup(array('/(\\$[0-9a-fA-F]+)/'), '$', array(1 => array('hex', false)));
    $context->useStandardIntegers();
    $context->useStandardDoubles(array('require_leading_number' => true));
    geshi_delphi_keyident_self($context);
    geshi_delphi_stdprocs($context);
}
Ejemplo n.º 2
0
function geshi_delphi_delphi(&$context)
{
    geshi_delphi_common($context);
    $context->addChild('preprocessor', 'code');
    $context->addChild('extern', 'code');
    // NOTE: to be aliased as delphi/delphi
    $context->addChild('property', 'code');
    // Hook in ASM sublanguage
    $context->addChildLanguage('delphi/asm', 'REGEX#(^|(?=\\b))asm((?=\\b)|$)#im', 'REGEX#(^|(?=\\b))end((?=\\b)|$)#im');
    // Keywords
    $context->addKeywordGroup(array('Absolute', 'Abstract', 'And', 'Array', 'As', 'Asm', 'At', 'Begin', 'Case', 'Class', 'Const', 'Constructor', 'Contains', 'Destructor', 'DispInterface', 'Div', 'Do', 'DownTo', 'Else', 'End', 'Except', 'File', 'Finalization', 'Finally', 'For', 'Function', 'Goto', 'If', 'Implementation', 'In', 'Inherited', 'Initialization', 'Inline', 'Interface', 'Is', 'Label', 'Mod', 'Not', 'Object', 'Of', 'On', 'Or', 'Out', 'Overload', 'Override', 'Package', 'Packed', 'Private', 'Procedure', 'Program', 'Property', 'Protected', 'Public', 'Published', 'Raise', 'Record', 'Repeat', 'Requires', 'Resourcestring', 'Set', 'Shl', 'Shr', 'Then', 'ThreadVar', 'To', 'Try', 'Type', 'Unit', 'Until', 'Uses', 'Var', 'Virtual', 'While', 'With', 'Xor', 'assembler', 'cdecl', 'far', 'near', 'pascal', 'safecall', 'stdcall', 'varargs'), 'keyword');
    geshi_delphi_keytype($context);
    geshi_delphi_keyident_self($context);
    // Symbols
    $context->addSymbolGroup(array('+', '-', '*', '/'), 'mathsym');
    $context->addSymbolGroup(array(':', ';', ','), 'ctrlsym');
    $context->addSymbolGroup(array('<', '=', '>'), 'cmpsym');
    $context->addSymbolGroup(array('(', ')', '[', ']'), 'brksym');
    $context->addSymbolGroup(array('@', '^'), 'oopsym');
    geshi_delphi_chars($context);
    geshi_delphi_integers($context);
    // Floats
    $context->useStandardDoubles(array('require_leading_number' => true));
    // Ranges
    $context->addRegexGroup(array('/(\\.\\.)/'), '.', array(1 => array('ctrlsym', false)));
    $context->addObjectSplitter(array('.'), 'oodynamic', 'oopsym');
    $context->setComplexFlag(GESHI_COMPLEX_TOKENISE);
    geshi_delphi_stdprocs($context);
}