mirror of
https://github.com/jackyzha0/quartz.git
synced 2026-03-24 15:05:42 -05:00
Added GitHub parsing
This commit is contained in:
parent
dfd6abe6a6
commit
97613c2c09
@ -0,0 +1,2 @@
|
|||||||
|
export { GitHubSmartypants } from "./smartypants"
|
||||||
|
export { GitHubLinkheadings } from "./linkheadings"
|
||||||
@ -0,0 +1,87 @@
|
|||||||
|
import { QuartzParser } from "../../types"
|
||||||
|
import { JSResource } from "../../../util/resources"
|
||||||
|
import { Pluggable } from "unified"
|
||||||
|
import rehypeSlug from "rehype-slug"
|
||||||
|
import rehypeAutolinkHeadings from "rehype-autolink-headings"
|
||||||
|
|
||||||
|
interface Options {
|
||||||
|
enabled: Boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
const defaultOptions: Options = {
|
||||||
|
enabled: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
export const GitHubLinkheadings: QuartzParser<Partial<Options>> = (userOpts) => {
|
||||||
|
const opts: Options = { ...defaultOptions, ...userOpts }
|
||||||
|
return {
|
||||||
|
name: "GitHubLinkheadings",
|
||||||
|
textTransform(_ctx, src: string | Buffer) {
|
||||||
|
if (src instanceof Buffer) {
|
||||||
|
src = src.toString()
|
||||||
|
}
|
||||||
|
return src
|
||||||
|
},
|
||||||
|
markdownPlugins(_ctx) {
|
||||||
|
const plug: Pluggable = () => {}
|
||||||
|
return plug
|
||||||
|
},
|
||||||
|
htmlPlugins() {
|
||||||
|
if (opts.enabled) {
|
||||||
|
return [
|
||||||
|
rehypeSlug,
|
||||||
|
[
|
||||||
|
rehypeAutolinkHeadings,
|
||||||
|
{
|
||||||
|
behavior: "append",
|
||||||
|
properties: {
|
||||||
|
role: "anchor",
|
||||||
|
ariaHidden: true,
|
||||||
|
tabIndex: -1,
|
||||||
|
"data-no-popover": 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: [],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
] as Pluggable[]
|
||||||
|
} else {
|
||||||
|
return [] as Pluggable[]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
externalResources() {
|
||||||
|
const js = {} as JSResource
|
||||||
|
return js
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
40
quartz/plugins/parsers/github/smartypants.ts
Normal file
40
quartz/plugins/parsers/github/smartypants.ts
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
import { QuartzParser } from "../../types"
|
||||||
|
import { JSResource } from "../../../util/resources"
|
||||||
|
import { Pluggable } from "unified"
|
||||||
|
import remarkGfm from "remark-gfm"
|
||||||
|
import smartypants from "remark-smartypants"
|
||||||
|
|
||||||
|
interface Options {
|
||||||
|
enabled: Boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
const defaultOptions: Options = {
|
||||||
|
enabled: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
export const GitHubSmartypants: QuartzParser<Partial<Options>> = (userOpts) => {
|
||||||
|
const opts: Options = { ...defaultOptions, ...userOpts }
|
||||||
|
return {
|
||||||
|
name: "GitHubSmartypants",
|
||||||
|
textTransform(_ctx, src: string | Buffer) {
|
||||||
|
if (src instanceof Buffer) {
|
||||||
|
src = src.toString()
|
||||||
|
}
|
||||||
|
return src
|
||||||
|
},
|
||||||
|
markdownPlugins(_ctx) {
|
||||||
|
if (opts.enabled) {
|
||||||
|
return [remarkGfm, smartypants]
|
||||||
|
}
|
||||||
|
return [remarkGfm]
|
||||||
|
},
|
||||||
|
htmlPlugins() {
|
||||||
|
const plug: Pluggable = () => {}
|
||||||
|
return plug
|
||||||
|
},
|
||||||
|
externalResources() {
|
||||||
|
const js = {} as JSResource
|
||||||
|
return js
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -26,7 +26,7 @@ import { toHast } from "mdast-util-to-hast"
|
|||||||
import { toHtml } from "hast-util-to-html"
|
import { toHtml } from "hast-util-to-html"
|
||||||
import { PhrasingContent } from "mdast-util-find-and-replace/lib"
|
import { PhrasingContent } from "mdast-util-find-and-replace/lib"
|
||||||
import { capitalize } from "../../util/lang"
|
import { capitalize } from "../../util/lang"
|
||||||
import { PluggableList } from "unified"
|
import { Pluggable, PluggableList } from "unified"
|
||||||
import { Node } from "unist"
|
import { Node } from "unist"
|
||||||
import { VFile } from "vfile"
|
import { VFile } from "vfile"
|
||||||
import { BuildVisitor } from "unist-util-visit"
|
import { BuildVisitor } from "unist-util-visit"
|
||||||
@ -35,6 +35,8 @@ import smartypants from "remark-smartypants"
|
|||||||
import rehypeSlug from "rehype-slug"
|
import rehypeSlug from "rehype-slug"
|
||||||
import rehypeAutolinkHeadings from "rehype-autolink-headings"
|
import rehypeAutolinkHeadings from "rehype-autolink-headings"
|
||||||
|
|
||||||
|
import { GitHubLinkheadings, GitHubSmartypants } from "../parsers/github"
|
||||||
|
|
||||||
import {
|
import {
|
||||||
ObsidianArrow,
|
ObsidianArrow,
|
||||||
ObsidianCallouts,
|
ObsidianCallouts,
|
||||||
@ -213,11 +215,15 @@ export const GitHubFlavoredMarkdown: QuartzTransformerPlugin<Partial<GitHubOptio
|
|||||||
markdownPlugins(ctx) {
|
markdownPlugins(ctx) {
|
||||||
const plugins: PluggableList = []
|
const plugins: PluggableList = []
|
||||||
|
|
||||||
|
plugins.push(GitHubSmartypants({ enabled: opts.enableSmartyPants }).markdownPlugins(ctx))
|
||||||
|
|
||||||
return plugins
|
return plugins
|
||||||
},
|
},
|
||||||
htmlPlugins() {
|
htmlPlugins() {
|
||||||
const plugins: PluggableList = []
|
const plugins: PluggableList = []
|
||||||
|
|
||||||
|
plugins.push.apply(GitHubLinkheadings({ enabled: opts.linkHeadings }).htmlPlugins())
|
||||||
|
|
||||||
return plugins
|
return plugins
|
||||||
},
|
},
|
||||||
externalResources() {
|
externalResources() {
|
||||||
@ -269,7 +275,7 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin<Partial<ObsidianO
|
|||||||
htmlPlugins() {
|
htmlPlugins() {
|
||||||
const plugins: PluggableList = [rehypeRaw]
|
const plugins: PluggableList = [rehypeRaw]
|
||||||
|
|
||||||
plugins.push(ObsidianCheckboxes({ enabled: opts.enableCheckbox }).htmlPlugins())
|
plugins.push.apply(ObsidianCheckboxes({ enabled: opts.enableCheckbox }).htmlPlugins())
|
||||||
|
|
||||||
return plugins
|
return plugins
|
||||||
},
|
},
|
||||||
|
|||||||
@ -57,6 +57,6 @@ export type QuartzParserInstance = {
|
|||||||
name: string
|
name: string
|
||||||
textTransform: (ctx: BuildCtx, src: string | Buffer) => string | Buffer
|
textTransform: (ctx: BuildCtx, src: string | Buffer) => string | Buffer
|
||||||
markdownPlugins: (ctx: BuildCtx) => Pluggable
|
markdownPlugins: (ctx: BuildCtx) => Pluggable
|
||||||
htmlPlugins: () => Pluggable
|
htmlPlugins: () => Pluggable | Pluggable[]
|
||||||
externalResources: () => JSResource | string
|
externalResources: () => JSResource | string
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user