| // 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); |