| @@ -323,52 +323,51 @@ var Mustache; | |||
| * Writer. | |||
| */ | |||
| function compileTokens(tokens) { | |||
| var subproceedures = []; | |||
| for (var i = 0, len = tokens.length; i < len; ++i) { | |||
| token = tokens[i]; | |||
| switch (token[0]) { | |||
| case "#": | |||
| case "^": | |||
| subproceedures[i] = compileTokens(token[4]); | |||
| var subRenders = {}; | |||
| function subRender(i, tokens, template) { | |||
| if (!subRenders[i]) { | |||
| var render = compileTokens(tokens); | |||
| subRenders[i] = function (context, writer) { | |||
| return render(context, writer, template); | |||
| }; | |||
| } | |||
| return subRenders[i]; | |||
| } | |||
| function renderFunction(c, r, t) { | |||
| var body = []; | |||
| function renderFunction(context, writer, template) { | |||
| var buffer = [], text; | |||
| for (var i = 0, len = tokens.length; i < len; ++i) { | |||
| token = tokens[i]; | |||
| switch (token[0]) { | |||
| case "#": | |||
| bounds = sectionBounds(token); | |||
| text = t.slice(bounds[0], bounds[1]); | |||
| body.push(r._section(token[1], c, text, function (c, r) { | |||
| return subproceedures[i](c, r, t); | |||
| })); | |||
| text = template.slice.apply(template, sectionBounds(token)); | |||
| buffer.push(writer._section(token[1], context, text, subRender(i, token[4], template))); | |||
| break; | |||
| case "^": | |||
| body.push(r._inverted(token[1], c, function (c, r) { | |||
| return subproceedures[i](c, r, t); | |||
| })); | |||
| buffer.push(writer._inverted(token[1], context, subRender(i, token[4], template))); | |||
| break; | |||
| case ">": | |||
| body.push(r._partial(token[1], c)); | |||
| buffer.push(writer._partial(token[1], context)); | |||
| break; | |||
| case "&": | |||
| body.push(r._name(token[1], c)); | |||
| buffer.push(writer._name(token[1], context)); | |||
| break; | |||
| case "name": | |||
| body.push(r._escaped(token[1], c)); | |||
| buffer.push(writer._escaped(token[1], context)); | |||
| break; | |||
| case "text": | |||
| body.push(token[1]); | |||
| buffer.push(token[1]); | |||
| break; | |||
| } | |||
| } | |||
| return body.join(''); | |||
| return buffer.join(''); | |||
| } | |||
| return renderFunction; | |||
| } | |||