feat(ofm): add options to parse arrows (#713)
* feat(ofm): add options to parse arrows Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com> * feat(ofm): add options to parse arrows Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com> --------- Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com>
This commit is contained in:
		@@ -25,6 +25,7 @@ Finally, Quartz also provides `Plugin.CrawlLinks` which allows you to customize
 | 
				
			|||||||
    - `callouts`: whether to enable [[callouts]]. Defaults to `true`
 | 
					    - `callouts`: whether to enable [[callouts]]. Defaults to `true`
 | 
				
			||||||
    - `mermaid`: whether to enable [[Mermaid diagrams]]. Defaults to `true`
 | 
					    - `mermaid`: whether to enable [[Mermaid diagrams]]. Defaults to `true`
 | 
				
			||||||
    - `parseTags`: whether to try and parse tags in the content body. Defaults to `true`
 | 
					    - `parseTags`: whether to try and parse tags in the content body. Defaults to `true`
 | 
				
			||||||
 | 
					    - `parseArrows`: whether to try and parse arrows in the content body. Defaults to `true`.
 | 
				
			||||||
    - `enableInHtmlEmbed`: whether to try and parse Obsidian flavoured markdown in raw HTML. Defaults to `false`
 | 
					    - `enableInHtmlEmbed`: whether to try and parse Obsidian flavoured markdown in raw HTML. Defaults to `false`
 | 
				
			||||||
    - `enableYouTubeEmbed`: whether to enable embedded YouTube videos using external image Markdown syntax. Defaults to `false`
 | 
					    - `enableYouTubeEmbed`: whether to enable embedded YouTube videos using external image Markdown syntax. Defaults to `false`
 | 
				
			||||||
- Link resolution behaviour:
 | 
					- Link resolution behaviour:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,6 +23,7 @@ export interface Options {
 | 
				
			|||||||
  callouts: boolean
 | 
					  callouts: boolean
 | 
				
			||||||
  mermaid: boolean
 | 
					  mermaid: boolean
 | 
				
			||||||
  parseTags: boolean
 | 
					  parseTags: boolean
 | 
				
			||||||
 | 
					  parseArrows: boolean
 | 
				
			||||||
  parseBlockReferences: boolean
 | 
					  parseBlockReferences: boolean
 | 
				
			||||||
  enableInHtmlEmbed: boolean
 | 
					  enableInHtmlEmbed: boolean
 | 
				
			||||||
  enableYouTubeEmbed: boolean
 | 
					  enableYouTubeEmbed: boolean
 | 
				
			||||||
@@ -36,6 +37,7 @@ const defaultOptions: Options = {
 | 
				
			|||||||
  callouts: true,
 | 
					  callouts: true,
 | 
				
			||||||
  mermaid: true,
 | 
					  mermaid: true,
 | 
				
			||||||
  parseTags: true,
 | 
					  parseTags: true,
 | 
				
			||||||
 | 
					  parseArrows: true,
 | 
				
			||||||
  parseBlockReferences: true,
 | 
					  parseBlockReferences: true,
 | 
				
			||||||
  enableInHtmlEmbed: false,
 | 
					  enableInHtmlEmbed: false,
 | 
				
			||||||
  enableYouTubeEmbed: true,
 | 
					  enableYouTubeEmbed: true,
 | 
				
			||||||
@@ -111,6 +113,8 @@ function canonicalizeCallout(calloutName: string): keyof typeof callouts {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export const externalLinkRegex = /^https?:\/\//i
 | 
					export const externalLinkRegex = /^https?:\/\//i
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const arrowRegex = new RegExp(/-{1,2}>/, "g")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// !?               -> optional embedding
 | 
					// !?               -> optional embedding
 | 
				
			||||||
// \[\[             -> open brace
 | 
					// \[\[             -> open brace
 | 
				
			||||||
// ([^\[\]\|\#]+)   -> one or more non-special characters ([,],|, or #) (name)
 | 
					// ([^\[\]\|\#]+)   -> one or more non-special characters ([,],|, or #) (name)
 | 
				
			||||||
@@ -294,6 +298,18 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin<Partial<Options>
 | 
				
			|||||||
            ])
 | 
					            ])
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          if (opts.parseArrows) {
 | 
				
			||||||
 | 
					            replacements.push([
 | 
				
			||||||
 | 
					              arrowRegex,
 | 
				
			||||||
 | 
					              (_value: string, ..._capture: string[]) => {
 | 
				
			||||||
 | 
					                return {
 | 
				
			||||||
 | 
					                  type: "html",
 | 
				
			||||||
 | 
					                  value: `<span>→</span>`,
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					            ])
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          if (opts.parseTags) {
 | 
					          if (opts.parseTags) {
 | 
				
			||||||
            replacements.push([
 | 
					            replacements.push([
 | 
				
			||||||
              tagRegex,
 | 
					              tagRegex,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user