Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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>