I agree with you on points 1, 2 and 11 for sure.<div><br></div><div>I DISagree on points 3 and 4. Transformation matrix has been used in real fonts, though arguably not needed.Non-1000-unit em squares, although unusual, are used in shipping fonts. Sometimes they are a near-necessity.</div>
<div><br></div><div>Most of your other points seem reasonable, but would require some homework to verify. If I recall correctly in regards to point 10, the two entries should be EQUIVALENT, but in one case underline position is calculated from the middle and the other is calculated from... it's either the top or the bottom.</div>
<div><br></div><div>Cheers,</div><div><br></div><div>T<br><br><div class="gmail_quote">On Wed, Dec 16, 2009 at 8:37 AM, Manlio Perillo <span dir="ltr"><<a href="mailto:manlio.perillo@gmail.com">manlio.perillo@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">-----BEGIN PGP SIGNED MESSAGE-----<br>
Hash: SHA1<br>
<br>
Hi.<br>
<br>
Some time ago I posted some questions (on opentype-migration-list) about<br>
specific restrictions about CFF data, when embedded in an OpenType font.<br>
<br>
The problem is that CFF contains an *entire* font, that is embedded in<br>
another Font (OpenType).<br>
<br>
<br>
Now I have finally added support to CFF table, in my OpenType parser,<br>
and I would like to share some details with you.<br>
<br>
In my implementation I'm enforcing the following constraints:<br>
<br>
1) The Name INDEX *must* contain only one entry;<br>
   that is, there *must* be only one font in the FontSet.<br>
<br>
   I think that this is an important constratint, and should be added in<br>
   the CFF specification, in the CFF table description.<br>
<br>
   The following restrictions, instead, should be added in a separate<br>
   Annex.<br>
<br>
2) CharstringType entry in the Top DICT *must* be 2.<br>
<br>
3) FontMatrix entry in the Top DICT *must* be [0.001 0 0 0.001 0].<br>
<br>
   Note that I'm not sure about this.<br>
   The Type 1 specification highly recommends this value, and I would<br>
   like to know if other values are actually being used.<br>
<br>
   I would also like to know if the FontMatrix can define more complex<br>
   transformation, instead of a simple scaling; and if this can cause<br>
   problems for an OpenType font.<br>
<br>
4) unitsPerEm parameter in the "head" table *must* be equal to 1000.<br>
<br>
   In this case, as long as the FontMatrix is in the form<br>
   [1/x 0 0 1/x 0],<br>
   this parameter can take any value.<br>
   I'm not sure, however, that a font maker would like to use different<br>
   scales for the font metrics; so this value *should* be the same as x.<br>
<br>
5) xMin, yMin, xMax and yMax parameters in the "head" table *must* be<br>
   the same as the FontBBox entry in the Top DICT.<br>
<br>
6) numGlyphs parameter in the "maxp" table *must* be the same as the<br>
   number of entries in the CharStrings INDEX.<br>
<br>
7) The Postscript name in the "name" table *must* be the same as the<br>
   font name found in the Name INDEX.<br>
<br>
   I'm not sure how the PostscriptCIDName should be handled, if defined.<br>
   In the CIDFonts from Adobe Acrobat Reader, this name is never<br>
   defined.<br>
<br>
8) There should be some simple algorithm for build some of the names in<br>
   the "name" table, starting from FullName and FamilyName entries in<br>
   the Top DICT.<br>
<br>
9) The value of the italicAngle parameter in the "post" table *must* be<br>
   the same as the ItalicAngle entry in the Top DICT.<br>
<br>
10) The value of underlinePosition parameter in the "post" table,<br>
   computed as described in the Open Font Format specification, *must*<br>
   be the same as the UnderlinePosition entry in the Top DICT.<br>
<br>
11) The value of the underlineThickness parameter in the "post" table<br>
    *must* be the same as the UnderlineThickness entry in the Top DICT.<br>
<br>
12) The value of the isFixedPitch parameter in the "post" table<br>
    *must* be the same as the isFixedPitch entry in the Top DICT.<br>
<br>
13) The value of the usWeightClass parameter in the "OS/2" table<br>
   *should* be compatible with the Weight entry in the Top DICT.<br>
<br>
    A precise restriction can not be written, since in Type 1 fonts the<br>
    Weight is a string, and these string names are not standardized.<br>
<br>
<br>
I tried different fonts to check if these constraints are valid.<br>
Fonts from Adobe Acrobat Reader seems to be ok.<br>
<br>
Fonts produced by FontForge fails to meet these constraints.<br>
As an example a Times-Roman ttf font converted to otf have:<br>
<br>
Top DICT:<br>
  FontBBox: [-569, -307, 1133, 1007]<br>
  UnderlinePosition: -100<br>
  UnderlineThickness: 50<br>
<br>
"head":<br>
  bbox: [-568, -306, 1132, 1006]<br>
<br>
"post":<br>
  underline-position: 0<br>
  underline-thickness: 0<br>
<br>
<br>
An OTF font that come with Opera (if I remenber correctly) Inconsolata:<br>
<br>
Top DICT:<br>
  FontBBox: [-1, -177, 510, 835]<br>
  UnderlinePosition: -100<br>
  UnderlineThickness: 50<br>
<br>
"head":<br>
  bbox: [0, -176, 509, 834]<br>
<br>
"post":<br>
  underline-position: -125<br>
  underline-thickness: 50<br>
  computed-underline-position: -150<br>
<br>
<br>
<br>
There is something that is wrong here.<br>
<br>
<br>
<br>
Thanks   Manlio<br>
-----BEGIN PGP SIGNATURE-----<br>
Version: GnuPG v1.4.10 (GNU/Linux)<br>
Comment: Using GnuPG with Mozilla - <a href="http://enigmail.mozdev.org" target="_blank">http://enigmail.mozdev.org</a><br>
<br>
iEYEARECAAYFAkspDMYACgkQscQJ24LbaUT3DgCfVV0p1FETFop8xF2VfzKyq6d+<br>
MXMAnRakTQ6MXnCK+MQ22zL33dZ1EP2L<br>
=4h9H<br>
-----END PGP SIGNATURE-----<br>
<br>
<br>
------------------------------------<br>
<br>
Yahoo! Groups Links<br>
<br>
<*> To visit your group on the web, go to:<br>
    <a href="http://groups.yahoo.com/group/mpeg-OTspec/" target="_blank">http://groups.yahoo.com/group/mpeg-OTspec/</a><br>
<br>
<*> Your email settings:<br>
    Individual Email | Traditional<br>
<br>
<*> To change settings online go to:<br>
    <a href="http://groups.yahoo.com/group/mpeg-OTspec/join" target="_blank">http://groups.yahoo.com/group/mpeg-OTspec/join</a><br>
    (Yahoo! ID required)<br>
<br>
<*> To change settings via email:<br>
    <a href="mailto:mpeg-OTspec-digest@yahoogroups.com">mpeg-OTspec-digest@yahoogroups.com</a><br>
    <a href="mailto:mpeg-OTspec-fullfeatured@yahoogroups.com">mpeg-OTspec-fullfeatured@yahoogroups.com</a><br>
<br>
<*> To unsubscribe from this group, send an email to:<br>
    <a href="mailto:mpeg-OTspec-unsubscribe@yahoogroups.com">mpeg-OTspec-unsubscribe@yahoogroups.com</a><br>
<br>
<*> Your use of Yahoo! Groups is subject to:<br>
    <a href="http://docs.yahoo.com/info/terms/" target="_blank">http://docs.yahoo.com/info/terms/</a><br>
<br>
</blockquote></div><br><br clear="all"><br>-- <br>"It is difficult to get a man to understand something when his salary depends on his not understanding it." — Upton Sinclair<br>
</div>