diff --git a/src/hb-ot-cmap-table.hh b/src/hb-ot-cmap-table.hh index 38dca26ba..d99efeffc 100644 --- a/src/hb-ot-cmap-table.hh +++ b/src/hb-ot-cmap-table.hh @@ -783,7 +783,7 @@ struct NonDefaultUVS : SortedArrayOf { unsigned int count = len; for (unsigned int i = 0; i < count; i++) - out->add (arrayZ[i].glyphID); + out->add (arrayZ[i].unicodeValue); } void closure_glyphs (const hb_set_t *unicodes, @@ -977,6 +977,12 @@ struct CmapSubtableFormat14 ; } + void collect_unicodes (hb_set_t *out) const + { + for (const VariationSelectorRecord& _ : record) + _.collect_unicodes (out, this); + } + bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); @@ -1155,10 +1161,13 @@ struct cmap for (const EncodingRecord& _ : encodingrec_iter) { + hb_set_t unicodes_set; + (src_base+_.subtable).collect_unicodes (&unicodes_set); + unsigned format = (src_base+_.subtable).u.format; - if (format == 4) c->copy (_, it, 4u, src_base, this, plan, &format4objidx); - else if (format == 12) c->copy (_, it, 12u, src_base, this, plan, &format12objidx); + if (format == 4) c->copy (_, + it | hb_filter (unicodes_set, hb_first), 4u, src_base, this, plan, &format4objidx); + else if (format == 12) c->copy (_, + it | hb_filter (unicodes_set, hb_first), 12u, src_base, this, plan, &format12objidx); else if (format == 14) c->copy (_, it, 14u, src_base, this, plan, &format14objidx); } diff --git a/test/subset/data/Makefile.am b/test/subset/data/Makefile.am index e075d08f2..45c5bf8ec 100644 --- a/test/subset/data/Makefile.am +++ b/test/subset/data/Makefile.am @@ -17,6 +17,7 @@ EXTRA_DIST += \ expected/layout.gpos2 \ expected/layout.gpos3 \ expected/layout.gsub6 \ + expected/cmap \ expected/cmap14 \ expected/sbix \ expected/colr \ diff --git a/test/subset/data/Makefile.sources b/test/subset/data/Makefile.sources index 51cc0dbe2..b22a52838 100644 --- a/test/subset/data/Makefile.sources +++ b/test/subset/data/Makefile.sources @@ -9,6 +9,7 @@ TESTS = \ tests/layout.gpos2.tests \ tests/layout.gpos3.tests \ tests/layout.gsub6.tests \ + tests/cmap.tests \ tests/cmap14.tests \ tests/sbix.tests \ tests/colr.tests \ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.default.61,62.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.default.61,62.ttf new file mode 100644 index 000000000..5eb324e76 Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.default.61,62.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.default.61,FEFA.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.default.61,FEFA.ttf new file mode 100644 index 000000000..f992c4604 Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.default.61,FEFA.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.default.FEE6,FECF.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.default.FEE6,FECF.ttf new file mode 100644 index 000000000..dd44a81e6 Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.default.FEE6,FECF.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.default.FEF9,FEFA.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.default.FEF9,FEFA.ttf new file mode 100644 index 000000000..bb09c4d5d Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.default.FEF9,FEFA.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.default.FEFA.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.default.FEFA.ttf new file mode 100644 index 000000000..209f03922 Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.default.FEFA.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints-retain-gids.61,62.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints-retain-gids.61,62.ttf new file mode 100644 index 000000000..b61474dce Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints-retain-gids.61,62.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints-retain-gids.61,FEFA.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints-retain-gids.61,FEFA.ttf new file mode 100644 index 000000000..675e2d321 Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints-retain-gids.61,FEFA.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints-retain-gids.FEE6,FECF.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints-retain-gids.FEE6,FECF.ttf new file mode 100644 index 000000000..12a9fb265 Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints-retain-gids.FEE6,FECF.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints-retain-gids.FEF9,FEFA.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints-retain-gids.FEF9,FEFA.ttf new file mode 100644 index 000000000..82ce49d2d Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints-retain-gids.FEF9,FEFA.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints-retain-gids.FEFA.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints-retain-gids.FEFA.ttf new file mode 100644 index 000000000..46ec429c0 Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints-retain-gids.FEFA.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints.61,62.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints.61,62.ttf new file mode 100644 index 000000000..bdba814ee Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints.61,62.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints.61,FEFA.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints.61,FEFA.ttf new file mode 100644 index 000000000..2678e5464 Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints.61,FEFA.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints.FEE6,FECF.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints.FEE6,FECF.ttf new file mode 100644 index 000000000..dc1e50c41 Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints.FEE6,FECF.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints.FEF9,FEFA.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints.FEF9,FEFA.ttf new file mode 100644 index 000000000..7b2add8b9 Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints.FEF9,FEFA.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints.FEFA.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints.FEFA.ttf new file mode 100644 index 000000000..1aa367ca3 Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.drop-hints.FEFA.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.name-ids.61,62.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.name-ids.61,62.ttf new file mode 100644 index 000000000..b2e46572b Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.name-ids.61,62.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.name-ids.61,FEFA.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.name-ids.61,FEFA.ttf new file mode 100644 index 000000000..76dd00d51 Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.name-ids.61,FEFA.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.name-ids.FEE6,FECF.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.name-ids.FEE6,FECF.ttf new file mode 100644 index 000000000..4f5cdbfd2 Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.name-ids.FEE6,FECF.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.name-ids.FEF9,FEFA.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.name-ids.FEF9,FEFA.ttf new file mode 100644 index 000000000..ce964fd52 Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.name-ids.FEF9,FEFA.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.name-ids.FEFA.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.name-ids.FEFA.ttf new file mode 100644 index 000000000..859a7f1e3 Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.name-ids.FEFA.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.retain-gids.61,62.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.retain-gids.61,62.ttf new file mode 100644 index 000000000..745e32d41 Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.retain-gids.61,62.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.retain-gids.61,FEFA.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.retain-gids.61,FEFA.ttf new file mode 100644 index 000000000..6faea208c Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.retain-gids.61,FEFA.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.retain-gids.FEE6,FECF.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.retain-gids.FEE6,FECF.ttf new file mode 100644 index 000000000..77fa170d4 Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.retain-gids.FEE6,FECF.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.retain-gids.FEF9,FEFA.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.retain-gids.FEF9,FEFA.ttf new file mode 100644 index 000000000..54620eddd Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.retain-gids.FEF9,FEFA.ttf differ diff --git a/test/subset/data/expected/cmap/AdobeBlank-Regular.retain-gids.FEFA.ttf b/test/subset/data/expected/cmap/AdobeBlank-Regular.retain-gids.FEFA.ttf new file mode 100644 index 000000000..06d379beb Binary files /dev/null and b/test/subset/data/expected/cmap/AdobeBlank-Regular.retain-gids.FEFA.ttf differ diff --git a/test/subset/data/fonts/AdobeBlank-Regular.ttf b/test/subset/data/fonts/AdobeBlank-Regular.ttf new file mode 100644 index 000000000..817f51a7a Binary files /dev/null and b/test/subset/data/fonts/AdobeBlank-Regular.ttf differ diff --git a/test/subset/data/tests/cmap.tests b/test/subset/data/tests/cmap.tests new file mode 100644 index 000000000..7d5cba74c --- /dev/null +++ b/test/subset/data/tests/cmap.tests @@ -0,0 +1,16 @@ +FONTS: +AdobeBlank-Regular.ttf + +PROFILES: +default.txt +drop-hints.txt +drop-hints-retain-gids.txt +retain-gids.txt +name-ids.txt + +SUBSETS: +ﻺ +ﻹﻺ +ﻦﻏ +ab +aﻺ