@@ -60,7 +60,7 @@ def _html_sub(m):
6060 return HTML_PLACEHOLDER_RE .sub (_html_sub , text )
6161
6262
63- def order_toc_list (toc_list ):
63+ def nest_toc_tokens (toc_list ):
6464 """Given an unsorted list with errors and skips, return a nested one.
6565 [{'level': 1}, {'level': 2}]
6666 =>
@@ -193,7 +193,11 @@ def add_permalink(self, c, elem_id):
193193 permalink .attrib ["title" ] = "Permanent link"
194194 c .append (permalink )
195195
196- def build_toc_etree (self , div , toc_list ):
196+ def build_toc_div (self , toc_list ):
197+ """ Return a string div given a toc list. """
198+ div = etree .Element ("div" )
199+ div .attrib ["class" ] = "toc"
200+
197201 # Add title to the div
198202 if self .title :
199203 header = etree .SubElement (div , "span" )
@@ -212,7 +216,11 @@ def build_etree_ul(toc_list, parent):
212216 build_etree_ul (item ['children' ], li )
213217 return ul
214218
215- return build_etree_ul (toc_list , div )
219+ build_etree_ul (toc_list , div )
220+ prettify = self .markdown .treeprocessors .get ('prettify' )
221+ if prettify :
222+ prettify .run (div )
223+ return div
216224
217225 def run (self , doc ):
218226 # Get a list of id attributes
@@ -221,39 +229,31 @@ def run(self, doc):
221229 if "id" in el .attrib :
222230 used_ids .add (el .attrib ["id" ])
223231
224- div = etree .Element ("div" )
225- div .attrib ["class" ] = "toc"
226- if self .marker :
227- self .replace_marker (doc , div )
228-
229- toc_list = []
232+ toc_tokens = []
230233 for el in doc .iter ():
231234 if self .header_rgx .match (el .tag ):
232235 self .set_level (el )
233236 text = '' .join (el .itertext ()).strip ()
234237
235238 # Do not override pre-existing ids
236239 if "id" not in el .attrib :
237- elem_id = stashedHTML2text (text , self .markdown )
238- elem_id = unique (self .slugify (elem_id , self .sep ), used_ids )
239- el .attrib ["id" ] = elem_id
240- else :
241- elem_id = el .attrib ["id" ]
240+ innertext = stashedHTML2text (text , self .markdown )
241+ el .attrib ["id" ] = unique (self .slugify (innertext , self .sep ), used_ids )
242242
243- toc_list .append ({'level' : int (el .tag [- 1 ]),
244- 'id' : elem_id ,
245- 'name' : text })
243+ toc_tokens .append ({
244+ 'level' : int (el .tag [- 1 ]),
245+ 'id' : el .attrib ["id" ],
246+ 'name' : text
247+ })
246248
247249 if self .use_anchors :
248- self .add_anchor (el , elem_id )
250+ self .add_anchor (el , el . attrib [ "id" ] )
249251 if self .use_permalinks :
250- self .add_permalink (el , elem_id )
252+ self .add_permalink (el , el . attrib [ "id" ] )
251253
252- toc_list_nested = order_toc_list (toc_list )
253- self .build_toc_etree (div , toc_list_nested )
254- prettify = self .markdown .treeprocessors .get ('prettify' )
255- if prettify :
256- prettify .run (div )
254+ div = self .build_toc_div (nest_toc_tokens (toc_tokens ))
255+ if self .marker :
256+ self .replace_marker (doc , div )
257257
258258 # serialize and attach to markdown instance.
259259 toc = self .markdown .serializer (div )
0 commit comments