You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
738 B
51 lines
738 B
4 years ago
|
|
||
|
/**
|
||
|
* Expose `Compiler`.
|
||
|
*/
|
||
|
|
||
|
module.exports = Compiler;
|
||
|
|
||
|
/**
|
||
|
* Initialize a compiler.
|
||
|
*
|
||
|
* @param {Type} name
|
||
|
* @return {Type}
|
||
|
* @api public
|
||
|
*/
|
||
|
|
||
|
function Compiler(opts) {
|
||
|
this.options = opts || {};
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Emit `str`
|
||
|
*/
|
||
|
|
||
|
Compiler.prototype.emit = function(str) {
|
||
|
return str;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Visit `node`.
|
||
|
*/
|
||
|
|
||
|
Compiler.prototype.visit = function(node){
|
||
|
return this[node.type](node);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Map visit over array of `nodes`, optionally using a `delim`
|
||
|
*/
|
||
|
|
||
|
Compiler.prototype.mapVisit = function(nodes, delim){
|
||
|
var buf = '';
|
||
|
delim = delim || '';
|
||
|
|
||
|
for (var i = 0, length = nodes.length; i < length; i++) {
|
||
|
buf += this.visit(nodes[i]);
|
||
|
if (delim && i < length - 1) buf += this.emit(delim);
|
||
|
}
|
||
|
|
||
|
return buf;
|
||
|
};
|