From 9a31684b9a683fe9b0d2871649b379fadfb60ade Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Fri, 19 Mar 2010 13:00:35 -0400 Subject: Fixed Ticket 57. Lists where the first line of an item is a nested item, now observe rules for using p tags. Thanks to Gerry LaMontagne for the patch. --- markdown/blockprocessors.py | 19 ++++++++- tests/misc/lists7.html | 98 +++++++++++++++++++++++++++++++++++++++++++++ tests/misc/lists7.txt | 44 ++++++++++++++++++++ 3 files changed, 159 insertions(+), 2 deletions(-) create mode 100644 tests/misc/lists7.html create mode 100644 tests/misc/lists7.txt diff --git a/markdown/blockprocessors.py b/markdown/blockprocessors.py index 98db90b..1ac2ed2 100644 --- a/markdown/blockprocessors.py +++ b/markdown/blockprocessors.py @@ -133,8 +133,16 @@ class ListIndentProcessor(BlockProcessor): self.parser.state.set('detabbed') if parent.tag in self.ITEM_TYPES: - # The parent is already a li. Just parse the child block. - self.parser.parseBlocks(parent, [block]) + # It's possible that this parent has a 'ul' or 'ol' child list + # with a member. If that is the case, then that should be the + # parent. This is intended to catch the edge case of an indented + # list whose first member was parsed previous to this point + # see OListProcessor + if len(parent) and parent[-1].tag in self.LIST_TYPES: + self.parser.parseBlocks(parent[-1], [block]) + else: + # The parent is already a li. Just parse the child block. + self.parser.parseBlocks(parent, [block]) elif sibling.tag in self.ITEM_TYPES: # The sibling is a li. Use it as parent. self.parser.parseBlocks(sibling, [block]) @@ -287,6 +295,13 @@ class OListProcessor(BlockProcessor): firstitem = items.pop(0) self.parser.parseBlocks(li, [firstitem]) self.parser.state.reset() + elif parent.tag in ['ol', 'ul']: + # this catches the edge case of a multi-item indented list whose + # first item is in a blank parent-list item: + # * * subitem1 + # * subitem2 + # see also ListIndentProcessor + lst = parent else: # This is a new list so create parent with appropriate tag. lst = markdown.etree.SubElement(parent, self.TAG) diff --git a/tests/misc/lists7.html b/tests/misc/lists7.html new file mode 100644 index 0000000..81c1daa --- /dev/null +++ b/tests/misc/lists7.html @@ -0,0 +1,98 @@ + +

same as above, different spacing

+ +

only 1 item in nested list ##

+ +

Something ludicrous ##

+ \ No newline at end of file diff --git a/tests/misc/lists7.txt b/tests/misc/lists7.txt new file mode 100644 index 0000000..77181c8 --- /dev/null +++ b/tests/misc/lists7.txt @@ -0,0 +1,44 @@ +* item 1 +* * item 2-1 + * item 2-2 + * item 2-3 + * item 2-4 +* item 3 +* * item 4-1 + + * item 4-2 + + * item 4-3 + + * item 4-4 + +## same as above, different spacing +* item 1 +* * item 2-1 + * item 2-2 +* item 3 +* * item 4-1 + + * item 4-2 + +## only 1 item in nested list ## +* item 1 +* * item 2-1 +* item 3 +* * item 4-1 + +## Something ludicrous ## +* item 1 +* * item 2-1 + * item 2-2 + * * item 2-2-1 + * item 2-2-2 + * item 2-3 +* item 3 +* * item 4-1 + + * * item 4-1-1 + * item 4-1-2 + + * item 4-2 + -- cgit v1.2.3