UNPKG

2.31 kBJavaScriptView Raw
1/*
2Language: Smali
3Author: Dennis Titze <dennis.titze@gmail.com>
4Description: Basic Smali highlighting
5Website: https://github.com/JesusFreke/smali
6*/
7
8function smali(hljs) {
9 const smali_instr_low_prio = [
10 'add',
11 'and',
12 'cmp',
13 'cmpg',
14 'cmpl',
15 'const',
16 'div',
17 'double',
18 'float',
19 'goto',
20 'if',
21 'int',
22 'long',
23 'move',
24 'mul',
25 'neg',
26 'new',
27 'nop',
28 'not',
29 'or',
30 'rem',
31 'return',
32 'shl',
33 'shr',
34 'sput',
35 'sub',
36 'throw',
37 'ushr',
38 'xor'
39 ];
40 const smali_instr_high_prio = [
41 'aget',
42 'aput',
43 'array',
44 'check',
45 'execute',
46 'fill',
47 'filled',
48 'goto/16',
49 'goto/32',
50 'iget',
51 'instance',
52 'invoke',
53 'iput',
54 'monitor',
55 'packed',
56 'sget',
57 'sparse'
58 ];
59 const smali_keywords = [
60 'transient',
61 'constructor',
62 'abstract',
63 'final',
64 'synthetic',
65 'public',
66 'private',
67 'protected',
68 'static',
69 'bridge',
70 'system'
71 ];
72 return {
73 name: 'Smali',
74 contains: [
75 {
76 className: 'string',
77 begin: '"',
78 end: '"',
79 relevance: 0
80 },
81 hljs.COMMENT(
82 '#',
83 '$',
84 {
85 relevance: 0
86 }
87 ),
88 {
89 className: 'keyword',
90 variants: [
91 {
92 begin: '\\s*\\.end\\s[a-zA-Z0-9]*'
93 },
94 {
95 begin: '^[ ]*\\.[a-zA-Z]*',
96 relevance: 0
97 },
98 {
99 begin: '\\s:[a-zA-Z_0-9]*',
100 relevance: 0
101 },
102 {
103 begin: '\\s(' + smali_keywords.join('|') + ')'
104 }
105 ]
106 },
107 {
108 className: 'built_in',
109 variants: [
110 {
111 begin: '\\s(' + smali_instr_low_prio.join('|') + ')\\s'
112 },
113 {
114 begin: '\\s(' + smali_instr_low_prio.join('|') + ')((-|/)[a-zA-Z0-9]+)+\\s',
115 relevance: 10
116 },
117 {
118 begin: '\\s(' + smali_instr_high_prio.join('|') + ')((-|/)[a-zA-Z0-9]+)*\\s',
119 relevance: 10
120 }
121 ]
122 },
123 {
124 className: 'class',
125 begin: 'L[^\(;:\n]*;',
126 relevance: 0
127 },
128 {
129 begin: '[vp][0-9]+'
130 }
131 ]
132 };
133}
134
135export { smali as default };