mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Merge pull request #7260 from tk0miya/refactor_latex2
refactor: latex: Move initialization of multilingual module to builder
This commit is contained in:
commit
c767f44386
@ -20,7 +20,7 @@ import sphinx.builders.latex.nodes # NOQA # Workaround: import this before wri
|
||||
from sphinx import package_dir, addnodes, highlighting
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.builders import Builder
|
||||
from sphinx.builders.latex.constants import ADDITIONAL_SETTINGS, DEFAULT_SETTINGS
|
||||
from sphinx.builders.latex.constants import ADDITIONAL_SETTINGS, DEFAULT_SETTINGS, SHORTHANDOFF
|
||||
from sphinx.builders.latex.theming import Theme, ThemeFactory
|
||||
from sphinx.builders.latex.util import ExtBabel
|
||||
from sphinx.config import Config, ENUM
|
||||
@ -133,6 +133,7 @@ class LaTeXBuilder(Builder):
|
||||
|
||||
self.init_context()
|
||||
self.init_babel()
|
||||
self.init_multilingual()
|
||||
|
||||
def get_outdated_docs(self) -> Union[str, List[str]]:
|
||||
return 'all documents' # for now
|
||||
@ -208,6 +209,41 @@ class LaTeXBuilder(Builder):
|
||||
logger.warning(__('no Babel option known for language %r'),
|
||||
self.config.language)
|
||||
|
||||
def init_multilingual(self) -> None:
|
||||
if self.context['latex_engine'] == 'pdflatex':
|
||||
if not self.babel.uses_cyrillic():
|
||||
if 'X2' in self.context['fontenc']:
|
||||
self.context['substitutefont'] = '\\usepackage{substitutefont}'
|
||||
self.context['textcyrillic'] = '\\usepackage[Xtwo]{sphinxcyrillic}'
|
||||
elif 'T2A' in self.context['fontenc']:
|
||||
self.context['substitutefont'] = '\\usepackage{substitutefont}'
|
||||
self.context['textcyrillic'] = '\\usepackage[TtwoA]{sphinxcyrillic}'
|
||||
if 'LGR' in self.context['fontenc']:
|
||||
self.context['substitutefont'] = '\\usepackage{substitutefont}'
|
||||
else:
|
||||
self.context['textgreek'] = ''
|
||||
|
||||
# 'babel' key is public and user setting must be obeyed
|
||||
if self.context['babel']:
|
||||
self.context['classoptions'] += ',' + self.babel.get_language()
|
||||
# this branch is not taken for xelatex/lualatex if default settings
|
||||
self.context['multilingual'] = self.context['babel']
|
||||
if self.config.language:
|
||||
self.context['shorthandoff'] = SHORTHANDOFF
|
||||
|
||||
# Times fonts don't work with Cyrillic languages
|
||||
if self.babel.uses_cyrillic() and 'fontpkg' not in self.config.latex_elements:
|
||||
self.context['fontpkg'] = ''
|
||||
elif self.context['polyglossia']:
|
||||
self.context['classoptions'] += ',' + self.babel.get_language()
|
||||
options = self.babel.get_mainlanguage_options()
|
||||
if options:
|
||||
language = r'\setmainlanguage[%s]{%s}' % (options, self.babel.get_language())
|
||||
else:
|
||||
language = r'\setmainlanguage{%s}' % self.babel.get_language()
|
||||
|
||||
self.context['multilingual'] = '%s\n%s' % (self.context['polyglossia'], language)
|
||||
|
||||
def write_stylesheet(self) -> None:
|
||||
highlighter = highlighting.PygmentsBridge('latex', self.config.pygments_style)
|
||||
stylesheet = path.join(self.outdir, 'sphinxhighlight.sty')
|
||||
|
@ -192,3 +192,11 @@ ADDITIONAL_SETTINGS = {
|
||||
'fontpkg': XELATEX_GREEK_DEFAULT_FONTPKG,
|
||||
},
|
||||
} # type: Dict[Any, Dict[str, Any]]
|
||||
|
||||
|
||||
SHORTHANDOFF = r'''
|
||||
\ifdefined\shorthandoff
|
||||
\ifnum\catcode`\=\string=\active\shorthandoff{=}\fi
|
||||
\ifnum\catcode`\"=\active\shorthandoff{"}\fi
|
||||
\fi
|
||||
'''
|
||||
|
@ -50,13 +50,6 @@ if False:
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
SHORTHANDOFF = r'''
|
||||
\ifdefined\shorthandoff
|
||||
\ifnum\catcode`\=\string=\active\shorthandoff{=}\fi
|
||||
\ifnum\catcode`\"=\active\shorthandoff{"}\fi
|
||||
\fi
|
||||
'''
|
||||
|
||||
MAX_CITATION_LABEL_LENGTH = 8
|
||||
LATEXSECTIONNAMES = ["part", "chapter", "section", "subsection",
|
||||
"subsubsection", "paragraph", "subparagraph"]
|
||||
@ -395,44 +388,6 @@ class LaTeXTranslator(SphinxTranslator):
|
||||
logger.warning(__('no Babel option known for language %r'),
|
||||
self.config.language)
|
||||
|
||||
# set up multilingual module...
|
||||
if self.elements['latex_engine'] == 'pdflatex':
|
||||
if not self.babel.uses_cyrillic():
|
||||
if 'X2' in self.elements['fontenc']:
|
||||
self.elements['substitutefont'] = '\\usepackage{substitutefont}'
|
||||
self.elements['textcyrillic'] = ('\\usepackage[Xtwo]'
|
||||
'{sphinxcyrillic}')
|
||||
elif 'T2A' in self.elements['fontenc']:
|
||||
self.elements['substitutefont'] = '\\usepackage{substitutefont}'
|
||||
self.elements['textcyrillic'] = ('\\usepackage[TtwoA]'
|
||||
'{sphinxcyrillic}')
|
||||
if 'LGR' in self.elements['fontenc']:
|
||||
self.elements['substitutefont'] = '\\usepackage{substitutefont}'
|
||||
else:
|
||||
self.elements['textgreek'] = ''
|
||||
# 'babel' key is public and user setting must be obeyed
|
||||
if self.elements['babel']:
|
||||
self.elements['classoptions'] += ',' + self.babel.get_language()
|
||||
# this branch is not taken for xelatex/lualatex if default settings
|
||||
self.elements['multilingual'] = self.elements['babel']
|
||||
if self.config.language:
|
||||
self.elements['shorthandoff'] = SHORTHANDOFF
|
||||
|
||||
# Times fonts don't work with Cyrillic languages
|
||||
if self.babel.uses_cyrillic() and 'fontpkg' not in self.config.latex_elements:
|
||||
self.elements['fontpkg'] = ''
|
||||
elif self.elements['polyglossia']:
|
||||
self.elements['classoptions'] += ',' + self.babel.get_language()
|
||||
options = self.babel.get_mainlanguage_options()
|
||||
if options:
|
||||
mainlanguage = r'\setmainlanguage[%s]{%s}' % (options,
|
||||
self.babel.get_language())
|
||||
else:
|
||||
mainlanguage = r'\setmainlanguage{%s}' % self.babel.get_language()
|
||||
|
||||
self.elements['multilingual'] = '%s\n%s' % (self.elements['polyglossia'],
|
||||
mainlanguage)
|
||||
|
||||
minsecnumdepth = self.secnumdepth # 2 from legacy sphinx manual/howto
|
||||
if self.document.get('tocdepth'):
|
||||
# reduce tocdepth if `part` or `chapter` is used for top_sectionlevel
|
||||
@ -2177,6 +2132,7 @@ deprecated_alias('sphinx.writers.latex',
|
||||
'DEFAULT_SETTINGS': constants.DEFAULT_SETTINGS,
|
||||
'LUALATEX_DEFAULT_FONTPKG': constants.LUALATEX_DEFAULT_FONTPKG,
|
||||
'PDFLATEX_DEFAULT_FONTPKG': constants.PDFLATEX_DEFAULT_FONTPKG,
|
||||
'SHORTHANDOFF': constants.SHORTHANDOFF,
|
||||
'XELATEX_DEFAULT_FONTPKG': constants.XELATEX_DEFAULT_FONTPKG,
|
||||
'XELATEX_GREEK_DEFAULT_FONTPKG': constants.XELATEX_GREEK_DEFAULT_FONTPKG,
|
||||
'ExtBabel': ExtBabel,
|
||||
|
@ -99,7 +99,7 @@ def skip_if_stylefiles_notfound(testfunc):
|
||||
def test_build_latex_doc(app, status, warning, engine, docclass):
|
||||
app.config.latex_engine = engine
|
||||
app.config.latex_documents = [app.config.latex_documents[0][:4] + (docclass,)]
|
||||
app.builder.init_context()
|
||||
app.builder.init()
|
||||
|
||||
LaTeXTranslator.ignore_missing_images = True
|
||||
app.builder.build_all()
|
||||
|
Loading…
Reference in New Issue
Block a user