datatypes.data_fontmetrics

 1from dataclasses import dataclass, field
 2from lib import helpers
 3import drawBot
 4
 5
 6@dataclass
 7class DFontMetrics:
 8    """A dataclass for extracting and storing key font metrics from a font file using DrawBot."""
 9
10    fontPath: str
11    """File path to the font"""
12    factors: tuple[float, float] = 1, 1
13    """Scale factors for ascender and descender"""
14    ascender: int = field(init=False)
15    """The ascender height of the font, scaled by the ascender factor."""
16    cap: int = field(init=False)
17    """The cap height of the font."""
18    xheight: int = field(init=False)
19    """The x-height of the font."""
20    descender: int = field(init=False)
21    """The descender height of the font, scaled by the descender factor."""
22
23    def __post_init__(self):
24        drawBot.font(self.fontPath)
25
26        factorAsc, factorDesc = self.factors
27        self.ascender = drawBot.fontAscender() * factorAsc
28        self.cap = drawBot.fontCapHeight()
29        self.xheight = drawBot.fontXHeight()
30        self.baseline = 0
31        self.descender = drawBot.fontDescender() * factorDesc
32
33    @property
34    def values(self):
35        """
36        Returns a list of font metric values.
37
38        The returned list includes the following metrics (in order):
39
40        - ascender (excluded if within 10 units of cap height)
41        - cap height
42        - x-height
43        - baseline
44        - descender
45
46        Returns:
47            A list of font metric values with None values removed.
48        """
49
50        return helpers.removeNone(
51            [
52                (
53                    self.ascender
54                    if not helpers.isInRange(
55                        self.cap - 10, self.cap + 10, self.ascender
56                    )
57                    else None
58                ),
59                self.cap,
60                self.xheight,
61                self.baseline,
62                self.descender,
63            ]
64        )
@dataclass
class DFontMetrics:
 7@dataclass
 8class DFontMetrics:
 9    """A dataclass for extracting and storing key font metrics from a font file using DrawBot."""
10
11    fontPath: str
12    """File path to the font"""
13    factors: tuple[float, float] = 1, 1
14    """Scale factors for ascender and descender"""
15    ascender: int = field(init=False)
16    """The ascender height of the font, scaled by the ascender factor."""
17    cap: int = field(init=False)
18    """The cap height of the font."""
19    xheight: int = field(init=False)
20    """The x-height of the font."""
21    descender: int = field(init=False)
22    """The descender height of the font, scaled by the descender factor."""
23
24    def __post_init__(self):
25        drawBot.font(self.fontPath)
26
27        factorAsc, factorDesc = self.factors
28        self.ascender = drawBot.fontAscender() * factorAsc
29        self.cap = drawBot.fontCapHeight()
30        self.xheight = drawBot.fontXHeight()
31        self.baseline = 0
32        self.descender = drawBot.fontDescender() * factorDesc
33
34    @property
35    def values(self):
36        """
37        Returns a list of font metric values.
38
39        The returned list includes the following metrics (in order):
40
41        - ascender (excluded if within 10 units of cap height)
42        - cap height
43        - x-height
44        - baseline
45        - descender
46
47        Returns:
48            A list of font metric values with None values removed.
49        """
50
51        return helpers.removeNone(
52            [
53                (
54                    self.ascender
55                    if not helpers.isInRange(
56                        self.cap - 10, self.cap + 10, self.ascender
57                    )
58                    else None
59                ),
60                self.cap,
61                self.xheight,
62                self.baseline,
63                self.descender,
64            ]
65        )

A dataclass for extracting and storing key font metrics from a font file using DrawBot.

DFontMetrics(fontPath: str, factors: tuple[float, float] = (1, 1))
fontPath: str

File path to the font

factors: tuple[float, float] = (1, 1)

Scale factors for ascender and descender

ascender: int

The ascender height of the font, scaled by the ascender factor.

cap: int

The cap height of the font.

xheight: int

The x-height of the font.

descender: int

The descender height of the font, scaled by the descender factor.

values
34    @property
35    def values(self):
36        """
37        Returns a list of font metric values.
38
39        The returned list includes the following metrics (in order):
40
41        - ascender (excluded if within 10 units of cap height)
42        - cap height
43        - x-height
44        - baseline
45        - descender
46
47        Returns:
48            A list of font metric values with None values removed.
49        """
50
51        return helpers.removeNone(
52            [
53                (
54                    self.ascender
55                    if not helpers.isInRange(
56                        self.cap - 10, self.cap + 10, self.ascender
57                    )
58                    else None
59                ),
60                self.cap,
61                self.xheight,
62                self.baseline,
63                self.descender,
64            ]
65        )

Returns a list of font metric values.

The returned list includes the following metrics (in order):

  • ascender (excluded if within 10 units of cap height)
  • cap height
  • x-height
  • baseline
  • descender
Returns:

A list of font metric values with None values removed.