Adding Apple Typography Information to an Opentype Font
Apple's native typography support in OS X is driven by a set of special tables stored in Truetype and Opentype fonts. This information includes ligatures and features such as small caps.
Opentype has similar facilities. Unfortunately Apple's code won't read the tables describing these facilities. So if you want to use a standard Opentype font with Pages and other Apple tools that understand typography, you'll need to add the appropriate tables to your OTF fonts.
Fortunately this is fairly easy. The resources you need are available at Apple's Font Tools web page.
You'll need to download the tools and documentation. However this page will include examples that should make it fairly easy to do what you want.
You'll probably want to create two files for each font: font.mif and font.jif. Font.mif contains ligatures and features such as small caps and old-style figures. Font.jif contains specifications for justification.
To apply these, you use a command like this:
ftxenhancer -l -m j.mif -j j.jif jansontextltstd-roman.otfThis says to apply the MIF from j.mif and the JIF from j.jif to the font. It changes the font in place, so you probably want to save a copy of the original somewhere.
The files I used for all 4 weights of Janson Text are given at the end. They should work for many cases, although you'll need to change the glyph indices (i.e. the numbers used to refer to specific characters in the font).
I recommend disabling the font using Fontbook and exiting from any application that might be using it before doing the update, and then reenabling it.
The features show up in the "Typography" function of the "Show Fonts" dialog. You need to click the icon that looks like a gear, at the lower left of the dialog, to bring up the Typography menu. The first couple of times I did this after changing the font, I got an odd display from the Typography menu, but it eventually stabilized. I've also seen it come up with both "unchanged" and a function checked. But again, once you check the option you want, it should work. (You may need to go back and forth the first time to make it work.)
Getting Information about the Font
The MIF file refers to glyphs either by name or glyph index in the font. However with my test Adobe OTF font I found that the Apple tools don't seem to be able to see the names, so I had to use the glyph index. The glyph index is visible if you open the file in Fontlab. (Fontlab in demo mode should work fine, as you don't need to save the font.) Otherwise, you can use the Apple tools:
ftxanalyzer -u j.list jansontextltstd-roman.otfwill produce a listing of the font which you can open in Textedit, by Unicode index.
ftxdumperfuser -u -t cmap jansontextltstd-roman.otf > j.cmapwill produce a listing that goes from Unicode name or index to glyph index. This would actually be enough, except that some of the glyphs I needed don't have Unicode names. I needed the output of ftxanalyzer to identify them. But clearly Fontlab is the easier approach.
Making up the MIF file
Here's an annotated MIF file, for Janson Text LT Std, an Adobe Opentype font. You'll probably want to look at Apple's user manual for the font tools, at the Font Tools web page, when reading this. Once you've done one, it's pretty quick to do other fonts.
// Janson Text LT STD OTF, from Adobe // I'm using glyph indices rather than names because the Apple tools // don't seem to be able to get at the names in this font. That // requires using // fi and fl ligatures // You can simply copy this header Type LigatureList Name Ligatures Namecode 1 Setting Common Ligatures Settingcode 2 Default yes Orientation HV Forward yes Exclusive no // Here's the list of ligatures. 109 is the "fi" ligature. // 71 and 74 are "f" and "i" List 109 71 74 110 71 77 // OSF. In theory lower case should have setting code of 0, but that // confuses the applications, which expect 0 to be the default // Again, you can probably just copy this header // Name and namecode refer to the menu entry. If there are several // options, such as OSF and fixed-width OSF, both have the same // name/namecode but different Setting and Setttingcode. // Settingcode of 0 is the default. The software will get confused if // you use 0 for your option. Type Noncontextual Name Number Case Namecode 21 Setting Old Style Numbers Settingcode 1 Default no Orientation HV Forward yes Exclusive yes // 17 - 26 are the digits 0-9, 234-243 are the old style figure versions 17 234 18 235 19 236 20 237 21 238 22 239 23 240 24 241 25 242 26 243 // OSF fixed width. // This is just like the above, but uses fixed width versions of the // OSF figures. This is a non-standard feature of Janson Text. You won't // find it in most Adobe OTF files. // Note that this is the case name/namecode as the previous. However // it's setting 2 rather than 1. The menu will show "unchanged", then // option 1, then option 2. Type Noncontextual Name Number Case Namecode 21 Setting Old Style Fixed Width Numbers Settingcode 2 Default no Orientation HV Forward yes Exclusive yes 17 326 18 327 19 328 20 329 21 330 22 331 23 332 24 333 25 334 26 335 // small caps. // Note that the fi and fl ligatures are here. I have to map the // normal ligatures into the small caps versions. I have put ligature // substitution first, so fi is already converted to the fi // ligature when this is done. Type Noncontextual Name Letter Case Namecode 3 Setting Small Caps Settingcode 3 Default no Orientation HV Forward yes Exclusive yes // fi and fl ligatures 109 341 110 340 // use OSF figures, since people normally expect small caps and OSF // to go together 17 234 18 235 19 236 20 237 21 238 22 239 23 240 24 241 25 242 26 243 // lowercase letters to small caps 66 247 67 248 68 249 69 250 70 251 71 252 72 253 73 254 74 255 75 256 76 257 77 258 78 259 79 260 80 261 81 262 82 263 83 264 84 265 85 266 86 267 87 268 88 269 89 270 90 271 91 272 // ampersand to small caps ampersand // Look carefully at your font. You may find small versions of question mark, // slash, and various other characters 7 232
A JIF File
This part is optional. By default, Apple does justification by expanding the space both within words and between them. This is generally considered a bad idea. When you get to the point of needing to increase spacing within a word, you should probably not be doing justification.
The following JIF file changes the policy so that spacing between letters is never adjusted. It's all done by adjusting the space. If you look at the documentation you'll find that you can create all kinds of interesting policies, some of which change the letter shapes as well.
I will say that I can't get many of the features of JIF to work as documented. This example does what it claims, but policies that involve combining the two types of spacing don't seem to do quite what is documented. Furthermore, the feature that is supposed to decompose ligatures when spacing is changed doesn't seem to work.
Direction H TablePart Factors Whitespace 1 Interchar (all others) Interchar 0 BeforeGrow 0.05 BeforeShrink -0.02 AfterGrow 0.05 AfterShrink -0.02 GrowFlags intercharacterPriority ShrinkFlags whitespacePriority Whitespace 0 BeforeGrow 0.2 BeforeShrink -0.02 AfterGrow 0.2 AfterShrink -0.02 GrowFlags whitespacePriority unlimited ShrinkFlags whitespacePriority unlimited
Here are the files I used for Janson Text LT Std:
- MIF file for Roman. This is the file described here.
- MIF file for Italic, Bold, and Bold Italic.
Similar, but they don't have small caps.
- JIF file. The same JIF file works for all weights, and in fact would work for any font where you want the same policy.
For more information, contact
Last updated: Sunday, 23-Jan-2005 18:59:50 EST
© 2005 Charles Hedrick. All rights reserved.