Fonts¶
Create a system font table in fonts.html.
- Requires:
pip install matplotlib
from pathlib import Path
from html import escape
from matplotlib import font_manager
def get_system_font_names():
fonts = font_manager.findSystemFonts(fontpaths=None, fontext="ttf")
fonts += font_manager.findSystemFonts(fontpaths=None, fontext="otf")
names = set()
for font_path in fonts:
try:
prop = font_manager.FontProperties(fname=font_path)
name = prop.get_name()
if name:
names.add(name)
except Exception:
# Some font files may be unreadable or unsupported
pass
return sorted(names, key=str.casefold)
def main():
font_names = get_system_font_names()
html_parts = [
"""<html>
<head>
<title>System Fonts</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<ul>
"""
]
prev_ch = None
for i, font_name in enumerate(font_names):
first_ch = font_name[0].upper() if font_name else ""
if first_ch != prev_ch:
if prev_ch is not None:
html_parts.append("</li>\n")
html_parts.append("<li>\n")
prev_ch = first_ch
print(f"{i}: {font_name}")
safe_font_name = escape(font_name, quote=True)
html_parts.append(
f'<span style="font-family: \'{safe_font_name}\', sans-serif;">'
f'{safe_font_name} '
f'<span style="color: silver;">зпт</span>'
f'</span>\n'
)
if prev_ch is not None:
html_parts.append("</li>\n")
html_parts.append(
"""</ul>
</body>
</html>
"""
)
Path("fonts.html").write_text("".join(html_parts), encoding="utf-8")
print("---------------")
print(f"total: {len(font_names)}")
if __name__ == "__main__":
main()