hexo/node_modules/highlight.js/es/languages/cal.js

160 lines
2.8 KiB
JavaScript

/*
Language: C/AL
Author: Kenneth Fuglsang Christensen <kfuglsang@gmail.com>
Description: Provides highlighting of Microsoft Dynamics NAV C/AL code files
Website: https://docs.microsoft.com/en-us/dynamics-nav/programming-in-c-al
*/
/** @type LanguageFn */
function cal(hljs) {
const regex = hljs.regex;
const KEYWORDS = [
"div",
"mod",
"in",
"and",
"or",
"not",
"xor",
"asserterror",
"begin",
"case",
"do",
"downto",
"else",
"end",
"exit",
"for",
"local",
"if",
"of",
"repeat",
"then",
"to",
"until",
"while",
"with",
"var"
];
const LITERALS = 'false true';
const COMMENT_MODES = [
hljs.C_LINE_COMMENT_MODE,
hljs.COMMENT(
/\{/,
/\}/,
{ relevance: 0 }
),
hljs.COMMENT(
/\(\*/,
/\*\)/,
{ relevance: 10 }
)
];
const STRING = {
className: 'string',
begin: /'/,
end: /'/,
contains: [ { begin: /''/ } ]
};
const CHAR_STRING = {
className: 'string',
begin: /(#\d+)+/
};
const DATE = {
className: 'number',
begin: '\\b\\d+(\\.\\d+)?(DT|D|T)',
relevance: 0
};
const DBL_QUOTED_VARIABLE = {
className: 'string', // not a string technically but makes sense to be highlighted in the same style
begin: '"',
end: '"'
};
const PROCEDURE = {
match: [
/procedure/,
/\s+/,
/[a-zA-Z_][\w@]*/,
/\s*/
],
scope: {
1: "keyword",
3: "title.function"
},
contains: [
{
className: 'params',
begin: /\(/,
end: /\)/,
keywords: KEYWORDS,
contains: [
STRING,
CHAR_STRING,
hljs.NUMBER_MODE
]
},
...COMMENT_MODES
]
};
const OBJECT_TYPES = [
"Table",
"Form",
"Report",
"Dataport",
"Codeunit",
"XMLport",
"MenuSuite",
"Page",
"Query"
];
const OBJECT = {
match: [
/OBJECT/,
/\s+/,
regex.either(...OBJECT_TYPES),
/\s+/,
/\d+/,
/\s+(?=[^\s])/,
/.*/,
/$/
],
relevance: 3,
scope: {
1: "keyword",
3: "type",
5: "number",
7: "title"
}
};
const PROPERTY = {
match: /[\w]+(?=\=)/,
scope: "attribute",
relevance: 0
};
return {
name: 'C/AL',
case_insensitive: true,
keywords: {
keyword: KEYWORDS,
literal: LITERALS
},
illegal: /\/\*/,
contains: [
PROPERTY,
STRING,
CHAR_STRING,
DATE,
DBL_QUOTED_VARIABLE,
hljs.NUMBER_MODE,
OBJECT,
PROCEDURE
]
};
}
export { cal as default };