cal.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*
  2. Language: C/AL
  3. Author: Kenneth Fuglsang Christensen <kfuglsang@gmail.com>
  4. Description: Provides highlighting of Microsoft Dynamics NAV C/AL code files
  5. Website: https://docs.microsoft.com/en-us/dynamics-nav/programming-in-c-al
  6. */
  7. /** @type LanguageFn */
  8. function cal(hljs) {
  9. var KEYWORDS =
  10. 'div mod in and or not xor asserterror begin case do downto else end exit for if of repeat then to ' +
  11. 'until while with var';
  12. var LITERALS = 'false true';
  13. var COMMENT_MODES = [
  14. hljs.C_LINE_COMMENT_MODE,
  15. hljs.COMMENT(
  16. /\{/,
  17. /\}/,
  18. {
  19. relevance: 0
  20. }
  21. ),
  22. hljs.COMMENT(
  23. /\(\*/,
  24. /\*\)/,
  25. {
  26. relevance: 10
  27. }
  28. )
  29. ];
  30. var STRING = {
  31. className: 'string',
  32. begin: /'/, end: /'/,
  33. contains: [{begin: /''/}]
  34. };
  35. var CHAR_STRING = {
  36. className: 'string', begin: /(#\d+)+/
  37. };
  38. var DATE = {
  39. className: 'number',
  40. begin: '\\b\\d+(\\.\\d+)?(DT|D|T)',
  41. relevance: 0
  42. };
  43. var DBL_QUOTED_VARIABLE = {
  44. className: 'string', // not a string technically but makes sense to be highlighted in the same style
  45. begin: '"',
  46. end: '"'
  47. };
  48. var PROCEDURE = {
  49. className: 'function',
  50. beginKeywords: 'procedure', end: /[:;]/,
  51. keywords: 'procedure|10',
  52. contains: [
  53. hljs.TITLE_MODE,
  54. {
  55. className: 'params',
  56. begin: /\(/, end: /\)/,
  57. keywords: KEYWORDS,
  58. contains: [STRING, CHAR_STRING]
  59. }
  60. ].concat(COMMENT_MODES)
  61. };
  62. var OBJECT = {
  63. className: 'class',
  64. begin: 'OBJECT (Table|Form|Report|Dataport|Codeunit|XMLport|MenuSuite|Page|Query) (\\d+) ([^\\r\\n]+)',
  65. returnBegin: true,
  66. contains: [
  67. hljs.TITLE_MODE,
  68. PROCEDURE
  69. ]
  70. };
  71. return {
  72. name: 'C/AL',
  73. case_insensitive: true,
  74. keywords: { keyword: KEYWORDS, literal: LITERALS },
  75. illegal: /\/\*/,
  76. contains: [
  77. STRING, CHAR_STRING,
  78. DATE, DBL_QUOTED_VARIABLE,
  79. hljs.NUMBER_MODE,
  80. OBJECT,
  81. PROCEDURE
  82. ]
  83. };
  84. }
  85. module.exports = cal;