bat.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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: 'REM'
  11. },
  12. brackets: [
  13. ['{', '}'],
  14. ['[', ']'],
  15. ['(', ')']
  16. ],
  17. autoClosingPairs: [
  18. { open: '{', close: '}' },
  19. { open: '[', close: ']' },
  20. { open: '(', close: ')' },
  21. { open: '"', close: '"' },
  22. ],
  23. surroundingPairs: [
  24. { open: '[', close: ']' },
  25. { open: '(', close: ')' },
  26. { open: '"', close: '"' },
  27. ],
  28. folding: {
  29. markers: {
  30. start: new RegExp("^\\s*(::\\s*|REM\\s+)#region"),
  31. end: new RegExp("^\\s*(::\\s*|REM\\s+)#endregion")
  32. }
  33. }
  34. };
  35. exports.language = {
  36. defaultToken: '',
  37. ignoreCase: true,
  38. tokenPostfix: '.bat',
  39. brackets: [
  40. { token: 'delimiter.bracket', open: '{', close: '}' },
  41. { token: 'delimiter.parenthesis', open: '(', close: ')' },
  42. { token: 'delimiter.square', open: '[', close: ']' }
  43. ],
  44. keywords: /call|defined|echo|errorlevel|exist|for|goto|if|pause|set|shift|start|title|not|pushd|popd/,
  45. // we include these common regular expressions
  46. symbols: /[=><!~?&|+\-*\/\^;\.,]+/,
  47. escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
  48. // The main tokenizer for our languages
  49. tokenizer: {
  50. root: [
  51. [/^(\s*)(rem(?:\s.*|))$/, ['', 'comment']],
  52. [/(\@?)(@keywords)(?!\w)/, [{ token: 'keyword' }, { token: 'keyword.$2' }]],
  53. // whitespace
  54. [/[ \t\r\n]+/, ''],
  55. // blocks
  56. [/setlocal(?!\w)/, 'keyword.tag-setlocal'],
  57. [/endlocal(?!\w)/, 'keyword.tag-setlocal'],
  58. // words
  59. [/[a-zA-Z_]\w*/, ''],
  60. // labels
  61. [/:\w*/, 'metatag'],
  62. // variables
  63. [/%[^%]+%/, 'variable'],
  64. [/%%[\w]+(?!\w)/, 'variable'],
  65. // punctuations
  66. [/[{}()\[\]]/, '@brackets'],
  67. [/@symbols/, 'delimiter'],
  68. // numbers
  69. [/\d*\.\d+([eE][\-+]?\d+)?/, 'number.float'],
  70. [/0[xX][0-9a-fA-F_]*[0-9a-fA-F]/, 'number.hex'],
  71. [/\d+/, 'number'],
  72. // punctuation: after number because of .\d floats
  73. [/[;,.]/, 'delimiter'],
  74. // strings:
  75. [/"/, 'string', '@string."'],
  76. [/'/, 'string', '@string.\''],
  77. ],
  78. string: [
  79. [/[^\\"'%]+/, {
  80. cases: {
  81. '@eos': { token: 'string', next: '@popall' },
  82. '@default': 'string'
  83. }
  84. }],
  85. [/@escapes/, 'string.escape'],
  86. [/\\./, 'string.escape.invalid'],
  87. [/%[\w ]+%/, 'variable'],
  88. [/%%[\w]+(?!\w)/, 'variable'],
  89. [/["']/, {
  90. cases: {
  91. '$#==$S2': { token: 'string', next: '@pop' },
  92. '@default': 'string'
  93. }
  94. }],
  95. [/$/, 'string', '@popall']
  96. ],
  97. }
  98. };
  99. });