basant307/AI_Governance_Project
048
1/*2Language: C/AL3Author: Kenneth Fuglsang Christensen <kfuglsang@gmail.com>4Description: Provides highlighting of Microsoft Dynamics NAV C/AL code files5Website: https://docs.microsoft.com/en-us/dynamics-nav/programming-in-c-al6Category: enterprise7*/8 9/** @type LanguageFn */10function cal(hljs) {11 const regex = hljs.regex;12 const KEYWORDS = [13 "div",14 "mod",15 "in",16 "and",17 "or",18 "not",19 "xor",20 "asserterror",21 "begin",22 "case",23 "do",24 "downto",25 "else",26 "end",27 "exit",28 "for",29 "local",30 "if",31 "of",32 "repeat",33 "then",34 "to",35 "until",36 "while",37 "with",38 "var"39 ];40 const LITERALS = 'false true';41 const COMMENT_MODES = [42 hljs.C_LINE_COMMENT_MODE,43 hljs.COMMENT(44 /\{/,45 /\}/,46 { relevance: 0 }47 ),48 hljs.COMMENT(49 /\(\*/,50 /\*\)/,51 { relevance: 10 }52 )53 ];54 const STRING = {55 className: 'string',56 begin: /'/,57 end: /'/,58 contains: [ { begin: /''/ } ]59 };60 const CHAR_STRING = {61 className: 'string',62 begin: /(#\d+)+/63 };64 const DATE = {65 className: 'number',66 begin: '\\b\\d+(\\.\\d+)?(DT|D|T)',67 relevance: 068 };69 const DBL_QUOTED_VARIABLE = {70 className: 'string', // not a string technically but makes sense to be highlighted in the same style71 begin: '"',72 end: '"'73 };74 75 const PROCEDURE = {76 match: [77 /procedure/,78 /\s+/,79 /[a-zA-Z_][\w@]*/,80 /\s*/81 ],82 scope: {83 1: "keyword",84 3: "title.function"85 },86 contains: [87 {88 className: 'params',89 begin: /\(/,90 end: /\)/,91 keywords: KEYWORDS,92 contains: [93 STRING,94 CHAR_STRING,95 hljs.NUMBER_MODE96 ]97 },98 ...COMMENT_MODES99 ]100 };101 102 const OBJECT_TYPES = [103 "Table",104 "Form",105 "Report",106 "Dataport",107 "Codeunit",108 "XMLport",109 "MenuSuite",110 "Page",111 "Query"112 ];113 const OBJECT = {114 match: [115 /OBJECT/,116 /\s+/,117 regex.either(...OBJECT_TYPES),118 /\s+/,119 /\d+/,120 /\s+(?=[^\s])/,121 /.*/,122 /$/123 ],124 relevance: 3,125 scope: {126 1: "keyword",127 3: "type",128 5: "number",129 7: "title"130 }131 };132 133 const PROPERTY = {134 match: /[\w]+(?=\=)/,135 scope: "attribute",136 relevance: 0137 };138 139 return {140 name: 'C/AL',141 case_insensitive: true,142 keywords: {143 keyword: KEYWORDS,144 literal: LITERALS145 },146 illegal: /\/\*/,147 contains: [148 PROPERTY,149 STRING,150 CHAR_STRING,151 DATE,152 DBL_QUOTED_VARIABLE,153 hljs.NUMBER_MODE,154 OBJECT,155 PROCEDURE156 ]157 };158}159 160export { cal as default };161 