The Font Mapper

The Font Mapper

The Windows system has its built-in font mapper, which implicitly helps application to find out the closest match from the installed typefaces to application desiring one, when selecting a logical font into a specific device. There are many Windows applications and documents, which depend on the presence of font mapper. To support these applications and documents, the Open32 NLS Extension has Win32 compatible font mapper emulation.

The font mapping logic used in the Windows systems are described in: "Windows Font Mapping", Microsoft Developer Network Development Library, which covers the font mapping process in Windows 3.1 for western countries. The Open32 NLS Extension font mapper is designed based on this specification, with some changes to support vertical writing fonts and to absorb the differences between OS/2 and Windows fonts.

The table shown below describes the penalty values used by the font mapper emulation.

   [CharSet]         65000    Requested charset does not match
                              the candidate's.

   [OutputPrecision] 19000    Requested OUT_STROKE_PRECIS, but
                              the device can't do it or the
                              candidate is not a vector font.
                              Or OUT_STROKE_PRECIS not requested,
                              and the candidate is a vector font
                              that requires GDI support.

   [FixedPitch]      15000    Requested a fixed pitch font, but
                              the candidate is a variable pitch
                              font.

   [FaceName]        10000    Requested a face name, but the
                              candidate's face name does not match.

   [Family]           9000    Requested a family, but the
                              candidate's family is different.

   [FamilyUnknown]    8000    Requested a family, but the
                              candidate has no family.

   [HeightBigger]      600    The candidate is a nonvector font
                              and is bigger than the requested
                              height.

   [FaceNameSubst]     500    New for Windows version 3.1.Requested
                              face name is matched with a substitute
                              face name.

      note: Not implemented in Open32 NLS Extension, because OS/2 does
            not support Font Substitution function.




   [PitchVariable]     350    Requested a variable pitch font, but
                              the candidate is not a variable pitch
                              font.

   [HeightSmaller]     150    The candidate is a raster font and
                              is smaller than the requested height.
                              Penalty * height difference

   [HeightBiggerDifference]  150     The candidate is a raster font
                                     and is larger than the
                                     requested height.
                                     Penalty * height difference

   [FamilyUnlikely]     50    New for Windows version 3.1.
                              Requested a roman/modern/swiss
                              family, but the candidate is
                              decorative/script.
                              Or requested decorative/script,
                              and the candidate is
                              roman/modern/swiss.

      note: In Windows 95 the GDI seems to refer PANOSE numbers to
            check the font family. In OS/2 the valid PANOSE numbers
            are not set in the font metrics. The Open32 NLS Extension
            will not use this PANOSE number information for font
            mapping.

   [Width]              50    Requested a nonzero width, but
                              the candidate's width doesn't
                              match.
                              Penalty * width difference

   [SizeSynth]          50    The candidate is a raster font
                              that needs scaling by GDI.

   [Aspect]             30    The candidate's aspect ratio is
                              different from that of the device.
                              Penalty * ((100 * devY/devX) -
                              (100 * candidateY / candidateX))

      note: Absolute value.

   [IntSizeSynth]       20    The candidate is a raster font
                              that needs scaling.
                              Penalty * (height multiplier +
                              width multiplier)

   [UnevenSizeSynth]     4    The candidate is a raster font
                              that is scaled unequally in
                              width and height.
                              Penalty * (100 * bigger multiplier
                              / smaller multiplier)

   [Italic]              4    Requested font and candidate font
                              do not agree on italic status,
                              and the desired result cannot be
                              simulated.

   [NotTrueType]         4    New for Windows version 3.1.
                              Requested OUT_TT_PRECIS, but the
                              candidate is not a TrueType font.




   [Weight]              3    The candidate's weight does not
                              match the requested weight.
                              Penalty * (weight difference/10)

   [Underline]           3    Requested font has no underline,
                              but the candidate is underlined.

   [StrikeOut]           3    Requested font has no strike-out,
                              but the candidate is struck out.

   [VectorHeightSmaller] 2    Candidate is a vector font that
                              is smaller than the requested
                              height.
                              Penalty * height difference

   [DeviceFavor]         2    Extra penalty for all nondevice
                              fonts.

   [ItalicSim]           1    New for Windows version 3.1.
                              Requested italic font but the
                              candidate is not italic, although
                              italics can be simulated.

   [DefaultPitchFixed]   1    Requested DEFAULT_PITCH, but the
                              candidate is fixed pitch.

   [SmallPenalty]        1    New for Windows version 3.1.
                              Requested a rotated font, and the
                              candidate needs bold or italic
                              simulation and is a raster or
                              vector font.

   [VectorHeightBigger]  1    Candidate is a vector font that
                              is bigger than the requested
                              height.
                              Penalty * height difference

Note: To support vertical writing fonts, the font mapper in the Windows platforms for Far Eastern countries seems to check the facename prefix '@' in the logical font, as one of independent logical font attributes. The penalty number to be used is

Note: To support applications which need to use point size for selecting a font, the font mapper must support "EmHeight" matching mode (lfHeight < 0 in LOGFONT). For raster fonts, the font mapper checks lEmHeight and syDeviceRes in the OS/2 FONTMETRICS.


[Back: References]
[Next: Vertical Writing Support]