@aeriz/wysiwyg 1.0.5 → 2.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.
Files changed (129) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +82 -573
  3. package/angular/README.md +10 -4
  4. package/angular/aeriz-editor.directive.ts +40 -18
  5. package/dist/adapters/jquery.cjs +1 -1
  6. package/dist/adapters/jquery.js +14 -14
  7. package/dist/adapters/shared.cjs +1 -1
  8. package/dist/adapters/shared.js +59 -56
  9. package/dist/adapters/vue.cjs +1 -1
  10. package/dist/adapters/vue.js +64 -56
  11. package/dist/adapters/vue2.cjs +1 -1
  12. package/dist/adapters/vue2.js +24 -17
  13. package/dist/adapters/wc.cjs +1 -1
  14. package/dist/adapters/wc.js +108 -72
  15. package/dist/aeriz-wysiwyg-adapter.js +24 -32
  16. package/dist/aeriz-wysiwyg-adapter.min.js +1 -1
  17. package/dist/aeriz-wysiwyg-highlight.js +964 -0
  18. package/dist/aeriz-wysiwyg-highlight.min.js +5 -0
  19. package/dist/aeriz-wysiwyg-jquery.js +25 -32
  20. package/dist/aeriz-wysiwyg-jquery.min.js +1 -1
  21. package/dist/aeriz-wysiwyg-wc.js +80 -43
  22. package/dist/aeriz-wysiwyg-wc.min.js +1 -1
  23. package/dist/aeriz-wysiwyg.cjs +3525 -1744
  24. package/dist/aeriz-wysiwyg.css +2104 -1904
  25. package/dist/aeriz-wysiwyg.esm.js +3525 -1744
  26. package/dist/aeriz-wysiwyg.esm.min.js +4840 -3581
  27. package/dist/aeriz-wysiwyg.js +3525 -1744
  28. package/dist/aeriz-wysiwyg.min.cjs +51 -46
  29. package/dist/aeriz-wysiwyg.min.css +1 -1
  30. package/dist/aeriz-wysiwyg.min.js +51 -46
  31. package/dist/highlight.cjs +5 -0
  32. package/dist/highlight.js +895 -0
  33. package/dist/server.cjs +24 -19
  34. package/dist/server.js +612 -251
  35. package/dist-types/adapters/shared.d.ts +0 -8
  36. package/dist-types/adapters/shared.d.ts.map +1 -1
  37. package/dist-types/adapters/vue.d.ts +62 -21
  38. package/dist-types/adapters/vue.d.ts.map +1 -1
  39. package/dist-types/adapters/vue2.d.ts +33 -14
  40. package/dist-types/adapters/vue2.d.ts.map +1 -1
  41. package/dist-types/adapters/wc.d.ts +15 -6
  42. package/dist-types/adapters/wc.d.ts.map +1 -1
  43. package/dist-types/cjs/adapters/shared.d.cts +0 -8
  44. package/dist-types/cjs/adapters/vue.d.cts +62 -21
  45. package/dist-types/cjs/adapters/vue2.d.cts +33 -14
  46. package/dist-types/cjs/adapters/wc.d.cts +15 -6
  47. package/dist-types/cjs/core/AerizEditor.d.cts +204 -48
  48. package/dist-types/cjs/core/AerizViewer.d.cts +7 -0
  49. package/dist-types/cjs/core/block-meta.d.cts +40 -0
  50. package/dist-types/cjs/core/block-tracker.d.cts +64 -0
  51. package/dist-types/cjs/core/blocks.d.cts +39 -4
  52. package/dist-types/cjs/core/fonts.d.cts +33 -46
  53. package/dist-types/cjs/core/history.d.cts +28 -10
  54. package/dist-types/cjs/core/html-to-blocks.d.cts +10 -0
  55. package/dist-types/cjs/core/i18n.d.cts +44 -0
  56. package/dist-types/cjs/core/import-html.d.cts +0 -13
  57. package/dist-types/cjs/core/insert-fragment.d.cts +21 -0
  58. package/dist-types/cjs/core/paste-clean.d.cts +36 -0
  59. package/dist-types/cjs/core/sanitize-dom.d.cts +21 -0
  60. package/dist-types/cjs/core/sanitize-html.d.cts +8 -0
  61. package/dist-types/cjs/core/sanitize-policy.d.cts +22 -0
  62. package/dist-types/cjs/core/selection.d.cts +5 -0
  63. package/dist-types/cjs/core/table-grid.d.cts +87 -0
  64. package/dist-types/cjs/core/table-ops.d.cts +2 -22
  65. package/dist-types/cjs/highlight/index.d.cts +5 -0
  66. package/dist-types/cjs/index.d.cts +19 -11
  67. package/dist-types/cjs/server/index.d.cts +4 -5
  68. package/dist-types/cjs/types/index.d.cts +63 -15
  69. package/dist-types/cjs/ui/Toolbar.d.cts +10 -0
  70. package/dist-types/cjs/ui/doc-tools.d.cts +58 -0
  71. package/dist-types/cjs/ui/popovers.d.cts +14 -25
  72. package/dist-types/core/AerizEditor.d.ts +204 -48
  73. package/dist-types/core/AerizEditor.d.ts.map +1 -1
  74. package/dist-types/core/AerizViewer.d.ts +7 -0
  75. package/dist-types/core/AerizViewer.d.ts.map +1 -1
  76. package/dist-types/core/block-meta.d.ts +40 -0
  77. package/dist-types/core/block-meta.d.ts.map +1 -1
  78. package/dist-types/core/block-policy.d.ts.map +1 -1
  79. package/dist-types/core/block-tracker.d.ts +64 -0
  80. package/dist-types/core/block-tracker.d.ts.map +1 -0
  81. package/dist-types/core/blocks.d.ts +39 -4
  82. package/dist-types/core/blocks.d.ts.map +1 -1
  83. package/dist-types/core/fonts.d.ts +33 -46
  84. package/dist-types/core/fonts.d.ts.map +1 -1
  85. package/dist-types/core/history.d.ts +28 -10
  86. package/dist-types/core/history.d.ts.map +1 -1
  87. package/dist-types/core/html-mini.d.ts.map +1 -1
  88. package/dist-types/core/html-to-blocks.d.ts +10 -0
  89. package/dist-types/core/html-to-blocks.d.ts.map +1 -0
  90. package/dist-types/core/i18n.d.ts +44 -0
  91. package/dist-types/core/i18n.d.ts.map +1 -1
  92. package/dist-types/core/import-html.d.ts +0 -13
  93. package/dist-types/core/import-html.d.ts.map +1 -1
  94. package/dist-types/core/import-markdown.d.ts.map +1 -1
  95. package/dist-types/core/insert-fragment.d.ts +21 -0
  96. package/dist-types/core/insert-fragment.d.ts.map +1 -0
  97. package/dist-types/core/markdown-export.d.ts.map +1 -1
  98. package/dist-types/core/paste-clean.d.ts +36 -0
  99. package/dist-types/core/paste-clean.d.ts.map +1 -0
  100. package/dist-types/core/render-string.d.ts.map +1 -1
  101. package/dist-types/core/sanitize-dom.d.ts +21 -0
  102. package/dist-types/core/sanitize-dom.d.ts.map +1 -0
  103. package/dist-types/core/sanitize-html.d.ts +8 -0
  104. package/dist-types/core/sanitize-html.d.ts.map +1 -0
  105. package/dist-types/core/sanitize-policy.d.ts +22 -0
  106. package/dist-types/core/sanitize-policy.d.ts.map +1 -0
  107. package/dist-types/core/selection.d.ts +5 -0
  108. package/dist-types/core/selection.d.ts.map +1 -1
  109. package/dist-types/core/snapshot.d.ts.map +1 -1
  110. package/dist-types/core/table-grid.d.ts +87 -0
  111. package/dist-types/core/table-grid.d.ts.map +1 -0
  112. package/dist-types/core/table-ops.d.ts +2 -22
  113. package/dist-types/core/table-ops.d.ts.map +1 -1
  114. package/dist-types/highlight/index.d.ts +5 -0
  115. package/dist-types/highlight/index.d.ts.map +1 -0
  116. package/dist-types/index.d.ts +19 -11
  117. package/dist-types/index.d.ts.map +1 -1
  118. package/dist-types/server/index.d.ts +4 -5
  119. package/dist-types/server/index.d.ts.map +1 -1
  120. package/dist-types/types/index.d.ts +63 -15
  121. package/dist-types/types/index.d.ts.map +1 -1
  122. package/dist-types/ui/Toolbar.d.ts +10 -0
  123. package/dist-types/ui/Toolbar.d.ts.map +1 -1
  124. package/dist-types/ui/doc-tools.d.ts +58 -0
  125. package/dist-types/ui/doc-tools.d.ts.map +1 -0
  126. package/dist-types/ui/icons.d.ts.map +1 -1
  127. package/dist-types/ui/popovers.d.ts +14 -25
  128. package/dist-types/ui/popovers.d.ts.map +1 -1
  129. package/package.json +70 -5
@@ -0,0 +1,964 @@
1
+ var AerizWysiwygHighlight = function(exports) {
2
+ "use strict";
3
+ const C_FAMILY_BASE = {
4
+ lineComment: "//",
5
+ blockComment: { start: "/*", end: "*/" },
6
+ stringDelims: ['"', "'"]
7
+ };
8
+ const JS_KEYWORDS = /* @__PURE__ */ new Set([
9
+ "abstract",
10
+ "arguments",
11
+ "async",
12
+ "await",
13
+ "break",
14
+ "case",
15
+ "catch",
16
+ "class",
17
+ "const",
18
+ "continue",
19
+ "debugger",
20
+ "default",
21
+ "delete",
22
+ "do",
23
+ "else",
24
+ "enum",
25
+ "export",
26
+ "extends",
27
+ "finally",
28
+ "for",
29
+ "from",
30
+ "function",
31
+ "get",
32
+ "if",
33
+ "implements",
34
+ "import",
35
+ "in",
36
+ "instanceof",
37
+ "interface",
38
+ "let",
39
+ "new",
40
+ "null",
41
+ "of",
42
+ "package",
43
+ "private",
44
+ "protected",
45
+ "public",
46
+ "return",
47
+ "set",
48
+ "static",
49
+ "super",
50
+ "switch",
51
+ "this",
52
+ "throw",
53
+ "true",
54
+ "false",
55
+ "try",
56
+ "typeof",
57
+ "undefined",
58
+ "var",
59
+ "void",
60
+ "while",
61
+ "with",
62
+ "yield"
63
+ ]);
64
+ const TS_KEYWORDS = /* @__PURE__ */ new Set([
65
+ ...JS_KEYWORDS,
66
+ "any",
67
+ "as",
68
+ "asserts",
69
+ "boolean",
70
+ "declare",
71
+ "infer",
72
+ "is",
73
+ "keyof",
74
+ "module",
75
+ "namespace",
76
+ "never",
77
+ "number",
78
+ "object",
79
+ "override",
80
+ "readonly",
81
+ "require",
82
+ "satisfies",
83
+ "string",
84
+ "symbol",
85
+ "type",
86
+ "unique",
87
+ "unknown"
88
+ ]);
89
+ const PY_KEYWORDS = /* @__PURE__ */ new Set([
90
+ "False",
91
+ "None",
92
+ "True",
93
+ "and",
94
+ "as",
95
+ "assert",
96
+ "async",
97
+ "await",
98
+ "break",
99
+ "class",
100
+ "continue",
101
+ "def",
102
+ "del",
103
+ "elif",
104
+ "else",
105
+ "except",
106
+ "finally",
107
+ "for",
108
+ "from",
109
+ "global",
110
+ "if",
111
+ "import",
112
+ "in",
113
+ "is",
114
+ "lambda",
115
+ "nonlocal",
116
+ "not",
117
+ "or",
118
+ "pass",
119
+ "raise",
120
+ "return",
121
+ "try",
122
+ "while",
123
+ "with",
124
+ "yield"
125
+ ]);
126
+ const PY_BUILTINS = /* @__PURE__ */ new Set([
127
+ "abs",
128
+ "all",
129
+ "any",
130
+ "bool",
131
+ "dict",
132
+ "enumerate",
133
+ "filter",
134
+ "float",
135
+ "int",
136
+ "isinstance",
137
+ "len",
138
+ "list",
139
+ "map",
140
+ "max",
141
+ "min",
142
+ "open",
143
+ "print",
144
+ "range",
145
+ "set",
146
+ "sorted",
147
+ "str",
148
+ "sum",
149
+ "tuple",
150
+ "type",
151
+ "zip",
152
+ "self",
153
+ "cls"
154
+ ]);
155
+ const C_KEYWORDS = /* @__PURE__ */ new Set([
156
+ "auto",
157
+ "break",
158
+ "case",
159
+ "char",
160
+ "const",
161
+ "continue",
162
+ "default",
163
+ "do",
164
+ "double",
165
+ "else",
166
+ "enum",
167
+ "extern",
168
+ "float",
169
+ "for",
170
+ "goto",
171
+ "if",
172
+ "int",
173
+ "long",
174
+ "register",
175
+ "return",
176
+ "short",
177
+ "signed",
178
+ "sizeof",
179
+ "static",
180
+ "struct",
181
+ "switch",
182
+ "typedef",
183
+ "union",
184
+ "unsigned",
185
+ "void",
186
+ "volatile",
187
+ "while",
188
+ "inline",
189
+ "restrict",
190
+ "_Bool",
191
+ "NULL"
192
+ ]);
193
+ const CPP_KEYWORDS = /* @__PURE__ */ new Set([
194
+ ...C_KEYWORDS,
195
+ "class",
196
+ "new",
197
+ "delete",
198
+ "try",
199
+ "catch",
200
+ "throw",
201
+ "template",
202
+ "typename",
203
+ "namespace",
204
+ "using",
205
+ "public",
206
+ "private",
207
+ "protected",
208
+ "virtual",
209
+ "override",
210
+ "this",
211
+ "nullptr",
212
+ "true",
213
+ "false",
214
+ "bool",
215
+ "explicit",
216
+ "friend",
217
+ "mutable",
218
+ "operator",
219
+ "reinterpret_cast",
220
+ "static_cast",
221
+ "dynamic_cast",
222
+ "const_cast",
223
+ "constexpr",
224
+ "decltype",
225
+ "noexcept",
226
+ "final",
227
+ "auto"
228
+ ]);
229
+ const CSHARP_KEYWORDS = /* @__PURE__ */ new Set([
230
+ "abstract",
231
+ "async",
232
+ "await",
233
+ "base",
234
+ "bool",
235
+ "break",
236
+ "byte",
237
+ "case",
238
+ "catch",
239
+ "char",
240
+ "checked",
241
+ "class",
242
+ "const",
243
+ "continue",
244
+ "decimal",
245
+ "default",
246
+ "delegate",
247
+ "do",
248
+ "double",
249
+ "else",
250
+ "enum",
251
+ "event",
252
+ "explicit",
253
+ "extern",
254
+ "false",
255
+ "finally",
256
+ "fixed",
257
+ "float",
258
+ "for",
259
+ "foreach",
260
+ "goto",
261
+ "if",
262
+ "implicit",
263
+ "in",
264
+ "int",
265
+ "interface",
266
+ "internal",
267
+ "is",
268
+ "lock",
269
+ "long",
270
+ "namespace",
271
+ "new",
272
+ "null",
273
+ "object",
274
+ "operator",
275
+ "out",
276
+ "override",
277
+ "params",
278
+ "private",
279
+ "protected",
280
+ "public",
281
+ "readonly",
282
+ "ref",
283
+ "return",
284
+ "sbyte",
285
+ "sealed",
286
+ "short",
287
+ "sizeof",
288
+ "stackalloc",
289
+ "static",
290
+ "string",
291
+ "struct",
292
+ "switch",
293
+ "this",
294
+ "throw",
295
+ "true",
296
+ "try",
297
+ "typeof",
298
+ "uint",
299
+ "ulong",
300
+ "unchecked",
301
+ "unsafe",
302
+ "ushort",
303
+ "using",
304
+ "var",
305
+ "virtual",
306
+ "void",
307
+ "volatile",
308
+ "while",
309
+ "yield",
310
+ "record",
311
+ "init",
312
+ "nameof",
313
+ "when"
314
+ ]);
315
+ const JAVA_KEYWORDS = /* @__PURE__ */ new Set([
316
+ "abstract",
317
+ "assert",
318
+ "boolean",
319
+ "break",
320
+ "byte",
321
+ "case",
322
+ "catch",
323
+ "char",
324
+ "class",
325
+ "const",
326
+ "continue",
327
+ "default",
328
+ "do",
329
+ "double",
330
+ "else",
331
+ "enum",
332
+ "extends",
333
+ "final",
334
+ "finally",
335
+ "float",
336
+ "for",
337
+ "goto",
338
+ "if",
339
+ "implements",
340
+ "import",
341
+ "instanceof",
342
+ "int",
343
+ "interface",
344
+ "long",
345
+ "native",
346
+ "new",
347
+ "null",
348
+ "package",
349
+ "private",
350
+ "protected",
351
+ "public",
352
+ "return",
353
+ "short",
354
+ "static",
355
+ "strictfp",
356
+ "super",
357
+ "switch",
358
+ "synchronized",
359
+ "this",
360
+ "throw",
361
+ "throws",
362
+ "transient",
363
+ "true",
364
+ "false",
365
+ "try",
366
+ "void",
367
+ "volatile",
368
+ "while",
369
+ "var",
370
+ "yield",
371
+ "record",
372
+ "sealed",
373
+ "permits",
374
+ "non-sealed"
375
+ ]);
376
+ const KOTLIN_KEYWORDS = /* @__PURE__ */ new Set([
377
+ "abstract",
378
+ "actual",
379
+ "annotation",
380
+ "as",
381
+ "break",
382
+ "by",
383
+ "catch",
384
+ "class",
385
+ "companion",
386
+ "const",
387
+ "constructor",
388
+ "continue",
389
+ "crossinline",
390
+ "data",
391
+ "do",
392
+ "dynamic",
393
+ "else",
394
+ "enum",
395
+ "expect",
396
+ "external",
397
+ "false",
398
+ "final",
399
+ "finally",
400
+ "for",
401
+ "fun",
402
+ "get",
403
+ "if",
404
+ "import",
405
+ "in",
406
+ "init",
407
+ "inline",
408
+ "inner",
409
+ "interface",
410
+ "internal",
411
+ "is",
412
+ "it",
413
+ "lateinit",
414
+ "null",
415
+ "object",
416
+ "open",
417
+ "operator",
418
+ "out",
419
+ "override",
420
+ "package",
421
+ "private",
422
+ "protected",
423
+ "public",
424
+ "reified",
425
+ "return",
426
+ "sealed",
427
+ "set",
428
+ "super",
429
+ "suspend",
430
+ "tailrec",
431
+ "this",
432
+ "throw",
433
+ "true",
434
+ "try",
435
+ "typealias",
436
+ "typeof",
437
+ "val",
438
+ "var",
439
+ "vararg",
440
+ "when",
441
+ "where",
442
+ "while"
443
+ ]);
444
+ const GO_KEYWORDS = /* @__PURE__ */ new Set([
445
+ "break",
446
+ "case",
447
+ "chan",
448
+ "const",
449
+ "continue",
450
+ "default",
451
+ "defer",
452
+ "else",
453
+ "fallthrough",
454
+ "for",
455
+ "func",
456
+ "go",
457
+ "goto",
458
+ "if",
459
+ "import",
460
+ "interface",
461
+ "map",
462
+ "package",
463
+ "range",
464
+ "return",
465
+ "select",
466
+ "struct",
467
+ "switch",
468
+ "type",
469
+ "var",
470
+ "true",
471
+ "false",
472
+ "nil",
473
+ "iota"
474
+ ]);
475
+ const RUST_KEYWORDS = /* @__PURE__ */ new Set([
476
+ "as",
477
+ "async",
478
+ "await",
479
+ "break",
480
+ "const",
481
+ "continue",
482
+ "crate",
483
+ "dyn",
484
+ "else",
485
+ "enum",
486
+ "extern",
487
+ "false",
488
+ "fn",
489
+ "for",
490
+ "if",
491
+ "impl",
492
+ "in",
493
+ "let",
494
+ "loop",
495
+ "match",
496
+ "mod",
497
+ "move",
498
+ "mut",
499
+ "pub",
500
+ "ref",
501
+ "return",
502
+ "self",
503
+ "Self",
504
+ "static",
505
+ "struct",
506
+ "super",
507
+ "trait",
508
+ "true",
509
+ "type",
510
+ "unsafe",
511
+ "use",
512
+ "where",
513
+ "while",
514
+ "box",
515
+ "do",
516
+ "final",
517
+ "macro",
518
+ "override",
519
+ "priv",
520
+ "typeof",
521
+ "unsized",
522
+ "virtual",
523
+ "yield"
524
+ ]);
525
+ const BASH_KEYWORDS = /* @__PURE__ */ new Set([
526
+ "if",
527
+ "then",
528
+ "else",
529
+ "elif",
530
+ "fi",
531
+ "case",
532
+ "esac",
533
+ "for",
534
+ "while",
535
+ "until",
536
+ "do",
537
+ "done",
538
+ "function",
539
+ "return",
540
+ "select",
541
+ "break",
542
+ "continue",
543
+ "in",
544
+ "echo",
545
+ "export",
546
+ "local",
547
+ "readonly",
548
+ "declare",
549
+ "typeset",
550
+ "unset",
551
+ "eval",
552
+ "exec",
553
+ "source",
554
+ "true",
555
+ "false"
556
+ ]);
557
+ const SQL_KEYWORDS = /* @__PURE__ */ new Set([
558
+ "select",
559
+ "from",
560
+ "where",
561
+ "insert",
562
+ "update",
563
+ "delete",
564
+ "into",
565
+ "values",
566
+ "set",
567
+ "create",
568
+ "table",
569
+ "drop",
570
+ "alter",
571
+ "index",
572
+ "view",
573
+ "join",
574
+ "inner",
575
+ "left",
576
+ "right",
577
+ "outer",
578
+ "full",
579
+ "cross",
580
+ "on",
581
+ "group",
582
+ "by",
583
+ "order",
584
+ "having",
585
+ "limit",
586
+ "offset",
587
+ "union",
588
+ "all",
589
+ "distinct",
590
+ "as",
591
+ "and",
592
+ "or",
593
+ "not",
594
+ "null",
595
+ "true",
596
+ "false",
597
+ "is",
598
+ "in",
599
+ "between",
600
+ "like",
601
+ "exists",
602
+ "primary",
603
+ "key",
604
+ "foreign",
605
+ "references",
606
+ "unique",
607
+ "default",
608
+ "check",
609
+ "constraint",
610
+ "database",
611
+ "schema",
612
+ "with",
613
+ "case",
614
+ "when",
615
+ "then",
616
+ "else",
617
+ "end",
618
+ "cast",
619
+ "count",
620
+ "sum",
621
+ "avg",
622
+ "min",
623
+ "max",
624
+ "asc",
625
+ "desc"
626
+ ]);
627
+ const JSON_KEYWORDS = /* @__PURE__ */ new Set(["true", "false", "null"]);
628
+ const LANGUAGES = [
629
+ {
630
+ id: "plaintext",
631
+ label: "Plain Text",
632
+ keywords: /* @__PURE__ */ new Set()
633
+ },
634
+ {
635
+ id: "javascript",
636
+ label: "JavaScript",
637
+ keywords: JS_KEYWORDS,
638
+ ...C_FAMILY_BASE,
639
+ stringDelims: ['"', "'", "`"]
640
+ },
641
+ {
642
+ id: "typescript",
643
+ label: "TypeScript",
644
+ keywords: TS_KEYWORDS,
645
+ ...C_FAMILY_BASE,
646
+ stringDelims: ['"', "'", "`"]
647
+ },
648
+ {
649
+ id: "python",
650
+ label: "Python",
651
+ keywords: PY_KEYWORDS,
652
+ builtins: PY_BUILTINS,
653
+ lineComment: "#",
654
+ stringDelims: ['"', "'"]
655
+ },
656
+ {
657
+ id: "json",
658
+ label: "JSON",
659
+ keywords: JSON_KEYWORDS,
660
+ stringDelims: ['"']
661
+ },
662
+ {
663
+ id: "html",
664
+ label: "HTML",
665
+ keywords: /* @__PURE__ */ new Set(),
666
+ custom: (code) => highlightHtml(code)
667
+ },
668
+ {
669
+ id: "css",
670
+ label: "CSS",
671
+ keywords: /* @__PURE__ */ new Set(),
672
+ custom: (code) => highlightCss(code)
673
+ },
674
+ {
675
+ id: "bash",
676
+ label: "Bash",
677
+ keywords: BASH_KEYWORDS,
678
+ lineComment: "#",
679
+ stringDelims: ['"', "'"]
680
+ },
681
+ {
682
+ id: "sql",
683
+ label: "SQL",
684
+ keywords: SQL_KEYWORDS,
685
+ caseInsensitiveKeywords: true,
686
+ lineComment: "--",
687
+ blockComment: { start: "/*", end: "*/" },
688
+ stringDelims: ['"', "'"]
689
+ },
690
+ {
691
+ id: "markdown",
692
+ label: "Markdown",
693
+ keywords: /* @__PURE__ */ new Set(),
694
+ custom: (code) => highlightMarkdown(code)
695
+ },
696
+ { id: "c", label: "C", keywords: C_KEYWORDS, ...C_FAMILY_BASE },
697
+ { id: "cpp", label: "C++", keywords: CPP_KEYWORDS, ...C_FAMILY_BASE },
698
+ { id: "csharp", label: "C#", keywords: CSHARP_KEYWORDS, ...C_FAMILY_BASE },
699
+ { id: "java", label: "Java", keywords: JAVA_KEYWORDS, ...C_FAMILY_BASE },
700
+ { id: "kotlin", label: "Kotlin", keywords: KOTLIN_KEYWORDS, ...C_FAMILY_BASE },
701
+ { id: "go", label: "Go", keywords: GO_KEYWORDS, ...C_FAMILY_BASE },
702
+ { id: "rust", label: "Rust", keywords: RUST_KEYWORDS, ...C_FAMILY_BASE }
703
+ ];
704
+ const LANG_BY_ID = (() => {
705
+ const m = /* @__PURE__ */ new Map();
706
+ for (const l of LANGUAGES) m.set(l.id, l);
707
+ return m;
708
+ })();
709
+ const PLAIN_TEXT_ID = "plaintext";
710
+ function highlightCode(code, langId) {
711
+ if (!langId || langId === PLAIN_TEXT_ID) return escapeHtml(code);
712
+ const lang = LANG_BY_ID.get(langId);
713
+ if (!lang) return escapeHtml(code);
714
+ if (lang.custom) return lang.custom(code);
715
+ return tokenize(code, lang);
716
+ }
717
+ function tokenize(code, lang) {
718
+ var _a, _b;
719
+ const ci = !!lang.caseInsensitiveKeywords;
720
+ let out = "";
721
+ let i = 0;
722
+ const n = code.length;
723
+ while (i < n) {
724
+ if (lang.lineComment && code.startsWith(lang.lineComment, i)) {
725
+ const nl = code.indexOf("\n", i);
726
+ const stop = nl === -1 ? n : nl;
727
+ out += `<span class="hl-comment">${escapeHtml(code.slice(i, stop))}</span>`;
728
+ i = stop;
729
+ continue;
730
+ }
731
+ if (lang.blockComment && code.startsWith(lang.blockComment.start, i)) {
732
+ const closeAt = code.indexOf(lang.blockComment.end, i + lang.blockComment.start.length);
733
+ const stop = closeAt === -1 ? n : closeAt + lang.blockComment.end.length;
734
+ out += `<span class="hl-comment">${escapeHtml(code.slice(i, stop))}</span>`;
735
+ i = stop;
736
+ continue;
737
+ }
738
+ const sd = (_a = lang.stringDelims) == null ? void 0 : _a.find((d) => code.startsWith(d, i));
739
+ if (sd) {
740
+ let j = i + sd.length;
741
+ while (j < n) {
742
+ const c = code[j] ?? "";
743
+ if (c === "\\") {
744
+ j += 2;
745
+ continue;
746
+ }
747
+ if (code.startsWith(sd, j)) {
748
+ j += sd.length;
749
+ break;
750
+ }
751
+ if (c === "\n" && sd !== "`") break;
752
+ j++;
753
+ }
754
+ out += `<span class="hl-string">${escapeHtml(code.slice(i, j))}</span>`;
755
+ i = j;
756
+ continue;
757
+ }
758
+ const ch = code[i] ?? "";
759
+ if (/[0-9]/.test(ch)) {
760
+ const m = NUMBER_RE.exec(code.slice(i));
761
+ if (m) {
762
+ out += `<span class="hl-number">${escapeHtml(m[0])}</span>`;
763
+ i += m[0].length;
764
+ continue;
765
+ }
766
+ }
767
+ if (/[a-zA-Z_$]/.test(ch)) {
768
+ let j = i + 1;
769
+ while (j < n && /[a-zA-Z0-9_$]/.test(code[j] ?? "")) j++;
770
+ const word = code.slice(i, j);
771
+ const lookup = ci ? word.toLowerCase() : word;
772
+ if (lang.keywords.has(lookup)) {
773
+ out += `<span class="hl-keyword">${escapeHtml(word)}</span>`;
774
+ } else if ((_b = lang.builtins) == null ? void 0 : _b.has(lookup)) {
775
+ out += `<span class="hl-builtin">${escapeHtml(word)}</span>`;
776
+ } else {
777
+ let k = j;
778
+ while (k < n && (code[k] === " " || code[k] === " ")) k++;
779
+ if (code[k] === "(") {
780
+ out += `<span class="hl-fn">${escapeHtml(word)}</span>`;
781
+ } else {
782
+ out += escapeHtml(word);
783
+ }
784
+ }
785
+ i = j;
786
+ continue;
787
+ }
788
+ out += escapeHtml(ch);
789
+ i++;
790
+ }
791
+ return out;
792
+ }
793
+ const NUMBER_RE = /^(0[xX][0-9a-fA-F_]+|0[bB][01_]+|0[oO][0-7_]+|[0-9][0-9_]*(?:\.[0-9_]+)?(?:[eE][-+]?[0-9_]+)?)[a-zA-Z]*/;
794
+ function highlightHtml(code) {
795
+ let out = "";
796
+ let i = 0;
797
+ const n = code.length;
798
+ while (i < n) {
799
+ if (code.startsWith("<!--", i)) {
800
+ const end = code.indexOf("-->", i + 4);
801
+ const stop = end === -1 ? n : end + 3;
802
+ out += `<span class="hl-comment">${escapeHtml(code.slice(i, stop))}</span>`;
803
+ i = stop;
804
+ continue;
805
+ }
806
+ if (code[i] === "<") {
807
+ const end = code.indexOf(">", i);
808
+ if (end === -1) {
809
+ out += escapeHtml(code.slice(i));
810
+ break;
811
+ }
812
+ const tag = code.slice(i, end + 1);
813
+ out += highlightHtmlTag(tag);
814
+ i = end + 1;
815
+ continue;
816
+ }
817
+ out += escapeHtml(code[i] ?? "");
818
+ i++;
819
+ }
820
+ return out;
821
+ }
822
+ function highlightHtmlTag(tag) {
823
+ const inner = tag.slice(1, -1);
824
+ let result = '<span class="hl-punct">&lt;</span>';
825
+ const nameMatch = /^\/?[a-zA-Z][a-zA-Z0-9-]*/.exec(inner);
826
+ if (nameMatch) {
827
+ result += `<span class="hl-tag">${escapeHtml(nameMatch[0])}</span>`;
828
+ let rest = inner.slice(nameMatch[0].length);
829
+ const ATTR_RE = /\s+([a-zA-Z_:][a-zA-Z0-9_:.-]*)(\s*=\s*("([^"]*)"|'([^']*)'|([^\s>]+)))?/g;
830
+ let last = 0;
831
+ let m;
832
+ while (m = ATTR_RE.exec(rest)) {
833
+ result += escapeHtml(rest.slice(last, m.index));
834
+ result += escapeHtml(rest.slice(m.index, m.index + m[0].indexOf(m[1] ?? "")));
835
+ result += `<span class="hl-attr">${escapeHtml(m[1] ?? "")}</span>`;
836
+ const valuePart = rest.slice(m.index + (m[0].indexOf(m[1] ?? "") + (m[1] ?? "").length), m.index + m[0].length);
837
+ if (valuePart.includes("=")) {
838
+ const eqIdx = valuePart.indexOf("=");
839
+ result += escapeHtml(valuePart.slice(0, eqIdx + 1));
840
+ const valueStr = valuePart.slice(eqIdx + 1);
841
+ result += `<span class="hl-string">${escapeHtml(valueStr)}</span>`;
842
+ }
843
+ last = m.index + m[0].length;
844
+ }
845
+ result += escapeHtml(rest.slice(last));
846
+ } else {
847
+ result += escapeHtml(inner);
848
+ }
849
+ result += '<span class="hl-punct">&gt;</span>';
850
+ return result;
851
+ }
852
+ function highlightCss(code) {
853
+ let out = "";
854
+ let i = 0;
855
+ const n = code.length;
856
+ let inBlock = false;
857
+ while (i < n) {
858
+ if (code.startsWith("/*", i)) {
859
+ const end = code.indexOf("*/", i + 2);
860
+ const stop = end === -1 ? n : end + 2;
861
+ out += `<span class="hl-comment">${escapeHtml(code.slice(i, stop))}</span>`;
862
+ i = stop;
863
+ continue;
864
+ }
865
+ const ch = code[i] ?? "";
866
+ if (ch === "{") {
867
+ inBlock = true;
868
+ out += escapeHtml(ch);
869
+ i++;
870
+ continue;
871
+ }
872
+ if (ch === "}") {
873
+ inBlock = false;
874
+ out += escapeHtml(ch);
875
+ i++;
876
+ continue;
877
+ }
878
+ if (ch === '"' || ch === "'") {
879
+ const sd = ch;
880
+ let j = i + 1;
881
+ while (j < n && code[j] !== sd) {
882
+ if (code[j] === "\\") j += 2;
883
+ else j++;
884
+ }
885
+ j = Math.min(j + 1, n);
886
+ out += `<span class="hl-string">${escapeHtml(code.slice(i, j))}</span>`;
887
+ i = j;
888
+ continue;
889
+ }
890
+ if (/[a-zA-Z_-]/.test(ch) || ch === "@" || ch === "#" || ch === "." || ch === ":") {
891
+ let j = i + 1;
892
+ while (j < n && /[a-zA-Z0-9_-]/.test(code[j] ?? "")) j++;
893
+ const word = code.slice(i, j);
894
+ if (ch === "@") {
895
+ out += `<span class="hl-keyword">${escapeHtml(word)}</span>`;
896
+ } else if (inBlock && /^[a-zA-Z-]+$/.test(word)) {
897
+ let k = j;
898
+ while (k < n && (code[k] === " " || code[k] === " ")) k++;
899
+ if (code[k] === ":") {
900
+ out += `<span class="hl-prop">${escapeHtml(word)}</span>`;
901
+ } else {
902
+ out += escapeHtml(word);
903
+ }
904
+ } else {
905
+ out += `<span class="hl-tag">${escapeHtml(word)}</span>`;
906
+ }
907
+ i = j;
908
+ continue;
909
+ }
910
+ if (/[0-9]/.test(ch)) {
911
+ const m = /^[0-9.]+(px|em|rem|%|vh|vw|s|ms|deg|fr)?/.exec(code.slice(i));
912
+ if (m) {
913
+ out += `<span class="hl-number">${escapeHtml(m[0])}</span>`;
914
+ i += m[0].length;
915
+ continue;
916
+ }
917
+ }
918
+ out += escapeHtml(ch);
919
+ i++;
920
+ }
921
+ return out;
922
+ }
923
+ function highlightMarkdown(code) {
924
+ return code.split("\n").map(highlightMdLine).join("\n");
925
+ }
926
+ function highlightMdLine(line) {
927
+ const h = /^(#{1,6})\s+(.*)$/.exec(line);
928
+ if (h) {
929
+ return `<span class="hl-keyword">${escapeHtml(h[1] ?? "")}</span> <span class="hl-tag">${highlightMdInline(h[2] ?? "")}</span>`;
930
+ }
931
+ if (line.startsWith(">")) {
932
+ return `<span class="hl-comment">${escapeHtml(line)}</span>`;
933
+ }
934
+ if (line.startsWith("```")) {
935
+ return `<span class="hl-keyword">${escapeHtml(line)}</span>`;
936
+ }
937
+ const li = /^(\s*)([-*+]|\d+\.)\s+(.*)$/.exec(line);
938
+ if (li) {
939
+ return `${li[1] ?? ""}<span class="hl-keyword">${escapeHtml(li[2] ?? "")}</span> ${highlightMdInline(li[3] ?? "")}`;
940
+ }
941
+ return highlightMdInline(line);
942
+ }
943
+ function highlightMdInline(s) {
944
+ let out = escapeHtml(s);
945
+ out = out.replace(/\*\*([^*]+)\*\*/g, '<span class="hl-keyword">**$1**</span>');
946
+ out = out.replace(new RegExp("(?<!\\*)\\*([^*]+)\\*(?!\\*)", "g"), '<span class="hl-string">*$1*</span>');
947
+ out = out.replace(/`([^`]+)`/g, '<span class="hl-builtin">`$1`</span>');
948
+ out = out.replace(
949
+ /\[([^\]]+)\]\(([^)]+)\)/g,
950
+ '<span class="hl-tag">[$1]</span><span class="hl-string">($2)</span>'
951
+ );
952
+ return out;
953
+ }
954
+ function escapeHtml(s) {
955
+ return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
956
+ }
957
+ const highlighter = {
958
+ languages: LANGUAGES.map(({ id, label }) => ({ id, label })),
959
+ highlight: highlightCode
960
+ };
961
+ exports.highlighter = highlighter;
962
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
963
+ return exports;
964
+ }({});