AAT Font Quality Specification
(AAT) LINE LAYOUT CHARACTERISTICS
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:

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:
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