Mercurial > genshi > mirror
changeset 732:8825ac5014b1 trunk
Fix expression interpolation for expression containing triple-quoted multiline strings. Thanks to Armin Ronacher for reporting the issue and providing a patch.
author | cmlenz |
---|---|
date | Tue, 03 Jun 2008 20:22:33 +0000 |
parents | 01bdf155db95 |
children | 43147cbc9ea3 |
files | genshi/template/interpolation.py genshi/template/tests/interpolation.py |
diffstat | 2 files changed, 13 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/genshi/template/interpolation.py +++ b/genshi/template/interpolation.py @@ -17,7 +17,8 @@ from itertools import chain import os -from tokenize import tokenprog +import re +from tokenize import PseudoToken from genshi.core import TEXT from genshi.template.base import TemplateSyntaxError, EXPR @@ -30,6 +31,11 @@ NAMECHARS = NAMESTART + '.0123456789' PREFIX = '$' +token_re = re.compile('%s|%s(?s)' % ( + r'[uU]?[rR]?("""|\'\'\')((?<!\\)\\\1|.)*?\1', + PseudoToken +)) + def interpolate(text, filepath=None, lineno=-1, offset=0, lookup='strict'): """Parse the given string and extract expressions. @@ -106,7 +112,7 @@ pos = offset + 2 level = 1 while level: - match = tokenprog.match(text, pos) + match = token_re.match(text, pos) if match is None: raise TemplateSyntaxError('invalid syntax', filepath, *textpos[1:])
--- a/genshi/template/tests/interpolation.py +++ b/genshi/template/tests/interpolation.py @@ -186,6 +186,11 @@ self.assertEqual(TEXT, parts[2][0]) self.assertEqual(' baz', parts[2][1]) + def test_interpolate_triplequoted(self): + parts = list(interpolate('${"""foo\nbar"""}')) + self.assertEqual(1, len(parts)) + self.assertEqual('"""foo\nbar"""', parts[0][1].source) + def suite(): suite = unittest.TestSuite()