Required Tables
cmap Character to glyph mapping Required
head Font header Required
hhea Horizontal header Required
hmtx Horizontal metrics Required
maxp Maximum profile Required
name Naming table Required
OS/2 Windows specific metrics Required
post PostScript information Required
TrueType Tables
cvt Control Value Table Ignored
fpgm Font program Ignored
glyf Glyph data Ignored
loca Index to location Ignored
prep CVT Program Ignored
PostScript Tables
CFF Compact font format Required
Advanced Typographic Tables
BASE Baseline data Ignored
GDEF Glyph definition data Ignored
GPOS Glyph positioning data For "kern" feature
GSUB Glyph substitution data For "vrt2" feature
JSTF Justification data Ignored
Bitmap Tables
EBDT Embedded bitmap data Ignored
EBLC Embedded bitmap location data Ignored
EBSC Embedded bitmap scaling data Ignored
Other OpenType Tables
DSIG Digital signature Ignored
gasp Grid-fitting/Scan-conversion Ignored
hdmx Horizontal device metrics Ignored
kern Kerning Ignored
LTSH Linear threshold data Ignored
PCLT PCL 5 data Ignored
VDMX Vertical device metrics Ignored
vhea Vertical metrics header For vertical mode
vmtx Vertical metrics For vertical mode

Following is a discussion of ATM's treatment of individual OpenType tables. Reviewers should be familiar with the v.1.2 OpenType Specification.

cmap

The cmap table version must be >= 0 (equivalent to ignoring it).

The OpenType specificationstrongly recommends, but ATM requires a cmap with PlatformID 3 (Microsoft) and EncodingID 1 (Unicode). This cmap must be in format 4 (Microsoft Standard).

ATM uses an optional cmap with PlatformID 4 (Custom) and EncodingID less than 256. This provides a "compatibility" cmap that contains the original font encoding for converted non-StandardEncoded Adobe fonts. The compatibility cmap must be in either format 0 (Apple Standard) or format 6 (Trimmed). Note: PlatformID 4 is not defined in the current OpenType specification.

All other cmaps are ignored. In particular, ATM does not use:

  • PlatformID 1 EncodingID 0 (Macintosh)
  • PlatformID 3 EncodingID 0 (Symbol)
  • PlatformID 3 EncodingID 2-6 (Far East)

Note: contrary to the current OpenType specification, ATM does not support PlatformID 3 EncodingID 0 for Symbol fonts, even for the font "Symbol".

The cmap table checksum must be correct.

head

ATM uses the following fields from the head table.

  • version (must be >= 1.0 and < 2.0)
  • fontRevision
  • magicNumber (must be 0x5F0F3CF5)
  • flags
  • unitsPerEm
  • lowestRecPPEM
  • xMin,yMin,xMax,yMax (for single master fonts only)
  • macStyle

If the OS/2.achVendID is 'ADBE' then fontRevision must be >= 1.0 (0.9 during beta).

When bit 12 of the flags field is set, it indicates a converted font, and ATM does the following:

  • Enable Non-linear external leading.
  • Disable support for multiple 'kern' subtables, for class kerning and for kern filtering.
  • Force OS/2.usWeightClass to either Regular (400) or Bold (700). Force panose.bWeight to either Book (5) or Bold (8), respectively.
  • Enable the algorithmic calculation of OS/2.sTypoAscender, OS/2.sTypoDescender and OS/2.sTypoLineGap for multiple master fonts.

All other bits in the flags field are ignored.

All other fields are ignored.

The head table checksum (and the checkSumAdjustment field) are currently ignored.

hhea

ATM uses the following fields from the hhea table.

  • version (must be >= 1.0 and < 2.0)
  • advanceWidthMax (for single master fonts only)
  • Ascender (for single master fonts only)
  • Descender (for single master fonts only)
  • caretSlopeRise
  • caretSlopeRun
  • numberOfHMetrics

All other fields are ignored.

The hhea table checksum must be correct.

hmtx

ATM uses the hMetrics array to obtain advance widths for single master fonts. This includes an implicit advance width when numberOfHMetrics is less than numGlyphs. ATM ignores leftSideBearing. The hmtx table is required but is actually ignored for Multiple Master fonts.

The hmtx table checksum must be correct.

maxp

ATM requires the maxp table and obtains numGlyphs from it. The version must be >= 0.5 (hexadecimal) and < 2.0. All other fields are ignored.

The maxp table checksum must be correct.

name

ATM requires a format 0 name table. Names must be defined for PlatformID 3 (Microsoft) and EncodingID 1 (Unicode). ATM requires the following NameIDs.

  • 1 Font Family
  • 2 Font Subfamily
  • 3 Unique font identifier
  • 6 PostScript

The following NameID is optional:

  • 17 Preferred Subfamily

All other names are ignored.

The name table checksum must be correct.

OS/2

ATM uses the following fields:

  • version (must be >= 2)
  • xAvgCharWidth (for single master only)
  • usWeightClass (for non-converted fonts only)
  • fsType
  • ySubscriptXSize
  • ySubscriptYSize
  • ySubscriptXOffset
  • ySubscriptYOffset
  • ySuperscriptXSize
  • ySuperscriptYSize
  • ySuperscriptXOffset
  • ySuperscriptYOffset
  • yStrikeOutSize
  • yStrikeOutPosition
  • panose
  • ulUnicodeRange1
  • ulUnicodeRange2
  • ulUnicodeRange3
  • ulUnicodeRange4
  • achVendID
  • sTypoAscender(except converted multiple master)
  • sTypoDescender(except converted multiple master)
  • sTypoLineGap(except converted multiple master)
  • usWinAscent(for single master only)
  • usWinDescent (for single master only)
  • ulCodePageRange1
  • ulCodePageRange2
  • sXHeight (for single master only)
  • sCapHeight (for single master only)
  • usDefaultChar
  • usBreakChar

The following fields are ignored.

The OS/2 table checksum must be correct.

post

ATM uses the following fields from the post table.

  • version (must be >= 3.0 and < 4.0)
  • underlineThickness
  • underlinePosition
  • italicAngle

All other fields are ignored.

The post table checksum must be correct.

CFF

ATM requires this table.

The CFF table checksum is currently ignored.

GPOS

If the GPOS table is present, ATM requires the version to be >= 1.0 and < 2.0.

The GPOS table is used only for the 'kern' feature. See ATM Kerning Spec.

The GPOS table checksum must be correct.

GSUB

ATM looks for a GSUB table in every OpenType font to determine if vertical mode is supported (see description below). The requirements stated in thi s section are necessary for ATM to support vertical mode for the font. If any of these requirements are not met, then ATM loads the font but disables vertical mode.

If the GSUB table is present, ATM requires the version to be >= 1.0 and < 2.0. The ScriptList is ignored. If the FeatureList does not contain a 'vrt2' feature, the rest of the GSUB table is ignored. The vrt2 feature must include a single lookup of LookupType 1 (Single Substitution Subtable). The predecessor feature, 'vert', is ignored.

The lookup must contain a single subtable of format 1 (delta) or format 2 (general Single Substitution). The LookupFlag must be zero.

The coverage table must be format 1 (index array) or format 2 (index ranges).

The Windows menuname (name ID FontFamily (1)) must <= 30 characters long (to allow for '@').

The GSUB table checksum must be correct.

EBDT, EBLC, EBSC

ATM does not support bitmaps in OpenType fonts.

vhea

This table is required for fonts that support vertical mode. ATM uses the following fields from the vhea table.

  • version (must be >= 1.0 and < 2.0)
  • numOfLongVerMetrics

All other fields are ignored.

The vhea table checksum must be correct.

vmtx

This table is required for fonts that support vertical mode.

ATM uses the vMetrics array to obtain advance widths in vertical mode. This includes an implicit advance width when numOfLongVerMetrics is less than numGlyphs. ATM ignores rightSideBearing.

The vmtx table checksum must be correct.

vertical mode

ATM reports a second "face" to the system for fonts that support vertical mode:

The Windows menuname of this face is formed by appending '@' with the normal font menuname.

The font bounding box is rotated 90 degrees counter-clockwise. The metrics derived from the bounding box are recalculated:

The Unicode encoding from the cmap is recalculated, using the one-to-one glyph substitution specified by GSUB 'vrt2'.

When producing glyph data for the @facename, ATM does the following:

  • Rotates each glyph 90 degrees counter-clockwise.
  • Uses advance widths from vmtx instead of hmtx.