import { unified } from "unified"; import remarkParse from "remark-parse"; import remarkGfm from "remark-gfm"; import remarkToc from "remark-toc"; import remarkDirective from "remark-directive"; import remarkMath from "remark-math"; import remarkFrontmatter from "remark-frontmatter"; import remarkRehype from "remark-rehype"; import rehypeSlug from "rehype-slug"; import rehypePicture from "rehype-picture"; import rehypeKaTeX from "rehype-katex"; import rehypeRaw from "rehype-raw"; import rehypeAutolinkHeadings from "rehype-autolink-headings"; import rehypeStringify from "rehype-stringify"; import rehypeHighlight from "rehype-highlight"; import remarkSpecialBox from "./special_box.mjs"; import remarkRemoveFootnoteHeader from "./remove-footnote-header.mjs"; import { getTocHeading } from "./i18n.mjs"; const autoLinkOption = { behavior: "wrap", properties: { tabIndex: 0, className: "anchor", }, }; const pictureOptions = { png: { avif: "image/avif" }, }; const generator = unified() .use(remarkParse) .use(remarkGfm) .use(remarkToc, { heading: getTocHeading(), tight: true, ordered: true }) .use(remarkMath) .use(remarkDirective) .use(remarkSpecialBox) .use(remarkFrontmatter, { type: "toml", marker: "-" }) .use(remarkRehype, { allowDangerousHtml: true }) .use(rehypeRaw) .use(remarkRemoveFootnoteHeader) .use(rehypePicture, pictureOptions) .use(rehypeKaTeX) .use(rehypeSlug) .use(rehypeHighlight) .use(rehypeAutolinkHeadings, autoLinkOption) .use(rehypeStringify); const generatorMd = unified() .use(remarkParse) .use(remarkGfm) .use(remarkToc, { heading: getTocHeading(), tight: true, ordered: true }) .use(remarkMath) .use(remarkDirective) .use(remarkSpecialBox) .use(remarkFrontmatter, { type: "toml", marker: "-" }); const generatorHTML = unified() .use(remarkRehype, { allowDangerousHtml: true }) .use(rehypeRaw) .use(remarkRemoveFootnoteHeader) .use(rehypePicture, pictureOptions) .use(rehypeKaTeX) .use(rehypeSlug) .use(rehypeHighlight) .use(rehypeAutolinkHeadings, autoLinkOption) .use(rehypeStringify); const toHtml = (content) => generator.processSync(content); export const toMdRaw = (content) => generatorMd.runSync(generatorMd.parse(content)); export const mdToHtmlRaw = (content) => generatorHTML.runSync(content); export const toHtmlRaw = (content) => generator.runSync(generator.parse(content)); export const toString = (content) => generator.stringify(content); export default toHtml;