Set the collected anchors.

git-svn-id: http://svn.robofab.com/branches/ufo3k@407 b5fa9d6c-a76f-4ffd-b3cb-f825fc41095c
This commit is contained in:
Tal Leming 2011-10-17 16:27:33 +00:00
parent 08732962b4
commit 105f895277

View File

@ -833,7 +833,7 @@ def _readGlyphFromTree(tree, glyphObject=None, pointPen=None, formatVersions=(1,
raise GlifLibError("The outline element contains unknwon attributes.") raise GlifLibError("The outline element contains unknwon attributes.")
haveSeenOutline = True haveSeenOutline = True
if pointPen is not None: if pointPen is not None:
buildOutline(pointPen, children, formatVersion, identifiers) buildOutline(glyphObject, pointPen, children, formatVersion, identifiers)
elif glyphObject is None: elif glyphObject is None:
continue continue
elif element == "advance": elif element == "advance":
@ -945,7 +945,7 @@ pointAttributes = set(["x", "y", "type", "smooth", "name", "identifier"])
pointSmoothOptions = set(("no", "yes")) pointSmoothOptions = set(("no", "yes"))
pointTypeOptions = set(["move", "line", "offcurve", "curve", "qcurve"]) pointTypeOptions = set(["move", "line", "offcurve", "curve", "qcurve"])
def buildOutline(pen, xmlNodes, formatVersion, identifiers): def buildOutline(glyphObject, pen, xmlNodes, formatVersion, identifiers):
anchors = [] anchors = []
for node in xmlNodes: for node in xmlNodes:
if len(node) != 3: if len(node) != 3:
@ -967,11 +967,24 @@ def buildOutline(pen, xmlNodes, formatVersion, identifiers):
_buildOutlineComponent(pen, (attrs, children), formatVersion, identifiers) _buildOutlineComponent(pen, (attrs, children), formatVersion, identifiers)
else: else:
raise GlifLibError("Unknown element in outline element: %s" % element) raise GlifLibError("Unknown element in outline element: %s" % element)
if glyphObject is not None and formatVersion == 1 and anchors:
if not anchorsValidator(anchors):
raise GlifLibError("GLIF 1 anchors are not properly formatted.")
_relaxedSetattr(glyphObject, "anchors", anchors)
def _buildAnchorFormat1(point): def _buildAnchorFormat1(point):
if point.get("type") != "move": if point.get("type") != "move":
return None return None
anchor = dict(x=point.get("x"), y=point.get("y"), name=point.get("name")) x = point.get("x")
y = point.get("y")
if x is None:
raise GlifLibError("Required x attribute is missing in point element.")
if y is None:
raise GlifLibError("Required y attribute is missing in point element.")
x = _number(x)
y = _number(y)
name = point.get("name")
anchor = dict(x=y, y=y, name=name)
return anchor return anchor
def _buildOutlineContour(pen, (attrs, children), formatVersion, identifiers): def _buildOutlineContour(pen, (attrs, children), formatVersion, identifiers):