[subset] Add "--name-languages" and "--name-legacy" options

Make name table subsetting consistent with fontTools
pull/2129/head
Qunxin Liu 5 years ago committed by Garret Rieger
parent c370da45ff
commit fd85818b5b
  1. 11
      src/hb-ot-name-table.hh
  2. 23
      src/hb-subset-input.cc
  3. 2
      src/hb-subset-input.hh
  4. 3
      src/hb-subset-plan.cc
  5. 4
      src/hb-subset-plan.hh
  6. 9
      src/hb-subset.h
  7. 5
      test/api/hb-subset-test.h
  8. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.default.61,62,63.ttf
  9. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.default.61,63.ttf
  10. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.default.61.ttf
  11. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.default.62.ttf
  12. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.default.63.ttf
  13. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.default.retain-all-codepoint.ttf
  14. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61,62,63.ttf
  15. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61,63.ttf
  16. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61.ttf
  17. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.62.ttf
  18. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.63.ttf
  19. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.retain-all-codepoint.ttf
  20. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61,62,63.ttf
  21. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61,63.ttf
  22. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61.ttf
  23. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.62.ttf
  24. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.63.ttf
  25. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.retain-all-codepoint.ttf
  26. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61,62,63.ttf
  27. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61,63.ttf
  28. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61.ttf
  29. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.62.ttf
  30. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.63.ttf
  31. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.retain-all-codepoint.ttf
  32. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61,62,63.ttf
  33. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61,63.ttf
  34. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61.ttf
  35. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.62.ttf
  36. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.63.ttf
  37. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.retain-all-codepoint.ttf
  38. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61,62,63.ttf
  39. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61,63.ttf
  40. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61.ttf
  41. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.62.ttf
  42. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.63.ttf
  43. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.retain-all-codepoint.ttf
  44. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61,62,63.ttf
  45. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61,63.ttf
  46. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61.ttf
  47. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.62.ttf
  48. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.63.ttf
  49. BIN
      test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.retain-all-codepoint.ttf
  50. BIN
      test/subset/data/expected/basics/Roboto-Regular.abc.name-languages.61,62,63.ttf
  51. BIN
      test/subset/data/expected/basics/Roboto-Regular.abc.name-languages.61,63.ttf
  52. BIN
      test/subset/data/expected/basics/Roboto-Regular.abc.name-languages.61.ttf
  53. BIN
      test/subset/data/expected/basics/Roboto-Regular.abc.name-languages.62.ttf
  54. BIN
      test/subset/data/expected/basics/Roboto-Regular.abc.name-languages.63.ttf
  55. BIN
      test/subset/data/expected/basics/Roboto-Regular.abc.name-languages.retain-all-codepoint.ttf
  56. BIN
      test/subset/data/expected/basics/Roboto-Regular.abc.name-legacy.61,62,63.ttf
  57. BIN
      test/subset/data/expected/basics/Roboto-Regular.abc.name-legacy.61,63.ttf
  58. BIN
      test/subset/data/expected/basics/Roboto-Regular.abc.name-legacy.61.ttf
  59. BIN
      test/subset/data/expected/basics/Roboto-Regular.abc.name-legacy.62.ttf
  60. BIN
      test/subset/data/expected/basics/Roboto-Regular.abc.name-legacy.63.ttf
  61. BIN
      test/subset/data/expected/basics/Roboto-Regular.abc.name-legacy.retain-all-codepoint.ttf
  62. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.default.1FC,21,41,20,62,63.otf
  63. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.default.61,62,63.otf
  64. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.default.D7,D8,D9,DA,DE.otf
  65. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize-retain-gids.1FC,21,41,20,62,63.otf
  66. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize-retain-gids.61,62,63.otf
  67. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize-retain-gids.D7,D8,D9,DA,DE.otf
  68. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize.1FC,21,41,20,62,63.otf
  69. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize.61,62,63.otf
  70. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize.D7,D8,D9,DA,DE.otf
  71. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize-retain-gids.1FC,21,41,20,62,63.otf
  72. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize-retain-gids.61,62,63.otf
  73. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize-retain-gids.D7,D8,D9,DA,DE.otf
  74. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize.1FC,21,41,20,62,63.otf
  75. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize.61,62,63.otf
  76. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize.D7,D8,D9,DA,DE.otf
  77. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-retain-gids.1FC,21,41,20,62,63.otf
  78. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-retain-gids.61,62,63.otf
  79. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-retain-gids.D7,D8,D9,DA,DE.otf
  80. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints.1FC,21,41,20,62,63.otf
  81. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints.61,62,63.otf
  82. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints.D7,D8,D9,DA,DE.otf
  83. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.retain-gids.1FC,21,41,20,62,63.otf
  84. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.retain-gids.61,62,63.otf
  85. BIN
      test/subset/data/expected/cff-full-font/SourceSansPro-Regular.retain-gids.D7,D8,D9,DA,DE.otf
  86. BIN
      test/subset/data/expected/full-font/Roboto-Regular.default.1FC,21,41,20,62,63.ttf
  87. BIN
      test/subset/data/expected/full-font/Roboto-Regular.default.61,62,63.ttf
  88. BIN
      test/subset/data/expected/full-font/Roboto-Regular.default.D7,D8,D9,DA,DE.ttf
  89. BIN
      test/subset/data/expected/full-font/Roboto-Regular.drop-hints.1FC,21,41,20,62,63.ttf
  90. BIN
      test/subset/data/expected/full-font/Roboto-Regular.drop-hints.61,62,63.ttf
  91. BIN
      test/subset/data/expected/full-font/Roboto-Regular.drop-hints.D7,D8,D9,DA,DE.ttf
  92. BIN
      test/subset/data/expected/full-font/SourceSerifVariable-Roman.default.1FC,21,41,20,62,63.ttf
  93. BIN
      test/subset/data/expected/full-font/SourceSerifVariable-Roman.default.61,62,63.ttf
  94. BIN
      test/subset/data/expected/full-font/SourceSerifVariable-Roman.default.D7,D8,D9,DA,DE.ttf
  95. BIN
      test/subset/data/expected/full-font/SourceSerifVariable-Roman.drop-hints.1FC,21,41,20,62,63.ttf
  96. BIN
      test/subset/data/expected/full-font/SourceSerifVariable-Roman.drop-hints.61,62,63.ttf
  97. BIN
      test/subset/data/expected/full-font/SourceSerifVariable-Roman.drop-hints.D7,D8,D9,DA,DE.ttf
  98. BIN
      test/subset/data/expected/japanese/Mplus1p-Regular.default.1D715,1D7D8,41,42.ttf
  99. BIN
      test/subset/data/expected/japanese/Mplus1p-Regular.default.3042,3044,3046,3048,304A,304B.ttf
  100. BIN
      test/subset/data/expected/japanese/Mplus1p-Regular.default.3042,3044,3046,73E0,5EA6,8F38.ttf
  101. Some files were not shown because too many files have changed in this diff Show More

@ -108,6 +108,15 @@ struct NameRecord
return_trace (out);
}
bool isUnicode () const
{
unsigned int p = platformID;
unsigned int e = encodingID;
return (p == 0 ||
(p == 3 && (e == 0 || e == 1 || e == 10)));
}
bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
@ -210,6 +219,8 @@ struct name
auto it =
+ nameRecordZ.as_array (count)
| hb_filter (c->plan->name_ids, &NameRecord::nameID)
| hb_filter (c->plan->name_languages, &NameRecord::languageID)
| hb_filter ([&] (const NameRecord& namerecord) { return c->plan->name_legacy || namerecord.isUnicode (); })
;
name_prime->serialize (c->serializer, it, hb_addressof (this + stringOffset));

@ -46,10 +46,13 @@ hb_subset_input_create_or_fail ()
input->glyphs = hb_set_create ();
input->name_ids = hb_set_create ();
hb_set_add_range (input->name_ids, 0, 6);
input->name_languages = hb_set_create ();
hb_set_add (input->name_languages, 0x0409);
input->drop_tables = hb_set_create ();
input->drop_hints = false;
input->desubroutinize = false;
input->retain_gids = false;
input->name_legacy = false;
hb_tag_t default_drop_tables[] = {
// Layout disabled by default
@ -114,6 +117,7 @@ hb_subset_input_destroy (hb_subset_input_t *subset_input)
hb_set_destroy (subset_input->unicodes);
hb_set_destroy (subset_input->glyphs);
hb_set_destroy (subset_input->name_ids);
hb_set_destroy (subset_input->name_languages);
hb_set_destroy (subset_input->drop_tables);
free (subset_input);
@ -149,6 +153,12 @@ hb_subset_input_nameid_set (hb_subset_input_t *subset_input)
return subset_input->name_ids;
}
HB_EXTERN hb_set_t *
hb_subset_input_namelangid_set (hb_subset_input_t *subset_input)
{
return subset_input->name_languages;
}
HB_EXTERN hb_set_t *
hb_subset_input_drop_tables_set (hb_subset_input_t *subset_input)
{
@ -204,3 +214,16 @@ hb_subset_input_get_retain_gids (hb_subset_input_t *subset_input)
{
return subset_input->retain_gids;
}
HB_EXTERN void
hb_subset_input_set_name_legacy (hb_subset_input_t *subset_input,
hb_bool_t name_legacy)
{
subset_input->name_legacy = name_legacy;
}
HB_EXTERN hb_bool_t
hb_subset_input_get_name_legacy (hb_subset_input_t *subset_input)
{
return subset_input->name_legacy;
}

@ -41,11 +41,13 @@ struct hb_subset_input_t
hb_set_t *unicodes;
hb_set_t *glyphs;
hb_set_t *name_ids;
hb_set_t *name_languages;
hb_set_t *drop_tables;
bool drop_hints;
bool desubroutinize;
bool retain_gids;
bool name_legacy;
/* TODO
*
* features

@ -278,9 +278,11 @@ hb_subset_plan_create (hb_face_t *face,
plan->drop_hints = input->drop_hints;
plan->desubroutinize = input->desubroutinize;
plan->retain_gids = input->retain_gids;
plan->name_legacy = input->name_legacy;
plan->unicodes = hb_set_create ();
plan->name_ids = hb_set_reference (input->name_ids);
_nameid_closure (face, plan->name_ids);
plan->name_languages = hb_set_reference (input->name_languages);
plan->drop_tables = hb_set_reference (input->drop_tables);
plan->source = hb_face_reference (face);
plan->dest = hb_face_builder_create ();
@ -323,6 +325,7 @@ hb_subset_plan_destroy (hb_subset_plan_t *plan)
hb_set_destroy (plan->unicodes);
hb_set_destroy (plan->name_ids);
hb_set_destroy (plan->name_languages);
hb_set_destroy (plan->drop_tables);
hb_face_destroy (plan->source);
hb_face_destroy (plan->dest);

@ -42,6 +42,7 @@ struct hb_subset_plan_t
bool drop_hints : 1;
bool desubroutinize : 1;
bool retain_gids : 1;
bool name_legacy : 1;
// For each cp that we'd like to retain maps to the corresponding gid.
hb_set_t *unicodes;
@ -49,6 +50,9 @@ struct hb_subset_plan_t
// name_ids we would like to retain
hb_set_t *name_ids;
// name_languages we would like to retain
hb_set_t *name_languages;
// Tables which should be dropped.
hb_set_t *drop_tables;

@ -57,6 +57,9 @@ hb_subset_input_glyph_set (hb_subset_input_t *subset_input);
HB_EXTERN hb_set_t *
hb_subset_input_nameid_set (hb_subset_input_t *subset_input);
HB_EXTERN hb_set_t *
hb_subset_input_namelangid_set (hb_subset_input_t *subset_input);
HB_EXTERN hb_set_t *
hb_subset_input_drop_tables_set (hb_subset_input_t *subset_input);
@ -78,6 +81,12 @@ hb_subset_input_set_retain_gids (hb_subset_input_t *subset_input,
HB_EXTERN hb_bool_t
hb_subset_input_get_retain_gids (hb_subset_input_t *subset_input);
HB_EXTERN void
hb_subset_input_set_name_legacy (hb_subset_input_t *subset_input,
hb_bool_t name_legacy);
HB_EXTERN hb_bool_t
hb_subset_input_get_name_legacy (hb_subset_input_t *subset_input);
/* hb_subset () */
HB_EXTERN hb_face_t *
hb_subset (hb_face_t *source, hb_subset_input_t *input);

@ -71,6 +71,11 @@ hb_subset_test_create_input_from_nameids (const hb_set_t *name_ids)
hb_subset_input_t *input = hb_subset_input_create_or_fail ();
hb_set_t * input_name_ids = hb_subset_input_nameid_set (input);
hb_set_set (input_name_ids, name_ids);
hb_set_t *name_langids = hb_subset_input_namelangid_set (input);
hb_set_add_range (name_langids, 0, 0x5FFF);
hb_subset_input_set_name_legacy (input, true);
return input;
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save