If U+200D forces a consonant to have a half form, a dead consonant before that half form gets a visible virama, even when there is no U+200C after it. That dead consonant should instead have its default (i.e. reph or half) form. This happens because the 'rphf' and 'half' lookups use the class class1 to determine what glyphs to create a reph or half form before, but class1 is missing half forms, which already exist by that point because they are created in 'akhn'. The contexts for 'rphf' and 'half' should take the output of 'akhn' into account.
Character data
๐ฉ๐น๐๐นโ๐๐๐น๐๐นโ๐
U+110A9 KAITHI LETTER RA
U+110B9 KAITHI SIGN VIRAMA
U+1108E KAITHI LETTER KHA
U+110B9 KAITHI SIGN VIRAMA
U+200D ZERO WIDTH JOINER
U+1108E KAITHI LETTER KHA
U+1108E KAITHI LETTER KHA
U+110B9 KAITHI SIGN VIRAMA
U+1108E KAITHI LETTER KHA
U+110B9 KAITHI SIGN VIRAMA
U+200D ZERO WIDTH JOINER
U+1108E KAITHI LETTER KHA
Hah, the shaping tests found a bug in my fix. ๐ฉ๐นโ๐๐น๐ฎ should have an explicit ra half form, but with this issue fixed, the RA gets reordered to the conjunct:
Font
NotoSansKaithi-Regular.otf
Where the font came from, and when
Site: https://github.com/notofonts/kaithi/releases/tag/NotoSansKaithi-v2.005 Date: 2023-10-01
Font version
Version 2.005
Issue
If U+200D forces a consonant to have a half form, a dead consonant before that half form gets a visible virama, even when there is no U+200C after it. That dead consonant should instead have its default (i.e. reph or half) form. This happens because the 'rphf' and 'half' lookups use the class
class1
to determine what glyphs to create a reph or half form before, butclass1
is missing half forms, which already exist by that point because they are created in 'akhn'. The contexts for 'rphf' and 'half' should take the output of 'akhn' into account.Character data
๐ฉ๐น๐๐นโ๐๐๐น๐๐นโ๐ U+110A9 KAITHI LETTER RA U+110B9 KAITHI SIGN VIRAMA U+1108E KAITHI LETTER KHA U+110B9 KAITHI SIGN VIRAMA U+200D ZERO WIDTH JOINER U+1108E KAITHI LETTER KHA U+1108E KAITHI LETTER KHA U+110B9 KAITHI SIGN VIRAMA U+1108E KAITHI LETTER KHA U+110B9 KAITHI SIGN VIRAMA U+200D ZERO WIDTH JOINER U+1108E KAITHI LETTER KHA
Screenshots
Cf. that string without U+200D: