prism-code-editor
Version:
Lightweight, extensible code editor component for the web using Prism
48 lines (47 loc) • 1.58 kB
JavaScript
import { a as addTextareaListener, n as getClosestToken } from "../../index-CxiLA9IO.js";
const highlightBracketPairs = () => (editor) => {
let prev;
let els = [];
let selectionChange = () => {
let matcher = editor.extensions.matchBrackets;
let [start, end] = editor.getSelection();
if (matcher) {
let brackets = matcher.brackets;
let pairs = matcher.pairs;
let opening;
let closing;
if (editor.focused && start == end) {
for (let i = 0, bracket; bracket = brackets[++i]; ) {
if (!bracket[5] && bracket[2] >= end && brackets[pairs[i]]?.[1] <= end) {
opening = brackets[pairs[i]];
closing = bracket;
break;
}
}
}
if (closing != prev) {
toggleActive();
if (closing) {
els = [opening, closing].map(
(bracket) => getClosestToken(editor, ".punctuation", 0, -1, bracket[1])
);
if (els[0] != els[1] && opening[2] == closing[1]) {
els[0].textContent += els[1].textContent;
els[1].textContent = "";
els[1] = els[0];
}
toggleActive(true);
} else els = [];
}
prev = closing;
}
};
let toggleActive = (add) => els.forEach((el) => el.classList.toggle("active-bracket", !!add));
addTextareaListener(editor, "focus", selectionChange);
addTextareaListener(editor, "blur", selectionChange);
editor.on("selectionChange", selectionChange);
};
export {
highlightBracketPairs
};
//# sourceMappingURL=highlight.js.map