m3.js 5.3 KB

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