Source code for smufolib.objects.glyph

# pylint: disable=C0114
from __future__ import annotations

from fontParts.fontshell.glyph import RGlyph
from smufolib.objects.smufl import NAMES_LIB_KEY, Smufl
from smufolib.objects import _lib


[docs] class Glyph(RGlyph): """SMufoLib environment implementation of :class:`fontParts.base.BaseGlyph`. .. versionchanged:: 0.6.0 The ``__repr__`` now includes the canonoical SMuFL glyph name (if present) in square brackets. This object is typically accessed through a :class:`.Font` object's inherent glyph dictionary. To instantiate the SMuFL glyph named U+E050 (*gClef*): >>> glyph = font["uniE050"] A glyph may also be instantiated independently and assigned to a font or glyph later: >>> glyph = Glyph() # doctest: +SKIP """ def _reprContents(self) -> list[str]: # Adds bracketed smufl name if available contents = [f"'{self.name}'"] smuflName = getattr(self.smufl, "name", None) if smuflName: contents.append(f"['{smuflName}']") if self.layer is not None: contents.append(f"('{self.layer.name}')") return contents def _set_name(self, value: str) -> None: # Set the name of the glyph and update :attr:`.Font.lib` if necessary. if self.font is not None: namesDict = _lib.getLibSubdict(self.font, NAMES_LIB_KEY) smuflName = self.smufl.name if namesDict and smuflName and self.naked().name in namesDict.values(): namesDict[smuflName] = value self.naked().name = value @property def smufl(self) -> Smufl: """Glyph-specific instance of :class:`~smufolib.objects.smufl.Smufl`.""" return Smufl(glyph=self)