vb.js 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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. comments: {
  10. lineComment: '\'',
  11. blockComment: ['/*', '*/'],
  12. },
  13. brackets: [
  14. ['{', '}'], ['[', ']'], ['(', ')'], ['<', '>'],
  15. ['addhandler', 'end addhandler'],
  16. ['class', 'end class'],
  17. ['enum', 'end enum'],
  18. ['event', 'end event'],
  19. ['function', 'end function'],
  20. ['get', 'end get'],
  21. ['if', 'end if'],
  22. ['interface', 'end interface'],
  23. ['module', 'end module'],
  24. ['namespace', 'end namespace'],
  25. ['operator', 'end operator'],
  26. ['property', 'end property'],
  27. ['raiseevent', 'end raiseevent'],
  28. ['removehandler', 'end removehandler'],
  29. ['select', 'end select'],
  30. ['set', 'end set'],
  31. ['structure', 'end structure'],
  32. ['sub', 'end sub'],
  33. ['synclock', 'end synclock'],
  34. ['try', 'end try'],
  35. ['while', 'end while'],
  36. ['with', 'end with'],
  37. ['using', 'end using'],
  38. ['do', 'loop'],
  39. ['for', 'next']
  40. ],
  41. autoClosingPairs: [
  42. { open: '{', close: '}', notIn: ['string', 'comment'] },
  43. { open: '[', close: ']', notIn: ['string', 'comment'] },
  44. { open: '(', close: ')', notIn: ['string', 'comment'] },
  45. { open: '"', close: '"', notIn: ['string', 'comment'] },
  46. { open: '<', close: '>', notIn: ['string', 'comment'] },
  47. ],
  48. folding: {
  49. markers: {
  50. start: new RegExp("^\\s*#Region\\b"),
  51. end: new RegExp("^\\s*#End Region\\b")
  52. }
  53. }
  54. };
  55. exports.language = {
  56. defaultToken: '',
  57. tokenPostfix: '.vb',
  58. ignoreCase: true,
  59. brackets: [
  60. { token: 'delimiter.bracket', open: '{', close: '}' },
  61. { token: 'delimiter.array', open: '[', close: ']' },
  62. { token: 'delimiter.parenthesis', open: '(', close: ')' },
  63. { token: 'delimiter.angle', open: '<', close: '>' },
  64. // Special bracket statement pairs
  65. // according to https://msdn.microsoft.com/en-us/library/tsw2a11z.aspx
  66. { token: 'keyword.tag-addhandler', open: 'addhandler', close: 'end addhandler' },
  67. { token: 'keyword.tag-class', open: 'class', close: 'end class' },
  68. { token: 'keyword.tag-enum', open: 'enum', close: 'end enum' },
  69. { token: 'keyword.tag-event', open: 'event', close: 'end event' },
  70. { token: 'keyword.tag-function', open: 'function', close: 'end function' },
  71. { token: 'keyword.tag-get', open: 'get', close: 'end get' },
  72. { token: 'keyword.tag-if', open: 'if', close: 'end if' },
  73. { token: 'keyword.tag-interface', open: 'interface', close: 'end interface' },
  74. { token: 'keyword.tag-module', open: 'module', close: 'end module' },
  75. { token: 'keyword.tag-namespace', open: 'namespace', close: 'end namespace' },
  76. { token: 'keyword.tag-operator', open: 'operator', close: 'end operator' },
  77. { token: 'keyword.tag-property', open: 'property', close: 'end property' },
  78. { token: 'keyword.tag-raiseevent', open: 'raiseevent', close: 'end raiseevent' },
  79. { token: 'keyword.tag-removehandler', open: 'removehandler', close: 'end removehandler' },
  80. { token: 'keyword.tag-select', open: 'select', close: 'end select' },
  81. { token: 'keyword.tag-set', open: 'set', close: 'end set' },
  82. { token: 'keyword.tag-structure', open: 'structure', close: 'end structure' },
  83. { token: 'keyword.tag-sub', open: 'sub', close: 'end sub' },
  84. { token: 'keyword.tag-synclock', open: 'synclock', close: 'end synclock' },
  85. { token: 'keyword.tag-try', open: 'try', close: 'end try' },
  86. { token: 'keyword.tag-while', open: 'while', close: 'end while' },
  87. { token: 'keyword.tag-with', open: 'with', close: 'end with' },
  88. // Other pairs
  89. { token: 'keyword.tag-using', open: 'using', close: 'end using' },
  90. { token: 'keyword.tag-do', open: 'do', close: 'loop' },
  91. { token: 'keyword.tag-for', open: 'for', close: 'next' }
  92. ],
  93. keywords: [
  94. 'AddHandler', 'AddressOf', 'Alias', 'And', 'AndAlso', 'As', 'Async', 'Boolean', 'ByRef', 'Byte', 'ByVal', 'Call',
  95. 'Case', 'Catch', 'CBool', 'CByte', 'CChar', 'CDate', 'CDbl', 'CDec', 'Char', 'CInt', 'Class', 'CLng',
  96. 'CObj', 'Const', 'Continue', 'CSByte', 'CShort', 'CSng', 'CStr', 'CType', 'CUInt', 'CULng', 'CUShort',
  97. 'Date', 'Decimal', 'Declare', 'Default', 'Delegate', 'Dim', 'DirectCast', 'Do', 'Double', 'Each', 'Else',
  98. 'ElseIf', 'End', 'EndIf', 'Enum', 'Erase', 'Error', 'Event', 'Exit', 'False', 'Finally', 'For', 'Friend',
  99. 'Function', 'Get', 'GetType', 'GetXMLNamespace', 'Global', 'GoSub', 'GoTo', 'Handles', 'If', 'Implements',
  100. 'Imports', 'In', 'Inherits', 'Integer', 'Interface', 'Is', 'IsNot', 'Let', 'Lib', 'Like', 'Long', 'Loop',
  101. 'Me', 'Mod', 'Module', 'MustInherit', 'MustOverride', 'MyBase', 'MyClass', 'NameOf', 'Namespace', 'Narrowing', 'New',
  102. 'Next', 'Not', 'Nothing', 'NotInheritable', 'NotOverridable', 'Object', 'Of', 'On', 'Operator', 'Option',
  103. 'Optional', 'Or', 'OrElse', 'Out', 'Overloads', 'Overridable', 'Overrides', 'ParamArray', 'Partial',
  104. 'Private', 'Property', 'Protected', 'Public', 'RaiseEvent', 'ReadOnly', 'ReDim', 'RemoveHandler', 'Resume',
  105. 'Return', 'SByte', 'Select', 'Set', 'Shadows', 'Shared', 'Short', 'Single', 'Static', 'Step', 'Stop',
  106. 'String', 'Structure', 'Sub', 'SyncLock', 'Then', 'Throw', 'To', 'True', 'Try', 'TryCast', 'TypeOf',
  107. 'UInteger', 'ULong', 'UShort', 'Using', 'Variant', 'Wend', 'When', 'While', 'Widening', 'With', 'WithEvents',
  108. 'WriteOnly', 'Xor'
  109. ],
  110. tagwords: [
  111. 'If', 'Sub', 'Select', 'Try', 'Class', 'Enum',
  112. 'Function', 'Get', 'Interface', 'Module', 'Namespace', 'Operator', 'Set', 'Structure', 'Using', 'While', 'With',
  113. 'Do', 'Loop', 'For', 'Next', 'Property', 'Continue', 'AddHandler', 'RemoveHandler', 'Event', 'RaiseEvent', 'SyncLock'
  114. ],
  115. // we include these common regular expressions
  116. symbols: /[=><!~?;\.,:&|+\-*\/\^%]+/,
  117. escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
  118. integersuffix: /U?[DI%L&S@]?/,
  119. floatsuffix: /[R#F!]?/,
  120. // The main tokenizer for our languages
  121. tokenizer: {
  122. root: [
  123. // whitespace
  124. { include: '@whitespace' },
  125. // special ending tag-words
  126. [/next(?!\w)/, { token: 'keyword.tag-for' }],
  127. [/loop(?!\w)/, { token: 'keyword.tag-do' }],
  128. // usual ending tags
  129. [/end\s+(?!for|do)(addhandler|class|enum|event|function|get|if|interface|module|namespace|operator|property|raiseevent|removehandler|select|set|structure|sub|synclock|try|while|with|using)/, { token: 'keyword.tag-$1' }],
  130. // identifiers, tagwords, and keywords
  131. [/[a-zA-Z_]\w*/, {
  132. cases: {
  133. '@tagwords': { token: 'keyword.tag-$0' },
  134. '@keywords': { token: 'keyword.$0' },
  135. '@default': 'identifier'
  136. }
  137. }],
  138. // Preprocessor directive
  139. [/^\s*#\w+/, 'keyword'],
  140. // numbers
  141. [/\d*\d+e([\-+]?\d+)?(@floatsuffix)/, 'number.float'],
  142. [/\d*\.\d+(e[\-+]?\d+)?(@floatsuffix)/, 'number.float'],
  143. [/&H[0-9a-f]+(@integersuffix)/, 'number.hex'],
  144. [/&0[0-7]+(@integersuffix)/, 'number.octal'],
  145. [/\d+(@integersuffix)/, 'number'],
  146. // date literal
  147. [/#.*#/, 'number'],
  148. // delimiters and operators
  149. [/[{}()\[\]]/, '@brackets'],
  150. [/@symbols/, 'delimiter'],
  151. // strings
  152. [/"/, 'string', '@string'],
  153. ],
  154. whitespace: [
  155. [/[ \t\r\n]+/, ''],
  156. [/(\'|REM(?!\w)).*$/, 'comment'],
  157. ],
  158. string: [
  159. [/[^\\"]+/, 'string'],
  160. [/@escapes/, 'string.escape'],
  161. [/\\./, 'string.escape.invalid'],
  162. [/"C?/, 'string', '@pop']
  163. ],
  164. },
  165. };
  166. });