From 1db6fddb24f6bb27d5d13890ea233859db7960a7 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Sat, 18 Jun 2022 14:34:46 -0600 Subject: [PATCH] [arabic-fallback.hh] Hook up 3-letter ligatures --- src/hb-null.hh | 2 +- src/hb-ot-shaper-arabic-fallback.hh | 10 ++++++---- .../data/in-house/tests/arabic-fallback-shaping.tests | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/hb-null.hh b/src/hb-null.hh index 623a01ec1..78eb6474d 100644 --- a/src/hb-null.hh +++ b/src/hb-null.hh @@ -37,7 +37,7 @@ /* Global nul-content Null pool. Enlarge as necessary. */ -#define HB_NULL_POOL_SIZE 384 +#define HB_NULL_POOL_SIZE 448 /* Use SFINAE to sniff whether T has min_size; in which case return the larger * of sizeof(T) and T::null_size, otherwise return sizeof(T). diff --git a/src/hb-ot-shaper-arabic-fallback.hh b/src/hb-ot-shaper-arabic-fallback.hh index 8c7d187e0..f7ae1327b 100644 --- a/src/hb-ot-shaper-arabic-fallback.hh +++ b/src/hb-ot-shaper-arabic-fallback.hh @@ -45,7 +45,8 @@ static const hb_tag_t arabic_fallback_features[] = HB_TAG('m','e','d','i'), HB_TAG('f','i','n','a'), HB_TAG('i','s','o','l'), - HB_TAG('r','l','i','g'), // Main ligatures + HB_TAG('r','l','i','g'), // 3-letter ligatures + HB_TAG('r','l','i','g'), // 2-letter ligatures HB_TAG('r','l','i','g'), // Mark ligatures }; @@ -187,7 +188,7 @@ arabic_fallback_synthesize_lookup_ligature (const hb_ot_shape_plan_t *plan HB_UN hb_array (ligature_per_first_glyph_count_list, num_first_glyphs), hb_array (ligature_list, num_ligatures), hb_array (component_count_list, num_ligatures), - hb_array (component_list, num_ligatures)); + hb_array (component_list, num_components)); c.end_serialize (); return ret && !c.in_error () ? c.copy () : nullptr; @@ -203,8 +204,9 @@ arabic_fallback_synthesize_lookup (const hb_ot_shape_plan_t *plan, else { switch (feature_index) { - case 4: return arabic_fallback_synthesize_lookup_ligature (plan, font, ligature_table, OT::LookupFlag::IgnoreMarks); - case 5: return arabic_fallback_synthesize_lookup_ligature (plan, font, ligature_mark_table, 0); + case 4: return arabic_fallback_synthesize_lookup_ligature (plan, font, ligature_3_table, OT::LookupFlag::IgnoreMarks); + case 5: return arabic_fallback_synthesize_lookup_ligature (plan, font, ligature_table, OT::LookupFlag::IgnoreMarks); + case 6: return arabic_fallback_synthesize_lookup_ligature (plan, font, ligature_mark_table, 0); } } assert (false); diff --git a/test/shape/data/in-house/tests/arabic-fallback-shaping.tests b/test/shape/data/in-house/tests/arabic-fallback-shaping.tests index eb5d30583..ac087899c 100644 --- a/test/shape/data/in-house/tests/arabic-fallback-shaping.tests +++ b/test/shape/data/in-house/tests/arabic-fallback-shaping.tests @@ -4,7 +4,7 @@ ../fonts/SimpArabicTest.ttf;;U+0021,U+0022,U+00AB,U+00BB,U+0025,U+00D7,U+00F7,U+0028,U+0020,U+0029,U+002A,U+002B,U+060C,U+002E,U+002F,U+003A,U+061B,U+2018,U+003D,U+2019,U+061F,U+005B,U+005D,U+002D,U+0022;[asterisk=0+269|plus=1+408|comma=2+509|hyphen=3+509|period=4+573|slash=5+572|zero=6+572|one=7+300|parenright=8+391|two=9+300|three=10+551|four=11+572|five=12+283|seven=13+268|eight=14+372|C=15+268|D=16+295|E=17+175|F=18+572|G=19+175|H=20+485|d=21+329|f=22+329|six=23+322|plus=24+408] ../fonts/SimpArabicTest.ttf;;U+061F,U+003F,U+0640;[H=0+485|H=1+485|h=2+171] ../fonts/SimpArabicTest.ttf;;U+0628,U+0644,U+0627,U+0020,U+0628,U+0644,U+0625;[ordfeminine=5+674|R=4+232|parenright=3+391|yen=1+709|R=0+232] -../fonts/TradArabicTest.ttf;;U+0628,U+0650,U+0633,U+0652,U+0645,U+0650,U+0020,U+0020,U+0627,U+0644,U+0644,U+0647,U+0020,U+0627,U+0644,U+0631,U+0651,U+064E,U+062D,U+0652,U+0645,U+064E,U+0646,U+0650,U+0020,U+0627,U+0644,U+0631,U+062D,U+0650,U+064A,U+0645;[fnmeem=31+1069|midya=30+499|kasrah2=28@151,0+0|inhaa=28+1341|fnra=27+702|inlam=26+358|alef=25+444|righttoleftspace=24+468|kasrah2=22@110,-604+0|fnnoon=22+1259|fathah2=18@-145,-168+0|sukun2=18@760,-166+0|f29b=18+1497|fahtanonshaddah2=15@-51,-416+0|fnra=15+702|inlam=14+358|alef=13+444|righttoleftspace=12+468|fnha=11+776|midlam=10+403|inlam=9+358|alef=8+444|righttoleftspace=7+468|righttoleftspace=6+468|kasrah2=4@15,-1102+0|fnmeem=4+1069|sukun2=2@220,-386+0|midseen=2+1163|kasrah2=0@-324,-403+0|inbaa=0+389] +../fonts/TradArabicTest.ttf;;U+0628,U+0650,U+0633,U+0652,U+0645,U+0650,U+0020,U+0020,U+0627,U+0644,U+0644,U+0647,U+0020,U+0627,U+0644,U+0631,U+0651,U+064E,U+062D,U+0652,U+0645,U+064E,U+0646,U+0650,U+0020,U+0627,U+0644,U+0631,U+062D,U+0650,U+064A,U+0645;[fnmeem=31+1069|midya=30+499|kasrah2=28@151,0+0|inhaa=28+1341|fnra=27+702|inlam=26+358|alef=25+444|righttoleftspace=24+468|kasrah2=22@110,-604+0|fnnoon=22+1259|fathah2=18@-145,-168+0|sukun2=18@760,-166+0|f29b=18+1497|fahtanonshaddah2=15@-51,-416+0|fnra=15+702|inlam=14+358|alef=13+444|righttoleftspace=12+468|Allah=9+1513|alef=8+444|righttoleftspace=7+468|righttoleftspace=6+468|kasrah2=4@15,-1102+0|fnmeem=4+1069|sukun2=2@220,-386+0|midseen=2+1163|kasrah2=0@-324,-403+0|inbaa=0+389] ../fonts/TradArabicTest.ttf;;U+0020,U+0644,U+0627,U+0020,U+0644,U+0623,U+0020,U+0644,U+064E,U+0623,U+064E,U+0020,U+0623,U+064E,U+0646,U+062A;[fntaa=15+1808|innoon=14+389|fathah2=12@-279,883+0|hamzahonalef=12+479|righttoleftspace=11+468|fathah2=7@-190,862+0|fathah2=7@468,862+0|hamzahonlamelef=7+1316|righttoleftspace=6+468|hamzahonlamelef=4+1316|righttoleftspace=3+468|lamelef=1+1316|righttoleftspace=0+468] ../fonts/TradArabicTest.ttf;;U+0021,U+0022,U+00AB,U+00BB,U+0025,U+00D7,U+00F7,U+0028,U+0020,U+0029,U+002A,U+002B,U+060C,U+002E,U+002F,U+003A,U+061B,U+2018,U+003D,U+2019,U+061F,U+005B,U+005D,U+002D,U+0022;[greater=0+481|question=1+559|at=2+849|A=3+849|percentarabic=4+1353|C=5+927|D=6+1196|E=7+855|righttoleftspace=8+468|F=9+855|G=10+884|H=11+1083|commaarabic=12+755|K=13+649|L=14+704|W=15+450|semicolonarabic=16+755|.notdef=17+745|Z=18+1128|.notdef=19+745|questionarabic=20+845|x=21+739|z=22+739|J=23+753|question=24+559] ../fonts/TradArabicTest.ttf;;U+061F,U+003F,U+0640;[questionarabic=0+845|questionarabic=1+845|tatweelnarrow=2+378]