mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Better fix for sphinx latex breakage
This commit is contained in:
parent
a0564ea47d
commit
406838dc7d
@ -14,16 +14,6 @@ from epub import EPUBHelpBuilder
|
|||||||
from latex import LaTeXHelpBuilder
|
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):
|
def substitute(app, doctree):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -93,14 +83,14 @@ CLI_PREAMBLE='''\
|
|||||||
'''
|
'''
|
||||||
|
|
||||||
|
|
||||||
def titlecase(app, x):
|
def titlecase(language, x):
|
||||||
if x and app.config.language == 'en':
|
if x and language == 'en':
|
||||||
from calibre.utils.titlecase import titlecase as tc
|
from calibre.utils.titlecase import titlecase as tc
|
||||||
x = tc(x)
|
x = tc(x)
|
||||||
return 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
|
from calibre.db.cli.main import COMMANDS, option_parser_for, get_parser
|
||||||
preamble = preamble[:preamble.find('\n\n\n', preamble.find('code-block'))]
|
preamble = preamble[:preamble.find('\n\n\n', preamble.find('code-block'))]
|
||||||
preamble += '\n\n'
|
preamble += '\n\n'
|
||||||
@ -140,14 +130,14 @@ details and examples.
|
|||||||
global_parser = get_parser('')
|
global_parser = get_parser('')
|
||||||
groups = []
|
groups = []
|
||||||
for grp in global_parser.option_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))
|
global_options = '\n'.join(render_options('calibredb', groups, False, False))
|
||||||
|
|
||||||
lines = []
|
lines = []
|
||||||
for cmd in COMMANDS:
|
for cmd in COMMANDS:
|
||||||
parser = option_parser_for(cmd)()
|
parser = option_parser_for(cmd)()
|
||||||
lines += ['.. _calibredb-%s-%s:' % (app.config.language, cmd), '']
|
lines += ['.. _calibredb-%s-%s:' % (language, cmd), '']
|
||||||
lines += [cmd, '~'*20, '']
|
lines += [cmd, '~'*20, '']
|
||||||
usage = parser.usage.strip()
|
usage = parser.usage.strip()
|
||||||
usage = [i for i in usage.replace('%prog', 'calibredb').splitlines()]
|
usage = [i for i in usage.replace('%prog', 'calibredb').splitlines()]
|
||||||
@ -163,11 +153,11 @@ details and examples.
|
|||||||
for group in parser.option_groups:
|
for group in parser.option_groups:
|
||||||
if not getattr(group, 'is_global_options', False):
|
if not getattr(group, 'is_global_options', False):
|
||||||
lines.extend(render_options(
|
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 += ['']
|
lines += ['']
|
||||||
|
|
||||||
raw = preamble + '\n\n'+'.. contents::\n :local:'+ '\n\n' + global_options+'\n\n'+'\n'.join(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):
|
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)
|
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):
|
if isinstance(raw, bytes):
|
||||||
raw = raw.decode('utf-8')
|
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 ''
|
old_raw = open(path, encoding='utf-8').read() if os.path.exists(path) else ''
|
||||||
if not os.path.exists(path) or old_raw != raw:
|
if not os.path.exists(path) or old_raw != raw:
|
||||||
import difflib
|
import difflib
|
||||||
@ -284,7 +274,7 @@ def get_cli_docs():
|
|||||||
return documented_cmds, undocumented_cmds
|
return documented_cmds, undocumented_cmds
|
||||||
|
|
||||||
|
|
||||||
def cli_docs(app):
|
def cli_docs(language):
|
||||||
info(bold('creating CLI documentation...'))
|
info(bold('creating CLI documentation...'))
|
||||||
documented_cmds, undocumented_cmds = get_cli_docs()
|
documented_cmds, undocumented_cmds = get_cli_docs()
|
||||||
|
|
||||||
@ -298,7 +288,7 @@ def cli_docs(app):
|
|||||||
undocumented='\n'.join(undocumented))
|
undocumented='\n'.join(undocumented))
|
||||||
if not os.path.exists('cli'):
|
if not os.path.exists('cli'):
|
||||||
os.makedirs('cli')
|
os.makedirs('cli')
|
||||||
update_cli_doc('cli-index', raw, app)
|
update_cli_doc('cli-index', raw, language)
|
||||||
|
|
||||||
for cmd, parser in documented_cmds:
|
for cmd, parser in documented_cmds:
|
||||||
usage = [mark_options(i) for i in parser.usage.replace('%prog', cmd).splitlines()]
|
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 = usage[1:]
|
||||||
usage = [i.replace(cmd, ':command:`%s`'%cmd) for i in usage]
|
usage = [i.replace(cmd, ':command:`%s`'%cmd) for i in usage]
|
||||||
usage = '\n'.join(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':
|
if cmd == 'ebook-convert':
|
||||||
generate_ebook_convert_help(preamble, app)
|
generate_ebook_convert_help(preamble, language)
|
||||||
elif cmd == 'calibredb':
|
elif cmd == 'calibredb':
|
||||||
generate_calibredb_help(preamble, app)
|
generate_calibredb_help(preamble, language)
|
||||||
else:
|
else:
|
||||||
groups = [(None, None, parser.option_list)]
|
groups = [(None, None, parser.option_list)]
|
||||||
for grp in parser.option_groups:
|
for grp in parser.option_groups:
|
||||||
@ -318,18 +308,18 @@ def cli_docs(app):
|
|||||||
raw = preamble
|
raw = preamble
|
||||||
lines = render_options(cmd, groups)
|
lines = render_options(cmd, groups)
|
||||||
raw += '\n'+'\n'.join(lines)
|
raw += '\n'+'\n'.join(lines)
|
||||||
update_cli_doc(cmd, raw, app)
|
update_cli_doc(cmd, raw, language)
|
||||||
|
|
||||||
|
|
||||||
def generate_docs(app):
|
def generate_docs(app, config):
|
||||||
cli_docs(app)
|
cli_docs(config.language)
|
||||||
template_docs(app)
|
template_docs(config.language)
|
||||||
|
|
||||||
|
|
||||||
def template_docs(app):
|
def template_docs(language):
|
||||||
from template_ref_generate import generate_template_language_help
|
from template_ref_generate import generate_template_language_help
|
||||||
raw = generate_template_language_help(app.config.language)
|
raw = generate_template_language_help(language)
|
||||||
update_cli_doc('template_ref', raw, app)
|
update_cli_doc('template_ref', raw, language)
|
||||||
|
|
||||||
|
|
||||||
def localized_path(app, langcode, pagename):
|
def localized_path(app, langcode, pagename):
|
||||||
@ -385,10 +375,10 @@ def setup(app):
|
|||||||
setup_man_pages(app)
|
setup_man_pages(app)
|
||||||
app.add_css_file('custom.css')
|
app.add_css_file('custom.css')
|
||||||
app.add_builder(EPUBHelpBuilder)
|
app.add_builder(EPUBHelpBuilder)
|
||||||
app.add_builder(FixedLaTeXHelpBuilder)
|
app.add_builder(LaTeXHelpBuilder)
|
||||||
app.connect('source-read', source_read_handler)
|
app.connect('source-read', source_read_handler)
|
||||||
app.connect('doctree-read', substitute)
|
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('html-page-context', add_html_context)
|
||||||
app.connect('build-finished', finished)
|
app.connect('build-finished', finished)
|
||||||
roles.register_local_role('guilabel', guilabel_role)
|
roles.register_local_role('guilabel', guilabel_role)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user