prism-code-editor
Version:
Lightweight, extensible code editor component for the web using Prism
57 lines (56 loc) • 1.96 kB
JavaScript
import { r as C } from "./utils-d80f188d.js";
import { a as I } from "./index-fa58cb3b.js";
const N = I(
"",
"color:#0000;display:none;contain:strict;padding:0 var(--_pse) 0 var(--padding-left);"
), F = (f) => {
const g = document.createElement("span"), r = [new Text()], l = [], o = N.cloneNode(), i = [], m = () => {
i[0] && (i.length = 0, o.style.display = "none");
};
let d;
return g.append(""), f.overlays.append(o), {
search(s, w, A, P, p, h) {
if (!s)
return m();
P || (s = C(s));
const c = f.value, R = p ? c.slice(...p) : c, S = p ? p[0] : 0, u = `gum${w ? "" : "i"}`, x = typeof h == "number" ? (e, a) => e > h || a <= h : h;
try {
let e, a, n, t = 0;
for (i.length = 0, d = RegExp(s, u), A && (d = RegExp(
$ ? `(?<=^|\\b|\\W)${s}(?=\\b|\\W|$)` : `\\b${s}\\b`,
u
)); e = d.exec(R); )
a = e[0].length, n = e.index + S, a || (d.lastIndex += c.codePointAt(n) > 65535 ? 2 : 1), (!x || x(n, n + a)) && (i[t++] = [n, n + a]);
} catch (e) {
return e.message;
} finally {
const e = Math.min(i.length * 2, 2e4), a = o.childNodes.length, n = c.slice(e ? i[e / 2 - 1][1] : 0);
for (let t = r.length; t <= e; )
r[t++] = g.cloneNode(!0), r[t++] = new Text();
for (let t = o.childNodes.length - 1; t > e; )
r[t--].remove();
a <= e && o.append(...r.slice(a, e + 1));
for (let t = 0, y = 0; t < e; ++t) {
const [b, T] = i[t / 2], v = c.slice(y, b), E = c.slice(b, y = T);
v != l[t] && (r[t].data = l[t] = v), E != l[++t] && (r[t].firstChild.data = l[t] = E);
}
n != l[e] && (r[e].data = l[e] = n), o.style.display = "";
}
},
container: o,
get regex() {
return d;
},
matches: i,
stopSearch: m
};
};
N.setAttribute("aria-hidden", !0);
let $;
try {
RegExp("(?<=)"), $ = !0;
} catch {
}
export {
F as c
};