From 48a659629738399573a451e757652b3c0667528a Mon Sep 17 00:00:00 2001 From: pengzhanbo Date: Wed, 14 Aug 2024 03:54:52 +0800 Subject: [PATCH] perf(plugin-shikiji): improve `highlight whitespace` --- .../src/node/utils/whitespace.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 plugins/plugin-shikiji/src/node/utils/whitespace.ts diff --git a/plugins/plugin-shikiji/src/node/utils/whitespace.ts b/plugins/plugin-shikiji/src/node/utils/whitespace.ts new file mode 100644 index 00000000..558d48f2 --- /dev/null +++ b/plugins/plugin-shikiji/src/node/utils/whitespace.ts @@ -0,0 +1,18 @@ +export const WHITESPACE_REGEXP = /:whitespace(?:=(all|boundary|trailing)?)?\b/ +export const NO_WHITESPACE_REGEXP = /:no-whitespace\b/ + +export type WhitespacePosition = 'all' | 'boundary' | 'trailing' + +export function resolveWhitespacePosition(info: string, defaultPosition?: boolean | WhitespacePosition): WhitespacePosition | false { + if (NO_WHITESPACE_REGEXP.test(info)) { + return false + } + + defaultPosition = defaultPosition === true ? undefined : defaultPosition + + const match = info.match(WHITESPACE_REGEXP) + if (match) { + return (match[1] || defaultPosition || 'all') as WhitespacePosition + } + return defaultPosition ?? false +}