[Indic] Move Halant with after-base consonants
Normally, we attach the Halant to the previous character and move it
with it. For after-base consonants however, the Halant "belongs" to the
consonant after, so attach it so.
This fixes Bengali sequences involving post-base consonant Ya, which
should ligate with the Halant to form Ya Phala, but previously a
reordered matras was blocking the ligation.
diff --git a/src/hb-ot-shape-complex-indic.cc b/src/hb-ot-shape-complex-indic.cc
index 48c7a15..d5036b3 100644
--- a/src/hb-ot-shape-complex-indic.cc
+++ b/src/hb-ot-shape-complex-indic.cc
@@ -468,6 +468,17 @@
}
}
}
+ /* Re-attach ZWJ, ZWNJ, and halant to next char, for after-base consonants. */
+ {
+ unsigned int last_halant = end;
+ for (unsigned int i = base + 1; i < end; i++)
+ if (info[i].indic_category() == OT_H)
+ last_halant = i;
+ else if (is_consonant (info[i])) {
+ for (unsigned int j = last_halant; j < i; j++)
+ info[j].indic_position() = info[i].indic_position();
+ }
+ }
/* We do bubble-sort, skip malicious clusters attempts */
if (end - start < 64)
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/misc/misc.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/misc/misc.txt
index 1eb2611..843ee4f 100644
--- a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/misc/misc.txt
+++ b/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/misc/misc.txt
@@ -48,3 +48,4 @@
ৱ্ভ
অৗ
ন্ত্র
+ত্যু