{"mappings":";AAAA,IAAMA,EAAA,CAAeC,EAAaC,EAAkBC,IAC5CD,EAAS,QAAQD,EAAI,CAAA,CAAE,EAAI,GAAME,GAAKD,EAAS,QAAQD,EAAIE,CAAA,CAAE,EAAI,EC0CzE,IAAaC,EAAA,CAAiBC,EAAkB,GAAMC,EAAQ,WAAa,CAC1E,IAAIC,EACAC,EACEC,EAA4B,CAAC,EAC7BC,EAAuBC,GAAU,CACtCA,EAAO,WAAW,cAAgBD,EAClCC,EAAO,GAAG,WAAYP,CAAa,EAC/BC,GAAmBM,EAAO,OAAO,CAAA,EAAIA,EAAO,OAAO,EAClDP,EAAcO,EAAO,MAAM,CACjC,EAEMC,EAAuBF,EAAK,SAAW,CAAC,EAExCG,EAAqBH,EAAK,MAAQ,CAAC,EACnCN,EAAiBU,GAAwB,CAI9C,GAHAD,EAAQ,OAASD,EAAS,OAASJ,EAAKD,EAAe,EACvDQ,EAAeD,EAAQ,CAAC,EAEpBT,EACH,QAASW,EAAI,EAAGC,EAAmBA,EAAUL,EAASI,CAAA,GAAO,CAC5D,IAAIE,EAAQD,EAAQ,CAAA,EAAG,MAEvBA,EAAQ,CAAA,EAAG,OACTC,EAAQA,EAAQ,IAAM,IACvB,WAAWF,MAAOH,EAAU,SAAYI,EAAQ,CAAA,EAAK,GAAM,OAAA,EAC7D,CAEF,EACMF,EAAA,CAAkBD,EAAqBK,IAAqB,CACjE,IAAIC,EACAJ,EAAI,EACR,KAAQI,EAAQN,EAAOE,GAAA,GAAS,CAC/B,IAAIK,EAASD,EAAM,OACnB,GAAI,OAAOA,GAAS,SAAU,CAC7B,IAAIE,EAAUF,EAAM,QAEpB,GAAI,MAAM,QAAQE,CAAO,EACxBP,EAAeO,EAASH,CAAQ,WACrBC,EAAM,OAASA,EAAM,OAAS,cAAe,CACxD,IAAIG,EAAcC,EAAYF,EAAShB,EAAOe,EAAS,CAAC,EACpDI,EAAYF,EAAc,EAC9B,GAAIA,EAAa,CAGhB,GAFAX,EAASL,CAAA,EAAgB,CAACa,EAAOD,EAAUA,EAAWE,EAAQb,EAAIc,EAAS,CAAC,CAACG,CAAS,EAElFA,EAAWhB,EAAMD,GAAA,EAAQ,CAACD,EAAcgB,EAAc,CAAC,MAE1D,SAASP,EAAIR,EAAIkB,EAA0BA,EAAQjB,EAAM,EAAEO,CAAA,GAC1D,GAAIO,GAAeG,EAAM,CAAA,EAAI,CAC5Bb,EAASA,EAAQN,CAAA,EAAgBmB,EAAM,CAAA,CAAA,EAAOnB,EAC9CK,EAASL,CAAA,EAAc,CAAA,EAAKC,EAAKQ,EACjC,KACD,CAGFT,GACD,CACD,CACD,CACAY,GAAYE,CACb,CACD,EAEA,OAAOX,CACR","names":["testBracket","str","brackets","l","matchBrackets","rainbowBrackets","pairs","bracketIndex","sp","stack","self","editor","brackets","pairMap","tokens","matchRecursive","i","bracket","alias","position","token","length","content","bracketType","testBracket","isOpening","entry"],"sources":["../esm/npm/@cyfung1031/prism-code-editor@5.2.0-cdn-esm.2/node_modules/@cyfung1031/prism-code-editor/src/utils/bracket.ts","../esm/npm/@cyfung1031/prism-code-editor@5.2.0-cdn-esm.2/node_modules/@cyfung1031/prism-code-editor/src/extensions/matchBrackets/index.ts"],"sourcesContent":["const testBracket = (str: string, brackets: string, l: number) =\u003e {\n\treturn brackets.indexOf(str[0]) + 1 || (l \u0026\u0026 brackets.indexOf(str[l]) + 1)\n}\n\nexport { testBracket }\n","/** @module match-brackets */\r\n\r\nimport { BasicExtension } from \"../../index.js\"\r\nimport { Token, TokenStream } from \"../../prism/index.js\"\r\nimport { testBracket } from \"../../utils/bracket.js\"\r\n\r\nexport interface BracketMatcher extends BasicExtension {\r\n\t/**\r\n\t * Array of tuples containing in the following order:\r\n\t * - The bracket's `Token`\r\n\t * - Its starting position\r\n\t * - Its ending position\r\n\t * - Its level of nesting\r\n\t * - Its text content\r\n\t * - Whether it's an opening bracket\r\n\t */\r\n\treadonly brackets: Bracket[]\r\n\t/** Array mapping the index of a bracket to the index of its matching bracket. */\r\n\treadonly pairs: (number | undefined)[]\r\n}\r\n\r\n/**\r\n * Tuple containing in the following order:\r\n * - The bracket's `Token`\r\n * - Its starting position\r\n * - Its ending position\r\n * - Its level of nesting\r\n * - Its text content\r\n * - Whether it's an opening bracket\r\n */\r\nexport type Bracket = [Token, number, number, number, string, boolean]\r\n\r\n/**\r\n * Extension that matches punctuation tokens together. Intended for matching brackets.\r\n *\r\n * Without rainbow brackets, this extension can be added dynamically with no downsides.\r\n *\r\n * @param rainbowBrackets Whether to add extra classes to brackets for styling. Defaults\r\n * to `true`. When enabled, adding the extension dynamically will force a rerender to add\r\n * these extra classes.\r\n * @param pairs Which characters to match together. The opening character must be followed\r\n * by the corresponding closing character. Defaults to `\"()[]{}\"`.\r\n */\r\nexport const matchBrackets = (rainbowBrackets = true, pairs = \"()[]{}\") =\u003e {\r\n\tlet bracketIndex: number\r\n\tlet sp: number\r\n\tconst stack: [number, number][] = []\r\n\tconst self: BracketMatcher = editor =\u003e {\r\n\t\teditor.extensions.matchBrackets = self\r\n\t\teditor.on(\"tokenize\", matchBrackets)\r\n\t\tif (rainbowBrackets \u0026\u0026 editor.tokens[0]) editor.update()\r\n\t\telse matchBrackets(editor.tokens)\r\n\t}\r\n\t// @ts-expect-error\r\n\tconst brackets: Bracket[] = (self.brackets = [])\r\n\t// @ts-expect-error\r\n\tconst pairMap: number[] = (self.pairs = [])\r\n\tconst matchBrackets = (tokens: TokenStream) =\u003e {\r\n\t\tpairMap.length = brackets.length = sp = bracketIndex = 0\r\n\t\tmatchRecursive(tokens, 0)\r\n\r\n\t\tif (rainbowBrackets) {\r\n\t\t\tfor (let i = 0, bracket: Bracket; (bracket = brackets[i]); ) {\r\n\t\t\t\tlet alias = bracket[0].alias\r\n\r\n\t\t\t\tbracket[0].alias =\r\n\t\t\t\t\t(alias ? alias + \" \" : \"\") +\r\n\t\t\t\t\t`bracket-${i++ in pairMap ? \"level-\" + (bracket[3] % 12) : \"error\"}`\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tconst matchRecursive = (tokens: TokenStream, position: number) =\u003e {\r\n\t\tlet token: string | Token\r\n\t\tlet i = 0\r\n\t\tfor (; (token = tokens[i++]); ) {\r\n\t\t\tlet length = token.length\r\n\t\t\tif (typeof token != \"string\") {\r\n\t\t\t\tlet content = token.content\r\n\r\n\t\t\t\tif (Array.isArray(content)) {\r\n\t\t\t\t\tmatchRecursive(content, position)\r\n\t\t\t\t} else if ((token.alias || token.type) == \"punctuation\") {\r\n\t\t\t\t\tlet bracketType = testBracket(content, pairs, length - 1)\r\n\t\t\t\t\tlet isOpening = bracketType % 2\r\n\t\t\t\t\tif (bracketType) {\r\n\t\t\t\t\t\tbrackets[bracketIndex] = [token, position, position + length, sp, content, !!isOpening]\r\n\r\n\t\t\t\t\t\tif (isOpening) stack[sp++] = [bracketIndex, bracketType + 1]\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tfor (let i = sp, entry: [number, number]; (entry = stack[--i]); ) {\r\n\t\t\t\t\t\t\t\tif (bracketType == entry[1]) {\r\n\t\t\t\t\t\t\t\t\tpairMap[(pairMap[bracketIndex] = entry[0])] = bracketIndex\r\n\t\t\t\t\t\t\t\t\tbrackets[bracketIndex][3] = sp = i\r\n\t\t\t\t\t\t\t\t\tbreak\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbracketIndex++\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tposition += length\r\n\t\t}\r\n\t}\r\n\r\n\treturn self\r\n}\r\n"],"version":3}
