ZWJ as a Ligature Suppressor
Andrew Glass (WINDOWS)
Andrew.Glass at microsoft.com
Wed Aug 12 11:54:26 CDT 2015
[Speaking for Uniscribe]
>So, any rule as to what ZWJ means is not implemented in the OpenType engine, but rather in the font. (As is the rule that 'a' does not look like 'b'.)
Our Arabic and Universal Shaping Engines understand that ZWJ invokes a joining form for joining scripts. Ligation is handled by the font. The presence of ZWJ invokes the joining forms, but since it is not included in the ligature lookup, the ligature does not form. The ZWNJ does not invoke a joining form. Thus we can achieve the forms illustrated figure 23-3.
The fi case is different because Latin is not a joining script. Furthermore, the ligated form ﬁ, when supported, is usually a discretionary ligature. Therefore to achieve the Latin forms in 23-3, I would attach a lookup for the fi substitution to <dlig>, and specify a substitution that includes ZWJ under <rlig>.
As Chapter 23 states (TUS 7.0, p. 804), there is no way to request a discretionary ligature in plain text for Arabic (and other joining scripts).
>For which scripts may a font designer defensibly omit the duplicate with ZWJ? The TUS says Arabic is one. Are there any others?
In general I would say that a designer can omit the lookup with ZWJ for joining scripts that include ligated forms.
Our Mongolian font has ligatures that behave in the same way as Arabic, in that they can be blocked, but the components still join. Our Syriac fonts have <rlig> lookups but these are cosmetic and don't produce a visually distinct ligated form so the impact of ZWJ is negligible, but effectively still the same as Arabic. Our other joining scripts don't have ligatures.
For Indic scripts see TUS (7.0) Figure 12.7: http://www.unicode.org/versions/Unicode7.0.0/ch12.pdf
More information about the Unicode