diff --git a/pep-0001.txt b/pep-0001.txt
index 7911d3871ca..492cda199e1 100644
--- a/pep-0001.txt
+++ b/pep-0001.txt
@@ -423,7 +423,6 @@ to development practices and other details. The precise process followed in
these cases will depend on the nature and purpose of the PEP being updated.
-
What belongs in a successful PEP?
=================================
@@ -510,7 +509,8 @@ Each PEP should have the following parts/sections:
ready for consideration are complete and reduces people duplicating
prior discussion.
-12. References -- A collection of URLs used as references through the PEP.
+12. Footnotes -- A collection of footnotes cited in the PEP, and
+ a place to list non-inline hyperlink targets.
13. Copyright/license -- Each new PEP must be placed under a dual license of
public domain and CC0-1.0-Universal_ (see this PEP for an example).
@@ -780,22 +780,20 @@ Resources:
* `Python Developer's Guide `_
-References and Footnotes
-========================
+Footnotes
+=========
.. [1] This historical record is available by the normal git commands
- for retrieving older revisions, and can also be browsed via HTTP here:
- https://github.com/python/peps
+ for retrieving older revisions, and can also be browsed
+ `on GitHub `__.
.. [2] More details on the PEP rendering and publication process can be found
- in the PEPs repo README at
- https://github.com/python/peps/blob/main/README.rst
+ in the `PEPs repo README
+ `__.
-.. _.github/CODEOWNERS:
- https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
+.. _.github/CODEOWNERS: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
-.. _issue tracker:
- https://bugs.python.org/
+.. _issue tracker: https://bugs.python.org/
.. _CC0-1.0-Universal: https://choosealicense.com/licenses/cc0-1.0/
diff --git a/pep-0012.rst b/pep-0012.rst
index 2be95b510cb..d66bb240b9e 100644
--- a/pep-0012.rst
+++ b/pep-0012.rst
@@ -12,7 +12,7 @@ Post-History: 30-Aug-2002
.. note::
For those who have written a PEP before, there is a template_
- (which is included as a file in the PEPs repository).
+ (which is included as a file in the `PEPs repository`_).
Abstract
========
@@ -26,8 +26,9 @@ Note: if you are reading this PEP via the web, you should first grab
the text (reStructuredText) source of this PEP in order to complete
the steps below. **DO NOT USE THE HTML FILE AS YOUR TEMPLATE!**
-The source for this (or any) PEP can be found in the PEPs repository,
-viewable on the web at https://github.com/python/peps/ .
+The source for this (or any) PEP can be found in the
+`PEPs repository `_,
+as well as via a link at the bottom of each PEP.
Rationale
@@ -137,13 +138,8 @@ directions below.
prohibition of tab characters and the indentation requirements.
See "Suggested Sections" below for a template of sections to include.
-- Update your References and Copyright section. Usually you'll place
- your PEP into the public domain, in which case just leave the
- Copyright section alone. Alternatively, you can use the `Open
- Publication License`__, but public domain is still strongly
- preferred.
-
- __ http://www.opencontent.org/openpub/
+- Update your Footnotes section, listing any footnotes and
+ non-inline link targets referenced by the text.
- Leave the Emacs stanza at the end of this file alone, including the
formfeed character ("^L", or ``\f``).
@@ -438,24 +434,52 @@ Hyperlinks
----------
When referencing an external web page in the body of a PEP, you should
-include the title of the page in the text, with either an inline
-hyperlink reference to the URL or a footnote reference (see
-`Footnotes`_ below). Do not include the URL in the body text of the
-PEP.
+include the title of the page or a suitable description in the text, with
+either an inline hyperlink or a separate explicit target with the URL.
+Do not include bare URLs in the body text of the PEP, and use HTTPS
+links wherever available.
Hyperlink references use backquotes and a trailing underscore to mark
up the reference text; backquotes are optional if the reference text
-is a single word. For example::
+is a single word. For example, to reference a hyperlink target named
+``Python website``, you would write:
+
+.. code-block:: rst
+
+ In this paragraph, we refer to the `Python website`_.
+
+If you intend to only reference a link once, and want to define it inline
+with the text, insert the link into angle brackets (``<>``) after the text
+you want to link, but before the closing backtick, with a space between the
+text and the opening backtick. You should also use a double-underscore after
+the closing backtick instead of a single one, which makes it an anonymous
+reference to avoid conflicting with other target names. For example:
- In this paragraph, we refer to the `Python web site`_.
+.. code-block:: rst
+
+ Visit the `website `__ for more.
-An explicit target provides the URL. Put targets in a References
-section at the end of the PEP, or immediately after the reference.
+If you want to use one link multiple places with different linked text,
+or want to ensure you don't have to update your link target names when
+changing the linked text, include the target name within angle brackets
+following the text to link, *with an underscore after the target name
+but before the closing angle bracket* (or the link **will not work**).
+For example:
+
+.. code-block:: rst
+
+ For further examples, see the `documentation `_.
+
+An explicit target provides the URL. Put targets in the Footnotes section
+at the end of the PEP, or immediately after the paragraph with the reference.
Hyperlink targets begin with two periods and a space (the "explicit
markup start"), followed by a leading underscore, the reference text,
-a colon, and the URL (absolute or relative)::
+a colon, and the URL.
- .. _Python web site: http://www.python.org/
+.. code-block:: rst
+
+ .. _Python web site: https://www.python.org/
+ .. _pydocs: https://docs.python.org/
The reference text and the target text must match (although the match
is case-insensitive and ignores differences in whitespace). Note that
@@ -463,18 +487,20 @@ the underscore trails the reference text but precedes the target text.
If you think of the underscore as a right-pointing arrow, it points
*away* from the reference and *toward* the target.
-The same mechanism can be used for internal references. Every unique
-section title implicitly defines an internal hyperlink target. We can
-make a link to the Abstract section like this::
+
+Internal and PEP/RFC Links
+--------------------------
+
+The same mechanism as hyperlinks can be used for internal references.
+Every unique section title implicitly defines an internal hyperlink target.
+We can make a link to the Abstract section like this:
+
+.. code-block:: rst
Here is a hyperlink reference to the `Abstract`_ section. The
backquotes are optional since the reference text is a single word;
we can also just write: Abstract_.
-Footnotes containing the URLs from external targets will be generated
-automatically at the end of the References section of the PEP, along
-with footnote references linking the reference text to the footnotes.
-
To refer to PEPs or RFCs, always use the ``:pep:`` and ``:rfc:`` roles,
never hardcoded URLs.
For example:
@@ -497,47 +523,42 @@ that for you.
Footnotes
---------
-Footnote references consist of a left square bracket, a number, a
-right square bracket, and a trailing underscore:
+Footnote references consist of a left square bracket, a label, a
+right square bracket, and a trailing underscore.
+Instead of a number, use a label of the
+form "#word", where "word" is a mnemonic consisting of alphanumerics
+plus internal hyphens, underscores, and periods (no whitespace or
+other characters are allowed).
+For example:
.. code-block:: rst
- This sentence ends with a footnote reference [1]_.
+ Refer to The TeXbook [#TeXbook]_ for more information.
+
+which renders as
+
+ Refer to The TeXbook [#TeXbook]_ for more information.
Whitespace must precede the footnote reference. Leave a space between
the footnote reference and the preceding word.
+Use footnotes for additional notes, explanations and caveats, as well as
+for references to books and other sources not readily available online.
+Native reST hyperlink targets or inline hyperlinks in the text should be
+used in preference to footnotes for including URLs to online resources.
+
Footnotes begin with ".. " (the explicit
markup start), followed by the footnote marker (no underscores),
followed by the footnote body. For example:
.. code-block:: rst
- References
- ==========
-
- .. [1] Note that the footnote reference is a numbered one.
-
- .. [2] Donald Knuth's *The TeXbook*, pages 195 and 196.
-
-During the course of developing your PEP, you may have to add, remove,
-and rearrange footnote references, possibly resulting in mismatched
-references, obsolete footnotes, and confusion. Auto-numbered
-footnotes allow more freedom. Instead of a number, use a label of the
-form "#word", where "word" is a mnemonic consisting of alphanumerics
-plus internal hyphens, underscores, and periods (no whitespace or
-other characters are allowed). For example:
-
-.. code-block:: rst
-
- Refer to The TeXbook [#TeXbook]_ for more information.
+ .. [#TeXbook] Donald Knuth's *The TeXbook*, pages 195 and 196.
- References
- ==========
+which renders as
.. [#TeXbook] Donald Knuth's *The TeXbook*, pages 195 and 196.
-
Footnotes and footnote references will be numbered automatically, and
the numbers will always match.
@@ -631,15 +652,15 @@ thoroughness, please see:
* `A ReStructuredText Primer`__, a gentle introduction.
- __ http://docutils.sourceforge.net/docs/rst/quickstart.html
+ __ https://docutils.sourceforge.io/docs/user/rst/quickstart.html
* `Quick reStructuredText`__, a users' quick reference.
- __ http://docutils.sourceforge.net/docs/rst/quickref.html
+ __ https://docutils.sourceforge.io/docs/user/rst/quickref.html
* `reStructuredText Markup Specification`__, the final authority.
- __ http://docutils.sourceforge.net/spec/rst/reStructuredText.html
+ __ https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html
The processing of reStructuredText PEPs is done using Docutils_. If
you have a question or require assistance with reStructuredText or
@@ -647,11 +668,11 @@ Docutils, please `post a message`_ to the `Docutils-users mailing
list`_. The `Docutils project web site`_ has more information.
.. _Docutils:
-.. _Docutils project web site: http://docutils.sourceforge.net/
+.. _Docutils project web site: https://docutils.sourceforge.io/
.. _post a message:
mailto:docutils-users@lists.sourceforge.net?subject=PEPs
.. _Docutils-users mailing list:
- http://docutils.sf.net/docs/user/mailing-lists.html#docutils-users
+ https://docutils.sourceforge.io/docs/user/mailing-lists.html#docutils-users
Copyright
diff --git a/pep-0012/pep-NNNN.rst b/pep-0012/pep-NNNN.rst
index 5ba7d1ce61f..0ced89b223d 100644
--- a/pep-0012/pep-NNNN.rst
+++ b/pep-0012/pep-NNNN.rst
@@ -75,10 +75,10 @@ Open Issues
[Any points that are still being decided/discussed.]
-References
-==========
+Footnotes
+=========
-[A collection of URLs used as references through the PEP.]
+[A collection of footnotes cited in the PEP, and a place to list non-inline hyperlink targets.]
Copyright
diff --git a/pep0/constants.py b/pep0/constants.py
index 108710d0927..3f48dd488b1 100644
--- a/pep0/constants.py
+++ b/pep0/constants.py
@@ -21,14 +21,14 @@
intro = """\
This PEP contains the index of all Python Enhancement Proposals,
-known as PEPs. PEP numbers are assigned by the PEP editors[1_], and
-once assigned are never changed. The version control history [2_] of
-the PEP texts represent their historical record.
+known as PEPs. PEP numbers are :pep:`assigned <1#pep-editors>` by the
+PEP editors, and once assigned are never changed.
+The `version control history`_ of the PEP texts represent
+their historical record.
"""
references = """\
-.. [1] PEP 1: PEP Purpose and Guidelines
-.. [2] View PEP history online: https://github.com/python/peps
+.. _version control history: https://github.com/python/peps
"""
footer = """\
diff --git a/pep2html.py b/pep2html.py
index a35c9603e22..970c68dbafa 100755
--- a/pep2html.py
+++ b/pep2html.py
@@ -496,7 +496,7 @@ def apply(self):
class PEPFooter(Transform):
- """Remove the References section if it is empty when rendered."""
+ """Remove the References/Footnotes section if it is empty when rendered."""
# Set low priority so ref targets aren't removed before they are needed
default_priority = 999
@@ -510,14 +510,13 @@ def apply(self):
for section in reversed(self.document):
if not isinstance(section, nodes.section):
continue
- title_words = section[0].astext().lower().split()
- if 'references' in title_words:
- # Remove references section if there are no displayed
- # footnotes (it only has title & link target nodes)
+ title_words = {*section[0].astext().lower().split()}
+ if {"references", "footnotes"} & title_words:
+ # Remove references/footnotes sections if there is no displayed
+ # content (i.e. they only have title & link target nodes)
if all(isinstance(ref_node, (nodes.title, nodes.target))
for ref_node in section):
section.parent.remove(section)
- break
class PEPReader(standalone.Reader):
diff --git a/pep_sphinx_extensions/pep_processor/transforms/pep_footer.py b/pep_sphinx_extensions/pep_processor/transforms/pep_footer.py
index 7f8c0f01535..80214f43e67 100644
--- a/pep_sphinx_extensions/pep_processor/transforms/pep_footer.py
+++ b/pep_sphinx_extensions/pep_processor/transforms/pep_footer.py
@@ -9,8 +9,8 @@
class PEPFooter(transforms.Transform):
"""Footer transforms for PEPs.
- - Removes the References section if it is empty when rendered.
- - Creates a link to the (GitHub) source text.
+ - Remove the References/Footnotes section if it is empty when rendered.
+ - Create a link to the (GitHub) source text.
Source Link:
Create the link to the source file from the document source path,
@@ -30,10 +30,10 @@ def apply(self) -> None:
for section in reversed(self.document[0]):
if not isinstance(section, nodes.section):
continue
- title_words = section[0].astext().lower().split()
- if "references" in title_words:
- # Remove references section if there are no displayed
- # footnotes (it only has title & link target nodes)
+ title_words = {*section[0].astext().lower().split()}
+ if {"references", "footnotes"} & title_words:
+ # Remove references/footnotes sections if there is no displayed
+ # content (i.e. they only have title & link target nodes)
to_hoist = []
types = set()
for node in section:
@@ -43,7 +43,6 @@ def apply(self) -> None:
if types <= {nodes.title, nodes.target}:
section.parent.extend(to_hoist)
section.parent.remove(section)
- break
# Add link to source text and last modified date
if pep_source_path.stem != "pep-0000":