diff options
author | Waylan Limberg <waylan@gmail.com> | 2013-06-16 22:24:28 -0400 |
---|---|---|
committer | Waylan Limberg <waylan@gmail.com> | 2013-06-16 23:21:40 -0400 |
commit | ea4af0db29a86466e4b8b9e694299054565a29ca (patch) | |
tree | c890b6b8ee09cb073dcaee93266fb87df6c8983a | |
parent | ccc9c3ec580cb93aeed81b8320746c164a7acdb5 (diff) | |
download | markdown-ea4af0db29a86466e4b8b9e694299054565a29ca.tar.gz markdown-ea4af0db29a86466e4b8b9e694299054565a29ca.tar.bz2 markdown-ea4af0db29a86466e4b8b9e694299054565a29ca.zip |
Attr_List Extension now support attr_lists on nested lists.
A list item with a nested list complicates were the attr_list can be.
Fixes #218. Thanks for the report @jpzimmer.
-rw-r--r-- | markdown/extensions/attr_list.py | 29 | ||||
-rw-r--r-- | tests/extensions/attr_list.html | 13 | ||||
-rw-r--r-- | tests/extensions/attr_list.txt | 11 |
3 files changed, 51 insertions, 2 deletions
diff --git a/markdown/extensions/attr_list.py b/markdown/extensions/attr_list.py index c98aa85..2bea213 100644 --- a/markdown/extensions/attr_list.py +++ b/markdown/extensions/attr_list.py @@ -77,13 +77,40 @@ class AttrListTreeprocessor(Treeprocessor): def run(self, doc): for elem in doc.getiterator(): + #import pdb; pdb.set_trace() if isBlockLevel(elem.tag): # Block level: check for attrs on last line of text RE = self.BLOCK_RE if isheader(elem): # header: check for attrs at end of line RE = self.HEADER_RE - if len(elem) and elem[-1].tail: + if len(elem) and elem.tag == 'li': + # special case list items. children may include a ul. + ul = None + # find the ul position + for i, child in enumerate(elem): + if child.tag == 'ul': + ul = i + break + if ul is None and elem[-1].tail: + # use tail of last child. no ul. + m = RE.search(elem[-1].tail) + if m: + self.assign_attrs(elem, m.group(1)) + elem[-1].tail = elem[-1].tail[:m.start()] + if ul > 0 and elem[ul-1].tail: + # use tail of last child before ul + m = RE.search(elem[ul-1].tail) + if m: + self.assign_attrs(elem, m.group(1)) + elem[ul-1].tail = elem[ul-1].tail[:m.start()] + elif elem.text: + # use text. ul is first child. + m = RE.search(elem.text) + if m: + self.assign_attrs(elem, m.group(1)) + elem.text = elem.text[:m.start()] + elif len(elem) and elem[-1].tail: # has children. Get from tail of last child m = RE.search(elem[-1].tail) if m: diff --git a/tests/extensions/attr_list.html b/tests/extensions/attr_list.html index f50cd6a..b1032f9 100644 --- a/tests/extensions/attr_list.html +++ b/tests/extensions/attr_list.html @@ -15,4 +15,15 @@ And a <strong class="nest">nested <a class="linky2" href="http://example.com" ti </code></pre> <h3 id="hash3">No colon for compatability with Headerid ext</h3> <p id="the_end">Also a codespan: <code class="foo">{: .someclass}</code>.</p> -<h3 _:="{:" id="hash5">Bad Syntax</h3>
\ No newline at end of file +<h3 _:="{:" id="hash5">Bad Syntax</h3> +<ul> +<li class="item">Item1</li> +<li class="item">Item2<ul> +<li class="subitem">Item2-1</li> +</ul> +</li> +<li class="item"><em class="emph">Item3</em><ul> +<li class="subitem"><em class="emph">Item3-1</em></li> +</ul> +</li> +</ul>
\ No newline at end of file diff --git a/tests/extensions/attr_list.txt b/tests/extensions/attr_list.txt index cd7f398..959c117 100644 --- a/tests/extensions/attr_list.txt +++ b/tests/extensions/attr_list.txt @@ -34,3 +34,14 @@ Also a codespan: `{: .someclass}`{: .foo}. {: #the_end} ### Bad Syntax { {: #hash5 } + +* Item1 + {: .item } +* Item2 + {: .item } + * Item2-1 + {: .subitem } +* _Item3_{: .emph } + {: .item } + * _Item3-1_{: .emph } + {: .subitem } |