refactor multilingual (load user settings on top)

This commit is contained in:
jfbu
2016-11-17 10:00:01 +01:00
parent b35539bd2e
commit 5663f750fe
+16 -22
View File
@@ -109,6 +109,7 @@ ADDITIONAL_SETTINGS = {
'xelatex': {
'latex_engine': 'xelatex',
'polyglossia': '\\usepackage{polyglossia}',
'babel': '',
'fontenc': '\\usepackage{fontspec}',
'fontpkg': '',
'utf8extra': ('\\catcode`^^^^00a0\\active\\protected\\def^^^^00a0'
@@ -372,6 +373,11 @@ class LaTeXTranslator(nodes.NodeVisitor):
# sort out some elements
self.elements = DEFAULT_SETTINGS.copy()
self.elements.update(ADDITIONAL_SETTINGS.get(builder.config.latex_engine, {}))
# allow the user to override them all
self.check_latex_elements()
self.elements.update(builder.config.latex_elements)
# but some have other interface in config file
self.elements.update({
'wrapperclass': self.format_docclass(document.settings.docclass),
# if empty, the title is set to the first section title
@@ -398,7 +404,8 @@ class LaTeXTranslator(nodes.NodeVisitor):
self.elements['logo'] = '\\sphinxincludegraphics{%s}\\par' % \
path.basename(builder.config.latex_logo)
if builder.config.language:
if builder.config.language \
and 'fncychap' not in builder.config.latex_elements:
# use Sonny style if any language specified
self.elements['fncychap'] = '\\usepackage[Sonny]{fncychap}'
@@ -414,17 +421,16 @@ class LaTeXTranslator(nodes.NodeVisitor):
self.elements['classoptions'] += ',' + self.babel.get_language()
# set up multilingual module...
if self.elements['polyglossia']:
self.elements['babel'] = '' # disable babel
self.elements['multilingual'] = '%s\n\\setmainlanguage{%s}' % \
(self.elements['polyglossia'], self.babel.get_language())
elif self.elements['babel']:
# 'babel' key is public and user setting must be obeyed
if self.elements['babel']:
# this branch is not taken for xelatex with writer default settings
self.elements['multilingual'] = self.elements['babel']
if builder.config.language:
self.elements['shorthandoff'] = self.babel.get_shorthandoff()
# Times fonts don't work with Cyrillic languages
if self.babel.uses_cyrillic():
if self.babel.uses_cyrillic() \
and 'fontpkg' not in builder.config.latex_elements:
self.elements['fontpkg'] = ''
# pTeX (Japanese TeX) for support
@@ -436,12 +442,9 @@ class LaTeXTranslator(nodes.NodeVisitor):
self.elements['multilingual'] = ''
# disable fncychap in Japanese documents
self.elements['fncychap'] = ''
# set 'babel' to improbable value to detect if user has used it
if self.elements['babel']:
self.elements['babel'] = '3.1415'
else:
self.elements['babel'] = '2.7182'
elif self.elements['polyglossia']:
self.elements['multilingual'] = '%s\n\\setmainlanguage{%s}' % \
(self.elements['polyglossia'], self.babel.get_language())
if getattr(builder, 'usepackages', None):
def declare_package(packagename, options=None):
@@ -468,15 +471,6 @@ class LaTeXTranslator(nodes.NodeVisitor):
if tocdepth >= SECNUMDEPTH:
# Increase secnumdepth if tocdepth is depther than default SECNUMDEPTH
self.elements['secnumdepth'] = '\\setcounter{secnumdepth}{%d}' % tocdepth
# allow the user to override them all
self.check_latex_elements()
self.elements.update(builder.config.latex_elements)
if self.elements['babel'] != '3.1415':
if self.elements['babel'] != '2.7182':
self.elements['multilingual'] = self.elements['babel']
else:
self.elements['babel'] = ''
if getattr(document.settings, 'contentsname', None):
self.elements['contentsname'] = \