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}"/>')
Copyright (C) 2012-2017 Edgewall Software