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.
|
|
var sourceMap = require('./sourceMap'); var hasOwnProperty = Object.prototype.hasOwnProperty;
function processChildren(node, delimeter) { var list = node.children; var prev = null;
if (typeof delimeter !== 'function') { list.forEach(this.node, this); } else { list.forEach(function(node) { if (prev !== null) { delimeter.call(this, prev); }
this.node(node); prev = node; }, this); } }
module.exports = function createGenerator(config) { function processNode(node) { if (hasOwnProperty.call(types, node.type)) { types[node.type].call(this, node); } else { throw new Error('Unknown node type: ' + node.type); } }
var types = {};
if (config.node) { for (var name in config.node) { types[name] = config.node[name].generate; } }
return function(node, options) { var buffer = ''; var handlers = { children: processChildren, node: processNode, chunk: function(chunk) { buffer += chunk; }, result: function() { return buffer; } };
if (options) { if (typeof options.decorator === 'function') { handlers = options.decorator(handlers); }
if (options.sourceMap) { handlers = sourceMap(handlers); } }
handlers.node(node);
return handlers.result(); }; };
|