feat: 需要手动开启宏

This commit is contained in:
purocean
2021-11-04 14:32:39 +08:00
parent 4df9801c7c
commit 9bac08261d
3 changed files with 26 additions and 27 deletions
+5 -1
View File
@@ -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
<= <expression> =>
+19 -25
View File
@@ -20,35 +20,29 @@ export default {
ctx.markdown.registerPlugin(md => {
const render = md.render
md.render = (src: string, env?: any) => {
let vars: Record<string, any> | 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)
}
})
+2 -1
View File
@@ -161,5 +161,6 @@ export type BuildInActions = {
export type BuildInActionName = keyof BuildInActions
export type FrontMatterAttrs = {
'headingNumber'?: boolean
headingNumber?: boolean,
enableMacro?: boolean,
}