changeset 191:3289055a8c32 trunk

Allow leading whitespace in expressions. Closes #38. Thanks to Christian Boos for the patch!
author cmlenz
date Wed, 23 Aug 2006 15:00:28 +0000
parents 769d945ac030
children b64e36bc1100
files markup/template.py markup/tests/template.py
diffstat 2 files changed, 12 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- 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)
 
--- a/markup/tests/template.py
+++ b/markup/tests/template.py
@@ -669,6 +669,10 @@
         tmpl = Template('<root> ${var} $var</root>')
         self.assertEqual('<root> 42 42</root>', str(tmpl.generate(var=42)))
 
+    def test_interpolate_leading_trailing_space(self):
+        tmpl = Template('<root>${    foo    }</root>')
+        self.assertEqual('<root>bar</root>', str(tmpl.generate(foo='bar')))
+
     def test_interpolate_multiline(self):
         tmpl = Template("""<root>${dict(
           bar = 'baz'
Copyright (C) 2012-2017 Edgewall Software