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 +}