mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Refactor around babel
This commit is contained in:
parent
350d8aade0
commit
2803b64b5d
@ -112,6 +112,10 @@ class LaTeXWriter(writers.Writer):
|
|||||||
# Helper classes
|
# Helper classes
|
||||||
|
|
||||||
class ExtBabel(Babel):
|
class ExtBabel(Babel):
|
||||||
|
def __init__(self, language_code):
|
||||||
|
super(ExtBabel, self).__init__(language_code or '')
|
||||||
|
self.language_code = language_code
|
||||||
|
|
||||||
def get_shorthandoff(self):
|
def get_shorthandoff(self):
|
||||||
shortlang = self.language.split('_')[0]
|
shortlang = self.language.split('_')[0]
|
||||||
if shortlang in ('de', 'ngerman', 'sl', 'slovene', 'pt', 'portuges',
|
if shortlang in ('de', 'ngerman', 'sl', 'slovene', 'pt', 'portuges',
|
||||||
@ -126,6 +130,16 @@ class ExtBabel(Babel):
|
|||||||
'mn', 'mongolian', 'ru', 'russian',
|
'mn', 'mongolian', 'ru', 'russian',
|
||||||
'uk', 'ukrainian')
|
'uk', 'ukrainian')
|
||||||
|
|
||||||
|
def is_supported_language(self):
|
||||||
|
return bool(super(ExtBabel, self).get_language())
|
||||||
|
|
||||||
|
def get_language(self):
|
||||||
|
language = super(ExtBabel, self).get_language()
|
||||||
|
if not language:
|
||||||
|
return 'english' # fallback to english
|
||||||
|
else:
|
||||||
|
return language
|
||||||
|
|
||||||
# in latest trunk, the attribute is called Babel.language_codes and already
|
# in latest trunk, the attribute is called Babel.language_codes and already
|
||||||
# includes Slovene
|
# includes Slovene
|
||||||
if hasattr(Babel, '_ISO639_TO_BABEL'):
|
if hasattr(Babel, '_ISO639_TO_BABEL'):
|
||||||
@ -319,20 +333,18 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
|||||||
if builder.config.latex_logo:
|
if builder.config.latex_logo:
|
||||||
self.elements['logo'] = '\\includegraphics{%s}\\par' % \
|
self.elements['logo'] = '\\includegraphics{%s}\\par' % \
|
||||||
path.basename(builder.config.latex_logo)
|
path.basename(builder.config.latex_logo)
|
||||||
|
# setup babel
|
||||||
|
self.babel = ExtBabel(builder.config.language)
|
||||||
|
self.elements['classoptions'] += ',' + self.babel.get_language()
|
||||||
if builder.config.language:
|
if builder.config.language:
|
||||||
babel = ExtBabel(builder.config.language)
|
if not self.babel.is_supported_language():
|
||||||
lang = babel.get_language()
|
|
||||||
if lang:
|
|
||||||
self.elements['classoptions'] += ',' + babel.get_language()
|
|
||||||
else:
|
|
||||||
self.builder.warn('no Babel option known for language %r' %
|
self.builder.warn('no Babel option known for language %r' %
|
||||||
builder.config.language)
|
builder.config.language)
|
||||||
self.elements['classoptions'] += ',english' # fallback to english
|
self.elements['shorthandoff'] = self.babel.get_shorthandoff()
|
||||||
self.elements['shorthandoff'] = babel.get_shorthandoff()
|
|
||||||
self.elements['fncychap'] = '\\usepackage[Sonny]{fncychap}'
|
self.elements['fncychap'] = '\\usepackage[Sonny]{fncychap}'
|
||||||
|
|
||||||
# Times fonts don't work with Cyrillic languages
|
# Times fonts don't work with Cyrillic languages
|
||||||
if babel.uses_cyrillic():
|
if self.babel.uses_cyrillic():
|
||||||
self.elements['fontpkg'] = ''
|
self.elements['fontpkg'] = ''
|
||||||
|
|
||||||
# pTeX (Japanese TeX) for support
|
# pTeX (Japanese TeX) for support
|
||||||
@ -343,8 +355,6 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
|||||||
self.elements['babel'] = ''
|
self.elements['babel'] = ''
|
||||||
# disable fncychap in Japanese documents
|
# disable fncychap in Japanese documents
|
||||||
self.elements['fncychap'] = ''
|
self.elements['fncychap'] = ''
|
||||||
else:
|
|
||||||
self.elements['classoptions'] += ',english'
|
|
||||||
if getattr(builder, 'usepackages', None):
|
if getattr(builder, 'usepackages', None):
|
||||||
def declare_package(packagename, options=None):
|
def declare_package(packagename, options=None):
|
||||||
if options:
|
if options:
|
||||||
@ -355,8 +365,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
|||||||
self.elements['usepackages'] += "\n".join(usepackages)
|
self.elements['usepackages'] += "\n".join(usepackages)
|
||||||
if getattr(document.settings, 'contentsname', None):
|
if getattr(document.settings, 'contentsname', None):
|
||||||
self.elements['contentsname'] = \
|
self.elements['contentsname'] = \
|
||||||
self.babel_renewcommand(builder, '\\contentsname',
|
self.babel_renewcommand('\\contentsname', document.settings.contentsname)
|
||||||
document.settings.contentsname)
|
|
||||||
self.elements['numfig_format'] = self.generate_numfig_format(builder)
|
self.elements['numfig_format'] = self.generate_numfig_format(builder)
|
||||||
# allow the user to override them all
|
# allow the user to override them all
|
||||||
self.elements.update(builder.config.latex_elements)
|
self.elements.update(builder.config.latex_elements)
|
||||||
@ -475,27 +484,15 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
|||||||
def hyperrefescape(self, ref):
|
def hyperrefescape(self, ref):
|
||||||
return self.idescape(ref).replace('-', '\\string-')
|
return self.idescape(ref).replace('-', '\\string-')
|
||||||
|
|
||||||
def babel_renewcommand(self, builder, command, definition):
|
def babel_renewcommand(self, command, definition):
|
||||||
if builder.config.language == 'ja':
|
if self.elements['babel']:
|
||||||
babel_prefix = ''
|
prefix = '\\addto\\captions%s{' % self.babel.get_language()
|
||||||
babel_suffix = ''
|
suffix = '}'
|
||||||
else:
|
else: # babel is disabled (mainly for Japanese environment)
|
||||||
if builder.config.language:
|
prefix = ''
|
||||||
language = ExtBabel(builder.config.language).get_language()
|
suffix = ''
|
||||||
if not language:
|
|
||||||
language = 'english'
|
|
||||||
else:
|
|
||||||
language = 'english'
|
|
||||||
|
|
||||||
if self.elements['babel']:
|
return ('%s\\renewcommand{%s}{%s}%s\n' % (prefix, command, definition, suffix))
|
||||||
babel_prefix = '\\addto\\captions%s{' % language
|
|
||||||
babel_suffix = '}'
|
|
||||||
else:
|
|
||||||
babel_prefix = ''
|
|
||||||
babel_suffix = ''
|
|
||||||
|
|
||||||
return ('%s\\renewcommand{%s}{%s}%s\n' %
|
|
||||||
(babel_prefix, command, definition, babel_suffix))
|
|
||||||
|
|
||||||
def generate_numfig_format(self, builder):
|
def generate_numfig_format(self, builder):
|
||||||
ret = []
|
ret = []
|
||||||
@ -505,7 +502,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
|||||||
text_type(figure[0]).translate(tex_escape_map))
|
text_type(figure[0]).translate(tex_escape_map))
|
||||||
else:
|
else:
|
||||||
definition = text_type(figure[0]).translate(tex_escape_map)
|
definition = text_type(figure[0]).translate(tex_escape_map)
|
||||||
ret.append(self.babel_renewcommand(builder, '\\figurename', definition))
|
ret.append(self.babel_renewcommand('\\figurename', definition))
|
||||||
if figure[1]:
|
if figure[1]:
|
||||||
ret.append('\\makeatletter\n')
|
ret.append('\\makeatletter\n')
|
||||||
ret.append('\\def\\fnum@figure{\\figurename\\thefigure%s}\n' %
|
ret.append('\\def\\fnum@figure{\\figurename\\thefigure%s}\n' %
|
||||||
@ -518,7 +515,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
|||||||
text_type(table[0]).translate(tex_escape_map))
|
text_type(table[0]).translate(tex_escape_map))
|
||||||
else:
|
else:
|
||||||
definition = text_type(table[0]).translate(tex_escape_map)
|
definition = text_type(table[0]).translate(tex_escape_map)
|
||||||
ret.append(self.babel_renewcommand(builder, '\\tablename', definition))
|
ret.append(self.babel_renewcommand('\\tablename', definition))
|
||||||
if table[1]:
|
if table[1]:
|
||||||
ret.append('\\makeatletter\n')
|
ret.append('\\makeatletter\n')
|
||||||
ret.append('\\def\\fnum@table{\\tablename\\thetable%s}\n' %
|
ret.append('\\def\\fnum@table{\\tablename\\thetable%s}\n' %
|
||||||
|
Loading…
Reference in New Issue
Block a user