187 lines
18 KiB
JavaScript
187 lines
18 KiB
JavaScript
|
|
define(['exports', './visitor'], function (exports, _visitor) {
|
||
|
|
/* eslint-disable new-cap */
|
||
|
|
'use strict';
|
||
|
|
|
||
|
|
exports.__esModule = true;
|
||
|
|
exports.print = print;
|
||
|
|
exports.PrintVisitor = PrintVisitor;
|
||
|
|
// istanbul ignore next
|
||
|
|
|
||
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
||
|
|
|
||
|
|
var _Visitor = _interopRequireDefault(_visitor);
|
||
|
|
|
||
|
|
function print(ast) {
|
||
|
|
return new PrintVisitor().accept(ast);
|
||
|
|
}
|
||
|
|
|
||
|
|
function PrintVisitor() {
|
||
|
|
this.padding = 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
PrintVisitor.prototype = new _Visitor['default']();
|
||
|
|
|
||
|
|
PrintVisitor.prototype.pad = function (string) {
|
||
|
|
var out = '';
|
||
|
|
|
||
|
|
for (var i = 0, l = this.padding; i < l; i++) {
|
||
|
|
out += ' ';
|
||
|
|
}
|
||
|
|
|
||
|
|
out += string + '\n';
|
||
|
|
return out;
|
||
|
|
};
|
||
|
|
|
||
|
|
PrintVisitor.prototype.Program = function (program) {
|
||
|
|
var out = '',
|
||
|
|
body = program.body,
|
||
|
|
i = undefined,
|
||
|
|
l = undefined;
|
||
|
|
|
||
|
|
if (program.blockParams) {
|
||
|
|
var blockParams = 'BLOCK PARAMS: [';
|
||
|
|
for (i = 0, l = program.blockParams.length; i < l; i++) {
|
||
|
|
blockParams += ' ' + program.blockParams[i];
|
||
|
|
}
|
||
|
|
blockParams += ' ]';
|
||
|
|
out += this.pad(blockParams);
|
||
|
|
}
|
||
|
|
|
||
|
|
for (i = 0, l = body.length; i < l; i++) {
|
||
|
|
out += this.accept(body[i]);
|
||
|
|
}
|
||
|
|
|
||
|
|
this.padding--;
|
||
|
|
|
||
|
|
return out;
|
||
|
|
};
|
||
|
|
|
||
|
|
PrintVisitor.prototype.MustacheStatement = function (mustache) {
|
||
|
|
return this.pad('{{ ' + this.SubExpression(mustache) + ' }}');
|
||
|
|
};
|
||
|
|
PrintVisitor.prototype.Decorator = function (mustache) {
|
||
|
|
return this.pad('{{ DIRECTIVE ' + this.SubExpression(mustache) + ' }}');
|
||
|
|
};
|
||
|
|
|
||
|
|
PrintVisitor.prototype.BlockStatement = PrintVisitor.prototype.DecoratorBlock = function (block) {
|
||
|
|
var out = '';
|
||
|
|
|
||
|
|
out += this.pad((block.type === 'DecoratorBlock' ? 'DIRECTIVE ' : '') + 'BLOCK:');
|
||
|
|
this.padding++;
|
||
|
|
out += this.pad(this.SubExpression(block));
|
||
|
|
if (block.program) {
|
||
|
|
out += this.pad('PROGRAM:');
|
||
|
|
this.padding++;
|
||
|
|
out += this.accept(block.program);
|
||
|
|
this.padding--;
|
||
|
|
}
|
||
|
|
if (block.inverse) {
|
||
|
|
if (block.program) {
|
||
|
|
this.padding++;
|
||
|
|
}
|
||
|
|
out += this.pad('{{^}}');
|
||
|
|
this.padding++;
|
||
|
|
out += this.accept(block.inverse);
|
||
|
|
this.padding--;
|
||
|
|
if (block.program) {
|
||
|
|
this.padding--;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
this.padding--;
|
||
|
|
|
||
|
|
return out;
|
||
|
|
};
|
||
|
|
|
||
|
|
PrintVisitor.prototype.PartialStatement = function (partial) {
|
||
|
|
var content = 'PARTIAL:' + partial.name.original;
|
||
|
|
if (partial.params[0]) {
|
||
|
|
content += ' ' + this.accept(partial.params[0]);
|
||
|
|
}
|
||
|
|
if (partial.hash) {
|
||
|
|
content += ' ' + this.accept(partial.hash);
|
||
|
|
}
|
||
|
|
return this.pad('{{> ' + content + ' }}');
|
||
|
|
};
|
||
|
|
PrintVisitor.prototype.PartialBlockStatement = function (partial) {
|
||
|
|
var content = 'PARTIAL BLOCK:' + partial.name.original;
|
||
|
|
if (partial.params[0]) {
|
||
|
|
content += ' ' + this.accept(partial.params[0]);
|
||
|
|
}
|
||
|
|
if (partial.hash) {
|
||
|
|
content += ' ' + this.accept(partial.hash);
|
||
|
|
}
|
||
|
|
|
||
|
|
content += ' ' + this.pad('PROGRAM:');
|
||
|
|
this.padding++;
|
||
|
|
content += this.accept(partial.program);
|
||
|
|
this.padding--;
|
||
|
|
|
||
|
|
return this.pad('{{> ' + content + ' }}');
|
||
|
|
};
|
||
|
|
|
||
|
|
PrintVisitor.prototype.ContentStatement = function (content) {
|
||
|
|
return this.pad("CONTENT[ '" + content.value + "' ]");
|
||
|
|
};
|
||
|
|
|
||
|
|
PrintVisitor.prototype.CommentStatement = function (comment) {
|
||
|
|
return this.pad("{{! '" + comment.value + "' }}");
|
||
|
|
};
|
||
|
|
|
||
|
|
PrintVisitor.prototype.SubExpression = function (sexpr) {
|
||
|
|
var params = sexpr.params,
|
||
|
|
paramStrings = [],
|
||
|
|
hash = undefined;
|
||
|
|
|
||
|
|
for (var i = 0, l = params.length; i < l; i++) {
|
||
|
|
paramStrings.push(this.accept(params[i]));
|
||
|
|
}
|
||
|
|
|
||
|
|
params = '[' + paramStrings.join(', ') + ']';
|
||
|
|
|
||
|
|
hash = sexpr.hash ? ' ' + this.accept(sexpr.hash) : '';
|
||
|
|
|
||
|
|
return this.accept(sexpr.path) + ' ' + params + hash;
|
||
|
|
};
|
||
|
|
|
||
|
|
PrintVisitor.prototype.PathExpression = function (id) {
|
||
|
|
var path = id.parts.join('/');
|
||
|
|
return (id.data ? '@' : '') + 'PATH:' + path;
|
||
|
|
};
|
||
|
|
|
||
|
|
PrintVisitor.prototype.StringLiteral = function (string) {
|
||
|
|
return '"' + string.value + '"';
|
||
|
|
};
|
||
|
|
|
||
|
|
PrintVisitor.prototype.NumberLiteral = function (number) {
|
||
|
|
return 'NUMBER{' + number.value + '}';
|
||
|
|
};
|
||
|
|
|
||
|
|
PrintVisitor.prototype.BooleanLiteral = function (bool) {
|
||
|
|
return 'BOOLEAN{' + bool.value + '}';
|
||
|
|
};
|
||
|
|
|
||
|
|
PrintVisitor.prototype.UndefinedLiteral = function () {
|
||
|
|
return 'UNDEFINED';
|
||
|
|
};
|
||
|
|
|
||
|
|
PrintVisitor.prototype.NullLiteral = function () {
|
||
|
|
return 'NULL';
|
||
|
|
};
|
||
|
|
|
||
|
|
PrintVisitor.prototype.Hash = function (hash) {
|
||
|
|
var pairs = hash.pairs,
|
||
|
|
joinedPairs = [];
|
||
|
|
|
||
|
|
for (var i = 0, l = pairs.length; i < l; i++) {
|
||
|
|
joinedPairs.push(this.accept(pairs[i]));
|
||
|
|
}
|
||
|
|
|
||
|
|
return 'HASH{' + joinedPairs.join(', ') + '}';
|
||
|
|
};
|
||
|
|
PrintVisitor.prototype.HashPair = function (pair) {
|
||
|
|
return pair.key + '=' + this.accept(pair.value);
|
||
|
|
};
|
||
|
|
/* eslint-enable new-cap */
|
||
|
|
});
|
||
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3ByaW50ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUdPLFdBQVMsS0FBSyxDQUFDLEdBQUcsRUFBRTtBQUN6QixXQUFPLElBQUksWUFBWSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0dBQ3ZDOztBQUVNLFdBQVMsWUFBWSxHQUFHO0FBQzdCLFFBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0dBQ2xCOztBQUVELGNBQVksQ0FBQyxTQUFTLEdBQUcseUJBQWEsQ0FBQzs7QUFFdkMsY0FBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsVUFBUyxNQUFNLEVBQUU7QUFDNUMsUUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDOztBQUViLFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUMsU0FBRyxJQUFJLElBQUksQ0FBQztLQUNiOztBQUVELE9BQUcsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQzs7QUFFRixjQUFZLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxVQUFTLE9BQU8sRUFBRTtBQUNqRCxRQUFJLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJO1FBQ25CLENBQUMsWUFBQTtRQUFFLENBQUMsWUFBQSxDQUFDOztBQUVULFFBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtBQUN2QixVQUFJLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQztBQUNwQyxXQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFD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
|