OS/2 - OS/2 and Windows Metrics (Version 0)

NOTE: This is maintained for purposes of being able to validate version 0 OS/2 tables.

The OS/2 table consists of a set of metrics that are required in OpenType fonts. The layout of version 0 of this table is as follows:

Type Name of Entry Comments
uint16 version 0x0000
int16 xAvgCharWidth  
uint16 usWeightClass  
uint16 usWidthClass  
uint16 fsType  
int16 ySubscriptXSize  
int16 ySubscriptYSize  
int16 ySubscriptXOffset  
int16 ySubscriptYOffset  
int16 ySuperscriptXSize  
int16 ySuperscriptYSize  
int16 ySuperscriptXOffset  
int16 ySuperscriptYOffset  
int16 yStrikeoutSize  
int16 yStrikeoutPosition  
int16 sFamilyClass  
uint8 panose[10]  
uint32 ulUnicodeRange[4] Bits 0-31
Tag achVendID  
uint16 fsSelection  
uint16 usFirstCharIndex  
uint16 usLastCharIndex  
int16 sTypoAscender  
int16 sTypoDescender  
int16 sTypoLineGap  
uint16 usWinAscent  
uint16 usWinDescent  

version

Format: uint16
Units: n/a
Title: OS/2 table version number.
Description: The version number for this OS/2 table.
Comments: The version number allows for identification of the precise contents and layout for the OS/2 table. The version number for this layout is zero (0).

xAvgCharWidth

Format: int16
Units: Pels / em units
Title: Average weighted escapement.
Description: The Average Character Width parameter specifies the arithmetic average of the escapement (width) of all of the 26 lowercase letters a through z of the Latin alphabet and the space character. If any of the 26 lowercase letters are not present, this parameter should equal the weighted average of all glyphs in the font. For non-UGL (platform 3, encoding 0) fonts, use the unweighted average.
Comments: This parameter is a descriptive attribute of the font that specifies the spacing of characters for comparing one font to another for selection or substitution. For proportionally spaced fonts, this value is useful in estimating the length for lines of text. The weighting factors provided with this example are only valid for Latin lowercase letters. If other character sets, or capital letters are used, the corresponding frequency of use values should be used. One needs to be careful when comparing fonts that use different frequency of use values for font mapping. The average character width for the following set of upper and lowercase letters only, is calculated according to this formula: Sum the individual character widths multiplied by the following weighting factors and then divide by 1000. For example:
Letter Weight Factor Letter Weight Factor
a 64 o 56
b 14 p 17
c 27 q 4
d 35 r 49
e 100 s 56
f 20 t 71
g 14 u 31
h 42 v 10
i 63 w 18
j 3 x 3
k 6 y 18
l 35 z 2
m 20 space 166
n 56    

usWeightClass

Format: uint16
Title: Weight class.
Description: Indicates the visual weight (degree of blackness or thickness of strokes) of the characters in the font.
Comments:
Value Description C Definition (from windows.h)
100 Thin FW_THIN
200 Extra-light (Ultra-light) FW_EXTRALIGHT
300 Light FW_LIGHT
400 Normal (Regular) FW_NORMAL
500 Medium FW_MEDIUM
600 Semi-bold (Demi-bold) FW_SEMIBOLD
700 Bold FW_BOLD
800 Extra-bold (Ultra-bold) FW_EXTRABOLD
900 Black (Heavy) FW_BLACK

usWidthClass

Format: uint16
Title: Width class.
Description: Indicates a relative change from the normal aspect ratio (width to height ratio) as specified by a font designer for the glyphs in a font.
Comments: Although every character in a font may have a different numeric aspect ratio, each character in a font of normal width has a relative aspect ratio of one. When a new type style is created of a different width class (either by a font designer or by some automated means) the relative aspect ratio of the characters in the new font is some percentage greater or less than those same characters in the normal font -- it is this difference that this parameter specifies.
Value Description C Definition % of normal
1 Ultra-condensed FWIDTH_ULTRA_CONDENSED 50
2 Extra-condensed FWIDTH_EXTRA_CONDENSED 62.5
3 Condensed FWIDTH_CONDENSED 75
4 Semi-condensed FWIDTH_SEMI_CONDENSED 87.5
5 Medium (normal) FWIDTH_NORMAL 100
6 Semi-expanded FWIDTH_SEMI_EXPANDED 112.5
7 Expanded FWIDTH_EXPANDED 125
8 Extra-expanded FWIDTH_EXTRA_EXPANDED 150
9 Ultra-expanded FWIDTH_ULTRA_EXPANDED 200

fsType

Format: uint16
Title: Type flags.
Description: Indicates font embedding licensing rights for the font. Embeddable fonts may be stored in a document. When a document with embedded fonts is opened on a system that does not have the font installed (the remote system), the embedded font may be loaded for temporary (and in some cases, permanent) use on that system by an embedding-aware application. Embedding licensing rights are granted by the vendor of the font.

The OpenType Font Embedding DLL Specification and DLL release notes describe the APIs used to implement support for OpenType font embedding and loading. Applications that implement support for font embedding, either through use of the Font Embedding DLL or through other means, must not embed fonts which are not licensed to permit embedding. Further, applications loading embedded fonts for temporary use (see Preview & Print and Editable embedding below) must delete the fonts when the document containing the embedded font is closed.
Bit Bit Mask Description
  0x0000 Installable Embedding: No fsType bit is set. Thus fsType is zero.
Fonts with this setting indicate that they may be embedded and permanently installed on the remote system by an application. The user of the remote system acquires the identical rights, obligations and licenses for that font as the original purchaser of the font, and is subject to the same end-user license agreement, copyright, design patent, and/or trademark as was the original purchaser.
0 0x0001 Reserved, must be zero.
1 0x0002 Restricted License embedding:
Fonts that have only this bit set must not be modified, embedded or exchanged in any manner without first obtaining permission of the legal owner.
Caution: For Restricted License embedding to take effect, it must be the only level of embedding selected.
2 0x0004 Preview & Print embedding: When this bit is set, the font may be embedded, and temporarily loaded on the remote system. Documents containing Preview & Print fonts must be opened “read-only;” no edits can be applied to the document.
3 0x0008 Editable embedding: When this bit is set, the font may be embedded but must only be installed temporarily on other systems. In contrast to Preview & Print fonts, documents containing Editable fonts may be opened for reading, editing is permitted, and changes may be saved.
4-15   Reserved, must be zero.
Comments: If multiple embedding bits are set, the least restrictive license granted takes precedence. For example, if bits 1 and 3 are set, bit 3 takes precedence over bit 1and the font may be embedded with Editable rights. For compatibility purposes, most vendors granting Editable embedding rights are also setting the Preview & Print bit (0x000C). This will permit an application that only supports Preview & Print embedding to detect that font embedding is allowed.
  Restricted License embedding (0x0002): Fonts that have this bit set must not be modified, embedded or exchanged in any manner without first obtaining permission of the legal owner. Caution: note that for Restricted License embedding to take effect, it must be the only level of embedding selected (as noted in the previous paragraph).
  Preview & Print embedding (0x0004): Fonts with this bit set indicate that they may be embedded within documents but must only be installed temporarily on the remote system. Any document which includes a Preview & Print embedded font must be opened “read-only;” the application must not allow the user to edit the document; it can only be viewed and/or printed.
  Editable embedding (0x0008): Fonts with this bit set indicate that they may be embedded in documents, but must only be installed temporarily on the remote system. In contrast to Preview & Print fonts, documents containing Editable fonts may be opened “read-write;” editing is permitted, and changes may be saved.
  Installable embedding (0x0000): Fonts with this setting indicate that they may be embedded and permanently installed on the remote system by an application. The user of the remote system acquires the identical rights, obligations and licenses for that font as the original purchaser of the font, and is subject to the same end-user license agreement, copyright, design patent, and/or trademark as was the original purchaser.

ySubscriptXSize

Format: int16
Units: Font design units
Title: Subscript horizontal font size.
Description: The recommended horizontal size in font design units for subscripts for this font.
Comments: If a font has two recommended sizes for subscripts, e.g., numerics and other, the numeric sizes should be stressed. This size field maps to the em square size of the font being used for a subscript. The horizontal font size specifies a font designer's recommended horizontal font size for subscript characters associated with this font. If a font does not include all of the required subscript characters for an application, and the application can substitute characters by scaling the character of a font or by substituting characters from another font, this parameter specifies the recommended em square for those subscript characters.

For example, if the em square for a font is 2048 and ySubScriptXSize is set to 205, then the horizontal size for a simulated subscript character would be 1/10th the size of the normal character.

ySubscriptYSize

Format: int16
Units: Font design units
Title: Subscript vertical font size.
Description: The recommended vertical size in font design units for subscripts for this font.
Comments: If a font has two recommended sizes for subscripts, e.g. numerics and other, the numeric sizes should be stressed. This size field maps to the emHeight of the font being used for a subscript. The horizontal font size specifies a font designer's recommendation for horizontal font size of subscript characters associated with this font. If a font does not include all of the required subscript characters for an application, and the application can substitute characters by scaling the characters in a font or by substituting characters from another font, this parameter specifies the recommended horizontal EmInc for those subscript characters.

For example, if the em square for a font is 2048 and ySubScriptYSize is set to 205, then the vertical size for a simulated subscript character would be 1/10th the size of the normal character.

ySubscriptXOffset

Format: int16
Units: Font design units
Title: Subscript x offset.
Description: The recommended horizontal offset in font design untis for subscripts for this font.
Comments: The Subscript X Offset parameter specifies a font designer's recommended horizontal offset -- from the character origin of the font to the character origin of the subscript's character -- for subscript characters associated with this font. If a font does not include all of the required subscript characters for an application, and the application can substitute characters, this parameter specifies the recommended horizontal position from the character escapement point of the last character before the first subscript character. For upright characters, this value is usually zero; however, if the characters of a font have an incline (italic characters) the reference point for subscript characters is usually adjusted to compensate for the angle of incline.

ySubscriptYOffset

Format: int16
Units: Font design units
Title: Subscript y offset.
Description: The recommended vertical offset in font design units from the baseline for subscripts for this font.
Comments: The Subscript Y Offset parameter specifies a font designer's recommended vertical offset from the character baseline to the character baseline for subscript characters associated with this font. Values are expressed as a positive offset below the character baseline. If a font does not include all of the required subscript for an application, this parameter specifies the recommended vertical distance below the character baseline for those subscript characters.

ySuperscriptXSize

Format: int16
Units: Font design units
Title: Superscript horizontal font size.
Description: The recommended horizontal size in font design units for superscripts for this font.
Comments: If a font has two recommended sizes for subscripts, e.g., numerics and other, the numeric sizes should be stressed. This size field maps to the em square size of the font being used for a subscript. The horizontal font size specifies a font designer's recommended horizontal font size for superscript characters associated with this font. If a font does not include all of the required superscript characters for an application, and the application can substitute characters by scaling the character of a font or by substituting characters from another font, this parameter specifies the recommended em square for those superscript characters.

For example, if the em square for a font is 2048 and ySuperScriptXSize is set to 205, then the horizontal size for a simulated superscript character would be 1/10th the size of the normal character.

ySuperscriptYSize

Format: int16
Units: Font design units
Title: Superscript vertical font size.
Description: The recommended vertical size in font design units for superscripts for this font.
Comments: If a font has two recommended sizes for subscripts, e.g., numerics and other, the numeric sizes should be stressed. This size field maps to the emHeight of the font being used for a subscript. The vertical font size specifies a font designer's recommended vertical font size for superscript characters associated with this font. If a font does not include all of the required superscript characters for an application, and the application can substitute characters by scaling the character of a font or by substituting characters from another font, this parameter specifies the recommended EmHeight for those superscript characters.

For example, if the em square for a font is 2048 and ySuperScriptYSize is set to 205, then the vertical size for a simulated superscript character would be 1/10th the size of the normal character.

ySuperscriptXOffset

Format: int16
Units: Font design units
Title: Superscript x offset.
Description: The recommended horizontal offset in font design units for superscripts for this font.
Comments: The Superscript X Offset parameter specifies a font designer's recommended horizontal offset -- from the character origin to the superscript character's origin for the superscript characters associated with this font. If a font does not include all of the required superscript characters for an application, this parameter specifies the recommended horizontal position from the escapement point of the character before the first superscript character. For upright characters, this value is usually zero; however, if the characters of a font have an incline (italic characters) the reference point for superscript characters is usually adjusted to compensate for the angle of incline.

ySuperscriptYOffset

Format: int16
Units: Font design units
Title: Superscript y offset.
Description: The recommended vertical offset in font design units from the baseline for superscripts for this font.
Comments: The Superscript Y Offset parameter specifies a font designer's recommended vertical offset -- from the character baseline to the superscript character's baseline associated with this font. Values for this parameter are expressed as a positive offset above the character baseline. If a font does not include all of the required superscript characters for an application, this parameter specifies the recommended vertical distance above the character baseline for those superscript characters.

yStrikeoutSize

Format: int16
Units: Font design units
Title: Strikeout size.
Description: Width of the strikeout stroke in font design units.
Comments: This field should normally be the width of the em dash for the current font. If the size is one, the strikeout line will be the line represented by the strikeout position field. If the value is two, the strikeout line will be the line represented by the strikeout position and the line immediately above the strikeout position. For a Roman font with a 2048 em square, 102 is suggested.

yStrikeoutPosition

Format: int16
Units: Font design units
Title: Strikeout position.
Description: The position of the top of the strikeout stroke relative to the baseline in font design units.
Comments: Positive values represent distances above the baseline, while negative values represent distances below the baseline. A value of zero falls directly on the baseline, while a value of one falls one pel above the baseline. The value of strikeout position should not interfere with the recognition of standard characters, and therefore should not line up with crossbars in the font. For a Roman font with a 2048 em square, 460 is suggested.

sFamilyClass

Format: int16
Title: Font-family class and subclass.
Description: This parameter is a classification of font-family design.
Comments: The font class and font subclass are registered values assigned by IBM to each font family. This parameter is intended for use in selecting an alternate font when the requested font is not available. The font class is the most general and the font subclass is the most specific. The high byte of this field contains the family class, while the low byte contains the family subclass.

Panose

Format: uint8[10]
Title: PANOSE classification number
International: Additional specifications are required for PANOSE to classify non-Latin character sets.
Description: This 10-byte series of numbers is used to describe the visual characteristics of a given typeface. These characteristics are then used to associate the font with other fonts of similar appearance having different names. The variables for each digit are listed below. The Panose values are fully described in the Panose “greybook” reference, currently owned by Monotype Imaging.
Comments: The PANOSE definition contains ten digits each of which currently describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle and bProportion in the font mapper to determine family type. It also uses bProportion to determine if the font is monospaced. If the font is a symbol font, the first byte of the PANOSE number (bFamilyType) must be set to “pictorial.” The specification for assigning PANOSE values can be found here.
PANOSE
Type Name Description
uint8 bFamilyType; Family Type
uint8 bSerifStyle; Serif Style
uint8 bWeight; Weight
uint8 bProportion; Proportion
uint8 bContrast; Contrast
uint8 bStrokeVariation; Stroke Variation
uint8 bArmStyle; Arm Style
uint8 bLetterform; Letterform
uint8 bMidline; Midline
uint8 bXHeight; X Height
Family Type
Value Description
0 Any
1 No Fit
2 Text and Display
3 Script
4 Decorative
5 Pictorial
Serif Style
Value Description
0 Any
1 No Fit
2 Cove
3 Obtuse Cove
4 Square Cove
5 Obtuse Square Cove
6 Square
7 Thin
8 Bone
9 Exaggerated
10 Triangle
11 Normal Sans
12 Obtuse Sans
13 Perp Sans
14 Flared
15 Rounded
Weight
Value Description
0 Any
1 No Fit
2 Very Light
3 Light
4 Thin
5 Book
6 Medium
7 Demi
8 Bold
9 Heavy
10 Black
11 Nord
Proportion
Value Description
0 Any
1 No Fit
2 Old Style
3 Modern
4 Even Width
5 Expanded
6 Condensed
7 Very Expanded
8 Very Condensed
9 Monospaced
Contrast
Value Description
0 Any
1 No Fit
2 None
3 Very Low
4 Low
5 Medium Low
6 Medium
7 Medium High
8 High
9 Very High
Stroke Variation
Value Description
0 Any
1 No Fit
2 Gradual/Diagonal
3 Gradual/Transitional
4 Gradual/Vertical
5 Gradual/Horizontal
6 Rapid/Vertical
7 Rapid/Horizontal
8 Instant/Vertical
Arm Style
Value Description
0 Any
1 No Fit
2 Straight Arms/Horizontal
3 Straight Arms/Wedge
4 Straight Arms/Vertical
5 Straight Arms/Single Serif
6 Straight Arms/Double Serif
7 Non-Straight Arms/Horizontal
8 Non-Straight Arms/Wedge
9 Non-Straight Arms/Vertical
10 Non-Straight Arms/Single Serif
11 Non-Straight Arms/Double Serif
Letterform
Value Description
0 Any
1 No Fit
2 Normal/Contact
3 Normal/Weighted
4 Normal/Boxed
5 Normal/Flattened
6 Normal/Rounded
7 Normal/Off Center
8 Normal/Square
9 Oblique/Contact
10 Oblique/Weighted
11 Oblique/Boxed
12 Oblique/Flattened
13 Oblique/Rounded
14 Oblique/Off Center
15 Oblique/Square
Midline
Value Description
0 Any
1 No Fit
2 Standard/Trimmed
3 Standard/Pointed
4 Standard/Serifed
5 High/Trimmed
6 High/Pointed
7 High/Serifed
8 Constant/Trimmed
9 Constant/Pointed
10 Constant/Serifed
11 Low/Trimmed
12 Low/Pointed
13 Low/Serifed
X-height
Value Description
0 Any
1 No Fit
2 Constant/Small
3 Constant/Standard
4 Constant/Large
5 Ducking/Small
6 Ducking/Standard
7 Ducking/Large

ulUnicodeRange

Format: uint32[4] — total 128 bits
Title: Unicode Character Range
Description: This field is intended for specifying the Unicode blocks encompassed by the font file. Note that bit assignments are not defined in a version 0 'OS/2' table; all bits must be set to zero (0).

achVendID

Format: 4-byte Tag
Title: Font Vendor Identification
Description: The four character identifier for the vendor of the given type face.
Comments: This is not the royalty owner of the original artwork. This is the company responsible for the marketing and distribution of the typeface that is being classified. It is reasonable to assume that there will be 6 vendors of ITC Zapf Dingbats for use on desktop platforms in the near future (if not already). It is also likely that the vendors will have other inherent benefits in their fonts (more kern pairs, unregularized data, hand hinted, etc.). This identifier will allow for the correct vendor's type to be used over another, possibly inferior, font file. The Vendor ID value is not required.

Microsoft has assigned values for some font suppliers as listed below. Uppercase vendor ID's are reserved by Microsoft. Other suppliers can choose their own mixed case or lowercase ID's, or leave the field blank.

fsSelection

Format: uint16
Title: Font selection flags.
Description: Contains information concerning the nature of the font patterns, as follows:
Bit # macStyle bit C definition Description
0 bit 1 ITALIC Font contains Italic characters, otherwise they are upright.
1   UNDERSCORE Characters are underscored.
2   NEGATIVE Characters have their foreground and background reversed.
3   OUTLINED Outline (hollow) characters, otherwise they are solid.
4   STRIKEOUT Characters are overstruck.
5 bit 0 BOLD Characters are emboldened.
6   REGULAR Characters are in the standard weight/style for the font.
Comments: All undefined bits must be zero.

This field contains information on the original design of the font. Bits 0 & 5 can be used to determine if the font was designed with these features or whether some type of machine simulation was performed on the font to achieve this appearance. Bits 1-4 are rarely used bits that indicate the font is primarily a decorative or special purpose font.

If bit 6 is set, then bits 0 and 5 must be clear, else the behavior is undefined. As noted above, the settings of bits 0 and 1 must be reflected in the macStyle bits in the 'head' table. While bit 6 on implies that bits 0 and 1 of macStyle are clear (along with bits 0 and 5 of fsSelection), the reverse is not true. Bits 0 and 1 of macStyle (and 0 and 5 of fsSelection) may be clear and that does not give any indication of whether or not bit 6 of fsSelection is clear (e.g., Arial Light would have all bits cleared; it is not the regular version of Arial).

usFirstCharIndex

Format: uint16
Description: The minimum Unicode index (character code) in this font, according to the cmap subtable for platform ID 3 and platform- specific encoding ID 0 or 1. For most fonts supporting Win-ANSI or other character sets, this value would be 0x0020.

usLastCharIndex

Format: uint16
Description: The maximum Unicode index (character code) in this font, according to the cmap subtable for platform ID 3 and encoding ID 0 or 1. This value depends on which character sets the font supports.

sTypoAscender

Format: int16
Description: The typographic ascender for this font. Remember that this is not the same as the Ascender value in the 'hhea' table, which Apple defines in a far different manner. One good source for sTypoAscender in Latin based fonts is the Ascender value from an AFM file. For CJK fonts see below.

The suggested usage for sTypoAscender is that it be used in conjunction with unitsPerEm to compute a typographically correct default line spacing. The goal is to free applications from Macintosh or Windows-specific metrics which are constrained by backward compatibility requirements. These new metrics, when combined with the character design widths, will allow applications to lay out documents in a typographically correct and portable fashion. These metrics will be exposed through Windows APIs. Macintosh applications will need to access the 'sfnt' resource and parse it to extract this data from the “OS/2” table.

For CJK (Chinese, Japanese, and Korean) fonts that are intended to be used for vertical writing (in addition to horizontal writing), the required value for sTypoAscender is that which describes the top of the of the ideographic em-box. For example, if the ideographic em-box of the font extends from coordinates 0,-120 to 1000,880 (that is, a 1000x1000 box set 120 design units below the Latin baseline), then the value of sTypoAscender must be set to 880. Failing to adhere to these requirements will result in incorrect vertical layout.

sTypoDescender

Format: int16
Description: The typographic descender for this font. Remember that this is not the same as the Descender value in the 'hhea' table, which Apple defines in a far different manner. One good source for sTypoDescender in Latin based fonts is the Descender value from an AFM file. For CJK fonts see below.

The suggested usage for sTypoDescender is that it be used in conjunction with unitsPerEm to compute a typographically correct default line spacing. The goal is to free applications from Macintosh or Windows-specific metrics which are constrained by backward compatability requirements. These new metrics, when combined with the character design widths, will allow applications to lay out documents in a typographically correct and portable fashion. These metrics will be exposed through Windows APIs. Macintosh applications will need to access the 'sfnt' resource and parse it to extract this data from the “OS/2” table (unless Apple exposes the 'OS/2' table through a new API).

For CJK (Chinese, Japanese, and Korean) fonts that are intended to be used for vertical writing (in addition to horizontal writing), the required value for sTypoDescender is that which describes the bottom of the of the ideographic em-box. For example, if the ideographic em-box of the font extends from coordinates 0,-120 to 1000,880 (that is, a 1000x1000 box set 120 design units below the Latin baseline), then the value of sTypoDescender must be set to -120. Failing to adhere to these requirements will result in incorrect vertical layout.

sTypoLineGap

Format: int16
Description: The typographic line gap for this font. Remember that this is not the same as the LineGap value in the 'hhea' table, which Apple defines in a far different manner.

The suggested usage for sTypoLineGap is that it be used in conjunction with unitsPerEm to compute a typographically correct default line spacing. Typical values average 7-10% of units per em. The goal is to free applications from Macintosh or Windows-specific metrics which are constrained by backward compatability requirements (see chapter, “Recommendations for Windows Fonts). These new metrics, when combined with the character design widths, will allow applications to lay out documents in a typographically correct and portable fashion. These metrics will be exposed through Windows APIs. Macintosh applications will need to access the 'sfnt' resource and parse it to extract this data from the ”OS/2“ table (unless Apple exposes the 'OS/2' table through a new API)

usWinAscent

Format: uint16
Description: The ascender metric for Windows. This, too, is distinct from Apple's Ascender value and from the sTypoAscender values. usWinAscent is computed as the yMax for all characters in the Windows ANSI character set. usWinAscent is used to compute the Windows font height and default line spacing. For platform 3 encoding 0 fonts, it is the same as yMax. Windows will clip the bitmap of any portion of a glyph that appears above this value. Some applications use this value to determine default line spacing. This is strongly discouraged. The typographic ascender, descender and line gap fields in conjunction with unitsPerEm should be used for this purpose. Developers should set this field keeping the above factors in mind.
If any clipping is unacceptable, then the value should be set to yMax.
However, if a developer desires to provide appropriate default line spacing using this field, for those applications that continue to use this field for doing so (against OpenType recommendations), then the value should be set appropriately. In such a case, it may result in some glyph bitmaps being clipped.

usWinDescent

Format: uint16
Description: The descender metric for Windows. This, too, is distinct from Apple's Descender value and from the sTypoDescender values. usWinDescent is computed as the -yMin for all characters in the Windows ANSI character set. usWinDescent is used to compute the Windows font height and default line spacing. For platform 3 encoding 0 fonts, it is the same as -yMin. Windows will clip the bitmap of any portion of a glyph that appears below this value. Some applications use this value to determine default line spacing. This is strongly discouraged. The typographic ascender, descender and line gap fields in conjunction with unitsPerEm should be used for this purpose. Developers should set this field keeping the above factors in mind.
If any clipping is unacceptable, then the value should be set to yMin.
However, if a developer desires to provide appropriate default line spacing using this field, for those applications that continue to use this field for doing so (against OpenType recommendations), then the value should be set appropriately. In such a case, it may result in some glyph bitmaps being clipped.

This page was last updated 4 January 2017.

© 2017 Microsoft Corporation. All rights reserved. Terms of use.

Comments to the MST group: how to contact us.