blob: 2850c8add204a0cc468049d6ff3a3ad6c8e8481b [file] [log] [blame]
// Generated by CoffeeScript 1.3.3
(function() {
var XMLBuilder, XMLFragment;
XMLFragment = require('./XMLFragment');
XMLBuilder = (function() {
function XMLBuilder(name, xmldec, doctype) {
var att, child, _ref;
this.children = [];
this.rootObject = null;
if (this.is(name, 'Object')) {
_ref = [name, xmldec], xmldec = _ref[0], doctype = _ref[1];
name = null;
}
if (name != null) {
name = '' + name || '';
if (xmldec == null) {
xmldec = {
'version': '1.0'
};
}
}
if ((xmldec != null) && !(xmldec.version != null)) {
throw new Error("Version number is required");
}
if (xmldec != null) {
xmldec.version = '' + xmldec.version || '';
if (!xmldec.version.match(/1\.[0-9]+/)) {
throw new Error("Invalid version number: " + xmldec.version);
}
att = {
version: xmldec.version
};
if (xmldec.encoding != null) {
xmldec.encoding = '' + xmldec.encoding || '';
if (!xmldec.encoding.match(/[A-Za-z](?:[A-Za-z0-9._-]|-)*/)) {
throw new Error("Invalid encoding: " + xmldec.encoding);
}
att.encoding = xmldec.encoding;
}
if (xmldec.standalone != null) {
att.standalone = xmldec.standalone ? "yes" : "no";
}
child = new XMLFragment(this, '?xml', att);
this.children.push(child);
}
if (doctype != null) {
att = {};
if (name != null) {
att.name = name;
}
if (doctype.ext != null) {
doctype.ext = '' + doctype.ext || '';
att.ext = doctype.ext;
}
child = new XMLFragment(this, '!DOCTYPE', att);
this.children.push(child);
}
if (name != null) {
this.begin(name);
}
}
XMLBuilder.prototype.begin = function(name, xmldec, doctype) {
var doc, root;
if (!(name != null)) {
throw new Error("Root element needs a name");
}
if (this.rootObject) {
this.children = [];
this.rootObject = null;
}
if (xmldec != null) {
doc = new XMLBuilder(name, xmldec, doctype);
return doc.root();
}
name = '' + name || '';
root = new XMLFragment(this, name, {});
root.isRoot = true;
root.documentObject = this;
this.children.push(root);
this.rootObject = root;
return root;
};
XMLBuilder.prototype.root = function() {
return this.rootObject;
};
XMLBuilder.prototype.end = function(options) {
return toString(options);
};
XMLBuilder.prototype.toString = function(options) {
var child, r, _i, _len, _ref;
r = '';
_ref = this.children;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
child = _ref[_i];
r += child.toString(options);
}
return r;
};
XMLBuilder.prototype.is = function(obj, type) {
var clas;
clas = Object.prototype.toString.call(obj).slice(8, -1);
return (obj != null) && clas === type;
};
return XMLBuilder;
})();
module.exports = XMLBuilder;
}).call(this);