Skip to content

Commit

Permalink
Use the same stack for all tokens
Browse files Browse the repository at this point in the history
  • Loading branch information
FIameCaster committed Jul 13, 2024
1 parent 7d1839c commit 8faa747
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 14 deletions.
21 changes: 11 additions & 10 deletions package/src/extensions/matchBrackets/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ export const matchBrackets = (
closingBrackets = ")]}",
) => {
let bracketIndex: number
let sp: number
const stack: [number, number][] = []
const self: BracketMatcher = editor => {
editor.extensions.matchBrackets = self
editor.addListener("tokenize", matchBrackets)
Expand All @@ -63,29 +65,29 @@ export const matchBrackets = (
// @ts-expect-error
const pairMap: number[] = (self.pairs = [])
const matchBrackets = (tokens: TokenStream) => {
pairMap.length = brackets.length = bracketIndex = 0
matchRecursive(tokens, 0, 0)
pairMap.length = brackets.length = sp = bracketIndex = 0
matchRecursive(tokens, 0)

if (rainbowBrackets) {
for (let i = 0, bracket: Bracket; (bracket = brackets[i]); ) {
let alias = bracket[0].alias

bracket[0].alias =
(alias ? alias + " " : "") +
`bracket-${pairMap[i++] == null ? "error" : "level-" + (bracket[2] % 12)}`
`bracket-${i++ in pairMap ? "level-" + (bracket[2] % 12) : "error"}`
}
}
}
const matchRecursive = (tokens: TokenStream, position: number, level: number) => {
let stack: [number, number][] = []
let sp = 0
const matchRecursive = (tokens: TokenStream, position: number) => {
let token: string | Token
for (let i = 0; (token = tokens[i++]); ) {
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, sp + level)
matchRecursive(content, position)
} else if ((token.alias || token.type) == "punctuation") {
let openingType = testBracket(content, openingBrackets, length - 1)
let closingType = openingType || testBracket(content, closingBrackets, length - 1)
Expand All @@ -98,8 +100,7 @@ export const matchBrackets = (
let [index, type] = stack[--i]
if (closingType == type) {
pairMap[(pairMap[bracketIndex] = index)] = bracketIndex
brackets[bracketIndex][2] = brackets[index][2] = i + level
sp = i
brackets[bracketIndex][2] = brackets[index][2] = sp = i
i = 0
}
}
Expand Down
10 changes: 6 additions & 4 deletions package/src/extensions/matchTags.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,18 +45,20 @@ export const createTagMatcher = (editor: PrismEditor): TagMatcher => {
let code: string
let tags: Tag[] = []
let tagIndex: number
let sp: number
let stack: [number, string][] = []

let matchTags = (tokens: TokenStream, language: string, value: string) => {
code = value
tags.length = pairMap.length = tagIndex = 0
tags.length = pairMap.length = tagIndex = sp = 0
matchTagsRecursive(tokens, language, 0)
}

let matchTagsRecursive = (tokens: TokenStream, language: string, position: number) => {
let noVoidTags = voidlessLangs.includes(language)
let stack: [number, string][] = []
let sp = 0
for (let i = 0, l = tokens.length; i < l; ) {
let i = 0
let l = tokens.length
for (; i < l; ) {
const token = <Token>tokens[i++]
const content = token.content
const length = token.length
Expand Down

0 comments on commit 8faa747

Please sign in to comment.