Spaces:
Sleeping
Sleeping
| from pathlib import Path | |
| from fontTools.ttLib import TTFont | |
| import logging | |
| from typing import Dict | |
| logger = logging.getLogger(__name__) | |
| class FontManager: | |
| FONT_MAPPING = { | |
| 'Gotham Black': 'Gotham-Black.otf', | |
| 'Montserrat': 'Montserrat-Black.ttf', | |
| 'Montserrat Bold': 'Montserrat-Bold.ttf', | |
| 'Montserrat Extra': 'Montserrat-ExtraBold.ttf', | |
| 'Urbanist Italic': 'Urbanist-Italic.ttf', | |
| 'Urbanist': 'Urbanist-Variable.ttf' | |
| } | |
| def __init__(self): | |
| self.font_dir = Path(__file__).parent.parent / "fonts" | |
| self.font_dir.mkdir(exist_ok=True) | |
| self.fonts_cache: Dict[str, str] = {} | |
| self.default_font = "Montserrat-Black.ttf" | |
| self._load_fonts() | |
| def _load_fonts(self): | |
| """Charge et valide toutes les polices disponibles""" | |
| for font_path in self.font_dir.glob("*.[ot]tf"): | |
| try: | |
| font = TTFont(font_path) | |
| font_name = font['name'].getName(4, 3, 1, 1033) | |
| if font_name: | |
| self.fonts_cache[font_path.name.lower()] = str(font_path) | |
| font.close() | |
| except Exception as e: | |
| logger.warning(f"Impossible de charger la police {font_path}: {e}") | |
| def get_font_path(self, font_name: str) -> str: | |
| """Retourne le chemin de la police demandée ou de la police par défaut""" | |
| if not font_name: | |
| return str(self.font_dir / self.default_font) | |
| # Chercher d'abord dans le mapping des noms | |
| mapped_name = self.FONT_MAPPING.get(font_name) | |
| if mapped_name: | |
| font_path = self.fonts_cache.get(mapped_name.lower()) | |
| if font_path: | |
| return font_path | |
| # Si pas trouvé, essayer avec le nom direct | |
| font_name = font_name.lower().replace(" ", "-") | |
| font_path = self.fonts_cache.get(f"{font_name}.ttf") or self.fonts_cache.get(f"{font_name}.otf") | |
| if not font_path: | |
| logger.warning(f"Police {font_name} non trouvée, utilisation de la police par défaut") | |
| return str(self.font_dir / self.default_font) | |
| return font_path |