180 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			180 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | |
| Language: Microsoft X++
 | |
| Description: X++ is a language used in Microsoft Dynamics 365, Dynamics AX, and Axapta.
 | |
| Author: Dmitri Roudakov <dmitri@roudakov.ru>
 | |
| Website: https://dynamics.microsoft.com/en-us/ax-overview/
 | |
| Category: enterprise
 | |
| */
 | |
| 
 | |
| /** @type LanguageFn */
 | |
| function axapta(hljs) {
 | |
|   const BUILT_IN_KEYWORDS = [
 | |
|     'anytype',
 | |
|     'boolean',
 | |
|     'byte',
 | |
|     'char',
 | |
|     'container',
 | |
|     'date',
 | |
|     'double',
 | |
|     'enum',
 | |
|     'guid',
 | |
|     'int',
 | |
|     'int64',
 | |
|     'long',
 | |
|     'real',
 | |
|     'short',
 | |
|     'str',
 | |
|     'utcdatetime',
 | |
|     'var'
 | |
|   ];
 | |
| 
 | |
|   const LITERAL_KEYWORDS = [
 | |
|     'default',
 | |
|     'false',
 | |
|     'null',
 | |
|     'true'
 | |
|   ];
 | |
| 
 | |
|   const NORMAL_KEYWORDS = [
 | |
|     'abstract',
 | |
|     'as',
 | |
|     'asc',
 | |
|     'avg',
 | |
|     'break',
 | |
|     'breakpoint',
 | |
|     'by',
 | |
|     'byref',
 | |
|     'case',
 | |
|     'catch',
 | |
|     'changecompany',
 | |
|     'class',
 | |
|     'client',
 | |
|     'client',
 | |
|     'common',
 | |
|     'const',
 | |
|     'continue',
 | |
|     'count',
 | |
|     'crosscompany',
 | |
|     'delegate',
 | |
|     'delete_from',
 | |
|     'desc',
 | |
|     'display',
 | |
|     'div',
 | |
|     'do',
 | |
|     'edit',
 | |
|     'else',
 | |
|     'eventhandler',
 | |
|     'exists',
 | |
|     'extends',
 | |
|     'final',
 | |
|     'finally',
 | |
|     'firstfast',
 | |
|     'firstonly',
 | |
|     'firstonly1',
 | |
|     'firstonly10',
 | |
|     'firstonly100',
 | |
|     'firstonly1000',
 | |
|     'flush',
 | |
|     'for',
 | |
|     'forceliterals',
 | |
|     'forcenestedloop',
 | |
|     'forceplaceholders',
 | |
|     'forceselectorder',
 | |
|     'forupdate',
 | |
|     'from',
 | |
|     'generateonly',
 | |
|     'group',
 | |
|     'hint',
 | |
|     'if',
 | |
|     'implements',
 | |
|     'in',
 | |
|     'index',
 | |
|     'insert_recordset',
 | |
|     'interface',
 | |
|     'internal',
 | |
|     'is',
 | |
|     'join',
 | |
|     'like',
 | |
|     'maxof',
 | |
|     'minof',
 | |
|     'mod',
 | |
|     'namespace',
 | |
|     'new',
 | |
|     'next',
 | |
|     'nofetch',
 | |
|     'notexists',
 | |
|     'optimisticlock',
 | |
|     'order',
 | |
|     'outer',
 | |
|     'pessimisticlock',
 | |
|     'print',
 | |
|     'private',
 | |
|     'protected',
 | |
|     'public',
 | |
|     'readonly',
 | |
|     'repeatableread',
 | |
|     'retry',
 | |
|     'return',
 | |
|     'reverse',
 | |
|     'select',
 | |
|     'server',
 | |
|     'setting',
 | |
|     'static',
 | |
|     'sum',
 | |
|     'super',
 | |
|     'switch',
 | |
|     'this',
 | |
|     'throw',
 | |
|     'try',
 | |
|     'ttsabort',
 | |
|     'ttsbegin',
 | |
|     'ttscommit',
 | |
|     'unchecked',
 | |
|     'update_recordset',
 | |
|     'using',
 | |
|     'validtimestate',
 | |
|     'void',
 | |
|     'where',
 | |
|     'while'
 | |
|   ];
 | |
| 
 | |
|   const KEYWORDS = {
 | |
|     keyword: NORMAL_KEYWORDS,
 | |
|     built_in: BUILT_IN_KEYWORDS,
 | |
|     literal: LITERAL_KEYWORDS
 | |
|   };
 | |
| 
 | |
|   return {
 | |
|     name: 'X++',
 | |
|     aliases: ['x++'],
 | |
|     keywords: KEYWORDS,
 | |
|     contains: [
 | |
|       hljs.C_LINE_COMMENT_MODE,
 | |
|       hljs.C_BLOCK_COMMENT_MODE,
 | |
|       hljs.APOS_STRING_MODE,
 | |
|       hljs.QUOTE_STRING_MODE,
 | |
|       hljs.C_NUMBER_MODE,
 | |
|       {
 | |
|         className: 'meta',
 | |
|         begin: '#',
 | |
|         end: '$'
 | |
|       },
 | |
|       {
 | |
|         className: 'class',
 | |
|         beginKeywords: 'class interface',
 | |
|         end: /\{/,
 | |
|         excludeEnd: true,
 | |
|         illegal: ':',
 | |
|         contains: [
 | |
|           {
 | |
|             beginKeywords: 'extends implements'
 | |
|           },
 | |
|           hljs.UNDERSCORE_TITLE_MODE
 | |
|         ]
 | |
|       }
 | |
|     ]
 | |
|   };
 | |
| }
 | |
| 
 | |
| module.exports = axapta;
 |