diff --git a/Lib/glyphsLib/classes.py b/Lib/glyphsLib/classes.py index 1451605da..ba4038bf3 100755 --- a/Lib/glyphsLib/classes.py +++ b/Lib/glyphsLib/classes.py @@ -1940,7 +1940,7 @@ def plistValue(self, format_version=2): ) @classmethod - def read(cls, line): + def read(cls, line, parent=None): """Parse a Glyphs node string into a GSNode. The format of a Glyphs node string (`line`) is: @@ -1966,10 +1966,11 @@ def read(cls, line): parser = Parser() node._userData = parser.parse(value) + node._parent = parent return node @classmethod - def read_v3(cls, lst): + def read_v3(cls, lst, parent=None): position = (lst[0], lst[1]) smooth = lst[2].endswith("s") if lst[2][0] == "c": @@ -1985,6 +1986,8 @@ def read_v3(cls, lst): node = cls(position=position, type=node_type, smooth=smooth) if len(lst) > 3: node._userData = lst[3] + + node._parent = parent return node @property @@ -2102,10 +2105,7 @@ def _parse_nodes_dict(self, parser, d): read_node = GSNode.read_v3 else: read_node = GSNode.read - for x in d: - node = read_node(x) - node._parent = self - self._nodes.append(node) + self.nodes.extend(read_node(x, self) for x in d) def __init__(self): self.closed = self._defaultsForName["closed"]