aboutsummaryrefslogtreecommitdiffstats
path: root/markdown/blockprocessors.py
diff options
context:
space:
mode:
authorWaylan Limberg <waylan@gmail.com>2011-06-15 08:50:55 -0400
committerWaylan Limberg <waylan@gmail.com>2011-06-15 08:50:55 -0400
commit8a64c2970ca99f1586bc85a59898bfe7269c9128 (patch)
treecd28870f08030ce4827117fec69e9706c52f2528 /markdown/blockprocessors.py
parent11124d9f8ddd547c93078dcf6380deacec7fc32f (diff)
downloadmarkdown-8a64c2970ca99f1586bc85a59898bfe7269c9128.tar.gz
markdown-8a64c2970ca99f1586bc85a59898bfe7269c9128.tar.bz2
markdown-8a64c2970ca99f1586bc85a59898bfe7269c9128.zip
Fixed #21. A header and paragraph not seperated by a blank line inside a list item are now parsed correctly. One of those crazy wierd edge cases that no one would ever test for, but is obvious once you see it.
Diffstat (limited to 'markdown/blockprocessors.py')
-rw-r--r--markdown/blockprocessors.py31
1 files changed, 27 insertions, 4 deletions
diff --git a/markdown/blockprocessors.py b/markdown/blockprocessors.py
index 6396b4a..2695932 100644
--- a/markdown/blockprocessors.py
+++ b/markdown/blockprocessors.py
@@ -328,6 +328,13 @@ class OListProcessor(BlockProcessor):
p.text = lst[-1].text
lst[-1].text = ''
lst[-1].insert(0, p)
+ # if the last item has a tail, then the tail needs to be put in a p
+ # likely only when a header is not followed by a blank line
+ lch = self.lastChild(lst[-1])
+ if lch is not None and lch.tail:
+ p = util.etree.SubElement(lst[-1], 'p')
+ p.text = lch.tail.lstrip()
+ lch.tail = ''
# parse first block differently as it gets wrapped in a p.
li = util.etree.SubElement(lst, 'li')
@@ -518,11 +525,27 @@ class ParagraphProcessor(BlockProcessor):
if block.strip():
# Not a blank block. Add to parent, otherwise throw it away.
if self.parser.state.isstate('list'):
- # The parent is a tight-list. Append to parent.text
- if parent.text:
- parent.text = '%s\n%s' % (parent.text, block)
+ # The parent is a tight-list.
+ #
+ # Check for any children. This will likely only happen in a
+ # tight-list when a header isn't followed by a blank line.
+ # For example:
+ #
+ # * # Header
+ # Line 2 of list item - not part of header.
+ sibling = self.lastChild(parent)
+ if sibling is not None:
+ # Insetrt after sibling.
+ if sibling.tail:
+ sibling.tail = '%s\n%s' % (sibling.tail, block)
+ else:
+ sibling.tail = '\n%s' % block
else:
- parent.text = block.lstrip()
+ # Append to parent.text
+ if parent.text:
+ parent.text = '%s\n%s' % (parent.text, block)
+ else:
+ parent.text = block.lstrip()
else:
# Create a regular paragraph
p = util.etree.SubElement(parent, 'p')