move to the hb_face_t dest pattern
diff --git a/src/hb-ot-cmap-table.hh b/src/hb-ot-cmap-table.hh
index 570f134..219eca7 100644
--- a/src/hb-ot-cmap-table.hh
+++ b/src/hb-ot-cmap-table.hh
@@ -504,8 +504,13 @@
encodingRecord.sanitize (c, this));
}
- inline bool subset(hb_subset_plan_t *plan, OT::hb_serialize_context_t *out) const
+ inline bool subset(hb_subset_plan_t *plan, hb_face_t *source, hb_face_t *dest) const
{
+ // TODO something useful re: memory, write to dest
+ size_t dest_sz = 64536; // as much as anyone would ever need
+ void *dest_buf = malloc(dest_sz);
+ OT::hb_serialize_context_t context(dest_buf, dest_sz);
+
// Same version
OT::cmap new_cmap;
new_cmap.version = version;
diff --git a/src/hb-subset.cc b/src/hb-subset.cc
index 9c1d6d4..bd4e34f 100644
--- a/src/hb-subset.cc
+++ b/src/hb-subset.cc
@@ -109,22 +109,21 @@
template<typename TableType>
hb_bool_t
-subset(hb_subset_plan_t *plan, hb_face_t *face, hb_blob_t **out)
+subset(hb_subset_plan_t *plan, hb_face_t *source, hb_face_t *dest)
{
OT::Sanitizer<TableType> sanitizer;
- hb_blob_t *table_blob = sanitizer.sanitize (face->reference_table (TableType::tableTag));
+ hb_blob_t *table_blob = sanitizer.sanitize (source->reference_table (TableType::tableTag));
if (unlikely(!table_blob)) {
+ DEBUG_MSG(SUBSET, nullptr, "Failed to reference table for tag %d", TableType::tableTag);
return false;
}
const TableType *table = OT::Sanitizer<TableType>::lock_instance (table_blob);
-
- // TODO actually manage the context/output memory
- size_t dest_sz = 64536; // as much as anyone would ever need
- void *dest = malloc(dest_sz);
- OT::hb_serialize_context_t context(dest, dest_sz);
- hb_bool_t result = table->subset(plan, &context);
- // TODO populate out
+ hb_bool_t result = table->subset(plan, source, dest);
+
hb_blob_destroy (table_blob);
+
+ // TODO string not numeric tag
+ DEBUG_MSG(SUBSET, nullptr, "Subset %d %s", TableType::tableTag, result ? "success" : "FAILED!");
return result;
}
@@ -306,18 +305,17 @@
// - copy the table into the output.
// - Fix header + table directory.
+ bool success = true;
+
+ hb_face_t *dest = nullptr; // TODO allocate dest
+
hb_blob_t *glyf_prime = nullptr;
if (hb_subset_glyf (plan, source, &glyf_prime)) {
// TODO: write new glyf to new face.
}
hb_blob_destroy (glyf_prime);
- hb_blob_t *cmap_prime = nullptr;
- if (subset<const OT::cmap>(plan, source, &cmap_prime)) {
- DEBUG_MSG(SUBSET, nullptr, "subset cmap success!");
- } else {
- DEBUG_MSG(SUBSET, nullptr, "subset cmap FAILED!");
- }
+ success = success && subset<const OT::cmap>(plan, source, dest);
hb_subset_plan_destroy (plan);