Fix matching against style names in presence of elision

This commit is contained in:
Kovid Goyal
2024-06-02 12:59:05 +05:30
parent 5774965e32
commit 18ab18d090
4 changed files with 18 additions and 2 deletions

View File

@@ -417,7 +417,7 @@ def get_named_style(face_or_descriptor: Union[Face, Descriptor]) -> Optional[Nam
d: Descriptor = face_or_descriptor
vd = get_variable_data_for_descriptor(d)
if d['descriptor_type'] == 'fontconfig':
ns = d.get('named_instance', -1)
ns = d.get('named_style', -1)
if ns > -1 and ns < len(vd['named_styles']):
return vd['named_styles'][ns]
axis_map = {}
@@ -444,7 +444,7 @@ def get_axis_map(face_or_descriptor: Union[Face, Descriptor]) -> Dict[str, float
d: Descriptor = face_or_descriptor
vd = get_variable_data_for_descriptor(d)
if d['descriptor_type'] == 'fontconfig':
ns = d.get('named_instance', -1)
ns = d.get('named_style', -1)
if ns > -1 and ns < len(vd['named_styles']):
base_axis_map = vd['named_styles'][ns]['axis_values'].copy()
axis_map = {}

View File

@@ -248,6 +248,11 @@ def set_named_style(name: str, font: CoreTextFont, vd: VariableData) -> bool:
for i, ns in enumerate(vd['named_styles']):
if ns['name'].lower() == q:
return set_axis_values(ns['axis_values'], font, vd)
if vd['elided_fallback_name']:
for i, ns in enumerate(vd['named_styles']):
eq = ' '.join(ns['name'].replace(vd['elided_fallback_name'], '').strip().split()).lower()
if q == eq:
return set_axis_values(ns['axis_values'], font, vd)
return False

View File

@@ -245,6 +245,12 @@ def set_named_style(name: str, font: FontConfigPattern, vd: VariableData) -> boo
if ns['name'].lower() == q:
font['named_style'] = i
return True
if vd['elided_fallback_name']:
for i, ns in enumerate(vd['named_styles']):
eq = ' '.join(ns['name'].replace(vd['elided_fallback_name'], '').strip().split()).lower()
if q == eq:
font['named_style'] = i
return True
return False

View File

@@ -114,6 +114,11 @@ class Selection(BaseTest):
self.ae(get_named_style(face)['name'], 'Black')
face = face_from_descriptor(ff['bi'])
self.ae(get_named_style(face)['name'], 'Black Italic')
opts.font_family = parse_font_spec('family=SourceCodeVF variable_name=SourceCodeUpright wght=470')
opts.italic_font = parse_font_spec('family=SourceCodeVF variable_name=SourceCodeItalic style=Black')
ff = get_font_files(opts)
self.assertFalse(get_named_style(ff['medium']))
self.ae(get_named_style(ff['italic'])['name'], 'Black Italic')
if has('cascadia code'):
opts = Options()
opts.font_family = parse_font_spec('family="cascadia code"')