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
|
||||
* #7418: std domain: :rst:role:`term` role could not match case-insensitively
|
||||
* #7461: autodoc: empty tuple in type annotation is not shown correctly
|
||||
* C++, fix spacing issue in east-const declarations.
|
||||
|
||||
|
@ -789,6 +789,8 @@ class StandardDomain(Domain):
|
||||
RemovedInSphinx40Warning)
|
||||
domain = env.get_domain('citation')
|
||||
return domain.resolve_xref(env, fromdocname, builder, typ, target, node, contnode)
|
||||
elif typ == 'term':
|
||||
resolver = self._resolve_term_xref
|
||||
else:
|
||||
resolver = self._resolve_obj_xref
|
||||
|
||||
@ -923,6 +925,28 @@ class StandardDomain(Domain):
|
||||
return make_refnode(builder, fromdocname, docname,
|
||||
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,
|
||||
builder: "Builder", typ: str, target: str,
|
||||
node: pending_xref, contnode: Element) -> Element:
|
||||
|
@ -141,12 +141,23 @@ def test_glossary(app):
|
||||
[nodes.definition, nodes.paragraph, "description"])
|
||||
|
||||
# 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 ("TERM2", "TERM2", "term", "index", "term-TERM2", -1) in objects
|
||||
assert ("term3", "term3", "term", "index", "term-term3", -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):
|
||||
# empty line between terms
|
||||
|
Loading…
Reference in New Issue
Block a user