Re: interaction of Arabic ligatures with vowel marks

From: Richard Wordingham <richard.wordingham_at_ntlworld.com>
Date: Wed, 12 Jun 2013 08:32:47 +0100

On Tue, 11 Jun 2013 20:09:31 -0700
Stephan Stiller <stephan.stiller_at_gmail.com> wrote:

> Hi,
>
> How is the placement of vowel marks around ligatures handled in
> Arabic text?

For OpenType the clue lies in the three types of GPOS
(http://www.microsoft.com/typography/otspec/gpos.htm) lookup for marks
- mark to base, mark to mark, and mark to ligature. As base characters
get ligated, the shaper keeps track of which marks were associated
with which component of the ligature, and separate vowel positions are
recorded in the font for each component.

There is more complicated logic to prevent various undesirable
behaviour, such as marks belong to different components interacting
via mark to mark position lookups or ligature lookups. The idea is to
relieve the font designer of the need to think about such issues. I
haven't found any public Microsoft documentation on these lookups, and
for open source I can only suggest studying the source code and its
comments - HarfBuzz files hb-ot-layout-gdef-table.hh,
hb-ot-layout-gpos-table.hh and hb-ot-layout-gsubgpos-private.hh are
particularly relevant.

Obviously this will not work if the character sequence is defined in
terms of presentation forms that are already ligatures.

> I'm also wondering how font designers normally handle this. I think
> there are analogous questions for various ligature-heavy abugidas, so
> there must be an existing body of knowledge.

While the same principle applies to Indic scripts (and indeed, to the
Roman alphabet), there is only one Indic mark I can think of for which
the issue of component association arises, and that is the nukta. That
could be handled by the ligation process instead, so I would not rely
on there being a large body of Indic-specific knowledge on the issues.
OpenType has special handling for consonant clusters with visible
internal halant.

Richard.
Received on Wed Jun 12 2013 - 02:37:27 CDT

This archive was generated by hypermail 2.2.0 : Wed Jun 12 2013 - 02:37:28 CDT