public_notes/quartz/plugins/transformers/gfm.ts

52 lines
1.2 KiB
TypeScript
Raw Normal View History

2023-05-31 00:02:20 +09:00
import remarkGfm from "remark-gfm"
2023-07-23 09:27:41 +09:00
import smartypants from "remark-smartypants"
2023-05-31 00:02:20 +09:00
import { QuartzTransformerPlugin } from "../types"
2023-06-02 08:48:38 +09:00
import rehypeSlug from "rehype-slug"
2023-06-05 01:35:45 +09:00
import rehypeAutolinkHeadings from "rehype-autolink-headings"
2023-05-31 00:02:20 +09:00
export interface Options {
enableSmartyPants: boolean
2023-06-02 08:48:38 +09:00
linkHeadings: boolean
2023-05-31 00:02:20 +09:00
}
const defaultOptions: Options = {
2023-06-02 08:48:38 +09:00
enableSmartyPants: true,
2023-07-23 09:27:41 +09:00
linkHeadings: true,
2023-05-31 00:02:20 +09:00
}
2023-07-23 09:27:41 +09:00
export const GitHubFlavoredMarkdown: QuartzTransformerPlugin<Partial<Options> | undefined> = (
userOpts,
) => {
const opts = { ...defaultOptions, ...userOpts }
return {
name: "GitHubFlavoredMarkdown",
markdownPlugins() {
2023-07-03 05:08:29 +09:00
return opts.enableSmartyPants ? [remarkGfm, smartypants] : [remarkGfm]
},
htmlPlugins() {
if (opts.linkHeadings) {
2023-07-23 09:27:41 +09:00
return [
rehypeSlug,
[
rehypeAutolinkHeadings,
{
behavior: "append",
properties: {
ariaHidden: true,
tabIndex: -1,
"data-no-popover": true,
},
2023-07-23 09:27:41 +09:00
content: {
type: "text",
value: " §",
},
},
],
]
} else {
return []
}
2023-07-23 09:27:41 +09:00
},
2023-05-31 00:02:20 +09:00
}
}