Mercurial > genshi > mirror
changeset 74:d54b5fd60b52 trunk
Fix expression interpolation where both shorthand notation and full notation are used inside a single text node. Thanks Jonas.
author | cmlenz |
---|---|
date | Wed, 12 Jul 2006 19:45:13 +0000 |
parents | 1da51d718391 |
children | 3722696d0343 |
files | markup/template.py markup/tests/template.py |
diffstat | 2 files changed, 8 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/markup/template.py +++ b/markup/template.py @@ -765,19 +765,18 @@ @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, [cls._FULL_EXPR_RE, cls._SHORT_EXPR_RE]) _interpolate = classmethod(_interpolate) def generate(self, ctxt=None):
--- a/markup/tests/template.py +++ b/markup/tests/template.py @@ -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}"/>')