Nozomu Kaneko avatar Nozomu Kaneko committed be77558

fix #1058 Footnote backlinks do not work

Comments (0)

Files changed (4)

sphinx/environment.py

         for citnode in self.document.traverse(nodes.citation_reference):
             cittext = citnode.astext()
             refnode = addnodes.pending_xref(cittext, reftype='citation',
-                                            reftarget=cittext, refwarn=True)
+                                            reftarget=cittext, refwarn=True,
+                                            ids=citnode["ids"])
             refnode.line = citnode.line or citnode.parent.line
             refnode += nodes.Text('[' + cittext + ']')
             citnode.parent.replace(citnode, refnode)

tests/root/contents.txt

    extensions
    versioning/index
    only
+   footnote
    i18n/index
 
    Python <http://python.org/>

tests/root/footnote.txt

+:tocdepth: 2
+
+Testing footnote and citation
+================================
+.. #1058 footnote-backlinks-do-not-work
+
+numbered footnote
+--------------------
+
+[1]_
+
+auto-numbered footnote
+------------------------------
+
+[#]_
+
+named footnote
+--------------------
+
+[#foo]_
+
+citation
+--------------------
+
+[bar]_
+
+footenotes
+--------------------
+
+.. rubric:: Footnotes
+
+.. [1] numbered
+
+.. [#] auto numbered
+
+.. [#foo] named
+
+.. rubric:: Citations
+
+.. [bar] cite

tests/test_footnote.py

+# -*- coding: utf-8 -*-
+"""
+    test_footnote
+    ~~~~~~~~~~~~~
+
+    Test for footnote and citation.
+
+    :copyright: Copyright 2010 by the Sphinx team, see AUTHORS.
+    :license: BSD, see LICENSE for details.
+"""
+
+import re
+
+from util import *
+
+
+def teardown_module():
+    (test_root / '_build').rmtree(True)
+
+
+@with_app(buildername='html')
+def test_html(app):
+    app.builder.build(['footnote'])
+    result = (app.outdir / 'footnote.html').text(encoding='utf-8')
+    expects = [
+        '<a class="footnote-reference" href="#id5" id="id1">[1]</a>',
+        '<a class="footnote-reference" href="#id6" id="id2">[2]</a>',
+        '<a class="footnote-reference" href="#foo" id="id3">[3]</a>',
+        '<a class="reference internal" href="#bar" id="id4">[bar]</a>',
+        '<a class="fn-backref" href="#id1">[1]</a>',
+        '<a class="fn-backref" href="#id2">[2]</a>',
+        '<a class="fn-backref" href="#id3">[3]</a>',
+        '<a class="fn-backref" href="#id4">[bar]</a>',
+        ]
+    for expect in expects:
+        matches = re.findall(re.escape(expect), result)
+        assert len(matches) == 1
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.