rendered paste bodyIndex: markup/tests/template.py===================================================================--- markup/tests/template.py (revision 76)+++ markup/tests/template.py (working copy)@@ -411,6 +411,11 @@ self.assertEqual(Stream.TEXT, parts[2][0]) self.assertEqual(' baz', parts[2][1])+ def test_interpolate_mixed3(self):+ ctxt = Context(var=42)+ tmpl = Template('<root> ${var} $var</root>')+ self.assertEqual('<root> 42 42</root>', str(tmpl.generate(ctxt)))+ def test_interpolate_non_string_attrs(self): ctxt = Context() tmpl = Template('<root attr="${1}"/>')Index: markup/template.py===================================================================--- markup/template.py (revision 76)+++ markup/template.py (working copy)@@ -765,19 +765,20 @@ @param offset: the column number at which the text starts in the source (optional) """- patterns = [Template._FULL_EXPR_RE, Template._SHORT_EXPR_RE]- def _interpolate(text):+ def _interpolate(text, patterns): for idx, group in enumerate(patterns.pop(0).split(text)): if idx % 2: yield EXPR, Expression(group), (lineno, offset) elif group: if patterns:- for result in _interpolate(group):+ for result in _interpolate(group, patterns[:]): yield result else: yield TEXT, group.replace('$$', '$'), (filename, lineno , offset)- return _interpolate(text)+ return _interpolate(text, [Template._FULL_EXPR_RE,+ Template._SHORT_EXPR_RE])+ _interpolate = classmethod(_interpolate) def generate(self, ctxt=None):