Glyphs 3.0.3 released

by Rainer Erich Scheichelbauer

26 June 2021

It’s that time again: version 3.0.3 is out! Great news for owners of M1 Macs, and some cool new things for monospaced fonts and cap components …

Whatever you are doing, drop everything and choose Glyphs > Check for Updates… in order to get the latest and greatest version of your favorite font editor on your Mac:

We have a few nice enhancements for you. Read on.

Cap components

We rethought cap components from the ground up. They are much more flexible and make more sense now. When you set up a new cap component, generate a new glyph called _cap.strokeend, and inside, simply use two anchors node1 and node2, like this:

They represent the butt line of the shape you will later apply it to. I recommend to keep them horizontal or vertical, then they are easier to handle. Now, select a straight line segment on a shape, then right click to bring up the context menu, and pick Add Cap Component. Et voilà:

Cap components in action

The screenshot shows the same cap component used four times. You see, they adapt much better to the receiving shape.

And if you have cap components in an old project of yours, do not worry. The old cap-component algorithm is still supported, so Glyphs retains backwards compatibility to your old designs, as long as there are no node1 and node2 anchors in your _cap glyph.

Interpolation and variable fonts

In File > Font Info > Axes, you can now drag axes into a different order. This is important because in Adobe apps (and probably elsewhere too), the axis order determines the sorting of instances in the font menu.

And when it comes to axis mapping, axis locations and conditon statements in the feature code, we now clearly differentiate between internal and external coordinates. Internal coordinates, or ‘design coordinates’, are the axis coordinates used in File > Font Info > Masters. Internal coordinates are used throughout the app, e.g., in the brace and bracket layer interfaces, or with the condition statement in File > Font Info > Features. External coordinates, or ‘user coordinates’, are the coordinates presented to the user in the finished font files. You can translate from internal to external coordinates with Axis Location and Axis Mappings parameters.

Axis Location parameters are available in both File > Font Info > Masters and now also for instances in File > Font Info > Exports. E.g., you can map the Regular instance to Weight axis coordinate 400 like this:

Alternatively, in File > Font Info > Font, you can use the Axis Mappings parameter to link internal to external coordinates, and even do more complex mappings:

The range for the internal coordinates is determined by the actual axis positions of the masters in Font Info > Masters, whereas the range for external coordinates is determined by the Axis Location parameters in Font Info > Masters.

In further variable-font news, export of axis names to the STAT table has been improved. And feature variations now also export for cursive attachment, i.e., exit and entry anchors, very important for Arabic variable fonts.

In static font exports, you can add an InterpolationWeightY parameter for differentiate between x and y coordinates in interpolation. Nothing new, but now the preview respects the parameter and gets updated as soon as you add or change it. Speaking of static fonts, all coordinates are now properly rounded after interpolation.

And, Glyphs performs more checks and error reports at export, including impossible master setups or outlines that do not lend themselves to TT conversion for variable fonts. If you have been using the betas, you may have seen those already:

Recommended reading: The new Switching Shapes tutorial is a complete rewrite for Glyphs 3. It covers brace and bracket layers and the condition statement.

Monospaced fonts

Thanks to all the users who gave us valuable feedback, we could add a few improvements for creating monospaced fonts. It all depends on the use of the isFixedPitch custom parameter. You can add that parameter to File > Font Info > Font or now also in instances listed in File > Font Info > Exports:

Once isFixedPitch applies to a font export, it does two things: firstly, it sets the isFixedPitch bit in the post table (or in shorter notation: post.isFixedPitch), marking the font as monospaced. Secondly, it syncs all glyph widths in the font with space. Careful: if the parameter is added to File > Font Info > Font (rather than Exports), it does that in the .glyphs file already.

An application that looks for monospaced fonts may either check for the presence of post.isFixedPitch and/or scan the advance width of all glyphs in the font. That is why it’s a good thing that the parameter takes care of both.

You can also force the syncing behaviour with a number value called .monospace in File > Font Info > Masters. If you do it this way, the number value is used instead of the width of the space glyph. Either way, all widths will be listed as automated:

Another thing that is new, is that really all glyphs are set to the monospaced value (be it the width of the wordspace or the number value), and that includes nonspacing glyphs now. That may sound counterintuitive, but most algorithms that scan for monospaced fonts will skip fonts that have nonspacing marks with zero widths.

Mac name table

Internally, OpenType fonts consist of tables. One of these tables is the naming table or name table, which stores all kinds of wordings for the font: the family name, the style name, the copyright, you name it. It allows to store each of these entries for different languages and even different operating systems or ‘platforms’, as the spec calls them.

Typically, fonts created in this millennium would contain name table entries for the Mac platform and the Windows platform. This is also how Glyphs handles it by default: any name you enter in Font Info is stored for both platforms. Though, as it turns out, the differentiation between platforms has become more and more obsolete, and all software today can do just perfectly without the Mac entries. So, all you really need inside a font are the entries for the Windows platform. If you want Glyphs to export just the Windows entries, add an Export Mac Name Table Entries custom parameter to File > Font Info > Font or to an instance in File > Font Info > Exports:

Currently, the default value is on. So if there is no parameter, or the parameter is inactive, or the parameter is active (the parameter enabled) and turned on (the value of the parameter), Glyphs will still export name table entries for both platforms. So, if you do add the parameter, you will probably add it like this:

The first checkbox activates the parameter (if it is off, it will take the fallback value), the second checkbox determines its value.

OpenType features

We have a few improvements for tokens. First of all, when you edit your token code, the selection behaviour is much improved. Especially when you double click a word, the word gets selected and not the complete token.

With the class(ClassName) syntax, you can refer to the content of an OT class, e.g. like this:

$[name in class(Uppercase) and name contains ".ss"]

… which is the code for an OpenType class that contains all glyphs in the Uppercase class that are also part of a stylistic set.

You can now refer to things on the interpolated layer with the layer keyword. In case you are wondering, it is equivalent to layer0, but makes more sense. So you can do stuff like this:

@smallEnough = [
    $[layer.maxY < 500 and category like "Letter"]

pos T @smallEnough -150;
pos Y @smallEnough -100;
pos V @smallEnough -50;

The feature code parser has become more flexible in coding styles. It will allow class names that start with a period, e.g., @.connectors. And it will accept the pos x 10 y; order, next to pos x y 10;, for pair positionings.

And you will like that Window > Text Preview has become more responsive for changes in the feature code.

Anchor propagation

This one is little more complicated. Bear with us. Or skip this chapter if it doesn’t make sense to you.

In File > Font Info > Font and Exports, there is a new custom parameter called Propagate Anchors. It controls the propagation of top and bottom anchors in composites for mark attachment. Default is on. What does that mean? Take, for instance an Arabic behDotless-ar.medi:

Typically, you want the top and bottom anchors for two things: firstly, connecting components for composites like beh-ar.medi with a single dot below, or teh-ar.medi with two dots above, etc. And secondly, to provide a connection point for nonspacing marks that are placed with the two mark attachment OpenType features, mark Mark Positioning and mkmk Mark to Mark Attachment. If anchors propagate, then you do not need to set additional anchors in beh-ar.medi, e.g. for the vowel marks, because the anchors of its components ‘shine through’ to the composite. Thus, mark attachment also works in composites without additional anchors. This is the default, and also what you want in the very most cases.

However, the downside is that anchor propagation may increase the size of the mark and mkmk features significantly. And perhaps, in conjunction with a large kern feature, it may just be enough to even cause a subtable overflow and the font cannot export. In this case, consider adding this parameter and turn its value off, like this:

Then, only glyphs that actually contain these anchors will produce entries in mark and mkmk features.

PostScript autohinting

We updated the PS autohint binary with the very latest code from Adobe.

And we added Autohinting as an option for the Filter parameter. That way you can more precisely determine which glyphs do and do not get autohinted, because you can add include: or exclude: to the filter string. Here is an example:

Improvements and fixes

And of course, there have been a lot of tiny improvements and little fixes here and there, often hardly worth mentioning, but in total, they will improve your Glyphs experience. To pick out just a few:

  • Glyphs > Preferences > Shortcuts now allows F keys
  • New fonts now have a default italic angle setting in File > Font Info > Masters.
  • Glyphs now validates the postscriptName property in File > Font info > Font or Exports, and warns you about a faulty entry.
  • Improved setup of brace and bracket layers, and improved handling of complex bracket layer setups in OTVar export
  • Anchor selection is prevented when View > Show Anchors is off, but once you add an anchor, it is turned on again
  • Paths > Transformations > Cursify now also works for left slanting
  • Improved handling of custom parameters in Font Info (esp. with multiple selection)
  • Fixed problems with Wacom tablets in Font Info
  • Color font improvements: you can apply svg as a layer attribute via the context menu in the Layers palette, and you can apply a palette color (from the Color Palettes parameter) to master layers too.
  • Fixed a bug in the Round Font filter
  • Improved Knife tool (Shift-E) in edge situations, e.g., when cutting directly through a node
  • Improved masking components
  • Improved Arabic layout in Edit view and some decompositions in the Arabic glyph info
  • Improved decomposition of double marks with suffix, e.g.,
  • Faster Edit view update after changing vertical metrics in Font Info
  • The preview in the TT Instructions tool (shortcut I) is much improved more responsive
  • Improved RTL kerning
  • Further improved overlap removal
  • PS-to-TT conversion works better for shallow curves, and TT-to-PS conversion yields better results now
  • Improved measurements with the Measurement tool (shortcut L)
  • Improved rendering in Show all Instances
  • Improved export of variation selectors, advanceWidthMax for empty glyphs, fsSelection, and the Optical Size custom parameter.
  • Improved generation of OpenType feature Languagesystems, improved automatic class and feature generation
  • Plugin Manager can now handle dependencies
  • Many more font info properties are now in the Python wrapper
  • Syntax coloring is synced between macro window and feature view
  • Newline characters are prevented in tags
  • Added support for Salish
  • Improved French localization (thx Nathalie)
  • Import Manufacturer from a compiled .otf
  • Fixed import of old Mac font suitcases
  • Fixed encodingID export to UFO (thx Paul)

…and as always, improved stability and performance.

Stay healthy and take care, and hope to see you soon in person again.