diff --git a/src/hb-ot-var-hvar-table.hh b/src/hb-ot-var-hvar-table.hh index e349e7a52..77d96b7cf 100644 --- a/src/hb-ot-var-hvar-table.hh +++ b/src/hb-ot-var-hvar-table.hh @@ -170,7 +170,7 @@ struct index_map_subset_plan_t last_gid = gid; } - map_count = last_gid + 1; + map_count = last_gid; for (gid = 0; gid < map_count; gid++) { hb_codepoint_t old_gid; diff --git a/test/api/test-subset-hvar.c b/test/api/test-subset-hvar.c index 0cc0a17e7..3326e6db1 100644 --- a/test/api/test-subset-hvar.c +++ b/test/api/test-subset-hvar.c @@ -30,7 +30,68 @@ /* Unit tests for HVAR subsetting */ static void -test_subset_HVAR_noop (void) +test_subset_map_HVAR_noop (void) +{ + hb_face_t *face_abc = hb_test_open_font_file("fonts/AdobeVFPrototype.abc.otf"); + + hb_set_t *codepoints = hb_set_create (); + hb_face_t *face_abc_subset; + hb_set_add (codepoints, 'a'); + hb_set_add (codepoints, 'b'); + hb_set_add (codepoints, 'c'); + face_abc_subset = hb_subset_test_create_subset (face_abc, hb_subset_test_create_input (codepoints)); + hb_set_destroy (codepoints); + + hb_subset_test_check (face_abc, face_abc_subset, HB_TAG ('H','V','A','R')); + + hb_face_destroy (face_abc_subset); + hb_face_destroy (face_abc); +} + +static void +test_subset_map_HVAR (void) +{ + hb_face_t *face_abc = hb_test_open_font_file ("fonts/AdobeVFPrototype.abc.otf"); + hb_face_t *face_ac = hb_test_open_font_file ("fonts/AdobeVFPrototype.ac.otf"); + + hb_set_t *codepoints = hb_set_create (); + hb_face_t *face_abc_subset; + hb_set_add (codepoints, 'a'); + hb_set_add (codepoints, 'c'); + face_abc_subset = hb_subset_test_create_subset (face_abc, hb_subset_test_create_input (codepoints)); + hb_set_destroy (codepoints); + + hb_subset_test_check (face_ac, face_abc_subset, HB_TAG ('H','V','A','R')); + + hb_face_destroy (face_abc_subset); + hb_face_destroy (face_abc); + hb_face_destroy (face_ac); +} + +static void +test_subset_map_HVAR_retaingids (void) +{ + hb_face_t *face_abc = hb_test_open_font_file ("fonts/AdobeVFPrototype.abc.otf"); + hb_face_t *face_ac = hb_test_open_font_file ("fonts/AdobeVFPrototype.ac.retaingids.otf"); + + hb_set_t *codepoints = hb_set_create (); + hb_face_t *face_abc_subset; + hb_set_add (codepoints, 'a'); + hb_set_add (codepoints, 'c'); + hb_subset_input_t *input = hb_subset_test_create_input (codepoints); + hb_subset_input_set_retain_gids (input, true); + face_abc_subset = hb_subset_test_create_subset (face_abc, input); + hb_set_destroy (codepoints); + + hb_subset_test_check (face_ac, face_abc_subset, HB_TAG ('H','V','A','R')); + + hb_face_destroy (face_abc_subset); + hb_face_destroy (face_abc); + hb_face_destroy (face_ac); +} + +static void +test_subset_identity_HVAR_noop (void) { hb_face_t *face_abc = hb_test_open_font_file("fonts/SourceSansVariable-Roman.abc.ttf"); @@ -49,7 +110,7 @@ test_subset_HVAR_noop (void) } static void -test_subset_HVAR (void) +test_subset_identity_HVAR (void) { hb_face_t *face_abc = hb_test_open_font_file ("fonts/SourceSansVariable-Roman.abc.ttf"); hb_face_t *face_ac = hb_test_open_font_file ("fonts/SourceSansVariable-Roman.ac.ttf"); @@ -69,7 +130,7 @@ test_subset_HVAR (void) } static void -test_subset_HVAR_retaingids (void) +test_subset_identity_HVAR_retaingids (void) { hb_face_t *face_abc = hb_test_open_font_file ("fonts/SourceSansVariable-Roman.abc.ttf"); hb_face_t *face_ac = hb_test_open_font_file ("fonts/SourceSansVariable-Roman.ac.retaingids.ttf"); @@ -96,9 +157,12 @@ main (int argc, char **argv) { hb_test_init (&argc, &argv); - hb_test_add (test_subset_HVAR_noop); - hb_test_add (test_subset_HVAR); - hb_test_add (test_subset_HVAR_retaingids); + hb_test_add (test_subset_map_HVAR_noop); + hb_test_add (test_subset_map_HVAR); + hb_test_add (test_subset_map_HVAR_retaingids); + hb_test_add (test_subset_identity_HVAR_noop); + hb_test_add (test_subset_identity_HVAR); + hb_test_add (test_subset_identity_HVAR_retaingids); return hb_test_run (); }