Mercurial > genshi > mirror
comparison genshi/template/eval.py @ 716:eee7483041dd trunk
fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid
author | aflett |
---|---|
date | Tue, 08 Apr 2008 22:38:43 +0000 |
parents | b5bd8c109209 |
children | 4bc6741b2811 |
comparison
equal
deleted
inserted
replaced
715:b5bd8c109209 | 716:eee7483041dd |
---|---|
385 | 385 |
386 def _parse(source, mode='eval'): | 386 def _parse(source, mode='eval'): |
387 source = source.strip() | 387 source = source.strip() |
388 if mode == 'exec': | 388 if mode == 'exec': |
389 lines = [line.expandtabs() for line in source.splitlines()] | 389 lines = [line.expandtabs() for line in source.splitlines()] |
390 first = lines[0] | 390 if lines: |
391 rest = dedent('\n'.join(lines[1:])).rstrip() | 391 first = lines[0] |
392 if first.rstrip().endswith(':') and not rest[0].isspace(): | 392 rest = dedent('\n'.join(lines[1:])).rstrip() |
393 rest = '\n'.join([' %s' % line for line in rest.splitlines()]) | 393 if first.rstrip().endswith(':') and not rest[0].isspace(): |
394 source = '\n'.join([first, rest]) | 394 rest = '\n'.join([' %s' % line for line in rest.splitlines()]) |
395 source = '\n'.join([first, rest]) | |
395 if isinstance(source, unicode): | 396 if isinstance(source, unicode): |
396 source = '\xef\xbb\xbf' + source.encode('utf-8') | 397 source = '\xef\xbb\xbf' + source.encode('utf-8') |
397 return parse(source, mode) | 398 return parse(source, mode) |
398 | 399 |
399 def _compile(node, source=None, mode='eval', filename=None, lineno=-1, | 400 def _compile(node, source=None, mode='eval', filename=None, lineno=-1, |
415 gen = ExpressionCodeGenerator(tree) | 416 gen = ExpressionCodeGenerator(tree) |
416 name = '<Expression %r>' % (source or '?') | 417 name = '<Expression %r>' % (source or '?') |
417 else: | 418 else: |
418 gen = ModuleCodeGenerator(tree) | 419 gen = ModuleCodeGenerator(tree) |
419 lines = source.splitlines() | 420 lines = source.splitlines() |
420 extract = lines[0] | 421 if not lines: |
422 extract = '' | |
423 else: | |
424 extract = lines[0] | |
421 if len(lines) > 1: | 425 if len(lines) > 1: |
422 extract += ' ...' | 426 extract += ' ...' |
423 name = '<Suite %r>' % (extract) | 427 name = '<Suite %r>' % (extract) |
424 gen.optimized = True | 428 gen.optimized = True |
425 code = gen.getCode() | 429 code = gen.getCode() |