m3.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. /*---------------------------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Licensed under the MIT License. See License.txt in the project root for license information.
  4. *--------------------------------------------------------------------------------------------*/
  5. define('vs/basic-languages/m3/m3',["require", "exports"], function (require, exports) {
  6. "use strict";
  7. Object.defineProperty(exports, "__esModule", { value: true });
  8. exports.language = exports.conf = void 0;
  9. exports.conf = {
  10. comments: {
  11. blockComment: ['(*', '*)']
  12. },
  13. brackets: [
  14. ['{', '}'],
  15. ['[', ']'],
  16. ['(', ')']
  17. ],
  18. autoClosingPairs: [
  19. { open: '[', close: ']' },
  20. { open: '{', close: '}' },
  21. { open: '(', close: ')' },
  22. { open: '(*', close: '*)' },
  23. { open: '<*', close: '*>' },
  24. { open: "'", close: "'", notIn: ['string', 'comment'] },
  25. { open: '"', close: '"', notIn: ['string', 'comment'] }
  26. ]
  27. };
  28. exports.language = {
  29. defaultToken: '',
  30. tokenPostfix: '.m3',
  31. brackets: [
  32. { token: 'delimiter.curly', open: '{', close: '}' },
  33. { token: 'delimiter.parenthesis', open: '(', close: ')' },
  34. { token: 'delimiter.square', open: '[', close: ']' }
  35. ],
  36. keywords: [
  37. 'AND',
  38. 'ANY',
  39. 'ARRAY',
  40. 'AS',
  41. 'BEGIN',
  42. 'BITS',
  43. 'BRANDED',
  44. 'BY',
  45. 'CASE',
  46. 'CONST',
  47. 'DIV',
  48. 'DO',
  49. 'ELSE',
  50. 'ELSIF',
  51. 'END',
  52. 'EVAL',
  53. 'EXCEPT',
  54. 'EXCEPTION',
  55. 'EXIT',
  56. 'EXPORTS',
  57. 'FINALLY',
  58. 'FOR',
  59. 'FROM',
  60. 'GENERIC',
  61. 'IF',
  62. 'IMPORT',
  63. 'IN',
  64. 'INTERFACE',
  65. 'LOCK',
  66. 'LOOP',
  67. 'METHODS',
  68. 'MOD',
  69. 'MODULE',
  70. 'NOT',
  71. 'OBJECT',
  72. 'OF',
  73. 'OR',
  74. 'OVERRIDES',
  75. 'PROCEDURE',
  76. 'RAISE',
  77. 'RAISES',
  78. 'READONLY',
  79. 'RECORD',
  80. 'REF',
  81. 'REPEAT',
  82. 'RETURN',
  83. 'REVEAL',
  84. 'SET',
  85. 'THEN',
  86. 'TO',
  87. 'TRY',
  88. 'TYPE',
  89. 'TYPECASE',
  90. 'UNSAFE',
  91. 'UNTIL',
  92. 'UNTRACED',
  93. 'VALUE',
  94. 'VAR',
  95. 'WHILE',
  96. 'WITH'
  97. ],
  98. reservedConstNames: [
  99. 'ABS',
  100. 'ADR',
  101. 'ADRSIZE',
  102. 'BITSIZE',
  103. 'BYTESIZE',
  104. 'CEILING',
  105. 'DEC',
  106. 'DISPOSE',
  107. 'FALSE',
  108. 'FIRST',
  109. 'FLOAT',
  110. 'FLOOR',
  111. 'INC',
  112. 'ISTYPE',
  113. 'LAST',
  114. 'LOOPHOLE',
  115. 'MAX',
  116. 'MIN',
  117. 'NARROW',
  118. 'NEW',
  119. 'NIL',
  120. 'NUMBER',
  121. 'ORD',
  122. 'ROUND',
  123. 'SUBARRAY',
  124. 'TRUE',
  125. 'TRUNC',
  126. 'TYPECODE',
  127. 'VAL'
  128. ],
  129. reservedTypeNames: [
  130. 'ADDRESS',
  131. 'ANY',
  132. 'BOOLEAN',
  133. 'CARDINAL',
  134. 'CHAR',
  135. 'EXTENDED',
  136. 'INTEGER',
  137. 'LONGCARD',
  138. 'LONGINT',
  139. 'LONGREAL',
  140. 'MUTEX',
  141. 'NULL',
  142. 'REAL',
  143. 'REFANY',
  144. 'ROOT',
  145. 'TEXT'
  146. ],
  147. operators: ['+', '-', '*', '/', '&', '^', '.'],
  148. relations: ['=', '#', '<', '<=', '>', '>=', '<:', ':'],
  149. delimiters: ['|', '..', '=>', ',', ';', ':='],
  150. symbols: /[>=<#.,:;+\-*/&^]+/,
  151. escapes: /\\(?:[\\fnrt"']|[0-7]{3})/,
  152. tokenizer: {
  153. root: [
  154. // Identifiers and keywords
  155. [/_\w*/, 'invalid'],
  156. [
  157. /[a-zA-Z][a-zA-Z0-9_]*/,
  158. {
  159. cases: {
  160. '@keywords': { token: 'keyword.$0' },
  161. '@reservedConstNames': { token: 'constant.reserved.$0' },
  162. '@reservedTypeNames': { token: 'type.reserved.$0' },
  163. '@default': 'identifier'
  164. }
  165. }
  166. ],
  167. // Whitespace
  168. { include: '@whitespace' },
  169. [/[{}()\[\]]/, '@brackets'],
  170. // Integer- and real literals
  171. [/[0-9]+\.[0-9]+(?:[DdEeXx][\+\-]?[0-9]+)?/, 'number.float'],
  172. [/[0-9]+(?:\_[0-9a-fA-F]+)?L?/, 'number'],
  173. // Operators, relations, and delimiters
  174. [
  175. /@symbols/,
  176. {
  177. cases: {
  178. '@operators': 'operators',
  179. '@relations': 'operators',
  180. '@delimiters': 'delimiter',
  181. '@default': 'invalid'
  182. }
  183. }
  184. ],
  185. // Character literals
  186. [/'[^\\']'/, 'string.char'],
  187. [/(')(@escapes)(')/, ['string.char', 'string.escape', 'string.char']],
  188. [/'/, 'invalid'],
  189. // Text literals
  190. [/"([^"\\]|\\.)*$/, 'invalid'],
  191. [/"/, 'string.text', '@text']
  192. ],
  193. text: [
  194. [/[^\\"]+/, 'string.text'],
  195. [/@escapes/, 'string.escape'],
  196. [/\\./, 'invalid'],
  197. [/"/, 'string.text', '@pop']
  198. ],
  199. comment: [
  200. [/\(\*/, 'comment', '@push'],
  201. [/\*\)/, 'comment', '@pop'],
  202. [/./, 'comment']
  203. ],
  204. pragma: [
  205. [/<\*/, 'keyword.pragma', '@push'],
  206. [/\*>/, 'keyword.pragma', '@pop'],
  207. [/./, 'keyword.pragma']
  208. ],
  209. whitespace: [
  210. [/[ \t\r\n]+/, 'white'],
  211. [/\(\*/, 'comment', '@comment'],
  212. [/<\*/, 'keyword.pragma', '@pragma']
  213. ]
  214. }
  215. };
  216. });