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