[HarfBuzz] harfbuzz-ng: Branch 'master' - 9 commits

Behdad Esfahbod behdad at kemper.freedesktop.org
Sat Apr 14 18:21:04 PDT 2012


 TODO                         |    8 +++++-
 src/hb-blob.h                |    2 -
 src/hb-common.cc             |    7 +++--
 src/hb-common.h              |   29 +++++++++++-----------
 src/hb-ot-layout-private.hh  |    2 -
 src/hb-ot-shape-normalize.cc |   11 ++++++--
 src/hb-ot-shape-private.hh   |   49 -------------------------------------
 src/hb-ot-shape.cc           |   56 +++++++++++++++++++++++++++++++++++++++----
 test/api/test-common.c       |   16 ++++++++++--
 9 files changed, 102 insertions(+), 78 deletions(-)

New commits:
commit 683b503f30bba29d57a93d7e8ac7138c2e7f49f1
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Sat Apr 14 20:47:14 2012 -0400

    Minor

diff --git a/src/hb-ot-shape-normalize.cc b/src/hb-ot-shape-normalize.cc
index f7b3547..b9834ca 100644
--- a/src/hb-ot-shape-normalize.cc
+++ b/src/hb-ot-shape-normalize.cc
@@ -68,12 +68,19 @@
  *     matra for the Indic shaper.
  */
 
+static inline void
+set_unicode_props (hb_glyph_info_t *info, hb_unicode_funcs_t *unicode)
+{
+  info->general_category() = hb_unicode_general_category (unicode, info->codepoint);
+  info->combining_class() = _hb_unicode_modified_combining_class (unicode, info->codepoint);
+}
+
 static void
 output_glyph (hb_font_t *font, hb_buffer_t *buffer,
 	      hb_codepoint_t glyph)
 {
   buffer->output_glyph (glyph);
-  hb_glyph_info_set_unicode_props (&buffer->out_info[buffer->out_len - 1], buffer->unicode);
+  set_unicode_props (&buffer->out_info[buffer->out_len - 1], buffer->unicode);
 }
 
 static bool
@@ -262,7 +269,7 @@ _hb_ot_shape_normalize (hb_font_t *font, hb_buffer_t *buffer,
     {
       /* Composes. Modify starter and carry on. */
       buffer->out_info[starter].codepoint = composed;
-      hb_glyph_info_set_unicode_props (&buffer->out_info[starter], buffer->unicode);
+      set_unicode_props (&buffer->out_info[starter], buffer->unicode);
 
       buffer->skip_glyph ();
       continue;
diff --git a/src/hb-ot-shape-private.hh b/src/hb-ot-shape-private.hh
index 8685ece..5fc69b1 100644
--- a/src/hb-ot-shape-private.hh
+++ b/src/hb-ot-shape-private.hh
@@ -47,19 +47,10 @@ struct hb_ot_shape_plan_t
 
 
 
-static inline void
-hb_glyph_info_set_unicode_props (hb_glyph_info_t *info, hb_unicode_funcs_t *unicode)
-{
-  info->general_category() = hb_unicode_general_category (unicode, info->codepoint);
-  info->combining_class() = _hb_unicode_modified_combining_class (unicode, info->codepoint);
-}
-
 HB_INTERNAL hb_bool_t
 _hb_ot_shape (hb_font_t          *font,
 	      hb_buffer_t        *buffer,
 	      const hb_feature_t *features,
 	      unsigned int        num_features);
 
-#include "hb-ot-shape-complex-private.hh"
-
 #endif /* HB_OT_SHAPE_PRIVATE_HH */
diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc
index f5f9fd3..d21559c 100644
--- a/src/hb-ot-shape.cc
+++ b/src/hb-ot-shape.cc
@@ -169,12 +169,19 @@ hb_ot_shape_setup_masks (hb_ot_shape_context_t *c)
 
 /* Prepare */
 
+static inline void
+set_unicode_props (hb_glyph_info_t *info, hb_unicode_funcs_t *unicode)
+{
+  info->general_category() = hb_unicode_general_category (unicode, info->codepoint);
+  info->combining_class() = _hb_unicode_modified_combining_class (unicode, info->codepoint);
+}
+
 static void
 hb_set_unicode_props (hb_buffer_t *buffer)
 {
   unsigned int count = buffer->len;
   for (unsigned int i = 0; i < count; i++)
-    hb_glyph_info_set_unicode_props (&buffer->info[i], buffer->unicode);
+    set_unicode_props (&buffer->info[i], buffer->unicode);
 }
 
 static void
commit b9f199c8e38cc5ed0d73845568630f3bcbdd4374
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Sat Apr 14 20:23:58 2012 -0400

    Move code around

diff --git a/src/hb-ot-shape-private.hh b/src/hb-ot-shape-private.hh
index 2ceb6f2..8685ece 100644
--- a/src/hb-ot-shape-private.hh
+++ b/src/hb-ot-shape-private.hh
@@ -31,13 +31,10 @@
 
 #include "hb-ot-map-private.hh"
 #include "hb-ot-shape-complex-private.hh"
-#include "hb-ot-shape-normalize-private.hh"
 
 
 struct hb_ot_shape_plan_t
 {
-  friend struct hb_ot_shape_planner_t;
-
   hb_ot_map_t map;
   hb_ot_complex_shaper_t shaper;
 
@@ -48,41 +45,6 @@ struct hb_ot_shape_plan_t
   NO_COPY (hb_ot_shape_plan_t);
 };
 
-struct hb_ot_shape_planner_t
-{
-  hb_ot_map_builder_t map;
-  hb_ot_complex_shaper_t shaper;
-
-  hb_ot_shape_planner_t (void) : map () {}
-  ~hb_ot_shape_planner_t (void) { map.finish (); }
-
-  inline void compile (hb_face_t *face,
-		       const hb_segment_properties_t *props,
-		       struct hb_ot_shape_plan_t &plan)
-  {
-    plan.shaper = shaper;
-    map.compile (face, props, plan.map);
-  }
-
-  private:
-  NO_COPY (hb_ot_shape_planner_t);
-};
-
-
-struct hb_ot_shape_context_t
-{
-  /* Input to hb_ot_shape_execute() */
-  hb_ot_shape_plan_t *plan;
-  hb_font_t *font;
-  hb_face_t *face;
-  hb_buffer_t  *buffer;
-  const hb_feature_t *user_features;
-  unsigned int        num_user_features;
-
-  /* Transient stuff */
-  hb_direction_t target_direction;
-  hb_bool_t applied_position_complex;
-};
 
 
 static inline void
@@ -92,8 +54,6 @@ hb_glyph_info_set_unicode_props (hb_glyph_info_t *info, hb_unicode_funcs_t *unic
   info->combining_class() = _hb_unicode_modified_combining_class (unicode, info->codepoint);
 }
 
-HB_INTERNAL void _hb_set_unicode_props (hb_buffer_t *buffer);
-
 HB_INTERNAL hb_bool_t
 _hb_ot_shape (hb_font_t          *font,
 	      hb_buffer_t        *buffer,
diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc
index 6960acf..f5f9fd3 100644
--- a/src/hb-ot-shape.cc
+++ b/src/hb-ot-shape.cc
@@ -27,7 +27,7 @@
  */
 
 #include "hb-ot-shape-private.hh"
-#include "hb-ot-shape-complex-private.hh"
+#include "hb-ot-shape-normalize-private.hh"
 
 #include "hb-font-private.hh"
 
@@ -62,6 +62,28 @@ hb_tag_t vertical_features[] = {
   HB_TAG('v','r','t','2'),
 };
 
+
+
+struct hb_ot_shape_planner_t
+{
+  hb_ot_map_builder_t map;
+  hb_ot_complex_shaper_t shaper;
+
+  hb_ot_shape_planner_t (void) : map () {}
+  ~hb_ot_shape_planner_t (void) { map.finish (); }
+
+  inline void compile (hb_face_t *face,
+		       const hb_segment_properties_t *props,
+		       struct hb_ot_shape_plan_t &plan)
+  {
+    plan.shaper = shaper;
+    map.compile (face, props, plan.map);
+  }
+
+  private:
+  NO_COPY (hb_ot_shape_planner_t);
+};
+
 static void
 hb_ot_shape_collect_features (hb_ot_shape_planner_t          *planner,
 			      const hb_segment_properties_t  *props,
@@ -108,6 +130,21 @@ hb_ot_shape_collect_features (hb_ot_shape_planner_t          *planner,
 }
 
 
+struct hb_ot_shape_context_t
+{
+  /* Input to hb_ot_shape_execute() */
+  hb_ot_shape_plan_t *plan;
+  hb_font_t *font;
+  hb_face_t *face;
+  hb_buffer_t  *buffer;
+  const hb_feature_t *user_features;
+  unsigned int        num_user_features;
+
+  /* Transient stuff */
+  hb_direction_t target_direction;
+  hb_bool_t applied_position_complex;
+};
+
 static void
 hb_ot_shape_setup_masks (hb_ot_shape_context_t *c)
 {
@@ -132,8 +169,8 @@ hb_ot_shape_setup_masks (hb_ot_shape_context_t *c)
 
 /* Prepare */
 
-void
-_hb_set_unicode_props (hb_buffer_t *buffer)
+static void
+hb_set_unicode_props (hb_buffer_t *buffer)
 {
   unsigned int count = buffer->len;
   for (unsigned int i = 0; i < count; i++)
@@ -349,7 +386,7 @@ hb_ot_shape_execute_internal (hb_ot_shape_context_t *c)
   HB_BUFFER_ALLOCATE_VAR (c->buffer, general_category);
   HB_BUFFER_ALLOCATE_VAR (c->buffer, combining_class);
 
-  _hb_set_unicode_props (c->buffer); /* BUFFER: Set general_category and combining_class */
+  hb_set_unicode_props (c->buffer); /* BUFFER: Set general_category and combining_class */
 
   hb_form_clusters (c->buffer);
 
commit 38a83019e6a7f4aa47662fd557344f62ae001abe
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Sat Apr 14 19:40:18 2012 -0400

    Minor

diff --git a/src/hb-common.h b/src/hb-common.h
index eefe984..562b04c 100644
--- a/src/hb-common.h
+++ b/src/hb-common.h
@@ -119,7 +119,7 @@ hb_direction_to_string (hb_direction_t direction);
 #define HB_DIRECTION_IS_FORWARD(dir)	((((unsigned int) (dir)) & ~2U) == 4)
 #define HB_DIRECTION_IS_BACKWARD(dir)	((((unsigned int) (dir)) & ~2U) == 5)
 #define HB_DIRECTION_IS_VALID(dir)	((((unsigned int) (dir)) & ~3U) == 4)
-#define HB_DIRECTION_REVERSE(dir)	((hb_direction_t) (((unsigned int) (dir)) ^ 1))
+#define HB_DIRECTION_REVERSE(dir)	((hb_direction_t) (((unsigned int) (dir)) ^ 1)) /* Direction must be valid */
 
 
 /* hb_language_t */
commit d4adade217a61007dd2da5cd9eccf889f79a019a
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Sat Apr 14 19:23:17 2012 -0400

    Add assert

diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc
index 4b20cb3..6960acf 100644
--- a/src/hb-ot-shape.cc
+++ b/src/hb-ot-shape.cc
@@ -400,6 +400,8 @@ hb_ot_shape_plan_internal (hb_ot_shape_plan_t       *plan,
 {
   hb_ot_shape_planner_t planner;
 
+  assert (HB_DIRECTION_IS_VALID (props->direction));
+
   planner.shaper = hb_ot_shape_complex_categorize (props);
 
   hb_ot_shape_collect_features (&planner, props, user_features, num_user_features);
commit fe28b997fbbeb2cfeab62ac453993ccffe3e6719
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Sat Apr 14 19:19:26 2012 -0400

    Add HB_DIRECTION_IS_VALID

diff --git a/src/hb-common.h b/src/hb-common.h
index 26c056b..eefe984 100644
--- a/src/hb-common.h
+++ b/src/hb-common.h
@@ -118,6 +118,7 @@ hb_direction_to_string (hb_direction_t direction);
 #define HB_DIRECTION_IS_VERTICAL(dir)	((((unsigned int) (dir)) & ~1U) == 6)
 #define HB_DIRECTION_IS_FORWARD(dir)	((((unsigned int) (dir)) & ~2U) == 4)
 #define HB_DIRECTION_IS_BACKWARD(dir)	((((unsigned int) (dir)) & ~2U) == 5)
+#define HB_DIRECTION_IS_VALID(dir)	((((unsigned int) (dir)) & ~3U) == 4)
 #define HB_DIRECTION_REVERSE(dir)	((hb_direction_t) (((unsigned int) (dir)) ^ 1))
 
 
diff --git a/test/api/test-common.c b/test/api/test-common.c
index 7441d09..74b50be 100644
--- a/test/api/test-common.c
+++ b/test/api/test-common.c
@@ -78,6 +78,13 @@ test_types_direction (void)
   g_assert (HB_DIRECTION_IS_BACKWARD (HB_DIRECTION_BTT));
   g_assert (!HB_DIRECTION_IS_BACKWARD (HB_DIRECTION_INVALID));
 
+  g_assert (HB_DIRECTION_IS_VALID (HB_DIRECTION_LTR));
+  g_assert (HB_DIRECTION_IS_VALID (HB_DIRECTION_TTB));
+  g_assert (HB_DIRECTION_IS_VALID (HB_DIRECTION_RTL));
+  g_assert (HB_DIRECTION_IS_VALID (HB_DIRECTION_BTT));
+  g_assert (!HB_DIRECTION_IS_VALID (HB_DIRECTION_INVALID));
+  g_assert (!HB_DIRECTION_IS_VALID ((hb_direction_t) 0x12345678));
+
   g_assert_cmpint (HB_DIRECTION_REVERSE (HB_DIRECTION_LTR), ==, HB_DIRECTION_RTL);
   g_assert_cmpint (HB_DIRECTION_REVERSE (HB_DIRECTION_RTL), ==, HB_DIRECTION_LTR);
   g_assert_cmpint (HB_DIRECTION_REVERSE (HB_DIRECTION_TTB), ==, HB_DIRECTION_BTT);
commit 5e88aa66822ba64324b4428c9ffbe06a43b4f310
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Sat Apr 14 18:51:50 2012 -0400

    Remove public enum names again
    
    As was reported to me, glib-mkenum does not understand named enums,
    so remove for now.

diff --git a/src/hb-blob.h b/src/hb-blob.h
index d47cc90..360310b 100644
--- a/src/hb-blob.h
+++ b/src/hb-blob.h
@@ -36,7 +36,7 @@
 HB_BEGIN_DECLS
 
 
-typedef enum _hb_memory_mode_t {
+typedef enum {
   HB_MEMORY_MODE_DUPLICATE,
   HB_MEMORY_MODE_READONLY,
   HB_MEMORY_MODE_WRITABLE,
diff --git a/src/hb-common.h b/src/hb-common.h
index 5d9015d..26c056b 100644
--- a/src/hb-common.h
+++ b/src/hb-common.h
@@ -99,7 +99,7 @@ hb_tag_t hb_tag_from_string (const char *str, int len);
 
 /* hb_direction_t */
 
-typedef enum _hb_direction_t {
+typedef enum {
   HB_DIRECTION_INVALID = 0,
   HB_DIRECTION_LTR = 4,
   HB_DIRECTION_RTL,
@@ -140,7 +140,7 @@ hb_language_get_default (void);
 
 /* hb_unicode_general_category_t */
 
-typedef enum _hb_unicode_general_category_t
+typedef enum
 {
   HB_UNICODE_GENERAL_CATEGORY_CONTROL,			/* Cc */
   HB_UNICODE_GENERAL_CATEGORY_FORMAT,			/* Cf */
@@ -179,7 +179,7 @@ typedef enum _hb_unicode_general_category_t
 
 /* http://unicode.org/iso15924/ */
 /* http://goo.gl/x9ilM */
-typedef enum _hb_script_t
+typedef enum
 {
   /* Unicode-1.1 additions */
   HB_SCRIPT_COMMON			= HB_TAG ('Z','y','y','y'),
diff --git a/src/hb-ot-layout-private.hh b/src/hb-ot-layout-private.hh
index 943fba1..bf7e43b 100644
--- a/src/hb-ot-layout-private.hh
+++ b/src/hb-ot-layout-private.hh
@@ -44,7 +44,7 @@
 #define props_cache() var1.u16[1] /* glyph_props cache */
 
 /* XXX cleanup */
-typedef enum _hb_ot_layout_glyph_class_t {
+typedef enum {
   HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED	= 0x0001,
   HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH	= 0x0002,
   HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE	= 0x0004,
commit 08569c0eaab026c7122c0dc29922cf44011c4d10
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Sat Apr 14 18:47:07 2012 -0400

    Minor

diff --git a/TODO b/TODO
index fbc9b0d..b0eac7a 100644
--- a/TODO
+++ b/TODO
@@ -80,6 +80,8 @@ Tests to write:
 
 - Finish test-unicode.c, grep for TODO
 
+- GObject, FreeType, etc
+
 
 Optimizations:
 =============
commit 4bf90f648313e35d21b427a956aa1fe762bae757
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Thu Apr 12 17:38:23 2012 -0400

    Make HB_DIRECTION_INVALID be zero
    
    This changes all the HB_DIRECTION_* enum member values, but is
    nicer, in preparation for making hb_segment_properties_t public.

diff --git a/src/hb-common.cc b/src/hb-common.cc
index 8737934..bfbba65 100644
--- a/src/hb-common.cc
+++ b/src/hb-common.cc
@@ -80,7 +80,7 @@ hb_direction_from_string (const char *str, int len)
   char c = TOLOWER (str[0]);
   for (unsigned int i = 0; i < ARRAY_LENGTH (direction_strings); i++)
     if (c == direction_strings[i][0])
-      return (hb_direction_t) i;
+      return (hb_direction_t) (HB_DIRECTION_LTR + i);
 
   return HB_DIRECTION_INVALID;
 }
@@ -88,8 +88,9 @@ hb_direction_from_string (const char *str, int len)
 const char *
 hb_direction_to_string (hb_direction_t direction)
 {
-  if (likely ((unsigned int) direction < ARRAY_LENGTH (direction_strings)))
-    return direction_strings[direction];
+  if (likely ((unsigned int) (direction - HB_DIRECTION_LTR)
+	      < ARRAY_LENGTH (direction_strings)))
+    return direction_strings[direction - HB_DIRECTION_LTR];
 
   return "invalid";
 }
diff --git a/src/hb-common.h b/src/hb-common.h
index dd86334..5d9015d 100644
--- a/src/hb-common.h
+++ b/src/hb-common.h
@@ -93,31 +93,31 @@ typedef uint32_t hb_tag_t;
 
 #define HB_TAG_NONE HB_TAG(0,0,0,0)
 
-/* len=-1 means s is NUL-terminated */
-hb_tag_t hb_tag_from_string (const char *s, int len);
+/* len=-1 means str is NUL-terminated */
+hb_tag_t hb_tag_from_string (const char *str, int len);
 
 
 /* hb_direction_t */
 
 typedef enum _hb_direction_t {
-  HB_DIRECTION_INVALID = -1,
-  HB_DIRECTION_LTR = 0,
+  HB_DIRECTION_INVALID = 0,
+  HB_DIRECTION_LTR = 4,
   HB_DIRECTION_RTL,
   HB_DIRECTION_TTB,
   HB_DIRECTION_BTT
 } hb_direction_t;
 
-/* len=-1 means s is NUL-terminated */
+/* len=-1 means str is NUL-terminated */
 hb_direction_t
 hb_direction_from_string (const char *str, int len);
 
 const char *
 hb_direction_to_string (hb_direction_t direction);
 
-#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 0)
-#define HB_DIRECTION_IS_VERTICAL(dir)	((((unsigned int) (dir)) & ~1U) == 2)
-#define HB_DIRECTION_IS_FORWARD(dir)	((((unsigned int) (dir)) & ~2U) == 0)
-#define HB_DIRECTION_IS_BACKWARD(dir)	((((unsigned int) (dir)) & ~2U) == 1)
+#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
+#define HB_DIRECTION_IS_VERTICAL(dir)	((((unsigned int) (dir)) & ~1U) == 6)
+#define HB_DIRECTION_IS_FORWARD(dir)	((((unsigned int) (dir)) & ~2U) == 4)
+#define HB_DIRECTION_IS_BACKWARD(dir)	((((unsigned int) (dir)) & ~2U) == 5)
 #define HB_DIRECTION_REVERSE(dir)	((hb_direction_t) (((unsigned int) (dir)) ^ 1))
 
 
@@ -125,7 +125,7 @@ hb_direction_to_string (hb_direction_t direction);
 
 typedef struct _hb_language_t *hb_language_t;
 
-/* len=-1 means s is NUL-terminated */
+/* len=-1 means str is NUL-terminated */
 hb_language_t
 hb_language_from_string (const char *str, int len);
 
diff --git a/test/api/test-common.c b/test/api/test-common.c
index e00e601..7441d09 100644
--- a/test/api/test-common.c
+++ b/test/api/test-common.c
@@ -51,33 +51,38 @@ test_types_int (void)
 static void
 test_types_direction (void)
 {
-  g_assert_cmpint ((signed) HB_DIRECTION_INVALID, ==, -1);
-  g_assert_cmpint (HB_DIRECTION_LTR, ==, 0);
+  g_assert_cmpint ((signed) HB_DIRECTION_INVALID, ==, 0);
+  g_assert_cmpint (HB_DIRECTION_LTR, !=, 0);
 
   g_assert (HB_DIRECTION_IS_HORIZONTAL (HB_DIRECTION_LTR));
   g_assert (HB_DIRECTION_IS_HORIZONTAL (HB_DIRECTION_RTL));
   g_assert (!HB_DIRECTION_IS_HORIZONTAL (HB_DIRECTION_TTB));
   g_assert (!HB_DIRECTION_IS_HORIZONTAL (HB_DIRECTION_BTT));
+  g_assert (!HB_DIRECTION_IS_HORIZONTAL (HB_DIRECTION_INVALID));
 
   g_assert (!HB_DIRECTION_IS_VERTICAL (HB_DIRECTION_LTR));
   g_assert (!HB_DIRECTION_IS_VERTICAL (HB_DIRECTION_RTL));
   g_assert (HB_DIRECTION_IS_VERTICAL (HB_DIRECTION_TTB));
   g_assert (HB_DIRECTION_IS_VERTICAL (HB_DIRECTION_BTT));
+  g_assert (!HB_DIRECTION_IS_VERTICAL (HB_DIRECTION_INVALID));
 
   g_assert (HB_DIRECTION_IS_FORWARD (HB_DIRECTION_LTR));
   g_assert (HB_DIRECTION_IS_FORWARD (HB_DIRECTION_TTB));
   g_assert (!HB_DIRECTION_IS_FORWARD (HB_DIRECTION_RTL));
   g_assert (!HB_DIRECTION_IS_FORWARD (HB_DIRECTION_BTT));
+  g_assert (!HB_DIRECTION_IS_FORWARD (HB_DIRECTION_INVALID));
 
   g_assert (!HB_DIRECTION_IS_BACKWARD (HB_DIRECTION_LTR));
   g_assert (!HB_DIRECTION_IS_BACKWARD (HB_DIRECTION_TTB));
   g_assert (HB_DIRECTION_IS_BACKWARD (HB_DIRECTION_RTL));
   g_assert (HB_DIRECTION_IS_BACKWARD (HB_DIRECTION_BTT));
+  g_assert (!HB_DIRECTION_IS_BACKWARD (HB_DIRECTION_INVALID));
 
   g_assert_cmpint (HB_DIRECTION_REVERSE (HB_DIRECTION_LTR), ==, HB_DIRECTION_RTL);
   g_assert_cmpint (HB_DIRECTION_REVERSE (HB_DIRECTION_RTL), ==, HB_DIRECTION_LTR);
   g_assert_cmpint (HB_DIRECTION_REVERSE (HB_DIRECTION_TTB), ==, HB_DIRECTION_BTT);
   g_assert_cmpint (HB_DIRECTION_REVERSE (HB_DIRECTION_BTT), ==, HB_DIRECTION_TTB);
+  //g_assert_cmpint (HB_DIRECTION_REVERSE (HB_DIRECTION_INVALID), ==, HB_DIRECTION_INVALID);
 
   g_assert_cmpint (HB_DIRECTION_INVALID, ==, hb_direction_from_string (NULL, -1));
   g_assert_cmpint (HB_DIRECTION_INVALID, ==, hb_direction_from_string ("", -1));
commit d01402da9c756f90a84bfb1f964fd56caf2b35c3
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Thu Apr 12 17:38:02 2012 -0400

    Minor

diff --git a/TODO b/TODO
index a1ee9a8..fbc9b0d 100644
--- a/TODO
+++ b/TODO
@@ -1,7 +1,9 @@
 General fixes:
 =============
 
-- Fix TT 'kern' on/off and GPOS interaction (move kerning before GPOS)
+- In hb_shape(), assert if direction is INVALID.
+
+- Fix TT 'kern' on/off and GPOS interaction (move kerning before GPOS).
 
 - Do proper rounding when scaling from font space?  May be a non-issue.
 
@@ -31,6 +33,7 @@ API issues to fix before 1.0:
 API additions
 =============
 
+- Buffer (de)serialize API ala hb-shape?
 - Move feature parsing from util into the library
 
 - Add hb-cairo glue
@@ -65,6 +68,7 @@ hb-view / hb-shape enhancements:
 
 - Add --width, --height, --auto-size, --align, etc?
 - Add XML and JSON formats to hb-shape
+- --features="init=medi=isol=fina=0"
 
 
 Tests to write:



More information about the HarfBuzz mailing list