Skip to content

Commit

Permalink
Fix issue308 and fix (unrelated) failure to break out of nest loop.
Browse files Browse the repository at this point in the history
  • Loading branch information
ryneeverett committed May 21, 2014
1 parent 85be159 commit a47899f
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 23 deletions.
32 changes: 13 additions & 19 deletions markdown/extensions/extra.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,9 @@ def _process_nests(self, element, block):
# Build list of indexes of each nest within the parent element.
nest_index = [] # a list of tuples: (left index, right index)
i = self.parser.blockprocessors.tag_counter + 1
is_nest = self.parser.markdown.htmlStash.tag_data[i]['left_index']
while len(self.parser.markdown.htmlStash.tag_data) > i and is_nest:
left_child_index = \
self.parser.markdown.htmlStash.tag_data[i]['left_index']
right_child_index = \
self.parser.markdown.htmlStash.tag_data[i]['right_index']
while len(self._tag_data) > i and self._tag_data[i]['left_index']:
left_child_index = self._tag_data[i]['left_index']
right_child_index = self._tag_data[i]['right_index']
nest_index.append((left_child_index - 1, right_child_index))
i += 1

Expand All @@ -92,35 +89,32 @@ def _process_nests(self, element, block):
block[nest_index[-1][1]:], True) # nest

def run(self, parent, blocks, tail=None, nest=False):
self._tag_data = self.parser.markdown.htmlStash.tag_data

self.parser.blockprocessors.tag_counter += 1
tag_data = self.parser.markdown.htmlStash.tag_data[
self.parser.blockprocessors.tag_counter]
tag = self._tag_data[self.parser.blockprocessors.tag_counter]

# Create Element
markdown_value = tag_data['attrs'].pop('markdown')
element = util.etree.SubElement(parent, tag_data['tag'],
tag_data['attrs'])
markdown_value = tag['attrs'].pop('markdown')
element = util.etree.SubElement(parent, tag['tag'], tag['attrs'])

# Slice Off Block
if nest:
self.parser.parseBlocks(parent, tail) # Process Tail
block = blocks[1:]
else: # includes nests since a third level of nesting isn't supported
block = blocks[tag_data['left_index'] + 1:
tag_data['right_index']]
del blocks[:tag_data['right_index']]
block = blocks[tag['left_index'] + 1: tag['right_index']]
del blocks[:tag['right_index']]

# Process Text
if (self.parser.blockprocessors.contain_span_tags.match( # Span Mode
tag_data['tag']) and markdown_value != 'block') or \
tag['tag']) and markdown_value != 'block') or \
markdown_value == 'span':
element.text = '\n'.join(block)
else: # Block Mode
i = self.parser.blockprocessors.tag_counter + 1
if len(self.parser.markdown.htmlStash.tag_data) > i and self.\
parser.markdown.htmlStash.tag_data[i]['left_index']:
first_subelement_index = self.parser.markdown.htmlStash.\
tag_data[i]['left_index'] - 1
if len(self._tag_data) > i and self._tag_data[i]['left_index']:
first_subelement_index = self._tag_data[i]['left_index'] - 1
self.parser.parseBlocks(
element, block[:first_subelement_index])
if not nest:
Expand Down
6 changes: 3 additions & 3 deletions markdown/preprocessors.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ def _stringindex_to_listindex(self, stringindex, items):
"""
Same effect as concatenating the strings in items,
finding the character to which stringindex refers in that string,
and returning the item in which that character resides.
and returning the index of the item in which that character resides.
"""
items.append('dummy')
i, count = 0, 0
Expand Down Expand Up @@ -175,8 +175,8 @@ def _nested_markdown_in_html(self, items):
if len(items) - right_listindex <= 1: # last element
right_listindex -= 1
placeholder = self.markdown.htmlStash.store('\n\n'.join(
items[i:right_listindex]))
del items[i:right_listindex]
items[i:right_listindex + 1]))
del items[i:right_listindex + 1]
items.insert(i, placeholder)
return items

Expand Down
8 changes: 7 additions & 1 deletion tests/extensions/extra/raw-html.html
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,11 @@
Raw html blocks may also be nested.
</div>



</div>
<p>This text is after the markdown in html.</p>
<p>This text is after the markdown in html.</p>
<div name="issue308">
<p><span>1</span>
<span>2</span></p>
</div>
7 changes: 7 additions & 0 deletions tests/extensions/extra/raw-html.txt
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,10 @@ Raw html blocks may also be nested.
</div>

This text is after the markdown in html.

<div markdown="1" name="issue308">

<span>1</span>
<span>2</span>

</div>

0 comments on commit a47899f

Please sign in to comment.