[OT] Save chosen script tag

This commit is contained in:
Behdad Esfahbod 2011-07-30 20:57:01 -04:00
parent 3a9b14dfdf
commit c47a31fb47
4 changed files with 20 additions and 6 deletions

View File

@ -264,27 +264,39 @@ hb_bool_t
hb_ot_layout_table_choose_script (hb_face_t *face, hb_ot_layout_table_choose_script (hb_face_t *face,
hb_tag_t table_tag, hb_tag_t table_tag,
const hb_tag_t *script_tags, const hb_tag_t *script_tags,
unsigned int *script_index) unsigned int *script_index,
hb_tag_t *chosen_script)
{ {
ASSERT_STATIC (Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_SCRIPT_INDEX); ASSERT_STATIC (Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_SCRIPT_INDEX);
const GSUBGPOS &g = get_gsubgpos_table (face, table_tag); const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
while (*script_tags) while (*script_tags)
{ {
if (g.find_script_index (*script_tags, script_index)) if (g.find_script_index (*script_tags, script_index)) {
if (chosen_script)
*chosen_script = *script_tags;
return TRUE; return TRUE;
}
script_tags++; script_tags++;
} }
/* try finding 'DFLT' */ /* try finding 'DFLT' */
if (g.find_script_index (HB_OT_TAG_DEFAULT_SCRIPT, script_index)) if (g.find_script_index (HB_OT_TAG_DEFAULT_SCRIPT, script_index)) {
if (chosen_script)
*chosen_script = HB_OT_TAG_DEFAULT_SCRIPT;
return FALSE; return FALSE;
}
/* try with 'dflt'; MS site has had typos and many fonts use it now :( */ /* try with 'dflt'; MS site has had typos and many fonts use it now :( */
if (g.find_script_index (HB_OT_TAG_DEFAULT_LANGUAGE, script_index)) if (g.find_script_index (HB_OT_TAG_DEFAULT_LANGUAGE, script_index)) {
if (chosen_script)
*chosen_script = HB_OT_TAG_DEFAULT_LANGUAGE;
return FALSE; return FALSE;
}
if (script_index) *script_index = HB_OT_LAYOUT_NO_SCRIPT_INDEX; if (script_index) *script_index = HB_OT_LAYOUT_NO_SCRIPT_INDEX;
if (chosen_script)
*chosen_script = HB_OT_LAYOUT_NO_SCRIPT_INDEX;
return FALSE; return FALSE;
} }

View File

@ -92,7 +92,8 @@ hb_bool_t
hb_ot_layout_table_choose_script (hb_face_t *face, hb_ot_layout_table_choose_script (hb_face_t *face,
hb_tag_t table_tag, hb_tag_t table_tag,
const hb_tag_t *script_tags, const hb_tag_t *script_tags,
unsigned int *script_index); unsigned int *script_index,
hb_tag_t *chosen_script);
unsigned int unsigned int
hb_ot_layout_table_get_feature_tags (hb_face_t *face, hb_ot_layout_table_get_feature_tags (hb_face_t *face,

View File

@ -123,6 +123,7 @@ struct hb_ot_map_t
hb_mask_t global_mask; hb_mask_t global_mask;
hb_tag_t chosen_script[2];
hb_prealloced_array_t<feature_map_t, 8> features; hb_prealloced_array_t<feature_map_t, 8> features;
hb_prealloced_array_t<lookup_map_t, 32> lookups[2]; /* GSUB/GPOS */ hb_prealloced_array_t<lookup_map_t, 32> lookups[2]; /* GSUB/GPOS */
hb_prealloced_array_t<pause_map_t, 1> pauses[2]; /* GSUB/GPOS */ hb_prealloced_array_t<pause_map_t, 1> pauses[2]; /* GSUB/GPOS */

View File

@ -134,7 +134,7 @@ hb_ot_map_builder_t::compile (hb_face_t *face,
unsigned int script_index[2], language_index[2]; unsigned int script_index[2], language_index[2];
for (unsigned int table_index = 0; table_index < 2; table_index++) { for (unsigned int table_index = 0; table_index < 2; table_index++) {
hb_tag_t table_tag = table_tags[table_index]; hb_tag_t table_tag = table_tags[table_index];
hb_ot_layout_table_choose_script (face, table_tag, script_tags, &script_index[table_index]); hb_ot_layout_table_choose_script (face, table_tag, script_tags, &script_index[table_index], &m.chosen_script[table_index]);
hb_ot_layout_script_find_language (face, table_tag, script_index[table_index], language_tag, &language_index[table_index]); hb_ot_layout_script_find_language (face, table_tag, script_index[table_index], language_tag, &language_index[table_index]);
} }