refactor ensure glyphs + alternates

This commit is contained in:
jrkb 2025-06-04 14:47:09 +02:00
parent 14d1b7a160
commit 7de8fcc5d1
3 changed files with 332 additions and 129 deletions

View file

@ -266,7 +266,13 @@ def get_glyphs(font_name, face_name, glyph_id):
return glyphs_for_id
def get_glyph(font_name, face_name, glyph_id, alternate=0):
def get_glyph(
font_name: str,
face_name: str,
glyph_id: str,
alternate: int = 0,
alternate_tolerant: bool = True,
):
"""add_glyph adds a glyph to a FontFace
it creates the :class:`Font` and :class:`FontFace` if it does not exist yet
@ -276,6 +282,10 @@ def get_glyph(font_name, face_name, glyph_id, alternate=0):
:type face_name: str
:param glyph_id: The ``glyph_id`` from the glyph you want
:type glyph_id: str
:param alternate: The ``alternate`` from the glyph you want
:type alternate: int
:param alternate_tolerant: Fetch an existing alternate if requested is out of bounds
:type glyph_id: bool
...
:return: returns the glyph object, or ``None`` if it does not exist
:rtype: `Object`
@ -283,12 +293,21 @@ def get_glyph(font_name, face_name, glyph_id, alternate=0):
glyphs = get_glyphs(font_name, face_name, glyph_id)
if len(glyphs) <= alternate or len(glyphs) == 0:
if len(glyphs) == 0:
print(
f"ABC3D::get_glyph: font({font_name}) face({face_name}) glyph({glyph_id})[{alternate}] not found"
)
return None
if len(glyphs) <= alternate:
if alternate_tolerant:
alternate = 0
else:
print(
f"ABC3D::get_glyph: font({font_name}) face({face_name}) glyph({glyph_id})[{alternate}] not found"
)
return None
return glyphs[alternate]