From f64e277ca28b68774265c1c8fd07f8494a76bd07 Mon Sep 17 00:00:00 2001 From: saberzero1 Date: Thu, 31 Oct 2024 19:38:58 +0100 Subject: [PATCH] Comment regex (fixes https://github.com/jackyzha0/quartz/issues/1114) --- quartz.config.ts | 3 +- .../plugins/transformers/presets/default.ts | 2 +- .../plugins/transformers/presets/obsidian.ts | 1 + .../plugins/transformers/text/htmlComments.ts | 28 +++++++++++++++++++ quartz/plugins/transformers/text/index.ts | 1 + .../plugins/transformers/text/ofmComments.ts | 15 ++++++++-- 6 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 quartz/plugins/transformers/text/htmlComments.ts diff --git a/quartz.config.ts b/quartz.config.ts index bf5c59c63..9f7e77794 100644 --- a/quartz.config.ts +++ b/quartz.config.ts @@ -59,7 +59,8 @@ const config: QuartzConfig = { }, }, plugins: { - transformers: Presets.DefaultPreset(), + //transformers: Presets.DefaultPreset(), + transformers: Presets.ObsidianPreset(), filters: [Plugin.RemoveDrafts()], emitters: [ Plugin.AliasRedirects(), diff --git a/quartz/plugins/transformers/presets/default.ts b/quartz/plugins/transformers/presets/default.ts index aeb9f0e14..4a096d971 100644 --- a/quartz/plugins/transformers/presets/default.ts +++ b/quartz/plugins/transformers/presets/default.ts @@ -7,7 +7,7 @@ import * as Resources from "../resources" export const DefaultPreset: QuartzTransformerPlugin = () => { return { textTransformers: [ - Text.ObsidianFlavoredMarkdownComments(), + Text.HtmlComments(), Text.ObsidianFlavoredMarkdownCallouts(), Text.ObsidianFlavoredMarkdownWikilinks(), ], diff --git a/quartz/plugins/transformers/presets/obsidian.ts b/quartz/plugins/transformers/presets/obsidian.ts index d8600d718..4ab1d93de 100644 --- a/quartz/plugins/transformers/presets/obsidian.ts +++ b/quartz/plugins/transformers/presets/obsidian.ts @@ -7,6 +7,7 @@ import * as Resources from "../resources" export const ObsidianPreset: QuartzTransformerPlugin = () => { return { textTransformers: [ + Text.HtmlComments(), Text.ObsidianFlavoredMarkdownComments(), Text.ObsidianFlavoredMarkdownCallouts(), Text.ObsidianFlavoredMarkdownWikilinks(), diff --git a/quartz/plugins/transformers/text/htmlComments.ts b/quartz/plugins/transformers/text/htmlComments.ts new file mode 100644 index 000000000..49e3c6ed2 --- /dev/null +++ b/quartz/plugins/transformers/text/htmlComments.ts @@ -0,0 +1,28 @@ +import { TextTransformerPlugin } from "../../types" + +const commentRegex = new RegExp(//gms) +const codeBlockRegex = new RegExp(/(```.*?```)/gms) + +export const HtmlComments: TextTransformerPlugin = () => { + return { + name: "ObsidianFlavoredMarkdownComments", + transformation(_ctx, src) { + // do comments at text level + if (src instanceof Buffer) { + src = src.toString() + } // capture all codeblocks before parsing comments + const codeBlocks = Array.from(src.matchAll(codeBlockRegex), (x) => x[1].toString()) + + src = src.replaceAll(codeBlockRegex, "###codeblockplaceholder###") + + src = src.replaceAll(commentRegex, "") + + // Restore codeblocks + codeBlocks.forEach((codeblock) => { + src = src.replace("###codeblockplaceholder###", codeblock) + }) + + return src + }, + } +} diff --git a/quartz/plugins/transformers/text/index.ts b/quartz/plugins/transformers/text/index.ts index 7254ef9b4..97161cb9a 100644 --- a/quartz/plugins/transformers/text/index.ts +++ b/quartz/plugins/transformers/text/index.ts @@ -1,3 +1,4 @@ +export { HtmlComments } from "./htmlComments" export { ObsidianFlavoredMarkdownCallouts } from "./ofmCallouts" export { ObsidianFlavoredMarkdownComments } from "./ofmComments" export { ObsidianFlavoredMarkdownWikilinks } from "./ofmWikilinks" diff --git a/quartz/plugins/transformers/text/ofmComments.ts b/quartz/plugins/transformers/text/ofmComments.ts index 7b69895b7..dbf022496 100644 --- a/quartz/plugins/transformers/text/ofmComments.ts +++ b/quartz/plugins/transformers/text/ofmComments.ts @@ -1,6 +1,7 @@ import { TextTransformerPlugin } from "../../types" -const commentRegex = new RegExp(/%%[\s\S]*?%%/g) +const commentRegex = new RegExp(/%%.*?%%/gms) +const codeBlockRegex = new RegExp(/(```.*?```)/gms) export const ObsidianFlavoredMarkdownComments: TextTransformerPlugin = () => { return { @@ -11,7 +12,17 @@ export const ObsidianFlavoredMarkdownComments: TextTransformerPlugin = () => { src = src.toString() } - src = src.replace(commentRegex, "") + // capture all codeblocks before parsing comments + const codeBlocks = Array.from(src.matchAll(codeBlockRegex), (x) => x[1].toString()) + + src = src.replaceAll(codeBlockRegex, "###codeblockplaceholder###") + + src = src.replaceAll(commentRegex, "") + + // Restore codeblocks + codeBlocks.forEach((codeblock) => { + src = src.replace("###codeblockplaceholder###", codeblock) + }) return src },