feat: scrub link formatting from toc entries
This commit is contained in:
		@@ -110,7 +110,10 @@ function canonicalizeCallout(calloutName: string): keyof typeof callouts {
 | 
				
			|||||||
// ([^\[\]\|\#]+)   -> one or more non-special characters ([,],|, or #) (name)
 | 
					// ([^\[\]\|\#]+)   -> one or more non-special characters ([,],|, or #) (name)
 | 
				
			||||||
// (#[^\[\]\|\#]+)? -> # then one or more non-special characters (heading link)
 | 
					// (#[^\[\]\|\#]+)? -> # then one or more non-special characters (heading link)
 | 
				
			||||||
// (|[^\[\]\|\#]+)? -> | then one or more non-special characters (alias)
 | 
					// (|[^\[\]\|\#]+)? -> | then one or more non-special characters (alias)
 | 
				
			||||||
const wikilinkRegex = new RegExp(/!?\[\[([^\[\]\|\#]+)?(#+[^\[\]\|\#]+)?(\|[^\[\]\|\#]+)?\]\]/, "g")
 | 
					export const wikilinkRegex = new RegExp(
 | 
				
			||||||
 | 
					  /!?\[\[([^\[\]\|\#]+)?(#+[^\[\]\|\#]+)?(\|[^\[\]\|\#]+)?\]\]/,
 | 
				
			||||||
 | 
					  "g",
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
const highlightRegex = new RegExp(/==([^=]+)==/, "g")
 | 
					const highlightRegex = new RegExp(/==([^=]+)==/, "g")
 | 
				
			||||||
const commentRegex = new RegExp(/%%(.+)%%/, "g")
 | 
					const commentRegex = new RegExp(/%%(.+)%%/, "g")
 | 
				
			||||||
// from https://github.com/escwxyz/remark-obsidian-callout/blob/main/src/index.ts
 | 
					// from https://github.com/escwxyz/remark-obsidian-callout/blob/main/src/index.ts
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,6 +3,7 @@ import { Root } from "mdast"
 | 
				
			|||||||
import { visit } from "unist-util-visit"
 | 
					import { visit } from "unist-util-visit"
 | 
				
			||||||
import { toString } from "mdast-util-to-string"
 | 
					import { toString } from "mdast-util-to-string"
 | 
				
			||||||
import Slugger from "github-slugger"
 | 
					import Slugger from "github-slugger"
 | 
				
			||||||
 | 
					import { wikilinkRegex } from "./ofm"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface Options {
 | 
					export interface Options {
 | 
				
			||||||
  maxDepth: 1 | 2 | 3 | 4 | 5 | 6
 | 
					  maxDepth: 1 | 2 | 3 | 4 | 5 | 6
 | 
				
			||||||
@@ -24,6 +25,7 @@ interface TocEntry {
 | 
				
			|||||||
  slug: string // this is just the anchor (#some-slug), not the canonical slug
 | 
					  slug: string // this is just the anchor (#some-slug), not the canonical slug
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const regexMdLinks = new RegExp(/\[([^\[]+)\](\(.*\))/, "g")
 | 
				
			||||||
export const TableOfContents: QuartzTransformerPlugin<Partial<Options> | undefined> = (
 | 
					export const TableOfContents: QuartzTransformerPlugin<Partial<Options> | undefined> = (
 | 
				
			||||||
  userOpts,
 | 
					  userOpts,
 | 
				
			||||||
) => {
 | 
					) => {
 | 
				
			||||||
@@ -41,7 +43,16 @@ export const TableOfContents: QuartzTransformerPlugin<Partial<Options> | undefin
 | 
				
			|||||||
              let highestDepth: number = opts.maxDepth
 | 
					              let highestDepth: number = opts.maxDepth
 | 
				
			||||||
              visit(tree, "heading", (node) => {
 | 
					              visit(tree, "heading", (node) => {
 | 
				
			||||||
                if (node.depth <= opts.maxDepth) {
 | 
					                if (node.depth <= opts.maxDepth) {
 | 
				
			||||||
                  const text = toString(node)
 | 
					                  let text = toString(node)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  // strip link formatting from toc entries
 | 
				
			||||||
 | 
					                  text = text.replace(wikilinkRegex, (_, rawFp, __, rawAlias) => {
 | 
				
			||||||
 | 
					                    const fp = rawFp?.trim() ?? ""
 | 
				
			||||||
 | 
					                    const alias = rawAlias?.slice(1).trim()
 | 
				
			||||||
 | 
					                    return alias ?? fp
 | 
				
			||||||
 | 
					                  })
 | 
				
			||||||
 | 
					                  text = text.replace(regexMdLinks, "$1")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                  highestDepth = Math.min(highestDepth, node.depth)
 | 
					                  highestDepth = Math.min(highestDepth, node.depth)
 | 
				
			||||||
                  toc.push({
 | 
					                  toc.push({
 | 
				
			||||||
                    depth: node.depth,
 | 
					                    depth: node.depth,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user