Issue #28763: Use double hyphens (rendered as en-dashes) in numerical ranges
in the documentation.
diff --git a/Doc/library/calendar.rst b/Doc/library/calendar.rst
index a04505f..9e02ad3 100644
--- a/Doc/library/calendar.rst
+++ b/Doc/library/calendar.rst
@@ -48,7 +48,7 @@
 
    .. method:: itermonthdates(year, month)
 
-      Return an iterator for the month *month* (1-12) in the year *year*. This
+      Return an iterator for the month *month* (1--12) in the year *year*. This
       iterator will return all days (as :class:`datetime.date` objects) for the
       month and all days before the start of the month or after the end of the
       month that are required to get a complete week.
diff --git a/Doc/library/cmath.rst b/Doc/library/cmath.rst
index fffdc9f..b80eaba 100644
--- a/Doc/library/cmath.rst
+++ b/Doc/library/cmath.rst
@@ -255,6 +255,6 @@
 
    Kahan, W:  Branch cuts for complex elementary functions; or, Much ado about
    nothing's sign bit.  In Iserles, A., and Powell, M. (eds.), The state of the art
-   in numerical analysis. Clarendon Press (1987) pp165-211.
+   in numerical analysis. Clarendon Press (1987) pp165--211.
 
 
diff --git a/Doc/library/codecs.rst b/Doc/library/codecs.rst
index 9d52fe1..4fd0951 100644
--- a/Doc/library/codecs.rst
+++ b/Doc/library/codecs.rst
@@ -796,8 +796,8 @@
 unicode object into a sequence of bytes is called encoding and recreating the
 unicode object from the sequence of bytes is known as decoding.  There are many
 different methods for how this transformation can be done (these methods are
-also called encodings). The simplest method is to map the code points 0-255 to
-the bytes ``0x0``-``0xff``. This means that a unicode object that contains
+also called encodings). The simplest method is to map the code points 0--255 to
+the bytes ``0x0``--``0xff``. This means that a unicode object that contains
 code points above ``U+00FF`` can't be encoded with this method (which is called
 ``'latin-1'`` or ``'iso-8859-1'``). :func:`unicode.encode` will raise a
 :exc:`UnicodeEncodeError` that looks like this: ``UnicodeEncodeError: 'latin-1'
@@ -806,7 +806,7 @@
 
 There's another group of encodings (the so called charmap encodings) that choose
 a different subset of all unicode code points and how these code points are
-mapped to the bytes ``0x0``-``0xff``. To see how this is done simply open
+mapped to the bytes ``0x0``--``0xff``. To see how this is done simply open
 e.g. :file:`encodings/cp1252.py` (which is an encoding that is used primarily on
 Windows). There's a string constant with 256 characters that shows you which
 character is mapped to which byte value.
diff --git a/Doc/library/curses.ascii.rst b/Doc/library/curses.ascii.rst
index 4f4d915..ec20f54 100644
--- a/Doc/library/curses.ascii.rst
+++ b/Doc/library/curses.ascii.rst
@@ -214,7 +214,7 @@
 
    Return a string representation of the ASCII character *c*.  If *c* is printable,
    this string is the character itself.  If the character is a control character
-   (0x00-0x1f) the string consists of a caret (``'^'``) followed by the
+   (0x00--0x1f) the string consists of a caret (``'^'``) followed by the
    corresponding uppercase letter. If the character is an ASCII delete (0x7f) the
    string is ``'^?'``.  If the character has its meta bit (0x80) set, the meta bit
    is stripped, the preceding rules applied, and ``'!'`` prepended to the result.
diff --git a/Doc/library/curses.rst b/Doc/library/curses.rst
index 43941d9..c70afe3 100644
--- a/Doc/library/curses.rst
+++ b/Doc/library/curses.rst
@@ -316,7 +316,7 @@
    Return the name of the key numbered *k*.  The name of a key generating printable
    ASCII character is the key's character.  The name of a control-key combination
    is a two-character string consisting of a caret followed by the corresponding
-   printable ASCII character.  The name of an alt-key combination (128-255) is a
+   printable ASCII character.  The name of an alt-key combination (128--255) is a
    string consisting of the prefix 'M-' followed by the name of the corresponding
    ASCII character.
 
diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst
index 350bc71..f294b6e 100644
--- a/Doc/library/functions.rst
+++ b/Doc/library/functions.rst
@@ -670,7 +670,7 @@
    preceded by ``+`` or ``-`` (with no space in between) and surrounded by
    whitespace.  A base-n literal consists of the digits 0 to n-1, with ``a``
    to ``z`` (or ``A`` to ``Z``) having
-   values 10 to 35.  The default *base* is 10. The allowed values are 0 and 2-36.
+   values 10 to 35.  The default *base* is 10. The allowed values are 0 and 2--36.
    Base-2, -8, and -16 literals can be optionally prefixed with ``0b``/``0B``,
    ``0o``/``0O``/``0``, or ``0x``/``0X``, as with integer literals in code.
    Base 0 means to interpret the string exactly as an integer literal, so that
diff --git a/Doc/library/json.rst b/Doc/library/json.rst
index 70defa2..c4d5ee6 100644
--- a/Doc/library/json.rst
+++ b/Doc/library/json.rst
@@ -350,7 +350,7 @@
 
    If *strict* is false (``True`` is the default), then control characters
    will be allowed inside strings.  Control characters in this context are
-   those with character codes in the 0-31 range, including ``'\t'`` (tab),
+   those with character codes in the 0--31 range, including ``'\t'`` (tab),
    ``'\n'``, ``'\r'`` and ``'\0'``.
 
    If the data being deserialized is not a valid JSON document, a
diff --git a/Doc/library/random.rst b/Doc/library/random.rst
index c569fa1..2a3c3af 100644
--- a/Doc/library/random.rst
+++ b/Doc/library/random.rst
@@ -343,7 +343,7 @@
 
    M. Matsumoto and T. Nishimura, "Mersenne Twister: A 623-dimensionally
    equidistributed uniform pseudorandom number generator", ACM Transactions on
-   Modeling and Computer Simulation Vol. 8, No. 1, January pp.3-30 1998.
+   Modeling and Computer Simulation Vol. 8, No. 1, January pp.3--30 1998.
 
    Wichmann, B. A. & Hill, I. D., "Algorithm AS 183: An efficient and portable
    pseudo-random number generator", Applied Statistics 31 (1982) 188-190.
diff --git a/Doc/library/sgmllib.rst b/Doc/library/sgmllib.rst
index bffd535..1fc650c 100644
--- a/Doc/library/sgmllib.rst
+++ b/Doc/library/sgmllib.rst
@@ -143,7 +143,7 @@
 
    Convert a character reference to a string, or ``None``.  *ref* is the reference
    passed in as a string.  In the base implementation, *ref* must be a decimal
-   number in the range 0-255.  It converts the code point found using the
+   number in the range 0--255.  It converts the code point found using the
    :meth:`convert_codepoint` method. If *ref* is invalid or out of range, this
    method returns ``None``.  This method is called by the default
    :meth:`handle_charref` implementation and by the attribute value parser.
diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst
index e1900c7..31e644e 100644
--- a/Doc/library/sys.rst
+++ b/Doc/library/sys.rst
@@ -231,7 +231,7 @@
    (defaulting to zero), or another type of object.  If it is an integer, zero
    is considered "successful termination" and any nonzero value is considered
    "abnormal termination" by shells and the like.  Most systems require it to be
-   in the range 0-127, and produce undefined results otherwise.  Some systems
+   in the range 0--127, and produce undefined results otherwise.  Some systems
    have a convention for assigning specific meanings to specific exit codes, but
    these are generally underdeveloped; Unix programs generally use 2 for command
    line syntax errors and 1 for all other kind of errors.  If another type of