[hb-info] Add --list-meta
diff --git a/util/hb-info.cc b/util/hb-info.cc
index f7cc4e6..e707840 100644
--- a/util/hb-info.cc
+++ b/util/hb-info.cc
@@ -125,6 +125,7 @@
       {"list-variations",0, 0, G_OPTION_ARG_NONE,	&this->list_variations,		"List variations",		nullptr},
 #endif
       {"list-palettes",	0, 0, G_OPTION_ARG_NONE,	&this->list_palettes,		"List color palettes",		nullptr},
+      {"list-meta",	0, 0, G_OPTION_ARG_NONE,	&this->list_meta,		"List meta information",	nullptr},
 
       {nullptr}
     };
@@ -219,6 +220,7 @@
   hb_bool_t list_variations = false;
 #endif
   hb_bool_t list_palettes = false;
+  hb_bool_t list_meta = false;
 
   public:
 
@@ -286,6 +288,7 @@
       list_variations =
 #endif
       list_palettes =
+      list_meta =
       true;
     }
 
@@ -323,6 +326,7 @@
     if (list_variations)  _list_variations ();
 #endif
     if (list_palettes)	  _list_palettes ();
+    if (list_meta)	  _list_meta ();
 
     return 0;
   }
@@ -1359,6 +1363,39 @@
       }
     }
   }
+
+  void
+  _list_meta ()
+  {
+    if (verbose)
+    {
+      separator ();
+      printf ("Meta information:\n");
+    }
+
+    {
+      if (verbose)
+      {
+	printf ("Tag	Data\n------------\n");
+      }
+      unsigned count = hb_ot_meta_get_entry_tags (face, 0, nullptr, nullptr);
+      for (unsigned i = 0; i < count; i++)
+      {
+	hb_ot_meta_tag_t tag;
+	unsigned len = 1;
+	hb_ot_meta_get_entry_tags (face, i, &len, &tag);
+
+	hb_blob_t *blob = hb_ot_meta_reference_entry (face, tag);
+
+	printf ("%c%c%c%c	%.*s\n", HB_UNTAG (tag),
+		(int) hb_blob_get_length (blob),
+		hb_blob_get_data (blob, nullptr));
+
+	hb_blob_destroy (blob);
+      }
+    }
+  }
+
 };