[layout] More prep work to memoize collect_features() work

This commit is contained in:
Behdad Esfahbod 2018-10-25 20:58:34 -07:00
parent e8e67503ff
commit fe5520ddea
1 changed files with 23 additions and 39 deletions

View File

@ -718,29 +718,24 @@ langsys_collect_features (const OT::GSUBGPOS &g,
} }
static void static void
_hb_ot_layout_collect_features_languages (hb_face_t *face, script_collect_features (const OT::GSUBGPOS &g,
hb_tag_t table_tag, const OT::Script &s,
unsigned int script_index, const hb_tag_t *languages,
const hb_tag_t *languages, const hb_tag_t *features,
const hb_tag_t *features, hb_set_t *feature_indexes /* OUT */)
hb_set_t *feature_indexes /* OUT */)
{ {
const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
if (!languages) if (!languages)
{ {
/* All languages. */ /* All languages. */
langsys_collect_features (g, langsys_collect_features (g,
g.get_script (script_index).get_default_lang_sys (), s.get_default_lang_sys (),
features, features,
feature_indexes); feature_indexes);
unsigned int count = hb_ot_layout_script_get_language_tags (face, unsigned int count = s.get_lang_sys_count ();
table_tag,
script_index,
0, nullptr, nullptr);
for (unsigned int language_index = 0; language_index < count; language_index++) for (unsigned int language_index = 0; language_index < count; language_index++)
langsys_collect_features (g, langsys_collect_features (g,
g.get_script (script_index).get_lang_sys (language_index), s.get_lang_sys (language_index),
features, features,
feature_indexes); feature_indexes);
} }
@ -749,14 +744,9 @@ _hb_ot_layout_collect_features_languages (hb_face_t *face,
for (; *languages; languages++) for (; *languages; languages++)
{ {
unsigned int language_index; unsigned int language_index;
if (hb_ot_layout_script_select_language (face, if (s.find_lang_sys_index (*languages, &language_index))
table_tag,
script_index,
1,
languages,
&language_index))
langsys_collect_features (g, langsys_collect_features (g,
g.get_script (script_index).get_lang_sys (language_index), s.get_lang_sys (language_index),
features, features,
feature_indexes); feature_indexes);
} }
@ -776,35 +766,29 @@ hb_ot_layout_collect_features (hb_face_t *face,
const hb_tag_t *features, const hb_tag_t *features,
hb_set_t *feature_indexes /* OUT */) hb_set_t *feature_indexes /* OUT */)
{ {
const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
if (!scripts) if (!scripts)
{ {
/* All scripts. */ /* All scripts. */
unsigned int count = hb_ot_layout_table_get_script_tags (face, unsigned int count = g.get_script_count ();
table_tag,
0, nullptr, nullptr);
for (unsigned int script_index = 0; script_index < count; script_index++) for (unsigned int script_index = 0; script_index < count; script_index++)
_hb_ot_layout_collect_features_languages (face, script_collect_features (g,
table_tag, g.get_script (script_index),
script_index, languages,
languages, features,
features, feature_indexes);
feature_indexes);
} }
else else
{ {
for (; *scripts; scripts++) for (; *scripts; scripts++)
{ {
unsigned int script_index; unsigned int script_index;
if (hb_ot_layout_table_find_script (face, if (g.find_script_index (*scripts, &script_index))
table_tag, script_collect_features (g,
*scripts, g.get_script (script_index),
&script_index)) languages,
_hb_ot_layout_collect_features_languages (face, features,
table_tag, feature_indexes);
script_index,
languages,
features,
feature_indexes);
} }
} }
} }