aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--markdown/extensions/toc.py38
1 files changed, 20 insertions, 18 deletions
diff --git a/markdown/extensions/toc.py b/markdown/extensions/toc.py
index 31b5c65..173ae17 100644
--- a/markdown/extensions/toc.py
+++ b/markdown/extensions/toc.py
@@ -15,7 +15,7 @@ from markdown.extensions.headerid import slugify, unique, itertext
import re
-def flatten_list(toc_list):
+def order_toc_list(toc_list):
"""Given an unsorted list with errors and skips, return a nested one.
[{'level': 1}, {'level': 2}]
=>
@@ -40,41 +40,41 @@ def flatten_list(toc_list):
# This happens for instance with [8, 1, 1], ie. when some
# header level is outside a scope. We treat it as a
# top-level
- next2, children2 = build_correct(remaining_list, [current])
- current['children'].append(children2)
- return [current] + next2, []
+ next_elements, children = build_correct(remaining_list, [current])
+ current['children'].append(children)
+ return [current] + next_elements, []
prev_element = prev_elements.pop()
children = []
- next = [] #@ReservedAssignment
+ next_elements = []
# Is current part of the child list or next list?
if current['level'] > prev_element['level']:
#print "%d is a child of %d" % (current['level'], prev_element['level'])
prev_elements.append(prev_element)
prev_elements.append(current)
prev_element['children'].append(current)
- next2, children2 = build_correct(remaining_list, prev_elements)
+ next_elements2, children2 = build_correct(remaining_list, prev_elements)
children += children2
- next += next2
+ next_elements += next_elements2
else:
#print "%d is ancestor of %d" % (current['level'], prev_element['level'])
if not prev_elements:
#print "No previous elements, so appending to the next set"
- next.append(current)
+ next_elements.append(current)
prev_elements = [current]
- next2, children3 = build_correct(remaining_list, prev_elements)
- current['children'].extend(children3)
+ next_elements2, children2 = build_correct(remaining_list, prev_elements)
+ current['children'].extend(children2)
else:
#print "Previous elements, comparing to those first"
remaining_list.insert(0, current)
- next2, children3 = build_correct(remaining_list, prev_elements)
- children.extend(children3)
- next += next2
+ next_elements2, children2 = build_correct(remaining_list, prev_elements)
+ children.extend(children2)
+ next_elements += next_elements2
- return next, children
+ return next_elements, children
- flattened_list, __ = build_correct(toc_list)
- return flattened_list
+ ordered_list, __ = build_correct(toc_list)
+ return ordered_list
class TocTreeprocessor(markdown.treeprocessors.Treeprocessor):
@@ -171,7 +171,7 @@ class TocTreeprocessor(markdown.treeprocessors.Treeprocessor):
self.add_anchor(c, elem_id)
if marker_found:
- toc_list_nested = flatten_list(toc_list)
+ toc_list_nested = order_toc_list(toc_list)
self.build_toc_etree(div, toc_list_nested)
# serialize and attach to markdown instance.
prettify = self.markdown.treeprocessors.get('prettify')
@@ -181,6 +181,7 @@ class TocTreeprocessor(markdown.treeprocessors.Treeprocessor):
toc = pp.run(toc)
self.markdown.toc = toc
+
class TocExtension(markdown.Extension):
TreeProcessorClass = TocTreeprocessor
@@ -211,6 +212,7 @@ class TocExtension(markdown.Extension):
# attr_list extension. This must come last because we don't want
# to redefine ids after toc is created. But we do want toc prettified.
md.treeprocessors.add("toc", tocext, "<prettify")
-
+
+
def makeExtension(configs={}):
return TocExtension(configs=configs)