7.10.2011

*The|CSS| *|CSStyle|* RULES are MoCSSt ObCSSd Greatest *|CSS*|hits... !

AAT Font Quality Specification

*The|CSS|*|CSStyle|* RULES are analCSSt (MoCSSt ObCSSd Greatest *|CSS*|hits)... !LINE LAYOUT CHARACTERISTICS

...and I can't WAIT to A use them ALL!!!

a desert line goes here
OVERVIEW

Functional proofs check whether features work the way they were intended, and whether the Line Layout 'mort' tables give reasonable relations between glyphs which produce the appropriate appearance. The designs of the outlines were fixed much earlier in the process, and the designer is not looking at device-specific rendering. All the designer needs is a general idea of which glyphs s/he is looking at and whether the Line Layout tables are inserting them correctly.

Note that a consideration of line layout behavior may be required at very early stages of font design (e.g. outlines and instructions). This is true if the typographer wishes to use control points in the glyphs to control certain aspects of layout functionality (e.g. optical edges of glyphs, or baseline positions). Since tools like TrueEdit do not currently permit the introduction or specification of control points in the outline data, the typographer will have to coordinate the use of multiple tools to get the correct data into the font.

Resolution does not matter, so this is needed for on-screen only. Printouts are sometimes very handy, however. Printouts would be most useful for things related to collision avoidance, where a higher resolution may reveal that a situation which looks bad on screen really is acceptable. In addition, printouts allow the designer to flag errors for later correction.

The following miscellaneous points are provided as tips for obtaining the best Line Layout results, based on past experience:

Adhere to recommendations in the Font Feature Registry.

Don't change the default names.

Use the "user space" for new features which are likely to be unique to one font.

Provide a complete 'prop' table. See theTrueEdit User Manual for 'prop' table specifications.

If you have 'mort' features, set appropriate defaults.

Provide complete glyph sets as appropriate for all feature settings (e.g., full set of accented glyphs for Small Caps).

Provide a 'just' table, even if you just let TrueEdit build it automatically and don't touch it.

POSITIONAL EFFECTS

Justification

AAT defines the process of justifying text in somewhat different terms than a typographer might be used to. Each glyph in the font is assigned various characteristics that control how that glyph is used during the process of justifying a line of text. This section defines some of the terms used in AAT-related dicussions of justification.

For the most part, when you specify factors in the justification table, you're specifying ems (i.e. points for a 1-point glyph). Thus, for example, if you identify a range of glyphs as permitting the addition of 0.25 on the right-hand side, that means that 40-point versions of those glyphs can add up to 10 points of whitespace (0.25 times 40). Numbers you specify for the grow case should be positive, and represent the upper limit on the extra amount of spacing (possibly whitespace, and possibly other effects) that can be added on one or both sides of a glyph or range of glyphs Ñ the two sides of the glyph are separately controllable. Numbers specified for the shrink case should be negative, and represent the amount of spacing that can be removed.

Glyphs are assigned a justification priority that can be one of four values. The highest value is kashida priority, followed by whitespace, intercharacter, and finally the lowest priority (called the null priority). Glyphs at a higher priority have space added (or removed) up to their limits, before any glyphs at lower priorities are touched. This means that any glyphs that you wish to have participate early in the justification process should get higher priorities. Thus, because whitespace is a higher priority than intercharacter, justifying lines of text will usually only affect the whitespace glyphs on the line, leaving the intercharacter spacing alone. Only if the amount of extra space being distributed to the whitespace would exceed the specified glyphs' limits would the next lower priority level be used.

You have a lot of flexibility in assigning these priorities to glyphs. The simplest way is to always associate a glyph with a single priority and set of values. However, if you want more flexibility, a state table can be specified to give glyphs different priorities and factors in different contexts.

Many other kinds of special effects can be specified in the justification table. For example, ligature decomposition can be specified as happening automatically when a certain amount of whitespace gets added (or removed) from around a ligature. When whitespace amounts get too wide, you might want to designate glyphs as ductile (that is, they have a variant axis that changes their widths), stretchable (that is, they can be stretched mechanically), or capable of being substituted with different glyphs to make up some of the gap.

Here are some examples of the kinds of effects that you can specify via a justification table in your font:

 

  1. Ligatures that are both ductile and decomposing. Consider making your ligatures ductile so that the stems move apart under justification. Clearly there will be a point where this no longer looks good, and you'd like the ligature to break apart. You can do both of these with the same glyph.
  2. Substitution of wider forms. Rather than always adding whitespace, consider substituting specially designed alternative glyphs that can take up some of that extra space. For example, a finial 'e' might normally only be expected to appear at the end of the line, because the tail flourish would look bad in the middle of the line. However, if a lot of whitespace is being added to a line, consider allowing the finial form to take up some of that space.
  3. Cursively connected (script) Roman fonts. Traditional Arabic typography justifies text through the use of special extender bars. With AAT, there's no reason why Roman text can't do that. Imagine a Poetica-like font where the connections gracefully extend themselves under justification, while maintaining the connections between letters.
  4. Text that automatically copyfits itself. Specify a ductile axis of width for regular body text letters, so that (within limits you specify) the text automatically widens itself subtly to justify a line.
  5. Whitespace that behaves differently in different contexts. You might want single whitespace glyphs to be amplified differently than groups of whitespace glyphs. Alternatively, you might want whitespace that appear next to letters that already have a lot of sidebearing to be amplified differently than whitespace next to letters with long straight sides.
  6. Decomposition of ligatures into other forms. Since you specify the glyphs that a ligature decomposes into, these don't have to be the same as the glyphs that originally constituted the ligature.
  7. Adding intermediate glyphs. You can specify the addition of a bullet, fleuron or some other decorative glyph between pairs of text glyphs that are being justified wide, for special visual effects. (See the title to the movie Willow (W * i * l * l * o * w) for an example of this.)

Kerning

You have a range of options for including kerning data with your font. As well as the traditional list of kerning pairs, you also have the option of using class-based kerning, where glyphs can be grouped together into classes based on similar behaviors (for example, a, a-acute and a-dieresis all probably behave similarly in most respects for kerning). Finally, state-based kerning is the most powerful and flexible kerning method, allowing you to have kerning that varies by context. This allows you to solve problems such as the following:

fig. 8-1 State-based kerning.

 

Tracking

Tracking, in AAT terms, refers to changes in letterspacing dependent on the point size of the text and another quantity known as the track number. The default track number is 0, but you may wish to still specify data for this track, for example to tighten up spacing at large point sizes or amplify spacing at small sizes.

 

Baselines

Information on this topic will be added at a later time.

 

Ligature processing

Information on this topic will be added at a later time.

 

Caret angle

Information on this topic will be added at a later time.

 

'fmtx' table explanation.

The "font metrics" tables has been added to allow a font to describe font wide metric values for line spacing and caret angle independent of the values currently used by QuickDraw.

Today QuickDraw reads the values for ascent and descent out of the 'hhea' table directly and scales them by the point size. This means that the font never gets a chance to hint these. To complicate matters, QuickDraw also requires all of the glyphs in the font to fit within those heights, and any glyphs that do not are "squished" to fit. In light of this, most 7.0 fonts ship with values for ascent and descent large enough to insure that their glyphs are not squished, even if that meant adding more space between lines.

ATSUI no longer requires a font's glyphs to fit within any prescribed band, and therefore does not perform any squishing. However, AAT fonts may still want to keep their original line spacing values so that they continue to work in QuickDraw. To accomodate this, the 'fmtx' table is added, providing a second place within a font for the designer to specify its line spacing and caret angle. One other advantage to using the 'fmtx' is that it allows the designer to hint (and apply variations) to the metric values, if so desired.

This diagram shows the "magic glyph", a non-printing glyph that contains only the eight points shown below. This glyph can be placed anywhere in the font; typically, it is the last glyph.

fig. 8-2 The "Magic Glyph".

Set the left sidebearing for the magic glyph to be equal to the Vertical After x coordinate.

Definitions for the points are as follows:

Horizontal Before: Has a coordinate of (0,+y), where y is the desired ascent, usually a little above the cap height (H O).

Horizonal After: Has a coordinate of (0, Ðy), where y is the desired descent, usually the bottom of the common glyphs that descend below the baseline (g, y, j).

Horizontal Caret Base: Has a coordinate of (x,0), where x is either positive or negative. This is equivalent to the Caret Offset value in the 'hhea'. For a non-italic font, this will be the same as the Vertical Caret Base point (0,0).

Horizontal Caret Head: Shares the same y-coordinate as the Horizontal Before. Its coordinate is set so that the angle between this point and the Horizontal Caret Base is the desired caret angle. For a non-italic font, this will be the same as the Horizontal Before point (0,+y).

Vertical Before: Has the coordinate (+x,0) where x is 1/2 of the desired line spacing when this font is drawn vertically. Vertical Before and Vertical After are opposite each other, the same distance from the 0,0 coordinate.

Vertical After: Has the coordinate (Ðx,0) where x is 1/2 of the desired line spacing when this font is drawn vertically. Vertical Before and Vertical After are opposite each other, the same distance from the 0,0 coordinate. Use the (-x) coordinate for the glyph's left sidebearing.

Vertical Caret Base: Will be the coordinate (0,0) for all Apple fonts.

Vertical Caret Head: Will be the coordinate (x, 0) where x is the Vertical Before for all Apple fonts.

 

NON-POSITIONAL EFFECTS

Glyph properties

Information on this topic will be added at a later time.

 

Metamorphosis processing

Information on this topic will be added at a later time.

 

Ligature decomposition

Information on this topic will be added at a later time.




Arleigh Movitz
The Apple Fonts Group

...and I can't WAIT to use them ALL!!!

AAT Font Quality Specification *The|CSS|*|CSStyle|* RULES are analCSSt (MoCSSt ObCSSd Greatest *|CSS*|hits)... !LINE LAYOUT CHARACTERISTICS ...and I can't WAIT to A use them ALL!!! OVERVIEW Functional proofs check whether features work the way they were intended, and whether the Line Layout 'mort' t ...» more Dogmeat