ttrpg-tools/src/markdown/index.ts

42 lines
1.1 KiB
TypeScript

import { Marked, type MarkedExtension } from "marked";
import { createDirectives, presetDirectiveConfigs } from "marked-directive";
import markedAlert from "marked-alert";
import markedMermaid from "./mermaid";
import markedTable from "./table";
import { gfmHeadingId } from "marked-gfm-heading-id";
import markedColumns from "./columns";
import markedCodeBlockYamlTag from "./code-block-yaml-tag";
import { iconDirective, setIconBase } from "./icon";
// 使用 marked-directive 来支持指令语法
const marked = new Marked()
.use(gfmHeadingId())
.use(markedAlert())
.use(markedMermaid())
.use(markedTable())
.use(markedCodeBlockYamlTag())
.use(
createDirectives([
...presetDirectiveConfigs,
{
marker: "::::",
level: "container",
},
{
marker: ":::::",
level: "container",
},
iconDirective,
]),
{
extensions: [...markedColumns()],
},
);
export function parseMarkdown(content: string, basePath?: string): string {
setIconBase(basePath);
return marked.parse(content.trimStart()) as string;
}
export { marked };