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