Browse Source

:bug: 优化排版功能导致文档部分内容丢失 Fix https://github.com/siyuan-note/siyuan/issues/5515

Liang Ding 3 years ago
parent
commit
3c7e42ef3e
1 changed files with 6 additions and 20 deletions
  1. 6 20
      kernel/model/format.go

+ 6 - 20
kernel/model/format.go

@@ -40,7 +40,6 @@ func AutoSpace(rootID string) (err error) {
 	defer util.ClearPushProgress(100)
 
 	generateFormatHistory(tree)
-
 	luteEngine := NewLute()
 	// 合并相邻的同类行级节点
 	ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
@@ -53,31 +52,18 @@ func AutoSpace(rootID string) (err error) {
 		return ast.WalkContinue
 	})
 
-	// 合并相邻的文本节点
-	for {
-		var unlinks []*ast.Node
-		ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
-			if entering && ast.NodeText == n.Type && nil != n.Next && ast.NodeText == n.Next.Type {
-				n.Tokens = append(n.Tokens, n.Next.Tokens...)
-				unlinks = append(unlinks, n.Next)
-			}
-			return ast.WalkContinue
-		})
-		for _, n := range unlinks {
-			n.Unlink()
-		}
-		if 1 > len(unlinks) {
-			break
-		}
-	}
-
 	rootIAL := tree.Root.KramdownIAL
 	addBlockIALNodes(tree, false)
 
-	luteEngine.SetAutoSpace(true)
+	// 第一次格式化为了合并相邻的文本节点
 	formatRenderer := render.NewFormatRenderer(tree, luteEngine.RenderOptions)
 	md := formatRenderer.Render()
 	newTree := parseKTree(md)
+	// 第二次格式化启用自动空格
+	luteEngine.SetAutoSpace(true)
+	formatRenderer = render.NewFormatRenderer(newTree, luteEngine.RenderOptions)
+	md = formatRenderer.Render()
+	newTree = parseKTree(md)
 	newTree.Root.ID = tree.ID
 	newTree.Root.KramdownIAL = rootIAL
 	newTree.ID = tree.ID