@Dal_1 = [@aDal.fina @aDal.fina_BaaDal @aDal.fina_KafDal @aDal.fina_LamDal @aDal.isol]; @1st_2 = [@RaaWaw @AlefHamzaBelow]; @1st_3 = [@aRaa.fina_MemRaaIsol]; @1st_4 = [@aHeh.isol @aHeh.fina @aHeh.fina_KafHeh @aHeh.fina_LamHeh]; // final alef with no hamza above @Alf_1 = [uni0627.fina_LamAlfFina uni0625.fina_LamAlfFina]; @Alf_2 = [@aAlf.fina @aAlf.fina_KafAlf @aAlf.fina_KafMemAlf @aAlf.fina_LamAlfFina @aAlf.fina_LamAlfIsol @aAlf.fina_MemAlfFina]; @Kaf_1 = [@aKaf.init_KafHeh @aKaf.init_KafMemIsol]; @Kaf_2 = [@aKaf.init_KafBaaInit @aKaf.init_KafMemAlf]; @Kaf_3 = [@aKaf.init @aKaf.init_KafLam @aGaf.isol]; @Kaf_4 = [@aKaf.init_KafYaaIsol]; @Kaf_5 = [@aKaf.init_KafMemInit @aKaf.init_KafRaaIsol]; @Raa_1 = [@RaaWaw @aDal.fina @aDal.isol @aDal.fina_BaaDal @aDal.fina_KafDal @aDal.fina_LamDal]; @2nd_3 = [@aSen.init_SenHaaInit @aSad.init_SadHaaInit @aLam.init_LamHaaHaaInit]; @2nd_4 = [@aSad.init_AboveHaa @aSen.init_AboveHaa @aHeh.init_AboveHaa @aHaa.init_AboveHaa @aMem.init_AboveHaa @aKaf.init_AboveHaa @aAyn.init_AboveHaa]; @Teh_m = [uni0629.fina_LamHeh uni0629.fina_KafHeh // teh marbuta uni06C3.fina_LamHeh uni06C3.fina_KafHeh]; feature kern { // we don't want to kern those if there is tashkil as it touches the kaf pos @RaaWaw' <-600 0 -600 0> @Kaf_1; pos @RaaWaw' <-300 0 -300 0> @Kaf_4; pos @Dal_1' <-600 0 -600 0> @Kaf_1; pos @Dal_1' <-400 0 -400 0> @Kaf_4; } kern; lookup YaaBari3Kern { pos @aAyn.init <0 0 440 0>; pos @aFaa.init <0 0 710 0>; pos @aHeh.init <0 0 400 0>; pos @aLam.init <0 0 955 0>; pos @aMem.init <0 0 520 0>; pos @aSen.init <0 0 150 0>; pos @aTaa.init <0 0 150 0>; pos uni06BE.init <0 0 400 0>; } YaaBari3Kern; feature kern { lookupflag IgnoreMarks; pos @RaaWaw' <-600 0 -600 0> @Kaf_5; pos @RaaWaw' <-300 0 -300 0> [@Kaf_2 @Kaf_3]; pos @RaaWaw' <-100 0 -100 0> @2nd_3; pos @Dal_1' <-600 0 -600 0> @Kaf_5; pos @Dal_1' <-400 0 -400 0> [@Kaf_2 @Kaf_3]; pos @1st_3' <-400 0 -400 0> [@Kaf_2 @Kaf_3 @Kaf_4]; pos @1st_3' <-800 0 -800 0> [@Kaf_1 @Kaf_5]; pos @1st_3' <-200 0 -200 0> @2nd_3; pos @1st_3' <-400 0 -400 0> @2nd_4; // the dots of teh marbuta are very close to exclamation mark pos @Teh_m' < 150 0 150 0> exclam; // +ve kern so that the tail of raa/waw does not touch the dot of baa pos @1st_2' < 170 0 170 0> @aBaaDotBelow; // increase advance width for first glyph in 3-letter Baree Yaa ligatures pos [@aAyn.init @aFaa.init @aHeh.init @aLam.init @aMem.init @aSen.init @aTaa.init uni06BE.init]' lookup YaaBari3Kern @aBaa.medi_YaaBari; pos [@aAlf.isol @Alf_2]' <200 0 200 0> @aBaa.init_BaaNonIsol; pos [@aAlf.isol @Alf_2]' <300 0 300 0> @aBaa.init_BaaRaaIsol; } kern; // we don't want to ignore marks here feature kern { pos @Alf_1' <-500 0 -500 0> [@Kaf_1 @Kaf_5]; pos @Alf_1' <-200 0 -200 0> @Kaf_2; pos @Alf_1' <-250 0 -250 0> @Kaf_3; pos @Alf_1' <-300 0 -300 0> @Kaf_4; // raa/waw/dal followed by isolated dagger alef followed by madda needs some // space to avoid fatha/madda clash pos @Raa_1' < 200 0 200 0> uni064E uni0670.isol [uni0653 uni06E4]; pos [uni0621]' < 200 0 200 0> uni064E uni0670.isol; } kern; feature kern { lookupflag IgnoreMarks; pos @RaaWaw' <80 0 80 0> @aYaa.init; } kern; feature kern { lookupflag IgnoreMarks; // kern heh isol/final followed by kaf, does not happen in Arabic but can be // seen in Kurdish or Persian using ZWNJ between them. pos @1st_4 uni200C [@Kaf_1 @Kaf_2 @Kaf_3 @Kaf_4 @Kaf_5]' -500; // Uniscribe replace ZWNJ with space pos @1st_4 space [@Kaf_1 @Kaf_2 @Kaf_3 @Kaf_4 @Kaf_5]' -500; // some applications might just remove it pos @1st_4 [@Kaf_1 @Kaf_2 @Kaf_3 @Kaf_4 @Kaf_5]' -500; } kern; #ifdef ITALIC feature kern { lookupflag IgnoreMarks; pos @Alf_2 <300 0 300 0> [parenleft bracketleft braceleft]; pos [parenright bracketright braceright] <-100 0 -100 0> [@Kaf_1 @Kaf_2 @Kaf_4 @Kaf_5]; pos [parenright bracketright braceright] <-200 0 -200 0> [@Kaf_3]; pos [braceright] <-200 0 -200 0> [@Kaf_1 @Kaf_2 @Kaf_4 @Kaf_5]; pos [braceright] <-300 0 -300 0> [@Kaf_3]; } kern; #endif // proportional digits feature kern { pos uni0661.prop uni0662.prop -100; pos uni0661.prop uni0663.prop -100; pos uni0661.prop uni0666.prop -200; pos uni0661.prop uni0669.prop -100; pos uni0662.prop uni0667.prop 100; pos uni0662.prop uni0668.prop -50; pos uni0663.prop uni0667.prop 100; pos uni0664.prop uni0661.prop -50; pos uni0664.prop uni0668.prop 50; pos uni0666.prop uni0661.prop -50; pos uni0667.prop uni0661.prop -50; pos uni0667.prop uni0668.prop -50; pos uni0668.prop uni0661.prop -100; pos uni0668.prop uni0662.prop -100; pos uni0668.prop uni0663.prop -100; pos uni0668.prop uni0666.prop -100; pos uni0668.prop uni0667.prop -100; pos uni0669.prop uni0668.prop 50; pos uni0669.prop uni0660.prop 50; pos uni0660.prop uni0667.prop 50; pos uni0660.prop uni0668.prop 50; } kern; // generated features for anchor points will be inserted here by build script {%anchors%}