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