UNPKG

3.08 kBJavaScriptView Raw
1/*
2Language: Microsoft X++
3Description: X++ is a language used in Microsoft Dynamics 365, Dynamics AX, and Axapta.
4Author: Dmitri Roudakov <dmitri@roudakov.ru>
5Website: https://dynamics.microsoft.com/en-us/ax-overview/
6Category: enterprise
7*/
8
9/** @type LanguageFn */
10function axapta(hljs) {
11 const IDENT_RE = hljs.UNDERSCORE_IDENT_RE;
12 const BUILT_IN_KEYWORDS = [
13 'anytype',
14 'boolean',
15 'byte',
16 'char',
17 'container',
18 'date',
19 'double',
20 'enum',
21 'guid',
22 'int',
23 'int64',
24 'long',
25 'real',
26 'short',
27 'str',
28 'utcdatetime',
29 'var'
30 ];
31
32 const LITERAL_KEYWORDS = [
33 'default',
34 'false',
35 'null',
36 'true'
37 ];
38
39 const NORMAL_KEYWORDS = [
40 'abstract',
41 'as',
42 'asc',
43 'avg',
44 'break',
45 'breakpoint',
46 'by',
47 'byref',
48 'case',
49 'catch',
50 'changecompany',
51 'class',
52 'client',
53 'client',
54 'common',
55 'const',
56 'continue',
57 'count',
58 'crosscompany',
59 'delegate',
60 'delete_from',
61 'desc',
62 'display',
63 'div',
64 'do',
65 'edit',
66 'else',
67 'eventhandler',
68 'exists',
69 'extends',
70 'final',
71 'finally',
72 'firstfast',
73 'firstonly',
74 'firstonly1',
75 'firstonly10',
76 'firstonly100',
77 'firstonly1000',
78 'flush',
79 'for',
80 'forceliterals',
81 'forcenestedloop',
82 'forceplaceholders',
83 'forceselectorder',
84 'forupdate',
85 'from',
86 'generateonly',
87 'group',
88 'hint',
89 'if',
90 'implements',
91 'in',
92 'index',
93 'insert_recordset',
94 'interface',
95 'internal',
96 'is',
97 'join',
98 'like',
99 'maxof',
100 'minof',
101 'mod',
102 'namespace',
103 'new',
104 'next',
105 'nofetch',
106 'notexists',
107 'optimisticlock',
108 'order',
109 'outer',
110 'pessimisticlock',
111 'print',
112 'private',
113 'protected',
114 'public',
115 'readonly',
116 'repeatableread',
117 'retry',
118 'return',
119 'reverse',
120 'select',
121 'server',
122 'setting',
123 'static',
124 'sum',
125 'super',
126 'switch',
127 'this',
128 'throw',
129 'try',
130 'ttsabort',
131 'ttsbegin',
132 'ttscommit',
133 'unchecked',
134 'update_recordset',
135 'using',
136 'validtimestate',
137 'void',
138 'where',
139 'while'
140 ];
141
142 const KEYWORDS = {
143 keyword: NORMAL_KEYWORDS,
144 built_in: BUILT_IN_KEYWORDS,
145 literal: LITERAL_KEYWORDS
146 };
147
148 const CLASS_DEFINITION = {
149 variants: [
150 { match: [
151 /(class|interface)\s+/,
152 IDENT_RE,
153 /\s+(extends|implements)\s+/,
154 IDENT_RE
155 ] },
156 { match: [
157 /class\s+/,
158 IDENT_RE
159 ] }
160 ],
161 scope: {
162 2: "title.class",
163 4: "title.class.inherited"
164 },
165 keywords: KEYWORDS
166 };
167
168 return {
169 name: 'X++',
170 aliases: [ 'x++' ],
171 keywords: KEYWORDS,
172 contains: [
173 hljs.C_LINE_COMMENT_MODE,
174 hljs.C_BLOCK_COMMENT_MODE,
175 hljs.APOS_STRING_MODE,
176 hljs.QUOTE_STRING_MODE,
177 hljs.C_NUMBER_MODE,
178 {
179 className: 'meta',
180 begin: '#',
181 end: '$'
182 },
183 CLASS_DEFINITION
184 ]
185 };
186}
187
188module.exports = axapta;