|
From: <mi...@us...> - 2025-06-21 22:10:17
|
Revision: 10177
http://sourceforge.net/p/docutils/code/10177
Author: milde
Date: 2025-06-21 22:10:15 +0000 (Sat, 21 Jun 2025)
Log Message:
-----------
Don't report an error for duplicate targets with identical refname.
Widen the existing exception for external targets with duplicate names
(no warning/error, if both refer to the same URI) to indirect targets
(no warning/error, if both refer to the same refname).
Modified Paths:
--------------
trunk/docutils/HISTORY.rst
trunk/docutils/docs/ref/rst/restructuredtext.rst
trunk/docutils/docutils/nodes.py
trunk/docutils/test/test_parsers/test_rst/test_targets.py
Modified: trunk/docutils/HISTORY.rst
===================================================================
--- trunk/docutils/HISTORY.rst 2025-06-18 14:03:25 UTC (rev 10176)
+++ trunk/docutils/HISTORY.rst 2025-06-21 22:10:15 UTC (rev 10177)
@@ -17,8 +17,13 @@
Release 0.22rc5 (unpublished)
=============================
-* docutils/docutils/parsers/rst/states.py
+* docutils/nodes.py
+ - Don't invalidate indirect targets with duplicate name, if they refer to
+ the same refname (similar to external targets refering to the same URI).
+
+* docutils/parsers/rst/states.py
+
- "Downgrade" targets generated from hyperlink references with embedded
URI or alias from explicit to implicit (cf. bug #502).
Modified: trunk/docutils/docs/ref/rst/restructuredtext.rst
===================================================================
--- trunk/docutils/docs/ref/rst/restructuredtext.rst 2025-06-18 14:03:25 UTC (rev 10176)
+++ trunk/docutils/docs/ref/rst/restructuredtext.rst 2025-06-21 22:10:15 UTC (rev 10177)
@@ -2478,9 +2478,9 @@
3. Duplicate explicit hyperlink targets are removed, and level-2
(warning) system messages are inserted.
-4. Exception: duplicate `external hyperlink targets`_ (identical
- reference names and referenced URIs) do not conflict, and are not
- removed.
+4. Exception: duplicate external or indirect hyperlink targets
+ (identical reference names and referenced URIs or hyperlink
+ references) do not conflict, one is removed.
System messages are inserted where target links have been removed.
See "Error Handling" in `PEP 258`_.
Modified: trunk/docutils/docutils/nodes.py
===================================================================
--- trunk/docutils/docutils/nodes.py 2025-06-18 14:03:25 UTC (rev 10176)
+++ trunk/docutils/docutils/nodes.py 2025-06-21 22:10:15 UTC (rev 10177)
@@ -1904,7 +1904,7 @@
==== ======== ======== ======== ======= ==== ======== =====
.. [#] Do not clear the name-to-id map or invalidate the old target if
- both old and new targets are external and refer to identical URIs.
+ both old and new targets refer to identical URIs or reference names.
The new target is invalidated regardless.
"""
for name in tuple(node['names']):
@@ -1929,11 +1929,13 @@
self.nametypes[name] = old_explicit or explicit
- if (old_id is not None and 'refuri' in node
- and node['refuri'] == old_node.get('refuri')):
- # external targets with same URI -> keep old target
+ if old_id is not None and (
+ 'refname' in node and node['refname'] == old_node.get('refname')
+ or 'refuri' in node and node['refuri'] == old_node.get('refuri')
+ ):
+ # indirect targets with same reference -> keep old target
level = 1
- ref = node["refuri"]
+ ref = node.get('refuri') or node.get('refname')
s = f'Duplicate name "{name}" for external target "{ref}".'
dupname(node, name)
elif explicit:
Modified: trunk/docutils/test/test_parsers/test_rst/test_targets.py
===================================================================
--- trunk/docutils/test/test_parsers/test_rst/test_targets.py 2025-06-18 14:03:25 UTC (rev 10176)
+++ trunk/docutils/test/test_parsers/test_rst/test_targets.py 2025-06-21 22:10:15 UTC (rev 10177)
@@ -249,6 +249,33 @@
<target dupnames="example" ids="example-1" refuri="example.rst">
"""],
["""\
+Duplicate indirect _`targets` (same refname):
+
+.. _link: targets_
+
+.. _link: targets_
+
+do not conflict. The reference name can be used in a link_.
+""",
+"""\
+<document source="test data">
+ <paragraph>
+ Duplicate indirect \n\
+ <target ids="targets" names="targets">
+ targets
+ (same refname):
+ <target ids="link" names="link" refname="targets">
+ <system_message backrefs="link-1" level="1" line="5" source="test data" type="INFO">
+ <paragraph>
+ Duplicate name "link" for external target "targets".
+ <target dupnames="link" ids="link-1" refname="targets">
+ <paragraph>
+ do not conflict. The reference name can be used in a \n\
+ <reference name="link" refname="link">
+ link
+ .
+"""],
+["""\
Duplicate implicit targets.
Title
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|