Clever way to make a font with only uppercase letters?

Roger S. Nelsson's picture

When generating an OpenType font that only contains uppercase letters, is there some clever trick to avoid redundant information/data?

1) If one makes the font without glyphs in the lowercase slots, the user will get "missing glyphs" when typing without Caps Lock on - not good.

2) If one copies the uppercase glyphs to the lowercase slots, one have to take care to make the kerning work between the sets - effectively doubling the outline data and quadrupling the kerning data. I don't like this redundancy and would prefer to avoid it. But as I use class-kerning anyway this is probably the solution I'll end up using...

3) One could use the uppercase glyphs as composites in the lowercase slots, but this may perhaps create problems (I don't think I've ever encountered a font with composites in the basic ASCII set - so I guess this is not good...). This would still need 4 times the kerning pairs, but at least the outline data will not be double.

4) In OpenType one could use glyph substitution to map all lowercase input to the uppercase letters. This would still require the lowercase glyphs to be present, but they could just be empty. But what OpenType feature should then be used to make this switch? - it would have to be always-on...

So... have anyone found a clever way to make an uppercase-only OpenType font?
What is your preferred method?

cerulean's picture

5) You can assign more than one Unicode point to a glyph. The code field for "B" would show "0062 0042". I'm not sure if there are any problems inherent in the fact that it can have only one glyph name.

j.hadley's picture

#2/#3 are the most sensible solutions, considering platform and user frailties. There is no restriction on composites in the ASCII set.

Thomas Phinney's picture

Undurprisingly, I agree with Josh. A few more detailed comments.

2) If you use class kerning, there's zero increase in the amount of kerning data, so I don't understand the concern. The "kerning pairs" are purely virtual.

3) Composites is a fine idea for OT-TT. For OT-CFF, if the font is built with subroutinization, the duplicate glyphs will add next to nothing to the total size, and you don't need even need to use composites (though it might help you keep things straight during development).

4) That's a pretty weird choice. And in general, OT features should not map from one character to a different one.

5) You can assign more than one Unicode point to a glyph, but this has some unfortunate side effects for backtracing Unicode codepoints from glyphs. Given (3), this would seem unnecessary.

Cheers,

T

Roger S. Nelsson's picture

Thanks for the extra suggestion and comments. Much appreciated.
And if not even Adobes own font expert knows of a special clever way to make uppercase-only fonts, then probably no-one does. ;)

As I thought: I'll make, kern and space the uppercase, and then copy them to the lowercase slots before adding the diacritics as composites - using class-kerning based on the kerning of the uppercase glyphs. This will leave _some_ "redundant" data, but is probably the best option compatibility- and encoding-wise... Better to make a normal, working font, than risk trouble by being "clever". :)

Roger

Syndicate content Syndicate content