49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
"""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
|