Mercurial > genshi > mirror
changeset 101:5df0d81ac5d6 trunk
Ported [115] to trunk.
author | cmlenz |
---|---|
date | Mon, 24 Jul 2006 18:57:33 +0000 |
parents | a519f581a1b1 |
children | e20a153cc20c |
files | markup/eval.py markup/template.py |
diffstat | 2 files changed, 23 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/markup/eval.py +++ b/markup/eval.py @@ -103,23 +103,25 @@ return gen.getCode() - def _lookup_name(self, data, name, locals=None): + def _lookup_name(data, name, locals=None): val = data.get(name) if val is None and locals: val = locals.get(name) if val is None: val = getattr(__builtin__, name, None) return val + _lookup_name = staticmethod(_lookup_name) - def _lookup_attribute(self, data, obj, key): + def _lookup_attribute(data, obj, key): if hasattr(obj, key): return getattr(obj, key) try: return obj[key] except (KeyError, TypeError): return None + _lookup_attribute = staticmethod(_lookup_attribute) - def _lookup_item(self, data, obj, key): + def _lookup_item(data, obj, key): if len(key) == 1: key = key[0] try: @@ -131,6 +133,7 @@ return getattr(obj, key) except (AttributeError, TypeError), e: pass + _lookup_item = staticmethod(_lookup_item) class ASTTransformer(object):
--- a/markup/template.py +++ b/markup/template.py @@ -243,7 +243,7 @@ def __call__(self, stream, ctxt, directives): def _generate(): kind, data, pos = stream.next() - if kind is Stream.START: + if kind is START: yield kind, data, pos # emit start tag yield EXPR, self.expr, pos previous = stream.next() @@ -363,20 +363,22 @@ def __call__(self, stream, ctxt, directives): iterable = self.expr.evaluate(ctxt) - if iterable is not None: - scope = {} - stream = list(stream) - targets = self.targets - for item in iter(iterable): - if len(targets) == 1: - scope[targets[0]] = item - else: - for idx, name in enumerate(targets): - scope[name] = item[idx] - ctxt.push(scope) - for event in _apply_directives(stream, ctxt, directives): - yield event - ctxt.pop() + if iterable is None: + return + + scope = {} + stream = list(stream) + targets = self.targets + for item in iter(iterable): + if len(targets) == 1: + scope[targets[0]] = item + else: + for idx, name in enumerate(targets): + scope[name] = item[idx] + ctxt.push(scope) + for event in _apply_directives(stream, ctxt, directives): + yield event + ctxt.pop() def __repr__(self): return '<%s "%s in %s">' % (self.__class__.__name__,