def _cache_fonts_win32():
"""Caches fonts on a Win32 platform."""
key = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts"
regfonts = []
try:
with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key) as fontkey:
idx = 0
enumval = winreg.EnumValue
rappend = regfonts.append
while True:
rappend(enumval(fontkey, idx)[:2])
idx += 1
except WindowsError:
pass
# TODO: integrate alias handling for fonts within the registry.
# TODO: Scan and index fonts from %SystemRoot%\\Fonts that are not in the
# registry
# Received all fonts from the registry.
for name, filename in regfonts:
fonttype = os.path.splitext(filename)[1][1:].lower()
if name.endswith("(TrueType)"):
name = name[:-10].strip()
if name.endswith("(All Res)"):
name = name[:-9].strip()
style = STYLE_NORMAL
if name.find(" Bold") >= 0:
style |= STYLE_BOLD
if name.find(" Italic") >= 0 or name.find(" Oblique") >= 0:
style |= STYLE_ITALIC
family = name
for rm in ("Bold", "Italic", "Oblique"):
family = family.replace(rm, "")
family = family.lower().strip()
fontpath = os.environ.get("SystemRoot", "C:\\Windows")
fontpath = os.path.join(fontpath, "Fonts")
if filename.find("\\") == -1:
# No path delimiter is given; we assume it to be a font in
# %SystemRoot%\Fonts
filename = os.path.join(fontpath, filename)
_add_font(family, name, style, fonttype, filename)
评论列表
文章目录