lexon.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  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/lexon/lexon',["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. lineComment: 'COMMENT'
  12. // blockComment: ['COMMENT', '.'],
  13. },
  14. brackets: [['(', ')']],
  15. autoClosingPairs: [
  16. { open: '{', close: '}' },
  17. { open: '[', close: ']' },
  18. { open: '(', close: ')' },
  19. { open: '"', close: '"' },
  20. { open: ':', close: '.' }
  21. ],
  22. surroundingPairs: [
  23. { open: '{', close: '}' },
  24. { open: '[', close: ']' },
  25. { open: '(', close: ')' },
  26. { open: '`', close: '`' },
  27. { open: '"', close: '"' },
  28. { open: "'", close: "'" },
  29. { open: ':', close: '.' }
  30. ],
  31. folding: {
  32. markers: {
  33. start: new RegExp('^\\s*(::\\s*|COMMENT\\s+)#region'),
  34. end: new RegExp('^\\s*(::\\s*|COMMENT\\s+)#endregion')
  35. }
  36. }
  37. };
  38. exports.language = {
  39. // Set defaultToken to invalid to see what you do not tokenize yet
  40. // defaultToken: 'invalid',
  41. tokenPostfix: '.lexon',
  42. ignoreCase: true,
  43. keywords: [
  44. 'lexon',
  45. 'lex',
  46. 'clause',
  47. 'terms',
  48. 'contracts',
  49. 'may',
  50. 'pay',
  51. 'pays',
  52. 'appoints',
  53. 'into',
  54. 'to'
  55. ],
  56. typeKeywords: ['amount', 'person', 'key', 'time', 'date', 'asset', 'text'],
  57. operators: [
  58. 'less',
  59. 'greater',
  60. 'equal',
  61. 'le',
  62. 'gt',
  63. 'or',
  64. 'and',
  65. 'add',
  66. 'added',
  67. 'subtract',
  68. 'subtracted',
  69. 'multiply',
  70. 'multiplied',
  71. 'times',
  72. 'divide',
  73. 'divided',
  74. 'is',
  75. 'be',
  76. 'certified'
  77. ],
  78. // we include these common regular expressions
  79. symbols: /[=><!~?:&|+\-*\/\^%]+/,
  80. // The main tokenizer for our languages
  81. tokenizer: {
  82. root: [
  83. // comment
  84. [/^(\s*)(comment:?(?:\s.*|))$/, ['', 'comment']],
  85. // special identifier cases
  86. [
  87. /"/,
  88. {
  89. token: 'identifier.quote',
  90. bracket: '@open',
  91. next: '@quoted_identifier'
  92. }
  93. ],
  94. [
  95. 'LEX$',
  96. {
  97. token: 'keyword',
  98. bracket: '@open',
  99. next: '@identifier_until_period'
  100. }
  101. ],
  102. ['LEXON', { token: 'keyword', bracket: '@open', next: '@semver' }],
  103. [
  104. ':',
  105. {
  106. token: 'delimiter',
  107. bracket: '@open',
  108. next: '@identifier_until_period'
  109. }
  110. ],
  111. // identifiers and keywords
  112. [
  113. /[a-z_$][\w$]*/,
  114. {
  115. cases: {
  116. '@operators': 'operator',
  117. '@typeKeywords': 'keyword.type',
  118. '@keywords': 'keyword',
  119. '@default': 'identifier'
  120. }
  121. }
  122. ],
  123. // whitespace
  124. { include: '@whitespace' },
  125. // delimiters and operators
  126. [/[{}()\[\]]/, '@brackets'],
  127. [/[<>](?!@symbols)/, '@brackets'],
  128. [/@symbols/, 'delimiter'],
  129. // numbers
  130. [/\d*\.\d*\.\d*/, 'number.semver'],
  131. [/\d*\.\d+([eE][\-+]?\d+)?/, 'number.float'],
  132. [/0[xX][0-9a-fA-F]+/, 'number.hex'],
  133. [/\d+/, 'number'],
  134. // delimiter: after number because of .\d floats
  135. [/[;,.]/, 'delimiter']
  136. ],
  137. quoted_identifier: [
  138. [/[^\\"]+/, 'identifier'],
  139. [/"/, { token: 'identifier.quote', bracket: '@close', next: '@pop' }]
  140. ],
  141. space_identifier_until_period: [
  142. [':', 'delimiter'],
  143. [' ', { token: 'white', next: '@identifier_rest' }]
  144. ],
  145. identifier_until_period: [
  146. { include: '@whitespace' },
  147. [':', { token: 'delimiter', next: '@identifier_rest' }],
  148. [/[^\\.]+/, 'identifier'],
  149. [/\./, { token: 'delimiter', bracket: '@close', next: '@pop' }]
  150. ],
  151. identifier_rest: [
  152. [/[^\\.]+/, 'identifier'],
  153. [/\./, { token: 'delimiter', bracket: '@close', next: '@pop' }]
  154. ],
  155. semver: [
  156. { include: '@whitespace' },
  157. [':', 'delimiter'],
  158. [/\d*\.\d*\.\d*/, { token: 'number.semver', bracket: '@close', next: '@pop' }]
  159. ],
  160. whitespace: [[/[ \t\r\n]+/, 'white']]
  161. }
  162. };
  163. });