Mercurial > genshi > mirror
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()))