22toc
33===================================
44Generates Table of Contents for markdown.
5- Only generates a ToC for the headers FOLLOWING th [TOC] tag,
5+ Only generates a ToC for the headers FOLLOWING the [TOC] tag,
66so you can insert it after a specific section that need not be
7- include in the ToC.
7+ included in the ToC.
8+
9+ The default container format (which includes a 'Table of Contents' heading )
10+ can be overridden by providing something like the following entry in pelicanconf.py:
11+ ASF_TOC = {
12+ 'CONTAINER_FORMAT': "<div id='toc'>{}</div>"
13+ }
814'''
915
1016from __future__ import unicode_literals
@@ -42,12 +48,13 @@ def unique(id_, ids):
4248
4349
4450class HtmlTreeNode (object ):
45- def __init__ (self , parent , header , level , id_ ):
51+ def __init__ (self , parent , header , level , id_ , content ):
4652 self .children = []
4753 self .parent = parent
4854 self .header = header
4955 self .level = level
5056 self .id = id_
57+ self .content = content
5158
5259 def add (self , new_header , ids ):
5360 new_level = new_header .name
@@ -66,11 +73,11 @@ def add(self, new_header, ids):
6673 new_id = unique (new_id , ids ) # make sure id is unique
6774 new_header .attrs ['id' ] = new_id
6875 if (self .level < new_level ):
69- new_node = HtmlTreeNode (self , new_string , new_level , new_id )
76+ new_node = HtmlTreeNode (self , new_string , new_level , new_id , self . content )
7077 self .children += [new_node ]
7178 return new_node , new_header
7279 elif (self .level == new_level ):
73- new_node = HtmlTreeNode (self .parent , new_string , new_level , new_id )
80+ new_node = HtmlTreeNode (self .parent , new_string , new_level , new_id , self . content )
7481 self .parent .children += [new_node ]
7582 return new_node , new_header
7683 elif (self .level > new_level ):
@@ -90,7 +97,12 @@ def __str__(self):
9097 ret = "<li>{}</li>" .format (ret )
9198
9299 if not self .parent :
93- ret = "<div id='toc' style='border-radius: 3px; border: 1px solid #999; background-color: #EEE; padding: 4px;'><h4>Table of Contents:</h4><ul>{}</ul></div>" .format (ret )
100+ fmt = self .content .settings .get ('ASF_TOC' ,{}).get ('CONTAINER_FORMAT' )
101+ if fmt :
102+ print (f"Overriding TOC CONTAINER_FORMAT: { fmt } " )
103+ else :
104+ fmt = "<div id='toc' style='border-radius: 3px; border: 1px solid #999; background-color: #EEE; padding: 4px;'><h4>Table of Contents:</h4><ul>{}</ul></div>"
105+ ret = fmt .format (ret )
94106
95107 return ret
96108
@@ -114,7 +126,7 @@ def generate_toc(content):
114126
115127 all_ids = set ()
116128 title = content .metadata .get ('title' , 'Title' )
117- tree = node = HtmlTreeNode (None , title , 'h0' , '' )
129+ tree = node = HtmlTreeNode (None , title , 'h0' , '' , content )
118130 soup = BeautifulSoup (content ._content , 'html.parser' ) # pylint: disable=protected-access
119131 settoc = False
120132
0 commit comments