diff --git a/src/ocrmypdf/font/multi_font_manager.py b/src/ocrmypdf/font/multi_font_manager.py index 4cd672ca..96283fde 100644 --- a/src/ocrmypdf/font/multi_font_manager.py +++ b/src/ocrmypdf/font/multi_font_manager.py @@ -153,10 +153,12 @@ class MultiFontManager: self.font_provider = font_provider else: # Use chained provider: try builtin fonts first, then system fonts - self.font_provider = ChainedFontProvider([ - BuiltinFontProvider(font_dir), - SystemFontProvider(), - ]) + self.font_provider = ChainedFontProvider( + [ + BuiltinFontProvider(font_dir), + SystemFontProvider(), + ] + ) # Font selection cache: (word_text, language) -> font_name self._selection_cache: dict[tuple[str, str | None], str] = {} @@ -235,9 +237,7 @@ class MultiFontManager: self._selection_cache[cache_key] = 'Occulta' return self.font_provider.get_fallback_font() - def _warn_missing_font( - self, word_text: str, line_language: str | None - ) -> None: + def _warn_missing_font(self, word_text: str, line_language: str | None) -> None: """Warn user about missing font for non-Latin text. Only warns once per language/script to avoid log spam. @@ -294,6 +294,17 @@ class MultiFontManager: return True + def has_font(self, font_name: str) -> bool: + """Check if a named font is available. + + Args: + font_name: Name of font to check + + Returns: + True if font is available + """ + return self.font_provider.get_font(font_name) is not None + def has_all_glyphs(self, font_name: str, text: str) -> bool: """Check if a named font has glyphs for all characters in text. diff --git a/tests/test_multilingual_direct.py b/tests/test_multilingual_direct.py index c0105e34..cc25c532 100644 --- a/tests/test_multilingual_direct.py +++ b/tests/test_multilingual_direct.py @@ -210,22 +210,22 @@ class TestArabicScript: def _latin_font_works(multi_font_manager) -> bool: """Check if Latin font is available.""" - return multi_font_manager.has_all_glyphs('NotoSans-Regular', 'A') + return multi_font_manager.has_font('NotoSans-Regular') def _arabic_font_works(multi_font_manager) -> bool: """Check if Arabic font is available.""" - return multi_font_manager.has_all_glyphs('NotoSansArabic-Regular', 'م') + return multi_font_manager.has_font('NotoSansArabic-Regular') def _devanagari_font_works(multi_font_manager) -> bool: """Check if Devanagari font is available.""" - return multi_font_manager.has_all_glyphs('NotoSansDevanagari-Regular', 'न') + return multi_font_manager.has_font('NotoSansDevanagari-Regular') def _cjk_font_works(multi_font_manager) -> bool: """Check if CJK font is working (not corrupted).""" - return multi_font_manager.has_all_glyphs('NotoSansCJK-Regular', '你') + return multi_font_manager.has_font('NotoSansCJK-Regular') class TestCJKScript: