summaryrefslogtreecommitdiff
path: root/docutils/transforms
diff options
context:
space:
mode:
authorgoodger <goodger@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2003-01-17 19:45:54 +0000
committergoodger <goodger@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2003-01-17 19:45:54 +0000
commitce023f176856687f0329c4d3fcc22e6e320bc753 (patch)
treed91faea7219ce4e66d71e602e1660658d4caf65d /docutils/transforms
parent3c59885646e7a7416b0f9d2a51417dcfb22a13ba (diff)
downloaddocutils-ce023f176856687f0329c4d3fcc22e6e320bc753.tar.gz
Added check for circular indirect references.
git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@1140 929543f6-e4f2-0310-98a6-ba3bd3dd1d04
Diffstat (limited to 'docutils/transforms')
-rw-r--r--docutils/transforms/references.py19
1 files changed, 16 insertions, 3 deletions
diff --git a/docutils/transforms/references.py b/docutils/transforms/references.py
index bdc56ccfc..5b1243ed5 100644
--- a/docutils/transforms/references.py
+++ b/docutils/transforms/references.py
@@ -221,7 +221,14 @@ class IndirectHyperlinks(Transform):
reftarget = self.document.ids[reftarget_id]
if isinstance(reftarget, nodes.target) \
and not reftarget.resolved and reftarget.hasattr('refname'):
+ if hasattr(target, 'multiply_indirect'):
+ #and target.multiply_indirect):
+ #del target.multiply_indirect
+ self.circular_indirect_reference(target)
+ return
+ target.multiply_indirect = 1
self.resolve_indirect_target(reftarget) # multiply indirect
+ del target.multiply_indirect
if reftarget.hasattr('refuri'):
target['refuri'] = reftarget['refuri']
if target.hasattr('name'):
@@ -241,6 +248,12 @@ class IndirectHyperlinks(Transform):
reftarget.referenced = 1
def nonexistent_indirect_target(self, target):
+ self.indirect_target_error(target, 'which does not exist')
+
+ def circular_indirect_reference(self, target):
+ self.indirect_target_error(target, 'forming a circular reference')
+
+ def indirect_target_error(self, target, explanation):
naming = ''
if target.hasattr('name'):
naming = '"%s" ' % target['name']
@@ -248,9 +261,9 @@ class IndirectHyperlinks(Transform):
else:
reflist = self.document.refids.get(target['id'], [])
naming += '(id="%s")' % target['id']
- msg = self.document.reporter.warning(
- 'Indirect hyperlink target %s refers to target "%s", '
- 'which does not exist.' % (naming, target['refname']),
+ msg = self.document.reporter.error(
+ 'Indirect hyperlink target %s refers to target "%s", %s.'
+ % (naming, target['refname'], explanation),
base_node=target)
msgid = self.document.set_id(msg)
for ref in reflist: