| @@ -323,52 +323,51 @@ var Mustache; | |||||
| * Writer. | * Writer. | ||||
| */ | */ | ||||
| function compileTokens(tokens) { | 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) { | for (var i = 0, len = tokens.length; i < len; ++i) { | ||||
| token = tokens[i]; | token = tokens[i]; | ||||
| switch (token[0]) { | switch (token[0]) { | ||||
| case "#": | 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; | break; | ||||
| case "^": | 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; | break; | ||||
| case ">": | case ">": | ||||
| body.push(r._partial(token[1], c)); | |||||
| buffer.push(writer._partial(token[1], context)); | |||||
| break; | break; | ||||
| case "&": | case "&": | ||||
| body.push(r._name(token[1], c)); | |||||
| buffer.push(writer._name(token[1], context)); | |||||
| break; | break; | ||||
| case "name": | case "name": | ||||
| body.push(r._escaped(token[1], c)); | |||||
| buffer.push(writer._escaped(token[1], context)); | |||||
| break; | break; | ||||
| case "text": | case "text": | ||||
| body.push(token[1]); | |||||
| buffer.push(token[1]); | |||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| return body.join(''); | |||||
| return buffer.join(''); | |||||
| } | } | ||||
| return renderFunction; | return renderFunction; | ||||
| } | } | ||||