comparison markup/template.py @ 101:5df0d81ac5d6 trunk

Ported [115] to trunk.
author cmlenz
date Mon, 24 Jul 2006 18:57:33 +0000
parents 2fe86a99947f
children f12e7987d7f4
comparison
equal deleted inserted replaced
100:a519f581a1b1 101:5df0d81ac5d6
241 __slots__ = [] 241 __slots__ = []
242 242
243 def __call__(self, stream, ctxt, directives): 243 def __call__(self, stream, ctxt, directives):
244 def _generate(): 244 def _generate():
245 kind, data, pos = stream.next() 245 kind, data, pos = stream.next()
246 if kind is Stream.START: 246 if kind is START:
247 yield kind, data, pos # emit start tag 247 yield kind, data, pos # emit start tag
248 yield EXPR, self.expr, pos 248 yield EXPR, self.expr, pos
249 previous = stream.next() 249 previous = stream.next()
250 for event in stream: 250 for event in stream:
251 previous = event 251 previous = event
361 self.targets = [str(name.strip()) for name in targets.split(',')] 361 self.targets = [str(name.strip()) for name in targets.split(',')]
362 Directive.__init__(self, value, filename, lineno, offset) 362 Directive.__init__(self, value, filename, lineno, offset)
363 363
364 def __call__(self, stream, ctxt, directives): 364 def __call__(self, stream, ctxt, directives):
365 iterable = self.expr.evaluate(ctxt) 365 iterable = self.expr.evaluate(ctxt)
366 if iterable is not None: 366 if iterable is None:
367 scope = {} 367 return
368 stream = list(stream) 368
369 targets = self.targets 369 scope = {}
370 for item in iter(iterable): 370 stream = list(stream)
371 if len(targets) == 1: 371 targets = self.targets
372 scope[targets[0]] = item 372 for item in iter(iterable):
373 else: 373 if len(targets) == 1:
374 for idx, name in enumerate(targets): 374 scope[targets[0]] = item
375 scope[name] = item[idx] 375 else:
376 ctxt.push(scope) 376 for idx, name in enumerate(targets):
377 for event in _apply_directives(stream, ctxt, directives): 377 scope[name] = item[idx]
378 yield event 378 ctxt.push(scope)
379 ctxt.pop() 379 for event in _apply_directives(stream, ctxt, directives):
380 yield event
381 ctxt.pop()
380 382
381 def __repr__(self): 383 def __repr__(self):
382 return '<%s "%s in %s">' % (self.__class__.__name__, 384 return '<%s "%s in %s">' % (self.__class__.__name__,
383 ', '.join(self.targets), self.expr.source) 385 ', '.join(self.targets), self.expr.source)
384 386
Copyright (C) 2012-2017 Edgewall Software