UnnestComponents in VF

I find myself unable to export variable fonts because of incompatible glyphs which are all cases of nested components. I have the UnnestComponents filter added and checked for the VF export. I think that filter was heading this issue off before, but is now not working with the latest beta. Is that a known issue?

Or maybe I had it unchecked before, and the issue isn’t related to the Glyphs version.

But at least am I correct that this filter added as a custom parameter in variable-font exports is supposed to fix the failure to export due to nested components?

Should be.

Can you explain that?

/bracketright.case is a shifted component of /bracketright which is a rotated component of /bracketleft.

/Ecaron is a glyph including component /caroncomb.case which is a shifted component of /caroncomb.

/onehalf is a glyph including component /one.numr which is a shifted component of /one.dnom.

/tcommaaccent is a glyph including component /commaaccentcomb, which is a shifted and resized component of /comma.

/dollar.osf is a slightly resized component of /dollar which includes component /S.

Looking these over, I wonder if the filter only considers and unnests identical components, that is, components that don’t include shifts/rotations/resizes.

But those are precisely the ones I’d most want to keep as components in the working file.

But why are they not compatible?

That’s the error message I get when trying to export: “These glyphs are not compatible…”
They look fine to me with Show Master Compatibility and Show Variable Font Preview 3, and don’t have the red bar above.
Error disappears if I uncheck “UnnestComponents” in the VF custom parameters.

Can you send me the file?

sent to support

Any insights/solutions from looking at the file? Were you able to reproduce the error?

I’m having the same problem today. It seems that on VF exports, filters only run on the origin layer of each glyph, so all glyphs affected by the filter become incompatible.

@GeorgSeifert can you fix this, or should plugin developers fix it? Glyphs sends the layer to the plugin, so it can be fixed easily in the plugin by getting the parent glyph and running a for loop on the layers. Then the plugin works for both static and VF exports. But maybe Glyphs should be sending all layers to filter plugins instead of only the origin layers? I’m not sure.

I’m actually using @SCarewe’s plugin which does the same thing. I fixed my local copy of the plugin by just adding these two lines to the top of the filter method:

glyph = layer.parent
for layer in glyph.layers:

The Filter needs to check if there are more layers in the glyph.

Just so that I understand, how do I need to write my filter so that it works both for static and variable font exports?

Can I safely use

for layer in layer.parent.layers:
    # do stuff

?

Does that work in both static and variable exports?

for currLayer in layer.parent.layers:
    # do stuff

Sorry, yes, that’s what I meant (fixed the typo in my example). Thanks!