@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,403 @@
1
+ const conf = {
2
+ comments: {
3
+ lineComment: "//"
4
+ },
5
+ brackets: [
6
+ ["{", "}"],
7
+ ["[", "]"],
8
+ ["(", ")"]
9
+ ],
10
+ autoClosingPairs: [
11
+ { open: '"', close: '"', notIn: ["string", "comment"] },
12
+ { open: "'", close: "'", notIn: ["string", "comment"] },
13
+ { open: "{", close: "}", notIn: ["string", "comment"] },
14
+ { open: "[", close: "]", notIn: ["string", "comment"] },
15
+ { open: "(", close: ")", notIn: ["string", "comment"] }
16
+ ],
17
+ folding: {
18
+ offSide: true
19
+ }
20
+ };
21
+ const language = {
22
+ defaultToken: "",
23
+ tokenPostfix: ".pug",
24
+ ignoreCase: true,
25
+ brackets: [
26
+ { token: "delimiter.curly", open: "{", close: "}" },
27
+ { token: "delimiter.array", open: "[", close: "]" },
28
+ { token: "delimiter.parenthesis", open: "(", close: ")" }
29
+ ],
30
+ keywords: [
31
+ "append",
32
+ "block",
33
+ "case",
34
+ "default",
35
+ "doctype",
36
+ "each",
37
+ "else",
38
+ "extends",
39
+ "for",
40
+ "if",
41
+ "in",
42
+ "include",
43
+ "mixin",
44
+ "typeof",
45
+ "unless",
46
+ "var",
47
+ "when"
48
+ ],
49
+ tags: [
50
+ "a",
51
+ "abbr",
52
+ "acronym",
53
+ "address",
54
+ "area",
55
+ "article",
56
+ "aside",
57
+ "audio",
58
+ "b",
59
+ "base",
60
+ "basefont",
61
+ "bdi",
62
+ "bdo",
63
+ "blockquote",
64
+ "body",
65
+ "br",
66
+ "button",
67
+ "canvas",
68
+ "caption",
69
+ "center",
70
+ "cite",
71
+ "code",
72
+ "col",
73
+ "colgroup",
74
+ "command",
75
+ "datalist",
76
+ "dd",
77
+ "del",
78
+ "details",
79
+ "dfn",
80
+ "div",
81
+ "dl",
82
+ "dt",
83
+ "em",
84
+ "embed",
85
+ "fieldset",
86
+ "figcaption",
87
+ "figure",
88
+ "font",
89
+ "footer",
90
+ "form",
91
+ "frame",
92
+ "frameset",
93
+ "h1",
94
+ "h2",
95
+ "h3",
96
+ "h4",
97
+ "h5",
98
+ "h6",
99
+ "head",
100
+ "header",
101
+ "hgroup",
102
+ "hr",
103
+ "html",
104
+ "i",
105
+ "iframe",
106
+ "img",
107
+ "input",
108
+ "ins",
109
+ "keygen",
110
+ "kbd",
111
+ "label",
112
+ "li",
113
+ "link",
114
+ "map",
115
+ "mark",
116
+ "menu",
117
+ "meta",
118
+ "meter",
119
+ "nav",
120
+ "noframes",
121
+ "noscript",
122
+ "object",
123
+ "ol",
124
+ "optgroup",
125
+ "option",
126
+ "output",
127
+ "p",
128
+ "param",
129
+ "pre",
130
+ "progress",
131
+ "q",
132
+ "rp",
133
+ "rt",
134
+ "ruby",
135
+ "s",
136
+ "samp",
137
+ "script",
138
+ "section",
139
+ "select",
140
+ "small",
141
+ "source",
142
+ "span",
143
+ "strike",
144
+ "strong",
145
+ "style",
146
+ "sub",
147
+ "summary",
148
+ "sup",
149
+ "table",
150
+ "tbody",
151
+ "td",
152
+ "textarea",
153
+ "tfoot",
154
+ "th",
155
+ "thead",
156
+ "time",
157
+ "title",
158
+ "tr",
159
+ "tracks",
160
+ "tt",
161
+ "u",
162
+ "ul",
163
+ "video",
164
+ "wbr"
165
+ ],
166
+ // we include these common regular expressions
167
+ symbols: /[\+\-\*\%\&\|\!\=\/\.\,\:]+/,
168
+ escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
169
+ tokenizer: {
170
+ root: [
171
+ // Tag or a keyword at start
172
+ [
173
+ /^(\s*)([a-zA-Z_-][\w-]*)/,
174
+ {
175
+ cases: {
176
+ "$2@tags": {
177
+ cases: {
178
+ "@eos": ["", "tag"],
179
+ "@default": ["", { token: "tag", next: "@tag.$1" }]
180
+ }
181
+ },
182
+ "$2@keywords": ["", { token: "keyword.$2" }],
183
+ "@default": ["", ""]
184
+ }
185
+ }
186
+ ],
187
+ // id
188
+ [
189
+ /^(\s*)(#[a-zA-Z_-][\w-]*)/,
190
+ {
191
+ cases: {
192
+ "@eos": ["", "tag.id"],
193
+ "@default": ["", { token: "tag.id", next: "@tag.$1" }]
194
+ }
195
+ }
196
+ ],
197
+ // class
198
+ [
199
+ /^(\s*)(\.[a-zA-Z_-][\w-]*)/,
200
+ {
201
+ cases: {
202
+ "@eos": ["", "tag.class"],
203
+ "@default": ["", { token: "tag.class", next: "@tag.$1" }]
204
+ }
205
+ }
206
+ ],
207
+ // plain text with pipe
208
+ [/^(\s*)(\|.*)$/, ""],
209
+ { include: "@whitespace" },
210
+ // keywords
211
+ [
212
+ /[a-zA-Z_$][\w$]*/,
213
+ {
214
+ cases: {
215
+ "@keywords": { token: "keyword.$0" },
216
+ "@default": ""
217
+ }
218
+ }
219
+ ],
220
+ // delimiters and operators
221
+ [/[{}()\[\]]/, "@brackets"],
222
+ [/@symbols/, "delimiter"],
223
+ // numbers
224
+ [/\d+\.\d+([eE][\-+]?\d+)?/, "number.float"],
225
+ [/\d+/, "number"],
226
+ // strings:
227
+ [/"/, "string", '@string."'],
228
+ [/'/, "string", "@string.'"]
229
+ ],
230
+ tag: [
231
+ [/(\.)(\s*$)/, [{ token: "delimiter", next: "@blockText.$S2." }, ""]],
232
+ [/\s+/, { token: "", next: "@simpleText" }],
233
+ // id
234
+ [
235
+ /#[a-zA-Z_-][\w-]*/,
236
+ {
237
+ cases: {
238
+ "@eos": { token: "tag.id", next: "@pop" },
239
+ "@default": "tag.id"
240
+ }
241
+ }
242
+ ],
243
+ // class
244
+ [
245
+ /\.[a-zA-Z_-][\w-]*/,
246
+ {
247
+ cases: {
248
+ "@eos": { token: "tag.class", next: "@pop" },
249
+ "@default": "tag.class"
250
+ }
251
+ }
252
+ ],
253
+ // attributes
254
+ [/\(/, { token: "delimiter.parenthesis", next: "@attributeList" }]
255
+ ],
256
+ simpleText: [
257
+ [/[^#]+$/, { token: "", next: "@popall" }],
258
+ [/[^#]+/, { token: "" }],
259
+ // interpolation
260
+ [
261
+ /(#{)([^}]*)(})/,
262
+ {
263
+ cases: {
264
+ "@eos": [
265
+ "interpolation.delimiter",
266
+ "interpolation",
267
+ {
268
+ token: "interpolation.delimiter",
269
+ next: "@popall"
270
+ }
271
+ ],
272
+ "@default": ["interpolation.delimiter", "interpolation", "interpolation.delimiter"]
273
+ }
274
+ }
275
+ ],
276
+ [/#$/, { token: "", next: "@popall" }],
277
+ [/#/, ""]
278
+ ],
279
+ attributeList: [
280
+ [/\s+/, ""],
281
+ [
282
+ /(\w+)(\s*=\s*)("|')/,
283
+ ["attribute.name", "delimiter", { token: "attribute.value", next: "@value.$3" }]
284
+ ],
285
+ [/\w+/, "attribute.name"],
286
+ [
287
+ /,/,
288
+ {
289
+ cases: {
290
+ "@eos": {
291
+ token: "attribute.delimiter",
292
+ next: "@popall"
293
+ },
294
+ "@default": "attribute.delimiter"
295
+ }
296
+ }
297
+ ],
298
+ [/\)$/, { token: "delimiter.parenthesis", next: "@popall" }],
299
+ [/\)/, { token: "delimiter.parenthesis", next: "@pop" }]
300
+ ],
301
+ whitespace: [
302
+ [/^(\s*)(\/\/.*)$/, { token: "comment", next: "@blockText.$1.comment" }],
303
+ [/[ \t\r\n]+/, ""],
304
+ [/<!--/, { token: "comment", next: "@comment" }]
305
+ ],
306
+ blockText: [
307
+ [
308
+ /^\s+.*$/,
309
+ {
310
+ cases: {
311
+ "($S2\\s+.*$)": { token: "$S3" },
312
+ "@default": { token: "@rematch", next: "@popall" }
313
+ }
314
+ }
315
+ ],
316
+ [/./, { token: "@rematch", next: "@popall" }]
317
+ ],
318
+ comment: [
319
+ [/[^<\-]+/, "comment.content"],
320
+ [/-->/, { token: "comment", next: "@pop" }],
321
+ [/<!--/, "comment.content.invalid"],
322
+ [/[<\-]/, "comment.content"]
323
+ ],
324
+ string: [
325
+ [
326
+ /[^\\"'#]+/,
327
+ {
328
+ cases: {
329
+ "@eos": { token: "string", next: "@popall" },
330
+ "@default": "string"
331
+ }
332
+ }
333
+ ],
334
+ [
335
+ /@escapes/,
336
+ {
337
+ cases: {
338
+ "@eos": { token: "string.escape", next: "@popall" },
339
+ "@default": "string.escape"
340
+ }
341
+ }
342
+ ],
343
+ [
344
+ /\\./,
345
+ {
346
+ cases: {
347
+ "@eos": {
348
+ token: "string.escape.invalid",
349
+ next: "@popall"
350
+ },
351
+ "@default": "string.escape.invalid"
352
+ }
353
+ }
354
+ ],
355
+ // interpolation
356
+ [/(#{)([^}]*)(})/, ["interpolation.delimiter", "interpolation", "interpolation.delimiter"]],
357
+ [/#/, "string"],
358
+ [
359
+ /["']/,
360
+ {
361
+ cases: {
362
+ "$#==$S2": { token: "string", next: "@pop" },
363
+ "@default": { token: "string" }
364
+ }
365
+ }
366
+ ]
367
+ ],
368
+ // Almost identical to above, except for escapes and the output token
369
+ value: [
370
+ [
371
+ /[^\\"']+/,
372
+ {
373
+ cases: {
374
+ "@eos": { token: "attribute.value", next: "@popall" },
375
+ "@default": "attribute.value"
376
+ }
377
+ }
378
+ ],
379
+ [
380
+ /\\./,
381
+ {
382
+ cases: {
383
+ "@eos": { token: "attribute.value", next: "@popall" },
384
+ "@default": "attribute.value"
385
+ }
386
+ }
387
+ ],
388
+ [
389
+ /["']/,
390
+ {
391
+ cases: {
392
+ "$#==$S2": { token: "attribute.value", next: "@pop" },
393
+ "@default": { token: "attribute.value" }
394
+ }
395
+ }
396
+ ]
397
+ ]
398
+ }
399
+ };
400
+ export {
401
+ conf,
402
+ language
403
+ };
@@ -0,0 +1,295 @@
1
+ import { l as languages } from "./index-pZmE1QXB.js";
2
+ const conf = {
3
+ comments: {
4
+ lineComment: "#",
5
+ blockComment: ["'''", "'''"]
6
+ },
7
+ brackets: [
8
+ ["{", "}"],
9
+ ["[", "]"],
10
+ ["(", ")"]
11
+ ],
12
+ autoClosingPairs: [
13
+ { open: "{", close: "}" },
14
+ { open: "[", close: "]" },
15
+ { open: "(", close: ")" },
16
+ { open: '"', close: '"', notIn: ["string"] },
17
+ { open: "'", close: "'", notIn: ["string", "comment"] }
18
+ ],
19
+ surroundingPairs: [
20
+ { open: "{", close: "}" },
21
+ { open: "[", close: "]" },
22
+ { open: "(", close: ")" },
23
+ { open: '"', close: '"' },
24
+ { open: "'", close: "'" }
25
+ ],
26
+ onEnterRules: [
27
+ {
28
+ beforeText: new RegExp(
29
+ "^\\s*(?:def|class|for|if|elif|else|while|try|with|finally|except|async|match|case).*?:\\s*$"
30
+ ),
31
+ action: { indentAction: languages.IndentAction.Indent }
32
+ }
33
+ ],
34
+ folding: {
35
+ offSide: true,
36
+ markers: {
37
+ start: new RegExp("^\\s*#region\\b"),
38
+ end: new RegExp("^\\s*#endregion\\b")
39
+ }
40
+ }
41
+ };
42
+ const language = {
43
+ defaultToken: "",
44
+ tokenPostfix: ".python",
45
+ keywords: [
46
+ // This section is the result of running
47
+ // `import keyword; for k in sorted(keyword.kwlist + keyword.softkwlist): print(" '" + k + "',")`
48
+ // in a Python REPL,
49
+ // though note that the output from Python 3 is not a strict superset of the
50
+ // output from Python 2.
51
+ "False",
52
+ // promoted to keyword.kwlist in Python 3
53
+ "None",
54
+ // promoted to keyword.kwlist in Python 3
55
+ "True",
56
+ // promoted to keyword.kwlist in Python 3
57
+ "_",
58
+ // new in Python 3.10
59
+ "and",
60
+ "as",
61
+ "assert",
62
+ "async",
63
+ // new in Python 3
64
+ "await",
65
+ // new in Python 3
66
+ "break",
67
+ "case",
68
+ // new in Python 3.10
69
+ "class",
70
+ "continue",
71
+ "def",
72
+ "del",
73
+ "elif",
74
+ "else",
75
+ "except",
76
+ "exec",
77
+ // Python 2, but not 3.
78
+ "finally",
79
+ "for",
80
+ "from",
81
+ "global",
82
+ "if",
83
+ "import",
84
+ "in",
85
+ "is",
86
+ "lambda",
87
+ "match",
88
+ // new in Python 3.10
89
+ "nonlocal",
90
+ // new in Python 3
91
+ "not",
92
+ "or",
93
+ "pass",
94
+ "print",
95
+ // Python 2, but not 3.
96
+ "raise",
97
+ "return",
98
+ "try",
99
+ "type",
100
+ // new in Python 3.12
101
+ "while",
102
+ "with",
103
+ "yield",
104
+ "int",
105
+ "float",
106
+ "long",
107
+ "complex",
108
+ "hex",
109
+ "abs",
110
+ "all",
111
+ "any",
112
+ "apply",
113
+ "basestring",
114
+ "bin",
115
+ "bool",
116
+ "buffer",
117
+ "bytearray",
118
+ "callable",
119
+ "chr",
120
+ "classmethod",
121
+ "cmp",
122
+ "coerce",
123
+ "compile",
124
+ "complex",
125
+ "delattr",
126
+ "dict",
127
+ "dir",
128
+ "divmod",
129
+ "enumerate",
130
+ "eval",
131
+ "execfile",
132
+ "file",
133
+ "filter",
134
+ "format",
135
+ "frozenset",
136
+ "getattr",
137
+ "globals",
138
+ "hasattr",
139
+ "hash",
140
+ "help",
141
+ "id",
142
+ "input",
143
+ "intern",
144
+ "isinstance",
145
+ "issubclass",
146
+ "iter",
147
+ "len",
148
+ "locals",
149
+ "list",
150
+ "map",
151
+ "max",
152
+ "memoryview",
153
+ "min",
154
+ "next",
155
+ "object",
156
+ "oct",
157
+ "open",
158
+ "ord",
159
+ "pow",
160
+ "print",
161
+ "property",
162
+ "reversed",
163
+ "range",
164
+ "raw_input",
165
+ "reduce",
166
+ "reload",
167
+ "repr",
168
+ "reversed",
169
+ "round",
170
+ "self",
171
+ "set",
172
+ "setattr",
173
+ "slice",
174
+ "sorted",
175
+ "staticmethod",
176
+ "str",
177
+ "sum",
178
+ "super",
179
+ "tuple",
180
+ "type",
181
+ "unichr",
182
+ "unicode",
183
+ "vars",
184
+ "xrange",
185
+ "zip",
186
+ "__dict__",
187
+ "__methods__",
188
+ "__members__",
189
+ "__class__",
190
+ "__bases__",
191
+ "__name__",
192
+ "__mro__",
193
+ "__subclasses__",
194
+ "__init__",
195
+ "__import__"
196
+ ],
197
+ brackets: [
198
+ { open: "{", close: "}", token: "delimiter.curly" },
199
+ { open: "[", close: "]", token: "delimiter.bracket" },
200
+ { open: "(", close: ")", token: "delimiter.parenthesis" }
201
+ ],
202
+ tokenizer: {
203
+ root: [
204
+ { include: "@whitespace" },
205
+ { include: "@numbers" },
206
+ { include: "@strings" },
207
+ [/[,:;]/, "delimiter"],
208
+ [/[{}\[\]()]/, "@brackets"],
209
+ [/@[a-zA-Z_]\w*/, "tag"],
210
+ [
211
+ /[a-zA-Z_]\w*/,
212
+ {
213
+ cases: {
214
+ "@keywords": "keyword",
215
+ "@default": "identifier"
216
+ }
217
+ }
218
+ ]
219
+ ],
220
+ // Deal with white space, including single and multi-line comments
221
+ whitespace: [
222
+ [/\s+/, "white"],
223
+ [/(^#.*$)/, "comment"],
224
+ [/'''/, "string", "@endDocString"],
225
+ [/"""/, "string", "@endDblDocString"]
226
+ ],
227
+ endDocString: [
228
+ [/[^']+/, "string"],
229
+ [/\\'/, "string"],
230
+ [/'''/, "string", "@popall"],
231
+ [/'/, "string"]
232
+ ],
233
+ endDblDocString: [
234
+ [/[^"]+/, "string"],
235
+ [/\\"/, "string"],
236
+ [/"""/, "string", "@popall"],
237
+ [/"/, "string"]
238
+ ],
239
+ // Recognize hex, negatives, decimals, imaginaries, longs, and scientific notation
240
+ numbers: [
241
+ [/-?0x([abcdef]|[ABCDEF]|\d)+[lL]?/, "number.hex"],
242
+ [/-?(\d*\.)?\d+([eE][+\-]?\d+)?[jJ]?[lL]?/, "number"]
243
+ ],
244
+ // Recognize strings, including those broken across lines with \ (but not without)
245
+ strings: [
246
+ [/'$/, "string.escape", "@popall"],
247
+ [/f'{1,3}/, "string.escape", "@fStringBody"],
248
+ [/'/, "string.escape", "@stringBody"],
249
+ [/"$/, "string.escape", "@popall"],
250
+ [/f"{1,3}/, "string.escape", "@fDblStringBody"],
251
+ [/"/, "string.escape", "@dblStringBody"]
252
+ ],
253
+ fStringBody: [
254
+ [/[^\\'\{\}]+$/, "string", "@popall"],
255
+ [/[^\\'\{\}]+/, "string"],
256
+ [/\{[^\}':!=]+/, "identifier", "@fStringDetail"],
257
+ [/\\./, "string"],
258
+ [/'/, "string.escape", "@popall"],
259
+ [/\\$/, "string"]
260
+ ],
261
+ stringBody: [
262
+ [/[^\\']+$/, "string", "@popall"],
263
+ [/[^\\']+/, "string"],
264
+ [/\\./, "string"],
265
+ [/'/, "string.escape", "@popall"],
266
+ [/\\$/, "string"]
267
+ ],
268
+ fDblStringBody: [
269
+ [/[^\\"\{\}]+$/, "string", "@popall"],
270
+ [/[^\\"\{\}]+/, "string"],
271
+ [/\{[^\}':!=]+/, "identifier", "@fStringDetail"],
272
+ [/\\./, "string"],
273
+ [/"/, "string.escape", "@popall"],
274
+ [/\\$/, "string"]
275
+ ],
276
+ dblStringBody: [
277
+ [/[^\\"]+$/, "string", "@popall"],
278
+ [/[^\\"]+/, "string"],
279
+ [/\\./, "string"],
280
+ [/"/, "string.escape", "@popall"],
281
+ [/\\$/, "string"]
282
+ ],
283
+ fStringDetail: [
284
+ [/[:][^}]+/, "string"],
285
+ [/[!][ars]/, "string"],
286
+ // only !a, !r, !s are supported by f-strings: https://docs.python.org/3/tutorial/inputoutput.html#formatted-string-literals
287
+ [/=/, "string"],
288
+ [/\}/, "identifier", "@pop"]
289
+ ]
290
+ }
291
+ };
292
+ export {
293
+ conf,
294
+ language
295
+ };