[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);
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.61,62,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.61,62,63.ttf
new file mode 100644
index 0000000..b57dfc8
--- /dev/null
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.61,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.61,63.ttf
new file mode 100644
index 0000000..001e837
--- /dev/null
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.61.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.61.ttf
new file mode 100644
index 0000000..4ef5645
--- /dev/null
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.62.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.62.ttf
new file mode 100644
index 0000000..1864c03
--- /dev/null
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.62.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.63.ttf
new file mode 100644
index 0000000..9091754
--- /dev/null
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.retain-all-codepoint.ttf
new file mode 100644
index 0000000..92a8c85
--- /dev/null
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.no-prune-unicode-ranges.61,62,63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.no-prune-unicode-ranges.61,62,63.ttf
new file mode 100644
index 0000000..9b0a9e4
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.no-prune-unicode-ranges.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.no-prune-unicode-ranges.61,63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.no-prune-unicode-ranges.61,63.ttf
new file mode 100644
index 0000000..432b3b2
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.no-prune-unicode-ranges.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.no-prune-unicode-ranges.61.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.no-prune-unicode-ranges.61.ttf
new file mode 100644
index 0000000..d2402b4
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.no-prune-unicode-ranges.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.no-prune-unicode-ranges.62.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.no-prune-unicode-ranges.62.ttf
new file mode 100644
index 0000000..907e8f7
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.no-prune-unicode-ranges.62.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.no-prune-unicode-ranges.63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.no-prune-unicode-ranges.63.ttf
new file mode 100644
index 0000000..741520c
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.no-prune-unicode-ranges.63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.no-prune-unicode-ranges.retain-all-codepoint.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.no-prune-unicode-ranges.retain-all-codepoint.ttf
new file mode 100644
index 0000000..9744bc3
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.no-prune-unicode-ranges.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.61,62,63.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.61,62,63.ttf
new file mode 100644
index 0000000..712674f
--- /dev/null
+++ b/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.61,63.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.61,63.ttf
new file mode 100644
index 0000000..f4b4a08
--- /dev/null
+++ b/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.61.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.61.ttf
new file mode 100644
index 0000000..691ce2e
--- /dev/null
+++ b/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.62.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.62.ttf
new file mode 100644
index 0000000..97913a4
--- /dev/null
+++ b/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.62.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.63.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.63.ttf
new file mode 100644
index 0000000..085db02
--- /dev/null
+++ b/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.retain-all-codepoint.ttf
new file mode 100644
index 0000000..712674f
--- /dev/null
+++ b/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/profiles/no-prune-unicode-ranges.txt b/test/subset/data/profiles/no-prune-unicode-ranges.txt
new file mode 100644
index 0000000..4d6872a
--- /dev/null
+++ b/test/subset/data/profiles/no-prune-unicode-ranges.txt
@@ -0,0 +1 @@
+--no-prune-unicode-ranges
diff --git a/test/subset/data/tests/basics.tests b/test/subset/data/tests/basics.tests
index 79a784c..2e86e21 100644
--- a/test/subset/data/tests/basics.tests
+++ b/test/subset/data/tests/basics.tests
@@ -15,6 +15,7 @@
 gids.txt
 layout-features.txt
 keep-all-layout-features.txt
+no-prune-unicode-ranges.txt
 
 SUBSETS:
 abc
diff --git a/util/options-subset.cc b/util/options-subset.cc
index 36516ae..2b0314a 100644
--- a/util/options-subset.cc
+++ b/util/options-subset.cc
@@ -311,6 +311,7 @@
     {"set-overlaps-flag", 0, 0, G_OPTION_ARG_NONE,  &this->input->overlaps_flag,
      "Set the overlaps flag on each glyph.",   nullptr},
     {"notdef-outline", 0, 0, G_OPTION_ARG_NONE,  &this->input->notdef_outline,   "Keep the outline of \'.notdef\' glyph",   nullptr},
+    {"no-prune-unicode-ranges", 0, 0, G_OPTION_ARG_NONE,  &this->input->no_prune_unicode_ranges,   "Don't change the 'OS/2 ulUnicodeRange*' bits.",   nullptr},
     {nullptr}
   };
   parser->add_group (entries,