Variation Selectors for Ligatures?

Greetings All,

Ligatures are found in Ge'ez (Ethiopic) manuscripts but not consistently, whereby within a paragraph the ligature may appear on one line, but not the next.  The ግዚ ligature is by far the best-known and most frequently found example.  This is different from Latin script where a ligature substitution is desirable 100% of the time. In the Ge'ez case, the user would want to have selective control over the substitution.

Since the CMAP subtable 14 spec supports only a single "base" character in the mapping, I thought to use a liga feature, but add a variation selector as a kind of semaphore, like:

  sub uni130D uni12DA uniFE00 by gzi_liga ; 

which should work (outside of DirectWrite) so long as subtable 14 does not also have a <uni12DA, uniFE00> mapping.

This abuses the spirit of the variation selector a bit, is there another approach available for selective ligation?

thanks,

-Daniel
Tagged:

Comments

  • Thomas Phinney
    Thomas Phinney Posts: 2,883
    I should think this calls out for the “dlig” feature: discretionary ligatures. The most common ligature features not specific to any one writing system are:

    rlig: required ligatures. On by default, do not necessarily have any interface method to turn them off.

    clig: contextual ligatures. Also on by default, do not necessarily have any interface method to turn them off.

    liga: on by default but allowed to be turned off

    dlig: discretionary ligatures. Off by default but should have interface method to turn on.


  • You can use U+200D ZERO WIDTH JOINER (ZWJ) or U+200C ZERO WIDTH NON JOINER (ZWNJ) to indicate ligature or non-ligature behaviour at the character level, then it needs to be implemented in the font.

    Then you can still use the various ligature features on top.
  • bdevos
    bdevos Posts: 5
    At least with Word 2016 on Windows 10 with a script routed to the USE, I found that liga was not enabled by default, I needed to turn on some combination of ligatures from within Word. IIUC, the Microsoft documentation and DirectWrite as seen in Notepad do have liga on by default, like @Thomas Phinney says. I changed the font to use rlig, and Word applied that feature by default.
  • Daniel Yacob
    Daniel Yacob Posts: 14
    edited March 13
    Thanks @Thomas Phinney, @Denis Moyogo Jacquerye, @bdevos .  I did try the substitution with an rlig and U+200C and it worked without issue.  This is great because I can emit from a keyboard readily.

    I went back and replaced U+200C with U+FE00, which hadn't worked last year (in Word) when I was experimenting then.  It still doesn't work, but then I found by accident that it would work if 2 U+FE00 are present, that is:  <130D, 12DA, FE00, FE00> .  Weird, but repeatable. Apple Pages was fine with just a single FE00.

    I'll stick with U+200C, or maybe U+200D makes more sense for "joining". Reading a little about ZWJ, it seems to get used in two conventions: end of sequence, or between letters.  Is the current thought that <130D, 200D, 12DA> is preferable over <130D, 12DA, 200D> ?

    No luck with dlig, but I'll research later if Word provides an interface feature for it that I need to enable.




  • Thomas Phinney
    Thomas Phinney Posts: 2,883
    edited March 13
    Word does support discretionary ligatures in recent years, starting in Word 2008 Mac and 2010 Windows. There was full interoperability no later than Word 2013 for Windows.

    However, making the official OpenType defaults the actual default may have taken years longer. I think it is there now, but for a while I think the default was to keep your files formatted compatibly with earlier versions of Word, so standard ligatures were not on (and maybe not even available IIIRC?) unless you changed your doc defaults to not worry about maintaining formatting compatibility with old versions.

    Interestingly, the interface lumps historical and discretionary ligatures together, but assumes you might want them without default ligatures; you need “All” to get both:



  • You should not use variation selector characters except in sequences that are standardized in Unicode (i.e., listed in StandardizedVariants.txt or in emoji-variation-sequences.txt) or (if dealing with ideographs) registered in the Unicode Ideographic Database. See section 23.4 of the Unicode Standard.

    Regarding use of ZWJ or ZWNJ, as Denis stated ZWJ can be used to indicate a ligature is requested, and ZWNJ can be used to prevent a ligature. These characters are placed between the characters to be ligated. See the discussion of Cursive Connection and Ligatures in section 23.2 of the Unicode Standard.

  • John Butler
    John Butler Posts: 290
    I propose we pronounce them “zwidge” and “zwinge” respectively. For clarity.

    Oh look, it’s 2024... anyone know if the latest Word can get to the smcp and c2sc features yet?
  • Thanks all, I've learned about ZWJ today (and how to pronounce it :) ) and am able to apply the approach to a set of 30 2, 3, and 4 letter ligatures successfully.  I definitely want the ligatures marked in plain text, so the approach with ZWJ fits the bill nicely.

    @Thomas Phinney thanks for pointing out the menu, I had tried with dlig and the "All" option selected but with no luck for some reason.  I thought there might be one more setting to configure.

  • Thomas Phinney
    Thomas Phinney Posts: 2,883
    @John Butler Word still does fake small caps even when the font has real ones, with no provision for accessing the real ones that I know of.