From a9721c27f19d7dbbe124e4a1e04318a5425a82aa Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Sun, 22 Nov 2020 19:01:57 +0900 Subject: [PATCH] Fix #8446: html: consective spaces are displayed as single space In HTML, consective spaces are considered as single space by HTML browsers. To represent them as is, we have to escape them on rendering them into HTML. This starts to escape the whole of desc_signature node. --- CHANGES | 1 + sphinx/writers/html.py | 6 ++++-- sphinx/writers/html5.py | 6 ++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index eda8709b0fe..ccddd276780 100644 --- a/CHANGES +++ b/CHANGES @@ -51,6 +51,7 @@ Bugs fixed based uninitalized variables * #8452: autodoc: autodoc_type_aliases doesn't work when autodoc_typehints is set to "description" +* #8446: html: consective spaces are displayed as single space * #8419: html search: Do not load ``language_data.js`` in non-search pages * #8454: graphviz: The layout option for graph and digraph directives don't work * #8437: Makefile: ``make clean`` with empty BUILDDIR is dangerous diff --git a/sphinx/writers/html.py b/sphinx/writers/html.py index d3c87076f7e..fd675ee3929 100644 --- a/sphinx/writers/html.py +++ b/sphinx/writers/html.py @@ -129,8 +129,10 @@ def depart_desc(self, node: Element) -> None: def visit_desc_signature(self, node: Element) -> None: # the id is set automatically self.body.append(self.starttag(node, 'dt')) + self.optional_param_level += 1 def depart_desc_signature(self, node: Element) -> None: + self.optional_param_level -= 1 if not node.get('is_multiline'): self.add_permalink_ref(node, _('Permalink to this definition')) self.body.append('\n') @@ -195,19 +197,19 @@ def visit_desc_parameter(self, node: Element) -> None: self.required_params_left -= 1 if not node.hasattr('noemph'): self.body.append('') + self.protect_literal_text += 1 def depart_desc_parameter(self, node: Element) -> None: + self.protect_literal_text -= 1 if not node.hasattr('noemph'): self.body.append('') if self.required_params_left: self.body.append(self.param_separator) def visit_desc_optional(self, node: Element) -> None: - self.optional_param_level += 1 self.body.append('[') def depart_desc_optional(self, node: Element) -> None: - self.optional_param_level -= 1 self.body.append(']') def visit_desc_annotation(self, node: Element) -> None: diff --git a/sphinx/writers/html5.py b/sphinx/writers/html5.py index 7824f54f5d1..5d821946af5 100644 --- a/sphinx/writers/html5.py +++ b/sphinx/writers/html5.py @@ -100,8 +100,10 @@ def depart_desc(self, node: Element) -> None: def visit_desc_signature(self, node: Element) -> None: # the id is set automatically self.body.append(self.starttag(node, 'dt')) + self.protect_literal_text += 1 def depart_desc_signature(self, node: Element) -> None: + self.protect_literal_text -= 1 if not node.get('is_multiline'): self.add_permalink_ref(node, _('Permalink to this definition')) self.body.append('\n') @@ -174,17 +176,17 @@ def depart_desc_parameter(self, node: Element) -> None: self.body.append(self.param_separator) def visit_desc_optional(self, node: Element) -> None: - self.optional_param_level += 1 self.body.append('[') def depart_desc_optional(self, node: Element) -> None: - self.optional_param_level -= 1 self.body.append(']') def visit_desc_annotation(self, node: Element) -> None: self.body.append(self.starttag(node, 'em', '', CLASS='property')) + self.protect_literal_text += 1 def depart_desc_annotation(self, node: Element) -> None: + self.protect_literal_text -= 1 self.body.append('') def visit_desc_content(self, node: Element) -> None: