2016-11-16 01:59:39 +01:00
|
|
|
// Generated by CoffeeScript 1.9.1
|
2016-11-03 01:33:53 +01:00
|
|
|
(function() {
|
2016-11-16 01:59:39 +01:00
|
|
|
var XMLStringifier,
|
2016-11-03 01:33:53 +01:00
|
|
|
bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
|
|
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
|
|
|
|
module.exports = XMLStringifier = (function() {
|
|
|
|
function XMLStringifier(options) {
|
|
|
|
this.assertLegalChar = bind(this.assertLegalChar, this);
|
2016-11-16 01:59:39 +01:00
|
|
|
var key, ref, value;
|
|
|
|
this.allowSurrogateChars = options != null ? options.allowSurrogateChars : void 0;
|
|
|
|
this.noDoubleEncoding = options != null ? options.noDoubleEncoding : void 0;
|
|
|
|
ref = (options != null ? options.stringify : void 0) || {};
|
|
|
|
for (key in ref) {
|
|
|
|
if (!hasProp.call(ref, key)) continue;
|
|
|
|
value = ref[key];
|
2016-11-03 01:33:53 +01:00
|
|
|
this[key] = value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
XMLStringifier.prototype.eleName = function(val) {
|
|
|
|
val = '' + val || '';
|
|
|
|
return this.assertLegalChar(val);
|
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.eleText = function(val) {
|
|
|
|
val = '' + val || '';
|
|
|
|
return this.assertLegalChar(this.elEscape(val));
|
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.cdata = function(val) {
|
|
|
|
val = '' + val || '';
|
2016-11-16 01:59:39 +01:00
|
|
|
if (val.match(/]]>/)) {
|
|
|
|
throw new Error("Invalid CDATA text: " + val);
|
|
|
|
}
|
2016-11-03 01:33:53 +01:00
|
|
|
return this.assertLegalChar(val);
|
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.comment = function(val) {
|
|
|
|
val = '' + val || '';
|
|
|
|
if (val.match(/--/)) {
|
|
|
|
throw new Error("Comment text cannot contain double-hypen: " + val);
|
|
|
|
}
|
|
|
|
return this.assertLegalChar(val);
|
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.raw = function(val) {
|
|
|
|
return '' + val || '';
|
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.attName = function(val) {
|
2016-11-16 01:59:39 +01:00
|
|
|
return '' + val || '';
|
2016-11-03 01:33:53 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.attValue = function(val) {
|
|
|
|
val = '' + val || '';
|
|
|
|
return this.attEscape(val);
|
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.insTarget = function(val) {
|
|
|
|
return '' + val || '';
|
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.insValue = function(val) {
|
|
|
|
val = '' + val || '';
|
|
|
|
if (val.match(/\?>/)) {
|
|
|
|
throw new Error("Invalid processing instruction value: " + val);
|
|
|
|
}
|
|
|
|
return val;
|
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.xmlVersion = function(val) {
|
|
|
|
val = '' + val || '';
|
|
|
|
if (!val.match(/1\.[0-9]+/)) {
|
|
|
|
throw new Error("Invalid version number: " + val);
|
|
|
|
}
|
|
|
|
return val;
|
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.xmlEncoding = function(val) {
|
|
|
|
val = '' + val || '';
|
|
|
|
if (!val.match(/^[A-Za-z](?:[A-Za-z0-9._-]|-)*$/)) {
|
|
|
|
throw new Error("Invalid encoding: " + val);
|
|
|
|
}
|
|
|
|
return val;
|
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.xmlStandalone = function(val) {
|
|
|
|
if (val) {
|
|
|
|
return "yes";
|
|
|
|
} else {
|
|
|
|
return "no";
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.dtdPubID = function(val) {
|
|
|
|
return '' + val || '';
|
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.dtdSysID = function(val) {
|
|
|
|
return '' + val || '';
|
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.dtdElementValue = function(val) {
|
|
|
|
return '' + val || '';
|
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.dtdAttType = function(val) {
|
|
|
|
return '' + val || '';
|
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.dtdAttDefault = function(val) {
|
|
|
|
if (val != null) {
|
|
|
|
return '' + val || '';
|
|
|
|
} else {
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.dtdEntityValue = function(val) {
|
|
|
|
return '' + val || '';
|
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.dtdNData = function(val) {
|
|
|
|
return '' + val || '';
|
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.convertAttKey = '@';
|
|
|
|
|
|
|
|
XMLStringifier.prototype.convertPIKey = '?';
|
|
|
|
|
|
|
|
XMLStringifier.prototype.convertTextKey = '#text';
|
|
|
|
|
|
|
|
XMLStringifier.prototype.convertCDataKey = '#cdata';
|
|
|
|
|
|
|
|
XMLStringifier.prototype.convertCommentKey = '#comment';
|
|
|
|
|
|
|
|
XMLStringifier.prototype.convertRawKey = '#raw';
|
|
|
|
|
|
|
|
XMLStringifier.prototype.assertLegalChar = function(str) {
|
|
|
|
var chars, chr;
|
|
|
|
if (this.allowSurrogateChars) {
|
|
|
|
chars = /[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uFFFE-\uFFFF]/;
|
|
|
|
} else {
|
|
|
|
chars = /[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uD800-\uDFFF\uFFFE-\uFFFF]/;
|
|
|
|
}
|
|
|
|
chr = str.match(chars);
|
|
|
|
if (chr) {
|
|
|
|
throw new Error("Invalid character (" + chr + ") in string: " + str + " at index " + chr.index);
|
|
|
|
}
|
|
|
|
return str;
|
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.elEscape = function(str) {
|
|
|
|
var ampregex;
|
|
|
|
ampregex = this.noDoubleEncoding ? /(?!&\S+;)&/g : /&/g;
|
|
|
|
return str.replace(ampregex, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\r/g, '
');
|
|
|
|
};
|
|
|
|
|
|
|
|
XMLStringifier.prototype.attEscape = function(str) {
|
|
|
|
var ampregex;
|
|
|
|
ampregex = this.noDoubleEncoding ? /(?!&\S+;)&/g : /&/g;
|
2016-11-16 01:59:39 +01:00
|
|
|
return str.replace(ampregex, '&').replace(/</g, '<').replace(/"/g, '"');
|
2016-11-03 01:33:53 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
return XMLStringifier;
|
|
|
|
|
|
|
|
})();
|
|
|
|
|
|
|
|
}).call(this);
|