+hb_font_create_sub_font (hb_font_t *parent)
+{
+ if (unlikely (!parent))
+ return &_hb_font_nil;
+
+ hb_font_t *font = hb_font_create (parent->face);
+
+ if (unlikely (hb_object_is_inert (font)))
+ return font;
+
+ hb_font_make_immutable (parent);
+ font->parent = hb_font_reference (parent);
+
+ font->x_scale = parent->x_scale;
+ font->y_scale = parent->y_scale;
+ font->x_ppem = parent->x_ppem;
+ font->y_ppem = parent->y_ppem;
+
+ /* We can safely copy user_data from parent since we hold a reference
+ * onto it and it's immutable. We should not copy the destroy notifiers
+ * though. */
+ font->klass = hb_font_funcs_reference (parent->klass);
+ font->user_data = parent->user_data;
+
+ return font;
+}
+
+hb_font_t *