8000 added font-face style attribute to load custom fonts from local path · matplotlib/matplotlib@171d8d5 · GitHub
[go: up one dir, main page]

Skip to content

Commit 171d8d5

Browse files
committed
added font-face style attribute to load custom fonts from local path
1 parent c488353 commit 171d8d5

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

lib/matplotlib/font_manager.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,25 @@ def findSystemFonts(fontpaths=None, fontext='ttf'):
380380
return [fname for fname in fontfiles if os.path.exists(fname)]
381381

382382

383+
def fontentry_helper_repr_html_(fontent):
384+
html = (f"<span style='font-family:{fontent.name}'>"
385+
f'{fontent.name}'
386+
'</span>')
387+
388+
if fontent.fname == '':
389+
return html
390+
else:
391+
return ('<span>'
392+
'<style>'
393+
'@font-face { '
394+
f'font-family: {fontent.name}; '
395+
f'src: url({fontent.fname}); '
396+
'} '
397+
'</style>'
398+
f'{html}'
399+
'</span>')
400+
401+
383402
FontEntry = dataclasses.make_dataclass(
384403
'FontEntry', [
385404
('fname', str, dataclasses.field(default='')),
@@ -396,7 +415,7 @@ def findSystemFonts(fontpaths=None, fontext='ttf'):
396415
397416
It is used when populating the font lookup dictionary.
398417
""",
399-
'_repr_html_': lambda self: f"<span style='font-family:{self.name}'>{self.name}</span>", # noqa: E501
418+
'_repr_html_': lambda self: fontentry_helper_repr_html_(self),
400419
}
401420
)
402421

lib/matplotlib/tests/test_font_manager.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -270,10 +270,12 @@ def test_fontcache_thread_safe():
270270

271271

272272
def test_fontentry_dataclass():
273-
entry = FontEntry(name="font-name")
273+
fontent1 = FontEntry(name='font-name')
274+
fontent2 = FontEntry(fname='/random', name='font-name')
274275

275-
assert type(entry.__doc__) == str
276-
assert entry._repr_html_() == "<span style='font-family:font-name'>font-name</span>" # noqa: E501
276+
assert type(fontent1.__doc__) == str
277+
assert '@font-face' not in fontent1._repr_html_()
278+
assert '@font-face' in fontent2._repr_html_()
277279

278280

279281
@pytest.mark.skipif(sys.platform == 'win32', reason='Linux or OS only')

0 commit comments

Comments
 (0)
0