Skip to content

Commit

Permalink
Make lam-alef ligature with kashida-ar + hamzaabove-ar
Browse files Browse the repository at this point in the history
This is the Unicode-sanctioned way of encoding medial seat-less hamza.
  • Loading branch information
khaledhosny committed Sep 28, 2022
1 parent 85c922c commit 8d283a2
Show file tree
Hide file tree
Showing 8 changed files with 18 additions and 10 deletions.
Binary file modified Amiri-Bold.ttf
Binary file not shown.
Binary file modified Amiri-BoldSlanted.ttf
Binary file not shown.
Binary file modified Amiri-Regular.ttf
Binary file not shown.
Binary file modified Amiri-Slanted.ttf
Binary file not shown.
Binary file modified AmiriQuran.ttf
Binary file not shown.
Binary file modified AmiriQuranColored.ttf
Binary file not shown.
9 changes: 5 additions & 4 deletions sources/contextuals.fea
Expand Up @@ -155,6 +155,7 @@ lookup LamAlfFina {
feature calt {
lookupflag IgnoreMarks;
sub [@aLam.medi]' lookup LamAlfFina [@aAlf.fina]' lookup LamAlfFina;
sub [@aLam.medi]' lookup LamAlfFina hamza-ar.float' [@aAlf.fina]' lookup LamAlfFina;
} calt;

lookup KafLamHeh {
Expand Down Expand Up @@ -311,8 +312,8 @@ lookup LamMemInit {
sub @aLam.init by @aLam.init.LamMemInit;
sub @aMem.medi by @aMem.medi.LamMemInit;
} LamMemInit;

#endif
#
lookup LamAlfIsol {
sub @aAlf.fina by @aAlf.fina.LamAlfIsol;
sub @aLam.init by @aLam.init.LamAlfIsol;
Expand All @@ -324,8 +325,8 @@ lookup LamHaaMemInit {
sub @aLam.init by @aLam.init.LamHaaMemInit;
sub @aMem.medi by @aMem.medi.LamHaaMemInit;
} LamHaaMemInit;

#endif
#
lookup BaaBaaMemInit {
sub @aBaa.init by @aBaa.init.BaaBaaMemInit;
sub @aBaa.medi by @aBaa.medi.BaaBaaMemInit;
Expand Down Expand Up @@ -601,6 +602,7 @@ feature calt {
sub [@aLam.init]' lookup LamMemInit [@aMem.medi]' lookup LamMemInit;
#endif
sub [@aLam.init]' lookup LamAlfIsol [@aAlf.fina]' lookup LamAlfIsol;
sub [@aLam.init]' lookup LamAlfIsol hamza-ar.float' [@aAlf.fina]' lookup LamAlfIsol;
#ifndef QURAN
sub [@aLam.init]' lookup LamHaaMemInit [@aHaa.medi]' lookup LamHaaMemInit [@aMem.medi]' lookup LamHaaMemInit;
#endif
Expand All @@ -617,8 +619,7 @@ feature calt {
sub [@aBaa.init]' lookup BaaNonIsol [@aNon.fina]' lookup BaaNonIsol;
sub [@aKaf.medi]' lookup KafMemFina [@aMem.fina]' lookup KafMemFina;
sub [@aKaf.init @aKaf.medi]' lookup KafLam [@aLam.medi @aLam.medi.LamAlfFina]' lookup KafLamAlf [@aAlf.fina @aAlf.fina.LamAlfFina];
sub [@aKaf.init @aKaf.medi]' lookup KafLam [@aLam.medi @aLam.medi.LamAlfFina]' lookup KafLamAlf hamza-ar.float' [@aAlf.fina @aAlf.fina.LamAlfFina];
# see float hamza in quran.fea
sub [@aKaf.init @aKaf.medi]' lookup KafLam [@aLam.medi @aLam.medi.LamAlfFina]' lookup KafLamAlf hamza-ar.float' [@aAlf.fina @aAlf.fina.LamAlfFina]; # see float hamza in quran.fea
sub [@aBaa.init]' lookup BaaSenInit [@aSen.medi]' lookup BaaSenInit;
sub [@aBaa.init]' lookup BaaSenAltInit [@aSen.fina]' lookup BaaSenInit;
sub [@aKaf.medi]' lookup KafRaaFina [@aRaa.fina]' lookup KafRaaFina;
Expand Down
19 changes: 13 additions & 6 deletions sources/quran.fea
Expand Up @@ -18,10 +18,10 @@ feature ccmp {
} ccmp;

#
# Floating hamza
# Medial hamza
#
# Hamza should be shaping transparent, just like combining marks, while still
# not a combining marks, I call t floating hamza because it "floats" between
# not a combining marks, I call t medial hamza because it "floats" between
# adjacent letters. When a hamza comes between two letters that would normally
# join, it will be placed between them over a connecting stroke, else it will
# just set on the baseline.
Expand Down Expand Up @@ -52,12 +52,13 @@ lookup After {
sub @before.init by @before.medi;
} After;

lookup MedialHAmza {
lookup MedialHamza {
sub hamza-ar by hamza-ar.medi;
} MedialHAmza;
} MedialHamza;

lookup FloatingHamza {
sub hamza-ar by hamza-ar.float;
sub hamza-ar.medi by hamza-ar.float;
} FloatingHamza;

lookup LamAlefIsol {
Expand All @@ -77,10 +78,16 @@ feature calt {
sub lam-ar' lookup LamAlefIsol hamza-ar' lookup FloatingHamza alef-ar' lookup LamAlefIsol;
sub lam-ar.fina' lookup LamAlefFina hamza-ar' lookup FloatingHamza alef-ar' lookup LamAlefFina;
# Medial hamza.
sub @before' lookup Before hamza-ar' lookup MedialHAmza @after' lookup After;
sub @before' lookup Before hamza-ar' lookup MedialHamza @after' lookup After;
} calt;

# kern floating hamza between final lam-alef to avoid glyph overlap
# This is the Unicode-sanctioned way of lam-alef with medial hamza.
feature ccmp {
lookupflag IgnoreMarks;
sub lam-ar hamza-ar.medi' lookup FloatingHamza alef-ar;
} ccmp;

# kern medial hamza between final lam-alef to avoid glyph overlap
feature kern {
lookupflag IgnoreMarks;
pos hamza-ar.float @aAlf.fina.LamAlfFina <-146 0 0 0>;
Expand Down

0 comments on commit 8d283a2

Please sign in to comment.