Skip to content

Commit 9eb5706

Browse files
committed
More refactor of TOC Extension.
Mostly just code cleanup so it reads better. Renamed a few internal things. I didn't write this extension originally so most of this would have been done a long time ago. I just havn't touched this code much till now.
1 parent e80955e commit 9eb5706

File tree

1 file changed

+24
-24
lines changed

1 file changed

+24
-24
lines changed

markdown/extensions/toc.py

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)