|
@@ -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
|