FONTMETRICS

From EDM2
Jump to: navigation, search

Font-metrics structure. This structure is returned to applications on the GpiQueryFonts and GpiQueryFontMetrics calls and conveys information from the font creator to the application.

Type

CHAR    szFamilyname[ FACESIZE ]
CHAR    szFacename[ FACESIZE ]
USHORT  idRegistry
USHORT  usCodePage
LONG    lEmHeight
LONG    lXHeight
LONG    lMaxAscender
LONG    lMaxDescender
LONG    lLowerCaseAscent
LONG    lLowerCaseDescent
LONG    lInternalLeading
LONG    lExternalLeading
LONG    lAveCharWidth
LONG    lMaxCharInc
LONG    lEmInc
LONG    lMaxBaselineExt
SHORT   sCharSlope
SHORT   sInlineDir
SHORT   sCharRot
USHORT  usWeightClass
USHORT  usWidthClass
SHORT   sXDeviceRes
SHORT   sYDeviceRes
SHORT   sFirstChar
SHORT   sLastChar
SHORT   sDefaultChar
SHORT   sBreakChar
SHORT   sNominalPointSize
SHORT   sMinimumPointSize
SHORT   sMaximumPointSize
USHORT  fsType
USHORT  fsDefn
USHORT  fsSelection
USHORT  fsCapabilities
LONG    lSubscriptXSize
LONG    lSubscriptYSize
LONG    lSubscriptXOffset
LONG    lSubscriptYOffset
LONG    lSuperscriptXSize
LONG    lSuperscriptYSize
LONG    lSuperscriptXOffset
LONG    lSuperscriptYOffset
LONG    lUnderscoreSize
LONG    lUnderscorePosition
LONG    lStrikeoutSize
LONG    lStrikeoutPosition
SHORT   sKerningPairs
SHORT   sFamilyClass
LONG    lMatch
LONG    FamilyNameAtom
LONG    FaceNameAtom
PANOSE  panose

C Declaration Method

typedef struct

Fields

szFamilyname[ FACESIZE
Family name.
The family name of the font that describes the basic appearance of the font, for example, Times New Roman. This string is null terminated, and therefore is limited to 31 characters in length. Longer names may be retrieved by using the FamilyNameAtom field to retrieve the full name from the System Atom table.
szFacename[ FACESIZE ] 
Face name.
The typeface name that defines the particular font, for example, Times New Roman Bold Italic. This string is null terminated, and therefore is limited to 31 characters in length. Longer names may be retrieved by using the FaceNameAtom field to retrieve the full name from the System Atom table.
idRegistry
Registry identifier.
The IBM registered number (or zero).
usCodePage
Code page.
Defines the registered code page supported by the font. For example, the original IBM PC code page is 437. A value of 0 implies that the font may be used with any of the OS/2 supported code pages. Where a font contains special symbols for which there is no registered code page, then code page 65400 is used.
lEmHeight
Em height.
The height of the Em square in world coordinate units. This corresponds to the point size for the font.
lXHeight
X height.
The nominal height above the baseline for lowercase characters (ignoring ascenders) in world coordinate units.
lMaxAscender
Maximum ascender.
The maximum height above the baseline reached by any part of any symbol in the font in world coordinate units. This field may exceed lEmHeight.
lMaxDescender
Maximum descender.
The maximum depth below the baseline reached by any part of any symbol in the font in world coordinate units. This field may exceed lEmHeight.
lLowerCaseAscent
Lowercase ascent.
The maximum height above the baseline reached by any part of any lowercase (Latin unaccented "a" through "z") symbol in the font in world coordinate units.
lLowerCaseDescent
Lowercase descent.
The maximum depth below the baseline reached by any part of any lowercase (Latin unaccented "a" through "z") symbol in the font in world coordinate units.
lInternalLeading
Internal leading.
The amount of space which, when subtracted from lMaxAscender, gives a font-design dependent, but glyph-set independent, measure of the distance above the baseline that characters extend. This calculation approximates the visual top to a row of characters without actually looking at the characters in the row.
For optimum results, this field should be used by applications to position the first line of a block of text by subtracting it from lMaxAscender and positioning the baseline that distance below whatever is above the text.
This does not guarantee that characters will not overwrite information above them, but does give a font designer's view of where to place the text. Collision should be tested for, and additional space allocated if necessary.
lExternalLeading
External leading.
The amount of guaranteed white space advised by the font designer to appear between adjacent rows of text. This value may be zero. The fonts built in to Presentation Manager have zero in this field.
lAveCharWidth
Average character width.
This is determined by multiplying the width of each lowercase character by a constant, adding the products, and then dividing by 1000. The letters involved in this, plus their constants, are as follows:
Letter Constant
a 64
b 14
c 27
d 35
e 100
f 20
g 14
h 42
i 63
j 3
k 6
l 35
m 20
n 56
o 56
p 17
q 4
r 49
s 56
t 71
u 31
v 10
w 18
x 3
y 18
z 2
space 166
For fixed pitch fonts, this value will be the same as the (A width + B width + C width) escapement of each character.
lMaxCharInc
Maximum character increment.
The maximum character increment for the font in world coordinate units.
lEmInc
Em increment.
The width of the Em square in world coordinate units. This corresponds to the point size of the font. When the horizontal device resolution equals the vertical device resolution this is equal to the em height.
lMaxBaselineExt
Maximum baseline extent. The maximum vertical space occupied by the font, in world coordinate units. This is the sum of lMaxAscender and lMaxDescender if both are positive. It is also the sum of lInternalLeading and lEmHeight.
One possible type of line spacing can be computed by adding lMaxBaselineExt to lExternalLeading. Such a line spacing, however, would be dependent on the glyph set included in the font. If a new version of the font should be made available, with new glyphs, then it is possible that this value will change because one of the new glyphs has gone above the previous lMaxAscender or below the previous lMaxDescender.
More sophisticated applications will base line spacing on the point size (lEmHeight) of the font, which is an invariant of the font, multiplied by some factor (for example, 120%) plus any external leading. This field may exceed lEmHeight.
sCharSlope
Character slope.
Defines the nominal slope for the characters of a font. The slope is defined in degrees increasing clockwise from the vertical. An italic font is an example of a font with a nonzero slope.
Note: The units for this metric are degrees and minutes, encoded as shown in the following example:
180 degrees 59 minutes would be represented as :
│   < byte 1  > │   < byte 2   >  │
│ │ < Minutes > │   < Degrees >   │
│0│1 1 1 0 1 1  │0 1 0 1 1 0 1 0 0│
  │  59 min     │   180 degrees   │
sInlineDir
Inline direction.
The direction in which the characters in the font are designed for viewing. The direction is defined in degrees increasing clockwise from the horizontal (left-to-right). Characters are added to a line of text in the inline direction.
Note: The units for this metric are degrees and minutes, encoded as shown in sCharSlope.
sCharRot
Character rotation.
The rotation of the character glyphs with respect to the baseline, the angle increasing counter clockwise. This is the angle assigned by the font designer.
Note: The units for this metric are degrees and minutes, encoded as shown in sCharSlope.
usWeightClass
Weight class.
Indicates the visual weight (thickness of strokes) of the characters in the font:
Value Description
1 Ultra-light
2 Extra-light
3 Light
4 Semi-light
5 Medium (normal)
6 Semi-bold
7 Bold
8 Extra-bold
9 Ultra-bold
usWidthClass
Width class.
Indicates the relative aspect ratio of the characters of the font in relation to the normal aspect ratio for this type of font:
Value Description % of normal width
1 Ultra-condensed 50
2 Extra-condensed 62.5
3 Condensed 75
4 Semi-condensed 87.5
5 Medium (normal) 100
6 Semi-expanded 112.5
7 Expanded 125
8 Extra-expanded 150
9 Ultra-expanded 200
sXDeviceRes
X-device resolution.
For bit-map fonts this is the resolution in the X direction of the intended target device, measured in pels per inch. For outline fonts this is the number of notional units in the X direction of the Em square, measured in notional units per Em. (Notional units are the units in which the outline is defined.)
sYDeviceRes
Y-device resolution.
For bit-map fonts this is the resolution in the Y direction of the intended target device, measured in pels per inch.
For outline fonts this is the number of notional units in the Y direction of the Em square, measured in notional units per Em. (Notional units are the units in which the outline is defined.)
sFirstChar
First character.
The code point of the first character in the font.
sLastChar
Last character.
The code point of the last character in the font, expressed as an offset from sFirstChar.
All code points between the first and last character specified must be supported by the font.
sDefaultChar
Default character.
The code point that is used if a code point outside the range supported by the font is used, expressed as an offset from sFirstChar.
sBreakChar
Break character.
The code point that represents the "space" or "break" character for this font, expressed as an offset from sFirstChar. For example, if the first character is the space in code page 850, sFirstChar = 32, and sBreakChar = 0.
sNominalPointSize
Nominal point size.
For a bit-map font, this field contains the height of the font.
For an outline font, this field contains the height intended by the font designer. For example, some fonts are designed for text use in which case a value of 120 (12 point) would probably be placed in this field, whereas other fonts are designed for "display" use ("display" is typographer's terminology for larger sizes). This is not the only size at which the font can be used.
Measured in decipoints (a decipoint is 1/720th of an inch).
sMinimumPointSize
Minimum point size.
For a bit-map font, this field does not apply. For an outline font, this field contains the minimum height intended by the font designer. Note that this is not a restriction of the size at which the font can be used.
Measured in decipoints (a decipoint is 1/720th of an inch).
sMaximumPointSize
Maximum point size.
For a bit-map font, this field does not apply.
For an outline font, this field contains the maximum height intended by the font designer. Note that this is not a restriction of the size at which the font can be used.
Measured in decipoints (a decipoint is 1/720th of an inch).
fsType
Type indicators.
This field contains the following information:
FM_TYPE_FIXED - Characters in the font have the same fixed width.
FM_TYPE_LICENSED - Licensed (protected) font.
FM_TYPE_KERNING - Font contains kerning information.
FM_TYPE_64K - Font is larger than 64KB (KB equals 1024 bytes) in size. If the following two bits are false, the font is for single-byte code pages. One of the bits may be set.
FM_TYPE_DBCS - Font is for double-byte code pages.
FM_TYPE_MBCS - Font is for mixed single- or double-byte code pages.
FM_TYPE_FACETRUNC - Font szFacename has been truncated.
FM_TYPE_FAMTRUNC - Font szFamilyname has been truncated.
FM_TYPE_ATOMS - The System Atom table atom values in FamilyNameAtom and in FaceNameAtom are valid.
fsDefn
Definition indicators.
Contains the following font definition data:
FM_DEFN_OUTLINE - Font is a vector (outline) font; otherwise, it is a bit-map font.
FM_DEFN_GENERIC - Font is in a format that can be used by the GPI; otherwise, it is a device font.
fsSelection
Selection indicators.
Contains information about the font patterns in the physical font.
Note: The flags do not reflect simulations applied to the physical font.
Possible values are:
FM_SEL_ITALIC True indicates that this font is designed as an italic font.
FM_SEL_UNDERSCORE TRUE indicates that this font is designed with underscores included in each character.
FM_SEL_NEGATIVE TRUE indicates that this font is designed with the background and foreground reversed.
FM_SEL_OUTLINE TRUE indicates that this font is designed with outline (hollow) characters.
FM_SEL_STRIKEOUT TRUE indicates that this font is designed with an overstrike through each character.
FM_SEL_BOLD TRUE indicates that this font is designed with bold characters.
FM_SEL_ISO9241_TESTED This flag indicates that the font has been tested for compliance to ISO 9241. The presence of this flag doesn't indicate whether the font passed or failed, only that it was tested.
Note: While the fonts were primarily tested for meeting the ISO standard, they have also been designed to meet the German standard DIN 66 234. Where the two standards differ, the fonts have been designed to meet the more stringent requirement.
fsCapabilities
Font capabilities.
This attribute applies only to device fonts.
FM_CAP_NOMIX Characters may not be mixed with graphics.
QUALITY - The most significant byte may contain the following numeric value:
0 Undefined
1 DP quality
2 DP draft
3 Near Letter Quality
4 Letter Quality
lSubscriptXSize
Subscript x-size.
The horizontal size recommended by the font designer for subscripts for this font in world coordinate units.
lSubscriptYSize
Subscript y-size.
The vertical size recommended by the font designer for subscripts for this font in world coordinate units.
lSubscriptXOffset
Subscript x-offset.
The baseline x-offset recommended by the font designer for subscripts for this font in world coordinate units.
lSubscriptYOffset
Subscript y-offset.
The baseline y-offset recommended by the font designer for subscripts for this font in world coordinate units.
Note: Positive numbers indicate an offset below the baseline.
lSuperscriptXSize
Superscript x-size.
The horizontal size recommended by the font designer for superscripts for this font in world coordinate units.
lSuperscriptYSize
Superscript y-size.
The vertical point size recommended by the font designer for superscripts for this font in world coordinate units.
lSuperscriptXOffset
Superscript x-offset.
The baseline x-offset recommended by the font designer for superscripts for this font in world coordinate units.
lSuperscriptYOffset
Superscript y-offset.
The baseline y-offset recommended by the font designer for superscripts for this font in world coordinate units.
lUnderscoreSize
Underscore size.
The width (thickness) of the underscore stroke in world coordinate units. This describes the actual underscore in the font if FM_SEL_UNDERSCORE is also set. Otherwise it describes what the engine will simulate if underscore is requested in piCreateLogFont.
lUnderscorePosition
Underscore position.
The position of the underscore stroke from the baseline in world coordinate units. This describes the actual underscore in the font if FM_SEL_UNDERSCORE is also set. Otherwise it describes what the engine will simulate if underscore is requested in GpiCreateLogFont.
Note: Positive values indicate an offset below the baseline.
lStrikeoutSize
Strikeout size.
The width of the strikeout stroke in world coordinate units. This describes the actual underscore in the font if FM_SEL_STRIKEOUT is also set. Otherwise it describes what the engine will simulate if overstrike is requested in GpiCreateLogFont.
lStrikeoutPosition
Strikeout position.
The position of the strikeout stroke relative to the baseline in world coordinate units. This describes the actual underscore in the font if FM_SEL_STRIKEOUT is also set. Otherwise it describes what the engine will simulate if overstrike is requested in GpiCreateLogFont.
sKerningPairs
Kerning pairs.
The number of kerning pairs in the kerning pair table.
sFamilyClass
Font family design classification.
This value contains a font class and its subclass.
lMatch
Matched font identity. This uniquely identifies the font for a given device and device driver combination. A positive match number signifies that the font is a generic (engine) font while a negative number indicates a device font (a native or downloadable font). This value should not be used to identify a font across system boundaries.
FamilyNameAtom
Font family name atom.
This value contains the atom identifier for the font family name in the System Atom Table.
FaceNameAtom
Font facename atom.
This value contains the atom identifier for the font face name in the System Atom Table.
panose
Panose font descriptor.
This is the Panose descriptor identifying the visual characteristics of the font.