fvar - Font Variations Table

This table contains axis and instance data for presentation to the users of multiple master fonts. The fvar table consists of a header, followed by the list of axis records, followed by the list of instance records.

fvar Header

The format of the fvar header is shown in the following table.

TypeNameDescription
FIXED32versionVersion of fvar table, initially 0x00010000
UINT16offsetToDataOffset to Axis table, from beginning of fvar table.
UINT16countSizePairsAxis + instance = 2
UINT16axisCountNumber of axes
UINT16axisSizeAxis record size in bytes, set to 20
UINT16instanceCountNumber of instances
UINT16instanceSizeInstance record size (bytes), set to 4 + axisCount * 4
STRUCTAxisRecord [axisCount]Array of AxisRecords
STRUCTInstanceRecord [instanceCount]Array of InstanceRecords
  

Axis Record

An axis record specifies an axis tag (axisTag) that identifies the axis to software, the minimum (minValue), default (defaultValue), and maximum (maxValue) user design coordinates, attribute flags (flags), and a name table identifier (nameID) of the axis name.

TypeNameDescription
TAGaxisTagAxis tag
FIXED32minValueMinimum user design coordinate
FIXED32defaultValueDefault user design coordinate
FIXED32maxValueMaximum user design coordinate
UINT16flagsAxis attributes flags, unused, set to 0
UINT16nameIDAxis name identifier, must be greater than 255
  

The following axis tags have been defined.

Tag Description
wght Weight variation axis
wdth Width variation axis
opsz Optical size variation axis
serf Serif variation axis
  

Instance Record

An instance record specifies a name table identifier (nameID) of the instance name, attribute flags (flags), and the user design coordinate of the instance (coord).

TypeNameDescription
UINT16nameIDInstance name identifier, must be greater than 255
UINT16flagsInstance attribute flags, unused, set to 0
FIXED32coord [axisCount]User design coordinate of this instance
  

Example

The following table shows the data recorded in the fvar table for a 3-axis, 7-instance font (MinionMM). The name table text strings corresponding to the nameIDs in the axis and instance records are shown for the English language.

### [fvar] (00000ce0)

version =1.0 (00010000)

offsetToData =0010

countSizePairs=2

axisCount =3

axisSize =20

instanceCount =7

instanceSize =16

--- axis[0]

axisTag =wght

minValue =345.000 (01590000)

defaultValue=367.000 (016f0000)

maxValue =620.000 (026c0000)

flags =0000

nameId =256 (Weight)

--- axis[1]

axisTag =wdth

minValue =450.000 (01c20000)

defaultValue=585.000 (02490000)

maxValue =600.000 (02580000)

flags =0000

nameId =257 (Width)

--- axis[2]

axisTag =opsz

minValue =6.000 (00060000)

defaultValue=11.000 (000b0000)

maxValue =72.000 (00480000)

flags =0000

nameId =258 (Optical Size)

--- instance[0]

nameId=259 (Regular Normal Optical Size 11)

flags= 0000

coord[0]=367.000 (016f0000)

coord[1]=585.000 (02490000)

coord[2]=11.000 (000b0000)

--- instance[1]

nameId=260 (Regular Condensed Optical Size 11)

flags= 0000

coord[0]=367.000 (016f0000)

coord[1]=465.000 (01d10000)

coord[2]=11.000 (000b0000)

--- instance[2]

nameId=261 (Regular Normal Optical Size 72)

flags= 0000

coord[0]=367.000 (016f0000)

coord[1]=585.000 (02490000)

coord[2]=72.000 (00480000)

--- instance[3]

nameId=262 (Semibold Condensed Optical Size 11)

flags= 0000

coord[0]=485.000 (01e50000)

coord[1]=465.000 (01d10000)

coord[2]=11.000 (000b0000)

--- instance[4]

nameId=263 (Semibold Normal Optical Size 11)

flags= 0000

coord[0]=485.000 (01e50000)

coord[1]=585.000 (02490000)

coord[2]=11.000 (000b0000)

--- instance[5]

nameId=264 (Bold Condensed Optical Size 11)

flags= 0000

coord[0]=578.000 (02420000)

coord[1]=465.000 (01d10000)

coord[2]=11.000 (000b0000)

--- instance[6]

nameId=265 (Bold Normal Optical Size 11)

flags= 0000

coord[0]=578.000 (02420000)

coord[1]=585.000 (02490000)

coord[2]=11.000 (000b0000)