lexon.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. /*!-----------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Version: 0.31.1(337587859b1c171314b40503171188b6cea6a32a)
  4. * Released under the MIT license
  5. * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
  6. *-----------------------------------------------------------------------------*/
  7. // src/basic-languages/lexon/lexon.ts
  8. var conf = {
  9. comments: {
  10. lineComment: "COMMENT"
  11. },
  12. brackets: [["(", ")"]],
  13. autoClosingPairs: [
  14. { open: "{", close: "}" },
  15. { open: "[", close: "]" },
  16. { open: "(", close: ")" },
  17. { open: '"', close: '"' },
  18. { open: ":", close: "." }
  19. ],
  20. surroundingPairs: [
  21. { open: "{", close: "}" },
  22. { open: "[", close: "]" },
  23. { open: "(", close: ")" },
  24. { open: "`", close: "`" },
  25. { open: '"', close: '"' },
  26. { open: "'", close: "'" },
  27. { open: ":", close: "." }
  28. ],
  29. folding: {
  30. markers: {
  31. start: new RegExp("^\\s*(::\\s*|COMMENT\\s+)#region"),
  32. end: new RegExp("^\\s*(::\\s*|COMMENT\\s+)#endregion")
  33. }
  34. }
  35. };
  36. var language = {
  37. tokenPostfix: ".lexon",
  38. ignoreCase: true,
  39. keywords: [
  40. "lexon",
  41. "lex",
  42. "clause",
  43. "terms",
  44. "contracts",
  45. "may",
  46. "pay",
  47. "pays",
  48. "appoints",
  49. "into",
  50. "to"
  51. ],
  52. typeKeywords: ["amount", "person", "key", "time", "date", "asset", "text"],
  53. operators: [
  54. "less",
  55. "greater",
  56. "equal",
  57. "le",
  58. "gt",
  59. "or",
  60. "and",
  61. "add",
  62. "added",
  63. "subtract",
  64. "subtracted",
  65. "multiply",
  66. "multiplied",
  67. "times",
  68. "divide",
  69. "divided",
  70. "is",
  71. "be",
  72. "certified"
  73. ],
  74. symbols: /[=><!~?:&|+\-*\/\^%]+/,
  75. tokenizer: {
  76. root: [
  77. [/^(\s*)(comment:?(?:\s.*|))$/, ["", "comment"]],
  78. [
  79. /"/,
  80. {
  81. token: "identifier.quote",
  82. bracket: "@open",
  83. next: "@quoted_identifier"
  84. }
  85. ],
  86. [
  87. "LEX$",
  88. {
  89. token: "keyword",
  90. bracket: "@open",
  91. next: "@identifier_until_period"
  92. }
  93. ],
  94. ["LEXON", { token: "keyword", bracket: "@open", next: "@semver" }],
  95. [
  96. ":",
  97. {
  98. token: "delimiter",
  99. bracket: "@open",
  100. next: "@identifier_until_period"
  101. }
  102. ],
  103. [
  104. /[a-z_$][\w$]*/,
  105. {
  106. cases: {
  107. "@operators": "operator",
  108. "@typeKeywords": "keyword.type",
  109. "@keywords": "keyword",
  110. "@default": "identifier"
  111. }
  112. }
  113. ],
  114. { include: "@whitespace" },
  115. [/[{}()\[\]]/, "@brackets"],
  116. [/[<>](?!@symbols)/, "@brackets"],
  117. [/@symbols/, "delimiter"],
  118. [/\d*\.\d*\.\d*/, "number.semver"],
  119. [/\d*\.\d+([eE][\-+]?\d+)?/, "number.float"],
  120. [/0[xX][0-9a-fA-F]+/, "number.hex"],
  121. [/\d+/, "number"],
  122. [/[;,.]/, "delimiter"]
  123. ],
  124. quoted_identifier: [
  125. [/[^\\"]+/, "identifier"],
  126. [/"/, { token: "identifier.quote", bracket: "@close", next: "@pop" }]
  127. ],
  128. space_identifier_until_period: [
  129. [":", "delimiter"],
  130. [" ", { token: "white", next: "@identifier_rest" }]
  131. ],
  132. identifier_until_period: [
  133. { include: "@whitespace" },
  134. [":", { token: "delimiter", next: "@identifier_rest" }],
  135. [/[^\\.]+/, "identifier"],
  136. [/\./, { token: "delimiter", bracket: "@close", next: "@pop" }]
  137. ],
  138. identifier_rest: [
  139. [/[^\\.]+/, "identifier"],
  140. [/\./, { token: "delimiter", bracket: "@close", next: "@pop" }]
  141. ],
  142. semver: [
  143. { include: "@whitespace" },
  144. [":", "delimiter"],
  145. [/\d*\.\d*\.\d*/, { token: "number.semver", bracket: "@close", next: "@pop" }]
  146. ],
  147. whitespace: [[/[ \t\r\n]+/, "white"]]
  148. }
  149. };
  150. export {
  151. conf,
  152. language
  153. };