Better fix for sphinx latex breakage

This commit is contained in:
Kovid Goyal 2021-02-28 13:26:01 +05:30
parent a0564ea47d
commit 406838dc7d
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -14,16 +14,6 @@ from epub import EPUBHelpBuilder
from latex import LaTeXHelpBuilder
class FixedLaTeXHelpBuilder(LaTeXHelpBuilder):
# see https://github.com/sphinx-doc/sphinx/issues/8936
def visit_substitution_definition(self, node):
pass
def depart_substitution_definition(self, node):
pass
def substitute(app, doctree):
pass
@ -93,14 +83,14 @@ CLI_PREAMBLE='''\
'''
def titlecase(app, x):
if x and app.config.language == 'en':
def titlecase(language, x):
if x and language == 'en':
from calibre.utils.titlecase import titlecase as tc
x = tc(x)
return x
def generate_calibredb_help(preamble, app):
def generate_calibredb_help(preamble, language):
from calibre.db.cli.main import COMMANDS, option_parser_for, get_parser
preamble = preamble[:preamble.find('\n\n\n', preamble.find('code-block'))]
preamble += '\n\n'
@ -140,14 +130,14 @@ details and examples.
global_parser = get_parser('')
groups = []
for grp in global_parser.option_groups:
groups.append((titlecase(app, grp.title), grp.description, grp.option_list))
groups.append((titlecase(language, grp.title), grp.description, grp.option_list))
global_options = '\n'.join(render_options('calibredb', groups, False, False))
lines = []
for cmd in COMMANDS:
parser = option_parser_for(cmd)()
lines += ['.. _calibredb-%s-%s:' % (app.config.language, cmd), '']
lines += ['.. _calibredb-%s-%s:' % (language, cmd), '']
lines += [cmd, '~'*20, '']
usage = parser.usage.strip()
usage = [i for i in usage.replace('%prog', 'calibredb').splitlines()]
@ -163,11 +153,11 @@ details and examples.
for group in parser.option_groups:
if not getattr(group, 'is_global_options', False):
lines.extend(render_options(
'calibredb_' + cmd, [[titlecase(app, group.title), group.description, group.option_list]], False, False, header_level='^'))
'calibredb_' + cmd, [[titlecase(language, group.title), group.description, group.option_list]], False, False, header_level='^'))
lines += ['']
raw = preamble + '\n\n'+'.. contents::\n :local:'+ '\n\n' + global_options+'\n\n'+'\n'.join(lines)
update_cli_doc('calibredb', raw, app)
update_cli_doc('calibredb', raw, language)
def generate_ebook_convert_help(preamble, app):
@ -206,10 +196,10 @@ def generate_ebook_convert_help(preamble, app):
update_cli_doc('ebook-convert', raw, app)
def update_cli_doc(name, raw, app):
def update_cli_doc(name, raw, language):
if isinstance(raw, bytes):
raw = raw.decode('utf-8')
path = 'generated/%s/%s.rst' % (app.config.language, name)
path = 'generated/%s/%s.rst' % (language, name)
old_raw = open(path, encoding='utf-8').read() if os.path.exists(path) else ''
if not os.path.exists(path) or old_raw != raw:
import difflib
@ -284,7 +274,7 @@ def get_cli_docs():
return documented_cmds, undocumented_cmds
def cli_docs(app):
def cli_docs(language):
info(bold('creating CLI documentation...'))
documented_cmds, undocumented_cmds = get_cli_docs()
@ -298,7 +288,7 @@ def cli_docs(app):
undocumented='\n'.join(undocumented))
if not os.path.exists('cli'):
os.makedirs('cli')
update_cli_doc('cli-index', raw, app)
update_cli_doc('cli-index', raw, language)
for cmd, parser in documented_cmds:
usage = [mark_options(i) for i in parser.usage.replace('%prog', cmd).splitlines()]
@ -306,11 +296,11 @@ def cli_docs(app):
usage = usage[1:]
usage = [i.replace(cmd, ':command:`%s`'%cmd) for i in usage]
usage = '\n'.join(usage)
preamble = CLI_PREAMBLE.format(cmd=cmd, cmdref=cmd + '-' + app.config.language, cmdline=cmdline, usage=usage)
preamble = CLI_PREAMBLE.format(cmd=cmd, cmdref=cmd + '-' + language, cmdline=cmdline, usage=usage)
if cmd == 'ebook-convert':
generate_ebook_convert_help(preamble, app)
generate_ebook_convert_help(preamble, language)
elif cmd == 'calibredb':
generate_calibredb_help(preamble, app)
generate_calibredb_help(preamble, language)
else:
groups = [(None, None, parser.option_list)]
for grp in parser.option_groups:
@ -318,18 +308,18 @@ def cli_docs(app):
raw = preamble
lines = render_options(cmd, groups)
raw += '\n'+'\n'.join(lines)
update_cli_doc(cmd, raw, app)
update_cli_doc(cmd, raw, language)
def generate_docs(app):
cli_docs(app)
template_docs(app)
def generate_docs(app, config):
cli_docs(config.language)
template_docs(config.language)
def template_docs(app):
def template_docs(language):
from template_ref_generate import generate_template_language_help
raw = generate_template_language_help(app.config.language)
update_cli_doc('template_ref', raw, app)
raw = generate_template_language_help(language)
update_cli_doc('template_ref', raw, language)
def localized_path(app, langcode, pagename):
@ -385,10 +375,10 @@ def setup(app):
setup_man_pages(app)
app.add_css_file('custom.css')
app.add_builder(EPUBHelpBuilder)
app.add_builder(FixedLaTeXHelpBuilder)
app.add_builder(LaTeXHelpBuilder)
app.connect('source-read', source_read_handler)
app.connect('doctree-read', substitute)
app.connect('builder-inited', generate_docs)
app.connect('config-inited', generate_docs)
app.connect('html-page-context', add_html_context)
app.connect('build-finished', finished)
roles.register_local_role('guilabel', guilabel_role)