@@ -1594,7 +1594,8 @@ func (tx *Transaction) writeTree(tree *parse.Tree) (err error) {
15941594 return
15951595}
15961596
1597- func getRefsCacheByDefNode (updateNode * ast.Node ) (ret []* sql.Ref , changedParentNodes , changedChildNodes []* ast.Node ) {
1597+ func getRefsCacheByDefNode (updateNode * ast.Node ) (ret []* sql.Ref , changedNodes []* ast.Node ) {
1598+ changedNodesMap := map [string ]* ast.Node {}
15981599 ret = sql .GetRefsCacheByDefID (updateNode .ID )
15991600 if nil != updateNode .Parent && ast .NodeDocument != updateNode .Parent .Type &&
16001601 updateNode .Parent .IsContainerBlock () && updateNode == treenode .FirstLeafBlock (updateNode .Parent ) {
@@ -1607,7 +1608,9 @@ func getRefsCacheByDefNode(updateNode *ast.Node) (ret []*sql.Ref, changedParentN
16071608 parentRefs := sql .GetRefsCacheByDefID (parent .ID )
16081609 if 0 < len (parentRefs ) {
16091610 ret = append (ret , parentRefs ... )
1610- changedParentNodes = append (changedParentNodes , parent )
1611+ if _ , ok := changedNodesMap [parent .ID ]; ! ok {
1612+ changedNodesMap [parent .ID ] = parent
1613+ }
16111614 }
16121615 }
16131616 }
@@ -1621,11 +1624,25 @@ func getRefsCacheByDefNode(updateNode *ast.Node) (ret []*sql.Ref, changedParentN
16211624 childRefs := sql .GetRefsCacheByDefID (n .ID )
16221625 if 0 < len (childRefs ) {
16231626 ret = append (ret , childRefs ... )
1624- changedChildNodes = append ( changedChildNodes , n )
1627+ changedNodesMap [ n . ID ] = n
16251628 }
16261629 return ast .WalkContinue
16271630 })
16281631 }
1632+ if ast .NodeHeading == updateNode .Type && "1" == updateNode .IALAttr ("fold" ) {
1633+ // 如果是折叠标题,则需要向下查找引用
1634+ children := treenode .HeadingChildren (updateNode )
1635+ for _ , child := range children {
1636+ childRefs := sql .GetRefsCacheByDefID (child .ID )
1637+ if 0 < len (childRefs ) {
1638+ ret = append (ret , childRefs ... )
1639+ changedNodesMap [child .ID ] = child
1640+ }
1641+ }
1642+ }
1643+ for _ , n := range changedNodesMap {
1644+ changedNodes = append (changedNodes , n )
1645+ }
16291646 return
16301647}
16311648
0 commit comments