Index: 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(' ${var} $var')
+ self.assertEqual(' 42 42', str(tmpl.generate(ctxt)))
+
def test_interpolate_non_string_attrs(self):
ctxt = Context()
tmpl = Template('')
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):