grunt-zuckrig-closure
Version:
Reduce a verbose syntax for Google Closure Compiler to be more Pythonic/Rubistic.
59 lines (51 loc) • 1.41 kB
JavaScript
/**
Inspirated by https://github.com/steida/coffee2closure
*/
var Writer;
Writer = (function() {
function Writer() {}
Writer.prototype._create_space = function(length, new_line) {
var space;
if (length < 0) {
return '';
}
space = new Array(length + 1).join(' ');
if (new_line) {
space = '\n' + space;
}
return space;
};
Writer.prototype.write = function(tokens) {
var i, new_line, prev, source, token, _i, _len;
source = '';
prev = null;
for (i = _i = 0, _len = tokens.length; _i < _len; i = ++_i) {
token = tokens[i];
new_line = false;
if (prev != null) {
new_line = token.loc.start.line !== prev.loc.end.line;
if (new_line) {
source += this._create_space(token.loc.start.column, true);
} else {
source += this._create_space(token.loc.start.column - prev.loc.end.column);
}
}
if (token.type === 'NewBlock') {
source += " /*" + token.value + " */";
} else if (token.type === 'Block') {
source += "/*" + token.value + "*/";
} else if (token.type === 'Line') {
source += "//" + token.value;
} else {
source += token.value;
if (token.value === ';') {
source += "\n";
}
}
prev = token;
}
return source;
};
return Writer;
})();
module.exports = Writer;