|
|
|
@ -1,3 +1,5 @@ |
|
|
|
import type MarkdownIt from "markdown-it" |
|
|
|
|
|
|
|
/** 匹配以 --- 开头/结尾的 YAML front matter(全文开头) */ |
|
|
|
const FRONT_MATTER_RE = /^---[\t ]*\r?\n([\s\S]*?)\r?\n---[\t ]*(?:\r?\n|$)([\s\S]*)$/ |
|
|
|
|
|
|
|
@ -7,7 +9,9 @@ export function splitFrontMatter(markdown: string): { front: string | null; body |
|
|
|
if (!m) { |
|
|
|
return { front: null, body: markdown } |
|
|
|
} |
|
|
|
return { front: m[1].trim(), body: m[2] } |
|
|
|
const frontBlock = m[1] ?? "" |
|
|
|
const body = m[2] ?? "" |
|
|
|
return { front: frontBlock.trim(), body } |
|
|
|
} |
|
|
|
|
|
|
|
/** 正文渲染用:去掉 front matter,避免把元数据块排进 HTML */ |
|
|
|
@ -55,3 +59,13 @@ export function listCardSummaryFromPostBody(bodyMarkdown: string, dbExcerpt: str |
|
|
|
} |
|
|
|
return (dbExcerpt ?? "").trim() |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* md-editor-v3 的 `markdownItConfig`:在 core 管线中去掉 front matter,预览与站点渲染一致。 |
|
|
|
* `ruleName` 须唯一(多编辑器实例时用 useId 等生成)。 |
|
|
|
*/ |
|
|
|
export function attachMarkdownItStripFrontMatter(md: MarkdownIt, ruleName: string): void { |
|
|
|
md.core.ruler.after("normalize", ruleName, (state) => { |
|
|
|
state.src = stripFrontMatter(state.src) |
|
|
|
}) |
|
|
|
} |
|
|
|
|