react / wstein / node_modules / jest-cli / node_modules / istanbul / node_modules / handlebars / lib / handlebars / compiler / printer.js
80713 viewsimport Visitor from "./visitor";12export function print(ast) {3return new PrintVisitor().accept(ast);4}56export function PrintVisitor() {7this.padding = 0;8}910PrintVisitor.prototype = new Visitor();1112PrintVisitor.prototype.pad = function(string) {13var out = "";1415for(var i=0,l=this.padding; i<l; i++) {16out = out + " ";17}1819out = out + string + "\n";20return out;21};2223PrintVisitor.prototype.Program = function(program) {24var out = '',25body = program.body,26i, l;2728if (program.blockParams) {29var blockParams = 'BLOCK PARAMS: [';30for(i=0, l=program.blockParams.length; i<l; i++) {31blockParams += ' ' + program.blockParams[i];32}33blockParams += ' ]';34out += this.pad(blockParams);35}3637for(i=0, l=body.length; i<l; i++) {38out = out + this.accept(body[i]);39}4041this.padding--;4243return out;44};4546PrintVisitor.prototype.MustacheStatement = function(mustache) {47return this.pad('{{ ' + this.SubExpression(mustache) + ' }}');48};4950PrintVisitor.prototype.BlockStatement = function(block) {51var out = "";5253out = out + this.pad('BLOCK:');54this.padding++;55out = out + this.pad(this.SubExpression(block));56if (block.program) {57out = out + this.pad('PROGRAM:');58this.padding++;59out = out + this.accept(block.program);60this.padding--;61}62if (block.inverse) {63if (block.program) { this.padding++; }64out = out + this.pad('{{^}}');65this.padding++;66out = out + this.accept(block.inverse);67this.padding--;68if (block.program) { this.padding--; }69}70this.padding--;7172return out;73};7475PrintVisitor.prototype.PartialStatement = function(partial) {76var content = 'PARTIAL:' + partial.name.original;77if(partial.params[0]) {78content += ' ' + this.accept(partial.params[0]);79}80if (partial.hash) {81content += ' ' + this.accept(partial.hash);82}83return this.pad('{{> ' + content + ' }}');84};8586PrintVisitor.prototype.ContentStatement = function(content) {87return this.pad("CONTENT[ '" + content.value + "' ]");88};8990PrintVisitor.prototype.CommentStatement = function(comment) {91return this.pad("{{! '" + comment.value + "' }}");92};9394PrintVisitor.prototype.SubExpression = function(sexpr) {95var params = sexpr.params, paramStrings = [], hash;9697for(var i=0, l=params.length; i<l; i++) {98paramStrings.push(this.accept(params[i]));99}100101params = "[" + paramStrings.join(", ") + "]";102103hash = sexpr.hash ? " " + this.accept(sexpr.hash) : "";104105return this.accept(sexpr.path) + " " + params + hash;106};107108PrintVisitor.prototype.PathExpression = function(id) {109var path = id.parts.join('/');110return (id.data ? '@' : '') + 'PATH:' + path;111};112113114PrintVisitor.prototype.StringLiteral = function(string) {115return '"' + string.value + '"';116};117118PrintVisitor.prototype.NumberLiteral = function(number) {119return "NUMBER{" + number.value + "}";120};121122PrintVisitor.prototype.BooleanLiteral = function(bool) {123return "BOOLEAN{" + bool.value + "}";124};125126PrintVisitor.prototype.Hash = function(hash) {127var pairs = hash.pairs;128var joinedPairs = [];129130for (var i=0, l=pairs.length; i<l; i++) {131joinedPairs.push(this.accept(pairs[i]));132}133134return 'HASH{' + joinedPairs.join(', ') + '}';135};136PrintVisitor.prototype.HashPair = function(pair) {137return pair.key + '=' + this.accept(pair.value);138};139140141