| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | 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();    };};
 |