From 1161d5c0312c2a6f8cbf03282414e75a0b97462b Mon Sep 17 00:00:00 2001 From: wiemann Date: Wed, 29 Jun 2005 22:34:44 +0000 Subject: [PATCH] removed document.internal_targets and document.external_targets; fixed bug (not sure yet if the code is clean -- needs refactoring) git-svn-id: https://docutils.svn.sourceforge.net/svnroot/docutils/trunk/docutils@3637 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/nodes.py | 12 ---------- docutils/parsers/rst/states.py | 6 ----- docutils/transforms/references.py | 40 ++++++++++++++------------------- test/test_transforms/test_hyperlinks.py | 18 +++++++++++++++ tools/stylesheets/latex.tex | 6 ++--- 5 files changed, 38 insertions(+), 44 deletions(-) diff --git a/docutils/nodes.py b/docutils/nodes.py index dc2dbcb32..b68f7e9f5 100644 --- a/docutils/nodes.py +++ b/docutils/nodes.py @@ -750,12 +750,6 @@ class document(Root, Structural, Element): self.reporter = reporter """System message generator.""" - self.external_targets = [] - """List of external named target nodes.""" - - self.internal_targets = [] - """List of internal block-level target nodes.""" - self.indirect_targets = [] """List of indirect target nodes.""" @@ -967,12 +961,6 @@ class document(Root, Structural, Element): def note_refid(self, node): self.refids.setdefault(node['refid'], []).append(node) - def note_external_target(self, target): - self.external_targets.append(target) - - def note_internal_target(self, target): - self.internal_targets.append(target) - def note_indirect_target(self, target): self.indirect_targets.append(target) if target['names']: diff --git a/docutils/parsers/rst/states.py b/docutils/parsers/rst/states.py index 9f12bd560..4156fd682 100644 --- a/docutils/parsers/rst/states.py +++ b/docutils/parsers/rst/states.py @@ -788,7 +788,6 @@ class Inliner: if target: reference['refuri'] = uri target['names'].append(refname) - self.document.note_external_target(target) self.document.note_explicit_target(target, self.parent) node_list.append(target) else: @@ -1870,17 +1869,12 @@ class Body(RSTState): uri = self.inliner.adjust_uri(refuri) if uri: target['refuri'] = uri - self.document.note_external_target(target) else: raise ApplicationError('problem with URI: %r' % refuri) - else: - self.document.note_internal_target(target) self.document.note_explicit_target(target, self.parent) else: # anonymous target if refuri: target['refuri'] = refuri - else: - self.document.note_internal_target(target) target['anonymous'] = 1 self.document.note_anonymous_target(target) diff --git a/docutils/transforms/references.py b/docutils/transforms/references.py index 52f1d65be..cce95e3cb 100644 --- a/docutils/transforms/references.py +++ b/docutils/transforms/references.py @@ -42,12 +42,13 @@ class PropagateTargets(Transform): default_priority = 260 def apply(self): - for target in self.document.internal_targets: - assert len(target) == 0, ('only block-level targets expected in ' - 'document.internal_targets') - if (target.hasattr('refid') or target.hasattr('refuri') or - target.hasattr('refname')): + for target in self.document.traverse(nodes.target): + # Only block-level targets without reference (like ".. target:"): + if (isinstance(target.parent, nodes.TextElement) or + (target.hasattr('refid') or target.hasattr('refuri') or + target.hasattr('refname'))): continue + assert len(target) == 0, 'error: block-level target has children' next_node = target.next_node(ascend=1) # Do not move names and ids into Invisibles (we'd lose the # attributes) or different Targetables (e.g. footnotes). @@ -84,8 +85,6 @@ class PropagateTargets(Transform): target['ids'] = [] target['names'] = [] self.document.note_refid(target) - if isinstance(next_node, nodes.target): - self.document.note_internal_target(next_node) class AnonymousHyperlinks(Transform): @@ -242,8 +241,6 @@ class IndirectHyperlinks(Transform): del target.multiply_indirect if reftarget.hasattr('refuri'): target['refuri'] = reftarget['refuri'] - if target['names']: - self.document.note_external_target(target) if target.has_key('refid'): del target['refid'] elif reftarget.hasattr('refid'): @@ -295,12 +292,10 @@ class IndirectHyperlinks(Transform): def resolve_indirect_references(self, target): if target.hasattr('refid'): attname = 'refid' - call_if_named = 0 call_method = self.document.note_refid elif target.hasattr('refuri'): attname = 'refuri' - call_if_named = 1 - call_method = self.document.note_external_target + call_method = None else: return attval = target[attname] @@ -313,7 +308,7 @@ class IndirectHyperlinks(Transform): continue del ref['refname'] ref[attname] = attval - if not call_if_named or ref['names']: + if call_method: call_method(ref) ref.resolved = 1 if isinstance(ref, nodes.target): @@ -327,7 +322,7 @@ class IndirectHyperlinks(Transform): continue del ref['refid'] ref[attname] = attval - if not call_if_named or ref['names']: + if call_method: call_method(ref) ref.resolved = 1 if isinstance(ref, nodes.target): @@ -355,7 +350,7 @@ class ExternalTargets(Transform): default_priority = 640 def apply(self): - for target in self.document.external_targets: + for target in self.document.traverse(nodes.target): if target.hasattr('refuri'): refuri = target['refuri'] for name in target['names']: @@ -375,8 +370,9 @@ class InternalTargets(Transform): default_priority = 660 def apply(self): - for target in self.document.internal_targets: - self.resolve_reference_ids(target) + for target in self.document.traverse(nodes.target): + if not target.hasattr('refuri') and not target.hasattr('refid'): + self.resolve_reference_ids(target) def resolve_reference_ids(self, target): """ @@ -395,9 +391,6 @@ class InternalTargets(Transform): direct internal """ - if target.hasattr('refuri') or target.hasattr('refid') \ - or not target['names']: - return for name in target['names']: refid = self.document.nameids[name] reflist = self.document.refnames.get(name, []) @@ -721,10 +714,11 @@ class TargetNotes(Transform): def apply(self): notes = {} nodelist = [] - for target in self.document.external_targets: + for target in self.document.traverse(nodes.target): + # Only external targets. + if not target.hasattr('refuri'): + continue names = target['names'] - # Only named targets. - assert names refs = [] for name in names: refs.extend(self.document.refnames.get(name, [])) diff --git a/test/test_transforms/test_hyperlinks.py b/test/test_transforms/test_hyperlinks.py index cf218ee47..fc7441c5f 100755 --- a/test/test_transforms/test_hyperlinks.py +++ b/test/test_transforms/test_hyperlinks.py @@ -396,6 +396,24 @@ The results of the transform are not visible at the XML level. The results of the transform are not visible at the XML level. """], ["""\ +.. _chained: +__ http://anonymous + +Anonymous__ and chained_ both refer to the same URI. +""", +"""\ + + + + + + Anonymous + and \n\ + + chained + both refer to the same URI. +"""], +["""\ .. _a: .. _b: diff --git a/tools/stylesheets/latex.tex b/tools/stylesheets/latex.tex index 8937fe1ac..a73d78822 100644 --- a/tools/stylesheets/latex.tex +++ b/tools/stylesheets/latex.tex @@ -205,11 +205,11 @@ \providecommand{\DSlanguage}{% % Set up babel. - \ifthenelse{\equal{\Dlanguagebabel}{}}{}{% - \usepackage[\Dlanguagebabel]{babel}% + \ifthenelse{\equal{\Dlanguagebabel}{}}{}{ + \usepackage[\Dlanguagebabel]{babel} } } - + -- 2.11.4.GIT