diff --git a/kernel/model/format.go b/kernel/model/format.go index 6addbb25a..a7e1b9c8e 100644 --- a/kernel/model/format.go +++ b/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