Special-case 'smcp' when checking for exposed AAT features.

This may be implemented by selectors under either LETTER_CASE or LOWER_CASE feature types
in AAT, so we need to check for the presence of either one.

Fixes #2307.
This commit is contained in:
Jonathan Kew 2020-04-03 16:10:34 +01:00 committed by Ebrahim Byagowi
parent 120d86fa18
commit 1faf0caae1
1 changed files with 11 additions and 1 deletions

View File

@ -53,7 +53,17 @@ void hb_aat_map_builder_t::add_feature (hb_tag_t tag, unsigned value)
const hb_aat_feature_mapping_t *mapping = hb_aat_layout_find_feature_mapping (tag);
if (!mapping) return;
if (!face->table.feat->exposes_feature (mapping->aatFeatureType)) return;
if (!face->table.feat->exposes_feature (mapping->aatFeatureType))
{
// Special case: Chain::compile_flags will fall back to the deprecated version of
// small-caps if necessary, so we need to check for that possibility.
if (mapping->aatFeatureType == HB_AAT_LAYOUT_FEATURE_TYPE_LOWER_CASE &&
mapping->selectorToEnable == HB_AAT_LAYOUT_FEATURE_SELECTOR_LOWER_CASE_SMALL_CAPS)
{
if (!face->table.feat->exposes_feature (HB_AAT_LAYOUT_FEATURE_TYPE_LETTER_CASE)) return;
}
else return;
}
feature_info_t *info = features.push();
info->type = mapping->aatFeatureType;