Mercurial > genshi > mirror
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 |