diff options
-rw-r--r-- | scripts/lib/fontbuild/decomposeGlyph.py | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/scripts/lib/fontbuild/decomposeGlyph.py b/scripts/lib/fontbuild/decomposeGlyph.py index b3db2d6..b3cc8ea 100644 --- a/scripts/lib/fontbuild/decomposeGlyph.py +++ b/scripts/lib/fontbuild/decomposeGlyph.py @@ -3,10 +3,24 @@ def decomposeGlyph(font, glyphName): 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) + decompose(font, glyphName, component.baseGlyph, + component.offset, component.scale) glyph.clear(contours=False, anchors=False, guides=False) + + +def decompose(font, parentName, componentName, offset, scale): + """Copy contours to parent from component, including nested components.""" + + parent = font[parentName] + component = font[componentName] + + for nested in component.components: + decompose(font, parentName, nested.baseGlyph, + (offset[0] + nested.offset[0], offset[1] + nested.offset[1]), + (scale[0] * nested.scale[0], scale[1] * nested.scale[1])) + + for contour in component: + contour = contour.copy() + contour.scale(scale) + contour.move(offset) + parent.appendContour(contour) |