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()
Copyright (C) 2012-2017 Edgewall Software