🐛 Embed blocks are exported incorrectly https://github.com/siyuan-note/siyuan/issues/12250

This commit is contained in:
Daniel 2024-08-15 18:07:40 +08:00
parent 1c174b2744
commit 05167fefe4
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
2 changed files with 23 additions and 7 deletions

View file

@ -1939,7 +1939,8 @@ func exportTree(tree *parse.Tree, wysiwyg, keepFold, avHiddenCol bool,
id := tree.Root.ID
// 解析查询嵌入节点
resolveEmbedR(ret.Root, blockEmbedMode, luteEngine, &[]string{})
depth := 0
resolveEmbedR(ret.Root, blockEmbedMode, luteEngine, &[]string{}, &depth)
// 收集引用转脚注
var refFootnotes []*refAsFootnotes

View file

@ -165,7 +165,7 @@ func renderBlockContentByNodes(nodes []*ast.Node) string {
return buf.String()
}
func resolveEmbedR(n *ast.Node, blockEmbedMode int, luteEngine *lute.Lute, resolved *[]string) {
func resolveEmbedR(n *ast.Node, blockEmbedMode int, luteEngine *lute.Lute, resolved *[]string, depth *int) {
var children []*ast.Node
if ast.NodeHeading == n.Type {
children = append(children, n)
@ -178,6 +178,11 @@ func resolveEmbedR(n *ast.Node, blockEmbedMode int, luteEngine *lute.Lute, resol
children = append(children, n)
}
*depth++
if 7 < *depth {
return
}
for _, child := range children {
var unlinks []*ast.Node
ast.Walk(child, func(n *ast.Node, entering bool) ast.WalkStatus {
@ -196,13 +201,15 @@ func resolveEmbedR(n *ast.Node, blockEmbedMode int, luteEngine *lute.Lute, resol
stmt = strings.ReplaceAll(stmt, editor.IALValEscNewLine, "\n")
sqlBlocks := sql.SelectBlocksRawStmt(stmt, 1, Conf.Search.Limit)
for _, sqlBlock := range sqlBlocks {
md := sqlBlock.Markdown
if "query_embed" == sqlBlock.Type {
continue
}
subTree, _ := LoadTreeByBlockID(sqlBlock.ID)
var md string
if "d" == sqlBlock.Type {
subTree, _ := LoadTreeByBlockID(sqlBlock.ID)
md, _ = lute.FormatNodeSync(subTree.Root, luteEngine.ParseOptions, luteEngine.RenderOptions)
} else if "h" == sqlBlock.Type {
subTree, _ := LoadTreeByBlockID(sqlBlock.ID)
h := treenode.GetNodeInTree(subTree, sqlBlock.ID)
var hChildren []*ast.Node
hChildren = append(hChildren, h)
@ -214,6 +221,9 @@ func resolveEmbedR(n *ast.Node, blockEmbedMode int, luteEngine *lute.Lute, resol
mdBuf.WriteString("\n\n")
}
md = mdBuf.String()
} else {
node := treenode.GetNodeInTree(subTree, sqlBlock.ID)
md, _ = lute.FormatNodeSync(node, luteEngine.ParseOptions, luteEngine.RenderOptions)
}
buf := &bytes.Buffer{}
@ -230,7 +240,7 @@ func resolveEmbedR(n *ast.Node, blockEmbedMode int, luteEngine *lute.Lute, resol
}
buf.WriteString("\n\n")
subTree := parse.Parse("", buf.Bytes(), luteEngine.ParseOptions)
subTree = parse.Parse("", buf.Bytes(), luteEngine.ParseOptions)
var inserts []*ast.Node
for subNode := subTree.Root.FirstChild; nil != subNode; subNode = subNode.Next {
if ast.NodeKramdownBlockIAL != subNode.Type {
@ -239,7 +249,12 @@ func resolveEmbedR(n *ast.Node, blockEmbedMode int, luteEngine *lute.Lute, resol
}
for _, insert := range inserts {
n.InsertBefore(insert)
resolveEmbedR(insert, blockEmbedMode, luteEngine, resolved)
if gulu.Str.Contains(sqlBlock.ID, *resolved) {
return ast.WalkContinue
}
resolveEmbedR(insert, blockEmbedMode, luteEngine, resolved, depth)
}
}
unlinks = append(unlinks, n)