Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

texinfo: simplify reference emission. #9578

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions doc/_static/conf.py.txt
Expand Up @@ -319,6 +319,10 @@ texinfo_documents = [
#
# texinfo_no_detailmenu = False

# If false, do not generate in manual @ref nodes.
#
# texinfo_cross_references = False

# -- A random example -----------------------------------------------------

import sys, os
Expand Down
4 changes: 4 additions & 0 deletions doc/faq.rst
Expand Up @@ -299,6 +299,10 @@ appear in the source. Emacs, on the other-hand, will by default replace

:ref:`texinfo-links`

One can disable generation of the inline references in a document
with :confval:`texinfo_cross_references`. That makes
an info file more readable with stand-alone reader (``info``).

The exact behavior of how Emacs displays references is dependent on the variable
``Info-hide-note-references``. If set to the value of ``hide``, Emacs will hide
both the ``*note:`` part and the ``target-id``. This is generally the best way
Expand Down
7 changes: 7 additions & 0 deletions doc/usage/configuration.rst
Expand Up @@ -2499,6 +2499,13 @@ These options influence Texinfo output.

.. versionadded:: 1.1

.. confval:: texinfo_cross_references

If false, do not generate inline references in a document. That makes
an info file more readable with stand-alone reader (``info``).
Default is ``True``.

.. versionadded:: 4.4

.. _qthelp-options:

Expand Down
1 change: 1 addition & 0 deletions sphinx/builders/texinfo.py
Expand Up @@ -211,6 +211,7 @@ def setup(app: Sphinx) -> Dict[str, Any]:
app.add_config_value('texinfo_domain_indices', True, None, [list])
app.add_config_value('texinfo_show_urls', 'footnote', None)
app.add_config_value('texinfo_no_detailmenu', False, None)
app.add_config_value('texinfo_cross_references', True, None)

return {
'version': 'builtin',
Expand Down
9 changes: 6 additions & 3 deletions sphinx/writers/texinfo.py
Expand Up @@ -546,9 +546,12 @@ def add_anchor(self, id: str, node: Node) -> None:
def add_xref(self, id: str, name: str, node: Node) -> None:
name = self.escape_menu(name)
sid = self.get_short_id(id)
self.body.append('@ref{%s,,%s}' % (sid, name))
self.referenced_ids.add(sid)
self.referenced_ids.add(self.escape_id(id))
if self.config.texinfo_cross_references:
self.body.append('@ref{%s,,%s}' % (sid, name))
self.referenced_ids.add(sid)
self.referenced_ids.add(self.escape_id(id))
else:
self.body.append(name)

# -- Visiting

Expand Down
14 changes: 14 additions & 0 deletions tests/test_build_texinfo.py
Expand Up @@ -114,6 +114,20 @@ def test_texinfo_escape_id(app, status, warning):
assert translator.escape_id('.') == '.'


@pytest.mark.sphinx('texinfo')
def test_texinfo_xrefs(app, status, warning):
app.builder.build_all()
output = (app.outdir / 'sphinxtests.texi').read_text()
assert re.search(r'@ref{\w+,,--plugin\.option}', output)

# Now rebuild it without xrefs
app.config.texinfo_cross_references = False
app.builder.build_all()
output = (app.outdir / 'sphinxtests.texi').read_text()
assert not re.search(r'@ref{\w+,,--plugin\.option}', output)
assert 'Link to perl +p, --ObjC++, --plugin.option, create-auth-token, arg and -j' in output


@pytest.mark.sphinx('texinfo', testroot='root')
def test_texinfo_samp_with_variable(app, status, warning):
app.build()
Expand Down