idconvert/backend/export/fonts.py

39 lines
1.4 KiB
Python

from __future__ import annotations
from typing import Optional, Tuple
SYSTEM_SAFE = {
'Arial', 'Helvetica', 'Times New Roman', 'Georgia',
'Calibri', 'Cambria', 'Trebuchet MS', 'Verdana',
'Courier New', 'Tahoma', 'Garamond',
}
SUBSTITUTION_MAP = {
'Freight Text Pro': ('Georgia', 'serif body substitute'),
'Minion Pro': ('Georgia', 'serif body substitute'),
'Proxima Nova': ('Calibri', 'sans-serif substitute'),
'Myriad Pro': ('Calibri', 'sans-serif substitute'),
'Futura PT': ('Trebuchet MS', 'geometric sans substitute'),
'Neue Haas Grotesk': ('Arial', 'neutral sans substitute'),
'Brandon Grotesque': ('Trebuchet MS', 'geometric sans substitute'),
'Cormorant Garamond': ('Garamond', 'close serif match'),
'Acumin Pro': ('Calibri', 'sans-serif substitute'),
'Adobe Caslon Pro': ('Georgia', 'serif body substitute'),
}
def classify_font(name: str) -> str:
"""Returns 'safe', 'professional', or 'unknown'."""
if name in SYSTEM_SAFE:
return 'safe'
if name in SUBSTITUTION_MAP:
return 'professional'
return 'unknown'
def get_substitute(name: str) -> Tuple[Optional[str], Optional[str]]:
"""Returns (substitute_name, quality_note) or (None, None)."""
if name in SUBSTITUTION_MAP:
return SUBSTITUTION_MAP[name]
return None, None