diff --git a/src/hb-subset.cc b/src/hb-subset.cc index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cabae4c4b4e4686ff503abe547e722c3999a90eb 100644 --- a/src/hb-subset.cc +++ b/src/hb-subset.cc @@ -0,0 +1,146 @@ +/* + * Copyright © 2009 Red Hat, Inc. + * Copyright © 2012 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): Garret Rieger, Rod Sheeter + */ + +#include "hb-private.hh" + +#include "hb-object-private.hh" + + +struct hb_subset_profile_t { + hb_object_header_t header; + ASSERT_POD (); +}; + +struct hb_subset_input_t { + hb_object_header_t header; + ASSERT_POD (); +}; + +struct hb_subset_face_t { + hb_object_header_t header; + ASSERT_POD (); +}; + + +/** + * hb_subset_profile_create: + * + * Return value: New profile with default settings. + * + * Since: 1.7.5 + **/ +hb_subset_profile_t * +hb_subset_profile_create () +{ + return hb_object_create(); +} + +/** + * hb_subset_profile_destroy: + * + * Since: 1.7.5 + **/ +void +hb_subset_profile_destroy (hb_subset_profile_t *profile) +{ + if (!hb_object_destroy (profile)) return; + + free (profile); +} + +/** + * hb_subset_input_create: + * + * Return value: New subset input. + * + * Since: 1.7.5 + **/ +hb_subset_input_t * +hb_subset_input_create() +{ + return hb_object_create(); +} + +/** + * hb_subset_input_destroy: + * + * Since: 1.7.5 + **/ +void +hb_subset_input_destroy(hb_subset_input_t *subset_input) +{ + if (!hb_object_destroy (subset_input)) return; + + free (subset_input); +} + +/** + * hb_subset_face_create: + * + * Return value: New subset face. + * + * Since: 1.7.5 + **/ +hb_subset_face_t * +hb_subset_face_create(hb_face_t *face) +{ + return hb_object_create(); +} + +/** + * hb_subset_face_destroy: + * + * Since: 1.7.5 + **/ +void +hb_subset_face_destroy(hb_subset_face_t *face) +{ + if (!hb_object_destroy (face)) return; + + free (face); +} + +/** + * hb_subset: + * @profile: profile to use for the subsetting. + * @input: input to use for the subsetting. + * @face: font face data to be subset. + * @result: subsetting result. + * + * Subsets a font according to provided profile and input. + **/ +hb_bool_t +hb_subset(hb_subset_profile_t *profile, + hb_subset_input_t *input, + hb_subset_face_t *face, + hb_blob_t **result /* OUT */) +{ + if (!profile || !input || !face) return false; + + *result = hb_blob_get_empty(); + return true; +} diff --git a/src/hb-subset.h b/src/hb-subset.h index b7c1f569f8de0f6433b898df3eec66bcff44e48b..7ceac9a7d6a2ae156ef07aead632f7523914bc2d 100644 --- a/src/hb-subset.h +++ b/src/hb-subset.h @@ -38,7 +38,8 @@ HB_BEGIN_DECLS /* * hb_subset_profile_t - * Things that change based on target environment, e.g. OS + * Things that change based on target environment, e.g. OS. + * Threadsafe for multiple concurrent subset operations. */ typedef struct hb_subset_profile_t hb_subset_profile_t; @@ -81,7 +82,7 @@ HB_EXTERN hb_bool_t hb_subset(hb_subset_profile_t *profile, hb_subset_input_t *input, hb_subset_face_t *face, - hb_blob_t *result /* OUT */); + hb_blob_t **result /* OUT */); HB_END_DECLS diff --git a/test/api/Makefile.am b/test/api/Makefile.am index e22d726a8a030bf8813a127a10ff88fe65eac689..3a4eacaecec94f7e0d6b1ba09ab9eaea43c9bf15 100644 --- a/test/api/Makefile.am +++ b/test/api/Makefile.am @@ -29,6 +29,7 @@ TEST_PROGS = \ test-object \ test-set \ test-shape \ + test-subset \ test-unicode \ test-version \ $(NULL) diff --git a/test/api/test-subset.c b/test/api/test-subset.c index 85b302d72b49ad8424e422ec7c5149d1a80eb6ce..b6986ce2bfdd586fc02736adb5da97bcc3b65ac4 100644 --- a/test/api/test-subset.c +++ b/test/api/test-subset.c @@ -28,7 +28,7 @@ /* Unit tests for hb-subset.h */ -static const char test_data[] = "OTTO"; +static const char test_data[] = { 0, 0, 1, 0 }; static void test_subset (void) @@ -41,12 +41,12 @@ test_subset (void) hb_subset_input_t *input = hb_subset_input_create(); hb_subset_face_t *subset_face = hb_subset_face_create(face); - char output_data[100]; - hb_blob_t *output = hb_blob_create(output_data, sizeof(output_data), - HB_MEMORY_MODE_WRITABLE, NULL, NULL); + hb_blob_t *output; + g_assert(hb_subset(profile, input, subset_face, &output)); - g_assert(hb_subset(profile, input, subset_face, output)); - g_assert_cmpmem(test_data, 4, output_data, sizeof(output)); + unsigned int output_length; + const char *output_data = hb_blob_get_data(output, &output_length); + g_assert_cmpmem(test_data, 4, output_data, output_length); hb_blob_destroy(output); hb_subset_face_destroy(subset_face);