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 import package_dir, addnodes, highlighting
|
||||||
from sphinx.application import Sphinx
|
from sphinx.application import Sphinx
|
||||||
from sphinx.builders import Builder
|
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.theming import Theme, ThemeFactory
|
||||||
from sphinx.builders.latex.util import ExtBabel
|
from sphinx.builders.latex.util import ExtBabel
|
||||||
from sphinx.config import Config, ENUM
|
from sphinx.config import Config, ENUM
|
||||||
@ -133,6 +133,7 @@ class LaTeXBuilder(Builder):
|
|||||||
|
|
||||||
self.init_context()
|
self.init_context()
|
||||||
self.init_babel()
|
self.init_babel()
|
||||||
|
self.init_multilingual()
|
||||||
|
|
||||||
def get_outdated_docs(self) -> Union[str, List[str]]:
|
def get_outdated_docs(self) -> Union[str, List[str]]:
|
||||||
return 'all documents' # for now
|
return 'all documents' # for now
|
||||||
@ -208,6 +209,41 @@ class LaTeXBuilder(Builder):
|
|||||||
logger.warning(__('no Babel option known for language %r'),
|
logger.warning(__('no Babel option known for language %r'),
|
||||||
self.config.language)
|
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:
|
def write_stylesheet(self) -> None:
|
||||||
highlighter = highlighting.PygmentsBridge('latex', self.config.pygments_style)
|
highlighter = highlighting.PygmentsBridge('latex', self.config.pygments_style)
|
||||||
stylesheet = path.join(self.outdir, 'sphinxhighlight.sty')
|
stylesheet = path.join(self.outdir, 'sphinxhighlight.sty')
|
||||||
|
@ -192,3 +192,11 @@ ADDITIONAL_SETTINGS = {
|
|||||||
'fontpkg': XELATEX_GREEK_DEFAULT_FONTPKG,
|
'fontpkg': XELATEX_GREEK_DEFAULT_FONTPKG,
|
||||||
},
|
},
|
||||||
} # type: Dict[Any, Dict[str, Any]]
|
} # 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__)
|
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
|
MAX_CITATION_LABEL_LENGTH = 8
|
||||||
LATEXSECTIONNAMES = ["part", "chapter", "section", "subsection",
|
LATEXSECTIONNAMES = ["part", "chapter", "section", "subsection",
|
||||||
"subsubsection", "paragraph", "subparagraph"]
|
"subsubsection", "paragraph", "subparagraph"]
|
||||||
@ -395,44 +388,6 @@ class LaTeXTranslator(SphinxTranslator):
|
|||||||
logger.warning(__('no Babel option known for language %r'),
|
logger.warning(__('no Babel option known for language %r'),
|
||||||
self.config.language)
|
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
|
minsecnumdepth = self.secnumdepth # 2 from legacy sphinx manual/howto
|
||||||
if self.document.get('tocdepth'):
|
if self.document.get('tocdepth'):
|
||||||
# reduce tocdepth if `part` or `chapter` is used for top_sectionlevel
|
# 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,
|
'DEFAULT_SETTINGS': constants.DEFAULT_SETTINGS,
|
||||||
'LUALATEX_DEFAULT_FONTPKG': constants.LUALATEX_DEFAULT_FONTPKG,
|
'LUALATEX_DEFAULT_FONTPKG': constants.LUALATEX_DEFAULT_FONTPKG,
|
||||||
'PDFLATEX_DEFAULT_FONTPKG': constants.PDFLATEX_DEFAULT_FONTPKG,
|
'PDFLATEX_DEFAULT_FONTPKG': constants.PDFLATEX_DEFAULT_FONTPKG,
|
||||||
|
'SHORTHANDOFF': constants.SHORTHANDOFF,
|
||||||
'XELATEX_DEFAULT_FONTPKG': constants.XELATEX_DEFAULT_FONTPKG,
|
'XELATEX_DEFAULT_FONTPKG': constants.XELATEX_DEFAULT_FONTPKG,
|
||||||
'XELATEX_GREEK_DEFAULT_FONTPKG': constants.XELATEX_GREEK_DEFAULT_FONTPKG,
|
'XELATEX_GREEK_DEFAULT_FONTPKG': constants.XELATEX_GREEK_DEFAULT_FONTPKG,
|
||||||
'ExtBabel': ExtBabel,
|
'ExtBabel': ExtBabel,
|
||||||
|
@ -99,7 +99,7 @@ def skip_if_stylefiles_notfound(testfunc):
|
|||||||
def test_build_latex_doc(app, status, warning, engine, docclass):
|
def test_build_latex_doc(app, status, warning, engine, docclass):
|
||||||
app.config.latex_engine = engine
|
app.config.latex_engine = engine
|
||||||
app.config.latex_documents = [app.config.latex_documents[0][:4] + (docclass,)]
|
app.config.latex_documents = [app.config.latex_documents[0][:4] + (docclass,)]
|
||||||
app.builder.init_context()
|
app.builder.init()
|
||||||
|
|
||||||
LaTeXTranslator.ignore_missing_images = True
|
LaTeXTranslator.ignore_missing_images = True
|
||||||
app.builder.build_all()
|
app.builder.build_all()
|
||||||
|
Loading…
Reference in New Issue
Block a user