Skip to content

mkmk blocked by base+mark ligature formation  #1109

@punchcutter

Description

@punchcutter

After some discussion @behdad summed it up nicely:

So, if you have base1,mark1,base2,mark2, and you ligate base1,base2 you'd get lig,mark1,mark2 but HarfBuzz remembers that mark1 and mark2 belong to first and second components of the ligature respectively and does NOT apply mkmk between them.
Now, in your case, you are ligating a base with a mark.

With sequence base1,mark1,base2,mark2 that makes sense that the marks both apply to the resulting ligature of base1+base2. However, what we have here is base1,mark1,mark2,mark3. A ligature is formed from base1+mark2 and then mark1 should attach to that with mark feature and mark3 should then attach to mark1 with mkmk feature. This is probably an unusual situation, but in this case all marks are post-base marks. They are actually all Spacing Marks, but we can't classify them as bases in the GDEF because we need them to be marks to allow for other following marks (including Vedic marks). That puts us in this situation of relying on mark and mkmk attachment to place them appropriately.

Here's a little visual explanation showing what happens in various situations. The third one shows how the ligature stops the mkmk. The fourth shows what should happen. There mark2 doesn't ligate so it's showing base1, mark1 (post-base), mark2 (top), mark3 (mkmk attached to mark1).

image001

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions