mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Fix HTML: Invalid HTML5 file is generated for glossary (refs: #4611)
Note: It was caused by a glossary having multiple terms for one description.
This commit is contained in:
parent
b04bfcfab7
commit
7459d8771a
2
CHANGES
2
CHANGES
@ -155,6 +155,8 @@ Bugs fixed
|
||||
if passed as language option?
|
||||
* #5179: LaTeX: (lualatex only) escaping of ``>`` by ``\textgreater{}`` is not
|
||||
enough as ``\textgreater{}\textgreater{}`` applies TeX-ligature
|
||||
* HTML: Invalid HTML5 file is generated for a glossary having multiple terms for
|
||||
one description (refs: #4611)
|
||||
|
||||
Testing
|
||||
--------
|
||||
|
@ -393,6 +393,48 @@ class HTMLTranslator(SphinxTranslator, BaseTranslator):
|
||||
self.generate_targets_for_listing(node)
|
||||
super().visit_enumerated_list(node)
|
||||
|
||||
# overwritten
|
||||
def visit_definition(self, node):
|
||||
# type: (nodes.Element) -> None
|
||||
# don't insert </dt> here.
|
||||
self.body.append(self.starttag(node, 'dd', ''))
|
||||
|
||||
# overwritten
|
||||
def depart_definition(self, node):
|
||||
# type: (nodes.Element) -> None
|
||||
self.body.append('</dd>\n')
|
||||
|
||||
# overwritten
|
||||
def visit_classifier(self, node):
|
||||
# type: (nodes.Element) -> None
|
||||
self.body.append(self.starttag(node, 'span', '', CLASS='classifier'))
|
||||
|
||||
# overwritten
|
||||
def depart_classifier(self, node):
|
||||
# type: (nodes.Element) -> None
|
||||
self.body.append('</span>')
|
||||
|
||||
next_node = node.next_node(descend=False, siblings=True) # type: nodes.Node
|
||||
if not isinstance(next_node, nodes.classifier):
|
||||
# close `<dt>` tag at the tail of classifiers
|
||||
self.body.append('</dt>')
|
||||
|
||||
# overwritten
|
||||
def visit_term(self, node):
|
||||
# type: (nodes.Element) -> None
|
||||
self.body.append(self.starttag(node, 'dt', ''))
|
||||
|
||||
# overwritten
|
||||
def depart_term(self, node):
|
||||
# type: (nodes.Element) -> None
|
||||
next_node = node.next_node(descend=False, siblings=True) # type: nodes.Node
|
||||
if isinstance(next_node, nodes.classifier):
|
||||
# Leave the end tag to `self.depart_classifier()`, in case
|
||||
# there's a classifier.
|
||||
pass
|
||||
else:
|
||||
self.body.append('</dt>')
|
||||
|
||||
# overwritten
|
||||
def visit_title(self, node):
|
||||
# type: (nodes.Element) -> None
|
||||
|
@ -339,6 +339,48 @@ class HTML5Translator(SphinxTranslator, BaseTranslator):
|
||||
raise nodes.SkipNode
|
||||
super().visit_bullet_list(node)
|
||||
|
||||
# overwritten
|
||||
def visit_definition(self, node):
|
||||
# type: (nodes.Element) -> None
|
||||
# don't insert </dt> here.
|
||||
self.body.append(self.starttag(node, 'dd', ''))
|
||||
|
||||
# overwritten
|
||||
def depart_definition(self, node):
|
||||
# type: (nodes.Element) -> None
|
||||
self.body.append('</dd>\n')
|
||||
|
||||
# overwritten
|
||||
def visit_classifier(self, node):
|
||||
# type: (nodes.Element) -> None
|
||||
self.body.append(self.starttag(node, 'span', '', CLASS='classifier'))
|
||||
|
||||
# overwritten
|
||||
def depart_classifier(self, node):
|
||||
# type: (nodes.Element) -> None
|
||||
self.body.append('</span>')
|
||||
|
||||
next_node = node.next_node(descend=False, siblings=True) # type: nodes.Node
|
||||
if not isinstance(next_node, nodes.classifier):
|
||||
# close `<dt>` tag at the tail of classifiers
|
||||
self.body.append('</dt>')
|
||||
|
||||
# overwritten
|
||||
def visit_term(self, node):
|
||||
# type: (nodes.Element) -> None
|
||||
self.body.append(self.starttag(node, 'dt', ''))
|
||||
|
||||
# overwritten
|
||||
def depart_term(self, node):
|
||||
# type: (nodes.Element) -> None
|
||||
next_node = node.next_node(descend=False, siblings=True) # type: nodes.Node
|
||||
if isinstance(next_node, nodes.classifier):
|
||||
# Leave the end tag to `self.depart_classifier()`, in case
|
||||
# there's a classifier.
|
||||
pass
|
||||
else:
|
||||
self.body.append('</dt>')
|
||||
|
||||
# overwritten
|
||||
def visit_title(self, node):
|
||||
# type: (nodes.Element) -> None
|
||||
|
@ -234,6 +234,29 @@ def get_verifier(verify, verify_re):
|
||||
None,
|
||||
r'\\sphinxhref{http://example.com/~me/}{test}.*',
|
||||
),
|
||||
(
|
||||
# description list: simple
|
||||
'verify',
|
||||
'term\n description',
|
||||
'<dl class="docutils">\n<dt>term</dt><dd>description</dd>\n</dl>',
|
||||
None,
|
||||
),
|
||||
(
|
||||
# description list: with classifiers
|
||||
'verify',
|
||||
'term : class1 : class2\n description',
|
||||
('<dl class="docutils">\n<dt>term<span class="classifier">class1</span>'
|
||||
'<span class="classifier">class2</span></dt><dd>description</dd>\n</dl>'),
|
||||
None,
|
||||
),
|
||||
(
|
||||
# glossary (description list): multiple terms
|
||||
'verify',
|
||||
'.. glossary::\n\n term1\n term2\n description',
|
||||
('<dl class="glossary docutils">\n<dt id="term-term1">term1</dt>'
|
||||
'<dt id="term-term2">term2</dt><dd>description</dd>\n</dl>'),
|
||||
None,
|
||||
),
|
||||
])
|
||||
def test_inline(get_verifier, type, rst, html_expected, latex_expected):
|
||||
verifier = get_verifier(type)
|
||||
|
Loading…
Reference in New Issue
Block a user