@phenx-inc/ctlsurf 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/bin/ctlsurf-worker.js +173 -0
  2. package/electron-vite.config.ts +34 -0
  3. package/out/headless/index.mjs +1364 -0
  4. package/out/headless/index.mjs.map +7 -0
  5. package/out/main/index.js +1131 -0
  6. package/out/preload/index.js +67 -0
  7. package/out/renderer/assets/abap-D5KwWAsZ.js +1399 -0
  8. package/out/renderer/assets/apex-DVGUZ64i.js +331 -0
  9. package/out/renderer/assets/azcli-BEAhqcuE.js +69 -0
  10. package/out/renderer/assets/bat-Bqkp9Cfu.js +101 -0
  11. package/out/renderer/assets/bicep-DIlfshcM.js +110 -0
  12. package/out/renderer/assets/cameligo-CLaaYNMV.js +175 -0
  13. package/out/renderer/assets/clojure-fcgFaMHx.js +762 -0
  14. package/out/renderer/assets/codicon-ngg6Pgfi.ttf +0 -0
  15. package/out/renderer/assets/coffee-CzJ5oEdj.js +233 -0
  16. package/out/renderer/assets/cpp-CcN6f0ik.js +390 -0
  17. package/out/renderer/assets/csharp-BJeIuvde.js +327 -0
  18. package/out/renderer/assets/csp-D_3BK2Wp.js +54 -0
  19. package/out/renderer/assets/css-i3rI3_64.js +186 -0
  20. package/out/renderer/assets/css.worker-umuuUiIb.js +53567 -0
  21. package/out/renderer/assets/cssMode-DL0XItGB.js +208 -0
  22. package/out/renderer/assets/cypher-D0--_GAN.js +264 -0
  23. package/out/renderer/assets/dart-vLMHv35g.js +282 -0
  24. package/out/renderer/assets/dockerfile--oxj0cAH.js +131 -0
  25. package/out/renderer/assets/ecl-CeuUgzaZ.js +457 -0
  26. package/out/renderer/assets/editor.worker-CNgWLVu7.js +13695 -0
  27. package/out/renderer/assets/elixir-eLfY1jWH.js +570 -0
  28. package/out/renderer/assets/flow9-ZSTChSMd.js +143 -0
  29. package/out/renderer/assets/freemarker2-CrOEuDcF.js +995 -0
  30. package/out/renderer/assets/fsharp-D2uoxuLH.js +218 -0
  31. package/out/renderer/assets/go-brnMpFrj.js +219 -0
  32. package/out/renderer/assets/graphql-BeiGgjIU.js +152 -0
  33. package/out/renderer/assets/handlebars-D4QYaBof.js +414 -0
  34. package/out/renderer/assets/hcl-CrX1Es2W.js +184 -0
  35. package/out/renderer/assets/html-B2Dqk2ai.js +303 -0
  36. package/out/renderer/assets/html.worker-BT47iy49.js +29777 -0
  37. package/out/renderer/assets/htmlMode-CdZ0Prhd.js +224 -0
  38. package/out/renderer/assets/index-CJ6RsQWP.css +8108 -0
  39. package/out/renderer/assets/index-pZmE1QXB.js +211777 -0
  40. package/out/renderer/assets/ini-BcQysCTb.js +72 -0
  41. package/out/renderer/assets/java-Dt3iMn2o.js +233 -0
  42. package/out/renderer/assets/javascript-CK8zNQXj.js +72 -0
  43. package/out/renderer/assets/json.worker-D4JVmXIe.js +21424 -0
  44. package/out/renderer/assets/jsonMode-Cewaellc.js +931 -0
  45. package/out/renderer/assets/julia-Cm3ItYL_.js +512 -0
  46. package/out/renderer/assets/kotlin-Ddo1SjA5.js +253 -0
  47. package/out/renderer/assets/less-B7Qaxw-O.js +162 -0
  48. package/out/renderer/assets/lexon-C1U0m2n9.js +158 -0
  49. package/out/renderer/assets/liquid-Bd3GPNs2.js +235 -0
  50. package/out/renderer/assets/lspLanguageFeatures-DSDH7BnA.js +1841 -0
  51. package/out/renderer/assets/lua-hNsuGJkO.js +163 -0
  52. package/out/renderer/assets/m3-6ko6q9-_.js +211 -0
  53. package/out/renderer/assets/markdown-B0YTnTxW.js +230 -0
  54. package/out/renderer/assets/mdx-CCPVCrXC.js +159 -0
  55. package/out/renderer/assets/mips-CJm71dS3.js +199 -0
  56. package/out/renderer/assets/msdax-BBeIktCY.js +376 -0
  57. package/out/renderer/assets/mysql-BWiizXSn.js +879 -0
  58. package/out/renderer/assets/objective-c-B1L1C5EC.js +184 -0
  59. package/out/renderer/assets/pascal-DMQyD4Xk.js +252 -0
  60. package/out/renderer/assets/pascaligo-VA_LQ1oU.js +165 -0
  61. package/out/renderer/assets/perl-DC0Z0tlO.js +627 -0
  62. package/out/renderer/assets/pgsql-DaSGFTLp.js +852 -0
  63. package/out/renderer/assets/php-Bkx1qpkQ.js +501 -0
  64. package/out/renderer/assets/pla-DEV89yYj.js +138 -0
  65. package/out/renderer/assets/postiats-CVVurEnu.js +908 -0
  66. package/out/renderer/assets/powerquery-BQ_t1ZiQ.js +891 -0
  67. package/out/renderer/assets/powershell-BXiKvz7Z.js +240 -0
  68. package/out/renderer/assets/protobuf-CndvAUGu.js +421 -0
  69. package/out/renderer/assets/pug-BxCXwerb.js +403 -0
  70. package/out/renderer/assets/python-34jOtlcC.js +295 -0
  71. package/out/renderer/assets/qsharp-BWK6YLKm.js +302 -0
  72. package/out/renderer/assets/r-CtqYUQ6l.js +244 -0
  73. package/out/renderer/assets/razor-DXRw694z.js +545 -0
  74. package/out/renderer/assets/redis-O7gSt3oh.js +303 -0
  75. package/out/renderer/assets/redshift-CvYMMYZY.js +810 -0
  76. package/out/renderer/assets/restructuredtext-B-KQCVu_.js +175 -0
  77. package/out/renderer/assets/ruby-DCd4DmAr.js +512 -0
  78. package/out/renderer/assets/rust-B1c0VCeq.js +344 -0
  79. package/out/renderer/assets/sb-Chfc_wZF.js +116 -0
  80. package/out/renderer/assets/scala-DbVzH-3O.js +371 -0
  81. package/out/renderer/assets/scheme-D7PxodDG.js +109 -0
  82. package/out/renderer/assets/scss-B42qMyAu.js +261 -0
  83. package/out/renderer/assets/shell-vZEubQ82.js +222 -0
  84. package/out/renderer/assets/solidity-yHOxYChb.js +1368 -0
  85. package/out/renderer/assets/sophia-D7pU0Y1d.js +200 -0
  86. package/out/renderer/assets/sparql-DxuVdnRl.js +202 -0
  87. package/out/renderer/assets/sql-BAGepFCR.js +854 -0
  88. package/out/renderer/assets/st-C-b0Dh53.js +417 -0
  89. package/out/renderer/assets/swift-BmOZGynf.js +313 -0
  90. package/out/renderer/assets/systemverilog-BOC0OOdC.js +577 -0
  91. package/out/renderer/assets/tcl-Bb4GCwBr.js +233 -0
  92. package/out/renderer/assets/ts.worker-C7hW3aY-.js +225330 -0
  93. package/out/renderer/assets/tsMode-CmND5_wB.js +1265 -0
  94. package/out/renderer/assets/twig-DvgEGWAV.js +393 -0
  95. package/out/renderer/assets/typescript-BNNI0Euv.js +337 -0
  96. package/out/renderer/assets/typespec-R77Ln7Jb.js +128 -0
  97. package/out/renderer/assets/vb-Bm6ESA0Q.js +373 -0
  98. package/out/renderer/assets/wgsl-_KPae5vw.js +454 -0
  99. package/out/renderer/assets/xml-CgdndrNB.js +89 -0
  100. package/out/renderer/assets/yaml-DNWPIf1s.js +200 -0
  101. package/out/renderer/index.html +13 -0
  102. package/package.json +67 -0
  103. package/resources/icon.icns +0 -0
  104. package/resources/icon.ico +0 -0
  105. package/resources/icon.png +0 -0
  106. package/src/main/agents.ts +46 -0
  107. package/src/main/bridge.ts +180 -0
  108. package/src/main/ctlsurfApi.ts +142 -0
  109. package/src/main/detectMode.ts +17 -0
  110. package/src/main/headless.ts +182 -0
  111. package/src/main/index.ts +300 -0
  112. package/src/main/orchestrator.ts +404 -0
  113. package/src/main/pty.ts +65 -0
  114. package/src/main/settingsDir.ts +17 -0
  115. package/src/main/tui.ts +366 -0
  116. package/src/main/workerWs.ts +312 -0
  117. package/src/preload/index.ts +114 -0
  118. package/src/renderer/App.tsx +275 -0
  119. package/src/renderer/components/CtlsurfPanel.tsx +49 -0
  120. package/src/renderer/components/EditorPanel.tsx +232 -0
  121. package/src/renderer/components/MultiSplitPane.tsx +251 -0
  122. package/src/renderer/components/PaneLayout.tsx +419 -0
  123. package/src/renderer/components/SettingsDialog.tsx +204 -0
  124. package/src/renderer/components/SplitPane.tsx +82 -0
  125. package/src/renderer/components/StatusBar.tsx +73 -0
  126. package/src/renderer/components/TerminalPanel.tsx +140 -0
  127. package/src/renderer/index.html +12 -0
  128. package/src/renderer/main.tsx +10 -0
  129. package/src/renderer/styles.css +722 -0
  130. package/tsconfig.json +8 -0
  131. package/tsconfig.main.json +15 -0
  132. package/tsconfig.preload.json +14 -0
  133. package/tsconfig.renderer.json +15 -0
@@ -0,0 +1,337 @@
1
+ import { l as languages } from "./index-pZmE1QXB.js";
2
+ const conf = {
3
+ wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,
4
+ comments: {
5
+ lineComment: "//",
6
+ blockComment: ["/*", "*/"]
7
+ },
8
+ brackets: [
9
+ ["{", "}"],
10
+ ["[", "]"],
11
+ ["(", ")"]
12
+ ],
13
+ onEnterRules: [
14
+ {
15
+ // e.g. /** | */
16
+ beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,
17
+ afterText: /^\s*\*\/$/,
18
+ action: {
19
+ indentAction: languages.IndentAction.IndentOutdent,
20
+ appendText: " * "
21
+ }
22
+ },
23
+ {
24
+ // e.g. /** ...|
25
+ beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,
26
+ action: {
27
+ indentAction: languages.IndentAction.None,
28
+ appendText: " * "
29
+ }
30
+ },
31
+ {
32
+ // e.g. * ...|
33
+ beforeText: /^(\t|(\ \ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/,
34
+ action: {
35
+ indentAction: languages.IndentAction.None,
36
+ appendText: "* "
37
+ }
38
+ },
39
+ {
40
+ // e.g. */|
41
+ beforeText: /^(\t|(\ \ ))*\ \*\/\s*$/,
42
+ action: {
43
+ indentAction: languages.IndentAction.None,
44
+ removeText: 1
45
+ }
46
+ }
47
+ ],
48
+ autoClosingPairs: [
49
+ { open: "{", close: "}" },
50
+ { open: "[", close: "]" },
51
+ { open: "(", close: ")" },
52
+ { open: '"', close: '"', notIn: ["string"] },
53
+ { open: "'", close: "'", notIn: ["string", "comment"] },
54
+ { open: "`", close: "`", notIn: ["string", "comment"] },
55
+ { open: "/**", close: " */", notIn: ["string"] }
56
+ ],
57
+ folding: {
58
+ markers: {
59
+ start: new RegExp("^\\s*//\\s*#?region\\b"),
60
+ end: new RegExp("^\\s*//\\s*#?endregion\\b")
61
+ }
62
+ }
63
+ };
64
+ const language = {
65
+ // Set defaultToken to invalid to see what you do not tokenize yet
66
+ defaultToken: "invalid",
67
+ tokenPostfix: ".ts",
68
+ keywords: [
69
+ // Should match the keys of textToKeywordObj in
70
+ // https://github.com/microsoft/TypeScript/blob/master/src/compiler/scanner.ts
71
+ "abstract",
72
+ "any",
73
+ "as",
74
+ "asserts",
75
+ "bigint",
76
+ "boolean",
77
+ "break",
78
+ "case",
79
+ "catch",
80
+ "class",
81
+ "continue",
82
+ "const",
83
+ "constructor",
84
+ "debugger",
85
+ "declare",
86
+ "default",
87
+ "delete",
88
+ "do",
89
+ "else",
90
+ "enum",
91
+ "export",
92
+ "extends",
93
+ "false",
94
+ "finally",
95
+ "for",
96
+ "from",
97
+ "function",
98
+ "get",
99
+ "if",
100
+ "implements",
101
+ "import",
102
+ "in",
103
+ "infer",
104
+ "instanceof",
105
+ "interface",
106
+ "is",
107
+ "keyof",
108
+ "let",
109
+ "module",
110
+ "namespace",
111
+ "never",
112
+ "new",
113
+ "null",
114
+ "number",
115
+ "object",
116
+ "out",
117
+ "package",
118
+ "private",
119
+ "protected",
120
+ "public",
121
+ "override",
122
+ "readonly",
123
+ "require",
124
+ "global",
125
+ "return",
126
+ "satisfies",
127
+ "set",
128
+ "static",
129
+ "string",
130
+ "super",
131
+ "switch",
132
+ "symbol",
133
+ "this",
134
+ "throw",
135
+ "true",
136
+ "try",
137
+ "type",
138
+ "typeof",
139
+ "undefined",
140
+ "unique",
141
+ "unknown",
142
+ "var",
143
+ "void",
144
+ "while",
145
+ "with",
146
+ "yield",
147
+ "async",
148
+ "await",
149
+ "of"
150
+ ],
151
+ operators: [
152
+ "<=",
153
+ ">=",
154
+ "==",
155
+ "!=",
156
+ "===",
157
+ "!==",
158
+ "=>",
159
+ "+",
160
+ "-",
161
+ "**",
162
+ "*",
163
+ "/",
164
+ "%",
165
+ "++",
166
+ "--",
167
+ "<<",
168
+ "</",
169
+ ">>",
170
+ ">>>",
171
+ "&",
172
+ "|",
173
+ "^",
174
+ "!",
175
+ "~",
176
+ "&&",
177
+ "||",
178
+ "??",
179
+ "?",
180
+ ":",
181
+ "=",
182
+ "+=",
183
+ "-=",
184
+ "*=",
185
+ "**=",
186
+ "/=",
187
+ "%=",
188
+ "<<=",
189
+ ">>=",
190
+ ">>>=",
191
+ "&=",
192
+ "|=",
193
+ "^=",
194
+ "@"
195
+ ],
196
+ // we include these common regular expressions
197
+ symbols: /[=><!~?:&|+\-*\/\^%]+/,
198
+ escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
199
+ digits: /\d+(_+\d+)*/,
200
+ octaldigits: /[0-7]+(_+[0-7]+)*/,
201
+ binarydigits: /[0-1]+(_+[0-1]+)*/,
202
+ hexdigits: /[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,
203
+ regexpctl: /[(){}\[\]\$\^|\-*+?\.]/,
204
+ regexpesc: /\\(?:[bBdDfnrstvwWn0\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})/,
205
+ // The main tokenizer for our languages
206
+ tokenizer: {
207
+ root: [[/[{}]/, "delimiter.bracket"], { include: "common" }],
208
+ common: [
209
+ // identifiers and keywords
210
+ [
211
+ /#?[a-z_$][\w$]*/,
212
+ {
213
+ cases: {
214
+ "@keywords": "keyword",
215
+ "@default": "identifier"
216
+ }
217
+ }
218
+ ],
219
+ [/[A-Z][\w\$]*/, "type.identifier"],
220
+ // to show class names nicely
221
+ // [/[A-Z][\w\$]*/, 'identifier'],
222
+ // whitespace
223
+ { include: "@whitespace" },
224
+ // regular expression: ensure it is terminated before beginning (otherwise it is an opeator)
225
+ [
226
+ /\/(?=([^\\\/]|\\.)+\/([dgimsuy]*)(\s*)(\.|;|,|\)|\]|\}|$))/,
227
+ { token: "regexp", bracket: "@open", next: "@regexp" }
228
+ ],
229
+ // delimiters and operators
230
+ [/[()\[\]]/, "@brackets"],
231
+ [/[<>](?!@symbols)/, "@brackets"],
232
+ [/!(?=([^=]|$))/, "delimiter"],
233
+ [
234
+ /@symbols/,
235
+ {
236
+ cases: {
237
+ "@operators": "delimiter",
238
+ "@default": ""
239
+ }
240
+ }
241
+ ],
242
+ // numbers
243
+ [/(@digits)[eE]([\-+]?(@digits))?/, "number.float"],
244
+ [/(@digits)\.(@digits)([eE][\-+]?(@digits))?/, "number.float"],
245
+ [/0[xX](@hexdigits)n?/, "number.hex"],
246
+ [/0[oO]?(@octaldigits)n?/, "number.octal"],
247
+ [/0[bB](@binarydigits)n?/, "number.binary"],
248
+ [/(@digits)n?/, "number"],
249
+ // delimiter: after number because of .\d floats
250
+ [/[;,.]/, "delimiter"],
251
+ // strings
252
+ [/"([^"\\]|\\.)*$/, "string.invalid"],
253
+ // non-teminated string
254
+ [/'([^'\\]|\\.)*$/, "string.invalid"],
255
+ // non-teminated string
256
+ [/"/, "string", "@string_double"],
257
+ [/'/, "string", "@string_single"],
258
+ [/`/, "string", "@string_backtick"]
259
+ ],
260
+ whitespace: [
261
+ [/[ \t\r\n]+/, ""],
262
+ [/\/\*\*(?!\/)/, "comment.doc", "@jsdoc"],
263
+ [/\/\*/, "comment", "@comment"],
264
+ [/\/\/.*$/, "comment"]
265
+ ],
266
+ comment: [
267
+ [/[^\/*]+/, "comment"],
268
+ [/\*\//, "comment", "@pop"],
269
+ [/[\/*]/, "comment"]
270
+ ],
271
+ jsdoc: [
272
+ [/[^\/*]+/, "comment.doc"],
273
+ [/\*\//, "comment.doc", "@pop"],
274
+ [/[\/*]/, "comment.doc"]
275
+ ],
276
+ // We match regular expression quite precisely
277
+ regexp: [
278
+ [
279
+ /(\{)(\d+(?:,\d*)?)(\})/,
280
+ ["regexp.escape.control", "regexp.escape.control", "regexp.escape.control"]
281
+ ],
282
+ [
283
+ /(\[)(\^?)(?=(?:[^\]\\\/]|\\.)+)/,
284
+ ["regexp.escape.control", { token: "regexp.escape.control", next: "@regexrange" }]
285
+ ],
286
+ [/(\()(\?:|\?=|\?!)/, ["regexp.escape.control", "regexp.escape.control"]],
287
+ [/[()]/, "regexp.escape.control"],
288
+ [/@regexpctl/, "regexp.escape.control"],
289
+ [/[^\\\/]/, "regexp"],
290
+ [/@regexpesc/, "regexp.escape"],
291
+ [/\\\./, "regexp.invalid"],
292
+ [/(\/)([dgimsuy]*)/, [{ token: "regexp", bracket: "@close", next: "@pop" }, "keyword.other"]]
293
+ ],
294
+ regexrange: [
295
+ [/-/, "regexp.escape.control"],
296
+ [/\^/, "regexp.invalid"],
297
+ [/@regexpesc/, "regexp.escape"],
298
+ [/[^\]]/, "regexp"],
299
+ [
300
+ /\]/,
301
+ {
302
+ token: "regexp.escape.control",
303
+ next: "@pop",
304
+ bracket: "@close"
305
+ }
306
+ ]
307
+ ],
308
+ string_double: [
309
+ [/[^\\"]+/, "string"],
310
+ [/@escapes/, "string.escape"],
311
+ [/\\./, "string.escape.invalid"],
312
+ [/"/, "string", "@pop"]
313
+ ],
314
+ string_single: [
315
+ [/[^\\']+/, "string"],
316
+ [/@escapes/, "string.escape"],
317
+ [/\\./, "string.escape.invalid"],
318
+ [/'/, "string", "@pop"]
319
+ ],
320
+ string_backtick: [
321
+ [/\$\{/, { token: "delimiter.bracket", next: "@bracketCounting" }],
322
+ [/[^\\`$]+/, "string"],
323
+ [/@escapes/, "string.escape"],
324
+ [/\\./, "string.escape.invalid"],
325
+ [/`/, "string", "@pop"]
326
+ ],
327
+ bracketCounting: [
328
+ [/\{/, "delimiter.bracket", "@bracketCounting"],
329
+ [/\}/, "delimiter.bracket", "@pop"],
330
+ { include: "common" }
331
+ ]
332
+ }
333
+ };
334
+ export {
335
+ conf,
336
+ language
337
+ };
@@ -0,0 +1,128 @@
1
+ const bounded = (text) => `\\b${text}\\b`;
2
+ const notBefore = (regex) => `(?!${regex})`;
3
+ const identifierStart = "[_a-zA-Z]";
4
+ const identifierContinue = "[_a-zA-Z0-9]";
5
+ const identifier = bounded(`${identifierStart}${identifierContinue}*`);
6
+ const directive = bounded(`[_a-zA-Z-0-9]+`);
7
+ const keywords = [
8
+ "import",
9
+ "model",
10
+ "scalar",
11
+ "namespace",
12
+ "op",
13
+ "interface",
14
+ "union",
15
+ "using",
16
+ "is",
17
+ "extends",
18
+ "enum",
19
+ "alias",
20
+ "return",
21
+ "void",
22
+ "if",
23
+ "else",
24
+ "projection",
25
+ "dec",
26
+ "extern",
27
+ "fn"
28
+ ];
29
+ const namedLiterals = ["true", "false", "null", "unknown", "never"];
30
+ const nonCommentWs = `[ \\t\\r\\n]`;
31
+ const numericLiteral = `[0-9]+`;
32
+ const conf = {
33
+ comments: {
34
+ lineComment: "//",
35
+ blockComment: ["/*", "*/"]
36
+ },
37
+ brackets: [
38
+ ["{", "}"],
39
+ ["[", "]"],
40
+ ["(", ")"]
41
+ ],
42
+ autoClosingPairs: [
43
+ { open: "{", close: "}" },
44
+ { open: "[", close: "]" },
45
+ { open: "(", close: ")" },
46
+ { open: '"', close: '"' },
47
+ { open: "/**", close: " */", notIn: ["string"] }
48
+ ],
49
+ surroundingPairs: [
50
+ { open: "{", close: "}" },
51
+ { open: "[", close: "]" },
52
+ { open: "(", close: ")" },
53
+ { open: '"', close: '"' }
54
+ ],
55
+ indentationRules: {
56
+ decreaseIndentPattern: new RegExp("^((?!.*?/\\*).*\\*/)?\\s*[\\}\\]].*$"),
57
+ increaseIndentPattern: new RegExp(
58
+ "^((?!//).)*(\\{([^}\"'`/]*|(\\t|[ ])*//.*)|\\([^)\"'`/]*|\\[[^\\]\"'`/]*)$"
59
+ ),
60
+ // e.g. * ...| or */| or *-----*/|
61
+ unIndentedLinePattern: new RegExp(
62
+ "^(\\t|[ ])*[ ]\\*[^/]*\\*/\\s*$|^(\\t|[ ])*[ ]\\*/\\s*$|^(\\t|[ ])*[ ]\\*([ ]([^\\*]|\\*(?!/))*)?$"
63
+ )
64
+ }
65
+ };
66
+ const language = {
67
+ defaultToken: "",
68
+ tokenPostfix: ".tsp",
69
+ brackets: [
70
+ { open: "{", close: "}", token: "delimiter.curly" },
71
+ { open: "[", close: "]", token: "delimiter.square" },
72
+ { open: "(", close: ")", token: "delimiter.parenthesis" }
73
+ ],
74
+ symbols: /[=:;<>]+/,
75
+ keywords,
76
+ namedLiterals,
77
+ escapes: `\\\\(u{[0-9A-Fa-f]+}|n|r|t|\\\\|"|\\\${)`,
78
+ tokenizer: {
79
+ root: [{ include: "@expression" }, { include: "@whitespace" }],
80
+ stringVerbatim: [
81
+ { regex: `(|"|"")[^"]`, action: { token: "string" } },
82
+ { regex: `"""${notBefore(`"`)}`, action: { token: "string", next: "@pop" } }
83
+ ],
84
+ stringLiteral: [
85
+ { regex: `\\\${`, action: { token: "delimiter.bracket", next: "@bracketCounting" } },
86
+ { regex: `[^\\\\"$]+`, action: { token: "string" } },
87
+ { regex: "@escapes", action: { token: "string.escape" } },
88
+ { regex: `\\\\.`, action: { token: "string.escape.invalid" } },
89
+ { regex: `"`, action: { token: "string", next: "@pop" } }
90
+ ],
91
+ bracketCounting: [
92
+ { regex: `{`, action: { token: "delimiter.bracket", next: "@bracketCounting" } },
93
+ { regex: `}`, action: { token: "delimiter.bracket", next: "@pop" } },
94
+ { include: "@expression" }
95
+ ],
96
+ comment: [
97
+ { regex: `[^\\*]+`, action: { token: "comment" } },
98
+ { regex: `\\*\\/`, action: { token: "comment", next: "@pop" } },
99
+ { regex: `[\\/*]`, action: { token: "comment" } }
100
+ ],
101
+ whitespace: [
102
+ { regex: nonCommentWs },
103
+ { regex: `\\/\\*`, action: { token: "comment", next: "@comment" } },
104
+ { regex: `\\/\\/.*$`, action: { token: "comment" } }
105
+ ],
106
+ expression: [
107
+ { regex: `"""`, action: { token: "string", next: "@stringVerbatim" } },
108
+ { regex: `"${notBefore(`""`)}`, action: { token: "string", next: "@stringLiteral" } },
109
+ { regex: numericLiteral, action: { token: "number" } },
110
+ {
111
+ regex: identifier,
112
+ action: {
113
+ cases: {
114
+ "@keywords": { token: "keyword" },
115
+ "@namedLiterals": { token: "keyword" },
116
+ "@default": { token: "identifier" }
117
+ }
118
+ }
119
+ },
120
+ { regex: `@${identifier}`, action: { token: "tag" } },
121
+ { regex: `#${directive}`, action: { token: "directive" } }
122
+ ]
123
+ }
124
+ };
125
+ export {
126
+ conf,
127
+ language
128
+ };