From b6d961f3471c1a7ea9652749426e805a85fb848c Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Sat, 10 Dec 2022 18:13:30 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E6=94=AF=E6=8C=81=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E5=AD=90=E6=96=87=E6=A1=A3=E5=AF=BC=E5=87=BA=20Word/PDF=20http?= =?UTF-8?q?s://github.com/siyuan-note/siyuan/issues/3219?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/export_merge.go | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/kernel/model/export_merge.go b/kernel/model/export_merge.go index 8c182620c..140e804ea 100644 --- a/kernel/model/export_merge.go +++ b/kernel/model/export_merge.go @@ -28,8 +28,10 @@ func mergeSubDocs(rootTree *parse.Tree) (ret *parse.Tree, err error) { return } - for i := 0; i < 1024; i++ { - if err = walkBlock(ret, rootBlock); nil != err { + insertPoint := rootTree.Root.LastChild + for { + i := 0 + if err = walkBlock(insertPoint, rootBlock, i); nil != err { return } @@ -40,34 +42,42 @@ func mergeSubDocs(rootTree *parse.Tree) (ret *parse.Tree, err error) { return } -func walkBlock(tree *parse.Tree, block *Block) (err error) { +func walkBlock(insertPoint *ast.Node, block *Block, level int) (err error) { + level++ for _, c := range block.Children { - if err = walkBlock(tree, c); nil != err { + if err = walkBlock(insertPoint, c, level); nil != err { return } } - for i := len(block.Children) - 1; -1 < i; i-- { - c := block.Children[i] - nodes, loadErr := loadTreeNodes(c.Box, c.Path) + for _, c := range block.Children { + nodes, loadErr := loadTreeNodes(c.Box, c.Path, level) if nil != loadErr { return } for j := len(nodes) - 1; -1 < j; j-- { - tree.Root.LastChild.InsertAfter(nodes[j]) + insertPoint.InsertAfter(nodes[j]) } } block.Children = nil return } -func loadTreeNodes(box string, p string) (ret []*ast.Node, err error) { +func loadTreeNodes(box string, p string, level int) (ret []*ast.Node, err error) { tree, err := LoadTree(box, p) if nil != err { return } + hLevel := level + if 6 < level { + hLevel = 6 + } + + heading := &ast.Node{Type: ast.NodeHeading, HeadingLevel: hLevel} + heading.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(tree.Root.IALAttr("title"))}) + tree.Root.PrependChild(heading) for c := tree.Root.FirstChild; nil != c; c = c.Next { ret = append(ret, c) }