<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div>The general Uniscribe idea is this: </div><div><br></div><div>FIRST, you do GSUB features. </div><div>For them:</div><div>* first do the pre-shaping GSUB features for all scripts (ccmp, locl, ltra, rtla, ltrm), </div><div>* then do the shaping GSUB features, script-specific features in the order defined in the script-specific modules (i.e. sometimes in fixed order, sometimes in font-defined order) </div><div>* then do the post-shaping (user-selectable) GSUB features, typically applied all at once and executed in the font-defined lookup order </div><div><br></div><div>Only AFTER GSUB processing is complete, you do the GPOS features (otherwise it won't make sense), typically applied all at once and executed in the font-defined lookup order. </div><div><br></div><div>The "script-specific" column in the table <a href="http://blog.fontlab.com/font-tech/opentype-layout/opentype-layout-feature-classification/">http://blog.fontlab.com/font-tech/opentype-layout/opentype-layout-feature-classification/</a> documents this. That table was consulted with Microsoft but corrections are welcome.</div><div><br></div><div>A.<br><br>Sent from my mobile phone.</div><div><br>On 14.10.2014, at 00:01, Bob Hallissy <<a href="mailto:bob_hallissy@sil.org">bob_hallissy@sil.org</a>> wrote:<br><br></div><blockquote type="cite"><div>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
I apologize in advance if this information is already available --
please just point me to it if so. Or, if it is straightforward to
deduce this from the source code, I'm happy to try that -- but I
took a brief look and wasn't successful so I'll need some coaching.<br>
<br>
As we are aware, Uniscribe makes multiple passes over the text,
more-or-less one pass per feature. In the <a href="http://www.microsoft.com/typography/OpenTypeDev/arabic/intro.htm">Arabic
spec</a>, for example, Microsoft says:<br>
<blockquote type="cite"><span style="color: rgb(51, 51, 51);
font-size: 14px; font-style: normal; font-variant: normal;
font-weight: normal; letter-spacing: normal; line-height: 21px;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; word-spacing: 0px; display: inline !
important; float: none; background-color: rgb(255, 255, 255);">All
OTL processing is divided into a set of predefined<span class="Apple-converted-space"> </span></span><em style="font-style: italic; color: rgb(51, 51, 51); font-size:
14px; font-variant: normal; font-weight: normal; letter-spacing:
normal; line-height: 21px; text-align: start; text-indent: 0px;
text-transform: none; white-space: normal; word-spacing: 0px;
background-color: rgb(255, 255, 255);">features</em><span style="color: rgb(51, 51, 51); font-size: 14px; font-style:
normal; font-variant: normal; font-weight: normal;
letter-spacing: normal; line-height: 21px; text-align: start;
text-indent: 0px; text-transform: none; white-space: normal;
word-spacing: 0px; display: inline ! important; float: none;
background-color: rgb(255, 255, 255);">(described and
illustrated in the Features section of this document). Each
feature is applied, one by one, to the appropriate glyphs in the
syllable and OTLS processes them. Uniscribe makes as many calls
to the OTL Services as there are features.</span></blockquote>
and:<br>
<blockquote type="cite"><span style="color: rgb(51, 51, 51);
font-size: 14px; font-style: normal; font-variant: normal;
font-weight: normal; letter-spacing: normal; line-height: 21px;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; word-spacing: 0px; display: inline !
important; float: none; background-color: rgb(255, 255, 255);">Regardless
of the model an application chooses for supporting layout of
complex scripts, Uniscribe requires a fixed order for executing
features within a run of text to consistently obtain the proper
basic form. This is achieved by calling features one-by-one in
the standard order listed below.</span></blockquote>
and finally the list of features, in order: ccmp, isol, fina, medi,
init, rlig, calt, liga, dlig, cswh, mset, curs, kern, mark, and mkmk.<br>
<br>
(This is, of course, not what the OT spec says should be done, but
that is water under the bridge and we are stuck with Uniscribe
compatibility)<br>
<br>
What I'd like to know is what is the equivalent sequence for
Harfbuzz? Presumably Harfbuzz implements additional features (clig,
locl, rtla, rtlm and salt come to mind) and it would be helpful to
know where they fall in the sequence. Also, where do things like
Stylistic Sets (ssxx) and Character Variants (cvxx) fall in this
list?<br>
<br>
(And while this post is about Arabic, presumably other scripts have
similar needs).<br>
<br>
Thanks for any help you can provide,<br>
<br>
Bob<br>
<br>
<br>
<br>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>HarfBuzz mailing list</span><br><span><a href="mailto:HarfBuzz@lists.freedesktop.org">HarfBuzz@lists.freedesktop.org</a></span><br><span><a href="http://lists.freedesktop.org/mailman/listinfo/harfbuzz">http://lists.freedesktop.org/mailman/listinfo/harfbuzz</a></span><br></div></blockquote></body></html>