Bug: Kerning cannot be set for private use area characters

I am developing a font for a constructed language whose code points begin at 0x100000. Everything has worked great so far, but then I started attempting to kern.

The glyph inspector shows the Kerning and Group boxes on the left and right sides, but the kerning commands (Ctrl+Opt+Left, Ctrl+Opt+Right, Cmd+Opt+Left, Cmd+Opt+Right) have no effect. Typing numbers directly into the Kerning fields appears to work at first, but after selecting and deselecting the glyph, any information entered into the Kerning fields is lost.

I verified that Kerning Roman characters works properly. When selecting the second of two Roman characters in Text mode, two glyph inspectors are shown — a small inspector for the glyph on the left, and a large inspector for the selected glyph.

When choosing a Roman character and a private use character in Text mode, it is possible to kern the private use character if it appears to the right of the Roman character. It is not possible to kern the private use character if it appears to the left of the Roman character.

Within the app it is impossible two kern two private use characters that are next to each other.

I have determined that the core functionality exists by editing the .glyphs file by hand. If I insert a block like this into the .glyphs file:

kerning = {
[layer-id] = {
“private-use-character-0” = {
“private-use-character-0” = 500;

And reload from the .glyphs file, and enter two instances of “private-use-character-0” in Text mode, then I can observe that the kerning is working correctly by seeing the enormous gap between the two instances of the glyph. But I still cannot edit the kerning information from within the app.

Am I supposed to set metadata somewhere to enable kerning for my private use characters, or is this really a defect? I am using version 2.2.1 on OS X El Capitan (10.11.1), and I have no keyboard shortcuts in place that would interfere with the kerning nudges.

I am currently evaluating the product — I am 3 or 4 days in — and I am strongly motivated to buy the product, since it is great in most respects, but not being able to kern my characters without resorting to hand-editing the .glyphs file is sadly going to be a show stopper. Any help is greatly appreciated.

This plane 0x100000 is not assigned yet, so it is not PUA. Either try a PUA plane, or the PUA area of an assigned plane. Why not try the PUA of the BMP?

EDIT: My bad, I messed up hex and decimal digits when I looked at your PUA code. I will have a look at the implementation. You may need to fiddle around with the Glyph Data XML.

For reference, here is the Unicode FAQ on Private Use:


There are three private use areas (PUAs). These areas are:

BMP’s PUA: U+E000 … U+F8FF (6,400 characters)
Plane 15’s PUA-A: U+F0000 … U+FFFFD (65,534 characters)
Plane 16’s PUA-B: U+100000 … U+10FFFD (65,534 characters)

The Unicode Stability Policy guarantees that these blocks will remain PUAs forever.

The supplementary PUAs are generally intended for ligatures and other auxiliary glyphs for internal usage by a font, but this is not a strict requirement of Unicode. Is it a strict requirement of Glyphs, or is plane 16 generally not supported yet?

If you are saying that the BMP’s PUA supports kerning correctly, then I can of course relocate my characters. I presume that I can just regenerate my supplementary GlyphData.xml file with the new assignments? Or does the .glyphs file also embed code point assignments? I presume that it just refers to the characters symbolically.

I regenerated my GlyphData.xml file with new assignments, but that was insufficient. I also had to edit the .glyphs file. Fortunately I was able to reassign my characters to the BMP’s PUA by replacing:

unicode = 100


unicode = E

I verified that kerning is available on my characters now. Thank you for your assistance! Glyphs is a fantastic app, and I love it so far.

In the future, the app should probably support the PUAs of planes 15 and 16 as fully as it supports the BMP’s PUA.

I’ll check the kerning for upper plan glyphs.