| | |
| | | import { PluggableList } from "unified" |
| | | import remarkGfm from "remark-gfm" |
| | | import smartypants from 'remark-smartypants' |
| | | import { QuartzTransformerPlugin } from "../types" |
| | |
| | | linkHeadings: true |
| | | } |
| | | |
| | | export class GitHubFlavoredMarkdown extends QuartzTransformerPlugin { |
| | | name = "GitHubFlavoredMarkdown" |
| | | opts: Options |
| | | |
| | | constructor(opts?: Partial<Options>) { |
| | | super() |
| | | this.opts = { ...defaultOptions, ...opts } |
| | | } |
| | | |
| | | markdownPlugins(): PluggableList { |
| | | return this.opts.enableSmartyPants ? [remarkGfm] : [remarkGfm, smartypants] |
| | | } |
| | | |
| | | htmlPlugins(): PluggableList { |
| | | return this.opts.linkHeadings |
| | | ? [rehypeSlug, [rehypeAutolinkHeadings, { |
| | | behavior: 'append', content: { |
| | | type: 'text', |
| | | value: ' §' |
| | | } |
| | | }]] |
| | | : [] |
| | | export const GitHubFlavoredMarkdown: QuartzTransformerPlugin<Partial<Options> | undefined> = (userOpts) => { |
| | | const opts = { ...defaultOptions, ...userOpts } |
| | | return { |
| | | name: "GitHubFlavoredMarkdown", |
| | | markdownPlugins() { |
| | | return opts.enableSmartyPants ? [remarkGfm, smartypants] : [remarkGfm] |
| | | }, |
| | | htmlPlugins() { |
| | | if (opts.linkHeadings) { |
| | | return [rehypeSlug, [rehypeAutolinkHeadings, { |
| | | behavior: 'append', content: { |
| | | type: 'text', |
| | | value: ' §', |
| | | } |
| | | }]] |
| | | } else { |
| | | return [] |
| | | } |
| | | } |
| | | } |
| | | } |