UNPKG

prism-code-editor

Version:

Lightweight, extensible code editor component for the web using Prism

48 lines (47 loc) 1.58 kB
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