'OS/2' - OS/2 and Windows Metrics

The OS/2 table consists of a set of metrics that are required by Windows and OS/2. The layout of this table is as follows:

Type

Name of Entry

Comments

USHORT

version

0x0001

SHORT

xAvgCharWidth;

USHORT

usWeightClass;

USHORT

usWidthClass;

SHORT

fsType;

SHORT

ySubscriptXSize;

SHORT

ySubscriptYSize;

SHORT

ySubscriptXOffset;

SHORT

ySubscriptYOffset;

SHORT

ySuperscriptXSize;

SHORT

ySuperscriptYSize;

SHORT

ySuperscriptXOffset;

SHORT

ySuperscriptYOffset;

SHORT

yStrikeoutSize;

SHORT

yStrikeoutPosition;

SHORT

sFamilyClass;

PANOSE

panose;

ULONG

ulUnicodeRange1

Bits 0–31

ULONG

ulUnicodeRange2

Bits 32–63

ULONG

ulUnicodeRange3

Bits 64–95

ULONG

ulUnicodeRange4

Bits 96–127

CHAR

achVendID[4];

USHORT

fsSelection;

USHORT

usFirstCharIndex

USHORT

usLastCharIndex

USHORT

sTypoAscender

USHORT

sTypoDescender

USHORT

sTypoLineGap

USHORT

usWinAscent

USHORT

usWinDescent

ULONG

ulCodePageRange1

Bits 0-31

ULONG

ulCodePageRange2

Bits 32-63


versionversion

Format:

2-byte unsigned short

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 one (1). The version number for the previous layout (in rev.1.5 of this spec and earlier) was zero (0). Version 0 of the OS/2 table was 78 bytes; Version 1 is 86 bytes, having added the ulCodePageRange1 and ulCodePageRange2 fields.


xAvgCharWidthxAvgCharWidth

Format:

2-byte signed short

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, different 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 is calculated according to this formula: For the lowercase letters only, 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


usWeightClassusWeightClass

Format:

2-byte unsigned short

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


usWidthClassusWidthClass

Format:

2-byte unsigned short

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:


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


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.

fsTypefsType

Format:

2-byte unsigned short

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 TrueType Font Embedding DLL Specification and DLL release notes describe the APIs used to implement support for TrueType 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

0

Reserved, must be zero.

1

0x0002

Restricted License embedding: When only this bit is set, this font may not be embedded, copied or modified.

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 and temporarily loaded on other systems. Documents containing Editable fonts may be opened for reading and writing.

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.


ySubscriptXSizeySubscriptXSize

Format:

2-byte signed short

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.


ySubscriptYSizeySubscriptYSize

Format:

2-byte signed short

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.


ySubscriptXOffsetySubscriptXOffset

Format:

2-byte signed short

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.


ySubscriptYOffsetySubscriptYOffset

Format:

2-byte signed short

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.


ySuperscriptXSizeySuperscriptXSize

Format:

2-byte signed short

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.


ySuperscriptYSizeySuperscriptYSize

Format:

2-byte signed short

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.


ySuperscriptXOffsetySuperscriptXOffset

Format:

2-byte signed short

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.


ySuperscriptYOffsetySuperscriptYOffset

Format:

2-byte signed short

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.


yStrikeoutSizeyStrikeoutSize

Format:

2-byte signed short

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.


yStrikeoutPositionyStrikeoutPosition

Format:

2-byte signed short

Units:

Font design units

Title:

Strikeout position.

Description:

The position 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, 530 is suggested.


sFamilyClasssFamilyClass

Format:

2-byte signed short

Title:

Font-family class and subclass. Also see section 3.4.

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.


See Appendix A for full information about this field.

PanosePanose

Format:

10 byte array

Title:

PANOSE classification number

International:

Additional specifications are required for PANOSE to classify non Latin character sets.

Description:

This 10 byte series of numbers are 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 specifications for each variable can be obtained in the specification PANOSE v2.0 Numerical Evaluation from Microsoft or Elseware Corporation.

Comments:

The PANOSE definition contains ten digits each of which currently describes up to sixteen variations. Windows v3.1 uses bFamilyType, bSerifStyle and bProportion in the font mapper to determine family type. It also uses bProportion to determine if the font is monospaced.


Type

Name

BYTE

bFamilyType;

BYTE

bSerifStyle;

BYTE

bWeight;

BYTE

bProportion;

BYTE

bContrast;

BYTE

bStrokeVariation;

BYTE

bArmStyle;

BYTE

bLetterform;

BYTE

bMidline;

BYTE

bXHeight;


1. Family Kind (6 variations)

0

= Any

1

= No Fit

2

= Text and Display

3

= Script

4

= Decorative

5

= Pictorial


2. Serif Style (16 variations)

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


3. Weight (12 variations)

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


4. Proportion (10 variations)

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


5. Contrast (10 variations)

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


6. Stroke Variation (9 variations)

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


7. Arm Style (12 variations)

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


8. Letterform (16 variations)

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


9. Midline (14 variations)

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


10. X-height (8 variations)

0

= Any

1

= No Fit

2

= Constant/Small

3

= Constant/Standard

4

= Constant/Large

5

= Ducking/Small

6

= Ducking/Standard

7

= Ducking/Large


ulUnicodeRange1 (Bits 0–31)
ulUnicodeRange2 (Bits 32–63)
ulUnicodeRange3 (Bits 64–95)
ulUnicodeRange4 (Bits 96–127)

Format:

32-bit unsigned long (4 copies) totaling 128 bits.

Title:

Unicode Character Range

Description:

This field is used to specify the Unicode blocks or ranges encompassed by the font file in the 'cmap' subtable for platform 3, encoding ID 1 (Microsoft platform). If the bit is set (1) then the Unicode range is considered functional. If the bit is clear (0) then the range is not considered functional. Each of the bits is treated as an independent flag and the bits can be set in any combination. The determination of "functional" is left up to the font designer, although character set selection should attempt to be functional by ranges if at all possible.

All reserved fields must be zero. Each long is in Big-Endian form. See the Basic Multilingual Plane of ISO/IEC 10646-1 or the Unicode Standard v.1.1 for the list of Unicode ranges and characters.


Bit

Description

0

Basic Latin

1

Latin-1 Supplement

2

Latin Extended-A

3

Latin Extended-B

4

IPA Extensions

5

Spacing Modifier Letters

6

Combining Diacritical Marks

7

Basic Greek

8

Greek Symbols And Coptic

9

Cyrillic

10

Armenian

11

Basic Hebrew

12

Hebrew Extended (A and B blocks combined)

13

Basic Arabic

14

Arabic Extended

15

Devanagari

16

Bengali

17

Gurmukhi

18

Gujarati

19

Oriya

20

Tamil

21

Telugu

22

Kannada

23

Malayalam

24

Thai

25

Lao

26

Basic Georgian

27

Georgian Extended

28

Hangul Jamo

29

Latin Extended Additional

30

Greek Extended

31

General Punctuation

32

Superscripts And Subscripts

33

Currency Symbols

34

Combining Diacritical Marks For Symbols

35

Letterlike Symbols

36

Number Forms

37

Arrows

38

Mathematical Operators

39

Miscellaneous Technical

40

Control Pictures

41

Optical Character Recognition

42

Enclosed Alphanumerics

43

Box Drawing

44

Block Elements

45

Geometric Shapes

46

Miscellaneous Symbols

47

Dingbats

48

CJK Symbols And Punctuation

49

Hiragana

50

Katakana

51

Bopomofo

52

Hangul Compatibility Jamo

53

CJK Miscellaneous

54

Enclosed CJK Letters And Months

55

CJK Compatibility

56

Hangul

57

Reserved for Unicode SubRanges

58

Reserved for Unicode SubRanges

59

CJK Unified Ideographs

60

Private Use Area

61

CJK Compatibility Ideographs

62

Alphabetic Presentation Forms

63

Arabic Presentation Forms-A

64

Combining Half Marks

65

CJK Compatibility Forms

66

Small Form Variants

67

Arabic Presentation Forms-B

68

Halfwidth And Fullwidth Forms

69

Specials

70–127

Reserved for Unicode SubRanges


achVendIDachVendID

Format

4-byte character array

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.


Vendor ID

Vendor Name

AGFA

AGFA Compugraphic

ADBE

Adobe

APPL

Apple

ALTS

Altsys

B&H

Bigelow & Holmes

BERT

Berthold

BITS

Bitstream

CANO

Canon

DTC

Digital Typeface Corp.

ELSE

Elseware

EPSN

Epson

GPI

Gamma Productions, Inc.

HP

Hewlett-Packard

IBM

IBM

IMPR

Impress

KATF

Kingsley/ATF

LANS

Lanston Type Co., Ltd.

LETR

Letraset

LINO

Linotype

LTRX

Lighttracks

MACR

Macromedia

MONO

Monotype

MLGC

Micrologic Software

MS

Microsoft

PRFS

Production First Software

QMSI

QMS/Imagen

SFUN

Soft Union

SWFT

Swfte International

URW

URW

ZSFT

ZSoft


fsSelectionfsSelection

Format:

2-byte bit field.

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).


usFirstCharIndexusFirstCharIndex

Format:

2-byte USHORT

Description:

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


usLastCharIndexusLastCharIndex

Format:

2-byte USHORT

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.


sTypoAscendersTypoAscender

Format:

2-byte SHORT

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 usTypoAscender is the Ascender value from an AFM file.

The suggested useage for usTypoAscender 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).


sTypoDescendersTypoDescender

Format:

2-byte SHORT

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 usTypoDescender is the Descender value from an AFM file.

The suggested useage for usTypoDescender 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).


sTypoLineGapsTypoLineGap

Format:

2-byte SHORT

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 useage for usTypoLineGap 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).


usWinAscentusWinAscent

Format:

2-byte USHORT

Description:

The ascender metric for Windows. This, too, is distinct from Apple's Ascender value and from the usTypoAscender values. usWinAscent is computed as the yMax for all characters in the Windows ANSI character set. usTypoAscent is used to compute the Windows font height and default line spacing. For platform 3 encoding 0 fonts, it is the same as yMax.


usWinDescentusWinDescent

Format:

2-byte USHORT

Description:

The descender metric for Windows. This, too, is distinct from Apple's Descender value and from the usTypoDescender values. usWinDescent is computed as the -yMin for all characters in the Windows ANSI character set. usTypoAscent is used to compute the Windows font height and default line spacing. For platform 3 encoding 0 fonts, it is the same as -yMin.


ulCodePageRange1 Bits 0–31
ulCodePageRange2 Bits 32–63

Format:

32-bit unsigned long (2 copies) totaling 64 bits.

Title:

Code Page Character Range

Description:

This field is used to specify the code pages encompassed by the font file in the 'cmap' subtable for platform 3, encoding ID 1 (Microsoft platform). If the font file is encoding ID 0, then the Symbol Character Set bit should be set. If the bit is set (1) then the code page is considered functional. If the bit is clear (0) then the code page is not considered functional. Each of the bits is treated as an independent flag and the bits can be set in any combination. The determination of "functional" is left up to the font designer, although character set selection should attempt to be functional by code pages if at all possible.

Symbol character sets have a special meaning. If the symbol bit (31) is set, and the font file contains a 'cmap' subtable for platform of 3 and encoding ID of 1, then all of the characters in the Unicode range 0xF000 - 0xF0FF (inclusive) will be used to enumerate the symbol character set. If the bit is not set, any characters present in that range will not be enumerated as a symbol character set.

All reserved fields must be zero. Each long is in Big-Endian form.


Bit

Code Page

Description

0

1252

Latin 1

1

1250

Latin 2: Eastern Europe

2

1251

Cyrillic

3

1253

Greek

4

1254

Turkish

5

1255

Hebrew

6

1256

Arabic

7

1257

Windows Baltic

8–15

Reserved for Alternate ANSI

16

874

Thai

17

932

JIS/Japan

18

936

Chinese: Simplified chars--PRC and Singapore

19

949

Korean Wansung

20

950

Chinese: Traditional chars--Taiwan and Hong Kong SAR, China

21

1361

Korean Johab

22–28

Reserved for Alternate ANSI & OEM

29

Macintosh Character Set (US Roman)

30

OEM Character Set

31

Symbol Character Set

32-47

Reserved for OEM

48

869

IBM Greek

49

866

MS-DOS Russian

50

865

MS-DOS Nordic

51

864

Arabic

52

863

MS-DOS Canadian French

53

862

Hebrew

54

861

MS-DOS Icelandic

55

860

MS-DOS Portuguese

56

857

IBM Turkish

57

855

IBM Cyrillic; primarily Russian

58

852

Latin 2

59

775

MS-DOS Baltic

60

737

Greek; former 437 G

61

708

Arabic; ASMO 708

62

850

WE/Latin 1

63

437

US