coffee.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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(["require", "exports"], function (require, exports) {
  6. 'use strict';
  7. Object.defineProperty(exports, "__esModule", { value: true });
  8. exports.conf = {
  9. wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\#%\^\&\*\(\)\=\$\-\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,
  10. comments: {
  11. blockComment: ['###', '###'],
  12. lineComment: '#'
  13. },
  14. brackets: [
  15. ['{', '}'],
  16. ['[', ']'],
  17. ['(', ')']
  18. ],
  19. autoClosingPairs: [
  20. { open: '{', close: '}' },
  21. { open: '[', close: ']' },
  22. { open: '(', close: ')' },
  23. { open: '"', close: '"' },
  24. { open: '\'', close: '\'' },
  25. ],
  26. surroundingPairs: [
  27. { open: '{', close: '}' },
  28. { open: '[', close: ']' },
  29. { open: '(', close: ')' },
  30. { open: '"', close: '"' },
  31. { open: '\'', close: '\'' },
  32. ],
  33. folding: {
  34. markers: {
  35. start: new RegExp("^\\s*#region\\b"),
  36. end: new RegExp("^\\s*#endregion\\b")
  37. }
  38. }
  39. };
  40. exports.language = {
  41. defaultToken: '',
  42. ignoreCase: true,
  43. tokenPostfix: '.coffee',
  44. brackets: [
  45. { open: '{', close: '}', token: 'delimiter.curly' },
  46. { open: '[', close: ']', token: 'delimiter.square' },
  47. { open: '(', close: ')', token: 'delimiter.parenthesis' }
  48. ],
  49. regEx: /\/(?!\/\/)(?:[^\/\\]|\\.)*\/[igm]*/,
  50. keywords: [
  51. 'and', 'or', 'is', 'isnt', 'not', 'on', 'yes', '@', 'no', 'off',
  52. 'true', 'false', 'null', 'this',
  53. 'new', 'delete', 'typeof', 'in', 'instanceof',
  54. 'return', 'throw', 'break', 'continue', 'debugger',
  55. 'if', 'else', 'switch', 'for', 'while', 'do', 'try', 'catch', 'finally',
  56. 'class', 'extends', 'super',
  57. 'undefined', 'then', 'unless', 'until', 'loop', 'of', 'by', 'when'
  58. ],
  59. // we include these common regular expressions
  60. symbols: /[=><!~?&%|+\-*\/\^\.,\:]+/,
  61. escapes: /\\(?:[abfnrtv\\"'$]|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
  62. // The main tokenizer for our languages
  63. tokenizer: {
  64. root: [
  65. // identifiers and keywords
  66. [/\@[a-zA-Z_]\w*/, 'variable.predefined'],
  67. [/[a-zA-Z_]\w*/, {
  68. cases: {
  69. 'this': 'variable.predefined',
  70. '@keywords': { token: 'keyword.$0' },
  71. '@default': ''
  72. }
  73. }],
  74. // whitespace
  75. [/[ \t\r\n]+/, ''],
  76. // Comments
  77. [/###/, 'comment', '@comment'],
  78. [/#.*$/, 'comment'],
  79. // regular expressions
  80. ['///', { token: 'regexp', next: '@hereregexp' }],
  81. [/^(\s*)(@regEx)/, ['', 'regexp']],
  82. [/(\()(\s*)(@regEx)/, ['@brackets', '', 'regexp']],
  83. [/(\,)(\s*)(@regEx)/, ['delimiter', '', 'regexp']],
  84. [/(\=)(\s*)(@regEx)/, ['delimiter', '', 'regexp']],
  85. [/(\:)(\s*)(@regEx)/, ['delimiter', '', 'regexp']],
  86. [/(\[)(\s*)(@regEx)/, ['@brackets', '', 'regexp']],
  87. [/(\!)(\s*)(@regEx)/, ['delimiter', '', 'regexp']],
  88. [/(\&)(\s*)(@regEx)/, ['delimiter', '', 'regexp']],
  89. [/(\|)(\s*)(@regEx)/, ['delimiter', '', 'regexp']],
  90. [/(\?)(\s*)(@regEx)/, ['delimiter', '', 'regexp']],
  91. [/(\{)(\s*)(@regEx)/, ['@brackets', '', 'regexp']],
  92. [/(\;)(\s*)(@regEx)/, ['', '', 'regexp']],
  93. // delimiters
  94. [/}/, {
  95. cases: {
  96. '$S2==interpolatedstring': { token: 'string', next: '@pop' },
  97. '@default': '@brackets'
  98. }
  99. }],
  100. [/[{}()\[\]]/, '@brackets'],
  101. [/@symbols/, 'delimiter'],
  102. // numbers
  103. [/\d+[eE]([\-+]?\d+)?/, 'number.float'],
  104. [/\d+\.\d+([eE][\-+]?\d+)?/, 'number.float'],
  105. [/0[xX][0-9a-fA-F]+/, 'number.hex'],
  106. [/0[0-7]+(?!\d)/, 'number.octal'],
  107. [/\d+/, 'number'],
  108. // delimiter: after number because of .\d floats
  109. [/[,.]/, 'delimiter'],
  110. // strings:
  111. [/"""/, 'string', '@herestring."""'],
  112. [/'''/, 'string', '@herestring.\'\'\''],
  113. [/"/, {
  114. cases: {
  115. '@eos': 'string',
  116. '@default': { token: 'string', next: '@string."' }
  117. }
  118. }],
  119. [/'/, {
  120. cases: {
  121. '@eos': 'string',
  122. '@default': { token: 'string', next: '@string.\'' }
  123. }
  124. }],
  125. ],
  126. string: [
  127. [/[^"'\#\\]+/, 'string'],
  128. [/@escapes/, 'string.escape'],
  129. [/\./, 'string.escape.invalid'],
  130. [/\./, 'string.escape.invalid'],
  131. [/#{/, {
  132. cases: {
  133. '$S2=="': { token: 'string', next: 'root.interpolatedstring' },
  134. '@default': 'string'
  135. }
  136. }],
  137. [/["']/, {
  138. cases: {
  139. '$#==$S2': { token: 'string', next: '@pop' },
  140. '@default': 'string'
  141. }
  142. }],
  143. [/#/, 'string']
  144. ],
  145. herestring: [
  146. [/("""|''')/, {
  147. cases: {
  148. '$1==$S2': { token: 'string', next: '@pop' },
  149. '@default': 'string'
  150. }
  151. }],
  152. [/[^#\\'"]+/, 'string'],
  153. [/['"]+/, 'string'],
  154. [/@escapes/, 'string.escape'],
  155. [/\./, 'string.escape.invalid'],
  156. [/#{/, { token: 'string.quote', next: 'root.interpolatedstring' }],
  157. [/#/, 'string']
  158. ],
  159. comment: [
  160. [/[^#]+/, 'comment',],
  161. [/###/, 'comment', '@pop'],
  162. [/#/, 'comment'],
  163. ],
  164. hereregexp: [
  165. [/[^\\\/#]+/, 'regexp'],
  166. [/\\./, 'regexp'],
  167. [/#.*$/, 'comment'],
  168. ['///[igm]*', { token: 'regexp', next: '@pop' }],
  169. [/\//, 'regexp'],
  170. ],
  171. },
  172. };
  173. });