bat.js 3.4 KB

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