Multidimensional bracket layers

It has been supporting multidimensional bracket layers for a while. It works the same way, just that more conditions have to be met at the same time. They kick in when all the comma-separated values in brackets are exceeded.

Thanks for the info! Does it work the same for reverse bracket layers?

For context I was trying out 2D bracket layers for a weight and slant axis (to change from double story to single story “a”) but couldn’t get the reverse brackets to work

Never tried, but should work the same.

Just to clarify… the layer name would look something like this:
Condensed Thin[100, 50]
where 100 is the weight and 50 is the width.
Is that right?

@Jscruggs Yes that is what it would look like. I’m not sure that we need to have the layer name before it anymore though (i.e. just naming the layer “[100, 50]” would work)

@mekkablue I have got it working now within the preview panel but it does not export properly to a variable font. When exporting to a variable font it properly adds a new glyph with the suffix “.varAlt01” but it fails to switch out the two glyphs. Is there an issue with my setup or does Glyphs App not yet write feature variations for multidimensional bracket layers?

This is in the standard Glyphs App version 2.5.1. The cutting edge version crashes trying to open the file

Just doing [100, 50] is not really helpful for breaking in the second master. Currently Glyphs respects the second number but not for breaking.

I plan to change the bracket layer syntax from [100]/]100] to [<100, >50]. So you can more explicitly say for what range the layer is made for.
So [100] would be [>100] (or [100] for compatibility with older files)
and ]100] > [<100].
And then you can specify it for each axis.


Have you implemented this yet?

Not yet. I’m working on it.

It’s generally working with the two-axis variable font I’m working on, but I’ve run into a snag:

The bracket I’m using ([550]) is only along the weight axis for six masters, if it matters. It’s working for most of the glyphs that I’m using the bracket trick with. (I’m new to using this technique, FWIW.)

The following characters all run into this issue: centsuperior, dollarsuperior, centinferior, dollarinferior

With the current implementation of the bracket trick, how would someone enable feature variations to take effect in a 2 dimensional designspace where the axes have an inverse relationship?

As an example, for something with width and weight, your designspace would be a square. Within this designspace you could have an alternate glyph sub in above a certain weight and width location [600, 75] or you could have it sub below or until a certain weight and width location ]600, 75], but is there currently a way to have the substitution take effect when [<600, >75]? (using the new syntax like @GeorgSeifert did above)

I have this problem also. It’s working properly on the variable font preview but it’s not working on the font view, axis praxis, etc…

Even so, I’m not sure if my set up is correct.
I want to the see the changes happening between 400 and 700 (width)


Any help?

Hi, sorry to bug about this, but I could really use this. Has this, or a workaround, been implemented for variable font exports yet? It still only works for the first axis for me.

This will be available, soon.

1 Like

Hey Georg, what is the current syntax for breaking in the second master. When I try “[X, Y]”, I got mixed results. In Variable Font Preview, it works for both axes. But anywhere else it respects only first value. If I try “]X, Y]”, it works only in VFP. When I try any of syntaxes above, the rvrn feature is not even compiled in the file.

The revers bracket is used when you have the alternate shape in the default layer. So for the dollar case, the default Light master has the two full strokes and the Bold has only the two small blobs on the top and bottom. Then you add a [XX] layer to the Light (a light version of the not connected strokes) and a ]XX] layer to the Bold (a Bold with full strokes). So you basically X-interpolate.

Hi all, I see that Glyphs 3 provides a much clearer way to specify bracket layers on multiple axes (in fact, I didn’t realize that it was kinda possible in Glyphs 2; the tutorial says it isn’t). But when exporting a variable font, there is no glyph substitution and we have to edit the GSUB manually. Is there a plan to implement this in Glyphs 3?

It should generate the GSUB.

Thanks, Georg. I’ve just tried this out again and there is no glyph substitution in the OTvar exported from Glyphs 3. The GSUB simply contains the features that were in the font and there is no <FeatureVariations> section. Also, there seems to be some kind of spacing bug that wasn’t present in the Glyphs 2 OTvar export.

Am I doing something wrong or have the bracket layers in OTvars not been implemented yet? Thanks!


Struggling with the same issue. It seems like Glyphs is generating an .altVar01 character in the variable font file, choosing the bracket alternate as the default and not making the substituitons. The layer setup has been greatly improved though :slight_smile: