diff --git a/src/sgfParser/collection.py b/src/sgfParser/collection.py --- a/src/sgfParser/collection.py +++ b/src/sgfParser/collection.py @@ -30,7 +30,7 @@ class GameTree: if i>=len(s) or s[i]!="(": # print("error when parsing GameTree") return (start,None) - i,x=Node.create(s,start+1) + i,x=Node.create(s,i+1) if x is None: # print("error when parsing GameTree") return (i,None) @@ -67,14 +67,19 @@ class GameTree: return self.nodes[i] return None - ## Create and return a new GameTree containing the provided Node. + ## Create and return a new game tree containing the provided Node. # - # The Node objects are shared between the trees, not copied. - def _buildSubtree(self,node): - res=GameTree() + # Ancestor nodes are copied, descendants are taken directly. + def _buildSubtree(self,seedNode): + node=seedNode.copy() - return res - # chci celou cestu ke kořeni a všechny podstromy nodu + while node.parent: + newNode=node.parent.copy() + node.parent=newNode + newNode.setChildren([node]) + node=newNode + + return node ## Find and yield Game Info nodes. def _listGINodes(self):