From 93dddf9eb7b3263beda332e79ee84cf8ab9c13bb Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Tue, 21 Jul 2009 20:56:49 -0400 Subject: Fixed TOC extension to properly nest multiple header levels in the table of contents. Specificly, when stepping back multiple levels, the nestsed listed now follow suite. Test included. Thanks for the patch Jack Miller. --- markdown/extensions/toc.py | 10 +++------- tests/extensions-x-toc/nested.html | 16 ++++++++++++++++ tests/extensions-x-toc/nested.txt | 9 +++++++++ 3 files changed, 28 insertions(+), 7 deletions(-) create mode 100644 tests/extensions-x-toc/nested.html create mode 100644 tests/extensions-x-toc/nested.txt diff --git a/markdown/extensions/toc.py b/markdown/extensions/toc.py index 1624ccf..1d9489c 100644 --- a/markdown/extensions/toc.py +++ b/markdown/extensions/toc.py @@ -60,13 +60,9 @@ class TocTreeprocessor(markdown.treeprocessors.Treeprocessor): if header_rgx.match(c.tag): tag_level = int(c.tag[-1]) - # Regardless of how many levels we jumped - # only one list should be created, since - # empty lists containing lists are illegal. - - if tag_level < level: + while tag_level < level: list_stack.pop() - level = tag_level + level -= 1 if tag_level > level: newlist = etree.Element("ul") @@ -75,7 +71,7 @@ class TocTreeprocessor(markdown.treeprocessors.Treeprocessor): else: list_stack[-1].append(newlist) list_stack.append(newlist) - level = tag_level + level += 1 # Do not override pre-existing ids if not "id" in c.attrib: diff --git a/tests/extensions-x-toc/nested.html b/tests/extensions-x-toc/nested.html new file mode 100644 index 0000000..a8a1583 --- /dev/null +++ b/tests/extensions-x-toc/nested.html @@ -0,0 +1,16 @@ +

Header A

+

Header 1

+

Header i

+

Header B

+
+ +
\ No newline at end of file diff --git a/tests/extensions-x-toc/nested.txt b/tests/extensions-x-toc/nested.txt new file mode 100644 index 0000000..9b515f9 --- /dev/null +++ b/tests/extensions-x-toc/nested.txt @@ -0,0 +1,9 @@ +# Header A + +## Header 1 + +### Header i + +# Header B + +[TOC] -- cgit v1.2.3