src/hb-ot-shape-complex-hangul.cc |    2 +-
 src/hb-ot-shape-complex-indic.cc  |   21 ++++++++++++++++-----
 src/hb-ot-shape-complex-thai.cc   |    2 +-
 src/hb-ot-shape-complex-use.cc    |    4 ++--
 src/hb-ot-shape.cc                |    5 +++--
 5 files changed, 23 insertions(+), 11 deletions(-)

New commits:
commit 5828c45d7a816ccd0a7f10a665ea3cf8cfd63b05
Author: Behdad Esfahbod <beh...@behdad.org>
Date:   Tue Sep 1 16:26:35 2015 +0100

    [indic] Add comments to merge_clusters calls

diff --git a/src/hb-ot-shape-complex-indic.cc b/src/hb-ot-shape-complex-indic.cc
index 8b55484..00526f3 100644
--- a/src/hb-ot-shape-complex-indic.cc
+++ b/src/hb-ot-shape-complex-indic.cc
@@ -1025,7 +1025,11 @@ initial_reordering_consonant_syllable (const 
hb_ot_shape_plan_t *plan,
      * around like crazy.  In old-spec mode, we move halants around, so in
      * that case merge all clusters after base.  Otherwise, check the sort
      * order and merge as needed.
-     * For pre-base stuff, we handle cluster issues in final reordering. */
+     * For pre-base stuff, we handle cluster issues in final reordering.
+     *
+     * We could use buffer->sort() for this, if there was no special
+     * reordering of pre-base stuff happening later...
+     */
     if (indic_plan->is_old_spec || end - base > 127)
       buffer->merge_clusters (base, end);
     else
@@ -1404,12 +1408,17 @@ final_reordering_syllable (const hb_ot_shape_plan_t 
*plan,
        if (info[i - 1].indic_position () == POS_PRE_M)
        {
          unsigned int old_pos = i - 1;
+         if (old_pos < base && base <= new_pos) /* Shouldn't actually happen. 
*/
+           base--;
+
          hb_glyph_info_t tmp = info[old_pos];
          memmove (&info[old_pos], &info[old_pos + 1], (new_pos - old_pos) * 
sizeof (info[0]));
          info[new_pos] = tmp;
-         if (old_pos < base && base <= new_pos) /* Shouldn't actually happen. 
*/
-           base--;
+
+         /* Note: this merge_clusters() is intentionally *after* the 
reordering.
+          * Indic matra reordering is special and tricky... */
          buffer->merge_clusters (new_pos, MIN (end, base + 1));
+
          new_pos--;
        }
     } else {
@@ -1562,12 +1571,12 @@ final_reordering_syllable (const hb_ot_shape_plan_t 
*plan,
 
     reph_move:
     {
-      buffer->merge_clusters (start, new_reph_pos + 1);
-
       /* Move */
+      buffer->merge_clusters (start, new_reph_pos + 1);
       hb_glyph_info_t reph = info[start];
       memmove (&info[start], &info[start + 1], (new_reph_pos - start) * sizeof 
(info[0]));
       info[new_reph_pos] = reph;
+
       if (start < base && base <= new_reph_pos)
        base--;
     }
@@ -1640,10 +1649,12 @@ final_reordering_syllable (const hb_ot_shape_plan_t 
*plan,
 
          {
            unsigned int old_pos = i;
+
            buffer->merge_clusters (new_pos, old_pos + 1);
            hb_glyph_info_t tmp = info[old_pos];
            memmove (&info[new_pos + 1], &info[new_pos], (old_pos - new_pos) * 
sizeof (info[0]));
            info[new_pos] = tmp;
+
            if (new_pos <= base && base < old_pos)
              base++;
          }
commit bdc8215949a7add742cc800b4fdea6acaa37d152
Author: Behdad Esfahbod <beh...@behdad.org>
Date:   Tue Sep 1 16:24:54 2015 +0100

    [thai] Respect cluster-level > 0

diff --git a/src/hb-ot-shape-complex-thai.cc b/src/hb-ot-shape-complex-thai.cc
index feb7fc7..d4ede20 100644
--- a/src/hb-ot-shape-complex-thai.cc
+++ b/src/hb-ot-shape-complex-thai.cc
@@ -353,7 +353,7 @@ preprocess_text_thai (const hb_ot_shape_plan_t *plan,
     {
       /* Since we decomposed, and NIKHAHIT is combining, merge clusters with 
the
        * previous cluster. */
-      if (start)
+      if (start && buffer->cluster_level == 
HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES)
        buffer->merge_out_clusters (start - 1, end);
     }
   }
commit 5b31fe383ead726ec77062501ed3bb24c02842b3
Author: Behdad Esfahbod <beh...@behdad.org>
Date:   Tue Sep 1 16:24:34 2015 +0100

    [use] Merge /before/ reordering

diff --git a/src/hb-ot-shape-complex-use.cc b/src/hb-ot-shape-complex-use.cc
index 41eb43f..4b15dee 100644
--- a/src/hb-ot-shape-complex-use.cc
+++ b/src/hb-ot-shape-complex-use.cc
@@ -436,10 +436,10 @@ reorder_syllable (hb_buffer_t *buffer, unsigned int 
start, unsigned int end)
        if (info[i].use_category() == USE_H)
          i--;
 
+       buffer->merge_clusters (start, i + 1);
        hb_glyph_info_t t = info[start];
        memmove (&info[start], &info[start + 1], (i - start) * sizeof 
(info[0]));
        info[i] = t;
-       buffer->merge_clusters (start, i + 1);
 
        break;
       }
@@ -464,10 +464,10 @@ reorder_syllable (hb_buffer_t *buffer, unsigned int 
start, unsigned int end)
             0 == _hb_glyph_info_get_lig_comp (&info[i]) &&
             j < i)
     {
+      buffer->merge_clusters (j, i + 1);
       hb_glyph_info_t t = info[i];
       memmove (&info[j + 1], &info[j], (i - j) * sizeof (info[0]));
       info[j] = t;
-      buffer->merge_clusters (j, i + 1);
     }
   }
 }
commit 0d438f89bd9422c66838c776eb4aa867de0a2ad8
Author: Behdad Esfahbod <beh...@behdad.org>
Date:   Tue Sep 1 16:24:13 2015 +0100

    [hangul] Merge /before/ reordering

diff --git a/src/hb-ot-shape-complex-hangul.cc 
b/src/hb-ot-shape-complex-hangul.cc
index 763dbf0..1fa79ce 100644
--- a/src/hb-ot-shape-complex-hangul.cc
+++ b/src/hb-ot-shape-complex-hangul.cc
@@ -205,11 +205,11 @@ preprocess_text_hangul (const hb_ot_shape_plan_t *plan,
        buffer->next_glyph ();
        if (!is_zero_width_char (font, u))
        {
+         buffer->merge_out_clusters (start, end + 1);
          hb_glyph_info_t *info = buffer->out_info;
          hb_glyph_info_t tone = info[end];
          memmove (&info[start + 1], &info[start], (end - start) * sizeof 
(hb_glyph_info_t));
          info[start] = tone;
-         buffer->merge_out_clusters (start, end + 1);
        }
       }
       else
commit f883de664fc4bfe01e30c89e07e31dc113f906d9
Author: Behdad Esfahbod <beh...@behdad.org>
Date:   Tue Sep 1 16:23:40 2015 +0100

    [OT] Merge /before/ reordering

diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc
index e24f7a8..40332d6 100644
--- a/src/hb-ot-shape.cc
+++ b/src/hb-ot-shape.cc
@@ -302,15 +302,16 @@ hb_ensure_native_direction (hb_buffer_t *buffer)
     {
       if (likely (!HB_UNICODE_GENERAL_CATEGORY_IS_MARK 
(_hb_glyph_info_get_general_category (&info[i]))))
       {
-       buffer->reverse_range (base, i);
        if (buffer->cluster_level == 
HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS)
          buffer->merge_clusters (base, i);
+       buffer->reverse_range (base, i);
+
        base = i;
       }
     }
-    buffer->reverse_range (base, count);
     if (buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS)
       buffer->merge_clusters (base, count);
+    buffer->reverse_range (base, count);
 
     buffer->reverse ();
 
_______________________________________________
HarfBuzz mailing list
HarfBuzz@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/harfbuzz

Reply via email to