BackNextContents


The sfnt format


The font file format used by QuickDraw GX is known as sfnt, after the resource tag the Macintosh uses internally to track font data. The name sfnt itself stands for "spline font".

The sfnt is the same format TrueType fonts have used since they were first introduced on the Macintosh. Under GX, an sfnt file can contain a TrueType font, a PostScript Type 1 font, or other information; thus the more general name has been adopted.

Files

An sfnt file can take three forms:

The "suitcase" file in which fonts are commonly shipped

File type: ffil

The individual font file

File type: tfil

The "bass" file, which includes sfnt data in the data fork

File type: bass

TrueEdit can open all three varieties of sfnt file (although it can only edit TrueType fonts). Note that sfnt is not the file type, but the tag of the font resource inside the file.

Tables

The sfnt file format is based on tables. An sfnt file may contain many tables, each of which specifies a single aspect of the font such as glyph outlines, horizontal metrics, glyph effects, font family names, or other information.

The tables exist independently, each adding a single piece of functionality to the font. (A few important interdependencies are outlined later in this chapter.) In a broad sense, font development for QuickDraw GX consists simply of adding tables to an sfnt.

Each table is identified by a four-letter tag which abbreviates its function. These tags are similar to those used for the file types, creator codes, and resource types familiar to Macintosh programmers. As with those tags, Apple has reserved all tags consisting of all lowercase letters for its own use.

[!]There are some tags which appear to have three letters, e.g. cvt. These tags do in fact contain four characters, the last being a space.

Guide to sfnt table tags

With the release of QuickDraw GX, 33 standard tables have been defined by Apple. A brief description of each table follows. Full definitions are included in the documents The TrueType Font Format Specification and QuickDraw GX Font Formats.

Tag

Meaning

Description

acnt

Accent attachment

Compact format for describing composite glyphs where the components are not transformed.

bdat

Bitmap data

Embedded bitmap data for multiple sizes and glyph ranges.

bloc

Bitmap location

Index to embedded bitmap data in bdat.

bsln

Baseline

Values which specify alignment between layout runs, used for both inter-script alignment and single-script effects like drop capitals.

cmap

Character to index mapping

Language- and script-specific character-to-glyph mapping.

cvar

CVT variation

Changes to the 'cvt ' table so that instructions can work under GX style variations.

cvt 

Control value

List of key values, such as stem weights, referred to by a font's instructions.

fdsc

Font descriptors

Font self-identification values used for font and style matching.

feat

Feature name

Organization of glyph effects into user-visible features, and pointers to their names.

fmtx

Font metrics

Basic metrics information in control-point format, so it can be affected by instructions and style variations.

fpgm

Font program

Definitions of TrueType functions for use by a font's instructions.

fvar

Font variations

Directory to a font's GX style variation axes and instances.

glyf

Glyph data

Outline and instruction data for each glyph.

gvar

Glyph variations

Point position changes for each glyph under GX style variations.

hdmx

Horizontal device metrics

Cached integer metrics for specific pixel-per-em sizes (usually screen sizes).

head

Font header

Basic functional information for a font.

hhea

Horizontal header

Basic metrics and functional information for a horizontally-written font.

hmtx

Horizontal metrics

Left side bearing and advance width for each glyph (actual data, not a cache).

just

Justification

Justification classes, priorities, and actions for glyphs or ranges of glyphs.

kern

Kerning

Kerning data (context-specific glyph positioning).

lcar

Ligature caret

Insertion point information for glyphs composed of multiple characters.

loca

Index to location

Location of glyph data within the glyf table.

maxp

Maximum profile

Basic information on the font's instructions and required system resources.

mort

Glyph metamorphosis

Glyph effects including contextual and non-contextual substitution, rearrangement, and ligature formation.

name

Name

Localized name strings for the font and its effects.

opbd

Optical bounds

Values for each glyph to improve optical alignment at the edges of text.

OS/2

OS/2 header

Information required for cross-platform compatibility.

post

PostScript

PostScript names for each glyph, for compatibility with PostScript output devices.

prep

Preprogram

Instructions executed once for each change in font size, transformation, or variation.

prop

Glyph properties

Unicode directionality class, reordering, and hanging properties for each glyph.

trak

Tracking

Tracks for size-dependent global adjustment of spacing.

vhea

Vertical header

Basic metrics and functional information for a vertically-written font.

vmtx

Vertical metrics

Top bearing and advance height for each glyph.

Use of tables

Each table within an sfnt provides a specific element of functionality to a font. Some of the tables were defined with the original release of TrueType in 1991, while others are new with QuickDraw GX.

In addition to Apple, developers of font tools, font formats, and platforms have used the extensible nature of the sfnt to define their own proprietary tables.

TrueType 1.0

A TrueType 1.0 font, also called a simple font, must contain the following nine basic tables for Macintosh compatibility:

Tag

Meaning

cmap

Character to index mapping

glyf

Glyph data

head

Font header

hhea

Horizontal header

hmtx

Horizontal metrics

loca

Index to location

maxp

Maximum profile

name

Name

post

PostScript

TrueType 1.0 defines four additional tables to be used for instruction data:

Tag

Meaning

cvt 

Control value

fpgm

Font program

hdmx

Horizontal device metrics

prep

Preprogram

These four tables are optional, and may be omitted if your font contains no instruction data.

TrueType GX

TrueType GX defines 19 new tables which may be present in a font. There is no strict definition of a TrueType GX font, except that it contains one or more of the tables defined for GX. The GX tables can be divided into several groups, according to what kinds of functionality they support. (This is not a strict division, as some tables support several different kinds of GX effects.)

Glyph effects are defined in two tables:

Tag

Meaning

feat

Feature name

mort

Glyph metamorphosis

Position effects require six tables:

Tag

Meaning

fmtx

Font metrics

just

Justification

kern

Kerning

lcar

Ligature caret

opbd

Optical bounds

trak

Tracking

 

Seven tables are used primarily for language and script support:

Tag

Meaning

acnt

Accent attachment

bdat

Bitmap data

bloc

Bitmap location

bsln

Baseline

prop

Glyph properties

vhea

Vertical header

vmtx

Vertical metrics

 

Style variations use three tables:

Tag

Meaning

cvar

CVT variation

fvar

Font variations

gvar

Glyph variations

 

The remaining two tables are used for font self-identification:

Tag

Meaning

fdsc

Font descriptors

OS/2

OS/2

 

Font tools

Because the table structure is so flexible, many font tools (including TrueEdit) define their own tables to store additional tool-specific information in an sfnt during font development.

TrueEdit's tables are:

Tag

Meaning

clas

Glyphs may be grouped together into named classes for ease of editing. This table contains those class names and associations. The clas table is not an officially defined TrueType GX table.

TRnn

TrueEdit source (where nn is a two-digit number). These tables are used by TrueEdit to store information about user choices for various editors.

 

Details of the TrueEdit source table formats are included in Appendix C.

The Apple tool RoyalT defines the tables edt0 and edt1 to store tool-specific information.

These tables contain no information relevant to the graphics system or to the end user, and only add to the font's size. Thus these tables should be stripped from a font before it is shipped to end users.

[!]Keep a reference copy of the font with all tables intact, for use in later font development.

Other formats and platforms

The sfnt format was originally developed for TrueType fonts on the Macintosh. Since then, other sfnt tables have been defined for use with other platforms (such as Windows) and other font formats (such as PostScript Type 1). For more information, contact the developer of the platform or format.

Although, beginning with GX, PostScript Type 1 fonts for the Macintosh are shipped in the sfnt format, TrueEdit does not support them. You may be able to open the fonts and copy and paste tables between fonts, but you can't do actual GX development work.

[!]TrueEdit may prevent you from opening a font which contains Type 1 tables. If you do succeed in opening the font, you should expect TrueEdit to crash at any time.


BackNextContents

Arleigh Movitz (movitz@apple.com)
Dave Opstad (opstad@apple.com)
Kristian Walsh (walsh.k@euro.apple.com)