From: Behdad Esfahbod Date: Fri, 5 Aug 2011 23:48:49 +0000 (-0400) Subject: Add hb_shape_list_shapers() X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9da554504e30a326fc57b28cdb0e57108bfa9555;p=platform%2Fupstream%2FlibHarfBuzzSharp.git Add hb_shape_list_shapers() --- diff --git a/src/hb-shape.cc b/src/hb-shape.cc index 9e4469d..78c39dd 100644 --- a/src/hb-shape.cc +++ b/src/hb-shape.cc @@ -66,8 +66,16 @@ static struct static_shaper_list_t { char *env = getenv ("HB_SHAPER_LIST"); shaper_list = NULL; - if (!env || !*env) + if (!env || !*env) { + fallback: + ASSERT_STATIC ((ARRAY_LENGTH (shapers) + 1) * sizeof (*shaper_list) <= sizeof (static_buffer)); + shaper_list = (const char **) static_buffer; + unsigned int i; + for (i = 0; i < ARRAY_LENGTH (shapers); i++) + shaper_list[i] = shapers[i].name; + shaper_list[i] = NULL; return; + } unsigned int count = 3; /* initial, fallback, null */ for (const char *p = env; (p == strchr (p, ',')) && p++; ) @@ -76,7 +84,7 @@ static struct static_shaper_list_t unsigned int len = strlen (env); if (count > 100 || len > 1000) - return; + goto fallback; len += count * sizeof (*shaper_list) + 1; char *buffer = len < sizeof (static_buffer) ? static_buffer : (char *) malloc (len); @@ -100,7 +108,13 @@ static struct static_shaper_list_t const char **shaper_list; char static_buffer[32]; -} env_shaper_list; +} static_shaper_list; + +const char ** +hb_shape_list_shapers (void) +{ + return static_shaper_list.shaper_list; +} hb_bool_t hb_shape_full (hb_font_t *font, @@ -111,7 +125,7 @@ hb_shape_full (hb_font_t *font, const char **shaper_list) { if (likely (!shaper_list)) - shaper_list = env_shaper_list.shaper_list; + shaper_list = static_shaper_list.shaper_list; if (likely (!shaper_list)) { for (unsigned int i = 0; i < ARRAY_LENGTH (shapers); i++) diff --git a/src/hb-shape.h b/src/hb-shape.h index 75818dc..18b35ae 100644 --- a/src/hb-shape.h +++ b/src/hb-shape.h @@ -56,6 +56,9 @@ hb_shape_full (hb_font_t *font, const char *shaper_options, const char **shaper_list); +const char ** +hb_shape_list_shapers (void); + HB_END_DECLS diff --git a/test/Makefile.am b/test/Makefile.am index 0fbc689..18f36df 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -25,9 +25,11 @@ TEST_PROGS = \ test-version \ $(NULL) +if HAVE_OT TEST_PROGS += \ test-ot-tag \ $(NULL) +endif # Tests for header compilation TEST_PROGS += \ diff --git a/test/test-c.c b/test/test-c.c index 543fa7b..e72db27 100644 --- a/test/test-c.c +++ b/test/test-c.c @@ -43,6 +43,14 @@ #include #endif +#if HAVE_OT +#include +#endif + +#if HAVE_UNISCRIBE +#include +#endif + int main (int argc, char **argv) { diff --git a/test/test-shape.c b/test/test-shape.c index 5a41f0c..6d30824 100644 --- a/test/test-shape.c +++ b/test/test-shape.c @@ -138,6 +138,18 @@ test_shape (void) hb_font_destroy (font); } +static void +test_shape_list (void) +{ + const char **shapers = hb_shape_list_shapers (); + + unsigned int i; + for (i = 0; shapers[i]; i++) + ; + + g_assert_cmpint (i, >, 1); + g_assert (!strcmp (shapers[i - 1], "fallback")); +} int main (int argc, char **argv) @@ -145,6 +157,9 @@ main (int argc, char **argv) hb_test_init (&argc, &argv); hb_test_add (test_shape); + /* TODO test fallback shaper */ + /* TODO test shaper_full */ + hb_test_add (test_shape_list); return hb_test_run(); }