Hello community,

here is the log from the commit of package harfbuzz for openSUSE:Factory 
checked in at 2013-05-28 11:45:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/harfbuzz (Old)
 and      /work/SRC/openSUSE:Factory/.harfbuzz.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "harfbuzz"

Changes:
--------
--- /work/SRC/openSUSE:Factory/harfbuzz/harfbuzz.changes        2013-04-22 
14:05:51.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.harfbuzz.new/harfbuzz.changes   2013-05-28 
11:45:10.000000000 +0200
@@ -1,0 +2,8 @@
+Wed May 22 12:19:17 UTC 2013 - [email protected]
+
+- Update to version 0.9.17:
+  + Build fixes.
+  + Fix bug in hb_set_get_min().
+  + Fix regression with Arabic mark positioning / width-zeroing.
+
+-------------------------------------------------------------------

Old:
----
  harfbuzz-0.9.16.tar.bz2

New:
----
  harfbuzz-0.9.17.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ harfbuzz.spec ++++++
--- /var/tmp/diff_new_pack.vzRsij/_old  2013-05-28 11:45:11.000000000 +0200
+++ /var/tmp/diff_new_pack.vzRsij/_new  2013-05-28 11:45:11.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           harfbuzz
-Version:        0.9.16
+Version:        0.9.17
 Release:        0
 # FIXME: graphite2 is not packaged / 
http://projects.palaso.org/projects/graphitedev
 Summary:        An OpenType text shaping engine

++++++ harfbuzz-0.9.16.tar.bz2 -> harfbuzz-0.9.17.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/NEWS new/harfbuzz-0.9.17/NEWS
--- old/harfbuzz-0.9.16/NEWS    2013-04-19 22:27:04.000000000 +0200
+++ new/harfbuzz-0.9.17/NEWS    2013-05-20 15:23:34.000000000 +0200
@@ -1,3 +1,11 @@
+Overview of changes leading to 0.9.17
+Monday, May 20, 2013
+=====================================
+
+- Build fixes.
+- Fix bug in hb_set_get_min().
+- Fix regression with Arabic mark positioning / width-zeroing.
+
 Overview of changes leading to 0.9.16
 Friday, April 19, 2013
 =====================================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/configure 
new/harfbuzz-0.9.17/configure
--- old/harfbuzz-0.9.16/configure       2013-04-19 22:24:01.000000000 +0200
+++ new/harfbuzz-0.9.17/configure       2013-05-20 15:23:53.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for HarfBuzz 0.9.16.
+# Generated by GNU Autoconf 2.68 for HarfBuzz 0.9.17.
 #
 # Report bugs to <http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz>.
 #
@@ -571,8 +571,8 @@
 # Identity of this package.
 PACKAGE_NAME='HarfBuzz'
 PACKAGE_TARNAME='harfbuzz'
-PACKAGE_VERSION='0.9.16'
-PACKAGE_STRING='HarfBuzz 0.9.16'
+PACKAGE_VERSION='0.9.17'
+PACKAGE_STRING='HarfBuzz 0.9.17'
 PACKAGE_BUGREPORT='http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz'
 PACKAGE_URL='http://harfbuzz.org/'
 
@@ -1385,7 +1385,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures HarfBuzz 0.9.16 to adapt to many kinds of systems.
+\`configure' configures HarfBuzz 0.9.17 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1455,7 +1455,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of HarfBuzz 0.9.16:";;
+     short | recursive ) echo "Configuration of HarfBuzz 0.9.17:";;
    esac
   cat <<\_ACEOF
 
@@ -1589,7 +1589,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-HarfBuzz configure 0.9.16
+HarfBuzz configure 0.9.17
 generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -2133,7 +2133,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by HarfBuzz $as_me 0.9.16, which was
+It was created by HarfBuzz $as_me 0.9.17, which was
 generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
@@ -2954,7 +2954,7 @@
 
 # Define the identity of the package.
  PACKAGE='harfbuzz'
- VERSION='0.9.16'
+ VERSION='0.9.17'
 
 
 # Some tools Automake needs.
@@ -16284,8 +16284,8 @@
 
 HB_VERSION_MAJOR=0
 HB_VERSION_MINOR=9
-HB_VERSION_MICRO=16
-HB_VERSION=0.9.16
+HB_VERSION_MICRO=17
+HB_VERSION=0.9.17
 
 
 
@@ -16296,7 +16296,7 @@
 
 
 
-HB_LIBTOOL_VERSION_INFO=916:0:916
+HB_LIBTOOL_VERSION_INFO=917:0:917
 
 
 
@@ -17361,7 +17361,7 @@
                # necessarily want, like debugging and optimization flags
                # See man (1) icu-config for more info.
                ICU_CFLAGS=`$ICU_CONFIG --cppflags`
-               ICU_LIBS=`$ICU_CONFIG --ldflags-libsonly`
+               ICU_LIBS=`$ICU_CONFIG --ldflags-searchpath --ldflags-libsonly`
 
 
                { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
@@ -17560,7 +17560,7 @@
                # necessarily want, like debugging and optimization flags
                # See man (1) icu-config for more info.
                ICU_LE_CFLAGS=`$ICU_CONFIG --cppflags`
-               ICU_LE_LIBS=`$ICU_CONFIG --ldflags-libsonly --ldflags-layout`
+               ICU_LE_LIBS=`$ICU_CONFIG --ldflags-searchpath 
--ldflags-libsonly --ldflags-layout`
 
 
                { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
@@ -18613,7 +18613,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by HarfBuzz $as_me 0.9.16, which was
+This file was extended by HarfBuzz $as_me 0.9.17, which was
 generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -18680,7 +18680,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-HarfBuzz config.status 0.9.16
+HarfBuzz config.status 0.9.17
 configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/configure.ac 
new/harfbuzz-0.9.17/configure.ac
--- old/harfbuzz-0.9.16/configure.ac    2013-04-19 22:23:07.000000000 +0200
+++ new/harfbuzz-0.9.17/configure.ac    2013-05-20 15:21:57.000000000 +0200
@@ -1,6 +1,6 @@
 AC_PREREQ([2.64])
 AC_INIT([HarfBuzz],
-        [0.9.16],
+        [0.9.17],
         [http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz],
         [harfbuzz],
         [http://harfbuzz.org/])
@@ -13,7 +13,7 @@
 AM_SILENT_RULES([yes])
 
 # Initialize libtool
-AM_PROG_AR
+m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
 LT_PREREQ([2.2])
 LT_INIT([disable-static])
 
@@ -177,7 +177,7 @@
                # necessarily want, like debugging and optimization flags
                # See man (1) icu-config for more info.
                ICU_CFLAGS=`$ICU_CONFIG --cppflags`
-               ICU_LIBS=`$ICU_CONFIG --ldflags-libsonly`
+               ICU_LIBS=`$ICU_CONFIG --ldflags-searchpath --ldflags-libsonly`
                AC_SUBST(ICU_CFLAGS)
                AC_SUBST(ICU_LIBS)
                AC_MSG_RESULT([yes])
@@ -205,7 +205,7 @@
                # necessarily want, like debugging and optimization flags
                # See man (1) icu-config for more info.
                ICU_LE_CFLAGS=`$ICU_CONFIG --cppflags`
-               ICU_LE_LIBS=`$ICU_CONFIG --ldflags-libsonly --ldflags-layout`
+               ICU_LE_LIBS=`$ICU_CONFIG --ldflags-searchpath 
--ldflags-libsonly --ldflags-layout`
                AC_SUBST(ICU_LE_CFLAGS)
                AC_SUBST(ICU_LE_LIBS)
                AC_MSG_RESULT([yes])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-buffer-private.hh 
new/harfbuzz-0.9.17/src/hb-buffer-private.hh
--- old/harfbuzz-0.9.16/src/hb-buffer-private.hh        2013-03-19 
10:47:13.000000000 +0100
+++ new/harfbuzz-0.9.17/src/hb-buffer-private.hh        2013-05-02 
21:46:20.000000000 +0200
@@ -80,6 +80,8 @@
   inline hb_glyph_info_t &prev (void) { return out_info[out_len - 1]; }
   inline hb_glyph_info_t prev (void) const { return info[out_len - 1]; }
 
+  inline bool has_separate_output (void) const { return info != out_info; }
+
   unsigned int serial;
 
   /* These reflect current allocations of the bytes in glyph_info_t's var1 and 
var2. */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-buffer.cc 
new/harfbuzz-0.9.17/src/hb-buffer.cc
--- old/harfbuzz-0.9.16/src/hb-buffer.cc        2013-03-19 10:47:13.000000000 
+0100
+++ new/harfbuzz-0.9.17/src/hb-buffer.cc        2013-04-30 17:35:05.000000000 
+0200
@@ -549,7 +549,7 @@
 {
   assert (byte_i < 8 && byte_i + count <= 8);
 
-  if (DEBUG (BUFFER))
+  if (DEBUG_ENABLED (BUFFER))
     dump_var_allocation (this);
   DEBUG_MSG (BUFFER, this,
             "Allocating var bytes %d..%d for %s",
@@ -564,7 +564,7 @@
 
 void hb_buffer_t::deallocate_var (unsigned int byte_i, unsigned int count, 
const char *owner)
 {
-  if (DEBUG (BUFFER))
+  if (DEBUG_ENABLED (BUFFER))
     dump_var_allocation (this);
 
   DEBUG_MSG (BUFFER, this,
@@ -581,7 +581,7 @@
 
 void hb_buffer_t::assert_var (unsigned int byte_i, unsigned int count, const 
char *owner)
 {
-  if (DEBUG (BUFFER))
+  if (DEBUG_ENABLED (BUFFER))
     dump_var_allocation (this);
 
   DEBUG_MSG (BUFFER, this,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-layout-gpos-table.hh 
new/harfbuzz-0.9.17/src/hb-ot-layout-gpos-table.hh
--- old/harfbuzz-0.9.16/src/hb-ot-layout-gpos-table.hh  2013-04-18 
05:14:23.000000000 +0200
+++ new/harfbuzz-0.9.17/src/hb-ot-layout-gpos-table.hh  2013-05-14 
21:21:11.000000000 +0200
@@ -710,8 +710,6 @@
     TRACE_COLLECT_GLYPHS (this);
     /* (this+coverage).add_coverage (c->input); // Don't need this. */
 
-    /* TODO only add values for pairs that have nonzero adjustments. */
-
     unsigned int count1 = class1Count;
     const ClassDef &klass1 = this+classDef1;
     for (unsigned int i = 0; i < count1; i++)
@@ -1014,7 +1012,6 @@
     TRACE_COLLECT_GLYPHS (this);
     (this+markCoverage).add_coverage (c->input);
     (this+baseCoverage).add_coverage (c->input);
-    /* TODO only add combinations that have nonzero adjustment. */
   }
 
   inline const Coverage &get_coverage (void) const
@@ -1118,7 +1115,6 @@
     TRACE_COLLECT_GLYPHS (this);
     (this+markCoverage).add_coverage (c->input);
     (this+ligatureCoverage).add_coverage (c->input);
-    /* TODO only add combinations that have nonzero adjustment. */
   }
 
   inline const Coverage &get_coverage (void) const
@@ -1234,7 +1230,6 @@
     TRACE_COLLECT_GLYPHS (this);
     (this+mark1Coverage).add_coverage (c->input);
     (this+mark2Coverage).add_coverage (c->input);
-    /* TODO only add combinations that have nonzero adjustment. */
   }
 
   inline const Coverage &get_coverage (void) const
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-layout-gsub-table.hh 
new/harfbuzz-0.9.17/src/hb-ot-layout-gsub-table.hh
--- old/harfbuzz-0.9.16/src/hb-ot-layout-gsub-table.hh  2013-04-18 
05:36:37.000000000 +0200
+++ new/harfbuzz-0.9.17/src/hb-ot-layout-gsub-table.hh  2013-05-14 
21:21:11.000000000 +0200
@@ -275,11 +275,18 @@
     unsigned int klass = c->buffer->cur().glyph_props() &
                         HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE ? 
HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH : 0;
     unsigned int count = substitute.len;
-    for (unsigned int i = 0; i < count; i++) {
-      set_lig_props_for_component (c->buffer->cur(), i);
-      c->output_glyph (substitute.array[i], klass);
+    if (count == 1) /* Special-case to make it in-place. */
+    {
+      c->replace_glyph (substitute.array[0]);
+    }
+    else
+    {
+      for (unsigned int i = 0; i < count; i++) {
+       set_lig_props_for_component (c->buffer->cur(), i);
+       c->output_glyph (substitute.array[i], klass);
+      }
+      c->buffer->skip_glyph ();
     }
-    c->buffer->skip_glyph ();
 
     return TRACE_RETURN (true);
   }
@@ -1196,38 +1203,38 @@
 
     if (likely (!is_reverse ()))
     {
-       /* in/out forward substitution */
-       c->buffer->clear_output ();
-       c->buffer->idx = 0;
-
-       while (c->buffer->idx < c->buffer->len)
-       {
-         if (digest->may_have (c->buffer->cur().codepoint) &&
-             (c->buffer->cur().mask & c->lookup_mask) &&
-             apply_once (c))
-           ret = true;
-         else
-           c->buffer->next_glyph ();
-       }
-       if (ret)
-         c->buffer->swap_buffers ();
+      /* in/out forward substitution */
+      c->buffer->clear_output ();
+      c->buffer->idx = 0;
+
+      while (c->buffer->idx < c->buffer->len)
+      {
+       if (digest->may_have (c->buffer->cur().codepoint) &&
+           (c->buffer->cur().mask & c->lookup_mask) &&
+           apply_once (c))
+         ret = true;
+       else
+         c->buffer->next_glyph ();
+      }
+      if (ret)
+       c->buffer->swap_buffers ();
     }
     else
     {
-       /* in-place backward substitution */
-       c->buffer->remove_output ();
-       c->buffer->idx = c->buffer->len - 1;
-       do
-       {
-         if (digest->may_have (c->buffer->cur().codepoint) &&
-             (c->buffer->cur().mask & c->lookup_mask) &&
-             apply_once (c))
-           ret = true;
-         else
-           c->buffer->idx--;
+      /* in-place backward substitution */
+      c->buffer->remove_output ();
+      c->buffer->idx = c->buffer->len - 1;
+      do
+      {
+       if (digest->may_have (c->buffer->cur().codepoint) &&
+           (c->buffer->cur().mask & c->lookup_mask) &&
+           apply_once (c))
+         ret = true;
+       else
+         c->buffer->idx--;
 
-       }
-       while ((int) c->buffer->idx >= 0);
+      }
+      while ((int) c->buffer->idx >= 0);
     }
 
     return ret;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-map-private.hh 
new/harfbuzz-0.9.17/src/hb-ot-map-private.hh
--- old/harfbuzz-0.9.16/src/hb-ot-map-private.hh        2013-03-19 
12:04:53.000000000 +0100
+++ new/harfbuzz-0.9.17/src/hb-ot-map-private.hh        2013-05-14 
21:21:11.000000000 +0200
@@ -1,6 +1,6 @@
 /*
  * Copyright © 2009,2010  Red Hat, Inc.
- * Copyright © 2010,2011,2012  Google, Inc.
+ * Copyright © 2010,2011,2012,2013  Google, Inc.
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
@@ -31,8 +31,8 @@
 
 #include "hb-buffer-private.hh"
 
-#include "hb-ot-layout-private.hh"
 
+struct hb_ot_shape_plan_t;
 
 static const hb_tag_t table_tags[2] = {HB_OT_TAG_GSUB, HB_OT_TAG_GPOS};
 
@@ -67,9 +67,9 @@
 
   typedef void (*pause_func_t) (const struct hb_ot_shape_plan_t *plan, 
hb_font_t *font, hb_buffer_t *buffer);
 
-  struct pause_map_t {
-    unsigned int num_lookups; /* Cumulative */
-    pause_func_t callback;
+  struct stage_map_t {
+    unsigned int last_lookup; /* Cumulative */
+    pause_func_t pause_func;
   };
 
 
@@ -110,23 +110,28 @@
       *lookup_count = 0;
       return;
     }
-    assert (stage <= pauses[table_index].len);
-    unsigned int start = stage ? pauses[table_index][stage - 1].num_lookups : 
0;
-    unsigned int end   = stage < pauses[table_index].len ? 
pauses[table_index][stage].num_lookups : lookups[table_index].len;
+    assert (stage <= stages[table_index].len);
+    unsigned int start = stage ? stages[table_index][stage - 1].last_lookup : 
0;
+    unsigned int end   = stage < stages[table_index].len ? 
stages[table_index][stage].last_lookup : lookups[table_index].len;
     *plookups = &lookups[table_index][start];
     *lookup_count = end - start;
   }
 
   HB_INTERNAL void collect_lookups (unsigned int table_index, hb_set_t 
*lookups) const;
+  HB_INTERNAL inline void apply (unsigned int table_index,
+                                const struct hb_ot_shape_plan_t *plan,
+                                hb_font_t *font,
+                                hb_buffer_t *buffer) const;
   HB_INTERNAL void substitute (const struct hb_ot_shape_plan_t *plan, 
hb_font_t *font, hb_buffer_t *buffer) const;
   HB_INTERNAL void position (const struct hb_ot_shape_plan_t *plan, hb_font_t 
*font, hb_buffer_t *buffer) const;
 
   inline void finish (void) {
     features.finish ();
-    lookups[0].finish ();
-    lookups[1].finish ();
-    pauses[0].finish ();
-    pauses[1].finish ();
+    for (unsigned int table_index = 0; table_index < 2; table_index++)
+    {
+      lookups[table_index].finish ();
+      stages[table_index].finish ();
+    }
   }
 
   public:
@@ -145,7 +150,7 @@
 
   hb_prealloced_array_t<feature_map_t, 8> features;
   hb_prealloced_array_t<lookup_map_t, 32> lookups[2]; /* GSUB/GPOS */
-  hb_prealloced_array_t<pause_map_t, 1> pauses[2]; /* GSUB/GPOS */
+  hb_prealloced_array_t<stage_map_t, 4> stages[2]; /* GSUB/GPOS */
 };
 
 enum hb_ot_map_feature_flags_t {
@@ -195,8 +200,10 @@
 
   inline void finish (void) {
     feature_infos.finish ();
-    pauses[0].finish ();
-    pauses[1].finish ();
+    for (unsigned int table_index = 0; table_index < 2; table_index++)
+    {
+      stages[table_index].finish ();
+    }
   }
 
   private:
@@ -213,9 +220,9 @@
     { return (a->tag != b->tag) ?  (a->tag < b->tag ? -1 : 1) : (a->seq < 
b->seq ? -1 : 1); }
   };
 
-  struct pause_info_t {
-    unsigned int stage;
-    hb_ot_map_t::pause_func_t callback;
+  struct stage_info_t {
+    unsigned int index;
+    hb_ot_map_t::pause_func_t pause_func;
   };
 
   HB_INTERNAL void add_pause (unsigned int table_index, 
hb_ot_map_t::pause_func_t pause_func);
@@ -232,8 +239,8 @@
   private:
 
   unsigned int current_stage[2]; /* GSUB/GPOS */
-  hb_prealloced_array_t<feature_info_t,16> feature_infos;
-  hb_prealloced_array_t<pause_info_t, 1> pauses[2]; /* GSUB/GPOS */
+  hb_prealloced_array_t<feature_info_t, 32> feature_infos;
+  hb_prealloced_array_t<stage_info_t, 8> stages[2]; /* GSUB/GPOS */
 };
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-map.cc 
new/harfbuzz-0.9.17/src/hb-ot-map.cc
--- old/harfbuzz-0.9.16/src/hb-ot-map.cc        2013-04-19 00:31:10.000000000 
+0200
+++ new/harfbuzz-0.9.17/src/hb-ot-map.cc        2013-05-14 21:21:11.000000000 
+0200
@@ -1,6 +1,6 @@
 /*
  * Copyright © 2009,2010  Red Hat, Inc.
- * Copyright © 2010,2011  Google, Inc.
+ * Copyright © 2010,2011,2013  Google, Inc.
  *
  *  This is part of HarfBuzz, a text shaping library.
  *
@@ -28,6 +28,8 @@
 
 #include "hb-ot-map-private.hh"
 
+#include "hb-ot-layout-private.hh"
+
 
 void
 hb_ot_map_t::add_lookups (hb_face_t    *face,
@@ -100,55 +102,50 @@
   info->stage[1] = current_stage[1];
 }
 
-/* Keep the next two functions in sync. */
-
-void hb_ot_map_t::substitute (const hb_ot_shape_plan_t *plan, hb_font_t *font, 
hb_buffer_t *buffer) const
+inline void hb_ot_map_t::apply (unsigned int table_index,
+                               const hb_ot_shape_plan_t *plan,
+                               hb_font_t *font,
+                               hb_buffer_t *buffer) const
 {
-  const unsigned int table_index = 0;
   unsigned int i = 0;
 
-  for (unsigned int pause_index = 0; pause_index < pauses[table_index].len; 
pause_index++) {
-    const pause_map_t *pause = &pauses[table_index][pause_index];
-    for (; i < pause->num_lookups; i++)
-      hb_ot_layout_substitute_lookup (font, buffer,
-                                     lookups[table_index][i].index,
-                                     lookups[table_index][i].mask,
-                                     lookups[table_index][i].auto_zwj);
-
-    buffer->clear_output ();
+  for (unsigned int stage_index = 0; stage_index < stages[table_index].len; 
stage_index++) {
+    const stage_map_t *stage = &stages[table_index][stage_index];
+    for (; i < stage->last_lookup; i++)
+      switch (table_index)
+      {
+        case 0:
+         hb_ot_layout_substitute_lookup (font, buffer, 
lookups[table_index][i].index,
+                                         lookups[table_index][i].mask,
+                                         lookups[table_index][i].auto_zwj);
+         break;
+
+       case 1:
+         hb_ot_layout_position_lookup (font, buffer, 
lookups[table_index][i].index,
+                                       lookups[table_index][i].mask,
+                                       lookups[table_index][i].auto_zwj);
+         break;
+      }
 
-    if (pause->callback)
-      pause->callback (plan, font, buffer);
+    if (stage->pause_func)
+    {
+      buffer->clear_output ();
+      stage->pause_func (plan, font, buffer);
+    }
   }
+}
 
-  for (; i < lookups[table_index].len; i++)
-    hb_ot_layout_substitute_lookup (font, buffer, 
lookups[table_index][i].index,
-                                   lookups[table_index][i].mask,
-                                   lookups[table_index][i].auto_zwj);
+void hb_ot_map_t::substitute (const hb_ot_shape_plan_t *plan, hb_font_t *font, 
hb_buffer_t *buffer) const
+{
+  apply (0, plan, font, buffer);
 }
 
 void hb_ot_map_t::position (const hb_ot_shape_plan_t *plan, hb_font_t *font, 
hb_buffer_t *buffer) const
 {
-  const unsigned int table_index = 1;
-  unsigned int i = 0;
-
-  for (unsigned int pause_index = 0; pause_index < pauses[table_index].len; 
pause_index++) {
-    const pause_map_t *pause = &pauses[table_index][pause_index];
-    for (; i < pause->num_lookups; i++)
-      hb_ot_layout_position_lookup (font, buffer, 
lookups[table_index][i].index,
-                                   lookups[table_index][i].mask,
-                                   lookups[table_index][i].auto_zwj);
-
-    if (pause->callback)
-      pause->callback (plan, font, buffer);
-  }
-
-  for (; i < lookups[table_index].len; i++)
-    hb_ot_layout_position_lookup (font, buffer, lookups[table_index][i].index,
-                                 lookups[table_index][i].mask,
-                                 lookups[table_index][i].auto_zwj);
+  apply (1, plan, font, buffer);
 }
 
+
 void hb_ot_map_t::collect_lookups (unsigned int table_index, hb_set_t 
*lookups_out) const
 {
   for (unsigned int i = 0; i < lookups[table_index].len; i++)
@@ -157,10 +154,10 @@
 
 void hb_ot_map_builder_t::add_pause (unsigned int table_index, 
hb_ot_map_t::pause_func_t pause_func)
 {
-  pause_info_t *p = pauses[table_index].push ();
-  if (likely (p)) {
-    p->stage = current_stage[table_index];
-    p->callback = pause_func;
+  stage_info_t *s = stages[table_index].push ();
+  if (likely (s)) {
+    s->index = current_stage[table_index];
+    s->pause_func = pause_func;
   }
 
   current_stage[table_index]++;
@@ -277,7 +274,7 @@
                                                          
&required_feature_index))
       m.add_lookups (face, table_index, required_feature_index, 1, true);
 
-    unsigned int pause_index = 0;
+    unsigned int stage_index = 0;
     unsigned int last_num_lookups = 0;
     for (unsigned stage = 0; stage < current_stage[table_index]; stage++)
     {
@@ -307,14 +304,14 @@
 
       last_num_lookups = m.lookups[table_index].len;
 
-      if (pause_index < pauses[table_index].len && 
pauses[table_index][pause_index].stage == stage) {
-       hb_ot_map_t::pause_map_t *pause_map = m.pauses[table_index].push ();
-       if (likely (pause_map)) {
-         pause_map->num_lookups = last_num_lookups;
-         pause_map->callback = pauses[table_index][pause_index].callback;
+      if (stage_index < stages[table_index].len && 
stages[table_index][stage_index].index == stage) {
+       hb_ot_map_t::stage_map_t *stage_map = m.stages[table_index].push ();
+       if (likely (stage_map)) {
+         stage_map->last_lookup = last_num_lookups;
+         stage_map->pause_func = stages[table_index][stage_index].pause_func;
        }
 
-       pause_index++;
+       stage_index++;
       }
     }
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-shape-complex-arabic.cc 
new/harfbuzz-0.9.17/src/hb-ot-shape-complex-arabic.cc
--- old/harfbuzz-0.9.16/src/hb-ot-shape-complex-arabic.cc       2013-04-04 
20:22:54.000000000 +0200
+++ new/harfbuzz-0.9.17/src/hb-ot-shape-complex-arabic.cc       2013-05-20 
15:07:20.000000000 +0200
@@ -352,6 +352,6 @@
   NULL, /* decompose */
   NULL, /* compose */
   setup_masks_arabic,
-  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF,
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
   true, /* fallback_position */
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-shape-complex-default.cc 
new/harfbuzz-0.9.17/src/hb-ot-shape-complex-default.cc
--- old/harfbuzz-0.9.16/src/hb-ot-shape-complex-default.cc      2013-04-05 
05:04:20.000000000 +0200
+++ new/harfbuzz-0.9.17/src/hb-ot-shape-complex-default.cc      2013-05-20 
15:07:20.000000000 +0200
@@ -215,6 +215,6 @@
   NULL, /* decompose */
   compose_default,
   NULL, /* setup_masks */
-  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE,
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE,
   true, /* fallback_position */
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-shape-complex-myanmar.cc 
new/harfbuzz-0.9.17/src/hb-ot-shape-complex-myanmar.cc
--- old/harfbuzz-0.9.16/src/hb-ot-shape-complex-myanmar.cc      2013-03-19 
12:04:53.000000000 +0100
+++ new/harfbuzz-0.9.17/src/hb-ot-shape-complex-myanmar.cc      2013-05-20 
15:07:20.000000000 +0200
@@ -540,6 +540,6 @@
   NULL, /* decompose */
   NULL, /* compose */
   setup_masks_myanmar,
-  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF,
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY,
   false, /* fallback_position */
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-shape-complex-private.hh 
new/harfbuzz-0.9.17/src/hb-ot-shape-complex-private.hh
--- old/harfbuzz-0.9.16/src/hb-ot-shape-complex-private.hh      2013-04-05 
18:38:44.000000000 +0200
+++ new/harfbuzz-0.9.17/src/hb-ot-shape-complex-private.hh      2013-05-20 
15:14:39.000000000 +0200
@@ -41,8 +41,10 @@
 
 enum hb_ot_shape_zero_width_marks_type_t {
   HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE,
-  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE,
-  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF
+//  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_EARLY,
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE,
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY,
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE
 };
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-shape-complex-thai.cc 
new/harfbuzz-0.9.17/src/hb-ot-shape-complex-thai.cc
--- old/harfbuzz-0.9.16/src/hb-ot-shape-complex-thai.cc 2013-03-19 
10:47:13.000000000 +0100
+++ new/harfbuzz-0.9.17/src/hb-ot-shape-complex-thai.cc 2013-05-20 
15:07:20.000000000 +0200
@@ -373,6 +373,6 @@
   NULL, /* decompose */
   NULL, /* compose */
   NULL, /* setup_masks */
-  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE,
+  HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE,
   false,/* fallback_position */
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-shape-private.hh 
new/harfbuzz-0.9.17/src/hb-ot-shape-private.hh
--- old/harfbuzz-0.9.16/src/hb-ot-shape-private.hh      2013-03-19 
10:47:13.000000000 +0100
+++ new/harfbuzz-0.9.17/src/hb-ot-shape-private.hh      2013-05-02 
21:46:20.000000000 +0200
@@ -30,8 +30,7 @@
 #include "hb-private.hh"
 
 #include "hb-ot-map-private.hh"
-
-
+#include "hb-ot-layout-private.hh"
 
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-shape.cc 
new/harfbuzz-0.9.17/src/hb-ot-shape.cc
--- old/harfbuzz-0.9.16/src/hb-ot-shape.cc      2013-03-19 10:47:13.000000000 
+0100
+++ new/harfbuzz-0.9.17/src/hb-ot-shape.cc      2013-05-20 15:18:14.000000000 
+0200
@@ -401,6 +401,30 @@
 /* Position */
 
 static inline void
+zero_mark_widths_by_unicode (hb_buffer_t *buffer)
+{
+  unsigned int count = buffer->len;
+  for (unsigned int i = 0; i < count; i++)
+    if (_hb_glyph_info_get_general_category (&buffer->info[i]) == 
HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
+    {
+      buffer->pos[i].x_advance = 0;
+      buffer->pos[i].y_advance = 0;
+    }
+}
+
+static inline void
+zero_mark_widths_by_gdef (hb_buffer_t *buffer)
+{
+  unsigned int count = buffer->len;
+  for (unsigned int i = 0; i < count; i++)
+    if ((buffer->info[i].glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MARK))
+    {
+      buffer->pos[i].x_advance = 0;
+      buffer->pos[i].y_advance = 0;
+    }
+}
+
+static inline void
 hb_ot_position_default (hb_ot_shape_context_t *c)
 {
   hb_ot_layout_position_start (c->font, c->buffer);
@@ -419,22 +443,22 @@
 
   }
 
-  /* Zero'ing mark widths by GDEF (as used in Myanmar spec) happens
-   * *before* GPOS. */
   switch (c->plan->shaper->zero_width_marks)
   {
-    case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF:
-      for (unsigned int i = 0; i < count; i++)
-       if ((c->buffer->info[i].glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MARK))
-       {
-         c->buffer->pos[i].x_advance = 0;
-         c->buffer->pos[i].y_advance = 0;
-       }
+    case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY:
+      zero_mark_widths_by_gdef (c->buffer);
       break;
 
+    /* Not currently used for any shaper:
+    case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_EARLY:
+      zero_mark_widths_by_unicode (c->buffer);
+      break;
+    */
+
     default:
     case HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE:
-    case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE:
+    case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE:
+    case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE:
       break;
   }
 }
@@ -468,22 +492,20 @@
     ret = true;
   }
 
-  /* Zero'ing mark widths by Unicode happens
-   * *after* GPOS. */
   switch (c->plan->shaper->zero_width_marks)
   {
-    case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE:
-      for (unsigned int i = 0; i < count; i++)
-       if (_hb_glyph_info_get_general_category (&c->buffer->info[i]) == 
HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
-       {
-         c->buffer->pos[i].x_advance = 0;
-         c->buffer->pos[i].y_advance = 0;
-       }
+    case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE:
+      zero_mark_widths_by_unicode (c->buffer);
+      break;
+
+    case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE:
+      zero_mark_widths_by_gdef (c->buffer);
       break;
 
     default:
     case HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE:
-    case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF:
+    //case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_EARLY:
+    case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY:
       break;
   }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-private.hh 
new/harfbuzz-0.9.17/src/hb-private.hh
--- old/harfbuzz-0.9.16/src/hb-private.hh       2013-04-19 00:39:29.000000000 
+0200
+++ new/harfbuzz-0.9.17/src/hb-private.hh       2013-05-02 19:56:57.000000000 
+0200
@@ -563,8 +563,8 @@
   return level < max_level;
 }
 
-#define DEBUG_LEVEL(WHAT, LEVEL) (_hb_debug ((LEVEL), HB_DEBUG_##WHAT))
-#define DEBUG(WHAT) (DEBUG_LEVEL (WHAT, 0))
+#define DEBUG_LEVEL_ENABLED(WHAT, LEVEL) (_hb_debug ((LEVEL), HB_DEBUG_##WHAT))
+#define DEBUG_ENABLED(WHAT) (DEBUG_LEVEL_ENABLED (WHAT, 0))
 
 template <int max_level> static inline void
 _hb_debug_msg_va (const char *what,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-set-private.hh 
new/harfbuzz-0.9.17/src/hb-set-private.hh
--- old/harfbuzz-0.9.16/src/hb-set-private.hh   2013-04-19 20:41:00.000000000 
+0200
+++ new/harfbuzz-0.9.17/src/hb-set-private.hh   2013-05-14 21:30:46.000000000 
+0200
@@ -45,12 +45,14 @@
 {
   ASSERT_POD ();
 
+  static const unsigned int mask_bytes = sizeof (mask_t);
+  static const unsigned int mask_bits = sizeof (mask_t) * 8;
   static const unsigned int num_bits = 0
-                                    + (sizeof (mask_t) >= 1 ? 3 : 0)
-                                    + (sizeof (mask_t) >= 2 ? 1 : 0)
-                                    + (sizeof (mask_t) >= 4 ? 1 : 0)
-                                    + (sizeof (mask_t) >= 8 ? 1 : 0)
-                                    + (sizeof (mask_t) >= 16? 1 : 0)
+                                    + (mask_bytes >= 1 ? 3 : 0)
+                                    + (mask_bytes >= 2 ? 1 : 0)
+                                    + (mask_bytes >= 4 ? 1 : 0)
+                                    + (mask_bytes >= 8 ? 1 : 0)
+                                    + (mask_bytes >= 16? 1 : 0)
                                     + 0;
 
   ASSERT_STATIC (shift < sizeof (hb_codepoint_t) * 8);
@@ -65,7 +67,7 @@
   }
 
   inline void add_range (hb_codepoint_t a, hb_codepoint_t b) {
-    if ((b >> shift) - (a >> shift) >= sizeof (mask_t) * 8 - 1)
+    if ((b >> shift) - (a >> shift) >= mask_bits - 1)
       mask = (mask_t) -1;
     else {
       mask_t ma = mask_for (a);
@@ -81,7 +83,7 @@
   private:
 
   static inline mask_t mask_for (hb_codepoint_t g) {
-    return ((mask_t) 1) << ((g >> shift) & (sizeof (mask_t) * 8 - 1));
+    return ((mask_t) 1) << ((g >> shift) & (mask_bits - 1));
   }
   mask_t mask;
 };
@@ -295,7 +297,7 @@
   {
     for (unsigned int i = 0; i < ELTS; i++)
       if (elts[i])
-       for (unsigned int j = 0; i < BITS; j++)
+       for (unsigned int j = 0; j < BITS; j++)
          if (elts[i] & (1 << j))
            return i * BITS + j;
     return SENTINEL;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-unicode-private.hh 
new/harfbuzz-0.9.17/src/hb-unicode-private.hh
--- old/harfbuzz-0.9.16/src/hb-unicode-private.hh       2013-03-19 
12:04:53.000000000 +0100
+++ new/harfbuzz-0.9.17/src/hb-unicode-private.hh       2013-05-04 
01:09:45.000000000 +0200
@@ -128,6 +128,9 @@
    * is NOT Default_Ignorable, but it really behaves in a way that it should
    * be.  That has been reported to the Unicode Technical Committee for
    * consideration.  As such, we include it here, since Uniscribe removes it.
+   * It *is* in Unicode 6.3 however.  U+061C ARABIC LETTER MARK from Unicode
+   * 6.3 is also added manually.  The new Unicode 6.3 bidi formatting
+   * characters are encoded in a block that was Default_Ignorable already.
    *
    * Note: While U+115F and U+1160 are Default_Ignorable, we do NOT want to
    * hide them, as the way Uniscribe has implemented them is with regular
@@ -173,6 +176,7 @@
       switch (page) {
        case 0x00: return unlikely (ch == 0x00AD);
        case 0x03: return unlikely (ch == 0x034F);
+       case 0x06: return unlikely (ch == 0x061C);
        case 0x17: return hb_in_range<hb_codepoint_t> (ch, 0x17B4, 0x17B5);
        case 0x18: return hb_in_range<hb_codepoint_t> (ch, 0x180B, 0x180E);
        case 0x20: return hb_in_ranges<hb_codepoint_t> (ch, 0x200B, 0x200F,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-version.h 
new/harfbuzz-0.9.17/src/hb-version.h
--- old/harfbuzz-0.9.16/src/hb-version.h        2013-04-19 22:24:07.000000000 
+0200
+++ new/harfbuzz-0.9.17/src/hb-version.h        2013-05-20 15:24:00.000000000 
+0200
@@ -38,9 +38,9 @@
 
 #define HB_VERSION_MAJOR 0
 #define HB_VERSION_MINOR 9
-#define HB_VERSION_MICRO 16
+#define HB_VERSION_MICRO 17
 
-#define HB_VERSION_STRING "0.9.16"
+#define HB_VERSION_STRING "0.9.17"
 
 #define HB_VERSION_CHECK(major,minor,micro) \
        ((major)*10000+(minor)*100+(micro) >= \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/harfbuzz-0.9.16/test/api/test-set.c 
new/harfbuzz-0.9.17/test/api/test-set.c
--- old/harfbuzz-0.9.16/test/api/test-set.c     2013-01-03 06:22:38.000000000 
+0100
+++ new/harfbuzz-0.9.17/test/api/test-set.c     2013-05-14 21:29:42.000000000 
+0200
@@ -64,6 +64,10 @@
   hb_set_clear (s);
   test_empty (s);
 
+  hb_set_add (s, 33000);
+  test_not_empty (s);
+  hb_set_clear (s);
+
   hb_set_add_range (s, 10, 29);
   test_not_empty (s);
   g_assert (hb_set_has (s, 13));

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to