Improve font fallback checking
This commit is contained in:
@@ -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.
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user