| """Utilities for LaTeX builder.""" |
| |
| from __future__ import annotations |
| |
| from docutils.writers.latex2e import Babel |
| |
| |
| class ExtBabel(Babel): |
| cyrillic_languages = ('bulgarian', 'kazakh', 'mongolian', 'russian', 'ukrainian') |
| |
| def __init__(self, language_code: str, use_polyglossia: bool = False) -> None: |
| self.language_code = language_code |
| self.use_polyglossia = use_polyglossia |
| self.supported = True |
| super().__init__(language_code) |
| |
| def uses_cyrillic(self) -> bool: |
| return self.language in self.cyrillic_languages |
| |
| def is_supported_language(self) -> bool: |
| return self.supported |
| |
| def language_name(self, language_code: str) -> str: |
| language = super().language_name(language_code) |
| if language == 'ngerman' and self.use_polyglossia: |
| # polyglossia calls new orthography (Neue Rechtschreibung) as |
| # german (with new spelling option). |
| return 'german' |
| elif language: |
| return language |
| elif language_code.startswith('zh'): |
| return 'english' # fallback to english (behaves like supported) |
| else: |
| self.supported = False |
| return 'english' # fallback to english |
| |
| def get_mainlanguage_options(self) -> str | None: |
| """Return options for polyglossia's ``\\setmainlanguage``.""" |
| if self.use_polyglossia is False: |
| return None |
| elif self.language == 'german': |
| language = super().language_name(self.language_code) |
| if language == 'ngerman': |
| return 'spelling=new' |
| else: |
| return 'spelling=old' |
| else: |
| return None |