@1st_2 = [@aDal.fina @aDal.isol @aDal.fina_BaaDalIsol @aDal.fina_KafDal @aDal.fina_LamDal]; @1st_3 = [@aRaa.fina_MemRaaIsol]; # XXX @aRaa.fina.alt2 @1st_4 = [@aHeh.isol @aHeh.fina @aHeh.fina_KafHeh @aHeh.fina_LamHeh]; @2nd_1 = [@aKaf.init @aKaf.init_KafHeh @aKaf.init_KafMemInit @aKaf.init_KafYaaIsol @aKaf.init_KafMemIsol @aKaf.init_KafLam @aKaf.init_KafRaaIsol]; @2nd_2 = [@aKaf.init_KafBaaInit @aKaf.init_KafMemAlf]; @2nd_3 = [@aSen.init_SenHaaInit @aSad.init_SadHaaInit @aLam.init_LamHaaHaaInit]; @2nd_4 = [@aSad.init_AboveHaaIsol @aSen.init_AboveHaaIsol @aHeh.init_AboveHaaIsol @aHaa.init_AboveHaaIsol @aMem.init_AboveHaaIsol @aKaf.init_AboveHaaIsol @aAyn.init_AboveHaaIsol]; feature kern { lookupflag IgnoreMarks, RightToLeft; enum pos @RaaWaw @2nd_1 <-600 0 -600 0>; enum pos @1st_2 @2nd_1 <-600 0 -600 0>; enum pos @1st_3 @2nd_1 <-800 0 -800 0>; enum pos @RaaWaw @2nd_2 <-300 0 -300 0>; enum pos @1st_2 @2nd_2 <-300 0 -300 0>; enum pos @1st_3 @2nd_2 <-400 0 -400 0>; enum pos @RaaWaw @2nd_3 <-100 0 -100 0>; enum pos @1st_3 @2nd_3 <-200 0 -200 0>; enum pos @1st_3 @2nd_4 <-400 0 -400 0>; # +ve kern so that the tail of raa/waw does not touch the dot of baa enum pos @RaaWaw @aBaaDotBelow <170 0 170 0>; } kern; feature kern { lookupflag IgnoreMarks, RightToLeft; # this baa requires an extra +ve kern than the ones above # XXX: we only need a subset of @aBaa.init_High enum pos @RaaWaw @aBaa.init_High <80 0 80 0>; } kern; lookup pos_500 { pos @2nd_1 -500; } pos_500; feature kern { lookupflag IgnoreMarks, RightToLeft; # kern heh isol/final followed by kaf, does not happen in Arabic but can be # seen in Kurdish or Persian using ZWNJ between them, so we double the rule # w/o ZWNJ as someapplications remove it after shaping. pos @1st_4 @2nd_1' lookup pos_500; pos uni200C @1st_4 @2nd_1' lookup pos_500; } kern;