I'm working on a font that has the standard letters a-z and A-Z. However, I also made another version of those characters, with fancy curls and such. The question is, where do I store those extra characters in the Unicode table? I thought I found a nice spot at the end of the Unicode table, but that turned out wrong. Those characters at the end are so-called Full Width Characters, meaning they sit in the middle of a square space. That destroys the spacing in my texts.
One other option is to store those extra characters in a random location, replacing the text with gibberish if you change the font. Or...
Please advise!
Comments
Instead (or in addition, whether or not you encode them), you should make them accessible by means of OpenType layout features. That means that each glyphs are accessed by means of the base character plus OpenType feature(s), and if the user switches fonts, that underlying character (the text) is always preserved. This also allows things like spell checkers to behave correctly, so it is just generally a Good Thing.
Exactly which OpenType feature(s) you use depends on the exact nature of the alternate glyphs. Perhaps “swsh” (swash) is appropriate, for fancy curls. Or maybe “salt” (stylistic alternate).
You may notice that there are a fair number of fonts from Adobe that use PUA codepoints for alternate glyphs, as well as having appropriate OpenType features. That was a decision made by me in the quite early days of OpenType, and if I had it to do over again, I wouldn’t do it. Honestly, hardly anybody ever used the PUA codepoints as an access route, and now that is just weird crud left in the fonts.
If the user can't use it in a specific app and ask me about it, I told them that they should complain to the app developers to fix the buggy app to support standards, or use other app instead. Because it's an app problem, not a font problem.
I do understand that the people selling commercial licenses are forced to produce non-compliant fonts. For business reasons it makes total sense for them .. but in doing so they remove the incentive of the app developers to improve their apps.. hence perpetuating the cycle.