diff --git a/src/diana/sgfParser/collection.py b/src/diana/sgfParser/collection.py --- a/src/diana/sgfParser/collection.py +++ b/src/diana/sgfParser/collection.py @@ -4,84 +4,90 @@ from .gameRecord import GameRecord class Collection: - def __init__(self,s): - self.gameTrees=[] - i=skipWhitespace(s,0) - if i>=len(s): return - elif not GameTree.fits(s,i): - raise ParserError("expected a GameTree starting with '('",s,i) - while GameTree.fits(s,i): - i,x=GameTree.create(s,i) + def __init__(self, s): + self.gameTrees = [] + i = skipWhitespace(s, 0) + if i >= len(s): + return + elif not GameTree.fits(s, i): + raise ParserError("expected a GameTree starting with '('", s, i) + while GameTree.fits(s, i): + (i, x) = GameTree.create(s, i) self.gameTrees.append(x) - if i=len(s) or s[i]!=")": - raise ParserError("expected end of a GameTree marked by ')'",s,i) - i=skipWhitespace(s,i+1) - return (i,res) + subroot = x.getNode(0) + subroot.parent = y + if y: + y.addChild(subroot) + i = skipWhitespace(s, i) + + if i >= len(s) or s[i] != ")": + raise ParserError("expected end of a GameTree marked by ')'", s, i) + i = skipWhitespace(s, i+1) + return (i, res) ## Expand multiple games into distinct GameTrees and yield each. def listGames(self): - if len(self.nodes)==0: return None + if len(self.nodes) == 0: + return None for node in self.nodes[0].listGINodes(): yield GameRecord(self._buildSubtree(node)) - def getNode(self,i): - if 0<=i