[subset] Fix namerecord ordering
This will fix inconsistency with fontTools.
Also according to the spec, namerecords must be sorted
first by platform ID, then by platform-specific ID,
then by language ID, and then by name ID.
diff --git a/src/hb-ot-name-table.hh b/src/hb-ot-name-table.hh
index 7147484..0da5671 100644
--- a/src/hb-ot-name-table.hh
+++ b/src/hb-ot-name-table.hh
@@ -116,6 +116,29 @@
     return (p == 0 ||
             (p == 3 && (e == 0 || e == 1 || e == 10)));
   }
+  
+  static int cmp (const void *pa, const void *pb)
+  {
+    const NameRecord *a = (const NameRecord *)pa;
+    const NameRecord *b = (const NameRecord *)pb;
+
+    if (a->platformID != b->platformID)
+      return a->platformID < b->platformID ? -1 : +1;
+
+    if (a->encodingID != b->encodingID)
+      return a->encodingID < b->encodingID ? -1 : +1;
+
+    if (a->languageID != b->languageID)
+      return a->languageID < b->languageID ? -1 : +1;
+
+    if (a->nameID != b->nameID)
+      return a->nameID < b->nameID ? -1 : +1;
+
+    if (a->length != b->length)
+      return a->length < b->length ? -1 : +1;
+
+    return 0;
+  }
 
   bool sanitize (hb_sanitize_context_t *c, const void *base) const
   {
@@ -200,7 +223,19 @@
 
     const void *dst_string_pool = &(this + this->stringOffset);
 
-    c->copy_all (it, src_string_pool, dst_string_pool);
+    NameRecord *name_records = (NameRecord *) calloc (it.len (), NameRecord::static_size);
+    hb_array_t<NameRecord> records (name_records, it.len ());
+
+    for (const NameRecord& record : it)
+    {
+      memcpy (name_records, &record, NameRecord::static_size);
+      name_records++;
+    }
+
+    records.qsort ();
+
+    c->copy_all (records, src_string_pool, dst_string_pool);
+    free (records.arrayZ);
 
     if (unlikely (c->ran_out_of_room)) return_trace (false);
 
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.61,62,63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.61,62,63.ttf
new file mode 100644
index 0000000..dbed582
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.61,63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.61,63.ttf
new file mode 100644
index 0000000..5913420
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.61.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.61.ttf
new file mode 100644
index 0000000..3635f68
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.62.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.62.ttf
new file mode 100644
index 0000000..91fcad8
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.62.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.63.ttf
new file mode 100644
index 0000000..737cbdc
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.retain-all-codepoint.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.retain-all-codepoint.ttf
new file mode 100644
index 0000000..9744bc3
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.61,62,63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.61,62,63.ttf
new file mode 100644
index 0000000..bf8264b
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.61,63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.61,63.ttf
new file mode 100644
index 0000000..c64172a
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.61.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.61.ttf
new file mode 100644
index 0000000..9b26144
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.62.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.62.ttf
new file mode 100644
index 0000000..d737cd7
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.62.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.63.ttf
new file mode 100644
index 0000000..5e4d494
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.retain-all-codepoint.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.retain-all-codepoint.ttf
new file mode 100644
index 0000000..892ccb8
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.61,62,63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.61,62,63.ttf
new file mode 100644
index 0000000..bf8264b
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.61,63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.61,63.ttf
new file mode 100644
index 0000000..bc54940
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.61.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.61.ttf
new file mode 100644
index 0000000..9b26144
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.62.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.62.ttf
new file mode 100644
index 0000000..32cf9f7
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.62.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.63.ttf
new file mode 100644
index 0000000..776e758
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.retain-all-codepoint.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.retain-all-codepoint.ttf
new file mode 100644
index 0000000..892ccb8
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.61,62,63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.61,62,63.ttf
new file mode 100644
index 0000000..a7af973
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.61,63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.61,63.ttf
new file mode 100644
index 0000000..ac780db
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.61.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.61.ttf
new file mode 100644
index 0000000..c4321d1
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.62.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.62.ttf
new file mode 100644
index 0000000..4c553ca
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.62.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.63.ttf
new file mode 100644
index 0000000..5234b74
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.retain-all-codepoint.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.retain-all-codepoint.ttf
new file mode 100644
index 0000000..9d22541
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.61,62,63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.61,62,63.ttf
new file mode 100644
index 0000000..9bb2a9d
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.61,63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.61,63.ttf
new file mode 100644
index 0000000..7373aa3
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.61.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.61.ttf
new file mode 100644
index 0000000..26fe19e
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.62.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.62.ttf
new file mode 100644
index 0000000..02cd270
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.62.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.63.ttf
new file mode 100644
index 0000000..64a892e
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.retain-all-codepoint.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.retain-all-codepoint.ttf
new file mode 100644
index 0000000..d5d4238
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.61,62,63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.61,62,63.ttf
new file mode 100644
index 0000000..dbed582
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.61,63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.61,63.ttf
new file mode 100644
index 0000000..5913420
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.61.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.61.ttf
new file mode 100644
index 0000000..3635f68
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.62.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.62.ttf
new file mode 100644
index 0000000..91fcad8
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.62.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.63.ttf
new file mode 100644
index 0000000..737cbdc
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.retain-all-codepoint.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.retain-all-codepoint.ttf
new file mode 100644
index 0000000..9744bc3
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.61,62,63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.61,62,63.ttf
new file mode 100644
index 0000000..dbed582
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.61,63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.61,63.ttf
new file mode 100644
index 0000000..47e72c6
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.61.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.61.ttf
new file mode 100644
index 0000000..3635f68
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.62.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.62.ttf
new file mode 100644
index 0000000..57f7ec7
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.62.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.63.ttf
new file mode 100644
index 0000000..d0426a0
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.retain-all-codepoint.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.retain-all-codepoint.ttf
new file mode 100644
index 0000000..9744bc3
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/japanese/Mplus1p-Regular.default.25771.ttf b/test/subset/data/expected/japanese/Mplus1p-Regular.default.25771.ttf
index e7fe616..1dcfeec 100644
--- a/test/subset/data/expected/japanese/Mplus1p-Regular.default.25771.ttf
+++ b/test/subset/data/expected/japanese/Mplus1p-Regular.default.25771.ttf
Binary files differ
diff --git a/test/subset/data/expected/japanese/Mplus1p-Regular.drop-hints.25771.ttf b/test/subset/data/expected/japanese/Mplus1p-Regular.drop-hints.25771.ttf
index 4670bf0..5bdc97b 100644
--- a/test/subset/data/expected/japanese/Mplus1p-Regular.drop-hints.25771.ttf
+++ b/test/subset/data/expected/japanese/Mplus1p-Regular.drop-hints.25771.ttf
Binary files differ
diff --git a/test/subset/data/fonts/NanumMyeongjo-Regular-subset.ttf b/test/subset/data/fonts/NanumMyeongjo-Regular-subset.ttf
new file mode 100644
index 0000000..73b395e
--- /dev/null
+++ b/test/subset/data/fonts/NanumMyeongjo-Regular-subset.ttf
Binary files differ
diff --git a/test/subset/data/tests/basics.tests b/test/subset/data/tests/basics.tests
index 738c2b3..6dd819b 100644
--- a/test/subset/data/tests/basics.tests
+++ b/test/subset/data/tests/basics.tests
@@ -1,6 +1,7 @@
 FONTS:
 Roboto-Regular.abc.ttf
 Comfortaa-Regular-new.ttf
+NanumMyeongjo-Regular-subset.ttf
 
 PROFILES:
 default.txt