[HarfBuzz] Better handling variation selectors
Jonathan Kew
jfkthame at googlemail.com
Fri Jun 14 01:28:01 PDT 2013
On 14/6/13 00:06, Behdad Esfahbod wrote:> Some progress, but there's
more to do. From the commit I just pushed out:
>
> commit 79d1007a501fd63c0ba4d51038c513e6b8b94740
> Author: Behdad Esfahbod <behdad at behdad.org>
> Date: Thu Jun 13 19:01:07 2013 -0400
>
> If variation selector is not consumed by cmap, pass it on to GSUB
>
> This changes the semantics of get_glyph() callback and expect that
> callbacks return false if the requested variant is not
available, and
> then we will call them back with variation_selector=0 and will
retain
> the glyph for the selector in the glyph stream.
>
> Apparently most Mongolian fonts implement the Mongolian Variation
> Selectors using GSUB, not cmap.
>
> https://bugs.freedesktop.org/show_bug.cgi?id=65258
>
> Note that this doesn't fix the Mongolian shaping yet, because
the way
> that's implemented is that the, say, 'init' feature ligates the
letter
> and the variation-selector. However, since currently the variation
> selector doesn't have the 'init' mask on, it will not be matched...
>
>
> I'm not quite sure how to address this. Previously we only used to
match the
> feature mask on the first glyph in a ligature / sequence. We changed
that two
> hackfests ago.
>
Seems like it should be possible to handle this in the Arabic shaper.
Give variation selectors a new type JOINING_TYPE_VS. In
arabic_joining(), they'll be treated like JOINING_TYPE_T, except that
they record a new action INHERIT instead of NONE. Then when
setup_masks_arabic() is setting the masks, it can check for INHERIT and
copy the mask of the preceding glyph.
(No, I haven't actually coded/tested this.)
JK
More information about the HarfBuzz
mailing list