1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
| import remarkGfm from "remark-gfm"
| import smartypants from "remark-smartypants"
| import { QuartzTransformerPlugin } from "../types"
| import rehypeSlug from "rehype-slug"
| import rehypeAutolinkHeadings from "rehype-autolink-headings"
|
| export interface Options {
| enableSmartyPants: boolean
| linkHeadings: boolean
| }
|
| const defaultOptions: Options = {
| enableSmartyPants: true,
| linkHeadings: true,
| }
|
| 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",
| properties: {
| ariaHidden: true,
| tabIndex: -1,
| "data-no-popover": true,
| "data-icon": true,
| },
| content: {
| type: "element",
| tagName: "svg",
| properties: {
| width: 18,
| height: 18,
| viewBox: "0 0 24 24",
| fill: "none",
| stroke: "currentColor",
| "stroke-width": "2",
| "stroke-linecap": "round",
| "stroke-linejoin": "round",
| },
| children: [
| {
| type: "element",
| tagName: "path",
| properties: {
| d: "M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",
| },
| children: [],
| },
| {
| type: "element",
| tagName: "path",
| properties: {
| d: "M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",
| },
| children: [],
| },
| ],
| },
| },
| ],
| ]
| } else {
| return []
| }
| },
| }
| }
|
|