<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
/* Font Definitions */
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Tahoma;
panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
{font-family:Georgia;
panose-1:2 4 5 2 5 4 5 2 3 3;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
{mso-style-priority:99;
mso-style-link:"Plain Text Char";
margin:0in;
margin-bottom:.0001pt;
font-size:10.0pt;
font-family:"Georgia","serif";}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
{mso-style-priority:99;
mso-style-link:"Balloon Text Char";
margin:0in;
margin-bottom:.0001pt;
font-size:8.0pt;
font-family:"Tahoma","sans-serif";}
span.PlainTextChar
{mso-style-name:"Plain Text Char";
mso-style-priority:99;
mso-style-link:"Plain Text";
font-family:"Georgia","serif";}
span.BalloonTextChar
{mso-style-name:"Balloon Text Char";
mso-style-priority:99;
mso-style-link:"Balloon Text";
font-family:"Tahoma","sans-serif";}
.MsoChpDefault
{mso-style-type:export-only;}
@page Section1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
{page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=EN-US link=blue vlink=purple>
<div class=Section1>
<p class=MsoPlainText>Thanks for the explanation, Si. From what you’re saying,
it sounds like TT fonts must have a kern table in order for kerning to happen
in PowerPoint Office 2007, at least on Windows. (Does anyone know of other such
apps?)<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>I didn’t call them out in the lists of Windows fonts with
both GPOS and kern tables below, but as I’ve mentioned before, important fonts
such as Times New Roman and Arial in Vista have a kern table and a GPOS table with
no kern feature.<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>What should a layout engine do in this case? I’m not sure
users will be very happy if OpenType apps don’t kern their TNR and Arial
documents – or if the GPOS features that are present don’t get applied.<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>Or do we consider the above fonts to be badly made?<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>If it helps, I think it’s OK to change the “must”s in
Adobe’s proposal (quoted by Vlad below) to “should”s. It is in the
Recommendations section, after all, and not in the spec proper. (I think layout
engine behavior should be in the spec proper, but that’s not something that
will be addressed in this next round.)<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>Also, if desired, I’m OK with changing “font vendors are
encouraged” to “font vendors are strongly encouraged”.<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>(I’ll be out of the office March 12-22, BTW.)<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>Best,<o:p></o:p></p>
<p class=MsoPlainText>Sairus<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<div style='mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.0pt;
padding:0in 0in 1.0pt 0in'>
<p class=MsoPlainText style='border:none;padding:0in'><o:p> </o:p></p>
</div>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>-----Original Message-----<br>
From: listmaster@indx.co.uk [mailto:listmaster@indx.co.uk] On Behalf Of Levantovsky,
Vladimir<br>
Sent: Wednesday, March 10, 2010 12:04 PM<br>
To: multiple recipients of OpenType - sent by<br>
Subject: RE: [OpenType] Kerning<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>Message from OpenType list:<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>Thank you, Michelle.<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>All,<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>Currently, there is a language in the ISO/IEC
14496-22/DCOR1 (draft corrigendum) that modifies ‘kern’ table section of the
“Recommendations” (chapter 7) by adding the following:<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>When a kern table and GPOS table are both present in a
font, and an OFF layout engine is requested to apply kerning to a run of text
of a particular script and language system: (a) If the number of kern feature
lookups in the resolved language system in the GPOS table is zero, then the
kern table must be applied, followed by any remaining GPOS features requested.
(b) If the number of kern feature lookups in the resolved language system in
the GPOS table is non-zero, then all GPOS lookups, including the kern lookups,
must be applied in the usual way and the kern table data ignored.<o:p></o:p></p>
<p class=MsoPlainText>If a kern table but no GPOS table is present in the font,
then an OFF layout engine must apply the kern table to the text, regardless of
the resolved language system of the text.<o:p></o:p></p>
<p class=MsoPlainText>If compatibility with legacy environments is not a
concern, font vendors are encouraged to record kerning in the GPOS table's kern
feature and not in the kern table.<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>If we want to modify the text of the corrigendum, we need
to come up with and agree on the new wording. The draft corrigendum is
currently under open ballot, and in order to submit ballot comments on time we
need to finalize any changes to the text no later than end of March.<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>Thank you and best regards,<o:p></o:p></p>
<div style='mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.0pt;
padding:0in 0in 1.0pt 0in'>
<p class=MsoPlainText style='border:none;padding:0in'><o:p> </o:p></p>
<p class=MsoPlainText style='border:none;padding:0in'>Vladimir<o:p></o:p></p>
<p class=MsoPlainText style='border:none;padding:0in'><span style='color:black'><o:p> </o:p></span></p>
</div>
<p class=MsoPlainText><span style='color:black'><o:p> </o:p></span></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>From: mpeg-OTspec@yahoogroups.com
[mailto:mpeg-OTspec@yahoogroups.com] On Behalf Of Michelle Perham<o:p></o:p></p>
<p class=MsoPlainText>Sent: Wednesday, March 10, 2010 2:32 PM<o:p></o:p></p>
<p class=MsoPlainText>To: mpeg-OTspec@yahoogroups.com<o:p></o:p></p>
<p class=MsoPlainText>Subject: [mpeg-OTspec] FW: [OpenType] Kerning<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>Forwarding Simon's response posted to the other list.<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>-----Original Message-----<o:p></o:p></p>
<p class=MsoPlainText>From:
listmaster@indx.co.uk<mailto:listmaster%40indx.co.uk>
[mailto:listmaster@indx.co.uk<mailto:listmaster%40indx.co.uk>] On Behalf
Of Simon Daniels<o:p></o:p></p>
<p class=MsoPlainText>Sent: Wednesday, March 10, 2010 10:58 AM<o:p></o:p></p>
<p class=MsoPlainText>To: multiple recipients of OpenType - sent by<o:p></o:p></p>
<p class=MsoPlainText>Subject: [OpenType] Kerning<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>Message from OpenType list:<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>Hi,<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>Responding to earlier questions regarding OpenType
Kerning and TrueType kern table co-existing in some of our fonts.<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>There are two reasons some of our fonts contain both
styles of kerning…<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>1. During the development of Office 2007 we made the case
for PowerPoint turning on kerning by default. When they followed our advice
they found that the new C* fonts were not kerning, we knew we really had to do
something, and that was adding in the kern table. This happened at the last
minute during Windows Vista/Office 2007, by converting OT-kerning to kern and
removing all pairs that contained unmapped glyphs.<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>2. Some Windows apps, and Mac OS, assumed that any font
with GPOS table would contain OpenType kerning, so kern table was being ignored
in fonts like TNR which had mark positioning. For this reason we had to add
OpenType kerning to some of the legacy fonts which we’d licensed to Apple as
well as those commonly used in the OT-savvy Windows apps.<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>I don’t know if the spec needs to talk about what to do
if a font contains both. One would expect that both sets are compatible, and
that the app would use the OpenType kerning first, and only use kern if there
were no GPOS kerning.<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>Cheers, Si<o:p></o:p></p>
<div style='mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.0pt;
padding:0in 0in 1.0pt 0in'>
<p class=MsoPlainText style='border:none;padding:0in'><o:p> </o:p></p>
</div>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> mpeg-OTspec@yahoogroups.com
[mailto:mpeg-OTspec@yahoogroups.com] <b>On Behalf Of </b>Sairus Patel<br>
<b>Sent:</b> Tuesday, March 02, 2010 4:16 PM<br>
<b>To:</b> mpeg-OTspec@yahoogroups.com; opentype-migration-list@indx.co.uk<br>
<b>Subject:</b> RE: [mpeg-OTspec] Interaction between kern table and GPOS table<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'>Microsoft
wrote on 2/9/2010:<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'>>
It is trying to cover some class of legacy cases… I do not even know how common
this case is.<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'>Fonts
containing both GPOS and kern tables that ship with Windows:<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'><o:p> </o:p></span></p>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Georgia","serif"'>**
XP SP2: 4 fonts **<o:p></o:p></span></b></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'>(pala.ttf
palab.ttf palabi.ttf palai.ttf)<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'> <o:p></o:p></span></p>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Georgia","serif"'>**
Vista: 65 fonts **<o:p></o:p></span></b></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'>(arial.ttf
arialbd.ttf arialbi.ttf ariali.ttf ariblk.ttf calibri.ttf calibrib.ttf
calibrii.ttf calibriz.ttf cambria.ttc cambriab.ttf cambriai.ttf cambriaz.ttf Candara.ttf
Candarab.ttf Candarai.ttf Candaraz.ttf constan.ttf constanb.ttf constani.ttf
constanz.ttf corbel.ttf corbelb.ttf corbeli.ttf corbelz.ttf dokchamp.ttf
euphemia.ttf framd.ttf gisha.ttf gishabd.ttf himalaya.ttf impact.ttf
iskpota.ttf leelawad.ttf leelawdb.ttf meiryo.ttc meiryob.ttc monbaiti.ttf
moolbor.ttf pala.ttf palab.ttf palabi.ttf palai.ttf segoepr.ttf segoeprb.ttf
segoesc.ttf segoescb.ttf segoeui.ttf segoeuib.ttf segoeuii.ttf segoeuiz.ttf
tahoma.ttf tahomabd.ttf times.ttf timesbd.ttf timesbi.ttf timesi.ttf trebuc.ttf
trebucbd.ttf trebucbi.ttf trebucit.ttf verdana.ttf)<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'> <o:p></o:p></span></p>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Georgia","serif"'>**
Windows 7 (Enterprise): 81 fonts **<o:p></o:p></span></b></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'>(arial.ttf
arialbd.ttf arialbi.ttf ariali.ttf ariblk.ttf calibri.ttf calibrib.ttf
calibrii.ttf calibriz.ttf cambria.ttc cambriab.ttf cambriai.ttf cambriaz.ttf
Candara.ttf Candarab.ttf Candarai.ttf Candaraz.ttf constan.ttf constanb.ttf
constani.ttf constanz.ttf corbel.ttf corbelb.ttf corbeli.ttf corbelz.ttf
dokchamp.ttf euphemia.ttf framd.ttf gisha.ttf gishabd.ttf himalaya.ttf
impact.ttf iskpota.ttf iskpotab.ttf KhmerUI.ttf KhmerUIb.ttf LaoUI.ttf
LaoUIb.ttf leelawad.ttf leelawdb.ttf meiryo.ttc meiryob.ttc monbaiti.ttf
moolbor.ttf msjh.ttf msyh.ttf pala.ttf palab.ttf palabi.ttf palai.ttf
segoepr.ttf segoeprb.ttf segoesc.ttf segoescb.ttf segoeui.ttf segoeuib.ttf
segoeuii.ttf segoeuil.ttf segoeuiz.ttf seguisb.ttf seguisym.ttf Shonar.ttf
Shonarb.ttf tahoma.ttf times.ttf timesbd.ttf timesbi.ttf timesi.ttf tradbdo.ttf
trado.ttf trebuc.ttf trebucbd.ttf trebucbi.ttf trebucit.ttf verdana.ttf)<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'>Cleary,
the number of such fonts is *increasing* with every new version of Windows.
Brand-new font families as well as some of the most commonly used fonts in the
world (Arial and Times, as listed above) have both GPOS and kern tables.<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'>Surely
the OT/OFF specs cannot ignore addressing how such fonts are to be handled.<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'>>
It is really easy to generate GPOS lookups out of ‘kern’ table, especially with
my kern2volt toolJ.<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'>In
that case, it would be good to know the reason for putting the ‘kern’ table in
fonts -- especially new families -- that ship with Windows. Or are all the
fonts above to be considered badly made?<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'>I
think understanding that is an important first step in getting resolution on
this issue.<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'>Best,<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'>Sairus<o:p></o:p></span></p>
<div style='mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.0pt;
padding:0in 0in 1.0pt 0in'>
<p class=MsoNormal style='border:none;padding:0in'><span style='font-size:10.0pt;
font-family:"Georgia","serif"'> <o:p></o:p></span></p>
</div>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'><o:p> </o:p></span></p>
<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><b><span
style='font-size:10.0pt'>From:</span></b><span style='font-size:10.0pt'>
Michelle Perham [mailto:mihill@microsoft.com] <br>
<b>Sent:</b> Tuesday, February 09, 2010 12:40 PM<br>
<b>To:</b> Levantovsky, Vladimir; Sairus Patel; John Hudson<br>
<b>Cc:</b> mpeg-OTspec@yahoogroups.com<br>
<b>Subject:</b> RE: [mpeg-OTspec] Interaction between kern table and GPOS table
[1 Attachment]</span><o:p></o:p></p>
<p class=MsoPlainText>Thanks Vlad. At Microsoft we have some concerns over the
kern table recommendations. Here is a summary of our concerns that was compiled
by Sergey:<o:p></o:p></p>
<p class=MsoPlainText> <o:p></o:p></p>
<p class=MsoPlainText>- It is hard to define exact behavior that will work for
everybody. Does it make sense to make it per-script or we just cover legacy font
with no kerning lookup at all? Should we skip mark glyphs while looking for
kerning pairs? There is no strict answer for these questions, so it opens door
for incompatible implementations and, therefore, hacky fonts.<o:p></o:p></p>
<p class=MsoPlainText> <o:p></o:p></p>
<p class=MsoPlainText>- It is dangerous to combine kern and GPOS lookups. It
may seem to help with some fonts, but will mess up less obvious cases. I
remember how easily we broke font lookups by zeroing widths of mark glyphs
outside of GPOS. Applying kerning may have the same effect.<o:p></o:p></p>
<p class=MsoPlainText> <o:p></o:p></p>
<p class=MsoPlainText>- It is really easy to generate GPOS lookups out of
‘kern’ table, especially with my kern2volt toolJ. We did this backwards for
ClearType fonts without much effect on overall font size. FontLab also should
be able to generate both from one source.<o:p></o:p></p>
<p class=MsoPlainText> <o:p></o:p></p>
<p class=MsoPlainText>- I do not see this as implementation spec, it has
appropriate level of detail for desired behavior. But it does not mean I like
this proposed behavior. It is trying to cover some class of legacy cases, will
open door for future hack, have danger of breaking old fonts and may not
work as Adobe expects it to work. And I do not even know how common this case
is.<o:p></o:p></p>
<p class=MsoPlainText> <o:p></o:p></p>
<p class=MsoPlainText>- Too many ‘must’s.<o:p></o:p></p>
<p class=MsoPlainText> <o:p></o:p></p>
<p class=MsoPlainText>Michelle<o:p></o:p></p>
<p class=MsoNormal><span style='font-size:10.0pt;font-family:"Georgia","serif"'><o:p> </o:p></span></p>
<p class=MsoPlainText><o:p> </o:p></p>
</div>
</body>
</html>