@shikijs/colorized-brackets 3.23.0 → 4.0.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.
package/dist/index.mjs CHANGED
@@ -1,803 +1,742 @@
1
- import { ShikiError } from 'shiki';
1
+ import { ShikiError } from "shiki";
2
2
 
3
- const builtInThemes = {
4
- "andromeeda": [
5
- "#FFD700",
6
- "#DA70D6",
7
- "#179FFF",
8
- "rgba(255, 18, 18, 0.8)"
9
- ],
10
- "aurora-x": [
11
- "#FFD700",
12
- "#DA70D6",
13
- "#179FFF",
14
- "rgba(255, 18, 18, 0.8)"
15
- ],
16
- "ayu-dark": [
17
- "#FFD700",
18
- "#DA70D6",
19
- "#179FFF",
20
- "rgba(255, 18, 18, 0.8)"
21
- ],
22
- "ayu-light": [
23
- "#0431FA",
24
- "#319331",
25
- "#7B3814",
26
- "rgba(255, 18, 18, 0.8)"
27
- ],
28
- "ayu-mirage": [
29
- "#FFD700",
30
- "#DA70D6",
31
- "#179FFF",
32
- "rgba(255, 18, 18, 0.8)"
33
- ],
34
- "catppuccin-frappe": [
35
- "#e78284",
36
- "#ef9f76",
37
- "#e5c890",
38
- "#a6d189",
39
- "#85c1dc",
40
- "#ca9ee6",
41
- "#ea999c"
42
- ],
43
- "catppuccin-latte": [
44
- "#d20f39",
45
- "#fe640b",
46
- "#df8e1d",
47
- "#40a02b",
48
- "#209fb5",
49
- "#8839ef",
50
- "#e64553"
51
- ],
52
- "catppuccin-macchiato": [
53
- "#ed8796",
54
- "#f5a97f",
55
- "#eed49f",
56
- "#a6da95",
57
- "#7dc4e4",
58
- "#c6a0f6",
59
- "#ee99a0"
60
- ],
61
- "catppuccin-mocha": [
62
- "#f38ba8",
63
- "#fab387",
64
- "#f9e2af",
65
- "#a6e3a1",
66
- "#74c7ec",
67
- "#cba6f7",
68
- "#eba0ac"
69
- ],
70
- "dark-plus": [
71
- "#FFD700",
72
- "#DA70D6",
73
- "#179FFF",
74
- "rgba(255, 18, 18, 0.8)"
75
- ],
76
- "dracula": [
77
- "#F8F8F2",
78
- "#FF79C6",
79
- "#8BE9FD",
80
- "#50FA7B",
81
- "#BD93F9",
82
- "#FFB86C",
83
- "#FF5555"
84
- ],
85
- "dracula-soft": [
86
- "#f6f6f4",
87
- "#f286c4",
88
- "#97e1f1",
89
- "#62e884",
90
- "#bf9eee",
91
- "#FFB86C",
92
- "#ee6666"
93
- ],
94
- "everforest-dark": [
95
- "#e67e80",
96
- "#dbbc7f",
97
- "#a7c080",
98
- "#7fbbb3",
99
- "#e69875",
100
- "#d699b6",
101
- "#859289"
102
- ],
103
- "everforest-light": [
104
- "#f85552",
105
- "#dfa000",
106
- "#8da101",
107
- "#3a94c5",
108
- "#f57d26",
109
- "#df69ba",
110
- "#939f91"
111
- ],
112
- "github-dark": [
113
- "#79b8ff",
114
- "#ffab70",
115
- "#b392f0",
116
- "#79b8ff",
117
- "#ffab70",
118
- "#b392f0",
119
- "rgba(255, 18, 18, 0.8)"
120
- ],
121
- "github-dark-default": [
122
- "#79c0ff",
123
- "#56d364",
124
- "#e3b341",
125
- "#ffa198",
126
- "#ff9bce",
127
- "#d2a8ff",
128
- "#7d8590"
129
- ],
130
- "github-dark-dimmed": [
131
- "#6cb6ff",
132
- "#6bc46d",
133
- "#daaa3f",
134
- "#ff938a",
135
- "#fc8dc7",
136
- "#dcbdfb",
137
- "#768390"
138
- ],
139
- "github-dark-high-contrast": [
140
- "#91cbff",
141
- "#4ae168",
142
- "#f7c843",
143
- "#ffb1af",
144
- "#ffadd4",
145
- "#dbb7ff",
146
- "#f0f3f6"
147
- ],
148
- "github-light": [
149
- "#005cc5",
150
- "#e36209",
151
- "#5a32a3",
152
- "#005cc5",
153
- "#e36209",
154
- "#5a32a3",
155
- "rgba(255, 18, 18, 0.8)"
156
- ],
157
- "github-light-default": [
158
- "#0969da",
159
- "#1a7f37",
160
- "#9a6700",
161
- "#cf222e",
162
- "#bf3989",
163
- "#8250df",
164
- "#656d76"
165
- ],
166
- "github-light-high-contrast": [
167
- "#0349b4",
168
- "#055d20",
169
- "#744500",
170
- "#a0111f",
171
- "#971368",
172
- "#622cbc",
173
- "#0e1116"
174
- ],
175
- "gruvbox-dark-hard": [
176
- "#b16286",
177
- "#458588",
178
- "#689d6a",
179
- "#98971a",
180
- "#d79921",
181
- "#d65d0e",
182
- "#cc241d"
183
- ],
184
- "gruvbox-dark-medium": [
185
- "#b16286",
186
- "#458588",
187
- "#689d6a",
188
- "#98971a",
189
- "#d79921",
190
- "#d65d0e",
191
- "#cc241d"
192
- ],
193
- "gruvbox-dark-soft": [
194
- "#b16286",
195
- "#458588",
196
- "#689d6a",
197
- "#98971a",
198
- "#d79921",
199
- "#d65d0e",
200
- "#cc241d"
201
- ],
202
- "gruvbox-light-hard": [
203
- "#b16286",
204
- "#458588",
205
- "#689d6a",
206
- "#98971a",
207
- "#d79921",
208
- "#d65d0e",
209
- "#cc241d"
210
- ],
211
- "gruvbox-light-medium": [
212
- "#b16286",
213
- "#458588",
214
- "#689d6a",
215
- "#98971a",
216
- "#d79921",
217
- "#d65d0e",
218
- "#cc241d"
219
- ],
220
- "gruvbox-light-soft": [
221
- "#b16286",
222
- "#458588",
223
- "#689d6a",
224
- "#98971a",
225
- "#d79921",
226
- "#d65d0e",
227
- "#cc241d"
228
- ],
229
- "horizon": [
230
- "#FFD700",
231
- "#DA70D6",
232
- "#179FFF",
233
- "rgba(255, 18, 18, 0.8)"
234
- ],
235
- "horizon-bright": [
236
- "#FFD700",
237
- "#DA70D6",
238
- "#179FFF",
239
- "rgba(255, 18, 18, 0.8)"
240
- ],
241
- "houston": [
242
- "#FFD700",
243
- "#DA70D6",
244
- "#179FFF",
245
- "rgba(255, 18, 18, 0.8)"
246
- ],
247
- "kanagawa-dragon": [
248
- "#8992A7",
249
- "#B6927B",
250
- "#8BA4B0",
251
- "#A292A3",
252
- "#C4B28A",
253
- "#8EA4A2",
254
- "#C4746E"
255
- ],
256
- "kanagawa-lotus": [
257
- "#624C83",
258
- "#CC6D00",
259
- "#4D699B",
260
- "#B35B79",
261
- "#77713F",
262
- "#597B75",
263
- "#D9A594"
264
- ],
265
- "kanagawa-wave": [
266
- "#957FB8",
267
- "#FFA066",
268
- "#7E9CD8",
269
- "#D27E99",
270
- "#E6C384",
271
- "#7AA89F",
272
- "#FF5D62"
273
- ],
274
- "laserwave": [
275
- "#FFD700",
276
- "#DA70D6",
277
- "#179FFF",
278
- "rgba(255, 18, 18, 0.8)"
279
- ],
280
- "light-plus": [
281
- "#0431FA",
282
- "#319331",
283
- "#7B3814",
284
- "rgba(255, 18, 18, 0.8)"
285
- ],
286
- "material-theme": [
287
- "#FFD700",
288
- "#DA70D6",
289
- "#179FFF",
290
- "rgba(255, 18, 18, 0.8)"
291
- ],
292
- "material-theme-darker": [
293
- "#FFD700",
294
- "#DA70D6",
295
- "#179FFF",
296
- "rgba(255, 18, 18, 0.8)"
297
- ],
298
- "material-theme-lighter": [
299
- "#0431FA",
300
- "#319331",
301
- "#7B3814",
302
- "rgba(255, 18, 18, 0.8)"
303
- ],
304
- "material-theme-ocean": [
305
- "#FFD700",
306
- "#DA70D6",
307
- "#179FFF",
308
- "rgba(255, 18, 18, 0.8)"
309
- ],
310
- "material-theme-palenight": [
311
- "#FFD700",
312
- "#DA70D6",
313
- "#179FFF",
314
- "rgba(255, 18, 18, 0.8)"
315
- ],
316
- "min-dark": [
317
- "#FFD700",
318
- "#DA70D6",
319
- "#179FFF",
320
- "rgba(255, 18, 18, 0.8)"
321
- ],
322
- "min-light": [
323
- "#0431FA",
324
- "#319331",
325
- "#7B3814",
326
- "rgba(255, 18, 18, 0.8)"
327
- ],
328
- "monokai": [
329
- "#FFD700",
330
- "#DA70D6",
331
- "#179FFF",
332
- "rgba(255, 18, 18, 0.8)"
333
- ],
334
- "night-owl": [
335
- "#FFD700",
336
- "#DA70D6",
337
- "#179FFF",
338
- "rgba(255, 18, 18, 0.8)"
339
- ],
340
- "night-owl-light": [
341
- "#0431FA",
342
- "#319331",
343
- "#7B3814",
344
- "rgba(255, 18, 18, 0.8)"
345
- ],
346
- "nord": [
347
- "#8fbcbb",
348
- "#88c0d0",
349
- "#81a1c1",
350
- "#5e81ac",
351
- "#8fbcbb",
352
- "#88c0d0",
353
- "#bf616a"
354
- ],
355
- "one-dark-pro": [
356
- "#d19a66",
357
- "#c678dd",
358
- "#56b6c2",
359
- "rgba(255, 18, 18, 0.8)"
360
- ],
361
- "one-light": [
362
- "#0431FA",
363
- "#319331",
364
- "#7B3814",
365
- "rgba(255, 18, 18, 0.8)"
366
- ],
367
- "plastic": [
368
- "#A9B2C3",
369
- "#61AFEF",
370
- "#E5C07B",
371
- "#E06C75",
372
- "#98C379",
373
- "#B57EDC",
374
- "#D74E42"
375
- ],
376
- "poimandres": [
377
- "#FFD700",
378
- "#DA70D6",
379
- "#179FFF",
380
- "rgba(255, 18, 18, 0.8)"
381
- ],
382
- "red": [
383
- "#FFD700",
384
- "#DA70D6",
385
- "#179FFF",
386
- "rgba(255, 18, 18, 0.8)"
387
- ],
388
- "rose-pine": [
389
- "#eb6f9280",
390
- "#31748f80",
391
- "#f6c17780",
392
- "#9ccfd880",
393
- "#ebbcba80",
394
- "#c4a7e780",
395
- "rgba(255, 18, 18, 0.8)"
396
- ],
397
- "rose-pine-dawn": [
398
- "#b4637a80",
399
- "#28698380",
400
- "#ea9d3480",
401
- "#56949f80",
402
- "#d7827e80",
403
- "#907aa980",
404
- "rgba(255, 18, 18, 0.8)"
405
- ],
406
- "rose-pine-moon": [
407
- "#eb6f9280",
408
- "#3e8fb080",
409
- "#f6c17780",
410
- "#9ccfd880",
411
- "#ea9a9780",
412
- "#c4a7e780",
413
- "rgba(255, 18, 18, 0.8)"
414
- ],
415
- "slack-dark": [
416
- "#FFD700",
417
- "#DA70D6",
418
- "#179FFF",
419
- "rgba(255, 18, 18, 0.8)"
420
- ],
421
- "slack-ochin": [
422
- "#0431FA",
423
- "#319331",
424
- "#7B3814",
425
- "rgba(255, 18, 18, 0.8)"
426
- ],
427
- "snazzy-light": [
428
- "#0431FA",
429
- "#319331",
430
- "#7B3814",
431
- "rgba(255, 18, 18, 0.8)"
432
- ],
433
- "solarized-dark": [
434
- "#cdcdcdff",
435
- "#b58900ff",
436
- "#d33682ff",
437
- "rgba(255, 18, 18, 0.8)"
438
- ],
439
- "solarized-light": [
440
- "#0431FA",
441
- "#319331",
442
- "#7B3814",
443
- "rgba(255, 18, 18, 0.8)"
444
- ],
445
- "synthwave-84": [
446
- "#FFD700",
447
- "#DA70D6",
448
- "#179FFF",
449
- "rgba(255, 18, 18, 0.8)"
450
- ],
451
- "tokyo-night": [
452
- "#698cd6",
453
- "#68b3de",
454
- "#9a7ecc",
455
- "#25aac2",
456
- "#80a856",
457
- "#c49a5a",
458
- "#db4b4b"
459
- ],
460
- "vesper": [
461
- "#A0A0A0",
462
- "#A0A0A0",
463
- "#A0A0A0",
464
- "#A0A0A0",
465
- "#A0A0A0",
466
- "#A0A0A0",
467
- "#FF8080"
468
- ],
469
- "vitesse-black": [
470
- "#5eaab5",
471
- "#4d9375",
472
- "#d4976c",
473
- "#d9739f",
474
- "#e6cc77",
475
- "#6394bf",
476
- "rgba(255, 18, 18, 0.8)"
477
- ],
478
- "vitesse-dark": [
479
- "#5eaab5",
480
- "#4d9375",
481
- "#d4976c",
482
- "#d9739f",
483
- "#e6cc77",
484
- "#6394bf",
485
- "rgba(255, 18, 18, 0.8)"
486
- ],
487
- "vitesse-light": [
488
- "#2993a3",
489
- "#1e754f",
490
- "#a65e2b",
491
- "#a13865",
492
- "#bda437",
493
- "#296aa3",
494
- "rgba(255, 18, 18, 0.8)"
495
- ]
3
+ //#region src/themes.ts
4
+ var themes_default = {
5
+ "andromeeda": [
6
+ "#FFD700",
7
+ "#DA70D6",
8
+ "#179FFF",
9
+ "rgba(255, 18, 18, 0.8)"
10
+ ],
11
+ "aurora-x": [
12
+ "#FFD700",
13
+ "#DA70D6",
14
+ "#179FFF",
15
+ "rgba(255, 18, 18, 0.8)"
16
+ ],
17
+ "ayu-dark": [
18
+ "#FFD700",
19
+ "#DA70D6",
20
+ "#179FFF",
21
+ "rgba(255, 18, 18, 0.8)"
22
+ ],
23
+ "ayu-light": [
24
+ "#0431FA",
25
+ "#319331",
26
+ "#7B3814",
27
+ "rgba(255, 18, 18, 0.8)"
28
+ ],
29
+ "ayu-mirage": [
30
+ "#FFD700",
31
+ "#DA70D6",
32
+ "#179FFF",
33
+ "rgba(255, 18, 18, 0.8)"
34
+ ],
35
+ "catppuccin-frappe": [
36
+ "#e78284",
37
+ "#ef9f76",
38
+ "#e5c890",
39
+ "#a6d189",
40
+ "#85c1dc",
41
+ "#ca9ee6",
42
+ "#ea999c"
43
+ ],
44
+ "catppuccin-latte": [
45
+ "#d20f39",
46
+ "#fe640b",
47
+ "#df8e1d",
48
+ "#40a02b",
49
+ "#209fb5",
50
+ "#8839ef",
51
+ "#e64553"
52
+ ],
53
+ "catppuccin-macchiato": [
54
+ "#ed8796",
55
+ "#f5a97f",
56
+ "#eed49f",
57
+ "#a6da95",
58
+ "#7dc4e4",
59
+ "#c6a0f6",
60
+ "#ee99a0"
61
+ ],
62
+ "catppuccin-mocha": [
63
+ "#f38ba8",
64
+ "#fab387",
65
+ "#f9e2af",
66
+ "#a6e3a1",
67
+ "#74c7ec",
68
+ "#cba6f7",
69
+ "#eba0ac"
70
+ ],
71
+ "dark-plus": [
72
+ "#FFD700",
73
+ "#DA70D6",
74
+ "#179FFF",
75
+ "rgba(255, 18, 18, 0.8)"
76
+ ],
77
+ "dracula": [
78
+ "#F8F8F2",
79
+ "#FF79C6",
80
+ "#8BE9FD",
81
+ "#50FA7B",
82
+ "#BD93F9",
83
+ "#FFB86C",
84
+ "#FF5555"
85
+ ],
86
+ "dracula-soft": [
87
+ "#f6f6f4",
88
+ "#f286c4",
89
+ "#97e1f1",
90
+ "#62e884",
91
+ "#bf9eee",
92
+ "#FFB86C",
93
+ "#ee6666"
94
+ ],
95
+ "everforest-dark": [
96
+ "#e67e80",
97
+ "#dbbc7f",
98
+ "#a7c080",
99
+ "#7fbbb3",
100
+ "#e69875",
101
+ "#d699b6",
102
+ "#859289"
103
+ ],
104
+ "everforest-light": [
105
+ "#f85552",
106
+ "#dfa000",
107
+ "#8da101",
108
+ "#3a94c5",
109
+ "#f57d26",
110
+ "#df69ba",
111
+ "#939f91"
112
+ ],
113
+ "github-dark": [
114
+ "#79b8ff",
115
+ "#ffab70",
116
+ "#b392f0",
117
+ "#79b8ff",
118
+ "#ffab70",
119
+ "#b392f0",
120
+ "rgba(255, 18, 18, 0.8)"
121
+ ],
122
+ "github-dark-default": [
123
+ "#79c0ff",
124
+ "#56d364",
125
+ "#e3b341",
126
+ "#ffa198",
127
+ "#ff9bce",
128
+ "#d2a8ff",
129
+ "#7d8590"
130
+ ],
131
+ "github-dark-dimmed": [
132
+ "#6cb6ff",
133
+ "#6bc46d",
134
+ "#daaa3f",
135
+ "#ff938a",
136
+ "#fc8dc7",
137
+ "#dcbdfb",
138
+ "#768390"
139
+ ],
140
+ "github-dark-high-contrast": [
141
+ "#91cbff",
142
+ "#4ae168",
143
+ "#f7c843",
144
+ "#ffb1af",
145
+ "#ffadd4",
146
+ "#dbb7ff",
147
+ "#f0f3f6"
148
+ ],
149
+ "github-light": [
150
+ "#005cc5",
151
+ "#e36209",
152
+ "#5a32a3",
153
+ "#005cc5",
154
+ "#e36209",
155
+ "#5a32a3",
156
+ "rgba(255, 18, 18, 0.8)"
157
+ ],
158
+ "github-light-default": [
159
+ "#0969da",
160
+ "#1a7f37",
161
+ "#9a6700",
162
+ "#cf222e",
163
+ "#bf3989",
164
+ "#8250df",
165
+ "#656d76"
166
+ ],
167
+ "github-light-high-contrast": [
168
+ "#0349b4",
169
+ "#055d20",
170
+ "#744500",
171
+ "#a0111f",
172
+ "#971368",
173
+ "#622cbc",
174
+ "#0e1116"
175
+ ],
176
+ "gruvbox-dark-hard": [
177
+ "#b16286",
178
+ "#458588",
179
+ "#689d6a",
180
+ "#98971a",
181
+ "#d79921",
182
+ "#d65d0e",
183
+ "#cc241d"
184
+ ],
185
+ "gruvbox-dark-medium": [
186
+ "#b16286",
187
+ "#458588",
188
+ "#689d6a",
189
+ "#98971a",
190
+ "#d79921",
191
+ "#d65d0e",
192
+ "#cc241d"
193
+ ],
194
+ "gruvbox-dark-soft": [
195
+ "#b16286",
196
+ "#458588",
197
+ "#689d6a",
198
+ "#98971a",
199
+ "#d79921",
200
+ "#d65d0e",
201
+ "#cc241d"
202
+ ],
203
+ "gruvbox-light-hard": [
204
+ "#b16286",
205
+ "#458588",
206
+ "#689d6a",
207
+ "#98971a",
208
+ "#d79921",
209
+ "#d65d0e",
210
+ "#cc241d"
211
+ ],
212
+ "gruvbox-light-medium": [
213
+ "#b16286",
214
+ "#458588",
215
+ "#689d6a",
216
+ "#98971a",
217
+ "#d79921",
218
+ "#d65d0e",
219
+ "#cc241d"
220
+ ],
221
+ "gruvbox-light-soft": [
222
+ "#b16286",
223
+ "#458588",
224
+ "#689d6a",
225
+ "#98971a",
226
+ "#d79921",
227
+ "#d65d0e",
228
+ "#cc241d"
229
+ ],
230
+ "horizon": [
231
+ "#FFD700",
232
+ "#DA70D6",
233
+ "#179FFF",
234
+ "rgba(255, 18, 18, 0.8)"
235
+ ],
236
+ "horizon-bright": [
237
+ "#FFD700",
238
+ "#DA70D6",
239
+ "#179FFF",
240
+ "rgba(255, 18, 18, 0.8)"
241
+ ],
242
+ "houston": [
243
+ "#FFD700",
244
+ "#DA70D6",
245
+ "#179FFF",
246
+ "rgba(255, 18, 18, 0.8)"
247
+ ],
248
+ "kanagawa-dragon": [
249
+ "#8992A7",
250
+ "#B6927B",
251
+ "#8BA4B0",
252
+ "#A292A3",
253
+ "#C4B28A",
254
+ "#8EA4A2",
255
+ "#C4746E"
256
+ ],
257
+ "kanagawa-lotus": [
258
+ "#624C83",
259
+ "#CC6D00",
260
+ "#4D699B",
261
+ "#B35B79",
262
+ "#77713F",
263
+ "#597B75",
264
+ "#D9A594"
265
+ ],
266
+ "kanagawa-wave": [
267
+ "#957FB8",
268
+ "#FFA066",
269
+ "#7E9CD8",
270
+ "#D27E99",
271
+ "#E6C384",
272
+ "#7AA89F",
273
+ "#FF5D62"
274
+ ],
275
+ "laserwave": [
276
+ "#FFD700",
277
+ "#DA70D6",
278
+ "#179FFF",
279
+ "rgba(255, 18, 18, 0.8)"
280
+ ],
281
+ "light-plus": [
282
+ "#0431FA",
283
+ "#319331",
284
+ "#7B3814",
285
+ "rgba(255, 18, 18, 0.8)"
286
+ ],
287
+ "material-theme": [
288
+ "#FFD700",
289
+ "#DA70D6",
290
+ "#179FFF",
291
+ "rgba(255, 18, 18, 0.8)"
292
+ ],
293
+ "material-theme-darker": [
294
+ "#FFD700",
295
+ "#DA70D6",
296
+ "#179FFF",
297
+ "rgba(255, 18, 18, 0.8)"
298
+ ],
299
+ "material-theme-lighter": [
300
+ "#0431FA",
301
+ "#319331",
302
+ "#7B3814",
303
+ "rgba(255, 18, 18, 0.8)"
304
+ ],
305
+ "material-theme-ocean": [
306
+ "#FFD700",
307
+ "#DA70D6",
308
+ "#179FFF",
309
+ "rgba(255, 18, 18, 0.8)"
310
+ ],
311
+ "material-theme-palenight": [
312
+ "#FFD700",
313
+ "#DA70D6",
314
+ "#179FFF",
315
+ "rgba(255, 18, 18, 0.8)"
316
+ ],
317
+ "min-dark": [
318
+ "#FFD700",
319
+ "#DA70D6",
320
+ "#179FFF",
321
+ "rgba(255, 18, 18, 0.8)"
322
+ ],
323
+ "min-light": [
324
+ "#0431FA",
325
+ "#319331",
326
+ "#7B3814",
327
+ "rgba(255, 18, 18, 0.8)"
328
+ ],
329
+ "monokai": [
330
+ "#FFD700",
331
+ "#DA70D6",
332
+ "#179FFF",
333
+ "rgba(255, 18, 18, 0.8)"
334
+ ],
335
+ "night-owl": [
336
+ "#FFD700",
337
+ "#DA70D6",
338
+ "#179FFF",
339
+ "rgba(255, 18, 18, 0.8)"
340
+ ],
341
+ "night-owl-light": [
342
+ "#0431FA",
343
+ "#319331",
344
+ "#7B3814",
345
+ "rgba(255, 18, 18, 0.8)"
346
+ ],
347
+ "nord": [
348
+ "#8fbcbb",
349
+ "#88c0d0",
350
+ "#81a1c1",
351
+ "#5e81ac",
352
+ "#8fbcbb",
353
+ "#88c0d0",
354
+ "#bf616a"
355
+ ],
356
+ "one-dark-pro": [
357
+ "#d19a66",
358
+ "#c678dd",
359
+ "#56b6c2",
360
+ "rgba(255, 18, 18, 0.8)"
361
+ ],
362
+ "one-light": [
363
+ "#0431FA",
364
+ "#319331",
365
+ "#7B3814",
366
+ "rgba(255, 18, 18, 0.8)"
367
+ ],
368
+ "plastic": [
369
+ "#A9B2C3",
370
+ "#61AFEF",
371
+ "#E5C07B",
372
+ "#E06C75",
373
+ "#98C379",
374
+ "#B57EDC",
375
+ "#D74E42"
376
+ ],
377
+ "poimandres": [
378
+ "#FFD700",
379
+ "#DA70D6",
380
+ "#179FFF",
381
+ "rgba(255, 18, 18, 0.8)"
382
+ ],
383
+ "red": [
384
+ "#FFD700",
385
+ "#DA70D6",
386
+ "#179FFF",
387
+ "rgba(255, 18, 18, 0.8)"
388
+ ],
389
+ "rose-pine": [
390
+ "#eb6f9280",
391
+ "#31748f80",
392
+ "#f6c17780",
393
+ "#9ccfd880",
394
+ "#ebbcba80",
395
+ "#c4a7e780",
396
+ "rgba(255, 18, 18, 0.8)"
397
+ ],
398
+ "rose-pine-dawn": [
399
+ "#b4637a80",
400
+ "#28698380",
401
+ "#ea9d3480",
402
+ "#56949f80",
403
+ "#d7827e80",
404
+ "#907aa980",
405
+ "rgba(255, 18, 18, 0.8)"
406
+ ],
407
+ "rose-pine-moon": [
408
+ "#eb6f9280",
409
+ "#3e8fb080",
410
+ "#f6c17780",
411
+ "#9ccfd880",
412
+ "#ea9a9780",
413
+ "#c4a7e780",
414
+ "rgba(255, 18, 18, 0.8)"
415
+ ],
416
+ "slack-dark": [
417
+ "#FFD700",
418
+ "#DA70D6",
419
+ "#179FFF",
420
+ "rgba(255, 18, 18, 0.8)"
421
+ ],
422
+ "slack-ochin": [
423
+ "#0431FA",
424
+ "#319331",
425
+ "#7B3814",
426
+ "rgba(255, 18, 18, 0.8)"
427
+ ],
428
+ "snazzy-light": [
429
+ "#0431FA",
430
+ "#319331",
431
+ "#7B3814",
432
+ "rgba(255, 18, 18, 0.8)"
433
+ ],
434
+ "solarized-dark": [
435
+ "#cdcdcdff",
436
+ "#b58900ff",
437
+ "#d33682ff",
438
+ "rgba(255, 18, 18, 0.8)"
439
+ ],
440
+ "solarized-light": [
441
+ "#0431FA",
442
+ "#319331",
443
+ "#7B3814",
444
+ "rgba(255, 18, 18, 0.8)"
445
+ ],
446
+ "synthwave-84": [
447
+ "#FFD700",
448
+ "#DA70D6",
449
+ "#179FFF",
450
+ "rgba(255, 18, 18, 0.8)"
451
+ ],
452
+ "tokyo-night": [
453
+ "#698cd6",
454
+ "#68b3de",
455
+ "#9a7ecc",
456
+ "#25aac2",
457
+ "#80a856",
458
+ "#c49a5a",
459
+ "#db4b4b"
460
+ ],
461
+ "vesper": [
462
+ "#A0A0A0",
463
+ "#A0A0A0",
464
+ "#A0A0A0",
465
+ "#A0A0A0",
466
+ "#A0A0A0",
467
+ "#A0A0A0",
468
+ "#FF8080"
469
+ ],
470
+ "vitesse-black": [
471
+ "#5eaab5",
472
+ "#4d9375",
473
+ "#d4976c",
474
+ "#d9739f",
475
+ "#e6cc77",
476
+ "#6394bf",
477
+ "rgba(255, 18, 18, 0.8)"
478
+ ],
479
+ "vitesse-dark": [
480
+ "#5eaab5",
481
+ "#4d9375",
482
+ "#d4976c",
483
+ "#d9739f",
484
+ "#e6cc77",
485
+ "#6394bf",
486
+ "rgba(255, 18, 18, 0.8)"
487
+ ],
488
+ "vitesse-light": [
489
+ "#2993a3",
490
+ "#1e754f",
491
+ "#a65e2b",
492
+ "#a13865",
493
+ "#bda437",
494
+ "#296aa3",
495
+ "rgba(255, 18, 18, 0.8)"
496
+ ]
496
497
  };
497
498
 
499
+ //#endregion
500
+ //#region src/utils.ts
498
501
  function getEmbeddedLang(token) {
499
- return token.explanation?.[0].scopes.findLast((scope) => scope.scopeName.match(/^source.\w+$/))?.scopeName.split(".")[1];
502
+ return token.explanation?.[0].scopes.findLast((scope) => scope.scopeName.match(/^source.\w+$/))?.scopeName.split(".")[1];
500
503
  }
501
504
  function resolveConfig(config, lang) {
502
- return {
503
- themes: config.langs[lang]?.themes ?? config.themes,
504
- bracketPairs: config.langs[lang]?.bracketPairs ?? config.bracketPairs
505
- };
505
+ return {
506
+ themes: config.langs[lang]?.themes ?? config.themes,
507
+ bracketPairs: config.langs[lang]?.bracketPairs ?? config.bracketPairs
508
+ };
506
509
  }
507
510
  function escapeRegExp(string) {
508
- return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
511
+ return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
509
512
  }
510
513
  function shouldIgnoreToken(token, scopesAllowList, scopesDenyList) {
511
- if (!token.explanation)
512
- return true;
513
- const commentLastIndex = token.explanation?.[0].scopes.findLastIndex(
514
- (scope) => scope.scopeName.startsWith("comment.")
515
- ) ?? -1;
516
- const stringLastIndex = token.explanation?.[0].scopes.findLastIndex(
517
- (scope) => scope.scopeName.startsWith("string.")
518
- ) ?? -1;
519
- const embeddedLastIndex = token.explanation?.[0].scopes.findLastIndex(
520
- (scope) => scope.scopeName.startsWith("meta.embedded.") || scope.scopeName.startsWith("scope.embedded.") || scope.scopeName === "entity.name.type.instance.jsdoc" || scope.scopeName === "variable.other.jsdoc" || scope.scopeName === "meta.object.liquid"
521
- ) ?? -1;
522
- if (commentLastIndex > embeddedLastIndex || stringLastIndex > embeddedLastIndex) {
523
- return true;
524
- }
525
- if (scopesAllowList && scopesAllowList.length && !token.explanation?.some(
526
- (explanation) => explanation.scopes.some(
527
- (scope) => scopesAllowList.some(
528
- (allowed) => scope.scopeName === allowed || scope.scopeName.startsWith(`${allowed}.`)
529
- )
530
- )
531
- )) {
532
- return true;
533
- }
534
- if (scopesDenyList && scopesDenyList.length && token.explanation?.some(
535
- (explanation) => explanation.scopes.some(
536
- (scope) => scopesDenyList.some(
537
- (denied) => scope.scopeName === denied || scope.scopeName.startsWith(`${denied}.`)
538
- )
539
- )
540
- )) {
541
- return true;
542
- }
543
- return false;
514
+ if (!token.explanation) return true;
515
+ const commentLastIndex = token.explanation?.[0].scopes.findLastIndex((scope) => scope.scopeName.startsWith("comment.")) ?? -1;
516
+ const stringLastIndex = token.explanation?.[0].scopes.findLastIndex((scope) => scope.scopeName.startsWith("string.")) ?? -1;
517
+ const embeddedLastIndex = token.explanation?.[0].scopes.findLastIndex((scope) => scope.scopeName.startsWith("meta.embedded.") || scope.scopeName.startsWith("scope.embedded.") || scope.scopeName === "entity.name.type.instance.jsdoc" || scope.scopeName === "variable.other.jsdoc" || scope.scopeName === "meta.object.liquid") ?? -1;
518
+ if (commentLastIndex > embeddedLastIndex || stringLastIndex > embeddedLastIndex) return true;
519
+ if (scopesAllowList && scopesAllowList.length && !token.explanation?.some((explanation) => explanation.scopes.some((scope) => scopesAllowList.some((allowed) => scope.scopeName === allowed || scope.scopeName.startsWith(`${allowed}.`))))) return true;
520
+ if (scopesDenyList && scopesDenyList.length && token.explanation?.some((explanation) => explanation.scopes.some((scope) => scopesDenyList.some((denied) => scope.scopeName === denied || scope.scopeName.startsWith(`${denied}.`))))) return true;
521
+ return false;
544
522
  }
545
523
 
524
+ //#endregion
525
+ //#region src/colorizeBracketTokens.ts
546
526
  function colorizeBracketTokens(tokens, config, shikiOptions, lang) {
547
- const openerStack = [];
548
- for (const token of tokens) {
549
- const embeddedLang = getEmbeddedLang(token);
550
- const resolvedConfig = resolveConfig(config, embeddedLang ?? lang);
551
- const openers = new Set(
552
- resolvedConfig.bracketPairs.map((pair) => pair.opener)
553
- );
554
- const closers = new Set(
555
- resolvedConfig.bracketPairs.map((pair) => pair.closer)
556
- );
557
- const closerToOpener = Object.fromEntries(
558
- resolvedConfig.bracketPairs.map((pair) => [pair.closer, pair.opener])
559
- );
560
- const pairDefinition = resolvedConfig.bracketPairs.find(
561
- (pair) => pair.opener === token.content.trim() || pair.closer === token.content.trim()
562
- );
563
- if (!pairDefinition || shouldIgnoreToken(
564
- token,
565
- pairDefinition.scopesAllowList,
566
- pairDefinition.scopesDenyList
567
- )) {
568
- continue;
569
- }
570
- if (openers.has(token.content.trim())) {
571
- openerStack.push(token);
572
- } else if (closers.has(token.content.trim())) {
573
- const opener = openerStack.slice().reverse().find((t) => t.content.trim() === closerToOpener[token.content.trim()]);
574
- if (opener) {
575
- while (openerStack.at(-1) !== opener) {
576
- const unexpected = openerStack.pop();
577
- if (unexpected) {
578
- assignColorToToken(
579
- unexpected,
580
- resolvedConfig.themes,
581
- shikiOptions,
582
- -1
583
- );
584
- }
585
- }
586
- openerStack.pop();
587
- assignColorToToken(
588
- token,
589
- resolvedConfig.themes,
590
- shikiOptions,
591
- openerStack.length
592
- );
593
- assignColorToToken(
594
- opener,
595
- resolvedConfig.themes,
596
- shikiOptions,
597
- openerStack.length
598
- );
599
- } else {
600
- assignColorToToken(token, resolvedConfig.themes, shikiOptions, -1);
601
- }
602
- }
603
- }
604
- for (const token of openerStack) {
605
- assignColorToToken(
606
- token,
607
- resolveConfig(config, lang).themes,
608
- shikiOptions,
609
- -1
610
- );
611
- }
527
+ const openerStack = [];
528
+ for (const token of tokens) {
529
+ const resolvedConfig = resolveConfig(config, getEmbeddedLang(token) ?? lang);
530
+ const openers = new Set(resolvedConfig.bracketPairs.map((pair) => pair.opener));
531
+ const closers = new Set(resolvedConfig.bracketPairs.map((pair) => pair.closer));
532
+ const closerToOpener = Object.fromEntries(resolvedConfig.bracketPairs.map((pair) => [pair.closer, pair.opener]));
533
+ const pairDefinition = resolvedConfig.bracketPairs.find((pair) => pair.opener === token.content.trim() || pair.closer === token.content.trim());
534
+ if (!pairDefinition || shouldIgnoreToken(token, pairDefinition.scopesAllowList, pairDefinition.scopesDenyList)) continue;
535
+ if (openers.has(token.content.trim())) openerStack.push(token);
536
+ else if (closers.has(token.content.trim())) {
537
+ const opener = openerStack.slice().reverse().find((t) => t.content.trim() === closerToOpener[token.content.trim()]);
538
+ if (opener) {
539
+ while (openerStack.at(-1) !== opener) {
540
+ const unexpected = openerStack.pop();
541
+ if (unexpected) assignColorToToken(unexpected, resolvedConfig.themes, shikiOptions, -1);
542
+ }
543
+ openerStack.pop();
544
+ assignColorToToken(token, resolvedConfig.themes, shikiOptions, openerStack.length);
545
+ assignColorToToken(opener, resolvedConfig.themes, shikiOptions, openerStack.length);
546
+ } else assignColorToToken(token, resolvedConfig.themes, shikiOptions, -1);
547
+ }
548
+ }
549
+ for (const token of openerStack) assignColorToToken(token, resolveConfig(config, lang).themes, shikiOptions, -1);
612
550
  }
613
551
  function assignColorToToken(token, themes, shikiOptions, level) {
614
- if (isSingleTheme(shikiOptions)) {
615
- const themeName = typeof shikiOptions.theme === "string" ? shikiOptions.theme : shikiOptions.theme.name;
616
- token.color = getColor(themes, themeName, level);
617
- } else {
618
- const { defaultColor = "light", cssVariablePrefix = "--shiki-" } = shikiOptions;
619
- const styles = typeof token.htmlStyle === "string" ? {} : structuredClone(token.htmlStyle ?? {});
620
- for (const [colorName, theme] of Object.entries(shikiOptions.themes)) {
621
- const themeName = typeof theme === "string" ? theme : theme?.name;
622
- const cssProperty = colorName === defaultColor ? "color" : `${cssVariablePrefix}${colorName}`;
623
- styles[cssProperty] = getColor(themes, themeName, level);
624
- }
625
- if (defaultColor === "light-dark()") {
626
- const lightColor = styles[`${cssVariablePrefix}light`];
627
- const darkColor = styles[`${cssVariablePrefix}dark`];
628
- if (!lightColor || !darkColor) {
629
- throw new ShikiError('When using `defaultColor: "light-dark()"`, you must provide both `light` and `dark` themes');
630
- }
631
- styles.color = `light-dark(${lightColor},${darkColor})`;
632
- }
633
- token.htmlStyle = styles;
634
- }
552
+ if (isSingleTheme(shikiOptions)) token.color = getColor(themes, typeof shikiOptions.theme === "string" ? shikiOptions.theme : shikiOptions.theme.name, level);
553
+ else {
554
+ const { defaultColor = "light", cssVariablePrefix = "--shiki-" } = shikiOptions;
555
+ const styles = typeof token.htmlStyle === "string" ? {} : structuredClone(token.htmlStyle ?? {});
556
+ for (const [colorName, theme] of Object.entries(shikiOptions.themes)) {
557
+ const themeName = typeof theme === "string" ? theme : theme?.name;
558
+ const cssProperty = colorName === defaultColor ? "color" : `${cssVariablePrefix}${colorName}`;
559
+ styles[cssProperty] = getColor(themes, themeName, level);
560
+ }
561
+ if (defaultColor === "light-dark()") {
562
+ const lightColor = styles[`${cssVariablePrefix}light`];
563
+ const darkColor = styles[`${cssVariablePrefix}dark`];
564
+ if (!lightColor || !darkColor) throw new ShikiError("When using `defaultColor: \"light-dark()\"`, you must provide both `light` and `dark` themes");
565
+ styles.color = `light-dark(${lightColor},${darkColor})`;
566
+ }
567
+ token.htmlStyle = styles;
568
+ }
635
569
  }
636
570
  function isSingleTheme(shikiOptions) {
637
- return "theme" in shikiOptions;
571
+ return "theme" in shikiOptions;
638
572
  }
639
573
  const DEFAULT_BRACKETS_COLORS = [
640
- "#FFD700",
641
- "#DA70D6",
642
- "#179FFF",
643
- "rgba(255, 18, 18, 0.8)"
574
+ "#FFD700",
575
+ "#DA70D6",
576
+ "#179FFF",
577
+ "rgba(255, 18, 18, 0.8)"
644
578
  ];
645
579
  function getColor(themes, themeName, level) {
646
- const colors = themeName == null ? DEFAULT_BRACKETS_COLORS : getThemeColors(themeName, themes) ?? getThemeColors(themeName, builtInThemes) ?? DEFAULT_BRACKETS_COLORS;
647
- const isUnexpected = level === -1;
648
- if (isUnexpected) {
649
- return colors[colors.length - 1];
650
- } else {
651
- return colors[level % (colors.length - 1)];
652
- }
580
+ const colors = themeName == null ? DEFAULT_BRACKETS_COLORS : getThemeColors(themeName, themes) ?? getThemeColors(themeName, themes_default) ?? DEFAULT_BRACKETS_COLORS;
581
+ if (level === -1) return colors[colors.length - 1];
582
+ else return colors[level % (colors.length - 1)];
653
583
  }
654
584
  function getThemeColors(themeName, themes) {
655
- if (themes[themeName])
656
- return themes[themeName];
657
- const startsWithName = Object.keys(themes).sort().reverse().find((key) => themeName.startsWith(key));
658
- if (startsWithName)
659
- return themes[startsWithName];
660
- return null;
585
+ if (themes[themeName]) return themes[themeName];
586
+ const startsWithName = Object.keys(themes).sort().reverse().find((key) => themeName.startsWith(key));
587
+ if (startsWithName) return themes[startsWithName];
588
+ return null;
661
589
  }
662
590
 
591
+ //#endregion
592
+ //#region src/splitBracketTokens.ts
663
593
  function splitBracketTokens(rawToken, config, lang) {
664
- const embeddedLang = getEmbeddedLang(rawToken);
665
- const resolvedConfig = resolveConfig(config, embeddedLang ?? lang);
666
- if (resolvedConfig.bracketPairs.length === 0 || shouldIgnoreToken(rawToken)) {
667
- return [rawToken];
668
- }
669
- const bracketsRegExp = new RegExp(
670
- resolvedConfig.bracketPairs.flatMap((pair) => [pair.opener, pair.closer]).sort((a, b) => b.length - a.length).map(escapeRegExp).join("|")
671
- );
672
- const tokens = [rawToken];
673
- while (true) {
674
- const token = tokens.pop();
675
- if (!token)
676
- break;
677
- const match = token?.content.match(bracketsRegExp);
678
- if (!match) {
679
- tokens.push(token);
680
- break;
681
- }
682
- const matchIndex = match.index ?? 0;
683
- if (matchIndex > 0) {
684
- tokens.push({
685
- ...token,
686
- content: token.content.substring(0, matchIndex)
687
- });
688
- }
689
- tokens.push({
690
- ...token,
691
- content: match[0],
692
- offset: token.offset + matchIndex
693
- });
694
- if (matchIndex + match[0].length < token.content.length) {
695
- tokens.push({
696
- ...token,
697
- content: token.content.substring(matchIndex + match[0].length),
698
- offset: token.offset + matchIndex + match[0].length
699
- });
700
- } else {
701
- break;
702
- }
703
- }
704
- const explanations = rawToken.explanation ?? [];
705
- let currentExplanationStart = 0;
706
- const explanationsWithStartEnd = (explanations ?? []).map(
707
- (explanation, i) => {
708
- const start = currentExplanationStart;
709
- let length = explanation.content.length;
710
- if (explanations.length === 1) {
711
- length = rawToken.content.length;
712
- } else if (i === 0) {
713
- length = (rawToken.content.match(/^\s*/)?.[0].length ?? 0) + explanation.content.trimStart().length;
714
- } else if (i === explanations.length - 1) {
715
- length = explanation.content.trimEnd().length + (rawToken.content.match(/\s*$/)?.[0].length ?? 0);
716
- }
717
- currentExplanationStart += length;
718
- return {
719
- ...explanation,
720
- start,
721
- end: start + length - 1
722
- };
723
- }
724
- );
725
- for (const token of tokens) {
726
- const tokenStart = token.offset - rawToken.offset;
727
- const tokenEnd = tokenStart + token.content.length - 1;
728
- const overlappingExplanations = explanationsWithStartEnd.filter(
729
- (explanation) => (
730
- // token start in explanation range
731
- tokenStart >= explanation.start && tokenStart <= explanation.end || tokenEnd >= explanation.start && tokenEnd <= explanation.end || explanation.start >= tokenStart && explanation.start <= tokenEnd || explanation.end >= tokenStart && explanation.end <= tokenEnd
732
- )
733
- );
734
- token.explanation = overlappingExplanations.map(
735
- (exp, i) => explanations[i]
736
- );
737
- }
738
- return tokens;
594
+ const resolvedConfig = resolveConfig(config, getEmbeddedLang(rawToken) ?? lang);
595
+ if (resolvedConfig.bracketPairs.length === 0 || shouldIgnoreToken(rawToken)) return [rawToken];
596
+ const bracketsRegExp = new RegExp(resolvedConfig.bracketPairs.flatMap((pair) => [pair.opener, pair.closer]).sort((a, b) => b.length - a.length).map(escapeRegExp).join("|"));
597
+ const tokens = [rawToken];
598
+ while (true) {
599
+ const token = tokens.pop();
600
+ if (!token) break;
601
+ const match = token?.content.match(bracketsRegExp);
602
+ if (!match) {
603
+ tokens.push(token);
604
+ break;
605
+ }
606
+ const matchIndex = match.index ?? 0;
607
+ if (matchIndex > 0) tokens.push({
608
+ ...token,
609
+ content: token.content.substring(0, matchIndex)
610
+ });
611
+ tokens.push({
612
+ ...token,
613
+ content: match[0],
614
+ offset: token.offset + matchIndex
615
+ });
616
+ if (matchIndex + match[0].length < token.content.length) tokens.push({
617
+ ...token,
618
+ content: token.content.substring(matchIndex + match[0].length),
619
+ offset: token.offset + matchIndex + match[0].length
620
+ });
621
+ else break;
622
+ }
623
+ const explanations = rawToken.explanation ?? [];
624
+ let currentExplanationStart = 0;
625
+ const explanationsWithStartEnd = (explanations ?? []).map((explanation, i) => {
626
+ const start = currentExplanationStart;
627
+ let length = explanation.content.length;
628
+ if (explanations.length === 1) length = rawToken.content.length;
629
+ else if (i === 0) length = (rawToken.content.match(/^\s*/)?.[0].length ?? 0) + explanation.content.trimStart().length;
630
+ else if (i === explanations.length - 1) length = explanation.content.trimEnd().length + (rawToken.content.match(/\s*$/)?.[0].length ?? 0);
631
+ currentExplanationStart += length;
632
+ return {
633
+ ...explanation,
634
+ start,
635
+ end: start + length - 1
636
+ };
637
+ });
638
+ for (const token of tokens) {
639
+ const tokenStart = token.offset - rawToken.offset;
640
+ const tokenEnd = tokenStart + token.content.length - 1;
641
+ token.explanation = explanationsWithStartEnd.filter((explanation) => tokenStart >= explanation.start && tokenStart <= explanation.end || tokenEnd >= explanation.start && tokenEnd <= explanation.end || explanation.start >= tokenStart && explanation.start <= tokenEnd || explanation.end >= tokenStart && explanation.end <= tokenEnd).map((exp, i) => explanations[i]);
642
+ }
643
+ return tokens;
739
644
  }
740
645
 
646
+ //#endregion
647
+ //#region src/index.ts
741
648
  const jinjaLikeBracketPairs = [
742
- { opener: "[", closer: "]" },
743
- { opener: "{", closer: "}" },
744
- { opener: "(", closer: ")" },
745
- { opener: "{{", closer: "}}" },
746
- { opener: "{%", closer: "%}" }
649
+ {
650
+ opener: "[",
651
+ closer: "]"
652
+ },
653
+ {
654
+ opener: "{",
655
+ closer: "}"
656
+ },
657
+ {
658
+ opener: "(",
659
+ closer: ")"
660
+ },
661
+ {
662
+ opener: "{{",
663
+ closer: "}}"
664
+ },
665
+ {
666
+ opener: "{%",
667
+ closer: "%}"
668
+ }
747
669
  ];
670
+ /**
671
+ * Creates a new bracket colorizer transformer
672
+ *
673
+ * @example basic usage
674
+ * ```ts
675
+ * const html = await shiki.codeToHtml(code, {
676
+ * lang: 'ts',
677
+ * theme: 'dark-plus',
678
+ * transformers: [transformerColorizedBrackets()],
679
+ * });
680
+ * ```
681
+ *
682
+ * @param options
683
+ * @param options.themes - custom themes; all Shiki built-in themes are supported without additional configuration
684
+ * @param options.bracketPairs - bracket definitions; by default [], {}, (), and <> (TS-only)
685
+ * @param options.langs - language-specific overrides for themes and bracketPairs
686
+ * @returns Shiki transformer
687
+ */
748
688
  function transformerColorizedBrackets(options = {}) {
749
- const config = {
750
- themes: options.themes ?? {},
751
- bracketPairs: options.bracketPairs ?? [
752
- { opener: "[", closer: "]" },
753
- { opener: "{", closer: "}" },
754
- { opener: "(", closer: ")" },
755
- {
756
- opener: "<",
757
- closer: ">",
758
- scopesAllowList: [
759
- "punctuation.definition.typeparameters.begin.ts",
760
- "punctuation.definition.typeparameters.end.ts",
761
- "entity.name.type.instance.jsdoc"
762
- ]
763
- }
764
- ],
765
- langs: {
766
- html: { bracketPairs: [] },
767
- jinja: { bracketPairs: jinjaLikeBracketPairs },
768
- liquid: { bracketPairs: jinjaLikeBracketPairs },
769
- ...options.langs
770
- },
771
- explicitTrigger: options.explicitTrigger ?? false
772
- };
773
- const transformer = {
774
- name: "colorizedBrackets",
775
- preprocess(code, options2) {
776
- if (!isEnabled(config, this.options.meta?.__raw)) {
777
- return;
778
- }
779
- options2.includeExplanation ||= "scopeName";
780
- },
781
- tokens: function transformTokens(tokens) {
782
- if (!isEnabled(config, this.options.meta?.__raw)) {
783
- return;
784
- }
785
- const lang = this.options.lang;
786
- for (let lineIndex = 0; lineIndex < tokens.length; lineIndex++) {
787
- const line = tokens[lineIndex];
788
- const newLine = line.flatMap(
789
- (token) => splitBracketTokens(token, config, lang)
790
- );
791
- tokens[lineIndex] = newLine;
792
- }
793
- colorizeBracketTokens(tokens.flat(), config, this.options, lang);
794
- }
795
- };
796
- return transformer;
689
+ const config = {
690
+ themes: options.themes ?? {},
691
+ bracketPairs: options.bracketPairs ?? [
692
+ {
693
+ opener: "[",
694
+ closer: "]"
695
+ },
696
+ {
697
+ opener: "{",
698
+ closer: "}"
699
+ },
700
+ {
701
+ opener: "(",
702
+ closer: ")"
703
+ },
704
+ {
705
+ opener: "<",
706
+ closer: ">",
707
+ scopesAllowList: [
708
+ "punctuation.definition.typeparameters.begin.ts",
709
+ "punctuation.definition.typeparameters.end.ts",
710
+ "entity.name.type.instance.jsdoc"
711
+ ]
712
+ }
713
+ ],
714
+ langs: {
715
+ html: { bracketPairs: [] },
716
+ jinja: { bracketPairs: jinjaLikeBracketPairs },
717
+ liquid: { bracketPairs: jinjaLikeBracketPairs },
718
+ ...options.langs
719
+ },
720
+ explicitTrigger: options.explicitTrigger ?? false
721
+ };
722
+ return {
723
+ name: "colorizedBrackets",
724
+ preprocess(code, options) {
725
+ if (!isEnabled(config, this.options.meta?.__raw)) return;
726
+ options.includeExplanation ||= "scopeName";
727
+ },
728
+ tokens: function transformTokens(tokens) {
729
+ if (!isEnabled(config, this.options.meta?.__raw)) return;
730
+ const lang = this.options.lang;
731
+ for (let lineIndex = 0; lineIndex < tokens.length; lineIndex++) tokens[lineIndex] = tokens[lineIndex].flatMap((token) => splitBracketTokens(token, config, lang));
732
+ colorizeBracketTokens(tokens.flat(), config, this.options, lang);
733
+ }
734
+ };
797
735
  }
798
736
  const EXPLICIT_TRIGGER_REGEX = /(^|\s)colorize-brackets($|\s)/;
799
737
  function isEnabled(config, meta) {
800
- return !config.explicitTrigger || meta?.match(EXPLICIT_TRIGGER_REGEX) != null;
738
+ return !config.explicitTrigger || meta?.match(EXPLICIT_TRIGGER_REGEX) != null;
801
739
  }
802
740
 
803
- export { transformerColorizedBrackets };
741
+ //#endregion
742
+ export { transformerColorizedBrackets };