[subset] Towards subsetting SingleSubstFormat1
authorBehdad Esfahbod <behdad@behdad.org>
Tue, 4 Sep 2018 01:23:23 +0000 (18:23 -0700)
committerBehdad Esfahbod <behdad@behdad.org>
Tue, 4 Sep 2018 01:23:23 +0000 (18:23 -0700)
Why does subset plan not have a hb_set_t of glyphs?

src/hb-machinery.hh
src/hb-ot-layout-gsub-table.hh

index 6e3e70c..280a5a6 100644 (file)
@@ -33,6 +33,7 @@
 #include "hb-blob.hh"
 
 #include "hb-iter.hh"
+#include "hb-vector.hh"
 
 
 /*
@@ -579,12 +580,19 @@ struct hb_serialize_context_t
 template <typename Type>
 struct Supplier
 {
-  inline Supplier (const Type *array, unsigned int len_, unsigned int stride_=sizeof(Type))
+  inline Supplier (const Type *array, unsigned int len_, unsigned int stride_=sizeof (Type))
   {
     head = array;
     len = len_;
     stride = stride_;
   }
+  inline Supplier (const hb_vector_t<Type> *v)
+  {
+    head = v->arrayZ;
+    len = v->len;
+    stride = sizeof (Type);
+  }
+
   inline const Type operator [] (unsigned int i) const
   {
     if (unlikely (i >= len)) return Type ();
index b5ac08b..c0f7081 100644 (file)
@@ -104,8 +104,18 @@ struct SingleSubstFormat1
 
   inline bool subset (hb_subset_context_t *c) const
   {
+    return false;
     TRACE_SUBSET (this);
-    // TODO(subset)
+    hb_auto_t<hb_vector_t<hb_codepoint_t>> from;
+    hb_auto_t<hb_vector_t<hb_codepoint_t>> to;
+    hb_codepoint_t delta = deltaGlyphID;
+    for (hb_auto_t<Coverage::Iter> iter (this+coverage); iter.more (); iter.next ())
+    {
+      //if (!c->plan->glyphs->has (iter.get_glyph ()))
+      //  continue;
+      from.push (iter.get_glyph ());
+      to.push ((iter.get_glyph () + delta) & 0xFFFF);
+    }
     return_trace (false);
   }