Skip to content

Reordering of hamza above and fatha #509

@emuller-amazon

Description

@emuller-amazon

Input: <U+064A,U+064E,U+0670,U+0653,U+0640,U+0654,U+064E,U+0627>
Font: KFGQPC Uthmanic Script HAFS (available at http://fonts.qurancomplex.gov.sa/?page_id=42). (you will need the fix for issue 505, or a version of the font with the GSUB lookups de-interleaved).

With Uniscribe, the final glyphs are in the order [hamza above, fatha], and mkmk positions them correctly (second and third glyphs in the log):

1: <U+064A,U+064E,U+0670,U+0653,U+0640,U+0654,U+064E,U+0627>

1: [
{"g":"afii57415.zz04","cl":7,"dx":0,"dy":0,"ax":481,"ay":0},
{"g":"afii57454","cl":4,"dx":25,"dy":975,"ax":0,"ay":0},
{"g":"uni0654","cl":4,"dx":-50,"dy":50,"ax":0,"ay":0},
{"g":"afii57440","cl":4,"dx":0,"dy":0,"ax":650,"ay":0},
{"g":"uni0670_uni0653","cl":0,"dx":75,"dy":400,"ax":0,"ay":0},
{"g":"afii57454","cl":0,"dx":750,"dy":1125,"ax":0,"ay":0},
{"g":"afii57450.calt","cl":0,"dx":0,"dy":0,"ax":1331,"ay":0}]

test2 txt_uthmanichafs1 ver09 otf_uniscribe

With Harfbuzz, the final glyphs are reordered [fatha, hamza above] and mkmk no longer operates on them:

1: <U+064A,U+064E,U+0670,U+0653,U+0640,U+0654,U+064E,U+0627>

1: [{"g":"afii57415.zz04","cl":7,"dx":0,"dy":0,"ax":481,"ay":0},
{"g":"uni0654","cl":4,"dx":-50,"dy":50,"ax":0,"ay":0},
{"g":"afii57454","cl":4,"dx":75,"dy":500,"ax":0,"ay":0},
{"g":"afii57440","cl":4,"dx":0,"dy":0,"ax":650,"ay":0},
{"g":"uni0670_uni0653","cl":0,"dx":75,"dy":400,"ax":0,"ay":0},
{"g":"afii57454","cl":0,"dx":750,"dy":1125,"ax":0,"ay":0},
{"g":"afii57450.calt","cl":0,"dx":0,"dy":0,"ax":1331,"ay":0}]

test2 txt_fixed ttf_ot

I am guessing that Harfbuzz is doing a reordering based on canonical equivalence (since ccc(hamza above) = 230 and ccc(fatha) = 30), while Uniscribe does not.

Adding a CGJ after the hamza above prevents Harfbuzz's reordering and leads to the expected result; however, that totally breaks the rendering with Uniscribe on Windows 7, so it's not an entirely pleasant workaround.

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