From f0763355989891a79796f9ecc548add515293a48 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Sat, 6 Feb 2021 20:59:04 +0900 Subject: [PATCH 1/4] refactor: LaTeX: separate self.body.append() call to single line output --- sphinx/writers/latex.py | 54 +++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py index b3ec5de56..8319cbbfe 100644 --- a/sphinx/writers/latex.py +++ b/sphinx/writers/latex.py @@ -374,9 +374,8 @@ class LaTeXTranslator(SphinxTranslator): 'fncychap' not in self.config.latex_elements): # use Sonny style if any language specified (except English) self.elements['fncychap'] = ('\\usepackage[Sonny]{fncychap}\n' - '\\ChNameVar{\\Large\\normalfont' - '\\sffamily}\n\\ChTitleVar{\\Large' - '\\normalfont\\sffamily}') + '\\ChNameVar{\\Large\\normalfont\\sffamily}\n' + '\\ChTitleVar{\\Large\\normalfont\\sffamily}') self.babel = self.builder.babel if self.config.language and not self.babel.is_supported_language(): @@ -614,7 +613,8 @@ class LaTeXTranslator(SphinxTranslator): pass def visit_productionlist(self, node: Element) -> None: - self.body.append('\n\n\\begin{productionlist}\n') + self.body.append('\n\n') + self.body.append('\\begin{productionlist}\n') self.in_production_list = 1 def depart_productionlist(self, node: Element) -> None: @@ -705,9 +705,11 @@ class LaTeXTranslator(SphinxTranslator): def visit_desc(self, node: Element) -> None: if self.config.latex_show_urls == 'footnote': - self.body.append('\n\n\\begin{savenotes}\\begin{fulllineitems}\n') + self.body.append('\n\n') + self.body.append('\\begin{savenotes}\\begin{fulllineitems}\n') else: - self.body.append('\n\n\\begin{fulllineitems}\n') + self.body.append('\n\n') + self.body.append('\\begin{fulllineitems}\n') if self.table: self.table.has_problematic = True @@ -737,13 +739,15 @@ class LaTeXTranslator(SphinxTranslator): if not node.get('is_multiline'): self._visit_signature_line(node) else: - self.body.append('%\n\\pysigstartmultiline\n') + self.body.append('%\n') + self.body.append('\\pysigstartmultiline\n') def depart_desc_signature(self, node: Element) -> None: if not node.get('is_multiline'): self._depart_signature_line(node) else: - self.body.append('%\n\\pysigstopmultiline') + self.body.append('%\n') + self.body.append('\\pysigstopmultiline') def visit_desc_signature_line(self, node: Element) -> None: self._visit_signature_line(node) @@ -821,8 +825,9 @@ class LaTeXTranslator(SphinxTranslator): pass def visit_seealso(self, node: Element) -> None: - self.body.append('\n\n\\sphinxstrong{%s:}\n\\nopagebreak\n\n' - % admonitionlabels['seealso']) + self.body.append('\n\n') + self.body.append('\\sphinxstrong{%s:}\n' % admonitionlabels['seealso']) + self.body.append('\\nopagebreak\n\n') def depart_seealso(self, node: Element) -> None: self.body.append("\n\n") @@ -844,14 +849,16 @@ class LaTeXTranslator(SphinxTranslator): if self.in_parsed_literal: self.body.append('\\begin{footnote}[%s]' % label.astext()) else: - self.body.append('%%\n\\begin{footnote}[%s]' % label.astext()) + self.body.append('%\n') + self.body.append('\\begin{footnote}[%s]' % label.astext()) self.body.append('\\sphinxAtStartFootnote\n') def depart_footnote(self, node: Element) -> None: if self.in_parsed_literal: self.body.append('\\end{footnote}') else: - self.body.append('%\n\\end{footnote}') + self.body.append('%\n') + self.body.append('\\end{footnote}') self.in_footnote -= 1 def visit_label(self, node: Element) -> None: @@ -1313,10 +1320,11 @@ class LaTeXTranslator(SphinxTranslator): if 'width' in node: length = self.latex_image_length(node['width']) if length: - self.body.append('\\begin{sphinxfigure-in-table}[%s]\n' - '\\centering\n' % length) + self.body.append('\\begin{sphinxfigure-in-table}[%s]\n' % length) + self.body.append('\\centering\n') else: - self.body.append('\\begin{sphinxfigure-in-table}\n\\centering\n') + self.body.append('\\begin{sphinxfigure-in-table}\n') + self.body.append('\\centering\n') if any(isinstance(child, nodes.caption) for child in node): self.body.append('\\capstart') self.context.append('\\end{sphinxfigure-in-table}\\relax\n') @@ -1328,14 +1336,16 @@ class LaTeXTranslator(SphinxTranslator): length = self.latex_image_length(node[0]['width']) self.body.append('\n\n') # Insert a blank line to prevent infinite loop # https://github.com/sphinx-doc/sphinx/issues/7059 - self.body.append('\\begin{wrapfigure}{%s}{%s}\n\\centering' % + self.body.append('\\begin{wrapfigure}{%s}{%s}\n' % ('r' if node['align'] == 'right' else 'l', length or '0pt')) + self.body.append('\\centering') self.context.append('\\end{wrapfigure}\n') elif self.in_minipage: self.body.append('\n\\begin{center}') self.context.append('\\end{center}\n') else: - self.body.append('\n\\begin{figure}[%s]\n\\centering\n' % align) + self.body.append('\n\\begin{figure}[%s]\n' % align) + self.body.append('\\centering\n') if any(isinstance(child, nodes.caption) for child in node): self.body.append('\\capstart\n') self.context.append('\\end{figure}\n') @@ -1737,12 +1747,14 @@ class LaTeXTranslator(SphinxTranslator): def visit_footnotetext(self, node: Element) -> None: label = cast(nodes.label, node[0]) - self.body.append('%%\n\\begin{footnotetext}[%s]' + self.body.append('%\n') + self.body.append('\\begin{footnotetext}[%s]' '\\sphinxAtStartFootnote\n' % label.astext()) def depart_footnotetext(self, node: Element) -> None: # the \ignorespaces in particular for after table header use - self.body.append('%\n\\end{footnotetext}\\ignorespaces ') + self.body.append('%\n') + self.body.append('\\end{footnotetext}\\ignorespaces ') def visit_captioned_literal_block(self, node: Element) -> None: pass @@ -1815,8 +1827,8 @@ class LaTeXTranslator(SphinxTranslator): def visit_line_block(self, node: Element) -> None: if isinstance(node.parent, nodes.line_block): - self.body.append('\\item[]\n' - '\\begin{DUlineblock}{\\DUlineblockindent}\n') + self.body.append('\\item[]\n') + self.body.append('\\begin{DUlineblock}{\\DUlineblockindent}\n') else: self.body.append('\n\\begin{DUlineblock}{0em}\n') if self.table: From 4cbb2925fdeac66f836776d28c2f51cc2173c8bf Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Sun, 7 Feb 2021 21:23:41 +0900 Subject: [PATCH 2/4] Fix #8837: doc: Remove version info from html_title --- doc/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/conf.py b/doc/conf.py index 53f036d3e..a3d2f5f12 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -24,6 +24,7 @@ html_theme_path = ['_themes'] modindex_common_prefix = ['sphinx.'] html_static_path = ['_static'] html_sidebars = {'index': ['indexsidebar.html', 'searchbox.html']} +html_title = 'Sphinx documentation' html_additional_pages = {'index': 'index.html'} html_use_opensearch = 'https://www.sphinx-doc.org/en/master' html_baseurl = 'https://www.sphinx-doc.org/en/master/' From 4917dd5f84eca86f8964e55431babb6065bbdc14 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Mon, 8 Feb 2021 13:21:28 -0500 Subject: [PATCH 3/4] i18n: Locale transform: Change heading syntax to work for both RST and Markdown --- sphinx/transforms/i18n.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sphinx/transforms/i18n.py b/sphinx/transforms/i18n.py index d588f0411..6bea6c6ee 100644 --- a/sphinx/transforms/i18n.py +++ b/sphinx/transforms/i18n.py @@ -263,7 +263,7 @@ class Locale(SphinxTransform): # see: http://docutils.sourceforge.net/docs/ref/doctree.html#structural-subelements if isinstance(node, nodes.title): # This generates:
msgstr
- msgstr = msgstr + '\n' + '-' * len(msgstr) * 2 + msgstr = msgstr + '\n' + '=' * len(msgstr) * 2 patch = publish_msgstr(self.app, msgstr, source, node.line, self.config, settings) From 71df21dd4f2365f64a057c4495718946ede003f5 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Tue, 9 Feb 2021 22:19:05 +0900 Subject: [PATCH 4/4] Update CHANGES for PR #8853 --- CHANGES | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES b/CHANGES index b394c54e3..7c13946ef 100644 --- a/CHANGES +++ b/CHANGES @@ -53,6 +53,7 @@ Features added * #6550: html: Allow to use HTML permalink texts via :confval:`html_permalinks_icon` * #1638: html: Add permalink icons to glossary terms +* #8852: i18n: Allow to translate heading syntax in MyST-Parser * #8649: imgconverter: Skip availability check if builder supports the image type * #8573: napoleon: Allow to change the style of custom sections using