summaryrefslogtreecommitdiff
path: root/demo/components/code-box/prism.js
blob: e21620f7665bf8d3ec499361b9dea189978d8d94 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
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
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
/* PrismJS 1.22.0
https://prismjs.com/download.html#themes=prism-tomorrow&languages=clike+javascript */
var Prism = (function (u) {
  var c = /\blang(?:uage)?-([\w-]+)\b/i,
    n = 0,
    M = {
      manual: u.Prism && u.Prism.manual,
      disableWorkerMessageHandler:
        u.Prism && u.Prism.disableWorkerMessageHandler,
      util: {
        encode: function e(n) {
          return n instanceof W
            ? new W(n.type, e(n.content), n.alias)
            : Array.isArray(n)
            ? n.map(e)
            : n
                .replace(/&/g, "&")
                .replace(/</g, "&lt;")
                .replace(/\u00a0/g, " ");
        },
        type: function (e) {
          return Object.prototype.toString.call(e).slice(8, -1);
        },
        objId: function (e) {
          return (
            e.__id || Object.defineProperty(e, "__id", { value: ++n }), e.__id
          );
        },
        clone: function t(e, r) {
          var a, n;
          switch (((r = r || {}), M.util.type(e))) {
            case "Object":
              if (((n = M.util.objId(e)), r[n])) return r[n];
              for (var i in ((a = {}), (r[n] = a), e))
                e.hasOwnProperty(i) && (a[i] = t(e[i], r));
              return a;
            case "Array":
              return (
                (n = M.util.objId(e)),
                r[n]
                  ? r[n]
                  : ((a = []),
                    (r[n] = a),
                    e.forEach(function (e, n) {
                      a[n] = t(e, r);
                    }),
                    a)
              );
            default:
              return e;
          }
        },
        getLanguage: function (e) {
          for (; e && !c.test(e.className); ) e = e.parentElement;
          return e
            ? (e.className.match(c) || [, "none"])[1].toLowerCase()
            : "none";
        },
        currentScript: function () {
          if ("undefined" == typeof document) return null;
          if ("currentScript" in document) return document.currentScript;
          try {
            throw new Error();
          } catch (e) {
            var n = (/at [^(\r\n]*\((.*):.+:.+\)$/i.exec(e.stack) || [])[1];
            if (n) {
              var t = document.getElementsByTagName("script");
              for (var r in t) if (t[r].src == n) return t[r];
            }
            return null;
          }
        },
        isActive: function (e, n, t) {
          for (var r = "no-" + n; e; ) {
            var a = e.classList;
            if (a.contains(n)) return !0;
            if (a.contains(r)) return !1;
            e = e.parentElement;
          }
          return !!t;
        },
      },
      languages: {
        extend: function (e, n) {
          var t = M.util.clone(M.languages[e]);
          for (var r in n) t[r] = n[r];
          return t;
        },
        insertBefore: function (t, e, n, r) {
          var a = (r = r || M.languages)[t],
            i = {};
          for (var l in a)
            if (a.hasOwnProperty(l)) {
              if (l == e) for (var o in n) n.hasOwnProperty(o) && (i[o] = n[o]);
              n.hasOwnProperty(l) || (i[l] = a[l]);
            }
          var s = r[t];
          return (
            (r[t] = i),
            M.languages.DFS(M.languages, function (e, n) {
              n === s && e != t && (this[e] = i);
            }),
            i
          );
        },
        DFS: function e(n, t, r, a) {
          a = a || {};
          var i = M.util.objId;
          for (var l in n)
            if (n.hasOwnProperty(l)) {
              t.call(n, l, n[l], r || l);
              var o = n[l],
                s = M.util.type(o);
              "Object" !== s || a[i(o)]
                ? "Array" !== s || a[i(o)] || ((a[i(o)] = !0), e(o, t, l, a))
                : ((a[i(o)] = !0), e(o, t, null, a));
            }
        },
      },
      plugins: {},
      highlightAll: function (e, n) {
        M.highlightAllUnder(document, e, n);
      },
      highlightAllUnder: function (e, n, t) {
        var r = {
          callback: t,
          container: e,
          selector:
            'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code',
        };
        M.hooks.run("before-highlightall", r),
          (r.elements = Array.prototype.slice.apply(
            r.container.querySelectorAll(r.selector)
          )),
          M.hooks.run("before-all-elements-highlight", r);
        for (var a, i = 0; (a = r.elements[i++]); )
          M.highlightElement(a, !0 === n, r.callback);
      },
      highlightElement: function (e, n, t) {
        var r = M.util.getLanguage(e),
          a = M.languages[r];
        e.className =
          e.className.replace(c, "").replace(/\s+/g, " ") + " language-" + r;
        var i = e.parentElement;
        i &&
          "pre" === i.nodeName.toLowerCase() &&
          (i.className =
            i.className.replace(c, "").replace(/\s+/g, " ") + " language-" + r);
        var l = { element: e, language: r, grammar: a, code: e.textContent };
        function o(e) {
          (l.highlightedCode = e),
            M.hooks.run("before-insert", l),
            (l.element.innerHTML = l.highlightedCode),
            M.hooks.run("after-highlight", l),
            M.hooks.run("complete", l),
            t && t.call(l.element);
        }
        if ((M.hooks.run("before-sanity-check", l), !l.code))
          return M.hooks.run("complete", l), void (t && t.call(l.element));
        if ((M.hooks.run("before-highlight", l), l.grammar))
          if (n && u.Worker) {
            var s = new Worker(M.filename);
            (s.onmessage = function (e) {
              o(e.data);
            }),
              s.postMessage(
                JSON.stringify({
                  language: l.language,
                  code: l.code,
                  immediateClose: !0,
                })
              );
          } else o(M.highlight(l.code, l.grammar, l.language));
        else o(M.util.encode(l.code));
      },
      highlight: function (e, n, t) {
        var r = { code: e, grammar: n, language: t };
        return (
          M.hooks.run("before-tokenize", r),
          (r.tokens = M.tokenize(r.code, r.grammar)),
          M.hooks.run("after-tokenize", r),
          W.stringify(M.util.encode(r.tokens), r.language)
        );
      },
      tokenize: function (e, n) {
        var t = n.rest;
        if (t) {
          for (var r in t) n[r] = t[r];
          delete n.rest;
        }
        var a = new i();
        return (
          I(a, a.head, e),
          (function e(n, t, r, a, i, l) {
            for (var o in r)
              if (r.hasOwnProperty(o) && r[o]) {
                var s = r[o];
                s = Array.isArray(s) ? s : [s];
                for (var u = 0; u < s.length; ++u) {
                  if (l && l.cause == o + "," + u) return;
                  var c = s[u],
                    g = c.inside,
                    f = !!c.lookbehind,
                    h = !!c.greedy,
                    d = 0,
                    v = c.alias;
                  if (h && !c.pattern.global) {
                    var p = c.pattern.toString().match(/[imsuy]*$/)[0];
                    c.pattern = RegExp(c.pattern.source, p + "g");
                  }
                  for (
                    var m = c.pattern || c, y = a.next, k = i;
                    y !== t.tail && !(l && k >= l.reach);
                    k += y.value.length, y = y.next
                  ) {
                    var b = y.value;
                    if (t.length > n.length) return;
                    if (!(b instanceof W)) {
                      var x = 1;
                      if (h && y != t.tail.prev) {
                        m.lastIndex = k;
                        var w = m.exec(n);
                        if (!w) break;
                        var A = w.index + (f && w[1] ? w[1].length : 0),
                          P = w.index + w[0].length,
                          S = k;
                        for (S += y.value.length; S <= A; )
                          (y = y.next), (S += y.value.length);
                        if (
                          ((S -= y.value.length), (k = S), y.value instanceof W)
                        )
                          continue;
                        for (
                          var E = y;
                          E !== t.tail && (S < P || "string" == typeof E.value);
                          E = E.next
                        )
                          x++, (S += E.value.length);
                        x--, (b = n.slice(k, S)), (w.index -= k);
                      } else {
                        m.lastIndex = 0;
                        var w = m.exec(b);
                      }
                      if (w) {
                        f && (d = w[1] ? w[1].length : 0);
                        var A = w.index + d,
                          O = w[0].slice(d),
                          P = A + O.length,
                          L = b.slice(0, A),
                          N = b.slice(P),
                          j = k + b.length;
                        l && j > l.reach && (l.reach = j);
                        var C = y.prev;
                        L && ((C = I(t, C, L)), (k += L.length)), z(t, C, x);
                        var _ = new W(o, g ? M.tokenize(O, g) : O, v, O);
                        (y = I(t, C, _)),
                          N && I(t, y, N),
                          1 < x &&
                            e(n, t, r, y.prev, k, {
                              cause: o + "," + u,
                              reach: j,
                            });
                      }
                    }
                  }
                }
              }
          })(e, a, n, a.head, 0),
          (function (e) {
            var n = [],
              t = e.head.next;
            for (; t !== e.tail; ) n.push(t.value), (t = t.next);
            return n;
          })(a)
        );
      },
      hooks: {
        all: {},
        add: function (e, n) {
          var t = M.hooks.all;
          (t[e] = t[e] || []), t[e].push(n);
        },
        run: function (e, n) {
          var t = M.hooks.all[e];
          if (t && t.length) for (var r, a = 0; (r = t[a++]); ) r(n);
        },
      },
      Token: W,
    };
  function W(e, n, t, r) {
    (this.type = e),
      (this.content = n),
      (this.alias = t),
      (this.length = 0 | (r || "").length);
  }
  function i() {
    var e = { value: null, prev: null, next: null },
      n = { value: null, prev: e, next: null };
    (e.next = n), (this.head = e), (this.tail = n), (this.length = 0);
  }
  function I(e, n, t) {
    var r = n.next,
      a = { value: t, prev: n, next: r };
    return (n.next = a), (r.prev = a), e.length++, a;
  }
  function z(e, n, t) {
    for (var r = n.next, a = 0; a < t && r !== e.tail; a++) r = r.next;
    ((n.next = r).prev = n), (e.length -= a);
  }
  if (
    ((u.Prism = M),
    (W.stringify = function n(e, t) {
      if ("string" == typeof e) return e;
      if (Array.isArray(e)) {
        var r = "";
        return (
          e.forEach(function (e) {
            r += n(e, t);
          }),
          r
        );
      }
      var a = {
          type: e.type,
          content: n(e.content, t),
          tag: "span",
          classes: ["token", e.type],
          attributes: {},
          language: t,
        },
        i = e.alias;
      i &&
        (Array.isArray(i)
          ? Array.prototype.push.apply(a.classes, i)
          : a.classes.push(i)),
        M.hooks.run("wrap", a);
      var l = "";
      for (var o in a.attributes)
        l +=
          " " +
          o +
          '="' +
          (a.attributes[o] || "").replace(/"/g, "&quot;") +
          '"';
      return (
        "<" +
        a.tag +
        ' class="' +
        a.classes.join(" ") +
        '"' +
        l +
        ">" +
        a.content +
        "</" +
        a.tag +
        ">"
      );
    }),
    !u.document)
  )
    return (
      u.addEventListener &&
        (M.disableWorkerMessageHandler ||
          u.addEventListener(
            "message",
            function (e) {
              var n = JSON.parse(e.data),
                t = n.language,
                r = n.code,
                a = n.immediateClose;
              u.postMessage(M.highlight(r, M.languages[t], t)), a && u.close();
            },
            !1
          )),
      M
    );
  var e = M.util.currentScript();
  function t() {
    M.manual || M.highlightAll();
  }
  if (
    (e &&
      ((M.filename = e.src), e.hasAttribute("data-manual") && (M.manual = !0)),
    !M.manual)
  ) {
    var r = document.readyState;
    "loading" === r || ("interactive" === r && e && e.defer)
      ? document.addEventListener("DOMContentLoaded", t)
      : window.requestAnimationFrame
      ? window.requestAnimationFrame(t)
      : window.setTimeout(t, 16);
  }
  return M;
})(module.exports);
Prism.languages.clike = {
  comment: [
    { pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/, lookbehind: !0 },
    { pattern: /(^|[^\\:])\/\/.*/, lookbehind: !0, greedy: !0 },
  ],
  string: {
    pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
    greedy: !0,
  },
  "class-name": {
    pattern: /(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,
    lookbehind: !0,
    inside: { punctuation: /[.\\]/ },
  },
  keyword: /\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,
  boolean: /\b(?:true|false)\b/,
  function: /\w+(?=\()/,
  number: /\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,
  operator: /[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,
  punctuation: /[{}[\];(),.:]/,
};
(Prism.languages.javascript = Prism.languages.extend("clike", {
  "class-name": [
    Prism.languages.clike["class-name"],
    {
      pattern: /(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,
      lookbehind: !0,
    },
  ],
  keyword: [
    { pattern: /((?:^|})\s*)(?:catch|finally)\b/, lookbehind: !0 },
    {
      pattern: /(^|[^.]|\.\.\.\s*)\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|(?:get|set)(?=\s*[\[$\w\xA0-\uFFFF])|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,
      lookbehind: !0,
    },
  ],
  number: /\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,
  function: /#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,
  operator: /--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/,
})),
  (Prism.languages.javascript[
    "class-name"
  ][0].pattern = /(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/),
  Prism.languages.insertBefore("javascript", "keyword", {
    regex: {
      pattern: /((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,
      lookbehind: !0,
      greedy: !0,
      inside: {
        "regex-source": {
          pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/,
          lookbehind: !0,
          alias: "language-regex",
          inside: Prism.languages.regex,
        },
        "regex-flags": /[a-z]+$/,
        "regex-delimiter": /^\/|\/$/,
      },
    },
    "function-variable": {
      pattern: /#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,
      alias: "function",
    },
    parameter: [
      {
        pattern: /(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,
        lookbehind: !0,
        inside: Prism.languages.javascript,
      },
      {
        pattern: /[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,
        inside: Prism.languages.javascript,
      },
      {
        pattern: /(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,
        lookbehind: !0,
        inside: Prism.languages.javascript,
      },
      {
        pattern: /((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,
        lookbehind: !0,
        inside: Prism.languages.javascript,
      },
    ],
    constant: /\b[A-Z](?:[A-Z_]|\dx?)*\b/,
  }),
  Prism.languages.insertBefore("javascript", "string", {
    "template-string": {
      pattern: /`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/,
      greedy: !0,
      inside: {
        "template-punctuation": { pattern: /^`|`$/, alias: "string" },
        interpolation: {
          pattern: /((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,
          lookbehind: !0,
          inside: {
            "interpolation-punctuation": {
              pattern: /^\${|}$/,
              alias: "punctuation",
            },
            rest: Prism.languages.javascript,
          },
        },
        string: /[\s\S]+/,
      },
    },
  }),
  Prism.languages.markup &&
    Prism.languages.markup.tag.addInlined("script", "javascript"),
  (Prism.languages.js = Prism.languages.javascript);
module.exports.Prism = Prism;