[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.
pull/2153/head
Qunxin Liu 5 years ago committed by Ebrahim Byagowi
parent b4377afd28
commit 490ef1cc23
  1. 37
      src/hb-ot-name-table.hh
  2. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.61,62,63.ttf
  3. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.61,63.ttf
  4. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.61.ttf
  5. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.62.ttf
  6. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.63.ttf
  7. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.default.retain-all-codepoint.ttf
  8. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.61,62,63.ttf
  9. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.61,63.ttf
  10. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.61.ttf
  11. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.62.ttf
  12. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.63.ttf
  13. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints-retain-gids.retain-all-codepoint.ttf
  14. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.61,62,63.ttf
  15. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.61,63.ttf
  16. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.61.ttf
  17. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.62.ttf
  18. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.63.ttf
  19. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.drop-hints.retain-all-codepoint.ttf
  20. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.61,62,63.ttf
  21. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.61,63.ttf
  22. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.61.ttf
  23. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.62.ttf
  24. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.63.ttf
  25. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-ids.retain-all-codepoint.ttf
  26. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.61,62,63.ttf
  27. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.61,63.ttf
  28. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.61.ttf
  29. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.62.ttf
  30. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.63.ttf
  31. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-languages.retain-all-codepoint.ttf
  32. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.61,62,63.ttf
  33. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.61,63.ttf
  34. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.61.ttf
  35. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.62.ttf
  36. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.63.ttf
  37. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.name-legacy.retain-all-codepoint.ttf
  38. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.61,62,63.ttf
  39. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.61,63.ttf
  40. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.61.ttf
  41. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.62.ttf
  42. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.63.ttf
  43. BIN
      test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.retain-gids.retain-all-codepoint.ttf
  44. BIN
      test/subset/data/expected/japanese/Mplus1p-Regular.default.25771.ttf
  45. BIN
      test/subset/data/expected/japanese/Mplus1p-Regular.drop-hints.25771.ttf
  46. BIN
      test/subset/data/fonts/NanumMyeongjo-Regular-subset.ttf
  47. 1
      test/subset/data/tests/basics.tests

@ -117,6 +117,29 @@ struct NameRecord
(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
{
TRACE_SANITIZE (this);
@ -200,7 +223,19 @@ struct name
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);

@ -1,6 +1,7 @@
FONTS:
Roboto-Regular.abc.ttf
Comfortaa-Regular-new.ttf
NanumMyeongjo-Regular-subset.ttf
PROFILES:
default.txt

Loading…
Cancel
Save