def find_font_features(postscript_name: str) -> Tuple[str, ...]: pat = fc_match_postscript_name(postscript_name) if pat.get('postscript_name') != postscript_name or 'fontfeatures' not in pat: return () features = [] for feat in pat['fontfeatures']: try: parsed = parse_font_feature(feat) except ValueError: log_error('Ignoring invalid font feature: {}'.format(feat)) else: features.append(FontFeature(feat, parsed)) return tuple(features)
def font_features(val: str) -> Iterable[Tuple[str, Tuple[FontFeature, ...]]]: if val == 'none': return parts = val.split() if len(parts) < 2: log_error(f"Ignoring invalid font_features {val}") return if parts[0]: features = [] for feat in parts[1:]: try: parsed = defines.parse_font_feature(feat) except ValueError: log_error(f'Ignoring invalid font feature: {feat}') else: features.append(FontFeature(feat, parsed)) yield parts[0], tuple(features)