From 6bf582515a6b346b23100818f529b96b932f9b97 Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Thu, 1 Nov 2012 09:48:27 -0400 Subject: A better fix for #155. Unescaping inline placholders now returns the text only of an Element - rather than the html which just gets html escaped in the output anyway. --- markdown/inlinepatterns.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/markdown/inlinepatterns.py b/markdown/inlinepatterns.py index b3caeb0..b07598f 100644 --- a/markdown/inlinepatterns.py +++ b/markdown/inlinepatterns.py @@ -189,14 +189,27 @@ class Pattern: stash = self.markdown.treeprocessors['inline'].stashed_nodes except KeyError: return text + def itertext(el): + ' Reimplement Element.itertext for older python versions ' + tag = el.tag + if not isinstance(tag, basestring) and tag is not None: + return + if el.text: + yield el.text + for e in el: + for s in itertext(e): + yield s + if e.tail: + yield e.tail def get_stash(m): id = m.group(1) if id in stash: - text = stash.get(id) - if isinstance(text, basestring): - return text + value = stash.get(id) + if isinstance(value, basestring): + return value else: - return self.markdown.serializer(text) + # An etree Element - return text content only + return ''.join(itertext(value)) return util.INLINE_PLACEHOLDER_RE.sub(get_stash, text) @@ -286,7 +299,7 @@ class HtmlPattern(Pattern): value = stash.get(id) if value is not None: try: - return self.markdown.serializer(value) + return self.markdown.serializer(text) except: return '\%s' % value @@ -420,7 +433,7 @@ class ImageReferencePattern(ReferencePattern): el.set("src", self.sanitize_url(href)) if title: el.set("title", title) - el.set("alt", text) + el.set("alt", self.unescape(text)) return el -- cgit v1.2.3