Issues with OpenType/CFF fonts and MS Font Validator

Version 1.0 — April 24 2007


Copyright

Copyright 2014 Adobe Systems Incorporated
Permission is hereby granted, free of charge, to any person obtaining a copy of this documentation file to use, copy, publish, distribute, sublicense, and/or sell copies of the documentation, and to permit others to do the same, provided that:
— No modification, editing or other alteration of this document is allowed; and
— The above copyright notice and this permission notice shall be included in all copies of the documentation.

Permission is hereby granted, free of charge, to any person obtaining a copy of this documentation file, to create their own derivative works from the content of this document to use, copy, publish, distribute, sublicense, and/or sell the derivative works, and to permit others to do the same, provided that the derived work is not represented as being a copy or version of this document.

Adobe shall not be liable to any party for any loss of revenue or profit or for indirect, incidental, special, consequential, or other similar damages, whether based on tort (including without limitation negligence or strict liability), contract or other legal or equitable grounds even if Adobe has been advised or had reason to know of the possibility of such damages. The Adobe materials are provided on an "AS IS" basis. Adobe specifically disclaims all express, statutory, or implied warranties relating to the Adobe materials, including but not limited to those concerning merchantability or fitness for a particular purpose or non-infringement of any third party rights regarding the Adobe materials.


Introduction

The following is a list of inappropriate error messages issued by the MS Font Validator version 1.0.1286.23890 for Adobe OpenType/CFF fonts. These messages should be ignored when checking OpenType fonts that have CFF font data. Note that these issues may be fixed in newer versions of the MS Font Validator.


1. Messages caused by the absence of a table that is TrueType specific

1.a. OpenType CFF fonts do not need or use these tables:
	W0022 Recommended table is missing gasp
	W0022 Recommended table is missing kern
	W0022 Recommended table is missing hdmx
	W0022 Recommended table is missing VDMX
	E6059 Could not perform rasterization Unable to get data from rasterizer. 'glyf' table is not valid.
	

2. Messages caused by layout tables

2.a. The following message is caused by the presence of the GPOS ‘size’ feature, which correctly uses a non-NULL FeatureParams pointer. This feature is registered.
	E5400 The FeatureParams field is not null FeatureList, FeatureRecord[30](size), FeatureTable
	
2.b. The following message is causes by the presence of stylisitic set features. These feature tags are registered.
	W5300 The FeatureRecord tag is valid, but unregistered FeatureList, FeatureRecord[<nnn>], tag = 'ss01'
	

3. Messages caused OS/2 table version 4

3.a. This table version is not yet in the OpenType spec, but the technical details have been agreed on by Adobe and MS engineers, and discussed on the external OpenType list. Presence of this table version causes the following messages:
	E2127 The table length does not match the expected length for this version
	E2132 The version number is invalid 4
	W0051 Cannot perform test due to other errors in this table OS/2 table appears to be corrupt. No further tests will be performed
	W2106 The version number is valid, but less than 3 2
	

4. Messages caused by differences in approach by Adobe and MS

4.a. Adobe does not require that a font contain all the glyphs in a code page in order to declare support for that code page. As a result the following message may be seen:
	W2101 A CodePage bit is set in ulCodePageRange, but the font is missing some of the printable characters from that codepage bit #<n>...
	
4.b. The first release of the Adobe OpenType fonts contained PUA (Private Use Area) Unicode values. Future versions of the same fonts will contain the same PUA values in order to avoid problems between versions. However, we agree that it is best to avoid using PUA values when possible, and new fonts will not have them. As a result, the following message may be seen:
	W0307 Characters are mapped in the Unicode Private Use Area
	
4.c. The head table contains a value which indicates the lowest size at which the font can be read. This makes sense for TrueType fonts, where the itself controls many details of hinting, and the designer can usefully determine the threshold of legibility. However, in the CFF model, the hints are only suggestions, and the rasterizer may change over time. The Adobe Type Department chooses to set this value to 3 as being so low that it will not interfere with future improvements in rasterization and anti-aliasing. As a result, the following warning will be seen:
	W1305 The lowestRecPPEM value may be unreasonably small lowestRecPPEM = 3
	
4.d. A font which is not an italic style of another face in the same family can nevertheless have large italic angle. Examples are script fonts and italic designs which are the only font in the family. In this case the Adobe Type Department prefers to enter the real italic angle in the post table italicAngle field. This way, the insertion bar is correctly slanted in most programs. However, this will cause the following messages:
	E1316 The macStyle italic bit is clear, but the post table italic angle is nonzero
	E2308 The italicAngle is nonzero, but the head.macStyle italic bit is not set
	
4.e. The Adobe Type Department prefers to set the hhea table Ascender/Descender to the same value as the OS/2 table sTypoAscender/Descender, rather than the OS/2 table usWinAscent/Descent. We also prefer to set the LineGap to 20% of the em-square, although other choices are reasonable. As a result, the following messages are usually shown:
	W1404 The LineGap value is less than the recommended value LineGap = 200, recommended = <n>
	W1405 Ascender is different than OS/2.usWinAscent. Different line heights on Windows and Apple hhea.Ascender = <n1>, OS/2.usWinAscent = <n2>
	W1406 Descender is different than OS/2.usWinDescent. Different line heights on Windows and Apple hhea.Descender = <n1>, OS/2.usWinDescent = <n2>
	

Version History

Version 1.0 First version. Read Roberts 4/24/2007