mirror of
https://github.com/purocean/yn.git
synced 2026-09-24 15:46:02 +08:00
feat: 需要手动开启宏
This commit is contained in:
+5
-1
@@ -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> =>
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
})
|
||||
|
||||
@@ -161,5 +161,6 @@ export type BuildInActions = {
|
||||
export type BuildInActionName = keyof BuildInActions
|
||||
|
||||
export type FrontMatterAttrs = {
|
||||
'headingNumber'?: boolean
|
||||
headingNumber?: boolean,
|
||||
enableMacro?: boolean,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user