diff --git a/package/src/languages/css.ts b/package/src/languages/css.ts index 19f0d80d..325ab94e 100644 --- a/package/src/languages/css.ts +++ b/package/src/languages/css.ts @@ -1,5 +1,5 @@ import { languageMap } from "../core" -import { isBracketPair } from "./patterns" +import { isBracketPair, openBracket } from "./patterns" languageMap.css = languageMap.sass = @@ -9,7 +9,7 @@ languageMap.css = block: ["/*", "*/"], }, autoIndent: [ - ([start], value) => /[([{][^\n)\]}]*$/.test(value.slice(0, start)), + ([start], value) => openBracket.test(value.slice(0, start)), ([start, end], value) => isBracketPair.test(value[start - 1] + value[end]), ], } diff --git a/package/src/languages/html.ts b/package/src/languages/html.ts index 3cf64fce..ecf9be27 100644 --- a/package/src/languages/html.ts +++ b/package/src/languages/html.ts @@ -1,5 +1,5 @@ import { languageMap } from "../core" -import { isBracketPair, xmlClosingTag, xmlOpeningTag } from "./patterns" +import { isBracketPair, openBracket, xmlClosingTag, xmlOpeningTag } from "./patterns" const voidTags = /^(?:area|base|w?br|col|embed|hr|img|input|link|meta|source|track)$/ @@ -14,16 +14,13 @@ languageMap.markup = block: [""], }, autoIndent: [ - ([start], value) => - isOpening((value = value.slice(0, start))) || - /[([{][^\n)\]}]*$/.test(value), + ([start], value) => isOpening((value = value.slice(0, start))) || openBracket.test(value), ([start, end], value) => isBracketPair.test(value[start - 1] + value[end]) || (isOpening(value.slice(0, start)) && xmlClosingTag.test(value.slice(end))), ], autoCloseTags([start, end], value) { - const tagName = - start == end && (value.slice(0, start) + ">").match(xmlOpeningTag)?.[1] + const tagName = start == end && (value.slice(0, start) + ">").match(xmlOpeningTag)?.[1] if (tagName && !voidTags.test(tagName)) return `` }, } diff --git a/package/src/languages/patterns.ts b/package/src/languages/patterns.ts index 2a9fe17e..ece26598 100644 --- a/package/src/languages/patterns.ts +++ b/package/src/languages/patterns.ts @@ -2,6 +2,7 @@ const clikeIndent = /[([{][^\n)\]}]*$|(?:(?:^|[^.])\b(?:if\s*\(.+?\)|else|case.+ isBracketPair = /\[]|\(\)|{}/, xmlOpeningTag = /<(?![!\d])([^\s>\/=$<%]+)(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+))?)+)?\s*>[ \t]*$/, - xmlClosingTag = /^<\/(?!\d)[^\s>\/=$<%]+\s*>/ + xmlClosingTag = /^<\/(?!\d)[^\s>\/=$<%]+\s*>/, + openBracket = /[([{][^\n)\]}]*$/ -export { clikeIndent, isBracketPair, xmlOpeningTag, xmlClosingTag } +export { clikeIndent, isBracketPair, xmlOpeningTag, xmlClosingTag, openBracket } diff --git a/package/src/languages/xml.ts b/package/src/languages/xml.ts index 54fa71c9..8941f7b5 100644 --- a/package/src/languages/xml.ts +++ b/package/src/languages/xml.ts @@ -1,5 +1,5 @@ import { languageMap } from "../core" -import { isBracketPair, xmlClosingTag, xmlOpeningTag } from "./patterns" +import { isBracketPair, openBracket, xmlClosingTag, xmlOpeningTag } from "./patterns" // Same as HTML, but without void tags languageMap.xml = @@ -14,16 +14,13 @@ languageMap.xml = }, autoIndent: [ ([start], value) => - xmlOpeningTag.test((value = value.slice(0, start))) || - /[([{][^\n)\]}]*$/.test(value), + xmlOpeningTag.test((value = value.slice(0, start))) || openBracket.test(value), ([start, end], value) => isBracketPair.test(value[start - 1] + value[end]) || - (xmlOpeningTag.test(value.slice(0, start)) && - xmlClosingTag.test(value.slice(end))), + (xmlOpeningTag.test(value.slice(0, start)) && xmlClosingTag.test(value.slice(end))), ], autoCloseTags([start, end], value) { - const match = - start == end && (value.slice(0, start) + ">").match(xmlOpeningTag) + const match = start == end && (value.slice(0, start) + ">").match(xmlOpeningTag) return match ? `` : "" }, }