summaryrefslogtreecommitdiff
path: root/sphinx/util
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2009-08-05 00:04:39 +0200
committerGeorg Brandl <georg@python.org>2009-08-05 00:04:39 +0200
commita9a518474e8e1b03f60bd5186c4cd8404684fb99 (patch)
tree21a07a0946bfcbd4998733191af410ec9b51915f /sphinx/util
parent6e4fc36e06e3eebf906e2e4f14a61e9f2b591cd5 (diff)
parentd152a5ec24e65072108e1f0a87be70e231c54a72 (diff)
downloadsphinx-a9a518474e8e1b03f60bd5186c4cd8404684fb99.tar.gz
merge with 0.6
Diffstat (limited to 'sphinx/util')
-rw-r--r--sphinx/util/__init__.py62
1 files changed, 47 insertions, 15 deletions
diff --git a/sphinx/util/__init__.py b/sphinx/util/__init__.py
index 40d4e323..c7ced1d8 100644
--- a/sphinx/util/__init__.py
+++ b/sphinx/util/__init__.py
@@ -402,8 +402,10 @@ def movefile(source, dest):
def copyfile(source, dest):
"""Copy a file and its modification times, if possible."""
shutil.copyfile(source, dest)
- try: shutil.copystat(source, dest)
- except shutil.Error: pass
+ try:
+ shutil.copystat(source, dest)
+ except shutil.Error:
+ pass
def copy_static_entry(source, target, builder, context={}):
@@ -425,39 +427,69 @@ def copy_static_entry(source, target, builder, context={}):
shutil.copytree(source, target)
+def split_explicit_title(text):
+ """Split role content into title and target, if given."""
+ brace = text.find('<')
+ if brace != -1:
+ m = caption_ref_re.match(text)
+ if m:
+ target = m.group(2)
+ title = m.group(1)
+ else:
+ # fallback: everything after '<' is the target
+ target = text[brace+1:]
+ title = text[:brace]
+ return True, title, target
+ else:
+ return False, text, text
+
+
+from docutils import nodes
+
+def make_refnode(builder, fromdocname, todocname, targetid, child, title=None):
+ """Shortcut to create a reference node."""
+ node = nodes.reference('', '')
+ if fromdocname == todocname:
+ node['refid'] = targetid
+ else:
+ node['refuri'] = (builder.get_relative_uri(fromdocname, todocname)
+ + '#' + targetid)
+ if title:
+ node['reftitle'] = title
+ node.append(child)
+ return node
+
+
# 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!
-def _all_traverse(self):
+def _all_traverse(self, result):
"""Version of Node.traverse() that doesn't need a condition."""
- result = []
result.append(self)
for child in self.children:
- result.extend(child._all_traverse())
+ child._all_traverse(result)
return result
-def _fast_traverse(self, cls):
+def _fast_traverse(self, cls, result):
"""Version of Node.traverse() that only supports instance checks."""
- result = []
if isinstance(self, cls):
result.append(self)
for child in self.children:
- result.extend(child._fast_traverse(cls))
+ child._fast_traverse(cls, result)
return result
def _new_traverse(self, condition=None,
include_self=1, descend=1, siblings=0, ascend=0):
if include_self and descend and not siblings and not ascend:
if condition is None:
- return self._all_traverse()
+ return self._all_traverse([])
elif isinstance(condition, (types.ClassType, type)):
- return self._fast_traverse(condition)
+ return self._fast_traverse(condition, [])
return self._old_traverse(condition, include_self,
descend, siblings, ascend)
-import docutils.nodes
-docutils.nodes.Node._old_traverse = docutils.nodes.Node.traverse
-docutils.nodes.Node._all_traverse = _all_traverse
-docutils.nodes.Node._fast_traverse = _fast_traverse
-docutils.nodes.Node.traverse = _new_traverse
+nodes.Node._old_traverse = nodes.Node.traverse
+nodes.Node._all_traverse = _all_traverse
+nodes.Node._fast_traverse = _fast_traverse
+nodes.Node.traverse = _new_traverse