(function(dust) { dust.compile = function(source, name) { var ast = filterAST(dust.parse(source)); return compile(ast, name); }; function filterAST(ast) { var context = {}; return dust.filterNode(context, ast); } dust.filterNode = function(context, node) { return dust.optimizers[node[0]](context, node); } dust.optimizers = { body: compactBuffers, buffer: noop, special: convertSpecial, format: nullify, // TODO: convert format reference: visit, "#": visit, "?": visit, "^": visit, "<": visit, "+": visit, "@": visit, "%": visit, partial: visit, context: visit, params: visit, bodies: visit, param: visit, filters: noop, key: noop, path: noop, literal: noop, comment: nullify } dust.pragmas = { esc: function(compiler, context, bodies, params) { var old = compiler.auto; if (!context) context = 'h'; compiler.auto = (context === 's') ? '' : context; var out = compileParts(compiler, bodies.block); compiler.auto = old; return out; } } function visit(context, node) { var out = [node[0]]; for (var i=1, len=node.length; i