[OT] Save chosen script tag
This commit is contained in:
parent
3a9b14dfdf
commit
c47a31fb47
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue