136 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | |
| Language: Smali
 | |
| Author: Dennis Titze <dennis.titze@gmail.com>
 | |
| Description: Basic Smali highlighting
 | |
| Website: https://github.com/JesusFreke/smali
 | |
| */
 | |
| 
 | |
| function smali(hljs) {
 | |
|   const smali_instr_low_prio = [
 | |
|     'add',
 | |
|     'and',
 | |
|     'cmp',
 | |
|     'cmpg',
 | |
|     'cmpl',
 | |
|     'const',
 | |
|     'div',
 | |
|     'double',
 | |
|     'float',
 | |
|     'goto',
 | |
|     'if',
 | |
|     'int',
 | |
|     'long',
 | |
|     'move',
 | |
|     'mul',
 | |
|     'neg',
 | |
|     'new',
 | |
|     'nop',
 | |
|     'not',
 | |
|     'or',
 | |
|     'rem',
 | |
|     'return',
 | |
|     'shl',
 | |
|     'shr',
 | |
|     'sput',
 | |
|     'sub',
 | |
|     'throw',
 | |
|     'ushr',
 | |
|     'xor'
 | |
|   ];
 | |
|   const smali_instr_high_prio = [
 | |
|     'aget',
 | |
|     'aput',
 | |
|     'array',
 | |
|     'check',
 | |
|     'execute',
 | |
|     'fill',
 | |
|     'filled',
 | |
|     'goto/16',
 | |
|     'goto/32',
 | |
|     'iget',
 | |
|     'instance',
 | |
|     'invoke',
 | |
|     'iput',
 | |
|     'monitor',
 | |
|     'packed',
 | |
|     'sget',
 | |
|     'sparse'
 | |
|   ];
 | |
|   const smali_keywords = [
 | |
|     'transient',
 | |
|     'constructor',
 | |
|     'abstract',
 | |
|     'final',
 | |
|     'synthetic',
 | |
|     'public',
 | |
|     'private',
 | |
|     'protected',
 | |
|     'static',
 | |
|     'bridge',
 | |
|     'system'
 | |
|   ];
 | |
|   return {
 | |
|     name: 'Smali',
 | |
|     contains: [
 | |
|       {
 | |
|         className: 'string',
 | |
|         begin: '"',
 | |
|         end: '"',
 | |
|         relevance: 0
 | |
|       },
 | |
|       hljs.COMMENT(
 | |
|         '#',
 | |
|         '$',
 | |
|         {
 | |
|           relevance: 0
 | |
|         }
 | |
|       ),
 | |
|       {
 | |
|         className: 'keyword',
 | |
|         variants: [
 | |
|           {
 | |
|             begin: '\\s*\\.end\\s[a-zA-Z0-9]*'
 | |
|           },
 | |
|           {
 | |
|             begin: '^[ ]*\\.[a-zA-Z]*',
 | |
|             relevance: 0
 | |
|           },
 | |
|           {
 | |
|             begin: '\\s:[a-zA-Z_0-9]*',
 | |
|             relevance: 0
 | |
|           },
 | |
|           {
 | |
|             begin: '\\s(' + smali_keywords.join('|') + ')'
 | |
|           }
 | |
|         ]
 | |
|       },
 | |
|       {
 | |
|         className: 'built_in',
 | |
|         variants: [
 | |
|           {
 | |
|             begin: '\\s(' + smali_instr_low_prio.join('|') + ')\\s'
 | |
|           },
 | |
|           {
 | |
|             begin: '\\s(' + smali_instr_low_prio.join('|') + ')((-|/)[a-zA-Z0-9]+)+\\s',
 | |
|             relevance: 10
 | |
|           },
 | |
|           {
 | |
|             begin: '\\s(' + smali_instr_high_prio.join('|') + ')((-|/)[a-zA-Z0-9]+)*\\s',
 | |
|             relevance: 10
 | |
|           }
 | |
|         ]
 | |
|       },
 | |
|       {
 | |
|         className: 'class',
 | |
|         begin: 'L[^\(;:\n]*;',
 | |
|         relevance: 0
 | |
|       },
 | |
|       {
 | |
|         begin: '[vp][0-9]+'
 | |
|       }
 | |
|     ]
 | |
|   };
 | |
| }
 | |
| 
 | |
| module.exports = smali;
 |