mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
std domain: Generate node_id for generic objects in the right way
This commit is contained in:
parent
cd15ab658f
commit
fbfaf41e83
@ -66,9 +66,17 @@ class GenericObject(ObjectDescription):
|
|||||||
return name
|
return name
|
||||||
|
|
||||||
def add_target_and_index(self, name: str, sig: str, signode: desc_signature) -> None:
|
def add_target_and_index(self, name: str, sig: str, signode: desc_signature) -> None:
|
||||||
targetname = '%s-%s' % (self.objtype, name)
|
node_id = make_id(self.env, self.state.document, self.objtype, name)
|
||||||
signode['ids'].append(targetname)
|
signode['ids'].append(node_id)
|
||||||
|
|
||||||
|
# Assign old styled node_id not to break old hyperlinks (if possible)
|
||||||
|
# Note: Will be removed in Sphinx-5.0 (RemovedInSphinx50Warning)
|
||||||
|
old_node_id = self.make_old_id(name)
|
||||||
|
if old_node_id not in self.state.document.ids and old_node_id not in signode['ids']:
|
||||||
|
signode['ids'].append(old_node_id)
|
||||||
|
|
||||||
self.state.document.note_explicit_target(signode)
|
self.state.document.note_explicit_target(signode)
|
||||||
|
|
||||||
if self.indextemplate:
|
if self.indextemplate:
|
||||||
colon = self.indextemplate.find(':')
|
colon = self.indextemplate.find(':')
|
||||||
if colon != -1:
|
if colon != -1:
|
||||||
@ -77,11 +85,18 @@ class GenericObject(ObjectDescription):
|
|||||||
else:
|
else:
|
||||||
indextype = 'single'
|
indextype = 'single'
|
||||||
indexentry = self.indextemplate % (name,)
|
indexentry = self.indextemplate % (name,)
|
||||||
self.indexnode['entries'].append((indextype, indexentry,
|
self.indexnode['entries'].append((indextype, indexentry, node_id, '', None))
|
||||||
targetname, '', None))
|
|
||||||
|
|
||||||
std = cast(StandardDomain, self.env.get_domain('std'))
|
std = cast(StandardDomain, self.env.get_domain('std'))
|
||||||
std.note_object(self.objtype, name, targetname, location=signode)
|
std.note_object(self.objtype, name, node_id, location=signode)
|
||||||
|
|
||||||
|
def make_old_id(self, name: str) -> str:
|
||||||
|
"""Generate old styled node_id for generic objects.
|
||||||
|
|
||||||
|
.. note:: Old Styled node_id was used until Sphinx-3.0.
|
||||||
|
This will be removed in Sphinx-5.0.
|
||||||
|
"""
|
||||||
|
return self.objtype + '-' + name
|
||||||
|
|
||||||
|
|
||||||
class EnvVar(GenericObject):
|
class EnvVar(GenericObject):
|
||||||
|
@ -320,9 +320,13 @@ def test_epub_anchor_id(app):
|
|||||||
app.build()
|
app.build()
|
||||||
|
|
||||||
html = (app.outdir / 'index.xhtml').read_text()
|
html = (app.outdir / 'index.xhtml').read_text()
|
||||||
assert '<p id="std-setting-STATICFILES_FINDERS">blah blah blah</p>' in html
|
assert ('<p id="std-setting-staticfiles-finders">'
|
||||||
assert '<span id="std-setting-STATICFILES_SECTION"></span><h1>blah blah blah</h1>' in html
|
'<span id="std-setting-STATICFILES_FINDERS"></span>'
|
||||||
assert 'see <a class="reference internal" href="#std-setting-STATICFILES_FINDERS">' in html
|
'blah blah blah</p>' in html)
|
||||||
|
assert ('<span id="std-setting-staticfiles-section"></span>'
|
||||||
|
'<span id="std-setting-STATICFILES_SECTION"></span>'
|
||||||
|
'<h1>blah blah blah</h1>' in html)
|
||||||
|
assert 'see <a class="reference internal" href="#std-setting-staticfiles-finders">' in html
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.sphinx('epub', testroot='html_assets')
|
@pytest.mark.sphinx('epub', testroot='html_assets')
|
||||||
|
@ -218,7 +218,7 @@ def test_html4_output(app, status, warning):
|
|||||||
"[@class='rfc reference external']/strong", 'RFC 1'),
|
"[@class='rfc reference external']/strong", 'RFC 1'),
|
||||||
(".//a[@href='https://tools.ietf.org/html/rfc1.html']"
|
(".//a[@href='https://tools.ietf.org/html/rfc1.html']"
|
||||||
"[@class='rfc reference external']/strong", 'Request for Comments #1'),
|
"[@class='rfc reference external']/strong", 'Request for Comments #1'),
|
||||||
(".//a[@href='objects.html#envvar-HOME']"
|
(".//a[@href='objects.html#envvar-home']"
|
||||||
"[@class='reference internal']/code/span[@class='pre']", 'HOME'),
|
"[@class='reference internal']/code/span[@class='pre']", 'HOME'),
|
||||||
(".//a[@href='#with']"
|
(".//a[@href='#with']"
|
||||||
"[@class='reference internal']/code/span[@class='pre']", '^with$'),
|
"[@class='reference internal']/code/span[@class='pre']", '^with$'),
|
||||||
|
Loading…
Reference in New Issue
Block a user