diff --git a/help/FEATURES.md b/help/FEATURES.md index 86e8ef3d..bde1aa79 100644 --- a/help/FEATURES.md +++ b/help/FEATURES.md @@ -1,5 +1,6 @@ --- headingNumber: true +enableMacro: true customVar: Hello --- @@ -428,12 +429,15 @@ xml 代码块 第一行注释需要有 `--drawio--` 文字 变量名 | 类型 | 描述 ---- | ----- | --- headingNumber | boolean | 是否开启页面标题序号编号 +enableMacro | boolean | 是否开启宏替换 ## 宏替换 Yank Note 运行你在页面中嵌入宏,用以动态的替换文档。 -### 语法 +### 使用 + +使用前需要先在 Front Matter 开启宏替换,定义 `enableMacro: true` ```md <= => diff --git a/src/renderer/plugins/markdown-macro.ts b/src/renderer/plugins/markdown-macro.ts index 0a0e038b..8d02212e 100644 --- a/src/renderer/plugins/markdown-macro.ts +++ b/src/renderer/plugins/markdown-macro.ts @@ -20,35 +20,29 @@ export default { ctx.markdown.registerPlugin(md => { const render = md.render md.render = (src: string, env?: any) => { - let vars: Record | undefined - function getVars () { - if (!vars) { - const file = env.file || {} - vars = { - $ctx: ctx, - $doc: { - basename: file.name ? file.name.substring(0, file.name.lastIndexOf('.')) : '', - ...ctx.lib.lodash.pick(env.file, 'name', 'repo', 'path', 'content', 'status') - }, - ...env.attributes - } - } - - return vars || {} + if (!env.attributes || !env.attributes.enableMacro) { + return render.call(md, src, env) } - const keys = Object.keys(env.attributes) - if (keys.length > 0) { - const reg = /<=((?:.|\s)+?)=>/g - src = src.replace(reg, (match, $1) => { - try { - return macro($1.trim(), getVars()) - } catch {} - - return match - }) + const file = env.file || {} + const vars = { + $ctx: ctx, + $doc: { + basename: file.name ? file.name.substring(0, file.name.lastIndexOf('.')) : '', + ...ctx.lib.lodash.pick(env.file, 'name', 'repo', 'path', 'content', 'status') + }, + ...env.attributes } + const reg = /<=((?:.|\s)+?)=>/g + src = src.replace(reg, (match, $1) => { + try { + return macro($1.trim(), vars) + } catch {} + + return match + }) + return render.call(md, src, env) } }) diff --git a/src/renderer/types.ts b/src/renderer/types.ts index 0acb6f06..51c6af89 100644 --- a/src/renderer/types.ts +++ b/src/renderer/types.ts @@ -161,5 +161,6 @@ export type BuildInActions = { export type BuildInActionName = keyof BuildInActions export type FrontMatterAttrs = { - 'headingNumber'?: boolean + headingNumber?: boolean, + enableMacro?: boolean, }