<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>