[HarfBuzz] harfbuzz-ng: Branch 'master'
Behdad Esfahbod
behdad at kemper.freedesktop.org
Sun Jul 29 22:48:17 PDT 2012
src/hb-ot-layout-gsub-table.hh | 11 +++++++---
test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/misc/misc.txt | 1
2 files changed, 9 insertions(+), 3 deletions(-)
New commits:
commit a973b5ce86051e8ef0d20df362db1a50488842ab
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Mon Jul 30 01:46:34 2012 -0400
[GSUB] Further adjustments to mark-attachment vs ligation interaction
The d1d69ec52e75a78575b620a1c456d528b6078170 change broke Kannada badly,
since it was ligating consonants, pushing matra out, and then ligating
with the matra. Adjust for that. See comments.
diff --git a/src/hb-ot-layout-gsub-table.hh b/src/hb-ot-layout-gsub-table.hh
index b5520ed..4ad61a9 100644
--- a/src/hb-ot-layout-gsub-table.hh
+++ b/src/hb-ot-layout-gsub-table.hh
@@ -522,7 +522,11 @@ struct Ligature
* - Ligatures cannot be formed across glyphs attached to different components
* of previous ligatures. Eg. the sequence is LAM,SHADDA,LAM,FATHA,HEH, and
* LAM,LAM,HEH form a ligature, leaving SHADDA,FATHA next to eachother.
- * However, it would be wrong to ligate that SHADDA,FATHA sequence.
+ * However, it would be wrong to ligate that SHADDA,FATHA sequence.o
+ * There is an exception to this: If a ligature tries ligating with marks that
+ * belong to it itself, go ahead, assuming that the font designer knows what
+ * they are doing (otherwise it can break Indic stuff when a matra wants to
+ * ligate with a conjunct...)
*/
bool is_mark_ligature = !!(c->property & HB_OT_LAYOUT_GLYPH_CLASS_MARK);
@@ -543,6 +547,7 @@ struct Ligature
unsigned int this_lig_id = get_lig_id (c->buffer->info[skippy_iter.idx]);
unsigned int this_lig_comp = get_lig_comp (c->buffer->info[skippy_iter.idx]);
+
if (first_lig_id && first_lig_comp) {
/* If first component was attached to a previous ligature component,
* all subsequent components should be attached to the same ligature
@@ -552,8 +557,8 @@ struct Ligature
} else {
/* If first component was NOT attached to a previous ligature component,
* all subsequent components should also NOT be attached to any ligature
- * component, otherwise we shouldn't ligate them. */
- if (this_lig_id && this_lig_comp)
+ * component, unless they are attached to the first component itself! */
+ if (this_lig_id && this_lig_comp && (this_lig_id != first_lig_id))
return TRACE_RETURN (false);
}
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/misc/misc.txt b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/misc/misc.txt
index 5defb0c..19bec8c 100644
--- a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/misc/misc.txt
+++ b/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/misc/misc.txt
@@ -16,3 +16,4 @@
à²à³à³
à²à³à³
à²à³à²·
+à²à³à²·à²¿
More information about the HarfBuzz
mailing list