tuos wrote:
> On Apr 25, 5:45 am, Wei-Wei Guo <[email protected]> wrote:
>
>> Tuomas Räsänen 写道:
>>
>> Hi Tuomas,
>>
>>
>>
>>
>>> Well, if I understood you correctly, I needed something similiar and
>>> ended up with this small extension:
>>>
>>> toctree_items = []
>>>
>>> def html_page_context(app, pagename, templatename, context, doctree):
>>> context['toctree_items'] = toctree_items
>>>
>>> def env_updated(app, env):
>>> master_doc = app.builder.config.master_doc
>>> toctree = env.tocs[master_doc].traverse(lambda n: n.tagname ==
>>> 'toctree')[0]
>>> global toctree_items
>>> for link_label, pagename in toctree['entries']:
>>> if pagename == 'self':
>>> pagename = master_doc
>>> pagetitle = env.toctree_items[pagename].astext()
>>> toctree_items.insert(0, (pagename, pagetitle))
>>>
>>> def setup(app):
>>> app.connect('html-page-context', html_page_context)
>>> app.connect('env-updated', env_updated)
>>>
>>> I didn't want the toctree to be included as <ul> in the html-output but
>>> I still needed that same info to generate navigation bars.
>>>
>>> So I defined my toctrees to be hidden:
>>>
>>> .. toctree::
>>> :hidden:
>>>
>>> And then dug the toctee information on 'env-updated' event (after all
>>> nodes has been resolved) and passed that to template as a part of it's
>>> context. I hope this helps a bit. That snippet isn't probably the best
>>> way to do it, but I'm still quite newbie with Sphinx. :)
>>>
>> Thanks, but I cannot understand your code. Why is there no thing like
>> 'visit_toctree'?
>> I looked into sources of latex.py, html.py, and text.py in both builders/
>> and writers/.
>> There is also rarely anything like visit_toctree. Does it mean toctree
>> cannot be
>> handled as a node? I also tried to manipulate toctree with visit_ like other
>> nodes,
>> but it is ignored. Here is my code:
>>
>> def visit_toctree(self, node):
>> node['maxdepth'] = 1
>> self.body.append('anywords')
>>
>> I'm a newbie with Sphinx too. It's hard for me to get Sphinx's logic.
>>
>>
>
> I think there is many ways to achieve the desired result and my way
> was to post-process the doctree and pass the toctree to template
> engine (and this works only with html-builder). I guess one could make
> an instance of NodeVisitor which has visit_toctree and use that to
> modify the doctree. Or even add that visit_toctree method to the
> already existing visitor (builder.visitor)?
>
> But if you really need to modify the tree, perhaps the easiest way
> would be to hook on 'doctree-read' event. Moreover, core events are
> quite handy for different things also.
>
>
[...]
An approach that I have used is to subclass Sphinx's own TocTree directive
and change its behaviour that way. Then include a line such as
directives.register_directives('toctree', MyCustomTocTreeClass)
so that your class will be used.
Here is an example:
http://bitbucket.org/djerdo/musette/src/tip/musette/html/sphinxtoctree2.py
Regards
G.F.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sphinx-dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/sphinx-dev?hl=en
-~----------~----~----~----~------~----~------~--~---