Skip to content

Commit 1b39e89

Browse files
committed
Convert ft2font extension to pybind11
1 parent df1cfde commit 1b39e89

File tree

4 files changed

+703
-1067
lines changed

4 files changed

+703
-1067
lines changed

lib/matplotlib/ft2font.pyi

+58-31
Original file line numberDiff line numberDiff line change
@@ -160,27 +160,6 @@ class _SfntPcltDict(TypedDict):
160160

161161
@final
162162
class FT2Font:
163-
ascender: int
164-
bbox: tuple[int, int, int, int]
165-
descender: int
166-
face_flags: int
167-
family_name: str
168-
fname: str
169-
height: int
170-
max_advance_height: int
171-
max_advance_width: int
172-
num_charmaps: int
173-
num_faces: int
174-
num_fixed_sizes: int
175-
num_glyphs: int
176-
postscript_name: str
177-
scalable: bool
178-
style_flags: int
179-
style_name: str
180-
underline_position: int
181-
underline_thickness: int
182-
units_per_EM: int
183-
184163
def __init__(
185164
self,
186165
filename: str | BinaryIO,
@@ -232,6 +211,46 @@ class FT2Font:
232211
def set_text(
233212
self, string: str, angle: float = ..., flags: int = ...
234213
) -> NDArray[np.float64]: ...
214+
@property
215+
def ascender(self) -> int: ...
216+
@property
217+
def bbox(self) -> tuple[int, int, int, int]: ...
218+
@property
219+
def descender(self) -> int: ...
220+
@property
221+
def face_flags(self) -> int: ...
222+
@property
223+
def family_name(self) -> str: ...
224+
@property
225+
def fname(self) -> str: ...
226+
@property
227+
def height(self) -> int: ...
228+
@property
229+
def max_advance_height(self) -> int: ...
230+
@property
231+
def max_advance_width(self) -> int: ...
232+
@property
233+
def num_charmaps(self) -> int: ...
234+
@property
235+
def num_faces(self) -> int: ...
236+
@property
237+
def num_fixed_sizes(self) -> int: ...
238+
@property
239+
def num_glyphs(self) -> int: ...
240+
@property
241+
def postscript_name(self) -> str: ...
242+
@property
243+
def scalable(self) -> bool: ...
244+
@property
245+
def style_flags(self) -> int: ...
246+
@property
247+
def style_name(self) -> str: ...
248+
@property
249+
def underline_position(self) -> int: ...
250+
@property
251+
def underline_thickness(self) -> int: ...
252+
@property
253+
def units_per_EM(self) -> int: ...
235254

236255
@final
237256
class FT2Image: # TODO: When updating mypy>=1.4, subclass from Buffer.
@@ -240,15 +259,23 @@ class FT2Image: # TODO: When updating mypy>=1.4, subclass from Buffer.
240259

241260
@final
242261
class Glyph:
243-
width: int
244-
height: int
245-
horiBearingX: int
246-
horiBearingY: int
247-
horiAdvance: int
248-
linearHoriAdvance: int
249-
vertBearingX: int
250-
vertBearingY: int
251-
vertAdvance: int
252-
262+
@property
263+
def width(self) -> int: ...
264+
@property
265+
def height(self) -> int: ...
266+
@property
267+
def horiBearingX(self) -> int: ...
268+
@property
269+
def horiBearingY(self) -> int: ...
270+
@property
271+
def horiAdvance(self) -> int: ...
272+
@property
273+
def linearHoriAdvance(self) -> int: ...
274+
@property
275+
def vertBearingX(self) -> int: ...
276+
@property
277+
def vertBearingY(self) -> int: ...
278+
@property
279+
def vertAdvance(self) -> int: ...
253280
@property
254281
def bbox(self) -> tuple[int, int, int, int]: ...

lib/matplotlib/tests/test_ft2font.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@ def test_ft2font_invalid_args(tmp_path):
130130
# filename argument.
131131
with pytest.raises(TypeError, match='to a font file or a binary-mode file object'):
132132
ft2font.FT2Font(None)
133+
with pytest.raises(TypeError, match='to a font file or a binary-mode file object'):
134+
ft2font.FT2Font(object()) # Not bytes or string, and has no read() method.
133135
file = tmp_path / 'invalid-font.ttf'
134136
file.write_text('This is not a valid font file.')
135137
with (pytest.raises(TypeError, match='to a font file or a binary-mode file object'),
@@ -145,7 +147,7 @@ def test_ft2font_invalid_args(tmp_path):
145147
file = fm.findfont('DejaVu Sans')
146148

147149
# hinting_factor argument.
148-
with pytest.raises(TypeError, match='cannot be interpreted as an integer'):
150+
with pytest.raises(TypeError, match='incompatible constructor arguments'):
149151
ft2font.FT2Font(file, 1.3)
150152
with pytest.raises(ValueError, match='hinting_factor must be greater than 0'):
151153
ft2font.FT2Font(file, 0)
@@ -157,7 +159,7 @@ def test_ft2font_invalid_args(tmp_path):
157159
ft2font.FT2Font(file, _fallback_list=[0]) # type: ignore[list-item]
158160

159161
# kerning_factor argument.
160-
with pytest.raises(TypeError, match='cannot be interpreted as an integer'):
162+
with pytest.raises(TypeError, match='incompatible constructor arguments'):
161163
ft2font.FT2Font(file, _kerning_factor=1.3)
162164

163165

0 commit comments

Comments
 (0)