Mercurial > genshi > mirror
changeset 167:1999291f7a30 trunk
Handle non-ASCII characters in expressions. Closes #29. Thanks to Arnar Birgisson for reporting the problem and comping up with a patch!
author | cmlenz |
---|---|
date | Thu, 17 Aug 2006 15:22:12 +0000 |
parents | d43f50402cf2 |
children | 5f538e761701 |
files | markup/eval.py markup/tests/eval.py |
diffstat | 2 files changed, 11 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/markup/eval.py +++ b/markup/eval.py @@ -67,7 +67,9 @@ def __init__(self, source, filename=None, lineno=-1): if isinstance(source, basestring): self.source = source - self.code = _compile(parse(source, 'eval'), source, + if isinstance(source, unicode): + source = '\xef\xbb\xbf' + source.encode('utf-8') + self.code = _compile(parse(source, 'eval'), self.source, filename=filename, lineno=lineno) else: assert isinstance(source, ast.Node) @@ -115,8 +117,8 @@ return new.code(0, code.co_nlocals, code.co_stacksize, code.co_flags | 0x0040, code.co_code, code.co_consts, code.co_names, code.co_varnames, filename, - '<Expression "%s">' % (str(source) or '?'), lineno, - code.co_lnotab, (), ()) + '<Expression %s>' % (repr(source).replace("'", '"') or '?'), + lineno, code.co_lnotab, (), ()) def _lookup_name(data, name, locals_=None): val = None
--- a/markup/tests/eval.py +++ b/markup/tests/eval.py @@ -28,6 +28,12 @@ self.assertEqual('foo', Expression("u'foo'").evaluate({})) self.assertEqual('foo', Expression("r'foo'").evaluate({})) + def test_str_literal_non_ascii(self): + expr = Expression(u"u'\xfe'") + self.assertEqual(u'þ', expr.evaluate({})) + expr = Expression("u'\xfe'") + self.assertEqual(u'þ', expr.evaluate({})) + def test_num_literal(self): self.assertEqual(42, Expression("42").evaluate({})) self.assertEqual(42L, Expression("42L").evaluate({}))