summaryrefslogtreecommitdiff
path: root/scripts/lib/fontbuild/decomposeGlyph.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/lib/fontbuild/decomposeGlyph.py')
-rw-r--r--scripts/lib/fontbuild/decomposeGlyph.py28
1 files changed, 20 insertions, 8 deletions
diff --git a/scripts/lib/fontbuild/decomposeGlyph.py b/scripts/lib/fontbuild/decomposeGlyph.py
index b3db2d6..8cab1b4 100644
--- a/scripts/lib/fontbuild/decomposeGlyph.py
+++ b/scripts/lib/fontbuild/decomposeGlyph.py
@@ -2,11 +2,23 @@ def decomposeGlyph(font, glyphName):
"""Moves the components of a glyph to its outline."""
glyph = font[glyphName]
- for component in glyph.components:
- componentGlyph = font[component.baseGlyph]
- for contour in componentGlyph:
- contour = contour.copy()
- contour.scale(component.scale)
- contour.move(component.offset)
- glyph.appendContour(contour)
- glyph.clear(contours=False, anchors=False, guides=False)
+ deepCopyContours(font, glyph, glyph, (0, 0), (1, 1))
+ glyph.clearComponents()
+
+
+def deepCopyContours(font, parent, component, offset, scale):
+ """Copy contours to parent from component, including nested components."""
+
+ for nested in component.components:
+ deepCopyContours(
+ font, parent, font[nested.baseGlyph],
+ (offset[0] + nested.offset[0], offset[1] + nested.offset[1]),
+ (scale[0] * nested.scale[0], scale[1] * nested.scale[1]))
+
+ if component == parent:
+ return
+ for contour in component:
+ contour = contour.copy()
+ contour.scale(scale)
+ contour.move(offset)
+ parent.appendContour(contour)