UNPKG

prism-code-editor

Version:

Lightweight, extensible code editor component for the web using Prism

61 lines (60 loc) 2.08 kB
import { t as testBracket } from "../../bracket-BPYnIBjq.js"; const matchBrackets = (rainbowBrackets = true, pairs = "()[]{}") => { let bracketIndex; let sp; const stack = []; const self = (editor) => { editor.extensions.matchBrackets = self; editor.on("tokenize", matchBrackets2); if (rainbowBrackets && editor.tokens[0]) editor.update(); else matchBrackets2(editor.tokens); }; const brackets = self.brackets = []; const pairMap = self.pairs = []; const matchBrackets2 = (tokens) => { pairMap.length = brackets.length = sp = bracketIndex = 0; matchRecursive(tokens, 0); if (rainbowBrackets) { for (let i = 0, bracket; bracket = brackets[i]; ) { let alias = bracket[0].alias; bracket[0].alias = (alias ? alias + " " : "") + `bracket-${i++ in pairMap ? "level-" + bracket[3] % 12 : "error"}`; } } }; const matchRecursive = (tokens, position) => { let token; let i = 0; for (; token = tokens[i++]; ) { let length = token.length; if (typeof token != "string") { let content = token.content; if (Array.isArray(content)) { matchRecursive(content, position); } else if ((token.alias || token.type) == "punctuation") { let bracketType = testBracket(content, pairs, length - 1); let isOpening = bracketType % 2; if (bracketType) { brackets[bracketIndex] = [token, position, position + length, sp, content, !!isOpening]; if (isOpening) stack[sp++] = [bracketIndex, bracketType + 1]; else { for (let i2 = sp, entry; entry = stack[--i2]; ) { if (bracketType == entry[1]) { pairMap[pairMap[bracketIndex] = entry[0]] = bracketIndex; brackets[bracketIndex][3] = sp = i2; break; } } } bracketIndex++; } } } position += length; } }; return self; }; export { matchBrackets }; //# sourceMappingURL=index.js.map