|                                                                                                                               |  | // Generated by CoffeeScript 1.12.7
(function() {  "use strict";  var builder, defaults, escapeCDATA, requiresCDATA, wrapCDATA,    hasProp = {}.hasOwnProperty;
  builder = require('xmlbuilder');
  defaults = require('./defaults').defaults;
  requiresCDATA = function(entry) {    return typeof entry === "string" && (entry.indexOf('&') >= 0 || entry.indexOf('>') >= 0 || entry.indexOf('<') >= 0);  };
  wrapCDATA = function(entry) {    return "<![CDATA[" + (escapeCDATA(entry)) + "]]>";  };
  escapeCDATA = function(entry) {    return entry.replace(']]>', ']]]]><![CDATA[>');  };
  exports.Builder = (function() {    function Builder(opts) {      var key, ref, value;      this.options = {};      ref = defaults["0.2"];      for (key in ref) {        if (!hasProp.call(ref, key)) continue;        value = ref[key];        this.options[key] = value;      }      for (key in opts) {        if (!hasProp.call(opts, key)) continue;        value = opts[key];        this.options[key] = value;      }    }
    Builder.prototype.buildObject = function(rootObj) {      var attrkey, charkey, render, rootElement, rootName;      attrkey = this.options.attrkey;      charkey = this.options.charkey;      if ((Object.keys(rootObj).length === 1) && (this.options.rootName === defaults['0.2'].rootName)) {        rootName = Object.keys(rootObj)[0];        rootObj = rootObj[rootName];      } else {        rootName = this.options.rootName;      }      render = (function(_this) {        return function(element, obj) {          var attr, child, entry, index, key, value;          if (typeof obj !== 'object') {            if (_this.options.cdata && requiresCDATA(obj)) {              element.raw(wrapCDATA(obj));            } else {              element.txt(obj);            }          } else if (Array.isArray(obj)) {            for (index in obj) {              if (!hasProp.call(obj, index)) continue;              child = obj[index];              for (key in child) {                entry = child[key];                element = render(element.ele(key), entry).up();              }            }          } else {            for (key in obj) {              if (!hasProp.call(obj, key)) continue;              child = obj[key];              if (key === attrkey) {                if (typeof child === "object") {                  for (attr in child) {                    value = child[attr];                    element = element.att(attr, value);                  }                }              } else if (key === charkey) {                if (_this.options.cdata && requiresCDATA(child)) {                  element = element.raw(wrapCDATA(child));                } else {                  element = element.txt(child);                }              } else if (Array.isArray(child)) {                for (index in child) {                  if (!hasProp.call(child, index)) continue;                  entry = child[index];                  if (typeof entry === 'string') {                    if (_this.options.cdata && requiresCDATA(entry)) {                      element = element.ele(key).raw(wrapCDATA(entry)).up();                    } else {                      element = element.ele(key, entry).up();                    }                  } else {                    element = render(element.ele(key), entry).up();                  }                }              } else if (typeof child === "object") {                element = render(element.ele(key), child).up();              } else {                if (typeof child === 'string' && _this.options.cdata && requiresCDATA(child)) {                  element = element.ele(key).raw(wrapCDATA(child)).up();                } else {                  if (child == null) {                    child = '';                  }                  element = element.ele(key, child.toString()).up();                }              }            }          }          return element;        };      })(this);      rootElement = builder.create(rootName, this.options.xmldec, this.options.doctype, {        headless: this.options.headless,        allowSurrogateChars: this.options.allowSurrogateChars      });      return render(rootElement, rootObj).end(this.options.renderOpts);    };
    return Builder;
  })();
}).call(this);
 |