170 yield i |
170 yield i |
171 |
171 |
172 def buildfunc(exp, context): |
172 def buildfunc(exp, context): |
173 n = getsymbol(exp[1]) |
173 n = getsymbol(exp[1]) |
174 args = [compileexp(x, context) for x in getlist(exp[2])] |
174 args = [compileexp(x, context) for x in getlist(exp[2])] |
|
175 if n in funcs: |
|
176 f = funcs[n] |
|
177 return (f, args) |
175 if n in context._filters: |
178 if n in context._filters: |
176 if len(args) != 1: |
179 if len(args) != 1: |
177 raise error.ParseError(_("filter %s expects one argument") % n) |
180 raise error.ParseError(_("filter %s expects one argument") % n) |
178 f = context._filters[n] |
181 f = context._filters[n] |
179 return (runfilter, (args[0][0], args[0][1], f)) |
182 return (runfilter, (args[0][0], args[0][1], f)) |
180 elif n in context._funcs: |
|
181 f = context._funcs[n] |
|
182 return (f, args) |
|
183 |
183 |
184 methods = { |
184 methods = { |
185 "string": lambda e, c: (runstring, e[1]), |
185 "string": lambda e, c: (runstring, e[1]), |
186 "symbol": lambda e, c: (runsymbol, e[1]), |
186 "symbol": lambda e, c: (runsymbol, e[1]), |
187 "group": lambda e, c: compileexp(e[1], c), |
187 "group": lambda e, c: compileexp(e[1], c), |
188 # ".": buildmember, |
188 # ".": buildmember, |
189 "|": buildfilter, |
189 "|": buildfilter, |
190 "%": buildmap, |
190 "%": buildmap, |
191 "func": buildfunc, |
191 "func": buildfunc, |
192 } |
192 } |
|
193 |
|
194 funcs = { |
|
195 } |
193 |
196 |
194 # template engine |
197 # template engine |
195 |
198 |
196 path = ['templates', '../templates'] |
199 path = ['templates', '../templates'] |
197 stringify = templatefilters.stringify |
200 stringify = templatefilters.stringify |