Thank you, you made my code useless :) Anyway, have you thought about using something like this to feed a search engine? what about the soup.prettify to make the code well indented?
Thanks On Jan 17, 4:25 pm, Massimo Di Pierro <[email protected]> wrote: > http://code.google.com/p/samaxesjs/wiki/TableOfContentsPlugin > > On Jan 17, 5:31 am, blackthorne <[email protected]> wrote: > > > > > Something that might interest plugin_wiki users, is the possibility to > > automatically generate tables of contents from a page based on > > headings and specially tagged divs. > > > just put this on the page.html view of the plugin: > > {{extend 'layout.html'}} > > {{if page:}} > > {{if page.slug.startswith('meta-'):}}{{=CODE(page.body)}}{{else:}} > > {{import re}}{{from BeautifulSoup import BeautifulSoup}} > > {{content=plugin_wiki.render(page.body)}} > > {{soup = BeautifulSoup(str(content))}} > > {{toc = [(tag.name,tag.text) for tag in > > soup.findAll(name=re.compile(r"h[1-3]"))]}}{{pass}} > > > now you have a list with a pair telling you the level of heading and > > its content so you can do things like this: > > <div id="toc"> > > <ul> > > {{sublevel=0}}{{for index,(level,text) in enumerate(toc):}}{{if > > int(toc[index-1][0][1]) < int(level[1]):}}{{sublevel+=1}} > > <ul>{{elif int(toc[index-1][0][1]) > int(level[1]) and sublevel > 0:}} > > {{sublevel-=1}}</ul>{{pass}} > > <li>{{=text}}</li>{{pass}}{{while sublevel > 0:}}{{sublevel -=1}}</ > > ul>{{pass}} > > </ul> > > </div> > > {{=content}} > > > This can easily be adapted to more generic situations. All you need is > > the html content of the page in a variable so that you can parse it > > for headings. You can adjust the depth of headings to be displayed by > > changing the regular expression h[1-3] to h[1-6] if you want 6... > > > Next step: add anchors in headings so that we can link the table of > > contents into it. > > > Best regards

