[subset] subset both CPAL and COLRv1
diff --git a/src/hb-ot-color-colr-table.hh b/src/hb-ot-color-colr-table.hh index 93e473d..3e375c4 100644 --- a/src/hb-ot-color-colr-table.hh +++ b/src/hb-ot-color-colr-table.hh
@@ -185,7 +185,7 @@ TRACE_SUBSET (this); auto *out = c->serializer->embed (*this); if (unlikely (!out)) return_trace (false); - return_trace (c->serializer->check_assign (out->paletteIndex, c->plan->colrv1_palettes->get (paletteIndex), + return_trace (c->serializer->check_assign (out->paletteIndex, c->plan->colr_palettes->get (paletteIndex), HB_SERIALIZE_ERROR_INT_OVERFLOW)); } @@ -807,7 +807,7 @@ else return_trace (false); } - return_trace (true); + return_trace (out->len != 0); } }; @@ -822,9 +822,12 @@ auto *out = c->serializer->start_embed (this); if (unlikely (!c->serializer->extend_min (out))) return_trace (false); - for (const auto& offset : as_array ()) { + for (const auto& _ : + hb_enumerate (*this) + | hb_filter (c->plan->colrv1_layers, hb_first)) + + { auto *o = out->serialize_append (c->serializer); - if (unlikely (!o) || !o->serialize_subset (c, offset, this)) + if (unlikely (!o) || !o->serialize_subset (c, _.second, this)) return_trace (false); } return_trace (true); @@ -878,6 +881,10 @@ hb_set_t *related_ids /* OUT */) const { colr->closure_glyphs (glyph, related_ids); } + void closure_V0palette_indices (const hb_set_t *glyphs, + hb_set_t *palettes /* OUT */) const + { colr->closure_V0palette_indices (glyphs, palettes); } + void closure_forV1 (hb_set_t *glyphset, hb_set_t *layer_indices, hb_set_t *palette_indices) const @@ -899,6 +906,23 @@ related_ids->add_array (&glyph_layers[0].glyphId, glyph_layers.length, LayerRecord::min_size); } + void closure_V0palette_indices (const hb_set_t *glyphs, + hb_set_t *palettes /* OUT */) const + { + if (!numBaseGlyphs || !numLayers) return; + hb_array_t<const BaseGlyphRecord> baseGlyphs = (this+baseGlyphsZ).as_array (numBaseGlyphs); + hb_array_t<const LayerRecord> all_layers = (this+layersZ).as_array (numLayers); + + for (const BaseGlyphRecord record : baseGlyphs) + { + if (!glyphs->has (record.glyphId)) continue; + hb_array_t<const LayerRecord> glyph_layers = all_layers.sub_array (record.firstLayerIdx, + record.numLayers); + for (const LayerRecord layer : glyph_layers) + palettes->add (layer.colorIdx); + } + } + void closure_forV1 (hb_set_t *glyphset, hb_set_t *layer_indices, hb_set_t *palette_indices) const @@ -941,10 +965,10 @@ template<typename BaseIterator, typename LayerIterator, hb_requires (hb_is_iterator (BaseIterator)), hb_requires (hb_is_iterator (LayerIterator))> - bool serialize (hb_serialize_context_t *c, - unsigned version, - BaseIterator base_it, - LayerIterator layer_it) + bool serialize_V0 (hb_serialize_context_t *c, + unsigned version, + BaseIterator base_it, + LayerIterator layer_it) { TRACE_SERIALIZE (this); if (unlikely (base_it.len () != layer_it.len ())) @@ -954,6 +978,12 @@ this->version = version; numLayers = 0; numBaseGlyphs = base_it.len (); + if (base_it.len () == 0) + { + baseGlyphsZ = 0; + layersZ = 0; + return_trace (true); + } baseGlyphsZ = COLR::min_size; layersZ = COLR::min_size + numBaseGlyphs * BaseGlyphRecord::min_size; @@ -1036,6 +1066,7 @@ if (unlikely (!c->plan->new_gid_for_old_gid (out_layers[i].glyphId, &new_gid))) return hb_pair_t<bool, hb_vector_t<LayerRecord>> (false, out_layers); out_layers[i].glyphId = new_gid; + out_layers[i].colorIdx = c->plan->colr_palettes->get (layers[i].colorIdx); } return hb_pair_t<bool, hb_vector_t<LayerRecord>> (true, out_layers); @@ -1044,11 +1075,29 @@ | hb_map_retains_sorting (hb_second) ; - if (unlikely (!base_it || !layer_it || base_it.len () != layer_it.len ())) + if (version == 0 && (!base_it || !layer_it)) return_trace (false); COLR *colr_prime = c->serializer->start_embed<COLR> (); - return_trace (colr_prime->serialize (c->serializer, version, base_it, layer_it)); + bool ret = colr_prime->serialize_V0 (c->serializer, version, base_it, layer_it); + + if (version == 0) return_trace (ret); + auto snap = c->serializer->snapshot (); + if (!c->serializer->allocate_size<void> (3 * HBUINT32::static_size)) return_trace (false); + if (!colr_prime->baseGlyphsV1List.serialize_subset (c, baseGlyphsV1List, this)) + { + if (c->serializer->in_error ()) return_trace (false); + //no more COLRv1 glyphs: downgrade to version 0 + c->serializer->revert (snap); + colr_prime->version = 0; + return_trace (true); + } + + if (!colr_prime->layersV1.serialize_subset (c, layersV1, this)) return_trace (false); + + colr_prime->varStore = 0; + //TODO: subset varStore once it's implemented in fonttools + return_trace (true); } protected:
diff --git a/src/hb-ot-color-cpal-table.hh b/src/hb-ot-color-cpal-table.hh index 2fa99de..a59b46b 100644 --- a/src/hb-ot-color-cpal-table.hh +++ b/src/hb-ot-color-cpal-table.hh
@@ -39,7 +39,6 @@ */ #define HB_OT_TAG_CPAL HB_TAG('C','P','A','L') - namespace OT { @@ -74,6 +73,58 @@ } public: + bool serialize (hb_serialize_context_t *c, + unsigned palette_count, + unsigned color_count, + const void *base, + const hb_map_t *color_index_map) const + { + TRACE_SERIALIZE (this); + auto *out = c->allocate_size<CPALV1Tail> (static_size); + if (unlikely (!out)) return_trace (false); + + const hb_array_t<const HBUINT32> paletteFlags = (base+paletteFlagsZ).as_array (palette_count); + const hb_array_t<const NameID> paletteLabels = (base+paletteLabelsZ).as_array (palette_count); + const hb_array_t<const NameID> colorLabels = (base+colorLabelsZ).as_array (color_count); + + c->push (); + for (const auto _ : paletteFlags) + { + if (!c->copy<HBUINT32> (_)) + { + c->pop_discard (); + return_trace (false); + } + } + c->add_link (out->paletteFlagsZ, c->pop_pack ()); + + c->push (); + for (const auto _ : paletteLabels) + { + if (!c->copy<NameID> (_)) + { + c->pop_discard (); + return_trace (false); + } + } + c->add_link (out->paletteLabelsZ, c->pop_pack ()); + + c->push (); + for (const auto _ : colorLabels) + { + if (!color_index_map->has (_)) continue; + NameID new_color_idx; + new_color_idx = color_index_map->get (_); + if (!c->copy<NameID> (new_color_idx)) + { + c->pop_discard (); + return_trace (false); + } + } + c->add_link (out->colorLabelsZ, c->pop_pack ()); + return_trace (true); + } + bool sanitize (hb_sanitize_context_t *c, const void *base, unsigned int palette_count, @@ -157,6 +208,84 @@ } public: + bool serialize (hb_serialize_context_t *c, + const hb_array_t<const BGRAColor> &color_records, + const hb_array_t<const HBUINT16> &color_record_indices, + const hb_map_t &color_record_index_map, + const hb_set_t &retained_color_record_indices) const + { + TRACE_SERIALIZE (this); + + for (const auto idx : color_record_indices) + { + HBUINT16 new_idx; + if (idx == 0) new_idx = 0; + else new_idx = color_record_index_map.get (idx); + if (!c->copy<HBUINT16> (new_idx)) return_trace (false); + } + + c->push (); + for (const auto _ : retained_color_record_indices.iter ()) + { + if (!c->copy<BGRAColor> (color_records[_])) + { + c->pop_discard (); + return_trace (false); + } + } + c->add_link (colorRecordsZ, c->pop_pack ()); + return_trace (true); + } + + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + const hb_map_t *color_index_map = c->plan->colr_palettes; + if (color_index_map->is_empty ()) return_trace (false); + + hb_set_t retained_color_indices; + for (const auto _ : color_index_map->keys ()) + { + if (_ == 0xFFFF) continue; + retained_color_indices.add (_); + } + if (retained_color_indices.is_empty ()) return_trace (false); + + auto *out = c->serializer->start_embed (*this); + if (unlikely (!c->serializer->extend_min (out))) return_trace (false); + + out->version = version; + out->numColors = retained_color_indices.get_population (); + out->numPalettes = numPalettes; + + const hb_array_t<const HBUINT16> colorRecordIndices = colorRecordIndicesZ.as_array (numPalettes); + hb_map_t color_record_index_map; + hb_set_t retained_color_record_indices; + + unsigned record_count = 0; + for (const auto first_color_record_idx : colorRecordIndices) + { + for (unsigned retained_color_idx : retained_color_indices.iter ()) + { + unsigned color_record_idx = first_color_record_idx + retained_color_idx; + if (color_record_index_map.has (color_record_idx)) continue; + color_record_index_map.set (color_record_idx, record_count); + retained_color_record_indices.add (color_record_idx); + record_count++; + } + } + + out->numColorRecords = record_count; + const hb_array_t<const BGRAColor> color_records = (this+colorRecordsZ).as_array (numColorRecords); + if (!out->serialize (c->serializer, color_records, colorRecordIndices, color_record_index_map, retained_color_record_indices)) + return_trace (false); + + if (version == 1) + return_trace (v1 ().serialize (c->serializer, numPalettes, numColors, this, color_index_map)); + + return_trace (true); + } + bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this);
diff --git a/src/hb-subset-plan.cc b/src/hb-subset-plan.cc index 04505cb..b620322 100644 --- a/src/hb-subset-plan.cc +++ b/src/hb-subset-plan.cc
@@ -57,6 +57,23 @@ #endif static void +_remap_palette_indexes (const hb_set_t *palette_indexes, + hb_map_t *mapping /* OUT */) +{ + unsigned new_idx = 0; + for (unsigned palette_index : palette_indexes->iter ()) + { + if (palette_index == 0xFFFF) + { + mapping->set (palette_index, palette_index); + continue; + } + mapping->set (palette_index, new_idx); + new_idx++; + } +} + +static void _remap_indexes (const hb_set_t *indexes, hb_map_t *mapping /* OUT */) { @@ -278,11 +295,14 @@ } _remove_invalid_gids (plan->_glyphset, plan->source->get_num_glyphs ()); + + hb_set_t palette_indices; + colr.closure_V0palette_indices (plan->_glyphset, &palette_indices); - hb_set_t layer_indices, palette_indices; + hb_set_t layer_indices; colr.closure_forV1 (plan->_glyphset, &layer_indices, &palette_indices); _remap_indexes (&layer_indices, plan->colrv1_layers); - _remap_indexes (&palette_indices, plan->colrv1_palettes); + _remap_palette_indexes (&palette_indices, plan->colr_palettes); colr.fini (); _remove_invalid_gids (plan->_glyphset, plan->source->get_num_glyphs ()); @@ -397,7 +417,7 @@ plan->gsub_features = hb_map_create (); plan->gpos_features = hb_map_create (); plan->colrv1_layers = hb_map_create (); - plan->colrv1_palettes = hb_map_create (); + plan->colr_palettes = hb_map_create (); plan->layout_variation_indices = hb_set_create (); plan->layout_variation_idx_map = hb_map_create (); @@ -449,7 +469,7 @@ hb_map_destroy (plan->gsub_features); hb_map_destroy (plan->gpos_features); hb_map_destroy (plan->colrv1_layers); - hb_map_destroy (plan->colrv1_palettes); + hb_map_destroy (plan->colr_palettes); hb_set_destroy (plan->layout_variation_indices); hb_map_destroy (plan->layout_variation_idx_map);
diff --git a/src/hb-subset-plan.hh b/src/hb-subset-plan.hh index 615f12e..79c34a7 100644 --- a/src/hb-subset-plan.hh +++ b/src/hb-subset-plan.hh
@@ -89,7 +89,7 @@ //active layers/palettes we'd like to retain hb_map_t *colrv1_layers; - hb_map_t *colrv1_palettes; + hb_map_t *colr_palettes; //The set of layout item variation store delta set indices to be retained hb_set_t *layout_variation_indices;
diff --git a/src/hb-subset.cc b/src/hb-subset.cc index d443d24..6a5ce52 100644 --- a/src/hb-subset.cc +++ b/src/hb-subset.cc
@@ -39,6 +39,7 @@ #include "hb-ot-maxp-table.hh" #include "hb-ot-color-sbix-table.hh" #include "hb-ot-color-colr-table.hh" +#include "hb-ot-color-cpal-table.hh" #include "hb-ot-os2-table.hh" #include "hb-ot-post-table.hh" #include "hb-ot-cff1-table.hh" @@ -266,6 +267,7 @@ case HB_OT_TAG_OS2 : return _subset<const OT::OS2 > (plan); case HB_OT_TAG_post: return _subset<const OT::post> (plan); case HB_OT_TAG_COLR: return _subset<const OT::COLR> (plan); + case HB_OT_TAG_CPAL: return _subset<const OT::CPAL> (plan); case HB_OT_TAG_CBLC: return _subset<const OT::CBLC> (plan); case HB_OT_TAG_CBDT: return true; /* skip CBDT, handled by CBLC */
diff --git a/test/api/fonts/TwemojiMozilla.subset.default.32,3299.ttf b/test/api/fonts/TwemojiMozilla.subset.default.32,3299.ttf index be3a53d..2f1a11a 100644 --- a/test/api/fonts/TwemojiMozilla.subset.default.32,3299.ttf +++ b/test/api/fonts/TwemojiMozilla.subset.default.32,3299.ttf Binary files differ
diff --git a/test/api/fonts/TwemojiMozilla.subset.default.32.ttf b/test/api/fonts/TwemojiMozilla.subset.default.32.ttf index b7d70ad..d77db78 100644 --- a/test/api/fonts/TwemojiMozilla.subset.default.32.ttf +++ b/test/api/fonts/TwemojiMozilla.subset.default.32.ttf Binary files differ
diff --git a/test/api/fonts/TwemojiMozilla.subset.default.3297.ttf b/test/api/fonts/TwemojiMozilla.subset.default.3297.ttf index 09e5056..5028110 100644 --- a/test/api/fonts/TwemojiMozilla.subset.default.3297.ttf +++ b/test/api/fonts/TwemojiMozilla.subset.default.3297.ttf Binary files differ
diff --git a/test/api/fonts/TwemojiMozilla.subset.ttf b/test/api/fonts/TwemojiMozilla.subset.ttf index 357dda3..7d09649 100644 --- a/test/api/fonts/TwemojiMozilla.subset.ttf +++ b/test/api/fonts/TwemojiMozilla.subset.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.default.32,3297,3299.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.default.32,3297,3299.ttf index 357dda3..42c2a8a 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.default.32,3297,3299.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.default.32,3297,3299.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.default.32,3297.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.default.32,3297.ttf index adedf7a..8c3191a 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.default.32,3297.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.default.32,3297.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.default.32,3299.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.default.32,3299.ttf index 1fbce41..743ca0c 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.default.32,3299.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.default.32,3299.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.default.32.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.default.32.ttf index 34ea336..f21fab0 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.default.32.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.default.32.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.default.3297,3299.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.default.3297,3299.ttf index 3d021a2..c2081b3 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.default.3297,3299.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.default.3297,3299.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.default.3297.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.default.3297.ttf index b8c6e6b..5ea2026 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.default.3297.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.default.3297.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.default.3299.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.default.3299.ttf index d2abf38..8acea94 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.default.3299.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.default.3299.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.32,3297,3299.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.32,3297,3299.ttf index 3644ec0..d0d5187 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.32,3297,3299.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.32,3297,3299.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.32,3297.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.32,3297.ttf index 81c92b4..91207c0 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.32,3297.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.32,3297.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.32,3299.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.32,3299.ttf index 37ab302..41f381b 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.32,3299.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.32,3299.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.32.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.32.ttf index c84776d..0273ead 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.32.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.32.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.3297,3299.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.3297,3299.ttf index 4f7f8ef..ccc2504 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.3297,3299.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.3297,3299.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.3297.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.3297.ttf index 271c6b4..0af003a 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.3297.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.3297.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.3299.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.3299.ttf index 88b4ec9..1900ddf 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.3299.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints-retain-gids.3299.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.32,3297,3299.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.32,3297,3299.ttf index 3644ec0..d0d5187 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.32,3297,3299.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.32,3297,3299.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.32,3297.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.32,3297.ttf index 12040a1..175b42d 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.32,3297.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.32,3297.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.32,3299.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.32,3299.ttf index ab4b9e2..1593f16 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.32,3299.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.32,3299.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.32.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.32.ttf index c84776d..0273ead 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.32.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.32.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.3297,3299.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.3297,3299.ttf index 7707dcc..10dde89 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.3297,3299.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.3297,3299.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.3297.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.3297.ttf index dd0e1a9..fb7dc77 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.3297.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.3297.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.3299.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.3299.ttf index e59928b..0725ade 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.3299.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.drop-hints.3299.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.32,3297,3299.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.32,3297,3299.ttf index 357dda3..42c2a8a 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.32,3297,3299.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.32,3297,3299.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.32,3297.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.32,3297.ttf index d04142d..32628c4 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.32,3297.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.32,3297.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.32,3299.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.32,3299.ttf index 983eb75..25ba6b3 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.32,3299.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.32,3299.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.32.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.32.ttf index 34ea336..f21fab0 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.32.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.32.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.3297,3299.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.3297,3299.ttf index ed60276..80df9b2 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.3297,3299.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.3297,3299.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.3297.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.3297.ttf index 60a5a3a..97faf4b 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.3297.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.3297.ttf Binary files differ
diff --git a/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.3299.ttf b/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.3299.ttf index 803af3f..ff8cabb 100644 --- a/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.3299.ttf +++ b/test/subset/data/expected/colr/TwemojiMozilla.subset.retain-gids.3299.ttf Binary files differ
diff --git a/test/subset/data/expected/colr_with_components/colr-table.default.6B.ttf b/test/subset/data/expected/colr_with_components/colr-table.default.6B.ttf index a73bffb..28f0057 100644 --- a/test/subset/data/expected/colr_with_components/colr-table.default.6B.ttf +++ b/test/subset/data/expected/colr_with_components/colr-table.default.6B.ttf Binary files differ
diff --git a/test/subset/data/expected/colr_with_components/colr-table.drop-hints-retain-gids.6B.ttf b/test/subset/data/expected/colr_with_components/colr-table.drop-hints-retain-gids.6B.ttf index 4a4784c..5ab44e9 100644 --- a/test/subset/data/expected/colr_with_components/colr-table.drop-hints-retain-gids.6B.ttf +++ b/test/subset/data/expected/colr_with_components/colr-table.drop-hints-retain-gids.6B.ttf Binary files differ
diff --git a/test/subset/data/expected/colr_with_components/colr-table.drop-hints.6B.ttf b/test/subset/data/expected/colr_with_components/colr-table.drop-hints.6B.ttf index a73bffb..28f0057 100644 --- a/test/subset/data/expected/colr_with_components/colr-table.drop-hints.6B.ttf +++ b/test/subset/data/expected/colr_with_components/colr-table.drop-hints.6B.ttf Binary files differ
diff --git a/test/subset/data/expected/colr_with_components/colr-table.retain-gids.6B.ttf b/test/subset/data/expected/colr_with_components/colr-table.retain-gids.6B.ttf index 4a4784c..5ab44e9 100644 --- a/test/subset/data/expected/colr_with_components/colr-table.retain-gids.6B.ttf +++ b/test/subset/data/expected/colr_with_components/colr-table.retain-gids.6B.ttf Binary files differ
diff --git a/test/subset/data/expected/colrv1/TestCOLRv1.default.E000,E004.ttf b/test/subset/data/expected/colrv1/TestCOLRv1.default.E000,E004.ttf new file mode 100644 index 0000000..424c6ba --- /dev/null +++ b/test/subset/data/expected/colrv1/TestCOLRv1.default.E000,E004.ttf Binary files differ
diff --git a/test/subset/data/expected/colrv1/TestCOLRv1.default.E003,E004.ttf b/test/subset/data/expected/colrv1/TestCOLRv1.default.E003,E004.ttf new file mode 100644 index 0000000..d2778a2 --- /dev/null +++ b/test/subset/data/expected/colrv1/TestCOLRv1.default.E003,E004.ttf Binary files differ
diff --git a/test/subset/data/expected/colrv1/TestCOLRv1.default.E004.ttf b/test/subset/data/expected/colrv1/TestCOLRv1.default.E004.ttf new file mode 100644 index 0000000..ef769c7 --- /dev/null +++ b/test/subset/data/expected/colrv1/TestCOLRv1.default.E004.ttf Binary files differ
diff --git a/test/subset/data/expected/colrv1/TestCOLRv1.default.retain-all-codepoint.ttf b/test/subset/data/expected/colrv1/TestCOLRv1.default.retain-all-codepoint.ttf new file mode 100644 index 0000000..7cd14c4 --- /dev/null +++ b/test/subset/data/expected/colrv1/TestCOLRv1.default.retain-all-codepoint.ttf Binary files differ
diff --git a/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints-retain-gids.E000,E004.ttf b/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints-retain-gids.E000,E004.ttf new file mode 100644 index 0000000..819335b --- /dev/null +++ b/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints-retain-gids.E000,E004.ttf Binary files differ
diff --git a/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints-retain-gids.E003,E004.ttf b/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints-retain-gids.E003,E004.ttf new file mode 100644 index 0000000..7d1f333 --- /dev/null +++ b/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints-retain-gids.E003,E004.ttf Binary files differ
diff --git a/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints-retain-gids.E004.ttf b/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints-retain-gids.E004.ttf new file mode 100644 index 0000000..451d665 --- /dev/null +++ b/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints-retain-gids.E004.ttf Binary files differ
diff --git a/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints-retain-gids.retain-all-codepoint.ttf b/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints-retain-gids.retain-all-codepoint.ttf new file mode 100644 index 0000000..9bb3da5 --- /dev/null +++ b/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints-retain-gids.retain-all-codepoint.ttf Binary files differ
diff --git a/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints.E000,E004.ttf b/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints.E000,E004.ttf new file mode 100644 index 0000000..eef68d7 --- /dev/null +++ b/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints.E000,E004.ttf Binary files differ
diff --git a/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints.E003,E004.ttf b/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints.E003,E004.ttf new file mode 100644 index 0000000..e3cd398 --- /dev/null +++ b/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints.E003,E004.ttf Binary files differ
diff --git a/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints.E004.ttf b/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints.E004.ttf new file mode 100644 index 0000000..e8dfae6 --- /dev/null +++ b/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints.E004.ttf Binary files differ
diff --git a/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints.retain-all-codepoint.ttf b/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints.retain-all-codepoint.ttf new file mode 100644 index 0000000..9bb3da5 --- /dev/null +++ b/test/subset/data/expected/colrv1/TestCOLRv1.drop-hints.retain-all-codepoint.ttf Binary files differ
diff --git a/test/subset/data/expected/colrv1/TestCOLRv1.retain-gids.E000,E004.ttf b/test/subset/data/expected/colrv1/TestCOLRv1.retain-gids.E000,E004.ttf new file mode 100644 index 0000000..6e3f5fb --- /dev/null +++ b/test/subset/data/expected/colrv1/TestCOLRv1.retain-gids.E000,E004.ttf Binary files differ
diff --git a/test/subset/data/expected/colrv1/TestCOLRv1.retain-gids.E003,E004.ttf b/test/subset/data/expected/colrv1/TestCOLRv1.retain-gids.E003,E004.ttf new file mode 100644 index 0000000..ee80313 --- /dev/null +++ b/test/subset/data/expected/colrv1/TestCOLRv1.retain-gids.E003,E004.ttf Binary files differ
diff --git a/test/subset/data/expected/colrv1/TestCOLRv1.retain-gids.E004.ttf b/test/subset/data/expected/colrv1/TestCOLRv1.retain-gids.E004.ttf new file mode 100644 index 0000000..32d69dc --- /dev/null +++ b/test/subset/data/expected/colrv1/TestCOLRv1.retain-gids.E004.ttf Binary files differ
diff --git a/test/subset/data/expected/colrv1/TestCOLRv1.retain-gids.retain-all-codepoint.ttf b/test/subset/data/expected/colrv1/TestCOLRv1.retain-gids.retain-all-codepoint.ttf new file mode 100644 index 0000000..7cd14c4 --- /dev/null +++ b/test/subset/data/expected/colrv1/TestCOLRv1.retain-gids.retain-all-codepoint.ttf Binary files differ
diff --git a/test/subset/data/fonts/TestCOLRv1.ttf b/test/subset/data/fonts/TestCOLRv1.ttf new file mode 100644 index 0000000..262f266 --- /dev/null +++ b/test/subset/data/fonts/TestCOLRv1.ttf Binary files differ
diff --git a/test/subset/data/tests/colrv1.tests b/test/subset/data/tests/colrv1.tests new file mode 100644 index 0000000..f579737 --- /dev/null +++ b/test/subset/data/tests/colrv1.tests
@@ -0,0 +1,21 @@ +FONTS: +TestCOLRv1.ttf + +PROFILES: +default.txt +drop-hints.txt +drop-hints-retain-gids.txt +retain-gids.txt + +SUBSETS: +#U+E000 +#U+E001 +#U+E003 +U+E004 +#U+E000,U+E001 +#U+E002,U+E003 +U+E000,U+E004 +U+E003,U+E004 +#U+E000,U+E001,U+E002 +#U+E000,U+E001,U+E002,U+E003 +*
diff --git a/test/subset/subset_test_suite.py b/test/subset/subset_test_suite.py index b7fd105..a58d017 100644 --- a/test/subset/subset_test_suite.py +++ b/test/subset/subset_test_suite.py
@@ -11,8 +11,12 @@ self.subset = subset def unicodes(self): + import re if self.subset == '*': return self.subset[0] + elif re.match("^U\+", self.subset): + s = re.sub (r"U\+", "", self.subset) + return s else: return ",".join("%X" % ord(c) for (i, c) in enumerate(self.subset))