From 92142bbdb68e98515112c34ec70ca18fd6f3ea6e Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 5 Aug 2010 15:42:15 +0200 Subject: [PATCH] Allow references to PEPs and RFCs with explicit anchors. --- CHANGES | 2 ++ doc/markup/inline.rst | 6 ++++-- sphinx/roles.py | 14 ++++++++++++-- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index 41f0b1c4d..ad51ffeff 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,8 @@ Release 1.0.2 (in development) ============================== +* Allow references to PEPs and RFCs with explicit anchors. + * #471: Fix LaTeX references to figures. * #482: When doing a non-exact search, match only the given type diff --git a/doc/markup/inline.rst b/doc/markup/inline.rst index 4453ab00a..4b704228f 100644 --- a/doc/markup/inline.rst +++ b/doc/markup/inline.rst @@ -274,13 +274,15 @@ The following roles generate external links: A reference to a Python Enhancement Proposal. This generates appropriate index entries. The text "PEP *number*\ " is generated; in the HTML output, - this text is a hyperlink to an online copy of the specified PEP. + this text is a hyperlink to an online copy of the specified PEP. You can + link to a specific section by saying ``:pep:`number#anchor```. .. rst:role:: rfc A reference to an Internet Request for Comments. This generates appropriate index entries. The text "RFC *number*\ " is generated; in the HTML output, - this text is a hyperlink to an online copy of the specified RFC. + this text is a hyperlink to an online copy of the specified RFC. You can + link to a specific section by saying ``:rfc:`number#anchor```. Note that there are no special roles for including hyperlinks as you can use diff --git a/sphinx/roles.py b/sphinx/roles.py index bacdad5b6..0ea0ec485 100644 --- a/sphinx/roles.py +++ b/sphinx/roles.py @@ -173,6 +173,10 @@ def indexmarkup_role(typ, rawtext, etext, lineno, inliner, indexnode['entries'] = [ ('single', _('Python Enhancement Proposals!PEP %s') % text, targetid, 'PEP %s' % text)] + anchor = '' + anchorindex = text.find('#') + if anchorindex > 0: + text, anchor = text[:anchorindex], text[anchorindex:] try: pepnum = int(text) except ValueError: @@ -182,12 +186,17 @@ def indexmarkup_role(typ, rawtext, etext, lineno, inliner, return [prb], [msg] ref = inliner.document.settings.pep_base_url + 'pep-%04d' % pepnum sn = nodes.strong('PEP '+text, 'PEP '+text) - rn = nodes.reference('', '', internal=False, refuri=ref, classes=[typ]) + rn = nodes.reference('', '', internal=False, refuri=ref+anchor, + classes=[typ]) rn += sn return [indexnode, targetnode, rn], [] elif typ == 'rfc': indexnode['entries'] = [('single', 'RFC; RFC %s' % text, targetid, 'RFC %s' % text)] + anchor = '' + anchorindex = text.find('#') + if anchorindex > 0: + text, anchor = text[:anchorindex], text[anchorindex:] try: rfcnum = int(text) except ValueError: @@ -197,7 +206,8 @@ def indexmarkup_role(typ, rawtext, etext, lineno, inliner, return [prb], [msg] ref = inliner.document.settings.rfc_base_url + inliner.rfc_url % rfcnum sn = nodes.strong('RFC '+text, 'RFC '+text) - rn = nodes.reference('', '', internal=False, refuri=ref, classes=[typ]) + rn = nodes.reference('', '', internal=False, refuri=ref+anchor, + classes=[typ]) rn += sn return [indexnode, targetnode, rn], []