<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; color: rgb(0, 0, 0); font-size: 14px; font-family: Calibri, sans-serif;">
<div>
<div>
<div>For what it’s worth, one of the structural issues that came up fairly early in the OpenType definition process has to do with these implementation recommendations. We started down the path of recommending what appeared to be the most obvious implementation
 – but a number of forward-looking people pointed out that there are nearly always cases that benefit from using alternate implementations. (An early example was the question of whether superiors and inferiors could/should be handled as GPOS instead of GSUB.)</div>
<div><br>
</div>
<div>I concur with the notion that it’s dangerous in principle to make implementation assumptions based on a layout feature name. Any competent engine should be looking at what actual lookups are called, and not jump to conclusions.</div>
<div><br>
</div>
<div>I agree with Peter’s concern about environments that present incomplete implementations specific to supporting a given script. But in the ‘vert’ case, I’d expect such setups would get the same result they get today, because they’d ignore the GPOS capabilities.</div>
<div><br>
</div>
<div>Thanks,</div>
<div>
<div id="MAC_OUTLOOK_SIGNATURE">
<div>
<div>-- </div>
<div>David Lemon</div>
</div>
<div>Sr Manager, Type Development</div>
<div>Adobe</div>
</div>
</div>
</div>
</div>
<div><br>
</div>
<span id="OLK_SRC_BODY_SECTION">
<div style="font-family:Calibri; font-size:12pt; text-align:left; color:black; BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BORDER-TOP: #b5c4df 1pt solid; BORDER-RIGHT: medium none; PADDING-TOP: 3pt">
<span style="font-weight:bold">From: </span>"<a href="mailto:mpeg-OTspec@yahoogroups.com">mpeg-OTspec@yahoogroups.com</a>" <<a href="mailto:mpeg-OTspec@yahoogroups.com">mpeg-OTspec@yahoogroups.com</a>> on behalf of "Ken Lunde
<a href="mailto:lunde@adobe.com">lunde@adobe.com</a> [mpeg-OTspec]" <<a href="mailto:mpeg-OTspec-noreply@yahoogroups.com">mpeg-OTspec-noreply@yahoogroups.com</a>><br>
<span style="font-weight:bold">Reply-To: </span>Ken Lunde <<a href="mailto:lunde@adobe.com">lunde@adobe.com</a>><br>
<span style="font-weight:bold">Date: </span>Wednesday, February 15, 2017 at 9:41 AM<br>
<span style="font-weight:bold">To: </span>"<a href="mailto:mpeg-OTspec@yahoogroups.com">mpeg-OTspec@yahoogroups.com</a>" <<a href="mailto:mpeg-OTspec@yahoogroups.com">mpeg-OTspec@yahoogroups.com</a>>, "<a href="mailto:opentype-list@indx.co.uk">opentype-list@indx.co.uk</a>"
 <<a href="mailto:opentype-list@indx.co.uk">opentype-list@indx.co.uk</a>><br>
<span style="font-weight:bold">Subject: </span>[mpeg-OTspec] Re: The 'vert' GPOS (not GSUB) feature<br>
</div>
<div><br>
</div>
<div>
<div>
<div>Peter,</div>
<div><br>
</div>
<div>I welcome this. This functionality has been broken for so long, and I'd like to at least address this in the Source Han Sans / Noto Sans CJK Version 2.000 update later this year, to deploy fonts with the appropriate table/feature settings.</div>
<div><br>
</div>
<div>BTW, I wrote this up in the latest CJK Type Blog article that I published earlier this morning, which includes links to the Source Han Sans and Noto Sans CJK, along with links to two font implementations:</div>
<div><br>
</div>
<div>  <a href="https://blogs.adobe.com/CCJKType/2017/02/to-gpos-or-not-to-gpos.html">https://blogs.adobe.com/CCJKType/2017/02/to-gpos-or-not-to-gpos.html</a></div>
<div><br>
</div>
<div>Regards...</div>
<div><br>
</div>
<div>-- Ken</div>
<div><br>
</div>
<blockquote id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE" style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;">
<div>On Feb 13, 2017, at 9:17 PM, Peter Constable <<a href="mailto:petercon@microsoft.com">petercon@microsoft.com</a>> wrote:</div>
<div></div>
<div>Ken:</div>
<div>  </div>
<div>I would want time to evaluate implications of revising the ‘vert’ description before considering changes.</div>
<div>  </div>
<div>  </div>
<div>Peter</div>
<div>  </div>
<div>From: <a href="mailto:mpeg-OTspec@yahoogroups.com">mpeg-OTspec@yahoogroups.com</a> [<a href="mailto:mpeg-OTspec@yahoogroups.com">mailto:mpeg-OTspec@yahoogroups.com</a>] On Behalf Of Ken Lunde
<a href="mailto:lunde@adobe.com">lunde@adobe.com</a>[mpeg-OTspec]</div>
<div>Sent: Monday, February 13, 2017 7:45 PM</div>
<div>To: <a href="mailto:mpeg-OTspec@yahoogroups.com">mpeg-OTspec@yahoogroups.com</a>;
<a href="mailto:opentype-list@indx.co.uk">opentype-list@indx.co.uk</a></div>
<div>Subject: [mpeg-OTspec] Re: The 'vert' GPOS (not GSUB) feature</div>
<div>  </div>
<div>   </div>
<div>Peter, </div>
<div></div>
<div>The number of environments that support combining jamo is limited, and vertical typesetting of Korean is perhaps even more rare, especially when it includes combining jamo. In more ways than one, we are in somewhat uncharted territory, so sticking with
 the status quo might not be the right approach here. </div>
<div></div>
<div>As I stated in my reply to Jan, two environments already support a font that includes *both* a 'vert' GSUB feature and a 'vert' GPOS feature (ignoring what seems to be a bug in macOS's implementation). Furthermore, Adobe's tools correctly build such fonts
 as evidenced by the test font that I provided in the referenced URL. </div>
<div></div>
<div>I completely understand that some environments may not handle such fonts today, or even in the near future. That is completely okay, mainly because this behavior is currently broken in virtually all environments, and I prefer to think longer term. Baby
 steps. </div>
<div></div>
<div>So, for the longer term and to be somewhat point-blank, does anyone have any objection to modifying the 'vert' feature description, in terms of the "Recommended implementation" and "Application interface" sections, so as to not preclude parallel GPOS implementations,
 especially given that at least two environments support it? </div>
<div></div>
<div>Getting Adobe apps to support this, let alone getting them to support combining jamo, might be an uphill battle on my end, but my interest is more about building the fonts correctly. "If they build it, they will come."
</div>
<div></div>
<div>BTW, the handling of U+20DD, U+3099, and U+309A in vertical writing also benefit from this approach. The latter two are for the kana script, and are for attaching the "dakuten" and "handakuten" annotations to arbitrary kana characters.
</div>
<div></div>
<div>Regards... </div>
<div></div>
<div>-- Ken </div>
<div></div>
<div>> On Feb 13, 2017, at 11:55 AM, Peter Constable <<a href="mailto:petercon@microsoft.com">petercon@microsoft.com</a>> wrote:
</div>
<div>> </div>
<div>> IIUC, the ‘vert’ feature has a long implementation history that includes use in implementations that otherwise do not support OpenType Layout processing generally in order to get desired glyph substitutions needed when laying out Japanese or Chinese
 text vertically — not Old Hangul. So, the recommended implementation of associating ‘vert’ with type 1 GSUB lookups is based on the fact that, in such implementations, that’s the only kind of lookup that will get processed.
</div>
<div>> </div>
<div>> I haven’t considered your example in detail; when working on Old Hangul support some years ago and spec’ing for our Font team how the OT Layout tables should be implemented, I recall working on some details for vertical layout, but I don’t recall having
 these issues — though I also don’t recall what testing in vertical layout was being done.
</div>
<div>> </div>
<div>> </div>
<div>> Peter </div>
<div>> </div>
<div>> From: <a href="mailto:mpeg-OTspec@yahoogroups.com">mpeg-OTspec@yahoogroups.com</a> [<a href="mailto:mpeg-OTspec@yahoogroups.com">mailto:mpeg-OTspec@yahoogroups.com</a>] On Behalf Of Ken Lunde
<a href="mailto:lunde@adobe.com">lunde@adobe.com</a>[mpeg-OTspec] </div>
<div>> Sent: Saturday, February 11, 2017 5:25 PM </div>
<div>> To: <a href="mailto:mpeg-OTspec@yahoogroups.com">mpeg-OTspec@yahoogroups.com</a>;
<a href="mailto:opentype-list@indx.co.uk">opentype-list@indx.co.uk</a> </div>
<div>> Subject: [mpeg-OTspec] The 'vert' GPOS (not GSUB) feature </div>
<div>> </div>
<div>> </div>
<div>> All, </div>
<div>> </div>
<div>> The current "Recommended implementation" and "Application interface" of the 'vert' feature states that it is a single-substitution (type 1 lookup) GSUB feature:
</div>
<div>> </div>
<div>> <a href="https://www.microsoft.com/typography/otspec/features_uz.htm#vert">
https://www.microsoft.com/typography/otspec/features_uz.htm#vert</a> </div>
<div>> </div>
<div>> However, I seem to have discovered a valid use case for a GPOS implementation of the 'vert' feature.
</div>
<div>> </div>
<div>> The Adobe-branded Source Han Sans and Google-branded Noto Sans CJK Pan-CJK fonts support combining jamo, whose implementation includes six variations of [L]eading consonants, two variations of [V]owels, and four variations of [T]railing consonants. There
 are a total of 1,638,750 possible sequences, broken down as 11,875 two-character (L+V) ones plus 1,626,875 three-character (L+V+T) ones.
</div>
<div>> </div>
<div>> In terms of the font implementation, three GSUB features, 'ljmo', 'vjmo', and 'tjmo', drive the substitutions, selecting the right combinations to form a square or rectangular syllable. The L glyphs are spacing, and the referenced fonts use a 920-unit
 horizontal advance. The V and T glyphs are non-spacing (zero horizontal advance), and their shapes are shifted 920 units to the left, meaning that they are to the left of X=0.
</div>
<div>> </div>
<div>> All of this works for horizontal writing, at least for implementations that support combining jamo via these three GSUB features.
</div>
<div>> </div>
<div>> The problem is vertical writing. </div>
<div>> </div>
<div>> Three things need to be adjusted for the V and T glyphs in order for vertical writing to work correctly:
</div>
<div>> </div>
<div>> 1) The glyphs need to be shifted 1000 units up. </div>
<div>> </div>
<div>> 2) The glyphs need to have a zero vertical advance. </div>
<div>> </div>
<div>> 3) The glyphs need to be shifted 460 units to the right (this is due to the zero horizontal advance, and the centering of the glyph's width on X=500 for the vertical origin).
</div>
<div>> </div>
<div>> The first two can be accomplished via 'vmtx' table overrides. The third one cannot, because X-axis adjustments are not possible in the 'vmtx' table.
</div>
<div>> </div>
<div>> I discovered that a 'vert' GPOS feature can be created by declaring a lookup that includes GPOS lookup type 1 positional adjustments (XPlacement, XAdvance, YPlacement and YAdvance), and XPlacement is set to 460 for the V and T glyphs.
</div>
<div>> </div>
<div>> Of course, I could implement #1 and #2 in the 'vert' GPOS feature via the YPlacement and YAdvance settings, but I figured that it might be best to do as much as possible in the 'vmtx' table, and use the 'GPOS' for anything else, meaning the X-axis adjustments.
 However, implementing all three things in the 'vert' GPOS feature via XPlacement, YPlacement and YAdvance might be cleaner.
</div>
<div>> </div>
<div>> A sample font that implements the above ('vmtx' table overrides and 'vert' GPOS feature) is available here:
</div>
<div>> </div>
<div>> <a href="https://github.com/googlei18n/noto-cjk/issues/79#issuecomment-278802783">
https://github.com/googlei18n/noto-cjk/issues/79#issuecomment-278802783</a> </div>
<div>> </div>
<div>> As far as Adobe apps are concerned, it seems that the 'vert' GPOS feature is ignored. This is not a big shock.
</div>
<div>> </div>
<div>> Does anyone have any comments or opinions about this? </div>
<div>> </div>
<div>> For what it's worth, the number of combining V and T glyphs in the referenced fonts is 738, and adding separate vertical glyphs that are pre-shifted along the X-axis is non-starter, because the glyph set is full.
</div>
<div>> </div>
<div>> Regards... </div>
<div>> </div>
<div>> -- Ken </div>
<div>> </div>
<div>> </div>
<div></div>
<div></div>
</blockquote>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>------------------------------------</div>
<div>Posted by: Ken Lunde <<a href="mailto:lunde@adobe.com">lunde@adobe.com</a>></div>
<div>------------------------------------</div>
<div><br>
</div>
<div><br>
</div>
<div>------------------------------------</div>
<div><br>
</div>
<div>Yahoo Groups Links</div>
<div><br>
</div>
<div><*> To visit your group on the web, go to:</div>
<div>    <a href="http://groups.yahoo.com/group/mpeg-OTspec/">http://groups.yahoo.com/group/mpeg-OTspec/</a></div>
<div><br>
</div>
<div><*> Your email settings:</div>
<div>    Individual Email | Traditional</div>
<div><br>
</div>
<div><*> To change settings online go to:</div>
<div>    <a href="http://groups.yahoo.com/group/mpeg-OTspec/join">http://groups.yahoo.com/group/mpeg-OTspec/join</a></div>
<div>    (Yahoo! ID required)</div>
<div><br>
</div>
<div><*> To change settings via email:</div>
<div>    <a href="mailto:mpeg-OTspec-digest@yahoogroups.com">mpeg-OTspec-digest@yahoogroups.com</a>
</div>
<div>    <a href="mailto:mpeg-OTspec-fullfeatured@yahoogroups.com">mpeg-OTspec-fullfeatured@yahoogroups.com</a></div>
<div><br>
</div>
<div><*> To unsubscribe from this group, send an email to:</div>
<div>    <a href="mailto:mpeg-OTspec-unsubscribe@yahoogroups.com">mpeg-OTspec-unsubscribe@yahoogroups.com</a></div>
<div><br>
</div>
<div><*> Your use of Yahoo Groups is subject to:</div>
<div>    <a href="https://info.yahoo.com/legal/us/yahoo/utos/terms/">https://info.yahoo.com/legal/us/yahoo/utos/terms/</a></div>
<div><br>
</div>
<div><br>
</div>
</div>
</div>
</span>
</body>
</html>