From 0b70a32efedb1d0fe8789e6278db52b0973f1700 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 3 Jan 2010 11:42:15 +0100 Subject: [PATCH] Ignore images in section titles when generating link captions. (Otherwise, the "alt" text leaks into the caption, and docutils automatically assigns an alt text to images in substitutions.) --- CHANGES | 2 ++ sphinx/environment.py | 10 +++++----- sphinx/util/__init__.py | 8 ++++++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/CHANGES b/CHANGES index b6a2d3843..177344642 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,8 @@ Release 0.6.4 (in development) ============================== +* Ignore images in section titles when generating link captions. + * #310: support exception messages in the ``testoutput`` blocks of the ``doctest`` extension. diff --git a/sphinx/environment.py b/sphinx/environment.py index 83c97d5f4..b83b2fbf0 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -37,7 +37,7 @@ from docutils.transforms.parts import ContentsFilter from sphinx import addnodes from sphinx.util import movefile, get_matching_docs, SEP, ustrftime, \ - docname_join, FilenameUniqDict, url_re + docname_join, FilenameUniqDict, url_re, clean_astext from sphinx.errors import SphinxError from sphinx.directives import additional_xref_types @@ -820,11 +820,11 @@ class BuildEnvironment: node.line) self.anonlabels[name] = docname, labelid if node.tagname == 'section': - sectname = node[0].astext() # node[0] == title node + sectname = clean_astext(node[0]) # node[0] == title node elif node.tagname == 'figure': for n in node: if n.tagname == 'caption': - sectname = n.astext() + sectname = clean_astext(n) break else: continue @@ -1074,7 +1074,7 @@ class BuildEnvironment: # toctree originates ref = toctreenode['parent'] if not title: - title = self.titles[ref].astext() + title = clean_astext(self.titles[ref]) reference = nodes.reference('', '', refuri=ref, anchorname='', @@ -1222,7 +1222,7 @@ class BuildEnvironment: # reference with explicit title caption = node.astext() else: - caption = self.titles[docname].astext() + caption = clean_astext(self.titles[docname]) innernode = nodes.emphasis(caption, caption) newnode = nodes.reference('', '') newnode['refuri'] = builder.get_relative_uri( diff --git a/sphinx/util/__init__.py b/sphinx/util/__init__.py index 3cf58e0ef..59589b6d9 100644 --- a/sphinx/util/__init__.py +++ b/sphinx/util/__init__.py @@ -442,6 +442,14 @@ def copy_static_entry(source, target, builder, context={}): shutil.copytree(source, target) +def clean_astext(node): + """Like node.astext(), but ignore images.""" + node = node.deepcopy() + for img in node.traverse(docutils.nodes.image): + img['alt'] = '' + return node.astext() + + # monkey-patch Node.traverse to get more speed # traverse() is called so many times during a build that it saves # on average 20-25% overall build time!