diff options
Diffstat (limited to 'src/zope/tales/expressions.py')
-rw-r--r-- | src/zope/tales/expressions.py | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/zope/tales/expressions.py b/src/zope/tales/expressions.py index 48be495..81a626b 100644 --- a/src/zope/tales/expressions.py +++ b/src/zope/tales/expressions.py @@ -16,9 +16,9 @@ Basic Page Template expression types. Expression objects are created by the :class:`.ExpressionEngine` (they must have previously been registered with -:func:`~zope.tales.tales.ExpressionEngine.registerType`). The expression object itself -is a callable object taking one argument, *econtext*, which is the local -expression namespace. +:func:`~zope.tales.tales.ExpressionEngine.registerType`). The expression +object itself is a callable object taking one argument, *econtext*, which is +the local expression namespace. """ import re @@ -38,6 +38,7 @@ namespace_re = re.compile(r'(\w+):(.+)') PY2 = sys.version_info[0] == 2 + def simpleTraverse(object, path_items, econtext): """Traverses a sequence of names, first trying attributes then items. """ @@ -168,7 +169,7 @@ class PathExpr(object): 'path', 'exists', 'nocall', - ) + ) def __init__(self, name, expr, engine, traverser=simpleTraverse): self._s = expr @@ -240,11 +241,11 @@ class PathExpr(object): return '<PathExpr %s:%s>' % (self._name, repr(self._s)) - _interp = re.compile( r'\$(%(n)s)|\${(%(n)s(?:/[^}|]*)*(?:\|%(n)s(?:/[^}|]*)*)*)}' % {'n': NAME_RE}) + @implementer(ITALESExpression) class StringExpr(object): """ @@ -264,7 +265,8 @@ class StringExpr(object): path_type = engine.getTypes()['path'] parts = [] for exp in expr.split('$$'): - if parts: parts.append('$') + if parts: + parts.append('$') m = _interp.search(exp) while m is not None: parts.append(exp[:m.start()]) @@ -365,6 +367,7 @@ class LazyWrapper(DeferWrapper): self._result = r = self._expr(self._econtext) return r + class LazyExpr(DeferExpr): """ An expression that will defer evaluation of its |