Mercurial > pylearn
view doc/taglist.py @ 1371:98d4232df1d8
comment on OD idea
author | Razvan Pascanu <r.pascanu@gmail.com> |
---|---|
date | Mon, 15 Nov 2010 16:28:02 -0500 |
parents | 621e03253f0c |
children |
line wrap: on
line source
from docutils import nodes from sphinx.util.compat import Directive from collections import defaultdict def taglist_html(self, node): env = app.builder.env if not hasattr(env, 'tags_db'): return self.body.append(""" <script langage=javascript> var cur = null; var cura = null; function change(a1, div1){ nexta = document.getElementById(a1) next = document.getElementById(div1) if (cur != null) { cur.style.display = 'none'; cura.style.fontWeight = 'normal'; } if (cur != next) { next.style.display = 'block'; nexta.style.fontWeight = 'bold'; cur = next; cura = nexta; } else cur = null } </script> """) for tag in sorted(env.tags_db): tid = tag.replace(' ','_') self.body.append(""" <a id=a_%s href="javascript:change('a_%s', 'div_%s')">%s</a> """ % (tid, tid, tid, tag)) for tag in env.tags_db: tid = tag.replace(' ','_') self.body.append('<div id=div_%s style="display:none;"><br>' % (tid,)) for f in sorted(env.tags_db[tag], lambda f,g: cmp(f[1], g[1])): uri = app.builder.get_relative_uri(node.docname, f[0]) + '#' + f[1] self.body.append('<a href="%s">%s</a><br>' % (uri, f[1])) self.body.append('</div>') class taglist_node(nodes.Element): pass class taglist(Directive): def run(self): a = taglist_node() a.docname = app.builder.env.docname return [a] def purge_tags(app, env, docname): if not hasattr(env, 'tags_db'): return for tag in env.tags_db: for f in [f for f in env.tags_db[tag]]: if f[0]==docname: env.tags_db[tag].remove(f) def autodoc_process_docstring(app, what, name, obj, options, lines): env = app.builder.env if not hasattr(env, 'tags_db'): env.tags_db = defaultdict(set) if what == 'function' and hasattr(obj, 'tags'): for tag in obj.tags: env.tags_db[tag].add((env.docname, name)) def setup(app_): global app app = app_ app.add_node(taglist_node, html=(taglist_html, lambda a,b:None)) app.add_directive('taglist', taglist) app.connect('env-purge-doc', purge_tags) app.connect('autodoc-process-docstring', autodoc_process_docstring)