diff options
| author | Georg Brandl <georg@python.org> | 2009-08-05 00:04:39 +0200 |
|---|---|---|
| committer | Georg Brandl <georg@python.org> | 2009-08-05 00:04:39 +0200 |
| commit | a9a518474e8e1b03f60bd5186c4cd8404684fb99 (patch) | |
| tree | 21a07a0946bfcbd4998733191af410ec9b51915f /sphinx/util | |
| parent | 6e4fc36e06e3eebf906e2e4f14a61e9f2b591cd5 (diff) | |
| parent | d152a5ec24e65072108e1f0a87be70e231c54a72 (diff) | |
| download | sphinx-a9a518474e8e1b03f60bd5186c4cd8404684fb99.tar.gz | |
merge with 0.6
Diffstat (limited to 'sphinx/util')
| -rw-r--r-- | sphinx/util/__init__.py | 62 |
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 |
