Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
Vanessa 2025-07-18 09:32:47 +08:00
commit 09f5569663
2 changed files with 22 additions and 10 deletions

View file

@ -207,8 +207,9 @@ func refreshDynamicRefTexts0(updatedDefNodes map[string]*ast.Node, updatedTrees
// 1. 更新引用的动态锚文本
treeRefNodeIDs := map[string]*hashset.Set{}
var changedNodes []*ast.Node
var refs []*sql.Ref
for _, updateNode := range updatedDefNodes {
refs, parentNodes, childNodes := getRefsCacheByDefNode(updateNode)
refs, changedNodes = getRefsCacheByDefNode(updateNode)
for _, ref := range refs {
if refIDs, ok := treeRefNodeIDs[ref.RootID]; !ok {
refIDs = hashset.New()
@ -218,12 +219,6 @@ func refreshDynamicRefTexts0(updatedDefNodes map[string]*ast.Node, updatedTrees
refIDs.Add(ref.BlockID)
}
}
if 0 < len(parentNodes) {
changedNodes = append(changedNodes, parentNodes...)
}
if 0 < len(childNodes) {
changedNodes = append(changedNodes, childNodes...)
}
}
for _, n := range changedNodes {
updatedDefNodes[n.ID] = n

View file

@ -1594,7 +1594,8 @@ func (tx *Transaction) writeTree(tree *parse.Tree) (err error) {
return
}
func getRefsCacheByDefNode(updateNode *ast.Node) (ret []*sql.Ref, changedParentNodes, changedChildNodes []*ast.Node) {
func getRefsCacheByDefNode(updateNode *ast.Node) (ret []*sql.Ref, changedNodes []*ast.Node) {
changedNodesMap := map[string]*ast.Node{}
ret = sql.GetRefsCacheByDefID(updateNode.ID)
if nil != updateNode.Parent && ast.NodeDocument != updateNode.Parent.Type &&
updateNode.Parent.IsContainerBlock() && updateNode == treenode.FirstLeafBlock(updateNode.Parent) {
@ -1607,7 +1608,9 @@ func getRefsCacheByDefNode(updateNode *ast.Node) (ret []*sql.Ref, changedParentN
parentRefs := sql.GetRefsCacheByDefID(parent.ID)
if 0 < len(parentRefs) {
ret = append(ret, parentRefs...)
changedParentNodes = append(changedParentNodes, parent)
if _, ok := changedNodesMap[parent.ID]; !ok {
changedNodesMap[parent.ID] = parent
}
}
}
}
@ -1621,11 +1624,25 @@ func getRefsCacheByDefNode(updateNode *ast.Node) (ret []*sql.Ref, changedParentN
childRefs := sql.GetRefsCacheByDefID(n.ID)
if 0 < len(childRefs) {
ret = append(ret, childRefs...)
changedChildNodes = append(changedChildNodes, n)
changedNodesMap[n.ID] = n
}
return ast.WalkContinue
})
}
if ast.NodeHeading == updateNode.Type && "1" == updateNode.IALAttr("fold") {
// 如果是折叠标题,则需要向下查找引用
children := treenode.HeadingChildren(updateNode)
for _, child := range children {
childRefs := sql.GetRefsCacheByDefID(child.ID)
if 0 < len(childRefs) {
ret = append(ret, childRefs...)
changedNodesMap[child.ID] = child
}
}
}
for _, n := range changedNodesMap {
changedNodes = append(changedNodes, n)
}
return
}