feat: scrub link formatting from toc entries
This commit is contained in:
		
							parent
							
								
									5befcf4780
								
							
						
					
					
						commit
						a26eb59392
					
				
					 2 changed files with 16 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -110,7 +110,10 @@ function canonicalizeCallout(calloutName: string): keyof typeof callouts {
 | 
			
		|||
// ([^\[\]\|\#]+)   -> one or more non-special characters ([,],|, or #) (name)
 | 
			
		||||
// (#[^\[\]\|\#]+)? -> # then one or more non-special characters (heading link)
 | 
			
		||||
// (|[^\[\]\|\#]+)? -> | 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 commentRegex = new RegExp(/%%(.+)%%/, "g")
 | 
			
		||||
// 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 { toString } from "mdast-util-to-string"
 | 
			
		||||
import Slugger from "github-slugger"
 | 
			
		||||
import { wikilinkRegex } from "./ofm"
 | 
			
		||||
 | 
			
		||||
export interface Options {
 | 
			
		||||
  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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const regexMdLinks = new RegExp(/\[([^\[]+)\](\(.*\))/, "g")
 | 
			
		||||
export const TableOfContents: QuartzTransformerPlugin<Partial<Options> | undefined> = (
 | 
			
		||||
  userOpts,
 | 
			
		||||
) => {
 | 
			
		||||
| 
						 | 
				
			
			@ -41,7 +43,16 @@ export const TableOfContents: QuartzTransformerPlugin<Partial<Options> | undefin
 | 
			
		|||
              let highestDepth: number = opts.maxDepth
 | 
			
		||||
              visit(tree, "heading", (node) => {
 | 
			
		||||
                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)
 | 
			
		||||
                  toc.push({
 | 
			
		||||
                    depth: node.depth,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue