changeset 184:181d292eafa2 trunk

Interpolate multiline expressions in templates. Thanks to Christian Boos for reporting the problem and providing the fix.
author cmlenz
date Tue, 22 Aug 2006 13:16:09 +0000
parents 1f6ca5028770
children 95c3813a00de
files ChangeLog markup/template.py markup/tests/template.py
diffstat 3 files changed, 24 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,6 @@
 Version 0.2
 http://svn.edgewall.org/repos/markup/tags/0.2.0/
-(?, from branches/stable/0.2.x)
+(Aug 22 2006, from branches/stable/0.2.x)
 
  * XPath syntax errors now contain position info (ticket #20).
  * Errors in expression evaluation now contain the correct line number in the
@@ -31,6 +31,8 @@
    literals before).
  * XPath expressions in now support XPath variables ($var) in predicates
    (ticket #31).
+ * Expressions in templates can now span multiple lines if they are enclosed
+   in curly braces.
 
 
 Version 0.1
--- a/markup/template.py
+++ b/markup/template.py
@@ -825,7 +825,7 @@
 
         self.stream = stream
 
-    _FULL_EXPR_RE = re.compile(r'(?<!\$)\$\{(.+?)\}')
+    _FULL_EXPR_RE = re.compile(r'(?<!\$)\$\{(.+?)\}', re.DOTALL)
     _SHORT_EXPR_RE = re.compile(r'(?<!\$)\$([a-zA-Z][a-zA-Z0-9_\.]*)')
 
     def _interpolate(cls, text, filename=None, lineno=-1, offset=-1):
--- a/markup/tests/template.py
+++ b/markup/tests/template.py
@@ -498,6 +498,20 @@
           <greeting name="Dude"/>
         </div>""", str(tmpl.generate(tagname='sayhello')))
 
+    # FIXME
+    #def test_match_after_step(self):
+    #    tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/">
+    #      <span py:match="div/greeting">
+    #        Hello ${select('@name')}
+    #      </span>
+    #      <greeting name="Dude" />
+    #    </div>""")
+    #    self.assertEqual("""<div>
+    #      <span>
+    #        Hello Dude
+    #      </span>
+    #    </div>""", str(tmpl.generate()))
+
 
 class StripDirectiveTestCase(unittest.TestCase):
     """Tests for the `py:strip` template directive."""
@@ -596,6 +610,12 @@
         tmpl = Template('<root> ${var} $var</root>')
         self.assertEqual('<root> 42 42</root>', str(tmpl.generate(var=42)))
 
+    def test_interpolate_multiline(self):
+        tmpl = Template("""<root>${dict(
+          bar = 'baz'
+        )[foo]}</root>""")
+        self.assertEqual('<root>baz</root>', str(tmpl.generate(foo='bar')))
+
     def test_interpolate_non_string_attrs(self):
         tmpl = Template('<root attr="${1}"/>')
         self.assertEqual('<root attr="1"/>', str(tmpl.generate()))
Copyright (C) 2012-2017 Edgewall Software