<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: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=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Aptos;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
font-size:11.0pt;
font-family:"Aptos",sans-serif;
mso-ligatures:standardcontextual;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#467886;
text-decoration:underline;}
span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Aptos",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:11.0pt;
font-family:"Aptos",sans-serif;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></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="#467886" vlink="#96607D" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-CA">I’ve discussed the Nov 20 draft proposal for adding cubic support in TrueType glyph descriptions with others at Microsoft and we have a few comments to bring up in tomorrow’s AHG meeting. I’ll summarize them in mail to
give a (brief) chance to consider in advance. (I’ll send separate mail with comments regarding cubic beziers.)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA">The proposal: </span><a href="https://github.com/harfbuzz/boring-expansion-spec/blob/main/iso_docs/WG03-beyond-64k-glyphs-2023-11-20.pdf">boring-expansion-spec/iso_docs/WG03-beyond-64k-glyphs-2023-11-20.pdf at main ·
harfbuzz/boring-expansion-spec (github.com)</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The conciseness of the change is nice. We’re wondering if the documentation might be just a bit too concise, and whether some additional text should be added to make it clearer how data is interpreted. We also wonder if there should be
some additional guidance for certain cases? E.g., what should apps do in case of non-conforming glyphs?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">We discussed some interactions with instructions. The proposal states a few constraints on CUBIC off-curve points, but we interpret these as applying to data in a font’s GLYF table. It’s unclear what should happen if, during glyph processing,
states are obtained in which the resulting scaled outline data in memory don’t conform to those constraints.
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">In particular the <a href="https://learn.microsoft.com/en-us/typography/opentype/spec/tt_instructions#flip-point">
FLIPPT</a>, FLIPRGON, FLIRGOFF instructions can change on-curve points to be off-curve, and vice versa. If a cubic off-curve point were flipped to be on-curve, then the expectation that the number of consecutive cubic off-curve points is always even would fail
to hold. IIRC, it’s more likely that a font would flip on-curve to become off-curve, but with the current proposal that could never become a cubic off-curve point. We haven’t concluded what we think is the best resolution for this, but we think it’s an open
issue that needs to be resolved.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Related to this, the proposal constrains the CUBIC flag to be set only on off-curve points (i.e., in font data the ON_CURVE_POINT and CUBIC flags cannot both be set on a given point). The only benefit we can see from this constraint is
reserving the option for bit 7 to be given a different definition when applied to on-curve points. We worry about that, particularly given that the FLIP* instructions can change on-curve to off-curve and vice versa, but there are no instructions defined for
changing those flags. Unless it can be said that the flags are always ignored in all rasterizers once programs are run, then that can cause problems. We’re inclined to remove the constraint wrt conjunction of CUBIC and ON_CURVE_POINT flags and simply say that
the CUBIC flag has no effect on on-curve points.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Peter Constable<o:p></o:p></p>
</div>
</body>
</html>