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

Behdad Esfahbod behdad at kemper.freedesktop.org
Wed May 11 11:33:45 PDT 2011


 TODO                        |    4 +-
 src/Makefile.am             |    3 +
 src/hb-blob.cc              |    2 -
 src/hb-open-type-private.hh |    8 ++---
 src/hb-ot-head-private.hh   |    1 
 src/hb-ot-layout.cc         |    1 
 src/hb-ot-map-private.hh    |    7 ++++
 src/hb-ot-maxp-private.hh   |   68 ++++++++++++++++++++++++++++++++++++++++++++
 src/hb-ot-shape-private.hh  |    2 +
 src/hb-ot-shape.cc          |    2 +
 src/hb-private.hh           |   10 +++++-
 src/hb-unicode.cc           |    6 ---
 test/test-unicode.c         |    6 +++
 13 files changed, 105 insertions(+), 15 deletions(-)

New commits:
commit 4101ca7dbbdf1438fa116fb8cad935501ac7cca8
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Wed May 11 14:30:56 2011 -0400

    Plug more leaks
    
    All good now.

diff --git a/src/hb-blob.cc b/src/hb-blob.cc
index cdb7496..17ff339 100644
--- a/src/hb-blob.cc
+++ b/src/hb-blob.cc
@@ -126,7 +126,7 @@ hb_blob_create_sub_blob (hb_blob_t    *parent,
 {
   hb_blob_t *blob;
 
-  if (!length || offset >= parent->length || !(blob = hb_object_create<hb_blob_t> ()))
+  if (!length || offset >= parent->length)
     return &_hb_blob_nil;
 
   hb_blob_make_immutable (parent);
diff --git a/src/hb-open-type-private.hh b/src/hb-open-type-private.hh
index e16eddd..4aa47ec 100644
--- a/src/hb-open-type-private.hh
+++ b/src/hb-open-type-private.hh
@@ -191,8 +191,8 @@ struct hb_sanitize_context_t
 
   inline void setup (void)
   {
-    this->start = hb_blob_get_data (blob, NULL);
-    this->end = this->start + hb_blob_get_length (blob);
+    this->start = hb_blob_get_data (this->blob, NULL);
+    this->end = this->start + hb_blob_get_length (this->blob);
     this->edit_count = 0;
     this->debug_depth = 0;
 
@@ -321,10 +321,8 @@ struct Sanitizer
 	  sane = false;
 	}
       }
-      c->finish ();
     } else {
       unsigned int edit_count = c->edit_count;
-      c->finish ();
       if (edit_count && !c->writable) {
         c->start = hb_blob_get_data_writable (blob, NULL);
 	c->end = c->start + hb_blob_get_length (blob);
@@ -339,6 +337,8 @@ struct Sanitizer
       }
     }
 
+    c->finish ();
+
     (void) (HB_DEBUG_SANITIZE &&
       fprintf (stderr, "Sanitizer %p %s %s\n", blob, sane ? "passed" : "FAILED", HB_FUNC));
     if (sane)
commit 6a7ac79e26e85f6781186cf708a12825c0857324
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Wed May 11 14:19:18 2011 -0400

    Plug leaks

diff --git a/src/hb-ot-map-private.hh b/src/hb-ot-map-private.hh
index 2a74138..02f5a91 100644
--- a/src/hb-ot-map-private.hh
+++ b/src/hb-ot-map-private.hh
@@ -120,6 +120,13 @@ struct hb_ot_map_t {
       hb_ot_layout_position_lookup (font, buffer, lookup_maps[1][i].index, lookup_maps[1][i].mask);
   }
 
+  inline void finish (void) {
+    feature_infos.finish ();
+    feature_maps.finish ();
+    lookup_maps[0].finish ();
+    lookup_maps[1].finish ();
+  }
+
   private:
 
   hb_mask_t global_mask;
diff --git a/src/hb-ot-shape-private.hh b/src/hb-ot-shape-private.hh
index c0faf8c..b95815a 100644
--- a/src/hb-ot-shape-private.hh
+++ b/src/hb-ot-shape-private.hh
@@ -51,6 +51,8 @@ struct hb_ot_shape_plan_t
 {
   hb_ot_map_t map;
   hb_ot_complex_shaper_t shaper;
+
+  inline void finish (void) { map.finish (); }
 };
 
 
diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc
index 4f90027..aa5b920 100644
--- a/src/hb-ot-shape.cc
+++ b/src/hb-ot-shape.cc
@@ -381,6 +381,8 @@ hb_ot_shape (hb_font_t          *font,
 
   hb_ot_shape_plan_internal (&plan, font->face, &buffer->props, features, num_features);
   hb_ot_shape_execute (&plan, font, buffer, features, num_features);
+
+  plan.finish ();
 }
 
 
diff --git a/src/hb-private.hh b/src/hb-private.hh
index f22e0d2..215ef96 100644
--- a/src/hb-private.hh
+++ b/src/hb-private.hh
@@ -313,6 +313,14 @@ struct hb_prealloced_array_t {
   {
     return (const Type *) ::bsearch (key, array, len, sizeof (Type), (hb_compare_func_t) Type::cmp);
   }
+
+  inline void finish (void)
+  {
+    if (array != static_array)
+      free (array);
+    array = NULL;
+    allocated = len = 0;
+  }
 };
 
 template <typename Type>
@@ -394,7 +402,7 @@ struct hb_lockable_set_t
 	old.finish ();
 	l.lock ();
     }
-    items.shrink (0);
+    items.finish ();
     l.unlock ();
   }
 
commit 7aa12ebdff11a4ffbd04bf9b164586eb0c172e37
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Wed May 11 11:55:11 2011 -0400

    [unicode] Simplify method setting

diff --git a/src/hb-unicode.cc b/src/hb-unicode.cc
index 62cbcdc..943d7a7 100644
--- a/src/hb-unicode.cc
+++ b/src/hb-unicode.cc
@@ -206,14 +206,10 @@ hb_unicode_funcs_set_##name##_func (hb_unicode_funcs_t             *ufuncs,    \
     ufuncs->get.name = func;                                                   \
     ufuncs->user_data.name = user_data;                                        \
     ufuncs->destroy.name = destroy;                                            \
-  } else if (ufuncs->parent != NULL) {                                         \
+  } else {                                                                     \
     ufuncs->get.name = ufuncs->parent->get.name;                               \
     ufuncs->user_data.name = ufuncs->parent->user_data.name;                   \
     ufuncs->destroy.name = NULL;                                               \
-  } else {                                                                     \
-    ufuncs->get.name = hb_unicode_get_##name##_nil;                            \
-    ufuncs->user_data.name = NULL;                                             \
-    ufuncs->destroy.name = NULL;                                               \
   }                                                                            \
 }                                                                              \
                                                                                \
diff --git a/test/test-unicode.c b/test/test-unicode.c
index c730aed..f5aae10 100644
--- a/test/test-unicode.c
+++ b/test/test-unicode.c
@@ -482,6 +482,7 @@ test_unicode_properties (gconstpointer user_data)
   gboolean failed = TRUE;
 
   g_assert (hb_unicode_funcs_is_immutable (uf));
+  g_assert (hb_unicode_funcs_get_parent (uf));
 
   for (i = 0; i < G_N_ELEMENTS (properties); i++) {
     const property_t *p = &properties[i];
@@ -609,6 +610,9 @@ test_unicode_setters (void)
     g_assert_cmphex (p->getter (uf, 'a'), ==, HB_SCRIPT_LATIN);
     g_assert_cmphex (p->getter (uf, '0'), ==, HB_SCRIPT_UNKNOWN);
 
+    p->func_setter (uf, (get_func_t) NULL, NULL, NULL);
+    g_assert (data[0].freed && !data[1].freed);
+
     g_assert (!hb_unicode_funcs_is_immutable (uf));
     hb_unicode_funcs_make_immutable (uf);
     g_assert (hb_unicode_funcs_is_immutable (uf));
@@ -616,7 +620,7 @@ test_unicode_setters (void)
     /* Since uf is immutable now, the following setter should do nothing. */
     p->func_setter (uf, (get_func_t) a_is_for_arabic_get_script, &data[1], free_up);
 
-    g_assert (!data[0].freed && !data[1].freed);
+    g_assert (data[0].freed && !data[1].freed);
     hb_unicode_funcs_destroy (uf);
     g_assert (data[0].freed && !data[1].freed);
 
commit d5bfd0272130a315d3b5e6cdcf9b7e6395879204
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Wed May 11 11:48:28 2011 -0400

    Minor

diff --git a/src/Makefile.am b/src/Makefile.am
index 6115d6e..1427340 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -66,7 +66,7 @@ HBHEADERS += \
 	hb-ot-tag.h \
 	$(NULL)
 
-MAINTAINERCLEANFILES = \
+MAINTAINERCLEANFILES += \
 	$(srcdir)/hb-version.h \
 	$(NULL)
 
commit 6a4e7e1372ef9fde81b84ecc9c4d1f23d97396c1
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Wed May 11 10:31:33 2011 -0400

    Add maxp table
    
    Not used for anything right now.  Will use to get num_glyphs in the future.

diff --git a/src/Makefile.am b/src/Makefile.am
index 73ac547..6115d6e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -25,6 +25,7 @@ HBSOURCES =  \
 	hb-open-file-private.hh \
 	hb-open-type-private.hh \
 	hb-ot-head-private.hh \
+	hb-ot-maxp-private.hh \
 	hb-private.hh \
 	hb-shape.cc \
 	hb-unicode-private.hh \
diff --git a/src/hb-ot-head-private.hh b/src/hb-ot-head-private.hh
index 45015ca..436666f 100644
--- a/src/hb-ot-head-private.hh
+++ b/src/hb-ot-head-private.hh
@@ -50,7 +50,6 @@ struct head
 
   inline bool sanitize (hb_sanitize_context_t *c) {
     TRACE_SANITIZE ();
-    /* Shall we check for magicNumber here?  Who cares? */
     return c->check_struct (this) && likely (version.major == 1);
   }
 
diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc
index 4f26e11..8398bba 100644
--- a/src/hb-ot-layout.cc
+++ b/src/hb-ot-layout.cc
@@ -34,6 +34,7 @@
 #include "hb-ot-layout-gsub-private.hh"
 #include "hb-ot-layout-gpos-private.hh"
 #include "hb-ot-head-private.hh"
+#include "hb-ot-maxp-private.hh"
 
 
 #include <stdlib.h>
diff --git a/src/hb-ot-maxp-private.hh b/src/hb-ot-maxp-private.hh
new file mode 100644
index 0000000..fa2cb26
--- /dev/null
+++ b/src/hb-ot-maxp-private.hh
@@ -0,0 +1,68 @@
+/*
+ * Copyright © 2011  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_MAXP_PRIVATE_HH
+#define HB_OT_MAXP_PRIVATE_HH
+
+#include "hb-open-type-private.hh"
+
+HB_BEGIN_DECLS
+
+
+/*
+ * maxp
+ */
+
+#define HB_OT_TAG_maxp HB_TAG('m','a','x','p')
+
+struct maxp
+{
+  static const hb_tag_t Tag	= HB_OT_TAG_maxp;
+
+  inline unsigned int get_num_glyphs (void) const {
+    return numGlyphs;
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c) {
+    TRACE_SANITIZE ();
+    return c->check_struct (this) &&
+	   likely (version.major == 1 ||
+		   (version.major == 0 && version.minor == 0x5000));
+  }
+
+  /* We only implement version 0.5 as none of the extra fields in version 1.0 are useful. */
+  private:
+  FixedVersion	version;		/* Version of the maxp table (0.5 or 1.0),
+					 * 0x00005000 or 0x00010000. */
+  USHORT	numGlyphs;		/* The number of glyphs in the font. */
+  public:
+  DEFINE_SIZE_STATIC (6);
+};
+
+
+HB_END_DECLS
+
+#endif /* HB_OT_MAXP_PRIVATE_HH */
commit e0b0710ae52bcc8c6fbd87dfae83818faa5d5f5f
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Wed May 11 08:58:21 2011 -0400

    Minor

diff --git a/TODO b/TODO
index 298730f..16a2199 100644
--- a/TODO
+++ b/TODO
@@ -3,7 +3,9 @@ General fixes:
 
 - Instead of forming clusters immediately, only do it if we are reversing
   the text.  We'd need a separate bit to indicate cluster start then.
-  Right now, BTW, for non-native direction runs, we get the cluster wrong...
+
+- Right now, BTW, for non-native direction runs, we get the cluster wrong...
+  Should do min(input-glyphs.cluster)
 
 - Fix tt kern on/off and GPOS interaction
 



More information about the HarfBuzz mailing list