src/hb-fallback-shape.cc             |   16 ++++++++++++----
 src/hb-ot-layout-gpos-table.hh       |    6 +++---
 src/hb-ot-layout-gsubgpos-private.hh |    2 +-
 3 files changed, 16 insertions(+), 8 deletions(-)

New commits:
commit 6da9dbff21b47fb10794b8d6cb747393c9eab7dd
Author: Behdad Esfahbod <[email protected]>
Date:   Fri Jun 8 10:53:35 2012 -0400

    Remove zero-width chars in the fallback shaper too

diff --git a/src/hb-fallback-shape.cc b/src/hb-fallback-shape.cc
index 5939887..b9480e6 100644
--- a/src/hb-fallback-shape.cc
+++ b/src/hb-fallback-shape.cc
@@ -34,16 +34,24 @@ _hb_fallback_shape (hb_font_t          *font,
                    const hb_feature_t *features HB_UNUSED,
                    unsigned int        num_features HB_UNUSED)
 {
+  /* TODO Save the space character in the font? */
+  hb_codepoint_t space;
+  hb_font_get_glyph (font, ' ', 0, &space);
+
   buffer->guess_properties ();
+  buffer->clear_positions ();
 
   unsigned int count = buffer->len;
 
   for (unsigned int i = 0; i < count; i++)
+  {
+    if (_hb_unicode_is_zero_width (buffer->info[i].codepoint)) {
+      buffer->info[i].codepoint = space;
+      buffer->pos[i].x_advance = 0;
+      buffer->pos[i].y_advance = 0;
+      continue;
+    }
     hb_font_get_glyph (font, buffer->info[i].codepoint, 0, 
&buffer->info[i].codepoint);
-
-  buffer->clear_positions ();
-
-  for (unsigned int i = 0; i < count; i++) {
     hb_font_get_glyph_advance_for_direction (font, buffer->info[i].codepoint,
                                             buffer->props.direction,
                                             &buffer->pos[i].x_advance,
commit 68b76121f83fc9b87dc84f03e8bef38d4332734d
Author: Behdad Esfahbod <[email protected]>
Date:   Fri Jun 8 10:43:49 2012 -0400

    Fix regressions introduced by sed.  Ouch!
    
    Introduced in 99c2695759a6af855d565f4994bbdf220570bb48.
    Broken mark-mark and mark-ligature stuff.

diff --git a/src/hb-ot-layout-gpos-table.hh b/src/hb-ot-layout-gpos-table.hh
index 71c13a2..49986ea 100644
--- a/src/hb-ot-layout-gpos-table.hh
+++ b/src/hb-ot-layout-gpos-table.hh
@@ -1068,7 +1068,7 @@ struct MarkLigPosFormat1
      * can directly use the component index.  If not, we attach the mark
      * glyph to the last component of the ligature. */
     if (get_lig_id (c->buffer->info[j]) &&
-       get_lig_id (c->buffer->cur()) &&
+       get_lig_id (c->buffer->info[j]) == get_lig_id (c->buffer->cur()) &&
        get_lig_comp (c->buffer->cur()) > 0)
     {
       comp_index = get_lig_comp (c->buffer->cur()) - 1;
@@ -1166,9 +1166,9 @@ struct MarkMarkPosFormat1
     /* Two marks match only if they belong to the same base, or same component
      * of the same ligature.  That is, the component numbers must match, and
      * if those are non-zero, the ligid number should also match. */
-    if ((get_lig_comp (c->buffer->cur())) ||
+    if ((get_lig_comp (c->buffer->info[j]) != get_lig_comp (c->buffer->cur())) 
||
        (get_lig_comp (c->buffer->info[j]) > 0 &&
-        get_lig_id (c->buffer->cur())))
+        get_lig_id (c->buffer->info[j]) != get_lig_id (c->buffer->cur())))
       return TRACE_RETURN (false);
 
     unsigned int mark2_index = (this+mark2Coverage) 
(c->buffer->info[j].codepoint);
diff --git a/src/hb-ot-layout-gsubgpos-private.hh 
b/src/hb-ot-layout-gsubgpos-private.hh
index e590e39..2554f42 100644
--- a/src/hb-ot-layout-gsubgpos-private.hh
+++ b/src/hb-ot-layout-gsubgpos-private.hh
@@ -95,7 +95,7 @@ struct hb_closure_context_t
 #endif
 
 #define TRACE_APPLY() \
-       hb_auto_trace_t<HB_DEBUG_APPLY> trace (&c->debug_depth, "APPLY", this, 
HB_FUNC, "idx %d codepoint %u", c->buffer->cur().codepoint);
+       hb_auto_trace_t<HB_DEBUG_APPLY> trace (&c->debug_depth, "APPLY", this, 
HB_FUNC, "idx %d codepoint %u", c->buffer->idx, c->buffer->cur().codepoint);
 
 
 
_______________________________________________
HarfBuzz mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/harfbuzz

Reply via email to