diff options
Diffstat (limited to 'scripts/lib/fontbuild/decomposeGlyph.py')
-rw-r--r-- | scripts/lib/fontbuild/decomposeGlyph.py | 28 |
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) |