# HG changeset patch # User cmlenz # Date 1156345228 0 # Node ID 929ef2913b875af082bbd63c587eec74b8df30ce # Parent f0b32f1c478cf972a78f1ddf4c8affd46711ca4f Allow leading whitespace in expressions. Closes #38. Thanks to Christian Boos for the patch! diff --git a/markup/template.py b/markup/template.py --- a/markup/template.py +++ b/markup/template.py @@ -853,27 +853,27 @@ """ def _interpolate(text, patterns, filename=filename, lineno=lineno, offset=offset): - for idx, group in enumerate(patterns.pop(0).split(text)): + for idx, grp in enumerate(patterns.pop(0).split(text)): if idx % 2: try: - yield EXPR, Expression(group, filename, lineno), \ + yield EXPR, Expression(grp.strip(), filename, lineno), \ (filename, lineno, offset) except SyntaxError, err: raise TemplateSyntaxError(err, filename, lineno, offset + (err.offset or 0)) - elif group: + elif grp: if patterns: - for result in _interpolate(group, patterns[:]): + for result in _interpolate(grp, patterns[:]): yield result else: - yield TEXT, group.replace('$$', '$'), \ + yield TEXT, grp.replace('$$', '$'), \ (filename, lineno, offset) - if '\n' in group: - lines = group.splitlines() + if '\n' in grp: + lines = grp.splitlines() lineno += len(lines) - 1 offset += len(lines[-1]) else: - offset += len(group) + offset += len(grp) return _interpolate(text, [cls._FULL_EXPR_RE, cls._SHORT_EXPR_RE]) _interpolate = classmethod(_interpolate) diff --git a/markup/tests/template.py b/markup/tests/template.py --- a/markup/tests/template.py +++ b/markup/tests/template.py @@ -669,6 +669,10 @@ tmpl = Template(' ${var} $var') self.assertEqual(' 42 42', str(tmpl.generate(var=42))) + def test_interpolate_leading_trailing_space(self): + tmpl = Template('${ foo }') + self.assertEqual('bar', str(tmpl.generate(foo='bar'))) + def test_interpolate_multiline(self): tmpl = Template("""${dict( bar = 'baz'