mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Fix #7418: std domain: term role role could not match case-insensitively
This commit is contained in:
parent
50d2d289e1
commit
4577f6856c
1
CHANGES
1
CHANGES
@ -20,6 +20,7 @@ Bugs fixed
|
|||||||
----------
|
----------
|
||||||
|
|
||||||
* #7461: py domain: fails with IndexError for empty tuple in type annotation
|
* #7461: py domain: fails with IndexError for empty tuple in type annotation
|
||||||
|
* #7418: std domain: :rst:role:`term` role could not match case-insensitively
|
||||||
* #7461: autodoc: empty tuple in type annotation is not shown correctly
|
* #7461: autodoc: empty tuple in type annotation is not shown correctly
|
||||||
* C++, fix spacing issue in east-const declarations.
|
* C++, fix spacing issue in east-const declarations.
|
||||||
|
|
||||||
|
@ -789,6 +789,8 @@ class StandardDomain(Domain):
|
|||||||
RemovedInSphinx40Warning)
|
RemovedInSphinx40Warning)
|
||||||
domain = env.get_domain('citation')
|
domain = env.get_domain('citation')
|
||||||
return domain.resolve_xref(env, fromdocname, builder, typ, target, node, contnode)
|
return domain.resolve_xref(env, fromdocname, builder, typ, target, node, contnode)
|
||||||
|
elif typ == 'term':
|
||||||
|
resolver = self._resolve_term_xref
|
||||||
else:
|
else:
|
||||||
resolver = self._resolve_obj_xref
|
resolver = self._resolve_obj_xref
|
||||||
|
|
||||||
@ -923,6 +925,28 @@ class StandardDomain(Domain):
|
|||||||
return make_refnode(builder, fromdocname, docname,
|
return make_refnode(builder, fromdocname, docname,
|
||||||
labelid, contnode)
|
labelid, contnode)
|
||||||
|
|
||||||
|
def _resolve_term_xref(self, env: "BuildEnvironment", fromdocname: str,
|
||||||
|
builder: "Builder", typ: str, target: str,
|
||||||
|
node: pending_xref, contnode: Element) -> Element:
|
||||||
|
result = self._resolve_obj_xref(env, fromdocname, builder, typ,
|
||||||
|
target, node, contnode)
|
||||||
|
if result:
|
||||||
|
return result
|
||||||
|
else:
|
||||||
|
for objtype, term in self.objects:
|
||||||
|
if objtype == 'term' and term.lower() == target.lower():
|
||||||
|
docname, labelid = self.objects[objtype, term]
|
||||||
|
logger.warning(__('term %s not found in case sensitive match.'
|
||||||
|
'made a reference to %s instead.'),
|
||||||
|
target, term, location=node, type='ref', subtype='term')
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
docname, labelid = '', ''
|
||||||
|
if not docname:
|
||||||
|
return None
|
||||||
|
return make_refnode(builder, fromdocname, docname,
|
||||||
|
labelid, contnode)
|
||||||
|
|
||||||
def _resolve_obj_xref(self, env: "BuildEnvironment", fromdocname: str,
|
def _resolve_obj_xref(self, env: "BuildEnvironment", fromdocname: str,
|
||||||
builder: "Builder", typ: str, target: str,
|
builder: "Builder", typ: str, target: str,
|
||||||
node: pending_xref, contnode: Element) -> Element:
|
node: pending_xref, contnode: Element) -> Element:
|
||||||
|
@ -141,12 +141,23 @@ def test_glossary(app):
|
|||||||
[nodes.definition, nodes.paragraph, "description"])
|
[nodes.definition, nodes.paragraph, "description"])
|
||||||
|
|
||||||
# index
|
# index
|
||||||
objects = list(app.env.get_domain("std").get_objects())
|
domain = app.env.get_domain("std")
|
||||||
|
objects = list(domain.get_objects())
|
||||||
assert ("term1", "term1", "term", "index", "term-term1", -1) in objects
|
assert ("term1", "term1", "term", "index", "term-term1", -1) in objects
|
||||||
assert ("TERM2", "TERM2", "term", "index", "term-TERM2", -1) in objects
|
assert ("TERM2", "TERM2", "term", "index", "term-TERM2", -1) in objects
|
||||||
assert ("term3", "term3", "term", "index", "term-term3", -1) in objects
|
assert ("term3", "term3", "term", "index", "term-term3", -1) in objects
|
||||||
assert ("term4", "term4", "term", "index", "term-term4", -1) in objects
|
assert ("term4", "term4", "term", "index", "term-term4", -1) in objects
|
||||||
|
|
||||||
|
# term reference (case sensitive)
|
||||||
|
refnode = domain.resolve_xref(app.env, 'index', app.builder, 'term', 'term1',
|
||||||
|
pending_xref(), nodes.paragraph())
|
||||||
|
assert_node(refnode, nodes.reference, refid="term-term1")
|
||||||
|
|
||||||
|
# term reference (case insensitive)
|
||||||
|
refnode = domain.resolve_xref(app.env, 'index', app.builder, 'term', 'term2',
|
||||||
|
pending_xref(), nodes.paragraph())
|
||||||
|
assert_node(refnode, nodes.reference, refid="term-TERM2")
|
||||||
|
|
||||||
|
|
||||||
def test_glossary_warning(app, status, warning):
|
def test_glossary_warning(app, status, warning):
|
||||||
# empty line between terms
|
# empty line between terms
|
||||||
|
Loading…
Reference in New Issue
Block a user