[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