[subset] add option --no-prune-unicode-ranges
diff --git a/src/hb-ot-os2-table.hh b/src/hb-ot-os2-table.hh
index 8e98f87..66ad5a5 100644
--- a/src/hb-ot-os2-table.hh
+++ b/src/hb-ot-os2-table.hh
@@ -172,6 +172,7 @@
     TRACE_SUBSET (this);
     OS2 *os2_prime = c->serializer->embed (this);
     if (unlikely (!os2_prime)) return_trace (false);
+    if (!c->plan->prune_unicode_ranges) return_trace (true);
 
     hb_set_t unicodes;
     if (!c->plan->glyphs_requested->is_empty ())
diff --git a/src/hb-subset-input.cc b/src/hb-subset-input.cc
index 50cbb2f..88ff5ef 100644
--- a/src/hb-subset-input.cc
+++ b/src/hb-subset-input.cc
@@ -56,6 +56,7 @@
   input->name_legacy = false;
   input->overlaps_flag = false;
   input->notdef_outline = false;
+  input->no_prune_unicode_ranges = false;
   input->retain_all_layout_features = false;
 
   hb_tag_t default_drop_tables[] = {
@@ -364,3 +365,16 @@
   return subset_input->notdef_outline;
 }
 
+HB_EXTERN void
+hb_subset_input_set_no_prune_unicode_ranges (hb_subset_input_t *subset_input,
+                                             hb_bool_t no_prune_unicode_ranges)
+{
+  subset_input->no_prune_unicode_ranges = no_prune_unicode_ranges;
+}
+
+HB_EXTERN hb_bool_t
+hb_subset_input_get_no_prune_unicode_ranges (hb_subset_input_t *subset_input)
+{
+  return subset_input->no_prune_unicode_ranges;
+}
+
diff --git a/src/hb-subset-input.hh b/src/hb-subset-input.hh
index f48ce0f..40bf9a3 100644
--- a/src/hb-subset-input.hh
+++ b/src/hb-subset-input.hh
@@ -52,6 +52,7 @@
   hb_bool_t name_legacy;
   hb_bool_t overlaps_flag;
   hb_bool_t notdef_outline;
+  hb_bool_t no_prune_unicode_ranges;
   hb_bool_t retain_all_layout_features;
   /* TODO
    *
diff --git a/src/hb-subset-plan.cc b/src/hb-subset-plan.cc
index f5aaaaf..195378d 100644
--- a/src/hb-subset-plan.cc
+++ b/src/hb-subset-plan.cc
@@ -403,6 +403,7 @@
   plan->name_legacy = input->name_legacy;
   plan->overlaps_flag = input->overlaps_flag;
   plan->notdef_outline = input->notdef_outline;
+  plan->prune_unicode_ranges = !input->no_prune_unicode_ranges;
   plan->retain_all_layout_features = input->retain_all_layout_features;
   plan->unicodes = hb_set_create ();
   plan->name_ids = hb_set_reference (input->name_ids);
diff --git a/src/hb-subset-plan.hh b/src/hb-subset-plan.hh
index 5df9e76..01117f4 100644
--- a/src/hb-subset-plan.hh
+++ b/src/hb-subset-plan.hh
@@ -46,6 +46,7 @@
   bool name_legacy : 1;
   bool overlaps_flag : 1;
   bool notdef_outline : 1;
+  bool prune_unicode_ranges : 1;
   bool retain_all_layout_features : 1;
 
   // For each cp that we'd like to retain maps to the corresponding gid.
diff --git a/src/hb-subset.h b/src/hb-subset.h
index b604c48..249540f 100644
--- a/src/hb-subset.h
+++ b/src/hb-subset.h
@@ -110,6 +110,13 @@
 HB_EXTERN hb_bool_t
 hb_subset_input_get_notdef_outline (hb_subset_input_t *subset_input);
 
+HB_EXTERN void
+hb_subset_input_set_no_prune_unicode_ranges (hb_subset_input_t *subset_input,
+                                             hb_bool_t no_prune_unicode_ranges);
+
+HB_EXTERN hb_bool_t
+hb_subset_input_get_no_prune_unicode_ranges (hb_subset_input_t *subset_input);
+
 /* hb_subset () */
 HB_EXTERN hb_face_t *
 hb_subset (hb_face_t *source, hb_subset_input_t *input);