in theme/plugins/toc.py [0:0]
def generate_toc(content):
if isinstance(content, contents.Static):
return
all_ids = set()
title = content.metadata.get('title', 'Title')
tree = node = HtmlTreeNode(None, title, 'h0', '')
soup = BeautifulSoup(content._content, 'html.parser')
settoc = False
try:
header_re = re.compile(content.metadata.get(
'toc_headers', content.settings['TOC']['TOC_HEADERS']))
except re.error as e:
logger.error("TOC_HEADERS '%s' is not a valid re\n%s",
content.settings['TOC']['TOC_HEADERS'])
raise e
# Find TOC tag
tocTag = soup.find('p', text = '[TOC]')
if tocTag:
for header in tocTag.findAllNext(header_re):
settoc = True
node, new_header = node.add(header, all_ids)
header.replaceWith(new_header) # to get our ids back into soup
if settoc:
print("Generating ToC for %s" % content.slug)
tree_string = '{}'.format(tree)
tree_soup = BeautifulSoup(tree_string, 'html.parser')
content.toc = tree_soup.decode(formatter='html')
itoc = soup.find('p', text = '[TOC]')
if itoc:
itoc.replaceWith(tree_soup)
content._content = soup.decode(formatter='html')