[HarfBuzz] Why mark glyphs are skipped when MarkBasePos matching?

Martin Hosken mhosken at gmail.com
Tue Mar 26 08:39:18 UTC 2019


Dear Shusaku,

> For example, the following glyph sequence is input.  B is a glyph in
> Base Coverage Table, M is a glyph in Mark Coverage Table
> and m is a mark glyph defined by GDEF.
> 
>     B m M
> 
> The implementation of HarfBuzz finds B as base of M even though there
> is m between B and M. If m is not a mark glyph, B and M
> are not matched. I tried to find out the reason of the behavior in the
> specification, but could not.  Can anyone teach me why
> such behavior is needed?  The link to the related discussion log is enough.

In the OpenType spec under the GPOS Lookup Type 4 there is this start to a paragraph:

To identify the base glyph that combines with a mark, the text-processing client must look backward in the glyph string from the mark to the preceding base glyph.

Unfortunately, the English here is ambiguous. It could be saying that the immediately preceding glyph is tested and if it is a base, then attachment occurs. As per only the sequence B M would result in attachment and therefore you would have to say to skip marks for it to find that immediately preceding glyph is base. I would suggest that this is the more common use of something like 'the preceding glyph'. But 'preceding' may mean the first glyph looking backwards that meets the requirement of being a base. In this case, it is the latter interpretation. But I would suggest that if this sentence could be rewritten without using the word 'preceding', then things would be a lot clearer.

Yours,
Martin


More information about the HarfBuzz mailing list